diff options
Diffstat (limited to 'tests/auto/corelib/io')
242 files changed, 15508 insertions, 4982 deletions
diff --git a/tests/auto/corelib/io/CMakeLists.txt b/tests/auto/corelib/io/CMakeLists.txt new file mode 100644 index 0000000000..1e66aa8956 --- /dev/null +++ b/tests/auto/corelib/io/CMakeLists.txt @@ -0,0 +1,76 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +# There is no mounted filesystem for IO testing on INTEGRITY yet. +if(INTEGRITY) + return() +endif() + +if(QT_FEATURE_private_tests) + add_subdirectory(qabstractfileengine) + add_subdirectory(qfileinfo) + add_subdirectory(qipaddress) + add_subdirectory(qloggingregistry) + add_subdirectory(qurlinternal) +endif() +add_subdirectory(qbuffer) +add_subdirectory(qdataurl) +add_subdirectory(qdiriterator) +add_subdirectory(qdirlisting) +add_subdirectory(qfile) +add_subdirectory(largefile) +add_subdirectory(qfileselector) +add_subdirectory(qfilesystemmetadata) +add_subdirectory(qloggingcategory) +add_subdirectory(qnodebug) +add_subdirectory(qsavefile) +add_subdirectory(qstandardpaths) +if(NOT QNX AND NOT VXWORKS) + add_subdirectory(qstorageinfo) +endif() +add_subdirectory(qtemporarydir) +add_subdirectory(qtemporaryfile) +add_subdirectory(qurlquery) +add_subdirectory(qurluts46) +if(TARGET Qt::Concurrent) + if(NOT INTEGRITY) + add_subdirectory(qdebug) + endif() + add_subdirectory(qlockfile) + add_subdirectory(qurl) +endif() +if(NOT ANDROID) + add_subdirectory(qdir) + add_subdirectory(qresourceengine) +endif() +if(QT_FEATURE_private_tests) + add_subdirectory(qfilesystementry) +endif() +# QTBUG-88508 +if(QT_FEATURE_filesystemwatcher AND NOT ANDROID) + add_subdirectory(qfilesystemwatcher) +endif() +if(TARGET Qt::Network) + add_subdirectory(qiodevice) +endif() +if(QT_FEATURE_process AND TARGET Qt::Network AND NOT ANDROID) + add_subdirectory(qprocess) +endif() +if(QT_FEATURE_process) + add_subdirectory(qprocess-noapplication) +endif() +if(QT_FEATURE_processenvironment) + add_subdirectory(qprocessenvironment) +endif() +if(QT_FEATURE_settings AND TARGET Qt::Gui) + add_subdirectory(qsettings) +endif() +if(QT_FEATURE_private_tests) + add_subdirectory(qzip) +endif() +if(NOT (MACOS AND "$ENV{QT_BUILD_ENVIRONMENT}" STREQUAL "ci")) + # On macOS the new features require at least macOS 13.3, + # but we also run the tests on older OS versions. + # So just skip macOS on CI for now. + add_subdirectory(qfloat16format) +endif() diff --git a/tests/auto/corelib/io/io.pro b/tests/auto/corelib/io/io.pro deleted file mode 100644 index eee2c0e30d..0000000000 --- a/tests/auto/corelib/io/io.pro +++ /dev/null @@ -1,77 +0,0 @@ -TEMPLATE=subdirs -SUBDIRS=\ - qabstractfileengine \ - qbuffer \ - qdataurl \ - qdebug \ - qdir \ - qdiriterator \ - qfile \ - largefile \ - qfileinfo \ - qfileselector \ - qfilesystemmetadata \ - qfilesystementry \ - qfilesystemwatcher \ - qiodevice \ - qipaddress \ - qlockfile \ - qloggingcategory \ - qloggingregistry \ - qnodebug \ - qprocess \ - qprocess-noapplication \ - qprocessenvironment \ - qresourceengine \ - qsettings \ - qsavefile \ - qstandardpaths \ - qstorageinfo \ - qtemporarydir \ - qtemporaryfile \ - qurl \ - qurlinternal \ - qurlquery \ - -!qtHaveModule(gui): SUBDIRS -= \ - qsettings - -!qtHaveModule(network): SUBDIRS -= \ - qiodevice \ - qprocess - -!qtHaveModule(concurrent): SUBDIRS -= \ - qdebug \ - qlockfile \ - qurl - -!qtConfig(private_tests): SUBDIRS -= \ - qabstractfileengine \ - qfileinfo \ - qipaddress \ - qurlinternal \ - qloggingregistry - -win32:!qtConfig(private_tests): SUBDIRS -= \ - qfilesystementry - -!qtConfig(filesystemwatcher): SUBDIRS -= \ - qfilesystemwatcher - -!qtConfig(processenvironment): SUBDIRS -= \ - qprocessenvironment - -!qtConfig(process): SUBDIRS -= \ - qprocess \ - qprocess-noapplication - -!qtConfig(settings): SUBDIRS -= \ - qsettings - -winrt: SUBDIRS -= \ - qstorageinfo - -android: SUBDIRS -= \ - qprocess \ - qdir \ - qresourceengine diff --git a/tests/auto/corelib/io/largefile/CMakeLists.txt b/tests/auto/corelib/io/largefile/CMakeLists.txt new file mode 100644 index 0000000000..17b411ab33 --- /dev/null +++ b/tests/auto/corelib/io/largefile/CMakeLists.txt @@ -0,0 +1,19 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_largefile Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_largefile LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +qt_internal_add_test(tst_largefile + SOURCES + tst_largefile.cpp + LIBRARIES + Qt::TestPrivate +) diff --git a/tests/auto/corelib/io/largefile/largefile.pro b/tests/auto/corelib/io/largefile/largefile.pro deleted file mode 100644 index e96d1398ca..0000000000 --- a/tests/auto/corelib/io/largefile/largefile.pro +++ /dev/null @@ -1,6 +0,0 @@ -CONFIG += testcase -TARGET = tst_largefile -QT = core testlib -SOURCES = tst_largefile.cpp -INCLUDEPATH += ../../../../shared/ -HEADERS += ../../../../shared/emulationdetector.h diff --git a/tests/auto/corelib/io/largefile/tst_largefile.cpp b/tests/auto/corelib/io/largefile/tst_largefile.cpp index e6d2f10c16..f5af3bde63 100644 --- a/tests/auto/corelib/io/largefile/tst_largefile.cpp +++ b/tests/auto/corelib/io/largefile/tst_largefile.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QTest> @@ -48,7 +23,7 @@ # endif #endif // Q_OS_WIN -#include "emulationdetector.h" +#include <QtTest/private/qemulationdetector_p.h> class tst_LargeFile : public QObject @@ -62,18 +37,29 @@ public: , fd_(-1) , stream_(0) { - #if defined(QT_LARGEFILE_SUPPORT) && !defined(Q_OS_MAC) && !defined(Q_OS_WINRT) - maxSizeBits = 36; // 64 GiB - #elif defined(Q_OS_MAC) + #if defined(Q_OS_DARWIN) // HFS+ does not support sparse files, so we limit file size for the test // on Mac OS. maxSizeBits = 24; // 16 MiB + #elif defined(Q_OS_QNX) + // Many of the filesystems that QNX supports use a 32-bit format. + // This means that files are limited to 2 GB − 1 bytes. + // Limit max size to 256MB + maxSizeBits = 28; // 256 MiB + #elif defined(Q_OS_VXWORKS) + // VxWorks doesn't support sparse files, also, default /tmp directory is a RAM-disk which + // limits its capacity. + maxSizeBits = 28; // 256 MiB + #elif defined (Q_OS_WASM) + maxSizeBits = 28; // 256 MiB + #elif defined(QT_LARGEFILE_SUPPORT) + maxSizeBits = 36; // 64 GiB #else maxSizeBits = 24; // 16 MiB #endif // QEMU only supports < 4GB files - if (EmulationDetector::isRunningArmOnX86()) + if (QTestPrivate::isRunningArmOnX86()) maxSizeBits = qMin(maxSizeBits, 28); } @@ -127,7 +113,7 @@ private: QFile largeFile; - QVector<QByteArray> generatedBlocks; + QByteArrayList generatedBlocks; int fd_; FILE *stream_; @@ -299,7 +285,7 @@ void tst_LargeFile::createSparseFile() DWORD bytes; if (!::DeviceIoControl(handle, FSCTL_SET_SPARSE, NULL, 0, NULL, 0, &bytes, NULL)) { - QWARN("Unable to set test file as sparse. " + qWarning("Unable to set test file as sparse. " "Limiting test file to 16MiB."); maxSizeBits = 24; } @@ -347,11 +333,10 @@ void tst_LargeFile::fillFileSparsely() { if (failed) { this_->maxSizeBits = lastKnownGoodIndex; - QWARN( qPrintable( - QString("QFile::error %1: '%2'. Maximum size bits reset to %3.") - .arg(this_->largeFile.error()) - .arg(this_->largeFile.errorString()) - .arg(this_->maxSizeBits)) ); + qWarning("QFile::error %d: '%s'. Maximum size bits reset to %d.", + this_->largeFile.error(), + qPrintable(this_->largeFile.errorString()), + this_->maxSizeBits); } else lastKnownGoodIndex = qMax<int>(index_, lastKnownGoodIndex); } @@ -512,19 +497,26 @@ void tst_LargeFile::mapFile() //Linux: memory-mapping beyond EOF usually succeeds, but depends on the filesystem // 32-bit: limited to 44-bit offsets (when sizeof(off_t) == 8) //Windows: memory-mapping beyond EOF is not allowed +//wasm: as for linux +//VxWorks: memory-mapping beyond EOF is not allowed void tst_LargeFile::mapOffsetOverflow() { enum { -#ifdef Q_OS_WIN +#if defined(Q_OS_WIN) Succeeds = false, MaxOffset = 63 -#else +#elif defined(Q_OS_WASM) + Succeeds = true, + MaxOffset = sizeof(QT_OFF_T) > 4 ? 43 : 30 +#elif (defined(Q_OS_LINUX) || defined(Q_OS_ANDROID)) && (Q_PROCESSOR_WORDSIZE == 4) Succeeds = true, -# if (defined(Q_OS_LINUX) || defined(Q_OS_ANDROID)) && Q_PROCESSOR_WORDSIZE == 4 MaxOffset = sizeof(QT_OFF_T) > 4 ? 43 : 30 -# else +#elif defined(Q_OS_VXWORKS) + Succeeds = false, + MaxOffset = 8 * sizeof(QT_OFF_T) - 1 +#else + Succeeds = true, MaxOffset = 8 * sizeof(QT_OFF_T) - 1 -# endif #endif }; diff --git a/tests/auto/corelib/io/qabstractfileengine/CMakeLists.txt b/tests/auto/corelib/io/qabstractfileengine/CMakeLists.txt new file mode 100644 index 0000000000..7e7ad98d73 --- /dev/null +++ b/tests/auto/corelib/io/qabstractfileengine/CMakeLists.txt @@ -0,0 +1,32 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qabstractfileengine Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qabstractfileengine LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +qt_internal_add_test(tst_qabstractfileengine + SOURCES + tst_qabstractfileengine.cpp + LIBRARIES + Qt::CorePrivate +) + +# Resources: +set(qabstractfileengine_resource_files + "resources/" +) + +qt_internal_add_resource(tst_qabstractfileengine "qabstractfileengine" + PREFIX + "/tst_qabstractfileengine/" + FILES + ${qabstractfileengine_resource_files} +) + diff --git a/tests/auto/corelib/io/qabstractfileengine/qabstractfileengine.pro b/tests/auto/corelib/io/qabstractfileengine/qabstractfileengine.pro deleted file mode 100644 index 641bb7341b..0000000000 --- a/tests/auto/corelib/io/qabstractfileengine/qabstractfileengine.pro +++ /dev/null @@ -1,5 +0,0 @@ -CONFIG += testcase -TARGET = tst_qabstractfileengine -QT = core-private core testlib -SOURCES = tst_qabstractfileengine.cpp -RESOURCES += qabstractfileengine.qrc diff --git a/tests/auto/corelib/io/qabstractfileengine/qabstractfileengine.qrc b/tests/auto/corelib/io/qabstractfileengine/qabstractfileengine.qrc deleted file mode 100644 index 5401b086b2..0000000000 --- a/tests/auto/corelib/io/qabstractfileengine/qabstractfileengine.qrc +++ /dev/null @@ -1,5 +0,0 @@ -<!DOCTYPE RCC><RCC version="1.0"> -<qresource prefix="/tst_qabstractfileengine/"> - <file>resources/</file> -</qresource> -</RCC> diff --git a/tests/auto/corelib/io/qabstractfileengine/tst_qabstractfileengine.cpp b/tests/auto/corelib/io/qabstractfileengine/tst_qabstractfileengine.cpp index 1072cb44f9..cf00c1525c 100644 --- a/tests/auto/corelib/io/qabstractfileengine/tst_qabstractfileengine.cpp +++ b/tests/auto/corelib/io/qabstractfileengine/tst_qabstractfileengine.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the FOO module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QtCore/private/qabstractfileengine_p.h> #include <QtCore/private/qfsfileengine_p.h> @@ -42,6 +17,8 @@ #include <QtCore/QDebug> #include "../../../../shared/filesystem.h" +using namespace Qt::StringLiterals; + class tst_QAbstractFileEngine : public QObject { @@ -76,8 +53,10 @@ public: { } - bool open(QIODevice::OpenMode openMode) + bool open(QIODevice::OpenMode openMode, std::optional<QFile::Permissions> permissions) override { + Q_UNUSED(permissions); + if (openForRead_ || openForWrite_) { qWarning("%s: file is already open for %s", Q_FUNC_INFO, @@ -108,7 +87,7 @@ public: return true; } - bool close() + bool close() override { openFile_.clear(); @@ -119,7 +98,7 @@ public: return true; } - qint64 size() const + qint64 size() const override { QSharedPointer<File> file = resolveFile(false); if (!file) @@ -129,7 +108,7 @@ public: return file->content.size(); } - qint64 pos() const + qint64 pos() const override { if (!openForRead_ && !openForWrite_) { qWarning("%s: file is not open", Q_FUNC_INFO); @@ -138,7 +117,7 @@ public: return position_; } - bool seek(qint64 pos) + bool seek(qint64 pos) override { if (!openForRead_ && !openForWrite_) { qWarning("%s: file is not open", Q_FUNC_INFO); @@ -153,7 +132,7 @@ public: return false; } - bool flush() + bool flush() override { if (!openForRead_ && !openForWrite_) { qWarning("%s: file is not open", Q_FUNC_INFO); @@ -163,7 +142,7 @@ public: return true; } - bool remove() + bool remove() override { QMutexLocker lock(&fileSystemMutex); int count = fileSystem.remove(fileName_); @@ -171,7 +150,7 @@ public: return (count == 1); } - bool copy(const QString &newName) + bool copy(const QString &newName) override { QMutexLocker lock(&fileSystemMutex); if (!fileSystem.contains(fileName_) @@ -182,7 +161,7 @@ public: return true; } - bool rename(const QString &newName) + bool rename(const QString &newName) override { QMutexLocker lock(&fileSystemMutex); if (!fileSystem.contains(fileName_) @@ -193,29 +172,7 @@ public: return true; } - // bool link(const QString &newName) - // { - // Q_UNUSED(newName) - // return false; - // } - - // bool mkdir(const QString &dirName, bool createParentDirectories) const - // { - // Q_UNUSED(dirName) - // Q_UNUSED(createParentDirectories) - - // return false; - // } - - // bool rmdir(const QString &dirName, bool recurseParentDirectories) const - // { - // Q_UNUSED(dirName) - // Q_UNUSED(recurseParentDirectories) - - // return false; - // } - - bool setSize(qint64 size) + bool setSize(qint64 size) override { if (size < 0) return false; @@ -234,7 +191,7 @@ public: return (file->content.size() == size); } - FileFlags fileFlags(FileFlags type) const + FileFlags fileFlags(FileFlags type) const override { QSharedPointer<File> file = resolveFile(false); if (file) { @@ -245,14 +202,7 @@ public: return FileFlags(); } - // bool setPermissions(uint perms) - // { - // Q_UNUSED(perms) - - // return false; - // } - - QString fileName(FileName file) const + QString fileName(FileName file) const override { switch (file) { case DefaultName: @@ -265,8 +215,10 @@ public: return QLatin1String("AbsoluteName"); case AbsolutePathName: return QLatin1String("AbsolutePathName"); - case LinkName: - return QLatin1String("LinkName"); + case AbsoluteLinkTarget: + return QLatin1String("AbsoluteLinkTarget"); + case RawLinkPath: + return QLatin1String("RawLinkPath"); case CanonicalName: return QLatin1String("CanonicalName"); case CanonicalPathName: @@ -281,7 +233,7 @@ public: return QString(); } - uint ownerId(FileOwner owner) const + uint ownerId(FileOwner owner) const override { QSharedPointer<File> file = resolveFile(false); if (file) { @@ -302,7 +254,7 @@ public: return -2; } - QString owner(FileOwner owner) const + QString owner(FileOwner owner) const override { QSharedPointer<File> file = resolveFile(false); if (file) { @@ -335,19 +287,19 @@ public: return QString(); } - QDateTime fileTime(FileTime time) const + QDateTime fileTime(QFile::FileTime time) const override { QSharedPointer<File> file = resolveFile(false); if (file) { QMutexLocker lock(&file->mutex); switch (time) { - case BirthTime: + case QFile::FileBirthTime: return file->birth; - case MetadataChangeTime: + case QFile::FileMetadataChangeTime: return file->change; - case ModificationTime: + case QFile::FileModificationTime: return file->modification; - case AccessTime: + case QFile::FileAccessTime: return file->access; } } @@ -355,14 +307,7 @@ public: return QDateTime(); } - bool setFileTime(const QDateTime &newDate, FileTime time) - { - Q_UNUSED(newDate); - Q_UNUSED(time); - return false; - } - - void setFileName(const QString &file) + void setFileName(const QString &file) override { if (openForRead_ || openForWrite_) qWarning("%s: Can't set file name while file is open", Q_FUNC_INFO); @@ -370,21 +315,7 @@ public: fileName_ = file; } - // typedef QAbstractFileEngineIterator Iterator; - // Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) - // { - // Q_UNUSED(filters) - // Q_UNUSED(filterNames) - - // return 0; - // } - - // Iterator *endEntryList() - // { - // return 0; - // } - - qint64 read(char *data, qint64 maxLen) + qint64 read(char *data, qint64 maxLen) override { if (!openForRead_) { qWarning("%s: file must be open for reading", Q_FUNC_INFO); @@ -407,7 +338,7 @@ public: return readSize; } - qint64 write(const char *data, qint64 length) + qint64 write(const char *data, qint64 length) override { if (!openForWrite_) { qWarning("%s: file must be open for writing", Q_FUNC_INFO); @@ -501,27 +432,28 @@ public: class Iterator : public QAbstractFileEngineIterator { public: - Iterator(QDir::Filters filters, const QStringList &filterNames) - : QAbstractFileEngineIterator(filters, filterNames) + Iterator(const QString &path, QDir::Filters filters, const QStringList &filterNames) + : QAbstractFileEngineIterator(path, filters, filterNames) { names.append("foo"); names.append("bar"); index = -1; } - QString currentFileName() const - { - return names.at(index); - } - bool hasNext() const + QString currentFileName() const override { - return index < names.size() - 1; + if (!names.isEmpty() && index < names.size()) + return names.at(index); + return {}; } - QString next() + bool advance() override { - if (!hasNext()) - return QString(); - ++index; - return currentFilePath(); + if (names.isEmpty()) + return false; + if (index < names.size() - 1) { + ++index; + return true; + } + return false; } QStringList names; int index; @@ -530,11 +462,13 @@ public: : QFSFileEngine(fileName) { } - Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) + + IteratorUniquePtr + beginEntryList(const QString &path, QDir::Filters filters, const QStringList &filterNames) override { - return new Iterator(filters, filterNames); + return std::make_unique<Iterator>(path, filters, filterNames); } - FileFlags fileFlags(FileFlags type) const + FileFlags fileFlags(FileFlags type) const override { if (fileName(DefaultName).endsWith(".tar")) { FileFlags ret = QFSFileEngine::fileFlags(type); @@ -556,18 +490,27 @@ QHash<QString, QSharedPointer<ReferenceFileEngine::File> > ReferenceFileEngine:: class FileEngineHandler : QAbstractFileEngineHandler { - QAbstractFileEngine *create(const QString &fileName) const + Q_DISABLE_COPY_MOVE(FileEngineHandler) + std::unique_ptr<QAbstractFileEngine> create(const QString &fileName) const override { if (fileName.endsWith(".tar") || fileName.contains(".tar/")) - return new MountingFileEngine(fileName); - if (fileName.startsWith("QFSFileEngine:")) - return new QFSFileEngine(fileName.mid(14)); - if (fileName.startsWith("reference-file-engine:")) - return new ReferenceFileEngine(fileName.mid(22)); - if (fileName.startsWith("resource:")) - return QAbstractFileEngine::create(QLatin1String(":/tst_qabstractfileengine/resources/") + fileName.mid(9)); - return 0; + return std::make_unique<MountingFileEngine>(fileName); + + if (auto l1 = "QFSFileEngine:"_L1; fileName.startsWith(l1)) + return std::make_unique<QFSFileEngine>(fileName.sliced(l1.size())); + + if (auto l1 = "reference-file-engine:"_L1; fileName.startsWith(l1)) + return std::make_unique<ReferenceFileEngine>(fileName.sliced(l1.size())); + + if (auto l1 = "resource:"_L1; fileName.startsWith(l1)) { + const auto p = ":/tst_qabstractfileengine/resources/"_L1 + fileName.sliced(l1.size()); + return QAbstractFileEngine::create(p); + } + + return nullptr; } +public: + FileEngineHandler() = default; }; void tst_QAbstractFileEngine::initTestCase() @@ -583,12 +526,13 @@ void tst_QAbstractFileEngine::cleanupTestCase() bool failed = false; FileEngineHandler handler; - Q_FOREACH(QString file, filesForRemoval) + for (const QString &file : std::as_const(filesForRemoval)) { if (!QFile::remove(file) || QFile::exists(file)) { failed = true; qDebug() << "Couldn't remove file:" << file; } + } QVERIFY(!failed); @@ -597,9 +541,9 @@ void tst_QAbstractFileEngine::cleanupTestCase() void tst_QAbstractFileEngine::customHandler() { - QScopedPointer<QAbstractFileEngine> file; + std::unique_ptr<QAbstractFileEngine> file; { - file.reset(QAbstractFileEngine::create("resource:file.txt")); + file = QAbstractFileEngine::create(u"resource:file.txt"_s); QVERIFY(file); } @@ -677,12 +621,12 @@ void tst_QAbstractFileEngine::fileIO() * the original size + the '\r' characters added by autocrlf. */ QFile::OpenMode openMode = QIODevice::ReadOnly | QIODevice::Unbuffered; -#ifdef Q_OS_WIN +#if defined (Q_OS_WIN) || defined(Q_OS_WASM) openMode |= QIODevice::Text; #endif QVERIFY(file.open(openMode)); QVERIFY(file.isOpen()); -#ifdef Q_OS_WIN +#if defined(Q_OS_WIN) || defined(Q_OS_WASM) const qint64 convertedSize = fileSize + readContent.count('\n'); if (file.size() == convertedSize) fileSize = convertedSize; @@ -894,7 +838,8 @@ void tst_QAbstractFileEngine::mounting() QCOMPARE(dir.entryList(), (QStringList() << "bar" << "foo")); QDir dir2(fs.path()); bool found = false; - foreach (QFileInfo info, dir2.entryInfoList()) { + const auto entries = dir2.entryInfoList(); + for (const QFileInfo &info : entries) { if (info.fileName() == QLatin1String("test.tar")) { QVERIFY(!found); found = true; diff --git a/tests/auto/corelib/io/qbuffer/CMakeLists.txt b/tests/auto/corelib/io/qbuffer/CMakeLists.txt new file mode 100644 index 0000000000..87022451a0 --- /dev/null +++ b/tests/auto/corelib/io/qbuffer/CMakeLists.txt @@ -0,0 +1,17 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qbuffer Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qbuffer LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +qt_internal_add_test(tst_qbuffer + SOURCES + tst_qbuffer.cpp +) diff --git a/tests/auto/corelib/io/qbuffer/qbuffer.pro b/tests/auto/corelib/io/qbuffer/qbuffer.pro deleted file mode 100644 index 76b1088595..0000000000 --- a/tests/auto/corelib/io/qbuffer/qbuffer.pro +++ /dev/null @@ -1,4 +0,0 @@ -CONFIG += testcase -TARGET = tst_qbuffer -QT = core testlib -SOURCES = tst_qbuffer.cpp diff --git a/tests/auto/corelib/io/qbuffer/tst_qbuffer.cpp b/tests/auto/corelib/io/qbuffer/tst_qbuffer.cpp index 4968742110..acfd60e224 100644 --- a/tests/auto/corelib/io/qbuffer/tst_qbuffer.cpp +++ b/tests/auto/corelib/io/qbuffer/tst_qbuffer.cpp @@ -1,47 +1,28 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtTest/QtTest> +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QTest> +#include <QTestEventLoop> #include <QBuffer> #include <QByteArray> +#include <QElapsedTimer> + +#include <string> class tst_QBuffer : public QObject { Q_OBJECT private slots: void open(); + void openWriteOnlyDoesNotTruncate(); void getSetCheck(); void readBlock(); void readBlockPastEnd(); void writeBlock_data(); void writeBlock(); void seek(); + void invalidSeeks(); void seekTest_data(); void seekTest(); void read_rawdata(); @@ -57,6 +38,7 @@ private slots: void readLineBoundaries(); void getAndUngetChar(); void writeAfterQByteArrayResize(); + void writeOfMoreThan2GiB(); void read_null(); protected slots: @@ -130,6 +112,29 @@ void tst_QBuffer::open() b.close(); } +void tst_QBuffer::openWriteOnlyDoesNotTruncate() +{ + QBuffer b; + const auto data = QByteArrayLiteral("Hey, presto!"); + + { + QVERIFY(b.open(QIODevice::WriteOnly)); + b.write(data); + b.close(); + } + { + QVERIFY(b.open(QIODevice::ReadOnly)); + QCOMPARE(b.readAll(), data); + b.close(); + } + { + QVERIFY(b.open(QIODevice::WriteOnly)); + QCOMPARE(b.size(), data.size()); + QCOMPARE(b.pos(), 0); + b.close(); + } +} + // some status() tests, too void tst_QBuffer::readBlock() { @@ -286,6 +291,29 @@ void tst_QBuffer::seek() QCOMPARE(buffer.size(), pos); } +void tst_QBuffer::invalidSeeks() +{ + if constexpr (sizeof(qsizetype) == sizeof(qint64)) { + // sizeof(qsizetype) == sizeof(qint64), so +1 would overflow + QSKIP("This is a 32-bit-only test."); + } else { + QBuffer buffer; + buffer.open(QIODevice::WriteOnly); + QCOMPARE(buffer.buffer().size(), qsizetype(0)); + QCOMPARE(buffer.pos(), qint64(0)); + constexpr qint64 MaxQByteArrayCapacity = (std::numeric_limits<qsizetype>::max)(); + // this should fail fast, not after trying to allocate nearly 2 GiB of data, + // potentially crashing in the process: + QVERIFY(!buffer.seek(2 * MaxQByteArrayCapacity - 1)); + QCOMPARE(buffer.buffer().size(), qsizetype(0)); + QCOMPARE(buffer.pos(), qint64(0)); + // ditto: + QVERIFY(!buffer.seek(MaxQByteArrayCapacity + 1)); + QCOMPARE(buffer.buffer().size(), qsizetype(0)); + QCOMPARE(buffer.pos(), qint64(0)); + } +} + void tst_QBuffer::seekTest_data() { writeBlock_data(); @@ -598,6 +626,55 @@ void tst_QBuffer::writeAfterQByteArrayResize() QCOMPARE(buffer.buffer().size(), 1000); } +void tst_QBuffer::writeOfMoreThan2GiB() +{ + if constexpr (sizeof(void*) == 4) + QSKIP("This is a 64-bit-only test"); + + [[maybe_unused]] constexpr size_t GiB = 1024 * 1024 * 1024; + +#ifndef QT_NO_EXCEPTIONS + + try { + // + // GIVEN: an empty QBuffer open for writing + // + QBuffer buffer; + QVERIFY(buffer.open(QIODevice::WriteOnly)); + + // + // WHEN: writing more than 2GiB in a singe chunk: + // + QElapsedTimer timer; + timer.start(); + + const std::string input(2 * GiB + 1, 42); + + qDebug("created dataset in %lld ms", timer.restart()); + + const auto inputSize = qint64(input.size()); + + QCOMPARE(buffer.write(input.data(), inputSize), inputSize); + + qDebug("performed write in %lld ms", timer.restart()); + + // + // THEN: the buffer contains the written data + // + QCOMPARE(buffer.buffer().size(), inputSize); + QVERIFY(buffer.buffer() == QByteArrayView{input}); + + qDebug("verified result in %lld ms", timer.elapsed()); + + } catch (const std::bad_alloc &) { + QSKIP("Cannot allocate enough memory for this test"); + } + +#else + QSKIP("This test requires exceptions enabled."); +#endif // QT_NO_EXCEPTIONS +} + void tst_QBuffer::read_null() { QByteArray buffer; diff --git a/tests/auto/corelib/io/qdataurl/CMakeLists.txt b/tests/auto/corelib/io/qdataurl/CMakeLists.txt new file mode 100644 index 0000000000..4157db90d8 --- /dev/null +++ b/tests/auto/corelib/io/qdataurl/CMakeLists.txt @@ -0,0 +1,19 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qdataurl Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qdataurl LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +qt_internal_add_test(tst_qdataurl + SOURCES + tst_qdataurl.cpp + LIBRARIES + Qt::CorePrivate +) diff --git a/tests/auto/corelib/io/qdataurl/qdataurl.pro b/tests/auto/corelib/io/qdataurl/qdataurl.pro deleted file mode 100644 index 7085c9d881..0000000000 --- a/tests/auto/corelib/io/qdataurl/qdataurl.pro +++ /dev/null @@ -1,4 +0,0 @@ -CONFIG += testcase -TARGET = tst_qdataurl -QT = core core-private testlib -SOURCES = tst_qdataurl.cpp diff --git a/tests/auto/corelib/io/qdataurl/tst_qdataurl.cpp b/tests/auto/corelib/io/qdataurl/tst_qdataurl.cpp index 66720d28e0..e694a79101 100644 --- a/tests/auto/corelib/io/qdataurl/tst_qdataurl.cpp +++ b/tests/auto/corelib/io/qdataurl/tst_qdataurl.cpp @@ -1,77 +1,58 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include "private/qdataurl_p.h" -#include <QtTest/QtTest> +#include <QTest> #include <QtCore/QDebug> +using namespace Qt::Literals; + class tst_QDataUrl : public QObject { Q_OBJECT private slots: - void nonData(); - void emptyData(); - void alreadyPercentageEncoded(); + void decode_data(); + void decode(); }; -void tst_QDataUrl::nonData() +void tst_QDataUrl::decode_data() { - QLatin1String data("http://test.com"); - QUrl url(data); - QString mimeType; - QByteArray payload; - bool result = qDecodeDataUrl(url, mimeType, payload); - QVERIFY(!result); -} + QTest::addColumn<QString>("input"); + QTest::addColumn<bool>("result"); + QTest::addColumn<QString>("mimeType"); + QTest::addColumn<QByteArray>("payload"); -void tst_QDataUrl::emptyData() -{ - QLatin1String data("data:text/plain"); - QUrl url(data); - QString mimeType; - QByteArray payload; - bool result = qDecodeDataUrl(url, mimeType, payload); - QVERIFY(result); - QCOMPARE(mimeType, QLatin1String("text/plain;charset=US-ASCII")); - QVERIFY(payload.isNull()); + auto row = [](const char *tag, const char *url, bool success, QString mimeType = {}, QByteArray payload = {}) { + QTest::newRow(tag) << url << success <<mimeType << payload; + }; + + row("nonData", "http://test.com", false); + row("emptyData", "data:text/plain", true, + "text/plain;charset=US-ASCII"_L1); + row("alreadyPercentageEncoded", "data:text/plain,%E2%88%9A", true, + "text/plain"_L1, QByteArray::fromPercentEncoding("%E2%88%9A")); + row("everythingIsCaseInsensitive", "Data:texT/PlaiN;charSet=iSo-8859-1;Base64,SGVsbG8=", true, + "texT/PlaiN;charSet=iSo-8859-1"_L1, QByteArrayLiteral("Hello")); } -void tst_QDataUrl::alreadyPercentageEncoded() +void tst_QDataUrl::decode() { - QLatin1String data("data:text/plain,%E2%88%9A"); - QUrl url(data); - QString mimeType; - QByteArray payload; - bool result = qDecodeDataUrl(url, mimeType, payload); - QVERIFY(result); - QCOMPARE(mimeType, QLatin1String("text/plain")); - QCOMPARE(payload, QByteArray::fromPercentEncoding("%E2%88%9A")); + QFETCH(const QString, input); + QFETCH(const bool, result); + QFETCH(const QString, mimeType); + QFETCH(const QByteArray, payload); + + QString actualMimeType; + QByteArray actualPayload; + + QUrl url(input); + const bool actualResult = qDecodeDataUrl(url, actualMimeType, actualPayload); + + QCOMPARE(actualResult, result); + QCOMPARE(actualMimeType, mimeType); + QCOMPARE(actualPayload, payload); + QCOMPARE(actualPayload.isNull(), payload.isNull()); // assume nullness is significant } QTEST_MAIN(tst_QDataUrl) diff --git a/tests/auto/corelib/io/qdebug/CMakeLists.txt b/tests/auto/corelib/io/qdebug/CMakeLists.txt new file mode 100644 index 0000000000..89d39c4375 --- /dev/null +++ b/tests/auto/corelib/io/qdebug/CMakeLists.txt @@ -0,0 +1,24 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qdebug Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qdebug LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +qt_internal_add_test(tst_qdebug + SOURCES + tst_qdebug.cpp + LIBRARIES + Qt::Concurrent +) + +if (APPLE) + enable_language(OBJCXX) + set_source_files_properties(tst_qdebug.cpp PROPERTIES LANGUAGE OBJCXX) +endif() diff --git a/tests/auto/corelib/io/qdebug/qdebug.pro b/tests/auto/corelib/io/qdebug/qdebug.pro deleted file mode 100644 index 45c0aa4061..0000000000 --- a/tests/auto/corelib/io/qdebug/qdebug.pro +++ /dev/null @@ -1,4 +0,0 @@ -CONFIG += testcase -TARGET = tst_qdebug -QT = core testlib concurrent -SOURCES = tst_qdebug.cpp diff --git a/tests/auto/corelib/io/qdebug/tst_qdebug.cpp b/tests/auto/corelib/io/qdebug/tst_qdebug.cpp index 584e66a7db..15da0758d0 100644 --- a/tests/auto/corelib/io/qdebug/tst_qdebug.cpp +++ b/tests/auto/corelib/io/qdebug/tst_qdebug.cpp @@ -1,39 +1,51 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Copyright (C) 2016 Intel Corporation. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// Copyright (C) 2016 Intel Corporation. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QtCore/QCoreApplication> #include <QtCore/QtDebug> -#include <QtTest/QtTest> +#include <QTest> #include <QtConcurrentRun> #include <QFutureSynchronizer> +#include <QVariant> +#include <QSemaphore> +#include <QLine> +#include <QMimeType> +#include <QMimeDatabase> +#include <QMetaType> + +#include <q20chrono.h> + +#ifdef __cpp_lib_memory_resource +# include <memory_resource> +namespace pmr = std::pmr; +#else +namespace pmr = std; +#endif + +using namespace std::chrono; +using namespace q20::chrono; +using namespace Qt::StringLiterals; + +static_assert(QTypeTraits::has_ostream_operator_v<QDebug, int>); +static_assert(QTypeTraits::has_ostream_operator_v<QDebug, QMetaType>); +static_assert(QTypeTraits::has_ostream_operator_v<QDebug, QList<int>>); +static_assert(QTypeTraits::has_ostream_operator_v<QDebug, QMap<int, QString>>); +struct NonStreamable {}; +static_assert(!QTypeTraits::has_ostream_operator_v<QDebug, NonStreamable>); +static_assert(!QTypeTraits::has_ostream_operator_v<QDebug, QList<NonStreamable>>); +static_assert(!QTypeTraits::has_ostream_operator_v<QDebug, QMap<int, NonStreamable>>); +struct ConvertsToQVariant { + operator QVariant() {return QVariant::fromValue(*this);}; +}; +static_assert(!QTypeTraits::has_ostream_operator_v<QDebug, ConvertsToQVariant>); + +#if defined(Q_OS_DARWIN) +#include <objc/runtime.h> +#include <Foundation/Foundation.h> +#endif class tst_QDebug: public QObject { @@ -49,6 +61,7 @@ private slots: void assignment() const; void warningWithoutDebug() const; void criticalWithoutDebug() const; + void basics() const; void debugWithBool() const; void debugSpaceHandling() const; void debugNoQuotes() const; @@ -56,16 +69,39 @@ private slots: void stateSaver() const; void veryLongWarningMessage() const; void qDebugQChar() const; + void qDebugQMetaType() const; void qDebugQString() const; - void qDebugQStringRef() const; void qDebugQStringView() const; + void qDebugQUtf8StringView() const; void qDebugQLatin1String() const; + void qDebugStdString() const; + void qDebugStdStringView() const; + void qDebugStdWString() const; + void qDebugStdWStringView() const; + void qDebugStdU8String() const; + void qDebugStdU8StringView() const; + void qDebugStdU16String() const; + void qDebugStdU16StringView() const; + void qDebugStdU32String() const; + void qDebugStdU32StringView() const; void qDebugQByteArray() const; + void qDebugQByteArrayView() const; void qDebugQFlags() const; + void qDebugStdChrono_data() const; + void qDebugStdChrono() const; + void qDebugStdOptional() const; void textStreamModifiers() const; void resetFormat() const; void defaultMessagehandler() const; void threadSafety() const; + void toString() const; + void noQVariantEndlessRecursion() const; +#if defined(Q_OS_DARWIN) + void objcInCppMode_data() const; + void objcInCppMode() const; + void objcInObjcMode_data() const; + void objcInObjcMode() const; +#endif }; void tst_QDebug::assignment() const @@ -155,6 +191,46 @@ void tst_QDebug::criticalWithoutDebug() const QCOMPARE(QString::fromLatin1(s_function), function); } +void tst_QDebug::basics() const +{ + // test simple types, without quoting or other modifications + // (bool tested in the next function) + MessageHandlerSetter mhs(myMessageHandler); + + qDebug() << 'X'; + QCOMPARE(s_msg, "X"); + + qDebug() << 123; + QCOMPARE(s_msg, "123"); + + qDebug() << 456U; + QCOMPARE(s_msg, "456"); + + qDebug() << -123L; + QCOMPARE(s_msg, "-123"); + + qDebug() << 456UL; + QCOMPARE(s_msg, "456"); + + qDebug() << Q_INT64_C(-123); + QCOMPARE(s_msg, "-123"); + + qDebug() << Q_UINT64_C(456); + QCOMPARE(s_msg, "456"); + + qDebug() << "Hello"; + QCOMPARE(s_msg, "Hello"); + + qDebug() << u"World"; + QCOMPARE(s_msg, "World"); + + qDebug() << (void *)0xfff; + QCOMPARE(s_msg, "0xfff"); + + qDebug() << nullptr; + QCOMPARE(s_msg, "(nullptr)"); +} + void tst_QDebug::debugWithBool() const { QString file, function; @@ -243,11 +319,17 @@ void tst_QDebug::debugNoQuotes() const MessageHandlerSetter mhs(myMessageHandler); { QDebug d = qDebug(); + QVERIFY(d.quoteStrings()); d << QStringLiteral("Hello"); + QVERIFY(d.quoteStrings()); d.noquote(); + QVERIFY(!d.quoteStrings()); d << QStringLiteral("Hello"); + QVERIFY(!d.quoteStrings()); d.quote(); + QVERIFY(d.quoteStrings()); d << QStringLiteral("Hello"); + QVERIFY(d.quoteStrings()); } QCOMPARE(s_msg, QString::fromLatin1("\"Hello\" Hello \"Hello\"")); @@ -256,7 +338,7 @@ void tst_QDebug::debugNoQuotes() const d << QChar('H'); d << QLatin1String("Hello"); d << QByteArray("Hello"); - d.noquote(); + d.setQuoteStrings(false); d << QChar('H'); d << QLatin1String("Hello"); d << QByteArray("Hello"); @@ -381,6 +463,25 @@ void tst_QDebug::qDebugQChar() const } +void tst_QDebug::qDebugQMetaType() const +{ + QString file, function; + int line = 0; + MessageHandlerSetter mhs(myMessageHandler); + { + QDebug d = qDebug(); + d << QMetaType::fromType<int>() << QMetaType::fromType<QString>(); + } +#ifndef QT_NO_MESSAGELOGCONTEXT + file = __FILE__; line = __LINE__ - 4; function = Q_FUNC_INFO; +#endif + QCOMPARE(s_msgType, QtDebugMsg); + QCOMPARE(s_msg, R"(QMetaType(int) QMetaType(QString))"_L1); + QCOMPARE(QString::fromLatin1(s_file), file); + QCOMPARE(s_line, line); + QCOMPARE(QString::fromLatin1(s_function), function); +} + void tst_QDebug::qDebugQString() const { /* Use a basic string. */ @@ -388,7 +489,7 @@ void tst_QDebug::qDebugQString() const QString file, function; int line = 0; const QString in(QLatin1String("input")); - const QStringRef inRef(&in); + const QStringView inRef{ in }; MessageHandlerSetter mhs(myMessageHandler); { qDebug() << inRef; } @@ -453,60 +554,59 @@ void tst_QDebug::qDebugQString() const QCOMPARE(s_msg, QString("\"\\U000E0001 \\U00100000\"")); // broken surrogate pairs - ushort utf16[] = { 0xDC00, 0xD800, 'x', 0xD800, 0 }; + char16_t utf16[] = { 0xDC00, 0xD800, 'x', 0xD800, 0 }; string = QString::fromUtf16(utf16); qDebug() << string; QCOMPARE(s_msg, QString("\"\\uDC00\\uD800x\\uD800\"")); } -void tst_QDebug::qDebugQStringRef() const +void tst_QDebug::qDebugQStringView() const { /* Use a basic string. */ { - QString file, function; + QLatin1String file, function; int line = 0; - const QString in(QLatin1String("input")); - const QStringRef inRef(&in); + const QStringView inView = u"input"; MessageHandlerSetter mhs(myMessageHandler); - { qDebug() << inRef; } + { qDebug() << inView; } #ifndef QT_NO_MESSAGELOGCONTEXT - file = __FILE__; line = __LINE__ - 2; function = Q_FUNC_INFO; + file = QLatin1String(__FILE__); line = __LINE__ - 2; function = QLatin1String(Q_FUNC_INFO); #endif QCOMPARE(s_msgType, QtDebugMsg); - QCOMPARE(s_msg, QString::fromLatin1("\"input\"")); - QCOMPARE(QString::fromLatin1(s_file), file); + QCOMPARE(s_msg, QLatin1String("\"input\"")); + QCOMPARE(QLatin1String(s_file), file); QCOMPARE(s_line, line); - QCOMPARE(QString::fromLatin1(s_function), function); + QCOMPARE(QLatin1String(s_function), function); } - /* Use a null QStringRef. */ + /* Use a null QStringView. */ { QString file, function; int line = 0; - const QStringRef inRef; + const QStringView inView; MessageHandlerSetter mhs(myMessageHandler); - { qDebug() << inRef; } + { qDebug() << inView; } #ifndef QT_NO_MESSAGELOGCONTEXT file = __FILE__; line = __LINE__ - 2; function = Q_FUNC_INFO; #endif QCOMPARE(s_msgType, QtDebugMsg); - QCOMPARE(s_msg, QString::fromLatin1("\"\"")); - QCOMPARE(QString::fromLatin1(s_file), file); + QCOMPARE(s_msg, QLatin1String("\"\"")); + QCOMPARE(QLatin1String(s_file), file); QCOMPARE(s_line, line); - QCOMPARE(QString::fromLatin1(s_function), function); + QCOMPARE(QLatin1String(s_function), function); } } -void tst_QDebug::qDebugQStringView() const +void tst_QDebug::qDebugQUtf8StringView() const { - /* Use a basic string. */ + /* Use a utf8 string. */ { QLatin1String file, function; int line = 0; - const QStringView inView = u"input"; + const QUtf8StringView inView = u8"\U0001F609 is ;-)"; MessageHandlerSetter mhs(myMessageHandler); { qDebug() << inView; } @@ -514,18 +614,18 @@ void tst_QDebug::qDebugQStringView() const file = QLatin1String(__FILE__); line = __LINE__ - 2; function = QLatin1String(Q_FUNC_INFO); #endif QCOMPARE(s_msgType, QtDebugMsg); - QCOMPARE(s_msg, QLatin1String("\"input\"")); + QCOMPARE(s_msg, QString::fromUtf8("\"\\xF0\\x9F\\x98\\x89 is ;-)\"")); QCOMPARE(QLatin1String(s_file), file); QCOMPARE(s_line, line); QCOMPARE(QLatin1String(s_function), function); } - /* Use a null QStringView. */ + /* Use a null QUtf8StringView. */ { QString file, function; int line = 0; - const QStringView inView; + const QUtf8StringView inView; MessageHandlerSetter mhs(myMessageHandler); { qDebug() << inView; } @@ -578,6 +678,324 @@ void tst_QDebug::qDebugQLatin1String() const QCOMPARE(s_msg, QString("\"\\nSm\\u00F8rg\\u00E5sbord\\\\\"")); } +void tst_QDebug::qDebugStdString() const +{ + QString file, function; + int line = 0; + MessageHandlerSetter mhs(myMessageHandler); + { + QDebug d = qDebug(); + d << pmr::string("foo") << std::string("") << std::string("barbaz", 3); + d.nospace().noquote() << std::string("baz"); + } +#ifndef QT_NO_MESSAGELOGCONTEXT + file = __FILE__; line = __LINE__ - 5; function = Q_FUNC_INFO; +#endif + QCOMPARE(s_msgType, QtDebugMsg); + QCOMPARE(s_msg, QString::fromLatin1("\"foo\" \"\" \"bar\" baz")); + QCOMPARE(QString::fromLatin1(s_file), file); + QCOMPARE(s_line, line); + QCOMPARE(QString::fromLatin1(s_function), function); + + /* simpler tests from now on */ + std::string string("\"Hello\""); + qDebug() << string; + QCOMPARE(s_msg, QString("\"\\\"Hello\\\"\"")); + + qDebug().noquote().nospace() << string; + QCOMPARE(s_msg, QString::fromStdString(string)); + + qDebug().noquote().nospace() << qSetFieldWidth(8) << string; + QCOMPARE(s_msg, " " + QString::fromStdString(string)); +} + +void tst_QDebug::qDebugStdStringView() const +{ + QString file, function; + int line = 0; + MessageHandlerSetter mhs(myMessageHandler); + { + QDebug d = qDebug(); + d << std::string_view("foo") << std::string_view("") << std::string_view("barbaz", 3); + d.nospace().noquote() << std::string_view("baz"); + } +#ifndef QT_NO_MESSAGELOGCONTEXT + file = __FILE__; line = __LINE__ - 5; function = Q_FUNC_INFO; +#endif + QCOMPARE(s_msgType, QtDebugMsg); + QCOMPARE(s_msg, QString::fromLatin1("\"foo\" \"\" \"bar\" baz")); + QCOMPARE(QString::fromLatin1(s_file), file); + QCOMPARE(s_line, line); + QCOMPARE(QString::fromLatin1(s_function), function); + + /* simpler tests from now on */ + std::string_view string("\"Hello\""); + qDebug() << string; + QCOMPARE(s_msg, QString("\"\\\"Hello\\\"\"")); + + qDebug().noquote().nospace() << string; + QCOMPARE(s_msg, QString::fromStdString(std::string(string))); + + qDebug().noquote().nospace() << qSetFieldWidth(8) << string; + QCOMPARE(s_msg, " " + QString::fromStdString(std::string(string))); +} + +void tst_QDebug::qDebugStdWString() const +{ + QString file, function; + int line = 0; + MessageHandlerSetter mhs(myMessageHandler); + { + QDebug d = qDebug(); + d << pmr::wstring(L"foo") << std::wstring(L"") << std::wstring(L"barbaz", 3); + d.nospace().noquote() << std::wstring(L"baz"); + } +#ifndef QT_NO_MESSAGELOGCONTEXT + file = __FILE__; line = __LINE__ - 5; function = Q_FUNC_INFO; +#endif + QCOMPARE(s_msgType, QtDebugMsg); + QCOMPARE(s_msg, QString::fromLatin1("\"foo\" \"\" \"bar\" baz")); + QCOMPARE(QString::fromLatin1(s_file), file); + QCOMPARE(s_line, line); + QCOMPARE(QString::fromLatin1(s_function), function); + + /* simpler tests from now on */ + std::wstring string(L"\"Hello\""); + qDebug() << string; + QCOMPARE(s_msg, QString("\"\\\"Hello\\\"\"")); + + qDebug().noquote().nospace() << string; + QCOMPARE(s_msg, QString::fromStdWString(string)); + + qDebug().noquote().nospace() << qSetFieldWidth(8) << string; + QCOMPARE(s_msg, " " + QString::fromStdWString(string)); +} + +void tst_QDebug::qDebugStdWStringView() const +{ + QString file, function; + int line = 0; + MessageHandlerSetter mhs(myMessageHandler); + { + QDebug d = qDebug(); + d << std::wstring_view(L"foo") << std::wstring_view(L"") << std::wstring_view(L"barbaz", 3); + d.nospace().noquote() << std::wstring_view(L"baz"); + } +#ifndef QT_NO_MESSAGELOGCONTEXT + file = __FILE__; line = __LINE__ - 5; function = Q_FUNC_INFO; +#endif + QCOMPARE(s_msgType, QtDebugMsg); + QCOMPARE(s_msg, QString::fromLatin1("\"foo\" \"\" \"bar\" baz")); + QCOMPARE(QString::fromLatin1(s_file), file); + QCOMPARE(s_line, line); + QCOMPARE(QString::fromLatin1(s_function), function); + + /* simpler tests from now on */ + std::wstring_view string(L"\"Hello\""); + qDebug() << string; + QCOMPARE(s_msg, QString("\"\\\"Hello\\\"\"")); + + qDebug().noquote().nospace() << string; + QCOMPARE(s_msg, QString::fromStdWString(std::wstring(string))); + + qDebug().noquote().nospace() << qSetFieldWidth(8) << string; + QCOMPARE(s_msg, " " + QString::fromStdWString(std::wstring(string))); +} + +void tst_QDebug::qDebugStdU8String() const +{ +#ifndef __cpp_lib_char8_t + QSKIP("This test requires C++20 char8_t support enabled in the compiler."); +#else + QString file, function; + int line = 0; + MessageHandlerSetter mhs(myMessageHandler); + { + QDebug d = qDebug(); + d << pmr::u8string(u8"foo") << std::u8string(u8"") << std::u8string(u8"barbaz", 3); + d.nospace().noquote() << std::u8string(u8"baz"); + } +#ifndef QT_NO_MESSAGELOGCONTEXT + file = __FILE__; line = __LINE__ - 5; function = Q_FUNC_INFO; +#endif + QCOMPARE(s_msgType, QtDebugMsg); + QCOMPARE(s_msg, QString::fromLatin1("\"foo\" \"\" \"bar\" baz")); + QCOMPARE(QString::fromLatin1(s_file), file); + QCOMPARE(s_line, line); + QCOMPARE(QString::fromLatin1(s_function), function); + + /* simpler tests from now on */ + std::u8string string(u8"\"Hello\""); + qDebug() << string; + QCOMPARE(s_msg, QString("\"\\\"Hello\\\"\"")); + + qDebug().noquote().nospace() << string; + QCOMPARE(s_msg, QUtf8StringView(string).toString()); + + qDebug().noquote().nospace() << qSetFieldWidth(8) << string; + QCOMPARE(s_msg, " " + QUtf8StringView(string).toString()); +#endif // __cpp_lib_char8_t +} + +void tst_QDebug::qDebugStdU8StringView() const +{ +#ifndef __cpp_lib_char8_t + QSKIP("This test requires C++20 char8_t support enabled in the compiler."); +#else + QString file, function; + int line = 0; + MessageHandlerSetter mhs(myMessageHandler); + { + QDebug d = qDebug(); + d << std::u16string_view(u"foo") << std::u16string_view(u"") << std::u16string_view(u"barbaz", 3); + d.nospace().noquote() << std::u16string_view(u"baz"); + } +#ifndef QT_NO_MESSAGELOGCONTEXT + file = __FILE__; line = __LINE__ - 5; function = Q_FUNC_INFO; +#endif + QCOMPARE(s_msgType, QtDebugMsg); + QCOMPARE(s_msg, QString::fromLatin1("\"foo\" \"\" \"bar\" baz")); + QCOMPARE(QString::fromLatin1(s_file), file); + QCOMPARE(s_line, line); + QCOMPARE(QString::fromLatin1(s_function), function); + + /* simpler tests from now on */ + std::u16string_view string(u"\"Hello\""); + qDebug() << string; + QCOMPARE(s_msg, QString("\"\\\"Hello\\\"\"")); + + qDebug().noquote().nospace() << string; + QCOMPARE(s_msg, QString::fromStdU16String(std::u16string(string))); + + qDebug().noquote().nospace() << qSetFieldWidth(8) << string; + QCOMPARE(s_msg, " " + QString::fromStdU16String(std::u16string(string))); +#endif // __cpp_lib_char8_t +} + +void tst_QDebug::qDebugStdU16String() const +{ + QString file, function; + int line = 0; + MessageHandlerSetter mhs(myMessageHandler); + { + QDebug d = qDebug(); + d << pmr::u16string(u"foo") << std::u16string(u"") << std::u16string(u"barbaz", 3); + d.nospace().noquote() << std::u16string(u"baz"); + } +#ifndef QT_NO_MESSAGELOGCONTEXT + file = __FILE__; line = __LINE__ - 5; function = Q_FUNC_INFO; +#endif + QCOMPARE(s_msgType, QtDebugMsg); + QCOMPARE(s_msg, QString::fromLatin1("\"foo\" \"\" \"bar\" baz")); + QCOMPARE(QString::fromLatin1(s_file), file); + QCOMPARE(s_line, line); + QCOMPARE(QString::fromLatin1(s_function), function); + + /* simpler tests from now on */ + std::u16string string(u"\"Hello\""); + qDebug() << string; + QCOMPARE(s_msg, QString("\"\\\"Hello\\\"\"")); + + qDebug().noquote().nospace() << string; + QCOMPARE(s_msg, QString::fromStdU16String(string)); + + qDebug().noquote().nospace() << qSetFieldWidth(8) << string; + QCOMPARE(s_msg, " " + QString::fromStdU16String(string)); +} + +void tst_QDebug::qDebugStdU16StringView() const +{ + QString file, function; + int line = 0; + MessageHandlerSetter mhs(myMessageHandler); + { + QDebug d = qDebug(); + d << std::u16string_view(u"foo") << std::u16string_view(u"") << std::u16string_view(u"barbaz", 3); + d.nospace().noquote() << std::u16string_view(u"baz"); + } +#ifndef QT_NO_MESSAGELOGCONTEXT + file = __FILE__; line = __LINE__ - 5; function = Q_FUNC_INFO; +#endif + QCOMPARE(s_msgType, QtDebugMsg); + QCOMPARE(s_msg, QString::fromLatin1("\"foo\" \"\" \"bar\" baz")); + QCOMPARE(QString::fromLatin1(s_file), file); + QCOMPARE(s_line, line); + QCOMPARE(QString::fromLatin1(s_function), function); + + /* simpler tests from now on */ + std::u16string_view string(u"\"Hello\""); + qDebug() << string; + QCOMPARE(s_msg, QString("\"\\\"Hello\\\"\"")); + + qDebug().noquote().nospace() << string; + QCOMPARE(s_msg, QString::fromStdU16String(std::u16string(string))); + + qDebug().noquote().nospace() << qSetFieldWidth(8) << string; + QCOMPARE(s_msg, " " + QString::fromStdU16String(std::u16string(string))); +} + +void tst_QDebug::qDebugStdU32String() const +{ + QString file, function; + int line = 0; + MessageHandlerSetter mhs(myMessageHandler); + { + QDebug d = qDebug(); + d << pmr::u32string(U"foo") << std::u32string(U"") << std::u32string(U"barbaz", 3); + d.nospace().noquote() << std::u32string(U"baz"); + } +#ifndef QT_NO_MESSAGELOGCONTEXT + file = __FILE__; line = __LINE__ - 5; function = Q_FUNC_INFO; +#endif + QCOMPARE(s_msgType, QtDebugMsg); + QCOMPARE(s_msg, QString::fromLatin1("\"foo\" \"\" \"bar\" baz")); + QCOMPARE(QString::fromLatin1(s_file), file); + QCOMPARE(s_line, line); + QCOMPARE(QString::fromLatin1(s_function), function); + + /* simpler tests from now on */ + std::u32string string(U"\"Hello\""); + qDebug() << string; + QCOMPARE(s_msg, QString("\"\\\"Hello\\\"\"")); + + qDebug().noquote().nospace() << string; + QCOMPARE(s_msg, QString::fromStdU32String(string)); + + qDebug().noquote().nospace() << qSetFieldWidth(8) << string; + QCOMPARE(s_msg, " " + QString::fromStdU32String(string)); +} + +void tst_QDebug::qDebugStdU32StringView() const +{ + QString file, function; + int line = 0; + MessageHandlerSetter mhs(myMessageHandler); + { + QDebug d = qDebug(); + d << std::u32string_view(U"foo") << std::u32string_view(U"") << std::u32string_view(U"barbaz", 3); + d.nospace().noquote() << std::u32string_view(U"baz"); + } +#ifndef QT_NO_MESSAGELOGCONTEXT + file = __FILE__; line = __LINE__ - 5; function = Q_FUNC_INFO; +#endif + QCOMPARE(s_msgType, QtDebugMsg); + QCOMPARE(s_msg, QString::fromLatin1("\"foo\" \"\" \"bar\" baz")); + QCOMPARE(QString::fromLatin1(s_file), file); + QCOMPARE(s_line, line); + QCOMPARE(QString::fromLatin1(s_function), function); + + /* simpler tests from now on */ + std::u32string_view string(U"\"Hello\""); + qDebug() << string; + QCOMPARE(s_msg, QString("\"\\\"Hello\\\"\"")); + + qDebug().noquote().nospace() << string; + QCOMPARE(s_msg, QString::fromStdU32String(std::u32string(string))); + + qDebug().noquote().nospace() << qSetFieldWidth(8) << string; + QCOMPARE(s_msg, " " + QString::fromStdU32String(std::u32string(string))); +} + void tst_QDebug::qDebugQByteArray() const { QString file, function; @@ -620,6 +1038,48 @@ void tst_QDebug::qDebugQByteArray() const QCOMPARE(s_msg, QString("\"\\xFF\"\"FFFF\"")); } +void tst_QDebug::qDebugQByteArrayView() const +{ + QString file, function; + int line = 0; + MessageHandlerSetter mhs(myMessageHandler); + { + QDebug d = qDebug(); + d << QByteArrayView("foo") << QByteArrayView("") << QByteArrayView("barbaz", 3); + d.nospace().noquote() << QByteArrayView("baz"); + } +#ifndef QT_NO_MESSAGELOGCONTEXT + file = __FILE__; line = __LINE__ - 5; function = Q_FUNC_INFO; +#endif + QCOMPARE(s_msgType, QtDebugMsg); + QCOMPARE(s_msg, QString::fromLatin1("\"foo\" \"\" \"bar\" baz")); + QCOMPARE(QString::fromLatin1(s_file), file); + QCOMPARE(s_line, line); + QCOMPARE(QString::fromLatin1(s_function), function); + + /* simpler tests from now on */ + QByteArrayView ba = "\"Hello\""; + qDebug() << ba; + QCOMPARE(s_msg, QString("\"\\\"Hello\\\"\"")); + + qDebug().noquote().nospace() << ba; + QCOMPARE(s_msg, QString::fromLatin1(ba)); + + qDebug().noquote().nospace() << qSetFieldWidth(8) << ba; + QCOMPARE(s_msg, " " + QString::fromLatin1(ba)); + + ba = "\nSm\xC3\xB8rg\xC3\xA5sbord\\"; + qDebug().noquote().nospace() << ba; + QCOMPARE(s_msg, QString::fromUtf8(ba)); + + qDebug() << ba; + QCOMPARE(s_msg, QString("\"\\nSm\\xC3\\xB8rg\\xC3\\xA5sbord\\\\\"")); + + // ensure that it closes hex escape sequences correctly + qDebug() << QByteArrayView("\377FFFF"); + QCOMPARE(s_msg, QString("\"\\xFF\"\"FFFF\"")); +} + enum TestEnum { Flag1 = 0x1, Flag2 = 0x10 @@ -655,6 +1115,129 @@ void tst_QDebug::qDebugQFlags() const QCOMPARE(s_msg, QString::fromLatin1("QFlags<tst_QDebug::FlagType>(EnumFlag1)")); } +using ToStringFunction = std::function<QString()>; +void tst_QDebug::qDebugStdChrono_data() const +{ + using attoseconds = duration<int64_t, std::atto>; + using femtoseconds = duration<int64_t, std::femto>; + using picoseconds = duration<int64_t, std::pico>; + using centiseconds = duration<int64_t, std::centi>; + using deciseconds = duration<int64_t, std::deci>; + + using quadriennia = duration<int, std::ratio_multiply<std::ratio<4>, years::period>>; + using decades = duration<int, std::ratio_multiply<years::period, std::deca>>; // decayears + using centuries = duration<int16_t, std::ratio_multiply<years::period, std::hecto>>; // hectoyears + using millennia = duration<int16_t, std::ratio_multiply<years::period, std::kilo>>; // kiloyears + using gigayears = duration<int8_t, std::ratio_multiply<years::period, std::giga>>; + using fortnights = duration<int, std::ratio_multiply<days::period, std::ratio<14>>>; + using microfortnights = duration<int64_t, std::ratio_multiply<fortnights::period, std::micro>>; + using telecom = duration<int64_t, std::ratio<1, 8000>>; // 8 kHz + + using kiloseconds = duration<int64_t, std::kilo>; + using exaseconds = duration<int8_t, std::exa>; + using meter_per_light = duration<int64_t, std::ratio<1, 299'792'458>>; + using kilometer_per_light = duration<int64_t, std::ratio<1000, 299'792'458>>; + + QTest::addColumn<ToStringFunction>("fn"); + QTest::addColumn<QString>("expected"); + + auto addRow = [](const char *name, auto duration, const char *expected) { + auto toString = [duration]() { return QDebug::toString(duration); }; + QTest::newRow(name) << ToStringFunction(toString) << expected; + }; + + addRow("1as", attoseconds{1}, "1as"); + addRow("1fs", femtoseconds{1}, "1fs"); + addRow("1ps", picoseconds{1}, "1ps"); + addRow("0ns", 0ns, "0ns"); + addRow("1000ns", 1000ns, "1000ns"); + addRow("0us", 0us, "0us"); + addRow("0ms", 0ms, "0ms"); + addRow("1cs", centiseconds{1}, "1cs"); + addRow("2ds", deciseconds{2}, "2ds"); + addRow("-1s", -1s, "-1s"); + addRow("0s", 0s, "0s"); + addRow("1s", 1s, "1s"); + addRow("60s", 60s, "60s"); + addRow("1min", 1min, "1min"); + addRow("1h", 1h, "1h"); + addRow("1days", days{1}, "1d"); + addRow("365days", days{365}, "365d"); + addRow("1weeks", weeks{1}, "1wk"); + addRow("1years", years{1}, "1yr"); // 365.2425 days + addRow("42years", years{42}, "42yr"); + + addRow("1ks", kiloseconds{1}, "1[1000]s"); + addRow("2fortnights", fortnights{2}, "2[2]wk"); + addRow("1quadriennia", quadriennia{1}, "1[4]yr"); + addRow("1decades", decades{1}, "1[10]yr"); + addRow("1centuries", centuries{1}, "1[100]yr"); + addRow("1millennia", millennia{1}, "1[1000]yr"); +#if defined(Q_OS_LINUX) || defined(Q_OS_DARWIN) + // some OSes print the exponent differently + addRow("1Es", exaseconds{1}, "1[1e+18]s"); + addRow("13gigayears", gigayears{13}, "13[1e+09]yr"); +#endif + + // months are one twelfth of a Gregorian year, not 30 days + addRow("1months", months{1}, "1[2629746]s"); + + // weird units + addRow("2microfortnights", microfortnights{2}, "2[756/625]s"); + addRow("1telecom", telecom{1}, "1[1/8000]s"); + addRow("10m/c", meter_per_light{10}, "10[1/299792458]s"); + addRow("10km/c", kilometer_per_light{10}, "10[500/149896229]s"); + + // real floting point + using fpsec = duration<double>; + using fpmsec = duration<double, std::milli>; + using fpnsec = duration<double, std::nano>; + addRow("1.0s", fpsec{1}, "1s"); + addRow("1.5s", fpsec{1.5}, "1.5s"); + addRow("1.0ms", fpmsec{1}, "1ms"); + addRow("1.5ms", fpmsec{1.5}, "1.5ms"); + addRow("1.0ns", fpnsec{1}, "1ns"); + addRow("1.5ns", fpnsec{1.5}, "1.5ns"); + + // and some precision setting too + QTest::newRow("1.00000ns") + << ToStringFunction([]() { + QString buffer; + QDebug d(&buffer); + d.nospace() << qSetRealNumberPrecision(5) << Qt::fixed << fpnsec{1}; + return buffer; + }) << "1.00000ns"; +} + +void tst_QDebug::qDebugStdChrono() const +{ + QFETCH(ToStringFunction, fn); + QFETCH(QString, expected); + QCOMPARE(fn(), expected); +} + +void tst_QDebug::qDebugStdOptional() const +{ + QString file, function; + int line = 0; + MessageHandlerSetter mhs(myMessageHandler); + { + std::optional<QByteArray> notSet = std::nullopt; + std::optional<QByteArray> set("foo"); + auto no = std::nullopt; + QDebug d = qDebug(); + d << notSet << set << no; + } +#ifndef QT_NO_MESSAGELOGCONTEXT + file = __FILE__; line = __LINE__ - 4; function = Q_FUNC_INFO; +#endif + QCOMPARE(s_msgType, QtDebugMsg); + QCOMPARE(s_msg, QString::fromLatin1("nullopt std::optional(\"foo\") nullopt")); + QCOMPARE(QString::fromLatin1(s_file), file); + QCOMPARE(s_line, line); + QCOMPARE(QString::fromLatin1(s_function), function); +} + void tst_QDebug::textStreamModifiers() const { QString file, function; @@ -734,12 +1317,105 @@ void tst_QDebug::threadSafety() const s_sema.release(numThreads); sync.waitForFinished(); QMutexLocker lock(&s_mutex); - QCOMPARE(s_messages.count(), numThreads); + QCOMPARE(s_messages.size(), numThreads); for (int i = 0; i < numThreads; ++i) { QCOMPARE(s_messages.at(i), QStringLiteral("doDebug")); } } +void tst_QDebug::toString() const +{ + // By reference. + { + MyPoint point(3, 4); + QString expectedString; + QDebug stream(&expectedString); + stream.nospace() << point; + QCOMPARE(QDebug::toString(point), expectedString); + } + + // By pointer. + { + QObject qobject; + qobject.setObjectName("test"); + QString expectedString; + QDebug stream(&expectedString); + stream.nospace() << &qobject; + QCOMPARE(QDebug::toString(&qobject), expectedString); + } +} + +void tst_QDebug::noQVariantEndlessRecursion() const +{ + ConvertsToQVariant conv; + QVariant var = QVariant::fromValue(conv); + QTest::ignoreMessage(QtDebugMsg, "QVariant(ConvertsToQVariant, )"); + qDebug() << var; +} + +#if defined(Q_OS_DARWIN) + +@interface MyObjcClass : NSObject +@end + +@implementation MyObjcClass : NSObject +- (NSString *)description +{ + return @"MyObjcClass is the best"; +} +@end + +void tst_QDebug::objcInCppMode_data() const +{ + QTest::addColumn<objc_object *>("object"); + QTest::addColumn<QString>("message"); + + QTest::newRow("nil") << static_cast<objc_object*>(nullptr) << QString::fromLatin1("(null)"); + + // Not an NSObject subclass + auto *nsproxy = reinterpret_cast<objc_object *>(class_createInstance(objc_getClass("NSProxy"), 0)); + QTest::newRow("NSProxy") << nsproxy << QString::fromLatin1("<NSProxy: 0x%1>").arg(uintptr_t(nsproxy), 1, 16); + + // Plain NSObject + auto *nsobject = reinterpret_cast<objc_object *>(class_createInstance(objc_getClass("NSObject"), 0)); + QTest::newRow("NSObject") << nsobject << QString::fromLatin1("<NSObject: 0x%1>").arg(uintptr_t(nsobject), 1, 16); + + auto str = QString::fromLatin1("foo"); + QTest::newRow("NSString") << reinterpret_cast<objc_object*>(str.toNSString()) << str; + + // Custom debug description + QTest::newRow("MyObjcClass") << reinterpret_cast<objc_object*>([[MyObjcClass alloc] init]) + << QString::fromLatin1("MyObjcClass is the best"); +} + +void tst_QDebug::objcInCppMode() const +{ + QFETCH(objc_object *, object); + QFETCH(QString, message); + + MessageHandlerSetter mhs(myMessageHandler); + { qDebug() << object; } + + QCOMPARE(s_msg, message); +} + +void tst_QDebug::objcInObjcMode_data() const +{ + objcInCppMode_data(); +} + +void tst_QDebug::objcInObjcMode() const +{ + QFETCH(objc_object *, object); + QFETCH(QString, message); + + MessageHandlerSetter mhs(myMessageHandler); + { qDebug() << static_cast<id>(object); } + + QCOMPARE(s_msg, message); +} +#endif + // Should compile: instentiation of unrelated operator<< should not cause cause compilation // error in QDebug operators (QTBUG-47375) class TestClassA {}; diff --git a/tests/auto/corelib/io/qdir/CMakeLists.txt b/tests/auto/corelib/io/qdir/CMakeLists.txt new file mode 100644 index 0000000000..4032d7ac19 --- /dev/null +++ b/tests/auto/corelib/io/qdir/CMakeLists.txt @@ -0,0 +1,103 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qdir Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qdir LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +# Collect test data +list(APPEND test_data "testdir") +list(APPEND test_data "testData") +list(APPEND test_data "searchdir") +list(APPEND test_data "resources") +list(APPEND test_data "entrylist") +list(APPEND test_data "types") +list(APPEND test_data "tst_qdir.cpp") + +qt_internal_add_test(tst_qdir + SOURCES + tst_qdir.cpp + LIBRARIES + Qt::CorePrivate + Qt::TestPrivate + TESTDATA ${test_data} +) + +# Resources: +set(qdir_resource_files + "resources/entryList/" +) + +qt_internal_add_resource(tst_qdir "qdir" + PREFIX + "/tst_qdir/" + FILES + ${qdir_resource_files} +) + +## Scopes: +##################################################################### + +qt_internal_extend_target(tst_qdir CONDITION CONFIG___contains___builtin_testdata + DEFINES + BUILTIN_TESTDATA +) + +if(ANDROID) + # Resources: + set(android_testdata_resource_files + "entrylist/directory/dummy" + "entrylist/file" + "resources/entryList/file1.data" + "resources/entryList/file2.data" + "resources/entryList/file3.data" + "resources/entryList/file4.nothing" + "searchdir/subdir1/picker.png" + "searchdir/subdir2/picker.png" + "testData/empty" + "testdir/dir/qdir.pro" + "testdir/dir/qrc_qdir.cpp" + "testdir/dir/tmp/empty" + "testdir/dir/tst_qdir.cpp" + "testdir/spaces/foo. bar" + "testdir/spaces/foo.bar" + "tst_qdir.cpp" + "types/a" + "types/a.a" + "types/a.b" + "types/a.c" + "types/b" + "types/b.a" + "types/b.b" + "types/b.c" + "types/c" + "types/c.a" + "types/c.b" + "types/c.c" + "types/d.a/dummy" + "types/d.b/dummy" + "types/d.c/dummy" + "types/d/dummy" + "types/e.a/dummy" + "types/e.b/dummy" + "types/e.c/dummy" + "types/e/dummy" + "types/f.a/dummy" + "types/f.b/dummy" + "types/f.c/dummy" + "types/f/dummy" + ) + + qt_internal_add_resource(tst_qdir "android_testdata" + PREFIX + "/android_testdata" + FILES + ${android_testdata_resource_files} + ) +endif() diff --git a/tests/auto/corelib/io/qdir/qdir.pro b/tests/auto/corelib/io/qdir/qdir.pro deleted file mode 100644 index a8b106e250..0000000000 --- a/tests/auto/corelib/io/qdir/qdir.pro +++ /dev/null @@ -1,14 +0,0 @@ -CONFIG += testcase -TARGET = tst_qdir -QT = core core-private testlib -SOURCES = tst_qdir.cpp -RESOURCES += qdir.qrc -ios: QMAKE_INFO_PLIST = Info.plist - -TESTDATA += testdir testData searchdir resources entrylist types tst_qdir.cpp - -contains(CONFIG, builtin_testdata): DEFINES += BUILTIN_TESTDATA - -android:!android-embedded { - RESOURCES += android_testdata.qrc -} diff --git a/tests/auto/corelib/io/qdir/qdir.qrc b/tests/auto/corelib/io/qdir/qdir.qrc deleted file mode 100644 index 4c5b5af3b8..0000000000 --- a/tests/auto/corelib/io/qdir/qdir.qrc +++ /dev/null @@ -1,5 +0,0 @@ -<!DOCTYPE RCC><RCC version="1.0"> -<qresource prefix="/tst_qdir/"> - <file>resources/entryList/</file> -</qresource> -</RCC> diff --git a/tests/auto/corelib/io/qdir/testdir/dir.lnk/aaaaa.txt b/tests/auto/corelib/io/qdir/testdir/dir.lnk/aaaaa.txt new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/auto/corelib/io/qdir/testdir/dir.lnk/aaaaa.txt diff --git a/tests/auto/corelib/io/qdir/testdir/dir.lnk/subdir.lnk/subdir.lnk.txt b/tests/auto/corelib/io/qdir/testdir/dir.lnk/subdir.lnk/subdir.lnk.txt new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/auto/corelib/io/qdir/testdir/dir.lnk/subdir.lnk/subdir.lnk.txt diff --git a/tests/auto/corelib/io/qdir/testdir/dir.lnk/subdir/subdir.txt b/tests/auto/corelib/io/qdir/testdir/dir.lnk/subdir/subdir.txt new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/auto/corelib/io/qdir/testdir/dir.lnk/subdir/subdir.txt diff --git a/tests/auto/corelib/io/qdir/testdir/dir/CMakeLists.txt b/tests/auto/corelib/io/qdir/testdir/dir/CMakeLists.txt new file mode 100644 index 0000000000..d0ec6dee9a --- /dev/null +++ b/tests/auto/corelib/io/qdir/testdir/dir/CMakeLists.txt @@ -0,0 +1,12 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## qdir Binary: +##################################################################### + +qt_internal_add_executable(qdir + GUI + LIBRARIES + Qt::Gui +) diff --git a/tests/auto/corelib/io/qdir/testdir/dir/qdir.pro b/tests/auto/corelib/io/qdir/testdir/dir/qdir.pro index 856d5ea2fb..e69de29bb2 100644 --- a/tests/auto/corelib/io/qdir/testdir/dir/qdir.pro +++ b/tests/auto/corelib/io/qdir/testdir/dir/qdir.pro @@ -1,3 +0,0 @@ - - -DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/corelib/io/qdir/testdir/dir/qrc_qdir.cpp b/tests/auto/corelib/io/qdir/testdir/dir/qrc_qdir.cpp index a1d5c2c9ff..b9f84b6006 100644 --- a/tests/auto/corelib/io/qdir/testdir/dir/qrc_qdir.cpp +++ b/tests/auto/corelib/io/qdir/testdir/dir/qrc_qdir.cpp @@ -1,29 +1,4 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only diff --git a/tests/auto/corelib/io/qdir/testdir/dir/tst_qdir.cpp b/tests/auto/corelib/io/qdir/testdir/dir/tst_qdir.cpp index a1d5c2c9ff..b9f84b6006 100644 --- a/tests/auto/corelib/io/qdir/testdir/dir/tst_qdir.cpp +++ b/tests/auto/corelib/io/qdir/testdir/dir/tst_qdir.cpp @@ -1,29 +1,4 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only diff --git a/tests/auto/corelib/io/qdir/tst_qdir.cpp b/tests/auto/corelib/io/qdir/tst_qdir.cpp index a6775ec2b6..7b05a88e81 100644 --- a/tests/auto/corelib/io/qdir/tst_qdir.cpp +++ b/tests/auto/corelib/io/qdir/tst_qdir.cpp @@ -1,33 +1,13 @@ -/**************************************************************************** -** -** Copyright (C) 2017 Intel Corporation. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtTest/QtTest> +// Copyright (C) 2021 The Qt Company Ltd. +// Copyright (C) 2017 Intel Corporation. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QTest> +#include <QtTest/private/qcomparisontesthelper_p.h> +#include <QTemporaryFile> +#if QT_CONFIG(process) +#include <QProcess> +#endif #include <qcoreapplication.h> #include <qdebug.h> @@ -37,11 +17,10 @@ #if defined(Q_OS_WIN) #include <QtCore/private/qfsfileengine_p.h> -#include "../../../network-settings.h" #endif #if defined(Q_OS_WIN) && !defined(_WIN32_WINNT) -#define _WIN32_WINNT 0x500 +#define _WIN32_WINNT 0x0A00 #endif #include "../../../../shared/filesystem.h" @@ -51,7 +30,11 @@ # include <sys/stat.h> #endif -#if defined(Q_OS_VXWORKS) || defined(Q_OS_WINRT) +#ifdef Q_OS_INTEGRITY +#include "qplatformdefs.h" +#endif + +#if defined(Q_OS_VXWORKS) #define Q_NO_SYMLINKS #endif @@ -65,6 +48,8 @@ #include "private/qdir_p.h" #endif +using namespace Qt::StringLiterals; + static QByteArray msgDoesNotExist(const QString &name) { return (QLatin1Char('"') + QDir::toNativeSeparators(name) @@ -106,6 +91,8 @@ private slots: void mkdirRmdir_data(); void mkdirRmdir(); void mkdirOnSymlink(); + void mkdirWithPermissions_data(); + void mkdirWithPermissions(); void makedirReturnCode(); @@ -140,6 +127,7 @@ private slots: void normalizePathSegments(); #endif + void compareCompiles(); void compare(); void QDir_default(); @@ -216,34 +204,41 @@ private slots: void emptyDir(); void nonEmptyDir(); + void stdfilesystem(); + private: -#ifdef BUILTIN_TESTDATA - QString m_dataPath; QSharedPointer<QTemporaryDir> m_dataDir; -#else - const QString m_dataPath; -#endif + QString m_dataPath; + + constexpr static const std::array m_testDirs = { + "entrylist"_L1, + "resources"_L1, + "searchdir"_L1, + "testData"_L1, + "testdir"_L1, + "types"_L1, + "tst_qdir.cpp"_L1, + }; }; Q_DECLARE_METATYPE(tst_QDir::UncHandling) tst_QDir::tst_QDir() -#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED) +#ifdef Q_OS_ANDROID : m_dataPath(QStandardPaths::writableLocation(QStandardPaths::CacheLocation)) #elif !defined(BUILTIN_TESTDATA) : m_dataPath(QFileInfo(QFINDTESTDATA("testData")).absolutePath()) #endif { -#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED) +#ifdef Q_OS_ANDROID QString resourceSourcePath = QStringLiteral(":/android_testdata/"); QDirIterator it(resourceSourcePath, QDirIterator::Subdirectories); while (it.hasNext()) { - it.next(); - - QFileInfo fileInfo = it.fileInfo(); + QFileInfo fileInfo = it.nextFileInfo(); if (!fileInfo.isDir()) { - QString destination = m_dataPath + QLatin1Char('/') + fileInfo.filePath().mid(resourceSourcePath.length()); + QString destination = m_dataPath + QLatin1Char('/') + + fileInfo.filePath().mid(resourceSourcePath.length()); QFileInfo destinationFileInfo(destination); if (!destinationFileInfo.exists()) { QDir().mkpath(destinationFileInfo.path()); @@ -271,6 +266,20 @@ void tst_QDir::initTestCase() m_dataDir = QEXTRACTTESTDATA("/"); QVERIFY2(!m_dataDir.isNull(), qPrintable("Did not find testdata. Is this builtin?")); m_dataPath = m_dataDir->path(); +#elif QT_CONFIG(cxx17_filesystem) // This code doesn't work in QNX on the CI + m_dataDir.reset(new QTemporaryDir); + m_dataPath = m_dataDir->path(); + + QString sourceDir = QFileInfo(QFINDTESTDATA(m_testDirs[0])).absolutePath(); + namespace fs = std::filesystem; + for (const auto &entry : m_testDirs) { + auto l1 = QLatin1StringView(entry); + const auto src = fs::path(QString(sourceDir + u'/' + l1).toStdString()); + const auto dest = fs::path(QString(m_dataPath + u'/' + l1).toStdString()); + std::error_code ec; + fs::copy(src, dest, fs::copy_options::recursive, ec); + QCOMPARE(ec.value(), 0); + } #endif QVERIFY2(!m_dataPath.isEmpty(), "test data not found"); @@ -332,6 +341,7 @@ void tst_QDir::setPath() QFETCH(QString, dir1); QFETCH(QString, dir2); + QDir::setCurrent(m_dataPath + "/entrylist"_L1); QDir shared; QDir qDir1(dir1); QStringList entries1 = qDir1.entryList(); @@ -394,7 +404,7 @@ void tst_QDir::mkdirRmdir() void tst_QDir::mkdirOnSymlink() { -#if !defined(Q_OS_UNIX) || defined(Q_NO_SYMLINKS) +#if !defined(Q_OS_UNIX) || defined(Q_NO_SYMLINKS) || defined(Q_OS_INTEGRITY) QSKIP("Test only valid on an OS that supports symlinks"); #else // Create the structure: @@ -428,7 +438,7 @@ void tst_QDir::mkdirOnSymlink() // create our structure: dir.mkpath("two/three"); - ::symlink("two/three", "symlink"); + QCOMPARE(::symlink("two/three", "symlink"), 0); // try it: QString path = "symlink/../four/five"; @@ -438,10 +448,55 @@ void tst_QDir::mkdirOnSymlink() path = "two/four/five"; fi.setFile(path); +#if defined(Q_OS_QNX) + QSKIP("Fails on QNX QTBUG-98561"); +#endif QVERIFY2(fi.exists() && fi.isDir(), msgDoesNotExist(path).constData()); #endif } +void tst_QDir::mkdirWithPermissions_data() +{ + QTest::addColumn<QFile::Permissions>("permissions"); + + for (int u = 0; u < 8; ++u) { + for (int g = 0; g < 8; ++g) { + for (int o = 0; o < 8; ++o) { + auto permissions = QFileDevice::Permissions::fromInt((u << 12) | (g << 4) | o); + QTest::addRow("%04x", permissions.toInt()) << permissions; + } + } + } +} + +void tst_QDir::mkdirWithPermissions() +{ + QFETCH(QFile::Permissions, permissions); + +#ifdef Q_OS_WIN + QNtfsPermissionCheckGuard permissionGuard; +#endif +#ifdef Q_OS_UNIX + auto restoreMask = qScopeGuard([oldMask = umask(0)] { umask(oldMask); }); +#endif + + const QFile::Permissions setPermissions = { + QFile::ReadOther, QFile::WriteOther, QFile::ExeOther, + QFile::ReadGroup, QFile::WriteGroup, QFile::ExeGroup, + QFile::ReadOwner, QFile::WriteOwner, QFile::ExeOwner + }; + + const QString path = u"tmpdir"_s; + QDir dir; + auto deleteDirectory = qScopeGuard([&dir, &path] { dir.rmdir(path); }); + + QVERIFY(dir.mkdir(path, permissions)); + auto actualPermissions = QFileInfo(dir.filePath(path)).permissions(); + QCOMPARE(actualPermissions & setPermissions, permissions); + QVERIFY(dir.rmdir(path)); + deleteDirectory.dismiss(); +} + void tst_QDir::makedirReturnCode() { QString dirName = QString::fromLatin1("makedirReturnCode"); @@ -457,10 +512,15 @@ void tst_QDir::makedirReturnCode() QVERIFY(!QDir::current().mkdir(dirName)); // calling mkdir on an existing dir will fail. QVERIFY(QDir::current().mkpath(dirName)); // calling mkpath on an existing dir will pass + // the next line specifically targets Windows and macOS (QTBUG-85997, QTBUG-97110) + // calling mkpath on an existing drive name (Windows) or root path (macOS) shall pass + QVERIFY(QDir().mkpath(QDir::rootPath())); + QVERIFY(!QDir().mkdir(QDir::rootPath())); + // Remove the directory and create a file with the same path QDir::current().rmdir(dirName); QVERIFY(!f.exists()); - f.open(QIODevice::WriteOnly); + QVERIFY(f.open(QIODevice::WriteOnly)); f.write("test"); f.close(); QVERIFY2(f.exists(), msgDoesNotExist(f.fileName()).constData()); @@ -481,12 +541,12 @@ void tst_QDir::removeRecursively_data() << tmpdir + "two/three" << "relative"; QDir dir; - for (int i = 0; i < dirs.count(); ++i) + for (int i = 0; i < dirs.size(); ++i) dir.mkpath(dirs.at(i)); QStringList files; files << tmpdir + "one/file"; files << tmpdir + "two/three/file"; - for (int i = 0; i < files.count(); ++i) { + for (int i = 0; i < files.size(); ++i) { QFile file(files.at(i)); QVERIFY(file.open(QIODevice::WriteOnly)); file.write("Hello"); @@ -554,7 +614,7 @@ void tst_QDir::removeRecursivelySymlink() QDir().mkpath(tmpdir); QDir currentDir; currentDir.mkdir("myDir"); - QFile("testfile").open(QIODevice::WriteOnly); + QVERIFY(QFile("testfile").open(QIODevice::WriteOnly)); const QString link = tmpdir + "linkToDir.lnk"; const QString linkToFile = tmpdir + "linkToFile.lnk"; #ifndef Q_NO_SYMLINKS_TO_DIRS @@ -585,8 +645,8 @@ void tst_QDir::exists_data() QTest::newRow("simple dir") << (m_dataPath + "/resources") << true; QTest::newRow("simple dir with slash") << (m_dataPath + "/resources/") << true; -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) - const QString uncRoot = QStringLiteral("//") + QtNetworkSettings::winServerName(); +#if defined(Q_OS_WIN) + const QString uncRoot = QStringLiteral("//") + QTest::uncServerName(); QTest::newRow("unc 1") << uncRoot << true; QTest::newRow("unc 2") << uncRoot + QLatin1Char('/') << true; QTest::newRow("unc 3") << uncRoot + "/testshare" << true; @@ -597,7 +657,7 @@ void tst_QDir::exists_data() QTest::newRow("unc 8") << uncRoot + "/asharethatshouldnotexist" << false; QTest::newRow("unc 9") << "//ahostthatshouldnotexist" << false; #endif -#if (defined(Q_OS_WIN) && !defined(Q_OS_WINRT)) +#if defined (Q_OS_WIN) QTest::newRow("This drive should exist") << "C:/" << true; // find a non-existing drive and check if it does not exist #ifdef QT_BUILD_INTERNAL @@ -664,32 +724,29 @@ void tst_QDir::QDir_default() QCOMPARE(dir.absolutePath(), QDir::currentPath()); } -void tst_QDir::compare() +void tst_QDir::compareCompiles() { - // operator== - - // Not using QCOMPARE to test result of QDir::operator== + QTestPrivate::testEqualityOperatorsCompile<QDir>(); +} +void tst_QDir::compare() +{ QDir dir; dir.makeAbsolute(); - QVERIFY(dir == QDir::currentPath()); + QT_TEST_EQUALITY_OPS(dir, QDir::currentPath(), true); QCOMPARE(QDir(), QDir(QDir::currentPath())); - QVERIFY(QDir("../") == QDir(QDir::currentPath() + "/..")); + + QT_TEST_EQUALITY_OPS(QDir("../"), QDir(QDir::currentPath() + "/.."), true); } -static QStringList filterLinks(const QStringList &list) +static QStringList filterLinks(QStringList &&list) { -#ifndef Q_NO_SYMLINKS - return list; -#else - QStringList result; - foreach (QString str, list) { - if (!str.endsWith(QLatin1String(".lnk"))) - result.append(str); - } - return result; +#ifdef Q_NO_SYMLINKS + auto isDotLnk = [](const auto &s) { return s.endsWith(".lnk"_L1); }; + list.removeIf(isDotLnk); #endif + return std::move(list); } void tst_QDir::entryList_data() @@ -713,13 +770,16 @@ void tst_QDir::entryList_data() << QString("qdir.pro,qrc_qdir.cpp,tst_qdir.cpp").split(','); QTest::newRow("testdir1") << (m_dataPath + "/testdir") << QStringList() << (int)(QDir::AllDirs) << (int)(QDir::NoSort) - << QString(".,..,dir,spaces").split(','); + << QString(".,..,dir,dir.lnk,spaces").split(','); QTest::newRow("resources1") << QString(":/tst_qdir/resources/entryList") << QStringList("*.data") << (int)(QDir::NoFilter) << (int)(QDir::NoSort) << QString("file1.data,file2.data,file3.data").split(','); QTest::newRow("resources2") << QString(":/tst_qdir/resources/entryList") << QStringList("*.data") << (int)(QDir::Files) << (int)(QDir::NoSort) << QString("file1.data,file2.data,file3.data").split(','); + QTest::newRow("testdir.lnk") << (m_dataPath + "/testdir/dir.lnk") << QStringList() + << (int)(QDir::NoFilter) << (int)(QDir::NoSort) + << QString(".,..,aaaaa.txt,subdir,subdir.lnk").split(','); } void tst_QDir::entryList() @@ -753,6 +813,12 @@ void tst_QDir::entryListWithTestFiles_data() QTest::newRow("QDir::AllEntries") << (m_dataPath + "/entrylist/") << QStringList("*") << int(QDir::AllEntries) << int(QDir::Name) << filterLinks(QString(".,..,directory,file,linktodirectory.lnk,linktofile.lnk,writable").split(',')); + // Tests an assert in QDirSortItemComparator, when QDir::LocaleAware is set + // a QCollator is used + QTest::newRow("QDir::AllEntries") + << (m_dataPath + "/entrylist/") << QStringList("*") + << int(QDir::AllEntries) << int(QDir::Name | QDir::LocaleAware) + << filterLinks(QString(".,..,directory,file,linktodirectory.lnk,linktofile.lnk,writable").split(',')); QTest::newRow("QDir::Files") << (m_dataPath + "/entrylist/") << QStringList("*") << int(QDir::Files) << int(QDir::Name) << filterLinks(QString("file,linktofile.lnk,writable").split(',')); @@ -884,14 +950,14 @@ void tst_QDir::entryListWithTestFiles() #if defined(Q_OS_WIN) // ### Sadly, this is a platform difference right now. // Note we are using capital L in entryList on one side here, to test case-insensitivity - const QVector<QPair<QString, QString> > symLinks = + const QList<QPair<QString, QString> > symLinks = { {m_dataPath + "/entryList/file", entrylistPath + "linktofile.lnk"}, {m_dataPath + "/entryList/directory", entrylistPath + "linktodirectory.lnk"}, {m_dataPath + "/entryList/nothing", entrylistPath + "brokenlink.lnk"} }; #else - const QVector<QPair<QString, QString> > symLinks = + const QList<QPair<QString, QString> > symLinks = { {"file", entrylistPath + "linktofile.lnk"}, {"directory", entrylistPath + "linktodirectory.lnk"}, @@ -956,7 +1022,7 @@ void tst_QDir::entryListTimedSort() QFileInfo aFileInfo(aFile); QFileInfo bFileInfo(bFile); - QVERIFY(bFileInfo.lastModified().msecsTo(aFileInfo.lastModified()) < 0); + QVERIFY(bFileInfo.lastModified(QTimeZone::UTC).msecsTo(aFileInfo.lastModified(QTimeZone::UTC)) < 0); QCOMPARE(actual.size(), 2); QCOMPARE(actual.first(), bFileInfo.fileName()); @@ -975,8 +1041,8 @@ void tst_QDir::entryListSimple_data() QTest::newRow("simple dir") << (m_dataPath + "/resources") << 2; QTest::newRow("simple dir with slash") << (m_dataPath + "/resources/") << 2; -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) - const QString uncRoot = QStringLiteral("//") + QtNetworkSettings::winServerName(); +#if defined(Q_OS_WIN) + const QString uncRoot = QStringLiteral("//") + QTest::uncServerName(); QTest::newRow("unc 1") << uncRoot << 2; QTest::newRow("unc 2") << uncRoot + QLatin1Char('/') << 2; QTest::newRow("unc 3") << uncRoot + "/testshare" << 2; @@ -1002,7 +1068,7 @@ void tst_QDir::entryListSimple() QDir dir(dirName); QStringList actual = dir.entryList(); - QVERIFY2(actual.count() >= countMin, msgEntryListFailed(actual.count(), countMin, dirName).constData()); + QVERIFY2(actual.size() >= countMin, msgEntryListFailed(actual.size(), countMin, dirName).constData()); } void tst_QDir::entryListWithSymLinks() @@ -1015,7 +1081,7 @@ void tst_QDir::entryListWithSymLinks() QFile::remove("testfile.cpp"); QDir dir; dir.mkdir("myDir"); - QFile("testfile.cpp").open(QIODevice::WriteOnly); + QVERIFY(QFile("testfile.cpp").open(QIODevice::WriteOnly)); # ifndef Q_NO_SYMLINKS_TO_DIRS QVERIFY(QFile::link("myDir", "myLinkToDir.lnk")); # endif @@ -1211,11 +1277,11 @@ void tst_QDir::setNameFilters() dir.setNameFilters(nameFilters); QStringList actual = dir.entryList(); - int max = qMin(actual.count(), expected.count()); + int max = qMin(actual.size(), expected.size()); for (int i=0; i<max; ++i) QCOMPARE(actual[i], expected[i]); - QCOMPARE(actual.count(), expected.count()); + QCOMPARE(actual.size(), expected.size()); } void @@ -1246,7 +1312,7 @@ tst_QDir::cleanPath_data() #else QTest::newRow("data10") << "/:/" << "/:"; #endif -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) QTest::newRow("data11") << "//foo//bar" << "//foo/bar"; #endif QTest::newRow("data12") << "ab/a/" << "ab/a"; // Path item with length of 2 @@ -1258,17 +1324,26 @@ tst_QDir::cleanPath_data() QTest::newRow("data14") << "c://foo" << "c:/foo"; // Drive letters and unc path in one string -#if defined(Q_OS_WINRT) - const QString root = QDir::rootPath(); // has trailing slash - QTest::newRow("root-up") << (root + "path/..") << root; - QTest::newRow("above-root") << (root + "..") << (root + ".."); -#elif defined(Q_OS_WIN) +#if defined(Q_OS_WIN) QTest::newRow("data15") << "//c:/foo" << "//c:/foo"; QTest::newRow("drive-up") << "A:/path/.." << "A:/"; QTest::newRow("drive-above-root") << "A:/.." << "A:/.."; QTest::newRow("unc-server-up") << "//server/path/.." << "//server"; QTest::newRow("unc-server-above-root") << "//server/.." << "//server/.."; - QTest::newRow("longpath") << "\\\\?\\d:\\" << "d:/"; + + QTest::newRow("longpath") << uR"(\\?\d:\)"_s << u"d:/"_s; + QTest::newRow("longpath-slash") << u"//?/d:/"_s << u"d:/"_s; + QTest::newRow("longpath-mixed-slashes") << uR"(//?/d:\)"_s << u"d:/"_s; + QTest::newRow("longpath-mixed-slashes-2") << uR"(\\?\d:/)"_s << u"d:/"_s; + + QTest::newRow("unc-network-share") << uR"(\\?\UNC\localhost\c$\tmp.txt)"_s + << u"//localhost/c$/tmp.txt"_s; + QTest::newRow("unc-network-share-slash") << u"//?/UNC/localhost/c$/tmp.txt"_s + << u"//localhost/c$/tmp.txt"_s; + QTest::newRow("unc-network-share-mixed-slashes") << uR"(//?/UNC/localhost\c$\tmp.txt)"_s + << u"//localhost/c$/tmp.txt"_s; + QTest::newRow("unc-network-share-mixed-slashes-2") << uR"(\\?\UNC\localhost/c$/tmp.txt)"_s + << u"//localhost/c$/tmp.txt"_s; #else QTest::newRow("data15") << "//c:/foo" << "/c:/foo"; #endif // non-windows @@ -1385,7 +1460,7 @@ void tst_QDir::absoluteFilePath_data() QTest::addColumn<QString>("fileName"); QTest::addColumn<QString>("expectedFilePath"); -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) QTest::newRow("UNC-rel") << "//machine/share" << "dir" << "//machine/share/dir"; QTest::newRow("UNC-abs") << "//machine/share/path/to/blah" << "/dir" << "//machine/share/dir"; QTest::newRow("UNC-UNC") << "//machine/share/path/to/blah" << "//host/share/path" << "//host/share/path"; @@ -1423,7 +1498,7 @@ void tst_QDir::absolutePath_data() QTest::addColumn<QString>("expectedPath"); QTest::newRow("0") << "/machine/share/dir1" << "/machine/share/dir1"; -#if (defined(Q_OS_WIN) && !defined(Q_OS_WINRT)) +#if defined(Q_OS_WIN) QTest::newRow("1") << "\\machine\\share\\dir1" << "/machine/share/dir1"; QTest::newRow("2") << "//machine/share/dir1" << "//machine/share/dir1"; QTest::newRow("3") << "\\\\machine\\share\\dir1" << "//machine/share/dir1"; @@ -1491,12 +1566,10 @@ void tst_QDir::relativeFilePath_data() QTest::newRow("27") << "C:" << "D:/" << "D:/"; QTest::newRow("28") << "C:/" << "D:" << "D:"; QTest::newRow("29") << "C:/" << "D:/" << "D:/"; -#ifndef Q_OS_WINRT QTest::newRow("30") << "C:/foo/bar" << "//anotherHost/foo/bar" << "//anotherHost/foo/bar"; QTest::newRow("31") << "//anotherHost/foo" << "//anotherHost/foo/bar" << "bar"; QTest::newRow("32") << "//anotherHost/foo" << "bar" << "bar"; QTest::newRow("33") << "//anotherHost/foo" << "C:/foo/bar" << "C:/foo/bar"; -#endif // !Q_OS_WINRT #endif QTest::newRow("resource0") << ":/prefix" << "foo.bar" << "foo.bar"; @@ -1550,7 +1623,7 @@ void tst_QDir::filePath() void tst_QDir::remove() { QFile f("remove-test"); - f.open(QIODevice::WriteOnly); + QVERIFY(f.open(QIODevice::WriteOnly)); f.close(); QDir dir; QVERIFY(dir.remove("remove-test")); @@ -1563,12 +1636,12 @@ void tst_QDir::remove() void tst_QDir::rename() { QFile f("rename-test"); - f.open(QIODevice::WriteOnly); + QVERIFY(f.open(QIODevice::WriteOnly)); f.close(); QDir dir; QVERIFY(dir.rename("rename-test", "rename-test-renamed")); QVERIFY(dir.rename("rename-test-renamed", "rename-test")); -#if defined(Q_OS_MAC) +#if defined(Q_OS_DARWIN) QVERIFY(!dir.rename("rename-test", "/etc/rename-test-renamed")); #elif !defined(Q_OS_WIN) // on windows this is possible - maybe make the test a bit better @@ -1657,7 +1730,10 @@ void tst_QDir::dirName() void tst_QDir::operator_eq() { QDir dir1("."); +QT_WARNING_PUSH +QT_WARNING_DISABLE_CLANG("-Wself-assign-overloaded") dir1 = dir1; +QT_WARNING_POP dir1.setPath(".."); } @@ -1666,9 +1742,9 @@ void tst_QDir::dotAndDotDot() { QDir dir(QString((m_dataPath + "/testdir/"))); QStringList entryList = dir.entryList(QDir::Dirs); - QCOMPARE(entryList, QStringList() << QString(".") << QString("..") << QString("dir") << QString("spaces")); + QCOMPARE(entryList, QStringList({ u"."_s, u".."_s, u"dir"_s, u"dir.lnk"_s, u"spaces"_s })); entryList = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); - QCOMPARE(entryList, QStringList() << QString("dir") << QString("spaces")); + QCOMPARE(entryList, QStringList({ u"dir"_s, u"dir.lnk"_s, u"spaces"_s })); } void tst_QDir::homePath() @@ -1681,7 +1757,7 @@ void tst_QDir::homePath() QVERIFY(QDir::isAbsolutePath(strHome)); #ifdef Q_OS_UNIX - if (strHome.length() > 1) // root dir = "/" + if (strHome.size() > 1) // root dir = "/" QVERIFY(!strHome.endsWith('/')); QByteArray envHome = qgetenv("HOME"); @@ -1690,16 +1766,12 @@ void tst_QDir::homePath() qputenv("HOME", envHome); #elif defined(Q_OS_WIN) - if (strHome.length() > 3 // root dir = "c:/"; "//" is not really valid... -#if defined(Q_OS_WINRT) - && strHome.length() > QDir::rootPath().length() -#endif - ) + if (strHome.length() > 3) // root dir = "c:/"; "//" is not really valid... QVERIFY(!strHome.endsWith('/')); #endif QStringList entries = homeDir.entryList(); - for (int i = 0; i < entries.count(); ++i) { + for (int i = 0; i < entries.size(); ++i) { QFileInfo fi(QDir::homePath() + "/" + entries[i]); QCOMPARE(fi.exists(), true); } @@ -1715,7 +1787,7 @@ void tst_QDir::tempPath() QVERIFY(QDir::isAbsolutePath(path)); #ifdef Q_OS_UNIX - if (path.length() > 1) // root dir = "/" + if (path.size() > 1) // root dir = "/" QVERIFY(!path.endsWith('/')); #elif defined(Q_OS_WIN) if (path.length() > 3) // root dir = "c:/"; "//" is not really valid... @@ -1747,6 +1819,10 @@ void tst_QDir::nativeSeparators() QCOMPARE(QDir::fromNativeSeparators(QLatin1String("/")), QString("/")); QCOMPARE(QDir::fromNativeSeparators(QLatin1String("\\")), QString("/")); QCOMPARE(QDir::fromNativeSeparators(QLatin1String("\\\\?\\C:\\")), QString("C:/")); + QCOMPARE(QDir::fromNativeSeparators(uR"(\\?\UNC\localhost\c$\tmp.txt)"_s), + u"//localhost/c$/tmp.txt"_s); + QCOMPARE(QDir::fromNativeSeparators(uR"(//?/UNC/localhost\c$\tmp.txt)"_s), + u"//localhost/c$/tmp.txt"_s); #else QCOMPARE(QDir::toNativeSeparators(QLatin1String("/")), QString("/")); QCOMPARE(QDir::toNativeSeparators(QLatin1String("\\")), QString("\\")); @@ -1786,16 +1862,16 @@ void tst_QDir::searchPaths() { QFETCH(QString, filename); QFETCH(QString, searchPathPrefixes); - QStringList searchPathPrefixList = searchPathPrefixes.split(";", QString::SkipEmptyParts); + QStringList searchPathPrefixList = searchPathPrefixes.split(";", Qt::SkipEmptyParts); QFETCH(QString, searchPaths); - QStringList searchPathsList = searchPaths.split(";", QString::SkipEmptyParts); + QStringList searchPathsList = searchPaths.split(";", Qt::SkipEmptyParts); QFETCH(QString, expectedAbsolutePath); bool exists = !expectedAbsolutePath.isEmpty(); - for (int i = 0; i < searchPathPrefixList.count(); ++i) { + for (int i = 0; i < searchPathPrefixList.size(); ++i) { QDir::setSearchPaths(searchPathPrefixList.at(i), searchPathsList.at(i).split(",")); } - for (int i = 0; i < searchPathPrefixList.count(); ++i) { + for (int i = 0; i < searchPathPrefixList.size(); ++i) { QCOMPARE(QDir::searchPaths(searchPathPrefixList.at(i)), searchPathsList.at(i).split(",")); } @@ -1806,19 +1882,19 @@ void tst_QDir::searchPaths() QCOMPARE(QFileInfo(filename).absoluteFilePath(), expectedAbsolutePath); } - for (int i = 0; i < searchPathPrefixList.count(); ++i) { + for (int i = 0; i < searchPathPrefixList.size(); ++i) { QDir::setSearchPaths(searchPathPrefixList.at(i), QStringList()); } - for (int i = 0; i < searchPathPrefixList.count(); ++i) { + for (int i = 0; i < searchPathPrefixList.size(); ++i) { QVERIFY(QDir::searchPaths(searchPathPrefixList.at(i)).isEmpty()); } - for (int i = 0; i < searchPathPrefixList.count(); ++i) { - foreach (QString path, searchPathsList.at(i).split(",")) { + for (int i = 0; i < searchPathPrefixList.size(); ++i) { + const auto parts = searchPathsList.at(i).split(","); + for (const QString &path : parts) QDir::addSearchPath(searchPathPrefixList.at(i), path); - } } - for (int i = 0; i < searchPathPrefixList.count(); ++i) { + for (int i = 0; i < searchPathPrefixList.size(); ++i) { QCOMPARE(QDir::searchPaths(searchPathPrefixList.at(i)), searchPathsList.at(i).split(",")); } @@ -1829,10 +1905,10 @@ void tst_QDir::searchPaths() QCOMPARE(QFileInfo(filename).absoluteFilePath(), expectedAbsolutePath); } - for (int i = 0; i < searchPathPrefixList.count(); ++i) { + for (int i = 0; i < searchPathPrefixList.size(); ++i) { QDir::setSearchPaths(searchPathPrefixList.at(i), QStringList()); } - for (int i = 0; i < searchPathPrefixList.count(); ++i) { + for (int i = 0; i < searchPathPrefixList.size(); ++i) { QVERIFY(QDir::searchPaths(searchPathPrefixList.at(i)).isEmpty()); } } @@ -2142,18 +2218,15 @@ void tst_QDir::match() void tst_QDir::drives() { - QFileInfoList list(QDir::drives()); + const QFileInfoList list(QDir::drives()); #if defined(Q_OS_WIN) QVERIFY(list.count() >= 1); //system QLatin1Char systemdrive('c'); #endif -#if defined(Q_OS_WINRT) - QSKIP("WinRT has no concept of drives"); -#endif #if defined(Q_OS_WIN) QVERIFY(list.count() <= 26); bool foundsystem = false; - foreach (QFileInfo fi, list) { + for (const QFileInfo &fi : list) { QCOMPARE(fi.absolutePath().size(), 3); //"x:/" QCOMPARE(fi.absolutePath().at(1), QChar(QLatin1Char(':'))); QCOMPARE(fi.absolutePath().at(2), QChar(QLatin1Char('/'))); @@ -2162,7 +2235,7 @@ void tst_QDir::drives() } QCOMPARE(foundsystem, true); #else - QCOMPARE(list.count(), 1); //root + QCOMPARE(list.size(), 1); //root QCOMPARE(list.at(0).absolutePath(), QLatin1String("/")); #endif } @@ -2174,7 +2247,7 @@ void tst_QDir::arrayOperator() QStringList entries(dir1.entryList()); int i = dir2.count(); - QCOMPARE(i, entries.count()); + QCOMPARE(i, entries.size()); --i; for (;i>=0;--i) { QCOMPARE(dir2[i], entries.at(i)); @@ -2206,14 +2279,14 @@ void tst_QDir::equalityOperator_data() << true; //need a path in the root directory that is unlikely to be a symbolic link. -#if defined (Q_OS_WINRT) - QString pathinroot(QDir::rootPath() + QLatin1String("assets/..")); -#elif defined (Q_OS_WIN) +#if defined (Q_OS_WIN) QString pathinroot("c:/windows/.."); -#elif defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED) +#elif defined(Q_OS_ANDROID) QString pathinroot("/system/.."); #elif defined(Q_OS_HAIKU) QString pathinroot("/boot/.."); +#elif defined(Q_OS_VXWORKS) + QString pathinroot("/tmp/.."); #else QString pathinroot("/usr/.."); #endif @@ -2279,9 +2352,9 @@ void tst_QDir::isRelative_data() QTest::newRow("homepath") << QDir::homePath() << false; QTest::newRow("temppath") << QDir::tempPath() << false; QTest::newRow("rootpath") << QDir::rootPath() << false; - foreach (QFileInfo root, QDir::drives()) { + const auto drives = QDir::drives(); + for (const QFileInfo &root : drives) QTest::newRow(root.absolutePath().toLocal8Bit()) << root.absolutePath() << false; - } QTest::newRow("resource") << ":/prefix" << false; } @@ -2339,14 +2412,12 @@ void tst_QDir::cdBelowRoot_data() QTest::newRow("android") << "/" << "system" << "/system"; #elif defined(Q_OS_UNIX) QTest::newRow("unix") << "/" << "tmp" << "/tmp"; -#elif defined(Q_OS_WINRT) - QTest::newRow("winrt") << QDir::rootPath() << QDir::rootPath() << QDir::rootPath(); #else // Windows+CE const QString systemDrive = QString::fromLocal8Bit(qgetenv("SystemDrive")) + QLatin1Char('/'); const QString systemRoot = QString::fromLocal8Bit(qgetenv("SystemRoot")); QTest::newRow("windows-drive") << systemDrive << systemRoot.mid(3) << QDir::cleanPath(systemRoot); - const QString uncRoot = QStringLiteral("//") + QtNetworkSettings::winServerName(); + const QString uncRoot = QStringLiteral("//") + QTest::uncServerName(); const QString testDirectory = QStringLiteral("testshare"); QTest::newRow("windows-share") << uncRoot << testDirectory << QDir::cleanPath(uncRoot + QLatin1Char('/') + testDirectory); @@ -2368,9 +2439,6 @@ void tst_QDir::cdBelowRoot() if (::getuid() == 0) QSKIP("Running this test as root doesn't make sense"); #endif -#ifdef Q_OS_WINRT - QSKIP("WinRT has no concept of system root"); -#endif QDir dir(targetPath); QVERIFY2(!dir.cd("../.."), qPrintable(dir.absolutePath())); QCOMPARE(dir.path(), targetPath); @@ -2403,6 +2471,45 @@ void tst_QDir::nonEmptyDir() QVERIFY(!dir.isEmpty()); } +void tst_QDir::stdfilesystem() +{ +#if QT_CONFIG(cxx17_filesystem) + namespace fs = std::filesystem; + fs::path path("."); + QDir dir(path); + QCOMPARE(dir, QDir(QStringLiteral("."))); + + path = path / "testdir" / "dir"; + dir.setPath(path); + + QCOMPARE(dir, QDir(QStringLiteral("./testdir/dir"))); + + auto fsPath = dir.filesystemPath(); + QCOMPARE(QString::fromStdU16String(fsPath.u16string()), dir.path()); + fsPath = dir.filesystemAbsolutePath(); + QCOMPARE(QString::fromStdU16String(fsPath.u16string()), dir.absolutePath()); + fsPath = dir.filesystemCanonicalPath(); + QCOMPARE(QString::fromStdU16String(fsPath.u16string()), dir.canonicalPath()); + + QDir emptyPath(fs::path{}); + QCOMPARE(emptyPath, QDir(QStringLiteral("."))); + + { + // Test QDir ctor with filter and sorting reversed + QDir filteredDir(fs::path{"."} / "searchdir", "subdir*", + QDir::SortFlag::Reversed, QDir::Filter::Dirs); + QStringList entries = filteredDir.entryList(); + QCOMPARE(entries, QStringList() << "subdir2" << "subdir1"); + QCOMPARE(filteredDir.sorting(), QDir::SortFlag::Reversed); + QCOMPARE(filteredDir.filter(), QDir::Filter::Dirs); + QCOMPARE(filteredDir.nameFilters().size(), 1); + QCOMPARE(filteredDir.nameFilters().first(), "subdir*"); + } +#else + QSKIP("Not supported"); +#endif +} + QTEST_MAIN(tst_QDir) #include "tst_qdir.moc" diff --git a/tests/auto/corelib/io/qdiriterator/CMakeLists.txt b/tests/auto/corelib/io/qdiriterator/CMakeLists.txt new file mode 100644 index 0000000000..41784546aa --- /dev/null +++ b/tests/auto/corelib/io/qdiriterator/CMakeLists.txt @@ -0,0 +1,45 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qdiriterator Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qdiriterator LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +# Collect test data +list(APPEND test_data "entrylist") + +qt_internal_add_test(tst_qdiriterator + SOURCES + tst_qdiriterator.cpp + LIBRARIES + Qt::CorePrivate + TESTDATA ${test_data} +) + +# Resources: +set(qdiriterator_resource_files + "entrylist/directory/dummy" + "entrylist/file" +) + +qt_internal_add_resource(tst_qdiriterator "qdiriterator" + PREFIX + "/testdata/" + FILES + ${qdiriterator_resource_files} +) + + +## Scopes: +##################################################################### + +qt_internal_extend_target(tst_qdiriterator CONDITION CONFIG___contains___builtin_testdata + DEFINES + BUILTIN_TESTDATA +) diff --git a/tests/auto/corelib/io/qdiriterator/qdiriterator.pro b/tests/auto/corelib/io/qdiriterator/qdiriterator.pro deleted file mode 100644 index 7c1f026bdb..0000000000 --- a/tests/auto/corelib/io/qdiriterator/qdiriterator.pro +++ /dev/null @@ -1,8 +0,0 @@ -CONFIG += testcase -TARGET = tst_qdiriterator -QT = core-private core testlib -SOURCES = tst_qdiriterator.cpp -RESOURCES += qdiriterator.qrc - -TESTDATA += entrylist -contains(CONFIG, builtin_testdata): DEFINES += BUILTIN_TESTDATA diff --git a/tests/auto/corelib/io/qdiriterator/qdiriterator.qrc b/tests/auto/corelib/io/qdiriterator/qdiriterator.qrc deleted file mode 100644 index af9998bdb4..0000000000 --- a/tests/auto/corelib/io/qdiriterator/qdiriterator.qrc +++ /dev/null @@ -1,6 +0,0 @@ -<!DOCTYPE RCC><RCC version="1.0"> -<qresource prefix="/testdata/"> - <file>entrylist/file</file> - <file>entrylist/directory/dummy</file> -</qresource> -</RCC> diff --git a/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp b/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp index 00e1c74d07..a0a8917c27 100644 --- a/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp +++ b/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp @@ -1,50 +1,30 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - -#include <QtTest/QtTest> +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QTest> #include <qcoreapplication.h> #include <qdebug.h> #include <qdiriterator.h> #include <qfileinfo.h> #include <qstringlist.h> +#include <QSet> +#include <QString> #include <QtCore/private/qfsfileengine_p.h> -#if defined(Q_OS_VXWORKS) || defined(Q_OS_WINRT) +#if defined(Q_OS_VXWORKS) #define Q_NO_SYMLINKS #endif -#if defined(Q_OS_WIN) -# include "../../../network-settings.h" +#include "../../../../shared/filesystem.h" + +#ifdef Q_OS_ANDROID +#include <QStandardPaths> #endif +using namespace Qt::StringLiterals; + Q_DECLARE_METATYPE(QDirIterator::IteratorFlags) Q_DECLARE_METATYPE(QDir::Filters) @@ -66,16 +46,10 @@ private: // convenience functions return false; } - enum Cleanup { DoDelete, DontDelete }; - bool createFile(const QString &fileName, Cleanup cleanup = DoDelete) + bool createFile(const QString &fileName) { QFile file(fileName); - if (file.open(QIODevice::WriteOnly)) { - if (cleanup == DoDelete) - createdFiles << fileName; - return true; - } - return false; + return file.open(QIODevice::WriteOnly); } bool createLink(const QString &destination, const QString &linkName) @@ -89,7 +63,6 @@ private: // convenience functions private slots: void initTestCase(); - void cleanupTestCase(); void iterateRelativeDirectory_data(); void iterateRelativeDirectory(); void iterateResource_data(); @@ -97,6 +70,8 @@ private slots: void stopLinkLoop(); #ifdef QT_BUILD_INTERNAL void engineWithNoIterator(); + void testQFsFileEngineIterator_data() { iterateRelativeDirectory_data(); } + void testQFsFileEngineIterator(); #endif void absoluteFilePathsFromRelativeIteratorPath(); void recurseWithFilters() const; @@ -110,25 +85,24 @@ private slots: #ifndef Q_OS_WIN void hiddenDirs_hiddenFiles(); #endif -#ifdef BUILTIN_TESTDATA + private: QSharedPointer<QTemporaryDir> m_dataDir; -#endif }; void tst_QDirIterator::initTestCase() { -#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED) - QString testdata_dir = QStandardPaths::writableLocation(QStandardPaths::CacheLocation); + QString testdata_dir; +#ifdef Q_OS_ANDROID + testdata_dir = QStandardPaths::writableLocation(QStandardPaths::CacheLocation); QString resourceSourcePath = QStringLiteral(":/testdata"); QDirIterator it(resourceSourcePath, QDirIterator::Subdirectories); while (it.hasNext()) { - it.next(); - - QFileInfo fileInfo = it.fileInfo(); + QFileInfo fileInfo = it.nextFileInfo(); if (!fileInfo.isDir()) { - QString destination = testdata_dir + QLatin1Char('/') + fileInfo.filePath().mid(resourceSourcePath.length()); + QString destination = testdata_dir + QLatin1Char('/') + + fileInfo.filePath().mid(resourceSourcePath.length()); QFileInfo destinationFileInfo(destination); if (!destinationFileInfo.exists()) { QDir().mkpath(destinationFileInfo.path()); @@ -143,29 +117,22 @@ void tst_QDirIterator::initTestCase() #elif defined(BUILTIN_TESTDATA) m_dataDir = QEXTRACTTESTDATA("/testdata"); QVERIFY2(!m_dataDir.isNull(), qPrintable("Could not extract test data")); - QString testdata_dir = m_dataDir->path(); + testdata_dir = m_dataDir->path(); #else - - // chdir into testdata directory, then find testdata by relative paths. - QString testdata_dir = QFileInfo(QFINDTESTDATA("entrylist")).absolutePath(); + m_dataDir.reset(new QTemporaryDir); + testdata_dir = m_dataDir->path(); #endif + QVERIFY(!testdata_dir.isEmpty()); + // Must call QDir::setCurrent() here because all the tests that use relative + // paths depend on that. QVERIFY2(QDir::setCurrent(testdata_dir), qPrintable("Could not chdir to " + testdata_dir)); - QFile::remove("entrylist/entrylist1.lnk"); - QFile::remove("entrylist/entrylist2.lnk"); - QFile::remove("entrylist/entrylist3.lnk"); - QFile::remove("entrylist/entrylist4.lnk"); - QFile::remove("entrylist/directory/entrylist1.lnk"); - QFile::remove("entrylist/directory/entrylist2.lnk"); - QFile::remove("entrylist/directory/entrylist3.lnk"); - QFile::remove("entrylist/directory/entrylist4.lnk"); - createDirectory("entrylist"); createDirectory("entrylist/directory"); - createFile("entrylist/file", DontDelete); + createFile("entrylist/file"); createFile("entrylist/writable"); - createFile("entrylist/directory/dummy", DontDelete); + createFile("entrylist/directory/dummy"); createDirectory("recursiveDirs"); createDirectory("recursiveDirs/dir1"); @@ -213,20 +180,6 @@ void tst_QDirIterator::initTestCase() #endif } -void tst_QDirIterator::cleanupTestCase() -{ - Q_FOREACH(QString fileName, createdFiles) - QFile::remove(fileName); - - Q_FOREACH(QString dirName, createdDirectories) - currentDir.rmdir(dirName); - -#ifdef Q_OS_WINRT - QDir::setCurrent(QCoreApplication::applicationDirPath()); -#endif // Q_OS_WINRT - -} - void tst_QDirIterator::iterateRelativeDirectory_data() { QTest::addColumn<QString>("dirName"); // relative from current path or abs @@ -351,7 +304,7 @@ void tst_QDirIterator::iterateRelativeDirectory() QFETCH(QDirIterator::IteratorFlags, flags); QFETCH(QDir::Filters, filters); QFETCH(QStringList, nameFilters); - QFETCH(QStringList, entries); + QFETCH(const QStringList, entries); QDirIterator it(dirName, nameFilters, filters, flags); QStringList list; @@ -379,13 +332,13 @@ void tst_QDirIterator::iterateRelativeDirectory() list.sort(); QStringList sortedEntries; - foreach(QString item, entries) + for (const QString &item : entries) sortedEntries.append(QFileInfo(item).canonicalFilePath()); sortedEntries.sort(); if (sortedEntries != list) { - qDebug() << "EXPECTED:" << sortedEntries; qDebug() << "ACTUAL: " << list; + qDebug() << "EXPECTED:" << sortedEntries; } QCOMPARE(list, sortedEntries); @@ -402,13 +355,14 @@ void tst_QDirIterator::iterateResource_data() QTest::newRow("invalid") << QString::fromLatin1(":/testdata/burpaburpa") << QDirIterator::IteratorFlags{} << QDir::Filters(QDir::NoFilter) << QStringList(QLatin1String("*")) << QStringList(); - QTest::newRow(":/testdata") << QString::fromLatin1(":/testdata/") << QDirIterator::IteratorFlags{} + QTest::newRow("qrc:/testdata") << u":/testdata/"_s << QDirIterator::IteratorFlags{} << QDir::Filters(QDir::NoFilter) << QStringList(QLatin1String("*")) << QString::fromLatin1(":/testdata/entrylist").split(QLatin1String(",")); - QTest::newRow(":/testdata/entrylist") << QString::fromLatin1(":/testdata/entrylist") << QDirIterator::IteratorFlags{} + QTest::newRow("qrc:/testdata/entrylist") << u":/testdata/entrylist"_s << QDirIterator::IteratorFlags{} << QDir::Filters(QDir::NoFilter) << QStringList(QLatin1String("*")) << QString::fromLatin1(":/testdata/entrylist/directory,:/testdata/entrylist/file").split(QLatin1String(",")); - QTest::newRow(":/testdata recursive") << QString::fromLatin1(":/testdata") << QDirIterator::IteratorFlags(QDirIterator::Subdirectories) + QTest::newRow("qrc:/testdata recursive") << u":/testdata"_s + << QDirIterator::IteratorFlags(QDirIterator::Subdirectories) << QDir::Filters(QDir::NoFilter) << QStringList(QLatin1String("*")) << QString::fromLatin1(":/testdata/entrylist,:/testdata/entrylist/directory,:/testdata/entrylist/directory/dummy,:/testdata/entrylist/file").split(QLatin1String(",")); } @@ -434,8 +388,8 @@ void tst_QDirIterator::iterateResource() sortedEntries.sort(); if (sortedEntries != list) { - qDebug() << "EXPECTED:" << sortedEntries; qDebug() << "ACTUAL:" << list; + qDebug() << "EXPECTED:" << sortedEntries; } QCOMPARE(list, sortedEntries); @@ -468,7 +422,7 @@ void tst_QDirIterator::stopLinkLoop() QStringList list; int max = 200; while (--max && it.hasNext()) - it.next(); + it.nextFileInfo(); QVERIFY(max); // The goal of this test is only to ensure that the test above don't malfunction @@ -482,16 +436,20 @@ public: : QFSFileEngine(fileName) { } - QAbstractFileEngineIterator *beginEntryList(QDir::Filters, const QStringList &) - { return 0; } + IteratorUniquePtr + beginEntryList(const QString &, QDir::Filters, const QStringList &) override + { return nullptr; } }; class EngineWithNoIteratorHandler : public QAbstractFileEngineHandler { + Q_DISABLE_COPY_MOVE(EngineWithNoIteratorHandler) public: - QAbstractFileEngine *create(const QString &fileName) const + EngineWithNoIteratorHandler() = default; + + std::unique_ptr<QAbstractFileEngine> create(const QString &fileName) const override { - return new EngineWithNoIterator(fileName); + return std::make_unique<EngineWithNoIterator>(fileName); } }; #endif @@ -504,15 +462,48 @@ void tst_QDirIterator::engineWithNoIterator() QDir("entrylist").entryList(); QVERIFY(true); // test that the above line doesn't crash } + +class CustomEngineHandler : public QAbstractFileEngineHandler +{ + Q_DISABLE_COPY_MOVE(CustomEngineHandler) +public: + CustomEngineHandler() = default; + + std::unique_ptr<QAbstractFileEngine> create(const QString &fileName) const override + { + // We want to test QFSFileEngine specifically, so force QDirIterator to use it + // over the default QFileSystemEngine + return std::make_unique<QFSFileEngine>(fileName); + } +}; + +void tst_QDirIterator::testQFsFileEngineIterator() +{ + QFETCH(QString, dirName); + QFETCH(QStringList, nameFilters); + QFETCH(QDir::Filters, filters); + QFETCH(QDirIterator::IteratorFlags, flags); + + if (dirName == u"empty") + return; // This row isn't useful in this test + + CustomEngineHandler handler; + bool isEmpty = true; + QDirIterator iter(dirName, nameFilters, filters, flags); + while (iter.hasNext()) { + const QFileInfo &fi = iter.nextFileInfo(); + if (fi.filePath().contains(u"entrylist")) + isEmpty = false; // At least one entry in `entrylist` dir + } + QVERIFY(!isEmpty); +} #endif void tst_QDirIterator::absoluteFilePathsFromRelativeIteratorPath() { QDirIterator it("entrylist/", QDir::NoDotAndDotDot); - while (it.hasNext()) { - it.next(); - QVERIFY(QFileInfo(it.filePath()).absoluteFilePath().contains("entrylist")); - } + while (it.hasNext()) + QVERIFY(it.nextFileInfo().absoluteFilePath().contains("entrylist")); } void tst_QDirIterator::recurseWithFilters() const @@ -529,11 +520,9 @@ void tst_QDirIterator::recurseWithFilters() const expectedEntries.insert(QString::fromLatin1("recursiveDirs/textFileA.txt")); QVERIFY(it.hasNext()); - it.next(); - actualEntries.insert(it.fileInfo().filePath()); + actualEntries.insert(it.next()); QVERIFY(it.hasNext()); - it.next(); - actualEntries.insert(it.fileInfo().filePath()); + actualEntries.insert(it.next()); QCOMPARE(actualEntries, expectedEntries); QVERIFY(!it.hasNext()); @@ -550,23 +539,31 @@ void tst_QDirIterator::longPath() while (dir.exists(dirName) || dir.mkdir(dirName)) { ++n; dirName.append('x'); + if (n >= 20480) + { + break; + } + } + if (n >= 20480) + { + qWarning("No maximum length on directory names"); } - QDirIterator it(dir.absolutePath(), QDir::NoDotAndDotDot|QDir::Dirs, QDirIterator::Subdirectories); int m = 0; while (it.hasNext()) { ++m; - it.next(); + it.nextFileInfo(); } QCOMPARE(n, m); - dirName.chop(1); - while (dirName.length() > 0 && dir.exists(dirName) && dir.rmdir(dirName)) { + while (dirName.size() > 0 && dir.exists(dirName) && dir.rmdir(dirName)) { + --n; dirName.chop(1); } - dir.cdUp(); - dir.rmdir("longpaths"); + QCOMPARE(n, 0); + QVERIFY(dir.cdUp()); + QVERIFY(dir.rmdir("longpaths")); } void tst_QDirIterator::dirorder() @@ -592,11 +589,11 @@ void tst_QDirIterator::uncPaths_data() { QTest::addColumn<QString>("dirName"); QTest::newRow("uncserver") - <<QString("//" + QtNetworkSettings::winServerName()); + <<QString("//" + QTest::uncServerName()); QTest::newRow("uncserver/testshare") - <<QString("//" + QtNetworkSettings::winServerName() + "/testshare"); + <<QString("//" + QTest::uncServerName() + "/testshare"); QTest::newRow("uncserver/testshare/tmp") - <<QString("//" + QtNetworkSettings::winServerName() + "/testshare/tmp"); + <<QString("//" + QTest::uncServerName() + "/testshare/tmp"); } void tst_QDirIterator::uncPaths() { @@ -623,8 +620,7 @@ void tst_QDirIterator::hiddenDirs_hiddenFiles() QDirIterator di("hiddenDirs_hiddenFiles", QDir::Files | QDir::Hidden | QDir::NoDotAndDotDot, QDirIterator::Subdirectories); while (di.hasNext()) { ++matches; - QString filename = di.next(); - if (QFileInfo(filename).isDir()) + if (di.nextFileInfo().isDir()) ++failures; // search was only supposed to find files } QCOMPARE(matches, 6); @@ -637,8 +633,7 @@ void tst_QDirIterator::hiddenDirs_hiddenFiles() QDirIterator di("hiddenDirs_hiddenFiles", QDir::Dirs | QDir::Hidden | QDir::NoDotAndDotDot, QDirIterator::Subdirectories); while (di.hasNext()) { ++matches; - QString filename = di.next(); - if (!QFileInfo(filename).isDir()) + if (!di.nextFileInfo().isDir()) ++failures; // search was only supposed to find files } QCOMPARE(matches, 6); diff --git a/tests/auto/corelib/io/qdirlisting/.gitignore b/tests/auto/corelib/io/qdirlisting/.gitignore new file mode 100644 index 0000000000..4965f97d03 --- /dev/null +++ b/tests/auto/corelib/io/qdirlisting/.gitignore @@ -0,0 +1 @@ +tst_qdirlisting diff --git a/tests/auto/corelib/io/qdirlisting/CMakeLists.txt b/tests/auto/corelib/io/qdirlisting/CMakeLists.txt new file mode 100644 index 0000000000..77431776d9 --- /dev/null +++ b/tests/auto/corelib/io/qdirlisting/CMakeLists.txt @@ -0,0 +1,46 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qdirlisting Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qdirlisting LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +# Collect test data +list(APPEND test_data "entrylist") + +qt_internal_add_test(tst_qdirlisting + SOURCES + tst_qdirlisting.cpp + LIBRARIES + Qt::Core + Qt::CorePrivate + TESTDATA ${test_data} +) + +# Resources: +set(qdirlisting_resource_files + "entrylist/directory/dummy" + "entrylist/file" +) + +qt_internal_add_resource(tst_qdirlisting "qdirlisting" + PREFIX + "/testdata/" + FILES + ${qdirlisting_resource_files} +) + + +## Scopes: +##################################################################### + +qt_internal_extend_target(tst_qdirlisting CONDITION CONFIG___contains___builtin_testdata + DEFINES + BUILTIN_TESTDATA +) diff --git a/tests/auto/corelib/io/qdirlisting/entrylist/directory/dummy b/tests/auto/corelib/io/qdirlisting/entrylist/directory/dummy new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/auto/corelib/io/qdirlisting/entrylist/directory/dummy diff --git a/tests/auto/corelib/io/qdirlisting/entrylist/file b/tests/auto/corelib/io/qdirlisting/entrylist/file new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/auto/corelib/io/qdirlisting/entrylist/file diff --git a/tests/auto/corelib/io/qdirlisting/tst_qdirlisting.cpp b/tests/auto/corelib/io/qdirlisting/tst_qdirlisting.cpp new file mode 100644 index 0000000000..e2ac1858da --- /dev/null +++ b/tests/auto/corelib/io/qdirlisting/tst_qdirlisting.cpp @@ -0,0 +1,651 @@ +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QTest> + +#include <qcoreapplication.h> +#include <qdebug.h> +#include <qdirlisting.h> +#include <qfileinfo.h> +#include <qstringlist.h> +#include <QSet> +#include <QString> + +#include <QtCore/private/qfsfileengine_p.h> + +#if defined(Q_OS_VXWORKS) +#define Q_NO_SYMLINKS +#endif + +#include "../../../../shared/filesystem.h" + +#ifdef Q_OS_ANDROID +#include <QStandardPaths> +#endif + +using namespace Qt::StringLiterals; + +Q_DECLARE_METATYPE(QDirListing::IteratorFlags) +Q_DECLARE_METATYPE(QDir::Filters) + +using ItFlag = QDirListing::IteratorFlag; + +class tst_QDirListing : public QObject +{ + Q_OBJECT + +private: // convenience functions + QStringList createdDirectories; + QStringList createdFiles; + + QDir currentDir; + bool createDirectory(const QString &dirName) + { + if (currentDir.mkdir(dirName)) { + createdDirectories.prepend(dirName); + return true; + } + return false; + } + + bool createFile(const QString &fileName) + { + QFile file(fileName); + return file.open(QIODevice::WriteOnly); + } + + bool createLink(const QString &destination, const QString &linkName) + { + if (QFile::link(destination, linkName)) { + createdFiles << linkName; + return true; + } + return false; + } + +private slots: + void initTestCase(); + void iterateRelativeDirectory_data(); + void iterateRelativeDirectory(); + void iterateResource_data(); + void iterateResource(); + void stopLinkLoop(); +#ifdef QT_BUILD_INTERNAL + void engineWithNoIterator(); + void testQFsFileEngineIterator_data() { iterateRelativeDirectory_data(); } + void testQFsFileEngineIterator(); +#endif + void absoluteFilePathsFromRelativeIteratorPath(); + void recurseWithFilters() const; + void longPath(); + void dirorder(); + void relativePaths(); +#if defined(Q_OS_WIN) + void uncPaths_data(); + void uncPaths(); +#endif +#ifndef Q_OS_WIN + void hiddenFiles(); + void hiddenDirs(); +#endif + + void withStdAlgorithms(); + +private: + QSharedPointer<QTemporaryDir> m_dataDir; +}; + +void tst_QDirListing::initTestCase() +{ + QString testdata_dir; +#ifdef Q_OS_ANDROID + testdata_dir = QStandardPaths::writableLocation(QStandardPaths::CacheLocation); + QString resourceSourcePath = QStringLiteral(":/testdata"); + for (const auto &dirEntry : QDirListing(resourceSourcePath, ItFlag::Recursive)) { + if (!dirEntry.isDir()) { + const QString &filePath = dirEntry.filePath(); + QString destination = testdata_dir + QLatin1Char('/') + + filePath.sliced(resourceSourcePath.length()); + QFileInfo destinationFileInfo(destination); + if (!destinationFileInfo.exists()) { + QDir().mkpath(destinationFileInfo.path()); + if (!QFile::copy(filePath, destination)) + qWarning("Failed to copy %s", qPrintable(filePath)); + } + } + + } + + testdata_dir += QStringLiteral("/entrylist"); +#elif defined(BUILTIN_TESTDATA) + m_dataDir = QEXTRACTTESTDATA("/testdata"); + QVERIFY2(!m_dataDir.isNull(), qPrintable("Could not extract test data")); + testdata_dir = m_dataDir->path(); +#else + m_dataDir.reset(new QTemporaryDir); + testdata_dir = m_dataDir->path(); +#endif + + QVERIFY(!testdata_dir.isEmpty()); + // Must call QDir::setCurrent() here because all the tests that use relative + // paths depend on that. + QVERIFY2(QDir::setCurrent(testdata_dir), qPrintable("Could not chdir to " + testdata_dir)); + + createDirectory("entrylist"); + createDirectory("entrylist/directory"); + createFile("entrylist/file"); + createFile("entrylist/writable"); + createFile("entrylist/directory/dummy"); + + createDirectory("recursiveDirs"); + createDirectory("recursiveDirs/dir1"); + createFile("recursiveDirs/textFileA.txt"); + createFile("recursiveDirs/dir1/aPage.html"); + createFile("recursiveDirs/dir1/textFileB.txt"); + + createDirectory("foo"); + createDirectory("foo/bar"); + createFile("foo/bar/readme.txt"); + + createDirectory("empty"); + +#ifndef Q_NO_SYMLINKS +# if defined(Q_OS_WIN) + // ### Sadly, this is a platform difference right now. + createLink("entrylist/file", "entrylist/linktofile.lnk"); +# ifndef Q_NO_SYMLINKS_TO_DIRS + createLink("entrylist/directory", "entrylist/linktodirectory.lnk"); +# endif + createLink("entrylist/nothing", "entrylist/brokenlink.lnk"); +# else + createLink("file", "entrylist/linktofile.lnk"); +# ifndef Q_NO_SYMLINKS_TO_DIRS + createLink("directory", "entrylist/linktodirectory.lnk"); +# endif + createLink("nothing", "entrylist/brokenlink.lnk"); +# endif +#endif + +#if !defined(Q_OS_WIN) + createDirectory("hiddenDirs_hiddenFiles"); + createFile("hiddenDirs_hiddenFiles/normalFile"); + createFile("hiddenDirs_hiddenFiles/.hiddenFile"); + createDirectory("hiddenDirs_hiddenFiles/normalDirectory"); + createDirectory("hiddenDirs_hiddenFiles/.hiddenDirectory"); + createFile("hiddenDirs_hiddenFiles/normalDirectory/normalFile"); + createFile("hiddenDirs_hiddenFiles/normalDirectory/.hiddenFile"); + createFile("hiddenDirs_hiddenFiles/.hiddenDirectory/normalFile"); + createFile("hiddenDirs_hiddenFiles/.hiddenDirectory/.hiddenFile"); + createDirectory("hiddenDirs_hiddenFiles/normalDirectory/subdir"); + createDirectory("hiddenDirs_hiddenFiles/normalDirectory/.hidden-subdir"); + createDirectory("hiddenDirs_hiddenFiles/.hiddenDirectory/subdir"); + createDirectory("hiddenDirs_hiddenFiles/.hiddenDirectory/.hidden-subdir"); +#endif +} + +void tst_QDirListing::iterateRelativeDirectory_data() +{ + QTest::addColumn<QString>("dirName"); // relative from current path or abs + QTest::addColumn<QDirListing::IteratorFlags>("flags"); + QTest::addColumn<QDir::Filters>("filters"); + QTest::addColumn<QStringList>("nameFilters"); + QTest::addColumn<QStringList>("entries"); + + QTest::newRow("no flags") + << QString("entrylist") << QDirListing::IteratorFlags{} + << QDir::Filters(QDir::NoFilter) << QStringList("*") + << QString( + "entrylist/.," + "entrylist/..," + "entrylist/file," +#ifndef Q_NO_SYMLINKS + "entrylist/linktofile.lnk," +#endif + "entrylist/directory," +#if !defined(Q_NO_SYMLINKS) && !defined(Q_NO_SYMLINKS_TO_DIRS) + "entrylist/linktodirectory.lnk," +#endif + "entrylist/writable").split(','); + + QTest::newRow("NoDot") + << QString("entrylist") << QDirListing::IteratorFlags{} + << QDir::Filters(QDir::AllEntries | QDir::NoDot) << QStringList("*") + << QString( + "entrylist/..," + "entrylist/file," +#ifndef Q_NO_SYMLINKS + "entrylist/linktofile.lnk," +#endif + "entrylist/directory," +#if !defined(Q_NO_SYMLINKS) && !defined(Q_NO_SYMLINKS_TO_DIRS) + "entrylist/linktodirectory.lnk," +#endif + "entrylist/writable").split(','); + + QTest::newRow("NoDotDot") + << QString("entrylist") << QDirListing::IteratorFlags{} + << QDir::Filters(QDir::AllEntries | QDir::NoDotDot) << QStringList("*") + << QString( + "entrylist/.," + "entrylist/file," +#ifndef Q_NO_SYMLINKS + "entrylist/linktofile.lnk," +#endif + "entrylist/directory," +#if !defined(Q_NO_SYMLINKS) && !defined(Q_NO_SYMLINKS_TO_DIRS) + "entrylist/linktodirectory.lnk," +#endif + "entrylist/writable").split(','); + + QTest::newRow("NoDotAndDotDot") + << QString("entrylist") << QDirListing::IteratorFlags{} + << QDir::Filters(QDir::AllEntries | QDir::NoDotAndDotDot) << QStringList("*") + << QString( + "entrylist/file," +#ifndef Q_NO_SYMLINKS + "entrylist/linktofile.lnk," +#endif + "entrylist/directory," +#if !defined(Q_NO_SYMLINKS) && !defined(Q_NO_SYMLINKS_TO_DIRS) + "entrylist/linktodirectory.lnk," +#endif + "entrylist/writable").split(','); + + QTest::newRow("QDir::Subdirectories | QDir::FollowSymlinks") + << QString("entrylist") << QDirListing::IteratorFlags(ItFlag::Recursive | ItFlag::FollowSymlinks) + << QDir::Filters(QDir::NoFilter) << QStringList("*") + << QString( + "entrylist/.," + "entrylist/..," + "entrylist/directory/.," + "entrylist/directory/..," + "entrylist/file," +#ifndef Q_NO_SYMLINKS + "entrylist/linktofile.lnk," +#endif + "entrylist/directory," + "entrylist/directory/dummy," +#if !defined(Q_NO_SYMLINKS) && !defined(Q_NO_SYMLINKS_TO_DIRS) + "entrylist/linktodirectory.lnk," +#endif + "entrylist/writable").split(','); + + QTest::newRow("QDir::Subdirectories / QDir::Files") + << QString("entrylist") << QDirListing::IteratorFlags(ItFlag::Recursive) + << QDir::Filters(QDir::Files) << QStringList("*") + << QString("entrylist/directory/dummy," + "entrylist/file," +#ifndef Q_NO_SYMLINKS + "entrylist/linktofile.lnk," +#endif + "entrylist/writable").split(','); + + QTest::newRow("QDir::Subdirectories | QDir::FollowSymlinks / QDir::Files") + << QString("entrylist") << QDirListing::IteratorFlags(ItFlag::Recursive | QDirListing::IteratorFlag::FollowSymlinks) + << QDir::Filters(QDir::Files) << QStringList("*") + << QString("entrylist/file," +#ifndef Q_NO_SYMLINKS + "entrylist/linktofile.lnk," +#endif + "entrylist/directory/dummy," + "entrylist/writable").split(','); + + QTest::newRow("empty, default") + << QString("empty") << QDirListing::IteratorFlags{} + << QDir::Filters(QDir::NoFilter) << QStringList("*") + << QString("empty/.,empty/..").split(','); + + QTest::newRow("empty, QDir::NoDotAndDotDot") + << QString("empty") << QDirListing::IteratorFlags{} + << QDir::Filters(QDir::NoDotAndDotDot) << QStringList("*") + << QStringList(); +} + +void tst_QDirListing::iterateRelativeDirectory() +{ + QFETCH(QString, dirName); + QFETCH(QDirListing::IteratorFlags, flags); + QFETCH(QDir::Filters, filters); + QFETCH(QStringList, nameFilters); + QFETCH(const QStringList, entries); + + QStringList list; + for (const auto &dirEntry : QDirListing(dirName, nameFilters, filters, flags)) { + // Using canonical file paths for final comparison + list << dirEntry.fileInfo().canonicalFilePath(); + } + + // The order of items returned by QDirListing is not guaranteed. + list.sort(); + + QStringList sortedEntries; + for (const QString &item : entries) + sortedEntries.append(QFileInfo(item).canonicalFilePath()); + sortedEntries.sort(); + + if (sortedEntries != list) { + qDebug() << "ACTUAL: " << list; + qDebug() << "EXPECTED:" << sortedEntries; + } + + QCOMPARE(list, sortedEntries); +} + +void tst_QDirListing::iterateResource_data() +{ + QTest::addColumn<QString>("dirName"); // relative from current path or abs + QTest::addColumn<QDirListing::IteratorFlags>("flags"); + QTest::addColumn<QDir::Filters>("filters"); + QTest::addColumn<QStringList>("nameFilters"); + QTest::addColumn<QStringList>("entries"); + + QTest::newRow("invalid") << QString::fromLatin1(":/testdata/burpaburpa") << QDirListing::IteratorFlags{} + << QDir::Filters(QDir::NoFilter) << QStringList(QLatin1String("*")) + << QStringList(); + QTest::newRow("qrc:/testdata") << u":/testdata/"_s << QDirListing::IteratorFlags{} + << QDir::Filters(QDir::NoFilter) << QStringList(QLatin1String("*")) + << QString::fromLatin1(":/testdata/entrylist").split(QLatin1String(",")); + QTest::newRow("qrc:/testdata/entrylist") << u":/testdata/entrylist"_s << QDirListing::IteratorFlags{} + << QDir::Filters(QDir::NoFilter) << QStringList(QLatin1String("*")) + << QString::fromLatin1(":/testdata/entrylist/directory,:/testdata/entrylist/file").split(QLatin1String(",")); + QTest::newRow("qrc:/testdata recursive") << u":/testdata"_s + << QDirListing::IteratorFlags(ItFlag::Recursive) + << QDir::Filters(QDir::NoFilter) << QStringList(QLatin1String("*")) + << QString::fromLatin1(":/testdata/entrylist,:/testdata/entrylist/directory,:/testdata/entrylist/directory/dummy,:/testdata/entrylist/file").split(QLatin1String(",")); +} + +void tst_QDirListing::iterateResource() +{ + QFETCH(QString, dirName); + QFETCH(QDirListing::IteratorFlags, flags); + QFETCH(QDir::Filters, filters); + QFETCH(QStringList, nameFilters); + QFETCH(QStringList, entries); + + QStringList list; + for (const auto &dirEntry : QDirListing(dirName, nameFilters, filters, flags)) { + QString dir = dirEntry.fileInfo().filePath(); + if (!dir.startsWith(":/qt-project.org")) + list.emplace_back(std::move(dir)); + } + + list.sort(); + QStringList sortedEntries = entries; + sortedEntries.sort(); + + if (sortedEntries != list) { + qDebug() << "ACTUAL:" << list; + qDebug() << "EXPECTED:" << sortedEntries; + } + + QCOMPARE(list, sortedEntries); +} + +void tst_QDirListing::stopLinkLoop() +{ +#ifdef Q_OS_WIN + // ### Sadly, this is a platform difference right now. + createLink(QDir::currentPath() + QLatin1String("/entrylist"), "entrylist/entrylist1.lnk"); + createLink("entrylist/.", "entrylist/entrylist2.lnk"); + createLink("entrylist/../entrylist/.", "entrylist/entrylist3.lnk"); + createLink("entrylist/..", "entrylist/entrylist4.lnk"); + createLink(QDir::currentPath() + QLatin1String("/entrylist"), "entrylist/directory/entrylist1.lnk"); + createLink("entrylist/.", "entrylist/directory/entrylist2.lnk"); + createLink("entrylist/../directory/.", "entrylist/directory/entrylist3.lnk"); + createLink("entrylist/..", "entrylist/directory/entrylist4.lnk"); +#else + createLink(QDir::currentPath() + QLatin1String("/entrylist"), "entrylist/entrylist1.lnk"); + createLink(".", "entrylist/entrylist2.lnk"); + createLink("../entrylist/.", "entrylist/entrylist3.lnk"); + createLink("..", "entrylist/entrylist4.lnk"); + createLink(QDir::currentPath() + QLatin1String("/entrylist"), "entrylist/directory/entrylist1.lnk"); + createLink(".", "entrylist/directory/entrylist2.lnk"); + createLink("../directory/.", "entrylist/directory/entrylist3.lnk"); + createLink("..", "entrylist/directory/entrylist4.lnk"); +#endif + + constexpr auto flags = ItFlag::Recursive | ItFlag::FollowSymlinks; + QDirListing dirIter(u"entrylist"_s, flags); + QStringList list; + int max = 200; + auto it = dirIter.begin(); + while (--max && it != dirIter.end()) + ++it; + QCOMPARE_GT(max, 0); + + // The goal of this test is only to ensure that the test above don't malfunction +} + +#ifdef QT_BUILD_INTERNAL +class EngineWithNoIterator : public QFSFileEngine +{ +public: + EngineWithNoIterator(const QString &fileName) + : QFSFileEngine(fileName) + { } + + IteratorUniquePtr beginEntryList(const QString &, QDir::Filters, const QStringList &) override + { return nullptr; } +}; + +class EngineWithNoIteratorHandler : public QAbstractFileEngineHandler +{ + Q_DISABLE_COPY_MOVE(EngineWithNoIteratorHandler) +public: + EngineWithNoIteratorHandler() = default; + + std::unique_ptr<QAbstractFileEngine> create(const QString &fileName) const override + { + return std::make_unique<EngineWithNoIterator>(fileName); + } +}; +#endif + +#ifdef QT_BUILD_INTERNAL +void tst_QDirListing::engineWithNoIterator() +{ + EngineWithNoIteratorHandler handler; + + QDir("entrylist").entryList(); + QVERIFY(true); // test that the above line doesn't crash +} + +class CustomEngineHandler : public QAbstractFileEngineHandler +{ + Q_DISABLE_COPY_MOVE(CustomEngineHandler) +public: + CustomEngineHandler() = default; + + std::unique_ptr<QAbstractFileEngine> create(const QString &fileName) const override + { + // We want to test QFSFileEngine specifically, so force QDirListing to use it + // over the default QFileSystemEngine + return std::make_unique<QFSFileEngine>(fileName); + } +}; + +void tst_QDirListing::testQFsFileEngineIterator() +{ + QFETCH(QString, dirName); + QFETCH(QStringList, nameFilters); + QFETCH(QDir::Filters, filters); + QFETCH(QDirListing::IteratorFlags, flags); + + if (dirName == u"empty") + return; // This row isn't useful in this test + + CustomEngineHandler handler; + bool isEmpty = true; + for (const auto &dirEntry : QDirListing(u"entrylist"_s, nameFilters, filters, flags)) { + if (dirEntry.filePath().contains(u"entrylist")) + isEmpty = false; // At least one entry in `entrylist` dir + } + QVERIFY(!isEmpty); // At least one entry +} +#endif + +void tst_QDirListing::absoluteFilePathsFromRelativeIteratorPath() +{ + for (const auto &dirEntry : QDirListing(u"entrylist/"_s, QDir::NoDotAndDotDot)) + QVERIFY(dirEntry.absoluteFilePath().contains("entrylist")); +} + +void tst_QDirListing::recurseWithFilters() const +{ + QSet<QString> actualEntries; + QSet<QString> expectedEntries; + expectedEntries.insert(QString::fromLatin1("recursiveDirs/dir1/textFileB.txt")); + expectedEntries.insert(QString::fromLatin1("recursiveDirs/textFileA.txt")); + + for (const auto &dirEntry : QDirListing(u"recursiveDirs/"_s, QStringList{u"*.txt"_s}, + QDir::Files, ItFlag::Recursive)) { + actualEntries.insert(dirEntry.filePath()); + } + + QCOMPARE(actualEntries, expectedEntries); +} + +void tst_QDirListing::longPath() +{ + QDir dir; + dir.mkdir("longpaths"); + dir.cd("longpaths"); + + QString dirName = "x"; + qsizetype n = 0; + while (dir.exists(dirName) || dir.mkdir(dirName)) { + ++n; + dirName.append('x'); + } + + QDirListing dirList(dir.absolutePath(), QDir::NoDotAndDotDot|QDir::Dirs, ItFlag::Recursive); + qsizetype m = 0; + for (auto it = dirList.begin(); it != dirList.end(); ++it) + ++m; + + QCOMPARE(n, m); + + dirName.chop(1); + while (dirName.size() > 0 && dir.exists(dirName) && dir.rmdir(dirName)) + dirName.chop(1); + + dir.cdUp(); + dir.rmdir("longpaths"); +} + +void tst_QDirListing::dirorder() +{ + QStringList entries; + for (const auto &dirEntry : QDirListing(u"foo"_s, ItFlag::Recursive)) + entries.append(dirEntry.filePath()); + + QCOMPARE_GT(entries.indexOf(u"foo/bar"_s), entries.indexOf(u"foo"_s)); +} + +void tst_QDirListing::relativePaths() +{ + for (const auto &dirEntry : QDirListing(u"*"_s, ItFlag::Recursive)) + QCOMPARE(dirEntry.filePath(), QDir::cleanPath(dirEntry.filePath())); +} + +#if defined(Q_OS_WIN) +void tst_QDirListing::uncPaths_data() +{ + QTest::addColumn<QString>("dirName"); + QTest::newRow("uncserver") + <<QString("//" + QTest::uncServerName()); + QTest::newRow("uncserver/testshare") + <<QString("//" + QTest::uncServerName() + "/testshare"); + QTest::newRow("uncserver/testshare/tmp") + <<QString("//" + QTest::uncServerName() + "/testshare/tmp"); +} +void tst_QDirListing::uncPaths() +{ + QFETCH(QString, dirName); + constexpr auto dirFilters = QDir::AllEntries | QDir::NoDotAndDotDot; + for (const auto &dirEntry : QDirListing(dirName, dirFilters, ItFlag::Recursive)) { + const QString &filePath = dirEntry.filePath(); + QCOMPARE(filePath, QDir::cleanPath(filePath)); + } +} +#endif + +#ifndef Q_OS_WIN +// In Unix it is easy to create hidden files, but in Windows it requires +// a special call since hidden files need to be "marked" while in Unix +// anything starting by a '.' is a hidden file. +// For that reason these two tests aren't run on Windows. + +void tst_QDirListing::hiddenFiles() +{ + QStringList expected = { + "hiddenDirs_hiddenFiles/normalFile"_L1, + "hiddenDirs_hiddenFiles/.hiddenFile"_L1, + "hiddenDirs_hiddenFiles/normalDirectory/normalFile"_L1, + "hiddenDirs_hiddenFiles/normalDirectory/.hiddenFile"_L1, + "hiddenDirs_hiddenFiles/.hiddenDirectory/normalFile"_L1, + "hiddenDirs_hiddenFiles/.hiddenDirectory/.hiddenFile"_L1, + }; + expected.sort(); + + constexpr auto filters = QDir::Files | QDir::Hidden | QDir::NoDotAndDotDot; + QStringList list; + list.reserve(expected.size()); + for (const auto &dirEntry : QDirListing(u"hiddenDirs_hiddenFiles"_s, filters, + ItFlag::Recursive)) { + QVERIFY(dirEntry.isFile()); + list.emplace_back(dirEntry.filePath()); + } + + list.sort(); + + QCOMPARE_EQ(list, expected); +} + +void tst_QDirListing::hiddenDirs() +{ + QStringList expected = { + "hiddenDirs_hiddenFiles/normalDirectory"_L1, + "hiddenDirs_hiddenFiles/normalDirectory/subdir"_L1, + "hiddenDirs_hiddenFiles/normalDirectory/.hidden-subdir"_L1, + "hiddenDirs_hiddenFiles/.hiddenDirectory"_L1, + "hiddenDirs_hiddenFiles/.hiddenDirectory/subdir"_L1, + "hiddenDirs_hiddenFiles/.hiddenDirectory/.hidden-subdir"_L1, + }; + expected.sort(); + + constexpr auto filters = QDir::Dirs | QDir::Hidden | QDir::NoDotAndDotDot; + QStringList list; + list.reserve(expected.size()); + for (const auto &dirEntry : QDirListing(u"hiddenDirs_hiddenFiles"_s, filters, + ItFlag::Recursive)) { + QVERIFY(dirEntry.isDir()); + list.emplace_back(dirEntry.filePath()); + } + list.sort(); + + QCOMPARE_EQ(list, expected); +} + +#endif // Q_OS_WIN + +void tst_QDirListing::withStdAlgorithms() +{ + QDirListing dirList(u"entrylist"_s, QDir::AllEntries | QDir::NoDotAndDotDot, ItFlag::Recursive); + + std::for_each(dirList.cbegin(), dirList.cend(), [](const auto &dirEntry) { + QVERIFY(dirEntry.absoluteFilePath().contains("entrylist")); + }); + + const auto fileName = "dummy"_L1; + auto it = std::find_if(dirList.cbegin(), dirList.cend(), [fileName](const auto &dirEntry) { + return dirEntry.fileName() == fileName; + }); + QVERIFY(it != dirList.cend()); + QCOMPARE(it->fileName(), fileName); +} + +QTEST_MAIN(tst_QDirListing) + +#include "tst_qdirlisting.moc" + diff --git a/tests/auto/corelib/io/qfile/CMakeLists.txt b/tests/auto/corelib/io/qfile/CMakeLists.txt new file mode 100644 index 0000000000..567dcc8a2e --- /dev/null +++ b/tests/auto/corelib/io/qfile/CMakeLists.txt @@ -0,0 +1,93 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qfile Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qfile LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +# Collect test data +list(APPEND test_data "dosfile.txt") +list(APPEND test_data "noendofline.txt") +list(APPEND test_data "testfile.txt") +list(APPEND test_data "testlog.txt") +list(APPEND test_data "two.dots.file") +list(APPEND test_data "tst_qfile.cpp") +list(APPEND test_data "forCopying.txt") +list(APPEND test_data "forRenaming.txt") +list(APPEND test_data "resources/file1.ext1") + +qt_internal_add_test(tst_qfile + SOURCES + tst_qfile.cpp + LIBRARIES + Qt::CorePrivate + Qt::TestPrivate + TESTDATA ${test_data} +) + +# Resources: +set(qfile_resource_files + "resources/" +) + +qt_internal_add_resource(tst_qfile "qfile" + PREFIX + "/tst_qfileinfo/" + FILES + ${qfile_resource_files} +) +set(rename-fallback_resource_files + "rename-fallback.qrc" +) + +qt_internal_add_resource(tst_qfile "rename-fallback" + PREFIX + "/" + FILES + ${rename-fallback_resource_files} +) +set(copy-fallback_resource_files + "copy-fallback.qrc" +) + +qt_internal_add_resource(tst_qfile "copy-fallback" + PREFIX + "/" + FILES + ${copy-fallback_resource_files} +) + + +## Scopes: +##################################################################### + +qt_internal_extend_target(tst_qfile CONDITION TARGET Qt::Network + LIBRARIES + Qt::Network +) + +qt_internal_extend_target(tst_qfile CONDITION NOT TARGET Qt::Network + DEFINES + QT_NO_NETWORK +) + +qt_internal_extend_target(tst_qfile CONDITION CONFIG___contains___builtin_testdata + DEFINES + BUILTIN_TESTDATA +) + +qt_internal_extend_target(tst_qfile CONDITION WIN32 + LIBRARIES + ole32 + uuid +) +add_subdirectory(stdinprocess) +if(QT_FEATURE_process) + add_dependencies(tst_qfile stdinprocess_helper) +endif() diff --git a/tests/auto/corelib/io/qfile/qfile.pro b/tests/auto/corelib/io/qfile/qfile.pro deleted file mode 100644 index 91c5c15f66..0000000000 --- a/tests/auto/corelib/io/qfile/qfile.pro +++ /dev/null @@ -1,3 +0,0 @@ -TEMPLATE = subdirs -SUBDIRS = test.pro -!winrt: SUBDIRS += stdinprocess diff --git a/tests/auto/corelib/io/qfile/qfile.qrc b/tests/auto/corelib/io/qfile/qfile.qrc deleted file mode 100644 index 2c63d8afeb..0000000000 --- a/tests/auto/corelib/io/qfile/qfile.qrc +++ /dev/null @@ -1,5 +0,0 @@ -<!DOCTYPE RCC><RCC version="1.0"> -<qresource prefix="/tst_qfileinfo/"> - <file>resources/</file> -</qresource> -</RCC> diff --git a/tests/auto/corelib/io/qfile/stdinprocess/CMakeLists.txt b/tests/auto/corelib/io/qfile/stdinprocess/CMakeLists.txt new file mode 100644 index 0000000000..2a4c2a9615 --- /dev/null +++ b/tests/auto/corelib/io/qfile/stdinprocess/CMakeLists.txt @@ -0,0 +1,11 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## stdinprocess_helper Binary: +##################################################################### + +qt_internal_add_test_helper(stdinprocess_helper + SOURCES + main.cpp +) diff --git a/tests/auto/corelib/io/qfile/stdinprocess/main.cpp b/tests/auto/corelib/io/qfile/stdinprocess/main.cpp index 77a1932bd5..0f92ba2670 100644 --- a/tests/auto/corelib/io/qfile/stdinprocess/main.cpp +++ b/tests/auto/corelib/io/qfile/stdinprocess/main.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QtCore/QCoreApplication> @@ -41,13 +16,16 @@ int main(int argc, char *argv[]) QFile file; if (strcmp(argv[1], "all") == 0) { - file.open(stdin, QFile::ReadWrite); + if (!file.open(stdin, QFile::ReadWrite)) + return 1; printf("%s", file.readAll().constData()); } else if (strcmp(argv[1], "line") == 0) { if (strcmp(argv[2], "0") == 0) { - file.open(stdin, QFile::ReadWrite); + if (!file.open(stdin, QFile::ReadWrite)) + return 1; } else { - file.open(0, QFile::ReadWrite); + if (!file.open(0, QFile::ReadWrite)) + return 1; } char line[1024]; diff --git a/tests/auto/corelib/io/qfile/stdinprocess/stdinprocess.pro b/tests/auto/corelib/io/qfile/stdinprocess/stdinprocess.pro deleted file mode 100644 index 512da8939b..0000000000 --- a/tests/auto/corelib/io/qfile/stdinprocess/stdinprocess.pro +++ /dev/null @@ -1,4 +0,0 @@ -SOURCES += main.cpp -QT = core - -load(qt_test_helper) diff --git a/tests/auto/corelib/io/qfile/test.pro b/tests/auto/corelib/io/qfile/test.pro deleted file mode 100644 index 7a2767bf3c..0000000000 --- a/tests/auto/corelib/io/qfile/test.pro +++ /dev/null @@ -1,26 +0,0 @@ -CONFIG += testcase -QT = core-private testlib -qtHaveModule(network): QT += network -else: DEFINES += QT_NO_NETWORK - -contains(CONFIG, builtin_testdata) { - DEFINES += BUILTIN_TESTDATA -} - -TESTDATA += BLACKLIST - -TARGET = tst_qfile - -SOURCES = tst_qfile.cpp -INCLUDEPATH += ../../../../shared/ -HEADERS += ../../../../shared/emulationdetector.h - -RESOURCES += qfile.qrc rename-fallback.qrc copy-fallback.qrc - -TESTDATA += \ - dosfile.txt noendofline.txt testfile.txt \ - testlog.txt two.dots.file tst_qfile.cpp \ - Makefile forCopying.txt forRenaming.txt \ - resources/file1.ext1 - -win32:!winrt: QMAKE_USE += ole32 uuid diff --git a/tests/auto/corelib/io/qfile/tst_qfile.cpp b/tests/auto/corelib/io/qfile/tst_qfile.cpp index 16a30af892..d69cc167d6 100644 --- a/tests/auto/corelib/io/qfile/tst_qfile.cpp +++ b/tests/auto/corelib/io/qfile/tst_qfile.cpp @@ -1,33 +1,11 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Copyright (C) 2016 Intel Corporation. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtTest/QtTest> +// Copyright (C) 2021 The Qt Company Ltd. +// Copyright (C) 2021 Intel Corporation. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#define _CRT_SECURE_NO_WARNINGS 1 + +#include <QTest> +#include <QScopedValueRollback> #include <qplatformdefs.h> #include <QCoreApplication> @@ -35,13 +13,23 @@ #include <QDir> #include <QFile> #include <QFileInfo> +#include <QOperatingSystemVersion> +#include <QRandomGenerator> +#include <QStorageInfo> +#include <QScopeGuard> +#include <QStandardPaths> #include <QTemporaryDir> +#include <QTemporaryFile> #include <private/qabstractfileengine_p.h> #include <private/qfsfileengine_p.h> #include <private/qfilesystemengine_p.h> -#include "emulationdetector.h" +#ifdef Q_OS_WIN +#include <QtCore/private/qfunctions_win_p.h> +#endif + +#include <QtTest/private/qemulationdetector_p.h> #ifdef Q_OS_WIN QT_BEGIN_NAMESPACE @@ -60,11 +48,14 @@ QT_END_NAMESPACE #else # include <sys/types.h> # include <unistd.h> +# include <private/qcore_unix_p.h> #endif -#ifdef Q_OS_MAC +#ifdef Q_OS_DARWIN # include <sys/mount.h> #elif defined(Q_OS_LINUX) +# include <sys/eventfd.h> # include <sys/vfs.h> +# include <sys/wait.h> #elif defined(Q_OS_FREEBSD) # include <sys/param.h> # include <sys/mount.h> @@ -91,9 +82,7 @@ QT_END_NAMESPACE # undef fileno #endif -#if defined(Q_OS_WIN) -#include "../../../network-settings.h" -#endif +#include "../../../../shared/filesystem.h" #ifndef STDIN_FILENO #define STDIN_FILENO 0 @@ -111,6 +100,8 @@ QT_END_NAMESPACE #define QT_OPEN_BINARY 0 #endif +using namespace Qt::StringLiterals; + Q_DECLARE_METATYPE(QFile::FileError) @@ -175,6 +166,8 @@ private slots: void ungetChar(); void createFile(); void createFileNewOnly(); + void createFilePermissions_data(); + void createFilePermissions(); void openFileExistingOnly(); void append(); void permissions_data(); @@ -182,33 +175,39 @@ private slots: #ifdef Q_OS_WIN void permissionsNtfs_data(); void permissionsNtfs(); +#if QT_DEPRECATED_SINCE(6,6) + void deprecatedNtfsPermissionCheck(); +#endif #endif + void setPermissions_data(); void setPermissions(); void copy(); void copyAfterFail(); void copyRemovesTemporaryFile() const; void copyShouldntOverwrite(); void copyFallback(); -#ifndef Q_OS_WINRT void link(); void linkToDir(); void absolutePathLinkToRelativePath(); void readBrokenLink(); -#endif void readTextFile_data(); void readTextFile(); void readTextFile2(); void writeTextFile_data(); void writeTextFile(); /* void largeFileSupport(); */ -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) void largeUncFileSupport(); #endif void flush(); void bufferedRead(); #ifdef Q_OS_UNIX + void isSequential_data(); void isSequential(); #endif + void decodeName_data(); + void decodeName(); + void encodeName_data() { decodeName_data(); } void encodeName(); void truncate(); void seekToPos(); @@ -230,9 +229,18 @@ private slots: void writeLargeDataBlock(); void readFromWriteOnlyFile(); void writeToReadOnlyFile(); -#if defined(Q_OS_LINUX) || defined(Q_OS_AIX) || defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD) +#if defined(Q_OS_LINUX) + void virtualFile_data(); void virtualFile(); #endif +#if defined(Q_OS_UNIX) && !defined(Q_OS_WASM) + void unixPipe_data(); + void unixPipe(); + void unixFifo_data() { unixPipe_data(); } + void unixFifo(); + void socketPair_data() { unixPipe_data(); } + void socketPair(); +#endif void textFile(); void rename_data(); void rename(); @@ -279,6 +287,15 @@ private slots: void reuseQFile(); + void moveToTrash_data(); + void moveToTrash(); + void moveToTrashDuplicateName(); + void moveToTrashOpenFile_data(); + void moveToTrashOpenFile(); + void moveToTrashXdgSafety(); + + void stdfilesystem(); + private: #ifdef BUILTIN_TESTDATA QSharedPointer<QTemporaryDir> m_dataDir; @@ -403,7 +420,8 @@ void tst_QFile::cleanup() // Clean out everything except the readonly-files. const QDir dir(m_temporaryDir.path()); - foreach (const QFileInfo &fi, dir.entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot)) { + const auto entries = dir.entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot); + for (const QFileInfo &fi : entries) { const QString fileName = fi.fileName(); if (fileName != QLatin1String(noReadFile) && fileName != QLatin1String(readOnlyFile)) { const QString absoluteFilePath = fi.absoluteFilePath(); @@ -421,6 +439,8 @@ void tst_QFile::cleanup() tst_QFile::tst_QFile() : m_oldDir(QDir::currentPath()) { + QStandardPaths::setTestModeEnabled(true); + QDir().mkpath(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)); } static QByteArray msgOpenFailed(QIODevice::OpenMode om, const QFile &file) @@ -545,8 +565,8 @@ void tst_QFile::exists() file.remove(); QVERIFY(!file.exists()); -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) - const QString uncPath = "//" + QtNetworkSettings::winServerName() + "/testshare/readme.txt"; +#if defined(Q_OS_WIN) + const QString uncPath = "//" + QTest::uncServerName() + "/testshare/readme.txt"; QFile unc(uncPath); QVERIFY2(unc.exists(), msgFileDoesNotExist(uncPath).constData()); #endif @@ -601,7 +621,7 @@ void tst_QFile::open_data() << int(QIODevice::ReadOnly) << false << QFile::OpenError; -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) //opening devices requires administrative privileges (and elevation). HANDLE hTest = CreateFile(_T("\\\\.\\PhysicalDrive0"), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (hTest != INVALID_HANDLE_VALUE) { @@ -612,7 +632,7 @@ void tst_QFile::open_data() QTest::newRow("//./PhysicalDrive0") << QString("//./PhysicalDrive0") << int(QIODevice::ReadOnly) << false << QFile::OpenError; } - QTest::newRow("uncFile") << "//" + QtNetworkSettings::winServerName() + "/testshare/test.pri" << int(QIODevice::ReadOnly) + QTest::newRow("uncFile") << "//" + QTest::uncServerName() + "/testshare/test.pri" << int(QIODevice::ReadOnly) << true << QFile::NoError; #endif } @@ -626,13 +646,13 @@ void tst_QFile::open() QFETCH( bool, ok ); -#if defined(Q_OS_UNIX) && !defined(Q_OS_VXWORKS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_VXWORKS) && !defined(Q_OS_WASM) if (::getuid() == 0) // root and Chuck Norris don't care for file permissions. Skip. QSKIP("Running this test as root doesn't make sense"); #endif -#if defined(Q_OS_WIN32) || defined(Q_OS_WINRT) +#if defined(Q_OS_WIN32) QEXPECT_FAIL("noreadfile", "Windows does not currently support non-readable files.", Abort); #endif if (filename.isEmpty()) @@ -684,9 +704,9 @@ void tst_QFile::size_data() QTest::addColumn<qint64>("size"); QTest::newRow( "exist01" ) << m_testFile << (qint64)245; -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) // Only test UNC on Windows./ - QTest::newRow("unc") << "//" + QString(QtNetworkSettings::winServerName() + "/testshare/test.pri") << (qint64)34; + QTest::newRow("unc") << "//" + QString(QTest::uncServerName() + "/testshare/test.pri") << (qint64)34; #endif } @@ -984,7 +1004,6 @@ void tst_QFile::readAllStdin() process.start(m_stdinProcess, QStringList(QStringLiteral("all"))); QVERIFY2(process.waitForStarted(), qPrintable(process.errorString())); for (int i = 0; i < 5; ++i) { - QTest::qWait(1000); process.write(lotsOfData); while (process.bytesToWrite() > 0) QVERIFY(process.waitForBytesWritten()); @@ -1019,7 +1038,6 @@ void tst_QFile::readLineStdin() QIODevice::Text | QIODevice::ReadWrite); QVERIFY2(process.waitForStarted(), qPrintable(process.errorString())); for (int i = 0; i < 5; ++i) { - QTest::qWait(1000); process.write(lotsOfData); while (process.bytesToWrite() > 0) QVERIFY(process.waitForBytesWritten()); @@ -1100,7 +1118,7 @@ void tst_QFile::missingEndOfLine() void tst_QFile::readBlock() { QFile f( m_testFile ); - f.open( QIODevice::ReadOnly ); + QVERIFY( f.open( QIODevice::ReadOnly ) ); int length = 0; char p[256]; @@ -1115,7 +1133,7 @@ void tst_QFile::readBlock() void tst_QFile::getch() { QFile f( m_testFile ); - f.open( QIODevice::ReadOnly ); + QVERIFY( f.open( QIODevice::ReadOnly ) ); char c; int i = 0; @@ -1168,7 +1186,7 @@ void tst_QFile::ungetChar() QCOMPARE(buf[2], '4'); } -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) QString driveLetters() { wchar_t volumeName[MAX_PATH]; @@ -1202,12 +1220,15 @@ static inline QChar invalidDriveLetter() void tst_QFile::invalidFile_data() { QTest::addColumn<QString>("fileName"); + +#if defined(Q_OS_WASM) + QSKIP("No invalid files on wasm"); +#endif + #if !defined(Q_OS_WIN) QTest::newRow( "x11" ) << QString( "qwe//" ); #else -#if !defined(Q_OS_WINRT) QTest::newRow( "colon2" ) << invalidDriveLetter() + QString::fromLatin1(":ail:invalid"); -#endif QTest::newRow( "colon3" ) << QString( ":failinvalid" ); QTest::newRow( "forwardslash" ) << QString( "fail/invalid" ); QTest::newRow( "asterisk" ) << QString( "fail*invalid" ); @@ -1218,7 +1239,6 @@ void tst_QFile::invalidFile_data() QTest::newRow( "pipe" ) << QString( "fail|invalid" ); #endif } - void tst_QFile::invalidFile() { QFETCH( QString, fileName ); @@ -1253,6 +1273,55 @@ void tst_QFile::createFileNewOnly() QFile::remove("createme.txt"); } +void tst_QFile::createFilePermissions_data() +{ + QTest::addColumn<QFile::Permissions>("permissions"); + + for (int u = 0; u < 8; ++u) { + for (int g = 0; g < 8; ++g) { + for (int o = 0; o < 8; ++o) { + auto permissions = QFileDevice::Permissions::fromInt((u << 12) | (g << 4) | o); + QTest::addRow("%04x", permissions.toInt()) << permissions; + } + } + } +} + +void tst_QFile::createFilePermissions() +{ + QFETCH(QFile::Permissions, permissions); + +#ifdef Q_OS_WIN + QNtfsPermissionCheckGuard permissionGuard; +#endif +#ifdef Q_OS_UNIX + auto restoreMask = qScopeGuard([oldMask = umask(0)] { umask(oldMask); }); +#endif + + const QFile::Permissions setPermissions = { + QFile::ReadOther, QFile::WriteOther, QFile::ExeOther, + QFile::ReadGroup, QFile::WriteGroup, QFile::ExeGroup, + QFile::ReadOwner, QFile::WriteOwner, QFile::ExeOwner + }; + + const QString fileName = u"createme.txt"_s; + + QFile::remove(fileName); + QVERIFY(!QFile::exists(fileName)); + + QFile f(fileName); + auto removeFile = qScopeGuard([&f] { + f.close(); + f.remove(); + }); + QVERIFY2(f.open(QIODevice::WriteOnly, permissions), msgOpenFailed(f).constData()); + + QVERIFY(QFile::exists(fileName)); + + auto actualPermissions = QFileInfo(fileName).permissions(); + QCOMPARE(actualPermissions & setPermissions, permissions); +} + void tst_QFile::openFileExistingOnly() { QFile::remove("dontcreateme.txt"); @@ -1312,7 +1381,10 @@ void tst_QFile::permissions_data() QTest::addColumn<bool>("expected"); QTest::addColumn<bool>("create"); +#ifndef Q_OS_WASM + // Application path is empty on wasm QTest::newRow("data0") << QCoreApplication::instance()->applicationFilePath() << uint(QFile::ExeUser) << true << false; +#endif QTest::newRow("data1") << m_testSourceFile << uint(QFile::ReadUser) << true << false; QTest::newRow("readonly") << QString::fromLatin1("readonlyfile") << uint(QFile::WriteUser) << false << false; QTest::newRow("longfile") << QString::fromLatin1("longFileNamelongFileNamelongFileNamelongFileName" @@ -1343,11 +1415,11 @@ void tst_QFile::permissions() QFile::Permissions staticResult = QFile::permissions(file) & perms; if (create) { - QFile::remove(file); + QVERIFY(QFile::remove(file)); } -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) - if (qt_ntfs_permission_lookup) +#if defined(Q_OS_WIN) + if (qAreNtfsPermissionChecksEnabled()) QEXPECT_FAIL("readonly", "QTBUG-25630", Abort); #endif #ifdef Q_OS_UNIX @@ -1369,27 +1441,61 @@ void tst_QFile::permissionsNtfs_data() void tst_QFile::permissionsNtfs() { - QScopedValueRollback<int> ntfsMode(qt_ntfs_permission_lookup); - qt_ntfs_permission_lookup++; + QNtfsPermissionCheckGuard permissionGuard; permissions(); } + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +#if QT_DEPRECATED_SINCE(6,6) +void tst_QFile::deprecatedNtfsPermissionCheck() +{ + QScopedValueRollback<int> guard(qt_ntfs_permission_lookup); + + QCOMPARE(qAreNtfsPermissionChecksEnabled(), false); + qt_ntfs_permission_lookup++; + QCOMPARE(qAreNtfsPermissionChecksEnabled(), true); + qt_ntfs_permission_lookup--; + QCOMPARE(qAreNtfsPermissionChecksEnabled(), false); +} +#endif +QT_WARNING_POP + #endif +void tst_QFile::setPermissions_data() +{ + QTest::addColumn<bool>("opened"); + QTest::newRow("closed") << false; // chmod() + QTest::newRow("opened") << true; // fchmod() +} + void tst_QFile::setPermissions() { - if ( QFile::exists( "createme.txt" ) ) - QFile::remove( "createme.txt" ); +#ifdef Q_OS_UNIX + if (::getuid() == 0) + QSKIP("Running this test as root doesn't make sense"); +#endif + QFETCH(bool, opened); + + auto remove = []() { QFile::remove("createme.txt"); }; + auto guard = qScopeGuard(remove); + remove(); QVERIFY( !QFile::exists( "createme.txt" ) ); QFile f("createme.txt"); QVERIFY2(f.open(QIODevice::WriteOnly | QIODevice::Truncate), msgOpenFailed(f).constData()); f.putChar('a'); - f.close(); + if (!opened) + f.close(); QFile::Permissions perms(QFile::WriteUser | QFile::ReadUser); + QVERIFY(f.setPermissions(QFile::ReadUser)); + QVERIFY((f.permissions() & perms) == QFile::ReadUser); QVERIFY(f.setPermissions(perms)); QVERIFY((f.permissions() & perms) == perms); + // we should end the test with the file in writeable state } void tst_QFile::copy() @@ -1492,19 +1598,14 @@ void tst_QFile::copyFallback() #include <shlobj.h> #endif -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) static QString getWorkingDirectoryForLink(const QString &linkFileName) { - bool neededCoInit = false; QString ret; + QComHelper comHelper; IShellLink *psl; HRESULT hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void **)&psl); - if (hres == CO_E_NOTINITIALIZED) { // COM was not initialized - neededCoInit = true; - CoInitialize(NULL); - hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void **)&psl); - } if (SUCCEEDED(hres)) { // Get pointer to the IPersistFile interface. IPersistFile *ppf; @@ -1523,15 +1624,10 @@ static QString getWorkingDirectoryForLink(const QString &linkFileName) psl->Release(); } - if (neededCoInit) { - CoUninitialize(); - } - return ret; } #endif -#ifndef Q_OS_WINRT void tst_QFile::link() { QFile::remove("myLink.lnk"); @@ -1582,7 +1678,7 @@ void tst_QFile::absolutePathLinkToRelativePath() QFile::remove("myDir/myLink.lnk"); QDir dir; dir.mkdir("myDir"); - QFile("myDir/test.txt").open(QFile::WriteOnly); + QVERIFY(QFile("myDir/test.txt").open(QFile::WriteOnly)); #ifdef Q_OS_WIN QVERIFY(QFile::link("test.txt", "myDir/myLink.lnk")); @@ -1606,7 +1702,6 @@ void tst_QFile::readBrokenLink() QVERIFY(QFile::link("ole/..", "myLink2.lnk")); QCOMPARE(QFileInfo("myLink2.lnk").symLinkTarget(), QDir::currentPath()); } -#endif // Q_OS_WINRT void tst_QFile::readTextFile_data() { @@ -1687,11 +1782,11 @@ void tst_QFile::writeTextFile() QCOMPARE(file.write(in), qlonglong(in.size())); file.close(); - file.open(QFile::ReadOnly); + QVERIFY(file.open(QFile::ReadOnly)); QCOMPARE(file.readAll(), out); } -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) // Helper for executing QFile::open() with warning in QTRY_VERIFY(), which evaluates the condition // multiple times static bool qFileOpen(QFile &file, QIODevice::OpenMode ioFlags) @@ -1727,7 +1822,7 @@ void tst_QFile::largeUncFileSupport() qint64 size = Q_INT64_C(8589934592); qint64 dataOffset = Q_INT64_C(8589914592); QByteArray knownData("LargeFile content at offset 8589914592"); - QString largeFile("//" + QtNetworkSettings::winServerName() + "/testsharelargefile/file.bin"); + QString largeFile("//" + QTest::uncServerName() + "/testsharelargefile/file.bin"); const QByteArray largeFileEncoded = QFile::encodeName(largeFile); { @@ -1760,7 +1855,7 @@ void tst_QFile::largeUncFileSupport() // Retry in case of sharing violation QTRY_VERIFY(fOpen(largeFileEncoded, "rb", &fhF)); StdioFileGuard fh(fhF); - int fd = int(_fileno(fh)); + int fd = int(QT_FILENO(fh)); QFile file; QVERIFY(file.open(fd, QIODevice::ReadOnly)); QCOMPARE(file.size(), size); @@ -1824,17 +1919,64 @@ void tst_QFile::bufferedRead() } #ifdef Q_OS_UNIX +void tst_QFile::isSequential_data() +{ + QTest::addColumn<QString>("deviceName"); + QTest::addColumn<bool>("acceptFailOpen"); + + QTest::newRow("/dev/null") << QString("/dev/null") << false; + QTest::newRow("/dev/tty") << QString("/dev/tty") << true; + QTest::newRow("/dev/zero") << QString("/dev/zero") << false; +} + void tst_QFile::isSequential() { - QFile zero("/dev/null"); - QVERIFY2(zero.open(QFile::ReadOnly), msgOpenFailed(zero).constData()); - QVERIFY(zero.isSequential()); + QFETCH(QString, deviceName); + QFETCH(bool, acceptFailOpen); + + if (access(deviceName.toUtf8().data(), R_OK) == 0) { + QFile device(deviceName); + QVERIFY2(device.open(QFile::ReadOnly) || acceptFailOpen, msgOpenFailed(device).constData()); + QVERIFY(!device.isOpen() || device.isSequential()); + } } #endif +void tst_QFile::decodeName_data() +{ + QTest::addColumn<QByteArray>("bytearray"); + QTest::addColumn<QString>("qstring"); + + QTest::newRow("null") << QByteArray() << QString(); + QTest::newRow("simple") << "/path/to/file"_ba << u"/path/to/file"_s; + +#ifndef Q_OS_WIN +# ifdef Q_OS_DARWIN + // Mac always expects filenames in UTF-8... and decomposed... + QTest::newRow("filé") << "/path/to/file\xCC\x81"_ba << u"/path/to/filé"_s; +# else + QTest::newRow("filé") << "/path/to/fil\xC3\xA9"_ba << u"/path/to/filé"_s; +# endif + QTest::newRow("fraction-slash") + << "/path\342\201\204to\342\201\204file"_ba << u"/path⁄to⁄file"_s; + QTest::newRow("fraction-slash-u16") << "/path\u2044to\u2044file"_ba << u"/path⁄to⁄file"_s; +#endif // !Q_OS_WIN +} + +void tst_QFile::decodeName() +{ + QFETCH(QByteArray, bytearray); + QFETCH(QString, qstring); + + QCOMPARE(QFile::decodeName(bytearray), qstring); +} + void tst_QFile::encodeName() { - QCOMPARE(QFile::encodeName(QString()), QByteArray()); + QFETCH(QString, qstring); + QFETCH(QByteArray, bytearray); + + QCOMPARE(QFile::encodeName(qstring), bytearray); } void tst_QFile::truncate() @@ -2101,16 +2243,12 @@ void tst_QFile::i18nFileName() { QFile file(fileName); QVERIFY2(file.open(QFile::WriteOnly | QFile::Text), msgOpenFailed(file).constData()); - QTextStream ts(&file); - ts.setCodec("UTF-8"); - ts << fileName << Qt::endl; + file.write(fileName.toUtf8()); } { QFile file(fileName); QVERIFY2(file.open(QFile::ReadOnly | QFile::Text), msgOpenFailed(file).constData()); - QTextStream ts(&file); - ts.setCodec("UTF-8"); - QString line = ts.readLine(); + QString line = QString::fromUtf8(file.readAll()); QCOMPARE(line, fileName); } } @@ -2152,23 +2290,19 @@ void tst_QFile::longFileName() { QFile file(fileName); QVERIFY2(file.open(QFile::WriteOnly | QFile::Text), msgOpenFailed(file).constData()); - QTextStream ts(&file); - ts << fileName << Qt::endl; + file.write(fileName.toUtf8()); } { QFile file(fileName); QVERIFY2(file.open(QFile::ReadOnly | QFile::Text), msgOpenFailed(file).constData()); - QTextStream ts(&file); - QString line = ts.readLine(); - QCOMPARE(line, fileName); + QString line = QString::fromUtf8(file.readAll()); } QString newName = fileName + QLatin1Char('1'); { QVERIFY(QFile::copy(fileName, newName)); QFile file(newName); QVERIFY2(file.open(QFile::ReadOnly | QFile::Text), msgOpenFailed(file).constData()); - QTextStream ts(&file); - QString line = ts.readLine(); + QString line = QString::fromUtf8(file.readAll()); QCOMPARE(line, fileName); } @@ -2177,8 +2311,7 @@ void tst_QFile::longFileName() QVERIFY(QFile::rename(fileName, newName)); QFile file(newName); QVERIFY2(file.open(QFile::ReadOnly | QFile::Text), msgOpenFailed(file).constData()); - QTextStream ts(&file); - QString line = ts.readLine(); + QString line = QString::fromUtf8(file.readAll()); QCOMPARE(line, fileName); } QVERIFY2(QFile::exists(newName), msgFileDoesNotExist(newName).constData()); @@ -2189,36 +2322,10 @@ class MyEngine : public QAbstractFileEngine { public: MyEngine(int n) { number = n; } - virtual ~MyEngine() {} - - void setFileName(const QString &) {} - bool open(QIODevice::OpenMode) { return false; } - bool close() { return false; } - bool flush() { return false; } - qint64 size() const { return 123 + number; } - qint64 at() const { return -1; } - bool seek(qint64) { return false; } - bool isSequential() const { return false; } - qint64 read(char *, qint64) { return -1; } - qint64 write(const char *, qint64) { return -1; } - bool remove() { return false; } - bool copy(const QString &) { return false; } - bool rename(const QString &) { return false; } - bool link(const QString &) { return false; } - bool mkdir(const QString &, bool) const { return false; } - bool rmdir(const QString &, bool) const { return false; } - bool setSize(qint64) { return false; } - QStringList entryList(QDir::Filters, const QStringList &) const { return QStringList(); } - bool caseSensitive() const { return false; } - bool isRelativePath() const { return false; } - FileFlags fileFlags(FileFlags) const { return { }; } - bool chmod(uint) { return false; } - QString fileName(FileName) const { return name; } - uint ownerId(FileOwner) const { return 0; } - QString owner(FileOwner) const { return QString(); } - QDateTime fileTime(FileTime) const { return QDateTime(); } - bool setFileTime(const QDateTime &newDate, FileTime time) - { Q_UNUSED(newDate) Q_UNUSED(time) return false; } + + qint64 size() const override { return 123 + number; } + QStringList entryList(QDir::Filters, const QStringList &) const override { return QStringList(); } + QString fileName(FileName) const override { return name; } private: int number; @@ -2227,19 +2334,24 @@ private: class MyHandler : public QAbstractFileEngineHandler { + Q_DISABLE_COPY_MOVE(MyHandler) public: - inline QAbstractFileEngine *create(const QString &) const + MyHandler() = default; + std::unique_ptr<QAbstractFileEngine> create(const QString &) const override { - return new MyEngine(1); + return std::make_unique<MyEngine>(1); } }; class MyHandler2 : public QAbstractFileEngineHandler { + Q_DISABLE_COPY_MOVE(MyHandler2) public: - inline QAbstractFileEngine *create(const QString &) const + MyHandler2() = default; + + std::unique_ptr<QAbstractFileEngine> create(const QString &) const override { - return new MyEngine(2); + return std::make_unique<MyEngine>(2); } }; #endif @@ -2267,8 +2379,11 @@ void tst_QFile::fileEngineHandler() #ifdef QT_BUILD_INTERNAL class MyRecursiveHandler : public QAbstractFileEngineHandler { + Q_DISABLE_COPY_MOVE(MyRecursiveHandler) public: - inline QAbstractFileEngine *create(const QString &fileName) const + MyRecursiveHandler() = default; + + std::unique_ptr<QAbstractFileEngine> create(const QString &fileName) const override { if (fileName.startsWith(":!")) { QDir dir; @@ -2279,9 +2394,9 @@ public: const QString realFile = m_dataDir->filePath(fileName.mid(2)); #endif if (dir.exists(realFile)) - return new QFSFileEngine(realFile); + return std::make_unique<QFSFileEngine>(realFile); } - return 0; + return nullptr; } #ifdef BUILTIN_TESTDATA @@ -2306,7 +2421,7 @@ void tst_QFile::useQFileInAFileHandler() void tst_QFile::getCharFF() { QFile file("file.txt"); - file.open(QFile::ReadWrite); + QVERIFY(file.open(QFile::ReadWrite)); file.write("\xff\xff\xff"); file.flush(); file.seek(0); @@ -2409,7 +2524,7 @@ void tst_QFile::fullDisk() QVERIFY(!file.isOpen()); QCOMPARE(file.error(), QFile::ResourceError); - file.open(QIODevice::WriteOnly); + QVERIFY2(file.open(QIODevice::WriteOnly), msgOpenFailed(file).constData()); QCOMPARE(file.error(), QFile::NoError); QVERIFY(file.flush()); // Shouldn't inherit write buffer file.close(); @@ -2431,10 +2546,10 @@ void tst_QFile::writeLargeDataBlock_data() QTest::newRow("localfile-Fd") << "./largeblockfile.txt" << (int)OpenFd; QTest::newRow("localfile-Stream") << "./largeblockfile.txt" << (int)OpenStream; -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) && !defined(QT_NO_NETWORK) +#if defined(Q_OS_WIN) && !defined(QT_NO_NETWORK) // Some semi-randomness to avoid collisions. QTest::newRow("unc file") - << QString("//" + QtNetworkSettings::winServerName() + "/TESTSHAREWRITABLE/largefile-%1-%2.txt") + << QString("//" + QTest::uncServerName() + "/TESTSHAREWRITABLE/largefile-%1-%2.txt") .arg(QHostInfo::localHostName()) .arg(QTime::currentTime().msec()) << (int)OpenQFile; #endif @@ -2527,19 +2642,42 @@ void tst_QFile::writeToReadOnlyFile() QCOMPARE(file.write(&c, 1), qint64(-1)); } -#if defined(Q_OS_LINUX) || defined(Q_OS_AIX) || defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD) +#if defined(Q_OS_LINUX) // This platform have 0-sized virtual files +void tst_QFile::virtualFile_data() +{ + QTest::addColumn<QIODevice::OpenMode>("mode"); + QTest::newRow("buffered") << QIODevice::OpenMode(); + QTest::newRow("unbuffered") << QIODevice::OpenMode(QIODevice::Unbuffered); +} + void tst_QFile::virtualFile() { - // test if QFile works with virtual files - QString fname; -#if defined(Q_OS_LINUX) - fname = "/proc/self/maps"; -#elif defined(Q_OS_AIX) - fname = QString("/proc/%1/map").arg(getpid()); -#else // defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD) - fname = "/proc/curproc/map"; -#endif + QFETCH(QIODevice::OpenMode, mode); + + // We need to test a large-ish /proc file on Linux, one that is usually + // over 4 kB (because the kernel writes in chunks of that), has a + // cross-platform file format, and is definitely readable. The best + // candidate and the one we can verify anything in is /proc/<PID>/maps. + // However, our act of reading may change the map because we allocate + // memory, so we fork() here so we have a frozen snapshot of the file. + + int efd = eventfd(0, EFD_CLOEXEC); + pid_t pid = fork(); + if (pid == 0) { + // child + uint64_t val; + eventfd_read(efd, &val); + _exit(0); + } + QVERIFY2(pid > 0, "fork failed: " + qt_error_string().toLocal8Bit()); + auto waitForChild = qScopeGuard([=] { + eventfd_write(efd, 1); + close(efd); + waitpid(pid, nullptr, 0); + }); + + QString fname = u"/proc/%1/maps"_s.arg(pid); // consistency check QFileInfo fi(fname); @@ -2549,12 +2687,8 @@ void tst_QFile::virtualFile() // open the file QFile f(fname); - QVERIFY2(f.open(QIODevice::ReadOnly), msgOpenFailed(f).constData()); - if (EmulationDetector::isRunningArmOnX86()) - QEXPECT_FAIL("","QEMU does not read /proc/self/maps size correctly", Continue); + QVERIFY2(f.open(QIODevice::ReadOnly | mode), msgOpenFailed(f).constData()); QCOMPARE(f.size(), Q_INT64_C(0)); - if (EmulationDetector::isRunningArmOnX86()) - QEXPECT_FAIL("","QEMU does not read /proc/self/maps size correctly", Continue); QVERIFY(f.atEnd()); // read data @@ -2562,26 +2696,183 @@ void tst_QFile::virtualFile() QCOMPARE(data.size(), 16); QCOMPARE(f.pos(), Q_INT64_C(16)); + // seeking + QVERIFY(f.seek(1)); + QCOMPARE(f.pos(), Q_INT64_C(1)); + QVERIFY(f.seek(0)); + QCOMPARE(f.pos(), Q_INT64_C(0)); + // line-reading - data = f.readLine(); - QVERIFY(!data.isEmpty()); + QList<QByteArray> lines; + for (data = f.readLine(); !data.isEmpty(); data = f.readLine()) { + // chop the newline -- not using .trimmed() so cut exactly one byte + data.chop(1); + lines += std::move(data); + } + + if (!QT_CONFIG(static) && !QTestPrivate::isRunningArmOnX86()) { + // we must be able to find QtCore and QtTest somewhere + static const char corelib[] = "libQt" QT_STRINGIFY(QT_VERSION_MAJOR) "Core"; + static const char testlib[] = "libQt" QT_STRINGIFY(QT_VERSION_MAJOR) "Test"; + auto contains = [&](QByteArrayView text, quintptr ptr = 0) { + // this is not the same a QList::contains() + return std::any_of(lines.constBegin(), lines.constEnd(), [=](QByteArrayView entry) { + if (!entry.contains(text)) + return false; + if (!ptr) + return true; + qsizetype dash = entry.indexOf('-'); + qsizetype space = entry.indexOf(' ', dash); + quintptr start = entry.left(dash).toULong(nullptr, 16); + quintptr end = entry.left(space).mid(dash + 1).toULong(nullptr, 16); + return start <= ptr && ptr <= end; + }); + }; + QVERIFY(contains(corelib, quintptr(f.metaObject()))); + QVERIFY(contains(testlib)); + } // read all: + QVERIFY(f.seek(0)); data = f.readAll(); QVERIFY(f.pos() != 0); QVERIFY(!data.isEmpty()); - // seeking - QVERIFY(f.seek(1)); - QCOMPARE(f.pos(), Q_INT64_C(1)); + QCOMPARE(data, lines.join('\n') + '\n'); +} +#endif // defined(Q_OS_LINUX) || defined(Q_OS_AIX) || defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD) + +#if defined (Q_OS_UNIX) && !defined(Q_OS_WASM) +// wasm does not have working fifo +// https://github.com/nodejs/node/issues/38344 +// wasm does not have blocking pipe I/O +// https://github.com/emscripten-core/emscripten/issues/13214 +// wasm does not, by default, have socketpair +// https://emscripten.org/docs/porting/networking.html +static void unixPipe_helper(int pipes[2]) +{ + // start a thread and wait for it to write a first byte + static constexpr int Timeout = 1000; + QScopedPointer<QThread> thr(QThread::create([fd = pipes[1]]() { + char c = 1; + qt_safe_write(fd, &c, 1); + QTest::qSleep(Timeout); + c = 2; + qt_safe_write(fd, &c, 1); + })); + + thr->start(); + + // synchronize with the thread having started + char c = 0; + QVERIFY2(qt_safe_read(pipes[0], &c, 1) == 1, qPrintable(qt_error_string())); + QCOMPARE(c, '\1'); + + QFETCH(bool, useStdio); + QFile f; + if (useStdio) { + FILE *fh = fdopen(pipes[0], "rb"); + QVERIFY(f.open(fh, QIODevice::ReadOnly | QIODevice::Unbuffered, QFileDevice::AutoCloseHandle)); + pipes[0] = -1; // QFile fclose()s the FILE* and that close()s the fd + } else { + QVERIFY(f.open(pipes[0], QIODevice::ReadOnly | QIODevice::Unbuffered)); + } + + // this ought to block + c = 0; + QCOMPARE(f.read(&c, 1), 1); + QCOMPARE(c, '\2'); + + thr->wait(); } + +void tst_QFile::unixPipe_data() +{ + QTest::addColumn<bool>("useStdio"); + QTest::newRow("no-stdio") << false; + QTest::newRow("with-stdio") << true; +} + +void tst_QFile::unixPipe() +{ + int pipes[2] = { -1, -1 }; + QVERIFY2(pipe(pipes) == 0, qPrintable(qt_error_string())); + unixPipe_helper(pipes); + if (pipes[0] != -1) + qt_safe_close(pipes[0]); + qt_safe_close(pipes[1]); +} + +void tst_QFile::unixFifo() +{ + QByteArray fifopath = []() -> QByteArray { + QByteArray dir = qgetenv("XDG_RUNTIME_DIR"); + if (dir.isEmpty()) + dir = QFile::encodeName(QDir::tempPath()); + + // try to create a FIFO + for (int attempts = 10; attempts; --attempts) { + QByteArray fifopath = dir + "/tst_qfile_fifo." + + QByteArray::number(QRandomGenerator::global()->generate()); + int ret = mkfifo(fifopath, 0600); + if (ret == 0) + return fifopath; + } + + qWarning("Failed to create a FIFO at %s; last error was %s", + dir.constData(), strerror(errno)); + return {}; + }(); + if (fifopath.isEmpty()) + return; + + auto removeFifo = qScopeGuard([&fifopath] { unlink(fifopath); }); + + // with a FIFO, the two open() system calls synchronize + QScopedPointer<QThread> thr(QThread::create([&fifopath]() { + int fd = qt_safe_open(fifopath, O_WRONLY); + QTest::qSleep(500); + char c = 2; + qt_safe_write(fd, &c, 1); + qt_safe_close(fd); + })); + thr->start(); + + QFETCH(bool, useStdio); + QFile f; + if (useStdio) { + FILE *fh = fopen(fifopath, "rb"); + QVERIFY(f.open(fh, QIODevice::ReadOnly | QIODevice::Unbuffered, QFileDevice::AutoCloseHandle)); + } else { + f.setFileName(QFile::decodeName(fifopath)); + QVERIFY(f.open(QIODevice::ReadOnly | QIODevice::Unbuffered)); + } + + char c = 0; + QCOMPARE(f.read(&c, 1), 1); // this ought to block + QCOMPARE(c, '\2'); + thr->wait(); +} + +void tst_QFile::socketPair() +{ +#if defined(Q_OS_VXWORKS) + QSKIP("socketpair is not available on Vxworks"); +#else + int pipes[2] = { -1, -1 }; + QVERIFY2(socketpair(AF_UNIX, SOCK_STREAM, 0, pipes) == 0, qPrintable(qt_error_string())); + unixPipe_helper(pipes); + if (pipes[0] != -1) + qt_safe_close(pipes[0]); + qt_safe_close(pipes[1]); #endif +} +#endif /* UNIX && !WASM; */ void tst_QFile::textFile() { - const char *openMode = QOperatingSystemVersion::current().type() != QOperatingSystemVersion::Windows - ? "w" : "wt"; - StdioFileGuard fs(fopen("writeabletextfile", openMode)); + // The "t" is ignored everywhere except on Windows + StdioFileGuard fs(fopen("writeabletextfile", "wt")); QVERIFY(fs); QFile f; QByteArray part1("This\nis\na\nfile\nwith\nnewlines\n"); @@ -2682,7 +2973,7 @@ void tst_QFile::renameWithAtEndSpecialFile() const class PeculiarAtEnd : public QFile { public: - virtual bool atEnd() const + virtual bool atEnd() const override { return true; } @@ -2791,9 +3082,9 @@ void tst_QFile::appendAndRead() void tst_QFile::miscWithUncPathAsCurrentDir() { -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) QString current = QDir::currentPath(); - const QString path = QLatin1String("//") + QtNetworkSettings::winServerName() + const QString path = QLatin1String("//") + QTest::uncServerName() + QLatin1String("/testshare"); QVERIFY2(QDir::setCurrent(path), qPrintable(QDir::toNativeSeparators(path))); QFile file("test.pri"); @@ -2821,13 +3112,16 @@ void tst_QFile::handle() QVERIFY(fd > 2); QCOMPARE(int(file.handle()), fd); char c = '\0'; - const auto readResult = QT_READ(int(file.handle()), &c, 1); - QCOMPARE(readResult, static_cast<decltype(readResult)>(1)); + { + const auto readResult = QT_READ(int(file.handle()), &c, 1); + decltype(readResult) expected = 1; + QCOMPARE(readResult, expected); + } QCOMPARE(c, '/'); // test if the QFile and the handle remain in sync QVERIFY(file.getChar(&c)); - QCOMPARE(c, '*'); + QCOMPARE(c, '/'); // same, but read from QFile first now file.close(); @@ -2842,22 +3136,22 @@ void tst_QFile::handle() QCOMPARE(QT_READ(fd, &c, 1), 1); #endif - QCOMPARE(c, '*'); + QCOMPARE(c, '/'); //test round trip of adopted stdio file handle QFile file2; StdioFileGuard fp(fopen(qPrintable(m_testSourceFile), "r")); QVERIFY(fp); - file2.open(fp, QIODevice::ReadOnly); - QCOMPARE(int(file2.handle()), int(fileno(fp))); - QCOMPARE(int(file2.handle()), int(fileno(fp))); + QVERIFY(file2.open(fp, QIODevice::ReadOnly)); + QCOMPARE(int(file2.handle()), int(QT_FILENO(fp))); + QCOMPARE(int(file2.handle()), int(QT_FILENO(fp))); fp.close(); //test round trip of adopted posix file handle #ifdef Q_OS_UNIX QFile file3; fd = QT_OPEN(qPrintable(m_testSourceFile), QT_OPEN_RDONLY); - file3.open(fd, QIODevice::ReadOnly); + QVERIFY(file3.open(fd, QIODevice::ReadOnly)); QCOMPARE(int(file3.handle()), fd); QT_CLOSE(fd); #endif @@ -2880,12 +3174,8 @@ void tst_QFile::nativeHandleLeaks() } #ifdef Q_OS_WIN -# ifndef Q_OS_WINRT handle1 = ::CreateFileA("qt_file.tmp", GENERIC_READ, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); -# else - handle1 = ::CreateFile2(L"qt_file.tmp", GENERIC_READ, 0, OPEN_ALWAYS, NULL); -# endif QVERIFY( INVALID_HANDLE_VALUE != handle1 ); QVERIFY( ::CloseHandle(handle1) ); #endif @@ -2899,12 +3189,8 @@ void tst_QFile::nativeHandleLeaks() } #ifdef Q_OS_WIN -# ifndef Q_OS_WINRT handle2 = ::CreateFileA("qt_file.tmp", GENERIC_READ, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); -# else - handle2 = ::CreateFile2(L"qt_file.tmp", GENERIC_READ, 0, OPEN_ALWAYS, NULL); -# endif QVERIFY( INVALID_HANDLE_VALUE != handle2 ); QVERIFY( ::CloseHandle(handle2) ); #endif @@ -3177,13 +3463,15 @@ void tst_QFile::mapResource_data() QString validFile = ":/tst_qfileinfo/resources/file1.ext1"; QString invalidFile = ":/tst_qfileinfo/resources/filefoo.ext1"; + const char modes[] = "invalid"; for (int i = 0; i < 2; ++i) { QString file = (i == 0) ? validFile : invalidFile; - QTest::newRow("0, 0") << 0 << 0 << QFile::UnspecifiedError << file; - QTest::newRow("0, BIG") << 0 << 4096 << QFile::UnspecifiedError << file; - QTest::newRow("-1, 0") << -1 << 0 << QFile::UnspecifiedError << file; - QTest::newRow("0, -1") << 0 << -1 << QFile::UnspecifiedError << file; + const char *mode = i == 0 ? modes + 2 : modes; + QTest::addRow("0, 0 (%s)", mode) << 0 << 0 << QFile::UnspecifiedError << file; + QTest::addRow("0, BIG (%s)", mode) << 0 << 4096 << QFile::UnspecifiedError << file; + QTest::addRow("-1, 0 (%s)", mode) << -1 << 0 << QFile::UnspecifiedError << file; + QTest::addRow("0, -1 (%s)", mode) << 0 << -1 << QFile::UnspecifiedError << file; } QTest::newRow("0, 1") << 0 << 1 << QFile::NoError << validFile; @@ -3201,7 +3489,7 @@ void tst_QFile::mapResource() QCOMPARE(file.error(), error); QVERIFY((error == QFile::NoError) ? (memory != 0) : (memory == 0)); if (error == QFile::NoError) - QCOMPARE(QString(memory[0]), QString::number(offset + 1)); + QCOMPARE(QString(QChar(memory[0])), QString::number(offset + 1)); QVERIFY(file.unmap(memory)); } @@ -3254,7 +3542,7 @@ void tst_QFile::mapOpenMode() *memory = 'a'; file.unmap(memory); file.close(); - file.open(QIODevice::OpenMode(openMode)); + QVERIFY(file.open(QIODevice::OpenMode(openMode))); file.seek(0); char c; QVERIFY(file.getChar(&c)); @@ -3401,7 +3689,7 @@ void tst_QFile::openStandardStreamsFileDescriptors() { QFile in; - in.open(STDIN_FILENO, QIODevice::ReadOnly); + QVERIFY(in.open(STDIN_FILENO, QIODevice::ReadOnly)); QCOMPARE( in.pos(), streamCurrentPosition(STDIN_FILENO) ); QCOMPARE( in.size(), streamExpectedSize(STDIN_FILENO) ); } @@ -3415,7 +3703,7 @@ void tst_QFile::openStandardStreamsFileDescriptors() { QFile err; - err.open(STDERR_FILENO, QIODevice::WriteOnly); + QVERIFY(err.open(STDERR_FILENO, QIODevice::WriteOnly)); QCOMPARE( err.pos(), streamCurrentPosition(STDERR_FILENO) ); QCOMPARE( err.size(), streamExpectedSize(STDERR_FILENO) ); } @@ -3431,21 +3719,21 @@ void tst_QFile::openStandardStreamsBufferedStreams() // Using streams { QFile in; - in.open(stdin, QIODevice::ReadOnly); + QVERIFY(in.open(stdin, QIODevice::ReadOnly)); QCOMPARE( in.pos(), streamCurrentPosition(stdin) ); QCOMPARE( in.size(), streamExpectedSize(QT_FILENO(stdin)) ); } { QFile out; - out.open(stdout, QIODevice::WriteOnly); + QVERIFY(out.open(stdout, QIODevice::WriteOnly)); QCOMPARE( out.pos(), streamCurrentPosition(stdout) ); QCOMPARE( out.size(), streamExpectedSize(QT_FILENO(stdout)) ); } { QFile err; - err.open(stderr, QIODevice::WriteOnly); + QVERIFY(err.open(stderr, QIODevice::WriteOnly)); QCOMPARE( err.pos(), streamCurrentPosition(stderr) ); QCOMPARE( err.size(), streamExpectedSize(QT_FILENO(stderr)) ); } @@ -3499,7 +3787,7 @@ void tst_QFile::caseSensitivity() { #if defined(Q_OS_WIN) const bool caseSensitive = false; -#elif defined(Q_OS_MAC) +#elif defined(Q_OS_DARWIN) const bool caseSensitive = pathconf(QDir::currentPath().toLatin1().constData(), _PC_CASE_SENSITIVE); #else const bool caseSensitive = true; @@ -3513,11 +3801,16 @@ void tst_QFile::caseSensitivity() QVERIFY(f.write(testData)); f.close(); } - QStringList alternates; QFileInfo fi(filename); QVERIFY(fi.exists()); - alternates << "file.txt" << "File.TXT" << "fIlE.TxT" << fi.absoluteFilePath().toUpper() << fi.absoluteFilePath().toLower(); - foreach (QString alt, alternates) { + const auto alternates = { + u"file.txt"_s, + u"File.TXT"_s, + u"fIlE.TxT"_s, + fi.absoluteFilePath().toUpper(), + fi.absoluteFilePath().toLower(), + }; + for (const QString &alt : alternates) { QFileInfo fi2(alt); QCOMPARE(fi2.exists(), !caseSensitive); QCOMPARE(fi.size() == fi2.size(), !caseSensitive); @@ -3672,5 +3965,432 @@ void tst_QFile::reuseQFile() } } +void tst_QFile::moveToTrash_data() +{ + QTest::addColumn<QString>("source"); + QTest::addColumn<bool>("create"); + QTest::addColumn<bool>("result"); + + // success cases + { + QTemporaryFile temp(QDir::tempPath() + "/tst_qfile-moveToTrash-XXXXXX"); + if (!temp.open()) + QSKIP("Failed to create temporary file!"); + QTest::newRow("temporary file") << temp.fileName() << true << true; +#if defined(Q_OS_UNIX) && !defined(Q_OS_WASM) + if (QDir::tempPath() == "/tmp") + QTest::newRow("var-temporary file") << "/var" + temp.fileName() << true << true; +#endif + } + { + QTemporaryDir tempDir(QDir::tempPath() + "/tst_qfile-moveToTrash-XXXXXX"); + if (!tempDir.isValid()) + QSKIP("Failed to create temporary directory!"); + tempDir.setAutoRemove(false); + QTest::newRow("temporary dir") + << tempDir.path() + QLatin1Char('/') + << true << true; +#if defined(Q_OS_UNIX) && !defined(Q_OS_WASM) + if (QDir::tempPath() == "/tmp") + QTest::newRow("var-temporary dir") << "/var" + tempDir.path() << true << true; +#endif + } + { + QTemporaryDir homeDir(QDir::homePath() + QLatin1String("/tst_qfile.moveToTrash-XXXXXX")); + if (!homeDir.isValid()) + QSKIP("Failed to create temporary directory in $HOME!"); + QTemporaryFile homeFile(homeDir.path() + + QLatin1String("/tst_qfile-moveToTrash-XXXXX")); + if (!homeFile.open()) + QSKIP("Failed to create temporary file in $HOME"); + homeDir.setAutoRemove(false); + QTest::newRow("home file") + << homeFile.fileName() + << true << true; + + QTest::newRow("home dir") + << homeDir.path() + QLatin1Char('/') + << true << true; + } + QTest::newRow("relative") << QStringLiteral("tst_qfile-moveToTrash.tmp") << true << true; + + // failure cases + QTest::newRow("root") << QDir::rootPath() << false << false; + QTest::newRow("no-such-file") << QString::fromLatin1("no/such/file") << false << false; +} + +void tst_QFile::moveToTrash() +{ +#if defined(Q_OS_ANDROID) or defined(Q_OS_WEBOS) or defined(Q_OS_VXWORKS) + QSKIP("This platform doesn't implement a trash bin"); +#endif + QFETCH(QString, source); + QFETCH(bool, create); + QFETCH(bool, result); + + auto ensureFile = [](const QString &source, bool create) { + if (QFileInfo::exists(source) || !create) + return; + if (source.endsWith(QLatin1Char('/'))) { + QDir::root().mkdir(source); + QFile file(source + QLatin1String("test")); + if (!file.open(QIODevice::WriteOnly)) + QSKIP("Couldn't create directory with file"); + } else { + QFile sourceFile(source); + QVERIFY2(sourceFile.open(QFile::WriteOnly | QFile::Text), qPrintable(sourceFile.errorString())); + sourceFile.close(); + } + }; + auto cleanupFile = [source, create]() { + if (!QFileInfo::exists(source) || !create) + return; + if (source.endsWith(QLatin1Char('/'))) { + QDir(source).removeRecursively(); + } else { + QFile sourceFile(source); + sourceFile.remove(); + } + }; + + ensureFile(source, create); + if (!QFileInfo::exists(source) && create) return; + + /* This test makes assumptions about the file system layout + which might be wrong - moveToTrash may fail if the file lives + on a file system that is different from the home file system, and + has no .Trash directory. + */ + const QStorageInfo sourceStorage(source); + const bool mayFail = sourceStorage.isValid() + && QStorageInfo(source) != QStorageInfo(QDir::home()); + + // non-static version + { + QFile sourceFile(source); + const bool success = sourceFile.moveToTrash(); + + // tolerate moveToTrash failing + if (result && !success && mayFail) + result = false; + + if (result) { + // if any of the test fails, we still want to remove the file + auto onFailure = qScopeGuard(cleanupFile); + QVERIFY2(success, qPrintable(sourceFile.errorString())); + QCOMPARE(sourceFile.error(), QFile::NoError); + QVERIFY(source != sourceFile.fileName()); + if (!sourceFile.fileName().isEmpty()) { + QVERIFY2(sourceFile.exists(), qPrintable(sourceFile.fileName())); + // remove file/dir in trash as well, don't fill disk + if (source.endsWith(QLatin1Char('/'))) + QDir(sourceFile.fileName()).removeRecursively(); + else + sourceFile.remove(); + } + } else { + QVERIFY(!success); + QVERIFY(!sourceFile.errorString().isEmpty()); + QCOMPARE(source, sourceFile.fileName()); + } + } + + // don't retry + if (mayFail) + return; + + // static version + { + ensureFile(source, create); + if (!QFileInfo::exists(source) && create) return; + QString pathInTrash; + const bool success = QFile::moveToTrash(source, &pathInTrash); + QCOMPARE(success, result); + if (result) { + auto onFailure = qScopeGuard(cleanupFile); + QVERIFY(source != pathInTrash); + if (!pathInTrash.isEmpty()) { + // remove file/dir in trash as well, don't fill disk + QVERIFY2(QFile::exists(pathInTrash), qPrintable(pathInTrash)); + if (source.endsWith(QLatin1Char('/'))) + QDir(pathInTrash).removeRecursively(); + else + QFile::remove(pathInTrash); + } + } + } +} + +void tst_QFile::moveToTrashDuplicateName() +{ +#if defined(Q_OS_ANDROID) || defined(Q_OS_WEBOS) || defined(Q_OS_VXWORKS) + QSKIP("This platform doesn't implement a trash bin"); +#endif + QString origFileName = []() { + QTemporaryFile temp(QDir::homePath() + "/tst_qfile.moveToTrashOpenFile.XXXXXX"); + temp.setAutoRemove(false); + if (!temp.open()) + qWarning("Failed to create temporary file: %ls", qUtf16Printable(temp.errorString())); + return temp.fileName(); + }(); + + QFile f1(origFileName); + QFile f2(origFileName); + [&] { + QByteArrayView message1 = "Hello, World\n"; + QVERIFY2(f1.open(QIODevice::ReadWrite | QIODevice::Unbuffered), qPrintable(f1.errorString())); + f1.write(message1.data(), message1.size()); + QVERIFY2(f1.moveToTrash(), qPrintable(f1.errorString())); + + QByteArrayView message2 = "Good morning, Vietnam!\n"; + QVERIFY2(f2.open(QIODevice::ReadWrite | QIODevice::Unbuffered | QIODevice::NewOnly), + qPrintable(f2.errorString())); + f2.write(message2.data(), message2.size()); + QVERIFY2(f2.moveToTrash(), qPrintable(f2.errorString())); + + QCOMPARE_NE(f1.fileName(), f2.fileName()); + }(); + f1.remove(); + if (!f2.fileName().isEmpty()) + f2.remove(); + QFile::remove(origFileName); +} + +void tst_QFile::moveToTrashOpenFile_data() +{ + QTest::addColumn<bool>("useStatic"); + QTest::addColumn<bool>("success"); + + // QFile::moveToTrash() non-static member closes the file before trashing, + // so this must always succeed. + QTest::newRow("member") << false << true; + + // QFile::moveToTrash() static member cannot close the file because it + // operates on another QFile, so this operation will fail on OSes that do + // not permit deleting open files. + QTest::newRow("static") << true +#ifdef Q_OS_WIN + << false; +#else + << true; +#endif +} + +void tst_QFile::moveToTrashOpenFile() +{ +#if defined(Q_OS_ANDROID) || defined(Q_OS_WEBOS) || defined(Q_OS_VXWORKS) + QSKIP("This platform doesn't implement a trash bin"); +#endif + QFETCH(bool, useStatic); + QFETCH(bool, success); + const QByteArrayView contents = "Hello, World\n"; + + QString newFileName, origFileName; + auto cleanup = qScopeGuard([&] { + if (!origFileName.isEmpty()) + QFile::remove(origFileName); + if (!newFileName.isEmpty() && newFileName != origFileName) + QFile::remove(newFileName); + }); + + origFileName = []() { + QTemporaryFile temp(QDir::homePath() + "/tst_qfile.moveToTrashOpenFile.XXXXXX"); + temp.setAutoRemove(false); + if (!temp.open()) + qWarning("Failed to create temporary file: %ls", qUtf16Printable(temp.errorString())); + return temp.fileName(); + }(); + + QFile f; + f.setFileName(origFileName); + QVERIFY2(f.open(QIODevice::ReadWrite | QIODevice::Unbuffered), qPrintable(f.errorString())); + f.write(contents.data(), contents.size()); + + QString errorString; + auto doMoveToTrash = [&](QFile *f) { + if (!f->moveToTrash()) + errorString = f->errorString(); + newFileName = f->fileName(); + }; + if (useStatic) { + // it's the same as the static QFile::moveToTrash(), but gives us + // the error string + QFile other(origFileName); + doMoveToTrash(&other); + } else { + doMoveToTrash(&f); + } + QCOMPARE_NE(f.fileName(), QString()); + + if (success) { + QCOMPARE(errorString, QString()); + QCOMPARE_NE(newFileName, origFileName); // must have changed! + QVERIFY(!QFile::exists(origFileName)); + QVERIFY(QFile::exists(newFileName)); + QCOMPARE(QFileInfo(newFileName).size(), contents.size()); + } else { + QCOMPARE_NE(errorString, QString()); + QCOMPARE(newFileName, origFileName); // mustn't have changed! + QVERIFY(QFile::exists(origFileName)); + QCOMPARE(QFileInfo(origFileName).size(), contents.size()); + } +} + +void tst_QFile::moveToTrashXdgSafety() +{ +#if defined(Q_OS_VXWORKS) + QSKIP("This platform doesn't implement a trash bin"); +#endif +#if defined(Q_OS_WIN) || defined(Q_OS_DARWIN) || defined(Q_OS_ANDROID) || defined(Q_OS_WEBOS) + QSKIP("This test is specific to XDG Unix systems"); +#else + QDir(m_temporaryDir.path()).mkdir("emptydir"); + + // See if we can find a writable volume to conduct our tests on + QString volumeRoot; + QStorageInfo homeVolume(QDir::homePath()); + auto isVolumeSuitable = [this](const QString &rootPath) { + return QFile::link(m_temporaryDir.path() + "/emptydir", rootPath + "/.Trash"); + }; + for (const QStorageInfo &volume : QStorageInfo::mountedVolumes()) { + if (volume.isRoot()) + continue; + if (volume == homeVolume) + continue; + + if (isVolumeSuitable(volume.rootPath())) { + volumeRoot = volume.rootPath(); + break; + } + } + +# ifdef Q_OS_LINUX + // fallback to /dev/shm, which is usually a tmpfs but is ignored by + // QStorageInfo as a virtual filesystem + if (volumeRoot.isEmpty() && isVolumeSuitable("/dev/shm")) + volumeRoot = "/dev/shm"; +# endif + + if (volumeRoot.isEmpty()) + QSKIP("Could not find any suitable volume to run this test with"); + + QDir genericTrashDir = volumeRoot + "/.Trash"; + auto cleanup = qScopeGuard([&] { + if (QFileInfo(genericTrashDir.path()).isDir()) + genericTrashDir.removeRecursively(); + else + QFile::remove(genericTrashDir.path()); + }); + + QString testFileName = volumeRoot + "/tst_qfile.moveToTrashSafety." + QString::number(getpid()); + auto tryTrashing = [&] { + static int counter = 0; + QFile f(testFileName + u'.' + QString::number(counter++)); + if (!f.open(QIODevice::ReadWrite | QIODevice::Truncate)) { + qWarning("Failed to create temporary file: %ls", qUtf16Printable(f.errorString())); + return false; + } + bool ok = f.moveToTrash(); + f.remove(); + f.close(); + return ok; + }; + + QTest::ignoreMessage(QtCriticalMsg, + "Warning: '" + QFile::encodeName(genericTrashDir.absolutePath()) + + "' is a symlink to '" + QFile::encodeName(m_temporaryDir.path()) + + "/emptydir'"); + QVERIFY(tryTrashing()); + QVERIFY(genericTrashDir.entryList(QDir::NoDotAndDotDot).isEmpty()); + + QFile::remove(genericTrashDir.path()); + genericTrashDir.mkdir(genericTrashDir.path(), QFile::ExeOwner | QFile::ReadOwner); + QTest::ignoreMessage(QtCriticalMsg, "Warning: '" + QFile::encodeName(genericTrashDir.absolutePath()) + + "' doesn't have sticky bit set!"); + QVERIFY(tryTrashing()); + QVERIFY(genericTrashDir.entryList(QDir::NoDotAndDotDot).isEmpty()); + + if (geteuid() != 0) { + // set the sticky bit, but make the dir unwritable; there'll be no + // warning and we should just fall back to the next option + chmod(QFile::encodeName(genericTrashDir.path()), 01555); + QVERIFY(tryTrashing()); + QVERIFY(genericTrashDir.entryList(QDir::NoDotAndDotDot).isEmpty()); + + // ditto for our user's subdir now + chmod(QFile::encodeName(genericTrashDir.path()), 01755); + genericTrashDir.mkdir(QString::number(getuid()), QFile::ReadOwner); + QVERIFY(tryTrashing()); + } +#endif +} + +void tst_QFile::stdfilesystem() +{ +#if QT_CONFIG(cxx17_filesystem) + namespace fs = std::filesystem; + auto toFSPath = [](const QFile &file) { return fs::path(file.fileName().toStdU16String()); }; + fs::path path { "./path" }; + QFile file(path); + QCOMPARE(toFSPath(file), path); + + QCOMPARE(path, file.filesystemFileName()); + + { + QFile parentedFile(path, this); + QCOMPARE(file.fileName(), parentedFile.fileName()); + QCOMPARE(parentedFile.parent(), this); + } + + path = path / "filename"; + file.setFileName(path); + QCOMPARE(toFSPath(file), path); + + path = "test-file"; + file.setFileName(path); + QVERIFY(file.open(QIODevice::WriteOnly)); + file.close(); + + path = "tile-fest"; + QVERIFY(file.rename(path)); + QVERIFY(fs::exists(path)); +#ifdef Q_OS_WIN + fs::path linkfile { "test-link.lnk" }; +#else + fs::path linkfile { "test-link" }; +#endif + QVERIFY(file.link(linkfile)); + QVERIFY(fs::exists(linkfile)); + QVERIFY(QFile::remove(linkfile)); + QVERIFY(QFile::link(file.filesystemFileName(), linkfile)); + QVERIFY(fs::exists(linkfile)); + QCOMPARE(QFileInfo(QFile::filesystemSymLinkTarget(linkfile)), + QFileInfo(file.filesystemFileName())); + QCOMPARE(QFileInfo(QFile(linkfile).filesystemSymLinkTarget()), + QFileInfo(file.filesystemFileName())); + + fs::path copyfile { "copy-file" }; + QVERIFY(file.copy(copyfile)); + QVERIFY(fs::exists(copyfile)); + QVERIFY(QFile::remove(copyfile)); + QVERIFY(QFile::copy(file.filesystemFileName(), copyfile)); + QVERIFY(fs::exists(copyfile)); + + QFileDevice::Permissions p = QFile::permissions(path); + QVERIFY(p.testFlag(QFile::WriteUser) || p.testFlag(QFile::WriteOwner)); // some we know for sure + if (p.testFlag(QFile::ReadUser)) + p.setFlag(QFile::ReadUser, false); + else if (p.testFlag(QFile::ReadOwner)) + p.setFlag(QFile::ReadOwner, false); + QVERIFY(QFile::setPermissions(path, p)); + + path = "test-exists"; + fs::create_directory(path); + QVERIFY(QFile::exists(path) == fs::exists(path)); +#else + QSKIP("Not supported"); +#endif +} + QTEST_MAIN(tst_QFile) #include "tst_qfile.moc" diff --git a/tests/auto/corelib/io/qfileinfo/CMakeLists.txt b/tests/auto/corelib/io/qfileinfo/CMakeLists.txt new file mode 100644 index 0000000000..3b997e1bca --- /dev/null +++ b/tests/auto/corelib/io/qfileinfo/CMakeLists.txt @@ -0,0 +1,60 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qfileinfo Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qfileinfo LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +qt_internal_add_test(tst_qfileinfo + SOURCES + tst_qfileinfo.cpp + LIBRARIES + Qt::CorePrivate + Qt::TestPrivate +) + +# Resources: +set(qfileinfo_resource_files + "resources/" +) + +qt_internal_add_resource(tst_qfileinfo "qfileinfo" + PREFIX + "/tst_qfileinfo/" + FILES + ${qfileinfo_resource_files} +) +set(testdata_resource_files + "resources/file1" + "resources/file1.ext1" + "resources/file1.ext1.ext2" + "tst_qfileinfo.cpp" +) + +qt_internal_add_resource(tst_qfileinfo "testdata" + PREFIX + "/testdata" + FILES + ${testdata_resource_files} +) + + +## Scopes: +##################################################################### + +qt_internal_extend_target(tst_qfileinfo CONDITION WIN32 + LIBRARIES + advapi32 + netapi32 +) + +if (APPLE) + enable_language(OBJCXX) + set_source_files_properties(tst_qfileinfo.cpp PROPERTIES LANGUAGE OBJCXX) +endif() diff --git a/tests/auto/corelib/io/qfileinfo/qfileinfo.pro b/tests/auto/corelib/io/qfileinfo/qfileinfo.pro deleted file mode 100644 index d181d16a3e..0000000000 --- a/tests/auto/corelib/io/qfileinfo/qfileinfo.pro +++ /dev/null @@ -1,8 +0,0 @@ -CONFIG += testcase -TARGET = tst_qfileinfo -QT = core-private testlib -SOURCES = tst_qfileinfo.cpp -RESOURCES += qfileinfo.qrc \ - testdata.qrc - -win32:!winrt: QMAKE_USE += advapi32 netapi32 diff --git a/tests/auto/corelib/io/qfileinfo/qfileinfo.qrc b/tests/auto/corelib/io/qfileinfo/qfileinfo.qrc deleted file mode 100644 index 2c63d8afeb..0000000000 --- a/tests/auto/corelib/io/qfileinfo/qfileinfo.qrc +++ /dev/null @@ -1,5 +0,0 @@ -<!DOCTYPE RCC><RCC version="1.0"> -<qresource prefix="/tst_qfileinfo/"> - <file>resources/</file> -</qresource> -</RCC> diff --git a/tests/auto/corelib/io/qfileinfo/testdata.qrc b/tests/auto/corelib/io/qfileinfo/testdata.qrc deleted file mode 100644 index d2974bae77..0000000000 --- a/tests/auto/corelib/io/qfileinfo/testdata.qrc +++ /dev/null @@ -1,8 +0,0 @@ -<RCC> - <qresource prefix="/testdata"> - <file>resources/file1</file> - <file>resources/file1.ext1</file> - <file>resources/file1.ext1.ext2</file> - <file>tst_qfileinfo.cpp</file> - </qresource> -</RCC> diff --git a/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp b/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp index ebb9a0a44c..563e4c2a83 100644 --- a/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp +++ b/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp @@ -1,32 +1,10 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtTest/QtTest> +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QTest> +#include <QtTest/private/qcomparisontesthelper_p.h> +#include <QStandardPaths> +#include <QScopeGuard> #include <qfile.h> #include <qdir.h> @@ -48,32 +26,28 @@ #endif #ifdef Q_OS_WIN #include <qt_windows.h> -#if !defined(Q_OS_WINRT) #include <private/qwinregistry_p.h> #include <lm.h> #endif -#endif #include <qplatformdefs.h> #include <qdebug.h> -#if defined(Q_OS_WIN) -#include "../../../network-settings.h" -#endif #include <private/qfileinfo_p.h> #include "../../../../shared/filesystem.h" -#if defined(Q_OS_VXWORKS) || defined(Q_OS_WINRT) +#if defined(Q_OS_MACOS) +#include <Foundation/Foundation.h> +#endif + +#if defined(Q_OS_VXWORKS) #define Q_NO_SYMLINKS #endif #if defined(Q_OS_WIN) -QT_BEGIN_NAMESPACE -extern Q_CORE_EXPORT int qt_ntfs_permission_lookup; -QT_END_NAMESPACE -# ifndef Q_OS_WINRT bool IsUserAdmin(); -# endif #endif +using namespace Qt::StringLiterals; + inline bool qIsLikelyToBeFat(const QString &path) { QByteArray name = QStorageInfo(path).fileSystemType().toLower(); @@ -96,37 +70,12 @@ inline bool qIsLikelyToBeNfs(const QString &path) #endif } -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) -# ifndef SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE // MinGW -# define SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE (0x2) -# endif - -static DWORD createSymbolicLink(const QString &symLinkName, const QString &target, - QString *errorMessage) -{ - DWORD result = ERROR_SUCCESS; - const QString nativeSymLinkName = QDir::toNativeSeparators(symLinkName); - const QString nativeTarget = QDir::toNativeSeparators(target); - DWORD flags = 0; - if (QOperatingSystemVersion::current() >= QOperatingSystemVersion(QOperatingSystemVersion::Windows, 10, 0, 14972)) - flags |= SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE; - if (QFileInfo(target).isDir()) - flags |= SYMBOLIC_LINK_FLAG_DIRECTORY; - if (CreateSymbolicLink(reinterpret_cast<const wchar_t*>(nativeSymLinkName.utf16()), - reinterpret_cast<const wchar_t*>(nativeTarget.utf16()), flags) == FALSE) { - result = GetLastError(); - QTextStream(errorMessage) << "CreateSymbolicLink(" << nativeSymLinkName << ", " - << nativeTarget << ", 0x" << Qt::hex << flags << Qt::dec << ") failed with error " << result - << ": " << qt_error_string(int(result)); - } - return result; -} - +#if defined(Q_OS_WIN) static QByteArray msgInsufficientPrivileges(const QString &errorMessage) { return "Insufficient privileges (" + errorMessage.toLocal8Bit() + ')'; } -#endif // Q_OS_WIN && !Q_OS_WINRT +#endif // Q_OS_WIN static QString seedAndTemplate() { @@ -224,6 +173,7 @@ private slots: void systemFiles(); + void compareCompiles(); void compare_data(); void compare(); @@ -232,6 +182,7 @@ private slots: void fileTimes_data(); void fileTimes(); + void setFileTimes(); void fakeFileTimes_data(); void fakeFileTimes(); @@ -244,12 +195,15 @@ private slots: void isShortcut_data(); void isShortcut(); + void isAlias_data(); + void isAlias(); + void link_data(); void link(); void isHidden_data(); void isHidden(); -#if defined(Q_OS_MAC) +#if defined(Q_OS_DARWIN) void isHiddenFromFinder(); #endif @@ -261,7 +215,7 @@ private slots: void refresh(); -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) void ntfsJunctionPointsAndSymlinks_data(); void ntfsJunctionPointsAndSymlinks(); void brokenShortcut(); @@ -278,15 +232,16 @@ private slots: void detachingOperations(); -#if !defined(Q_OS_WINRT) void owner(); -#endif void group(); void invalidState_data(); void invalidState(); void nonExistingFile(); + void stdfilesystem(); + void readSymLink(); + private: const QString m_currentDir; QString m_sourceFile; @@ -398,7 +353,7 @@ void tst_QFileInfo::isDir_data() QFile::remove("brokenlink.lnk"); QFile::remove("dummyfile"); QFile file3("dummyfile"); - file3.open(QIODevice::WriteOnly); + QVERIFY(file3.open(QIODevice::WriteOnly)); if (file3.link("brokenlink.lnk")) { file3.remove(); QFileInfo info3("brokenlink.lnk"); @@ -419,13 +374,13 @@ void tst_QFileInfo::isDir_data() QTest::newRow("broken link") << "brokenlink.lnk" << false; -#if (defined(Q_OS_WIN) && !defined(Q_OS_WINRT)) +#if defined(Q_OS_WIN) QTest::newRow("drive 1") << "c:" << true; QTest::newRow("drive 2") << "c:/" << true; //QTest::newRow("drive 2") << "t:s" << false; #endif -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) - const QString uncRoot = QStringLiteral("//") + QtNetworkSettings::winServerName(); +#if defined(Q_OS_WIN) + const QString uncRoot = QStringLiteral("//") + QTest::uncServerName(); QTest::newRow("unc 1") << uncRoot << true; QTest::newRow("unc 2") << uncRoot + QLatin1Char('/') << true; QTest::newRow("unc 3") << uncRoot + "/testshare" << true; @@ -461,14 +416,14 @@ void tst_QFileInfo::isRoot_data() QTest::newRow("simple dir") << m_resourcesDir << false; QTest::newRow("simple dir with slash") << (m_resourcesDir + QLatin1Char('/')) << false; -#if (defined(Q_OS_WIN) && !defined(Q_OS_WINRT)) +#if defined(Q_OS_WIN) QTest::newRow("drive 1") << "c:" << false; QTest::newRow("drive 2") << "c:/" << true; QTest::newRow("drive 3") << "p:/" << false; #endif -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) - const QString uncRoot = QStringLiteral("//") + QtNetworkSettings::winServerName(); +#if defined(Q_OS_WIN) + const QString uncRoot = QStringLiteral("//") + QTest::uncServerName(); QTest::newRow("unc 1") << uncRoot << true; QTest::newRow("unc 2") << uncRoot + QLatin1Char('/') << true; QTest::newRow("unc 3") << uncRoot + "/testshare" << false; @@ -505,19 +460,14 @@ void tst_QFileInfo::exists_data() QTest::newRow("data8") << (m_resourcesDir + "/*.ext1") << false; QTest::newRow("data9") << (m_resourcesDir + "/file?.ext1") << false; QTest::newRow("data10") << "." << true; - - // Skip for the WinRT case, as GetFileAttributesEx removes _any_ - // trailing whitespace and "." is a valid entry as seen in data10 -#ifndef Q_OS_WINRT QTest::newRow("data11") << ". " << false; -#endif QTest::newRow("empty") << "" << false; QTest::newRow("simple dir") << m_resourcesDir << true; QTest::newRow("simple dir with slash") << (m_resourcesDir + QLatin1Char('/')) << true; -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) - const QString uncRoot = QStringLiteral("//") + QtNetworkSettings::winServerName(); +#if defined(Q_OS_WIN) + const QString uncRoot = QStringLiteral("//") + QTest::uncServerName(); QTest::newRow("unc 1") << uncRoot << true; QTest::newRow("unc 2") << uncRoot + QLatin1Char('/') << true; QTest::newRow("unc 3") << uncRoot + "/testshare" << true; @@ -551,7 +501,7 @@ void tst_QFileInfo::absolutePath_data() QTest::addColumn<QString>("filename"); QString drivePrefix; -#if (defined(Q_OS_WIN) && !defined(Q_OS_WINRT)) +#if defined(Q_OS_WIN) drivePrefix = QDir::currentPath().left(2); QString nonCurrentDrivePrefix = drivePrefix.left(1).compare("X", Qt::CaseInsensitive) == 0 ? QString("Y:") : QString("X:"); @@ -561,8 +511,6 @@ void tst_QFileInfo::absolutePath_data() QTest::newRow("<not current drive>:my.dll") << nonCurrentDrivePrefix + "my.dll" << nonCurrentDrivePrefix + "/" << "my.dll"; -#elif defined(Q_OS_WINRT) - drivePrefix = QDir::currentPath().left(2); #endif QTest::newRow("0") << "/machine/share/dir1/" << drivePrefix + "/machine/share/dir1" << ""; QTest::newRow("1") << "/machine/share/dir1" << drivePrefix + "/machine/share" << "dir1"; @@ -570,7 +518,7 @@ void tst_QFileInfo::absolutePath_data() QTest::newRow("3") << "/usr/local/bin/" << drivePrefix + "/usr/local/bin" << ""; QTest::newRow("/test") << "/test" << drivePrefix + "/" << "test"; -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) QTest::newRow("c:\\autoexec.bat") << "c:\\autoexec.bat" << "C:/" << "autoexec.bat"; QTest::newRow("c:autoexec.bat") << QDir::currentPath().left(2) + "autoexec.bat" << QDir::currentPath() @@ -710,7 +658,7 @@ void tst_QFileInfo::canonicalFilePath() QFile file(QDir::currentPath()); if (file.link(link)) { QFile tempfile("tempfile.txt"); - tempfile.open(QIODevice::ReadWrite); + QVERIFY(tempfile.open(QIODevice::ReadWrite)); tempfile.write("This file is generated by the QFileInfo autotest."); QVERIFY(tempfile.flush()); tempfile.close(); @@ -746,14 +694,13 @@ void tst_QFileInfo::canonicalFilePath() } #endif -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) { - QString errorMessage; const QString linkTarget = QStringLiteral("res"); - const DWORD dwErr = createSymbolicLink(linkTarget, m_resourcesDir, &errorMessage); - if (dwErr == ERROR_PRIVILEGE_NOT_HELD) - QSKIP(msgInsufficientPrivileges(errorMessage)); - QVERIFY2(dwErr == ERROR_SUCCESS, qPrintable(errorMessage)); + const auto result = FileSystem::createSymbolicLink(linkTarget, m_resourcesDir); + if (result.dwErr == ERROR_PRIVILEGE_NOT_HELD) + QSKIP(msgInsufficientPrivileges(result.errorMessage)); + QVERIFY2(result.dwErr == ERROR_SUCCESS, qPrintable(result.errorMessage)); QString currentPath = QDir::currentPath(); QVERIFY(QDir::setCurrent(linkTarget)); const QString actualCanonicalPath = QFileInfo("file1").canonicalFilePath(); @@ -817,7 +764,7 @@ void tst_QFileInfo::bundleName_data() QTest::newRow("root") << "/" << ""; QTest::newRow("etc") << "/etc" << ""; -#ifdef Q_OS_MAC +#ifdef Q_OS_DARWIN QTest::newRow("safari") << "/Applications/Safari.app" << "Safari"; #endif } @@ -844,7 +791,7 @@ void tst_QFileInfo::dir_data() QTest::newRow("absFilePath") << QDir::currentPath() + "/tmp.txt" << false << QDir::currentPath(); QTest::newRow("absFilePathAbsPath") << QDir::currentPath() + "/tmp.txt" << true << QDir::currentPath(); QTest::newRow("resource1") << ":/tst_qfileinfo/resources/file1.ext1" << true << ":/tst_qfileinfo/resources"; -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) QTest::newRow("driveWithSlash") << "C:/file1.ext1.ext2" << true << "C:/"; QTest::newRow("driveWithoutSlash") << QDir::currentPath().left(2) + "file1.ext1.ext2" << false << QDir::currentPath().left(2); #endif @@ -1035,7 +982,7 @@ void tst_QFileInfo::size() void tst_QFileInfo::systemFiles() { -#if !defined(Q_OS_WIN) || defined(Q_OS_WINRT) +#if !defined(Q_OS_WIN) QSKIP("This is a Windows only test"); #endif QFileInfo fi("c:\\pagefile.sys"); @@ -1046,9 +993,11 @@ void tst_QFileInfo::systemFiles() QCOMPARE(fi.metadataChangeTime(), fi.lastModified()); // On Windows, they're the same QVERIFY(fi.birthTime().isValid()); QVERIFY(fi.birthTime() <= fi.lastModified()); -#if QT_DEPRECATED_SINCE(5, 10) - QCOMPARE(fi.created(), fi.birthTime()); // On Windows, they're the same -#endif +} + +void tst_QFileInfo::compareCompiles() +{ + QTestPrivate::testEqualityOperatorsCompile<QFileInfo>(); } void tst_QFileInfo::compare_data() @@ -1077,7 +1026,7 @@ void tst_QFileInfo::compare_data() << m_sourceFile #if defined(Q_OS_WIN) << true; -#elif defined(Q_OS_MAC) +#elif defined(Q_OS_DARWIN) << !pathconf(QDir::currentPath().toLatin1().constData(), _PC_CASE_SENSITIVE); #else << false; @@ -1086,7 +1035,7 @@ void tst_QFileInfo::compare_data() void tst_QFileInfo::compare() { -#if defined(Q_OS_MAC) +#if defined(Q_OS_DARWIN) if (qstrcmp(QTest::currentDataTag(), "casesense1") == 0) QSKIP("Qt thinks all UNIX filesystems are case sensitive, see QTBUG-28246"); #endif @@ -1095,7 +1044,7 @@ void tst_QFileInfo::compare() QFETCH(QString, file2); QFETCH(bool, same); QFileInfo fi1(file1), fi2(file2); - QCOMPARE(fi1 == fi2, same); + QT_TEST_EQUALITY_OPS(fi1, fi2, same); } void tst_QFileInfo::consistent_data() @@ -1163,8 +1112,8 @@ void tst_QFileInfo::fileTimes() { // try to guess if file times on this filesystem round to the second QFileInfo cwd("."); - if (cwd.lastModified().toMSecsSinceEpoch() % 1000 == 0 - && cwd.lastRead().toMSecsSinceEpoch() % 1000 == 0) { + if (cwd.lastModified(QTimeZone::UTC).toMSecsSinceEpoch() % 1000 == 0 + && cwd.lastRead(QTimeZone::UTC).toMSecsSinceEpoch() % 1000 == 0) { fsClockSkew = sleepTime = 1000; noAccessTime = qIsLikelyToBeFat(fileName); @@ -1184,46 +1133,46 @@ void tst_QFileInfo::fileTimes() QDateTime birthTime, writeTime, metadataChangeTime, readTime; // --- Create file and write to it - beforeBirth = QDateTime::currentDateTime().addMSecs(-fsClockSkew); + beforeBirth = QDateTime::currentDateTimeUtc().addMSecs(-fsClockSkew); { QFile file(fileName); QVERIFY(file.open(QFile::WriteOnly | QFile::Text)); QFileInfo fileInfo(fileName); - birthTime = fileInfo.birthTime(); + birthTime = fileInfo.birthTime(QTimeZone::UTC); QVERIFY2(!birthTime.isValid() || birthTime > beforeBirth, datePairString(birthTime, beforeBirth)); QTest::qSleep(sleepTime); - beforeWrite = QDateTime::currentDateTime().addMSecs(-fsClockSkew); + beforeWrite = QDateTime::currentDateTimeUtc().addMSecs(-fsClockSkew); QTextStream ts(&file); ts << fileName << Qt::endl; } { QFileInfo fileInfo(fileName); - writeTime = fileInfo.lastModified(); + writeTime = fileInfo.lastModified(QTimeZone::UTC); QVERIFY2(writeTime > beforeWrite, datePairString(writeTime, beforeWrite)); - QCOMPARE(fileInfo.birthTime(), birthTime); // mustn't have changed + QCOMPARE(fileInfo.birthTime(QTimeZone::UTC), birthTime); // mustn't have changed } // --- Change the file's metadata QTest::qSleep(sleepTime); - beforeMetadataChange = QDateTime::currentDateTime().addMSecs(-fsClockSkew); + beforeMetadataChange = QDateTime::currentDateTimeUtc().addMSecs(-fsClockSkew); { QFile file(fileName); file.setPermissions(file.permissions()); } { QFileInfo fileInfo(fileName); - metadataChangeTime = fileInfo.metadataChangeTime(); + metadataChangeTime = fileInfo.metadataChangeTime(QTimeZone::UTC); QVERIFY2(metadataChangeTime > beforeMetadataChange, datePairString(metadataChangeTime, beforeMetadataChange)); QVERIFY(metadataChangeTime >= writeTime); // not all filesystems can store both times - QCOMPARE(fileInfo.birthTime(), birthTime); // mustn't have changed + QCOMPARE(fileInfo.birthTime(QTimeZone::UTC), birthTime); // mustn't have changed } // --- Read the file QTest::qSleep(sleepTime); - beforeRead = QDateTime::currentDateTime().addMSecs(-fsClockSkew); + beforeRead = QDateTime::currentDateTimeUtc().addMSecs(-fsClockSkew); { QFile file(fileName); QVERIFY(file.open(QFile::ReadOnly | QFile::Text)); @@ -1233,12 +1182,12 @@ void tst_QFileInfo::fileTimes() } QFileInfo fileInfo(fileName); - readTime = fileInfo.lastRead(); - QCOMPARE(fileInfo.lastModified(), writeTime); // mustn't have changed - QCOMPARE(fileInfo.birthTime(), birthTime); // mustn't have changed + readTime = fileInfo.lastRead(QTimeZone::UTC); + QCOMPARE(fileInfo.lastModified(QTimeZone::UTC), writeTime); // mustn't have changed + QCOMPARE(fileInfo.birthTime(QTimeZone::UTC), birthTime); // mustn't have changed QVERIFY(readTime.isValid()); -#if defined(Q_OS_WINRT) || defined(Q_OS_QNX) || (defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED)) +#if defined(Q_OS_QNX) || defined(Q_OS_ANDROID) noAccessTime = true; #elif defined(Q_OS_WIN) //In Vista the last-access timestamp is not updated when the file is accessed/touched (by default). @@ -1259,6 +1208,28 @@ void tst_QFileInfo::fileTimes() QVERIFY(writeTime < beforeRead); } +void tst_QFileInfo::setFileTimes() +{ + QByteArray data("OLE\nOLE\nOLE"); + QTemporaryFile file; + + QVERIFY(file.open()); + QCOMPARE(file.write(data), data.size()); + QCOMPARE(file.size(), data.size()); + + QDateTime before = QDateTime::currentDateTimeUtc().addMSecs(-5000); + + QVERIFY(file.setFileTime(before, QFile::FileModificationTime)); + const QDateTime mtime = file.fileTime(QFile::FileModificationTime).toUTC(); + if (mtime.time().msec() == 0) + { + const QTime beforeTime = before.time(); + const QTime beforeTimeWithMSCutOff{beforeTime.hour(), beforeTime.minute(), beforeTime.second(), 0}; + before.setTime(beforeTimeWithMSCutOff); + } + QCOMPARE(mtime, before); +} + void tst_QFileInfo::fakeFileTimes_data() { QTest::addColumn<QDateTime>("when"); @@ -1276,7 +1247,7 @@ void tst_QFileInfo::fakeFileTimes() QFETCH(QDateTime, when); QFile file("faketimefile.txt"); - file.open(QIODevice::WriteOnly); + QVERIFY(file.open(QIODevice::WriteOnly)); file.write("\n", 1); file.close(); @@ -1285,12 +1256,12 @@ void tst_QFileInfo::fakeFileTimes() the file is open at the time. Of course, when writing, close() changes modification time, so need to re-open for read in order to setFileTime(). */ - file.open(QIODevice::ReadOnly); + QVERIFY(file.open(QIODevice::ReadOnly)); bool ok = file.setFileTime(when, QFileDevice::FileModificationTime); file.close(); if (ok) - QCOMPARE(QFileInfo(file.fileName()).lastModified(), when); + QCOMPARE(QFileInfo(file.fileName()).lastModified(QTimeZone::UTC), when); else QSKIP("Unable to set file metadata to contrived values"); } @@ -1307,7 +1278,7 @@ void tst_QFileInfo::isSymLink_data() QVERIFY(file1.link("link.lnk")); QFile file2("dummyfile"); - file2.open(QIODevice::WriteOnly); + QVERIFY(file2.open(QIODevice::WriteOnly)); QVERIFY(file2.link("brokenlink.lnk")); file2.remove(); @@ -1359,7 +1330,7 @@ void tst_QFileInfo::isShortcut_data() << regularFile.fileName() << false; QTest::newRow("directory") << QDir::currentPath() << false; -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) // windows shortcuts QVERIFY(regularFile.link("link.lnk")); QTest::newRow("shortcut") @@ -1382,6 +1353,57 @@ void tst_QFileInfo::isShortcut() QCOMPARE(fi.isShortcut(), isShortcut); } +void tst_QFileInfo::isAlias_data() +{ + QFile::remove("symlink"); + QFile::remove("file-alias"); + QFile::remove("directory-alias"); + + QTest::addColumn<QString>("path"); + QTest::addColumn<bool>("isAlias"); + + QFile regularFile(m_sourceFile); + QTest::newRow("regular-file") << regularFile.fileName() << false; + QTest::newRow("directory") << QDir::currentPath() << false; + +#if defined(Q_OS_MACOS) + auto createAlias = [](const QString &target, const QString &alias) { + NSURL *targetUrl = [NSURL fileURLWithPath:target.toNSString()]; + NSURL *aliasUrl = [NSURL fileURLWithPath:alias.toNSString()]; + NSData *bookmarkData = [targetUrl bookmarkDataWithOptions:NSURLBookmarkCreationSuitableForBookmarkFile + includingResourceValuesForKeys:nil relativeToURL:nil error:nullptr]; + Q_ASSERT(bookmarkData); + + bool success = [NSURL writeBookmarkData:bookmarkData toURL:aliasUrl + options:NSURLBookmarkCreationSuitableForBookmarkFile error:nullptr]; + Q_ASSERT(success); + }; + + regularFile.link("symlink"); + QTest::newRow("symlink") << "symlink" << false; + + createAlias(regularFile.fileName(), QDir::current().filePath("file-alias")); + QTest::newRow("file-alias") << "file-alias" << true; + + createAlias(QDir::currentPath(), QDir::current().filePath("directory-alias")); + QTest::newRow("directory-alias") << "directory-alias" << true; + + regularFile.copy("non-existing-file"); + createAlias("non-existing-file", QDir::current().filePath("non-existing-file-alias")); + QDir::current().remove("non-existing-file"); + QTest::newRow("non-existing-file-alias") << "non-existing-file-alias" << true; +#endif +} + +void tst_QFileInfo::isAlias() +{ + QFETCH(QString, path); + QFETCH(bool, isAlias); + + QFileInfo fi(path); + QCOMPARE(fi.isAlias(), isAlias); +} + void tst_QFileInfo::isSymbolicLink_data() { QTest::addColumn<QString>("path"); @@ -1395,17 +1417,14 @@ void tst_QFileInfo::isSymbolicLink_data() #ifndef Q_NO_SYMLINKS #if defined(Q_OS_WIN) -#if !defined(Q_OS_WINRT) - QString errorMessage; - const DWORD creationResult = createSymbolicLink("symlink", m_sourceFile, &errorMessage); - if (creationResult == ERROR_PRIVILEGE_NOT_HELD) { - QWARN(msgInsufficientPrivileges(errorMessage)); + const auto creationResult = FileSystem::createSymbolicLink("symlink", m_sourceFile); + if (creationResult.dwErr == ERROR_PRIVILEGE_NOT_HELD) { + qWarning() << qPrintable(msgInsufficientPrivileges(creationResult.errorMessage)); } else { - QVERIFY2(creationResult == ERROR_SUCCESS, qPrintable(errorMessage)); + QVERIFY2(creationResult.dwErr == ERROR_SUCCESS, qPrintable(creationResult.errorMessage)); QTest::newRow("NTFS-symlink") << "symlink" << true; } -#endif // !Q_OS_WINRT #else // Unix: QVERIFY(regularFile.link("symlink.lnk")); QTest::newRow("symlink.lnk") @@ -1445,10 +1464,10 @@ void tst_QFileInfo::link_data() QFile file1(m_sourceFile); QFile file2("dummyfile"); - file2.open(QIODevice::WriteOnly); + QVERIFY(file2.open(QIODevice::WriteOnly)); QTest::newRow("existent file") << m_sourceFile << false << false << ""; -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) // windows shortcuts QVERIFY(file1.link("link.lnk")); QTest::newRow("link.lnk") @@ -1461,26 +1480,23 @@ void tst_QFileInfo::link_data() #ifndef Q_NO_SYMLINKS #if defined(Q_OS_WIN) -#if !defined(Q_OS_WINRT) - QString errorMessage; - DWORD creationResult = createSymbolicLink("link", m_sourceFile, &errorMessage); - if (creationResult == ERROR_PRIVILEGE_NOT_HELD) { - QWARN(msgInsufficientPrivileges(errorMessage)); + auto creationResult = FileSystem::createSymbolicLink("link", m_sourceFile); + if (creationResult.dwErr == ERROR_PRIVILEGE_NOT_HELD) { + qWarning() << qPrintable(msgInsufficientPrivileges(creationResult.errorMessage)); } else { - QVERIFY2(creationResult == ERROR_SUCCESS, qPrintable(errorMessage)); + QVERIFY2(creationResult.dwErr == ERROR_SUCCESS, qPrintable(creationResult.errorMessage)); QTest::newRow("link") << "link" << false << true << QFileInfo(m_sourceFile).absoluteFilePath(); } - creationResult = createSymbolicLink("brokenlink", "dummyfile", &errorMessage); - if (creationResult == ERROR_PRIVILEGE_NOT_HELD) { - QWARN(msgInsufficientPrivileges(errorMessage)); + creationResult = FileSystem::createSymbolicLink("brokenlink", "dummyfile"); + if (creationResult.dwErr == ERROR_PRIVILEGE_NOT_HELD) { + qWarning() << qPrintable(msgInsufficientPrivileges(creationResult.errorMessage)); } else { - QVERIFY2(creationResult == ERROR_SUCCESS, qPrintable(errorMessage)); + QVERIFY2(creationResult.dwErr == ERROR_SUCCESS, qPrintable(creationResult.errorMessage)); QTest::newRow("broken link") << "brokenlink" << false << true << QFileInfo("dummyfile").absoluteFilePath(); } -#endif // !Q_OS_WINRT #else // Unix: QVERIFY(file1.link("link")); QTest::newRow("link") @@ -1516,9 +1532,9 @@ void tst_QFileInfo::isHidden_data() { QTest::addColumn<QString>("path"); QTest::addColumn<bool>("isHidden"); - foreach (const QFileInfo& info, QDir::drives()) { + const auto drives = QDir::drives(); + for (const QFileInfo& info : drives) QTest::newRow(qPrintable("drive." + info.path())) << info.path() << false; - } #if defined(Q_OS_WIN) QVERIFY(QDir("./hidden-directory").exists() || QDir().mkdir("./hidden-directory")); @@ -1533,14 +1549,14 @@ void tst_QFileInfo::isHidden_data() QTest::newRow("/path/to/.hidden-directory/..") << QDir::currentPath() + QString("/.hidden-directory/..") << true; #endif -#if defined(Q_OS_MAC) +#if defined(Q_OS_DARWIN) // /bin has the hidden attribute on OS X QTest::newRow("/bin/") << QString::fromLatin1("/bin/") << true; #elif !defined(Q_OS_WIN) QTest::newRow("/bin/") << QString::fromLatin1("/bin/") << false; #endif -#ifdef Q_OS_MAC +#ifdef Q_OS_DARWIN QTest::newRow("mac_etc") << QString::fromLatin1("/etc") << true; QTest::newRow("mac_private_etc") << QString::fromLatin1("/private/etc") << false; QTest::newRow("mac_Applications") << QString::fromLatin1("/Applications") << false; @@ -1556,7 +1572,7 @@ void tst_QFileInfo::isHidden() QCOMPARE(fi.isHidden(), isHidden); } -#if defined(Q_OS_MAC) +#if defined(Q_OS_DARWIN) void tst_QFileInfo::isHiddenFromFinder() { const char *filename = "test_foobar.txt"; @@ -1582,7 +1598,7 @@ void tst_QFileInfo::isBundle_data() QTest::addColumn<QString>("path"); QTest::addColumn<bool>("isBundle"); QTest::newRow("root") << QString::fromLatin1("/") << false; -#ifdef Q_OS_MAC +#ifdef Q_OS_DARWIN QTest::newRow("mac_Applications") << QString::fromLatin1("/Applications") << false; QTest::newRow("mac_Applications") << QString::fromLatin1("/Applications/Safari.app") << true; #endif @@ -1636,14 +1652,14 @@ void tst_QFileInfo::refresh() file.flush(); QFileInfo info(file); - QDateTime lastModified = info.lastModified(); + QDateTime lastModified = info.lastModified(QTimeZone::UTC); QCOMPARE(info.size(), qint64(7)); QTest::qSleep(sleepTime); QCOMPARE(file.write("JOJOJO"), qint64(6)); file.flush(); - QCOMPARE(info.lastModified(), lastModified); + QCOMPARE(info.lastModified(QTimeZone::UTC), lastModified); QCOMPARE(info.size(), qint64(7)); #if defined(Q_OS_WIN) @@ -1651,7 +1667,7 @@ void tst_QFileInfo::refresh() #endif info.refresh(); QCOMPARE(info.size(), qint64(13)); - QVERIFY(info.lastModified() > lastModified); + QVERIFY(info.lastModified(QTimeZone::UTC) > lastModified); QFileInfo info2 = info; QCOMPARE(info2.size(), info.size()); @@ -1660,7 +1676,7 @@ void tst_QFileInfo::refresh() QCOMPARE(info2.size(), info.size()); } -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) struct NtfsTestResource { @@ -1680,7 +1696,6 @@ void tst_QFileInfo::ntfsJunctionPointsAndSymlinks_data() { QTest::addColumn<NtfsTestResource>("resource"); QTest::addColumn<QString>("path"); - QTest::addColumn<bool>("isSymLink"); QTest::addColumn<QString>("linkTarget"); QTest::addColumn<QString>("canonicalFilePath"); @@ -1708,13 +1723,13 @@ void tst_QFileInfo::ntfsJunctionPointsAndSymlinks_data() QTest::newRow("absolute dir symlink") << NtfsTestResource(NtfsTestResource::SymLink, absSymlink, absTarget) - << absSymlink << true << QDir::fromNativeSeparators(absTarget) << target.canonicalPath(); + << absSymlink << QDir::fromNativeSeparators(absTarget) << target.canonicalPath(); QTest::newRow("relative dir symlink") << NtfsTestResource(NtfsTestResource::SymLink, relSymlink, relTarget) - << relSymlink << true << QDir::fromNativeSeparators(absTarget) << target.canonicalPath(); + << relSymlink << QDir::fromNativeSeparators(absTarget) << target.canonicalPath(); QTest::newRow("file in symlink dir") << NtfsTestResource() - << fileInSymlink << false << "" << target.canonicalPath().append("/file"); + << fileInSymlink << "" << target.canonicalPath().append("/file"); } { //File symlinks @@ -1730,23 +1745,22 @@ void tst_QFileInfo::ntfsJunctionPointsAndSymlinks_data() QTest::newRow("absolute file symlink") << NtfsTestResource(NtfsTestResource::SymLink, absSymlink, absTarget) - << absSymlink << true << QDir::fromNativeSeparators(absTarget) << target.canonicalFilePath(); + << absSymlink << QDir::fromNativeSeparators(absTarget) << target.canonicalFilePath(); QTest::newRow("relative file symlink") << NtfsTestResource(NtfsTestResource::SymLink, relSymlink, relTarget) - << relSymlink << true << QDir::fromNativeSeparators(absTarget) << target.canonicalFilePath(); + << relSymlink << QDir::fromNativeSeparators(absTarget) << target.canonicalFilePath(); QTest::newRow("relative to relative file symlink") << NtfsTestResource(NtfsTestResource::SymLink, relToRelSymlink, relToRelTarget) - << relToRelSymlink << true << QDir::fromNativeSeparators(absTarget) << target.canonicalFilePath(); + << relToRelSymlink << QDir::fromNativeSeparators(absTarget) << target.canonicalFilePath(); } { // Symlink to UNC share pwd.mkdir("unc"); - QString errorMessage; - QString uncTarget = QStringLiteral("//") + QtNetworkSettings::winServerName() + "/testshare"; + QString uncTarget = QStringLiteral("//") + QTest::uncServerName() + "/testshare"; QString uncSymlink = QDir::toNativeSeparators(pwd.absolutePath().append("\\unc\\link_to_unc")); QTest::newRow("UNC symlink") << NtfsTestResource(NtfsTestResource::SymLink, uncSymlink, uncTarget) - << QDir::fromNativeSeparators(uncSymlink) << true << QDir::fromNativeSeparators(uncTarget) << uncTarget; + << QDir::fromNativeSeparators(uncSymlink) << QDir::fromNativeSeparators(uncTarget) << uncTarget; } //Junctions @@ -1755,7 +1769,7 @@ void tst_QFileInfo::ntfsJunctionPointsAndSymlinks_data() QFileInfo targetInfo(target); QTest::newRow("junction_pwd") << NtfsTestResource(NtfsTestResource::Junction, junction, target) - << junction << false << QString() << QString(); + << junction << QString() << QString(); QFileInfo fileInJunction(targetInfo.absoluteFilePath().append("/file")); QFile file(fileInJunction.absoluteFilePath()); @@ -1764,14 +1778,14 @@ void tst_QFileInfo::ntfsJunctionPointsAndSymlinks_data() QVERIFY2(file.exists(), msgDoesNotExist(file.fileName()).constData()); QTest::newRow("file in junction") << NtfsTestResource() - << fileInJunction.absoluteFilePath() << false << QString() << fileInJunction.canonicalFilePath(); + << fileInJunction.absoluteFilePath() << QString() << fileInJunction.canonicalFilePath(); target = QDir::rootPath(); junction = "junction_root"; targetInfo.setFile(target); QTest::newRow("junction_root") << NtfsTestResource(NtfsTestResource::Junction, junction, target) - << junction << false << QString() << QString(); + << junction << QString() << QString(); //Mountpoint wchar_t buffer[MAX_PATH]; @@ -1782,35 +1796,37 @@ void tst_QFileInfo::ntfsJunctionPointsAndSymlinks_data() rootVolume.replace("\\\\?\\","\\??\\"); QTest::newRow("mountpoint") << NtfsTestResource(NtfsTestResource::Junction, junction, rootVolume) - << junction << false << QString() << QString(); + << junction << QString() << QString(); } void tst_QFileInfo::ntfsJunctionPointsAndSymlinks() { QFETCH(NtfsTestResource, resource); QFETCH(QString, path); - QFETCH(bool, isSymLink); QFETCH(QString, linkTarget); QFETCH(QString, canonicalFilePath); - QString errorMessage; - DWORD creationResult = ERROR_SUCCESS; + bool isSymLink = false; + bool isJunction = false; + FileSystem::Result creationResult; switch (resource.type) { case NtfsTestResource::None: break; case NtfsTestResource::SymLink: - creationResult = createSymbolicLink(resource.source, resource.target, &errorMessage); + isSymLink = true; + creationResult = FileSystem::createSymbolicLink(resource.source, resource.target); break; case NtfsTestResource::Junction: - creationResult = FileSystem::createNtfsJunction(resource.target, resource.source, &errorMessage); - if (creationResult == ERROR_NOT_SUPPORTED) // Special value indicating non-NTFS drive - QSKIP(qPrintable(errorMessage)); + isJunction = true; + creationResult = FileSystem::createNtfsJunction(resource.target, resource.source); + if (creationResult.dwErr == ERROR_NOT_SUPPORTED) // Special value indicating non-NTFS drive + QSKIP(qPrintable(creationResult.errorMessage)); break; } - if (creationResult == ERROR_PRIVILEGE_NOT_HELD) - QSKIP(msgInsufficientPrivileges(errorMessage)); - QVERIFY2(creationResult == ERROR_SUCCESS, qPrintable(errorMessage)); + if (creationResult.dwErr == ERROR_PRIVILEGE_NOT_HELD) + QSKIP(msgInsufficientPrivileges(creationResult.errorMessage)); + QVERIFY2(creationResult.dwErr == ERROR_SUCCESS, qPrintable(creationResult.errorMessage)); QFileInfo fi(path); auto guard = qScopeGuard([&fi, this]() { @@ -1825,14 +1841,36 @@ void tst_QFileInfo::ntfsJunctionPointsAndSymlinks() } } }); - const QString actualSymLinkTarget = isSymLink ? fi.symLinkTarget() : QString(); - const QString actualCanonicalFilePath = isSymLink ? fi.canonicalFilePath() : QString(); - QCOMPARE(fi.isJunction(), resource.type == NtfsTestResource::Junction); + const QString actualCanonicalFilePath = fi.canonicalFilePath(); + QCOMPARE(fi.isJunction(), isJunction); QCOMPARE(fi.isSymbolicLink(), isSymLink); if (isSymLink) { - QCOMPARE(actualSymLinkTarget, linkTarget); + QCOMPARE(fi.symLinkTarget(), linkTarget); QCOMPARE(actualCanonicalFilePath, canonicalFilePath); } + + if (isJunction) { + if (creationResult.target.startsWith(uR"(\??\)")) + creationResult.target = creationResult.target.sliced(4); + + // resolve volume to drive letter + static const QRegularExpression matchVolumeRe(uR"(^Volume\{([a-z]|[0-9]|-)+\}\\)"_s, + QRegularExpression::CaseInsensitiveOption); + auto matchVolume = matchVolumeRe.match(creationResult.target); + if (matchVolume.hasMatch()) { + Q_ASSERT(matchVolume.capturedStart() == 0); + DWORD len; + wchar_t buffer[MAX_PATH]; + const QString volumeName = uR"(\\?\)"_s + matchVolume.captured(); + if (GetVolumePathNamesForVolumeName(reinterpret_cast<LPCWSTR>(volumeName.utf16()), + buffer, MAX_PATH, &len) != 0) { + creationResult.target.replace(0, matchVolume.capturedLength(), + QString::fromWCharArray(buffer)); + } + } + QCOMPARE(fi.junctionTarget(), QDir::fromNativeSeparators(creationResult.target)); + QCOMPARE(actualCanonicalFilePath, QFileInfo(creationResult.link).canonicalFilePath()); + } } void tst_QFileInfo::brokenShortcut() @@ -1863,42 +1901,48 @@ void tst_QFileInfo::brokenShortcut() void tst_QFileInfo::isWritable() { QFile tempfile("tempfile.txt"); - tempfile.open(QIODevice::WriteOnly); + QVERIFY(tempfile.open(QIODevice::WriteOnly)); tempfile.write("This file is generated by the QFileInfo autotest."); tempfile.close(); QVERIFY(QFileInfo("tempfile.txt").isWritable()); tempfile.remove(); -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) QFileInfo fi("c:\\pagefile.sys"); QVERIFY2(fi.exists(), msgDoesNotExist(fi.absoluteFilePath()).constData()); QVERIFY(!fi.isWritable()); #endif -#if defined (Q_OS_WIN) && !defined(Q_OS_WINRT) - QScopedValueRollback<int> ntfsMode(qt_ntfs_permission_lookup); - qt_ntfs_permission_lookup = 1; +#if defined (Q_OS_WIN) + QNtfsPermissionCheckGuard permissionGuard; QFileInfo fi2(QFile::decodeName(qgetenv("SystemRoot") + "/system.ini")); QVERIFY(fi2.exists()); QCOMPARE(fi2.isWritable(), IsUserAdmin()); #endif #if defined (Q_OS_QNX) // On QNX /etc is usually on a read-only filesystem - QVERIFY(!QFileInfo("/etc/passwd").isWritable()); + QCOMPARE(QFileInfo("/etc/passwd").isWritable(), (geteuid() == 0)); #elif defined (Q_OS_UNIX) && !defined(Q_OS_VXWORKS) // VxWorks does not have users/groups - if (::getuid() == 0) - QVERIFY(QFileInfo("/etc/passwd").isWritable()); - else - QVERIFY(!QFileInfo("/etc/passwd").isWritable()); + for (const char *attempt : { "/etc/passwd", "/etc/machine-id", "/proc/version" }) { + if (access(attempt, F_OK) == -1) + continue; + QCOMPARE(QFileInfo(attempt).isWritable(), ::access(attempt, W_OK) == 0); + } #endif } void tst_QFileInfo::isExecutable() { QString appPath = QCoreApplication::applicationDirPath(); -#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED) - appPath += "/libtst_qfileinfo.so"; +#ifdef Q_OS_ANDROID + QDir dir(appPath); + QVERIFY(dir.exists()); + dir.setNameFilters({ "libtst_qfileinfo*.so" }); + QStringList entries = dir.entryList(); + QCOMPARE(entries.size(), 1); + + appPath += "/" + entries[0]; #else appPath += "/tst_qfileinfo"; # if defined(Q_OS_WIN) @@ -1906,6 +1950,7 @@ void tst_QFileInfo::isExecutable() # endif #endif QFileInfo fi(appPath); + QVERIFY(fi.exists()); QCOMPARE(fi.isExecutable(), true); QCOMPARE(QFileInfo(m_proFile).isExecutable(), false); @@ -1976,7 +2021,7 @@ private: void tst_QFileInfo::testDecomposedUnicodeNames() { -#ifndef Q_OS_MAC +#ifndef Q_OS_DARWIN QSKIP("This is a OS X only test (unless you know more about filesystems, then maybe you should try it ;)"); #else QFETCH(QString, filePath); @@ -2056,7 +2101,7 @@ void tst_QFileInfo::detachingOperations() QVERIFY(!info1.caching()); } -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) bool IsUserAdmin() { BOOL b; @@ -2078,13 +2123,12 @@ bool IsUserAdmin() return b != FALSE; } -#endif // Q_OS_WIN && !Q_OS_WINRT +#endif // Q_OS_WIN -#ifndef Q_OS_WINRT void tst_QFileInfo::owner() { QString userName; -#if defined(Q_OS_UNIX) && !defined(Q_OS_VXWORKS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_VXWORKS) && !defined(Q_OS_INTEGRITY) { passwd *user = getpwuid(geteuid()); QVERIFY(user); @@ -2121,7 +2165,7 @@ void tst_QFileInfo::owner() NetApiBufferFree(pBuf); } } - qt_ntfs_permission_lookup = 1; + QNtfsPermissionCheckGuard permissionGuard; #endif if (userName.isEmpty()) QSKIP("Can't retrieve the user name"); @@ -2138,16 +2182,12 @@ void tst_QFileInfo::owner() QCOMPARE(fi.owner(), userName); QFile::remove(fileName); -#if defined(Q_OS_WIN) - qt_ntfs_permission_lookup = 0; -#endif } -#endif // !Q_OS_WINRT void tst_QFileInfo::group() { QString expected; -#if defined(Q_OS_UNIX) && !defined(Q_OS_VXWORKS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_VXWORKS) && !defined(Q_OS_INTEGRITY) struct group *gr; gid_t gid = getegid(); @@ -2225,13 +2265,10 @@ static void stateCheck(const QFileInfo &info, const QString &dirname, const QStr QCOMPARE(info.permissions(), QFile::Permissions()); -#if QT_DEPRECATED_SINCE(5, 10) - QVERIFY(!info.created().isValid()); -#endif - QVERIFY(!info.birthTime().isValid()); - QVERIFY(!info.metadataChangeTime().isValid()); - QVERIFY(!info.lastRead().isValid()); - QVERIFY(!info.lastModified().isValid()); + QVERIFY(!info.birthTime(QTimeZone::UTC).isValid()); + QVERIFY(!info.metadataChangeTime(QTimeZone::UTC).isValid()); + QVERIFY(!info.lastRead(QTimeZone::UTC).isValid()); + QVERIFY(!info.lastModified(QTimeZone::UTC).isValid()); }; void tst_QFileInfo::invalidState_data() @@ -2269,6 +2306,129 @@ void tst_QFileInfo::nonExistingFile() stateCheck(info, dirname, filename); } +void tst_QFileInfo::stdfilesystem() +{ +#if QT_CONFIG(cxx17_filesystem) + + namespace fs = std::filesystem; + // Verify constructing with fs::path leads to valid objects + { + // We compare using absoluteFilePath since QFileInfo::operator== ends up using + // canonicalFilePath which evaluates to empty-string for non-existent paths causing + // these tests to always succeed. + QDir base{ "../" }; // Used for the QFileInfo(QDir, <path>) ctor + auto doCompare = [&base](const char *filepath) { + QCOMPARE(QFileInfo(fs::path(filepath)).absoluteFilePath(), + QFileInfo(QString::fromLocal8Bit(filepath)).absoluteFilePath()); + QCOMPARE(QFileInfo(base, fs::path(filepath)).absoluteFilePath(), + QFileInfo(base, QString::fromLocal8Bit(filepath)).absoluteFilePath()); + }; +#define COMPARE_CONSTRUCTION(filepath) \ + doCompare(filepath); if (QTest::currentTestFailed()) return + + COMPARE_CONSTRUCTION("./file"); + +#ifdef Q_OS_WIN32 + COMPARE_CONSTRUCTION("C:\\path\\to\\file.txt"); + COMPARE_CONSTRUCTION("x:\\path/to\\file.txt"); + COMPARE_CONSTRUCTION("D:/path/TO/file.txt"); + COMPARE_CONSTRUCTION("//sharename/folder/file.txt"); +#endif + COMPARE_CONSTRUCTION("/path/TO/file.txt"); + COMPARE_CONSTRUCTION("./path/TO/file.txt"); + COMPARE_CONSTRUCTION("../file.txt"); +#if !(defined(__GLIBCXX__) && defined(Q_OS_WIN32)) + // libstdc++ bug on Windows - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111244 + COMPARE_CONSTRUCTION("./filæ.txt"); +#endif + + // Test unicode strings + QCOMPARE(QFileInfo(fs::path(u"./filæ.txt")).absoluteFilePath(), + QFileInfo(u"./filæ.txt"_s).absoluteFilePath()); + QCOMPARE(QFileInfo(base, fs::path(u"./filæ.txt")).absoluteFilePath(), + QFileInfo(base, u"./filæ.txt"_s).absoluteFilePath()); +#ifdef __cpp_char8_t + QCOMPARE(QFileInfo(fs::path(u8"./filæ.txt")).absoluteFilePath(), + QFileInfo(u8"./filæ.txt").absoluteFilePath()); + QCOMPARE(QFileInfo(base, fs::path(u8"./filæ.txt")).absoluteFilePath(), + QFileInfo(base, u8"./filæ.txt").absoluteFilePath()); +#endif + +#undef COMPARE_CONSTRUCTION + { + // One proper comparison with operator== for each ctor + QFile file(QStringLiteral("./filesystem_test_file.txt")); + if (!file.open(QFile::NewOnly)) + QVERIFY(file.exists()); + file.close(); + + QFileInfo pinfo{ fs::path{ "./filesystem_test_file.txt" } }; + QFileInfo info{ QStringLiteral("./filesystem_test_file.txt") }; + QCOMPARE(pinfo, info); + } + + { + // And once more for QFileInfo(QDir, <path>) + const QString &subdir = QStringLiteral("./filesystem_test_dir/"); + base = QDir(QStringLiteral(".")); + if (!base.exists(subdir)) + QVERIFY(base.mkdir(subdir)); + base.cd(subdir); + QFile file{ base.filePath(QStringLiteral("./filesystem_test_file.txt")) }; + if (!file.open(QFile::NewOnly)) + QVERIFY(file.exists()); + file.close(); + QFileInfo pinfo{ base, fs::path{ "filesystem_test_file.txt" } }; + QFileInfo info{ base, QStringLiteral("filesystem_test_file.txt") }; + QCOMPARE(pinfo, info); + } + } + + // Verify that functions returning path all point to the same place + { +#define COMPARE_PATHS(actual, expected) \ + QCOMPARE(QString::fromStdU16String(actual.u16string()), expected) + + QFile file(QStringLiteral("./orig")); + if (!file.open(QFile::NewOnly)) + QVERIFY(file.exists()); + file.close(); + + QFileInfo info{ QStringLiteral("./orig") }; + COMPARE_PATHS(info.filesystemPath(), info.path()); + COMPARE_PATHS(info.filesystemAbsolutePath(), info.absolutePath()); + COMPARE_PATHS(info.filesystemCanonicalPath(), info.canonicalPath()); + COMPARE_PATHS(info.filesystemFilePath(), info.filePath()); + COMPARE_PATHS(info.filesystemAbsoluteFilePath(), info.absoluteFilePath()); + COMPARE_PATHS(info.filesystemCanonicalFilePath(), info.canonicalFilePath()); + + QVERIFY(file.link(QStringLiteral("./filesystem_test_symlink.lnk"))); + info = QFileInfo{ "./filesystem_test_symlink.lnk" }; + + COMPARE_PATHS(info.filesystemSymLinkTarget(), info.symLinkTarget()); +#undef COMPARE_PATHS + } + +#else + QSKIP("Not supported"); +#endif +} + +void tst_QFileInfo::readSymLink() +{ + QString symLinkName("./a.link"); + const auto tidier = qScopeGuard([symLinkName]() { QFile::remove(symLinkName); }); + +#ifdef Q_OS_WIN + QVERIFY2(CreateSymbolicLink(L"a.link", L"..\\..\\a", SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE) + != 0, + "Failed to create symlink for test"); +#else + QVERIFY2(QFile::link("../../a", symLinkName), "Failed to create symlink for test"); +#endif + QFileInfo info(symLinkName); + QCOMPARE(info.readSymLink(), QString("../../a")); +} QTEST_MAIN(tst_QFileInfo) #include "tst_qfileinfo.moc" diff --git a/tests/auto/corelib/io/qfileselector/CMakeLists.txt b/tests/auto/corelib/io/qfileselector/CMakeLists.txt new file mode 100644 index 0000000000..aafdddb595 --- /dev/null +++ b/tests/auto/corelib/io/qfileselector/CMakeLists.txt @@ -0,0 +1,80 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qfileselectors Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qfileselectors LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +# Resources: +set(qfileselector_resource_files + "extras/+custom1/test" + "extras/+custom1/test3" + "extras/+custom2/test" + "extras/+custom3/+custom2/test" + "extras/+custom3/+custom4/test" + "extras/+custom3/+custom5/test" + "extras/+custom3/test" + "extras/+custom5/+custom3/test" + "extras/test" + "extras/test2" + "platforms/+android/test" + "platforms/+android/test2" + "platforms/+darwin/test" + "platforms/+haiku/test" + "platforms/+haiku/test2" + "platforms/+ios/test" + "platforms/+ios/test2" + "platforms/+linux/test" + "platforms/+linux/test2" + "platforms/+wasm/test" + "platforms/+wasm/test2" + "platforms/+macos/test" + "platforms/+macos/test2" + "platforms/+qnx/test" + "platforms/+qnx/test2" + "platforms/+unix/+emscripten/+wasm/test" + "platforms/+unix/+emscripten/test" + "platforms/+unix/+android/test" + "platforms/+unix/+darwin/+ios/test" + "platforms/+unix/+darwin/+macos/test" + "platforms/+unix/+darwin/test" + "platforms/+unix/+haiku/test" + "platforms/+unix/+linux/test" + "platforms/+unix/+qnx/test" + "platforms/+unix/+vxworks/test" + "platforms/+unix/test" + "platforms/+unix/test3" + "platforms/+vxworks/test" + "platforms/+vxworks/test2" + "platforms/+wince/test" + "platforms/+wince/test2" + "platforms/+windows/+wince/test" + "platforms/+windows/+winnt/test" + "platforms/+windows/+winrt/test" + "platforms/+windows/test" + "platforms/+windows/test3" + "platforms/+winnt/test2" + "platforms/+winrt/test" + "platforms/+winrt/test2" + "platforms/test" + "platforms/test2" + "platforms/test3" + "platforms/test4" + "platforms/test5" +) + +qt_internal_add_test(tst_qfileselectors + SOURCES + tst_qfileselector.cpp + LIBRARIES + Qt::CorePrivate + TESTDATA ${qfileselector_resource_files} + BUILTIN_TESTDATA +) + diff --git a/tests/auto/corelib/io/qfileselector/platforms/+unix/+emscripten/+wasm/test b/tests/auto/corelib/io/qfileselector/platforms/+unix/+emscripten/+wasm/test new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/auto/corelib/io/qfileselector/platforms/+unix/+emscripten/+wasm/test diff --git a/tests/auto/corelib/io/qfileselector/platforms/+unix/+emscripten/test b/tests/auto/corelib/io/qfileselector/platforms/+unix/+emscripten/test new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/auto/corelib/io/qfileselector/platforms/+unix/+emscripten/test diff --git a/tests/auto/corelib/io/qfileselector/platforms/+unix/+vxworks/test b/tests/auto/corelib/io/qfileselector/platforms/+unix/+vxworks/test new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/auto/corelib/io/qfileselector/platforms/+unix/+vxworks/test diff --git a/tests/auto/corelib/io/qfileselector/platforms/+vxworks/test b/tests/auto/corelib/io/qfileselector/platforms/+vxworks/test new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/auto/corelib/io/qfileselector/platforms/+vxworks/test diff --git a/tests/auto/corelib/io/qfileselector/platforms/+vxworks/test2 b/tests/auto/corelib/io/qfileselector/platforms/+vxworks/test2 new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/auto/corelib/io/qfileselector/platforms/+vxworks/test2 diff --git a/tests/auto/corelib/io/qfileselector/platforms/+wasm/test b/tests/auto/corelib/io/qfileselector/platforms/+wasm/test new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/auto/corelib/io/qfileselector/platforms/+wasm/test diff --git a/tests/auto/corelib/io/qfileselector/platforms/+wasm/test2 b/tests/auto/corelib/io/qfileselector/platforms/+wasm/test2 new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/auto/corelib/io/qfileselector/platforms/+wasm/test2 diff --git a/tests/auto/corelib/io/qfileselector/qfileselector.pro b/tests/auto/corelib/io/qfileselector/qfileselector.pro deleted file mode 100644 index edcc91e8ed..0000000000 --- a/tests/auto/corelib/io/qfileselector/qfileselector.pro +++ /dev/null @@ -1,5 +0,0 @@ -CONFIG += testcase -TARGET = tst_qfileselectors -QT = core-private testlib -SOURCES = tst_qfileselector.cpp -RESOURCES = qfileselector.qrc diff --git a/tests/auto/corelib/io/qfileselector/qfileselector.qrc b/tests/auto/corelib/io/qfileselector/qfileselector.qrc deleted file mode 100644 index f3b3ede575..0000000000 --- a/tests/auto/corelib/io/qfileselector/qfileselector.qrc +++ /dev/null @@ -1,51 +0,0 @@ -<RCC> - <qresource prefix="/"> - <file>extras/test</file> - <file>extras/test2</file> - <file>extras/+custom1/test</file> - <file>extras/+custom1/test3</file> - <file>extras/+custom2/test</file> - <file>extras/+custom3/test</file> - <file>extras/+custom3/+custom2/test</file> - <file>extras/+custom3/+custom4/test</file> - <file>extras/+custom3/+custom5/test</file> - <file>extras/+custom5/+custom3/test</file> - <file>platforms/test</file> - <file>platforms/+unix/+android/test</file> - <file>platforms/+unix/+darwin/test</file> - <file>platforms/+unix/+haiku/test</file> - <file>platforms/+unix/+linux/test</file> - <file>platforms/+unix/+qnx/test</file> - <file>platforms/+unix/test</file> - <file>platforms/+windows/+wince/test</file> - <file>platforms/+windows/+winnt/test</file> - <file>platforms/+windows/+winrt/test</file> - <file>platforms/+windows/test</file> - <file>platforms/+android/test</file> - <file>platforms/+ios/test</file> - <file>platforms/+macos/test</file> - <file>platforms/+darwin/test</file> - <file>platforms/+haiku/test</file> - <file>platforms/+linux/test</file> - <file>platforms/+qnx/test</file> - <file>platforms/+wince/test</file> - <file>platforms/+winrt/test</file> - <file>platforms/test2</file> - <file>platforms/+android/test2</file> - <file>platforms/+ios/test2</file> - <file>platforms/+macos/test2</file> - <file>platforms/+haiku/test2</file> - <file>platforms/+linux/test2</file> - <file>platforms/+qnx/test2</file> - <file>platforms/+wince/test2</file> - <file>platforms/+winnt/test2</file> - <file>platforms/+winrt/test2</file> - <file>platforms/test3</file> - <file>platforms/+windows/test3</file> - <file>platforms/+unix/test3</file> - <file>platforms/test4</file> - <file>platforms/test5</file> - <file>platforms/+unix/+darwin/+macos/test</file> - <file>platforms/+unix/+darwin/+ios/test</file> - </qresource> -</RCC> diff --git a/tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp b/tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp index bac7a69e0f..82c9d5ef37 100644 --- a/tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp +++ b/tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp @@ -1,32 +1,7 @@ -/**************************************************************************** -** -** Copyright (C) 2013 BlackBerry Limited. All rights reserved. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtTest/QtTest> +// Copyright (C) 2013 BlackBerry Limited. All rights reserved. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QTest> #include <qplatformdefs.h> #include <QCoreApplication> @@ -85,8 +60,8 @@ void tst_QFileSelector::basicTest_data() QString expectedPlatform1File(":/platforms"); QString expectedPlatform2File(""); //Only the last selector QString expectedPlatform3File; // Only the first selector (the family) -#if defined(Q_OS_UNIX) && !defined(Q_OS_ANDROID) && \ - !defined(Q_OS_DARWIN) && !defined(Q_OS_LINUX) && !defined(Q_OS_HAIKU) && !defined(Q_OS_QNX) +#if defined(Q_OS_UNIX) && !defined(Q_OS_ANDROID) && !defined(Q_OS_WASM) && \ + !defined(Q_OS_DARWIN) && !defined(Q_OS_LINUX) && !defined(Q_OS_HAIKU) && !defined(Q_OS_QNX) && !defined(Q_OS_VXWORKS) /* We are only aware of specific unixes, and do not have test files for any of the others. However those unixes can get a selector added from the result of a uname call, so this will lead to a case where we don't have that file so we can't expect the concatenation of platform @@ -96,10 +71,11 @@ void tst_QFileSelector::basicTest_data() expectedPlatform2File = QString(":/platforms/test2"); #else QString distributionName; -# if (defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)) || defined(Q_OS_FREEBSD) || defined(Q_OS_WINRT) +# if (defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)) || defined(Q_OS_FREEBSD) distributionName = QSysInfo::productType(); # endif - foreach (const QString &selector, QFileSelectorPrivate::platformSelectors()) { + const auto platformSelectors = QFileSelectorPrivate::platformSelectors(); + for (const QString &selector : platformSelectors) { // skip the Linux distribution name (if any) since we don't have files for them if (selector == distributionName) continue; @@ -215,6 +191,9 @@ void tst_QFileSelector::urlConvenience_data() strUrlWithFragment = QString("file:") + testWithQueryAndFragment; QTest::newRow("file with query and fragment too") << QUrl(strUrlWithFragment) << (QStringList()) << QUrl(strUrlWithFragment); + // preserve path to root + QTest::newRow("path to root") << QUrl("file:///") << (QStringList()) << QUrl("file:///"); + // http://qt-project.org/images/qtdn/sprites-combined-latest.png is chosen as a representative real world URL // But note that this test is checking that http urls are NOT selected so it shouldn't be checked QUrl testHttpUrl("http://qt-project.org/images/sprites-combined-latest.png"); diff --git a/tests/auto/corelib/io/qfilesystementry/CMakeLists.txt b/tests/auto/corelib/io/qfilesystementry/CMakeLists.txt new file mode 100644 index 0000000000..85686a12b1 --- /dev/null +++ b/tests/auto/corelib/io/qfilesystementry/CMakeLists.txt @@ -0,0 +1,20 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qfilesystementry Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qfilesystementry LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +qt_internal_add_test(tst_qfilesystementry + SOURCES + tst_qfilesystementry.cpp + LIBRARIES + Qt::CorePrivate + Qt::TestPrivate +) diff --git a/tests/auto/corelib/io/qfilesystementry/qfilesystementry.pro b/tests/auto/corelib/io/qfilesystementry/qfilesystementry.pro deleted file mode 100644 index 474836fba2..0000000000 --- a/tests/auto/corelib/io/qfilesystementry/qfilesystementry.pro +++ /dev/null @@ -1,6 +0,0 @@ -CONFIG += testcase -TARGET = tst_qfilesystementry -QT = core-private testlib -SOURCES = tst_qfilesystementry.cpp \ - $$QT_SOURCE_TREE/src/corelib/io/qfilesystementry.cpp -HEADERS = $$QT_SOURCE_TREE/src/corelib/io/qfilesystementry_p.h diff --git a/tests/auto/corelib/io/qfilesystementry/tst_qfilesystementry.cpp b/tests/auto/corelib/io/qfilesystementry/tst_qfilesystementry.cpp index aed4895a47..b35d89cbf3 100644 --- a/tests/auto/corelib/io/qfilesystementry/tst_qfilesystementry.cpp +++ b/tests/auto/corelib/io/qfilesystementry/tst_qfilesystementry.cpp @@ -1,35 +1,12 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtTest/QtTest> +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QTest> #include <QtCore/private/qfilesystementry_p.h> +using namespace Qt::StringLiterals; + class tst_QFileSystemEntry : public QObject { Q_OBJECT @@ -104,6 +81,17 @@ void tst_QFileSystemEntry::getSetCheck_data() << QString("A:dir\\without\\leading\\backslash.bat") << absPrefix + QString("A:\\dir\\without\\leading\\backslash.bat") << "A:dir/without/leading/backslash.bat" << "backslash.bat" << "backslash" << "backslash" << "bat" << "bat" << false << false; + + QTest::newRow("longpath") + << uR"(\\?\D:\)"_s + << absPrefix + QLatin1String(R"(D:\)") + << "D:/" << "" << "" << "" << "" << "" << true << false; + + QTest::newRow("uncprefix") + << uR"(\\?\UNC\localhost\C$\tmp.txt)"_s + << absPrefix + QLatin1String(R"(UNC\localhost\C$\tmp.txt)") + << "//localhost/C$/tmp.txt" << "tmp.txt" << "tmp" << "tmp" << "txt" << "txt" << true + << false; } void tst_QFileSystemEntry::getSetCheck() @@ -137,7 +125,7 @@ void tst_QFileSystemEntry::getSetCheck() QCOMPARE(entry2.isRelative(), relative); QCOMPARE(entry2.filePath(), filepath); // Since this entry was created using the native path, - // the object shouldnot change nativeFilePath. + // the object shouldn't change nativeFilePath. QCOMPARE(entry2.nativeFilePath(), nativeFilePath); QCOMPARE(entry2.fileName(), filename); QCOMPARE(entry2.baseName(), baseName); diff --git a/tests/auto/corelib/io/qfilesystemmetadata/CMakeLists.txt b/tests/auto/corelib/io/qfilesystemmetadata/CMakeLists.txt new file mode 100644 index 0000000000..cf9f647eda --- /dev/null +++ b/tests/auto/corelib/io/qfilesystemmetadata/CMakeLists.txt @@ -0,0 +1,19 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qfilesystemmetadata Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qfilesystemmetadata LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +qt_internal_add_test(tst_qfilesystemmetadata + SOURCES + tst_qfilesystemmetadata.cpp + LIBRARIES + Qt::CorePrivate +) diff --git a/tests/auto/corelib/io/qfilesystemmetadata/qfilesystemmetadata.pro b/tests/auto/corelib/io/qfilesystemmetadata/qfilesystemmetadata.pro deleted file mode 100644 index a7d50ece43..0000000000 --- a/tests/auto/corelib/io/qfilesystemmetadata/qfilesystemmetadata.pro +++ /dev/null @@ -1,4 +0,0 @@ -CONFIG += testcase parallel_test -TARGET = tst_qfilesystemmetadata -QT = core-private testlib -SOURCES = tst_qfilesystemmetadata.cpp diff --git a/tests/auto/corelib/io/qfilesystemmetadata/tst_qfilesystemmetadata.cpp b/tests/auto/corelib/io/qfilesystemmetadata/tst_qfilesystemmetadata.cpp index ea4da39cd5..9ec49999ca 100644 --- a/tests/auto/corelib/io/qfilesystemmetadata/tst_qfilesystemmetadata.cpp +++ b/tests/auto/corelib/io/qfilesystemmetadata/tst_qfilesystemmetadata.cpp @@ -1,32 +1,8 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2017 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only -#include <QtTest/QtTest> +#include <QTest> +#include <QtCore/QDateTime> #include <QtCore/private/qfilesystemmetadata_p.h> class tst_QFileSystemMetaData : public QObject @@ -67,14 +43,14 @@ void tst_QFileSystemMetaData::timeSinceEpoch() data.ftCreationTime = epochToFileTime(afterEpochUtc); meta.fillFromFindData(data); QCOMPARE(meta.birthTime().toUTC(), - QDateTime::fromMSecsSinceEpoch(afterEpochUtc * qint64(1000), Qt::UTC)); + QDateTime::fromMSecsSinceEpoch(afterEpochUtc * qint64(1000), QTimeZone::UTC)); #else QT_STATBUF data; memset(&data, 0, sizeof(data)); data.st_ctime = afterEpochUtc; meta.fillFromStatBuf(data); QCOMPARE(meta.metadataChangeTime().toUTC(), - QDateTime::fromMSecsSinceEpoch(afterEpochUtc * qint64(1000), Qt::UTC)); + QDateTime::fromMSecsSinceEpoch(afterEpochUtc * qint64(1000), QTimeZone::UTC)); #endif } #else // i.e. no Q_AUTOTEST_EXPORT diff --git a/tests/auto/corelib/io/qfilesystemwatcher/BLACKLIST b/tests/auto/corelib/io/qfilesystemwatcher/BLACKLIST index 457499591d..3b59c6477a 100644 --- a/tests/auto/corelib/io/qfilesystemwatcher/BLACKLIST +++ b/tests/auto/corelib/io/qfilesystemwatcher/BLACKLIST @@ -1,10 +1,15 @@ # QTBUG-33574 QTBUG-30943 [signalsEmittedAfterFileMoved] -windows-7sp1 -windows-10 +windows [watchFileAndItsDirectory:native backend-testfile] osx windows [watchFileAndItsDirectory:native backend-specialchars] osx windows +# QTBUG-102095 +[watchDirectory] +macos arm ci +# QTBUG-102096 +[signalsEmittedAfterFileMoved] +macos arm ci diff --git a/tests/auto/corelib/io/qfilesystemwatcher/CMakeLists.txt b/tests/auto/corelib/io/qfilesystemwatcher/CMakeLists.txt new file mode 100644 index 0000000000..0a48155895 --- /dev/null +++ b/tests/auto/corelib/io/qfilesystemwatcher/CMakeLists.txt @@ -0,0 +1,17 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qfilesystemwatcher Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qfilesystemwatcher LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +qt_internal_add_test(tst_qfilesystemwatcher + SOURCES + tst_qfilesystemwatcher.cpp +) diff --git a/tests/auto/corelib/io/qfilesystemwatcher/qfilesystemwatcher.pro b/tests/auto/corelib/io/qfilesystemwatcher/qfilesystemwatcher.pro deleted file mode 100644 index 46dd70289b..0000000000 --- a/tests/auto/corelib/io/qfilesystemwatcher/qfilesystemwatcher.pro +++ /dev/null @@ -1,4 +0,0 @@ -CONFIG += testcase -TARGET = tst_qfilesystemwatcher -QT = core testlib -SOURCES = tst_qfilesystemwatcher.cpp diff --git a/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp b/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp index 7d88601e54..184eef3f15 100644 --- a/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp +++ b/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp @@ -1,31 +1,7 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include <QtTest/QtTest> +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QTest> #include <QCoreApplication> @@ -33,9 +9,35 @@ #include <QFileSystemWatcher> #include <QElapsedTimer> #include <QTextStream> +#include <QMap> +#include <QString> #include <QDir> -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) -#include <windows.h> +#include <QSignalSpy> +#include <QTimer> +#include <QTemporaryFile> +#if defined(Q_OS_WIN) +#include <qt_windows.h> +#endif + +#ifdef Q_OS_ANDROID +#include <QStandardPaths> +#endif + +using namespace std::chrono_literals; + +#if defined(Q_OS_QNX) +constexpr bool isQNX = true; +#else +constexpr bool isQNX = false; +#endif + +#if defined(Q_OS_QNX) || defined(Q_OS_VXWORKS) +// Longer polling times on QNX and VxWorks, otherwise the tests fail on the CI +constexpr auto nativeEngineTimeout = 1s; +constexpr auto pollingEngineTimeout = 1s; +#else +constexpr auto nativeEngineTimeout = 0ms; +constexpr auto pollingEngineTimeout = 20ms; #endif /* All tests need to run in temporary directories not used @@ -82,7 +84,7 @@ private slots: void signalsEmittedAfterFileMoved(); void watchUnicodeCharacters(); -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) void watchDirectoryAttributeChanges(); #endif @@ -97,7 +99,7 @@ tst_QFileSystemWatcher::tst_QFileSystemWatcher() m_tempDirPattern += QLatin1Char('/'); m_tempDirPattern += QStringLiteral("tst_qfilesystemwatcherXXXXXX"); -#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED) +#ifdef Q_OS_ANDROID QDir::setCurrent(QStandardPaths::writableLocation(QStandardPaths::CacheLocation)); #endif } @@ -117,7 +119,7 @@ void tst_QFileSystemWatcher::basicTest_data() + QChar(ushort(0x00DC)) // LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS + QStringLiteral(".txt"); -#if !defined(Q_OS_QNX) || !defined(QT_NO_INOTIFY) +#if !defined(QT_NO_INOTIFY) QTest::newRow("native backend-testfile") << "native" << testFile; QTest::newRow("native backend-specialchars") << "native" << specialCharacterFile; #endif @@ -145,26 +147,27 @@ void tst_QFileSystemWatcher::basicTest() watcher.setObjectName(QLatin1String("_qt_autotest_force_engine_") + backend); QVERIFY(watcher.addPath(testFile.fileName())); + const bool isPollerBackend = backend == u"poller"; + QSignalSpy changedSpy(&watcher, &QFileSystemWatcher::fileChanged); QVERIFY(changedSpy.isValid()); QEventLoop eventLoop; QTimer timer; + timer.setInterval(isPollerBackend ? pollingEngineTimeout : nativeEngineTimeout); connect(&timer, SIGNAL(timeout()), &eventLoop, SLOT(quit())); // modify the file, should get a signal from the watcher - // resolution of the modification time is system dependent, but it's at most 1 second when using - // the polling engine. I've heard rumors that FAT32 has a 2 second resolution. So, we have to - // wait a bit before we can modify the file (hrmph)... - QTest::qWait(2000); + if (isPollerBackend || isQNX) + QTest::qWait(pollingEngineTimeout); - testFile.open(QIODevice::WriteOnly | QIODevice::Append); + QVERIFY(testFile.open(QIODevice::WriteOnly | QIODevice::Append)); testFile.write(QByteArray("world")); testFile.close(); // waiting max 5 seconds for notification for file modification to trigger - QTRY_COMPARE(changedSpy.count(), 1); - QCOMPARE(changedSpy.at(0).count(), 1); + QTRY_COMPARE(changedSpy.size(), 1); + QCOMPARE(changedSpy.at(0).size(), 1); QString fileName = changedSpy.at(0).at(0).toString(); QCOMPARE(fileName, testFile.fileName()); @@ -173,25 +176,25 @@ void tst_QFileSystemWatcher::basicTest() // remove the watch and modify the file, should not get a signal from the watcher QVERIFY(watcher.removePath(testFile.fileName())); - testFile.open(QIODevice::WriteOnly | QIODevice::Truncate); + QVERIFY(testFile.open(QIODevice::WriteOnly | QIODevice::Truncate)); testFile.write(QByteArray("hello universe!")); testFile.close(); - // waiting max 5 seconds for notification for file modification to trigger - timer.start(5000); + // waiting for notification for file modification to trigger + timer.start(); eventLoop.exec(); - QCOMPARE(changedSpy.count(), 0); + QCOMPARE(changedSpy.size(), 0); // readd the file watch with a relative path const QString relativeTestFileName = QDir::current().relativeFilePath(testFile.fileName()); QVERIFY(!relativeTestFileName.isEmpty()); QVERIFY(watcher.addPath(relativeTestFileName)); - testFile.open(QIODevice::WriteOnly | QIODevice::Truncate); + QVERIFY(testFile.open(QIODevice::WriteOnly | QIODevice::Truncate)); testFile.write(QByteArray("hello multiverse!")); testFile.close(); - QTRY_VERIFY(changedSpy.count() > 0); + QTRY_VERIFY(changedSpy.size() > 0); QVERIFY(watcher.removePath(relativeTestFileName)); @@ -207,8 +210,8 @@ void tst_QFileSystemWatcher::basicTest() #if !defined(Q_OS_QNX) // waiting max 5 seconds for notification for file permission modification to trigger - QTRY_COMPARE(changedSpy.count(), 1); - QCOMPARE(changedSpy.at(0).count(), 1); + QTRY_COMPARE(changedSpy.size(), 1); + QCOMPARE(changedSpy.at(0).size(), 1); fileName = changedSpy.at(0).at(0).toString(); QCOMPARE(fileName, testFile.fileName()); @@ -221,11 +224,11 @@ void tst_QFileSystemWatcher::basicTest() QVERIFY(watcher.removePath(testFile.fileName())); testFile.setPermissions(QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOther); - // waiting max 5 seconds for notification for file modification to trigger - timer.start(5000); + // waiting for notification for file modification to trigger + timer.start(); eventLoop.exec(); - QCOMPARE(changedSpy.count(), 0); + QCOMPARE(changedSpy.size(), 0); // readd the file watch QVERIFY(watcher.addPath(testFile.fileName())); @@ -236,8 +239,8 @@ void tst_QFileSystemWatcher::basicTest() // waiting max 5 seconds for notification for file removal to trigger // > 0 && < 3 because some platforms may emit two changes // XXX: which platforms? (QTBUG-23370) - QTRY_VERIFY(changedSpy.count() > 0 && changedSpy.count() < 3); - QCOMPARE(changedSpy.at(0).count(), 1); + QTRY_VERIFY(changedSpy.size() > 0 && changedSpy.size() < 3); + QCOMPARE(changedSpy.at(0).size(), 1); fileName = changedSpy.at(0).at(0).toString(); QCOMPARE(fileName, testFile.fileName()); @@ -249,11 +252,11 @@ void tst_QFileSystemWatcher::basicTest() testFile.write(QByteArray("hello")); testFile.close(); - // waiting max 5 seconds for notification for file recreation to trigger - timer.start(5000); + // waiting for notification for file recreation to trigger + timer.start(); eventLoop.exec(); - QCOMPARE(changedSpy.count(), 0); + QCOMPARE(changedSpy.size(), 0); QVERIFY(testFile.remove()); } @@ -264,7 +267,9 @@ void tst_QFileSystemWatcher::watchDirectory_data() QTest::addColumn<QStringList>("testDirNames"); const QStringList testDirNames = {QStringLiteral("testdir"), QStringLiteral("testdir2")}; +#if !defined(QT_NO_INOTIFY) QTest::newRow("native backend") << "native" << testDirNames; +#endif QTest::newRow("poller backend") << "poller" << testDirNames; } @@ -295,16 +300,18 @@ void tst_QFileSystemWatcher::watchDirectory() watcher.setObjectName(QLatin1String("_qt_autotest_force_engine_") + backend); QVERIFY(watcher.addPaths(testDirs).isEmpty()); + const bool isPollerBackend = backend == u"poller"; + QSignalSpy changedSpy(&watcher, &QFileSystemWatcher::directoryChanged); QVERIFY(changedSpy.isValid()); QEventLoop eventLoop; QTimer timer; + timer.setInterval(isPollerBackend ? pollingEngineTimeout : nativeEngineTimeout); connect(&timer, SIGNAL(timeout()), &eventLoop, SLOT(quit())); - // resolution of the modification time is system dependent, but it's at most 1 second when using - // the polling engine. From what I know, FAT32 has a 2 second resolution. So we have to - // wait before modifying the directory... - QTest::qWait(2000); + if (isPollerBackend || isQNX) + QTest::qWait(pollingEngineTimeout); + // remove the watch, should not get notification of a new file QVERIFY(watcher.removePaths(testDirs).isEmpty()); for (const auto &testFileName : testFiles) { @@ -313,11 +320,11 @@ void tst_QFileSystemWatcher::watchDirectory() testFile.close(); } - // waiting max 5 seconds for notification for file recreationg to trigger - timer.start(5000); + // waiting for notification for file recreation to trigger + timer.start(); eventLoop.exec(); - QCOMPARE(changedSpy.count(), 0); + QCOMPARE(changedSpy.size(), 0); QVERIFY(watcher.addPaths(testDirs).isEmpty()); @@ -325,7 +332,7 @@ void tst_QFileSystemWatcher::watchDirectory() for (const auto &testFileName : testFiles) QVERIFY(QFile::remove(testFileName)); - timer.start(5000); + timer.start(); eventLoop.exec(); // remove the directory, should get a signal from the watcher @@ -337,10 +344,10 @@ void tst_QFileSystemWatcher::watchDirectory() signalCounter[testDirName] = 0; // waiting max 5 seconds for notification for directory removal to trigger - QTRY_COMPARE(changedSpy.count(), testDirs.size() * 2); - for (int i = 0; i < changedSpy.count(); i++) { + QTRY_COMPARE(changedSpy.size(), testDirs.size() * 2); + for (int i = 0; i < changedSpy.size(); i++) { const auto &signal = changedSpy.at(i); - QCOMPARE(signal.count(), 1); + QCOMPARE(signal.size(), 1); auto it = signalCounter.find(signal.at(0).toString()); QVERIFY(it != signalCounter.end()); @@ -352,7 +359,7 @@ void tst_QFileSystemWatcher::watchDirectory() QCOMPARE(count, 2); // flush pending signals (like the one from the rmdir above) - timer.start(5000); + timer.start(); eventLoop.exec(); changedSpy.clear(); @@ -364,11 +371,11 @@ void tst_QFileSystemWatcher::watchDirectory() } } - // waiting max 5 seconds for notification for dir recreation to trigger - timer.start(5000); + // waiting for notification for dir recreation to trigger + timer.start(); eventLoop.exec(); - QCOMPARE(changedSpy.count(), 0); + QCOMPARE(changedSpy.size(), 0); for (const auto &testDirName : testDirs) QVERIFY(temporaryDir.rmdir(testDirName)); @@ -380,12 +387,12 @@ void tst_QFileSystemWatcher::addPath() QFileSystemWatcher watcher; QString home = QDir::homePath(); QVERIFY(watcher.addPath(home)); - QCOMPARE(watcher.directories().count(), 1); + QCOMPARE(watcher.directories().size(), 1); QCOMPARE(watcher.directories().first(), home); // second watch on an already-watched path should fail QVERIFY(!watcher.addPath(home)); - QCOMPARE(watcher.directories().count(), 1); + QCOMPARE(watcher.directories().size(), 1); // With empty string QTest::ignoreMessage(QtWarningMsg, "QFileSystemWatcher::addPath: path is empty"); @@ -398,9 +405,9 @@ void tst_QFileSystemWatcher::removePath() QString home = QDir::homePath(); QVERIFY(watcher.addPath(home)); QVERIFY(watcher.removePath(home)); - QCOMPARE(watcher.directories().count(), 0); + QCOMPARE(watcher.directories().size(), 0); QVERIFY(!watcher.removePath(home)); - QCOMPARE(watcher.directories().count(), 0); + QCOMPARE(watcher.directories().size(), 0); // With empty string QTest::ignoreMessage(QtWarningMsg, "QFileSystemWatcher::removePath: path is empty"); @@ -411,9 +418,15 @@ void tst_QFileSystemWatcher::addPaths() { QFileSystemWatcher watcher; QStringList paths; - paths << QDir::homePath() << QDir::currentPath(); + paths << QDir::homePath() << QDir::tempPath(); +#ifndef Q_OS_QNX + // Adding this makes QNX fail and we haven't investigated why + for (const QFileInfo &fi : QDir::drives()) + paths << fi.absoluteFilePath(); // on Unix, this will be just "/" +#endif + QCOMPARE(watcher.addPaths(paths), QStringList()); - QCOMPARE(watcher.directories().count(), 2); + QCOMPARE(watcher.directories().size(), paths.size()); // With empty list paths.clear(); @@ -479,11 +492,17 @@ void tst_QFileSystemWatcher::removePaths() { QFileSystemWatcher watcher; QStringList paths; - paths << QDir::homePath() << QDir::currentPath(); + paths << QDir::homePath() << QDir::tempPath(); +#ifndef Q_OS_QNX + // Adding this makes QNX fail and we haven't investigated why + for (const QFileInfo &fi : QDir::drives()) + paths << fi.absoluteFilePath(); // on Unix, this will be just "/" +#endif + QCOMPARE(watcher.addPaths(paths), QStringList()); - QCOMPARE(watcher.directories().count(), 2); + QCOMPARE(watcher.directories().size(), paths.size()); QCOMPARE(watcher.removePaths(paths), QStringList()); - QCOMPARE(watcher.directories().count(), 0); + QCOMPARE(watcher.directories().size(), 0); //With empty list paths.clear(); @@ -551,28 +570,29 @@ void tst_QFileSystemWatcher::watchFileAndItsDirectory() QVERIFY(watcher.addPath(testDir.absolutePath())); QVERIFY(watcher.addPath(testFileName)); + const bool isPollerBackend = backend == u"poller"; + QSignalSpy fileChangedSpy(&watcher, &QFileSystemWatcher::fileChanged); FileSystemWatcherSpy dirChangedSpy(&watcher, FileSystemWatcherSpy::SpyOnDirectoryChanged); QVERIFY(fileChangedSpy.isValid()); QEventLoop eventLoop; QTimer timer; + timer.setInterval(isPollerBackend ? pollingEngineTimeout : nativeEngineTimeout); connect(&timer, SIGNAL(timeout()), &eventLoop, SLOT(quit())); - // resolution of the modification time is system dependent, but it's at most 1 second when using - // the polling engine. From what I know, FAT32 has a 2 second resolution. So we have to - // wait before modifying the directory... - QTest::qWait(2000); + if (isPollerBackend || isQNX) + QTest::qWait(pollingEngineTimeout); QVERIFY2(testFile.open(QIODevice::WriteOnly | QIODevice::Truncate), msgFileOperationFailed("open", testFile)); QVERIFY2(testFile.write(QByteArrayLiteral("hello again")), msgFileOperationFailed("write", testFile)); testFile.close(); -#ifdef Q_OS_MAC +#ifdef Q_OS_DARWIN // wait again for the file's atime to be updated QTest::qWait(2000); #endif - QTRY_VERIFY(fileChangedSpy.count() > 0); + QTRY_VERIFY(fileChangedSpy.size() > 0); QVERIFY2(dirChangedSpy.count() == 0, dirChangedSpy.receivedFilesMessage()); fileChangedSpy.clear(); @@ -581,9 +601,9 @@ void tst_QFileSystemWatcher::watchFileAndItsDirectory() QVERIFY2(secondFile.write(QByteArrayLiteral("Foo")) > 0, msgFileOperationFailed("write", secondFile)); secondFile.close(); - timer.start(3000); + timer.start(); eventLoop.exec(); - int fileChangedSpyCount = fileChangedSpy.count(); + int fileChangedSpyCount = fileChangedSpy.size(); #ifdef Q_OS_WIN if (fileChangedSpyCount != 0) QEXPECT_FAIL("", "See QTBUG-30943", Continue); @@ -595,7 +615,7 @@ void tst_QFileSystemWatcher::watchFileAndItsDirectory() QVERIFY(QFile::remove(testFileName)); - QTRY_VERIFY(fileChangedSpy.count() > 0); + QTRY_VERIFY(fileChangedSpy.size() > 0); QTRY_COMPARE(dirChangedSpy.count(), 1); fileChangedSpy.clear(); @@ -605,9 +625,9 @@ void tst_QFileSystemWatcher::watchFileAndItsDirectory() QVERIFY(!watcher.removePath(testFileName)); QVERIFY(QFile::remove(secondFileName)); - timer.start(3000); + timer.start(); eventLoop.exec(); - QCOMPARE(fileChangedSpy.count(), 0); + QCOMPARE(fileChangedSpy.size(), 0); QCOMPARE(dirChangedSpy.count(), 1); // QTBUG-61792, removal should succeed (bug on Windows which uses one change @@ -629,9 +649,11 @@ void tst_QFileSystemWatcher::nonExistingFile() QStringList() << "../..//./does-not-exist"); // empty path is not actually a failure + QTest::ignoreMessage(QtWarningMsg, "QFileSystemWatcher::addPaths: list is empty"); QCOMPARE(watcher.addPaths(QStringList() << QString()), QStringList()); // empty path is not actually a failure + QTest::ignoreMessage(QtWarningMsg, "QFileSystemWatcher::removePaths: list is empty"); QCOMPARE(watcher.removePaths(QStringList() << QString()), QStringList()); } @@ -710,7 +732,7 @@ void tst_QFileSystemWatcher::QTBUG2331() // remove directory, we should get one change signal, and we should no longer // be watching the directory. QVERIFY(temporaryDirectory.remove()); - QTRY_COMPARE(changedSpy.count(), 1); + QTRY_COMPARE(changedSpy.size(), 1); QCOMPARE(watcher.directories(), QStringList()); } #endif // QT_BUILD_INTERNAL @@ -722,7 +744,7 @@ public: SignalReceiver(const QDir &moveSrcDir, const QString &moveDestination, QFileSystemWatcher *watcher, - QObject *parent = 0) + QObject *parent = nullptr) : QObject(parent), added(false), moveSrcDir(moveSrcDir), @@ -738,7 +760,8 @@ public slots: QCOMPARE(finfo.absolutePath(), moveSrcDir.absolutePath()); if (!added) { - foreach (const QFileInfo &fi, moveDestination.entryInfoList(QDir::Files | QDir::NoSymLinks)) + const auto entries = moveDestination.entryInfoList(QDir::Files | QDir::NoSymLinks); + for (const QFileInfo &fi : entries) watcher->addPath(fi.absoluteFilePath()); added = true; } @@ -778,9 +801,9 @@ void tst_QFileSystemWatcher::signalsEmittedAfterFileMoved() QVERIFY(watcher.addPath(movePath)); // add files to watcher - QFileInfoList files = testDir.entryInfoList(QDir::Files | QDir::NoSymLinks); + const QFileInfoList files = testDir.entryInfoList(QDir::Files | QDir::NoSymLinks); QCOMPARE(files.size(), fileCount); - foreach (const QFileInfo &finfo, files) + for (const QFileInfo &finfo : files) QVERIFY(watcher.addPath(finfo.absoluteFilePath())); // create the signal receiver @@ -792,7 +815,7 @@ void tst_QFileSystemWatcher::signalsEmittedAfterFileMoved() QCOMPARE(changedSpy.count(), 0); // move files to second directory - foreach (const QFileInfo &finfo, files) + for (const QFileInfo &finfo : files) QVERIFY(testDir.rename(finfo.fileName(), QString("movehere/%2").arg(finfo.fileName()))); QCoreApplication::processEvents(); @@ -819,7 +842,7 @@ void tst_QFileSystemWatcher::watchUnicodeCharacters() QTRY_COMPARE(changedSpy.count(), 1); } -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) void tst_QFileSystemWatcher::watchDirectoryAttributeChanges() { QTemporaryDir temporaryDirectory(m_tempDirPattern); diff --git a/tests/auto/corelib/io/qfloat16format/CMakeLists.txt b/tests/auto/corelib/io/qfloat16format/CMakeLists.txt new file mode 100644 index 0000000000..88c47d8de3 --- /dev/null +++ b/tests/auto/corelib/io/qfloat16format/CMakeLists.txt @@ -0,0 +1,23 @@ +# Copyright (C) 2024 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qfloat16format LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +set(CMAKE_OSX_DEPLOYMENT_TARGET 13.3) + +qt_internal_add_test(tst_qfloat16format + SOURCES + tst_qfloat16format.cpp +) + +if(NOT VXWORKS) + set_target_properties(tst_qfloat16format + PROPERTIES + CXX_STANDARD 20 + CXX_STANDARD_REQUIRED OFF + ) +endif() diff --git a/tests/auto/corelib/io/qfloat16format/tst_qfloat16format.cpp b/tests/auto/corelib/io/qfloat16format/tst_qfloat16format.cpp new file mode 100644 index 0000000000..ea07b327af --- /dev/null +++ b/tests/auto/corelib/io/qfloat16format/tst_qfloat16format.cpp @@ -0,0 +1,157 @@ +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QTest> + +#include <QtCore/qcompilerdetection.h> +#include <QtCore/qdebug.h> +#include <QtCore/qfloat16format.h> +#include <QtCore/qstring.h> + +using namespace Qt::StringLiterals; + +class tst_QFloat16Format : public QObject +{ + Q_OBJECT + +private slots: + void initTestCase(); + void formatCompileTime(); + void format_data(); + void format(); + void formatMultiArg(); +}; + +void tst_QFloat16Format::initTestCase() +{ +#ifndef QT_SUPPORTS_STD_FORMAT + QSKIP("This test requires std::format support!"); +#endif +} + +void tst_QFloat16Format::formatCompileTime() +{ +#ifdef QT_SUPPORTS_STD_FORMAT + // Starting from __cpp_lib_format == 202106L, + // std::format requires the format string to be evaluated at compile-time, + // so check it here. + + const qfloat16 val{1.234f}; + std::locale loc{"C"}; + + // char + std::string buffer; + std::format_to(std::back_inserter(buffer), "{}", val); + std::format_to(std::back_inserter(buffer), "{:*>15.7f}", val); + std::format_to(std::back_inserter(buffer), "{:*^+#15.7g}", val); + std::format_to(std::back_inserter(buffer), "{:*<-#15.7A}", val); + std::format_to(std::back_inserter(buffer), "{:*^ 15.7e}", val); + std::format_to(std::back_inserter(buffer), loc, "{:*^10.3Lf}", val); + std::format_to(std::back_inserter(buffer), loc, "{:*< 10.7LE}", val); + + // wchar_t + std::wstring wbuffer; + std::format_to(std::back_inserter(wbuffer), L"{}", val); + std::format_to(std::back_inserter(wbuffer), L"{:*>15.7f}", val); + std::format_to(std::back_inserter(wbuffer), L"{:*^+#15.7g}", val); + std::format_to(std::back_inserter(wbuffer), L"{:*<-#15.7A}", val); + std::format_to(std::back_inserter(wbuffer), L"{:*^ 15.7e}", val); + std::format_to(std::back_inserter(wbuffer), loc, L"{:*^10.3Lf}", val); + std::format_to(std::back_inserter(wbuffer), loc, L"{:*< 10.7LE}", val); +#endif // QT_SUPPORTS_STD_FORMAT +} + +void tst_QFloat16Format::format_data() +{ +#ifdef QT_SUPPORTS_STD_FORMAT + QTest::addColumn<QString>("format"); + QTest::addColumn<qfloat16>("value"); + QTest::addColumn<std::locale>("locale"); + QTest::addColumn<QString>("expectedString"); + + auto row = [](const QString &format, qfloat16 val, const QString &expected, + const std::locale &loc = std::locale::classic()) + { + QTest::addRow("%s:%s", loc.name().c_str(), qPrintable(format)) + << format << val << loc << expected; + }; + + row(u"{}"_s, qfloat16(1.f), u"1"_s); + row(u"{:#}"_s, qfloat16(1.f), u"1."_s); + row(u"{:f}"_s, qfloat16(1.f), u"1.000000"_s); + row(u"{:*>10.2a}"_s, qfloat16(-1.23f), u"**-1.3bp+0"_s); + + try { + // check if this locale is a) valid and b) works as expected +#if defined(Q_CC_MSVC) + std::locale loc("de-DE"); +#else + std::locale loc("de_DE"); +#endif + if (std::format(loc, "{:L}", 1.25) == "1,25") { + row(u"{:+Lf}"_s, qfloat16(1.f), u"+1,000000"_s, loc); + row(u"{:*^10.3LF}"_s, qfloat16(-0.1234f), u"**-0,123**"_s, loc); + row(u"{:*^#10.4Lg}"_s, qfloat16(-1.f), u"**-1,000**"_s, loc); + row(u"{:*<14.3LE}"_s, qfloat16(-0.1234f), u"-1,234E-01****"_s, loc); + } + } catch (const std::runtime_error &) { + // locale doesn't exist (std::locale constructor threw) + } +#endif // QT_SUPPORTS_STD_FORMAT +} + +void tst_QFloat16Format::format() +{ +#ifdef QT_SUPPORTS_STD_FORMAT + QFETCH(const QString, format); + QFETCH(const qfloat16, value); + QFETCH(const std::locale, locale); + QFETCH(const QString, expectedString); + + // char + { + std::string buffer; + const auto formatStr = format.toStdString(); + std::vformat_to(std::back_inserter(buffer), locale, formatStr, + std::make_format_args(value)); + const QString actualString = QString::fromStdString(buffer); + QCOMPARE_EQ(actualString, expectedString); + } + + // wchar_t + { + std::wstring buffer; + const auto formatStr = format.toStdWString(); + std::vformat_to(std::back_inserter(buffer), locale, formatStr, + std::make_wformat_args(value)); + const QString actualString = QString::fromStdWString(buffer); + QCOMPARE_EQ(actualString, expectedString); + } +#endif // QT_SUPPORTS_STD_FORMAT +} + +void tst_QFloat16Format::formatMultiArg() +{ +#ifdef QT_SUPPORTS_STD_FORMAT + const qfloat16 v1{-0.1234f}; + const qfloat16 v2{5.67f}; + + const QString expectedString = u"**+5.67**_*****-1.234E-01"_s; + // char + { + std::string buffer; + std::format_to(std::back_inserter(buffer), "{1:*^+9.2f}_{0:*>15.3E}", v1, v2); + QCOMPARE_EQ(QString::fromStdString(buffer), expectedString); + } + + // wchar_t + { + std::wstring buffer; + std::format_to(std::back_inserter(buffer), L"{1:*^+9.2f}_{0:*>15.3E}", v1, v2); + QCOMPARE_EQ(QString::fromStdWString(buffer), expectedString); + } +#endif // QT_SUPPORTS_STD_FORMAT +} + +QTEST_MAIN(tst_QFloat16Format) +#include "tst_qfloat16format.moc" diff --git a/tests/auto/corelib/io/qiodevice/BLACKLIST b/tests/auto/corelib/io/qiodevice/BLACKLIST deleted file mode 100644 index b8a61d3ca9..0000000000 --- a/tests/auto/corelib/io/qiodevice/BLACKLIST +++ /dev/null @@ -1,2 +0,0 @@ -[unget] -redhatenterpriselinuxworkstation-6.6 diff --git a/tests/auto/corelib/io/qiodevice/CMakeLists.txt b/tests/auto/corelib/io/qiodevice/CMakeLists.txt new file mode 100644 index 0000000000..18cae40663 --- /dev/null +++ b/tests/auto/corelib/io/qiodevice/CMakeLists.txt @@ -0,0 +1,24 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qiodevice Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qiodevice LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +# Collect test data +list(APPEND test_data "tst_qiodevice.cpp") + +qt_internal_add_test(tst_qiodevice + SOURCES + tst_qiodevice.cpp + LIBRARIES + Qt::Network + TESTDATA ${test_data} + QT_TEST_SERVER_LIST "apache2" "cyrus" +) diff --git a/tests/auto/corelib/io/qiodevice/qiodevice.pro b/tests/auto/corelib/io/qiodevice/qiodevice.pro deleted file mode 100644 index 1c978953d6..0000000000 --- a/tests/auto/corelib/io/qiodevice/qiodevice.pro +++ /dev/null @@ -1,12 +0,0 @@ -CONFIG += testcase -TARGET = tst_qiodevice -QT = core network testlib -SOURCES = tst_qiodevice.cpp - -TESTDATA += tst_qiodevice.cpp -MOC_DIR=tmp - -android:!android-embedded { - RESOURCES += \ - android_testdata.qrc -} diff --git a/tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp b/tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp index da5327594c..ad88d14bc9 100644 --- a/tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp +++ b/tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp @@ -1,34 +1,9 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QtCore/QCoreApplication> #include <QtNetwork/QtNetwork> -#include <QtTest/QtTest> +#include <QTest> #include "../../../network-settings.h" @@ -70,7 +45,7 @@ private: void tst_QIODevice::initTestCase() { -#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED) +#ifdef Q_OS_ANDROID QVERIFY(QFileInfo(QStringLiteral("./tst_qiodevice.cpp")).exists() || QFile::copy(QStringLiteral(":/tst_qiodevice.cpp"), QStringLiteral("./tst_qiodevice.cpp"))); #endif @@ -104,18 +79,20 @@ void tst_QIODevice::getSetCheck() //---------------------------------------------------------------------------------- void tst_QIODevice::constructing_QTcpSocket() { -#if defined(Q_OS_WINRT) - QSKIP("Synchronous socket calls are broken on winrt. See QTBUG-40922"); -#endif +#ifdef QT_TEST_SERVER + if (!QtNetworkSettings::verifyConnection(QtNetworkSettings::imapServerName(), 143)) + QSKIP("No network test server available"); +#else if (!QtNetworkSettings::verifyTestNetworkSettings()) QSKIP("No network test server available"); +#endif QTcpSocket socket; QIODevice *device = &socket; QVERIFY(!device->isOpen()); - socket.connectToHost(QtNetworkSettings::serverName(), 143); + socket.connectToHost(QtNetworkSettings::imapServerName(), 143); QVERIFY(socket.waitForConnected(30000)); QVERIFY(device->isOpen()); QCOMPARE(device->readChannelCount(), 1); @@ -133,7 +110,7 @@ void tst_QIODevice::constructing_QTcpSocket() socket.close(); QCOMPARE(socket.readChannelCount(), 0); QCOMPARE(socket.writeChannelCount(), 0); - socket.connectToHost(QtNetworkSettings::serverName(), 143); + socket.connectToHost(QtNetworkSettings::imapServerName(), 143); QVERIFY(socket.waitForConnected(30000)); QVERIFY(device->isOpen()); @@ -194,16 +171,16 @@ void tst_QIODevice::constructing_QFile() void tst_QIODevice::read_QByteArray() { QFile f(QFINDTESTDATA("tst_qiodevice.cpp")); - f.open(QIODevice::ReadOnly); + QVERIFY(f.open(QIODevice::ReadOnly)); QByteArray b = f.read(10); - QCOMPARE(b.length(), 10); + QCOMPARE(b.size(), 10); b = f.read(256); - QCOMPARE(b.length(), 256); + QCOMPARE(b.size(), 256); b = f.read(0); - QCOMPARE(b.length(), 0); + QCOMPARE(b.size(), 0); } //-------------------------------------------------------------------- @@ -263,9 +240,6 @@ void tst_QIODevice::unget() buffer.ungetChar('Q'); QCOMPARE(buffer.readLine(buf, 3), qint64(1)); -#if defined(Q_OS_WINRT) - QSKIP("Synchronous socket calls are broken on winrt. See QTBUG-40922"); -#endif for (int i = 0; i < 2; ++i) { QTcpSocket socket; QIODevice *dev; @@ -276,9 +250,17 @@ void tst_QIODevice::unget() result = QByteArray("ZXCV"); lineResult = "ZXCV"; } else { - if (!QtNetworkSettings::verifyTestNetworkSettings()) - QSKIP("No network test server available"); - socket.connectToHost(QtNetworkSettings::serverName(), 80); +#ifdef QT_TEST_SERVER + const bool hasNetworkServer = + QtNetworkSettings::verifyConnection(QtNetworkSettings::httpServerName(), 80); +#else + const bool hasNetworkServer = QtNetworkSettings::verifyTestNetworkSettings(); +#endif + if (!hasNetworkServer) { + qInfo("No network test server: skipping QTcpSocket part of test."); + continue; + } + socket.connectToHost(QtNetworkSettings::httpServerName(), 80); socket.write("GET / HTTP/1.0\r\n\r\n"); QVERIFY(socket.waitForReadyRead()); dev = &socket; @@ -413,6 +395,9 @@ void tst_QIODevice::readLine() QVERIFY(buffer.open(QIODevice::ReadWrite)); QVERIFY(buffer.canReadLine()); + QTest::ignoreMessage(QtWarningMsg, "QIODevice::readLine (QBuffer): Called with maxSize < 2"); + QCOMPARE(buffer.readLine(nullptr, 0), qint64(-1)); + int linelen = data.indexOf('\n') + 1; QByteArray line; line.reserve(linelen + 100); @@ -561,7 +546,8 @@ protected: qint64 readData(char *data, qint64 maxSize) override { maxSize = qMin(maxSize, qint64(buf->size() - offset)); - memcpy(data, buf->constData() + offset, maxSize); + if (maxSize > 0) + memcpy(data, buf->constData() + offset, maxSize); offset += maxSize; return maxSize; } @@ -604,13 +590,15 @@ protected: qint64 readData(char *data, qint64 maxSize) override { maxSize = qMin(maxSize, qint64(buf.size() - pos())); - memcpy(data, buf.constData() + pos(), maxSize); + if (maxSize > 0) + memcpy(data, buf.constData() + pos(), maxSize); return maxSize; } qint64 writeData(const char *data, qint64 maxSize) override { maxSize = qMin(maxSize, qint64(buf.size() - pos())); - memcpy(buf.data() + pos(), data, maxSize); + if (maxSize > 0) + memcpy(buf.data() + pos(), data, maxSize); return maxSize; } @@ -652,11 +640,12 @@ void tst_QIODevice::skip_data() do { QByteArray devName(sequential ? "sequential" : "random-access"); - QTest::newRow(qPrintable(devName + "-small_data")) << true << QByteArray("abcdefghij") + QTest::newRow(qPrintable(devName + "-small_data")) << sequential + << QByteArray("abcdefghij") << 3 << 6 << 6 << 'j'; - QTest::newRow(qPrintable(devName + "-big_data")) << true << bigData + QTest::newRow(qPrintable(devName + "-big_data")) << sequential << bigData << 1 << 10000 << 10000 << 'x'; - QTest::newRow(qPrintable(devName + "-beyond_the_end")) << true << bigData + QTest::newRow(qPrintable(devName + "-beyond_the_end")) << sequential << bigData << 1 << 20000 << 19999 << '\0'; sequential = !sequential; diff --git a/tests/auto/corelib/io/qipaddress/CMakeLists.txt b/tests/auto/corelib/io/qipaddress/CMakeLists.txt new file mode 100644 index 0000000000..c57ef52c1d --- /dev/null +++ b/tests/auto/corelib/io/qipaddress/CMakeLists.txt @@ -0,0 +1,19 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qipaddress Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qipaddress LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +qt_internal_add_test(tst_qipaddress + SOURCES + tst_qipaddress.cpp + LIBRARIES + Qt::CorePrivate +) diff --git a/tests/auto/corelib/io/qipaddress/qipaddress.pro b/tests/auto/corelib/io/qipaddress/qipaddress.pro deleted file mode 100644 index 9c769052ed..0000000000 --- a/tests/auto/corelib/io/qipaddress/qipaddress.pro +++ /dev/null @@ -1,4 +0,0 @@ -SOURCES += tst_qipaddress.cpp -TARGET = tst_qipaddress -QT = core core-private testlib -CONFIG += testcase diff --git a/tests/auto/corelib/io/qipaddress/tst_qipaddress.cpp b/tests/auto/corelib/io/qipaddress/tst_qipaddress.cpp index d41efa18f5..c0a738e22d 100644 --- a/tests/auto/corelib/io/qipaddress/tst_qipaddress.cpp +++ b/tests/auto/corelib/io/qipaddress/tst_qipaddress.cpp @@ -1,33 +1,10 @@ -/**************************************************************************** -** -** Copyright (C) 2016 Intel Corporation. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 Intel Corporation. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#define _CRT_SECURE_NO_WARNINGS 1 #include <QtCore/QString> -#include <QtTest/QtTest> +#include <QTest> #include <QtCore/private/qipaddress_p.h> #ifdef __GLIBC__ @@ -93,7 +70,7 @@ namespace QTest { char *toString(const Ip6 &ip6) { char buf[sizeof "1111:2222:3333:4444:5555:6666:7777:8888" + 2]; - sprintf(buf, "%x:%x:%x:%x:%x:%x:%x:%x", + snprintf(buf, sizeof(buf), "%x:%x:%x:%x:%x:%x:%x:%x", ip6.u8[0] << 8 | ip6.u8[1], ip6.u8[2] << 8 | ip6.u8[3], ip6.u8[4] << 8 | ip6.u8[5], diff --git a/tests/auto/corelib/io/qlockfile/CMakeLists.txt b/tests/auto/corelib/io/qlockfile/CMakeLists.txt new file mode 100644 index 0000000000..1dda272d52 --- /dev/null +++ b/tests/auto/corelib/io/qlockfile/CMakeLists.txt @@ -0,0 +1,33 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qlockfile Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qlockfile LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +qt_internal_add_test(tst_qlockfile + SOURCES + tst_qlockfile.cpp + LIBRARIES + Qt::Concurrent + Qt::CorePrivate +) + +## Scopes: +##################################################################### + +qt_internal_extend_target(tst_qlockfile CONDITION WIN32 + LIBRARIES + advapi32 +) +add_subdirectory(qlockfiletesthelper) + +if(QT_FEATURE_process AND NOT ANDROID) + add_dependencies(tst_qlockfile qlockfile_test_helper) +endif() diff --git a/tests/auto/corelib/io/qlockfile/qlockfile.pro b/tests/auto/corelib/io/qlockfile/qlockfile.pro deleted file mode 100644 index 91f104305c..0000000000 --- a/tests/auto/corelib/io/qlockfile/qlockfile.pro +++ /dev/null @@ -1,3 +0,0 @@ -TEMPLATE = subdirs - -SUBDIRS += tst_qlockfile.pro qlockfiletesthelper/qlockfile_test_helper.pro diff --git a/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/CMakeLists.txt b/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/CMakeLists.txt new file mode 100644 index 0000000000..c8bde9d606 --- /dev/null +++ b/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/CMakeLists.txt @@ -0,0 +1,13 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## qlockfile_test_helper Binary: +##################################################################### + +qt_internal_add_test_helper(qlockfile_test_helper + OVERRIDE_OUTPUT_DIRECTORY + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + SOURCES + qlockfile_test_helper.cpp +) diff --git a/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/qlockfile_test_helper.cpp b/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/qlockfile_test_helper.cpp index e086bf1904..b990209f32 100644 --- a/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/qlockfile_test_helper.cpp +++ b/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/qlockfile_test_helper.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2013 David Faure <faure+bluesystems@kde.org> -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2013 David Faure <faure+bluesystems@kde.org> +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QDebug> #include <QCoreApplication> diff --git a/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/qlockfile_test_helper.pro b/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/qlockfile_test_helper.pro deleted file mode 100644 index 97135d279e..0000000000 --- a/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/qlockfile_test_helper.pro +++ /dev/null @@ -1,6 +0,0 @@ -TARGET = qlockfile_test_helper -SOURCES += qlockfile_test_helper.cpp - -CONFIG += cmdline -QT = core -DESTDIR = ./ diff --git a/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp b/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp index 4969e417f4..b7056e20c9 100644 --- a/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp +++ b/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp @@ -1,46 +1,34 @@ -/**************************************************************************** -** -** Copyright (C) 2013 David Faure <faure+bluesystems@kde.org> -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - -#include <QtTest/QtTest> +// Copyright (C) 2021 The Qt Company Ltd. +// Copyright (C) 2013 David Faure <faure+bluesystems@kde.org> +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses + +#include <QTest> #include <QtConcurrentRun> +#if QT_CONFIG(process) +#include <QProcess> +#endif +#include <QSemaphore> +#include <QFutureSynchronizer> + #include <qlockfile.h> #include <qtemporarydir.h> #include <qsysinfo.h> #if defined(Q_OS_UNIX) && !defined(Q_OS_VXWORKS) #include <unistd.h> + +#include <sys/stat.h> // utimensat #include <sys/time.h> -#elif defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#elif defined(Q_OS_WIN) # include <qt_windows.h> +# include <QOperatingSystemVersion> #endif #include <private/qlockfile_p.h> // for getLockFileHandle() +using namespace std::chrono_literals; + class tst_QLockFile : public QObject { Q_OBJECT @@ -78,7 +66,7 @@ public: void tst_QLockFile::initTestCase() { -#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED) +#ifdef Q_OS_ANDROID QSKIP("This test requires deploying and running external console applications"); #elif !QT_CONFIG(process) QSKIP("This test requires QProcess support"); @@ -96,6 +84,7 @@ void tst_QLockFile::lockUnlock() const QString fileName = dir.path() + "/lock1"; QVERIFY(!QFile(fileName).exists()); QLockFile lockFile(fileName); + QCOMPARE(lockFile.fileName(), fileName); QVERIFY(lockFile.lock()); QVERIFY(lockFile.isLocked()); QCOMPARE(int(lockFile.error()), int(QLockFile::NoError)); @@ -110,7 +99,7 @@ void tst_QLockFile::lockUnlock() QVERIFY(lockFile.getLockInfo(&pid, &hostname, &appname)); QCOMPARE(pid, QCoreApplication::applicationPid()); QCOMPARE(appname, qAppName()); - QVERIFY(!lockFile.tryLock(200)); + QVERIFY(!lockFile.tryLock(200ms)); QCOMPARE(int(lockFile.error()), int(QLockFile::LockFailedError)); // Unlock deletes the lock file @@ -163,13 +152,13 @@ void tst_QLockFile::lockOutOtherThread() QVERIFY(lockFile.lock()); // Other thread can't acquire lock - QFuture<QLockFile::LockError> ret = QtConcurrent::run<QLockFile::LockError>(tryLockFromThread, fileName); + auto ret = QtConcurrent::run(tryLockFromThread, fileName); QCOMPARE(ret.result(), QLockFile::LockFailedError); lockFile.unlock(); // Now other thread can acquire lock - QFuture<QLockFile::LockError> ret2 = QtConcurrent::run<QLockFile::LockError>(tryLockFromThread, fileName); + auto ret2 = QtConcurrent::run(tryLockFromThread, fileName); QCOMPARE(ret2.result(), QLockFile::NoError); } @@ -186,13 +175,13 @@ static QLockFile::LockError lockFromThread(const QString &fileName) void tst_QLockFile::raceWithOtherThread() { const QString fileName = dir.path() + "/raceWithOtherThread"; - QFuture<QLockFile::LockError> ret = QtConcurrent::run<QLockFile::LockError>(lockFromThread, fileName); - QFuture<QLockFile::LockError> ret2 = QtConcurrent::run<QLockFile::LockError>(lockFromThread, fileName); + auto ret = QtConcurrent::run(lockFromThread, fileName); + auto ret2 = QtConcurrent::run(lockFromThread, fileName); QCOMPARE(ret.result(), QLockFile::NoError); QCOMPARE(ret2.result(), QLockFile::NoError); } -static bool lockFromThread(const QString &fileName, int sleepMs, QSemaphore *semThreadReady, QSemaphore *semMainThreadDone) +static bool lockFromThreadAndWait(const QString &fileName, int sleepMs, QSemaphore *semThreadReady, QSemaphore *semMainThreadDone) { QLockFile lockFile(fileName); if (!lockFile.lock()) { @@ -233,7 +222,7 @@ void tst_QLockFile::waitForLock() QLockFile lockFile(fileName); QSemaphore semThreadReady, semMainThreadDone; // Lock file from a thread - QFuture<bool> ret = QtConcurrent::run<bool>(lockFromThread, fileName, threadSleepMs, &semThreadReady, &semMainThreadDone); + auto ret = QtConcurrent::run(lockFromThreadAndWait, fileName, threadSleepMs, &semThreadReady, &semMainThreadDone); semThreadReady.acquire(); if (releaseEarly) // let the thread release the lock after threadSleepMs @@ -248,7 +237,7 @@ void tst_QLockFile::waitForLock() if (!releaseEarly) // only let the thread release the lock now semMainThreadDone.release(); - QVERIFY(ret); // waits for the thread to finish + QVERIFY(ret.result()); // waits for the thread to finish } void tst_QLockFile::staleLockFromCrashedProcess_data() @@ -289,7 +278,7 @@ void tst_QLockFile::staleLockFromCrashedProcessReusedPid() { #if !QT_CONFIG(process) QSKIP("This test requires QProcess support"); -#elif defined(Q_OS_WINRT) || defined(QT_PLATFORM_UIKIT) +#elif defined(QT_PLATFORM_UIKIT) QSKIP("We cannot retrieve information about other processes on this platform."); #else const QString fileName = dir.path() + "/staleLockFromCrashedProcessReusedPid"; @@ -328,7 +317,7 @@ void tst_QLockFile::staleShortLockFromBusyProcess() QString hostname, appname; QTRY_VERIFY(secondLock.getLockInfo(&pid, &hostname, &appname)); #ifdef Q_OS_UNIX - QCOMPARE(pid, proc.pid()); + QCOMPARE(pid, proc.processId()); #endif secondLock.setStaleLockTime(100); @@ -355,8 +344,8 @@ void tst_QLockFile::staleLongLockFromBusyProcess() QTRY_VERIFY(QFile::exists(fileName)); QLockFile secondLock(fileName); - secondLock.setStaleLockTime(0); - QVERIFY(!secondLock.tryLock(100)); // never stale + secondLock.setStaleLockTime(0ms); + QVERIFY(!secondLock.tryLock(100ms)); // never stale QCOMPARE(int(secondLock.error()), int(QLockFile::LockFailedError)); qint64 pid; QTRY_VERIFY(secondLock.getLockInfo(&pid, NULL, NULL)); @@ -410,7 +399,7 @@ void tst_QLockFile::staleLockRace() QThreadPool::globalInstance()->setMaxThreadCount(10); QFutureSynchronizer<QString> synchronizer; for (int i = 0; i < 8; ++i) - synchronizer.addFuture(QtConcurrent::run<QString>(tryStaleLockFromThread, fileName)); + synchronizer.addFuture(QtConcurrent::run(tryStaleLockFromThread, fileName)); synchronizer.waitForFinished(); foreach (const QFuture<QString> &future, synchronizer.futures()) QVERIFY2(future.result().isEmpty(), qPrintable(future.result())); @@ -463,7 +452,7 @@ Q_DECLARE_OPERATORS_FOR_FLAGS(ProcessProperties) static inline ProcessProperties processProperties() { ProcessProperties result; -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) HANDLE processToken = NULL; if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &processToken)) { DWORD elevation; // struct containing a DWORD, not present in some MinGW headers. @@ -492,7 +481,7 @@ void tst_QLockFile::noPermissionsWindows() { // Windows: Do the permissions test in a system directory in which // files cannot be created. -#if !defined(Q_OS_WIN) || defined(Q_OS_WINRT) +#if !defined(Q_OS_WIN) QSKIP("This test is for desktop Windows only"); #endif #ifdef Q_OS_WIN @@ -524,15 +513,15 @@ void tst_QLockFile::corruptedLockFile() } QLockFile secondLock(fileName); - secondLock.setStaleLockTime(100); - QVERIFY(secondLock.tryLock(10000)); + secondLock.setStaleLockTime(100ms); + QVERIFY(secondLock.tryLock(10s)); QCOMPARE(int(secondLock.error()), int(QLockFile::NoError)); } void tst_QLockFile::corruptedLockFileInTheFuture() { -#if !defined(Q_OS_UNIX) - QSKIP("This tests needs utimes"); +#if !defined(Q_OS_UNIX) || defined(Q_OS_VXWORKS) + QSKIP("This test needs utimensat"); #else // This test is the same as the previous one, but the corruption was so there is a corrupted // .rmlock whose timestamp is in the future @@ -544,11 +533,12 @@ void tst_QLockFile::corruptedLockFileInTheFuture() QVERIFY(file.open(QFile::WriteOnly)); } - struct timeval times[2]; - gettimeofday(times, 0); - times[1].tv_sec = (times[0].tv_sec += 600); - times[1].tv_usec = times[0].tv_usec; - utimes(fileName.toLocal8Bit(), times); + struct timespec times[2]; + clock_gettime(CLOCK_REALTIME, times); + times[0].tv_sec += 600; + times[1].tv_sec = times[0].tv_sec; + times[1].tv_nsec = times[0].tv_nsec; + utimensat(0 /* ignored */, fileName.toLocal8Bit(), times, 0); QTest::ignoreMessage(QtInfoMsg, "QLockFile: Lock file '" + fileName.toUtf8() + "' has a modification time in the future"); corruptedLockFile(); @@ -577,7 +567,7 @@ void tst_QLockFile::hostnameChange() { // we should fail to lock QLockFile lock2(lockFile); - QVERIFY(!lock2.tryLock(1000)); + QVERIFY(!lock2.tryLock(1s)); } } @@ -604,7 +594,7 @@ void tst_QLockFile::differentMachines() { // we should fail to lock QLockFile lock2(lockFile); - QVERIFY(!lock2.tryLock(1000)); + QVERIFY(!lock2.tryLock(1s)); } } @@ -633,7 +623,7 @@ void tst_QLockFile::reboot() f.close(); // we should succeed in locking - QVERIFY(lock1.tryLock(0)); + QVERIFY(lock1.tryLock(0ms)); } bool tst_QLockFile::overwritePidInLockFile(const QString &filePath, qint64 pid) diff --git a/tests/auto/corelib/io/qlockfile/tst_qlockfile.pro b/tests/auto/corelib/io/qlockfile/tst_qlockfile.pro deleted file mode 100644 index e33e22b36f..0000000000 --- a/tests/auto/corelib/io/qlockfile/tst_qlockfile.pro +++ /dev/null @@ -1,6 +0,0 @@ -CONFIG += testcase -TARGET = tst_qlockfile -SOURCES += tst_qlockfile.cpp - -QT = core-private testlib concurrent -win32:!winrt: QMAKE_USE += advapi32 diff --git a/tests/auto/corelib/io/qloggingcategory/CMakeLists.txt b/tests/auto/corelib/io/qloggingcategory/CMakeLists.txt new file mode 100644 index 0000000000..0e9fc98fae --- /dev/null +++ b/tests/auto/corelib/io/qloggingcategory/CMakeLists.txt @@ -0,0 +1,19 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qloggingcategory Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qloggingcategory LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +qt_internal_add_test(tst_qloggingcategory + SOURCES + tst_qloggingcategory.cpp + LIBRARIES + Qt::CorePrivate +) diff --git a/tests/auto/corelib/io/qloggingcategory/qloggingcategory.pro b/tests/auto/corelib/io/qloggingcategory/qloggingcategory.pro deleted file mode 100644 index 8492daefc1..0000000000 --- a/tests/auto/corelib/io/qloggingcategory/qloggingcategory.pro +++ /dev/null @@ -1,7 +0,0 @@ -TEMPLATE = app -TARGET = tst_qloggingcategory - -CONFIG += testcase -QT = core core-private testlib - -SOURCES += tst_qloggingcategory.cpp diff --git a/tests/auto/corelib/io/qloggingcategory/tst_qloggingcategory.cpp b/tests/auto/corelib/io/qloggingcategory/tst_qloggingcategory.cpp index 79ac6b0fc4..476ca275a4 100644 --- a/tests/auto/corelib/io/qloggingcategory/tst_qloggingcategory.cpp +++ b/tests/auto/corelib/io/qloggingcategory/tst_qloggingcategory.cpp @@ -1,34 +1,11 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtTest> +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QTest> #include <QMutexLocker> #include <QLoggingCategory> +#include <QMap> +#include <QStringList> Q_LOGGING_CATEGORY(TST_LOG, "tst.log") Q_LOGGING_CATEGORY(Digia_Oslo_Office_com, "Digia.Oslo.Office.com") @@ -101,7 +78,7 @@ public: { QString ret; QTextStream out(&ret); - for (int a = 0; a < _configitemEntryOrder.count(); a++) { + for (int a = 0; a < _configitemEntryOrder.size(); a++) { out << _configitemEntryOrder[a] << " = " << _values.value(_configitemEntryOrder[a]) << Qt::endl; @@ -133,7 +110,7 @@ public: : _logtext(logtext), _configuration(configuration) {} protected: - void run() + void run() override { for (int i = 0; i < 2000; i++) { _configuration->addKey("Digia*", true); @@ -176,7 +153,7 @@ inline QString cleanLogLine(const QString &qstring) buf.remove("../"); buf.remove("qlog/"); QString ret; - for (int i = 0; i < buf.length(); i++) { + for (int i = 0; i < buf.size(); i++) { if (buf[i] >= '!' && buf[i] <= 'z') ret += buf[i]; } @@ -204,7 +181,7 @@ private slots: void initTestCase() { qputenv("XDG_CONFIG_DIRS", "/does/not/exist"); - qputenv("QT_MESSAGE_PATTERN", QByteArray("%{category}: %{type},%{message}")); + qputenv("QT_MESSAGE_PATTERN", "%{category}: %{type},%{message}"); oldMessageHandler = qInstallMessageHandler(myCustomMessageHandler); // Create configuration _config = new Configuration(); @@ -820,7 +797,7 @@ private slots: { _config->clear(); _config->addKey("LoggingCategoryObject", true); - QLoggingCategory *pcategorybject = 0; + QLoggingCategory *pcategorybject = nullptr; QLoggingCategory::setFilterRules(_config->array()); { QLoggingCategory mycategoryobject("LoggingCategoryObject"); @@ -926,7 +903,7 @@ private slots: buf = QStringLiteral("Digia.Berlin.Office.com.debug: Berlin \"from Thread 2\" :false"); compareagainst.append(cleanLogLine(buf)); - for (int i = 0; i < threadtest.count(); i++) { + for (int i = 0; i < threadtest.size(); i++) { if (!compareagainst.contains(cleanLogLine(threadtest[i]))){ fprintf(stdout, "%s\r\n", threadtest[i].toLatin1().constData()); QVERIFY2(false, "Multithread log is not complete!"); @@ -939,6 +916,23 @@ private slots: delete _config; qInstallMessageHandler(oldMessageHandler); } + + void qFatalMacros() + { + QLoggingCategory customCategory("custom"); + + // compile-only test for fatal macros + return; + + qFatal("Message"); + qFatal("Message %d", 42); + qFatal(customCategory, "Message %d", 42); + qFatal(TST_LOG, "Message %d", 42); + + qFatal() << "Message" << 42; + qCFatal(customCategory) << "Message" << 42; + qCFatal(TST_LOG) << "Message" << 42; + } }; QTEST_MAIN(tst_QLogging) diff --git a/tests/auto/corelib/io/qloggingregistry/CMakeLists.txt b/tests/auto/corelib/io/qloggingregistry/CMakeLists.txt new file mode 100644 index 0000000000..5442c76e7f --- /dev/null +++ b/tests/auto/corelib/io/qloggingregistry/CMakeLists.txt @@ -0,0 +1,23 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qloggingregistry Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qloggingregistry LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +# Collect test data +list(APPEND test_data "qtlogging.ini") + +qt_internal_add_test(tst_qloggingregistry + SOURCES + tst_qloggingregistry.cpp + LIBRARIES + Qt::CorePrivate + TESTDATA ${test_data} +) diff --git a/tests/auto/corelib/io/qloggingregistry/qloggingregistry.pro b/tests/auto/corelib/io/qloggingregistry/qloggingregistry.pro deleted file mode 100644 index ac976e9b9c..0000000000 --- a/tests/auto/corelib/io/qloggingregistry/qloggingregistry.pro +++ /dev/null @@ -1,13 +0,0 @@ -TEMPLATE = app -TARGET = tst_qloggingregistry - -CONFIG += testcase -QT = core core-private testlib - -SOURCES += tst_qloggingregistry.cpp -TESTDATA += qtlogging.ini - -android:!android-embedded { - RESOURCES += \ - android_testdata.qrc -} diff --git a/tests/auto/corelib/io/qloggingregistry/tst_qloggingregistry.cpp b/tests/auto/corelib/io/qloggingregistry/tst_qloggingregistry.cpp index a10e706ed7..b3af31ac27 100644 --- a/tests/auto/corelib/io/qloggingregistry/tst_qloggingregistry.cpp +++ b/tests/auto/corelib/io/qloggingregistry/tst_qloggingregistry.cpp @@ -1,33 +1,9 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtTest> +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QTest> #include <QLoggingCategory> +#include <QStandardPaths> #include <QtCore/private/qloggingregistry_p.h> @@ -158,10 +134,13 @@ private slots: QFETCH(QtMsgType, msgType); QFETCH(LoggingRuleState, result); - QLoggingRule rule(QStringRef(&pattern), true); + const auto categoryL1 = category.toLatin1(); + const auto categoryL1S = QLatin1String(categoryL1); + + QLoggingRule rule(pattern, true); LoggingRuleState state = Invalid; if (rule.flags != 0) { - switch (rule.pass(category, msgType)) { + switch (rule.pass(categoryL1S, msgType)) { case -1: QFAIL("Shoudn't happen, we set pattern to true"); break; case 0: state = NoMatch; break; case 1: state = Match; break; @@ -178,24 +157,24 @@ private slots: // default category, and optional ... // QLoggingSettingsParser parser; - parser.setContent("[Rules]\n" - "default=false\n" - "default=true"); + parser.setContent(u"[Rules]\n" + "default=false\n" + "default=true"); QCOMPARE(parser.rules().size(), 2); - parser.setContent("[Rules]\n" - "default=false"); + parser.setContent(u"[Rules]\n" + "default=false"); QCOMPARE(parser.rules().size(), 1); // QSettings escapes * to %2A when writing. - parser.setContent("[Rules]\n" - "module.%2A=false"); + parser.setContent(u"[Rules]\n" + "module.%2A=false"); QCOMPARE(parser.rules().size(), 1); QCOMPARE(parser.rules().first().category, QString("module.")); QCOMPARE(parser.rules().first().flags, QLoggingRule::LeftFilter); - parser.setContent("[OtherSection]\n" - "default=false"); + parser.setContent(u"[OtherSection]\n" + "default=false"); QCOMPARE(parser.rules().size(), 0); } @@ -286,7 +265,7 @@ private slots: // set Config rule QLoggingSettingsParser parser; - parser.setContent("[Rules]\nDigia.*=false"); + parser.setContent(u"[Rules]\nDigia.*=false"); registry->ruleSets[QLoggingRegistry::ConfigRules] = parser.rules(); registry->updateRules(); @@ -298,7 +277,7 @@ private slots: QVERIFY(cat.isWarningEnabled()); // set Env rule, should overwrite Config one - parser.setContent("Digia.*=false"); + parser.setContent(u"Digia.*=false"); registry->ruleSets[QLoggingRegistry::EnvironmentRules] = parser.rules(); registry->updateRules(); @@ -312,10 +291,10 @@ private slots: QTest::ignoreMessage(QtWarningMsg, "Ignoring malformed logging rule: '***=false'"); QTest::ignoreMessage(QtWarningMsg, "Ignoring malformed logging rule: '*=0'"); QTest::ignoreMessage(QtWarningMsg, "Ignoring malformed logging rule: '*=TRUE'"); - parser.setContent("[Rules]\n" - "***=false\n" - "*=0\n" - "*=TRUE\n"); + parser.setContent(u"[Rules]\n" + "***=false\n" + "*=0\n" + "*=TRUE\n"); QVERIFY(parser.rules().isEmpty()); } }; diff --git a/tests/auto/corelib/io/qnodebug/CMakeLists.txt b/tests/auto/corelib/io/qnodebug/CMakeLists.txt new file mode 100644 index 0000000000..5fc64976c3 --- /dev/null +++ b/tests/auto/corelib/io/qnodebug/CMakeLists.txt @@ -0,0 +1,17 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qnodebug Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qnodebug LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +qt_internal_add_test(tst_qnodebug + SOURCES + tst_qnodebug.cpp +) diff --git a/tests/auto/corelib/io/qnodebug/qnodebug.pro b/tests/auto/corelib/io/qnodebug/qnodebug.pro deleted file mode 100644 index 7e35f92474..0000000000 --- a/tests/auto/corelib/io/qnodebug/qnodebug.pro +++ /dev/null @@ -1,4 +0,0 @@ -CONFIG += testcase -TARGET = tst_qnodebug -QT = core testlib -SOURCES = tst_qnodebug.cpp diff --git a/tests/auto/corelib/io/qnodebug/tst_qnodebug.cpp b/tests/auto/corelib/io/qnodebug/tst_qnodebug.cpp index cf2079a407..0ff46c45a4 100644 --- a/tests/auto/corelib/io/qnodebug/tst_qnodebug.cpp +++ b/tests/auto/corelib/io/qnodebug/tst_qnodebug.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2020 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only // This test is for "release" mode, with -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT #ifndef QT_NO_DEBUG @@ -37,7 +12,7 @@ #include <QtCore/QtCore> #include <QtCore/QtDebug> #include <QtCore/QLoggingCategory> -#include <QtTest/QtTest> +#include <QTest> class tst_QNoDebug: public QObject { diff --git a/tests/auto/corelib/io/qprocess-noapplication/CMakeLists.txt b/tests/auto/corelib/io/qprocess-noapplication/CMakeLists.txt new file mode 100644 index 0000000000..fd4312baf7 --- /dev/null +++ b/tests/auto/corelib/io/qprocess-noapplication/CMakeLists.txt @@ -0,0 +1,17 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## qprocess-noapplication Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(qprocess-noapplication LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +qt_internal_add_test(qprocess-noapplication + SOURCES + tst_qprocessnoapplication.cpp +) diff --git a/tests/auto/corelib/io/qprocess-noapplication/qprocess-noapplication.pro b/tests/auto/corelib/io/qprocess-noapplication/qprocess-noapplication.pro deleted file mode 100644 index 8e46320e0c..0000000000 --- a/tests/auto/corelib/io/qprocess-noapplication/qprocess-noapplication.pro +++ /dev/null @@ -1,4 +0,0 @@ -CONFIG += testcase -CONFIG -= debug_and_release_target -QT = core testlib -SOURCES = tst_qprocessnoapplication.cpp diff --git a/tests/auto/corelib/io/qprocess-noapplication/tst_qprocessnoapplication.cpp b/tests/auto/corelib/io/qprocess-noapplication/tst_qprocessnoapplication.cpp index b9702a93cf..c84651913d 100644 --- a/tests/auto/corelib/io/qprocess-noapplication/tst_qprocessnoapplication.cpp +++ b/tests/auto/corelib/io/qprocess-noapplication/tst_qprocessnoapplication.cpp @@ -1,35 +1,10 @@ -/**************************************************************************** -** -** Copyright (C) 2016 Intel Corporation. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtCore module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 Intel Corporation. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QtCore/QCoreApplication> #include <QtCore/QProcess> #include <QtCore/QThread> -#include <QtTest> +#include <QTest> class tst_QProcessNoApplication : public QObject { @@ -49,7 +24,7 @@ void tst_QProcessNoApplication::initializationDeadlock() struct MyThread : public QThread { - void run() + void run() override { // what we execute does not matter, as long as we try to // and that the process exits diff --git a/tests/auto/corelib/io/qprocess/BLACKLIST b/tests/auto/corelib/io/qprocess/BLACKLIST deleted file mode 100644 index 682bcbc60c..0000000000 --- a/tests/auto/corelib/io/qprocess/BLACKLIST +++ /dev/null @@ -1,6 +0,0 @@ -[lockupsInStartDetached] -redhatenterpriselinuxworkstation-6.6 -# QTBUG-48455 -[fileWriterProcess] -windows-10 msvc-2017 - diff --git a/tests/auto/corelib/io/qprocess/CMakeLists.txt b/tests/auto/corelib/io/qprocess/CMakeLists.txt new file mode 100644 index 0000000000..17dea9688f --- /dev/null +++ b/tests/auto/corelib/io/qprocess/CMakeLists.txt @@ -0,0 +1,39 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(qprocess LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +add_subdirectory(test) +add_subdirectory(testProcessCrash) +add_subdirectory(testProcessEcho) +add_subdirectory(testProcessEcho2) +add_subdirectory(testProcessEcho3) +add_subdirectory(testProcessEnvironment) +add_subdirectory(testProcessHang) +add_subdirectory(testProcessNormal) +add_subdirectory(testProcessOutput) +add_subdirectory(testProcessDeadWhileReading) +add_subdirectory(testProcessEOF) +add_subdirectory(testExitCodes) +add_subdirectory(testForwarding) +add_subdirectory(testForwardingHelper) +if(TARGET Qt::Widgets) + add_subdirectory(testGuiProcess) +endif() +add_subdirectory(testDetached) +add_subdirectory(fileWriterProcess) +add_subdirectory(testSetWorkingDirectory) +add_subdirectory(testSoftExit) +add_subdirectory(testProcessSpacesArgs) +add_subdirectory(testSpaceInName) +if(WIN32) + add_subdirectory(testProcessEchoGui) + add_subdirectory(testSetNamedPipeHandleState) +endif() +if(UNIX) + add_subdirectory(testUnixProcessParameters) +endif() diff --git a/tests/auto/corelib/io/qprocess/crasher.h b/tests/auto/corelib/io/qprocess/crasher.h new file mode 100644 index 0000000000..f1ca82a86b --- /dev/null +++ b/tests/auto/corelib/io/qprocess/crasher.h @@ -0,0 +1,60 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// Copyright (C) 2020 Intel Corporation. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#if defined(_MSC_VER) +# include <intrin.h> +#endif +#if __has_include(<signal.h>) +# include <signal.h> +#endif +#if __has_include(<sys/resource.h>) +# include <sys/resource.h> +#endif + +#ifndef __has_builtin +# define __has_builtin(x) 0 +#endif + +namespace tst_QProcessCrash { +struct NoCoreDumps +{ +#if defined(RLIMIT_CORE) + struct rlimit rlim; + NoCoreDumps() + { + if (getrlimit(RLIMIT_CORE, &rlim) == 0 && rlim.rlim_cur != 0) { + struct rlimit newrlim = rlim; + newrlim.rlim_cur = 0; + setrlimit(RLIMIT_CORE, &newrlim); + } + } + ~NoCoreDumps() + { + setrlimit(RLIMIT_CORE, &rlim); + } +#endif // RLIMIT_CORE +}; + +void crashFallback(volatile int *ptr = nullptr) +{ + *ptr = 0; +} + +void crash() +{ +#if defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64)) + __ud2(); +#elif defined(_MSC_VER) && defined(_M_ARM64) + __debugbreak(); +#elif __has_builtin(__builtin_trap) + __builtin_trap(); +#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) + asm("ud2"); +#elif defined(SIGILL) + raise(SIGILL); +#endif + + crashFallback(); +} +} // namespace tst_QProcessCrash diff --git a/tests/auto/corelib/io/qprocess/fileWriterProcess/CMakeLists.txt b/tests/auto/corelib/io/qprocess/fileWriterProcess/CMakeLists.txt new file mode 100644 index 0000000000..d431ba2c3f --- /dev/null +++ b/tests/auto/corelib/io/qprocess/fileWriterProcess/CMakeLists.txt @@ -0,0 +1,12 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## fileWriterProcess Binary: +##################################################################### + +qt_internal_add_executable(fileWriterProcess + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + SOURCES + main.cpp +) diff --git a/tests/auto/corelib/io/qprocess/fileWriterProcess/fileWriterProcess.pro b/tests/auto/corelib/io/qprocess/fileWriterProcess/fileWriterProcess.pro deleted file mode 100644 index 2744491151..0000000000 --- a/tests/auto/corelib/io/qprocess/fileWriterProcess/fileWriterProcess.pro +++ /dev/null @@ -1,4 +0,0 @@ -SOURCES = main.cpp -CONFIG += cmdline -QT = core -DESTDIR = ./ diff --git a/tests/auto/corelib/io/qprocess/fileWriterProcess/main.cpp b/tests/auto/corelib/io/qprocess/fileWriterProcess/main.cpp index efeadadb93..0349a48067 100644 --- a/tests/auto/corelib/io/qprocess/fileWriterProcess/main.cpp +++ b/tests/auto/corelib/io/qprocess/fileWriterProcess/main.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QCoreApplication> #include <QFile> @@ -34,7 +9,8 @@ int main(int argc, char **argv) { QCoreApplication ca(argc, argv); QFile f; - f.open(stdin, QIODevice::ReadOnly); + if (!f.open(stdin, QIODevice::ReadOnly)) + return 1; QByteArray input; char buf[1024]; qint64 len; diff --git a/tests/auto/corelib/io/qprocess/qprocess.pri b/tests/auto/corelib/io/qprocess/qprocess.pri deleted file mode 100644 index 8d17090545..0000000000 --- a/tests/auto/corelib/io/qprocess/qprocess.pri +++ /dev/null @@ -1,22 +0,0 @@ -SUBPROGRAMS = \ - testProcessCrash \ - testProcessEcho \ - testProcessEcho2 \ - testProcessEcho3 \ - testProcessEnvironment \ - testProcessHang \ - testProcessNormal \ - testProcessOutput \ - testProcessDeadWhileReading \ - testProcessEOF \ - testExitCodes \ - testForwarding \ - testForwardingHelper \ - testGuiProcess \ - testDetached \ - fileWriterProcess \ - testSetWorkingDirectory \ - testSoftExit - -!qtHaveModule(widgets): SUBPROGRAMS -= \ - testGuiProcess diff --git a/tests/auto/corelib/io/qprocess/qprocess.pro b/tests/auto/corelib/io/qprocess/qprocess.pro deleted file mode 100644 index 3867ac5741..0000000000 --- a/tests/auto/corelib/io/qprocess/qprocess.pro +++ /dev/null @@ -1,18 +0,0 @@ -TEMPLATE = subdirs - -include(qprocess.pri) -SUBDIRS = $$SUBPROGRAMS -# Add special cases -SUBDIRS += testProcessSpacesArgs/nospace.pro \ - testProcessSpacesArgs/onespace.pro \ - testProcessSpacesArgs/twospaces.pro \ - testSpaceInName - -win32 { - SUBDIRS += \ - testProcessEchoGui \ - testSetNamedPipeHandleState -} - -test.depends += $$SUBDIRS -SUBDIRS += test diff --git a/tests/auto/corelib/io/qprocess/test/CMakeLists.txt b/tests/auto/corelib/io/qprocess/test/CMakeLists.txt new file mode 100644 index 0000000000..89893583ac --- /dev/null +++ b/tests/auto/corelib/io/qprocess/test/CMakeLists.txt @@ -0,0 +1,48 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qprocess Test: +##################################################################### + +qt_internal_add_test(tst_qprocess + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../" + SOURCES + ../tst_qprocess.cpp + LIBRARIES + Qt::CorePrivate + Qt::Network + Qt::TestPrivate +) + +## Build assorted sub-programs called from the test: +add_dependencies(tst_qprocess + testProcessCrash + testProcessEcho + testProcessEcho2 + testProcessEcho3 + testProcessEnvironment + testProcessHang + testProcessNormal + testProcessOutput + testProcessDeadWhileReading + testProcessEOF + testExitCodes + testForwarding + testDetached + fileWriterProcess + testSetWorkingDirectory + testSoftExit + nospace onespace twospaces + testSpaceInName +) +if(TARGET Qt::Widgets) + add_dependencies(tst_qprocess testGuiProcess) +endif() +if(WIN32) + add_dependencies(tst_qprocess testProcessEchoGui testSetNamedPipeHandleState) +endif() + +if(UNIX) + add_dependencies(tst_qprocess testUnixProcessParameters) +endif() diff --git a/tests/auto/corelib/io/qprocess/test/test.pro b/tests/auto/corelib/io/qprocess/test/test.pro deleted file mode 100644 index 63187c9668..0000000000 --- a/tests/auto/corelib/io/qprocess/test/test.pro +++ /dev/null @@ -1,22 +0,0 @@ -CONFIG += testcase -CONFIG -= debug_and_release_target -QT = core-private testlib network -SOURCES = ../tst_qprocess.cpp -INCLUDEPATH += ../../../../../shared -HEADERS += ../../../../../shared/emulationdetector.h - -TARGET = ../tst_qprocess - -win32:TESTDATA += ../testBatFiles/* - -include(../qprocess.pri) - -mac:CONFIG += insignificant_test # QTBUG-25895 - sometimes hangs - -for(file, SUBPROGRAMS): TEST_HELPER_INSTALLS += "../$${file}/$${file}" - -TEST_HELPER_INSTALLS += \ - ../testProcessSpacesArgs/nospace \ - "../testProcessSpacesArgs/one space" \ - "../testProcessSpacesArgs/two space s" \ - "../test Space In Name/testSpaceInName" diff --git a/tests/auto/corelib/io/qprocess/testBatFiles/simple.bat b/tests/auto/corelib/io/qprocess/testBatFiles/simple.bat index 900f7ae356..8567e16850 100755 --- a/tests/auto/corelib/io/qprocess/testBatFiles/simple.bat +++ b/tests/auto/corelib/io/qprocess/testBatFiles/simple.bat @@ -1,2 +1,4 @@ +:: Copyright (C) 2024 The Qt Company Ltd. +:: SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 @echo off -echo Hello
\ No newline at end of file +echo Hello diff --git a/tests/auto/corelib/io/qprocess/testBatFiles/with space.bat b/tests/auto/corelib/io/qprocess/testBatFiles/with space.bat index 900f7ae356..8567e16850 100755 --- a/tests/auto/corelib/io/qprocess/testBatFiles/with space.bat +++ b/tests/auto/corelib/io/qprocess/testBatFiles/with space.bat @@ -1,2 +1,4 @@ +:: Copyright (C) 2024 The Qt Company Ltd. +:: SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 @echo off -echo Hello
\ No newline at end of file +echo Hello diff --git a/tests/auto/corelib/io/qprocess/testDetached/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testDetached/CMakeLists.txt new file mode 100644 index 0000000000..2439fc67a7 --- /dev/null +++ b/tests/auto/corelib/io/qprocess/testDetached/CMakeLists.txt @@ -0,0 +1,12 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## testDetached Binary: +##################################################################### + +qt_internal_add_executable(testDetached + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + SOURCES + main.cpp +) diff --git a/tests/auto/corelib/io/qprocess/testDetached/main.cpp b/tests/auto/corelib/io/qprocess/testDetached/main.cpp index c10e32d584..9b0b3855a0 100644 --- a/tests/auto/corelib/io/qprocess/testDetached/main.cpp +++ b/tests/auto/corelib/io/qprocess/testDetached/main.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QCoreApplication> #include <QDebug> #include <QStringList> @@ -66,7 +41,7 @@ struct Args static Args parseArguments(const QStringList &args) { Args result; - if (args.count() < 2) { + if (args.size() < 2) { result.exitCode = 128; result.errorMessage = "Usage: testDetached [--out-channel={stdout|stderr}] filename.txt\n"; return result; diff --git a/tests/auto/corelib/io/qprocess/testDetached/testDetached.pro b/tests/auto/corelib/io/qprocess/testDetached/testDetached.pro deleted file mode 100644 index 3d80b668df..0000000000 --- a/tests/auto/corelib/io/qprocess/testDetached/testDetached.pro +++ /dev/null @@ -1,5 +0,0 @@ -SOURCES = main.cpp -QT = core -CONFIG += cmdline -INSTALLS = -DESTDIR = ./ diff --git a/tests/auto/corelib/io/qprocess/testExitCodes/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testExitCodes/CMakeLists.txt new file mode 100644 index 0000000000..bc03f52d00 --- /dev/null +++ b/tests/auto/corelib/io/qprocess/testExitCodes/CMakeLists.txt @@ -0,0 +1,13 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## testExitCodes Binary: +##################################################################### + +qt_internal_add_executable(testExitCodes + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + CORE_LIBRARY None + SOURCES + main.cpp +) diff --git a/tests/auto/corelib/io/qprocess/testExitCodes/main.cpp b/tests/auto/corelib/io/qprocess/testExitCodes/main.cpp index f681870609..3f186d2272 100644 --- a/tests/auto/corelib/io/qprocess/testExitCodes/main.cpp +++ b/tests/auto/corelib/io/qprocess/testExitCodes/main.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <stdlib.h> diff --git a/tests/auto/corelib/io/qprocess/testExitCodes/testExitCodes.pro b/tests/auto/corelib/io/qprocess/testExitCodes/testExitCodes.pro deleted file mode 100644 index 5eaf8dc881..0000000000 --- a/tests/auto/corelib/io/qprocess/testExitCodes/testExitCodes.pro +++ /dev/null @@ -1,5 +0,0 @@ -SOURCES += main.cpp -CONFIG -= qt -CONFIG += cmdline - -DESTDIR = ./ diff --git a/tests/auto/corelib/io/qprocess/testForwarding/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testForwarding/CMakeLists.txt new file mode 100644 index 0000000000..77739d2c68 --- /dev/null +++ b/tests/auto/corelib/io/qprocess/testForwarding/CMakeLists.txt @@ -0,0 +1,14 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## testForwarding Binary: +##################################################################### + +qt_internal_add_executable(testForwarding + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + SOURCES + main.cpp +) + +add_dependencies(testForwarding testForwardingHelper) diff --git a/tests/auto/corelib/io/qprocess/testForwarding/main.cpp b/tests/auto/corelib/io/qprocess/testForwarding/main.cpp index b5d56a1138..774a8622e1 100644 --- a/tests/auto/corelib/io/qprocess/testForwarding/main.cpp +++ b/tests/auto/corelib/io/qprocess/testForwarding/main.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QtCore/QCoreApplication> #include <QtCore/QDeadlineTimer> @@ -38,7 +13,7 @@ static bool waitForDoneFileWritten(const QString &filePath, int msecs = 30000) { QDeadlineTimer t(msecs); do { - QThread::msleep(250); + QThread::sleep(std::chrono::milliseconds{250}); QFile file(filePath); if (!file.open(QIODevice::ReadOnly)) continue; diff --git a/tests/auto/corelib/io/qprocess/testForwarding/testForwarding.pro b/tests/auto/corelib/io/qprocess/testForwarding/testForwarding.pro deleted file mode 100644 index 4d91e0cf36..0000000000 --- a/tests/auto/corelib/io/qprocess/testForwarding/testForwarding.pro +++ /dev/null @@ -1,4 +0,0 @@ -SOURCES = main.cpp -CONFIG += cmdline -DESTDIR = ./ -QT = core diff --git a/tests/auto/corelib/io/qprocess/testForwardingHelper/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testForwardingHelper/CMakeLists.txt new file mode 100644 index 0000000000..9f5f064307 --- /dev/null +++ b/tests/auto/corelib/io/qprocess/testForwardingHelper/CMakeLists.txt @@ -0,0 +1,13 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## testForwardingHelper Binary: +##################################################################### + +qt_internal_add_executable(testForwardingHelper + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + CORE_LIBRARY None + SOURCES + main.cpp +) diff --git a/tests/auto/corelib/io/qprocess/testForwardingHelper/main.cpp b/tests/auto/corelib/io/qprocess/testForwardingHelper/main.cpp index 682ca7346b..4b4d9d4715 100644 --- a/tests/auto/corelib/io/qprocess/testForwardingHelper/main.cpp +++ b/tests/auto/corelib/io/qprocess/testForwardingHelper/main.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2018 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <fstream> #include <stdio.h> @@ -36,8 +11,8 @@ int main(int argc, char *argv[]) return 1; } fputs("out data", stdout); - fputs("err data", stderr); fflush(stdout); + fputs("err data", stderr); fflush(stderr); std::ofstream out(argv[1]); out << "That's all folks!"; diff --git a/tests/auto/corelib/io/qprocess/testForwardingHelper/testForwardingHelper.pro b/tests/auto/corelib/io/qprocess/testForwardingHelper/testForwardingHelper.pro deleted file mode 100644 index 6a23e52d95..0000000000 --- a/tests/auto/corelib/io/qprocess/testForwardingHelper/testForwardingHelper.pro +++ /dev/null @@ -1,4 +0,0 @@ -SOURCES = main.cpp -CONFIG -= qt -CONFIG += cmdline -DESTDIR = ./ diff --git a/tests/auto/corelib/io/qprocess/testGuiProcess/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testGuiProcess/CMakeLists.txt new file mode 100644 index 0000000000..781f49e515 --- /dev/null +++ b/tests/auto/corelib/io/qprocess/testGuiProcess/CMakeLists.txt @@ -0,0 +1,15 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## testGuiProcess Binary: +##################################################################### + +qt_internal_add_executable(testGuiProcess + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + SOURCES + main.cpp + LIBRARIES + Qt::Gui + Qt::Widgets +) diff --git a/tests/auto/corelib/io/qprocess/testGuiProcess/main.cpp b/tests/auto/corelib/io/qprocess/testGuiProcess/main.cpp index 98babfacb8..1c65268511 100644 --- a/tests/auto/corelib/io/qprocess/testGuiProcess/main.cpp +++ b/tests/auto/corelib/io/qprocess/testGuiProcess/main.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QtWidgets/QApplication> #include <QtWidgets/QLabel> #include <stdio.h> diff --git a/tests/auto/corelib/io/qprocess/testGuiProcess/testGuiProcess.pro b/tests/auto/corelib/io/qprocess/testGuiProcess/testGuiProcess.pro deleted file mode 100644 index ef438d6399..0000000000 --- a/tests/auto/corelib/io/qprocess/testGuiProcess/testGuiProcess.pro +++ /dev/null @@ -1,4 +0,0 @@ -SOURCES += main.cpp -QT += widgets -CONFIG += cmdline -DESTDIR = ./ diff --git a/tests/auto/corelib/io/qprocess/testProcessCrash/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testProcessCrash/CMakeLists.txt new file mode 100644 index 0000000000..2f167899eb --- /dev/null +++ b/tests/auto/corelib/io/qprocess/testProcessCrash/CMakeLists.txt @@ -0,0 +1,13 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## testProcessCrash Binary: +##################################################################### + +qt_internal_add_executable(testProcessCrash + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + CORE_LIBRARY None + SOURCES + main.cpp +) diff --git a/tests/auto/corelib/io/qprocess/testProcessCrash/main.cpp b/tests/auto/corelib/io/qprocess/testProcessCrash/main.cpp index 262db73d72..a5f1eef88a 100644 --- a/tests/auto/corelib/io/qprocess/testProcessCrash/main.cpp +++ b/tests/auto/corelib/io/qprocess/testProcessCrash/main.cpp @@ -1,40 +1,14 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// Copyright (C) 2020 Intel Corporation. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only - -struct Foo -{ - int i; -}; +#include "../crasher.h" +using namespace tst_QProcessCrash; int main() { - *(volatile char*)0 = 0; - Foo *f = 0; - return f->i; + [[maybe_unused]] // NoCoreDumps may be an empty struct, not a RAII class + NoCoreDumps disableCoreDumps; + crash(); + return 0; } diff --git a/tests/auto/corelib/io/qprocess/testProcessCrash/testProcessCrash.pro b/tests/auto/corelib/io/qprocess/testProcessCrash/testProcessCrash.pro deleted file mode 100644 index 640ce4cd09..0000000000 --- a/tests/auto/corelib/io/qprocess/testProcessCrash/testProcessCrash.pro +++ /dev/null @@ -1,5 +0,0 @@ -SOURCES = main.cpp -CONFIG += cmdline -CONFIG -= qt - -DESTDIR = ./ diff --git a/tests/auto/corelib/io/qprocess/testProcessDeadWhileReading/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testProcessDeadWhileReading/CMakeLists.txt new file mode 100644 index 0000000000..bdd82c6419 --- /dev/null +++ b/tests/auto/corelib/io/qprocess/testProcessDeadWhileReading/CMakeLists.txt @@ -0,0 +1,13 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## testProcessDeadWhileReading Binary: +##################################################################### + +qt_internal_add_executable(testProcessDeadWhileReading + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + CORE_LIBRARY None + SOURCES + main.cpp +) diff --git a/tests/auto/corelib/io/qprocess/testProcessDeadWhileReading/main.cpp b/tests/auto/corelib/io/qprocess/testProcessDeadWhileReading/main.cpp index eb780fbc3a..0add9d56de 100644 --- a/tests/auto/corelib/io/qprocess/testProcessDeadWhileReading/main.cpp +++ b/tests/auto/corelib/io/qprocess/testProcessDeadWhileReading/main.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <stdio.h> diff --git a/tests/auto/corelib/io/qprocess/testProcessDeadWhileReading/testProcessDeadWhileReading.pro b/tests/auto/corelib/io/qprocess/testProcessDeadWhileReading/testProcessDeadWhileReading.pro deleted file mode 100644 index c7be60a82d..0000000000 --- a/tests/auto/corelib/io/qprocess/testProcessDeadWhileReading/testProcessDeadWhileReading.pro +++ /dev/null @@ -1,5 +0,0 @@ -SOURCES = main.cpp -CONFIG -= qt -CONFIG += cmdline - -DESTDIR = ./ diff --git a/tests/auto/corelib/io/qprocess/testProcessEOF/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testProcessEOF/CMakeLists.txt new file mode 100644 index 0000000000..8914bf181d --- /dev/null +++ b/tests/auto/corelib/io/qprocess/testProcessEOF/CMakeLists.txt @@ -0,0 +1,13 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## testProcessEOF Binary: +##################################################################### + +qt_internal_add_executable(testProcessEOF + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + CORE_LIBRARY None + SOURCES + main.cpp +) diff --git a/tests/auto/corelib/io/qprocess/testProcessEOF/main.cpp b/tests/auto/corelib/io/qprocess/testProcessEOF/main.cpp index 4fb2e29c2d..a0efdbd271 100644 --- a/tests/auto/corelib/io/qprocess/testProcessEOF/main.cpp +++ b/tests/auto/corelib/io/qprocess/testProcessEOF/main.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <stdio.h> diff --git a/tests/auto/corelib/io/qprocess/testProcessEOF/testProcessEOF.pro b/tests/auto/corelib/io/qprocess/testProcessEOF/testProcessEOF.pro deleted file mode 100644 index 6a23e52d95..0000000000 --- a/tests/auto/corelib/io/qprocess/testProcessEOF/testProcessEOF.pro +++ /dev/null @@ -1,4 +0,0 @@ -SOURCES = main.cpp -CONFIG -= qt -CONFIG += cmdline -DESTDIR = ./ diff --git a/tests/auto/corelib/io/qprocess/testProcessEcho/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testProcessEcho/CMakeLists.txt new file mode 100644 index 0000000000..071156f759 --- /dev/null +++ b/tests/auto/corelib/io/qprocess/testProcessEcho/CMakeLists.txt @@ -0,0 +1,13 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## testProcessEcho Binary: +##################################################################### + +qt_internal_add_executable(testProcessEcho + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + CORE_LIBRARY None + SOURCES + main.cpp +) diff --git a/tests/auto/corelib/io/qprocess/testProcessEcho/main.cpp b/tests/auto/corelib/io/qprocess/testProcessEcho/main.cpp index e18e48e516..7b87380900 100644 --- a/tests/auto/corelib/io/qprocess/testProcessEcho/main.cpp +++ b/tests/auto/corelib/io/qprocess/testProcessEcho/main.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <stdio.h> diff --git a/tests/auto/corelib/io/qprocess/testProcessEcho/testProcessEcho.pro b/tests/auto/corelib/io/qprocess/testProcessEcho/testProcessEcho.pro deleted file mode 100644 index 6a23e52d95..0000000000 --- a/tests/auto/corelib/io/qprocess/testProcessEcho/testProcessEcho.pro +++ /dev/null @@ -1,4 +0,0 @@ -SOURCES = main.cpp -CONFIG -= qt -CONFIG += cmdline -DESTDIR = ./ diff --git a/tests/auto/corelib/io/qprocess/testProcessEcho2/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testProcessEcho2/CMakeLists.txt new file mode 100644 index 0000000000..9f71b1ebb6 --- /dev/null +++ b/tests/auto/corelib/io/qprocess/testProcessEcho2/CMakeLists.txt @@ -0,0 +1,13 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## testProcessEcho2 Binary: +##################################################################### + +qt_internal_add_executable(testProcessEcho2 + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + CORE_LIBRARY None + SOURCES + main.cpp +) diff --git a/tests/auto/corelib/io/qprocess/testProcessEcho2/main.cpp b/tests/auto/corelib/io/qprocess/testProcessEcho2/main.cpp index ce4494b048..b67480e6bb 100644 --- a/tests/auto/corelib/io/qprocess/testProcessEcho2/main.cpp +++ b/tests/auto/corelib/io/qprocess/testProcessEcho2/main.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <stdio.h> diff --git a/tests/auto/corelib/io/qprocess/testProcessEcho2/testProcessEcho2.pro b/tests/auto/corelib/io/qprocess/testProcessEcho2/testProcessEcho2.pro deleted file mode 100644 index 6a23e52d95..0000000000 --- a/tests/auto/corelib/io/qprocess/testProcessEcho2/testProcessEcho2.pro +++ /dev/null @@ -1,4 +0,0 @@ -SOURCES = main.cpp -CONFIG -= qt -CONFIG += cmdline -DESTDIR = ./ diff --git a/tests/auto/corelib/io/qprocess/testProcessEcho3/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testProcessEcho3/CMakeLists.txt new file mode 100644 index 0000000000..badc9ef82d --- /dev/null +++ b/tests/auto/corelib/io/qprocess/testProcessEcho3/CMakeLists.txt @@ -0,0 +1,13 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## testProcessEcho3 Binary: +##################################################################### + +qt_internal_add_executable(testProcessEcho3 + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + CORE_LIBRARY None + SOURCES + main.cpp +) diff --git a/tests/auto/corelib/io/qprocess/testProcessEcho3/main.cpp b/tests/auto/corelib/io/qprocess/testProcessEcho3/main.cpp index dfd6e009db..161f8bd547 100644 --- a/tests/auto/corelib/io/qprocess/testProcessEcho3/main.cpp +++ b/tests/auto/corelib/io/qprocess/testProcessEcho3/main.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <stdio.h> diff --git a/tests/auto/corelib/io/qprocess/testProcessEcho3/testProcessEcho3.pro b/tests/auto/corelib/io/qprocess/testProcessEcho3/testProcessEcho3.pro deleted file mode 100644 index 6a23e52d95..0000000000 --- a/tests/auto/corelib/io/qprocess/testProcessEcho3/testProcessEcho3.pro +++ /dev/null @@ -1,4 +0,0 @@ -SOURCES = main.cpp -CONFIG -= qt -CONFIG += cmdline -DESTDIR = ./ diff --git a/tests/auto/corelib/io/qprocess/testProcessEchoGui/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testProcessEchoGui/CMakeLists.txt new file mode 100644 index 0000000000..43663e62e8 --- /dev/null +++ b/tests/auto/corelib/io/qprocess/testProcessEchoGui/CMakeLists.txt @@ -0,0 +1,15 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## testProcessEchoGui Binary: +##################################################################### + +qt_internal_add_executable(testProcessEchoGui + GUI + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + CORE_LIBRARY None + SOURCES + main_win.cpp +) +target_link_libraries(testProcessEchoGui PRIVATE user32) diff --git a/tests/auto/corelib/io/qprocess/testProcessEchoGui/main_win.cpp b/tests/auto/corelib/io/qprocess/testProcessEchoGui/main_win.cpp index abe957c1ea..ab54e4a328 100644 --- a/tests/auto/corelib/io/qprocess/testProcessEchoGui/main_win.cpp +++ b/tests/auto/corelib/io/qprocess/testProcessEchoGui/main_win.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <windows.h> diff --git a/tests/auto/corelib/io/qprocess/testProcessEchoGui/testProcessEchoGui.pro b/tests/auto/corelib/io/qprocess/testProcessEchoGui/testProcessEchoGui.pro deleted file mode 100644 index e41ed0a425..0000000000 --- a/tests/auto/corelib/io/qprocess/testProcessEchoGui/testProcessEchoGui.pro +++ /dev/null @@ -1,8 +0,0 @@ -win32 { - SOURCES = main_win.cpp - QMAKE_USE += user32 -} - -CONFIG -= qt app_bundle -DESTDIR = ./ -DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/corelib/io/qprocess/testProcessEnvironment/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testProcessEnvironment/CMakeLists.txt new file mode 100644 index 0000000000..9069bbc7c8 --- /dev/null +++ b/tests/auto/corelib/io/qprocess/testProcessEnvironment/CMakeLists.txt @@ -0,0 +1,13 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## testProcessEnvironment Binary: +##################################################################### + +qt_internal_add_executable(testProcessEnvironment + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + CORE_LIBRARY None + SOURCES + main.cpp +) diff --git a/tests/auto/corelib/io/qprocess/testProcessEnvironment/main.cpp b/tests/auto/corelib/io/qprocess/testProcessEnvironment/main.cpp index 9f13f5c00f..dae98c3af6 100644 --- a/tests/auto/corelib/io/qprocess/testProcessEnvironment/main.cpp +++ b/tests/auto/corelib/io/qprocess/testProcessEnvironment/main.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <stdio.h> #include <stdlib.h> diff --git a/tests/auto/corelib/io/qprocess/testProcessEnvironment/testProcessEnvironment.pro b/tests/auto/corelib/io/qprocess/testProcessEnvironment/testProcessEnvironment.pro deleted file mode 100644 index 6a23e52d95..0000000000 --- a/tests/auto/corelib/io/qprocess/testProcessEnvironment/testProcessEnvironment.pro +++ /dev/null @@ -1,4 +0,0 @@ -SOURCES = main.cpp -CONFIG -= qt -CONFIG += cmdline -DESTDIR = ./ diff --git a/tests/auto/corelib/io/qprocess/testProcessHang/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testProcessHang/CMakeLists.txt new file mode 100644 index 0000000000..cb6f490c40 --- /dev/null +++ b/tests/auto/corelib/io/qprocess/testProcessHang/CMakeLists.txt @@ -0,0 +1,13 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## testProcessHang Binary: +##################################################################### + +qt_internal_add_executable(testProcessHang + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + CORE_LIBRARY None + SOURCES + main.cpp +) diff --git a/tests/auto/corelib/io/qprocess/testProcessHang/main.cpp b/tests/auto/corelib/io/qprocess/testProcessHang/main.cpp index cb904134f9..89fcadfb8f 100644 --- a/tests/auto/corelib/io/qprocess/testProcessHang/main.cpp +++ b/tests/auto/corelib/io/qprocess/testProcessHang/main.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 Intel Corporation. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 Intel Corporation. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <stdio.h> diff --git a/tests/auto/corelib/io/qprocess/testProcessHang/testProcessHang.pro b/tests/auto/corelib/io/qprocess/testProcessHang/testProcessHang.pro deleted file mode 100644 index 6a23e52d95..0000000000 --- a/tests/auto/corelib/io/qprocess/testProcessHang/testProcessHang.pro +++ /dev/null @@ -1,4 +0,0 @@ -SOURCES = main.cpp -CONFIG -= qt -CONFIG += cmdline -DESTDIR = ./ diff --git a/tests/auto/corelib/io/qprocess/testProcessNormal/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testProcessNormal/CMakeLists.txt new file mode 100644 index 0000000000..7eb6388792 --- /dev/null +++ b/tests/auto/corelib/io/qprocess/testProcessNormal/CMakeLists.txt @@ -0,0 +1,13 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## testProcessNormal Binary: +##################################################################### + +qt_internal_add_executable(testProcessNormal + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + CORE_LIBRARY None + SOURCES + main.cpp +) diff --git a/tests/auto/corelib/io/qprocess/testProcessNormal/main.cpp b/tests/auto/corelib/io/qprocess/testProcessNormal/main.cpp index 4611ed4547..a714713cf2 100644 --- a/tests/auto/corelib/io/qprocess/testProcessNormal/main.cpp +++ b/tests/auto/corelib/io/qprocess/testProcessNormal/main.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only int main() diff --git a/tests/auto/corelib/io/qprocess/testProcessNormal/testProcessNormal.pro b/tests/auto/corelib/io/qprocess/testProcessNormal/testProcessNormal.pro deleted file mode 100644 index 7e1119c117..0000000000 --- a/tests/auto/corelib/io/qprocess/testProcessNormal/testProcessNormal.pro +++ /dev/null @@ -1,6 +0,0 @@ -SOURCES = main.cpp -CONFIG += cmdline -CONFIG -= qt - -DESTDIR = ./ -QT = core diff --git a/tests/auto/corelib/io/qprocess/testProcessOutput/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testProcessOutput/CMakeLists.txt new file mode 100644 index 0000000000..78005b2b93 --- /dev/null +++ b/tests/auto/corelib/io/qprocess/testProcessOutput/CMakeLists.txt @@ -0,0 +1,13 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## testProcessOutput Binary: +##################################################################### + +qt_internal_add_executable(testProcessOutput + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + CORE_LIBRARY None + SOURCES + main.cpp +) diff --git a/tests/auto/corelib/io/qprocess/testProcessOutput/main.cpp b/tests/auto/corelib/io/qprocess/testProcessOutput/main.cpp index 4934708153..08d059e0f9 100644 --- a/tests/auto/corelib/io/qprocess/testProcessOutput/main.cpp +++ b/tests/auto/corelib/io/qprocess/testProcessOutput/main.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <stdio.h> diff --git a/tests/auto/corelib/io/qprocess/testProcessOutput/testProcessOutput.pro b/tests/auto/corelib/io/qprocess/testProcessOutput/testProcessOutput.pro deleted file mode 100644 index 0bbb6b3c0e..0000000000 --- a/tests/auto/corelib/io/qprocess/testProcessOutput/testProcessOutput.pro +++ /dev/null @@ -1,5 +0,0 @@ -SOURCES = main.cpp -CONFIG -= qt -CONFIG += cmdline -DESTDIR = ./ -QT = core diff --git a/tests/auto/corelib/io/qprocess/testProcessSpacesArgs/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testProcessSpacesArgs/CMakeLists.txt new file mode 100644 index 0000000000..5ea7bf53f4 --- /dev/null +++ b/tests/auto/corelib/io/qprocess/testProcessSpacesArgs/CMakeLists.txt @@ -0,0 +1,25 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +qt_internal_add_executable(nospace + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + CORE_LIBRARY None + SOURCES + main.cpp +) + +qt_internal_add_executable(onespace + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + CORE_LIBRARY None + SOURCES + main.cpp +) +set_target_properties(onespace PROPERTIES OUTPUT_NAME "one space") + +qt_internal_add_executable(twospaces + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + CORE_LIBRARY None + SOURCES + main.cpp +) +set_target_properties(twospaces PROPERTIES OUTPUT_NAME "two space s") diff --git a/tests/auto/corelib/io/qprocess/testProcessSpacesArgs/main.cpp b/tests/auto/corelib/io/qprocess/testProcessSpacesArgs/main.cpp index 0d40a9b83c..2c319fa9af 100644 --- a/tests/auto/corelib/io/qprocess/testProcessSpacesArgs/main.cpp +++ b/tests/auto/corelib/io/qprocess/testProcessSpacesArgs/main.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <stdio.h> diff --git a/tests/auto/corelib/io/qprocess/testProcessSpacesArgs/nospace.pro b/tests/auto/corelib/io/qprocess/testProcessSpacesArgs/nospace.pro deleted file mode 100644 index 7954a2f74b..0000000000 --- a/tests/auto/corelib/io/qprocess/testProcessSpacesArgs/nospace.pro +++ /dev/null @@ -1,6 +0,0 @@ -SOURCES = main.cpp -CONFIG -= qt -CONFIG += cmdline -DESTDIR = ./ -OBJECTS_DIR = $${OBJECTS_DIR}-nospace -DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/corelib/io/qprocess/testProcessSpacesArgs/onespace.pro b/tests/auto/corelib/io/qprocess/testProcessSpacesArgs/onespace.pro deleted file mode 100644 index 44a365c9a5..0000000000 --- a/tests/auto/corelib/io/qprocess/testProcessSpacesArgs/onespace.pro +++ /dev/null @@ -1,8 +0,0 @@ -SOURCES = main.cpp -CONFIG -= qt -CONFIG += cmdline -DESTDIR = ./ -OBJECTS_DIR = $${OBJECTS_DIR}-onespace - -TARGET = "one space" -DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/corelib/io/qprocess/testProcessSpacesArgs/twospaces.pro b/tests/auto/corelib/io/qprocess/testProcessSpacesArgs/twospaces.pro deleted file mode 100644 index bd2db9fb6d..0000000000 --- a/tests/auto/corelib/io/qprocess/testProcessSpacesArgs/twospaces.pro +++ /dev/null @@ -1,9 +0,0 @@ -SOURCES = main.cpp -CONFIG -= qt -CONFIG += cmdline -DESTDIR = ./ -OBJECTS_DIR = $${OBJECTS_DIR}-twospaces - -TARGET = "two space s" -DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 -QT = core diff --git a/tests/auto/corelib/io/qprocess/testSetNamedPipeHandleState/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testSetNamedPipeHandleState/CMakeLists.txt new file mode 100644 index 0000000000..5e532aa017 --- /dev/null +++ b/tests/auto/corelib/io/qprocess/testSetNamedPipeHandleState/CMakeLists.txt @@ -0,0 +1,14 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## testSetNamedPipeHandleState Binary: +##################################################################### + +qt_internal_add_executable(testSetNamedPipeHandleState + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + CORE_LIBRARY None + SOURCES + main.cpp +) +target_link_libraries(testSetNamedPipeHandleState PRIVATE kernel32.lib) diff --git a/tests/auto/corelib/io/qprocess/testSetNamedPipeHandleState/main.cpp b/tests/auto/corelib/io/qprocess/testSetNamedPipeHandleState/main.cpp index 488b03ab57..ace55e9058 100644 --- a/tests/auto/corelib/io/qprocess/testSetNamedPipeHandleState/main.cpp +++ b/tests/auto/corelib/io/qprocess/testSetNamedPipeHandleState/main.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <windows.h> diff --git a/tests/auto/corelib/io/qprocess/testSetNamedPipeHandleState/testSetNamedPipeHandleState.pro b/tests/auto/corelib/io/qprocess/testSetNamedPipeHandleState/testSetNamedPipeHandleState.pro deleted file mode 100644 index 6a23e52d95..0000000000 --- a/tests/auto/corelib/io/qprocess/testSetNamedPipeHandleState/testSetNamedPipeHandleState.pro +++ /dev/null @@ -1,4 +0,0 @@ -SOURCES = main.cpp -CONFIG -= qt -CONFIG += cmdline -DESTDIR = ./ diff --git a/tests/auto/corelib/io/qprocess/testSetWorkingDirectory/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testSetWorkingDirectory/CMakeLists.txt new file mode 100644 index 0000000000..f5b9c22c90 --- /dev/null +++ b/tests/auto/corelib/io/qprocess/testSetWorkingDirectory/CMakeLists.txt @@ -0,0 +1,12 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## testSetWorkingDirectory Binary: +##################################################################### + +qt_internal_add_executable(testSetWorkingDirectory + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + SOURCES + main.cpp +) diff --git a/tests/auto/corelib/io/qprocess/testSetWorkingDirectory/main.cpp b/tests/auto/corelib/io/qprocess/testSetWorkingDirectory/main.cpp index 37d7deb1ac..c12ca2de7a 100644 --- a/tests/auto/corelib/io/qprocess/testSetWorkingDirectory/main.cpp +++ b/tests/auto/corelib/io/qprocess/testSetWorkingDirectory/main.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QCoreApplication> diff --git a/tests/auto/corelib/io/qprocess/testSetWorkingDirectory/testSetWorkingDirectory.pro b/tests/auto/corelib/io/qprocess/testSetWorkingDirectory/testSetWorkingDirectory.pro deleted file mode 100644 index 4d91e0cf36..0000000000 --- a/tests/auto/corelib/io/qprocess/testSetWorkingDirectory/testSetWorkingDirectory.pro +++ /dev/null @@ -1,4 +0,0 @@ -SOURCES = main.cpp -CONFIG += cmdline -DESTDIR = ./ -QT = core diff --git a/tests/auto/corelib/io/qprocess/testSoftExit/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testSoftExit/CMakeLists.txt new file mode 100644 index 0000000000..44099dcab1 --- /dev/null +++ b/tests/auto/corelib/io/qprocess/testSoftExit/CMakeLists.txt @@ -0,0 +1,23 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## testSoftExit Binary: +##################################################################### + +qt_internal_add_executable(testSoftExit + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + CORE_LIBRARY None +) + +qt_internal_extend_target(testSoftExit CONDITION WIN32 + SOURCES + main_win.cpp + LIBRARIES + user32 +) + +qt_internal_extend_target(testSoftExit CONDITION UNIX + SOURCES + main_unix.cpp +) diff --git a/tests/auto/corelib/io/qprocess/testSoftExit/main_unix.cpp b/tests/auto/corelib/io/qprocess/testSoftExit/main_unix.cpp index ed0f16ac17..6d5078e75e 100644 --- a/tests/auto/corelib/io/qprocess/testSoftExit/main_unix.cpp +++ b/tests/auto/corelib/io/qprocess/testSoftExit/main_unix.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <sys/types.h> diff --git a/tests/auto/corelib/io/qprocess/testSoftExit/main_win.cpp b/tests/auto/corelib/io/qprocess/testSoftExit/main_win.cpp index 898029483f..cbef8418e6 100644 --- a/tests/auto/corelib/io/qprocess/testSoftExit/main_win.cpp +++ b/tests/auto/corelib/io/qprocess/testSoftExit/main_win.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <windows.h> diff --git a/tests/auto/corelib/io/qprocess/testSoftExit/testSoftExit.pro b/tests/auto/corelib/io/qprocess/testSoftExit/testSoftExit.pro deleted file mode 100644 index 964c47f6ae..0000000000 --- a/tests/auto/corelib/io/qprocess/testSoftExit/testSoftExit.pro +++ /dev/null @@ -1,12 +0,0 @@ -win32 { - SOURCES = main_win.cpp - QMAKE_USE += user32 -} -unix { - SOURCES = main_unix.cpp -} - -CONFIG -= qt -CONFIG += cmdline -DESTDIR = ./ -QT = core diff --git a/tests/auto/corelib/io/qprocess/testSpaceInName/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testSpaceInName/CMakeLists.txt new file mode 100644 index 0000000000..9cc05bfc3d --- /dev/null +++ b/tests/auto/corelib/io/qprocess/testSpaceInName/CMakeLists.txt @@ -0,0 +1,15 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## testSpaceInName Binary: +##################################################################### + +qt_internal_add_executable(testSpaceInName + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + CORE_LIBRARY None + SOURCES + main.cpp +) +set_property(TARGET testSpaceInName PROPERTY + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../test Space In Name") diff --git a/tests/auto/corelib/io/qprocess/testSpaceInName/main.cpp b/tests/auto/corelib/io/qprocess/testSpaceInName/main.cpp index 0e2374de06..ca54a6bfde 100644 --- a/tests/auto/corelib/io/qprocess/testSpaceInName/main.cpp +++ b/tests/auto/corelib/io/qprocess/testSpaceInName/main.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <stdio.h> diff --git a/tests/auto/corelib/io/qprocess/testSpaceInName/testSpaceInName.pro b/tests/auto/corelib/io/qprocess/testSpaceInName/testSpaceInName.pro deleted file mode 100644 index 48f28c4c8b..0000000000 --- a/tests/auto/corelib/io/qprocess/testSpaceInName/testSpaceInName.pro +++ /dev/null @@ -1,5 +0,0 @@ -SOURCES = main.cpp -CONFIG -= qt -CONFIG += cmdline -DESTDIR = "../test Space In Name" -QT = core diff --git a/tests/auto/corelib/io/qprocess/testUnixProcessParameters/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testUnixProcessParameters/CMakeLists.txt new file mode 100644 index 0000000000..9b6c48933c --- /dev/null +++ b/tests/auto/corelib/io/qprocess/testUnixProcessParameters/CMakeLists.txt @@ -0,0 +1,13 @@ +# Copyright (C) 2023 Intel Corporation. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## testProcessNormal Binary: +##################################################################### + +qt_internal_add_executable(testUnixProcessParameters + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + CORE_LIBRARY None + SOURCES + main.cpp +) diff --git a/tests/auto/corelib/io/qprocess/testUnixProcessParameters/main.cpp b/tests/auto/corelib/io/qprocess/testUnixProcessParameters/main.cpp new file mode 100644 index 0000000000..42a173debe --- /dev/null +++ b/tests/auto/corelib/io/qprocess/testUnixProcessParameters/main.cpp @@ -0,0 +1,109 @@ +// Copyright (C) 2023 Intel Corporation. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <string_view> + +#include <errno.h> +#include <fcntl.h> +#include <sched.h> +#include <signal.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/resource.h> +#include <unistd.h> + +int main(int argc, char **argv) +{ + if (argc < 2) { + printf("Usage: %s command [extra]\nSee source code for commands\n", + argv[0]); + return EXIT_FAILURE; + } + + std::string_view cmd = argv[1]; + errno = 0; + + if (cmd.size() == 0) { + // just checking that we did get here + return EXIT_SUCCESS; + } + + if (cmd == "reset-ids") { + if (getuid() == geteuid() && getgid() == getegid()) + return EXIT_SUCCESS; + fprintf(stderr, "Real: %d %d; Effective: %d %d\n", + getuid(), getgid(), geteuid(), getegid()); + return EXIT_FAILURE; + } + + if (cmd == "reset-sighand") { + bool ok = true; + + // confirm our signal block mask is empty + sigset_t set; + sigprocmask(SIG_SETMASK, nullptr, &set); + for (int signo = 1; signo < NSIG; ++signo) { + if (sigismember(&set, signo)) { + fprintf(stderr, "'%s' is blocked.\n", strsignal(signo)); + ok = false; + } + } + + // confirm SIGUSR1 was not ignored + struct sigaction action; + sigaction(SIGUSR1, nullptr, &action); + if (action.sa_handler != SIG_DFL) { + fprintf(stderr, "SIGUSR1 is SIG_IGN\n"); + ok = false; + } + return ok ? EXIT_SUCCESS : EXIT_FAILURE; + } + + if (cmd == "ignore-sigpipe") { + // confirm SIGPIPE was ignored + struct sigaction action; + sigaction(SIGPIPE, nullptr, &action); + if (action.sa_handler == SIG_IGN) + return EXIT_SUCCESS; + fprintf(stderr, "SIGPIPE is SIG_DFL\n"); + return EXIT_FAILURE; + } + + if (cmd == "file-descriptors") { + int fd = atoi(argv[2]); + if (close(fd) < 0 && errno == EBADF) + return EXIT_SUCCESS; + fprintf(stderr, "%d is a valid file descriptor\n", fd); + return EXIT_FAILURE; + } + + if (cmd == "file-descriptors2") { + int fd1 = atoi(argv[2]); // should be open + int fd2 = atoi(argv[3]); // should be closed + if (close(fd1) < 0) + fprintf(stderr, "%d was not a valid file descriptor\n", fd1); + if (close(fd2) == 0 || errno != EBADF) + fprintf(stderr, "%d is a valid file descriptor\n", fd2); + return EXIT_SUCCESS; + } + + if (cmd == "noctty") { + int fd = open("/dev/tty", O_RDONLY); + if (fd == -1) + return EXIT_SUCCESS; + fprintf(stderr, "Could open /dev/tty\n"); + return EXIT_FAILURE; + } + + if (cmd == "setsid") { + pid_t pgid = getpgrp(); + if (pgid == getpid()) + return EXIT_SUCCESS; + fprintf(stderr, "Process group was %d\n", pgid); + return EXIT_FAILURE; + } + + fprintf(stderr, "Unknown command \"%s\"", cmd.data()); + return EXIT_FAILURE; +} diff --git a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp index e799369c8a..316c388bc8 100644 --- a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp +++ b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp @@ -1,49 +1,37 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Copyright (C) 2016 Intel Corporation. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <emulationdetector.h> - -#include <QtTest/QtTest> +// Copyright (C) 2021 The Qt Company Ltd. +// Copyright (C) 2022 Intel Corporation. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QTest> +#include <QTestEventLoop> +#include <QSignalSpy> + #include <QtCore/QProcess> #include <QtCore/QDir> #include <QtCore/QElapsedTimer> #include <QtCore/QFile> #include <QtCore/QThread> #include <QtCore/QTemporaryDir> -#include <QtCore/QRegExp> +#include <QtCore/QRegularExpression> #include <QtCore/QDebug> #include <QtCore/QMetaType> +#include <QtCore/QScopeGuard> #include <QtNetwork/QHostInfo> + +#include <qplatformdefs.h> +#ifdef Q_OS_UNIX +# include <private/qcore_unix_p.h> +# include <sys/wait.h> +#endif + +#include <QtTest/private/qemulationdetector_p.h> + #include <stdlib.h> -typedef void (QProcess::*QProcessFinishedSignal1)(int); -typedef void (QProcess::*QProcessFinishedSignal2)(int, QProcess::ExitStatus); +#include "crasher.h" + +using namespace Qt::StringLiterals; + typedef void (QProcess::*QProcessErrorSignal)(QProcess::ProcessError); class tst_QProcess : public QObject @@ -59,6 +47,8 @@ private slots: void getSetCheck(); void constructing(); void simpleStart(); + void startCommand(); + void startCommandEmptyString(); void startWithOpen(); void startWithOldOpen(); void execute(); @@ -99,8 +89,11 @@ private slots: void environmentIsSorted(); void spaceInName(); void setStandardInputFile(); + void setStandardInputFileFailure(); void setStandardOutputFile_data(); void setStandardOutputFile(); + void setStandardOutputFileFailure_data() { setStandardOutputFile_data(); } + void setStandardOutputFileFailure(); void setStandardOutputFileNullDevice(); void setStandardOutputFileAndWaitForBytesWritten(); void setStandardOutputProcess_data(); @@ -111,6 +104,7 @@ private slots: void discardUnwantedOutput(); void setWorkingDirectory(); void setNonExistentWorkingDirectory(); + void detachedSetNonExistentWorkingDirectory(); void exitStatus_data(); void exitStatus(); @@ -125,6 +119,22 @@ private slots: void nativeArguments(); void createProcessArgumentsModifier(); #endif // Q_OS_WIN +#if defined(Q_OS_UNIX) + void setChildProcessModifier_data(); + void setChildProcessModifier(); + void failChildProcessModifier_data() { setChildProcessModifier_data(); } + void failChildProcessModifier(); + void throwInChildProcessModifier(); + void terminateInChildProcessModifier_data(); + void terminateInChildProcessModifier(); + void raiseInChildProcessModifier(); + void unixProcessParameters_data(); + void unixProcessParameters(); + void impossibleUnixProcessParameters_data(); + void impossibleUnixProcessParameters(); + void unixProcessParametersAndChildModifier(); + void unixProcessParametersOtherFileDescriptors(); +#endif void exitCodeTest(); void systemEnvironment(); void lockupsInStartDetached(); @@ -142,6 +152,8 @@ private slots: void startStopStartStopBuffers(); void processEventsInAReadyReadSlot_data(); void processEventsInAReadyReadSlot(); + void startFromCurrentWorkingDir_data(); + void startFromCurrentWorkingDir(); // keep these at the end, since they use lots of processes and sometimes // caused obscure failures to occur in tests that followed them (esp. on the Mac) @@ -151,13 +163,6 @@ private slots: void failToStartEmptyArgs_data(); void failToStartEmptyArgs(); -#if QT_DEPRECATED_SINCE(5, 13) - void crashTest2_deprecated(); - void restartProcessDeadlock_deprecated(); - void waitForReadyReadInAReadyReadSlot_deprecated(); - void finishProcessBeforeReadingDone_deprecated(); -#endif - protected slots: void readFromProcess(); void exitLoopSlot(); @@ -167,16 +172,28 @@ protected slots: void waitForBytesWrittenInABytesWrittenSlotSlot(); private: + QString nonExistentFileName = u"/this/file/cant/exist/hopefully"_s; + qint64 bytesAvailable; QTemporaryDir m_temporaryDir; + bool haveWorkingVFork = false; }; void tst_QProcess::initTestCase() { +#if defined(QT_ASAN_ENABLED) + QSKIP("Skipping QProcess tests under ASAN as they are flaky (QTBUG-109329)"); +#endif QVERIFY2(m_temporaryDir.isValid(), qPrintable(m_temporaryDir.errorString())); // chdir to our testdata path and execute helper apps relative to that. QString testdata_dir = QFileInfo(QFINDTESTDATA("testProcessNormal")).absolutePath(); QVERIFY2(QDir::setCurrent(testdata_dir), qPrintable("Could not chdir to " + testdata_dir)); + +#if defined(Q_OS_LINUX) && QT_CONFIG(forkfd_pidfd) + // see detect_clone_pidfd_support() in forkfd_linux.c for explanation + waitid(/*P_PIDFD*/ idtype_t(3), INT_MAX, NULL, WEXITED|WNOHANG); + haveWorkingVFork = (errno == EBADF); +#endif } void tst_QProcess::cleanupTestCase() @@ -194,14 +211,6 @@ void tst_QProcess::getSetCheck() QProcess obj1; // ProcessChannelMode QProcess::readChannelMode() // void QProcess::setProcessChannelMode(ProcessChannelMode) -#if QT_DEPRECATED_SINCE(5, 13) - obj1.setProcessChannelMode(QProcess::ProcessChannelMode(QProcess::SeparateChannels)); - QCOMPARE(QProcess::ProcessChannelMode(QProcess::SeparateChannels), obj1.readChannelMode()); - obj1.setProcessChannelMode(QProcess::ProcessChannelMode(QProcess::MergedChannels)); - QCOMPARE(QProcess::ProcessChannelMode(QProcess::MergedChannels), obj1.readChannelMode()); - obj1.setProcessChannelMode(QProcess::ProcessChannelMode(QProcess::ForwardedChannels)); - QCOMPARE(QProcess::ProcessChannelMode(QProcess::ForwardedChannels), obj1.readChannelMode()); -#endif obj1.setProcessChannelMode(QProcess::ProcessChannelMode(QProcess::SeparateChannels)); QCOMPARE(QProcess::ProcessChannelMode(QProcess::SeparateChannels), obj1.processChannelMode()); obj1.setProcessChannelMode(QProcess::ProcessChannelMode(QProcess::MergedChannels)); @@ -225,7 +234,7 @@ void tst_QProcess::constructing() QCOMPARE(process.environment(), QStringList()); QCOMPARE(process.error(), QProcess::UnknownError); QCOMPARE(process.state(), QProcess::NotRunning); - QCOMPARE(process.pid(), Q_PID(0)); + QCOMPARE(process.processId(), 0); QCOMPARE(process.readAllStandardOutput(), QByteArray()); QCOMPARE(process.readAllStandardError(), QByteArray()); QCOMPARE(process.canReadLine(), false); @@ -271,12 +280,45 @@ void tst_QProcess::simpleStart() process.reset(); - QCOMPARE(spy.count(), 3); + QCOMPARE(spy.size(), 3); QCOMPARE(qvariant_cast<QProcess::ProcessState>(spy.at(0).at(0)), QProcess::Starting); QCOMPARE(qvariant_cast<QProcess::ProcessState>(spy.at(1).at(0)), QProcess::Running); QCOMPARE(qvariant_cast<QProcess::ProcessState>(spy.at(2).at(0)), QProcess::NotRunning); } +void tst_QProcess::startCommand() +{ + QProcess process; + process.startCommand("testProcessSpacesArgs/nospace foo \"b a r\" baz"); + QVERIFY2(process.waitForStarted(), qPrintable(process.errorString())); + QVERIFY2(process.waitForFinished(), qPrintable(process.errorString())); + QCOMPARE(process.exitStatus(), QProcess::NormalExit); + QCOMPARE(process.exitCode(), 0); + QByteArray actual = process.readAll(); + actual.remove(0, actual.indexOf('|') + 1); + QByteArray expected = "foo|b a r|baz"; + QCOMPARE(actual, expected); +} + +void tst_QProcess::startCommandEmptyString() +{ + static const char warningMsg[] = + "QProcess::startCommand: empty or whitespace-only command was provided"; + QProcess process; + + QTest::ignoreMessage(QtWarningMsg, warningMsg); + process.startCommand(""); + QVERIFY(!process.waitForStarted()); + + QTest::ignoreMessage(QtWarningMsg, warningMsg); + process.startCommand(" "); + QVERIFY(!process.waitForStarted()); + + QTest::ignoreMessage(QtWarningMsg, warningMsg); + process.startCommand("\t\n"); + QVERIFY(!process.waitForStarted()); +} + void tst_QProcess::startWithOpen() { QProcess p; @@ -330,9 +372,7 @@ void tst_QProcess::readFromProcess() { QProcess *process = qobject_cast<QProcess *>(sender()); QVERIFY(process); - int lines = 0; while (process->canReadLine()) { - ++lines; process->readLine(); } } @@ -350,34 +390,24 @@ void tst_QProcess::crashTest() qRegisterMetaType<QProcess::ExitStatus>("QProcess::ExitStatus"); QSignalSpy spy(process.data(), &QProcess::errorOccurred); - QSignalSpy spy2(process.data(), static_cast<QProcessFinishedSignal2>(&QProcess::finished)); + QSignalSpy spy2(process.data(), &QProcess::finished); QVERIFY(spy.isValid()); QVERIFY(spy2.isValid()); -#if QT_DEPRECATED_SINCE(5, 6) - QSignalSpy spy3(process.data(), static_cast<QProcessErrorSignal>(&QProcess::error)); - QVERIFY(spy3.isValid()); -#endif - QVERIFY(process->waitForFinished(30000)); - QCOMPARE(spy.count(), 1); + QCOMPARE(spy.size(), 1); QCOMPARE(*static_cast<const QProcess::ProcessError *>(spy.at(0).at(0).constData()), QProcess::Crashed); - QCOMPARE(spy2.count(), 1); + QCOMPARE(spy2.size(), 1); QCOMPARE(*static_cast<const QProcess::ExitStatus *>(spy2.at(0).at(1).constData()), QProcess::CrashExit); -#if QT_DEPRECATED_SINCE(5, 6) - QCOMPARE(spy3.count(), 1); - QCOMPARE(*static_cast<const QProcess::ProcessError *>(spy3.at(0).at(0).constData()), QProcess::Crashed); -#endif - QCOMPARE(process->exitStatus(), QProcess::CrashExit); // delete process; process.reset(); - QCOMPARE(stateSpy.count(), 3); + QCOMPARE(stateSpy.size(), 3); QCOMPARE(qvariant_cast<QProcess::ProcessState>(stateSpy.at(0).at(0)), QProcess::Starting); QCOMPARE(qvariant_cast<QProcess::ProcessState>(stateSpy.at(1).at(0)), QProcess::Running); QCOMPARE(qvariant_cast<QProcess::ProcessState>(stateSpy.at(2).at(0)), QProcess::NotRunning); @@ -393,22 +423,21 @@ void tst_QProcess::crashTest2() qRegisterMetaType<QProcess::ExitStatus>("QProcess::ExitStatus"); QSignalSpy spy(&process, static_cast<QProcessErrorSignal>(&QProcess::errorOccurred)); - QSignalSpy spy2(&process, static_cast<QProcessFinishedSignal2>(&QProcess::finished)); + QSignalSpy spy2(&process, &QProcess::finished); QVERIFY(spy.isValid()); QVERIFY(spy2.isValid()); - QObject::connect(&process, static_cast<QProcessFinishedSignal2>(&QProcess::finished), - this, &tst_QProcess::exitLoopSlot); + QObject::connect(&process, &QProcess::finished, this, &tst_QProcess::exitLoopSlot); QTestEventLoop::instance().enterLoop(30); if (QTestEventLoop::instance().timeout()) QFAIL("Failed to detect crash : operation timed out"); - QCOMPARE(spy.count(), 1); + QCOMPARE(spy.size(), 1); QCOMPARE(*static_cast<const QProcess::ProcessError *>(spy.at(0).at(0).constData()), QProcess::Crashed); - QCOMPARE(spy2.count(), 1); + QCOMPARE(spy2.size(), 1); QCOMPARE(*static_cast<const QProcess::ExitStatus *>(spy2.at(0).at(1).constData()), QProcess::CrashExit); QCOMPARE(process.exitStatus(), QProcess::CrashExit); @@ -514,9 +543,9 @@ void tst_QProcess::echoTest2() break; } - QVERIFY(spy0.count() > 0); - QVERIFY(spy1.count() > 0); - QVERIFY(spy2.count() > 0); + QVERIFY(spy0.size() > 0); + QVERIFY(spy1.size() > 0); + QVERIFY(spy2.size() > 0); QCOMPARE(process.readAllStandardOutput(), QByteArray("Hello")); QCOMPARE(process.readAllStandardError(), QByteArray("Hello")); @@ -617,8 +646,8 @@ void tst_QProcess::exitStatus() QFETCH(QStringList, processList); QFETCH(QList<QProcess::ExitStatus>, exitStatus); - QCOMPARE(exitStatus.count(), processList.count()); - for (int i = 0; i < processList.count(); ++i) { + QCOMPARE(exitStatus.size(), processList.size()); + for (int i = 0; i < processList.size(); ++i) { process.start(processList.at(i)); QVERIFY(process.waitForStarted(5000)); QVERIFY(process.waitForFinished(30000)); @@ -665,22 +694,14 @@ void tst_QProcess::readTimeoutAndThenCrash() qRegisterMetaType<QProcess::ProcessError>("QProcess::ProcessError"); QSignalSpy spy(&process, &QProcess::errorOccurred); QVERIFY(spy.isValid()); -#if QT_DEPRECATED_SINCE(5, 6) - QSignalSpy spy2(&process, static_cast<QProcessErrorSignal>(&QProcess::error)); - QVERIFY(spy2.isValid()); -#endif process.kill(); QVERIFY(process.waitForFinished(5000)); QCOMPARE(process.state(), QProcess::NotRunning); - QCOMPARE(spy.count(), 1); + QCOMPARE(spy.size(), 1); QCOMPARE(*static_cast<const QProcess::ProcessError *>(spy.at(0).at(0).constData()), QProcess::Crashed); -#if QT_DEPRECATED_SINCE(5, 6) - QCOMPARE(spy2.count(), 1); - QCOMPARE(*static_cast<const QProcess::ProcessError *>(spy2.at(0).at(0).constData()), QProcess::Crashed); -#endif } void tst_QProcess::waitForFinished() @@ -724,15 +745,14 @@ void tst_QProcess::restartProcessDeadlock() // process in the finished() connected slot causes a deadlock // because of the way QProcessManager uses its locks. QProcess process; - connect(&process, static_cast<QProcessFinishedSignal2>(&QProcess::finished), - this, &tst_QProcess::restartProcess); + connect(&process, &QProcess::finished, this, &tst_QProcess::restartProcess); process.start("testProcessEcho/testProcessEcho"); QCOMPARE(process.write("", 1), qlonglong(1)); QVERIFY(process.waitForFinished(5000)); - QObject::disconnect(&process, static_cast<QProcessFinishedSignal2>(&QProcess::finished), nullptr, nullptr); + QObject::disconnect(&process, &QProcess::finished, nullptr, nullptr); QCOMPARE(process.write("", 1), qlonglong(1)); QVERIFY(process.waitForFinished(5000)); @@ -857,7 +877,7 @@ void tst_QProcess::emitReadyReadOnlyWhenNewDataArrives() proc.start("testProcessEcho/testProcessEcho"); - QCOMPARE(spy.count(), 0); + QCOMPARE(spy.size(), 0); proc.write("A"); @@ -865,7 +885,7 @@ void tst_QProcess::emitReadyReadOnlyWhenNewDataArrives() if (QTestEventLoop::instance().timeout()) QFAIL("Operation timed out"); - QCOMPARE(spy.count(), 1); + QCOMPARE(spy.size(), 1); QTestEventLoop::instance().enterLoop(1); QVERIFY(QTestEventLoop::instance().timeout()); @@ -931,8 +951,7 @@ public: SoftExitProcess(int n) : waitedForFinished(false), n(n), killing(false) { - connect(this, static_cast<QProcessFinishedSignal2>(&QProcess::finished), - this, &SoftExitProcess::finishedSlot); + connect(this, &QProcess::finished, this, &SoftExitProcess::finishedSlot); switch (n) { case 0: @@ -1055,6 +1074,16 @@ void tst_QProcess::mergedChannels() QVERIFY(process.waitForStarted(5000)); + { + QCOMPARE(process.write("abc"), qlonglong(3)); + while (process.bytesAvailable() < 6) + QVERIFY(process.waitForReadyRead(5000)); + QCOMPARE(process.readAllStandardOutput(), QByteArray("aabbcc")); + QTest::ignoreMessage(QtWarningMsg, + "QProcess::readAllStandardError: Called with MergedChannels"); + QCOMPARE(process.readAllStandardError(), QByteArray()); + } + for (int i = 0; i < 100; ++i) { QCOMPARE(process.write("abc"), qlonglong(3)); while (process.bytesAvailable() < 6) @@ -1100,6 +1129,10 @@ void tst_QProcess::forwardedChannels_data() << true << int(QProcess::SeparateChannels) << int(QProcess::ManagedInputChannel) << QByteArray("out data") << QByteArray("err data"); + QTest::newRow("detached-merged-forwarding") + << true + << int(QProcess::MergedChannels) << int(QProcess::ManagedInputChannel) + << QByteArray("out data" "err data") << QByteArray(); } void tst_QProcess::forwardedChannels() @@ -1117,9 +1150,8 @@ void tst_QProcess::forwardedChannels() QVERIFY(process.waitForStarted(5000)); QCOMPARE(process.write("input"), 5); process.closeWriteChannel(); - QVERIFY(process.waitForFinished(5000)); + QVERIFY(process.waitForFinished(40000)); // testForwarding has a 30s wait QCOMPARE(process.exitStatus(), QProcess::NormalExit); - QCOMPARE(process.exitCode(), 0); const char *err; switch (process.exitCode()) { case 0: err = "ok"; break; @@ -1172,13 +1204,12 @@ public: } protected: - inline void run() + inline void run() override { exitCode = 90210; QProcess process; - connect(&process, static_cast<QProcessFinishedSignal2>(&QProcess::finished), - this, &TestThread::catchExitCode, Qt::DirectConnection); + connect(&process, &QProcess::finished, this, &TestThread::catchExitCode, Qt::DirectConnection); process.start("testProcessEcho/testProcessEcho"); @@ -1209,8 +1240,13 @@ void tst_QProcess::processInAThread() void tst_QProcess::processesInMultipleThreads() { - if (EmulationDetector::isRunningArmOnX86()) - QSKIP("Flakily hangs in QEMU. QTBUG-67760"); + if (QTestPrivate::isRunningArmOnX86()) + QSKIP("Test is too slow to run on emulator"); + +#if defined(Q_OS_QNX) + QSKIP("QNX: Large amount of threads is unstable and do not finish in given time"); +#endif + for (int i = 0; i < 10; ++i) { // run from 1 to 10 threads, but run at least some tests // with more threads than the ideal @@ -1218,18 +1254,16 @@ void tst_QProcess::processesInMultipleThreads() if (i > 7) threadCount = qMax(threadCount, QThread::idealThreadCount() + 2); - QVector<TestThread *> threads(threadCount); + QList<TestThread *> threads(threadCount); + QScopeGuard cleanup([&threads]() { qDeleteAll(threads); }); for (int j = 0; j < threadCount; ++j) threads[j] = new TestThread; for (int j = 0; j < threadCount; ++j) threads[j]->start(); - for (int j = 0; j < threadCount; ++j) { + for (int j = 0; j < threadCount; ++j) QVERIFY(threads[j]->wait(10000)); - } - for (int j = 0; j < threadCount; ++j) { + for (int j = 0; j < threadCount; ++j) QCOMPARE(threads[j]->code(), 0); - } - qDeleteAll(threads); } } @@ -1251,8 +1285,7 @@ void tst_QProcess::waitForReadyReadInAReadyReadSlot() { QProcess process; connect(&process, &QIODevice::readyRead, this, &tst_QProcess::waitForReadyReadInAReadyReadSlotSlot); - connect(&process, static_cast<QProcessFinishedSignal2>(&QProcess::finished), - this, &tst_QProcess::exitLoopSlot); + connect(&process, &QProcess::finished, this, &tst_QProcess::exitLoopSlot); bytesAvailable = 0; process.start("testProcessEcho/testProcessEcho"); @@ -1264,13 +1297,13 @@ void tst_QProcess::waitForReadyReadInAReadyReadSlot() QTestEventLoop::instance().enterLoop(30); QVERIFY(!QTestEventLoop::instance().timeout()); - QCOMPARE(spy.count(), 1); + QCOMPARE(spy.size(), 1); process.disconnect(); QVERIFY(process.waitForFinished(5000)); QCOMPARE(process.exitStatus(), QProcess::NormalExit); QCOMPARE(process.exitCode(), 0); - QVERIFY(process.bytesAvailable() > bytesAvailable); + QVERIFY(process.bytesAvailable() >= bytesAvailable); } void tst_QProcess::waitForReadyReadInAReadyReadSlotSlot() @@ -1280,6 +1313,8 @@ void tst_QProcess::waitForReadyReadInAReadyReadSlotSlot() bytesAvailable = process->bytesAvailable(); process->write("bar", 4); QVERIFY(process->waitForReadyRead(5000)); + QVERIFY(process->bytesAvailable() > bytesAvailable); + bytesAvailable = process->bytesAvailable(); QTestEventLoop::instance().exitLoop(); } @@ -1298,7 +1333,7 @@ void tst_QProcess::waitForBytesWrittenInABytesWrittenSlot() QTestEventLoop::instance().enterLoop(30); QVERIFY(!QTestEventLoop::instance().timeout()); - QCOMPARE(spy.count(), 1); + QCOMPARE(spy.size(), 1); process.write("", 1); process.disconnect(); QVERIFY(process.waitForFinished()); @@ -1372,6 +1407,9 @@ void tst_QProcess::spaceArgsTest() QFETCH(QStringList, args); QFETCH(QString, stringArgs); + auto splitString = QProcess::splitCommand(stringArgs); + QCOMPARE(args, splitString); + QStringList programs; programs << QString::fromLatin1("testProcessSpacesArgs/nospace") << QString::fromLatin1("testProcessSpacesArgs/one space") @@ -1398,28 +1436,6 @@ void tst_QProcess::spaceArgsTest() actual.removeFirst(); QCOMPARE(actual, args); - - if (program.contains(QLatin1Char(' '))) - program = QLatin1Char('"') + program + QLatin1Char('"'); - - if (!stringArgs.isEmpty()) - program += QLatin1Char(' ') + stringArgs; - - errorMessage.clear(); - process.start(program); - started = process.waitForStarted(5000); - if (!started) - errorMessage = startFailMessage(program, process); - - QVERIFY2(started, errorMessage.constData()); - QVERIFY(process.waitForFinished(5000)); - - actual = QString::fromLatin1(process.readAll()).split("|"); - QVERIFY(!actual.isEmpty()); - // not interested in the program name, it might be different. - actual.removeFirst(); - - QCOMPARE(actual, args); } } @@ -1470,11 +1486,484 @@ void tst_QProcess::createProcessArgumentsModifier() } #endif // Q_OS_WIN +#ifdef Q_OS_UNIX +static constexpr int sigs[] = { SIGABRT, SIGILL, SIGSEGV }; +struct DisableCrashLogger +{ + // disable core dumps too + tst_QProcessCrash::NoCoreDumps disableCoreDumps {}; + std::array<struct sigaction, std::size(sigs)> oldhandlers; + DisableCrashLogger() + { + struct sigaction def = {}; + def.sa_handler = SIG_DFL; + for (uint i = 0; i < std::size(sigs); ++i) + sigaction(sigs[i], &def, &oldhandlers[i]); + } + ~DisableCrashLogger() + { + // restore them + for (uint i = 0; i < std::size(sigs); ++i) + sigaction(sigs[i], &oldhandlers[i], nullptr); + } +}; + +QT_BEGIN_NAMESPACE +Q_AUTOTEST_EXPORT bool _qprocessUsingVfork() noexcept; +QT_END_NAMESPACE +static constexpr char messageFromChildProcess[] = "Message from the child process"; +static_assert(std::char_traits<char>::length(messageFromChildProcess) <= PIPE_BUF); +static void childProcessModifier(int fd) +{ + QT_WRITE(fd, messageFromChildProcess, strlen(messageFromChildProcess)); + QT_CLOSE(fd); +} + +void tst_QProcess::setChildProcessModifier_data() +{ + QTest::addColumn<bool>("detached"); + QTest::addColumn<bool>("useVfork"); + QTest::newRow("normal") << false << false; + QTest::newRow("detached") << true << false; + +#ifdef QT_BUILD_INTERNAL + if (_qprocessUsingVfork()) { + QTest::newRow("normal-vfork") << false << true; + QTest::newRow("detached-vfork") << true << true; + } +#endif +} + +void tst_QProcess::setChildProcessModifier() +{ + QFETCH(bool, detached); + QFETCH(bool, useVfork); + int pipes[2] = { -1 , -1 }; + QVERIFY(qt_safe_pipe(pipes) == 0); + + QProcess process; + if (useVfork) + process.setUnixProcessParameters(QProcess::UnixProcessFlag::UseVFork); + process.setChildProcessModifier([pipes]() { + ::childProcessModifier(pipes[1]); + }); + process.setProgram("testProcessNormal/testProcessNormal"); + if (detached) { + process.startDetached(); + } else { + process.start("testProcessNormal/testProcessNormal"); + if (process.state() != QProcess::Starting) + QCOMPARE(process.state(), QProcess::Running); + QVERIFY2(process.waitForStarted(5000), qPrintable(process.errorString())); + QVERIFY2(process.waitForFinished(5000), qPrintable(process.errorString())); + QCOMPARE(process.exitStatus(), QProcess::NormalExit); + QCOMPARE(process.exitCode(), 0); + } + + char buf[sizeof messageFromChildProcess] = {}; + qt_safe_close(pipes[1]); + QCOMPARE(qt_safe_read(pipes[0], buf, sizeof(buf)), qint64(sizeof(messageFromChildProcess)) - 1); + QCOMPARE(buf, messageFromChildProcess); + qt_safe_close(pipes[0]); +} + +void tst_QProcess::failChildProcessModifier() +{ + static const char failureMsg[] = + "Some error message from the child process would go here if this were a " + "real application"; + static_assert(sizeof(failureMsg) < _POSIX_PIPE_BUF / 2, + "Implementation detail: the length of the message is limited"); + + QFETCH(bool, detached); + QFETCH(bool, useVfork); + + QProcess process; + if (useVfork) + process.setUnixProcessParameters(QProcess::UnixProcessFlag::UseVFork); + process.setChildProcessModifier([&process]() { + process.failChildProcessModifier(failureMsg, EPERM); + }); + process.setProgram("testProcessNormal/testProcessNormal"); + + if (detached) { + qint64 pid; + QVERIFY(!process.startDetached(&pid)); + QCOMPARE(pid, -1); + } else { + process.start(); + QVERIFY(!process.waitForStarted(5000)); + } + + QString errMsg = process.errorString(); + QVERIFY2(errMsg.startsWith("Child process modifier reported error: "_L1 + failureMsg), + qPrintable(errMsg)); + QVERIFY2(errMsg.endsWith(strerror(EPERM)), qPrintable(errMsg)); +} + +void tst_QProcess::throwInChildProcessModifier() +{ +#ifndef __cpp_exceptions + Q_SKIP("Exceptions disabled."); +#else + static constexpr char What[] = "tst_QProcess::throwInChildProcessModifier()::MyException"; + struct MyException : std::exception { + const char *what() const noexcept override { return What; } + }; + QProcess process; + process.setChildProcessModifier([]() { + throw MyException(); + }); + process.setProgram("testProcessNormal/testProcessNormal"); + + process.start(); + QVERIFY(!process.waitForStarted(5000)); + QCOMPARE(process.state(), QProcess::NotRunning); + QCOMPARE(process.error(), QProcess::FailedToStart); + QVERIFY2(process.errorString().contains("Child process modifier threw an exception"), + qPrintable(process.errorString())); + QVERIFY2(process.errorString().contains(What), + qPrintable(process.errorString())); + + // try again, to ensure QProcess internal state wasn't corrupted + process.start(); + QVERIFY(!process.waitForStarted(5000)); + QCOMPARE(process.state(), QProcess::NotRunning); + QCOMPARE(process.error(), QProcess::FailedToStart); + QVERIFY2(process.errorString().contains("Child process modifier threw an exception"), + qPrintable(process.errorString())); + QVERIFY2(process.errorString().contains(What), + qPrintable(process.errorString())); +#endif +} + +void tst_QProcess::terminateInChildProcessModifier_data() +{ + using F = std::function<void(void)>; + QTest::addColumn<F>("function"); + QTest::addColumn<QProcess::ExitStatus>("exitStatus"); + QTest::addColumn<bool>("stderrIsEmpty"); + + QTest::newRow("_exit") << F([]() { _exit(0); }) << QProcess::NormalExit << true; + QTest::newRow("abort") << F(std::abort) << QProcess::CrashExit << true; + QTest::newRow("sigkill") << F([]() { raise(SIGKILL); }) << QProcess::CrashExit << true; + QTest::newRow("terminate") << F(std::terminate) << QProcess::CrashExit + << (std::get_terminate() == std::abort); + QTest::newRow("crash") << F([]() { tst_QProcessCrash::crash(); }) << QProcess::CrashExit << true; +} + +void tst_QProcess::terminateInChildProcessModifier() +{ + QFETCH(std::function<void(void)>, function); + QFETCH(QProcess::ExitStatus, exitStatus); + QFETCH(bool, stderrIsEmpty); + + // temporarily disable QTest's crash logger + DisableCrashLogger disableCrashLogging; + + // testForwardingHelper prints to both stdout and stderr, so if we fail to + // fail we should be able to tell too + QProcess process; + process.setChildProcessModifier(function); + process.setProgram("testForwardingHelper/testForwardingHelper"); + process.setArguments({ "/dev/null" }); + + // temporarily disable QTest's crash logger while starting the child process + { + DisableCrashLogger d; + process.start(); + } + + QVERIFY2(process.waitForStarted(5000), qPrintable(process.errorString())); + QVERIFY2(process.waitForFinished(5000), qPrintable(process.errorString())); + QCOMPARE(process.exitStatus(), exitStatus); + QCOMPARE(process.readAllStandardOutput(), QByteArray()); + + // some environments print extra stuff to stderr when we crash +#ifndef Q_OS_QNX + if (!QTestPrivate::isRunningArmOnX86()) { + QByteArray standardError = process.readAllStandardError(); + QVERIFY2(standardError.isEmpty() == stderrIsEmpty, + "stderr was: " + standardError); + } +#endif +} + +void tst_QProcess::raiseInChildProcessModifier() +{ +#ifdef QT_BUILD_INTERNAL + // This is similar to the above, but knowing that raise() doesn't unblock + // signals, unlike abort(), this implies that + // 1) the raise() in the child modifier will not run our handler + // 2) the write() to stdout after that will run + // 3) QProcess resets the signal handlers to the defaults, then unblocks + // 4) at that point, the signal will be delivered to the child, but our + // handler is no longer active so there'll be no write() to stderr + // + // Note for maintenance: if in the future this test causes the parent + // process to die with SIGUSR1, it means the C library is buggy and is + // using a cached PID in the child process after vfork(). + if (!QT_PREPEND_NAMESPACE(_qprocessUsingVfork())) + QSKIP("QProcess will only block Unix signals when using vfork()"); + + // we use SIGUSR1 because QtTest doesn't log it and because its default + // action is termination, not core dumping + struct SigUsr1Handler { + SigUsr1Handler() + { + struct sigaction sa = {}; + sa.sa_flags = SA_RESETHAND; + sa.sa_handler = [](int) { + static const char msg[] = "SIGUSR1 handler was run"; + (void)write(STDERR_FILENO, msg, strlen(msg)); + raise(SIGUSR1); // re-raise + }; + sigaction(SIGUSR1, &sa, nullptr); + } + ~SigUsr1Handler() { restore(); } + static void restore() { signal(SIGUSR1, SIG_DFL); } + } sigUsr1Handler; + + QProcess process; + + // QProcess will block signals with UseVFork + process.setUnixProcessParameters(QProcess::UnixProcessFlag::UseVFork | + QProcess::UnixProcessFlag::ResetSignalHandlers); + process.setChildProcessModifier([]() { + raise(SIGUSR1); + ::childProcessModifier(STDOUT_FILENO); + }); + + // testForwardingHelper prints to both stdout and stderr, so if we fail to + // fail we should be able to tell too + process.setProgram("testForwardingHelper/testForwardingHelper"); + process.setArguments({ "/dev/null" }); + + process.start(); + QVERIFY2(process.waitForStarted(5000), qPrintable(process.errorString())); + QVERIFY2(process.waitForFinished(5000), qPrintable(process.errorString())); + QCOMPARE(process.error(), QProcess::Crashed); + + // ensure the write() from the child modifier DID get run + QCOMPARE(process.readAllStandardOutput(), messageFromChildProcess); + + // some environments print extra stuff to stderr when we crash + if (!QTestPrivate::isRunningArmOnX86()) { + // and write() from the SIGUSR1 handler did not + QCOMPARE(process.readAllStandardError(), QByteArray()); + } +#else + QSKIP("Requires QT_BUILD_INTERNAL symbols"); +#endif +} + +void tst_QProcess::unixProcessParameters_data() +{ + QTest::addColumn<QProcess::UnixProcessParameters>("params"); + QTest::addColumn<QString>("cmd"); + QTest::newRow("defaults") << QProcess::UnixProcessParameters{} << QString(); + + auto addRow = [](const char *cmd, QProcess::UnixProcessFlags flags) { + QProcess::UnixProcessParameters params = {}; + params.flags = flags; + QTest::addRow("%s", cmd) << params << cmd; + }; + using P = QProcess::UnixProcessFlag; + addRow("reset-sighand", P::ResetSignalHandlers); + addRow("ignore-sigpipe", P::IgnoreSigPipe); + addRow("file-descriptors", P::CloseFileDescriptors); + addRow("setsid", P::CreateNewSession); + addRow("reset-ids", P::ResetIds); + + // On FreeBSD, we need to be session leader to disconnect from the CTTY + addRow("noctty", P::DisconnectControllingTerminal | P::CreateNewSession); +} + +void tst_QProcess::unixProcessParameters() +{ + QFETCH(QProcess::UnixProcessParameters, params); + QFETCH(QString, cmd); + + // set up a few things + struct Scope { + int devnull; + struct sigaction old_sigusr1, old_sigpipe; + Scope() + { + int fd = open("/dev/null", O_RDONLY); + devnull = fcntl(fd, F_DUPFD, 100); + close(fd); + + // we ignore SIGUSR1 and reset SIGPIPE to Terminate + struct sigaction act = {}; + sigemptyset(&act.sa_mask); + act.sa_handler = SIG_IGN; + sigaction(SIGUSR1, &act, &old_sigusr1); + act.sa_handler = SIG_DFL; + sigaction(SIGPIPE, &act, &old_sigpipe); + + // and we block SIGUSR2 + sigset_t *set = &act.sa_mask; // reuse this sigset_t + sigaddset(set, SIGUSR2); + sigprocmask(SIG_BLOCK, set, nullptr); + } + ~Scope() + { + if (devnull != -1) + dismiss(); + } + void dismiss() + { + close(devnull); + sigaction(SIGUSR1, &old_sigusr1, nullptr); + sigaction(SIGPIPE, &old_sigpipe, nullptr); + devnull = -1; + + sigset_t *set = &old_sigusr1.sa_mask; // reuse this sigset_t + sigaddset(set, SIGUSR2); + sigprocmask(SIG_BLOCK, set, nullptr); + } + } scope; + + if (params.flags & QProcess::UnixProcessFlag::ResetIds) { + if (getuid() == geteuid() && getgid() == getegid()) + qInfo("Process has identical real and effective IDs; this test will do nothing"); + } + + if (params.flags & QProcess::UnixProcessFlag::DisconnectControllingTerminal) { + if (int fd = open("/dev/tty", O_RDONLY); fd < 0) { + qInfo("Process has no controlling terminal; this test will do nothing"); + close(fd); + } + } + + QProcess process; + process.setUnixProcessParameters(params); + process.setStandardInputFile(QProcess::nullDevice()); // so we can't mess with SIGPIPE + process.setProgram("testUnixProcessParameters/testUnixProcessParameters"); + process.setArguments({ cmd, QString::number(scope.devnull) }); + process.start(); + QVERIFY2(process.waitForStarted(5000), qPrintable(process.errorString())); + QVERIFY(process.waitForFinished(5000)); + + const QString stdErr = process.readAllStandardError(); + QCOMPARE(stdErr, QString()); + QCOMPARE(process.readAll(), QString()); + QCOMPARE(process.exitCode(), 0); + QCOMPARE(process.exitStatus(), QProcess::NormalExit); +} + +void tst_QProcess::impossibleUnixProcessParameters_data() +{ + using P = QProcess::UnixProcessParameters; + QTest::addColumn<P>("params"); + QTest::newRow("setsid") << P{ QProcess::UnixProcessFlag::CreateNewSession }; +} + +void tst_QProcess::impossibleUnixProcessParameters() +{ + QFETCH(QProcess::UnixProcessParameters, params); + + QProcess process; + if (params.flags & QProcess::UnixProcessFlag::CreateNewSession) { + process.setChildProcessModifier([]() { + // double setsid() should cause the second to fail + setsid(); + }); + } + process.setUnixProcessParameters(params); + process.start("testProcessNormal/testProcessNormal"); + + QVERIFY(!process.waitForStarted(5000)); + qDebug() << process.errorString(); +} + +void tst_QProcess::unixProcessParametersAndChildModifier() +{ + static constexpr char message[] = "Message from the handler function\n"; + static_assert(std::char_traits<char>::length(message) <= PIPE_BUF); + QProcess process; + QAtomicInt vforkControl; + int pipes[2]; + + pid_t oldpgid = getpgrp(); + + QVERIFY2(pipe(pipes) == 0, qPrintable(qt_error_string())); + auto pipeGuard0 = qScopeGuard([=] { close(pipes[0]); }); + { + auto pipeGuard1 = qScopeGuard([=] { close(pipes[1]); }); + + // verify that our modifier runs before the parameters are applied + process.setChildProcessModifier([=, &vforkControl] { + const char *pgidmsg = "PGID mismatch. "; + if (getpgrp() != oldpgid) + (void)write(pipes[1], pgidmsg, strlen(pgidmsg)); + (void)write(pipes[1], message, strlen(message)); + vforkControl.storeRelaxed(1); + }); + auto flags = QProcess::UnixProcessFlag::CloseFileDescriptors | + QProcess::UnixProcessFlag::CreateNewSession | + QProcess::UnixProcessFlag::UseVFork; + process.setUnixProcessParameters({ flags }); + process.setProgram("testUnixProcessParameters/testUnixProcessParameters"); + process.setArguments({ "file-descriptors", QString::number(pipes[1]) }); + process.start(); + QVERIFY2(process.waitForStarted(5000), qPrintable(process.errorString())); + } // closes the writing end of the pipe + + QVERIFY(process.waitForFinished(5000)); + QCOMPARE(process.readAllStandardError(), QString()); + QCOMPARE(process.readAll(), QString()); + + char buf[2 * sizeof(message)]; + int r = read(pipes[0], buf, sizeof(buf)); + QVERIFY2(r >= 0, qPrintable(qt_error_string())); + QCOMPARE(QByteArrayView(buf, r), message); + + if (haveWorkingVFork) + QVERIFY2(vforkControl.loadRelaxed(), "QProcess doesn't appear to have used vfork()"); +} + +void tst_QProcess::unixProcessParametersOtherFileDescriptors() +{ + constexpr int TargetFileDescriptor = 3; + int fd1 = open("/dev/null", O_RDONLY); + int devnull = fcntl(fd1, F_DUPFD, 100); // instead of F_DUPFD_CLOEXEC + close(fd1); + + auto closeFds = qScopeGuard([&] { + close(devnull); + }); + + QProcess process; + QProcess::UnixProcessParameters params; + params.flags = QProcess::UnixProcessFlag::CloseFileDescriptors + | QProcess::UnixProcessFlag::UseVFork; + params.lowestFileDescriptorToClose = 4; + process.setUnixProcessParameters(params); + process.setChildProcessModifier([devnull, &process]() { + if (dup2(devnull, TargetFileDescriptor) != TargetFileDescriptor) + process.failChildProcessModifier("dup2", errno); + }); + process.setProgram("testUnixProcessParameters/testUnixProcessParameters"); + process.setArguments({ "file-descriptors2", QString::number(TargetFileDescriptor), + QString::number(devnull) }); + process.start(); + + QVERIFY2(process.waitForStarted(5000), qPrintable(process.errorString())); + QVERIFY(process.waitForFinished(5000)); + QCOMPARE(process.readAllStandardError(), QString()); + QCOMPARE(process.readAll(), QString()); + QCOMPARE(process.exitCode(), 0); + QCOMPARE(process.exitStatus(), QProcess::NormalExit); +} +#endif + void tst_QProcess::exitCodeTest() { for (int i = 0; i < 255; ++i) { QProcess process; - process.start("testExitCodes/testExitCodes " + QString::number(i)); + process.start("testExitCodes/testExitCodes", {QString::number(i)}); QVERIFY(process.waitForFinished(5000)); QCOMPARE(process.exitCode(), i); QCOMPARE(process.error(), QProcess::UnknownError); @@ -1490,25 +1979,16 @@ void tst_QProcess::failToStart() QProcess process; QSignalSpy stateSpy(&process, &QProcess::stateChanged); QSignalSpy errorSpy(&process, &QProcess::errorOccurred); - QSignalSpy finishedSpy(&process, static_cast<QProcessFinishedSignal2>(&QProcess::finished)); + QSignalSpy finishedSpy(&process, &QProcess::finished); QVERIFY(stateSpy.isValid()); QVERIFY(errorSpy.isValid()); QVERIFY(finishedSpy.isValid()); -#if QT_DEPRECATED_SINCE(5, 6) - QSignalSpy errorSpy2(&process, static_cast<QProcessErrorSignal>(&QProcess::error)); - QVERIFY(errorSpy2.isValid()); -#endif -#if QT_DEPRECATED_SINCE(5, 13) - QSignalSpy finishedSpy2(&process, static_cast<QProcessFinishedSignal1>(&QProcess::finished)); - QVERIFY(finishedSpy2.isValid()); -#endif - // OS X and HP-UX have a really low default process limit (~100), so spawning // to many processes here will cause test failures later on. #if defined Q_OS_HPUX const int attempts = 15; -#elif defined Q_OS_MAC +#elif defined Q_OS_DARWIN const int attempts = 15; #else const int attempts = 50; @@ -1516,10 +1996,7 @@ void tst_QProcess::failToStart() for (int j = 0; j < 8; ++j) { for (int i = 0; i < attempts; ++i) { - QCOMPARE(errorSpy.count(), j * attempts + i); -#if QT_DEPRECATED_SINCE(5, 6) - QCOMPARE(errorSpy2.count(), j * attempts + i); -#endif + QCOMPARE(errorSpy.size(), j * attempts + i); process.start("/blurp"); switch (j) { @@ -1543,18 +2020,12 @@ void tst_QProcess::failToStart() } QCOMPARE(process.error(), QProcess::FailedToStart); - QCOMPARE(errorSpy.count(), j * attempts + i + 1); - QCOMPARE(finishedSpy.count(), 0); -#if QT_DEPRECATED_SINCE(5, 6) - QCOMPARE(errorSpy2.count(), j * attempts + i + 1); -#endif -#if QT_DEPRECATED_SINCE(5, 13) - QCOMPARE(finishedSpy2.count(), 0); -#endif + QCOMPARE(errorSpy.size(), j * attempts + i + 1); + QCOMPARE(finishedSpy.size(), 0); int it = j * attempts + i + 1; - QCOMPARE(stateSpy.count(), it * 2); + QCOMPARE(stateSpy.size(), it * 2); QCOMPARE(qvariant_cast<QProcess::ProcessState>(stateSpy.at(it * 2 - 2).at(0)), QProcess::Starting); QCOMPARE(qvariant_cast<QProcess::ProcessState>(stateSpy.at(it * 2 - 1).at(0)), QProcess::NotRunning); } @@ -1569,33 +2040,17 @@ void tst_QProcess::failToStartWithWait() QProcess process; QEventLoop loop; QSignalSpy errorSpy(&process, &QProcess::errorOccurred); - QSignalSpy finishedSpy(&process, static_cast<QProcessFinishedSignal2>(&QProcess::finished)); + QSignalSpy finishedSpy(&process, &QProcess::finished); QVERIFY(errorSpy.isValid()); QVERIFY(finishedSpy.isValid()); -#if QT_DEPRECATED_SINCE(5, 6) - QSignalSpy errorSpy2(&process, static_cast<QProcessErrorSignal>(&QProcess::error)); - QVERIFY(errorSpy2.isValid()); -#endif -#if QT_DEPRECATED_SINCE(5, 13) - QSignalSpy finishedSpy2(&process, static_cast<QProcessFinishedSignal1>(&QProcess::finished)); - QVERIFY(finishedSpy2.isValid()); -#endif - for (int i = 0; i < 50; ++i) { process.start("/blurp", QStringList() << "-v" << "-debug"); process.waitForStarted(); QCOMPARE(process.error(), QProcess::FailedToStart); - QCOMPARE(errorSpy.count(), i + 1); - QCOMPARE(finishedSpy.count(), 0); -#if QT_DEPRECATED_SINCE(5, 6) - QCOMPARE(errorSpy2.count(), i + 1); -#endif -#if QT_DEPRECATED_SINCE(5, 13) - QCOMPARE(finishedSpy2.count(), 0); -#endif - + QCOMPARE(errorSpy.size(), i + 1); + QCOMPARE(finishedSpy.size(), 0); } } @@ -1607,19 +2062,10 @@ void tst_QProcess::failToStartWithEventLoop() QProcess process; QEventLoop loop; QSignalSpy errorSpy(&process, &QProcess::errorOccurred); - QSignalSpy finishedSpy(&process, static_cast<QProcessFinishedSignal2>(&QProcess::finished)); + QSignalSpy finishedSpy(&process, &QProcess::finished); QVERIFY(errorSpy.isValid()); QVERIFY(finishedSpy.isValid()); -#if QT_DEPRECATED_SINCE(5, 6) - QSignalSpy errorSpy2(&process, static_cast<QProcessErrorSignal>(&QProcess::error)); - QVERIFY(errorSpy2.isValid()); -#endif -#if QT_DEPRECATED_SINCE(5, 13) - QSignalSpy finishedSpy2(&process, static_cast<QProcessFinishedSignal1>(&QProcess::finished)); - QVERIFY(finishedSpy2.isValid()); -#endif - // The error signal may be emitted before start() returns connect(&process, &QProcess::errorOccurred, &loop, &QEventLoop::quit, Qt::QueuedConnection); @@ -1630,14 +2076,8 @@ void tst_QProcess::failToStartWithEventLoop() loop.exec(); QCOMPARE(process.error(), QProcess::FailedToStart); - QCOMPARE(errorSpy.count(), i + 1); - QCOMPARE(finishedSpy.count(), 0); -#if QT_DEPRECATED_SINCE(5, 6) - QCOMPARE(errorSpy2.count(), i + 1); -#endif -#if QT_DEPRECATED_SINCE(5, 13) - QCOMPARE(finishedSpy2.count(), 0); -#endif + QCOMPARE(errorSpy.size(), i + 1); + QCOMPARE(finishedSpy.size(), 0); } } @@ -1645,8 +2085,7 @@ void tst_QProcess::failToStartEmptyArgs_data() { QTest::addColumn<int>("startOverload"); QTest::newRow("start(QString, QStringList, OpenMode)") << 0; - QTest::newRow("start(QString, OpenMode)") << 1; - QTest::newRow("start(OpenMode)") << 2; + QTest::newRow("start(OpenMode)") << 1; } void tst_QProcess::failToStartEmptyArgs() @@ -1657,19 +2096,12 @@ void tst_QProcess::failToStartEmptyArgs() QProcess process; QSignalSpy errorSpy(&process, static_cast<QProcessErrorSignal>(&QProcess::errorOccurred)); QVERIFY(errorSpy.isValid()); -#if QT_DEPRECATED_SINCE(5, 6) - QSignalSpy errorSpy2(&process, static_cast<QProcessErrorSignal>(&QProcess::error)); - QVERIFY(errorSpy2.isValid()); -#endif switch (startOverload) { case 0: process.start(QString(), QStringList(), QIODevice::ReadWrite); break; case 1: - process.start(QString(), QIODevice::ReadWrite); - break; - case 2: process.start(QIODevice::ReadWrite); break; default: @@ -1677,10 +2109,7 @@ void tst_QProcess::failToStartEmptyArgs() }; QVERIFY(!process.waitForStarted()); - QCOMPARE(errorSpy.count(), 1); -#if QT_DEPRECATED_SINCE(5, 6) - QCOMPARE(errorSpy2.count(), 1); -#endif + QCOMPARE(errorSpy.size(), 1); QCOMPARE(process.error(), QProcess::FailedToStart); } @@ -1737,9 +2166,9 @@ void tst_QProcess::setEnvironment() QStringList environment = QProcess::systemEnvironment(); if (value.isNull()) { int pos; - QRegExp rx(name + "=.*"); + QRegularExpression rx(name + "=.*"); #ifdef Q_OS_WIN - rx.setCaseSensitivity(Qt::CaseInsensitive); + rx.setPatternOptions(QRegularExpression::CaseInsensitiveOption); #endif while ((pos = environment.indexOf(rx)) != -1) environment.removeAt(pos); @@ -1862,7 +2291,7 @@ void tst_QProcess::systemEnvironment() QVERIFY(!QProcessEnvironment::systemEnvironment().isEmpty()); QVERIFY(QProcessEnvironment::systemEnvironment().contains("PATH")); - QVERIFY(!QProcess::systemEnvironment().filter(QRegExp("^PATH=", Qt::CaseInsensitive)).isEmpty()); + QVERIFY(!QProcess::systemEnvironment().filter(QRegularExpression("^PATH=", QRegularExpression::CaseInsensitiveOption)).isEmpty()); } void tst_QProcess::spaceInName() @@ -1912,32 +2341,16 @@ void tst_QProcess::waitForReadyReadForNonexistantProcess() QProcess process; QSignalSpy errorSpy(&process, &QProcess::errorOccurred); - QSignalSpy finishedSpy(&process, static_cast<QProcessFinishedSignal2>(&QProcess::finished)); + QSignalSpy finishedSpy(&process, &QProcess::finished); QVERIFY(errorSpy.isValid()); QVERIFY(finishedSpy.isValid()); -#if QT_DEPRECATED_SINCE(5, 6) - QSignalSpy errorSpy2(&process, static_cast<QProcessErrorSignal>(&QProcess::error)); - QVERIFY(errorSpy2.isValid()); -#endif -#if QT_DEPRECATED_SINCE(5, 13) - QSignalSpy finishedSpy1(&process, static_cast<QProcessFinishedSignal1>(&QProcess::finished)); - QVERIFY(finishedSpy1.isValid()); -#endif - QVERIFY(!process.waitForReadyRead()); // used to crash process.start("doesntexist"); QVERIFY(!process.waitForReadyRead()); - QCOMPARE(errorSpy.count(), 1); + QCOMPARE(errorSpy.size(), 1); QCOMPARE(errorSpy.at(0).at(0).toInt(), 0); - QCOMPARE(finishedSpy.count(), 0); -#if QT_DEPRECATED_SINCE(5, 6) - QCOMPARE(errorSpy2.count(), 1); - QCOMPARE(errorSpy2.at(0).at(0).toInt(), 0); -#endif -#if QT_DEPRECATED_SINCE(5, 13) - QCOMPARE(finishedSpy1.count(), 0); -#endif + QCOMPARE(finishedSpy.size(), 0); } void tst_QProcess::setStandardInputFile() @@ -1946,12 +2359,21 @@ void tst_QProcess::setStandardInputFile() QProcess process; QFile file(m_temporaryDir.path() + QLatin1String("/data-sif")); + QSignalSpy stateSpy(&process, &QProcess::stateChanged); + QSignalSpy errorOccurredSpy(&process, &QProcess::errorOccurred); + QVERIFY(file.open(QIODevice::WriteOnly)); file.write(data, sizeof data); file.close(); process.setStandardInputFile(file.fileName()); process.start("testProcessEcho/testProcessEcho"); + QVERIFY(process.waitForStarted()); + QCOMPARE(errorOccurredSpy.size(), 0); + QCOMPARE(stateSpy.size(), 2); + QCOMPARE(stateSpy[0][0].value<QProcess::ProcessState>(), QProcess::Starting); + QCOMPARE(stateSpy[1][0].value<QProcess::ProcessState>(), QProcess::Running); + stateSpy.clear(); QVERIFY(process.waitForFinished()); QCOMPARE(process.exitStatus(), QProcess::NormalExit); @@ -1968,31 +2390,50 @@ void tst_QProcess::setStandardInputFile() QCOMPARE(all.size(), 0); } +void tst_QProcess::setStandardInputFileFailure() +{ + QProcess process; + process.setStandardInputFile(nonExistentFileName); + + QSignalSpy stateSpy(&process, &QProcess::stateChanged); + QSignalSpy errorOccurredSpy(&process, &QProcess::errorOccurred); + + process.start("testProcessEcho/testProcessEcho"); + QVERIFY(!process.waitForStarted()); + + QCOMPARE(errorOccurredSpy.size(), 1); + QCOMPARE(errorOccurredSpy[0][0].value<QProcess::ProcessError>(), QProcess::FailedToStart); + + QCOMPARE(stateSpy.size(), 2); + QCOMPARE(stateSpy[0][0].value<QProcess::ProcessState>(), QProcess::Starting); + QCOMPARE(stateSpy[1][0].value<QProcess::ProcessState>(), QProcess::NotRunning); +} + void tst_QProcess::setStandardOutputFile_data() { - QTest::addColumn<int>("channelToTest"); - QTest::addColumn<int>("_channelMode"); + QTest::addColumn<QProcess::ProcessChannel>("channelToTest"); + QTest::addColumn<QProcess::ProcessChannelMode>("channelMode"); QTest::addColumn<bool>("append"); - QTest::newRow("stdout-truncate") << int(QProcess::StandardOutput) - << int(QProcess::SeparateChannels) + QTest::newRow("stdout-truncate") << QProcess::StandardOutput + << QProcess::SeparateChannels << false; - QTest::newRow("stdout-append") << int(QProcess::StandardOutput) - << int(QProcess::SeparateChannels) + QTest::newRow("stdout-append") << QProcess::StandardOutput + << QProcess::SeparateChannels << true; - QTest::newRow("stderr-truncate") << int(QProcess::StandardError) - << int(QProcess::SeparateChannels) + QTest::newRow("stderr-truncate") << QProcess::StandardError + << QProcess::SeparateChannels << false; - QTest::newRow("stderr-append") << int(QProcess::StandardError) - << int(QProcess::SeparateChannels) + QTest::newRow("stderr-append") << QProcess::StandardError + << QProcess::SeparateChannels << true; - QTest::newRow("merged-truncate") << int(QProcess::StandardOutput) - << int(QProcess::MergedChannels) + QTest::newRow("merged-truncate") << QProcess::StandardOutput + << QProcess::MergedChannels << false; - QTest::newRow("merged-append") << int(QProcess::StandardOutput) - << int(QProcess::MergedChannels) + QTest::newRow("merged-append") << QProcess::StandardOutput + << QProcess::MergedChannels << true; } @@ -2001,11 +2442,10 @@ void tst_QProcess::setStandardOutputFile() static const char data[] = "Original data. "; static const char testdata[] = "Test data."; - QFETCH(int, channelToTest); - QFETCH(int, _channelMode); + QFETCH(QProcess::ProcessChannel, channelToTest); + QFETCH(QProcess::ProcessChannelMode, channelMode); QFETCH(bool, append); - QProcess::ProcessChannelMode channelMode = QProcess::ProcessChannelMode(_channelMode); QIODevice::OpenMode mode = append ? QIODevice::Append : QIODevice::Truncate; // create the destination file with data @@ -2022,7 +2462,17 @@ void tst_QProcess::setStandardOutputFile() else process.setStandardErrorFile(file.fileName(), mode); + QSignalSpy stateSpy(&process, &QProcess::stateChanged); + QSignalSpy errorOccurredSpy(&process, &QProcess::errorOccurred); + process.start("testProcessEcho2/testProcessEcho2"); + QVERIFY(process.waitForStarted()); + QCOMPARE(errorOccurredSpy.size(), 0); + QCOMPARE(stateSpy.size(), 2); + QCOMPARE(stateSpy[0][0].value<QProcess::ProcessState>(), QProcess::Starting); + QCOMPARE(stateSpy[1][0].value<QProcess::ProcessState>(), QProcess::Running); + stateSpy.clear(); + process.write(testdata, sizeof testdata); QVERIFY(process.waitForFinished()); QCOMPARE(process.exitStatus(), QProcess::NormalExit); @@ -2047,6 +2497,34 @@ void tst_QProcess::setStandardOutputFile() QCOMPARE(all.size(), expectedsize); } +void tst_QProcess::setStandardOutputFileFailure() +{ + QFETCH(QProcess::ProcessChannel, channelToTest); + QFETCH(QProcess::ProcessChannelMode, channelMode); + QFETCH(bool, append); + + QIODevice::OpenMode mode = append ? QIODevice::Append : QIODevice::Truncate; + + // run the process + QProcess process; + process.setProcessChannelMode(channelMode); + if (channelToTest == QProcess::StandardOutput) + process.setStandardOutputFile(nonExistentFileName, mode); + else + process.setStandardErrorFile(nonExistentFileName, mode); + + QSignalSpy stateSpy(&process, &QProcess::stateChanged); + QSignalSpy errorOccurredSpy(&process, &QProcess::errorOccurred); + + process.start("testProcessEcho2/testProcessEcho2"); + QVERIFY(!process.waitForStarted()); + QCOMPARE(errorOccurredSpy.size(), 1); + QCOMPARE(errorOccurredSpy[0][0].value<QProcess::ProcessError>(), QProcess::FailedToStart); + QCOMPARE(stateSpy.size(), 2); + QCOMPARE(stateSpy[0][0].value<QProcess::ProcessState>(), QProcess::Starting); + QCOMPARE(stateSpy[1][0].value<QProcess::ProcessState>(), QProcess::NotRunning); +} + void tst_QProcess::setStandardOutputFileNullDevice() { static const char testdata[] = "Test data."; @@ -2098,14 +2576,18 @@ void tst_QProcess::setStandardOutputProcess_data() void tst_QProcess::setStandardOutputProcess() { QProcess source; + QProcess intermediate; QProcess sink; QFETCH(bool, merged); QFETCH(bool, waitForBytesWritten); source.setProcessChannelMode(merged ? QProcess::MergedChannels : QProcess::SeparateChannels); - source.setStandardOutputProcess(&sink); + source.setStandardOutputProcess(&intermediate); + intermediate.setStandardOutputProcess(&sink); source.start("testProcessEcho2/testProcessEcho2"); + intermediate.setProgram("testProcessEcho/testProcessEcho"); + QVERIFY(intermediate.startDetached()); sink.start("testProcessEcho2/testProcessEcho2"); QByteArray data("Hello, World"); @@ -2147,7 +2629,7 @@ void tst_QProcess::fileWriterProcess() QVERIFY(QFile::remove(fileName)); QProcess process; process.setWorkingDirectory(m_temporaryDir.path()); - process.start(binary, QIODevice::ReadWrite | QIODevice::Text); + process.start(binary, {}, QIODevice::ReadWrite | QIODevice::Text); process.write(stdinStr); process.closeWriteChannel(); while (process.bytesToWrite()) { @@ -2318,18 +2800,48 @@ void tst_QProcess::setWorkingDirectory() void tst_QProcess::setNonExistentWorkingDirectory() { QProcess process; - process.setWorkingDirectory("this/directory/should/not/exist/for/sure"); + process.setWorkingDirectory(nonExistentFileName); + + QSignalSpy stateSpy(&process, &QProcess::stateChanged); + QSignalSpy errorOccurredSpy(&process, &QProcess::errorOccurred); // use absolute path because on Windows, the executable is relative to the parent's CWD // while on Unix with fork it's relative to the child's (with posix_spawn, it could be either). process.start(QFileInfo("testSetWorkingDirectory/testSetWorkingDirectory").absoluteFilePath()); + QVERIFY(!process.waitForFinished()); - QCOMPARE(int(process.error()), int(QProcess::FailedToStart)); + QCOMPARE(errorOccurredSpy.size(), 1); + QCOMPARE(process.error(), QProcess::FailedToStart); + QCOMPARE(stateSpy.size(), 2); + QCOMPARE(stateSpy[0][0].value<QProcess::ProcessState>(), QProcess::Starting); + QCOMPARE(stateSpy[1][0].value<QProcess::ProcessState>(), QProcess::NotRunning); + +#ifdef Q_OS_UNIX + QVERIFY2(process.errorString().startsWith("chdir:"), process.errorString().toLocal8Bit()); +#endif +} + +void tst_QProcess::detachedSetNonExistentWorkingDirectory() +{ + QProcess process; + process.setWorkingDirectory(nonExistentFileName); + + QSignalSpy errorOccurredSpy(&process, &QProcess::errorOccurred); + + // use absolute path because on Windows, the executable is relative to the parent's CWD + // while on Unix with fork it's relative to the child's (with posix_spawn, it could be either). + process.setProgram(QFileInfo("testSetWorkingDirectory/testSetWorkingDirectory").absoluteFilePath()); + + qint64 pid = -1; + QVERIFY(!process.startDetached(&pid)); + QCOMPARE(pid, -1); + QCOMPARE(process.error(), QProcess::FailedToStart); + QVERIFY(process.errorString() != "Unknown error"); + + QCOMPARE(errorOccurredSpy.size(), 1); + QCOMPARE(process.error(), QProcess::FailedToStart); #ifdef Q_OS_UNIX -# ifdef QPROCESS_USE_SPAWN - QEXPECT_FAIL("", "QProcess cannot detect failure to start when using posix_spawn()", Continue); -# endif QVERIFY2(process.errorString().startsWith("chdir:"), process.errorString().toLocal8Bit()); #endif } @@ -2358,7 +2870,6 @@ void tst_QProcess::invalidProgramString_data() QTest::addColumn<QString>("programString"); QTest::newRow("null string") << QString(); QTest::newRow("empty string") << QString(""); - QTest::newRow("only blank string") << QString(" "); } void tst_QProcess::invalidProgramString() @@ -2369,17 +2880,10 @@ void tst_QProcess::invalidProgramString() qRegisterMetaType<QProcess::ProcessError>("QProcess::ProcessError"); QSignalSpy spy(&process, &QProcess::errorOccurred); QVERIFY(spy.isValid()); -#if QT_DEPRECATED_SINCE(5, 6) - QSignalSpy spy2(&process, static_cast<QProcessErrorSignal>(&QProcess::error)); - QVERIFY(spy2.isValid()); -#endif process.start(programString); QCOMPARE(process.error(), QProcess::FailedToStart); - QCOMPARE(spy.count(), 1); -#if QT_DEPRECATED_SINCE(5, 6) - QCOMPARE(spy2.count(), 1); -#endif + QCOMPARE(spy.size(), 1); QVERIFY(!QProcess::startDetached(programString)); } @@ -2390,7 +2894,7 @@ void tst_QProcess::onlyOneStartedSignal() QProcess process; QSignalSpy spyStarted(&process, &QProcess::started); - QSignalSpy spyFinished(&process, static_cast<QProcessFinishedSignal2>(&QProcess::finished)); + QSignalSpy spyFinished(&process, &QProcess::finished); QVERIFY(spyStarted.isValid()); QVERIFY(spyFinished.isValid()); @@ -2398,8 +2902,8 @@ void tst_QProcess::onlyOneStartedSignal() process.start("testProcessNormal/testProcessNormal"); QVERIFY(process.waitForStarted(5000)); QVERIFY(process.waitForFinished(5000)); - QCOMPARE(spyStarted.count(), 1); - QCOMPARE(spyFinished.count(), 1); + QCOMPARE(spyStarted.size(), 1); + QCOMPARE(spyFinished.size(), 1); spyStarted.clear(); spyFinished.clear(); @@ -2408,8 +2912,8 @@ void tst_QProcess::onlyOneStartedSignal() QVERIFY(process.waitForFinished(5000)); QCOMPARE(process.exitStatus(), QProcess::NormalExit); QCOMPARE(process.exitCode(), 0); - QCOMPARE(spyStarted.count(), 1); - QCOMPARE(spyFinished.count(), 1); + QCOMPARE(spyStarted.size(), 1); + QCOMPARE(spyFinished.size(), 1); } class BlockOnReadStdOut : public QObject @@ -2424,7 +2928,7 @@ public: public slots: void block() { - QThread::sleep(1); + QThread::sleep(std::chrono::seconds{1}); } }; @@ -2433,13 +2937,12 @@ void tst_QProcess::finishProcessBeforeReadingDone() QProcess process; BlockOnReadStdOut blocker(&process); QEventLoop loop; - connect(&process, static_cast<QProcessFinishedSignal2>(&QProcess::finished), - &loop, &QEventLoop::quit); + connect(&process, &QProcess::finished, &loop, &QEventLoop::quit); process.start("testProcessOutput/testProcessOutput"); QVERIFY(process.waitForStarted()); loop.exec(); QStringList lines = QString::fromLocal8Bit(process.readAllStandardOutput()).split( - QRegExp(QStringLiteral("[\r\n]")), QString::SkipEmptyParts); + QRegularExpression(QStringLiteral("[\r\n]")), Qt::SkipEmptyParts); QVERIFY(!lines.isEmpty()); QCOMPARE(lines.last(), QStringLiteral("10239 -this is a number")); QCOMPARE(process.exitStatus(), QProcess::NormalExit); @@ -2477,23 +2980,23 @@ void tst_QProcess::startStopStartStop() //----------------------------------------------------------------------------- void tst_QProcess::startStopStartStopBuffers_data() { - QTest::addColumn<int>("channelMode1"); - QTest::addColumn<int>("channelMode2"); + QTest::addColumn<QProcess::ProcessChannelMode>("channelMode1"); + QTest::addColumn<QProcess::ProcessChannelMode>("channelMode2"); - QTest::newRow("separate-separate") << int(QProcess::SeparateChannels) << int(QProcess::SeparateChannels); - QTest::newRow("separate-merged") << int(QProcess::SeparateChannels) << int(QProcess::MergedChannels); - QTest::newRow("merged-separate") << int(QProcess::MergedChannels) << int(QProcess::SeparateChannels); - QTest::newRow("merged-merged") << int(QProcess::MergedChannels) << int(QProcess::MergedChannels); - QTest::newRow("merged-forwarded") << int(QProcess::MergedChannels) << int(QProcess::ForwardedChannels); + QTest::newRow("separate-separate") << QProcess::SeparateChannels << QProcess::SeparateChannels; + QTest::newRow("separate-merged") << QProcess::SeparateChannels << QProcess::MergedChannels; + QTest::newRow("merged-separate") << QProcess::MergedChannels << QProcess::SeparateChannels; + QTest::newRow("merged-merged") << QProcess::MergedChannels << QProcess::MergedChannels; + QTest::newRow("merged-forwarded") << QProcess::MergedChannels << QProcess::ForwardedChannels; } void tst_QProcess::startStopStartStopBuffers() { - QFETCH(int, channelMode1); - QFETCH(int, channelMode2); + QFETCH(QProcess::ProcessChannelMode, channelMode1); + QFETCH(QProcess::ProcessChannelMode, channelMode2); QProcess process; - process.setProcessChannelMode(QProcess::ProcessChannelMode(channelMode1)); + process.setProcessChannelMode(channelMode1); process.start("testProcessHang/testProcessHang"); QVERIFY2(process.waitForReadyRead(), process.errorString().toLocal8Bit()); if (channelMode1 == QProcess::SeparateChannels || channelMode1 == QProcess::ForwardedOutputChannel) { @@ -2504,14 +3007,18 @@ void tst_QProcess::startStopStartStopBuffers() } // We want to test that the write buffer still has bytes after the child - // exiting. We do that by writing to a child process that never reads. We - // just have to write more data than a pipe can hold, so that even if - // QProcess finds the pipe writable (during waitForFinished() or in the - // QWindowsPipeWriter thread), some data will remain. The worst case I know - // of is Linux, which defaults to 64 kB of buffer. + // exits. We can do that by writing data until the OS stops consuming data, + // indicating that the pipe buffers are full. The initial value of 128 kB + // should make this loop typicall run only once; the worst case I know of + // is Linux, which defaults to 64 kB of buffer. - process.write(QByteArray(128 * 1024, 'a')); - QVERIFY(process.bytesToWrite() > 0); + QByteArray chunk(128 * 1024, 'a'); + do { + process.write(chunk); + QVERIFY(process.bytesToWrite() > 0); + process.waitForBytesWritten(1); + } while (process.bytesToWrite() == 0); + chunk = {}; process.kill(); QVERIFY(process.waitForFinished()); @@ -2519,7 +3026,8 @@ void tst_QProcess::startStopStartStopBuffers() #ifndef Q_OS_WIN // confirm that our buffers are still full // Note: this doesn't work on Windows because our buffers are drained into - // QWindowsPipeWriter before being sent to the child process. + // QWindowsPipeWriter before being sent to the child process and are lost + // in waitForFinished() -> processFinished() -> cleanup(). QVERIFY(process.bytesToWrite() > 0); QVERIFY(process.bytesAvailable() > 0); // channelMode1 is not ForwardedChannels if (channelMode1 == QProcess::SeparateChannels || channelMode1 == QProcess::ForwardedOutputChannel) { @@ -2529,8 +3037,8 @@ void tst_QProcess::startStopStartStopBuffers() } #endif - process.setProcessChannelMode(QProcess::ProcessChannelMode(channelMode2)); - process.start("testProcessEcho2/testProcessEcho2", QIODevice::ReadWrite | QIODevice::Text); + process.setProcessChannelMode(channelMode2); + process.start("testProcessEcho2/testProcessEcho2", {}, QIODevice::ReadWrite | QIODevice::Text); // the buffers should now be empty QCOMPARE(process.bytesToWrite(), qint64(0)); @@ -2579,106 +3087,94 @@ void tst_QProcess::processEventsInAReadyReadSlot() QVERIFY(process.waitForFinished()); } -#if QT_DEPRECATED_SINCE(5, 13) +enum class ChdirMode { + None = 0, + InParent, + InChild +}; +Q_DECLARE_METATYPE(ChdirMode) -void tst_QProcess::crashTest2_deprecated() +void tst_QProcess::startFromCurrentWorkingDir_data() { - QProcess process; - process.start("testProcessCrash/testProcessCrash"); - QVERIFY(process.waitForStarted(5000)); - - qRegisterMetaType<QProcess::ProcessError>("QProcess::ProcessError"); - qRegisterMetaType<QProcess::ExitStatus>("QProcess::ExitStatus"); - - QSignalSpy spy(&process, static_cast<QProcessErrorSignal>(&QProcess::errorOccurred)); - QSignalSpy spy2(&process, static_cast<QProcessFinishedSignal2>(&QProcess::finished)); + qRegisterMetaType<ChdirMode>(); + QTest::addColumn<QString>("programPrefix"); + QTest::addColumn<ChdirMode>("chdirMode"); + QTest::addColumn<bool>("success"); - QVERIFY(spy.isValid()); - QVERIFY(spy2.isValid()); + constexpr bool IsWindows = true +#ifdef Q_OS_UNIX + && false +#endif + ; - QObject::connect(&process, static_cast<QProcessFinishedSignal1>(&QProcess::finished), - this, &tst_QProcess::exitLoopSlot); + // baseline: trying to execute the directory, this can't possibly succeed! + QTest::newRow("plain-same-cwd") << QString() << ChdirMode::None << false; - QTestEventLoop::instance().enterLoop(30); - if (QTestEventLoop::instance().timeout()) - QFAIL("Failed to detect crash : operation timed out"); + // cross-platform behavior: neither OS searches the setWorkingDirectory() + // dir without "./" + QTest::newRow("plain-child-chdir") << QString() << ChdirMode::InChild << false; - QCOMPARE(spy.count(), 1); - QCOMPARE(*static_cast<const QProcess::ProcessError *>(spy.at(0).at(0).constData()), QProcess::Crashed); + // cross-platform behavior: both OSes search the parent's CWD with "./" + QTest::newRow("prefixed-parent-chdir") << "./" << ChdirMode::InParent << true; - QCOMPARE(spy2.count(), 1); - QCOMPARE(*static_cast<const QProcess::ExitStatus *>(spy2.at(0).at(1).constData()), QProcess::CrashExit); + // opposite behaviors: Windows searches the parent's CWD and Unix searches + // the child's with "./" + QTest::newRow("prefixed-child-chdir") << "./" << ChdirMode::InChild << !IsWindows; - QCOMPARE(process.exitStatus(), QProcess::CrashExit); + // Windows searches the parent's CWD without "./" + QTest::newRow("plain-parent-chdir") << QString() << ChdirMode::InParent << IsWindows; } -void tst_QProcess::restartProcessDeadlock_deprecated() +void tst_QProcess::startFromCurrentWorkingDir() { - // The purpose of this test is to detect whether restarting a - // process in the finished() connected slot causes a deadlock - // because of the way QProcessManager uses its locks. - QProcess process; - connect(&process, static_cast<QProcessFinishedSignal1>(&QProcess::finished), - this, &tst_QProcess::restartProcess); - - process.start("testProcessEcho/testProcessEcho"); - - QCOMPARE(process.write("", 1), qlonglong(1)); - QVERIFY(process.waitForFinished(5000)); - - QObject::disconnect(&process, static_cast<QProcessFinishedSignal1>(&QProcess::finished), nullptr, nullptr); - - QCOMPARE(process.write("", 1), qlonglong(1)); - QVERIFY(process.waitForFinished(5000)); - QCOMPARE(process.exitStatus(), QProcess::NormalExit); - QCOMPARE(process.exitCode(), 0); -} + QFETCH(QString, programPrefix); + QFETCH(ChdirMode, chdirMode); + QFETCH(bool, success); -void tst_QProcess::waitForReadyReadInAReadyReadSlot_deprecated() -{ QProcess process; - connect(&process, &QIODevice::readyRead, this, &tst_QProcess::waitForReadyReadInAReadyReadSlotSlot); - connect(&process, static_cast<QProcessFinishedSignal1>(&QProcess::finished), - this, &tst_QProcess::exitLoopSlot); - bytesAvailable = 0; - - process.start("testProcessEcho/testProcessEcho"); - QVERIFY(process.waitForStarted(5000)); + qRegisterMetaType<QProcess::ProcessError>(); + QSignalSpy errorSpy(&process, &QProcess::errorOccurred); + QVERIFY(errorSpy.isValid()); - QSignalSpy spy(&process, &QProcess::readyRead); - QVERIFY(spy.isValid()); - process.write("foo"); - QTestEventLoop::instance().enterLoop(30); - QVERIFY(!QTestEventLoop::instance().timeout()); + // both the dir name and the executable name + const QString target = QStringLiteral("testProcessNormal"); + process.setProgram(programPrefix + target); - QCOMPARE(spy.count(), 1); +#ifdef Q_OS_UNIX + // Reset PATH, to be sure it doesn't contain . or the empty path. + // We can't do this on Windows because DLLs are searched in PATH + // and Windows always searches "." anyway. + auto restoreEnv = qScopeGuard([old = qgetenv("PATH")] { + qputenv("PATH", old); + }); + qputenv("PATH", "/"); +#endif - process.disconnect(); - QVERIFY(process.waitForFinished(5000)); - QCOMPARE(process.exitStatus(), QProcess::NormalExit); - QCOMPARE(process.exitCode(), 0); - QVERIFY(process.bytesAvailable() > bytesAvailable); -} + switch (chdirMode) { + case ChdirMode::InParent: { + auto restoreCwd = qScopeGuard([old = QDir::currentPath()] { + QDir::setCurrent(old); + }); + QVERIFY(QDir::setCurrent(target)); + process.start(); + break; + } + case ChdirMode::InChild: + process.setWorkingDirectory(target); + Q_FALLTHROUGH(); + case ChdirMode::None: + process.start(); + break; + } -void tst_QProcess::finishProcessBeforeReadingDone_deprecated() -{ - QProcess process; - BlockOnReadStdOut blocker(&process); - QEventLoop loop; - connect(&process, static_cast<QProcessFinishedSignal1>(&QProcess::finished), - &loop, &QEventLoop::quit); - process.start("testProcessOutput/testProcessOutput"); - QVERIFY(process.waitForStarted()); - loop.exec(); - QStringList lines = QString::fromLocal8Bit(process.readAllStandardOutput()).split( - QRegExp(QStringLiteral("[\r\n]")), QString::SkipEmptyParts); - QVERIFY(!lines.isEmpty()); - QCOMPARE(lines.last(), QStringLiteral("10239 -this is a number")); - QCOMPARE(process.exitStatus(), QProcess::NormalExit); - QCOMPARE(process.exitCode(), 0); + QCOMPARE(process.waitForStarted(), success); + QCOMPARE(errorSpy.size(), int(!success)); + if (success) { + QVERIFY(process.waitForFinished()); + } else { + QCOMPARE(process.error(), QProcess::FailedToStart); + } } -#endif - QTEST_MAIN(tst_QProcess) #include "tst_qprocess.moc" diff --git a/tests/auto/corelib/io/qprocessenvironment/CMakeLists.txt b/tests/auto/corelib/io/qprocessenvironment/CMakeLists.txt new file mode 100644 index 0000000000..02c6909031 --- /dev/null +++ b/tests/auto/corelib/io/qprocessenvironment/CMakeLists.txt @@ -0,0 +1,19 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qprocessenvironment Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qprocessenvironment LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +qt_internal_add_test(tst_qprocessenvironment + SOURCES + tst_qprocessenvironment.cpp + LIBRARIES + Qt::TestPrivate +) diff --git a/tests/auto/corelib/io/qprocessenvironment/qprocessenvironment.pro b/tests/auto/corelib/io/qprocessenvironment/qprocessenvironment.pro deleted file mode 100644 index 04cef29a64..0000000000 --- a/tests/auto/corelib/io/qprocessenvironment/qprocessenvironment.pro +++ /dev/null @@ -1,4 +0,0 @@ -CONFIG += testcase -TARGET = tst_qprocessenvironment -QT = core testlib -SOURCES = tst_qprocessenvironment.cpp diff --git a/tests/auto/corelib/io/qprocessenvironment/tst_qprocessenvironment.cpp b/tests/auto/corelib/io/qprocessenvironment/tst_qprocessenvironment.cpp index af5078a3dc..560d4196b2 100644 --- a/tests/auto/corelib/io/qprocessenvironment/tst_qprocessenvironment.cpp +++ b/tests/auto/corelib/io/qprocessenvironment/tst_qprocessenvironment.cpp @@ -1,32 +1,8 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtTest> +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QTest> +#include <QtTest/private/qcomparisontesthelper_p.h> #include <QObject> #include <QProcessEnvironment> @@ -34,8 +10,10 @@ class tst_QProcessEnvironment: public QObject { Q_OBJECT private slots: + void compareCompiles(); void operator_eq(); void clearAndIsEmpty(); + void clearAndInheritsFromParent(); void insert(); void emptyNull(); void toStringList(); @@ -47,6 +25,11 @@ private slots: void putenv(); }; +void tst_QProcessEnvironment::compareCompiles() +{ + QTestPrivate::testEqualityOperatorsCompile<QProcessEnvironment>(); +} + void tst_QProcessEnvironment::operator_eq() { QProcessEnvironment e1; @@ -58,6 +41,9 @@ void tst_QProcessEnvironment::operator_eq() QProcessEnvironment e2; QCOMPARE(e1, e2); + auto parentEnv = QProcessEnvironment(QProcessEnvironment::InheritFromParent); + QT_TEST_EQUALITY_OPS(parentEnv, e2, false); + e1.clear(); QCOMPARE(e1, e2); @@ -65,22 +51,45 @@ void tst_QProcessEnvironment::operator_eq() QCOMPARE(e1, e2); e1.insert("FOO", "bar"); - QVERIFY(e1 != e2); + QT_TEST_EQUALITY_OPS(e1, e2, false); e2.insert("FOO", "bar"); QCOMPARE(e1, e2); e2.insert("FOO", "baz"); - QVERIFY(e1 != e2); + QT_TEST_EQUALITY_OPS(e1, e2, false); + + QT_TEST_EQUALITY_OPS(e2, parentEnv, false); } void tst_QProcessEnvironment::clearAndIsEmpty() { QProcessEnvironment e; + QVERIFY(e.isEmpty()); + QVERIFY(!e.inheritsFromParent()); + e.insert("FOO", "bar"); + QVERIFY(!e.isEmpty()); + QVERIFY(!e.inheritsFromParent()); + e.clear(); + QVERIFY(e.isEmpty()); + QVERIFY(!e.inheritsFromParent()); +} + +void tst_QProcessEnvironment::clearAndInheritsFromParent() +{ + QProcessEnvironment e(QProcessEnvironment::InheritFromParent); + QVERIFY(e.isEmpty()); + QVERIFY(e.inheritsFromParent()); + // Clearing null environment keeps it null + e.clear(); + QVERIFY(e.isEmpty()); + QVERIFY(e.inheritsFromParent()); e.insert("FOO", "bar"); QVERIFY(!e.isEmpty()); + QVERIFY(!e.inheritsFromParent()); e.clear(); QVERIFY(e.isEmpty()); + QVERIFY(!e.inheritsFromParent()); } void tst_QProcessEnvironment::insert() @@ -126,7 +135,7 @@ void tst_QProcessEnvironment::toStringList() e.insert("FOO", "bar"); QStringList result = e.toStringList(); QVERIFY(!result.isEmpty()); - QCOMPARE(result.length(), 1); + QCOMPARE(result.size(), 1); QCOMPARE(result.at(0), QString("FOO=bar")); e.clear(); @@ -138,7 +147,7 @@ void tst_QProcessEnvironment::toStringList() e.insert("A", "bc"); e.insert("HELLO", "World"); result = e.toStringList(); - QCOMPARE(result.length(), 4); + QCOMPARE(result.size(), 4); // order is not specified, so use contains() QVERIFY(result.contains("FOO=bar")); @@ -155,7 +164,7 @@ void tst_QProcessEnvironment::keys() e.insert("FOO", "bar"); QStringList result = e.keys(); - QCOMPARE(result.length(), 1); + QCOMPARE(result.size(), 1); QCOMPARE(result.at(0), QString("FOO")); e.clear(); @@ -167,7 +176,7 @@ void tst_QProcessEnvironment::keys() e.insert("A", "bc"); e.insert("HELLO", "World"); result = e.keys(); - QCOMPARE(result.length(), 4); + QCOMPARE(result.size(), 4); // order is not specified, so use contains() QVERIFY(result.contains("FOO")); @@ -190,7 +199,7 @@ void tst_QProcessEnvironment::insertEnv() e.insert(e2); QStringList keys = e.keys(); - QCOMPARE(keys.length(), 5); + QCOMPARE(keys.size(), 5); QCOMPARE(e.value("FOO"), QString("bar")); QCOMPARE(e.value("A"), QString("bc")); @@ -240,7 +249,7 @@ void tst_QProcessEnvironment::caseSensitivity() QCOMPARE(e.value("foo"), QString("bar")); QStringList list = e.toStringList(); - QCOMPARE(list.length(), 2); + QCOMPARE(list.size(), 2); QVERIFY(list.contains("foo=bar")); QVERIFY(list.contains("FOO=baz")); #endif @@ -248,6 +257,9 @@ void tst_QProcessEnvironment::caseSensitivity() void tst_QProcessEnvironment::systemEnvironment() { +#ifdef Q_OS_VXWORKS + QSKIP("VxWorks do not have PATH environment variable"); +#endif static const char envname[] = "THIS_ENVIRONMENT_VARIABLE_HOPEFULLY_DOESNT_EXIST"; QByteArray path = qgetenv("PATH"); QByteArray nonexistant = qgetenv(envname); diff --git a/tests/auto/corelib/io/qresourceengine/CMakeLists.txt b/tests/auto/corelib/io/qresourceengine/CMakeLists.txt new file mode 100644 index 0000000000..a86cc8e76a --- /dev/null +++ b/tests/auto/corelib/io/qresourceengine/CMakeLists.txt @@ -0,0 +1,58 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qresourceengine Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qresourceengine LANGUAGES C CXX ASM) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +# Collect test data +set(test_data "parentdir.txt") +file(GLOB_RECURSE test_data_glob + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + testqrc/*) +list(APPEND test_data ${test_data_glob}) +file(GLOB_RECURSE test_data_glob + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + *.rcc) +list(APPEND test_data ${test_data_glob}) + +qt_internal_add_test(tst_qresourceengine + SOURCES + tst_qresourceengine.cpp + LIBRARIES + Qt::CorePrivate + moctestplugin + TESTDATA ${test_data} +) + +set_source_files_properties("world.txt" + PROPERTIES QT_DISCARD_FILE_CONTENTS TRUE +) + +qt_internal_add_resource(tst_qresourceengine "qt_resource_empty" + PREFIX + "/empty" + FILES + "world.txt" +) + +qt_add_resources(additional_sources testqrc/test.qrc) +target_sources(tst_qresourceengine PRIVATE ${additional_sources}) + +if(ANDROID) + qt_add_resources(additional_sources android_testdata.qrc) + target_sources(tst_qresourceengine PRIVATE ${additional_sources}) +endif() + +qt_add_binary_resources(tst_qresourceengine_runtime_resource "testqrc/test.qrc" + DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/runtime_resource.rcc" + OPTIONS -root "/runtime_resource/" -binary) +add_dependencies(tst_qresourceengine tst_qresourceengine_runtime_resource) + +add_subdirectory(staticplugin) diff --git a/tests/auto/corelib/io/qresourceengine/generateResources.sh b/tests/auto/corelib/io/qresourceengine/generateResources.sh index 9894f6bfb7..ab05f1c35a 100755 --- a/tests/auto/corelib/io/qresourceengine/generateResources.sh +++ b/tests/auto/corelib/io/qresourceengine/generateResources.sh @@ -1,4 +1,6 @@ #!/bin/sh +# Copyright (C) 2016 Intel Corporation. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 count=`awk '/ZERO_FILE_LEN/ { print $3 }' tst_qresourceengine.cpp` dd if=/dev/zero of=zero.txt bs=1 count=$count rcc --binary -o uncompressed.rcc --no-compress compressed.qrc diff --git a/tests/auto/corelib/io/qresourceengine/qresourceengine.pro b/tests/auto/corelib/io/qresourceengine/qresourceengine.pro deleted file mode 100644 index 1e12a41dea..0000000000 --- a/tests/auto/corelib/io/qresourceengine/qresourceengine.pro +++ /dev/null @@ -1,2 +0,0 @@ -TEMPLATE = subdirs -SUBDIRS = staticplugin qresourceengine_test.pro diff --git a/tests/auto/corelib/io/qresourceengine/qresourceengine_test.pro b/tests/auto/corelib/io/qresourceengine/qresourceengine_test.pro deleted file mode 100644 index 345e3d13b9..0000000000 --- a/tests/auto/corelib/io/qresourceengine/qresourceengine_test.pro +++ /dev/null @@ -1,34 +0,0 @@ -CONFIG += testcase -TARGET = tst_qresourceengine - -QT = core-private testlib -SOURCES = tst_qresourceengine.cpp -RESOURCES += testqrc/test.qrc - -qtPrepareTool(QMAKE_RCC, rcc, _DEP) -runtime_resource.target = runtime_resource.rcc -runtime_resource.depends = $$PWD/testqrc/test.qrc $$QMAKE_RCC_EXE -runtime_resource.commands = $$QMAKE_RCC -root /runtime_resource/ -binary $$PWD/testqrc/test.qrc -o $${runtime_resource.target} -QMAKE_EXTRA_TARGETS = runtime_resource -PRE_TARGETDEPS += $${runtime_resource.target} -QMAKE_DISTCLEAN += $${runtime_resource.target} - -TESTDATA += \ - parentdir.txt \ - testqrc/* \ - *.rcc -GENERATED_TESTDATA = $${runtime_resource.target} - -android:!android-embedded { - RESOURCES += android_testdata.qrc -} - -win32:debug_and_release { - CONFIG(debug, debug|release): LIBS += -Lstaticplugin/debug - else: LIBS += -Lstaticplugin/release -} else { - LIBS += -Lstaticplugin -} -LIBS += -lmoctestplugin - -builtin_testdata: DEFINES += BUILTIN_TESTDATA diff --git a/tests/auto/corelib/io/qresourceengine/staticplugin/.gitignore b/tests/auto/corelib/io/qresourceengine/staticplugin/.gitignore deleted file mode 100644 index c397dde6a5..0000000000 --- a/tests/auto/corelib/io/qresourceengine/staticplugin/.gitignore +++ /dev/null @@ -1 +0,0 @@ -moctestplugin_plugin_resources.cpp diff --git a/tests/auto/corelib/io/qresourceengine/staticplugin/CMakeLists.txt b/tests/auto/corelib/io/qresourceengine/staticplugin/CMakeLists.txt new file mode 100644 index 0000000000..1012fcaa62 --- /dev/null +++ b/tests/auto/corelib/io/qresourceengine/staticplugin/CMakeLists.txt @@ -0,0 +1,25 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## moctestplugin Generic Library: +##################################################################### + +qt_internal_add_cmake_library(moctestplugin + STATIC + SOURCES + main.cpp + LIBRARIES + Qt::Core + DEFINES + QT_STATICPLUGIN +) + +qt_internal_add_resource(moctestplugin "qmake_plugin_resource" + PREFIX + "/staticplugin" + FILES + "main.cpp" +) + +qt_autogen_tools_initial_setup(moctestplugin) diff --git a/tests/auto/corelib/io/qresourceengine/staticplugin/main.cpp b/tests/auto/corelib/io/qresourceengine/staticplugin/main.cpp index 39a3a1e012..c7b0fe7ea1 100644 --- a/tests/auto/corelib/io/qresourceengine/staticplugin/main.cpp +++ b/tests/auto/corelib/io/qresourceengine/staticplugin/main.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QObject> class PluginClass : public QObject diff --git a/tests/auto/corelib/io/qresourceengine/staticplugin/staticplugin.pro b/tests/auto/corelib/io/qresourceengine/staticplugin/staticplugin.pro deleted file mode 100644 index e19d884548..0000000000 --- a/tests/auto/corelib/io/qresourceengine/staticplugin/staticplugin.pro +++ /dev/null @@ -1,8 +0,0 @@ -TEMPLATE = lib -TARGET = moctestplugin -CONFIG += plugin static -SOURCES = main.cpp -plugin_resource.files = main.cpp -plugin_resource.prefix = /staticplugin -RESOURCES += plugin_resource -QT = core diff --git a/tests/auto/corelib/io/qresourceengine/testqrc/test.qrc b/tests/auto/corelib/io/qresourceengine/testqrc/test.qrc index f5e8c849a6..56972ea764 100644 --- a/tests/auto/corelib/io/qresourceengine/testqrc/test.qrc +++ b/tests/auto/corelib/io/qresourceengine/testqrc/test.qrc @@ -9,10 +9,10 @@ <file>searchpath1/search_file.txt</file>
<file>searchpath2/search_file.txt</file>
<file>search_file.txt</file>
- </qresource>
- <qresource><file>test/testdir.txt</file>
+ <file>test/testdir.txt</file>
<file>otherdir/otherdir.txt</file>
<file alias="aliasdir/aliasdir.txt">test/testdir2.txt</file>
+ <file alias="uncompresseddir/uncompressed.txt" compression-algorithm="none">aliasdir/compressme.txt</file>
<file>test/test</file>
</qresource>
<qresource lang="ko">
@@ -21,7 +21,7 @@ <qresource lang="de_CH">
<file alias="aliasdir/aliasdir.txt" compress="9" threshold="30">aliasdir/compressme.txt</file>
</qresource>
- <qresource lang="de">
+ <qresource lang="de" compression-algorithm="none">
<file alias="aliasdir/aliasdir.txt">test/german.txt</file>
</qresource>
<qresource prefix="withoutslashes">
diff --git a/tests/auto/corelib/io/qresourceengine/tst_qresourceengine.cpp b/tests/auto/corelib/io/qresourceengine/tst_qresourceengine.cpp index 902e6db12a..00a8cc4d72 100644 --- a/tests/auto/corelib/io/qresourceengine/tst_qresourceengine.cpp +++ b/tests/auto/corelib/io/qresourceengine/tst_qresourceengine.cpp @@ -1,33 +1,10 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Copyright (C) 2019 Intel Corporation. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtTest/QtTest> +// Copyright (C) 2021 The Qt Company Ltd. +// Copyright (C) 2019 Intel Corporation. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QTest> +#include <QResource> +#include <QtPlugin> #include <QtCore/QCoreApplication> #include <QtCore/QScopeGuard> #include <QtCore/private/qglobal_p.h> @@ -38,8 +15,10 @@ class tst_QResourceEngine: public QObject public: tst_QResourceEngine() -#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED) - : m_runtimeResourceRcc(QFileInfo(QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + QStringLiteral("/runtime_resource.rcc")).absoluteFilePath()) +#ifdef Q_OS_ANDROID + : m_runtimeResourceRcc( + QFileInfo(QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + + QStringLiteral("/runtime_resource.rcc")).absoluteFilePath()) #else : m_runtimeResourceRcc(QFINDTESTDATA("runtime_resource.rcc")) #endif @@ -57,33 +36,31 @@ private slots: void checkStructure(); void searchPath_data(); void searchPath(); -#if QT_DEPRECATED_SINCE(5, 13) - void searchPath_deprecated_data(); - void searchPath_deprecated(); -#endif void doubleSlashInRoot(); + void setLocale_data(); void setLocale(); void lastModified(); void resourcesInStaticPlugins(); + void qtResourceEmpty(); private: const QString m_runtimeResourceRcc; + QByteArray m_runtimeResourceData; }; void tst_QResourceEngine::initTestCase() { -#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED) +#ifdef Q_OS_ANDROID QString sourcePath(QStringLiteral(":/android_testdata/")); QString dataPath(QStandardPaths::writableLocation(QStandardPaths::CacheLocation)); QDirIterator it(sourcePath, QDirIterator::Subdirectories); while (it.hasNext()) { - it.next(); - - QFileInfo fileInfo = it.fileInfo(); + QFileInfo fileInfo = it.nextFileInfo(); if (!fileInfo.isDir()) { - QString destination(dataPath + QLatin1Char('/') + fileInfo.filePath().mid(sourcePath.length())); + QString destination(dataPath + QLatin1Char('/') + + fileInfo.filePath().mid(sourcePath.length())); QFileInfo destinationFileInfo(destination); if (!destinationFileInfo.exists()) { QVERIFY(QDir().mkpath(destinationFileInfo.path())); @@ -97,15 +74,27 @@ void tst_QResourceEngine::initTestCase() #endif QVERIFY(!m_runtimeResourceRcc.isEmpty()); + + QFile resourceFile(m_runtimeResourceRcc); + QVERIFY2(resourceFile.open(QIODevice::ReadOnly), qPrintable(resourceFile.errorString())); + + // register once with the file name, which will attempt to use mmap() + // (uses QDynamicFileResourceRoot) QVERIFY(QResource::registerResource(m_runtimeResourceRcc)); - QVERIFY(QResource::registerResource(m_runtimeResourceRcc, "/secondary_root/")); + + // and register a second time with a gifted memory block + // (uses QDynamicBufferResourceRoot) + m_runtimeResourceData = resourceFile.readAll(); + auto resourcePtr = reinterpret_cast<const uchar *>(m_runtimeResourceData.constData()); + QVERIFY(QResource::registerResource(resourcePtr, "/secondary_root/")); } void tst_QResourceEngine::cleanupTestCase() { // make sure we don't leak memory QVERIFY(QResource::unregisterResource(m_runtimeResourceRcc)); - QVERIFY(QResource::unregisterResource(m_runtimeResourceRcc, "/secondary_root/")); + auto resourcePtr = reinterpret_cast<const uchar *>(m_runtimeResourceData.constData()); + QVERIFY(QResource::unregisterResource(resourcePtr, "/secondary_root/")); } void tst_QResourceEngine::compressedResource_data() @@ -190,9 +179,10 @@ void tst_QResourceEngine::checkStructure_data() QStringList rootContents; rootContents << QLatin1String("aliasdir") -#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED) +#ifdef Q_OS_ANDROID << QLatin1String("android_testdata") #endif + << QLatin1String("empty") << QLatin1String("otherdir") << QLatin1String("runtime_resource") << QLatin1String("searchpath1") @@ -203,6 +193,7 @@ void tst_QResourceEngine::checkStructure_data() #if defined(BUILTIN_TESTDATA) << QLatin1String("testqrc") #endif + << QLatin1String("uncompresseddir") << QLatin1String("withoutslashes"); QTest::newRow("root dir") << QString(":/") @@ -210,7 +201,6 @@ void tst_QResourceEngine::checkStructure_data() << (QStringList() #if defined(BUILTIN_TESTDATA) << "parentdir.txt" - << "runtime_resource.rcc" #endif << "search_file.txt" #if defined(BUILTIN_TESTDATA) @@ -235,56 +225,56 @@ void tst_QResourceEngine::checkStructure_data() for(int i = 0; i < roots.size(); ++i) { const QString root = roots.at(i); - QTest::addRow("%s prefix dir", qPrintable(root)) << QString(root + "test/abc/123/+++") + QTest::addRow("prefix dir on %s", qPrintable(root)) << QString(root + "test/abc/123/+++") << QByteArray() << (QStringList() << QLatin1String("currentdir.txt") << QLatin1String("currentdir2.txt") << QLatin1String("parentdir.txt")) << (QStringList() << QLatin1String("subdir")) << QLocale::c() << qlonglong(0); - QTest::addRow("%s parent to prefix", qPrintable(root)) << QString(root + "test/abc/123") + QTest::addRow("parent to prefix on %s", qPrintable(root)) << QString(root + "test/abc/123") << QByteArray() << QStringList() << (QStringList() << QLatin1String("+++")) << QLocale::c() << qlonglong(0); - QTest::addRow("%s two parents prefix", qPrintable(root)) << QString(root + "test/abc") + QTest::addRow("two parents prefix on %s", qPrintable(root)) << QString(root + "test/abc") << QByteArray() << QStringList() << QStringList(QLatin1String("123")) << QLocale::c() << qlonglong(0); - QTest::addRow("%s test dir ", qPrintable(root)) << QString(root + "test") + QTest::addRow("test dir on %s", qPrintable(root)) << QString(root + "test") << QByteArray() << (QStringList() << QLatin1String("testdir.txt")) << (QStringList() << QLatin1String("abc") << QLatin1String("test")) << QLocale::c() << qlonglong(0); - QTest::addRow("%s prefix no slashes", qPrintable(root)) << QString(root + "withoutslashes") + QTest::addRow("prefix no slashes on %s", qPrintable(root)) << QString(root + "withoutslashes") << QByteArray() << QStringList("blahblah.txt") << QStringList() << QLocale::c() << qlonglong(0); - QTest::addRow("%s other dir", qPrintable(root)) << QString(root + "otherdir") + QTest::addRow("other dir on %s", qPrintable(root)) << QString(root + "otherdir") << QByteArray() << QStringList(QLatin1String("otherdir.txt")) << QStringList() << QLocale::c() << qlonglong(0); - QTest::addRow("%s alias dir", qPrintable(root)) << QString(root + "aliasdir") + QTest::addRow("alias dir on %s", qPrintable(root)) << QString(root + "aliasdir") << QByteArray() << QStringList(QLatin1String("aliasdir.txt")) << QStringList() << QLocale::c() << qlonglong(0); - QTest::addRow("%s second test dir", qPrintable(root)) << QString(root + "test/test") + QTest::addRow("second test dir on %s", qPrintable(root)) << QString(root + "test/test") << QByteArray() << (QStringList() << QLatin1String("test1.txt") << QLatin1String("test2.txt")) << QStringList() @@ -292,7 +282,7 @@ void tst_QResourceEngine::checkStructure_data() << qlonglong(0); info = QFileInfo(QFINDTESTDATA("testqrc/test/test/test1.txt")); - QTest::addRow("%s test1 text", qPrintable(root)) << QString(root + "test/test/test1.txt") + QTest::addRow("test1 text on %s", qPrintable(root)) << QString(root + "test/test/test1.txt") << QByteArray("abc\n") << QStringList() << QStringList() @@ -300,7 +290,7 @@ void tst_QResourceEngine::checkStructure_data() << qlonglong(info.size()); info = QFileInfo(QFINDTESTDATA("testqrc/blahblah.txt")); - QTest::addRow("%s text no slashes", qPrintable(root)) << QString(root + "withoutslashes/blahblah.txt") + QTest::addRow("text no slashes on %s", qPrintable(root)) << QString(root + "withoutslashes/blahblah.txt") << QByteArray("qwerty\n") << QStringList() << QStringList() @@ -309,7 +299,7 @@ void tst_QResourceEngine::checkStructure_data() info = QFileInfo(QFINDTESTDATA("testqrc/test/test/test2.txt")); - QTest::addRow("%s test1 text", qPrintable(root)) << QString(root + "test/test/test2.txt") + QTest::addRow("test2 text on %s", qPrintable(root)) << QString(root + "test/test/test2.txt") << QByteArray("def\n") << QStringList() << QStringList() @@ -317,7 +307,7 @@ void tst_QResourceEngine::checkStructure_data() << qlonglong(info.size()); info = QFileInfo(QFINDTESTDATA("testqrc/currentdir.txt")); - QTest::addRow("%s currentdir text", qPrintable(root)) << QString(root + "test/abc/123/+++/currentdir.txt") + QTest::addRow("currentdir text on %s", qPrintable(root)) << QString(root + "test/abc/123/+++/currentdir.txt") << QByteArray("\"This is the current dir\"\n") << QStringList() << QStringList() @@ -325,7 +315,7 @@ void tst_QResourceEngine::checkStructure_data() << qlonglong(info.size()); info = QFileInfo(QFINDTESTDATA("testqrc/currentdir2.txt")); - QTest::addRow("%s currentdir text2", qPrintable(root)) << QString(root + "test/abc/123/+++/currentdir2.txt") + QTest::addRow("currentdir text2 on %s", qPrintable(root)) << QString(root + "test/abc/123/+++/currentdir2.txt") << QByteArray("\"This is also the current dir\"\n") << QStringList() << QStringList() @@ -333,7 +323,7 @@ void tst_QResourceEngine::checkStructure_data() << qlonglong(info.size()); info = QFileInfo(QFINDTESTDATA("parentdir.txt")); - QTest::addRow("%s parentdir text", qPrintable(root)) << QString(root + "test/abc/123/+++/parentdir.txt") + QTest::addRow("parentdir text on %s", qPrintable(root)) << QString(root + "test/abc/123/+++/parentdir.txt") << QByteArray("abcdefgihklmnopqrstuvwxyz \n") << QStringList() << QStringList() @@ -341,7 +331,7 @@ void tst_QResourceEngine::checkStructure_data() << qlonglong(info.size()); info = QFileInfo(QFINDTESTDATA("testqrc/subdir/subdir.txt")); - QTest::addRow("%s subdir text", qPrintable(root)) << QString(root + "test/abc/123/+++/subdir/subdir.txt") + QTest::addRow("subdir text on %s", qPrintable(root)) << QString(root + "test/abc/123/+++/subdir/subdir.txt") << QByteArray("\"This is in the sub directory\"\n") << QStringList() << QStringList() @@ -349,7 +339,7 @@ void tst_QResourceEngine::checkStructure_data() << qlonglong(info.size()); info = QFileInfo(QFINDTESTDATA("testqrc/test/testdir.txt")); - QTest::addRow("%s testdir text", qPrintable(root)) << QString(root + "test/testdir.txt") + QTest::addRow("testdir text on %s", qPrintable(root)) << QString(root + "test/testdir.txt") << QByteArray("\"This is in the test directory\"\n") << QStringList() << QStringList() @@ -357,7 +347,7 @@ void tst_QResourceEngine::checkStructure_data() << qlonglong(info.size()); info = QFileInfo(QFINDTESTDATA("testqrc/otherdir/otherdir.txt")); - QTest::addRow("%s otherdir text", qPrintable(root)) << QString(root + "otherdir/otherdir.txt") + QTest::addRow("otherdir text on %s", qPrintable(root)) << QString(root + "otherdir/otherdir.txt") << QByteArray("\"This is the other dir\"\n") << QStringList() << QStringList() @@ -365,7 +355,7 @@ void tst_QResourceEngine::checkStructure_data() << qlonglong(info.size()); info = QFileInfo(QFINDTESTDATA("testqrc/test/testdir2.txt")); - QTest::addRow("%s alias text", qPrintable(root)) << QString(root + "aliasdir/aliasdir.txt") + QTest::addRow("alias text on %s", qPrintable(root)) << QString(root + "aliasdir/aliasdir.txt") << QByteArray("\"This is another file in this directory\"\n") << QStringList() << QStringList() @@ -373,7 +363,7 @@ void tst_QResourceEngine::checkStructure_data() << qlonglong(info.size()); info = QFileInfo(QFINDTESTDATA("testqrc/aliasdir/aliasdir.txt")); - QTest::addRow("%s korean text", qPrintable(root)) << QString(root + "aliasdir/aliasdir.txt") + QTest::addRow("korean text on %s", qPrintable(root)) << QString(root + "aliasdir/aliasdir.txt") << QByteArray("\"This is a korean text file\"\n") << QStringList() << QStringList() @@ -381,7 +371,7 @@ void tst_QResourceEngine::checkStructure_data() << qlonglong(info.size()); info = QFileInfo(QFINDTESTDATA("testqrc/aliasdir/aliasdir.txt")); - QTest::addRow("%s korean text 2", qPrintable(root)) << QString(root + "aliasdir/aliasdir.txt") + QTest::addRow("korean text 2 on %s", qPrintable(root)) << QString(root + "aliasdir/aliasdir.txt") << QByteArray("\"This is a korean text file\"\n") << QStringList() << QStringList() @@ -389,7 +379,7 @@ void tst_QResourceEngine::checkStructure_data() << qlonglong(info.size()); info = QFileInfo(QFINDTESTDATA("testqrc/test/german.txt")); - QTest::addRow("%s german text", qPrintable(root)) << QString(root + "aliasdir/aliasdir.txt") + QTest::addRow("german text on %s", qPrintable(root)) << QString(root + "aliasdir/aliasdir.txt") << QByteArray("Deutsch\n") << QStringList() << QStringList() @@ -397,7 +387,7 @@ void tst_QResourceEngine::checkStructure_data() << qlonglong(info.size()); info = QFileInfo(QFINDTESTDATA("testqrc/test/german.txt")); - QTest::addRow("%s german text 2", qPrintable(root)) << QString(root + "aliasdir/aliasdir.txt") + QTest::addRow("german text 2 on %s", qPrintable(root)) << QString(root + "aliasdir/aliasdir.txt") << QByteArray("Deutsch\n") << QStringList() << QStringList() @@ -405,10 +395,18 @@ void tst_QResourceEngine::checkStructure_data() << qlonglong(info.size()); QFile file(QFINDTESTDATA("testqrc/aliasdir/compressme.txt")); - file.open(QFile::ReadOnly); + QVERIFY(file.open(QFile::ReadOnly)); info = QFileInfo(QFINDTESTDATA("testqrc/aliasdir/compressme.txt")); - QTest::addRow("%s compressed text", qPrintable(root)) << QString(root + "aliasdir/aliasdir.txt") - << file.readAll() + QByteArray compressmeContents = file.readAll(); + QTest::addRow("compressed text on %s", qPrintable(root)) << QString(root + "aliasdir/aliasdir.txt") + << compressmeContents + << QStringList() + << QStringList() + << QLocale("de_CH") + << qlonglong(info.size()); + + QTest::addRow("non-compressed text on %s", qPrintable(root)) << QString(root + "uncompresseddir/uncompressed.txt") + << compressmeContents << QStringList() << QStringList() << QLocale("de_CH") @@ -451,7 +449,7 @@ void tst_QResourceEngine::checkStructure() } list = dir.entryInfoList(QDir::Files, QDir::Name); - QCOMPARE(containedFiles.size(), list.size()); + QCOMPARE(list.size(), containedFiles.size()); for (i=0; i<list.size(); ++i) { QVERIFY(!list.at(i).isDir()); @@ -459,7 +457,7 @@ void tst_QResourceEngine::checkStructure() } list = dir.entryInfoList(QDir::NoFilter, QDir::SortFlags(QDir::Name | QDir::DirsFirst)); - QCOMPARE(containedFiles.size() + containedDirs.size(), list.size()); + QCOMPARE(list.size(), containedFiles.size() + containedDirs.size()); for (i=0; i<list.size(); ++i) { QString expectedName; @@ -486,13 +484,25 @@ void tst_QResourceEngine::checkStructure() // check that it is still valid after closing the file file.close(); QCOMPARE(ba, contents); + + // memory should be writable because we used MapPrivateOption + *ptr = '\0'; + + // but shouldn't affect the actual file or a new mapping + QFile file2(pathName); + QVERIFY(file2.open(QFile::ReadOnly)); + QCOMPARE(file2.readAll(), contents); + ptr = file2.map(0, file.size(), QFile::MapPrivateOption); + QVERIFY2(ptr, qPrintable(file2.errorString())); + QByteArrayView bav(reinterpret_cast<const char *>(ptr), file.size()); + QCOMPARE(bav, contents); } QLocale::setDefault(QLocale::system()); } void tst_QResourceEngine::searchPath_data() { - auto searchPath = QFileInfo(QFINDTESTDATA("testqrc")).canonicalFilePath(); + auto searchPath = QFileInfo(QFINDTESTDATA("testqrc/test.qrc")).canonicalPath(); QTest::addColumn<QString>("searchPathPrefix"); QTest::addColumn<QString>("searchPath"); @@ -540,48 +550,6 @@ void tst_QResourceEngine::searchPath() qf.close(); } -#if QT_DEPRECATED_SINCE(5, 13) - -void tst_QResourceEngine::searchPath_deprecated_data() -{ - QTest::addColumn<QString>("searchPath"); - QTest::addColumn<QString>("file"); - QTest::addColumn<QByteArray>("expected"); - - QTest::newRow("no_search_path") << QString() - << ":search_file.txt" - << QByteArray("root\n"); - QTest::newRow("path1") << "/searchpath1" - << ":search_file.txt" - << QByteArray("path1\n"); - QTest::newRow("no_search_path2") << QString() - << ":/search_file.txt" - << QByteArray("root\n"); - QTest::newRow("path2") << "/searchpath2" - << ":search_file.txt" - << QByteArray("path2\n"); -} - -void tst_QResourceEngine::searchPath_deprecated() -{ - QFETCH(QString, searchPath); - QFETCH(QString, file); - QFETCH(QByteArray, expected); - - if(!searchPath.isEmpty()) - QDir::addResourceSearchPath(searchPath); - QFile qf(file); - QVERIFY(qf.open(QFile::ReadOnly)); - QByteArray actual = qf.readAll(); - - actual.replace('\r', ""); - - QCOMPARE(actual, expected); - qf.close(); -} - -#endif - void tst_QResourceEngine::checkUnregisterResource_data() { QTest::addColumn<QString>("rcc_file"); @@ -608,6 +576,15 @@ void tst_QResourceEngine::checkUnregisterResource() QVERIFY(QFile::exists(file_check)); QVERIFY(QResource::unregisterResource(rcc_file, root)); QVERIFY(!QFile::exists(file_check)); + { + // QTBUG-86088 + QVERIFY(QResource::registerResource(rcc_file, root)); + QFile file(file_check); + QVERIFY(file.open(QFile::ReadOnly)); + QVERIFY(!QResource::unregisterResource(rcc_file, root)); + file.close(); + QVERIFY(!QFile::exists(file_check)); + } QVERIFY(QResource::registerResource(rcc_file, root)); QVERIFY(QFile::exists(file_check)); QFileInfo fileInfo(file_check); @@ -624,13 +601,22 @@ void tst_QResourceEngine::doubleSlashInRoot() QVERIFY(QFile::exists("://secondary_root/runtime_resource/search_file.txt")); } +void tst_QResourceEngine::setLocale_data() +{ + QTest::addColumn<QString>("prefix"); + QTest::newRow("built-in") << QString(); + QTest::newRow("runtime") << "/runtime_resource/"; +} + void tst_QResourceEngine::setLocale() { + QFETCH(QString, prefix); QLocale::setDefault(QLocale::c()); // default constructed QResource gets the default locale QResource resource; - resource.setFileName("aliasdir/aliasdir.txt"); + resource.setFileName(prefix + "aliasdir/aliasdir.txt"); + QVERIFY(resource.isValid()); QCOMPARE(resource.compressionAlgorithm(), QResource::NoCompression); // change the default locale and make sure it doesn't affect the resource @@ -669,6 +655,14 @@ void tst_QResourceEngine::resourcesInStaticPlugins() QVERIFY(QFile::exists(":/staticplugin/main.cpp")); } +void tst_QResourceEngine::qtResourceEmpty() +{ + QFile f(":/empty/world.txt"); + QVERIFY(f.exists()); + QVERIFY(f.open(QIODevice::ReadOnly)); + QVERIFY(f.readAll().isEmpty()); +} + QTEST_MAIN(tst_QResourceEngine) #include "tst_qresourceengine.moc" diff --git a/tests/auto/corelib/io/qresourceengine/world.txt b/tests/auto/corelib/io/qresourceengine/world.txt new file mode 100644 index 0000000000..ce01362503 --- /dev/null +++ b/tests/auto/corelib/io/qresourceengine/world.txt @@ -0,0 +1 @@ +hello diff --git a/tests/auto/corelib/io/qsavefile/CMakeLists.txt b/tests/auto/corelib/io/qsavefile/CMakeLists.txt new file mode 100644 index 0000000000..26869eb163 --- /dev/null +++ b/tests/auto/corelib/io/qsavefile/CMakeLists.txt @@ -0,0 +1,21 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qsavefile Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qsavefile LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +# Collect test data +list(APPEND test_data "tst_qsavefile.cpp") + +qt_internal_add_test(tst_qsavefile + SOURCES + tst_qsavefile.cpp + TESTDATA ${test_data} +) diff --git a/tests/auto/corelib/io/qsavefile/qsavefile.pro b/tests/auto/corelib/io/qsavefile/qsavefile.pro deleted file mode 100644 index dd22d69ce6..0000000000 --- a/tests/auto/corelib/io/qsavefile/qsavefile.pro +++ /dev/null @@ -1,5 +0,0 @@ -CONFIG += testcase -TARGET = tst_qsavefile -QT = core testlib -SOURCES = tst_qsavefile.cpp -TESTDATA += tst_qsavefile.cpp diff --git a/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp b/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp index 8e500d7c8e..c027f8a3c1 100644 --- a/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp +++ b/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp @@ -1,45 +1,26 @@ -/**************************************************************************** -** -** Copyright (C) 2012 David Faure <faure@kde.org> -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtCore module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtTest/QtTest> +// Copyright (C) 2012 David Faure <faure@kde.org> +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QTest> +#include <QSaveFile> #include <qcoreapplication.h> #include <qstring.h> +#include <qsystemdetection.h> #include <qtemporaryfile.h> #include <qfile.h> #include <qdir.h> #include <qset.h> -#if defined(Q_OS_UNIX) && !defined(Q_OS_VXWORKS) +#if defined(Q_OS_UNIX) #include <unistd.h> // for geteuid #endif #if defined(Q_OS_WIN) -# include <windows.h> +# include <qt_windows.h> +#endif + +#ifdef Q_OS_INTEGRITY +#include "qplatformdefs.h" #endif // Restore permissions so that the QTemporaryDir cleanup can happen @@ -109,23 +90,40 @@ void tst_QSaveFile::transactionalWrite() QCOMPARE(file.fileName(), targetFile); QVERIFY(!QFile::exists(targetFile)); - QCOMPARE(file.write("Hello"), Q_INT64_C(5)); + const char *data = "Hello"; + QCOMPARE(file.write(data), qint64(strlen(data))); QCOMPARE(file.error(), QFile::NoError); QVERIFY(!QFile::exists(targetFile)); + QVERIFY(file.fileTime(QFile::FileModificationTime).isValid()); QVERIFY(file.commit()); QVERIFY(QFile::exists(targetFile)); QCOMPARE(file.fileName(), targetFile); +#if defined(Q_OS_WIN) + // Without this delay, file.fileTime() and file.size() tests fail to + // pass on Windows in the CI. It passes locally in a VM, so it looks like + // it depends on how often different filesystems on different OSes, update + // their metadata. + // Interestingly, this delay is enough to fix similar tests in the rest + // of tst_QSaveFile's functions. + QTRY_VERIFY(file.fileTime(QFile::FileModificationTime).isValid()); +#else + QVERIFY(file.fileTime(QFile::FileModificationTime).isValid()); +#endif + + QCOMPARE(file.size(), qint64(strlen(data))); QFile reader(targetFile); QVERIFY(reader.open(QIODevice::ReadOnly)); - QCOMPARE(QString::fromLatin1(reader.readAll()), QString::fromLatin1("Hello")); + QCOMPARE(QString::fromLatin1(reader.readAll()), QString::fromLatin1(data)); + QCOMPARE(file.fileTime(QFile::FileModificationTime), + reader.fileTime(QFile::FileModificationTime)); // check that permissions are the same as for QFile const QString otherFile = dir.path() + QString::fromLatin1("/otherfile"); QFile::remove(otherFile); QFile other(otherFile); - other.open(QIODevice::WriteOnly); + QVERIFY(other.open(QIODevice::WriteOnly)); other.close(); QCOMPARE(QFile::permissions(targetFile), QFile::permissions(otherFile)); } @@ -136,16 +134,21 @@ void tst_QSaveFile::retryTransactionalWrite() { #ifndef Q_OS_UNIX QSKIP("This test is Unix only"); -#endif +#else + // root can open the read-only file for writing... + if (geteuid() == 0) + QSKIP("This test does not work as the root user"); +#endif //Q_OS_UNIX QTemporaryDir dir; QVERIFY2(dir.isValid(), qPrintable(dir.errorString())); + const char *data = "Hello"; QString targetFile = dir.path() + QLatin1String("/outfile"); const QString readOnlyName = targetFile + QLatin1String(".ro"); { QFile readOnlyFile(readOnlyName); QVERIFY2(readOnlyFile.open(QIODevice::WriteOnly), msgCannotOpen(readOnlyFile).constData()); - readOnlyFile.write("Hello"); + readOnlyFile.write(data); readOnlyFile.close(); auto permissions = readOnlyFile.permissions(); permissions &= ~(QFileDevice::WriteOwner | QFileDevice::WriteGroup | QFileDevice::WriteUser); @@ -158,13 +161,15 @@ void tst_QSaveFile::retryTransactionalWrite() file.setFileName(targetFile); QVERIFY2(file.open(QIODevice::WriteOnly), msgCannotOpen(file).constData()); QVERIFY(file.isOpen()); - QCOMPARE(file.write("Hello"), Q_INT64_C(5)); + QCOMPARE(file.write(data), qint64(strlen(data))); QCOMPARE(file.error(), QFile::NoError); QVERIFY(file.commit()); + QCOMPARE(file.size(), qint64(strlen(data))); } void tst_QSaveFile::saveTwice() { + const char *hello = "Hello"; // Check that we can reuse a QSaveFile object // (and test the case of an existing target file) QTemporaryDir dir; @@ -172,16 +177,19 @@ void tst_QSaveFile::saveTwice() const QString targetFile = dir.path() + QString::fromLatin1("/outfile"); QSaveFile file(targetFile); QVERIFY2(file.open(QIODevice::WriteOnly), msgCannotOpen(file).constData()); - QCOMPARE(file.write("Hello"), Q_INT64_C(5)); + QCOMPARE(file.write(hello), qint64(strlen(hello))); QVERIFY2(file.commit(), qPrintable(file.errorString())); + QCOMPARE(file.size(), qint64(strlen(hello))); + const char *world = "World"; QVERIFY2(file.open(QIODevice::WriteOnly), msgCannotOpen(file).constData()); - QCOMPARE(file.write("World"), Q_INT64_C(5)); + QCOMPARE(file.write(world), qint64(strlen(world))); QVERIFY2(file.commit(), qPrintable(file.errorString())); + QCOMPARE(file.size(), qint64(strlen(world))); QFile reader(targetFile); QVERIFY2(reader.open(QIODevice::ReadOnly), msgCannotOpen(reader).constData()); - QCOMPARE(QString::fromLatin1(reader.readAll()), QString::fromLatin1("World")); + QCOMPARE(QString::fromLatin1(reader.readAll()), QString::fromLatin1(world)); } void tst_QSaveFile::textStreamManualFlush() @@ -192,16 +200,18 @@ void tst_QSaveFile::textStreamManualFlush() QSaveFile file(targetFile); QVERIFY2(file.open(QIODevice::WriteOnly), msgCannotOpen(file).constData()); + const char *data = "Manual flush"; QTextStream ts(&file); - ts << "Manual flush"; + ts << data; ts.flush(); QCOMPARE(file.error(), QFile::NoError); QVERIFY(!QFile::exists(targetFile)); QVERIFY(file.commit()); + QCOMPARE(file.size(), qint64(strlen(data))); QFile reader(targetFile); QVERIFY(reader.open(QIODevice::ReadOnly)); - QCOMPARE(QString::fromLatin1(reader.readAll().constData()), QString::fromLatin1("Manual flush")); + QCOMPARE(QString::fromLatin1(reader.readAll().constData()), QString::fromLatin1(data)); QFile::remove(targetFile); } @@ -448,6 +458,7 @@ void tst_QSaveFile::symlink() QVERIFY(saveFile.open(QIODevice::WriteOnly)); QCOMPARE(saveFile.write(someData), someData.size()); saveFile.commit(); + QCOMPARE(saveFile.size(), someData.size()); QFile file(targetFile); QVERIFY2(file.open(QIODevice::ReadOnly), msgCannotOpen(file).constData()); @@ -477,6 +488,7 @@ void tst_QSaveFile::symlink() QVERIFY(saveFile.open(QIODevice::WriteOnly)); QCOMPARE(saveFile.write(someData), someData.size()); saveFile.commit(); + QCOMPARE(saveFile.size(), someData.size()); // the explicit file becomes a file instead of a link QVERIFY(!QFileInfo(cyclicLink + QLatin1Char('1')).isSymLink()); @@ -556,6 +568,7 @@ void tst_QSaveFile::alternateDataStream() QVERIFY2(file.open(QIODevice::WriteOnly), qPrintable(file.errorString())); file.write(newContent); QVERIFY2(file.commit(), qPrintable(file.errorString())); + QCOMPARE(file.size(), qint64(strlen(newContent))); // check the contents QFile targetFile(adsName); diff --git a/tests/auto/corelib/io/qsettings/.gitattributes b/tests/auto/corelib/io/qsettings/.gitattributes index a4ad8d7644..920df33b54 100644 --- a/tests/auto/corelib/io/qsettings/.gitattributes +++ b/tests/auto/corelib/io/qsettings/.gitattributes @@ -1,5 +1,3 @@ resourcefile.ini -crlf resourcefile2.ini -crlf resourcefile3.ini -crlf -resourcefile4.ini -crlf -resourcefile5.ini -crlf diff --git a/tests/auto/corelib/io/qsettings/CMakeLists.txt b/tests/auto/corelib/io/qsettings/CMakeLists.txt new file mode 100644 index 0000000000..e68b2644af --- /dev/null +++ b/tests/auto/corelib/io/qsettings/CMakeLists.txt @@ -0,0 +1,51 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qsettings Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qsettings LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +# Test: +set(qsettings_resource_files + "bom.ini" + "resourcefile.ini" + "resourcefile2.ini" + "resourcefile3.ini" + "resourcefile6.plist" + "withcomments.ini" + "float.ini" + "qt5settings.ini" + "utf8settings.ini" +) + +qt_internal_add_test(tst_qsettings + SOURCES + tst_qsettings.cpp + INCLUDE_DIRECTORIES + ../../kernel/qmetatype + LIBRARIES + Qt::CorePrivate + Qt::Gui + TESTDATA ${qsettings_resource_files} + BUILTIN_TESTDATA +) + + +## Scopes: +##################################################################### + +qt_internal_extend_target(tst_qsettings CONDITION MSVC + LIBRARIES + advapi32 +) + +qt_internal_extend_target(tst_qsettings CONDITION APPLE + LIBRARIES + ${FWCoreFoundation} +) diff --git a/tests/auto/corelib/io/qsettings/float.ini b/tests/auto/corelib/io/qsettings/float.ini new file mode 100644 index 0000000000..bf9312c14c --- /dev/null +++ b/tests/auto/corelib/io/qsettings/float.ini @@ -0,0 +1,3 @@ +[test] +float=0.5 +float_qvariant=@Variant(\0\0\0\x87?\0\0\0) diff --git a/tests/auto/corelib/io/qsettings/qsettings.pro b/tests/auto/corelib/io/qsettings/qsettings.pro deleted file mode 100644 index 98ea337e7f..0000000000 --- a/tests/auto/corelib/io/qsettings/qsettings.pro +++ /dev/null @@ -1,11 +0,0 @@ -CONFIG += testcase -TARGET = tst_qsettings -QT = core-private gui testlib -SOURCES = tst_qsettings.cpp -RESOURCES += qsettings.qrc -INCLUDEPATH += $$PWD/../../kernel/qmetatype - -msvc: QMAKE_USE += advapi32 -darwin: LIBS += -framework CoreFoundation - -DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/corelib/io/qsettings/qsettings.qrc b/tests/auto/corelib/io/qsettings/qsettings.qrc deleted file mode 100644 index db1d8c663f..0000000000 --- a/tests/auto/corelib/io/qsettings/qsettings.qrc +++ /dev/null @@ -1,12 +0,0 @@ -<RCC> - <qresource prefix="/"> - <file>resourcefile.ini</file> - <file>resourcefile2.ini</file> - <file>resourcefile3.ini</file> - <file>resourcefile4.ini</file> - <file>resourcefile5.ini</file> - <file>resourcefile6.plist</file> - <file>bom.ini</file> - <file>withcomments.ini</file> - </qresource> -</RCC> diff --git a/tests/auto/corelib/io/qsettings/qt5settings.ini b/tests/auto/corelib/io/qsettings/qt5settings.ini new file mode 100644 index 0000000000..59239d29f3 --- /dev/null +++ b/tests/auto/corelib/io/qsettings/qt5settings.ini @@ -0,0 +1,11 @@ +[General] +.%2C%27%25U%U0430%U0431%U0432%U0433%22%09=".,'%!@#$" +%U265F=\x2658\x265a +%UD83C%UDF0D=\xd83c\xdf10 + +[Test] +BAR=BAR +B%C4R=B\xc4R +OST=OST +%D6SE=\xd6SE +%U042D%U0442%U043E\%U0442%U0435%U0441%U0442=\x42d\x442\x43e \x442\x435\x441\x442 diff --git a/tests/auto/corelib/io/qsettings/resourcefile4.ini b/tests/auto/corelib/io/qsettings/resourcefile4.ini deleted file mode 100644 index 09c21b1591..0000000000 --- a/tests/auto/corelib/io/qsettings/resourcefile4.ini +++ /dev/null @@ -1,2 +0,0 @@ -[Fa%E7ade] -QU%C9BEC=Façade/QUÉBEC diff --git a/tests/auto/corelib/io/qsettings/resourcefile5.ini b/tests/auto/corelib/io/qsettings/resourcefile5.ini deleted file mode 100644 index d2d2103560..0000000000 --- a/tests/auto/corelib/io/qsettings/resourcefile5.ini +++ /dev/null @@ -1,2 +0,0 @@ -[Fa%E7ade] -QU%C9BEC=Faade/QUBEC diff --git a/tests/auto/corelib/io/qsettings/tst_qsettings.cpp b/tests/auto/corelib/io/qsettings/tst_qsettings.cpp index c969e72c18..f4d7f076ef 100644 --- a/tests/auto/corelib/io/qsettings/tst_qsettings.cpp +++ b/tests/auto/corelib/io/qsettings/tst_qsettings.cpp @@ -1,52 +1,23 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - -#include <QtTest/QtTest> +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QTest> #include <QtCore/QSettings> #include <private/qsettings_p.h> + +#include "tst_qmetatype_common.h" + #include <QtCore/QCoreApplication> -#include <QtCore/QDateTime> -#include <QtCore/QtGlobal> -#include <QtCore/QMetaType> -#include <QtCore/QString> #include <QtCore/QDir> +#include <QtCore/QEventLoop> +#include <QtCore/QtGlobal> #include <QtCore/QThread> #include <QtCore/QSysInfo> #if QT_CONFIG(shortcut) # include <QtGui/QKeySequence> #endif -#include <QtCore> -#include <QtGui> -#include "tst_qmetatype.h" - #include <cctype> #include <stdlib.h> #if defined(Q_OS_WIN) && defined(Q_CC_GNU) @@ -56,17 +27,28 @@ #if defined(Q_OS_WIN) #include <QtCore/qt_windows.h> -#ifndef Q_OS_WINRT -# include <private/qwinregistry_p.h> -#endif +#include <private/qwinregistry_p.h> +#define QT_UNLINK _unlink #else #include <unistd.h> +#define QT_UNLINK unlink #endif #if defined(Q_OS_DARWIN) #include <CoreFoundation/CoreFoundation.h> #endif +#ifdef Q_OS_INTEGRITY +#include "qplatformdefs.h" +#endif + +#if defined(Q_OS_WASM) +#include <QtCore/private/qstdweb_p.h> + +#include "emscripten/threading.h" +#include "emscripten/val.h" +#endif + Q_DECLARE_METATYPE(QSettings::Format) #ifndef QSETTINGS_P_H_VERSION @@ -77,7 +59,7 @@ QT_FORWARD_DECLARE_CLASS(QSettings) static inline bool canWriteNativeSystemSettings() { -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) HKEY key; const LONG result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"Software", 0, KEY_WRITE, &key); if (result == ERROR_SUCCESS) @@ -104,6 +86,20 @@ static inline bool canWriteNativeSystemSettings() static const char insufficientPermissionSkipMessage[] = "Insufficient permissions for this test."; +static void populateWithFormats() +{ + QTest::addColumn<QSettings::Format>("format"); + + QTest::newRow("native") << QSettings::NativeFormat; +#if defined(Q_OS_WASM) + if (qstdweb::haveJspi()) + QTest::newRow("idb") << QSettings::WebIndexedDBFormat; +#endif // defined(Q_OS_WASM) + QTest::newRow("ini") << QSettings::IniFormat; + QTest::newRow("custom1") << QSettings::CustomFormat1; + QTest::newRow("custom2") << QSettings::CustomFormat2; +} + class tst_QSettings : public QObject { Q_OBJECT @@ -116,8 +112,11 @@ public slots: void cleanup() { cleanupTestFiles(); } private slots: void getSetCheck(); - void ctor_data(); + void ctor_data() { populateWithFormats(); } void ctor(); +#ifdef Q_OS_WASM + void idb(); +#endif void beginGroup(); void setValue(); void remove(); @@ -128,16 +127,16 @@ private slots: void syncAlternateDataStream(); #endif void setFallbacksEnabled(); - void setFallbacksEnabled_data(); - void fromFile_data(); + void setFallbacksEnabled_data() { populateWithFormats(); } + void fromFile_data() { populateWithFormats(); } void fromFile(); - void testArrays_data(); + void testArrays_data() { populateWithFormats(); } void testArrays(); - void testCaseSensitivity_data(); + void testCaseSensitivity_data() { populateWithFormats(); } void testCaseSensitivity(); void testErrorHandling_data(); void testErrorHandling(); - void testChildKeysAndGroups_data(); + void testChildKeysAndGroups_data() { populateWithFormats(); } void testChildKeysAndGroups(); void testUpdateRequestEvent(); void testThreadSafety(); @@ -147,10 +146,10 @@ private slots: void testRegistryShortRootNames(); void testRegistry32And64Bit(); void trailingWhitespace(); -#ifdef Q_OS_MAC +#ifdef Q_OS_DARWIN void fileName(); #endif - void isWritable_data(); + void isWritable_data() { populateWithFormats(); } void isWritable(); void registerFormat(); void setPath(); @@ -159,42 +158,45 @@ private slots: #if !defined(Q_OS_WIN) && !defined(QT_QSETTINGS_ALWAYS_CASE_SENSITIVE_AND_FORGET_ORIGINAL_KEY_ORDER) void dontReorderIniKeysNeedlessly(); #endif -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) void consistentRegistryStorage(); #endif #ifdef QT_BUILD_INTERNAL - void allKeys_data(); + void allKeys_data() { populateWithFormats(); } void allKeys(); - void childGroups_data(); + void childGroups_data() { populateWithFormats(); } void childGroups(); - void childKeys_data(); + void childKeys_data() { populateWithFormats(); } void childKeys(); - void setIniCodec(); void testIniParsing_data(); void testIniParsing(); void testEscapes(); void testNormalizedKey_data(); void testNormalizedKey(); - void testVariantTypes_data(); + void testVariantTypes_data() { populateWithFormats(); } void testVariantTypes(); void testMetaTypes_data(); void testMetaTypes(); #endif - void rainersSyncBugOnMac_data(); + void rainersSyncBugOnMac_data() { populateWithFormats(); } void rainersSyncBugOnMac(); void recursionBug(); void testByteArray_data(); void testByteArray(); void testByteArrayNativeFormat(); - void iniCodec(); void bom(); void embeddedZeroByte_data(); void embeddedZeroByte(); void spaceAfterComment(); + void floatAsQVariant(); void testXdg(); + + void testReadKeys_data(); + void testReadKeys(); + private: void cleanupTestFiles(); @@ -216,12 +218,7 @@ void tst_QSettings::getSetCheck() static QString settingsPath(const char *path = nullptr) { // Temporary path for files that are specified explicitly in the constructor. -#ifndef Q_OS_WINRT static const QString tempPath = QDir::tempPath() + QLatin1String("/tst_QSettings"); -#else - static const QString tempPath = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) - + QLatin1String("/tst_QSettings"); -#endif return path && *path ? tempPath + QLatin1Char('/') + QLatin1String(path) : tempPath; } @@ -282,16 +279,6 @@ static bool writeCustom3File(QIODevice &device, const QSettings::SettingsMap &ma return true; } -static void populateWithFormats() -{ - QTest::addColumn<QSettings::Format>("format"); - - QTest::newRow("native") << QSettings::NativeFormat; - QTest::newRow("ini") << QSettings::IniFormat; - QTest::newRow("custom1") << QSettings::CustomFormat1; - QTest::newRow("custom2") << QSettings::CustomFormat2; -} - tst_QSettings::tst_QSettings() : m_canWriteNativeSystemSettings(canWriteNativeSystemSettings()) { @@ -326,7 +313,7 @@ void tst_QSettings::cleanupTestFiles() if (settingsDir.exists()) QVERIFY(settingsDir.removeRecursively()); -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) QSettings("HKEY_CURRENT_USER\\Software\\software.org", QSettings::NativeFormat).clear(); QSettings("HKEY_CURRENT_USER\\Software\\other.software.org", QSettings::NativeFormat).clear(); QSettings("HKEY_CURRENT_USER\\Software\\foo", QSettings::NativeFormat).clear(); @@ -341,7 +328,7 @@ void tst_QSettings::cleanupTestFiles() QSettings("HKEY_LOCAL_MACHINE\\Software\\bat", QSettings::NativeFormat).clear(); QSettings("HKEY_LOCAL_MACHINE\\Software\\baz", QSettings::NativeFormat).clear(); } -#elif defined(Q_OS_DARWIN) || defined(Q_OS_WINRT) +#elif defined(Q_OS_DARWIN) QSettings(QSettings::UserScope, "software.org", "KillerAPP").clear(); QSettings(QSettings::SystemScope, "software.org", "KillerAPP").clear(); QSettings(QSettings::UserScope, "other.software.org", "KillerAPP").clear(); @@ -351,15 +338,36 @@ void tst_QSettings::cleanupTestFiles() QSettings(QSettings::UserScope, "other.software.org").clear(); QSettings(QSettings::SystemScope, "other.software.org").clear(); #endif +#if defined(Q_OS_WASM) + emscripten::val::global("window")["localStorage"].call<void>("clear"); + if (qstdweb::haveJspi()) { + QSettings(QSettings::Format::WebIndexedDBFormat, QSettings::UserScope, "software.org", + "KillerAPP") + .clear(); + QSettings(QSettings::Format::WebIndexedDBFormat, QSettings::SystemScope, "software.org", + "KillerAPP") + .clear(); + QSettings(QSettings::Format::WebIndexedDBFormat, QSettings::UserScope, "other.software.org", + "KillerAPP") + .clear(); + QSettings(QSettings::Format::WebIndexedDBFormat, QSettings::SystemScope, + "other.software.org", "KillerAPP") + .clear(); + QSettings(QSettings::Format::WebIndexedDBFormat, QSettings::UserScope, "software.org") + .clear(); + QSettings(QSettings::Format::WebIndexedDBFormat, QSettings::SystemScope, "software.org") + .clear(); + QSettings(QSettings::Format::WebIndexedDBFormat, QSettings::UserScope, "other.software.org") + .clear(); + QSettings(QSettings::Format::WebIndexedDBFormat, QSettings::SystemScope, + "other.software.org") + .clear(); + } +#endif const QString foo(QLatin1String("foo")); -#if defined(Q_OS_WINRT) - QSettings(foo, QSettings::NativeFormat).clear(); - QFile fooFile(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + QLatin1Char('/') + foo); -#else QFile fooFile(foo); -#endif if (fooFile.exists()) QVERIFY2(fooFile.remove(), qPrintable(fooFile.errorString())); } @@ -368,11 +376,6 @@ void tst_QSettings::cleanupTestFiles() Test the constructors and the assignment operator. */ -void tst_QSettings::ctor_data() -{ - populateWithFormats(); -} - void tst_QSettings::ctor() { QFETCH(QSettings::Format, format); @@ -535,14 +538,14 @@ void tst_QSettings::ctor() QSettings settings5(format, QSettings::UserScope, "SoftWare.ORG", "killerApp"); bool caseSensitive = true; -#if defined(Q_OS_MAC) +#if defined(Q_OS_DARWIN) if (format == QSettings::NativeFormat) { // more details in QMacSettingsPrivate::QMacSettingsPrivate(), organization was comify()-ed - caseSensitive = settings5.fileName().contains("SoftWare.ORG");; + caseSensitive = settings5.fileName().contains("SoftWare.ORG"); } else { caseSensitive = pathconf(settings5.fileName().toLatin1().constData(), _PC_CASE_SENSITIVE); } -#elif defined(Q_OS_WIN32) || defined(Q_OS_WINRT) +#elif defined(Q_OS_WIN32) caseSensitive = false; #endif if (caseSensitive) @@ -588,7 +591,7 @@ void tst_QSettings::ctor() QCOMPARE(settings1.value("alpha/beta/geometry/width").toInt(), 3); QCOMPARE(settings1.value("alpha/beta/geometry/height").toInt(), 4); QCOMPARE(settings1.value("alpha/gamma/splitter").toInt(), 5); - QCOMPARE(settings1.allKeys().count(), 6); + QCOMPARE(settings1.allKeys().size(), 6); QCOMPARE(settings2.value("alpha/beta/geometry").toInt(), -7); QCOMPARE(settings2.value("alpha/beta/geometry/x").toInt(), 1); @@ -596,7 +599,7 @@ void tst_QSettings::ctor() QCOMPARE(settings2.value("alpha/beta/geometry/width").toInt(), 3); QCOMPARE(settings2.value("alpha/beta/geometry/height").toInt(), 4); QCOMPARE(settings2.value("alpha/gamma/splitter").toInt(), 5); - QCOMPARE(settings2.allKeys().count(), 6); + QCOMPARE(settings2.allKeys().size(), 6); } { @@ -607,7 +610,7 @@ void tst_QSettings::ctor() QCOMPARE(settings1.value("alpha/beta/geometry/width").toInt(), 3); QCOMPARE(settings1.value("alpha/beta/geometry/height").toInt(), 4); QCOMPARE(settings1.value("alpha/gamma/splitter").toInt(), 5); - QCOMPARE(settings1.allKeys().count(), 6); + QCOMPARE(settings1.allKeys().size(), 6); } { @@ -616,8 +619,8 @@ void tst_QSettings::ctor() QCoreApplication::instance()->setOrganizationName(""); QCoreApplication::instance()->setApplicationName(""); QSettings settings; -#if defined(Q_OS_MAC) || defined(Q_OS_WINRT) - QEXPECT_FAIL("native", "Default settings on Mac/WinRT are valid, despite organization domain, name, and app name being null", Continue); +#if defined(Q_OS_DARWIN) + QEXPECT_FAIL("native", "Default settings on Mac are valid, despite organization domain, name, and app name being null", Continue); #endif QCOMPARE(settings.status(), QSettings::AccessError); QCoreApplication::instance()->setOrganizationName("software.org"); @@ -631,8 +634,8 @@ void tst_QSettings::ctor() } QSettings settings(format, QSettings::UserScope, "", ""); -#if defined(Q_OS_MAC) || defined(Q_OS_WINRT) - QEXPECT_FAIL("native", "Default settings on Mac/WinRT are valid, despite organization domain, name, and app name being null", Continue); +#if defined(Q_OS_DARWIN) + QEXPECT_FAIL("native", "Default settings on Mac are valid, despite organization domain, name, and app name being null", Continue); #endif QCOMPARE(settings.status(), QSettings::AccessError); QSettings settings2(format, QSettings::UserScope, "software.org", "KillerAPP"); @@ -656,6 +659,50 @@ void tst_QSettings::ctor() } } +#if defined(Q_OS_WASM) +void tst_QSettings::idb() +{ + if (!qstdweb::haveJspi()) + QSKIP("JSPI needed for IndexedDB format"); + + QString systemScopeOrganizationWideFile; + { + QSettings settingsUserScopeAppSpecific(QSettings::Format::WebIndexedDBFormat, + QSettings::UserScope, "software.org", "KillerAPP"); + QSettings settingsUserScopeOrganizationWide(QSettings::Format::WebIndexedDBFormat, + QSettings::UserScope, "software.org"); + QSettings settingsSystemScopeAppSpecific(QSettings::Format::WebIndexedDBFormat, + QSettings::SystemScope, "software.org", + "KillerAPP"); + QSettings settingsSystemScopeOrganizationWide(QSettings::Format::WebIndexedDBFormat, + QSettings::SystemScope, "software.org"); + + settingsSystemScopeOrganizationWide.setValue("testKey", 1); + systemScopeOrganizationWideFile = settingsSystemScopeOrganizationWide.fileName(); + } + + // Emscripten's memfs has a bug that makes a file appear twice in the hashmap. + while (QFile::exists(systemScopeOrganizationWideFile)) { + Q_ASSERT(QFile::remove(systemScopeOrganizationWideFile)); + } + + QEventLoop loop; + QTimer timer; + timer.setInterval(1); + + connect(&timer, &QTimer::timeout, [&loop]() { loop.quit(); }); + timer.start(); + + loop.exec(); + { + QSettings settingsUserScopeAppSpecific(QSettings::Format::WebIndexedDBFormat, + QSettings::UserScope, "software.org", "KillerAPP"); + + QCOMPARE(settingsUserScopeAppSpecific.value("testKey").toInt(), 1); + } +} +#endif // Q_OS_WASM + void tst_QSettings::testByteArray_data() { QTest::addColumn<QByteArray>("data"); @@ -695,28 +742,6 @@ void tst_QSettings::testByteArrayNativeFormat() #endif } -void tst_QSettings::iniCodec() -{ - { - QSettings settings("QtProject", "tst_qsettings"); - settings.setIniCodec("cp1251"); - QByteArray ba; - ba.resize(256); - for (int i = 0; i < ba.size(); i++) - ba[i] = i; - settings.setValue("array",ba); - } - { - QSettings settings("QtProject", "tst_qsettings"); - settings.setIniCodec("cp1251"); - QByteArray ba = settings.value("array").toByteArray(); - QCOMPARE(ba.size(), 256); - for (int i = 0; i < ba.size(); i++) - QCOMPARE((uchar)ba.at(i), (uchar)i); - } - -} - void tst_QSettings::bom() { QSettings s(":/bom.ini", QSettings::IniFormat); @@ -744,6 +769,10 @@ void tst_QSettings::embeddedZeroByte_data() QTest::newRow("@bytearray\\0") << QVariant(bytes); QTest::newRow("@string\\0") << QVariant(QString::fromLatin1(bytes.data(), bytes.size())); + + bytes = QByteArray("@\xdd\x7d", 3); + QTest::newRow("@-prefixed data") << QVariant(bytes); + QTest::newRow("@-prefixed data as string") << QVariant(QString::fromLatin1(bytes.data(), bytes.size())); } void tst_QSettings::embeddedZeroByte() @@ -757,11 +786,11 @@ void tst_QSettings::embeddedZeroByte() QSettings settings("QtProject", "tst_qsettings"); QVariant outValue = settings.value(QTest::currentDataTag()); - switch (value.type()) { - case QVariant::ByteArray: + switch (value.typeId()) { + case QMetaType::QByteArray: QCOMPARE(outValue.toByteArray(), value.toByteArray()); break; - case QVariant::String: + case QMetaType::QString: QCOMPARE(outValue.toString(), value.toString()); break; default: @@ -801,6 +830,20 @@ void tst_QSettings::spaceAfterComment() settings.endGroup(); } +// test if a qvariant-encoded float can be read +void tst_QSettings::floatAsQVariant() +{ + QVERIFY(QFile::exists(":/float.ini")); + QSettings s(":/float.ini", QSettings::IniFormat); + + s.beginGroup("test"); + QCOMPARE(s.value("float").toDouble(), 0.5); + QCOMPARE(s.value("float_qvariant").toDouble(), 0.5); + + QCOMPARE(s.value("float").toFloat(), 0.5); + QCOMPARE(s.value("float_qvariant").toFloat(), 0.5); +} + void tst_QSettings::testErrorHandling_data() { QTest::addColumn<int>("filePerms"); // -1 means file should not exist @@ -965,11 +1008,12 @@ void tst_QSettings::testIniParsing() if ( settings.status() == QSettings::NoError ) { // else no point proceeding QVariant v = settings.value(key); - QVERIFY(v.canConvert(expect.type())); + if (expect.isValid()) + QVERIFY(v.canConvert(expect.metaType())); // check some types so as to give prettier error messages - if ( v.type() == QVariant::String ) { + if ( v.typeId() == QMetaType::QString ) { QCOMPARE(v.toString(), expect.toString()); - } else if ( v.type() == QVariant::Int ) { + } else if ( v.typeId() == QMetaType::Int ) { QCOMPARE(v.toInt(), expect.toInt()); } else { QCOMPARE(v, expect); @@ -1125,6 +1169,14 @@ void tst_QSettings::setValue() settings.setValue("key 2", QString("false")); QCOMPARE(settings.value("key 2", true).toBool(), false); + settings.setValue("key 2", double(1234.56)); + QCOMPARE(settings.value("key 2").toDouble(), double(1234.56)); + QCOMPARE(settings.value("key 2").toString().left(7), QString::number(double(1234.56))); + + settings.setValue("key 2", float(1234.56)); + QCOMPARE(settings.value("key 2").toFloat(), float(1234.56)); + QCOMPARE(settings.value("key 2").toString().left(7), QString::number(float(1234.56))); + // The following block should not compile. /* settings.setValue("key 2", "true"); @@ -1151,7 +1203,7 @@ void tst_QSettings::setValue() QCOMPARE(settings.value("key 2").toStringList(), QStringList() << "" << "a" << "" << "bc" << ""); settings.setValue("key 3", QList<QVariant>()); - QCOMPARE(settings.value("key 3").toList(), QList<QVariant>()); + QVERIFY(settings.value("key 3").toList().isEmpty()); settings.setValue("key 3", QList<QVariant>() << 1 << QString("a")); QCOMPARE(settings.value("key 3").toList(), QList<QVariant>() << 1 << QString("a")); @@ -1185,7 +1237,7 @@ template<int MetaTypeId> static void testMetaTypesHelper(QSettings::Format format) { typedef typename MetaEnumToType<MetaTypeId>::Type Type; - const char *key = QMetaType::typeName(MetaTypeId); + const char *key = QMetaType(MetaTypeId).name(); Type *value = TestValueFactory<MetaTypeId>::create(); QVariant inputVariant = QVariant::fromValue(*value); @@ -1204,8 +1256,8 @@ static void testMetaTypesHelper(QSettings::Format format) QSettings settings(format, scope, organization, applicationName); QVariant outputVariant = settings.value(key); if (MetaTypeId != QMetaType::QVariant) - QVERIFY(outputVariant.canConvert(MetaTypeId)); - if (outputVariant.type() != inputVariant.type()) + QVERIFY(outputVariant.canConvert(QMetaType(MetaTypeId))); + if (outputVariant.typeId() != inputVariant.typeId()) qWarning() << "type mismatch between" << inputVariant << "and" << outputVariant; QCOMPARE(qvariant_cast<Type >(outputVariant), *value); } @@ -1244,7 +1296,7 @@ void tst_QSettings::testMetaTypes_data() #define ADD_METATYPE_TEST_ROW(MetaTypeName, MetaTypeId, RealType) \ { \ const char *formatName = QMetaEnum::fromType<QSettings::Format>().valueToKey(formats[i]); \ - const char *typeName = QMetaType::typeName(QMetaType::MetaTypeName); \ + const char *typeName = QMetaType(QMetaType::MetaTypeName).name(); \ QTest::newRow(QString("%1:%2").arg(formatName).arg(typeName).toLatin1().constData()) \ << QSettings::Format(formats[i]) << int(QMetaType::MetaTypeName); \ } @@ -1279,106 +1331,102 @@ FOR_EACH_CORE_METATYPE(RETURN_CREATE_FUNCTION) TypeTestFunctionGetter::get(type)(format); } - -void tst_QSettings::testVariantTypes_data() -{ - populateWithFormats(); -} #endif #ifdef QT_BUILD_INTERNAL void tst_QSettings::testVariantTypes() { -#define testVal(key, val, tp, rtype) \ - { \ - QSettings settings1(format, QSettings::UserScope, "software.org", "KillerAPP"); \ - settings1.setValue(key, QVariant::fromValue(val)); \ - } \ - QConfFile::clearCache(); \ - { \ - QSettings settings2(format, QSettings::UserScope, "software.org", "KillerAPP"); \ - QVariant v = settings2.value(key); \ - QVERIFY(qvariant_cast<tp >(v) == val); \ - QVERIFY(v.type() == QVariant::rtype); \ + QFETCH(QSettings::Format, format); + + { + QSettings settings(format, QSettings::UserScope, "software.org", "KillerAPP"); + QVERIFY(!settings.contains("empty")); + QCOMPARE(settings.value("empty"), QVariant()); + + settings.setValue("empty", QVariant()); + QVERIFY(settings.contains("empty")); + QCOMPARE(settings.value("empty"), QVariant()); + + settings.setValue("empty", QVariant(1)); + QVERIFY(settings.contains("empty")); + QCOMPARE(settings.value("empty"), QVariant(1)); + + settings.setValue("empty", QVariant()); + QVERIFY(settings.contains("empty")); + QCOMPARE(settings.value("empty"), QVariant()); + + settings.remove("empty"); + QVERIFY(!settings.contains("empty")); + QCOMPARE(settings.value("empty"), QVariant()); } - typedef QMap<QString, QVariant> TestVariantMap; + auto checker = [format](const char *key, auto value, QMetaType::Type expected) { + { + QSettings settings(format, QSettings::UserScope, "software.org", "KillerAPP"); + settings.setValue(key, QVariant::fromValue(value)); + } + QConfFile::clearCache(); + { + QSettings settings(format, QSettings::UserScope, "software.org", "KillerAPP"); + QVariant actual = settings.value(key); + QCOMPARE(actual.metaType().id(), expected); + QCOMPARE(qvariant_cast<decltype(value)>(actual), value); + } + }; +#define testValue(key, supplied, expected) do { \ + checker(key, supplied, QMetaType::expected); \ + if (QTest::currentTestFailed()) \ + return; \ + } while (0) - QFETCH(QSettings::Format, format); + typedef QMap<QString, QVariant> TestVariantMap; TestVariantMap m2; m2.insert("ene", "due"); m2.insert("rike", "fake"); m2.insert("borba", "dorba"); - testVal("key2", m2, TestVariantMap, Map); + testValue("customMap", m2, QVariantMap); - QStringList l2; + QStringList l2 { "ene", "due", "@Point(1 2)", "@fake" }; + testValue("stringsAt", l2, QStringList); - l2 << "ene" << "due" << "@Point(1 2)" << "@fake"; - testVal("key3", l2, QStringList, StringList); + l2 = { "ene", "due", "rike", "fake" }; + testValue("strings", l2, QStringList); - l2.clear(); - l2 << "ene" << "due" << "rike" << "fake"; - testVal("key3", l2, QStringList, StringList); - - QList<QVariant> l3; QDate date = QDate::currentDate(); QTime time = QTime::currentTime(); - l3 << QString("ene") << 10 << QVariant::fromValue(QColor(1, 2, 3)) << QVariant(QRect(1, 2, 3, 4)) - << QVariant(QSize(4, 56)) << QVariant(QPoint(4, 2)) << true << false << date << time; - testVal("key3", l3, QVariantList, List); - - testVal("key4", QString("hello"), QString, String); - testVal("key5", QColor(1, 2, 3), QColor, Color); - testVal("key6", QRect(1, 2, 3, 4), QRect, Rect); - testVal("key7", QSize(4, 56), QSize, Size); - testVal("key8", QPoint(4, 2), QPoint, Point); - testVal("key10", date, QDate, Date); - testVal("key11", time, QTime, Time); - testVal("key12", QByteArray("foo bar"), QByteArray, ByteArray); - - { - QSettings settings(format, QSettings::UserScope, "software.org", "KillerAPP"); - QVERIFY(!settings.contains("key99")); - QCOMPARE(settings.value("key99"), QVariant()); - - settings.setValue("key99", QVariant()); - QVERIFY(settings.contains("key99")); - QCOMPARE(settings.value("key99"), QVariant()); - - settings.setValue("key99", QVariant(1)); - QVERIFY(settings.contains("key99")); - QCOMPARE(settings.value("key99"), QVariant(1)); + QList<QVariant> l3 { QString("ene"), 10, QVariant::fromValue(QColor(1, 2, 3)), + QVariant(QRect(1, 2, 3, 4)), QVariant(QSize(4, 56)), QVariant(QPoint(4, 2)), + true, false, date, time }; + testValue("mixedList", l3, QVariantList); + + testValue("string", QString("hello"), QString); + testValue("color", QColor(1, 2, 3), QColor); + testValue("rect", QRect(1, 2, 3, 4), QRect); + testValue("size", QSize(4, 56), QSize); + testValue("point", QPoint(4, 2), QPoint); + testValue("date", date, QDate); + testValue("time", time, QTime); + testValue("byteArray", QByteArray("foo bar"), QByteArray); + + QList<QVariant> l4 { QVariant(m2), QVariant(l2), QVariant(l3) }; + testValue("collectList", l4, QVariantList); - settings.setValue("key99", QVariant()); - QVERIFY(settings.contains("key99")); - QCOMPARE(settings.value("key99"), QVariant()); - - settings.remove("key99"); - QVERIFY(!settings.contains("key99")); - QCOMPARE(settings.value("key99"), QVariant()); - } - - QList<QVariant> l4; - l4 << QVariant(m2) << QVariant(l2) << QVariant(l3); - testVal("key13", l4, QVariantList, List); QDateTime dt = QDateTime::currentDateTime(); - dt.setOffsetFromUtc(3600); - testVal("key14", dt, QDateTime, DateTime); + dt.setTimeZone(QTimeZone::fromSecondsAheadOfUtc(3600)); + testValue("dateTime", dt, QDateTime); #if QT_CONFIG(shortcut) // We store key sequences as strings instead of binary variant blob, for improved // readability in the resulting format. - if (format >= QSettings::InvalidFormat) { - testVal("keysequence", QKeySequence(Qt::ControlModifier + Qt::Key_F1), QKeySequence, KeySequence); - } else { - testVal("keysequence", - QKeySequence(Qt::ControlModifier + Qt::Key_F1).toString(QKeySequence::NativeText), - QString, String); - } + QKeySequence seq(Qt::ControlModifier | Qt::Key_F1); + if (format >= QSettings::InvalidFormat) + testValue("keySequence", seq, QKeySequence); + else + testValue("keySequence", seq.toString(QKeySequence::NativeText), QString); #endif // QT_CONFIG(shortcut) -#undef testVal +#undef testValue } #endif @@ -1748,14 +1796,9 @@ void tst_QSettings::sync() // Now "some other app" will change other.software.org.ini QString userConfDir = settingsPath("__user__") + QDir::separator(); -#if !defined(Q_OS_WINRT) - unlink((userConfDir + "other.software.org.ini").toLatin1()); + QT_UNLINK((userConfDir + "other.software.org.ini").toLatin1()); rename((userConfDir + "software.org.ini").toLatin1(), (userConfDir + "other.software.org.ini").toLatin1()); -#else - QFile::remove(userConfDir + "other.software.org.ini"); - QFile::rename(userConfDir + "software.org.ini" , userConfDir + "other.software.org.ini"); -#endif settings2.sync(); @@ -1773,12 +1816,12 @@ void tst_QSettings::sync() QCOMPARE(settings2.value("moo/beta/geometry/width").toInt(), 3); QCOMPARE(settings2.value("moo/beta/geometry/height").toInt(), 4); QCOMPARE(settings2.value("moo/gamma/splitter").toInt(), 5); - QCOMPARE(settings2.allKeys().count(), 11); + QCOMPARE(settings2.allKeys().size(), 11); // Now, software.org.ini no longer exists, this is same as another app // clearing all settings. settings1.sync(); - QCOMPARE(settings1.allKeys().count(), 0); + QCOMPARE(settings1.allKeys().size(), 0); // Now "some other app" will change software.org.ini QVERIFY(QFile::rename((userConfDir + "other.software.org.ini").toLatin1(), @@ -1796,7 +1839,7 @@ void tst_QSettings::sync() QCOMPARE(settings1.value("moo/beta/geometry/width").toInt(), 3); QCOMPARE(settings1.value("moo/beta/geometry/height").toInt(), 4); QCOMPARE(settings1.value("moo/gamma/splitter").toInt(), 5); - QCOMPARE(settings1.allKeys().count(), 11); + QCOMPARE(settings1.allKeys().size(), 11); } void tst_QSettings::syncNonWriteableDir() @@ -1871,11 +1914,6 @@ void tst_QSettings::syncAlternateDataStream() } #endif -void tst_QSettings::setFallbacksEnabled_data() -{ - populateWithFormats(); -} - void tst_QSettings::setFallbacksEnabled() { QFETCH(QSettings::Format, format); @@ -1960,11 +1998,6 @@ void tst_QSettings::setFallbacksEnabled() QVERIFY(!settings1.contains("key 5")); } -void tst_QSettings::testChildKeysAndGroups_data() -{ - populateWithFormats(); -} - void tst_QSettings::testChildKeysAndGroups() { QFETCH(QSettings::Format, format); @@ -2025,6 +2058,24 @@ void tst_QSettings::testChildKeysAndGroups() l.sort(); QCOMPARE(l, QStringList() << "bar" << "foo"); } + +#if defined(Q_OS_WASM) + // WebIndexedDBFormat does not use the cached settings file on creation, but instead always uses + // the file from the indexed DB anew. + if (format == QSettings::Format::WebIndexedDBFormat) + settings1.sync(); +#endif + + { + QSettings settings3(format, QSettings::UserScope, "software.org", "application"); + settings3.setFallbacksEnabled(false); + settings3.beginGroup("alpha"); + QCOMPARE(settings3.childGroups(), QStringList()); + settings3.setFallbacksEnabled(true); + QStringList children = settings3.childGroups(); + children.sort(); + QCOMPARE(children, QStringList({"beta", "gamma"})); + } } void tst_QSettings::testUpdateRequestEvent() @@ -2070,7 +2121,7 @@ int numThreadSafetyFailures; class SettingsThread : public QThread { public: - void run(); + void run() override; void start(int n) { param = n; QThread::start(); } private: @@ -2084,7 +2135,7 @@ void SettingsThread::run() settings.setValue(QString::number((param * NumIterations) + i), param); settings.sync(); if (settings.status() != QSettings::NoError) { - QWARN(qPrintable(QString("Unexpected QSettings status %1").arg((int)settings.status()))); + qWarning() << qPrintable(QString("Unexpected QSettings status %1").arg((int)settings.status())); ++numThreadSafetyFailures; } } @@ -2092,6 +2143,16 @@ void SettingsThread::run() void tst_QSettings::testThreadSafety() { +#if !QT_CONFIG(thread) + QSKIP("This test requires threads to be enabled."); +#endif // !QT_CONFIG(thread) +#if defined(Q_OS_WASM) + if (!qstdweb::haveJspi()) + QSKIP("Test needs jspi on WASM. Calls are proxied to the main thread from SettingsThreads, " + "which necessitates the use of an event loop to yield to the main loop. Event loops " + "require jspi."); +#endif + SettingsThread threads[NumThreads]; int i, j; @@ -2099,6 +2160,19 @@ void tst_QSettings::testThreadSafety() for (i = 0; i < NumThreads; ++i) threads[i].start(i + 1); + +#if defined(Q_OS_WASM) && QT_CONFIG(thread) + QEventLoop loop; + int remaining = NumThreads; + for (int i = 0; i < NumThreads; ++i) { + QObject::connect(&threads[i], &QThread::finished, this, [&remaining, &loop]() { + if (!--remaining) + loop.quit(); + }); + } + loop.exec(); +#endif // defined(Q_OS_WASM) && QT_CONFIG(thread) + for (i = 0; i < NumThreads; ++i) threads[i].wait(); @@ -2153,20 +2227,17 @@ void tst_QSettings::testNormalizedKey() inKey.detach(); - QString result = QSettingsPrivate::normalizedKey(inKey); - QCOMPARE(result, outKey); - - /* - If the key is already normalized, we verify that outKey is - just a shallow copy of the input string. This is an important - optimization that shouldn't be removed accidentally. - */ - if (inKey == outKey) { - QVERIFY(!result.isDetached()); - } else { - if (!result.isEmpty()) { - QVERIFY(result.isDetached()); - } + { + auto result = QSettingsPrivate::normalizedKey(inKey); + QCOMPARE(result, outKey); + } + { + auto result = QSettingsPrivate::normalizedKey(QUtf8StringView{inKey.toUtf8()}); + QCOMPARE(result, outKey); + } + { + auto result = QSettingsPrivate::normalizedKey(QLatin1String{inKey.toLatin1()}); + QCOMPARE(result, outKey); } } #endif @@ -2192,6 +2263,8 @@ void tst_QSettings::testEmptyData() vList2 << emptyString << nullString; vList3 << QString("foo"); + const auto rm = QScopeGuard([=] { QFile::remove(filename); }); + { QSettings settings(filename, QSettings::IniFormat); settings.setValue("nullString", nullString); @@ -2245,7 +2318,6 @@ void tst_QSettings::testEmptyData() QCOMPARE(settings.value("vList3").toList(), vList3); QCOMPARE(settings.status(), QSettings::NoError); } - QFile::remove(filename); } void tst_QSettings::testEmptyKey() @@ -2289,7 +2361,7 @@ void tst_QSettings::testRegistryShortRootNames() void tst_QSettings::testRegistry32And64Bit() { -#if !defined (Q_OS_WIN) || defined(Q_OS_WINRT) +#if !defined (Q_OS_WIN) QSKIP("This test is specific to the Windows registry.", SkipAll); #else @@ -2335,14 +2407,15 @@ void tst_QSettings::testRegistry32And64Bit() void tst_QSettings::trailingWhitespace() { + const QString path = settingsPath("trailingWhitespace"); { - QSettings s("tst_QSettings_trailingWhitespace"); + QSettings s(path, QSettings::IniFormat); s.setValue("trailingSpace", "x "); s.setValue("trailingTab", "x\t"); s.setValue("trailingNewline", "x\n"); } { - QSettings s("tst_QSettings_trailingWhitespace"); + QSettings s(path, QSettings::IniFormat); QCOMPARE(s.value("trailingSpace").toString(), QLatin1String("x ")); QCOMPARE(s.value("trailingTab").toString(), QLatin1String("x\t")); QCOMPARE(s.value("trailingNewline").toString(), QLatin1String("x\n")); @@ -2350,11 +2423,6 @@ void tst_QSettings::trailingWhitespace() } } -void tst_QSettings::fromFile_data() -{ - populateWithFormats(); -} - void tst_QSettings::fromFile() { QFETCH(QSettings::Format, format); @@ -2369,13 +2437,19 @@ void tst_QSettings::fromFile() QString path = "foo"; -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) if (format == QSettings::NativeFormat) path = "\\HKEY_CURRENT_USER\\Software\\foo"; #endif QStringList strList = QStringList() << "hope" << "destiny" << "chastity"; +#if !defined(Q_OS_WIN) + auto deleteFile = QScopeGuard([path, oldCur]() { + QFile::remove(path); + QDir::setCurrent(oldCur); + }); +#endif // !defined(Q_OS_WIN) { QSettings settings1(path, format); QVERIFY(settings1.allKeys().isEmpty()); @@ -2411,75 +2485,8 @@ void tst_QSettings::fromFile() QCOMPARE(settings1.value("gamma/foo.bar").toInt(), 4); QCOMPARE(settings1.allKeys().size(), 3); } - - QDir::setCurrent(oldCur); } -#ifdef QT_BUILD_INTERNAL -void tst_QSettings::setIniCodec() -{ - QByteArray expeContents4, expeContents5; - QByteArray actualContents4, actualContents5; - - { - QFile inFile(":/resourcefile4.ini"); - inFile.open(QIODevice::ReadOnly); - expeContents4 = inFile.readAll(); - inFile.close(); - } - - { - QFile inFile(":/resourcefile5.ini"); - inFile.open(QIODevice::ReadOnly); - expeContents5 = inFile.readAll(); - inFile.close(); - } - - { - QSettings settings4(QSettings::IniFormat, QSettings::UserScope, "software.org", "KillerAPP"); - settings4.setIniCodec("UTF-8"); - settings4.setValue(QLatin1String("Fa\xe7" "ade/QU\xc9" "BEC"), QLatin1String("Fa\xe7" "ade/QU\xc9" "BEC")); - settings4.sync(); - - QSettings settings5(QSettings::IniFormat, QSettings::UserScope, "other.software.org", "KillerAPP"); - settings5.setIniCodec("ISO 8859-1"); - settings5.setValue(QLatin1String("Fa\xe7" "ade/QU\xc9" "BEC"), QLatin1String("Fa\xe7" "ade/QU\xc9" "BEC")); - settings5.sync(); - - { - QFile inFile(settings4.fileName()); - inFile.open(QIODevice::ReadOnly | QIODevice::Text); - actualContents4 = inFile.readAll(); - inFile.close(); - } - - { - QFile inFile(settings5.fileName()); - inFile.open(QIODevice::ReadOnly | QIODevice::Text); - actualContents5 = inFile.readAll(); - inFile.close(); - } - } - - QConfFile::clearCache(); - - QCOMPARE(actualContents4, expeContents4); - QCOMPARE(actualContents5, expeContents5); - - QSettings settings4(QSettings::IniFormat, QSettings::UserScope, "software.org", "KillerAPP"); - settings4.setIniCodec("UTF-8"); - QSettings settings5(QSettings::IniFormat, QSettings::UserScope, "other.software.org", "KillerAPP"); - settings5.setIniCodec("Latin-1"); - - QCOMPARE(settings4.allKeys().count(), 1); - QCOMPARE(settings5.allKeys().count(), 1); - - QCOMPARE(settings4.allKeys().first(), settings5.allKeys().first()); - QCOMPARE(settings4.value(settings4.allKeys().first()).toString(), - settings5.value(settings5.allKeys().first()).toString()); -} -#endif - static bool containsSubList(QStringList mom, QStringList son) { for (int i = 0; i < son.size(); ++i) { @@ -2489,11 +2496,6 @@ static bool containsSubList(QStringList mom, QStringList son) return true; } -void tst_QSettings::testArrays_data() -{ - populateWithFormats(); -} - /* Tests beginReadArray(), beginWriteArray(), endArray(), and setArrayIndex(). @@ -2559,17 +2561,17 @@ void tst_QSettings::testArrays() QCOMPARE(settings1.value("ene").toInt(), 2); QCOMPARE(settings1.value("due").toInt(), 3); QCOMPARE(settings1.value("rike").toInt(), 4); - QCOMPARE(settings1.allKeys().count(), 3); + QCOMPARE(settings1.allKeys().size(), 3); settings1.setArrayIndex(1); QCOMPARE(settings1.value("ene").toInt(), 5); QCOMPARE(settings1.value("due").toInt(), 6); QCOMPARE(settings1.value("rike").toInt(), 7); - QCOMPARE(settings1.allKeys().count(), 3); + QCOMPARE(settings1.allKeys().size(), 3); settings1.setArrayIndex(2); QCOMPARE(settings1.value("ene").toInt(), 8); QCOMPARE(settings1.value("due").toInt(), 9); QCOMPARE(settings1.value("rike").toInt(), 10); - QCOMPARE(settings1.allKeys().count(), 3); + QCOMPARE(settings1.allKeys().size(), 3); settings1.endArray(); settings1.endGroup(); @@ -2619,17 +2621,17 @@ void tst_QSettings::testArrays() QCOMPARE(settings1.value("ene").toInt(), 2); QCOMPARE(settings1.value("due").toInt(), 3); QCOMPARE(settings1.value("rike").toInt(), 4); - QCOMPARE(settings1.allKeys().count(), 3); + QCOMPARE(settings1.allKeys().size(), 3); settings1.setArrayIndex(1); QCOMPARE(settings1.value("ene").toInt(), 5); QCOMPARE(settings1.value("due").toInt(), 6); QCOMPARE(settings1.value("rike").toInt(), 7); - QCOMPARE(settings1.allKeys().count(), 3); + QCOMPARE(settings1.allKeys().size(), 3); settings1.setArrayIndex(2); QCOMPARE(settings1.value("ene").toInt(), 8); QCOMPARE(settings1.value("due").toInt(), 9); QCOMPARE(settings1.value("rike").toInt(), 10); - QCOMPARE(settings1.allKeys().count(), 3); + QCOMPARE(settings1.allKeys().size(), 3); settings1.endArray(); settings1.endGroup(); @@ -2774,14 +2776,14 @@ static QByteArray iniEscapedKey(const QString &str) static QString iniUnescapedKey(const QByteArray &ba) { QString result; - QSettingsPrivate::iniUnescapedKey(ba, 0, ba.size(), result); + QSettingsPrivate::iniUnescapedKey(ba, result); return result; } static QByteArray iniEscapedStringList(const QStringList &strList) { QByteArray result; - QSettingsPrivate::iniEscapedStringList(strList, result, 0); + QSettingsPrivate::iniEscapedStringList(strList, result); return result; } @@ -2789,23 +2791,9 @@ static QStringList iniUnescapedStringList(const QByteArray &ba) { QStringList result; QString str; -#if QSETTINGS_P_H_VERSION >= 2 - bool isStringList = QSettingsPrivate::iniUnescapedStringList(ba, 0, ba.size(), str, result -#if QSETTINGS_P_H_VERSION >= 3 - , 0 -#endif - ); + bool isStringList = QSettingsPrivate::iniUnescapedStringList(ba, str, result); if (!isStringList) result = QStringList(str); -#else - QStringList *strList = QSettingsPrivate::iniUnescapedStringList(ba, 0, ba.size(), str); - if (strList) { - result = *strList; - delete strList; - } else { - result = QStringList(str); - } -#endif return result; } #endif @@ -2815,7 +2803,7 @@ QString escapeWeirdChars(const QString &s) QString result; bool escapeNextDigit = false; - for (int i = 0; i < s.length(); ++i) { + for (int i = 0; i < s.size(); ++i) { QChar c = s.at(i); if (c.unicode() < ' ' || c.unicode() > '~' || (escapeNextDigit && c.unicode() >= '0' && c.unicode() <= 'f')) { @@ -2904,8 +2892,8 @@ void tst_QSettings::testEscapes() testEscapedStringList(QChar(0) + QString("0"), "\\0\\x30"); testEscapedStringList("~!@#$%^&*()_+.-/\\=", "\"~!@#$%^&*()_+.-/\\\\=\""); testEscapedStringList("~!@#$%^&*()_+.-/\\", "~!@#$%^&*()_+.-/\\\\"); - testEscapedStringList(QString("\x7F") + "12aFz", "\\x7f\\x31\\x32\\x61\\x46z"); - testEscapedStringList(QString(" \t\n\\n") + QChar(0x123) + QChar(0x4567), "\" \\t\\n\\\\n\\x123\\x4567\""); + testEscapedStringList(QString("\x7F") + "12aFz", QByteArray("\x7f") + "12aFz"); + testEscapedStringList(QString(" \t\n\\n") + QChar(0x123) + QChar(0x4567), "\" \\t\\n\\\\n\xC4\xA3\xE4\x95\xA7\""); testEscapedStringList(QString("\a\b\f\n\r\t\v'\"?\001\002\x03\x04"), "\\a\\b\\f\\n\\r\\t\\v'\\\"?\\x1\\x2\\x3\\x4"); testEscapedStringList(QStringList() << "," << ";" << "a" << "ab, \tc, d ", "\",\", \";\", a, \"ab, \\tc, d \""); @@ -2920,7 +2908,7 @@ void tst_QSettings::testEscapes() QString() + QChar(0) + QChar(0) + QChar(0) + QChar(0) + QChar(1) + QChar(0111) + QChar(011111) + QChar(0) + QChar(0xCDEF) + "GH" + QChar(0x3456), - "\\0\\0\\0\\0\\x1I\\x1249\\0\\xcdefGH\\x3456"); + "\\0\\0\\0\\0\\x1I\xE1\x89\x89\\0\xEC\xB7\xAFGH\xE3\x91\x96"); testUnescapedStringList(QByteArray("\\c\\d\\e\\f\\g\\$\\*\\\0", 16), "\f", "\\f"); testUnescapedStringList("\"a\", \t\"bc \", \" d\" , \"ef \" ,,g, hi i,,, ,", QStringList() << "a" << "bc " << " d" << "ef " << "" << "g" << "hi i" @@ -2935,8 +2923,6 @@ void tst_QSettings::testEscapes() testVariant(QString("Hello, World!"), QString("Hello, World!"), toString); testVariant(QString("@Hello World!"), QString("@@Hello World!"), toString); testVariant(QString("@@Hello World!"), QString("@@@Hello World!"), toString); - testVariant(QByteArray("Hello World!"), QString("@ByteArray(Hello World!)"), toString); - testVariant(QByteArray("@Hello World!"), QString("@ByteArray(@Hello World!)"), toString); testVariant(QVariant(100), QString("100"), toString); testVariant(QStringList() << "ene" << "due" << "rike", QString::fromLatin1("@Variant(\x0\x0\x0\xb\x0\x0\x0\x3\x0\x0\x0\x6\x0\x65\x0n\x0\x65\x0\x0\x0\x6\x0\x64\x0u\x0\x65\x0\x0\x0\x8\x0r\x0i\x0k\x0\x65)", 50), toStringList); testVariant(QRect(1, 2, 3, 4), QString("@Rect(1 2 3 4)"), toRect); @@ -2957,11 +2943,6 @@ void tst_QSettings::testEscapes() } #endif -void tst_QSettings::testCaseSensitivity_data() -{ - populateWithFormats(); -} - void tst_QSettings::testCaseSensitivity() { QFETCH(QSettings::Format, format); @@ -3041,7 +3022,7 @@ void tst_QSettings::testCaseSensitivity() } } -#ifdef Q_OS_MAC +#ifdef Q_OS_DARWIN // Please write a fileName() test for the other platforms void tst_QSettings::fileName() { @@ -3111,11 +3092,6 @@ void tst_QSettings::fileName() } #endif -void tst_QSettings::isWritable_data() -{ - populateWithFormats(); -} - void tst_QSettings::isWritable() { QFETCH(QSettings::Format, format); @@ -3145,7 +3121,7 @@ void tst_QSettings::isWritable() QSettings s3(format, QSettings::SystemScope, "foo.org", "Something Different"); if (s1.status() == QSettings::NoError && s1.contains("foo")) { -#if defined(Q_OS_MACX) +#if defined(Q_OS_MACOS) QVERIFY(s1.isWritable()); if (format == QSettings::NativeFormat) { QVERIFY(!s2.isWritable()); @@ -3168,13 +3144,6 @@ void tst_QSettings::isWritable() } #ifdef QT_BUILD_INTERNAL -void tst_QSettings::childGroups_data() -{ - populateWithFormats(); -} -#endif - -#ifdef QT_BUILD_INTERNAL void tst_QSettings::childGroups() { QFETCH(QSettings::Format, format); @@ -3244,13 +3213,6 @@ void tst_QSettings::childGroups() #endif #ifdef QT_BUILD_INTERNAL -void tst_QSettings::childKeys_data() -{ - populateWithFormats(); -} -#endif - -#ifdef QT_BUILD_INTERNAL void tst_QSettings::childKeys() { QFETCH(QSettings::Format, format); @@ -3318,13 +3280,6 @@ void tst_QSettings::childKeys() #endif #ifdef QT_BUILD_INTERNAL -void tst_QSettings::allKeys_data() -{ - populateWithFormats(); -} -#endif - -#ifdef QT_BUILD_INTERNAL void tst_QSettings::allKeys() { QFETCH(QSettings::Format, format); @@ -3475,7 +3430,7 @@ void tst_QSettings::setPath() path checks that it has no bad side effects. */ for (int i = 0; i < 2; ++i) { -#if !defined(Q_OS_WIN) && !defined(Q_OS_MAC) +#if !defined(Q_OS_WIN) && !defined(Q_OS_DARWIN) && !defined(Q_OS_WASM) TEST_PATH(i == 0, "conf", NativeFormat, UserScope, "alpha") TEST_PATH(i == 0, "conf", NativeFormat, SystemScope, "beta") #endif @@ -3584,19 +3539,20 @@ void tst_QSettings::dontReorderIniKeysNeedlessly() } #endif -void tst_QSettings::rainersSyncBugOnMac_data() -{ - ctor_data(); -} - void tst_QSettings::rainersSyncBugOnMac() { QFETCH(QSettings::Format, format); -#if defined(Q_OS_DARWIN) || defined(Q_OS_WINRT) +#if defined(Q_OS_DARWIN) if (format == QSettings::NativeFormat) QSKIP("Apple OSes do not support direct reads from and writes to .plist files, due to caching and background syncing. See QTBUG-34899."); #endif +#if defined(Q_OS_WASM) + if (format == QSettings::NativeFormat) + QSKIP("WASM's localStorage backend recognizes no concept of file"); + if (format == QSettings::WebIndexedDBFormat) + QSKIP("WASM's indexedDB backend uses the virtual FS file only as a backing store"); +#endif // Q_OS_WASM QString fileName; @@ -3620,7 +3576,7 @@ void tst_QSettings::rainersSyncBugOnMac() void tst_QSettings::recursionBug() { QPixmap pix(10,10); - pix.fill("blue"); + pix.fill(Qt::blue); { QSettings settings(settingsPath("starrunner.ini"), QSettings::IniFormat); @@ -3628,7 +3584,7 @@ void tst_QSettings::recursionBug() } } -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) static DWORD readKeyType(HKEY handle, QStringView rSubKey) { @@ -3667,14 +3623,14 @@ void tst_QSettings::consistentRegistryStorage() } #endif -#if defined(QT_BUILD_INTERNAL) && defined(Q_OS_UNIX) && !defined(Q_OS_DARWIN) && !defined(Q_OS_ANDROID) && !defined(QT_NO_STANDARDPATHS) +#if defined(QT_BUILD_INTERNAL) && defined(Q_OS_UNIX) && !defined(Q_OS_DARWIN) && !defined(Q_OS_ANDROID) && !defined(Q_OS_WASM) && !defined(QT_NO_STANDARDPATHS) QT_BEGIN_NAMESPACE extern void clearDefaultPaths(); QT_END_NAMESPACE #endif void tst_QSettings::testXdg() { -#if defined(QT_BUILD_INTERNAL) && defined(Q_OS_UNIX) && !defined(Q_OS_DARWIN) && !defined(Q_OS_ANDROID) && !defined(QT_NO_STANDARDPATHS) +#if defined(QT_BUILD_INTERNAL) && defined(Q_OS_UNIX) && !defined(Q_OS_DARWIN) && !defined(Q_OS_ANDROID) && !defined(Q_OS_WASM) && !defined(QT_NO_STANDARDPATHS) // Note: The XDG_CONFIG_DIRS test must be done before overriding the system path // by QSettings::setPath/setSystemIniPath (used in cleanupTestFiles()). clearDefaultPaths(); @@ -3739,5 +3695,39 @@ void tst_QSettings::testXdg() #endif } +void tst_QSettings::testReadKeys_data() +{ + QTest::addColumn<QString>("filepath"); + + QTest::newRow("escaped") << ":/qt5settings.ini"; + QTest::newRow("utf-8") << ":/utf8settings.ini"; +} + +void tst_QSettings::testReadKeys() +{ + QFETCH(QString, filepath); + + QSettings settings(filepath, QSettings::IniFormat); + QCOMPARE(settings.status(), QSettings::NoError); + + QVariantMap expectedValues; + expectedValues.insert("Test/BAR", "BAR"); + expectedValues.insert("Test/OST", "OST"); + expectedValues.insert("Test/B\xC3\x84R", "B\xC3\x84R"); // BÄR + expectedValues.insert("Test/\xC3\x96SE", "\xC3\x96SE"); // ÖSE + expectedValues.insert( + "Test/\xD0\xAD\xD1\x82\xD0\xBE/\xD1\x82\xD0\xB5\xD1\x81\xD1\x82", // Это/тест + "\xD0\xAD\xD1\x82\xD0\xBE \xD1\x82\xD0\xB5\xD1\x81\xD1\x82"); // Это тест + expectedValues.insert(".,'%U\xD0\xB0\xD0\xB1\xD0\xB2\xD0\xB3\"\t", ".,'%!@#$"); + expectedValues.insert("\xE2\x99\x9F", "\xE2\x99\x98\xE2\x99\x9A"); // ♟︎ ♘♚ + expectedValues.insert("\xF0\x9F\x8C\x8D", "\xF0\x9F\x8C\x90"); // 🌍 🌐 + + QVariantMap readValues; + for (const auto &key : settings.allKeys()) + readValues.insert(key, settings.value(key)); + + QCOMPARE(readValues, expectedValues); +} + QTEST_MAIN(tst_QSettings) #include "tst_qsettings.moc" diff --git a/tests/auto/corelib/io/qsettings/utf8settings.ini b/tests/auto/corelib/io/qsettings/utf8settings.ini new file mode 100644 index 0000000000..bac010254f --- /dev/null +++ b/tests/auto/corelib/io/qsettings/utf8settings.ini @@ -0,0 +1,11 @@ +[General] +.%2C%27%25Uабвг%22%09=".,'%!@#$" +♟=♘♚ +🌍=🌐 + +[Test] +BAR=BAR +BÄR=BÄR +OST=OST +ÖSE=ÖSE +Это\тест=Это тест diff --git a/tests/auto/corelib/io/qstandardpaths/CMakeLists.txt b/tests/auto/corelib/io/qstandardpaths/CMakeLists.txt new file mode 100644 index 0000000000..90bc0f3b70 --- /dev/null +++ b/tests/auto/corelib/io/qstandardpaths/CMakeLists.txt @@ -0,0 +1,29 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qstandardpaths Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qstandardpaths LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +# Collect test data +list(APPEND test_data "tst_qstandardpaths.cpp") + +qt_internal_add_test(tst_qstandardpaths + SOURCES + tst_qstandardpaths.cpp + TESTDATA ${test_data} +) + +## Scopes: +##################################################################### + +qt_internal_extend_target(tst_qstandardpaths CONDITION boot2qt + DEFINES + SKIP_FINDEXECUTABLE +) diff --git a/tests/auto/corelib/io/qstandardpaths/qstandardpaths.pro b/tests/auto/corelib/io/qstandardpaths/qstandardpaths.pro deleted file mode 100644 index 44b1ce8dd8..0000000000 --- a/tests/auto/corelib/io/qstandardpaths/qstandardpaths.pro +++ /dev/null @@ -1,10 +0,0 @@ -CONFIG += testcase -TARGET = tst_qstandardpaths -QT = core testlib -INCLUDEPATH += ../../../../shared/ -HEADERS += ../../../../shared/emulationdetector.h -SOURCES = tst_qstandardpaths.cpp -TESTDATA += tst_qstandardpaths.cpp qstandardpaths.pro - -# QTBUG-64404 -boot2qt: DEFINES+=SKIP_FINDEXECUTABLE diff --git a/tests/auto/corelib/io/qstandardpaths/tst_qstandardpaths.cpp b/tests/auto/corelib/io/qstandardpaths/tst_qstandardpaths.cpp index dae4e66106..84d0a505a4 100644 --- a/tests/auto/corelib/io/qstandardpaths/tst_qstandardpaths.cpp +++ b/tests/auto/corelib/io/qstandardpaths/tst_qstandardpaths.cpp @@ -1,55 +1,77 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtTest/QtTest> +// Copyright (C) 2020 The Qt Company Ltd. +// Copyright (C) 2020 Intel Corporation. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + #include <qstandardpaths.h> +#include <QTest> +#include <QOperatingSystemVersion> #include <qdebug.h> -#include <qstandardpaths.h> #include <qfileinfo.h> -#include <qsysinfo.h> +#include <qplatformdefs.h> #include <qregularexpression.h> -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#include <qsysinfo.h> +#if defined(Q_OS_WIN) # include <qt_windows.h> #endif #ifdef Q_OS_UNIX #include <unistd.h> #include <sys/types.h> +#include <pwd.h> #endif -#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) && !defined(Q_OS_ANDROID) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_ANDROID) #define Q_XDG_PLATFORM #endif -#include "emulationdetector.h" +using namespace Qt::StringLiterals; // Update this when adding new enum values; update enumNames too -static const int MaxStandardLocation = QStandardPaths::AppConfigLocation; +static const int MaxStandardLocation = QStandardPaths::GenericStateLocation; + +static QString genericCacheLoc() +{ + return QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation); +} +static QString cacheLoc() +{ + return QStandardPaths::writableLocation(QStandardPaths::CacheLocation); +} + +static QString genericStateLoc() +{ + return QStandardPaths::writableLocation(QStandardPaths::GenericStateLocation); +} +static QString stateLoc() +{ + return QStandardPaths::writableLocation(QStandardPaths::StateLocation); +} + +static QString genericDataLoc() +{ + return QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation); +} +static QString appDataLoc() +{ + return QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); +} +static QString appLocalDataLoc() +{ + return QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation); +} + +static QString genericConfigLoc() +{ + return QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation); +} +static QString configLoc() +{ + return QStandardPaths::writableLocation(QStandardPaths::ConfigLocation); +} +static QString appConfigLoc() +{ + return QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation); +} class tst_qstandardpaths : public QObject { @@ -58,6 +80,7 @@ class tst_qstandardpaths : public QObject private slots: void initTestCase(); void dump(); + void init(); void testDefaultLocations(); void testCustomLocations(); void enableTestMode(); @@ -68,6 +91,7 @@ private slots: void testFindExecutable(); void testFindExecutableLinkToDirectory(); void testRuntimeDirectory(); + void testCustomRuntimeDirectory_data(); void testCustomRuntimeDirectory(); void testAllWritableLocations_data(); void testAllWritableLocations(); @@ -83,14 +107,17 @@ private: qputenv("XDG_CONFIG_DIRS", QFile::encodeName(m_globalConfigDir)); m_localAppDir = m_localAppTempDir.path(); m_globalAppDir = m_globalAppTempDir.path(); + m_stateDir = m_stateTempDir.path(); qputenv("XDG_DATA_HOME", QFile::encodeName(m_localAppDir)); qputenv("XDG_DATA_DIRS", QFile::encodeName(m_globalAppDir)); + qputenv("XDG_STATE_HOME", QFile::encodeName(m_stateDir)); } void setDefaultLocations() { - qputenv("XDG_CONFIG_HOME", QByteArray()); - qputenv("XDG_CONFIG_DIRS", QByteArray()); - qputenv("XDG_DATA_HOME", QByteArray()); - qputenv("XDG_DATA_DIRS", QByteArray()); + qputenv("XDG_CONFIG_HOME", nullptr); + qputenv("XDG_CONFIG_DIRS", nullptr); + qputenv("XDG_DATA_HOME", nullptr); + qputenv("XDG_DATA_DIRS", nullptr); + qputenv("XDG_STATE_HOME", nullptr); } #endif @@ -105,6 +132,8 @@ private: QTemporaryDir m_localAppTempDir; QString m_globalAppDir; QTemporaryDir m_globalAppTempDir; + QString m_stateDir; + QTemporaryDir m_stateTempDir; }; static const char * const enumNames[MaxStandardLocation + 1 - int(QStandardPaths::DesktopLocation)] = { @@ -117,7 +146,7 @@ static const char * const enumNames[MaxStandardLocation + 1 - int(QStandardPaths "PicturesLocation", "TempLocation", "HomeLocation", - "DataLocation", + "AppLocalDataLocation", "CacheLocation", "GenericDataLocation", "RuntimeLocation", @@ -126,12 +155,16 @@ static const char * const enumNames[MaxStandardLocation + 1 - int(QStandardPaths "GenericCacheLocation", "GenericConfigLocation", "AppDataLocation", - "AppConfigLocation" + "AppConfigLocation", + "PublicShareLocation", + "TemplatesLocation", + "StateLocation", + "GenericStateLocation" }; void tst_qstandardpaths::initTestCase() { -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) // Disable WOW64 redirection, see testFindExecutable() if (QSysInfo::buildCpuArchitecture() != QSysInfo::currentCpuArchitecture()) { void *oldMode; @@ -140,11 +173,12 @@ void tst_qstandardpaths::initTestCase() qErrnoWarning("Wow64DisableWow64FsRedirection() failed"); QVERIFY(disabledDisableWow64FsRedirection); } -#endif // Q_OS_WIN && !Q_OS_WINRT +#endif // Q_OS_WIN QVERIFY2(m_localConfigTempDir.isValid(), qPrintable(m_localConfigTempDir.errorString())); QVERIFY2(m_globalConfigTempDir.isValid(), qPrintable(m_globalConfigTempDir.errorString())); QVERIFY2(m_localAppTempDir.isValid(), qPrintable(m_localAppTempDir.errorString())); QVERIFY2(m_globalAppTempDir.isValid(), qPrintable(m_globalAppTempDir.errorString())); + QVERIFY2(m_stateTempDir.isValid(), qPrintable(m_stateTempDir.errorString())); } void tst_qstandardpaths::dump() @@ -161,25 +195,37 @@ void tst_qstandardpaths::dump() } } +void tst_qstandardpaths::init() +{ + // Some unittests set a custom org/app names, restore the original ones + // before each unittest is run + static const QString org = QCoreApplication::organizationName(); + static const QString app = QCoreApplication::applicationName(); + QCoreApplication::setOrganizationName(org); + QCoreApplication::setApplicationName(app); +} + void tst_qstandardpaths::testDefaultLocations() { #ifdef Q_XDG_PLATFORM setDefaultLocations(); const QString expectedConfHome = QDir::homePath() + QString::fromLatin1("/.config"); - QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation), expectedConfHome); - QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation), expectedConfHome); + QCOMPARE(configLoc(), expectedConfHome); + QCOMPARE(genericConfigLoc(), expectedConfHome); const QStringList confDirs = QStandardPaths::standardLocations(QStandardPaths::ConfigLocation); - QCOMPARE(confDirs.count(), 2); + QCOMPARE(confDirs.size(), 2); QVERIFY(confDirs.contains(expectedConfHome)); QCOMPARE(QStandardPaths::standardLocations(QStandardPaths::GenericConfigLocation), confDirs); const QStringList genericDataDirs = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation); - QCOMPARE(genericDataDirs.count(), 3); + QCOMPARE(genericDataDirs.size(), 3); const QString expectedDataHome = QDir::homePath() + QString::fromLatin1("/.local/share"); QCOMPARE(genericDataDirs.at(0), expectedDataHome); QCOMPARE(genericDataDirs.at(1), QString::fromLatin1("/usr/local/share")); QCOMPARE(genericDataDirs.at(2), QString::fromLatin1("/usr/share")); + const QString expectedGenericStateLocation = QDir::homePath() + QString::fromLatin1("/.local/state"); + QCOMPARE(genericStateLoc(), expectedGenericStateLocation); #endif } @@ -198,8 +244,8 @@ void tst_qstandardpaths::testCustomLocations() setCustomLocations(); // test writableLocation() - QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation), m_localConfigDir); - QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation), m_localConfigDir); + QCOMPARE(configLoc(), m_localConfigDir); + QCOMPARE(genericConfigLoc(), m_localConfigDir); // test locate() const QString thisFileName = QString::fromLatin1("aFile"); @@ -231,37 +277,76 @@ void tst_qstandardpaths::enableTestMode() setCustomLocations(); // for the global config dir const QString qttestDir = QDir::homePath() + QLatin1String("/.qttest"); - // ConfigLocation + // *Config*Location const QString configDir = qttestDir + QLatin1String("/config"); - QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation), configDir); - QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation), configDir); + QCOMPARE(configLoc(), configDir); + QCOMPARE(genericConfigLoc(), configDir); const QStringList confDirs = QStandardPaths::standardLocations(QStandardPaths::ConfigLocation); QCOMPARE(confDirs, QStringList() << configDir << m_globalConfigDir); + // AppConfigLocation should be "GenericConfigLocation/organization-name/app-name" + QCOMPARE(appConfigLoc(), configDir + "/tst_qstandardpaths"_L1); - // GenericDataLocation + // *Data*Location const QString dataDir = qttestDir + QLatin1String("/share"); - QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), dataDir); + QCOMPARE(genericDataLoc(), dataDir); const QStringList gdDirs = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation); QCOMPARE(gdDirs, QStringList() << dataDir << m_globalAppDir); + // AppDataLocation/AppLocalDataLocation should be + // "GenericDataLocation/organization-name/app-name" + QCOMPARE(appDataLoc(), dataDir + "/tst_qstandardpaths"_L1); + QCOMPARE(appLocalDataLoc(), dataDir + "/tst_qstandardpaths"_L1); - // GenericCacheLocation + // *CacheLocation const QString cacheDir = qttestDir + QLatin1String("/cache"); - QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation), cacheDir); + QCOMPARE(genericCacheLoc(), cacheDir); const QStringList cacheDirs = QStandardPaths::standardLocations(QStandardPaths::GenericCacheLocation); QCOMPARE(cacheDirs, QStringList() << cacheDir); + // CacheLocation should be "GenericCacheLocation/organization-name/app-name" + QCOMPARE(cacheLoc(), cacheDir + "/tst_qstandardpaths"_L1); + + // *StateLocation + const QString stateDir = qttestDir + QLatin1String("/state"); + QCOMPARE(genericStateLoc(), stateDir); + const QStringList stateDirs = QStandardPaths::standardLocations(QStandardPaths::GenericStateLocation); + QCOMPARE(stateDirs, QStringList() << stateDir); + // StateLocation should be "GenericStateLocation/organization-name/app-name" + QCOMPARE(stateLoc(), stateDir + "/tst_qstandardpaths"_L1); + + QCoreApplication::setOrganizationName("Qt"); + QCOMPARE(appConfigLoc(), configDir + "/Qt/tst_qstandardpaths"_L1); + QCOMPARE(appDataLoc(), dataDir + "/Qt/tst_qstandardpaths"_L1); + QCOMPARE(appLocalDataLoc(), dataDir + "/Qt/tst_qstandardpaths"_L1); + QCOMPARE(cacheLoc(), cacheDir + "/Qt/tst_qstandardpaths"_L1); + QCOMPARE(stateLoc(), stateDir + "/Qt/tst_qstandardpaths"_L1); + + QCoreApplication::setApplicationName("QtTest"); + QCOMPARE(appConfigLoc(), configDir + "/Qt/QtTest"_L1); + QCOMPARE(appDataLoc(), dataDir + "/Qt/QtTest"_L1); + QCOMPARE(appLocalDataLoc(), dataDir + "/Qt/QtTest"_L1); + QCOMPARE(cacheLoc(), cacheDir + "/Qt/QtTest"_L1); + QCOMPARE(stateLoc(), stateDir + "/Qt/QtTest"_L1); + + // Check these are unaffected by org/app names + QCOMPARE(genericConfigLoc(), configDir); + QCOMPARE(configLoc(), configDir); + QCOMPARE(genericDataLoc(), dataDir); + QCOMPARE(genericCacheLoc(), cacheDir); + QCOMPARE(genericStateLoc(), stateDir); #endif // On all platforms, we want to ensure that the writableLocation is different in test mode and real mode. // Check this for locations where test programs typically write. Not desktop, download, music etc... typedef QHash<QStandardPaths::StandardLocation, QString> LocationHash; LocationHash testLocations; - testLocations.insert(QStandardPaths::AppDataLocation, QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)); - testLocations.insert(QStandardPaths::AppLocalDataLocation, QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation)); - testLocations.insert(QStandardPaths::GenericDataLocation, QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)); - testLocations.insert(QStandardPaths::ConfigLocation, QStandardPaths::writableLocation(QStandardPaths::ConfigLocation)); - testLocations.insert(QStandardPaths::GenericConfigLocation, QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation)); - testLocations.insert(QStandardPaths::CacheLocation, QStandardPaths::writableLocation(QStandardPaths::CacheLocation)); - testLocations.insert(QStandardPaths::GenericCacheLocation, QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)); + testLocations.insert(QStandardPaths::AppDataLocation, appDataLoc()); + testLocations.insert(QStandardPaths::AppLocalDataLocation, appLocalDataLoc()); + testLocations.insert(QStandardPaths::GenericDataLocation, genericDataLoc()); + testLocations.insert(QStandardPaths::ConfigLocation, configLoc()); + testLocations.insert(QStandardPaths::GenericConfigLocation, genericConfigLoc()); + testLocations.insert(QStandardPaths::CacheLocation, cacheLoc()); + testLocations.insert(QStandardPaths::GenericCacheLocation, genericCacheLoc()); + testLocations.insert(QStandardPaths::StateLocation, stateLoc()); + testLocations.insert(QStandardPaths::GenericStateLocation, genericStateLoc()); // On Windows, what should "Program Files" become, in test mode? //testLocations.insert(QStandardPaths::ApplicationsLocation, QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation)); @@ -283,7 +368,7 @@ void tst_qstandardpaths::testLocateAll() #ifdef Q_XDG_PLATFORM setCustomLocations(); const QStringList appsDirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, "applications", QStandardPaths::LocateDirectory); - QCOMPARE(appsDirs.count(), 0); // they don't exist yet + QCOMPARE(appsDirs.size(), 0); // they don't exist yet const QStringList expectedAppsDirs = QStringList() << m_localAppDir + QLatin1String("/applications") << m_globalAppDir + QLatin1String("/applications"); QDir().mkdir(expectedAppsDirs.at(0)); @@ -306,53 +391,46 @@ void tst_qstandardpaths::testLocateAll() void tst_qstandardpaths::testDataLocation() { - // On all platforms, DataLocation should be GenericDataLocation / organization name / app name + // On all platforms, AppLocalDataLocation should be GenericDataLocation / organization name / app name // This allows one app to access the data of another app. - // Android and WinRT are an exception to this case, owing to the fact that + // Android is an exception to this case, owing to the fact that // applications are sandboxed. -#if !defined(Q_OS_ANDROID) && !defined(Q_OS_WINRT) - const QString base = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation); - QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation), base + "/tst_qstandardpaths"); +#if !defined(Q_OS_ANDROID) + const QString base = genericDataLoc(); + QCOMPARE(appLocalDataLoc(), base + "/tst_qstandardpaths"); QCoreApplication::instance()->setOrganizationName("Qt"); - QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation), base + "/Qt/tst_qstandardpaths"); + QCOMPARE(appLocalDataLoc(), base + "/Qt/tst_qstandardpaths"); QCoreApplication::instance()->setApplicationName("QtTest"); - QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation), base + "/Qt/QtTest"); + QCOMPARE(appLocalDataLoc(), base + "/Qt/QtTest"); #endif #ifdef Q_XDG_PLATFORM setDefaultLocations(); const QString expectedAppDataDir = QDir::homePath() + QString::fromLatin1("/.local/share/Qt/QtTest"); - QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation), expectedAppDataDir); + QCOMPARE(appLocalDataLoc(), expectedAppDataDir); const QStringList appDataDirs = QStandardPaths::standardLocations(QStandardPaths::AppLocalDataLocation); - QCOMPARE(appDataDirs.count(), 3); + QCOMPARE(appDataDirs.size(), 3); QCOMPARE(appDataDirs.at(0), expectedAppDataDir); QCOMPARE(appDataDirs.at(1), QString::fromLatin1("/usr/local/share/Qt/QtTest")); QCOMPARE(appDataDirs.at(2), QString::fromLatin1("/usr/share/Qt/QtTest")); #endif - - // reset for other tests - QCoreApplication::setOrganizationName(QString()); - QCoreApplication::setApplicationName(QString()); } void tst_qstandardpaths::testAppConfigLocation() { // On all platforms where applications are not sandboxed, // AppConfigLocation should be GenericConfigLocation / organization name / app name -#if !defined(Q_OS_ANDROID) && !defined(Q_OS_WINRT) - const QString base = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation); - QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation), base + "/tst_qstandardpaths"); +#if !defined(Q_OS_ANDROID) + const QString base = genericConfigLoc(); + QCOMPARE(appConfigLoc(), base + "/tst_qstandardpaths"); QCoreApplication::setOrganizationName("Qt"); - QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation), base + "/Qt/tst_qstandardpaths"); + QCOMPARE(appConfigLoc(), base + "/Qt/tst_qstandardpaths"); QCoreApplication::setApplicationName("QtTest"); - QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation), base + "/Qt/QtTest"); - // reset for other tests - QCoreApplication::setOrganizationName(QString()); - QCoreApplication::setApplicationName(QString()); + QCOMPARE(appConfigLoc(), base + "/Qt/QtTest"); #endif } -#ifndef Q_OS_WIN +#if !defined(Q_OS_WIN) && !defined(Q_OS_WASM) // Find "sh" on Unix. // It may exist twice, in /bin/sh and /usr/bin/sh, in that case use the PATH order. static inline QFileInfo findSh() @@ -360,10 +438,10 @@ static inline QFileInfo findSh() QLatin1String sh("/sh"); QByteArray pEnv = qgetenv("PATH"); const QLatin1Char pathSep(':'); - const QStringList rawPaths = QString::fromLocal8Bit(pEnv.constData()).split(pathSep, QString::SkipEmptyParts); - foreach (const QString &path, rawPaths) { + const QStringList rawPaths = QString::fromLocal8Bit(pEnv.constData()).split(pathSep, Qt::SkipEmptyParts); + for (const QString &path : rawPaths) { if (QFile::exists(path + sh)) - return path + sh; + return QFileInfo(path + sh); } return QFileInfo(); } @@ -381,7 +459,6 @@ void tst_qstandardpaths::testFindExecutable_data() QTest::addColumn<QString>("needle"); QTest::addColumn<QString>("expected"); #ifdef Q_OS_WIN -# ifndef Q_OS_WINRT const QFileInfo cmdFi = QFileInfo(QDir::cleanPath(QString::fromLocal8Bit(qgetenv("COMSPEC")))); const QString cmdPath = cmdFi.absoluteFilePath(); @@ -406,8 +483,8 @@ void tst_qstandardpaths::testFindExecutable_data() QTest::newRow("win8-logo-nosuffix") << QString() << logo << logoPath; } -# endif // Q_OS_WINRT #else +# ifndef Q_OS_WASM const QFileInfo shFi = findSh(); Q_ASSERT(shFi.exists()); const QString shPath = shFi.absoluteFilePath(); @@ -417,6 +494,7 @@ void tst_qstandardpaths::testFindExecutable_data() << QString() << shPath << shPath; QTest::newRow("unix-sh-relativepath") << QString(shFi.absolutePath()) << QString::fromLatin1("./sh") << shPath; +#endif /* !WASM */ #endif QTest::newRow("idontexist") << QString() << QString::fromLatin1("idontexist") << QString(); @@ -448,8 +526,9 @@ void tst_qstandardpaths::testFindExecutable() void tst_qstandardpaths::testFindExecutableLinkToDirectory() { - // WinRT has no link support -#ifndef Q_OS_WINRT +#ifdef Q_OS_WASM + QSKIP("No applicationdir on wasm"); +#else // link to directory const QString target = QDir::tempPath() + QDir::separator() + QLatin1String("link.lnk"); QFile::remove(target); @@ -460,6 +539,9 @@ void tst_qstandardpaths::testFindExecutableLinkToDirectory() #endif } +using RuntimeDirSetup = std::optional<QString> (*)(QDir &); +Q_DECLARE_METATYPE(RuntimeDirSetup); + void tst_qstandardpaths::testRuntimeDirectory() { #ifdef Q_XDG_PLATFORM @@ -468,6 +550,195 @@ void tst_qstandardpaths::testRuntimeDirectory() #endif } +// INTEGRITY PJF System doesn't support user ID related APIs. getpwuid is not defined. +// testCustomRuntimeDirectory_data test will always FAIL for INTEGRITY. +#if defined(Q_XDG_PLATFORM) && !defined(Q_OS_INTEGRITY) +static QString fallbackXdgRuntimeDir() +{ + static QString username = [] { + struct passwd *pw = getpwuid(geteuid()); + return QString::fromLocal8Bit(pw->pw_name); + }(); + + // QDir::temp() might change from call to call + return QDir::temp().filePath("runtime-" + username); +} +#endif + +[[maybe_unused]] static QString updateRuntimeDir(const QString &path) +{ + qputenv("XDG_RUNTIME_DIR", QFile::encodeName(path)); + return path; +} + +[[maybe_unused]] static void clearRuntimeDir() +{ + qunsetenv("XDG_RUNTIME_DIR"); +#ifdef Q_XDG_PLATFORM +#if !defined(Q_OS_WASM) && !defined(Q_OS_INTEGRITY) + QTest::ignoreMessage(QtWarningMsg, + qPrintable("QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '" + + fallbackXdgRuntimeDir() + '\'')); +#endif +#endif +} + +void tst_qstandardpaths::testCustomRuntimeDirectory_data() +{ +#ifdef Q_OS_INTEGRITY + QSKIP("Test requires getgid/getpwuid API that are not available on INTEGRITY"); +#elif defined(Q_XDG_PLATFORM) + QTest::addColumn<RuntimeDirSetup>("setup"); + auto addRow = [](const char *name, RuntimeDirSetup f) { + QTest::newRow(name) << f; + }; + + +# if defined(Q_OS_UNIX) + if (::getuid() == 0) + QSKIP("Running this test as root doesn't make sense"); +# endif + + addRow("environment:non-existing", [](QDir &d) -> std::optional<QString> { + return updateRuntimeDir(d.filePath("runtime")); + }); + + addRow("environment:existing", [](QDir &d) -> std::optional<QString> { + QString p = d.filePath("runtime"); + d.mkdir("runtime"); + QFile::setPermissions(p, QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner); + return updateRuntimeDir(p); + }); + + addRow("environment-to-existing-wrong-perm", [](QDir &d) -> std::optional<QString> { + QString p = d.filePath("runtime"); + d.mkdir("runtime"); + QFile::setPermissions(p, QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner | + QFile::ExeGroup | QFile::ExeOther); + updateRuntimeDir(p); + QTest::ignoreMessage(QtWarningMsg, + QString("QStandardPaths: wrong permissions on runtime directory %1, " + "0711 instead of 0700") + .arg(p).toLatin1()); + return fallbackXdgRuntimeDir(); + }); + + addRow("environment:wrong-owner", [](QDir &) -> std::optional<QString> { + QT_STATBUF st; + QT_STAT("/", &st); + + updateRuntimeDir("/"); + QTest::ignoreMessage(QtWarningMsg, + QString("QStandardPaths: runtime directory '/' is not owned by UID " + "%1, but a directory permissions %2 owned by UID %3 GID %4") + .arg(getuid()) + .arg(st.st_mode & 07777, 4, 8, QChar('0')) + .arg(st.st_uid) + .arg(st.st_gid).toLatin1()); + return fallbackXdgRuntimeDir(); + }); + + // static so that it can be used in RuntimeDirSetup callable without capturing + static auto failedToOpen = [](const QFile &f) { + qCritical("QFile::Open: failed to open '%s': %s", + qPrintable(f.fileName()), qPrintable(f.errorString())); + return std::nullopt; + }; + + addRow("environment:file", [](QDir &d) -> std::optional<QString> { + QString p = d.filePath("file"); + QFile f(p); + if (!f.open(QIODevice::WriteOnly)) + return failedToOpen(f); + f.setPermissions(QFile::ReadOwner | QFile::WriteOwner); + + updateRuntimeDir(p); + QTest::ignoreMessage(QtWarningMsg, + QString("QStandardPaths: runtime directory '%1' is not a directory, " + "but a regular file permissions 0600 owned by UID %2 GID %3") + .arg(p).arg(getuid()).arg(getgid()).toLatin1()); + return fallbackXdgRuntimeDir(); + }); + + addRow("environment:broken-symlink", [](QDir &d) -> std::optional<QString> { + QString p = d.filePath("link"); + QFile::link(d.filePath("this-goes-nowhere"), p); + updateRuntimeDir(p); + QTest::ignoreMessage(QtWarningMsg, + QString("QStandardPaths: runtime directory '%1' is not a directory, " + "but a broken symlink") + .arg(p).toLatin1()); + return fallbackXdgRuntimeDir(); + }); + + addRow("environment:symlink-to-dir", [](QDir &d) -> std::optional<QString> { + QString p = d.filePath("link"); + d.mkdir("dir"); + QFile::link(d.filePath("dir"), p); + QFile::setPermissions(p, QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner); + updateRuntimeDir(p); + QTest::ignoreMessage(QtWarningMsg, + QString("QStandardPaths: runtime directory '%1' is not a directory, " + "but a symbolic link to a directory permissions 0700 owned by UID %2 GID %3") + .arg(p).arg(getuid()).arg(getgid()).toLatin1()); + return fallbackXdgRuntimeDir(); + }); + + addRow("no-environment:non-existing", [](QDir &) -> std::optional<QString> { + clearRuntimeDir(); + return fallbackXdgRuntimeDir(); + }); + + addRow("no-environment:existing", [](QDir &d) -> std::optional<QString> { + clearRuntimeDir(); + QString p = fallbackXdgRuntimeDir(); + d.mkdir(p); // probably has wrong permissions + QFile::setPermissions(p, QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner); + return p; + }); + + addRow("no-environment:fallback-is-file", [](QDir &) -> std::optional<QString> { + QString p = fallbackXdgRuntimeDir(); + QFile f(p); + if (!f.open(QIODevice::WriteOnly)) + return failedToOpen(f); + f.setPermissions(QFile::ReadOwner | QFile::WriteOwner); + + clearRuntimeDir(); + QTest::ignoreMessage(QtWarningMsg, + QString("QStandardPaths: runtime directory '%1' is not a directory, " + "but a regular file permissions 0600 owned by UID %2 GID %3") + .arg(p).arg(getuid()).arg(getgid()).toLatin1()); + return QString(); + }); + + addRow("environment-and-fallback-are-files", [](QDir &d) -> std::optional<QString> { + QString p = d.filePath("file1"); + QFile f(p); + if (!f.open(QIODevice::WriteOnly)) + return failedToOpen(f); + f.setPermissions(QFile::ReadOwner | QFile::WriteOwner | QFile::ReadGroup); + updateRuntimeDir(p); + QTest::ignoreMessage(QtWarningMsg, + QString("QStandardPaths: runtime directory '%1' is not a directory, " + "but a regular file permissions 0640 owned by UID %2 GID %3") + .arg(p).arg(getuid()).arg(getgid()).toLatin1()); + + f.close(); + f.setFileName(fallbackXdgRuntimeDir()); + if (!f.open(QIODevice::WriteOnly)) + return failedToOpen(f); + f.setPermissions(QFile::ReadOwner | QFile::WriteOwner | QFile::ReadGroup); + QTest::ignoreMessage(QtWarningMsg, + QString("QStandardPaths: runtime directory '%1' is not a directory, " + "but a regular file permissions 0640 owned by UID %2 GID %3") + .arg(f.fileName()).arg(getuid()).arg(getgid()).toLatin1()); + + return QString(); + }); +#endif +} + void tst_qstandardpaths::testCustomRuntimeDirectory() { #if defined(Q_OS_UNIX) @@ -478,63 +749,40 @@ void tst_qstandardpaths::testCustomRuntimeDirectory() #ifdef Q_XDG_PLATFORM struct EnvVarRestorer { - EnvVarRestorer() : origRuntimeDir(qgetenv("XDG_RUNTIME_DIR")) {} - ~EnvVarRestorer() { qputenv("XDG_RUNTIME_DIR", origRuntimeDir.constData()); } - const QByteArray origRuntimeDir; + ~EnvVarRestorer() + { + qputenv("XDG_RUNTIME_DIR", origRuntimeDir); + qputenv("TMPDIR", origTempDir); + } + const QByteArray origRuntimeDir = qgetenv("XDG_RUNTIME_DIR"); + const QByteArray origTempDir = qgetenv("TMPDIR"); }; EnvVarRestorer restorer; - // When $XDG_RUNTIME_DIR points to a directory with wrong ownership, QStandardPaths should warn - QByteArray rootOwnedFileName = "/tmp"; - if (EmulationDetector::isRunningArmOnX86()) { - // Directory "tmp" under toolchain sysroot is detected by qemu and has same uid as current user. - // Try /opt instead, it might not be located in the sysroot. - QFileInfo rootOwnedFile = QFileInfo(QString::fromLatin1(rootOwnedFileName)); - if (rootOwnedFile.ownerId() == ::geteuid()) { - rootOwnedFileName = "/opt"; - } + // set up the environment to point to a place we control + QTemporaryDir tempDir; + QVERIFY2(tempDir.isValid(), qPrintable(tempDir.errorString())); + + QDir d(tempDir.path()); + qputenv("TMPDIR", QFile::encodeName(tempDir.path())); + + QFETCH(RuntimeDirSetup, setup); + std::optional<QString> opt = setup(d); + QVERIFY(opt); + QString expected = *opt; + + QString runtimeDir = QStandardPaths::writableLocation(QStandardPaths::RuntimeLocation); + QCOMPARE(runtimeDir, expected); + + if (!runtimeDir.isEmpty()) { + QFileInfo runtimeInfo(runtimeDir); + QVERIFY(runtimeInfo.isDir()); + QVERIFY(!runtimeInfo.isSymLink()); + auto expectedPerms = QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner + | QFile::ReadUser | QFile::WriteUser | QFile::ExeUser; + QCOMPARE(QString::number(runtimeInfo.permissions(), 16), + QString::number(expectedPerms, 16)); } - qputenv("XDG_RUNTIME_DIR", QFile::encodeName(rootOwnedFileName)); - - // It's very unlikely that /tmp is 0600 or that we can chmod it - // The call below outputs - // "QStandardPaths: wrong ownership on runtime directory /tmp, 0 instead of $UID" - // but we can't reliably expect that it's owned by uid 0, I think. - const uid_t uid = geteuid(); - QTest::ignoreMessage(QtWarningMsg, - qPrintable(QString::fromLatin1("QStandardPaths: wrong ownership on runtime directory " + rootOwnedFileName + ", 0 instead of %1").arg(uid))); - const QString runtimeDir = QStandardPaths::writableLocation(QStandardPaths::RuntimeLocation); - QVERIFY2(runtimeDir.isEmpty(), qPrintable(runtimeDir)); - - // When $XDG_RUNTIME_DIR points to a directory with wrong permissions, QStandardPaths should warn - const QByteArray wrongPermissionFileName = "wrong_permissions"; - QDir::current().mkdir(wrongPermissionFileName); - QFile wrongPermissionFile(wrongPermissionFileName); - const QFile::Permissions wantedPerms = QFile::ReadUser | QFile::WriteUser | QFile::ExeUser; - QVERIFY(wrongPermissionFile.setPermissions(wantedPerms | QFile::ExeGroup)); - - qputenv("XDG_RUNTIME_DIR", wrongPermissionFileName); - QTest::ignoreMessage(QtWarningMsg, - qPrintable(QString::fromLatin1("QStandardPaths: wrong permissions on runtime directory " + wrongPermissionFileName + ", 7710 instead of 7700"))); - const QString wrongPermissionRuntimeDir = QStandardPaths::writableLocation(QStandardPaths::RuntimeLocation); - QVERIFY(wrongPermissionRuntimeDir.isEmpty()); - QDir::current().rmdir(wrongPermissionFileName); - - // When $XDG_RUNTIME_DIR points to a non-existing directory, QStandardPaths should create it first - const QByteArray nonExistingDir = "does_not_exist"; - qputenv("XDG_RUNTIME_DIR", nonExistingDir); - const QString nonExistingRuntimeDir = QStandardPaths::writableLocation(QStandardPaths::RuntimeLocation); - QVERIFY2(!nonExistingRuntimeDir.compare(nonExistingDir), qPrintable(nonExistingRuntimeDir)); - QVERIFY(QDir::current().exists(nonExistingRuntimeDir)); - QDir::current().rmdir(nonExistingRuntimeDir); - - // When $XDG_RUNTIME_DIR points to a file, QStandardPaths should warn - const QString file = QFINDTESTDATA("tst_qstandardpaths.cpp"); - QVERIFY(!file.isEmpty()); - qputenv("XDG_RUNTIME_DIR", QFile::encodeName(file)); - QTest::ignoreMessage(QtWarningMsg, qPrintable(QString::fromLatin1("QStandardPaths: XDG_RUNTIME_DIR points to '%1' which is not a directory").arg(file))); - const QString noRuntimeDir = QStandardPaths::writableLocation(QStandardPaths::RuntimeLocation); - QVERIFY2(noRuntimeDir.isEmpty(), qPrintable(file)); #endif } @@ -596,6 +844,35 @@ void tst_qstandardpaths::testXdgPathCleanup() QVERIFY(!appsDirs.contains("/applications")); QVERIFY(!appsDirs.contains(uncleanGlobalAppDir + "/applications")); QVERIFY(!appsDirs.contains("relative/path/applications")); + + const QString uncleanGlobalConfigDir = "/./" + QFile::encodeName(m_globalConfigDir); + qputenv("XDG_CONFIG_DIRS", QFile::encodeName(uncleanGlobalConfigDir) + "::relative/path"); + const QStringList configDirs = QStandardPaths::standardLocations(QStandardPaths::ConfigLocation); + QVERIFY(!configDirs.contains("relative/path"_L1)); + QVERIFY(!configDirs.contains(""_L1)); + + // Relative paths in XDG_* env vars are ignored + const QString relative("./someRelativeDir"); + + qputenv("XDG_CACHE_HOME", relative.toLatin1()); + const QString cacheDir = cacheLoc(); + QCOMPARE_NE(cacheDir, relative); + + qputenv("XDG_STATE_HOME", relative.toLatin1()); + const QString stateDir = stateLoc(); + QCOMPARE_NE(stateDir, relative); + + qputenv("XDG_DATA_HOME", relative.toLatin1()); + const QString localDataDir = genericDataLoc(); + QCOMPARE_NE(localDataDir, relative); + + qputenv("XDG_CONFIG_HOME", relative.toLatin1()); + const QString localConfig = configLoc(); + QCOMPARE_NE(localConfig, relative); + + qputenv("XDG_RUNTIME_DIR", relative.toLatin1()); + const QString runtimeDir = genericDataLoc(); + QCOMPARE_NE(runtimeDir, relative); #endif } diff --git a/tests/auto/corelib/io/qstorageinfo/CMakeLists.txt b/tests/auto/corelib/io/qstorageinfo/CMakeLists.txt new file mode 100644 index 0000000000..acbd90cb45 --- /dev/null +++ b/tests/auto/corelib/io/qstorageinfo/CMakeLists.txt @@ -0,0 +1,20 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qstorageinfo Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qstorageinfo LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +qt_internal_add_test(tst_qstorageinfo + SOURCES + tst_qstorageinfo.cpp + LIBRARIES + Qt::CorePrivate + Qt::TestPrivate +) diff --git a/tests/auto/corelib/io/qstorageinfo/qstorageinfo.pro b/tests/auto/corelib/io/qstorageinfo/qstorageinfo.pro deleted file mode 100644 index de27504a9b..0000000000 --- a/tests/auto/corelib/io/qstorageinfo/qstorageinfo.pro +++ /dev/null @@ -1,4 +0,0 @@ -CONFIG += testcase -TARGET = tst_qstorageinfo -QT = core-private testlib -SOURCES = tst_qstorageinfo.cpp diff --git a/tests/auto/corelib/io/qstorageinfo/tst_qstorageinfo.cpp b/tests/auto/corelib/io/qstorageinfo/tst_qstorageinfo.cpp index fe63cecccd..f96cd48900 100644 --- a/tests/auto/corelib/io/qstorageinfo/tst_qstorageinfo.cpp +++ b/tests/auto/corelib/io/qstorageinfo/tst_qstorageinfo.cpp @@ -1,52 +1,51 @@ -/**************************************************************************** -** -** Copyright (C) 2014 Ivan Komissarov <ABBAPOH@gmail.com> -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtTest/QtTest> +// Copyright (C) 2014 Ivan Komissarov <ABBAPOH@gmail.com> +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QTest> +#include <QtTest/private/qcomparisontesthelper_p.h> +#include <QSet> +#include <QStandardPaths> #include <QStorageInfo> +#include <QTemporaryFile> +#include "private/qemulationdetector_p.h" #include <stdarg.h> +#ifdef Q_OS_WIN +# include <io.h> // _get_osfhandle +# include <windows.h> +#else +# include <unistd.h> +#endif + #include "../../../../manual/qstorageinfo/printvolumes.cpp" +#ifdef Q_OS_LINUX +# include "../../../../../src/corelib/io/qstorageinfo_linux_p.h" +#endif + +using namespace Qt::StringLiterals; + class tst_QStorageInfo : public QObject { Q_OBJECT private slots: void defaultValues(); void dump(); + void compareCompiles(); void operatorEqual(); -#ifndef Q_OS_WINRT void operatorNotEqual(); void root(); void currentStorage(); + void storageList_data(); void storageList(); - void tempFile(); - void caching(); + void freeSpaceUpdate(); + +#if defined(Q_OS_LINUX) && defined(QT_BUILD_INTERNAL) + void testParseMountInfo_data(); + void testParseMountInfo(); + void testParseMountInfo_filtered_data(); + void testParseMountInfo_filtered(); #endif }; @@ -92,33 +91,44 @@ void tst_QStorageInfo::dump() printVolumes(QStorageInfo::mountedVolumes(), qInfoPrinter); } +void tst_QStorageInfo::compareCompiles() +{ + QTestPrivate::testEqualityOperatorsCompile<QStorageInfo>(); +} + void tst_QStorageInfo::operatorEqual() { { QStorageInfo storage1 = QStorageInfo::root(); QStorageInfo storage2(QDir::rootPath()); - QCOMPARE(storage1, storage2); + QT_TEST_EQUALITY_OPS(storage1, storage2, true); } { QStorageInfo storage1(QCoreApplication::applicationDirPath()); QStorageInfo storage2(QCoreApplication::applicationFilePath()); - QCOMPARE(storage1, storage2); + QT_TEST_EQUALITY_OPS(storage1, storage2, true); } { QStorageInfo storage1; QStorageInfo storage2; - QCOMPARE(storage1, storage2); + QT_TEST_EQUALITY_OPS(storage1, storage2, true); + } + + // Test copy ctor + { + QStorageInfo storage1 = QStorageInfo::root(); + QStorageInfo storage2(storage1); + QT_TEST_EQUALITY_OPS(storage1, storage2, true); } } -#ifndef Q_OS_WINRT void tst_QStorageInfo::operatorNotEqual() { QStorageInfo storage1 = QStorageInfo::root(); QStorageInfo storage2; - QVERIFY(storage1 != storage2); + QT_TEST_EQUALITY_OPS(storage1, storage2, false); } void tst_QStorageInfo::root() @@ -129,31 +139,39 @@ void tst_QStorageInfo::root() QVERIFY(storage.isReady()); QCOMPARE(storage.rootPath(), QDir::rootPath()); QVERIFY(storage.isRoot()); +#ifndef Q_OS_WASM QVERIFY(!storage.device().isEmpty()); QVERIFY(!storage.fileSystemType().isEmpty()); +#endif #ifndef Q_OS_HAIKU - QVERIFY(storage.bytesTotal() >= 0); - QVERIFY(storage.bytesFree() >= 0); - QVERIFY(storage.bytesAvailable() >= 0); + QCOMPARE_GE(storage.bytesTotal(), 0); + QCOMPARE_GE(storage.bytesFree(), 0); + QCOMPARE_GE(storage.bytesAvailable(), 0); #endif } void tst_QStorageInfo::currentStorage() { QString appPath = QCoreApplication::applicationFilePath(); + if (appPath.isEmpty()) + QSKIP("No applicationFilePath(), cannot test"); + QStorageInfo storage(appPath); QVERIFY(storage.isValid()); QVERIFY(storage.isReady()); QVERIFY(appPath.startsWith(storage.rootPath(), Qt::CaseInsensitive)); QVERIFY(!storage.device().isEmpty()); QVERIFY(!storage.fileSystemType().isEmpty()); - QVERIFY(storage.bytesTotal() >= 0); - QVERIFY(storage.bytesFree() >= 0); - QVERIFY(storage.bytesAvailable() >= 0); + QCOMPARE_GE(storage.bytesTotal(), 0); + QCOMPARE_GE(storage.bytesFree(), 0); + QCOMPARE_GE(storage.bytesAvailable(), 0); } -void tst_QStorageInfo::storageList() +void tst_QStorageInfo::storageList_data() { + if (QTestPrivate::isRunningArmOnX86()) + QSKIP("QEMU appears not to emulate the system calls correctly."); + QStorageInfo root = QStorageInfo::root(); QList<QStorageInfo> volumes = QStorageInfo::mountedVolumes(); @@ -163,9 +181,26 @@ void tst_QStorageInfo::storageList() volumes.removeOne(root); QVERIFY(!volumes.contains(root)); - foreach (const QStorageInfo &storage, volumes) { + if (volumes.isEmpty()) + QSKIP("Only the root volume was mounted on this system"); + + QTest::addColumn<QStorageInfo>("storage"); + QSet<QString> seenRoots; + for (const QStorageInfo &storage : std::as_const(volumes)) { if (!storage.isReady()) continue; + QString rootPath = storage.rootPath(); + if (seenRoots.contains(rootPath)) + qInfo() << rootPath << "is mounted over; QStorageInfo may be unpredictable"; + else + QTest::newRow(qUtf8Printable(rootPath)) << storage; + seenRoots.insert(rootPath); + } +} + +void tst_QStorageInfo::storageList() +{ + QFETCH(QStorageInfo, storage); QVERIFY(storage.isValid()); QVERIFY(!storage.isRoot()); @@ -173,64 +208,268 @@ void tst_QStorageInfo::storageList() QVERIFY(!storage.device().isEmpty()); QVERIFY(!storage.fileSystemType().isEmpty()); #endif - } + + QStorageInfo other(storage.rootPath()); + QVERIFY(other.isValid()); + QCOMPARE(other.rootPath(), storage.rootPath()); + QCOMPARE(other.device(), storage.device()); + QCOMPARE(other.subvolume(), storage.subvolume()); + QCOMPARE(other.fileSystemType(), storage.fileSystemType()); + QCOMPARE(other.name(), storage.name()); + QCOMPARE(other.displayName(), storage.displayName()); + + QCOMPARE(other.bytesTotal(), storage.bytesTotal()); + QCOMPARE(other.blockSize(), storage.blockSize()); + // not comparing free space because it may have changed + + QCOMPARE(other.isRoot(), storage.isRoot()); + QCOMPARE(other.isReadOnly(), storage.isReadOnly()); + QCOMPARE(other.isReady(), storage.isReady()); } -void tst_QStorageInfo::tempFile() +static QString suitableDirectoryForWriting() { - QTemporaryFile file; - QVERIFY2(file.open(), qPrintable(file.errorString())); - - QStorageInfo storage1(file.fileName()); + std::initializer_list<const char *> inadvisableFs = { #ifdef Q_OS_LINUX - if (storage1.fileSystemType() == "btrfs") - QSKIP("This test doesn't work on btrfs, probably due to a btrfs bug"); + // See comment below. If we can get a tmpfs, let's try it. + "btrfs", + "xfs", #endif - - qint64 free = storage1.bytesFree(); - QVERIFY(free != -1); - - file.write(QByteArray(1024*1024, '1')); - file.flush(); - file.close(); - - QStorageInfo storage2(file.fileName()); - if (free == storage2.bytesFree() && storage2.fileSystemType() == "apfs") { - QEXPECT_FAIL("", "This test is likely to fail on APFS", Continue); + }; + + QString tempDir = QDir::tempPath(); + QString fsType = QStorageInfo(tempDir).fileSystemType(); + if (std::find(std::begin(inadvisableFs), std::end(inadvisableFs), fsType) + != std::end(inadvisableFs)) { + // the RuntimeLocation on Linux is almost always a tmpfs + QString runtimeDir = QStandardPaths::writableLocation(QStandardPaths::RuntimeLocation); + if (!runtimeDir.isEmpty()) + return runtimeDir; } - QVERIFY(free != storage2.bytesFree()); + return tempDir; } -void tst_QStorageInfo::caching() +void tst_QStorageInfo::freeSpaceUpdate() { - QTemporaryFile file; + // Some filesystems don't update the free space unless we ask that the OS + // flush its buffers to disk and even then the update may not be entirely + // synchronous. So we always ask the OS to flush them and we may keep + // trying to write until the free space changes (with a maximum so we don't + // exhaust and cause other problems). + // + // In the past, we had this issue with APFS (Apple systems), BTRFS and XFS + // (Linux). Current testing is that APFS and XFS always succeed after the + // first block is written and BTRFS almost always by the second block. + + auto flushAndSync = [](QFile &file) { + file.flush(); + +#ifdef Q_OS_WIN + FlushFileBuffers(HANDLE(_get_osfhandle(file.handle()))); +#elif _POSIX_VERSION >= 200112L + fsync(file.handle()); +# ifndef Q_OS_VXWORKS + sync(); +# endif // Q_OS_VXWORKS +#endif + }; + + QTemporaryFile file(suitableDirectoryForWriting() + "/tst_qstorageinfo.XXXXXX"); QVERIFY2(file.open(), qPrintable(file.errorString())); QStorageInfo storage1(file.fileName()); -#ifdef Q_OS_LINUX - if (storage1.fileSystemType() == "btrfs") - QSKIP("This test doesn't work on btrfs, probably due to a btrfs bug"); -#endif + qInfo() << "Testing on" << storage1; qint64 free = storage1.bytesFree(); QStorageInfo storage2(storage1); QCOMPARE(free, storage2.bytesFree()); - QVERIFY(free != -1); - - file.write(QByteArray(1024*1024, '\0')); - file.flush(); + QCOMPARE_NE(free, -1); + + // let's see if we can make it change + QByteArray block(1024 * 1024 / 2, '\0'); + + // let's try and keep to less than ~10% of the free disk space + int maxIterations = 25; + if (free < 256 * block.size()) + maxIterations = free / 10 / block.size(); + if (maxIterations == 0) + QSKIP("Not enough free disk space to continue"); + + file.write(block); + flushAndSync(file); + for (int i = 0; i < maxIterations; ++i) { + QStorageInfo storage3(file.fileName()); + qint64 nowFree = storage3.bytesFree(); + if (nowFree != free) + break; + + // grow some more + file.write(block); + flushAndSync(file); + } + // qDebug() << "Needed to grow" << file.fileName() << "to" << file.size(); + QCOMPARE(storage1, storage2); QCOMPARE(free, storage1.bytesFree()); QCOMPARE(free, storage2.bytesFree()); storage2.refresh(); QCOMPARE(storage1, storage2); - if (free == storage2.bytesFree() && storage2.fileSystemType() == "apfs") { - QEXPECT_FAIL("", "This test is likely to fail on APFS", Continue); - } - QVERIFY(free != storage2.bytesFree()); -} + +#ifndef Q_OS_WASM + QCOMPARE_NE(free, storage2.bytesFree()); #endif +} + +#if defined(Q_OS_LINUX) && defined(QT_BUILD_INTERNAL) +void tst_QStorageInfo::testParseMountInfo_data() +{ + QTest::addColumn<QByteArray>("line"); + QTest::addColumn<MountInfo>("expected"); + + QTest::newRow("tmpfs") + << "17 25 0:18 / /dev rw,nosuid,relatime shared:2 - tmpfs tmpfs rw,seclabel,mode=755\n"_ba + << MountInfo{"/dev", "tmpfs", "tmpfs", "", makedev(0, 18), 17}; + QTest::newRow("proc") + << "23 66 0:21 / /proc rw,nosuid,nodev,noexec,relatime shared:12 - proc proc rw\n"_ba + << MountInfo{"/proc", "proc", "proc", "", makedev(0, 21), 23}; + + // E.g. on Android + QTest::newRow("rootfs") + << "618 618 0:1 / / ro,relatime master:1 - rootfs rootfs ro,seclabel\n"_ba + << MountInfo{"/", "rootfs", "rootfs", "", makedev(0, 1), 618}; + + QTest::newRow("ext4") + << "47 66 8:3 / /home rw,relatime shared:50 - ext4 /dev/sda3 rw,stripe=32736\n"_ba + << MountInfo{"/home", "ext4", "/dev/sda3", "", makedev(8, 3), 47}; + + QTest::newRow("empty-optional-field") + << "23 25 0:22 / /apex rw,nosuid,nodev,noexec,relatime - tmpfs tmpfs rw,seclabel,mode=755\n"_ba + << MountInfo{"/apex", "tmpfs", "tmpfs", "", makedev(0, 22), 23}; + + QTest::newRow("one-optional-field") + << "47 66 8:3 / /home rw,relatime shared:50 - ext4 /dev/sda3 rw,stripe=32736\n"_ba + << MountInfo{"/home", "ext4", "/dev/sda3", "", makedev(8, 3), 47}; + + QTest::newRow("multiple-optional-fields") + << "47 66 8:3 / /home rw,relatime shared:142 master:111 - ext4 /dev/sda3 rw,stripe=32736\n"_ba + << MountInfo{"/home", "ext4", "/dev/sda3", "", makedev(8, 3), 47}; + + QTest::newRow("mountdir-with-utf8") + << "129 66 8:51 / /mnt/lab\xC3\xA9l rw,relatime shared:234 - ext4 /dev/sdd3 rw\n"_ba + << MountInfo{"/mnt/labél", "ext4", "/dev/sdd3", "", makedev(8, 51), 129}; + + QTest::newRow("mountdir-with-space") + << "129 66 8:51 / /mnt/labe\\040l rw,relatime shared:234 - ext4 /dev/sdd3 rw\n"_ba + << MountInfo{"/mnt/labe l", "ext4", "/dev/sdd3", "", makedev(8, 51), 129}; + + QTest::newRow("mountdir-with-tab") + << "129 66 8:51 / /mnt/labe\\011l rw,relatime shared:234 - ext4 /dev/sdd3 rw\n"_ba + << MountInfo{"/mnt/labe\tl", "ext4", "/dev/sdd3", "", makedev(8, 51), 129}; + + QTest::newRow("mountdir-with-backslash") + << "129 66 8:51 / /mnt/labe\\134l rw,relatime shared:234 - ext4 /dev/sdd3 rw\n"_ba + << MountInfo{"/mnt/labe\\l", "ext4", "/dev/sdd3", "", makedev(8, 51), 129}; + + QTest::newRow("mountdir-with-newline") + << "129 66 8:51 / /mnt/labe\\012l rw,relatime shared:234 - ext4 /dev/sdd3 rw\n"_ba + << MountInfo{"/mnt/labe\nl", "ext4", "/dev/sdd3", "", makedev(8, 51), 129}; + + QTest::newRow("btrfs-subvol") + << "775 503 0:49 /foo/bar / rw,relatime shared:142 master:111 - btrfs " + "/dev/mapper/vg0-stuff rw,ssd,discard,space_cache,subvolid=272,subvol=/foo/bar\n"_ba + << MountInfo{"/", "btrfs", "/dev/mapper/vg0-stuff", "/foo/bar", makedev(0, 49), 775}; + + QTest::newRow("bind-mount") + << "59 47 8:17 /rpmbuild /home/user/rpmbuild rw,relatime shared:48 - ext4 /dev/sdb1 rw\n"_ba + << MountInfo{"/home/user/rpmbuild", "ext4", "/dev/sdb1", "/rpmbuild", makedev(8, 17), 59}; + + QTest::newRow("space-dash-space") + << "47 66 8:3 / /home\\040-\\040dir rw,relatime shared:50 - ext4 /dev/sda3 rw,stripe=32736\n"_ba + << MountInfo{"/home - dir", "ext4", "/dev/sda3", "", makedev(8, 3), 47}; + + QTest::newRow("btrfs-mount-bind-file") + << "1799 1778 0:49 " + "/var_lib_docker/containers/81fde0fec3dd3d99765c3f7fd9cf1ab121b6ffcfd05d5d7ff434db933fe9d795/resolv.conf " + "/etc/resolv.conf rw,relatime - btrfs /dev/mapper/vg0-stuff " + "rw,ssd,discard,space_cache,subvolid=1773,subvol=/var_lib_docker\n"_ba + << MountInfo{"/etc/resolv.conf", "btrfs", "/dev/mapper/vg0-stuff", + "/var_lib_docker/containers/81fde0fec3dd3d99765c3f7fd9cf1ab121b6ffcfd05d5d7ff434db933fe9d795/resolv.conf", + makedev(0, 49), 1799}; + + QTest::newRow("very-long-line-QTBUG-77059") + << "727 26 0:52 / " + "/var/lib/docker/overlay2/f3fbad5eedef71145f00729f0826ea8c44defcfec8c92c58aee0aa2c5ea3fa3a/merged " + "rw,relatime shared:399 - overlay overlay " + "rw,lowerdir=/var/lib/docker/overlay2/l/PUP2PIY4EQLAOEDQOZ56BHVE53:" + "/var/lib/docker/overlay2/l/6IIID3C6J3SUXZEA3GJXKQSTLD:" + "/var/lib/docker/overlay2/l/PA6N6URNR7XDBBGGOSFWSFQ2CG:" + "/var/lib/docker/overlay2/l/5EOMBTZNCPOCE4LM3I4JCTNSTT:" + "/var/lib/docker/overlay2/l/DAMINQ46P3LKX2GDDDIWQKDIWC:" + "/var/lib/docker/overlay2/l/DHR3N57AEH4OG5QER5XJW2LXIN:" + "/var/lib/docker/overlay2/l/NW26KA7QPRS2KSVQI77QJWLMHW," + "upperdir=/var/lib/docker/overlay2/f3fbad5eedef71145f00729f0826ea8c44defcfec8c92c58aee0aa2c5ea3fa3a/diff," + "workdir=/var/lib/docker/overlay2/f3fbad5eedef71145f00729f0826ea8c44defcfec8c92c58aee0aa2c5ea3fa3a/work," + "index=off,xino=off\n"_ba + << MountInfo{"/var/lib/docker/overlay2/f3fbad5eedef71145f00729f0826ea8c44defcfec8c92c58aee0aa2c5ea3fa3a/merged", + "overlay", "overlay", "", makedev(0, 52), 727}; + + QTest::newRow("sshfs-src-device-not-start-with-slash") + << "128 92 0:64 / /mnt-point rw,nosuid,nodev,relatime shared:234 - " + "fuse.sshfs admin@192.168.1.2:/storage/emulated/0 rw,user_id=1000,group_id=1000\n"_ba + << MountInfo{"/mnt-point", "fuse.sshfs", + "admin@192.168.1.2:/storage/emulated/0", "", makedev(0, 64), 128}; +} + +void tst_QStorageInfo::testParseMountInfo() +{ + QFETCH(QByteArray, line); + QFETCH(MountInfo, expected); + + const std::vector<MountInfo> result = doParseMountInfo(line); + QVERIFY(!result.empty()); + const MountInfo &a = result.front(); + QCOMPARE(a.mountPoint, expected.mountPoint); + QCOMPARE(a.fsType, expected.fsType); + QCOMPARE(a.device, expected.device); + QCOMPARE(a.fsRoot, expected.fsRoot); + QCOMPARE(a.stDev, expected.stDev); + QCOMPARE(a.mntid, expected.mntid); +} + +void tst_QStorageInfo::testParseMountInfo_filtered_data() +{ + QTest::addColumn<QByteArray>("line"); + + QTest::newRow("proc") + << "23 66 0:21 / /proc rw,nosuid,nodev,noexec,relatime shared:12 - proc proc rw\n"_ba; + + QTest::newRow("sys") + << "24 66 0:22 / /sys rw,nosuid,nodev,noexec,relatime shared:2 - sysfs sysfs rw\n"_ba; + QTest::newRow("sys-kernel") + << "26 24 0:6 / /sys/kernel/security rw,nosuid,nodev,noexec,relatime " + "shared:3 - securityfs securityfs rw\n"_ba; + + QTest::newRow("dev") + << "25 66 0:5 / /dev rw,nosuid shared:8 - devtmpfs devtmpfs " + "rw,size=4096k,nr_inodes=8213017,mode=755,inode64\n"_ba; + QTest::newRow("dev-shm") + << "27 25 0:23 / /dev/shm rw,nosuid,nodev shared:9 - tmpfs tmpfs rw,inode64\n"_ba; + + QTest::newRow("var-run") + << "46 28 0:25 / /var/run rw,nosuid,nodev,noexec,relatime shared:1 - " + "tmpfs tmpfs rw,size=32768k,mode=755,inode64\n"_ba; + QTest::newRow("var-lock") + << "46 28 0:25 / /var/lock rw,nosuid,nodev,noexec,relatime shared:1 - " + "tmpfs tmpfs rw,size=32768k,mode=755,inode64\n"_ba; +} +void tst_QStorageInfo::testParseMountInfo_filtered() +{ + QFETCH(QByteArray, line); + QVERIFY(doParseMountInfo(line, FilterMountInfo::Filtered).empty()); +} + +#endif // Q_OS_LINUX QTEST_MAIN(tst_QStorageInfo) diff --git a/tests/auto/corelib/io/qtemporarydir/BLACKLIST b/tests/auto/corelib/io/qtemporarydir/BLACKLIST new file mode 100644 index 0000000000..da7dac909f --- /dev/null +++ b/tests/auto/corelib/io/qtemporarydir/BLACKLIST @@ -0,0 +1,2 @@ +[QTBUG43352_failedSetPermissions] +macos-14 arm ci diff --git a/tests/auto/corelib/io/qtemporarydir/CMakeLists.txt b/tests/auto/corelib/io/qtemporarydir/CMakeLists.txt new file mode 100644 index 0000000000..0ddde7d0b3 --- /dev/null +++ b/tests/auto/corelib/io/qtemporarydir/CMakeLists.txt @@ -0,0 +1,24 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qtemporarydir Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qtemporarydir LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +qt_internal_add_test(tst_qtemporarydir + SOURCES + tst_qtemporarydir.cpp + LIBRARIES + Qt::TestPrivate +) + +qt_internal_extend_target(tst_qtemporarydir CONDITION WIN32 + LIBRARIES + shlwapi +) diff --git a/tests/auto/corelib/io/qtemporarydir/qtemporarydir.pro b/tests/auto/corelib/io/qtemporarydir/qtemporarydir.pro deleted file mode 100644 index 5908648378..0000000000 --- a/tests/auto/corelib/io/qtemporarydir/qtemporarydir.pro +++ /dev/null @@ -1,7 +0,0 @@ -CONFIG += testcase -TARGET = tst_qtemporarydir -SOURCES += tst_qtemporarydir.cpp -INCLUDEPATH += ../../../../shared/ -HEADERS += ../../../../shared/emulationdetector.h - -QT = core testlib testlib-private diff --git a/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp b/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp index 6dbb8ddd0d..737317a8fb 100644 --- a/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp +++ b/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp @@ -1,49 +1,31 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - -#include <QtTest/QtTest> +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QTest> +#include <QStandardPaths> #include <qcoreapplication.h> #include <qstring.h> #include <qtemporarydir.h> #include <qfile.h> #include <qdir.h> #include <qset.h> -#include <qtextcodec.h> #include <QtTest/private/qtesthelpers_p.h> #ifdef Q_OS_WIN -# include <windows.h> +# include <shlwapi.h> +# include <qt_windows.h> #endif #ifdef Q_OS_UNIX // for geteuid() # include <sys/types.h> # include <unistd.h> #endif -#include "emulationdetector.h" + +#ifdef Q_OS_INTEGRITY +#include "qplatformdefs.h" +#endif + +#include <optional> + +using namespace Qt::StringLiterals; class tst_QTemporaryDir : public QObject { @@ -55,6 +37,7 @@ public slots: private slots: void construction(); + void moveSemantics(); void fileTemplate(); void fileTemplate_data(); void getSetCheck(); @@ -70,7 +53,7 @@ private slots: void QTBUG_4796_data(); void QTBUG_4796(); - void QTBUG43352_failedSetPermissions(); + void nestedTempDirs(); private: QString m_previousCurrent; @@ -101,6 +84,58 @@ void tst_QTemporaryDir::construction() QCOMPARE(dir.errorString(), QString()); } +void tst_QTemporaryDir::moveSemantics() +{ + { + auto original = std::optional<QTemporaryDir>(std::in_place); + QVERIFY(original->isValid()); + + original->setAutoRemove(true); + + auto OriginalDirectoryInfo = QFileInfo(original->path()); + OriginalDirectoryInfo.setCaching(false); + QVERIFY(OriginalDirectoryInfo.exists()); + + QTemporaryDir movedInto = std::move(*original); + + original.reset(); + + QVERIFY(OriginalDirectoryInfo.exists()); + QVERIFY(movedInto.path() == OriginalDirectoryInfo.filePath()); + } + + { + auto movedInto = QTemporaryDir(); + QVERIFY(movedInto.isValid()); + + movedInto.setAutoRemove(true); + + auto movedIntoInitialDirectoryInfo = QFileInfo(movedInto.path()); + movedIntoInitialDirectoryInfo.setCaching(false); + QVERIFY(movedIntoInitialDirectoryInfo.exists()); + + auto OriginalDirectoryInfo = QFileInfo(); + OriginalDirectoryInfo.setCaching(false); + + { + auto original = QTemporaryDir(); + QVERIFY(original.isValid()); + + original.setAutoRemove(true); + + OriginalDirectoryInfo.setFile(original.path()); + QVERIFY(OriginalDirectoryInfo.exists()); + + movedInto = std::move(original); + } + + QVERIFY(!movedIntoInitialDirectoryInfo.exists()); + QVERIFY(OriginalDirectoryInfo.exists()); + + QVERIFY(movedInto.path() == OriginalDirectoryInfo.filePath()); + } +} + // Testing get/set functions void tst_QTemporaryDir::getSetCheck() { @@ -158,6 +193,28 @@ void tst_QTemporaryDir::fileTemplate_data() prefix = "qt_" + hanTestText(); QTest::newRow("Chinese") << (prefix + "XXXXXX" + umlautTestText()) << prefix << umlautTestText(); } + +#ifdef Q_OS_WIN + auto tmp = QDir::toNativeSeparators(QDir::tempPath()); + if (PathGetDriveNumber((const wchar_t *) tmp.utf16()) < 0) + return; // skip if we have no drive letter + + tmp.data()[1] = u'$'; + const auto tmpPath = tmp + uR"(\UNC.XXXXXX.tmpDir)"_s; + + QTest::newRow("UNC-backslash") + << uR"(\\localhost\)"_s + tmpPath << "UNC." + << ".tmpDir"; + QTest::newRow("UNC-prefix") + << uR"(\\?\UNC\localhost\)"_s + tmpPath << "UNC." + << ".tmpDir"; + QTest::newRow("UNC-slash") + << u"//localhost/"_s + QDir::fromNativeSeparators(tmpPath) << "UNC." + << ".tmpDir"; + QTest::newRow("UNC-prefix-slash") + << uR"(//?/UNC/localhost/)"_s + QDir::fromNativeSeparators(tmpPath) << "UNC." + << ".tmpDir"; +#endif } void tst_QTemporaryDir::fileTemplate() @@ -171,9 +228,9 @@ void tst_QTemporaryDir::fileTemplate() QVERIFY(tempDir.isValid()); QString dirName = QDir(tempDir.path()).dirName(); - if (prefix.length()) { - QCOMPARE(dirName.left(prefix.length()), prefix); - QCOMPARE(dirName.right(suffix.length()), suffix); + if (prefix.size()) { + QCOMPARE(dirName.left(prefix.size()), prefix); + QCOMPARE(dirName.right(suffix.size()), suffix); } } @@ -290,7 +347,7 @@ void tst_QTemporaryDir::nonWritableCurrentDir() { #ifdef Q_OS_UNIX -# if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED) +# ifdef Q_OS_ANDROID const char nonWritableDir[] = "/data"; # else const char nonWritableDir[] = "/home"; @@ -311,12 +368,6 @@ void tst_QTemporaryDir::nonWritableCurrentDir() const QFileInfo nonWritableDirFi = QFileInfo(QLatin1String(nonWritableDir)); QVERIFY(nonWritableDirFi.isDir()); - if (EmulationDetector::isRunningArmOnX86()) { - if (nonWritableDirFi.ownerId() == ::geteuid()) { - QSKIP("Sysroot directories are owned by the current user"); - } - } - QVERIFY(!nonWritableDirFi.isWritable()); ChdirOnReturn cor(QDir::currentPath()); @@ -333,12 +384,13 @@ void tst_QTemporaryDir::nonWritableCurrentDir() void tst_QTemporaryDir::openOnRootDrives() { -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) unsigned int lastErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS); #endif // If it's possible to create a file in the root directory, it // must be possible to create a temp dir there too. - foreach (const QFileInfo &driveInfo, QDir::drives()) { + const auto drives = QDir::drives(); + for (const QFileInfo &driveInfo : drives) { QFile testFile(driveInfo.filePath() + "XXXXXX"); if (testFile.open(QIODevice::ReadWrite)) { testFile.remove(); @@ -347,7 +399,7 @@ void tst_QTemporaryDir::openOnRootDrives() QVERIFY(dir.isValid()); } } -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) SetErrorMode(lastErrorMode); #endif } @@ -427,7 +479,7 @@ void tst_QTemporaryDir::QTBUG_4796() // unicode support { ~CleanOnReturn() { - foreach (const QString &tempName, tempNames) + for (const QString &tempName : std::as_const(tempNames)) QVERIFY(QDir(tempName).removeRecursively()); } @@ -497,22 +549,24 @@ void tst_QTemporaryDir::QTBUG_4796() // unicode support #ifdef Q_OS_WIN QTest::qWait(20); #endif - foreach (const QString &tempName, cleaner.tempNames) + for (const QString &tempName : std::as_const(cleaner.tempNames)) QVERIFY2(!QDir(tempName).exists(), qPrintable(tempName)); cleaner.reset(); } -void tst_QTemporaryDir::QTBUG43352_failedSetPermissions() +void tst_QTemporaryDir::nestedTempDirs() { - QString path = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation) + QStringLiteral("/"); - int count = QDir(path).entryList().size(); + QTemporaryDir parentDir; + const QString &parentPath = parentDir.path(); { - QTemporaryDir dir(path); + QTemporaryDir tempdir(parentPath); } - QCOMPARE(QDir(path).entryList().size(), count); + QDir dir(parentPath); + dir.setFilter(QDir::NoDotAndDotDot); + QCOMPARE(dir.count(), 0); } QTEST_MAIN(tst_QTemporaryDir) diff --git a/tests/auto/corelib/io/qtemporaryfile/CMakeLists.txt b/tests/auto/corelib/io/qtemporaryfile/CMakeLists.txt new file mode 100644 index 0000000000..9b453302c9 --- /dev/null +++ b/tests/auto/corelib/io/qtemporaryfile/CMakeLists.txt @@ -0,0 +1,59 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qtemporaryfile Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qtemporaryfile LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +# Collect test data +list(APPEND test_data "tst_qtemporaryfile.cpp") + +qt_internal_add_test(tst_qtemporaryfile + SOURCES + tst_qtemporaryfile.cpp + LIBRARIES + Qt::TestPrivate + TESTDATA ${test_data} +) + +# Resources: +set(qtemporaryfile_resource_files + "resources/test.txt" +) + +qt_internal_add_resource(tst_qtemporaryfile "qtemporaryfile" + PREFIX + "/" + FILES + ${qtemporaryfile_resource_files} +) + + +## Scopes: +##################################################################### + +if(ANDROID) + # Resources: + set(android_testdata_resource_files + "resources/test.txt" + "tst_qtemporaryfile.cpp" + ) + + qt_internal_add_resource(tst_qtemporaryfile "android_testdata" + PREFIX + "/android_testdata" + FILES + ${android_testdata_resource_files} + ) +endif() + +qt_internal_extend_target(tst_qtemporaryfile CONDITION WIN32 + LIBRARIES + shlwapi +) diff --git a/tests/auto/corelib/io/qtemporaryfile/qtemporaryfile.pro b/tests/auto/corelib/io/qtemporaryfile/qtemporaryfile.pro deleted file mode 100644 index 11a5d58dc8..0000000000 --- a/tests/auto/corelib/io/qtemporaryfile/qtemporaryfile.pro +++ /dev/null @@ -1,10 +0,0 @@ -CONFIG += testcase -TARGET = tst_qtemporaryfile -QT = core testlib testlib-private -SOURCES = tst_qtemporaryfile.cpp -TESTDATA += tst_qtemporaryfile.cpp -RESOURCES += qtemporaryfile.qrc - -android:!android-embedded { - RESOURCES += android_testdata.qrc -} diff --git a/tests/auto/corelib/io/qtemporaryfile/qtemporaryfile.qrc b/tests/auto/corelib/io/qtemporaryfile/qtemporaryfile.qrc deleted file mode 100644 index efadde8b4d..0000000000 --- a/tests/auto/corelib/io/qtemporaryfile/qtemporaryfile.qrc +++ /dev/null @@ -1,5 +0,0 @@ -<!DOCTYPE RCC><RCC version="1.0"> -<qresource> - <file>resources/test.txt</file> -</qresource> -</RCC>
\ No newline at end of file diff --git a/tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp b/tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp index 00417fffa0..1419f06f86 100644 --- a/tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp +++ b/tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp @@ -1,47 +1,23 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Copyright (C) 2017 Intel Corporation. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtTest/QtTest> +// Copyright (C) 2021 The Qt Company Ltd. +// Copyright (C) 2017 Intel Corporation. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QTest> #include <qcoreapplication.h> -#include <qstring.h> -#include <qtemporarydir.h> -#include <qtemporaryfile.h> #include <qfile.h> #include <qdatetime.h> #include <qdir.h> #include <qset.h> -#include <qtextcodec.h> +#include <qstandardpaths.h> +#include <qstring.h> +#include <qtemporarydir.h> +#include <qtemporaryfile.h> #include <QtTest/private/qtesthelpers_p.h> #if defined(Q_OS_WIN) -# include <windows.h> +# include <shlwapi.h> +# include <qt_windows.h> #endif #if defined(Q_OS_UNIX) # include <sys/types.h> @@ -51,6 +27,17 @@ # include <unistd.h> // close(2) #endif +#ifdef Q_OS_ANDROID +#include <QDirIterator> +#include <QStandardPaths> +#endif + +#ifdef Q_OS_INTEGRITY +#include "qplatformdefs.h" +#endif + +using namespace Qt::StringLiterals; + class tst_QTemporaryFile : public QObject { Q_OBJECT @@ -77,6 +64,7 @@ private slots: void stressTest(); void rename(); void renameFdLeak(); + void moveToTrash(); void reOpenThroughQFile(); void keepOpenMode(); void resetTemplateAfterError(); @@ -87,6 +75,7 @@ private slots: void QTBUG_4796_data(); void QTBUG_4796(); void guaranteeUnique(); + void stdfilesystem(); private: QTemporaryDir m_temporaryDir; QString m_previousCurrent; @@ -94,6 +83,9 @@ private: void tst_QTemporaryFile::initTestCase() { + QStandardPaths::setTestModeEnabled(true); + QDir().mkpath(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)); + QVERIFY2(m_temporaryDir.isValid(), qPrintable(m_temporaryDir.errorString())); m_previousCurrent = QDir::currentPath(); QVERIFY(QDir::setCurrent(m_temporaryDir.path())); @@ -102,15 +94,15 @@ void tst_QTemporaryFile::initTestCase() QVERIFY(QDir("test-XXXXXX").exists() || QDir().mkdir("test-XXXXXX")); QCoreApplication::setApplicationName("tst_qtemporaryfile"); -#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED) +#ifdef Q_OS_ANDROID QString sourceDir(":/android_testdata/"); QDirIterator it(sourceDir, QDirIterator::Subdirectories); while (it.hasNext()) { - it.next(); - - QFileInfo sourceFileInfo = it.fileInfo(); + QFileInfo sourceFileInfo = it.nextFileInfo(); if (!sourceFileInfo.isDir()) { - QFileInfo destinationFileInfo(QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + QLatin1Char('/') + sourceFileInfo.filePath().mid(sourceDir.length())); + QFileInfo destinationFileInfo( + QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + QLatin1Char('/') + + sourceFileInfo.filePath().mid(sourceDir.length())); if (!destinationFileInfo.exists()) { QVERIFY(QDir().mkpath(destinationFileInfo.path())); @@ -202,6 +194,32 @@ void tst_QTemporaryFile::fileTemplate_data() prefix = "qt_" + hanTestText(); QTest::newRow("Chinese characters") << (prefix + "XXXXXX") << prefix << QString() << QString(); } + +#ifdef Q_OS_WIN + auto tmp = QDir::toNativeSeparators(QDir::tempPath()); + if (PathGetDriveNumber((const wchar_t *) tmp.utf16()) < 0) + return; // skip if we have no drive letter + + tmp.data()[1] = u'$'; + const auto tmpPath = tmp + uR"(\QTBUG-74291.XXXXXX.tmpFile)"_s; + + QTest::newRow("UNC-backslash") + << uR"(\\localhost\)"_s + tmpPath << "QTBUG-74291." + << ".tmpFile" + << ""; + QTest::newRow("UNC-prefix") + << uR"(\\?\UNC\localhost\)"_s + tmpPath << "QTBUG-74291." + << ".tmpFile" + << ""; + QTest::newRow("UNC-slash") + << u"//localhost/"_s + QDir::fromNativeSeparators(tmpPath) << "QTBUG-74291." + << ".tmpFile" + << ""; + QTest::newRow("UNC-prefix-slash") + << uR"(//?/UNC/localhost/)"_s + QDir::fromNativeSeparators(tmpPath) << "QTBUG-74291." + << ".tmpFile" + << ""; +#endif } void tst_QTemporaryFile::fileTemplate() @@ -218,11 +236,11 @@ void tst_QTemporaryFile::fileTemplate() QVERIFY2(file.open(), qPrintable(file.errorString())); QString fileName = QFileInfo(file).fileName(); - if (prefix.length()) - QCOMPARE(fileName.left(prefix.length()), prefix); + if (prefix.size()) + QCOMPARE(fileName.left(prefix.size()), prefix); - if (suffix.length()) - QCOMPARE(fileName.right(suffix.length()), suffix); + if (suffix.size()) + QCOMPARE(fileName.right(suffix.size()), suffix); } @@ -236,7 +254,7 @@ void tst_QTemporaryFile::fileName() QString absoluteTempPath = QDir(tempPath).absolutePath(); QTemporaryFile file; file.setAutoRemove(true); - file.open(); + QVERIFY(file.open()); QString fileName = file.fileName(); QVERIFY2(fileName.contains("/tst_qtemporaryfile."), qPrintable(fileName)); QVERIFY(QFile::exists(fileName)); @@ -351,7 +369,7 @@ void tst_QTemporaryFile::nonWritableCurrentDir() ChdirOnReturn cor(QDir::currentPath()); -#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED) +#ifdef Q_OS_ANDROID QDir::setCurrent("/data"); #else QDir::setCurrent("/home"); @@ -408,7 +426,7 @@ void tst_QTemporaryFile::io() file.reset(); QFile compare(file.fileName()); - compare.open(QIODevice::ReadOnly); + QVERIFY(compare.open(QIODevice::ReadOnly)); QCOMPARE(compare.readAll() , data); QCOMPARE(compare.fileTime(QFile::FileModificationTime), mtime); } @@ -442,7 +460,7 @@ void tst_QTemporaryFile::removeAndReOpen() QString fileName; { QTemporaryFile file; - file.open(); + QVERIFY(file.open()); fileName = file.fileName(); // materializes any unnamed file QVERIFY(QFile::exists(fileName)); @@ -462,7 +480,7 @@ void tst_QTemporaryFile::removeAndReOpen() void tst_QTemporaryFile::removeUnnamed() { QTemporaryFile file; - file.open(); + QVERIFY(file.open()); // we did not call fileName(), so the file name may not have a name QVERIFY(file.remove()); @@ -505,21 +523,25 @@ void tst_QTemporaryFile::resize() void tst_QTemporaryFile::openOnRootDrives() { -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) unsigned int lastErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS); #endif // If it's possible to create a file in the root directory, it // must be possible to create a temp file there too. - foreach (QFileInfo driveInfo, QDir::drives()) { + const auto drives = QDir::drives(); + for (const QFileInfo &driveInfo : drives) { QFile testFile(driveInfo.filePath() + "XXXXXX.txt"); if (testFile.open(QIODevice::ReadWrite)) { testFile.remove(); QTemporaryFile file(driveInfo.filePath() + "XXXXXX.txt"); file.setAutoRemove(true); QVERIFY(file.open()); + + QFileInfo fi(file.fileName()); + QCOMPARE(fi.absoluteDir(), driveInfo.filePath()); } } -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) +#if defined(Q_OS_WIN) SetErrorMode(lastErrorMode); #endif } @@ -570,7 +592,9 @@ void tst_QTemporaryFile::rename() void tst_QTemporaryFile::renameFdLeak() { #if defined(Q_OS_UNIX) && !defined(Q_OS_ANDROID) - const QByteArray sourceFile = QFile::encodeName(QFINDTESTDATA(__FILE__)); + QTemporaryFile file; + QVERIFY(file.open()); + const QByteArray sourceFile = QFile::encodeName(file.fileName()); QVERIFY(!sourceFile.isEmpty()); // Test this on Unix only @@ -606,6 +630,55 @@ void tst_QTemporaryFile::renameFdLeak() #endif } +void tst_QTemporaryFile::moveToTrash() +{ +#if defined(Q_OS_ANDROID) || defined(Q_OS_WEBOS) || defined(Q_OS_VXWORKS) + QSKIP("This platform doesn't implement a trash bin"); +#endif +#ifdef Q_OS_WIN + // QTemporaryFile won't really close the file with close(), so this is + // expected to fail with a sharing violation error. + constexpr bool expectSuccess = false; +#else + constexpr bool expectSuccess = true; +#endif + const QByteArrayView contents = "Hello, World\n"; + + QTemporaryFile f(QDir::homePath() + "/tst_qtemporaryfile.moveToTrash.XXXXXX"); + QString origFileName; + auto cleanup = qScopeGuard([&] { + if (!origFileName.isEmpty()) + QFile::remove(origFileName); + if (QString fn = f.fileName(); !fn.isEmpty() && fn != origFileName) + QFile::remove(fn); + }); + + if (!f.open()) + QSKIP("Failed to create temporary file"); + f.write(contents.data(), contents.size()); + + // we need an actual file name: + // 1) so we can delete it in the clean-up guard in case we fail to trash + // 2) so that the file exists on Linux in the first place (no sense in + // trashing an unnamed file) + origFileName = f.fileName(); + + if (expectSuccess) { + QVERIFY2(f.moveToTrash(), qPrintable(f.errorString())); + QCOMPARE_NE(f.fileName(), origFileName); // must have changed! + QCOMPARE_NE(f.fileName(), QString()); + QVERIFY(!QFile::exists(origFileName)); + QVERIFY(QFile::exists(f.fileName())); + QCOMPARE(QFileInfo(f.fileName()).size(), contents.size()); + } else { + QVERIFY(!f.moveToTrash()); + QCOMPARE(f.fileName(), origFileName); // mustn't have changed! + QCOMPARE_NE(f.error(), QFile::NoError); + QCOMPARE_NE(f.errorString(), "Unknown error"); + QVERIFY(QFile::exists(origFileName)); + } +} + void tst_QTemporaryFile::reOpenThroughQFile() { QByteArray data("abcdefghij"); @@ -774,8 +847,9 @@ void tst_QTemporaryFile::createNativeFile_data() QTest::addColumn<bool>("valid"); QTest::addColumn<QByteArray>("content"); -#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED) - const QString nativeFilePath = QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + QStringLiteral("/resources/test.txt"); +#ifdef Q_OS_ANDROID + const QString nativeFilePath = QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + + QStringLiteral("/resources/test.txt"); #else const QString nativeFilePath = QFINDTESTDATA("resources/test.txt"); #endif @@ -798,7 +872,7 @@ void tst_QTemporaryFile::createNativeFile() QFile f(filePath); if (currentPos != -1) { - f.open(QIODevice::ReadOnly); + QVERIFY(f.open(QIODevice::ReadOnly)); f.seek(currentPos); } QTemporaryFile *tempFile = QTemporaryFile::createNativeFile(f); @@ -841,7 +915,7 @@ void tst_QTemporaryFile::QTBUG_4796() { ~CleanOnReturn() { - Q_FOREACH(QString tempName, tempNames) + for (const QString &tempName : std::as_const(tempNames)) QFile::remove(tempName); } @@ -929,7 +1003,7 @@ void tst_QTemporaryFile::QTBUG_4796() } } - Q_FOREACH(QString const &tempName, cleaner.tempNames) + for (const QString &tempName : std::as_const(cleaner.tempNames)) QVERIFY( !QFile::exists(tempName) ); cleaner.reset(); @@ -943,7 +1017,7 @@ void tst_QTemporaryFile::guaranteeUnique() // First pass. See which filename QTemporaryFile will try first. { QTemporaryFile tmpFile("testFile1.XXXXXX"); - tmpFile.open(); + QVERIFY(tmpFile.open()); takenFileName = tmpFile.fileName(); QVERIFY(QFile::exists(takenFileName)); } @@ -965,5 +1039,49 @@ void tst_QTemporaryFile::guaranteeUnique() QVERIFY(dir.rmdir(takenFileName)); } +void tst_QTemporaryFile::stdfilesystem() +{ +#if !QT_CONFIG(cxx17_filesystem) + QSKIP("std::filesystem not available"); +#else + // ctor + { + std::filesystem::path testFile("testFile1.XXXXXX"); + QTemporaryFile file(testFile); + QCOMPARE(file.fileTemplate(), QtPrivate::fromFilesystemPath(testFile)); + } + // rename + { + QTemporaryFile file("testFile1.XXXXXX"); + QVERIFY(file.open()); + QByteArray payload = "abc123 I am a string"; + file.write(payload); + QVERIFY(file.rename(std::filesystem::path("./test"))); + file.close(); + + QFile f(u"./test"_s); + QVERIFY(f.exists()); + QVERIFY(f.open(QFile::ReadOnly)); + QCOMPARE(f.readAll(), payload); + } + // createNativeFile + { + std::filesystem::path resource(":/resources/test.txt"); + std::unique_ptr<QTemporaryFile> tmp(QTemporaryFile::createNativeFile(resource)); + QVERIFY(tmp); + QFile file(resource); + QVERIFY(file.open(QFile::ReadOnly)); + QCOMPARE(tmp->readAll(), file.readAll()); + } + // setFileTemplate + { + QTemporaryFile file; + std::filesystem::path testFile("testFile1.XXXXXX"); + file.setFileTemplate(testFile); + QCOMPARE(file.fileTemplate(), QtPrivate::fromFilesystemPath(testFile)); + } +#endif +} + QTEST_MAIN(tst_QTemporaryFile) #include "tst_qtemporaryfile.moc" diff --git a/tests/auto/corelib/io/qurl/CMakeLists.txt b/tests/auto/corelib/io/qurl/CMakeLists.txt new file mode 100644 index 0000000000..d105b323df --- /dev/null +++ b/tests/auto/corelib/io/qurl/CMakeLists.txt @@ -0,0 +1,28 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qurl Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qurl LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +qt_internal_add_test(tst_qurl + SOURCES + tst_qurl.cpp + LIBRARIES + Qt::Concurrent + Qt::TestPrivate +) + +## Scopes: +##################################################################### + +qt_internal_extend_target(tst_qurl CONDITION APPLE + SOURCES + tst_qurl_mac.mm +) diff --git a/tests/auto/corelib/io/qurl/idna-test.c b/tests/auto/corelib/io/qurl/idna-test.c index 035d3e1c89..856c40c7b0 100644 --- a/tests/auto/corelib/io/qurl/idna-test.c +++ b/tests/auto/corelib/io/qurl/idna-test.c @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only struct idna { diff --git a/tests/auto/corelib/io/qurl/qurl.pro b/tests/auto/corelib/io/qurl/qurl.pro deleted file mode 100644 index c046c75522..0000000000 --- a/tests/auto/corelib/io/qurl/qurl.pro +++ /dev/null @@ -1,6 +0,0 @@ -CONFIG += testcase -TARGET = tst_qurl -QT = core testlib concurrent -SOURCES = tst_qurl.cpp - -mac: OBJECTIVE_SOURCES += tst_qurl_mac.mm diff --git a/tests/auto/corelib/io/qurl/tst_qurl.cpp b/tests/auto/corelib/io/qurl/tst_qurl.cpp index ef4325d2ea..2024968435 100644 --- a/tests/auto/corelib/io/qurl/tst_qurl.cpp +++ b/tests/auto/corelib/io/qurl/tst_qurl.cpp @@ -1,44 +1,23 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Copyright (C) 2016 Intel Corporation. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#define QT_DEPRECATED -#define QT_DISABLE_DEPRECATED_BEFORE 0 +// Copyright (C) 2016 The Qt Company Ltd. +// Copyright (C) 2016 Intel Corporation. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + #include <qurl.h> -#include <QtTest/QtTest> #include <QtCore/QDebug> +#include <QTest> +#include <QtTest/private/qcomparisontesthelper_p.h> +#include <QDirIterator> + #include <qcoreapplication.h> #include <qfileinfo.h> -#include <qtextcodec.h> #include <qmap.h> +#include <QtTest/private/qemulationdetector_p.h> + +using namespace Qt::StringLiterals; + Q_DECLARE_METATYPE(QUrl::FormattingOptions) class tst_QUrl : public QObject @@ -48,13 +27,12 @@ class tst_QUrl : public QObject private slots: void initTestCase(); void cleanupTestCase(); - void effectiveTLDs_data(); - void effectiveTLDs(); void getSetCheck(); void constructing(); void hashInPath(); void unc(); void assignment(); + void orderingCompiles(); void comparison(); void comparison2_data(); void comparison2(); @@ -70,6 +48,8 @@ private slots: void toString_PreferLocalFile(); void toString_constructed_data(); void toString_constructed(); + void toDisplayString_PreferLocalFile_data(); + void toDisplayString_PreferLocalFile(); void toAndFromStringList_data(); void toAndFromStringList(); void isParentOf_data(); @@ -311,6 +291,11 @@ void tst_QUrl::assignment() QCOMPARE(url, copy); } +void tst_QUrl::orderingCompiles() +{ + QTestPrivate::testAllComparisonOperatorsCompile<QUrl>(); +} + void tst_QUrl::comparison() { QUrl url1("http://qt-project.org/"); @@ -459,18 +444,19 @@ void tst_QUrl::comparison2() QFETCH(QUrl, url2); QFETCH(int, ordering); + const Qt::weak_ordering expectedOrdering = [&ordering] { + if (ordering > 0) + return Qt::weak_ordering::greater; + else if (ordering < 0) + return Qt::weak_ordering::less; + return Qt::weak_ordering::equivalent; + }(); + QCOMPARE(url1.toString() == url2.toString(), ordering == 0); - QCOMPARE(url1 == url2, ordering == 0); - QCOMPARE(url1 != url2, ordering != 0); + QT_TEST_ALL_COMPARISON_OPS(url1, url2, expectedOrdering); if (ordering == 0) QCOMPARE(qHash(url1), qHash(url2)); - QCOMPARE(url1 < url2, ordering < 0); - QCOMPARE(!(url1 < url2), ordering >= 0); - - QCOMPARE(url2 < url1, ordering > 0); - QCOMPARE(!(url2 < url1), ordering <= 0); - // redundant checks (the above should catch these) QCOMPARE(url1 < url2 || url2 < url1, ordering != 0); QVERIFY(!(url1 < url2 && url2 < url1)); @@ -1112,7 +1098,7 @@ void tst_QUrl::toAndFromStringList() QFETCH(QStringList, strings); const QList<QUrl> urls = QUrl::fromStringList(strings); - QCOMPARE(urls.count(), strings.count()); + QCOMPARE(urls.size(), strings.size()); const QStringList converted = QUrl::toStringList(urls); QCOMPARE(converted, strings); } @@ -1210,6 +1196,32 @@ void tst_QUrl::toString_constructed() QCOMPARE(url.toEncoded(formattingOptions), asEncoded); } +void tst_QUrl::toDisplayString_PreferLocalFile_data() +{ + QTest::addColumn<QUrl>("url"); + QTest::addColumn<QString>("string"); + + QTest::newRow("basic") << QUrl::fromLocalFile("/home/charles/foomoo") + << QString::fromLatin1("/home/charles/foomoo"); + QTest::newRow("with%") << QUrl::fromLocalFile("/home/charles/foo%20moo") + << QString::fromLatin1("/home/charles/foo%20moo"); + QTest::newRow("non-local") << QUrl("file://host/foo") + << QString::fromLatin1("//host/foo"); + QTest::newRow("query-and-fragment") << QUrl("file://user:pass@example.org/a?b=c%20d%23e#frag%23ment") + << QString::fromLatin1("file://user@example.org/a?b=c d%23e#frag%23ment"); + QTest::newRow("http") << QUrl("http://user:pass@example.org/a?b=c%20d%23e#frag%23ment") + << QString::fromLatin1("http://user@example.org/a?b=c d%23e#frag%23ment"); +} + +void tst_QUrl::toDisplayString_PreferLocalFile() +{ + QFETCH(QUrl, url); + QFETCH(QString, string); + + if (url.isLocalFile() && url.query().isEmpty() && url.fragment().isEmpty()) + QCOMPARE(url.toLocalFile(), string); + QCOMPARE(url.toDisplayString(QUrl::PreferLocalFile), string); +} void tst_QUrl::isParentOf() { @@ -1226,38 +1238,43 @@ void tst_QUrl::toLocalFile_data() QTest::addColumn<QString>("theUrl"); QTest::addColumn<QString>("theFile"); - QTest::newRow("data0") << QString::fromLatin1("file:/a.txt") << QString::fromLatin1("/a.txt"); - QTest::newRow("data4") << QString::fromLatin1("file:///a.txt") << QString::fromLatin1("/a.txt"); - QTest::newRow("data4a") << QString::fromLatin1("webdavs://somewebdavhost/somedir/somefile") + QTest::newRow("file:/") << QString::fromLatin1("file:/a.txt") << QString::fromLatin1("/a.txt"); + QTest::newRow("file:///") << QString::fromLatin1("file:///a.txt") << QString::fromLatin1("/a.txt"); + QTest::newRow("file:////") << QString::fromLatin1("file:////somehost/somedir/somefile") << QString::fromLatin1("//somehost/somedir/somefile"); + QTest::newRow("FILE:/") << QString::fromLatin1("FILE:/a.txt") << QString::fromLatin1("/a.txt"); + + QTest::newRow("path-delimiter") << QString::fromLatin1("file:///Mambo <%235>.mp3") << QString::fromLatin1("/Mambo <#5>.mp3"); + QTest::newRow("path-percent") << QString::fromLatin1("file:///a%25.txt") << QString::fromLatin1("/a%.txt"); + QTest::newRow("path-percent-percent") << QString::fromLatin1("file:///a%25%25.txt") << QString::fromLatin1("/a%%.txt"); + QTest::newRow("path-percent-a-percent") << QString::fromLatin1("file:///a%25a%25.txt") << QString::fromLatin1("/a%a%.txt"); + QTest::newRow("path-control-char") << QString::fromLatin1("file:///a%1f.txt") << QString::fromLatin1("/a\x1f.txt"); + QTest::newRow("path-percent-hex-hex") << QString::fromLatin1("file:///%2580.txt") << QString::fromLatin1("/%80.txt"); + + QTest::newRow("webdavs") << QString::fromLatin1("webdavs://somewebdavhost/somedir/somefile") #ifdef Q_OS_WIN // QTBUG-42346, WebDAV is visible as local file on Windows only. - << QString::fromLatin1("//somewebdavhost@SSL/somedir/somefile"); + << QString::fromLatin1("//somewebdavhost@SSL/somedir/somefile"); #else - << QString(); + << QString(); #endif #ifdef Q_OS_WIN - QTest::newRow("data5") << QString::fromLatin1("file:///c:/a.txt") << QString::fromLatin1("c:/a.txt"); + QTest::newRow("windows-drive-absolute") << QString::fromLatin1("file:///c:/a.txt") << QString::fromLatin1("c:/a.txt"); #else - QTest::newRow("data5") << QString::fromLatin1("file:///c:/a.txt") << QString::fromLatin1("/c:/a.txt"); + QTest::newRow("windows-drive-absolute") << QString::fromLatin1("file:///c:/a.txt") << QString::fromLatin1("/c:/a.txt"); #endif - QTest::newRow("data6") << QString::fromLatin1("file://somehost/somedir/somefile") << QString::fromLatin1("//somehost/somedir/somefile"); - QTest::newRow("data7") << QString::fromLatin1("file://somehost/") << QString::fromLatin1("//somehost/"); - QTest::newRow("data8") << QString::fromLatin1("file://somehost") << QString::fromLatin1("//somehost"); - QTest::newRow("data9") << QString::fromLatin1("file:////somehost/somedir/somefile") << QString::fromLatin1("//somehost/somedir/somefile"); - QTest::newRow("data10") << QString::fromLatin1("FILE:/a.txt") << QString::fromLatin1("/a.txt"); - QTest::newRow("data11") << QString::fromLatin1("file:///Mambo <%235>.mp3") << QString::fromLatin1("/Mambo <#5>.mp3"); - QTest::newRow("data12") << QString::fromLatin1("file:///a%25.txt") << QString::fromLatin1("/a%.txt"); - QTest::newRow("data13") << QString::fromLatin1("file:///a%25%25.txt") << QString::fromLatin1("/a%%.txt"); - QTest::newRow("data14") << QString::fromLatin1("file:///a%25a%25.txt") << QString::fromLatin1("/a%a%.txt"); - QTest::newRow("data15") << QString::fromLatin1("file:///a%1f.txt") << QString::fromLatin1("/a\x1f.txt"); - QTest::newRow("data16") << QString::fromLatin1("file:///%2580.txt") << QString::fromLatin1("/%80.txt"); + QTest::newRow("windows-unc-path") << QString::fromLatin1("file://somehost/somedir/somefile") << QString::fromLatin1("//somehost/somedir/somefile"); + QTest::newRow("windows-unc-root") << QString::fromLatin1("file://somehost/") << QString::fromLatin1("//somehost/"); + QTest::newRow("windows-unc-nopath") << QString::fromLatin1("file://somehost") << QString::fromLatin1("//somehost"); + QTest::newRow("windows-extlen-path") << QString::fromLatin1("file:////%3F/somedir/somefile") << QString::fromLatin1("//?/somedir/somefile"); + QTest::newRow("windows-wsl-path") << QString::fromLatin1("file:////wsl$/somedir/somefile") << QString::fromLatin1("//wsl$/somedir/somefile"); + QTest::newRow("windows-device-path") << QString::fromLatin1("file:////./somedir/somefile") << QString::fromLatin1("//./somedir/somefile"); // and some that result in empty (i.e., not local) - QTest::newRow("xdata0") << QString::fromLatin1("/a.txt") << QString(); - QTest::newRow("xdata1") << QString::fromLatin1("//a.txt") << QString(); - QTest::newRow("xdata2") << QString::fromLatin1("///a.txt") << QString(); - QTest::newRow("xdata3") << QString::fromLatin1("foo:/a.txt") << QString(); - QTest::newRow("xdata4") << QString::fromLatin1("foo://a.txt") << QString(); - QTest::newRow("xdata5") << QString::fromLatin1("foo:///a.txt") << QString(); + QTest::newRow("noscheme-absolute") << QString::fromLatin1("/a.txt") << QString(); + QTest::newRow("noscheme-host") << QString::fromLatin1("//a.txt") << QString(); + QTest::newRow("noscheme-host-path") << QString::fromLatin1("///a.txt") << QString(); + QTest::newRow("fooscheme-absolute") << QString::fromLatin1("foo:/a.txt") << QString(); + QTest::newRow("fooscheme-host") << QString::fromLatin1("foo://a.txt") << QString(); + QTest::newRow("fooscheme-host-path") << QString::fromLatin1("foo:///a.txt") << QString(); } void tst_QUrl::toLocalFile() @@ -1276,21 +1293,57 @@ void tst_QUrl::fromLocalFile_data() QTest::addColumn<QString>("theUrl"); QTest::addColumn<QString>("thePath"); - QTest::newRow("data0") << QString::fromLatin1("/a.txt") << QString::fromLatin1("file:///a.txt") << QString::fromLatin1("/a.txt"); - QTest::newRow("data1") << QString::fromLatin1("a.txt") << QString::fromLatin1("file:a.txt") << QString::fromLatin1("a.txt"); - QTest::newRow("data2") << QString::fromLatin1("/a/b.txt") << QString::fromLatin1("file:///a/b.txt") << QString::fromLatin1("/a/b.txt"); - QTest::newRow("data3") << QString::fromLatin1("c:/a.txt") << QString::fromLatin1("file:///c:/a.txt") << QString::fromLatin1("/c:/a.txt"); - QTest::newRow("data4") << QString::fromLatin1("//somehost/somedir/somefile") << QString::fromLatin1("file://somehost/somedir/somefile") - << QString::fromLatin1("/somedir/somefile"); - QTest::newRow("data4a") << QString::fromLatin1("//somewebdavhost@SSL/somedir/somefile") - << QString::fromLatin1("webdavs://somewebdavhost/somedir/somefile") - << QString::fromLatin1("/somedir/somefile"); - QTest::newRow("data5") << QString::fromLatin1("//somehost") << QString::fromLatin1("file://somehost") - << QString::fromLatin1(""); - QTest::newRow("data6") << QString::fromLatin1("//somehost/") << QString::fromLatin1("file://somehost/") - << QString::fromLatin1("/"); - QTest::newRow("data7") << QString::fromLatin1("/Mambo <#5>.mp3") << QString::fromLatin1("file:///Mambo <%235>.mp3") - << QString::fromLatin1("/Mambo <#5>.mp3"); + QTest::newRow("absolute-path") << QString::fromLatin1("/a.txt") << QString::fromLatin1("file:///a.txt") << QString::fromLatin1("/a.txt"); + QTest::newRow("relative-path") << QString::fromLatin1("a.txt") << QString::fromLatin1("file:a.txt") << QString::fromLatin1("a.txt"); + QTest::newRow("absolute-two-path") << QString::fromLatin1("/a/b.txt") << QString::fromLatin1("file:///a/b.txt") << QString::fromLatin1("/a/b.txt"); + QTest::newRow("path-delimiters") << QString::fromLatin1("/Mambo <#5>.mp3") << QString::fromLatin1("file:///Mambo <%235>.mp3") + << QString::fromLatin1("/Mambo <#5>.mp3"); + + // Windows absolute details + QTest::newRow("windows-drive") << QString::fromLatin1("c:/a.txt") << QString::fromLatin1("file:///c:/a.txt") << QString::fromLatin1("/c:/a.txt"); + + // Windows UNC paths + for (const char *suffix : { "", "/", "/somedir/somefile" }) { + const char *pathDescription = + strlen(suffix) == 0 ? "nopath" : + strlen(suffix) > 1 ? "path" : "root"; + + QTest::addRow("windows-unc-%s", pathDescription) + << QString("//somehost") + suffix + << QString("file://somehost") + suffix + << QString(suffix); +#ifdef Q_OS_WIN32 + // debackslashification only happens on Windows + QString suffixWithBackslashes(suffix); + suffixWithBackslashes.replace('/', '\\'); + + QTest::addRow("windows-backslash-unc-%s", pathDescription) + << QString(QString("\\\\somehost") + suffixWithBackslashes) + << QString("file://somehost") + suffix + << QString(suffix); + QTest::addRow("windows-backslash-extlen-%s", pathDescription) + << QString(QString("\\\\?") + suffixWithBackslashes) + << QString("file:////%3F") + suffix + << QString("//?") + suffix; +#endif + QTest::addRow("windows-extlen-%s", pathDescription) + << QString("//?") + suffix + << QString("file:////%3F") + suffix + << QString("//?") + suffix; + QTest::addRow("windows-wsl-%s", pathDescription) + << QString("//wsl$") + suffix + << QString("file:////wsl$") + suffix + << QString("//wsl$") + suffix; + QTest::addRow("windows-device--%s", pathDescription) + << QString("//.") + suffix + << QString("file:////.") + suffix + << QString("//.") + suffix; + } + + QTest::newRow("windows-webdav") + << QString::fromLatin1("//somewebdavhost@SSL/somedir/somefile") + << QString::fromLatin1("webdavs://somewebdavhost/somedir/somefile") + << QString::fromLatin1("/somedir/somefile"); } void tst_QUrl::fromLocalFile() @@ -1311,19 +1364,19 @@ void tst_QUrl::fromLocalFileNormalize_data() QTest::addColumn<QString>("theUrl"); QTest::addColumn<QString>("urlWithNormalizedPath"); - QTest::newRow("data0") << QString::fromLatin1("/a.txt") << QString::fromLatin1("file:///a.txt") << QString::fromLatin1("file:///a.txt"); - QTest::newRow("data1") << QString::fromLatin1("a.txt") << QString::fromLatin1("file:a.txt") << QString::fromLatin1("file:a.txt"); - QTest::newRow("data8") << QString::fromLatin1("/a%.txt") << QString::fromLatin1("file:///a%25.txt") - << QString::fromLatin1("file:///a%25.txt"); - QTest::newRow("data9") << QString::fromLatin1("/a%25.txt") << QString::fromLatin1("file:///a%2525.txt") - << QString::fromLatin1("file:///a%2525.txt"); - QTest::newRow("data10") << QString::fromLatin1("/%80.txt") << QString::fromLatin1("file:///%2580.txt") - << QString::fromLatin1("file:///%2580.txt"); - QTest::newRow("data11") << QString::fromLatin1("./a.txt") << QString::fromLatin1("file:./a.txt") << QString::fromLatin1("file:a.txt"); - QTest::newRow("data12") << QString::fromLatin1("././a.txt") << QString::fromLatin1("file:././a.txt") << QString::fromLatin1("file:a.txt"); - QTest::newRow("data13") << QString::fromLatin1("b/../a.txt") << QString::fromLatin1("file:b/../a.txt") << QString::fromLatin1("file:a.txt"); - QTest::newRow("data14") << QString::fromLatin1("/b/../a.txt") << QString::fromLatin1("file:///b/../a.txt") << QString::fromLatin1("file:///a.txt"); - QTest::newRow("data15") << QString::fromLatin1("/b/.") << QString::fromLatin1("file:///b/.") << QString::fromLatin1("file:///b"); + QTest::newRow("absolute-path") << QString::fromLatin1("/a.txt") << QString::fromLatin1("file:///a.txt") << QString::fromLatin1("file:///a.txt"); + QTest::newRow("relative-path") << QString::fromLatin1("a.txt") << QString::fromLatin1("file:a.txt") << QString::fromLatin1("file:a.txt"); + QTest::newRow("percent") << QString::fromLatin1("/a%.txt") << QString::fromLatin1("file:///a%25.txt") + << QString::fromLatin1("file:///a%25.txt"); + QTest::newRow("percent25") << QString::fromLatin1("/a%25.txt") << QString::fromLatin1("file:///a%2525.txt") + << QString::fromLatin1("file:///a%2525.txt"); + QTest::newRow("percent80") << QString::fromLatin1("/%80.txt") << QString::fromLatin1("file:///%2580.txt") + << QString::fromLatin1("file:///%2580.txt"); + QTest::newRow("relative-dot") << QString::fromLatin1("./a.txt") << QString::fromLatin1("file:./a.txt") << QString::fromLatin1("file:a.txt"); + QTest::newRow("relative-dot-dot") << QString::fromLatin1("././a.txt") << QString::fromLatin1("file:././a.txt") << QString::fromLatin1("file:a.txt"); + QTest::newRow("relative-path-dotdot") << QString::fromLatin1("b/../a.txt") << QString::fromLatin1("file:b/../a.txt") << QString::fromLatin1("file:a.txt"); + QTest::newRow("absolute-path-dotdot") << QString::fromLatin1("/b/../a.txt") << QString::fromLatin1("file:///b/../a.txt") << QString::fromLatin1("file:///a.txt"); + QTest::newRow("absolute-path-dot") << QString::fromLatin1("/b/.") << QString::fromLatin1("file:///b/.") << QString::fromLatin1("file:///b"); } void tst_QUrl::fromLocalFileNormalize() @@ -1342,7 +1395,7 @@ void tst_QUrl::fromLocalFileNormalize() void tst_QUrl::macTypes() { -#ifndef Q_OS_MAC +#ifndef Q_OS_DARWIN QSKIP("This is a Mac-only test"); #else extern void tst_QUrl_mactypes(); // in tst_qurl_mac.mm @@ -1803,8 +1856,8 @@ void tst_QUrl::ipvfuture_data() QTest::newRow("non-hex-version") << "x://[vz.1234]" << false; QTest::newRow("digit-ver") << "x://[v7.1]" << true << "x://[v7.1]"; - QTest::newRow("lowercase-hex-ver") << "x://[va.1]" << true << "x://[vA.1]"; - QTest::newRow("lowercase-hex-ver") << "x://[vA.1]" << true << "x://[vA.1]"; + QTest::newRow("lowercase-hex-ver-lower") << "x://[va.1]" << true << "x://[vA.1]"; + QTest::newRow("lowercase-hex-ver-upper") << "x://[vA.1]" << true << "x://[vA.1]"; QTest::newRow("data-digits") << "x://[v7.1234]" << true << "x://[v7.1234]"; QTest::newRow("data-unreserved") << "x://[v7.hello~-WORLD_.com]" << true << "x://[v7.hello~-WORLD_.com]"; @@ -1852,6 +1905,8 @@ void tst_QUrl::ipv6_data() QTest::addColumn<bool>("isValid"); QTest::addColumn<QString>("output"); + QTest::newRow("empty") << "//[]" << false << ""; + QTest::newRow("case 1") << QString::fromLatin1("//[56:56:56:56:56:56:56:56]") << true << "//[56:56:56:56:56:56:56:56]"; QTest::newRow("case 2") << QString::fromLatin1("//[::56:56:56:56:56:56:56]") << true @@ -2014,8 +2069,9 @@ void tst_QUrl::hasQuery() void tst_QUrl::nameprep() { - QUrl url(QString::fromUtf8("http://www.fu""\xc3""\x9f""ball.de/")); - QCOMPARE(url.toString(), QString::fromLatin1("http://www.fussball.de/")); + // U+FB01 LATIN SMALL LIGATURE FI + QUrl url(u"http://www.\uFB01le.de/"_s); + QCOMPARE(url.toString(), QStringLiteral(u"http://www.file.de/")); } void tst_QUrl::isValid() @@ -2078,14 +2134,15 @@ void tst_QUrl::isValid() } { - QUrl url = QUrl::fromEncoded("foo://%f0%9f%93%99.example.la/g"); + // U+1F100 DIGIT ZERO FULL STOP + QUrl url = QUrl::fromEncoded("foo://%f0%9f%84%80.example.la/g"); QVERIFY(!url.isValid()); QVERIFY(url.toString().isEmpty()); QCOMPARE(url.path(), QString("/g")); - url.setHost("%f0%9f%93%99.example.la/"); + url.setHost("%f0%9f%84%80.example.la/"); QVERIFY(!url.isValid()); QVERIFY(url.toString().isEmpty()); - url.setHost("\xf0\x9f\x93\x99.example.la/"); + url.setHost("\xf0\x9f\x84\x80.example.la/"); QVERIFY(!url.isValid()); QVERIFY(url.toString().isEmpty()); QVERIFY2(url.errorString().contains("Invalid hostname"), @@ -3120,8 +3177,10 @@ void tst_QUrl::fromUserInput_data() QTest::newRow("misc-1") << "user:pass@domain.com" << authUrl; // FTP with double slashes in path - QTest::newRow("ftp-double-slash-1") << "ftp.example.com//path" << QUrl("ftp://ftp.example.com/%2Fpath"); - QTest::newRow("ftp-double-slash-1") << "ftp://ftp.example.com//path" << QUrl("ftp://ftp.example.com/%2Fpath"); + QTest::newRow("ftp-double-slash-no-scheme") + << "ftp.example.com//path" << QUrl("ftp://ftp.example.com/%2Fpath"); + QTest::newRow("ftp-double-slash-scheme") + << "ftp://ftp.example.com//path" << QUrl("ftp://ftp.example.com/%2Fpath"); } void tst_QUrl::fromUserInput() @@ -3172,12 +3231,10 @@ void tst_QUrl::fromUserInputWithCwd_data() QTest::newRow(QByteArray(fileName) + "-in-dot") << fileName << QStringLiteral(".") << url << url; } -#ifndef Q_OS_WINRT // WinRT cannot cd outside current / sandbox QDir parent(base); QVERIFY(parent.cdUp()); QUrl parentUrl = QUrl::fromLocalFile(parent.path()); QTest::newRow("dotdot") << ".." << base << parentUrl << parentUrl; -#endif QTest::newRow("nonexisting") << "nonexisting" << base << QUrl("http://nonexisting") << QUrl::fromLocalFile(base + "/nonexisting"); QTest::newRow("short-url") << "example.org" << base << QUrl("http://example.org") << QUrl::fromLocalFile(base + "/example.org"); @@ -3387,61 +3444,6 @@ void tst_QUrl::acceptEmptyAuthoritySegments() QCOMPARE(QUrl(file_uni_bar, QUrl::StrictMode).toString(), file_triple_bar); } -void tst_QUrl::effectiveTLDs_data() -{ - // See also: tst_QNetworkCookieJar::setCookiesFromUrl(). - // in tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp - QTest::addColumn<QUrl>("domain"); - QTest::addColumn<QString>("TLD"); - // TODO: autogenerate test-cases from: - // https://raw.githubusercontent.com/publicsuffix/list/master/tests/test_psl.txt - // checkPublicSuffix(domain, tail) appears in the list if - // either tail is null and domain is public or - // tail is the "registrable" part of domain; i.e. its minimal non-public tail. - - QTest::newRow("yes0") << QUrl::fromEncoded("http://test.co.uk") << ".co.uk"; - QTest::newRow("yes1") << QUrl::fromEncoded("http://test.com") << ".com"; - QTest::newRow("yes2") << QUrl::fromEncoded("http://www.test.de") << ".de"; - QTest::newRow("yes3") << QUrl::fromEncoded("http://test.ulm.museum") << ".ulm.museum"; - QTest::newRow("yes4") << QUrl::fromEncoded("http://www.com.krodsherad.no") << ".krodsherad.no"; - QTest::newRow("yes5") << QUrl::fromEncoded("http://www.co.uk.1.bg") << ".1.bg"; - QTest::newRow("yes6") << QUrl::fromEncoded("http://www.com.com.cn") << ".com.cn"; - QTest::newRow("yes7") << QUrl::fromEncoded("http://www.test.org.ws") << ".org.ws"; - QTest::newRow("yes9") << QUrl::fromEncoded("http://www.com.co.uk.wallonie.museum") << ".wallonie.museum"; - QTest::newRow("yes10") << QUrl::fromEncoded("http://www.com.evje-og-hornnes.no") << ".evje-og-hornnes.no"; - QTest::newRow("yes11") << QUrl::fromEncoded("http://www.bla.kamijima.ehime.jp") << ".kamijima.ehime.jp"; - QTest::newRow("yes12") << QUrl::fromEncoded("http://www.bla.kakuda.miyagi.jp") << ".kakuda.miyagi.jp"; - QTest::newRow("yes13") << QUrl::fromEncoded("http://mypage.betainabox.com") << ".betainabox.com"; - QTest::newRow("yes14") << QUrl::fromEncoded("http://mypage.rhcloud.com") << ".rhcloud.com"; - QTest::newRow("yes15") << QUrl::fromEncoded("http://mypage.int.az") << ".int.az"; - QTest::newRow("yes16") << QUrl::fromEncoded("http://anything.pagespeedmobilizer.com") << ".pagespeedmobilizer.com"; - QTest::newRow("yes17") << QUrl::fromEncoded("http://anything.eu-central-1.compute.amazonaws.com") << ".eu-central-1.compute.amazonaws.com"; - QTest::newRow("yes18") << QUrl::fromEncoded("http://anything.ltd.hk") << ".ltd.hk"; - QTest::newRow("trentino.it") - << QUrl::fromEncoded("http://any.thing.trentino.it") << ".trentino.it"; - QTest::newRow("net.ni") << QUrl::fromEncoded("http://test.net.ni") << ".net.ni"; - QTest::newRow("dyn.cosidns.de") - << QUrl::fromEncoded("http://test.dyn.cosidns.de") << ".dyn.cosidns.de"; - QTest::newRow("freeddns.org") - << QUrl::fromEncoded("http://test.freeddns.org") << ".freeddns.org"; - QTest::newRow("app.os.stg.fedoraproject.org") - << QUrl::fromEncoded("http://test.app.os.stg.fedoraproject.org") - << ".app.os.stg.fedoraproject.org"; - QTest::newRow("development.run") << QUrl::fromEncoded("http://test.development.run") << ".development.run"; - QTest::newRow("crafting.xyz") << QUrl::fromEncoded("http://test.crafting.xyz") << ".crafting.xyz"; - QTest::newRow("nym.ie") << QUrl::fromEncoded("http://shamus.nym.ie") << ".nym.ie"; - QTest::newRow("vapor.cloud") << QUrl::fromEncoded("http://test.vapor.cloud") << ".vapor.cloud"; - QTest::newRow("official.academy") << QUrl::fromEncoded("http://acredited.official.academy") << ".official.academy"; -} - -void tst_QUrl::effectiveTLDs() -{ - QFETCH(QUrl, domain); - QFETCH(QString, TLD); - QCOMPARE(domain.topLevelDomain(QUrl::PrettyDecoded), TLD); - QCOMPARE(domain.topLevelDomain(QUrl::FullyDecoded), TLD); -} - void tst_QUrl::lowercasesScheme() { QUrl url; @@ -3774,13 +3776,13 @@ void tst_QUrl::setComponents_data() << PrettyDecoded << QString() << "foo:/path"; QTest::newRow("host-empty") << QUrl("foo://example.com/path") << int(Host) << "" << Tolerant << true - << PrettyDecoded << QString() << "foo:///path"; + << PrettyDecoded << "" << "foo:///path"; QTest::newRow("authority-null") << QUrl("foo://example.com/path") << int(Authority) << QString() << Tolerant << true << PrettyDecoded << QString() << "foo:/path"; QTest::newRow("authority-empty") << QUrl("foo://example.com/path") << int(Authority) << "" << Tolerant << true - << PrettyDecoded << QString() << "foo:///path"; + << PrettyDecoded << "" << "foo:///path"; QTest::newRow("query-null") << QUrl("http://example.com/?q=foo") << int(Query) << QString() << Tolerant << true << PrettyDecoded << QString() << "http://example.com/"; @@ -3807,106 +3809,106 @@ void tst_QUrl::setComponents_data() QTest::newRow("invalid-username-1") << QUrl("http://example.com") << int(UserName) << "{}" << Strict << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << QString() << QString(); QTest::newRow("invalid-username-2") << QUrl("http://example.com") << int(UserName) << "foo/bar" << Strict << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << QString() << QString(); QTest::newRow("invalid-username-3") << QUrl("http://example.com") << int(UserName) << "foo:bar" << Strict << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << QString() << QString(); QTest::newRow("invalid-password-1") << QUrl("http://example.com") << int(Password) << "{}" << Strict << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << QString() << QString(); QTest::newRow("invalid-password-2") << QUrl("http://example.com") << int(Password) << "foo/bar" << Strict << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << QString() << QString(); QTest::newRow("invalid-password-3") << QUrl("http://example.com") << int(Password) << "foo:bar" << Strict << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << QString() << QString(); QTest::newRow("invalid-userinfo-1") << QUrl("http://example.com") << int(UserInfo) << "{}" << Strict << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << QString() << QString(); QTest::newRow("invalid-userinfo-2") << QUrl("http://example.com") << int(UserInfo) << "foo/bar" << Strict << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << QString() << QString(); QTest::newRow("invalid-host-1") << QUrl("http://example.com") << int(Host) << "-not-valid-" << Tolerant << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << QString() << QString(); QTest::newRow("invalid-host-2") << QUrl("http://example.com") << int(Host) << "%31%30.%30.%30.%31" << Strict << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << QString() << QString(); QTest::newRow("invalid-authority-1") << QUrl("http://example.com") << int(Authority) << "-not-valid-" << Tolerant << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << "" << QString(); QTest::newRow("invalid-authority-2") << QUrl("http://example.com") << int(Authority) << "%31%30.%30.%30.%31" << Strict << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << "" << QString(); QTest::newRow("invalid-path-0") << QUrl("http://example.com") << int(Path) << "{}" << Strict << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << QString() << QString(); QTest::newRow("invalid-query-1") << QUrl("http://example.com") << int(Query) << "{}" << Strict << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << QString() << QString(); QTest::newRow("invalid-fragment-1") << QUrl("http://example.com") << int(Fragment) << "{}" << Strict << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << QString() << QString(); // these test cases are "compound invalid": // they produces isValid == false, but the original is still available QTest::newRow("invalid-path-1") << QUrl("/relative") << int(Path) << "c:/" << Strict << false - << PrettyDecoded << "c:/" << ""; + << PrettyDecoded << "c:/" << QString(); QTest::newRow("invalid-path-2") << QUrl("http://example.com") << int(Path) << "relative" << Strict << false - << PrettyDecoded << "relative" << ""; + << PrettyDecoded << "relative" << QString(); QTest::newRow("invalid-path-3") << QUrl("trash:/") << int(Path) << "//path" << Tolerant << false - << PrettyDecoded << "//path" << ""; + << PrettyDecoded << "//path" << QString(); // -- test bad percent encoding -- // unnecessary to test the scheme, since percent-decoding is not performed in it; // see tests above QTest::newRow("bad-percent-username") << QUrl("http://example.com") << int(UserName) << "bar%foo" << Strict << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << QString() << QString(); QTest::newRow("bad-percent-password") << QUrl("http://user@example.com") << int(Password) << "bar%foo" << Strict << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << QString() << QString(); QTest::newRow("bad-percent-userinfo-1") << QUrl("http://example.com") << int(UserInfo) << "bar%foo" << Strict << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << QString() << QString(); QTest::newRow("bad-percent-userinfo-2") << QUrl("http://example.com") << int(UserInfo) << "bar%:foo" << Strict << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << QString() << QString(); QTest::newRow("bad-percent-userinfo-3") << QUrl("http://example.com") << int(UserInfo) << "bar:%foo" << Strict << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << QString() << QString(); QTest::newRow("bad-percent-authority-1") << QUrl("http://example.com") << int(Authority) << "bar%foo@example.org" << Strict << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << QString() << QString(); QTest::newRow("bad-percent-authority-2") << QUrl("http://example.com") << int(Authority) << "bar%:foo@example.org" << Strict << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << QString() << QString(); QTest::newRow("bad-percent-authority-3") << QUrl("http://example.com") << int(Authority) << "bar:%foo@example.org" << Strict << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << QString() << QString(); QTest::newRow("bad-percent-authority-4") << QUrl("http://example.com") << int(Authority) << "bar:foo@bar%foo" << Strict << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << QString() << QString(); QTest::newRow("bad-percent-host") << QUrl("http://example.com") << int(Host) << "bar%foo" << Strict << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << QString() << QString(); QTest::newRow("bad-percent-path") << QUrl("http://example.com") << int(Path) << "/bar%foo" << Strict << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << QString() << QString(); QTest::newRow("bad-percent-query") << QUrl("http://example.com") << int(Query) << "bar%foo" << Strict << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << QString() << QString(); QTest::newRow("bad-percent-fragment") << QUrl("http://example.com") << int(Fragment) << "bar%foo" << Strict << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << QString() << QString(); // -- test decoded behaviour -- // '%' characters are not permitted in the scheme, this tests that it fails to set anything @@ -3922,7 +3924,7 @@ void tst_QUrl::setComponents_data() // '%' characters are not permitted in the hostname, these test that it fails to set anything QTest::newRow("invalid-host-encode") << QUrl("http://example.com") << int(Host) << "ex%61mple.com" << Decoded << false - << PrettyDecoded << "" << ""; + << PrettyDecoded << QString() << QString(); QTest::newRow("path-encode") << QUrl("http://example.com/foo") << int(Path) << "/bar%23" << Decoded << true << PrettyDecoded << "/bar%2523" << "http://example.com/bar%2523"; @@ -3961,41 +3963,44 @@ void tst_QUrl::setComponents() QFETCH(int, encoding); QFETCH(QString, output); +#define QNULLCOMPARE(a, b) \ + do { QCOMPARE(a, b); QCOMPARE(a.isNull(), b.isNull()); } while (false) + switch (component) { case Scheme: // scheme is only parsed in strict mode copy.setScheme(newValue); - QCOMPARE(copy.scheme(), output); + QCOMPARE(copy.scheme(), output); // schemes don't become null break; case Path: copy.setPath(newValue, QUrl::ParsingMode(parsingMode)); - QCOMPARE(copy.path(QUrl::ComponentFormattingOptions(encoding)), output); + QNULLCOMPARE(copy.path(QUrl::ComponentFormattingOptions(encoding)), output); break; case UserInfo: copy.setUserInfo(newValue, QUrl::ParsingMode(parsingMode)); - QCOMPARE(copy.userInfo(QUrl::ComponentFormattingOptions(encoding)), output); + QNULLCOMPARE(copy.userInfo(QUrl::ComponentFormattingOptions(encoding)), output); break; case UserName: copy.setUserName(newValue, QUrl::ParsingMode(parsingMode)); - QCOMPARE(copy.userName(QUrl::ComponentFormattingOptions(encoding)), output); + QNULLCOMPARE(copy.userName(QUrl::ComponentFormattingOptions(encoding)), output); break; case Password: copy.setPassword(newValue, QUrl::ParsingMode(parsingMode)); - QCOMPARE(copy.password(QUrl::ComponentFormattingOptions(encoding)), output); + QNULLCOMPARE(copy.password(QUrl::ComponentFormattingOptions(encoding)), output); break; case Host: copy.setHost(newValue, QUrl::ParsingMode(parsingMode)); - QCOMPARE(copy.host(QUrl::ComponentFormattingOptions(encoding)), output); + QNULLCOMPARE(copy.host(QUrl::ComponentFormattingOptions(encoding)), output); break; case Authority: copy.setAuthority(newValue, QUrl::ParsingMode(parsingMode)); - QCOMPARE(copy.authority(QUrl::ComponentFormattingOptions(encoding)), output); + QNULLCOMPARE(copy.authority(QUrl::ComponentFormattingOptions(encoding)), output); break; case Query: @@ -4010,6 +4015,7 @@ void tst_QUrl::setComponents() QCOMPARE(copy.fragment(QUrl::ComponentFormattingOptions(encoding)), output); break; } +#undef QNULLCOMPARE QFETCH(bool, isValid); QCOMPARE(copy.isValid(), isValid); @@ -4080,7 +4086,7 @@ public: for (int i = 0 ; i < m_urls.size(); ++i) m_urls[i] = QUrl::fromEncoded("http://www.kde.org", QUrl::StrictMode); } - QVector<QUrl> m_urls; + QList<QUrl> m_urls; }; static const UrlStorage * s_urlStorage = nullptr; @@ -4120,12 +4126,30 @@ void tst_QUrl::testThreadingHelper() void tst_QUrl::testThreading() { + enum { Count = 100 }; + + if (QTestPrivate::isRunningArmOnX86()) + QSKIP("This test fails in QEMU and looks like because of a data race, QTBUG-93176"); s_urlStorage = new UrlStorage; - QThreadPool::globalInstance()->setMaxThreadCount(100); - QFutureSynchronizer<void> sync; - for (int i = 0; i < 100; ++i) - sync.addFuture(QtConcurrent::run(this, &tst_QUrl::testThreadingHelper)); - sync.waitForFinished(); + QThreadPool::globalInstance()->setMaxThreadCount(Count); + + // Written this way because wasm need the eventloop + QList<QFuture<void>> futures; + futures.reserve(Count); + + for (int i = 0; i < Count; ++i) + futures.push_back(QtConcurrent::run(&tst_QUrl::testThreadingHelper, this)); + + QEventLoop loop; + std::atomic<int> remaining = Count; + for (int i = 0; i < Count; ++i) { + futures[i].then([&]() { + if (!--remaining) + loop.quit(); + }); + } + loop.exec(); + delete s_urlStorage; } diff --git a/tests/auto/corelib/io/qurl/tst_qurl_mac.mm b/tests/auto/corelib/io/qurl/tst_qurl_mac.mm index f2d151a090..a7cf3ebee5 100644 --- a/tests/auto/corelib/io/qurl/tst_qurl_mac.mm +++ b/tests/auto/corelib/io/qurl/tst_qurl_mac.mm @@ -1,32 +1,7 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only -#include <QtTest/QtTest> +#include <QTest> #include <CoreFoundation/CoreFoundation.h> #include <Foundation/Foundation.h> diff --git a/tests/auto/corelib/io/qurlinternal/CMakeLists.txt b/tests/auto/corelib/io/qurlinternal/CMakeLists.txt new file mode 100644 index 0000000000..a5c36b6ed9 --- /dev/null +++ b/tests/auto/corelib/io/qurlinternal/CMakeLists.txt @@ -0,0 +1,24 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qurlinternal LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +if(NOT QT_FEATURE_private_tests) + return() +endif() + +##################################################################### +## tst_qurlinternal Test: +##################################################################### + +qt_internal_add_test(tst_qurlinternal + SOURCES + tst_qurlinternal.cpp + utf8data.cpp + LIBRARIES + Qt::CorePrivate +) diff --git a/tests/auto/corelib/io/qurlinternal/qurlinternal.pro b/tests/auto/corelib/io/qurlinternal/qurlinternal.pro deleted file mode 100644 index 3828512dce..0000000000 --- a/tests/auto/corelib/io/qurlinternal/qurlinternal.pro +++ /dev/null @@ -1,5 +0,0 @@ -CONFIG += testcase -requires(qtConfig(private_tests)) -TARGET = tst_qurlinternal -SOURCES += tst_qurlinternal.cpp ../../codecs/utf8/utf8data.cpp -QT = core core-private testlib diff --git a/tests/auto/corelib/io/qurlinternal/tst_qurlinternal.cpp b/tests/auto/corelib/io/qurlinternal/tst_qurlinternal.cpp index 5c6e633749..1c121ac719 100644 --- a/tests/auto/corelib/io/qurlinternal/tst_qurlinternal.cpp +++ b/tests/auto/corelib/io/qurlinternal/tst_qurlinternal.cpp @@ -1,36 +1,10 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Copyright (C) 2016 Intel Corporation. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// Copyright (C) 2016 Intel Corporation. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QtCore/QUrl> -#include <QtTest/QtTest> +#include <QTest> -#include "private/qtldurl_p.h" #include "private/qurl_p.h" // For testsuites @@ -42,18 +16,20 @@ #define STRINGPREP_BIDI_BOTH_L_AND_RAL 4 #define STRINGPREP_BIDI_LEADTRAIL_NOT_RAL 5 -struct ushortarray { - ushortarray() {} +using namespace Qt::StringLiterals; + +struct char16array { + char16array() {} template <size_t N> - ushortarray(unsigned short (&array)[N]) + char16array(char16_t (&array)[N]) { - memcpy(points, array, N*sizeof(unsigned short)); + memcpy(points, array, N*sizeof(char16_t)); } - unsigned short points[100]; + char16_t points[100]; }; -Q_DECLARE_METATYPE(ushortarray) +Q_DECLARE_METATYPE(char16array) Q_DECLARE_METATYPE(QUrl::FormattingOptions) Q_DECLARE_METATYPE(QUrl::ComponentFormattingOptions) @@ -66,10 +42,6 @@ private Q_SLOTS: #ifdef QT_BUILD_INTERNAL void idna_testsuite_data(); void idna_testsuite(); - void nameprep_testsuite_data(); - void nameprep_testsuite(); - void nameprep_highcodes_data(); - void nameprep_highcodes(); #endif void ace_testsuite_data(); void ace_testsuite(); @@ -85,8 +57,6 @@ private Q_SLOTS: void encodingRecode(); void encodingRecodeInvalidUtf8_data(); void encodingRecodeInvalidUtf8(); - void recodeByteArray_data(); - void recodeByteArray(); }; #include "tst_qurlinternal.moc" @@ -94,146 +64,149 @@ private Q_SLOTS: void tst_QUrlInternal::idna_testsuite_data() { QTest::addColumn<int>("numchars"); - QTest::addColumn<ushortarray>("unicode"); + QTest::addColumn<char16array>("unicode"); QTest::addColumn<QByteArray>("punycode"); QTest::addColumn<int>("allowunassigned"); QTest::addColumn<int>("usestd3asciirules"); QTest::addColumn<int>("toasciirc"); QTest::addColumn<int>("tounicoderc"); - unsigned short d1[] = { 0x0644, 0x064A, 0x0647, 0x0645, 0x0627, 0x0628, 0x062A, 0x0643, - 0x0644, 0x0645, 0x0648, 0x0634, 0x0639, 0x0631, 0x0628, 0x064A, - 0x061F }; - QTest::newRow("Arabic (Egyptian)") << 17 << ushortarray(d1) + char16_t d1[] = { 0x0644, 0x064A, 0x0647, 0x0645, 0x0627, 0x0628, 0x062A, 0x0643, + 0x0644, 0x0645, 0x0648, 0x0634, 0x0639, 0x0631, 0x0628, 0x064A, + 0x061F }; + QTest::newRow("Arabic (Egyptian)") << 17 << char16array(d1) << QByteArray(IDNA_ACE_PREFIX "egbpdaj6bu4bxfgehfvwxn") << 0 << 0 << IDNA_SUCCESS << IDNA_SUCCESS; - unsigned short d2[] = { 0x4ED6, 0x4EEC, 0x4E3A, 0x4EC0, 0x4E48, 0x4E0D, 0x8BF4, 0x4E2D, - 0x6587 }; - QTest::newRow("Chinese (simplified)") << 9 << ushortarray(d2) + char16_t d2[] = { 0x4ED6, 0x4EEC, 0x4E3A, 0x4EC0, 0x4E48, 0x4E0D, 0x8BF4, 0x4E2D, + 0x6587 }; + QTest::newRow("Chinese (simplified)") << 9 << char16array(d2) << QByteArray(IDNA_ACE_PREFIX "ihqwcrb4cv8a8dqg056pqjye") << 0 << 0 << IDNA_SUCCESS << IDNA_SUCCESS; - unsigned short d3[] = { 0x4ED6, 0x5011, 0x7232, 0x4EC0, 0x9EBD, 0x4E0D, 0x8AAA, 0x4E2D, - 0x6587 }; - QTest::newRow("Chinese (traditional)") << 9 << ushortarray(d3) + char16_t d3[] = { 0x4ED6, 0x5011, 0x7232, 0x4EC0, 0x9EBD, 0x4E0D, 0x8AAA, 0x4E2D, + 0x6587 }; + QTest::newRow("Chinese (traditional)") << 9 << char16array(d3) << QByteArray(IDNA_ACE_PREFIX "ihqwctvzc91f659drss3x8bo0yb") << 0 << 0 << IDNA_SUCCESS << IDNA_SUCCESS; - unsigned short d4[] = { 0x0050, 0x0072, 0x006F, 0x010D, 0x0070, 0x0072, 0x006F, 0x0073, - 0x0074, 0x011B, 0x006E, 0x0065, 0x006D, 0x006C, 0x0075, 0x0076, - 0x00ED, 0x010D, 0x0065, 0x0073, 0x006B, 0x0079 }; - QTest::newRow("Czech") << 22 << ushortarray(d4) + char16_t d4[] = { 0x0050, 0x0072, 0x006F, 0x010D, 0x0070, 0x0072, 0x006F, 0x0073, + 0x0074, 0x011B, 0x006E, 0x0065, 0x006D, 0x006C, 0x0075, 0x0076, + 0x00ED, 0x010D, 0x0065, 0x0073, 0x006B, 0x0079 }; + QTest::newRow("Czech") << 22 << char16array(d4) << QByteArray(IDNA_ACE_PREFIX "Proprostnemluvesky-uyb24dma41a") << 0 << 0 << IDNA_SUCCESS << IDNA_SUCCESS; - unsigned short d5[] = { 0x05DC, 0x05DE, 0x05D4, 0x05D4, 0x05DD, 0x05E4, 0x05E9, 0x05D5, - 0x05D8, 0x05DC, 0x05D0, 0x05DE, 0x05D3, 0x05D1, 0x05E8, 0x05D9, - 0x05DD, 0x05E2, 0x05D1, 0x05E8, 0x05D9, 0x05EA }; - QTest::newRow("Hebrew") << 22 << ushortarray(d5) + char16_t d5[] = { 0x05DC, 0x05DE, 0x05D4, 0x05D4, 0x05DD, 0x05E4, 0x05E9, 0x05D5, + 0x05D8, 0x05DC, 0x05D0, 0x05DE, 0x05D3, 0x05D1, 0x05E8, 0x05D9, + 0x05DD, 0x05E2, 0x05D1, 0x05E8, 0x05D9, 0x05EA }; + QTest::newRow("Hebrew") << 22 << char16array(d5) << QByteArray(IDNA_ACE_PREFIX "4dbcagdahymbxekheh6e0a7fei0b") << 0 << 0 << IDNA_SUCCESS << IDNA_SUCCESS; - unsigned short d6[] = { 0x092F, 0x0939, 0x0932, 0x094B, 0x0917, 0x0939, 0x093F, 0x0928, - 0x094D, 0x0926, 0x0940, 0x0915, 0x094D, 0x092F, 0x094B, 0x0902, - 0x0928, 0x0939, 0x0940, 0x0902, 0x092C, 0x094B, 0x0932, 0x0938, - 0x0915, 0x0924, 0x0947, 0x0939, 0x0948, 0x0902 }; - QTest::newRow("Hindi (Devanagari)") << 30 << ushortarray(d6) + char16_t d6[] = { 0x092F, 0x0939, 0x0932, 0x094B, 0x0917, 0x0939, 0x093F, 0x0928, + 0x094D, 0x0926, 0x0940, 0x0915, 0x094D, 0x092F, 0x094B, 0x0902, + 0x0928, 0x0939, 0x0940, 0x0902, 0x092C, 0x094B, 0x0932, 0x0938, + 0x0915, 0x0924, 0x0947, 0x0939, 0x0948, 0x0902 }; + QTest::newRow("Hindi (Devanagari)") << 30 << char16array(d6) << QByteArray(IDNA_ACE_PREFIX "i1baa7eci9glrd9b2ae1bj0hfcgg6iyaf8o0a1dig0cd") << 0 << 0 << IDNA_SUCCESS; - unsigned short d7[] = { 0x306A, 0x305C, 0x307F, 0x3093, 0x306A, 0x65E5, 0x672C, 0x8A9E, - 0x3092, 0x8A71, 0x3057, 0x3066, 0x304F, 0x308C, 0x306A, 0x3044, - 0x306E, 0x304B }; - QTest::newRow("Japanese (kanji and hiragana)") << 18 << ushortarray(d7) + char16_t d7[] = { 0x306A, 0x305C, 0x307F, 0x3093, 0x306A, 0x65E5, 0x672C, 0x8A9E, + 0x3092, 0x8A71, 0x3057, 0x3066, 0x304F, 0x308C, 0x306A, 0x3044, + 0x306E, 0x304B }; + QTest::newRow("Japanese (kanji and hiragana)") << 18 << char16array(d7) << QByteArray(IDNA_ACE_PREFIX "n8jok5ay5dzabd5bym9f0cm5685rrjetr6pdxa") << 0 << 0 << IDNA_SUCCESS; - unsigned short d8[] = { 0x043F, 0x043E, 0x0447, 0x0435, 0x043C, 0x0443, 0x0436, 0x0435, - 0x043E, 0x043D, 0x0438, 0x043D, 0x0435, 0x0433, 0x043E, 0x0432, - 0x043E, 0x0440, 0x044F, 0x0442, 0x043F, 0x043E, 0x0440, 0x0443, - 0x0441, 0x0441, 0x043A, 0x0438 }; - QTest::newRow("Russian (Cyrillic)") << 28 << ushortarray(d8) + char16_t d8[] = { 0x043F, 0x043E, 0x0447, 0x0435, 0x043C, 0x0443, 0x0436, 0x0435, + 0x043E, 0x043D, 0x0438, 0x043D, 0x0435, 0x0433, 0x043E, 0x0432, + 0x043E, 0x0440, 0x044F, 0x0442, 0x043F, 0x043E, 0x0440, 0x0443, + 0x0441, 0x0441, 0x043A, 0x0438 }; + QTest::newRow("Russian (Cyrillic)") << 28 << char16array(d8) << QByteArray(IDNA_ACE_PREFIX "b1abfaaepdrnnbgefbadotcwatmq2g4l") << 0 << 0 << IDNA_SUCCESS << IDNA_SUCCESS; - unsigned short d9[] = { 0x0050, 0x006F, 0x0072, 0x0071, 0x0075, 0x00E9, 0x006E, 0x006F, - 0x0070, 0x0075, 0x0065, 0x0064, 0x0065, 0x006E, 0x0073, 0x0069, - 0x006D, 0x0070, 0x006C, 0x0065, 0x006D, 0x0065, 0x006E, 0x0074, - 0x0065, 0x0068, 0x0061, 0x0062, 0x006C, 0x0061, 0x0072, 0x0065, - 0x006E, 0x0045, 0x0073, 0x0070, 0x0061, 0x00F1, 0x006F, 0x006C }; - QTest::newRow("Spanish") << 40 << ushortarray(d9) + char16_t d9[] = { 0x0050, 0x006F, 0x0072, 0x0071, 0x0075, 0x00E9, 0x006E, 0x006F, + 0x0070, 0x0075, 0x0065, 0x0064, 0x0065, 0x006E, 0x0073, 0x0069, + 0x006D, 0x0070, 0x006C, 0x0065, 0x006D, 0x0065, 0x006E, 0x0074, + 0x0065, 0x0068, 0x0061, 0x0062, 0x006C, 0x0061, 0x0072, 0x0065, + 0x006E, 0x0045, 0x0073, 0x0070, 0x0061, 0x00F1, 0x006F, 0x006C }; + QTest::newRow("Spanish") << 40 << char16array(d9) << QByteArray(IDNA_ACE_PREFIX "PorqunopuedensimplementehablarenEspaol-fmd56a") << 0 << 0 << IDNA_SUCCESS; - unsigned short d10[] = { 0x0054, 0x1EA1, 0x0069, 0x0073, 0x0061, 0x006F, 0x0068, 0x1ECD, - 0x006B, 0x0068, 0x00F4, 0x006E, 0x0067, 0x0074, 0x0068, 0x1EC3, - 0x0063, 0x0068, 0x1EC9, 0x006E, 0x00F3, 0x0069, 0x0074, 0x0069, - 0x1EBF, 0x006E, 0x0067, 0x0056, 0x0069, 0x1EC7, 0x0074 }; - QTest::newRow("Vietnamese") << 31 << ushortarray(d10) + char16_t d10[] = { 0x0054, 0x1EA1, 0x0069, 0x0073, 0x0061, 0x006F, 0x0068, 0x1ECD, + 0x006B, 0x0068, 0x00F4, 0x006E, 0x0067, 0x0074, 0x0068, 0x1EC3, + 0x0063, 0x0068, 0x1EC9, 0x006E, 0x00F3, 0x0069, 0x0074, 0x0069, + 0x1EBF, 0x006E, 0x0067, 0x0056, 0x0069, 0x1EC7, 0x0074 }; + QTest::newRow("Vietnamese") << 31 << char16array(d10) << QByteArray(IDNA_ACE_PREFIX "TisaohkhngthchnitingVit-kjcr8268qyxafd2f1b9g") << 0 << 0 << IDNA_SUCCESS; - unsigned short d11[] = { 0x0033, 0x5E74, 0x0042, 0x7D44, 0x91D1, 0x516B, 0x5148, 0x751F }; - QTest::newRow("Japanese") << 8 << ushortarray(d11) + char16_t d11[] = { 0x0033, 0x5E74, 0x0042, 0x7D44, 0x91D1, 0x516B, 0x5148, 0x751F }; + QTest::newRow("Japanese") << 8 << char16array(d11) << QByteArray(IDNA_ACE_PREFIX "3B-ww4c5e180e575a65lsy2b") << 0 << 0 << IDNA_SUCCESS << IDNA_SUCCESS; // this test does NOT include nameprepping, so the capitals will remain - unsigned short d12[] = { 0x5B89, 0x5BA4, 0x5948, 0x7F8E, 0x6075, 0x002D, 0x0077, 0x0069, - 0x0074, 0x0068, 0x002D, 0x0053, 0x0055, 0x0050, 0x0045, 0x0052, - 0x002D, 0x004D, 0x004F, 0x004E, 0x004B, 0x0045, 0x0059, 0x0053 }; - QTest::newRow("Japanese2") << 24 << ushortarray(d12) + char16_t d12[] = { 0x5B89, 0x5BA4, 0x5948, 0x7F8E, 0x6075, 0x002D, 0x0077, 0x0069, + 0x0074, 0x0068, 0x002D, 0x0053, 0x0055, 0x0050, 0x0045, 0x0052, + 0x002D, 0x004D, 0x004F, 0x004E, 0x004B, 0x0045, 0x0059, 0x0053 }; + QTest::newRow("Japanese2") << 24 << char16array(d12) << QByteArray(IDNA_ACE_PREFIX "-with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n") << 0 << 0 << IDNA_SUCCESS; - unsigned short d13[] = { 0x0048, 0x0065, 0x006C, 0x006C, 0x006F, 0x002D, 0x0041, 0x006E, - 0x006F, 0x0074, 0x0068, 0x0065, 0x0072, 0x002D, 0x0057, 0x0061, - 0x0079, 0x002D, 0x305D, 0x308C, 0x305E, 0x308C, 0x306E, 0x5834, - 0x6240 }; - QTest::newRow("Japanese3") << 25 << ushortarray(d13) + char16_t d13[] = { 0x0048, 0x0065, 0x006C, 0x006C, 0x006F, 0x002D, 0x0041, 0x006E, + 0x006F, 0x0074, 0x0068, 0x0065, 0x0072, 0x002D, 0x0057, 0x0061, + 0x0079, 0x002D, 0x305D, 0x308C, 0x305E, 0x308C, 0x306E, 0x5834, + 0x6240 }; + QTest::newRow("Japanese3") << 25 << char16array(d13) << QByteArray(IDNA_ACE_PREFIX "Hello-Another-Way--fc4qua05auwb3674vfr0b") << 0 << 0 << IDNA_SUCCESS; - unsigned short d14[] = { 0x3072, 0x3068, 0x3064, 0x5C4B, 0x6839, 0x306E, 0x4E0B, 0x0032 }; - QTest::newRow("Japanese4") << 8 << ushortarray(d14) + char16_t d14[] = { 0x3072, 0x3068, 0x3064, 0x5C4B, 0x6839, 0x306E, 0x4E0B, 0x0032 }; + QTest::newRow("Japanese4") << 8 << char16array(d14) << QByteArray(IDNA_ACE_PREFIX "2-u9tlzr9756bt3uc0v") << 0 << 0 << IDNA_SUCCESS << IDNA_SUCCESS; - unsigned short d15[] = { 0x004D, 0x0061, 0x006A, 0x0069, 0x3067, 0x004B, 0x006F, 0x0069, - 0x3059, 0x308B, 0x0035, 0x79D2, 0x524D }; - QTest::newRow("Japanese5") << 13 << ushortarray(d15) + char16_t d15[] = { 0x004D, 0x0061, 0x006A, 0x0069, 0x3067, 0x004B, 0x006F, 0x0069, + 0x3059, 0x308B, 0x0035, 0x79D2, 0x524D }; + QTest::newRow("Japanese5") << 13 << char16array(d15) << QByteArray(IDNA_ACE_PREFIX "MajiKoi5-783gue6qz075azm5e") << 0 << 0 << IDNA_SUCCESS << IDNA_SUCCESS; - unsigned short d16[] = { 0x30D1, 0x30D5, 0x30A3, 0x30FC, 0x0064, 0x0065, 0x30EB, 0x30F3, 0x30D0 }; - QTest::newRow("Japanese6") << 9 << ushortarray(d16) + char16_t d16[] = { 0x30D1, 0x30D5, 0x30A3, 0x30FC, 0x0064, 0x0065, 0x30EB, 0x30F3, 0x30D0 }; + QTest::newRow("Japanese6") << 9 << char16array(d16) << QByteArray(IDNA_ACE_PREFIX "de-jg4avhby1noc0d") << 0 << 0 << IDNA_SUCCESS << IDNA_SUCCESS; - unsigned short d17[] = { 0x305D, 0x306E, 0x30B9, 0x30D4, 0x30FC, 0x30C9, 0x3067 }; - QTest::newRow("Japanese7") << 7 << ushortarray(d17) + char16_t d17[] = { 0x305D, 0x306E, 0x30B9, 0x30D4, 0x30FC, 0x30C9, 0x3067 }; + QTest::newRow("Japanese7") << 7 << char16array(d17) << QByteArray(IDNA_ACE_PREFIX "d9juau41awczczp") << 0 << 0 << IDNA_SUCCESS << IDNA_SUCCESS; - unsigned short d18[] = { 0x03b5, 0x03bb, 0x03bb, 0x03b7, 0x03bd, 0x03b9, 0x03ba, 0x03ac }; - QTest::newRow("Greek") << 8 << ushortarray(d18) + char16_t d18[] = { 0x03b5, 0x03bb, 0x03bb, 0x03b7, 0x03bd, 0x03b9, 0x03ba, 0x03ac }; + QTest::newRow("Greek") << 8 << char16array(d18) << QByteArray(IDNA_ACE_PREFIX "hxargifdar") << 0 << 0 << IDNA_SUCCESS << IDNA_SUCCESS; - unsigned short d19[] = { 0x0062, 0x006f, 0x006e, 0x0121, 0x0075, 0x0073, 0x0061, 0x0127, - 0x0127, 0x0061 }; - QTest::newRow("Maltese (Malti)") << 10 << ushortarray(d19) + char16_t d19[] = { 0x0062, 0x006f, 0x006e, 0x0121, 0x0075, 0x0073, 0x0061, 0x0127, + 0x0127, 0x0061 }; + QTest::newRow("Maltese (Malti)") << 10 << char16array(d19) << QByteArray(IDNA_ACE_PREFIX "bonusaa-5bb1da") << 0 << 0 << IDNA_SUCCESS << IDNA_SUCCESS; - unsigned short d20[] = {0x043f, 0x043e, 0x0447, 0x0435, 0x043c, 0x0443, 0x0436, 0x0435, - 0x043e, 0x043d, 0x0438, 0x043d, 0x0435, 0x0433, 0x043e, 0x0432, - 0x043e, 0x0440, 0x044f, 0x0442, 0x043f, 0x043e, 0x0440, 0x0443, - 0x0441, 0x0441, 0x043a, 0x0438 }; - QTest::newRow("Russian (Cyrillic)") << 28 << ushortarray(d20) + char16_t d20[] = {0x043f, 0x043e, 0x0447, 0x0435, 0x043c, 0x0443, 0x0436, 0x0435, + 0x043e, 0x043d, 0x0438, 0x043d, 0x0435, 0x0433, 0x043e, 0x0432, + 0x043e, 0x0440, 0x044f, 0x0442, 0x043f, 0x043e, 0x0440, 0x0443, + 0x0441, 0x0441, 0x043a, 0x0438 }; + QTest::newRow("Russian (Cyrillic)") << 28 << char16array(d20) << QByteArray(IDNA_ACE_PREFIX "b1abfaaepdrnnbgefbadotcwatmq2g4l") << 0 << 0 << IDNA_SUCCESS << IDNA_SUCCESS; + + char16_t d21[] = { 0xd800, 0xdef7 }; + QTest::newRow("U+102F7") << 2 << char16array(d21) << QByteArray(IDNA_ACE_PREFIX "r97c"); } #endif @@ -241,323 +214,16 @@ void tst_QUrlInternal::idna_testsuite_data() void tst_QUrlInternal::idna_testsuite() { QFETCH(int, numchars); - QFETCH(ushortarray, unicode); + QFETCH(char16array, unicode); QFETCH(QByteArray, punycode); QString result; - qt_punycodeEncoder((QChar*)unicode.points, numchars, &result); + qt_punycodeEncoder(QStringView{unicode.points, numchars}, &result); QCOMPARE(result.toLatin1(), punycode); QCOMPARE(qt_punycodeDecoder(result), QString::fromUtf16(unicode.points, numchars)); } #endif -#ifdef QT_BUILD_INTERNAL -void tst_QUrlInternal::nameprep_testsuite_data() -{ - QTest::addColumn<QString>("in"); - QTest::addColumn<QString>("out"); - QTest::addColumn<QString>("profile"); - QTest::addColumn<int>("flags"); - QTest::addColumn<int>("rc"); - - QTest::newRow("Map to nothing") - << QString::fromUtf8("foo\xC2\xAD\xCD\x8F\xE1\xA0\x86\xE1\xA0\x8B" - "bar""\xE2\x80\x8B\xE2\x81\xA0""baz\xEF\xB8\x80\xEF\xB8\x88" - "\xEF\xB8\x8F\xEF\xBB\xBF") - << QString::fromUtf8("foobarbaz") - << QString() << 0 << 0; - - QTest::newRow("Case folding ASCII U+0043 U+0041 U+0046 U+0045") - << QString::fromUtf8("CAFE") - << QString::fromUtf8("cafe") - << QString() << 0 << 0; - - QTest::newRow("Case folding 8bit U+00DF (german sharp s)") - << QString::fromUtf8("\xC3\x9F") - << QString("ss") - << QString() << 0 << 0; - - QTest::newRow("Case folding U+0130 (turkish capital I with dot)") - << QString::fromUtf8("\xC4\xB0") - << QString::fromUtf8("i\xcc\x87") - << QString() << 0 << 0; - - QTest::newRow("Case folding multibyte U+0143 U+037A") - << QString::fromUtf8("\xC5\x83\xCD\xBA") - << QString::fromUtf8("\xC5\x84 \xCE\xB9") - << QString() << 0 << 0; - - QTest::newRow("Case folding U+2121 U+33C6 U+1D7BB") - << QString::fromUtf8("\xE2\x84\xA1\xE3\x8F\x86\xF0\x9D\x9E\xBB") - << QString::fromUtf8("telc\xE2\x88\x95""kg\xCF\x83") - << QString() << 0 << 0; - - QTest::newRow("Normalization of U+006a U+030c U+00A0 U+00AA") - << QString::fromUtf8("\x6A\xCC\x8C\xC2\xA0\xC2\xAA") - << QString::fromUtf8("\xC7\xB0 a") - << QString() << 0 << 0; - - QTest::newRow("Case folding U+1FB7 and normalization") - << QString::fromUtf8("\xE1\xBE\xB7") - << QString::fromUtf8("\xE1\xBE\xB6\xCE\xB9") - << QString() << 0 << 0; - - QTest::newRow("Self-reverting case folding U+01F0 and normalization") -// << QString::fromUtf8("\xC7\xF0") ### typo in the original testsuite - << QString::fromUtf8("\xC7\xB0") - << QString::fromUtf8("\xC7\xB0") - << QString() << 0 << 0; - - QTest::newRow("Self-reverting case folding U+0390 and normalization") - << QString::fromUtf8("\xCE\x90") - << QString::fromUtf8("\xCE\x90") - << QString() << 0 << 0; - - QTest::newRow("Self-reverting case folding U+03B0 and normalization") - << QString::fromUtf8("\xCE\xB0") - << QString::fromUtf8("\xCE\xB0") - << QString() << 0 << 0; - - QTest::newRow("Self-reverting case folding U+1E96 and normalization") - << QString::fromUtf8("\xE1\xBA\x96") - << QString::fromUtf8("\xE1\xBA\x96") - << QString() << 0 << 0; - - QTest::newRow("Self-reverting case folding U+1F56 and normalization") - << QString::fromUtf8("\xE1\xBD\x96") - << QString::fromUtf8("\xE1\xBD\x96") - << QString() << 0 << 0; - - QTest::newRow("ASCII space character U+0020") - << QString::fromUtf8("\x20") - << QString::fromUtf8("\x20") - << QString() << 0 << 0; - - QTest::newRow("Non-ASCII 8bit space character U+00A0") - << QString::fromUtf8("\xC2\xA0") - << QString::fromUtf8("\x20") - << QString() << 0 << 0; - - QTest::newRow("Non-ASCII multibyte space character U+1680") - << QString::fromUtf8("x\xE1\x9A\x80x") - << QString() - << QString("Nameprep") << 0 << STRINGPREP_CONTAINS_PROHIBITED; - - QTest::newRow("Non-ASCII multibyte space character U+2000") - << QString::fromUtf8("\xE2\x80\x80") - << QString::fromUtf8("\x20") - << QString() << 0 << 0; - - QTest::newRow("Zero Width Space U+200b") - << QString::fromUtf8("\xE2\x80\x8b") - << QString() - << QString() << 0 << 0; - - QTest::newRow("Non-ASCII multibyte space character U+3000") - << QString::fromUtf8("\xE3\x80\x80") - << QString::fromUtf8("\x20") - << QString() << 0 << 0; - - QTest::newRow("ASCII control characters U+0010 U+007F") - << QString::fromUtf8("\x10\x7F") - << QString::fromUtf8("\x10\x7F") - << QString() << 0 << 0; - - QTest::newRow("Non-ASCII 8bit control character U+0080") - << QString::fromUtf8("x\xC2\x80x") - << QString() - << QString("Nameprep") << 0 << STRINGPREP_CONTAINS_PROHIBITED; - - QTest::newRow("Non-ASCII 8bit control character U+0085") - << QString::fromUtf8("x\xC2\x85x") - << QString() - << QString("Nameprep") << 0 << STRINGPREP_CONTAINS_PROHIBITED; - - QTest::newRow("Non-ASCII multibyte control character U+180E") - << QString::fromUtf8("x\xE1\xA0\x8Ex") - << QString() - << QString("Nameprep") << 0 << STRINGPREP_CONTAINS_PROHIBITED; - - QTest::newRow("Zero Width No-Break Space U+FEFF") - << QString::fromUtf8("\xEF\xBB\xBF") - << QString() - << QString() << 0 << 0; - - QTest::newRow("Non-ASCII control character U+1D175") - << QString::fromUtf8("x\xF0\x9D\x85\xB5x") - << QString() - << QString("Nameprep") << 0 << STRINGPREP_CONTAINS_PROHIBITED; - - QTest::newRow("Plane 0 private use character U+F123") - << QString::fromUtf8("x\xEF\x84\xA3x") - << QString() - << QString("Nameprep") << 0 << STRINGPREP_CONTAINS_PROHIBITED; - - QTest::newRow("Plane 15 private use character U+F1234") - << QString::fromUtf8("x\xF3\xB1\x88\xB4x") - << QString() - << QString("Nameprep") << 0 << STRINGPREP_CONTAINS_PROHIBITED; - - QTest::newRow("Plane 16 private use character U+10F234") - << QString::fromUtf8("x\xF4\x8F\x88\xB4x") - << QString() - << QString("Nameprep") << 0 << STRINGPREP_CONTAINS_PROHIBITED; - - QTest::newRow("Non-character code point U+8FFFE") - << QString::fromUtf8("x\xF2\x8F\xBF\xBEx") - << QString() - << QString("Nameprep") << 0 << STRINGPREP_CONTAINS_PROHIBITED; - - QTest::newRow("Non-character code point U+10FFFF") - << QString::fromUtf8("x\xF4\x8F\xBF\xBFx") - << QString() - << QString("Nameprep") << 0 << STRINGPREP_CONTAINS_PROHIBITED; - - QTest::newRow("Surrogate code U+DF42") - << QString::fromUtf8("x\xED\xBD\x82x") - << QString() - << QString("Nameprep") << 0 << STRINGPREP_CONTAINS_PROHIBITED; - - QTest::newRow("Non-plain text character U+FFFD") - << QString::fromUtf8("x\xEF\xBF\xBDx") - << QString() - << QString("Nameprep") << 0 << STRINGPREP_CONTAINS_PROHIBITED; - - QTest::newRow("Ideographic description character U+2FF5") - << QString::fromUtf8("x\xE2\xBF\xB5x") - << QString() - << QString("Nameprep") << 0 << STRINGPREP_CONTAINS_PROHIBITED; - - QTest::newRow("Display property character U+0341") - << QString::fromUtf8("\xCD\x81") - << QString::fromUtf8("\xCC\x81") - << QString() << 0 << 0; - - QTest::newRow("Left-to-right mark U+200E") - << QString::fromUtf8("x\xE2\x80\x8Ex") - << QString() - << QString("Nameprep") << 0 << STRINGPREP_CONTAINS_PROHIBITED; - - QTest::newRow("Deprecated U+202A") - << QString::fromUtf8("x\xE2\x80\xAA") - << QString() - << QString("Nameprep") << 0 << STRINGPREP_CONTAINS_PROHIBITED; - - QTest::newRow("Language tagging character U+E0001") - << QString::fromUtf8("x\xF3\xA0\x80\x81x") - << QString() - << QString("Nameprep") << 0 << STRINGPREP_CONTAINS_PROHIBITED; - - QTest::newRow("Language tagging character U+E0042") - << QString::fromUtf8("x\xF3\xA0\x81\x82x") - << QString() - << QString("Nameprep") << 0 << STRINGPREP_CONTAINS_PROHIBITED; - - QTest::newRow("Bidi: RandALCat character U+05BE and LCat characters") - << QString::fromUtf8("foo\xD6\xBE""bar") - << QString() - << QString("Nameprep") << 0 << STRINGPREP_BIDI_BOTH_L_AND_RAL; - - QTest::newRow("Bidi: RandALCat character U+FD50 and LCat characters") - << QString::fromUtf8("foo\xEF\xB5\x90""bar") - << QString() - << QString("Nameprep") << 0 << STRINGPREP_BIDI_BOTH_L_AND_RAL; - - QTest::newRow("Bidi: RandALCat character U+FB38 and LCat characters") - << QString::fromUtf8("foo\xEF\xB9\xB6""bar") - << QString::fromUtf8("foo \xd9\x8e""bar") - << QString() << 0 << 0; - - QTest::newRow("Bidi: RandALCat without trailing RandALCat U+0627 U+0031") - << QString::fromUtf8("\xD8\xA7\x31") - << QString() - << QString("Nameprep") << 0 << STRINGPREP_BIDI_LEADTRAIL_NOT_RAL; - - QTest::newRow("Bidi: RandALCat character U+0627 U+0031 U+0628") - << QString::fromUtf8("\xD8\xA7\x31\xD8\xA8") - << QString::fromUtf8("\xD8\xA7\x31\xD8\xA8") - << QString() << 0 << 0; - - QTest::newRow("Unassigned code point U+E0002") - << QString::fromUtf8("\xF3\xA0\x80\x82") - << QString() - << QString("Nameprep") << STRINGPREP_NO_UNASSIGNED << STRINGPREP_CONTAINS_UNASSIGNED; - - QTest::newRow("Larger test (shrinking)") - << QString::fromUtf8("X\xC2\xAD\xC3\x9F\xC4\xB0\xE2\x84\xA1\x6a\xcc\x8c\xc2\xa0\xc2" - "\xaa\xce\xb0\xe2\x80\x80") - << QString::fromUtf8("xssi\xcc\x87""tel\xc7\xb0 a\xce\xb0 ") - << QString("Nameprep") << 0 << 0; - - QTest::newRow("Larger test (expanding)") - << QString::fromUtf8("X\xC3\x9F\xe3\x8c\x96\xC4\xB0\xE2\x84\xA1\xE2\x92\x9F\xE3\x8c\x80") - << QString::fromUtf8("xss\xe3\x82\xad\xe3\x83\xad\xe3\x83\xa1\xe3\x83\xbc\xe3\x83\x88" - "\xe3\x83\xab""i\xcc\x87""tel\x28""d\x29\xe3\x82\xa2\xe3\x83\x91" - "\xe3\x83\xbc\xe3\x83\x88") - << QString() << 0 << 0; -} -#endif - -#ifdef QT_BUILD_INTERNAL -void tst_QUrlInternal::nameprep_testsuite() -{ - QFETCH(QString, in); - QFETCH(QString, out); - QFETCH(QString, profile); - - qt_nameprep(&in, 0); - QCOMPARE(in, out); -} -#endif - -#ifdef QT_BUILD_INTERNAL -void tst_QUrlInternal::nameprep_highcodes_data() -{ - QTest::addColumn<QString>("in"); - QTest::addColumn<QString>("out"); - QTest::addColumn<QString>("profile"); - QTest::addColumn<int>("flags"); - QTest::addColumn<int>("rc"); - - { - QChar st[] = { '-', 0xd801, 0xdc1d, 'a' }; - QChar se[] = { '-', 0xd801, 0xdc45, 'a' }; - QTest::newRow("highcodes (U+1041D)") - << QString(st, sizeof(st)/sizeof(st[0])) - << QString(se, sizeof(se)/sizeof(se[0])) - << QString() << 0 << 0; - } - { - QChar st[] = { 0x011C, 0xd835, 0xdf6e, 0x0110 }; - QChar se[] = { 0x011D, 0x03C9, 0x0111 }; - QTest::newRow("highcodes (U+1D76E)") - << QString(st, sizeof(st)/sizeof(st[0])) - << QString(se, sizeof(se)/sizeof(se[0])) - << QString() << 0 << 0; - } - { - QChar st[] = { 'D', 'o', '\'', 0x2060, 'h' }; - QChar se[] = { 'd', 'o', '\'', 'h' }; - QTest::newRow("highcodes (D, o, ', U+2060, h)") - << QString(st, sizeof(st)/sizeof(st[0])) - << QString(se, sizeof(se)/sizeof(se[0])) - << QString() << 0 << 0; - } -} -#endif - -#ifdef QT_BUILD_INTERNAL -void tst_QUrlInternal::nameprep_highcodes() -{ - QFETCH(QString, in); - QFETCH(QString, out); - QFETCH(QString, profile); - - qt_nameprep(&in, 0); - QCOMPARE(in, out); -} -#endif - void tst_QUrlInternal::ace_testsuite_data() { QTest::addColumn<QString>("in"); @@ -569,8 +235,9 @@ void tst_QUrlInternal::ace_testsuite_data() QTest::newRow("ascii-mixed") << "FLuke" << "fluke" << "fluke" << "fluke"; QTest::newRow("ascii-upper") << "FLUKE" << "fluke" << "fluke" << "fluke"; - QTest::newRow("asciifolded") << QString::fromLatin1("stra\337e") << "strasse" << "." << "strasse"; - QTest::newRow("asciifolded-dotcom") << QString::fromLatin1("stra\337e.example.com") << "strasse.example.com" << "." << "strasse.example.com"; + // U+FB01 LATIN SMALL LIGATURE FI + QTest::newRow("asciifolded") << u"\uFB01le"_s << "file" << "." << "file"; + QTest::newRow("asciifolded-dotcom") << u"\uFB01le.example.com"_s << "file.example.com" << "." << "file.example.com"; QTest::newRow("greek-mu") << QString::fromLatin1("\265V") <<"xn--v-lmb" << "." @@ -652,29 +319,35 @@ void tst_QUrlInternal::ace_testsuite_data() << taiwaneseIDN; // violations / invalids - QTest::newRow("invalid-punycode") << "xn--z" << "xn--z" << "xn--z" << "xn--z"; + auto badRow = [](const char *name, const char *text) { + QTest::newRow(name) << text << text << text << text; + }; + + badRow("invalid-punycode", "xn--z"); // U+00A0 NO-BREAK SPACE encodes to Punycode "6a" // but it is prohibited and should have caused encoding failure - QTest::newRow("invalid-nameprep-prohibited") << "xn--6a" << "xn--6a" << "xn--6a" << "xn--6a"; + badRow("invalid-nameprep-prohibited", "xn--6a"); // U+00AD SOFT HYPHEN between "a" and "b" encodes to Punycode "ab-5da" // but it should have been removed in the nameprep stage - QTest::newRow("invalid-nameprep-maptonothing") << "xn-ab-5da" << "xn-ab-5da" << "xn-ab-5da" << "xn-ab-5da"; + badRow("invalid-nameprep-maptonothing", "xn-ab-5da"); // U+00C1 LATIN CAPITAL LETTER A WITH ACUTE encodes to Punycode "4ba" // but it should have nameprepped to lowercase first - QTest::newRow("invalid-nameprep-uppercase") << "xn--4ba" << "xn--4ba" << "xn--4ba" << "xn--4ba"; + badRow("invalid-nameprep-uppercase", "xn--4ba"); // U+00B5 MICRO SIGN encodes to Punycode "sba" // but is should have nameprepped to NFKC U+03BC GREEK SMALL LETTER MU - QTest::newRow("invalid-nameprep-nonnfkc") << "xn--sba" << "xn--sba" << "xn--sba" << "xn--sba"; + badRow("invalid-nameprep-nonnfkc", "xn--sba"); - // U+04CF CYRILLIC SMALL LETTER PALOCHKA encodes to "s5a" - // but it's not in RFC 3454's allowed character list (Unicode 3.2) - QTest::newRow("invalid-nameprep-unassigned") << "xn--s5a" << "xn--s5a" << "xn--s5a" << "xn--s5a"; - // same character, see QTBUG-60364 - QTest::newRow("invalid-nameprep-unassigned2") << "xn--80ak6aa92e" << "xn--80ak6aa92e" << "xn--80ak6aa92e" << "xn--80ak6aa92e"; + // Decodes to "a" in some versions, see QTBUG-95689 + badRow("punycode-overflow-1", "xn--5p32g"); + // Decodes to the same string as "xn--097c" in some versions, see QTBUG-95689 + badRow("punycode-overflow-2", "xn--400595c"); + + // Encodes 2**32, decodes to empty string in some versions + badRow("punycode-overflow-3", "xn--l0902716a"); } void tst_QUrlInternal::ace_testsuite() @@ -729,9 +402,6 @@ void tst_QUrlInternal::std3violations_data() QTest::newRow("control") << "\033foo" << false; QTest::newRow("bang") << "foo!" << false; QTest::newRow("plus") << "foo+bar" << false; - QTest::newRow("dot") << "foo.bar"; - QTest::newRow("startingdot") << ".bar" << false; - QTest::newRow("startingdot2") << ".example.com" << false; QTest::newRow("slash") << "foo/bar" << true; QTest::newRow("colon") << "foo:80" << true; QTest::newRow("question") << "foo?bar" << true; @@ -752,17 +422,6 @@ void tst_QUrlInternal::std3violations() { QFETCH(QString, source); -#ifdef QT_BUILD_INTERNAL - { - QString prepped = source; - qt_nameprep(&prepped, 0); - QVERIFY(!qt_check_std3rules(prepped.constData(), prepped.length())); - } -#endif - - if (source.contains('.')) - return; // this test ends here - QUrl url; url.setHost(source); QVERIFY(url.host().isEmpty()); @@ -848,7 +507,7 @@ void tst_QUrlInternal::correctEncodedMistakes() QString dataTag = QTest::currentDataTag(); QString output = dataTag; - if (!qt_urlRecode(output, input.constData(), input.constData() + input.length(), { })) + if (!qt_urlRecode(output, input, { })) output += input; QCOMPARE(output, dataTag + expected); @@ -856,7 +515,7 @@ void tst_QUrlInternal::correctEncodedMistakes() output = dataTag; QString expected2 = QUrl::fromPercentEncoding(expected.toLatin1()); - if (!qt_urlRecode(output, input.constData(), input.constData() + input.length(), QUrl::FullyDecoded)) + if (!qt_urlRecode(output, input, QUrl::FullyDecoded)) output += input; QCOMPARE(output, dataTag + expected2); } @@ -1020,7 +679,7 @@ void tst_QUrlInternal::encodingRecode() QString output = QTest::currentDataTag(); expected.prepend(output); - if (!qt_urlRecode(output, input.constData(), input.constData() + input.length(), encodingMode)) + if (!qt_urlRecode(output, input, encodingMode)) output += input; QCOMPARE(output, expected); } @@ -1048,54 +707,24 @@ void tst_QUrlInternal::encodingRecodeInvalidUtf8() // prepend some data to be sure that it remains there QString output = QTest::currentDataTag(); - if (!qt_urlRecode(output, input.constData(), input.constData() + input.length(), QUrl::PrettyDecoded)) + if (!qt_urlRecode(output, input, QUrl::PrettyDecoded)) output += input; QCOMPARE(output, QTest::currentDataTag() + input); // this is just control output = QTest::currentDataTag(); - if (!qt_urlRecode(output, input.constData(), input.constData() + input.length(), QUrl::FullyEncoded)) + if (!qt_urlRecode(output, input, QUrl::FullyEncoded)) output += input; QCOMPARE(output, QTest::currentDataTag() + input); // verify for security reasons that all bad UTF-8 data got replaced by QChar::ReplacementCharacter output = QTest::currentDataTag(); - if (!qt_urlRecode(output, input.constData(), input.constData() + input.length(), QUrl::FullyEncoded)) + if (!qt_urlRecode(output, input, QUrl::FullyEncoded)) output += input; - for (int i = int(strlen(QTest::currentDataTag())); i < output.length(); ++i) { + for (int i = int(strlen(QTest::currentDataTag())); i < output.size(); ++i) { QVERIFY2(output.at(i).unicode() < 0x80 || output.at(i) == QChar::ReplacementCharacter, qPrintable(QString("Character at i == %1 was U+%2").arg(i).arg(output.at(i).unicode(), 4, 16, QLatin1Char('0')))); } } -void tst_QUrlInternal::recodeByteArray_data() -{ - QTest::addColumn<QByteArray>("input"); - QTest::addColumn<QString>("expected"); - - QTest::newRow("null") << QByteArray() << QString(); - QTest::newRow("empty") << QByteArray("") << QString(""); - QTest::newRow("normal") << QByteArray("Hello") << "Hello"; - QTest::newRow("valid-utf8") << QByteArray("\xc3\xa9") << "%C3%A9"; - QTest::newRow("percent-encoded") << QByteArray("%C3%A9%00%C0%80") << "%C3%A9%00%C0%80"; - QTest::newRow("invalid-utf8-1") << QByteArray("\xc3\xc3") << "%C3%C3"; - QTest::newRow("invalid-utf8-2") << QByteArray("\xc0\x80") << "%C0%80"; - - // note: percent-encoding the control characters ("\0" -> "%00") would also - // be correct, but it's unnecessary for this function - QTest::newRow("binary") << QByteArray("\0\x1f", 2) << QString::fromLatin1("\0\x1f", 2);; - QTest::newRow("binary+percent-encoded") << QByteArray("\0%25", 4) << QString::fromLatin1("\0%25", 4); -} - -void tst_QUrlInternal::recodeByteArray() -{ - QFETCH(QByteArray, input); - QFETCH(QString, expected); - QString output = qt_urlRecodeByteArray(input); - - QCOMPARE(output.isNull(), input.isNull()); - QCOMPARE(output.isEmpty(), input.isEmpty()); - QCOMPARE(output, expected); -} - QTEST_APPLESS_MAIN(tst_QUrlInternal) diff --git a/tests/auto/corelib/io/qurlinternal/utf8data.cpp b/tests/auto/corelib/io/qurlinternal/utf8data.cpp new file mode 100644 index 0000000000..edeff0182c --- /dev/null +++ b/tests/auto/corelib/io/qurlinternal/utf8data.cpp @@ -0,0 +1,135 @@ +// Copyright (C) 2018 The Qt Company Ltd. +// Copyright (C) 2018 Intel Corporation. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only +#include <QTest> + +void loadInvalidUtf8Rows() +{ + // Wrong continuations + QTest::newRow("bad-continuation-1char") << QByteArray("\x80"); + QTest::newRow("bad-continuation-2chars-1") << QByteArray("\xC2\xC0"); + QTest::newRow("bad-continuation-2chars-2") << QByteArray("\xC3\xDF"); + QTest::newRow("bad-continuation-2chars-3") << QByteArray("\xC7\xF0"); + QTest::newRow("bad-continuation-3chars-1") << QByteArray("\xE0\xA0\xC0"); + QTest::newRow("bad-continuation-3chars-2") << QByteArray("\xE0\xC0\xA0"); + QTest::newRow("bad-continuation-4chars-1") << QByteArray("\xF0\x90\x80\xC0"); + QTest::newRow("bad-continuation-4chars-2") << QByteArray("\xF0\x90\xC0\x80"); + QTest::newRow("bad-continuation-4chars-3") << QByteArray("\xF0\xC0\x80\x80"); + + // Too short + QTest::newRow("too-short-2chars") << QByteArray("\xC2"); + QTest::newRow("too-short-3chars-1") << QByteArray("\xE0"); + QTest::newRow("too-short-3chars-2") << QByteArray("\xE0\xA0"); + QTest::newRow("too-short-4chars-1") << QByteArray("\xF0"); + QTest::newRow("too-short-4chars-2") << QByteArray("\xF0\x90"); + QTest::newRow("too-short-4chars-3") << QByteArray("\xF0\x90\x80"); + + // Surrogate pairs must now be present either + // U+D800: 1101 10 0000 00 0000 + // encoding: xxxz:1101 xz10:0000 xz00:0000 + QTest::newRow("hi-surrogate") << QByteArray("\xED\xA0\x80"); + // U+DC00: 1101 11 0000 00 0000 + // encoding: xxxz:1101 xz11:0000 xz00:0000 + QTest::newRow("lo-surrogate") << QByteArray("\xED\xB0\x80"); + + // not even in pair: + QTest::newRow("surrogate-pair") << QByteArray("\xED\xA0\x80\xED\xB0\x80"); + + // Characters outside the Unicode range: + // 0x110000: 00 0100 01 0000 00 0000 00 0000 + // encoding: xxxx:z100 xz01:0000 xz00:0000 xz00:0000 + QTest::newRow("non-unicode-1") << QByteArray("\xF4\x90\x80\x80"); + // 0x200000: 00 1000 00 0000 00 0000 00 0000 + // encoding: xxxx:xz00 xz00:1000 xz00:0000 xz00:0000 xz00:0000 + QTest::newRow("non-unicode-2") << QByteArray("\xF8\x88\x80\x80\x80"); + // 0x04000000: 0100 00 0000 00 0000 00 0000 00 0000 + // encoding: xxxx:xxz0 xz00:0100 xz00:0000 xz00:0000 xz00:0001 xz00:0001 + QTest::newRow("non-unicode-3") << QByteArray("\xFC\x84\x80\x80\x80\x80"); + // 0x7fffffff: 1 11 1111 11 1111 11 1111 11 1111 11 1111 + // encoding: xxxx:xxz0 xz00:0100 xz00:0000 xz00:0000 xz00:0001 xz00:0001 + QTest::newRow("non-unicode-4") << QByteArray("\xFD\xBF\xBF\xBF\xBF\xBF"); + + // As seen above, 0xFE and 0xFF never appear: + QTest::newRow("fe") << QByteArray("\xFE"); + QTest::newRow("fe-bis") << QByteArray("\xFE\xBF\xBF\xBF\xBF\xBF\xBF"); + QTest::newRow("ff") << QByteArray("\xFF"); + QTest::newRow("ff-bis") << QByteArray("\xFF\xBF\xBF\xBF\xBF\xBF\xBF\xBF"); + + // some combinations in UTF-8 are invalid even though they have the proper bits set + // these are known as overlong sequences + + // "A": U+0041: 01 00 0001 + // overlong 2: xxz0:0001 xz00:0001 + QTest::newRow("overlong-1-2") << QByteArray("\xC1\x81"); + // overlong 3: xxxz:0000 xz00:0001 xz00:0001 + QTest::newRow("overlong-1-3") << QByteArray("\xE0\x81\x81"); + // overlong 4: xxxx:z000 xz00:0000 xz00:0001 xz00:0001 + QTest::newRow("overlong-1-4") << QByteArray("\xF0\x80\x81\x81"); + // overlong 5: xxxx:xz00 xz00:0000 xz00:0000 xz00:0001 xz00:0001 + QTest::newRow("overlong-1-5") << QByteArray("\xF8\x80\x80\x81\x81"); + // overlong 6: xxxx:xxz0 xz00:0000 xz00:0000 xz00:0000 xz00:0001 xz00:0001 + QTest::newRow("overlong-1-6") << QByteArray("\xFC\x80\x80\x80\x81\x81"); + + // U+0080: 10 00 0000 + // proper encoding: xxz0:0010 xz00:0000 + // overlong 3: xxxz:0000 xz00:0010 xz00:0000 + QTest::newRow("overlong-2-3") << QByteArray("\xE0\x82\x80"); + // overlong 4: xxxx:z000 xz00:0000 xz00:0010 xz00:0000 + QTest::newRow("overlong-2-4") << QByteArray("\xF0\x80\x82\x80"); + // overlong 5: xxxx:xz00 xz00:0000 xz00:0000 xz00:0010 xz00:0000 + QTest::newRow("overlong-2-5") << QByteArray("\xF8\x80\x80\x82\x80"); + // overlong 6: xxxx:xxz0 xz00:0000 xz00:0000 xz00:0000 xz00:0010 xz00:0000 + QTest::newRow("overlong-2-6") << QByteArray("\xFC\x80\x80\x80\x82\x80"); + + // U+0800: 10 0000 00 0000 + // proper encoding: xxxz:0000 xz10:0000 xz00:0000 + // overlong 4: xxxx:z000 xz00:0000 xz10:0000 xz00:0000 + QTest::newRow("overlong-3-4") << QByteArray("\xF0\x80\xA0\x80"); + // overlong 5: xxxx:xz00 xz00:0000 xz00:0000 xz10:0000 xz00:0000 + QTest::newRow("overlong-3-5") << QByteArray("\xF8\x80\x80\xA0\x80"); + // overlong 6: xxxx:xxz0 xz00:0000 xz00:0000 xz00:0000 xz10:0000 xz00:0000 + QTest::newRow("overlong-3-6") << QByteArray("\xFC\x80\x80\x80\xA0\x80"); + + // U+010000: 00 0100 00 0000 00 0000 + // proper encoding: xxxx:z000 xz00:0100 xz00:0000 xz00:0000 + // overlong 5: xxxx:xz00 xz00:0000 xz00:0100 xz00:0000 xz00:0000 + QTest::newRow("overlong-4-5") << QByteArray("\xF8\x80\x84\x80\x80"); + // overlong 6: xxxx:xxz0 xz00:0000 xz00:0000 xz00:0100 xz00:0000 xz00:0000 + QTest::newRow("overlong-4-6") << QByteArray("\xFC\x80\x80\x84\x80\x80"); + +} + +void loadNonCharactersRows() +{ + // Unicode has a couple of "non-characters" that one can use internally + // These characters are allowed for text-interchange (see http://www.unicode.org/versions/corrigendum9.html) + // + // Those are the last two entries each Unicode Plane (U+FFFE, U+FFFF, + // U+1FFFE, U+1FFFF, etc.) as well as the entries between U+FDD0 and + // U+FDEF (inclusive) + + // U+FDD0 through U+FDEF + for (int i = 0; i < 16; ++i) { + char utf8[] = { char(0357), char(0267), char(0220 + i), 0 }; + QString utf16 = QChar(0xfdd0 + i); + QTest::newRow(qPrintable(QString::number(0xfdd0 + i, 16))) << QByteArray(utf8) << utf16; + } + + // the last two in Planes 1 through 16 + for (uint plane = 1; plane <= 16; ++plane) { + for (uint lower = 0xfffe; lower < 0x10000; ++lower) { + uint ucs4 = (plane << 16) | lower; + char utf8[] = { char(0xf0 | uchar(ucs4 >> 18)), + char(0x80 | (uchar(ucs4 >> 12) & 0x3f)), + char(0x80 | (uchar(ucs4 >> 6) & 0x3f)), + char(0x80 | (uchar(ucs4) & 0x3f)), + 0 }; + const auto utf16 = QChar::fromUcs4(ucs4); + + QTest::newRow(qPrintable(QString::number(ucs4, 16))) << QByteArray(utf8) << QStringView{utf16}.toString(); + } + } + + QTest::newRow("fffe") << QByteArray("\xEF\xBF\xBE") << QString(QChar(0xfffe)); + QTest::newRow("ffff") << QByteArray("\xEF\xBF\xBF") << QString(QChar(0xffff)); +} diff --git a/tests/auto/corelib/io/qurlquery/CMakeLists.txt b/tests/auto/corelib/io/qurlquery/CMakeLists.txt new file mode 100644 index 0000000000..c9f5491416 --- /dev/null +++ b/tests/auto/corelib/io/qurlquery/CMakeLists.txt @@ -0,0 +1,20 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qurlquery Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qurlquery LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +qt_internal_add_test(tst_qurlquery + SOURCES + tst_qurlquery.cpp + LIBRARIES + Qt::CorePrivate + Qt::TestPrivate +) diff --git a/tests/auto/corelib/io/qurlquery/qurlquery.pro b/tests/auto/corelib/io/qurlquery/qurlquery.pro deleted file mode 100644 index 68129f356f..0000000000 --- a/tests/auto/corelib/io/qurlquery/qurlquery.pro +++ /dev/null @@ -1,5 +0,0 @@ -QT = core core-private testlib -TARGET = tst_qurlquery -CONFIG += testcase -SOURCES += tst_qurlquery.cpp -DEFINES += SRCDIR=\\\"$$PWD/\\\" diff --git a/tests/auto/corelib/io/qurlquery/tst_qurlquery.cpp b/tests/auto/corelib/io/qurlquery/tst_qurlquery.cpp index 25d392b37e..8360bdbe28 100644 --- a/tests/auto/corelib/io/qurlquery/tst_qurlquery.cpp +++ b/tests/auto/corelib/io/qurlquery/tst_qurlquery.cpp @@ -1,38 +1,18 @@ -/**************************************************************************** -** -** Copyright (C) 2016 Intel Corporation. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2022 The Qt Company Ltd. +// Copyright (C) 2012 Intel Corporation. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QTest> +#include <QtTest/private/qcomparisontesthelper_p.h> #include <QtCore/QUrlQuery> -#include <QtTest/QtTest> typedef QList<QPair<QString, QString> > QueryItems; Q_DECLARE_METATYPE(QueryItems) Q_DECLARE_METATYPE(QUrl::ComponentFormattingOptions) +using namespace Qt::StringLiterals; + class tst_QUrlQuery : public QObject { Q_OBJECT @@ -44,6 +24,9 @@ public: } private Q_SLOTS: + void compareCompiles(); + void compareEquality_data(); + void compareEquality(); void constructing(); void addRemove(); void multiAddRemove(); @@ -67,46 +50,35 @@ private Q_SLOTS: void old_hasQueryItem(); }; -static QString prettyElement(const QString &key, const QString &value) -{ - QString result; - if (key.isNull()) - result += "null -> "; - else - result += '"' % key % "\" -> "; - if (value.isNull()) - result += "null"; - else - result += '"' % value % '"'; - return result; -} - -static QString prettyPair(QList<QPair<QString, QString> >::const_iterator it) +static QString prettyPair(const QPair<QString, QString> &pair) { - return prettyElement(it->first, it->second); + const auto represent = [](const QString &s) { + return s.isNull() ? u"null"_s : u'"' + s + u'"'; + }; + return represent(pair.first) + " -> "_L1 + represent(pair.second); } -template <typename T> -static QByteArray prettyList(const T &items) +static QByteArray prettyList(const QueryItems &items) { - QString result = "("; - bool first = true; - typename T::const_iterator it = items.constBegin(); - for ( ; it != items.constEnd(); ++it) { - if (!first) - result += ", "; - first = false; - result += prettyPair(it); - } - result += QLatin1Char(')'); + if (items.isEmpty()) + return "()"; + auto it = items.constBegin(); + QString result = u'(' + prettyPair(*it); + for (++it; it != items.constEnd(); ++it) + result += ", "_L1 + prettyPair(*it); + result += u')'; return result.toLocal8Bit(); } -static bool compare(const QList<QPair<QString, QString> > &actual, const QueryItems &expected, +static bool compare(const QueryItems &actual, const QueryItems &expected, const char *actualStr, const char *expectedStr, const char *file, int line) { + auto formatter = [](const void *val) -> const char * { + const QueryItems items = *static_cast<const QueryItems *>(val); + return qstrdup(prettyList(items).constData()); + }; return QTest::compare_helper(actual == expected, "Compared values are not the same", - qstrdup(prettyList(actual)), qstrdup(prettyList(expected).data()), + &actual, &expected, formatter, formatter, actualStr, expectedStr, file, line); } @@ -155,6 +127,48 @@ static QUrlQuery emptyQuery() return QUrlQuery(); } +void tst_QUrlQuery::compareCompiles() +{ + QTestPrivate::testEqualityOperatorsCompile<QUrlQuery>(); +} + +void tst_QUrlQuery::compareEquality_data() +{ + QTest::addColumn<QUrlQuery>("url1"); + QTest::addColumn<QUrlQuery>("url2"); + QTest::addColumn<bool>("equal"); + + QTest::newRow("empty-empty") << QUrlQuery() << QUrlQuery() << true; + + QUrlQuery notEmpty; + notEmpty.addQueryItem("a", "b"); + QTest::newRow("empty-notEmpty") << QUrlQuery() << notEmpty << false; + + QUrlQuery notEmpty_copy = notEmpty; + QTest::newRow("sameItems") << notEmpty_copy << notEmpty << true; + + QUrlQuery notEmpty_modified = notEmpty; + notEmpty_modified.addQueryItem("c", "d"); + QTest::newRow("addedItems") << notEmpty_copy << notEmpty_modified << false; + + QUrlQuery notEmpty2; + notEmpty2.addQueryItem("c", "d"); + QTest::newRow("differentItems") << notEmpty2 << notEmpty << false; + + QUrlQuery differentPairDelimiters; + differentPairDelimiters.setQueryDelimiters('(', ')'); + QTest::newRow("defaultDelimiters-differentDelimiters") << QUrlQuery() << differentPairDelimiters + << false; +} + +void tst_QUrlQuery::compareEquality() +{ + QFETCH(QUrlQuery, url1); + QFETCH(QUrlQuery, url2); + QFETCH(bool, equal); + QT_TEST_EQUALITY_OPS(url1, url2, equal); +} + void tst_QUrlQuery::constructing() { QUrlQuery empty; @@ -173,7 +187,7 @@ void tst_QUrlQuery::constructing() QVERIFY(!copy.isDetached()); QCOMPARE(copy, empty); QCOMPARE(qHash(copy), qHash(empty)); - QVERIFY(!(copy != empty)); + QT_TEST_EQUALITY_OPS(copy, empty, true); copy = empty; QCOMPARE(copy, empty); @@ -205,20 +219,50 @@ void tst_QUrlQuery::constructing() other.addQueryItem("a", "b"); QVERIFY(!other.isEmpty()); QVERIFY(other.isDetached()); - QVERIFY(other != empty); - QVERIFY(!(other == empty)); + QCOMPARE_NE(other, empty); + QT_TEST_EQUALITY_OPS(other, empty, false); + // copy-construct QUrlQuery copy(other); QCOMPARE(copy, other); copy.clear(); QVERIFY(copy.isEmpty()); - QVERIFY(copy != other); + QCOMPARE_NE(copy, other); + // copy-assign copy = other; QVERIFY(!copy.isEmpty()); QCOMPARE(copy, other); + // move-construct + QUrlQuery moved(std::move(other)); + QCOMPARE(moved, copy); + + // self move-assign + { + auto &self = moved; // prevent -Wself-move + moved = std::move(self); + } + QCOMPARE(moved, copy); + + // self move-assign of moved-from (Hinnant Criterion) + { + auto &self = other; // prevent -Wself-move + other = std::move(self); + } + // shouldn't crash; here, or further down + + // copy-assign to moved-from object + other = copy; + QCOMPARE(other, copy); + QCOMPARE(other, moved); + + // move-assign + moved = std::move(other); + QCOMPARE(moved, copy); + + // (move-)assign default-constructed copy = QUrlQuery(); QVERIFY(copy.isEmpty()); @@ -246,22 +290,25 @@ void tst_QUrlQuery::constructing() void tst_QUrlQuery::addRemove() { QUrlQuery query; + QCOMPARE(query, query); { // one item query.addQueryItem("a", "b"); QVERIFY(!query.isEmpty()); QVERIFY(query.hasQueryItem("a")); + QCOMPARE_NE(query, QUrlQuery()); QCOMPARE(query.queryItemValue("a"), QString("b")); QCOMPARE(query.allQueryItemValues("a"), QStringList() << "b"); QList<QPair<QString, QString> > allItems = query.queryItems(); - QCOMPARE(allItems.count(), 1); + QCOMPARE(allItems.size(), 1); QCOMPARE(allItems.at(0).first, QString("a")); QCOMPARE(allItems.at(0).second, QString("b")); } QUrlQuery original = query; + QCOMPARE(query, original); { // two items @@ -274,12 +321,12 @@ void tst_QUrlQuery::addRemove() QCOMPARE(query.allQueryItemValues("c"), QStringList() << "d"); QList<QPair<QString, QString> > allItems = query.queryItems(); - QCOMPARE(allItems.count(), 2); + QCOMPARE(allItems.size(), 2); QVERIFY(allItems.contains(qItem("a", "b"))); QVERIFY(allItems.contains(qItem("c", "d"))); - QVERIFY(query != original); - QVERIFY(!(query == original)); + QCOMPARE_NE(query, original); + QT_TEST_EQUALITY_OPS(query, original, false); } { @@ -297,12 +344,12 @@ void tst_QUrlQuery::addRemove() QCOMPARE(query.allQueryItemValues("a"), QStringList() << "b"); QList<QPair<QString, QString> > allItems = query.queryItems(); - QCOMPARE(allItems.count(), 1); + QCOMPARE(allItems.size(), 1); QCOMPARE(allItems.at(0).first, QString("a")); QCOMPARE(allItems.at(0).second, QString("b")); QCOMPARE(query, original); - QVERIFY(!(query != original)); + QT_TEST_EQUALITY_OPS(query, original, true); QCOMPARE(qHash(query), qHash(original)); } @@ -321,12 +368,12 @@ void tst_QUrlQuery::addRemove() QCOMPARE(query.allQueryItemValues("e"), QStringList() << emptyButNotNull); QList<QPair<QString, QString> > allItems = query.queryItems(); - QCOMPARE(allItems.count(), 2); + QCOMPARE(allItems.size(), 2); QVERIFY(allItems.contains(qItem("a", "b"))); QVERIFY(allItems.contains(qItem("e", emptyButNotNull))); - QVERIFY(query != original); - QVERIFY(!(query == original)); + QCOMPARE_NE(query, original); + QT_TEST_EQUALITY_OPS(query, original, false); } { @@ -334,6 +381,9 @@ void tst_QUrlQuery::addRemove() query.removeQueryItem("a"); query.removeQueryItem("e"); QVERIFY(query.isEmpty()); + QVERIFY(query.isDetached()); + QCOMPARE_NE(query, original); + QCOMPARE(query, QUrlQuery()); } } @@ -536,12 +586,11 @@ void tst_QUrlQuery::reconstructQuery_data() baselist << qItem("a", "b") << qItem("c", "d"); QTest::newRow("2-ab-cd") << "a=b&c=d" << baselist; - // the same entry multiply defined + // The same entry multiply defined QTest::newRow("2-a-a") << "a&a" << (QueryItems() << qItem("a", QString()) << qItem("a", QString())); QTest::newRow("2-ab-ab") << "a=b&a=b" << (QueryItems() << qItem("a", "b") << qItem("a", "b")); QTest::newRow("2-ab-ac") << "a=b&a=c" << (QueryItems() << qItem("a", "b") << qItem("a", "c")); QTest::newRow("2-ac-ab") << "a=c&a=b" << (QueryItems() << qItem("a", "c") << qItem("a", "b")); - QTest::newRow("2-ab-cd") << "a=b&c=d" << (QueryItems() << qItem("a", "b") << qItem("c", "d")); QTest::newRow("2-cd-ab") << "c=d&a=b" << (QueryItems() << qItem("c", "d") << qItem("a", "b")); QueryItems list2 = baselist + qItem("somekey", QString()); diff --git a/tests/auto/corelib/io/qurluts46/CMakeLists.txt b/tests/auto/corelib/io/qurluts46/CMakeLists.txt new file mode 100644 index 0000000000..ac3f7cac48 --- /dev/null +++ b/tests/auto/corelib/io/qurluts46/CMakeLists.txt @@ -0,0 +1,19 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qurluts46 Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qurluts46 LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +qt_internal_add_test(tst_qurluts46 + SOURCES + tst_qurluts46.cpp + TESTDATA + testdata/IdnaTestV2.txt +) diff --git a/tests/auto/corelib/io/qurluts46/testdata/IdnaTestV2.txt b/tests/auto/corelib/io/qurluts46/testdata/IdnaTestV2.txt new file mode 100644 index 0000000000..5c1e6a880f --- /dev/null +++ b/tests/auto/corelib/io/qurluts46/testdata/IdnaTestV2.txt @@ -0,0 +1,6374 @@ +# IdnaTestV2.txt +# Date: 2023-08-15, 23:21:16 GMT +# © 2023 Unicode®, Inc. +# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +# For terms of use, see https://www.unicode.org/terms_of_use.html +# +# Unicode IDNA Compatible Preprocessing for UTS #46 +# Version: 15.1.0 +# +# For documentation and usage, see https://www.unicode.org/reports/tr46 +# +# Test cases for verifying UTS #46 conformance. +# +# FORMAT: +# +# This file is in UTF-8, where characters may be escaped using the \uXXXX or \x{XXXX} +# convention where they could otherwise have a confusing display. +# These characters include control codes and combining marks. +# +# Columns (c1, c2,...) are separated by semicolons. +# Leading and trailing spaces and tabs in each column are ignored. +# Comments are indicated with hash marks. +# +# Column 1: source - The source string to be tested +# Column 2: toUnicode - The result of applying toUnicode to the source, +# with Transitional_Processing=false. +# A blank value means the same as the source value. +# Column 3: toUnicodeStatus - A set of status codes, each corresponding to a particular test. +# A blank value means [] (no errors). +# Column 4: toAsciiN - The result of applying toASCII to the source, +# with Transitional_Processing=false. +# A blank value means the same as the toUnicode value. +# Column 5: toAsciiNStatus - A set of status codes, each corresponding to a particular test. +# A blank value means the same as the toUnicodeStatus value. +# An explicit [] means no errors. +# Column 6: toAsciiT - The result of applying toASCII to the source, +# with Transitional_Processing=true. +# A blank value means the same as the toAsciiN value. +# Column 7: toAsciiTStatus - A set of status codes, each corresponding to a particular test. +# A blank value means the same as the toAsciiNStatus value. +# An explicit [] means no errors. +# +# The line comments currently show visible characters that have been escaped. +# +# CONFORMANCE: +# +# To test for conformance to UTS #46, an implementation will perform the toUnicode, toAsciiN, and +# toAsciiT operations on the source string, then verify the resulting strings and relevant status +# values. +# +# If the implementation converts illegal code points into U+FFFD (as per +# https://www.unicode.org/reports/tr46/#Processing) then the string comparisons need to +# account for that by treating U+FFFD in the actual value as a wildcard when comparing to the +# expected value in the test file. +# +# A status in toUnicode, toAsciiN or toAsciiT is indicated by a value in square brackets, +# such as "[B5 B6]". In such a case, the contents is a list of status codes based on the step +# numbers in UTS #46 and IDNA2008, with the following formats. +# +# Pn for Section 4 Processing step n +# Vn for 4.1 Validity Criteria step n +# U1 for UseSTD3ASCIIRules +# An for 4.2 ToASCII step n +# Bn for Bidi (in IDNA2008) +# Cn for ContextJ (in IDNA2008) +# Xn for toUnicode issues (see below) +# +# Thus C1 = Appendix A.1. ZERO WIDTH NON-JOINER, and C2 = Appendix A.2. ZERO WIDTH JOINER. +# (The CONTEXTO tests are optional for client software, and not tested here.) +# +# Implementations that allow values of particular input flags to be false would ignore +# the corresponding status codes listed in the table below when testing for errors. +# +# VerifyDnsLength: P4 +# CheckHyphens: V2, V3 +# CheckBidi: V8 +# CheckJoiners: V7 +# UseSTD3ASCIIRules: U1 +# +# Implementations may be more strict than the default settings for UTS #46. +# In particular, an implementation conformant to IDNA2008 would disallow the input for lines +# marked with NV8. +# +# Implementations need only record that there is an error: they need not reproduce the +# precise status codes (after removing the ignored status values). +# +# Compatibility errors +# +# The special error codes X3 and X4_2 are now returned where a toASCII error code +# was formerly being generated in toUnicode due to an empty label. +# +# A3 was being generated in the following cases (in addition to its normal usage). +# • an empty label in toUnicode. In this case, it is replaced by X3. +# +# A4_2 was being generated in the following case (in addition to its normal usage). +# • an empty label in V8 (CheckBidi). In this case, it is being replaced by X4_2. +# ============================================================================================ +fass.de; ; ; ; ; ; # fass.de +faß.de; ; ; xn--fa-hia.de; ; fass.de; # faß.de +Faß.de; faß.de; ; xn--fa-hia.de; ; fass.de; # faß.de +xn--fa-hia.de; faß.de; ; xn--fa-hia.de; ; ; # faß.de + +# BIDI TESTS + +à\u05D0; ; [B5, B6]; xn--0ca24w; ; ; # àא +a\u0300\u05D0; à\u05D0; [B5, B6]; xn--0ca24w; ; ; # àא +A\u0300\u05D0; à\u05D0; [B5, B6]; xn--0ca24w; ; ; # àא +À\u05D0; à\u05D0; [B5, B6]; xn--0ca24w; ; ; # àא +xn--0ca24w; à\u05D0; [B5, B6]; xn--0ca24w; ; ; # àא +0à.\u05D0; ; [B1]; xn--0-sfa.xn--4db; ; ; # 0à.א +0a\u0300.\u05D0; 0à.\u05D0; [B1]; xn--0-sfa.xn--4db; ; ; # 0à.א +0A\u0300.\u05D0; 0à.\u05D0; [B1]; xn--0-sfa.xn--4db; ; ; # 0à.א +0À.\u05D0; 0à.\u05D0; [B1]; xn--0-sfa.xn--4db; ; ; # 0à.א +xn--0-sfa.xn--4db; 0à.\u05D0; [B1]; xn--0-sfa.xn--4db; ; ; # 0à.א +à.\u05D0\u0308; ; ; xn--0ca.xn--ssa73l; ; ; # à.א̈ +a\u0300.\u05D0\u0308; à.\u05D0\u0308; ; xn--0ca.xn--ssa73l; ; ; # à.א̈ +A\u0300.\u05D0\u0308; à.\u05D0\u0308; ; xn--0ca.xn--ssa73l; ; ; # à.א̈ +À.\u05D0\u0308; à.\u05D0\u0308; ; xn--0ca.xn--ssa73l; ; ; # à.א̈ +xn--0ca.xn--ssa73l; à.\u05D0\u0308; ; xn--0ca.xn--ssa73l; ; ; # à.א̈ +à.\u05D00\u0660\u05D0; ; [B4]; xn--0ca.xn--0-zhcb98c; ; ; # à.א0٠א +a\u0300.\u05D00\u0660\u05D0; à.\u05D00\u0660\u05D0; [B4]; xn--0ca.xn--0-zhcb98c; ; ; # à.א0٠א +A\u0300.\u05D00\u0660\u05D0; à.\u05D00\u0660\u05D0; [B4]; xn--0ca.xn--0-zhcb98c; ; ; # à.א0٠א +À.\u05D00\u0660\u05D0; à.\u05D00\u0660\u05D0; [B4]; xn--0ca.xn--0-zhcb98c; ; ; # à.א0٠א +xn--0ca.xn--0-zhcb98c; à.\u05D00\u0660\u05D0; [B4]; xn--0ca.xn--0-zhcb98c; ; ; # à.א0٠א +\u0308.\u05D0; ; [B1, V5]; xn--ssa.xn--4db; ; ; # ̈.א +xn--ssa.xn--4db; \u0308.\u05D0; [B1, V5]; xn--ssa.xn--4db; ; ; # ̈.א +à.\u05D00\u0660; ; [B4]; xn--0ca.xn--0-zhc74b; ; ; # à.א0٠ +a\u0300.\u05D00\u0660; à.\u05D00\u0660; [B4]; xn--0ca.xn--0-zhc74b; ; ; # à.א0٠ +A\u0300.\u05D00\u0660; à.\u05D00\u0660; [B4]; xn--0ca.xn--0-zhc74b; ; ; # à.א0٠ +À.\u05D00\u0660; à.\u05D00\u0660; [B4]; xn--0ca.xn--0-zhc74b; ; ; # à.א0٠ +xn--0ca.xn--0-zhc74b; à.\u05D00\u0660; [B4]; xn--0ca.xn--0-zhc74b; ; ; # à.א0٠ +àˇ.\u05D0; ; [B6]; xn--0ca88g.xn--4db; ; ; # àˇ.א +a\u0300ˇ.\u05D0; àˇ.\u05D0; [B6]; xn--0ca88g.xn--4db; ; ; # àˇ.א +A\u0300ˇ.\u05D0; àˇ.\u05D0; [B6]; xn--0ca88g.xn--4db; ; ; # àˇ.א +Àˇ.\u05D0; àˇ.\u05D0; [B6]; xn--0ca88g.xn--4db; ; ; # àˇ.א +xn--0ca88g.xn--4db; àˇ.\u05D0; [B6]; xn--0ca88g.xn--4db; ; ; # àˇ.א +à\u0308.\u05D0; ; ; xn--0ca81i.xn--4db; ; ; # à̈.א +a\u0300\u0308.\u05D0; à\u0308.\u05D0; ; xn--0ca81i.xn--4db; ; ; # à̈.א +A\u0300\u0308.\u05D0; à\u0308.\u05D0; ; xn--0ca81i.xn--4db; ; ; # à̈.א +À\u0308.\u05D0; à\u0308.\u05D0; ; xn--0ca81i.xn--4db; ; ; # à̈.א +xn--0ca81i.xn--4db; à\u0308.\u05D0; ; xn--0ca81i.xn--4db; ; ; # à̈.א + +# CONTEXT TESTS + +a\u200Cb; ; [C1]; xn--ab-j1t; ; ab; [] # ab +A\u200CB; a\u200Cb; [C1]; xn--ab-j1t; ; ab; [] # ab +A\u200Cb; a\u200Cb; [C1]; xn--ab-j1t; ; ab; [] # ab +ab; ; ; ; ; ; # ab +xn--ab-j1t; a\u200Cb; [C1]; xn--ab-j1t; ; ; # ab +a\u094D\u200Cb; ; ; xn--ab-fsf604u; ; xn--ab-fsf; # a्b +A\u094D\u200CB; a\u094D\u200Cb; ; xn--ab-fsf604u; ; xn--ab-fsf; # a्b +A\u094D\u200Cb; a\u094D\u200Cb; ; xn--ab-fsf604u; ; xn--ab-fsf; # a्b +xn--ab-fsf; a\u094Db; ; xn--ab-fsf; ; ; # a्b +a\u094Db; ; ; xn--ab-fsf; ; ; # a्b +A\u094DB; a\u094Db; ; xn--ab-fsf; ; ; # a्b +A\u094Db; a\u094Db; ; xn--ab-fsf; ; ; # a्b +xn--ab-fsf604u; a\u094D\u200Cb; ; xn--ab-fsf604u; ; ; # a्b +\u0308\u200C\u0308\u0628b; ; [B1, C1, V5]; xn--b-bcba413a2w8b; ; xn--b-bcba413a; [B1, V5] # ̈̈بb +\u0308\u200C\u0308\u0628B; \u0308\u200C\u0308\u0628b; [B1, C1, V5]; xn--b-bcba413a2w8b; ; xn--b-bcba413a; [B1, V5] # ̈̈بb +xn--b-bcba413a; \u0308\u0308\u0628b; [B1, V5]; xn--b-bcba413a; ; ; # ̈̈بb +xn--b-bcba413a2w8b; \u0308\u200C\u0308\u0628b; [B1, C1, V5]; xn--b-bcba413a2w8b; ; ; # ̈̈بb +a\u0628\u0308\u200C\u0308; ; [B5, B6, C1]; xn--a-ccba213a5w8b; ; xn--a-ccba213a; [B5, B6] # aب̈̈ +A\u0628\u0308\u200C\u0308; a\u0628\u0308\u200C\u0308; [B5, B6, C1]; xn--a-ccba213a5w8b; ; xn--a-ccba213a; [B5, B6] # aب̈̈ +xn--a-ccba213a; a\u0628\u0308\u0308; [B5, B6]; xn--a-ccba213a; ; ; # aب̈̈ +xn--a-ccba213a5w8b; a\u0628\u0308\u200C\u0308; [B5, B6, C1]; xn--a-ccba213a5w8b; ; ; # aب̈̈ +a\u0628\u0308\u200C\u0308\u0628b; ; [B5]; xn--ab-uuba211bca8057b; ; xn--ab-uuba211bca; # aب̈̈بb +A\u0628\u0308\u200C\u0308\u0628B; a\u0628\u0308\u200C\u0308\u0628b; [B5]; xn--ab-uuba211bca8057b; ; xn--ab-uuba211bca; # aب̈̈بb +A\u0628\u0308\u200C\u0308\u0628b; a\u0628\u0308\u200C\u0308\u0628b; [B5]; xn--ab-uuba211bca8057b; ; xn--ab-uuba211bca; # aب̈̈بb +xn--ab-uuba211bca; a\u0628\u0308\u0308\u0628b; [B5]; xn--ab-uuba211bca; ; ; # aب̈̈بb +xn--ab-uuba211bca8057b; a\u0628\u0308\u200C\u0308\u0628b; [B5]; xn--ab-uuba211bca8057b; ; ; # aب̈̈بb +a\u200Db; ; [C2]; xn--ab-m1t; ; ab; [] # ab +A\u200DB; a\u200Db; [C2]; xn--ab-m1t; ; ab; [] # ab +A\u200Db; a\u200Db; [C2]; xn--ab-m1t; ; ab; [] # ab +xn--ab-m1t; a\u200Db; [C2]; xn--ab-m1t; ; ; # ab +a\u094D\u200Db; ; ; xn--ab-fsf014u; ; xn--ab-fsf; # a्b +A\u094D\u200DB; a\u094D\u200Db; ; xn--ab-fsf014u; ; xn--ab-fsf; # a्b +A\u094D\u200Db; a\u094D\u200Db; ; xn--ab-fsf014u; ; xn--ab-fsf; # a्b +xn--ab-fsf014u; a\u094D\u200Db; ; xn--ab-fsf014u; ; ; # a्b +\u0308\u200D\u0308\u0628b; ; [B1, C2, V5]; xn--b-bcba413a7w8b; ; xn--b-bcba413a; [B1, V5] # ̈̈بb +\u0308\u200D\u0308\u0628B; \u0308\u200D\u0308\u0628b; [B1, C2, V5]; xn--b-bcba413a7w8b; ; xn--b-bcba413a; [B1, V5] # ̈̈بb +xn--b-bcba413a7w8b; \u0308\u200D\u0308\u0628b; [B1, C2, V5]; xn--b-bcba413a7w8b; ; ; # ̈̈بb +a\u0628\u0308\u200D\u0308; ; [B5, B6, C2]; xn--a-ccba213abx8b; ; xn--a-ccba213a; [B5, B6] # aب̈̈ +A\u0628\u0308\u200D\u0308; a\u0628\u0308\u200D\u0308; [B5, B6, C2]; xn--a-ccba213abx8b; ; xn--a-ccba213a; [B5, B6] # aب̈̈ +xn--a-ccba213abx8b; a\u0628\u0308\u200D\u0308; [B5, B6, C2]; xn--a-ccba213abx8b; ; ; # aب̈̈ +a\u0628\u0308\u200D\u0308\u0628b; ; [B5, C2]; xn--ab-uuba211bca5157b; ; xn--ab-uuba211bca; [B5] # aب̈̈بb +A\u0628\u0308\u200D\u0308\u0628B; a\u0628\u0308\u200D\u0308\u0628b; [B5, C2]; xn--ab-uuba211bca5157b; ; xn--ab-uuba211bca; [B5] # aب̈̈بb +A\u0628\u0308\u200D\u0308\u0628b; a\u0628\u0308\u200D\u0308\u0628b; [B5, C2]; xn--ab-uuba211bca5157b; ; xn--ab-uuba211bca; [B5] # aب̈̈بb +xn--ab-uuba211bca5157b; a\u0628\u0308\u200D\u0308\u0628b; [B5, C2]; xn--ab-uuba211bca5157b; ; ; # aب̈̈بb + +# SELECTED TESTS + +¡; ; ; xn--7a; ; ; # ¡ +xn--7a; ¡; ; xn--7a; ; ; # ¡ +᧚; ; ; xn--pkf; ; ; # ᧚ +xn--pkf; ᧚; ; xn--pkf; ; ; # ᧚ +。; .; [X4_2]; ; [A4_2]; ; # . +.; ; [X4_2]; ; [A4_2]; ; # . +ꭠ; ; ; xn--3y9a; ; ; # ꭠ +xn--3y9a; ꭠ; ; xn--3y9a; ; ; # ꭠ +1234567890ä1234567890123456789012345678901234567890123456; ; ; xn--12345678901234567890123456789012345678901234567890123456-fxe; [A4_2]; ; # 1234567890ä1234567890123456789012345678901234567890123456 +1234567890a\u03081234567890123456789012345678901234567890123456; 1234567890ä1234567890123456789012345678901234567890123456; ; xn--12345678901234567890123456789012345678901234567890123456-fxe; [A4_2]; ; # 1234567890ä1234567890123456789012345678901234567890123456 +1234567890A\u03081234567890123456789012345678901234567890123456; 1234567890ä1234567890123456789012345678901234567890123456; ; xn--12345678901234567890123456789012345678901234567890123456-fxe; [A4_2]; ; # 1234567890ä1234567890123456789012345678901234567890123456 +1234567890Ä1234567890123456789012345678901234567890123456; 1234567890ä1234567890123456789012345678901234567890123456; ; xn--12345678901234567890123456789012345678901234567890123456-fxe; [A4_2]; ; # 1234567890ä1234567890123456789012345678901234567890123456 +xn--12345678901234567890123456789012345678901234567890123456-fxe; 1234567890ä1234567890123456789012345678901234567890123456; ; xn--12345678901234567890123456789012345678901234567890123456-fxe; [A4_2]; ; # 1234567890ä1234567890123456789012345678901234567890123456 +www.eXample.cOm; www.example.com; ; ; ; ; # www.example.com +Bücher.de; bücher.de; ; xn--bcher-kva.de; ; ; # bücher.de +Bu\u0308cher.de; bücher.de; ; xn--bcher-kva.de; ; ; # bücher.de +bu\u0308cher.de; bücher.de; ; xn--bcher-kva.de; ; ; # bücher.de +bücher.de; ; ; xn--bcher-kva.de; ; ; # bücher.de +BÜCHER.DE; bücher.de; ; xn--bcher-kva.de; ; ; # bücher.de +BU\u0308CHER.DE; bücher.de; ; xn--bcher-kva.de; ; ; # bücher.de +xn--bcher-kva.de; bücher.de; ; xn--bcher-kva.de; ; ; # bücher.de +ÖBB; öbb; ; xn--bb-eka; ; ; # öbb +O\u0308BB; öbb; ; xn--bb-eka; ; ; # öbb +o\u0308bb; öbb; ; xn--bb-eka; ; ; # öbb +öbb; ; ; xn--bb-eka; ; ; # öbb +Öbb; öbb; ; xn--bb-eka; ; ; # öbb +O\u0308bb; öbb; ; xn--bb-eka; ; ; # öbb +xn--bb-eka; öbb; ; xn--bb-eka; ; ; # öbb +FAẞ.de; faß.de; ; xn--fa-hia.de; ; fass.de; # faß.de +FAẞ.DE; faß.de; ; xn--fa-hia.de; ; fass.de; # faß.de +βόλος.com; ; ; xn--nxasmm1c.com; ; xn--nxasmq6b.com; # βόλος.com +βο\u0301λος.com; βόλος.com; ; xn--nxasmm1c.com; ; xn--nxasmq6b.com; # βόλος.com +ΒΟ\u0301ΛΟΣ.COM; βόλοσ.com; ; xn--nxasmq6b.com; ; ; # βόλοσ.com +ΒΌΛΟΣ.COM; βόλοσ.com; ; xn--nxasmq6b.com; ; ; # βόλοσ.com +βόλοσ.com; ; ; xn--nxasmq6b.com; ; ; # βόλοσ.com +βο\u0301λοσ.com; βόλοσ.com; ; xn--nxasmq6b.com; ; ; # βόλοσ.com +Βο\u0301λοσ.com; βόλοσ.com; ; xn--nxasmq6b.com; ; ; # βόλοσ.com +Βόλοσ.com; βόλοσ.com; ; xn--nxasmq6b.com; ; ; # βόλοσ.com +xn--nxasmq6b.com; βόλοσ.com; ; xn--nxasmq6b.com; ; ; # βόλοσ.com +Βο\u0301λος.com; βόλος.com; ; xn--nxasmm1c.com; ; xn--nxasmq6b.com; # βόλος.com +Βόλος.com; βόλος.com; ; xn--nxasmm1c.com; ; xn--nxasmq6b.com; # βόλος.com +xn--nxasmm1c.com; βόλος.com; ; xn--nxasmm1c.com; ; ; # βόλος.com +xn--nxasmm1c; βόλος; ; xn--nxasmm1c; ; ; # βόλος +βόλος; ; ; xn--nxasmm1c; ; xn--nxasmq6b; # βόλος +βο\u0301λος; βόλος; ; xn--nxasmm1c; ; xn--nxasmq6b; # βόλος +ΒΟ\u0301ΛΟΣ; βόλοσ; ; xn--nxasmq6b; ; ; # βόλοσ +ΒΌΛΟΣ; βόλοσ; ; xn--nxasmq6b; ; ; # βόλοσ +βόλοσ; ; ; xn--nxasmq6b; ; ; # βόλοσ +βο\u0301λοσ; βόλοσ; ; xn--nxasmq6b; ; ; # βόλοσ +Βο\u0301λοσ; βόλοσ; ; xn--nxasmq6b; ; ; # βόλοσ +Βόλοσ; βόλοσ; ; xn--nxasmq6b; ; ; # βόλοσ +xn--nxasmq6b; βόλοσ; ; xn--nxasmq6b; ; ; # βόλοσ +Βόλος; βόλος; ; xn--nxasmm1c; ; xn--nxasmq6b; # βόλος +Βο\u0301λος; βόλος; ; xn--nxasmm1c; ; xn--nxasmq6b; # βόλος +www.ශ\u0DCA\u200Dර\u0DD3.com; ; ; www.xn--10cl1a0b660p.com; ; www.xn--10cl1a0b.com; # www.ශ්රී.com +WWW.ශ\u0DCA\u200Dර\u0DD3.COM; www.ශ\u0DCA\u200Dර\u0DD3.com; ; www.xn--10cl1a0b660p.com; ; www.xn--10cl1a0b.com; # www.ශ්රී.com +Www.ශ\u0DCA\u200Dර\u0DD3.com; www.ශ\u0DCA\u200Dර\u0DD3.com; ; www.xn--10cl1a0b660p.com; ; www.xn--10cl1a0b.com; # www.ශ්රී.com +www.xn--10cl1a0b.com; www.ශ\u0DCAර\u0DD3.com; ; www.xn--10cl1a0b.com; ; ; # www.ශ්රී.com +www.ශ\u0DCAර\u0DD3.com; ; ; www.xn--10cl1a0b.com; ; ; # www.ශ්රී.com +WWW.ශ\u0DCAර\u0DD3.COM; www.ශ\u0DCAර\u0DD3.com; ; www.xn--10cl1a0b.com; ; ; # www.ශ්රී.com +Www.ශ\u0DCAර\u0DD3.com; www.ශ\u0DCAර\u0DD3.com; ; www.xn--10cl1a0b.com; ; ; # www.ශ්රී.com +www.xn--10cl1a0b660p.com; www.ශ\u0DCA\u200Dර\u0DD3.com; ; www.xn--10cl1a0b660p.com; ; ; # www.ශ්රී.com +\u0646\u0627\u0645\u0647\u200C\u0627\u06CC; ; ; xn--mgba3gch31f060k; ; xn--mgba3gch31f; # نامهای +xn--mgba3gch31f; \u0646\u0627\u0645\u0647\u0627\u06CC; ; xn--mgba3gch31f; ; ; # نامهای +\u0646\u0627\u0645\u0647\u0627\u06CC; ; ; xn--mgba3gch31f; ; ; # نامهای +xn--mgba3gch31f060k; \u0646\u0627\u0645\u0647\u200C\u0627\u06CC; ; xn--mgba3gch31f060k; ; ; # نامهای +xn--mgba3gch31f060k.com; \u0646\u0627\u0645\u0647\u200C\u0627\u06CC.com; ; xn--mgba3gch31f060k.com; ; ; # نامهای.com +\u0646\u0627\u0645\u0647\u200C\u0627\u06CC.com; ; ; xn--mgba3gch31f060k.com; ; xn--mgba3gch31f.com; # نامهای.com +\u0646\u0627\u0645\u0647\u200C\u0627\u06CC.COM; \u0646\u0627\u0645\u0647\u200C\u0627\u06CC.com; ; xn--mgba3gch31f060k.com; ; xn--mgba3gch31f.com; # نامهای.com +xn--mgba3gch31f.com; \u0646\u0627\u0645\u0647\u0627\u06CC.com; ; xn--mgba3gch31f.com; ; ; # نامهای.com +\u0646\u0627\u0645\u0647\u0627\u06CC.com; ; ; xn--mgba3gch31f.com; ; ; # نامهای.com +\u0646\u0627\u0645\u0647\u0627\u06CC.COM; \u0646\u0627\u0645\u0647\u0627\u06CC.com; ; xn--mgba3gch31f.com; ; ; # نامهای.com +a.b.c。d。; a.b.c.d.; ; ; ; ; # a.b.c.d. +a.b.c。d。; a.b.c.d.; ; ; ; ; # a.b.c.d. +A.B.C。D。; a.b.c.d.; ; ; ; ; # a.b.c.d. +A.b.c。D。; a.b.c.d.; ; ; ; ; # a.b.c.d. +a.b.c.d.; ; ; ; ; ; # a.b.c.d. +A.B.C。D。; a.b.c.d.; ; ; ; ; # a.b.c.d. +A.b.c。D。; a.b.c.d.; ; ; ; ; # a.b.c.d. +U\u0308.xn--tda; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü +Ü.xn--tda; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü +ü.xn--tda; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü +u\u0308.xn--tda; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü +U\u0308.XN--TDA; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü +Ü.XN--TDA; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü +Ü.xn--Tda; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü +U\u0308.xn--Tda; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü +xn--tda.xn--tda; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü +ü.ü; ; ; xn--tda.xn--tda; ; ; # ü.ü +u\u0308.u\u0308; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü +U\u0308.U\u0308; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü +Ü.Ü; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü +Ü.ü; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü +U\u0308.u\u0308; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü +xn--u-ccb; u\u0308; [V1]; xn--u-ccb; ; ; # ü +a⒈com; ; [V6]; xn--acom-0w1b; ; ; # a⒈com +a1.com; ; ; ; ; ; # a1.com +A⒈COM; a⒈com; [V6]; xn--acom-0w1b; ; ; # a⒈com +A⒈Com; a⒈com; [V6]; xn--acom-0w1b; ; ; # a⒈com +xn--acom-0w1b; a⒈com; [V6]; xn--acom-0w1b; ; ; # a⒈com +xn--a-ecp.ru; a⒈.ru; [V6]; xn--a-ecp.ru; ; ; # a⒈.ru +xn--0.pt; ; [P4]; ; ; ; # xn--0.pt +xn--a.pt; \u0080.pt; [V6]; xn--a.pt; ; ; # .pt +xn--a-Ä.pt; xn--a-ä.pt; [P4]; xn--xn--a--gua.pt; ; ; # xn--a-ä.pt +xn--a-A\u0308.pt; xn--a-ä.pt; [P4]; xn--xn--a--gua.pt; ; ; # xn--a-ä.pt +xn--a-a\u0308.pt; xn--a-ä.pt; [P4]; xn--xn--a--gua.pt; ; ; # xn--a-ä.pt +xn--a-ä.pt; ; [P4]; xn--xn--a--gua.pt; ; ; # xn--a-ä.pt +XN--A-Ä.PT; xn--a-ä.pt; [P4]; xn--xn--a--gua.pt; ; ; # xn--a-ä.pt +XN--A-A\u0308.PT; xn--a-ä.pt; [P4]; xn--xn--a--gua.pt; ; ; # xn--a-ä.pt +Xn--A-A\u0308.pt; xn--a-ä.pt; [P4]; xn--xn--a--gua.pt; ; ; # xn--a-ä.pt +Xn--A-Ä.pt; xn--a-ä.pt; [P4]; xn--xn--a--gua.pt; ; ; # xn--a-ä.pt +xn--xn--a--gua.pt; xn--a-ä.pt; [V2]; xn--xn--a--gua.pt; ; ; # xn--a-ä.pt +日本語。JP; 日本語.jp; ; xn--wgv71a119e.jp; ; ; # 日本語.jp +日本語。JP; 日本語.jp; ; xn--wgv71a119e.jp; ; ; # 日本語.jp +日本語。jp; 日本語.jp; ; xn--wgv71a119e.jp; ; ; # 日本語.jp +日本語。Jp; 日本語.jp; ; xn--wgv71a119e.jp; ; ; # 日本語.jp +xn--wgv71a119e.jp; 日本語.jp; ; xn--wgv71a119e.jp; ; ; # 日本語.jp +日本語.jp; ; ; xn--wgv71a119e.jp; ; ; # 日本語.jp +日本語.JP; 日本語.jp; ; xn--wgv71a119e.jp; ; ; # 日本語.jp +日本語.Jp; 日本語.jp; ; xn--wgv71a119e.jp; ; ; # 日本語.jp +日本語。jp; 日本語.jp; ; xn--wgv71a119e.jp; ; ; # 日本語.jp +日本語。Jp; 日本語.jp; ; xn--wgv71a119e.jp; ; ; # 日本語.jp +☕; ; ; xn--53h; ; ; # ☕ +xn--53h; ☕; ; xn--53h; ; ; # ☕ +1.aß\u200C\u200Db\u200C\u200Dcßßßßdςσßßßßßßßßeßßßßßßßßßßxßßßßßßßßßßyßßßßßßßß\u0302ßz; ; [C1, C2]; 1.xn--abcdexyz-qyacaaabaaaaaaabaaaaaaaaabaaaaaaaaabaaaaaaaa010ze2isb1140zba8cc; [C1, C2, A4_2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2] # 1.aßbcßßßßdςσßßßßßßßßeßßßßßßßßßßxßßßßßßßßßßyßßßßßßßß̂ßz +1.ASS\u200C\u200DB\u200C\u200DCSSSSSSSSDΣΣSSSSSSSSSSSSSSSSESSSSSSSSSSSSSSSSSSSSXSSSSSSSSSSSSSSSSSSSSYSSSSSSSSSSSSSSSS\u0302SSZ; 1.ass\u200C\u200Db\u200C\u200Dcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz; [C1, C2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa69989dba9gc; [C1, C2, A4_2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2] # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz +1.ASS\u200C\u200DB\u200C\u200DCSSSSSSSSDΣΣSSSSSSSSSSSSSSSSESSSSSSSSSSSSSSSSSSSSXSSSSSSSSSSSSSSSSSSSSYSSSSSSSSSSSSSSSŜSSZ; 1.ass\u200C\u200Db\u200C\u200Dcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz; [C1, C2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa69989dba9gc; [C1, C2, A4_2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2] # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz +1.ass\u200C\u200Db\u200C\u200Dcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz; ; [C1, C2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa69989dba9gc; [C1, C2, A4_2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2] # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz +1.ass\u200C\u200Db\u200C\u200Dcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssyssssssssssssssss\u0302ssz; 1.ass\u200C\u200Db\u200C\u200Dcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz; [C1, C2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa69989dba9gc; [C1, C2, A4_2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2] # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz +1.Ass\u200C\u200Db\u200C\u200Dcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssyssssssssssssssss\u0302ssz; 1.ass\u200C\u200Db\u200C\u200Dcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz; [C1, C2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa69989dba9gc; [C1, C2, A4_2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2] # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz +1.Ass\u200C\u200Db\u200C\u200Dcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz; 1.ass\u200C\u200Db\u200C\u200Dcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz; [C1, C2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa69989dba9gc; [C1, C2, A4_2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2] # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz +1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz; ; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2]; ; # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz +1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz; ; ; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2]; ; # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz +1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssyssssssssssssssss\u0302ssz; 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz; ; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2]; ; # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz +1.ASSBCSSSSSSSSDΣΣSSSSSSSSSSSSSSSSESSSSSSSSSSSSSSSSSSSSXSSSSSSSSSSSSSSSSSSSSYSSSSSSSSSSSSSSSS\u0302SSZ; 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz; ; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2]; ; # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz +1.ASSBCSSSSSSSSDΣΣSSSSSSSSSSSSSSSSESSSSSSSSSSSSSSSSSSSSXSSSSSSSSSSSSSSSSSSSSYSSSSSSSSSSSSSSSŜSSZ; 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz; ; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2]; ; # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz +1.Assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz; 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz; ; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2]; ; # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz +1.Assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssyssssssssssssssss\u0302ssz; 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz; ; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2]; ; # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz +1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa69989dba9gc; 1.ass\u200C\u200Db\u200C\u200Dcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz; [C1, C2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa69989dba9gc; [C1, C2, A4_2]; ; # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssŝssz +1.Aß\u200C\u200Db\u200C\u200Dcßßßßdςσßßßßßßßßeßßßßßßßßßßxßßßßßßßßßßyßßßßßßßß\u0302ßz; 1.aß\u200C\u200Db\u200C\u200Dcßßßßdςσßßßßßßßßeßßßßßßßßßßxßßßßßßßßßßyßßßßßßßß\u0302ßz; [C1, C2]; 1.xn--abcdexyz-qyacaaabaaaaaaabaaaaaaaaabaaaaaaaaabaaaaaaaa010ze2isb1140zba8cc; [C1, C2, A4_2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2] # 1.aßbcßßßßdςσßßßßßßßßeßßßßßßßßßßxßßßßßßßßßßyßßßßßßßß̂ßz +1.xn--abcdexyz-qyacaaabaaaaaaabaaaaaaaaabaaaaaaaaabaaaaaaaa010ze2isb1140zba8cc; 1.aß\u200C\u200Db\u200C\u200Dcßßßßdςσßßßßßßßßeßßßßßßßßßßxßßßßßßßßßßyßßßßßßßß\u0302ßz; [C1, C2]; 1.xn--abcdexyz-qyacaaabaaaaaaabaaaaaaaaabaaaaaaaaabaaaaaaaa010ze2isb1140zba8cc; [C1, C2, A4_2]; ; # 1.aßbcßßßßdςσßßßßßßßßeßßßßßßßßßßxßßßßßßßßßßyßßßßßßßß̂ßz +\u200Cx\u200Dn\u200C-\u200D-bß; ; [C1, C2]; xn--xn--b-pqa5796ccahd; ; xn--bss; [] # xn--bß +\u200CX\u200DN\u200C-\u200D-BSS; \u200Cx\u200Dn\u200C-\u200D-bss; [C1, C2]; xn--xn--bss-7z6ccid; ; xn--bss; [] # xn--bss +\u200Cx\u200Dn\u200C-\u200D-bss; ; [C1, C2]; xn--xn--bss-7z6ccid; ; xn--bss; [] # xn--bss +\u200CX\u200Dn\u200C-\u200D-Bss; \u200Cx\u200Dn\u200C-\u200D-bss; [C1, C2]; xn--xn--bss-7z6ccid; ; xn--bss; [] # xn--bss +xn--bss; 夙; ; xn--bss; ; ; # 夙 +夙; ; ; xn--bss; ; ; # 夙 +xn--xn--bss-7z6ccid; \u200Cx\u200Dn\u200C-\u200D-bss; [C1, C2]; xn--xn--bss-7z6ccid; ; ; # xn--bss +\u200CX\u200Dn\u200C-\u200D-Bß; \u200Cx\u200Dn\u200C-\u200D-bß; [C1, C2]; xn--xn--b-pqa5796ccahd; ; xn--bss; [] # xn--bß +xn--xn--b-pqa5796ccahd; \u200Cx\u200Dn\u200C-\u200D-bß; [C1, C2]; xn--xn--b-pqa5796ccahd; ; ; # xn--bß +ˣ\u034Fℕ\u200B﹣\u00AD-\u180Cℬ\uFE00ſ\u2064𝔰󠇯ffl; 夡夞夜夙; ; xn--bssffl; ; ; # 夡夞夜夙 +x\u034FN\u200B-\u00AD-\u180CB\uFE00s\u2064s󠇯ffl; 夡夞夜夙; ; xn--bssffl; ; ; # 夡夞夜夙 +x\u034Fn\u200B-\u00AD-\u180Cb\uFE00s\u2064s󠇯ffl; 夡夞夜夙; ; xn--bssffl; ; ; # 夡夞夜夙 +X\u034FN\u200B-\u00AD-\u180CB\uFE00S\u2064S󠇯FFL; 夡夞夜夙; ; xn--bssffl; ; ; # 夡夞夜夙 +X\u034Fn\u200B-\u00AD-\u180CB\uFE00s\u2064s󠇯ffl; 夡夞夜夙; ; xn--bssffl; ; ; # 夡夞夜夙 +xn--bssffl; 夡夞夜夙; ; xn--bssffl; ; ; # 夡夞夜夙 +夡夞夜夙; ; ; xn--bssffl; ; ; # 夡夞夜夙 +ˣ\u034Fℕ\u200B﹣\u00AD-\u180Cℬ\uFE00S\u2064𝔰󠇯FFL; 夡夞夜夙; ; xn--bssffl; ; ; # 夡夞夜夙 +x\u034FN\u200B-\u00AD-\u180CB\uFE00S\u2064s󠇯FFL; 夡夞夜夙; ; xn--bssffl; ; ; # 夡夞夜夙 +ˣ\u034Fℕ\u200B﹣\u00AD-\u180Cℬ\uFE00s\u2064𝔰󠇯ffl; 夡夞夜夙; ; xn--bssffl; ; ; # 夡夞夜夙 +123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; ; ; ; ; # 123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901 +123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; ; ; ; ; ; # 123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901. +123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; ; ; ; [A4_1]; ; # 123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012 +123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; ; ; ; [A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890 +123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; ; ; ; [A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890. +123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; ; ; [A4_1, A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901 +ä1234567890123456789012345678901234567890123456789012345; ; ; xn--1234567890123456789012345678901234567890123456789012345-9te; ; ; # ä1234567890123456789012345678901234567890123456789012345 +a\u03081234567890123456789012345678901234567890123456789012345; ä1234567890123456789012345678901234567890123456789012345; ; xn--1234567890123456789012345678901234567890123456789012345-9te; ; ; # ä1234567890123456789012345678901234567890123456789012345 +A\u03081234567890123456789012345678901234567890123456789012345; ä1234567890123456789012345678901234567890123456789012345; ; xn--1234567890123456789012345678901234567890123456789012345-9te; ; ; # ä1234567890123456789012345678901234567890123456789012345 +Ä1234567890123456789012345678901234567890123456789012345; ä1234567890123456789012345678901234567890123456789012345; ; xn--1234567890123456789012345678901234567890123456789012345-9te; ; ; # ä1234567890123456789012345678901234567890123456789012345 +xn--1234567890123456789012345678901234567890123456789012345-9te; ä1234567890123456789012345678901234567890123456789012345; ; xn--1234567890123456789012345678901234567890123456789012345-9te; ; ; # ä1234567890123456789012345678901234567890123456789012345 +123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901 +123456789012345678901234567890123456789012345678901234567890123.1234567890a\u0308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901 +123456789012345678901234567890123456789012345678901234567890123.1234567890A\u0308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901 +123456789012345678901234567890123456789012345678901234567890123.1234567890Ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901 +123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901 +123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; ; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; ; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901. +123456789012345678901234567890123456789012345678901234567890123.1234567890a\u0308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; ; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901. +123456789012345678901234567890123456789012345678901234567890123.1234567890A\u0308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; ; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901. +123456789012345678901234567890123456789012345678901234567890123.1234567890Ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; ; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901. +123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; ; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901. +123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; ; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; [A4_1]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012 +123456789012345678901234567890123456789012345678901234567890123.1234567890a\u0308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; [A4_1]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012 +123456789012345678901234567890123456789012345678901234567890123.1234567890A\u0308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; [A4_1]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012 +123456789012345678901234567890123456789012345678901234567890123.1234567890Ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; [A4_1]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012 +123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; [A4_1]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012 +123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; ; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; [A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890 +123456789012345678901234567890123456789012345678901234567890123.1234567890a\u03081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; [A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890 +123456789012345678901234567890123456789012345678901234567890123.1234567890A\u03081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; [A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890 +123456789012345678901234567890123456789012345678901234567890123.1234567890Ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; [A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890 +123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; [A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890 +123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; ; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; [A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890. +123456789012345678901234567890123456789012345678901234567890123.1234567890a\u03081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; [A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890. +123456789012345678901234567890123456789012345678901234567890123.1234567890A\u03081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; [A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890. +123456789012345678901234567890123456789012345678901234567890123.1234567890Ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; [A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890. +123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; [A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890. +123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; [A4_1, A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901 +123456789012345678901234567890123456789012345678901234567890123.1234567890a\u03081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; [A4_1, A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901 +123456789012345678901234567890123456789012345678901234567890123.1234567890A\u03081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; [A4_1, A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901 +123456789012345678901234567890123456789012345678901234567890123.1234567890Ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; [A4_1, A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901 +123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; [A4_1, A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901 +a.b..-q--a-.e; ; [V2, V3, X4_2]; ; [V2, V3, A4_2]; ; # a.b..-q--a-.e +a.b..-q--ä-.e; ; [V2, V3, X4_2]; a.b..xn---q----jra.e; [V2, V3, A4_2]; ; # a.b..-q--ä-.e +a.b..-q--a\u0308-.e; a.b..-q--ä-.e; [V2, V3, X4_2]; a.b..xn---q----jra.e; [V2, V3, A4_2]; ; # a.b..-q--ä-.e +A.B..-Q--A\u0308-.E; a.b..-q--ä-.e; [V2, V3, X4_2]; a.b..xn---q----jra.e; [V2, V3, A4_2]; ; # a.b..-q--ä-.e +A.B..-Q--Ä-.E; a.b..-q--ä-.e; [V2, V3, X4_2]; a.b..xn---q----jra.e; [V2, V3, A4_2]; ; # a.b..-q--ä-.e +A.b..-Q--Ä-.E; a.b..-q--ä-.e; [V2, V3, X4_2]; a.b..xn---q----jra.e; [V2, V3, A4_2]; ; # a.b..-q--ä-.e +A.b..-Q--A\u0308-.E; a.b..-q--ä-.e; [V2, V3, X4_2]; a.b..xn---q----jra.e; [V2, V3, A4_2]; ; # a.b..-q--ä-.e +a.b..xn---q----jra.e; a.b..-q--ä-.e; [V2, V3, X4_2]; a.b..xn---q----jra.e; [V2, V3, A4_2]; ; # a.b..-q--ä-.e +a..c; ; [X4_2]; ; [A4_2]; ; # a..c +a.-b.; ; [V3]; ; ; ; # a.-b. +a.b-.c; ; [V3]; ; ; ; # a.b-.c +a.-.c; ; [V3]; ; ; ; # a.-.c +a.bc--de.f; ; [V2]; ; ; ; # a.bc--de.f +ä.\u00AD.c; ä..c; [X4_2]; xn--4ca..c; [A4_2]; ; # ä..c +a\u0308.\u00AD.c; ä..c; [X4_2]; xn--4ca..c; [A4_2]; ; # ä..c +A\u0308.\u00AD.C; ä..c; [X4_2]; xn--4ca..c; [A4_2]; ; # ä..c +Ä.\u00AD.C; ä..c; [X4_2]; xn--4ca..c; [A4_2]; ; # ä..c +xn--4ca..c; ä..c; [X4_2]; xn--4ca..c; [A4_2]; ; # ä..c +ä.-b.; ; [V3]; xn--4ca.-b.; ; ; # ä.-b. +a\u0308.-b.; ä.-b.; [V3]; xn--4ca.-b.; ; ; # ä.-b. +A\u0308.-B.; ä.-b.; [V3]; xn--4ca.-b.; ; ; # ä.-b. +Ä.-B.; ä.-b.; [V3]; xn--4ca.-b.; ; ; # ä.-b. +xn--4ca.-b.; ä.-b.; [V3]; xn--4ca.-b.; ; ; # ä.-b. +ä.b-.c; ; [V3]; xn--4ca.b-.c; ; ; # ä.b-.c +a\u0308.b-.c; ä.b-.c; [V3]; xn--4ca.b-.c; ; ; # ä.b-.c +A\u0308.B-.C; ä.b-.c; [V3]; xn--4ca.b-.c; ; ; # ä.b-.c +Ä.B-.C; ä.b-.c; [V3]; xn--4ca.b-.c; ; ; # ä.b-.c +Ä.b-.C; ä.b-.c; [V3]; xn--4ca.b-.c; ; ; # ä.b-.c +A\u0308.b-.C; ä.b-.c; [V3]; xn--4ca.b-.c; ; ; # ä.b-.c +xn--4ca.b-.c; ä.b-.c; [V3]; xn--4ca.b-.c; ; ; # ä.b-.c +ä.-.c; ; [V3]; xn--4ca.-.c; ; ; # ä.-.c +a\u0308.-.c; ä.-.c; [V3]; xn--4ca.-.c; ; ; # ä.-.c +A\u0308.-.C; ä.-.c; [V3]; xn--4ca.-.c; ; ; # ä.-.c +Ä.-.C; ä.-.c; [V3]; xn--4ca.-.c; ; ; # ä.-.c +xn--4ca.-.c; ä.-.c; [V3]; xn--4ca.-.c; ; ; # ä.-.c +ä.bc--de.f; ; [V2]; xn--4ca.bc--de.f; ; ; # ä.bc--de.f +a\u0308.bc--de.f; ä.bc--de.f; [V2]; xn--4ca.bc--de.f; ; ; # ä.bc--de.f +A\u0308.BC--DE.F; ä.bc--de.f; [V2]; xn--4ca.bc--de.f; ; ; # ä.bc--de.f +Ä.BC--DE.F; ä.bc--de.f; [V2]; xn--4ca.bc--de.f; ; ; # ä.bc--de.f +Ä.bc--De.f; ä.bc--de.f; [V2]; xn--4ca.bc--de.f; ; ; # ä.bc--de.f +A\u0308.bc--De.f; ä.bc--de.f; [V2]; xn--4ca.bc--de.f; ; ; # ä.bc--de.f +xn--4ca.bc--de.f; ä.bc--de.f; [V2]; xn--4ca.bc--de.f; ; ; # ä.bc--de.f +a.b.\u0308c.d; ; [V5]; a.b.xn--c-bcb.d; ; ; # a.b.̈c.d +A.B.\u0308C.D; a.b.\u0308c.d; [V5]; a.b.xn--c-bcb.d; ; ; # a.b.̈c.d +A.b.\u0308c.d; a.b.\u0308c.d; [V5]; a.b.xn--c-bcb.d; ; ; # a.b.̈c.d +a.b.xn--c-bcb.d; a.b.\u0308c.d; [V5]; a.b.xn--c-bcb.d; ; ; # a.b.̈c.d +A0; a0; ; ; ; ; # a0 +0A; 0a; ; ; ; ; # 0a +0A.\u05D0; 0a.\u05D0; [B1]; 0a.xn--4db; ; ; # 0a.א +0a.\u05D0; ; [B1]; 0a.xn--4db; ; ; # 0a.א +0a.xn--4db; 0a.\u05D0; [B1]; 0a.xn--4db; ; ; # 0a.א +c.xn--0-eha.xn--4db; c.0ü.\u05D0; [B1]; c.xn--0-eha.xn--4db; ; ; # c.0ü.א +b-.\u05D0; ; [B6, V3]; b-.xn--4db; ; ; # b-.א +B-.\u05D0; b-.\u05D0; [B6, V3]; b-.xn--4db; ; ; # b-.א +b-.xn--4db; b-.\u05D0; [B6, V3]; b-.xn--4db; ; ; # b-.א +d.xn----dha.xn--4db; d.ü-.\u05D0; [B6, V3]; d.xn----dha.xn--4db; ; ; # d.ü-.א +a\u05D0; ; [B5, B6]; xn--a-0hc; ; ; # aא +A\u05D0; a\u05D0; [B5, B6]; xn--a-0hc; ; ; # aא +xn--a-0hc; a\u05D0; [B5, B6]; xn--a-0hc; ; ; # aא +\u05D0\u05C7; ; ; xn--vdbr; ; ; # אׇ +xn--vdbr; \u05D0\u05C7; ; xn--vdbr; ; ; # אׇ +\u05D09\u05C7; ; ; xn--9-ihcz; ; ; # א9ׇ +xn--9-ihcz; \u05D09\u05C7; ; xn--9-ihcz; ; ; # א9ׇ +\u05D0a\u05C7; ; [B2, B3]; xn--a-ihcz; ; ; # אaׇ +\u05D0A\u05C7; \u05D0a\u05C7; [B2, B3]; xn--a-ihcz; ; ; # אaׇ +xn--a-ihcz; \u05D0a\u05C7; [B2, B3]; xn--a-ihcz; ; ; # אaׇ +\u05D0\u05EA; ; ; xn--4db6c; ; ; # את +xn--4db6c; \u05D0\u05EA; ; xn--4db6c; ; ; # את +\u05D0\u05F3\u05EA; ; ; xn--4db6c0a; ; ; # א׳ת +xn--4db6c0a; \u05D0\u05F3\u05EA; ; xn--4db6c0a; ; ; # א׳ת +a\u05D0Tz; a\u05D0tz; [B5]; xn--atz-qpe; ; ; # aאtz +a\u05D0tz; ; [B5]; xn--atz-qpe; ; ; # aאtz +A\u05D0TZ; a\u05D0tz; [B5]; xn--atz-qpe; ; ; # aאtz +A\u05D0tz; a\u05D0tz; [B5]; xn--atz-qpe; ; ; # aאtz +xn--atz-qpe; a\u05D0tz; [B5]; xn--atz-qpe; ; ; # aאtz +\u05D0T\u05EA; \u05D0t\u05EA; [B2]; xn--t-zhc3f; ; ; # אtת +\u05D0t\u05EA; ; [B2]; xn--t-zhc3f; ; ; # אtת +xn--t-zhc3f; \u05D0t\u05EA; [B2]; xn--t-zhc3f; ; ; # אtת +\u05D07\u05EA; ; ; xn--7-zhc3f; ; ; # א7ת +xn--7-zhc3f; \u05D07\u05EA; ; xn--7-zhc3f; ; ; # א7ת +\u05D0\u0667\u05EA; ; ; xn--4db6c6t; ; ; # א٧ת +xn--4db6c6t; \u05D0\u0667\u05EA; ; xn--4db6c6t; ; ; # א٧ת +a7\u0667z; ; [B5]; xn--a7z-06e; ; ; # a7٧z +A7\u0667Z; a7\u0667z; [B5]; xn--a7z-06e; ; ; # a7٧z +A7\u0667z; a7\u0667z; [B5]; xn--a7z-06e; ; ; # a7٧z +xn--a7z-06e; a7\u0667z; [B5]; xn--a7z-06e; ; ; # a7٧z +\u05D07\u0667\u05EA; ; [B4]; xn--7-zhc3fty; ; ; # א7٧ת +xn--7-zhc3fty; \u05D07\u0667\u05EA; [B4]; xn--7-zhc3fty; ; ; # א7٧ת +ஹ\u0BCD\u200D; ; ; xn--dmc4b194h; ; xn--dmc4b; # ஹ் +xn--dmc4b; ஹ\u0BCD; ; xn--dmc4b; ; ; # ஹ் +ஹ\u0BCD; ; ; xn--dmc4b; ; ; # ஹ் +xn--dmc4b194h; ஹ\u0BCD\u200D; ; xn--dmc4b194h; ; ; # ஹ் +ஹ\u200D; ; [C2]; xn--dmc225h; ; xn--dmc; [] # ஹ +xn--dmc; ஹ; ; xn--dmc; ; ; # ஹ +ஹ; ; ; xn--dmc; ; ; # ஹ +xn--dmc225h; ஹ\u200D; [C2]; xn--dmc225h; ; ; # ஹ +\u200D; ; [C2]; xn--1ug; ; ; [A4_2] # +; ; [X4_2]; ; [A4_2]; ; # +xn--1ug; \u200D; [C2]; xn--1ug; ; ; # +ஹ\u0BCD\u200C; ; ; xn--dmc4by94h; ; xn--dmc4b; # ஹ் +xn--dmc4by94h; ஹ\u0BCD\u200C; ; xn--dmc4by94h; ; ; # ஹ் +ஹ\u200C; ; [C1]; xn--dmc025h; ; xn--dmc; [] # ஹ +xn--dmc025h; ஹ\u200C; [C1]; xn--dmc025h; ; ; # ஹ +\u200C; ; [C1]; xn--0ug; ; ; [A4_2] # +xn--0ug; \u200C; [C1]; xn--0ug; ; ; # +\u0644\u0670\u200C\u06ED\u06EF; ; ; xn--ghb2gxqia7523a; ; xn--ghb2gxqia; # لٰۭۯ +xn--ghb2gxqia; \u0644\u0670\u06ED\u06EF; ; xn--ghb2gxqia; ; ; # لٰۭۯ +\u0644\u0670\u06ED\u06EF; ; ; xn--ghb2gxqia; ; ; # لٰۭۯ +xn--ghb2gxqia7523a; \u0644\u0670\u200C\u06ED\u06EF; ; xn--ghb2gxqia7523a; ; ; # لٰۭۯ +\u0644\u0670\u200C\u06EF; ; ; xn--ghb2g3qq34f; ; xn--ghb2g3q; # لٰۯ +xn--ghb2g3q; \u0644\u0670\u06EF; ; xn--ghb2g3q; ; ; # لٰۯ +\u0644\u0670\u06EF; ; ; xn--ghb2g3q; ; ; # لٰۯ +xn--ghb2g3qq34f; \u0644\u0670\u200C\u06EF; ; xn--ghb2g3qq34f; ; ; # لٰۯ +\u0644\u200C\u06ED\u06EF; ; ; xn--ghb25aga828w; ; xn--ghb25aga; # لۭۯ +xn--ghb25aga; \u0644\u06ED\u06EF; ; xn--ghb25aga; ; ; # لۭۯ +\u0644\u06ED\u06EF; ; ; xn--ghb25aga; ; ; # لۭۯ +xn--ghb25aga828w; \u0644\u200C\u06ED\u06EF; ; xn--ghb25aga828w; ; ; # لۭۯ +\u0644\u200C\u06EF; ; ; xn--ghb65a953d; ; xn--ghb65a; # لۯ +xn--ghb65a; \u0644\u06EF; ; xn--ghb65a; ; ; # لۯ +\u0644\u06EF; ; ; xn--ghb65a; ; ; # لۯ +xn--ghb65a953d; \u0644\u200C\u06EF; ; xn--ghb65a953d; ; ; # لۯ +\u0644\u0670\u200C\u06ED; ; [B3, C1]; xn--ghb2gxqy34f; ; xn--ghb2gxq; [] # لٰۭ +xn--ghb2gxq; \u0644\u0670\u06ED; ; xn--ghb2gxq; ; ; # لٰۭ +\u0644\u0670\u06ED; ; ; xn--ghb2gxq; ; ; # لٰۭ +xn--ghb2gxqy34f; \u0644\u0670\u200C\u06ED; [B3, C1]; xn--ghb2gxqy34f; ; ; # لٰۭ +\u06EF\u200C\u06EF; ; [C1]; xn--cmba004q; ; xn--cmba; [] # ۯۯ +xn--cmba; \u06EF\u06EF; ; xn--cmba; ; ; # ۯۯ +\u06EF\u06EF; ; ; xn--cmba; ; ; # ۯۯ +xn--cmba004q; \u06EF\u200C\u06EF; [C1]; xn--cmba004q; ; ; # ۯۯ +\u0644\u200C; ; [B3, C1]; xn--ghb413k; ; xn--ghb; [] # ل +xn--ghb; \u0644; ; xn--ghb; ; ; # ل +\u0644; ; ; xn--ghb; ; ; # ل +xn--ghb413k; \u0644\u200C; [B3, C1]; xn--ghb413k; ; ; # ل +a。。b; a..b; [X4_2]; ; [A4_2]; ; # a..b +A。。B; a..b; [X4_2]; ; [A4_2]; ; # a..b +a..b; ; [X4_2]; ; [A4_2]; ; # a..b +\u200D。。\u06B9\u200C; \u200D..\u06B9\u200C; [B1, B3, C1, C2, X4_2]; xn--1ug..xn--skb080k; [B1, B3, C1, C2, A4_2]; ..xn--skb; [A4_2] # ..ڹ +..xn--skb; ..\u06B9; [X4_2]; ..xn--skb; [A4_2]; ; # ..ڹ +xn--1ug..xn--skb080k; \u200D..\u06B9\u200C; [B1, B3, C1, C2, X4_2]; xn--1ug..xn--skb080k; [B1, B3, C1, C2, A4_2]; ; # ..ڹ +\u05D00\u0660; ; [B4]; xn--0-zhc74b; ; ; # א0٠ +xn--0-zhc74b; \u05D00\u0660; [B4]; xn--0-zhc74b; ; ; # א0٠ +$; ; [V6]; ; ; ; # $ + +# RANDOMIZED TESTS + +c.0ü.\u05D0; ; [B1]; c.xn--0-eha.xn--4db; ; ; # c.0ü.א +c.0u\u0308.\u05D0; c.0ü.\u05D0; [B1]; c.xn--0-eha.xn--4db; ; ; # c.0ü.א +C.0U\u0308.\u05D0; c.0ü.\u05D0; [B1]; c.xn--0-eha.xn--4db; ; ; # c.0ü.א +C.0Ü.\u05D0; c.0ü.\u05D0; [B1]; c.xn--0-eha.xn--4db; ; ; # c.0ü.א +C.0ü.\u05D0; c.0ü.\u05D0; [B1]; c.xn--0-eha.xn--4db; ; ; # c.0ü.א +C.0u\u0308.\u05D0; c.0ü.\u05D0; [B1]; c.xn--0-eha.xn--4db; ; ; # c.0ü.א +⒕∝\u065F.-󠄯; ⒕∝\u065F.-; [V3, V6]; xn--7hb713lfwbi1311b.-; ; ; # ⒕∝ٟ.- +14.∝\u065F.-󠄯; 14.∝\u065F.-; [V3, V6]; 14.xn--7hb713l3v90n.-; ; ; # 14.∝ٟ.- +14.xn--7hb713l3v90n.-; 14.∝\u065F.-; [V3, V6]; 14.xn--7hb713l3v90n.-; ; ; # 14.∝ٟ.- +xn--7hb713lfwbi1311b.-; ⒕∝\u065F.-; [V3, V6]; xn--7hb713lfwbi1311b.-; ; ; # ⒕∝ٟ.- +ꡣ.\u07CF; ; ; xn--8c9a.xn--qsb; ; ; # ꡣ.ߏ +xn--8c9a.xn--qsb; ꡣ.\u07CF; ; xn--8c9a.xn--qsb; ; ; # ꡣ.ߏ +≯\u0603。-; ≯\u0603.-; [B1, V3, V6]; xn--lfb566l.-; ; ; # ≯.- +>\u0338\u0603。-; ≯\u0603.-; [B1, V3, V6]; xn--lfb566l.-; ; ; # ≯.- +≯\u0603。-; ≯\u0603.-; [B1, V3, V6]; xn--lfb566l.-; ; ; # ≯.- +>\u0338\u0603。-; ≯\u0603.-; [B1, V3, V6]; xn--lfb566l.-; ; ; # ≯.- +xn--lfb566l.-; ≯\u0603.-; [B1, V3, V6]; xn--lfb566l.-; ; ; # ≯.- +⾛𐹧⾕.\u115FςႭ; 走𐹧谷.\u115FςႭ; [B5, V6]; xn--6g3a1x434z.xn--3xa827dhpae6345i; ; xn--6g3a1x434z.xn--4xa627dhpae6345i; # 走𐹧谷.ςႭ +走𐹧谷.\u115FςႭ; ; [B5, V6]; xn--6g3a1x434z.xn--3xa827dhpae6345i; ; xn--6g3a1x434z.xn--4xa627dhpae6345i; # 走𐹧谷.ςႭ +走𐹧谷.\u115Fςⴍ; ; [B5, V6]; xn--6g3a1x434z.xn--3xa380eotvh7453a; ; xn--6g3a1x434z.xn--4xa180eotvh7453a; # 走𐹧谷.ςⴍ +走𐹧谷.\u115FΣႭ; 走𐹧谷.\u115FσႭ; [B5, V6]; xn--6g3a1x434z.xn--4xa627dhpae6345i; ; ; # 走𐹧谷.σႭ +走𐹧谷.\u115Fσⴍ; ; [B5, V6]; xn--6g3a1x434z.xn--4xa180eotvh7453a; ; ; # 走𐹧谷.σⴍ +走𐹧谷.\u115FΣⴍ; 走𐹧谷.\u115Fσⴍ; [B5, V6]; xn--6g3a1x434z.xn--4xa180eotvh7453a; ; ; # 走𐹧谷.σⴍ +xn--6g3a1x434z.xn--4xa180eotvh7453a; 走𐹧谷.\u115Fσⴍ; [B5, V6]; xn--6g3a1x434z.xn--4xa180eotvh7453a; ; ; # 走𐹧谷.σⴍ +xn--6g3a1x434z.xn--4xa627dhpae6345i; 走𐹧谷.\u115FσႭ; [B5, V6]; xn--6g3a1x434z.xn--4xa627dhpae6345i; ; ; # 走𐹧谷.σႭ +xn--6g3a1x434z.xn--3xa380eotvh7453a; 走𐹧谷.\u115Fςⴍ; [B5, V6]; xn--6g3a1x434z.xn--3xa380eotvh7453a; ; ; # 走𐹧谷.ςⴍ +xn--6g3a1x434z.xn--3xa827dhpae6345i; 走𐹧谷.\u115FςႭ; [B5, V6]; xn--6g3a1x434z.xn--3xa827dhpae6345i; ; ; # 走𐹧谷.ςႭ +⾛𐹧⾕.\u115Fςⴍ; 走𐹧谷.\u115Fςⴍ; [B5, V6]; xn--6g3a1x434z.xn--3xa380eotvh7453a; ; xn--6g3a1x434z.xn--4xa180eotvh7453a; # 走𐹧谷.ςⴍ +⾛𐹧⾕.\u115FΣႭ; 走𐹧谷.\u115FσႭ; [B5, V6]; xn--6g3a1x434z.xn--4xa627dhpae6345i; ; ; # 走𐹧谷.σႭ +⾛𐹧⾕.\u115Fσⴍ; 走𐹧谷.\u115Fσⴍ; [B5, V6]; xn--6g3a1x434z.xn--4xa180eotvh7453a; ; ; # 走𐹧谷.σⴍ +⾛𐹧⾕.\u115FΣⴍ; 走𐹧谷.\u115Fσⴍ; [B5, V6]; xn--6g3a1x434z.xn--4xa180eotvh7453a; ; ; # 走𐹧谷.σⴍ +\u200D≠ᢙ≯.솣-ᡴႠ; ; [C2, V6]; xn--jbf929a90b0b.xn----6zg521d196p; ; xn--jbf911clb.xn----6zg521d196p; [V6] # ≠ᢙ≯.솣-ᡴႠ +\u200D=\u0338ᢙ>\u0338.솣-ᡴႠ; \u200D≠ᢙ≯.솣-ᡴႠ; [C2, V6]; xn--jbf929a90b0b.xn----6zg521d196p; ; xn--jbf911clb.xn----6zg521d196p; [V6] # ≠ᢙ≯.솣-ᡴႠ +\u200D=\u0338ᢙ>\u0338.솣-ᡴⴀ; \u200D≠ᢙ≯.솣-ᡴⴀ; [C2]; xn--jbf929a90b0b.xn----p9j493ivi4l; ; xn--jbf911clb.xn----p9j493ivi4l; [] # ≠ᢙ≯.솣-ᡴⴀ +\u200D≠ᢙ≯.솣-ᡴⴀ; ; [C2]; xn--jbf929a90b0b.xn----p9j493ivi4l; ; xn--jbf911clb.xn----p9j493ivi4l; [] # ≠ᢙ≯.솣-ᡴⴀ +xn--jbf911clb.xn----p9j493ivi4l; ≠ᢙ≯.솣-ᡴⴀ; ; xn--jbf911clb.xn----p9j493ivi4l; ; ; # ≠ᢙ≯.솣-ᡴⴀ +≠ᢙ≯.솣-ᡴⴀ; ; ; xn--jbf911clb.xn----p9j493ivi4l; ; ; # ≠ᢙ≯.솣-ᡴⴀ +=\u0338ᢙ>\u0338.솣-ᡴⴀ; ≠ᢙ≯.솣-ᡴⴀ; ; xn--jbf911clb.xn----p9j493ivi4l; ; ; # ≠ᢙ≯.솣-ᡴⴀ +=\u0338ᢙ>\u0338.솣-ᡴႠ; ≠ᢙ≯.솣-ᡴႠ; [V6]; xn--jbf911clb.xn----6zg521d196p; ; ; # ≠ᢙ≯.솣-ᡴႠ +≠ᢙ≯.솣-ᡴႠ; ; [V6]; xn--jbf911clb.xn----6zg521d196p; ; ; # ≠ᢙ≯.솣-ᡴႠ +xn--jbf911clb.xn----6zg521d196p; ≠ᢙ≯.솣-ᡴႠ; [V6]; xn--jbf911clb.xn----6zg521d196p; ; ; # ≠ᢙ≯.솣-ᡴႠ +xn--jbf929a90b0b.xn----p9j493ivi4l; \u200D≠ᢙ≯.솣-ᡴⴀ; [C2]; xn--jbf929a90b0b.xn----p9j493ivi4l; ; ; # ≠ᢙ≯.솣-ᡴⴀ +xn--jbf929a90b0b.xn----6zg521d196p; \u200D≠ᢙ≯.솣-ᡴႠ; [C2, V6]; xn--jbf929a90b0b.xn----6zg521d196p; ; ; # ≠ᢙ≯.솣-ᡴႠ +.𐿇\u0FA2\u077D\u0600; .𐿇\u0FA1\u0FB7\u077D\u0600; [V6]; xn--gw68a.xn--ifb57ev2psc6027m; ; ; # .𐿇ྡྷݽ +.𐿇\u0FA1\u0FB7\u077D\u0600; .𐿇\u0FA1\u0FB7\u077D\u0600; [V6]; xn--gw68a.xn--ifb57ev2psc6027m; ; ; # .𐿇ྡྷݽ +.𐿇\u0FA1\u0FB7\u077D\u0600; ; [V6]; xn--gw68a.xn--ifb57ev2psc6027m; ; ; # .𐿇ྡྷݽ +xn--gw68a.xn--ifb57ev2psc6027m; .𐿇\u0FA1\u0FB7\u077D\u0600; [V6]; xn--gw68a.xn--ifb57ev2psc6027m; ; ; # .𐿇ྡྷݽ +𣳔\u0303.𑓂; ; [V5]; xn--nsa95820a.xn--wz1d; ; ; # 𣳔̃.𑓂 +xn--nsa95820a.xn--wz1d; 𣳔\u0303.𑓂; [V5]; xn--nsa95820a.xn--wz1d; ; ; # 𣳔̃.𑓂 +𞤀𞥅。󠄌Ⴣꡥ; 𞤢𞥅.Ⴣꡥ; [B2, B3, V6]; xn--9d6hgcy3556a.xn--7nd0578e; ; ; # 𞤢𞥅.Ⴣꡥ +𞤢𞥅。󠄌ⴣꡥ; 𞤢𞥅.ⴣꡥ; [B2, B3, V6]; xn--9d6hgcy3556a.xn--rlju750b; ; ; # 𞤢𞥅.ⴣꡥ +xn--9d6hgcy3556a.xn--rlju750b; 𞤢𞥅.ⴣꡥ; [B2, B3, V6]; xn--9d6hgcy3556a.xn--rlju750b; ; ; # 𞤢𞥅.ⴣꡥ +xn--9d6hgcy3556a.xn--7nd0578e; 𞤢𞥅.Ⴣꡥ; [B2, B3, V6]; xn--9d6hgcy3556a.xn--7nd0578e; ; ; # 𞤢𞥅.Ⴣꡥ +𞤀𞥅。󠄌ⴣꡥ; 𞤢𞥅.ⴣꡥ; [B2, B3, V6]; xn--9d6hgcy3556a.xn--rlju750b; ; ; # 𞤢𞥅.ⴣꡥ +\u08E2𑁿ς𖬱。󠅡렧; \u08E2𑁿ς𖬱.렧; [B1, V6]; xn--3xa73xp48ys2xc.xn--kn2b; ; xn--4xa53xp48ys2xc.xn--kn2b; # 𑁿ς𖬱.렧 +\u08E2𑁿ς𖬱。󠅡렧; \u08E2𑁿ς𖬱.렧; [B1, V6]; xn--3xa73xp48ys2xc.xn--kn2b; ; xn--4xa53xp48ys2xc.xn--kn2b; # 𑁿ς𖬱.렧 +\u08E2𑁿Σ𖬱。󠅡렧; \u08E2𑁿σ𖬱.렧; [B1, V6]; xn--4xa53xp48ys2xc.xn--kn2b; ; ; # 𑁿σ𖬱.렧 +\u08E2𑁿Σ𖬱。󠅡렧; \u08E2𑁿σ𖬱.렧; [B1, V6]; xn--4xa53xp48ys2xc.xn--kn2b; ; ; # 𑁿σ𖬱.렧 +\u08E2𑁿σ𖬱。󠅡렧; \u08E2𑁿σ𖬱.렧; [B1, V6]; xn--4xa53xp48ys2xc.xn--kn2b; ; ; # 𑁿σ𖬱.렧 +\u08E2𑁿σ𖬱。󠅡렧; \u08E2𑁿σ𖬱.렧; [B1, V6]; xn--4xa53xp48ys2xc.xn--kn2b; ; ; # 𑁿σ𖬱.렧 +xn--4xa53xp48ys2xc.xn--kn2b; \u08E2𑁿σ𖬱.렧; [B1, V6]; xn--4xa53xp48ys2xc.xn--kn2b; ; ; # 𑁿σ𖬱.렧 +xn--3xa73xp48ys2xc.xn--kn2b; \u08E2𑁿ς𖬱.렧; [B1, V6]; xn--3xa73xp48ys2xc.xn--kn2b; ; ; # 𑁿ς𖬱.렧 +-\u200D。𞤍\u200C\u200D⒈; -\u200D.𞤯\u200C\u200D⒈; [B1, C1, C2, V3, V6]; xn----ugn.xn--0ugc555aiv51d; ; -.xn--tsh3666n; [B1, V3, V6] # -.𞤯⒈ +-\u200D。𞤍\u200C\u200D1.; -\u200D.𞤯\u200C\u200D1.; [B1, C1, C2, V3]; xn----ugn.xn--1-rgnd61297b.; ; -.xn--1-0i8r.; [B1, V3] # -.𞤯1. +-\u200D。𞤯\u200C\u200D1.; -\u200D.𞤯\u200C\u200D1.; [B1, C1, C2, V3]; xn----ugn.xn--1-rgnd61297b.; ; -.xn--1-0i8r.; [B1, V3] # -.𞤯1. +-.xn--1-0i8r.; -.𞤯1.; [B1, V3]; -.xn--1-0i8r.; ; ; # -.𞤯1. +xn----ugn.xn--1-rgnd61297b.; -\u200D.𞤯\u200C\u200D1.; [B1, C1, C2, V3]; xn----ugn.xn--1-rgnd61297b.; ; ; # -.𞤯1. +-\u200D。𞤯\u200C\u200D⒈; -\u200D.𞤯\u200C\u200D⒈; [B1, C1, C2, V3, V6]; xn----ugn.xn--0ugc555aiv51d; ; -.xn--tsh3666n; [B1, V3, V6] # -.𞤯⒈ +-.xn--tsh3666n; -.𞤯⒈; [B1, V3, V6]; -.xn--tsh3666n; ; ; # -.𞤯⒈ +xn----ugn.xn--0ugc555aiv51d; -\u200D.𞤯\u200C\u200D⒈; [B1, C1, C2, V3, V6]; xn----ugn.xn--0ugc555aiv51d; ; ; # -.𞤯⒈ +\u200C.Ⴒ𑇀; ; [C1, V6]; xn--0ug15083f.xn--qnd6272k; ; xn--bn95b.xn--qnd6272k; [V6] # .Ⴒ𑇀 +\u200C.ⴒ𑇀; ; [C1, V6]; xn--0ug15083f.xn--9kj2034e; ; xn--bn95b.xn--9kj2034e; [V6] # .ⴒ𑇀 +xn--bn95b.xn--9kj2034e; .ⴒ𑇀; [V6]; xn--bn95b.xn--9kj2034e; ; ; # .ⴒ𑇀 +xn--0ug15083f.xn--9kj2034e; \u200C.ⴒ𑇀; [C1, V6]; xn--0ug15083f.xn--9kj2034e; ; ; # .ⴒ𑇀 +xn--bn95b.xn--qnd6272k; .Ⴒ𑇀; [V6]; xn--bn95b.xn--qnd6272k; ; ; # .Ⴒ𑇀 +xn--0ug15083f.xn--qnd6272k; \u200C.Ⴒ𑇀; [C1, V6]; xn--0ug15083f.xn--qnd6272k; ; ; # .Ⴒ𑇀 +繱𑖿\u200D.8︒; 繱𑖿\u200D.8︒; [V6]; xn--1ug6928ac48e.xn--8-o89h; ; xn--gl0as212a.xn--8-o89h; # 繱𑖿.8︒ +繱𑖿\u200D.8。; 繱𑖿\u200D.8.; ; xn--1ug6928ac48e.8.; ; xn--gl0as212a.8.; # 繱𑖿.8. +xn--gl0as212a.8.; 繱𑖿.8.; ; xn--gl0as212a.8.; ; ; # 繱𑖿.8. +繱𑖿.8.; ; ; xn--gl0as212a.8.; ; ; # 繱𑖿.8. +xn--1ug6928ac48e.8.; 繱𑖿\u200D.8.; ; xn--1ug6928ac48e.8.; ; ; # 繱𑖿.8. +繱𑖿\u200D.8.; ; ; xn--1ug6928ac48e.8.; ; xn--gl0as212a.8.; # 繱𑖿.8. +xn--gl0as212a.xn--8-o89h; 繱𑖿.8︒; [V6]; xn--gl0as212a.xn--8-o89h; ; ; # 繱𑖿.8︒ +xn--1ug6928ac48e.xn--8-o89h; 繱𑖿\u200D.8︒; [V6]; xn--1ug6928ac48e.xn--8-o89h; ; ; # 繱𑖿.8︒ +󠆾.𞀈; .𞀈; [V5, X4_2]; .xn--ph4h; [V5, A4_2]; ; # .𞀈 +󠆾.𞀈; .𞀈; [V5, X4_2]; .xn--ph4h; [V5, A4_2]; ; # .𞀈 +.xn--ph4h; .𞀈; [V5, X4_2]; .xn--ph4h; [V5, A4_2]; ; # .𞀈 +ß\u06EB。\u200D; ß\u06EB.\u200D; [C2]; xn--zca012a.xn--1ug; ; xn--ss-59d.; [] # ß۫. +SS\u06EB。\u200D; ss\u06EB.\u200D; [C2]; xn--ss-59d.xn--1ug; ; xn--ss-59d.; [] # ss۫. +ss\u06EB。\u200D; ss\u06EB.\u200D; [C2]; xn--ss-59d.xn--1ug; ; xn--ss-59d.; [] # ss۫. +Ss\u06EB。\u200D; ss\u06EB.\u200D; [C2]; xn--ss-59d.xn--1ug; ; xn--ss-59d.; [] # ss۫. +xn--ss-59d.; ss\u06EB.; ; xn--ss-59d.; ; ; # ss۫. +ss\u06EB.; ; ; xn--ss-59d.; ; ; # ss۫. +SS\u06EB.; ss\u06EB.; ; xn--ss-59d.; ; ; # ss۫. +Ss\u06EB.; ss\u06EB.; ; xn--ss-59d.; ; ; # ss۫. +xn--ss-59d.xn--1ug; ss\u06EB.\u200D; [C2]; xn--ss-59d.xn--1ug; ; ; # ss۫. +xn--zca012a.xn--1ug; ß\u06EB.\u200D; [C2]; xn--zca012a.xn--1ug; ; ; # ß۫. +\u200C⒈.; \u200C⒈.; [C1, V6]; xn--0ug88o47900b.xn--tv36e; ; xn--tshz2001k.xn--tv36e; [V6] # ⒈. +\u200C1..; ; [C1, V6, X4_2]; xn--1-rgn37671n..xn--tv36e; [C1, V6, A4_2]; xn--1-bs31m..xn--tv36e; [V6, A4_2] # 1.. +xn--1-bs31m..xn--tv36e; 1..; [V6, X4_2]; xn--1-bs31m..xn--tv36e; [V6, A4_2]; ; # 1.. +xn--1-rgn37671n..xn--tv36e; \u200C1..; [C1, V6, X4_2]; xn--1-rgn37671n..xn--tv36e; [C1, V6, A4_2]; ; # 1.. +xn--tshz2001k.xn--tv36e; ⒈.; [V6]; xn--tshz2001k.xn--tv36e; ; ; # ⒈. +xn--0ug88o47900b.xn--tv36e; \u200C⒈.; [C1, V6]; xn--0ug88o47900b.xn--tv36e; ; ; # ⒈. +\u065F\uAAB2ß。; \u065F\uAAB2ß.; [V6]; xn--zca92z0t7n5w96j.xn--bb79d; ; xn--ss-3xd2839nncy1m.xn--bb79d; # ٟꪲß. +\u065F\uAAB2SS。; \u065F\uAAB2ss.; [V6]; xn--ss-3xd2839nncy1m.xn--bb79d; ; ; # ٟꪲss. +\u065F\uAAB2ss。; \u065F\uAAB2ss.; [V6]; xn--ss-3xd2839nncy1m.xn--bb79d; ; ; # ٟꪲss. +\u065F\uAAB2Ss。; \u065F\uAAB2ss.; [V6]; xn--ss-3xd2839nncy1m.xn--bb79d; ; ; # ٟꪲss. +xn--ss-3xd2839nncy1m.xn--bb79d; \u065F\uAAB2ss.; [V6]; xn--ss-3xd2839nncy1m.xn--bb79d; ; ; # ٟꪲss. +xn--zca92z0t7n5w96j.xn--bb79d; \u065F\uAAB2ß.; [V6]; xn--zca92z0t7n5w96j.xn--bb79d; ; ; # ٟꪲß. +\u0774\u200C𞤿。䉜\u200D; \u0774\u200C𞤿.䉜\u200D; [C1, C2, V6]; xn--4pb607jjt73a.xn--1ug236ke314donv1a; ; xn--4pb2977v.xn--z0nt555ukbnv; [V6] # ݴ𞤿.䉜 +\u0774\u200C𞤝。䉜\u200D; \u0774\u200C𞤿.䉜\u200D; [C1, C2, V6]; xn--4pb607jjt73a.xn--1ug236ke314donv1a; ; xn--4pb2977v.xn--z0nt555ukbnv; [V6] # ݴ𞤿.䉜 +xn--4pb2977v.xn--z0nt555ukbnv; \u0774𞤿.䉜; [V6]; xn--4pb2977v.xn--z0nt555ukbnv; ; ; # ݴ𞤿.䉜 +xn--4pb607jjt73a.xn--1ug236ke314donv1a; \u0774\u200C𞤿.䉜\u200D; [C1, C2, V6]; xn--4pb607jjt73a.xn--1ug236ke314donv1a; ; ; # ݴ𞤿.䉜 +ςᡱ⒈.≮𑄳\u200D𐮍; ; [B1, V6]; xn--3xa407hkzinr77u.xn--1ug85gn777ahze; ; xn--4xa207hkzinr77u.xn--gdh5392g6sd; # ςᡱ⒈.≮𑄳𐮍 +ςᡱ⒈.<\u0338𑄳\u200D𐮍; ςᡱ⒈.≮𑄳\u200D𐮍; [B1, V6]; xn--3xa407hkzinr77u.xn--1ug85gn777ahze; ; xn--4xa207hkzinr77u.xn--gdh5392g6sd; # ςᡱ⒈.≮𑄳𐮍 +ςᡱ1..≮𑄳\u200D𐮍; ; [B1, V6, X4_2]; xn--1-xmb999meq63t..xn--1ug85gn777ahze; [B1, V6, A4_2]; xn--1-zmb699meq63t..xn--gdh5392g6sd; # ςᡱ1..≮𑄳𐮍 +ςᡱ1..<\u0338𑄳\u200D𐮍; ςᡱ1..≮𑄳\u200D𐮍; [B1, V6, X4_2]; xn--1-xmb999meq63t..xn--1ug85gn777ahze; [B1, V6, A4_2]; xn--1-zmb699meq63t..xn--gdh5392g6sd; # ςᡱ1..≮𑄳𐮍 +Σᡱ1..<\u0338𑄳\u200D𐮍; σᡱ1..≮𑄳\u200D𐮍; [B1, V6, X4_2]; xn--1-zmb699meq63t..xn--1ug85gn777ahze; [B1, V6, A4_2]; xn--1-zmb699meq63t..xn--gdh5392g6sd; # σᡱ1..≮𑄳𐮍 +Σᡱ1..≮𑄳\u200D𐮍; σᡱ1..≮𑄳\u200D𐮍; [B1, V6, X4_2]; xn--1-zmb699meq63t..xn--1ug85gn777ahze; [B1, V6, A4_2]; xn--1-zmb699meq63t..xn--gdh5392g6sd; # σᡱ1..≮𑄳𐮍 +σᡱ1..≮𑄳\u200D𐮍; ; [B1, V6, X4_2]; xn--1-zmb699meq63t..xn--1ug85gn777ahze; [B1, V6, A4_2]; xn--1-zmb699meq63t..xn--gdh5392g6sd; # σᡱ1..≮𑄳𐮍 +σᡱ1..<\u0338𑄳\u200D𐮍; σᡱ1..≮𑄳\u200D𐮍; [B1, V6, X4_2]; xn--1-zmb699meq63t..xn--1ug85gn777ahze; [B1, V6, A4_2]; xn--1-zmb699meq63t..xn--gdh5392g6sd; # σᡱ1..≮𑄳𐮍 +xn--1-zmb699meq63t..xn--gdh5392g6sd; σᡱ1..≮𑄳𐮍; [B1, V6, X4_2]; xn--1-zmb699meq63t..xn--gdh5392g6sd; [B1, V6, A4_2]; ; # σᡱ1..≮𑄳𐮍 +xn--1-zmb699meq63t..xn--1ug85gn777ahze; σᡱ1..≮𑄳\u200D𐮍; [B1, V6, X4_2]; xn--1-zmb699meq63t..xn--1ug85gn777ahze; [B1, V6, A4_2]; ; # σᡱ1..≮𑄳𐮍 +xn--1-xmb999meq63t..xn--1ug85gn777ahze; ςᡱ1..≮𑄳\u200D𐮍; [B1, V6, X4_2]; xn--1-xmb999meq63t..xn--1ug85gn777ahze; [B1, V6, A4_2]; ; # ςᡱ1..≮𑄳𐮍 +Σᡱ⒈.<\u0338𑄳\u200D𐮍; σᡱ⒈.≮𑄳\u200D𐮍; [B1, V6]; xn--4xa207hkzinr77u.xn--1ug85gn777ahze; ; xn--4xa207hkzinr77u.xn--gdh5392g6sd; # σᡱ⒈.≮𑄳𐮍 +Σᡱ⒈.≮𑄳\u200D𐮍; σᡱ⒈.≮𑄳\u200D𐮍; [B1, V6]; xn--4xa207hkzinr77u.xn--1ug85gn777ahze; ; xn--4xa207hkzinr77u.xn--gdh5392g6sd; # σᡱ⒈.≮𑄳𐮍 +σᡱ⒈.≮𑄳\u200D𐮍; ; [B1, V6]; xn--4xa207hkzinr77u.xn--1ug85gn777ahze; ; xn--4xa207hkzinr77u.xn--gdh5392g6sd; # σᡱ⒈.≮𑄳𐮍 +σᡱ⒈.<\u0338𑄳\u200D𐮍; σᡱ⒈.≮𑄳\u200D𐮍; [B1, V6]; xn--4xa207hkzinr77u.xn--1ug85gn777ahze; ; xn--4xa207hkzinr77u.xn--gdh5392g6sd; # σᡱ⒈.≮𑄳𐮍 +xn--4xa207hkzinr77u.xn--gdh5392g6sd; σᡱ⒈.≮𑄳𐮍; [B1, V6]; xn--4xa207hkzinr77u.xn--gdh5392g6sd; ; ; # σᡱ⒈.≮𑄳𐮍 +xn--4xa207hkzinr77u.xn--1ug85gn777ahze; σᡱ⒈.≮𑄳\u200D𐮍; [B1, V6]; xn--4xa207hkzinr77u.xn--1ug85gn777ahze; ; ; # σᡱ⒈.≮𑄳𐮍 +xn--3xa407hkzinr77u.xn--1ug85gn777ahze; ςᡱ⒈.≮𑄳\u200D𐮍; [B1, V6]; xn--3xa407hkzinr77u.xn--1ug85gn777ahze; ; ; # ςᡱ⒈.≮𑄳𐮍 +\u3164\u094DႠ\u17D0.\u180B; \u3164\u094DႠ\u17D0.; [V6]; xn--n3b468azngju2a.; ; ; # ्Ⴀ័. +\u1160\u094DႠ\u17D0.\u180B; \u1160\u094DႠ\u17D0.; [V6]; xn--n3b468aoqa89r.; ; ; # ्Ⴀ័. +\u1160\u094Dⴀ\u17D0.\u180B; \u1160\u094Dⴀ\u17D0.; [V6]; xn--n3b742bkqf4ty.; ; ; # ्ⴀ័. +xn--n3b742bkqf4ty.; \u1160\u094Dⴀ\u17D0.; [V6]; xn--n3b742bkqf4ty.; ; ; # ्ⴀ័. +xn--n3b468aoqa89r.; \u1160\u094DႠ\u17D0.; [V6]; xn--n3b468aoqa89r.; ; ; # ्Ⴀ័. +\u3164\u094Dⴀ\u17D0.\u180B; \u3164\u094Dⴀ\u17D0.; [V6]; xn--n3b445e53po6d.; ; ; # ्ⴀ័. +xn--n3b445e53po6d.; \u3164\u094Dⴀ\u17D0.; [V6]; xn--n3b445e53po6d.; ; ; # ्ⴀ័. +xn--n3b468azngju2a.; \u3164\u094DႠ\u17D0.; [V6]; xn--n3b468azngju2a.; ; ; # ्Ⴀ័. +❣\u200D.\u09CD𑰽\u0612\uA929; ❣\u200D.\u09CD𑰽\u0612\uA929; [C2, V5]; xn--1ugy10a.xn--0fb32q3w7q2g4d; ; xn--pei.xn--0fb32q3w7q2g4d; [V5] # ❣.্𑰽ؒꤩ +❣\u200D.\u09CD𑰽\u0612\uA929; ; [C2, V5]; xn--1ugy10a.xn--0fb32q3w7q2g4d; ; xn--pei.xn--0fb32q3w7q2g4d; [V5] # ❣.্𑰽ؒꤩ +xn--pei.xn--0fb32q3w7q2g4d; ❣.\u09CD𑰽\u0612\uA929; [V5]; xn--pei.xn--0fb32q3w7q2g4d; ; ; # ❣.্𑰽ؒꤩ +xn--1ugy10a.xn--0fb32q3w7q2g4d; ❣\u200D.\u09CD𑰽\u0612\uA929; [C2, V5]; xn--1ugy10a.xn--0fb32q3w7q2g4d; ; ; # ❣.্𑰽ؒꤩ +≮𐳺.≯ꡅ; ; [B1, V6]; xn--gdh7943gk2a.xn--hdh1383c5e36c; ; ; # ≮𐳺.≯ꡅ +<\u0338𐳺.>\u0338ꡅ; ≮𐳺.≯ꡅ; [B1, V6]; xn--gdh7943gk2a.xn--hdh1383c5e36c; ; ; # ≮𐳺.≯ꡅ +xn--gdh7943gk2a.xn--hdh1383c5e36c; ≮𐳺.≯ꡅ; [B1, V6]; xn--gdh7943gk2a.xn--hdh1383c5e36c; ; ; # ≮𐳺.≯ꡅ +\u0CCC𐧅𐳏。\u0CCDᠦ; \u0CCC𐧅𐳏.\u0CCDᠦ; [B1, V5, V6]; xn--7tc6360ky5bn2732c.xn--8tc429c; ; ; # ೌ𐧅𐳏.್ᠦ +\u0CCC𐧅𐳏。\u0CCDᠦ; \u0CCC𐧅𐳏.\u0CCDᠦ; [B1, V5, V6]; xn--7tc6360ky5bn2732c.xn--8tc429c; ; ; # ೌ𐧅𐳏.್ᠦ +\u0CCC𐧅𐲏。\u0CCDᠦ; \u0CCC𐧅𐳏.\u0CCDᠦ; [B1, V5, V6]; xn--7tc6360ky5bn2732c.xn--8tc429c; ; ; # ೌ𐧅𐳏.್ᠦ +xn--7tc6360ky5bn2732c.xn--8tc429c; \u0CCC𐧅𐳏.\u0CCDᠦ; [B1, V5, V6]; xn--7tc6360ky5bn2732c.xn--8tc429c; ; ; # ೌ𐧅𐳏.್ᠦ +\u0CCC𐧅𐲏。\u0CCDᠦ; \u0CCC𐧅𐳏.\u0CCDᠦ; [B1, V5, V6]; xn--7tc6360ky5bn2732c.xn--8tc429c; ; ; # ೌ𐧅𐳏.್ᠦ +\u0349。𧡫; \u0349.𧡫; [V5]; xn--nua.xn--bc6k; ; ; # ͉.𧡫 +xn--nua.xn--bc6k; \u0349.𧡫; [V5]; xn--nua.xn--bc6k; ; ; # ͉.𧡫 +𑰿󠅦.\u1160; 𑰿.\u1160; [V5, V6]; xn--ok3d.xn--psd; ; ; # 𑰿. +𑰿󠅦.\u1160; 𑰿.\u1160; [V5, V6]; xn--ok3d.xn--psd; ; ; # 𑰿. +xn--ok3d.xn--psd; 𑰿.\u1160; [V5, V6]; xn--ok3d.xn--psd; ; ; # 𑰿. +-𞤆\u200D。; -𞤨\u200D.; [B1, B5, B6, C2, V3, V6]; xn----ugnx367r.xn--846h96596c; ; xn----ni8r.xn--846h96596c; [B1, B5, B6, V3, V6] # -𞤨. +-𞤨\u200D。; -𞤨\u200D.; [B1, B5, B6, C2, V3, V6]; xn----ugnx367r.xn--846h96596c; ; xn----ni8r.xn--846h96596c; [B1, B5, B6, V3, V6] # -𞤨. +xn----ni8r.xn--846h96596c; -𞤨.; [B1, B5, B6, V3, V6]; xn----ni8r.xn--846h96596c; ; ; # -𞤨. +xn----ugnx367r.xn--846h96596c; -𞤨\u200D.; [B1, B5, B6, C2, V3, V6]; xn----ugnx367r.xn--846h96596c; ; ; # -𞤨. +ꡏ≯。\u1DFD⾇滸𐹰; ꡏ≯.\u1DFD舛滸𐹰; [B1, V5, V6]; xn--hdh7483cu6twwki8e.xn--yfg0765a58l0n6k; ; ; # ꡏ≯.᷽舛滸𐹰 +ꡏ>\u0338。\u1DFD⾇滸𐹰; ꡏ≯.\u1DFD舛滸𐹰; [B1, V5, V6]; xn--hdh7483cu6twwki8e.xn--yfg0765a58l0n6k; ; ; # ꡏ≯.᷽舛滸𐹰 +ꡏ≯。\u1DFD舛滸𐹰; ꡏ≯.\u1DFD舛滸𐹰; [B1, V5, V6]; xn--hdh7483cu6twwki8e.xn--yfg0765a58l0n6k; ; ; # ꡏ≯.᷽舛滸𐹰 +ꡏ>\u0338。\u1DFD舛滸𐹰; ꡏ≯.\u1DFD舛滸𐹰; [B1, V5, V6]; xn--hdh7483cu6twwki8e.xn--yfg0765a58l0n6k; ; ; # ꡏ≯.᷽舛滸𐹰 +xn--hdh7483cu6twwki8e.xn--yfg0765a58l0n6k; ꡏ≯.\u1DFD舛滸𐹰; [B1, V5, V6]; xn--hdh7483cu6twwki8e.xn--yfg0765a58l0n6k; ; ; # ꡏ≯.᷽舛滸𐹰 +蔏。𑰺; 蔏.𑰺; [V5]; xn--uy1a.xn--jk3d; ; ; # 蔏.𑰺 +蔏。𑰺; 蔏.𑰺; [V5]; xn--uy1a.xn--jk3d; ; ; # 蔏.𑰺 +xn--uy1a.xn--jk3d; 蔏.𑰺; [V5]; xn--uy1a.xn--jk3d; ; ; # 蔏.𑰺 +𝟿𐮋。󠄊; 9𐮋.; [B1]; xn--9-rv5i.; ; ; # 9𐮋. +9𐮋。󠄊; 9𐮋.; [B1]; xn--9-rv5i.; ; ; # 9𐮋. +xn--9-rv5i.; 9𐮋.; [B1]; xn--9-rv5i.; ; ; # 9𐮋. +-䟖F。\u07CB⒈\u0662; -䟖f.\u07CB⒈\u0662; [B4, V6]; xn---f-mz8b08788k.xn--bib53ev44d; ; ; # -䟖f.ߋ⒈٢ +-䟖F。\u07CB1.\u0662; -䟖f.\u07CB1.\u0662; [B1, V6]; xn---f-mz8b08788k.xn--1-ybd.xn--bib; ; ; # -䟖f.ߋ1.٢ +-䟖f。\u07CB1.\u0662; -䟖f.\u07CB1.\u0662; [B1, V6]; xn---f-mz8b08788k.xn--1-ybd.xn--bib; ; ; # -䟖f.ߋ1.٢ +xn---f-mz8b08788k.xn--1-ybd.xn--bib; -䟖f.\u07CB1.\u0662; [B1, V6]; xn---f-mz8b08788k.xn--1-ybd.xn--bib; ; ; # -䟖f.ߋ1.٢ +-䟖f。\u07CB⒈\u0662; -䟖f.\u07CB⒈\u0662; [B4, V6]; xn---f-mz8b08788k.xn--bib53ev44d; ; ; # -䟖f.ߋ⒈٢ +xn---f-mz8b08788k.xn--bib53ev44d; -䟖f.\u07CB⒈\u0662; [B4, V6]; xn---f-mz8b08788k.xn--bib53ev44d; ; ; # -䟖f.ߋ⒈٢ +\u200C。𐹺; \u200C.𐹺; [B1, C1]; xn--0ug.xn--yo0d; ; .xn--yo0d; [B1, A4_2] # .𐹺 +\u200C。𐹺; \u200C.𐹺; [B1, C1]; xn--0ug.xn--yo0d; ; .xn--yo0d; [B1, A4_2] # .𐹺 +.xn--yo0d; .𐹺; [B1, X4_2]; .xn--yo0d; [B1, A4_2]; ; # .𐹺 +xn--0ug.xn--yo0d; \u200C.𐹺; [B1, C1]; xn--0ug.xn--yo0d; ; ; # .𐹺 +𐡆.≯\u200C-𞥀; ; [B1, C1]; xn--le9c.xn----rgn40iy359e; ; xn--le9c.xn----ogo9956r; [B1] # 𐡆.≯-𞥀 +𐡆.>\u0338\u200C-𞥀; 𐡆.≯\u200C-𞥀; [B1, C1]; xn--le9c.xn----rgn40iy359e; ; xn--le9c.xn----ogo9956r; [B1] # 𐡆.≯-𞥀 +𐡆.>\u0338\u200C-𞤞; 𐡆.≯\u200C-𞥀; [B1, C1]; xn--le9c.xn----rgn40iy359e; ; xn--le9c.xn----ogo9956r; [B1] # 𐡆.≯-𞥀 +𐡆.≯\u200C-𞤞; 𐡆.≯\u200C-𞥀; [B1, C1]; xn--le9c.xn----rgn40iy359e; ; xn--le9c.xn----ogo9956r; [B1] # 𐡆.≯-𞥀 +xn--le9c.xn----ogo9956r; 𐡆.≯-𞥀; [B1]; xn--le9c.xn----ogo9956r; ; ; # 𐡆.≯-𞥀 +xn--le9c.xn----rgn40iy359e; 𐡆.≯\u200C-𞥀; [B1, C1]; xn--le9c.xn----rgn40iy359e; ; ; # 𐡆.≯-𞥀 +-。≠\uFCD7; -.≠\u0647\u062C; [B1, V3, V6]; xn----f411m.xn--rgb7c611j; ; ; # -.≠هج +-。=\u0338\uFCD7; -.≠\u0647\u062C; [B1, V3, V6]; xn----f411m.xn--rgb7c611j; ; ; # -.≠هج +-。≠\u0647\u062C; -.≠\u0647\u062C; [B1, V3, V6]; xn----f411m.xn--rgb7c611j; ; ; # -.≠هج +-。=\u0338\u0647\u062C; -.≠\u0647\u062C; [B1, V3, V6]; xn----f411m.xn--rgb7c611j; ; ; # -.≠هج +xn----f411m.xn--rgb7c611j; -.≠\u0647\u062C; [B1, V3, V6]; xn----f411m.xn--rgb7c611j; ; ; # -.≠هج +𑈵。\u200D; 𑈵.\u200D; [B1, C2, V6]; xn--8g1d12120a.xn--1ug6651p; ; xn--8g1d12120a.xn--5l6h; [V6] # 𑈵. +xn--8g1d12120a.xn--5l6h; 𑈵.; [V6]; xn--8g1d12120a.xn--5l6h; ; ; # 𑈵. +xn--8g1d12120a.xn--1ug6651p; 𑈵.\u200D; [B1, C2, V6]; xn--8g1d12120a.xn--1ug6651p; ; ; # 𑈵. +𑋧\uA9C02。㧉; 𑋧\uA9C02.㧉; [V5, V6]; xn--2-5z4eu89y.xn--97l02706d; ; ; # 𑋧꧀2.㧉 +𑋧\uA9C02。㧉; 𑋧\uA9C02.㧉; [V5, V6]; xn--2-5z4eu89y.xn--97l02706d; ; ; # 𑋧꧀2.㧉 +xn--2-5z4eu89y.xn--97l02706d; 𑋧\uA9C02.㧉; [V5, V6]; xn--2-5z4eu89y.xn--97l02706d; ; ; # 𑋧꧀2.㧉 +\u200C𐹴。≯6; \u200C𐹴.≯6; [B1, C1, V6]; xn--0ug7105gf5wfxepq.xn--6-ogo; ; xn--so0du768aim9m.xn--6-ogo; [B1, B5, B6, V6] # 𐹴.≯6 +\u200C𐹴。>\u03386; \u200C𐹴.≯6; [B1, C1, V6]; xn--0ug7105gf5wfxepq.xn--6-ogo; ; xn--so0du768aim9m.xn--6-ogo; [B1, B5, B6, V6] # 𐹴.≯6 +xn--so0du768aim9m.xn--6-ogo; 𐹴.≯6; [B1, B5, B6, V6]; xn--so0du768aim9m.xn--6-ogo; ; ; # 𐹴.≯6 +xn--0ug7105gf5wfxepq.xn--6-ogo; \u200C𐹴.≯6; [B1, C1, V6]; xn--0ug7105gf5wfxepq.xn--6-ogo; ; ; # 𐹴.≯6 +𑁿.𐹦-\u200D; 𑁿.𐹦-\u200D; [B1, C2, V5, V6]; xn--q30d.xn----ugn1088hfsxv; ; xn--q30d.xn----i26i1299n; [B1, V3, V5, V6] # 𑁿.𐹦- +𑁿.𐹦-\u200D; ; [B1, C2, V5, V6]; xn--q30d.xn----ugn1088hfsxv; ; xn--q30d.xn----i26i1299n; [B1, V3, V5, V6] # 𑁿.𐹦- +xn--q30d.xn----i26i1299n; 𑁿.𐹦-; [B1, V3, V5, V6]; xn--q30d.xn----i26i1299n; ; ; # 𑁿.𐹦- +xn--q30d.xn----ugn1088hfsxv; 𑁿.𐹦-\u200D; [B1, C2, V5, V6]; xn--q30d.xn----ugn1088hfsxv; ; ; # 𑁿.𐹦- +⤸ς。\uFFA0; ⤸ς.\uFFA0; [V6]; xn--3xa392qmp03d.xn--cl7c; ; xn--4xa192qmp03d.xn--cl7c; # ⤸ς. +⤸ς。\u1160; ⤸ς.\u1160; [V6]; xn--3xa392qmp03d.xn--psd; ; xn--4xa192qmp03d.xn--psd; # ⤸ς. +⤸Σ。\u1160; ⤸σ.\u1160; [V6]; xn--4xa192qmp03d.xn--psd; ; ; # ⤸σ. +⤸σ。\u1160; ⤸σ.\u1160; [V6]; xn--4xa192qmp03d.xn--psd; ; ; # ⤸σ. +xn--4xa192qmp03d.xn--psd; ⤸σ.\u1160; [V6]; xn--4xa192qmp03d.xn--psd; ; ; # ⤸σ. +xn--3xa392qmp03d.xn--psd; ⤸ς.\u1160; [V6]; xn--3xa392qmp03d.xn--psd; ; ; # ⤸ς. +⤸Σ。\uFFA0; ⤸σ.\uFFA0; [V6]; xn--4xa192qmp03d.xn--cl7c; ; ; # ⤸σ. +⤸σ。\uFFA0; ⤸σ.\uFFA0; [V6]; xn--4xa192qmp03d.xn--cl7c; ; ; # ⤸σ. +xn--4xa192qmp03d.xn--cl7c; ⤸σ.\uFFA0; [V6]; xn--4xa192qmp03d.xn--cl7c; ; ; # ⤸σ. +xn--3xa392qmp03d.xn--cl7c; ⤸ς.\uFFA0; [V6]; xn--3xa392qmp03d.xn--cl7c; ; ; # ⤸ς. +\u0765\u1035𐫔\u06D5.𐦬𑋪Ⴃ; ; [B2, B3, V6]; xn--llb10as9tqp5y.xn--bnd9168j21f; ; ; # ݥဵ𐫔ە.𐦬𑋪Ⴃ +\u0765\u1035𐫔\u06D5.𐦬𑋪ⴃ; ; [B2, B3]; xn--llb10as9tqp5y.xn--ukj7371e21f; ; ; # ݥဵ𐫔ە.𐦬𑋪ⴃ +xn--llb10as9tqp5y.xn--ukj7371e21f; \u0765\u1035𐫔\u06D5.𐦬𑋪ⴃ; [B2, B3]; xn--llb10as9tqp5y.xn--ukj7371e21f; ; ; # ݥဵ𐫔ە.𐦬𑋪ⴃ +xn--llb10as9tqp5y.xn--bnd9168j21f; \u0765\u1035𐫔\u06D5.𐦬𑋪Ⴃ; [B2, B3, V6]; xn--llb10as9tqp5y.xn--bnd9168j21f; ; ; # ݥဵ𐫔ە.𐦬𑋪Ⴃ +\u0661\u1B44-킼.\u1BAA\u0616\u066C≯; ; [B1, B5, B6, V5]; xn----9pc551nk39n.xn--4fb6o571degg; ; ; # ١᭄-킼.᮪ؖ٬≯ +\u0661\u1B44-킼.\u1BAA\u0616\u066C>\u0338; \u0661\u1B44-킼.\u1BAA\u0616\u066C≯; [B1, B5, B6, V5]; xn----9pc551nk39n.xn--4fb6o571degg; ; ; # ١᭄-킼.᮪ؖ٬≯ +xn----9pc551nk39n.xn--4fb6o571degg; \u0661\u1B44-킼.\u1BAA\u0616\u066C≯; [B1, B5, B6, V5]; xn----9pc551nk39n.xn--4fb6o571degg; ; ; # ١᭄-킼.᮪ؖ٬≯ +-。\u06C2\u0604𑓂; -.\u06C2\u0604𑓂; [B1, B2, B3, V3, V6]; -.xn--mfb39a7208dzgs3d; ; ; # -.ۂ𑓂 +-。\u06C1\u0654\u0604𑓂; -.\u06C2\u0604𑓂; [B1, B2, B3, V3, V6]; -.xn--mfb39a7208dzgs3d; ; ; # -.ۂ𑓂 +-.xn--mfb39a7208dzgs3d; -.\u06C2\u0604𑓂; [B1, B2, B3, V3, V6]; -.xn--mfb39a7208dzgs3d; ; ; # -.ۂ𑓂 +\u200D.\u05BDꡝ𐋡; \u200D.\u05BDꡝ𐋡; [C2, V5, V6]; xn--1ug66101lt8me.xn--ldb8734fg0qcyzzg; ; xn--b726ey18m.xn--ldb8734fg0qcyzzg; [V5, V6] # .ֽꡝ𐋡 +\u200D.\u05BDꡝ𐋡; ; [C2, V5, V6]; xn--1ug66101lt8me.xn--ldb8734fg0qcyzzg; ; xn--b726ey18m.xn--ldb8734fg0qcyzzg; [V5, V6] # .ֽꡝ𐋡 +xn--b726ey18m.xn--ldb8734fg0qcyzzg; .\u05BDꡝ𐋡; [V5, V6]; xn--b726ey18m.xn--ldb8734fg0qcyzzg; ; ; # .ֽꡝ𐋡 +xn--1ug66101lt8me.xn--ldb8734fg0qcyzzg; \u200D.\u05BDꡝ𐋡; [C2, V5, V6]; xn--1ug66101lt8me.xn--ldb8734fg0qcyzzg; ; ; # .ֽꡝ𐋡 +︒ς。𐮈; ︒ς.𐮈; [B1, V6]; xn--3xa3729jwz5t7gl5f.xn--f29c; ; xn--4xa1729jwz5t7gl5f.xn--f29c; # ︒ς.𐮈 +。ς。𐮈; .ς.𐮈; [V6, X4_2]; .xn--3xa88573c7n64d.xn--f29c; [V6, A4_2]; .xn--4xa68573c7n64d.xn--f29c; # .ς.𐮈 +。Σ。𐮈; .σ.𐮈; [V6, X4_2]; .xn--4xa68573c7n64d.xn--f29c; [V6, A4_2]; ; # .σ.𐮈 +。σ。𐮈; .σ.𐮈; [V6, X4_2]; .xn--4xa68573c7n64d.xn--f29c; [V6, A4_2]; ; # .σ.𐮈 +.xn--4xa68573c7n64d.xn--f29c; .σ.𐮈; [V6, X4_2]; .xn--4xa68573c7n64d.xn--f29c; [V6, A4_2]; ; # .σ.𐮈 +.xn--3xa88573c7n64d.xn--f29c; .ς.𐮈; [V6, X4_2]; .xn--3xa88573c7n64d.xn--f29c; [V6, A4_2]; ; # .ς.𐮈 +︒Σ。𐮈; ︒σ.𐮈; [B1, V6]; xn--4xa1729jwz5t7gl5f.xn--f29c; ; ; # ︒σ.𐮈 +︒σ。𐮈; ︒σ.𐮈; [B1, V6]; xn--4xa1729jwz5t7gl5f.xn--f29c; ; ; # ︒σ.𐮈 +xn--4xa1729jwz5t7gl5f.xn--f29c; ︒σ.𐮈; [B1, V6]; xn--4xa1729jwz5t7gl5f.xn--f29c; ; ; # ︒σ.𐮈 +xn--3xa3729jwz5t7gl5f.xn--f29c; ︒ς.𐮈; [B1, V6]; xn--3xa3729jwz5t7gl5f.xn--f29c; ; ; # ︒ς.𐮈 +\u07D9.\u06EE≯󠅲; \u07D9.\u06EE≯; [B2, B3, V6]; xn--0sb.xn--bmb691l0524t; ; ; # ߙ.ۮ≯ +\u07D9.\u06EE>\u0338󠅲; \u07D9.\u06EE≯; [B2, B3, V6]; xn--0sb.xn--bmb691l0524t; ; ; # ߙ.ۮ≯ +\u07D9.\u06EE≯󠅲; \u07D9.\u06EE≯; [B2, B3, V6]; xn--0sb.xn--bmb691l0524t; ; ; # ߙ.ۮ≯ +\u07D9.\u06EE>\u0338󠅲; \u07D9.\u06EE≯; [B2, B3, V6]; xn--0sb.xn--bmb691l0524t; ; ; # ߙ.ۮ≯ +xn--0sb.xn--bmb691l0524t; \u07D9.\u06EE≯; [B2, B3, V6]; xn--0sb.xn--bmb691l0524t; ; ; # ߙ.ۮ≯ +\u1A73.𐭍; ; [B1, V5, V6]; xn--2of22352n.xn--q09c; ; ; # ᩳ.𐭍 +xn--2of22352n.xn--q09c; \u1A73.𐭍; [B1, V5, V6]; xn--2of22352n.xn--q09c; ; ; # ᩳ.𐭍 +⒉≠。Ⴟ⬣Ⴈ; ⒉≠.Ⴟ⬣Ⴈ; [V6]; xn--1ch07f91401d.xn--gnd9b297j; ; ; # ⒉≠.Ⴟ⬣Ⴈ +⒉=\u0338。Ⴟ⬣Ⴈ; ⒉≠.Ⴟ⬣Ⴈ; [V6]; xn--1ch07f91401d.xn--gnd9b297j; ; ; # ⒉≠.Ⴟ⬣Ⴈ +2.≠。Ⴟ⬣Ⴈ; 2.≠.Ⴟ⬣Ⴈ; [V6]; 2.xn--1chz4101l.xn--gnd9b297j; ; ; # 2.≠.Ⴟ⬣Ⴈ +2.=\u0338。Ⴟ⬣Ⴈ; 2.≠.Ⴟ⬣Ⴈ; [V6]; 2.xn--1chz4101l.xn--gnd9b297j; ; ; # 2.≠.Ⴟ⬣Ⴈ +2.=\u0338。ⴟ⬣ⴈ; 2.≠.ⴟ⬣ⴈ; [V6]; 2.xn--1chz4101l.xn--45iz7d6b; ; ; # 2.≠.ⴟ⬣ⴈ +2.≠。ⴟ⬣ⴈ; 2.≠.ⴟ⬣ⴈ; [V6]; 2.xn--1chz4101l.xn--45iz7d6b; ; ; # 2.≠.ⴟ⬣ⴈ +2.xn--1chz4101l.xn--45iz7d6b; 2.≠.ⴟ⬣ⴈ; [V6]; 2.xn--1chz4101l.xn--45iz7d6b; ; ; # 2.≠.ⴟ⬣ⴈ +2.xn--1chz4101l.xn--gnd9b297j; 2.≠.Ⴟ⬣Ⴈ; [V6]; 2.xn--1chz4101l.xn--gnd9b297j; ; ; # 2.≠.Ⴟ⬣Ⴈ +⒉=\u0338。ⴟ⬣ⴈ; ⒉≠.ⴟ⬣ⴈ; [V6]; xn--1ch07f91401d.xn--45iz7d6b; ; ; # ⒉≠.ⴟ⬣ⴈ +⒉≠。ⴟ⬣ⴈ; ⒉≠.ⴟ⬣ⴈ; [V6]; xn--1ch07f91401d.xn--45iz7d6b; ; ; # ⒉≠.ⴟ⬣ⴈ +xn--1ch07f91401d.xn--45iz7d6b; ⒉≠.ⴟ⬣ⴈ; [V6]; xn--1ch07f91401d.xn--45iz7d6b; ; ; # ⒉≠.ⴟ⬣ⴈ +xn--1ch07f91401d.xn--gnd9b297j; ⒉≠.Ⴟ⬣Ⴈ; [V6]; xn--1ch07f91401d.xn--gnd9b297j; ; ; # ⒉≠.Ⴟ⬣Ⴈ +-\u0FB8Ⴥ。-𐹽\u0774𞣑; -\u0FB8Ⴥ.-𐹽\u0774𞣑; [B1, V3, V6]; xn----xmg12fm2555h.xn----05c4213ryr0g; ; ; # -ྸჅ.-𐹽ݴ𞣑 +-\u0FB8ⴥ。-𐹽\u0774𞣑; -\u0FB8ⴥ.-𐹽\u0774𞣑; [B1, V3, V6]; xn----xmg317tgv352a.xn----05c4213ryr0g; ; ; # -ྸⴥ.-𐹽ݴ𞣑 +xn----xmg317tgv352a.xn----05c4213ryr0g; -\u0FB8ⴥ.-𐹽\u0774𞣑; [B1, V3, V6]; xn----xmg317tgv352a.xn----05c4213ryr0g; ; ; # -ྸⴥ.-𐹽ݴ𞣑 +xn----xmg12fm2555h.xn----05c4213ryr0g; -\u0FB8Ⴥ.-𐹽\u0774𞣑; [B1, V3, V6]; xn----xmg12fm2555h.xn----05c4213ryr0g; ; ; # -ྸჅ.-𐹽ݴ𞣑 +\u0659。𑄴︒\u0627\u07DD; \u0659.𑄴︒\u0627\u07DD; [B1, V5, V6]; xn--1hb.xn--mgb09fp820c08pa; ; ; # ٙ.𑄴︒اߝ +\u0659。𑄴。\u0627\u07DD; \u0659.𑄴.\u0627\u07DD; [B1, V5]; xn--1hb.xn--w80d.xn--mgb09f; ; ; # ٙ.𑄴.اߝ +xn--1hb.xn--w80d.xn--mgb09f; \u0659.𑄴.\u0627\u07DD; [B1, V5]; xn--1hb.xn--w80d.xn--mgb09f; ; ; # ٙ.𑄴.اߝ +xn--1hb.xn--mgb09fp820c08pa; \u0659.𑄴︒\u0627\u07DD; [B1, V5, V6]; xn--1hb.xn--mgb09fp820c08pa; ; ; # ٙ.𑄴︒اߝ +Ⴙ\u0638.󠆓\u200D; Ⴙ\u0638.\u200D; [B1, B5, B6, C2, V6]; xn--3gb194c.xn--1ug; ; xn--3gb194c.; [B5, B6, V6] # Ⴙظ. +ⴙ\u0638.󠆓\u200D; ⴙ\u0638.\u200D; [B1, B5, B6, C2]; xn--3gb910r.xn--1ug; ; xn--3gb910r.; [B5, B6] # ⴙظ. +xn--3gb910r.; ⴙ\u0638.; [B5, B6]; xn--3gb910r.; ; ; # ⴙظ. +xn--3gb910r.xn--1ug; ⴙ\u0638.\u200D; [B1, B5, B6, C2]; xn--3gb910r.xn--1ug; ; ; # ⴙظ. +xn--3gb194c.; Ⴙ\u0638.; [B5, B6, V6]; xn--3gb194c.; ; ; # Ⴙظ. +xn--3gb194c.xn--1ug; Ⴙ\u0638.\u200D; [B1, B5, B6, C2, V6]; xn--3gb194c.xn--1ug; ; ; # Ⴙظ. +󠆸。₆0𐺧\u0756; .60𐺧\u0756; [B1, X4_2]; .xn--60-cke9470y; [B1, A4_2]; ; # .60𐺧ݖ +󠆸。60𐺧\u0756; .60𐺧\u0756; [B1, X4_2]; .xn--60-cke9470y; [B1, A4_2]; ; # .60𐺧ݖ +.xn--60-cke9470y; .60𐺧\u0756; [B1, X4_2]; .xn--60-cke9470y; [B1, A4_2]; ; # .60𐺧ݖ +6\u084F。-𑈴; 6\u084F.-𑈴; [B1, V3]; xn--6-jjd.xn----6n8i; ; ; # 6ࡏ.-𑈴 +6\u084F。-𑈴; 6\u084F.-𑈴; [B1, V3]; xn--6-jjd.xn----6n8i; ; ; # 6ࡏ.-𑈴 +xn--6-jjd.xn----6n8i; 6\u084F.-𑈴; [B1, V3]; xn--6-jjd.xn----6n8i; ; ; # 6ࡏ.-𑈴 +\u200D𐹰。\u0ACDς\u08D6; \u200D𐹰.\u0ACDς\u08D6; [B1, C2, V5, V6]; xn--1ugx105gq26y.xn--3xa41xcwbfz15g; ; xn--oo0d1330n.xn--4xa21xcwbfz15g; [B1, B5, B6, V5, V6] # 𐹰.્ςࣖ +\u200D𐹰。\u0ACDς\u08D6; \u200D𐹰.\u0ACDς\u08D6; [B1, C2, V5, V6]; xn--1ugx105gq26y.xn--3xa41xcwbfz15g; ; xn--oo0d1330n.xn--4xa21xcwbfz15g; [B1, B5, B6, V5, V6] # 𐹰.્ςࣖ +\u200D𐹰。\u0ACDΣ\u08D6; \u200D𐹰.\u0ACDσ\u08D6; [B1, C2, V5, V6]; xn--1ugx105gq26y.xn--4xa21xcwbfz15g; ; xn--oo0d1330n.xn--4xa21xcwbfz15g; [B1, B5, B6, V5, V6] # 𐹰.્σࣖ +\u200D𐹰。\u0ACDσ\u08D6; \u200D𐹰.\u0ACDσ\u08D6; [B1, C2, V5, V6]; xn--1ugx105gq26y.xn--4xa21xcwbfz15g; ; xn--oo0d1330n.xn--4xa21xcwbfz15g; [B1, B5, B6, V5, V6] # 𐹰.્σࣖ +xn--oo0d1330n.xn--4xa21xcwbfz15g; 𐹰.\u0ACDσ\u08D6; [B1, B5, B6, V5, V6]; xn--oo0d1330n.xn--4xa21xcwbfz15g; ; ; # 𐹰.્σࣖ +xn--1ugx105gq26y.xn--4xa21xcwbfz15g; \u200D𐹰.\u0ACDσ\u08D6; [B1, C2, V5, V6]; xn--1ugx105gq26y.xn--4xa21xcwbfz15g; ; ; # 𐹰.્σࣖ +xn--1ugx105gq26y.xn--3xa41xcwbfz15g; \u200D𐹰.\u0ACDς\u08D6; [B1, C2, V5, V6]; xn--1ugx105gq26y.xn--3xa41xcwbfz15g; ; ; # 𐹰.્ςࣖ +\u200D𐹰。\u0ACDΣ\u08D6; \u200D𐹰.\u0ACDσ\u08D6; [B1, C2, V5, V6]; xn--1ugx105gq26y.xn--4xa21xcwbfz15g; ; xn--oo0d1330n.xn--4xa21xcwbfz15g; [B1, B5, B6, V5, V6] # 𐹰.્σࣖ +\u200D𐹰。\u0ACDσ\u08D6; \u200D𐹰.\u0ACDσ\u08D6; [B1, C2, V5, V6]; xn--1ugx105gq26y.xn--4xa21xcwbfz15g; ; xn--oo0d1330n.xn--4xa21xcwbfz15g; [B1, B5, B6, V5, V6] # 𐹰.્σࣖ +⒈Ⴓ⒪.\u0DCA\u088B𐹢; ⒈Ⴓ⒪.\u0DCA\u088B𐹢; [B1, V5, V6]; xn--rnd762h7cx3027d.xn--3xb99xpx1yoes3e; ; ; # ⒈Ⴓ⒪.්ࢋ𐹢 +1.Ⴓ(o).\u0DCA\u088B𐹢; ; [B1, B6, V5, V6]; 1.xn--(o)-7sn88849j.xn--3xb99xpx1yoes3e; ; ; # 1.Ⴓ(o).්ࢋ𐹢 +1.ⴓ(o).\u0DCA\u088B𐹢; ; [B1, B6, V5, V6]; 1.xn--(o)-ej1bu5389e.xn--3xb99xpx1yoes3e; ; ; # 1.ⴓ(o).්ࢋ𐹢 +1.Ⴓ(O).\u0DCA\u088B𐹢; 1.Ⴓ(o).\u0DCA\u088B𐹢; [B1, B6, V5, V6]; 1.xn--(o)-7sn88849j.xn--3xb99xpx1yoes3e; ; ; # 1.Ⴓ(o).්ࢋ𐹢 +1.xn--(o)-7sn88849j.xn--3xb99xpx1yoes3e; 1.Ⴓ(o).\u0DCA\u088B𐹢; [B1, B6, V5, V6]; 1.xn--(o)-7sn88849j.xn--3xb99xpx1yoes3e; ; ; # 1.Ⴓ(o).්ࢋ𐹢 +1.xn--(o)-ej1bu5389e.xn--3xb99xpx1yoes3e; 1.ⴓ(o).\u0DCA\u088B𐹢; [B1, B6, V5, V6]; 1.xn--(o)-ej1bu5389e.xn--3xb99xpx1yoes3e; ; ; # 1.ⴓ(o).්ࢋ𐹢 +⒈ⴓ⒪.\u0DCA\u088B𐹢; ⒈ⴓ⒪.\u0DCA\u088B𐹢; [B1, V5, V6]; xn--tsh0ds63atl31n.xn--3xb99xpx1yoes3e; ; ; # ⒈ⴓ⒪.්ࢋ𐹢 +xn--tsh0ds63atl31n.xn--3xb99xpx1yoes3e; ⒈ⴓ⒪.\u0DCA\u088B𐹢; [B1, V5, V6]; xn--tsh0ds63atl31n.xn--3xb99xpx1yoes3e; ; ; # ⒈ⴓ⒪.්ࢋ𐹢 +xn--rnd762h7cx3027d.xn--3xb99xpx1yoes3e; ⒈Ⴓ⒪.\u0DCA\u088B𐹢; [B1, V5, V6]; xn--rnd762h7cx3027d.xn--3xb99xpx1yoes3e; ; ; # ⒈Ⴓ⒪.්ࢋ𐹢 +𞤷.𐮐𞢁𐹠\u0624; ; ; xn--ve6h.xn--jgb1694kz0b2176a; ; ; # 𞤷.𐮐𞢁𐹠ؤ +𞤷.𐮐𞢁𐹠\u0648\u0654; 𞤷.𐮐𞢁𐹠\u0624; ; xn--ve6h.xn--jgb1694kz0b2176a; ; ; # 𞤷.𐮐𞢁𐹠ؤ +𞤕.𐮐𞢁𐹠\u0648\u0654; 𞤷.𐮐𞢁𐹠\u0624; ; xn--ve6h.xn--jgb1694kz0b2176a; ; ; # 𞤷.𐮐𞢁𐹠ؤ +𞤕.𐮐𞢁𐹠\u0624; 𞤷.𐮐𞢁𐹠\u0624; ; xn--ve6h.xn--jgb1694kz0b2176a; ; ; # 𞤷.𐮐𞢁𐹠ؤ +xn--ve6h.xn--jgb1694kz0b2176a; 𞤷.𐮐𞢁𐹠\u0624; ; xn--ve6h.xn--jgb1694kz0b2176a; ; ; # 𞤷.𐮐𞢁𐹠ؤ +𐲈-。𑄳; 𐳈-.𑄳; [B1, B3, V3, V5, V6]; xn----ue6i.xn--v80d6662t; ; ; # 𐳈-.𑄳 +𐲈-。𑄳; 𐳈-.𑄳; [B1, B3, V3, V5, V6]; xn----ue6i.xn--v80d6662t; ; ; # 𐳈-.𑄳 +𐳈-。𑄳; 𐳈-.𑄳; [B1, B3, V3, V5, V6]; xn----ue6i.xn--v80d6662t; ; ; # 𐳈-.𑄳 +xn----ue6i.xn--v80d6662t; 𐳈-.𑄳; [B1, B3, V3, V5, V6]; xn----ue6i.xn--v80d6662t; ; ; # 𐳈-.𑄳 +𐳈-。𑄳; 𐳈-.𑄳; [B1, B3, V3, V5, V6]; xn----ue6i.xn--v80d6662t; ; ; # 𐳈-.𑄳 +-ꡧ.🄉; -ꡧ.🄉; [V3, V6]; xn----hg4ei0361g.xn--207ht163h7m94c; ; ; # -ꡧ.🄉 +-ꡧ.8,; ; [V3, V6]; xn----hg4ei0361g.xn--8,-k362evu488a; ; ; # -ꡧ.8, +xn----hg4ei0361g.xn--8,-k362evu488a; -ꡧ.8,; [V3, V6]; xn----hg4ei0361g.xn--8,-k362evu488a; ; ; # -ꡧ.8, +xn----hg4ei0361g.xn--207ht163h7m94c; -ꡧ.🄉; [V3, V6]; xn----hg4ei0361g.xn--207ht163h7m94c; ; ; # -ꡧ.🄉 +臯𧔤.\u0768𝟝; 臯𧔤.\u07685; [B1, V6]; xn--zb1at733hm579ddhla.xn--5-b5c; ; ; # 臯𧔤.ݨ5 +臯𧔤.\u07685; ; [B1, V6]; xn--zb1at733hm579ddhla.xn--5-b5c; ; ; # 臯𧔤.ݨ5 +xn--zb1at733hm579ddhla.xn--5-b5c; 臯𧔤.\u07685; [B1, V6]; xn--zb1at733hm579ddhla.xn--5-b5c; ; ; # 臯𧔤.ݨ5 +≮𐹣.𝨿; ≮𐹣.𝨿; [B1, V5]; xn--gdh1504g.xn--e92h; ; ; # ≮𐹣.𝨿 +<\u0338𐹣.𝨿; ≮𐹣.𝨿; [B1, V5]; xn--gdh1504g.xn--e92h; ; ; # ≮𐹣.𝨿 +≮𐹣.𝨿; ; [B1, V5]; xn--gdh1504g.xn--e92h; ; ; # ≮𐹣.𝨿 +<\u0338𐹣.𝨿; ≮𐹣.𝨿; [B1, V5]; xn--gdh1504g.xn--e92h; ; ; # ≮𐹣.𝨿 +xn--gdh1504g.xn--e92h; ≮𐹣.𝨿; [B1, V5]; xn--gdh1504g.xn--e92h; ; ; # ≮𐹣.𝨿 +𐹯ᯛ\u0A4D。脥; 𐹯ᯛ\u0A4D.脥; [B1]; xn--ybc101g3m1p.xn--740a; ; ; # 𐹯ᯛ੍.脥 +𐹯ᯛ\u0A4D。脥; 𐹯ᯛ\u0A4D.脥; [B1]; xn--ybc101g3m1p.xn--740a; ; ; # 𐹯ᯛ੍.脥 +xn--ybc101g3m1p.xn--740a; 𐹯ᯛ\u0A4D.脥; [B1]; xn--ybc101g3m1p.xn--740a; ; ; # 𐹯ᯛ੍.脥 +\u1B44\u115F.-; ; [B1, B5, V3, V5, V6]; xn--osd971cpx70btgt8b.-; ; ; # ᭄.- +xn--osd971cpx70btgt8b.-; \u1B44\u115F.-; [B1, B5, V3, V5, V6]; xn--osd971cpx70btgt8b.-; ; ; # ᭄.- +\u200C。\u0354; \u200C.\u0354; [C1, V5]; xn--0ug.xn--yua; ; .xn--yua; [V5, A4_2] # .͔ +\u200C。\u0354; \u200C.\u0354; [C1, V5]; xn--0ug.xn--yua; ; .xn--yua; [V5, A4_2] # .͔ +.xn--yua; .\u0354; [V5, X4_2]; .xn--yua; [V5, A4_2]; ; # .͔ +xn--0ug.xn--yua; \u200C.\u0354; [C1, V5]; xn--0ug.xn--yua; ; ; # .͔ +𞤥󠅮.ᡄႮ; 𞤥.ᡄႮ; [V6]; xn--de6h.xn--mnd799a; ; ; # 𞤥.ᡄႮ +𞤥󠅮.ᡄႮ; 𞤥.ᡄႮ; [V6]; xn--de6h.xn--mnd799a; ; ; # 𞤥.ᡄႮ +𞤥󠅮.ᡄⴎ; 𞤥.ᡄⴎ; ; xn--de6h.xn--37e857h; ; ; # 𞤥.ᡄⴎ +𞤃󠅮.ᡄႮ; 𞤥.ᡄႮ; [V6]; xn--de6h.xn--mnd799a; ; ; # 𞤥.ᡄႮ +𞤃󠅮.ᡄⴎ; 𞤥.ᡄⴎ; ; xn--de6h.xn--37e857h; ; ; # 𞤥.ᡄⴎ +xn--de6h.xn--37e857h; 𞤥.ᡄⴎ; ; xn--de6h.xn--37e857h; ; ; # 𞤥.ᡄⴎ +𞤥.ᡄⴎ; ; ; xn--de6h.xn--37e857h; ; ; # 𞤥.ᡄⴎ +𞤃.ᡄႮ; 𞤥.ᡄႮ; [V6]; xn--de6h.xn--mnd799a; ; ; # 𞤥.ᡄႮ +𞤃.ᡄⴎ; 𞤥.ᡄⴎ; ; xn--de6h.xn--37e857h; ; ; # 𞤥.ᡄⴎ +xn--de6h.xn--mnd799a; 𞤥.ᡄႮ; [V6]; xn--de6h.xn--mnd799a; ; ; # 𞤥.ᡄႮ +𞤥󠅮.ᡄⴎ; 𞤥.ᡄⴎ; ; xn--de6h.xn--37e857h; ; ; # 𞤥.ᡄⴎ +𞤃󠅮.ᡄႮ; 𞤥.ᡄႮ; [V6]; xn--de6h.xn--mnd799a; ; ; # 𞤥.ᡄႮ +𞤃󠅮.ᡄⴎ; 𞤥.ᡄⴎ; ; xn--de6h.xn--37e857h; ; ; # 𞤥.ᡄⴎ +𞤥.ᡄႮ; ; [V6]; xn--de6h.xn--mnd799a; ; ; # 𞤥.ᡄႮ +𞤧𝨨Ξ.𪺏㛨❸; 𞤧𝨨ξ.𪺏㛨❸; [B2, B3, B6]; xn--zxa5691vboja.xn--bfi293ci119b; ; ; # 𞤧𝨨ξ.𪺏㛨❸ +𞤧𝨨Ξ.𪺏㛨❸; 𞤧𝨨ξ.𪺏㛨❸; [B2, B3, B6]; xn--zxa5691vboja.xn--bfi293ci119b; ; ; # 𞤧𝨨ξ.𪺏㛨❸ +𞤧𝨨ξ.𪺏㛨❸; ; [B2, B3, B6]; xn--zxa5691vboja.xn--bfi293ci119b; ; ; # 𞤧𝨨ξ.𪺏㛨❸ +𞤅𝨨Ξ.𪺏㛨❸; 𞤧𝨨ξ.𪺏㛨❸; [B2, B3, B6]; xn--zxa5691vboja.xn--bfi293ci119b; ; ; # 𞤧𝨨ξ.𪺏㛨❸ +𞤅𝨨ξ.𪺏㛨❸; 𞤧𝨨ξ.𪺏㛨❸; [B2, B3, B6]; xn--zxa5691vboja.xn--bfi293ci119b; ; ; # 𞤧𝨨ξ.𪺏㛨❸ +xn--zxa5691vboja.xn--bfi293ci119b; 𞤧𝨨ξ.𪺏㛨❸; [B2, B3, B6]; xn--zxa5691vboja.xn--bfi293ci119b; ; ; # 𞤧𝨨ξ.𪺏㛨❸ +𞤧𝨨ξ.𪺏㛨❸; 𞤧𝨨ξ.𪺏㛨❸; [B2, B3, B6]; xn--zxa5691vboja.xn--bfi293ci119b; ; ; # 𞤧𝨨ξ.𪺏㛨❸ +𞤅𝨨Ξ.𪺏㛨❸; 𞤧𝨨ξ.𪺏㛨❸; [B2, B3, B6]; xn--zxa5691vboja.xn--bfi293ci119b; ; ; # 𞤧𝨨ξ.𪺏㛨❸ +𞤅𝨨ξ.𪺏㛨❸; 𞤧𝨨ξ.𪺏㛨❸; [B2, B3, B6]; xn--zxa5691vboja.xn--bfi293ci119b; ; ; # 𞤧𝨨ξ.𪺏㛨❸ +᠆몆\u200C-。Ⴛ𐦅︒; ᠆몆\u200C-.Ⴛ𐦅︒; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--znd2362jhgh; ; xn----e3j6620g.xn--znd2362jhgh; [B1, B5, B6, V3, V6] # ᠆몆-.Ⴛ𐦅︒ +᠆몆\u200C-。Ⴛ𐦅︒; ᠆몆\u200C-.Ⴛ𐦅︒; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--znd2362jhgh; ; xn----e3j6620g.xn--znd2362jhgh; [B1, B5, B6, V3, V6] # ᠆몆-.Ⴛ𐦅︒ +᠆몆\u200C-。Ⴛ𐦅。; ᠆몆\u200C-.Ⴛ𐦅.; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--znd4948j.; ; xn----e3j6620g.xn--znd4948j.; [B1, B5, B6, V3, V6] # ᠆몆-.Ⴛ𐦅. +᠆몆\u200C-。Ⴛ𐦅。; ᠆몆\u200C-.Ⴛ𐦅.; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--znd4948j.; ; xn----e3j6620g.xn--znd4948j.; [B1, B5, B6, V3, V6] # ᠆몆-.Ⴛ𐦅. +᠆몆\u200C-。ⴛ𐦅。; ᠆몆\u200C-.ⴛ𐦅.; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--jlju661e.; ; xn----e3j6620g.xn--jlju661e.; [B1, B5, B6, V3, V6] # ᠆몆-.ⴛ𐦅. +᠆몆\u200C-。ⴛ𐦅。; ᠆몆\u200C-.ⴛ𐦅.; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--jlju661e.; ; xn----e3j6620g.xn--jlju661e.; [B1, B5, B6, V3, V6] # ᠆몆-.ⴛ𐦅. +xn----e3j6620g.xn--jlju661e.; ᠆몆-.ⴛ𐦅.; [B1, B5, B6, V3, V6]; xn----e3j6620g.xn--jlju661e.; ; ; # ᠆몆-.ⴛ𐦅. +xn----e3j425bsk1o.xn--jlju661e.; ᠆몆\u200C-.ⴛ𐦅.; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--jlju661e.; ; ; # ᠆몆-.ⴛ𐦅. +xn----e3j6620g.xn--znd4948j.; ᠆몆-.Ⴛ𐦅.; [B1, B5, B6, V3, V6]; xn----e3j6620g.xn--znd4948j.; ; ; # ᠆몆-.Ⴛ𐦅. +xn----e3j425bsk1o.xn--znd4948j.; ᠆몆\u200C-.Ⴛ𐦅.; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--znd4948j.; ; ; # ᠆몆-.Ⴛ𐦅. +᠆몆\u200C-。ⴛ𐦅︒; ᠆몆\u200C-.ⴛ𐦅︒; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--jlj4997dhgh; ; xn----e3j6620g.xn--jlj4997dhgh; [B1, B5, B6, V3, V6] # ᠆몆-.ⴛ𐦅︒ +᠆몆\u200C-。ⴛ𐦅︒; ᠆몆\u200C-.ⴛ𐦅︒; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--jlj4997dhgh; ; xn----e3j6620g.xn--jlj4997dhgh; [B1, B5, B6, V3, V6] # ᠆몆-.ⴛ𐦅︒ +xn----e3j6620g.xn--jlj4997dhgh; ᠆몆-.ⴛ𐦅︒; [B1, B5, B6, V3, V6]; xn----e3j6620g.xn--jlj4997dhgh; ; ; # ᠆몆-.ⴛ𐦅︒ +xn----e3j425bsk1o.xn--jlj4997dhgh; ᠆몆\u200C-.ⴛ𐦅︒; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--jlj4997dhgh; ; ; # ᠆몆-.ⴛ𐦅︒ +xn----e3j6620g.xn--znd2362jhgh; ᠆몆-.Ⴛ𐦅︒; [B1, B5, B6, V3, V6]; xn----e3j6620g.xn--znd2362jhgh; ; ; # ᠆몆-.Ⴛ𐦅︒ +xn----e3j425bsk1o.xn--znd2362jhgh; ᠆몆\u200C-.Ⴛ𐦅︒; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--znd2362jhgh; ; ; # ᠆몆-.Ⴛ𐦅︒ +.︒⥱\u200C𐹬; ; [B1, C1, V6]; xn--uf66e.xn--0ugz28axl3pqxna; ; xn--uf66e.xn--qtiz073e3ik; [B1, V6] # .︒⥱𐹬 +.。⥱\u200C𐹬; ..⥱\u200C𐹬; [B1, C1, V6, X4_2]; xn--uf66e..xn--0ugz28as66q; [B1, C1, V6, A4_2]; xn--uf66e..xn--qti2829e; [B1, V6, A4_2] # ..⥱𐹬 +xn--uf66e..xn--qti2829e; ..⥱𐹬; [B1, V6, X4_2]; xn--uf66e..xn--qti2829e; [B1, V6, A4_2]; ; # ..⥱𐹬 +xn--uf66e..xn--0ugz28as66q; ..⥱\u200C𐹬; [B1, C1, V6, X4_2]; xn--uf66e..xn--0ugz28as66q; [B1, C1, V6, A4_2]; ; # ..⥱𐹬 +xn--uf66e.xn--qtiz073e3ik; .︒⥱𐹬; [B1, V6]; xn--uf66e.xn--qtiz073e3ik; ; ; # .︒⥱𐹬 +xn--uf66e.xn--0ugz28axl3pqxna; .︒⥱\u200C𐹬; [B1, C1, V6]; xn--uf66e.xn--0ugz28axl3pqxna; ; ; # .︒⥱𐹬 +.𐹠Ⴑ𐫊; ; [B1, V6]; xn--n49c.xn--pnd4619jwicl862o; ; ; # .𐹠Ⴑ𐫊 +.𐹠ⴑ𐫊; ; [B1, V6]; xn--n49c.xn--8kj8702ewicl862o; ; ; # .𐹠ⴑ𐫊 +xn--n49c.xn--8kj8702ewicl862o; .𐹠ⴑ𐫊; [B1, V6]; xn--n49c.xn--8kj8702ewicl862o; ; ; # .𐹠ⴑ𐫊 +xn--n49c.xn--pnd4619jwicl862o; .𐹠Ⴑ𐫊; [B1, V6]; xn--n49c.xn--pnd4619jwicl862o; ; ; # .𐹠Ⴑ𐫊 +\u0FA4.𝟭Ⴛ; \u0FA4.1Ⴛ; [V5, V6]; xn--0fd40533g.xn--1-q1g; ; ; # ྤ.1Ⴛ +\u0FA4.1Ⴛ; ; [V5, V6]; xn--0fd40533g.xn--1-q1g; ; ; # ྤ.1Ⴛ +\u0FA4.1ⴛ; ; [V5, V6]; xn--0fd40533g.xn--1-tws; ; ; # ྤ.1ⴛ +xn--0fd40533g.xn--1-tws; \u0FA4.1ⴛ; [V5, V6]; xn--0fd40533g.xn--1-tws; ; ; # ྤ.1ⴛ +xn--0fd40533g.xn--1-q1g; \u0FA4.1Ⴛ; [V5, V6]; xn--0fd40533g.xn--1-q1g; ; ; # ྤ.1Ⴛ +\u0FA4.𝟭ⴛ; \u0FA4.1ⴛ; [V5, V6]; xn--0fd40533g.xn--1-tws; ; ; # ྤ.1ⴛ +-\u0826齀。릿; -\u0826齀.릿; [B1, B5, B6, V3, V6]; xn----6gd0617i.xn--7y2bm55m; ; ; # -ࠦ齀.릿 +-\u0826齀。릿; -\u0826齀.릿; [B1, B5, B6, V3, V6]; xn----6gd0617i.xn--7y2bm55m; ; ; # -ࠦ齀.릿 +xn----6gd0617i.xn--7y2bm55m; -\u0826齀.릿; [B1, B5, B6, V3, V6]; xn----6gd0617i.xn--7y2bm55m; ; ; # -ࠦ齀.릿 +\u071C鹝꾗。\u200D\u200D⏃; \u071C鹝꾗.\u200D\u200D⏃; [B1, B6, C2, V6]; xn--mnb6558e91kyq533a.xn--1uga46zs309y; ; xn--mnb6558e91kyq533a.xn--6mh27269e; [B1, B6, V6] # ܜ鹝꾗.⏃ +\u071C鹝꾗。\u200D\u200D⏃; \u071C鹝꾗.\u200D\u200D⏃; [B1, B6, C2, V6]; xn--mnb6558e91kyq533a.xn--1uga46zs309y; ; xn--mnb6558e91kyq533a.xn--6mh27269e; [B1, B6, V6] # ܜ鹝꾗.⏃ +xn--mnb6558e91kyq533a.xn--6mh27269e; \u071C鹝꾗.⏃; [B1, B6, V6]; xn--mnb6558e91kyq533a.xn--6mh27269e; ; ; # ܜ鹝꾗.⏃ +xn--mnb6558e91kyq533a.xn--1uga46zs309y; \u071C鹝꾗.\u200D\u200D⏃; [B1, B6, C2, V6]; xn--mnb6558e91kyq533a.xn--1uga46zs309y; ; ; # ܜ鹝꾗.⏃ +≮.-\u0708--; ≮.-\u0708--; [B1, V2, V3]; xn--gdh.xn------eqf; ; ; # ≮.-܈-- +<\u0338.-\u0708--; ≮.-\u0708--; [B1, V2, V3]; xn--gdh.xn------eqf; ; ; # ≮.-܈-- +≮.-\u0708--; ; [B1, V2, V3]; xn--gdh.xn------eqf; ; ; # ≮.-܈-- +<\u0338.-\u0708--; ≮.-\u0708--; [B1, V2, V3]; xn--gdh.xn------eqf; ; ; # ≮.-܈-- +xn--gdh.xn------eqf; ≮.-\u0708--; [B1, V2, V3]; xn--gdh.xn------eqf; ; ; # ≮.-܈-- +𐹸。\u200Dς𝟩; 𐹸.\u200Dς7; [B1, C2, V6]; xn--wo0di5177c.xn--7-xmb248s; ; xn--wo0di5177c.xn--7-zmb; [B1, V6] # 𐹸.ς7 +𐹸。\u200Dς7; 𐹸.\u200Dς7; [B1, C2, V6]; xn--wo0di5177c.xn--7-xmb248s; ; xn--wo0di5177c.xn--7-zmb; [B1, V6] # 𐹸.ς7 +𐹸。\u200DΣ7; 𐹸.\u200Dσ7; [B1, C2, V6]; xn--wo0di5177c.xn--7-zmb938s; ; xn--wo0di5177c.xn--7-zmb; [B1, V6] # 𐹸.σ7 +𐹸。\u200Dσ7; 𐹸.\u200Dσ7; [B1, C2, V6]; xn--wo0di5177c.xn--7-zmb938s; ; xn--wo0di5177c.xn--7-zmb; [B1, V6] # 𐹸.σ7 +xn--wo0di5177c.xn--7-zmb; 𐹸.σ7; [B1, V6]; xn--wo0di5177c.xn--7-zmb; ; ; # 𐹸.σ7 +xn--wo0di5177c.xn--7-zmb938s; 𐹸.\u200Dσ7; [B1, C2, V6]; xn--wo0di5177c.xn--7-zmb938s; ; ; # 𐹸.σ7 +xn--wo0di5177c.xn--7-xmb248s; 𐹸.\u200Dς7; [B1, C2, V6]; xn--wo0di5177c.xn--7-xmb248s; ; ; # 𐹸.ς7 +𐹸。\u200DΣ𝟩; 𐹸.\u200Dσ7; [B1, C2, V6]; xn--wo0di5177c.xn--7-zmb938s; ; xn--wo0di5177c.xn--7-zmb; [B1, V6] # 𐹸.σ7 +𐹸。\u200Dσ𝟩; 𐹸.\u200Dσ7; [B1, C2, V6]; xn--wo0di5177c.xn--7-zmb938s; ; xn--wo0di5177c.xn--7-zmb; [B1, V6] # 𐹸.σ7 +ς8.; ς8.; [V6]; xn--8-xmb44974n.xn--su6h; ; xn--8-zmb14974n.xn--su6h; # ς8. +ς8.; ; [V6]; xn--8-xmb44974n.xn--su6h; ; xn--8-zmb14974n.xn--su6h; # ς8. +Σ8.; σ8.; [V6]; xn--8-zmb14974n.xn--su6h; ; ; # σ8. +σ8.; ; [V6]; xn--8-zmb14974n.xn--su6h; ; ; # σ8. +xn--8-zmb14974n.xn--su6h; σ8.; [V6]; xn--8-zmb14974n.xn--su6h; ; ; # σ8. +xn--8-xmb44974n.xn--su6h; ς8.; [V6]; xn--8-xmb44974n.xn--su6h; ; ; # ς8. +Σ8.; σ8.; [V6]; xn--8-zmb14974n.xn--su6h; ; ; # σ8. +σ8.; σ8.; [V6]; xn--8-zmb14974n.xn--su6h; ; ; # σ8. +\u200Cᡑ🄀\u0684.-𐫄𑲤; \u200Cᡑ🄀\u0684.-𐫄𑲤; [B1, C1, V3, V6]; xn--9ib722gvtfi563c.xn----ek5i065b; ; xn--9ib722gbw95a.xn----ek5i065b; [B1, B5, B6, V3, V6] # ᡑ🄀ڄ.-𐫄𑲤 +\u200Cᡑ0.\u0684.-𐫄𑲤; ; [B1, C1, V3]; xn--0-o7j263b.xn--9ib.xn----ek5i065b; ; xn--0-o7j.xn--9ib.xn----ek5i065b; [B1, V3] # ᡑ0.ڄ.-𐫄𑲤 +xn--0-o7j.xn--9ib.xn----ek5i065b; ᡑ0.\u0684.-𐫄𑲤; [B1, V3]; xn--0-o7j.xn--9ib.xn----ek5i065b; ; ; # ᡑ0.ڄ.-𐫄𑲤 +xn--0-o7j263b.xn--9ib.xn----ek5i065b; \u200Cᡑ0.\u0684.-𐫄𑲤; [B1, C1, V3]; xn--0-o7j263b.xn--9ib.xn----ek5i065b; ; ; # ᡑ0.ڄ.-𐫄𑲤 +xn--9ib722gbw95a.xn----ek5i065b; ᡑ🄀\u0684.-𐫄𑲤; [B1, B5, B6, V3, V6]; xn--9ib722gbw95a.xn----ek5i065b; ; ; # ᡑ🄀ڄ.-𐫄𑲤 +xn--9ib722gvtfi563c.xn----ek5i065b; \u200Cᡑ🄀\u0684.-𐫄𑲤; [B1, C1, V3, V6]; xn--9ib722gvtfi563c.xn----ek5i065b; ; ; # ᡑ🄀ڄ.-𐫄𑲤 +𖠍。넯; 𖠍.넯; [B2, B3, V6]; xn--4e9e.xn--l60bj21opd57g; ; ; # 𖠍.넯 +𖠍。넯; 𖠍.넯; [B2, B3, V6]; xn--4e9e.xn--l60bj21opd57g; ; ; # 𖠍.넯 +xn--4e9e.xn--l60bj21opd57g; 𖠍.넯; [B2, B3, V6]; xn--4e9e.xn--l60bj21opd57g; ; ; # 𖠍.넯 +᠇Ⴘ。\u0603Ⴈ𝆊; ᠇Ⴘ.\u0603Ⴈ𝆊; [B1, V6]; xn--wnd558a.xn--lfb465c1v87a; ; ; # ᠇Ⴘ.Ⴈ𝆊 +᠇ⴘ。\u0603ⴈ𝆊; ᠇ⴘ.\u0603ⴈ𝆊; [B1, V6]; xn--d6e009h.xn--lfb290rfu3z; ; ; # ᠇ⴘ.ⴈ𝆊 +xn--d6e009h.xn--lfb290rfu3z; ᠇ⴘ.\u0603ⴈ𝆊; [B1, V6]; xn--d6e009h.xn--lfb290rfu3z; ; ; # ᠇ⴘ.ⴈ𝆊 +xn--wnd558a.xn--lfb465c1v87a; ᠇Ⴘ.\u0603Ⴈ𝆊; [B1, V6]; xn--wnd558a.xn--lfb465c1v87a; ; ; # ᠇Ⴘ.Ⴈ𝆊 +⒚𞤰。牣\u0667Ⴜᣥ; ⒚𞤰.牣\u0667Ⴜᣥ; [B1, B5, V6]; xn--cthy466n29j3e.xn--gib404ccxgh00h; ; ; # ⒚𞤰.牣٧Ⴜᣥ +19.𞤰。牣\u0667Ⴜᣥ; 19.𞤰.牣\u0667Ⴜᣥ; [B1, B5, V6]; 19.xn--oe6h75760c.xn--gib404ccxgh00h; ; ; # 19.𞤰.牣٧Ⴜᣥ +19.𞤰。牣\u0667ⴜᣥ; 19.𞤰.牣\u0667ⴜᣥ; [B1, B5, V6]; 19.xn--oe6h75760c.xn--gib285gtxo2l9d; ; ; # 19.𞤰.牣٧ⴜᣥ +19.𞤎。牣\u0667Ⴜᣥ; 19.𞤰.牣\u0667Ⴜᣥ; [B1, B5, V6]; 19.xn--oe6h75760c.xn--gib404ccxgh00h; ; ; # 19.𞤰.牣٧Ⴜᣥ +19.𞤎。牣\u0667ⴜᣥ; 19.𞤰.牣\u0667ⴜᣥ; [B1, B5, V6]; 19.xn--oe6h75760c.xn--gib285gtxo2l9d; ; ; # 19.𞤰.牣٧ⴜᣥ +19.xn--oe6h75760c.xn--gib285gtxo2l9d; 19.𞤰.牣\u0667ⴜᣥ; [B1, B5, V6]; 19.xn--oe6h75760c.xn--gib285gtxo2l9d; ; ; # 19.𞤰.牣٧ⴜᣥ +19.xn--oe6h75760c.xn--gib404ccxgh00h; 19.𞤰.牣\u0667Ⴜᣥ; [B1, B5, V6]; 19.xn--oe6h75760c.xn--gib404ccxgh00h; ; ; # 19.𞤰.牣٧Ⴜᣥ +⒚𞤰。牣\u0667ⴜᣥ; ⒚𞤰.牣\u0667ⴜᣥ; [B1, B5, V6]; xn--cthy466n29j3e.xn--gib285gtxo2l9d; ; ; # ⒚𞤰.牣٧ⴜᣥ +⒚𞤎。牣\u0667Ⴜᣥ; ⒚𞤰.牣\u0667Ⴜᣥ; [B1, B5, V6]; xn--cthy466n29j3e.xn--gib404ccxgh00h; ; ; # ⒚𞤰.牣٧Ⴜᣥ +⒚𞤎。牣\u0667ⴜᣥ; ⒚𞤰.牣\u0667ⴜᣥ; [B1, B5, V6]; xn--cthy466n29j3e.xn--gib285gtxo2l9d; ; ; # ⒚𞤰.牣٧ⴜᣥ +xn--cthy466n29j3e.xn--gib285gtxo2l9d; ⒚𞤰.牣\u0667ⴜᣥ; [B1, B5, V6]; xn--cthy466n29j3e.xn--gib285gtxo2l9d; ; ; # ⒚𞤰.牣٧ⴜᣥ +xn--cthy466n29j3e.xn--gib404ccxgh00h; ⒚𞤰.牣\u0667Ⴜᣥ; [B1, B5, V6]; xn--cthy466n29j3e.xn--gib404ccxgh00h; ; ; # ⒚𞤰.牣٧Ⴜᣥ +-𐋱𐰽⒈.Ⴓ; ; [B1, V3, V6]; xn----ecp0206g90h.xn--rnd; ; ; # -𐋱𐰽⒈.Ⴓ +-𐋱𐰽1..Ⴓ; ; [B1, V3, V6, X4_2]; xn---1-895nq11a..xn--rnd; [B1, V3, V6, A4_2]; ; # -𐋱𐰽1..Ⴓ +-𐋱𐰽1..ⴓ; ; [B1, V3, X4_2]; xn---1-895nq11a..xn--blj; [B1, V3, A4_2]; ; # -𐋱𐰽1..ⴓ +xn---1-895nq11a..xn--blj; -𐋱𐰽1..ⴓ; [B1, V3, X4_2]; xn---1-895nq11a..xn--blj; [B1, V3, A4_2]; ; # -𐋱𐰽1..ⴓ +xn---1-895nq11a..xn--rnd; -𐋱𐰽1..Ⴓ; [B1, V3, V6, X4_2]; xn---1-895nq11a..xn--rnd; [B1, V3, V6, A4_2]; ; # -𐋱𐰽1..Ⴓ +-𐋱𐰽⒈.ⴓ; ; [B1, V3, V6]; xn----ecp0206g90h.xn--blj; ; ; # -𐋱𐰽⒈.ⴓ +xn----ecp0206g90h.xn--blj; -𐋱𐰽⒈.ⴓ; [B1, V3, V6]; xn----ecp0206g90h.xn--blj; ; ; # -𐋱𐰽⒈.ⴓ +xn----ecp0206g90h.xn--rnd; -𐋱𐰽⒈.Ⴓ; [B1, V3, V6]; xn----ecp0206g90h.xn--rnd; ; ; # -𐋱𐰽⒈.Ⴓ +\u200C긃.榶-; ; [C1, V3]; xn--0ug3307c.xn----d87b; ; xn--ej0b.xn----d87b; [V3] # 긃.榶- +\u200C긃.榶-; \u200C긃.榶-; [C1, V3]; xn--0ug3307c.xn----d87b; ; xn--ej0b.xn----d87b; [V3] # 긃.榶- +xn--ej0b.xn----d87b; 긃.榶-; [V3]; xn--ej0b.xn----d87b; ; ; # 긃.榶- +xn--0ug3307c.xn----d87b; \u200C긃.榶-; [C1, V3]; xn--0ug3307c.xn----d87b; ; ; # 긃.榶- +뉓泓.\u09CD\u200D; ; [V5, V6]; xn--lwwp69lqs7m.xn--b7b605i; ; xn--lwwp69lqs7m.xn--b7b; # 뉓泓.্ +뉓泓.\u09CD\u200D; 뉓泓.\u09CD\u200D; [V5, V6]; xn--lwwp69lqs7m.xn--b7b605i; ; xn--lwwp69lqs7m.xn--b7b; # 뉓泓.্ +xn--lwwp69lqs7m.xn--b7b; 뉓泓.\u09CD; [V5, V6]; xn--lwwp69lqs7m.xn--b7b; ; ; # 뉓泓.্ +xn--lwwp69lqs7m.xn--b7b605i; 뉓泓.\u09CD\u200D; [V5, V6]; xn--lwwp69lqs7m.xn--b7b605i; ; ; # 뉓泓.্ +\u200D𐹴ß。\u0EB4\u2B75; \u200D𐹴ß.\u0EB4\u2B75; [B1, C2, V5, V6]; xn--zca770nip7n.xn--57c638l8774i; ; xn--ss-ti3o.xn--57c638l8774i; [B1, V5, V6] # 𐹴ß.ິ +\u200D𐹴ß。\u0EB4\u2B75; \u200D𐹴ß.\u0EB4\u2B75; [B1, C2, V5, V6]; xn--zca770nip7n.xn--57c638l8774i; ; xn--ss-ti3o.xn--57c638l8774i; [B1, V5, V6] # 𐹴ß.ິ +\u200D𐹴SS。\u0EB4\u2B75; \u200D𐹴ss.\u0EB4\u2B75; [B1, C2, V5, V6]; xn--ss-l1t5169j.xn--57c638l8774i; ; xn--ss-ti3o.xn--57c638l8774i; [B1, V5, V6] # 𐹴ss.ິ +\u200D𐹴ss。\u0EB4\u2B75; \u200D𐹴ss.\u0EB4\u2B75; [B1, C2, V5, V6]; xn--ss-l1t5169j.xn--57c638l8774i; ; xn--ss-ti3o.xn--57c638l8774i; [B1, V5, V6] # 𐹴ss.ິ +\u200D𐹴Ss。\u0EB4\u2B75; \u200D𐹴ss.\u0EB4\u2B75; [B1, C2, V5, V6]; xn--ss-l1t5169j.xn--57c638l8774i; ; xn--ss-ti3o.xn--57c638l8774i; [B1, V5, V6] # 𐹴ss.ິ +xn--ss-ti3o.xn--57c638l8774i; 𐹴ss.\u0EB4\u2B75; [B1, V5, V6]; xn--ss-ti3o.xn--57c638l8774i; ; ; # 𐹴ss.ິ +xn--ss-l1t5169j.xn--57c638l8774i; \u200D𐹴ss.\u0EB4\u2B75; [B1, C2, V5, V6]; xn--ss-l1t5169j.xn--57c638l8774i; ; ; # 𐹴ss.ິ +xn--zca770nip7n.xn--57c638l8774i; \u200D𐹴ß.\u0EB4\u2B75; [B1, C2, V5, V6]; xn--zca770nip7n.xn--57c638l8774i; ; ; # 𐹴ß.ິ +\u200D𐹴SS。\u0EB4\u2B75; \u200D𐹴ss.\u0EB4\u2B75; [B1, C2, V5, V6]; xn--ss-l1t5169j.xn--57c638l8774i; ; xn--ss-ti3o.xn--57c638l8774i; [B1, V5, V6] # 𐹴ss.ິ +\u200D𐹴ss。\u0EB4\u2B75; \u200D𐹴ss.\u0EB4\u2B75; [B1, C2, V5, V6]; xn--ss-l1t5169j.xn--57c638l8774i; ; xn--ss-ti3o.xn--57c638l8774i; [B1, V5, V6] # 𐹴ss.ິ +\u200D𐹴Ss。\u0EB4\u2B75; \u200D𐹴ss.\u0EB4\u2B75; [B1, C2, V5, V6]; xn--ss-l1t5169j.xn--57c638l8774i; ; xn--ss-ti3o.xn--57c638l8774i; [B1, V5, V6] # 𐹴ss.ິ +\u1B44.\u1BAA-≮≠; \u1B44.\u1BAA-≮≠; [V5]; xn--1uf.xn----nmlz65aub; ; ; # ᭄.᮪-≮≠ +\u1B44.\u1BAA-<\u0338=\u0338; \u1B44.\u1BAA-≮≠; [V5]; xn--1uf.xn----nmlz65aub; ; ; # ᭄.᮪-≮≠ +\u1B44.\u1BAA-≮≠; ; [V5]; xn--1uf.xn----nmlz65aub; ; ; # ᭄.᮪-≮≠ +\u1B44.\u1BAA-<\u0338=\u0338; \u1B44.\u1BAA-≮≠; [V5]; xn--1uf.xn----nmlz65aub; ; ; # ᭄.᮪-≮≠ +xn--1uf.xn----nmlz65aub; \u1B44.\u1BAA-≮≠; [V5]; xn--1uf.xn----nmlz65aub; ; ; # ᭄.᮪-≮≠ +\u1BF3Ⴑ\u115F.𑄴Ⅎ; \u1BF3Ⴑ\u115F.𑄴Ⅎ; [V5, V6]; xn--pnd26a55x.xn--f3g7465g; ; ; # ᯳Ⴑ.𑄴Ⅎ +\u1BF3Ⴑ\u115F.𑄴Ⅎ; ; [V5, V6]; xn--pnd26a55x.xn--f3g7465g; ; ; # ᯳Ⴑ.𑄴Ⅎ +\u1BF3ⴑ\u115F.𑄴ⅎ; ; [V5, V6]; xn--osd925cvyn.xn--73g3065g; ; ; # ᯳ⴑ.𑄴ⅎ +\u1BF3Ⴑ\u115F.𑄴ⅎ; ; [V5, V6]; xn--pnd26a55x.xn--73g3065g; ; ; # ᯳Ⴑ.𑄴ⅎ +xn--pnd26a55x.xn--73g3065g; \u1BF3Ⴑ\u115F.𑄴ⅎ; [V5, V6]; xn--pnd26a55x.xn--73g3065g; ; ; # ᯳Ⴑ.𑄴ⅎ +xn--osd925cvyn.xn--73g3065g; \u1BF3ⴑ\u115F.𑄴ⅎ; [V5, V6]; xn--osd925cvyn.xn--73g3065g; ; ; # ᯳ⴑ.𑄴ⅎ +xn--pnd26a55x.xn--f3g7465g; \u1BF3Ⴑ\u115F.𑄴Ⅎ; [V5, V6]; xn--pnd26a55x.xn--f3g7465g; ; ; # ᯳Ⴑ.𑄴Ⅎ +\u1BF3ⴑ\u115F.𑄴ⅎ; \u1BF3ⴑ\u115F.𑄴ⅎ; [V5, V6]; xn--osd925cvyn.xn--73g3065g; ; ; # ᯳ⴑ.𑄴ⅎ +\u1BF3Ⴑ\u115F.𑄴ⅎ; \u1BF3Ⴑ\u115F.𑄴ⅎ; [V5, V6]; xn--pnd26a55x.xn--73g3065g; ; ; # ᯳Ⴑ.𑄴ⅎ +。Ⴃ𐴣𐹹똯; .Ⴃ𐴣𐹹똯; [B5, V6]; xn--187g.xn--bnd4785f8r8bdeb; ; ; # .Ⴃ𐴣𐹹똯 +。Ⴃ𐴣𐹹똯; .Ⴃ𐴣𐹹똯; [B5, V6]; xn--187g.xn--bnd4785f8r8bdeb; ; ; # .Ⴃ𐴣𐹹똯 +。ⴃ𐴣𐹹똯; .ⴃ𐴣𐹹똯; [B5, V6]; xn--187g.xn--ukjy205b8rscdeb; ; ; # .ⴃ𐴣𐹹똯 +。ⴃ𐴣𐹹똯; .ⴃ𐴣𐹹똯; [B5, V6]; xn--187g.xn--ukjy205b8rscdeb; ; ; # .ⴃ𐴣𐹹똯 +xn--187g.xn--ukjy205b8rscdeb; .ⴃ𐴣𐹹똯; [B5, V6]; xn--187g.xn--ukjy205b8rscdeb; ; ; # .ⴃ𐴣𐹹똯 +xn--187g.xn--bnd4785f8r8bdeb; .Ⴃ𐴣𐹹똯; [B5, V6]; xn--187g.xn--bnd4785f8r8bdeb; ; ; # .Ⴃ𐴣𐹹똯 +𐫀。⳻󠄷\u3164; 𐫀.⳻\u3164; [B1, V6]; xn--pw9c.xn--mkj83l4v899a; ; ; # 𐫀.⳻ +𐫀。⳻󠄷\u1160; 𐫀.⳻\u1160; [B1, V6]; xn--pw9c.xn--psd742lxt32w; ; ; # 𐫀.⳻ +xn--pw9c.xn--psd742lxt32w; 𐫀.⳻\u1160; [B1, V6]; xn--pw9c.xn--psd742lxt32w; ; ; # 𐫀.⳻ +xn--pw9c.xn--mkj83l4v899a; 𐫀.⳻\u3164; [B1, V6]; xn--pw9c.xn--mkj83l4v899a; ; ; # 𐫀.⳻ +\u079A⾇.\u071E-𐋰; \u079A舛.\u071E-𐋰; [B2, B3]; xn--7qb6383d.xn----20c3154q; ; ; # ޚ舛.ܞ-𐋰 +\u079A舛.\u071E-𐋰; ; [B2, B3]; xn--7qb6383d.xn----20c3154q; ; ; # ޚ舛.ܞ-𐋰 +xn--7qb6383d.xn----20c3154q; \u079A舛.\u071E-𐋰; [B2, B3]; xn--7qb6383d.xn----20c3154q; ; ; # ޚ舛.ܞ-𐋰 +Ⴉ猕≮.︒; Ⴉ猕≮.︒; [V6]; xn--hnd212gz32d54x5r.xn--y86c; ; ; # Ⴉ猕≮.︒ +Ⴉ猕<\u0338.︒; Ⴉ猕≮.︒; [V6]; xn--hnd212gz32d54x5r.xn--y86c; ; ; # Ⴉ猕≮.︒ +Ⴉ猕≮.。; Ⴉ猕≮..; [V6, X4_2]; xn--hnd212gz32d54x5r..; [V6, A4_2]; ; # Ⴉ猕≮.. +Ⴉ猕<\u0338.。; Ⴉ猕≮..; [V6, X4_2]; xn--hnd212gz32d54x5r..; [V6, A4_2]; ; # Ⴉ猕≮.. +ⴉ猕<\u0338.。; ⴉ猕≮..; [V6, X4_2]; xn--gdh892bbz0d5438s..; [V6, A4_2]; ; # ⴉ猕≮.. +ⴉ猕≮.。; ⴉ猕≮..; [V6, X4_2]; xn--gdh892bbz0d5438s..; [V6, A4_2]; ; # ⴉ猕≮.. +xn--gdh892bbz0d5438s..; ⴉ猕≮..; [V6, X4_2]; xn--gdh892bbz0d5438s..; [V6, A4_2]; ; # ⴉ猕≮.. +xn--hnd212gz32d54x5r..; Ⴉ猕≮..; [V6, X4_2]; xn--hnd212gz32d54x5r..; [V6, A4_2]; ; # Ⴉ猕≮.. +ⴉ猕<\u0338.︒; ⴉ猕≮.︒; [V6]; xn--gdh892bbz0d5438s.xn--y86c; ; ; # ⴉ猕≮.︒ +ⴉ猕≮.︒; ⴉ猕≮.︒; [V6]; xn--gdh892bbz0d5438s.xn--y86c; ; ; # ⴉ猕≮.︒ +xn--gdh892bbz0d5438s.xn--y86c; ⴉ猕≮.︒; [V6]; xn--gdh892bbz0d5438s.xn--y86c; ; ; # ⴉ猕≮.︒ +xn--hnd212gz32d54x5r.xn--y86c; Ⴉ猕≮.︒; [V6]; xn--hnd212gz32d54x5r.xn--y86c; ; ; # Ⴉ猕≮.︒ +🏮。\u062B鳳\u07E2󠅉; 🏮.\u062B鳳\u07E2; [B1, B2]; xn--8m8h.xn--qgb29f6z90a; ; ; # 🏮.ث鳳ߢ +🏮。\u062B鳳\u07E2󠅉; 🏮.\u062B鳳\u07E2; [B1, B2]; xn--8m8h.xn--qgb29f6z90a; ; ; # 🏮.ث鳳ߢ +xn--8m8h.xn--qgb29f6z90a; 🏮.\u062B鳳\u07E2; [B1, B2]; xn--8m8h.xn--qgb29f6z90a; ; ; # 🏮.ث鳳ߢ +\u200D𐹶。ß; \u200D𐹶.ß; [B1, C2]; xn--1ug9105g.xn--zca; ; xn--uo0d.ss; [B1] # 𐹶.ß +\u200D𐹶。SS; \u200D𐹶.ss; [B1, C2]; xn--1ug9105g.ss; ; xn--uo0d.ss; [B1] # 𐹶.ss +\u200D𐹶。ss; \u200D𐹶.ss; [B1, C2]; xn--1ug9105g.ss; ; xn--uo0d.ss; [B1] # 𐹶.ss +\u200D𐹶。Ss; \u200D𐹶.ss; [B1, C2]; xn--1ug9105g.ss; ; xn--uo0d.ss; [B1] # 𐹶.ss +xn--uo0d.ss; 𐹶.ss; [B1]; xn--uo0d.ss; ; ; # 𐹶.ss +xn--1ug9105g.ss; \u200D𐹶.ss; [B1, C2]; xn--1ug9105g.ss; ; ; # 𐹶.ss +xn--1ug9105g.xn--zca; \u200D𐹶.ß; [B1, C2]; xn--1ug9105g.xn--zca; ; ; # 𐹶.ß +Å둄-.\u200C; å둄-.\u200C; [C1, V3]; xn----1fa1788k.xn--0ug; ; xn----1fa1788k.; [V3] # å둄-. +A\u030A둄-.\u200C; å둄-.\u200C; [C1, V3]; xn----1fa1788k.xn--0ug; ; xn----1fa1788k.; [V3] # å둄-. +Å둄-.\u200C; å둄-.\u200C; [C1, V3]; xn----1fa1788k.xn--0ug; ; xn----1fa1788k.; [V3] # å둄-. +A\u030A둄-.\u200C; å둄-.\u200C; [C1, V3]; xn----1fa1788k.xn--0ug; ; xn----1fa1788k.; [V3] # å둄-. +a\u030A둄-.\u200C; å둄-.\u200C; [C1, V3]; xn----1fa1788k.xn--0ug; ; xn----1fa1788k.; [V3] # å둄-. +å둄-.\u200C; ; [C1, V3]; xn----1fa1788k.xn--0ug; ; xn----1fa1788k.; [V3] # å둄-. +xn----1fa1788k.; å둄-.; [V3]; xn----1fa1788k.; ; ; # å둄-. +xn----1fa1788k.xn--0ug; å둄-.\u200C; [C1, V3]; xn----1fa1788k.xn--0ug; ; ; # å둄-. +a\u030A둄-.\u200C; å둄-.\u200C; [C1, V3]; xn----1fa1788k.xn--0ug; ; xn----1fa1788k.; [V3] # å둄-. +å둄-.\u200C; å둄-.\u200C; [C1, V3]; xn----1fa1788k.xn--0ug; ; xn----1fa1788k.; [V3] # å둄-. +\u3099\u1DD7𞤀.-\u0953; \u3099\u1DD7𞤢.-\u0953; [B1, B6, V5, V6]; xn--veg121fwg63altj9d.xn----eyd92688s; ; ; # ゙ᷗ𞤢.-॓ +\u3099\u1DD7𞤢.-\u0953; ; [B1, B6, V5, V6]; xn--veg121fwg63altj9d.xn----eyd92688s; ; ; # ゙ᷗ𞤢.-॓ +xn--veg121fwg63altj9d.xn----eyd92688s; \u3099\u1DD7𞤢.-\u0953; [B1, B6, V5, V6]; xn--veg121fwg63altj9d.xn----eyd92688s; ; ; # ゙ᷗ𞤢.-॓ +ς.ß\u06DD\u2D7F; ; [B5, B6, V6]; xn--3xa.xn--zca281az71b8x73m; ; xn--4xa.xn--ss-y8d4760biv60n; # ς.ß⵿ +Σ.SS\u06DD\u2D7F; σ.ss\u06DD\u2D7F; [B5, B6, V6]; xn--4xa.xn--ss-y8d4760biv60n; ; ; # σ.ss⵿ +σ.ss\u06DD\u2D7F; ; [B5, B6, V6]; xn--4xa.xn--ss-y8d4760biv60n; ; ; # σ.ss⵿ +Σ.ss\u06DD\u2D7F; σ.ss\u06DD\u2D7F; [B5, B6, V6]; xn--4xa.xn--ss-y8d4760biv60n; ; ; # σ.ss⵿ +xn--4xa.xn--ss-y8d4760biv60n; σ.ss\u06DD\u2D7F; [B5, B6, V6]; xn--4xa.xn--ss-y8d4760biv60n; ; ; # σ.ss⵿ +Σ.ß\u06DD\u2D7F; σ.ß\u06DD\u2D7F; [B5, B6, V6]; xn--4xa.xn--zca281az71b8x73m; ; xn--4xa.xn--ss-y8d4760biv60n; # σ.ß⵿ +σ.ß\u06DD\u2D7F; ; [B5, B6, V6]; xn--4xa.xn--zca281az71b8x73m; ; xn--4xa.xn--ss-y8d4760biv60n; # σ.ß⵿ +xn--4xa.xn--zca281az71b8x73m; σ.ß\u06DD\u2D7F; [B5, B6, V6]; xn--4xa.xn--zca281az71b8x73m; ; ; # σ.ß⵿ +xn--3xa.xn--zca281az71b8x73m; ς.ß\u06DD\u2D7F; [B5, B6, V6]; xn--3xa.xn--zca281az71b8x73m; ; ; # ς.ß⵿ +ꡀ𞀟。\u066B\u0599; ꡀ𞀟.\u066B\u0599; [B1]; xn--8b9a1720d.xn--kcb33b; ; ; # ꡀ𞀟.٫֙ +ꡀ𞀟。\u066B\u0599; ꡀ𞀟.\u066B\u0599; [B1]; xn--8b9a1720d.xn--kcb33b; ; ; # ꡀ𞀟.٫֙ +xn--8b9a1720d.xn--kcb33b; ꡀ𞀟.\u066B\u0599; [B1]; xn--8b9a1720d.xn--kcb33b; ; ; # ꡀ𞀟.٫֙ +\u200C\u08A9。⧅-𐭡; \u200C\u08A9.⧅-𐭡; [B1, B5, B6, C1, V6]; xn--yyb780jll63m.xn----zir1232guu71b; ; xn--yyb56242i.xn----zir1232guu71b; [B1, B5, B6, V6] # ࢩ.⧅-𐭡 +\u200C\u08A9。⧅-𐭡; \u200C\u08A9.⧅-𐭡; [B1, B5, B6, C1, V6]; xn--yyb780jll63m.xn----zir1232guu71b; ; xn--yyb56242i.xn----zir1232guu71b; [B1, B5, B6, V6] # ࢩ.⧅-𐭡 +xn--yyb56242i.xn----zir1232guu71b; \u08A9.⧅-𐭡; [B1, B5, B6, V6]; xn--yyb56242i.xn----zir1232guu71b; ; ; # ࢩ.⧅-𐭡 +xn--yyb780jll63m.xn----zir1232guu71b; \u200C\u08A9.⧅-𐭡; [B1, B5, B6, C1, V6]; xn--yyb780jll63m.xn----zir1232guu71b; ; ; # ࢩ.⧅-𐭡 +룱\u200D𰍨\u200C。𝨖︒; 룱\u200D𰍨\u200C.𝨖︒; [C1, C2, V5, V6]; xn--0ugb3358ili2v.xn--y86cl899a; ; xn--ct2b0738h.xn--y86cl899a; [V5, V6] # 룱𰍨.𝨖︒ +룱\u200D𰍨\u200C。𝨖︒; 룱\u200D𰍨\u200C.𝨖︒; [C1, C2, V5, V6]; xn--0ugb3358ili2v.xn--y86cl899a; ; xn--ct2b0738h.xn--y86cl899a; [V5, V6] # 룱𰍨.𝨖︒ +룱\u200D𰍨\u200C。𝨖。; 룱\u200D𰍨\u200C.𝨖.; [C1, C2, V5]; xn--0ugb3358ili2v.xn--772h.; ; xn--ct2b0738h.xn--772h.; [V5] # 룱𰍨.𝨖. +룱\u200D𰍨\u200C。𝨖。; 룱\u200D𰍨\u200C.𝨖.; [C1, C2, V5]; xn--0ugb3358ili2v.xn--772h.; ; xn--ct2b0738h.xn--772h.; [V5] # 룱𰍨.𝨖. +xn--ct2b0738h.xn--772h.; 룱𰍨.𝨖.; [V5]; xn--ct2b0738h.xn--772h.; ; ; # 룱𰍨.𝨖. +xn--0ugb3358ili2v.xn--772h.; 룱\u200D𰍨\u200C.𝨖.; [C1, C2, V5]; xn--0ugb3358ili2v.xn--772h.; ; ; # 룱𰍨.𝨖. +xn--ct2b0738h.xn--y86cl899a; 룱𰍨.𝨖︒; [V5, V6]; xn--ct2b0738h.xn--y86cl899a; ; ; # 룱𰍨.𝨖︒ +xn--0ugb3358ili2v.xn--y86cl899a; 룱\u200D𰍨\u200C.𝨖︒; [C1, C2, V5, V6]; xn--0ugb3358ili2v.xn--y86cl899a; ; ; # 룱𰍨.𝨖︒ +🄄.\u1CDC⒈ß; 🄄.\u1CDC⒈ß; [V5, V6]; xn--x07h.xn--zca344lmif; ; xn--x07h.xn--ss-k1r094b; # 🄄.᳜⒈ß +3,.\u1CDC1.ß; ; [V5, V6]; 3,.xn--1-43l.xn--zca; ; 3,.xn--1-43l.ss; # 3,.᳜1.ß +3,.\u1CDC1.SS; 3,.\u1CDC1.ss; [V5, V6]; 3,.xn--1-43l.ss; ; ; # 3,.᳜1.ss +3,.\u1CDC1.ss; ; [V5, V6]; 3,.xn--1-43l.ss; ; ; # 3,.᳜1.ss +3,.\u1CDC1.Ss; 3,.\u1CDC1.ss; [V5, V6]; 3,.xn--1-43l.ss; ; ; # 3,.᳜1.ss +3,.xn--1-43l.ss; 3,.\u1CDC1.ss; [V5, V6]; 3,.xn--1-43l.ss; ; ; # 3,.᳜1.ss +3,.xn--1-43l.xn--zca; 3,.\u1CDC1.ß; [V5, V6]; 3,.xn--1-43l.xn--zca; ; ; # 3,.᳜1.ß +🄄.\u1CDC⒈SS; 🄄.\u1CDC⒈ss; [V5, V6]; xn--x07h.xn--ss-k1r094b; ; ; # 🄄.᳜⒈ss +🄄.\u1CDC⒈ss; 🄄.\u1CDC⒈ss; [V5, V6]; xn--x07h.xn--ss-k1r094b; ; ; # 🄄.᳜⒈ss +🄄.\u1CDC⒈Ss; 🄄.\u1CDC⒈ss; [V5, V6]; xn--x07h.xn--ss-k1r094b; ; ; # 🄄.᳜⒈ss +xn--x07h.xn--ss-k1r094b; 🄄.\u1CDC⒈ss; [V5, V6]; xn--x07h.xn--ss-k1r094b; ; ; # 🄄.᳜⒈ss +xn--x07h.xn--zca344lmif; 🄄.\u1CDC⒈ß; [V5, V6]; xn--x07h.xn--zca344lmif; ; ; # 🄄.᳜⒈ß +\u2D7F。𑐺; \u2D7F.𑐺; [B2, B3, V6]; xn--eoj16016a.xn--0v1d3848a3lr0d; ; ; # ⵿.𑐺 +\u2D7F。𑐺; \u2D7F.𑐺; [B2, B3, V6]; xn--eoj16016a.xn--0v1d3848a3lr0d; ; ; # ⵿.𑐺 +xn--eoj16016a.xn--0v1d3848a3lr0d; \u2D7F.𑐺; [B2, B3, V6]; xn--eoj16016a.xn--0v1d3848a3lr0d; ; ; # ⵿.𑐺 +\u1DFD\u103A\u094D.≠\u200D㇛; \u103A\u094D\u1DFD.≠\u200D㇛; [C2, V5]; xn--n3b956a9zm.xn--1ug63gz5w; ; xn--n3b956a9zm.xn--1ch912d; [V5] # ်्᷽.≠㇛ +\u103A\u094D\u1DFD.≠\u200D㇛; \u103A\u094D\u1DFD.≠\u200D㇛; [C2, V5]; xn--n3b956a9zm.xn--1ug63gz5w; ; xn--n3b956a9zm.xn--1ch912d; [V5] # ်्᷽.≠㇛ +\u103A\u094D\u1DFD.=\u0338\u200D㇛; \u103A\u094D\u1DFD.≠\u200D㇛; [C2, V5]; xn--n3b956a9zm.xn--1ug63gz5w; ; xn--n3b956a9zm.xn--1ch912d; [V5] # ်्᷽.≠㇛ +\u103A\u094D\u1DFD.≠\u200D㇛; ; [C2, V5]; xn--n3b956a9zm.xn--1ug63gz5w; ; xn--n3b956a9zm.xn--1ch912d; [V5] # ်्᷽.≠㇛ +\u103A\u094D\u1DFD.=\u0338\u200D㇛; \u103A\u094D\u1DFD.≠\u200D㇛; [C2, V5]; xn--n3b956a9zm.xn--1ug63gz5w; ; xn--n3b956a9zm.xn--1ch912d; [V5] # ်्᷽.≠㇛ +xn--n3b956a9zm.xn--1ch912d; \u103A\u094D\u1DFD.≠㇛; [V5]; xn--n3b956a9zm.xn--1ch912d; ; ; # ်्᷽.≠㇛ +xn--n3b956a9zm.xn--1ug63gz5w; \u103A\u094D\u1DFD.≠\u200D㇛; [C2, V5]; xn--n3b956a9zm.xn--1ug63gz5w; ; ; # ်्᷽.≠㇛ +Ⴁ𐋨娤.\u200D\u033C\u0662𑖿; ; [B1, C2, V6]; xn--8md2578ag21g.xn--9ta62ngt6aou8t; ; xn--8md2578ag21g.xn--9ta62nrv36a; [B1, V5, V6] # Ⴁ𐋨娤.̼٢𑖿 +ⴁ𐋨娤.\u200D\u033C\u0662𑖿; ; [B1, C2]; xn--skjw75lg29h.xn--9ta62ngt6aou8t; ; xn--skjw75lg29h.xn--9ta62nrv36a; [B1, V5] # ⴁ𐋨娤.̼٢𑖿 +xn--skjw75lg29h.xn--9ta62nrv36a; ⴁ𐋨娤.\u033C\u0662𑖿; [B1, V5]; xn--skjw75lg29h.xn--9ta62nrv36a; ; ; # ⴁ𐋨娤.̼٢𑖿 +xn--skjw75lg29h.xn--9ta62ngt6aou8t; ⴁ𐋨娤.\u200D\u033C\u0662𑖿; [B1, C2]; xn--skjw75lg29h.xn--9ta62ngt6aou8t; ; ; # ⴁ𐋨娤.̼٢𑖿 +xn--8md2578ag21g.xn--9ta62nrv36a; Ⴁ𐋨娤.\u033C\u0662𑖿; [B1, V5, V6]; xn--8md2578ag21g.xn--9ta62nrv36a; ; ; # Ⴁ𐋨娤.̼٢𑖿 +xn--8md2578ag21g.xn--9ta62ngt6aou8t; Ⴁ𐋨娤.\u200D\u033C\u0662𑖿; [B1, C2, V6]; xn--8md2578ag21g.xn--9ta62ngt6aou8t; ; ; # Ⴁ𐋨娤.̼٢𑖿 +🄀Ⴄ\u0669\u0820。⒈\u0FB6ß; 🄀Ⴄ\u0669\u0820.⒈\u0FB6ß; [B1, V6]; xn--iib29f26o6n43c.xn--zca117e3vp; ; xn--iib29f26o6n43c.xn--ss-1sj588o; # 🄀Ⴄ٩ࠠ.⒈ྶß +0.Ⴄ\u0669\u0820。1.\u0FB6ß; 0.Ⴄ\u0669\u0820.1.\u0FB6ß; [B1, B5, B6, V5, V6]; 0.xn--iib29f26o.1.xn--zca117e; ; 0.xn--iib29f26o.1.xn--ss-1sj; # 0.Ⴄ٩ࠠ.1.ྶß +0.ⴄ\u0669\u0820。1.\u0FB6ß; 0.ⴄ\u0669\u0820.1.\u0FB6ß; [B1, B5, B6, V5]; 0.xn--iib29fp25e.1.xn--zca117e; ; 0.xn--iib29fp25e.1.xn--ss-1sj; # 0.ⴄ٩ࠠ.1.ྶß +0.Ⴄ\u0669\u0820。1.\u0FB6SS; 0.Ⴄ\u0669\u0820.1.\u0FB6ss; [B1, B5, B6, V5, V6]; 0.xn--iib29f26o.1.xn--ss-1sj; ; ; # 0.Ⴄ٩ࠠ.1.ྶss +0.ⴄ\u0669\u0820。1.\u0FB6ss; 0.ⴄ\u0669\u0820.1.\u0FB6ss; [B1, B5, B6, V5]; 0.xn--iib29fp25e.1.xn--ss-1sj; ; ; # 0.ⴄ٩ࠠ.1.ྶss +0.Ⴄ\u0669\u0820。1.\u0FB6Ss; 0.Ⴄ\u0669\u0820.1.\u0FB6ss; [B1, B5, B6, V5, V6]; 0.xn--iib29f26o.1.xn--ss-1sj; ; ; # 0.Ⴄ٩ࠠ.1.ྶss +0.xn--iib29f26o.1.xn--ss-1sj; 0.Ⴄ\u0669\u0820.1.\u0FB6ss; [B1, B5, B6, V5, V6]; 0.xn--iib29f26o.1.xn--ss-1sj; ; ; # 0.Ⴄ٩ࠠ.1.ྶss +0.xn--iib29fp25e.1.xn--ss-1sj; 0.ⴄ\u0669\u0820.1.\u0FB6ss; [B1, B5, B6, V5]; 0.xn--iib29fp25e.1.xn--ss-1sj; ; ; # 0.ⴄ٩ࠠ.1.ྶss +0.xn--iib29fp25e.1.xn--zca117e; 0.ⴄ\u0669\u0820.1.\u0FB6ß; [B1, B5, B6, V5]; 0.xn--iib29fp25e.1.xn--zca117e; ; ; # 0.ⴄ٩ࠠ.1.ྶß +0.xn--iib29f26o.1.xn--zca117e; 0.Ⴄ\u0669\u0820.1.\u0FB6ß; [B1, B5, B6, V5, V6]; 0.xn--iib29f26o.1.xn--zca117e; ; ; # 0.Ⴄ٩ࠠ.1.ྶß +🄀ⴄ\u0669\u0820。⒈\u0FB6ß; 🄀ⴄ\u0669\u0820.⒈\u0FB6ß; [B1, V6]; xn--iib29fp25e0219a.xn--zca117e3vp; ; xn--iib29fp25e0219a.xn--ss-1sj588o; # 🄀ⴄ٩ࠠ.⒈ྶß +🄀Ⴄ\u0669\u0820。⒈\u0FB6SS; 🄀Ⴄ\u0669\u0820.⒈\u0FB6ss; [B1, V6]; xn--iib29f26o6n43c.xn--ss-1sj588o; ; ; # 🄀Ⴄ٩ࠠ.⒈ྶss +🄀ⴄ\u0669\u0820。⒈\u0FB6ss; 🄀ⴄ\u0669\u0820.⒈\u0FB6ss; [B1, V6]; xn--iib29fp25e0219a.xn--ss-1sj588o; ; ; # 🄀ⴄ٩ࠠ.⒈ྶss +🄀Ⴄ\u0669\u0820。⒈\u0FB6Ss; 🄀Ⴄ\u0669\u0820.⒈\u0FB6ss; [B1, V6]; xn--iib29f26o6n43c.xn--ss-1sj588o; ; ; # 🄀Ⴄ٩ࠠ.⒈ྶss +xn--iib29f26o6n43c.xn--ss-1sj588o; 🄀Ⴄ\u0669\u0820.⒈\u0FB6ss; [B1, V6]; xn--iib29f26o6n43c.xn--ss-1sj588o; ; ; # 🄀Ⴄ٩ࠠ.⒈ྶss +xn--iib29fp25e0219a.xn--ss-1sj588o; 🄀ⴄ\u0669\u0820.⒈\u0FB6ss; [B1, V6]; xn--iib29fp25e0219a.xn--ss-1sj588o; ; ; # 🄀ⴄ٩ࠠ.⒈ྶss +xn--iib29fp25e0219a.xn--zca117e3vp; 🄀ⴄ\u0669\u0820.⒈\u0FB6ß; [B1, V6]; xn--iib29fp25e0219a.xn--zca117e3vp; ; ; # 🄀ⴄ٩ࠠ.⒈ྶß +xn--iib29f26o6n43c.xn--zca117e3vp; 🄀Ⴄ\u0669\u0820.⒈\u0FB6ß; [B1, V6]; xn--iib29f26o6n43c.xn--zca117e3vp; ; ; # 🄀Ⴄ٩ࠠ.⒈ྶß +≠.\u200C-\u066B; ; [B1, C1]; xn--1ch.xn----vqc597q; ; xn--1ch.xn----vqc; [B1, V3] # ≠.-٫ +=\u0338.\u200C-\u066B; ≠.\u200C-\u066B; [B1, C1]; xn--1ch.xn----vqc597q; ; xn--1ch.xn----vqc; [B1, V3] # ≠.-٫ +xn--1ch.xn----vqc; ≠.-\u066B; [B1, V3]; xn--1ch.xn----vqc; ; ; # ≠.-٫ +xn--1ch.xn----vqc597q; ≠.\u200C-\u066B; [B1, C1]; xn--1ch.xn----vqc597q; ; ; # ≠.-٫ +\u0660۱。𞠁\u0665; \u0660۱.𞠁\u0665; [B1, V6]; xn--8hb40a.xn--eib7967vner3e; ; ; # ٠۱.𞠁٥ +\u0660۱。𞠁\u0665; \u0660۱.𞠁\u0665; [B1, V6]; xn--8hb40a.xn--eib7967vner3e; ; ; # ٠۱.𞠁٥ +xn--8hb40a.xn--eib7967vner3e; \u0660۱.𞠁\u0665; [B1, V6]; xn--8hb40a.xn--eib7967vner3e; ; ; # ٠۱.𞠁٥ +\u200C\u0663⒖。\u1BF3; \u200C\u0663⒖.\u1BF3; [B1, C1, V6]; xn--cib152kwgd.xn--1zf13512buy41d; ; xn--cib675m.xn--1zf13512buy41d; [B1, V6] # ٣⒖.᯳ +\u200C\u066315.。\u1BF3; \u200C\u066315..\u1BF3; [B1, C1, V6, X4_2]; xn--15-gyd983x..xn--1zf13512buy41d; [B1, C1, V6, A4_2]; xn--15-gyd..xn--1zf13512buy41d; [B1, V6, A4_2] # ٣15..᯳ +xn--15-gyd..xn--1zf13512buy41d; \u066315..\u1BF3; [B1, V6, X4_2]; xn--15-gyd..xn--1zf13512buy41d; [B1, V6, A4_2]; ; # ٣15..᯳ +xn--15-gyd983x..xn--1zf13512buy41d; \u200C\u066315..\u1BF3; [B1, C1, V6, X4_2]; xn--15-gyd983x..xn--1zf13512buy41d; [B1, C1, V6, A4_2]; ; # ٣15..᯳ +xn--cib675m.xn--1zf13512buy41d; \u0663⒖.\u1BF3; [B1, V6]; xn--cib675m.xn--1zf13512buy41d; ; ; # ٣⒖.᯳ +xn--cib152kwgd.xn--1zf13512buy41d; \u200C\u0663⒖.\u1BF3; [B1, C1, V6]; xn--cib152kwgd.xn--1zf13512buy41d; ; ; # ٣⒖.᯳ +\u1BF3.-逋; ; [V3, V5, V6]; xn--1zf.xn----483d46987byr50b; ; ; # ᯳.-逋 +xn--1zf.xn----483d46987byr50b; \u1BF3.-逋; [V3, V5, V6]; xn--1zf.xn----483d46987byr50b; ; ; # ᯳.-逋 +\u0756。\u3164\u200Dς; \u0756.\u3164\u200Dς; [C2, V6]; xn--9ob.xn--3xa995lq2l; ; xn--9ob.xn--4xa574u; [V6] # ݖ.ς +\u0756。\u1160\u200Dς; \u0756.\u1160\u200Dς; [C2, V6]; xn--9ob.xn--3xa580ebol; ; xn--9ob.xn--4xa380e; [V6] # ݖ.ς +\u0756。\u1160\u200DΣ; \u0756.\u1160\u200Dσ; [C2, V6]; xn--9ob.xn--4xa380ebol; ; xn--9ob.xn--4xa380e; [V6] # ݖ.σ +\u0756。\u1160\u200Dσ; \u0756.\u1160\u200Dσ; [C2, V6]; xn--9ob.xn--4xa380ebol; ; xn--9ob.xn--4xa380e; [V6] # ݖ.σ +xn--9ob.xn--4xa380e; \u0756.\u1160σ; [V6]; xn--9ob.xn--4xa380e; ; ; # ݖ.σ +xn--9ob.xn--4xa380ebol; \u0756.\u1160\u200Dσ; [C2, V6]; xn--9ob.xn--4xa380ebol; ; ; # ݖ.σ +xn--9ob.xn--3xa580ebol; \u0756.\u1160\u200Dς; [C2, V6]; xn--9ob.xn--3xa580ebol; ; ; # ݖ.ς +\u0756。\u3164\u200DΣ; \u0756.\u3164\u200Dσ; [C2, V6]; xn--9ob.xn--4xa795lq2l; ; xn--9ob.xn--4xa574u; [V6] # ݖ.σ +\u0756。\u3164\u200Dσ; \u0756.\u3164\u200Dσ; [C2, V6]; xn--9ob.xn--4xa795lq2l; ; xn--9ob.xn--4xa574u; [V6] # ݖ.σ +xn--9ob.xn--4xa574u; \u0756.\u3164σ; [V6]; xn--9ob.xn--4xa574u; ; ; # ݖ.σ +xn--9ob.xn--4xa795lq2l; \u0756.\u3164\u200Dσ; [C2, V6]; xn--9ob.xn--4xa795lq2l; ; ; # ݖ.σ +xn--9ob.xn--3xa995lq2l; \u0756.\u3164\u200Dς; [C2, V6]; xn--9ob.xn--3xa995lq2l; ; ; # ݖ.ς +ᡆႣ。\u0315\u200D\u200D; ᡆႣ.\u0315\u200D\u200D; [C2, V6]; xn--bnd320b.xn--5sa649la993427a; ; xn--bnd320b.xn--5sa98523p; [V6] # ᡆႣ.̕ +ᡆႣ。\u0315\u200D\u200D; ᡆႣ.\u0315\u200D\u200D; [C2, V6]; xn--bnd320b.xn--5sa649la993427a; ; xn--bnd320b.xn--5sa98523p; [V6] # ᡆႣ.̕ +ᡆⴃ。\u0315\u200D\u200D; ᡆⴃ.\u0315\u200D\u200D; [C2, V6]; xn--57e237h.xn--5sa649la993427a; ; xn--57e237h.xn--5sa98523p; [V6] # ᡆⴃ.̕ +xn--57e237h.xn--5sa98523p; ᡆⴃ.\u0315; [V6]; xn--57e237h.xn--5sa98523p; ; ; # ᡆⴃ.̕ +xn--57e237h.xn--5sa649la993427a; ᡆⴃ.\u0315\u200D\u200D; [C2, V6]; xn--57e237h.xn--5sa649la993427a; ; ; # ᡆⴃ.̕ +xn--bnd320b.xn--5sa98523p; ᡆႣ.\u0315; [V6]; xn--bnd320b.xn--5sa98523p; ; ; # ᡆႣ.̕ +xn--bnd320b.xn--5sa649la993427a; ᡆႣ.\u0315\u200D\u200D; [C2, V6]; xn--bnd320b.xn--5sa649la993427a; ; ; # ᡆႣ.̕ +ᡆⴃ。\u0315\u200D\u200D; ᡆⴃ.\u0315\u200D\u200D; [C2, V6]; xn--57e237h.xn--5sa649la993427a; ; xn--57e237h.xn--5sa98523p; [V6] # ᡆⴃ.̕ +㭄\u200D\u084F𑚵.ς𐮮\u200C\u200D; 㭄\u200D\u084F𑚵.ς𐮮\u200C\u200D; [B5, B6, C1, C2]; xn--ewb962jfitku4r.xn--3xa895lda6932v; ; xn--ewb302xhu1l.xn--4xa0426k; [B5, B6] # 㭄ࡏ𑚵.ς𐮮 +㭄\u200D\u084F𑚵.ς𐮮\u200C\u200D; ; [B5, B6, C1, C2]; xn--ewb962jfitku4r.xn--3xa895lda6932v; ; xn--ewb302xhu1l.xn--4xa0426k; [B5, B6] # 㭄ࡏ𑚵.ς𐮮 +㭄\u200D\u084F𑚵.Σ𐮮\u200C\u200D; 㭄\u200D\u084F𑚵.σ𐮮\u200C\u200D; [B5, B6, C1, C2]; xn--ewb962jfitku4r.xn--4xa695lda6932v; ; xn--ewb302xhu1l.xn--4xa0426k; [B5, B6] # 㭄ࡏ𑚵.σ𐮮 +㭄\u200D\u084F𑚵.σ𐮮\u200C\u200D; ; [B5, B6, C1, C2]; xn--ewb962jfitku4r.xn--4xa695lda6932v; ; xn--ewb302xhu1l.xn--4xa0426k; [B5, B6] # 㭄ࡏ𑚵.σ𐮮 +xn--ewb302xhu1l.xn--4xa0426k; 㭄\u084F𑚵.σ𐮮; [B5, B6]; xn--ewb302xhu1l.xn--4xa0426k; ; ; # 㭄ࡏ𑚵.σ𐮮 +xn--ewb962jfitku4r.xn--4xa695lda6932v; 㭄\u200D\u084F𑚵.σ𐮮\u200C\u200D; [B5, B6, C1, C2]; xn--ewb962jfitku4r.xn--4xa695lda6932v; ; ; # 㭄ࡏ𑚵.σ𐮮 +xn--ewb962jfitku4r.xn--3xa895lda6932v; 㭄\u200D\u084F𑚵.ς𐮮\u200C\u200D; [B5, B6, C1, C2]; xn--ewb962jfitku4r.xn--3xa895lda6932v; ; ; # 㭄ࡏ𑚵.ς𐮮 +㭄\u200D\u084F𑚵.Σ𐮮\u200C\u200D; 㭄\u200D\u084F𑚵.σ𐮮\u200C\u200D; [B5, B6, C1, C2]; xn--ewb962jfitku4r.xn--4xa695lda6932v; ; xn--ewb302xhu1l.xn--4xa0426k; [B5, B6] # 㭄ࡏ𑚵.σ𐮮 +㭄\u200D\u084F𑚵.σ𐮮\u200C\u200D; 㭄\u200D\u084F𑚵.σ𐮮\u200C\u200D; [B5, B6, C1, C2]; xn--ewb962jfitku4r.xn--4xa695lda6932v; ; xn--ewb302xhu1l.xn--4xa0426k; [B5, B6] # 㭄ࡏ𑚵.σ𐮮 +\u17B5。ꡀ🄋; \u17B5.ꡀ🄋; [B1, B2, B3, V5, V6]; xn--03e.xn--8b9ar252dngd; ; ; # .ꡀ🄋 +xn--03e.xn--8b9ar252dngd; \u17B5.ꡀ🄋; [B1, B2, B3, V5, V6]; xn--03e.xn--8b9ar252dngd; ; ; # .ꡀ🄋 +暑.⾑\u0668; 暑.襾\u0668; [B5, B6, V6]; xn--tlvq3513e.xn--hib9228d; ; ; # 暑.襾٨ +暑.襾\u0668; ; [B5, B6, V6]; xn--tlvq3513e.xn--hib9228d; ; ; # 暑.襾٨ +xn--tlvq3513e.xn--hib9228d; 暑.襾\u0668; [B5, B6, V6]; xn--tlvq3513e.xn--hib9228d; ; ; # 暑.襾٨ +󠄚≯ꡢ。\u0891\u1DFF; ≯ꡢ.\u0891\u1DFF; [B1, V6]; xn--hdh7783c.xn--9xb680i; ; ; # ≯ꡢ.᷿ +󠄚>\u0338ꡢ。\u0891\u1DFF; ≯ꡢ.\u0891\u1DFF; [B1, V6]; xn--hdh7783c.xn--9xb680i; ; ; # ≯ꡢ.᷿ +xn--hdh7783c.xn--9xb680i; ≯ꡢ.\u0891\u1DFF; [B1, V6]; xn--hdh7783c.xn--9xb680i; ; ; # ≯ꡢ.᷿ +\uFDC3𮁱\u0B4D𐨿.Ⴗ; \u0643\u0645\u0645𮁱\u0B4D𐨿.Ⴗ; [B2, B3, V6]; xn--fhbea662czx68a2tju.xn--vnd55511o; ; ; # كمم𮁱୍𐨿.Ⴗ +\u0643\u0645\u0645𮁱\u0B4D𐨿.Ⴗ; ; [B2, B3, V6]; xn--fhbea662czx68a2tju.xn--vnd55511o; ; ; # كمم𮁱୍𐨿.Ⴗ +\u0643\u0645\u0645𮁱\u0B4D𐨿.ⴗ; ; [B2, B3, V6]; xn--fhbea662czx68a2tju.xn--fljz2846h; ; ; # كمم𮁱୍𐨿.ⴗ +xn--fhbea662czx68a2tju.xn--fljz2846h; \u0643\u0645\u0645𮁱\u0B4D𐨿.ⴗ; [B2, B3, V6]; xn--fhbea662czx68a2tju.xn--fljz2846h; ; ; # كمم𮁱୍𐨿.ⴗ +xn--fhbea662czx68a2tju.xn--vnd55511o; \u0643\u0645\u0645𮁱\u0B4D𐨿.Ⴗ; [B2, B3, V6]; xn--fhbea662czx68a2tju.xn--vnd55511o; ; ; # كمم𮁱୍𐨿.Ⴗ +\uFDC3𮁱\u0B4D𐨿.ⴗ; \u0643\u0645\u0645𮁱\u0B4D𐨿.ⴗ; [B2, B3, V6]; xn--fhbea662czx68a2tju.xn--fljz2846h; ; ; # كمم𮁱୍𐨿.ⴗ +𞀨。\u1B44; 𞀨.\u1B44; [V5, V6]; xn--mi4h.xn--1uf6843smg20c; ; ; # 𞀨.᭄ +𞀨。\u1B44; 𞀨.\u1B44; [V5, V6]; xn--mi4h.xn--1uf6843smg20c; ; ; # 𞀨.᭄ +xn--mi4h.xn--1uf6843smg20c; 𞀨.\u1B44; [V5, V6]; xn--mi4h.xn--1uf6843smg20c; ; ; # 𞀨.᭄ +\u200C.𐺰\u200Cᡟ; \u200C.𐺰\u200Cᡟ; [B1, B2, B3, C1, V6]; xn--0ug18531l.xn--v8e340bp21t; ; xn--q046e.xn--v8e7227j; [B1, B2, B3, V6] # .𐺰ᡟ +\u200C.𐺰\u200Cᡟ; ; [B1, B2, B3, C1, V6]; xn--0ug18531l.xn--v8e340bp21t; ; xn--q046e.xn--v8e7227j; [B1, B2, B3, V6] # .𐺰ᡟ +xn--q046e.xn--v8e7227j; .𐺰ᡟ; [B1, B2, B3, V6]; xn--q046e.xn--v8e7227j; ; ; # .𐺰ᡟ +xn--0ug18531l.xn--v8e340bp21t; \u200C.𐺰\u200Cᡟ; [B1, B2, B3, C1, V6]; xn--0ug18531l.xn--v8e340bp21t; ; ; # .𐺰ᡟ +ᢛß.ጧ; ; [V6]; xn--zca562jc642x.xn--p5d; ; xn--ss-7dp66033t.xn--p5d; # ᢛß.ጧ +ᢛSS.ጧ; ᢛss.ጧ; [V6]; xn--ss-7dp66033t.xn--p5d; ; ; # ᢛss.ጧ +ᢛss.ጧ; ; [V6]; xn--ss-7dp66033t.xn--p5d; ; ; # ᢛss.ጧ +ᢛSs.ጧ; ᢛss.ጧ; [V6]; xn--ss-7dp66033t.xn--p5d; ; ; # ᢛss.ጧ +xn--ss-7dp66033t.xn--p5d; ᢛss.ጧ; [V6]; xn--ss-7dp66033t.xn--p5d; ; ; # ᢛss.ጧ +xn--zca562jc642x.xn--p5d; ᢛß.ጧ; [V6]; xn--zca562jc642x.xn--p5d; ; ; # ᢛß.ጧ +⮒\u200C.\u200C; ; [C1, V6]; xn--0ugx66b.xn--0ugz2871c; ; xn--b9i.xn--5p9y; [V6] # ⮒. +xn--b9i.xn--5p9y; ⮒.; [V6]; xn--b9i.xn--5p9y; ; ; # ⮒. +xn--0ugx66b.xn--0ugz2871c; ⮒\u200C.\u200C; [C1, V6]; xn--0ugx66b.xn--0ugz2871c; ; ; # ⮒. +𞤂𐹯。Ⴜ; 𞤤𐹯.Ⴜ; [B2, V6]; xn--no0dr648a51o3b.xn--0nd; ; ; # 𞤤𐹯.Ⴜ +𞤤𐹯。ⴜ; 𞤤𐹯.ⴜ; [B2, V6]; xn--no0dr648a51o3b.xn--klj; ; ; # 𞤤𐹯.ⴜ +xn--no0dr648a51o3b.xn--klj; 𞤤𐹯.ⴜ; [B2, V6]; xn--no0dr648a51o3b.xn--klj; ; ; # 𞤤𐹯.ⴜ +xn--no0dr648a51o3b.xn--0nd; 𞤤𐹯.Ⴜ; [B2, V6]; xn--no0dr648a51o3b.xn--0nd; ; ; # 𞤤𐹯.Ⴜ +𞤂𐹯。ⴜ; 𞤤𐹯.ⴜ; [B2, V6]; xn--no0dr648a51o3b.xn--klj; ; ; # 𞤤𐹯.ⴜ +𐹵⮣\u200C𑄰。\uFCB7; 𐹵⮣\u200C𑄰.\u0636\u0645; [B1, B5, B6, C1, V6]; xn--0ug586bcj8p7jc.xn--1gb4a66004i; ; xn--s9i5458e7yb.xn--1gb4a66004i; [B1, B5, B6, V6] # 𐹵⮣𑄰.ضم +𐹵⮣\u200C𑄰。\u0636\u0645; 𐹵⮣\u200C𑄰.\u0636\u0645; [B1, B5, B6, C1, V6]; xn--0ug586bcj8p7jc.xn--1gb4a66004i; ; xn--s9i5458e7yb.xn--1gb4a66004i; [B1, B5, B6, V6] # 𐹵⮣𑄰.ضم +xn--s9i5458e7yb.xn--1gb4a66004i; 𐹵⮣𑄰.\u0636\u0645; [B1, B5, B6, V6]; xn--s9i5458e7yb.xn--1gb4a66004i; ; ; # 𐹵⮣𑄰.ضم +xn--0ug586bcj8p7jc.xn--1gb4a66004i; 𐹵⮣\u200C𑄰.\u0636\u0645; [B1, B5, B6, C1, V6]; xn--0ug586bcj8p7jc.xn--1gb4a66004i; ; ; # 𐹵⮣𑄰.ضم +Ⴒ。デß𞤵\u0C4D; Ⴒ.デß𞤵\u0C4D; [B5, B6, V6]; xn--qnd.xn--zca669cmr3a0f28a; ; xn--qnd.xn--ss-9nh3648ahh20b; # Ⴒ.デß𞤵్ +Ⴒ。テ\u3099ß𞤵\u0C4D; Ⴒ.デß𞤵\u0C4D; [B5, B6, V6]; xn--qnd.xn--zca669cmr3a0f28a; ; xn--qnd.xn--ss-9nh3648ahh20b; # Ⴒ.デß𞤵్ +ⴒ。テ\u3099ß𞤵\u0C4D; ⴒ.デß𞤵\u0C4D; [B5, B6]; xn--9kj.xn--zca669cmr3a0f28a; ; xn--9kj.xn--ss-9nh3648ahh20b; # ⴒ.デß𞤵్ +ⴒ。デß𞤵\u0C4D; ⴒ.デß𞤵\u0C4D; [B5, B6]; xn--9kj.xn--zca669cmr3a0f28a; ; xn--9kj.xn--ss-9nh3648ahh20b; # ⴒ.デß𞤵్ +Ⴒ。デSS𞤓\u0C4D; Ⴒ.デss𞤵\u0C4D; [B5, B6, V6]; xn--qnd.xn--ss-9nh3648ahh20b; ; ; # Ⴒ.デss𞤵్ +Ⴒ。テ\u3099SS𞤓\u0C4D; Ⴒ.デss𞤵\u0C4D; [B5, B6, V6]; xn--qnd.xn--ss-9nh3648ahh20b; ; ; # Ⴒ.デss𞤵్ +ⴒ。テ\u3099ss𞤵\u0C4D; ⴒ.デss𞤵\u0C4D; [B5, B6]; xn--9kj.xn--ss-9nh3648ahh20b; ; ; # ⴒ.デss𞤵్ +ⴒ。デss𞤵\u0C4D; ⴒ.デss𞤵\u0C4D; [B5, B6]; xn--9kj.xn--ss-9nh3648ahh20b; ; ; # ⴒ.デss𞤵్ +Ⴒ。デSs𞤵\u0C4D; Ⴒ.デss𞤵\u0C4D; [B5, B6, V6]; xn--qnd.xn--ss-9nh3648ahh20b; ; ; # Ⴒ.デss𞤵్ +Ⴒ。テ\u3099Ss𞤵\u0C4D; Ⴒ.デss𞤵\u0C4D; [B5, B6, V6]; xn--qnd.xn--ss-9nh3648ahh20b; ; ; # Ⴒ.デss𞤵్ +xn--qnd.xn--ss-9nh3648ahh20b; Ⴒ.デss𞤵\u0C4D; [B5, B6, V6]; xn--qnd.xn--ss-9nh3648ahh20b; ; ; # Ⴒ.デss𞤵్ +xn--9kj.xn--ss-9nh3648ahh20b; ⴒ.デss𞤵\u0C4D; [B5, B6]; xn--9kj.xn--ss-9nh3648ahh20b; ; ; # ⴒ.デss𞤵్ +xn--9kj.xn--zca669cmr3a0f28a; ⴒ.デß𞤵\u0C4D; [B5, B6]; xn--9kj.xn--zca669cmr3a0f28a; ; ; # ⴒ.デß𞤵్ +xn--qnd.xn--zca669cmr3a0f28a; Ⴒ.デß𞤵\u0C4D; [B5, B6, V6]; xn--qnd.xn--zca669cmr3a0f28a; ; ; # Ⴒ.デß𞤵్ +Ⴒ。デSS𞤵\u0C4D; Ⴒ.デss𞤵\u0C4D; [B5, B6, V6]; xn--qnd.xn--ss-9nh3648ahh20b; ; ; # Ⴒ.デss𞤵్ +Ⴒ。テ\u3099SS𞤵\u0C4D; Ⴒ.デss𞤵\u0C4D; [B5, B6, V6]; xn--qnd.xn--ss-9nh3648ahh20b; ; ; # Ⴒ.デss𞤵్ +𑁿\u0D4D.7-\u07D2; 𑁿\u0D4D.7-\u07D2; [B1, V5]; xn--wxc1283k.xn--7--yue; ; ; # 𑁿്.7-ߒ +𑁿\u0D4D.7-\u07D2; ; [B1, V5]; xn--wxc1283k.xn--7--yue; ; ; # 𑁿്.7-ߒ +xn--wxc1283k.xn--7--yue; 𑁿\u0D4D.7-\u07D2; [B1, V5]; xn--wxc1283k.xn--7--yue; ; ; # 𑁿്.7-ߒ +≯𑜫.\u1734𑍬ᢧ; ; [V5, V6]; xn--hdhx157g68o0g.xn--c0e65eu616c34o7a; ; ; # ≯𑜫.᜴𑍬ᢧ +>\u0338𑜫.\u1734𑍬ᢧ; ≯𑜫.\u1734𑍬ᢧ; [V5, V6]; xn--hdhx157g68o0g.xn--c0e65eu616c34o7a; ; ; # ≯𑜫.᜴𑍬ᢧ +xn--hdhx157g68o0g.xn--c0e65eu616c34o7a; ≯𑜫.\u1734𑍬ᢧ; [V5, V6]; xn--hdhx157g68o0g.xn--c0e65eu616c34o7a; ; ; # ≯𑜫.᜴𑍬ᢧ +\u1DDBႷ쏔。\u0781; \u1DDBႷ쏔.\u0781; [B1, V5, V6]; xn--vnd148d733ky6n9e.xn--iqb; ; ; # ᷛႷ쏔.ށ +\u1DDBႷ쏔。\u0781; \u1DDBႷ쏔.\u0781; [B1, V5, V6]; xn--vnd148d733ky6n9e.xn--iqb; ; ; # ᷛႷ쏔.ށ +\u1DDBⴗ쏔。\u0781; \u1DDBⴗ쏔.\u0781; [B1, V5, V6]; xn--zegy26dw47iy6w2f.xn--iqb; ; ; # ᷛⴗ쏔.ށ +\u1DDBⴗ쏔。\u0781; \u1DDBⴗ쏔.\u0781; [B1, V5, V6]; xn--zegy26dw47iy6w2f.xn--iqb; ; ; # ᷛⴗ쏔.ށ +xn--zegy26dw47iy6w2f.xn--iqb; \u1DDBⴗ쏔.\u0781; [B1, V5, V6]; xn--zegy26dw47iy6w2f.xn--iqb; ; ; # ᷛⴗ쏔.ށ +xn--vnd148d733ky6n9e.xn--iqb; \u1DDBႷ쏔.\u0781; [B1, V5, V6]; xn--vnd148d733ky6n9e.xn--iqb; ; ; # ᷛႷ쏔.ށ +ß。𐋳Ⴌ\u0FB8; ß.𐋳Ⴌ\u0FB8; [V6]; xn--zca.xn--lgd10cu829c; ; ss.xn--lgd10cu829c; # ß.𐋳Ⴌྸ +ß。𐋳Ⴌ\u0FB8; ß.𐋳Ⴌ\u0FB8; [V6]; xn--zca.xn--lgd10cu829c; ; ss.xn--lgd10cu829c; # ß.𐋳Ⴌྸ +ß。𐋳ⴌ\u0FB8; ß.𐋳ⴌ\u0FB8; ; xn--zca.xn--lgd921mvv0m; ; ss.xn--lgd921mvv0m; # ß.𐋳ⴌྸ +SS。𐋳Ⴌ\u0FB8; ss.𐋳Ⴌ\u0FB8; [V6]; ss.xn--lgd10cu829c; ; ; # ss.𐋳Ⴌྸ +ss。𐋳ⴌ\u0FB8; ss.𐋳ⴌ\u0FB8; ; ss.xn--lgd921mvv0m; ; ; # ss.𐋳ⴌྸ +Ss。𐋳Ⴌ\u0FB8; ss.𐋳Ⴌ\u0FB8; [V6]; ss.xn--lgd10cu829c; ; ; # ss.𐋳Ⴌྸ +ss.xn--lgd10cu829c; ss.𐋳Ⴌ\u0FB8; [V6]; ss.xn--lgd10cu829c; ; ; # ss.𐋳Ⴌྸ +ss.xn--lgd921mvv0m; ss.𐋳ⴌ\u0FB8; ; ss.xn--lgd921mvv0m; ; ; # ss.𐋳ⴌྸ +ss.𐋳ⴌ\u0FB8; ; ; ss.xn--lgd921mvv0m; ; ; # ss.𐋳ⴌྸ +SS.𐋳Ⴌ\u0FB8; ss.𐋳Ⴌ\u0FB8; [V6]; ss.xn--lgd10cu829c; ; ; # ss.𐋳Ⴌྸ +Ss.𐋳Ⴌ\u0FB8; ss.𐋳Ⴌ\u0FB8; [V6]; ss.xn--lgd10cu829c; ; ; # ss.𐋳Ⴌྸ +xn--zca.xn--lgd921mvv0m; ß.𐋳ⴌ\u0FB8; ; xn--zca.xn--lgd921mvv0m; ; ; # ß.𐋳ⴌྸ +ß.𐋳ⴌ\u0FB8; ; ; xn--zca.xn--lgd921mvv0m; ; ss.xn--lgd921mvv0m; # ß.𐋳ⴌྸ +xn--zca.xn--lgd10cu829c; ß.𐋳Ⴌ\u0FB8; [V6]; xn--zca.xn--lgd10cu829c; ; ; # ß.𐋳Ⴌྸ +ß。𐋳ⴌ\u0FB8; ß.𐋳ⴌ\u0FB8; ; xn--zca.xn--lgd921mvv0m; ; ss.xn--lgd921mvv0m; # ß.𐋳ⴌྸ +SS。𐋳Ⴌ\u0FB8; ss.𐋳Ⴌ\u0FB8; [V6]; ss.xn--lgd10cu829c; ; ; # ss.𐋳Ⴌྸ +ss。𐋳ⴌ\u0FB8; ss.𐋳ⴌ\u0FB8; ; ss.xn--lgd921mvv0m; ; ; # ss.𐋳ⴌྸ +Ss。𐋳Ⴌ\u0FB8; ss.𐋳Ⴌ\u0FB8; [V6]; ss.xn--lgd10cu829c; ; ; # ss.𐋳Ⴌྸ +-\u069E.\u200C⾝\u09CD; -\u069E.\u200C身\u09CD; [B1, C1, V3, V6]; xn----stc7013r.xn--b7b305imj2f; ; xn----stc7013r.xn--b7b1419d; [B1, V3, V6] # -ڞ.身্ +-\u069E.\u200C身\u09CD; ; [B1, C1, V3, V6]; xn----stc7013r.xn--b7b305imj2f; ; xn----stc7013r.xn--b7b1419d; [B1, V3, V6] # -ڞ.身্ +xn----stc7013r.xn--b7b1419d; -\u069E.身\u09CD; [B1, V3, V6]; xn----stc7013r.xn--b7b1419d; ; ; # -ڞ.身্ +xn----stc7013r.xn--b7b305imj2f; -\u069E.\u200C身\u09CD; [B1, C1, V3, V6]; xn----stc7013r.xn--b7b305imj2f; ; ; # -ڞ.身্ +😮\u0764𑈵𞀖.💅\u200D; 😮\u0764𑈵𞀖.💅\u200D; [B1, C2]; xn--opb4277kuc7elqsa.xn--1ug5265p; ; xn--opb4277kuc7elqsa.xn--kr8h; [B1] # 😮ݤ𑈵𞀖.💅 +😮\u0764𑈵𞀖.💅\u200D; ; [B1, C2]; xn--opb4277kuc7elqsa.xn--1ug5265p; ; xn--opb4277kuc7elqsa.xn--kr8h; [B1] # 😮ݤ𑈵𞀖.💅 +xn--opb4277kuc7elqsa.xn--kr8h; 😮\u0764𑈵𞀖.💅; [B1]; xn--opb4277kuc7elqsa.xn--kr8h; ; ; # 😮ݤ𑈵𞀖.💅 +xn--opb4277kuc7elqsa.xn--1ug5265p; 😮\u0764𑈵𞀖.💅\u200D; [B1, C2]; xn--opb4277kuc7elqsa.xn--1ug5265p; ; ; # 😮ݤ𑈵𞀖.💅 +\u08F2\u200D꙳\u0712.ᢏ\u200C; ; [B1, B6, C1, C2, V5, V6]; xn--cnb37g904be26j.xn--89e849ax9363a; ; xn--cnb37gdy00a.xn--89e02253p; [B1, B6, V5, V6] # ࣲ꙳ܒ.ᢏ +xn--cnb37gdy00a.xn--89e02253p; \u08F2꙳\u0712.ᢏ; [B1, B6, V5, V6]; xn--cnb37gdy00a.xn--89e02253p; ; ; # ࣲ꙳ܒ.ᢏ +xn--cnb37g904be26j.xn--89e849ax9363a; \u08F2\u200D꙳\u0712.ᢏ\u200C; [B1, B6, C1, C2, V5, V6]; xn--cnb37g904be26j.xn--89e849ax9363a; ; ; # ࣲ꙳ܒ.ᢏ +Ⴑ.\u06BFᠲ; Ⴑ.\u06BFᠲ; [B2, B3, V6]; xn--pnd.xn--ykb840gd555a; ; ; # Ⴑ.ڿᠲ +Ⴑ.\u06BFᠲ; ; [B2, B3, V6]; xn--pnd.xn--ykb840gd555a; ; ; # Ⴑ.ڿᠲ +ⴑ.\u06BFᠲ; ; [B2, B3, V6]; xn--8kj.xn--ykb840gd555a; ; ; # ⴑ.ڿᠲ +xn--8kj.xn--ykb840gd555a; ⴑ.\u06BFᠲ; [B2, B3, V6]; xn--8kj.xn--ykb840gd555a; ; ; # ⴑ.ڿᠲ +xn--pnd.xn--ykb840gd555a; Ⴑ.\u06BFᠲ; [B2, B3, V6]; xn--pnd.xn--ykb840gd555a; ; ; # Ⴑ.ڿᠲ +ⴑ.\u06BFᠲ; ⴑ.\u06BFᠲ; [B2, B3, V6]; xn--8kj.xn--ykb840gd555a; ; ; # ⴑ.ڿᠲ +\u1A5A\u0C4D。𝟵; \u1A5A\u0C4D.9; [V5, V6]; xn--lqc703ebm93a.xn--9-000p; ; ; # ᩚ్.9 +\u1A5A\u0C4D。9; \u1A5A\u0C4D.9; [V5, V6]; xn--lqc703ebm93a.xn--9-000p; ; ; # ᩚ్.9 +xn--lqc703ebm93a.xn--9-000p; \u1A5A\u0C4D.9; [V5, V6]; xn--lqc703ebm93a.xn--9-000p; ; ; # ᩚ్.9 +\u200C\u06A0𝟗。Ⴣ꒘\uFCD0; \u200C\u06A09.Ⴣ꒘\u0645\u062E; [B1, B5, C1, V6]; xn--9-vtc736qts91g.xn--tgb9bz61cfn8mw3t2c; ; xn--9-vtc42319e.xn--tgb9bz61cfn8mw3t2c; [B2, B5, V6] # ڠ9.Ⴣ꒘مخ +\u200C\u06A09。Ⴣ꒘\u0645\u062E; \u200C\u06A09.Ⴣ꒘\u0645\u062E; [B1, B5, C1, V6]; xn--9-vtc736qts91g.xn--tgb9bz61cfn8mw3t2c; ; xn--9-vtc42319e.xn--tgb9bz61cfn8mw3t2c; [B2, B5, V6] # ڠ9.Ⴣ꒘مخ +\u200C\u06A09。ⴣ꒘\u0645\u062E; \u200C\u06A09.ⴣ꒘\u0645\u062E; [B1, B5, C1, V6]; xn--9-vtc736qts91g.xn--tgb9bz87p833hw316c; ; xn--9-vtc42319e.xn--tgb9bz87p833hw316c; [B2, B5, V6] # ڠ9.ⴣ꒘مخ +xn--9-vtc42319e.xn--tgb9bz87p833hw316c; \u06A09.ⴣ꒘\u0645\u062E; [B2, B5, V6]; xn--9-vtc42319e.xn--tgb9bz87p833hw316c; ; ; # ڠ9.ⴣ꒘مخ +xn--9-vtc736qts91g.xn--tgb9bz87p833hw316c; \u200C\u06A09.ⴣ꒘\u0645\u062E; [B1, B5, C1, V6]; xn--9-vtc736qts91g.xn--tgb9bz87p833hw316c; ; ; # ڠ9.ⴣ꒘مخ +xn--9-vtc42319e.xn--tgb9bz61cfn8mw3t2c; \u06A09.Ⴣ꒘\u0645\u062E; [B2, B5, V6]; xn--9-vtc42319e.xn--tgb9bz61cfn8mw3t2c; ; ; # ڠ9.Ⴣ꒘مخ +xn--9-vtc736qts91g.xn--tgb9bz61cfn8mw3t2c; \u200C\u06A09.Ⴣ꒘\u0645\u062E; [B1, B5, C1, V6]; xn--9-vtc736qts91g.xn--tgb9bz61cfn8mw3t2c; ; ; # ڠ9.Ⴣ꒘مخ +\u200C\u06A0𝟗。ⴣ꒘\uFCD0; \u200C\u06A09.ⴣ꒘\u0645\u062E; [B1, B5, C1, V6]; xn--9-vtc736qts91g.xn--tgb9bz87p833hw316c; ; xn--9-vtc42319e.xn--tgb9bz87p833hw316c; [B2, B5, V6] # ڠ9.ⴣ꒘مخ +ᡖ。\u031F\u0B82-; ᡖ.\u031F\u0B82-; [V3, V5, V6]; xn--m8e.xn----mdb555dkk71m; ; ; # ᡖ.̟ஂ- +ᡖ。\u031F\u0B82-; ᡖ.\u031F\u0B82-; [V3, V5, V6]; xn--m8e.xn----mdb555dkk71m; ; ; # ᡖ.̟ஂ- +xn--m8e.xn----mdb555dkk71m; ᡖ.\u031F\u0B82-; [V3, V5, V6]; xn--m8e.xn----mdb555dkk71m; ; ; # ᡖ.̟ஂ- +𞠠浘。絧𞀀; 𞠠浘.絧𞀀; [B2, B3]; xn--e0wp491f.xn--ud0a3573e; ; ; # 𞠠浘.絧𞀀 +xn--e0wp491f.xn--ud0a3573e; 𞠠浘.絧𞀀; [B2, B3]; xn--e0wp491f.xn--ud0a3573e; ; ; # 𞠠浘.絧𞀀 +\u0596Ⴋ.𝟳≯︒\uFE0A; \u0596Ⴋ.7≯︒; [V5, V6]; xn--hcb887c.xn--7-pgoy530h; ; ; # ֖Ⴋ.7≯︒ +\u0596Ⴋ.𝟳>\u0338︒\uFE0A; \u0596Ⴋ.7≯︒; [V5, V6]; xn--hcb887c.xn--7-pgoy530h; ; ; # ֖Ⴋ.7≯︒ +\u0596Ⴋ.7≯。\uFE0A; \u0596Ⴋ.7≯.; [V5, V6]; xn--hcb887c.xn--7-pgo.; ; ; # ֖Ⴋ.7≯. +\u0596Ⴋ.7>\u0338。\uFE0A; \u0596Ⴋ.7≯.; [V5, V6]; xn--hcb887c.xn--7-pgo.; ; ; # ֖Ⴋ.7≯. +\u0596ⴋ.7>\u0338。\uFE0A; \u0596ⴋ.7≯.; [V5]; xn--hcb613r.xn--7-pgo.; ; ; # ֖ⴋ.7≯. +\u0596ⴋ.7≯。\uFE0A; \u0596ⴋ.7≯.; [V5]; xn--hcb613r.xn--7-pgo.; ; ; # ֖ⴋ.7≯. +xn--hcb613r.xn--7-pgo.; \u0596ⴋ.7≯.; [V5]; xn--hcb613r.xn--7-pgo.; ; ; # ֖ⴋ.7≯. +xn--hcb887c.xn--7-pgo.; \u0596Ⴋ.7≯.; [V5, V6]; xn--hcb887c.xn--7-pgo.; ; ; # ֖Ⴋ.7≯. +\u0596ⴋ.𝟳>\u0338︒\uFE0A; \u0596ⴋ.7≯︒; [V5, V6]; xn--hcb613r.xn--7-pgoy530h; ; ; # ֖ⴋ.7≯︒ +\u0596ⴋ.𝟳≯︒\uFE0A; \u0596ⴋ.7≯︒; [V5, V6]; xn--hcb613r.xn--7-pgoy530h; ; ; # ֖ⴋ.7≯︒ +xn--hcb613r.xn--7-pgoy530h; \u0596ⴋ.7≯︒; [V5, V6]; xn--hcb613r.xn--7-pgoy530h; ; ; # ֖ⴋ.7≯︒ +xn--hcb887c.xn--7-pgoy530h; \u0596Ⴋ.7≯︒; [V5, V6]; xn--hcb887c.xn--7-pgoy530h; ; ; # ֖Ⴋ.7≯︒ +\u200DF𑓂。︒\u077E𐹢; \u200Df𑓂.︒\u077E𐹢; [B1, C2, V6]; xn--f-tgn9761i.xn--fqb1637j8hky9452a; ; xn--f-kq9i.xn--fqb1637j8hky9452a; [B1, V6] # f𑓂.︒ݾ𐹢 +\u200DF𑓂。。\u077E𐹢; \u200Df𑓂..\u077E𐹢; [B1, C2, V6]; xn--f-tgn9761i.xn--7656e.xn--fqb4175k; ; xn--f-kq9i.xn--7656e.xn--fqb4175k; [B1, V6] # f𑓂..ݾ𐹢 +\u200Df𑓂。。\u077E𐹢; \u200Df𑓂..\u077E𐹢; [B1, C2, V6]; xn--f-tgn9761i.xn--7656e.xn--fqb4175k; ; xn--f-kq9i.xn--7656e.xn--fqb4175k; [B1, V6] # f𑓂..ݾ𐹢 +xn--f-kq9i.xn--7656e.xn--fqb4175k; f𑓂..\u077E𐹢; [B1, V6]; xn--f-kq9i.xn--7656e.xn--fqb4175k; ; ; # f𑓂..ݾ𐹢 +xn--f-tgn9761i.xn--7656e.xn--fqb4175k; \u200Df𑓂..\u077E𐹢; [B1, C2, V6]; xn--f-tgn9761i.xn--7656e.xn--fqb4175k; ; ; # f𑓂..ݾ𐹢 +\u200Df𑓂。︒\u077E𐹢; \u200Df𑓂.︒\u077E𐹢; [B1, C2, V6]; xn--f-tgn9761i.xn--fqb1637j8hky9452a; ; xn--f-kq9i.xn--fqb1637j8hky9452a; [B1, V6] # f𑓂.︒ݾ𐹢 +xn--f-kq9i.xn--fqb1637j8hky9452a; f𑓂.︒\u077E𐹢; [B1, V6]; xn--f-kq9i.xn--fqb1637j8hky9452a; ; ; # f𑓂.︒ݾ𐹢 +xn--f-tgn9761i.xn--fqb1637j8hky9452a; \u200Df𑓂.︒\u077E𐹢; [B1, C2, V6]; xn--f-tgn9761i.xn--fqb1637j8hky9452a; ; ; # f𑓂.︒ݾ𐹢 +\u0845🄇𐼗︒。𐹻𑜫; \u0845🄇𐼗︒.𐹻𑜫; [B1, B3, V6]; xn--3vb4696jpxkjh7s.xn--zo0di2m; ; ; # ࡅ🄇𐼗︒.𐹻𑜫 +\u08456,𐼗。。𐹻𑜫; \u08456,𐼗..𐹻𑜫; [B1, V6, X4_2]; xn--6,-r4e4420y..xn--zo0di2m; [B1, V6, A4_2]; ; # ࡅ6,𐼗..𐹻𑜫 +xn--6,-r4e4420y..xn--zo0di2m; \u08456,𐼗..𐹻𑜫; [B1, V6, X4_2]; xn--6,-r4e4420y..xn--zo0di2m; [B1, V6, A4_2]; ; # ࡅ6,𐼗..𐹻𑜫 +xn--3vb4696jpxkjh7s.xn--zo0di2m; \u0845🄇𐼗︒.𐹻𑜫; [B1, B3, V6]; xn--3vb4696jpxkjh7s.xn--zo0di2m; ; ; # ࡅ🄇𐼗︒.𐹻𑜫 +.\u1DC0𑈱𐦭; ; [B1, V5, V6]; xn--jn0d.xn--7dg0871h3lf; ; ; # .᷀𑈱𐦭 +xn--jn0d.xn--7dg0871h3lf; .\u1DC0𑈱𐦭; [B1, V5, V6]; xn--jn0d.xn--7dg0871h3lf; ; ; # .᷀𑈱𐦭 +Ⴂ䠺。𞤃\u0693; Ⴂ䠺.𞤥\u0693; [B2, V6]; xn--9md875z.xn--pjb9818vg4xno967d; ; ; # Ⴂ䠺.𞤥ړ +ⴂ䠺。𞤥\u0693; ⴂ䠺.𞤥\u0693; [B2, V6]; xn--tkj638f.xn--pjb9818vg4xno967d; ; ; # ⴂ䠺.𞤥ړ +xn--tkj638f.xn--pjb9818vg4xno967d; ⴂ䠺.𞤥\u0693; [B2, V6]; xn--tkj638f.xn--pjb9818vg4xno967d; ; ; # ⴂ䠺.𞤥ړ +xn--9md875z.xn--pjb9818vg4xno967d; Ⴂ䠺.𞤥\u0693; [B2, V6]; xn--9md875z.xn--pjb9818vg4xno967d; ; ; # Ⴂ䠺.𞤥ړ +ⴂ䠺。𞤃\u0693; ⴂ䠺.𞤥\u0693; [B2, V6]; xn--tkj638f.xn--pjb9818vg4xno967d; ; ; # ⴂ䠺.𞤥ړ +🄇伐︒.\uA8C4; ; [V6]; xn--woqs083bel0g.xn--0f9ao925c; ; ; # 🄇伐︒.꣄ +6,伐。.\uA8C4; 6,伐..\uA8C4; [V6, X4_2]; xn--6,-7i3c..xn--0f9ao925c; [V6, A4_2]; ; # 6,伐..꣄ +xn--6,-7i3c..xn--0f9ao925c; 6,伐..\uA8C4; [V6, X4_2]; xn--6,-7i3c..xn--0f9ao925c; [V6, A4_2]; ; # 6,伐..꣄ +xn--woqs083bel0g.xn--0f9ao925c; 🄇伐︒.\uA8C4; [V6]; xn--woqs083bel0g.xn--0f9ao925c; ; ; # 🄇伐︒.꣄ +\u200D𐹠\uABED\uFFFB。\u200D𐫓Ⴚ𑂹; \u200D𐹠\uABED\uFFFB.\u200D𐫓Ⴚ𑂹; [B1, C2, V6]; xn--1ugz126coy7bdbm.xn--ynd959evs1pv6e; ; xn--429az70n29i.xn--ynd3619jqyd; [B1, B2, B3, V6] # 𐹠꯭.𐫓Ⴚ𑂹 +\u200D𐹠\uABED\uFFFB。\u200D𐫓ⴚ𑂹; \u200D𐹠\uABED\uFFFB.\u200D𐫓ⴚ𑂹; [B1, C2, V6]; xn--1ugz126coy7bdbm.xn--1ug062chv7ov6e; ; xn--429az70n29i.xn--ilj7702eqyd; [B1, B2, B3, V6] # 𐹠꯭.𐫓ⴚ𑂹 +xn--429az70n29i.xn--ilj7702eqyd; 𐹠\uABED\uFFFB.𐫓ⴚ𑂹; [B1, B2, B3, V6]; xn--429az70n29i.xn--ilj7702eqyd; ; ; # 𐹠꯭.𐫓ⴚ𑂹 +xn--1ugz126coy7bdbm.xn--1ug062chv7ov6e; \u200D𐹠\uABED\uFFFB.\u200D𐫓ⴚ𑂹; [B1, C2, V6]; xn--1ugz126coy7bdbm.xn--1ug062chv7ov6e; ; ; # 𐹠꯭.𐫓ⴚ𑂹 +xn--429az70n29i.xn--ynd3619jqyd; 𐹠\uABED\uFFFB.𐫓Ⴚ𑂹; [B1, B2, B3, V6]; xn--429az70n29i.xn--ynd3619jqyd; ; ; # 𐹠꯭.𐫓Ⴚ𑂹 +xn--1ugz126coy7bdbm.xn--ynd959evs1pv6e; \u200D𐹠\uABED\uFFFB.\u200D𐫓Ⴚ𑂹; [B1, C2, V6]; xn--1ugz126coy7bdbm.xn--ynd959evs1pv6e; ; ; # 𐹠꯭.𐫓Ⴚ𑂹 +󠆠.; .; [V6, X4_2]; .xn--rx21bhv12i; [V6, A4_2]; ; # . +󠆠.; .; [V6, X4_2]; .xn--rx21bhv12i; [V6, A4_2]; ; # . +.xn--rx21bhv12i; .; [V6, X4_2]; .xn--rx21bhv12i; [V6, A4_2]; ; # . +𐫃\u200CႦ.≠; ; [B1, B2, B3, C1, V6]; xn--end799ekr1p.xn--1ch2802p; ; xn--end1719j.xn--1ch2802p; [B1, B2, B3, V6] # 𐫃Ⴆ.≠ +𐫃\u200CႦ.=\u0338; 𐫃\u200CႦ.≠; [B1, B2, B3, C1, V6]; xn--end799ekr1p.xn--1ch2802p; ; xn--end1719j.xn--1ch2802p; [B1, B2, B3, V6] # 𐫃Ⴆ.≠ +𐫃\u200Cⴆ.=\u0338; 𐫃\u200Cⴆ.≠; [B1, B2, B3, C1, V6]; xn--0ug132csv7o.xn--1ch2802p; ; xn--xkjz802e.xn--1ch2802p; [B1, B2, B3, V6] # 𐫃ⴆ.≠ +𐫃\u200Cⴆ.≠; ; [B1, B2, B3, C1, V6]; xn--0ug132csv7o.xn--1ch2802p; ; xn--xkjz802e.xn--1ch2802p; [B1, B2, B3, V6] # 𐫃ⴆ.≠ +xn--xkjz802e.xn--1ch2802p; 𐫃ⴆ.≠; [B1, B2, B3, V6]; xn--xkjz802e.xn--1ch2802p; ; ; # 𐫃ⴆ.≠ +xn--0ug132csv7o.xn--1ch2802p; 𐫃\u200Cⴆ.≠; [B1, B2, B3, C1, V6]; xn--0ug132csv7o.xn--1ch2802p; ; ; # 𐫃ⴆ.≠ +xn--end1719j.xn--1ch2802p; 𐫃Ⴆ.≠; [B1, B2, B3, V6]; xn--end1719j.xn--1ch2802p; ; ; # 𐫃Ⴆ.≠ +xn--end799ekr1p.xn--1ch2802p; 𐫃\u200CႦ.≠; [B1, B2, B3, C1, V6]; xn--end799ekr1p.xn--1ch2802p; ; ; # 𐫃Ⴆ.≠ +𝟥ꘌ.\u0841; 3ꘌ.\u0841; [B1, V6]; xn--3-0g3es485d8i15h.xn--zvb; ; ; # 3ꘌ.ࡁ +3ꘌ.\u0841; ; [B1, V6]; xn--3-0g3es485d8i15h.xn--zvb; ; ; # 3ꘌ.ࡁ +xn--3-0g3es485d8i15h.xn--zvb; 3ꘌ.\u0841; [B1, V6]; xn--3-0g3es485d8i15h.xn--zvb; ; ; # 3ꘌ.ࡁ +-.\u1886-; ; [V3, V5, V6]; -.xn----pbkx6497q; ; ; # -.ᢆ- +-.xn----pbkx6497q; -.\u1886-; [V3, V5, V6]; -.xn----pbkx6497q; ; ; # -.ᢆ- +\u200C。\u200Cς; \u200C.\u200Cς; [B1, B6, C1, V6]; xn--0ug76062m.xn--3xa795lhn92a; ; xn--qp42f.xn--4xa3011w; [B2, B3, V6] # .ς +\u200C。\u200Cς; \u200C.\u200Cς; [B1, B6, C1, V6]; xn--0ug76062m.xn--3xa795lhn92a; ; xn--qp42f.xn--4xa3011w; [B2, B3, V6] # .ς +\u200C。\u200CΣ; \u200C.\u200Cσ; [B1, B6, C1, V6]; xn--0ug76062m.xn--4xa595lhn92a; ; xn--qp42f.xn--4xa3011w; [B2, B3, V6] # .σ +\u200C。\u200Cσ; \u200C.\u200Cσ; [B1, B6, C1, V6]; xn--0ug76062m.xn--4xa595lhn92a; ; xn--qp42f.xn--4xa3011w; [B2, B3, V6] # .σ +xn--qp42f.xn--4xa3011w; .σ; [B2, B3, V6]; xn--qp42f.xn--4xa3011w; ; ; # .σ +xn--0ug76062m.xn--4xa595lhn92a; \u200C.\u200Cσ; [B1, B6, C1, V6]; xn--0ug76062m.xn--4xa595lhn92a; ; ; # .σ +xn--0ug76062m.xn--3xa795lhn92a; \u200C.\u200Cς; [B1, B6, C1, V6]; xn--0ug76062m.xn--3xa795lhn92a; ; ; # .ς +\u200C。\u200CΣ; \u200C.\u200Cσ; [B1, B6, C1, V6]; xn--0ug76062m.xn--4xa595lhn92a; ; xn--qp42f.xn--4xa3011w; [B2, B3, V6] # .σ +\u200C。\u200Cσ; \u200C.\u200Cσ; [B1, B6, C1, V6]; xn--0ug76062m.xn--4xa595lhn92a; ; xn--qp42f.xn--4xa3011w; [B2, B3, V6] # .σ +堕𑓂\u1B02。𐮇𞤽\u200C-; 堕𑓂\u1B02.𐮇𞤽\u200C-; [B3, C1, V3]; xn--5sf345zdk8h.xn----rgnt157hwl9g; ; xn--5sf345zdk8h.xn----iv5iw606c; [B3, V3] # 堕𑓂ᬂ.𐮇𞤽- +堕𑓂\u1B02。𐮇𞤛\u200C-; 堕𑓂\u1B02.𐮇𞤽\u200C-; [B3, C1, V3]; xn--5sf345zdk8h.xn----rgnt157hwl9g; ; xn--5sf345zdk8h.xn----iv5iw606c; [B3, V3] # 堕𑓂ᬂ.𐮇𞤽- +xn--5sf345zdk8h.xn----iv5iw606c; 堕𑓂\u1B02.𐮇𞤽-; [B3, V3]; xn--5sf345zdk8h.xn----iv5iw606c; ; ; # 堕𑓂ᬂ.𐮇𞤽- +xn--5sf345zdk8h.xn----rgnt157hwl9g; 堕𑓂\u1B02.𐮇𞤽\u200C-; [B3, C1, V3]; xn--5sf345zdk8h.xn----rgnt157hwl9g; ; ; # 堕𑓂ᬂ.𐮇𞤽- +𐹶𑁆ᡕ𞤢。ᡥς\u062Aς; 𐹶𑁆ᡕ𞤢.ᡥς\u062Aς; [B1, B5]; xn--l8e1317j1ebz456b.xn--3xaa16plx4a; ; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; # 𐹶𑁆ᡕ𞤢.ᡥςتς +𐹶𑁆ᡕ𞤢。ᡥς\u062Aς; 𐹶𑁆ᡕ𞤢.ᡥς\u062Aς; [B1, B5]; xn--l8e1317j1ebz456b.xn--3xaa16plx4a; ; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; # 𐹶𑁆ᡕ𞤢.ᡥςتς +𐹶𑁆ᡕ𞤀。ᡥΣ\u062AΣ; 𐹶𑁆ᡕ𞤢.ᡥσ\u062Aσ; [B1, B5]; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ; ; # 𐹶𑁆ᡕ𞤢.ᡥσتσ +𐹶𑁆ᡕ𞤢。ᡥσ\u062Aσ; 𐹶𑁆ᡕ𞤢.ᡥσ\u062Aσ; [B1, B5]; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ; ; # 𐹶𑁆ᡕ𞤢.ᡥσتσ +xn--l8e1317j1ebz456b.xn--4xaa85plx4a; 𐹶𑁆ᡕ𞤢.ᡥσ\u062Aσ; [B1, B5]; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ; ; # 𐹶𑁆ᡕ𞤢.ᡥσتσ +xn--l8e1317j1ebz456b.xn--3xaa16plx4a; 𐹶𑁆ᡕ𞤢.ᡥς\u062Aς; [B1, B5]; xn--l8e1317j1ebz456b.xn--3xaa16plx4a; ; ; # 𐹶𑁆ᡕ𞤢.ᡥςتς +𐹶𑁆ᡕ𞤀。ᡥΣ\u062AΣ; 𐹶𑁆ᡕ𞤢.ᡥσ\u062Aσ; [B1, B5]; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ; ; # 𐹶𑁆ᡕ𞤢.ᡥσتσ +𐹶𑁆ᡕ𞤢。ᡥσ\u062Aσ; 𐹶𑁆ᡕ𞤢.ᡥσ\u062Aσ; [B1, B5]; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ; ; # 𐹶𑁆ᡕ𞤢.ᡥσتσ +𐹶𑁆ᡕ𞤢。ᡥΣ\u062AΣ; 𐹶𑁆ᡕ𞤢.ᡥσ\u062Aσ; [B1, B5]; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ; ; # 𐹶𑁆ᡕ𞤢.ᡥσتσ +𐹶𑁆ᡕ𞤢。ᡥΣ\u062Aσ; 𐹶𑁆ᡕ𞤢.ᡥσ\u062Aσ; [B1, B5]; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ; ; # 𐹶𑁆ᡕ𞤢.ᡥσتσ +𐹶𑁆ᡕ𞤢。ᡥΣ\u062Aς; 𐹶𑁆ᡕ𞤢.ᡥσ\u062Aς; [B1, B5]; xn--l8e1317j1ebz456b.xn--3xab95plx4a; ; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; # 𐹶𑁆ᡕ𞤢.ᡥσتς +𐹶𑁆ᡕ𞤢。ᡥσ\u062Aς; 𐹶𑁆ᡕ𞤢.ᡥσ\u062Aς; [B1, B5]; xn--l8e1317j1ebz456b.xn--3xab95plx4a; ; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; # 𐹶𑁆ᡕ𞤢.ᡥσتς +xn--l8e1317j1ebz456b.xn--3xab95plx4a; 𐹶𑁆ᡕ𞤢.ᡥσ\u062Aς; [B1, B5]; xn--l8e1317j1ebz456b.xn--3xab95plx4a; ; ; # 𐹶𑁆ᡕ𞤢.ᡥσتς +𐹶𑁆ᡕ𞤢。ᡥΣ\u062AΣ; 𐹶𑁆ᡕ𞤢.ᡥσ\u062Aσ; [B1, B5]; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ; ; # 𐹶𑁆ᡕ𞤢.ᡥσتσ +𐹶𑁆ᡕ𞤢。ᡥΣ\u062Aσ; 𐹶𑁆ᡕ𞤢.ᡥσ\u062Aσ; [B1, B5]; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ; ; # 𐹶𑁆ᡕ𞤢.ᡥσتσ +𐹶𑁆ᡕ𞤢。ᡥΣ\u062Aς; 𐹶𑁆ᡕ𞤢.ᡥσ\u062Aς; [B1, B5]; xn--l8e1317j1ebz456b.xn--3xab95plx4a; ; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; # 𐹶𑁆ᡕ𞤢.ᡥσتς +𐹶𑁆ᡕ𞤢。ᡥσ\u062Aς; 𐹶𑁆ᡕ𞤢.ᡥσ\u062Aς; [B1, B5]; xn--l8e1317j1ebz456b.xn--3xab95plx4a; ; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; # 𐹶𑁆ᡕ𞤢.ᡥσتς +.-𝟻ß; .-5ß; [V3, V6]; xn--t960e.xn---5-hia; ; xn--t960e.-5ss; # .-5ß +.-5ß; ; [V3, V6]; xn--t960e.xn---5-hia; ; xn--t960e.-5ss; # .-5ß +.-5SS; .-5ss; [V3, V6]; xn--t960e.-5ss; ; ; # .-5ss +.-5ss; ; [V3, V6]; xn--t960e.-5ss; ; ; # .-5ss +xn--t960e.-5ss; .-5ss; [V3, V6]; xn--t960e.-5ss; ; ; # .-5ss +xn--t960e.xn---5-hia; .-5ß; [V3, V6]; xn--t960e.xn---5-hia; ; ; # .-5ß +.-𝟻SS; .-5ss; [V3, V6]; xn--t960e.-5ss; ; ; # .-5ss +.-𝟻ss; .-5ss; [V3, V6]; xn--t960e.-5ss; ; ; # .-5ss +.-𝟻Ss; .-5ss; [V3, V6]; xn--t960e.-5ss; ; ; # .-5ss +.-5Ss; .-5ss; [V3, V6]; xn--t960e.-5ss; ; ; # .-5ss +\u200D𐨿.🤒Ⴥ; ; [C2, V6]; xn--1ug9533g.xn--9nd3211w0gz4b; ; xn--0s9c.xn--9nd3211w0gz4b; [V5, V6] # 𐨿.🤒Ⴥ +\u200D𐨿.🤒ⴥ; ; [C2, V6]; xn--1ug9533g.xn--tljz038l0gz4b; ; xn--0s9c.xn--tljz038l0gz4b; [V5, V6] # 𐨿.🤒ⴥ +xn--0s9c.xn--tljz038l0gz4b; 𐨿.🤒ⴥ; [V5, V6]; xn--0s9c.xn--tljz038l0gz4b; ; ; # 𐨿.🤒ⴥ +xn--1ug9533g.xn--tljz038l0gz4b; \u200D𐨿.🤒ⴥ; [C2, V6]; xn--1ug9533g.xn--tljz038l0gz4b; ; ; # 𐨿.🤒ⴥ +xn--0s9c.xn--9nd3211w0gz4b; 𐨿.🤒Ⴥ; [V5, V6]; xn--0s9c.xn--9nd3211w0gz4b; ; ; # 𐨿.🤒Ⴥ +xn--1ug9533g.xn--9nd3211w0gz4b; \u200D𐨿.🤒Ⴥ; [C2, V6]; xn--1ug9533g.xn--9nd3211w0gz4b; ; ; # 𐨿.🤒Ⴥ +。ß𬵩\u200D; .ß𬵩\u200D; [C2, V6]; xn--ey1p.xn--zca870nz438b; ; xn--ey1p.xn--ss-eq36b; [V6] # .ß𬵩 +。SS𬵩\u200D; .ss𬵩\u200D; [C2, V6]; xn--ey1p.xn--ss-n1tx0508a; ; xn--ey1p.xn--ss-eq36b; [V6] # .ss𬵩 +。ss𬵩\u200D; .ss𬵩\u200D; [C2, V6]; xn--ey1p.xn--ss-n1tx0508a; ; xn--ey1p.xn--ss-eq36b; [V6] # .ss𬵩 +。Ss𬵩\u200D; .ss𬵩\u200D; [C2, V6]; xn--ey1p.xn--ss-n1tx0508a; ; xn--ey1p.xn--ss-eq36b; [V6] # .ss𬵩 +xn--ey1p.xn--ss-eq36b; .ss𬵩; [V6]; xn--ey1p.xn--ss-eq36b; ; ; # .ss𬵩 +xn--ey1p.xn--ss-n1tx0508a; .ss𬵩\u200D; [C2, V6]; xn--ey1p.xn--ss-n1tx0508a; ; ; # .ss𬵩 +xn--ey1p.xn--zca870nz438b; .ß𬵩\u200D; [C2, V6]; xn--ey1p.xn--zca870nz438b; ; ; # .ß𬵩 +\u200C𭉝。\u07F1\u0301𞹻; \u200C𭉝.\u07F1\u0301\u063A; [B1, C1, V5]; xn--0ugy003y.xn--lsa46nuub; ; xn--634m.xn--lsa46nuub; [B1, V5] # 𭉝.߱́غ +\u200C𭉝。\u07F1\u0301\u063A; \u200C𭉝.\u07F1\u0301\u063A; [B1, C1, V5]; xn--0ugy003y.xn--lsa46nuub; ; xn--634m.xn--lsa46nuub; [B1, V5] # 𭉝.߱́غ +xn--634m.xn--lsa46nuub; 𭉝.\u07F1\u0301\u063A; [B1, V5]; xn--634m.xn--lsa46nuub; ; ; # 𭉝.߱́غ +xn--0ugy003y.xn--lsa46nuub; \u200C𭉝.\u07F1\u0301\u063A; [B1, C1, V5]; xn--0ugy003y.xn--lsa46nuub; ; ; # 𭉝.߱́غ +\u200C𑈶。𐹡; \u200C𑈶.𐹡; [B1, B3, C1, V6]; xn--0ug7946gzpxf.xn--8n0d; ; xn--9g1d1288a.xn--8n0d; [B1, V6] # 𑈶.𐹡 +xn--9g1d1288a.xn--8n0d; 𑈶.𐹡; [B1, V6]; xn--9g1d1288a.xn--8n0d; ; ; # 𑈶.𐹡 +xn--0ug7946gzpxf.xn--8n0d; \u200C𑈶.𐹡; [B1, B3, C1, V6]; xn--0ug7946gzpxf.xn--8n0d; ; ; # 𑈶.𐹡 +󠅯\u200C🜭。𑖿\u1ABBς≠; \u200C🜭.𑖿\u1ABBς≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--3xa578i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [V5, V6] # 🜭.𑖿᪻ς≠ +󠅯\u200C🜭。𑖿\u1ABBς=\u0338; \u200C🜭.𑖿\u1ABBς≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--3xa578i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [V5, V6] # 🜭.𑖿᪻ς≠ +󠅯\u200C🜭。𑖿\u1ABBς≠; \u200C🜭.𑖿\u1ABBς≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--3xa578i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [V5, V6] # 🜭.𑖿᪻ς≠ +󠅯\u200C🜭。𑖿\u1ABBς=\u0338; \u200C🜭.𑖿\u1ABBς≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--3xa578i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [V5, V6] # 🜭.𑖿᪻ς≠ +󠅯\u200C🜭。𑖿\u1ABBΣ=\u0338; \u200C🜭.𑖿\u1ABBσ≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [V5, V6] # 🜭.𑖿᪻σ≠ +󠅯\u200C🜭。𑖿\u1ABBΣ≠; \u200C🜭.𑖿\u1ABBσ≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [V5, V6] # 🜭.𑖿᪻σ≠ +󠅯\u200C🜭。𑖿\u1ABBσ≠; \u200C🜭.𑖿\u1ABBσ≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [V5, V6] # 🜭.𑖿᪻σ≠ +󠅯\u200C🜭。𑖿\u1ABBσ=\u0338; \u200C🜭.𑖿\u1ABBσ≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [V5, V6] # 🜭.𑖿᪻σ≠ +xn--zb9h5968x.xn--4xa378i1mfjw7y; 🜭.𑖿\u1ABBσ≠; [V5, V6]; xn--zb9h5968x.xn--4xa378i1mfjw7y; ; ; # 🜭.𑖿᪻σ≠ +xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; \u200C🜭.𑖿\u1ABBσ≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; ; ; # 🜭.𑖿᪻σ≠ +xn--0ug3766p5nm1b.xn--3xa578i1mfjw7y; \u200C🜭.𑖿\u1ABBς≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--3xa578i1mfjw7y; ; ; # 🜭.𑖿᪻ς≠ +󠅯\u200C🜭。𑖿\u1ABBΣ=\u0338; \u200C🜭.𑖿\u1ABBσ≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [V5, V6] # 🜭.𑖿᪻σ≠ +󠅯\u200C🜭。𑖿\u1ABBΣ≠; \u200C🜭.𑖿\u1ABBσ≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [V5, V6] # 🜭.𑖿᪻σ≠ +󠅯\u200C🜭。𑖿\u1ABBσ≠; \u200C🜭.𑖿\u1ABBσ≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [V5, V6] # 🜭.𑖿᪻σ≠ +󠅯\u200C🜭。𑖿\u1ABBσ=\u0338; \u200C🜭.𑖿\u1ABBσ≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [V5, V6] # 🜭.𑖿᪻σ≠ +⒋。⒈\u200D; ⒋.⒈\u200D; [C2, V6]; xn--wsh.xn--1ug58o74922a; ; xn--wsh.xn--tsh07994h; [V6] # ⒋.⒈ +4.。1.\u200D; 4..1.\u200D; [C2, V6, X4_2]; 4..1.xn--1ug64613i; [C2, V6, A4_2]; 4..1.xn--sf51d; [V6, A4_2] # 4..1. +4..1.xn--sf51d; 4..1.; [V6, X4_2]; 4..1.xn--sf51d; [V6, A4_2]; ; # 4..1. +4..1.xn--1ug64613i; 4..1.\u200D; [C2, V6, X4_2]; 4..1.xn--1ug64613i; [C2, V6, A4_2]; ; # 4..1. +xn--wsh.xn--tsh07994h; ⒋.⒈; [V6]; xn--wsh.xn--tsh07994h; ; ; # ⒋.⒈ +xn--wsh.xn--1ug58o74922a; ⒋.⒈\u200D; [C2, V6]; xn--wsh.xn--1ug58o74922a; ; ; # ⒋.⒈ +\u0644ß。𐇽\u1A60𞤾; \u0644ß.\u1A60𐇽𞤾; [B1, B2, B3, V5, V6]; xn--zca57y.xn--jof2298hn83fln78f; ; xn--ss-svd.xn--jof2298hn83fln78f; # لß.᩠𐇽𞤾 +\u0644ß。\u1A60𐇽𞤾; \u0644ß.\u1A60𐇽𞤾; [B1, B2, B3, V5, V6]; xn--zca57y.xn--jof2298hn83fln78f; ; xn--ss-svd.xn--jof2298hn83fln78f; # لß.᩠𐇽𞤾 +\u0644ß。\u1A60𐇽𞤾; \u0644ß.\u1A60𐇽𞤾; [B1, B2, B3, V5, V6]; xn--zca57y.xn--jof2298hn83fln78f; ; xn--ss-svd.xn--jof2298hn83fln78f; # لß.᩠𐇽𞤾 +\u0644SS。\u1A60𐇽𞤜; \u0644ss.\u1A60𐇽𞤾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # لss.᩠𐇽𞤾 +\u0644ss。\u1A60𐇽𞤾; \u0644ss.\u1A60𐇽𞤾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # لss.᩠𐇽𞤾 +\u0644ss。\u1A60𐇽𞤜; \u0644ss.\u1A60𐇽𞤾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # لss.᩠𐇽𞤾 +xn--ss-svd.xn--jof2298hn83fln78f; \u0644ss.\u1A60𐇽𞤾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # لss.᩠𐇽𞤾 +\u0644ß。\u1A60𐇽𞤜; \u0644ß.\u1A60𐇽𞤾; [B1, B2, B3, V5, V6]; xn--zca57y.xn--jof2298hn83fln78f; ; xn--ss-svd.xn--jof2298hn83fln78f; # لß.᩠𐇽𞤾 +xn--zca57y.xn--jof2298hn83fln78f; \u0644ß.\u1A60𐇽𞤾; [B1, B2, B3, V5, V6]; xn--zca57y.xn--jof2298hn83fln78f; ; ; # لß.᩠𐇽𞤾 +\u0644SS。\u1A60𐇽𞤜; \u0644ss.\u1A60𐇽𞤾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # لss.᩠𐇽𞤾 +\u0644ss。\u1A60𐇽𞤾; \u0644ss.\u1A60𐇽𞤾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # لss.᩠𐇽𞤾 +\u0644ss。\u1A60𐇽𞤜; \u0644ss.\u1A60𐇽𞤾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # لss.᩠𐇽𞤾 +\u0644ß。\u1A60𐇽𞤜; \u0644ß.\u1A60𐇽𞤾; [B1, B2, B3, V5, V6]; xn--zca57y.xn--jof2298hn83fln78f; ; xn--ss-svd.xn--jof2298hn83fln78f; # لß.᩠𐇽𞤾 +\u0644SS。𐇽\u1A60𞤜; \u0644ss.\u1A60𐇽𞤾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # لss.᩠𐇽𞤾 +\u0644ss。𐇽\u1A60𞤾; \u0644ss.\u1A60𐇽𞤾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # لss.᩠𐇽𞤾 +\u0644ss。𐇽\u1A60𞤜; \u0644ss.\u1A60𐇽𞤾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # لss.᩠𐇽𞤾 +\u0644ß。𐇽\u1A60𞤜; \u0644ß.\u1A60𐇽𞤾; [B1, B2, B3, V5, V6]; xn--zca57y.xn--jof2298hn83fln78f; ; xn--ss-svd.xn--jof2298hn83fln78f; # لß.᩠𐇽𞤾 +\u0644SS。\u1A60𐇽𞤾; \u0644ss.\u1A60𐇽𞤾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # لss.᩠𐇽𞤾 +\u0644Ss。\u1A60𐇽𞤾; \u0644ss.\u1A60𐇽𞤾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # لss.᩠𐇽𞤾 +\u0644SS。\u1A60𐇽𞤾; \u0644ss.\u1A60𐇽𞤾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # لss.᩠𐇽𞤾 +\u0644Ss。\u1A60𐇽𞤾; \u0644ss.\u1A60𐇽𞤾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # لss.᩠𐇽𞤾 +\u0644SS。𐇽\u1A60𞤾; \u0644ss.\u1A60𐇽𞤾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # لss.᩠𐇽𞤾 +\u0644Ss。𐇽\u1A60𞤾; \u0644ss.\u1A60𐇽𞤾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # لss.᩠𐇽𞤾 +𐹽𑄳.\u1DDF\u17B8\uA806𑜫; ; [B1, V5, V6]; xn--1o0di0c0652w.xn--33e362arr1l153d; ; ; # 𐹽𑄳.ᷟី꠆𑜫 +xn--1o0di0c0652w.xn--33e362arr1l153d; 𐹽𑄳.\u1DDF\u17B8\uA806𑜫; [B1, V5, V6]; xn--1o0di0c0652w.xn--33e362arr1l153d; ; ; # 𐹽𑄳.ᷟី꠆𑜫 +Ⴓ𑜫\u200D.\u06A7𑰶; Ⴓ𑜫\u200D.\u06A7𑰶; [V6]; xn--rnd479ep20q7x12e.xn--9jb4223l; ; xn--rnd8945ky009c.xn--9jb4223l; # Ⴓ𑜫.ڧ𑰶 +Ⴓ𑜫\u200D.\u06A7𑰶; ; [V6]; xn--rnd479ep20q7x12e.xn--9jb4223l; ; xn--rnd8945ky009c.xn--9jb4223l; # Ⴓ𑜫.ڧ𑰶 +ⴓ𑜫\u200D.\u06A7𑰶; ; [V6]; xn--1ugy52cym7p7xu5e.xn--9jb4223l; ; xn--blj6306ey091d.xn--9jb4223l; # ⴓ𑜫.ڧ𑰶 +xn--blj6306ey091d.xn--9jb4223l; ⴓ𑜫.\u06A7𑰶; [V6]; xn--blj6306ey091d.xn--9jb4223l; ; ; # ⴓ𑜫.ڧ𑰶 +xn--1ugy52cym7p7xu5e.xn--9jb4223l; ⴓ𑜫\u200D.\u06A7𑰶; [V6]; xn--1ugy52cym7p7xu5e.xn--9jb4223l; ; ; # ⴓ𑜫.ڧ𑰶 +xn--rnd8945ky009c.xn--9jb4223l; Ⴓ𑜫.\u06A7𑰶; [V6]; xn--rnd8945ky009c.xn--9jb4223l; ; ; # Ⴓ𑜫.ڧ𑰶 +xn--rnd479ep20q7x12e.xn--9jb4223l; Ⴓ𑜫\u200D.\u06A7𑰶; [V6]; xn--rnd479ep20q7x12e.xn--9jb4223l; ; ; # Ⴓ𑜫.ڧ𑰶 +ⴓ𑜫\u200D.\u06A7𑰶; ⴓ𑜫\u200D.\u06A7𑰶; [V6]; xn--1ugy52cym7p7xu5e.xn--9jb4223l; ; xn--blj6306ey091d.xn--9jb4223l; # ⴓ𑜫.ڧ𑰶 +𐨿.🄆—; ; [V5, V6]; xn--0s9c.xn--8ug8324p; ; ; # 𐨿.🄆— +𐨿.5,—; ; [V5, V6]; xn--0s9c.xn--5,-81t; ; ; # 𐨿.5,— +xn--0s9c.xn--5,-81t; 𐨿.5,—; [V5, V6]; xn--0s9c.xn--5,-81t; ; ; # 𐨿.5,— +xn--0s9c.xn--8ug8324p; 𐨿.🄆—; [V5, V6]; xn--0s9c.xn--8ug8324p; ; ; # 𐨿.🄆— +۸。-; ۸.-; [V3, V6]; xn--lmb18944c0g2z.xn----2k81m; ; ; # ۸.- +xn--lmb18944c0g2z.xn----2k81m; ۸.-; [V3, V6]; xn--lmb18944c0g2z.xn----2k81m; ; ; # ۸.- +\u07CD𐹮。\u06DDᡎᠴ; \u07CD𐹮.\u06DDᡎᠴ; [B1, B5, B6, V6]; xn--osb0855kcc2r.xn--tlb299fhc; ; ; # ߍ𐹮.ᡎᠴ +xn--osb0855kcc2r.xn--tlb299fhc; \u07CD𐹮.\u06DDᡎᠴ; [B1, B5, B6, V6]; xn--osb0855kcc2r.xn--tlb299fhc; ; ; # ߍ𐹮.ᡎᠴ +\u200DᠮႾ🄂.🚗\u0841\u200C; ; [B1, C1, C2, V6]; xn--2nd129ay2gnw71c.xn--zvb692j9664aic1g; ; xn--2nd129ai554b.xn--zvb3124wpkpf; [B1, V6] # ᠮႾ🄂.🚗ࡁ +\u200DᠮႾ1,.🚗\u0841\u200C; ; [B1, C1, C2, V6]; xn--1,-ogkx89c39j.xn--zvb692j9664aic1g; ; xn--1,-ogkx89c.xn--zvb3124wpkpf; [B1, B6, V6] # ᠮႾ1,.🚗ࡁ +\u200Dᠮⴞ1,.🚗\u0841\u200C; ; [B1, C1, C2, V6]; xn--1,-v3o161c53q.xn--zvb692j9664aic1g; ; xn--1,-v3o625k.xn--zvb3124wpkpf; [B1, B6, V6] # ᠮⴞ1,.🚗ࡁ +xn--1,-v3o625k.xn--zvb3124wpkpf; ᠮⴞ1,.🚗\u0841; [B1, B6, V6]; xn--1,-v3o625k.xn--zvb3124wpkpf; ; ; # ᠮⴞ1,.🚗ࡁ +xn--1,-v3o161c53q.xn--zvb692j9664aic1g; \u200Dᠮⴞ1,.🚗\u0841\u200C; [B1, C1, C2, V6]; xn--1,-v3o161c53q.xn--zvb692j9664aic1g; ; ; # ᠮⴞ1,.🚗ࡁ +xn--1,-ogkx89c.xn--zvb3124wpkpf; ᠮႾ1,.🚗\u0841; [B1, B6, V6]; xn--1,-ogkx89c.xn--zvb3124wpkpf; ; ; # ᠮႾ1,.🚗ࡁ +xn--1,-ogkx89c39j.xn--zvb692j9664aic1g; \u200DᠮႾ1,.🚗\u0841\u200C; [B1, C1, C2, V6]; xn--1,-ogkx89c39j.xn--zvb692j9664aic1g; ; ; # ᠮႾ1,.🚗ࡁ +\u200Dᠮⴞ🄂.🚗\u0841\u200C; ; [B1, C1, C2, V6]; xn--h7e341b0wlbv45b.xn--zvb692j9664aic1g; ; xn--h7e438h1p44a.xn--zvb3124wpkpf; [B1, V6] # ᠮⴞ🄂.🚗ࡁ +xn--h7e438h1p44a.xn--zvb3124wpkpf; ᠮⴞ🄂.🚗\u0841; [B1, V6]; xn--h7e438h1p44a.xn--zvb3124wpkpf; ; ; # ᠮⴞ🄂.🚗ࡁ +xn--h7e341b0wlbv45b.xn--zvb692j9664aic1g; \u200Dᠮⴞ🄂.🚗\u0841\u200C; [B1, C1, C2, V6]; xn--h7e341b0wlbv45b.xn--zvb692j9664aic1g; ; ; # ᠮⴞ🄂.🚗ࡁ +xn--2nd129ai554b.xn--zvb3124wpkpf; ᠮႾ🄂.🚗\u0841; [B1, V6]; xn--2nd129ai554b.xn--zvb3124wpkpf; ; ; # ᠮႾ🄂.🚗ࡁ +xn--2nd129ay2gnw71c.xn--zvb692j9664aic1g; \u200DᠮႾ🄂.🚗\u0841\u200C; [B1, C1, C2, V6]; xn--2nd129ay2gnw71c.xn--zvb692j9664aic1g; ; ; # ᠮႾ🄂.🚗ࡁ +\u0601\u0697.𑚶⾆; \u0601\u0697.𑚶舌; [B1, V5, V6]; xn--jfb41a.xn--tc1ap851axo39c; ; ; # ڗ.𑚶舌 +\u0601\u0697.𑚶舌; ; [B1, V5, V6]; xn--jfb41a.xn--tc1ap851axo39c; ; ; # ڗ.𑚶舌 +xn--jfb41a.xn--tc1ap851axo39c; \u0601\u0697.𑚶舌; [B1, V5, V6]; xn--jfb41a.xn--tc1ap851axo39c; ; ; # ڗ.𑚶舌 +🞅.; ; [V6]; xn--ie9hi1349bqdlb.xn--oj69a; ; ; # 🞅. +xn--ie9hi1349bqdlb.xn--oj69a; 🞅.; [V6]; xn--ie9hi1349bqdlb.xn--oj69a; ; ; # 🞅. +\u20E7-.4Ⴄ\u200C; ; [C1, V5, V6]; xn----9snu5320fi76w.xn--4-f0g649i; ; xn----9snu5320fi76w.xn--4-f0g; [V5, V6] # ⃧-.4Ⴄ +\u20E7-.4ⴄ\u200C; ; [C1, V5, V6]; xn----9snu5320fi76w.xn--4-sgn589c; ; xn----9snu5320fi76w.xn--4-ivs; [V5, V6] # ⃧-.4ⴄ +xn----9snu5320fi76w.xn--4-ivs; \u20E7-.4ⴄ; [V5, V6]; xn----9snu5320fi76w.xn--4-ivs; ; ; # ⃧-.4ⴄ +xn----9snu5320fi76w.xn--4-sgn589c; \u20E7-.4ⴄ\u200C; [C1, V5, V6]; xn----9snu5320fi76w.xn--4-sgn589c; ; ; # ⃧-.4ⴄ +xn----9snu5320fi76w.xn--4-f0g; \u20E7-.4Ⴄ; [V5, V6]; xn----9snu5320fi76w.xn--4-f0g; ; ; # ⃧-.4Ⴄ +xn----9snu5320fi76w.xn--4-f0g649i; \u20E7-.4Ⴄ\u200C; [C1, V5, V6]; xn----9snu5320fi76w.xn--4-f0g649i; ; ; # ⃧-.4Ⴄ +ᚭ。𝌠ß𖫱; ᚭ.𝌠ß𖫱; ; xn--hwe.xn--zca4946pblnc; ; xn--hwe.xn--ss-ci1ub261a; # ᚭ.𝌠ß𖫱 +ᚭ。𝌠ß𖫱; ᚭ.𝌠ß𖫱; ; xn--hwe.xn--zca4946pblnc; ; xn--hwe.xn--ss-ci1ub261a; # ᚭ.𝌠ß𖫱 +ᚭ。𝌠SS𖫱; ᚭ.𝌠ss𖫱; ; xn--hwe.xn--ss-ci1ub261a; ; ; # ᚭ.𝌠ss𖫱 +ᚭ。𝌠ss𖫱; ᚭ.𝌠ss𖫱; ; xn--hwe.xn--ss-ci1ub261a; ; ; # ᚭ.𝌠ss𖫱 +ᚭ。𝌠Ss𖫱; ᚭ.𝌠ss𖫱; ; xn--hwe.xn--ss-ci1ub261a; ; ; # ᚭ.𝌠ss𖫱 +xn--hwe.xn--ss-ci1ub261a; ᚭ.𝌠ss𖫱; ; xn--hwe.xn--ss-ci1ub261a; ; ; # ᚭ.𝌠ss𖫱 +ᚭ.𝌠ss𖫱; ; ; xn--hwe.xn--ss-ci1ub261a; ; ; # ᚭ.𝌠ss𖫱 +ᚭ.𝌠SS𖫱; ᚭ.𝌠ss𖫱; ; xn--hwe.xn--ss-ci1ub261a; ; ; # ᚭ.𝌠ss𖫱 +ᚭ.𝌠Ss𖫱; ᚭ.𝌠ss𖫱; ; xn--hwe.xn--ss-ci1ub261a; ; ; # ᚭ.𝌠ss𖫱 +xn--hwe.xn--zca4946pblnc; ᚭ.𝌠ß𖫱; ; xn--hwe.xn--zca4946pblnc; ; ; # ᚭ.𝌠ß𖫱 +ᚭ.𝌠ß𖫱; ; ; xn--hwe.xn--zca4946pblnc; ; xn--hwe.xn--ss-ci1ub261a; # ᚭ.𝌠ß𖫱 +ᚭ。𝌠SS𖫱; ᚭ.𝌠ss𖫱; ; xn--hwe.xn--ss-ci1ub261a; ; ; # ᚭ.𝌠ss𖫱 +ᚭ。𝌠ss𖫱; ᚭ.𝌠ss𖫱; ; xn--hwe.xn--ss-ci1ub261a; ; ; # ᚭ.𝌠ss𖫱 +ᚭ。𝌠Ss𖫱; ᚭ.𝌠ss𖫱; ; xn--hwe.xn--ss-ci1ub261a; ; ; # ᚭ.𝌠ss𖫱 +₁。𞤫ꡪ; 1.𞤫ꡪ; [B1, B2, B3]; 1.xn--gd9al691d; ; ; # 1.𞤫ꡪ +1。𞤫ꡪ; 1.𞤫ꡪ; [B1, B2, B3]; 1.xn--gd9al691d; ; ; # 1.𞤫ꡪ +1。𞤉ꡪ; 1.𞤫ꡪ; [B1, B2, B3]; 1.xn--gd9al691d; ; ; # 1.𞤫ꡪ +1.xn--gd9al691d; 1.𞤫ꡪ; [B1, B2, B3]; 1.xn--gd9al691d; ; ; # 1.𞤫ꡪ +₁。𞤉ꡪ; 1.𞤫ꡪ; [B1, B2, B3]; 1.xn--gd9al691d; ; ; # 1.𞤫ꡪ +\u200C.; ; [B2, B3, B6, C1, V6]; xn--0ug27500a.xn--2b7hs861pl540a; ; xn--kg4n.xn--2b7hs861pl540a; [B2, B3, V6] # . +xn--kg4n.xn--2b7hs861pl540a; .; [B2, B3, V6]; xn--kg4n.xn--2b7hs861pl540a; ; ; # . +xn--0ug27500a.xn--2b7hs861pl540a; \u200C.; [B2, B3, B6, C1, V6]; xn--0ug27500a.xn--2b7hs861pl540a; ; ; # . +𑑄≯。𑜤; 𑑄≯.𑜤; [V5]; xn--hdh5636g.xn--ci2d; ; ; # 𑑄≯.𑜤 +𑑄>\u0338。𑜤; 𑑄≯.𑜤; [V5]; xn--hdh5636g.xn--ci2d; ; ; # 𑑄≯.𑜤 +𑑄≯。𑜤; 𑑄≯.𑜤; [V5]; xn--hdh5636g.xn--ci2d; ; ; # 𑑄≯.𑜤 +𑑄>\u0338。𑜤; 𑑄≯.𑜤; [V5]; xn--hdh5636g.xn--ci2d; ; ; # 𑑄≯.𑜤 +xn--hdh5636g.xn--ci2d; 𑑄≯.𑜤; [V5]; xn--hdh5636g.xn--ci2d; ; ; # 𑑄≯.𑜤 +Ⴋ≮𱲆。\u200D\u07A7𐋣; Ⴋ≮𱲆.\u200D\u07A7𐋣; [C2, V6]; xn--jnd802gsm17c.xn--lrb506jqr4n; ; xn--jnd802gsm17c.xn--lrb6479j; [V5, V6] # Ⴋ≮𱲆.ާ𐋣 +Ⴋ<\u0338𱲆。\u200D\u07A7𐋣; Ⴋ≮𱲆.\u200D\u07A7𐋣; [C2, V6]; xn--jnd802gsm17c.xn--lrb506jqr4n; ; xn--jnd802gsm17c.xn--lrb6479j; [V5, V6] # Ⴋ≮𱲆.ާ𐋣 +ⴋ<\u0338𱲆。\u200D\u07A7𐋣; ⴋ≮𱲆.\u200D\u07A7𐋣; [C2]; xn--gdhz03bxt42d.xn--lrb506jqr4n; ; xn--gdhz03bxt42d.xn--lrb6479j; [V5] # ⴋ≮𱲆.ާ𐋣 +ⴋ≮𱲆。\u200D\u07A7𐋣; ⴋ≮𱲆.\u200D\u07A7𐋣; [C2]; xn--gdhz03bxt42d.xn--lrb506jqr4n; ; xn--gdhz03bxt42d.xn--lrb6479j; [V5] # ⴋ≮𱲆.ާ𐋣 +xn--gdhz03bxt42d.xn--lrb6479j; ⴋ≮𱲆.\u07A7𐋣; [V5]; xn--gdhz03bxt42d.xn--lrb6479j; ; ; # ⴋ≮𱲆.ާ𐋣 +xn--gdhz03bxt42d.xn--lrb506jqr4n; ⴋ≮𱲆.\u200D\u07A7𐋣; [C2]; xn--gdhz03bxt42d.xn--lrb506jqr4n; ; ; # ⴋ≮𱲆.ާ𐋣 +xn--jnd802gsm17c.xn--lrb6479j; Ⴋ≮𱲆.\u07A7𐋣; [V5, V6]; xn--jnd802gsm17c.xn--lrb6479j; ; ; # Ⴋ≮𱲆.ާ𐋣 +xn--jnd802gsm17c.xn--lrb506jqr4n; Ⴋ≮𱲆.\u200D\u07A7𐋣; [C2, V6]; xn--jnd802gsm17c.xn--lrb506jqr4n; ; ; # Ⴋ≮𱲆.ާ𐋣 +\u17D2.≯; ; [V5, V6]; xn--u4e.xn--hdhx0084f; ; ; # ្.≯ +\u17D2.>\u0338; \u17D2.≯; [V5, V6]; xn--u4e.xn--hdhx0084f; ; ; # ្.≯ +xn--u4e.xn--hdhx0084f; \u17D2.≯; [V5, V6]; xn--u4e.xn--hdhx0084f; ; ; # ្.≯ +\u1734.𐨺É⬓𑄴; \u1734.𐨺é⬓𑄴; [V5, V6]; xn--c0e34564d.xn--9ca207st53lg3f; ; ; # ᜴.𐨺é⬓𑄴 +\u1734.𐨺E\u0301⬓𑄴; \u1734.𐨺é⬓𑄴; [V5, V6]; xn--c0e34564d.xn--9ca207st53lg3f; ; ; # ᜴.𐨺é⬓𑄴 +\u1734.𐨺É⬓𑄴; \u1734.𐨺é⬓𑄴; [V5, V6]; xn--c0e34564d.xn--9ca207st53lg3f; ; ; # ᜴.𐨺é⬓𑄴 +\u1734.𐨺E\u0301⬓𑄴; \u1734.𐨺é⬓𑄴; [V5, V6]; xn--c0e34564d.xn--9ca207st53lg3f; ; ; # ᜴.𐨺é⬓𑄴 +\u1734.𐨺e\u0301⬓𑄴; \u1734.𐨺é⬓𑄴; [V5, V6]; xn--c0e34564d.xn--9ca207st53lg3f; ; ; # ᜴.𐨺é⬓𑄴 +\u1734.𐨺é⬓𑄴; ; [V5, V6]; xn--c0e34564d.xn--9ca207st53lg3f; ; ; # ᜴.𐨺é⬓𑄴 +xn--c0e34564d.xn--9ca207st53lg3f; \u1734.𐨺é⬓𑄴; [V5, V6]; xn--c0e34564d.xn--9ca207st53lg3f; ; ; # ᜴.𐨺é⬓𑄴 +\u1734.𐨺e\u0301⬓𑄴; \u1734.𐨺é⬓𑄴; [V5, V6]; xn--c0e34564d.xn--9ca207st53lg3f; ; ; # ᜴.𐨺é⬓𑄴 +\u1734.𐨺é⬓𑄴; \u1734.𐨺é⬓𑄴; [V5, V6]; xn--c0e34564d.xn--9ca207st53lg3f; ; ; # ᜴.𐨺é⬓𑄴 +ᢇ\u200D\uA8C4。︒𞤺; ᢇ\u200D\uA8C4.︒𞤺; [B1, B6, C2, V6]; xn--09e669a6x8j.xn--y86cv562b; ; xn--09e4694e.xn--y86cv562b; [B1, V6] # ᢇ꣄.︒𞤺 +ᢇ\u200D\uA8C4。。𞤺; ᢇ\u200D\uA8C4..𞤺; [B6, C2, X4_2]; xn--09e669a6x8j..xn--ye6h; [B6, C2, A4_2]; xn--09e4694e..xn--ye6h; [A4_2] # ᢇ꣄..𞤺 +ᢇ\u200D\uA8C4。。𞤘; ᢇ\u200D\uA8C4..𞤺; [B6, C2, X4_2]; xn--09e669a6x8j..xn--ye6h; [B6, C2, A4_2]; xn--09e4694e..xn--ye6h; [A4_2] # ᢇ꣄..𞤺 +xn--09e4694e..xn--ye6h; ᢇ\uA8C4..𞤺; [X4_2]; xn--09e4694e..xn--ye6h; [A4_2]; ; # ᢇ꣄..𞤺 +xn--09e669a6x8j..xn--ye6h; ᢇ\u200D\uA8C4..𞤺; [B6, C2, X4_2]; xn--09e669a6x8j..xn--ye6h; [B6, C2, A4_2]; ; # ᢇ꣄..𞤺 +ᢇ\u200D\uA8C4。︒𞤘; ᢇ\u200D\uA8C4.︒𞤺; [B1, B6, C2, V6]; xn--09e669a6x8j.xn--y86cv562b; ; xn--09e4694e.xn--y86cv562b; [B1, V6] # ᢇ꣄.︒𞤺 +xn--09e4694e.xn--y86cv562b; ᢇ\uA8C4.︒𞤺; [B1, V6]; xn--09e4694e.xn--y86cv562b; ; ; # ᢇ꣄.︒𞤺 +xn--09e669a6x8j.xn--y86cv562b; ᢇ\u200D\uA8C4.︒𞤺; [B1, B6, C2, V6]; xn--09e669a6x8j.xn--y86cv562b; ; ; # ᢇ꣄.︒𞤺 +\u1714\u200C。\u0631\u07AA≮; \u1714\u200C.\u0631\u07AA≮; [B2, B3, V6]; xn--fze607b9651bjwl7c.xn--wgb86el10d; ; xn--fze3930v7hz6b.xn--wgb86el10d; # ᜔.رު≮ +\u1714\u200C。\u0631\u07AA<\u0338; \u1714\u200C.\u0631\u07AA≮; [B2, B3, V6]; xn--fze607b9651bjwl7c.xn--wgb86el10d; ; xn--fze3930v7hz6b.xn--wgb86el10d; # ᜔.رު≮ +\u1714\u200C。\u0631\u07AA≮; \u1714\u200C.\u0631\u07AA≮; [B2, B3, V6]; xn--fze607b9651bjwl7c.xn--wgb86el10d; ; xn--fze3930v7hz6b.xn--wgb86el10d; # ᜔.رު≮ +\u1714\u200C。\u0631\u07AA<\u0338; \u1714\u200C.\u0631\u07AA≮; [B2, B3, V6]; xn--fze607b9651bjwl7c.xn--wgb86el10d; ; xn--fze3930v7hz6b.xn--wgb86el10d; # ᜔.رު≮ +xn--fze3930v7hz6b.xn--wgb86el10d; \u1714.\u0631\u07AA≮; [B2, B3, V6]; xn--fze3930v7hz6b.xn--wgb86el10d; ; ; # ᜔.رު≮ +xn--fze607b9651bjwl7c.xn--wgb86el10d; \u1714\u200C.\u0631\u07AA≮; [B2, B3, V6]; xn--fze607b9651bjwl7c.xn--wgb86el10d; ; ; # ᜔.رު≮ +Ⴣ.\u0653ᢤ; Ⴣ.\u0653ᢤ; [V5, V6]; xn--7nd.xn--vhb294g; ; ; # Ⴣ.ٓᢤ +Ⴣ.\u0653ᢤ; ; [V5, V6]; xn--7nd.xn--vhb294g; ; ; # Ⴣ.ٓᢤ +ⴣ.\u0653ᢤ; ; [V5]; xn--rlj.xn--vhb294g; ; ; # ⴣ.ٓᢤ +xn--rlj.xn--vhb294g; ⴣ.\u0653ᢤ; [V5]; xn--rlj.xn--vhb294g; ; ; # ⴣ.ٓᢤ +xn--7nd.xn--vhb294g; Ⴣ.\u0653ᢤ; [V5, V6]; xn--7nd.xn--vhb294g; ; ; # Ⴣ.ٓᢤ +ⴣ.\u0653ᢤ; ⴣ.\u0653ᢤ; [V5]; xn--rlj.xn--vhb294g; ; ; # ⴣ.ٓᢤ +󠄈\u0813.싉Ⴤ; \u0813.싉Ⴤ; [V6]; xn--oub.xn--8nd9522gpe69cviva; ; ; # ࠓ.싉Ⴤ +󠄈\u0813.싉Ⴤ; \u0813.싉Ⴤ; [V6]; xn--oub.xn--8nd9522gpe69cviva; ; ; # ࠓ.싉Ⴤ +󠄈\u0813.싉Ⴤ; \u0813.싉Ⴤ; [V6]; xn--oub.xn--8nd9522gpe69cviva; ; ; # ࠓ.싉Ⴤ +󠄈\u0813.싉Ⴤ; \u0813.싉Ⴤ; [V6]; xn--oub.xn--8nd9522gpe69cviva; ; ; # ࠓ.싉Ⴤ +󠄈\u0813.싉ⴤ; \u0813.싉ⴤ; [V6]; xn--oub.xn--sljz109bpe25dviva; ; ; # ࠓ.싉ⴤ +󠄈\u0813.싉ⴤ; \u0813.싉ⴤ; [V6]; xn--oub.xn--sljz109bpe25dviva; ; ; # ࠓ.싉ⴤ +xn--oub.xn--sljz109bpe25dviva; \u0813.싉ⴤ; [V6]; xn--oub.xn--sljz109bpe25dviva; ; ; # ࠓ.싉ⴤ +xn--oub.xn--8nd9522gpe69cviva; \u0813.싉Ⴤ; [V6]; xn--oub.xn--8nd9522gpe69cviva; ; ; # ࠓ.싉Ⴤ +󠄈\u0813.싉ⴤ; \u0813.싉ⴤ; [V6]; xn--oub.xn--sljz109bpe25dviva; ; ; # ࠓ.싉ⴤ +󠄈\u0813.싉ⴤ; \u0813.싉ⴤ; [V6]; xn--oub.xn--sljz109bpe25dviva; ; ; # ࠓ.싉ⴤ +\uAA2C𑲫≮.⤂; \uAA2C𑲫≮.⤂; [V5]; xn--gdh1854cn19c.xn--kqi; ; ; # ꨬ𑲫≮.⤂ +\uAA2C𑲫<\u0338.⤂; \uAA2C𑲫≮.⤂; [V5]; xn--gdh1854cn19c.xn--kqi; ; ; # ꨬ𑲫≮.⤂ +\uAA2C𑲫≮.⤂; ; [V5]; xn--gdh1854cn19c.xn--kqi; ; ; # ꨬ𑲫≮.⤂ +\uAA2C𑲫<\u0338.⤂; \uAA2C𑲫≮.⤂; [V5]; xn--gdh1854cn19c.xn--kqi; ; ; # ꨬ𑲫≮.⤂ +xn--gdh1854cn19c.xn--kqi; \uAA2C𑲫≮.⤂; [V5]; xn--gdh1854cn19c.xn--kqi; ; ; # ꨬ𑲫≮.⤂ +\u0604𐩔≮Ⴢ.Ⴃ; \u0604𐩔≮Ⴢ.Ⴃ; [B1, V6]; xn--mfb416c0jox02t.xn--bnd; ; ; # 𐩔≮Ⴢ.Ⴃ +\u0604𐩔<\u0338Ⴢ.Ⴃ; \u0604𐩔≮Ⴢ.Ⴃ; [B1, V6]; xn--mfb416c0jox02t.xn--bnd; ; ; # 𐩔≮Ⴢ.Ⴃ +\u0604𐩔≮Ⴢ.Ⴃ; ; [B1, V6]; xn--mfb416c0jox02t.xn--bnd; ; ; # 𐩔≮Ⴢ.Ⴃ +\u0604𐩔<\u0338Ⴢ.Ⴃ; \u0604𐩔≮Ⴢ.Ⴃ; [B1, V6]; xn--mfb416c0jox02t.xn--bnd; ; ; # 𐩔≮Ⴢ.Ⴃ +\u0604𐩔<\u0338ⴢ.ⴃ; \u0604𐩔≮ⴢ.ⴃ; [B1, V6]; xn--mfb266l4khr54u.xn--ukj; ; ; # 𐩔≮ⴢ.ⴃ +\u0604𐩔≮ⴢ.ⴃ; ; [B1, V6]; xn--mfb266l4khr54u.xn--ukj; ; ; # 𐩔≮ⴢ.ⴃ +\u0604𐩔≮Ⴢ.ⴃ; ; [B1, V6]; xn--mfb416c0jox02t.xn--ukj; ; ; # 𐩔≮Ⴢ.ⴃ +\u0604𐩔<\u0338Ⴢ.ⴃ; \u0604𐩔≮Ⴢ.ⴃ; [B1, V6]; xn--mfb416c0jox02t.xn--ukj; ; ; # 𐩔≮Ⴢ.ⴃ +xn--mfb416c0jox02t.xn--ukj; \u0604𐩔≮Ⴢ.ⴃ; [B1, V6]; xn--mfb416c0jox02t.xn--ukj; ; ; # 𐩔≮Ⴢ.ⴃ +xn--mfb266l4khr54u.xn--ukj; \u0604𐩔≮ⴢ.ⴃ; [B1, V6]; xn--mfb266l4khr54u.xn--ukj; ; ; # 𐩔≮ⴢ.ⴃ +xn--mfb416c0jox02t.xn--bnd; \u0604𐩔≮Ⴢ.Ⴃ; [B1, V6]; xn--mfb416c0jox02t.xn--bnd; ; ; # 𐩔≮Ⴢ.Ⴃ +\u0604𐩔<\u0338ⴢ.ⴃ; \u0604𐩔≮ⴢ.ⴃ; [B1, V6]; xn--mfb266l4khr54u.xn--ukj; ; ; # 𐩔≮ⴢ.ⴃ +\u0604𐩔≮ⴢ.ⴃ; \u0604𐩔≮ⴢ.ⴃ; [B1, V6]; xn--mfb266l4khr54u.xn--ukj; ; ; # 𐩔≮ⴢ.ⴃ +\u0604𐩔≮Ⴢ.ⴃ; \u0604𐩔≮Ⴢ.ⴃ; [B1, V6]; xn--mfb416c0jox02t.xn--ukj; ; ; # 𐩔≮Ⴢ.ⴃ +\u0604𐩔<\u0338Ⴢ.ⴃ; \u0604𐩔≮Ⴢ.ⴃ; [B1, V6]; xn--mfb416c0jox02t.xn--ukj; ; ; # 𐩔≮Ⴢ.ⴃ +𑁅。-; 𑁅.-; [V3, V5]; xn--210d.-; ; ; # 𑁅.- +xn--210d.-; 𑁅.-; [V3, V5]; xn--210d.-; ; ; # 𑁅.- +\u0DCA。饈≠\u0664; \u0DCA.饈≠\u0664; [B1, B5, B6, V5, V6]; xn--h1c25913jfwov.xn--dib144ler5f; ; ; # ්.饈≠٤ +\u0DCA。饈=\u0338\u0664; \u0DCA.饈≠\u0664; [B1, B5, B6, V5, V6]; xn--h1c25913jfwov.xn--dib144ler5f; ; ; # ්.饈≠٤ +\u0DCA。饈≠\u0664; \u0DCA.饈≠\u0664; [B1, B5, B6, V5, V6]; xn--h1c25913jfwov.xn--dib144ler5f; ; ; # ්.饈≠٤ +\u0DCA。饈=\u0338\u0664; \u0DCA.饈≠\u0664; [B1, B5, B6, V5, V6]; xn--h1c25913jfwov.xn--dib144ler5f; ; ; # ්.饈≠٤ +xn--h1c25913jfwov.xn--dib144ler5f; \u0DCA.饈≠\u0664; [B1, B5, B6, V5, V6]; xn--h1c25913jfwov.xn--dib144ler5f; ; ; # ්.饈≠٤ +𞥃ᠠ⁷。≯邅⬻4; 𞥃ᠠ7.≯邅⬻4; [B1, B2]; xn--7-v4j2826w.xn--4-ogoy01bou3i; ; ; # 𞥃ᠠ7.≯邅⬻4 +𞥃ᠠ⁷。>\u0338邅⬻4; 𞥃ᠠ7.≯邅⬻4; [B1, B2]; xn--7-v4j2826w.xn--4-ogoy01bou3i; ; ; # 𞥃ᠠ7.≯邅⬻4 +𞥃ᠠ7。≯邅⬻4; 𞥃ᠠ7.≯邅⬻4; [B1, B2]; xn--7-v4j2826w.xn--4-ogoy01bou3i; ; ; # 𞥃ᠠ7.≯邅⬻4 +𞥃ᠠ7。>\u0338邅⬻4; 𞥃ᠠ7.≯邅⬻4; [B1, B2]; xn--7-v4j2826w.xn--4-ogoy01bou3i; ; ; # 𞥃ᠠ7.≯邅⬻4 +𞤡ᠠ7。>\u0338邅⬻4; 𞥃ᠠ7.≯邅⬻4; [B1, B2]; xn--7-v4j2826w.xn--4-ogoy01bou3i; ; ; # 𞥃ᠠ7.≯邅⬻4 +𞤡ᠠ7。≯邅⬻4; 𞥃ᠠ7.≯邅⬻4; [B1, B2]; xn--7-v4j2826w.xn--4-ogoy01bou3i; ; ; # 𞥃ᠠ7.≯邅⬻4 +xn--7-v4j2826w.xn--4-ogoy01bou3i; 𞥃ᠠ7.≯邅⬻4; [B1, B2]; xn--7-v4j2826w.xn--4-ogoy01bou3i; ; ; # 𞥃ᠠ7.≯邅⬻4 +𞤡ᠠ⁷。>\u0338邅⬻4; 𞥃ᠠ7.≯邅⬻4; [B1, B2]; xn--7-v4j2826w.xn--4-ogoy01bou3i; ; ; # 𞥃ᠠ7.≯邅⬻4 +𞤡ᠠ⁷。≯邅⬻4; 𞥃ᠠ7.≯邅⬻4; [B1, B2]; xn--7-v4j2826w.xn--4-ogoy01bou3i; ; ; # 𞥃ᠠ7.≯邅⬻4 +ᡳ-𑐻.𐹴𐋫\u0605; ; [B1, B6, V6]; xn----m9j3429kxmy7e.xn--nfb7950kdihrp812a; ; ; # ᡳ-𑐻.𐹴𐋫 +xn----m9j3429kxmy7e.xn--nfb7950kdihrp812a; ᡳ-𑐻.𐹴𐋫\u0605; [B1, B6, V6]; xn----m9j3429kxmy7e.xn--nfb7950kdihrp812a; ; ; # ᡳ-𑐻.𐹴𐋫 +\u0845\u0A51.넨-; ; [B5, B6, V6]; xn--3vb26hb6834b.xn----i37ez0957g; ; ; # ࡅੑ.넨- +\u0845\u0A51.넨-; \u0845\u0A51.넨-; [B5, B6, V6]; xn--3vb26hb6834b.xn----i37ez0957g; ; ; # ࡅੑ.넨- +xn--3vb26hb6834b.xn----i37ez0957g; \u0845\u0A51.넨-; [B5, B6, V6]; xn--3vb26hb6834b.xn----i37ez0957g; ; ; # ࡅੑ.넨- +ꡦᡑ\u200D⒈。𐋣-; ꡦᡑ\u200D⒈.𐋣-; [C2, V3, V6]; xn--h8e470bl0d838o.xn----381i; ; xn--h8e863drj7h.xn----381i; [V3, V6] # ꡦᡑ⒈.𐋣- +ꡦᡑ\u200D1.。𐋣-; ꡦᡑ\u200D1..𐋣-; [C2, V3, X4_2]; xn--1-o7j663bdl7m..xn----381i; [C2, V3, A4_2]; xn--1-o7j0610f..xn----381i; [V3, A4_2] # ꡦᡑ1..𐋣- +xn--1-o7j0610f..xn----381i; ꡦᡑ1..𐋣-; [V3, X4_2]; xn--1-o7j0610f..xn----381i; [V3, A4_2]; ; # ꡦᡑ1..𐋣- +xn--1-o7j663bdl7m..xn----381i; ꡦᡑ\u200D1..𐋣-; [C2, V3, X4_2]; xn--1-o7j663bdl7m..xn----381i; [C2, V3, A4_2]; ; # ꡦᡑ1..𐋣- +xn--h8e863drj7h.xn----381i; ꡦᡑ⒈.𐋣-; [V3, V6]; xn--h8e863drj7h.xn----381i; ; ; # ꡦᡑ⒈.𐋣- +xn--h8e470bl0d838o.xn----381i; ꡦᡑ\u200D⒈.𐋣-; [C2, V3, V6]; xn--h8e470bl0d838o.xn----381i; ; ; # ꡦᡑ⒈.𐋣- +Ⴌ。\uFB69; Ⴌ.\u0679; [B5, B6, V6]; xn--knd.xn--yib19191t; ; ; # Ⴌ.ٹ +Ⴌ。\u0679; Ⴌ.\u0679; [B5, B6, V6]; xn--knd.xn--yib19191t; ; ; # Ⴌ.ٹ +ⴌ。\u0679; ⴌ.\u0679; [B5, B6, V6]; xn--3kj.xn--yib19191t; ; ; # ⴌ.ٹ +xn--3kj.xn--yib19191t; ⴌ.\u0679; [B5, B6, V6]; xn--3kj.xn--yib19191t; ; ; # ⴌ.ٹ +xn--knd.xn--yib19191t; Ⴌ.\u0679; [B5, B6, V6]; xn--knd.xn--yib19191t; ; ; # Ⴌ.ٹ +ⴌ。\uFB69; ⴌ.\u0679; [B5, B6, V6]; xn--3kj.xn--yib19191t; ; ; # ⴌ.ٹ +𐮁𐭱.\u0F84\u135E-ᳺ; ; [B1, V5]; xn--r19c5a.xn----xjg270ag3m; ; ; # 𐮁𐭱.྄፞-ᳺ +xn--r19c5a.xn----xjg270ag3m; 𐮁𐭱.\u0F84\u135E-ᳺ; [B1, V5]; xn--r19c5a.xn----xjg270ag3m; ; ; # 𐮁𐭱.྄፞-ᳺ +⒈䰹\u200D-。웈; ⒈䰹\u200D-.웈; [C2, V3, V6]; xn----tgnx5rjr6c.xn--kp5b; ; xn----dcp160o.xn--kp5b; [V3, V6] # ⒈䰹-.웈 +⒈䰹\u200D-。웈; ⒈䰹\u200D-.웈; [C2, V3, V6]; xn----tgnx5rjr6c.xn--kp5b; ; xn----dcp160o.xn--kp5b; [V3, V6] # ⒈䰹-.웈 +1.䰹\u200D-。웈; 1.䰹\u200D-.웈; [C2, V3]; 1.xn----tgnz80r.xn--kp5b; ; 1.xn----zw5a.xn--kp5b; [V3] # 1.䰹-.웈 +1.䰹\u200D-。웈; 1.䰹\u200D-.웈; [C2, V3]; 1.xn----tgnz80r.xn--kp5b; ; 1.xn----zw5a.xn--kp5b; [V3] # 1.䰹-.웈 +1.xn----zw5a.xn--kp5b; 1.䰹-.웈; [V3]; 1.xn----zw5a.xn--kp5b; ; ; # 1.䰹-.웈 +1.xn----tgnz80r.xn--kp5b; 1.䰹\u200D-.웈; [C2, V3]; 1.xn----tgnz80r.xn--kp5b; ; ; # 1.䰹-.웈 +xn----dcp160o.xn--kp5b; ⒈䰹-.웈; [V3, V6]; xn----dcp160o.xn--kp5b; ; ; # ⒈䰹-.웈 +xn----tgnx5rjr6c.xn--kp5b; ⒈䰹\u200D-.웈; [C2, V3, V6]; xn----tgnx5rjr6c.xn--kp5b; ; ; # ⒈䰹-.웈 +て。\u200C\u07F3; て.\u200C\u07F3; [C1, V6]; xn--m9j.xn--rtb154j9l73w; ; xn--m9j.xn--rtb10784p; [V6] # て.߳ +xn--m9j.xn--rtb10784p; て.\u07F3; [V6]; xn--m9j.xn--rtb10784p; ; ; # て.߳ +xn--m9j.xn--rtb154j9l73w; て.\u200C\u07F3; [C1, V6]; xn--m9j.xn--rtb154j9l73w; ; ; # て.߳ +ς。\uA9C0\u06E7; ς.\uA9C0\u06E7; [V5]; xn--3xa.xn--3lb1944f; ; xn--4xa.xn--3lb1944f; # ς.꧀ۧ +ς。\uA9C0\u06E7; ς.\uA9C0\u06E7; [V5]; xn--3xa.xn--3lb1944f; ; xn--4xa.xn--3lb1944f; # ς.꧀ۧ +Σ。\uA9C0\u06E7; σ.\uA9C0\u06E7; [V5]; xn--4xa.xn--3lb1944f; ; ; # σ.꧀ۧ +σ。\uA9C0\u06E7; σ.\uA9C0\u06E7; [V5]; xn--4xa.xn--3lb1944f; ; ; # σ.꧀ۧ +xn--4xa.xn--3lb1944f; σ.\uA9C0\u06E7; [V5]; xn--4xa.xn--3lb1944f; ; ; # σ.꧀ۧ +xn--3xa.xn--3lb1944f; ς.\uA9C0\u06E7; [V5]; xn--3xa.xn--3lb1944f; ; ; # ς.꧀ۧ +Σ。\uA9C0\u06E7; σ.\uA9C0\u06E7; [V5]; xn--4xa.xn--3lb1944f; ; ; # σ.꧀ۧ +σ。\uA9C0\u06E7; σ.\uA9C0\u06E7; [V5]; xn--4xa.xn--3lb1944f; ; ; # σ.꧀ۧ +\u0BCD.ႢႵ; ; [V5, V6]; xn--xmc83135idcxza.xn--9md2b; ; ; # ்.ႢႵ +\u0BCD.ⴂⴕ; ; [V5, V6]; xn--xmc83135idcxza.xn--tkjwb; ; ; # ்.ⴂⴕ +\u0BCD.Ⴂⴕ; ; [V5, V6]; xn--xmc83135idcxza.xn--9md086l; ; ; # ்.Ⴂⴕ +xn--xmc83135idcxza.xn--9md086l; \u0BCD.Ⴂⴕ; [V5, V6]; xn--xmc83135idcxza.xn--9md086l; ; ; # ்.Ⴂⴕ +xn--xmc83135idcxza.xn--tkjwb; \u0BCD.ⴂⴕ; [V5, V6]; xn--xmc83135idcxza.xn--tkjwb; ; ; # ்.ⴂⴕ +xn--xmc83135idcxza.xn--9md2b; \u0BCD.ႢႵ; [V5, V6]; xn--xmc83135idcxza.xn--9md2b; ; ; # ்.ႢႵ +\u1C32🄈⾛\u05A6.\u200D\u07FD; \u1C32🄈走\u05A6.\u200D\u07FD; [C2, V5, V6]; xn--xcb756i493fwi5o.xn--1tb334j1197q; ; xn--xcb756i493fwi5o.xn--1tb13454l; [V5, V6] # ᰲ🄈走֦.߽ +\u1C327,走\u05A6.\u200D\u07FD; ; [C2, V5, V6]; xn--7,-bid991urn3k.xn--1tb334j1197q; ; xn--7,-bid991urn3k.xn--1tb13454l; [V5, V6] # ᰲ7,走֦.߽ +xn--7,-bid991urn3k.xn--1tb13454l; \u1C327,走\u05A6.\u07FD; [V5, V6]; xn--7,-bid991urn3k.xn--1tb13454l; ; ; # ᰲ7,走֦.߽ +xn--7,-bid991urn3k.xn--1tb334j1197q; \u1C327,走\u05A6.\u200D\u07FD; [C2, V5, V6]; xn--7,-bid991urn3k.xn--1tb334j1197q; ; ; # ᰲ7,走֦.߽ +xn--xcb756i493fwi5o.xn--1tb13454l; \u1C32🄈走\u05A6.\u07FD; [V5, V6]; xn--xcb756i493fwi5o.xn--1tb13454l; ; ; # ᰲ🄈走֦.߽ +xn--xcb756i493fwi5o.xn--1tb334j1197q; \u1C32🄈走\u05A6.\u200D\u07FD; [C2, V5, V6]; xn--xcb756i493fwi5o.xn--1tb334j1197q; ; ; # ᰲ🄈走֦.߽ +ᢗ。Ӏ; ᢗ.Ӏ; [V6]; xn--hbf.xn--d5a86117e; ; ; # ᢗ.Ӏ +ᢗ。Ӏ; ᢗ.Ӏ; [V6]; xn--hbf.xn--d5a86117e; ; ; # ᢗ.Ӏ +ᢗ。ӏ; ᢗ.ӏ; [V6]; xn--hbf.xn--s5a83117e; ; ; # ᢗ.ӏ +xn--hbf.xn--s5a83117e; ᢗ.ӏ; [V6]; xn--hbf.xn--s5a83117e; ; ; # ᢗ.ӏ +xn--hbf.xn--d5a86117e; ᢗ.Ӏ; [V6]; xn--hbf.xn--d5a86117e; ; ; # ᢗ.Ӏ +ᢗ。ӏ; ᢗ.ӏ; [V6]; xn--hbf.xn--s5a83117e; ; ; # ᢗ.ӏ +\u0668-。🝆ᄾ; \u0668-.🝆ᄾ; [B1, V3, V6]; xn----oqc.xn--qrd1699v327w; ; ; # ٨-.🝆ᄾ +xn----oqc.xn--qrd1699v327w; \u0668-.🝆ᄾ; [B1, V3, V6]; xn----oqc.xn--qrd1699v327w; ; ; # ٨-.🝆ᄾ +-𐋷𖾑。󠆬; -𐋷𖾑.; [V3]; xn----991iq40y.; ; ; # -𐋷𖾑. +xn----991iq40y.; -𐋷𖾑.; [V3]; xn----991iq40y.; ; ; # -𐋷𖾑. +\u200C𐹳🐴멈.\uABED; ; [B1, C1, V5, V6]; xn--0ug6681d406b7bwk.xn--429a8682s; ; xn--422b325mqb6i.xn--429a8682s; [B1, V5, V6] # 𐹳🐴멈.꯭ +\u200C𐹳🐴멈.\uABED; \u200C𐹳🐴멈.\uABED; [B1, C1, V5, V6]; xn--0ug6681d406b7bwk.xn--429a8682s; ; xn--422b325mqb6i.xn--429a8682s; [B1, V5, V6] # 𐹳🐴멈.꯭ +xn--422b325mqb6i.xn--429a8682s; 𐹳🐴멈.\uABED; [B1, V5, V6]; xn--422b325mqb6i.xn--429a8682s; ; ; # 𐹳🐴멈.꯭ +xn--0ug6681d406b7bwk.xn--429a8682s; \u200C𐹳🐴멈.\uABED; [B1, C1, V5, V6]; xn--0ug6681d406b7bwk.xn--429a8682s; ; ; # 𐹳🐴멈.꯭ +≮.\u0769\u0603; ; [B1, V6]; xn--gdh.xn--lfb92e; ; ; # ≮.ݩ +<\u0338.\u0769\u0603; ≮.\u0769\u0603; [B1, V6]; xn--gdh.xn--lfb92e; ; ; # ≮.ݩ +xn--gdh.xn--lfb92e; ≮.\u0769\u0603; [B1, V6]; xn--gdh.xn--lfb92e; ; ; # ≮.ݩ +⾆。\u200C𑚶; 舌.\u200C𑚶; [B1, B2, B3, C1, V6]; xn--tc1ao37z.xn--0ugx728gi1nfwqz2e; ; xn--tc1ao37z.xn--6e2dw557azds2d; [B2, B3, B5, B6, V5, V6] # 舌.𑚶 +舌。\u200C𑚶; 舌.\u200C𑚶; [B1, B2, B3, C1, V6]; xn--tc1ao37z.xn--0ugx728gi1nfwqz2e; ; xn--tc1ao37z.xn--6e2dw557azds2d; [B2, B3, B5, B6, V5, V6] # 舌.𑚶 +xn--tc1ao37z.xn--6e2dw557azds2d; 舌.𑚶; [B2, B3, B5, B6, V5, V6]; xn--tc1ao37z.xn--6e2dw557azds2d; ; ; # 舌.𑚶 +xn--tc1ao37z.xn--0ugx728gi1nfwqz2e; 舌.\u200C𑚶; [B1, B2, B3, C1, V6]; xn--tc1ao37z.xn--0ugx728gi1nfwqz2e; ; ; # 舌.𑚶 +\u200CჀ-.𝟷ς𞴺ς; \u200CჀ-.1ς𞴺ς; [B1, C1, V3, V6]; xn----z1g168i.xn--1-ymba92321c; ; xn----z1g.xn--1-0mba52321c; [B1, B6, V3, V6] # Ⴠ-.1ς𞴺ς +\u200CჀ-.1ς𞴺ς; ; [B1, C1, V3, V6]; xn----z1g168i.xn--1-ymba92321c; ; xn----z1g.xn--1-0mba52321c; [B1, B6, V3, V6] # Ⴠ-.1ς𞴺ς +\u200Cⴠ-.1ς𞴺ς; ; [B1, C1, V3]; xn----rgn530d.xn--1-ymba92321c; ; xn----2ws.xn--1-0mba52321c; [B1, B6, V3] # ⴠ-.1ς𞴺ς +\u200CჀ-.1Σ𞴺Σ; \u200CჀ-.1σ𞴺σ; [B1, C1, V3, V6]; xn----z1g168i.xn--1-0mba52321c; ; xn----z1g.xn--1-0mba52321c; [B1, B6, V3, V6] # Ⴠ-.1σ𞴺σ +\u200Cⴠ-.1σ𞴺σ; ; [B1, C1, V3]; xn----rgn530d.xn--1-0mba52321c; ; xn----2ws.xn--1-0mba52321c; [B1, B6, V3] # ⴠ-.1σ𞴺σ +\u200CჀ-.1σ𞴺Σ; \u200CჀ-.1σ𞴺σ; [B1, C1, V3, V6]; xn----z1g168i.xn--1-0mba52321c; ; xn----z1g.xn--1-0mba52321c; [B1, B6, V3, V6] # Ⴠ-.1σ𞴺σ +xn----z1g.xn--1-0mba52321c; Ⴠ-.1σ𞴺σ; [B1, B6, V3, V6]; xn----z1g.xn--1-0mba52321c; ; ; # Ⴠ-.1σ𞴺σ +xn----z1g168i.xn--1-0mba52321c; \u200CჀ-.1σ𞴺σ; [B1, C1, V3, V6]; xn----z1g168i.xn--1-0mba52321c; ; ; # Ⴠ-.1σ𞴺σ +xn----2ws.xn--1-0mba52321c; ⴠ-.1σ𞴺σ; [B1, B6, V3]; xn----2ws.xn--1-0mba52321c; ; ; # ⴠ-.1σ𞴺σ +xn----rgn530d.xn--1-0mba52321c; \u200Cⴠ-.1σ𞴺σ; [B1, C1, V3]; xn----rgn530d.xn--1-0mba52321c; ; ; # ⴠ-.1σ𞴺σ +\u200CჀ-.1ς𞴺Σ; \u200CჀ-.1ς𞴺σ; [B1, C1, V3, V6]; xn----z1g168i.xn--1-ymbd52321c; ; xn----z1g.xn--1-0mba52321c; [B1, B6, V3, V6] # Ⴠ-.1ς𞴺σ +\u200Cⴠ-.1ς𞴺σ; ; [B1, C1, V3]; xn----rgn530d.xn--1-ymbd52321c; ; xn----2ws.xn--1-0mba52321c; [B1, B6, V3] # ⴠ-.1ς𞴺σ +xn----rgn530d.xn--1-ymbd52321c; \u200Cⴠ-.1ς𞴺σ; [B1, C1, V3]; xn----rgn530d.xn--1-ymbd52321c; ; ; # ⴠ-.1ς𞴺σ +xn----z1g168i.xn--1-ymbd52321c; \u200CჀ-.1ς𞴺σ; [B1, C1, V3, V6]; xn----z1g168i.xn--1-ymbd52321c; ; ; # Ⴠ-.1ς𞴺σ +xn----rgn530d.xn--1-ymba92321c; \u200Cⴠ-.1ς𞴺ς; [B1, C1, V3]; xn----rgn530d.xn--1-ymba92321c; ; ; # ⴠ-.1ς𞴺ς +xn----z1g168i.xn--1-ymba92321c; \u200CჀ-.1ς𞴺ς; [B1, C1, V3, V6]; xn----z1g168i.xn--1-ymba92321c; ; ; # Ⴠ-.1ς𞴺ς +\u200Cⴠ-.𝟷ς𞴺ς; \u200Cⴠ-.1ς𞴺ς; [B1, C1, V3]; xn----rgn530d.xn--1-ymba92321c; ; xn----2ws.xn--1-0mba52321c; [B1, B6, V3] # ⴠ-.1ς𞴺ς +\u200CჀ-.𝟷Σ𞴺Σ; \u200CჀ-.1σ𞴺σ; [B1, C1, V3, V6]; xn----z1g168i.xn--1-0mba52321c; ; xn----z1g.xn--1-0mba52321c; [B1, B6, V3, V6] # Ⴠ-.1σ𞴺σ +\u200Cⴠ-.𝟷σ𞴺σ; \u200Cⴠ-.1σ𞴺σ; [B1, C1, V3]; xn----rgn530d.xn--1-0mba52321c; ; xn----2ws.xn--1-0mba52321c; [B1, B6, V3] # ⴠ-.1σ𞴺σ +\u200CჀ-.𝟷σ𞴺Σ; \u200CჀ-.1σ𞴺σ; [B1, C1, V3, V6]; xn----z1g168i.xn--1-0mba52321c; ; xn----z1g.xn--1-0mba52321c; [B1, B6, V3, V6] # Ⴠ-.1σ𞴺σ +\u200CჀ-.𝟷ς𞴺Σ; \u200CჀ-.1ς𞴺σ; [B1, C1, V3, V6]; xn----z1g168i.xn--1-ymbd52321c; ; xn----z1g.xn--1-0mba52321c; [B1, B6, V3, V6] # Ⴠ-.1ς𞴺σ +\u200Cⴠ-.𝟷ς𞴺σ; \u200Cⴠ-.1ς𞴺σ; [B1, C1, V3]; xn----rgn530d.xn--1-ymbd52321c; ; xn----2ws.xn--1-0mba52321c; [B1, B6, V3] # ⴠ-.1ς𞴺σ +𑲘󠄒。𝟪Ⴜ; 𑲘.8Ⴜ; [V5, V6]; xn--7m3d291b.xn--8-s1g; ; ; # 𑲘.8Ⴜ +𑲘󠄒。8Ⴜ; 𑲘.8Ⴜ; [V5, V6]; xn--7m3d291b.xn--8-s1g; ; ; # 𑲘.8Ⴜ +𑲘󠄒。8ⴜ; 𑲘.8ⴜ; [V5, V6]; xn--7m3d291b.xn--8-vws; ; ; # 𑲘.8ⴜ +xn--7m3d291b.xn--8-vws; 𑲘.8ⴜ; [V5, V6]; xn--7m3d291b.xn--8-vws; ; ; # 𑲘.8ⴜ +xn--7m3d291b.xn--8-s1g; 𑲘.8Ⴜ; [V5, V6]; xn--7m3d291b.xn--8-s1g; ; ; # 𑲘.8Ⴜ +𑲘󠄒。𝟪ⴜ; 𑲘.8ⴜ; [V5, V6]; xn--7m3d291b.xn--8-vws; ; ; # 𑲘.8ⴜ +䪏\u06AB\u07E0\u0941。뭕ᢝ\u17B9; 䪏\u06AB\u07E0\u0941.뭕ᢝ\u17B9; [B5, B6]; xn--ekb23dj4at01n.xn--43e96bh910b; ; ; # 䪏ګߠु.뭕ᢝឹ +䪏\u06AB\u07E0\u0941。뭕ᢝ\u17B9; 䪏\u06AB\u07E0\u0941.뭕ᢝ\u17B9; [B5, B6]; xn--ekb23dj4at01n.xn--43e96bh910b; ; ; # 䪏ګߠु.뭕ᢝឹ +䪏\u06AB\u07E0\u0941。뭕ᢝ\u17B9; 䪏\u06AB\u07E0\u0941.뭕ᢝ\u17B9; [B5, B6]; xn--ekb23dj4at01n.xn--43e96bh910b; ; ; # 䪏ګߠु.뭕ᢝឹ +䪏\u06AB\u07E0\u0941。뭕ᢝ\u17B9; 䪏\u06AB\u07E0\u0941.뭕ᢝ\u17B9; [B5, B6]; xn--ekb23dj4at01n.xn--43e96bh910b; ; ; # 䪏ګߠु.뭕ᢝឹ +xn--ekb23dj4at01n.xn--43e96bh910b; 䪏\u06AB\u07E0\u0941.뭕ᢝ\u17B9; [B5, B6]; xn--ekb23dj4at01n.xn--43e96bh910b; ; ; # 䪏ګߠु.뭕ᢝឹ +\u1BAB。🂉; \u1BAB.🂉; [V5, V6]; xn--zxf.xn--fx7ho0250c; ; ; # ᮫.🂉 +\u1BAB。🂉; \u1BAB.🂉; [V5, V6]; xn--zxf.xn--fx7ho0250c; ; ; # ᮫.🂉 +xn--zxf.xn--fx7ho0250c; \u1BAB.🂉; [V5, V6]; xn--zxf.xn--fx7ho0250c; ; ; # ᮫.🂉 +\u0AC4。ς\u200D𐹮𑈵; \u0AC4.ς\u200D𐹮𑈵; [B5, C2, V6]; xn--dfc53161q.xn--3xa006lzo7nsfd; ; xn--dfc53161q.xn--4xa8467k5mc; [B5, V6] # ૄ.ς𐹮𑈵 +\u0AC4。Σ\u200D𐹮𑈵; \u0AC4.σ\u200D𐹮𑈵; [B5, C2, V6]; xn--dfc53161q.xn--4xa895lzo7nsfd; ; xn--dfc53161q.xn--4xa8467k5mc; [B5, V6] # ૄ.σ𐹮𑈵 +\u0AC4。σ\u200D𐹮𑈵; \u0AC4.σ\u200D𐹮𑈵; [B5, C2, V6]; xn--dfc53161q.xn--4xa895lzo7nsfd; ; xn--dfc53161q.xn--4xa8467k5mc; [B5, V6] # ૄ.σ𐹮𑈵 +xn--dfc53161q.xn--4xa8467k5mc; \u0AC4.σ𐹮𑈵; [B5, V6]; xn--dfc53161q.xn--4xa8467k5mc; ; ; # ૄ.σ𐹮𑈵 +xn--dfc53161q.xn--4xa895lzo7nsfd; \u0AC4.σ\u200D𐹮𑈵; [B5, C2, V6]; xn--dfc53161q.xn--4xa895lzo7nsfd; ; ; # ૄ.σ𐹮𑈵 +xn--dfc53161q.xn--3xa006lzo7nsfd; \u0AC4.ς\u200D𐹮𑈵; [B5, C2, V6]; xn--dfc53161q.xn--3xa006lzo7nsfd; ; ; # ૄ.ς𐹮𑈵 +𐫀ᡂ𑜫.𑘿; 𐫀ᡂ𑜫.𑘿; [B1, B2, B3, V5]; xn--17e9625js1h.xn--sb2d; ; ; # 𐫀ᡂ𑜫.𑘿 +𐫀ᡂ𑜫.𑘿; ; [B1, B2, B3, V5]; xn--17e9625js1h.xn--sb2d; ; ; # 𐫀ᡂ𑜫.𑘿 +xn--17e9625js1h.xn--sb2d; 𐫀ᡂ𑜫.𑘿; [B1, B2, B3, V5]; xn--17e9625js1h.xn--sb2d; ; ; # 𐫀ᡂ𑜫.𑘿 +-。\u200C; -.\u200C; [C1, V3, V6]; xn----7i12hu122k9ire.xn--0ug; ; xn----7i12hu122k9ire.; [V3, V6] # -. +xn----7i12hu122k9ire.; -.; [V3, V6]; xn----7i12hu122k9ire.; ; ; # -. +xn----7i12hu122k9ire.xn--0ug; -.\u200C; [C1, V3, V6]; xn----7i12hu122k9ire.xn--0ug; ; ; # -. +𐹣.\u07C2; 𐹣.\u07C2; [B1]; xn--bo0d.xn--dsb; ; ; # 𐹣.߂ +𐹣.\u07C2; ; [B1]; xn--bo0d.xn--dsb; ; ; # 𐹣.߂ +xn--bo0d.xn--dsb; 𐹣.\u07C2; [B1]; xn--bo0d.xn--dsb; ; ; # 𐹣.߂ +-\u07E1。Ↄ; -\u07E1.Ↄ; [B1, V3, V6]; xn----8cd.xn--q5g; ; ; # -ߡ.Ↄ +-\u07E1。Ↄ; -\u07E1.Ↄ; [B1, V3, V6]; xn----8cd.xn--q5g; ; ; # -ߡ.Ↄ +-\u07E1。ↄ; -\u07E1.ↄ; [B1, V3]; xn----8cd.xn--r5g; ; ; # -ߡ.ↄ +xn----8cd.xn--r5g; -\u07E1.ↄ; [B1, V3]; xn----8cd.xn--r5g; ; ; # -ߡ.ↄ +xn----8cd.xn--q5g; -\u07E1.Ↄ; [B1, V3, V6]; xn----8cd.xn--q5g; ; ; # -ߡ.Ↄ +-\u07E1。ↄ; -\u07E1.ↄ; [B1, V3]; xn----8cd.xn--r5g; ; ; # -ߡ.ↄ +\u200D-︒󠄄。ß哑\u200C; \u200D-︒.ß哑\u200C; [B1, B5, B6, C1, C2, V6]; xn----tgnt341h.xn--zca670n5f0binyk; ; xn----o89h.xn--ss-h46c5711e; [B1, B5, B6, V3, V6] # -︒.ß哑 +\u200D-。󠄄。ß哑\u200C; \u200D-..ß哑\u200C; [B1, B5, B6, C1, C2, V3, V6, X4_2]; xn----tgn..xn--zca670n5f0binyk; [B1, B5, B6, C1, C2, V3, V6, A4_2]; -..xn--ss-h46c5711e; [B1, B5, B6, V3, V6, A4_2] # -..ß哑 +\u200D-。󠄄。SS哑\u200C; \u200D-..ss哑\u200C; [B1, B5, B6, C1, C2, V3, V6, X4_2]; xn----tgn..xn--ss-k1ts75zb8ym; [B1, B5, B6, C1, C2, V3, V6, A4_2]; -..xn--ss-h46c5711e; [B1, B5, B6, V3, V6, A4_2] # -..ss哑 +\u200D-。󠄄。ss哑\u200C; \u200D-..ss哑\u200C; [B1, B5, B6, C1, C2, V3, V6, X4_2]; xn----tgn..xn--ss-k1ts75zb8ym; [B1, B5, B6, C1, C2, V3, V6, A4_2]; -..xn--ss-h46c5711e; [B1, B5, B6, V3, V6, A4_2] # -..ss哑 +\u200D-。󠄄。Ss哑\u200C; \u200D-..ss哑\u200C; [B1, B5, B6, C1, C2, V3, V6, X4_2]; xn----tgn..xn--ss-k1ts75zb8ym; [B1, B5, B6, C1, C2, V3, V6, A4_2]; -..xn--ss-h46c5711e; [B1, B5, B6, V3, V6, A4_2] # -..ss哑 +-..xn--ss-h46c5711e; -..ss哑; [B1, B5, B6, V3, V6, X4_2]; -..xn--ss-h46c5711e; [B1, B5, B6, V3, V6, A4_2]; ; # -..ss哑 +xn----tgn..xn--ss-k1ts75zb8ym; \u200D-..ss哑\u200C; [B1, B5, B6, C1, C2, V3, V6, X4_2]; xn----tgn..xn--ss-k1ts75zb8ym; [B1, B5, B6, C1, C2, V3, V6, A4_2]; ; # -..ss哑 +xn----tgn..xn--zca670n5f0binyk; \u200D-..ß哑\u200C; [B1, B5, B6, C1, C2, V3, V6, X4_2]; xn----tgn..xn--zca670n5f0binyk; [B1, B5, B6, C1, C2, V3, V6, A4_2]; ; # -..ß哑 +\u200D-︒󠄄。SS哑\u200C; \u200D-︒.ss哑\u200C; [B1, B5, B6, C1, C2, V6]; xn----tgnt341h.xn--ss-k1ts75zb8ym; ; xn----o89h.xn--ss-h46c5711e; [B1, B5, B6, V3, V6] # -︒.ss哑 +\u200D-︒󠄄。ss哑\u200C; \u200D-︒.ss哑\u200C; [B1, B5, B6, C1, C2, V6]; xn----tgnt341h.xn--ss-k1ts75zb8ym; ; xn----o89h.xn--ss-h46c5711e; [B1, B5, B6, V3, V6] # -︒.ss哑 +\u200D-︒󠄄。Ss哑\u200C; \u200D-︒.ss哑\u200C; [B1, B5, B6, C1, C2, V6]; xn----tgnt341h.xn--ss-k1ts75zb8ym; ; xn----o89h.xn--ss-h46c5711e; [B1, B5, B6, V3, V6] # -︒.ss哑 +xn----o89h.xn--ss-h46c5711e; -︒.ss哑; [B1, B5, B6, V3, V6]; xn----o89h.xn--ss-h46c5711e; ; ; # -︒.ss哑 +xn----tgnt341h.xn--ss-k1ts75zb8ym; \u200D-︒.ss哑\u200C; [B1, B5, B6, C1, C2, V6]; xn----tgnt341h.xn--ss-k1ts75zb8ym; ; ; # -︒.ss哑 +xn----tgnt341h.xn--zca670n5f0binyk; \u200D-︒.ß哑\u200C; [B1, B5, B6, C1, C2, V6]; xn----tgnt341h.xn--zca670n5f0binyk; ; ; # -︒.ß哑 +︒.\uFE2F𑑂; ︒.𑑂\uFE2F; [V5, V6]; xn--y86c.xn--s96cu30b; ; ; # ︒.𑑂︯ +︒.𑑂\uFE2F; ︒.𑑂\uFE2F; [V5, V6]; xn--y86c.xn--s96cu30b; ; ; # ︒.𑑂︯ +。.𑑂\uFE2F; ..𑑂\uFE2F; [V5, X4_2]; ..xn--s96cu30b; [V5, A4_2]; ; # ..𑑂︯ +..xn--s96cu30b; ..𑑂\uFE2F; [V5, X4_2]; ..xn--s96cu30b; [V5, A4_2]; ; # ..𑑂︯ +xn--y86c.xn--s96cu30b; ︒.𑑂\uFE2F; [V5, V6]; xn--y86c.xn--s96cu30b; ; ; # ︒.𑑂︯ +\uA92C。\u200D; \uA92C.\u200D; [C2, V5]; xn--zi9a.xn--1ug; ; xn--zi9a.; [V5] # ꤬. +xn--zi9a.; \uA92C.; [V5]; xn--zi9a.; ; ; # ꤬. +xn--zi9a.xn--1ug; \uA92C.\u200D; [C2, V5]; xn--zi9a.xn--1ug; ; ; # ꤬. +\u200D。\uFCD7; \u200D.\u0647\u062C; [B1, C2, V6]; xn--1ug80651l.xn--rgb7c; ; xn--d356e.xn--rgb7c; [B1, V6] # .هج +\u200D。\u0647\u062C; \u200D.\u0647\u062C; [B1, C2, V6]; xn--1ug80651l.xn--rgb7c; ; xn--d356e.xn--rgb7c; [B1, V6] # .هج +xn--d356e.xn--rgb7c; .\u0647\u062C; [B1, V6]; xn--d356e.xn--rgb7c; ; ; # .هج +xn--1ug80651l.xn--rgb7c; \u200D.\u0647\u062C; [B1, C2, V6]; xn--1ug80651l.xn--rgb7c; ; ; # .هج +-Ⴄ𝟢\u0663.𑍴ς; -Ⴄ0\u0663.𑍴ς; [B1, V3, V5, V6]; xn---0-iyd216h.xn--3xa1220l; ; xn---0-iyd216h.xn--4xa9120l; # -Ⴄ0٣.𑍴ς +-Ⴄ0\u0663.𑍴ς; ; [B1, V3, V5, V6]; xn---0-iyd216h.xn--3xa1220l; ; xn---0-iyd216h.xn--4xa9120l; # -Ⴄ0٣.𑍴ς +-ⴄ0\u0663.𑍴ς; ; [B1, V3, V5]; xn---0-iyd8660b.xn--3xa1220l; ; xn---0-iyd8660b.xn--4xa9120l; # -ⴄ0٣.𑍴ς +-Ⴄ0\u0663.𑍴Σ; -Ⴄ0\u0663.𑍴σ; [B1, V3, V5, V6]; xn---0-iyd216h.xn--4xa9120l; ; ; # -Ⴄ0٣.𑍴σ +-ⴄ0\u0663.𑍴σ; ; [B1, V3, V5]; xn---0-iyd8660b.xn--4xa9120l; ; ; # -ⴄ0٣.𑍴σ +xn---0-iyd8660b.xn--4xa9120l; -ⴄ0\u0663.𑍴σ; [B1, V3, V5]; xn---0-iyd8660b.xn--4xa9120l; ; ; # -ⴄ0٣.𑍴σ +xn---0-iyd216h.xn--4xa9120l; -Ⴄ0\u0663.𑍴σ; [B1, V3, V5, V6]; xn---0-iyd216h.xn--4xa9120l; ; ; # -Ⴄ0٣.𑍴σ +xn---0-iyd8660b.xn--3xa1220l; -ⴄ0\u0663.𑍴ς; [B1, V3, V5]; xn---0-iyd8660b.xn--3xa1220l; ; ; # -ⴄ0٣.𑍴ς +xn---0-iyd216h.xn--3xa1220l; -Ⴄ0\u0663.𑍴ς; [B1, V3, V5, V6]; xn---0-iyd216h.xn--3xa1220l; ; ; # -Ⴄ0٣.𑍴ς +-ⴄ𝟢\u0663.𑍴ς; -ⴄ0\u0663.𑍴ς; [B1, V3, V5]; xn---0-iyd8660b.xn--3xa1220l; ; xn---0-iyd8660b.xn--4xa9120l; # -ⴄ0٣.𑍴ς +-Ⴄ𝟢\u0663.𑍴Σ; -Ⴄ0\u0663.𑍴σ; [B1, V3, V5, V6]; xn---0-iyd216h.xn--4xa9120l; ; ; # -Ⴄ0٣.𑍴σ +-ⴄ𝟢\u0663.𑍴σ; -ⴄ0\u0663.𑍴σ; [B1, V3, V5]; xn---0-iyd8660b.xn--4xa9120l; ; ; # -ⴄ0٣.𑍴σ +。-; .-; [V3, V6]; xn--xm38e.-; ; ; # .- +xn--xm38e.-; .-; [V3, V6]; xn--xm38e.-; ; ; # .- +⋠𐋮.\u0F18ß≯; ⋠𐋮.\u0F18ß≯; [V6]; xn--pgh4639f.xn--zca593eo6oc013y; ; xn--pgh4639f.xn--ss-ifj426nle504a; # ⋠𐋮.༘ß≯ +≼\u0338𐋮.\u0F18ß>\u0338; ⋠𐋮.\u0F18ß≯; [V6]; xn--pgh4639f.xn--zca593eo6oc013y; ; xn--pgh4639f.xn--ss-ifj426nle504a; # ⋠𐋮.༘ß≯ +⋠𐋮.\u0F18ß≯; ; [V6]; xn--pgh4639f.xn--zca593eo6oc013y; ; xn--pgh4639f.xn--ss-ifj426nle504a; # ⋠𐋮.༘ß≯ +≼\u0338𐋮.\u0F18ß>\u0338; ⋠𐋮.\u0F18ß≯; [V6]; xn--pgh4639f.xn--zca593eo6oc013y; ; xn--pgh4639f.xn--ss-ifj426nle504a; # ⋠𐋮.༘ß≯ +≼\u0338𐋮.\u0F18SS>\u0338; ⋠𐋮.\u0F18ss≯; [V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # ⋠𐋮.༘ss≯ +⋠𐋮.\u0F18SS≯; ⋠𐋮.\u0F18ss≯; [V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # ⋠𐋮.༘ss≯ +⋠𐋮.\u0F18ss≯; ; [V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # ⋠𐋮.༘ss≯ +≼\u0338𐋮.\u0F18ss>\u0338; ⋠𐋮.\u0F18ss≯; [V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # ⋠𐋮.༘ss≯ +≼\u0338𐋮.\u0F18Ss>\u0338; ⋠𐋮.\u0F18ss≯; [V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # ⋠𐋮.༘ss≯ +⋠𐋮.\u0F18Ss≯; ⋠𐋮.\u0F18ss≯; [V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # ⋠𐋮.༘ss≯ +xn--pgh4639f.xn--ss-ifj426nle504a; ⋠𐋮.\u0F18ss≯; [V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # ⋠𐋮.༘ss≯ +xn--pgh4639f.xn--zca593eo6oc013y; ⋠𐋮.\u0F18ß≯; [V6]; xn--pgh4639f.xn--zca593eo6oc013y; ; ; # ⋠𐋮.༘ß≯ +≼\u0338𐋮.\u0F18SS>\u0338; ⋠𐋮.\u0F18ss≯; [V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # ⋠𐋮.༘ss≯ +⋠𐋮.\u0F18SS≯; ⋠𐋮.\u0F18ss≯; [V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # ⋠𐋮.༘ss≯ +⋠𐋮.\u0F18ss≯; ⋠𐋮.\u0F18ss≯; [V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # ⋠𐋮.༘ss≯ +≼\u0338𐋮.\u0F18ss>\u0338; ⋠𐋮.\u0F18ss≯; [V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # ⋠𐋮.༘ss≯ +≼\u0338𐋮.\u0F18Ss>\u0338; ⋠𐋮.\u0F18ss≯; [V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # ⋠𐋮.༘ss≯ +⋠𐋮.\u0F18Ss≯; ⋠𐋮.\u0F18ss≯; [V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # ⋠𐋮.༘ss≯ +1𐋸\u0664。\uFBA4; 1𐋸\u0664.\u06C0; [B1, V6]; xn--1-hqc3905q.xn--zkb83268gqee4a; ; ; # 1𐋸٤.ۀ +1𐋸\u0664。\u06C0; 1𐋸\u0664.\u06C0; [B1, V6]; xn--1-hqc3905q.xn--zkb83268gqee4a; ; ; # 1𐋸٤.ۀ +1𐋸\u0664。\u06D5\u0654; 1𐋸\u0664.\u06C0; [B1, V6]; xn--1-hqc3905q.xn--zkb83268gqee4a; ; ; # 1𐋸٤.ۀ +xn--1-hqc3905q.xn--zkb83268gqee4a; 1𐋸\u0664.\u06C0; [B1, V6]; xn--1-hqc3905q.xn--zkb83268gqee4a; ; ; # 1𐋸٤.ۀ +儭-。𐹴Ⴢ\u200C; 儭-.𐹴Ⴢ\u200C; [B1, B6, C1, V3, V6]; xn----gz7a.xn--6nd249ejl4pusr7b; ; xn----gz7a.xn--6nd5001kyw98a; [B1, B6, V3, V6] # 儭-.𐹴Ⴢ +儭-。𐹴Ⴢ\u200C; 儭-.𐹴Ⴢ\u200C; [B1, B6, C1, V3, V6]; xn----gz7a.xn--6nd249ejl4pusr7b; ; xn----gz7a.xn--6nd5001kyw98a; [B1, B6, V3, V6] # 儭-.𐹴Ⴢ +儭-。𐹴ⴢ\u200C; 儭-.𐹴ⴢ\u200C; [B1, B6, C1, V3, V6]; xn----gz7a.xn--0ug472cfq0pus98b; ; xn----gz7a.xn--qlj9223eywx0b; [B1, B6, V3, V6] # 儭-.𐹴ⴢ +xn----gz7a.xn--qlj9223eywx0b; 儭-.𐹴ⴢ; [B1, B6, V3, V6]; xn----gz7a.xn--qlj9223eywx0b; ; ; # 儭-.𐹴ⴢ +xn----gz7a.xn--0ug472cfq0pus98b; 儭-.𐹴ⴢ\u200C; [B1, B6, C1, V3, V6]; xn----gz7a.xn--0ug472cfq0pus98b; ; ; # 儭-.𐹴ⴢ +xn----gz7a.xn--6nd5001kyw98a; 儭-.𐹴Ⴢ; [B1, B6, V3, V6]; xn----gz7a.xn--6nd5001kyw98a; ; ; # 儭-.𐹴Ⴢ +xn----gz7a.xn--6nd249ejl4pusr7b; 儭-.𐹴Ⴢ\u200C; [B1, B6, C1, V3, V6]; xn----gz7a.xn--6nd249ejl4pusr7b; ; ; # 儭-.𐹴Ⴢ +儭-。𐹴ⴢ\u200C; 儭-.𐹴ⴢ\u200C; [B1, B6, C1, V3, V6]; xn----gz7a.xn--0ug472cfq0pus98b; ; xn----gz7a.xn--qlj9223eywx0b; [B1, B6, V3, V6] # 儭-.𐹴ⴢ +𝟺𐋷\u06B9.𞤭; 4𐋷\u06B9.𞤭; [B1, B2, B3, V6]; xn--4-cvc5384q.xn--le6hi7322b; ; ; # 4𐋷ڹ.𞤭 +4𐋷\u06B9.𞤭; ; [B1, B2, B3, V6]; xn--4-cvc5384q.xn--le6hi7322b; ; ; # 4𐋷ڹ.𞤭 +4𐋷\u06B9.𞤋; 4𐋷\u06B9.𞤭; [B1, B2, B3, V6]; xn--4-cvc5384q.xn--le6hi7322b; ; ; # 4𐋷ڹ.𞤭 +xn--4-cvc5384q.xn--le6hi7322b; 4𐋷\u06B9.𞤭; [B1, B2, B3, V6]; xn--4-cvc5384q.xn--le6hi7322b; ; ; # 4𐋷ڹ.𞤭 +𝟺𐋷\u06B9.𞤋; 4𐋷\u06B9.𞤭; [B1, B2, B3, V6]; xn--4-cvc5384q.xn--le6hi7322b; ; ; # 4𐋷ڹ.𞤭 +≯-ꡋ𑲣.⒈𐹭; ; [B1, V6]; xn----ogox061d5i8d.xn--tsh0666f; ; ; # ≯-ꡋ𑲣.⒈𐹭 +>\u0338-ꡋ𑲣.⒈𐹭; ≯-ꡋ𑲣.⒈𐹭; [B1, V6]; xn----ogox061d5i8d.xn--tsh0666f; ; ; # ≯-ꡋ𑲣.⒈𐹭 +≯-ꡋ𑲣.1.𐹭; ; [B1]; xn----ogox061d5i8d.1.xn--lo0d; ; ; # ≯-ꡋ𑲣.1.𐹭 +>\u0338-ꡋ𑲣.1.𐹭; ≯-ꡋ𑲣.1.𐹭; [B1]; xn----ogox061d5i8d.1.xn--lo0d; ; ; # ≯-ꡋ𑲣.1.𐹭 +xn----ogox061d5i8d.1.xn--lo0d; ≯-ꡋ𑲣.1.𐹭; [B1]; xn----ogox061d5i8d.1.xn--lo0d; ; ; # ≯-ꡋ𑲣.1.𐹭 +xn----ogox061d5i8d.xn--tsh0666f; ≯-ꡋ𑲣.⒈𐹭; [B1, V6]; xn----ogox061d5i8d.xn--tsh0666f; ; ; # ≯-ꡋ𑲣.⒈𐹭 +\u0330.蚀; \u0330.蚀; [V5, V6]; xn--xta.xn--e91aw9417e; ; ; # ̰.蚀 +\u0330.蚀; ; [V5, V6]; xn--xta.xn--e91aw9417e; ; ; # ̰.蚀 +xn--xta.xn--e91aw9417e; \u0330.蚀; [V5, V6]; xn--xta.xn--e91aw9417e; ; ; # ̰.蚀 +\uFB39Ⴘ.𞡼𑇀ß\u20D7; \u05D9\u05BCႸ.𞡼𑇀ß\u20D7; [B2, B3, V6]; xn--kdb1d867b.xn--zca284nhg9nrrxg; ; xn--kdb1d867b.xn--ss-yju5690ken9h; # יּႸ.𞡼𑇀ß⃗ +\u05D9\u05BCႸ.𞡼𑇀ß\u20D7; ; [B2, B3, V6]; xn--kdb1d867b.xn--zca284nhg9nrrxg; ; xn--kdb1d867b.xn--ss-yju5690ken9h; # יּႸ.𞡼𑇀ß⃗ +\u05D9\u05BCⴘ.𞡼𑇀ß\u20D7; ; [B2, B3]; xn--kdb1d278n.xn--zca284nhg9nrrxg; ; xn--kdb1d278n.xn--ss-yju5690ken9h; # יּⴘ.𞡼𑇀ß⃗ +\u05D9\u05BCႸ.𞡼𑇀SS\u20D7; \u05D9\u05BCႸ.𞡼𑇀ss\u20D7; [B2, B3, V6]; xn--kdb1d867b.xn--ss-yju5690ken9h; ; ; # יּႸ.𞡼𑇀ss⃗ +\u05D9\u05BCⴘ.𞡼𑇀ss\u20D7; ; [B2, B3]; xn--kdb1d278n.xn--ss-yju5690ken9h; ; ; # יּⴘ.𞡼𑇀ss⃗ +xn--kdb1d278n.xn--ss-yju5690ken9h; \u05D9\u05BCⴘ.𞡼𑇀ss\u20D7; [B2, B3]; xn--kdb1d278n.xn--ss-yju5690ken9h; ; ; # יּⴘ.𞡼𑇀ss⃗ +xn--kdb1d867b.xn--ss-yju5690ken9h; \u05D9\u05BCႸ.𞡼𑇀ss\u20D7; [B2, B3, V6]; xn--kdb1d867b.xn--ss-yju5690ken9h; ; ; # יּႸ.𞡼𑇀ss⃗ +xn--kdb1d278n.xn--zca284nhg9nrrxg; \u05D9\u05BCⴘ.𞡼𑇀ß\u20D7; [B2, B3]; xn--kdb1d278n.xn--zca284nhg9nrrxg; ; ; # יּⴘ.𞡼𑇀ß⃗ +xn--kdb1d867b.xn--zca284nhg9nrrxg; \u05D9\u05BCႸ.𞡼𑇀ß\u20D7; [B2, B3, V6]; xn--kdb1d867b.xn--zca284nhg9nrrxg; ; ; # יּႸ.𞡼𑇀ß⃗ +\uFB39ⴘ.𞡼𑇀ß\u20D7; \u05D9\u05BCⴘ.𞡼𑇀ß\u20D7; [B2, B3]; xn--kdb1d278n.xn--zca284nhg9nrrxg; ; xn--kdb1d278n.xn--ss-yju5690ken9h; # יּⴘ.𞡼𑇀ß⃗ +\uFB39Ⴘ.𞡼𑇀SS\u20D7; \u05D9\u05BCႸ.𞡼𑇀ss\u20D7; [B2, B3, V6]; xn--kdb1d867b.xn--ss-yju5690ken9h; ; ; # יּႸ.𞡼𑇀ss⃗ +\uFB39ⴘ.𞡼𑇀ss\u20D7; \u05D9\u05BCⴘ.𞡼𑇀ss\u20D7; [B2, B3]; xn--kdb1d278n.xn--ss-yju5690ken9h; ; ; # יּⴘ.𞡼𑇀ss⃗ +\u05D9\u05BCႸ.𞡼𑇀ss\u20D7; ; [B2, B3, V6]; xn--kdb1d867b.xn--ss-yju5690ken9h; ; ; # יּႸ.𞡼𑇀ss⃗ +\uFB39Ⴘ.𞡼𑇀ss\u20D7; \u05D9\u05BCႸ.𞡼𑇀ss\u20D7; [B2, B3, V6]; xn--kdb1d867b.xn--ss-yju5690ken9h; ; ; # יּႸ.𞡼𑇀ss⃗ +\u1BA3𐹰。凬; \u1BA3𐹰.凬; [B1, V5, V6]; xn--rxfz314ilg20c.xn--t9q; ; ; # ᮣ𐹰.凬 +\u1BA3𐹰。凬; \u1BA3𐹰.凬; [B1, V5, V6]; xn--rxfz314ilg20c.xn--t9q; ; ; # ᮣ𐹰.凬 +xn--rxfz314ilg20c.xn--t9q; \u1BA3𐹰.凬; [B1, V5, V6]; xn--rxfz314ilg20c.xn--t9q; ; ; # ᮣ𐹰.凬 +🢟🄈\u200Dꡎ。\u0F84; 🢟🄈\u200Dꡎ.\u0F84; [C2, V5, V6]; xn--1ug4874cfd0kbmg.xn--3ed; ; xn--nc9aq743ds0e.xn--3ed; [V5, V6] # 🢟🄈ꡎ.྄ +🢟7,\u200Dꡎ。\u0F84; 🢟7,\u200Dꡎ.\u0F84; [C2, V5, V6]; xn--7,-n1t0654eqo3o.xn--3ed; ; xn--7,-gh9hg322i.xn--3ed; [V5, V6] # 🢟7,ꡎ.྄ +xn--7,-gh9hg322i.xn--3ed; 🢟7,ꡎ.\u0F84; [V5, V6]; xn--7,-gh9hg322i.xn--3ed; ; ; # 🢟7,ꡎ.྄ +xn--7,-n1t0654eqo3o.xn--3ed; 🢟7,\u200Dꡎ.\u0F84; [C2, V5, V6]; xn--7,-n1t0654eqo3o.xn--3ed; ; ; # 🢟7,ꡎ.྄ +xn--nc9aq743ds0e.xn--3ed; 🢟🄈ꡎ.\u0F84; [V5, V6]; xn--nc9aq743ds0e.xn--3ed; ; ; # 🢟🄈ꡎ.྄ +xn--1ug4874cfd0kbmg.xn--3ed; 🢟🄈\u200Dꡎ.\u0F84; [C2, V5, V6]; xn--1ug4874cfd0kbmg.xn--3ed; ; ; # 🢟🄈ꡎ.྄ +ꡔ。\u1039ᢇ; ꡔ.\u1039ᢇ; [V5]; xn--tc9a.xn--9jd663b; ; ; # ꡔ.္ᢇ +xn--tc9a.xn--9jd663b; ꡔ.\u1039ᢇ; [V5]; xn--tc9a.xn--9jd663b; ; ; # ꡔ.္ᢇ +\u20EB≮.𝨖; ; [V5]; xn--e1g71d.xn--772h; ; ; # ⃫≮.𝨖 +\u20EB<\u0338.𝨖; \u20EB≮.𝨖; [V5]; xn--e1g71d.xn--772h; ; ; # ⃫≮.𝨖 +xn--e1g71d.xn--772h; \u20EB≮.𝨖; [V5]; xn--e1g71d.xn--772h; ; ; # ⃫≮.𝨖 +Ⴢ≯褦.ᠪ\u07EAႾ\u0767; Ⴢ≯褦.ᠪ\u07EAႾ\u0767; [B5, B6, V6]; xn--6nd461g478e.xn--rpb5x49td2h; ; ; # Ⴢ≯褦.ᠪߪႾݧ +Ⴢ>\u0338褦.ᠪ\u07EAႾ\u0767; Ⴢ≯褦.ᠪ\u07EAႾ\u0767; [B5, B6, V6]; xn--6nd461g478e.xn--rpb5x49td2h; ; ; # Ⴢ≯褦.ᠪߪႾݧ +Ⴢ≯褦.ᠪ\u07EAႾ\u0767; ; [B5, B6, V6]; xn--6nd461g478e.xn--rpb5x49td2h; ; ; # Ⴢ≯褦.ᠪߪႾݧ +Ⴢ>\u0338褦.ᠪ\u07EAႾ\u0767; Ⴢ≯褦.ᠪ\u07EAႾ\u0767; [B5, B6, V6]; xn--6nd461g478e.xn--rpb5x49td2h; ; ; # Ⴢ≯褦.ᠪߪႾݧ +ⴢ>\u0338褦.ᠪ\u07EAⴞ\u0767; ⴢ≯褦.ᠪ\u07EAⴞ\u0767; [B5, B6]; xn--hdh433bev8e.xn--rpb5x392bcyt; ; ; # ⴢ≯褦.ᠪߪⴞݧ +ⴢ≯褦.ᠪ\u07EAⴞ\u0767; ; [B5, B6]; xn--hdh433bev8e.xn--rpb5x392bcyt; ; ; # ⴢ≯褦.ᠪߪⴞݧ +Ⴢ≯褦.ᠪ\u07EAⴞ\u0767; ; [B5, B6, V6]; xn--6nd461g478e.xn--rpb5x392bcyt; ; ; # Ⴢ≯褦.ᠪߪⴞݧ +Ⴢ>\u0338褦.ᠪ\u07EAⴞ\u0767; Ⴢ≯褦.ᠪ\u07EAⴞ\u0767; [B5, B6, V6]; xn--6nd461g478e.xn--rpb5x392bcyt; ; ; # Ⴢ≯褦.ᠪߪⴞݧ +xn--6nd461g478e.xn--rpb5x392bcyt; Ⴢ≯褦.ᠪ\u07EAⴞ\u0767; [B5, B6, V6]; xn--6nd461g478e.xn--rpb5x392bcyt; ; ; # Ⴢ≯褦.ᠪߪⴞݧ +xn--hdh433bev8e.xn--rpb5x392bcyt; ⴢ≯褦.ᠪ\u07EAⴞ\u0767; [B5, B6]; xn--hdh433bev8e.xn--rpb5x392bcyt; ; ; # ⴢ≯褦.ᠪߪⴞݧ +xn--6nd461g478e.xn--rpb5x49td2h; Ⴢ≯褦.ᠪ\u07EAႾ\u0767; [B5, B6, V6]; xn--6nd461g478e.xn--rpb5x49td2h; ; ; # Ⴢ≯褦.ᠪߪႾݧ +ⴢ>\u0338褦.ᠪ\u07EAⴞ\u0767; ⴢ≯褦.ᠪ\u07EAⴞ\u0767; [B5, B6]; xn--hdh433bev8e.xn--rpb5x392bcyt; ; ; # ⴢ≯褦.ᠪߪⴞݧ +ⴢ≯褦.ᠪ\u07EAⴞ\u0767; ⴢ≯褦.ᠪ\u07EAⴞ\u0767; [B5, B6]; xn--hdh433bev8e.xn--rpb5x392bcyt; ; ; # ⴢ≯褦.ᠪߪⴞݧ +Ⴢ≯褦.ᠪ\u07EAⴞ\u0767; Ⴢ≯褦.ᠪ\u07EAⴞ\u0767; [B5, B6, V6]; xn--6nd461g478e.xn--rpb5x392bcyt; ; ; # Ⴢ≯褦.ᠪߪⴞݧ +Ⴢ>\u0338褦.ᠪ\u07EAⴞ\u0767; Ⴢ≯褦.ᠪ\u07EAⴞ\u0767; [B5, B6, V6]; xn--6nd461g478e.xn--rpb5x392bcyt; ; ; # Ⴢ≯褦.ᠪߪⴞݧ +󠆒\u200C\uA953。𞤙\u067Bꡘ; \u200C\uA953.𞤻\u067Bꡘ; [B2, B3, C1, V6]; xn--0ug8815chtz0e.xn--0ib8893fegvj; ; xn--3j9al6189a.xn--0ib8893fegvj; [B2, B3, V6] # ꥓.𞤻ٻꡘ +󠆒\u200C\uA953。𞤻\u067Bꡘ; \u200C\uA953.𞤻\u067Bꡘ; [B2, B3, C1, V6]; xn--0ug8815chtz0e.xn--0ib8893fegvj; ; xn--3j9al6189a.xn--0ib8893fegvj; [B2, B3, V6] # ꥓.𞤻ٻꡘ +xn--3j9al6189a.xn--0ib8893fegvj; \uA953.𞤻\u067Bꡘ; [B2, B3, V6]; xn--3j9al6189a.xn--0ib8893fegvj; ; ; # ꥓.𞤻ٻꡘ +xn--0ug8815chtz0e.xn--0ib8893fegvj; \u200C\uA953.𞤻\u067Bꡘ; [B2, B3, C1, V6]; xn--0ug8815chtz0e.xn--0ib8893fegvj; ; ; # ꥓.𞤻ٻꡘ +\u200C.≯; ; [C1]; xn--0ug.xn--hdh; ; .xn--hdh; [A4_2] # .≯ +\u200C.>\u0338; \u200C.≯; [C1]; xn--0ug.xn--hdh; ; .xn--hdh; [A4_2] # .≯ +.xn--hdh; .≯; [X4_2]; .xn--hdh; [A4_2]; ; # .≯ +xn--0ug.xn--hdh; \u200C.≯; [C1]; xn--0ug.xn--hdh; ; ; # .≯ +𰅧-.\uABED-悜; 𰅧-.\uABED-悜; [V3, V5, V6]; xn----7m53aj640l.xn----8f4br83t; ; ; # 𰅧-.꯭-悜 +𰅧-.\uABED-悜; ; [V3, V5, V6]; xn----7m53aj640l.xn----8f4br83t; ; ; # 𰅧-.꯭-悜 +xn----7m53aj640l.xn----8f4br83t; 𰅧-.\uABED-悜; [V3, V5, V6]; xn----7m53aj640l.xn----8f4br83t; ; ; # 𰅧-.꯭-悜 +ᡉ⬞ᢜ.-\u200D𞣑\u202E; ; [C2, V3, V6]; xn--87e0ol04cdl39e.xn----ugn5e3763s; ; xn--87e0ol04cdl39e.xn----qinu247r; [V3, V6] # ᡉ⬞ᢜ.-𞣑 +xn--87e0ol04cdl39e.xn----qinu247r; ᡉ⬞ᢜ.-𞣑\u202E; [V3, V6]; xn--87e0ol04cdl39e.xn----qinu247r; ; ; # ᡉ⬞ᢜ.-𞣑 +xn--87e0ol04cdl39e.xn----ugn5e3763s; ᡉ⬞ᢜ.-\u200D𞣑\u202E; [C2, V3, V6]; xn--87e0ol04cdl39e.xn----ugn5e3763s; ; ; # ᡉ⬞ᢜ.-𞣑 +⒐\u200C衃Ⴝ.\u0682Ⴔ; ; [B1, B2, B3, C1, V6]; xn--1nd159ecmd785k.xn--7ib433c; ; xn--1nd362hy16e.xn--7ib433c; [B1, B2, B3, V6] # ⒐衃Ⴝ.ڂႴ +9.\u200C衃Ⴝ.\u0682Ⴔ; ; [B1, B2, B3, C1, V6]; 9.xn--1nd159e1y2f.xn--7ib433c; ; 9.xn--1nd9032d.xn--7ib433c; [B1, B2, B3, V6] # 9.衃Ⴝ.ڂႴ +9.\u200C衃ⴝ.\u0682ⴔ; ; [B1, B2, B3, C1]; 9.xn--0ug862cbm5e.xn--7ib268q; ; 9.xn--llj1920a.xn--7ib268q; [B1, B2, B3] # 9.衃ⴝ.ڂⴔ +9.\u200C衃Ⴝ.\u0682ⴔ; ; [B1, B2, B3, C1, V6]; 9.xn--1nd159e1y2f.xn--7ib268q; ; 9.xn--1nd9032d.xn--7ib268q; [B1, B2, B3, V6] # 9.衃Ⴝ.ڂⴔ +9.xn--1nd9032d.xn--7ib268q; 9.衃Ⴝ.\u0682ⴔ; [B1, B2, B3, V6]; 9.xn--1nd9032d.xn--7ib268q; ; ; # 9.衃Ⴝ.ڂⴔ +9.xn--1nd159e1y2f.xn--7ib268q; 9.\u200C衃Ⴝ.\u0682ⴔ; [B1, B2, B3, C1, V6]; 9.xn--1nd159e1y2f.xn--7ib268q; ; ; # 9.衃Ⴝ.ڂⴔ +9.xn--llj1920a.xn--7ib268q; 9.衃ⴝ.\u0682ⴔ; [B1, B2, B3]; 9.xn--llj1920a.xn--7ib268q; ; ; # 9.衃ⴝ.ڂⴔ +9.xn--0ug862cbm5e.xn--7ib268q; 9.\u200C衃ⴝ.\u0682ⴔ; [B1, B2, B3, C1]; 9.xn--0ug862cbm5e.xn--7ib268q; ; ; # 9.衃ⴝ.ڂⴔ +9.xn--1nd9032d.xn--7ib433c; 9.衃Ⴝ.\u0682Ⴔ; [B1, B2, B3, V6]; 9.xn--1nd9032d.xn--7ib433c; ; ; # 9.衃Ⴝ.ڂႴ +9.xn--1nd159e1y2f.xn--7ib433c; 9.\u200C衃Ⴝ.\u0682Ⴔ; [B1, B2, B3, C1, V6]; 9.xn--1nd159e1y2f.xn--7ib433c; ; ; # 9.衃Ⴝ.ڂႴ +⒐\u200C衃ⴝ.\u0682ⴔ; ; [B1, B2, B3, C1, V6]; xn--0ugx0px1izu2h.xn--7ib268q; ; xn--1shy52abz3f.xn--7ib268q; [B1, B2, B3, V6] # ⒐衃ⴝ.ڂⴔ +⒐\u200C衃Ⴝ.\u0682ⴔ; ; [B1, B2, B3, C1, V6]; xn--1nd159ecmd785k.xn--7ib268q; ; xn--1nd362hy16e.xn--7ib268q; [B1, B2, B3, V6] # ⒐衃Ⴝ.ڂⴔ +xn--1nd362hy16e.xn--7ib268q; ⒐衃Ⴝ.\u0682ⴔ; [B1, B2, B3, V6]; xn--1nd362hy16e.xn--7ib268q; ; ; # ⒐衃Ⴝ.ڂⴔ +xn--1nd159ecmd785k.xn--7ib268q; ⒐\u200C衃Ⴝ.\u0682ⴔ; [B1, B2, B3, C1, V6]; xn--1nd159ecmd785k.xn--7ib268q; ; ; # ⒐衃Ⴝ.ڂⴔ +xn--1shy52abz3f.xn--7ib268q; ⒐衃ⴝ.\u0682ⴔ; [B1, B2, B3, V6]; xn--1shy52abz3f.xn--7ib268q; ; ; # ⒐衃ⴝ.ڂⴔ +xn--0ugx0px1izu2h.xn--7ib268q; ⒐\u200C衃ⴝ.\u0682ⴔ; [B1, B2, B3, C1, V6]; xn--0ugx0px1izu2h.xn--7ib268q; ; ; # ⒐衃ⴝ.ڂⴔ +xn--1nd362hy16e.xn--7ib433c; ⒐衃Ⴝ.\u0682Ⴔ; [B1, B2, B3, V6]; xn--1nd362hy16e.xn--7ib433c; ; ; # ⒐衃Ⴝ.ڂႴ +xn--1nd159ecmd785k.xn--7ib433c; ⒐\u200C衃Ⴝ.\u0682Ⴔ; [B1, B2, B3, C1, V6]; xn--1nd159ecmd785k.xn--7ib433c; ; ; # ⒐衃Ⴝ.ڂႴ +\u07E1\u200C。--⸬; \u07E1\u200C.--⸬; [B1, B3, C1, V3]; xn--8sb884j.xn-----iw2a; ; xn--8sb.xn-----iw2a; [B1, V3] # ߡ.--⸬ +xn--8sb.xn-----iw2a; \u07E1.--⸬; [B1, V3]; xn--8sb.xn-----iw2a; ; ; # ߡ.--⸬ +xn--8sb884j.xn-----iw2a; \u07E1\u200C.--⸬; [B1, B3, C1, V3]; xn--8sb884j.xn-----iw2a; ; ; # ߡ.--⸬ +𞥓.\u0718; 𞥓.\u0718; ; xn--of6h.xn--inb; ; ; # 𞥓.ܘ +𞥓.\u0718; ; ; xn--of6h.xn--inb; ; ; # 𞥓.ܘ +xn--of6h.xn--inb; 𞥓.\u0718; ; xn--of6h.xn--inb; ; ; # 𞥓.ܘ +󠄽-.-\u0DCA; -.-\u0DCA; [V3]; -.xn----ptf; ; ; # -.-් +󠄽-.-\u0DCA; -.-\u0DCA; [V3]; -.xn----ptf; ; ; # -.-් +-.xn----ptf; -.-\u0DCA; [V3]; -.xn----ptf; ; ; # -.-් +󠇝\u075B-.\u1927; \u075B-.\u1927; [B1, B3, V3, V5]; xn----k4c.xn--lff; ; ; # ݛ-.ᤧ +xn----k4c.xn--lff; \u075B-.\u1927; [B1, B3, V3, V5]; xn----k4c.xn--lff; ; ; # ݛ-.ᤧ +𞤴󠆹⦉𐹺.\uA806⒌; 𞤴⦉𐹺.\uA806⒌; [B1, V5, V6]; xn--fuix729epewf.xn--xsh5029b6e77i; ; ; # 𞤴⦉𐹺.꠆⒌ +𞤴󠆹⦉𐹺.\uA8065.; 𞤴⦉𐹺.\uA8065.; [B1, V5, V6]; xn--fuix729epewf.xn--5-w93e.xn--7b83e; ; ; # 𞤴⦉𐹺.꠆5. +𞤒󠆹⦉𐹺.\uA8065.; 𞤴⦉𐹺.\uA8065.; [B1, V5, V6]; xn--fuix729epewf.xn--5-w93e.xn--7b83e; ; ; # 𞤴⦉𐹺.꠆5. +xn--fuix729epewf.xn--5-w93e.xn--7b83e; 𞤴⦉𐹺.\uA8065.; [B1, V5, V6]; xn--fuix729epewf.xn--5-w93e.xn--7b83e; ; ; # 𞤴⦉𐹺.꠆5. +𞤒󠆹⦉𐹺.\uA806⒌; 𞤴⦉𐹺.\uA806⒌; [B1, V5, V6]; xn--fuix729epewf.xn--xsh5029b6e77i; ; ; # 𞤴⦉𐹺.꠆⒌ +xn--fuix729epewf.xn--xsh5029b6e77i; 𞤴⦉𐹺.\uA806⒌; [B1, V5, V6]; xn--fuix729epewf.xn--xsh5029b6e77i; ; ; # 𞤴⦉𐹺.꠆⒌ +󠄸₀。𑖿\u200C𐦂\u200D; 0.𑖿\u200C𐦂\u200D; [B1, C2, V5]; 0.xn--0ugc8040p9hk; ; 0.xn--mn9cz2s; [B1, V5] # 0.𑖿𐦂 +󠄸0。𑖿\u200C𐦂\u200D; 0.𑖿\u200C𐦂\u200D; [B1, C2, V5]; 0.xn--0ugc8040p9hk; ; 0.xn--mn9cz2s; [B1, V5] # 0.𑖿𐦂 +0.xn--mn9cz2s; 0.𑖿𐦂; [B1, V5]; 0.xn--mn9cz2s; ; ; # 0.𑖿𐦂 +0.xn--0ugc8040p9hk; 0.𑖿\u200C𐦂\u200D; [B1, C2, V5]; 0.xn--0ugc8040p9hk; ; ; # 0.𑖿𐦂 +Ⴚ𐋸󠄄。𝟝ퟶ\u103A; Ⴚ𐋸.5ퟶ\u103A; [V6]; xn--ynd2415j.xn--5-dug9054m; ; ; # Ⴚ𐋸.5ퟶ် +Ⴚ𐋸󠄄。5ퟶ\u103A; Ⴚ𐋸.5ퟶ\u103A; [V6]; xn--ynd2415j.xn--5-dug9054m; ; ; # Ⴚ𐋸.5ퟶ် +ⴚ𐋸󠄄。5ퟶ\u103A; ⴚ𐋸.5ퟶ\u103A; ; xn--ilj2659d.xn--5-dug9054m; ; ; # ⴚ𐋸.5ퟶ် +xn--ilj2659d.xn--5-dug9054m; ⴚ𐋸.5ퟶ\u103A; ; xn--ilj2659d.xn--5-dug9054m; ; ; # ⴚ𐋸.5ퟶ် +ⴚ𐋸.5ퟶ\u103A; ; ; xn--ilj2659d.xn--5-dug9054m; ; ; # ⴚ𐋸.5ퟶ် +Ⴚ𐋸.5ퟶ\u103A; ; [V6]; xn--ynd2415j.xn--5-dug9054m; ; ; # Ⴚ𐋸.5ퟶ် +xn--ynd2415j.xn--5-dug9054m; Ⴚ𐋸.5ퟶ\u103A; [V6]; xn--ynd2415j.xn--5-dug9054m; ; ; # Ⴚ𐋸.5ퟶ် +ⴚ𐋸󠄄。𝟝ퟶ\u103A; ⴚ𐋸.5ퟶ\u103A; ; xn--ilj2659d.xn--5-dug9054m; ; ; # ⴚ𐋸.5ퟶ် +\u200D-ᠹ﹪.\u1DE1\u1922; ; [C2, V5, V6]; xn----c6j614b1z4v.xn--gff52t; ; xn----c6jx047j.xn--gff52t; [V3, V5, V6] # -ᠹ﹪.ᷡᤢ +\u200D-ᠹ%.\u1DE1\u1922; ; [C2, V5, V6]; xn---%-u4oy48b.xn--gff52t; ; xn---%-u4o.xn--gff52t; [V3, V5, V6] # -ᠹ%.ᷡᤢ +xn---%-u4o.xn--gff52t; -ᠹ%.\u1DE1\u1922; [V3, V5, V6]; xn---%-u4o.xn--gff52t; ; ; # -ᠹ%.ᷡᤢ +xn---%-u4oy48b.xn--gff52t; \u200D-ᠹ%.\u1DE1\u1922; [C2, V5, V6]; xn---%-u4oy48b.xn--gff52t; ; ; # -ᠹ%.ᷡᤢ +xn----c6jx047j.xn--gff52t; -ᠹ﹪.\u1DE1\u1922; [V3, V5, V6]; xn----c6jx047j.xn--gff52t; ; ; # -ᠹ﹪.ᷡᤢ +xn----c6j614b1z4v.xn--gff52t; \u200D-ᠹ﹪.\u1DE1\u1922; [C2, V5, V6]; xn----c6j614b1z4v.xn--gff52t; ; ; # -ᠹ﹪.ᷡᤢ +≠.ᠿ; ; ; xn--1ch.xn--y7e; ; ; # ≠.ᠿ +=\u0338.ᠿ; ≠.ᠿ; ; xn--1ch.xn--y7e; ; ; # ≠.ᠿ +xn--1ch.xn--y7e; ≠.ᠿ; ; xn--1ch.xn--y7e; ; ; # ≠.ᠿ +\u0723\u05A3。㌪; \u0723\u05A3.ハイツ; ; xn--ucb18e.xn--eck4c5a; ; ; # ܣ֣.ハイツ +\u0723\u05A3。ハイツ; \u0723\u05A3.ハイツ; ; xn--ucb18e.xn--eck4c5a; ; ; # ܣ֣.ハイツ +xn--ucb18e.xn--eck4c5a; \u0723\u05A3.ハイツ; ; xn--ucb18e.xn--eck4c5a; ; ; # ܣ֣.ハイツ +\u0723\u05A3.ハイツ; ; ; xn--ucb18e.xn--eck4c5a; ; ; # ܣ֣.ハイツ +󠆀≮.\u2D7F-; ≮.\u2D7F-; [B1, B3, V3, V5, V6]; xn--gdhx802p.xn----i2s; ; ; # ≮.⵿- +󠆀<\u0338.\u2D7F-; ≮.\u2D7F-; [B1, B3, V3, V5, V6]; xn--gdhx802p.xn----i2s; ; ; # ≮.⵿- +xn--gdhx802p.xn----i2s; ≮.\u2D7F-; [B1, B3, V3, V5, V6]; xn--gdhx802p.xn----i2s; ; ; # ≮.⵿- +₆榎\u0D4D。𞤅\u06ED\uFC5A; 6榎\u0D4D.𞤧\u06ED\u064A\u064A; [B1, B3, V6]; xn--6-kmf4691ejv41j.xn--mhba10ch545mn8v8h; ; ; # 6榎്.𞤧ۭيي +6榎\u0D4D。𞤅\u06ED\u064A\u064A; 6榎\u0D4D.𞤧\u06ED\u064A\u064A; [B1, B3, V6]; xn--6-kmf4691ejv41j.xn--mhba10ch545mn8v8h; ; ; # 6榎്.𞤧ۭيي +6榎\u0D4D。𞤧\u06ED\u064A\u064A; 6榎\u0D4D.𞤧\u06ED\u064A\u064A; [B1, B3, V6]; xn--6-kmf4691ejv41j.xn--mhba10ch545mn8v8h; ; ; # 6榎്.𞤧ۭيي +xn--6-kmf4691ejv41j.xn--mhba10ch545mn8v8h; 6榎\u0D4D.𞤧\u06ED\u064A\u064A; [B1, B3, V6]; xn--6-kmf4691ejv41j.xn--mhba10ch545mn8v8h; ; ; # 6榎്.𞤧ۭيي +₆榎\u0D4D。𞤧\u06ED\uFC5A; 6榎\u0D4D.𞤧\u06ED\u064A\u064A; [B1, B3, V6]; xn--6-kmf4691ejv41j.xn--mhba10ch545mn8v8h; ; ; # 6榎്.𞤧ۭيي +𣩫.; 𣩫.; [V6]; xn--td3j.xn--4628b; ; ; # 𣩫. +𣩫.; ; [V6]; xn--td3j.xn--4628b; ; ; # 𣩫. +xn--td3j.xn--4628b; 𣩫.; [V6]; xn--td3j.xn--4628b; ; ; # 𣩫. +\u200D︒。\u06B9\u200C; \u200D︒.\u06B9\u200C; [B1, B3, C1, C2, V6]; xn--1ug2658f.xn--skb080k; ; xn--y86c.xn--skb; [B1, V6] # ︒.ڹ +xn--y86c.xn--skb; ︒.\u06B9; [B1, V6]; xn--y86c.xn--skb; ; ; # ︒.ڹ +xn--1ug2658f.xn--skb080k; \u200D︒.\u06B9\u200C; [B1, B3, C1, C2, V6]; xn--1ug2658f.xn--skb080k; ; ; # ︒.ڹ +xn--skb; \u06B9; ; xn--skb; ; ; # ڹ +\u06B9; ; ; xn--skb; ; ; # ڹ +𐹦\u200C𐹶。\u206D; 𐹦\u200C𐹶.\u206D; [B1, C1, V6]; xn--0ug4994goba.xn--sxg; ; xn--eo0d6a.xn--sxg; [B1, V6] # 𐹦𐹶. +xn--eo0d6a.xn--sxg; 𐹦𐹶.\u206D; [B1, V6]; xn--eo0d6a.xn--sxg; ; ; # 𐹦𐹶. +xn--0ug4994goba.xn--sxg; 𐹦\u200C𐹶.\u206D; [B1, C1, V6]; xn--0ug4994goba.xn--sxg; ; ; # 𐹦𐹶. +\u0C4D𝨾\u05A9𝟭。-𑜨; \u0C4D𝨾\u05A91.-𑜨; [V3, V5]; xn--1-rfc312cdp45c.xn----nq0j; ; ; # ్𝨾֩1.-𑜨 +\u0C4D𝨾\u05A91。-𑜨; \u0C4D𝨾\u05A91.-𑜨; [V3, V5]; xn--1-rfc312cdp45c.xn----nq0j; ; ; # ్𝨾֩1.-𑜨 +xn--1-rfc312cdp45c.xn----nq0j; \u0C4D𝨾\u05A91.-𑜨; [V3, V5]; xn--1-rfc312cdp45c.xn----nq0j; ; ; # ్𝨾֩1.-𑜨 +。뙏; .뙏; [V6]; xn--ph26c.xn--281b; ; ; # .뙏 +。뙏; .뙏; [V6]; xn--ph26c.xn--281b; ; ; # .뙏 +xn--ph26c.xn--281b; .뙏; [V6]; xn--ph26c.xn--281b; ; ; # .뙏 +󠄌ᡀ.\u08B6; ᡀ.\u08B6; [V6]; xn--z7e98100evc01b.xn--czb; ; ; # ᡀ.ࢶ +xn--z7e98100evc01b.xn--czb; ᡀ.\u08B6; [V6]; xn--z7e98100evc01b.xn--czb; ; ; # ᡀ.ࢶ +\u200D。; \u200D.; [C2, V6]; xn--1ug.xn--6x4u; ; .xn--6x4u; [V6, A4_2] # . +\u200D。; \u200D.; [C2, V6]; xn--1ug.xn--6x4u; ; .xn--6x4u; [V6, A4_2] # . +.xn--6x4u; .; [V6, X4_2]; .xn--6x4u; [V6, A4_2]; ; # . +xn--1ug.xn--6x4u; \u200D.; [C2, V6]; xn--1ug.xn--6x4u; ; ; # . +\u084B皥.-; \u084B皥.-; [B1, B2, B3, V3]; xn--9vb4167c.-; ; ; # ࡋ皥.- +\u084B皥.-; ; [B1, B2, B3, V3]; xn--9vb4167c.-; ; ; # ࡋ皥.- +xn--9vb4167c.-; \u084B皥.-; [B1, B2, B3, V3]; xn--9vb4167c.-; ; ; # ࡋ皥.- +\u0315𐮇.⒈ꡦ; \u0315𐮇.⒈ꡦ; [B1, V6]; xn--5sa9915kgvb.xn--tshw539b; ; ; # ̕𐮇.⒈ꡦ +\u0315𐮇.1.ꡦ; ; [B1, V6]; xn--5sa9915kgvb.1.xn--cd9a; ; ; # ̕𐮇.1.ꡦ +xn--5sa9915kgvb.1.xn--cd9a; \u0315𐮇.1.ꡦ; [B1, V6]; xn--5sa9915kgvb.1.xn--cd9a; ; ; # ̕𐮇.1.ꡦ +xn--5sa9915kgvb.xn--tshw539b; \u0315𐮇.⒈ꡦ; [B1, V6]; xn--5sa9915kgvb.xn--tshw539b; ; ; # ̕𐮇.⒈ꡦ +Ⴛ\u200C\u05A2\u200D。\uFFA0ā𐹦; Ⴛ\u200C\u05A2\u200D.\uFFA0ā𐹦; [B5, B6, C1, C2, V6]; xn--tcb597cdmmfa.xn--yda9741khjj; ; xn--tcb597c.xn--yda9741khjj; [B5, B6, V6] # Ⴛ֢.ā𐹦 +Ⴛ\u200C\u05A2\u200D。\uFFA0a\u0304𐹦; Ⴛ\u200C\u05A2\u200D.\uFFA0ā𐹦; [B5, B6, C1, C2, V6]; xn--tcb597cdmmfa.xn--yda9741khjj; ; xn--tcb597c.xn--yda9741khjj; [B5, B6, V6] # Ⴛ֢.ā𐹦 +Ⴛ\u200C\u05A2\u200D。\u1160ā𐹦; Ⴛ\u200C\u05A2\u200D.\u1160ā𐹦; [B5, B6, C1, C2, V6]; xn--tcb597cdmmfa.xn--yda594fdn5q; ; xn--tcb597c.xn--yda594fdn5q; [B5, B6, V6] # Ⴛ֢.ā𐹦 +Ⴛ\u200C\u05A2\u200D。\u1160a\u0304𐹦; Ⴛ\u200C\u05A2\u200D.\u1160ā𐹦; [B5, B6, C1, C2, V6]; xn--tcb597cdmmfa.xn--yda594fdn5q; ; xn--tcb597c.xn--yda594fdn5q; [B5, B6, V6] # Ⴛ֢.ā𐹦 +ⴛ\u200C\u05A2\u200D。\u1160a\u0304𐹦; ⴛ\u200C\u05A2\u200D.\u1160ā𐹦; [B5, B6, C1, C2, V6]; xn--tcb736kea974k.xn--yda594fdn5q; ; xn--tcb323r.xn--yda594fdn5q; [B5, B6, V6] # ⴛ֢.ā𐹦 +ⴛ\u200C\u05A2\u200D。\u1160ā𐹦; ⴛ\u200C\u05A2\u200D.\u1160ā𐹦; [B5, B6, C1, C2, V6]; xn--tcb736kea974k.xn--yda594fdn5q; ; xn--tcb323r.xn--yda594fdn5q; [B5, B6, V6] # ⴛ֢.ā𐹦 +Ⴛ\u200C\u05A2\u200D。\u1160Ā𐹦; Ⴛ\u200C\u05A2\u200D.\u1160ā𐹦; [B5, B6, C1, C2, V6]; xn--tcb597cdmmfa.xn--yda594fdn5q; ; xn--tcb597c.xn--yda594fdn5q; [B5, B6, V6] # Ⴛ֢.ā𐹦 +Ⴛ\u200C\u05A2\u200D。\u1160A\u0304𐹦; Ⴛ\u200C\u05A2\u200D.\u1160ā𐹦; [B5, B6, C1, C2, V6]; xn--tcb597cdmmfa.xn--yda594fdn5q; ; xn--tcb597c.xn--yda594fdn5q; [B5, B6, V6] # Ⴛ֢.ā𐹦 +xn--tcb597c.xn--yda594fdn5q; Ⴛ\u05A2.\u1160ā𐹦; [B5, B6, V6]; xn--tcb597c.xn--yda594fdn5q; ; ; # Ⴛ֢.ā𐹦 +xn--tcb597cdmmfa.xn--yda594fdn5q; Ⴛ\u200C\u05A2\u200D.\u1160ā𐹦; [B5, B6, C1, C2, V6]; xn--tcb597cdmmfa.xn--yda594fdn5q; ; ; # Ⴛ֢.ā𐹦 +xn--tcb323r.xn--yda594fdn5q; ⴛ\u05A2.\u1160ā𐹦; [B5, B6, V6]; xn--tcb323r.xn--yda594fdn5q; ; ; # ⴛ֢.ā𐹦 +xn--tcb736kea974k.xn--yda594fdn5q; ⴛ\u200C\u05A2\u200D.\u1160ā𐹦; [B5, B6, C1, C2, V6]; xn--tcb736kea974k.xn--yda594fdn5q; ; ; # ⴛ֢.ā𐹦 +ⴛ\u200C\u05A2\u200D。\uFFA0a\u0304𐹦; ⴛ\u200C\u05A2\u200D.\uFFA0ā𐹦; [B5, B6, C1, C2, V6]; xn--tcb736kea974k.xn--yda9741khjj; ; xn--tcb323r.xn--yda9741khjj; [B5, B6, V6] # ⴛ֢.ā𐹦 +ⴛ\u200C\u05A2\u200D。\uFFA0ā𐹦; ⴛ\u200C\u05A2\u200D.\uFFA0ā𐹦; [B5, B6, C1, C2, V6]; xn--tcb736kea974k.xn--yda9741khjj; ; xn--tcb323r.xn--yda9741khjj; [B5, B6, V6] # ⴛ֢.ā𐹦 +Ⴛ\u200C\u05A2\u200D。\uFFA0Ā𐹦; Ⴛ\u200C\u05A2\u200D.\uFFA0ā𐹦; [B5, B6, C1, C2, V6]; xn--tcb597cdmmfa.xn--yda9741khjj; ; xn--tcb597c.xn--yda9741khjj; [B5, B6, V6] # Ⴛ֢.ā𐹦 +Ⴛ\u200C\u05A2\u200D。\uFFA0A\u0304𐹦; Ⴛ\u200C\u05A2\u200D.\uFFA0ā𐹦; [B5, B6, C1, C2, V6]; xn--tcb597cdmmfa.xn--yda9741khjj; ; xn--tcb597c.xn--yda9741khjj; [B5, B6, V6] # Ⴛ֢.ā𐹦 +xn--tcb597c.xn--yda9741khjj; Ⴛ\u05A2.\uFFA0ā𐹦; [B5, B6, V6]; xn--tcb597c.xn--yda9741khjj; ; ; # Ⴛ֢.ā𐹦 +xn--tcb597cdmmfa.xn--yda9741khjj; Ⴛ\u200C\u05A2\u200D.\uFFA0ā𐹦; [B5, B6, C1, C2, V6]; xn--tcb597cdmmfa.xn--yda9741khjj; ; ; # Ⴛ֢.ā𐹦 +xn--tcb323r.xn--yda9741khjj; ⴛ\u05A2.\uFFA0ā𐹦; [B5, B6, V6]; xn--tcb323r.xn--yda9741khjj; ; ; # ⴛ֢.ā𐹦 +xn--tcb736kea974k.xn--yda9741khjj; ⴛ\u200C\u05A2\u200D.\uFFA0ā𐹦; [B5, B6, C1, C2, V6]; xn--tcb736kea974k.xn--yda9741khjj; ; ; # ⴛ֢.ā𐹦 +\uFFF9\u200C。曳⾑𐋰≯; \uFFF9\u200C.曳襾𐋰≯; [C1, V6]; xn--0ug2139f.xn--hdh501y8wvfs5h; ; xn--vn7c.xn--hdh501y8wvfs5h; [V6] # .曳襾𐋰≯ +\uFFF9\u200C。曳⾑𐋰>\u0338; \uFFF9\u200C.曳襾𐋰≯; [C1, V6]; xn--0ug2139f.xn--hdh501y8wvfs5h; ; xn--vn7c.xn--hdh501y8wvfs5h; [V6] # .曳襾𐋰≯ +\uFFF9\u200C。曳襾𐋰≯; \uFFF9\u200C.曳襾𐋰≯; [C1, V6]; xn--0ug2139f.xn--hdh501y8wvfs5h; ; xn--vn7c.xn--hdh501y8wvfs5h; [V6] # .曳襾𐋰≯ +\uFFF9\u200C。曳襾𐋰>\u0338; \uFFF9\u200C.曳襾𐋰≯; [C1, V6]; xn--0ug2139f.xn--hdh501y8wvfs5h; ; xn--vn7c.xn--hdh501y8wvfs5h; [V6] # .曳襾𐋰≯ +xn--vn7c.xn--hdh501y8wvfs5h; \uFFF9.曳襾𐋰≯; [V6]; xn--vn7c.xn--hdh501y8wvfs5h; ; ; # .曳襾𐋰≯ +xn--0ug2139f.xn--hdh501y8wvfs5h; \uFFF9\u200C.曳襾𐋰≯; [C1, V6]; xn--0ug2139f.xn--hdh501y8wvfs5h; ; ; # .曳襾𐋰≯ +≯⒈。ß; ≯⒈.ß; [V6]; xn--hdh84f.xn--zca; ; xn--hdh84f.ss; # ≯⒈.ß +>\u0338⒈。ß; ≯⒈.ß; [V6]; xn--hdh84f.xn--zca; ; xn--hdh84f.ss; # ≯⒈.ß +≯1.。ß; ≯1..ß; [X4_2]; xn--1-ogo..xn--zca; [A4_2]; xn--1-ogo..ss; # ≯1..ß +>\u03381.。ß; ≯1..ß; [X4_2]; xn--1-ogo..xn--zca; [A4_2]; xn--1-ogo..ss; # ≯1..ß +>\u03381.。SS; ≯1..ss; [X4_2]; xn--1-ogo..ss; [A4_2]; ; # ≯1..ss +≯1.。SS; ≯1..ss; [X4_2]; xn--1-ogo..ss; [A4_2]; ; # ≯1..ss +≯1.。ss; ≯1..ss; [X4_2]; xn--1-ogo..ss; [A4_2]; ; # ≯1..ss +>\u03381.。ss; ≯1..ss; [X4_2]; xn--1-ogo..ss; [A4_2]; ; # ≯1..ss +>\u03381.。Ss; ≯1..ss; [X4_2]; xn--1-ogo..ss; [A4_2]; ; # ≯1..ss +≯1.。Ss; ≯1..ss; [X4_2]; xn--1-ogo..ss; [A4_2]; ; # ≯1..ss +xn--1-ogo..ss; ≯1..ss; [X4_2]; xn--1-ogo..ss; [A4_2]; ; # ≯1..ss +xn--1-ogo..xn--zca; ≯1..ß; [X4_2]; xn--1-ogo..xn--zca; [A4_2]; ; # ≯1..ß +>\u0338⒈。SS; ≯⒈.ss; [V6]; xn--hdh84f.ss; ; ; # ≯⒈.ss +≯⒈。SS; ≯⒈.ss; [V6]; xn--hdh84f.ss; ; ; # ≯⒈.ss +≯⒈。ss; ≯⒈.ss; [V6]; xn--hdh84f.ss; ; ; # ≯⒈.ss +>\u0338⒈。ss; ≯⒈.ss; [V6]; xn--hdh84f.ss; ; ; # ≯⒈.ss +>\u0338⒈。Ss; ≯⒈.ss; [V6]; xn--hdh84f.ss; ; ; # ≯⒈.ss +≯⒈。Ss; ≯⒈.ss; [V6]; xn--hdh84f.ss; ; ; # ≯⒈.ss +xn--hdh84f.ss; ≯⒈.ss; [V6]; xn--hdh84f.ss; ; ; # ≯⒈.ss +xn--hdh84f.xn--zca; ≯⒈.ß; [V6]; xn--hdh84f.xn--zca; ; ; # ≯⒈.ß +\u0667\u200D\uFB96。\u07DA-₆Ⴙ; \u0667\u200D\u06B3.\u07DA-6Ⴙ; [B1, B2, B3, C2, V6]; xn--gib6m343e.xn---6-lve002g; ; xn--gib6m.xn---6-lve002g; [B1, B2, B3, V6] # ٧ڳ.ߚ-6Ⴙ +\u0667\u200D\u06B3。\u07DA-6Ⴙ; \u0667\u200D\u06B3.\u07DA-6Ⴙ; [B1, B2, B3, C2, V6]; xn--gib6m343e.xn---6-lve002g; ; xn--gib6m.xn---6-lve002g; [B1, B2, B3, V6] # ٧ڳ.ߚ-6Ⴙ +\u0667\u200D\u06B3。\u07DA-6ⴙ; \u0667\u200D\u06B3.\u07DA-6ⴙ; [B1, B2, B3, C2]; xn--gib6m343e.xn---6-lve6529a; ; xn--gib6m.xn---6-lve6529a; [B1, B2, B3] # ٧ڳ.ߚ-6ⴙ +xn--gib6m.xn---6-lve6529a; \u0667\u06B3.\u07DA-6ⴙ; [B1, B2, B3]; xn--gib6m.xn---6-lve6529a; ; ; # ٧ڳ.ߚ-6ⴙ +xn--gib6m343e.xn---6-lve6529a; \u0667\u200D\u06B3.\u07DA-6ⴙ; [B1, B2, B3, C2]; xn--gib6m343e.xn---6-lve6529a; ; ; # ٧ڳ.ߚ-6ⴙ +xn--gib6m.xn---6-lve002g; \u0667\u06B3.\u07DA-6Ⴙ; [B1, B2, B3, V6]; xn--gib6m.xn---6-lve002g; ; ; # ٧ڳ.ߚ-6Ⴙ +xn--gib6m343e.xn---6-lve002g; \u0667\u200D\u06B3.\u07DA-6Ⴙ; [B1, B2, B3, C2, V6]; xn--gib6m343e.xn---6-lve002g; ; ; # ٧ڳ.ߚ-6Ⴙ +\u0667\u200D\uFB96。\u07DA-₆ⴙ; \u0667\u200D\u06B3.\u07DA-6ⴙ; [B1, B2, B3, C2]; xn--gib6m343e.xn---6-lve6529a; ; xn--gib6m.xn---6-lve6529a; [B1, B2, B3] # ٧ڳ.ߚ-6ⴙ +\u200C。≠; \u200C.≠; [C1]; xn--0ug.xn--1ch; ; .xn--1ch; [A4_2] # .≠ +\u200C。=\u0338; \u200C.≠; [C1]; xn--0ug.xn--1ch; ; .xn--1ch; [A4_2] # .≠ +\u200C。≠; \u200C.≠; [C1]; xn--0ug.xn--1ch; ; .xn--1ch; [A4_2] # .≠ +\u200C。=\u0338; \u200C.≠; [C1]; xn--0ug.xn--1ch; ; .xn--1ch; [A4_2] # .≠ +.xn--1ch; .≠; [X4_2]; .xn--1ch; [A4_2]; ; # .≠ +xn--0ug.xn--1ch; \u200C.≠; [C1]; xn--0ug.xn--1ch; ; ; # .≠ +𑖿𝨔.ᡟ𑖿\u1B42\u200C; ; [C1, V5]; xn--461dw464a.xn--v8e29ldzfo952a; ; xn--461dw464a.xn--v8e29loy65a; [V5] # 𑖿𝨔.ᡟ𑖿ᭂ +xn--461dw464a.xn--v8e29loy65a; 𑖿𝨔.ᡟ𑖿\u1B42; [V5]; xn--461dw464a.xn--v8e29loy65a; ; ; # 𑖿𝨔.ᡟ𑖿ᭂ +xn--461dw464a.xn--v8e29ldzfo952a; 𑖿𝨔.ᡟ𑖿\u1B42\u200C; [C1, V5]; xn--461dw464a.xn--v8e29ldzfo952a; ; ; # 𑖿𝨔.ᡟ𑖿ᭂ +\u200D.𖬴Ↄ≠-; ; [C2, V3, V5, V6]; xn--1ug15151gkb5a.xn----61n81bt713h; ; xn--6j00chy9a.xn----61n81bt713h; [V3, V5, V6] # .𖬴Ↄ≠- +\u200D.𖬴Ↄ=\u0338-; \u200D.𖬴Ↄ≠-; [C2, V3, V5, V6]; xn--1ug15151gkb5a.xn----61n81bt713h; ; xn--6j00chy9a.xn----61n81bt713h; [V3, V5, V6] # .𖬴Ↄ≠- +\u200D.𖬴ↄ=\u0338-; \u200D.𖬴ↄ≠-; [C2, V3, V5, V6]; xn--1ug15151gkb5a.xn----81n51bt713h; ; xn--6j00chy9a.xn----81n51bt713h; [V3, V5, V6] # .𖬴ↄ≠- +\u200D.𖬴ↄ≠-; ; [C2, V3, V5, V6]; xn--1ug15151gkb5a.xn----81n51bt713h; ; xn--6j00chy9a.xn----81n51bt713h; [V3, V5, V6] # .𖬴ↄ≠- +xn--6j00chy9a.xn----81n51bt713h; .𖬴ↄ≠-; [V3, V5, V6]; xn--6j00chy9a.xn----81n51bt713h; ; ; # .𖬴ↄ≠- +xn--1ug15151gkb5a.xn----81n51bt713h; \u200D.𖬴ↄ≠-; [C2, V3, V5, V6]; xn--1ug15151gkb5a.xn----81n51bt713h; ; ; # .𖬴ↄ≠- +xn--6j00chy9a.xn----61n81bt713h; .𖬴Ↄ≠-; [V3, V5, V6]; xn--6j00chy9a.xn----61n81bt713h; ; ; # .𖬴Ↄ≠- +xn--1ug15151gkb5a.xn----61n81bt713h; \u200D.𖬴Ↄ≠-; [C2, V3, V5, V6]; xn--1ug15151gkb5a.xn----61n81bt713h; ; ; # .𖬴Ↄ≠- +\u07E2ς\u200D𝟳。蔑; \u07E2ς\u200D7.蔑; [B2, C2, V6]; xn--7-xmb182aez5a.xn--wy1ao4929b; ; xn--7-zmb872a.xn--wy1ao4929b; [B2, V6] # ߢς7.蔑 +\u07E2ς\u200D7。蔑; \u07E2ς\u200D7.蔑; [B2, C2, V6]; xn--7-xmb182aez5a.xn--wy1ao4929b; ; xn--7-zmb872a.xn--wy1ao4929b; [B2, V6] # ߢς7.蔑 +\u07E2Σ\u200D7。蔑; \u07E2σ\u200D7.蔑; [B2, C2, V6]; xn--7-zmb872aez5a.xn--wy1ao4929b; ; xn--7-zmb872a.xn--wy1ao4929b; [B2, V6] # ߢσ7.蔑 +\u07E2σ\u200D7。蔑; \u07E2σ\u200D7.蔑; [B2, C2, V6]; xn--7-zmb872aez5a.xn--wy1ao4929b; ; xn--7-zmb872a.xn--wy1ao4929b; [B2, V6] # ߢσ7.蔑 +xn--7-zmb872a.xn--wy1ao4929b; \u07E2σ7.蔑; [B2, V6]; xn--7-zmb872a.xn--wy1ao4929b; ; ; # ߢσ7.蔑 +xn--7-zmb872aez5a.xn--wy1ao4929b; \u07E2σ\u200D7.蔑; [B2, C2, V6]; xn--7-zmb872aez5a.xn--wy1ao4929b; ; ; # ߢσ7.蔑 +xn--7-xmb182aez5a.xn--wy1ao4929b; \u07E2ς\u200D7.蔑; [B2, C2, V6]; xn--7-xmb182aez5a.xn--wy1ao4929b; ; ; # ߢς7.蔑 +\u07E2Σ\u200D𝟳。蔑; \u07E2σ\u200D7.蔑; [B2, C2, V6]; xn--7-zmb872aez5a.xn--wy1ao4929b; ; xn--7-zmb872a.xn--wy1ao4929b; [B2, V6] # ߢσ7.蔑 +\u07E2σ\u200D𝟳。蔑; \u07E2σ\u200D7.蔑; [B2, C2, V6]; xn--7-zmb872aez5a.xn--wy1ao4929b; ; xn--7-zmb872a.xn--wy1ao4929b; [B2, V6] # ߢσ7.蔑 +𐹰.\u0600; ; [B1, V6]; xn--oo0d.xn--ifb; ; ; # 𐹰. +xn--oo0d.xn--ifb; 𐹰.\u0600; [B1, V6]; xn--oo0d.xn--ifb; ; ; # 𐹰. +-\u08A8.𱠖; ; [B1, V3]; xn----mod.xn--5o9n; ; ; # -ࢨ.𱠖 +xn----mod.xn--5o9n; -\u08A8.𱠖; [B1, V3]; xn----mod.xn--5o9n; ; ; # -ࢨ.𱠖 +≯𞱸󠇀。誆⒈; ≯𞱸.誆⒈; [B1, V6]; xn--hdh7151p.xn--tsh1248a; ; ; # ≯𞱸.誆⒈ +>\u0338𞱸󠇀。誆⒈; ≯𞱸.誆⒈; [B1, V6]; xn--hdh7151p.xn--tsh1248a; ; ; # ≯𞱸.誆⒈ +≯𞱸󠇀。誆1.; ≯𞱸.誆1.; [B1]; xn--hdh7151p.xn--1-dy1d.; ; ; # ≯𞱸.誆1. +>\u0338𞱸󠇀。誆1.; ≯𞱸.誆1.; [B1]; xn--hdh7151p.xn--1-dy1d.; ; ; # ≯𞱸.誆1. +xn--hdh7151p.xn--1-dy1d.; ≯𞱸.誆1.; [B1]; xn--hdh7151p.xn--1-dy1d.; ; ; # ≯𞱸.誆1. +xn--hdh7151p.xn--tsh1248a; ≯𞱸.誆⒈; [B1, V6]; xn--hdh7151p.xn--tsh1248a; ; ; # ≯𞱸.誆⒈ +\u0616𞥙䐊\u0650.︒\u0645↺\u069C; \u0616𞥙䐊\u0650.︒\u0645↺\u069C; [B1, V5, V6]; xn--4fb0j490qjg4x.xn--hhb8o948euo5r; ; ; # ؖ𞥙䐊ِ.︒م↺ڜ +\u0616𞥙䐊\u0650.。\u0645↺\u069C; \u0616𞥙䐊\u0650..\u0645↺\u069C; [B1, V5, X4_2]; xn--4fb0j490qjg4x..xn--hhb8o948e; [B1, V5, A4_2]; ; # ؖ𞥙䐊ِ..م↺ڜ +xn--4fb0j490qjg4x..xn--hhb8o948e; \u0616𞥙䐊\u0650..\u0645↺\u069C; [B1, V5, X4_2]; xn--4fb0j490qjg4x..xn--hhb8o948e; [B1, V5, A4_2]; ; # ؖ𞥙䐊ِ..م↺ڜ +xn--4fb0j490qjg4x.xn--hhb8o948euo5r; \u0616𞥙䐊\u0650.︒\u0645↺\u069C; [B1, V5, V6]; xn--4fb0j490qjg4x.xn--hhb8o948euo5r; ; ; # ؖ𞥙䐊ِ.︒م↺ڜ +퀬-?.\u200C\u0AC5۴; ; [C1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; xn---?-6g4k75207c.xn--hmb76q74166b; [V5, V6] # 퀬-?.ૅ۴ +퀬-?.\u200C\u0AC5۴; 퀬-?.\u200C\u0AC5۴; [C1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; xn---?-6g4k75207c.xn--hmb76q74166b; [V5, V6] # 퀬-?.ૅ۴ +xn---?-6g4k75207c.xn--hmb76q74166b; 퀬-?.\u0AC5۴; [V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.ૅ۴ +xn---?-6g4k75207c.xn--hmb76q48y18505a; 퀬-?.\u200C\u0AC5۴; [C1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.ૅ۴ +퀬-?.xn--hmb76q74166b; 퀬-?.\u0AC5۴; [V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.ૅ۴ +퀬-?.xn--hmb76q74166b; 퀬-?.\u0AC5۴; [V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.ૅ۴ +퀬-?.XN--HMB76Q74166B; 퀬-?.\u0AC5۴; [V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.ૅ۴ +퀬-?.XN--HMB76Q74166B; 퀬-?.\u0AC5۴; [V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.ૅ۴ +퀬-?.Xn--Hmb76q74166b; 퀬-?.\u0AC5۴; [V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.ૅ۴ +퀬-?.Xn--Hmb76q74166b; 퀬-?.\u0AC5۴; [V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.ૅ۴ +퀬-?.xn--hmb76q48y18505a; 퀬-?.\u200C\u0AC5۴; [C1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.ૅ۴ +퀬-?.xn--hmb76q48y18505a; 퀬-?.\u200C\u0AC5۴; [C1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.ૅ۴ +퀬-?.XN--HMB76Q48Y18505A; 퀬-?.\u200C\u0AC5۴; [C1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.ૅ۴ +퀬-?.XN--HMB76Q48Y18505A; 퀬-?.\u200C\u0AC5۴; [C1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.ૅ۴ +퀬-?.Xn--Hmb76q48y18505a; 퀬-?.\u200C\u0AC5۴; [C1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.ૅ۴ +퀬-?.Xn--Hmb76q48y18505a; 퀬-?.\u200C\u0AC5۴; [C1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.ૅ۴ +Ⴌ.𐹾︒𑁿; ; [B1, V6]; xn--knd.xn--y86c030a9ob6374b; ; ; # Ⴌ.𐹾︒𑁿 +Ⴌ.𐹾。𑁿; Ⴌ.𐹾.𑁿; [B1, V5, V6]; xn--knd.xn--2o0d.xn--q30dg029a; ; ; # Ⴌ.𐹾.𑁿 +ⴌ.𐹾。𑁿; ⴌ.𐹾.𑁿; [B1, V5, V6]; xn--3kj.xn--2o0d.xn--q30dg029a; ; ; # ⴌ.𐹾.𑁿 +xn--3kj.xn--2o0d.xn--q30dg029a; ⴌ.𐹾.𑁿; [B1, V5, V6]; xn--3kj.xn--2o0d.xn--q30dg029a; ; ; # ⴌ.𐹾.𑁿 +xn--knd.xn--2o0d.xn--q30dg029a; Ⴌ.𐹾.𑁿; [B1, V5, V6]; xn--knd.xn--2o0d.xn--q30dg029a; ; ; # Ⴌ.𐹾.𑁿 +ⴌ.𐹾︒𑁿; ; [B1, V6]; xn--3kj.xn--y86c030a9ob6374b; ; ; # ⴌ.𐹾︒𑁿 +xn--3kj.xn--y86c030a9ob6374b; ⴌ.𐹾︒𑁿; [B1, V6]; xn--3kj.xn--y86c030a9ob6374b; ; ; # ⴌ.𐹾︒𑁿 +xn--knd.xn--y86c030a9ob6374b; Ⴌ.𐹾︒𑁿; [B1, V6]; xn--knd.xn--y86c030a9ob6374b; ; ; # Ⴌ.𐹾︒𑁿 +╏。; ╏.; [B3, B6, V6]; xn--iyh90030d.xn--1m6hs0260c; ; ; # ╏. +xn--iyh90030d.xn--1m6hs0260c; ╏.; [B3, B6, V6]; xn--iyh90030d.xn--1m6hs0260c; ; ; # ╏. +\u200D┮󠇐.\u0C00\u0C4D\u1734\u200D; \u200D┮.\u0C00\u0C4D\u1734\u200D; [C2, V5]; xn--1ug04r.xn--eoc8m432a40i; ; xn--kxh.xn--eoc8m432a; [V5] # ┮.ఀ్᜴ +\u200D┮󠇐.\u0C00\u0C4D\u1734\u200D; \u200D┮.\u0C00\u0C4D\u1734\u200D; [C2, V5]; xn--1ug04r.xn--eoc8m432a40i; ; xn--kxh.xn--eoc8m432a; [V5] # ┮.ఀ్᜴ +xn--kxh.xn--eoc8m432a; ┮.\u0C00\u0C4D\u1734; [V5]; xn--kxh.xn--eoc8m432a; ; ; # ┮.ఀ్᜴ +xn--1ug04r.xn--eoc8m432a40i; \u200D┮.\u0C00\u0C4D\u1734\u200D; [C2, V5]; xn--1ug04r.xn--eoc8m432a40i; ; ; # ┮.ఀ్᜴ +。🄂; .🄂; [V6]; xn--n433d.xn--v07h; ; ; # .🄂 +。1,; .1,; [V6]; xn--n433d.1,; ; ; # .1, +xn--n433d.1,; .1,; [V6]; xn--n433d.1,; ; ; # .1, +xn--n433d.xn--v07h; .🄂; [V6]; xn--n433d.xn--v07h; ; ; # .🄂 +𑍨刍.🛦; ; [V5]; xn--rbry728b.xn--y88h; ; ; # 𑍨刍.🛦 +xn--rbry728b.xn--y88h; 𑍨刍.🛦; [V5]; xn--rbry728b.xn--y88h; ; ; # 𑍨刍.🛦 +3。\u1BF1𝟒; 3.\u1BF14; [V5, V6]; xn--3-ib31m.xn--4-pql; ; ; # 3.ᯱ4 +3。\u1BF14; 3.\u1BF14; [V5, V6]; xn--3-ib31m.xn--4-pql; ; ; # 3.ᯱ4 +xn--3-ib31m.xn--4-pql; 3.\u1BF14; [V5, V6]; xn--3-ib31m.xn--4-pql; ; ; # 3.ᯱ4 +\u06876Ⴔ辘.\uFD22\u0687\u200C; \u06876Ⴔ辘.\u0635\u064A\u0687\u200C; [B2, B3, C1, V6]; xn--6-gsc039eqq6k.xn--0gb6bxkx18g; ; xn--6-gsc039eqq6k.xn--0gb6bxk; [B2, B3, V6] # ڇ6Ⴔ辘.صيڇ +\u06876Ⴔ辘.\u0635\u064A\u0687\u200C; ; [B2, B3, C1, V6]; xn--6-gsc039eqq6k.xn--0gb6bxkx18g; ; xn--6-gsc039eqq6k.xn--0gb6bxk; [B2, B3, V6] # ڇ6Ⴔ辘.صيڇ +\u06876ⴔ辘.\u0635\u064A\u0687\u200C; ; [B2, B3, C1]; xn--6-gsc2270akm6f.xn--0gb6bxkx18g; ; xn--6-gsc2270akm6f.xn--0gb6bxk; [B2, B3] # ڇ6ⴔ辘.صيڇ +xn--6-gsc2270akm6f.xn--0gb6bxk; \u06876ⴔ辘.\u0635\u064A\u0687; [B2, B3]; xn--6-gsc2270akm6f.xn--0gb6bxk; ; ; # ڇ6ⴔ辘.صيڇ +xn--6-gsc2270akm6f.xn--0gb6bxkx18g; \u06876ⴔ辘.\u0635\u064A\u0687\u200C; [B2, B3, C1]; xn--6-gsc2270akm6f.xn--0gb6bxkx18g; ; ; # ڇ6ⴔ辘.صيڇ +xn--6-gsc039eqq6k.xn--0gb6bxk; \u06876Ⴔ辘.\u0635\u064A\u0687; [B2, B3, V6]; xn--6-gsc039eqq6k.xn--0gb6bxk; ; ; # ڇ6Ⴔ辘.صيڇ +xn--6-gsc039eqq6k.xn--0gb6bxkx18g; \u06876Ⴔ辘.\u0635\u064A\u0687\u200C; [B2, B3, C1, V6]; xn--6-gsc039eqq6k.xn--0gb6bxkx18g; ; ; # ڇ6Ⴔ辘.صيڇ +\u06876ⴔ辘.\uFD22\u0687\u200C; \u06876ⴔ辘.\u0635\u064A\u0687\u200C; [B2, B3, C1]; xn--6-gsc2270akm6f.xn--0gb6bxkx18g; ; xn--6-gsc2270akm6f.xn--0gb6bxk; [B2, B3] # ڇ6ⴔ辘.صيڇ +󠄍.𐮭۹; .𐮭۹; [B2, V6, X4_2]; .xn--mmb3954kd0uf1zx7f; [B2, V6, A4_2]; ; # .𐮭۹ +.xn--mmb3954kd0uf1zx7f; .𐮭۹; [B2, V6, X4_2]; .xn--mmb3954kd0uf1zx7f; [B2, V6, A4_2]; ; # .𐮭۹ +\uA87D≯.; \uA87D≯.; [V6]; xn--hdh8193c.xn--5z40cp629b; ; ; # ≯. +\uA87D>\u0338.; \uA87D≯.; [V6]; xn--hdh8193c.xn--5z40cp629b; ; ; # ≯. +\uA87D≯.; ; [V6]; xn--hdh8193c.xn--5z40cp629b; ; ; # ≯. +\uA87D>\u0338.; \uA87D≯.; [V6]; xn--hdh8193c.xn--5z40cp629b; ; ; # ≯. +xn--hdh8193c.xn--5z40cp629b; \uA87D≯.; [V6]; xn--hdh8193c.xn--5z40cp629b; ; ; # ≯. +ςო\u067B.ς\u0714; ; [B5, B6]; xn--3xa80l26n.xn--3xa41o; ; xn--4xa60l26n.xn--4xa21o; # ςოٻ.ςܔ +ΣᲝ\u067B.Σ\u0714; σო\u067B.σ\u0714; [B5, B6]; xn--4xa60l26n.xn--4xa21o; ; ; # σოٻ.σܔ +σო\u067B.σ\u0714; ; [B5, B6]; xn--4xa60l26n.xn--4xa21o; ; ; # σოٻ.σܔ +Σო\u067B.σ\u0714; σო\u067B.σ\u0714; [B5, B6]; xn--4xa60l26n.xn--4xa21o; ; ; # σოٻ.σܔ +xn--4xa60l26n.xn--4xa21o; σო\u067B.σ\u0714; [B5, B6]; xn--4xa60l26n.xn--4xa21o; ; ; # σოٻ.σܔ +Σო\u067B.ς\u0714; σო\u067B.ς\u0714; [B5, B6]; xn--4xa60l26n.xn--3xa41o; ; xn--4xa60l26n.xn--4xa21o; # σოٻ.ςܔ +σო\u067B.ς\u0714; ; [B5, B6]; xn--4xa60l26n.xn--3xa41o; ; xn--4xa60l26n.xn--4xa21o; # σოٻ.ςܔ +xn--4xa60l26n.xn--3xa41o; σო\u067B.ς\u0714; [B5, B6]; xn--4xa60l26n.xn--3xa41o; ; ; # σოٻ.ςܔ +xn--3xa80l26n.xn--3xa41o; ςო\u067B.ς\u0714; [B5, B6]; xn--3xa80l26n.xn--3xa41o; ; ; # ςოٻ.ςܔ +Σო\u067B.Σ\u0714; σო\u067B.σ\u0714; [B5, B6]; xn--4xa60l26n.xn--4xa21o; ; ; # σოٻ.σܔ +\u0748𠄯\u075F。; \u0748𠄯\u075F.; [B1, B5, B6, V6]; xn--vob0c4369twfv8b.xn--kl46e; ; ; # ݈𠄯ݟ. +\u0748𠄯\u075F。; \u0748𠄯\u075F.; [B1, B5, B6, V6]; xn--vob0c4369twfv8b.xn--kl46e; ; ; # ݈𠄯ݟ. +xn--vob0c4369twfv8b.xn--kl46e; \u0748𠄯\u075F.; [B1, B5, B6, V6]; xn--vob0c4369twfv8b.xn--kl46e; ; ; # ݈𠄯ݟ. +.\u200D䤫≠Ⴞ; .\u200D䤫≠Ⴞ; [C2, V6]; xn--1t56e.xn--2nd159e9vb743e; ; xn--1t56e.xn--2nd141ghl2a; [V6] # .䤫≠Ⴞ +.\u200D䤫=\u0338Ⴞ; .\u200D䤫≠Ⴞ; [C2, V6]; xn--1t56e.xn--2nd159e9vb743e; ; xn--1t56e.xn--2nd141ghl2a; [V6] # .䤫≠Ⴞ +.\u200D䤫≠Ⴞ; ; [C2, V6]; xn--1t56e.xn--2nd159e9vb743e; ; xn--1t56e.xn--2nd141ghl2a; [V6] # .䤫≠Ⴞ +.\u200D䤫=\u0338Ⴞ; .\u200D䤫≠Ⴞ; [C2, V6]; xn--1t56e.xn--2nd159e9vb743e; ; xn--1t56e.xn--2nd141ghl2a; [V6] # .䤫≠Ⴞ +.\u200D䤫=\u0338ⴞ; .\u200D䤫≠ⴞ; [C2, V6]; xn--1t56e.xn--1ug73gzzpwi3a; ; xn--1t56e.xn--1ch153bqvw; [V6] # .䤫≠ⴞ +.\u200D䤫≠ⴞ; ; [C2, V6]; xn--1t56e.xn--1ug73gzzpwi3a; ; xn--1t56e.xn--1ch153bqvw; [V6] # .䤫≠ⴞ +xn--1t56e.xn--1ch153bqvw; .䤫≠ⴞ; [V6]; xn--1t56e.xn--1ch153bqvw; ; ; # .䤫≠ⴞ +xn--1t56e.xn--1ug73gzzpwi3a; .\u200D䤫≠ⴞ; [C2, V6]; xn--1t56e.xn--1ug73gzzpwi3a; ; ; # .䤫≠ⴞ +xn--1t56e.xn--2nd141ghl2a; .䤫≠Ⴞ; [V6]; xn--1t56e.xn--2nd141ghl2a; ; ; # .䤫≠Ⴞ +xn--1t56e.xn--2nd159e9vb743e; .\u200D䤫≠Ⴞ; [C2, V6]; xn--1t56e.xn--2nd159e9vb743e; ; ; # .䤫≠Ⴞ +.\u200D䤫=\u0338ⴞ; .\u200D䤫≠ⴞ; [C2, V6]; xn--1t56e.xn--1ug73gzzpwi3a; ; xn--1t56e.xn--1ch153bqvw; [V6] # .䤫≠ⴞ +.\u200D䤫≠ⴞ; .\u200D䤫≠ⴞ; [C2, V6]; xn--1t56e.xn--1ug73gzzpwi3a; ; xn--1t56e.xn--1ch153bqvw; [V6] # .䤫≠ⴞ +𐽘𑈵.𐹣🕥; 𐽘𑈵.𐹣🕥; [B1, B2, B3]; xn--bv0d02c.xn--bo0dq650b; ; ; # 𐽘𑈵.𐹣🕥 +𐽘𑈵.𐹣🕥; ; [B1, B2, B3]; xn--bv0d02c.xn--bo0dq650b; ; ; # 𐽘𑈵.𐹣🕥 +xn--bv0d02c.xn--bo0dq650b; 𐽘𑈵.𐹣🕥; [B1, B2, B3]; xn--bv0d02c.xn--bo0dq650b; ; ; # 𐽘𑈵.𐹣🕥 +⒊⒈𑁄。9; ⒊⒈𑁄.9; [V6]; xn--tshd3512p.9; ; ; # ⒊⒈𑁄.9 +3.1.𑁄。9; 3.1.𑁄.9; [V5]; 3.1.xn--110d.9; ; ; # 3.1.𑁄.9 +3.1.xn--110d.9; 3.1.𑁄.9; [V5]; 3.1.xn--110d.9; ; ; # 3.1.𑁄.9 +xn--tshd3512p.9; ⒊⒈𑁄.9; [V6]; xn--tshd3512p.9; ; ; # ⒊⒈𑁄.9 +-\u200C\u2DF1≮.𐹱4₉; -\u200C\u2DF1≮.𐹱49; [B1, C1, V3, V6]; xn----sgn20i14s.xn--49-ki3om2611f; ; xn----ngo823c.xn--49-ki3om2611f; [B1, V3, V6] # -ⷱ≮.𐹱49 +-\u200C\u2DF1<\u0338.𐹱4₉; -\u200C\u2DF1≮.𐹱49; [B1, C1, V3, V6]; xn----sgn20i14s.xn--49-ki3om2611f; ; xn----ngo823c.xn--49-ki3om2611f; [B1, V3, V6] # -ⷱ≮.𐹱49 +-\u200C\u2DF1≮.𐹱49; ; [B1, C1, V3, V6]; xn----sgn20i14s.xn--49-ki3om2611f; ; xn----ngo823c.xn--49-ki3om2611f; [B1, V3, V6] # -ⷱ≮.𐹱49 +-\u200C\u2DF1<\u0338.𐹱49; -\u200C\u2DF1≮.𐹱49; [B1, C1, V3, V6]; xn----sgn20i14s.xn--49-ki3om2611f; ; xn----ngo823c.xn--49-ki3om2611f; [B1, V3, V6] # -ⷱ≮.𐹱49 +xn----ngo823c.xn--49-ki3om2611f; -\u2DF1≮.𐹱49; [B1, V3, V6]; xn----ngo823c.xn--49-ki3om2611f; ; ; # -ⷱ≮.𐹱49 +xn----sgn20i14s.xn--49-ki3om2611f; -\u200C\u2DF1≮.𐹱49; [B1, C1, V3, V6]; xn----sgn20i14s.xn--49-ki3om2611f; ; ; # -ⷱ≮.𐹱49 +-≯딾。\u0847; -≯딾.\u0847; [B1, V3]; xn----pgow547d.xn--5vb; ; ; # -≯딾.ࡇ +->\u0338딾。\u0847; -≯딾.\u0847; [B1, V3]; xn----pgow547d.xn--5vb; ; ; # -≯딾.ࡇ +-≯딾。\u0847; -≯딾.\u0847; [B1, V3]; xn----pgow547d.xn--5vb; ; ; # -≯딾.ࡇ +->\u0338딾。\u0847; -≯딾.\u0847; [B1, V3]; xn----pgow547d.xn--5vb; ; ; # -≯딾.ࡇ +xn----pgow547d.xn--5vb; -≯딾.\u0847; [B1, V3]; xn----pgow547d.xn--5vb; ; ; # -≯딾.ࡇ +𑙢⒈𐹠-。\u200C; 𑙢⒈𐹠-.\u200C; [B1, C1, V3, V6]; xn----dcpy090hiyg.xn--0ug23321l; ; xn----dcpy090hiyg.xn--jd46e; [B1, V3, V6] # 𑙢⒈𐹠-. +𑙢1.𐹠-。\u200C; 𑙢1.𐹠-.\u200C; [B1, C1, V3, V6]; xn--1-bf0j.xn----516i.xn--0ug23321l; ; xn--1-bf0j.xn----516i.xn--jd46e; [B1, V3, V6] # 𑙢1.𐹠-. +xn--1-bf0j.xn----516i.xn--jd46e; 𑙢1.𐹠-.; [B1, V3, V6]; xn--1-bf0j.xn----516i.xn--jd46e; ; ; # 𑙢1.𐹠-. +xn--1-bf0j.xn----516i.xn--0ug23321l; 𑙢1.𐹠-.\u200C; [B1, C1, V3, V6]; xn--1-bf0j.xn----516i.xn--0ug23321l; ; ; # 𑙢1.𐹠-. +xn----dcpy090hiyg.xn--jd46e; 𑙢⒈𐹠-.; [B1, V3, V6]; xn----dcpy090hiyg.xn--jd46e; ; ; # 𑙢⒈𐹠-. +xn----dcpy090hiyg.xn--0ug23321l; 𑙢⒈𐹠-.\u200C; [B1, C1, V3, V6]; xn----dcpy090hiyg.xn--0ug23321l; ; ; # 𑙢⒈𐹠-. +\u034A.𐨎; \u034A.𐨎; [V5]; xn--oua.xn--mr9c; ; ; # ͊.𐨎 +\u034A.𐨎; ; [V5]; xn--oua.xn--mr9c; ; ; # ͊.𐨎 +xn--oua.xn--mr9c; \u034A.𐨎; [V5]; xn--oua.xn--mr9c; ; ; # ͊.𐨎 +훉≮。\u0E34; 훉≮.\u0E34; [V5]; xn--gdh2512e.xn--i4c; ; ; # 훉≮.ิ +훉<\u0338。\u0E34; 훉≮.\u0E34; [V5]; xn--gdh2512e.xn--i4c; ; ; # 훉≮.ิ +훉≮。\u0E34; 훉≮.\u0E34; [V5]; xn--gdh2512e.xn--i4c; ; ; # 훉≮.ิ +훉<\u0338。\u0E34; 훉≮.\u0E34; [V5]; xn--gdh2512e.xn--i4c; ; ; # 훉≮.ิ +xn--gdh2512e.xn--i4c; 훉≮.\u0E34; [V5]; xn--gdh2512e.xn--i4c; ; ; # 훉≮.ิ +\u2DF7🃘.𝟸\u0659𞤯; \u2DF7🃘.2\u0659𞤯; [B1, B5, B6, V5, V6]; xn--trj8045le6s9b.xn--2-upc23918acjsj; ; ; # ⷷ🃘.2ٙ𞤯 +\u2DF7🃘.2\u0659𞤯; ; [B1, B5, B6, V5, V6]; xn--trj8045le6s9b.xn--2-upc23918acjsj; ; ; # ⷷ🃘.2ٙ𞤯 +\u2DF7🃘.2\u0659𞤍; \u2DF7🃘.2\u0659𞤯; [B1, B5, B6, V5, V6]; xn--trj8045le6s9b.xn--2-upc23918acjsj; ; ; # ⷷ🃘.2ٙ𞤯 +xn--trj8045le6s9b.xn--2-upc23918acjsj; \u2DF7🃘.2\u0659𞤯; [B1, B5, B6, V5, V6]; xn--trj8045le6s9b.xn--2-upc23918acjsj; ; ; # ⷷ🃘.2ٙ𞤯 +\u2DF7🃘.𝟸\u0659𞤍; \u2DF7🃘.2\u0659𞤯; [B1, B5, B6, V5, V6]; xn--trj8045le6s9b.xn--2-upc23918acjsj; ; ; # ⷷ🃘.2ٙ𞤯 +ßᢞ\u200C。\u0660\uFCD4-; ßᢞ\u200C.\u0660\u0646\u062E-; [B1, B6, C1, V3, V6]; xn--zca272jbif10059a.xn----dnc5e1er384z; ; xn--ss-jepz4596r.xn----dnc5e1er384z; [B1, V3, V6] # ßᢞ.٠نخ- +ßᢞ\u200C。\u0660\u0646\u062E-; ßᢞ\u200C.\u0660\u0646\u062E-; [B1, B6, C1, V3, V6]; xn--zca272jbif10059a.xn----dnc5e1er384z; ; xn--ss-jepz4596r.xn----dnc5e1er384z; [B1, V3, V6] # ßᢞ.٠نخ- +SSᢞ\u200C。\u0660\u0646\u062E-; ssᢞ\u200C.\u0660\u0646\u062E-; [B1, B6, C1, V3, V6]; xn--ss-jep006bqt765b.xn----dnc5e1er384z; ; xn--ss-jepz4596r.xn----dnc5e1er384z; [B1, V3, V6] # ssᢞ.٠نخ- +ssᢞ\u200C。\u0660\u0646\u062E-; ssᢞ\u200C.\u0660\u0646\u062E-; [B1, B6, C1, V3, V6]; xn--ss-jep006bqt765b.xn----dnc5e1er384z; ; xn--ss-jepz4596r.xn----dnc5e1er384z; [B1, V3, V6] # ssᢞ.٠نخ- +Ssᢞ\u200C。\u0660\u0646\u062E-; ssᢞ\u200C.\u0660\u0646\u062E-; [B1, B6, C1, V3, V6]; xn--ss-jep006bqt765b.xn----dnc5e1er384z; ; xn--ss-jepz4596r.xn----dnc5e1er384z; [B1, V3, V6] # ssᢞ.٠نخ- +xn--ss-jepz4596r.xn----dnc5e1er384z; ssᢞ.\u0660\u0646\u062E-; [B1, V3, V6]; xn--ss-jepz4596r.xn----dnc5e1er384z; ; ; # ssᢞ.٠نخ- +xn--ss-jep006bqt765b.xn----dnc5e1er384z; ssᢞ\u200C.\u0660\u0646\u062E-; [B1, B6, C1, V3, V6]; xn--ss-jep006bqt765b.xn----dnc5e1er384z; ; ; # ssᢞ.٠نخ- +xn--zca272jbif10059a.xn----dnc5e1er384z; ßᢞ\u200C.\u0660\u0646\u062E-; [B1, B6, C1, V3, V6]; xn--zca272jbif10059a.xn----dnc5e1er384z; ; ; # ßᢞ.٠نخ- +SSᢞ\u200C。\u0660\uFCD4-; ssᢞ\u200C.\u0660\u0646\u062E-; [B1, B6, C1, V3, V6]; xn--ss-jep006bqt765b.xn----dnc5e1er384z; ; xn--ss-jepz4596r.xn----dnc5e1er384z; [B1, V3, V6] # ssᢞ.٠نخ- +ssᢞ\u200C。\u0660\uFCD4-; ssᢞ\u200C.\u0660\u0646\u062E-; [B1, B6, C1, V3, V6]; xn--ss-jep006bqt765b.xn----dnc5e1er384z; ; xn--ss-jepz4596r.xn----dnc5e1er384z; [B1, V3, V6] # ssᢞ.٠نخ- +Ssᢞ\u200C。\u0660\uFCD4-; ssᢞ\u200C.\u0660\u0646\u062E-; [B1, B6, C1, V3, V6]; xn--ss-jep006bqt765b.xn----dnc5e1er384z; ; xn--ss-jepz4596r.xn----dnc5e1er384z; [B1, V3, V6] # ssᢞ.٠نخ- +ꡆ。Ↄ\u0FB5놮-; ꡆ.Ↄ\u0FB5놮-; [V3, V6]; xn--fc9a.xn----qmg787k869k; ; ; # ꡆ.Ↄྵ놮- +ꡆ。Ↄ\u0FB5놮-; ꡆ.Ↄ\u0FB5놮-; [V3, V6]; xn--fc9a.xn----qmg787k869k; ; ; # ꡆ.Ↄྵ놮- +ꡆ。ↄ\u0FB5놮-; ꡆ.ↄ\u0FB5놮-; [V3]; xn--fc9a.xn----qmg097k469k; ; ; # ꡆ.ↄྵ놮- +ꡆ。ↄ\u0FB5놮-; ꡆ.ↄ\u0FB5놮-; [V3]; xn--fc9a.xn----qmg097k469k; ; ; # ꡆ.ↄྵ놮- +xn--fc9a.xn----qmg097k469k; ꡆ.ↄ\u0FB5놮-; [V3]; xn--fc9a.xn----qmg097k469k; ; ; # ꡆ.ↄྵ놮- +xn--fc9a.xn----qmg787k869k; ꡆ.Ↄ\u0FB5놮-; [V3, V6]; xn--fc9a.xn----qmg787k869k; ; ; # ꡆ.Ↄྵ놮- +\uFDAD\u200D.\u06A9; \u0644\u0645\u064A\u200D.\u06A9; [B3, B5, B6, C2, V6]; xn--ghbcp494x.xn--ckb36214f; ; xn--ghbcp.xn--ckb36214f; [B5, B6, V6] # لمي.ک +\u0644\u0645\u064A\u200D.\u06A9; ; [B3, B5, B6, C2, V6]; xn--ghbcp494x.xn--ckb36214f; ; xn--ghbcp.xn--ckb36214f; [B5, B6, V6] # لمي.ک +xn--ghbcp.xn--ckb36214f; \u0644\u0645\u064A.\u06A9; [B5, B6, V6]; xn--ghbcp.xn--ckb36214f; ; ; # لمي.ک +xn--ghbcp494x.xn--ckb36214f; \u0644\u0645\u064A\u200D.\u06A9; [B3, B5, B6, C2, V6]; xn--ghbcp494x.xn--ckb36214f; ; ; # لمي.ک +Ⴜ\u1C2F𐳒≯。\u06E0\u1732\u0FBA; Ⴜ\u1C2F𐳒≯.\u06E0\u1732\u0FBA; [B1, B5, B6, V5, V6]; xn--0nd679cf3eq67y.xn--wlb646b4ng; ; ; # Ⴜᰯ𐳒≯.۠ᜲྺ +Ⴜ\u1C2F𐳒>\u0338。\u06E0\u1732\u0FBA; Ⴜ\u1C2F𐳒≯.\u06E0\u1732\u0FBA; [B1, B5, B6, V5, V6]; xn--0nd679cf3eq67y.xn--wlb646b4ng; ; ; # Ⴜᰯ𐳒≯.۠ᜲྺ +ⴜ\u1C2F𐳒>\u0338。\u06E0\u1732\u0FBA; ⴜ\u1C2F𐳒≯.\u06E0\u1732\u0FBA; [B1, B5, B6, V5]; xn--r1f68xh1jgv7u.xn--wlb646b4ng; ; ; # ⴜᰯ𐳒≯.۠ᜲྺ +ⴜ\u1C2F𐳒≯。\u06E0\u1732\u0FBA; ⴜ\u1C2F𐳒≯.\u06E0\u1732\u0FBA; [B1, B5, B6, V5]; xn--r1f68xh1jgv7u.xn--wlb646b4ng; ; ; # ⴜᰯ𐳒≯.۠ᜲྺ +Ⴜ\u1C2F𐲒≯。\u06E0\u1732\u0FBA; Ⴜ\u1C2F𐳒≯.\u06E0\u1732\u0FBA; [B1, B5, B6, V5, V6]; xn--0nd679cf3eq67y.xn--wlb646b4ng; ; ; # Ⴜᰯ𐳒≯.۠ᜲྺ +Ⴜ\u1C2F𐲒>\u0338。\u06E0\u1732\u0FBA; Ⴜ\u1C2F𐳒≯.\u06E0\u1732\u0FBA; [B1, B5, B6, V5, V6]; xn--0nd679cf3eq67y.xn--wlb646b4ng; ; ; # Ⴜᰯ𐳒≯.۠ᜲྺ +xn--0nd679cf3eq67y.xn--wlb646b4ng; Ⴜ\u1C2F𐳒≯.\u06E0\u1732\u0FBA; [B1, B5, B6, V5, V6]; xn--0nd679cf3eq67y.xn--wlb646b4ng; ; ; # Ⴜᰯ𐳒≯.۠ᜲྺ +xn--r1f68xh1jgv7u.xn--wlb646b4ng; ⴜ\u1C2F𐳒≯.\u06E0\u1732\u0FBA; [B1, B5, B6, V5]; xn--r1f68xh1jgv7u.xn--wlb646b4ng; ; ; # ⴜᰯ𐳒≯.۠ᜲྺ +𐋵。\uFCEC; 𐋵.\u0643\u0645; [B1]; xn--p97c.xn--fhbe; ; ; # 𐋵.كم +𐋵。\u0643\u0645; 𐋵.\u0643\u0645; [B1]; xn--p97c.xn--fhbe; ; ; # 𐋵.كم +xn--p97c.xn--fhbe; 𐋵.\u0643\u0645; [B1]; xn--p97c.xn--fhbe; ; ; # 𐋵.كم +𐋵.\u0643\u0645; ; [B1]; xn--p97c.xn--fhbe; ; ; # 𐋵.كم +≮.\uAAEC⹈; ≮.\uAAEC⹈; [V6]; xn--gdh0880o.xn--4tjx101bsg00ds9pyc; ; ; # ≮.ꫬ⹈ +<\u0338.\uAAEC⹈; ≮.\uAAEC⹈; [V6]; xn--gdh0880o.xn--4tjx101bsg00ds9pyc; ; ; # ≮.ꫬ⹈ +≮.\uAAEC⹈; ; [V6]; xn--gdh0880o.xn--4tjx101bsg00ds9pyc; ; ; # ≮.ꫬ⹈ +<\u0338.\uAAEC⹈; ≮.\uAAEC⹈; [V6]; xn--gdh0880o.xn--4tjx101bsg00ds9pyc; ; ; # ≮.ꫬ⹈ +xn--gdh0880o.xn--4tjx101bsg00ds9pyc; ≮.\uAAEC⹈; [V6]; xn--gdh0880o.xn--4tjx101bsg00ds9pyc; ; ; # ≮.ꫬ⹈ +\u2DF0\u0358ᢕ.\u0361𐹷; \u2DF0\u0358ᢕ.\u0361𐹷; [B1, V5, V6]; xn--2ua889htsp.xn--cva2687k2tv0g; ; ; # ⷰ͘ᢕ.͡𐹷 +\u2DF0\u0358ᢕ.\u0361𐹷; ; [B1, V5, V6]; xn--2ua889htsp.xn--cva2687k2tv0g; ; ; # ⷰ͘ᢕ.͡𐹷 +xn--2ua889htsp.xn--cva2687k2tv0g; \u2DF0\u0358ᢕ.\u0361𐹷; [B1, V5, V6]; xn--2ua889htsp.xn--cva2687k2tv0g; ; ; # ⷰ͘ᢕ.͡𐹷 +\uFD79ᡐ\u200C\u06AD.𑋪\u05C7; \u063A\u0645\u0645ᡐ\u200C\u06AD.𑋪\u05C7; [B1, B2, V5]; xn--5gbwa03bg24eptk.xn--vdb1198k; ; xn--5gbwa03bg24e.xn--vdb1198k; # غممᡐڭ.𑋪ׇ +\u063A\u0645\u0645ᡐ\u200C\u06AD.𑋪\u05C7; ; [B1, B2, V5]; xn--5gbwa03bg24eptk.xn--vdb1198k; ; xn--5gbwa03bg24e.xn--vdb1198k; # غممᡐڭ.𑋪ׇ +xn--5gbwa03bg24e.xn--vdb1198k; \u063A\u0645\u0645ᡐ\u06AD.𑋪\u05C7; [B1, B2, V5]; xn--5gbwa03bg24e.xn--vdb1198k; ; ; # غممᡐڭ.𑋪ׇ +xn--5gbwa03bg24eptk.xn--vdb1198k; \u063A\u0645\u0645ᡐ\u200C\u06AD.𑋪\u05C7; [B1, B2, V5]; xn--5gbwa03bg24eptk.xn--vdb1198k; ; ; # غممᡐڭ.𑋪ׇ +𑑂。\u200D🞕; 𑑂.\u200D🞕; [C2, V5, V6]; xn--8v1d.xn--1ug1386plvx1cd8vya; ; xn--8v1d.xn--ye9h41035a2qqs; [V5, V6] # 𑑂.🞕 +𑑂。\u200D🞕; 𑑂.\u200D🞕; [C2, V5, V6]; xn--8v1d.xn--1ug1386plvx1cd8vya; ; xn--8v1d.xn--ye9h41035a2qqs; [V5, V6] # 𑑂.🞕 +xn--8v1d.xn--ye9h41035a2qqs; 𑑂.🞕; [V5, V6]; xn--8v1d.xn--ye9h41035a2qqs; ; ; # 𑑂.🞕 +xn--8v1d.xn--1ug1386plvx1cd8vya; 𑑂.\u200D🞕; [C2, V5, V6]; xn--8v1d.xn--1ug1386plvx1cd8vya; ; ; # 𑑂.🞕 +-\u05E9。⒚; -\u05E9.⒚; [B1, V3, V6]; xn----gjc.xn--cth; ; ; # -ש.⒚ +-\u05E9。19.; -\u05E9.19.; [B1, V3]; xn----gjc.19.; ; ; # -ש.19. +xn----gjc.19.; -\u05E9.19.; [B1, V3]; xn----gjc.19.; ; ; # -ש.19. +xn----gjc.xn--cth; -\u05E9.⒚; [B1, V3, V6]; xn----gjc.xn--cth; ; ; # -ש.⒚ +\u0845\u200C。ᢎ\u200D; \u0845\u200C.ᢎ\u200D; [B5, B6, C1, C2, V6]; xn--3vb882jz4411a.xn--79e259a; ; xn--3vb50049s.xn--79e; [B5, B6, V6] # ࡅ.ᢎ +\u0845\u200C。ᢎ\u200D; \u0845\u200C.ᢎ\u200D; [B5, B6, C1, C2, V6]; xn--3vb882jz4411a.xn--79e259a; ; xn--3vb50049s.xn--79e; [B5, B6, V6] # ࡅ.ᢎ +xn--3vb50049s.xn--79e; \u0845.ᢎ; [B5, B6, V6]; xn--3vb50049s.xn--79e; ; ; # ࡅ.ᢎ +xn--3vb882jz4411a.xn--79e259a; \u0845\u200C.ᢎ\u200D; [B5, B6, C1, C2, V6]; xn--3vb882jz4411a.xn--79e259a; ; ; # ࡅ.ᢎ +ß\u09C1\u1DED。\u06208₅; ß\u09C1\u1DED.\u062085; ; xn--zca266bwrr.xn--85-psd; ; xn--ss-e2f077r.xn--85-psd; # ßুᷭ.ؠ85 +ß\u09C1\u1DED。\u062085; ß\u09C1\u1DED.\u062085; ; xn--zca266bwrr.xn--85-psd; ; xn--ss-e2f077r.xn--85-psd; # ßুᷭ.ؠ85 +SS\u09C1\u1DED。\u062085; ss\u09C1\u1DED.\u062085; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssুᷭ.ؠ85 +ss\u09C1\u1DED。\u062085; ss\u09C1\u1DED.\u062085; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssুᷭ.ؠ85 +Ss\u09C1\u1DED。\u062085; ss\u09C1\u1DED.\u062085; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssুᷭ.ؠ85 +xn--ss-e2f077r.xn--85-psd; ss\u09C1\u1DED.\u062085; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssুᷭ.ؠ85 +ss\u09C1\u1DED.\u062085; ; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssুᷭ.ؠ85 +SS\u09C1\u1DED.\u062085; ss\u09C1\u1DED.\u062085; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssুᷭ.ؠ85 +Ss\u09C1\u1DED.\u062085; ss\u09C1\u1DED.\u062085; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssুᷭ.ؠ85 +xn--zca266bwrr.xn--85-psd; ß\u09C1\u1DED.\u062085; ; xn--zca266bwrr.xn--85-psd; ; ; # ßুᷭ.ؠ85 +ß\u09C1\u1DED.\u062085; ; ; xn--zca266bwrr.xn--85-psd; ; xn--ss-e2f077r.xn--85-psd; # ßুᷭ.ؠ85 +SS\u09C1\u1DED。\u06208₅; ss\u09C1\u1DED.\u062085; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssুᷭ.ؠ85 +ss\u09C1\u1DED。\u06208₅; ss\u09C1\u1DED.\u062085; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssুᷭ.ؠ85 +Ss\u09C1\u1DED。\u06208₅; ss\u09C1\u1DED.\u062085; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssুᷭ.ؠ85 +\u0ACD\u0484魅𝟣.₃𐹥ß; \u0ACD\u0484魅1.3𐹥ß; [B1, V5]; xn--1-0xb049b102o.xn--3-qfa7018r; ; xn--1-0xb049b102o.xn--3ss-nv9t; # ્҄魅1.3𐹥ß +\u0ACD\u0484魅1.3𐹥ß; ; [B1, V5]; xn--1-0xb049b102o.xn--3-qfa7018r; ; xn--1-0xb049b102o.xn--3ss-nv9t; # ્҄魅1.3𐹥ß +\u0ACD\u0484魅1.3𐹥SS; \u0ACD\u0484魅1.3𐹥ss; [B1, V5]; xn--1-0xb049b102o.xn--3ss-nv9t; ; ; # ્҄魅1.3𐹥ss +\u0ACD\u0484魅1.3𐹥ss; ; [B1, V5]; xn--1-0xb049b102o.xn--3ss-nv9t; ; ; # ્҄魅1.3𐹥ss +\u0ACD\u0484魅1.3𐹥Ss; \u0ACD\u0484魅1.3𐹥ss; [B1, V5]; xn--1-0xb049b102o.xn--3ss-nv9t; ; ; # ્҄魅1.3𐹥ss +xn--1-0xb049b102o.xn--3ss-nv9t; \u0ACD\u0484魅1.3𐹥ss; [B1, V5]; xn--1-0xb049b102o.xn--3ss-nv9t; ; ; # ્҄魅1.3𐹥ss +xn--1-0xb049b102o.xn--3-qfa7018r; \u0ACD\u0484魅1.3𐹥ß; [B1, V5]; xn--1-0xb049b102o.xn--3-qfa7018r; ; ; # ્҄魅1.3𐹥ß +\u0ACD\u0484魅𝟣.₃𐹥SS; \u0ACD\u0484魅1.3𐹥ss; [B1, V5]; xn--1-0xb049b102o.xn--3ss-nv9t; ; ; # ્҄魅1.3𐹥ss +\u0ACD\u0484魅𝟣.₃𐹥ss; \u0ACD\u0484魅1.3𐹥ss; [B1, V5]; xn--1-0xb049b102o.xn--3ss-nv9t; ; ; # ્҄魅1.3𐹥ss +\u0ACD\u0484魅𝟣.₃𐹥Ss; \u0ACD\u0484魅1.3𐹥ss; [B1, V5]; xn--1-0xb049b102o.xn--3ss-nv9t; ; ; # ્҄魅1.3𐹥ss +\u072B。𑓂⒈𑜫; \u072B.𑓂⒈𑜫; [B1, V5, V6]; xn--1nb.xn--tsh7798f6rbrt828c; ; ; # ܫ.𑓂⒈𑜫 +\u072B。𑓂1.𑜫; \u072B.𑓂1.𑜫; [B1, V5, V6]; xn--1nb.xn--1-jq9i.xn--ji2dg9877c; ; ; # ܫ.𑓂1.𑜫 +xn--1nb.xn--1-jq9i.xn--ji2dg9877c; \u072B.𑓂1.𑜫; [B1, V5, V6]; xn--1nb.xn--1-jq9i.xn--ji2dg9877c; ; ; # ܫ.𑓂1.𑜫 +xn--1nb.xn--tsh7798f6rbrt828c; \u072B.𑓂⒈𑜫; [B1, V5, V6]; xn--1nb.xn--tsh7798f6rbrt828c; ; ; # ܫ.𑓂⒈𑜫 +\uFE0Dછ。嵨; છ.嵨; ; xn--6dc.xn--tot; ; ; # છ.嵨 +xn--6dc.xn--tot; છ.嵨; ; xn--6dc.xn--tot; ; ; # છ.嵨 +છ.嵨; ; ; xn--6dc.xn--tot; ; ; # છ.嵨 +Ⴔ≠Ⴀ.𐹥𐹰; ; [B1, V6]; xn--7md3b171g.xn--do0dwa; ; ; # Ⴔ≠Ⴀ.𐹥𐹰 +Ⴔ=\u0338Ⴀ.𐹥𐹰; Ⴔ≠Ⴀ.𐹥𐹰; [B1, V6]; xn--7md3b171g.xn--do0dwa; ; ; # Ⴔ≠Ⴀ.𐹥𐹰 +ⴔ=\u0338ⴀ.𐹥𐹰; ⴔ≠ⴀ.𐹥𐹰; [B1]; xn--1ch603bxb.xn--do0dwa; ; ; # ⴔ≠ⴀ.𐹥𐹰 +ⴔ≠ⴀ.𐹥𐹰; ; [B1]; xn--1ch603bxb.xn--do0dwa; ; ; # ⴔ≠ⴀ.𐹥𐹰 +xn--1ch603bxb.xn--do0dwa; ⴔ≠ⴀ.𐹥𐹰; [B1]; xn--1ch603bxb.xn--do0dwa; ; ; # ⴔ≠ⴀ.𐹥𐹰 +xn--7md3b171g.xn--do0dwa; Ⴔ≠Ⴀ.𐹥𐹰; [B1, V6]; xn--7md3b171g.xn--do0dwa; ; ; # Ⴔ≠Ⴀ.𐹥𐹰 +-\u200C⒙𐫥。𝨵; -\u200C⒙𐫥.𝨵; [C1, V3, V5, V6]; xn----sgn18r3191a.xn--382h; ; xn----ddps939g.xn--382h; [V3, V5, V6] # -⒙𐫥.𝨵 +-\u200C18.𐫥。𝨵; -\u200C18.𐫥.𝨵; [C1, V3, V5]; xn---18-9m0a.xn--rx9c.xn--382h; ; -18.xn--rx9c.xn--382h; [V3, V5] # -18.𐫥.𝨵 +-18.xn--rx9c.xn--382h; -18.𐫥.𝨵; [V3, V5]; -18.xn--rx9c.xn--382h; ; ; # -18.𐫥.𝨵 +xn---18-9m0a.xn--rx9c.xn--382h; -\u200C18.𐫥.𝨵; [C1, V3, V5]; xn---18-9m0a.xn--rx9c.xn--382h; ; ; # -18.𐫥.𝨵 +xn----ddps939g.xn--382h; -⒙𐫥.𝨵; [V3, V5, V6]; xn----ddps939g.xn--382h; ; ; # -⒙𐫥.𝨵 +xn----sgn18r3191a.xn--382h; -\u200C⒙𐫥.𝨵; [C1, V3, V5, V6]; xn----sgn18r3191a.xn--382h; ; ; # -⒙𐫥.𝨵 +︒.ʌᠣ-𐹽; ; [B1, B5, B6, V6]; xn--y86c.xn----73a596nuh9t; ; ; # ︒.ʌᠣ-𐹽 +。.ʌᠣ-𐹽; ..ʌᠣ-𐹽; [B5, B6, X4_2]; ..xn----73a596nuh9t; [B5, B6, A4_2]; ; # ..ʌᠣ-𐹽 +。.Ʌᠣ-𐹽; ..ʌᠣ-𐹽; [B5, B6, X4_2]; ..xn----73a596nuh9t; [B5, B6, A4_2]; ; # ..ʌᠣ-𐹽 +..xn----73a596nuh9t; ..ʌᠣ-𐹽; [B5, B6, X4_2]; ..xn----73a596nuh9t; [B5, B6, A4_2]; ; # ..ʌᠣ-𐹽 +︒.Ʌᠣ-𐹽; ︒.ʌᠣ-𐹽; [B1, B5, B6, V6]; xn--y86c.xn----73a596nuh9t; ; ; # ︒.ʌᠣ-𐹽 +xn--y86c.xn----73a596nuh9t; ︒.ʌᠣ-𐹽; [B1, B5, B6, V6]; xn--y86c.xn----73a596nuh9t; ; ; # ︒.ʌᠣ-𐹽 +\uFE05︒。𦀾\u1CE0; ︒.𦀾\u1CE0; [V6]; xn--y86c.xn--t6f5138v; ; ; # ︒.𦀾᳠ +\uFE05。。𦀾\u1CE0; ..𦀾\u1CE0; [X4_2]; ..xn--t6f5138v; [A4_2]; ; # ..𦀾᳠ +..xn--t6f5138v; ..𦀾\u1CE0; [X4_2]; ..xn--t6f5138v; [A4_2]; ; # ..𦀾᳠ +xn--y86c.xn--t6f5138v; ︒.𦀾\u1CE0; [V6]; xn--y86c.xn--t6f5138v; ; ; # ︒.𦀾᳠ +xn--t6f5138v; 𦀾\u1CE0; ; xn--t6f5138v; ; ; # 𦀾᳠ +𦀾\u1CE0; ; ; xn--t6f5138v; ; ; # 𦀾᳠ +ß。ᡁ; ß.ᡁ; [B2, B3, V6]; xn--zca9432wb989f.xn--07e; ; xn--ss-o412ac6305g.xn--07e; # ß.ᡁ +SS。ᡁ; ss.ᡁ; [B2, B3, V6]; xn--ss-o412ac6305g.xn--07e; ; ; # ss.ᡁ +ss。ᡁ; ss.ᡁ; [B2, B3, V6]; xn--ss-o412ac6305g.xn--07e; ; ; # ss.ᡁ +Ss。ᡁ; ss.ᡁ; [B2, B3, V6]; xn--ss-o412ac6305g.xn--07e; ; ; # ss.ᡁ +xn--ss-o412ac6305g.xn--07e; ss.ᡁ; [B2, B3, V6]; xn--ss-o412ac6305g.xn--07e; ; ; # ss.ᡁ +xn--zca9432wb989f.xn--07e; ß.ᡁ; [B2, B3, V6]; xn--zca9432wb989f.xn--07e; ; ; # ß.ᡁ +\uA953\u200D\u062C\u066C。𱆎\u200C󠅆; \uA953\u200D\u062C\u066C.𱆎\u200C; [B5, B6, C1, V5, V6]; xn--rgb2k500fhq9j.xn--0ug78870a5sp9d; ; xn--rgb2k6711c.xn--ec8nj3948b; [B5, B6, V5, V6] # ꥓ج٬.𱆎 +xn--rgb2k6711c.xn--ec8nj3948b; \uA953\u062C\u066C.𱆎; [B5, B6, V5, V6]; xn--rgb2k6711c.xn--ec8nj3948b; ; ; # ꥓ج٬.𱆎 +xn--rgb2k500fhq9j.xn--0ug78870a5sp9d; \uA953\u200D\u062C\u066C.𱆎\u200C; [B5, B6, C1, V5, V6]; xn--rgb2k500fhq9j.xn--0ug78870a5sp9d; ; ; # ꥓ج٬.𱆎 +.-ß\u200C≠; .-ß\u200C≠; [C1, V3, V6]; xn--u836e.xn----qfa750ve7b; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ß≠ +.-ß\u200C=\u0338; .-ß\u200C≠; [C1, V3, V6]; xn--u836e.xn----qfa750ve7b; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ß≠ +.-ß\u200C≠; ; [C1, V3, V6]; xn--u836e.xn----qfa750ve7b; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ß≠ +.-ß\u200C=\u0338; .-ß\u200C≠; [C1, V3, V6]; xn--u836e.xn----qfa750ve7b; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ß≠ +.-SS\u200C=\u0338; .-ss\u200C≠; [C1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ss≠ +.-SS\u200C≠; .-ss\u200C≠; [C1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ss≠ +.-ss\u200C≠; ; [C1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ss≠ +.-ss\u200C=\u0338; .-ss\u200C≠; [C1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ss≠ +.-Ss\u200C=\u0338; .-ss\u200C≠; [C1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ss≠ +.-Ss\u200C≠; .-ss\u200C≠; [C1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ss≠ +xn--u836e.xn---ss-gl2a; .-ss≠; [V3, V6]; xn--u836e.xn---ss-gl2a; ; ; # .-ss≠ +xn--u836e.xn---ss-cn0at5l; .-ss\u200C≠; [C1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; ; # .-ss≠ +xn--u836e.xn----qfa750ve7b; .-ß\u200C≠; [C1, V3, V6]; xn--u836e.xn----qfa750ve7b; ; ; # .-ß≠ +.-SS\u200C=\u0338; .-ss\u200C≠; [C1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ss≠ +.-SS\u200C≠; .-ss\u200C≠; [C1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ss≠ +.-ss\u200C≠; .-ss\u200C≠; [C1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ss≠ +.-ss\u200C=\u0338; .-ss\u200C≠; [C1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ss≠ +.-Ss\u200C=\u0338; .-ss\u200C≠; [C1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ss≠ +.-Ss\u200C≠; .-ss\u200C≠; [C1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ss≠ +ᡙ\u200C。≯𐋲≠; ᡙ\u200C.≯𐋲≠; [C1]; xn--p8e650b.xn--1ch3a7084l; ; xn--p8e.xn--1ch3a7084l; [] # ᡙ.≯𐋲≠ +ᡙ\u200C。>\u0338𐋲=\u0338; ᡙ\u200C.≯𐋲≠; [C1]; xn--p8e650b.xn--1ch3a7084l; ; xn--p8e.xn--1ch3a7084l; [] # ᡙ.≯𐋲≠ +ᡙ\u200C。≯𐋲≠; ᡙ\u200C.≯𐋲≠; [C1]; xn--p8e650b.xn--1ch3a7084l; ; xn--p8e.xn--1ch3a7084l; [] # ᡙ.≯𐋲≠ +ᡙ\u200C。>\u0338𐋲=\u0338; ᡙ\u200C.≯𐋲≠; [C1]; xn--p8e650b.xn--1ch3a7084l; ; xn--p8e.xn--1ch3a7084l; [] # ᡙ.≯𐋲≠ +xn--p8e.xn--1ch3a7084l; ᡙ.≯𐋲≠; ; xn--p8e.xn--1ch3a7084l; ; ; # ᡙ.≯𐋲≠ +ᡙ.≯𐋲≠; ; ; xn--p8e.xn--1ch3a7084l; ; ; # ᡙ.≯𐋲≠ +ᡙ.>\u0338𐋲=\u0338; ᡙ.≯𐋲≠; ; xn--p8e.xn--1ch3a7084l; ; ; # ᡙ.≯𐋲≠ +xn--p8e650b.xn--1ch3a7084l; ᡙ\u200C.≯𐋲≠; [C1]; xn--p8e650b.xn--1ch3a7084l; ; ; # ᡙ.≯𐋲≠ +𐹧𞲄。\u034E🄀; 𐹧𞲄.\u034E🄀; [B1, V5, V6]; xn--fo0dw409aq58qrn69d.xn--sua6883w; ; ; # 𐹧𞲄.͎🄀 +𐹧𞲄。\u034E0.; 𐹧𞲄.\u034E0.; [B1, V5, V6]; xn--fo0dw409aq58qrn69d.xn--0-bgb.; ; ; # 𐹧𞲄.͎0. +xn--fo0dw409aq58qrn69d.xn--0-bgb.; 𐹧𞲄.\u034E0.; [B1, V5, V6]; xn--fo0dw409aq58qrn69d.xn--0-bgb.; ; ; # 𐹧𞲄.͎0. +xn--fo0dw409aq58qrn69d.xn--sua6883w; 𐹧𞲄.\u034E🄀; [B1, V5, V6]; xn--fo0dw409aq58qrn69d.xn--sua6883w; ; ; # 𐹧𞲄.͎🄀 +Ⴄ.\u200D\u0721ς; Ⴄ.\u200D\u0721ς; [B1, C2, V6]; xn--cnd.xn--3xa93o3t5ajq467a; ; xn--cnd.xn--4xa73ob5892c; [B2, B3, V6] # Ⴄ.ܡς +Ⴄ.\u200D\u0721ς; ; [B1, C2, V6]; xn--cnd.xn--3xa93o3t5ajq467a; ; xn--cnd.xn--4xa73ob5892c; [B2, B3, V6] # Ⴄ.ܡς +ⴄ.\u200D\u0721ς; ; [B1, C2, V6]; xn--vkj.xn--3xa93o3t5ajq467a; ; xn--vkj.xn--4xa73ob5892c; [B2, B3, V6] # ⴄ.ܡς +Ⴄ.\u200D\u0721Σ; Ⴄ.\u200D\u0721σ; [B1, C2, V6]; xn--cnd.xn--4xa73o3t5ajq467a; ; xn--cnd.xn--4xa73ob5892c; [B2, B3, V6] # Ⴄ.ܡσ +ⴄ.\u200D\u0721σ; ; [B1, C2, V6]; xn--vkj.xn--4xa73o3t5ajq467a; ; xn--vkj.xn--4xa73ob5892c; [B2, B3, V6] # ⴄ.ܡσ +xn--vkj.xn--4xa73ob5892c; ⴄ.\u0721σ; [B2, B3, V6]; xn--vkj.xn--4xa73ob5892c; ; ; # ⴄ.ܡσ +xn--vkj.xn--4xa73o3t5ajq467a; ⴄ.\u200D\u0721σ; [B1, C2, V6]; xn--vkj.xn--4xa73o3t5ajq467a; ; ; # ⴄ.ܡσ +xn--cnd.xn--4xa73ob5892c; Ⴄ.\u0721σ; [B2, B3, V6]; xn--cnd.xn--4xa73ob5892c; ; ; # Ⴄ.ܡσ +xn--cnd.xn--4xa73o3t5ajq467a; Ⴄ.\u200D\u0721σ; [B1, C2, V6]; xn--cnd.xn--4xa73o3t5ajq467a; ; ; # Ⴄ.ܡσ +xn--vkj.xn--3xa93o3t5ajq467a; ⴄ.\u200D\u0721ς; [B1, C2, V6]; xn--vkj.xn--3xa93o3t5ajq467a; ; ; # ⴄ.ܡς +xn--cnd.xn--3xa93o3t5ajq467a; Ⴄ.\u200D\u0721ς; [B1, C2, V6]; xn--cnd.xn--3xa93o3t5ajq467a; ; ; # Ⴄ.ܡς +ⴄ.\u200D\u0721ς; ⴄ.\u200D\u0721ς; [B1, C2, V6]; xn--vkj.xn--3xa93o3t5ajq467a; ; xn--vkj.xn--4xa73ob5892c; [B2, B3, V6] # ⴄ.ܡς +Ⴄ.\u200D\u0721Σ; Ⴄ.\u200D\u0721σ; [B1, C2, V6]; xn--cnd.xn--4xa73o3t5ajq467a; ; xn--cnd.xn--4xa73ob5892c; [B2, B3, V6] # Ⴄ.ܡσ +ⴄ.\u200D\u0721σ; ⴄ.\u200D\u0721σ; [B1, C2, V6]; xn--vkj.xn--4xa73o3t5ajq467a; ; xn--vkj.xn--4xa73ob5892c; [B2, B3, V6] # ⴄ.ܡσ +\u0613.Ⴕ; ; [V6]; xn--1fb94204l.xn--tnd; ; ; # ؓ.Ⴕ +\u0613.ⴕ; ; [V6]; xn--1fb94204l.xn--dlj; ; ; # ؓ.ⴕ +xn--1fb94204l.xn--dlj; \u0613.ⴕ; [V6]; xn--1fb94204l.xn--dlj; ; ; # ؓ.ⴕ +xn--1fb94204l.xn--tnd; \u0613.Ⴕ; [V6]; xn--1fb94204l.xn--tnd; ; ; # ؓ.Ⴕ +≯\u1DF3𞤥。\u200C\uA8C4\u200D; ≯\u1DF3𞤥.\u200C\uA8C4\u200D; [B1, C1, C2, V6]; xn--ofg13qyr21c.xn--0ugc0116hix29k; ; xn--ofg13qyr21c.xn--0f9au6706d; [B1, V5, V6] # ≯ᷳ𞤥.꣄ +>\u0338\u1DF3𞤥。\u200C\uA8C4\u200D; ≯\u1DF3𞤥.\u200C\uA8C4\u200D; [B1, C1, C2, V6]; xn--ofg13qyr21c.xn--0ugc0116hix29k; ; xn--ofg13qyr21c.xn--0f9au6706d; [B1, V5, V6] # ≯ᷳ𞤥.꣄ +>\u0338\u1DF3𞤃。\u200C\uA8C4\u200D; ≯\u1DF3𞤥.\u200C\uA8C4\u200D; [B1, C1, C2, V6]; xn--ofg13qyr21c.xn--0ugc0116hix29k; ; xn--ofg13qyr21c.xn--0f9au6706d; [B1, V5, V6] # ≯ᷳ𞤥.꣄ +≯\u1DF3𞤃。\u200C\uA8C4\u200D; ≯\u1DF3𞤥.\u200C\uA8C4\u200D; [B1, C1, C2, V6]; xn--ofg13qyr21c.xn--0ugc0116hix29k; ; xn--ofg13qyr21c.xn--0f9au6706d; [B1, V5, V6] # ≯ᷳ𞤥.꣄ +xn--ofg13qyr21c.xn--0f9au6706d; ≯\u1DF3𞤥.\uA8C4; [B1, V5, V6]; xn--ofg13qyr21c.xn--0f9au6706d; ; ; # ≯ᷳ𞤥.꣄ +xn--ofg13qyr21c.xn--0ugc0116hix29k; ≯\u1DF3𞤥.\u200C\uA8C4\u200D; [B1, C1, C2, V6]; xn--ofg13qyr21c.xn--0ugc0116hix29k; ; ; # ≯ᷳ𞤥.꣄ +\u200C󠄷。; \u200C.; [C1, V6]; xn--0ug.xn--w720c; ; .xn--w720c; [V6, A4_2] # . +\u200C󠄷。; \u200C.; [C1, V6]; xn--0ug.xn--w720c; ; .xn--w720c; [V6, A4_2] # . +.xn--w720c; .; [V6, X4_2]; .xn--w720c; [V6, A4_2]; ; # . +xn--0ug.xn--w720c; \u200C.; [C1, V6]; xn--0ug.xn--w720c; ; ; # . +⒈\u0DD6焅.\u200Dꡟ; ; [C2, V6]; xn--t1c337io97c.xn--1ugz184c9lw7i; ; xn--t1c337io97c.xn--4c9a21133d; [V6] # ⒈ූ焅.ꡟ +1.\u0DD6焅.\u200Dꡟ; ; [C2, V5, V6]; 1.xn--t1c6981c.xn--1ugz184c9lw7i; ; 1.xn--t1c6981c.xn--4c9a21133d; [V5, V6] # 1.ූ焅.ꡟ +1.xn--t1c6981c.xn--4c9a21133d; 1.\u0DD6焅.ꡟ; [V5, V6]; 1.xn--t1c6981c.xn--4c9a21133d; ; ; # 1.ූ焅.ꡟ +1.xn--t1c6981c.xn--1ugz184c9lw7i; 1.\u0DD6焅.\u200Dꡟ; [C2, V5, V6]; 1.xn--t1c6981c.xn--1ugz184c9lw7i; ; ; # 1.ූ焅.ꡟ +xn--t1c337io97c.xn--4c9a21133d; ⒈\u0DD6焅.ꡟ; [V6]; xn--t1c337io97c.xn--4c9a21133d; ; ; # ⒈ූ焅.ꡟ +xn--t1c337io97c.xn--1ugz184c9lw7i; ⒈\u0DD6焅.\u200Dꡟ; [C2, V6]; xn--t1c337io97c.xn--1ugz184c9lw7i; ; ; # ⒈ූ焅.ꡟ +\u1DCDς≮.ς𝪦𞤕0; \u1DCDς≮.ς𝪦𞤷0; [B1, B5, V5]; xn--3xa744kvid.xn--0-xmb85727aggma; ; xn--4xa544kvid.xn--0-zmb55727aggma; # ᷍ς≮.ς𝪦𞤷0 +\u1DCDς<\u0338.ς𝪦𞤕0; \u1DCDς≮.ς𝪦𞤷0; [B1, B5, V5]; xn--3xa744kvid.xn--0-xmb85727aggma; ; xn--4xa544kvid.xn--0-zmb55727aggma; # ᷍ς≮.ς𝪦𞤷0 +\u1DCDς<\u0338.ς𝪦𞤷0; \u1DCDς≮.ς𝪦𞤷0; [B1, B5, V5]; xn--3xa744kvid.xn--0-xmb85727aggma; ; xn--4xa544kvid.xn--0-zmb55727aggma; # ᷍ς≮.ς𝪦𞤷0 +\u1DCDς≮.ς𝪦𞤷0; ; [B1, B5, V5]; xn--3xa744kvid.xn--0-xmb85727aggma; ; xn--4xa544kvid.xn--0-zmb55727aggma; # ᷍ς≮.ς𝪦𞤷0 +\u1DCDΣ≮.Σ𝪦𞤕0; \u1DCDσ≮.σ𝪦𞤷0; [B1, B5, V5]; xn--4xa544kvid.xn--0-zmb55727aggma; ; ; # ᷍σ≮.σ𝪦𞤷0 +\u1DCDΣ<\u0338.Σ𝪦𞤕0; \u1DCDσ≮.σ𝪦𞤷0; [B1, B5, V5]; xn--4xa544kvid.xn--0-zmb55727aggma; ; ; # ᷍σ≮.σ𝪦𞤷0 +\u1DCDσ<\u0338.σ𝪦𞤷0; \u1DCDσ≮.σ𝪦𞤷0; [B1, B5, V5]; xn--4xa544kvid.xn--0-zmb55727aggma; ; ; # ᷍σ≮.σ𝪦𞤷0 +\u1DCDσ≮.σ𝪦𞤷0; ; [B1, B5, V5]; xn--4xa544kvid.xn--0-zmb55727aggma; ; ; # ᷍σ≮.σ𝪦𞤷0 +\u1DCDΣ≮.Σ𝪦𞤷0; \u1DCDσ≮.σ𝪦𞤷0; [B1, B5, V5]; xn--4xa544kvid.xn--0-zmb55727aggma; ; ; # ᷍σ≮.σ𝪦𞤷0 +\u1DCDΣ<\u0338.Σ𝪦𞤷0; \u1DCDσ≮.σ𝪦𞤷0; [B1, B5, V5]; xn--4xa544kvid.xn--0-zmb55727aggma; ; ; # ᷍σ≮.σ𝪦𞤷0 +xn--4xa544kvid.xn--0-zmb55727aggma; \u1DCDσ≮.σ𝪦𞤷0; [B1, B5, V5]; xn--4xa544kvid.xn--0-zmb55727aggma; ; ; # ᷍σ≮.σ𝪦𞤷0 +xn--3xa744kvid.xn--0-xmb85727aggma; \u1DCDς≮.ς𝪦𞤷0; [B1, B5, V5]; xn--3xa744kvid.xn--0-xmb85727aggma; ; ; # ᷍ς≮.ς𝪦𞤷0 +\u1DCDσ≮.σ𝪦𞤕0; \u1DCDσ≮.σ𝪦𞤷0; [B1, B5, V5]; xn--4xa544kvid.xn--0-zmb55727aggma; ; ; # ᷍σ≮.σ𝪦𞤷0 +\u1DCDσ<\u0338.σ𝪦𞤕0; \u1DCDσ≮.σ𝪦𞤷0; [B1, B5, V5]; xn--4xa544kvid.xn--0-zmb55727aggma; ; ; # ᷍σ≮.σ𝪦𞤷0 +ß\u05B9𐫙.\u05AD\u08A1; ; [B1, B5, B6, V5, V6]; xn--zca89v339zj118e.xn--4cb62m; ; xn--ss-xjd6058xlz50g.xn--4cb62m; # ßֹ𐫙.֭ࢡ +SS\u05B9𐫙.\u05AD\u08A1; ss\u05B9𐫙.\u05AD\u08A1; [B1, B5, B6, V5, V6]; xn--ss-xjd6058xlz50g.xn--4cb62m; ; ; # ssֹ𐫙.֭ࢡ +ss\u05B9𐫙.\u05AD\u08A1; ; [B1, B5, B6, V5, V6]; xn--ss-xjd6058xlz50g.xn--4cb62m; ; ; # ssֹ𐫙.֭ࢡ +Ss\u05B9𐫙.\u05AD\u08A1; ss\u05B9𐫙.\u05AD\u08A1; [B1, B5, B6, V5, V6]; xn--ss-xjd6058xlz50g.xn--4cb62m; ; ; # ssֹ𐫙.֭ࢡ +xn--ss-xjd6058xlz50g.xn--4cb62m; ss\u05B9𐫙.\u05AD\u08A1; [B1, B5, B6, V5, V6]; xn--ss-xjd6058xlz50g.xn--4cb62m; ; ; # ssֹ𐫙.֭ࢡ +xn--zca89v339zj118e.xn--4cb62m; ß\u05B9𐫙.\u05AD\u08A1; [B1, B5, B6, V5, V6]; xn--zca89v339zj118e.xn--4cb62m; ; ; # ßֹ𐫙.֭ࢡ +-𞣄。⒈; -𞣄.⒈; [B1, V3, V6]; xn----xc8r.xn--tsh; ; ; # -𞣄.⒈ +-𞣄。1.; -𞣄.1.; [B1, V3]; xn----xc8r.1.; ; ; # -𞣄.1. +xn----xc8r.1.; -𞣄.1.; [B1, V3]; xn----xc8r.1.; ; ; # -𞣄.1. +xn----xc8r.xn--tsh; -𞣄.⒈; [B1, V3, V6]; xn----xc8r.xn--tsh; ; ; # -𞣄.⒈ +𐫖𝟡。\u063E𑘿; 𐫖9.\u063E𑘿; [B5, V6]; xn--9-el5iv442t.xn--9gb0830l; ; ; # 𐫖9.ؾ𑘿 +𐫖9。\u063E𑘿; 𐫖9.\u063E𑘿; [B5, V6]; xn--9-el5iv442t.xn--9gb0830l; ; ; # 𐫖9.ؾ𑘿 +xn--9-el5iv442t.xn--9gb0830l; 𐫖9.\u063E𑘿; [B5, V6]; xn--9-el5iv442t.xn--9gb0830l; ; ; # 𐫖9.ؾ𑘿 +\u0668\uFC8C\u0668\u1A5D.\u200D; \u0668\u0646\u0645\u0668\u1A5D.\u200D; [B1, C2]; xn--hhbb5hc956w.xn--1ug; ; xn--hhbb5hc956w.; [B1] # ٨نم٨ᩝ. +\u0668\u0646\u0645\u0668\u1A5D.\u200D; ; [B1, C2]; xn--hhbb5hc956w.xn--1ug; ; xn--hhbb5hc956w.; [B1] # ٨نم٨ᩝ. +xn--hhbb5hc956w.; \u0668\u0646\u0645\u0668\u1A5D.; [B1]; xn--hhbb5hc956w.; ; ; # ٨نم٨ᩝ. +xn--hhbb5hc956w.xn--1ug; \u0668\u0646\u0645\u0668\u1A5D.\u200D; [B1, C2]; xn--hhbb5hc956w.xn--1ug; ; ; # ٨نم٨ᩝ. +𝟘.Ⴇ\uFD50; 0.Ⴇ\u062A\u062C\u0645; [B1, B5, V6]; 0.xn--pgbe9e344c2725svff8b; ; ; # 0.Ⴇتجم +0.Ⴇ\u062A\u062C\u0645; ; [B1, B5, V6]; 0.xn--pgbe9e344c2725svff8b; ; ; # 0.Ⴇتجم +0.ⴇ\u062A\u062C\u0645; ; [B1, B5, V6]; 0.xn--pgbe9ez79qd207lvff8b; ; ; # 0.ⴇتجم +0.xn--pgbe9ez79qd207lvff8b; 0.ⴇ\u062A\u062C\u0645; [B1, B5, V6]; 0.xn--pgbe9ez79qd207lvff8b; ; ; # 0.ⴇتجم +0.xn--pgbe9e344c2725svff8b; 0.Ⴇ\u062A\u062C\u0645; [B1, B5, V6]; 0.xn--pgbe9e344c2725svff8b; ; ; # 0.Ⴇتجم +𝟘.ⴇ\uFD50; 0.ⴇ\u062A\u062C\u0645; [B1, B5, V6]; 0.xn--pgbe9ez79qd207lvff8b; ; ; # 0.ⴇتجم +𑇀▍.⁞ᠰ; ; [V5]; xn--9zh3057f.xn--j7e103b; ; ; # 𑇀▍.⁞ᠰ +xn--9zh3057f.xn--j7e103b; 𑇀▍.⁞ᠰ; [V5]; xn--9zh3057f.xn--j7e103b; ; ; # 𑇀▍.⁞ᠰ +\u200D-\u067A.; ; [B1, C2, V6]; xn----qrc357q.xn--ts49b; ; xn----qrc.xn--ts49b; [B1, V3, V6] # -ٺ. +xn----qrc.xn--ts49b; -\u067A.; [B1, V3, V6]; xn----qrc.xn--ts49b; ; ; # -ٺ. +xn----qrc357q.xn--ts49b; \u200D-\u067A.; [B1, C2, V6]; xn----qrc357q.xn--ts49b; ; ; # -ٺ. +ᠢ𐮂𐫘寐。\u200C≯✳; ᠢ𐮂𐫘寐.\u200C≯✳; [B1, B5, C1]; xn--46e6675axzzhota.xn--0ug06gu8f; ; xn--46e6675axzzhota.xn--hdh99p; [B1, B5] # ᠢ𐮂𐫘寐.≯✳ +ᠢ𐮂𐫘寐。\u200C>\u0338✳; ᠢ𐮂𐫘寐.\u200C≯✳; [B1, B5, C1]; xn--46e6675axzzhota.xn--0ug06gu8f; ; xn--46e6675axzzhota.xn--hdh99p; [B1, B5] # ᠢ𐮂𐫘寐.≯✳ +ᠢ𐮂𐫘寐。\u200C≯✳; ᠢ𐮂𐫘寐.\u200C≯✳; [B1, B5, C1]; xn--46e6675axzzhota.xn--0ug06gu8f; ; xn--46e6675axzzhota.xn--hdh99p; [B1, B5] # ᠢ𐮂𐫘寐.≯✳ +ᠢ𐮂𐫘寐。\u200C>\u0338✳; ᠢ𐮂𐫘寐.\u200C≯✳; [B1, B5, C1]; xn--46e6675axzzhota.xn--0ug06gu8f; ; xn--46e6675axzzhota.xn--hdh99p; [B1, B5] # ᠢ𐮂𐫘寐.≯✳ +xn--46e6675axzzhota.xn--hdh99p; ᠢ𐮂𐫘寐.≯✳; [B1, B5]; xn--46e6675axzzhota.xn--hdh99p; ; ; # ᠢ𐮂𐫘寐.≯✳ +xn--46e6675axzzhota.xn--0ug06gu8f; ᠢ𐮂𐫘寐.\u200C≯✳; [B1, B5, C1]; xn--46e6675axzzhota.xn--0ug06gu8f; ; ; # ᠢ𐮂𐫘寐.≯✳ +\u200D。ႺႴ; \u200D.ႺႴ; [B1, B5, B6, C2, V6]; xn--1ug.xn--sndl01647an3h1h; ; .xn--sndl01647an3h1h; [B5, B6, V6, A4_2] # .ႺႴ +\u200D。ႺႴ; \u200D.ႺႴ; [B1, B5, B6, C2, V6]; xn--1ug.xn--sndl01647an3h1h; ; .xn--sndl01647an3h1h; [B5, B6, V6, A4_2] # .ႺႴ +\u200D。ⴚⴔ; \u200D.ⴚⴔ; [B1, B5, B6, C2, V6]; xn--1ug.xn--cljl81825an3r4h; ; .xn--cljl81825an3r4h; [B5, B6, V6, A4_2] # .ⴚⴔ +\u200D。Ⴚⴔ; \u200D.Ⴚⴔ; [B1, B5, B6, C2, V6]; xn--1ug.xn--ynd036lq981an3r4h; ; .xn--ynd036lq981an3r4h; [B5, B6, V6, A4_2] # .Ⴚⴔ +.xn--ynd036lq981an3r4h; .Ⴚⴔ; [B5, B6, V6, X4_2]; .xn--ynd036lq981an3r4h; [B5, B6, V6, A4_2]; ; # .Ⴚⴔ +xn--1ug.xn--ynd036lq981an3r4h; \u200D.Ⴚⴔ; [B1, B5, B6, C2, V6]; xn--1ug.xn--ynd036lq981an3r4h; ; ; # .Ⴚⴔ +.xn--cljl81825an3r4h; .ⴚⴔ; [B5, B6, V6, X4_2]; .xn--cljl81825an3r4h; [B5, B6, V6, A4_2]; ; # .ⴚⴔ +xn--1ug.xn--cljl81825an3r4h; \u200D.ⴚⴔ; [B1, B5, B6, C2, V6]; xn--1ug.xn--cljl81825an3r4h; ; ; # .ⴚⴔ +.xn--sndl01647an3h1h; .ႺႴ; [B5, B6, V6, X4_2]; .xn--sndl01647an3h1h; [B5, B6, V6, A4_2]; ; # .ႺႴ +xn--1ug.xn--sndl01647an3h1h; \u200D.ႺႴ; [B1, B5, B6, C2, V6]; xn--1ug.xn--sndl01647an3h1h; ; ; # .ႺႴ +\u200D。ⴚⴔ; \u200D.ⴚⴔ; [B1, B5, B6, C2, V6]; xn--1ug.xn--cljl81825an3r4h; ; .xn--cljl81825an3r4h; [B5, B6, V6, A4_2] # .ⴚⴔ +\u200D。Ⴚⴔ; \u200D.Ⴚⴔ; [B1, B5, B6, C2, V6]; xn--1ug.xn--ynd036lq981an3r4h; ; .xn--ynd036lq981an3r4h; [B5, B6, V6, A4_2] # .Ⴚⴔ +-3.\u200Dヌᢕ; ; [C2, V3]; -3.xn--fbf739aq5o; ; -3.xn--fbf115j; [V3] # -3.ヌᢕ +-3.xn--fbf115j; -3.ヌᢕ; [V3]; -3.xn--fbf115j; ; ; # -3.ヌᢕ +-3.xn--fbf739aq5o; -3.\u200Dヌᢕ; [C2, V3]; -3.xn--fbf739aq5o; ; ; # -3.ヌᢕ +🂃\u0666ß\u200D。-; 🂃\u0666ß\u200D.-; [B1, C2, V3, V6]; xn--zca34z68yzu83b.xn----nz8rh7531csznt; ; xn--ss-pyd98921c.xn----nz8rh7531csznt; [B1, V3, V6] # 🂃٦ß.- +🂃\u0666SS\u200D。-; 🂃\u0666ss\u200D.-; [B1, C2, V3, V6]; xn--ss-pyd483x5k99b.xn----nz8rh7531csznt; ; xn--ss-pyd98921c.xn----nz8rh7531csznt; [B1, V3, V6] # 🂃٦ss.- +🂃\u0666ss\u200D。-; 🂃\u0666ss\u200D.-; [B1, C2, V3, V6]; xn--ss-pyd483x5k99b.xn----nz8rh7531csznt; ; xn--ss-pyd98921c.xn----nz8rh7531csznt; [B1, V3, V6] # 🂃٦ss.- +xn--ss-pyd98921c.xn----nz8rh7531csznt; 🂃\u0666ss.-; [B1, V3, V6]; xn--ss-pyd98921c.xn----nz8rh7531csznt; ; ; # 🂃٦ss.- +xn--ss-pyd483x5k99b.xn----nz8rh7531csznt; 🂃\u0666ss\u200D.-; [B1, C2, V3, V6]; xn--ss-pyd483x5k99b.xn----nz8rh7531csznt; ; ; # 🂃٦ss.- +xn--zca34z68yzu83b.xn----nz8rh7531csznt; 🂃\u0666ß\u200D.-; [B1, C2, V3, V6]; xn--zca34z68yzu83b.xn----nz8rh7531csznt; ; ; # 🂃٦ß.- +🂃\u0666Ss\u200D。-; 🂃\u0666ss\u200D.-; [B1, C2, V3, V6]; xn--ss-pyd483x5k99b.xn----nz8rh7531csznt; ; xn--ss-pyd98921c.xn----nz8rh7531csznt; [B1, V3, V6] # 🂃٦ss.- +ꇟ-𐾺\u069F。\u200C; ꇟ-𐾺\u069F.\u200C; [B5, B6, C1, V6]; xn----utc4430jd3zd.xn--0ugx6670i; ; xn----utc4430jd3zd.xn--bp20d; [B5, B6, V6] # ꇟ-𐾺ڟ. +xn----utc4430jd3zd.xn--bp20d; ꇟ-𐾺\u069F.; [B5, B6, V6]; xn----utc4430jd3zd.xn--bp20d; ; ; # ꇟ-𐾺ڟ. +xn----utc4430jd3zd.xn--0ugx6670i; ꇟ-𐾺\u069F.\u200C; [B5, B6, C1, V6]; xn----utc4430jd3zd.xn--0ugx6670i; ; ; # ꇟ-𐾺ڟ. +\u0665.\u0484𐨗𝩋; ; [B1, V5, V6]; xn--eib.xn--n3a0405kus8eft5l; ; ; # ٥.҄𐨗𝩋 +xn--eib.xn--n3a0405kus8eft5l; \u0665.\u0484𐨗𝩋; [B1, V5, V6]; xn--eib.xn--n3a0405kus8eft5l; ; ; # ٥.҄𐨗𝩋 +-.\u0649𐨿; ; [B1, B5, B6, V3, V6]; -.xn--lhb4124khbq4b; ; ; # -.ى𐨿 +-.xn--lhb4124khbq4b; -.\u0649𐨿; [B1, B5, B6, V3, V6]; -.xn--lhb4124khbq4b; ; ; # -.ى𐨿 +ς.녫ß; ; [B2, B3, V6]; xn--3xa96659r.xn--zca5051g4h4i; ; xn--4xa76659r.xn--ss-d64i8755h; # ς.녫ß +ς.녫ß; ς.녫ß; [B2, B3, V6]; xn--3xa96659r.xn--zca5051g4h4i; ; xn--4xa76659r.xn--ss-d64i8755h; # ς.녫ß +Σ.녫SS; σ.녫ss; [B2, B3, V6]; xn--4xa76659r.xn--ss-d64i8755h; ; ; # σ.녫ss +Σ.녫SS; σ.녫ss; [B2, B3, V6]; xn--4xa76659r.xn--ss-d64i8755h; ; ; # σ.녫ss +σ.녫ss; ; [B2, B3, V6]; xn--4xa76659r.xn--ss-d64i8755h; ; ; # σ.녫ss +σ.녫ss; σ.녫ss; [B2, B3, V6]; xn--4xa76659r.xn--ss-d64i8755h; ; ; # σ.녫ss +Σ.녫ss; σ.녫ss; [B2, B3, V6]; xn--4xa76659r.xn--ss-d64i8755h; ; ; # σ.녫ss +Σ.녫ss; σ.녫ss; [B2, B3, V6]; xn--4xa76659r.xn--ss-d64i8755h; ; ; # σ.녫ss +Σ.녫Ss; σ.녫ss; [B2, B3, V6]; xn--4xa76659r.xn--ss-d64i8755h; ; ; # σ.녫ss +Σ.녫Ss; σ.녫ss; [B2, B3, V6]; xn--4xa76659r.xn--ss-d64i8755h; ; ; # σ.녫ss +xn--4xa76659r.xn--ss-d64i8755h; σ.녫ss; [B2, B3, V6]; xn--4xa76659r.xn--ss-d64i8755h; ; ; # σ.녫ss +Σ.녫ß; σ.녫ß; [B2, B3, V6]; xn--4xa76659r.xn--zca5051g4h4i; ; xn--4xa76659r.xn--ss-d64i8755h; # σ.녫ß +Σ.녫ß; σ.녫ß; [B2, B3, V6]; xn--4xa76659r.xn--zca5051g4h4i; ; xn--4xa76659r.xn--ss-d64i8755h; # σ.녫ß +σ.녫ß; ; [B2, B3, V6]; xn--4xa76659r.xn--zca5051g4h4i; ; xn--4xa76659r.xn--ss-d64i8755h; # σ.녫ß +σ.녫ß; σ.녫ß; [B2, B3, V6]; xn--4xa76659r.xn--zca5051g4h4i; ; xn--4xa76659r.xn--ss-d64i8755h; # σ.녫ß +xn--4xa76659r.xn--zca5051g4h4i; σ.녫ß; [B2, B3, V6]; xn--4xa76659r.xn--zca5051g4h4i; ; ; # σ.녫ß +xn--3xa96659r.xn--zca5051g4h4i; ς.녫ß; [B2, B3, V6]; xn--3xa96659r.xn--zca5051g4h4i; ; ; # ς.녫ß +Ⅎ\u17D2\u200D。≠\u200D\u200C; Ⅎ\u17D2\u200D.≠\u200D\u200C; [C1, C2, V6]; xn--u4e823bcza.xn--0ugb89o; ; xn--u4e319b.xn--1ch; [V6] # Ⅎ្.≠ +Ⅎ\u17D2\u200D。=\u0338\u200D\u200C; Ⅎ\u17D2\u200D.≠\u200D\u200C; [C1, C2, V6]; xn--u4e823bcza.xn--0ugb89o; ; xn--u4e319b.xn--1ch; [V6] # Ⅎ្.≠ +Ⅎ\u17D2\u200D。≠\u200D\u200C; Ⅎ\u17D2\u200D.≠\u200D\u200C; [C1, C2, V6]; xn--u4e823bcza.xn--0ugb89o; ; xn--u4e319b.xn--1ch; [V6] # Ⅎ្.≠ +Ⅎ\u17D2\u200D。=\u0338\u200D\u200C; Ⅎ\u17D2\u200D.≠\u200D\u200C; [C1, C2, V6]; xn--u4e823bcza.xn--0ugb89o; ; xn--u4e319b.xn--1ch; [V6] # Ⅎ្.≠ +ⅎ\u17D2\u200D。=\u0338\u200D\u200C; ⅎ\u17D2\u200D.≠\u200D\u200C; [C1, C2]; xn--u4e823bq1a.xn--0ugb89o; ; xn--u4e969b.xn--1ch; [] # ⅎ្.≠ +ⅎ\u17D2\u200D。≠\u200D\u200C; ⅎ\u17D2\u200D.≠\u200D\u200C; [C1, C2]; xn--u4e823bq1a.xn--0ugb89o; ; xn--u4e969b.xn--1ch; [] # ⅎ្.≠ +xn--u4e969b.xn--1ch; ⅎ\u17D2.≠; ; xn--u4e969b.xn--1ch; ; ; # ⅎ្.≠ +ⅎ\u17D2.≠; ; ; xn--u4e969b.xn--1ch; ; ; # ⅎ្.≠ +ⅎ\u17D2.=\u0338; ⅎ\u17D2.≠; ; xn--u4e969b.xn--1ch; ; ; # ⅎ្.≠ +Ⅎ\u17D2.=\u0338; Ⅎ\u17D2.≠; [V6]; xn--u4e319b.xn--1ch; ; ; # Ⅎ្.≠ +Ⅎ\u17D2.≠; ; [V6]; xn--u4e319b.xn--1ch; ; ; # Ⅎ្.≠ +xn--u4e319b.xn--1ch; Ⅎ\u17D2.≠; [V6]; xn--u4e319b.xn--1ch; ; ; # Ⅎ្.≠ +xn--u4e823bq1a.xn--0ugb89o; ⅎ\u17D2\u200D.≠\u200D\u200C; [C1, C2]; xn--u4e823bq1a.xn--0ugb89o; ; ; # ⅎ្.≠ +xn--u4e823bcza.xn--0ugb89o; Ⅎ\u17D2\u200D.≠\u200D\u200C; [C1, C2, V6]; xn--u4e823bcza.xn--0ugb89o; ; ; # Ⅎ្.≠ +ⅎ\u17D2\u200D。=\u0338\u200D\u200C; ⅎ\u17D2\u200D.≠\u200D\u200C; [C1, C2]; xn--u4e823bq1a.xn--0ugb89o; ; xn--u4e969b.xn--1ch; [] # ⅎ្.≠ +ⅎ\u17D2\u200D。≠\u200D\u200C; ⅎ\u17D2\u200D.≠\u200D\u200C; [C1, C2]; xn--u4e823bq1a.xn--0ugb89o; ; xn--u4e969b.xn--1ch; [] # ⅎ្.≠ +𐋺\uAAF6\uA953.\u200C\u1714\u068F; 𐋺\uAAF6\uA953.\u200C\u1714\u068F; [B1, C1, V6]; xn--3j9a14ak27osbz2o.xn--ljb175f1wg; ; xn--3j9a14ak27osbz2o.xn--ljb175f; [B1, V5, V6] # 𐋺꫶꥓.᜔ڏ +𐋺\uAAF6\uA953.\u200C\u1714\u068F; ; [B1, C1, V6]; xn--3j9a14ak27osbz2o.xn--ljb175f1wg; ; xn--3j9a14ak27osbz2o.xn--ljb175f; [B1, V5, V6] # 𐋺꫶꥓.᜔ڏ +xn--3j9a14ak27osbz2o.xn--ljb175f; 𐋺\uAAF6\uA953.\u1714\u068F; [B1, V5, V6]; xn--3j9a14ak27osbz2o.xn--ljb175f; ; ; # 𐋺꫶꥓.᜔ڏ +xn--3j9a14ak27osbz2o.xn--ljb175f1wg; 𐋺\uAAF6\uA953.\u200C\u1714\u068F; [B1, C1, V6]; xn--3j9a14ak27osbz2o.xn--ljb175f1wg; ; ; # 𐋺꫶꥓.᜔ڏ +\u0FA8.≯; \u0FA8.≯; [V6]; xn--4fd57150h.xn--hdh; ; ; # ྨ.≯ +\u0FA8.>\u0338; \u0FA8.≯; [V6]; xn--4fd57150h.xn--hdh; ; ; # ྨ.≯ +\u0FA8.≯; ; [V6]; xn--4fd57150h.xn--hdh; ; ; # ྨ.≯ +\u0FA8.>\u0338; \u0FA8.≯; [V6]; xn--4fd57150h.xn--hdh; ; ; # ྨ.≯ +xn--4fd57150h.xn--hdh; \u0FA8.≯; [V6]; xn--4fd57150h.xn--hdh; ; ; # ྨ.≯ +\u200D𞡄Ⴓ.𐇽; \u200D𞡄Ⴓ.𐇽; [B1, C2, V5, V6]; xn--rnd379ex885a.xn--m27c; ; xn--rnd5552v.xn--m27c; [B1, B2, B3, V5, V6] # 𞡄Ⴓ.𐇽 +\u200D𞡄Ⴓ.𐇽; ; [B1, C2, V5, V6]; xn--rnd379ex885a.xn--m27c; ; xn--rnd5552v.xn--m27c; [B1, B2, B3, V5, V6] # 𞡄Ⴓ.𐇽 +\u200D𞡄ⴓ.𐇽; ; [B1, C2, V5]; xn--1ugz52c4i16a.xn--m27c; ; xn--blj7492l.xn--m27c; [B1, B2, B3, V5] # 𞡄ⴓ.𐇽 +xn--blj7492l.xn--m27c; 𞡄ⴓ.𐇽; [B1, B2, B3, V5]; xn--blj7492l.xn--m27c; ; ; # 𞡄ⴓ.𐇽 +xn--1ugz52c4i16a.xn--m27c; \u200D𞡄ⴓ.𐇽; [B1, C2, V5]; xn--1ugz52c4i16a.xn--m27c; ; ; # 𞡄ⴓ.𐇽 +xn--rnd5552v.xn--m27c; 𞡄Ⴓ.𐇽; [B1, B2, B3, V5, V6]; xn--rnd5552v.xn--m27c; ; ; # 𞡄Ⴓ.𐇽 +xn--rnd379ex885a.xn--m27c; \u200D𞡄Ⴓ.𐇽; [B1, C2, V5, V6]; xn--rnd379ex885a.xn--m27c; ; ; # 𞡄Ⴓ.𐇽 +\u200D𞡄ⴓ.𐇽; \u200D𞡄ⴓ.𐇽; [B1, C2, V5]; xn--1ugz52c4i16a.xn--m27c; ; xn--blj7492l.xn--m27c; [B1, B2, B3, V5] # 𞡄ⴓ.𐇽 +𐪒ß\uA8EA.ᡤ; 𐪒ß\uA8EA.ᡤ; [B2, B3]; xn--zca2517f2hvc.xn--08e; ; xn--ss-tu9hw933a.xn--08e; # 𐪒ß꣪.ᡤ +𐪒ß\uA8EA.ᡤ; ; [B2, B3]; xn--zca2517f2hvc.xn--08e; ; xn--ss-tu9hw933a.xn--08e; # 𐪒ß꣪.ᡤ +𐪒SS\uA8EA.ᡤ; 𐪒ss\uA8EA.ᡤ; [B2, B3]; xn--ss-tu9hw933a.xn--08e; ; ; # 𐪒ss꣪.ᡤ +𐪒ss\uA8EA.ᡤ; ; [B2, B3]; xn--ss-tu9hw933a.xn--08e; ; ; # 𐪒ss꣪.ᡤ +xn--ss-tu9hw933a.xn--08e; 𐪒ss\uA8EA.ᡤ; [B2, B3]; xn--ss-tu9hw933a.xn--08e; ; ; # 𐪒ss꣪.ᡤ +xn--zca2517f2hvc.xn--08e; 𐪒ß\uA8EA.ᡤ; [B2, B3]; xn--zca2517f2hvc.xn--08e; ; ; # 𐪒ß꣪.ᡤ +𐪒SS\uA8EA.ᡤ; 𐪒ss\uA8EA.ᡤ; [B2, B3]; xn--ss-tu9hw933a.xn--08e; ; ; # 𐪒ss꣪.ᡤ +𐪒ss\uA8EA.ᡤ; 𐪒ss\uA8EA.ᡤ; [B2, B3]; xn--ss-tu9hw933a.xn--08e; ; ; # 𐪒ss꣪.ᡤ +𐪒Ss\uA8EA.ᡤ; 𐪒ss\uA8EA.ᡤ; [B2, B3]; xn--ss-tu9hw933a.xn--08e; ; ; # 𐪒ss꣪.ᡤ +𐪒Ss\uA8EA.ᡤ; 𐪒ss\uA8EA.ᡤ; [B2, B3]; xn--ss-tu9hw933a.xn--08e; ; ; # 𐪒ss꣪.ᡤ +𐨿󠆌鸮𑚶.ς; 𐨿鸮𑚶.ς; [V5]; xn--l76a726rt2h.xn--3xa; ; xn--l76a726rt2h.xn--4xa; # 𐨿鸮𑚶.ς +𐨿󠆌鸮𑚶.Σ; 𐨿鸮𑚶.σ; [V5]; xn--l76a726rt2h.xn--4xa; ; ; # 𐨿鸮𑚶.σ +𐨿󠆌鸮𑚶.σ; 𐨿鸮𑚶.σ; [V5]; xn--l76a726rt2h.xn--4xa; ; ; # 𐨿鸮𑚶.σ +xn--l76a726rt2h.xn--4xa; 𐨿鸮𑚶.σ; [V5]; xn--l76a726rt2h.xn--4xa; ; ; # 𐨿鸮𑚶.σ +xn--l76a726rt2h.xn--3xa; 𐨿鸮𑚶.ς; [V5]; xn--l76a726rt2h.xn--3xa; ; ; # 𐨿鸮𑚶.ς +⒗𞤬。-𑚶; ⒗𞤬.-𑚶; [B1, V3, V6]; xn--8shw466n.xn----4j0j; ; ; # ⒗𞤬.-𑚶 +16.𞤬。-𑚶; 16.𞤬.-𑚶; [B1, V3]; 16.xn--ke6h.xn----4j0j; ; ; # 16.𞤬.-𑚶 +16.𞤊。-𑚶; 16.𞤬.-𑚶; [B1, V3]; 16.xn--ke6h.xn----4j0j; ; ; # 16.𞤬.-𑚶 +16.xn--ke6h.xn----4j0j; 16.𞤬.-𑚶; [B1, V3]; 16.xn--ke6h.xn----4j0j; ; ; # 16.𞤬.-𑚶 +⒗𞤊。-𑚶; ⒗𞤬.-𑚶; [B1, V3, V6]; xn--8shw466n.xn----4j0j; ; ; # ⒗𞤬.-𑚶 +xn--8shw466n.xn----4j0j; ⒗𞤬.-𑚶; [B1, V3, V6]; xn--8shw466n.xn----4j0j; ; ; # ⒗𞤬.-𑚶 +\u08B3𞤿⾫。𐹣\u068F⒈; \u08B3𞤿隹.𐹣\u068F⒈; [B1, B2, B3, V6]; xn--8yb0383efiwk.xn--ljb064mol4n; ; ; # ࢳ𞤿隹.𐹣ڏ⒈ +\u08B3𞤿隹。𐹣\u068F1.; \u08B3𞤿隹.𐹣\u068F1.; [B1, B2, B3]; xn--8yb0383efiwk.xn--1-wsc3373r.; ; ; # ࢳ𞤿隹.𐹣ڏ1. +\u08B3𞤝隹。𐹣\u068F1.; \u08B3𞤿隹.𐹣\u068F1.; [B1, B2, B3]; xn--8yb0383efiwk.xn--1-wsc3373r.; ; ; # ࢳ𞤿隹.𐹣ڏ1. +xn--8yb0383efiwk.xn--1-wsc3373r.; \u08B3𞤿隹.𐹣\u068F1.; [B1, B2, B3]; xn--8yb0383efiwk.xn--1-wsc3373r.; ; ; # ࢳ𞤿隹.𐹣ڏ1. +\u08B3𞤝⾫。𐹣\u068F⒈; \u08B3𞤿隹.𐹣\u068F⒈; [B1, B2, B3, V6]; xn--8yb0383efiwk.xn--ljb064mol4n; ; ; # ࢳ𞤿隹.𐹣ڏ⒈ +xn--8yb0383efiwk.xn--ljb064mol4n; \u08B3𞤿隹.𐹣\u068F⒈; [B1, B2, B3, V6]; xn--8yb0383efiwk.xn--ljb064mol4n; ; ; # ࢳ𞤿隹.𐹣ڏ⒈ +\u2433𝟧\u0661.ᡢ8\u0F72\u0600; \u24335\u0661.ᡢ8\u0F72\u0600; [B5, B6, V6]; xn--5-bqc410un435a.xn--8-rkc763epjj; ; ; # 5١.ᡢ8ི +\u24335\u0661.ᡢ8\u0F72\u0600; ; [B5, B6, V6]; xn--5-bqc410un435a.xn--8-rkc763epjj; ; ; # 5١.ᡢ8ི +xn--5-bqc410un435a.xn--8-rkc763epjj; \u24335\u0661.ᡢ8\u0F72\u0600; [B5, B6, V6]; xn--5-bqc410un435a.xn--8-rkc763epjj; ; ; # 5١.ᡢ8ི +𐹠.🄀⒒-; ; [B1, V6]; xn--7n0d.xn----xcp9757q1s13g; ; ; # 𐹠.🄀⒒- +𐹠.0.11.-; ; [B1, V3, V6]; xn--7n0d.0.11.xn----8j07m; ; ; # 𐹠.0.11.- +xn--7n0d.0.11.xn----8j07m; 𐹠.0.11.-; [B1, V3, V6]; xn--7n0d.0.11.xn----8j07m; ; ; # 𐹠.0.11.- +xn--7n0d.xn----xcp9757q1s13g; 𐹠.🄀⒒-; [B1, V6]; xn--7n0d.xn----xcp9757q1s13g; ; ; # 𐹠.🄀⒒- +ς-。\u200C𝟭-; ς-.\u200C1-; [C1, V3]; xn----xmb.xn--1--i1t; ; xn----zmb.1-; [V3] # ς-.1- +ς-。\u200C1-; ς-.\u200C1-; [C1, V3]; xn----xmb.xn--1--i1t; ; xn----zmb.1-; [V3] # ς-.1- +Σ-。\u200C1-; σ-.\u200C1-; [C1, V3]; xn----zmb.xn--1--i1t; ; xn----zmb.1-; [V3] # σ-.1- +σ-。\u200C1-; σ-.\u200C1-; [C1, V3]; xn----zmb.xn--1--i1t; ; xn----zmb.1-; [V3] # σ-.1- +xn----zmb.1-; σ-.1-; [V3]; xn----zmb.1-; ; ; # σ-.1- +xn----zmb.xn--1--i1t; σ-.\u200C1-; [C1, V3]; xn----zmb.xn--1--i1t; ; ; # σ-.1- +xn----xmb.xn--1--i1t; ς-.\u200C1-; [C1, V3]; xn----xmb.xn--1--i1t; ; ; # ς-.1- +Σ-。\u200C𝟭-; σ-.\u200C1-; [C1, V3]; xn----zmb.xn--1--i1t; ; xn----zmb.1-; [V3] # σ-.1- +σ-。\u200C𝟭-; σ-.\u200C1-; [C1, V3]; xn----zmb.xn--1--i1t; ; xn----zmb.1-; [V3] # σ-.1- +\u1734-\u0CE2.󠄩Ⴄ; \u1734-\u0CE2.Ⴄ; [V5, V6]; xn----ggf830f.xn--cnd; ; ; # ᜴-ೢ.Ⴄ +\u1734-\u0CE2.󠄩Ⴄ; \u1734-\u0CE2.Ⴄ; [V5, V6]; xn----ggf830f.xn--cnd; ; ; # ᜴-ೢ.Ⴄ +\u1734-\u0CE2.󠄩ⴄ; \u1734-\u0CE2.ⴄ; [V5]; xn----ggf830f.xn--vkj; ; ; # ᜴-ೢ.ⴄ +xn----ggf830f.xn--vkj; \u1734-\u0CE2.ⴄ; [V5]; xn----ggf830f.xn--vkj; ; ; # ᜴-ೢ.ⴄ +xn----ggf830f.xn--cnd; \u1734-\u0CE2.Ⴄ; [V5, V6]; xn----ggf830f.xn--cnd; ; ; # ᜴-ೢ.Ⴄ +\u1734-\u0CE2.󠄩ⴄ; \u1734-\u0CE2.ⴄ; [V5]; xn----ggf830f.xn--vkj; ; ; # ᜴-ೢ.ⴄ +♋\u06BB𐦥。\u0954⒈; ♋\u06BB𐦥.\u0954⒈; [B1, B5, B6, V5, V6]; xn--ukb372n129m3rs7f.xn--u3b240l; ; ; # ♋ڻ𐦥.॔⒈ +♋\u06BB𐦥。\u09541.; ♋\u06BB𐦥.\u09541.; [B1, B5, B6, V5, V6]; xn--ukb372n129m3rs7f.xn--1-fyd.; ; ; # ♋ڻ𐦥.॔1. +xn--ukb372n129m3rs7f.xn--1-fyd.; ♋\u06BB𐦥.\u09541.; [B1, B5, B6, V5, V6]; xn--ukb372n129m3rs7f.xn--1-fyd.; ; ; # ♋ڻ𐦥.॔1. +xn--ukb372n129m3rs7f.xn--u3b240l; ♋\u06BB𐦥.\u0954⒈; [B1, B5, B6, V5, V6]; xn--ukb372n129m3rs7f.xn--u3b240l; ; ; # ♋ڻ𐦥.॔⒈ +\u05A4.\u06C1\u1AB3\u200C; \u05A4.\u06C1\u1AB3\u200C; [B1, B3, C1, V5]; xn--vcb.xn--0kb623hm1d; ; xn--vcb.xn--0kb623h; [B1, V5] # ֤.ہ᪳ +\u05A4.\u06C1\u1AB3\u200C; ; [B1, B3, C1, V5]; xn--vcb.xn--0kb623hm1d; ; xn--vcb.xn--0kb623h; [B1, V5] # ֤.ہ᪳ +xn--vcb.xn--0kb623h; \u05A4.\u06C1\u1AB3; [B1, V5]; xn--vcb.xn--0kb623h; ; ; # ֤.ہ᪳ +xn--vcb.xn--0kb623hm1d; \u05A4.\u06C1\u1AB3\u200C; [B1, B3, C1, V5]; xn--vcb.xn--0kb623hm1d; ; ; # ֤.ہ᪳ +\u0846≮\u0ACD.; \u0846≮\u0ACD.; [B5, B6, V6]; xn--4vb80kq29ayo62l.xn--8g6h; ; ; # ࡆ≮્. +\u0846<\u0338\u0ACD.; \u0846≮\u0ACD.; [B5, B6, V6]; xn--4vb80kq29ayo62l.xn--8g6h; ; ; # ࡆ≮્. +\u0846≮\u0ACD.; ; [B5, B6, V6]; xn--4vb80kq29ayo62l.xn--8g6h; ; ; # ࡆ≮્. +\u0846<\u0338\u0ACD.; \u0846≮\u0ACD.; [B5, B6, V6]; xn--4vb80kq29ayo62l.xn--8g6h; ; ; # ࡆ≮્. +xn--4vb80kq29ayo62l.xn--8g6h; \u0846≮\u0ACD.; [B5, B6, V6]; xn--4vb80kq29ayo62l.xn--8g6h; ; ; # ࡆ≮્. +\u200D。𞀘⒈ꡍ擉; \u200D.𞀘⒈ꡍ擉; [C2, V5, V6]; xn--1ug.xn--tsh026uql4bew9p; ; .xn--tsh026uql4bew9p; [V5, V6, A4_2] # .𞀘⒈ꡍ擉 +\u200D。𞀘1.ꡍ擉; \u200D.𞀘1.ꡍ擉; [C2, V5]; xn--1ug.xn--1-1p4r.xn--s7uv61m; ; .xn--1-1p4r.xn--s7uv61m; [V5, A4_2] # .𞀘1.ꡍ擉 +.xn--1-1p4r.xn--s7uv61m; .𞀘1.ꡍ擉; [V5, X4_2]; .xn--1-1p4r.xn--s7uv61m; [V5, A4_2]; ; # .𞀘1.ꡍ擉 +xn--1ug.xn--1-1p4r.xn--s7uv61m; \u200D.𞀘1.ꡍ擉; [C2, V5]; xn--1ug.xn--1-1p4r.xn--s7uv61m; ; ; # .𞀘1.ꡍ擉 +.xn--tsh026uql4bew9p; .𞀘⒈ꡍ擉; [V5, V6, X4_2]; .xn--tsh026uql4bew9p; [V5, V6, A4_2]; ; # .𞀘⒈ꡍ擉 +xn--1ug.xn--tsh026uql4bew9p; \u200D.𞀘⒈ꡍ擉; [C2, V5, V6]; xn--1ug.xn--tsh026uql4bew9p; ; ; # .𞀘⒈ꡍ擉 +₈\u07CB.\uFB64≠; 8\u07CB.\u067F≠; [B1, B3]; xn--8-zbd.xn--4ib883l; ; ; # 8ߋ.ٿ≠ +₈\u07CB.\uFB64=\u0338; 8\u07CB.\u067F≠; [B1, B3]; xn--8-zbd.xn--4ib883l; ; ; # 8ߋ.ٿ≠ +8\u07CB.\u067F≠; ; [B1, B3]; xn--8-zbd.xn--4ib883l; ; ; # 8ߋ.ٿ≠ +8\u07CB.\u067F=\u0338; 8\u07CB.\u067F≠; [B1, B3]; xn--8-zbd.xn--4ib883l; ; ; # 8ߋ.ٿ≠ +xn--8-zbd.xn--4ib883l; 8\u07CB.\u067F≠; [B1, B3]; xn--8-zbd.xn--4ib883l; ; ; # 8ߋ.ٿ≠ +ᢡ\u07DE.⒒\u0642𑍦; ; [B1, B5, V6]; xn--5sb596fi873t.xn--ehb336mvy7n; ; ; # ᢡߞ.⒒ق𑍦 +ᢡ\u07DE.11.\u0642𑍦; ; [B1, B5, V6]; xn--5sb596fi873t.11.xn--ehb4198k; ; ; # ᢡߞ.11.ق𑍦 +xn--5sb596fi873t.11.xn--ehb4198k; ᢡ\u07DE.11.\u0642𑍦; [B1, B5, V6]; xn--5sb596fi873t.11.xn--ehb4198k; ; ; # ᢡߞ.11.ق𑍦 +xn--5sb596fi873t.xn--ehb336mvy7n; ᢡ\u07DE.⒒\u0642𑍦; [B1, B5, V6]; xn--5sb596fi873t.xn--ehb336mvy7n; ; ; # ᢡߞ.⒒ق𑍦 +\u0E48-𐹺𝟜.\u0363\u06E1⒏; \u0E48-𐹺4.\u0363\u06E1⒏; [B1, V5, V6]; xn---4-owiz479s.xn--eva20pjv9a; ; ; # ่-𐹺4.ͣۡ⒏ +\u0E48-𐹺4.\u0363\u06E18.; ; [B1, V5]; xn---4-owiz479s.xn--8-ihb69x.; ; ; # ่-𐹺4.ͣۡ8. +xn---4-owiz479s.xn--8-ihb69x.; \u0E48-𐹺4.\u0363\u06E18.; [B1, V5]; xn---4-owiz479s.xn--8-ihb69x.; ; ; # ่-𐹺4.ͣۡ8. +xn---4-owiz479s.xn--eva20pjv9a; \u0E48-𐹺4.\u0363\u06E1⒏; [B1, V5, V6]; xn---4-owiz479s.xn--eva20pjv9a; ; ; # ่-𐹺4.ͣۡ⒏ +⫐。Ⴠ-; ⫐.Ⴠ-; [V6]; xn--r3i.xn----z1g58579u; ; ; # ⫐.Ⴠ- +⫐。Ⴠ-; ⫐.Ⴠ-; [V6]; xn--r3i.xn----z1g58579u; ; ; # ⫐.Ⴠ- +⫐。ⴠ-; ⫐.ⴠ-; [V6]; xn--r3i.xn----2wst7439i; ; ; # ⫐.ⴠ- +xn--r3i.xn----2wst7439i; ⫐.ⴠ-; [V6]; xn--r3i.xn----2wst7439i; ; ; # ⫐.ⴠ- +xn--r3i.xn----z1g58579u; ⫐.Ⴠ-; [V6]; xn--r3i.xn----z1g58579u; ; ; # ⫐.Ⴠ- +⫐。ⴠ-; ⫐.ⴠ-; [V6]; xn--r3i.xn----2wst7439i; ; ; # ⫐.ⴠ- +𑑂◊.⦟∠; 𑑂◊.⦟∠; [V5]; xn--01h3338f.xn--79g270a; ; ; # 𑑂◊.⦟∠ +𑑂◊.⦟∠; ; [V5]; xn--01h3338f.xn--79g270a; ; ; # 𑑂◊.⦟∠ +xn--01h3338f.xn--79g270a; 𑑂◊.⦟∠; [V5]; xn--01h3338f.xn--79g270a; ; ; # 𑑂◊.⦟∠ +-\u0662。ꡂ; -\u0662.ꡂ; [B5, B6, V6]; xn----dqc20828e.xn--bc9an2879c; ; ; # -٢.ꡂ +xn----dqc20828e.xn--bc9an2879c; -\u0662.ꡂ; [B5, B6, V6]; xn----dqc20828e.xn--bc9an2879c; ; ; # -٢.ꡂ +\u0678。\u0741𐹪; \u064A\u0674.\u0741𐹪; [B1, V6]; xn--mhb8f.xn--oob2585kfdsfsbo7h; ; ; # يٴ.݁𐹪 +\u064A\u0674。\u0741𐹪; \u064A\u0674.\u0741𐹪; [B1, V6]; xn--mhb8f.xn--oob2585kfdsfsbo7h; ; ; # يٴ.݁𐹪 +xn--mhb8f.xn--oob2585kfdsfsbo7h; \u064A\u0674.\u0741𐹪; [B1, V6]; xn--mhb8f.xn--oob2585kfdsfsbo7h; ; ; # يٴ.݁𐹪 +𐫆ꌄ。\u200Dᣬ; 𐫆ꌄ.\u200Dᣬ; [B1, B2, B3, C2]; xn--y77ao18q.xn--wdf367a; ; xn--y77ao18q.xn--wdf; [B2, B3] # 𐫆ꌄ.ᣬ +𐫆ꌄ。\u200Dᣬ; 𐫆ꌄ.\u200Dᣬ; [B1, B2, B3, C2]; xn--y77ao18q.xn--wdf367a; ; xn--y77ao18q.xn--wdf; [B2, B3] # 𐫆ꌄ.ᣬ +xn--y77ao18q.xn--wdf; 𐫆ꌄ.ᣬ; [B2, B3]; xn--y77ao18q.xn--wdf; ; ; # 𐫆ꌄ.ᣬ +xn--y77ao18q.xn--wdf367a; 𐫆ꌄ.\u200Dᣬ; [B1, B2, B3, C2]; xn--y77ao18q.xn--wdf367a; ; ; # 𐫆ꌄ.ᣬ +₀\u0662。≯-; 0\u0662.≯-; [B1, B6, V3, V6]; xn--0-dqc.xn----ogov3342l; ; ; # 0٢.≯- +₀\u0662。>\u0338-; 0\u0662.≯-; [B1, B6, V3, V6]; xn--0-dqc.xn----ogov3342l; ; ; # 0٢.≯- +0\u0662。≯-; 0\u0662.≯-; [B1, B6, V3, V6]; xn--0-dqc.xn----ogov3342l; ; ; # 0٢.≯- +0\u0662。>\u0338-; 0\u0662.≯-; [B1, B6, V3, V6]; xn--0-dqc.xn----ogov3342l; ; ; # 0٢.≯- +xn--0-dqc.xn----ogov3342l; 0\u0662.≯-; [B1, B6, V3, V6]; xn--0-dqc.xn----ogov3342l; ; ; # 0٢.≯- +\u031C𐹫-.𐋤\u0845; ; [B1, V5, V6]; xn----gdb7046r692g.xn--3vb1349j; ; ; # ̜𐹫-.𐋤ࡅ +xn----gdb7046r692g.xn--3vb1349j; \u031C𐹫-.𐋤\u0845; [B1, V5, V6]; xn----gdb7046r692g.xn--3vb1349j; ; ; # ̜𐹫-.𐋤ࡅ +≠。𝩑𐹩Ⴡ\u0594; ≠.𝩑𐹩Ⴡ\u0594; [B1, V5, V6]; xn--1ch.xn--fcb538c649rypog; ; ; # ≠.𝩑𐹩Ⴡ֔ +=\u0338。𝩑𐹩Ⴡ\u0594; ≠.𝩑𐹩Ⴡ\u0594; [B1, V5, V6]; xn--1ch.xn--fcb538c649rypog; ; ; # ≠.𝩑𐹩Ⴡ֔ +≠。𝩑𐹩Ⴡ\u0594; ≠.𝩑𐹩Ⴡ\u0594; [B1, V5, V6]; xn--1ch.xn--fcb538c649rypog; ; ; # ≠.𝩑𐹩Ⴡ֔ +=\u0338。𝩑𐹩Ⴡ\u0594; ≠.𝩑𐹩Ⴡ\u0594; [B1, V5, V6]; xn--1ch.xn--fcb538c649rypog; ; ; # ≠.𝩑𐹩Ⴡ֔ +=\u0338。𝩑𐹩ⴡ\u0594; ≠.𝩑𐹩ⴡ\u0594; [B1, V5]; xn--1ch.xn--fcb363rk03mypug; ; ; # ≠.𝩑𐹩ⴡ֔ +≠。𝩑𐹩ⴡ\u0594; ≠.𝩑𐹩ⴡ\u0594; [B1, V5]; xn--1ch.xn--fcb363rk03mypug; ; ; # ≠.𝩑𐹩ⴡ֔ +xn--1ch.xn--fcb363rk03mypug; ≠.𝩑𐹩ⴡ\u0594; [B1, V5]; xn--1ch.xn--fcb363rk03mypug; ; ; # ≠.𝩑𐹩ⴡ֔ +xn--1ch.xn--fcb538c649rypog; ≠.𝩑𐹩Ⴡ\u0594; [B1, V5, V6]; xn--1ch.xn--fcb538c649rypog; ; ; # ≠.𝩑𐹩Ⴡ֔ +=\u0338。𝩑𐹩ⴡ\u0594; ≠.𝩑𐹩ⴡ\u0594; [B1, V5]; xn--1ch.xn--fcb363rk03mypug; ; ; # ≠.𝩑𐹩ⴡ֔ +≠。𝩑𐹩ⴡ\u0594; ≠.𝩑𐹩ⴡ\u0594; [B1, V5]; xn--1ch.xn--fcb363rk03mypug; ; ; # ≠.𝩑𐹩ⴡ֔ +𖫳≠.Ⴀ𐮀; ; [B1, B5, B6, V5, V6]; xn--1ch9250k.xn--7md2659j; ; ; # 𖫳≠.Ⴀ𐮀 +𖫳=\u0338.Ⴀ𐮀; 𖫳≠.Ⴀ𐮀; [B1, B5, B6, V5, V6]; xn--1ch9250k.xn--7md2659j; ; ; # 𖫳≠.Ⴀ𐮀 +𖫳=\u0338.ⴀ𐮀; 𖫳≠.ⴀ𐮀; [B1, B5, B6, V5]; xn--1ch9250k.xn--rkj6232e; ; ; # 𖫳≠.ⴀ𐮀 +𖫳≠.ⴀ𐮀; ; [B1, B5, B6, V5]; xn--1ch9250k.xn--rkj6232e; ; ; # 𖫳≠.ⴀ𐮀 +xn--1ch9250k.xn--rkj6232e; 𖫳≠.ⴀ𐮀; [B1, B5, B6, V5]; xn--1ch9250k.xn--rkj6232e; ; ; # 𖫳≠.ⴀ𐮀 +xn--1ch9250k.xn--7md2659j; 𖫳≠.Ⴀ𐮀; [B1, B5, B6, V5, V6]; xn--1ch9250k.xn--7md2659j; ; ; # 𖫳≠.Ⴀ𐮀 +󠅾\u0736\u0726.ᢚ閪\u08E2𝩟; \u0736\u0726.ᢚ閪\u08E2𝩟; [B1, B5, B6, V5, V6]; xn--wnb5a.xn--l0b161fis8gbp5m; ; ; # ܶܦ.ᢚ閪𝩟 +󠅾\u0736\u0726.ᢚ閪\u08E2𝩟; \u0736\u0726.ᢚ閪\u08E2𝩟; [B1, B5, B6, V5, V6]; xn--wnb5a.xn--l0b161fis8gbp5m; ; ; # ܶܦ.ᢚ閪𝩟 +xn--wnb5a.xn--l0b161fis8gbp5m; \u0736\u0726.ᢚ閪\u08E2𝩟; [B1, B5, B6, V5, V6]; xn--wnb5a.xn--l0b161fis8gbp5m; ; ; # ܶܦ.ᢚ閪𝩟 +\u200D󠇜\u06CB\uA8E9。\u20DD\u0FB0-ᛟ; \u200D\u06CB\uA8E9.\u20DD\u0FB0-ᛟ; [B1, C2, V5]; xn--blb540ke10h.xn----gmg236cj6k; ; xn--blb8114f.xn----gmg236cj6k; [B1, V5] # ۋ꣩.⃝ྰ-ᛟ +\u200D󠇜\u06CB\uA8E9。\u20DD\u0FB0-ᛟ; \u200D\u06CB\uA8E9.\u20DD\u0FB0-ᛟ; [B1, C2, V5]; xn--blb540ke10h.xn----gmg236cj6k; ; xn--blb8114f.xn----gmg236cj6k; [B1, V5] # ۋ꣩.⃝ྰ-ᛟ +xn--blb8114f.xn----gmg236cj6k; \u06CB\uA8E9.\u20DD\u0FB0-ᛟ; [B1, V5]; xn--blb8114f.xn----gmg236cj6k; ; ; # ۋ꣩.⃝ྰ-ᛟ +xn--blb540ke10h.xn----gmg236cj6k; \u200D\u06CB\uA8E9.\u20DD\u0FB0-ᛟ; [B1, C2, V5]; xn--blb540ke10h.xn----gmg236cj6k; ; ; # ۋ꣩.⃝ྰ-ᛟ +헁\u0E3A。\u06BA𝟜; 헁\u0E3A.\u06BA4; [V6]; xn--o4c1723h8g85gt4ya.xn--4-dvc; ; ; # 헁ฺ.ں4 +헁\u0E3A。\u06BA𝟜; 헁\u0E3A.\u06BA4; [V6]; xn--o4c1723h8g85gt4ya.xn--4-dvc; ; ; # 헁ฺ.ں4 +헁\u0E3A。\u06BA4; 헁\u0E3A.\u06BA4; [V6]; xn--o4c1723h8g85gt4ya.xn--4-dvc; ; ; # 헁ฺ.ں4 +헁\u0E3A。\u06BA4; 헁\u0E3A.\u06BA4; [V6]; xn--o4c1723h8g85gt4ya.xn--4-dvc; ; ; # 헁ฺ.ں4 +xn--o4c1723h8g85gt4ya.xn--4-dvc; 헁\u0E3A.\u06BA4; [V6]; xn--o4c1723h8g85gt4ya.xn--4-dvc; ; ; # 헁ฺ.ں4 +𐹭。\u200CႾ; 𐹭.\u200CႾ; [B1, C1, V6]; xn--lo0d.xn--2nd949eqw95u; ; xn--lo0d.xn--2nd75260n; [B1, V6] # 𐹭.Ⴞ +𐹭。\u200CႾ; 𐹭.\u200CႾ; [B1, C1, V6]; xn--lo0d.xn--2nd949eqw95u; ; xn--lo0d.xn--2nd75260n; [B1, V6] # 𐹭.Ⴞ +𐹭。\u200Cⴞ; 𐹭.\u200Cⴞ; [B1, C1, V6]; xn--lo0d.xn--0ugx72cwi33v; ; xn--lo0d.xn--mljx1099g; [B1, V6] # 𐹭.ⴞ +xn--lo0d.xn--mljx1099g; 𐹭.ⴞ; [B1, V6]; xn--lo0d.xn--mljx1099g; ; ; # 𐹭.ⴞ +xn--lo0d.xn--0ugx72cwi33v; 𐹭.\u200Cⴞ; [B1, C1, V6]; xn--lo0d.xn--0ugx72cwi33v; ; ; # 𐹭.ⴞ +xn--lo0d.xn--2nd75260n; 𐹭.Ⴞ; [B1, V6]; xn--lo0d.xn--2nd75260n; ; ; # 𐹭.Ⴞ +xn--lo0d.xn--2nd949eqw95u; 𐹭.\u200CႾ; [B1, C1, V6]; xn--lo0d.xn--2nd949eqw95u; ; ; # 𐹭.Ⴞ +𐹭。\u200Cⴞ; 𐹭.\u200Cⴞ; [B1, C1, V6]; xn--lo0d.xn--0ugx72cwi33v; ; xn--lo0d.xn--mljx1099g; [B1, V6] # 𐹭.ⴞ +\uA953.\u033D馋; ; [V5, V6]; xn--3j9a.xn--bua0708eqzrd; ; ; # ꥓.̽馋 +xn--3j9a.xn--bua0708eqzrd; \uA953.\u033D馋; [V5, V6]; xn--3j9a.xn--bua0708eqzrd; ; ; # ꥓.̽馋 +\u200D。䜖; \u200D.䜖; [C2, V6]; xn--1ug30527h9mxi.xn--k0o; ; xn--g138cxw05a.xn--k0o; [V6] # .䜖 +\u200D。䜖; \u200D.䜖; [C2, V6]; xn--1ug30527h9mxi.xn--k0o; ; xn--g138cxw05a.xn--k0o; [V6] # .䜖 +xn--g138cxw05a.xn--k0o; .䜖; [V6]; xn--g138cxw05a.xn--k0o; ; ; # .䜖 +xn--1ug30527h9mxi.xn--k0o; \u200D.䜖; [C2, V6]; xn--1ug30527h9mxi.xn--k0o; ; ; # .䜖 +ᡯ⚉姶🄉.۷\u200D🎪\u200D; ᡯ⚉姶🄉.۷\u200D🎪\u200D; [C2, V6]; xn--c9e433epi4b3j20a.xn--kmb859ja94998b; ; xn--c9e433epi4b3j20a.xn--kmb6733w; [V6] # ᡯ⚉姶🄉.۷🎪 +ᡯ⚉姶8,.۷\u200D🎪\u200D; ; [C2, V6]; xn--8,-g9oy26fzu4d.xn--kmb859ja94998b; ; xn--8,-g9oy26fzu4d.xn--kmb6733w; [V6] # ᡯ⚉姶8,.۷🎪 +xn--8,-g9oy26fzu4d.xn--kmb6733w; ᡯ⚉姶8,.۷🎪; [V6]; xn--8,-g9oy26fzu4d.xn--kmb6733w; ; ; # ᡯ⚉姶8,.۷🎪 +xn--8,-g9oy26fzu4d.xn--kmb859ja94998b; ᡯ⚉姶8,.۷\u200D🎪\u200D; [C2, V6]; xn--8,-g9oy26fzu4d.xn--kmb859ja94998b; ; ; # ᡯ⚉姶8,.۷🎪 +xn--c9e433epi4b3j20a.xn--kmb6733w; ᡯ⚉姶🄉.۷🎪; [V6]; xn--c9e433epi4b3j20a.xn--kmb6733w; ; ; # ᡯ⚉姶🄉.۷🎪 +xn--c9e433epi4b3j20a.xn--kmb859ja94998b; ᡯ⚉姶🄉.۷\u200D🎪\u200D; [C2, V6]; xn--c9e433epi4b3j20a.xn--kmb859ja94998b; ; ; # ᡯ⚉姶🄉.۷🎪 +.𐹸🚖\u0E3A; ; [B1, V6]; xn--0n7h.xn--o4c9032klszf; ; ; # .𐹸🚖ฺ +xn--0n7h.xn--o4c9032klszf; .𐹸🚖\u0E3A; [B1, V6]; xn--0n7h.xn--o4c9032klszf; ; ; # .𐹸🚖ฺ +Ⴔᠵ。𐹧\u0747۹; Ⴔᠵ.𐹧\u0747۹; [B1, V6]; xn--snd659a.xn--mmb9ml895e; ; ; # Ⴔᠵ.𐹧݇۹ +Ⴔᠵ。𐹧\u0747۹; Ⴔᠵ.𐹧\u0747۹; [B1, V6]; xn--snd659a.xn--mmb9ml895e; ; ; # Ⴔᠵ.𐹧݇۹ +ⴔᠵ。𐹧\u0747۹; ⴔᠵ.𐹧\u0747۹; [B1]; xn--o7e997h.xn--mmb9ml895e; ; ; # ⴔᠵ.𐹧݇۹ +xn--o7e997h.xn--mmb9ml895e; ⴔᠵ.𐹧\u0747۹; [B1]; xn--o7e997h.xn--mmb9ml895e; ; ; # ⴔᠵ.𐹧݇۹ +xn--snd659a.xn--mmb9ml895e; Ⴔᠵ.𐹧\u0747۹; [B1, V6]; xn--snd659a.xn--mmb9ml895e; ; ; # Ⴔᠵ.𐹧݇۹ +ⴔᠵ。𐹧\u0747۹; ⴔᠵ.𐹧\u0747۹; [B1]; xn--o7e997h.xn--mmb9ml895e; ; ; # ⴔᠵ.𐹧݇۹ +\u135Fᡈ\u200C.︒-𖾐-; \u135Fᡈ\u200C.︒-𖾐-; [C1, V3, V5, V6]; xn--b7d82wo4h.xn-----c82nz547a; ; xn--b7d82w.xn-----c82nz547a; [V3, V5, V6] # ፟ᡈ.︒-𖾐- +\u135Fᡈ\u200C.。-𖾐-; \u135Fᡈ\u200C..-𖾐-; [C1, V3, V5, X4_2]; xn--b7d82wo4h..xn-----pe4u; [C1, V3, V5, A4_2]; xn--b7d82w..xn-----pe4u; [V3, V5, A4_2] # ፟ᡈ..-𖾐- +xn--b7d82w..xn-----pe4u; \u135Fᡈ..-𖾐-; [V3, V5, X4_2]; xn--b7d82w..xn-----pe4u; [V3, V5, A4_2]; ; # ፟ᡈ..-𖾐- +xn--b7d82wo4h..xn-----pe4u; \u135Fᡈ\u200C..-𖾐-; [C1, V3, V5, X4_2]; xn--b7d82wo4h..xn-----pe4u; [C1, V3, V5, A4_2]; ; # ፟ᡈ..-𖾐- +xn--b7d82w.xn-----c82nz547a; \u135Fᡈ.︒-𖾐-; [V3, V5, V6]; xn--b7d82w.xn-----c82nz547a; ; ; # ፟ᡈ.︒-𖾐- +xn--b7d82wo4h.xn-----c82nz547a; \u135Fᡈ\u200C.︒-𖾐-; [C1, V3, V5, V6]; xn--b7d82wo4h.xn-----c82nz547a; ; ; # ፟ᡈ.︒-𖾐- +⒈\u0601⒖\u200C.\u1DF0\u07DB; ; [B1, C1, V5, V6]; xn--jfb844kmfdwb.xn--2sb914i; ; xn--jfb347mib.xn--2sb914i; [B1, V5, V6] # ⒈⒖.ᷰߛ +1.\u060115.\u200C.\u1DF0\u07DB; ; [B1, C1, V5, V6]; 1.xn--15-1pd.xn--0ug.xn--2sb914i; ; 1.xn--15-1pd..xn--2sb914i; [B1, V5, V6, A4_2] # 1.15..ᷰߛ +1.xn--15-1pd..xn--2sb914i; 1.\u060115..\u1DF0\u07DB; [B1, V5, V6, X4_2]; 1.xn--15-1pd..xn--2sb914i; [B1, V5, V6, A4_2]; ; # 1.15..ᷰߛ +1.xn--15-1pd.xn--0ug.xn--2sb914i; 1.\u060115.\u200C.\u1DF0\u07DB; [B1, C1, V5, V6]; 1.xn--15-1pd.xn--0ug.xn--2sb914i; ; ; # 1.15..ᷰߛ +xn--jfb347mib.xn--2sb914i; ⒈\u0601⒖.\u1DF0\u07DB; [B1, V5, V6]; xn--jfb347mib.xn--2sb914i; ; ; # ⒈⒖.ᷰߛ +xn--jfb844kmfdwb.xn--2sb914i; ⒈\u0601⒖\u200C.\u1DF0\u07DB; [B1, C1, V5, V6]; xn--jfb844kmfdwb.xn--2sb914i; ; ; # ⒈⒖.ᷰߛ +𝩜。-\u0B4DႫ; 𝩜.-\u0B4DႫ; [V3, V5, V6]; xn--792h.xn----bse632b; ; ; # 𝩜.-୍Ⴋ +𝩜。-\u0B4Dⴋ; 𝩜.-\u0B4Dⴋ; [V3, V5]; xn--792h.xn----bse820x; ; ; # 𝩜.-୍ⴋ +xn--792h.xn----bse820x; 𝩜.-\u0B4Dⴋ; [V3, V5]; xn--792h.xn----bse820x; ; ; # 𝩜.-୍ⴋ +xn--792h.xn----bse632b; 𝩜.-\u0B4DႫ; [V3, V5, V6]; xn--792h.xn----bse632b; ; ; # 𝩜.-୍Ⴋ +ßჀ.\u0620刯Ⴝ; ; [B2, B3, V6]; xn--zca442f.xn--fgb845cb66c; ; xn--ss-wgk.xn--fgb845cb66c; # ßჀ.ؠ刯Ⴝ +ßⴠ.\u0620刯ⴝ; ; [B2, B3]; xn--zca277t.xn--fgb670rovy; ; xn--ss-j81a.xn--fgb670rovy; # ßⴠ.ؠ刯ⴝ +SSჀ.\u0620刯Ⴝ; ssჀ.\u0620刯Ⴝ; [B2, B3, V6]; xn--ss-wgk.xn--fgb845cb66c; ; ; # ssჀ.ؠ刯Ⴝ +ssⴠ.\u0620刯ⴝ; ; [B2, B3]; xn--ss-j81a.xn--fgb670rovy; ; ; # ssⴠ.ؠ刯ⴝ +Ssⴠ.\u0620刯Ⴝ; ssⴠ.\u0620刯Ⴝ; [B2, B3, V6]; xn--ss-j81a.xn--fgb845cb66c; ; ; # ssⴠ.ؠ刯Ⴝ +xn--ss-j81a.xn--fgb845cb66c; ssⴠ.\u0620刯Ⴝ; [B2, B3, V6]; xn--ss-j81a.xn--fgb845cb66c; ; ; # ssⴠ.ؠ刯Ⴝ +xn--ss-j81a.xn--fgb670rovy; ssⴠ.\u0620刯ⴝ; [B2, B3]; xn--ss-j81a.xn--fgb670rovy; ; ; # ssⴠ.ؠ刯ⴝ +xn--ss-wgk.xn--fgb845cb66c; ssჀ.\u0620刯Ⴝ; [B2, B3, V6]; xn--ss-wgk.xn--fgb845cb66c; ; ; # ssჀ.ؠ刯Ⴝ +xn--zca277t.xn--fgb670rovy; ßⴠ.\u0620刯ⴝ; [B2, B3]; xn--zca277t.xn--fgb670rovy; ; ; # ßⴠ.ؠ刯ⴝ +xn--zca442f.xn--fgb845cb66c; ßჀ.\u0620刯Ⴝ; [B2, B3, V6]; xn--zca442f.xn--fgb845cb66c; ; ; # ßჀ.ؠ刯Ⴝ +\u1BAAႣℲ。ᠳ툻\u0673; \u1BAAႣℲ.ᠳ툻\u0673; [B5, B6, V5, V6]; xn--bnd957cone.xn--sib102gc69k; ; ; # ᮪ႣℲ.ᠳ툻ٳ +\u1BAAႣℲ。ᠳ툻\u0673; \u1BAAႣℲ.ᠳ툻\u0673; [B5, B6, V5, V6]; xn--bnd957cone.xn--sib102gc69k; ; ; # ᮪ႣℲ.ᠳ툻ٳ +\u1BAAႣℲ。ᠳ툻\u0673; \u1BAAႣℲ.ᠳ툻\u0673; [B5, B6, V5, V6]; xn--bnd957cone.xn--sib102gc69k; ; ; # ᮪ႣℲ.ᠳ툻ٳ +\u1BAAႣℲ。ᠳ툻\u0673; \u1BAAႣℲ.ᠳ툻\u0673; [B5, B6, V5, V6]; xn--bnd957cone.xn--sib102gc69k; ; ; # ᮪ႣℲ.ᠳ툻ٳ +\u1BAAⴃⅎ。ᠳ툻\u0673; \u1BAAⴃⅎ.ᠳ툻\u0673; [B5, B6, V5]; xn--yxf24x4ol.xn--sib102gc69k; ; ; # ᮪ⴃⅎ.ᠳ툻ٳ +\u1BAAⴃⅎ。ᠳ툻\u0673; \u1BAAⴃⅎ.ᠳ툻\u0673; [B5, B6, V5]; xn--yxf24x4ol.xn--sib102gc69k; ; ; # ᮪ⴃⅎ.ᠳ툻ٳ +\u1BAAႣⅎ。ᠳ툻\u0673; \u1BAAႣⅎ.ᠳ툻\u0673; [B5, B6, V5, V6]; xn--bnd957c2pe.xn--sib102gc69k; ; ; # ᮪Ⴃⅎ.ᠳ툻ٳ +\u1BAAႣⅎ。ᠳ툻\u0673; \u1BAAႣⅎ.ᠳ툻\u0673; [B5, B6, V5, V6]; xn--bnd957c2pe.xn--sib102gc69k; ; ; # ᮪Ⴃⅎ.ᠳ툻ٳ +xn--bnd957c2pe.xn--sib102gc69k; \u1BAAႣⅎ.ᠳ툻\u0673; [B5, B6, V5, V6]; xn--bnd957c2pe.xn--sib102gc69k; ; ; # ᮪Ⴃⅎ.ᠳ툻ٳ +xn--yxf24x4ol.xn--sib102gc69k; \u1BAAⴃⅎ.ᠳ툻\u0673; [B5, B6, V5]; xn--yxf24x4ol.xn--sib102gc69k; ; ; # ᮪ⴃⅎ.ᠳ툻ٳ +xn--bnd957cone.xn--sib102gc69k; \u1BAAႣℲ.ᠳ툻\u0673; [B5, B6, V5, V6]; xn--bnd957cone.xn--sib102gc69k; ; ; # ᮪ႣℲ.ᠳ툻ٳ +\u1BAAⴃⅎ。ᠳ툻\u0673; \u1BAAⴃⅎ.ᠳ툻\u0673; [B5, B6, V5]; xn--yxf24x4ol.xn--sib102gc69k; ; ; # ᮪ⴃⅎ.ᠳ툻ٳ +\u1BAAⴃⅎ。ᠳ툻\u0673; \u1BAAⴃⅎ.ᠳ툻\u0673; [B5, B6, V5]; xn--yxf24x4ol.xn--sib102gc69k; ; ; # ᮪ⴃⅎ.ᠳ툻ٳ +\u1BAAႣⅎ。ᠳ툻\u0673; \u1BAAႣⅎ.ᠳ툻\u0673; [B5, B6, V5, V6]; xn--bnd957c2pe.xn--sib102gc69k; ; ; # ᮪Ⴃⅎ.ᠳ툻ٳ +\u1BAAႣⅎ。ᠳ툻\u0673; \u1BAAႣⅎ.ᠳ툻\u0673; [B5, B6, V5, V6]; xn--bnd957c2pe.xn--sib102gc69k; ; ; # ᮪Ⴃⅎ.ᠳ툻ٳ +\u06EC.\u08A2𐹫\u067C; ; [B1, V5]; xn--8lb.xn--1ib31ily45b; ; ; # ۬.ࢢ𐹫ټ +xn--8lb.xn--1ib31ily45b; \u06EC.\u08A2𐹫\u067C; [B1, V5]; xn--8lb.xn--1ib31ily45b; ; ; # ۬.ࢢ𐹫ټ +\u06B6\u06DF。₇\uA806; \u06B6\u06DF.7\uA806; [B1]; xn--pkb6f.xn--7-x93e; ; ; # ڶ۟.7꠆ +\u06B6\u06DF。7\uA806; \u06B6\u06DF.7\uA806; [B1]; xn--pkb6f.xn--7-x93e; ; ; # ڶ۟.7꠆ +xn--pkb6f.xn--7-x93e; \u06B6\u06DF.7\uA806; [B1]; xn--pkb6f.xn--7-x93e; ; ; # ڶ۟.7꠆ +\u06B6\u06DF.7\uA806; ; [B1]; xn--pkb6f.xn--7-x93e; ; ; # ڶ۟.7꠆ +Ⴣ𐹻.\u200C𝪣≮; ; [B1, B5, B6, C1, V6]; xn--7nd8101k.xn--0ugy6gn120eb103g; ; xn--7nd8101k.xn--gdh4944ob3x3e; [B1, B5, B6, V5, V6] # Ⴣ𐹻.𝪣≮ +Ⴣ𐹻.\u200C𝪣<\u0338; Ⴣ𐹻.\u200C𝪣≮; [B1, B5, B6, C1, V6]; xn--7nd8101k.xn--0ugy6gn120eb103g; ; xn--7nd8101k.xn--gdh4944ob3x3e; [B1, B5, B6, V5, V6] # Ⴣ𐹻.𝪣≮ +ⴣ𐹻.\u200C𝪣<\u0338; ⴣ𐹻.\u200C𝪣≮; [B1, B5, B6, C1, V6]; xn--rlj6323e.xn--0ugy6gn120eb103g; ; xn--rlj6323e.xn--gdh4944ob3x3e; [B1, B5, B6, V5, V6] # ⴣ𐹻.𝪣≮ +ⴣ𐹻.\u200C𝪣≮; ; [B1, B5, B6, C1, V6]; xn--rlj6323e.xn--0ugy6gn120eb103g; ; xn--rlj6323e.xn--gdh4944ob3x3e; [B1, B5, B6, V5, V6] # ⴣ𐹻.𝪣≮ +xn--rlj6323e.xn--gdh4944ob3x3e; ⴣ𐹻.𝪣≮; [B1, B5, B6, V5, V6]; xn--rlj6323e.xn--gdh4944ob3x3e; ; ; # ⴣ𐹻.𝪣≮ +xn--rlj6323e.xn--0ugy6gn120eb103g; ⴣ𐹻.\u200C𝪣≮; [B1, B5, B6, C1, V6]; xn--rlj6323e.xn--0ugy6gn120eb103g; ; ; # ⴣ𐹻.𝪣≮ +xn--7nd8101k.xn--gdh4944ob3x3e; Ⴣ𐹻.𝪣≮; [B1, B5, B6, V5, V6]; xn--7nd8101k.xn--gdh4944ob3x3e; ; ; # Ⴣ𐹻.𝪣≮ +xn--7nd8101k.xn--0ugy6gn120eb103g; Ⴣ𐹻.\u200C𝪣≮; [B1, B5, B6, C1, V6]; xn--7nd8101k.xn--0ugy6gn120eb103g; ; ; # Ⴣ𐹻.𝪣≮ +𝟵隁⯮.\u180D\u200C; 9隁⯮.\u200C; [C1]; xn--9-mfs8024b.xn--0ug; ; xn--9-mfs8024b.; [] # 9隁⯮. +9隁⯮.\u180D\u200C; 9隁⯮.\u200C; [C1]; xn--9-mfs8024b.xn--0ug; ; xn--9-mfs8024b.; [] # 9隁⯮. +xn--9-mfs8024b.; 9隁⯮.; ; xn--9-mfs8024b.; ; ; # 9隁⯮. +9隁⯮.; ; ; xn--9-mfs8024b.; ; ; # 9隁⯮. +xn--9-mfs8024b.xn--0ug; 9隁⯮.\u200C; [C1]; xn--9-mfs8024b.xn--0ug; ; ; # 9隁⯮. +⒏𐹧。Ⴣ\u0F84彦; ⒏𐹧.Ⴣ\u0F84彦; [B1, V6]; xn--0sh2466f.xn--3ed15dt93o; ; ; # ⒏𐹧.Ⴣ྄彦 +8.𐹧。Ⴣ\u0F84彦; 8.𐹧.Ⴣ\u0F84彦; [B1, V6]; 8.xn--fo0d.xn--3ed15dt93o; ; ; # 8.𐹧.Ⴣ྄彦 +8.𐹧。ⴣ\u0F84彦; 8.𐹧.ⴣ\u0F84彦; [B1]; 8.xn--fo0d.xn--3ed972m6o8a; ; ; # 8.𐹧.ⴣ྄彦 +8.xn--fo0d.xn--3ed972m6o8a; 8.𐹧.ⴣ\u0F84彦; [B1]; 8.xn--fo0d.xn--3ed972m6o8a; ; ; # 8.𐹧.ⴣ྄彦 +8.xn--fo0d.xn--3ed15dt93o; 8.𐹧.Ⴣ\u0F84彦; [B1, V6]; 8.xn--fo0d.xn--3ed15dt93o; ; ; # 8.𐹧.Ⴣ྄彦 +⒏𐹧。ⴣ\u0F84彦; ⒏𐹧.ⴣ\u0F84彦; [B1, V6]; xn--0sh2466f.xn--3ed972m6o8a; ; ; # ⒏𐹧.ⴣ྄彦 +xn--0sh2466f.xn--3ed972m6o8a; ⒏𐹧.ⴣ\u0F84彦; [B1, V6]; xn--0sh2466f.xn--3ed972m6o8a; ; ; # ⒏𐹧.ⴣ྄彦 +xn--0sh2466f.xn--3ed15dt93o; ⒏𐹧.Ⴣ\u0F84彦; [B1, V6]; xn--0sh2466f.xn--3ed15dt93o; ; ; # ⒏𐹧.Ⴣ྄彦 +-问⒛。\u0604-橬; -问⒛.\u0604-橬; [B1, V3, V6]; xn----hdpu849bhis3e.xn----ykc7228efm46d; ; ; # -问⒛.-橬 +-问20.。\u0604-橬; -问20..\u0604-橬; [B1, V3, V6, X4_2]; xn---20-658jx1776d..xn----ykc7228efm46d; [B1, V3, V6, A4_2]; ; # -问20..-橬 +xn---20-658jx1776d..xn----ykc7228efm46d; -问20..\u0604-橬; [B1, V3, V6, X4_2]; xn---20-658jx1776d..xn----ykc7228efm46d; [B1, V3, V6, A4_2]; ; # -问20..-橬 +xn----hdpu849bhis3e.xn----ykc7228efm46d; -问⒛.\u0604-橬; [B1, V3, V6]; xn----hdpu849bhis3e.xn----ykc7228efm46d; ; ; # -问⒛.-橬 +\u1BACႬ\u200C\u0325。𝟸; \u1BACႬ\u200C\u0325.2; [C1, V5, V6]; xn--mta930emribme.2; ; xn--mta930emri.2; [V5, V6] # ᮬႬ̥.2 +\u1BACႬ\u200C\u0325。2; \u1BACႬ\u200C\u0325.2; [C1, V5, V6]; xn--mta930emribme.2; ; xn--mta930emri.2; [V5, V6] # ᮬႬ̥.2 +\u1BACⴌ\u200C\u0325。2; \u1BACⴌ\u200C\u0325.2; [C1, V5]; xn--mta176j97cl2q.2; ; xn--mta176jjjm.2; [V5] # ᮬⴌ̥.2 +xn--mta176jjjm.2; \u1BACⴌ\u0325.2; [V5]; xn--mta176jjjm.2; ; ; # ᮬⴌ̥.2 +xn--mta176j97cl2q.2; \u1BACⴌ\u200C\u0325.2; [C1, V5]; xn--mta176j97cl2q.2; ; ; # ᮬⴌ̥.2 +xn--mta930emri.2; \u1BACႬ\u0325.2; [V5, V6]; xn--mta930emri.2; ; ; # ᮬႬ̥.2 +xn--mta930emribme.2; \u1BACႬ\u200C\u0325.2; [C1, V5, V6]; xn--mta930emribme.2; ; ; # ᮬႬ̥.2 +\u1BACⴌ\u200C\u0325。𝟸; \u1BACⴌ\u200C\u0325.2; [C1, V5]; xn--mta176j97cl2q.2; ; xn--mta176jjjm.2; [V5] # ᮬⴌ̥.2 +?。\uA806\u0669; ?.\uA806\u0669; [B1, V5, V6]; ?.xn--iib9583fusy0i; ; ; # ?.꠆٩ +?.xn--iib9583fusy0i; ?.\uA806\u0669; [B1, V5, V6]; ?.xn--iib9583fusy0i; ; ; # ?.꠆٩ +󠄁\u035F⾶。₇︒눇≮; \u035F飛.7︒눇≮; [V5, V6]; xn--9ua0567e.xn--7-ngou006d1ttc; ; ; # ͟飛.7︒눇≮ +󠄁\u035F⾶。₇︒눇<\u0338; \u035F飛.7︒눇≮; [V5, V6]; xn--9ua0567e.xn--7-ngou006d1ttc; ; ; # ͟飛.7︒눇≮ +󠄁\u035F飛。7。눇≮; \u035F飛.7.눇≮; [V5]; xn--9ua0567e.7.xn--gdh6767c; ; ; # ͟飛.7.눇≮ +󠄁\u035F飛。7。눇<\u0338; \u035F飛.7.눇≮; [V5]; xn--9ua0567e.7.xn--gdh6767c; ; ; # ͟飛.7.눇≮ +xn--9ua0567e.7.xn--gdh6767c; \u035F飛.7.눇≮; [V5]; xn--9ua0567e.7.xn--gdh6767c; ; ; # ͟飛.7.눇≮ +xn--9ua0567e.xn--7-ngou006d1ttc; \u035F飛.7︒눇≮; [V5, V6]; xn--9ua0567e.xn--7-ngou006d1ttc; ; ; # ͟飛.7︒눇≮ +\u200C\uFE09𐹴\u200D.\u200C⿃; \u200C𐹴\u200D.\u200C鳥; [B1, C1, C2]; xn--0ugc6024p.xn--0ug1920c; ; xn--so0d.xn--6x6a; [B1] # 𐹴.鳥 +\u200C\uFE09𐹴\u200D.\u200C鳥; \u200C𐹴\u200D.\u200C鳥; [B1, C1, C2]; xn--0ugc6024p.xn--0ug1920c; ; xn--so0d.xn--6x6a; [B1] # 𐹴.鳥 +xn--so0d.xn--6x6a; 𐹴.鳥; [B1]; xn--so0d.xn--6x6a; ; ; # 𐹴.鳥 +xn--0ugc6024p.xn--0ug1920c; \u200C𐹴\u200D.\u200C鳥; [B1, C1, C2]; xn--0ugc6024p.xn--0ug1920c; ; ; # 𐹴.鳥 +🍮.\u200D𐦁𝨝; 🍮.\u200D𐦁𝨝; [B1, C2, V6]; xn--lj8h.xn--1ug6603gr1pfwq37h; ; xn--lj8h.xn--ln9ci476aqmr2g; [B1, V6] # 🍮.𐦁𝨝 +🍮.\u200D𐦁𝨝; ; [B1, C2, V6]; xn--lj8h.xn--1ug6603gr1pfwq37h; ; xn--lj8h.xn--ln9ci476aqmr2g; [B1, V6] # 🍮.𐦁𝨝 +xn--lj8h.xn--ln9ci476aqmr2g; 🍮.𐦁𝨝; [B1, V6]; xn--lj8h.xn--ln9ci476aqmr2g; ; ; # 🍮.𐦁𝨝 +xn--lj8h.xn--1ug6603gr1pfwq37h; 🍮.\u200D𐦁𝨝; [B1, C2, V6]; xn--lj8h.xn--1ug6603gr1pfwq37h; ; ; # 🍮.𐦁𝨝 +\u067D\u0943.𞤓\u200D; \u067D\u0943.𞤵\u200D; [B3, C2]; xn--2ib43l.xn--1ugy711p; ; xn--2ib43l.xn--te6h; [] # ٽृ.𞤵 +\u067D\u0943.𞤵\u200D; ; [B3, C2]; xn--2ib43l.xn--1ugy711p; ; xn--2ib43l.xn--te6h; [] # ٽृ.𞤵 +xn--2ib43l.xn--te6h; \u067D\u0943.𞤵; ; xn--2ib43l.xn--te6h; ; ; # ٽृ.𞤵 +\u067D\u0943.𞤵; ; ; xn--2ib43l.xn--te6h; ; ; # ٽृ.𞤵 +\u067D\u0943.𞤓; \u067D\u0943.𞤵; ; xn--2ib43l.xn--te6h; ; ; # ٽृ.𞤵 +xn--2ib43l.xn--1ugy711p; \u067D\u0943.𞤵\u200D; [B3, C2]; xn--2ib43l.xn--1ugy711p; ; ; # ٽृ.𞤵 +\u0664\u0A4D-.\u1039; \u0664\u0A4D-.\u1039; [B1, V3, V6]; xn----gqc711a.xn--9jd88234f3qm0b; ; ; # ٤੍-.္ +\u0664\u0A4D-.\u1039; ; [B1, V3, V6]; xn----gqc711a.xn--9jd88234f3qm0b; ; ; # ٤੍-.္ +xn----gqc711a.xn--9jd88234f3qm0b; \u0664\u0A4D-.\u1039; [B1, V3, V6]; xn----gqc711a.xn--9jd88234f3qm0b; ; ; # ٤੍-.္ +4\u103A-𐹸。\uAA29\u200C𐹴≮; 4\u103A-𐹸.\uAA29\u200C𐹴≮; [B1, C1, V5]; xn--4--e4j7831r.xn--0ugy6gjy5sl3ud; ; xn--4--e4j7831r.xn--gdh8754cz40c; [B1, V5] # 4်-𐹸.ꨩ𐹴≮ +4\u103A-𐹸。\uAA29\u200C𐹴<\u0338; 4\u103A-𐹸.\uAA29\u200C𐹴≮; [B1, C1, V5]; xn--4--e4j7831r.xn--0ugy6gjy5sl3ud; ; xn--4--e4j7831r.xn--gdh8754cz40c; [B1, V5] # 4်-𐹸.ꨩ𐹴≮ +4\u103A-𐹸。\uAA29\u200C𐹴≮; 4\u103A-𐹸.\uAA29\u200C𐹴≮; [B1, C1, V5]; xn--4--e4j7831r.xn--0ugy6gjy5sl3ud; ; xn--4--e4j7831r.xn--gdh8754cz40c; [B1, V5] # 4်-𐹸.ꨩ𐹴≮ +4\u103A-𐹸。\uAA29\u200C𐹴<\u0338; 4\u103A-𐹸.\uAA29\u200C𐹴≮; [B1, C1, V5]; xn--4--e4j7831r.xn--0ugy6gjy5sl3ud; ; xn--4--e4j7831r.xn--gdh8754cz40c; [B1, V5] # 4်-𐹸.ꨩ𐹴≮ +xn--4--e4j7831r.xn--gdh8754cz40c; 4\u103A-𐹸.\uAA29𐹴≮; [B1, V5]; xn--4--e4j7831r.xn--gdh8754cz40c; ; ; # 4်-𐹸.ꨩ𐹴≮ +xn--4--e4j7831r.xn--0ugy6gjy5sl3ud; 4\u103A-𐹸.\uAA29\u200C𐹴≮; [B1, C1, V5]; xn--4--e4j7831r.xn--0ugy6gjy5sl3ud; ; ; # 4်-𐹸.ꨩ𐹴≮ +\u200C。\uFFA0\u0F84\u0F96; \u200C.\uFFA0\u0F84\u0F96; [C1, V6]; xn--0ug.xn--3ed0by082k; ; .xn--3ed0by082k; [V6, A4_2] # .྄ྖ +\u200C。\u1160\u0F84\u0F96; \u200C.\u1160\u0F84\u0F96; [C1, V6]; xn--0ug.xn--3ed0b20h; ; .xn--3ed0b20h; [V6, A4_2] # .྄ྖ +.xn--3ed0b20h; .\u1160\u0F84\u0F96; [V6, X4_2]; .xn--3ed0b20h; [V6, A4_2]; ; # .྄ྖ +xn--0ug.xn--3ed0b20h; \u200C.\u1160\u0F84\u0F96; [C1, V6]; xn--0ug.xn--3ed0b20h; ; ; # .྄ྖ +.xn--3ed0by082k; .\uFFA0\u0F84\u0F96; [V6, X4_2]; .xn--3ed0by082k; [V6, A4_2]; ; # .྄ྖ +xn--0ug.xn--3ed0by082k; \u200C.\uFFA0\u0F84\u0F96; [C1, V6]; xn--0ug.xn--3ed0by082k; ; ; # .྄ྖ +≯.\u200D𐅼; ≯.\u200D𐅼; [C2, V6]; xn--hdh84488f.xn--1ug8099fbjp4e; ; xn--hdh84488f.xn--xy7cw2886b; [V6] # ≯.𐅼 +>\u0338.\u200D𐅼; ≯.\u200D𐅼; [C2, V6]; xn--hdh84488f.xn--1ug8099fbjp4e; ; xn--hdh84488f.xn--xy7cw2886b; [V6] # ≯.𐅼 +≯.\u200D𐅼; ; [C2, V6]; xn--hdh84488f.xn--1ug8099fbjp4e; ; xn--hdh84488f.xn--xy7cw2886b; [V6] # ≯.𐅼 +>\u0338.\u200D𐅼; ≯.\u200D𐅼; [C2, V6]; xn--hdh84488f.xn--1ug8099fbjp4e; ; xn--hdh84488f.xn--xy7cw2886b; [V6] # ≯.𐅼 +xn--hdh84488f.xn--xy7cw2886b; ≯.𐅼; [V6]; xn--hdh84488f.xn--xy7cw2886b; ; ; # ≯.𐅼 +xn--hdh84488f.xn--1ug8099fbjp4e; ≯.\u200D𐅼; [C2, V6]; xn--hdh84488f.xn--1ug8099fbjp4e; ; ; # ≯.𐅼 +\u0641ß𐰯。𝟕𐫫; \u0641ß𐰯.7𐫫; [B1, B2]; xn--zca96ys96y.xn--7-mm5i; ; xn--ss-jvd2339x.xn--7-mm5i; # فß𐰯.7𐫫 +\u0641ß𐰯。7𐫫; \u0641ß𐰯.7𐫫; [B1, B2]; xn--zca96ys96y.xn--7-mm5i; ; xn--ss-jvd2339x.xn--7-mm5i; # فß𐰯.7𐫫 +\u0641SS𐰯。7𐫫; \u0641ss𐰯.7𐫫; [B1, B2]; xn--ss-jvd2339x.xn--7-mm5i; ; ; # فss𐰯.7𐫫 +\u0641ss𐰯。7𐫫; \u0641ss𐰯.7𐫫; [B1, B2]; xn--ss-jvd2339x.xn--7-mm5i; ; ; # فss𐰯.7𐫫 +xn--ss-jvd2339x.xn--7-mm5i; \u0641ss𐰯.7𐫫; [B1, B2]; xn--ss-jvd2339x.xn--7-mm5i; ; ; # فss𐰯.7𐫫 +xn--zca96ys96y.xn--7-mm5i; \u0641ß𐰯.7𐫫; [B1, B2]; xn--zca96ys96y.xn--7-mm5i; ; ; # فß𐰯.7𐫫 +\u0641SS𐰯。𝟕𐫫; \u0641ss𐰯.7𐫫; [B1, B2]; xn--ss-jvd2339x.xn--7-mm5i; ; ; # فss𐰯.7𐫫 +\u0641ss𐰯。𝟕𐫫; \u0641ss𐰯.7𐫫; [B1, B2]; xn--ss-jvd2339x.xn--7-mm5i; ; ; # فss𐰯.7𐫫 +\u0641Ss𐰯。7𐫫; \u0641ss𐰯.7𐫫; [B1, B2]; xn--ss-jvd2339x.xn--7-mm5i; ; ; # فss𐰯.7𐫫 +\u0641Ss𐰯。𝟕𐫫; \u0641ss𐰯.7𐫫; [B1, B2]; xn--ss-jvd2339x.xn--7-mm5i; ; ; # فss𐰯.7𐫫 +ß\u07AC\u07A7\u08B1。𐭁𐹲; ß\u07AC\u07A7\u08B1.𐭁𐹲; [B2, B5, B6, V6]; xn--zca685aoa95h.xn--e09co8cr9861c; ; xn--ss-9qet02k.xn--e09co8cr9861c; # ßެާࢱ.𐭁𐹲 +SS\u07AC\u07A7\u08B1。𐭁𐹲; ss\u07AC\u07A7\u08B1.𐭁𐹲; [B2, B5, B6, V6]; xn--ss-9qet02k.xn--e09co8cr9861c; ; ; # ssެާࢱ.𐭁𐹲 +ss\u07AC\u07A7\u08B1。𐭁𐹲; ss\u07AC\u07A7\u08B1.𐭁𐹲; [B2, B5, B6, V6]; xn--ss-9qet02k.xn--e09co8cr9861c; ; ; # ssެާࢱ.𐭁𐹲 +Ss\u07AC\u07A7\u08B1。𐭁𐹲; ss\u07AC\u07A7\u08B1.𐭁𐹲; [B2, B5, B6, V6]; xn--ss-9qet02k.xn--e09co8cr9861c; ; ; # ssެާࢱ.𐭁𐹲 +xn--ss-9qet02k.xn--e09co8cr9861c; ss\u07AC\u07A7\u08B1.𐭁𐹲; [B2, B5, B6, V6]; xn--ss-9qet02k.xn--e09co8cr9861c; ; ; # ssެާࢱ.𐭁𐹲 +xn--zca685aoa95h.xn--e09co8cr9861c; ß\u07AC\u07A7\u08B1.𐭁𐹲; [B2, B5, B6, V6]; xn--zca685aoa95h.xn--e09co8cr9861c; ; ; # ßެާࢱ.𐭁𐹲 +-。⒌; -.⒌; [B1, V3, V6]; -.xn--xsh6367n1bi3e; ; ; # -.⒌ +-。5.; -.5.; [B1, V3, V6]; -.xn--5-zz21m.xn--6x6h; ; ; # -.5. +-.xn--5-zz21m.xn--6x6h; -.5.; [B1, V3, V6]; -.xn--5-zz21m.xn--6x6h; ; ; # -.5. +-.xn--xsh6367n1bi3e; -.⒌; [B1, V3, V6]; -.xn--xsh6367n1bi3e; ; ; # -.⒌ +ς.-≮\uFCAB; ς.-≮\u062E\u062C; [B1, V3, V6]; xn--3xa13520c.xn----9mcf1400a; ; xn--4xa92520c.xn----9mcf1400a; # ς.-≮خج +ς.-<\u0338\uFCAB; ς.-≮\u062E\u062C; [B1, V3, V6]; xn--3xa13520c.xn----9mcf1400a; ; xn--4xa92520c.xn----9mcf1400a; # ς.-≮خج +ς.-≮\u062E\u062C; ; [B1, V3, V6]; xn--3xa13520c.xn----9mcf1400a; ; xn--4xa92520c.xn----9mcf1400a; # ς.-≮خج +ς.-<\u0338\u062E\u062C; ς.-≮\u062E\u062C; [B1, V3, V6]; xn--3xa13520c.xn----9mcf1400a; ; xn--4xa92520c.xn----9mcf1400a; # ς.-≮خج +Σ.-<\u0338\u062E\u062C; σ.-≮\u062E\u062C; [B1, V3, V6]; xn--4xa92520c.xn----9mcf1400a; ; ; # σ.-≮خج +Σ.-≮\u062E\u062C; σ.-≮\u062E\u062C; [B1, V3, V6]; xn--4xa92520c.xn----9mcf1400a; ; ; # σ.-≮خج +σ.-≮\u062E\u062C; ; [B1, V3, V6]; xn--4xa92520c.xn----9mcf1400a; ; ; # σ.-≮خج +σ.-<\u0338\u062E\u062C; σ.-≮\u062E\u062C; [B1, V3, V6]; xn--4xa92520c.xn----9mcf1400a; ; ; # σ.-≮خج +xn--4xa92520c.xn----9mcf1400a; σ.-≮\u062E\u062C; [B1, V3, V6]; xn--4xa92520c.xn----9mcf1400a; ; ; # σ.-≮خج +xn--3xa13520c.xn----9mcf1400a; ς.-≮\u062E\u062C; [B1, V3, V6]; xn--3xa13520c.xn----9mcf1400a; ; ; # ς.-≮خج +Σ.-<\u0338\uFCAB; σ.-≮\u062E\u062C; [B1, V3, V6]; xn--4xa92520c.xn----9mcf1400a; ; ; # σ.-≮خج +Σ.-≮\uFCAB; σ.-≮\u062E\u062C; [B1, V3, V6]; xn--4xa92520c.xn----9mcf1400a; ; ; # σ.-≮خج +σ.-≮\uFCAB; σ.-≮\u062E\u062C; [B1, V3, V6]; xn--4xa92520c.xn----9mcf1400a; ; ; # σ.-≮خج +σ.-<\u0338\uFCAB; σ.-≮\u062E\u062C; [B1, V3, V6]; xn--4xa92520c.xn----9mcf1400a; ; ; # σ.-≮خج +ꡗ\u08B8\u0719.\u0C4D\uFC3E; ꡗ\u08B8\u0719.\u0C4D\u0643\u064A; [B5, B6, V6]; xn--jnb34fs003a.xn--fhbo927bk128mpi24d; ; ; # ꡗࢸܙ.్كي +ꡗ\u08B8\u0719.\u0C4D\u0643\u064A; ; [B5, B6, V6]; xn--jnb34fs003a.xn--fhbo927bk128mpi24d; ; ; # ꡗࢸܙ.్كي +xn--jnb34fs003a.xn--fhbo927bk128mpi24d; ꡗ\u08B8\u0719.\u0C4D\u0643\u064A; [B5, B6, V6]; xn--jnb34fs003a.xn--fhbo927bk128mpi24d; ; ; # ꡗࢸܙ.్كي +𐠰\u08B7𞤌𐫭。𐋦\u17CD𝩃; 𐠰\u08B7𞤮𐫭.𐋦\u17CD𝩃; [B1]; xn--dzb5191kezbrw47a.xn--p4e3841jz9tf; ; ; # 𐠰ࢷ𞤮𐫭.𐋦៍𝩃 +𐠰\u08B7𞤮𐫭。𐋦\u17CD𝩃; 𐠰\u08B7𞤮𐫭.𐋦\u17CD𝩃; [B1]; xn--dzb5191kezbrw47a.xn--p4e3841jz9tf; ; ; # 𐠰ࢷ𞤮𐫭.𐋦៍𝩃 +xn--dzb5191kezbrw47a.xn--p4e3841jz9tf; 𐠰\u08B7𞤮𐫭.𐋦\u17CD𝩃; [B1]; xn--dzb5191kezbrw47a.xn--p4e3841jz9tf; ; ; # 𐠰ࢷ𞤮𐫭.𐋦៍𝩃 +𐠰\u08B7𞤮𐫭.𐋦\u17CD𝩃; ; [B1]; xn--dzb5191kezbrw47a.xn--p4e3841jz9tf; ; ; # 𐠰ࢷ𞤮𐫭.𐋦៍𝩃 +𐠰\u08B7𞤌𐫭.𐋦\u17CD𝩃; 𐠰\u08B7𞤮𐫭.𐋦\u17CD𝩃; [B1]; xn--dzb5191kezbrw47a.xn--p4e3841jz9tf; ; ; # 𐠰ࢷ𞤮𐫭.𐋦៍𝩃 +₂㘷--。\u06D3\u200C𐫆𑖿; 2㘷--.\u06D3\u200C𐫆𑖿; [B1, C1, V2, V3]; xn--2---u58b.xn--jlb820ku99nbgj; ; xn--2---u58b.xn--jlb8024k14g; [B1, V2, V3] # 2㘷--.ۓ𐫆𑖿 +₂㘷--。\u06D2\u0654\u200C𐫆𑖿; 2㘷--.\u06D3\u200C𐫆𑖿; [B1, C1, V2, V3]; xn--2---u58b.xn--jlb820ku99nbgj; ; xn--2---u58b.xn--jlb8024k14g; [B1, V2, V3] # 2㘷--.ۓ𐫆𑖿 +2㘷--。\u06D3\u200C𐫆𑖿; 2㘷--.\u06D3\u200C𐫆𑖿; [B1, C1, V2, V3]; xn--2---u58b.xn--jlb820ku99nbgj; ; xn--2---u58b.xn--jlb8024k14g; [B1, V2, V3] # 2㘷--.ۓ𐫆𑖿 +2㘷--。\u06D2\u0654\u200C𐫆𑖿; 2㘷--.\u06D3\u200C𐫆𑖿; [B1, C1, V2, V3]; xn--2---u58b.xn--jlb820ku99nbgj; ; xn--2---u58b.xn--jlb8024k14g; [B1, V2, V3] # 2㘷--.ۓ𐫆𑖿 +xn--2---u58b.xn--jlb8024k14g; 2㘷--.\u06D3𐫆𑖿; [B1, V2, V3]; xn--2---u58b.xn--jlb8024k14g; ; ; # 2㘷--.ۓ𐫆𑖿 +xn--2---u58b.xn--jlb820ku99nbgj; 2㘷--.\u06D3\u200C𐫆𑖿; [B1, C1, V2, V3]; xn--2---u58b.xn--jlb820ku99nbgj; ; ; # 2㘷--.ۓ𐫆𑖿 +-𘊻.ᡮ\u062D-; -𘊻.ᡮ\u062D-; [B1, B5, B6, V3]; xn----bp5n.xn----bnc231l; ; ; # -𘊻.ᡮح- +-𘊻.ᡮ\u062D-; ; [B1, B5, B6, V3]; xn----bp5n.xn----bnc231l; ; ; # -𘊻.ᡮح- +xn----bp5n.xn----bnc231l; -𘊻.ᡮ\u062D-; [B1, B5, B6, V3]; xn----bp5n.xn----bnc231l; ; ; # -𘊻.ᡮح- +\u200C-ß。ᢣ𐹭\u063F; \u200C-ß.ᢣ𐹭\u063F; [B1, B5, B6, C1]; xn----qfa550v.xn--bhb925glx3p; ; -ss.xn--bhb925glx3p; [B1, B5, B6, V3] # -ß.ᢣ𐹭ؿ +\u200C-ß。ᢣ𐹭\u063F; \u200C-ß.ᢣ𐹭\u063F; [B1, B5, B6, C1]; xn----qfa550v.xn--bhb925glx3p; ; -ss.xn--bhb925glx3p; [B1, B5, B6, V3] # -ß.ᢣ𐹭ؿ +\u200C-SS。ᢣ𐹭\u063F; \u200C-ss.ᢣ𐹭\u063F; [B1, B5, B6, C1]; xn---ss-8m0a.xn--bhb925glx3p; ; -ss.xn--bhb925glx3p; [B1, B5, B6, V3] # -ss.ᢣ𐹭ؿ +\u200C-ss。ᢣ𐹭\u063F; \u200C-ss.ᢣ𐹭\u063F; [B1, B5, B6, C1]; xn---ss-8m0a.xn--bhb925glx3p; ; -ss.xn--bhb925glx3p; [B1, B5, B6, V3] # -ss.ᢣ𐹭ؿ +\u200C-Ss。ᢣ𐹭\u063F; \u200C-ss.ᢣ𐹭\u063F; [B1, B5, B6, C1]; xn---ss-8m0a.xn--bhb925glx3p; ; -ss.xn--bhb925glx3p; [B1, B5, B6, V3] # -ss.ᢣ𐹭ؿ +-ss.xn--bhb925glx3p; -ss.ᢣ𐹭\u063F; [B1, B5, B6, V3]; -ss.xn--bhb925glx3p; ; ; # -ss.ᢣ𐹭ؿ +xn---ss-8m0a.xn--bhb925glx3p; \u200C-ss.ᢣ𐹭\u063F; [B1, B5, B6, C1]; xn---ss-8m0a.xn--bhb925glx3p; ; ; # -ss.ᢣ𐹭ؿ +xn----qfa550v.xn--bhb925glx3p; \u200C-ß.ᢣ𐹭\u063F; [B1, B5, B6, C1]; xn----qfa550v.xn--bhb925glx3p; ; ; # -ß.ᢣ𐹭ؿ +\u200C-SS。ᢣ𐹭\u063F; \u200C-ss.ᢣ𐹭\u063F; [B1, B5, B6, C1]; xn---ss-8m0a.xn--bhb925glx3p; ; -ss.xn--bhb925glx3p; [B1, B5, B6, V3] # -ss.ᢣ𐹭ؿ +\u200C-ss。ᢣ𐹭\u063F; \u200C-ss.ᢣ𐹭\u063F; [B1, B5, B6, C1]; xn---ss-8m0a.xn--bhb925glx3p; ; -ss.xn--bhb925glx3p; [B1, B5, B6, V3] # -ss.ᢣ𐹭ؿ +\u200C-Ss。ᢣ𐹭\u063F; \u200C-ss.ᢣ𐹭\u063F; [B1, B5, B6, C1]; xn---ss-8m0a.xn--bhb925glx3p; ; -ss.xn--bhb925glx3p; [B1, B5, B6, V3] # -ss.ᢣ𐹭ؿ +꧐Ӏ\u1BAA\u08F6.눵; ꧐Ӏ\u1BAA\u08F6.눵; [V6]; xn--d5a07sn4u297k.xn--2e1b; ; ; # ꧐Ӏ᮪ࣶ.눵 +꧐Ӏ\u1BAA\u08F6.눵; ꧐Ӏ\u1BAA\u08F6.눵; [V6]; xn--d5a07sn4u297k.xn--2e1b; ; ; # ꧐Ӏ᮪ࣶ.눵 +꧐Ӏ\u1BAA\u08F6.눵; ; [V6]; xn--d5a07sn4u297k.xn--2e1b; ; ; # ꧐Ӏ᮪ࣶ.눵 +꧐Ӏ\u1BAA\u08F6.눵; ꧐Ӏ\u1BAA\u08F6.눵; [V6]; xn--d5a07sn4u297k.xn--2e1b; ; ; # ꧐Ӏ᮪ࣶ.눵 +꧐ӏ\u1BAA\u08F6.눵; ꧐ӏ\u1BAA\u08F6.눵; ; xn--s5a04sn4u297k.xn--2e1b; ; ; # ꧐ӏ᮪ࣶ.눵 +꧐ӏ\u1BAA\u08F6.눵; ; ; xn--s5a04sn4u297k.xn--2e1b; ; ; # ꧐ӏ᮪ࣶ.눵 +xn--s5a04sn4u297k.xn--2e1b; ꧐ӏ\u1BAA\u08F6.눵; ; xn--s5a04sn4u297k.xn--2e1b; ; ; # ꧐ӏ᮪ࣶ.눵 +xn--d5a07sn4u297k.xn--2e1b; ꧐Ӏ\u1BAA\u08F6.눵; [V6]; xn--d5a07sn4u297k.xn--2e1b; ; ; # ꧐Ӏ᮪ࣶ.눵 +꧐ӏ\u1BAA\u08F6.눵; ꧐ӏ\u1BAA\u08F6.눵; ; xn--s5a04sn4u297k.xn--2e1b; ; ; # ꧐ӏ᮪ࣶ.눵 +꧐ӏ\u1BAA\u08F6.눵; ꧐ӏ\u1BAA\u08F6.눵; ; xn--s5a04sn4u297k.xn--2e1b; ; ; # ꧐ӏ᮪ࣶ.눵 +\uA8EA。𑆾󠇗; \uA8EA.𑆾; [V5, V6]; xn--3g9a.xn--ud1dz07k; ; ; # ꣪.𑆾 +\uA8EA。𑆾󠇗; \uA8EA.𑆾; [V5, V6]; xn--3g9a.xn--ud1dz07k; ; ; # ꣪.𑆾 +xn--3g9a.xn--ud1dz07k; \uA8EA.𑆾; [V5, V6]; xn--3g9a.xn--ud1dz07k; ; ; # ꣪.𑆾 +𑚳。≯⾇; 𑚳.≯舛; [V6]; xn--3e2d79770c.xn--hdh0088abyy1c; ; ; # 𑚳.≯舛 +𑚳。>\u0338⾇; 𑚳.≯舛; [V6]; xn--3e2d79770c.xn--hdh0088abyy1c; ; ; # 𑚳.≯舛 +𑚳。≯舛; 𑚳.≯舛; [V6]; xn--3e2d79770c.xn--hdh0088abyy1c; ; ; # 𑚳.≯舛 +𑚳。>\u0338舛; 𑚳.≯舛; [V6]; xn--3e2d79770c.xn--hdh0088abyy1c; ; ; # 𑚳.≯舛 +xn--3e2d79770c.xn--hdh0088abyy1c; 𑚳.≯舛; [V6]; xn--3e2d79770c.xn--hdh0088abyy1c; ; ; # 𑚳.≯舛 +𐫇\u0661\u200C.\u200D\u200C; 𐫇\u0661\u200C.\u200D\u200C; [B1, B3, C1, C2]; xn--9hb652kv99n.xn--0ugb; ; xn--9hb7344k.; [] # 𐫇١. +𐫇\u0661\u200C.\u200D\u200C; ; [B1, B3, C1, C2]; xn--9hb652kv99n.xn--0ugb; ; xn--9hb7344k.; [] # 𐫇١. +xn--9hb7344k.; 𐫇\u0661.; ; xn--9hb7344k.; ; ; # 𐫇١. +𐫇\u0661.; ; ; xn--9hb7344k.; ; ; # 𐫇١. +xn--9hb652kv99n.xn--0ugb; 𐫇\u0661\u200C.\u200D\u200C; [B1, B3, C1, C2]; xn--9hb652kv99n.xn--0ugb; ; ; # 𐫇١. +砪≯ᢑ。≯𝩚\u200C; 砪≯ᢑ.≯𝩚\u200C; [C1, V6]; xn--bbf561cf95e57y3e.xn--0ugz6gc910ejro8c; ; xn--bbf561cf95e57y3e.xn--hdh0834o7mj6b; [V6] # 砪≯ᢑ.≯𝩚 +砪>\u0338ᢑ。>\u0338𝩚\u200C; 砪≯ᢑ.≯𝩚\u200C; [C1, V6]; xn--bbf561cf95e57y3e.xn--0ugz6gc910ejro8c; ; xn--bbf561cf95e57y3e.xn--hdh0834o7mj6b; [V6] # 砪≯ᢑ.≯𝩚 +砪≯ᢑ。≯𝩚\u200C; 砪≯ᢑ.≯𝩚\u200C; [C1, V6]; xn--bbf561cf95e57y3e.xn--0ugz6gc910ejro8c; ; xn--bbf561cf95e57y3e.xn--hdh0834o7mj6b; [V6] # 砪≯ᢑ.≯𝩚 +砪>\u0338ᢑ。>\u0338𝩚\u200C; 砪≯ᢑ.≯𝩚\u200C; [C1, V6]; xn--bbf561cf95e57y3e.xn--0ugz6gc910ejro8c; ; xn--bbf561cf95e57y3e.xn--hdh0834o7mj6b; [V6] # 砪≯ᢑ.≯𝩚 +xn--bbf561cf95e57y3e.xn--hdh0834o7mj6b; 砪≯ᢑ.≯𝩚; [V6]; xn--bbf561cf95e57y3e.xn--hdh0834o7mj6b; ; ; # 砪≯ᢑ.≯𝩚 +xn--bbf561cf95e57y3e.xn--0ugz6gc910ejro8c; 砪≯ᢑ.≯𝩚\u200C; [C1, V6]; xn--bbf561cf95e57y3e.xn--0ugz6gc910ejro8c; ; ; # 砪≯ᢑ.≯𝩚 +Ⴥ.𑄳㊸; Ⴥ.𑄳43; [V5, V6]; xn--9nd.xn--43-274o; ; ; # Ⴥ.𑄳43 +Ⴥ.𑄳43; ; [V5, V6]; xn--9nd.xn--43-274o; ; ; # Ⴥ.𑄳43 +ⴥ.𑄳43; ; [V5]; xn--tlj.xn--43-274o; ; ; # ⴥ.𑄳43 +xn--tlj.xn--43-274o; ⴥ.𑄳43; [V5]; xn--tlj.xn--43-274o; ; ; # ⴥ.𑄳43 +xn--9nd.xn--43-274o; Ⴥ.𑄳43; [V5, V6]; xn--9nd.xn--43-274o; ; ; # Ⴥ.𑄳43 +ⴥ.𑄳㊸; ⴥ.𑄳43; [V5]; xn--tlj.xn--43-274o; ; ; # ⴥ.𑄳43 +𝟎\u0663。Ⴒᡇ\u08F2𐹠; 0\u0663.Ⴒᡇ\u08F2𐹠; [B1, B5, B6, V6]; xn--0-fqc.xn--10b180bnwgfy0z; ; ; # 0٣.Ⴒᡇࣲ𐹠 +0\u0663。Ⴒᡇ\u08F2𐹠; 0\u0663.Ⴒᡇ\u08F2𐹠; [B1, B5, B6, V6]; xn--0-fqc.xn--10b180bnwgfy0z; ; ; # 0٣.Ⴒᡇࣲ𐹠 +0\u0663。ⴒᡇ\u08F2𐹠; 0\u0663.ⴒᡇ\u08F2𐹠; [B1, B5, B6]; xn--0-fqc.xn--10b369eivp359r; ; ; # 0٣.ⴒᡇࣲ𐹠 +xn--0-fqc.xn--10b369eivp359r; 0\u0663.ⴒᡇ\u08F2𐹠; [B1, B5, B6]; xn--0-fqc.xn--10b369eivp359r; ; ; # 0٣.ⴒᡇࣲ𐹠 +xn--0-fqc.xn--10b180bnwgfy0z; 0\u0663.Ⴒᡇ\u08F2𐹠; [B1, B5, B6, V6]; xn--0-fqc.xn--10b180bnwgfy0z; ; ; # 0٣.Ⴒᡇࣲ𐹠 +𝟎\u0663。ⴒᡇ\u08F2𐹠; 0\u0663.ⴒᡇ\u08F2𐹠; [B1, B5, B6]; xn--0-fqc.xn--10b369eivp359r; ; ; # 0٣.ⴒᡇࣲ𐹠 +󠄉\uFFA0\u0FB7.\uA953; \uFFA0\u0FB7.\uA953; [V6]; xn--kgd7493jee34a.xn--3j9au7544a; ; ; # ྷ.꥓ +󠄉\u1160\u0FB7.\uA953; \u1160\u0FB7.\uA953; [V6]; xn--kgd36f9z57y.xn--3j9au7544a; ; ; # ྷ.꥓ +xn--kgd36f9z57y.xn--3j9au7544a; \u1160\u0FB7.\uA953; [V6]; xn--kgd36f9z57y.xn--3j9au7544a; ; ; # ྷ.꥓ +xn--kgd7493jee34a.xn--3j9au7544a; \uFFA0\u0FB7.\uA953; [V6]; xn--kgd7493jee34a.xn--3j9au7544a; ; ; # ྷ.꥓ +\u0618.۳\u200C\uA953; ; [C1, V5]; xn--6fb.xn--gmb469jjf1h; ; xn--6fb.xn--gmb0524f; [V5] # ؘ.۳꥓ +xn--6fb.xn--gmb0524f; \u0618.۳\uA953; [V5]; xn--6fb.xn--gmb0524f; ; ; # ؘ.۳꥓ +xn--6fb.xn--gmb469jjf1h; \u0618.۳\u200C\uA953; [C1, V5]; xn--6fb.xn--gmb469jjf1h; ; ; # ؘ.۳꥓ +ᡌ.︒ᢑ; ᡌ.︒ᢑ; [V6]; xn--c8e.xn--bbf9168i; ; ; # ᡌ.︒ᢑ +ᡌ.。ᢑ; ᡌ..ᢑ; [X4_2]; xn--c8e..xn--bbf; [A4_2]; ; # ᡌ..ᢑ +xn--c8e..xn--bbf; ᡌ..ᢑ; [X4_2]; xn--c8e..xn--bbf; [A4_2]; ; # ᡌ..ᢑ +xn--c8e.xn--bbf9168i; ᡌ.︒ᢑ; [V6]; xn--c8e.xn--bbf9168i; ; ; # ᡌ.︒ᢑ +𑋪\u1073。; 𑋪\u1073.; [B1, V5, V6]; xn--xld7443k.xn--4o7h; ; ; # 𑋪ၳ. +𑋪\u1073。; 𑋪\u1073.; [B1, V5, V6]; xn--xld7443k.xn--4o7h; ; ; # 𑋪ၳ. +xn--xld7443k.xn--4o7h; 𑋪\u1073.; [B1, V5, V6]; xn--xld7443k.xn--4o7h; ; ; # 𑋪ၳ. +。ᠢ; .ᠢ; [V6]; xn--hd7h.xn--46e66060j; ; ; # .ᠢ +xn--hd7h.xn--46e66060j; .ᠢ; [V6]; xn--hd7h.xn--46e66060j; ; ; # .ᠢ +𑄳㴼.\u200C𐹡\u20EB; 𑄳㴼.\u200C𐹡\u20EB; [B1, C1, V5, V6]; xn--iym9428c.xn--0ug46a7218cllv0c; ; xn--iym9428c.xn--e1g3464g08p3b; [B1, V5, V6] # 𑄳㴼.𐹡⃫ +𑄳㴼.\u200C𐹡\u20EB; ; [B1, C1, V5, V6]; xn--iym9428c.xn--0ug46a7218cllv0c; ; xn--iym9428c.xn--e1g3464g08p3b; [B1, V5, V6] # 𑄳㴼.𐹡⃫ +xn--iym9428c.xn--e1g3464g08p3b; 𑄳㴼.𐹡\u20EB; [B1, V5, V6]; xn--iym9428c.xn--e1g3464g08p3b; ; ; # 𑄳㴼.𐹡⃫ +xn--iym9428c.xn--0ug46a7218cllv0c; 𑄳㴼.\u200C𐹡\u20EB; [B1, C1, V5, V6]; xn--iym9428c.xn--0ug46a7218cllv0c; ; ; # 𑄳㴼.𐹡⃫ +𐹳𑈯。\u031D; 𐹳𑈯.\u031D; [B1, B5, B6, V5, V6]; xn--ro0dw7dey96m.xn--eta; ; ; # 𐹳𑈯.̝ +𐹳𑈯。\u031D; 𐹳𑈯.\u031D; [B1, B5, B6, V5, V6]; xn--ro0dw7dey96m.xn--eta; ; ; # 𐹳𑈯.̝ +xn--ro0dw7dey96m.xn--eta; 𐹳𑈯.\u031D; [B1, B5, B6, V5, V6]; xn--ro0dw7dey96m.xn--eta; ; ; # 𐹳𑈯.̝ +ᢊ뾜𑚶。\u089D𐹥; ᢊ뾜𑚶.\u089D𐹥; [B1, V5, V6]; xn--39e4566fjv8bwmt6n.xn--myb6415k; ; ; # ᢊ뾜𑚶.࢝𐹥 +ᢊ뾜𑚶。\u089D𐹥; ᢊ뾜𑚶.\u089D𐹥; [B1, V5, V6]; xn--39e4566fjv8bwmt6n.xn--myb6415k; ; ; # ᢊ뾜𑚶.࢝𐹥 +xn--39e4566fjv8bwmt6n.xn--myb6415k; ᢊ뾜𑚶.\u089D𐹥; [B1, V5, V6]; xn--39e4566fjv8bwmt6n.xn--myb6415k; ; ; # ᢊ뾜𑚶.࢝𐹥 +𐹥≠。𐋲\u200C; 𐹥≠.𐋲\u200C; [B1, C1, V6]; xn--1ch6704g.xn--0ug3840g51u4g; ; xn--1ch6704g.xn--m97cw2999c; [B1, V6] # 𐹥≠.𐋲 +𐹥=\u0338。𐋲\u200C; 𐹥≠.𐋲\u200C; [B1, C1, V6]; xn--1ch6704g.xn--0ug3840g51u4g; ; xn--1ch6704g.xn--m97cw2999c; [B1, V6] # 𐹥≠.𐋲 +𐹥≠。𐋲\u200C; 𐹥≠.𐋲\u200C; [B1, C1, V6]; xn--1ch6704g.xn--0ug3840g51u4g; ; xn--1ch6704g.xn--m97cw2999c; [B1, V6] # 𐹥≠.𐋲 +𐹥=\u0338。𐋲\u200C; 𐹥≠.𐋲\u200C; [B1, C1, V6]; xn--1ch6704g.xn--0ug3840g51u4g; ; xn--1ch6704g.xn--m97cw2999c; [B1, V6] # 𐹥≠.𐋲 +xn--1ch6704g.xn--m97cw2999c; 𐹥≠.𐋲; [B1, V6]; xn--1ch6704g.xn--m97cw2999c; ; ; # 𐹥≠.𐋲 +xn--1ch6704g.xn--0ug3840g51u4g; 𐹥≠.𐋲\u200C; [B1, C1, V6]; xn--1ch6704g.xn--0ug3840g51u4g; ; ; # 𐹥≠.𐋲 +\u115F\u094D.\u200D\uA953; \u115F\u094D.\u200D\uA953; [B1, C2, V6]; xn--n3b542bb085j.xn--1ug6815co9wc; ; xn--n3b542bb085j.xn--3j9al95p; [B5, B6, V5, V6] # ्.꥓ +\u115F\u094D.\u200D\uA953; ; [B1, C2, V6]; xn--n3b542bb085j.xn--1ug6815co9wc; ; xn--n3b542bb085j.xn--3j9al95p; [B5, B6, V5, V6] # ्.꥓ +xn--n3b542bb085j.xn--3j9al95p; \u115F\u094D.\uA953; [B5, B6, V5, V6]; xn--n3b542bb085j.xn--3j9al95p; ; ; # ्.꥓ +xn--n3b542bb085j.xn--1ug6815co9wc; \u115F\u094D.\u200D\uA953; [B1, C2, V6]; xn--n3b542bb085j.xn--1ug6815co9wc; ; ; # ्.꥓ +󠆎󠆗𑲕。≮; 𑲕.≮; [V6]; xn--4m3dv4354a.xn--gdh; ; ; # 𑲕.≮ +󠆎󠆗𑲕。<\u0338; 𑲕.≮; [V6]; xn--4m3dv4354a.xn--gdh; ; ; # 𑲕.≮ +xn--4m3dv4354a.xn--gdh; 𑲕.≮; [V6]; xn--4m3dv4354a.xn--gdh; ; ; # 𑲕.≮ +󠆦.\u08E3暀≠; .\u08E3暀≠; [V5, X4_2]; .xn--m0b461k3g2c; [V5, A4_2]; ; # .ࣣ暀≠ +󠆦.\u08E3暀=\u0338; .\u08E3暀≠; [V5, X4_2]; .xn--m0b461k3g2c; [V5, A4_2]; ; # .ࣣ暀≠ +.xn--m0b461k3g2c; .\u08E3暀≠; [V5, X4_2]; .xn--m0b461k3g2c; [V5, A4_2]; ; # .ࣣ暀≠ +𐡤\uABED。\uFD30\u1DF0; 𐡤\uABED.\u0634\u0645\u1DF0; [B2, B3, V6]; xn--429ak76o.xn--zgb8a701kox37t; ; ; # 𐡤꯭.شمᷰ +𐡤\uABED。\u0634\u0645\u1DF0; 𐡤\uABED.\u0634\u0645\u1DF0; [B2, B3, V6]; xn--429ak76o.xn--zgb8a701kox37t; ; ; # 𐡤꯭.شمᷰ +xn--429ak76o.xn--zgb8a701kox37t; 𐡤\uABED.\u0634\u0645\u1DF0; [B2, B3, V6]; xn--429ak76o.xn--zgb8a701kox37t; ; ; # 𐡤꯭.شمᷰ +𝉃\u200D⒈。Ⴌ; 𝉃\u200D⒈.Ⴌ; [B1, B5, B6, C2, V5, V6]; xn--1ug68oq348b.xn--knd8464v; ; xn--tshz828m.xn--knd8464v; [B1, B5, B6, V5, V6] # 𝉃⒈.Ⴌ +𝉃\u200D1.。Ⴌ; 𝉃\u200D1..Ⴌ; [B1, B5, B6, C2, V5, V6, X4_2]; xn--1-tgn9827q..xn--knd8464v; [B1, B5, B6, C2, V5, V6, A4_2]; xn--1-px8q..xn--knd8464v; [B1, B5, B6, V5, V6, A4_2] # 𝉃1..Ⴌ +𝉃\u200D1.。ⴌ; 𝉃\u200D1..ⴌ; [B1, B5, B6, C2, V5, V6, X4_2]; xn--1-tgn9827q..xn--3kj4524l; [B1, B5, B6, C2, V5, V6, A4_2]; xn--1-px8q..xn--3kj4524l; [B1, B5, B6, V5, V6, A4_2] # 𝉃1..ⴌ +xn--1-px8q..xn--3kj4524l; 𝉃1..ⴌ; [B1, B5, B6, V5, V6, X4_2]; xn--1-px8q..xn--3kj4524l; [B1, B5, B6, V5, V6, A4_2]; ; # 𝉃1..ⴌ +xn--1-tgn9827q..xn--3kj4524l; 𝉃\u200D1..ⴌ; [B1, B5, B6, C2, V5, V6, X4_2]; xn--1-tgn9827q..xn--3kj4524l; [B1, B5, B6, C2, V5, V6, A4_2]; ; # 𝉃1..ⴌ +xn--1-px8q..xn--knd8464v; 𝉃1..Ⴌ; [B1, B5, B6, V5, V6, X4_2]; xn--1-px8q..xn--knd8464v; [B1, B5, B6, V5, V6, A4_2]; ; # 𝉃1..Ⴌ +xn--1-tgn9827q..xn--knd8464v; 𝉃\u200D1..Ⴌ; [B1, B5, B6, C2, V5, V6, X4_2]; xn--1-tgn9827q..xn--knd8464v; [B1, B5, B6, C2, V5, V6, A4_2]; ; # 𝉃1..Ⴌ +𝉃\u200D⒈。ⴌ; 𝉃\u200D⒈.ⴌ; [B1, B5, B6, C2, V5, V6]; xn--1ug68oq348b.xn--3kj4524l; ; xn--tshz828m.xn--3kj4524l; [B1, B5, B6, V5, V6] # 𝉃⒈.ⴌ +xn--tshz828m.xn--3kj4524l; 𝉃⒈.ⴌ; [B1, B5, B6, V5, V6]; xn--tshz828m.xn--3kj4524l; ; ; # 𝉃⒈.ⴌ +xn--1ug68oq348b.xn--3kj4524l; 𝉃\u200D⒈.ⴌ; [B1, B5, B6, C2, V5, V6]; xn--1ug68oq348b.xn--3kj4524l; ; ; # 𝉃⒈.ⴌ +xn--tshz828m.xn--knd8464v; 𝉃⒈.Ⴌ; [B1, B5, B6, V5, V6]; xn--tshz828m.xn--knd8464v; ; ; # 𝉃⒈.Ⴌ +xn--1ug68oq348b.xn--knd8464v; 𝉃\u200D⒈.Ⴌ; [B1, B5, B6, C2, V5, V6]; xn--1ug68oq348b.xn--knd8464v; ; ; # 𝉃⒈.Ⴌ +\u0A4D𱫘𞤸.ς; ; [B1, V6]; xn--ybc0236vjvxgt5q0g.xn--3xa03737giye6b; ; xn--ybc0236vjvxgt5q0g.xn--4xa82737giye6b; # ੍𱫘𞤸.ς +\u0A4D𱫘𞤖.Σ; \u0A4D𱫘𞤸.σ; [B1, V6]; xn--ybc0236vjvxgt5q0g.xn--4xa82737giye6b; ; ; # ੍𱫘𞤸.σ +\u0A4D𱫘𞤸.σ; ; [B1, V6]; xn--ybc0236vjvxgt5q0g.xn--4xa82737giye6b; ; ; # ੍𱫘𞤸.σ +\u0A4D𱫘𞤖.σ; \u0A4D𱫘𞤸.σ; [B1, V6]; xn--ybc0236vjvxgt5q0g.xn--4xa82737giye6b; ; ; # ੍𱫘𞤸.σ +xn--ybc0236vjvxgt5q0g.xn--4xa82737giye6b; \u0A4D𱫘𞤸.σ; [B1, V6]; xn--ybc0236vjvxgt5q0g.xn--4xa82737giye6b; ; ; # ੍𱫘𞤸.σ +\u0A4D𱫘𞤖.ς; \u0A4D𱫘𞤸.ς; [B1, V6]; xn--ybc0236vjvxgt5q0g.xn--3xa03737giye6b; ; xn--ybc0236vjvxgt5q0g.xn--4xa82737giye6b; # ੍𱫘𞤸.ς +xn--ybc0236vjvxgt5q0g.xn--3xa03737giye6b; \u0A4D𱫘𞤸.ς; [B1, V6]; xn--ybc0236vjvxgt5q0g.xn--3xa03737giye6b; ; ; # ੍𱫘𞤸.ς +\u0A4D𱫘𞤸.Σ; \u0A4D𱫘𞤸.σ; [B1, V6]; xn--ybc0236vjvxgt5q0g.xn--4xa82737giye6b; ; ; # ੍𱫘𞤸.σ +\u07D3。\u200C𐫀; \u07D3.\u200C𐫀; [B1, C1, V6]; xn--usb.xn--0ug9553gm3v5d; ; xn--usb.xn--pw9ci1099a; [B2, B3, V6] # ߓ.𐫀 +xn--usb.xn--pw9ci1099a; \u07D3.𐫀; [B2, B3, V6]; xn--usb.xn--pw9ci1099a; ; ; # ߓ.𐫀 +xn--usb.xn--0ug9553gm3v5d; \u07D3.\u200C𐫀; [B1, C1, V6]; xn--usb.xn--0ug9553gm3v5d; ; ; # ߓ.𐫀 +\u1C2E𞀝.\u05A6ꡟ𞤕󠆖; \u1C2E𞀝.\u05A6ꡟ𞤷; [B1, V5]; xn--q1f4493q.xn--xcb8244fifvj; ; ; # ᰮ𞀝.֦ꡟ𞤷 +\u1C2E𞀝.\u05A6ꡟ𞤷󠆖; \u1C2E𞀝.\u05A6ꡟ𞤷; [B1, V5]; xn--q1f4493q.xn--xcb8244fifvj; ; ; # ᰮ𞀝.֦ꡟ𞤷 +xn--q1f4493q.xn--xcb8244fifvj; \u1C2E𞀝.\u05A6ꡟ𞤷; [B1, V5]; xn--q1f4493q.xn--xcb8244fifvj; ; ; # ᰮ𞀝.֦ꡟ𞤷 +䂹𐋦.\u200D; 䂹𐋦.\u200D; [C2, V6]; xn--0on3543c5981i.xn--1ug; ; xn--0on3543c5981i.; [V6] # 䂹𐋦. +䂹𐋦.\u200D; ; [C2, V6]; xn--0on3543c5981i.xn--1ug; ; xn--0on3543c5981i.; [V6] # 䂹𐋦. +xn--0on3543c5981i.; 䂹𐋦.; [V6]; xn--0on3543c5981i.; ; ; # 䂹𐋦. +xn--0on3543c5981i.xn--1ug; 䂹𐋦.\u200D; [C2, V6]; xn--0on3543c5981i.xn--1ug; ; ; # 䂹𐋦. +\uA9C0\u200C𐹲\u200C。\u0767🄉; \uA9C0\u200C𐹲\u200C.\u0767🄉; [B5, B6, C1, V5, V6]; xn--0uga8686hdgvd.xn--rpb6081w; ; xn--7m9an32q.xn--rpb6081w; [B5, B6, V5, V6] # ꧀𐹲.ݧ🄉 +\uA9C0\u200C𐹲\u200C。\u07678,; \uA9C0\u200C𐹲\u200C.\u07678,; [B3, B5, B6, C1, V5, V6]; xn--0uga8686hdgvd.xn--8,-qle; ; xn--7m9an32q.xn--8,-qle; [B3, B5, B6, V5, V6] # ꧀𐹲.ݧ8, +xn--7m9an32q.xn--8,-qle; \uA9C0𐹲.\u07678,; [B3, B5, B6, V5, V6]; xn--7m9an32q.xn--8,-qle; ; ; # ꧀𐹲.ݧ8, +xn--0uga8686hdgvd.xn--8,-qle; \uA9C0\u200C𐹲\u200C.\u07678,; [B3, B5, B6, C1, V5, V6]; xn--0uga8686hdgvd.xn--8,-qle; ; ; # ꧀𐹲.ݧ8, +xn--7m9an32q.xn--rpb6081w; \uA9C0𐹲.\u0767🄉; [B5, B6, V5, V6]; xn--7m9an32q.xn--rpb6081w; ; ; # ꧀𐹲.ݧ🄉 +xn--0uga8686hdgvd.xn--rpb6081w; \uA9C0\u200C𐹲\u200C.\u0767🄉; [B5, B6, C1, V5, V6]; xn--0uga8686hdgvd.xn--rpb6081w; ; ; # ꧀𐹲.ݧ🄉 +︒。Ⴃ≯; ︒.Ⴃ≯; [V6]; xn--y86c.xn--bnd622g; ; ; # ︒.Ⴃ≯ +︒。Ⴃ>\u0338; ︒.Ⴃ≯; [V6]; xn--y86c.xn--bnd622g; ; ; # ︒.Ⴃ≯ +。。Ⴃ≯; ..Ⴃ≯; [V6, X4_2]; ..xn--bnd622g; [V6, A4_2]; ; # ..Ⴃ≯ +。。Ⴃ>\u0338; ..Ⴃ≯; [V6, X4_2]; ..xn--bnd622g; [V6, A4_2]; ; # ..Ⴃ≯ +。。ⴃ>\u0338; ..ⴃ≯; [X4_2]; ..xn--hdh782b; [A4_2]; ; # ..ⴃ≯ +。。ⴃ≯; ..ⴃ≯; [X4_2]; ..xn--hdh782b; [A4_2]; ; # ..ⴃ≯ +..xn--hdh782b; ..ⴃ≯; [X4_2]; ..xn--hdh782b; [A4_2]; ; # ..ⴃ≯ +..xn--bnd622g; ..Ⴃ≯; [V6, X4_2]; ..xn--bnd622g; [V6, A4_2]; ; # ..Ⴃ≯ +︒。ⴃ>\u0338; ︒.ⴃ≯; [V6]; xn--y86c.xn--hdh782b; ; ; # ︒.ⴃ≯ +︒。ⴃ≯; ︒.ⴃ≯; [V6]; xn--y86c.xn--hdh782b; ; ; # ︒.ⴃ≯ +xn--y86c.xn--hdh782b; ︒.ⴃ≯; [V6]; xn--y86c.xn--hdh782b; ; ; # ︒.ⴃ≯ +xn--y86c.xn--bnd622g; ︒.Ⴃ≯; [V6]; xn--y86c.xn--bnd622g; ; ; # ︒.Ⴃ≯ +𐹮。\u200D; 𐹮.\u200D; [B1, C2, V6]; xn--mo0d.xn--1ug18431l; ; xn--mo0d.xn--wy46e; [B1, V6] # 𐹮. +𐹮。\u200D; 𐹮.\u200D; [B1, C2, V6]; xn--mo0d.xn--1ug18431l; ; xn--mo0d.xn--wy46e; [B1, V6] # 𐹮. +xn--mo0d.xn--wy46e; 𐹮.; [B1, V6]; xn--mo0d.xn--wy46e; ; ; # 𐹮. +xn--mo0d.xn--1ug18431l; 𐹮.\u200D; [B1, C2, V6]; xn--mo0d.xn--1ug18431l; ; ; # 𐹮. +Ⴞ𐹨。︒\u077D\u200DႯ; Ⴞ𐹨.︒\u077D\u200DႯ; [B1, B5, B6, C2, V6]; xn--2nd0990k.xn--eqb228bgzmvp0t; ; xn--2nd0990k.xn--eqb228b583r; [B1, B5, B6, V6] # Ⴞ𐹨.︒ݽႯ +Ⴞ𐹨。。\u077D\u200DႯ; Ⴞ𐹨..\u077D\u200DႯ; [B2, B3, B5, B6, C2, V6, X4_2]; xn--2nd0990k..xn--eqb228bgzm; [B2, B3, B5, B6, C2, V6, A4_2]; xn--2nd0990k..xn--eqb228b; [B2, B3, B5, B6, V6, A4_2] # Ⴞ𐹨..ݽႯ +ⴞ𐹨。。\u077D\u200Dⴏ; ⴞ𐹨..\u077D\u200Dⴏ; [B2, B3, B5, B6, C2, X4_2]; xn--mlju223e..xn--eqb096jpgj; [B2, B3, B5, B6, C2, A4_2]; xn--mlju223e..xn--eqb053q; [B2, B3, B5, B6, A4_2] # ⴞ𐹨..ݽⴏ +Ⴞ𐹨。。\u077D\u200Dⴏ; Ⴞ𐹨..\u077D\u200Dⴏ; [B2, B3, B5, B6, C2, V6, X4_2]; xn--2nd0990k..xn--eqb096jpgj; [B2, B3, B5, B6, C2, V6, A4_2]; xn--2nd0990k..xn--eqb053q; [B2, B3, B5, B6, V6, A4_2] # Ⴞ𐹨..ݽⴏ +xn--2nd0990k..xn--eqb053q; Ⴞ𐹨..\u077Dⴏ; [B2, B3, B5, B6, V6, X4_2]; xn--2nd0990k..xn--eqb053q; [B2, B3, B5, B6, V6, A4_2]; ; # Ⴞ𐹨..ݽⴏ +xn--2nd0990k..xn--eqb096jpgj; Ⴞ𐹨..\u077D\u200Dⴏ; [B2, B3, B5, B6, C2, V6, X4_2]; xn--2nd0990k..xn--eqb096jpgj; [B2, B3, B5, B6, C2, V6, A4_2]; ; # Ⴞ𐹨..ݽⴏ +xn--mlju223e..xn--eqb053q; ⴞ𐹨..\u077Dⴏ; [B2, B3, B5, B6, X4_2]; xn--mlju223e..xn--eqb053q; [B2, B3, B5, B6, A4_2]; ; # ⴞ𐹨..ݽⴏ +xn--mlju223e..xn--eqb096jpgj; ⴞ𐹨..\u077D\u200Dⴏ; [B2, B3, B5, B6, C2, X4_2]; xn--mlju223e..xn--eqb096jpgj; [B2, B3, B5, B6, C2, A4_2]; ; # ⴞ𐹨..ݽⴏ +xn--2nd0990k..xn--eqb228b; Ⴞ𐹨..\u077DႯ; [B2, B3, B5, B6, V6, X4_2]; xn--2nd0990k..xn--eqb228b; [B2, B3, B5, B6, V6, A4_2]; ; # Ⴞ𐹨..ݽႯ +xn--2nd0990k..xn--eqb228bgzm; Ⴞ𐹨..\u077D\u200DႯ; [B2, B3, B5, B6, C2, V6, X4_2]; xn--2nd0990k..xn--eqb228bgzm; [B2, B3, B5, B6, C2, V6, A4_2]; ; # Ⴞ𐹨..ݽႯ +ⴞ𐹨。︒\u077D\u200Dⴏ; ⴞ𐹨.︒\u077D\u200Dⴏ; [B1, B5, B6, C2, V6]; xn--mlju223e.xn--eqb096jpgj9y7r; ; xn--mlju223e.xn--eqb053qjk7l; [B1, B5, B6, V6] # ⴞ𐹨.︒ݽⴏ +Ⴞ𐹨。︒\u077D\u200Dⴏ; Ⴞ𐹨.︒\u077D\u200Dⴏ; [B1, B5, B6, C2, V6]; xn--2nd0990k.xn--eqb096jpgj9y7r; ; xn--2nd0990k.xn--eqb053qjk7l; [B1, B5, B6, V6] # Ⴞ𐹨.︒ݽⴏ +xn--2nd0990k.xn--eqb053qjk7l; Ⴞ𐹨.︒\u077Dⴏ; [B1, B5, B6, V6]; xn--2nd0990k.xn--eqb053qjk7l; ; ; # Ⴞ𐹨.︒ݽⴏ +xn--2nd0990k.xn--eqb096jpgj9y7r; Ⴞ𐹨.︒\u077D\u200Dⴏ; [B1, B5, B6, C2, V6]; xn--2nd0990k.xn--eqb096jpgj9y7r; ; ; # Ⴞ𐹨.︒ݽⴏ +xn--mlju223e.xn--eqb053qjk7l; ⴞ𐹨.︒\u077Dⴏ; [B1, B5, B6, V6]; xn--mlju223e.xn--eqb053qjk7l; ; ; # ⴞ𐹨.︒ݽⴏ +xn--mlju223e.xn--eqb096jpgj9y7r; ⴞ𐹨.︒\u077D\u200Dⴏ; [B1, B5, B6, C2, V6]; xn--mlju223e.xn--eqb096jpgj9y7r; ; ; # ⴞ𐹨.︒ݽⴏ +xn--2nd0990k.xn--eqb228b583r; Ⴞ𐹨.︒\u077DႯ; [B1, B5, B6, V6]; xn--2nd0990k.xn--eqb228b583r; ; ; # Ⴞ𐹨.︒ݽႯ +xn--2nd0990k.xn--eqb228bgzmvp0t; Ⴞ𐹨.︒\u077D\u200DႯ; [B1, B5, B6, C2, V6]; xn--2nd0990k.xn--eqb228bgzmvp0t; ; ; # Ⴞ𐹨.︒ݽႯ +\u200CႦ𝟹。-\u20D2-\u07D1; \u200CႦ3.-\u20D2-\u07D1; [B1, C1, V3, V6]; xn--3-i0g939i.xn-----vue617w; ; xn--3-i0g.xn-----vue617w; [B1, V3, V6] # Ⴆ3.-⃒-ߑ +\u200CႦ3。-\u20D2-\u07D1; \u200CႦ3.-\u20D2-\u07D1; [B1, C1, V3, V6]; xn--3-i0g939i.xn-----vue617w; ; xn--3-i0g.xn-----vue617w; [B1, V3, V6] # Ⴆ3.-⃒-ߑ +\u200Cⴆ3。-\u20D2-\u07D1; \u200Cⴆ3.-\u20D2-\u07D1; [B1, C1, V3]; xn--3-rgnv99c.xn-----vue617w; ; xn--3-lvs.xn-----vue617w; [B1, V3] # ⴆ3.-⃒-ߑ +xn--3-lvs.xn-----vue617w; ⴆ3.-\u20D2-\u07D1; [B1, V3]; xn--3-lvs.xn-----vue617w; ; ; # ⴆ3.-⃒-ߑ +xn--3-rgnv99c.xn-----vue617w; \u200Cⴆ3.-\u20D2-\u07D1; [B1, C1, V3]; xn--3-rgnv99c.xn-----vue617w; ; ; # ⴆ3.-⃒-ߑ +xn--3-i0g.xn-----vue617w; Ⴆ3.-\u20D2-\u07D1; [B1, V3, V6]; xn--3-i0g.xn-----vue617w; ; ; # Ⴆ3.-⃒-ߑ +xn--3-i0g939i.xn-----vue617w; \u200CႦ3.-\u20D2-\u07D1; [B1, C1, V3, V6]; xn--3-i0g939i.xn-----vue617w; ; ; # Ⴆ3.-⃒-ߑ +\u200Cⴆ𝟹。-\u20D2-\u07D1; \u200Cⴆ3.-\u20D2-\u07D1; [B1, C1, V3]; xn--3-rgnv99c.xn-----vue617w; ; xn--3-lvs.xn-----vue617w; [B1, V3] # ⴆ3.-⃒-ߑ +箃Ⴡ-。≠-🤖; 箃Ⴡ-.≠-🤖; [V6]; xn----11g3013fy8x5m.xn----tfot873s; ; ; # 箃Ⴡ-.≠-🤖 +箃Ⴡ-。=\u0338-🤖; 箃Ⴡ-.≠-🤖; [V6]; xn----11g3013fy8x5m.xn----tfot873s; ; ; # 箃Ⴡ-.≠-🤖 +箃Ⴡ-。≠-🤖; 箃Ⴡ-.≠-🤖; [V6]; xn----11g3013fy8x5m.xn----tfot873s; ; ; # 箃Ⴡ-.≠-🤖 +箃Ⴡ-。=\u0338-🤖; 箃Ⴡ-.≠-🤖; [V6]; xn----11g3013fy8x5m.xn----tfot873s; ; ; # 箃Ⴡ-.≠-🤖 +箃ⴡ-。=\u0338-🤖; 箃ⴡ-.≠-🤖; [V6]; xn----4wsr321ay823p.xn----tfot873s; ; ; # 箃ⴡ-.≠-🤖 +箃ⴡ-。≠-🤖; 箃ⴡ-.≠-🤖; [V6]; xn----4wsr321ay823p.xn----tfot873s; ; ; # 箃ⴡ-.≠-🤖 +xn----4wsr321ay823p.xn----tfot873s; 箃ⴡ-.≠-🤖; [V6]; xn----4wsr321ay823p.xn----tfot873s; ; ; # 箃ⴡ-.≠-🤖 +xn----11g3013fy8x5m.xn----tfot873s; 箃Ⴡ-.≠-🤖; [V6]; xn----11g3013fy8x5m.xn----tfot873s; ; ; # 箃Ⴡ-.≠-🤖 +箃ⴡ-。=\u0338-🤖; 箃ⴡ-.≠-🤖; [V6]; xn----4wsr321ay823p.xn----tfot873s; ; ; # 箃ⴡ-.≠-🤖 +箃ⴡ-。≠-🤖; 箃ⴡ-.≠-🤖; [V6]; xn----4wsr321ay823p.xn----tfot873s; ; ; # 箃ⴡ-.≠-🤖 +\u07E5.\u06B5; ; ; xn--dtb.xn--okb; ; ; # ߥ.ڵ +xn--dtb.xn--okb; \u07E5.\u06B5; ; xn--dtb.xn--okb; ; ; # ߥ.ڵ +\u200C\u200D.𞤿; ; [B1, C1, C2]; xn--0ugc.xn--3e6h; ; .xn--3e6h; [A4_2] # .𞤿 +\u200C\u200D.𞤝; \u200C\u200D.𞤿; [B1, C1, C2]; xn--0ugc.xn--3e6h; ; .xn--3e6h; [A4_2] # .𞤿 +.xn--3e6h; .𞤿; [X4_2]; .xn--3e6h; [A4_2]; ; # .𞤿 +xn--0ugc.xn--3e6h; \u200C\u200D.𞤿; [B1, C1, C2]; xn--0ugc.xn--3e6h; ; ; # .𞤿 +xn--3e6h; 𞤿; ; xn--3e6h; ; ; # 𞤿 +𞤿; ; ; xn--3e6h; ; ; # 𞤿 +𞤝; 𞤿; ; xn--3e6h; ; ; # 𞤿 +🜑𐹧\u0639.ς𑍍蜹; ; [B1]; xn--4gb3736kk4zf.xn--3xa4248dy27d; ; xn--4gb3736kk4zf.xn--4xa2248dy27d; # 🜑𐹧ع.ς𑍍蜹 +🜑𐹧\u0639.Σ𑍍蜹; 🜑𐹧\u0639.σ𑍍蜹; [B1]; xn--4gb3736kk4zf.xn--4xa2248dy27d; ; ; # 🜑𐹧ع.σ𑍍蜹 +🜑𐹧\u0639.σ𑍍蜹; ; [B1]; xn--4gb3736kk4zf.xn--4xa2248dy27d; ; ; # 🜑𐹧ع.σ𑍍蜹 +xn--4gb3736kk4zf.xn--4xa2248dy27d; 🜑𐹧\u0639.σ𑍍蜹; [B1]; xn--4gb3736kk4zf.xn--4xa2248dy27d; ; ; # 🜑𐹧ع.σ𑍍蜹 +xn--4gb3736kk4zf.xn--3xa4248dy27d; 🜑𐹧\u0639.ς𑍍蜹; [B1]; xn--4gb3736kk4zf.xn--3xa4248dy27d; ; ; # 🜑𐹧ع.ς𑍍蜹 +ス\u0669.; ス\u0669.; [B5, B6, V6]; xn--iib777sp230oo708a.xn--7824e; ; ; # ス٩. +ス\u0669.; ; [B5, B6, V6]; xn--iib777sp230oo708a.xn--7824e; ; ; # ス٩. +xn--iib777sp230oo708a.xn--7824e; ス\u0669.; [B5, B6, V6]; xn--iib777sp230oo708a.xn--7824e; ; ; # ス٩. +𝪣.\u059A?\u06C2; 𝪣.\u059A?\u06C2; [B1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # 𝪣.֚?ۂ +𝪣.\u059A?\u06C1\u0654; 𝪣.\u059A?\u06C2; [B1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # 𝪣.֚?ۂ +𝪣.\u059A?\u06C2; ; [B1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # 𝪣.֚?ۂ +𝪣.\u059A?\u06C1\u0654; 𝪣.\u059A?\u06C2; [B1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # 𝪣.֚?ۂ +xn--8c3hu7971a.xn--?-wec30g; 𝪣.\u059A?\u06C2; [B1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # 𝪣.֚?ۂ +xn--8c3hu7971a.\u059A?\u06C2; 𝪣.\u059A?\u06C2; [B1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # 𝪣.֚?ۂ +xn--8c3hu7971a.\u059A?\u06C1\u0654; 𝪣.\u059A?\u06C2; [B1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # 𝪣.֚?ۂ +XN--8C3HU7971A.\u059A?\u06C1\u0654; 𝪣.\u059A?\u06C2; [B1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # 𝪣.֚?ۂ +XN--8C3HU7971A.\u059A?\u06C2; 𝪣.\u059A?\u06C2; [B1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # 𝪣.֚?ۂ +Xn--8c3hu7971a.\u059A?\u06C2; 𝪣.\u059A?\u06C2; [B1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # 𝪣.֚?ۂ +Xn--8c3hu7971a.\u059A?\u06C1\u0654; 𝪣.\u059A?\u06C2; [B1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # 𝪣.֚?ۂ +\u0660\u200C。\u0757; \u0660\u200C.\u0757; [B1, C1, V6]; xn--8hb852ke991q.xn--bpb; ; xn--8hb82030l.xn--bpb; [B1, V6] # ٠.ݗ +xn--8hb82030l.xn--bpb; \u0660.\u0757; [B1, V6]; xn--8hb82030l.xn--bpb; ; ; # ٠.ݗ +xn--8hb852ke991q.xn--bpb; \u0660\u200C.\u0757; [B1, C1, V6]; xn--8hb852ke991q.xn--bpb; ; ; # ٠.ݗ +\u103A\u200D\u200C。-\u200C; \u103A\u200D\u200C.-\u200C; [C1, V3, V5]; xn--bkd412fca.xn----sgn; ; xn--bkd.-; [V3, V5] # ်.- +xn--bkd.-; \u103A.-; [V3, V5]; xn--bkd.-; ; ; # ်.- +xn--bkd412fca.xn----sgn; \u103A\u200D\u200C.-\u200C; [C1, V3, V5]; xn--bkd412fca.xn----sgn; ; ; # ်.- +︒。\u1B44ᡉ; ︒.\u1B44ᡉ; [V5, V6]; xn--y86c.xn--87e93m; ; ; # ︒.᭄ᡉ +。。\u1B44ᡉ; ..\u1B44ᡉ; [V5, X4_2]; ..xn--87e93m; [V5, A4_2]; ; # ..᭄ᡉ +..xn--87e93m; ..\u1B44ᡉ; [V5, X4_2]; ..xn--87e93m; [V5, A4_2]; ; # ..᭄ᡉ +xn--y86c.xn--87e93m; ︒.\u1B44ᡉ; [V5, V6]; xn--y86c.xn--87e93m; ; ; # ︒.᭄ᡉ +\u0758ß。ጫᢊ\u0768𝟐; \u0758ß.ጫᢊ\u07682; [B2, B3, B5]; xn--zca724a.xn--2-b5c641gfmf; ; xn--ss-gke.xn--2-b5c641gfmf; # ݘß.ጫᢊݨ2 +\u0758ß。ጫᢊ\u07682; \u0758ß.ጫᢊ\u07682; [B2, B3, B5]; xn--zca724a.xn--2-b5c641gfmf; ; xn--ss-gke.xn--2-b5c641gfmf; # ݘß.ጫᢊݨ2 +\u0758SS。ጫᢊ\u07682; \u0758ss.ጫᢊ\u07682; [B2, B3, B5]; xn--ss-gke.xn--2-b5c641gfmf; ; ; # ݘss.ጫᢊݨ2 +\u0758ss。ጫᢊ\u07682; \u0758ss.ጫᢊ\u07682; [B2, B3, B5]; xn--ss-gke.xn--2-b5c641gfmf; ; ; # ݘss.ጫᢊݨ2 +xn--ss-gke.xn--2-b5c641gfmf; \u0758ss.ጫᢊ\u07682; [B2, B3, B5]; xn--ss-gke.xn--2-b5c641gfmf; ; ; # ݘss.ጫᢊݨ2 +xn--zca724a.xn--2-b5c641gfmf; \u0758ß.ጫᢊ\u07682; [B2, B3, B5]; xn--zca724a.xn--2-b5c641gfmf; ; ; # ݘß.ጫᢊݨ2 +\u0758SS。ጫᢊ\u0768𝟐; \u0758ss.ጫᢊ\u07682; [B2, B3, B5]; xn--ss-gke.xn--2-b5c641gfmf; ; ; # ݘss.ጫᢊݨ2 +\u0758ss。ጫᢊ\u0768𝟐; \u0758ss.ጫᢊ\u07682; [B2, B3, B5]; xn--ss-gke.xn--2-b5c641gfmf; ; ; # ݘss.ጫᢊݨ2 +\u0758Ss。ጫᢊ\u07682; \u0758ss.ጫᢊ\u07682; [B2, B3, B5]; xn--ss-gke.xn--2-b5c641gfmf; ; ; # ݘss.ጫᢊݨ2 +\u0758Ss。ጫᢊ\u0768𝟐; \u0758ss.ጫᢊ\u07682; [B2, B3, B5]; xn--ss-gke.xn--2-b5c641gfmf; ; ; # ݘss.ጫᢊݨ2 +\u07C3ᚲ.\u0902\u0353𝟚\u09CD; \u07C3ᚲ.\u0902\u03532\u09CD; [B1, B2, B3, V5, V6]; xn--esb067enh07a.xn--2-lgb874bjxa; ; ; # ߃ᚲ.ं͓2্ +\u07C3ᚲ.\u0902\u03532\u09CD; ; [B1, B2, B3, V5, V6]; xn--esb067enh07a.xn--2-lgb874bjxa; ; ; # ߃ᚲ.ं͓2্ +xn--esb067enh07a.xn--2-lgb874bjxa; \u07C3ᚲ.\u0902\u03532\u09CD; [B1, B2, B3, V5, V6]; xn--esb067enh07a.xn--2-lgb874bjxa; ; ; # ߃ᚲ.ं͓2্ +-\u1BAB︒\u200D.; ; [C2, V3, V6]; xn----qmlv7tw180a.xn--x50zy803a; ; xn----qml1407i.xn--x50zy803a; [V3, V6] # -᮫︒. +-\u1BAB。\u200D.; -\u1BAB.\u200D.; [C2, V3, V6]; xn----qml.xn--1ug.xn--x50zy803a; ; xn----qml..xn--x50zy803a; [V3, V6, A4_2] # -᮫.. +xn----qml..xn--x50zy803a; -\u1BAB..; [V3, V6, X4_2]; xn----qml..xn--x50zy803a; [V3, V6, A4_2]; ; # -᮫.. +xn----qml.xn--1ug.xn--x50zy803a; -\u1BAB.\u200D.; [C2, V3, V6]; xn----qml.xn--1ug.xn--x50zy803a; ; ; # -᮫.. +xn----qml1407i.xn--x50zy803a; -\u1BAB︒.; [V3, V6]; xn----qml1407i.xn--x50zy803a; ; ; # -᮫︒. +xn----qmlv7tw180a.xn--x50zy803a; -\u1BAB︒\u200D.; [C2, V3, V6]; xn----qmlv7tw180a.xn--x50zy803a; ; ; # -᮫︒. +.≯𞀆; ; [V6]; xn--t546e.xn--hdh5166o; ; ; # .≯𞀆 +.>\u0338𞀆; .≯𞀆; [V6]; xn--t546e.xn--hdh5166o; ; ; # .≯𞀆 +xn--t546e.xn--hdh5166o; .≯𞀆; [V6]; xn--t546e.xn--hdh5166o; ; ; # .≯𞀆 +-𑄳𐹩。; -𑄳𐹩.; [B1, V3, V6]; xn----p26i72em2894c.xn--zw6h; ; ; # -𑄳𐹩. +xn----p26i72em2894c.xn--zw6h; -𑄳𐹩.; [B1, V3, V6]; xn----p26i72em2894c.xn--zw6h; ; ; # -𑄳𐹩. +\u06B9.ᡳ\u115F; \u06B9.ᡳ\u115F; [V6]; xn--skb.xn--osd737a; ; ; # ڹ.ᡳ +\u06B9.ᡳ\u115F; ; [V6]; xn--skb.xn--osd737a; ; ; # ڹ.ᡳ +xn--skb.xn--osd737a; \u06B9.ᡳ\u115F; [V6]; xn--skb.xn--osd737a; ; ; # ڹ.ᡳ +㨛𘱎.︒𝟕\u0D01; 㨛𘱎.︒7\u0D01; [V6]; xn--mbm8237g.xn--7-7hf1526p; ; ; # 㨛𘱎.︒7ഁ +㨛𘱎.。7\u0D01; 㨛𘱎..7\u0D01; [X4_2]; xn--mbm8237g..xn--7-7hf; [A4_2]; ; # 㨛𘱎..7ഁ +xn--mbm8237g..xn--7-7hf; 㨛𘱎..7\u0D01; [X4_2]; xn--mbm8237g..xn--7-7hf; [A4_2]; ; # 㨛𘱎..7ഁ +xn--mbm8237g.xn--7-7hf1526p; 㨛𘱎.︒7\u0D01; [V6]; xn--mbm8237g.xn--7-7hf1526p; ; ; # 㨛𘱎.︒7ഁ +\u06DD-。\u2064𞤣≮; \u06DD-.𞤣≮; [B1, B3, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮ +\u06DD-。\u2064𞤣<\u0338; \u06DD-.𞤣≮; [B1, B3, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮ +\u06DD-。\u2064𞤣≮; \u06DD-.𞤣≮; [B1, B3, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮ +\u06DD-。\u2064𞤣<\u0338; \u06DD-.𞤣≮; [B1, B3, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮ +\u06DD-。\u2064𞤁<\u0338; \u06DD-.𞤣≮; [B1, B3, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮ +\u06DD-。\u2064𞤁≮; \u06DD-.𞤣≮; [B1, B3, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮ +xn----dxc06304e.xn--gdh5020pk5c; \u06DD-.𞤣≮; [B1, B3, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮ +\u06DD-。\u2064𞤁<\u0338; \u06DD-.𞤣≮; [B1, B3, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮ +\u06DD-。\u2064𞤁≮; \u06DD-.𞤣≮; [B1, B3, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮ +ß\u200C\uAAF6ᢥ.⊶ჁႶ; ß\u200C\uAAF6ᢥ.⊶ჁႶ; [C1, V6]; xn--zca682johfi89m.xn--undv409k; ; xn--ss-4epx629f.xn--undv409k; [V6] # ß꫶ᢥ.⊶ჁႶ +ß\u200C\uAAF6ᢥ.⊶ჁႶ; ; [C1, V6]; xn--zca682johfi89m.xn--undv409k; ; xn--ss-4epx629f.xn--undv409k; [V6] # ß꫶ᢥ.⊶ჁႶ +ß\u200C\uAAF6ᢥ.⊶ⴡⴖ; ; [C1]; xn--zca682johfi89m.xn--ifh802b6a; ; xn--ss-4epx629f.xn--ifh802b6a; [] # ß꫶ᢥ.⊶ⴡⴖ +SS\u200C\uAAF6ᢥ.⊶ჁႶ; ss\u200C\uAAF6ᢥ.⊶ჁႶ; [C1, V6]; xn--ss-4ep585bkm5p.xn--undv409k; ; xn--ss-4epx629f.xn--undv409k; [V6] # ss꫶ᢥ.⊶ჁႶ +ss\u200C\uAAF6ᢥ.⊶ⴡⴖ; ; [C1]; xn--ss-4ep585bkm5p.xn--ifh802b6a; ; xn--ss-4epx629f.xn--ifh802b6a; [] # ss꫶ᢥ.⊶ⴡⴖ +Ss\u200C\uAAF6ᢥ.⊶Ⴡⴖ; ss\u200C\uAAF6ᢥ.⊶Ⴡⴖ; [C1, V6]; xn--ss-4ep585bkm5p.xn--5nd703gyrh; ; xn--ss-4epx629f.xn--5nd703gyrh; [V6] # ss꫶ᢥ.⊶Ⴡⴖ +xn--ss-4epx629f.xn--5nd703gyrh; ss\uAAF6ᢥ.⊶Ⴡⴖ; [V6]; xn--ss-4epx629f.xn--5nd703gyrh; ; ; # ss꫶ᢥ.⊶Ⴡⴖ +xn--ss-4ep585bkm5p.xn--5nd703gyrh; ss\u200C\uAAF6ᢥ.⊶Ⴡⴖ; [C1, V6]; xn--ss-4ep585bkm5p.xn--5nd703gyrh; ; ; # ss꫶ᢥ.⊶Ⴡⴖ +xn--ss-4epx629f.xn--ifh802b6a; ss\uAAF6ᢥ.⊶ⴡⴖ; ; xn--ss-4epx629f.xn--ifh802b6a; ; ; # ss꫶ᢥ.⊶ⴡⴖ +ss\uAAF6ᢥ.⊶ⴡⴖ; ; ; xn--ss-4epx629f.xn--ifh802b6a; ; ; # ss꫶ᢥ.⊶ⴡⴖ +SS\uAAF6ᢥ.⊶ჁႶ; ss\uAAF6ᢥ.⊶ჁႶ; [V6]; xn--ss-4epx629f.xn--undv409k; ; ; # ss꫶ᢥ.⊶ჁႶ +Ss\uAAF6ᢥ.⊶Ⴡⴖ; ss\uAAF6ᢥ.⊶Ⴡⴖ; [V6]; xn--ss-4epx629f.xn--5nd703gyrh; ; ; # ss꫶ᢥ.⊶Ⴡⴖ +xn--ss-4epx629f.xn--undv409k; ss\uAAF6ᢥ.⊶ჁႶ; [V6]; xn--ss-4epx629f.xn--undv409k; ; ; # ss꫶ᢥ.⊶ჁႶ +xn--ss-4ep585bkm5p.xn--ifh802b6a; ss\u200C\uAAF6ᢥ.⊶ⴡⴖ; [C1]; xn--ss-4ep585bkm5p.xn--ifh802b6a; ; ; # ss꫶ᢥ.⊶ⴡⴖ +xn--ss-4ep585bkm5p.xn--undv409k; ss\u200C\uAAF6ᢥ.⊶ჁႶ; [C1, V6]; xn--ss-4ep585bkm5p.xn--undv409k; ; ; # ss꫶ᢥ.⊶ჁႶ +xn--zca682johfi89m.xn--ifh802b6a; ß\u200C\uAAF6ᢥ.⊶ⴡⴖ; [C1]; xn--zca682johfi89m.xn--ifh802b6a; ; ; # ß꫶ᢥ.⊶ⴡⴖ +xn--zca682johfi89m.xn--undv409k; ß\u200C\uAAF6ᢥ.⊶ჁႶ; [C1, V6]; xn--zca682johfi89m.xn--undv409k; ; ; # ß꫶ᢥ.⊶ჁႶ +ß\u200C\uAAF6ᢥ.⊶ⴡⴖ; ß\u200C\uAAF6ᢥ.⊶ⴡⴖ; [C1]; xn--zca682johfi89m.xn--ifh802b6a; ; xn--ss-4epx629f.xn--ifh802b6a; [] # ß꫶ᢥ.⊶ⴡⴖ +SS\u200C\uAAF6ᢥ.⊶ჁႶ; ss\u200C\uAAF6ᢥ.⊶ჁႶ; [C1, V6]; xn--ss-4ep585bkm5p.xn--undv409k; ; xn--ss-4epx629f.xn--undv409k; [V6] # ss꫶ᢥ.⊶ჁႶ +ss\u200C\uAAF6ᢥ.⊶ⴡⴖ; ss\u200C\uAAF6ᢥ.⊶ⴡⴖ; [C1]; xn--ss-4ep585bkm5p.xn--ifh802b6a; ; xn--ss-4epx629f.xn--ifh802b6a; [] # ss꫶ᢥ.⊶ⴡⴖ +Ss\u200C\uAAF6ᢥ.⊶Ⴡⴖ; ss\u200C\uAAF6ᢥ.⊶Ⴡⴖ; [C1, V6]; xn--ss-4ep585bkm5p.xn--5nd703gyrh; ; xn--ss-4epx629f.xn--5nd703gyrh; [V6] # ss꫶ᢥ.⊶Ⴡⴖ +\u200D。ς; \u200D.ς; [C2, V6]; xn--1ug.xn--3xa44344p; ; .xn--4xa24344p; [V6, A4_2] # .ς +\u200D。Σ; \u200D.σ; [C2, V6]; xn--1ug.xn--4xa24344p; ; .xn--4xa24344p; [V6, A4_2] # .σ +\u200D。σ; \u200D.σ; [C2, V6]; xn--1ug.xn--4xa24344p; ; .xn--4xa24344p; [V6, A4_2] # .σ +.xn--4xa24344p; .σ; [V6, X4_2]; .xn--4xa24344p; [V6, A4_2]; ; # .σ +xn--1ug.xn--4xa24344p; \u200D.σ; [C2, V6]; xn--1ug.xn--4xa24344p; ; ; # .σ +xn--1ug.xn--3xa44344p; \u200D.ς; [C2, V6]; xn--1ug.xn--3xa44344p; ; ; # .ς +ß.\u0751\u200D𞤛-; ß.\u0751\u200D𞤽-; [B2, B3, C2, V3, V6]; xn--zca5423w.xn----z3c011q9513b; ; xn--ss-2722a.xn----z3c03218a; [B2, B3, V3, V6] # ß.ݑ𞤽- +ß.\u0751\u200D𞤽-; ; [B2, B3, C2, V3, V6]; xn--zca5423w.xn----z3c011q9513b; ; xn--ss-2722a.xn----z3c03218a; [B2, B3, V3, V6] # ß.ݑ𞤽- +SS.\u0751\u200D𞤛-; ss.\u0751\u200D𞤽-; [B2, B3, C2, V3, V6]; xn--ss-2722a.xn----z3c011q9513b; ; xn--ss-2722a.xn----z3c03218a; [B2, B3, V3, V6] # ss.ݑ𞤽- +ss.\u0751\u200D𞤽-; ; [B2, B3, C2, V3, V6]; xn--ss-2722a.xn----z3c011q9513b; ; xn--ss-2722a.xn----z3c03218a; [B2, B3, V3, V6] # ss.ݑ𞤽- +Ss.\u0751\u200D𞤽-; ss.\u0751\u200D𞤽-; [B2, B3, C2, V3, V6]; xn--ss-2722a.xn----z3c011q9513b; ; xn--ss-2722a.xn----z3c03218a; [B2, B3, V3, V6] # ss.ݑ𞤽- +xn--ss-2722a.xn----z3c03218a; ss.\u0751𞤽-; [B2, B3, V3, V6]; xn--ss-2722a.xn----z3c03218a; ; ; # ss.ݑ𞤽- +xn--ss-2722a.xn----z3c011q9513b; ss.\u0751\u200D𞤽-; [B2, B3, C2, V3, V6]; xn--ss-2722a.xn----z3c011q9513b; ; ; # ss.ݑ𞤽- +xn--zca5423w.xn----z3c011q9513b; ß.\u0751\u200D𞤽-; [B2, B3, C2, V3, V6]; xn--zca5423w.xn----z3c011q9513b; ; ; # ß.ݑ𞤽- +ss.\u0751\u200D𞤛-; ss.\u0751\u200D𞤽-; [B2, B3, C2, V3, V6]; xn--ss-2722a.xn----z3c011q9513b; ; xn--ss-2722a.xn----z3c03218a; [B2, B3, V3, V6] # ss.ݑ𞤽- +Ss.\u0751\u200D𞤛-; ss.\u0751\u200D𞤽-; [B2, B3, C2, V3, V6]; xn--ss-2722a.xn----z3c011q9513b; ; xn--ss-2722a.xn----z3c03218a; [B2, B3, V3, V6] # ss.ݑ𞤽- +𑘽\u200D𞤧.𐹧-; 𑘽\u200D𞤧.𐹧-; [B1, C2, V3, V5, V6]; xn--1ugz808gdimf.xn----k26iq1483f; ; xn--qb2ds317a.xn----k26iq1483f; [B1, V3, V5, V6] # 𑘽𞤧.𐹧- +𑘽\u200D𞤧.𐹧-; ; [B1, C2, V3, V5, V6]; xn--1ugz808gdimf.xn----k26iq1483f; ; xn--qb2ds317a.xn----k26iq1483f; [B1, V3, V5, V6] # 𑘽𞤧.𐹧- +𑘽\u200D𞤅.𐹧-; 𑘽\u200D𞤧.𐹧-; [B1, C2, V3, V5, V6]; xn--1ugz808gdimf.xn----k26iq1483f; ; xn--qb2ds317a.xn----k26iq1483f; [B1, V3, V5, V6] # 𑘽𞤧.𐹧- +xn--qb2ds317a.xn----k26iq1483f; 𑘽𞤧.𐹧-; [B1, V3, V5, V6]; xn--qb2ds317a.xn----k26iq1483f; ; ; # 𑘽𞤧.𐹧- +xn--1ugz808gdimf.xn----k26iq1483f; 𑘽\u200D𞤧.𐹧-; [B1, C2, V3, V5, V6]; xn--1ugz808gdimf.xn----k26iq1483f; ; ; # 𑘽𞤧.𐹧- +𑘽\u200D𞤅.𐹧-; 𑘽\u200D𞤧.𐹧-; [B1, C2, V3, V5, V6]; xn--1ugz808gdimf.xn----k26iq1483f; ; xn--qb2ds317a.xn----k26iq1483f; [B1, V3, V5, V6] # 𑘽𞤧.𐹧- +⒒𑓀.-; ; [V3, V6]; xn--3shy698frsu9dt1me.xn----x310m; ; ; # ⒒𑓀.- +11.𑓀.-; ; [V3, V6]; 11.xn--uz1d59632bxujd.xn----x310m; ; ; # 11.𑓀.- +11.xn--uz1d59632bxujd.xn----x310m; 11.𑓀.-; [V3, V6]; 11.xn--uz1d59632bxujd.xn----x310m; ; ; # 11.𑓀.- +xn--3shy698frsu9dt1me.xn----x310m; ⒒𑓀.-; [V3, V6]; xn--3shy698frsu9dt1me.xn----x310m; ; ; # ⒒𑓀.- +-。\u200D; -.\u200D; [C2, V3]; -.xn--1ug; ; -.; [V3] # -. +-。\u200D; -.\u200D; [C2, V3]; -.xn--1ug; ; -.; [V3] # -. +-.; ; [V3]; ; ; ; # -. +-.xn--1ug; -.\u200D; [C2, V3]; -.xn--1ug; ; ; # -. +≮ᡬ.ς¹-?; ≮ᡬ.ς1-?; [V6]; xn--88e732c.xn--1-?-lzc; ; xn--88e732c.xn--1-?-pzc; # ≮ᡬ.ς1-? +<\u0338ᡬ.ς¹-?; ≮ᡬ.ς1-?; [V6]; xn--88e732c.xn--1-?-lzc; ; xn--88e732c.xn--1-?-pzc; # ≮ᡬ.ς1-? +≮ᡬ.ς1-?; ; [V6]; xn--88e732c.xn--1-?-lzc; ; xn--88e732c.xn--1-?-pzc; # ≮ᡬ.ς1-? +<\u0338ᡬ.ς1-?; ≮ᡬ.ς1-?; [V6]; xn--88e732c.xn--1-?-lzc; ; xn--88e732c.xn--1-?-pzc; # ≮ᡬ.ς1-? +<\u0338ᡬ.Σ1-?; ≮ᡬ.σ1-?; [V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-? +≮ᡬ.Σ1-?; ≮ᡬ.σ1-?; [V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-? +≮ᡬ.σ1-?; ; [V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-? +<\u0338ᡬ.σ1-?; ≮ᡬ.σ1-?; [V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-? +xn--88e732c.xn--1-?-pzc; ≮ᡬ.σ1-?; [V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-? +xn--88e732c.xn--1-?-lzc; ≮ᡬ.ς1-?; [V6]; xn--88e732c.xn--1-?-lzc; ; ; # ≮ᡬ.ς1-? +<\u0338ᡬ.Σ¹-?; ≮ᡬ.σ1-?; [V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-? +≮ᡬ.Σ¹-?; ≮ᡬ.σ1-?; [V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-? +≮ᡬ.σ¹-?; ≮ᡬ.σ1-?; [V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-? +<\u0338ᡬ.σ¹-?; ≮ᡬ.σ1-?; [V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-? +xn--88e732c.σ1-?; ≮ᡬ.σ1-?; [V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-? +XN--88E732C.Σ1-?; ≮ᡬ.σ1-?; [V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-? +xn--88e732c.ς1-?; ≮ᡬ.ς1-?; [V6]; xn--88e732c.xn--1-?-lzc; ; xn--88e732c.xn--1-?-pzc; # ≮ᡬ.ς1-? +Xn--88e732c.ς1-?; ≮ᡬ.ς1-?; [V6]; xn--88e732c.xn--1-?-lzc; ; xn--88e732c.xn--1-?-pzc; # ≮ᡬ.ς1-? +Xn--88e732c.σ1-?; ≮ᡬ.σ1-?; [V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-? +ቬ。𐨬𝟠; ቬ.𐨬8; [V6]; xn--d0d41273c887z.xn--8-ob5i; ; ; # ቬ.𐨬8 +ቬ。𐨬8; ቬ.𐨬8; [V6]; xn--d0d41273c887z.xn--8-ob5i; ; ; # ቬ.𐨬8 +xn--d0d41273c887z.xn--8-ob5i; ቬ.𐨬8; [V6]; xn--d0d41273c887z.xn--8-ob5i; ; ; # ቬ.𐨬8 +。蔫\u0766; .蔫\u0766; [B5, B6, V6]; xn--389c.xn--qpb7055d; ; ; # .蔫ݦ +xn--389c.xn--qpb7055d; .蔫\u0766; [B5, B6, V6]; xn--389c.xn--qpb7055d; ; ; # .蔫ݦ +₃。ꡚ𛇑󠄳\u0647; 3.ꡚ𛇑\u0647; [B5, B6, V6]; xn--3-ep59g.xn--jhb5904fcp0h; ; ; # 3.ꡚ𛇑ه +3。ꡚ𛇑󠄳\u0647; 3.ꡚ𛇑\u0647; [B5, B6, V6]; xn--3-ep59g.xn--jhb5904fcp0h; ; ; # 3.ꡚ𛇑ه +xn--3-ep59g.xn--jhb5904fcp0h; 3.ꡚ𛇑\u0647; [B5, B6, V6]; xn--3-ep59g.xn--jhb5904fcp0h; ; ; # 3.ꡚ𛇑ه +蓸\u0642≠.ß; ; [B5, B6]; xn--ehb015lnt1e.xn--zca; ; xn--ehb015lnt1e.ss; # 蓸ق≠.ß +蓸\u0642=\u0338.ß; 蓸\u0642≠.ß; [B5, B6]; xn--ehb015lnt1e.xn--zca; ; xn--ehb015lnt1e.ss; # 蓸ق≠.ß +蓸\u0642=\u0338.SS; 蓸\u0642≠.ss; [B5, B6]; xn--ehb015lnt1e.ss; ; ; # 蓸ق≠.ss +蓸\u0642≠.SS; 蓸\u0642≠.ss; [B5, B6]; xn--ehb015lnt1e.ss; ; ; # 蓸ق≠.ss +蓸\u0642≠.ss; ; [B5, B6]; xn--ehb015lnt1e.ss; ; ; # 蓸ق≠.ss +蓸\u0642=\u0338.ss; 蓸\u0642≠.ss; [B5, B6]; xn--ehb015lnt1e.ss; ; ; # 蓸ق≠.ss +蓸\u0642=\u0338.Ss; 蓸\u0642≠.ss; [B5, B6]; xn--ehb015lnt1e.ss; ; ; # 蓸ق≠.ss +蓸\u0642≠.Ss; 蓸\u0642≠.ss; [B5, B6]; xn--ehb015lnt1e.ss; ; ; # 蓸ق≠.ss +xn--ehb015lnt1e.ss; 蓸\u0642≠.ss; [B5, B6]; xn--ehb015lnt1e.ss; ; ; # 蓸ق≠.ss +xn--ehb015lnt1e.xn--zca; 蓸\u0642≠.ß; [B5, B6]; xn--ehb015lnt1e.xn--zca; ; ; # 蓸ق≠.ß +\u084E\u067A\u0DD3⒊.𐹹\u200C; ; [B1, C1, V6]; xn--zib94gfziuq1a.xn--0ug3205g7eyf3c96h; ; xn--zib94gfziuq1a.xn--xo0dw109an237f; [B1, V6] # ࡎٺී⒊.𐹹 +\u084E\u067A\u0DD33..𐹹\u200C; ; [B1, C1, V6, X4_2]; xn--3-prc71ls9j..xn--0ug3205g7eyf3c96h; [B1, C1, V6, A4_2]; xn--3-prc71ls9j..xn--xo0dw109an237f; [B1, V6, A4_2] # ࡎٺී3..𐹹 +xn--3-prc71ls9j..xn--xo0dw109an237f; \u084E\u067A\u0DD33..𐹹; [B1, V6, X4_2]; xn--3-prc71ls9j..xn--xo0dw109an237f; [B1, V6, A4_2]; ; # ࡎٺී3..𐹹 +xn--3-prc71ls9j..xn--0ug3205g7eyf3c96h; \u084E\u067A\u0DD33..𐹹\u200C; [B1, C1, V6, X4_2]; xn--3-prc71ls9j..xn--0ug3205g7eyf3c96h; [B1, C1, V6, A4_2]; ; # ࡎٺී3..𐹹 +xn--zib94gfziuq1a.xn--xo0dw109an237f; \u084E\u067A\u0DD3⒊.𐹹; [B1, V6]; xn--zib94gfziuq1a.xn--xo0dw109an237f; ; ; # ࡎٺී⒊.𐹹 +xn--zib94gfziuq1a.xn--0ug3205g7eyf3c96h; \u084E\u067A\u0DD3⒊.𐹹\u200C; [B1, C1, V6]; xn--zib94gfziuq1a.xn--0ug3205g7eyf3c96h; ; ; # ࡎٺී⒊.𐹹 +ς\u200D-.Ⴣ𦟙; ; [C2, V3, V6]; xn----xmb348s.xn--7nd64871a; ; xn----zmb.xn--7nd64871a; [V3, V6] # ς-.Ⴣ𦟙 +ς\u200D-.ⴣ𦟙; ; [C2, V3]; xn----xmb348s.xn--rlj2573p; ; xn----zmb.xn--rlj2573p; [V3] # ς-.ⴣ𦟙 +Σ\u200D-.Ⴣ𦟙; σ\u200D-.Ⴣ𦟙; [C2, V3, V6]; xn----zmb048s.xn--7nd64871a; ; xn----zmb.xn--7nd64871a; [V3, V6] # σ-.Ⴣ𦟙 +σ\u200D-.ⴣ𦟙; ; [C2, V3]; xn----zmb048s.xn--rlj2573p; ; xn----zmb.xn--rlj2573p; [V3] # σ-.ⴣ𦟙 +xn----zmb.xn--rlj2573p; σ-.ⴣ𦟙; [V3]; xn----zmb.xn--rlj2573p; ; ; # σ-.ⴣ𦟙 +xn----zmb048s.xn--rlj2573p; σ\u200D-.ⴣ𦟙; [C2, V3]; xn----zmb048s.xn--rlj2573p; ; ; # σ-.ⴣ𦟙 +xn----zmb.xn--7nd64871a; σ-.Ⴣ𦟙; [V3, V6]; xn----zmb.xn--7nd64871a; ; ; # σ-.Ⴣ𦟙 +xn----zmb048s.xn--7nd64871a; σ\u200D-.Ⴣ𦟙; [C2, V3, V6]; xn----zmb048s.xn--7nd64871a; ; ; # σ-.Ⴣ𦟙 +xn----xmb348s.xn--rlj2573p; ς\u200D-.ⴣ𦟙; [C2, V3]; xn----xmb348s.xn--rlj2573p; ; ; # ς-.ⴣ𦟙 +xn----xmb348s.xn--7nd64871a; ς\u200D-.Ⴣ𦟙; [C2, V3, V6]; xn----xmb348s.xn--7nd64871a; ; ; # ς-.Ⴣ𦟙 +≠。🞳𝟲; ≠.🞳6; ; xn--1ch.xn--6-dl4s; ; ; # ≠.🞳6 +=\u0338。🞳𝟲; ≠.🞳6; ; xn--1ch.xn--6-dl4s; ; ; # ≠.🞳6 +≠。🞳6; ≠.🞳6; ; xn--1ch.xn--6-dl4s; ; ; # ≠.🞳6 +=\u0338。🞳6; ≠.🞳6; ; xn--1ch.xn--6-dl4s; ; ; # ≠.🞳6 +xn--1ch.xn--6-dl4s; ≠.🞳6; ; xn--1ch.xn--6-dl4s; ; ; # ≠.🞳6 +≠.🞳6; ; ; xn--1ch.xn--6-dl4s; ; ; # ≠.🞳6 +=\u0338.🞳6; ≠.🞳6; ; xn--1ch.xn--6-dl4s; ; ; # ≠.🞳6 +.蠔; ; [V6]; xn--g747d.xn--xl2a; ; ; # .蠔 +xn--g747d.xn--xl2a; .蠔; [V6]; xn--g747d.xn--xl2a; ; ; # .蠔 +\u08E6\u200D.뼽; \u08E6\u200D.뼽; [C2, V5]; xn--p0b869i.xn--e43b; ; xn--p0b.xn--e43b; [V5] # ࣦ.뼽 +\u08E6\u200D.뼽; \u08E6\u200D.뼽; [C2, V5]; xn--p0b869i.xn--e43b; ; xn--p0b.xn--e43b; [V5] # ࣦ.뼽 +\u08E6\u200D.뼽; ; [C2, V5]; xn--p0b869i.xn--e43b; ; xn--p0b.xn--e43b; [V5] # ࣦ.뼽 +\u08E6\u200D.뼽; \u08E6\u200D.뼽; [C2, V5]; xn--p0b869i.xn--e43b; ; xn--p0b.xn--e43b; [V5] # ࣦ.뼽 +xn--p0b.xn--e43b; \u08E6.뼽; [V5]; xn--p0b.xn--e43b; ; ; # ࣦ.뼽 +xn--p0b869i.xn--e43b; \u08E6\u200D.뼽; [C2, V5]; xn--p0b869i.xn--e43b; ; ; # ࣦ.뼽 +₇\u0BCD\u06D2。👖\u0675-; 7\u0BCD\u06D2.👖\u0627\u0674-; [B1, V6]; xn--7-rwc839aj3073c.xn----ymc5uv818oghka; ; ; # 7்ے.👖اٴ- +7\u0BCD\u06D2。👖\u0627\u0674-; 7\u0BCD\u06D2.👖\u0627\u0674-; [B1, V6]; xn--7-rwc839aj3073c.xn----ymc5uv818oghka; ; ; # 7்ے.👖اٴ- +xn--7-rwc839aj3073c.xn----ymc5uv818oghka; 7\u0BCD\u06D2.👖\u0627\u0674-; [B1, V6]; xn--7-rwc839aj3073c.xn----ymc5uv818oghka; ; ; # 7்ے.👖اٴ- +-。\u077B; -.\u077B; [B1, V3]; -.xn--cqb; ; ; # -.ݻ +-。\u077B; -.\u077B; [B1, V3]; -.xn--cqb; ; ; # -.ݻ +-.xn--cqb; -.\u077B; [B1, V3]; -.xn--cqb; ; ; # -.ݻ +𑇌。-⒈ꡏ\u072B; 𑇌.-⒈ꡏ\u072B; [B1, V3, V5, V6]; xn--8d1dg030h.xn----u1c466tp10j; ; ; # 𑇌.-⒈ꡏܫ +𑇌。-1.ꡏ\u072B; 𑇌.-1.ꡏ\u072B; [B1, B5, B6, V3, V5, V6]; xn--8d1dg030h.-1.xn--1nb7163f; ; ; # 𑇌.-1.ꡏܫ +xn--8d1dg030h.-1.xn--1nb7163f; 𑇌.-1.ꡏ\u072B; [B1, B5, B6, V3, V5, V6]; xn--8d1dg030h.-1.xn--1nb7163f; ; ; # 𑇌.-1.ꡏܫ +xn--8d1dg030h.xn----u1c466tp10j; 𑇌.-⒈ꡏ\u072B; [B1, V3, V5, V6]; xn--8d1dg030h.xn----u1c466tp10j; ; ; # 𑇌.-⒈ꡏܫ +璛\u1734\u06AF.-; ; [B1, B5, B6, V3]; xn--ikb175frt4e.-; ; ; # 璛᜴گ.- +xn--ikb175frt4e.-; 璛\u1734\u06AF.-; [B1, B5, B6, V3]; xn--ikb175frt4e.-; ; ; # 璛᜴گ.- +󠆰\u08A1\u0A4D샕.𐹲휁; \u08A1\u0A4D샕.𐹲휁; [B1, B2, B3]; xn--qyb07fj857a.xn--728bv72h; ; ; # ࢡ੍샕.𐹲휁 +󠆰\u08A1\u0A4D샕.𐹲휁; \u08A1\u0A4D샕.𐹲휁; [B1, B2, B3]; xn--qyb07fj857a.xn--728bv72h; ; ; # ࢡ੍샕.𐹲휁 +󠆰\u08A1\u0A4D샕.𐹲휁; \u08A1\u0A4D샕.𐹲휁; [B1, B2, B3]; xn--qyb07fj857a.xn--728bv72h; ; ; # ࢡ੍샕.𐹲휁 +󠆰\u08A1\u0A4D샕.𐹲휁; \u08A1\u0A4D샕.𐹲휁; [B1, B2, B3]; xn--qyb07fj857a.xn--728bv72h; ; ; # ࢡ੍샕.𐹲휁 +xn--qyb07fj857a.xn--728bv72h; \u08A1\u0A4D샕.𐹲휁; [B1, B2, B3]; xn--qyb07fj857a.xn--728bv72h; ; ; # ࢡ੍샕.𐹲휁 +.; .; [V6]; xn--pr3x.xn--rv7w; ; ; # . +.; ; [V6]; xn--pr3x.xn--rv7w; ; ; # . +xn--pr3x.xn--rv7w; .; [V6]; xn--pr3x.xn--rv7w; ; ; # . +\u067D𞥕。𑑂𞤶Ⴍ-; \u067D𞥕.𑑂𞤶Ⴍ-; [B1, V3, V5, V6]; xn--2ib0338v.xn----w0g2740ro9vg; ; ; # ٽ𞥕.𑑂𞤶Ⴍ- +\u067D𞥕。𑑂𞤶Ⴍ-; \u067D𞥕.𑑂𞤶Ⴍ-; [B1, V3, V5, V6]; xn--2ib0338v.xn----w0g2740ro9vg; ; ; # ٽ𞥕.𑑂𞤶Ⴍ- +\u067D𞥕。𑑂𞤶ⴍ-; \u067D𞥕.𑑂𞤶ⴍ-; [B1, V3, V5]; xn--2ib0338v.xn----zvs0199fo91g; ; ; # ٽ𞥕.𑑂𞤶ⴍ- +\u067D𞥕。𑑂𞤔Ⴍ-; \u067D𞥕.𑑂𞤶Ⴍ-; [B1, V3, V5, V6]; xn--2ib0338v.xn----w0g2740ro9vg; ; ; # ٽ𞥕.𑑂𞤶Ⴍ- +\u067D𞥕。𑑂𞤔ⴍ-; \u067D𞥕.𑑂𞤶ⴍ-; [B1, V3, V5]; xn--2ib0338v.xn----zvs0199fo91g; ; ; # ٽ𞥕.𑑂𞤶ⴍ- +xn--2ib0338v.xn----zvs0199fo91g; \u067D𞥕.𑑂𞤶ⴍ-; [B1, V3, V5]; xn--2ib0338v.xn----zvs0199fo91g; ; ; # ٽ𞥕.𑑂𞤶ⴍ- +xn--2ib0338v.xn----w0g2740ro9vg; \u067D𞥕.𑑂𞤶Ⴍ-; [B1, V3, V5, V6]; xn--2ib0338v.xn----w0g2740ro9vg; ; ; # ٽ𞥕.𑑂𞤶Ⴍ- +\u067D𞥕。𑑂𞤶ⴍ-; \u067D𞥕.𑑂𞤶ⴍ-; [B1, V3, V5]; xn--2ib0338v.xn----zvs0199fo91g; ; ; # ٽ𞥕.𑑂𞤶ⴍ- +\u067D𞥕。𑑂𞤔Ⴍ-; \u067D𞥕.𑑂𞤶Ⴍ-; [B1, V3, V5, V6]; xn--2ib0338v.xn----w0g2740ro9vg; ; ; # ٽ𞥕.𑑂𞤶Ⴍ- +\u067D𞥕。𑑂𞤔ⴍ-; \u067D𞥕.𑑂𞤶ⴍ-; [B1, V3, V5]; xn--2ib0338v.xn----zvs0199fo91g; ; ; # ٽ𞥕.𑑂𞤶ⴍ- +。₄Ⴋ; .4Ⴋ; [V6]; xn--039c42bq865a.xn--4-t0g49302fnrzm; ; ; # .4Ⴋ +。4Ⴋ; .4Ⴋ; [V6]; xn--039c42bq865a.xn--4-t0g49302fnrzm; ; ; # .4Ⴋ +。4ⴋ; .4ⴋ; [V6]; xn--039c42bq865a.xn--4-wvs27840bnrzm; ; ; # .4ⴋ +xn--039c42bq865a.xn--4-wvs27840bnrzm; .4ⴋ; [V6]; xn--039c42bq865a.xn--4-wvs27840bnrzm; ; ; # .4ⴋ +xn--039c42bq865a.xn--4-t0g49302fnrzm; .4Ⴋ; [V6]; xn--039c42bq865a.xn--4-t0g49302fnrzm; ; ; # .4Ⴋ +。₄ⴋ; .4ⴋ; [V6]; xn--039c42bq865a.xn--4-wvs27840bnrzm; ; ; # .4ⴋ +4\u06BD︒.≠; ; [B1, V6]; xn--4-kvc5601q2h50i.xn--1ch; ; ; # 4ڽ︒.≠ +4\u06BD︒.=\u0338; 4\u06BD︒.≠; [B1, V6]; xn--4-kvc5601q2h50i.xn--1ch; ; ; # 4ڽ︒.≠ +4\u06BD。.≠; 4\u06BD..≠; [B1, V6]; xn--4-kvc.xn--5136e.xn--1ch; ; ; # 4ڽ..≠ +4\u06BD。.=\u0338; 4\u06BD..≠; [B1, V6]; xn--4-kvc.xn--5136e.xn--1ch; ; ; # 4ڽ..≠ +xn--4-kvc.xn--5136e.xn--1ch; 4\u06BD..≠; [B1, V6]; xn--4-kvc.xn--5136e.xn--1ch; ; ; # 4ڽ..≠ +xn--4-kvc5601q2h50i.xn--1ch; 4\u06BD︒.≠; [B1, V6]; xn--4-kvc5601q2h50i.xn--1ch; ; ; # 4ڽ︒.≠ +𝟓。\u06D7; 5.\u06D7; [V5]; 5.xn--nlb; ; ; # 5.ۗ +5。\u06D7; 5.\u06D7; [V5]; 5.xn--nlb; ; ; # 5.ۗ +5.xn--nlb; 5.\u06D7; [V5]; 5.xn--nlb; ; ; # 5.ۗ +\u200C.⾕; \u200C.谷; [C1, V6]; xn--0ug26167i.xn--6g3a; ; xn--i183d.xn--6g3a; [V6] # .谷 +\u200C.谷; ; [C1, V6]; xn--0ug26167i.xn--6g3a; ; xn--i183d.xn--6g3a; [V6] # .谷 +xn--i183d.xn--6g3a; .谷; [V6]; xn--i183d.xn--6g3a; ; ; # .谷 +xn--0ug26167i.xn--6g3a; \u200C.谷; [C1, V6]; xn--0ug26167i.xn--6g3a; ; ; # .谷 +︒\u200D.-\u073C\u200C; ; [C1, C2, V3, V6]; xn--1ug1658ftw26f.xn----t2c071q; ; xn--y86c71305c.xn----t2c; [V3, V6] # ︒.-ܼ +。\u200D.-\u073C\u200C; .\u200D.-\u073C\u200C; [C1, C2, V3, V6, X4_2]; .xn--1ug05310k.xn----t2c071q; [C1, C2, V3, V6, A4_2]; .xn--hh50e.xn----t2c; [V3, V6, A4_2] # ..-ܼ +.xn--hh50e.xn----t2c; ..-\u073C; [V3, V6, X4_2]; .xn--hh50e.xn----t2c; [V3, V6, A4_2]; ; # ..-ܼ +.xn--1ug05310k.xn----t2c071q; .\u200D.-\u073C\u200C; [C1, C2, V3, V6, X4_2]; .xn--1ug05310k.xn----t2c071q; [C1, C2, V3, V6, A4_2]; ; # ..-ܼ +xn--y86c71305c.xn----t2c; ︒.-\u073C; [V3, V6]; xn--y86c71305c.xn----t2c; ; ; # ︒.-ܼ +xn--1ug1658ftw26f.xn----t2c071q; ︒\u200D.-\u073C\u200C; [C1, C2, V3, V6]; xn--1ug1658ftw26f.xn----t2c071q; ; ; # ︒.-ܼ +≯𞤟。ᡨ; ≯𞥁.ᡨ; [B1]; xn--hdhz520p.xn--48e; ; ; # ≯𞥁.ᡨ +>\u0338𞤟。ᡨ; ≯𞥁.ᡨ; [B1]; xn--hdhz520p.xn--48e; ; ; # ≯𞥁.ᡨ +>\u0338𞥁。ᡨ; ≯𞥁.ᡨ; [B1]; xn--hdhz520p.xn--48e; ; ; # ≯𞥁.ᡨ +≯𞥁。ᡨ; ≯𞥁.ᡨ; [B1]; xn--hdhz520p.xn--48e; ; ; # ≯𞥁.ᡨ +xn--hdhz520p.xn--48e; ≯𞥁.ᡨ; [B1]; xn--hdhz520p.xn--48e; ; ; # ≯𞥁.ᡨ +\u0F74𫫰𝨄。\u0713𐹦; \u0F74𫫰𝨄.\u0713𐹦; [B1, V5]; xn--ned8985uo92e.xn--dnb6395k; ; ; # ུ𫫰𝨄.ܓ𐹦 +xn--ned8985uo92e.xn--dnb6395k; \u0F74𫫰𝨄.\u0713𐹦; [B1, V5]; xn--ned8985uo92e.xn--dnb6395k; ; ; # ུ𫫰𝨄.ܓ𐹦 +\u033C\u07DB⁷𝟹。𝟬; \u033C\u07DB73.0; [B1, V5]; xn--73-9yb648b.0; ; ; # ̼ߛ73.0 +\u033C\u07DB73。0; \u033C\u07DB73.0; [B1, V5]; xn--73-9yb648b.0; ; ; # ̼ߛ73.0 +xn--73-9yb648b.0; \u033C\u07DB73.0; [B1, V5]; xn--73-9yb648b.0; ; ; # ̼ߛ73.0 +\u200D.𝟗; \u200D.9; [C2]; xn--1ug.9; ; .9; [A4_2] # .9 +\u200D.9; ; [C2]; xn--1ug.9; ; .9; [A4_2] # .9 +.9; ; [X4_2]; ; [A4_2]; ; # .9 +xn--1ug.9; \u200D.9; [C2]; xn--1ug.9; ; ; # .9 +9; ; ; ; ; ; # 9 +\u0779ᡭ𪕈。\u06B6\u08D9; \u0779ᡭ𪕈.\u06B6\u08D9; [B2, B3]; xn--9pb497fs270c.xn--pkb80i; ; ; # ݹᡭ𪕈.ڶࣙ +xn--9pb497fs270c.xn--pkb80i; \u0779ᡭ𪕈.\u06B6\u08D9; [B2, B3]; xn--9pb497fs270c.xn--pkb80i; ; ; # ݹᡭ𪕈.ڶࣙ +\u07265\u07E2겙。\u1CF4; \u07265\u07E2겙.\u1CF4; [B1, B2, B3, V5, V6]; xn--5-j1c97c2483c.xn--e7f2093h; ; ; # ܦ5ߢ겙.᳴ +\u07265\u07E2겙。\u1CF4; \u07265\u07E2겙.\u1CF4; [B1, B2, B3, V5, V6]; xn--5-j1c97c2483c.xn--e7f2093h; ; ; # ܦ5ߢ겙.᳴ +\u07265\u07E2겙。\u1CF4; \u07265\u07E2겙.\u1CF4; [B1, B2, B3, V5, V6]; xn--5-j1c97c2483c.xn--e7f2093h; ; ; # ܦ5ߢ겙.᳴ +\u07265\u07E2겙。\u1CF4; \u07265\u07E2겙.\u1CF4; [B1, B2, B3, V5, V6]; xn--5-j1c97c2483c.xn--e7f2093h; ; ; # ܦ5ߢ겙.᳴ +xn--5-j1c97c2483c.xn--e7f2093h; \u07265\u07E2겙.\u1CF4; [B1, B2, B3, V5, V6]; xn--5-j1c97c2483c.xn--e7f2093h; ; ; # ܦ5ߢ겙.᳴ +Ⴍꡨ\u05AE。Ⴞ\u200C\u200C; Ⴍꡨ\u05AE.Ⴞ\u200C\u200C; [C1, V6]; xn--5cb347co96jug15a.xn--2nd059ea; ; xn--5cb347co96jug15a.xn--2nd; [V6] # Ⴍꡨ֮.Ⴞ +ⴍꡨ\u05AE。ⴞ\u200C\u200C; ⴍꡨ\u05AE.ⴞ\u200C\u200C; [C1, V6]; xn--5cb172r175fug38a.xn--0uga051h; ; xn--5cb172r175fug38a.xn--mlj; [V6] # ⴍꡨ֮.ⴞ +xn--5cb172r175fug38a.xn--mlj; ⴍꡨ\u05AE.ⴞ; [V6]; xn--5cb172r175fug38a.xn--mlj; ; ; # ⴍꡨ֮.ⴞ +xn--5cb172r175fug38a.xn--0uga051h; ⴍꡨ\u05AE.ⴞ\u200C\u200C; [C1, V6]; xn--5cb172r175fug38a.xn--0uga051h; ; ; # ⴍꡨ֮.ⴞ +xn--5cb347co96jug15a.xn--2nd; Ⴍꡨ\u05AE.Ⴞ; [V6]; xn--5cb347co96jug15a.xn--2nd; ; ; # Ⴍꡨ֮.Ⴞ +xn--5cb347co96jug15a.xn--2nd059ea; Ⴍꡨ\u05AE.Ⴞ\u200C\u200C; [C1, V6]; xn--5cb347co96jug15a.xn--2nd059ea; ; ; # Ⴍꡨ֮.Ⴞ +𐋰。; 𐋰.; [V6]; xn--k97c.xn--q031e; ; ; # 𐋰. +xn--k97c.xn--q031e; 𐋰.; [V6]; xn--k97c.xn--q031e; ; ; # 𐋰. +\u17B4\u0B4D.𐹾; ; [B1, V6]; xn--9ic364dho91z.xn--2o0d; ; ; # ୍.𐹾 +xn--9ic364dho91z.xn--2o0d; \u17B4\u0B4D.𐹾; [B1, V6]; xn--9ic364dho91z.xn--2o0d; ; ; # ୍.𐹾 +\u08DFႫ귤.𝟢휪\u0AE3; \u08DFႫ귤.0휪\u0AE3; [V5, V6]; xn--i0b601b6r7l2hs0a.xn--0-8le8997mulr5f; ; ; # ࣟႫ귤.0휪ૣ +\u08DFႫ귤.𝟢휪\u0AE3; \u08DFႫ귤.0휪\u0AE3; [V5, V6]; xn--i0b601b6r7l2hs0a.xn--0-8le8997mulr5f; ; ; # ࣟႫ귤.0휪ૣ +\u08DFႫ귤.0휪\u0AE3; ; [V5, V6]; xn--i0b601b6r7l2hs0a.xn--0-8le8997mulr5f; ; ; # ࣟႫ귤.0휪ૣ +\u08DFႫ귤.0휪\u0AE3; \u08DFႫ귤.0휪\u0AE3; [V5, V6]; xn--i0b601b6r7l2hs0a.xn--0-8le8997mulr5f; ; ; # ࣟႫ귤.0휪ૣ +\u08DFⴋ귤.0휪\u0AE3; \u08DFⴋ귤.0휪\u0AE3; [V5, V6]; xn--i0b436pkl2g2h42a.xn--0-8le8997mulr5f; ; ; # ࣟⴋ귤.0휪ૣ +\u08DFⴋ귤.0휪\u0AE3; ; [V5, V6]; xn--i0b436pkl2g2h42a.xn--0-8le8997mulr5f; ; ; # ࣟⴋ귤.0휪ૣ +xn--i0b436pkl2g2h42a.xn--0-8le8997mulr5f; \u08DFⴋ귤.0휪\u0AE3; [V5, V6]; xn--i0b436pkl2g2h42a.xn--0-8le8997mulr5f; ; ; # ࣟⴋ귤.0휪ૣ +xn--i0b601b6r7l2hs0a.xn--0-8le8997mulr5f; \u08DFႫ귤.0휪\u0AE3; [V5, V6]; xn--i0b601b6r7l2hs0a.xn--0-8le8997mulr5f; ; ; # ࣟႫ귤.0휪ૣ +\u08DFⴋ귤.𝟢휪\u0AE3; \u08DFⴋ귤.0휪\u0AE3; [V5, V6]; xn--i0b436pkl2g2h42a.xn--0-8le8997mulr5f; ; ; # ࣟⴋ귤.0휪ૣ +\u08DFⴋ귤.𝟢휪\u0AE3; \u08DFⴋ귤.0휪\u0AE3; [V5, V6]; xn--i0b436pkl2g2h42a.xn--0-8le8997mulr5f; ; ; # ࣟⴋ귤.0휪ૣ +\u0784.𞡝\u0601; \u0784.𞡝\u0601; [V6]; xn--lqb.xn--jfb1808v; ; ; # ބ.𞡝 +\u0784.𞡝\u0601; ; [V6]; xn--lqb.xn--jfb1808v; ; ; # ބ.𞡝 +xn--lqb.xn--jfb1808v; \u0784.𞡝\u0601; [V6]; xn--lqb.xn--jfb1808v; ; ; # ބ.𞡝 +\u0ACD₃.8\uA8C4\u200D🃤; \u0ACD3.8\uA8C4\u200D🃤; [V5]; xn--3-yke.xn--8-ugnv982dbkwm; ; xn--3-yke.xn--8-sl4et308f; # ્3.8꣄🃤 +\u0ACD3.8\uA8C4\u200D🃤; ; [V5]; xn--3-yke.xn--8-ugnv982dbkwm; ; xn--3-yke.xn--8-sl4et308f; # ્3.8꣄🃤 +xn--3-yke.xn--8-sl4et308f; \u0ACD3.8\uA8C4🃤; [V5]; xn--3-yke.xn--8-sl4et308f; ; ; # ્3.8꣄🃤 +xn--3-yke.xn--8-ugnv982dbkwm; \u0ACD3.8\uA8C4\u200D🃤; [V5]; xn--3-yke.xn--8-ugnv982dbkwm; ; ; # ્3.8꣄🃤 +℻⩷𝆆。𞤠󠆁\u180C; fax⩷𝆆.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # fax⩷𝆆.𞥂 +FAX⩷𝆆。𞤠󠆁\u180C; fax⩷𝆆.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # fax⩷𝆆.𞥂 +fax⩷𝆆。𞥂󠆁\u180C; fax⩷𝆆.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # fax⩷𝆆.𞥂 +Fax⩷𝆆。𞤠󠆁\u180C; fax⩷𝆆.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # fax⩷𝆆.𞥂 +xn--fax-4c9a1676t.xn--6e6h; fax⩷𝆆.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # fax⩷𝆆.𞥂 +℻⩷𝆆。𞥂󠆁\u180C; fax⩷𝆆.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # fax⩷𝆆.𞥂 +FAX⩷𝆆。𞥂󠆁\u180C; fax⩷𝆆.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # fax⩷𝆆.𞥂 +fax⩷𝆆。𞤠󠆁\u180C; fax⩷𝆆.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # fax⩷𝆆.𞥂 +fax⩷𝆆.𞥂; ; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # fax⩷𝆆.𞥂 +FAX⩷𝆆.𞤠; fax⩷𝆆.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # fax⩷𝆆.𞥂 +Fax⩷𝆆.𞤠; fax⩷𝆆.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # fax⩷𝆆.𞥂 +FAX⩷𝆆.𞥂; fax⩷𝆆.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # fax⩷𝆆.𞥂 +Fax⩷𝆆.𞥂; fax⩷𝆆.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # fax⩷𝆆.𞥂 +ꡕ≠\u105E。󠄫\uFFA0; ꡕ≠\u105E.\uFFA0; [B2, B3, V6]; xn--cld333gn31h0158l.xn--cl7c96v; ; ; # ꡕ≠ၞ. +ꡕ=\u0338\u105E。󠄫\uFFA0; ꡕ≠\u105E.\uFFA0; [B2, B3, V6]; xn--cld333gn31h0158l.xn--cl7c96v; ; ; # ꡕ≠ၞ. +ꡕ≠\u105E。󠄫\u1160; ꡕ≠\u105E.\u1160; [B2, B3, V6]; xn--cld333gn31h0158l.xn--psd1510k; ; ; # ꡕ≠ၞ. +ꡕ=\u0338\u105E。󠄫\u1160; ꡕ≠\u105E.\u1160; [B2, B3, V6]; xn--cld333gn31h0158l.xn--psd1510k; ; ; # ꡕ≠ၞ. +xn--cld333gn31h0158l.xn--psd1510k; ꡕ≠\u105E.\u1160; [B2, B3, V6]; xn--cld333gn31h0158l.xn--psd1510k; ; ; # ꡕ≠ၞ. +xn--cld333gn31h0158l.xn--cl7c96v; ꡕ≠\u105E.\uFFA0; [B2, B3, V6]; xn--cld333gn31h0158l.xn--cl7c96v; ; ; # ꡕ≠ၞ. +鱊。\u200C; 鱊.\u200C; [C1]; xn--rt6a.xn--0ug; ; xn--rt6a.; [] # 鱊. +xn--rt6a.; 鱊.; ; xn--rt6a.; ; ; # 鱊. +鱊.; ; ; xn--rt6a.; ; ; # 鱊. +xn--rt6a.xn--0ug; 鱊.\u200C; [C1]; xn--rt6a.xn--0ug; ; ; # 鱊. +8𐹣.𑍨; 8𐹣.𑍨; [B1, V5]; xn--8-d26i.xn--0p1d; ; ; # 8𐹣.𑍨 +8𐹣.𑍨; ; [B1, V5]; xn--8-d26i.xn--0p1d; ; ; # 8𐹣.𑍨 +xn--8-d26i.xn--0p1d; 8𐹣.𑍨; [B1, V5]; xn--8-d26i.xn--0p1d; ; ; # 8𐹣.𑍨 +⏹𐧀.𐫯; ⏹𐧀.𐫯; [B1]; xn--qoh9161g.xn--1x9c; ; ; # ⏹𐧀.𐫯 +⏹𐧀.𐫯; ; [B1]; xn--qoh9161g.xn--1x9c; ; ; # ⏹𐧀.𐫯 +xn--qoh9161g.xn--1x9c; ⏹𐧀.𐫯; [B1]; xn--qoh9161g.xn--1x9c; ; ; # ⏹𐧀.𐫯 +𞤺\u07CC4.\u200D; 𞤺\u07CC4.\u200D; [B1, C2]; xn--4-0bd15808a.xn--1ug; ; xn--4-0bd15808a.; [] # 𞤺ߌ4. +𞤺\u07CC4.\u200D; ; [B1, C2]; xn--4-0bd15808a.xn--1ug; ; xn--4-0bd15808a.; [] # 𞤺ߌ4. +𞤘\u07CC4.\u200D; 𞤺\u07CC4.\u200D; [B1, C2]; xn--4-0bd15808a.xn--1ug; ; xn--4-0bd15808a.; [] # 𞤺ߌ4. +xn--4-0bd15808a.; 𞤺\u07CC4.; ; xn--4-0bd15808a.; ; ; # 𞤺ߌ4. +𞤺\u07CC4.; ; ; xn--4-0bd15808a.; ; ; # 𞤺ߌ4. +𞤘\u07CC4.; 𞤺\u07CC4.; ; xn--4-0bd15808a.; ; ; # 𞤺ߌ4. +xn--4-0bd15808a.xn--1ug; 𞤺\u07CC4.\u200D; [B1, C2]; xn--4-0bd15808a.xn--1ug; ; ; # 𞤺ߌ4. +𞤘\u07CC4.\u200D; 𞤺\u07CC4.\u200D; [B1, C2]; xn--4-0bd15808a.xn--1ug; ; xn--4-0bd15808a.; [] # 𞤺ߌ4. +⒗\u0981\u20EF-.\u08E2•; ; [B1, V3, V6]; xn----z0d801p6kd.xn--l0b810j; ; ; # ⒗ঁ⃯-.• +16.\u0981\u20EF-.\u08E2•; ; [B1, V3, V5, V6]; 16.xn----z0d801p.xn--l0b810j; ; ; # 16.ঁ⃯-.• +16.xn----z0d801p.xn--l0b810j; 16.\u0981\u20EF-.\u08E2•; [B1, V3, V5, V6]; 16.xn----z0d801p.xn--l0b810j; ; ; # 16.ঁ⃯-.• +xn----z0d801p6kd.xn--l0b810j; ⒗\u0981\u20EF-.\u08E2•; [B1, V3, V6]; xn----z0d801p6kd.xn--l0b810j; ; ; # ⒗ঁ⃯-.• +-。䏛; -.䏛; [V3]; -.xn--xco; ; ; # -.䏛 +-。䏛; -.䏛; [V3]; -.xn--xco; ; ; # -.䏛 +-.xn--xco; -.䏛; [V3]; -.xn--xco; ; ; # -.䏛 +\u200C.\u200D; \u200C.\u200D; [C1, C2, V6]; xn--0ugz7551c.xn--1ug; ; xn--dj8y.; [V6] # . +\u200C.\u200D; ; [C1, C2, V6]; xn--0ugz7551c.xn--1ug; ; xn--dj8y.; [V6] # . +xn--dj8y.; .; [V6]; xn--dj8y.; ; ; # . +xn--0ugz7551c.xn--1ug; \u200C.\u200D; [C1, C2, V6]; xn--0ugz7551c.xn--1ug; ; ; # . +⒈⓰。𐹠\u200DႵ; ⒈⓰.𐹠\u200DႵ; [B1, C2, V6]; xn--tsh0nz9380h.xn--tnd969erj4psgl3e; ; xn--tsh0nz9380h.xn--tnd1990ke579c; [B1, V6] # ⒈⓰.𐹠Ⴕ +1.⓰。𐹠\u200DႵ; 1.⓰.𐹠\u200DႵ; [B1, C2, V6]; 1.xn--svh00804k.xn--tnd969erj4psgl3e; ; 1.xn--svh00804k.xn--tnd1990ke579c; [B1, V6] # 1.⓰.𐹠Ⴕ +1.⓰。𐹠\u200Dⴕ; 1.⓰.𐹠\u200Dⴕ; [B1, C2, V6]; 1.xn--svh00804k.xn--1ug352csp0psg45e; ; 1.xn--svh00804k.xn--dljv223ee5t2d; [B1, V6] # 1.⓰.𐹠ⴕ +1.xn--svh00804k.xn--dljv223ee5t2d; 1.⓰.𐹠ⴕ; [B1, V6]; 1.xn--svh00804k.xn--dljv223ee5t2d; ; ; # 1.⓰.𐹠ⴕ +1.xn--svh00804k.xn--1ug352csp0psg45e; 1.⓰.𐹠\u200Dⴕ; [B1, C2, V6]; 1.xn--svh00804k.xn--1ug352csp0psg45e; ; ; # 1.⓰.𐹠ⴕ +1.xn--svh00804k.xn--tnd1990ke579c; 1.⓰.𐹠Ⴕ; [B1, V6]; 1.xn--svh00804k.xn--tnd1990ke579c; ; ; # 1.⓰.𐹠Ⴕ +1.xn--svh00804k.xn--tnd969erj4psgl3e; 1.⓰.𐹠\u200DႵ; [B1, C2, V6]; 1.xn--svh00804k.xn--tnd969erj4psgl3e; ; ; # 1.⓰.𐹠Ⴕ +⒈⓰。𐹠\u200Dⴕ; ⒈⓰.𐹠\u200Dⴕ; [B1, C2, V6]; xn--tsh0nz9380h.xn--1ug352csp0psg45e; ; xn--tsh0nz9380h.xn--dljv223ee5t2d; [B1, V6] # ⒈⓰.𐹠ⴕ +xn--tsh0nz9380h.xn--dljv223ee5t2d; ⒈⓰.𐹠ⴕ; [B1, V6]; xn--tsh0nz9380h.xn--dljv223ee5t2d; ; ; # ⒈⓰.𐹠ⴕ +xn--tsh0nz9380h.xn--1ug352csp0psg45e; ⒈⓰.𐹠\u200Dⴕ; [B1, C2, V6]; xn--tsh0nz9380h.xn--1ug352csp0psg45e; ; ; # ⒈⓰.𐹠ⴕ +xn--tsh0nz9380h.xn--tnd1990ke579c; ⒈⓰.𐹠Ⴕ; [B1, V6]; xn--tsh0nz9380h.xn--tnd1990ke579c; ; ; # ⒈⓰.𐹠Ⴕ +xn--tsh0nz9380h.xn--tnd969erj4psgl3e; ⒈⓰.𐹠\u200DႵ; [B1, C2, V6]; xn--tsh0nz9380h.xn--tnd969erj4psgl3e; ; ; # ⒈⓰.𐹠Ⴕ +𞠊ᠮ-ß。\u1CD0効\u0601; 𞠊ᠮ-ß.\u1CD0効\u0601; [B1, B2, B3, V5, V6]; xn----qfa310pg973b.xn--jfb197i791bi6x4c; ; xn---ss-21t18904a.xn--jfb197i791bi6x4c; # 𞠊ᠮ-ß.᳐効 +𞠊ᠮ-ß。\u1CD0効\u0601; 𞠊ᠮ-ß.\u1CD0効\u0601; [B1, B2, B3, V5, V6]; xn----qfa310pg973b.xn--jfb197i791bi6x4c; ; xn---ss-21t18904a.xn--jfb197i791bi6x4c; # 𞠊ᠮ-ß.᳐効 +𞠊ᠮ-SS。\u1CD0効\u0601; 𞠊ᠮ-ss.\u1CD0効\u0601; [B1, B2, B3, V5, V6]; xn---ss-21t18904a.xn--jfb197i791bi6x4c; ; ; # 𞠊ᠮ-ss.᳐効 +𞠊ᠮ-ss。\u1CD0効\u0601; 𞠊ᠮ-ss.\u1CD0効\u0601; [B1, B2, B3, V5, V6]; xn---ss-21t18904a.xn--jfb197i791bi6x4c; ; ; # 𞠊ᠮ-ss.᳐効 +𞠊ᠮ-Ss。\u1CD0効\u0601; 𞠊ᠮ-ss.\u1CD0効\u0601; [B1, B2, B3, V5, V6]; xn---ss-21t18904a.xn--jfb197i791bi6x4c; ; ; # 𞠊ᠮ-ss.᳐効 +xn---ss-21t18904a.xn--jfb197i791bi6x4c; 𞠊ᠮ-ss.\u1CD0効\u0601; [B1, B2, B3, V5, V6]; xn---ss-21t18904a.xn--jfb197i791bi6x4c; ; ; # 𞠊ᠮ-ss.᳐効 +xn----qfa310pg973b.xn--jfb197i791bi6x4c; 𞠊ᠮ-ß.\u1CD0効\u0601; [B1, B2, B3, V5, V6]; xn----qfa310pg973b.xn--jfb197i791bi6x4c; ; ; # 𞠊ᠮ-ß.᳐効 +𞠊ᠮ-SS。\u1CD0効\u0601; 𞠊ᠮ-ss.\u1CD0効\u0601; [B1, B2, B3, V5, V6]; xn---ss-21t18904a.xn--jfb197i791bi6x4c; ; ; # 𞠊ᠮ-ss.᳐効 +𞠊ᠮ-ss。\u1CD0効\u0601; 𞠊ᠮ-ss.\u1CD0効\u0601; [B1, B2, B3, V5, V6]; xn---ss-21t18904a.xn--jfb197i791bi6x4c; ; ; # 𞠊ᠮ-ss.᳐効 +𞠊ᠮ-Ss。\u1CD0効\u0601; 𞠊ᠮ-ss.\u1CD0効\u0601; [B1, B2, B3, V5, V6]; xn---ss-21t18904a.xn--jfb197i791bi6x4c; ; ; # 𞠊ᠮ-ss.᳐効 +𑇀.; ; [V5, V6]; xn--wd1d.xn--k946e; ; ; # 𑇀. +xn--wd1d.xn--k946e; 𑇀.; [V5, V6]; xn--wd1d.xn--k946e; ; ; # 𑇀. +␒3\uFB88。𝟘𐨿; ␒3\u0688.0𐨿; [B1, V6]; xn--3-jsc897t.xn--0-sc5iy3h; ; ; # ␒3ڈ.0𐨿 +␒3\u0688。0𐨿; ␒3\u0688.0𐨿; [B1, V6]; xn--3-jsc897t.xn--0-sc5iy3h; ; ; # ␒3ڈ.0𐨿 +xn--3-jsc897t.xn--0-sc5iy3h; ␒3\u0688.0𐨿; [B1, V6]; xn--3-jsc897t.xn--0-sc5iy3h; ; ; # ␒3ڈ.0𐨿 +\u076B6\u0A81\u08A6。\u1DE3; \u076B6\u0A81\u08A6.\u1DE3; [B1, V5]; xn--6-h5c06gj6c.xn--7eg; ; ; # ݫ6ઁࢦ.ᷣ +\u076B6\u0A81\u08A6。\u1DE3; \u076B6\u0A81\u08A6.\u1DE3; [B1, V5]; xn--6-h5c06gj6c.xn--7eg; ; ; # ݫ6ઁࢦ.ᷣ +xn--6-h5c06gj6c.xn--7eg; \u076B6\u0A81\u08A6.\u1DE3; [B1, V5]; xn--6-h5c06gj6c.xn--7eg; ; ; # ݫ6ઁࢦ.ᷣ +\u0605-Ⴂ。\u200D; \u0605-Ⴂ.\u200D; [B1, B6, C2, V6]; xn----0kc662fc152h.xn--1ugy3204f; ; xn----0kc662fc152h.xn--ss06b; [B1, V6] # -Ⴂ. +\u0605-ⴂ。\u200D; \u0605-ⴂ.\u200D; [B1, B6, C2, V6]; xn----0kc8501a5399e.xn--1ugy3204f; ; xn----0kc8501a5399e.xn--ss06b; [B1, V6] # -ⴂ. +xn----0kc8501a5399e.xn--ss06b; \u0605-ⴂ.; [B1, V6]; xn----0kc8501a5399e.xn--ss06b; ; ; # -ⴂ. +xn----0kc8501a5399e.xn--1ugy3204f; \u0605-ⴂ.\u200D; [B1, B6, C2, V6]; xn----0kc8501a5399e.xn--1ugy3204f; ; ; # -ⴂ. +xn----0kc662fc152h.xn--ss06b; \u0605-Ⴂ.; [B1, V6]; xn----0kc662fc152h.xn--ss06b; ; ; # -Ⴂ. +xn----0kc662fc152h.xn--1ugy3204f; \u0605-Ⴂ.\u200D; [B1, B6, C2, V6]; xn----0kc662fc152h.xn--1ugy3204f; ; ; # -Ⴂ. +⾆.ꡈ5≯ß; 舌.ꡈ5≯ß; ; xn--tc1a.xn--5-qfa988w745i; ; xn--tc1a.xn--5ss-3m2a5009e; # 舌.ꡈ5≯ß +⾆.ꡈ5>\u0338ß; 舌.ꡈ5≯ß; ; xn--tc1a.xn--5-qfa988w745i; ; xn--tc1a.xn--5ss-3m2a5009e; # 舌.ꡈ5≯ß +舌.ꡈ5≯ß; ; ; xn--tc1a.xn--5-qfa988w745i; ; xn--tc1a.xn--5ss-3m2a5009e; # 舌.ꡈ5≯ß +舌.ꡈ5>\u0338ß; 舌.ꡈ5≯ß; ; xn--tc1a.xn--5-qfa988w745i; ; xn--tc1a.xn--5ss-3m2a5009e; # 舌.ꡈ5≯ß +舌.ꡈ5>\u0338SS; 舌.ꡈ5≯ss; ; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss +舌.ꡈ5≯SS; 舌.ꡈ5≯ss; ; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss +舌.ꡈ5≯ss; ; ; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss +舌.ꡈ5>\u0338ss; 舌.ꡈ5≯ss; ; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss +舌.ꡈ5>\u0338Ss; 舌.ꡈ5≯ss; ; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss +舌.ꡈ5≯Ss; 舌.ꡈ5≯ss; ; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss +xn--tc1a.xn--5ss-3m2a5009e; 舌.ꡈ5≯ss; ; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss +xn--tc1a.xn--5-qfa988w745i; 舌.ꡈ5≯ß; ; xn--tc1a.xn--5-qfa988w745i; ; ; # 舌.ꡈ5≯ß +⾆.ꡈ5>\u0338SS; 舌.ꡈ5≯ss; ; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss +⾆.ꡈ5≯SS; 舌.ꡈ5≯ss; ; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss +⾆.ꡈ5≯ss; 舌.ꡈ5≯ss; ; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss +⾆.ꡈ5>\u0338ss; 舌.ꡈ5≯ss; ; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss +⾆.ꡈ5>\u0338Ss; 舌.ꡈ5≯ss; ; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss +⾆.ꡈ5≯Ss; 舌.ꡈ5≯ss; ; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss +\u0ACD8\u200D.\u075C; \u0ACD8\u200D.\u075C; [B1, B5, B6, C2, V5, V6]; xn--8-yke534n.xn--gpb79046m; ; xn--8-yke.xn--gpb79046m; [B1, B5, B6, V5, V6] # ્8.ݜ +\u0ACD8\u200D.\u075C; ; [B1, B5, B6, C2, V5, V6]; xn--8-yke534n.xn--gpb79046m; ; xn--8-yke.xn--gpb79046m; [B1, B5, B6, V5, V6] # ્8.ݜ +xn--8-yke.xn--gpb79046m; \u0ACD8.\u075C; [B1, B5, B6, V5, V6]; xn--8-yke.xn--gpb79046m; ; ; # ્8.ݜ +xn--8-yke534n.xn--gpb79046m; \u0ACD8\u200D.\u075C; [B1, B5, B6, C2, V5, V6]; xn--8-yke534n.xn--gpb79046m; ; ; # ્8.ݜ +\u0A70≮.⁷\u06B6; \u0A70≮.7\u06B6; [B5, B6, V6]; xn--ycc893jqh38rb6fa.xn--7-5uc53836ixt41c; ; ; # ੰ≮.7ڶ +\u0A70<\u0338.⁷\u06B6; \u0A70≮.7\u06B6; [B5, B6, V6]; xn--ycc893jqh38rb6fa.xn--7-5uc53836ixt41c; ; ; # ੰ≮.7ڶ +\u0A70≮.7\u06B6; ; [B5, B6, V6]; xn--ycc893jqh38rb6fa.xn--7-5uc53836ixt41c; ; ; # ੰ≮.7ڶ +\u0A70<\u0338.7\u06B6; \u0A70≮.7\u06B6; [B5, B6, V6]; xn--ycc893jqh38rb6fa.xn--7-5uc53836ixt41c; ; ; # ੰ≮.7ڶ +xn--ycc893jqh38rb6fa.xn--7-5uc53836ixt41c; \u0A70≮.7\u06B6; [B5, B6, V6]; xn--ycc893jqh38rb6fa.xn--7-5uc53836ixt41c; ; ; # ੰ≮.7ڶ +𞤪.ς; ; ; xn--ie6h.xn--3xa; ; xn--ie6h.xn--4xa; # 𞤪.ς +𞤈.Σ; 𞤪.σ; ; xn--ie6h.xn--4xa; ; ; # 𞤪.σ +𞤪.σ; ; ; xn--ie6h.xn--4xa; ; ; # 𞤪.σ +𞤈.σ; 𞤪.σ; ; xn--ie6h.xn--4xa; ; ; # 𞤪.σ +xn--ie6h.xn--4xa; 𞤪.σ; ; xn--ie6h.xn--4xa; ; ; # 𞤪.σ +𞤈.ς; 𞤪.ς; ; xn--ie6h.xn--3xa; ; xn--ie6h.xn--4xa; # 𞤪.ς +xn--ie6h.xn--3xa; 𞤪.ς; ; xn--ie6h.xn--3xa; ; ; # 𞤪.ς +𞤪.Σ; 𞤪.σ; ; xn--ie6h.xn--4xa; ; ; # 𞤪.σ +\u200CႺ。ς; \u200CႺ.ς; [C1, V6]; xn--ynd759e.xn--3xa; ; xn--ynd.xn--4xa; [V6] # Ⴚ.ς +\u200CႺ。ς; \u200CႺ.ς; [C1, V6]; xn--ynd759e.xn--3xa; ; xn--ynd.xn--4xa; [V6] # Ⴚ.ς +\u200Cⴚ。ς; \u200Cⴚ.ς; [C1]; xn--0ug262c.xn--3xa; ; xn--ilj.xn--4xa; [] # ⴚ.ς +\u200CႺ。Σ; \u200CႺ.σ; [C1, V6]; xn--ynd759e.xn--4xa; ; xn--ynd.xn--4xa; [V6] # Ⴚ.σ +\u200Cⴚ。σ; \u200Cⴚ.σ; [C1]; xn--0ug262c.xn--4xa; ; xn--ilj.xn--4xa; [] # ⴚ.σ +xn--ilj.xn--4xa; ⴚ.σ; ; xn--ilj.xn--4xa; ; ; # ⴚ.σ +ⴚ.σ; ; ; xn--ilj.xn--4xa; ; ; # ⴚ.σ +Ⴚ.Σ; Ⴚ.σ; [V6]; xn--ynd.xn--4xa; ; ; # Ⴚ.σ +ⴚ.ς; ; ; xn--ilj.xn--3xa; ; xn--ilj.xn--4xa; # ⴚ.ς +Ⴚ.ς; ; [V6]; xn--ynd.xn--3xa; ; xn--ynd.xn--4xa; # Ⴚ.ς +xn--ynd.xn--4xa; Ⴚ.σ; [V6]; xn--ynd.xn--4xa; ; ; # Ⴚ.σ +xn--ynd.xn--3xa; Ⴚ.ς; [V6]; xn--ynd.xn--3xa; ; ; # Ⴚ.ς +xn--ilj.xn--3xa; ⴚ.ς; ; xn--ilj.xn--3xa; ; ; # ⴚ.ς +Ⴚ.σ; ; [V6]; xn--ynd.xn--4xa; ; ; # Ⴚ.σ +xn--0ug262c.xn--4xa; \u200Cⴚ.σ; [C1]; xn--0ug262c.xn--4xa; ; ; # ⴚ.σ +xn--ynd759e.xn--4xa; \u200CႺ.σ; [C1, V6]; xn--ynd759e.xn--4xa; ; ; # Ⴚ.σ +xn--0ug262c.xn--3xa; \u200Cⴚ.ς; [C1]; xn--0ug262c.xn--3xa; ; ; # ⴚ.ς +xn--ynd759e.xn--3xa; \u200CႺ.ς; [C1, V6]; xn--ynd759e.xn--3xa; ; ; # Ⴚ.ς +\u200Cⴚ。ς; \u200Cⴚ.ς; [C1]; xn--0ug262c.xn--3xa; ; xn--ilj.xn--4xa; [] # ⴚ.ς +\u200CႺ。Σ; \u200CႺ.σ; [C1, V6]; xn--ynd759e.xn--4xa; ; xn--ynd.xn--4xa; [V6] # Ⴚ.σ +\u200Cⴚ。σ; \u200Cⴚ.σ; [C1]; xn--0ug262c.xn--4xa; ; xn--ilj.xn--4xa; [] # ⴚ.σ +𞤃.𐹦; 𞤥.𐹦; [B1]; xn--de6h.xn--eo0d; ; ; # 𞤥.𐹦 +𞤃.𐹦; 𞤥.𐹦; [B1]; xn--de6h.xn--eo0d; ; ; # 𞤥.𐹦 +𞤥.𐹦; ; [B1]; xn--de6h.xn--eo0d; ; ; # 𞤥.𐹦 +xn--de6h.xn--eo0d; 𞤥.𐹦; [B1]; xn--de6h.xn--eo0d; ; ; # 𞤥.𐹦 +𞤥.𐹦; 𞤥.𐹦; [B1]; xn--de6h.xn--eo0d; ; ; # 𞤥.𐹦 +\u200D⾕。\u200C\u0310\uA953ꡎ; \u200D谷.\u200C\uA953\u0310ꡎ; [C1, C2]; xn--1ug0273b.xn--0sa359l6n7g13a; ; xn--6g3a.xn--0sa8175flwa; [V5] # 谷.꥓̐ꡎ +\u200D⾕。\u200C\uA953\u0310ꡎ; \u200D谷.\u200C\uA953\u0310ꡎ; [C1, C2]; xn--1ug0273b.xn--0sa359l6n7g13a; ; xn--6g3a.xn--0sa8175flwa; [V5] # 谷.꥓̐ꡎ +\u200D谷。\u200C\uA953\u0310ꡎ; \u200D谷.\u200C\uA953\u0310ꡎ; [C1, C2]; xn--1ug0273b.xn--0sa359l6n7g13a; ; xn--6g3a.xn--0sa8175flwa; [V5] # 谷.꥓̐ꡎ +xn--6g3a.xn--0sa8175flwa; 谷.\uA953\u0310ꡎ; [V5]; xn--6g3a.xn--0sa8175flwa; ; ; # 谷.꥓̐ꡎ +xn--1ug0273b.xn--0sa359l6n7g13a; \u200D谷.\u200C\uA953\u0310ꡎ; [C1, C2]; xn--1ug0273b.xn--0sa359l6n7g13a; ; ; # 谷.꥓̐ꡎ +\u06AA-뉔.𞤐\u200C; \u06AA-뉔.𞤲\u200C; [B2, B3, C1]; xn----guc3592k.xn--0ug7611p; ; xn----guc3592k.xn--qe6h; [B2, B3] # ڪ-뉔.𞤲 +\u06AA-뉔.𞤐\u200C; \u06AA-뉔.𞤲\u200C; [B2, B3, C1]; xn----guc3592k.xn--0ug7611p; ; xn----guc3592k.xn--qe6h; [B2, B3] # ڪ-뉔.𞤲 +\u06AA-뉔.𞤐\u200C; \u06AA-뉔.𞤲\u200C; [B2, B3, C1]; xn----guc3592k.xn--0ug7611p; ; xn----guc3592k.xn--qe6h; [B2, B3] # ڪ-뉔.𞤲 +\u06AA-뉔.𞤐\u200C; \u06AA-뉔.𞤲\u200C; [B2, B3, C1]; xn----guc3592k.xn--0ug7611p; ; xn----guc3592k.xn--qe6h; [B2, B3] # ڪ-뉔.𞤲 +\u06AA-뉔.𞤲\u200C; \u06AA-뉔.𞤲\u200C; [B2, B3, C1]; xn----guc3592k.xn--0ug7611p; ; xn----guc3592k.xn--qe6h; [B2, B3] # ڪ-뉔.𞤲 +\u06AA-뉔.𞤲\u200C; ; [B2, B3, C1]; xn----guc3592k.xn--0ug7611p; ; xn----guc3592k.xn--qe6h; [B2, B3] # ڪ-뉔.𞤲 +xn----guc3592k.xn--qe6h; \u06AA-뉔.𞤲; [B2, B3]; xn----guc3592k.xn--qe6h; ; ; # ڪ-뉔.𞤲 +xn----guc3592k.xn--0ug7611p; \u06AA-뉔.𞤲\u200C; [B2, B3, C1]; xn----guc3592k.xn--0ug7611p; ; ; # ڪ-뉔.𞤲 +\u06AA-뉔.𞤲\u200C; \u06AA-뉔.𞤲\u200C; [B2, B3, C1]; xn----guc3592k.xn--0ug7611p; ; xn----guc3592k.xn--qe6h; [B2, B3] # ڪ-뉔.𞤲 +\u06AA-뉔.𞤲\u200C; \u06AA-뉔.𞤲\u200C; [B2, B3, C1]; xn----guc3592k.xn--0ug7611p; ; xn----guc3592k.xn--qe6h; [B2, B3] # ڪ-뉔.𞤲 +5ᦛς.\uA8C4\u077B\u1CD2\u0738; 5ᦛς.\uA8C4\u077B\u0738\u1CD2; [B1, V5, V6]; xn--5-ymb298ng603j.xn--fob7kk44dl41k; ; xn--5-0mb988ng603j.xn--fob7kk44dl41k; # 5ᦛς.꣄ݻܸ᳒ +5ᦛς.\uA8C4\u077B\u0738\u1CD2; 5ᦛς.\uA8C4\u077B\u0738\u1CD2; [B1, V5, V6]; xn--5-ymb298ng603j.xn--fob7kk44dl41k; ; xn--5-0mb988ng603j.xn--fob7kk44dl41k; # 5ᦛς.꣄ݻܸ᳒ +5ᦛς.\uA8C4\u077B\u0738\u1CD2; ; [B1, V5, V6]; xn--5-ymb298ng603j.xn--fob7kk44dl41k; ; xn--5-0mb988ng603j.xn--fob7kk44dl41k; # 5ᦛς.꣄ݻܸ᳒ +5ᦛΣ.\uA8C4\u077B\u0738\u1CD2; 5ᦛσ.\uA8C4\u077B\u0738\u1CD2; [B1, V5, V6]; xn--5-0mb988ng603j.xn--fob7kk44dl41k; ; ; # 5ᦛσ.꣄ݻܸ᳒ +5ᦛσ.\uA8C4\u077B\u0738\u1CD2; ; [B1, V5, V6]; xn--5-0mb988ng603j.xn--fob7kk44dl41k; ; ; # 5ᦛσ.꣄ݻܸ᳒ +xn--5-0mb988ng603j.xn--fob7kk44dl41k; 5ᦛσ.\uA8C4\u077B\u0738\u1CD2; [B1, V5, V6]; xn--5-0mb988ng603j.xn--fob7kk44dl41k; ; ; # 5ᦛσ.꣄ݻܸ᳒ +xn--5-ymb298ng603j.xn--fob7kk44dl41k; 5ᦛς.\uA8C4\u077B\u0738\u1CD2; [B1, V5, V6]; xn--5-ymb298ng603j.xn--fob7kk44dl41k; ; ; # 5ᦛς.꣄ݻܸ᳒ +5ᦛΣ.\uA8C4\u077B\u0738\u1CD2; 5ᦛσ.\uA8C4\u077B\u0738\u1CD2; [B1, V5, V6]; xn--5-0mb988ng603j.xn--fob7kk44dl41k; ; ; # 5ᦛσ.꣄ݻܸ᳒ +5ᦛσ.\uA8C4\u077B\u0738\u1CD2; 5ᦛσ.\uA8C4\u077B\u0738\u1CD2; [B1, V5, V6]; xn--5-0mb988ng603j.xn--fob7kk44dl41k; ; ; # 5ᦛσ.꣄ݻܸ᳒ +5ᦛΣ.\uA8C4\u077B\u1CD2\u0738; 5ᦛσ.\uA8C4\u077B\u0738\u1CD2; [B1, V5, V6]; xn--5-0mb988ng603j.xn--fob7kk44dl41k; ; ; # 5ᦛσ.꣄ݻܸ᳒ +5ᦛσ.\uA8C4\u077B\u1CD2\u0738; 5ᦛσ.\uA8C4\u077B\u0738\u1CD2; [B1, V5, V6]; xn--5-0mb988ng603j.xn--fob7kk44dl41k; ; ; # 5ᦛσ.꣄ݻܸ᳒ +淽。ᠾ; 淽.ᠾ; ; xn--34w.xn--x7e; ; ; # 淽.ᠾ +xn--34w.xn--x7e; 淽.ᠾ; ; xn--34w.xn--x7e; ; ; # 淽.ᠾ +淽.ᠾ; ; ; xn--34w.xn--x7e; ; ; # 淽.ᠾ +𐹴𑘷。-; 𐹴𑘷.-; [B1, V3]; xn--so0do6k.-; ; ; # 𐹴𑘷.- +xn--so0do6k.-; 𐹴𑘷.-; [B1, V3]; xn--so0do6k.-; ; ; # 𐹴𑘷.- +Ⴓ❓。𑄨; Ⴓ❓.𑄨; [V5, V6]; xn--rnd896i0j14q.xn--k80d; ; ; # Ⴓ❓.𑄨 +Ⴓ❓。𑄨; Ⴓ❓.𑄨; [V5, V6]; xn--rnd896i0j14q.xn--k80d; ; ; # Ⴓ❓.𑄨 +ⴓ❓。𑄨; ⴓ❓.𑄨; [V5, V6]; xn--8di78qvw32y.xn--k80d; ; ; # ⴓ❓.𑄨 +xn--8di78qvw32y.xn--k80d; ⴓ❓.𑄨; [V5, V6]; xn--8di78qvw32y.xn--k80d; ; ; # ⴓ❓.𑄨 +xn--rnd896i0j14q.xn--k80d; Ⴓ❓.𑄨; [V5, V6]; xn--rnd896i0j14q.xn--k80d; ; ; # Ⴓ❓.𑄨 +ⴓ❓。𑄨; ⴓ❓.𑄨; [V5, V6]; xn--8di78qvw32y.xn--k80d; ; ; # ⴓ❓.𑄨 +\u200C𐹡𞤌Ⴇ。ßႣ; \u200C𐹡𞤮Ⴇ.ßႣ; [B1, C1, V6]; xn--fnd599eyj4pr50g.xn--zca681f; ; xn--fnd1201kegrf.xn--ss-fek; [B1, V6] # 𐹡𞤮Ⴇ.ßႣ +\u200C𐹡𞤌Ⴇ。ßႣ; \u200C𐹡𞤮Ⴇ.ßႣ; [B1, C1, V6]; xn--fnd599eyj4pr50g.xn--zca681f; ; xn--fnd1201kegrf.xn--ss-fek; [B1, V6] # 𐹡𞤮Ⴇ.ßႣ +\u200C𐹡𞤮ⴇ。ßⴃ; \u200C𐹡𞤮ⴇ.ßⴃ; [B1, C1]; xn--0ug332c3q0pr56g.xn--zca417t; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # 𐹡𞤮ⴇ.ßⴃ +\u200C𐹡𞤌Ⴇ。SSႣ; \u200C𐹡𞤮Ⴇ.ssႣ; [B1, C1, V6]; xn--fnd599eyj4pr50g.xn--ss-fek; ; xn--fnd1201kegrf.xn--ss-fek; [B1, V6] # 𐹡𞤮Ⴇ.ssႣ +\u200C𐹡𞤮ⴇ。ssⴃ; \u200C𐹡𞤮ⴇ.ssⴃ; [B1, C1]; xn--0ug332c3q0pr56g.xn--ss-151a; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # 𐹡𞤮ⴇ.ssⴃ +\u200C𐹡𞤌ⴇ。Ssⴃ; \u200C𐹡𞤮ⴇ.ssⴃ; [B1, C1]; xn--0ug332c3q0pr56g.xn--ss-151a; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # 𐹡𞤮ⴇ.ssⴃ +xn--ykj9323eegwf.xn--ss-151a; 𐹡𞤮ⴇ.ssⴃ; [B1]; xn--ykj9323eegwf.xn--ss-151a; ; ; # 𐹡𞤮ⴇ.ssⴃ +xn--0ug332c3q0pr56g.xn--ss-151a; \u200C𐹡𞤮ⴇ.ssⴃ; [B1, C1]; xn--0ug332c3q0pr56g.xn--ss-151a; ; ; # 𐹡𞤮ⴇ.ssⴃ +xn--fnd1201kegrf.xn--ss-fek; 𐹡𞤮Ⴇ.ssႣ; [B1, V6]; xn--fnd1201kegrf.xn--ss-fek; ; ; # 𐹡𞤮Ⴇ.ssႣ +xn--fnd599eyj4pr50g.xn--ss-fek; \u200C𐹡𞤮Ⴇ.ssႣ; [B1, C1, V6]; xn--fnd599eyj4pr50g.xn--ss-fek; ; ; # 𐹡𞤮Ⴇ.ssႣ +xn--0ug332c3q0pr56g.xn--zca417t; \u200C𐹡𞤮ⴇ.ßⴃ; [B1, C1]; xn--0ug332c3q0pr56g.xn--zca417t; ; ; # 𐹡𞤮ⴇ.ßⴃ +xn--fnd599eyj4pr50g.xn--zca681f; \u200C𐹡𞤮Ⴇ.ßႣ; [B1, C1, V6]; xn--fnd599eyj4pr50g.xn--zca681f; ; ; # 𐹡𞤮Ⴇ.ßႣ +\u200C𐹡𞤮ⴇ。ßⴃ; \u200C𐹡𞤮ⴇ.ßⴃ; [B1, C1]; xn--0ug332c3q0pr56g.xn--zca417t; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # 𐹡𞤮ⴇ.ßⴃ +\u200C𐹡𞤌Ⴇ。SSႣ; \u200C𐹡𞤮Ⴇ.ssႣ; [B1, C1, V6]; xn--fnd599eyj4pr50g.xn--ss-fek; ; xn--fnd1201kegrf.xn--ss-fek; [B1, V6] # 𐹡𞤮Ⴇ.ssႣ +\u200C𐹡𞤮ⴇ。ssⴃ; \u200C𐹡𞤮ⴇ.ssⴃ; [B1, C1]; xn--0ug332c3q0pr56g.xn--ss-151a; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # 𐹡𞤮ⴇ.ssⴃ +\u200C𐹡𞤌ⴇ。Ssⴃ; \u200C𐹡𞤮ⴇ.ssⴃ; [B1, C1]; xn--0ug332c3q0pr56g.xn--ss-151a; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # 𐹡𞤮ⴇ.ssⴃ +\u200C𐹡𞤌ⴇ。ßⴃ; \u200C𐹡𞤮ⴇ.ßⴃ; [B1, C1]; xn--0ug332c3q0pr56g.xn--zca417t; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # 𐹡𞤮ⴇ.ßⴃ +\u200C𐹡𞤌ⴇ。ssⴃ; \u200C𐹡𞤮ⴇ.ssⴃ; [B1, C1]; xn--0ug332c3q0pr56g.xn--ss-151a; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # 𐹡𞤮ⴇ.ssⴃ +\u200C𐹡𞤌Ⴇ。Ssⴃ; \u200C𐹡𞤮Ⴇ.ssⴃ; [B1, C1, V6]; xn--fnd599eyj4pr50g.xn--ss-151a; ; xn--fnd1201kegrf.xn--ss-151a; [B1, V6] # 𐹡𞤮Ⴇ.ssⴃ +xn--fnd1201kegrf.xn--ss-151a; 𐹡𞤮Ⴇ.ssⴃ; [B1, V6]; xn--fnd1201kegrf.xn--ss-151a; ; ; # 𐹡𞤮Ⴇ.ssⴃ +xn--fnd599eyj4pr50g.xn--ss-151a; \u200C𐹡𞤮Ⴇ.ssⴃ; [B1, C1, V6]; xn--fnd599eyj4pr50g.xn--ss-151a; ; ; # 𐹡𞤮Ⴇ.ssⴃ +\u200C𐹡𞤌ⴇ。ßⴃ; \u200C𐹡𞤮ⴇ.ßⴃ; [B1, C1]; xn--0ug332c3q0pr56g.xn--zca417t; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # 𐹡𞤮ⴇ.ßⴃ +\u200C𐹡𞤌ⴇ。ssⴃ; \u200C𐹡𞤮ⴇ.ssⴃ; [B1, C1]; xn--0ug332c3q0pr56g.xn--ss-151a; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # 𐹡𞤮ⴇ.ssⴃ +\u200C𐹡𞤌Ⴇ。Ssⴃ; \u200C𐹡𞤮Ⴇ.ssⴃ; [B1, C1, V6]; xn--fnd599eyj4pr50g.xn--ss-151a; ; xn--fnd1201kegrf.xn--ss-151a; [B1, V6] # 𐹡𞤮Ⴇ.ssⴃ +\u17FF。; \u17FF.; [V6]; xn--45e.xn--et6h; ; ; # . +\u17FF。; \u17FF.; [V6]; xn--45e.xn--et6h; ; ; # . +xn--45e.xn--et6h; \u17FF.; [V6]; xn--45e.xn--et6h; ; ; # . +\u0652\u200D。\u0CCD𑚳; \u0652\u200D.\u0CCD𑚳; [C2, V5]; xn--uhb882k.xn--8tc4527k; ; xn--uhb.xn--8tc4527k; [V5] # ْ.್𑚳 +\u0652\u200D。\u0CCD𑚳; \u0652\u200D.\u0CCD𑚳; [C2, V5]; xn--uhb882k.xn--8tc4527k; ; xn--uhb.xn--8tc4527k; [V5] # ْ.್𑚳 +xn--uhb.xn--8tc4527k; \u0652.\u0CCD𑚳; [V5]; xn--uhb.xn--8tc4527k; ; ; # ْ.್𑚳 +xn--uhb882k.xn--8tc4527k; \u0652\u200D.\u0CCD𑚳; [C2, V5]; xn--uhb882k.xn--8tc4527k; ; ; # ْ.್𑚳 +-≠ᠻ.\u076D𞥃≮; -≠ᠻ.\u076D𞥃≮; [B1, B2, B3, V3, V6]; xn----g6j886c.xn--xpb049kk353abj99f; ; ; # -≠ᠻ.ݭ𞥃≮ +-=\u0338ᠻ.\u076D𞥃<\u0338; -≠ᠻ.\u076D𞥃≮; [B1, B2, B3, V3, V6]; xn----g6j886c.xn--xpb049kk353abj99f; ; ; # -≠ᠻ.ݭ𞥃≮ +-≠ᠻ.\u076D𞥃≮; ; [B1, B2, B3, V3, V6]; xn----g6j886c.xn--xpb049kk353abj99f; ; ; # -≠ᠻ.ݭ𞥃≮ +-=\u0338ᠻ.\u076D𞥃<\u0338; -≠ᠻ.\u076D𞥃≮; [B1, B2, B3, V3, V6]; xn----g6j886c.xn--xpb049kk353abj99f; ; ; # -≠ᠻ.ݭ𞥃≮ +-=\u0338ᠻ.\u076D𞤡<\u0338; -≠ᠻ.\u076D𞥃≮; [B1, B2, B3, V3, V6]; xn----g6j886c.xn--xpb049kk353abj99f; ; ; # -≠ᠻ.ݭ𞥃≮ +-≠ᠻ.\u076D𞤡≮; -≠ᠻ.\u076D𞥃≮; [B1, B2, B3, V3, V6]; xn----g6j886c.xn--xpb049kk353abj99f; ; ; # -≠ᠻ.ݭ𞥃≮ +xn----g6j886c.xn--xpb049kk353abj99f; -≠ᠻ.\u076D𞥃≮; [B1, B2, B3, V3, V6]; xn----g6j886c.xn--xpb049kk353abj99f; ; ; # -≠ᠻ.ݭ𞥃≮ +-=\u0338ᠻ.\u076D𞤡<\u0338; -≠ᠻ.\u076D𞥃≮; [B1, B2, B3, V3, V6]; xn----g6j886c.xn--xpb049kk353abj99f; ; ; # -≠ᠻ.ݭ𞥃≮ +-≠ᠻ.\u076D𞤡≮; -≠ᠻ.\u076D𞥃≮; [B1, B2, B3, V3, V6]; xn----g6j886c.xn--xpb049kk353abj99f; ; ; # -≠ᠻ.ݭ𞥃≮ +≯\u07B5.≮𑁆\u084C; ≯\u07B5.≮𑁆\u084C; [B1, B5, B6, V6]; xn--zrb797kdm1oes34i.xn--bwb394k8k2o25n6d; ; ; # ≯.≮𑁆ࡌ +>\u0338\u07B5.<\u0338𑁆\u084C; ≯\u07B5.≮𑁆\u084C; [B1, B5, B6, V6]; xn--zrb797kdm1oes34i.xn--bwb394k8k2o25n6d; ; ; # ≯.≮𑁆ࡌ +≯\u07B5.≮𑁆\u084C; ; [B1, B5, B6, V6]; xn--zrb797kdm1oes34i.xn--bwb394k8k2o25n6d; ; ; # ≯.≮𑁆ࡌ +>\u0338\u07B5.<\u0338𑁆\u084C; ≯\u07B5.≮𑁆\u084C; [B1, B5, B6, V6]; xn--zrb797kdm1oes34i.xn--bwb394k8k2o25n6d; ; ; # ≯.≮𑁆ࡌ +xn--zrb797kdm1oes34i.xn--bwb394k8k2o25n6d; ≯\u07B5.≮𑁆\u084C; [B1, B5, B6, V6]; xn--zrb797kdm1oes34i.xn--bwb394k8k2o25n6d; ; ; # ≯.≮𑁆ࡌ +≠.\u0600\u0BCD-\u06B9; ; [B1, V6]; xn--1ch22084l.xn----qkc07co6n; ; ; # ≠.்-ڹ +=\u0338.\u0600\u0BCD-\u06B9; ≠.\u0600\u0BCD-\u06B9; [B1, V6]; xn--1ch22084l.xn----qkc07co6n; ; ; # ≠.்-ڹ +xn--1ch22084l.xn----qkc07co6n; ≠.\u0600\u0BCD-\u06B9; [B1, V6]; xn--1ch22084l.xn----qkc07co6n; ; ; # ≠.்-ڹ +\u17DD≠。𐹼𐋤; \u17DD≠.𐹼𐋤; [B1, V5, V6]; xn--54e694cn389z.xn--787ct8r; ; ; # ៝≠.𐹼𐋤 +\u17DD=\u0338。𐹼𐋤; \u17DD≠.𐹼𐋤; [B1, V5, V6]; xn--54e694cn389z.xn--787ct8r; ; ; # ៝≠.𐹼𐋤 +\u17DD≠。𐹼𐋤; \u17DD≠.𐹼𐋤; [B1, V5, V6]; xn--54e694cn389z.xn--787ct8r; ; ; # ៝≠.𐹼𐋤 +\u17DD=\u0338。𐹼𐋤; \u17DD≠.𐹼𐋤; [B1, V5, V6]; xn--54e694cn389z.xn--787ct8r; ; ; # ៝≠.𐹼𐋤 +xn--54e694cn389z.xn--787ct8r; \u17DD≠.𐹼𐋤; [B1, V5, V6]; xn--54e694cn389z.xn--787ct8r; ; ; # ៝≠.𐹼𐋤 +ß𰀻。𝩨🕮ß; ß𰀻.𝩨🕮ß; [V5, V6]; xn--zca20040bgrkh.xn--zca3653v86qa; ; xn--ss-jl59biy67d.xn--ss-4d11aw87d; # ß𰀻.𝩨🕮ß +ß𰀻。𝩨🕮ß; ß𰀻.𝩨🕮ß; [V5, V6]; xn--zca20040bgrkh.xn--zca3653v86qa; ; xn--ss-jl59biy67d.xn--ss-4d11aw87d; # ß𰀻.𝩨🕮ß +SS𰀻。𝩨🕮SS; ss𰀻.𝩨🕮ss; [V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ss𰀻.𝩨🕮ss +ss𰀻。𝩨🕮ss; ss𰀻.𝩨🕮ss; [V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ss𰀻.𝩨🕮ss +Ss𰀻。𝩨🕮Ss; ss𰀻.𝩨🕮ss; [V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ss𰀻.𝩨🕮ss +xn--ss-jl59biy67d.xn--ss-4d11aw87d; ss𰀻.𝩨🕮ss; [V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ss𰀻.𝩨🕮ss +xn--zca20040bgrkh.xn--zca3653v86qa; ß𰀻.𝩨🕮ß; [V5, V6]; xn--zca20040bgrkh.xn--zca3653v86qa; ; ; # ß𰀻.𝩨🕮ß +SS𰀻。𝩨🕮SS; ss𰀻.𝩨🕮ss; [V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ss𰀻.𝩨🕮ss +ss𰀻。𝩨🕮ss; ss𰀻.𝩨🕮ss; [V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ss𰀻.𝩨🕮ss +Ss𰀻。𝩨🕮Ss; ss𰀻.𝩨🕮ss; [V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ss𰀻.𝩨🕮ss +\u200D。\u200C; \u200D.\u200C; [C1, C2]; xn--1ug.xn--0ug; ; .; [A4_2] # . +xn--1ug.xn--0ug; \u200D.\u200C; [C1, C2]; xn--1ug.xn--0ug; ; ; # . +\u0483𐭞\u200D.\u17B9; ; [B1, C2, V5, V6]; xn--m3a412lrr0o.xn--43e8670vmd79b; ; xn--m3a6965k.xn--43e8670vmd79b; [B1, V5, V6] # ҃𐭞.ឹ +xn--m3a6965k.xn--43e8670vmd79b; \u0483𐭞.\u17B9; [B1, V5, V6]; xn--m3a6965k.xn--43e8670vmd79b; ; ; # ҃𐭞.ឹ +xn--m3a412lrr0o.xn--43e8670vmd79b; \u0483𐭞\u200D.\u17B9; [B1, C2, V5, V6]; xn--m3a412lrr0o.xn--43e8670vmd79b; ; ; # ҃𐭞.ឹ +\u200C𐠨\u200C临。ꡢⶏ𐹣; \u200C𐠨\u200C临.ꡢⶏ𐹣; [B1, B5, B6, C1, V6]; xn--0uga2656aop9k.xn--uojv340bk71c99u9f; ; xn--miq9646b.xn--uojv340bk71c99u9f; [B2, B3, B5, B6, V6] # 𐠨临.ꡢⶏ𐹣 +xn--miq9646b.xn--uojv340bk71c99u9f; 𐠨临.ꡢⶏ𐹣; [B2, B3, B5, B6, V6]; xn--miq9646b.xn--uojv340bk71c99u9f; ; ; # 𐠨临.ꡢⶏ𐹣 +xn--0uga2656aop9k.xn--uojv340bk71c99u9f; \u200C𐠨\u200C临.ꡢⶏ𐹣; [B1, B5, B6, C1, V6]; xn--0uga2656aop9k.xn--uojv340bk71c99u9f; ; ; # 𐠨临.ꡢⶏ𐹣 +.󠄮; .; [V6]; xn--s136e.; ; ; # . +.󠄮; .; [V6]; xn--s136e.; ; ; # . +xn--s136e.; .; [V6]; xn--s136e.; ; ; # . +𐫄\u0D4D.\uAAF6; 𐫄\u0D4D.\uAAF6; [B1, V5]; xn--wxc7880k.xn--2v9a; ; ; # 𐫄്.꫶ +𐫄\u0D4D.\uAAF6; ; [B1, V5]; xn--wxc7880k.xn--2v9a; ; ; # 𐫄്.꫶ +xn--wxc7880k.xn--2v9a; 𐫄\u0D4D.\uAAF6; [B1, V5]; xn--wxc7880k.xn--2v9a; ; ; # 𐫄്.꫶ +\uA9B7멹。⒛; \uA9B7멹.⒛; [V5, V6]; xn--ym9av13acp85w.xn--dth22121k; ; ; # ꦷ멹.⒛ +\uA9B7멹。⒛; \uA9B7멹.⒛; [V5, V6]; xn--ym9av13acp85w.xn--dth22121k; ; ; # ꦷ멹.⒛ +\uA9B7멹。20.; \uA9B7멹.20.; [V5, V6]; xn--ym9av13acp85w.20.xn--d846e; ; ; # ꦷ멹.20. +\uA9B7멹。20.; \uA9B7멹.20.; [V5, V6]; xn--ym9av13acp85w.20.xn--d846e; ; ; # ꦷ멹.20. +xn--ym9av13acp85w.20.xn--d846e; \uA9B7멹.20.; [V5, V6]; xn--ym9av13acp85w.20.xn--d846e; ; ; # ꦷ멹.20. +xn--ym9av13acp85w.xn--dth22121k; \uA9B7멹.⒛; [V5, V6]; xn--ym9av13acp85w.xn--dth22121k; ; ; # ꦷ멹.⒛ +Ⴅ릖.\u0777𐹳⒊; ; [B4, B6, V6]; xn--dnd2167fnet0io02g.xn--7pb000mwm4n; ; ; # Ⴅ릖.ݷ𐹳⒊ +Ⴅ릖.\u0777𐹳⒊; Ⴅ릖.\u0777𐹳⒊; [B4, B6, V6]; xn--dnd2167fnet0io02g.xn--7pb000mwm4n; ; ; # Ⴅ릖.ݷ𐹳⒊ +Ⴅ릖.\u0777𐹳3.; ; [B4, B6, V6]; xn--dnd2167fnet0io02g.xn--3-55c6803r.; ; ; # Ⴅ릖.ݷ𐹳3. +Ⴅ릖.\u0777𐹳3.; Ⴅ릖.\u0777𐹳3.; [B4, B6, V6]; xn--dnd2167fnet0io02g.xn--3-55c6803r.; ; ; # Ⴅ릖.ݷ𐹳3. +ⴅ릖.\u0777𐹳3.; ⴅ릖.\u0777𐹳3.; [B4, B6, V6]; xn--wkj8016bne45io02g.xn--3-55c6803r.; ; ; # ⴅ릖.ݷ𐹳3. +ⴅ릖.\u0777𐹳3.; ; [B4, B6, V6]; xn--wkj8016bne45io02g.xn--3-55c6803r.; ; ; # ⴅ릖.ݷ𐹳3. +xn--wkj8016bne45io02g.xn--3-55c6803r.; ⴅ릖.\u0777𐹳3.; [B4, B6, V6]; xn--wkj8016bne45io02g.xn--3-55c6803r.; ; ; # ⴅ릖.ݷ𐹳3. +xn--dnd2167fnet0io02g.xn--3-55c6803r.; Ⴅ릖.\u0777𐹳3.; [B4, B6, V6]; xn--dnd2167fnet0io02g.xn--3-55c6803r.; ; ; # Ⴅ릖.ݷ𐹳3. +ⴅ릖.\u0777𐹳⒊; ⴅ릖.\u0777𐹳⒊; [B4, B6, V6]; xn--wkj8016bne45io02g.xn--7pb000mwm4n; ; ; # ⴅ릖.ݷ𐹳⒊ +ⴅ릖.\u0777𐹳⒊; ; [B4, B6, V6]; xn--wkj8016bne45io02g.xn--7pb000mwm4n; ; ; # ⴅ릖.ݷ𐹳⒊ +xn--wkj8016bne45io02g.xn--7pb000mwm4n; ⴅ릖.\u0777𐹳⒊; [B4, B6, V6]; xn--wkj8016bne45io02g.xn--7pb000mwm4n; ; ; # ⴅ릖.ݷ𐹳⒊ +xn--dnd2167fnet0io02g.xn--7pb000mwm4n; Ⴅ릖.\u0777𐹳⒊; [B4, B6, V6]; xn--dnd2167fnet0io02g.xn--7pb000mwm4n; ; ; # Ⴅ릖.ݷ𐹳⒊ +\u200C。︒; \u200C.︒; [C1, V6]; xn--0ug.xn--y86c; ; .xn--y86c; [V6, A4_2] # .︒ +\u200C。。; \u200C..; [C1, X4_2]; xn--0ug..; [C1, A4_2]; ..; [A4_2] # .. +..; ; [X4_2]; ; [A4_2]; ; # .. +xn--0ug..; \u200C..; [C1, X4_2]; xn--0ug..; [C1, A4_2]; ; # .. +.xn--y86c; .︒; [V6, X4_2]; .xn--y86c; [V6, A4_2]; ; # .︒ +xn--0ug.xn--y86c; \u200C.︒; [C1, V6]; xn--0ug.xn--y86c; ; ; # .︒ +≯\u076D.₄; ≯\u076D.4; [B1]; xn--xpb149k.4; ; ; # ≯ݭ.4 +>\u0338\u076D.₄; ≯\u076D.4; [B1]; xn--xpb149k.4; ; ; # ≯ݭ.4 +≯\u076D.4; ; [B1]; xn--xpb149k.4; ; ; # ≯ݭ.4 +>\u0338\u076D.4; ≯\u076D.4; [B1]; xn--xpb149k.4; ; ; # ≯ݭ.4 +xn--xpb149k.4; ≯\u076D.4; [B1]; xn--xpb149k.4; ; ; # ≯ݭ.4 +ᡲ-𝟹.ß-\u200C-; ᡲ-3.ß-\u200C-; [C1, V3]; xn---3-p9o.xn-----fia9303a; ; xn---3-p9o.ss--; [V2, V3] # ᡲ-3.ß-- +ᡲ-3.ß-\u200C-; ; [C1, V3]; xn---3-p9o.xn-----fia9303a; ; xn---3-p9o.ss--; [V2, V3] # ᡲ-3.ß-- +ᡲ-3.SS-\u200C-; ᡲ-3.ss-\u200C-; [C1, V3]; xn---3-p9o.xn--ss---276a; ; xn---3-p9o.ss--; [V2, V3] # ᡲ-3.ss-- +ᡲ-3.ss-\u200C-; ; [C1, V3]; xn---3-p9o.xn--ss---276a; ; xn---3-p9o.ss--; [V2, V3] # ᡲ-3.ss-- +ᡲ-3.Ss-\u200C-; ᡲ-3.ss-\u200C-; [C1, V3]; xn---3-p9o.xn--ss---276a; ; xn---3-p9o.ss--; [V2, V3] # ᡲ-3.ss-- +xn---3-p9o.ss--; ᡲ-3.ss--; [V2, V3]; xn---3-p9o.ss--; ; ; # ᡲ-3.ss-- +xn---3-p9o.xn--ss---276a; ᡲ-3.ss-\u200C-; [C1, V3]; xn---3-p9o.xn--ss---276a; ; ; # ᡲ-3.ss-- +xn---3-p9o.xn-----fia9303a; ᡲ-3.ß-\u200C-; [C1, V3]; xn---3-p9o.xn-----fia9303a; ; ; # ᡲ-3.ß-- +ᡲ-𝟹.SS-\u200C-; ᡲ-3.ss-\u200C-; [C1, V3]; xn---3-p9o.xn--ss---276a; ; xn---3-p9o.ss--; [V2, V3] # ᡲ-3.ss-- +ᡲ-𝟹.ss-\u200C-; ᡲ-3.ss-\u200C-; [C1, V3]; xn---3-p9o.xn--ss---276a; ; xn---3-p9o.ss--; [V2, V3] # ᡲ-3.ss-- +ᡲ-𝟹.Ss-\u200C-; ᡲ-3.ss-\u200C-; [C1, V3]; xn---3-p9o.xn--ss---276a; ; xn---3-p9o.ss--; [V2, V3] # ᡲ-3.ss-- +\uFD08𝟦\u0647。Ӏ; \u0636\u064A4\u0647.Ӏ; [B2, B3, V6]; xn--4-tnc6ck183523b.xn--d5a; ; ; # ضي4ه.Ӏ +\u0636\u064A4\u0647。Ӏ; \u0636\u064A4\u0647.Ӏ; [B2, B3, V6]; xn--4-tnc6ck183523b.xn--d5a; ; ; # ضي4ه.Ӏ +\u0636\u064A4\u0647。ӏ; \u0636\u064A4\u0647.ӏ; [B2, B3, V6]; xn--4-tnc6ck183523b.xn--s5a; ; ; # ضي4ه.ӏ +xn--4-tnc6ck183523b.xn--s5a; \u0636\u064A4\u0647.ӏ; [B2, B3, V6]; xn--4-tnc6ck183523b.xn--s5a; ; ; # ضي4ه.ӏ +xn--4-tnc6ck183523b.xn--d5a; \u0636\u064A4\u0647.Ӏ; [B2, B3, V6]; xn--4-tnc6ck183523b.xn--d5a; ; ; # ضي4ه.Ӏ +\uFD08𝟦\u0647。ӏ; \u0636\u064A4\u0647.ӏ; [B2, B3, V6]; xn--4-tnc6ck183523b.xn--s5a; ; ; # ضي4ه.ӏ +-.\u0602\u0622𑆾🐹; ; [B1, V3, V6]; -.xn--kfb8dy983hgl7g; ; ; # -.آ𑆾🐹 +-.\u0602\u0627\u0653𑆾🐹; -.\u0602\u0622𑆾🐹; [B1, V3, V6]; -.xn--kfb8dy983hgl7g; ; ; # -.آ𑆾🐹 +-.xn--kfb8dy983hgl7g; -.\u0602\u0622𑆾🐹; [B1, V3, V6]; -.xn--kfb8dy983hgl7g; ; ; # -.آ𑆾🐹 +ᢘ。\u1A7F⺢; ᢘ.\u1A7F⺢; [V5, V6]; xn--ibf35138o.xn--fpfz94g; ; ; # ᢘ.᩿⺢ +xn--ibf35138o.xn--fpfz94g; ᢘ.\u1A7F⺢; [V5, V6]; xn--ibf35138o.xn--fpfz94g; ; ; # ᢘ.᩿⺢ +≠ႷᠤႫ。?\u034C\u0633觴; ≠ႷᠤႫ.?\u034C\u0633觴; [B1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴 +=\u0338ႷᠤႫ。?\u034C\u0633觴; ≠ႷᠤႫ.?\u034C\u0633觴; [B1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴 +≠ႷᠤႫ。?\u034C\u0633觴; ≠ႷᠤႫ.?\u034C\u0633觴; [B1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴 +=\u0338ႷᠤႫ。?\u034C\u0633觴; ≠ႷᠤႫ.?\u034C\u0633觴; [B1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴 +=\u0338ⴗᠤⴋ。?\u034C\u0633觴; ≠ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴 +≠ⴗᠤⴋ。?\u034C\u0633觴; ≠ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴 +≠Ⴗᠤⴋ。?\u034C\u0633觴; ≠Ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴 +=\u0338Ⴗᠤⴋ。?\u034C\u0633觴; ≠Ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴 +xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ≠Ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴 +xn--66e353ce0ilb.xn--?-7fb34t0u7s; ≠ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴 +xn--jndx718cnnl.xn--?-7fb34t0u7s; ≠ႷᠤႫ.?\u034C\u0633觴; [B1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴 +=\u0338ⴗᠤⴋ。?\u034C\u0633觴; ≠ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴 +≠ⴗᠤⴋ。?\u034C\u0633觴; ≠ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴 +≠Ⴗᠤⴋ。?\u034C\u0633觴; ≠Ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴 +=\u0338Ⴗᠤⴋ。?\u034C\u0633觴; ≠Ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴 +xn--vnd619as6ig6k.?\u034C\u0633觴; ≠Ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴 +XN--VND619AS6IG6K.?\u034C\u0633觴; ≠Ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴 +Xn--Vnd619as6ig6k.?\u034C\u0633觴; ≠Ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴 +xn--66e353ce0ilb.?\u034C\u0633觴; ≠ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴 +XN--66E353CE0ILB.?\u034C\u0633觴; ≠ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴 +Xn--66e353ce0ilb.?\u034C\u0633觴; ≠ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴 +xn--jndx718cnnl.?\u034C\u0633觴; ≠ႷᠤႫ.?\u034C\u0633觴; [B1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴 +XN--JNDX718CNNL.?\u034C\u0633觴; ≠ႷᠤႫ.?\u034C\u0633觴; [B1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴 +Xn--Jndx718cnnl.?\u034C\u0633觴; ≠ႷᠤႫ.?\u034C\u0633觴; [B1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴 +\u0667.; ; [B1, V6]; xn--gib.xn--vm9c; ; ; # ٧. +xn--gib.xn--vm9c; \u0667.; [B1, V6]; xn--gib.xn--vm9c; ; ; # ٧. +\uA9C0𝟯。\u200D𐹪\u1BF3; \uA9C03.\u200D𐹪\u1BF3; [B1, C2, V5, V6]; xn--3-5z4e.xn--1zf96ony8ygd68c; ; xn--3-5z4e.xn--1zfz754hncv8b; [B5, V5, V6] # ꧀3.𐹪᯳ +\uA9C03。\u200D𐹪\u1BF3; \uA9C03.\u200D𐹪\u1BF3; [B1, C2, V5, V6]; xn--3-5z4e.xn--1zf96ony8ygd68c; ; xn--3-5z4e.xn--1zfz754hncv8b; [B5, V5, V6] # ꧀3.𐹪᯳ +xn--3-5z4e.xn--1zfz754hncv8b; \uA9C03.𐹪\u1BF3; [B5, V5, V6]; xn--3-5z4e.xn--1zfz754hncv8b; ; ; # ꧀3.𐹪᯳ +xn--3-5z4e.xn--1zf96ony8ygd68c; \uA9C03.\u200D𐹪\u1BF3; [B1, C2, V5, V6]; xn--3-5z4e.xn--1zf96ony8ygd68c; ; ; # ꧀3.𐹪᯳ +4.≯\u0664𑀾; ; [B1, V6]; xn--4-fg85dl688i.xn--dib174li86ntdy0i; ; ; # 4.≯٤𑀾 +4.>\u0338\u0664𑀾; 4.≯\u0664𑀾; [B1, V6]; xn--4-fg85dl688i.xn--dib174li86ntdy0i; ; ; # 4.≯٤𑀾 +xn--4-fg85dl688i.xn--dib174li86ntdy0i; 4.≯\u0664𑀾; [B1, V6]; xn--4-fg85dl688i.xn--dib174li86ntdy0i; ; ; # 4.≯٤𑀾 +𝟯。⒈\u1A76𝟚; 3.⒈\u1A762; [V6]; xn--3-rj42h.xn--2-13k746cq465x; ; ; # 3.⒈᩶2 +3。1.\u1A762; 3.1.\u1A762; [V5, V6]; xn--3-rj42h.1.xn--2-13k96240l; ; ; # 3.1.᩶2 +xn--3-rj42h.1.xn--2-13k96240l; 3.1.\u1A762; [V5, V6]; xn--3-rj42h.1.xn--2-13k96240l; ; ; # 3.1.᩶2 +xn--3-rj42h.xn--2-13k746cq465x; 3.⒈\u1A762; [V6]; xn--3-rj42h.xn--2-13k746cq465x; ; ; # 3.⒈᩶2 +\u200D₅⒈。≯𝟴\u200D; \u200D5⒈.≯8\u200D; [C2, V6]; xn--5-tgnz5r.xn--8-ugn00i; ; xn--5-ecp.xn--8-ogo; [V6] # 5⒈.≯8 +\u200D₅⒈。>\u0338𝟴\u200D; \u200D5⒈.≯8\u200D; [C2, V6]; xn--5-tgnz5r.xn--8-ugn00i; ; xn--5-ecp.xn--8-ogo; [V6] # 5⒈.≯8 +\u200D51.。≯8\u200D; \u200D51..≯8\u200D; [C2, X4_2]; xn--51-l1t..xn--8-ugn00i; [C2, A4_2]; 51..xn--8-ogo; [A4_2] # 51..≯8 +\u200D51.。>\u03388\u200D; \u200D51..≯8\u200D; [C2, X4_2]; xn--51-l1t..xn--8-ugn00i; [C2, A4_2]; 51..xn--8-ogo; [A4_2] # 51..≯8 +51..xn--8-ogo; 51..≯8; [X4_2]; 51..xn--8-ogo; [A4_2]; ; # 51..≯8 +xn--51-l1t..xn--8-ugn00i; \u200D51..≯8\u200D; [C2, X4_2]; xn--51-l1t..xn--8-ugn00i; [C2, A4_2]; ; # 51..≯8 +xn--5-ecp.xn--8-ogo; 5⒈.≯8; [V6]; xn--5-ecp.xn--8-ogo; ; ; # 5⒈.≯8 +xn--5-tgnz5r.xn--8-ugn00i; \u200D5⒈.≯8\u200D; [C2, V6]; xn--5-tgnz5r.xn--8-ugn00i; ; ; # 5⒈.≯8 +ꡰ\u0697\u1086.\u072F≠\u200C; ꡰ\u0697\u1086.\u072F≠\u200C; [B5, B6, C1, V6]; xn--tjb002cn51k.xn--5nb448jcubcz547b; ; xn--tjb002cn51k.xn--5nb630lbj91q; [B5, B6, V6] # ꡰڗႆ.ܯ≠ +ꡰ\u0697\u1086.\u072F=\u0338\u200C; ꡰ\u0697\u1086.\u072F≠\u200C; [B5, B6, C1, V6]; xn--tjb002cn51k.xn--5nb448jcubcz547b; ; xn--tjb002cn51k.xn--5nb630lbj91q; [B5, B6, V6] # ꡰڗႆ.ܯ≠ +ꡰ\u0697\u1086.\u072F≠\u200C; ; [B5, B6, C1, V6]; xn--tjb002cn51k.xn--5nb448jcubcz547b; ; xn--tjb002cn51k.xn--5nb630lbj91q; [B5, B6, V6] # ꡰڗႆ.ܯ≠ +ꡰ\u0697\u1086.\u072F=\u0338\u200C; ꡰ\u0697\u1086.\u072F≠\u200C; [B5, B6, C1, V6]; xn--tjb002cn51k.xn--5nb448jcubcz547b; ; xn--tjb002cn51k.xn--5nb630lbj91q; [B5, B6, V6] # ꡰڗႆ.ܯ≠ +xn--tjb002cn51k.xn--5nb630lbj91q; ꡰ\u0697\u1086.\u072F≠; [B5, B6, V6]; xn--tjb002cn51k.xn--5nb630lbj91q; ; ; # ꡰڗႆ.ܯ≠ +xn--tjb002cn51k.xn--5nb448jcubcz547b; ꡰ\u0697\u1086.\u072F≠\u200C; [B5, B6, C1, V6]; xn--tjb002cn51k.xn--5nb448jcubcz547b; ; ; # ꡰڗႆ.ܯ≠ +𑄱。𐹵; 𑄱.𐹵; [B1, B5, B6, V5, V6]; xn--t80d.xn--to0d14792b; ; ; # 𑄱.𐹵 +𑄱。𐹵; 𑄱.𐹵; [B1, B5, B6, V5, V6]; xn--t80d.xn--to0d14792b; ; ; # 𑄱.𐹵 +xn--t80d.xn--to0d14792b; 𑄱.𐹵; [B1, B5, B6, V5, V6]; xn--t80d.xn--to0d14792b; ; ; # 𑄱.𐹵 +𝟥\u0600。\u073D; 3\u0600.\u073D; [B1, V5, V6]; xn--3-rkc.xn--kob; ; ; # 3.ܽ +3\u0600。\u073D; 3\u0600.\u073D; [B1, V5, V6]; xn--3-rkc.xn--kob; ; ; # 3.ܽ +xn--3-rkc.xn--kob; 3\u0600.\u073D; [B1, V5, V6]; xn--3-rkc.xn--kob; ; ; # 3.ܽ +\u0637𐹣\u0666.\u076D긷; ; [B2, B3]; xn--2gb8gu829f.xn--xpb0156f; ; ; # ط𐹣٦.ݭ긷 +\u0637𐹣\u0666.\u076D긷; \u0637𐹣\u0666.\u076D긷; [B2, B3]; xn--2gb8gu829f.xn--xpb0156f; ; ; # ط𐹣٦.ݭ긷 +xn--2gb8gu829f.xn--xpb0156f; \u0637𐹣\u0666.\u076D긷; [B2, B3]; xn--2gb8gu829f.xn--xpb0156f; ; ; # ط𐹣٦.ݭ긷 +︒Ↄ\u2DE7.Ⴗ; ︒Ↄ\u2DE7.Ⴗ; [B1, B5, B6, V6]; xn--q5g000c056n0226g.xn--vnd8618j; ; ; # ︒Ↄⷧ.Ⴗ +。Ↄ\u2DE7.Ⴗ; .Ↄ\u2DE7.Ⴗ; [B5, B6, V6, X4_2]; .xn--q5g000cll06u.xn--vnd8618j; [B5, B6, V6, A4_2]; ; # .Ↄⷧ.Ⴗ +。ↄ\u2DE7.ⴗ; .ↄ\u2DE7.ⴗ; [B5, B6, V6, X4_2]; .xn--r5gy00cll06u.xn--flj4541e; [B5, B6, V6, A4_2]; ; # .ↄⷧ.ⴗ +.xn--r5gy00cll06u.xn--flj4541e; .ↄ\u2DE7.ⴗ; [B5, B6, V6, X4_2]; .xn--r5gy00cll06u.xn--flj4541e; [B5, B6, V6, A4_2]; ; # .ↄⷧ.ⴗ +.xn--q5g000cll06u.xn--vnd8618j; .Ↄ\u2DE7.Ⴗ; [B5, B6, V6, X4_2]; .xn--q5g000cll06u.xn--vnd8618j; [B5, B6, V6, A4_2]; ; # .Ↄⷧ.Ⴗ +︒ↄ\u2DE7.ⴗ; ︒ↄ\u2DE7.ⴗ; [B1, B5, B6, V6]; xn--r5gy00c056n0226g.xn--flj4541e; ; ; # ︒ↄⷧ.ⴗ +xn--r5gy00c056n0226g.xn--flj4541e; ︒ↄ\u2DE7.ⴗ; [B1, B5, B6, V6]; xn--r5gy00c056n0226g.xn--flj4541e; ; ; # ︒ↄⷧ.ⴗ +xn--q5g000c056n0226g.xn--vnd8618j; ︒Ↄ\u2DE7.Ⴗ; [B1, B5, B6, V6]; xn--q5g000c056n0226g.xn--vnd8618j; ; ; # ︒Ↄⷧ.Ⴗ +\u0600.\u05B1; ; [B1, V5, V6]; xn--ifb.xn--8cb; ; ; # .ֱ +xn--ifb.xn--8cb; \u0600.\u05B1; [B1, V5, V6]; xn--ifb.xn--8cb; ; ; # .ֱ +ς≯。𐹽; ς≯.𐹽; [B1, B6]; xn--3xa028m.xn--1o0d; ; xn--4xa818m.xn--1o0d; # ς≯.𐹽 +ς>\u0338。𐹽; ς≯.𐹽; [B1, B6]; xn--3xa028m.xn--1o0d; ; xn--4xa818m.xn--1o0d; # ς≯.𐹽 +ς≯。𐹽; ς≯.𐹽; [B1, B6]; xn--3xa028m.xn--1o0d; ; xn--4xa818m.xn--1o0d; # ς≯.𐹽 +ς>\u0338。𐹽; ς≯.𐹽; [B1, B6]; xn--3xa028m.xn--1o0d; ; xn--4xa818m.xn--1o0d; # ς≯.𐹽 +Σ>\u0338。𐹽; σ≯.𐹽; [B1, B6]; xn--4xa818m.xn--1o0d; ; ; # σ≯.𐹽 +Σ≯。𐹽; σ≯.𐹽; [B1, B6]; xn--4xa818m.xn--1o0d; ; ; # σ≯.𐹽 +σ≯。𐹽; σ≯.𐹽; [B1, B6]; xn--4xa818m.xn--1o0d; ; ; # σ≯.𐹽 +σ>\u0338。𐹽; σ≯.𐹽; [B1, B6]; xn--4xa818m.xn--1o0d; ; ; # σ≯.𐹽 +xn--4xa818m.xn--1o0d; σ≯.𐹽; [B1, B6]; xn--4xa818m.xn--1o0d; ; ; # σ≯.𐹽 +xn--3xa028m.xn--1o0d; ς≯.𐹽; [B1, B6]; xn--3xa028m.xn--1o0d; ; ; # ς≯.𐹽 +Σ>\u0338。𐹽; σ≯.𐹽; [B1, B6]; xn--4xa818m.xn--1o0d; ; ; # σ≯.𐹽 +Σ≯。𐹽; σ≯.𐹽; [B1, B6]; xn--4xa818m.xn--1o0d; ; ; # σ≯.𐹽 +σ≯。𐹽; σ≯.𐹽; [B1, B6]; xn--4xa818m.xn--1o0d; ; ; # σ≯.𐹽 +σ>\u0338。𐹽; σ≯.𐹽; [B1, B6]; xn--4xa818m.xn--1o0d; ; ; # σ≯.𐹽 +\u17D2\u200D\u075F。𐹶; \u17D2\u200D\u075F.𐹶; [B1, V5]; xn--jpb535fv9f.xn--uo0d; ; xn--jpb535f.xn--uo0d; # ្ݟ.𐹶 +xn--jpb535f.xn--uo0d; \u17D2\u075F.𐹶; [B1, V5]; xn--jpb535f.xn--uo0d; ; ; # ្ݟ.𐹶 +xn--jpb535fv9f.xn--uo0d; \u17D2\u200D\u075F.𐹶; [B1, V5]; xn--jpb535fv9f.xn--uo0d; ; ; # ្ݟ.𐹶 +\u0A42Ⴊ.≮; ; [V6]; xn--nbc493aro75ggskb.xn--gdh; ; ; # ੂႪ.≮ +\u0A42Ⴊ.<\u0338; \u0A42Ⴊ.≮; [V6]; xn--nbc493aro75ggskb.xn--gdh; ; ; # ੂႪ.≮ +\u0A42ⴊ.<\u0338; \u0A42ⴊ.≮; [V6]; xn--nbc229o4y27dgskb.xn--gdh; ; ; # ੂⴊ.≮ +\u0A42ⴊ.≮; ; [V6]; xn--nbc229o4y27dgskb.xn--gdh; ; ; # ੂⴊ.≮ +xn--nbc229o4y27dgskb.xn--gdh; \u0A42ⴊ.≮; [V6]; xn--nbc229o4y27dgskb.xn--gdh; ; ; # ੂⴊ.≮ +xn--nbc493aro75ggskb.xn--gdh; \u0A42Ⴊ.≮; [V6]; xn--nbc493aro75ggskb.xn--gdh; ; ; # ੂႪ.≮ +ꡠ.۲; ꡠ.۲; ; xn--5c9a.xn--fmb; ; ; # ꡠ.۲ +ꡠ.۲; ; ; xn--5c9a.xn--fmb; ; ; # ꡠ.۲ +xn--5c9a.xn--fmb; ꡠ.۲; ; xn--5c9a.xn--fmb; ; ; # ꡠ.۲ +𐹣。ꡬ🄄; 𐹣.ꡬ🄄; [B1, V6]; xn--bo0d0203l.xn--id9a4443d; ; ; # 𐹣.ꡬ🄄 +𐹣。ꡬ3,; 𐹣.ꡬ3,; [B1, B6, V6]; xn--bo0d0203l.xn--3,-yj9h; ; ; # 𐹣.ꡬ3, +xn--bo0d0203l.xn--3,-yj9h; 𐹣.ꡬ3,; [B1, B6, V6]; xn--bo0d0203l.xn--3,-yj9h; ; ; # 𐹣.ꡬ3, +xn--bo0d0203l.xn--id9a4443d; 𐹣.ꡬ🄄; [B1, V6]; xn--bo0d0203l.xn--id9a4443d; ; ; # 𐹣.ꡬ🄄 +-\u0C4D𑲓。\u200D\u0D4D; -\u0C4D𑲓.\u200D\u0D4D; [B1, C2, V3, V6]; xn----x6e0220sclug.xn--wxc317g; ; xn----x6e0220sclug.xn--wxc; [B1, V3, V5, V6] # -్𑲓.് +-\u0C4D𑲓。\u200D\u0D4D; -\u0C4D𑲓.\u200D\u0D4D; [B1, C2, V3, V6]; xn----x6e0220sclug.xn--wxc317g; ; xn----x6e0220sclug.xn--wxc; [B1, V3, V5, V6] # -్𑲓.് +xn----x6e0220sclug.xn--wxc; -\u0C4D𑲓.\u0D4D; [B1, V3, V5, V6]; xn----x6e0220sclug.xn--wxc; ; ; # -్𑲓.് +xn----x6e0220sclug.xn--wxc317g; -\u0C4D𑲓.\u200D\u0D4D; [B1, C2, V3, V6]; xn----x6e0220sclug.xn--wxc317g; ; ; # -్𑲓.് +\uA67D\u200C霣🄆。\u200C𑁂\u1B01; \uA67D\u200C霣🄆.\u200C𑁂\u1B01; [C1, V5, V6]; xn--0ug4208b2vjuk63a.xn--4sf36u6u4w; ; xn--2q5a751a653w.xn--4sf0725i; [V5, V6] # ꙽霣🄆.𑁂ᬁ +\uA67D\u200C霣🄆。\u200C𑁂\u1B01; \uA67D\u200C霣🄆.\u200C𑁂\u1B01; [C1, V5, V6]; xn--0ug4208b2vjuk63a.xn--4sf36u6u4w; ; xn--2q5a751a653w.xn--4sf0725i; [V5, V6] # ꙽霣🄆.𑁂ᬁ +\uA67D\u200C霣5,。\u200C𑁂\u1B01; \uA67D\u200C霣5,.\u200C𑁂\u1B01; [C1, V5, V6]; xn--5,-i1tz135dnbqa.xn--4sf36u6u4w; ; xn--5,-op8g373c.xn--4sf0725i; [V5, V6] # ꙽霣5,.𑁂ᬁ +xn--5,-op8g373c.xn--4sf0725i; \uA67D霣5,.𑁂\u1B01; [V5, V6]; xn--5,-op8g373c.xn--4sf0725i; ; ; # ꙽霣5,.𑁂ᬁ +xn--5,-i1tz135dnbqa.xn--4sf36u6u4w; \uA67D\u200C霣5,.\u200C𑁂\u1B01; [C1, V5, V6]; xn--5,-i1tz135dnbqa.xn--4sf36u6u4w; ; ; # ꙽霣5,.𑁂ᬁ +xn--2q5a751a653w.xn--4sf0725i; \uA67D霣🄆.𑁂\u1B01; [V5, V6]; xn--2q5a751a653w.xn--4sf0725i; ; ; # ꙽霣🄆.𑁂ᬁ +xn--0ug4208b2vjuk63a.xn--4sf36u6u4w; \uA67D\u200C霣🄆.\u200C𑁂\u1B01; [C1, V5, V6]; xn--0ug4208b2vjuk63a.xn--4sf36u6u4w; ; ; # ꙽霣🄆.𑁂ᬁ +兎。ᠼ𑚶𑰿; 兎.ᠼ𑚶𑰿; [V6]; xn--b5q.xn--v7e6041kqqd4m251b; ; ; # 兎.ᠼ𑚶𑰿 +兎。ᠼ𑚶𑰿; 兎.ᠼ𑚶𑰿; [V6]; xn--b5q.xn--v7e6041kqqd4m251b; ; ; # 兎.ᠼ𑚶𑰿 +xn--b5q.xn--v7e6041kqqd4m251b; 兎.ᠼ𑚶𑰿; [V6]; xn--b5q.xn--v7e6041kqqd4m251b; ; ; # 兎.ᠼ𑚶𑰿 +𝟙。\u200D𝟸\u200D⁷; 1.\u200D2\u200D7; [C2]; 1.xn--27-l1tb; ; 1.27; [] # 1.27 +1。\u200D2\u200D7; 1.\u200D2\u200D7; [C2]; 1.xn--27-l1tb; ; 1.27; [] # 1.27 +1.27; ; ; ; ; ; # 1.27 +1.xn--27-l1tb; 1.\u200D2\u200D7; [C2]; 1.xn--27-l1tb; ; ; # 1.27 +ᡨ-。𝟷; ᡨ-.1; [V3, V6]; xn----z8j.xn--1-5671m; ; ; # ᡨ-.1 +ᡨ-。1; ᡨ-.1; [V3, V6]; xn----z8j.xn--1-5671m; ; ; # ᡨ-.1 +xn----z8j.xn--1-5671m; ᡨ-.1; [V3, V6]; xn----z8j.xn--1-5671m; ; ; # ᡨ-.1 +𑰻𐫚.\u0668⁹; 𑰻𐫚.\u06689; [B1, V5, V6]; xn--gx9cr01aul57i.xn--9-oqc; ; ; # 𑰻𐫚.٨9 +𑰻𐫚.\u06689; ; [B1, V5, V6]; xn--gx9cr01aul57i.xn--9-oqc; ; ; # 𑰻𐫚.٨9 +xn--gx9cr01aul57i.xn--9-oqc; 𑰻𐫚.\u06689; [B1, V5, V6]; xn--gx9cr01aul57i.xn--9-oqc; ; ; # 𑰻𐫚.٨9 +Ⴜ\u0F80⾇。Ⴏ♀\u200C\u200C; Ⴜ\u0F80舛.Ⴏ♀\u200C\u200C; [C1, V6]; xn--zed54dz10wo343g.xn--nnd089ea464d; ; xn--zed54dz10wo343g.xn--nnd651i; [V6] # Ⴜྀ舛.Ⴏ♀ +Ⴜ\u0F80舛。Ⴏ♀\u200C\u200C; Ⴜ\u0F80舛.Ⴏ♀\u200C\u200C; [C1, V6]; xn--zed54dz10wo343g.xn--nnd089ea464d; ; xn--zed54dz10wo343g.xn--nnd651i; [V6] # Ⴜྀ舛.Ⴏ♀ +ⴜ\u0F80舛。ⴏ♀\u200C\u200C; ⴜ\u0F80舛.ⴏ♀\u200C\u200C; [C1, V6]; xn--zed372mdj2do3v4h.xn--0uga678bgyh; ; xn--zed372mdj2do3v4h.xn--e5h11w; [V6] # ⴜྀ舛.ⴏ♀ +xn--zed372mdj2do3v4h.xn--e5h11w; ⴜ\u0F80舛.ⴏ♀; [V6]; xn--zed372mdj2do3v4h.xn--e5h11w; ; ; # ⴜྀ舛.ⴏ♀ +xn--zed372mdj2do3v4h.xn--0uga678bgyh; ⴜ\u0F80舛.ⴏ♀\u200C\u200C; [C1, V6]; xn--zed372mdj2do3v4h.xn--0uga678bgyh; ; ; # ⴜྀ舛.ⴏ♀ +xn--zed54dz10wo343g.xn--nnd651i; Ⴜ\u0F80舛.Ⴏ♀; [V6]; xn--zed54dz10wo343g.xn--nnd651i; ; ; # Ⴜྀ舛.Ⴏ♀ +xn--zed54dz10wo343g.xn--nnd089ea464d; Ⴜ\u0F80舛.Ⴏ♀\u200C\u200C; [C1, V6]; xn--zed54dz10wo343g.xn--nnd089ea464d; ; ; # Ⴜྀ舛.Ⴏ♀ +ⴜ\u0F80⾇。ⴏ♀\u200C\u200C; ⴜ\u0F80舛.ⴏ♀\u200C\u200C; [C1, V6]; xn--zed372mdj2do3v4h.xn--0uga678bgyh; ; xn--zed372mdj2do3v4h.xn--e5h11w; [V6] # ⴜྀ舛.ⴏ♀ +𑁆𝟰.\u200D; 𑁆4.\u200D; [C2, V5]; xn--4-xu7i.xn--1ug; ; xn--4-xu7i.; [V5] # 𑁆4. +𑁆4.\u200D; ; [C2, V5]; xn--4-xu7i.xn--1ug; ; xn--4-xu7i.; [V5] # 𑁆4. +xn--4-xu7i.; 𑁆4.; [V5]; xn--4-xu7i.; ; ; # 𑁆4. +xn--4-xu7i.xn--1ug; 𑁆4.\u200D; [C2, V5]; xn--4-xu7i.xn--1ug; ; ; # 𑁆4. +Ⴞ癀。𑘿\u200D\u200C붼; Ⴞ癀.𑘿\u200D\u200C붼; [C1, V5, V6]; xn--2nd6803c7q37d.xn--0ugb6122js83c; ; xn--2nd6803c7q37d.xn--et3bn23n; [V5, V6] # Ⴞ癀.𑘿붼 +Ⴞ癀。𑘿\u200D\u200C붼; Ⴞ癀.𑘿\u200D\u200C붼; [C1, V5, V6]; xn--2nd6803c7q37d.xn--0ugb6122js83c; ; xn--2nd6803c7q37d.xn--et3bn23n; [V5, V6] # Ⴞ癀.𑘿붼 +Ⴞ癀。𑘿\u200D\u200C붼; Ⴞ癀.𑘿\u200D\u200C붼; [C1, V5, V6]; xn--2nd6803c7q37d.xn--0ugb6122js83c; ; xn--2nd6803c7q37d.xn--et3bn23n; [V5, V6] # Ⴞ癀.𑘿붼 +Ⴞ癀。𑘿\u200D\u200C붼; Ⴞ癀.𑘿\u200D\u200C붼; [C1, V5, V6]; xn--2nd6803c7q37d.xn--0ugb6122js83c; ; xn--2nd6803c7q37d.xn--et3bn23n; [V5, V6] # Ⴞ癀.𑘿붼 +ⴞ癀。𑘿\u200D\u200C붼; ⴞ癀.𑘿\u200D\u200C붼; [C1, V5, V6]; xn--mlju35u7qx2f.xn--0ugb6122js83c; ; xn--mlju35u7qx2f.xn--et3bn23n; [V5, V6] # ⴞ癀.𑘿붼 +ⴞ癀。𑘿\u200D\u200C붼; ⴞ癀.𑘿\u200D\u200C붼; [C1, V5, V6]; xn--mlju35u7qx2f.xn--0ugb6122js83c; ; xn--mlju35u7qx2f.xn--et3bn23n; [V5, V6] # ⴞ癀.𑘿붼 +xn--mlju35u7qx2f.xn--et3bn23n; ⴞ癀.𑘿붼; [V5, V6]; xn--mlju35u7qx2f.xn--et3bn23n; ; ; # ⴞ癀.𑘿붼 +xn--mlju35u7qx2f.xn--0ugb6122js83c; ⴞ癀.𑘿\u200D\u200C붼; [C1, V5, V6]; xn--mlju35u7qx2f.xn--0ugb6122js83c; ; ; # ⴞ癀.𑘿붼 +xn--2nd6803c7q37d.xn--et3bn23n; Ⴞ癀.𑘿붼; [V5, V6]; xn--2nd6803c7q37d.xn--et3bn23n; ; ; # Ⴞ癀.𑘿붼 +xn--2nd6803c7q37d.xn--0ugb6122js83c; Ⴞ癀.𑘿\u200D\u200C붼; [C1, V5, V6]; xn--2nd6803c7q37d.xn--0ugb6122js83c; ; ; # Ⴞ癀.𑘿붼 +ⴞ癀。𑘿\u200D\u200C붼; ⴞ癀.𑘿\u200D\u200C붼; [C1, V5, V6]; xn--mlju35u7qx2f.xn--0ugb6122js83c; ; xn--mlju35u7qx2f.xn--et3bn23n; [V5, V6] # ⴞ癀.𑘿붼 +ⴞ癀。𑘿\u200D\u200C붼; ⴞ癀.𑘿\u200D\u200C붼; [C1, V5, V6]; xn--mlju35u7qx2f.xn--0ugb6122js83c; ; xn--mlju35u7qx2f.xn--et3bn23n; [V5, V6] # ⴞ癀.𑘿붼 +-\u0BCD。\u06B9; -\u0BCD.\u06B9; [B6, V6]; xn----mze84808x.xn--skb; ; ; # -்.ڹ +xn----mze84808x.xn--skb; -\u0BCD.\u06B9; [B6, V6]; xn----mze84808x.xn--skb; ; ; # -்.ڹ +ᡃ𝟧≯ᠣ.氁ꁫ; ᡃ5≯ᠣ.氁ꁫ; [V6]; xn--5-24jyf768b.xn--lqw213ime95g; ; ; # ᡃ5≯ᠣ.氁ꁫ +ᡃ𝟧>\u0338ᠣ.氁ꁫ; ᡃ5≯ᠣ.氁ꁫ; [V6]; xn--5-24jyf768b.xn--lqw213ime95g; ; ; # ᡃ5≯ᠣ.氁ꁫ +ᡃ5≯ᠣ.氁ꁫ; ; [V6]; xn--5-24jyf768b.xn--lqw213ime95g; ; ; # ᡃ5≯ᠣ.氁ꁫ +ᡃ5>\u0338ᠣ.氁ꁫ; ᡃ5≯ᠣ.氁ꁫ; [V6]; xn--5-24jyf768b.xn--lqw213ime95g; ; ; # ᡃ5≯ᠣ.氁ꁫ +xn--5-24jyf768b.xn--lqw213ime95g; ᡃ5≯ᠣ.氁ꁫ; [V6]; xn--5-24jyf768b.xn--lqw213ime95g; ; ; # ᡃ5≯ᠣ.氁ꁫ +𐹬𝩇.\u0F76; 𐹬𝩇.\u0FB2\u0F80; [B1, V5]; xn--ko0d8295a.xn--zed3h; ; ; # 𐹬𝩇.ྲྀ +𐹬𝩇.\u0FB2\u0F80; 𐹬𝩇.\u0FB2\u0F80; [B1, V5]; xn--ko0d8295a.xn--zed3h; ; ; # 𐹬𝩇.ྲྀ +𐹬𝩇.\u0FB2\u0F80; ; [B1, V5]; xn--ko0d8295a.xn--zed3h; ; ; # 𐹬𝩇.ྲྀ +xn--ko0d8295a.xn--zed3h; 𐹬𝩇.\u0FB2\u0F80; [B1, V5]; xn--ko0d8295a.xn--zed3h; ; ; # 𐹬𝩇.ྲྀ +-𑈶⒏.⒎𰛢; -𑈶⒏.⒎𰛢; [V3, V6]; xn----scp6252h.xn--zshy411yzpx2d; ; ; # -𑈶⒏.⒎𰛢 +-𑈶8..7.𰛢; ; [V3, V6, X4_2]; xn---8-bv5o..7.xn--c35nf1622b; [V3, V6, A4_2]; ; # -𑈶8..7.𰛢 +xn---8-bv5o..7.xn--c35nf1622b; -𑈶8..7.𰛢; [V3, V6, X4_2]; xn---8-bv5o..7.xn--c35nf1622b; [V3, V6, A4_2]; ; # -𑈶8..7.𰛢 +xn----scp6252h.xn--zshy411yzpx2d; -𑈶⒏.⒎𰛢; [V3, V6]; xn----scp6252h.xn--zshy411yzpx2d; ; ; # -𑈶⒏.⒎𰛢 +\u200CႡ畝\u200D.≮; \u200CႡ畝\u200D.≮; [C1, C2, V6]; xn--8md700fea3748f.xn--gdh; ; xn--8md0962c.xn--gdh; [V6] # Ⴁ畝.≮ +\u200CႡ畝\u200D.<\u0338; \u200CႡ畝\u200D.≮; [C1, C2, V6]; xn--8md700fea3748f.xn--gdh; ; xn--8md0962c.xn--gdh; [V6] # Ⴁ畝.≮ +\u200CႡ畝\u200D.≮; ; [C1, C2, V6]; xn--8md700fea3748f.xn--gdh; ; xn--8md0962c.xn--gdh; [V6] # Ⴁ畝.≮ +\u200CႡ畝\u200D.<\u0338; \u200CႡ畝\u200D.≮; [C1, C2, V6]; xn--8md700fea3748f.xn--gdh; ; xn--8md0962c.xn--gdh; [V6] # Ⴁ畝.≮ +\u200Cⴁ畝\u200D.<\u0338; \u200Cⴁ畝\u200D.≮; [C1, C2]; xn--0ugc160hb36e.xn--gdh; ; xn--skjy82u.xn--gdh; [] # ⴁ畝.≮ +\u200Cⴁ畝\u200D.≮; ; [C1, C2]; xn--0ugc160hb36e.xn--gdh; ; xn--skjy82u.xn--gdh; [] # ⴁ畝.≮ +xn--skjy82u.xn--gdh; ⴁ畝.≮; ; xn--skjy82u.xn--gdh; ; ; # ⴁ畝.≮ +ⴁ畝.≮; ; ; xn--skjy82u.xn--gdh; ; ; # ⴁ畝.≮ +ⴁ畝.<\u0338; ⴁ畝.≮; ; xn--skjy82u.xn--gdh; ; ; # ⴁ畝.≮ +Ⴁ畝.<\u0338; Ⴁ畝.≮; [V6]; xn--8md0962c.xn--gdh; ; ; # Ⴁ畝.≮ +Ⴁ畝.≮; ; [V6]; xn--8md0962c.xn--gdh; ; ; # Ⴁ畝.≮ +xn--8md0962c.xn--gdh; Ⴁ畝.≮; [V6]; xn--8md0962c.xn--gdh; ; ; # Ⴁ畝.≮ +xn--0ugc160hb36e.xn--gdh; \u200Cⴁ畝\u200D.≮; [C1, C2]; xn--0ugc160hb36e.xn--gdh; ; ; # ⴁ畝.≮ +xn--8md700fea3748f.xn--gdh; \u200CႡ畝\u200D.≮; [C1, C2, V6]; xn--8md700fea3748f.xn--gdh; ; ; # Ⴁ畝.≮ +\u200Cⴁ畝\u200D.<\u0338; \u200Cⴁ畝\u200D.≮; [C1, C2]; xn--0ugc160hb36e.xn--gdh; ; xn--skjy82u.xn--gdh; [] # ⴁ畝.≮ +\u200Cⴁ畝\u200D.≮; \u200Cⴁ畝\u200D.≮; [C1, C2]; xn--0ugc160hb36e.xn--gdh; ; xn--skjy82u.xn--gdh; [] # ⴁ畝.≮ +歷。𐹻≯\u200D; 歷.𐹻≯\u200D; [B1, C2, V6]; xn--nmw.xn--1ugx6gs128a1134j; ; xn--nmw.xn--hdh7804gdms2h; [B1, V6] # 歷.𐹻≯ +歷。𐹻>\u0338\u200D; 歷.𐹻≯\u200D; [B1, C2, V6]; xn--nmw.xn--1ugx6gs128a1134j; ; xn--nmw.xn--hdh7804gdms2h; [B1, V6] # 歷.𐹻≯ +歷。𐹻≯\u200D; 歷.𐹻≯\u200D; [B1, C2, V6]; xn--nmw.xn--1ugx6gs128a1134j; ; xn--nmw.xn--hdh7804gdms2h; [B1, V6] # 歷.𐹻≯ +歷。𐹻>\u0338\u200D; 歷.𐹻≯\u200D; [B1, C2, V6]; xn--nmw.xn--1ugx6gs128a1134j; ; xn--nmw.xn--hdh7804gdms2h; [B1, V6] # 歷.𐹻≯ +xn--nmw.xn--hdh7804gdms2h; 歷.𐹻≯; [B1, V6]; xn--nmw.xn--hdh7804gdms2h; ; ; # 歷.𐹻≯ +xn--nmw.xn--1ugx6gs128a1134j; 歷.𐹻≯\u200D; [B1, C2, V6]; xn--nmw.xn--1ugx6gs128a1134j; ; ; # 歷.𐹻≯ +\u0ECB\u200D.鎁; \u0ECB\u200D.鎁; [C2, V5, V6]; xn--t8c059f.xn--iz4a43209d; ; xn--t8c.xn--iz4a43209d; [V5, V6] # ໋.鎁 +\u0ECB\u200D.鎁; ; [C2, V5, V6]; xn--t8c059f.xn--iz4a43209d; ; xn--t8c.xn--iz4a43209d; [V5, V6] # ໋.鎁 +xn--t8c.xn--iz4a43209d; \u0ECB.鎁; [V5, V6]; xn--t8c.xn--iz4a43209d; ; ; # ໋.鎁 +xn--t8c059f.xn--iz4a43209d; \u0ECB\u200D.鎁; [C2, V5, V6]; xn--t8c059f.xn--iz4a43209d; ; ; # ໋.鎁 +\u200D\u200C𞤀。𱘅; \u200D\u200C𞤢.𱘅; [B1, B5, B6, C1, C2, V6]; xn--0ugb45126a.xn--wh0dj799f; ; xn--9d6h.xn--wh0dj799f; [B5, B6, V6] # 𞤢.𱘅 +\u200D\u200C𞤀。𱘅; \u200D\u200C𞤢.𱘅; [B1, B5, B6, C1, C2, V6]; xn--0ugb45126a.xn--wh0dj799f; ; xn--9d6h.xn--wh0dj799f; [B5, B6, V6] # 𞤢.𱘅 +\u200D\u200C𞤢。𱘅; \u200D\u200C𞤢.𱘅; [B1, B5, B6, C1, C2, V6]; xn--0ugb45126a.xn--wh0dj799f; ; xn--9d6h.xn--wh0dj799f; [B5, B6, V6] # 𞤢.𱘅 +xn--9d6h.xn--wh0dj799f; 𞤢.𱘅; [B5, B6, V6]; xn--9d6h.xn--wh0dj799f; ; ; # 𞤢.𱘅 +xn--0ugb45126a.xn--wh0dj799f; \u200D\u200C𞤢.𱘅; [B1, B5, B6, C1, C2, V6]; xn--0ugb45126a.xn--wh0dj799f; ; ; # 𞤢.𱘅 +\u200D\u200C𞤢。𱘅; \u200D\u200C𞤢.𱘅; [B1, B5, B6, C1, C2, V6]; xn--0ugb45126a.xn--wh0dj799f; ; xn--9d6h.xn--wh0dj799f; [B5, B6, V6] # 𞤢.𱘅 +\u0628≠𝟫-.ς⒍𐹦≠; \u0628≠9-.ς⒍𐹦≠; [B3, B5, B6, V3, V6]; xn--9--etd0100a.xn--3xa097mzpbzz04b; ; xn--9--etd0100a.xn--4xa887mzpbzz04b; # ب≠9-.ς⒍𐹦≠ +\u0628=\u0338𝟫-.ς⒍𐹦=\u0338; \u0628≠9-.ς⒍𐹦≠; [B3, B5, B6, V3, V6]; xn--9--etd0100a.xn--3xa097mzpbzz04b; ; xn--9--etd0100a.xn--4xa887mzpbzz04b; # ب≠9-.ς⒍𐹦≠ +\u0628≠9-.ς6.𐹦≠; ; [B1, B3, V3]; xn--9--etd0100a.xn--6-xmb.xn--1ch8704g; ; xn--9--etd0100a.xn--6-zmb.xn--1ch8704g; # ب≠9-.ς6.𐹦≠ +\u0628=\u03389-.ς6.𐹦=\u0338; \u0628≠9-.ς6.𐹦≠; [B1, B3, V3]; xn--9--etd0100a.xn--6-xmb.xn--1ch8704g; ; xn--9--etd0100a.xn--6-zmb.xn--1ch8704g; # ب≠9-.ς6.𐹦≠ +\u0628=\u03389-.Σ6.𐹦=\u0338; \u0628≠9-.σ6.𐹦≠; [B1, B3, V3]; xn--9--etd0100a.xn--6-zmb.xn--1ch8704g; ; ; # ب≠9-.σ6.𐹦≠ +\u0628≠9-.Σ6.𐹦≠; \u0628≠9-.σ6.𐹦≠; [B1, B3, V3]; xn--9--etd0100a.xn--6-zmb.xn--1ch8704g; ; ; # ب≠9-.σ6.𐹦≠ +\u0628≠9-.σ6.𐹦≠; ; [B1, B3, V3]; xn--9--etd0100a.xn--6-zmb.xn--1ch8704g; ; ; # ب≠9-.σ6.𐹦≠ +\u0628=\u03389-.σ6.𐹦=\u0338; \u0628≠9-.σ6.𐹦≠; [B1, B3, V3]; xn--9--etd0100a.xn--6-zmb.xn--1ch8704g; ; ; # ب≠9-.σ6.𐹦≠ +xn--9--etd0100a.xn--6-zmb.xn--1ch8704g; \u0628≠9-.σ6.𐹦≠; [B1, B3, V3]; xn--9--etd0100a.xn--6-zmb.xn--1ch8704g; ; ; # ب≠9-.σ6.𐹦≠ +xn--9--etd0100a.xn--6-xmb.xn--1ch8704g; \u0628≠9-.ς6.𐹦≠; [B1, B3, V3]; xn--9--etd0100a.xn--6-xmb.xn--1ch8704g; ; ; # ب≠9-.ς6.𐹦≠ +\u0628=\u0338𝟫-.Σ⒍𐹦=\u0338; \u0628≠9-.σ⒍𐹦≠; [B3, B5, B6, V3, V6]; xn--9--etd0100a.xn--4xa887mzpbzz04b; ; ; # ب≠9-.σ⒍𐹦≠ +\u0628≠𝟫-.Σ⒍𐹦≠; \u0628≠9-.σ⒍𐹦≠; [B3, B5, B6, V3, V6]; xn--9--etd0100a.xn--4xa887mzpbzz04b; ; ; # ب≠9-.σ⒍𐹦≠ +\u0628≠𝟫-.σ⒍𐹦≠; \u0628≠9-.σ⒍𐹦≠; [B3, B5, B6, V3, V6]; xn--9--etd0100a.xn--4xa887mzpbzz04b; ; ; # ب≠9-.σ⒍𐹦≠ +\u0628=\u0338𝟫-.σ⒍𐹦=\u0338; \u0628≠9-.σ⒍𐹦≠; [B3, B5, B6, V3, V6]; xn--9--etd0100a.xn--4xa887mzpbzz04b; ; ; # ب≠9-.σ⒍𐹦≠ +xn--9--etd0100a.xn--4xa887mzpbzz04b; \u0628≠9-.σ⒍𐹦≠; [B3, B5, B6, V3, V6]; xn--9--etd0100a.xn--4xa887mzpbzz04b; ; ; # ب≠9-.σ⒍𐹦≠ +xn--9--etd0100a.xn--3xa097mzpbzz04b; \u0628≠9-.ς⒍𐹦≠; [B3, B5, B6, V3, V6]; xn--9--etd0100a.xn--3xa097mzpbzz04b; ; ; # ب≠9-.ς⒍𐹦≠ +.-ᡢ\u0592𝨠; ; [V3, V6]; xn--ep37b.xn----hec165lho83b; ; ; # .-ᡢ֒𝨠 +xn--ep37b.xn----hec165lho83b; .-ᡢ\u0592𝨠; [V3, V6]; xn--ep37b.xn----hec165lho83b; ; ; # .-ᡢ֒𝨠 +\u06CB⒈ß󠄽。-; \u06CB⒈ß.-; [B2, B3, B6, V3, V6]; xn--zca541ato3a.xn----q001f; ; xn--ss-d7d6651a.xn----q001f; # ۋ⒈ß.- +\u06CB1.ß󠄽。-; \u06CB1.ß.-; [B6, V3, V6]; xn--1-cwc.xn--zca.xn----q001f; ; xn--1-cwc.ss.xn----q001f; # ۋ1.ß.- +\u06CB1.SS󠄽。-; \u06CB1.ss.-; [B6, V3, V6]; xn--1-cwc.ss.xn----q001f; ; ; # ۋ1.ss.- +\u06CB1.ss󠄽。-; \u06CB1.ss.-; [B6, V3, V6]; xn--1-cwc.ss.xn----q001f; ; ; # ۋ1.ss.- +\u06CB1.Ss󠄽。-; \u06CB1.ss.-; [B6, V3, V6]; xn--1-cwc.ss.xn----q001f; ; ; # ۋ1.ss.- +xn--1-cwc.ss.xn----q001f; \u06CB1.ss.-; [B6, V3, V6]; xn--1-cwc.ss.xn----q001f; ; ; # ۋ1.ss.- +xn--1-cwc.xn--zca.xn----q001f; \u06CB1.ß.-; [B6, V3, V6]; xn--1-cwc.xn--zca.xn----q001f; ; ; # ۋ1.ß.- +\u06CB⒈SS󠄽。-; \u06CB⒈ss.-; [B2, B3, B6, V3, V6]; xn--ss-d7d6651a.xn----q001f; ; ; # ۋ⒈ss.- +\u06CB⒈ss󠄽。-; \u06CB⒈ss.-; [B2, B3, B6, V3, V6]; xn--ss-d7d6651a.xn----q001f; ; ; # ۋ⒈ss.- +\u06CB⒈Ss󠄽。-; \u06CB⒈ss.-; [B2, B3, B6, V3, V6]; xn--ss-d7d6651a.xn----q001f; ; ; # ۋ⒈ss.- +xn--ss-d7d6651a.xn----q001f; \u06CB⒈ss.-; [B2, B3, B6, V3, V6]; xn--ss-d7d6651a.xn----q001f; ; ; # ۋ⒈ss.- +xn--zca541ato3a.xn----q001f; \u06CB⒈ß.-; [B2, B3, B6, V3, V6]; xn--zca541ato3a.xn----q001f; ; ; # ۋ⒈ß.- +.\u1BAAςႦ\u200D; .\u1BAAςႦ\u200D; [C2, V5, V6]; xn--nu4s.xn--3xa417dxriome; ; xn--nu4s.xn--4xa217dxri; [V5, V6] # .᮪ςႦ +.\u1BAAςႦ\u200D; ; [C2, V5, V6]; xn--nu4s.xn--3xa417dxriome; ; xn--nu4s.xn--4xa217dxri; [V5, V6] # .᮪ςႦ +.\u1BAAςⴆ\u200D; ; [C2, V5, V6]; xn--nu4s.xn--3xa353jk8cs1q; ; xn--nu4s.xn--4xa153j7im; [V5, V6] # .᮪ςⴆ +.\u1BAAΣႦ\u200D; .\u1BAAσႦ\u200D; [C2, V5, V6]; xn--nu4s.xn--4xa217dxriome; ; xn--nu4s.xn--4xa217dxri; [V5, V6] # .᮪σႦ +.\u1BAAσⴆ\u200D; ; [C2, V5, V6]; xn--nu4s.xn--4xa153jk8cs1q; ; xn--nu4s.xn--4xa153j7im; [V5, V6] # .᮪σⴆ +.\u1BAAΣⴆ\u200D; .\u1BAAσⴆ\u200D; [C2, V5, V6]; xn--nu4s.xn--4xa153jk8cs1q; ; xn--nu4s.xn--4xa153j7im; [V5, V6] # .᮪σⴆ +xn--nu4s.xn--4xa153j7im; .\u1BAAσⴆ; [V5, V6]; xn--nu4s.xn--4xa153j7im; ; ; # .᮪σⴆ +xn--nu4s.xn--4xa153jk8cs1q; .\u1BAAσⴆ\u200D; [C2, V5, V6]; xn--nu4s.xn--4xa153jk8cs1q; ; ; # .᮪σⴆ +xn--nu4s.xn--4xa217dxri; .\u1BAAσႦ; [V5, V6]; xn--nu4s.xn--4xa217dxri; ; ; # .᮪σႦ +xn--nu4s.xn--4xa217dxriome; .\u1BAAσႦ\u200D; [C2, V5, V6]; xn--nu4s.xn--4xa217dxriome; ; ; # .᮪σႦ +xn--nu4s.xn--3xa353jk8cs1q; .\u1BAAςⴆ\u200D; [C2, V5, V6]; xn--nu4s.xn--3xa353jk8cs1q; ; ; # .᮪ςⴆ +xn--nu4s.xn--3xa417dxriome; .\u1BAAςႦ\u200D; [C2, V5, V6]; xn--nu4s.xn--3xa417dxriome; ; ; # .᮪ςႦ +.\u1BAAςⴆ\u200D; .\u1BAAςⴆ\u200D; [C2, V5, V6]; xn--nu4s.xn--3xa353jk8cs1q; ; xn--nu4s.xn--4xa153j7im; [V5, V6] # .᮪ςⴆ +.\u1BAAΣႦ\u200D; .\u1BAAσႦ\u200D; [C2, V5, V6]; xn--nu4s.xn--4xa217dxriome; ; xn--nu4s.xn--4xa217dxri; [V5, V6] # .᮪σႦ +.\u1BAAσⴆ\u200D; .\u1BAAσⴆ\u200D; [C2, V5, V6]; xn--nu4s.xn--4xa153jk8cs1q; ; xn--nu4s.xn--4xa153j7im; [V5, V6] # .᮪σⴆ +.\u1BAAΣⴆ\u200D; .\u1BAAσⴆ\u200D; [C2, V5, V6]; xn--nu4s.xn--4xa153jk8cs1q; ; xn--nu4s.xn--4xa153j7im; [V5, V6] # .᮪σⴆ +⾆\u08E2.𝈴; 舌\u08E2.𝈴; [B1, B5, B6, V6]; xn--l0b9413d.xn--kl1h; ; ; # 舌.𝈴 +舌\u08E2.𝈴; ; [B1, B5, B6, V6]; xn--l0b9413d.xn--kl1h; ; ; # 舌.𝈴 +xn--l0b9413d.xn--kl1h; 舌\u08E2.𝈴; [B1, B5, B6, V6]; xn--l0b9413d.xn--kl1h; ; ; # 舌.𝈴 +⫞𐹶𖫴。⭠⒈; ⫞𐹶𖫴.⭠⒈; [B1, V6]; xn--53ix188et88b.xn--tsh52w; ; ; # ⫞𐹶𖫴.⭠⒈ +⫞𐹶𖫴。⭠1.; ⫞𐹶𖫴.⭠1.; [B1]; xn--53ix188et88b.xn--1-h6r.; ; ; # ⫞𐹶𖫴.⭠1. +xn--53ix188et88b.xn--1-h6r.; ⫞𐹶𖫴.⭠1.; [B1]; xn--53ix188et88b.xn--1-h6r.; ; ; # ⫞𐹶𖫴.⭠1. +xn--53ix188et88b.xn--tsh52w; ⫞𐹶𖫴.⭠⒈; [B1, V6]; xn--53ix188et88b.xn--tsh52w; ; ; # ⫞𐹶𖫴.⭠⒈ +⒈\u200C\uAAEC︒.\u0ACD; ⒈\u200C\uAAEC︒.\u0ACD; [C1, V5, V6]; xn--0ug78o720myr1c.xn--mfc; ; xn--tsh0720cse8b.xn--mfc; [V5, V6] # ⒈ꫬ︒.્ +1.\u200C\uAAEC。.\u0ACD; 1.\u200C\uAAEC..\u0ACD; [C1, V5, X4_2]; 1.xn--0ug7185c..xn--mfc; [C1, V5, A4_2]; 1.xn--sv9a..xn--mfc; [V5, A4_2] # 1.ꫬ..્ +1.xn--sv9a..xn--mfc; 1.\uAAEC..\u0ACD; [V5, X4_2]; 1.xn--sv9a..xn--mfc; [V5, A4_2]; ; # 1.ꫬ..્ +1.xn--0ug7185c..xn--mfc; 1.\u200C\uAAEC..\u0ACD; [C1, V5, X4_2]; 1.xn--0ug7185c..xn--mfc; [C1, V5, A4_2]; ; # 1.ꫬ..્ +xn--tsh0720cse8b.xn--mfc; ⒈\uAAEC︒.\u0ACD; [V5, V6]; xn--tsh0720cse8b.xn--mfc; ; ; # ⒈ꫬ︒.્ +xn--0ug78o720myr1c.xn--mfc; ⒈\u200C\uAAEC︒.\u0ACD; [C1, V5, V6]; xn--0ug78o720myr1c.xn--mfc; ; ; # ⒈ꫬ︒.્ +\u0C46。䰀\u0668󠅼; \u0C46.䰀\u0668; [B1, B5, B6, V5, V6]; xn--eqc.xn--hib5476aim6t; ; ; # ె.䰀٨ +xn--eqc.xn--hib5476aim6t; \u0C46.䰀\u0668; [B1, B5, B6, V5, V6]; xn--eqc.xn--hib5476aim6t; ; ; # ె.䰀٨ +ß\u200D.\u1BF2; ; [C2, V5, V6]; xn--zca870n.xn--0zf22107b; ; ss.xn--0zf22107b; [V5, V6] # ß.᯲ +SS\u200D.\u1BF2; ss\u200D.\u1BF2; [C2, V5, V6]; xn--ss-n1t.xn--0zf22107b; ; ss.xn--0zf22107b; [V5, V6] # ss.᯲ +ss\u200D.\u1BF2; ; [C2, V5, V6]; xn--ss-n1t.xn--0zf22107b; ; ss.xn--0zf22107b; [V5, V6] # ss.᯲ +Ss\u200D.\u1BF2; ss\u200D.\u1BF2; [C2, V5, V6]; xn--ss-n1t.xn--0zf22107b; ; ss.xn--0zf22107b; [V5, V6] # ss.᯲ +ss.xn--0zf22107b; ss.\u1BF2; [V5, V6]; ss.xn--0zf22107b; ; ; # ss.᯲ +xn--ss-n1t.xn--0zf22107b; ss\u200D.\u1BF2; [C2, V5, V6]; xn--ss-n1t.xn--0zf22107b; ; ; # ss.᯲ +xn--zca870n.xn--0zf22107b; ß\u200D.\u1BF2; [C2, V5, V6]; xn--zca870n.xn--0zf22107b; ; ; # ß.᯲ +𑓂\u200C≮.≮; ; [V5]; xn--0ugy6glz29a.xn--gdh; ; xn--gdhz656g.xn--gdh; # 𑓂≮.≮ +𑓂\u200C<\u0338.<\u0338; 𑓂\u200C≮.≮; [V5]; xn--0ugy6glz29a.xn--gdh; ; xn--gdhz656g.xn--gdh; # 𑓂≮.≮ +xn--gdhz656g.xn--gdh; 𑓂≮.≮; [V5]; xn--gdhz656g.xn--gdh; ; ; # 𑓂≮.≮ +xn--0ugy6glz29a.xn--gdh; 𑓂\u200C≮.≮; [V5]; xn--0ugy6glz29a.xn--gdh; ; ; # 𑓂≮.≮ +🕼.\uFFA0; 🕼.\uFFA0; [V6]; xn--my8h.xn--cl7c; ; ; # 🕼. +🕼.\u1160; ; [V6]; xn--my8h.xn--psd; ; ; # 🕼. +xn--my8h.xn--psd; 🕼.\u1160; [V6]; xn--my8h.xn--psd; ; ; # 🕼. +xn--my8h.xn--cl7c; 🕼.\uFFA0; [V6]; xn--my8h.xn--cl7c; ; ; # 🕼. +ᡔ\uFD82。; ᡔ\u0644\u062D\u0649.; [B5, B6, V6]; xn--sgb9bq785p.xn--bc31b; ; ; # ᡔلحى. +ᡔ\u0644\u062D\u0649。; ᡔ\u0644\u062D\u0649.; [B5, B6, V6]; xn--sgb9bq785p.xn--bc31b; ; ; # ᡔلحى. +xn--sgb9bq785p.xn--bc31b; ᡔ\u0644\u062D\u0649.; [B5, B6, V6]; xn--sgb9bq785p.xn--bc31b; ; ; # ᡔلحى. +爕.𝟰気; 爕.4気; [V6]; xn--1zxq3199c.xn--4-678b; ; ; # 爕.4気 +爕.4気; ; [V6]; xn--1zxq3199c.xn--4-678b; ; ; # 爕.4気 +xn--1zxq3199c.xn--4-678b; 爕.4気; [V6]; xn--1zxq3199c.xn--4-678b; ; ; # 爕.4気 +⒋𑍍Ⴝ-.\u0DCA\u05B5; ⒋𑍍Ⴝ-.\u0DCA\u05B5; [B1, V3, V6]; xn----t1g323mnk9t.xn--ddb152b7y23b; ; ; # ⒋𑍍Ⴝ-.්ֵ +4.𑍍Ⴝ-.\u0DCA\u05B5; ; [B1, B6, V3, V5, V6]; 4.xn----t1g9869q.xn--ddb152b7y23b; ; ; # 4.𑍍Ⴝ-.්ֵ +4.𑍍ⴝ-.\u0DCA\u05B5; ; [B1, B6, V3, V5, V6]; 4.xn----wwsx259f.xn--ddb152b7y23b; ; ; # 4.𑍍ⴝ-.්ֵ +4.xn----wwsx259f.xn--ddb152b7y23b; 4.𑍍ⴝ-.\u0DCA\u05B5; [B1, B6, V3, V5, V6]; 4.xn----wwsx259f.xn--ddb152b7y23b; ; ; # 4.𑍍ⴝ-.්ֵ +4.xn----t1g9869q.xn--ddb152b7y23b; 4.𑍍Ⴝ-.\u0DCA\u05B5; [B1, B6, V3, V5, V6]; 4.xn----t1g9869q.xn--ddb152b7y23b; ; ; # 4.𑍍Ⴝ-.්ֵ +⒋𑍍ⴝ-.\u0DCA\u05B5; ⒋𑍍ⴝ-.\u0DCA\u05B5; [B1, V3, V6]; xn----jcp487avl3w.xn--ddb152b7y23b; ; ; # ⒋𑍍ⴝ-.්ֵ +xn----jcp487avl3w.xn--ddb152b7y23b; ⒋𑍍ⴝ-.\u0DCA\u05B5; [B1, V3, V6]; xn----jcp487avl3w.xn--ddb152b7y23b; ; ; # ⒋𑍍ⴝ-.්ֵ +xn----t1g323mnk9t.xn--ddb152b7y23b; ⒋𑍍Ⴝ-.\u0DCA\u05B5; [B1, V3, V6]; xn----t1g323mnk9t.xn--ddb152b7y23b; ; ; # ⒋𑍍Ⴝ-.්ֵ +。--; .--; [V2, V3, V6]; xn--2y75e.xn-----1l15eer88n; ; ; # .-- +xn--2y75e.xn-----1l15eer88n; .--; [V2, V3, V6]; xn--2y75e.xn-----1l15eer88n; ; ; # .-- +\u200D\u07DF。\u200C\uABED; \u200D\u07DF.\u200C\uABED; [B1, C1, C2]; xn--6sb394j.xn--0ug1126c; ; xn--6sb.xn--429a; [B1, V5] # ߟ.꯭ +\u200D\u07DF。\u200C\uABED; \u200D\u07DF.\u200C\uABED; [B1, C1, C2]; xn--6sb394j.xn--0ug1126c; ; xn--6sb.xn--429a; [B1, V5] # ߟ.꯭ +xn--6sb.xn--429a; \u07DF.\uABED; [B1, V5]; xn--6sb.xn--429a; ; ; # ߟ.꯭ +xn--6sb394j.xn--0ug1126c; \u200D\u07DF.\u200C\uABED; [B1, C1, C2]; xn--6sb394j.xn--0ug1126c; ; ; # ߟ.꯭ +\u07FF\u084E。ᢍ𐫘; \u07FF\u084E.ᢍ𐫘; [B5, B6, V6]; xn--3tb2nz468k.xn--69e8615j5rn5d; ; ; # ߿ࡎ.ᢍ𐫘 +\u07FF\u084E。ᢍ𐫘; \u07FF\u084E.ᢍ𐫘; [B5, B6, V6]; xn--3tb2nz468k.xn--69e8615j5rn5d; ; ; # ߿ࡎ.ᢍ𐫘 +xn--3tb2nz468k.xn--69e8615j5rn5d; \u07FF\u084E.ᢍ𐫘; [B5, B6, V6]; xn--3tb2nz468k.xn--69e8615j5rn5d; ; ; # ߿ࡎ.ᢍ𐫘 +\u06ED𞺌𑄚\u1714.ꡞ\u08B7; \u06ED\u0645𑄚\u1714.ꡞ\u08B7; [B1, B5, B6, V5]; xn--hhb94ag41b739u.xn--dzb5582f; ; ; # ۭم𑄚᜔.ꡞࢷ +\u06ED\u0645𑄚\u1714.ꡞ\u08B7; ; [B1, B5, B6, V5]; xn--hhb94ag41b739u.xn--dzb5582f; ; ; # ۭم𑄚᜔.ꡞࢷ +xn--hhb94ag41b739u.xn--dzb5582f; \u06ED\u0645𑄚\u1714.ꡞ\u08B7; [B1, B5, B6, V5]; xn--hhb94ag41b739u.xn--dzb5582f; ; ; # ۭم𑄚᜔.ꡞࢷ +킃𑘶\u07DC。ς\u063Cς; 킃𑘶\u07DC.ς\u063Cς; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xaa51q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.ςؼς +킃𑘶\u07DC。ς\u063Cς; 킃𑘶\u07DC.ς\u063Cς; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xaa51q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.ςؼς +킃𑘶\u07DC。ς\u063Cς; 킃𑘶\u07DC.ς\u063Cς; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xaa51q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.ςؼς +킃𑘶\u07DC。ς\u063Cς; 킃𑘶\u07DC.ς\u063Cς; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xaa51q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.ςؼς +킃𑘶\u07DC。Σ\u063CΣ; 킃𑘶\u07DC.σ\u063Cσ; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ +킃𑘶\u07DC。Σ\u063CΣ; 킃𑘶\u07DC.σ\u063Cσ; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ +킃𑘶\u07DC。σ\u063Cσ; 킃𑘶\u07DC.σ\u063Cσ; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ +킃𑘶\u07DC。σ\u063Cσ; 킃𑘶\u07DC.σ\u063Cσ; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ +킃𑘶\u07DC。Σ\u063Cσ; 킃𑘶\u07DC.σ\u063Cσ; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ +킃𑘶\u07DC。Σ\u063Cσ; 킃𑘶\u07DC.σ\u063Cσ; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ +xn--3sb7483hoyvbbe76g.xn--4xaa21q; 킃𑘶\u07DC.σ\u063Cσ; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ +킃𑘶\u07DC。Σ\u063Cς; 킃𑘶\u07DC.σ\u063Cς; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.σؼς +킃𑘶\u07DC。Σ\u063Cς; 킃𑘶\u07DC.σ\u063Cς; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.σؼς +킃𑘶\u07DC。σ\u063Cς; 킃𑘶\u07DC.σ\u063Cς; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.σؼς +킃𑘶\u07DC。σ\u063Cς; 킃𑘶\u07DC.σ\u063Cς; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.σؼς +xn--3sb7483hoyvbbe76g.xn--3xab31q; 킃𑘶\u07DC.σ\u063Cς; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; ; # 킃𑘶ߜ.σؼς +xn--3sb7483hoyvbbe76g.xn--3xaa51q; 킃𑘶\u07DC.ς\u063Cς; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xaa51q; ; ; # 킃𑘶ߜ.ςؼς +킃𑘶\u07DC。Σ\u063CΣ; 킃𑘶\u07DC.σ\u063Cσ; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ +킃𑘶\u07DC。Σ\u063CΣ; 킃𑘶\u07DC.σ\u063Cσ; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ +킃𑘶\u07DC。σ\u063Cσ; 킃𑘶\u07DC.σ\u063Cσ; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ +킃𑘶\u07DC。σ\u063Cσ; 킃𑘶\u07DC.σ\u063Cσ; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ +킃𑘶\u07DC。Σ\u063Cσ; 킃𑘶\u07DC.σ\u063Cσ; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ +킃𑘶\u07DC。Σ\u063Cσ; 킃𑘶\u07DC.σ\u063Cσ; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ +킃𑘶\u07DC。Σ\u063Cς; 킃𑘶\u07DC.σ\u063Cς; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.σؼς +킃𑘶\u07DC。Σ\u063Cς; 킃𑘶\u07DC.σ\u063Cς; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.σؼς +킃𑘶\u07DC。σ\u063Cς; 킃𑘶\u07DC.σ\u063Cς; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.σؼς +킃𑘶\u07DC。σ\u063Cς; 킃𑘶\u07DC.σ\u063Cς; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.σؼς +蔰。\u08DD-𑈵; 蔰.\u08DD-𑈵; [V6]; xn--sz1a.xn----mrd9984r3dl0i; ; ; # 蔰.ࣝ-𑈵 +xn--sz1a.xn----mrd9984r3dl0i; 蔰.\u08DD-𑈵; [V6]; xn--sz1a.xn----mrd9984r3dl0i; ; ; # 蔰.ࣝ-𑈵 +ςჅ。\u075A; ςჅ.\u075A; [V6]; xn--3xa677d.xn--epb; ; xn--4xa477d.xn--epb; # ςჅ.ݚ +ςⴥ。\u075A; ςⴥ.\u075A; ; xn--3xa403s.xn--epb; ; xn--4xa203s.xn--epb; # ςⴥ.ݚ +ΣჅ。\u075A; σჅ.\u075A; [V6]; xn--4xa477d.xn--epb; ; ; # σჅ.ݚ +σⴥ。\u075A; σⴥ.\u075A; ; xn--4xa203s.xn--epb; ; ; # σⴥ.ݚ +Σⴥ。\u075A; σⴥ.\u075A; ; xn--4xa203s.xn--epb; ; ; # σⴥ.ݚ +xn--4xa203s.xn--epb; σⴥ.\u075A; ; xn--4xa203s.xn--epb; ; ; # σⴥ.ݚ +σⴥ.\u075A; ; ; xn--4xa203s.xn--epb; ; ; # σⴥ.ݚ +ΣჅ.\u075A; σჅ.\u075A; [V6]; xn--4xa477d.xn--epb; ; ; # σჅ.ݚ +Σⴥ.\u075A; σⴥ.\u075A; ; xn--4xa203s.xn--epb; ; ; # σⴥ.ݚ +xn--4xa477d.xn--epb; σჅ.\u075A; [V6]; xn--4xa477d.xn--epb; ; ; # σჅ.ݚ +xn--3xa403s.xn--epb; ςⴥ.\u075A; ; xn--3xa403s.xn--epb; ; ; # ςⴥ.ݚ +ςⴥ.\u075A; ; ; xn--3xa403s.xn--epb; ; xn--4xa203s.xn--epb; # ςⴥ.ݚ +xn--3xa677d.xn--epb; ςჅ.\u075A; [V6]; xn--3xa677d.xn--epb; ; ; # ςჅ.ݚ +\u0C4DႩ.\u1B72; \u0C4DႩ.\u1B72; [B1, V5, V6]; xn--lqc64t7t26c.xn--dwf; ; ; # ్Ⴉ.᭲ +\u0C4DႩ.\u1B72; ; [B1, V5, V6]; xn--lqc64t7t26c.xn--dwf; ; ; # ్Ⴉ.᭲ +\u0C4Dⴉ.\u1B72; ; [B1, V5, V6]; xn--lqc478nlr02a.xn--dwf; ; ; # ్ⴉ.᭲ +xn--lqc478nlr02a.xn--dwf; \u0C4Dⴉ.\u1B72; [B1, V5, V6]; xn--lqc478nlr02a.xn--dwf; ; ; # ్ⴉ.᭲ +xn--lqc64t7t26c.xn--dwf; \u0C4DႩ.\u1B72; [B1, V5, V6]; xn--lqc64t7t26c.xn--dwf; ; ; # ్Ⴉ.᭲ +\u0C4Dⴉ.\u1B72; \u0C4Dⴉ.\u1B72; [B1, V5, V6]; xn--lqc478nlr02a.xn--dwf; ; ; # ్ⴉ.᭲ +⮷≮󠄟。𐠄; ⮷≮.𐠄; [B1, V6]; xn--gdh877a3513h.xn--pc9c; ; ; # ⮷≮.𐠄 +⮷<\u0338󠄟。𐠄; ⮷≮.𐠄; [B1, V6]; xn--gdh877a3513h.xn--pc9c; ; ; # ⮷≮.𐠄 +xn--gdh877a3513h.xn--pc9c; ⮷≮.𐠄; [B1, V6]; xn--gdh877a3513h.xn--pc9c; ; ; # ⮷≮.𐠄 +\u06BC。\u200Dẏ\u200Cᡤ; \u06BC.\u200Dẏ\u200Cᡤ; [B1, C1, C2]; xn--vkb.xn--08e172ax6aca; ; xn--vkb.xn--08e172a; [] # ڼ.ẏᡤ +\u06BC。\u200Dy\u0307\u200Cᡤ; \u06BC.\u200Dẏ\u200Cᡤ; [B1, C1, C2]; xn--vkb.xn--08e172ax6aca; ; xn--vkb.xn--08e172a; [] # ڼ.ẏᡤ +\u06BC。\u200Dẏ\u200Cᡤ; \u06BC.\u200Dẏ\u200Cᡤ; [B1, C1, C2]; xn--vkb.xn--08e172ax6aca; ; xn--vkb.xn--08e172a; [] # ڼ.ẏᡤ +\u06BC。\u200Dy\u0307\u200Cᡤ; \u06BC.\u200Dẏ\u200Cᡤ; [B1, C1, C2]; xn--vkb.xn--08e172ax6aca; ; xn--vkb.xn--08e172a; [] # ڼ.ẏᡤ +\u06BC。\u200DY\u0307\u200Cᡤ; \u06BC.\u200Dẏ\u200Cᡤ; [B1, C1, C2]; xn--vkb.xn--08e172ax6aca; ; xn--vkb.xn--08e172a; [] # ڼ.ẏᡤ +\u06BC。\u200DẎ\u200Cᡤ; \u06BC.\u200Dẏ\u200Cᡤ; [B1, C1, C2]; xn--vkb.xn--08e172ax6aca; ; xn--vkb.xn--08e172a; [] # ڼ.ẏᡤ +xn--vkb.xn--08e172a; \u06BC.ẏᡤ; ; xn--vkb.xn--08e172a; ; ; # ڼ.ẏᡤ +\u06BC.ẏᡤ; ; ; xn--vkb.xn--08e172a; ; ; # ڼ.ẏᡤ +\u06BC.y\u0307ᡤ; \u06BC.ẏᡤ; ; xn--vkb.xn--08e172a; ; ; # ڼ.ẏᡤ +\u06BC.Y\u0307ᡤ; \u06BC.ẏᡤ; ; xn--vkb.xn--08e172a; ; ; # ڼ.ẏᡤ +\u06BC.Ẏᡤ; \u06BC.ẏᡤ; ; xn--vkb.xn--08e172a; ; ; # ڼ.ẏᡤ +xn--vkb.xn--08e172ax6aca; \u06BC.\u200Dẏ\u200Cᡤ; [B1, C1, C2]; xn--vkb.xn--08e172ax6aca; ; ; # ڼ.ẏᡤ +\u06BC。\u200DY\u0307\u200Cᡤ; \u06BC.\u200Dẏ\u200Cᡤ; [B1, C1, C2]; xn--vkb.xn--08e172ax6aca; ; xn--vkb.xn--08e172a; [] # ڼ.ẏᡤ +\u06BC。\u200DẎ\u200Cᡤ; \u06BC.\u200Dẏ\u200Cᡤ; [B1, C1, C2]; xn--vkb.xn--08e172ax6aca; ; xn--vkb.xn--08e172a; [] # ڼ.ẏᡤ +𐹹𑲛。\u0DCA; 𐹹𑲛.\u0DCA; [B1, V6]; xn--xo0dg5v.xn--h1c39876d; ; ; # 𐹹𑲛.් +xn--xo0dg5v.xn--h1c39876d; 𐹹𑲛.\u0DCA; [B1, V6]; xn--xo0dg5v.xn--h1c39876d; ; ; # 𐹹𑲛.් +-≠𑈵。嵕\uFEF1۴\uA953; -≠𑈵.嵕\u064A۴\uA953; [B1, B5, V3]; xn----ufo4749h.xn--mhb45a235sns3c; ; ; # -≠𑈵.嵕ي۴꥓ +-=\u0338𑈵。嵕\uFEF1۴\uA953; -≠𑈵.嵕\u064A۴\uA953; [B1, B5, V3]; xn----ufo4749h.xn--mhb45a235sns3c; ; ; # -≠𑈵.嵕ي۴꥓ +-≠𑈵。嵕\u064A۴\uA953; -≠𑈵.嵕\u064A۴\uA953; [B1, B5, V3]; xn----ufo4749h.xn--mhb45a235sns3c; ; ; # -≠𑈵.嵕ي۴꥓ +-=\u0338𑈵。嵕\u064A۴\uA953; -≠𑈵.嵕\u064A۴\uA953; [B1, B5, V3]; xn----ufo4749h.xn--mhb45a235sns3c; ; ; # -≠𑈵.嵕ي۴꥓ +xn----ufo4749h.xn--mhb45a235sns3c; -≠𑈵.嵕\u064A۴\uA953; [B1, B5, V3]; xn----ufo4749h.xn--mhb45a235sns3c; ; ; # -≠𑈵.嵕ي۴꥓ +\u200C𐹶\u076E.\u06C1\u200D≯\u200D; \u200C𐹶\u076E.\u06C1\u200D≯\u200D; [B1, B3, C1, C2, V6]; xn--ypb717jrx2o7v94a.xn--0kb660ka35v; ; xn--ypb5875khz9y.xn--0kb682l; [B3, B5, B6, V6] # 𐹶ݮ.ہ≯ +\u200C𐹶\u076E.\u06C1\u200D>\u0338\u200D; \u200C𐹶\u076E.\u06C1\u200D≯\u200D; [B1, B3, C1, C2, V6]; xn--ypb717jrx2o7v94a.xn--0kb660ka35v; ; xn--ypb5875khz9y.xn--0kb682l; [B3, B5, B6, V6] # 𐹶ݮ.ہ≯ +\u200C𐹶\u076E.\u06C1\u200D≯\u200D; ; [B1, B3, C1, C2, V6]; xn--ypb717jrx2o7v94a.xn--0kb660ka35v; ; xn--ypb5875khz9y.xn--0kb682l; [B3, B5, B6, V6] # 𐹶ݮ.ہ≯ +\u200C𐹶\u076E.\u06C1\u200D>\u0338\u200D; \u200C𐹶\u076E.\u06C1\u200D≯\u200D; [B1, B3, C1, C2, V6]; xn--ypb717jrx2o7v94a.xn--0kb660ka35v; ; xn--ypb5875khz9y.xn--0kb682l; [B3, B5, B6, V6] # 𐹶ݮ.ہ≯ +xn--ypb5875khz9y.xn--0kb682l; 𐹶\u076E.\u06C1≯; [B3, B5, B6, V6]; xn--ypb5875khz9y.xn--0kb682l; ; ; # 𐹶ݮ.ہ≯ +xn--ypb717jrx2o7v94a.xn--0kb660ka35v; \u200C𐹶\u076E.\u06C1\u200D≯\u200D; [B1, B3, C1, C2, V6]; xn--ypb717jrx2o7v94a.xn--0kb660ka35v; ; ; # 𐹶ݮ.ہ≯ +≮.\u17B5\u0855𐫔; ≮.\u17B5\u0855𐫔; [B1, V5, V6]; xn--gdh.xn--kwb589e217p; ; ; # ≮.ࡕ𐫔 +<\u0338.\u17B5\u0855𐫔; ≮.\u17B5\u0855𐫔; [B1, V5, V6]; xn--gdh.xn--kwb589e217p; ; ; # ≮.ࡕ𐫔 +≮.\u17B5\u0855𐫔; ; [B1, V5, V6]; xn--gdh.xn--kwb589e217p; ; ; # ≮.ࡕ𐫔 +<\u0338.\u17B5\u0855𐫔; ≮.\u17B5\u0855𐫔; [B1, V5, V6]; xn--gdh.xn--kwb589e217p; ; ; # ≮.ࡕ𐫔 +xn--gdh.xn--kwb589e217p; ≮.\u17B5\u0855𐫔; [B1, V5, V6]; xn--gdh.xn--kwb589e217p; ; ; # ≮.ࡕ𐫔 +𐩗\u200D。ႩႵ; 𐩗\u200D.ႩႵ; [B3, C2, V6]; xn--1ug4933g.xn--hndy; ; xn--pt9c.xn--hndy; [V6] # 𐩗.ႩႵ +𐩗\u200D。ႩႵ; 𐩗\u200D.ႩႵ; [B3, C2, V6]; xn--1ug4933g.xn--hndy; ; xn--pt9c.xn--hndy; [V6] # 𐩗.ႩႵ +𐩗\u200D。ⴉⴕ; 𐩗\u200D.ⴉⴕ; [B3, C2]; xn--1ug4933g.xn--0kjya; ; xn--pt9c.xn--0kjya; [] # 𐩗.ⴉⴕ +𐩗\u200D。Ⴉⴕ; 𐩗\u200D.Ⴉⴕ; [B3, C2, V6]; xn--1ug4933g.xn--hnd666l; ; xn--pt9c.xn--hnd666l; [V6] # 𐩗.Ⴉⴕ +xn--pt9c.xn--hnd666l; 𐩗.Ⴉⴕ; [V6]; xn--pt9c.xn--hnd666l; ; ; # 𐩗.Ⴉⴕ +xn--1ug4933g.xn--hnd666l; 𐩗\u200D.Ⴉⴕ; [B3, C2, V6]; xn--1ug4933g.xn--hnd666l; ; ; # 𐩗.Ⴉⴕ +xn--pt9c.xn--0kjya; 𐩗.ⴉⴕ; ; xn--pt9c.xn--0kjya; ; ; # 𐩗.ⴉⴕ +𐩗.ⴉⴕ; ; ; xn--pt9c.xn--0kjya; ; ; # 𐩗.ⴉⴕ +𐩗.ႩႵ; ; [V6]; xn--pt9c.xn--hndy; ; ; # 𐩗.ႩႵ +𐩗.Ⴉⴕ; ; [V6]; xn--pt9c.xn--hnd666l; ; ; # 𐩗.Ⴉⴕ +xn--pt9c.xn--hndy; 𐩗.ႩႵ; [V6]; xn--pt9c.xn--hndy; ; ; # 𐩗.ႩႵ +xn--1ug4933g.xn--0kjya; 𐩗\u200D.ⴉⴕ; [B3, C2]; xn--1ug4933g.xn--0kjya; ; ; # 𐩗.ⴉⴕ +xn--1ug4933g.xn--hndy; 𐩗\u200D.ႩႵ; [B3, C2, V6]; xn--1ug4933g.xn--hndy; ; ; # 𐩗.ႩႵ +𐩗\u200D。ⴉⴕ; 𐩗\u200D.ⴉⴕ; [B3, C2]; xn--1ug4933g.xn--0kjya; ; xn--pt9c.xn--0kjya; [] # 𐩗.ⴉⴕ +𐩗\u200D。Ⴉⴕ; 𐩗\u200D.Ⴉⴕ; [B3, C2, V6]; xn--1ug4933g.xn--hnd666l; ; xn--pt9c.xn--hnd666l; [V6] # 𐩗.Ⴉⴕ +\u200C\u200Cㄤ.\u032E\u09C2; \u200C\u200Cㄤ.\u032E\u09C2; [C1, V5, V6]; xn--0uga242k.xn--vta284a9o563a; ; xn--1fk.xn--vta284a9o563a; [V5, V6] # ㄤ.̮ূ +\u200C\u200Cㄤ.\u032E\u09C2; ; [C1, V5, V6]; xn--0uga242k.xn--vta284a9o563a; ; xn--1fk.xn--vta284a9o563a; [V5, V6] # ㄤ.̮ূ +xn--1fk.xn--vta284a9o563a; ㄤ.\u032E\u09C2; [V5, V6]; xn--1fk.xn--vta284a9o563a; ; ; # ㄤ.̮ূ +xn--0uga242k.xn--vta284a9o563a; \u200C\u200Cㄤ.\u032E\u09C2; [C1, V5, V6]; xn--0uga242k.xn--vta284a9o563a; ; ; # ㄤ.̮ূ +𐋻。-\u200C𐫄Ⴗ; 𐋻.-\u200C𐫄Ⴗ; [B1, C1, V3, V6]; xn--v97c.xn----i1g888ih12u; ; xn--v97c.xn----i1g2513q; [B1, V3, V6] # 𐋻.-𐫄Ⴗ +𐋻。-\u200C𐫄Ⴗ; 𐋻.-\u200C𐫄Ⴗ; [B1, C1, V3, V6]; xn--v97c.xn----i1g888ih12u; ; xn--v97c.xn----i1g2513q; [B1, V3, V6] # 𐋻.-𐫄Ⴗ +𐋻。-\u200C𐫄ⴗ; 𐋻.-\u200C𐫄ⴗ; [B1, C1, V3]; xn--v97c.xn----sgnv20du99s; ; xn--v97c.xn----lws0526f; [B1, V3] # 𐋻.-𐫄ⴗ +xn--v97c.xn----lws0526f; 𐋻.-𐫄ⴗ; [B1, V3]; xn--v97c.xn----lws0526f; ; ; # 𐋻.-𐫄ⴗ +xn--v97c.xn----sgnv20du99s; 𐋻.-\u200C𐫄ⴗ; [B1, C1, V3]; xn--v97c.xn----sgnv20du99s; ; ; # 𐋻.-𐫄ⴗ +xn--v97c.xn----i1g2513q; 𐋻.-𐫄Ⴗ; [B1, V3, V6]; xn--v97c.xn----i1g2513q; ; ; # 𐋻.-𐫄Ⴗ +xn--v97c.xn----i1g888ih12u; 𐋻.-\u200C𐫄Ⴗ; [B1, C1, V3, V6]; xn--v97c.xn----i1g888ih12u; ; ; # 𐋻.-𐫄Ⴗ +𐋻。-\u200C𐫄ⴗ; 𐋻.-\u200C𐫄ⴗ; [B1, C1, V3]; xn--v97c.xn----sgnv20du99s; ; xn--v97c.xn----lws0526f; [B1, V3] # 𐋻.-𐫄ⴗ +🙑.≠\u200C; 🙑.≠\u200C; [B1, C1, V6]; xn--bl0dh970b.xn--0ug83g; ; xn--bl0dh970b.xn--1ch; [B1, V6] # 🙑.≠ +🙑.=\u0338\u200C; 🙑.≠\u200C; [B1, C1, V6]; xn--bl0dh970b.xn--0ug83g; ; xn--bl0dh970b.xn--1ch; [B1, V6] # 🙑.≠ +🙑.≠\u200C; ; [B1, C1, V6]; xn--bl0dh970b.xn--0ug83g; ; xn--bl0dh970b.xn--1ch; [B1, V6] # 🙑.≠ +🙑.=\u0338\u200C; 🙑.≠\u200C; [B1, C1, V6]; xn--bl0dh970b.xn--0ug83g; ; xn--bl0dh970b.xn--1ch; [B1, V6] # 🙑.≠ +xn--bl0dh970b.xn--1ch; 🙑.≠; [B1, V6]; xn--bl0dh970b.xn--1ch; ; ; # 🙑.≠ +xn--bl0dh970b.xn--0ug83g; 🙑.≠\u200C; [B1, C1, V6]; xn--bl0dh970b.xn--0ug83g; ; ; # 🙑.≠ +\u064C\u1CD2。\u2D7F⧎; \u064C\u1CD2.\u2D7F⧎; [B1, B3, V5, V6]; xn--ohb646i.xn--ewi38jf765c; ; ; # ٌ᳒.⵿⧎ +\u064C\u1CD2。\u2D7F⧎; \u064C\u1CD2.\u2D7F⧎; [B1, B3, V5, V6]; xn--ohb646i.xn--ewi38jf765c; ; ; # ٌ᳒.⵿⧎ +xn--ohb646i.xn--ewi38jf765c; \u064C\u1CD2.\u2D7F⧎; [B1, B3, V5, V6]; xn--ohb646i.xn--ewi38jf765c; ; ; # ٌ᳒.⵿⧎ +Ⴔ𝨨₃.𝟳𑂹\u0B82; Ⴔ𝨨3.7𑂹\u0B82; [V6]; xn--3-b1g83426a35t0g.xn--7-cve6271r; ; ; # Ⴔ𝨨3.7𑂹ஂ +Ⴔ𝨨3.7𑂹\u0B82; ; [V6]; xn--3-b1g83426a35t0g.xn--7-cve6271r; ; ; # Ⴔ𝨨3.7𑂹ஂ +ⴔ𝨨3.7𑂹\u0B82; ; [V6]; xn--3-ews6985n35s3g.xn--7-cve6271r; ; ; # ⴔ𝨨3.7𑂹ஂ +xn--3-ews6985n35s3g.xn--7-cve6271r; ⴔ𝨨3.7𑂹\u0B82; [V6]; xn--3-ews6985n35s3g.xn--7-cve6271r; ; ; # ⴔ𝨨3.7𑂹ஂ +xn--3-b1g83426a35t0g.xn--7-cve6271r; Ⴔ𝨨3.7𑂹\u0B82; [V6]; xn--3-b1g83426a35t0g.xn--7-cve6271r; ; ; # Ⴔ𝨨3.7𑂹ஂ +ⴔ𝨨₃.𝟳𑂹\u0B82; ⴔ𝨨3.7𑂹\u0B82; [V6]; xn--3-ews6985n35s3g.xn--7-cve6271r; ; ; # ⴔ𝨨3.7𑂹ஂ +䏈\u200C。\u200C⒈; 䏈\u200C.\u200C⒈; [C1, V6]; xn--0ug491l.xn--0ug88oot66q; ; xn--eco.xn--tsh21126d; [V6] # 䏈.⒈ +䏈\u200C。\u200C1.; 䏈\u200C.\u200C1.; [C1, V6]; xn--0ug491l.xn--1-rgn.xn--ms39a; ; xn--eco.1.xn--ms39a; [V6] # 䏈.1. +xn--eco.1.xn--ms39a; 䏈.1.; [V6]; xn--eco.1.xn--ms39a; ; ; # 䏈.1. +xn--0ug491l.xn--1-rgn.xn--ms39a; 䏈\u200C.\u200C1.; [C1, V6]; xn--0ug491l.xn--1-rgn.xn--ms39a; ; ; # 䏈.1. +xn--eco.xn--tsh21126d; 䏈.⒈; [V6]; xn--eco.xn--tsh21126d; ; ; # 䏈.⒈ +xn--0ug491l.xn--0ug88oot66q; 䏈\u200C.\u200C⒈; [C1, V6]; xn--0ug491l.xn--0ug88oot66q; ; ; # 䏈.⒈ +1\uAAF6ß𑲥。\u1DD8; 1\uAAF6ß𑲥.\u1DD8; [V5]; xn--1-qfa2471kdb0d.xn--weg; ; xn--1ss-ir6ln166b.xn--weg; # 1꫶ß𑲥.ᷘ +1\uAAF6ß𑲥。\u1DD8; 1\uAAF6ß𑲥.\u1DD8; [V5]; xn--1-qfa2471kdb0d.xn--weg; ; xn--1ss-ir6ln166b.xn--weg; # 1꫶ß𑲥.ᷘ +1\uAAF6SS𑲥。\u1DD8; 1\uAAF6ss𑲥.\u1DD8; [V5]; xn--1ss-ir6ln166b.xn--weg; ; ; # 1꫶ss𑲥.ᷘ +1\uAAF6ss𑲥。\u1DD8; 1\uAAF6ss𑲥.\u1DD8; [V5]; xn--1ss-ir6ln166b.xn--weg; ; ; # 1꫶ss𑲥.ᷘ +xn--1ss-ir6ln166b.xn--weg; 1\uAAF6ss𑲥.\u1DD8; [V5]; xn--1ss-ir6ln166b.xn--weg; ; ; # 1꫶ss𑲥.ᷘ +xn--1-qfa2471kdb0d.xn--weg; 1\uAAF6ß𑲥.\u1DD8; [V5]; xn--1-qfa2471kdb0d.xn--weg; ; ; # 1꫶ß𑲥.ᷘ +1\uAAF6SS𑲥。\u1DD8; 1\uAAF6ss𑲥.\u1DD8; [V5]; xn--1ss-ir6ln166b.xn--weg; ; ; # 1꫶ss𑲥.ᷘ +1\uAAF6ss𑲥。\u1DD8; 1\uAAF6ss𑲥.\u1DD8; [V5]; xn--1ss-ir6ln166b.xn--weg; ; ; # 1꫶ss𑲥.ᷘ +1\uAAF6Ss𑲥。\u1DD8; 1\uAAF6ss𑲥.\u1DD8; [V5]; xn--1ss-ir6ln166b.xn--weg; ; ; # 1꫶ss𑲥.ᷘ +1\uAAF6Ss𑲥。\u1DD8; 1\uAAF6ss𑲥.\u1DD8; [V5]; xn--1ss-ir6ln166b.xn--weg; ; ; # 1꫶ss𑲥.ᷘ +\u200D\u0CCD。\u077C⒈; \u200D\u0CCD.\u077C⒈; [B1, C2, V6]; xn--8tc969gzn94a4lm8a.xn--dqb689l; ; xn--8tc9875v5is1a.xn--dqb689l; [B5, B6, V6] # ್.ݼ⒈ +\u200D\u0CCD。\u077C1.; \u200D\u0CCD.\u077C1.; [B1, C2, V6]; xn--8tc969gzn94a4lm8a.xn--1-g6c.; ; xn--8tc9875v5is1a.xn--1-g6c.; [B5, B6, V6] # ್.ݼ1. +xn--8tc9875v5is1a.xn--1-g6c.; \u0CCD.\u077C1.; [B5, B6, V6]; xn--8tc9875v5is1a.xn--1-g6c.; ; ; # ್.ݼ1. +xn--8tc969gzn94a4lm8a.xn--1-g6c.; \u200D\u0CCD.\u077C1.; [B1, C2, V6]; xn--8tc969gzn94a4lm8a.xn--1-g6c.; ; ; # ್.ݼ1. +xn--8tc9875v5is1a.xn--dqb689l; \u0CCD.\u077C⒈; [B5, B6, V6]; xn--8tc9875v5is1a.xn--dqb689l; ; ; # ್.ݼ⒈ +xn--8tc969gzn94a4lm8a.xn--dqb689l; \u200D\u0CCD.\u077C⒈; [B1, C2, V6]; xn--8tc969gzn94a4lm8a.xn--dqb689l; ; ; # ್.ݼ⒈ +\u1AB6.𞤳\u07D7; \u1AB6.𞤳\u07D7; [B1, B2, V5, V6]; xn--zqf.xn--ysb9657vuiz5bj0ep; ; ; # ᪶.𞤳ߗ +\u1AB6.𞤳\u07D7; ; [B1, B2, V5, V6]; xn--zqf.xn--ysb9657vuiz5bj0ep; ; ; # ᪶.𞤳ߗ +\u1AB6.𞤑\u07D7; \u1AB6.𞤳\u07D7; [B1, B2, V5, V6]; xn--zqf.xn--ysb9657vuiz5bj0ep; ; ; # ᪶.𞤳ߗ +xn--zqf.xn--ysb9657vuiz5bj0ep; \u1AB6.𞤳\u07D7; [B1, B2, V5, V6]; xn--zqf.xn--ysb9657vuiz5bj0ep; ; ; # ᪶.𞤳ߗ +\u1AB6.𞤑\u07D7; \u1AB6.𞤳\u07D7; [B1, B2, V5, V6]; xn--zqf.xn--ysb9657vuiz5bj0ep; ; ; # ᪶.𞤳ߗ +\u0842⒈.8\u0770; \u0842⒈.8\u0770; [B1, V6]; xn--0vb095ldg52a.xn--8-s5c22427ox454a; ; ; # ࡂ⒈.8ݰ +\u08421..8\u0770; ; [B1, V6, X4_2]; xn--1-rid26318a..xn--8-s5c22427ox454a; [B1, V6, A4_2]; ; # ࡂ1..8ݰ +xn--1-rid26318a..xn--8-s5c22427ox454a; \u08421..8\u0770; [B1, V6, X4_2]; xn--1-rid26318a..xn--8-s5c22427ox454a; [B1, V6, A4_2]; ; # ࡂ1..8ݰ +xn--0vb095ldg52a.xn--8-s5c22427ox454a; \u0842⒈.8\u0770; [B1, V6]; xn--0vb095ldg52a.xn--8-s5c22427ox454a; ; ; # ࡂ⒈.8ݰ +\u0361𐫫\u0369ᡷ。-鞰; \u0361𐫫\u0369ᡷ.-鞰; [B1, V3, V5, V6]; xn--cvaq482npv5t.xn----yg7dt1332g; ; ; # ͡𐫫ͩᡷ.-鞰 +xn--cvaq482npv5t.xn----yg7dt1332g; \u0361𐫫\u0369ᡷ.-鞰; [B1, V3, V5, V6]; xn--cvaq482npv5t.xn----yg7dt1332g; ; ; # ͡𐫫ͩᡷ.-鞰 +-.\u0ACD剘ß𐫃; ; [B1, V3, V5]; -.xn--zca791c493duf8i; ; -.xn--ss-bqg4734erywk; # -.્剘ß𐫃 +-.\u0ACD剘SS𐫃; -.\u0ACD剘ss𐫃; [B1, V3, V5]; -.xn--ss-bqg4734erywk; ; ; # -.્剘ss𐫃 +-.\u0ACD剘ss𐫃; ; [B1, V3, V5]; -.xn--ss-bqg4734erywk; ; ; # -.્剘ss𐫃 +-.\u0ACD剘Ss𐫃; -.\u0ACD剘ss𐫃; [B1, V3, V5]; -.xn--ss-bqg4734erywk; ; ; # -.્剘ss𐫃 +-.xn--ss-bqg4734erywk; -.\u0ACD剘ss𐫃; [B1, V3, V5]; -.xn--ss-bqg4734erywk; ; ; # -.્剘ss𐫃 +-.xn--zca791c493duf8i; -.\u0ACD剘ß𐫃; [B1, V3, V5]; -.xn--zca791c493duf8i; ; ; # -.્剘ß𐫃 +\u08FB。-; \u08FB.-; [B1, V3, V5, V6]; xn--b1b2719v.-; ; ; # ࣻ.- +\u08FB。-; \u08FB.-; [B1, V3, V5, V6]; xn--b1b2719v.-; ; ; # ࣻ.- +xn--b1b2719v.-; \u08FB.-; [B1, V3, V5, V6]; xn--b1b2719v.-; ; ; # ࣻ.- +⒈𐹲。≠\u0603𐹽; ⒈𐹲.≠\u0603𐹽; [B1, V6]; xn--tshw766f1153g.xn--lfb536lb35n; ; ; # ⒈𐹲.≠𐹽 +⒈𐹲。=\u0338\u0603𐹽; ⒈𐹲.≠\u0603𐹽; [B1, V6]; xn--tshw766f1153g.xn--lfb536lb35n; ; ; # ⒈𐹲.≠𐹽 +1.𐹲。≠\u0603𐹽; 1.𐹲.≠\u0603𐹽; [B1, V6]; 1.xn--qo0dl3077c.xn--lfb536lb35n; ; ; # 1.𐹲.≠𐹽 +1.𐹲。=\u0338\u0603𐹽; 1.𐹲.≠\u0603𐹽; [B1, V6]; 1.xn--qo0dl3077c.xn--lfb536lb35n; ; ; # 1.𐹲.≠𐹽 +1.xn--qo0dl3077c.xn--lfb536lb35n; 1.𐹲.≠\u0603𐹽; [B1, V6]; 1.xn--qo0dl3077c.xn--lfb536lb35n; ; ; # 1.𐹲.≠𐹽 +xn--tshw766f1153g.xn--lfb536lb35n; ⒈𐹲.≠\u0603𐹽; [B1, V6]; xn--tshw766f1153g.xn--lfb536lb35n; ; ; # ⒈𐹲.≠𐹽 +𐹢Ⴎ\u200C.㖾𐹡; ; [B1, B5, B6, C1, V6]; xn--mnd289ezj4pqxp0i.xn--pelu572d; ; xn--mnd9001km0o0g.xn--pelu572d; [B1, B5, B6, V6] # 𐹢Ⴎ.㖾𐹡 +𐹢ⴎ\u200C.㖾𐹡; ; [B1, B5, B6, C1, V6]; xn--0ug342clq0pqxv4i.xn--pelu572d; ; xn--5kjx323em053g.xn--pelu572d; [B1, B5, B6, V6] # 𐹢ⴎ.㖾𐹡 +xn--5kjx323em053g.xn--pelu572d; 𐹢ⴎ.㖾𐹡; [B1, B5, B6, V6]; xn--5kjx323em053g.xn--pelu572d; ; ; # 𐹢ⴎ.㖾𐹡 +xn--0ug342clq0pqxv4i.xn--pelu572d; 𐹢ⴎ\u200C.㖾𐹡; [B1, B5, B6, C1, V6]; xn--0ug342clq0pqxv4i.xn--pelu572d; ; ; # 𐹢ⴎ.㖾𐹡 +xn--mnd9001km0o0g.xn--pelu572d; 𐹢Ⴎ.㖾𐹡; [B1, B5, B6, V6]; xn--mnd9001km0o0g.xn--pelu572d; ; ; # 𐹢Ⴎ.㖾𐹡 +xn--mnd289ezj4pqxp0i.xn--pelu572d; 𐹢Ⴎ\u200C.㖾𐹡; [B1, B5, B6, C1, V6]; xn--mnd289ezj4pqxp0i.xn--pelu572d; ; ; # 𐹢Ⴎ.㖾𐹡 +.\u07C7ᡖႳႧ; .\u07C7ᡖႳႧ; [B2, B3, V6]; xn--te28c.xn--isb856b9a631d; ; ; # .߇ᡖႳႧ +.\u07C7ᡖႳႧ; ; [B2, B3, V6]; xn--te28c.xn--isb856b9a631d; ; ; # .߇ᡖႳႧ +.\u07C7ᡖⴓⴇ; ; [B2, B3, V6]; xn--te28c.xn--isb295fbtpmb; ; ; # .߇ᡖⴓⴇ +xn--te28c.xn--isb295fbtpmb; .\u07C7ᡖⴓⴇ; [B2, B3, V6]; xn--te28c.xn--isb295fbtpmb; ; ; # .߇ᡖⴓⴇ +xn--te28c.xn--isb856b9a631d; .\u07C7ᡖႳႧ; [B2, B3, V6]; xn--te28c.xn--isb856b9a631d; ; ; # .߇ᡖႳႧ +.\u07C7ᡖⴓⴇ; .\u07C7ᡖⴓⴇ; [B2, B3, V6]; xn--te28c.xn--isb295fbtpmb; ; ; # .߇ᡖⴓⴇ +.\u07C7ᡖႳⴇ; ; [B2, B3, V6]; xn--te28c.xn--isb286btrgo7w; ; ; # .߇ᡖႳⴇ +xn--te28c.xn--isb286btrgo7w; .\u07C7ᡖႳⴇ; [B2, B3, V6]; xn--te28c.xn--isb286btrgo7w; ; ; # .߇ᡖႳⴇ +.\u07C7ᡖႳⴇ; .\u07C7ᡖႳⴇ; [B2, B3, V6]; xn--te28c.xn--isb286btrgo7w; ; ; # .߇ᡖႳⴇ +\u200D.\u06B3\u0775; ; [B1, C2, V6]; xn--1ug39444n.xn--mkb20b; ; xn--3j78f.xn--mkb20b; [V6] # .ڳݵ +xn--3j78f.xn--mkb20b; .\u06B3\u0775; [V6]; xn--3j78f.xn--mkb20b; ; ; # .ڳݵ +xn--1ug39444n.xn--mkb20b; \u200D.\u06B3\u0775; [B1, C2, V6]; xn--1ug39444n.xn--mkb20b; ; ; # .ڳݵ +⒛⾳.ꡦ⒈; ⒛音.ꡦ⒈; [V6]; xn--dth6033bzbvx.xn--tsh9439b; ; ; # ⒛音.ꡦ⒈ +20.音.ꡦ1.; ; [V6]; xn--20-9802c.xn--0w5a.xn--1-eg4e.; ; ; # 20.音.ꡦ1. +xn--20-9802c.xn--0w5a.xn--1-eg4e.; 20.音.ꡦ1.; [V6]; xn--20-9802c.xn--0w5a.xn--1-eg4e.; ; ; # 20.音.ꡦ1. +xn--dth6033bzbvx.xn--tsh9439b; ⒛音.ꡦ⒈; [V6]; xn--dth6033bzbvx.xn--tsh9439b; ; ; # ⒛音.ꡦ⒈ +\u07DC8-。𑁿𐩥\u09CD; \u07DC8-.𑁿𐩥\u09CD; [B2, B3, B5, B6, V3, V6]; xn--8--rve13079p.xn--b7b9842k42df776x; ; ; # ߜ8-.𑁿𐩥্ +\u07DC8-。𑁿𐩥\u09CD; \u07DC8-.𑁿𐩥\u09CD; [B2, B3, B5, B6, V3, V6]; xn--8--rve13079p.xn--b7b9842k42df776x; ; ; # ߜ8-.𑁿𐩥্ +xn--8--rve13079p.xn--b7b9842k42df776x; \u07DC8-.𑁿𐩥\u09CD; [B2, B3, B5, B6, V3, V6]; xn--8--rve13079p.xn--b7b9842k42df776x; ; ; # ߜ8-.𑁿𐩥্ +Ⴕ。۰≮ß\u0745; Ⴕ.۰≮ß\u0745; [V6]; xn--tnd.xn--zca912alh227g; ; xn--tnd.xn--ss-jbe65aw27i; # Ⴕ.۰≮ß݅ +Ⴕ。۰<\u0338ß\u0745; Ⴕ.۰≮ß\u0745; [V6]; xn--tnd.xn--zca912alh227g; ; xn--tnd.xn--ss-jbe65aw27i; # Ⴕ.۰≮ß݅ +ⴕ。۰<\u0338ß\u0745; ⴕ.۰≮ß\u0745; ; xn--dlj.xn--zca912alh227g; ; xn--dlj.xn--ss-jbe65aw27i; # ⴕ.۰≮ß݅ +ⴕ。۰≮ß\u0745; ⴕ.۰≮ß\u0745; ; xn--dlj.xn--zca912alh227g; ; xn--dlj.xn--ss-jbe65aw27i; # ⴕ.۰≮ß݅ +Ⴕ。۰≮SS\u0745; Ⴕ.۰≮ss\u0745; [V6]; xn--tnd.xn--ss-jbe65aw27i; ; ; # Ⴕ.۰≮ss݅ +Ⴕ。۰<\u0338SS\u0745; Ⴕ.۰≮ss\u0745; [V6]; xn--tnd.xn--ss-jbe65aw27i; ; ; # Ⴕ.۰≮ss݅ +ⴕ。۰<\u0338ss\u0745; ⴕ.۰≮ss\u0745; ; xn--dlj.xn--ss-jbe65aw27i; ; ; # ⴕ.۰≮ss݅ +ⴕ。۰≮ss\u0745; ⴕ.۰≮ss\u0745; ; xn--dlj.xn--ss-jbe65aw27i; ; ; # ⴕ.۰≮ss݅ +Ⴕ。۰≮Ss\u0745; Ⴕ.۰≮ss\u0745; [V6]; xn--tnd.xn--ss-jbe65aw27i; ; ; # Ⴕ.۰≮ss݅ +Ⴕ。۰<\u0338Ss\u0745; Ⴕ.۰≮ss\u0745; [V6]; xn--tnd.xn--ss-jbe65aw27i; ; ; # Ⴕ.۰≮ss݅ +xn--tnd.xn--ss-jbe65aw27i; Ⴕ.۰≮ss\u0745; [V6]; xn--tnd.xn--ss-jbe65aw27i; ; ; # Ⴕ.۰≮ss݅ +xn--dlj.xn--ss-jbe65aw27i; ⴕ.۰≮ss\u0745; ; xn--dlj.xn--ss-jbe65aw27i; ; ; # ⴕ.۰≮ss݅ +ⴕ.۰≮ss\u0745; ; ; xn--dlj.xn--ss-jbe65aw27i; ; ; # ⴕ.۰≮ss݅ +ⴕ.۰<\u0338ss\u0745; ⴕ.۰≮ss\u0745; ; xn--dlj.xn--ss-jbe65aw27i; ; ; # ⴕ.۰≮ss݅ +Ⴕ.۰<\u0338SS\u0745; Ⴕ.۰≮ss\u0745; [V6]; xn--tnd.xn--ss-jbe65aw27i; ; ; # Ⴕ.۰≮ss݅ +Ⴕ.۰≮SS\u0745; Ⴕ.۰≮ss\u0745; [V6]; xn--tnd.xn--ss-jbe65aw27i; ; ; # Ⴕ.۰≮ss݅ +Ⴕ.۰≮Ss\u0745; Ⴕ.۰≮ss\u0745; [V6]; xn--tnd.xn--ss-jbe65aw27i; ; ; # Ⴕ.۰≮ss݅ +Ⴕ.۰<\u0338Ss\u0745; Ⴕ.۰≮ss\u0745; [V6]; xn--tnd.xn--ss-jbe65aw27i; ; ; # Ⴕ.۰≮ss݅ +xn--dlj.xn--zca912alh227g; ⴕ.۰≮ß\u0745; ; xn--dlj.xn--zca912alh227g; ; ; # ⴕ.۰≮ß݅ +ⴕ.۰≮ß\u0745; ; ; xn--dlj.xn--zca912alh227g; ; xn--dlj.xn--ss-jbe65aw27i; # ⴕ.۰≮ß݅ +ⴕ.۰<\u0338ß\u0745; ⴕ.۰≮ß\u0745; ; xn--dlj.xn--zca912alh227g; ; xn--dlj.xn--ss-jbe65aw27i; # ⴕ.۰≮ß݅ +xn--tnd.xn--zca912alh227g; Ⴕ.۰≮ß\u0745; [V6]; xn--tnd.xn--zca912alh227g; ; ; # Ⴕ.۰≮ß݅ +\u07E9-.𝨗꒱\u1B72; ; [B1, B3, V3, V5]; xn----odd.xn--dwf8994dc8wj; ; ; # ߩ-.𝨗꒱᭲ +xn----odd.xn--dwf8994dc8wj; \u07E9-.𝨗꒱\u1B72; [B1, B3, V3, V5]; xn----odd.xn--dwf8994dc8wj; ; ; # ߩ-.𝨗꒱᭲ +\u200C.≯䕵⫧; ; [B1, B3, C1, V6]; xn--0ugx453p.xn--hdh754ax6w; ; xn--sn7h.xn--hdh754ax6w; [B1, V6] # .≯䕵⫧ +\u200C.>\u0338䕵⫧; \u200C.≯䕵⫧; [B1, B3, C1, V6]; xn--0ugx453p.xn--hdh754ax6w; ; xn--sn7h.xn--hdh754ax6w; [B1, V6] # .≯䕵⫧ +xn--sn7h.xn--hdh754ax6w; .≯䕵⫧; [B1, V6]; xn--sn7h.xn--hdh754ax6w; ; ; # .≯䕵⫧ +xn--0ugx453p.xn--hdh754ax6w; \u200C.≯䕵⫧; [B1, B3, C1, V6]; xn--0ugx453p.xn--hdh754ax6w; ; ; # .≯䕵⫧ +𐨅ß\uFC57.\u06AC۳︒; 𐨅ß\u064A\u062E.\u06AC۳︒; [B1, B3, V5, V6]; xn--zca23yncs877j.xn--fkb6lp314e; ; xn--ss-ytd5i7765l.xn--fkb6lp314e; # 𐨅ßيخ.ڬ۳︒ +𐨅ß\u064A\u062E.\u06AC۳。; 𐨅ß\u064A\u062E.\u06AC۳.; [B1, V5]; xn--zca23yncs877j.xn--fkb6l.; ; xn--ss-ytd5i7765l.xn--fkb6l.; # 𐨅ßيخ.ڬ۳. +𐨅SS\u064A\u062E.\u06AC۳。; 𐨅ss\u064A\u062E.\u06AC۳.; [B1, V5]; xn--ss-ytd5i7765l.xn--fkb6l.; ; ; # 𐨅ssيخ.ڬ۳. +𐨅ss\u064A\u062E.\u06AC۳。; 𐨅ss\u064A\u062E.\u06AC۳.; [B1, V5]; xn--ss-ytd5i7765l.xn--fkb6l.; ; ; # 𐨅ssيخ.ڬ۳. +𐨅Ss\u064A\u062E.\u06AC۳。; 𐨅ss\u064A\u062E.\u06AC۳.; [B1, V5]; xn--ss-ytd5i7765l.xn--fkb6l.; ; ; # 𐨅ssيخ.ڬ۳. +xn--ss-ytd5i7765l.xn--fkb6l.; 𐨅ss\u064A\u062E.\u06AC۳.; [B1, V5]; xn--ss-ytd5i7765l.xn--fkb6l.; ; ; # 𐨅ssيخ.ڬ۳. +xn--zca23yncs877j.xn--fkb6l.; 𐨅ß\u064A\u062E.\u06AC۳.; [B1, V5]; xn--zca23yncs877j.xn--fkb6l.; ; ; # 𐨅ßيخ.ڬ۳. +𐨅SS\uFC57.\u06AC۳︒; 𐨅ss\u064A\u062E.\u06AC۳︒; [B1, B3, V5, V6]; xn--ss-ytd5i7765l.xn--fkb6lp314e; ; ; # 𐨅ssيخ.ڬ۳︒ +𐨅ss\uFC57.\u06AC۳︒; 𐨅ss\u064A\u062E.\u06AC۳︒; [B1, B3, V5, V6]; xn--ss-ytd5i7765l.xn--fkb6lp314e; ; ; # 𐨅ssيخ.ڬ۳︒ +𐨅Ss\uFC57.\u06AC۳︒; 𐨅ss\u064A\u062E.\u06AC۳︒; [B1, B3, V5, V6]; xn--ss-ytd5i7765l.xn--fkb6lp314e; ; ; # 𐨅ssيخ.ڬ۳︒ +xn--ss-ytd5i7765l.xn--fkb6lp314e; 𐨅ss\u064A\u062E.\u06AC۳︒; [B1, B3, V5, V6]; xn--ss-ytd5i7765l.xn--fkb6lp314e; ; ; # 𐨅ssيخ.ڬ۳︒ +xn--zca23yncs877j.xn--fkb6lp314e; 𐨅ß\u064A\u062E.\u06AC۳︒; [B1, B3, V5, V6]; xn--zca23yncs877j.xn--fkb6lp314e; ; ; # 𐨅ßيخ.ڬ۳︒ +-≮🡒\u1CED.Ⴁ\u0714; ; [B1, V3, V6]; xn----44l04zxt68c.xn--enb300c1597h; ; ; # -≮🡒᳭.Ⴁܔ +-<\u0338🡒\u1CED.Ⴁ\u0714; -≮🡒\u1CED.Ⴁ\u0714; [B1, V3, V6]; xn----44l04zxt68c.xn--enb300c1597h; ; ; # -≮🡒᳭.Ⴁܔ +-<\u0338🡒\u1CED.ⴁ\u0714; -≮🡒\u1CED.ⴁ\u0714; [B1, V3, V6]; xn----44l04zxt68c.xn--enb135qf106f; ; ; # -≮🡒᳭.ⴁܔ +-≮🡒\u1CED.ⴁ\u0714; ; [B1, V3, V6]; xn----44l04zxt68c.xn--enb135qf106f; ; ; # -≮🡒᳭.ⴁܔ +xn----44l04zxt68c.xn--enb135qf106f; -≮🡒\u1CED.ⴁ\u0714; [B1, V3, V6]; xn----44l04zxt68c.xn--enb135qf106f; ; ; # -≮🡒᳭.ⴁܔ +xn----44l04zxt68c.xn--enb300c1597h; -≮🡒\u1CED.Ⴁ\u0714; [B1, V3, V6]; xn----44l04zxt68c.xn--enb300c1597h; ; ; # -≮🡒᳭.Ⴁܔ +𞤨。ꡏ\u200D\u200C; 𞤨.ꡏ\u200D\u200C; [B6, C1, C2]; xn--ge6h.xn--0ugb9575h; ; xn--ge6h.xn--oc9a; [] # 𞤨.ꡏ +𞤨。ꡏ\u200D\u200C; 𞤨.ꡏ\u200D\u200C; [B6, C1, C2]; xn--ge6h.xn--0ugb9575h; ; xn--ge6h.xn--oc9a; [] # 𞤨.ꡏ +𞤆。ꡏ\u200D\u200C; 𞤨.ꡏ\u200D\u200C; [B6, C1, C2]; xn--ge6h.xn--0ugb9575h; ; xn--ge6h.xn--oc9a; [] # 𞤨.ꡏ +xn--ge6h.xn--oc9a; 𞤨.ꡏ; ; xn--ge6h.xn--oc9a; ; ; # 𞤨.ꡏ +𞤨.ꡏ; ; ; xn--ge6h.xn--oc9a; ; ; # 𞤨.ꡏ +𞤆.ꡏ; 𞤨.ꡏ; ; xn--ge6h.xn--oc9a; ; ; # 𞤨.ꡏ +xn--ge6h.xn--0ugb9575h; 𞤨.ꡏ\u200D\u200C; [B6, C1, C2]; xn--ge6h.xn--0ugb9575h; ; ; # 𞤨.ꡏ +𞤆。ꡏ\u200D\u200C; 𞤨.ꡏ\u200D\u200C; [B6, C1, C2]; xn--ge6h.xn--0ugb9575h; ; xn--ge6h.xn--oc9a; [] # 𞤨.ꡏ +󠅹𑂶.ᢌ𑂹\u0669; 𑂶.ᢌ𑂹\u0669; [B1, B5, B6, V5]; xn--b50d.xn--iib993gyp5p; ; ; # 𑂶.ᢌ𑂹٩ +󠅹𑂶.ᢌ𑂹\u0669; 𑂶.ᢌ𑂹\u0669; [B1, B5, B6, V5]; xn--b50d.xn--iib993gyp5p; ; ; # 𑂶.ᢌ𑂹٩ +xn--b50d.xn--iib993gyp5p; 𑂶.ᢌ𑂹\u0669; [B1, B5, B6, V5]; xn--b50d.xn--iib993gyp5p; ; ; # 𑂶.ᢌ𑂹٩ +Ⅎ󠅺。≯⾑; Ⅎ.≯襾; [V6]; xn--f3g73398c.xn--hdhz171b; ; ; # Ⅎ.≯襾 +Ⅎ󠅺。>\u0338⾑; Ⅎ.≯襾; [V6]; xn--f3g73398c.xn--hdhz171b; ; ; # Ⅎ.≯襾 +Ⅎ󠅺。≯襾; Ⅎ.≯襾; [V6]; xn--f3g73398c.xn--hdhz171b; ; ; # Ⅎ.≯襾 +Ⅎ󠅺。>\u0338襾; Ⅎ.≯襾; [V6]; xn--f3g73398c.xn--hdhz171b; ; ; # Ⅎ.≯襾 +ⅎ󠅺。>\u0338襾; ⅎ.≯襾; [V6]; xn--73g39298c.xn--hdhz171b; ; ; # ⅎ.≯襾 +ⅎ󠅺。≯襾; ⅎ.≯襾; [V6]; xn--73g39298c.xn--hdhz171b; ; ; # ⅎ.≯襾 +xn--73g39298c.xn--hdhz171b; ⅎ.≯襾; [V6]; xn--73g39298c.xn--hdhz171b; ; ; # ⅎ.≯襾 +xn--f3g73398c.xn--hdhz171b; Ⅎ.≯襾; [V6]; xn--f3g73398c.xn--hdhz171b; ; ; # Ⅎ.≯襾 +ⅎ󠅺。>\u0338⾑; ⅎ.≯襾; [V6]; xn--73g39298c.xn--hdhz171b; ; ; # ⅎ.≯襾 +ⅎ󠅺。≯⾑; ⅎ.≯襾; [V6]; xn--73g39298c.xn--hdhz171b; ; ; # ⅎ.≯襾 +ς\u200D\u0DD4\u0660。-; ς\u200D\u0DD4\u0660.-; [B1, B5, B6, C2, V3]; xn--3xa45ks2jenu.-; ; xn--4xa25ks2j.-; [B1, B5, B6, V3] # ςු٠.- +ς\u200D\u0DD4\u0660。-; ς\u200D\u0DD4\u0660.-; [B1, B5, B6, C2, V3]; xn--3xa45ks2jenu.-; ; xn--4xa25ks2j.-; [B1, B5, B6, V3] # ςු٠.- +Σ\u200D\u0DD4\u0660。-; σ\u200D\u0DD4\u0660.-; [B1, B5, B6, C2, V3]; xn--4xa25ks2jenu.-; ; xn--4xa25ks2j.-; [B1, B5, B6, V3] # σු٠.- +σ\u200D\u0DD4\u0660。-; σ\u200D\u0DD4\u0660.-; [B1, B5, B6, C2, V3]; xn--4xa25ks2jenu.-; ; xn--4xa25ks2j.-; [B1, B5, B6, V3] # σු٠.- +xn--4xa25ks2j.-; σ\u0DD4\u0660.-; [B1, B5, B6, V3]; xn--4xa25ks2j.-; ; ; # σු٠.- +xn--4xa25ks2jenu.-; σ\u200D\u0DD4\u0660.-; [B1, B5, B6, C2, V3]; xn--4xa25ks2jenu.-; ; ; # σු٠.- +xn--3xa45ks2jenu.-; ς\u200D\u0DD4\u0660.-; [B1, B5, B6, C2, V3]; xn--3xa45ks2jenu.-; ; ; # ςු٠.- +Σ\u200D\u0DD4\u0660。-; σ\u200D\u0DD4\u0660.-; [B1, B5, B6, C2, V3]; xn--4xa25ks2jenu.-; ; xn--4xa25ks2j.-; [B1, B5, B6, V3] # σු٠.- +σ\u200D\u0DD4\u0660。-; σ\u200D\u0DD4\u0660.-; [B1, B5, B6, C2, V3]; xn--4xa25ks2jenu.-; ; xn--4xa25ks2j.-; [B1, B5, B6, V3] # σු٠.- +\u200C.ßႩ-; ; [C1, V3, V6]; xn--0ug.xn----pfa042j; ; .xn--ss--4rn; [V3, V6, A4_2] # .ßႩ- +\u200C.ßⴉ-; ; [C1, V3]; xn--0ug.xn----pfa2305a; ; .xn--ss--bi1b; [V3, A4_2] # .ßⴉ- +\u200C.SSႩ-; \u200C.ssႩ-; [C1, V3, V6]; xn--0ug.xn--ss--4rn; ; .xn--ss--4rn; [V3, V6, A4_2] # .ssႩ- +\u200C.ssⴉ-; ; [C1, V3]; xn--0ug.xn--ss--bi1b; ; .xn--ss--bi1b; [V3, A4_2] # .ssⴉ- +\u200C.Ssⴉ-; \u200C.ssⴉ-; [C1, V3]; xn--0ug.xn--ss--bi1b; ; .xn--ss--bi1b; [V3, A4_2] # .ssⴉ- +.xn--ss--bi1b; .ssⴉ-; [V3, X4_2]; .xn--ss--bi1b; [V3, A4_2]; ; # .ssⴉ- +xn--0ug.xn--ss--bi1b; \u200C.ssⴉ-; [C1, V3]; xn--0ug.xn--ss--bi1b; ; ; # .ssⴉ- +.xn--ss--4rn; .ssႩ-; [V3, V6, X4_2]; .xn--ss--4rn; [V3, V6, A4_2]; ; # .ssႩ- +xn--0ug.xn--ss--4rn; \u200C.ssႩ-; [C1, V3, V6]; xn--0ug.xn--ss--4rn; ; ; # .ssႩ- +xn--0ug.xn----pfa2305a; \u200C.ßⴉ-; [C1, V3]; xn--0ug.xn----pfa2305a; ; ; # .ßⴉ- +xn--0ug.xn----pfa042j; \u200C.ßႩ-; [C1, V3, V6]; xn--0ug.xn----pfa042j; ; ; # .ßႩ- +𐫍㓱。⾑; 𐫍㓱.襾; [B5, V6]; xn--u7kt691dlj09f.xn--9v2a; ; ; # 𐫍㓱.襾 +𐫍㓱。襾; 𐫍㓱.襾; [B5, V6]; xn--u7kt691dlj09f.xn--9v2a; ; ; # 𐫍㓱.襾 +xn--u7kt691dlj09f.xn--9v2a; 𐫍㓱.襾; [B5, V6]; xn--u7kt691dlj09f.xn--9v2a; ; ; # 𐫍㓱.襾 +\u06A0𐮋𐹰≮。≯\u200D; \u06A0𐮋𐹰≮.≯\u200D; [B1, B3, C2, V6]; xn--2jb053lf13nyoc.xn--1ugx6gc8096c; ; xn--2jb053lf13nyoc.xn--hdh08821l; [B1, B3, V6] # ڠ𐮋𐹰≮.≯ +\u06A0𐮋𐹰<\u0338。>\u0338\u200D; \u06A0𐮋𐹰≮.≯\u200D; [B1, B3, C2, V6]; xn--2jb053lf13nyoc.xn--1ugx6gc8096c; ; xn--2jb053lf13nyoc.xn--hdh08821l; [B1, B3, V6] # ڠ𐮋𐹰≮.≯ +xn--2jb053lf13nyoc.xn--hdh08821l; \u06A0𐮋𐹰≮.≯; [B1, B3, V6]; xn--2jb053lf13nyoc.xn--hdh08821l; ; ; # ڠ𐮋𐹰≮.≯ +xn--2jb053lf13nyoc.xn--1ugx6gc8096c; \u06A0𐮋𐹰≮.≯\u200D; [B1, B3, C2, V6]; xn--2jb053lf13nyoc.xn--1ugx6gc8096c; ; ; # ڠ𐮋𐹰≮.≯ +𝟞。\u0777\u08B0⩋; 6.\u0777\u08B0⩋; [B1, B5, B6, V6]; 6.xn--7pb04do15eq748f; ; ; # 6.ݷࢰ⩋ +6。\u0777\u08B0⩋; 6.\u0777\u08B0⩋; [B1, B5, B6, V6]; 6.xn--7pb04do15eq748f; ; ; # 6.ݷࢰ⩋ +6.xn--7pb04do15eq748f; 6.\u0777\u08B0⩋; [B1, B5, B6, V6]; 6.xn--7pb04do15eq748f; ; ; # 6.ݷࢰ⩋ +-\uFCFD。𑇀𑍴; -\u0634\u0649.𑇀𑍴; [B1, V3, V5]; xn----qnc7d.xn--wd1d62a; ; ; # -شى.𑇀𑍴 +-\uFCFD。𑇀𑍴; -\u0634\u0649.𑇀𑍴; [B1, V3, V5]; xn----qnc7d.xn--wd1d62a; ; ; # -شى.𑇀𑍴 +-\u0634\u0649。𑇀𑍴; -\u0634\u0649.𑇀𑍴; [B1, V3, V5]; xn----qnc7d.xn--wd1d62a; ; ; # -شى.𑇀𑍴 +xn----qnc7d.xn--wd1d62a; -\u0634\u0649.𑇀𑍴; [B1, V3, V5]; xn----qnc7d.xn--wd1d62a; ; ; # -شى.𑇀𑍴 +\u200C𝟏.\u0D43𐹬; \u200C1.\u0D43𐹬; [B1, C1, V5, V6]; xn--1-rgnu0071n.xn--mxc0872kcu37dnmem; ; xn--1-f521m.xn--mxc0872kcu37dnmem; [B1, V5, V6] # 1.ൃ𐹬 +\u200C1.\u0D43𐹬; ; [B1, C1, V5, V6]; xn--1-rgnu0071n.xn--mxc0872kcu37dnmem; ; xn--1-f521m.xn--mxc0872kcu37dnmem; [B1, V5, V6] # 1.ൃ𐹬 +xn--1-f521m.xn--mxc0872kcu37dnmem; 1.\u0D43𐹬; [B1, V5, V6]; xn--1-f521m.xn--mxc0872kcu37dnmem; ; ; # 1.ൃ𐹬 +xn--1-rgnu0071n.xn--mxc0872kcu37dnmem; \u200C1.\u0D43𐹬; [B1, C1, V5, V6]; xn--1-rgnu0071n.xn--mxc0872kcu37dnmem; ; ; # 1.ൃ𐹬 +齙--𝟰.ß; 齙--4.ß; ; xn----4-p16k.xn--zca; ; xn----4-p16k.ss; # 齙--4.ß +齙--4.ß; ; ; xn----4-p16k.xn--zca; ; xn----4-p16k.ss; # 齙--4.ß +齙--4.SS; 齙--4.ss; ; xn----4-p16k.ss; ; ; # 齙--4.ss +齙--4.ss; ; ; xn----4-p16k.ss; ; ; # 齙--4.ss +齙--4.Ss; 齙--4.ss; ; xn----4-p16k.ss; ; ; # 齙--4.ss +xn----4-p16k.ss; 齙--4.ss; ; xn----4-p16k.ss; ; ; # 齙--4.ss +xn----4-p16k.xn--zca; 齙--4.ß; ; xn----4-p16k.xn--zca; ; ; # 齙--4.ß +齙--𝟰.SS; 齙--4.ss; ; xn----4-p16k.ss; ; ; # 齙--4.ss +齙--𝟰.ss; 齙--4.ss; ; xn----4-p16k.ss; ; ; # 齙--4.ss +齙--𝟰.Ss; 齙--4.ss; ; xn----4-p16k.ss; ; ; # 齙--4.ss +\u1BF2.𐹢𞀖\u200C; ; [B1, C1, V5]; xn--0zf.xn--0ug9894grqqf; ; xn--0zf.xn--9n0d2296a; [B1, V5] # ᯲.𐹢𞀖 +xn--0zf.xn--9n0d2296a; \u1BF2.𐹢𞀖; [B1, V5]; xn--0zf.xn--9n0d2296a; ; ; # ᯲.𐹢𞀖 +xn--0zf.xn--0ug9894grqqf; \u1BF2.𐹢𞀖\u200C; [B1, C1, V5]; xn--0zf.xn--0ug9894grqqf; ; ; # ᯲.𐹢𞀖 +。?-\u200D; .?-\u200D; [C2, V6]; xn--ct86d8w51a.xn--?--n1t; ; xn--ct86d8w51a.?-; [V3, V6] # .?- +。?-\u200D; .?-\u200D; [C2, V6]; xn--ct86d8w51a.xn--?--n1t; ; xn--ct86d8w51a.?-; [V3, V6] # .?- +xn--ct86d8w51a.?-; .?-; [V3, V6]; xn--ct86d8w51a.?-; ; ; # .?- +xn--ct86d8w51a.xn--?--n1t; .?-\u200D; [C2, V6]; xn--ct86d8w51a.xn--?--n1t; ; ; # .?- +xn--ct86d8w51a.?-\u200D; .?-\u200D; [C2, V6]; xn--ct86d8w51a.xn--?--n1t; ; xn--ct86d8w51a.?-; [V3, V6] # .?- +XN--CT86D8W51A.?-\u200D; .?-\u200D; [C2, V6]; xn--ct86d8w51a.xn--?--n1t; ; xn--ct86d8w51a.?-; [V3, V6] # .?- +Xn--Ct86d8w51a.?-\u200D; .?-\u200D; [C2, V6]; xn--ct86d8w51a.xn--?--n1t; ; xn--ct86d8w51a.?-; [V3, V6] # .?- +\u1A60.-𝪩悎; \u1A60.-𝪩悎; [B1, B2, B3, V5, V6]; xn--jof.xn----gf4bq282iezpa; ; ; # ᩠.-𝪩悎 +\u1A60.-𝪩悎; ; [B1, B2, B3, V5, V6]; xn--jof.xn----gf4bq282iezpa; ; ; # ᩠.-𝪩悎 +xn--jof.xn----gf4bq282iezpa; \u1A60.-𝪩悎; [B1, B2, B3, V5, V6]; xn--jof.xn----gf4bq282iezpa; ; ; # ᩠.-𝪩悎 +.𞤳; .𞤳; [B2, B3, B6, V6]; xn--xx5gy2741c.xn--re6hw266j; ; ; # .𞤳 +.𞤳; ; [B2, B3, B6, V6]; xn--xx5gy2741c.xn--re6hw266j; ; ; # .𞤳 +.𞤑; .𞤳; [B2, B3, B6, V6]; xn--xx5gy2741c.xn--re6hw266j; ; ; # .𞤳 +xn--xx5gy2741c.xn--re6hw266j; .𞤳; [B2, B3, B6, V6]; xn--xx5gy2741c.xn--re6hw266j; ; ; # .𞤳 +.𞤑; .𞤳; [B2, B3, B6, V6]; xn--xx5gy2741c.xn--re6hw266j; ; ; # .𞤳 +\u071C𐫒\u062E.𐋲; ; [B1]; xn--tgb98b8643d.xn--m97c; ; ; # ܜ𐫒خ.𐋲 +xn--tgb98b8643d.xn--m97c; \u071C𐫒\u062E.𐋲; [B1]; xn--tgb98b8643d.xn--m97c; ; ; # ܜ𐫒خ.𐋲 +𐼑𞤓\u0637\u08E2.?; 𐼑𞤵\u0637\u08E2.?; [B1, V6]; xn--2gb08k9w69agm0g.?; ; ; # 𐼑𞤵ط.? +𐼑𞤵\u0637\u08E2.?; ; [B1, V6]; xn--2gb08k9w69agm0g.?; ; ; # 𐼑𞤵ط.? +xn--2gb08k9w69agm0g.?; 𐼑𞤵\u0637\u08E2.?; [B1, V6]; xn--2gb08k9w69agm0g.?; ; ; # 𐼑𞤵ط.? +Ↄ。\u0A4D\u1CD4; Ↄ.\u1CD4\u0A4D; [B1, V5, V6]; xn--q5g.xn--ybc995g0835a; ; ; # Ↄ.᳔੍ +Ↄ。\u1CD4\u0A4D; Ↄ.\u1CD4\u0A4D; [B1, V5, V6]; xn--q5g.xn--ybc995g0835a; ; ; # Ↄ.᳔੍ +ↄ。\u1CD4\u0A4D; ↄ.\u1CD4\u0A4D; [B1, V5, V6]; xn--r5g.xn--ybc995g0835a; ; ; # ↄ.᳔੍ +xn--r5g.xn--ybc995g0835a; ↄ.\u1CD4\u0A4D; [B1, V5, V6]; xn--r5g.xn--ybc995g0835a; ; ; # ↄ.᳔੍ +xn--q5g.xn--ybc995g0835a; Ↄ.\u1CD4\u0A4D; [B1, V5, V6]; xn--q5g.xn--ybc995g0835a; ; ; # Ↄ.᳔੍ +ↄ。\u0A4D\u1CD4; ↄ.\u1CD4\u0A4D; [B1, V5, V6]; xn--r5g.xn--ybc995g0835a; ; ; # ↄ.᳔੍ +-。≮𑜫; -.≮𑜫; [V3, V6]; xn----bh61m.xn--gdhz157g0em1d; ; ; # -.≮𑜫 +-。<\u0338𑜫; -.≮𑜫; [V3, V6]; xn----bh61m.xn--gdhz157g0em1d; ; ; # -.≮𑜫 +xn----bh61m.xn--gdhz157g0em1d; -.≮𑜫; [V3, V6]; xn----bh61m.xn--gdhz157g0em1d; ; ; # -.≮𑜫 +\u200C\u200D。≮Ⴉ; \u200C\u200D.≮Ⴉ; [C1, C2, V6]; xn--0ugc90904y.xn--hnd112gpz83n; ; xn--3n36e.xn--hnd112gpz83n; [V6] # .≮Ⴉ +\u200C\u200D。<\u0338Ⴉ; \u200C\u200D.≮Ⴉ; [C1, C2, V6]; xn--0ugc90904y.xn--hnd112gpz83n; ; xn--3n36e.xn--hnd112gpz83n; [V6] # .≮Ⴉ +\u200C\u200D。<\u0338ⴉ; \u200C\u200D.≮ⴉ; [C1, C2, V6]; xn--0ugc90904y.xn--gdh992byu01p; ; xn--3n36e.xn--gdh992byu01p; [V6] # .≮ⴉ +\u200C\u200D。≮ⴉ; \u200C\u200D.≮ⴉ; [C1, C2, V6]; xn--0ugc90904y.xn--gdh992byu01p; ; xn--3n36e.xn--gdh992byu01p; [V6] # .≮ⴉ +xn--3n36e.xn--gdh992byu01p; .≮ⴉ; [V6]; xn--3n36e.xn--gdh992byu01p; ; ; # .≮ⴉ +xn--0ugc90904y.xn--gdh992byu01p; \u200C\u200D.≮ⴉ; [C1, C2, V6]; xn--0ugc90904y.xn--gdh992byu01p; ; ; # .≮ⴉ +xn--3n36e.xn--hnd112gpz83n; .≮Ⴉ; [V6]; xn--3n36e.xn--hnd112gpz83n; ; ; # .≮Ⴉ +xn--0ugc90904y.xn--hnd112gpz83n; \u200C\u200D.≮Ⴉ; [C1, C2, V6]; xn--0ugc90904y.xn--hnd112gpz83n; ; ; # .≮Ⴉ +𐹯-𑄴\u08BC。︒䖐⾆; 𐹯-𑄴\u08BC.︒䖐舌; [B1, V6]; xn----rpd7902rclc.xn--fpo216mn07e; ; ; # 𐹯-𑄴ࢼ.︒䖐舌 +𐹯-𑄴\u08BC。。䖐舌; 𐹯-𑄴\u08BC..䖐舌; [B1, X4_2]; xn----rpd7902rclc..xn--fpo216m; [B1, A4_2]; ; # 𐹯-𑄴ࢼ..䖐舌 +xn----rpd7902rclc..xn--fpo216m; 𐹯-𑄴\u08BC..䖐舌; [B1, X4_2]; xn----rpd7902rclc..xn--fpo216m; [B1, A4_2]; ; # 𐹯-𑄴ࢼ..䖐舌 +xn----rpd7902rclc.xn--fpo216mn07e; 𐹯-𑄴\u08BC.︒䖐舌; [B1, V6]; xn----rpd7902rclc.xn--fpo216mn07e; ; ; # 𐹯-𑄴ࢼ.︒䖐舌 +𝪞Ⴐ。쪡; 𝪞Ⴐ.쪡; [V5, V6]; xn--ond3755u.xn--pi6b; ; ; # 𝪞Ⴐ.쪡 +𝪞Ⴐ。쪡; 𝪞Ⴐ.쪡; [V5, V6]; xn--ond3755u.xn--pi6b; ; ; # 𝪞Ⴐ.쪡 +𝪞Ⴐ。쪡; 𝪞Ⴐ.쪡; [V5, V6]; xn--ond3755u.xn--pi6b; ; ; # 𝪞Ⴐ.쪡 +𝪞Ⴐ。쪡; 𝪞Ⴐ.쪡; [V5, V6]; xn--ond3755u.xn--pi6b; ; ; # 𝪞Ⴐ.쪡 +𝪞ⴐ。쪡; 𝪞ⴐ.쪡; [V5]; xn--7kj1858k.xn--pi6b; ; ; # 𝪞ⴐ.쪡 +𝪞ⴐ。쪡; 𝪞ⴐ.쪡; [V5]; xn--7kj1858k.xn--pi6b; ; ; # 𝪞ⴐ.쪡 +xn--7kj1858k.xn--pi6b; 𝪞ⴐ.쪡; [V5]; xn--7kj1858k.xn--pi6b; ; ; # 𝪞ⴐ.쪡 +xn--ond3755u.xn--pi6b; 𝪞Ⴐ.쪡; [V5, V6]; xn--ond3755u.xn--pi6b; ; ; # 𝪞Ⴐ.쪡 +𝪞ⴐ。쪡; 𝪞ⴐ.쪡; [V5]; xn--7kj1858k.xn--pi6b; ; ; # 𝪞ⴐ.쪡 +𝪞ⴐ。쪡; 𝪞ⴐ.쪡; [V5]; xn--7kj1858k.xn--pi6b; ; ; # 𝪞ⴐ.쪡 +\u0E3A쩁𐹬.; ; [B1, V5, V6]; xn--o4c4837g2zvb.xn--5f70g; ; ; # ฺ쩁𐹬. +\u0E3A쩁𐹬.; \u0E3A쩁𐹬.; [B1, V5, V6]; xn--o4c4837g2zvb.xn--5f70g; ; ; # ฺ쩁𐹬. +xn--o4c4837g2zvb.xn--5f70g; \u0E3A쩁𐹬.; [B1, V5, V6]; xn--o4c4837g2zvb.xn--5f70g; ; ; # ฺ쩁𐹬. +ᡅ0\u200C。⎢; ᡅ0\u200C.⎢; [C1, V6]; xn--0-z6jy93b.xn--8lh28773l; ; xn--0-z6j.xn--8lh28773l; [V6] # ᡅ0.⎢ +ᡅ0\u200C。⎢; ᡅ0\u200C.⎢; [C1, V6]; xn--0-z6jy93b.xn--8lh28773l; ; xn--0-z6j.xn--8lh28773l; [V6] # ᡅ0.⎢ +xn--0-z6j.xn--8lh28773l; ᡅ0.⎢; [V6]; xn--0-z6j.xn--8lh28773l; ; ; # ᡅ0.⎢ +xn--0-z6jy93b.xn--8lh28773l; ᡅ0\u200C.⎢; [C1, V6]; xn--0-z6jy93b.xn--8lh28773l; ; ; # ᡅ0.⎢ +9ꍩ\u17D3.\u200Dß; 9ꍩ\u17D3.\u200Dß; [C2, V6]; xn--9-i0j5967eg3qz.xn--zca770n; ; xn--9-i0j5967eg3qz.ss; [V6] # 9ꍩ៓.ß +9ꍩ\u17D3.\u200Dß; ; [C2, V6]; xn--9-i0j5967eg3qz.xn--zca770n; ; xn--9-i0j5967eg3qz.ss; [V6] # 9ꍩ៓.ß +9ꍩ\u17D3.\u200DSS; 9ꍩ\u17D3.\u200Dss; [C2, V6]; xn--9-i0j5967eg3qz.xn--ss-l1t; ; xn--9-i0j5967eg3qz.ss; [V6] # 9ꍩ៓.ss +9ꍩ\u17D3.\u200Dss; ; [C2, V6]; xn--9-i0j5967eg3qz.xn--ss-l1t; ; xn--9-i0j5967eg3qz.ss; [V6] # 9ꍩ៓.ss +xn--9-i0j5967eg3qz.ss; 9ꍩ\u17D3.ss; [V6]; xn--9-i0j5967eg3qz.ss; ; ; # 9ꍩ៓.ss +xn--9-i0j5967eg3qz.xn--ss-l1t; 9ꍩ\u17D3.\u200Dss; [C2, V6]; xn--9-i0j5967eg3qz.xn--ss-l1t; ; ; # 9ꍩ៓.ss +xn--9-i0j5967eg3qz.xn--zca770n; 9ꍩ\u17D3.\u200Dß; [C2, V6]; xn--9-i0j5967eg3qz.xn--zca770n; ; ; # 9ꍩ៓.ß +9ꍩ\u17D3.\u200DSS; 9ꍩ\u17D3.\u200Dss; [C2, V6]; xn--9-i0j5967eg3qz.xn--ss-l1t; ; xn--9-i0j5967eg3qz.ss; [V6] # 9ꍩ៓.ss +9ꍩ\u17D3.\u200Dss; 9ꍩ\u17D3.\u200Dss; [C2, V6]; xn--9-i0j5967eg3qz.xn--ss-l1t; ; xn--9-i0j5967eg3qz.ss; [V6] # 9ꍩ៓.ss +9ꍩ\u17D3.\u200DSs; 9ꍩ\u17D3.\u200Dss; [C2, V6]; xn--9-i0j5967eg3qz.xn--ss-l1t; ; xn--9-i0j5967eg3qz.ss; [V6] # 9ꍩ៓.ss +9ꍩ\u17D3.\u200DSs; 9ꍩ\u17D3.\u200Dss; [C2, V6]; xn--9-i0j5967eg3qz.xn--ss-l1t; ; xn--9-i0j5967eg3qz.ss; [V6] # 9ꍩ៓.ss +ꗷ𑆀.\u075D𐩒; ; ; xn--ju8a625r.xn--hpb0073k; ; ; # ꗷ𑆀.ݝ𐩒 +xn--ju8a625r.xn--hpb0073k; ꗷ𑆀.\u075D𐩒; ; xn--ju8a625r.xn--hpb0073k; ; ; # ꗷ𑆀.ݝ𐩒 +⒐≯-。︒-; ⒐≯-.︒-; [V3, V6]; xn----ogot9g.xn----n89hl0522az9u2a; ; ; # ⒐≯-.︒- +⒐>\u0338-。︒-; ⒐≯-.︒-; [V3, V6]; xn----ogot9g.xn----n89hl0522az9u2a; ; ; # ⒐≯-.︒- +9.≯-。。-; 9.≯-..-; [V3, V6, X4_2]; 9.xn----ogo..xn----xj54d1s69k; [V3, V6, A4_2]; ; # 9.≯-..- +9.>\u0338-。。-; 9.≯-..-; [V3, V6, X4_2]; 9.xn----ogo..xn----xj54d1s69k; [V3, V6, A4_2]; ; # 9.≯-..- +9.xn----ogo..xn----xj54d1s69k; 9.≯-..-; [V3, V6, X4_2]; 9.xn----ogo..xn----xj54d1s69k; [V3, V6, A4_2]; ; # 9.≯-..- +xn----ogot9g.xn----n89hl0522az9u2a; ⒐≯-.︒-; [V3, V6]; xn----ogot9g.xn----n89hl0522az9u2a; ; ; # ⒐≯-.︒- +\u0CE3Ⴡ.\u061D; \u0CE3Ⴡ.\u061D; [B6, V6]; xn--vuc49qvu85xmju7a.xn--cgb; ; ; # ೣჁ.؝ +\u0CE3Ⴡ.\u061D; ; [B6, V6]; xn--vuc49qvu85xmju7a.xn--cgb; ; ; # ೣჁ.؝ +\u0CE3ⴡ.\u061D; ; [B6, V6]; xn--vuc226n8n28lmju7a.xn--cgb; ; ; # ೣⴡ.؝ +xn--vuc226n8n28lmju7a.xn--cgb; \u0CE3ⴡ.\u061D; [B6, V6]; xn--vuc226n8n28lmju7a.xn--cgb; ; ; # ೣⴡ.؝ +xn--vuc49qvu85xmju7a.xn--cgb; \u0CE3Ⴡ.\u061D; [B6, V6]; xn--vuc49qvu85xmju7a.xn--cgb; ; ; # ೣჁ.؝ +\u0CE3ⴡ.\u061D; \u0CE3ⴡ.\u061D; [B6, V6]; xn--vuc226n8n28lmju7a.xn--cgb; ; ; # ೣⴡ.؝ +\u1DEB。𐋩\u0638-𐫮; \u1DEB.𐋩\u0638-𐫮; [B1, V5]; xn--gfg.xn----xnc0815qyyg; ; ; # ᷫ.𐋩ظ-𐫮 +xn--gfg.xn----xnc0815qyyg; \u1DEB.𐋩\u0638-𐫮; [B1, V5]; xn--gfg.xn----xnc0815qyyg; ; ; # ᷫ.𐋩ظ-𐫮 +싇。⾇𐳋Ⴝ; 싇.舛𐳋Ⴝ; [B5, V6]; xn--9u4b.xn--1nd7519ch79d; ; ; # 싇.舛𐳋Ⴝ +싇。⾇𐳋Ⴝ; 싇.舛𐳋Ⴝ; [B5, V6]; xn--9u4b.xn--1nd7519ch79d; ; ; # 싇.舛𐳋Ⴝ +싇。舛𐳋Ⴝ; 싇.舛𐳋Ⴝ; [B5, V6]; xn--9u4b.xn--1nd7519ch79d; ; ; # 싇.舛𐳋Ⴝ +싇。舛𐳋Ⴝ; 싇.舛𐳋Ⴝ; [B5, V6]; xn--9u4b.xn--1nd7519ch79d; ; ; # 싇.舛𐳋Ⴝ +싇。舛𐳋ⴝ; 싇.舛𐳋ⴝ; [B5]; xn--9u4b.xn--llj123yh74e; ; ; # 싇.舛𐳋ⴝ +싇。舛𐳋ⴝ; 싇.舛𐳋ⴝ; [B5]; xn--9u4b.xn--llj123yh74e; ; ; # 싇.舛𐳋ⴝ +싇。舛𐲋Ⴝ; 싇.舛𐳋Ⴝ; [B5, V6]; xn--9u4b.xn--1nd7519ch79d; ; ; # 싇.舛𐳋Ⴝ +싇。舛𐲋Ⴝ; 싇.舛𐳋Ⴝ; [B5, V6]; xn--9u4b.xn--1nd7519ch79d; ; ; # 싇.舛𐳋Ⴝ +싇。舛𐲋ⴝ; 싇.舛𐳋ⴝ; [B5]; xn--9u4b.xn--llj123yh74e; ; ; # 싇.舛𐳋ⴝ +싇。舛𐲋ⴝ; 싇.舛𐳋ⴝ; [B5]; xn--9u4b.xn--llj123yh74e; ; ; # 싇.舛𐳋ⴝ +xn--9u4b.xn--llj123yh74e; 싇.舛𐳋ⴝ; [B5]; xn--9u4b.xn--llj123yh74e; ; ; # 싇.舛𐳋ⴝ +xn--9u4b.xn--1nd7519ch79d; 싇.舛𐳋Ⴝ; [B5, V6]; xn--9u4b.xn--1nd7519ch79d; ; ; # 싇.舛𐳋Ⴝ +싇。⾇𐳋ⴝ; 싇.舛𐳋ⴝ; [B5]; xn--9u4b.xn--llj123yh74e; ; ; # 싇.舛𐳋ⴝ +싇。⾇𐳋ⴝ; 싇.舛𐳋ⴝ; [B5]; xn--9u4b.xn--llj123yh74e; ; ; # 싇.舛𐳋ⴝ +싇。⾇𐲋Ⴝ; 싇.舛𐳋Ⴝ; [B5, V6]; xn--9u4b.xn--1nd7519ch79d; ; ; # 싇.舛𐳋Ⴝ +싇。⾇𐲋Ⴝ; 싇.舛𐳋Ⴝ; [B5, V6]; xn--9u4b.xn--1nd7519ch79d; ; ; # 싇.舛𐳋Ⴝ +싇。⾇𐲋ⴝ; 싇.舛𐳋ⴝ; [B5]; xn--9u4b.xn--llj123yh74e; ; ; # 싇.舛𐳋ⴝ +싇。⾇𐲋ⴝ; 싇.舛𐳋ⴝ; [B5]; xn--9u4b.xn--llj123yh74e; ; ; # 싇.舛𐳋ⴝ +𐹠ς。\u200C\u06BFჀ; 𐹠ς.\u200C\u06BFჀ; [B1, C1, V6]; xn--3xa1267k.xn--ykb632cvxm; ; xn--4xa9167k.xn--ykb632c; [B1, B2, B3, V6] # 𐹠ς.ڿჀ +𐹠ς。\u200C\u06BFⴠ; 𐹠ς.\u200C\u06BFⴠ; [B1, C1]; xn--3xa1267k.xn--ykb760k9hj; ; xn--4xa9167k.xn--ykb467q; [B1, B2, B3] # 𐹠ς.ڿⴠ +𐹠Σ。\u200C\u06BFჀ; 𐹠σ.\u200C\u06BFჀ; [B1, C1, V6]; xn--4xa9167k.xn--ykb632cvxm; ; xn--4xa9167k.xn--ykb632c; [B1, B2, B3, V6] # 𐹠σ.ڿჀ +𐹠σ。\u200C\u06BFⴠ; 𐹠σ.\u200C\u06BFⴠ; [B1, C1]; xn--4xa9167k.xn--ykb760k9hj; ; xn--4xa9167k.xn--ykb467q; [B1, B2, B3] # 𐹠σ.ڿⴠ +𐹠Σ。\u200C\u06BFⴠ; 𐹠σ.\u200C\u06BFⴠ; [B1, C1]; xn--4xa9167k.xn--ykb760k9hj; ; xn--4xa9167k.xn--ykb467q; [B1, B2, B3] # 𐹠σ.ڿⴠ +xn--4xa9167k.xn--ykb467q; 𐹠σ.\u06BFⴠ; [B1, B2, B3]; xn--4xa9167k.xn--ykb467q; ; ; # 𐹠σ.ڿⴠ +xn--4xa9167k.xn--ykb760k9hj; 𐹠σ.\u200C\u06BFⴠ; [B1, C1]; xn--4xa9167k.xn--ykb760k9hj; ; ; # 𐹠σ.ڿⴠ +xn--4xa9167k.xn--ykb632c; 𐹠σ.\u06BFჀ; [B1, B2, B3, V6]; xn--4xa9167k.xn--ykb632c; ; ; # 𐹠σ.ڿჀ +xn--4xa9167k.xn--ykb632cvxm; 𐹠σ.\u200C\u06BFჀ; [B1, C1, V6]; xn--4xa9167k.xn--ykb632cvxm; ; ; # 𐹠σ.ڿჀ +xn--3xa1267k.xn--ykb760k9hj; 𐹠ς.\u200C\u06BFⴠ; [B1, C1]; xn--3xa1267k.xn--ykb760k9hj; ; ; # 𐹠ς.ڿⴠ +xn--3xa1267k.xn--ykb632cvxm; 𐹠ς.\u200C\u06BFჀ; [B1, C1, V6]; xn--3xa1267k.xn--ykb632cvxm; ; ; # 𐹠ς.ڿჀ +\u200C\u0604.\u069A-ß; ; [B2, B3, B5, B6, C1, V6]; xn--mfb144kqo32m.xn----qfa315b; ; xn--mfb98261i.xn---ss-sdf; [B2, B3, B5, B6, V6] # .ښ-ß +\u200C\u0604.\u069A-SS; \u200C\u0604.\u069A-ss; [B2, B3, B5, B6, C1, V6]; xn--mfb144kqo32m.xn---ss-sdf; ; xn--mfb98261i.xn---ss-sdf; [B2, B3, B5, B6, V6] # .ښ-ss +\u200C\u0604.\u069A-ss; ; [B2, B3, B5, B6, C1, V6]; xn--mfb144kqo32m.xn---ss-sdf; ; xn--mfb98261i.xn---ss-sdf; [B2, B3, B5, B6, V6] # .ښ-ss +\u200C\u0604.\u069A-Ss; \u200C\u0604.\u069A-ss; [B2, B3, B5, B6, C1, V6]; xn--mfb144kqo32m.xn---ss-sdf; ; xn--mfb98261i.xn---ss-sdf; [B2, B3, B5, B6, V6] # .ښ-ss +xn--mfb98261i.xn---ss-sdf; \u0604.\u069A-ss; [B2, B3, B5, B6, V6]; xn--mfb98261i.xn---ss-sdf; ; ; # .ښ-ss +xn--mfb144kqo32m.xn---ss-sdf; \u200C\u0604.\u069A-ss; [B2, B3, B5, B6, C1, V6]; xn--mfb144kqo32m.xn---ss-sdf; ; ; # .ښ-ss +xn--mfb144kqo32m.xn----qfa315b; \u200C\u0604.\u069A-ß; [B2, B3, B5, B6, C1, V6]; xn--mfb144kqo32m.xn----qfa315b; ; ; # .ښ-ß +\u200C\u200D\u17B5\u067A.-\uFBB0; \u200C\u200D\u17B5\u067A.-\u06D3; [B1, C1, C2, V3, V6]; xn--zib539f8igea.xn----twc1133r17r6g; ; xn--zib539f.xn----twc1133r17r6g; [B1, V3, V5, V6] # ٺ.-ۓ +\u200C\u200D\u17B5\u067A.-\u06D3; ; [B1, C1, C2, V3, V6]; xn--zib539f8igea.xn----twc1133r17r6g; ; xn--zib539f.xn----twc1133r17r6g; [B1, V3, V5, V6] # ٺ.-ۓ +\u200C\u200D\u17B5\u067A.-\u06D2\u0654; \u200C\u200D\u17B5\u067A.-\u06D3; [B1, C1, C2, V3, V6]; xn--zib539f8igea.xn----twc1133r17r6g; ; xn--zib539f.xn----twc1133r17r6g; [B1, V3, V5, V6] # ٺ.-ۓ +xn--zib539f.xn----twc1133r17r6g; \u17B5\u067A.-\u06D3; [B1, V3, V5, V6]; xn--zib539f.xn----twc1133r17r6g; ; ; # ٺ.-ۓ +xn--zib539f8igea.xn----twc1133r17r6g; \u200C\u200D\u17B5\u067A.-\u06D3; [B1, C1, C2, V3, V6]; xn--zib539f8igea.xn----twc1133r17r6g; ; ; # ٺ.-ۓ +。𐮬≠; .𐮬≠; [B3, V6]; xn--dd55c.xn--1ch3003g; ; ; # .𐮬≠ +。𐮬=\u0338; .𐮬≠; [B3, V6]; xn--dd55c.xn--1ch3003g; ; ; # .𐮬≠ +。𐮬≠; .𐮬≠; [B3, V6]; xn--dd55c.xn--1ch3003g; ; ; # .𐮬≠ +。𐮬=\u0338; .𐮬≠; [B3, V6]; xn--dd55c.xn--1ch3003g; ; ; # .𐮬≠ +xn--dd55c.xn--1ch3003g; .𐮬≠; [B3, V6]; xn--dd55c.xn--1ch3003g; ; ; # .𐮬≠ +\u0FB2。𐹮𐹷덝۵; \u0FB2.𐹮𐹷덝۵; [B1, V5, V6]; xn--fgd0675v.xn--imb5839fidpcbba; ; ; # ྲ.𐹮𐹷덝۵ +\u0FB2。𐹮𐹷덝۵; \u0FB2.𐹮𐹷덝۵; [B1, V5, V6]; xn--fgd0675v.xn--imb5839fidpcbba; ; ; # ྲ.𐹮𐹷덝۵ +\u0FB2。𐹮𐹷덝۵; \u0FB2.𐹮𐹷덝۵; [B1, V5, V6]; xn--fgd0675v.xn--imb5839fidpcbba; ; ; # ྲ.𐹮𐹷덝۵ +\u0FB2。𐹮𐹷덝۵; \u0FB2.𐹮𐹷덝۵; [B1, V5, V6]; xn--fgd0675v.xn--imb5839fidpcbba; ; ; # ྲ.𐹮𐹷덝۵ +xn--fgd0675v.xn--imb5839fidpcbba; \u0FB2.𐹮𐹷덝۵; [B1, V5, V6]; xn--fgd0675v.xn--imb5839fidpcbba; ; ; # ྲ.𐹮𐹷덝۵ +Ⴏ󠅋-.\u200DႩ; Ⴏ-.\u200DႩ; [C2, V3, V6]; xn----00g.xn--hnd399e; ; xn----00g.xn--hnd; [V3, V6] # Ⴏ-.Ⴉ +Ⴏ󠅋-.\u200DႩ; Ⴏ-.\u200DႩ; [C2, V3, V6]; xn----00g.xn--hnd399e; ; xn----00g.xn--hnd; [V3, V6] # Ⴏ-.Ⴉ +ⴏ󠅋-.\u200Dⴉ; ⴏ-.\u200Dⴉ; [C2, V3]; xn----3vs.xn--1ug532c; ; xn----3vs.xn--0kj; [V3] # ⴏ-.ⴉ +xn----3vs.xn--0kj; ⴏ-.ⴉ; [V3]; xn----3vs.xn--0kj; ; ; # ⴏ-.ⴉ +xn----3vs.xn--1ug532c; ⴏ-.\u200Dⴉ; [C2, V3]; xn----3vs.xn--1ug532c; ; ; # ⴏ-.ⴉ +xn----00g.xn--hnd; Ⴏ-.Ⴉ; [V3, V6]; xn----00g.xn--hnd; ; ; # Ⴏ-.Ⴉ +xn----00g.xn--hnd399e; Ⴏ-.\u200DႩ; [C2, V3, V6]; xn----00g.xn--hnd399e; ; ; # Ⴏ-.Ⴉ +ⴏ󠅋-.\u200Dⴉ; ⴏ-.\u200Dⴉ; [C2, V3]; xn----3vs.xn--1ug532c; ; xn----3vs.xn--0kj; [V3] # ⴏ-.ⴉ +⇧𐨏。\u0600󠆉; ⇧𐨏.\u0600; [B1, V6]; xn--l8g5552g64t4g46xf.xn--ifb08144p; ; ; # ⇧𐨏. +xn--l8g5552g64t4g46xf.xn--ifb08144p; ⇧𐨏.\u0600; [B1, V6]; xn--l8g5552g64t4g46xf.xn--ifb08144p; ; ; # ⇧𐨏. +≠𐮂.↑🄇⒈; ; [B1, V6]; xn--1chy492g.xn--45gx9iuy44d; ; ; # ≠𐮂.↑🄇⒈ +=\u0338𐮂.↑🄇⒈; ≠𐮂.↑🄇⒈; [B1, V6]; xn--1chy492g.xn--45gx9iuy44d; ; ; # ≠𐮂.↑🄇⒈ +≠𐮂.↑6,1.; ; [B1, V6]; xn--1chy492g.xn--6,1-pw1a.; ; ; # ≠𐮂.↑6,1. +=\u0338𐮂.↑6,1.; ≠𐮂.↑6,1.; [B1, V6]; xn--1chy492g.xn--6,1-pw1a.; ; ; # ≠𐮂.↑6,1. +xn--1chy492g.xn--6,1-pw1a.; ≠𐮂.↑6,1.; [B1, V6]; xn--1chy492g.xn--6,1-pw1a.; ; ; # ≠𐮂.↑6,1. +xn--1chy492g.xn--45gx9iuy44d; ≠𐮂.↑🄇⒈; [B1, V6]; xn--1chy492g.xn--45gx9iuy44d; ; ; # ≠𐮂.↑🄇⒈ +𝩏ß.ᢤ\u200C𐹫; ; [B1, B5, B6, C1, V5, V6]; xn--zca3153vupz3e.xn--ubf609atw1tynn3d; ; xn--ss-zb11ap1427e.xn--ubf2596jbt61c; [B1, B5, B6, V5, V6] # 𝩏ß.ᢤ𐹫 +𝩏SS.ᢤ\u200C𐹫; 𝩏ss.ᢤ\u200C𐹫; [B1, B5, B6, C1, V5, V6]; xn--ss-zb11ap1427e.xn--ubf609atw1tynn3d; ; xn--ss-zb11ap1427e.xn--ubf2596jbt61c; [B1, B5, B6, V5, V6] # 𝩏ss.ᢤ𐹫 +𝩏ss.ᢤ\u200C𐹫; ; [B1, B5, B6, C1, V5, V6]; xn--ss-zb11ap1427e.xn--ubf609atw1tynn3d; ; xn--ss-zb11ap1427e.xn--ubf2596jbt61c; [B1, B5, B6, V5, V6] # 𝩏ss.ᢤ𐹫 +𝩏Ss.ᢤ\u200C𐹫; 𝩏ss.ᢤ\u200C𐹫; [B1, B5, B6, C1, V5, V6]; xn--ss-zb11ap1427e.xn--ubf609atw1tynn3d; ; xn--ss-zb11ap1427e.xn--ubf2596jbt61c; [B1, B5, B6, V5, V6] # 𝩏ss.ᢤ𐹫 +xn--ss-zb11ap1427e.xn--ubf2596jbt61c; 𝩏ss.ᢤ𐹫; [B1, B5, B6, V5, V6]; xn--ss-zb11ap1427e.xn--ubf2596jbt61c; ; ; # 𝩏ss.ᢤ𐹫 +xn--ss-zb11ap1427e.xn--ubf609atw1tynn3d; 𝩏ss.ᢤ\u200C𐹫; [B1, B5, B6, C1, V5, V6]; xn--ss-zb11ap1427e.xn--ubf609atw1tynn3d; ; ; # 𝩏ss.ᢤ𐹫 +xn--zca3153vupz3e.xn--ubf609atw1tynn3d; 𝩏ß.ᢤ\u200C𐹫; [B1, B5, B6, C1, V5, V6]; xn--zca3153vupz3e.xn--ubf609atw1tynn3d; ; ; # 𝩏ß.ᢤ𐹫 +ßႧ。\uA67A; ßႧ.\uA67A; [B1, B5, V5, V6]; xn--zca491fci5qkn79a.xn--9x8a; ; xn--ss-rek7420r4hs7b.xn--9x8a; # ßႧ.ꙺ +ßႧ。\uA67A; ßႧ.\uA67A; [B1, B5, V5, V6]; xn--zca491fci5qkn79a.xn--9x8a; ; xn--ss-rek7420r4hs7b.xn--9x8a; # ßႧ.ꙺ +ßⴇ。\uA67A; ßⴇ.\uA67A; [B1, B5, V5, V6]; xn--zca227tpy4lkns1b.xn--9x8a; ; xn--ss-e61ar955h4hs7b.xn--9x8a; # ßⴇ.ꙺ +SSႧ。\uA67A; ssႧ.\uA67A; [B1, B5, V5, V6]; xn--ss-rek7420r4hs7b.xn--9x8a; ; ; # ssႧ.ꙺ +ssⴇ。\uA67A; ssⴇ.\uA67A; [B1, B5, V5, V6]; xn--ss-e61ar955h4hs7b.xn--9x8a; ; ; # ssⴇ.ꙺ +SsႧ。\uA67A; ssႧ.\uA67A; [B1, B5, V5, V6]; xn--ss-rek7420r4hs7b.xn--9x8a; ; ; # ssႧ.ꙺ +xn--ss-rek7420r4hs7b.xn--9x8a; ssႧ.\uA67A; [B1, B5, V5, V6]; xn--ss-rek7420r4hs7b.xn--9x8a; ; ; # ssႧ.ꙺ +xn--ss-e61ar955h4hs7b.xn--9x8a; ssⴇ.\uA67A; [B1, B5, V5, V6]; xn--ss-e61ar955h4hs7b.xn--9x8a; ; ; # ssⴇ.ꙺ +xn--zca227tpy4lkns1b.xn--9x8a; ßⴇ.\uA67A; [B1, B5, V5, V6]; xn--zca227tpy4lkns1b.xn--9x8a; ; ; # ßⴇ.ꙺ +xn--zca491fci5qkn79a.xn--9x8a; ßႧ.\uA67A; [B1, B5, V5, V6]; xn--zca491fci5qkn79a.xn--9x8a; ; ; # ßႧ.ꙺ +ßⴇ。\uA67A; ßⴇ.\uA67A; [B1, B5, V5, V6]; xn--zca227tpy4lkns1b.xn--9x8a; ; xn--ss-e61ar955h4hs7b.xn--9x8a; # ßⴇ.ꙺ +SSႧ。\uA67A; ssႧ.\uA67A; [B1, B5, V5, V6]; xn--ss-rek7420r4hs7b.xn--9x8a; ; ; # ssႧ.ꙺ +ssⴇ。\uA67A; ssⴇ.\uA67A; [B1, B5, V5, V6]; xn--ss-e61ar955h4hs7b.xn--9x8a; ; ; # ssⴇ.ꙺ +SsႧ。\uA67A; ssႧ.\uA67A; [B1, B5, V5, V6]; xn--ss-rek7420r4hs7b.xn--9x8a; ; ; # ssႧ.ꙺ +\u1714。󠆣-𑋪; \u1714.-𑋪; [V3, V5]; xn--fze.xn----ly8i; ; ; # ᜔.-𑋪 +xn--fze.xn----ly8i; \u1714.-𑋪; [V3, V5]; xn--fze.xn----ly8i; ; ; # ᜔.-𑋪 +\uABE8-.\u05BDß; \uABE8-.\u05BDß; [V3, V5, V6]; xn----pw5e.xn--zca50wfv060a; ; xn----pw5e.xn--ss-7jd10716y; # ꯨ-.ֽß +\uABE8-.\u05BDß; ; [V3, V5, V6]; xn----pw5e.xn--zca50wfv060a; ; xn----pw5e.xn--ss-7jd10716y; # ꯨ-.ֽß +\uABE8-.\u05BDSS; \uABE8-.\u05BDss; [V3, V5, V6]; xn----pw5e.xn--ss-7jd10716y; ; ; # ꯨ-.ֽss +\uABE8-.\u05BDss; ; [V3, V5, V6]; xn----pw5e.xn--ss-7jd10716y; ; ; # ꯨ-.ֽss +\uABE8-.\u05BDSs; \uABE8-.\u05BDss; [V3, V5, V6]; xn----pw5e.xn--ss-7jd10716y; ; ; # ꯨ-.ֽss +xn----pw5e.xn--ss-7jd10716y; \uABE8-.\u05BDss; [V3, V5, V6]; xn----pw5e.xn--ss-7jd10716y; ; ; # ꯨ-.ֽss +xn----pw5e.xn--zca50wfv060a; \uABE8-.\u05BDß; [V3, V5, V6]; xn----pw5e.xn--zca50wfv060a; ; ; # ꯨ-.ֽß +\uABE8-.\u05BDSS; \uABE8-.\u05BDss; [V3, V5, V6]; xn----pw5e.xn--ss-7jd10716y; ; ; # ꯨ-.ֽss +\uABE8-.\u05BDss; \uABE8-.\u05BDss; [V3, V5, V6]; xn----pw5e.xn--ss-7jd10716y; ; ; # ꯨ-.ֽss +\uABE8-.\u05BDSs; \uABE8-.\u05BDss; [V3, V5, V6]; xn----pw5e.xn--ss-7jd10716y; ; ; # ꯨ-.ֽss +ᡓ-≮。\u066B󠅱ᡄ; ᡓ-≮.\u066Bᡄ; [B1, B6]; xn----s7j866c.xn--kib252g; ; ; # ᡓ-≮.٫ᡄ +ᡓ-<\u0338。\u066B󠅱ᡄ; ᡓ-≮.\u066Bᡄ; [B1, B6]; xn----s7j866c.xn--kib252g; ; ; # ᡓ-≮.٫ᡄ +xn----s7j866c.xn--kib252g; ᡓ-≮.\u066Bᡄ; [B1, B6]; xn----s7j866c.xn--kib252g; ; ; # ᡓ-≮.٫ᡄ +𝟥♮𑜫\u08ED.\u17D2𑜫8󠆏; 3♮𑜫\u08ED.\u17D2𑜫8; [V5]; xn--3-ksd277tlo7s.xn--8-f0jx021l; ; ; # 3♮𑜫࣭.្𑜫8 +3♮𑜫\u08ED.\u17D2𑜫8󠆏; 3♮𑜫\u08ED.\u17D2𑜫8; [V5]; xn--3-ksd277tlo7s.xn--8-f0jx021l; ; ; # 3♮𑜫࣭.្𑜫8 +xn--3-ksd277tlo7s.xn--8-f0jx021l; 3♮𑜫\u08ED.\u17D2𑜫8; [V5]; xn--3-ksd277tlo7s.xn--8-f0jx021l; ; ; # 3♮𑜫࣭.្𑜫8 +-。\u200D❡; -.\u200D❡; [C2, V3, V6]; -.xn--1ug800aq795s; ; -.xn--nei54421f; [V3, V6] # -.❡ +-。\u200D❡; -.\u200D❡; [C2, V3, V6]; -.xn--1ug800aq795s; ; -.xn--nei54421f; [V3, V6] # -.❡ +-.xn--nei54421f; -.❡; [V3, V6]; -.xn--nei54421f; ; ; # -.❡ +-.xn--1ug800aq795s; -.\u200D❡; [C2, V3, V6]; -.xn--1ug800aq795s; ; ; # -.❡ +𝟓☱𝟐。𝪮; 5☱2.𝪮; [V5, V6]; xn--52-dwx47758j.xn--kd3hk431k; ; ; # 5☱2.𝪮 +5☱2。𝪮; 5☱2.𝪮; [V5, V6]; xn--52-dwx47758j.xn--kd3hk431k; ; ; # 5☱2.𝪮 +xn--52-dwx47758j.xn--kd3hk431k; 5☱2.𝪮; [V5, V6]; xn--52-dwx47758j.xn--kd3hk431k; ; ; # 5☱2.𝪮 +-.-├; ; [V3, V6]; -.xn----ukp70432h; ; ; # -.-├ +-.xn----ukp70432h; -.-├; [V3, V6]; -.xn----ukp70432h; ; ; # -.-├ +\u05A5\u076D。\u200D; \u05A5\u076D.\u200D; [B1, C2, V5, V6]; xn--wcb62g.xn--1ugy8001l; ; xn--wcb62g.xn--p526e; [B1, V5, V6] # ֥ݭ. +\u05A5\u076D。\u200D; \u05A5\u076D.\u200D; [B1, C2, V5, V6]; xn--wcb62g.xn--1ugy8001l; ; xn--wcb62g.xn--p526e; [B1, V5, V6] # ֥ݭ. +xn--wcb62g.xn--p526e; \u05A5\u076D.; [B1, V5, V6]; xn--wcb62g.xn--p526e; ; ; # ֥ݭ. +xn--wcb62g.xn--1ugy8001l; \u05A5\u076D.\u200D; [B1, C2, V5, V6]; xn--wcb62g.xn--1ugy8001l; ; ; # ֥ݭ. +쥥Ⴎ.\u200C⒈⒈𐫒; 쥥Ⴎ.\u200C⒈⒈𐫒; [B1, C1, V6]; xn--mnd7865gcy28g.xn--0ug88oa0396u; ; xn--mnd7865gcy28g.xn--tsha6797o; [B1, V6] # 쥥Ⴎ.⒈⒈𐫒 +쥥Ⴎ.\u200C⒈⒈𐫒; 쥥Ⴎ.\u200C⒈⒈𐫒; [B1, C1, V6]; xn--mnd7865gcy28g.xn--0ug88oa0396u; ; xn--mnd7865gcy28g.xn--tsha6797o; [B1, V6] # 쥥Ⴎ.⒈⒈𐫒 +쥥Ⴎ.\u200C1.1.𐫒; ; [B1, C1, V6]; xn--mnd7865gcy28g.xn--1-rgn.1.xn--7w9c; ; xn--mnd7865gcy28g.1.1.xn--7w9c; [B1, V6] # 쥥Ⴎ.1.1.𐫒 +쥥Ⴎ.\u200C1.1.𐫒; 쥥Ⴎ.\u200C1.1.𐫒; [B1, C1, V6]; xn--mnd7865gcy28g.xn--1-rgn.1.xn--7w9c; ; xn--mnd7865gcy28g.1.1.xn--7w9c; [B1, V6] # 쥥Ⴎ.1.1.𐫒 +쥥ⴎ.\u200C1.1.𐫒; 쥥ⴎ.\u200C1.1.𐫒; [B1, C1, V6]; xn--5kj3511ccyw3h.xn--1-rgn.1.xn--7w9c; ; xn--5kj3511ccyw3h.1.1.xn--7w9c; [B1, V6] # 쥥ⴎ.1.1.𐫒 +쥥ⴎ.\u200C1.1.𐫒; ; [B1, C1, V6]; xn--5kj3511ccyw3h.xn--1-rgn.1.xn--7w9c; ; xn--5kj3511ccyw3h.1.1.xn--7w9c; [B1, V6] # 쥥ⴎ.1.1.𐫒 +xn--5kj3511ccyw3h.1.1.xn--7w9c; 쥥ⴎ.1.1.𐫒; [B1, V6]; xn--5kj3511ccyw3h.1.1.xn--7w9c; ; ; # 쥥ⴎ.1.1.𐫒 +xn--5kj3511ccyw3h.xn--1-rgn.1.xn--7w9c; 쥥ⴎ.\u200C1.1.𐫒; [B1, C1, V6]; xn--5kj3511ccyw3h.xn--1-rgn.1.xn--7w9c; ; ; # 쥥ⴎ.1.1.𐫒 +xn--mnd7865gcy28g.1.1.xn--7w9c; 쥥Ⴎ.1.1.𐫒; [B1, V6]; xn--mnd7865gcy28g.1.1.xn--7w9c; ; ; # 쥥Ⴎ.1.1.𐫒 +xn--mnd7865gcy28g.xn--1-rgn.1.xn--7w9c; 쥥Ⴎ.\u200C1.1.𐫒; [B1, C1, V6]; xn--mnd7865gcy28g.xn--1-rgn.1.xn--7w9c; ; ; # 쥥Ⴎ.1.1.𐫒 +쥥ⴎ.\u200C⒈⒈𐫒; 쥥ⴎ.\u200C⒈⒈𐫒; [B1, C1, V6]; xn--5kj3511ccyw3h.xn--0ug88oa0396u; ; xn--5kj3511ccyw3h.xn--tsha6797o; [B1, V6] # 쥥ⴎ.⒈⒈𐫒 +쥥ⴎ.\u200C⒈⒈𐫒; 쥥ⴎ.\u200C⒈⒈𐫒; [B1, C1, V6]; xn--5kj3511ccyw3h.xn--0ug88oa0396u; ; xn--5kj3511ccyw3h.xn--tsha6797o; [B1, V6] # 쥥ⴎ.⒈⒈𐫒 +xn--5kj3511ccyw3h.xn--tsha6797o; 쥥ⴎ.⒈⒈𐫒; [B1, V6]; xn--5kj3511ccyw3h.xn--tsha6797o; ; ; # 쥥ⴎ.⒈⒈𐫒 +xn--5kj3511ccyw3h.xn--0ug88oa0396u; 쥥ⴎ.\u200C⒈⒈𐫒; [B1, C1, V6]; xn--5kj3511ccyw3h.xn--0ug88oa0396u; ; ; # 쥥ⴎ.⒈⒈𐫒 +xn--mnd7865gcy28g.xn--tsha6797o; 쥥Ⴎ.⒈⒈𐫒; [B1, V6]; xn--mnd7865gcy28g.xn--tsha6797o; ; ; # 쥥Ⴎ.⒈⒈𐫒 +xn--mnd7865gcy28g.xn--0ug88oa0396u; 쥥Ⴎ.\u200C⒈⒈𐫒; [B1, C1, V6]; xn--mnd7865gcy28g.xn--0ug88oa0396u; ; ; # 쥥Ⴎ.⒈⒈𐫒 +\u0827𝟶\u06A0-。𑄳; \u08270\u06A0-.𑄳; [B1, V3, V5]; xn--0--p3d67m.xn--v80d; ; ; # ࠧ0ڠ-.𑄳 +\u08270\u06A0-。𑄳; \u08270\u06A0-.𑄳; [B1, V3, V5]; xn--0--p3d67m.xn--v80d; ; ; # ࠧ0ڠ-.𑄳 +xn--0--p3d67m.xn--v80d; \u08270\u06A0-.𑄳; [B1, V3, V5]; xn--0--p3d67m.xn--v80d; ; ; # ࠧ0ڠ-.𑄳 +ς.\uFDC1🞛⒈; ς.\u0641\u0645\u064A🞛⒈; [V6]; xn--3xa.xn--dhbip2802atb20c; ; xn--4xa.xn--dhbip2802atb20c; # ς.فمي🞛⒈ +ς.\u0641\u0645\u064A🞛1.; ; ; xn--3xa.xn--1-gocmu97674d.; ; xn--4xa.xn--1-gocmu97674d.; # ς.فمي🞛1. +Σ.\u0641\u0645\u064A🞛1.; σ.\u0641\u0645\u064A🞛1.; ; xn--4xa.xn--1-gocmu97674d.; ; ; # σ.فمي🞛1. +σ.\u0641\u0645\u064A🞛1.; ; ; xn--4xa.xn--1-gocmu97674d.; ; ; # σ.فمي🞛1. +xn--4xa.xn--1-gocmu97674d.; σ.\u0641\u0645\u064A🞛1.; ; xn--4xa.xn--1-gocmu97674d.; ; ; # σ.فمي🞛1. +xn--3xa.xn--1-gocmu97674d.; ς.\u0641\u0645\u064A🞛1.; ; xn--3xa.xn--1-gocmu97674d.; ; ; # ς.فمي🞛1. +Σ.\uFDC1🞛⒈; σ.\u0641\u0645\u064A🞛⒈; [V6]; xn--4xa.xn--dhbip2802atb20c; ; ; # σ.فمي🞛⒈ +σ.\uFDC1🞛⒈; σ.\u0641\u0645\u064A🞛⒈; [V6]; xn--4xa.xn--dhbip2802atb20c; ; ; # σ.فمي🞛⒈ +xn--4xa.xn--dhbip2802atb20c; σ.\u0641\u0645\u064A🞛⒈; [V6]; xn--4xa.xn--dhbip2802atb20c; ; ; # σ.فمي🞛⒈ +xn--3xa.xn--dhbip2802atb20c; ς.\u0641\u0645\u064A🞛⒈; [V6]; xn--3xa.xn--dhbip2802atb20c; ; ; # ς.فمي🞛⒈ +🗩-。𐹻; 🗩-.𐹻; [B1, V3, V6]; xn----6t3s.xn--zo0d4811u6ru6a; ; ; # 🗩-.𐹻 +🗩-。𐹻; 🗩-.𐹻; [B1, V3, V6]; xn----6t3s.xn--zo0d4811u6ru6a; ; ; # 🗩-.𐹻 +xn----6t3s.xn--zo0d4811u6ru6a; 🗩-.𐹻; [B1, V3, V6]; xn----6t3s.xn--zo0d4811u6ru6a; ; ; # 🗩-.𐹻 +𐡜-🔪。𝟻\u200C𐿀; 𐡜-🔪.5\u200C𐿀; [B1, B3, C1]; xn----5j4iv089c.xn--5-sgn7149h; ; xn----5j4iv089c.xn--5-bn7i; [B1, B3] # 𐡜-🔪.5𐿀 +𐡜-🔪。5\u200C𐿀; 𐡜-🔪.5\u200C𐿀; [B1, B3, C1]; xn----5j4iv089c.xn--5-sgn7149h; ; xn----5j4iv089c.xn--5-bn7i; [B1, B3] # 𐡜-🔪.5𐿀 +xn----5j4iv089c.xn--5-bn7i; 𐡜-🔪.5𐿀; [B1, B3]; xn----5j4iv089c.xn--5-bn7i; ; ; # 𐡜-🔪.5𐿀 +xn----5j4iv089c.xn--5-sgn7149h; 𐡜-🔪.5\u200C𐿀; [B1, B3, C1]; xn----5j4iv089c.xn--5-sgn7149h; ; ; # 𐡜-🔪.5𐿀 +𐹣늿\u200Dß.\u07CF0\u05BC; 𐹣늿\u200Dß.\u07CF0\u05BC; [B1, C2]; xn--zca770n5s4hev6c.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # 𐹣늿ß.ߏ0ּ +𐹣늿\u200Dß.\u07CF0\u05BC; 𐹣늿\u200Dß.\u07CF0\u05BC; [B1, C2]; xn--zca770n5s4hev6c.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # 𐹣늿ß.ߏ0ּ +𐹣늿\u200Dß.\u07CF0\u05BC; ; [B1, C2]; xn--zca770n5s4hev6c.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # 𐹣늿ß.ߏ0ּ +𐹣늿\u200Dß.\u07CF0\u05BC; 𐹣늿\u200Dß.\u07CF0\u05BC; [B1, C2]; xn--zca770n5s4hev6c.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # 𐹣늿ß.ߏ0ּ +𐹣늿\u200DSS.\u07CF0\u05BC; 𐹣늿\u200Dss.\u07CF0\u05BC; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # 𐹣늿ss.ߏ0ּ +𐹣늿\u200DSS.\u07CF0\u05BC; 𐹣늿\u200Dss.\u07CF0\u05BC; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # 𐹣늿ss.ߏ0ּ +𐹣늿\u200Dss.\u07CF0\u05BC; ; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # 𐹣늿ss.ߏ0ּ +𐹣늿\u200Dss.\u07CF0\u05BC; 𐹣늿\u200Dss.\u07CF0\u05BC; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # 𐹣늿ss.ߏ0ּ +xn--ss-i05i7041a.xn--0-vgc50n; 𐹣늿ss.\u07CF0\u05BC; [B1]; xn--ss-i05i7041a.xn--0-vgc50n; ; ; # 𐹣늿ss.ߏ0ּ +xn--ss-l1tu910fo0xd.xn--0-vgc50n; 𐹣늿\u200Dss.\u07CF0\u05BC; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; ; # 𐹣늿ss.ߏ0ּ +𐹣늿\u200DSs.\u07CF0\u05BC; 𐹣늿\u200Dss.\u07CF0\u05BC; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # 𐹣늿ss.ߏ0ּ +𐹣늿\u200DSs.\u07CF0\u05BC; 𐹣늿\u200Dss.\u07CF0\u05BC; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # 𐹣늿ss.ߏ0ּ +xn--zca770n5s4hev6c.xn--0-vgc50n; 𐹣늿\u200Dß.\u07CF0\u05BC; [B1, C2]; xn--zca770n5s4hev6c.xn--0-vgc50n; ; ; # 𐹣늿ß.ߏ0ּ +𐹣늿\u200DSS.\u07CF0\u05BC; 𐹣늿\u200Dss.\u07CF0\u05BC; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # 𐹣늿ss.ߏ0ּ +𐹣늿\u200DSS.\u07CF0\u05BC; 𐹣늿\u200Dss.\u07CF0\u05BC; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # 𐹣늿ss.ߏ0ּ +𐹣늿\u200Dss.\u07CF0\u05BC; 𐹣늿\u200Dss.\u07CF0\u05BC; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # 𐹣늿ss.ߏ0ּ +𐹣늿\u200Dss.\u07CF0\u05BC; 𐹣늿\u200Dss.\u07CF0\u05BC; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # 𐹣늿ss.ߏ0ּ +𐹣늿\u200DSs.\u07CF0\u05BC; 𐹣늿\u200Dss.\u07CF0\u05BC; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # 𐹣늿ss.ߏ0ּ +𐹣늿\u200DSs.\u07CF0\u05BC; 𐹣늿\u200Dss.\u07CF0\u05BC; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # 𐹣늿ss.ߏ0ּ +9󠇥.ᢓ; 9.ᢓ; [V6]; 9.xn--dbf91222q; ; ; # 9.ᢓ +9󠇥.ᢓ; 9.ᢓ; [V6]; 9.xn--dbf91222q; ; ; # 9.ᢓ +9.xn--dbf91222q; 9.ᢓ; [V6]; 9.xn--dbf91222q; ; ; # 9.ᢓ +\u200C\uFFA0.𐫭🠗ß⽟; \u200C\uFFA0.𐫭🠗ß玉; [B1, B2, B3, C1, V6]; xn--0ug7719f.xn--zca2289c550e0iwi; ; xn--cl7c.xn--ss-je6eq954cp25j; [B2, B3, V6] # .𐫭🠗ß玉 +\u200C\u1160.𐫭🠗ß玉; ; [B1, B2, B3, C1, V6]; xn--psd526e.xn--zca2289c550e0iwi; ; xn--psd.xn--ss-je6eq954cp25j; [B2, B3, V6] # .𐫭🠗ß玉 +\u200C\u1160.𐫭🠗SS玉; \u200C\u1160.𐫭🠗ss玉; [B1, B2, B3, C1, V6]; xn--psd526e.xn--ss-je6eq954cp25j; ; xn--psd.xn--ss-je6eq954cp25j; [B2, B3, V6] # .𐫭🠗ss玉 +\u200C\u1160.𐫭🠗ss玉; ; [B1, B2, B3, C1, V6]; xn--psd526e.xn--ss-je6eq954cp25j; ; xn--psd.xn--ss-je6eq954cp25j; [B2, B3, V6] # .𐫭🠗ss玉 +\u200C\u1160.𐫭🠗Ss玉; \u200C\u1160.𐫭🠗ss玉; [B1, B2, B3, C1, V6]; xn--psd526e.xn--ss-je6eq954cp25j; ; xn--psd.xn--ss-je6eq954cp25j; [B2, B3, V6] # .𐫭🠗ss玉 +xn--psd.xn--ss-je6eq954cp25j; \u1160.𐫭🠗ss玉; [B2, B3, V6]; xn--psd.xn--ss-je6eq954cp25j; ; ; # .𐫭🠗ss玉 +xn--psd526e.xn--ss-je6eq954cp25j; \u200C\u1160.𐫭🠗ss玉; [B1, B2, B3, C1, V6]; xn--psd526e.xn--ss-je6eq954cp25j; ; ; # .𐫭🠗ss玉 +xn--psd526e.xn--zca2289c550e0iwi; \u200C\u1160.𐫭🠗ß玉; [B1, B2, B3, C1, V6]; xn--psd526e.xn--zca2289c550e0iwi; ; ; # .𐫭🠗ß玉 +\u200C\uFFA0.𐫭🠗SS⽟; \u200C\uFFA0.𐫭🠗ss玉; [B1, B2, B3, C1, V6]; xn--0ug7719f.xn--ss-je6eq954cp25j; ; xn--cl7c.xn--ss-je6eq954cp25j; [B2, B3, V6] # .𐫭🠗ss玉 +\u200C\uFFA0.𐫭🠗ss⽟; \u200C\uFFA0.𐫭🠗ss玉; [B1, B2, B3, C1, V6]; xn--0ug7719f.xn--ss-je6eq954cp25j; ; xn--cl7c.xn--ss-je6eq954cp25j; [B2, B3, V6] # .𐫭🠗ss玉 +\u200C\uFFA0.𐫭🠗Ss⽟; \u200C\uFFA0.𐫭🠗ss玉; [B1, B2, B3, C1, V6]; xn--0ug7719f.xn--ss-je6eq954cp25j; ; xn--cl7c.xn--ss-je6eq954cp25j; [B2, B3, V6] # .𐫭🠗ss玉 +xn--cl7c.xn--ss-je6eq954cp25j; \uFFA0.𐫭🠗ss玉; [B2, B3, V6]; xn--cl7c.xn--ss-je6eq954cp25j; ; ; # .𐫭🠗ss玉 +xn--0ug7719f.xn--ss-je6eq954cp25j; \u200C\uFFA0.𐫭🠗ss玉; [B1, B2, B3, C1, V6]; xn--0ug7719f.xn--ss-je6eq954cp25j; ; ; # .𐫭🠗ss玉 +xn--0ug7719f.xn--zca2289c550e0iwi; \u200C\uFFA0.𐫭🠗ß玉; [B1, B2, B3, C1, V6]; xn--0ug7719f.xn--zca2289c550e0iwi; ; ; # .𐫭🠗ß玉 +︒Ⴖ\u0366.\u200C; ︒Ⴖ\u0366.\u200C; [C1, V6]; xn--hva929dl29p.xn--0ug; ; xn--hva929dl29p.; [V6] # ︒Ⴖͦ. +。Ⴖ\u0366.\u200C; .Ⴖ\u0366.\u200C; [C1, V6, X4_2]; .xn--hva929d.xn--0ug; [C1, V6, A4_2]; .xn--hva929d.; [V6, A4_2] # .Ⴖͦ. +。ⴖ\u0366.\u200C; .ⴖ\u0366.\u200C; [C1, X4_2]; .xn--hva754s.xn--0ug; [C1, A4_2]; .xn--hva754s.; [A4_2] # .ⴖͦ. +.xn--hva754s.; .ⴖ\u0366.; [X4_2]; .xn--hva754s.; [A4_2]; ; # .ⴖͦ. +.xn--hva754s.xn--0ug; .ⴖ\u0366.\u200C; [C1, X4_2]; .xn--hva754s.xn--0ug; [C1, A4_2]; ; # .ⴖͦ. +.xn--hva929d.; .Ⴖ\u0366.; [V6, X4_2]; .xn--hva929d.; [V6, A4_2]; ; # .Ⴖͦ. +.xn--hva929d.xn--0ug; .Ⴖ\u0366.\u200C; [C1, V6, X4_2]; .xn--hva929d.xn--0ug; [C1, V6, A4_2]; ; # .Ⴖͦ. +︒ⴖ\u0366.\u200C; ︒ⴖ\u0366.\u200C; [C1, V6]; xn--hva754sy94k.xn--0ug; ; xn--hva754sy94k.; [V6] # ︒ⴖͦ. +xn--hva754sy94k.; ︒ⴖ\u0366.; [V6]; xn--hva754sy94k.; ; ; # ︒ⴖͦ. +xn--hva754sy94k.xn--0ug; ︒ⴖ\u0366.\u200C; [C1, V6]; xn--hva754sy94k.xn--0ug; ; ; # ︒ⴖͦ. +xn--hva929dl29p.; ︒Ⴖ\u0366.; [V6]; xn--hva929dl29p.; ; ; # ︒Ⴖͦ. +xn--hva929dl29p.xn--0ug; ︒Ⴖ\u0366.\u200C; [C1, V6]; xn--hva929dl29p.xn--0ug; ; ; # ︒Ⴖͦ. +xn--hva754s.; ⴖ\u0366.; ; xn--hva754s.; ; ; # ⴖͦ. +ⴖ\u0366.; ; ; xn--hva754s.; ; ; # ⴖͦ. +Ⴖ\u0366.; ; [V6]; xn--hva929d.; ; ; # Ⴖͦ. +xn--hva929d.; Ⴖ\u0366.; [V6]; xn--hva929d.; ; ; # Ⴖͦ. +\u08BB.\u200CႣ𞀒; \u08BB.\u200CႣ𞀒; [B1, C1, V6]; xn--hzb.xn--bnd300f7225a; ; xn--hzb.xn--bnd2938u; [V6] # ࢻ.Ⴃ𞀒 +\u08BB.\u200CႣ𞀒; ; [B1, C1, V6]; xn--hzb.xn--bnd300f7225a; ; xn--hzb.xn--bnd2938u; [V6] # ࢻ.Ⴃ𞀒 +\u08BB.\u200Cⴃ𞀒; ; [B1, C1]; xn--hzb.xn--0ug822cp045a; ; xn--hzb.xn--ukj4430l; [] # ࢻ.ⴃ𞀒 +xn--hzb.xn--ukj4430l; \u08BB.ⴃ𞀒; ; xn--hzb.xn--ukj4430l; ; ; # ࢻ.ⴃ𞀒 +\u08BB.ⴃ𞀒; ; ; xn--hzb.xn--ukj4430l; ; ; # ࢻ.ⴃ𞀒 +\u08BB.Ⴃ𞀒; ; [V6]; xn--hzb.xn--bnd2938u; ; ; # ࢻ.Ⴃ𞀒 +xn--hzb.xn--bnd2938u; \u08BB.Ⴃ𞀒; [V6]; xn--hzb.xn--bnd2938u; ; ; # ࢻ.Ⴃ𞀒 +xn--hzb.xn--0ug822cp045a; \u08BB.\u200Cⴃ𞀒; [B1, C1]; xn--hzb.xn--0ug822cp045a; ; ; # ࢻ.ⴃ𞀒 +xn--hzb.xn--bnd300f7225a; \u08BB.\u200CႣ𞀒; [B1, C1, V6]; xn--hzb.xn--bnd300f7225a; ; ; # ࢻ.Ⴃ𞀒 +\u08BB.\u200Cⴃ𞀒; \u08BB.\u200Cⴃ𞀒; [B1, C1]; xn--hzb.xn--0ug822cp045a; ; xn--hzb.xn--ukj4430l; [] # ࢻ.ⴃ𞀒 +\u200D\u200C。2䫷; \u200D\u200C.2䫷; [C1, C2, V6]; xn--0ugb.xn--2-me5ay1273i; ; .xn--2-me5ay1273i; [V6, A4_2] # .2䫷 +\u200D\u200C。2䫷; \u200D\u200C.2䫷; [C1, C2, V6]; xn--0ugb.xn--2-me5ay1273i; ; .xn--2-me5ay1273i; [V6, A4_2] # .2䫷 +.xn--2-me5ay1273i; .2䫷; [V6, X4_2]; .xn--2-me5ay1273i; [V6, A4_2]; ; # .2䫷 +xn--0ugb.xn--2-me5ay1273i; \u200D\u200C.2䫷; [C1, C2, V6]; xn--0ugb.xn--2-me5ay1273i; ; ; # .2䫷 +-𞀤。; -𞀤.; [V3, V6]; xn----rq4re4997d.xn--l707b; ; ; # -𞀤. +xn----rq4re4997d.xn--l707b; -𞀤.; [V3, V6]; xn----rq4re4997d.xn--l707b; ; ; # -𞀤. +︒\u200C㟀.\u0624⒈; ︒\u200C㟀.\u0624⒈; [C1, V6]; xn--0ug754gxl4ldlt0k.xn--jgb476m; ; xn--etlt457ccrq7h.xn--jgb476m; [V6] # ︒㟀.ؤ⒈ +︒\u200C㟀.\u0648\u0654⒈; ︒\u200C㟀.\u0624⒈; [C1, V6]; xn--0ug754gxl4ldlt0k.xn--jgb476m; ; xn--etlt457ccrq7h.xn--jgb476m; [V6] # ︒㟀.ؤ⒈ +。\u200C㟀.\u06241.; .\u200C㟀.\u06241.; [B1, C1, V6]; xn--z272f.xn--0ug754g.xn--1-smc.; ; xn--z272f.xn--etl.xn--1-smc.; [V6] # .㟀.ؤ1. +。\u200C㟀.\u0648\u06541.; .\u200C㟀.\u06241.; [B1, C1, V6]; xn--z272f.xn--0ug754g.xn--1-smc.; ; xn--z272f.xn--etl.xn--1-smc.; [V6] # .㟀.ؤ1. +xn--z272f.xn--etl.xn--1-smc.; .㟀.\u06241.; [V6]; xn--z272f.xn--etl.xn--1-smc.; ; ; # .㟀.ؤ1. +xn--z272f.xn--0ug754g.xn--1-smc.; .\u200C㟀.\u06241.; [B1, C1, V6]; xn--z272f.xn--0ug754g.xn--1-smc.; ; ; # .㟀.ؤ1. +xn--etlt457ccrq7h.xn--jgb476m; ︒㟀.\u0624⒈; [V6]; xn--etlt457ccrq7h.xn--jgb476m; ; ; # ︒㟀.ؤ⒈ +xn--0ug754gxl4ldlt0k.xn--jgb476m; ︒\u200C㟀.\u0624⒈; [C1, V6]; xn--0ug754gxl4ldlt0k.xn--jgb476m; ; ; # ︒㟀.ؤ⒈ +𑲜\u07CA𝅼。-\u200D; 𑲜\u07CA𝅼.-\u200D; [B1, C2, V3, V5]; xn--lsb5482l7nre.xn----ugn; ; xn--lsb5482l7nre.-; [B1, V3, V5] # 𑲜ߊ𝅼.- +xn--lsb5482l7nre.-; 𑲜\u07CA𝅼.-; [B1, V3, V5]; xn--lsb5482l7nre.-; ; ; # 𑲜ߊ𝅼.- +xn--lsb5482l7nre.xn----ugn; 𑲜\u07CA𝅼.-\u200D; [B1, C2, V3, V5]; xn--lsb5482l7nre.xn----ugn; ; ; # 𑲜ߊ𝅼.- +\u200C.Ⴉ≠𐫶; \u200C.Ⴉ≠𐫶; [B1, B5, B6, C1, V6]; xn--0ug.xn--hnd481gv73o; ; .xn--hnd481gv73o; [B5, B6, V6, A4_2] # .Ⴉ≠𐫶 +\u200C.Ⴉ=\u0338𐫶; \u200C.Ⴉ≠𐫶; [B1, B5, B6, C1, V6]; xn--0ug.xn--hnd481gv73o; ; .xn--hnd481gv73o; [B5, B6, V6, A4_2] # .Ⴉ≠𐫶 +\u200C.Ⴉ≠𐫶; ; [B1, B5, B6, C1, V6]; xn--0ug.xn--hnd481gv73o; ; .xn--hnd481gv73o; [B5, B6, V6, A4_2] # .Ⴉ≠𐫶 +\u200C.Ⴉ=\u0338𐫶; \u200C.Ⴉ≠𐫶; [B1, B5, B6, C1, V6]; xn--0ug.xn--hnd481gv73o; ; .xn--hnd481gv73o; [B5, B6, V6, A4_2] # .Ⴉ≠𐫶 +\u200C.ⴉ=\u0338𐫶; \u200C.ⴉ≠𐫶; [B1, B5, B6, C1]; xn--0ug.xn--1chx23bzj4p; ; .xn--1chx23bzj4p; [B5, B6, A4_2] # .ⴉ≠𐫶 +\u200C.ⴉ≠𐫶; ; [B1, B5, B6, C1]; xn--0ug.xn--1chx23bzj4p; ; .xn--1chx23bzj4p; [B5, B6, A4_2] # .ⴉ≠𐫶 +.xn--1chx23bzj4p; .ⴉ≠𐫶; [B5, B6, X4_2]; .xn--1chx23bzj4p; [B5, B6, A4_2]; ; # .ⴉ≠𐫶 +xn--0ug.xn--1chx23bzj4p; \u200C.ⴉ≠𐫶; [B1, B5, B6, C1]; xn--0ug.xn--1chx23bzj4p; ; ; # .ⴉ≠𐫶 +.xn--hnd481gv73o; .Ⴉ≠𐫶; [B5, B6, V6, X4_2]; .xn--hnd481gv73o; [B5, B6, V6, A4_2]; ; # .Ⴉ≠𐫶 +xn--0ug.xn--hnd481gv73o; \u200C.Ⴉ≠𐫶; [B1, B5, B6, C1, V6]; xn--0ug.xn--hnd481gv73o; ; ; # .Ⴉ≠𐫶 +\u200C.ⴉ=\u0338𐫶; \u200C.ⴉ≠𐫶; [B1, B5, B6, C1]; xn--0ug.xn--1chx23bzj4p; ; .xn--1chx23bzj4p; [B5, B6, A4_2] # .ⴉ≠𐫶 +\u200C.ⴉ≠𐫶; \u200C.ⴉ≠𐫶; [B1, B5, B6, C1]; xn--0ug.xn--1chx23bzj4p; ; .xn--1chx23bzj4p; [B5, B6, A4_2] # .ⴉ≠𐫶 +\u0750。≯ς; \u0750.≯ς; [B1]; xn--3ob.xn--3xa918m; ; xn--3ob.xn--4xa718m; # ݐ.≯ς +\u0750。>\u0338ς; \u0750.≯ς; [B1]; xn--3ob.xn--3xa918m; ; xn--3ob.xn--4xa718m; # ݐ.≯ς +\u0750。>\u0338Σ; \u0750.≯σ; [B1]; xn--3ob.xn--4xa718m; ; ; # ݐ.≯σ +\u0750。≯Σ; \u0750.≯σ; [B1]; xn--3ob.xn--4xa718m; ; ; # ݐ.≯σ +\u0750。≯σ; \u0750.≯σ; [B1]; xn--3ob.xn--4xa718m; ; ; # ݐ.≯σ +\u0750。>\u0338σ; \u0750.≯σ; [B1]; xn--3ob.xn--4xa718m; ; ; # ݐ.≯σ +xn--3ob.xn--4xa718m; \u0750.≯σ; [B1]; xn--3ob.xn--4xa718m; ; ; # ݐ.≯σ +xn--3ob.xn--3xa918m; \u0750.≯ς; [B1]; xn--3ob.xn--3xa918m; ; ; # ݐ.≯ς +\u07FC.︒Ⴐ; ; [V6]; xn--0tb8725k.xn--ond3562jt18a7py9c; ; ; # .︒Ⴐ +\u07FC.。Ⴐ; \u07FC..Ⴐ; [V6]; xn--0tb8725k.xn--tu8d.xn--ond97931d; ; ; # ..Ⴐ +\u07FC.。ⴐ; \u07FC..ⴐ; [V6]; xn--0tb8725k.xn--tu8d.xn--7kj73887a; ; ; # ..ⴐ +xn--0tb8725k.xn--tu8d.xn--7kj73887a; \u07FC..ⴐ; [V6]; xn--0tb8725k.xn--tu8d.xn--7kj73887a; ; ; # ..ⴐ +xn--0tb8725k.xn--tu8d.xn--ond97931d; \u07FC..Ⴐ; [V6]; xn--0tb8725k.xn--tu8d.xn--ond97931d; ; ; # ..Ⴐ +\u07FC.︒ⴐ; ; [V6]; xn--0tb8725k.xn--7kj9008dt18a7py9c; ; ; # .︒ⴐ +xn--0tb8725k.xn--7kj9008dt18a7py9c; \u07FC.︒ⴐ; [V6]; xn--0tb8725k.xn--7kj9008dt18a7py9c; ; ; # .︒ⴐ +xn--0tb8725k.xn--ond3562jt18a7py9c; \u07FC.︒Ⴐ; [V6]; xn--0tb8725k.xn--ond3562jt18a7py9c; ; ; # .︒Ⴐ +Ⴥ⚭⋃。𑌼; Ⴥ⚭⋃.𑌼; [V5, V6]; xn--9nd623g4zc5z060c.xn--ro1d; ; ; # Ⴥ⚭⋃.𑌼 +Ⴥ⚭⋃。𑌼; Ⴥ⚭⋃.𑌼; [V5, V6]; xn--9nd623g4zc5z060c.xn--ro1d; ; ; # Ⴥ⚭⋃.𑌼 +ⴥ⚭⋃。𑌼; ⴥ⚭⋃.𑌼; [V5, V6]; xn--vfh16m67gx1162b.xn--ro1d; ; ; # ⴥ⚭⋃.𑌼 +xn--vfh16m67gx1162b.xn--ro1d; ⴥ⚭⋃.𑌼; [V5, V6]; xn--vfh16m67gx1162b.xn--ro1d; ; ; # ⴥ⚭⋃.𑌼 +xn--9nd623g4zc5z060c.xn--ro1d; Ⴥ⚭⋃.𑌼; [V5, V6]; xn--9nd623g4zc5z060c.xn--ro1d; ; ; # Ⴥ⚭⋃.𑌼 +ⴥ⚭⋃。𑌼; ⴥ⚭⋃.𑌼; [V5, V6]; xn--vfh16m67gx1162b.xn--ro1d; ; ; # ⴥ⚭⋃.𑌼 +🄈。\u0844; 🄈.\u0844; [B1, V6]; xn--107h.xn--2vb13094p; ; ; # 🄈.ࡄ +7,。\u0844; 7,.\u0844; [B1, V6]; 7,.xn--2vb13094p; ; ; # 7,.ࡄ +7,.xn--2vb13094p; 7,.\u0844; [B1, V6]; 7,.xn--2vb13094p; ; ; # 7,.ࡄ +xn--107h.xn--2vb13094p; 🄈.\u0844; [B1, V6]; xn--107h.xn--2vb13094p; ; ; # 🄈.ࡄ +≮\u0846。섖쮖ß; ≮\u0846.섖쮖ß; [B1]; xn--4vb505k.xn--zca7259goug; ; xn--4vb505k.xn--ss-5z4j006a; # ≮ࡆ.섖쮖ß +<\u0338\u0846。섖쮖ß; ≮\u0846.섖쮖ß; [B1]; xn--4vb505k.xn--zca7259goug; ; xn--4vb505k.xn--ss-5z4j006a; # ≮ࡆ.섖쮖ß +<\u0338\u0846。섖쮖SS; ≮\u0846.섖쮖ss; [B1]; xn--4vb505k.xn--ss-5z4j006a; ; ; # ≮ࡆ.섖쮖ss +≮\u0846。섖쮖SS; ≮\u0846.섖쮖ss; [B1]; xn--4vb505k.xn--ss-5z4j006a; ; ; # ≮ࡆ.섖쮖ss +≮\u0846。섖쮖ss; ≮\u0846.섖쮖ss; [B1]; xn--4vb505k.xn--ss-5z4j006a; ; ; # ≮ࡆ.섖쮖ss +<\u0338\u0846。섖쮖ss; ≮\u0846.섖쮖ss; [B1]; xn--4vb505k.xn--ss-5z4j006a; ; ; # ≮ࡆ.섖쮖ss +xn--4vb505k.xn--ss-5z4j006a; ≮\u0846.섖쮖ss; [B1]; xn--4vb505k.xn--ss-5z4j006a; ; ; # ≮ࡆ.섖쮖ss +≮\u0846。섖쮖Ss; ≮\u0846.섖쮖ss; [B1]; xn--4vb505k.xn--ss-5z4j006a; ; ; # ≮ࡆ.섖쮖ss +<\u0338\u0846。섖쮖Ss; ≮\u0846.섖쮖ss; [B1]; xn--4vb505k.xn--ss-5z4j006a; ; ; # ≮ࡆ.섖쮖ss +xn--4vb505k.xn--zca7259goug; ≮\u0846.섖쮖ß; [B1]; xn--4vb505k.xn--zca7259goug; ; ; # ≮ࡆ.섖쮖ß +󠆓⛏-。ꡒ; ⛏-.ꡒ; [V3]; xn----o9p.xn--rc9a; ; ; # ⛏-.ꡒ +xn----o9p.xn--rc9a; ⛏-.ꡒ; [V3]; xn----o9p.xn--rc9a; ; ; # ⛏-.ꡒ +\u07BB𐹳\u0626𑁆。\u08A7\u06B0\u200Cᢒ; \u07BB𐹳\u0626𑁆.\u08A7\u06B0\u200Cᢒ; [B2, B3, V6]; xn--lgb32f2753cosb.xn--jkb91hlz1azih; ; xn--lgb32f2753cosb.xn--jkb91hlz1a; # 𐹳ئ𑁆.ࢧڰᢒ +\u07BB𐹳\u064A𑁆\u0654。\u08A7\u06B0\u200Cᢒ; \u07BB𐹳\u0626𑁆.\u08A7\u06B0\u200Cᢒ; [B2, B3, V6]; xn--lgb32f2753cosb.xn--jkb91hlz1azih; ; xn--lgb32f2753cosb.xn--jkb91hlz1a; # 𐹳ئ𑁆.ࢧڰᢒ +xn--lgb32f2753cosb.xn--jkb91hlz1a; \u07BB𐹳\u0626𑁆.\u08A7\u06B0ᢒ; [B2, B3, V6]; xn--lgb32f2753cosb.xn--jkb91hlz1a; ; ; # 𐹳ئ𑁆.ࢧڰᢒ +xn--lgb32f2753cosb.xn--jkb91hlz1azih; \u07BB𐹳\u0626𑁆.\u08A7\u06B0\u200Cᢒ; [B2, B3, V6]; xn--lgb32f2753cosb.xn--jkb91hlz1azih; ; ; # 𐹳ئ𑁆.ࢧڰᢒ +\u0816.𐨕; ; [B1, B2, B3, V5, V6]; xn--rub.xn--tr9c248x; ; ; # ࠖ.𐨕 +xn--rub.xn--tr9c248x; \u0816.𐨕; [B1, B2, B3, V5, V6]; xn--rub.xn--tr9c248x; ; ; # ࠖ.𐨕 +--。\u0767𐽋𞠬; --.\u0767𐽋𞠬; [B1, B5, B6, V3, V6]; --.xn--rpb6226k77pfh58p; ; ; # --.ݧ𐽋𞠬 +--.xn--rpb6226k77pfh58p; --.\u0767𐽋𞠬; [B1, B5, B6, V3, V6]; --.xn--rpb6226k77pfh58p; ; ; # --.ݧ𐽋𞠬 +𐋥.≯\u08B0\u08A6; ; [B1, V6]; xn--887c2298i5mv6a.xn--vybt688qm8981a; ; ; # 𐋥.≯ࢰࢦ +𐋥.>\u0338\u08B0\u08A6; 𐋥.≯\u08B0\u08A6; [B1, V6]; xn--887c2298i5mv6a.xn--vybt688qm8981a; ; ; # 𐋥.≯ࢰࢦ +xn--887c2298i5mv6a.xn--vybt688qm8981a; 𐋥.≯\u08B0\u08A6; [B1, V6]; xn--887c2298i5mv6a.xn--vybt688qm8981a; ; ; # 𐋥.≯ࢰࢦ +䔛󠇒𐹧.-䤷; 䔛𐹧.-䤷; [B1, B5, B6, V3, V6]; xn--2loy662coo60e.xn----0n4a; ; ; # 䔛𐹧.-䤷 +䔛󠇒𐹧.-䤷; 䔛𐹧.-䤷; [B1, B5, B6, V3, V6]; xn--2loy662coo60e.xn----0n4a; ; ; # 䔛𐹧.-䤷 +xn--2loy662coo60e.xn----0n4a; 䔛𐹧.-䤷; [B1, B5, B6, V3, V6]; xn--2loy662coo60e.xn----0n4a; ; ; # 䔛𐹧.-䤷 +𐹩.\u200D-; 𐹩.\u200D-; [B1, C2, V3]; xn--ho0d.xn----tgn; ; xn--ho0d.-; [B1, V3] # 𐹩.- +𐹩.\u200D-; ; [B1, C2, V3]; xn--ho0d.xn----tgn; ; xn--ho0d.-; [B1, V3] # 𐹩.- +xn--ho0d.-; 𐹩.-; [B1, V3]; xn--ho0d.-; ; ; # 𐹩.- +xn--ho0d.xn----tgn; 𐹩.\u200D-; [B1, C2, V3]; xn--ho0d.xn----tgn; ; ; # 𐹩.- +帷。≯萺\u1DC8-; 帷.≯萺\u1DC8-; [V3, V6]; xn--qutw175s.xn----mimu6tf67j; ; ; # 帷.≯萺᷈- +帷。>\u0338萺\u1DC8-; 帷.≯萺\u1DC8-; [V3, V6]; xn--qutw175s.xn----mimu6tf67j; ; ; # 帷.≯萺᷈- +帷。≯萺\u1DC8-; 帷.≯萺\u1DC8-; [V3, V6]; xn--qutw175s.xn----mimu6tf67j; ; ; # 帷.≯萺᷈- +帷。>\u0338萺\u1DC8-; 帷.≯萺\u1DC8-; [V3, V6]; xn--qutw175s.xn----mimu6tf67j; ; ; # 帷.≯萺᷈- +xn--qutw175s.xn----mimu6tf67j; 帷.≯萺\u1DC8-; [V3, V6]; xn--qutw175s.xn----mimu6tf67j; ; ; # 帷.≯萺᷈- +\u200D攌\uABED。ᢖ-Ⴘ; \u200D攌\uABED.ᢖ-Ⴘ; [C2, V6]; xn--1ug592ykp6b.xn----k1g451d; ; xn--p9ut19m.xn----k1g451d; [V6] # 攌꯭.ᢖ-Ⴘ +\u200D攌\uABED。ᢖ-ⴘ; \u200D攌\uABED.ᢖ-ⴘ; [C2]; xn--1ug592ykp6b.xn----mck373i; ; xn--p9ut19m.xn----mck373i; [] # 攌꯭.ᢖ-ⴘ +xn--p9ut19m.xn----mck373i; 攌\uABED.ᢖ-ⴘ; ; xn--p9ut19m.xn----mck373i; ; ; # 攌꯭.ᢖ-ⴘ +攌\uABED.ᢖ-ⴘ; ; ; xn--p9ut19m.xn----mck373i; ; ; # 攌꯭.ᢖ-ⴘ +攌\uABED.ᢖ-Ⴘ; ; [V6]; xn--p9ut19m.xn----k1g451d; ; ; # 攌꯭.ᢖ-Ⴘ +xn--p9ut19m.xn----k1g451d; 攌\uABED.ᢖ-Ⴘ; [V6]; xn--p9ut19m.xn----k1g451d; ; ; # 攌꯭.ᢖ-Ⴘ +xn--1ug592ykp6b.xn----mck373i; \u200D攌\uABED.ᢖ-ⴘ; [C2]; xn--1ug592ykp6b.xn----mck373i; ; ; # 攌꯭.ᢖ-ⴘ +xn--1ug592ykp6b.xn----k1g451d; \u200D攌\uABED.ᢖ-Ⴘ; [C2, V6]; xn--1ug592ykp6b.xn----k1g451d; ; ; # 攌꯭.ᢖ-Ⴘ +\u200Cꖨ.⒗3툒۳; \u200Cꖨ.⒗3툒۳; [C1, V6]; xn--0ug2473c.xn--3-nyc678tu07m; ; xn--9r8a.xn--3-nyc678tu07m; [V6] # ꖨ.⒗3툒۳ +\u200Cꖨ.⒗3툒۳; \u200Cꖨ.⒗3툒۳; [C1, V6]; xn--0ug2473c.xn--3-nyc678tu07m; ; xn--9r8a.xn--3-nyc678tu07m; [V6] # ꖨ.⒗3툒۳ +\u200Cꖨ.16.3툒۳; ; [C1]; xn--0ug2473c.16.xn--3-nyc0117m; ; xn--9r8a.16.xn--3-nyc0117m; [] # ꖨ.16.3툒۳ +\u200Cꖨ.16.3툒۳; \u200Cꖨ.16.3툒۳; [C1]; xn--0ug2473c.16.xn--3-nyc0117m; ; xn--9r8a.16.xn--3-nyc0117m; [] # ꖨ.16.3툒۳ +xn--9r8a.16.xn--3-nyc0117m; ꖨ.16.3툒۳; ; xn--9r8a.16.xn--3-nyc0117m; ; ; # ꖨ.16.3툒۳ +ꖨ.16.3툒۳; ; ; xn--9r8a.16.xn--3-nyc0117m; ; ; # ꖨ.16.3툒۳ +ꖨ.16.3툒۳; ꖨ.16.3툒۳; ; xn--9r8a.16.xn--3-nyc0117m; ; ; # ꖨ.16.3툒۳ +xn--0ug2473c.16.xn--3-nyc0117m; \u200Cꖨ.16.3툒۳; [C1]; xn--0ug2473c.16.xn--3-nyc0117m; ; ; # ꖨ.16.3툒۳ +xn--9r8a.xn--3-nyc678tu07m; ꖨ.⒗3툒۳; [V6]; xn--9r8a.xn--3-nyc678tu07m; ; ; # ꖨ.⒗3툒۳ +xn--0ug2473c.xn--3-nyc678tu07m; \u200Cꖨ.⒗3툒۳; [C1, V6]; xn--0ug2473c.xn--3-nyc678tu07m; ; ; # ꖨ.⒗3툒۳ +⒈걾6.𐱁\u06D0; ; [B1, V6]; xn--6-dcps419c.xn--glb1794k; ; ; # ⒈걾6.𐱁ې +⒈걾6.𐱁\u06D0; ⒈걾6.𐱁\u06D0; [B1, V6]; xn--6-dcps419c.xn--glb1794k; ; ; # ⒈걾6.𐱁ې +1.걾6.𐱁\u06D0; ; [B1]; 1.xn--6-945e.xn--glb1794k; ; ; # 1.걾6.𐱁ې +1.걾6.𐱁\u06D0; 1.걾6.𐱁\u06D0; [B1]; 1.xn--6-945e.xn--glb1794k; ; ; # 1.걾6.𐱁ې +1.xn--6-945e.xn--glb1794k; 1.걾6.𐱁\u06D0; [B1]; 1.xn--6-945e.xn--glb1794k; ; ; # 1.걾6.𐱁ې +xn--6-dcps419c.xn--glb1794k; ⒈걾6.𐱁\u06D0; [B1, V6]; xn--6-dcps419c.xn--glb1794k; ; ; # ⒈걾6.𐱁ې +𐲞𝟶≮≮.\u0639; 𐳞0≮≮.\u0639; [B1, B3, V6]; xn--0-ngoa5711v.xn--4gb31034p; ; ; # 𐳞0≮≮.ع +𐲞𝟶<\u0338<\u0338.\u0639; 𐳞0≮≮.\u0639; [B1, B3, V6]; xn--0-ngoa5711v.xn--4gb31034p; ; ; # 𐳞0≮≮.ع +𐲞0≮≮.\u0639; 𐳞0≮≮.\u0639; [B1, B3, V6]; xn--0-ngoa5711v.xn--4gb31034p; ; ; # 𐳞0≮≮.ع +𐲞0<\u0338<\u0338.\u0639; 𐳞0≮≮.\u0639; [B1, B3, V6]; xn--0-ngoa5711v.xn--4gb31034p; ; ; # 𐳞0≮≮.ع +𐳞0<\u0338<\u0338.\u0639; 𐳞0≮≮.\u0639; [B1, B3, V6]; xn--0-ngoa5711v.xn--4gb31034p; ; ; # 𐳞0≮≮.ع +𐳞0≮≮.\u0639; ; [B1, B3, V6]; xn--0-ngoa5711v.xn--4gb31034p; ; ; # 𐳞0≮≮.ع +xn--0-ngoa5711v.xn--4gb31034p; 𐳞0≮≮.\u0639; [B1, B3, V6]; xn--0-ngoa5711v.xn--4gb31034p; ; ; # 𐳞0≮≮.ع +𐳞𝟶<\u0338<\u0338.\u0639; 𐳞0≮≮.\u0639; [B1, B3, V6]; xn--0-ngoa5711v.xn--4gb31034p; ; ; # 𐳞0≮≮.ع +𐳞𝟶≮≮.\u0639; 𐳞0≮≮.\u0639; [B1, B3, V6]; xn--0-ngoa5711v.xn--4gb31034p; ; ; # 𐳞0≮≮.ع +\u0AE3.𐹺\u115F; ; [B1, V5, V6]; xn--8fc.xn--osd3070k; ; ; # ૣ.𐹺 +xn--8fc.xn--osd3070k; \u0AE3.𐹺\u115F; [B1, V5, V6]; xn--8fc.xn--osd3070k; ; ; # ૣ.𐹺 +𝟏𝨙⸖.\u200D; 1𝨙⸖.\u200D; [C2]; xn--1-5bt6845n.xn--1ug; ; xn--1-5bt6845n.; [] # 1𝨙⸖. +1𝨙⸖.\u200D; ; [C2]; xn--1-5bt6845n.xn--1ug; ; xn--1-5bt6845n.; [] # 1𝨙⸖. +xn--1-5bt6845n.; 1𝨙⸖.; ; xn--1-5bt6845n.; ; ; # 1𝨙⸖. +1𝨙⸖.; ; ; xn--1-5bt6845n.; ; ; # 1𝨙⸖. +xn--1-5bt6845n.xn--1ug; 1𝨙⸖.\u200D; [C2]; xn--1-5bt6845n.xn--1ug; ; ; # 1𝨙⸖. +𞤐≠\u0726\u1A60。-\u200C\u07D5; 𞤲≠\u0726\u1A60.-\u200C\u07D5; [B1, C1, V3]; xn--wnb859grzfzw60c.xn----kcd017p; ; xn--wnb859grzfzw60c.xn----kcd; [B1, V3] # 𞤲≠ܦ᩠.-ߕ +𞤐=\u0338\u0726\u1A60。-\u200C\u07D5; 𞤲≠\u0726\u1A60.-\u200C\u07D5; [B1, C1, V3]; xn--wnb859grzfzw60c.xn----kcd017p; ; xn--wnb859grzfzw60c.xn----kcd; [B1, V3] # 𞤲≠ܦ᩠.-ߕ +𞤐≠\u0726\u1A60。-\u200C\u07D5; 𞤲≠\u0726\u1A60.-\u200C\u07D5; [B1, C1, V3]; xn--wnb859grzfzw60c.xn----kcd017p; ; xn--wnb859grzfzw60c.xn----kcd; [B1, V3] # 𞤲≠ܦ᩠.-ߕ +𞤐=\u0338\u0726\u1A60。-\u200C\u07D5; 𞤲≠\u0726\u1A60.-\u200C\u07D5; [B1, C1, V3]; xn--wnb859grzfzw60c.xn----kcd017p; ; xn--wnb859grzfzw60c.xn----kcd; [B1, V3] # 𞤲≠ܦ᩠.-ߕ +𞤲=\u0338\u0726\u1A60。-\u200C\u07D5; 𞤲≠\u0726\u1A60.-\u200C\u07D5; [B1, C1, V3]; xn--wnb859grzfzw60c.xn----kcd017p; ; xn--wnb859grzfzw60c.xn----kcd; [B1, V3] # 𞤲≠ܦ᩠.-ߕ +𞤲≠\u0726\u1A60。-\u200C\u07D5; 𞤲≠\u0726\u1A60.-\u200C\u07D5; [B1, C1, V3]; xn--wnb859grzfzw60c.xn----kcd017p; ; xn--wnb859grzfzw60c.xn----kcd; [B1, V3] # 𞤲≠ܦ᩠.-ߕ +xn--wnb859grzfzw60c.xn----kcd; 𞤲≠\u0726\u1A60.-\u07D5; [B1, V3]; xn--wnb859grzfzw60c.xn----kcd; ; ; # 𞤲≠ܦ᩠.-ߕ +xn--wnb859grzfzw60c.xn----kcd017p; 𞤲≠\u0726\u1A60.-\u200C\u07D5; [B1, C1, V3]; xn--wnb859grzfzw60c.xn----kcd017p; ; ; # 𞤲≠ܦ᩠.-ߕ +𞤲=\u0338\u0726\u1A60。-\u200C\u07D5; 𞤲≠\u0726\u1A60.-\u200C\u07D5; [B1, C1, V3]; xn--wnb859grzfzw60c.xn----kcd017p; ; xn--wnb859grzfzw60c.xn----kcd; [B1, V3] # 𞤲≠ܦ᩠.-ߕ +𞤲≠\u0726\u1A60。-\u200C\u07D5; 𞤲≠\u0726\u1A60.-\u200C\u07D5; [B1, C1, V3]; xn--wnb859grzfzw60c.xn----kcd017p; ; xn--wnb859grzfzw60c.xn----kcd; [B1, V3] # 𞤲≠ܦ᩠.-ߕ +𐹰\u0368-ꡧ。\u0675; 𐹰\u0368-ꡧ.\u0627\u0674; [B1]; xn----shb2387jgkqd.xn--mgb8m; ; ; # 𐹰ͨ-ꡧ.اٴ +𐹰\u0368-ꡧ。\u0627\u0674; 𐹰\u0368-ꡧ.\u0627\u0674; [B1]; xn----shb2387jgkqd.xn--mgb8m; ; ; # 𐹰ͨ-ꡧ.اٴ +xn----shb2387jgkqd.xn--mgb8m; 𐹰\u0368-ꡧ.\u0627\u0674; [B1]; xn----shb2387jgkqd.xn--mgb8m; ; ; # 𐹰ͨ-ꡧ.اٴ +F󠅟。♚; f.♚; [V6]; f.xn--45hz6953f; ; ; # f.♚ +F󠅟。♚; f.♚; [V6]; f.xn--45hz6953f; ; ; # f.♚ +f󠅟。♚; f.♚; [V6]; f.xn--45hz6953f; ; ; # f.♚ +f.xn--45hz6953f; f.♚; [V6]; f.xn--45hz6953f; ; ; # f.♚ +f󠅟。♚; f.♚; [V6]; f.xn--45hz6953f; ; ; # f.♚ +\u0B4D𑄴\u1DE9。𝟮Ⴘ𞀨; \u0B4D𑄴\u1DE9.2Ⴘ𞀨; [V5, V6]; xn--9ic246gs21p.xn--2-k1g43076adrwq; ; ; # ୍𑄴ᷩ.2Ⴘ𞀨 +\u0B4D𑄴\u1DE9。2Ⴘ𞀨; \u0B4D𑄴\u1DE9.2Ⴘ𞀨; [V5, V6]; xn--9ic246gs21p.xn--2-k1g43076adrwq; ; ; # ୍𑄴ᷩ.2Ⴘ𞀨 +\u0B4D𑄴\u1DE9。2ⴘ𞀨; \u0B4D𑄴\u1DE9.2ⴘ𞀨; [V5, V6]; xn--9ic246gs21p.xn--2-nws2918ndrjr; ; ; # ୍𑄴ᷩ.2ⴘ𞀨 +xn--9ic246gs21p.xn--2-nws2918ndrjr; \u0B4D𑄴\u1DE9.2ⴘ𞀨; [V5, V6]; xn--9ic246gs21p.xn--2-nws2918ndrjr; ; ; # ୍𑄴ᷩ.2ⴘ𞀨 +xn--9ic246gs21p.xn--2-k1g43076adrwq; \u0B4D𑄴\u1DE9.2Ⴘ𞀨; [V5, V6]; xn--9ic246gs21p.xn--2-k1g43076adrwq; ; ; # ୍𑄴ᷩ.2Ⴘ𞀨 +\u0B4D𑄴\u1DE9。𝟮ⴘ𞀨; \u0B4D𑄴\u1DE9.2ⴘ𞀨; [V5, V6]; xn--9ic246gs21p.xn--2-nws2918ndrjr; ; ; # ୍𑄴ᷩ.2ⴘ𞀨 +\u200C\u200C⒈。勉𑁅; \u200C\u200C⒈.勉𑁅; [C1, V6]; xn--0uga855aez302a.xn--4grs325b; ; xn--tsh11906f.xn--4grs325b; [V6] # ⒈.勉𑁅 +\u200C\u200C1.。勉𑁅; \u200C\u200C1..勉𑁅; [C1, V6, X4_2]; xn--1-rgna61159u..xn--4grs325b; [C1, V6, A4_2]; xn--1-yi00h..xn--4grs325b; [V6, A4_2] # 1..勉𑁅 +xn--1-yi00h..xn--4grs325b; 1..勉𑁅; [V6, X4_2]; xn--1-yi00h..xn--4grs325b; [V6, A4_2]; ; # 1..勉𑁅 +xn--1-rgna61159u..xn--4grs325b; \u200C\u200C1..勉𑁅; [C1, V6, X4_2]; xn--1-rgna61159u..xn--4grs325b; [C1, V6, A4_2]; ; # 1..勉𑁅 +xn--tsh11906f.xn--4grs325b; ⒈.勉𑁅; [V6]; xn--tsh11906f.xn--4grs325b; ; ; # ⒈.勉𑁅 +xn--0uga855aez302a.xn--4grs325b; \u200C\u200C⒈.勉𑁅; [C1, V6]; xn--0uga855aez302a.xn--4grs325b; ; ; # ⒈.勉𑁅 +ᡃ.玿; ; [V6]; xn--27e.xn--7cy81125a0yq4a; ; ; # ᡃ.玿 +xn--27e.xn--7cy81125a0yq4a; ᡃ.玿; [V6]; xn--27e.xn--7cy81125a0yq4a; ; ; # ᡃ.玿 +\u200C\u200C。⒈≯𝟵; \u200C\u200C.⒈≯9; [C1, V6]; xn--0uga.xn--9-ogo37g; ; .xn--9-ogo37g; [V6, A4_2] # .⒈≯9 +\u200C\u200C。⒈>\u0338𝟵; \u200C\u200C.⒈≯9; [C1, V6]; xn--0uga.xn--9-ogo37g; ; .xn--9-ogo37g; [V6, A4_2] # .⒈≯9 +\u200C\u200C。1.≯9; \u200C\u200C.1.≯9; [C1]; xn--0uga.1.xn--9-ogo; ; .1.xn--9-ogo; [A4_2] # .1.≯9 +\u200C\u200C。1.>\u03389; \u200C\u200C.1.≯9; [C1]; xn--0uga.1.xn--9-ogo; ; .1.xn--9-ogo; [A4_2] # .1.≯9 +.1.xn--9-ogo; .1.≯9; [X4_2]; .1.xn--9-ogo; [A4_2]; ; # .1.≯9 +xn--0uga.1.xn--9-ogo; \u200C\u200C.1.≯9; [C1]; xn--0uga.1.xn--9-ogo; ; ; # .1.≯9 +.xn--9-ogo37g; .⒈≯9; [V6, X4_2]; .xn--9-ogo37g; [V6, A4_2]; ; # .⒈≯9 +xn--0uga.xn--9-ogo37g; \u200C\u200C.⒈≯9; [C1, V6]; xn--0uga.xn--9-ogo37g; ; ; # .⒈≯9 +\u115F\u1DE0.≯𐮁; ; [B5, B6, V6]; xn--osd615d5659o.xn--hdh5192gkm6r; ; ; # ᷠ.≯𐮁 +\u115F\u1DE0.>\u0338𐮁; \u115F\u1DE0.≯𐮁; [B5, B6, V6]; xn--osd615d5659o.xn--hdh5192gkm6r; ; ; # ᷠ.≯𐮁 +xn--osd615d5659o.xn--hdh5192gkm6r; \u115F\u1DE0.≯𐮁; [B5, B6, V6]; xn--osd615d5659o.xn--hdh5192gkm6r; ; ; # ᷠ.≯𐮁 +󠄫𝩤\u200D\u063E.𝩩-\u081E; 𝩤\u200D\u063E.𝩩-\u081E; [B1, C2, V5, V6]; xn--9gb723kg862a.xn----qgd52296avol4f; ; xn--9gb5080v.xn----qgd52296avol4f; [B1, V5, V6] # 𝩤ؾ.𝩩-ࠞ +xn--9gb5080v.xn----qgd52296avol4f; 𝩤\u063E.𝩩-\u081E; [B1, V5, V6]; xn--9gb5080v.xn----qgd52296avol4f; ; ; # 𝩤ؾ.𝩩-ࠞ +xn--9gb723kg862a.xn----qgd52296avol4f; 𝩤\u200D\u063E.𝩩-\u081E; [B1, C2, V5, V6]; xn--9gb723kg862a.xn----qgd52296avol4f; ; ; # 𝩤ؾ.𝩩-ࠞ +\u20DA.𑘿-; \u20DA.𑘿-; [V3, V5]; xn--w0g.xn----bd0j; ; ; # ⃚.𑘿- +\u20DA.𑘿-; ; [V3, V5]; xn--w0g.xn----bd0j; ; ; # ⃚.𑘿- +xn--w0g.xn----bd0j; \u20DA.𑘿-; [V3, V5]; xn--w0g.xn----bd0j; ; ; # ⃚.𑘿- +䮸ß.紙\u08A8; ; [B1, V6]; xn--zca5349a.xn--xyb1370div70kpzba; ; xn--ss-sf1c.xn--xyb1370div70kpzba; # 䮸ß.紙ࢨ +䮸SS.紙\u08A8; 䮸ss.紙\u08A8; [B1, V6]; xn--ss-sf1c.xn--xyb1370div70kpzba; ; ; # 䮸ss.紙ࢨ +䮸ss.紙\u08A8; ; [B1, V6]; xn--ss-sf1c.xn--xyb1370div70kpzba; ; ; # 䮸ss.紙ࢨ +䮸Ss.紙\u08A8; 䮸ss.紙\u08A8; [B1, V6]; xn--ss-sf1c.xn--xyb1370div70kpzba; ; ; # 䮸ss.紙ࢨ +xn--ss-sf1c.xn--xyb1370div70kpzba; 䮸ss.紙\u08A8; [B1, V6]; xn--ss-sf1c.xn--xyb1370div70kpzba; ; ; # 䮸ss.紙ࢨ +xn--zca5349a.xn--xyb1370div70kpzba; 䮸ß.紙\u08A8; [B1, V6]; xn--zca5349a.xn--xyb1370div70kpzba; ; ; # 䮸ß.紙ࢨ +-Ⴞ.-𝩨⅔𐦕; -Ⴞ.-𝩨2⁄3𐦕; [B1, V3, V6]; xn----w1g.xn---23-pt0a0433lk3jj; ; ; # -Ⴞ.-𝩨2⁄3𐦕 +-Ⴞ.-𝩨2⁄3𐦕; ; [B1, V3, V6]; xn----w1g.xn---23-pt0a0433lk3jj; ; ; # -Ⴞ.-𝩨2⁄3𐦕 +-ⴞ.-𝩨2⁄3𐦕; ; [B1, V3]; xn----zws.xn---23-pt0a0433lk3jj; ; ; # -ⴞ.-𝩨2⁄3𐦕 +xn----zws.xn---23-pt0a0433lk3jj; -ⴞ.-𝩨2⁄3𐦕; [B1, V3]; xn----zws.xn---23-pt0a0433lk3jj; ; ; # -ⴞ.-𝩨2⁄3𐦕 +xn----w1g.xn---23-pt0a0433lk3jj; -Ⴞ.-𝩨2⁄3𐦕; [B1, V3, V6]; xn----w1g.xn---23-pt0a0433lk3jj; ; ; # -Ⴞ.-𝩨2⁄3𐦕 +-ⴞ.-𝩨⅔𐦕; -ⴞ.-𝩨2⁄3𐦕; [B1, V3]; xn----zws.xn---23-pt0a0433lk3jj; ; ; # -ⴞ.-𝩨2⁄3𐦕 +𐹯\u0AC2。𐮁ᡂ; 𐹯\u0AC2.𐮁ᡂ; [B5, B6, V6]; xn--bfc7604kv8m3g.xn--17e5565jl7zw4h16a; ; ; # 𐹯ૂ.𐮁ᡂ +𐹯\u0AC2。𐮁ᡂ; 𐹯\u0AC2.𐮁ᡂ; [B5, B6, V6]; xn--bfc7604kv8m3g.xn--17e5565jl7zw4h16a; ; ; # 𐹯ૂ.𐮁ᡂ +xn--bfc7604kv8m3g.xn--17e5565jl7zw4h16a; 𐹯\u0AC2.𐮁ᡂ; [B5, B6, V6]; xn--bfc7604kv8m3g.xn--17e5565jl7zw4h16a; ; ; # 𐹯ૂ.𐮁ᡂ +\u1082-\u200D\uA8EA.ꡊ\u200D; \u1082-\u200D\uA8EA.ꡊ\u200D; [C2, V5, V6]; xn----gyg250jio7k.xn--1ug8774cri56d; ; xn----gyg3618i.xn--jc9ao4185a; [V5, V6] # ႂ-꣪.ꡊ +\u1082-\u200D\uA8EA.ꡊ\u200D; ; [C2, V5, V6]; xn----gyg250jio7k.xn--1ug8774cri56d; ; xn----gyg3618i.xn--jc9ao4185a; [V5, V6] # ႂ-꣪.ꡊ +xn----gyg3618i.xn--jc9ao4185a; \u1082-\uA8EA.ꡊ; [V5, V6]; xn----gyg3618i.xn--jc9ao4185a; ; ; # ႂ-꣪.ꡊ +xn----gyg250jio7k.xn--1ug8774cri56d; \u1082-\u200D\uA8EA.ꡊ\u200D; [C2, V5, V6]; xn----gyg250jio7k.xn--1ug8774cri56d; ; ; # ႂ-꣪.ꡊ +۱。≠\u0668; ۱.≠\u0668; [B1]; xn--emb.xn--hib334l; ; ; # ۱.≠٨ +۱。=\u0338\u0668; ۱.≠\u0668; [B1]; xn--emb.xn--hib334l; ; ; # ۱.≠٨ +xn--emb.xn--hib334l; ۱.≠\u0668; [B1]; xn--emb.xn--hib334l; ; ; # ۱.≠٨ +𑈵廊.𐠍; ; [V5]; xn--xytw701b.xn--yc9c; ; ; # 𑈵廊.𐠍 +xn--xytw701b.xn--yc9c; 𑈵廊.𐠍; [V5]; xn--xytw701b.xn--yc9c; ; ; # 𑈵廊.𐠍 +\u200D\u0356-.-Ⴐ\u0661; \u200D\u0356-.-Ⴐ\u0661; [B1, C2, V3, V6]; xn----rgb661t.xn----bqc030f; ; xn----rgb.xn----bqc030f; [B1, V3, V5, V6] # ͖-.-Ⴐ١ +\u200D\u0356-.-Ⴐ\u0661; ; [B1, C2, V3, V6]; xn----rgb661t.xn----bqc030f; ; xn----rgb.xn----bqc030f; [B1, V3, V5, V6] # ͖-.-Ⴐ١ +\u200D\u0356-.-ⴐ\u0661; ; [B1, C2, V3]; xn----rgb661t.xn----bqc2280a; ; xn----rgb.xn----bqc2280a; [B1, V3, V5] # ͖-.-ⴐ١ +xn----rgb.xn----bqc2280a; \u0356-.-ⴐ\u0661; [B1, V3, V5]; xn----rgb.xn----bqc2280a; ; ; # ͖-.-ⴐ١ +xn----rgb661t.xn----bqc2280a; \u200D\u0356-.-ⴐ\u0661; [B1, C2, V3]; xn----rgb661t.xn----bqc2280a; ; ; # ͖-.-ⴐ١ +xn----rgb.xn----bqc030f; \u0356-.-Ⴐ\u0661; [B1, V3, V5, V6]; xn----rgb.xn----bqc030f; ; ; # ͖-.-Ⴐ١ +xn----rgb661t.xn----bqc030f; \u200D\u0356-.-Ⴐ\u0661; [B1, C2, V3, V6]; xn----rgb661t.xn----bqc030f; ; ; # ͖-.-Ⴐ١ +\u200D\u0356-.-ⴐ\u0661; \u200D\u0356-.-ⴐ\u0661; [B1, C2, V3]; xn----rgb661t.xn----bqc2280a; ; xn----rgb.xn----bqc2280a; [B1, V3, V5] # ͖-.-ⴐ١ +\u063A\u0661挏.-; ; [B1, B2, B3, V3, V6]; xn--5gb2f4205aqi47p.-; ; ; # غ١挏.- +xn--5gb2f4205aqi47p.-; \u063A\u0661挏.-; [B1, B2, B3, V3, V6]; xn--5gb2f4205aqi47p.-; ; ; # غ١挏.- +\u06EF。𐹧𞤽; \u06EF.𐹧𞤽; [B1]; xn--cmb.xn--fo0dy848a; ; ; # ۯ.𐹧𞤽 +\u06EF。𐹧𞤽; \u06EF.𐹧𞤽; [B1]; xn--cmb.xn--fo0dy848a; ; ; # ۯ.𐹧𞤽 +\u06EF。𐹧𞤛; \u06EF.𐹧𞤽; [B1]; xn--cmb.xn--fo0dy848a; ; ; # ۯ.𐹧𞤽 +xn--cmb.xn--fo0dy848a; \u06EF.𐹧𞤽; [B1]; xn--cmb.xn--fo0dy848a; ; ; # ۯ.𐹧𞤽 +\u06EF。𐹧𞤛; \u06EF.𐹧𞤽; [B1]; xn--cmb.xn--fo0dy848a; ; ; # ۯ.𐹧𞤽 +Ⴞ.ᢗ릫; Ⴞ.ᢗ릫; [V6]; xn--2nd8876sgl2j.xn--hbf6853f; ; ; # Ⴞ.ᢗ릫 +Ⴞ.ᢗ릫; Ⴞ.ᢗ릫; [V6]; xn--2nd8876sgl2j.xn--hbf6853f; ; ; # Ⴞ.ᢗ릫 +Ⴞ.ᢗ릫; ; [V6]; xn--2nd8876sgl2j.xn--hbf6853f; ; ; # Ⴞ.ᢗ릫 +Ⴞ.ᢗ릫; Ⴞ.ᢗ릫; [V6]; xn--2nd8876sgl2j.xn--hbf6853f; ; ; # Ⴞ.ᢗ릫 +ⴞ.ᢗ릫; ⴞ.ᢗ릫; [V6]; xn--mlj0486jgl2j.xn--hbf6853f; ; ; # ⴞ.ᢗ릫 +ⴞ.ᢗ릫; ; [V6]; xn--mlj0486jgl2j.xn--hbf6853f; ; ; # ⴞ.ᢗ릫 +xn--mlj0486jgl2j.xn--hbf6853f; ⴞ.ᢗ릫; [V6]; xn--mlj0486jgl2j.xn--hbf6853f; ; ; # ⴞ.ᢗ릫 +xn--2nd8876sgl2j.xn--hbf6853f; Ⴞ.ᢗ릫; [V6]; xn--2nd8876sgl2j.xn--hbf6853f; ; ; # Ⴞ.ᢗ릫 +ⴞ.ᢗ릫; ⴞ.ᢗ릫; [V6]; xn--mlj0486jgl2j.xn--hbf6853f; ; ; # ⴞ.ᢗ릫 +ⴞ.ᢗ릫; ⴞ.ᢗ릫; [V6]; xn--mlj0486jgl2j.xn--hbf6853f; ; ; # ⴞ.ᢗ릫 +\u06B7𐹷。≯\u200C\u1DFE; \u06B7𐹷.≯\u200C\u1DFE; [B1, C1, V6]; xn--qkb4516kbi06fg2id.xn--zfg59fm0c; ; xn--qkb4516kbi06fg2id.xn--zfg31q; [B1, V6] # ڷ𐹷.≯᷾ +\u06B7𐹷。>\u0338\u200C\u1DFE; \u06B7𐹷.≯\u200C\u1DFE; [B1, C1, V6]; xn--qkb4516kbi06fg2id.xn--zfg59fm0c; ; xn--qkb4516kbi06fg2id.xn--zfg31q; [B1, V6] # ڷ𐹷.≯᷾ +\u06B7𐹷。≯\u200C\u1DFE; \u06B7𐹷.≯\u200C\u1DFE; [B1, C1, V6]; xn--qkb4516kbi06fg2id.xn--zfg59fm0c; ; xn--qkb4516kbi06fg2id.xn--zfg31q; [B1, V6] # ڷ𐹷.≯᷾ +\u06B7𐹷。>\u0338\u200C\u1DFE; \u06B7𐹷.≯\u200C\u1DFE; [B1, C1, V6]; xn--qkb4516kbi06fg2id.xn--zfg59fm0c; ; xn--qkb4516kbi06fg2id.xn--zfg31q; [B1, V6] # ڷ𐹷.≯᷾ +xn--qkb4516kbi06fg2id.xn--zfg31q; \u06B7𐹷.≯\u1DFE; [B1, V6]; xn--qkb4516kbi06fg2id.xn--zfg31q; ; ; # ڷ𐹷.≯᷾ +xn--qkb4516kbi06fg2id.xn--zfg59fm0c; \u06B7𐹷.≯\u200C\u1DFE; [B1, C1, V6]; xn--qkb4516kbi06fg2id.xn--zfg59fm0c; ; ; # ڷ𐹷.≯᷾ +ᛎ󠅍\u200D。𐹾𐹪-; ᛎ\u200D.𐹾𐹪-; [B1, B6, C2, V3, V6]; xn--fxe848bq3411a.xn----q26i2bvu; ; xn--fxe63563p.xn----q26i2bvu; [B1, B6, V3, V6] # ᛎ.𐹾𐹪- +ᛎ󠅍\u200D。𐹾𐹪-; ᛎ\u200D.𐹾𐹪-; [B1, B6, C2, V3, V6]; xn--fxe848bq3411a.xn----q26i2bvu; ; xn--fxe63563p.xn----q26i2bvu; [B1, B6, V3, V6] # ᛎ.𐹾𐹪- +xn--fxe63563p.xn----q26i2bvu; ᛎ.𐹾𐹪-; [B1, B6, V3, V6]; xn--fxe63563p.xn----q26i2bvu; ; ; # ᛎ.𐹾𐹪- +xn--fxe848bq3411a.xn----q26i2bvu; ᛎ\u200D.𐹾𐹪-; [B1, B6, C2, V3, V6]; xn--fxe848bq3411a.xn----q26i2bvu; ; ; # ᛎ.𐹾𐹪- +𐹶.𐫂; ; [B1]; xn--uo0d.xn--rw9c; ; ; # 𐹶.𐫂 +xn--uo0d.xn--rw9c; 𐹶.𐫂; [B1]; xn--uo0d.xn--rw9c; ; ; # 𐹶.𐫂 +ß\u200D\u103A。⒈; ß\u200D\u103A.⒈; [C2, V6]; xn--zca679eh2l.xn--tsh; ; xn--ss-f4j.xn--tsh; [V6] # ß်.⒈ +ß\u200D\u103A。1.; ß\u200D\u103A.1.; [C2]; xn--zca679eh2l.1.; ; xn--ss-f4j.1.; [] # ß်.1. +SS\u200D\u103A。1.; ss\u200D\u103A.1.; [C2]; xn--ss-f4j585j.1.; ; xn--ss-f4j.1.; [] # ss်.1. +ss\u200D\u103A。1.; ss\u200D\u103A.1.; [C2]; xn--ss-f4j585j.1.; ; xn--ss-f4j.1.; [] # ss်.1. +Ss\u200D\u103A。1.; ss\u200D\u103A.1.; [C2]; xn--ss-f4j585j.1.; ; xn--ss-f4j.1.; [] # ss်.1. +xn--ss-f4j.1.; ss\u103A.1.; ; xn--ss-f4j.1.; ; ; # ss်.1. +ss\u103A.1.; ; ; xn--ss-f4j.1.; ; ; # ss်.1. +SS\u103A.1.; ss\u103A.1.; ; xn--ss-f4j.1.; ; ; # ss်.1. +Ss\u103A.1.; ss\u103A.1.; ; xn--ss-f4j.1.; ; ; # ss်.1. +xn--ss-f4j585j.1.; ss\u200D\u103A.1.; [C2]; xn--ss-f4j585j.1.; ; ; # ss်.1. +xn--zca679eh2l.1.; ß\u200D\u103A.1.; [C2]; xn--zca679eh2l.1.; ; ; # ß်.1. +SS\u200D\u103A。⒈; ss\u200D\u103A.⒈; [C2, V6]; xn--ss-f4j585j.xn--tsh; ; xn--ss-f4j.xn--tsh; [V6] # ss်.⒈ +ss\u200D\u103A。⒈; ss\u200D\u103A.⒈; [C2, V6]; xn--ss-f4j585j.xn--tsh; ; xn--ss-f4j.xn--tsh; [V6] # ss်.⒈ +Ss\u200D\u103A。⒈; ss\u200D\u103A.⒈; [C2, V6]; xn--ss-f4j585j.xn--tsh; ; xn--ss-f4j.xn--tsh; [V6] # ss်.⒈ +xn--ss-f4j.xn--tsh; ss\u103A.⒈; [V6]; xn--ss-f4j.xn--tsh; ; ; # ss်.⒈ +xn--ss-f4j585j.xn--tsh; ss\u200D\u103A.⒈; [C2, V6]; xn--ss-f4j585j.xn--tsh; ; ; # ss်.⒈ +xn--zca679eh2l.xn--tsh; ß\u200D\u103A.⒈; [C2, V6]; xn--zca679eh2l.xn--tsh; ; ; # ß်.⒈ +\u0B4D\u200C。\u200D; \u0B4D\u200C.\u200D; [B1, C2, V5, V6]; xn--9ic637hz82z32jc.xn--1ug; ; xn--9ic6417rn4xb.; [B1, V5, V6] # ୍. +xn--9ic6417rn4xb.; \u0B4D.; [B1, V5, V6]; xn--9ic6417rn4xb.; ; ; # ୍. +xn--9ic637hz82z32jc.xn--1ug; \u0B4D\u200C.\u200D; [B1, C2, V5, V6]; xn--9ic637hz82z32jc.xn--1ug; ; ; # ୍. +𐮅。\u06BC🁕; 𐮅.\u06BC🁕; [B3]; xn--c29c.xn--vkb8871w; ; ; # 𐮅.ڼ🁕 +𐮅。\u06BC🁕; 𐮅.\u06BC🁕; [B3]; xn--c29c.xn--vkb8871w; ; ; # 𐮅.ڼ🁕 +xn--c29c.xn--vkb8871w; 𐮅.\u06BC🁕; [B3]; xn--c29c.xn--vkb8871w; ; ; # 𐮅.ڼ🁕 +\u0620\u17D2。𐫔\u200C𑈵; \u0620\u17D2.𐫔\u200C𑈵; [B2, B3, C1, V6]; xn--fgb471g.xn--0ug9853g7verp838a; ; xn--fgb471g.xn--9w9c29jw3931a; [B2, B3, V6] # ؠ្.𐫔𑈵 +xn--fgb471g.xn--9w9c29jw3931a; \u0620\u17D2.𐫔𑈵; [B2, B3, V6]; xn--fgb471g.xn--9w9c29jw3931a; ; ; # ؠ្.𐫔𑈵 +xn--fgb471g.xn--0ug9853g7verp838a; \u0620\u17D2.𐫔\u200C𑈵; [B2, B3, C1, V6]; xn--fgb471g.xn--0ug9853g7verp838a; ; ; # ؠ្.𐫔𑈵 +.𞣕𞤊; .𞣕𞤬; [B1, V5, V6]; xn--tf5w.xn--2b6hof; ; ; # .𞣕𞤬 +.𞣕𞤬; ; [B1, V5, V6]; xn--tf5w.xn--2b6hof; ; ; # .𞣕𞤬 +xn--tf5w.xn--2b6hof; .𞣕𞤬; [B1, V5, V6]; xn--tf5w.xn--2b6hof; ; ; # .𞣕𞤬 +\u06CC𐨿.ß\u0F84𑍬; \u06CC𐨿.ß\u0F84𑍬; ; xn--clb2593k.xn--zca216edt0r; ; xn--clb2593k.xn--ss-toj6092t; # ی𐨿.ß྄𑍬 +\u06CC𐨿.ß\u0F84𑍬; ; ; xn--clb2593k.xn--zca216edt0r; ; xn--clb2593k.xn--ss-toj6092t; # ی𐨿.ß྄𑍬 +\u06CC𐨿.SS\u0F84𑍬; \u06CC𐨿.ss\u0F84𑍬; ; xn--clb2593k.xn--ss-toj6092t; ; ; # ی𐨿.ss྄𑍬 +\u06CC𐨿.ss\u0F84𑍬; ; ; xn--clb2593k.xn--ss-toj6092t; ; ; # ی𐨿.ss྄𑍬 +xn--clb2593k.xn--ss-toj6092t; \u06CC𐨿.ss\u0F84𑍬; ; xn--clb2593k.xn--ss-toj6092t; ; ; # ی𐨿.ss྄𑍬 +xn--clb2593k.xn--zca216edt0r; \u06CC𐨿.ß\u0F84𑍬; ; xn--clb2593k.xn--zca216edt0r; ; ; # ی𐨿.ß྄𑍬 +\u06CC𐨿.SS\u0F84𑍬; \u06CC𐨿.ss\u0F84𑍬; ; xn--clb2593k.xn--ss-toj6092t; ; ; # ی𐨿.ss྄𑍬 +\u06CC𐨿.ss\u0F84𑍬; \u06CC𐨿.ss\u0F84𑍬; ; xn--clb2593k.xn--ss-toj6092t; ; ; # ی𐨿.ss྄𑍬 +\u06CC𐨿.Ss\u0F84𑍬; \u06CC𐨿.ss\u0F84𑍬; ; xn--clb2593k.xn--ss-toj6092t; ; ; # ی𐨿.ss྄𑍬 +\u06CC𐨿.Ss\u0F84𑍬; \u06CC𐨿.ss\u0F84𑍬; ; xn--clb2593k.xn--ss-toj6092t; ; ; # ی𐨿.ss྄𑍬 +𝟠≮\u200C。󠅱\u17B4; 8≮\u200C.\u17B4; [C1, V5, V6]; xn--8-sgn10i.xn--z3e; ; xn--8-ngo.xn--z3e; [V5, V6] # 8≮. +𝟠<\u0338\u200C。󠅱\u17B4; 8≮\u200C.\u17B4; [C1, V5, V6]; xn--8-sgn10i.xn--z3e; ; xn--8-ngo.xn--z3e; [V5, V6] # 8≮. +8≮\u200C。󠅱\u17B4; 8≮\u200C.\u17B4; [C1, V5, V6]; xn--8-sgn10i.xn--z3e; ; xn--8-ngo.xn--z3e; [V5, V6] # 8≮. +8<\u0338\u200C。󠅱\u17B4; 8≮\u200C.\u17B4; [C1, V5, V6]; xn--8-sgn10i.xn--z3e; ; xn--8-ngo.xn--z3e; [V5, V6] # 8≮. +xn--8-ngo.xn--z3e; 8≮.\u17B4; [V5, V6]; xn--8-ngo.xn--z3e; ; ; # 8≮. +xn--8-sgn10i.xn--z3e; 8≮\u200C.\u17B4; [C1, V5, V6]; xn--8-sgn10i.xn--z3e; ; ; # 8≮. +ᢕ≯︒.Ⴀ; ᢕ≯︒.Ⴀ; [V6]; xn--fbf851cq98poxw1a.xn--7md; ; ; # ᢕ≯︒.Ⴀ +ᢕ>\u0338︒.Ⴀ; ᢕ≯︒.Ⴀ; [V6]; xn--fbf851cq98poxw1a.xn--7md; ; ; # ᢕ≯︒.Ⴀ +ᢕ≯。.Ⴀ; ᢕ≯..Ⴀ; [V6]; xn--fbf851c.xn--ko1u.xn--7md; ; ; # ᢕ≯..Ⴀ +ᢕ>\u0338。.Ⴀ; ᢕ≯..Ⴀ; [V6]; xn--fbf851c.xn--ko1u.xn--7md; ; ; # ᢕ≯..Ⴀ +ᢕ>\u0338。.ⴀ; ᢕ≯..ⴀ; [V6]; xn--fbf851c.xn--ko1u.xn--rkj; ; ; # ᢕ≯..ⴀ +ᢕ≯。.ⴀ; ᢕ≯..ⴀ; [V6]; xn--fbf851c.xn--ko1u.xn--rkj; ; ; # ᢕ≯..ⴀ +xn--fbf851c.xn--ko1u.xn--rkj; ᢕ≯..ⴀ; [V6]; xn--fbf851c.xn--ko1u.xn--rkj; ; ; # ᢕ≯..ⴀ +xn--fbf851c.xn--ko1u.xn--7md; ᢕ≯..Ⴀ; [V6]; xn--fbf851c.xn--ko1u.xn--7md; ; ; # ᢕ≯..Ⴀ +ᢕ>\u0338︒.ⴀ; ᢕ≯︒.ⴀ; [V6]; xn--fbf851cq98poxw1a.xn--rkj; ; ; # ᢕ≯︒.ⴀ +ᢕ≯︒.ⴀ; ᢕ≯︒.ⴀ; [V6]; xn--fbf851cq98poxw1a.xn--rkj; ; ; # ᢕ≯︒.ⴀ +xn--fbf851cq98poxw1a.xn--rkj; ᢕ≯︒.ⴀ; [V6]; xn--fbf851cq98poxw1a.xn--rkj; ; ; # ᢕ≯︒.ⴀ +xn--fbf851cq98poxw1a.xn--7md; ᢕ≯︒.Ⴀ; [V6]; xn--fbf851cq98poxw1a.xn--7md; ; ; # ᢕ≯︒.Ⴀ +\u0F9F.-\u082A; \u0F9F.-\u082A; [V3, V5]; xn--vfd.xn----fhd; ; ; # ྟ.-ࠪ +\u0F9F.-\u082A; ; [V3, V5]; xn--vfd.xn----fhd; ; ; # ྟ.-ࠪ +xn--vfd.xn----fhd; \u0F9F.-\u082A; [V3, V5]; xn--vfd.xn----fhd; ; ; # ྟ.-ࠪ +ᵬ󠆠.핒⒒⒈; ᵬ.핒⒒⒈; [V6]; xn--tbg.xn--tsht7586kyts9l; ; ; # ᵬ.핒⒒⒈ +ᵬ󠆠.핒⒒⒈; ᵬ.핒⒒⒈; [V6]; xn--tbg.xn--tsht7586kyts9l; ; ; # ᵬ.핒⒒⒈ +ᵬ󠆠.핒11.1.; ᵬ.핒11.1.; [V6]; xn--tbg.xn--11-5o7k.1.xn--k469f; ; ; # ᵬ.핒11.1. +ᵬ󠆠.핒11.1.; ᵬ.핒11.1.; [V6]; xn--tbg.xn--11-5o7k.1.xn--k469f; ; ; # ᵬ.핒11.1. +xn--tbg.xn--11-5o7k.1.xn--k469f; ᵬ.핒11.1.; [V6]; xn--tbg.xn--11-5o7k.1.xn--k469f; ; ; # ᵬ.핒11.1. +xn--tbg.xn--tsht7586kyts9l; ᵬ.핒⒒⒈; [V6]; xn--tbg.xn--tsht7586kyts9l; ; ; # ᵬ.핒⒒⒈ +ς𑓂𐋢.\u0668; ς𑓂𐋢.\u0668; [B1]; xn--3xa8371khhl.xn--hib; ; xn--4xa6371khhl.xn--hib; # ς𑓂𐋢.٨ +ς𑓂𐋢.\u0668; ; [B1]; xn--3xa8371khhl.xn--hib; ; xn--4xa6371khhl.xn--hib; # ς𑓂𐋢.٨ +Σ𑓂𐋢.\u0668; σ𑓂𐋢.\u0668; [B1]; xn--4xa6371khhl.xn--hib; ; ; # σ𑓂𐋢.٨ +σ𑓂𐋢.\u0668; ; [B1]; xn--4xa6371khhl.xn--hib; ; ; # σ𑓂𐋢.٨ +xn--4xa6371khhl.xn--hib; σ𑓂𐋢.\u0668; [B1]; xn--4xa6371khhl.xn--hib; ; ; # σ𑓂𐋢.٨ +xn--3xa8371khhl.xn--hib; ς𑓂𐋢.\u0668; [B1]; xn--3xa8371khhl.xn--hib; ; ; # ς𑓂𐋢.٨ +Σ𑓂𐋢.\u0668; σ𑓂𐋢.\u0668; [B1]; xn--4xa6371khhl.xn--hib; ; ; # σ𑓂𐋢.٨ +σ𑓂𐋢.\u0668; σ𑓂𐋢.\u0668; [B1]; xn--4xa6371khhl.xn--hib; ; ; # σ𑓂𐋢.٨ +\uA953\u200C𐋻\u200D.\u2DF8𐹲; ; [B1, B6, C2, V5, V6]; xn--0ugc8356he76c.xn--urju692efj0f; ; xn--3j9a531o.xn--urju692efj0f; [B1, V5, V6] # ꥓𐋻.ⷸ𐹲 +xn--3j9a531o.xn--urju692efj0f; \uA953𐋻.\u2DF8𐹲; [B1, V5, V6]; xn--3j9a531o.xn--urju692efj0f; ; ; # ꥓𐋻.ⷸ𐹲 +xn--0ugc8356he76c.xn--urju692efj0f; \uA953\u200C𐋻\u200D.\u2DF8𐹲; [B1, B6, C2, V5, V6]; xn--0ugc8356he76c.xn--urju692efj0f; ; ; # ꥓𐋻.ⷸ𐹲 +⊼。\u0695; ⊼.\u0695; [B1, B5, B6, V6]; xn--ofh.xn--rjb13118f; ; ; # ⊼.ڕ +xn--ofh.xn--rjb13118f; ⊼.\u0695; [B1, B5, B6, V6]; xn--ofh.xn--rjb13118f; ; ; # ⊼.ڕ +。; .; [B2, B3, V6]; xn--949co370q.xn--7g25e; ; ; # . +xn--949co370q.xn--7g25e; .; [B2, B3, V6]; xn--949co370q.xn--7g25e; ; ; # . +\u0601𑍧\u07DD。ς🀞\u17B5; \u0601𑍧\u07DD.ς🀞\u17B5; [B1, B6, V6]; xn--jfb66gt010c.xn--3xa823h9p95ars26d; ; xn--jfb66gt010c.xn--4xa623h9p95ars26d; # 𑍧ߝ.ς🀞 +\u0601𑍧\u07DD。Σ🀞\u17B5; \u0601𑍧\u07DD.σ🀞\u17B5; [B1, B6, V6]; xn--jfb66gt010c.xn--4xa623h9p95ars26d; ; ; # 𑍧ߝ.σ🀞 +\u0601𑍧\u07DD。σ🀞\u17B5; \u0601𑍧\u07DD.σ🀞\u17B5; [B1, B6, V6]; xn--jfb66gt010c.xn--4xa623h9p95ars26d; ; ; # 𑍧ߝ.σ🀞 +xn--jfb66gt010c.xn--4xa623h9p95ars26d; \u0601𑍧\u07DD.σ🀞\u17B5; [B1, B6, V6]; xn--jfb66gt010c.xn--4xa623h9p95ars26d; ; ; # 𑍧ߝ.σ🀞 +xn--jfb66gt010c.xn--3xa823h9p95ars26d; \u0601𑍧\u07DD.ς🀞\u17B5; [B1, B6, V6]; xn--jfb66gt010c.xn--3xa823h9p95ars26d; ; ; # 𑍧ߝ.ς🀞 +-𐳲\u0646。\uABED𝟥; -𐳲\u0646.\uABED3; [B1, V3, V5, V6]; xn----roc5482rek10i.xn--3-zw5e; ; ; # -𐳲ن.꯭3 +-𐳲\u0646。\uABED3; -𐳲\u0646.\uABED3; [B1, V3, V5, V6]; xn----roc5482rek10i.xn--3-zw5e; ; ; # -𐳲ن.꯭3 +-𐲲\u0646。\uABED3; -𐳲\u0646.\uABED3; [B1, V3, V5, V6]; xn----roc5482rek10i.xn--3-zw5e; ; ; # -𐳲ن.꯭3 +xn----roc5482rek10i.xn--3-zw5e; -𐳲\u0646.\uABED3; [B1, V3, V5, V6]; xn----roc5482rek10i.xn--3-zw5e; ; ; # -𐳲ن.꯭3 +-𐲲\u0646。\uABED𝟥; -𐳲\u0646.\uABED3; [B1, V3, V5, V6]; xn----roc5482rek10i.xn--3-zw5e; ; ; # -𐳲ن.꯭3 +\u200C。≮𐦜; \u200C.≮𐦜; [B1, B5, B6, C1, V6]; xn--0ug22251l.xn--gdhz712gzlr6b; ; xn--6v56e.xn--gdhz712gzlr6b; [B1, B5, B6, V6] # .≮𐦜 +\u200C。<\u0338𐦜; \u200C.≮𐦜; [B1, B5, B6, C1, V6]; xn--0ug22251l.xn--gdhz712gzlr6b; ; xn--6v56e.xn--gdhz712gzlr6b; [B1, B5, B6, V6] # .≮𐦜 +\u200C。≮𐦜; \u200C.≮𐦜; [B1, B5, B6, C1, V6]; xn--0ug22251l.xn--gdhz712gzlr6b; ; xn--6v56e.xn--gdhz712gzlr6b; [B1, B5, B6, V6] # .≮𐦜 +\u200C。<\u0338𐦜; \u200C.≮𐦜; [B1, B5, B6, C1, V6]; xn--0ug22251l.xn--gdhz712gzlr6b; ; xn--6v56e.xn--gdhz712gzlr6b; [B1, B5, B6, V6] # .≮𐦜 +xn--6v56e.xn--gdhz712gzlr6b; .≮𐦜; [B1, B5, B6, V6]; xn--6v56e.xn--gdhz712gzlr6b; ; ; # .≮𐦜 +xn--0ug22251l.xn--gdhz712gzlr6b; \u200C.≮𐦜; [B1, B5, B6, C1, V6]; xn--0ug22251l.xn--gdhz712gzlr6b; ; ; # .≮𐦜 +⒈✌.𝟡; ⒈✌.9; [V6]; xn--tsh24g49550b.xn--9-o706d; ; ; # ⒈✌.9 +1.✌.9; ; [V6]; 1.xn--7bi44996f.xn--9-o706d; ; ; # 1.✌.9 +1.xn--7bi44996f.xn--9-o706d; 1.✌.9; [V6]; 1.xn--7bi44996f.xn--9-o706d; ; ; # 1.✌.9 +xn--tsh24g49550b.xn--9-o706d; ⒈✌.9; [V6]; xn--tsh24g49550b.xn--9-o706d; ; ; # ⒈✌.9 +𑆾𞤬𐮆.\u0666\u1DD4; ; [B1, V5]; xn--d29c79hf98r.xn--fib011j; ; ; # 𑆾𞤬𐮆.٦ᷔ +𑆾𞤊𐮆.\u0666\u1DD4; 𑆾𞤬𐮆.\u0666\u1DD4; [B1, V5]; xn--d29c79hf98r.xn--fib011j; ; ; # 𑆾𞤬𐮆.٦ᷔ +xn--d29c79hf98r.xn--fib011j; 𑆾𞤬𐮆.\u0666\u1DD4; [B1, V5]; xn--d29c79hf98r.xn--fib011j; ; ; # 𑆾𞤬𐮆.٦ᷔ +ς.\uA9C0\uA8C4; ς.\uA9C0\uA8C4; [V5]; xn--3xa.xn--0f9ars; ; xn--4xa.xn--0f9ars; # ς.꧀꣄ +ς.\uA9C0\uA8C4; ; [V5]; xn--3xa.xn--0f9ars; ; xn--4xa.xn--0f9ars; # ς.꧀꣄ +Σ.\uA9C0\uA8C4; σ.\uA9C0\uA8C4; [V5]; xn--4xa.xn--0f9ars; ; ; # σ.꧀꣄ +σ.\uA9C0\uA8C4; ; [V5]; xn--4xa.xn--0f9ars; ; ; # σ.꧀꣄ +xn--4xa.xn--0f9ars; σ.\uA9C0\uA8C4; [V5]; xn--4xa.xn--0f9ars; ; ; # σ.꧀꣄ +xn--3xa.xn--0f9ars; ς.\uA9C0\uA8C4; [V5]; xn--3xa.xn--0f9ars; ; ; # ς.꧀꣄ +Σ.\uA9C0\uA8C4; σ.\uA9C0\uA8C4; [V5]; xn--4xa.xn--0f9ars; ; ; # σ.꧀꣄ +σ.\uA9C0\uA8C4; σ.\uA9C0\uA8C4; [V5]; xn--4xa.xn--0f9ars; ; ; # σ.꧀꣄ +𑰶\u200C≯𐳐.\u085B; 𑰶\u200C≯𐳐.\u085B; [B1, C1, V5]; xn--0ug06g7697ap4ma.xn--qwb; ; xn--hdhz343g3wj.xn--qwb; [B1, V5] # 𑰶≯𐳐.࡛ +𑰶\u200C>\u0338𐳐.\u085B; 𑰶\u200C≯𐳐.\u085B; [B1, C1, V5]; xn--0ug06g7697ap4ma.xn--qwb; ; xn--hdhz343g3wj.xn--qwb; [B1, V5] # 𑰶≯𐳐.࡛ +𑰶\u200C≯𐳐.\u085B; ; [B1, C1, V5]; xn--0ug06g7697ap4ma.xn--qwb; ; xn--hdhz343g3wj.xn--qwb; [B1, V5] # 𑰶≯𐳐.࡛ +𑰶\u200C>\u0338𐳐.\u085B; 𑰶\u200C≯𐳐.\u085B; [B1, C1, V5]; xn--0ug06g7697ap4ma.xn--qwb; ; xn--hdhz343g3wj.xn--qwb; [B1, V5] # 𑰶≯𐳐.࡛ +𑰶\u200C>\u0338𐲐.\u085B; 𑰶\u200C≯𐳐.\u085B; [B1, C1, V5]; xn--0ug06g7697ap4ma.xn--qwb; ; xn--hdhz343g3wj.xn--qwb; [B1, V5] # 𑰶≯𐳐.࡛ +𑰶\u200C≯𐲐.\u085B; 𑰶\u200C≯𐳐.\u085B; [B1, C1, V5]; xn--0ug06g7697ap4ma.xn--qwb; ; xn--hdhz343g3wj.xn--qwb; [B1, V5] # 𑰶≯𐳐.࡛ +xn--hdhz343g3wj.xn--qwb; 𑰶≯𐳐.\u085B; [B1, V5]; xn--hdhz343g3wj.xn--qwb; ; ; # 𑰶≯𐳐.࡛ +xn--0ug06g7697ap4ma.xn--qwb; 𑰶\u200C≯𐳐.\u085B; [B1, C1, V5]; xn--0ug06g7697ap4ma.xn--qwb; ; ; # 𑰶≯𐳐.࡛ +𑰶\u200C>\u0338𐲐.\u085B; 𑰶\u200C≯𐳐.\u085B; [B1, C1, V5]; xn--0ug06g7697ap4ma.xn--qwb; ; xn--hdhz343g3wj.xn--qwb; [B1, V5] # 𑰶≯𐳐.࡛ +𑰶\u200C≯𐲐.\u085B; 𑰶\u200C≯𐳐.\u085B; [B1, C1, V5]; xn--0ug06g7697ap4ma.xn--qwb; ; xn--hdhz343g3wj.xn--qwb; [B1, V5] # 𑰶≯𐳐.࡛ +羚。≯; 羚.≯; ; xn--xt0a.xn--hdh; ; ; # 羚.≯ +羚。>\u0338; 羚.≯; ; xn--xt0a.xn--hdh; ; ; # 羚.≯ +羚。≯; 羚.≯; ; xn--xt0a.xn--hdh; ; ; # 羚.≯ +羚。>\u0338; 羚.≯; ; xn--xt0a.xn--hdh; ; ; # 羚.≯ +xn--xt0a.xn--hdh; 羚.≯; ; xn--xt0a.xn--hdh; ; ; # 羚.≯ +羚.≯; ; ; xn--xt0a.xn--hdh; ; ; # 羚.≯ +羚.>\u0338; 羚.≯; ; xn--xt0a.xn--hdh; ; ; # 羚.≯ +𑓂\u1759.\u08A8; 𑓂\u1759.\u08A8; [B1, V5, V6]; xn--e1e9580k.xn--xyb; ; ; # 𑓂.ࢨ +𑓂\u1759.\u08A8; ; [B1, V5, V6]; xn--e1e9580k.xn--xyb; ; ; # 𑓂.ࢨ +xn--e1e9580k.xn--xyb; 𑓂\u1759.\u08A8; [B1, V5, V6]; xn--e1e9580k.xn--xyb; ; ; # 𑓂.ࢨ +󠇀\u200D。\u0663ҠჀ𝟑; \u200D.\u0663ҡჀ3; [B1, B6, C2, V6]; xn--1ug89936l.xn--3-ozb36kixu; ; xn--1r19e.xn--3-ozb36kixu; [B1, V6] # .٣ҡჀ3 +󠇀\u200D。\u0663ҠჀ3; \u200D.\u0663ҡჀ3; [B1, B6, C2, V6]; xn--1ug89936l.xn--3-ozb36kixu; ; xn--1r19e.xn--3-ozb36kixu; [B1, V6] # .٣ҡჀ3 +󠇀\u200D。\u0663ҡⴠ3; \u200D.\u0663ҡⴠ3; [B1, B6, C2, V6]; xn--1ug89936l.xn--3-ozb36ko13f; ; xn--1r19e.xn--3-ozb36ko13f; [B1, V6] # .٣ҡⴠ3 +xn--1r19e.xn--3-ozb36ko13f; .\u0663ҡⴠ3; [B1, V6]; xn--1r19e.xn--3-ozb36ko13f; ; ; # .٣ҡⴠ3 +xn--1ug89936l.xn--3-ozb36ko13f; \u200D.\u0663ҡⴠ3; [B1, B6, C2, V6]; xn--1ug89936l.xn--3-ozb36ko13f; ; ; # .٣ҡⴠ3 +xn--1r19e.xn--3-ozb36kixu; .\u0663ҡჀ3; [B1, V6]; xn--1r19e.xn--3-ozb36kixu; ; ; # .٣ҡჀ3 +xn--1ug89936l.xn--3-ozb36kixu; \u200D.\u0663ҡჀ3; [B1, B6, C2, V6]; xn--1ug89936l.xn--3-ozb36kixu; ; ; # .٣ҡჀ3 +󠇀\u200D。\u0663ҡⴠ𝟑; \u200D.\u0663ҡⴠ3; [B1, B6, C2, V6]; xn--1ug89936l.xn--3-ozb36ko13f; ; xn--1r19e.xn--3-ozb36ko13f; [B1, V6] # .٣ҡⴠ3 +󠇀\u200D。\u0663Ҡⴠ3; \u200D.\u0663ҡⴠ3; [B1, B6, C2, V6]; xn--1ug89936l.xn--3-ozb36ko13f; ; xn--1r19e.xn--3-ozb36ko13f; [B1, V6] # .٣ҡⴠ3 +󠇀\u200D。\u0663Ҡⴠ𝟑; \u200D.\u0663ҡⴠ3; [B1, B6, C2, V6]; xn--1ug89936l.xn--3-ozb36ko13f; ; xn--1r19e.xn--3-ozb36ko13f; [B1, V6] # .٣ҡⴠ3 +ᡷ。𐹢\u08E0; ᡷ.𐹢\u08E0; [B1]; xn--k9e.xn--j0b5005k; ; ; # ᡷ.𐹢࣠ +xn--k9e.xn--j0b5005k; ᡷ.𐹢\u08E0; [B1]; xn--k9e.xn--j0b5005k; ; ; # ᡷ.𐹢࣠ +\u1BF3。\u0666\u17D2ß; \u1BF3.\u0666\u17D2ß; [B1, V6]; xn--1zf58212h.xn--zca34zk4qx711k; ; xn--1zf58212h.xn--ss-pyd459o3258m; # ᯳.٦្ß +\u1BF3。\u0666\u17D2ß; \u1BF3.\u0666\u17D2ß; [B1, V6]; xn--1zf58212h.xn--zca34zk4qx711k; ; xn--1zf58212h.xn--ss-pyd459o3258m; # ᯳.٦្ß +\u1BF3。\u0666\u17D2SS; \u1BF3.\u0666\u17D2ss; [B1, V6]; xn--1zf58212h.xn--ss-pyd459o3258m; ; ; # ᯳.٦្ss +\u1BF3。\u0666\u17D2ss; \u1BF3.\u0666\u17D2ss; [B1, V6]; xn--1zf58212h.xn--ss-pyd459o3258m; ; ; # ᯳.٦្ss +\u1BF3。\u0666\u17D2Ss; \u1BF3.\u0666\u17D2ss; [B1, V6]; xn--1zf58212h.xn--ss-pyd459o3258m; ; ; # ᯳.٦្ss +xn--1zf58212h.xn--ss-pyd459o3258m; \u1BF3.\u0666\u17D2ss; [B1, V6]; xn--1zf58212h.xn--ss-pyd459o3258m; ; ; # ᯳.٦្ss +xn--1zf58212h.xn--zca34zk4qx711k; \u1BF3.\u0666\u17D2ß; [B1, V6]; xn--1zf58212h.xn--zca34zk4qx711k; ; ; # ᯳.٦្ß +\u1BF3。\u0666\u17D2SS; \u1BF3.\u0666\u17D2ss; [B1, V6]; xn--1zf58212h.xn--ss-pyd459o3258m; ; ; # ᯳.٦្ss +\u1BF3。\u0666\u17D2ss; \u1BF3.\u0666\u17D2ss; [B1, V6]; xn--1zf58212h.xn--ss-pyd459o3258m; ; ; # ᯳.٦្ss +\u1BF3。\u0666\u17D2Ss; \u1BF3.\u0666\u17D2ss; [B1, V6]; xn--1zf58212h.xn--ss-pyd459o3258m; ; ; # ᯳.٦្ss +\u0664𑲛.︒≠; ; [B1, V6]; xn--dib0653l2i02d.xn--1ch7467f14u4g; ; ; # ٤𑲛.︒≠ +\u0664𑲛.︒=\u0338; \u0664𑲛.︒≠; [B1, V6]; xn--dib0653l2i02d.xn--1ch7467f14u4g; ; ; # ٤𑲛.︒≠ +\u0664𑲛.。≠; \u0664𑲛..≠; [B1, V6]; xn--dib0653l2i02d.xn--k736e.xn--1ch; ; ; # ٤𑲛..≠ +\u0664𑲛.。=\u0338; \u0664𑲛..≠; [B1, V6]; xn--dib0653l2i02d.xn--k736e.xn--1ch; ; ; # ٤𑲛..≠ +xn--dib0653l2i02d.xn--k736e.xn--1ch; \u0664𑲛..≠; [B1, V6]; xn--dib0653l2i02d.xn--k736e.xn--1ch; ; ; # ٤𑲛..≠ +xn--dib0653l2i02d.xn--1ch7467f14u4g; \u0664𑲛.︒≠; [B1, V6]; xn--dib0653l2i02d.xn--1ch7467f14u4g; ; ; # ٤𑲛.︒≠ +➆ỗ⒈.\u085B𝟫; ➆ỗ⒈.\u085B9; [V6]; xn--6lg26tvvc6v99z.xn--9-6jd87310jtcqs; ; ; # ➆ỗ⒈.࡛9 +➆o\u0302\u0303⒈.\u085B𝟫; ➆ỗ⒈.\u085B9; [V6]; xn--6lg26tvvc6v99z.xn--9-6jd87310jtcqs; ; ; # ➆ỗ⒈.࡛9 +➆ỗ1..\u085B9; ; [V6, X4_2]; xn--1-3xm292b6044r..xn--9-6jd87310jtcqs; [V6, A4_2]; ; # ➆ỗ1..࡛9 +➆o\u0302\u03031..\u085B9; ➆ỗ1..\u085B9; [V6, X4_2]; xn--1-3xm292b6044r..xn--9-6jd87310jtcqs; [V6, A4_2]; ; # ➆ỗ1..࡛9 +➆O\u0302\u03031..\u085B9; ➆ỗ1..\u085B9; [V6, X4_2]; xn--1-3xm292b6044r..xn--9-6jd87310jtcqs; [V6, A4_2]; ; # ➆ỗ1..࡛9 +➆Ỗ1..\u085B9; ➆ỗ1..\u085B9; [V6, X4_2]; xn--1-3xm292b6044r..xn--9-6jd87310jtcqs; [V6, A4_2]; ; # ➆ỗ1..࡛9 +xn--1-3xm292b6044r..xn--9-6jd87310jtcqs; ➆ỗ1..\u085B9; [V6, X4_2]; xn--1-3xm292b6044r..xn--9-6jd87310jtcqs; [V6, A4_2]; ; # ➆ỗ1..࡛9 +➆O\u0302\u0303⒈.\u085B𝟫; ➆ỗ⒈.\u085B9; [V6]; xn--6lg26tvvc6v99z.xn--9-6jd87310jtcqs; ; ; # ➆ỗ⒈.࡛9 +➆Ỗ⒈.\u085B𝟫; ➆ỗ⒈.\u085B9; [V6]; xn--6lg26tvvc6v99z.xn--9-6jd87310jtcqs; ; ; # ➆ỗ⒈.࡛9 +xn--6lg26tvvc6v99z.xn--9-6jd87310jtcqs; ➆ỗ⒈.\u085B9; [V6]; xn--6lg26tvvc6v99z.xn--9-6jd87310jtcqs; ; ; # ➆ỗ⒈.࡛9 +\u200D。𞤘; \u200D.𞤺; [B1, C2]; xn--1ug.xn--ye6h; ; .xn--ye6h; [A4_2] # .𞤺 +\u200D。𞤘; \u200D.𞤺; [B1, C2]; xn--1ug.xn--ye6h; ; .xn--ye6h; [A4_2] # .𞤺 +\u200D。𞤺; \u200D.𞤺; [B1, C2]; xn--1ug.xn--ye6h; ; .xn--ye6h; [A4_2] # .𞤺 +.xn--ye6h; .𞤺; [X4_2]; .xn--ye6h; [A4_2]; ; # .𞤺 +xn--1ug.xn--ye6h; \u200D.𞤺; [B1, C2]; xn--1ug.xn--ye6h; ; ; # .𞤺 +\u200D。𞤺; \u200D.𞤺; [B1, C2]; xn--1ug.xn--ye6h; ; .xn--ye6h; [A4_2] # .𞤺 +xn--ye6h; 𞤺; ; xn--ye6h; ; ; # 𞤺 +𞤺; ; ; xn--ye6h; ; ; # 𞤺 +𞤘; 𞤺; ; xn--ye6h; ; ; # 𞤺 +\u0829\u0724.ᢣ; ; [B1, V5]; xn--unb53c.xn--tbf; ; ; # ࠩܤ.ᢣ +xn--unb53c.xn--tbf; \u0829\u0724.ᢣ; [B1, V5]; xn--unb53c.xn--tbf; ; ; # ࠩܤ.ᢣ +\u073C\u200C-。ß; \u073C\u200C-.ß; [C1, V3, V5, V6]; xn----s2c071q.xn--zca7848m; ; xn----s2c.xn--ss-066q; [V3, V5, V6] # ܼ-.ß +\u073C\u200C-。SS; \u073C\u200C-.ss; [C1, V3, V5, V6]; xn----s2c071q.xn--ss-066q; ; xn----s2c.xn--ss-066q; [V3, V5, V6] # ܼ-.ss +\u073C\u200C-。ss; \u073C\u200C-.ss; [C1, V3, V5, V6]; xn----s2c071q.xn--ss-066q; ; xn----s2c.xn--ss-066q; [V3, V5, V6] # ܼ-.ss +\u073C\u200C-。Ss; \u073C\u200C-.ss; [C1, V3, V5, V6]; xn----s2c071q.xn--ss-066q; ; xn----s2c.xn--ss-066q; [V3, V5, V6] # ܼ-.ss +xn----s2c.xn--ss-066q; \u073C-.ss; [V3, V5, V6]; xn----s2c.xn--ss-066q; ; ; # ܼ-.ss +xn----s2c071q.xn--ss-066q; \u073C\u200C-.ss; [C1, V3, V5, V6]; xn----s2c071q.xn--ss-066q; ; ; # ܼ-.ss +xn----s2c071q.xn--zca7848m; \u073C\u200C-.ß; [C1, V3, V5, V6]; xn----s2c071q.xn--zca7848m; ; ; # ܼ-.ß +\u200Cς🃡⒗.\u0CC6仧\u0756; ; [B1, B5, B6, C1, V5, V6]; xn--3xa795lz9czy52d.xn--9ob79ycx2e; ; xn--4xa229nbu92a.xn--9ob79ycx2e; [B5, B6, V5, V6] # ς🃡⒗.ೆ仧ݖ +\u200Cς🃡16..\u0CC6仧\u0756; ; [B1, B5, B6, C1, V5, X4_2]; xn--16-rbc1800avy99b..xn--9ob79ycx2e; [B1, B5, B6, C1, V5, A4_2]; xn--16-ubc66061c..xn--9ob79ycx2e; [B5, B6, V5, A4_2] # ς🃡16..ೆ仧ݖ +\u200CΣ🃡16..\u0CC6仧\u0756; \u200Cσ🃡16..\u0CC6仧\u0756; [B1, B5, B6, C1, V5, X4_2]; xn--16-ubc7700avy99b..xn--9ob79ycx2e; [B1, B5, B6, C1, V5, A4_2]; xn--16-ubc66061c..xn--9ob79ycx2e; [B5, B6, V5, A4_2] # σ🃡16..ೆ仧ݖ +\u200Cσ🃡16..\u0CC6仧\u0756; ; [B1, B5, B6, C1, V5, X4_2]; xn--16-ubc7700avy99b..xn--9ob79ycx2e; [B1, B5, B6, C1, V5, A4_2]; xn--16-ubc66061c..xn--9ob79ycx2e; [B5, B6, V5, A4_2] # σ🃡16..ೆ仧ݖ +xn--16-ubc66061c..xn--9ob79ycx2e; σ🃡16..\u0CC6仧\u0756; [B5, B6, V5, X4_2]; xn--16-ubc66061c..xn--9ob79ycx2e; [B5, B6, V5, A4_2]; ; # σ🃡16..ೆ仧ݖ +xn--16-ubc7700avy99b..xn--9ob79ycx2e; \u200Cσ🃡16..\u0CC6仧\u0756; [B1, B5, B6, C1, V5, X4_2]; xn--16-ubc7700avy99b..xn--9ob79ycx2e; [B1, B5, B6, C1, V5, A4_2]; ; # σ🃡16..ೆ仧ݖ +xn--16-rbc1800avy99b..xn--9ob79ycx2e; \u200Cς🃡16..\u0CC6仧\u0756; [B1, B5, B6, C1, V5, X4_2]; xn--16-rbc1800avy99b..xn--9ob79ycx2e; [B1, B5, B6, C1, V5, A4_2]; ; # ς🃡16..ೆ仧ݖ +\u200CΣ🃡⒗.\u0CC6仧\u0756; \u200Cσ🃡⒗.\u0CC6仧\u0756; [B1, B5, B6, C1, V5, V6]; xn--4xa595lz9czy52d.xn--9ob79ycx2e; ; xn--4xa229nbu92a.xn--9ob79ycx2e; [B5, B6, V5, V6] # σ🃡⒗.ೆ仧ݖ +\u200Cσ🃡⒗.\u0CC6仧\u0756; ; [B1, B5, B6, C1, V5, V6]; xn--4xa595lz9czy52d.xn--9ob79ycx2e; ; xn--4xa229nbu92a.xn--9ob79ycx2e; [B5, B6, V5, V6] # σ🃡⒗.ೆ仧ݖ +xn--4xa229nbu92a.xn--9ob79ycx2e; σ🃡⒗.\u0CC6仧\u0756; [B5, B6, V5, V6]; xn--4xa229nbu92a.xn--9ob79ycx2e; ; ; # σ🃡⒗.ೆ仧ݖ +xn--4xa595lz9czy52d.xn--9ob79ycx2e; \u200Cσ🃡⒗.\u0CC6仧\u0756; [B1, B5, B6, C1, V5, V6]; xn--4xa595lz9czy52d.xn--9ob79ycx2e; ; ; # σ🃡⒗.ೆ仧ݖ +xn--3xa795lz9czy52d.xn--9ob79ycx2e; \u200Cς🃡⒗.\u0CC6仧\u0756; [B1, B5, B6, C1, V5, V6]; xn--3xa795lz9czy52d.xn--9ob79ycx2e; ; ; # ς🃡⒗.ೆ仧ݖ +-.𞸚; -.\u0638; [B1, V3]; -.xn--3gb; ; ; # -.ظ +-.\u0638; ; [B1, V3]; -.xn--3gb; ; ; # -.ظ +-.xn--3gb; -.\u0638; [B1, V3]; -.xn--3gb; ; ; # -.ظ +\u0683.\u0F7E\u0634; ; [B1, B5, B6, V5, V6]; xn--8ib92728i.xn--zgb968b; ; ; # ڃ.ཾش +xn--8ib92728i.xn--zgb968b; \u0683.\u0F7E\u0634; [B1, B5, B6, V5, V6]; xn--8ib92728i.xn--zgb968b; ; ; # ڃ.ཾش +\u0FE6\u0843.𐮏; ; [B5, V6]; xn--1vb320b5m04p.xn--m29c; ; ; # ࡃ.𐮏 +xn--1vb320b5m04p.xn--m29c; \u0FE6\u0843.𐮏; [B5, V6]; xn--1vb320b5m04p.xn--m29c; ; ; # ࡃ.𐮏 +2\u07CBß。ᠽ; 2\u07CBß.ᠽ; [B1, V6]; xn--2-qfa924cez02l.xn--w7e; ; xn--2ss-odg83511n.xn--w7e; # 2ߋß.ᠽ +2\u07CBSS。ᠽ; 2\u07CBss.ᠽ; [B1, V6]; xn--2ss-odg83511n.xn--w7e; ; ; # 2ߋss.ᠽ +2\u07CBss。ᠽ; 2\u07CBss.ᠽ; [B1, V6]; xn--2ss-odg83511n.xn--w7e; ; ; # 2ߋss.ᠽ +xn--2ss-odg83511n.xn--w7e; 2\u07CBss.ᠽ; [B1, V6]; xn--2ss-odg83511n.xn--w7e; ; ; # 2ߋss.ᠽ +xn--2-qfa924cez02l.xn--w7e; 2\u07CBß.ᠽ; [B1, V6]; xn--2-qfa924cez02l.xn--w7e; ; ; # 2ߋß.ᠽ +2\u07CBSs。ᠽ; 2\u07CBss.ᠽ; [B1, V6]; xn--2ss-odg83511n.xn--w7e; ; ; # 2ߋss.ᠽ +㸳\u07CA≮.\u06CEß-\u200D; 㸳\u07CA≮.\u06CEß-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn----pfa076bys4a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێß- +㸳\u07CA<\u0338.\u06CEß-\u200D; 㸳\u07CA≮.\u06CEß-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn----pfa076bys4a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێß- +㸳\u07CA≮.\u06CEß-\u200D; ; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn----pfa076bys4a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێß- +㸳\u07CA<\u0338.\u06CEß-\u200D; 㸳\u07CA≮.\u06CEß-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn----pfa076bys4a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێß- +㸳\u07CA<\u0338.\u06CESS-\u200D; 㸳\u07CA≮.\u06CEss-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێss- +㸳\u07CA≮.\u06CESS-\u200D; 㸳\u07CA≮.\u06CEss-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێss- +㸳\u07CA≮.\u06CEss-\u200D; ; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێss- +㸳\u07CA<\u0338.\u06CEss-\u200D; 㸳\u07CA≮.\u06CEss-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێss- +xn--lsb457kkut.xn--ss--qjf; 㸳\u07CA≮.\u06CEss-; [B2, B3, B5, B6, V3]; xn--lsb457kkut.xn--ss--qjf; ; ; # 㸳ߊ≮.ێss- +xn--lsb457kkut.xn--ss--qjf2343a; 㸳\u07CA≮.\u06CEss-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn--ss--qjf2343a; ; ; # 㸳ߊ≮.ێss- +xn--lsb457kkut.xn----pfa076bys4a; 㸳\u07CA≮.\u06CEß-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn----pfa076bys4a; ; ; # 㸳ߊ≮.ێß- +㸳\u07CA<\u0338.\u06CESS-\u200D; 㸳\u07CA≮.\u06CEss-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێss- +㸳\u07CA≮.\u06CESS-\u200D; 㸳\u07CA≮.\u06CEss-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێss- +㸳\u07CA≮.\u06CEss-\u200D; 㸳\u07CA≮.\u06CEss-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێss- +㸳\u07CA<\u0338.\u06CEss-\u200D; 㸳\u07CA≮.\u06CEss-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێss- +㸳\u07CA<\u0338.\u06CESs-\u200D; 㸳\u07CA≮.\u06CEss-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێss- +㸳\u07CA≮.\u06CESs-\u200D; 㸳\u07CA≮.\u06CEss-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێss- +㸳\u07CA<\u0338.\u06CESs-\u200D; 㸳\u07CA≮.\u06CEss-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێss- +㸳\u07CA≮.\u06CESs-\u200D; 㸳\u07CA≮.\u06CEss-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێss- +-\u135E𑜧.\u1DEB-︒; ; [V3, V5, V6]; xn----b5h1837n2ok9f.xn----mkmw278h; ; ; # -፞𑜧.ᷫ-︒ +-\u135E𑜧.\u1DEB-。; -\u135E𑜧.\u1DEB-.; [V3, V5, V6]; xn----b5h1837n2ok9f.xn----mkm.; ; ; # -፞𑜧.ᷫ-. +xn----b5h1837n2ok9f.xn----mkm.; -\u135E𑜧.\u1DEB-.; [V3, V5, V6]; xn----b5h1837n2ok9f.xn----mkm.; ; ; # -፞𑜧.ᷫ-. +xn----b5h1837n2ok9f.xn----mkmw278h; -\u135E𑜧.\u1DEB-︒; [V3, V5, V6]; xn----b5h1837n2ok9f.xn----mkmw278h; ; ; # -፞𑜧.ᷫ-︒ +︒.\u1A59; ; [V6]; xn--y86c.xn--cof61594i; ; ; # ︒.ᩙ +。.\u1A59; ..\u1A59; [V6, X4_2]; ..xn--cof61594i; [V6, A4_2]; ; # ..ᩙ +..xn--cof61594i; ..\u1A59; [V6, X4_2]; ..xn--cof61594i; [V6, A4_2]; ; # ..ᩙ +xn--y86c.xn--cof61594i; ︒.\u1A59; [V6]; xn--y86c.xn--cof61594i; ; ; # ︒.ᩙ +\u0323\u2DE1。\u200C⓾\u200C\u06B9; \u0323\u2DE1.\u200C⓾\u200C\u06B9; [B1, C1, V5]; xn--kta899s.xn--skb970ka771c; ; xn--kta899s.xn--skb116m; [B1, V5] # ̣ⷡ.⓾ڹ +xn--kta899s.xn--skb116m; \u0323\u2DE1.⓾\u06B9; [B1, V5]; xn--kta899s.xn--skb116m; ; ; # ̣ⷡ.⓾ڹ +xn--kta899s.xn--skb970ka771c; \u0323\u2DE1.\u200C⓾\u200C\u06B9; [B1, C1, V5]; xn--kta899s.xn--skb970ka771c; ; ; # ̣ⷡ.⓾ڹ +𞠶ᠴ\u06DD。\u1074𞤵󠅦; 𞠶ᠴ\u06DD.\u1074𞤵; [B1, B2, V5, V6]; xn--tlb199fwl35a.xn--yld4613v; ; ; # 𞠶ᠴ.ၴ𞤵 +𞠶ᠴ\u06DD。\u1074𞤵󠅦; 𞠶ᠴ\u06DD.\u1074𞤵; [B1, B2, V5, V6]; xn--tlb199fwl35a.xn--yld4613v; ; ; # 𞠶ᠴ.ၴ𞤵 +𞠶ᠴ\u06DD。\u1074𞤓󠅦; 𞠶ᠴ\u06DD.\u1074𞤵; [B1, B2, V5, V6]; xn--tlb199fwl35a.xn--yld4613v; ; ; # 𞠶ᠴ.ၴ𞤵 +xn--tlb199fwl35a.xn--yld4613v; 𞠶ᠴ\u06DD.\u1074𞤵; [B1, B2, V5, V6]; xn--tlb199fwl35a.xn--yld4613v; ; ; # 𞠶ᠴ.ၴ𞤵 +𞠶ᠴ\u06DD。\u1074𞤓󠅦; 𞠶ᠴ\u06DD.\u1074𞤵; [B1, B2, V5, V6]; xn--tlb199fwl35a.xn--yld4613v; ; ; # 𞠶ᠴ.ၴ𞤵 +𑰺.-; ; [V3, V5, V6]; xn--jk3d.xn----iz68g; ; ; # 𑰺.- +xn--jk3d.xn----iz68g; 𑰺.-; [V3, V5, V6]; xn--jk3d.xn----iz68g; ; ; # 𑰺.- +.赏; .赏; [V6]; xn--2856e.xn--6o3a; ; ; # .赏 +.赏; ; [V6]; xn--2856e.xn--6o3a; ; ; # .赏 +xn--2856e.xn--6o3a; .赏; [V6]; xn--2856e.xn--6o3a; ; ; # .赏 +\u06B0ᠡ。Ⴁ; \u06B0ᠡ.Ⴁ; [B2, B3, V6]; xn--jkb440g.xn--8md; ; ; # ڰᠡ.Ⴁ +\u06B0ᠡ。Ⴁ; \u06B0ᠡ.Ⴁ; [B2, B3, V6]; xn--jkb440g.xn--8md; ; ; # ڰᠡ.Ⴁ +\u06B0ᠡ。ⴁ; \u06B0ᠡ.ⴁ; [B2, B3]; xn--jkb440g.xn--skj; ; ; # ڰᠡ.ⴁ +xn--jkb440g.xn--skj; \u06B0ᠡ.ⴁ; [B2, B3]; xn--jkb440g.xn--skj; ; ; # ڰᠡ.ⴁ +xn--jkb440g.xn--8md; \u06B0ᠡ.Ⴁ; [B2, B3, V6]; xn--jkb440g.xn--8md; ; ; # ڰᠡ.Ⴁ +\u06B0ᠡ。ⴁ; \u06B0ᠡ.ⴁ; [B2, B3]; xn--jkb440g.xn--skj; ; ; # ڰᠡ.ⴁ +\u20DEႪ\u06BBς。-; \u20DEႪ\u06BBς.-; [B1, V3, V5, V6]; xn--3xa53m7zmb0q.-; ; xn--4xa33m7zmb0q.-; # ⃞Ⴊڻς.- +\u20DEႪ\u06BBς。-; \u20DEႪ\u06BBς.-; [B1, V3, V5, V6]; xn--3xa53m7zmb0q.-; ; xn--4xa33m7zmb0q.-; # ⃞Ⴊڻς.- +\u20DEⴊ\u06BBς。-; \u20DEⴊ\u06BBς.-; [B1, V3, V5]; xn--3xa53mr38aeel.-; ; xn--4xa33mr38aeel.-; # ⃞ⴊڻς.- +\u20DEႪ\u06BBΣ。-; \u20DEႪ\u06BBσ.-; [B1, V3, V5, V6]; xn--4xa33m7zmb0q.-; ; ; # ⃞Ⴊڻσ.- +\u20DEⴊ\u06BBσ。-; \u20DEⴊ\u06BBσ.-; [B1, V3, V5]; xn--4xa33mr38aeel.-; ; ; # ⃞ⴊڻσ.- +\u20DEႪ\u06BBσ。-; \u20DEႪ\u06BBσ.-; [B1, V3, V5, V6]; xn--4xa33m7zmb0q.-; ; ; # ⃞Ⴊڻσ.- +xn--4xa33m7zmb0q.-; \u20DEႪ\u06BBσ.-; [B1, V3, V5, V6]; xn--4xa33m7zmb0q.-; ; ; # ⃞Ⴊڻσ.- +xn--4xa33mr38aeel.-; \u20DEⴊ\u06BBσ.-; [B1, V3, V5]; xn--4xa33mr38aeel.-; ; ; # ⃞ⴊڻσ.- +xn--3xa53mr38aeel.-; \u20DEⴊ\u06BBς.-; [B1, V3, V5]; xn--3xa53mr38aeel.-; ; ; # ⃞ⴊڻς.- +xn--3xa53m7zmb0q.-; \u20DEႪ\u06BBς.-; [B1, V3, V5, V6]; xn--3xa53m7zmb0q.-; ; ; # ⃞Ⴊڻς.- +\u20DEⴊ\u06BBς。-; \u20DEⴊ\u06BBς.-; [B1, V3, V5]; xn--3xa53mr38aeel.-; ; xn--4xa33mr38aeel.-; # ⃞ⴊڻς.- +\u20DEႪ\u06BBΣ。-; \u20DEႪ\u06BBσ.-; [B1, V3, V5, V6]; xn--4xa33m7zmb0q.-; ; ; # ⃞Ⴊڻσ.- +\u20DEⴊ\u06BBσ。-; \u20DEⴊ\u06BBσ.-; [B1, V3, V5]; xn--4xa33mr38aeel.-; ; ; # ⃞ⴊڻσ.- +\u20DEႪ\u06BBσ。-; \u20DEႪ\u06BBσ.-; [B1, V3, V5, V6]; xn--4xa33m7zmb0q.-; ; ; # ⃞Ⴊڻσ.- +Ⴍ.\u200C; Ⴍ.\u200C; [C1, V6]; xn--lnd.xn--0ug56448b; ; xn--lnd.xn--p01x; [V6] # Ⴍ. +Ⴍ.\u200C; ; [C1, V6]; xn--lnd.xn--0ug56448b; ; xn--lnd.xn--p01x; [V6] # Ⴍ. +ⴍ.\u200C; ; [C1, V6]; xn--4kj.xn--0ug56448b; ; xn--4kj.xn--p01x; [V6] # ⴍ. +xn--4kj.xn--p01x; ⴍ.; [V6]; xn--4kj.xn--p01x; ; ; # ⴍ. +xn--4kj.xn--0ug56448b; ⴍ.\u200C; [C1, V6]; xn--4kj.xn--0ug56448b; ; ; # ⴍ. +xn--lnd.xn--p01x; Ⴍ.; [V6]; xn--lnd.xn--p01x; ; ; # Ⴍ. +xn--lnd.xn--0ug56448b; Ⴍ.\u200C; [C1, V6]; xn--lnd.xn--0ug56448b; ; ; # Ⴍ. +ⴍ.\u200C; ⴍ.\u200C; [C1, V6]; xn--4kj.xn--0ug56448b; ; xn--4kj.xn--p01x; [V6] # ⴍ. +.𐫫\u1A60\u1B44; ; [B2, B3, B6, V6]; xn--9u37blu98h.xn--jof13bt568cork1j; ; ; # .𐫫᩠᭄ +xn--9u37blu98h.xn--jof13bt568cork1j; .𐫫\u1A60\u1B44; [B2, B3, B6, V6]; xn--9u37blu98h.xn--jof13bt568cork1j; ; ; # .𐫫᩠᭄ +≯❊ᠯ。𐹱⺨; ≯❊ᠯ.𐹱⺨; [B1]; xn--i7e163ct2d.xn--vwj7372e; ; ; # ≯❊ᠯ.𐹱⺨ +>\u0338❊ᠯ。𐹱⺨; ≯❊ᠯ.𐹱⺨; [B1]; xn--i7e163ct2d.xn--vwj7372e; ; ; # ≯❊ᠯ.𐹱⺨ +≯❊ᠯ。𐹱⺨; ≯❊ᠯ.𐹱⺨; [B1]; xn--i7e163ct2d.xn--vwj7372e; ; ; # ≯❊ᠯ.𐹱⺨ +>\u0338❊ᠯ。𐹱⺨; ≯❊ᠯ.𐹱⺨; [B1]; xn--i7e163ct2d.xn--vwj7372e; ; ; # ≯❊ᠯ.𐹱⺨ +xn--i7e163ct2d.xn--vwj7372e; ≯❊ᠯ.𐹱⺨; [B1]; xn--i7e163ct2d.xn--vwj7372e; ; ; # ≯❊ᠯ.𐹱⺨ +𐹧𐹩。Ⴈ𐫮Ⴏ; 𐹧𐹩.Ⴈ𐫮Ⴏ; [B5, B6, V6]; xn--fo0de1270ope54j.xn--gndo2033q; ; ; # 𐹧𐹩.Ⴈ𐫮Ⴏ +𐹧𐹩。ⴈ𐫮ⴏ; 𐹧𐹩.ⴈ𐫮ⴏ; [B5, B6, V6]; xn--fo0de1270ope54j.xn--zkjo0151o; ; ; # 𐹧𐹩.ⴈ𐫮ⴏ +xn--fo0de1270ope54j.xn--zkjo0151o; 𐹧𐹩.ⴈ𐫮ⴏ; [B5, B6, V6]; xn--fo0de1270ope54j.xn--zkjo0151o; ; ; # 𐹧𐹩.ⴈ𐫮ⴏ +xn--fo0de1270ope54j.xn--gndo2033q; 𐹧𐹩.Ⴈ𐫮Ⴏ; [B5, B6, V6]; xn--fo0de1270ope54j.xn--gndo2033q; ; ; # 𐹧𐹩.Ⴈ𐫮Ⴏ +𞠂。\uA926; 𞠂.\uA926; [B1, V5]; xn--145h.xn--ti9a; ; ; # 𞠂.ꤦ +xn--145h.xn--ti9a; 𞠂.\uA926; [B1, V5]; xn--145h.xn--ti9a; ; ; # 𞠂.ꤦ +𝟔𐹫.\u0733\u10379ꡇ; 6𐹫.\u1037\u07339ꡇ; [B1, V5]; xn--6-t26i.xn--9-91c730e8u8n; ; ; # 6𐹫.့ܳ9ꡇ +𝟔𐹫.\u1037\u07339ꡇ; 6𐹫.\u1037\u07339ꡇ; [B1, V5]; xn--6-t26i.xn--9-91c730e8u8n; ; ; # 6𐹫.့ܳ9ꡇ +6𐹫.\u1037\u07339ꡇ; ; [B1, V5]; xn--6-t26i.xn--9-91c730e8u8n; ; ; # 6𐹫.့ܳ9ꡇ +xn--6-t26i.xn--9-91c730e8u8n; 6𐹫.\u1037\u07339ꡇ; [B1, V5]; xn--6-t26i.xn--9-91c730e8u8n; ; ; # 6𐹫.့ܳ9ꡇ +\u0724\u0603.\u06D8; \u0724\u0603.\u06D8; [B1, V5, V6]; xn--lfb19ct414i.xn--olb; ; ; # ܤ.ۘ +\u0724\u0603.\u06D8; ; [B1, V5, V6]; xn--lfb19ct414i.xn--olb; ; ; # ܤ.ۘ +xn--lfb19ct414i.xn--olb; \u0724\u0603.\u06D8; [B1, V5, V6]; xn--lfb19ct414i.xn--olb; ; ; # ܤ.ۘ +✆ꡋ.\u0632\u200D; ✆ꡋ.\u0632\u200D; [B1, C2, V6]; xn--1biv525bcix0d.xn--xgb253k0m73a; ; xn--1biv525bcix0d.xn--xgb6828v; [B1, V6] # ✆ꡋ.ز +✆ꡋ.\u0632\u200D; ; [B1, C2, V6]; xn--1biv525bcix0d.xn--xgb253k0m73a; ; xn--1biv525bcix0d.xn--xgb6828v; [B1, V6] # ✆ꡋ.ز +xn--1biv525bcix0d.xn--xgb6828v; ✆ꡋ.\u0632; [B1, V6]; xn--1biv525bcix0d.xn--xgb6828v; ; ; # ✆ꡋ.ز +xn--1biv525bcix0d.xn--xgb253k0m73a; ✆ꡋ.\u0632\u200D; [B1, C2, V6]; xn--1biv525bcix0d.xn--xgb253k0m73a; ; ; # ✆ꡋ.ز +\u0845𞸍-.≠𑋪; \u0845\u0646-.≠𑋪; [B1, B2, B3, V3, V6]; xn----qoc64my971s.xn--1ch7585g76o3c; ; ; # ࡅن-.≠𑋪 +\u0845𞸍-.=\u0338𑋪; \u0845\u0646-.≠𑋪; [B1, B2, B3, V3, V6]; xn----qoc64my971s.xn--1ch7585g76o3c; ; ; # ࡅن-.≠𑋪 +\u0845\u0646-.≠𑋪; ; [B1, B2, B3, V3, V6]; xn----qoc64my971s.xn--1ch7585g76o3c; ; ; # ࡅن-.≠𑋪 +\u0845\u0646-.=\u0338𑋪; \u0845\u0646-.≠𑋪; [B1, B2, B3, V3, V6]; xn----qoc64my971s.xn--1ch7585g76o3c; ; ; # ࡅن-.≠𑋪 +xn----qoc64my971s.xn--1ch7585g76o3c; \u0845\u0646-.≠𑋪; [B1, B2, B3, V3, V6]; xn----qoc64my971s.xn--1ch7585g76o3c; ; ; # ࡅن-.≠𑋪 +𝟛.笠; 3.笠; ; 3.xn--6vz; ; ; # 3.笠 +𝟛.笠; 3.笠; ; 3.xn--6vz; ; ; # 3.笠 +3.笠; ; ; 3.xn--6vz; ; ; # 3.笠 +3.xn--6vz; 3.笠; ; 3.xn--6vz; ; ; # 3.笠 +-\u200D.Ⴞ𐋷; ; [C2, V3, V6]; xn----ugn.xn--2nd2315j; ; -.xn--2nd2315j; [V3, V6] # -.Ⴞ𐋷 +-\u200D.ⴞ𐋷; ; [C2, V3]; xn----ugn.xn--mlj8559d; ; -.xn--mlj8559d; [V3] # -.ⴞ𐋷 +-.xn--mlj8559d; -.ⴞ𐋷; [V3]; -.xn--mlj8559d; ; ; # -.ⴞ𐋷 +xn----ugn.xn--mlj8559d; -\u200D.ⴞ𐋷; [C2, V3]; xn----ugn.xn--mlj8559d; ; ; # -.ⴞ𐋷 +-.xn--2nd2315j; -.Ⴞ𐋷; [V3, V6]; -.xn--2nd2315j; ; ; # -.Ⴞ𐋷 +xn----ugn.xn--2nd2315j; -\u200D.Ⴞ𐋷; [C2, V3, V6]; xn----ugn.xn--2nd2315j; ; ; # -.Ⴞ𐋷 +\u200Dςß\u0731.\u0BCD; \u200Dςß\u0731.\u0BCD; [C2, V5]; xn--zca19ln1di19a.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # ςßܱ.் +\u200Dςß\u0731.\u0BCD; ; [C2, V5]; xn--zca19ln1di19a.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # ςßܱ.் +\u200DΣSS\u0731.\u0BCD; \u200Dσss\u0731.\u0BCD; [C2, V5]; xn--ss-ubc826ab34b.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σssܱ.் +\u200Dσss\u0731.\u0BCD; ; [C2, V5]; xn--ss-ubc826ab34b.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σssܱ.் +\u200DΣss\u0731.\u0BCD; \u200Dσss\u0731.\u0BCD; [C2, V5]; xn--ss-ubc826ab34b.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σssܱ.் +xn--ss-ubc826a.xn--xmc; σss\u0731.\u0BCD; [V5]; xn--ss-ubc826a.xn--xmc; ; ; # σssܱ.் +xn--ss-ubc826ab34b.xn--xmc; \u200Dσss\u0731.\u0BCD; [C2, V5]; xn--ss-ubc826ab34b.xn--xmc; ; ; # σssܱ.் +\u200DΣß\u0731.\u0BCD; \u200Dσß\u0731.\u0BCD; [C2, V5]; xn--zca39lk1di19a.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σßܱ.் +\u200Dσß\u0731.\u0BCD; ; [C2, V5]; xn--zca39lk1di19a.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σßܱ.் +xn--zca39lk1di19a.xn--xmc; \u200Dσß\u0731.\u0BCD; [C2, V5]; xn--zca39lk1di19a.xn--xmc; ; ; # σßܱ.் +xn--zca19ln1di19a.xn--xmc; \u200Dςß\u0731.\u0BCD; [C2, V5]; xn--zca19ln1di19a.xn--xmc; ; ; # ςßܱ.் +\u200DΣSS\u0731.\u0BCD; \u200Dσss\u0731.\u0BCD; [C2, V5]; xn--ss-ubc826ab34b.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σssܱ.் +\u200Dσss\u0731.\u0BCD; \u200Dσss\u0731.\u0BCD; [C2, V5]; xn--ss-ubc826ab34b.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σssܱ.் +\u200DΣss\u0731.\u0BCD; \u200Dσss\u0731.\u0BCD; [C2, V5]; xn--ss-ubc826ab34b.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σssܱ.் +\u200DΣß\u0731.\u0BCD; \u200Dσß\u0731.\u0BCD; [C2, V5]; xn--zca39lk1di19a.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σßܱ.் +\u200Dσß\u0731.\u0BCD; \u200Dσß\u0731.\u0BCD; [C2, V5]; xn--zca39lk1di19a.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σßܱ.் +≠.\u200D; ≠.\u200D; [C2]; xn--1ch.xn--1ug; ; xn--1ch.; [] # ≠. +=\u0338.\u200D; ≠.\u200D; [C2]; xn--1ch.xn--1ug; ; xn--1ch.; [] # ≠. +≠.\u200D; ; [C2]; xn--1ch.xn--1ug; ; xn--1ch.; [] # ≠. +=\u0338.\u200D; ≠.\u200D; [C2]; xn--1ch.xn--1ug; ; xn--1ch.; [] # ≠. +xn--1ch.; ≠.; ; xn--1ch.; ; ; # ≠. +≠.; ; ; xn--1ch.; ; ; # ≠. +=\u0338.; ≠.; ; xn--1ch.; ; ; # ≠. +xn--1ch.xn--1ug; ≠.\u200D; [C2]; xn--1ch.xn--1ug; ; ; # ≠. +\uFC01。\u0C81ᠼ▗; \u0626\u062D.\u0C81ᠼ▗; [B1, V5, V6]; xn--lgbo.xn--2rc021dcxkrx55t; ; ; # ئح.ಁᠼ▗ +\u0626\u062D。\u0C81ᠼ▗; \u0626\u062D.\u0C81ᠼ▗; [B1, V5, V6]; xn--lgbo.xn--2rc021dcxkrx55t; ; ; # ئح.ಁᠼ▗ +\u064A\u0654\u062D。\u0C81ᠼ▗; \u0626\u062D.\u0C81ᠼ▗; [B1, V5, V6]; xn--lgbo.xn--2rc021dcxkrx55t; ; ; # ئح.ಁᠼ▗ +xn--lgbo.xn--2rc021dcxkrx55t; \u0626\u062D.\u0C81ᠼ▗; [B1, V5, V6]; xn--lgbo.xn--2rc021dcxkrx55t; ; ; # ئح.ಁᠼ▗ +\u09CDς.ς𐨿; \u09CDς.ς𐨿; [V6]; xn--3xa702av8297a.xn--3xa8055k; ; xn--4xa502av8297a.xn--4xa6055k; # ্ς.ς𐨿 +\u09CDς.ς𐨿; ; [V6]; xn--3xa702av8297a.xn--3xa8055k; ; xn--4xa502av8297a.xn--4xa6055k; # ্ς.ς𐨿 +\u09CDΣ.Σ𐨿; \u09CDσ.σ𐨿; [V6]; xn--4xa502av8297a.xn--4xa6055k; ; ; # ্σ.σ𐨿 +\u09CDσ.ς𐨿; ; [V6]; xn--4xa502av8297a.xn--3xa8055k; ; xn--4xa502av8297a.xn--4xa6055k; # ্σ.ς𐨿 +\u09CDσ.σ𐨿; ; [V6]; xn--4xa502av8297a.xn--4xa6055k; ; ; # ্σ.σ𐨿 +\u09CDΣ.σ𐨿; \u09CDσ.σ𐨿; [V6]; xn--4xa502av8297a.xn--4xa6055k; ; ; # ্σ.σ𐨿 +xn--4xa502av8297a.xn--4xa6055k; \u09CDσ.σ𐨿; [V6]; xn--4xa502av8297a.xn--4xa6055k; ; ; # ্σ.σ𐨿 +\u09CDΣ.ς𐨿; \u09CDσ.ς𐨿; [V6]; xn--4xa502av8297a.xn--3xa8055k; ; xn--4xa502av8297a.xn--4xa6055k; # ্σ.ς𐨿 +xn--4xa502av8297a.xn--3xa8055k; \u09CDσ.ς𐨿; [V6]; xn--4xa502av8297a.xn--3xa8055k; ; ; # ্σ.ς𐨿 +xn--3xa702av8297a.xn--3xa8055k; \u09CDς.ς𐨿; [V6]; xn--3xa702av8297a.xn--3xa8055k; ; ; # ্ς.ς𐨿 +\u09CDΣ.Σ𐨿; \u09CDσ.σ𐨿; [V6]; xn--4xa502av8297a.xn--4xa6055k; ; ; # ্σ.σ𐨿 +\u09CDσ.ς𐨿; \u09CDσ.ς𐨿; [V6]; xn--4xa502av8297a.xn--3xa8055k; ; xn--4xa502av8297a.xn--4xa6055k; # ্σ.ς𐨿 +\u09CDσ.σ𐨿; \u09CDσ.σ𐨿; [V6]; xn--4xa502av8297a.xn--4xa6055k; ; ; # ্σ.σ𐨿 +\u09CDΣ.σ𐨿; \u09CDσ.σ𐨿; [V6]; xn--4xa502av8297a.xn--4xa6055k; ; ; # ্σ.σ𐨿 +\u09CDΣ.ς𐨿; \u09CDσ.ς𐨿; [V6]; xn--4xa502av8297a.xn--3xa8055k; ; xn--4xa502av8297a.xn--4xa6055k; # ্σ.ς𐨿 +𐫓\u07D8牅\u08F8。\u1A17Ⴙ; 𐫓\u07D8牅\u08F8.\u1A17Ⴙ; [B2, B3, V6]; xn--zsb09cu46vjs6f.xn--xnd909bv540bm5k9d; ; ; # 𐫓ߘ牅ࣸ.ᨗႹ +𐫓\u07D8牅\u08F8。\u1A17Ⴙ; 𐫓\u07D8牅\u08F8.\u1A17Ⴙ; [B2, B3, V6]; xn--zsb09cu46vjs6f.xn--xnd909bv540bm5k9d; ; ; # 𐫓ߘ牅ࣸ.ᨗႹ +𐫓\u07D8牅\u08F8。\u1A17ⴙ; 𐫓\u07D8牅\u08F8.\u1A17ⴙ; [B2, B3, V6]; xn--zsb09cu46vjs6f.xn--gmf469fr883am5r1e; ; ; # 𐫓ߘ牅ࣸ.ᨗⴙ +xn--zsb09cu46vjs6f.xn--gmf469fr883am5r1e; 𐫓\u07D8牅\u08F8.\u1A17ⴙ; [B2, B3, V6]; xn--zsb09cu46vjs6f.xn--gmf469fr883am5r1e; ; ; # 𐫓ߘ牅ࣸ.ᨗⴙ +xn--zsb09cu46vjs6f.xn--xnd909bv540bm5k9d; 𐫓\u07D8牅\u08F8.\u1A17Ⴙ; [B2, B3, V6]; xn--zsb09cu46vjs6f.xn--xnd909bv540bm5k9d; ; ; # 𐫓ߘ牅ࣸ.ᨗႹ +𐫓\u07D8牅\u08F8。\u1A17ⴙ; 𐫓\u07D8牅\u08F8.\u1A17ⴙ; [B2, B3, V6]; xn--zsb09cu46vjs6f.xn--gmf469fr883am5r1e; ; ; # 𐫓ߘ牅ࣸ.ᨗⴙ +。륧; .륧; [V6]; xn--s264a.xn--pw2b; ; ; # .륧 +。륧; .륧; [V6]; xn--s264a.xn--pw2b; ; ; # .륧 +。륧; .륧; [V6]; xn--s264a.xn--pw2b; ; ; # .륧 +。륧; .륧; [V6]; xn--s264a.xn--pw2b; ; ; # .륧 +xn--s264a.xn--pw2b; .륧; [V6]; xn--s264a.xn--pw2b; ; ; # .륧 +𐹷\u200D。; 𐹷\u200D.; [B1, C2, V6]; xn--1ugx205g.xn--8088d; ; xn--vo0d.xn--8088d; [B1, V6] # 𐹷. +xn--vo0d.xn--8088d; 𐹷.; [B1, V6]; xn--vo0d.xn--8088d; ; ; # 𐹷. +xn--1ugx205g.xn--8088d; 𐹷\u200D.; [B1, C2, V6]; xn--1ugx205g.xn--8088d; ; ; # 𐹷. +Ⴘ\u06C2𑲭。-; Ⴘ\u06C2𑲭.-; [B1, B5, B6, V3, V6]; xn--1kb312c139t.-; ; ; # Ⴘۂ𑲭.- +Ⴘ\u06C1\u0654𑲭。-; Ⴘ\u06C2𑲭.-; [B1, B5, B6, V3, V6]; xn--1kb312c139t.-; ; ; # Ⴘۂ𑲭.- +Ⴘ\u06C2𑲭。-; Ⴘ\u06C2𑲭.-; [B1, B5, B6, V3, V6]; xn--1kb312c139t.-; ; ; # Ⴘۂ𑲭.- +Ⴘ\u06C1\u0654𑲭。-; Ⴘ\u06C2𑲭.-; [B1, B5, B6, V3, V6]; xn--1kb312c139t.-; ; ; # Ⴘۂ𑲭.- +ⴘ\u06C1\u0654𑲭。-; ⴘ\u06C2𑲭.-; [B1, B5, B6, V3]; xn--1kb147qfk3n.-; ; ; # ⴘۂ𑲭.- +ⴘ\u06C2𑲭。-; ⴘ\u06C2𑲭.-; [B1, B5, B6, V3]; xn--1kb147qfk3n.-; ; ; # ⴘۂ𑲭.- +xn--1kb147qfk3n.-; ⴘ\u06C2𑲭.-; [B1, B5, B6, V3]; xn--1kb147qfk3n.-; ; ; # ⴘۂ𑲭.- +xn--1kb312c139t.-; Ⴘ\u06C2𑲭.-; [B1, B5, B6, V3, V6]; xn--1kb312c139t.-; ; ; # Ⴘۂ𑲭.- +ⴘ\u06C1\u0654𑲭。-; ⴘ\u06C2𑲭.-; [B1, B5, B6, V3]; xn--1kb147qfk3n.-; ; ; # ⴘۂ𑲭.- +ⴘ\u06C2𑲭。-; ⴘ\u06C2𑲭.-; [B1, B5, B6, V3]; xn--1kb147qfk3n.-; ; ; # ⴘۂ𑲭.- +\uA806\u067B₆ᡐ。🛇\uFCDD; \uA806\u067B6ᡐ.🛇\u064A\u0645; [B1, V5]; xn--6-rrc018krt9k.xn--hhbj61429a; ; ; # ꠆ٻ6ᡐ.🛇يم +\uA806\u067B6ᡐ。🛇\u064A\u0645; \uA806\u067B6ᡐ.🛇\u064A\u0645; [B1, V5]; xn--6-rrc018krt9k.xn--hhbj61429a; ; ; # ꠆ٻ6ᡐ.🛇يم +xn--6-rrc018krt9k.xn--hhbj61429a; \uA806\u067B6ᡐ.🛇\u064A\u0645; [B1, V5]; xn--6-rrc018krt9k.xn--hhbj61429a; ; ; # ꠆ٻ6ᡐ.🛇يم +.㇄ᡟ𐫂\u0622; ; [B1, V6]; xn--p292d.xn--hgb154ghrsvm2r; ; ; # .㇄ᡟ𐫂آ +.㇄ᡟ𐫂\u0627\u0653; .㇄ᡟ𐫂\u0622; [B1, V6]; xn--p292d.xn--hgb154ghrsvm2r; ; ; # .㇄ᡟ𐫂آ +xn--p292d.xn--hgb154ghrsvm2r; .㇄ᡟ𐫂\u0622; [B1, V6]; xn--p292d.xn--hgb154ghrsvm2r; ; ; # .㇄ᡟ𐫂آ +\u07DF。-\u07E9; \u07DF.-\u07E9; [B1, B2, B3, V3, V6]; xn--6sb88139l.xn----pdd; ; ; # ߟ.-ߩ +xn--6sb88139l.xn----pdd; \u07DF.-\u07E9; [B1, B2, B3, V3, V6]; xn--6sb88139l.xn----pdd; ; ; # ߟ.-ߩ +ς\u0643⾑.\u200Cᢟ\u200C⒈; ς\u0643襾.\u200Cᢟ\u200C⒈; [B1, B5, C1, V6]; xn--3xa69jux8r.xn--pbf519aba607b; ; xn--4xa49jux8r.xn--pbf212d; [B5, V6] # ςك襾.ᢟ⒈ +ς\u0643襾.\u200Cᢟ\u200C1.; ; [B1, B5, C1]; xn--3xa69jux8r.xn--1-4ck691bba.; ; xn--4xa49jux8r.xn--1-4ck.; [B5] # ςك襾.ᢟ1. +Σ\u0643襾.\u200Cᢟ\u200C1.; σ\u0643襾.\u200Cᢟ\u200C1.; [B1, B5, C1]; xn--4xa49jux8r.xn--1-4ck691bba.; ; xn--4xa49jux8r.xn--1-4ck.; [B5] # σك襾.ᢟ1. +σ\u0643襾.\u200Cᢟ\u200C1.; ; [B1, B5, C1]; xn--4xa49jux8r.xn--1-4ck691bba.; ; xn--4xa49jux8r.xn--1-4ck.; [B5] # σك襾.ᢟ1. +xn--4xa49jux8r.xn--1-4ck.; σ\u0643襾.ᢟ1.; [B5]; xn--4xa49jux8r.xn--1-4ck.; ; ; # σك襾.ᢟ1. +xn--4xa49jux8r.xn--1-4ck691bba.; σ\u0643襾.\u200Cᢟ\u200C1.; [B1, B5, C1]; xn--4xa49jux8r.xn--1-4ck691bba.; ; ; # σك襾.ᢟ1. +xn--3xa69jux8r.xn--1-4ck691bba.; ς\u0643襾.\u200Cᢟ\u200C1.; [B1, B5, C1]; xn--3xa69jux8r.xn--1-4ck691bba.; ; ; # ςك襾.ᢟ1. +Σ\u0643⾑.\u200Cᢟ\u200C⒈; σ\u0643襾.\u200Cᢟ\u200C⒈; [B1, B5, C1, V6]; xn--4xa49jux8r.xn--pbf519aba607b; ; xn--4xa49jux8r.xn--pbf212d; [B5, V6] # σك襾.ᢟ⒈ +σ\u0643⾑.\u200Cᢟ\u200C⒈; σ\u0643襾.\u200Cᢟ\u200C⒈; [B1, B5, C1, V6]; xn--4xa49jux8r.xn--pbf519aba607b; ; xn--4xa49jux8r.xn--pbf212d; [B5, V6] # σك襾.ᢟ⒈ +xn--4xa49jux8r.xn--pbf212d; σ\u0643襾.ᢟ⒈; [B5, V6]; xn--4xa49jux8r.xn--pbf212d; ; ; # σك襾.ᢟ⒈ +xn--4xa49jux8r.xn--pbf519aba607b; σ\u0643襾.\u200Cᢟ\u200C⒈; [B1, B5, C1, V6]; xn--4xa49jux8r.xn--pbf519aba607b; ; ; # σك襾.ᢟ⒈ +xn--3xa69jux8r.xn--pbf519aba607b; ς\u0643襾.\u200Cᢟ\u200C⒈; [B1, B5, C1, V6]; xn--3xa69jux8r.xn--pbf519aba607b; ; ; # ςك襾.ᢟ⒈ +ᡆ.; ᡆ.; [V6]; xn--57e0440k.xn--k86h; ; ; # ᡆ. +ᡆ.; ; [V6]; xn--57e0440k.xn--k86h; ; ; # ᡆ. +xn--57e0440k.xn--k86h; ᡆ.; [V6]; xn--57e0440k.xn--k86h; ; ; # ᡆ. +\u0A4D𦍓\u1DEE。\u200C\u08BD; \u0A4D𦍓\u1DEE.\u200C\u08BD; [B1, C1, V5, V6]; xn--ybc461hph93b.xn--jzb740j1y45h; ; xn--ybc461hph93b.xn--jzb29857e; [B1, B2, B3, V5, V6] # ੍𦍓ᷮ.ࢽ +\u0A4D𦍓\u1DEE。\u200C\u08BD; \u0A4D𦍓\u1DEE.\u200C\u08BD; [B1, C1, V5, V6]; xn--ybc461hph93b.xn--jzb740j1y45h; ; xn--ybc461hph93b.xn--jzb29857e; [B1, B2, B3, V5, V6] # ੍𦍓ᷮ.ࢽ +xn--ybc461hph93b.xn--jzb29857e; \u0A4D𦍓\u1DEE.\u08BD; [B1, B2, B3, V5, V6]; xn--ybc461hph93b.xn--jzb29857e; ; ; # ੍𦍓ᷮ.ࢽ +xn--ybc461hph93b.xn--jzb740j1y45h; \u0A4D𦍓\u1DEE.\u200C\u08BD; [B1, C1, V5, V6]; xn--ybc461hph93b.xn--jzb740j1y45h; ; ; # ੍𦍓ᷮ.ࢽ +\u062E\u0748-.\u200C먿; \u062E\u0748-.\u200C먿; [B1, B2, B3, C1, V3, V6]; xn----dnc06f42153a.xn--0ug1581d; ; xn----dnc06f42153a.xn--v22b; [B2, B3, V3, V6] # خ݈-.먿 +\u062E\u0748-.\u200C먿; \u062E\u0748-.\u200C먿; [B1, B2, B3, C1, V3, V6]; xn----dnc06f42153a.xn--0ug1581d; ; xn----dnc06f42153a.xn--v22b; [B2, B3, V3, V6] # خ݈-.먿 +\u062E\u0748-.\u200C먿; ; [B1, B2, B3, C1, V3, V6]; xn----dnc06f42153a.xn--0ug1581d; ; xn----dnc06f42153a.xn--v22b; [B2, B3, V3, V6] # خ݈-.먿 +\u062E\u0748-.\u200C먿; \u062E\u0748-.\u200C먿; [B1, B2, B3, C1, V3, V6]; xn----dnc06f42153a.xn--0ug1581d; ; xn----dnc06f42153a.xn--v22b; [B2, B3, V3, V6] # خ݈-.먿 +xn----dnc06f42153a.xn--v22b; \u062E\u0748-.먿; [B2, B3, V3, V6]; xn----dnc06f42153a.xn--v22b; ; ; # خ݈-.먿 +xn----dnc06f42153a.xn--0ug1581d; \u062E\u0748-.\u200C먿; [B1, B2, B3, C1, V3, V6]; xn----dnc06f42153a.xn--0ug1581d; ; ; # خ݈-.먿 +。ᠽ; .ᠽ; [V6]; xn--j890g.xn--w7e; ; ; # .ᠽ +。ᠽ; .ᠽ; [V6]; xn--j890g.xn--w7e; ; ; # .ᠽ +xn--j890g.xn--w7e; .ᠽ; [V6]; xn--j890g.xn--w7e; ; ; # .ᠽ +嬃𝍌.\u200D\u0B44; 嬃𝍌.\u200D\u0B44; [C2]; xn--b6s0078f.xn--0ic557h; ; xn--b6s0078f.xn--0ic; [V5] # 嬃𝍌.ୄ +嬃𝍌.\u200D\u0B44; ; [C2]; xn--b6s0078f.xn--0ic557h; ; xn--b6s0078f.xn--0ic; [V5] # 嬃𝍌.ୄ +xn--b6s0078f.xn--0ic; 嬃𝍌.\u0B44; [V5]; xn--b6s0078f.xn--0ic; ; ; # 嬃𝍌.ୄ +xn--b6s0078f.xn--0ic557h; 嬃𝍌.\u200D\u0B44; [C2]; xn--b6s0078f.xn--0ic557h; ; ; # 嬃𝍌.ୄ +\u0602𝌪≯.; \u0602𝌪≯.; [B1, V6]; xn--kfb866llx01a.xn--wp1gm3570b; ; ; # 𝌪≯. +\u0602𝌪>\u0338.; \u0602𝌪≯.; [B1, V6]; xn--kfb866llx01a.xn--wp1gm3570b; ; ; # 𝌪≯. +\u0602𝌪≯.; ; [B1, V6]; xn--kfb866llx01a.xn--wp1gm3570b; ; ; # 𝌪≯. +\u0602𝌪>\u0338.; \u0602𝌪≯.; [B1, V6]; xn--kfb866llx01a.xn--wp1gm3570b; ; ; # 𝌪≯. +xn--kfb866llx01a.xn--wp1gm3570b; \u0602𝌪≯.; [B1, V6]; xn--kfb866llx01a.xn--wp1gm3570b; ; ; # 𝌪≯. +\u08B7\u17CC\uA9C0.; ; [B5, V6]; xn--dzb638ewm4i1iy1h.xn--3m7h; ; ; # ࢷ៌꧀. +xn--dzb638ewm4i1iy1h.xn--3m7h; \u08B7\u17CC\uA9C0.; [B5, V6]; xn--dzb638ewm4i1iy1h.xn--3m7h; ; ; # ࢷ៌꧀. +\u200C.; ; [C1, V6]; xn--0ug.xn--q823a; ; .xn--q823a; [V6, A4_2] # . +.xn--q823a; .; [V6, X4_2]; .xn--q823a; [V6, A4_2]; ; # . +xn--0ug.xn--q823a; \u200C.; [C1, V6]; xn--0ug.xn--q823a; ; ; # . +Ⴃ䠅.; Ⴃ䠅.; [V6]; xn--bnd074zr557n.xn--yl0d; ; ; # Ⴃ䠅. +Ⴃ䠅.; ; [V6]; xn--bnd074zr557n.xn--yl0d; ; ; # Ⴃ䠅. +ⴃ䠅.; ; [V6]; xn--ukju77frl47r.xn--yl0d; ; ; # ⴃ䠅. +xn--ukju77frl47r.xn--yl0d; ⴃ䠅.; [V6]; xn--ukju77frl47r.xn--yl0d; ; ; # ⴃ䠅. +xn--bnd074zr557n.xn--yl0d; Ⴃ䠅.; [V6]; xn--bnd074zr557n.xn--yl0d; ; ; # Ⴃ䠅. +ⴃ䠅.; ⴃ䠅.; [V6]; xn--ukju77frl47r.xn--yl0d; ; ; # ⴃ䠅. +\u1BF1𐹳𐹵𞤚。𝟨Ⴅ; \u1BF1𐹳𐹵𞤼.6Ⴅ; [B1, V5, V6]; xn--zzfy954hga2415t.xn--6-h0g; ; ; # ᯱ𐹳𐹵𞤼.6Ⴅ +\u1BF1𐹳𐹵𞤚。6Ⴅ; \u1BF1𐹳𐹵𞤼.6Ⴅ; [B1, V5, V6]; xn--zzfy954hga2415t.xn--6-h0g; ; ; # ᯱ𐹳𐹵𞤼.6Ⴅ +\u1BF1𐹳𐹵𞤼。6ⴅ; \u1BF1𐹳𐹵𞤼.6ⴅ; [B1, V5]; xn--zzfy954hga2415t.xn--6-kvs; ; ; # ᯱ𐹳𐹵𞤼.6ⴅ +\u1BF1𐹳𐹵𞤚。6ⴅ; \u1BF1𐹳𐹵𞤼.6ⴅ; [B1, V5]; xn--zzfy954hga2415t.xn--6-kvs; ; ; # ᯱ𐹳𐹵𞤼.6ⴅ +xn--zzfy954hga2415t.xn--6-kvs; \u1BF1𐹳𐹵𞤼.6ⴅ; [B1, V5]; xn--zzfy954hga2415t.xn--6-kvs; ; ; # ᯱ𐹳𐹵𞤼.6ⴅ +xn--zzfy954hga2415t.xn--6-h0g; \u1BF1𐹳𐹵𞤼.6Ⴅ; [B1, V5, V6]; xn--zzfy954hga2415t.xn--6-h0g; ; ; # ᯱ𐹳𐹵𞤼.6Ⴅ +\u1BF1𐹳𐹵𞤼。𝟨ⴅ; \u1BF1𐹳𐹵𞤼.6ⴅ; [B1, V5]; xn--zzfy954hga2415t.xn--6-kvs; ; ; # ᯱ𐹳𐹵𞤼.6ⴅ +\u1BF1𐹳𐹵𞤚。𝟨ⴅ; \u1BF1𐹳𐹵𞤼.6ⴅ; [B1, V5]; xn--zzfy954hga2415t.xn--6-kvs; ; ; # ᯱ𐹳𐹵𞤼.6ⴅ +-。︒; -.︒; [V3, V6]; -.xn--y86c; ; ; # -.︒ +-。。; -..; [V3, X4_2]; ; [V3, A4_2]; ; # -.. +-..; ; [V3, X4_2]; ; [V3, A4_2]; ; # -.. +-.xn--y86c; -.︒; [V3, V6]; -.xn--y86c; ; ; # -.︒ +\u07DBჀ。-⁵--; \u07DBჀ.-5--; [B1, B2, B3, V2, V3, V6]; xn--2sb866b.-5--; ; ; # ߛჀ.-5-- +\u07DBჀ。-5--; \u07DBჀ.-5--; [B1, B2, B3, V2, V3, V6]; xn--2sb866b.-5--; ; ; # ߛჀ.-5-- +\u07DBⴠ。-5--; \u07DBⴠ.-5--; [B1, B2, B3, V2, V3]; xn--2sb691q.-5--; ; ; # ߛⴠ.-5-- +xn--2sb691q.-5--; \u07DBⴠ.-5--; [B1, B2, B3, V2, V3]; xn--2sb691q.-5--; ; ; # ߛⴠ.-5-- +xn--2sb866b.-5--; \u07DBჀ.-5--; [B1, B2, B3, V2, V3, V6]; xn--2sb866b.-5--; ; ; # ߛჀ.-5-- +\u07DBⴠ。-⁵--; \u07DBⴠ.-5--; [B1, B2, B3, V2, V3]; xn--2sb691q.-5--; ; ; # ߛⴠ.-5-- +≯?。𐹷𐹻≯; ≯?.𐹷𐹻≯; [B1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.𐹷𐹻≯ +>\u0338?。𐹷𐹻>\u0338; ≯?.𐹷𐹻≯; [B1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.𐹷𐹻≯ +≯?。𐹷𐹻≯; ≯?.𐹷𐹻≯; [B1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.𐹷𐹻≯ +>\u0338?。𐹷𐹻>\u0338; ≯?.𐹷𐹻≯; [B1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.𐹷𐹻≯ +xn--?-ogo25661n.xn--hdh8283gdoaqa; ≯?.𐹷𐹻≯; [B1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.𐹷𐹻≯ +≯?.xn--hdh8283gdoaqa; ≯?.𐹷𐹻≯; [B1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.𐹷𐹻≯ +>\u0338?.xn--hdh8283gdoaqa; ≯?.𐹷𐹻≯; [B1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.𐹷𐹻≯ +>\u0338?.XN--HDH8283GDOAQA; ≯?.𐹷𐹻≯; [B1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.𐹷𐹻≯ +≯?.XN--HDH8283GDOAQA; ≯?.𐹷𐹻≯; [B1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.𐹷𐹻≯ +≯?.Xn--Hdh8283gdoaqa; ≯?.𐹷𐹻≯; [B1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.𐹷𐹻≯ +>\u0338?.Xn--Hdh8283gdoaqa; ≯?.𐹷𐹻≯; [B1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.𐹷𐹻≯ +㍔\u08E6\u077C\u200D。\u0346\u0604; ルーブル\u08E6\u077C\u200D.\u0346\u0604; [B1, B5, B6, C2, V5, V6]; xn--dqb73ec22c9kp8cb1j.xn--kua81ls548d3608b; ; xn--dqb73el09fncab4h.xn--kua81ls548d3608b; [B1, B5, B6, V5, V6] # ルーブルࣦݼ.͆ +ルーブル\u08E6\u077C\u200D。\u0346\u0604; ルーブル\u08E6\u077C\u200D.\u0346\u0604; [B1, B5, B6, C2, V5, V6]; xn--dqb73ec22c9kp8cb1j.xn--kua81ls548d3608b; ; xn--dqb73el09fncab4h.xn--kua81ls548d3608b; [B1, B5, B6, V5, V6] # ルーブルࣦݼ.͆ +ルーフ\u3099ル\u08E6\u077C\u200D。\u0346\u0604; ルーブル\u08E6\u077C\u200D.\u0346\u0604; [B1, B5, B6, C2, V5, V6]; xn--dqb73ec22c9kp8cb1j.xn--kua81ls548d3608b; ; xn--dqb73el09fncab4h.xn--kua81ls548d3608b; [B1, B5, B6, V5, V6] # ルーブルࣦݼ.͆ +xn--dqb73el09fncab4h.xn--kua81ls548d3608b; ルーブル\u08E6\u077C.\u0346\u0604; [B1, B5, B6, V5, V6]; xn--dqb73el09fncab4h.xn--kua81ls548d3608b; ; ; # ルーブルࣦݼ.͆ +xn--dqb73ec22c9kp8cb1j.xn--kua81ls548d3608b; ルーブル\u08E6\u077C\u200D.\u0346\u0604; [B1, B5, B6, C2, V5, V6]; xn--dqb73ec22c9kp8cb1j.xn--kua81ls548d3608b; ; ; # ルーブルࣦݼ.͆ +\u200D.F; \u200D.f; [C2]; xn--1ug.f; ; .f; [A4_2] # .f +\u200D.f; ; [C2]; xn--1ug.f; ; .f; [A4_2] # .f +.f; ; [X4_2]; ; [A4_2]; ; # .f +xn--1ug.f; \u200D.f; [C2]; xn--1ug.f; ; ; # .f +f; ; ; ; ; ; # f +\u200D㨲。ß; \u200D㨲.ß; [C2]; xn--1ug914h.xn--zca; ; xn--9bm.ss; [] # 㨲.ß +\u200D㨲。ß; \u200D㨲.ß; [C2]; xn--1ug914h.xn--zca; ; xn--9bm.ss; [] # 㨲.ß +\u200D㨲。SS; \u200D㨲.ss; [C2]; xn--1ug914h.ss; ; xn--9bm.ss; [] # 㨲.ss +\u200D㨲。ss; \u200D㨲.ss; [C2]; xn--1ug914h.ss; ; xn--9bm.ss; [] # 㨲.ss +\u200D㨲。Ss; \u200D㨲.ss; [C2]; xn--1ug914h.ss; ; xn--9bm.ss; [] # 㨲.ss +xn--9bm.ss; 㨲.ss; ; xn--9bm.ss; ; ; # 㨲.ss +㨲.ss; ; ; xn--9bm.ss; ; ; # 㨲.ss +㨲.SS; 㨲.ss; ; xn--9bm.ss; ; ; # 㨲.ss +㨲.Ss; 㨲.ss; ; xn--9bm.ss; ; ; # 㨲.ss +xn--1ug914h.ss; \u200D㨲.ss; [C2]; xn--1ug914h.ss; ; ; # 㨲.ss +xn--1ug914h.xn--zca; \u200D㨲.ß; [C2]; xn--1ug914h.xn--zca; ; ; # 㨲.ß +\u200D㨲。SS; \u200D㨲.ss; [C2]; xn--1ug914h.ss; ; xn--9bm.ss; [] # 㨲.ss +\u200D㨲。ss; \u200D㨲.ss; [C2]; xn--1ug914h.ss; ; xn--9bm.ss; [] # 㨲.ss +\u200D㨲。Ss; \u200D㨲.ss; [C2]; xn--1ug914h.ss; ; xn--9bm.ss; [] # 㨲.ss +\u0605\u067E。\u08A8; \u0605\u067E.\u08A8; [B1, V6]; xn--nfb6v.xn--xyb; ; ; # پ.ࢨ +\u0605\u067E。\u08A8; \u0605\u067E.\u08A8; [B1, V6]; xn--nfb6v.xn--xyb; ; ; # پ.ࢨ +xn--nfb6v.xn--xyb; \u0605\u067E.\u08A8; [B1, V6]; xn--nfb6v.xn--xyb; ; ; # پ.ࢨ +⾑\u0753𞤁。𐹵\u0682; 襾\u0753𞤣.𐹵\u0682; [B1, B5, B6]; xn--6ob9577deqwl.xn--7ib5526k; ; ; # 襾ݓ𞤣.𐹵ڂ +襾\u0753𞤁。𐹵\u0682; 襾\u0753𞤣.𐹵\u0682; [B1, B5, B6]; xn--6ob9577deqwl.xn--7ib5526k; ; ; # 襾ݓ𞤣.𐹵ڂ +襾\u0753𞤣。𐹵\u0682; 襾\u0753𞤣.𐹵\u0682; [B1, B5, B6]; xn--6ob9577deqwl.xn--7ib5526k; ; ; # 襾ݓ𞤣.𐹵ڂ +xn--6ob9577deqwl.xn--7ib5526k; 襾\u0753𞤣.𐹵\u0682; [B1, B5, B6]; xn--6ob9577deqwl.xn--7ib5526k; ; ; # 襾ݓ𞤣.𐹵ڂ +⾑\u0753𞤣。𐹵\u0682; 襾\u0753𞤣.𐹵\u0682; [B1, B5, B6]; xn--6ob9577deqwl.xn--7ib5526k; ; ; # 襾ݓ𞤣.𐹵ڂ +ς-\u20EB。\u0754-ꡛ; ς-\u20EB.\u0754-ꡛ; [B2, B3, B6, V6]; xn----xmb015tuo34l.xn----53c4874j; ; xn----zmb705tuo34l.xn----53c4874j; # ς-⃫.ݔ-ꡛ +ς-\u20EB。\u0754-ꡛ; ς-\u20EB.\u0754-ꡛ; [B2, B3, B6, V6]; xn----xmb015tuo34l.xn----53c4874j; ; xn----zmb705tuo34l.xn----53c4874j; # ς-⃫.ݔ-ꡛ +Σ-\u20EB。\u0754-ꡛ; σ-\u20EB.\u0754-ꡛ; [B2, B3, B6, V6]; xn----zmb705tuo34l.xn----53c4874j; ; ; # σ-⃫.ݔ-ꡛ +σ-\u20EB。\u0754-ꡛ; σ-\u20EB.\u0754-ꡛ; [B2, B3, B6, V6]; xn----zmb705tuo34l.xn----53c4874j; ; ; # σ-⃫.ݔ-ꡛ +xn----zmb705tuo34l.xn----53c4874j; σ-\u20EB.\u0754-ꡛ; [B2, B3, B6, V6]; xn----zmb705tuo34l.xn----53c4874j; ; ; # σ-⃫.ݔ-ꡛ +xn----xmb015tuo34l.xn----53c4874j; ς-\u20EB.\u0754-ꡛ; [B2, B3, B6, V6]; xn----xmb015tuo34l.xn----53c4874j; ; ; # ς-⃫.ݔ-ꡛ +Σ-\u20EB。\u0754-ꡛ; σ-\u20EB.\u0754-ꡛ; [B2, B3, B6, V6]; xn----zmb705tuo34l.xn----53c4874j; ; ; # σ-⃫.ݔ-ꡛ +σ-\u20EB。\u0754-ꡛ; σ-\u20EB.\u0754-ꡛ; [B2, B3, B6, V6]; xn----zmb705tuo34l.xn----53c4874j; ; ; # σ-⃫.ݔ-ꡛ +\u200D.; \u200D.; [C2, V6]; xn--1ug.xn--h327f; ; .xn--h327f; [V6, A4_2] # . +\u200D.; ; [C2, V6]; xn--1ug.xn--h327f; ; .xn--h327f; [V6, A4_2] # . +.xn--h327f; .; [V6, X4_2]; .xn--h327f; [V6, A4_2]; ; # . +xn--1ug.xn--h327f; \u200D.; [C2, V6]; xn--1ug.xn--h327f; ; ; # . +。≠𝟲; .≠6; [V6]; xn--h79w4z99a.xn--6-tfo; ; ; # .≠6 +。=\u0338𝟲; .≠6; [V6]; xn--h79w4z99a.xn--6-tfo; ; ; # .≠6 +。≠6; .≠6; [V6]; xn--h79w4z99a.xn--6-tfo; ; ; # .≠6 +。=\u03386; .≠6; [V6]; xn--h79w4z99a.xn--6-tfo; ; ; # .≠6 +xn--h79w4z99a.xn--6-tfo; .≠6; [V6]; xn--h79w4z99a.xn--6-tfo; ; ; # .≠6 +󠅊ᡭ\u200D.; ᡭ\u200D.; [B6, C2, V6]; xn--98e810b.xn--om9c; ; xn--98e.xn--om9c; [V6] # ᡭ. +xn--98e.xn--om9c; ᡭ.; [V6]; xn--98e.xn--om9c; ; ; # ᡭ. +xn--98e810b.xn--om9c; ᡭ\u200D.; [B6, C2, V6]; xn--98e810b.xn--om9c; ; ; # ᡭ. +\u0C40\u0855𑄴.; \u0C40\u0855𑄴.; [B1, V5, V6]; xn--kwb91r5112avtg.xn--o580f; ; ; # ీࡕ𑄴. +\u0C40\u0855𑄴.; ; [B1, V5, V6]; xn--kwb91r5112avtg.xn--o580f; ; ; # ీࡕ𑄴. +xn--kwb91r5112avtg.xn--o580f; \u0C40\u0855𑄴.; [B1, V5, V6]; xn--kwb91r5112avtg.xn--o580f; ; ; # ీࡕ𑄴. +𞤮。𑇊\u200C≯\u1CE6; 𞤮.𑇊\u200C≯\u1CE6; [B1, C1, V5]; xn--me6h.xn--z6f16kn9b2642b; ; xn--me6h.xn--z6fz8ueq2v; [B1, V5] # 𞤮.𑇊≯᳦ +𞤮。𑇊\u200C>\u0338\u1CE6; 𞤮.𑇊\u200C≯\u1CE6; [B1, C1, V5]; xn--me6h.xn--z6f16kn9b2642b; ; xn--me6h.xn--z6fz8ueq2v; [B1, V5] # 𞤮.𑇊≯᳦ +𞤌。𑇊\u200C>\u0338\u1CE6; 𞤮.𑇊\u200C≯\u1CE6; [B1, C1, V5]; xn--me6h.xn--z6f16kn9b2642b; ; xn--me6h.xn--z6fz8ueq2v; [B1, V5] # 𞤮.𑇊≯᳦ +𞤌。𑇊\u200C≯\u1CE6; 𞤮.𑇊\u200C≯\u1CE6; [B1, C1, V5]; xn--me6h.xn--z6f16kn9b2642b; ; xn--me6h.xn--z6fz8ueq2v; [B1, V5] # 𞤮.𑇊≯᳦ +xn--me6h.xn--z6fz8ueq2v; 𞤮.𑇊≯\u1CE6; [B1, V5]; xn--me6h.xn--z6fz8ueq2v; ; ; # 𞤮.𑇊≯᳦ +xn--me6h.xn--z6f16kn9b2642b; 𞤮.𑇊\u200C≯\u1CE6; [B1, C1, V5]; xn--me6h.xn--z6f16kn9b2642b; ; ; # 𞤮.𑇊≯᳦ +󠄀𝟕.𞤌Ⴉ; 7.𞤮Ⴉ; [B1, B2, B3, V6]; 7.xn--hnd3403vv1vv; ; ; # 7.𞤮Ⴉ +󠄀7.𞤌Ⴉ; 7.𞤮Ⴉ; [B1, B2, B3, V6]; 7.xn--hnd3403vv1vv; ; ; # 7.𞤮Ⴉ +󠄀7.𞤮ⴉ; 7.𞤮ⴉ; [B1, B2, B3, V6]; 7.xn--0kjz523lv1vv; ; ; # 7.𞤮ⴉ +7.xn--0kjz523lv1vv; 7.𞤮ⴉ; [B1, B2, B3, V6]; 7.xn--0kjz523lv1vv; ; ; # 7.𞤮ⴉ +7.xn--hnd3403vv1vv; 7.𞤮Ⴉ; [B1, B2, B3, V6]; 7.xn--hnd3403vv1vv; ; ; # 7.𞤮Ⴉ +󠄀𝟕.𞤮ⴉ; 7.𞤮ⴉ; [B1, B2, B3, V6]; 7.xn--0kjz523lv1vv; ; ; # 7.𞤮ⴉ +󠄀7.𞤌ⴉ; 7.𞤮ⴉ; [B1, B2, B3, V6]; 7.xn--0kjz523lv1vv; ; ; # 7.𞤮ⴉ +󠄀𝟕.𞤌ⴉ; 7.𞤮ⴉ; [B1, B2, B3, V6]; 7.xn--0kjz523lv1vv; ; ; # 7.𞤮ⴉ +閃9𝩍。Ↄ\u0669\u08B1\u0B4D; 閃9𝩍.Ↄ\u0669\u08B1\u0B4D; [B5, B6, V6]; xn--9-3j6dk517f.xn--iib28ij3c0t9a; ; ; # 閃9𝩍.Ↄ٩ࢱ୍ +閃9𝩍。ↄ\u0669\u08B1\u0B4D; 閃9𝩍.ↄ\u0669\u08B1\u0B4D; [B5, B6]; xn--9-3j6dk517f.xn--iib28ij3c4t9a; ; ; # 閃9𝩍.ↄ٩ࢱ୍ +xn--9-3j6dk517f.xn--iib28ij3c4t9a; 閃9𝩍.ↄ\u0669\u08B1\u0B4D; [B5, B6]; xn--9-3j6dk517f.xn--iib28ij3c4t9a; ; ; # 閃9𝩍.ↄ٩ࢱ୍ +xn--9-3j6dk517f.xn--iib28ij3c0t9a; 閃9𝩍.Ↄ\u0669\u08B1\u0B4D; [B5, B6, V6]; xn--9-3j6dk517f.xn--iib28ij3c0t9a; ; ; # 閃9𝩍.Ↄ٩ࢱ୍ +\uAAF6ᢏ\u0E3A2.𐋢\u0745\u0F9F︒; \uAAF6ᢏ\u0E3A2.𐋢\u0745\u0F9F︒; [V5, V6]; xn--2-2zf840fk16m.xn--sob093bj62sz9d; ; ; # ꫶ᢏฺ2.𐋢݅ྟ︒ +\uAAF6ᢏ\u0E3A2.𐋢\u0745\u0F9F。; \uAAF6ᢏ\u0E3A2.𐋢\u0745\u0F9F.; [V5]; xn--2-2zf840fk16m.xn--sob093b2m7s.; ; ; # ꫶ᢏฺ2.𐋢݅ྟ. +xn--2-2zf840fk16m.xn--sob093b2m7s.; \uAAF6ᢏ\u0E3A2.𐋢\u0745\u0F9F.; [V5]; xn--2-2zf840fk16m.xn--sob093b2m7s.; ; ; # ꫶ᢏฺ2.𐋢݅ྟ. +xn--2-2zf840fk16m.xn--sob093bj62sz9d; \uAAF6ᢏ\u0E3A2.𐋢\u0745\u0F9F︒; [V5, V6]; xn--2-2zf840fk16m.xn--sob093bj62sz9d; ; ; # ꫶ᢏฺ2.𐋢݅ྟ︒ +。≠-⾛; .≠-走; [V6]; xn--gm57d.xn----tfo4949b3664m; ; ; # .≠-走 +。=\u0338-⾛; .≠-走; [V6]; xn--gm57d.xn----tfo4949b3664m; ; ; # .≠-走 +。≠-走; .≠-走; [V6]; xn--gm57d.xn----tfo4949b3664m; ; ; # .≠-走 +。=\u0338-走; .≠-走; [V6]; xn--gm57d.xn----tfo4949b3664m; ; ; # .≠-走 +xn--gm57d.xn----tfo4949b3664m; .≠-走; [V6]; xn--gm57d.xn----tfo4949b3664m; ; ; # .≠-走 +\u076E\u0604Ⴊ。-≠\u1160; \u076E\u0604Ⴊ.-≠\u1160; [B1, B2, B3, V3, V6]; xn--mfb73ex6r.xn----5bh589i; ; ; # ݮႪ.-≠ +\u076E\u0604Ⴊ。-=\u0338\u1160; \u076E\u0604Ⴊ.-≠\u1160; [B1, B2, B3, V3, V6]; xn--mfb73ex6r.xn----5bh589i; ; ; # ݮႪ.-≠ +\u076E\u0604ⴊ。-=\u0338\u1160; \u076E\u0604ⴊ.-≠\u1160; [B1, B2, B3, V3, V6]; xn--mfb73ek93f.xn----5bh589i; ; ; # ݮⴊ.-≠ +\u076E\u0604ⴊ。-≠\u1160; \u076E\u0604ⴊ.-≠\u1160; [B1, B2, B3, V3, V6]; xn--mfb73ek93f.xn----5bh589i; ; ; # ݮⴊ.-≠ +xn--mfb73ek93f.xn----5bh589i; \u076E\u0604ⴊ.-≠\u1160; [B1, B2, B3, V3, V6]; xn--mfb73ek93f.xn----5bh589i; ; ; # ݮⴊ.-≠ +xn--mfb73ex6r.xn----5bh589i; \u076E\u0604Ⴊ.-≠\u1160; [B1, B2, B3, V3, V6]; xn--mfb73ex6r.xn----5bh589i; ; ; # ݮႪ.-≠ +\uFB4F𐹧𝟒≯。\u200C; \u05D0\u05DC𐹧4≯.\u200C; [B1, B3, B4, C1]; xn--4-zhc0by36txt0w.xn--0ug; ; xn--4-zhc0by36txt0w.; [B3, B4] # אל𐹧4≯. +\uFB4F𐹧𝟒>\u0338。\u200C; \u05D0\u05DC𐹧4≯.\u200C; [B1, B3, B4, C1]; xn--4-zhc0by36txt0w.xn--0ug; ; xn--4-zhc0by36txt0w.; [B3, B4] # אל𐹧4≯. +\u05D0\u05DC𐹧4≯。\u200C; \u05D0\u05DC𐹧4≯.\u200C; [B1, B3, B4, C1]; xn--4-zhc0by36txt0w.xn--0ug; ; xn--4-zhc0by36txt0w.; [B3, B4] # אל𐹧4≯. +\u05D0\u05DC𐹧4>\u0338。\u200C; \u05D0\u05DC𐹧4≯.\u200C; [B1, B3, B4, C1]; xn--4-zhc0by36txt0w.xn--0ug; ; xn--4-zhc0by36txt0w.; [B3, B4] # אל𐹧4≯. +xn--4-zhc0by36txt0w.; \u05D0\u05DC𐹧4≯.; [B3, B4]; xn--4-zhc0by36txt0w.; ; ; # אל𐹧4≯. +xn--4-zhc0by36txt0w.xn--0ug; \u05D0\u05DC𐹧4≯.\u200C; [B1, B3, B4, C1]; xn--4-zhc0by36txt0w.xn--0ug; ; ; # אל𐹧4≯. +𝟎。甯; 0.甯; ; 0.xn--qny; ; ; # 0.甯 +0。甯; 0.甯; ; 0.xn--qny; ; ; # 0.甯 +0.xn--qny; 0.甯; ; 0.xn--qny; ; ; # 0.甯 +0.甯; ; ; 0.xn--qny; ; ; # 0.甯 +-⾆.\uAAF6; -舌.\uAAF6; [V3, V5]; xn----ef8c.xn--2v9a; ; ; # -舌.꫶ +-舌.\uAAF6; ; [V3, V5]; xn----ef8c.xn--2v9a; ; ; # -舌.꫶ +xn----ef8c.xn--2v9a; -舌.\uAAF6; [V3, V5]; xn----ef8c.xn--2v9a; ; ; # -舌.꫶ +-。ᢘ; -.ᢘ; [V3]; -.xn--ibf; ; ; # -.ᢘ +-。ᢘ; -.ᢘ; [V3]; -.xn--ibf; ; ; # -.ᢘ +-.xn--ibf; -.ᢘ; [V3]; -.xn--ibf; ; ; # -.ᢘ +🂴Ⴋ.≮; ; [V6]; xn--jnd1986v.xn--gdh; ; ; # 🂴Ⴋ.≮ +🂴Ⴋ.<\u0338; 🂴Ⴋ.≮; [V6]; xn--jnd1986v.xn--gdh; ; ; # 🂴Ⴋ.≮ +🂴ⴋ.<\u0338; 🂴ⴋ.≮; ; xn--2kj7565l.xn--gdh; ; ; # 🂴ⴋ.≮ +🂴ⴋ.≮; ; ; xn--2kj7565l.xn--gdh; ; ; # 🂴ⴋ.≮ +xn--2kj7565l.xn--gdh; 🂴ⴋ.≮; ; xn--2kj7565l.xn--gdh; ; ; # 🂴ⴋ.≮ +xn--jnd1986v.xn--gdh; 🂴Ⴋ.≮; [V6]; xn--jnd1986v.xn--gdh; ; ; # 🂴Ⴋ.≮ +璼𝨭。\u200C󠇟; 璼𝨭.\u200C; [C1]; xn--gky8837e.xn--0ug; ; xn--gky8837e.; [] # 璼𝨭. +璼𝨭。\u200C󠇟; 璼𝨭.\u200C; [C1]; xn--gky8837e.xn--0ug; ; xn--gky8837e.; [] # 璼𝨭. +xn--gky8837e.; 璼𝨭.; ; xn--gky8837e.; ; ; # 璼𝨭. +璼𝨭.; ; ; xn--gky8837e.; ; ; # 璼𝨭. +xn--gky8837e.xn--0ug; 璼𝨭.\u200C; [C1]; xn--gky8837e.xn--0ug; ; ; # 璼𝨭. +\u06698。-5🞥; \u06698.-5🞥; [B1, V3, V6]; xn--8-qqc97891f.xn---5-rp92a; ; ; # ٩8.-5🞥 +\u06698。-5🞥; \u06698.-5🞥; [B1, V3, V6]; xn--8-qqc97891f.xn---5-rp92a; ; ; # ٩8.-5🞥 +xn--8-qqc97891f.xn---5-rp92a; \u06698.-5🞥; [B1, V3, V6]; xn--8-qqc97891f.xn---5-rp92a; ; ; # ٩8.-5🞥 +\u200C.\u200C; ; [C1]; xn--0ug.xn--0ug; ; .; [A4_2] # . +xn--0ug.xn--0ug; \u200C.\u200C; [C1]; xn--0ug.xn--0ug; ; ; # . +\u200D튛.\u0716; ; [B1, C2]; xn--1ug4441e.xn--gnb; ; xn--157b.xn--gnb; [] # 튛.ܖ +\u200D튛.\u0716; \u200D튛.\u0716; [B1, C2]; xn--1ug4441e.xn--gnb; ; xn--157b.xn--gnb; [] # 튛.ܖ +xn--157b.xn--gnb; 튛.\u0716; ; xn--157b.xn--gnb; ; ; # 튛.ܖ +튛.\u0716; ; ; xn--157b.xn--gnb; ; ; # 튛.ܖ +튛.\u0716; 튛.\u0716; ; xn--157b.xn--gnb; ; ; # 튛.ܖ +xn--1ug4441e.xn--gnb; \u200D튛.\u0716; [B1, C2]; xn--1ug4441e.xn--gnb; ; ; # 튛.ܖ +ᡋ𐹰.\u0779ⴞ; ; [B2, B3, B5, B6, V6]; xn--b8e0417jocvf.xn--9pb883q; ; ; # ᡋ𐹰.ݹⴞ +ᡋ𐹰.\u0779Ⴞ; ; [B2, B3, B5, B6, V6]; xn--b8e0417jocvf.xn--9pb068b; ; ; # ᡋ𐹰.ݹႾ +xn--b8e0417jocvf.xn--9pb068b; ᡋ𐹰.\u0779Ⴞ; [B2, B3, B5, B6, V6]; xn--b8e0417jocvf.xn--9pb068b; ; ; # ᡋ𐹰.ݹႾ +xn--b8e0417jocvf.xn--9pb883q; ᡋ𐹰.\u0779ⴞ; [B2, B3, B5, B6, V6]; xn--b8e0417jocvf.xn--9pb883q; ; ; # ᡋ𐹰.ݹⴞ +\u0662𝅻𝟧.𐹮𐹬Ⴇ; \u0662𝅻5.𐹮𐹬Ⴇ; [B1, B4, V6]; xn--5-cqc8833rhv7f.xn--fnd3401kfa; ; ; # ٢𝅻5.𐹮𐹬Ⴇ +\u0662𝅻5.𐹮𐹬Ⴇ; ; [B1, B4, V6]; xn--5-cqc8833rhv7f.xn--fnd3401kfa; ; ; # ٢𝅻5.𐹮𐹬Ⴇ +\u0662𝅻5.𐹮𐹬ⴇ; ; [B1, B4, V6]; xn--5-cqc8833rhv7f.xn--ykjz523efa; ; ; # ٢𝅻5.𐹮𐹬ⴇ +xn--5-cqc8833rhv7f.xn--ykjz523efa; \u0662𝅻5.𐹮𐹬ⴇ; [B1, B4, V6]; xn--5-cqc8833rhv7f.xn--ykjz523efa; ; ; # ٢𝅻5.𐹮𐹬ⴇ +xn--5-cqc8833rhv7f.xn--fnd3401kfa; \u0662𝅻5.𐹮𐹬Ⴇ; [B1, B4, V6]; xn--5-cqc8833rhv7f.xn--fnd3401kfa; ; ; # ٢𝅻5.𐹮𐹬Ⴇ +\u0662𝅻𝟧.𐹮𐹬ⴇ; \u0662𝅻5.𐹮𐹬ⴇ; [B1, B4, V6]; xn--5-cqc8833rhv7f.xn--ykjz523efa; ; ; # ٢𝅻5.𐹮𐹬ⴇ +Ⴗ.\u05C2𑄴\uA9B7; Ⴗ.𑄴\u05C2\uA9B7; [V5, V6]; xn--vnd.xn--qdb0605f14ycrms3c; ; ; # Ⴗ.𑄴ׂꦷ +Ⴗ.𑄴\u05C2\uA9B7; Ⴗ.𑄴\u05C2\uA9B7; [V5, V6]; xn--vnd.xn--qdb0605f14ycrms3c; ; ; # Ⴗ.𑄴ׂꦷ +Ⴗ.𑄴\u05C2\uA9B7; ; [V5, V6]; xn--vnd.xn--qdb0605f14ycrms3c; ; ; # Ⴗ.𑄴ׂꦷ +ⴗ.𑄴\u05C2\uA9B7; ; [V5, V6]; xn--flj.xn--qdb0605f14ycrms3c; ; ; # ⴗ.𑄴ׂꦷ +xn--flj.xn--qdb0605f14ycrms3c; ⴗ.𑄴\u05C2\uA9B7; [V5, V6]; xn--flj.xn--qdb0605f14ycrms3c; ; ; # ⴗ.𑄴ׂꦷ +xn--vnd.xn--qdb0605f14ycrms3c; Ⴗ.𑄴\u05C2\uA9B7; [V5, V6]; xn--vnd.xn--qdb0605f14ycrms3c; ; ; # Ⴗ.𑄴ׂꦷ +ⴗ.𑄴\u05C2\uA9B7; ⴗ.𑄴\u05C2\uA9B7; [V5, V6]; xn--flj.xn--qdb0605f14ycrms3c; ; ; # ⴗ.𑄴ׂꦷ +ⴗ.\u05C2𑄴\uA9B7; ⴗ.𑄴\u05C2\uA9B7; [V5, V6]; xn--flj.xn--qdb0605f14ycrms3c; ; ; # ⴗ.𑄴ׂꦷ +𝟾.\u066C; 8.\u066C; [B1, B5, B6, V6]; xn--8-kh23b.xn--lib78461i; ; ; # 8.٬ +8.\u066C; ; [B1, B5, B6, V6]; xn--8-kh23b.xn--lib78461i; ; ; # 8.٬ +xn--8-kh23b.xn--lib78461i; 8.\u066C; [B1, B5, B6, V6]; xn--8-kh23b.xn--lib78461i; ; ; # 8.٬ +⒈酫︒。\u08D6; ⒈酫︒.\u08D6; [V5, V6]; xn--tsh4490bfe8c.xn--8zb; ; ; # ⒈酫︒.ࣖ +1.酫。。\u08D6; 1.酫..\u08D6; [V5, X4_2]; 1.xn--8j4a..xn--8zb; [V5, A4_2]; ; # 1.酫..ࣖ +1.xn--8j4a..xn--8zb; 1.酫..\u08D6; [V5, X4_2]; 1.xn--8j4a..xn--8zb; [V5, A4_2]; ; # 1.酫..ࣖ +xn--tsh4490bfe8c.xn--8zb; ⒈酫︒.\u08D6; [V5, V6]; xn--tsh4490bfe8c.xn--8zb; ; ; # ⒈酫︒.ࣖ +\u2DE3\u200C≮\u1A6B.\u200C\u0E3A; ; [C1, V5]; xn--uof63xk4bf3s.xn--o4c732g; ; xn--uof548an0j.xn--o4c; [V5] # ⷣ≮ᩫ.ฺ +\u2DE3\u200C<\u0338\u1A6B.\u200C\u0E3A; \u2DE3\u200C≮\u1A6B.\u200C\u0E3A; [C1, V5]; xn--uof63xk4bf3s.xn--o4c732g; ; xn--uof548an0j.xn--o4c; [V5] # ⷣ≮ᩫ.ฺ +xn--uof548an0j.xn--o4c; \u2DE3≮\u1A6B.\u0E3A; [V5]; xn--uof548an0j.xn--o4c; ; ; # ⷣ≮ᩫ.ฺ +xn--uof63xk4bf3s.xn--o4c732g; \u2DE3\u200C≮\u1A6B.\u200C\u0E3A; [C1, V5]; xn--uof63xk4bf3s.xn--o4c732g; ; ; # ⷣ≮ᩫ.ฺ +。ႷႽ¹\u200D; .ႷႽ1\u200D; [B6, C2, V6]; xn--co6h.xn--1-h1gs597m; ; xn--co6h.xn--1-h1gs; [V6] # .ႷႽ1 +。ႷႽ1\u200D; .ႷႽ1\u200D; [B6, C2, V6]; xn--co6h.xn--1-h1gs597m; ; xn--co6h.xn--1-h1gs; [V6] # .ႷႽ1 +。ⴗⴝ1\u200D; .ⴗⴝ1\u200D; [B6, C2, V6]; xn--co6h.xn--1-ugn710dya; ; xn--co6h.xn--1-kwssa; [V6] # .ⴗⴝ1 +。Ⴗⴝ1\u200D; .Ⴗⴝ1\u200D; [B6, C2, V6]; xn--co6h.xn--1-h1g398iewm; ; xn--co6h.xn--1-h1g429s; [V6] # .Ⴗⴝ1 +xn--co6h.xn--1-h1g429s; .Ⴗⴝ1; [V6]; xn--co6h.xn--1-h1g429s; ; ; # .Ⴗⴝ1 +xn--co6h.xn--1-h1g398iewm; .Ⴗⴝ1\u200D; [B6, C2, V6]; xn--co6h.xn--1-h1g398iewm; ; ; # .Ⴗⴝ1 +xn--co6h.xn--1-kwssa; .ⴗⴝ1; [V6]; xn--co6h.xn--1-kwssa; ; ; # .ⴗⴝ1 +xn--co6h.xn--1-ugn710dya; .ⴗⴝ1\u200D; [B6, C2, V6]; xn--co6h.xn--1-ugn710dya; ; ; # .ⴗⴝ1 +xn--co6h.xn--1-h1gs; .ႷႽ1; [V6]; xn--co6h.xn--1-h1gs; ; ; # .ႷႽ1 +xn--co6h.xn--1-h1gs597m; .ႷႽ1\u200D; [B6, C2, V6]; xn--co6h.xn--1-h1gs597m; ; ; # .ႷႽ1 +。ⴗⴝ¹\u200D; .ⴗⴝ1\u200D; [B6, C2, V6]; xn--co6h.xn--1-ugn710dya; ; xn--co6h.xn--1-kwssa; [V6] # .ⴗⴝ1 +。Ⴗⴝ¹\u200D; .Ⴗⴝ1\u200D; [B6, C2, V6]; xn--co6h.xn--1-h1g398iewm; ; xn--co6h.xn--1-h1g429s; [V6] # .Ⴗⴝ1 +𑄴𑄳2.-; ; [B1, B3, V3, V5, V6]; xn--2-h87ic.xn----s39r33498d; ; ; # 𑄴𑄳2.- +xn--2-h87ic.xn----s39r33498d; 𑄴𑄳2.-; [B1, B3, V3, V5, V6]; xn--2-h87ic.xn----s39r33498d; ; ; # 𑄴𑄳2.- +\u0665。𑄳𞤃\u0710; \u0665.𑄳𞤥\u0710; [B1, B5, B6, V6]; xn--eib57614py3ea.xn--9mb5737kqnpfzkwr; ; ; # ٥.𑄳𞤥ܐ +\u0665。𑄳𞤃\u0710; \u0665.𑄳𞤥\u0710; [B1, B5, B6, V6]; xn--eib57614py3ea.xn--9mb5737kqnpfzkwr; ; ; # ٥.𑄳𞤥ܐ +\u0665。𑄳𞤥\u0710; \u0665.𑄳𞤥\u0710; [B1, B5, B6, V6]; xn--eib57614py3ea.xn--9mb5737kqnpfzkwr; ; ; # ٥.𑄳𞤥ܐ +xn--eib57614py3ea.xn--9mb5737kqnpfzkwr; \u0665.𑄳𞤥\u0710; [B1, B5, B6, V6]; xn--eib57614py3ea.xn--9mb5737kqnpfzkwr; ; ; # ٥.𑄳𞤥ܐ +\u0665。𑄳𞤥\u0710; \u0665.𑄳𞤥\u0710; [B1, B5, B6, V6]; xn--eib57614py3ea.xn--9mb5737kqnpfzkwr; ; ; # ٥.𑄳𞤥ܐ +\u0720𐹢\u17BB。ςᢈ🝭\u200C; \u0720𐹢\u17BB.ςᢈ🝭\u200C; [B2, B6, C1, V6]; xn--qnb616fis0qzt36f.xn--3xa057h6ofgl44c; ; xn--qnb616fis0qzt36f.xn--4xa847hli46a; [B2, B6, V6] # ܠ𐹢ុ.ςᢈ🝭 +\u0720𐹢\u17BB。ςᢈ🝭\u200C; \u0720𐹢\u17BB.ςᢈ🝭\u200C; [B2, B6, C1, V6]; xn--qnb616fis0qzt36f.xn--3xa057h6ofgl44c; ; xn--qnb616fis0qzt36f.xn--4xa847hli46a; [B2, B6, V6] # ܠ𐹢ុ.ςᢈ🝭 +\u0720𐹢\u17BB。Σᢈ🝭\u200C; \u0720𐹢\u17BB.σᢈ🝭\u200C; [B2, B6, C1, V6]; xn--qnb616fis0qzt36f.xn--4xa847h6ofgl44c; ; xn--qnb616fis0qzt36f.xn--4xa847hli46a; [B2, B6, V6] # ܠ𐹢ុ.σᢈ🝭 +\u0720𐹢\u17BB。σᢈ🝭\u200C; \u0720𐹢\u17BB.σᢈ🝭\u200C; [B2, B6, C1, V6]; xn--qnb616fis0qzt36f.xn--4xa847h6ofgl44c; ; xn--qnb616fis0qzt36f.xn--4xa847hli46a; [B2, B6, V6] # ܠ𐹢ុ.σᢈ🝭 +xn--qnb616fis0qzt36f.xn--4xa847hli46a; \u0720𐹢\u17BB.σᢈ🝭; [B2, B6, V6]; xn--qnb616fis0qzt36f.xn--4xa847hli46a; ; ; # ܠ𐹢ុ.σᢈ🝭 +xn--qnb616fis0qzt36f.xn--4xa847h6ofgl44c; \u0720𐹢\u17BB.σᢈ🝭\u200C; [B2, B6, C1, V6]; xn--qnb616fis0qzt36f.xn--4xa847h6ofgl44c; ; ; # ܠ𐹢ុ.σᢈ🝭 +xn--qnb616fis0qzt36f.xn--3xa057h6ofgl44c; \u0720𐹢\u17BB.ςᢈ🝭\u200C; [B2, B6, C1, V6]; xn--qnb616fis0qzt36f.xn--3xa057h6ofgl44c; ; ; # ܠ𐹢ុ.ςᢈ🝭 +\u0720𐹢\u17BB。Σᢈ🝭\u200C; \u0720𐹢\u17BB.σᢈ🝭\u200C; [B2, B6, C1, V6]; xn--qnb616fis0qzt36f.xn--4xa847h6ofgl44c; ; xn--qnb616fis0qzt36f.xn--4xa847hli46a; [B2, B6, V6] # ܠ𐹢ុ.σᢈ🝭 +\u0720𐹢\u17BB。σᢈ🝭\u200C; \u0720𐹢\u17BB.σᢈ🝭\u200C; [B2, B6, C1, V6]; xn--qnb616fis0qzt36f.xn--4xa847h6ofgl44c; ; xn--qnb616fis0qzt36f.xn--4xa847hli46a; [B2, B6, V6] # ܠ𐹢ុ.σᢈ🝭 +\u200D--≮。𐹧; \u200D--≮.𐹧; [B1, C2]; xn-----l1tz1k.xn--fo0d; ; xn-----ujv.xn--fo0d; [B1, V3] # --≮.𐹧 +\u200D--<\u0338。𐹧; \u200D--≮.𐹧; [B1, C2]; xn-----l1tz1k.xn--fo0d; ; xn-----ujv.xn--fo0d; [B1, V3] # --≮.𐹧 +xn-----ujv.xn--fo0d; --≮.𐹧; [B1, V3]; xn-----ujv.xn--fo0d; ; ; # --≮.𐹧 +xn-----l1tz1k.xn--fo0d; \u200D--≮.𐹧; [B1, C2]; xn-----l1tz1k.xn--fo0d; ; ; # --≮.𐹧 +\uA806。\u0FB0⒕; \uA806.\u0FB0⒕; [V5, V6]; xn--l98a.xn--dgd218hhp28d; ; ; # ꠆.ྰ⒕ +\uA806。\u0FB014.; \uA806.\u0FB014.; [V5, V6]; xn--l98a.xn--14-jsj57880f.; ; ; # ꠆.ྰ14. +xn--l98a.xn--14-jsj57880f.; \uA806.\u0FB014.; [V5, V6]; xn--l98a.xn--14-jsj57880f.; ; ; # ꠆.ྰ14. +xn--l98a.xn--dgd218hhp28d; \uA806.\u0FB0⒕; [V5, V6]; xn--l98a.xn--dgd218hhp28d; ; ; # ꠆.ྰ⒕ +\u06BC.𑆺\u0669; \u06BC.𑆺\u0669; [B1, B5, B6, V5, V6]; xn--vkb92243l.xn--iib9797k; ; ; # ڼ.𑆺٩ +\u06BC.𑆺\u0669; ; [B1, B5, B6, V5, V6]; xn--vkb92243l.xn--iib9797k; ; ; # ڼ.𑆺٩ +xn--vkb92243l.xn--iib9797k; \u06BC.𑆺\u0669; [B1, B5, B6, V5, V6]; xn--vkb92243l.xn--iib9797k; ; ; # ڼ.𑆺٩ +\u06D0-。𞤴; \u06D0-.𞤴; [B1, V3, V6]; xn----mwc72685y.xn--se6h; ; ; # ې-.𞤴 +\u06D0-。𞤒; \u06D0-.𞤴; [B1, V3, V6]; xn----mwc72685y.xn--se6h; ; ; # ې-.𞤴 +xn----mwc72685y.xn--se6h; \u06D0-.𞤴; [B1, V3, V6]; xn----mwc72685y.xn--se6h; ; ; # ې-.𞤴 +𝟠4󠇗𝈻.\u200D𐋵⛧\u200D; 84𝈻.\u200D𐋵⛧\u200D; [C2]; xn--84-s850a.xn--1uga573cfq1w; ; xn--84-s850a.xn--59h6326e; [] # 84𝈻.𐋵⛧ +84󠇗𝈻.\u200D𐋵⛧\u200D; 84𝈻.\u200D𐋵⛧\u200D; [C2]; xn--84-s850a.xn--1uga573cfq1w; ; xn--84-s850a.xn--59h6326e; [] # 84𝈻.𐋵⛧ +xn--84-s850a.xn--59h6326e; 84𝈻.𐋵⛧; ; xn--84-s850a.xn--59h6326e; ; ; # 84𝈻.𐋵⛧ +84𝈻.𐋵⛧; ; ; xn--84-s850a.xn--59h6326e; ; ; # 84𝈻.𐋵⛧ +xn--84-s850a.xn--1uga573cfq1w; 84𝈻.\u200D𐋵⛧\u200D; [C2]; xn--84-s850a.xn--1uga573cfq1w; ; ; # 84𝈻.𐋵⛧ +-\u0601。ᡪ; -\u0601.ᡪ; [B1, V3, V6]; xn----tkc.xn--68e; ; ; # -.ᡪ +-\u0601。ᡪ; -\u0601.ᡪ; [B1, V3, V6]; xn----tkc.xn--68e; ; ; # -.ᡪ +xn----tkc.xn--68e; -\u0601.ᡪ; [B1, V3, V6]; xn----tkc.xn--68e; ; ; # -.ᡪ +≮𝟕.謖ß≯; ≮7.謖ß≯; ; xn--7-mgo.xn--zca892oly5e; ; xn--7-mgo.xn--ss-xjvv174c; # ≮7.謖ß≯ +<\u0338𝟕.謖ß>\u0338; ≮7.謖ß≯; ; xn--7-mgo.xn--zca892oly5e; ; xn--7-mgo.xn--ss-xjvv174c; # ≮7.謖ß≯ +≮7.謖ß≯; ; ; xn--7-mgo.xn--zca892oly5e; ; xn--7-mgo.xn--ss-xjvv174c; # ≮7.謖ß≯ +<\u03387.謖ß>\u0338; ≮7.謖ß≯; ; xn--7-mgo.xn--zca892oly5e; ; xn--7-mgo.xn--ss-xjvv174c; # ≮7.謖ß≯ +<\u03387.謖SS>\u0338; ≮7.謖ss≯; ; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯ +≮7.謖SS≯; ≮7.謖ss≯; ; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯ +≮7.謖ss≯; ; ; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯ +<\u03387.謖ss>\u0338; ≮7.謖ss≯; ; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯ +<\u03387.謖Ss>\u0338; ≮7.謖ss≯; ; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯ +≮7.謖Ss≯; ≮7.謖ss≯; ; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯ +xn--7-mgo.xn--ss-xjvv174c; ≮7.謖ss≯; ; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯ +xn--7-mgo.xn--zca892oly5e; ≮7.謖ß≯; ; xn--7-mgo.xn--zca892oly5e; ; ; # ≮7.謖ß≯ +<\u0338𝟕.謖SS>\u0338; ≮7.謖ss≯; ; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯ +≮𝟕.謖SS≯; ≮7.謖ss≯; ; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯ +≮𝟕.謖ss≯; ≮7.謖ss≯; ; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯ +<\u0338𝟕.謖ss>\u0338; ≮7.謖ss≯; ; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯ +<\u0338𝟕.謖Ss>\u0338; ≮7.謖ss≯; ; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯ +≮𝟕.謖Ss≯; ≮7.謖ss≯; ; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯ +朶Ⴉ.𝨽\u0825📻-; ; [B1, B5, B6, V3, V5, V6]; xn--hnd7245bd56p.xn----3gd37096apmwa; ; ; # 朶Ⴉ.𝨽ࠥ📻- +朶ⴉ.𝨽\u0825📻-; ; [B1, B5, B6, V3, V5, V6]; xn--0kjz47pd57t.xn----3gd37096apmwa; ; ; # 朶ⴉ.𝨽ࠥ📻- +xn--0kjz47pd57t.xn----3gd37096apmwa; 朶ⴉ.𝨽\u0825📻-; [B1, B5, B6, V3, V5, V6]; xn--0kjz47pd57t.xn----3gd37096apmwa; ; ; # 朶ⴉ.𝨽ࠥ📻- +xn--hnd7245bd56p.xn----3gd37096apmwa; 朶Ⴉ.𝨽\u0825📻-; [B1, B5, B6, V3, V5, V6]; xn--hnd7245bd56p.xn----3gd37096apmwa; ; ; # 朶Ⴉ.𝨽ࠥ📻- +𐤎。\u200C≮\u200D; 𐤎.\u200C≮\u200D; [B6, C1, C2, V6]; xn--bk9c.xn--0ugc04p2u638c; ; xn--bk9c.xn--gdhx6802k; [B6, V6] # 𐤎.≮ +𐤎。\u200C<\u0338\u200D; 𐤎.\u200C≮\u200D; [B6, C1, C2, V6]; xn--bk9c.xn--0ugc04p2u638c; ; xn--bk9c.xn--gdhx6802k; [B6, V6] # 𐤎.≮ +xn--bk9c.xn--gdhx6802k; 𐤎.≮; [B6, V6]; xn--bk9c.xn--gdhx6802k; ; ; # 𐤎.≮ +xn--bk9c.xn--0ugc04p2u638c; 𐤎.\u200C≮\u200D; [B6, C1, C2, V6]; xn--bk9c.xn--0ugc04p2u638c; ; ; # 𐤎.≮ +⒈。\u200C𝟤; ⒈.\u200C2; [C1, V6]; xn--tsh94183d.xn--2-rgn; ; xn--tsh94183d.2; [V6] # ⒈.2 +1.。\u200C2; 1..\u200C2; [C1, V6, X4_2]; xn--1-ex54e..xn--2-rgn; [C1, V6, A4_2]; xn--1-ex54e..2; [V6, A4_2] # 1..2 +xn--1-ex54e..2; 1..2; [V6, X4_2]; xn--1-ex54e..2; [V6, A4_2]; ; # 1..2 +xn--1-ex54e..xn--2-rgn; 1..\u200C2; [C1, V6, X4_2]; xn--1-ex54e..xn--2-rgn; [C1, V6, A4_2]; ; # 1..2 +xn--tsh94183d.2; ⒈.2; [V6]; xn--tsh94183d.2; ; ; # ⒈.2 +xn--tsh94183d.xn--2-rgn; ⒈.\u200C2; [C1, V6]; xn--tsh94183d.xn--2-rgn; ; ; # ⒈.2 +𐹤\u200D.𐹳𐹶; 𐹤\u200D.𐹳𐹶; [B1, C2, V6]; xn--1ugy994g7k93g.xn--ro0dga22807v; ; xn--co0d98977c.xn--ro0dga22807v; [B1, V6] # 𐹤.𐹳𐹶 +𐹤\u200D.𐹳𐹶; ; [B1, C2, V6]; xn--1ugy994g7k93g.xn--ro0dga22807v; ; xn--co0d98977c.xn--ro0dga22807v; [B1, V6] # 𐹤.𐹳𐹶 +xn--co0d98977c.xn--ro0dga22807v; 𐹤.𐹳𐹶; [B1, V6]; xn--co0d98977c.xn--ro0dga22807v; ; ; # 𐹤.𐹳𐹶 +xn--1ugy994g7k93g.xn--ro0dga22807v; 𐹤\u200D.𐹳𐹶; [B1, C2, V6]; xn--1ugy994g7k93g.xn--ro0dga22807v; ; ; # 𐹤.𐹳𐹶 +𞤴𐹻𑓂𐭝.\u094D\uFE07; 𞤴𐹻𑓂𐭝.\u094D; [B1, V5, V6]; xn--609c96c09grp2w.xn--n3b28708s; ; ; # 𞤴𐹻𑓂𐭝.् +𞤴𐹻𑓂𐭝.\u094D\uFE07; 𞤴𐹻𑓂𐭝.\u094D; [B1, V5, V6]; xn--609c96c09grp2w.xn--n3b28708s; ; ; # 𞤴𐹻𑓂𐭝.् +𞤒𐹻𑓂𐭝.\u094D\uFE07; 𞤴𐹻𑓂𐭝.\u094D; [B1, V5, V6]; xn--609c96c09grp2w.xn--n3b28708s; ; ; # 𞤴𐹻𑓂𐭝.् +xn--609c96c09grp2w.xn--n3b28708s; 𞤴𐹻𑓂𐭝.\u094D; [B1, V5, V6]; xn--609c96c09grp2w.xn--n3b28708s; ; ; # 𞤴𐹻𑓂𐭝.् +𞤒𐹻𑓂𐭝.\u094D\uFE07; 𞤴𐹻𑓂𐭝.\u094D; [B1, V5, V6]; xn--609c96c09grp2w.xn--n3b28708s; ; ; # 𞤴𐹻𑓂𐭝.् +\u0668。𐹠𐹽; \u0668.𐹠𐹽; [B1, V6]; xn--hib.xn--7n0d2bu9196b; ; ; # ٨.𐹠𐹽 +\u0668。𐹠𐹽; \u0668.𐹠𐹽; [B1, V6]; xn--hib.xn--7n0d2bu9196b; ; ; # ٨.𐹠𐹽 +xn--hib.xn--7n0d2bu9196b; \u0668.𐹠𐹽; [B1, V6]; xn--hib.xn--7n0d2bu9196b; ; ; # ٨.𐹠𐹽 +\u1160.8\u069C; ; [B1, V6]; xn--psd85033d.xn--8-otc61545t; ; ; # .8ڜ +xn--psd85033d.xn--8-otc61545t; \u1160.8\u069C; [B1, V6]; xn--psd85033d.xn--8-otc61545t; ; ; # .8ڜ +\u200D\u200C󠆪。ß𑓃; \u200D\u200C.ß𑓃; [C1, C2]; xn--0ugb.xn--zca0732l; ; .xn--ss-bh7o; [A4_2] # .ß𑓃 +\u200D\u200C󠆪。ß𑓃; \u200D\u200C.ß𑓃; [C1, C2]; xn--0ugb.xn--zca0732l; ; .xn--ss-bh7o; [A4_2] # .ß𑓃 +\u200D\u200C󠆪。SS𑓃; \u200D\u200C.ss𑓃; [C1, C2]; xn--0ugb.xn--ss-bh7o; ; .xn--ss-bh7o; [A4_2] # .ss𑓃 +\u200D\u200C󠆪。ss𑓃; \u200D\u200C.ss𑓃; [C1, C2]; xn--0ugb.xn--ss-bh7o; ; .xn--ss-bh7o; [A4_2] # .ss𑓃 +\u200D\u200C󠆪。Ss𑓃; \u200D\u200C.ss𑓃; [C1, C2]; xn--0ugb.xn--ss-bh7o; ; .xn--ss-bh7o; [A4_2] # .ss𑓃 +.xn--ss-bh7o; .ss𑓃; [X4_2]; .xn--ss-bh7o; [A4_2]; ; # .ss𑓃 +xn--0ugb.xn--ss-bh7o; \u200D\u200C.ss𑓃; [C1, C2]; xn--0ugb.xn--ss-bh7o; ; ; # .ss𑓃 +xn--0ugb.xn--zca0732l; \u200D\u200C.ß𑓃; [C1, C2]; xn--0ugb.xn--zca0732l; ; ; # .ß𑓃 +\u200D\u200C󠆪。SS𑓃; \u200D\u200C.ss𑓃; [C1, C2]; xn--0ugb.xn--ss-bh7o; ; .xn--ss-bh7o; [A4_2] # .ss𑓃 +\u200D\u200C󠆪。ss𑓃; \u200D\u200C.ss𑓃; [C1, C2]; xn--0ugb.xn--ss-bh7o; ; .xn--ss-bh7o; [A4_2] # .ss𑓃 +\u200D\u200C󠆪。Ss𑓃; \u200D\u200C.ss𑓃; [C1, C2]; xn--0ugb.xn--ss-bh7o; ; .xn--ss-bh7o; [A4_2] # .ss𑓃 +xn--ss-bh7o; ss𑓃; ; xn--ss-bh7o; ; ; # ss𑓃 +ss𑓃; ; ; xn--ss-bh7o; ; ; # ss𑓃 +SS𑓃; ss𑓃; ; xn--ss-bh7o; ; ; # ss𑓃 +Ss𑓃; ss𑓃; ; xn--ss-bh7o; ; ; # ss𑓃 +︒\u200Cヶ䒩.ꡪ; ; [C1, V6]; xn--0ug287dj0or48o.xn--gd9a; ; xn--qekw60dns9k.xn--gd9a; [V6] # ︒ヶ䒩.ꡪ +。\u200Cヶ䒩.ꡪ; .\u200Cヶ䒩.ꡪ; [C1, X4_2]; .xn--0ug287dj0o.xn--gd9a; [C1, A4_2]; .xn--qekw60d.xn--gd9a; [A4_2] # .ヶ䒩.ꡪ +.xn--qekw60d.xn--gd9a; .ヶ䒩.ꡪ; [X4_2]; .xn--qekw60d.xn--gd9a; [A4_2]; ; # .ヶ䒩.ꡪ +.xn--0ug287dj0o.xn--gd9a; .\u200Cヶ䒩.ꡪ; [C1, X4_2]; .xn--0ug287dj0o.xn--gd9a; [C1, A4_2]; ; # .ヶ䒩.ꡪ +xn--qekw60dns9k.xn--gd9a; ︒ヶ䒩.ꡪ; [V6]; xn--qekw60dns9k.xn--gd9a; ; ; # ︒ヶ䒩.ꡪ +xn--0ug287dj0or48o.xn--gd9a; ︒\u200Cヶ䒩.ꡪ; [C1, V6]; xn--0ug287dj0or48o.xn--gd9a; ; ; # ︒ヶ䒩.ꡪ +xn--qekw60d.xn--gd9a; ヶ䒩.ꡪ; ; xn--qekw60d.xn--gd9a; ; ; # ヶ䒩.ꡪ +ヶ䒩.ꡪ; ; ; xn--qekw60d.xn--gd9a; ; ; # ヶ䒩.ꡪ +\u200C⒈𤮍.\u1A60; ; [C1, V6]; xn--0ug88o7471d.xn--jof45148n; ; xn--tshw462r.xn--jof45148n; [V6] # ⒈𤮍.᩠ +\u200C1.𤮍.\u1A60; ; [C1, V6]; xn--1-rgn.xn--4x6j.xn--jof45148n; ; 1.xn--4x6j.xn--jof45148n; [V6] # 1.𤮍.᩠ +1.xn--4x6j.xn--jof45148n; 1.𤮍.\u1A60; [V6]; 1.xn--4x6j.xn--jof45148n; ; ; # 1.𤮍.᩠ +xn--1-rgn.xn--4x6j.xn--jof45148n; \u200C1.𤮍.\u1A60; [C1, V6]; xn--1-rgn.xn--4x6j.xn--jof45148n; ; ; # 1.𤮍.᩠ +xn--tshw462r.xn--jof45148n; ⒈𤮍.\u1A60; [V6]; xn--tshw462r.xn--jof45148n; ; ; # ⒈𤮍.᩠ +xn--0ug88o7471d.xn--jof45148n; \u200C⒈𤮍.\u1A60; [C1, V6]; xn--0ug88o7471d.xn--jof45148n; ; ; # ⒈𤮍.᩠ +⒈\u200C𐫓。\u1A60\u200D; ⒈\u200C𐫓.\u1A60\u200D; [B1, C1, C2, V5, V6]; xn--0ug78ol75wzcx4i.xn--jof95xex98m; ; xn--tsh4435fk263g.xn--jofz5294e; [B1, V5, V6] # ⒈𐫓.᩠ +1.\u200C𐫓。\u1A60\u200D; 1.\u200C𐫓.\u1A60\u200D; [B1, C1, C2, V5, V6]; 1.xn--0ug8853gk263g.xn--jof95xex98m; ; 1.xn--8w9c40377c.xn--jofz5294e; [B1, B3, V5, V6] # 1.𐫓.᩠ +1.xn--8w9c40377c.xn--jofz5294e; 1.𐫓.\u1A60; [B1, B3, V5, V6]; 1.xn--8w9c40377c.xn--jofz5294e; ; ; # 1.𐫓.᩠ +1.xn--0ug8853gk263g.xn--jof95xex98m; 1.\u200C𐫓.\u1A60\u200D; [B1, C1, C2, V5, V6]; 1.xn--0ug8853gk263g.xn--jof95xex98m; ; ; # 1.𐫓.᩠ +xn--tsh4435fk263g.xn--jofz5294e; ⒈𐫓.\u1A60; [B1, V5, V6]; xn--tsh4435fk263g.xn--jofz5294e; ; ; # ⒈𐫓.᩠ +xn--0ug78ol75wzcx4i.xn--jof95xex98m; ⒈\u200C𐫓.\u1A60\u200D; [B1, C1, C2, V5, V6]; xn--0ug78ol75wzcx4i.xn--jof95xex98m; ; ; # ⒈𐫓.᩠ +。𝟫𞀈䬺⒈; .9𞀈䬺⒈; [V6]; xn--3f1h.xn--9-ecp936non25a; ; ; # .9𞀈䬺⒈ +。9𞀈䬺1.; .9𞀈䬺1.; [V6]; xn--3f1h.xn--91-030c1650n.; ; ; # .9𞀈䬺1. +xn--3f1h.xn--91-030c1650n.; .9𞀈䬺1.; [V6]; xn--3f1h.xn--91-030c1650n.; ; ; # .9𞀈䬺1. +xn--3f1h.xn--9-ecp936non25a; .9𞀈䬺⒈; [V6]; xn--3f1h.xn--9-ecp936non25a; ; ; # .9𞀈䬺⒈ +≯。盚\u0635; ≯.盚\u0635; [B5, B6, V6]; xn--hdh30181h.xn--0gb7878c; ; ; # ≯.盚ص +>\u0338。盚\u0635; ≯.盚\u0635; [B5, B6, V6]; xn--hdh30181h.xn--0gb7878c; ; ; # ≯.盚ص +xn--hdh30181h.xn--0gb7878c; ≯.盚\u0635; [B5, B6, V6]; xn--hdh30181h.xn--0gb7878c; ; ; # ≯.盚ص +-\u05B4。-≯; -\u05B4.-≯; [B1, V3, V6]; xn----fgc06667m.xn----pgoy615he5y4i; ; ; # -ִ.-≯ +-\u05B4。->\u0338; -\u05B4.-≯; [B1, V3, V6]; xn----fgc06667m.xn----pgoy615he5y4i; ; ; # -ִ.-≯ +xn----fgc06667m.xn----pgoy615he5y4i; -\u05B4.-≯; [B1, V3, V6]; xn----fgc06667m.xn----pgoy615he5y4i; ; ; # -ִ.-≯ +\u1B44\u200C\u0A4D.𐭛; \u1B44\u200C\u0A4D.𐭛; [B2, B3, B6, V6]; xn--ybc997f6rd2n772c.xn--409c6100y; ; xn--ybc997fb5881a.xn--409c6100y; [B2, B3, V6] # ᭄੍.𐭛 +\u1B44\u200C\u0A4D.𐭛; ; [B2, B3, B6, V6]; xn--ybc997f6rd2n772c.xn--409c6100y; ; xn--ybc997fb5881a.xn--409c6100y; [B2, B3, V6] # ᭄੍.𐭛 +xn--ybc997fb5881a.xn--409c6100y; \u1B44\u0A4D.𐭛; [B2, B3, V6]; xn--ybc997fb5881a.xn--409c6100y; ; ; # ᭄੍.𐭛 +xn--ybc997f6rd2n772c.xn--409c6100y; \u1B44\u200C\u0A4D.𐭛; [B2, B3, B6, V6]; xn--ybc997f6rd2n772c.xn--409c6100y; ; ; # ᭄੍.𐭛 +⾇.\u067D𞤴\u06BB\u200D; 舛.\u067D𞤴\u06BB\u200D; [B3, C2]; xn--8c1a.xn--2ib8jv19e6413b; ; xn--8c1a.xn--2ib8jn539l; [] # 舛.ٽ𞤴ڻ +舛.\u067D𞤴\u06BB\u200D; ; [B3, C2]; xn--8c1a.xn--2ib8jv19e6413b; ; xn--8c1a.xn--2ib8jn539l; [] # 舛.ٽ𞤴ڻ +舛.\u067D𞤒\u06BB\u200D; 舛.\u067D𞤴\u06BB\u200D; [B3, C2]; xn--8c1a.xn--2ib8jv19e6413b; ; xn--8c1a.xn--2ib8jn539l; [] # 舛.ٽ𞤴ڻ +xn--8c1a.xn--2ib8jn539l; 舛.\u067D𞤴\u06BB; ; xn--8c1a.xn--2ib8jn539l; ; ; # 舛.ٽ𞤴ڻ +舛.\u067D𞤴\u06BB; ; ; xn--8c1a.xn--2ib8jn539l; ; ; # 舛.ٽ𞤴ڻ +舛.\u067D𞤒\u06BB; 舛.\u067D𞤴\u06BB; ; xn--8c1a.xn--2ib8jn539l; ; ; # 舛.ٽ𞤴ڻ +xn--8c1a.xn--2ib8jv19e6413b; 舛.\u067D𞤴\u06BB\u200D; [B3, C2]; xn--8c1a.xn--2ib8jv19e6413b; ; ; # 舛.ٽ𞤴ڻ +⾇.\u067D𞤒\u06BB\u200D; 舛.\u067D𞤴\u06BB\u200D; [B3, C2]; xn--8c1a.xn--2ib8jv19e6413b; ; xn--8c1a.xn--2ib8jn539l; [] # 舛.ٽ𞤴ڻ +4。\u0767≯; 4.\u0767≯; [B1, B3, V6]; xn--4-xn17i.xn--rpb459k; ; ; # 4.ݧ≯ +4。\u0767>\u0338; 4.\u0767≯; [B1, B3, V6]; xn--4-xn17i.xn--rpb459k; ; ; # 4.ݧ≯ +xn--4-xn17i.xn--rpb459k; 4.\u0767≯; [B1, B3, V6]; xn--4-xn17i.xn--rpb459k; ; ; # 4.ݧ≯ +硲.\u06AD; 硲.\u06AD; [B5, V6]; xn--lcz1610fn78gk609a.xn--gkb; ; ; # 硲.ڭ +硲.\u06AD; ; [B5, V6]; xn--lcz1610fn78gk609a.xn--gkb; ; ; # 硲.ڭ +xn--lcz1610fn78gk609a.xn--gkb; 硲.\u06AD; [B5, V6]; xn--lcz1610fn78gk609a.xn--gkb; ; ; # 硲.ڭ +\u200C.\uFE08\u0666Ⴆ℮; \u200C.\u0666Ⴆ℮; [B1, C1, V6]; xn--0ug.xn--fib263c0yn; ; .xn--fib263c0yn; [B1, V6, A4_2] # .٦Ⴆ℮ +\u200C.\uFE08\u0666ⴆ℮; \u200C.\u0666ⴆ℮; [B1, C1]; xn--0ug.xn--fib628k4li; ; .xn--fib628k4li; [B1, A4_2] # .٦ⴆ℮ +.xn--fib628k4li; .\u0666ⴆ℮; [B1, X4_2]; .xn--fib628k4li; [B1, A4_2]; ; # .٦ⴆ℮ +xn--0ug.xn--fib628k4li; \u200C.\u0666ⴆ℮; [B1, C1]; xn--0ug.xn--fib628k4li; ; ; # .٦ⴆ℮ +.xn--fib263c0yn; .\u0666Ⴆ℮; [B1, V6, X4_2]; .xn--fib263c0yn; [B1, V6, A4_2]; ; # .٦Ⴆ℮ +xn--0ug.xn--fib263c0yn; \u200C.\u0666Ⴆ℮; [B1, C1, V6]; xn--0ug.xn--fib263c0yn; ; ; # .٦Ⴆ℮ +\u06A3.\u0D4D\u200DϞ; \u06A3.\u0D4D\u200Dϟ; [B1, V5]; xn--5jb.xn--xya149bpvp; ; xn--5jb.xn--xya149b; # ڣ.്ϟ +\u06A3.\u0D4D\u200DϞ; \u06A3.\u0D4D\u200Dϟ; [B1, V5]; xn--5jb.xn--xya149bpvp; ; xn--5jb.xn--xya149b; # ڣ.്ϟ +\u06A3.\u0D4D\u200Dϟ; ; [B1, V5]; xn--5jb.xn--xya149bpvp; ; xn--5jb.xn--xya149b; # ڣ.്ϟ +xn--5jb.xn--xya149b; \u06A3.\u0D4Dϟ; [B1, V5]; xn--5jb.xn--xya149b; ; ; # ڣ.്ϟ +xn--5jb.xn--xya149bpvp; \u06A3.\u0D4D\u200Dϟ; [B1, V5]; xn--5jb.xn--xya149bpvp; ; ; # ڣ.്ϟ +\u06A3.\u0D4D\u200Dϟ; \u06A3.\u0D4D\u200Dϟ; [B1, V5]; xn--5jb.xn--xya149bpvp; ; xn--5jb.xn--xya149b; # ڣ.്ϟ +\u200C𞸇𑘿。\u0623𐮂-腍; \u200C\u062D𑘿.\u0623𐮂-腍; [B1, B2, B3, C1]; xn--sgb953kmi8o.xn----qmc5075grs9e; ; xn--sgb4140l.xn----qmc5075grs9e; [B2, B3] # ح𑘿.أ𐮂-腍 +\u200C𞸇𑘿。\u0627\u0654𐮂-腍; \u200C\u062D𑘿.\u0623𐮂-腍; [B1, B2, B3, C1]; xn--sgb953kmi8o.xn----qmc5075grs9e; ; xn--sgb4140l.xn----qmc5075grs9e; [B2, B3] # ح𑘿.أ𐮂-腍 +\u200C\u062D𑘿。\u0623𐮂-腍; \u200C\u062D𑘿.\u0623𐮂-腍; [B1, B2, B3, C1]; xn--sgb953kmi8o.xn----qmc5075grs9e; ; xn--sgb4140l.xn----qmc5075grs9e; [B2, B3] # ح𑘿.أ𐮂-腍 +\u200C\u062D𑘿。\u0627\u0654𐮂-腍; \u200C\u062D𑘿.\u0623𐮂-腍; [B1, B2, B3, C1]; xn--sgb953kmi8o.xn----qmc5075grs9e; ; xn--sgb4140l.xn----qmc5075grs9e; [B2, B3] # ح𑘿.أ𐮂-腍 +xn--sgb4140l.xn----qmc5075grs9e; \u062D𑘿.\u0623𐮂-腍; [B2, B3]; xn--sgb4140l.xn----qmc5075grs9e; ; ; # ح𑘿.أ𐮂-腍 +xn--sgb953kmi8o.xn----qmc5075grs9e; \u200C\u062D𑘿.\u0623𐮂-腍; [B1, B2, B3, C1]; xn--sgb953kmi8o.xn----qmc5075grs9e; ; ; # ح𑘿.أ𐮂-腍 +-\u066B纛。𝟛🄅; -\u066B纛.3🄅; [B1, V3, V6]; xn----vqc8143g0tt4i.xn--3-os1sn476y; ; ; # -٫纛.3🄅 +-\u066B纛。34,; -\u066B纛.34,; [B1, V3, V6]; xn----vqc8143g0tt4i.xn--34,-8787l; ; ; # -٫纛.34, +xn----vqc8143g0tt4i.xn--34,-8787l; -\u066B纛.34,; [B1, V3, V6]; xn----vqc8143g0tt4i.xn--34,-8787l; ; ; # -٫纛.34, +xn----vqc8143g0tt4i.xn--3-os1sn476y; -\u066B纛.3🄅; [B1, V3, V6]; xn----vqc8143g0tt4i.xn--3-os1sn476y; ; ; # -٫纛.3🄅 +🔔.Ⴂ\u07CC\u0BCD𐋮; 🔔.Ⴂ\u07CC\u0BCD𐋮; [B1, B5, V6]; xn--nv8h.xn--nsb46r83e8112a; ; ; # 🔔.Ⴂߌ்𐋮 +🔔.Ⴂ\u07CC\u0BCD𐋮; ; [B1, B5, V6]; xn--nv8h.xn--nsb46r83e8112a; ; ; # 🔔.Ⴂߌ்𐋮 +🔔.ⴂ\u07CC\u0BCD𐋮; ; [B1, B5]; xn--nv8h.xn--nsb46rvz1b222p; ; ; # 🔔.ⴂߌ்𐋮 +xn--nv8h.xn--nsb46rvz1b222p; 🔔.ⴂ\u07CC\u0BCD𐋮; [B1, B5]; xn--nv8h.xn--nsb46rvz1b222p; ; ; # 🔔.ⴂߌ்𐋮 +xn--nv8h.xn--nsb46r83e8112a; 🔔.Ⴂ\u07CC\u0BCD𐋮; [B1, B5, V6]; xn--nv8h.xn--nsb46r83e8112a; ; ; # 🔔.Ⴂߌ்𐋮 +🔔.ⴂ\u07CC\u0BCD𐋮; 🔔.ⴂ\u07CC\u0BCD𐋮; [B1, B5]; xn--nv8h.xn--nsb46rvz1b222p; ; ; # 🔔.ⴂߌ்𐋮 +軥\u06B3.-𖬵; ; [B1, B5, B6, V3]; xn--mkb5480e.xn----6u5m; ; ; # 軥ڳ.-𖬵 +xn--mkb5480e.xn----6u5m; 軥\u06B3.-𖬵; [B1, B5, B6, V3]; xn--mkb5480e.xn----6u5m; ; ; # 軥ڳ.-𖬵 +𐹤\u07CA\u06B6.𐨂-; ; [B1, V3, V5]; xn--pkb56cn614d.xn----974i; ; ; # 𐹤ߊڶ.𐨂- +xn--pkb56cn614d.xn----974i; 𐹤\u07CA\u06B6.𐨂-; [B1, V3, V5]; xn--pkb56cn614d.xn----974i; ; ; # 𐹤ߊڶ.𐨂- +-󠅱0。\u17CF\u1DFD톇십; -0.\u17CF\u1DFD톇십; [V3, V5]; -0.xn--r4e872ah77nghm; ; ; # -0.៏᷽톇십 +-󠅱0。\u17CF\u1DFD톇십; -0.\u17CF\u1DFD톇십; [V3, V5]; -0.xn--r4e872ah77nghm; ; ; # -0.៏᷽톇십 +-󠅱0。\u17CF\u1DFD톇십; -0.\u17CF\u1DFD톇십; [V3, V5]; -0.xn--r4e872ah77nghm; ; ; # -0.៏᷽톇십 +-󠅱0。\u17CF\u1DFD톇십; -0.\u17CF\u1DFD톇십; [V3, V5]; -0.xn--r4e872ah77nghm; ; ; # -0.៏᷽톇십 +-0.xn--r4e872ah77nghm; -0.\u17CF\u1DFD톇십; [V3, V5]; -0.xn--r4e872ah77nghm; ; ; # -0.៏᷽톇십 +ꡰ︒--。\u17CC靈𐹢; ꡰ︒--.\u17CC靈𐹢; [B1, B6, V2, V3, V5, V6]; xn-----bk9hu24z.xn--o4e6836dpxudz0v1c; ; ; # ꡰ︒--.៌靈𐹢 +ꡰ。--。\u17CC靈𐹢; ꡰ.--.\u17CC靈𐹢; [B1, V3, V5, V6]; xn--md9a.--.xn--o4e6836dpxudz0v1c; ; ; # ꡰ.--.៌靈𐹢 +xn--md9a.--.xn--o4e6836dpxudz0v1c; ꡰ.--.\u17CC靈𐹢; [B1, V3, V5, V6]; xn--md9a.--.xn--o4e6836dpxudz0v1c; ; ; # ꡰ.--.៌靈𐹢 +xn-----bk9hu24z.xn--o4e6836dpxudz0v1c; ꡰ︒--.\u17CC靈𐹢; [B1, B6, V2, V3, V5, V6]; xn-----bk9hu24z.xn--o4e6836dpxudz0v1c; ; ; # ꡰ︒--.៌靈𐹢 +\u115FႿႵრ。\u0B4D; \u115FႿႵრ.\u0B4D; [V5, V6]; xn--tndt4hvw.xn--9ic; ; ; # ႿႵრ.୍ +\u115FႿႵრ。\u0B4D; \u115FႿႵრ.\u0B4D; [V5, V6]; xn--tndt4hvw.xn--9ic; ; ; # ႿႵრ.୍ +\u115Fⴟⴕრ。\u0B4D; \u115Fⴟⴕრ.\u0B4D; [V5, V6]; xn--1od7wz74eeb.xn--9ic; ; ; # ⴟⴕრ.୍ +\u115FႿႵᲠ。\u0B4D; \u115FႿႵრ.\u0B4D; [V5, V6]; xn--tndt4hvw.xn--9ic; ; ; # ႿႵრ.୍ +xn--tndt4hvw.xn--9ic; \u115FႿႵრ.\u0B4D; [V5, V6]; xn--tndt4hvw.xn--9ic; ; ; # ႿႵრ.୍ +xn--1od7wz74eeb.xn--9ic; \u115Fⴟⴕრ.\u0B4D; [V5, V6]; xn--1od7wz74eeb.xn--9ic; ; ; # ⴟⴕრ.୍ +\u115Fⴟⴕრ。\u0B4D; \u115Fⴟⴕრ.\u0B4D; [V5, V6]; xn--1od7wz74eeb.xn--9ic; ; ; # ⴟⴕრ.୍ +\u115FႿႵᲠ。\u0B4D; \u115FႿႵრ.\u0B4D; [V5, V6]; xn--tndt4hvw.xn--9ic; ; ; # ႿႵრ.୍ +\u115FႿⴕრ。\u0B4D; \u115FႿⴕრ.\u0B4D; [V5, V6]; xn--3nd0etsm92g.xn--9ic; ; ; # Ⴟⴕრ.୍ +xn--3nd0etsm92g.xn--9ic; \u115FႿⴕრ.\u0B4D; [V5, V6]; xn--3nd0etsm92g.xn--9ic; ; ; # Ⴟⴕრ.୍ +\u115FႿⴕრ。\u0B4D; \u115FႿⴕრ.\u0B4D; [V5, V6]; xn--3nd0etsm92g.xn--9ic; ; ; # Ⴟⴕრ.୍ +🄃𐹠.\u0664󠅇; 🄃𐹠.\u0664; [B1, V6]; xn--7n0d1189a.xn--dib; ; ; # 🄃𐹠.٤ +2,𐹠.\u0664󠅇; 2,𐹠.\u0664; [B1, V6]; xn--2,-5g3o.xn--dib; ; ; # 2,𐹠.٤ +xn--2,-5g3o.xn--dib; 2,𐹠.\u0664; [B1, V6]; xn--2,-5g3o.xn--dib; ; ; # 2,𐹠.٤ +xn--7n0d1189a.xn--dib; 🄃𐹠.\u0664; [B1, V6]; xn--7n0d1189a.xn--dib; ; ; # 🄃𐹠.٤ +\u200C\uFC5B.\u07D2\u0848\u1BF3; \u200C\u0630\u0670.\u07D2\u0848\u1BF3; [B2, B3, B5, B6, C1, V6]; xn--vgb2kq00fl213y.xn--tsb0vz43c; ; xn--vgb2kp1223g.xn--tsb0vz43c; [B2, B3, B5, B6, V6] # ذٰ.ߒࡈ᯳ +\u200C\u0630\u0670.\u07D2\u0848\u1BF3; ; [B2, B3, B5, B6, C1, V6]; xn--vgb2kq00fl213y.xn--tsb0vz43c; ; xn--vgb2kp1223g.xn--tsb0vz43c; [B2, B3, B5, B6, V6] # ذٰ.ߒࡈ᯳ +xn--vgb2kp1223g.xn--tsb0vz43c; \u0630\u0670.\u07D2\u0848\u1BF3; [B2, B3, B5, B6, V6]; xn--vgb2kp1223g.xn--tsb0vz43c; ; ; # ذٰ.ߒࡈ᯳ +xn--vgb2kq00fl213y.xn--tsb0vz43c; \u200C\u0630\u0670.\u07D2\u0848\u1BF3; [B2, B3, B5, B6, C1, V6]; xn--vgb2kq00fl213y.xn--tsb0vz43c; ; ; # ذٰ.ߒࡈ᯳ +\u200D\u200D\u200C。ᡘ𑲭\u17B5; \u200D\u200D\u200C.ᡘ𑲭\u17B5; [B1, C1, C2, V6]; xn--0ugba05538b.xn--03e93aq365d; ; xn--l96h.xn--03e93aq365d; [V6] # .ᡘ𑲭 +xn--l96h.xn--03e93aq365d; .ᡘ𑲭\u17B5; [V6]; xn--l96h.xn--03e93aq365d; ; ; # .ᡘ𑲭 +xn--0ugba05538b.xn--03e93aq365d; \u200D\u200D\u200C.ᡘ𑲭\u17B5; [B1, C1, C2, V6]; xn--0ugba05538b.xn--03e93aq365d; ; ; # .ᡘ𑲭 +。⚄𑁿; .⚄𑁿; [B1, V6]; xn--qe7h.xn--c7h2966f7so4a; ; ; # .⚄𑁿 +xn--qe7h.xn--c7h2966f7so4a; .⚄𑁿; [B1, V6]; xn--qe7h.xn--c7h2966f7so4a; ; ; # .⚄𑁿 +\uA8C4≠.𞠨\u0667; \uA8C4≠.𞠨\u0667; [B1, V5]; xn--1chy504c.xn--gib1777v; ; ; # ꣄≠.𞠨٧ +\uA8C4=\u0338.𞠨\u0667; \uA8C4≠.𞠨\u0667; [B1, V5]; xn--1chy504c.xn--gib1777v; ; ; # ꣄≠.𞠨٧ +\uA8C4≠.𞠨\u0667; ; [B1, V5]; xn--1chy504c.xn--gib1777v; ; ; # ꣄≠.𞠨٧ +\uA8C4=\u0338.𞠨\u0667; \uA8C4≠.𞠨\u0667; [B1, V5]; xn--1chy504c.xn--gib1777v; ; ; # ꣄≠.𞠨٧ +xn--1chy504c.xn--gib1777v; \uA8C4≠.𞠨\u0667; [B1, V5]; xn--1chy504c.xn--gib1777v; ; ; # ꣄≠.𞠨٧ +𝟛𝆪\uA8C4。\uA8EA-; 3\uA8C4𝆪.\uA8EA-; [V3, V5]; xn--3-sl4eu679e.xn----xn4e; ; ; # 3꣄𝆪.꣪- +𝟛\uA8C4𝆪。\uA8EA-; 3\uA8C4𝆪.\uA8EA-; [V3, V5]; xn--3-sl4eu679e.xn----xn4e; ; ; # 3꣄𝆪.꣪- +3\uA8C4𝆪。\uA8EA-; 3\uA8C4𝆪.\uA8EA-; [V3, V5]; xn--3-sl4eu679e.xn----xn4e; ; ; # 3꣄𝆪.꣪- +xn--3-sl4eu679e.xn----xn4e; 3\uA8C4𝆪.\uA8EA-; [V3, V5]; xn--3-sl4eu679e.xn----xn4e; ; ; # 3꣄𝆪.꣪- +\u075F\u1BA2\u103AႧ.4; ; [B1, B2, B3, V6]; xn--jpb846bmjw88a.4; ; ; # ݟᮢ်Ⴇ.4 +\u075F\u1BA2\u103Aⴇ.4; ; [B1, B2, B3]; xn--jpb846bjzj7pr.4; ; ; # ݟᮢ်ⴇ.4 +xn--jpb846bjzj7pr.4; \u075F\u1BA2\u103Aⴇ.4; [B1, B2, B3]; xn--jpb846bjzj7pr.4; ; ; # ݟᮢ်ⴇ.4 +xn--jpb846bmjw88a.4; \u075F\u1BA2\u103AႧ.4; [B1, B2, B3, V6]; xn--jpb846bmjw88a.4; ; ; # ݟᮢ်Ⴇ.4 +ᄹ。\u0ECA󠄞; ᄹ.\u0ECA; [V5, V6]; xn--lrd.xn--s8c05302k; ; ; # ᄹ.໊ +ᄹ。\u0ECA󠄞; ᄹ.\u0ECA; [V5, V6]; xn--lrd.xn--s8c05302k; ; ; # ᄹ.໊ +xn--lrd.xn--s8c05302k; ᄹ.\u0ECA; [V5, V6]; xn--lrd.xn--s8c05302k; ; ; # ᄹ.໊ +Ⴆ.󠆡\uFE09𞤍; Ⴆ.𞤯; [V6]; xn--end82983m.xn--ne6h; ; ; # Ⴆ.𞤯 +Ⴆ.󠆡\uFE09𞤍; Ⴆ.𞤯; [V6]; xn--end82983m.xn--ne6h; ; ; # Ⴆ.𞤯 +ⴆ.󠆡\uFE09𞤯; ⴆ.𞤯; [V6]; xn--xkjw3965g.xn--ne6h; ; ; # ⴆ.𞤯 +xn--xkjw3965g.xn--ne6h; ⴆ.𞤯; [V6]; xn--xkjw3965g.xn--ne6h; ; ; # ⴆ.𞤯 +xn--end82983m.xn--ne6h; Ⴆ.𞤯; [V6]; xn--end82983m.xn--ne6h; ; ; # Ⴆ.𞤯 +ⴆ.󠆡\uFE09𞤯; ⴆ.𞤯; [V6]; xn--xkjw3965g.xn--ne6h; ; ; # ⴆ.𞤯 +ⴆ.󠆡\uFE09𞤍; ⴆ.𞤯; [V6]; xn--xkjw3965g.xn--ne6h; ; ; # ⴆ.𞤯 +ⴆ.󠆡\uFE09𞤍; ⴆ.𞤯; [V6]; xn--xkjw3965g.xn--ne6h; ; ; # ⴆ.𞤯 +ß\u080B︒\u067B.帼F∬\u200C; ß\u080B︒\u067B.帼f∫∫\u200C; [B5, B6, C1, V6]; xn--zca68zj8ac956c.xn--f-sgn48ga6997e; ; xn--ss-k0d31nu121d.xn--f-tcoa9162d; [B5, B6, V6] # ßࠋ︒ٻ.帼f∫∫ +ß\u080B。\u067B.帼F∫∫\u200C; ß\u080B.\u067B.帼f∫∫\u200C; [B5, B6, C1]; xn--zca687a.xn--0ib.xn--f-sgn48ga6997e; ; xn--ss-uze.xn--0ib.xn--f-tcoa9162d; [B5, B6] # ßࠋ.ٻ.帼f∫∫ +ß\u080B。\u067B.帼f∫∫\u200C; ß\u080B.\u067B.帼f∫∫\u200C; [B5, B6, C1]; xn--zca687a.xn--0ib.xn--f-sgn48ga6997e; ; xn--ss-uze.xn--0ib.xn--f-tcoa9162d; [B5, B6] # ßࠋ.ٻ.帼f∫∫ +SS\u080B。\u067B.帼F∫∫\u200C; ss\u080B.\u067B.帼f∫∫\u200C; [B5, B6, C1]; xn--ss-uze.xn--0ib.xn--f-sgn48ga6997e; ; xn--ss-uze.xn--0ib.xn--f-tcoa9162d; [B5, B6] # ssࠋ.ٻ.帼f∫∫ +ss\u080B。\u067B.帼f∫∫\u200C; ss\u080B.\u067B.帼f∫∫\u200C; [B5, B6, C1]; xn--ss-uze.xn--0ib.xn--f-sgn48ga6997e; ; xn--ss-uze.xn--0ib.xn--f-tcoa9162d; [B5, B6] # ssࠋ.ٻ.帼f∫∫ +Ss\u080B。\u067B.帼F∫∫\u200C; ss\u080B.\u067B.帼f∫∫\u200C; [B5, B6, C1]; xn--ss-uze.xn--0ib.xn--f-sgn48ga6997e; ; xn--ss-uze.xn--0ib.xn--f-tcoa9162d; [B5, B6] # ssࠋ.ٻ.帼f∫∫ +xn--ss-uze.xn--0ib.xn--f-tcoa9162d; ss\u080B.\u067B.帼f∫∫; [B5, B6]; xn--ss-uze.xn--0ib.xn--f-tcoa9162d; ; ; # ssࠋ.ٻ.帼f∫∫ +xn--ss-uze.xn--0ib.xn--f-sgn48ga6997e; ss\u080B.\u067B.帼f∫∫\u200C; [B5, B6, C1]; xn--ss-uze.xn--0ib.xn--f-sgn48ga6997e; ; ; # ssࠋ.ٻ.帼f∫∫ +xn--zca687a.xn--0ib.xn--f-sgn48ga6997e; ß\u080B.\u067B.帼f∫∫\u200C; [B5, B6, C1]; xn--zca687a.xn--0ib.xn--f-sgn48ga6997e; ; ; # ßࠋ.ٻ.帼f∫∫ +ß\u080B︒\u067B.帼f∬\u200C; ß\u080B︒\u067B.帼f∫∫\u200C; [B5, B6, C1, V6]; xn--zca68zj8ac956c.xn--f-sgn48ga6997e; ; xn--ss-k0d31nu121d.xn--f-tcoa9162d; [B5, B6, V6] # ßࠋ︒ٻ.帼f∫∫ +SS\u080B︒\u067B.帼F∬\u200C; ss\u080B︒\u067B.帼f∫∫\u200C; [B5, B6, C1, V6]; xn--ss-k0d31nu121d.xn--f-sgn48ga6997e; ; xn--ss-k0d31nu121d.xn--f-tcoa9162d; [B5, B6, V6] # ssࠋ︒ٻ.帼f∫∫ +ss\u080B︒\u067B.帼f∬\u200C; ss\u080B︒\u067B.帼f∫∫\u200C; [B5, B6, C1, V6]; xn--ss-k0d31nu121d.xn--f-sgn48ga6997e; ; xn--ss-k0d31nu121d.xn--f-tcoa9162d; [B5, B6, V6] # ssࠋ︒ٻ.帼f∫∫ +Ss\u080B︒\u067B.帼F∬\u200C; ss\u080B︒\u067B.帼f∫∫\u200C; [B5, B6, C1, V6]; xn--ss-k0d31nu121d.xn--f-sgn48ga6997e; ; xn--ss-k0d31nu121d.xn--f-tcoa9162d; [B5, B6, V6] # ssࠋ︒ٻ.帼f∫∫ +xn--ss-k0d31nu121d.xn--f-tcoa9162d; ss\u080B︒\u067B.帼f∫∫; [B5, B6, V6]; xn--ss-k0d31nu121d.xn--f-tcoa9162d; ; ; # ssࠋ︒ٻ.帼f∫∫ +xn--ss-k0d31nu121d.xn--f-sgn48ga6997e; ss\u080B︒\u067B.帼f∫∫\u200C; [B5, B6, C1, V6]; xn--ss-k0d31nu121d.xn--f-sgn48ga6997e; ; ; # ssࠋ︒ٻ.帼f∫∫ +xn--zca68zj8ac956c.xn--f-sgn48ga6997e; ß\u080B︒\u067B.帼f∫∫\u200C; [B5, B6, C1, V6]; xn--zca68zj8ac956c.xn--f-sgn48ga6997e; ; ; # ßࠋ︒ٻ.帼f∫∫ +。𐹴\u200D; .𐹴\u200D; [B1, C2, V6]; xn--8l83e.xn--1ug4105gsxwf; ; xn--8l83e.xn--so0dw168a; [B1, V6] # .𐹴 +。𐹴\u200D; .𐹴\u200D; [B1, C2, V6]; xn--8l83e.xn--1ug4105gsxwf; ; xn--8l83e.xn--so0dw168a; [B1, V6] # .𐹴 +xn--8l83e.xn--so0dw168a; .𐹴; [B1, V6]; xn--8l83e.xn--so0dw168a; ; ; # .𐹴 +xn--8l83e.xn--1ug4105gsxwf; .𐹴\u200D; [B1, C2, V6]; xn--8l83e.xn--1ug4105gsxwf; ; ; # .𐹴 +.𝟨\uA8C4; .6\uA8C4; [V6]; xn--mi60a.xn--6-sl4es8023c; ; ; # .6꣄ +.6\uA8C4; ; [V6]; xn--mi60a.xn--6-sl4es8023c; ; ; # .6꣄ +xn--mi60a.xn--6-sl4es8023c; .6\uA8C4; [V6]; xn--mi60a.xn--6-sl4es8023c; ; ; # .6꣄ +\u1AB2\uFD8E。-۹ႱႨ; \u1AB2\u0645\u062E\u062C.-۹ႱႨ; [B1, V3, V5, V6]; xn--rgbd2e831i.xn----zyc155e9a; ; ; # ᪲مخج.-۹ႱႨ +\u1AB2\u0645\u062E\u062C。-۹ႱႨ; \u1AB2\u0645\u062E\u062C.-۹ႱႨ; [B1, V3, V5, V6]; xn--rgbd2e831i.xn----zyc155e9a; ; ; # ᪲مخج.-۹ႱႨ +\u1AB2\u0645\u062E\u062C。-۹ⴑⴈ; \u1AB2\u0645\u062E\u062C.-۹ⴑⴈ; [B1, V3, V5]; xn--rgbd2e831i.xn----zyc3430a9a; ; ; # ᪲مخج.-۹ⴑⴈ +xn--rgbd2e831i.xn----zyc3430a9a; \u1AB2\u0645\u062E\u062C.-۹ⴑⴈ; [B1, V3, V5]; xn--rgbd2e831i.xn----zyc3430a9a; ; ; # ᪲مخج.-۹ⴑⴈ +xn--rgbd2e831i.xn----zyc155e9a; \u1AB2\u0645\u062E\u062C.-۹ႱႨ; [B1, V3, V5, V6]; xn--rgbd2e831i.xn----zyc155e9a; ; ; # ᪲مخج.-۹ႱႨ +\u1AB2\uFD8E。-۹ⴑⴈ; \u1AB2\u0645\u062E\u062C.-۹ⴑⴈ; [B1, V3, V5]; xn--rgbd2e831i.xn----zyc3430a9a; ; ; # ᪲مخج.-۹ⴑⴈ +\u1AB2\u0645\u062E\u062C。-۹Ⴑⴈ; \u1AB2\u0645\u062E\u062C.-۹Ⴑⴈ; [B1, V3, V5, V6]; xn--rgbd2e831i.xn----zyc875efr3a; ; ; # ᪲مخج.-۹Ⴑⴈ +xn--rgbd2e831i.xn----zyc875efr3a; \u1AB2\u0645\u062E\u062C.-۹Ⴑⴈ; [B1, V3, V5, V6]; xn--rgbd2e831i.xn----zyc875efr3a; ; ; # ᪲مخج.-۹Ⴑⴈ +\u1AB2\uFD8E。-۹Ⴑⴈ; \u1AB2\u0645\u062E\u062C.-۹Ⴑⴈ; [B1, V3, V5, V6]; xn--rgbd2e831i.xn----zyc875efr3a; ; ; # ᪲مخج.-۹Ⴑⴈ +𞤤.-\u08A3︒; 𞤤.-\u08A3︒; [B1, V3, V6]; xn--ce6h.xn----cod7069p; ; ; # 𞤤.-ࢣ︒ +𞤤.-\u08A3。; 𞤤.-\u08A3.; [B1, V3]; xn--ce6h.xn----cod.; ; ; # 𞤤.-ࢣ. +𞤂.-\u08A3。; 𞤤.-\u08A3.; [B1, V3]; xn--ce6h.xn----cod.; ; ; # 𞤤.-ࢣ. +xn--ce6h.xn----cod.; 𞤤.-\u08A3.; [B1, V3]; xn--ce6h.xn----cod.; ; ; # 𞤤.-ࢣ. +𞤂.-\u08A3︒; 𞤤.-\u08A3︒; [B1, V3, V6]; xn--ce6h.xn----cod7069p; ; ; # 𞤤.-ࢣ︒ +xn--ce6h.xn----cod7069p; 𞤤.-\u08A3︒; [B1, V3, V6]; xn--ce6h.xn----cod7069p; ; ; # 𞤤.-ࢣ︒ +\u200C𐺨.\u0859--; ; [B1, C1, V3, V5]; xn--0ug7905g.xn-----h6e; ; xn--9p0d.xn-----h6e; [B1, V3, V5] # 𐺨.࡙-- +xn--9p0d.xn-----h6e; 𐺨.\u0859--; [B1, V3, V5]; xn--9p0d.xn-----h6e; ; ; # 𐺨.࡙-- +xn--0ug7905g.xn-----h6e; \u200C𐺨.\u0859--; [B1, C1, V3, V5]; xn--0ug7905g.xn-----h6e; ; ; # 𐺨.࡙-- +𐋸Ⴢ.Ⴁ; ; [V6]; xn--6nd5215jr2u0h.xn--8md; ; ; # 𐋸Ⴢ.Ⴁ +𐋸ⴢ.ⴁ; ; [V6]; xn--qlj1559dr224h.xn--skj; ; ; # 𐋸ⴢ.ⴁ +𐋸Ⴢ.ⴁ; ; [V6]; xn--6nd5215jr2u0h.xn--skj; ; ; # 𐋸Ⴢ.ⴁ +xn--6nd5215jr2u0h.xn--skj; 𐋸Ⴢ.ⴁ; [V6]; xn--6nd5215jr2u0h.xn--skj; ; ; # 𐋸Ⴢ.ⴁ +xn--qlj1559dr224h.xn--skj; 𐋸ⴢ.ⴁ; [V6]; xn--qlj1559dr224h.xn--skj; ; ; # 𐋸ⴢ.ⴁ +xn--6nd5215jr2u0h.xn--8md; 𐋸Ⴢ.Ⴁ; [V6]; xn--6nd5215jr2u0h.xn--8md; ; ; # 𐋸Ⴢ.Ⴁ +\uA806₄。ς; \uA8064.ς; [V6]; xn--4-w93ej7463a9io5a.xn--3xa51142bk3f0d; ; xn--4-w93ej7463a9io5a.xn--4xa31142bk3f0d; # ꠆4.ς +\uA8064。ς; \uA8064.ς; [V6]; xn--4-w93ej7463a9io5a.xn--3xa51142bk3f0d; ; xn--4-w93ej7463a9io5a.xn--4xa31142bk3f0d; # ꠆4.ς +\uA8064。Σ; \uA8064.σ; [V6]; xn--4-w93ej7463a9io5a.xn--4xa31142bk3f0d; ; ; # ꠆4.σ +\uA8064。σ; \uA8064.σ; [V6]; xn--4-w93ej7463a9io5a.xn--4xa31142bk3f0d; ; ; # ꠆4.σ +xn--4-w93ej7463a9io5a.xn--4xa31142bk3f0d; \uA8064.σ; [V6]; xn--4-w93ej7463a9io5a.xn--4xa31142bk3f0d; ; ; # ꠆4.σ +xn--4-w93ej7463a9io5a.xn--3xa51142bk3f0d; \uA8064.ς; [V6]; xn--4-w93ej7463a9io5a.xn--3xa51142bk3f0d; ; ; # ꠆4.ς +\uA806₄。Σ; \uA8064.σ; [V6]; xn--4-w93ej7463a9io5a.xn--4xa31142bk3f0d; ; ; # ꠆4.σ +\uA806₄。σ; \uA8064.σ; [V6]; xn--4-w93ej7463a9io5a.xn--4xa31142bk3f0d; ; ; # ꠆4.σ +󠆀\u0723。\u1DF4\u0775; \u0723.\u1DF4\u0775; [B1, V5]; xn--tnb.xn--5pb136i; ; ; # ܣ.ᷴݵ +xn--tnb.xn--5pb136i; \u0723.\u1DF4\u0775; [B1, V5]; xn--tnb.xn--5pb136i; ; ; # ܣ.ᷴݵ +𐹱\u0842𝪨。𬼖Ⴑ\u200D; 𐹱\u0842𝪨.𬼖Ⴑ\u200D; [B1, B6, C2, V6]; xn--0vb1535kdb6e.xn--pnd879eqy33c; ; xn--0vb1535kdb6e.xn--pnd93707a; [B1, V6] # 𐹱ࡂ𝪨.𬼖Ⴑ +𐹱\u0842𝪨。𬼖Ⴑ\u200D; 𐹱\u0842𝪨.𬼖Ⴑ\u200D; [B1, B6, C2, V6]; xn--0vb1535kdb6e.xn--pnd879eqy33c; ; xn--0vb1535kdb6e.xn--pnd93707a; [B1, V6] # 𐹱ࡂ𝪨.𬼖Ⴑ +𐹱\u0842𝪨。𬼖ⴑ\u200D; 𐹱\u0842𝪨.𬼖ⴑ\u200D; [B1, B6, C2]; xn--0vb1535kdb6e.xn--1ug742c5714c; ; xn--0vb1535kdb6e.xn--8kjz186s; [B1] # 𐹱ࡂ𝪨.𬼖ⴑ +xn--0vb1535kdb6e.xn--8kjz186s; 𐹱\u0842𝪨.𬼖ⴑ; [B1]; xn--0vb1535kdb6e.xn--8kjz186s; ; ; # 𐹱ࡂ𝪨.𬼖ⴑ +xn--0vb1535kdb6e.xn--1ug742c5714c; 𐹱\u0842𝪨.𬼖ⴑ\u200D; [B1, B6, C2]; xn--0vb1535kdb6e.xn--1ug742c5714c; ; ; # 𐹱ࡂ𝪨.𬼖ⴑ +xn--0vb1535kdb6e.xn--pnd93707a; 𐹱\u0842𝪨.𬼖Ⴑ; [B1, V6]; xn--0vb1535kdb6e.xn--pnd93707a; ; ; # 𐹱ࡂ𝪨.𬼖Ⴑ +xn--0vb1535kdb6e.xn--pnd879eqy33c; 𐹱\u0842𝪨.𬼖Ⴑ\u200D; [B1, B6, C2, V6]; xn--0vb1535kdb6e.xn--pnd879eqy33c; ; ; # 𐹱ࡂ𝪨.𬼖Ⴑ +𐹱\u0842𝪨。𬼖ⴑ\u200D; 𐹱\u0842𝪨.𬼖ⴑ\u200D; [B1, B6, C2]; xn--0vb1535kdb6e.xn--1ug742c5714c; ; xn--0vb1535kdb6e.xn--8kjz186s; [B1] # 𐹱ࡂ𝪨.𬼖ⴑ +\u1714𐭪\u200D。-𐹴; \u1714𐭪\u200D.-𐹴; [B1, C2, V3, V5, V6]; xn--fze807bso0spy14i.xn----c36i; ; xn--fze4126jujt0g.xn----c36i; [B1, V3, V5, V6] # ᜔𐭪.-𐹴 +\u1714𐭪\u200D。-𐹴; \u1714𐭪\u200D.-𐹴; [B1, C2, V3, V5, V6]; xn--fze807bso0spy14i.xn----c36i; ; xn--fze4126jujt0g.xn----c36i; [B1, V3, V5, V6] # ᜔𐭪.-𐹴 +xn--fze4126jujt0g.xn----c36i; \u1714𐭪.-𐹴; [B1, V3, V5, V6]; xn--fze4126jujt0g.xn----c36i; ; ; # ᜔𐭪.-𐹴 +xn--fze807bso0spy14i.xn----c36i; \u1714𐭪\u200D.-𐹴; [B1, C2, V3, V5, V6]; xn--fze807bso0spy14i.xn----c36i; ; ; # ᜔𐭪.-𐹴 +。\u0729︒쯙𝟧; .\u0729︒쯙5; [B2, V6]; xn--t92s.xn--5-p1c0712mm8rb; ; ; # .ܩ︒쯙5 +。\u0729︒쯙𝟧; .\u0729︒쯙5; [B2, V6]; xn--t92s.xn--5-p1c0712mm8rb; ; ; # .ܩ︒쯙5 +。\u0729。쯙5; .\u0729.쯙5; [V6]; xn--t92s.xn--znb.xn--5-y88f; ; ; # .ܩ.쯙5 +。\u0729。쯙5; .\u0729.쯙5; [V6]; xn--t92s.xn--znb.xn--5-y88f; ; ; # .ܩ.쯙5 +xn--t92s.xn--znb.xn--5-y88f; .\u0729.쯙5; [V6]; xn--t92s.xn--znb.xn--5-y88f; ; ; # .ܩ.쯙5 +xn--t92s.xn--5-p1c0712mm8rb; .\u0729︒쯙5; [B2, V6]; xn--t92s.xn--5-p1c0712mm8rb; ; ; # .ܩ︒쯙5 +𞤟-。\u0762≮뻐; 𞥁-.\u0762≮뻐; [B2, B3, V3]; xn----1j8r.xn--mpb269krv4i; ; ; # 𞥁-.ݢ≮뻐 +𞤟-。\u0762<\u0338뻐; 𞥁-.\u0762≮뻐; [B2, B3, V3]; xn----1j8r.xn--mpb269krv4i; ; ; # 𞥁-.ݢ≮뻐 +𞥁-。\u0762<\u0338뻐; 𞥁-.\u0762≮뻐; [B2, B3, V3]; xn----1j8r.xn--mpb269krv4i; ; ; # 𞥁-.ݢ≮뻐 +𞥁-。\u0762≮뻐; 𞥁-.\u0762≮뻐; [B2, B3, V3]; xn----1j8r.xn--mpb269krv4i; ; ; # 𞥁-.ݢ≮뻐 +xn----1j8r.xn--mpb269krv4i; 𞥁-.\u0762≮뻐; [B2, B3, V3]; xn----1j8r.xn--mpb269krv4i; ; ; # 𞥁-.ݢ≮뻐 +-.\u08B4≠; -.\u08B4≠; [B2, B3, V6]; xn----cm8rp3609a.xn--9yb852k; ; ; # -.ࢴ≠ +-.\u08B4=\u0338; -.\u08B4≠; [B2, B3, V6]; xn----cm8rp3609a.xn--9yb852k; ; ; # -.ࢴ≠ +-.\u08B4≠; ; [B2, B3, V6]; xn----cm8rp3609a.xn--9yb852k; ; ; # -.ࢴ≠ +-.\u08B4=\u0338; -.\u08B4≠; [B2, B3, V6]; xn----cm8rp3609a.xn--9yb852k; ; ; # -.ࢴ≠ +xn----cm8rp3609a.xn--9yb852k; -.\u08B4≠; [B2, B3, V6]; xn----cm8rp3609a.xn--9yb852k; ; ; # -.ࢴ≠ +-ςႼ.\u0661; -ςႼ.\u0661; [B1, V3, V6]; xn----ymb080hun11i.xn--9hb; ; xn----0mb770hun11i.xn--9hb; # -ςႼ.١ +-ςႼ.\u0661; ; [B1, V3, V6]; xn----ymb080hun11i.xn--9hb; ; xn----0mb770hun11i.xn--9hb; # -ςႼ.١ +-ςⴜ.\u0661; ; [B1, V3, V6]; xn----ymb2782aov12f.xn--9hb; ; xn----0mb9682aov12f.xn--9hb; # -ςⴜ.١ +-ΣႼ.\u0661; -σႼ.\u0661; [B1, V3, V6]; xn----0mb770hun11i.xn--9hb; ; ; # -σႼ.١ +-σⴜ.\u0661; ; [B1, V3, V6]; xn----0mb9682aov12f.xn--9hb; ; ; # -σⴜ.١ +-Σⴜ.\u0661; -σⴜ.\u0661; [B1, V3, V6]; xn----0mb9682aov12f.xn--9hb; ; ; # -σⴜ.١ +xn----0mb9682aov12f.xn--9hb; -σⴜ.\u0661; [B1, V3, V6]; xn----0mb9682aov12f.xn--9hb; ; ; # -σⴜ.١ +xn----0mb770hun11i.xn--9hb; -σႼ.\u0661; [B1, V3, V6]; xn----0mb770hun11i.xn--9hb; ; ; # -σႼ.١ +xn----ymb2782aov12f.xn--9hb; -ςⴜ.\u0661; [B1, V3, V6]; xn----ymb2782aov12f.xn--9hb; ; ; # -ςⴜ.١ +xn----ymb080hun11i.xn--9hb; -ςႼ.\u0661; [B1, V3, V6]; xn----ymb080hun11i.xn--9hb; ; ; # -ςႼ.١ +-ςⴜ.\u0661; -ςⴜ.\u0661; [B1, V3, V6]; xn----ymb2782aov12f.xn--9hb; ; xn----0mb9682aov12f.xn--9hb; # -ςⴜ.١ +-ΣႼ.\u0661; -σႼ.\u0661; [B1, V3, V6]; xn----0mb770hun11i.xn--9hb; ; ; # -σႼ.١ +-σⴜ.\u0661; -σⴜ.\u0661; [B1, V3, V6]; xn----0mb9682aov12f.xn--9hb; ; ; # -σⴜ.١ +-Σⴜ.\u0661; -σⴜ.\u0661; [B1, V3, V6]; xn----0mb9682aov12f.xn--9hb; ; ; # -σⴜ.١ +\u17CA.\u200D𝟮𑀿; \u17CA.\u200D2𑀿; [C2, V5]; xn--m4e.xn--2-tgnv469h; ; xn--m4e.xn--2-ku7i; [V5] # ៊.2𑀿 +\u17CA.\u200D2𑀿; ; [C2, V5]; xn--m4e.xn--2-tgnv469h; ; xn--m4e.xn--2-ku7i; [V5] # ៊.2𑀿 +xn--m4e.xn--2-ku7i; \u17CA.2𑀿; [V5]; xn--m4e.xn--2-ku7i; ; ; # ៊.2𑀿 +xn--m4e.xn--2-tgnv469h; \u17CA.\u200D2𑀿; [C2, V5]; xn--m4e.xn--2-tgnv469h; ; ; # ៊.2𑀿 +≯𝟖。\u1A60𐫓; ≯8.\u1A60𐫓; [B1, V5, V6]; xn--8-ogo.xn--jof5303iv1z5d; ; ; # ≯8.᩠𐫓 +>\u0338𝟖。\u1A60𐫓; ≯8.\u1A60𐫓; [B1, V5, V6]; xn--8-ogo.xn--jof5303iv1z5d; ; ; # ≯8.᩠𐫓 +≯8。\u1A60𐫓; ≯8.\u1A60𐫓; [B1, V5, V6]; xn--8-ogo.xn--jof5303iv1z5d; ; ; # ≯8.᩠𐫓 +>\u03388。\u1A60𐫓; ≯8.\u1A60𐫓; [B1, V5, V6]; xn--8-ogo.xn--jof5303iv1z5d; ; ; # ≯8.᩠𐫓 +xn--8-ogo.xn--jof5303iv1z5d; ≯8.\u1A60𐫓; [B1, V5, V6]; xn--8-ogo.xn--jof5303iv1z5d; ; ; # ≯8.᩠𐫓 +𑲫Ↄ\u0664。\u200C; 𑲫Ↄ\u0664.\u200C; [B1, C1, V5, V6]; xn--dib999kcy1p.xn--0ug; ; xn--dib999kcy1p.; [B1, V5, V6] # 𑲫Ↄ٤. +𑲫Ↄ\u0664。\u200C; 𑲫Ↄ\u0664.\u200C; [B1, C1, V5, V6]; xn--dib999kcy1p.xn--0ug; ; xn--dib999kcy1p.; [B1, V5, V6] # 𑲫Ↄ٤. +𑲫ↄ\u0664。\u200C; 𑲫ↄ\u0664.\u200C; [B1, C1, V5]; xn--dib100l8x1p.xn--0ug; ; xn--dib100l8x1p.; [B1, V5] # 𑲫ↄ٤. +xn--dib100l8x1p.; 𑲫ↄ\u0664.; [B1, V5]; xn--dib100l8x1p.; ; ; # 𑲫ↄ٤. +xn--dib100l8x1p.xn--0ug; 𑲫ↄ\u0664.\u200C; [B1, C1, V5]; xn--dib100l8x1p.xn--0ug; ; ; # 𑲫ↄ٤. +xn--dib999kcy1p.; 𑲫Ↄ\u0664.; [B1, V5, V6]; xn--dib999kcy1p.; ; ; # 𑲫Ↄ٤. +xn--dib999kcy1p.xn--0ug; 𑲫Ↄ\u0664.\u200C; [B1, C1, V5, V6]; xn--dib999kcy1p.xn--0ug; ; ; # 𑲫Ↄ٤. +𑲫ↄ\u0664。\u200C; 𑲫ↄ\u0664.\u200C; [B1, C1, V5]; xn--dib100l8x1p.xn--0ug; ; xn--dib100l8x1p.; [B1, V5] # 𑲫ↄ٤. +\u0C00𝟵\u200D\uFC9D.\u200D\u0750⒈; \u0C009\u200D\u0628\u062D.\u200D\u0750⒈; [B1, C2, V5, V6]; xn--9-1mcp570dl51a.xn--3ob977jmfd; ; xn--9-1mcp570d.xn--3ob470m; [B1, V5, V6] # ఀ9بح.ݐ⒈ +\u0C009\u200D\u0628\u062D.\u200D\u07501.; ; [B1, C2, V5]; xn--9-1mcp570dl51a.xn--1-x3c211q.; ; xn--9-1mcp570d.xn--1-x3c.; [B1, V5] # ఀ9بح.ݐ1. +xn--9-1mcp570d.xn--1-x3c.; \u0C009\u0628\u062D.\u07501.; [B1, V5]; xn--9-1mcp570d.xn--1-x3c.; ; ; # ఀ9بح.ݐ1. +xn--9-1mcp570dl51a.xn--1-x3c211q.; \u0C009\u200D\u0628\u062D.\u200D\u07501.; [B1, C2, V5]; xn--9-1mcp570dl51a.xn--1-x3c211q.; ; ; # ఀ9بح.ݐ1. +xn--9-1mcp570d.xn--3ob470m; \u0C009\u0628\u062D.\u0750⒈; [B1, V5, V6]; xn--9-1mcp570d.xn--3ob470m; ; ; # ఀ9بح.ݐ⒈ +xn--9-1mcp570dl51a.xn--3ob977jmfd; \u0C009\u200D\u0628\u062D.\u200D\u0750⒈; [B1, C2, V5, V6]; xn--9-1mcp570dl51a.xn--3ob977jmfd; ; ; # ఀ9بح.ݐ⒈ +\uAAF6。嬶ß葽; \uAAF6.嬶ß葽; [V5]; xn--2v9a.xn--zca7637b14za; ; xn--2v9a.xn--ss-q40dp97m; # ꫶.嬶ß葽 +\uAAF6。嬶SS葽; \uAAF6.嬶ss葽; [V5]; xn--2v9a.xn--ss-q40dp97m; ; ; # ꫶.嬶ss葽 +\uAAF6。嬶ss葽; \uAAF6.嬶ss葽; [V5]; xn--2v9a.xn--ss-q40dp97m; ; ; # ꫶.嬶ss葽 +\uAAF6。嬶Ss葽; \uAAF6.嬶ss葽; [V5]; xn--2v9a.xn--ss-q40dp97m; ; ; # ꫶.嬶ss葽 +xn--2v9a.xn--ss-q40dp97m; \uAAF6.嬶ss葽; [V5]; xn--2v9a.xn--ss-q40dp97m; ; ; # ꫶.嬶ss葽 +xn--2v9a.xn--zca7637b14za; \uAAF6.嬶ß葽; [V5]; xn--2v9a.xn--zca7637b14za; ; ; # ꫶.嬶ß葽 +𑚶⒈。𐹺; 𑚶⒈.𐹺; [B5, B6, V5, V6]; xn--tshz969f.xn--yo0d5914s; ; ; # 𑚶⒈.𐹺 +𑚶1.。𐹺; 𑚶1..𐹺; [B5, B6, V5, V6, X4_2]; xn--1-3j0j..xn--yo0d5914s; [B5, B6, V5, V6, A4_2]; ; # 𑚶1..𐹺 +xn--1-3j0j..xn--yo0d5914s; 𑚶1..𐹺; [B5, B6, V5, V6, X4_2]; xn--1-3j0j..xn--yo0d5914s; [B5, B6, V5, V6, A4_2]; ; # 𑚶1..𐹺 +xn--tshz969f.xn--yo0d5914s; 𑚶⒈.𐹺; [B5, B6, V5, V6]; xn--tshz969f.xn--yo0d5914s; ; ; # 𑚶⒈.𐹺 +𑜤︒≮.\u05D8; 𑜤︒≮.\u05D8; [B1, B5, B6, V5, V6]; xn--gdh5267fdzpa.xn--deb0091w5q9u; ; ; # 𑜤︒≮.ט +𑜤︒<\u0338.\u05D8; 𑜤︒≮.\u05D8; [B1, B5, B6, V5, V6]; xn--gdh5267fdzpa.xn--deb0091w5q9u; ; ; # 𑜤︒≮.ט +𑜤。≮.\u05D8; 𑜤.≮.\u05D8; [B1, B5, B6, V5, V6]; xn--ci2d.xn--gdh.xn--deb0091w5q9u; ; ; # 𑜤.≮.ט +𑜤。<\u0338.\u05D8; 𑜤.≮.\u05D8; [B1, B5, B6, V5, V6]; xn--ci2d.xn--gdh.xn--deb0091w5q9u; ; ; # 𑜤.≮.ט +xn--ci2d.xn--gdh.xn--deb0091w5q9u; 𑜤.≮.\u05D8; [B1, B5, B6, V5, V6]; xn--ci2d.xn--gdh.xn--deb0091w5q9u; ; ; # 𑜤.≮.ט +xn--gdh5267fdzpa.xn--deb0091w5q9u; 𑜤︒≮.\u05D8; [B1, B5, B6, V5, V6]; xn--gdh5267fdzpa.xn--deb0091w5q9u; ; ; # 𑜤︒≮.ט +󠆋\u0603.⇁ς; \u0603.⇁ς; [B1, V6]; xn--lfb04106d.xn--3xa174mxv16m8moq; ; xn--lfb04106d.xn--4xa964mxv16m8moq; # .⇁ς +󠆋\u0603.⇁Σ; \u0603.⇁σ; [B1, V6]; xn--lfb04106d.xn--4xa964mxv16m8moq; ; ; # .⇁σ +󠆋\u0603.⇁σ; \u0603.⇁σ; [B1, V6]; xn--lfb04106d.xn--4xa964mxv16m8moq; ; ; # .⇁σ +xn--lfb04106d.xn--4xa964mxv16m8moq; \u0603.⇁σ; [B1, V6]; xn--lfb04106d.xn--4xa964mxv16m8moq; ; ; # .⇁σ +xn--lfb04106d.xn--3xa174mxv16m8moq; \u0603.⇁ς; [B1, V6]; xn--lfb04106d.xn--3xa174mxv16m8moq; ; ; # .⇁ς +ς𑐽𑜫。\u200C𐫄; ς𑐽𑜫.\u200C𐫄; [C1, V6]; xn--3xa4260lk3b8z15g.xn--0ug4653g2xzf; ; xn--4xa2260lk3b8z15g.xn--tw9ct349a; [V6] # ς𑐽𑜫.𐫄 +ς𑐽𑜫。\u200C𐫄; ς𑐽𑜫.\u200C𐫄; [C1, V6]; xn--3xa4260lk3b8z15g.xn--0ug4653g2xzf; ; xn--4xa2260lk3b8z15g.xn--tw9ct349a; [V6] # ς𑐽𑜫.𐫄 +Σ𑐽𑜫。\u200C𐫄; σ𑐽𑜫.\u200C𐫄; [C1, V6]; xn--4xa2260lk3b8z15g.xn--0ug4653g2xzf; ; xn--4xa2260lk3b8z15g.xn--tw9ct349a; [V6] # σ𑐽𑜫.𐫄 +σ𑐽𑜫。\u200C𐫄; σ𑐽𑜫.\u200C𐫄; [C1, V6]; xn--4xa2260lk3b8z15g.xn--0ug4653g2xzf; ; xn--4xa2260lk3b8z15g.xn--tw9ct349a; [V6] # σ𑐽𑜫.𐫄 +xn--4xa2260lk3b8z15g.xn--tw9ct349a; σ𑐽𑜫.𐫄; [V6]; xn--4xa2260lk3b8z15g.xn--tw9ct349a; ; ; # σ𑐽𑜫.𐫄 +xn--4xa2260lk3b8z15g.xn--0ug4653g2xzf; σ𑐽𑜫.\u200C𐫄; [C1, V6]; xn--4xa2260lk3b8z15g.xn--0ug4653g2xzf; ; ; # σ𑐽𑜫.𐫄 +xn--3xa4260lk3b8z15g.xn--0ug4653g2xzf; ς𑐽𑜫.\u200C𐫄; [C1, V6]; xn--3xa4260lk3b8z15g.xn--0ug4653g2xzf; ; ; # ς𑐽𑜫.𐫄 +Σ𑐽𑜫。\u200C𐫄; σ𑐽𑜫.\u200C𐫄; [C1, V6]; xn--4xa2260lk3b8z15g.xn--0ug4653g2xzf; ; xn--4xa2260lk3b8z15g.xn--tw9ct349a; [V6] # σ𑐽𑜫.𐫄 +σ𑐽𑜫。\u200C𐫄; σ𑐽𑜫.\u200C𐫄; [C1, V6]; xn--4xa2260lk3b8z15g.xn--0ug4653g2xzf; ; xn--4xa2260lk3b8z15g.xn--tw9ct349a; [V6] # σ𑐽𑜫.𐫄 +-。-\uFC4C\u075B; -.-\u0646\u062D\u075B; [B1, V3, V6]; xn----o452j.xn----cnc8e38c; ; ; # -.-نحݛ +-。-\u0646\u062D\u075B; -.-\u0646\u062D\u075B; [B1, V3, V6]; xn----o452j.xn----cnc8e38c; ; ; # -.-نحݛ +xn----o452j.xn----cnc8e38c; -.-\u0646\u062D\u075B; [B1, V3, V6]; xn----o452j.xn----cnc8e38c; ; ; # -.-نحݛ +⺢𝟤。\u200D🚷; ⺢2.\u200D🚷; [C2, V6]; xn--2-4jtr4282f.xn--1ugz946p; ; xn--2-4jtr4282f.xn--m78h; [V6] # ⺢2.🚷 +⺢2。\u200D🚷; ⺢2.\u200D🚷; [C2, V6]; xn--2-4jtr4282f.xn--1ugz946p; ; xn--2-4jtr4282f.xn--m78h; [V6] # ⺢2.🚷 +xn--2-4jtr4282f.xn--m78h; ⺢2.🚷; [V6]; xn--2-4jtr4282f.xn--m78h; ; ; # ⺢2.🚷 +xn--2-4jtr4282f.xn--1ugz946p; ⺢2.\u200D🚷; [C2, V6]; xn--2-4jtr4282f.xn--1ugz946p; ; ; # ⺢2.🚷 +\u0CF8\u200D\u2DFE𐹲。; \u0CF8\u200D\u2DFE𐹲.; [B5, B6, C2, V6]; xn--hvc488g69j402t.xn--3e36c; ; xn--hvc220of37m.xn--3e36c; [B5, B6, V6] # ⷾ𐹲. +\u0CF8\u200D\u2DFE𐹲。; \u0CF8\u200D\u2DFE𐹲.; [B5, B6, C2, V6]; xn--hvc488g69j402t.xn--3e36c; ; xn--hvc220of37m.xn--3e36c; [B5, B6, V6] # ⷾ𐹲. +xn--hvc220of37m.xn--3e36c; \u0CF8\u2DFE𐹲.; [B5, B6, V6]; xn--hvc220of37m.xn--3e36c; ; ; # ⷾ𐹲. +xn--hvc488g69j402t.xn--3e36c; \u0CF8\u200D\u2DFE𐹲.; [B5, B6, C2, V6]; xn--hvc488g69j402t.xn--3e36c; ; ; # ⷾ𐹲. +𐹢.Ⴍ₉⁸; 𐹢.Ⴍ98; [B1, V6]; xn--9n0d.xn--98-7ek; ; ; # 𐹢.Ⴍ98 +𐹢.Ⴍ98; ; [B1, V6]; xn--9n0d.xn--98-7ek; ; ; # 𐹢.Ⴍ98 +𐹢.ⴍ98; ; [B1]; xn--9n0d.xn--98-u61a; ; ; # 𐹢.ⴍ98 +xn--9n0d.xn--98-u61a; 𐹢.ⴍ98; [B1]; xn--9n0d.xn--98-u61a; ; ; # 𐹢.ⴍ98 +xn--9n0d.xn--98-7ek; 𐹢.Ⴍ98; [B1, V6]; xn--9n0d.xn--98-7ek; ; ; # 𐹢.Ⴍ98 +𐹢.ⴍ₉⁸; 𐹢.ⴍ98; [B1]; xn--9n0d.xn--98-u61a; ; ; # 𐹢.ⴍ98 +\u200C\u034F。ß\u08E2⒚≯; \u200C.ß\u08E2⒚≯; [B1, B5, B6, C1, V6]; xn--0ug.xn--zca612bx9vo5b; ; .xn--ss-9if872xjjc; [B5, B6, V6, A4_2] # .ß⒚≯ +\u200C\u034F。ß\u08E2⒚>\u0338; \u200C.ß\u08E2⒚≯; [B1, B5, B6, C1, V6]; xn--0ug.xn--zca612bx9vo5b; ; .xn--ss-9if872xjjc; [B5, B6, V6, A4_2] # .ß⒚≯ +\u200C\u034F。ß\u08E219.≯; \u200C.ß\u08E219.≯; [B1, B5, C1, V6]; xn--0ug.xn--19-fia813f.xn--hdh; ; .xn--ss19-w0i.xn--hdh; [B1, B5, V6, A4_2] # .ß19.≯ +\u200C\u034F。ß\u08E219.>\u0338; \u200C.ß\u08E219.≯; [B1, B5, C1, V6]; xn--0ug.xn--19-fia813f.xn--hdh; ; .xn--ss19-w0i.xn--hdh; [B1, B5, V6, A4_2] # .ß19.≯ +\u200C\u034F。SS\u08E219.>\u0338; \u200C.ss\u08E219.≯; [B1, B5, C1, V6]; xn--0ug.xn--ss19-w0i.xn--hdh; ; .xn--ss19-w0i.xn--hdh; [B1, B5, V6, A4_2] # .ss19.≯ +\u200C\u034F。SS\u08E219.≯; \u200C.ss\u08E219.≯; [B1, B5, C1, V6]; xn--0ug.xn--ss19-w0i.xn--hdh; ; .xn--ss19-w0i.xn--hdh; [B1, B5, V6, A4_2] # .ss19.≯ +\u200C\u034F。ss\u08E219.≯; \u200C.ss\u08E219.≯; [B1, B5, C1, V6]; xn--0ug.xn--ss19-w0i.xn--hdh; ; .xn--ss19-w0i.xn--hdh; [B1, B5, V6, A4_2] # .ss19.≯ +\u200C\u034F。ss\u08E219.>\u0338; \u200C.ss\u08E219.≯; [B1, B5, C1, V6]; xn--0ug.xn--ss19-w0i.xn--hdh; ; .xn--ss19-w0i.xn--hdh; [B1, B5, V6, A4_2] # .ss19.≯ +\u200C\u034F。Ss\u08E219.>\u0338; \u200C.ss\u08E219.≯; [B1, B5, C1, V6]; xn--0ug.xn--ss19-w0i.xn--hdh; ; .xn--ss19-w0i.xn--hdh; [B1, B5, V6, A4_2] # .ss19.≯ +\u200C\u034F。Ss\u08E219.≯; \u200C.ss\u08E219.≯; [B1, B5, C1, V6]; xn--0ug.xn--ss19-w0i.xn--hdh; ; .xn--ss19-w0i.xn--hdh; [B1, B5, V6, A4_2] # .ss19.≯ +.xn--ss19-w0i.xn--hdh; .ss\u08E219.≯; [B1, B5, V6, X4_2]; .xn--ss19-w0i.xn--hdh; [B1, B5, V6, A4_2]; ; # .ss19.≯ +xn--0ug.xn--ss19-w0i.xn--hdh; \u200C.ss\u08E219.≯; [B1, B5, C1, V6]; xn--0ug.xn--ss19-w0i.xn--hdh; ; ; # .ss19.≯ +xn--0ug.xn--19-fia813f.xn--hdh; \u200C.ß\u08E219.≯; [B1, B5, C1, V6]; xn--0ug.xn--19-fia813f.xn--hdh; ; ; # .ß19.≯ +\u200C\u034F。SS\u08E2⒚>\u0338; \u200C.ss\u08E2⒚≯; [B1, B5, B6, C1, V6]; xn--0ug.xn--ss-9if872xjjc; ; .xn--ss-9if872xjjc; [B5, B6, V6, A4_2] # .ss⒚≯ +\u200C\u034F。SS\u08E2⒚≯; \u200C.ss\u08E2⒚≯; [B1, B5, B6, C1, V6]; xn--0ug.xn--ss-9if872xjjc; ; .xn--ss-9if872xjjc; [B5, B6, V6, A4_2] # .ss⒚≯ +\u200C\u034F。ss\u08E2⒚≯; \u200C.ss\u08E2⒚≯; [B1, B5, B6, C1, V6]; xn--0ug.xn--ss-9if872xjjc; ; .xn--ss-9if872xjjc; [B5, B6, V6, A4_2] # .ss⒚≯ +\u200C\u034F。ss\u08E2⒚>\u0338; \u200C.ss\u08E2⒚≯; [B1, B5, B6, C1, V6]; xn--0ug.xn--ss-9if872xjjc; ; .xn--ss-9if872xjjc; [B5, B6, V6, A4_2] # .ss⒚≯ +\u200C\u034F。Ss\u08E2⒚>\u0338; \u200C.ss\u08E2⒚≯; [B1, B5, B6, C1, V6]; xn--0ug.xn--ss-9if872xjjc; ; .xn--ss-9if872xjjc; [B5, B6, V6, A4_2] # .ss⒚≯ +\u200C\u034F。Ss\u08E2⒚≯; \u200C.ss\u08E2⒚≯; [B1, B5, B6, C1, V6]; xn--0ug.xn--ss-9if872xjjc; ; .xn--ss-9if872xjjc; [B5, B6, V6, A4_2] # .ss⒚≯ +.xn--ss-9if872xjjc; .ss\u08E2⒚≯; [B5, B6, V6, X4_2]; .xn--ss-9if872xjjc; [B5, B6, V6, A4_2]; ; # .ss⒚≯ +xn--0ug.xn--ss-9if872xjjc; \u200C.ss\u08E2⒚≯; [B1, B5, B6, C1, V6]; xn--0ug.xn--ss-9if872xjjc; ; ; # .ss⒚≯ +xn--0ug.xn--zca612bx9vo5b; \u200C.ß\u08E2⒚≯; [B1, B5, B6, C1, V6]; xn--0ug.xn--zca612bx9vo5b; ; ; # .ß⒚≯ +\u200Cᡌ.𣃔; \u200Cᡌ.𣃔; [B1, C1, V6]; xn--c8e180bqz13b.xn--od1j; ; xn--c8e5919u.xn--od1j; [B2, B3, V6] # ᡌ.𣃔 +\u200Cᡌ.𣃔; ; [B1, C1, V6]; xn--c8e180bqz13b.xn--od1j; ; xn--c8e5919u.xn--od1j; [B2, B3, V6] # ᡌ.𣃔 +xn--c8e5919u.xn--od1j; ᡌ.𣃔; [B2, B3, V6]; xn--c8e5919u.xn--od1j; ; ; # ᡌ.𣃔 +xn--c8e180bqz13b.xn--od1j; \u200Cᡌ.𣃔; [B1, C1, V6]; xn--c8e180bqz13b.xn--od1j; ; ; # ᡌ.𣃔 +\u07D0-。\u0FA0Ⴛ𝆬; \u07D0-.\u0FA0Ⴛ𝆬; [B1, B2, B3, V5, V6]; xn----8bd11730jefvw.xn--wfd08cd265hgsxa; ; ; # ߐ-.ྠႻ𝆬 +\u07D0-。\u0FA0ⴛ𝆬; \u07D0-.\u0FA0ⴛ𝆬; [B1, B2, B3, V5, V6]; xn----8bd11730jefvw.xn--wfd802mpm20agsxa; ; ; # ߐ-.ྠⴛ𝆬 +xn----8bd11730jefvw.xn--wfd802mpm20agsxa; \u07D0-.\u0FA0ⴛ𝆬; [B1, B2, B3, V5, V6]; xn----8bd11730jefvw.xn--wfd802mpm20agsxa; ; ; # ߐ-.ྠⴛ𝆬 +xn----8bd11730jefvw.xn--wfd08cd265hgsxa; \u07D0-.\u0FA0Ⴛ𝆬; [B1, B2, B3, V5, V6]; xn----8bd11730jefvw.xn--wfd08cd265hgsxa; ; ; # ߐ-.ྠႻ𝆬 +𝨥。⫟𑈾; 𝨥.⫟𑈾; [V5]; xn--n82h.xn--63iw010f; ; ; # 𝨥.⫟𑈾 +xn--n82h.xn--63iw010f; 𝨥.⫟𑈾; [V5]; xn--n82h.xn--63iw010f; ; ; # 𝨥.⫟𑈾 +⾛\u0753.Ⴕ𞠬\u0604\u200D; 走\u0753.Ⴕ𞠬\u0604\u200D; [B5, B6, C2, V6]; xn--6ob9779d.xn--mfb785czmm0y85b; ; xn--6ob9779d.xn--mfb785ck569a; [B5, B6, V6] # 走ݓ.Ⴕ𞠬 +走\u0753.Ⴕ𞠬\u0604\u200D; ; [B5, B6, C2, V6]; xn--6ob9779d.xn--mfb785czmm0y85b; ; xn--6ob9779d.xn--mfb785ck569a; [B5, B6, V6] # 走ݓ.Ⴕ𞠬 +走\u0753.ⴕ𞠬\u0604\u200D; ; [B5, B6, C2, V6]; xn--6ob9779d.xn--mfb444k5gjt754b; ; xn--6ob9779d.xn--mfb511rxu80a; [B5, B6, V6] # 走ݓ.ⴕ𞠬 +xn--6ob9779d.xn--mfb511rxu80a; 走\u0753.ⴕ𞠬\u0604; [B5, B6, V6]; xn--6ob9779d.xn--mfb511rxu80a; ; ; # 走ݓ.ⴕ𞠬 +xn--6ob9779d.xn--mfb444k5gjt754b; 走\u0753.ⴕ𞠬\u0604\u200D; [B5, B6, C2, V6]; xn--6ob9779d.xn--mfb444k5gjt754b; ; ; # 走ݓ.ⴕ𞠬 +xn--6ob9779d.xn--mfb785ck569a; 走\u0753.Ⴕ𞠬\u0604; [B5, B6, V6]; xn--6ob9779d.xn--mfb785ck569a; ; ; # 走ݓ.Ⴕ𞠬 +xn--6ob9779d.xn--mfb785czmm0y85b; 走\u0753.Ⴕ𞠬\u0604\u200D; [B5, B6, C2, V6]; xn--6ob9779d.xn--mfb785czmm0y85b; ; ; # 走ݓ.Ⴕ𞠬 +⾛\u0753.ⴕ𞠬\u0604\u200D; 走\u0753.ⴕ𞠬\u0604\u200D; [B5, B6, C2, V6]; xn--6ob9779d.xn--mfb444k5gjt754b; ; xn--6ob9779d.xn--mfb511rxu80a; [B5, B6, V6] # 走ݓ.ⴕ𞠬 +-ᢗ\u200C🄄.𑜢; ; [C1, V3, V5, V6]; xn----pck312bx563c.xn--9h2d; ; xn----pck1820x.xn--9h2d; [V3, V5, V6] # -ᢗ🄄.𑜢 +-ᢗ\u200C3,.𑜢; ; [C1, V3, V5, V6]; xn---3,-3eu051c.xn--9h2d; ; xn---3,-3eu.xn--9h2d; [V3, V5, V6] # -ᢗ3,.𑜢 +xn---3,-3eu.xn--9h2d; -ᢗ3,.𑜢; [V3, V5, V6]; xn---3,-3eu.xn--9h2d; ; ; # -ᢗ3,.𑜢 +xn---3,-3eu051c.xn--9h2d; -ᢗ\u200C3,.𑜢; [C1, V3, V5, V6]; xn---3,-3eu051c.xn--9h2d; ; ; # -ᢗ3,.𑜢 +xn----pck1820x.xn--9h2d; -ᢗ🄄.𑜢; [V3, V5, V6]; xn----pck1820x.xn--9h2d; ; ; # -ᢗ🄄.𑜢 +xn----pck312bx563c.xn--9h2d; -ᢗ\u200C🄄.𑜢; [C1, V3, V5, V6]; xn----pck312bx563c.xn--9h2d; ; ; # -ᢗ🄄.𑜢 +≠\u200C.Ⴚ; ; [B1, C1, V6]; xn--0ug83gn618a21ov.xn--ynd49496l; ; xn--1ch2293gv3nr.xn--ynd49496l; [B1, V6] # ≠.Ⴚ +=\u0338\u200C.Ⴚ; ≠\u200C.Ⴚ; [B1, C1, V6]; xn--0ug83gn618a21ov.xn--ynd49496l; ; xn--1ch2293gv3nr.xn--ynd49496l; [B1, V6] # ≠.Ⴚ +=\u0338\u200C.ⴚ; ≠\u200C.ⴚ; [B1, C1, V6]; xn--0ug83gn618a21ov.xn--ilj23531g; ; xn--1ch2293gv3nr.xn--ilj23531g; [B1, V6] # ≠.ⴚ +≠\u200C.ⴚ; ; [B1, C1, V6]; xn--0ug83gn618a21ov.xn--ilj23531g; ; xn--1ch2293gv3nr.xn--ilj23531g; [B1, V6] # ≠.ⴚ +xn--1ch2293gv3nr.xn--ilj23531g; ≠.ⴚ; [B1, V6]; xn--1ch2293gv3nr.xn--ilj23531g; ; ; # ≠.ⴚ +xn--0ug83gn618a21ov.xn--ilj23531g; ≠\u200C.ⴚ; [B1, C1, V6]; xn--0ug83gn618a21ov.xn--ilj23531g; ; ; # ≠.ⴚ +xn--1ch2293gv3nr.xn--ynd49496l; ≠.Ⴚ; [B1, V6]; xn--1ch2293gv3nr.xn--ynd49496l; ; ; # ≠.Ⴚ +xn--0ug83gn618a21ov.xn--ynd49496l; ≠\u200C.Ⴚ; [B1, C1, V6]; xn--0ug83gn618a21ov.xn--ynd49496l; ; ; # ≠.Ⴚ +\u0669。󠇀𑇊; \u0669.𑇊; [B1, V5]; xn--iib.xn--6d1d; ; ; # ٩.𑇊 +\u0669。󠇀𑇊; \u0669.𑇊; [B1, V5]; xn--iib.xn--6d1d; ; ; # ٩.𑇊 +xn--iib.xn--6d1d; \u0669.𑇊; [B1, V5]; xn--iib.xn--6d1d; ; ; # ٩.𑇊 +\u1086≯⒍。-; \u1086≯⒍.-; [B1, V3, V5, V6]; xn--hmd482gqqb8730g.-; ; ; # ႆ≯⒍.- +\u1086>\u0338⒍。-; \u1086≯⒍.-; [B1, V3, V5, V6]; xn--hmd482gqqb8730g.-; ; ; # ႆ≯⒍.- +\u1086≯6.。-; \u1086≯6..-; [B1, V3, V5, V6, X4_2]; xn--6-oyg968k7h74b..-; [B1, V3, V5, V6, A4_2]; ; # ႆ≯6..- +\u1086>\u03386.。-; \u1086≯6..-; [B1, V3, V5, V6, X4_2]; xn--6-oyg968k7h74b..-; [B1, V3, V5, V6, A4_2]; ; # ႆ≯6..- +xn--6-oyg968k7h74b..-; \u1086≯6..-; [B1, V3, V5, V6, X4_2]; xn--6-oyg968k7h74b..-; [B1, V3, V5, V6, A4_2]; ; # ႆ≯6..- +xn--hmd482gqqb8730g.-; \u1086≯⒍.-; [B1, V3, V5, V6]; xn--hmd482gqqb8730g.-; ; ; # ႆ≯⒍.- +\u17B4.쮇-; ; [V3, V5, V6]; xn--z3e.xn----938f; ; ; # .쮇- +\u17B4.쮇-; \u17B4.쮇-; [V3, V5, V6]; xn--z3e.xn----938f; ; ; # .쮇- +xn--z3e.xn----938f; \u17B4.쮇-; [V3, V5, V6]; xn--z3e.xn----938f; ; ; # .쮇- +\u200C𑓂。⒈-; \u200C𑓂.⒈-; [C1, V6]; xn--0ugy057g.xn----dcp29674o; ; xn--wz1d.xn----dcp29674o; [V5, V6] # 𑓂.⒈- +\u200C𑓂。1.-; \u200C𑓂.1.-; [C1, V3, V6]; xn--0ugy057g.1.xn----rg03o; ; xn--wz1d.1.xn----rg03o; [V3, V5, V6] # 𑓂.1.- +xn--wz1d.1.xn----rg03o; 𑓂.1.-; [V3, V5, V6]; xn--wz1d.1.xn----rg03o; ; ; # 𑓂.1.- +xn--0ugy057g.1.xn----rg03o; \u200C𑓂.1.-; [C1, V3, V6]; xn--0ugy057g.1.xn----rg03o; ; ; # 𑓂.1.- +xn--wz1d.xn----dcp29674o; 𑓂.⒈-; [V5, V6]; xn--wz1d.xn----dcp29674o; ; ; # 𑓂.⒈- +xn--0ugy057g.xn----dcp29674o; \u200C𑓂.⒈-; [C1, V6]; xn--0ugy057g.xn----dcp29674o; ; ; # 𑓂.⒈- +⒈\uFEAE\u200C。\u20E9🖞\u200C𖬴; ⒈\u0631\u200C.\u20E9🖞\u200C𖬴; [B1, C1, V5, V6]; xn--wgb253kmfd.xn--0ugz6a8040fty5d; ; xn--wgb746m.xn--c1g6021kg18c; [B1, V5, V6] # ⒈ر.⃩🖞𖬴 +1.\u0631\u200C。\u20E9🖞\u200C𖬴; 1.\u0631\u200C.\u20E9🖞\u200C𖬴; [B1, B3, C1, V5]; 1.xn--wgb253k.xn--0ugz6a8040fty5d; ; 1.xn--wgb.xn--c1g6021kg18c; [B1, V5] # 1.ر.⃩🖞𖬴 +1.xn--wgb.xn--c1g6021kg18c; 1.\u0631.\u20E9🖞𖬴; [B1, V5]; 1.xn--wgb.xn--c1g6021kg18c; ; ; # 1.ر.⃩🖞𖬴 +1.xn--wgb253k.xn--0ugz6a8040fty5d; 1.\u0631\u200C.\u20E9🖞\u200C𖬴; [B1, B3, C1, V5]; 1.xn--wgb253k.xn--0ugz6a8040fty5d; ; ; # 1.ر.⃩🖞𖬴 +xn--wgb746m.xn--c1g6021kg18c; ⒈\u0631.\u20E9🖞𖬴; [B1, V5, V6]; xn--wgb746m.xn--c1g6021kg18c; ; ; # ⒈ر.⃩🖞𖬴 +xn--wgb253kmfd.xn--0ugz6a8040fty5d; ⒈\u0631\u200C.\u20E9🖞\u200C𖬴; [B1, C1, V5, V6]; xn--wgb253kmfd.xn--0ugz6a8040fty5d; ; ; # ⒈ر.⃩🖞𖬴 +。𝟐\u1BA8\u07D4; .2\u1BA8\u07D4; [B1, V6]; xn--xm89d.xn--2-icd143m; ; ; # .2ᮨߔ +。2\u1BA8\u07D4; .2\u1BA8\u07D4; [B1, V6]; xn--xm89d.xn--2-icd143m; ; ; # .2ᮨߔ +xn--xm89d.xn--2-icd143m; .2\u1BA8\u07D4; [B1, V6]; xn--xm89d.xn--2-icd143m; ; ; # .2ᮨߔ +\uFD8F.ς\u200D𐹷; \u0645\u062E\u0645.ς\u200D𐹷; [B2, B3, B5, B6, C2, V6]; xn--tgb9bb64691z.xn--3xa006lrp7n; ; xn--tgb9bb64691z.xn--4xa6667k; [B2, B3, B5, B6, V6] # مخم.ς𐹷 +\u0645\u062E\u0645.ς\u200D𐹷; ; [B2, B3, B5, B6, C2, V6]; xn--tgb9bb64691z.xn--3xa006lrp7n; ; xn--tgb9bb64691z.xn--4xa6667k; [B2, B3, B5, B6, V6] # مخم.ς𐹷 +\u0645\u062E\u0645.Σ\u200D𐹷; \u0645\u062E\u0645.σ\u200D𐹷; [B2, B3, B5, B6, C2, V6]; xn--tgb9bb64691z.xn--4xa895lrp7n; ; xn--tgb9bb64691z.xn--4xa6667k; [B2, B3, B5, B6, V6] # مخم.σ𐹷 +\u0645\u062E\u0645.σ\u200D𐹷; ; [B2, B3, B5, B6, C2, V6]; xn--tgb9bb64691z.xn--4xa895lrp7n; ; xn--tgb9bb64691z.xn--4xa6667k; [B2, B3, B5, B6, V6] # مخم.σ𐹷 +xn--tgb9bb64691z.xn--4xa6667k; \u0645\u062E\u0645.σ𐹷; [B2, B3, B5, B6, V6]; xn--tgb9bb64691z.xn--4xa6667k; ; ; # مخم.σ𐹷 +xn--tgb9bb64691z.xn--4xa895lrp7n; \u0645\u062E\u0645.σ\u200D𐹷; [B2, B3, B5, B6, C2, V6]; xn--tgb9bb64691z.xn--4xa895lrp7n; ; ; # مخم.σ𐹷 +xn--tgb9bb64691z.xn--3xa006lrp7n; \u0645\u062E\u0645.ς\u200D𐹷; [B2, B3, B5, B6, C2, V6]; xn--tgb9bb64691z.xn--3xa006lrp7n; ; ; # مخم.ς𐹷 +\uFD8F.Σ\u200D𐹷; \u0645\u062E\u0645.σ\u200D𐹷; [B2, B3, B5, B6, C2, V6]; xn--tgb9bb64691z.xn--4xa895lrp7n; ; xn--tgb9bb64691z.xn--4xa6667k; [B2, B3, B5, B6, V6] # مخم.σ𐹷 +\uFD8F.σ\u200D𐹷; \u0645\u062E\u0645.σ\u200D𐹷; [B2, B3, B5, B6, C2, V6]; xn--tgb9bb64691z.xn--4xa895lrp7n; ; xn--tgb9bb64691z.xn--4xa6667k; [B2, B3, B5, B6, V6] # مخم.σ𐹷 +⒎\u06C1\u0605。\uAAF6۵𐇽; ⒎\u06C1\u0605.\uAAF6۵𐇽; [B1, V5, V6]; xn--nfb98ai25e.xn--imb3805fxt8b; ; ; # ⒎ہ.꫶۵𐇽 +7.\u06C1\u0605。\uAAF6۵𐇽; 7.\u06C1\u0605.\uAAF6۵𐇽; [B1, V5, V6]; 7.xn--nfb98a.xn--imb3805fxt8b; ; ; # 7.ہ.꫶۵𐇽 +7.xn--nfb98a.xn--imb3805fxt8b; 7.\u06C1\u0605.\uAAF6۵𐇽; [B1, V5, V6]; 7.xn--nfb98a.xn--imb3805fxt8b; ; ; # 7.ہ.꫶۵𐇽 +xn--nfb98ai25e.xn--imb3805fxt8b; ⒎\u06C1\u0605.\uAAF6۵𐇽; [B1, V5, V6]; xn--nfb98ai25e.xn--imb3805fxt8b; ; ; # ⒎ہ.꫶۵𐇽 +-ᡥ᠆。\u0605\u1A5D𐹡; -ᡥ᠆.\u0605\u1A5D𐹡; [B1, V3, V6]; xn----f3j6s87156i.xn--nfb035hoo2p; ; ; # -ᡥ᠆.ᩝ𐹡 +xn----f3j6s87156i.xn--nfb035hoo2p; -ᡥ᠆.\u0605\u1A5D𐹡; [B1, V3, V6]; xn----f3j6s87156i.xn--nfb035hoo2p; ; ; # -ᡥ᠆.ᩝ𐹡 +\u200D.\u06BD\u0663\u0596; ; [B1, C2]; xn--1ug.xn--hcb32bni; ; .xn--hcb32bni; [A4_2] # .ڽ٣֖ +.xn--hcb32bni; .\u06BD\u0663\u0596; [X4_2]; .xn--hcb32bni; [A4_2]; ; # .ڽ٣֖ +xn--1ug.xn--hcb32bni; \u200D.\u06BD\u0663\u0596; [B1, C2]; xn--1ug.xn--hcb32bni; ; ; # .ڽ٣֖ +xn--hcb32bni; \u06BD\u0663\u0596; ; xn--hcb32bni; ; ; # ڽ٣֖ +\u06BD\u0663\u0596; ; ; xn--hcb32bni; ; ; # ڽ٣֖ +㒧۱.Ⴚ\u0678\u200D; 㒧۱.Ⴚ\u064A\u0674\u200D; [B5, B6, C2, V6]; xn--emb715u.xn--mhb8f817ao2p; ; xn--emb715u.xn--mhb8f817a; [B5, B6, V6] # 㒧۱.Ⴚيٴ +㒧۱.Ⴚ\u064A\u0674\u200D; ; [B5, B6, C2, V6]; xn--emb715u.xn--mhb8f817ao2p; ; xn--emb715u.xn--mhb8f817a; [B5, B6, V6] # 㒧۱.Ⴚيٴ +㒧۱.ⴚ\u064A\u0674\u200D; ; [B5, B6, C2]; xn--emb715u.xn--mhb8f960g03l; ; xn--emb715u.xn--mhb8fy26k; [B5, B6] # 㒧۱.ⴚيٴ +xn--emb715u.xn--mhb8fy26k; 㒧۱.ⴚ\u064A\u0674; [B5, B6]; xn--emb715u.xn--mhb8fy26k; ; ; # 㒧۱.ⴚيٴ +xn--emb715u.xn--mhb8f960g03l; 㒧۱.ⴚ\u064A\u0674\u200D; [B5, B6, C2]; xn--emb715u.xn--mhb8f960g03l; ; ; # 㒧۱.ⴚيٴ +xn--emb715u.xn--mhb8f817a; 㒧۱.Ⴚ\u064A\u0674; [B5, B6, V6]; xn--emb715u.xn--mhb8f817a; ; ; # 㒧۱.Ⴚيٴ +xn--emb715u.xn--mhb8f817ao2p; 㒧۱.Ⴚ\u064A\u0674\u200D; [B5, B6, C2, V6]; xn--emb715u.xn--mhb8f817ao2p; ; ; # 㒧۱.Ⴚيٴ +㒧۱.ⴚ\u0678\u200D; 㒧۱.ⴚ\u064A\u0674\u200D; [B5, B6, C2]; xn--emb715u.xn--mhb8f960g03l; ; xn--emb715u.xn--mhb8fy26k; [B5, B6] # 㒧۱.ⴚيٴ +\u0F94ꡋ-.-𖬴; \u0F94ꡋ-.-𖬴; [V3, V5]; xn----ukg9938i.xn----4u5m; ; ; # ྔꡋ-.-𖬴 +\u0F94ꡋ-.-𖬴; ; [V3, V5]; xn----ukg9938i.xn----4u5m; ; ; # ྔꡋ-.-𖬴 +xn----ukg9938i.xn----4u5m; \u0F94ꡋ-.-𖬴; [V3, V5]; xn----ukg9938i.xn----4u5m; ; ; # ྔꡋ-.-𖬴 +-⋢\u200C.标-; -⋢\u200C.标-; [C1, V3, V6]; xn----sgn90kn5663a.xn----qj7b; ; xn----9mo67451g.xn----qj7b; [V3, V6] # -⋢.标- +-⊑\u0338\u200C.标-; -⋢\u200C.标-; [C1, V3, V6]; xn----sgn90kn5663a.xn----qj7b; ; xn----9mo67451g.xn----qj7b; [V3, V6] # -⋢.标- +-⋢\u200C.标-; ; [C1, V3, V6]; xn----sgn90kn5663a.xn----qj7b; ; xn----9mo67451g.xn----qj7b; [V3, V6] # -⋢.标- +-⊑\u0338\u200C.标-; -⋢\u200C.标-; [C1, V3, V6]; xn----sgn90kn5663a.xn----qj7b; ; xn----9mo67451g.xn----qj7b; [V3, V6] # -⋢.标- +xn----9mo67451g.xn----qj7b; -⋢.标-; [V3, V6]; xn----9mo67451g.xn----qj7b; ; ; # -⋢.标- +xn----sgn90kn5663a.xn----qj7b; -⋢\u200C.标-; [C1, V3, V6]; xn----sgn90kn5663a.xn----qj7b; ; ; # -⋢.标- +\u0671.ς\u07DC; \u0671.ς\u07DC; [B5, B6]; xn--qib.xn--3xa41s; ; xn--qib.xn--4xa21s; # ٱ.ςߜ +\u0671.ς\u07DC; ; [B5, B6]; xn--qib.xn--3xa41s; ; xn--qib.xn--4xa21s; # ٱ.ςߜ +\u0671.Σ\u07DC; \u0671.σ\u07DC; [B5, B6]; xn--qib.xn--4xa21s; ; ; # ٱ.σߜ +\u0671.σ\u07DC; ; [B5, B6]; xn--qib.xn--4xa21s; ; ; # ٱ.σߜ +xn--qib.xn--4xa21s; \u0671.σ\u07DC; [B5, B6]; xn--qib.xn--4xa21s; ; ; # ٱ.σߜ +xn--qib.xn--3xa41s; \u0671.ς\u07DC; [B5, B6]; xn--qib.xn--3xa41s; ; ; # ٱ.ςߜ +\u0671.Σ\u07DC; \u0671.σ\u07DC; [B5, B6]; xn--qib.xn--4xa21s; ; ; # ٱ.σߜ +\u0671.σ\u07DC; \u0671.σ\u07DC; [B5, B6]; xn--qib.xn--4xa21s; ; ; # ٱ.σߜ +\u0605.\u08C1\u200D𑑂𱼱; \u0605.\u08C1\u200D𑑂𱼱; [B2, B3, B5, B6, C2, V6]; xn--nfb17942h.xn--nzb240jv06otevq; ; xn--nfb17942h.xn--nzb6708kx3pn; [B2, B3, B5, B6, V6] # .ࣁ𑑂𱼱 +\u0605.\u08C1\u200D𑑂𱼱; ; [B2, B3, B5, B6, C2, V6]; xn--nfb17942h.xn--nzb240jv06otevq; ; xn--nfb17942h.xn--nzb6708kx3pn; [B2, B3, B5, B6, V6] # .ࣁ𑑂𱼱 +xn--nfb17942h.xn--nzb6708kx3pn; \u0605.\u08C1𑑂𱼱; [B2, B3, B5, B6, V6]; xn--nfb17942h.xn--nzb6708kx3pn; ; ; # .ࣁ𑑂𱼱 +xn--nfb17942h.xn--nzb240jv06otevq; \u0605.\u08C1\u200D𑑂𱼱; [B2, B3, B5, B6, C2, V6]; xn--nfb17942h.xn--nzb240jv06otevq; ; ; # .ࣁ𑑂𱼱 +𐹾𐋩。\u1BF2; 𐹾𐋩.\u1BF2; [B1, V5, V6]; xn--d97cn8rn44p.xn--0zf; ; ; # 𐹾𐋩.᯲ +𐹾𐋩。\u1BF2; 𐹾𐋩.\u1BF2; [B1, V5, V6]; xn--d97cn8rn44p.xn--0zf; ; ; # 𐹾𐋩.᯲ +xn--d97cn8rn44p.xn--0zf; 𐹾𐋩.\u1BF2; [B1, V5, V6]; xn--d97cn8rn44p.xn--0zf; ; ; # 𐹾𐋩.᯲ +6\u1160\u1C33.锰\u072Cς; ; [B1, B5, V6]; xn--6-5bh476ewr517a.xn--3xa16ohw6pk078g; ; xn--6-5bh476ewr517a.xn--4xa95ohw6pk078g; # 6ᰳ.锰ܬς +6\u1160\u1C33.锰\u072CΣ; 6\u1160\u1C33.锰\u072Cσ; [B1, B5, V6]; xn--6-5bh476ewr517a.xn--4xa95ohw6pk078g; ; ; # 6ᰳ.锰ܬσ +6\u1160\u1C33.锰\u072Cσ; ; [B1, B5, V6]; xn--6-5bh476ewr517a.xn--4xa95ohw6pk078g; ; ; # 6ᰳ.锰ܬσ +xn--6-5bh476ewr517a.xn--4xa95ohw6pk078g; 6\u1160\u1C33.锰\u072Cσ; [B1, B5, V6]; xn--6-5bh476ewr517a.xn--4xa95ohw6pk078g; ; ; # 6ᰳ.锰ܬσ +xn--6-5bh476ewr517a.xn--3xa16ohw6pk078g; 6\u1160\u1C33.锰\u072Cς; [B1, B5, V6]; xn--6-5bh476ewr517a.xn--3xa16ohw6pk078g; ; ; # 6ᰳ.锰ܬς +\u06B3\uFE04𝟽。𐹽; \u06B37.𐹽; [B1, B2, V6]; xn--7-yuc34665f.xn--1o0d; ; ; # ڳ7.𐹽 +\u06B3\uFE047。𐹽; \u06B37.𐹽; [B1, B2, V6]; xn--7-yuc34665f.xn--1o0d; ; ; # ڳ7.𐹽 +xn--7-yuc34665f.xn--1o0d; \u06B37.𐹽; [B1, B2, V6]; xn--7-yuc34665f.xn--1o0d; ; ; # ڳ7.𐹽 +.\u200C⫞; .\u200C⫞; [B1, C1, V6]; xn--pw6h.xn--0ug283b; ; xn--pw6h.xn--53i; [B1, V6] # .⫞ +.\u200C⫞; ; [B1, C1, V6]; xn--pw6h.xn--0ug283b; ; xn--pw6h.xn--53i; [B1, V6] # .⫞ +xn--pw6h.xn--53i; .⫞; [B1, V6]; xn--pw6h.xn--53i; ; ; # .⫞ +xn--pw6h.xn--0ug283b; .\u200C⫞; [B1, C1, V6]; xn--pw6h.xn--0ug283b; ; ; # .⫞ +-.\u06E0ᢚ-; ; [V3, V5, V6]; xn----qi38c.xn----jxc827k; ; ; # -.۠ᢚ- +xn----qi38c.xn----jxc827k; -.\u06E0ᢚ-; [V3, V5, V6]; xn----qi38c.xn----jxc827k; ; ; # -.۠ᢚ- +⌁\u200D𑄴.\u200C𝟩\u066C; ⌁\u200D𑄴.\u200C7\u066C; [B1, C1, C2]; xn--1ug38i2093a.xn--7-xqc297q; ; xn--nhh5394g.xn--7-xqc; [B1] # ⌁𑄴.7٬ +⌁\u200D𑄴.\u200C7\u066C; ; [B1, C1, C2]; xn--1ug38i2093a.xn--7-xqc297q; ; xn--nhh5394g.xn--7-xqc; [B1] # ⌁𑄴.7٬ +xn--nhh5394g.xn--7-xqc; ⌁𑄴.7\u066C; [B1]; xn--nhh5394g.xn--7-xqc; ; ; # ⌁𑄴.7٬ +xn--1ug38i2093a.xn--7-xqc297q; ⌁\u200D𑄴.\u200C7\u066C; [B1, C1, C2]; xn--1ug38i2093a.xn--7-xqc297q; ; ; # ⌁𑄴.7٬ +︒\uFD05\u0E37\uFEFC。岓\u1BF2ᡂ; ︒\u0635\u0649\u0E37\u0644\u0627.岓\u1BF2ᡂ; [B1, V6]; xn--mgb1a7bt462hf267a.xn--17e10qe61f9r71s; ; ; # ︒صىืلا.岓᯲ᡂ +。\u0635\u0649\u0E37\u0644\u0627。岓\u1BF2ᡂ; .\u0635\u0649\u0E37\u0644\u0627.岓\u1BF2ᡂ; [V6, X4_2]; .xn--mgb1a7bt462h.xn--17e10qe61f9r71s; [V6, A4_2]; ; # .صىืلا.岓᯲ᡂ +.xn--mgb1a7bt462h.xn--17e10qe61f9r71s; .\u0635\u0649\u0E37\u0644\u0627.岓\u1BF2ᡂ; [V6, X4_2]; .xn--mgb1a7bt462h.xn--17e10qe61f9r71s; [V6, A4_2]; ; # .صىืلا.岓᯲ᡂ +xn--mgb1a7bt462hf267a.xn--17e10qe61f9r71s; ︒\u0635\u0649\u0E37\u0644\u0627.岓\u1BF2ᡂ; [B1, V6]; xn--mgb1a7bt462hf267a.xn--17e10qe61f9r71s; ; ; # ︒صىืلا.岓᯲ᡂ +𐹨。8𑁆; 𐹨.8𑁆; [B1]; xn--go0d.xn--8-yu7i; ; ; # 𐹨.8𑁆 +xn--go0d.xn--8-yu7i; 𐹨.8𑁆; [B1]; xn--go0d.xn--8-yu7i; ; ; # 𐹨.8𑁆 +𞀕\u0D43.ꡚ\u08FA𐹰\u0D44; 𞀕\u0D43.ꡚ\u08FA𐹰\u0D44; [B1, B5, B6, V5]; xn--mxc5210v.xn--90b01t8u2p1ltd; ; ; # 𞀕ൃ.ꡚࣺ𐹰ൄ +𞀕\u0D43.ꡚ\u08FA𐹰\u0D44; ; [B1, B5, B6, V5]; xn--mxc5210v.xn--90b01t8u2p1ltd; ; ; # 𞀕ൃ.ꡚࣺ𐹰ൄ +xn--mxc5210v.xn--90b01t8u2p1ltd; 𞀕\u0D43.ꡚ\u08FA𐹰\u0D44; [B1, B5, B6, V5]; xn--mxc5210v.xn--90b01t8u2p1ltd; ; ; # 𞀕ൃ.ꡚࣺ𐹰ൄ +\u0303。; \u0303.; [B1, B5, B6, V6]; xn--nsa1265kp9z9e.xn--xt36e; ; ; # ̃. +\u0303。; \u0303.; [B1, B5, B6, V6]; xn--nsa1265kp9z9e.xn--xt36e; ; ; # ̃. +xn--nsa1265kp9z9e.xn--xt36e; \u0303.; [B1, B5, B6, V6]; xn--nsa1265kp9z9e.xn--xt36e; ; ; # ̃. +ᢌ.-\u085A; ᢌ.-\u085A; [V3]; xn--59e.xn----5jd; ; ; # ᢌ.-࡚ +ᢌ.-\u085A; ; [V3]; xn--59e.xn----5jd; ; ; # ᢌ.-࡚ +xn--59e.xn----5jd; ᢌ.-\u085A; [V3]; xn--59e.xn----5jd; ; ; # ᢌ.-࡚ +𥛛𑘶。𐹬\u0BCD; 𥛛𑘶.𐹬\u0BCD; [B1, V6]; xn--jb2dj685c.xn--xmc5562kmcb; ; ; # 𥛛𑘶.𐹬் +𥛛𑘶。𐹬\u0BCD; 𥛛𑘶.𐹬\u0BCD; [B1, V6]; xn--jb2dj685c.xn--xmc5562kmcb; ; ; # 𥛛𑘶.𐹬் +xn--jb2dj685c.xn--xmc5562kmcb; 𥛛𑘶.𐹬\u0BCD; [B1, V6]; xn--jb2dj685c.xn--xmc5562kmcb; ; ; # 𥛛𑘶.𐹬் +Ⴐ\u077F.\u200C; Ⴐ\u077F.\u200C; [B1, B5, B6, C1, V6]; xn--gqb918b.xn--0ug; ; xn--gqb918b.; [B5, B6, V6] # Ⴐݿ. +Ⴐ\u077F.\u200C; ; [B1, B5, B6, C1, V6]; xn--gqb918b.xn--0ug; ; xn--gqb918b.; [B5, B6, V6] # Ⴐݿ. +ⴐ\u077F.\u200C; ; [B1, B5, B6, C1]; xn--gqb743q.xn--0ug; ; xn--gqb743q.; [B5, B6] # ⴐݿ. +xn--gqb743q.; ⴐ\u077F.; [B5, B6]; xn--gqb743q.; ; ; # ⴐݿ. +xn--gqb743q.xn--0ug; ⴐ\u077F.\u200C; [B1, B5, B6, C1]; xn--gqb743q.xn--0ug; ; ; # ⴐݿ. +xn--gqb918b.; Ⴐ\u077F.; [B5, B6, V6]; xn--gqb918b.; ; ; # Ⴐݿ. +xn--gqb918b.xn--0ug; Ⴐ\u077F.\u200C; [B1, B5, B6, C1, V6]; xn--gqb918b.xn--0ug; ; ; # Ⴐݿ. +ⴐ\u077F.\u200C; ⴐ\u077F.\u200C; [B1, B5, B6, C1]; xn--gqb743q.xn--0ug; ; xn--gqb743q.; [B5, B6] # ⴐݿ. +🄅𑲞-⒈。\u200Dᠩ\u06A5; 🄅𑲞-⒈.\u200Dᠩ\u06A5; [B1, C2, V6]; xn----ecp8796hjtvg.xn--7jb180gexf; ; xn----ecp8796hjtvg.xn--7jb180g; [B1, B5, B6, V6] # 🄅𑲞-⒈.ᠩڥ +4,𑲞-1.。\u200Dᠩ\u06A5; 4,𑲞-1..\u200Dᠩ\u06A5; [B1, C2, V6, X4_2]; xn--4,-1-w401a..xn--7jb180gexf; [B1, C2, V6, A4_2]; xn--4,-1-w401a..xn--7jb180g; [B1, B5, B6, V6, A4_2] # 4,𑲞-1..ᠩڥ +xn--4,-1-w401a..xn--7jb180g; 4,𑲞-1..ᠩ\u06A5; [B1, B5, B6, V6, X4_2]; xn--4,-1-w401a..xn--7jb180g; [B1, B5, B6, V6, A4_2]; ; # 4,𑲞-1..ᠩڥ +xn--4,-1-w401a..xn--7jb180gexf; 4,𑲞-1..\u200Dᠩ\u06A5; [B1, C2, V6, X4_2]; xn--4,-1-w401a..xn--7jb180gexf; [B1, C2, V6, A4_2]; ; # 4,𑲞-1..ᠩڥ +xn----ecp8796hjtvg.xn--7jb180g; 🄅𑲞-⒈.ᠩ\u06A5; [B1, B5, B6, V6]; xn----ecp8796hjtvg.xn--7jb180g; ; ; # 🄅𑲞-⒈.ᠩڥ +xn----ecp8796hjtvg.xn--7jb180gexf; 🄅𑲞-⒈.\u200Dᠩ\u06A5; [B1, C2, V6]; xn----ecp8796hjtvg.xn--7jb180gexf; ; ; # 🄅𑲞-⒈.ᠩڥ +。𞤪; .𞤪; [B2, B3, V6]; xn--4240a.xn--ie6h83808a; ; ; # .𞤪 +。𞤈; .𞤪; [B2, B3, V6]; xn--4240a.xn--ie6h83808a; ; ; # .𞤪 +xn--4240a.xn--ie6h83808a; .𞤪; [B2, B3, V6]; xn--4240a.xn--ie6h83808a; ; ; # .𞤪 +\u05C1۲。𐮊\u066C𝨊鄨; \u05C1۲.𐮊\u066C𝨊鄨; [B1, B2, B3, V5]; xn--pdb42d.xn--lib6412enztdwv6h; ; ; # ׁ۲.𐮊٬𝨊鄨 +\u05C1۲。𐮊\u066C𝨊鄨; \u05C1۲.𐮊\u066C𝨊鄨; [B1, B2, B3, V5]; xn--pdb42d.xn--lib6412enztdwv6h; ; ; # ׁ۲.𐮊٬𝨊鄨 +xn--pdb42d.xn--lib6412enztdwv6h; \u05C1۲.𐮊\u066C𝨊鄨; [B1, B2, B3, V5]; xn--pdb42d.xn--lib6412enztdwv6h; ; ; # ׁ۲.𐮊٬𝨊鄨 +-ꡁ。\u1A69\u0BCD-; -ꡁ.\u1A69\u0BCD-; [B1, B2, B3, V3, V5, V6]; xn----be4e4276f.xn----lze333i; ; ; # -ꡁ.ᩩ்- +xn----be4e4276f.xn----lze333i; -ꡁ.\u1A69\u0BCD-; [B1, B2, B3, V3, V5, V6]; xn----be4e4276f.xn----lze333i; ; ; # -ꡁ.ᩩ்- +\u1039-🞢.ß; \u1039-🞢.ß; [V5, V6]; xn----9tg11172akr8b.xn--zca; ; xn----9tg11172akr8b.ss; # ္-🞢.ß +\u1039-🞢.ß; ; [V5, V6]; xn----9tg11172akr8b.xn--zca; ; xn----9tg11172akr8b.ss; # ္-🞢.ß +\u1039-🞢.SS; \u1039-🞢.ss; [V5, V6]; xn----9tg11172akr8b.ss; ; ; # ္-🞢.ss +\u1039-🞢.ss; ; [V5, V6]; xn----9tg11172akr8b.ss; ; ; # ္-🞢.ss +\u1039-🞢.Ss; \u1039-🞢.ss; [V5, V6]; xn----9tg11172akr8b.ss; ; ; # ္-🞢.ss +xn----9tg11172akr8b.ss; \u1039-🞢.ss; [V5, V6]; xn----9tg11172akr8b.ss; ; ; # ္-🞢.ss +xn----9tg11172akr8b.xn--zca; \u1039-🞢.ß; [V5, V6]; xn----9tg11172akr8b.xn--zca; ; ; # ္-🞢.ß +\u1039-🞢.SS; \u1039-🞢.ss; [V5, V6]; xn----9tg11172akr8b.ss; ; ; # ္-🞢.ss +\u1039-🞢.ss; \u1039-🞢.ss; [V5, V6]; xn----9tg11172akr8b.ss; ; ; # ္-🞢.ss +\u1039-🞢.Ss; \u1039-🞢.ss; [V5, V6]; xn----9tg11172akr8b.ss; ; ; # ္-🞢.ss +\uFCF2-\u200C。Ⴟ\u200C␣; \u0640\u064E\u0651-\u200C.Ⴟ\u200C␣; [B3, B6, C1, V6]; xn----eoc6bm0504a.xn--3nd849e05c; ; xn----eoc6bm.xn--3nd240h; [B3, B6, V3, V6] # ـَّ-.Ⴟ␣ +\u0640\u064E\u0651-\u200C。Ⴟ\u200C␣; \u0640\u064E\u0651-\u200C.Ⴟ\u200C␣; [B3, B6, C1, V6]; xn----eoc6bm0504a.xn--3nd849e05c; ; xn----eoc6bm.xn--3nd240h; [B3, B6, V3, V6] # ـَّ-.Ⴟ␣ +\u0640\u064E\u0651-\u200C。ⴟ\u200C␣; \u0640\u064E\u0651-\u200C.ⴟ\u200C␣; [B3, B6, C1]; xn----eoc6bm0504a.xn--0ug13nd0j; ; xn----eoc6bm.xn--xph904a; [B3, B6, V3] # ـَّ-.ⴟ␣ +xn----eoc6bm.xn--xph904a; \u0640\u064E\u0651-.ⴟ␣; [B3, B6, V3]; xn----eoc6bm.xn--xph904a; ; ; # ـَّ-.ⴟ␣ +xn----eoc6bm0504a.xn--0ug13nd0j; \u0640\u064E\u0651-\u200C.ⴟ\u200C␣; [B3, B6, C1]; xn----eoc6bm0504a.xn--0ug13nd0j; ; ; # ـَّ-.ⴟ␣ +xn----eoc6bm.xn--3nd240h; \u0640\u064E\u0651-.Ⴟ␣; [B3, B6, V3, V6]; xn----eoc6bm.xn--3nd240h; ; ; # ـَّ-.Ⴟ␣ +xn----eoc6bm0504a.xn--3nd849e05c; \u0640\u064E\u0651-\u200C.Ⴟ\u200C␣; [B3, B6, C1, V6]; xn----eoc6bm0504a.xn--3nd849e05c; ; ; # ـَّ-.Ⴟ␣ +\uFCF2-\u200C。ⴟ\u200C␣; \u0640\u064E\u0651-\u200C.ⴟ\u200C␣; [B3, B6, C1]; xn----eoc6bm0504a.xn--0ug13nd0j; ; xn----eoc6bm.xn--xph904a; [B3, B6, V3] # ـَّ-.ⴟ␣ +\u0D4D-\u200D\u200C。₅≠; \u0D4D-\u200D\u200C.5≠; [C1, C2, V5, V6]; xn----jmf215lda.xn--5-ufo50192e; ; xn----jmf.xn--5-ufo50192e; [V3, V5, V6] # ്-.5≠ +\u0D4D-\u200D\u200C。₅=\u0338; \u0D4D-\u200D\u200C.5≠; [C1, C2, V5, V6]; xn----jmf215lda.xn--5-ufo50192e; ; xn----jmf.xn--5-ufo50192e; [V3, V5, V6] # ്-.5≠ +\u0D4D-\u200D\u200C。5≠; \u0D4D-\u200D\u200C.5≠; [C1, C2, V5, V6]; xn----jmf215lda.xn--5-ufo50192e; ; xn----jmf.xn--5-ufo50192e; [V3, V5, V6] # ്-.5≠ +\u0D4D-\u200D\u200C。5=\u0338; \u0D4D-\u200D\u200C.5≠; [C1, C2, V5, V6]; xn----jmf215lda.xn--5-ufo50192e; ; xn----jmf.xn--5-ufo50192e; [V3, V5, V6] # ്-.5≠ +xn----jmf.xn--5-ufo50192e; \u0D4D-.5≠; [V3, V5, V6]; xn----jmf.xn--5-ufo50192e; ; ; # ്-.5≠ +xn----jmf215lda.xn--5-ufo50192e; \u0D4D-\u200D\u200C.5≠; [C1, C2, V5, V6]; xn----jmf215lda.xn--5-ufo50192e; ; ; # ്-.5≠ +锣。\u0A4D; 锣.\u0A4D; [V5, V6]; xn--gc5a.xn--ybc83044ppga; ; ; # 锣.੍ +xn--gc5a.xn--ybc83044ppga; 锣.\u0A4D; [V5, V6]; xn--gc5a.xn--ybc83044ppga; ; ; # 锣.੍ +\u063D𑈾.\u0649\u200D\uA92B; \u063D𑈾.\u0649\u200D\uA92B; [B3, C2]; xn--8gb2338k.xn--lhb603k060h; ; xn--8gb2338k.xn--lhb0154f; [] # ؽ𑈾.ى꤫ +\u063D𑈾.\u0649\u200D\uA92B; ; [B3, C2]; xn--8gb2338k.xn--lhb603k060h; ; xn--8gb2338k.xn--lhb0154f; [] # ؽ𑈾.ى꤫ +xn--8gb2338k.xn--lhb0154f; \u063D𑈾.\u0649\uA92B; ; xn--8gb2338k.xn--lhb0154f; ; ; # ؽ𑈾.ى꤫ +\u063D𑈾.\u0649\uA92B; ; ; xn--8gb2338k.xn--lhb0154f; ; ; # ؽ𑈾.ى꤫ +xn--8gb2338k.xn--lhb603k060h; \u063D𑈾.\u0649\u200D\uA92B; [B3, C2]; xn--8gb2338k.xn--lhb603k060h; ; ; # ؽ𑈾.ى꤫ +\u0666⁴Ⴅ.\u08BD\u200C; \u06664Ⴅ.\u08BD\u200C; [B1, B3, C1, V6]; xn--4-kqc489e.xn--jzb840j; ; xn--4-kqc489e.xn--jzb; [B1, V6] # ٦4Ⴅ.ࢽ +\u06664Ⴅ.\u08BD\u200C; ; [B1, B3, C1, V6]; xn--4-kqc489e.xn--jzb840j; ; xn--4-kqc489e.xn--jzb; [B1, V6] # ٦4Ⴅ.ࢽ +\u06664ⴅ.\u08BD\u200C; ; [B1, B3, C1]; xn--4-kqc6770a.xn--jzb840j; ; xn--4-kqc6770a.xn--jzb; [B1] # ٦4ⴅ.ࢽ +xn--4-kqc6770a.xn--jzb; \u06664ⴅ.\u08BD; [B1]; xn--4-kqc6770a.xn--jzb; ; ; # ٦4ⴅ.ࢽ +xn--4-kqc6770a.xn--jzb840j; \u06664ⴅ.\u08BD\u200C; [B1, B3, C1]; xn--4-kqc6770a.xn--jzb840j; ; ; # ٦4ⴅ.ࢽ +xn--4-kqc489e.xn--jzb; \u06664Ⴅ.\u08BD; [B1, V6]; xn--4-kqc489e.xn--jzb; ; ; # ٦4Ⴅ.ࢽ +xn--4-kqc489e.xn--jzb840j; \u06664Ⴅ.\u08BD\u200C; [B1, B3, C1, V6]; xn--4-kqc489e.xn--jzb840j; ; ; # ٦4Ⴅ.ࢽ +\u0666⁴ⴅ.\u08BD\u200C; \u06664ⴅ.\u08BD\u200C; [B1, B3, C1]; xn--4-kqc6770a.xn--jzb840j; ; xn--4-kqc6770a.xn--jzb; [B1] # ٦4ⴅ.ࢽ +ჁႱ6\u0318。ß\u1B03; ჁႱ6\u0318.ß\u1B03; [V6]; xn--6-8cb555h2b.xn--zca894k; ; xn--6-8cb555h2b.xn--ss-2vq; # ჁႱ6̘.ßᬃ +ⴡⴑ6\u0318。ß\u1B03; ⴡⴑ6\u0318.ß\u1B03; ; xn--6-8cb7433a2ba.xn--zca894k; ; xn--6-8cb7433a2ba.xn--ss-2vq; # ⴡⴑ6̘.ßᬃ +ჁႱ6\u0318。SS\u1B03; ჁႱ6\u0318.ss\u1B03; [V6]; xn--6-8cb555h2b.xn--ss-2vq; ; ; # ჁႱ6̘.ssᬃ +ⴡⴑ6\u0318。ss\u1B03; ⴡⴑ6\u0318.ss\u1B03; ; xn--6-8cb7433a2ba.xn--ss-2vq; ; ; # ⴡⴑ6̘.ssᬃ +Ⴡⴑ6\u0318。Ss\u1B03; Ⴡⴑ6\u0318.ss\u1B03; [V6]; xn--6-8cb306hms1a.xn--ss-2vq; ; ; # Ⴡⴑ6̘.ssᬃ +xn--6-8cb306hms1a.xn--ss-2vq; Ⴡⴑ6\u0318.ss\u1B03; [V6]; xn--6-8cb306hms1a.xn--ss-2vq; ; ; # Ⴡⴑ6̘.ssᬃ +xn--6-8cb7433a2ba.xn--ss-2vq; ⴡⴑ6\u0318.ss\u1B03; ; xn--6-8cb7433a2ba.xn--ss-2vq; ; ; # ⴡⴑ6̘.ssᬃ +ⴡⴑ6\u0318.ss\u1B03; ; ; xn--6-8cb7433a2ba.xn--ss-2vq; ; ; # ⴡⴑ6̘.ssᬃ +ჁႱ6\u0318.SS\u1B03; ჁႱ6\u0318.ss\u1B03; [V6]; xn--6-8cb555h2b.xn--ss-2vq; ; ; # ჁႱ6̘.ssᬃ +Ⴡⴑ6\u0318.Ss\u1B03; Ⴡⴑ6\u0318.ss\u1B03; [V6]; xn--6-8cb306hms1a.xn--ss-2vq; ; ; # Ⴡⴑ6̘.ssᬃ +xn--6-8cb555h2b.xn--ss-2vq; ჁႱ6\u0318.ss\u1B03; [V6]; xn--6-8cb555h2b.xn--ss-2vq; ; ; # ჁႱ6̘.ssᬃ +xn--6-8cb7433a2ba.xn--zca894k; ⴡⴑ6\u0318.ß\u1B03; ; xn--6-8cb7433a2ba.xn--zca894k; ; ; # ⴡⴑ6̘.ßᬃ +ⴡⴑ6\u0318.ß\u1B03; ; ; xn--6-8cb7433a2ba.xn--zca894k; ; xn--6-8cb7433a2ba.xn--ss-2vq; # ⴡⴑ6̘.ßᬃ +xn--6-8cb555h2b.xn--zca894k; ჁႱ6\u0318.ß\u1B03; [V6]; xn--6-8cb555h2b.xn--zca894k; ; ; # ჁႱ6̘.ßᬃ +。≯𑋪; .≯𑋪; [V6]; xn--eo08b.xn--hdh3385g; ; ; # .≯𑋪 +。>\u0338𑋪; .≯𑋪; [V6]; xn--eo08b.xn--hdh3385g; ; ; # .≯𑋪 +。≯𑋪; .≯𑋪; [V6]; xn--eo08b.xn--hdh3385g; ; ; # .≯𑋪 +。>\u0338𑋪; .≯𑋪; [V6]; xn--eo08b.xn--hdh3385g; ; ; # .≯𑋪 +xn--eo08b.xn--hdh3385g; .≯𑋪; [V6]; xn--eo08b.xn--hdh3385g; ; ; # .≯𑋪 +\u065A۲。\u200C-\u1BF3\u08E2; \u065A۲.\u200C-\u1BF3\u08E2; [B1, C1, V5, V6]; xn--2hb81a.xn----xrd657l30d; ; xn--2hb81a.xn----xrd657l; [B1, V3, V5, V6] # ٚ۲.-᯳ +xn--2hb81a.xn----xrd657l; \u065A۲.-\u1BF3\u08E2; [B1, V3, V5, V6]; xn--2hb81a.xn----xrd657l; ; ; # ٚ۲.-᯳ +xn--2hb81a.xn----xrd657l30d; \u065A۲.\u200C-\u1BF3\u08E2; [B1, C1, V5, V6]; xn--2hb81a.xn----xrd657l30d; ; ; # ٚ۲.-᯳ +󠄏𖬴。\uFFA0; 𖬴.\uFFA0; [V5, V6]; xn--619ep9154c.xn--cl7c; ; ; # 𖬴. +󠄏𖬴。\u1160; 𖬴.\u1160; [V5, V6]; xn--619ep9154c.xn--psd; ; ; # 𖬴. +xn--619ep9154c.xn--psd; 𖬴.\u1160; [V5, V6]; xn--619ep9154c.xn--psd; ; ; # 𖬴. +xn--619ep9154c.xn--cl7c; 𖬴.\uFFA0; [V5, V6]; xn--619ep9154c.xn--cl7c; ; ; # 𖬴. +ß⒈\u0760\uD7AE.󠅄\u0605; ß⒈\u0760\uD7AE.\u0605; [B5, V6]; xn--zca444a0s1ao12n.xn--nfb09923ifkyyb; ; xn--ss-6ke9690a0g1q.xn--nfb09923ifkyyb; # ß⒈ݠ. +ß1.\u0760\uD7AE.󠅄\u0605; ß1.\u0760\uD7AE.\u0605; [B2, B3, B5, V6]; xn--1-pfa.xn--kpb6677h.xn--nfb09923ifkyyb; ; ss1.xn--kpb6677h.xn--nfb09923ifkyyb; # ß1.ݠ. +SS1.\u0760\uD7AE.󠅄\u0605; ss1.\u0760\uD7AE.\u0605; [B2, B3, B5, V6]; ss1.xn--kpb6677h.xn--nfb09923ifkyyb; ; ; # ss1.ݠ. +ss1.\u0760\uD7AE.󠅄\u0605; ss1.\u0760\uD7AE.\u0605; [B2, B3, B5, V6]; ss1.xn--kpb6677h.xn--nfb09923ifkyyb; ; ; # ss1.ݠ. +Ss1.\u0760\uD7AE.󠅄\u0605; ss1.\u0760\uD7AE.\u0605; [B2, B3, B5, V6]; ss1.xn--kpb6677h.xn--nfb09923ifkyyb; ; ; # ss1.ݠ. +ss1.xn--kpb6677h.xn--nfb09923ifkyyb; ss1.\u0760\uD7AE.\u0605; [B2, B3, B5, V6]; ss1.xn--kpb6677h.xn--nfb09923ifkyyb; ; ; # ss1.ݠ. +xn--1-pfa.xn--kpb6677h.xn--nfb09923ifkyyb; ß1.\u0760\uD7AE.\u0605; [B2, B3, B5, V6]; xn--1-pfa.xn--kpb6677h.xn--nfb09923ifkyyb; ; ; # ß1.ݠ. +SS⒈\u0760\uD7AE.󠅄\u0605; ss⒈\u0760\uD7AE.\u0605; [B5, V6]; xn--ss-6ke9690a0g1q.xn--nfb09923ifkyyb; ; ; # ss⒈ݠ. +ss⒈\u0760\uD7AE.󠅄\u0605; ss⒈\u0760\uD7AE.\u0605; [B5, V6]; xn--ss-6ke9690a0g1q.xn--nfb09923ifkyyb; ; ; # ss⒈ݠ. +Ss⒈\u0760\uD7AE.󠅄\u0605; ss⒈\u0760\uD7AE.\u0605; [B5, V6]; xn--ss-6ke9690a0g1q.xn--nfb09923ifkyyb; ; ; # ss⒈ݠ. +xn--ss-6ke9690a0g1q.xn--nfb09923ifkyyb; ss⒈\u0760\uD7AE.\u0605; [B5, V6]; xn--ss-6ke9690a0g1q.xn--nfb09923ifkyyb; ; ; # ss⒈ݠ. +xn--zca444a0s1ao12n.xn--nfb09923ifkyyb; ß⒈\u0760\uD7AE.\u0605; [B5, V6]; xn--zca444a0s1ao12n.xn--nfb09923ifkyyb; ; ; # ß⒈ݠ. +.𐋱₂; .𐋱2; [V6]; xn--vi56e.xn--2-w91i; ; ; # .𐋱2 +.𐋱2; ; [V6]; xn--vi56e.xn--2-w91i; ; ; # .𐋱2 +xn--vi56e.xn--2-w91i; .𐋱2; [V6]; xn--vi56e.xn--2-w91i; ; ; # .𐋱2 +\u0716\u0947。-ß\u06A5\u200C; \u0716\u0947.-ß\u06A5\u200C; [B1, C1, V3]; xn--gnb63i.xn----qfa845bhx4a; ; xn--gnb63i.xn---ss-4ef; [B1, V3] # ܖे.-ßڥ +\u0716\u0947。-SS\u06A5\u200C; \u0716\u0947.-ss\u06A5\u200C; [B1, C1, V3]; xn--gnb63i.xn---ss-4ef9263a; ; xn--gnb63i.xn---ss-4ef; [B1, V3] # ܖे.-ssڥ +\u0716\u0947。-ss\u06A5\u200C; \u0716\u0947.-ss\u06A5\u200C; [B1, C1, V3]; xn--gnb63i.xn---ss-4ef9263a; ; xn--gnb63i.xn---ss-4ef; [B1, V3] # ܖे.-ssڥ +\u0716\u0947。-Ss\u06A5\u200C; \u0716\u0947.-ss\u06A5\u200C; [B1, C1, V3]; xn--gnb63i.xn---ss-4ef9263a; ; xn--gnb63i.xn---ss-4ef; [B1, V3] # ܖे.-ssڥ +xn--gnb63i.xn---ss-4ef; \u0716\u0947.-ss\u06A5; [B1, V3]; xn--gnb63i.xn---ss-4ef; ; ; # ܖे.-ssڥ +xn--gnb63i.xn---ss-4ef9263a; \u0716\u0947.-ss\u06A5\u200C; [B1, C1, V3]; xn--gnb63i.xn---ss-4ef9263a; ; ; # ܖे.-ssڥ +xn--gnb63i.xn----qfa845bhx4a; \u0716\u0947.-ß\u06A5\u200C; [B1, C1, V3]; xn--gnb63i.xn----qfa845bhx4a; ; ; # ܖे.-ßڥ +\u1BA9\u200D\u062A.\u1CD5䷉Ⴡ; \u1BA9\u200D\u062A.\u1CD5䷉Ⴡ; [B1, C2, V5, V6]; xn--pgb911imgdrw34r.xn--5nd792dgv3b; ; xn--pgb911izv33i.xn--5nd792dgv3b; [B1, V5, V6] # ᮩت.᳕䷉Ⴡ +\u1BA9\u200D\u062A.\u1CD5䷉Ⴡ; ; [B1, C2, V5, V6]; xn--pgb911imgdrw34r.xn--5nd792dgv3b; ; xn--pgb911izv33i.xn--5nd792dgv3b; [B1, V5, V6] # ᮩت.᳕䷉Ⴡ +\u1BA9\u200D\u062A.\u1CD5䷉ⴡ; ; [B1, C2, V5, V6]; xn--pgb911imgdrw34r.xn--i6f270etuy; ; xn--pgb911izv33i.xn--i6f270etuy; [B1, V5, V6] # ᮩت.᳕䷉ⴡ +xn--pgb911izv33i.xn--i6f270etuy; \u1BA9\u062A.\u1CD5䷉ⴡ; [B1, V5, V6]; xn--pgb911izv33i.xn--i6f270etuy; ; ; # ᮩت.᳕䷉ⴡ +xn--pgb911imgdrw34r.xn--i6f270etuy; \u1BA9\u200D\u062A.\u1CD5䷉ⴡ; [B1, C2, V5, V6]; xn--pgb911imgdrw34r.xn--i6f270etuy; ; ; # ᮩت.᳕䷉ⴡ +xn--pgb911izv33i.xn--5nd792dgv3b; \u1BA9\u062A.\u1CD5䷉Ⴡ; [B1, V5, V6]; xn--pgb911izv33i.xn--5nd792dgv3b; ; ; # ᮩت.᳕䷉Ⴡ +xn--pgb911imgdrw34r.xn--5nd792dgv3b; \u1BA9\u200D\u062A.\u1CD5䷉Ⴡ; [B1, C2, V5, V6]; xn--pgb911imgdrw34r.xn--5nd792dgv3b; ; ; # ᮩت.᳕䷉Ⴡ +\u1BA9\u200D\u062A.\u1CD5䷉ⴡ; \u1BA9\u200D\u062A.\u1CD5䷉ⴡ; [B1, C2, V5, V6]; xn--pgb911imgdrw34r.xn--i6f270etuy; ; xn--pgb911izv33i.xn--i6f270etuy; [B1, V5, V6] # ᮩت.᳕䷉ⴡ +\u2DBF.ß\u200D; ; [C2, V6]; xn--7pj.xn--zca870n; ; xn--7pj.ss; [V6] # .ß +\u2DBF.SS\u200D; \u2DBF.ss\u200D; [C2, V6]; xn--7pj.xn--ss-n1t; ; xn--7pj.ss; [V6] # .ss +\u2DBF.ss\u200D; ; [C2, V6]; xn--7pj.xn--ss-n1t; ; xn--7pj.ss; [V6] # .ss +\u2DBF.Ss\u200D; \u2DBF.ss\u200D; [C2, V6]; xn--7pj.xn--ss-n1t; ; xn--7pj.ss; [V6] # .ss +xn--7pj.ss; \u2DBF.ss; [V6]; xn--7pj.ss; ; ; # .ss +xn--7pj.xn--ss-n1t; \u2DBF.ss\u200D; [C2, V6]; xn--7pj.xn--ss-n1t; ; ; # .ss +xn--7pj.xn--zca870n; \u2DBF.ß\u200D; [C2, V6]; xn--7pj.xn--zca870n; ; ; # .ß +\u1BF3︒.\u062A≯ꡂ; ; [B2, B3, B6, V5, V6]; xn--1zf8957g.xn--pgb885lry5g; ; ; # ᯳︒.ت≯ꡂ +\u1BF3︒.\u062A>\u0338ꡂ; \u1BF3︒.\u062A≯ꡂ; [B2, B3, B6, V5, V6]; xn--1zf8957g.xn--pgb885lry5g; ; ; # ᯳︒.ت≯ꡂ +\u1BF3。.\u062A≯ꡂ; \u1BF3..\u062A≯ꡂ; [B2, B3, V5, X4_2]; xn--1zf..xn--pgb885lry5g; [B2, B3, V5, A4_2]; ; # ᯳..ت≯ꡂ +\u1BF3。.\u062A>\u0338ꡂ; \u1BF3..\u062A≯ꡂ; [B2, B3, V5, X4_2]; xn--1zf..xn--pgb885lry5g; [B2, B3, V5, A4_2]; ; # ᯳..ت≯ꡂ +xn--1zf..xn--pgb885lry5g; \u1BF3..\u062A≯ꡂ; [B2, B3, V5, X4_2]; xn--1zf..xn--pgb885lry5g; [B2, B3, V5, A4_2]; ; # ᯳..ت≯ꡂ +xn--1zf8957g.xn--pgb885lry5g; \u1BF3︒.\u062A≯ꡂ; [B2, B3, B6, V5, V6]; xn--1zf8957g.xn--pgb885lry5g; ; ; # ᯳︒.ت≯ꡂ +≮≠。-𫠆\u06B7𐹪; ≮≠.-𫠆\u06B7𐹪; [B1, V3, V6]; xn--1ch1a29470f.xn----7uc5363rc1rn; ; ; # ≮≠.-𫠆ڷ𐹪 +<\u0338=\u0338。-𫠆\u06B7𐹪; ≮≠.-𫠆\u06B7𐹪; [B1, V3, V6]; xn--1ch1a29470f.xn----7uc5363rc1rn; ; ; # ≮≠.-𫠆ڷ𐹪 +≮≠。-𫠆\u06B7𐹪; ≮≠.-𫠆\u06B7𐹪; [B1, V3, V6]; xn--1ch1a29470f.xn----7uc5363rc1rn; ; ; # ≮≠.-𫠆ڷ𐹪 +<\u0338=\u0338。-𫠆\u06B7𐹪; ≮≠.-𫠆\u06B7𐹪; [B1, V3, V6]; xn--1ch1a29470f.xn----7uc5363rc1rn; ; ; # ≮≠.-𫠆ڷ𐹪 +xn--1ch1a29470f.xn----7uc5363rc1rn; ≮≠.-𫠆\u06B7𐹪; [B1, V3, V6]; xn--1ch1a29470f.xn----7uc5363rc1rn; ; ; # ≮≠.-𫠆ڷ𐹪 +𐹡\u0777。ꡂ; 𐹡\u0777.ꡂ; [B1]; xn--7pb5275k.xn--bc9a; ; ; # 𐹡ݷ.ꡂ +xn--7pb5275k.xn--bc9a; 𐹡\u0777.ꡂ; [B1]; xn--7pb5275k.xn--bc9a; ; ; # 𐹡ݷ.ꡂ +Ⴉ𝆅\u0619.ß𐧦𐹳\u0775; ; [B5, B6, V6]; xn--7fb125cjv87a7xvz.xn--zca684a699vf2d; ; xn--7fb125cjv87a7xvz.xn--ss-zme7575xp0e; # Ⴉؙ𝆅.ß𐧦𐹳ݵ +ⴉ𝆅\u0619.ß𐧦𐹳\u0775; ; [B5, B6, V6]; xn--7fb940rwt3z7xvz.xn--zca684a699vf2d; ; xn--7fb940rwt3z7xvz.xn--ss-zme7575xp0e; # ⴉؙ𝆅.ß𐧦𐹳ݵ +Ⴉ𝆅\u0619.SS𐧦𐹳\u0775; Ⴉ𝆅\u0619.ss𐧦𐹳\u0775; [B5, B6, V6]; xn--7fb125cjv87a7xvz.xn--ss-zme7575xp0e; ; ; # Ⴉؙ𝆅.ss𐧦𐹳ݵ +ⴉ𝆅\u0619.ss𐧦𐹳\u0775; ; [B5, B6, V6]; xn--7fb940rwt3z7xvz.xn--ss-zme7575xp0e; ; ; # ⴉؙ𝆅.ss𐧦𐹳ݵ +Ⴉ𝆅\u0619.Ss𐧦𐹳\u0775; Ⴉ𝆅\u0619.ss𐧦𐹳\u0775; [B5, B6, V6]; xn--7fb125cjv87a7xvz.xn--ss-zme7575xp0e; ; ; # Ⴉؙ𝆅.ss𐧦𐹳ݵ +xn--7fb125cjv87a7xvz.xn--ss-zme7575xp0e; Ⴉ𝆅\u0619.ss𐧦𐹳\u0775; [B5, B6, V6]; xn--7fb125cjv87a7xvz.xn--ss-zme7575xp0e; ; ; # Ⴉؙ𝆅.ss𐧦𐹳ݵ +xn--7fb940rwt3z7xvz.xn--ss-zme7575xp0e; ⴉ𝆅\u0619.ss𐧦𐹳\u0775; [B5, B6, V6]; xn--7fb940rwt3z7xvz.xn--ss-zme7575xp0e; ; ; # ⴉؙ𝆅.ss𐧦𐹳ݵ +xn--7fb940rwt3z7xvz.xn--zca684a699vf2d; ⴉ𝆅\u0619.ß𐧦𐹳\u0775; [B5, B6, V6]; xn--7fb940rwt3z7xvz.xn--zca684a699vf2d; ; ; # ⴉؙ𝆅.ß𐧦𐹳ݵ +xn--7fb125cjv87a7xvz.xn--zca684a699vf2d; Ⴉ𝆅\u0619.ß𐧦𐹳\u0775; [B5, B6, V6]; xn--7fb125cjv87a7xvz.xn--zca684a699vf2d; ; ; # Ⴉؙ𝆅.ß𐧦𐹳ݵ +\u200D\u0643𐧾↙.; ; [B1, C2, V6]; xn--fhb713k87ag053c.xn--7s4w; ; xn--fhb011lnp8n.xn--7s4w; [B3, V6] # ك𐧾↙. +xn--fhb011lnp8n.xn--7s4w; \u0643𐧾↙.; [B3, V6]; xn--fhb011lnp8n.xn--7s4w; ; ; # ك𐧾↙. +xn--fhb713k87ag053c.xn--7s4w; \u200D\u0643𐧾↙.; [B1, C2, V6]; xn--fhb713k87ag053c.xn--7s4w; ; ; # ك𐧾↙. +梉。\u200C; 梉.\u200C; [C1]; xn--7zv.xn--0ug; ; xn--7zv.; [] # 梉. +xn--7zv.; 梉.; ; xn--7zv.; ; ; # 梉. +梉.; ; ; xn--7zv.; ; ; # 梉. +xn--7zv.xn--0ug; 梉.\u200C; [C1]; xn--7zv.xn--0ug; ; ; # 梉. +ꡣ-≠.\u200D𞤗𐅢Ↄ; ꡣ-≠.\u200D𞤹𐅢Ↄ; [B1, B6, C2, V6]; xn----ufo9661d.xn--1ug79cm620c71sh; ; xn----ufo9661d.xn--q5g0929fhm4f; [B2, B3, B6, V6] # ꡣ-≠.𞤹𐅢Ↄ +ꡣ-=\u0338.\u200D𞤗𐅢Ↄ; ꡣ-≠.\u200D𞤹𐅢Ↄ; [B1, B6, C2, V6]; xn----ufo9661d.xn--1ug79cm620c71sh; ; xn----ufo9661d.xn--q5g0929fhm4f; [B2, B3, B6, V6] # ꡣ-≠.𞤹𐅢Ↄ +ꡣ-=\u0338.\u200D𞤹𐅢ↄ; ꡣ-≠.\u200D𞤹𐅢ↄ; [B1, B6, C2]; xn----ufo9661d.xn--1ug99cj620c71sh; ; xn----ufo9661d.xn--r5gy929fhm4f; [B2, B3, B6] # ꡣ-≠.𞤹𐅢ↄ +ꡣ-≠.\u200D𞤹𐅢ↄ; ; [B1, B6, C2]; xn----ufo9661d.xn--1ug99cj620c71sh; ; xn----ufo9661d.xn--r5gy929fhm4f; [B2, B3, B6] # ꡣ-≠.𞤹𐅢ↄ +ꡣ-≠.\u200D𞤗𐅢ↄ; ꡣ-≠.\u200D𞤹𐅢ↄ; [B1, B6, C2]; xn----ufo9661d.xn--1ug99cj620c71sh; ; xn----ufo9661d.xn--r5gy929fhm4f; [B2, B3, B6] # ꡣ-≠.𞤹𐅢ↄ +ꡣ-=\u0338.\u200D𞤗𐅢ↄ; ꡣ-≠.\u200D𞤹𐅢ↄ; [B1, B6, C2]; xn----ufo9661d.xn--1ug99cj620c71sh; ; xn----ufo9661d.xn--r5gy929fhm4f; [B2, B3, B6] # ꡣ-≠.𞤹𐅢ↄ +xn----ufo9661d.xn--r5gy929fhm4f; ꡣ-≠.𞤹𐅢ↄ; [B2, B3, B6]; xn----ufo9661d.xn--r5gy929fhm4f; ; ; # ꡣ-≠.𞤹𐅢ↄ +xn----ufo9661d.xn--1ug99cj620c71sh; ꡣ-≠.\u200D𞤹𐅢ↄ; [B1, B6, C2]; xn----ufo9661d.xn--1ug99cj620c71sh; ; ; # ꡣ-≠.𞤹𐅢ↄ +xn----ufo9661d.xn--q5g0929fhm4f; ꡣ-≠.𞤹𐅢Ↄ; [B2, B3, B6, V6]; xn----ufo9661d.xn--q5g0929fhm4f; ; ; # ꡣ-≠.𞤹𐅢Ↄ +xn----ufo9661d.xn--1ug79cm620c71sh; ꡣ-≠.\u200D𞤹𐅢Ↄ; [B1, B6, C2, V6]; xn----ufo9661d.xn--1ug79cm620c71sh; ; ; # ꡣ-≠.𞤹𐅢Ↄ +ς⒐𝆫⸵。🄊𝟳; ς⒐𝆫⸵.🄊7; [B6, V6]; xn--3xa019nwtghi25b.xn--7-075iy877c; ; xn--4xa809nwtghi25b.xn--7-075iy877c; # ς⒐𝆫⸵.🄊7 +ς9.𝆫⸵。9,7; ς9.𝆫⸵.9,7; [B1, V5, V6]; xn--9-xmb.xn--ltj1535k.xn--9,7-r67t; ; xn--9-zmb.xn--ltj1535k.xn--9,7-r67t; # ς9.𝆫⸵.9,7 +Σ9.𝆫⸵。9,7; σ9.𝆫⸵.9,7; [B1, V5, V6]; xn--9-zmb.xn--ltj1535k.xn--9,7-r67t; ; ; # σ9.𝆫⸵.9,7 +σ9.𝆫⸵。9,7; σ9.𝆫⸵.9,7; [B1, V5, V6]; xn--9-zmb.xn--ltj1535k.xn--9,7-r67t; ; ; # σ9.𝆫⸵.9,7 +xn--9-zmb.xn--ltj1535k.xn--9,7-r67t; σ9.𝆫⸵.9,7; [B1, V5, V6]; xn--9-zmb.xn--ltj1535k.xn--9,7-r67t; ; ; # σ9.𝆫⸵.9,7 +xn--9-xmb.xn--ltj1535k.xn--9,7-r67t; ς9.𝆫⸵.9,7; [B1, V5, V6]; xn--9-xmb.xn--ltj1535k.xn--9,7-r67t; ; ; # ς9.𝆫⸵.9,7 +Σ⒐𝆫⸵。🄊𝟳; σ⒐𝆫⸵.🄊7; [B6, V6]; xn--4xa809nwtghi25b.xn--7-075iy877c; ; ; # σ⒐𝆫⸵.🄊7 +σ⒐𝆫⸵。🄊𝟳; σ⒐𝆫⸵.🄊7; [B6, V6]; xn--4xa809nwtghi25b.xn--7-075iy877c; ; ; # σ⒐𝆫⸵.🄊7 +xn--4xa809nwtghi25b.xn--7-075iy877c; σ⒐𝆫⸵.🄊7; [B6, V6]; xn--4xa809nwtghi25b.xn--7-075iy877c; ; ; # σ⒐𝆫⸵.🄊7 +xn--3xa019nwtghi25b.xn--7-075iy877c; ς⒐𝆫⸵.🄊7; [B6, V6]; xn--3xa019nwtghi25b.xn--7-075iy877c; ; ; # ς⒐𝆫⸵.🄊7 +\u0853.\u200Cß; \u0853.\u200Cß; [B1, C1]; xn--iwb.xn--zca570n; ; xn--iwb.ss; [] # ࡓ.ß +\u0853.\u200Cß; ; [B1, C1]; xn--iwb.xn--zca570n; ; xn--iwb.ss; [] # ࡓ.ß +\u0853.\u200CSS; \u0853.\u200Css; [B1, C1]; xn--iwb.xn--ss-i1t; ; xn--iwb.ss; [] # ࡓ.ss +\u0853.\u200Css; ; [B1, C1]; xn--iwb.xn--ss-i1t; ; xn--iwb.ss; [] # ࡓ.ss +xn--iwb.ss; \u0853.ss; ; xn--iwb.ss; ; ; # ࡓ.ss +\u0853.ss; ; ; xn--iwb.ss; ; ; # ࡓ.ss +\u0853.SS; \u0853.ss; ; xn--iwb.ss; ; ; # ࡓ.ss +xn--iwb.xn--ss-i1t; \u0853.\u200Css; [B1, C1]; xn--iwb.xn--ss-i1t; ; ; # ࡓ.ss +xn--iwb.xn--zca570n; \u0853.\u200Cß; [B1, C1]; xn--iwb.xn--zca570n; ; ; # ࡓ.ß +\u0853.\u200CSS; \u0853.\u200Css; [B1, C1]; xn--iwb.xn--ss-i1t; ; xn--iwb.ss; [] # ࡓ.ss +\u0853.\u200Css; \u0853.\u200Css; [B1, C1]; xn--iwb.xn--ss-i1t; ; xn--iwb.ss; [] # ࡓ.ss +\u0853.\u200CSs; \u0853.\u200Css; [B1, C1]; xn--iwb.xn--ss-i1t; ; xn--iwb.ss; [] # ࡓ.ss +\u0853.\u200CSs; \u0853.\u200Css; [B1, C1]; xn--iwb.xn--ss-i1t; ; xn--iwb.ss; [] # ࡓ.ss +-.\u200D\u074E\uA94D; ; [B1, B6, C2, V3, V6]; xn----s116e.xn--1ob387jy90hq459k; ; xn----s116e.xn--1ob6504fmf40i; [B3, B6, V3, V6] # -.ݎꥍ +xn----s116e.xn--1ob6504fmf40i; -.\u074E\uA94D; [B3, B6, V3, V6]; xn----s116e.xn--1ob6504fmf40i; ; ; # -.ݎꥍ +xn----s116e.xn--1ob387jy90hq459k; -.\u200D\u074E\uA94D; [B1, B6, C2, V3, V6]; xn----s116e.xn--1ob387jy90hq459k; ; ; # -.ݎꥍ +䃚蟥-。-⒈; 䃚蟥-.-⒈; [V3, V6]; xn----n50a258u.xn----ecp33805f; ; ; # 䃚蟥-.-⒈ +䃚蟥-。-1.; 䃚蟥-.-1.; [V3, V6]; xn----n50a258u.xn---1-up07j.; ; ; # 䃚蟥-.-1. +xn----n50a258u.xn---1-up07j.; 䃚蟥-.-1.; [V3, V6]; xn----n50a258u.xn---1-up07j.; ; ; # 䃚蟥-.-1. +xn----n50a258u.xn----ecp33805f; 䃚蟥-.-⒈; [V3, V6]; xn----n50a258u.xn----ecp33805f; ; ; # 䃚蟥-.-⒈ +𐹸䚵-ꡡ。⺇; 𐹸䚵-ꡡ.⺇; [B1]; xn----bm3an932a1l5d.xn--xvj; ; ; # 𐹸䚵-ꡡ.⺇ +xn----bm3an932a1l5d.xn--xvj; 𐹸䚵-ꡡ.⺇; [B1]; xn----bm3an932a1l5d.xn--xvj; ; ; # 𐹸䚵-ꡡ.⺇ +𑄳。\u1ADC𐹻; 𑄳.\u1ADC𐹻; [B1, B5, B6, V5, V6]; xn--v80d.xn--2rf1154i; ; ; # 𑄳.𐹻 +xn--v80d.xn--2rf1154i; 𑄳.\u1ADC𐹻; [B1, B5, B6, V5, V6]; xn--v80d.xn--2rf1154i; ; ; # 𑄳.𐹻 +≮𐹻.⒎𑂵\u06BA\u0602; ; [B1, V6]; xn--gdhx904g.xn--kfb18a325efm3s; ; ; # ≮𐹻.⒎𑂵ں +<\u0338𐹻.⒎𑂵\u06BA\u0602; ≮𐹻.⒎𑂵\u06BA\u0602; [B1, V6]; xn--gdhx904g.xn--kfb18a325efm3s; ; ; # ≮𐹻.⒎𑂵ں +≮𐹻.7.𑂵\u06BA\u0602; ; [B1, V5, V6]; xn--gdhx904g.7.xn--kfb18an307d; ; ; # ≮𐹻.7.𑂵ں +<\u0338𐹻.7.𑂵\u06BA\u0602; ≮𐹻.7.𑂵\u06BA\u0602; [B1, V5, V6]; xn--gdhx904g.7.xn--kfb18an307d; ; ; # ≮𐹻.7.𑂵ں +xn--gdhx904g.7.xn--kfb18an307d; ≮𐹻.7.𑂵\u06BA\u0602; [B1, V5, V6]; xn--gdhx904g.7.xn--kfb18an307d; ; ; # ≮𐹻.7.𑂵ں +xn--gdhx904g.xn--kfb18a325efm3s; ≮𐹻.⒎𑂵\u06BA\u0602; [B1, V6]; xn--gdhx904g.xn--kfb18a325efm3s; ; ; # ≮𐹻.⒎𑂵ں +ᢔ≠.\u200D𐋢; ; [C2, V6]; xn--ebf031cf7196a.xn--1ug9540g; ; xn--ebf031cf7196a.xn--587c; [V6] # ᢔ≠.𐋢 +ᢔ=\u0338.\u200D𐋢; ᢔ≠.\u200D𐋢; [C2, V6]; xn--ebf031cf7196a.xn--1ug9540g; ; xn--ebf031cf7196a.xn--587c; [V6] # ᢔ≠.𐋢 +xn--ebf031cf7196a.xn--587c; ᢔ≠.𐋢; [V6]; xn--ebf031cf7196a.xn--587c; ; ; # ᢔ≠.𐋢 +xn--ebf031cf7196a.xn--1ug9540g; ᢔ≠.\u200D𐋢; [C2, V6]; xn--ebf031cf7196a.xn--1ug9540g; ; ; # ᢔ≠.𐋢 +𐩁≮≯.\u066C⳿; 𐩁≮≯.\u066C⳿; [B1, B2, B3, V6]; xn--gdhc0519o0y27b.xn--lib468q0d21a; ; ; # 𐩁≮≯.٬⳿ +𐩁<\u0338>\u0338.\u066C⳿; 𐩁≮≯.\u066C⳿; [B1, B2, B3, V6]; xn--gdhc0519o0y27b.xn--lib468q0d21a; ; ; # 𐩁≮≯.٬⳿ +𐩁≮≯.\u066C⳿; ; [B1, B2, B3, V6]; xn--gdhc0519o0y27b.xn--lib468q0d21a; ; ; # 𐩁≮≯.٬⳿ +𐩁<\u0338>\u0338.\u066C⳿; 𐩁≮≯.\u066C⳿; [B1, B2, B3, V6]; xn--gdhc0519o0y27b.xn--lib468q0d21a; ; ; # 𐩁≮≯.٬⳿ +xn--gdhc0519o0y27b.xn--lib468q0d21a; 𐩁≮≯.\u066C⳿; [B1, B2, B3, V6]; xn--gdhc0519o0y27b.xn--lib468q0d21a; ; ; # 𐩁≮≯.٬⳿ +-。⺐; -.⺐; [V3]; -.xn--6vj; ; ; # -.⺐ +-。⺐; -.⺐; [V3]; -.xn--6vj; ; ; # -.⺐ +-.xn--6vj; -.⺐; [V3]; -.xn--6vj; ; ; # -.⺐ +𑲬.\u065C; 𑲬.\u065C; [V5, V6]; xn--sn3d59267c.xn--4hb; ; ; # 𑲬.ٜ +𑲬.\u065C; ; [V5, V6]; xn--sn3d59267c.xn--4hb; ; ; # 𑲬.ٜ +xn--sn3d59267c.xn--4hb; 𑲬.\u065C; [V5, V6]; xn--sn3d59267c.xn--4hb; ; ; # 𑲬.ٜ +𐍺.\u200C; ; [C1, V5, V6]; xn--ie8c.xn--0ug03366c; ; xn--ie8c.xn--2g51a; [V5, V6] # 𐍺. +xn--ie8c.xn--2g51a; 𐍺.; [V5, V6]; xn--ie8c.xn--2g51a; ; ; # 𐍺. +xn--ie8c.xn--0ug03366c; 𐍺.\u200C; [C1, V5, V6]; xn--ie8c.xn--0ug03366c; ; ; # 𐍺. +\u063D\u06E3.𐨎; ; [B1, V5]; xn--8gb64a.xn--mr9c; ; ; # ؽۣ.𐨎 +xn--8gb64a.xn--mr9c; \u063D\u06E3.𐨎; [B1, V5]; xn--8gb64a.xn--mr9c; ; ; # ؽۣ.𐨎 +漦Ⴙς.𐴄; ; [B5, B6, V6]; xn--3xa157d717e.xn--9d0d3162t; ; xn--4xa947d717e.xn--9d0d3162t; # 漦Ⴙς.𐴄 +漦ⴙς.𐴄; ; [B5, B6, V6]; xn--3xa972sl47b.xn--9d0d3162t; ; xn--4xa772sl47b.xn--9d0d3162t; # 漦ⴙς.𐴄 +漦ႹΣ.𐴄; 漦Ⴙσ.𐴄; [B5, B6, V6]; xn--4xa947d717e.xn--9d0d3162t; ; ; # 漦Ⴙσ.𐴄 +漦ⴙσ.𐴄; ; [B5, B6, V6]; xn--4xa772sl47b.xn--9d0d3162t; ; ; # 漦ⴙσ.𐴄 +漦Ⴙσ.𐴄; ; [B5, B6, V6]; xn--4xa947d717e.xn--9d0d3162t; ; ; # 漦Ⴙσ.𐴄 +xn--4xa947d717e.xn--9d0d3162t; 漦Ⴙσ.𐴄; [B5, B6, V6]; xn--4xa947d717e.xn--9d0d3162t; ; ; # 漦Ⴙσ.𐴄 +xn--4xa772sl47b.xn--9d0d3162t; 漦ⴙσ.𐴄; [B5, B6, V6]; xn--4xa772sl47b.xn--9d0d3162t; ; ; # 漦ⴙσ.𐴄 +xn--3xa972sl47b.xn--9d0d3162t; 漦ⴙς.𐴄; [B5, B6, V6]; xn--3xa972sl47b.xn--9d0d3162t; ; ; # 漦ⴙς.𐴄 +xn--3xa157d717e.xn--9d0d3162t; 漦Ⴙς.𐴄; [B5, B6, V6]; xn--3xa157d717e.xn--9d0d3162t; ; ; # 漦Ⴙς.𐴄 +𐹫踧\u0CCD.⒈𝨤; ; [B1, V6]; xn--8tc1437dro0d6q06h.xn--tsh2611ncu71e; ; ; # 𐹫踧್.⒈𝨤 +𐹫踧\u0CCD.1.𝨤; ; [B1, V5, V6]; xn--8tc1437dro0d6q06h.xn--1-p948l.xn--m82h; ; ; # 𐹫踧್.1.𝨤 +xn--8tc1437dro0d6q06h.xn--1-p948l.xn--m82h; 𐹫踧\u0CCD.1.𝨤; [B1, V5, V6]; xn--8tc1437dro0d6q06h.xn--1-p948l.xn--m82h; ; ; # 𐹫踧್.1.𝨤 +xn--8tc1437dro0d6q06h.xn--tsh2611ncu71e; 𐹫踧\u0CCD.⒈𝨤; [B1, V6]; xn--8tc1437dro0d6q06h.xn--tsh2611ncu71e; ; ; # 𐹫踧್.⒈𝨤 +\u200D≮.-; \u200D≮.-; [C2, V3, V6]; xn--1ug95g.xn----cr99a1w710b; ; xn--gdh.xn----cr99a1w710b; [V3, V6] # ≮.- +\u200D<\u0338.-; \u200D≮.-; [C2, V3, V6]; xn--1ug95g.xn----cr99a1w710b; ; xn--gdh.xn----cr99a1w710b; [V3, V6] # ≮.- +\u200D≮.-; ; [C2, V3, V6]; xn--1ug95g.xn----cr99a1w710b; ; xn--gdh.xn----cr99a1w710b; [V3, V6] # ≮.- +\u200D<\u0338.-; \u200D≮.-; [C2, V3, V6]; xn--1ug95g.xn----cr99a1w710b; ; xn--gdh.xn----cr99a1w710b; [V3, V6] # ≮.- +xn--gdh.xn----cr99a1w710b; ≮.-; [V3, V6]; xn--gdh.xn----cr99a1w710b; ; ; # ≮.- +xn--1ug95g.xn----cr99a1w710b; \u200D≮.-; [C2, V3, V6]; xn--1ug95g.xn----cr99a1w710b; ; ; # ≮.- +\u200D\u200D襔。Ⴜ5ꡮ; \u200D\u200D襔.Ⴜ5ꡮ; [C2, V6]; xn--1uga7691f.xn--5-r1g7167ipfw8d; ; xn--2u2a.xn--5-r1g7167ipfw8d; [V6] # 襔.Ⴜ5ꡮ +\u200D\u200D襔。ⴜ5ꡮ; \u200D\u200D襔.ⴜ5ꡮ; [C2, V6]; xn--1uga7691f.xn--5-uws5848bpf44e; ; xn--2u2a.xn--5-uws5848bpf44e; [V6] # 襔.ⴜ5ꡮ +xn--2u2a.xn--5-uws5848bpf44e; 襔.ⴜ5ꡮ; [V6]; xn--2u2a.xn--5-uws5848bpf44e; ; ; # 襔.ⴜ5ꡮ +xn--1uga7691f.xn--5-uws5848bpf44e; \u200D\u200D襔.ⴜ5ꡮ; [C2, V6]; xn--1uga7691f.xn--5-uws5848bpf44e; ; ; # 襔.ⴜ5ꡮ +xn--2u2a.xn--5-r1g7167ipfw8d; 襔.Ⴜ5ꡮ; [V6]; xn--2u2a.xn--5-r1g7167ipfw8d; ; ; # 襔.Ⴜ5ꡮ +xn--1uga7691f.xn--5-r1g7167ipfw8d; \u200D\u200D襔.Ⴜ5ꡮ; [C2, V6]; xn--1uga7691f.xn--5-r1g7167ipfw8d; ; ; # 襔.Ⴜ5ꡮ +𐫜𑌼\u200D.婀; 𐫜𑌼\u200D.婀; [B3, C2]; xn--1ugx063g1if.xn--q0s; ; xn--ix9c26l.xn--q0s; [] # 𐫜𑌼.婀 +𐫜𑌼\u200D.婀; ; [B3, C2]; xn--1ugx063g1if.xn--q0s; ; xn--ix9c26l.xn--q0s; [] # 𐫜𑌼.婀 +xn--ix9c26l.xn--q0s; 𐫜𑌼.婀; ; xn--ix9c26l.xn--q0s; ; ; # 𐫜𑌼.婀 +𐫜𑌼.婀; ; ; xn--ix9c26l.xn--q0s; ; ; # 𐫜𑌼.婀 +xn--1ugx063g1if.xn--q0s; 𐫜𑌼\u200D.婀; [B3, C2]; xn--1ugx063g1if.xn--q0s; ; ; # 𐫜𑌼.婀 +󠅽︒︒𐹯。⬳\u1A78; ︒︒𐹯.⬳\u1A78; [B1, V6]; xn--y86ca186j.xn--7of309e; ; ; # ︒︒𐹯.⬳᩸ +󠅽。。𐹯。⬳\u1A78; ..𐹯.⬳\u1A78; [B1, X4_2]; ..xn--no0d.xn--7of309e; [B1, A4_2]; ; # ..𐹯.⬳᩸ +..xn--no0d.xn--7of309e; ..𐹯.⬳\u1A78; [B1, X4_2]; ..xn--no0d.xn--7of309e; [B1, A4_2]; ; # ..𐹯.⬳᩸ +xn--y86ca186j.xn--7of309e; ︒︒𐹯.⬳\u1A78; [B1, V6]; xn--y86ca186j.xn--7of309e; ; ; # ︒︒𐹯.⬳᩸ +𝟖ß.󠄐-?Ⴏ; 8ß.-?Ⴏ; [V3, V6]; xn--8-qfa.xn---?-gfk; ; 8ss.xn---?-gfk; # 8ß.-?Ⴏ +8ß.󠄐-?Ⴏ; 8ß.-?Ⴏ; [V3, V6]; xn--8-qfa.xn---?-gfk; ; 8ss.xn---?-gfk; # 8ß.-?Ⴏ +8ß.󠄐-?ⴏ; 8ß.-?ⴏ; [V3, V6]; xn--8-qfa.xn---?-261a; ; 8ss.xn---?-261a; # 8ß.-?ⴏ +8SS.󠄐-?Ⴏ; 8ss.-?Ⴏ; [V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ +8ss.󠄐-?ⴏ; 8ss.-?ⴏ; [V3, V6]; 8ss.xn---?-261a; ; ; # 8ss.-?ⴏ +8ss.󠄐-?Ⴏ; 8ss.-?Ⴏ; [V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ +8ss.xn---?-gfk; 8ss.-?Ⴏ; [V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ +8ss.xn---?-261a; 8ss.-?ⴏ; [V3, V6]; 8ss.xn---?-261a; ; ; # 8ss.-?ⴏ +xn--8-qfa.xn---?-261a; 8ß.-?ⴏ; [V3, V6]; xn--8-qfa.xn---?-261a; ; ; # 8ß.-?ⴏ +xn--8-qfa.xn---?-gfk; 8ß.-?Ⴏ; [V3, V6]; xn--8-qfa.xn---?-gfk; ; ; # 8ß.-?Ⴏ +𝟖ß.󠄐-?ⴏ; 8ß.-?ⴏ; [V3, V6]; xn--8-qfa.xn---?-261a; ; 8ss.xn---?-261a; # 8ß.-?ⴏ +𝟖SS.󠄐-?Ⴏ; 8ss.-?Ⴏ; [V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ +𝟖ss.󠄐-?ⴏ; 8ss.-?ⴏ; [V3, V6]; 8ss.xn---?-261a; ; ; # 8ss.-?ⴏ +𝟖ss.󠄐-?Ⴏ; 8ss.-?Ⴏ; [V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ +8ss.-?Ⴏ; ; [V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ +8ss.-?ⴏ; ; [V3, V6]; 8ss.xn---?-261a; ; ; # 8ss.-?ⴏ +8SS.-?Ⴏ; 8ss.-?Ⴏ; [V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ +xn--8-qfa.-?ⴏ; 8ß.-?ⴏ; [V3, V6]; xn--8-qfa.xn---?-261a; ; ; # 8ß.-?ⴏ +XN--8-QFA.-?Ⴏ; 8ß.-?Ⴏ; [V3, V6]; xn--8-qfa.xn---?-gfk; ; ; # 8ß.-?Ⴏ +Xn--8-Qfa.-?Ⴏ; 8ß.-?Ⴏ; [V3, V6]; xn--8-qfa.xn---?-gfk; ; ; # 8ß.-?Ⴏ +xn--8-qfa.-?Ⴏ; 8ß.-?Ⴏ; [V3, V6]; xn--8-qfa.xn---?-gfk; ; ; # 8ß.-?Ⴏ +𝟖Ss.󠄐-?Ⴏ; 8ss.-?Ⴏ; [V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ +8Ss.󠄐-?Ⴏ; 8ss.-?Ⴏ; [V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ +-\u200D.\u200C𐹣Ⴅ; ; [B1, C1, C2, V3, V6]; xn----ugnv7071n.xn--dnd999e4j4p; ; xn----s721m.xn--dnd9201k; [B1, V3, V6] # -.𐹣Ⴅ +-\u200D.\u200C𐹣ⴅ; ; [B1, C1, C2, V3, V6]; xn----ugnv7071n.xn--0ugz32cgr0p; ; xn----s721m.xn--wkj1423e; [B1, V3, V6] # -.𐹣ⴅ +xn----s721m.xn--wkj1423e; -.𐹣ⴅ; [B1, V3, V6]; xn----s721m.xn--wkj1423e; ; ; # -.𐹣ⴅ +xn----ugnv7071n.xn--0ugz32cgr0p; -\u200D.\u200C𐹣ⴅ; [B1, C1, C2, V3, V6]; xn----ugnv7071n.xn--0ugz32cgr0p; ; ; # -.𐹣ⴅ +xn----s721m.xn--dnd9201k; -.𐹣Ⴅ; [B1, V3, V6]; xn----s721m.xn--dnd9201k; ; ; # -.𐹣Ⴅ +xn----ugnv7071n.xn--dnd999e4j4p; -\u200D.\u200C𐹣Ⴅ; [B1, C1, C2, V3, V6]; xn----ugnv7071n.xn--dnd999e4j4p; ; ; # -.𐹣Ⴅ +\uA9B9\u200D큷。₂; \uA9B9\u200D큷.2; [C2, V5, V6]; xn--1ug1435cfkyaoi04d.2; ; xn--0m9as84e2e21c.2; [V5, V6] # ꦹ큷.2 +\uA9B9\u200D큷。₂; \uA9B9\u200D큷.2; [C2, V5, V6]; xn--1ug1435cfkyaoi04d.2; ; xn--0m9as84e2e21c.2; [V5, V6] # ꦹ큷.2 +\uA9B9\u200D큷。2; \uA9B9\u200D큷.2; [C2, V5, V6]; xn--1ug1435cfkyaoi04d.2; ; xn--0m9as84e2e21c.2; [V5, V6] # ꦹ큷.2 +\uA9B9\u200D큷。2; \uA9B9\u200D큷.2; [C2, V5, V6]; xn--1ug1435cfkyaoi04d.2; ; xn--0m9as84e2e21c.2; [V5, V6] # ꦹ큷.2 +xn--0m9as84e2e21c.2; \uA9B9큷.2; [V5, V6]; xn--0m9as84e2e21c.2; ; ; # ꦹ큷.2 +xn--1ug1435cfkyaoi04d.2; \uA9B9\u200D큷.2; [C2, V5, V6]; xn--1ug1435cfkyaoi04d.2; ; ; # ꦹ큷.2 +?.🄄; ; [B1, V6]; ?.xn--3x6hx6f; ; ; # ?.🄄 +?.3,; ; [B1, V6]; ?.xn--3,-tb22a; ; ; # ?.3, +?.xn--3,-tb22a; ?.3,; [B1, V6]; ?.xn--3,-tb22a; ; ; # ?.3, +?.xn--3x6hx6f; ?.🄄; [B1, V6]; ?.xn--3x6hx6f; ; ; # ?.🄄 +𝨖。\u06DD\uA8C5⒈; 𝨖.\u06DD\uA8C5⒈; [B1, V5, V6]; xn--rt9cl956a.xn--tlb403mxv4g06s9i; ; ; # 𝨖.ꣅ⒈ +𝨖。\u06DD\uA8C51.; 𝨖.\u06DD\uA8C51.; [B1, V5, V6]; xn--rt9cl956a.xn--1-dxc8545j0693i.; ; ; # 𝨖.ꣅ1. +xn--rt9cl956a.xn--1-dxc8545j0693i.; 𝨖.\u06DD\uA8C51.; [B1, V5, V6]; xn--rt9cl956a.xn--1-dxc8545j0693i.; ; ; # 𝨖.ꣅ1. +xn--rt9cl956a.xn--tlb403mxv4g06s9i; 𝨖.\u06DD\uA8C5⒈; [B1, V5, V6]; xn--rt9cl956a.xn--tlb403mxv4g06s9i; ; ; # 𝨖.ꣅ⒈ +\u05E1\u06B8。Ⴈ\u200D; \u05E1\u06B8.Ⴈ\u200D; [B5, B6, C2, V6]; xn--meb44b57607c.xn--gnd699e; ; xn--meb44b57607c.xn--gnd; [B5, B6, V6] # סڸ.Ⴈ +\u05E1\u06B8。ⴈ\u200D; \u05E1\u06B8.ⴈ\u200D; [B5, B6, C2, V6]; xn--meb44b57607c.xn--1ug232c; ; xn--meb44b57607c.xn--zkj; [B5, B6, V6] # סڸ.ⴈ +xn--meb44b57607c.xn--zkj; \u05E1\u06B8.ⴈ; [B5, B6, V6]; xn--meb44b57607c.xn--zkj; ; ; # סڸ.ⴈ +xn--meb44b57607c.xn--1ug232c; \u05E1\u06B8.ⴈ\u200D; [B5, B6, C2, V6]; xn--meb44b57607c.xn--1ug232c; ; ; # סڸ.ⴈ +xn--meb44b57607c.xn--gnd; \u05E1\u06B8.Ⴈ; [B5, B6, V6]; xn--meb44b57607c.xn--gnd; ; ; # סڸ.Ⴈ +xn--meb44b57607c.xn--gnd699e; \u05E1\u06B8.Ⴈ\u200D; [B5, B6, C2, V6]; xn--meb44b57607c.xn--gnd699e; ; ; # סڸ.Ⴈ +𝨱\u07E6⒈.𑗝髯\u200C; 𝨱\u07E6⒈.𑗝髯\u200C; [B1, B5, C1, V5, V6]; xn--etb477lq931a1f58e.xn--0ugx259bocxd; ; xn--etb477lq931a1f58e.xn--uj6at43v; [B1, B5, V5, V6] # 𝨱ߦ⒈.𑗝髯 +𝨱\u07E61..𑗝髯\u200C; ; [B1, B5, C1, V5, V6, X4_2]; xn--1-idd62296a1fr6e..xn--0ugx259bocxd; [B1, B5, C1, V5, V6, A4_2]; xn--1-idd62296a1fr6e..xn--uj6at43v; [B1, B5, V5, V6, A4_2] # 𝨱ߦ1..𑗝髯 +xn--1-idd62296a1fr6e..xn--uj6at43v; 𝨱\u07E61..𑗝髯; [B1, B5, V5, V6, X4_2]; xn--1-idd62296a1fr6e..xn--uj6at43v; [B1, B5, V5, V6, A4_2]; ; # 𝨱ߦ1..𑗝髯 +xn--1-idd62296a1fr6e..xn--0ugx259bocxd; 𝨱\u07E61..𑗝髯\u200C; [B1, B5, C1, V5, V6, X4_2]; xn--1-idd62296a1fr6e..xn--0ugx259bocxd; [B1, B5, C1, V5, V6, A4_2]; ; # 𝨱ߦ1..𑗝髯 +xn--etb477lq931a1f58e.xn--uj6at43v; 𝨱\u07E6⒈.𑗝髯; [B1, B5, V5, V6]; xn--etb477lq931a1f58e.xn--uj6at43v; ; ; # 𝨱ߦ⒈.𑗝髯 +xn--etb477lq931a1f58e.xn--0ugx259bocxd; 𝨱\u07E6⒈.𑗝髯\u200C; [B1, B5, C1, V5, V6]; xn--etb477lq931a1f58e.xn--0ugx259bocxd; ; ; # 𝨱ߦ⒈.𑗝髯 +𐫀.\u0689𑌀; 𐫀.\u0689𑌀; ; xn--pw9c.xn--fjb8658k; ; ; # 𐫀.ډ𑌀 +𐫀.\u0689𑌀; ; ; xn--pw9c.xn--fjb8658k; ; ; # 𐫀.ډ𑌀 +xn--pw9c.xn--fjb8658k; 𐫀.\u0689𑌀; ; xn--pw9c.xn--fjb8658k; ; ; # 𐫀.ډ𑌀 +𑋪.𐳝; 𑋪.𐳝; [B1, V5]; xn--fm1d.xn--5c0d; ; ; # 𑋪.𐳝 +𑋪.𐳝; ; [B1, V5]; xn--fm1d.xn--5c0d; ; ; # 𑋪.𐳝 +𑋪.𐲝; 𑋪.𐳝; [B1, V5]; xn--fm1d.xn--5c0d; ; ; # 𑋪.𐳝 +xn--fm1d.xn--5c0d; 𑋪.𐳝; [B1, V5]; xn--fm1d.xn--5c0d; ; ; # 𑋪.𐳝 +𑋪.𐲝; 𑋪.𐳝; [B1, V5]; xn--fm1d.xn--5c0d; ; ; # 𑋪.𐳝 +≠膣。\u0F83; ≠膣.\u0F83; [V5]; xn--1chy468a.xn--2ed; ; ; # ≠膣.ྃ +=\u0338膣。\u0F83; ≠膣.\u0F83; [V5]; xn--1chy468a.xn--2ed; ; ; # ≠膣.ྃ +xn--1chy468a.xn--2ed; ≠膣.\u0F83; [V5]; xn--1chy468a.xn--2ed; ; ; # ≠膣.ྃ +-\u077D。ß; -\u077D.ß; [B5, B6, V6]; xn----j6c95618k.xn--zca; ; xn----j6c95618k.ss; # -ݽ.ß +-\u077D。ß; -\u077D.ß; [B5, B6, V6]; xn----j6c95618k.xn--zca; ; xn----j6c95618k.ss; # -ݽ.ß +-\u077D。SS; -\u077D.ss; [B5, B6, V6]; xn----j6c95618k.ss; ; ; # -ݽ.ss +-\u077D。ss; -\u077D.ss; [B5, B6, V6]; xn----j6c95618k.ss; ; ; # -ݽ.ss +-\u077D。Ss; -\u077D.ss; [B5, B6, V6]; xn----j6c95618k.ss; ; ; # -ݽ.ss +xn----j6c95618k.ss; -\u077D.ss; [B5, B6, V6]; xn----j6c95618k.ss; ; ; # -ݽ.ss +xn----j6c95618k.xn--zca; -\u077D.ß; [B5, B6, V6]; xn----j6c95618k.xn--zca; ; ; # -ݽ.ß +-\u077D。SS; -\u077D.ss; [B5, B6, V6]; xn----j6c95618k.ss; ; ; # -ݽ.ss +-\u077D。ss; -\u077D.ss; [B5, B6, V6]; xn----j6c95618k.ss; ; ; # -ݽ.ss +-\u077D。Ss; -\u077D.ss; [B5, B6, V6]; xn----j6c95618k.ss; ; ; # -ݽ.ss +ς𐹠ᡚ𑄳.⾭𐹽𐫜; ς𐹠ᡚ𑄳.靑𐹽𐫜; [B5, B6, V6]; xn--3xa856hp23pxmc.xn--es5a888tvjc2u15h; ; xn--4xa656hp23pxmc.xn--es5a888tvjc2u15h; # ς𐹠ᡚ𑄳.靑𐹽𐫜 +ς𐹠ᡚ𑄳.靑𐹽𐫜; ; [B5, B6, V6]; xn--3xa856hp23pxmc.xn--es5a888tvjc2u15h; ; xn--4xa656hp23pxmc.xn--es5a888tvjc2u15h; # ς𐹠ᡚ𑄳.靑𐹽𐫜 +Σ𐹠ᡚ𑄳.靑𐹽𐫜; σ𐹠ᡚ𑄳.靑𐹽𐫜; [B5, B6, V6]; xn--4xa656hp23pxmc.xn--es5a888tvjc2u15h; ; ; # σ𐹠ᡚ𑄳.靑𐹽𐫜 +σ𐹠ᡚ𑄳.靑𐹽𐫜; ; [B5, B6, V6]; xn--4xa656hp23pxmc.xn--es5a888tvjc2u15h; ; ; # σ𐹠ᡚ𑄳.靑𐹽𐫜 +xn--4xa656hp23pxmc.xn--es5a888tvjc2u15h; σ𐹠ᡚ𑄳.靑𐹽𐫜; [B5, B6, V6]; xn--4xa656hp23pxmc.xn--es5a888tvjc2u15h; ; ; # σ𐹠ᡚ𑄳.靑𐹽𐫜 +xn--3xa856hp23pxmc.xn--es5a888tvjc2u15h; ς𐹠ᡚ𑄳.靑𐹽𐫜; [B5, B6, V6]; xn--3xa856hp23pxmc.xn--es5a888tvjc2u15h; ; ; # ς𐹠ᡚ𑄳.靑𐹽𐫜 +Σ𐹠ᡚ𑄳.⾭𐹽𐫜; σ𐹠ᡚ𑄳.靑𐹽𐫜; [B5, B6, V6]; xn--4xa656hp23pxmc.xn--es5a888tvjc2u15h; ; ; # σ𐹠ᡚ𑄳.靑𐹽𐫜 +σ𐹠ᡚ𑄳.⾭𐹽𐫜; σ𐹠ᡚ𑄳.靑𐹽𐫜; [B5, B6, V6]; xn--4xa656hp23pxmc.xn--es5a888tvjc2u15h; ; ; # σ𐹠ᡚ𑄳.靑𐹽𐫜 +𐋷。\u200D; 𐋷.\u200D; [C2]; xn--r97c.xn--1ug; ; xn--r97c.; [] # 𐋷. +xn--r97c.; 𐋷.; ; xn--r97c.; ; ; # 𐋷. +𐋷.; ; ; xn--r97c.; ; ; # 𐋷. +xn--r97c.xn--1ug; 𐋷.\u200D; [C2]; xn--r97c.xn--1ug; ; ; # 𐋷. +𑰳𑈯。⥪; 𑰳𑈯.⥪; [V5]; xn--2g1d14o.xn--jti; ; ; # 𑰳𑈯.⥪ +xn--2g1d14o.xn--jti; 𑰳𑈯.⥪; [V5]; xn--2g1d14o.xn--jti; ; ; # 𑰳𑈯.⥪ +𑆀䁴.Ⴕ𝟜\u200C\u0348; 𑆀䁴.Ⴕ4\u200C\u0348; [C1, V5, V6]; xn--1mnx647cg3x1b.xn--4-zfb324h32o; ; xn--1mnx647cg3x1b.xn--4-zfb324h; [V5, V6] # 𑆀䁴.Ⴕ4͈ +𑆀䁴.Ⴕ4\u200C\u0348; ; [C1, V5, V6]; xn--1mnx647cg3x1b.xn--4-zfb324h32o; ; xn--1mnx647cg3x1b.xn--4-zfb324h; [V5, V6] # 𑆀䁴.Ⴕ4͈ +𑆀䁴.ⴕ4\u200C\u0348; ; [C1, V5, V6]; xn--1mnx647cg3x1b.xn--4-zfb502tlsl; ; xn--1mnx647cg3x1b.xn--4-zfb5123a; [V5, V6] # 𑆀䁴.ⴕ4͈ +xn--1mnx647cg3x1b.xn--4-zfb5123a; 𑆀䁴.ⴕ4\u0348; [V5, V6]; xn--1mnx647cg3x1b.xn--4-zfb5123a; ; ; # 𑆀䁴.ⴕ4͈ +xn--1mnx647cg3x1b.xn--4-zfb502tlsl; 𑆀䁴.ⴕ4\u200C\u0348; [C1, V5, V6]; xn--1mnx647cg3x1b.xn--4-zfb502tlsl; ; ; # 𑆀䁴.ⴕ4͈ +xn--1mnx647cg3x1b.xn--4-zfb324h; 𑆀䁴.Ⴕ4\u0348; [V5, V6]; xn--1mnx647cg3x1b.xn--4-zfb324h; ; ; # 𑆀䁴.Ⴕ4͈ +xn--1mnx647cg3x1b.xn--4-zfb324h32o; 𑆀䁴.Ⴕ4\u200C\u0348; [C1, V5, V6]; xn--1mnx647cg3x1b.xn--4-zfb324h32o; ; ; # 𑆀䁴.Ⴕ4͈ +𑆀䁴.ⴕ𝟜\u200C\u0348; 𑆀䁴.ⴕ4\u200C\u0348; [C1, V5, V6]; xn--1mnx647cg3x1b.xn--4-zfb502tlsl; ; xn--1mnx647cg3x1b.xn--4-zfb5123a; [V5, V6] # 𑆀䁴.ⴕ4͈ +憡?\u200CႴ.𐋮\u200D≠; ; [C1, C2, V6]; xn--?-c1g798iy27d.xn--1ug73gl146a; ; xn--?-c1g3623d.xn--1chz659f; [V6] # 憡?Ⴔ.𐋮≠ +憡?\u200CႴ.𐋮\u200D=\u0338; 憡?\u200CႴ.𐋮\u200D≠; [C1, C2, V6]; xn--?-c1g798iy27d.xn--1ug73gl146a; ; xn--?-c1g3623d.xn--1chz659f; [V6] # 憡?Ⴔ.𐋮≠ +憡?\u200Cⴔ.𐋮\u200D=\u0338; 憡?\u200Cⴔ.𐋮\u200D≠; [C1, C2, V6]; xn--?-sgn310doh5c.xn--1ug73gl146a; ; xn--?-fwsr13r.xn--1chz659f; [V6] # 憡?ⴔ.𐋮≠ +憡?\u200Cⴔ.𐋮\u200D≠; ; [C1, C2, V6]; xn--?-sgn310doh5c.xn--1ug73gl146a; ; xn--?-fwsr13r.xn--1chz659f; [V6] # 憡?ⴔ.𐋮≠ +xn--?-fwsr13r.xn--1chz659f; 憡?ⴔ.𐋮≠; [V6]; xn--?-fwsr13r.xn--1chz659f; ; ; # 憡?ⴔ.𐋮≠ +xn--?-sgn310doh5c.xn--1ug73gl146a; 憡?\u200Cⴔ.𐋮\u200D≠; [C1, C2, V6]; xn--?-sgn310doh5c.xn--1ug73gl146a; ; ; # 憡?ⴔ.𐋮≠ +xn--?-c1g3623d.xn--1chz659f; 憡?Ⴔ.𐋮≠; [V6]; xn--?-c1g3623d.xn--1chz659f; ; ; # 憡?Ⴔ.𐋮≠ +xn--?-c1g798iy27d.xn--1ug73gl146a; 憡?\u200CႴ.𐋮\u200D≠; [C1, C2, V6]; xn--?-c1g798iy27d.xn--1ug73gl146a; ; ; # 憡?Ⴔ.𐋮≠ +憡?ⴔ.xn--1chz659f; 憡?ⴔ.𐋮≠; [V6]; xn--?-fwsr13r.xn--1chz659f; ; ; # 憡?ⴔ.𐋮≠ +憡?Ⴔ.XN--1CHZ659F; 憡?Ⴔ.𐋮≠; [V6]; xn--?-c1g3623d.xn--1chz659f; ; ; # 憡?Ⴔ.𐋮≠ +憡?Ⴔ.xn--1chz659f; 憡?Ⴔ.𐋮≠; [V6]; xn--?-c1g3623d.xn--1chz659f; ; ; # 憡?Ⴔ.𐋮≠ +憡?\u200Cⴔ.xn--1ug73gl146a; 憡?\u200Cⴔ.𐋮\u200D≠; [C1, C2, V6]; xn--?-sgn310doh5c.xn--1ug73gl146a; ; xn--?-fwsr13r.xn--1ug73gl146a; [C2, V6] # 憡?ⴔ.𐋮≠ +憡?\u200CႴ.XN--1UG73GL146A; 憡?\u200CႴ.𐋮\u200D≠; [C1, C2, V6]; xn--?-c1g798iy27d.xn--1ug73gl146a; ; xn--?-c1g3623d.xn--1ug73gl146a; [C2, V6] # 憡?Ⴔ.𐋮≠ +憡?\u200CႴ.xn--1ug73gl146a; 憡?\u200CႴ.𐋮\u200D≠; [C1, C2, V6]; xn--?-c1g798iy27d.xn--1ug73gl146a; ; xn--?-c1g3623d.xn--1ug73gl146a; [C2, V6] # 憡?Ⴔ.𐋮≠ +xn--?-c1g3623d.xn--1ug73gl146a; 憡?Ⴔ.𐋮\u200D≠; [C2, V6]; xn--?-c1g3623d.xn--1ug73gl146a; ; ; # 憡?Ⴔ.𐋮≠ +xn--?-fwsr13r.xn--1ug73gl146a; 憡?ⴔ.𐋮\u200D≠; [C2, V6]; xn--?-fwsr13r.xn--1ug73gl146a; ; ; # 憡?ⴔ.𐋮≠ +憡?Ⴔ.xn--1ug73gl146a; 憡?Ⴔ.𐋮\u200D≠; [C2, V6]; xn--?-c1g3623d.xn--1ug73gl146a; ; ; # 憡?Ⴔ.𐋮≠ +憡?ⴔ.xn--1ug73gl146a; 憡?ⴔ.𐋮\u200D≠; [C2, V6]; xn--?-fwsr13r.xn--1ug73gl146a; ; ; # 憡?ⴔ.𐋮≠ +憡?Ⴔ.XN--1UG73GL146A; 憡?Ⴔ.𐋮\u200D≠; [C2, V6]; xn--?-c1g3623d.xn--1ug73gl146a; ; ; # 憡?Ⴔ.𐋮≠ diff --git a/tests/auto/corelib/io/qurluts46/tst_qurluts46.cpp b/tests/auto/corelib/io/qurluts46/tst_qurluts46.cpp new file mode 100644 index 0000000000..d163ed19bf --- /dev/null +++ b/tests/auto/corelib/io/qurluts46/tst_qurluts46.cpp @@ -0,0 +1,154 @@ +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QtCore/QUrl> +#include <QtCore/QFile> +#include <QTest> +#include <QSet> +#include <QByteArray> +#include <algorithm> + +class tst_QUrlUts46 : public QObject +{ + Q_OBJECT +private Q_SLOTS: + void idnaTestV2_data(); + void idnaTestV2(); + +private: + // All error codes in UTR #46 revision 31 (Unicode 15.1): + // A4_1, A4_2, + // B1, B2, B3, B4, B5, B6, + // C1, C2, + // P4, + // V1, V2, V3, V5, V6, + // X4_2 + // + // NOTE: moving this inside idnaTestV2_data() results in ICE with MSVC 2019 + static const QSet<QByteArray> fatalErrors; +}; + +const QSet<QByteArray> tst_QUrlUts46::fatalErrors = { + "A4_2", // Empty ASCII label +}; + +/** + * Replace \uXXXX escapes in test case fields. + */ +static QString unescapeField(const QString &field) +{ + static const QRegularExpression re(R"(\\u([[:xdigit:]]{4}))"); + + QString result; + qsizetype lastIdx = 0; + + for (const auto &match : re.globalMatch(field)) { + // Add stuff before the match + result.append(field.mid(lastIdx, match.capturedStart() - lastIdx)); + bool ok = false; + auto c = match.captured(1).toUInt(&ok, 16); + if (!ok) { + qFatal("Failed to parse a Unicode escape: %s", qPrintable(match.captured(1))); + } + + result.append(QChar(c)); + lastIdx = match.capturedEnd(); + } + + // Append the unescaped end + result.append(field.mid(lastIdx)); + + return result; +} + +void tst_QUrlUts46::idnaTestV2_data() +{ + QTest::addColumn<QString>("source"); + QTest::addColumn<QString>("toUnicode"); + QTest::addColumn<bool>("toUnicodeOk"); + QTest::addColumn<QString>("toAsciiN"); + QTest::addColumn<bool>("toAsciiNOk"); + QTest::addColumn<QString>("toAsciiT"); + QTest::addColumn<bool>("toAsciiTOk"); + + QFile dataFile(QFINDTESTDATA("testdata/IdnaTestV2.txt")); + qDebug() << "Data file:" << dataFile.fileName(); + QVERIFY(dataFile.open(QFile::ReadOnly)); + + auto isToAsciiOk = [](const QByteArray &s, bool ifEmpty) { + if (s.isEmpty()) + return ifEmpty; + + Q_ASSERT(s.startsWith('[') && s.endsWith(']')); + + const auto errors = s.sliced(1, s.size() - 2).split(','); + // NOTE: empty string is not in fatalErrors and it's ok + return std::all_of(errors.begin(), errors.end(), + [](auto &e) { return !fatalErrors.contains(e.trimmed()); }); + }; + + for (unsigned int lineNo = 1; !dataFile.atEnd(); lineNo++) { + auto line = dataFile.readLine().trimmed(); + + int commentIdx = line.indexOf('#'); + if (commentIdx != -1) + line = line.left(commentIdx).trimmed(); + if (line.isEmpty()) + continue; + + auto fields = line.split(';'); + Q_ASSERT(fields.size() == 7); + + for (auto &field : fields) + field = unescapeField(field.trimmed()).toUtf8(); + + const QString &source = fields[0]; + QString toUnicode = fields[1].isEmpty() ? source : fields[1]; + bool toUnicodeOk = fields[2].isEmpty(); + bool toUnicodeOkForAscii = isToAsciiOk(fields[2], true); + QString toAsciiN = fields[3].isEmpty() ? toUnicode : fields[3]; + bool toAsciiNOk = isToAsciiOk(fields[4], toUnicodeOkForAscii); + QString toAsciiT = fields[5].isEmpty() ? toAsciiN : fields[5]; + bool toAsciiTOk = isToAsciiOk(fields[6], toAsciiNOk); + + QTest::addRow("line %u", lineNo) << source << toUnicode << toUnicodeOk << toAsciiN + << toAsciiNOk << toAsciiT << toAsciiTOk; + } +} + +void tst_QUrlUts46::idnaTestV2() +{ + QFETCH(QString, source); + QFETCH(QString, toUnicode); + QFETCH(bool, toUnicodeOk); + QFETCH(QString, toAsciiN); + QFETCH(bool, toAsciiNOk); + QFETCH(QString, toAsciiT); + QFETCH(bool, toAsciiTOk); + + QString toAceN = QUrl::toAce(source); + if (toUnicodeOk && toAsciiNOk) + QCOMPARE(toAceN, toAsciiN); + else if (toAsciiNOk) + QVERIFY(toAceN.isEmpty() || toAceN == toAsciiN); + else + QCOMPARE(toAceN, QString()); + + QString toAceT = QUrl::toAce(source, QUrl::AceTransitionalProcessing); + if (toUnicodeOk && toAsciiTOk) + QCOMPARE(toAceT, toAsciiT); + else if (toAsciiTOk) + QVERIFY(toAceT.isEmpty() || toAceT == toAsciiT); + else + QCOMPARE(toAceT, QString()); + + QString normalized = QUrl::fromAce(toAceN.toUtf8(), QUrl::IgnoreIDNWhitelist); + if (toUnicodeOk && !toAceN.isEmpty()) + QCOMPARE(normalized, toUnicode); + else + QCOMPARE(normalized, toAceN); +} + +QTEST_APPLESS_MAIN(tst_QUrlUts46) + +#include "tst_qurluts46.moc" diff --git a/tests/auto/corelib/io/qzip/.gitignore b/tests/auto/corelib/io/qzip/.gitignore new file mode 100644 index 0000000000..2d7dfbe70c --- /dev/null +++ b/tests/auto/corelib/io/qzip/.gitignore @@ -0,0 +1 @@ +tst_qzip diff --git a/tests/auto/corelib/io/qzip/CMakeLists.txt b/tests/auto/corelib/io/qzip/CMakeLists.txt new file mode 100644 index 0000000000..df562c5e34 --- /dev/null +++ b/tests/auto/corelib/io/qzip/CMakeLists.txt @@ -0,0 +1,26 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +##################################################################### +## tst_qzip Test: +##################################################################### + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qzip LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +# Collect test data +file(GLOB_RECURSE test_data + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + testdata/* +) + +qt_internal_add_test(tst_qzip + SOURCES + tst_qzip.cpp + LIBRARIES + Qt::CorePrivate + TESTDATA ${test_data} +) diff --git a/tests/auto/corelib/io/qzip/testdata/symlink.zip b/tests/auto/corelib/io/qzip/testdata/symlink.zip Binary files differnew file mode 100644 index 0000000000..027f96477a --- /dev/null +++ b/tests/auto/corelib/io/qzip/testdata/symlink.zip diff --git a/tests/auto/corelib/io/qzip/testdata/test.zip b/tests/auto/corelib/io/qzip/testdata/test.zip Binary files differnew file mode 100644 index 0000000000..a57ba4e2a9 --- /dev/null +++ b/tests/auto/corelib/io/qzip/testdata/test.zip diff --git a/tests/auto/corelib/io/qzip/tst_qzip.cpp b/tests/auto/corelib/io/qzip/tst_qzip.cpp new file mode 100644 index 0000000000..971e8f86c3 --- /dev/null +++ b/tests/auto/corelib/io/qzip/tst_qzip.cpp @@ -0,0 +1,116 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QTest> +#include <QDebug> +#include <QBuffer> + +#include <private/qzipwriter_p.h> +#include <private/qzipreader_p.h> + +class tst_QZip : public QObject +{ + Q_OBJECT + +private slots: + void basicUnpack(); + void symlinks(); + void readTest(); + void createArchive(); +}; + +void tst_QZip::basicUnpack() +{ + QZipReader zip(QFINDTESTDATA("/testdata/test.zip"), QIODevice::ReadOnly); + QList<QZipReader::FileInfo> files = zip.fileInfoList(); + QCOMPARE(files.size(), 2); + + QZipReader::FileInfo fi = files.at(0); + QVERIFY(fi.isValid()); + QCOMPARE(fi.filePath, QString("test")); + QCOMPARE(uint(fi.isDir), (uint) 1); + QCOMPARE(uint(fi.isFile), (uint) 0); + QCOMPARE(uint(fi.isSymLink), (uint) 0); + + QCOMPARE(fi.permissions,QFile::Permissions( QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner + | QFile::ReadUser | QFile::WriteUser | QFile::ExeUser )); + + QCOMPARE(fi.lastModified, QDateTime::fromString("2005.11.11 13:08:02", "yyyy.MM.dd HH:mm:ss")); + + fi = files.at(1); + QVERIFY(fi.isValid()); + QCOMPARE(fi.filePath, QString("test/test.txt")); + QCOMPARE(uint(fi.isDir), (uint) 0); + QCOMPARE(uint(fi.isFile), (uint) 1); + QCOMPARE(uint(fi.isSymLink), (uint) 0); + + QVERIFY(fi.permissions == QFile::Permissions( QFile::ReadOwner | QFile::WriteOwner + | QFile::ReadUser | QFile::WriteUser )); + + QCOMPARE(fi.lastModified, QDateTime::fromString("2005.11.11 13:08:02", "yyyy.MM.dd HH:mm:ss")); + + QCOMPARE(zip.fileData("test/test.txt"), QByteArray("content\n")); + + fi = zip.entryInfoAt(-1); + QVERIFY(!fi.isValid()); +} + +void tst_QZip::symlinks() +{ + QZipReader zip(QFINDTESTDATA("/testdata/symlink.zip"), QIODevice::ReadOnly); + QList<QZipReader::FileInfo> files = zip.fileInfoList(); + QCOMPARE(files.size(), 2); + + QZipReader::FileInfo fi = files.at(0); + QVERIFY(fi.isValid()); + QCOMPARE(fi.filePath, QString("symlink")); + QVERIFY(!fi.isDir); + QVERIFY(!fi.isFile); + QVERIFY(fi.isSymLink); + + QCOMPARE(zip.fileData("symlink"), QByteArray("destination")); + + fi = files.at(1); + QVERIFY(fi.isValid()); + QCOMPARE(fi.filePath, QString("destination")); + QVERIFY(!fi.isDir); + QVERIFY(fi.isFile); + QVERIFY(!fi.isSymLink); +} + +void tst_QZip::readTest() +{ + QZipReader zip("foobar.zip", QIODevice::ReadOnly); // non existing file. + QList<QZipReader::FileInfo> files = zip.fileInfoList(); + QCOMPARE(files.size(), 0); + QByteArray b = zip.fileData("foobar"); + QCOMPARE(b.size(), 0); +} + +void tst_QZip::createArchive() +{ + QBuffer buffer; + QZipWriter zip(&buffer); + QByteArray fileContents("simple file contents\nline2\n"); + zip.addFile("My Filename", fileContents); + zip.close(); + QByteArray zipFile = buffer.buffer(); + + // QFile f("createArchiveTest.zip"); f.open(QIODevice::WriteOnly); f.write(zipFile); f.close(); + + QBuffer buffer2(&zipFile); + QZipReader zip2(&buffer2); + QList<QZipReader::FileInfo> files = zip2.fileInfoList(); + QCOMPARE(files.size(), 1); + QZipReader::FileInfo file = files.at(0); + QCOMPARE(file.filePath, QString("My Filename")); + QCOMPARE(uint(file.isDir), (uint) 0); + QCOMPARE(uint(file.isFile), (uint) 1); + QCOMPARE(uint(file.isSymLink), (uint) 0); + QCOMPARE(file.permissions, QFile::Permissions(QFile::ReadOwner | QFile::WriteOwner | QFile::ReadUser | QFile::WriteUser) ); + QCOMPARE(file.size, (long long) 27); + QCOMPARE(zip2.fileData("My Filename"), fileContents); +} + +QTEST_MAIN(tst_QZip) +#include "tst_qzip.moc" |