diff options
author | Liang Qi <liang.qi@qt.io> | 2016-11-01 10:27:41 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2016-11-02 09:24:11 +0100 |
commit | d7e4980132057aa10e54137114bf65e06c455030 (patch) | |
tree | 9d6ae36efa0cf84a612bfec6cf3dd2ea7f7e3446 /src | |
parent | 44c402b4bfba44480382244b8409fb3cf34d7ac1 (diff) | |
parent | a732576a66ff2bbd9c0b41cd5f3505a4d2fbf043 (diff) |
Merge remote-tracking branch 'origin/5.8' into dev
Blacklist tst_QMenuBar::taskQTBUG46812_doNotLeaveMenubarHighlighted() on macOS.
Conflicts:
mkspecs/features/mac/default_post.prf
mkspecs/features/mac/sdk.prf
mkspecs/features/uikit/default_post.prf
mkspecs/features/uikit/sdk.prf
src/angle/src/libEGL/libEGL.pro
src/platformsupport/fontdatabases/fontdatabases.pro
src/platformsupport/platformsupport.pro
src/plugins/platforms/cocoa/qnswindowdelegate.mm
src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp
src/plugins/platforms/ios/ios.pro
src/plugins/platforms/ios/kernel.pro
tests/auto/widgets/widgets/qmenubar/BLACKLIST
tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
Task-number: QTBUG-56853
Change-Id: If58785210feee3550892fc7768cce90e75a2416c
Diffstat (limited to 'src')
459 files changed, 16406 insertions, 13770 deletions
diff --git a/src/3rdparty/freetype/freetype.pro b/src/3rdparty/freetype/freetype.pro index 6d630d4190..5b1eb92e32 100644 --- a/src/3rdparty/freetype/freetype.pro +++ b/src/3rdparty/freetype/freetype.pro @@ -6,6 +6,8 @@ CONFIG += \ exceptions_off rtti_off warn_off \ installed +MODULE_INCLUDEPATH += $$PWD/include + load(qt_helper_lib) SOURCES += \ @@ -61,16 +63,12 @@ win32 { INCLUDEPATH += $$PWD/builds/unix } -INCLUDEPATH += $$PWD/include - DEFINES += FT2_BUILD_LIBRARY DEFINES += FT_CONFIG_OPTION_SYSTEM_ZLIB include(../zlib_dependency.pri) -QT_FOR_CONFIG += gui-private -include($$OUT_PWD/../../gui/qtgui-config.pri) DEFINES += FT_CONFIG_OPTION_USE_PNG -include($$PWD/../png_dependency.pri) +QMAKE_USE_PRIVATE += libpng DEFINES += TT_CONFIG_OPTION_SUBPIXEL_HINTING diff --git a/src/3rdparty/freetype_dependency.pri b/src/3rdparty/freetype_dependency.pri deleted file mode 100644 index cf86b66efd..0000000000 --- a/src/3rdparty/freetype_dependency.pri +++ /dev/null @@ -1,6 +0,0 @@ -qtConfig(system-freetype) { - QMAKE_USE_PRIVATE += freetype/nolink -} else: qtConfig(freetype) { - INCLUDEPATH += $$PWD/freetype/include - LIBS_PRIVATE += -L$$QT_BUILD_TREE/lib -lqtfreetype$$qtPlatformTargetSuffix() -} diff --git a/src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro b/src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro index 5ec86bf78f..d135b8a9fd 100644 --- a/src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro +++ b/src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro @@ -1,10 +1,12 @@ -TARGET = qtharfbuzzng +TARGET = qtharfbuzz CONFIG += \ static \ hide_symbols \ exceptions_off rtti_off warn_off +MODULE_INCLUDEPATH += $$PWD/include + load(qt_helper_lib) # built-in shapers list configuration: @@ -24,8 +26,6 @@ win32: DEFINES += HB_NO_WIN1256 #Workaround https://code.google.com/p/android/issues/detail?id=194631 android: DEFINES += _POSIX_C_SOURCE=200112L -INCLUDEPATH += $$PWD/include - # Harfbuzz-NG inside Qt uses the Qt atomics (inline code only) INCLUDEPATH += $$QT.core.includes DEFINES += QT_NO_VERSION_TAGGING diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp b/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp index 30dde281e8..82977db5e7 100644 --- a/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp +++ b/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp @@ -156,12 +156,14 @@ static inline void positionCluster(HB_ShaperItem *item, int gfrom, int glast) // ### wrong in rtl context! case HB_Combining_BelowLeft: p.y += offset; + // fall through case HB_Combining_BelowLeftAttached: p.x += attachmentRect.x - markMetrics.x; p.y += (attachmentRect.y + attachmentRect.height) - markMetrics.y; break; case HB_Combining_Below: p.y += offset; + // fall through case HB_Combining_BelowAttached: p.x += attachmentRect.x - markMetrics.x; p.y += (attachmentRect.y + attachmentRect.height) - markMetrics.y; @@ -170,28 +172,33 @@ static inline void positionCluster(HB_ShaperItem *item, int gfrom, int glast) break; case HB_Combining_BelowRight: p.y += offset; + // fall through case HB_Combining_BelowRightAttached: p.x += attachmentRect.x + attachmentRect.width - markMetrics.width - markMetrics.x; p.y += attachmentRect.y + attachmentRect.height - markMetrics.y; break; case HB_Combining_Left: p.x -= offset; + // fall through case HB_Combining_LeftAttached: break; case HB_Combining_Right: p.x += offset; + // fall through case HB_Combining_RightAttached: break; case HB_Combining_DoubleAbove: // ### wrong in RTL context! case HB_Combining_AboveLeft: p.y -= offset; + // fall through case HB_Combining_AboveLeftAttached: p.x += attachmentRect.x - markMetrics.x; p.y += attachmentRect.y - markMetrics.y - markMetrics.height; break; case HB_Combining_Above: p.y -= offset; + // fall through case HB_Combining_AboveAttached: p.x += attachmentRect.x - markMetrics.x; p.y += attachmentRect.y - markMetrics.y - markMetrics.height; @@ -200,6 +207,7 @@ static inline void positionCluster(HB_ShaperItem *item, int gfrom, int glast) break; case HB_Combining_AboveRight: p.y -= offset; + // fall through case HB_Combining_AboveRightAttached: p.x += attachmentRect.x + attachmentRect.width - markMetrics.x - markMetrics.width; p.y += attachmentRect.y - markMetrics.y - markMetrics.height; diff --git a/src/3rdparty/harfbuzz_dependency.pri b/src/3rdparty/harfbuzz_dependency.pri deleted file mode 100644 index 5946f403c5..0000000000 --- a/src/3rdparty/harfbuzz_dependency.pri +++ /dev/null @@ -1,6 +0,0 @@ -qtConfig(system-harfbuzz) { - QMAKE_USE_PRIVATE += harfbuzz -} else: qtConfig(harfbuzz) { - INCLUDEPATH += $$PWD/harfbuzz-ng/include - LIBS_PRIVATE += -L$$QT_BUILD_TREE/lib -lqtharfbuzzng$$qtPlatformTargetSuffix() -} diff --git a/src/3rdparty/libpng/libpng.pro b/src/3rdparty/libpng/libpng.pro index ab6dd51e2b..577b61d833 100644 --- a/src/3rdparty/libpng/libpng.pro +++ b/src/3rdparty/libpng/libpng.pro @@ -1,4 +1,4 @@ -TARGET = qtpng +TARGET = qtlibpng CONFIG += \ static \ @@ -6,6 +6,8 @@ CONFIG += \ exceptions_off rtti_off warn_off \ installed +MODULE_INCLUDEPATH = $$PWD + load(qt_helper_lib) DEFINES += PNG_ARM_NEON_OPT=0 diff --git a/src/3rdparty/pcre/pcre.pro b/src/3rdparty/pcre/pcre.pro index fad82b80b1..add4a932b3 100644 --- a/src/3rdparty/pcre/pcre.pro +++ b/src/3rdparty/pcre/pcre.pro @@ -5,12 +5,14 @@ CONFIG += \ hide_symbols \ exceptions_off rtti_off warn_off +win32: MODULE_DEFINES += PCRE_STATIC +MODULE_INCLUDEPATH += $$PWD + load(qt_helper_lib) DEFINES += HAVE_CONFIG_H # platform/compiler specific definitions -win32: DEFINES += PCRE_STATIC uikit|qnx|winrt: DEFINES += PCRE_DISABLE_JIT SOURCES += \ diff --git a/src/3rdparty/pcre_dependency.pri b/src/3rdparty/pcre_dependency.pri deleted file mode 100644 index f1355eabe6..0000000000 --- a/src/3rdparty/pcre_dependency.pri +++ /dev/null @@ -1,7 +0,0 @@ -qtConfig(system-pcre) { - QMAKE_USE_PRIVATE += pcre -} else { - win32: DEFINES += PCRE_STATIC - INCLUDEPATH += $$PWD/pcre - LIBS_PRIVATE += -L$$QT_BUILD_TREE/lib -lqtpcre$$qtPlatformTargetSuffix() -} diff --git a/src/3rdparty/png_dependency.pri b/src/3rdparty/png_dependency.pri deleted file mode 100644 index 50711358a0..0000000000 --- a/src/3rdparty/png_dependency.pri +++ /dev/null @@ -1,6 +0,0 @@ -qtConfig(system-png) { - QMAKE_USE_PRIVATE += libpng -} else: qtConfig(png) { - INCLUDEPATH += $$PWD/libpng - LIBS_PRIVATE += -L$$QT_BUILD_TREE/lib -lqtpng$$qtPlatformTargetSuffix() -} diff --git a/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivityLoader.java b/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivityLoader.java index 2494035c60..ce0ce3abc7 100644 --- a/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivityLoader.java +++ b/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivityLoader.java @@ -66,7 +66,7 @@ public class QtActivityLoader extends QtLoader { @Override public void onClick(DialogInterface dialogInterface, int i) { try { - Uri uri = Uri.parse("market://search?q=pname:org.kde.necessitas.ministro"); + Uri uri = Uri.parse("market://details?id=org.kde.necessitas.ministro"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); m_activity.startActivityForResult(intent, MINISTRO_INSTALL_REQUEST_CODE); } catch (Exception e) { diff --git a/src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java b/src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java index d281cb0996..aeac2448bb 100644 --- a/src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java +++ b/src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java @@ -73,7 +73,7 @@ public abstract class QtLoader { public final static int MINISTRO_INSTALL_REQUEST_CODE = 0xf3ee; // request code used to know when Ministro instalation is finished public static final int MINISTRO_API_LEVEL = 5; // Ministro api level (check IMinistro.aidl file) public static final int NECESSITAS_API_LEVEL = 2; // Necessitas api level used by platform plugin - public static final int QT_VERSION = 0x050100; // This app requires at least Qt version 5.1.0 + public static final int QT_VERSION = 0x050700; // This app requires at least Qt version 5.7.0 public static final String ERROR_CODE_KEY = "error.code"; public static final String ERROR_MESSAGE_KEY = "error.message"; diff --git a/src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentfilter.cpp b/src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentfilter.cpp index 53772fe55a..d09c7658d4 100644 --- a/src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentfilter.cpp +++ b/src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentfilter.cpp @@ -113,9 +113,9 @@ QSet<QString> dictionary = QtConcurrent::blockingFilteredReduced(strings, allLow //! [7] // keep only images with an alpha channel QList<QImage> images = ...; -QFuture<void> alphaImages = QtConcurrent::filter(strings, &QImage::hasAlphaChannel); +QFuture<void> alphaImages = QtConcurrent::filter(images, &QImage::hasAlphaChannel); -// keep only gray scale images +// retrieve gray scale images QList<QImage> images = ...; QFuture<QImage> grayscaleImages = QtConcurrent::filtered(images, &QImage::isGrayscale); diff --git a/src/corelib/codecs/QBKCODEC_LICENSE.txt b/src/corelib/codecs/QBKCODEC_LICENSE.txt new file mode 100644 index 0000000000..1eb9e3b0d4 --- /dev/null +++ b/src/corelib/codecs/QBKCODEC_LICENSE.txt @@ -0,0 +1,24 @@ +Copyright (C) 2000 TurboLinux, Inc. Written by Justin Yu and Sean Chen. +Copyright (C) 2001, 2002 Turbolinux, Inc. Written by James Su. +Copyright (C) 2001, 2002 ThizLinux Laboratory Ltd. Written by Anthony Fok. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/src/corelib/codecs/QEUCJPCODEC_LICENSE.txt b/src/corelib/codecs/QEUCJPCODEC_LICENSE.txt new file mode 100644 index 0000000000..b1754cf198 --- /dev/null +++ b/src/corelib/codecs/QEUCJPCODEC_LICENSE.txt @@ -0,0 +1,22 @@ +Copyright (C) 1999 Serika Kurusugawa, All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/src/corelib/codecs/QEUCKRCODEC_LICENSE.txt b/src/corelib/codecs/QEUCKRCODEC_LICENSE.txt new file mode 100644 index 0000000000..81327f1bcb --- /dev/null +++ b/src/corelib/codecs/QEUCKRCODEC_LICENSE.txt @@ -0,0 +1,22 @@ +Copyright (C) 1999-2000 Mizi Research Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/src/corelib/codecs/QJISCODEC_LICENSE.txt b/src/corelib/codecs/QJISCODEC_LICENSE.txt new file mode 100644 index 0000000000..b1754cf198 --- /dev/null +++ b/src/corelib/codecs/QJISCODEC_LICENSE.txt @@ -0,0 +1,22 @@ +Copyright (C) 1999 Serika Kurusugawa, All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/src/corelib/codecs/QSJISCODEC_LICENSE.txt b/src/corelib/codecs/QSJISCODEC_LICENSE.txt new file mode 100644 index 0000000000..b1754cf198 --- /dev/null +++ b/src/corelib/codecs/QSJISCODEC_LICENSE.txt @@ -0,0 +1,22 @@ +Copyright (C) 1999 Serika Kurusugawa, All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/src/corelib/codecs/QTSCIICODEC_LICENSE.txt b/src/corelib/codecs/QTSCIICODEC_LICENSE.txt new file mode 100644 index 0000000000..c66ff21389 --- /dev/null +++ b/src/corelib/codecs/QTSCIICODEC_LICENSE.txt @@ -0,0 +1,22 @@ +Copyright (C) 2000 Hans Petter Bieker. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/src/corelib/codecs/codecs.qdoc b/src/corelib/codecs/codecs.qdoc index e0f1c9b060..9364b7a989 100644 --- a/src/corelib/codecs/codecs.qdoc +++ b/src/corelib/codecs/codecs.qdoc @@ -55,35 +55,7 @@ \<anthony@thizlinux.com\> \<foka@debian.org\> to adapt the code for Qt. - \legalese - Copyright (C) 2000 Ming-Che Chuang - Copyright (C) 2002 James Su, Turbolinux Inc. - Copyright (C) 2002 Anthony Fok, ThizLinux Laboratory Ltd. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - \list 1 - \li Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - \li Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - \endlist - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - \endlegalese + \sa{Text Codecs: Big5, Big5-HKSCS} */ /*! @@ -124,36 +96,7 @@ Li18nux Big5 Standard Subgroup. See \l{http://www.autrijus.org/xml/} for the various Big5 CharMapML tables. - \legalese - Copyright (C) 2000 Ming-Che Chuang - Copyright (C) 2001, 2002 James Su, Turbolinux Inc. - Copyright (C) 2002 WU Yi, HancomLinux Inc. - Copyright (C) 2001, 2002 Anthony Fok, ThizLinux Laboratory Ltd. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - \list 1 - \li Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - \li Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - \endlist - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - \endlegalese + \sa{Text Codecs: Big5, Big5-HKSCS} */ /*! @@ -171,37 +114,9 @@ Most of the code here was written by Serika Kurusugawa, a.k.a. Junji Takagi, and is included in Qt with the author's - permission and the grateful thanks of the Qt team. Here is - the copyright statement for that code: - - \legalese - - Copyright (C) 1999 Serika Kurusugawa. All rights reserved. + permission and the grateful thanks of the Qt team. - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - \list 1 - \li Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - \li Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - \endlist - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS". - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - \endlegalese + \sa{Text Codec: EUC-JP} */ /*! @@ -217,34 +132,7 @@ contribution. The subsequent modifications are covered by the usual copyright for Qt. - \legalese - - Copyright (C) 1999-2000 Mizi Research Inc. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - \list 1 - \li Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - \li Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - \endlist - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - \endlegalese + \sa{Text Codec: EUC-KR} */ /*! @@ -292,37 +180,7 @@ A copy of the source Perl script is available at \l{http://people.debian.org/~foka/gb18030/gen-qgb18030codec.pl} - The copyright notice for their code follows: - - \legalese - Copyright (C) 2000 TurboLinux, Inc. Written by Justin Yu and Sean Chen. - Copyright (C) 2001, 2002 Turbolinux, Inc. Written by James Su. - Copyright (C) 2001, 2002 ThizLinux Laboratory Ltd. Written by Anthony Fok. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - \list 1 - \li Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - \li Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - \endlist - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - \endlegalese + \sa{Text Codec: GBK} */ /*! @@ -381,37 +239,9 @@ Most of the code here was written by Serika Kurusugawa, a.k.a. Junji Takagi, and is included in Qt with the author's - permission and the grateful thanks of the Qt team. Here is - the copyright statement for that code: - - \legalese + permission and the grateful thanks of the Qt team. - Copyright (C) 1999 Serika Kurusugawa. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - \list 1 - \li Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - \li Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - \endlist - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS". - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - \endlegalese + \sa{Text Codec: ISO 2022-JP (JIS)} */ /*! @@ -433,34 +263,7 @@ contribution. The subsequent modifications are covered by the usual copyright for Qt. - \legalese - - Copyright (C) 1999 Serika Kurusugawa. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - \list 1 - \li Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - \li Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - \endlist - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS". - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - \endlegalese + \sa{Text Codec: Shift-JIS} */ /*! @@ -483,37 +286,7 @@ Most of the code was written by Hans Petter Bieker and is included in Qt with the author's permission and the grateful - thanks of the Qt team. Here is the copyright statement for - the code as it was at the point of contribution. The - subsequent modifications are covered by the usual copyright for - Qt: - - \legalese - - Copyright (c) 2000 Hans Petter Bieker. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - \list 1 - \li Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - \li Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - \endlist + thanks of the Qt team. - THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - \endlegalese + \sa{Text Codec: TSCII} */ diff --git a/src/corelib/codecs/qt_attribution.json b/src/corelib/codecs/qt_attribution.json new file mode 100644 index 0000000000..41f644a030 --- /dev/null +++ b/src/corelib/codecs/qt_attribution.json @@ -0,0 +1,103 @@ +[ + { + "Id": "qbig5codecs", + "Name": "Text Codecs: Big5, Big5-HKSCS", + "QDocModule": "qtcore", + "QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.", + "Path": "qbig5codec.cpp", + + "Description": "The Big5 codecs (QBig5Codec, QBig5hkscsCodec) +provide conversion to and from the Big5 encodings.", + "License": "BSD 2-clause \"Simplified\" License", + "LicenseId": "BSD-2-Clause", + "LicenseFile": "QBIG5CODEC_LICENSE.txt", + "Copyright": "Copyright (C) 2000 Ming-Che Chuang +Copyright (C) 2001, 2002 James Su, Turbolinux Inc. +Copyright (C) 2002 WU Yi, HancomLinux Inc. +Copyright (C) 2001, 2002 Anthony Fok, ThizLinux Laboratory Ltd." +}, + { + "Id": "qeucjpcodec", + "Name": "Text Codec: EUC-JP", + "QDocModule": "qtcore", + "QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.", + "Path": "qeucjpcodec.cpp", + + "Description": "The EUC-JP text codec provides conversion to and from EUC-JP, +the main legacy encoding for Unix machines in Japan.", + "License": "BSD 2-clause \"Simplified\" License", + "LicenseId": "BSD-2-Clause", + "LicenseFile": "QEUCJPCODEC_LICENSE.txt", + "Copyright": "Copyright (C) 1999 Serika Kurusugawa." + }, + { + "Id": "qeuckrcodec", + "Name": "Text Codec: EUC-KR", + "QDocModule": "qtcore", + "QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.", + "Path": "qeuckrcodec.cpp", + + "Description": "The EUC-KR text codec provides conversion to and from EUC-KR, KR, +the main legacy encoding for Unix machines in Korea.", + "License": "BSD 2-clause \"Simplified\" License", + "LicenseId": "BSD-2-Clause", + "LicenseFile": "QEUCKRCODEC_LICENSE.txt", + "Copyright": "Copyright (C) 1999-2000 Mizi Research Inc." + }, + { + "Id": "qjiscodec", + "Name": "Text Codec: ISO 2022-JP (JIS)", + "QDocModule": "qtcore", + "QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.", + "Path": "qjiscodec.cpp", + + "Description": "The ISO 2022-JP (JIS) text codec provides conversion to and from ISO 2022-JP.", + "License": "BSD 2-clause \"Simplified\" License", + "LicenseId": "BSD-2-Clause", + "LicenseFile": "QJISCODEC_LICENSE.txt", + "Copyright": "Copyright (C) 1999 Serika Kurusugawa." + }, + { + "Id": "qsjiscodec", + "Name": "Text Codec: Shift-JIS", + "QDocModule": "qtcore", + "QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.", + "Path": "qsjiscodec.cpp", + + "Description": "The Shift-JIS text codec provides conversion to and from Shift-JIS.", + "License": "BSD 2-clause \"Simplified\" License", + "LicenseId": "BSD-2-Clause", + "LicenseFile": "QSJISCODEC_LICENSE.txt", + "Copyright": "Copyright (C) 1999 Serika Kurusugawa." + }, + { + "Id": "qtsciicodec", + "Name": "Text Codec: TSCII", + "QDocModule": "qtcore", + "QtUsage": "Used in Qt Core.", + "Path": "qtsciicodec.cpp", + + "Description": "The TSCII text codec provides conversion to and from the Tamil TSCII +encoding.", + "License": "BSD 2-clause \"Simplified\" License", + "LicenseId": "BSD-2-Clause", + "LicenseFile": "QTSCIICODEC_LICENSE.txt", + "Copyright": "Copyright (C) 2000 Hans Petter Bieker." + }, + { + "Id": "qbkcodec", + "Name": "Text Codec: GBK", + "QDocModule": "qtcore", + "QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.", + "Path": "qgb18030codec.cpp", + + "Description": "The GBK codec provides conversion to and from the Chinese +GB18030/GBK/GB2312 encoding.", + "License": "BSD 2-clause \"Simplified\" License", + "LicenseId": "BSD-2-Clause", + "LicenseFile": "QBKCODEC_LICENSE.txt", + "Copyright": "Copyright (C) 2000 TurboLinux, Inc. Written by Justin Yu and Sean Chen. +Copyright (C) 2001, 2002 Turbolinux, Inc. Written by James Su. +Copyright (C) 2001, 2002 ThizLinux Laboratory Ltd. Written by Anthony Fok." + } +] diff --git a/src/corelib/configure.json b/src/corelib/configure.json index c1bd37fd0c..e7eb5fe482 100644 --- a/src/corelib/configure.json +++ b/src/corelib/configure.json @@ -61,7 +61,6 @@ "journald": { "label": "journald", "test": "unix/journald", - "export": "", "sources": [ { "type": "pkgConfig", "args": "libsystemd" }, { "type": "pkgConfig", "args": "libsystemd-journal" } @@ -579,7 +578,10 @@ }, "topleveldomain": { "label": "QUrl::topLevelDomain()", - "description": "Provides support for extracting the top level domain from URLs.", + "purpose": "Provides support for extracting the top level domain from URLs. + +If enabled, a binary dump of the Public Suffix List (http://www.publicsuffix.org, +Mozilla License) is included. The data is then also used in QNetworkCookieJar::validateCookie.", "section": "Utilities", "output": [ "publicFeature" ] } diff --git a/src/corelib/doc/src/containers.qdoc b/src/corelib/doc/src/containers.qdoc index 0b98397a68..a1c32bb007 100644 --- a/src/corelib/doc/src/containers.qdoc +++ b/src/corelib/doc/src/containers.qdoc @@ -158,11 +158,8 @@ \endtable Containers can be nested. For example, it is perfectly possible - to use a QMap<QString, QList<int> >, where the key type is - QString and the value type QList<int>. The only pitfall is that - you must insert a space between the closing angle brackets (>); - otherwise the C++ compiler will misinterpret the two >'s as a - right-shift operator (>>) and report a syntax error. + to use a QMap<QString, QList<int>>, where the key type is + QString and the value type QList<int>. The containers are defined in individual header files with the same name as the container (e.g., \c <QLinkedList>). For diff --git a/src/corelib/doc/src/eventsandfilters.qdoc b/src/corelib/doc/src/eventsandfilters.qdoc index 4e914d17cc..947a24f4e5 100644 --- a/src/corelib/doc/src/eventsandfilters.qdoc +++ b/src/corelib/doc/src/eventsandfilters.qdoc @@ -80,7 +80,7 @@ \section1 Event Types - Most events types have special classes, notably QResizeEvent, + Most event types have special classes, notably QResizeEvent, QPaintEvent, QMouseEvent, QKeyEvent, and QCloseEvent. Each class subclasses QEvent and adds event-specific functions. For example, QResizeEvent adds \l{QResizeEvent::}{size()} and diff --git a/src/corelib/global/global.pri b/src/corelib/global/global.pri index afcd20a9c1..bd2e125006 100644 --- a/src/corelib/global/global.pri +++ b/src/corelib/global/global.pri @@ -59,11 +59,7 @@ slog2 { } journald { - CONFIG += link_pkgconfig - packagesExist(libsystemd): \ - PKGCONFIG_PRIVATE += libsystemd - else: \ - PKGCONFIG_PRIVATE += libsystemd-journal + QMAKE_USE_PRIVATE += journald DEFINES += QT_USE_JOURNALD } diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index d42a7a0ea6..cbefe92eca 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -4192,8 +4192,10 @@ bool QInternal::activateCallbacks(Callback cb, void **parameters) Compares the floating point value \a p1 and \a p2 and returns \c true if they are considered equal, otherwise \c false. - Note that comparing values where either \a p1 or \a p2 is 0.0 will not work. - The solution to this is to compare against values greater than or equal to 1.0. + Note that comparing values where either \a p1 or \a p2 is 0.0 will not work, + nor does comparing values where one of the values is NaN or infinity. + If one of the values is always 0.0, use qFuzzyIsNull instead. If one of the + values is likely to be 0.0, one solution is to add 1.0 to both values. \snippet code/src_corelib_global_qglobal.cpp 46 diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 8b67f0d3ef..1bcd30e0b3 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -593,9 +593,9 @@ Q_DECL_CONSTEXPR inline const T &qBound(const T &min, const T &val, const T &max # define QT_WATCHOS_DEPLOYMENT_TARGET_BELOW(watchos) \ QT_DARWIN_DEPLOYMENT_TARGET_BELOW(__MAC_NA, __IPHONE_NA, __TVOS_NA, watchos) +// Compatibility synonyms, do not use # define QT_MAC_PLATFORM_SDK_EQUAL_OR_ABOVE(osx, ios) QT_MACOS_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(osx, ios) # define QT_MAC_DEPLOYMENT_TARGET_BELOW(osx, ios) QT_MACOS_IOS_DEPLOYMENT_TARGET_BELOW(osx, ios) - # define QT_OSX_PLATFORM_SDK_EQUAL_OR_ABOVE(osx) QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(osx) # define QT_OSX_DEPLOYMENT_TARGET_BELOW(osx) QT_MACOS_DEPLOYMENT_TARGET_BELOW(osx) diff --git a/src/corelib/global/qglobal_p.h b/src/corelib/global/qglobal_p.h index c329357f46..b8f9e5fbf7 100644 --- a/src/corelib/global/qglobal_p.h +++ b/src/corelib/global/qglobal_p.h @@ -53,10 +53,5 @@ #include <QtCore/private/qtcore-config_p.h> #endif -#define QT_LIBRARY_VERSION(lib) QT_LIBRARY_VERSION_##lib -#define QT_LIBRARY_VERSION_MAJOR(lib) (QT_LIBRARY_VERSION_##lib >> 16) -#define QT_LIBRARY_VERSION_MINOR(lib) ((QT_LIBRARY_VERSION_##lib >> 8) & 0xff) -#define QT_LIBRARY_VERSION_PATCH(lib) (QT_LIBRARY_VERSION_##lib & 0xff) - #endif // QGLOBAL_P_H diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h index 5a66319164..e2b0d30db0 100644 --- a/src/corelib/global/qnamespace.h +++ b/src/corelib/global/qnamespace.h @@ -1197,7 +1197,8 @@ public: SystemLocaleLongDate, DefaultLocaleShortDate, DefaultLocaleLongDate, - RFC2822Date // RFC 2822 (+ 850 and 1036 during parsing) + RFC2822Date, // RFC 2822 (+ 850 and 1036 during parsing) + ISODateWithMs }; enum TimeSpec { diff --git a/src/corelib/global/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc index 7768070e4f..250195a512 100644 --- a/src/corelib/global/qnamespace.qdoc +++ b/src/corelib/global/qnamespace.qdoc @@ -658,6 +658,8 @@ \c{YYYY-MM-DDTHH:mm:ss}, \c{YYYY-MM-DDTHH:mm:ssTZD} (e.g., 1997-07-16T19:20:30+01:00) for combined dates and times. + \value ISODateWithMs \l{ISO 8601} extended format, including milliseconds if applicable. + \value SystemLocaleShortDate The \l{QLocale::ShortFormat}{short format} used by the \l{QLocale::system()}{operating system}. diff --git a/src/corelib/global/qversiontagging.h b/src/corelib/global/qversiontagging.h index 1e276dc3e0..3ed02c7376 100644 --- a/src/corelib/global/qversiontagging.h +++ b/src/corelib/global/qversiontagging.h @@ -60,7 +60,7 @@ QT_BEGIN_NAMESPACE * There will only be one copy of the section in the output library or application. */ -#if defined(QT_BUILD_CORE_LIB) || defined(QT_BOOTSTRAPPED) || defined(QT_NO_VERSION_TAGGING) +#if defined(QT_BUILD_CORE_LIB) || defined(QT_BOOTSTRAPPED) || defined(QT_NO_VERSION_TAGGING) || defined(QT_STATIC) // don't make tags in QtCore, bootstrapped systems or if the user asked not to #elif defined(Q_CC_GNU) && !defined(Q_OS_ANDROID) # if defined(Q_PROCESSOR_X86) && (defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD_KERNEL)) diff --git a/src/corelib/io/QTEMPORARYFILE_LICENSE.txt b/src/corelib/io/QTEMPORARYFILE_LICENSE.txt new file mode 100644 index 0000000000..f5f1a2e05e --- /dev/null +++ b/src/corelib/io/QTEMPORARYFILE_LICENSE.txt @@ -0,0 +1,26 @@ +Copyright (c) 1987, 1993 + The Regents of the University of California. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/src/corelib/io/qfileinfo.cpp b/src/corelib/io/qfileinfo.cpp index baf8cbd193..5acee25d02 100644 --- a/src/corelib/io/qfileinfo.cpp +++ b/src/corelib/io/qfileinfo.cpp @@ -293,8 +293,7 @@ QDateTime &QFileInfoPrivate::getFileTime(QAbstractFileEngine::FileTime request) \note To speed up performance, QFileInfo caches information about the file. - To speed up performance, QFileInfo caches information about the - file. Because files can be changed by other users or programs, or + Because files can be changed by other users or programs, or even by other parts of the same program, there is a function that refreshes the file information: refresh(). If you want to switch off a QFileInfo's caching and force it to access the file system diff --git a/src/corelib/io/qfilesystemengine_unix.cpp b/src/corelib/io/qfilesystemengine_unix.cpp index c9f7672ac3..5de85f9811 100644 --- a/src/corelib/io/qfilesystemengine_unix.cpp +++ b/src/corelib/io/qfilesystemengine_unix.cpp @@ -283,7 +283,7 @@ QFileSystemEntry QFileSystemEngine::canonicalName(const QFileSystemEntry &entry, if (ret) { data.knownFlagsMask |= QFileSystemMetaData::ExistsAttribute; data.entryFlags |= QFileSystemMetaData::ExistsAttribute; - QString canonicalPath = QDir::cleanPath(QString::fromLocal8Bit(ret)); + QString canonicalPath = QDir::cleanPath(QFile::decodeName(ret)); free(ret); return QFileSystemEntry(canonicalPath); } else if (errno == ENOENT) { // file doesn't exist diff --git a/src/corelib/io/qfilesystemwatcher_fsevents.mm b/src/corelib/io/qfilesystemwatcher_fsevents.mm index a5558b62e7..b4517cbac7 100644 --- a/src/corelib/io/qfilesystemwatcher_fsevents.mm +++ b/src/corelib/io/qfilesystemwatcher_fsevents.mm @@ -343,7 +343,7 @@ QStringList QFseventsFileSystemWatcherEngine::addPaths(const QStringList &paths, QStringList p = paths; QMutableListIterator<QString> it(p); while (it.hasNext()) { - QString origPath = it.next(); + QString origPath = it.next().normalized(QString::NormalizationForm_C); QString realPath = origPath; if (realPath.endsWith(QDir::separator())) realPath = realPath.mid(0, realPath.size() - 1); diff --git a/src/corelib/io/qfsfileengine_win.cpp b/src/corelib/io/qfsfileengine_win.cpp index 5c79a745fa..117c224318 100644 --- a/src/corelib/io/qfsfileengine_win.cpp +++ b/src/corelib/io/qfsfileengine_win.cpp @@ -382,11 +382,11 @@ qint64 QFSFileEnginePrivate::nativeWrite(const char *data, qint64 len) // Writing on Windows fails with ERROR_NO_SYSTEM_RESOURCES when // the chunks are too large, so we limit the block size to 32MB. - const DWORD blockSize = DWORD(qMin(bytesToWrite, qint64(32 * 1024 * 1024))); qint64 totalWritten = 0; do { + const DWORD currentBlockSize = DWORD(qMin(bytesToWrite, qint64(32 * 1024 * 1024))); DWORD bytesWritten; - if (!WriteFile(fileHandle, data + totalWritten, blockSize, &bytesWritten, NULL)) { + if (!WriteFile(fileHandle, data + totalWritten, currentBlockSize, &bytesWritten, NULL)) { if (totalWritten == 0) { // Note: Only return error if the first WriteFile failed. q->setError(QFile::WriteError, qt_error_string()); diff --git a/src/corelib/io/qsettings_mac.cpp b/src/corelib/io/qsettings_mac.cpp index a31dfc5366..dcaefd1613 100644 --- a/src/corelib/io/qsettings_mac.cpp +++ b/src/corelib/io/qsettings_mac.cpp @@ -274,7 +274,6 @@ static QVariant qtValue(CFPropertyListRef cfvalue) const QString str = QString::fromUtf8(byteArray.constData(), byteArray.size()); return QSettingsPrivate::stringToVariant(str); - } else if (typeId == CFDictionaryGetTypeID()) { CFDictionaryRef cfdict = static_cast<CFDictionaryRef>(cfvalue); CFTypeID arrayTypeId = CFArrayGetTypeID(); diff --git a/src/corelib/io/qstandardpaths_unix.cpp b/src/corelib/io/qstandardpaths_unix.cpp index 0561e5833f..7974dc8cca 100644 --- a/src/corelib/io/qstandardpaths_unix.cpp +++ b/src/corelib/io/qstandardpaths_unix.cpp @@ -245,7 +245,7 @@ QString QStandardPaths::writableLocation(StandardLocation type) break; case FontsLocation: - path = QDir::homePath() + QLatin1String("/.fonts"); + path = writableLocation(GenericDataLocation) + QLatin1String("/fonts"); break; case MusicLocation: @@ -340,6 +340,9 @@ QStringList QStandardPaths::standardLocations(StandardLocation type) for (int i = 0; i < dirs.count(); ++i) appendOrganizationAndApp(dirs[i]); break; + case FontsLocation: + dirs += QDir::homePath() + QLatin1String("/.fonts"); + break; default: break; } diff --git a/src/corelib/io/qt_attribution.json b/src/corelib/io/qt_attribution.json new file mode 100644 index 0000000000..2a616a2819 --- /dev/null +++ b/src/corelib/io/qt_attribution.json @@ -0,0 +1,13 @@ +{ + "Id": "qtemporaryfile", + "Name": "Parts of QTemporaryFile", + "QDocModule": "qtcore", + "QtUsage": "Used in Qt Core. Disable the qtemporaryfile feature to avoid.", + "Path": "qtemporaryfile.cpp", + + "Description": "Generates a unique file path and returns a native handle to the open file.", + "License": "BSD 3-clause \"New\" or \"Revised\" License", + "LicenseId": "BSD-3-Clause", + "LicenseFile": "QTEMPORARYFILE_LICENSE.txt", + "Copyright": "Copyright (c) 1987, 1993 The Regents of the University of California." +} diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp index c165aef5a2..b7762c2ae6 100644 --- a/src/corelib/io/qurl.cpp +++ b/src/corelib/io/qurl.cpp @@ -155,7 +155,7 @@ dealing with URLs and strings: \list - \li When creating an QString to contain a URL from a QByteArray or a + \li When creating a QString to contain a URL from a QByteArray or a char*, always use QString::fromUtf8(). \endlist */ @@ -4128,35 +4128,6 @@ static bool isIp6(const QString &text) return !text.isEmpty() && QIPAddressUtils::parseIp6(address, text.begin(), text.end()) == 0; } -// The following code has the following copyright: -/* - Copyright (C) Research In Motion Limited 2009. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Research In Motion Limited nor the - contributors may be used to endorse or promote products derived - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY Research In Motion Limited ''AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL Research In Motion Limited BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*/ - - /*! Returns a valid URL from a user supplied \a userInput string if one can be deducted. In the case that is not possible, an invalid QUrl() is returned. @@ -4275,6 +4246,5 @@ QUrl QUrl::fromUserInput(const QString &userInput) return QUrl(); } -// end of BSD code QT_END_NAMESPACE diff --git a/src/corelib/io/qurltlds_p.h b/src/corelib/io/qurltlds_p.h index 2bd5c68c7b..87e9382339 100644 --- a/src/corelib/io/qurltlds_p.h +++ b/src/corelib/io/qurltlds_p.h @@ -60,11678 +60,13225 @@ QT_BEGIN_NAMESPACE // this file should be updated before each release -> // for instructions see the program at // util/corelib/qurl-generateTLDs -static const quint16 tldCount = 7150; + +static const quint16 tldCount = 8101; static const quint32 tldIndices[] = { 0, -40, -40, -49, -49, -49, -71, -95, -95, -110, -123, -123, -151, -189, -189, -189, -189, -189, -189, -189, -189, -189, -202, -202, -202, -208, -219, -219, -219, -219, -219, -238, -249, -278, -294, -301, -312, -312, -317, -317, -317, -323, -330, -406, -406, -467, -467, -500, -500, -500, -512, -533, -533, -533, -533, -533, -542, -574, -580, -620, -620, -633, -645, -645, -659, -659, -659, -685, -685, -703, +15, +43, +55, +60, +70, +80, +101, +101, +154, +169, +169, +169, +184, +184, +195, +217, +217, +235, +255, +276, +296, +296, +314, +345, +350, +350, +358, +384, +400, +424, +424, +431, +452, +472, +508, +508, +508, +508, +525, +558, +581, +581, +594, +608, +608, +628, +628, +652, +680, +680, 703, -721, -721, -721, -737, -744, -744, -756, +722, +722, +760, 768, -774, -774, -774, -784, -784, -802, -841, -882, -882, -882, -882, -905, -924, -935, -950, -960, -960, -972, -983, -983, -983, -990, -997, -1017, -1037, -1045, -1045, -1045, -1063, -1069, -1085, -1085, -1085, -1085, -1085, -1085, -1085, -1136, -1145, -1183, -1183, -1225, -1225, -1241, -1241, -1259, -1282, -1305, -1305, -1358, -1358, -1370, -1370, -1383, -1383, -1430, -1430, -1430, -1457, -1466, -1472, -1472, -1472, -1472, -1486, -1518, -1564, -1593, -1614, -1661, -1675, -1675, -1691, -1719, -1730, -1750, -1750, -1755, -1759, -1773, -1797, -1823, -1841, -1848, +768, +788, +788, +814, +847, +847, +865, +895, +895, +930, +930, +936, +964, +991, +1025, +1042, +1061, +1061, +1082, +1098, +1098, +1098, +1111, +1135, +1141, +1141, +1141, +1160, +1192, +1192, +1192, +1192, +1192, +1192, +1207, +1207, +1214, +1219, +1219, +1219, +1242, +1255, +1255, +1255, +1272, +1291, +1291, +1291, +1309, +1334, +1372, +1376, +1376, +1385, +1419, +1419, +1419, +1427, +1442, +1442, +1450, +1450, +1469, +1508, +1533, +1533, +1574, +1582, +1582, +1592, +1625, +1643, +1643, +1653, +1653, +1664, +1664, +1687, +1687, +1731, +1742, +1760, +1760, +1760, +1775, +1788, +1815, +1815, +1815, +1815, +1827, +1842, +1850, +1850, +1874, +1874, +1887, 1887, -1894, -1911, -1918, -1923, -1929, -1966, -1966, -1973, -1973, -1973, -1990, -2041, -2059, -2075, -2093, -2093, -2093, -2127, -2136, -2152, -2159, -2178, -2201, +1887, +1917, +1931, +1962, +1962, +1962, +2002, +2017, +2073, +2073, +2103, +2103, +2120, +2160, +2168, +2168, +2176, +2193, +2199, +2199, +2205, 2212, -2219, -2219, -2219, -2233, -2240, -2247, -2247, -2273, -2298, +2212, +2226, +2226, +2226, +2226, +2261, +2282, 2298, -2305, -2330, -2377, -2410, -2461, -2468, -2511, -2511, -2524, -2524, -2530, -2547, -2560, -2576, -2583, -2599, -2599, -2599, -2599, -2599, -2628, -2671, -2692, -2697, -2726, -2726, -2756, -2756, -2775, -2775, -2787, -2814, -2814, -2839, -2853, -2869, -2901, -2949, -2949, -2972, -2972, -2979, -2997, -3003, -3014, -3014, -3014, -3014, -3014, -3014, -3043, -3043, -3070, -3070, +2316, +2316, +2316, +2316, +2316, +2373, +2373, +2390, +2390, +2397, +2412, +2428, +2435, +2435, +2443, +2443, +2451, +2458, +2504, +2504, +2510, +2510, +2510, +2517, +2544, +2555, +2573, +2612, +2627, +2627, +2650, +2657, +2664, +2674, +2691, +2698, +2706, +2713, +2713, +2729, +2743, +2750, +2781, +2781, +2796, +2796, +2809, +2816, +2836, +2866, +2887, +2894, +2943, +2950, +2950, +2950, +2950, +2970, +2970, +3002, +3002, +3015, +3022, +3032, +3059, +3069, +3084, 3091, 3091, -3097, -3108, -3108, -3108, +3098, +3098, +3107, 3125, -3182, -3232, -3283, -3283, -3292, -3312, -3319, -3359, -3379, -3406, -3433, -3441, -3448, -3459, -3466, -3466, -3466, -3466, -3466, -3473, -3491, -3498, -3524, -3524, -3568, -3605, -3605, -3618, -3618, -3618, -3632, -3632, -3632, -3632, -3645, -3645, -3652, -3662, -3662, -3701, -3708, +3132, +3140, +3172, +3189, +3205, +3218, +3224, +3231, +3255, +3261, +3261, +3261, +3261, +3279, +3285, +3296, +3310, +3317, +3317, +3333, +3352, +3362, +3362, +3362, +3362, +3404, +3404, +3404, +3404, +3404, +3404, +3415, +3428, +3428, +3483, +3503, +3503, +3530, +3555, +3562, +3562, +3578, +3593, +3600, +3622, +3629, +3644, +3663, +3663, +3685, +3685, +3685, +3685, 3713, -3729, -3742, -3767, -3799, -3799, -3806, -3806, -3824, -3824, -3839, -3839, -3854, -3876, -3883, -3883, -3890, -3896, -3939, -3939, -3953, -3953, -3953, -3953, -3988, +3730, +3757, +3775, +3775, +3775, +3800, +3815, +3815, +3815, +3815, +3815, +3900, +3900, +3950, +3950, +3959, +3959, +3959, +3974, 4005, -4019, -4039, -4039, -4058, -4069, -4094, -4101, -4139, -4146, -4174, -4206, -4221, -4221, -4237, -4237, -4254, -4270, -4277, -4301, -4301, -4301, -4301, -4327, -4327, -4334, -4341, -4361, -4361, -4368, -4391, -4403, -4403, -4416, -4416, -4423, -4448, -4448, -4448, -4500, -4534, -4543, -4543, -4562, -4569, -4576, -4613, -4632, -4639, -4646, -4670, -4670, -4670, -4677, -4695, -4695, -4695, -4702, -4720, -4734, -4734, -4734, -4734, -4741, -4741, -4741, -4748, -4748, -4762, -4785, -4792, -4823, -4823, -4861, -4886, -4886, -4886, -4922, -4922, -4932, -4939, -4939, -4939, -4946, -4953, -4953, -4977, -4977, -4977, -4984, -5009, -5028, -5080, -5080, -5080, -5080, -5110, -5117, -5132, -5143, -5167, -5184, -5184, -5184, -5209, -5209, -5230, -5230, -5238, -5260, -5289, -5289, -5298, -5315, -5315, -5315, +4070, +4141, +4141, +4160, +4177, +4177, +4207, +4235, +4263, +4274, +4280, +4280, +4290, +4321, +4338, +4381, +4396, +4402, +4446, +4461, +4461, +4461, +4485, +4496, +4512, +4528, +4580, +4580, +4624, +4650, +4650, +4650, +4672, +4714, +4714, +4721, +4728, +4751, +4769, +4769, +4769, +4783, +4783, +4783, +4807, +4814, +4821, +4821, +4839, +4892, +4908, +4908, +4908, +4915, +4952, +4952, +4959, +4966, +4973, +4973, +4980, +4999, +5032, +5039, +5057, +5095, +5112, +5127, +5127, +5144, +5151, +5172, +5172, +5186, +5200, +5215, +5236, +5263, +5294, +5294, +5294, +5310, +5310, +5320, +5320, +5350, 5350, -5356, -5356, -5356, -5356, 5370, 5392, -5413, -5430, -5437, -5471, -5502, -5514, -5514, -5534, -5552, -5559, -5559, -5616, -5651, -5657, -5657, -5657, -5674, -5681, -5681, -5681, -5702, -5709, -5745, -5764, -5776, -5776, -5812, -5827, -5849, -5875, -5892, -5913, -5913, -5920, -5935, -5980, -5987, -6024, -6024, -6041, -6058, +5392, +5419, +5419, +5419, +5426, +5426, +5426, +5433, +5449, +5449, +5455, +5468, +5481, +5487, +5487, +5521, +5581, +5581, +5604, +5604, +5617, +5624, +5631, +5631, +5666, +5666, +5692, +5705, +5719, +5726, +5746, +5761, +5777, +5789, +5795, +5802, +5815, +5833, +5839, +5846, +5846, +5846, +5868, +5868, +5887, +5899, +5910, +5927, +5937, +5937, +5974, +5996, +6019, +6019, +6027, +6027, +6033, +6066, 6066, -6103, -6103, -6103, -6127, -6127, -6137, -6157, -6223, -6248, -6297, -6297, -6297, -6325, -6332, -6355, -6355, -6382, -6408, -6423, -6423, -6423, -6440, -6452, -6462, -6482, -6482, -6482, -6500, -6500, -6518, -6518, -6518, -6526, -6535, -6535, -6542, +6088, +6095, +6109, +6123, +6130, +6130, +6168, +6176, +6176, +6176, +6176, +6183, +6183, +6190, +6207, +6235, +6254, +6254, +6266, +6293, +6293, +6308, +6329, +6341, +6360, +6367, +6407, +6413, +6431, +6460, +6467, +6467, +6488, +6510, +6510, +6538, 6560, -6570, -6585, -6604, -6604, -6604, -6604, -6617, -6626, -6626, -6626, -6654, -6654, -6680, -6695, -6695, -6695, -6706, -6706, -6736, -6736, -6766, -6766, -6766, -6766, -6766, -6775, -6775, -6775, -6786, -6825, -6825, -6834, -6854, -6854, -6854, -6897, -6915, -6915, -6960, -7002, +6575, +6589, +6589, +6589, +6589, +6606, +6606, +6614, +6629, +6629, +6635, +6647, +6667, +6696, +6696, +6703, +6712, +6712, +6752, +6759, +6759, +6791, +6815, +6815, +6822, +6859, +6859, +6875, +6900, +6906, +6913, +6942, +6981, +6996, +6996, +7015, +7015, 7015, -7077, -7155, -7207, -7222, -7250, -7284, -7284, -7297, -7334, -7357, -7357, -7373, -7373, -7373, -7398, -7411, -7424, -7458, -7470, -7508, -7508, -7531, -7538, -7554, +7022, +7044, +7044, +7062, +7062, +7062, +7089, +7102, +7102, +7150, +7159, +7186, +7194, +7204, +7204, +7226, +7256, +7264, +7277, +7302, +7316, +7316, +7351, +7387, +7410, +7410, +7410, +7421, +7463, +7463, +7463, +7463, +7463, +7499, +7521, +7521, +7550, 7566, -7580, -7612, -7612, -7612, -7619, -7629, -7636, -7648, -7682, -7682, -7701, -7712, -7712, -7712, -7719, -7719, -7746, -7746, -7746, -7770, -7770, -7770, -7770, -7770, -7795, -7847, -7847, -7847, -7868, -7868, -7877, -7893, -7910, -7942, -7976, -7976, -8015, -8020, -8031, -8031, -8040, -8040, -8059, -8071, -8092, -8123, -8136, -8136, -8136, -8141, -8141, -8141, -8148, -8148, -8193, -8193, -8210, -8230, -8247, -8247, -8264, -8296, -8317, -8332, -8332, -8332, -8364, -8392, -8403, -8421, -8421, -8441, -8441, -8441, -8441, -8441, -8460, -8474, -8487, -8508, -8508, -8508, -8526, -8540, -8540, -8540, -8540, -8572, -8596, -8641, -8641, -8641, -8686, -8686, -8686, -8695, -8695, -8714, -8735, -8744, -8775, -8780, +7600, +7627, +7627, +7627, +7641, +7652, +7665, +7677, +7677, +7677, +7693, +7709, +7709, +7725, +7725, +7757, +7757, +7811, +7817, +7874, +7886, +7905, +7905, +7905, +7905, +7929, +7929, +7958, +7972, +7988, +7988, +7988, +8007, +8038, +8078, +8078, +8084, +8084, +8111, +8111, +8111, +8118, +8118, +8118, +8118, +8118, +8118, +8128, +8147, +8159, +8166, +8166, +8191, +8191, +8229, +8229, +8229, +8229, +8229, +8251, +8258, +8258, +8258, +8258, +8258, +8263, +8263, +8272, +8290, +8301, +8301, +8333, +8333, +8350, +8357, +8408, +8408, +8408, +8425, +8469, +8469, +8504, +8545, +8552, +8552, +8552, +8552, +8552, +8552, +8552, +8552, +8552, +8552, +8552, +8552, +8552, +8552, +8552, +8552, +8575, +8608, +8608, +8608, +8634, +8652, +8652, +8673, +8673, +8673, +8673, +8688, +8688, +8717, +8717, +8762, +8762, +8762, +8779, 8802, -8802, -8802, -8802, -8835, -8842, -8894, -8894, -8908, -8908, -8908, -8942, -8967, -8967, -9008, -9008, -9023, -9035, -9035, -9035, -9052, -9079, -9087, -9087, -9127, -9139, -9139, -9173, -9173, -9199, -9208, -9235, -9235, -9249, -9249, -9259, -9259, -9267, -9285, -9300, -9300, -9322, -9337, -9342, -9342, -9348, -9407, -9418, -9434, -9434, -9455, -9455, -9455, -9469, -9489, -9489, -9527, -9527, -9527, -9568, -9568, -9568, -9578, -9603, -9610, -9610, -9610, -9621, -9621, -9625, -9641, -9649, -9649, -9649, -9667, -9667, -9667, -9680, -9709, -9709, -9739, -9739, -9766, -9775, -9783, -9790, -9810, -9810, -9828, -9828, -9853, -9867, -9867, -9867, -9867, -9884, -9884, -9900, -9900, -9936, -9954, -9954, -9977, -9987, -9987, -9994, -9994, -10009, -10009, -10009, -10029, -10047, -10047, -10062, -10076, -10076, -10100, -10106, -10106, -10113, -10129, -10143, -10166, -10166, -10198, -10208, -10208, -10229, -10251, -10251, -10275, -10275, -10281, -10314, -10333, -10333, -10333, -10357, -10357, -10378, -10386, -10398, -10420, -10443, -10461, -10480, -10488, -10498, -10498, -10498, -10498, -10528, -10528, -10534, -10534, -10534, -10534, -10534, -10534, -10534, -10558, -10579, -10595, -10595, -10595, -10595, -10611, -10611, +8812, +8844, +8844, +8850, +8862, +8887, +8893, +8928, +8946, +8978, +9010, +9010, +9010, +9010, +9041, +9047, +9047, +9047, +9054, +9054, +9054, +9054, +9054, +9061, +9061, +9098, +9117, +9129, +9162, +9179, +9179, +9185, +9221, +9221, +9244, +9258, +9288, +9295, +9307, +9307, +9307, +9314, +9356, +9356, +9372, +9372, +9403, +9425, +9430, +9430, +9447, +9447, +9454, +9496, +9528, +9535, +9543, +9570, +9577, +9577, +9619, +9619, +9626, +9640, +9647, +9672, +9687, +9694, +9705, +9770, +9820, +9827, +9843, +9861, +9874, +9886, +9893, +9916, +9931, +9931, +9941, +9968, +10012, +10030, +10045, +10045, +10052, +10068, +10104, +10104, +10111, +10111, +10126, +10136, +10144, +10144, +10151, +10157, +10164, +10176, +10197, +10197, +10197, +10222, +10222, +10222, +10245, +10276, +10292, +10298, +10318, +10318, +10346, +10353, +10353, +10360, +10360, +10371, +10395, +10395, +10405, +10413, +10413, +10413, +10440, +10440, +10448, +10481, +10481, +10481, +10495, +10495, +10495, +10509, +10516, +10525, +10543, +10550, +10550, +10594, +10594, 10634, -10659, -10659, -10659, -10659, -10659, -10659, -10698, -10716, -10741, -10749, -10768, -10801, -10813, -10842, -10842, -10860, -10860, -10879, -10917, -10939, -10958, -10964, -10964, -10986, -10994, -11000, -11005, -11005, -11005, -11021, -11031, -11031, -11031, -11050, -11077, -11077, -11091, -11091, -11110, -11110, -11120, -11139, -11187, -11187, -11187, -11187, +10634, +10641, +10641, +10648, +10648, +10648, +10660, +10687, +10718, +10718, +10746, +10785, +10794, +10812, +10820, +10832, +10849, +10863, +10863, +10870, +10887, +10897, +10897, +10897, +10944, +10970, +10970, +10970, +11003, +11019, +11074, +11074, +11081, +11081, +11111, +11131, +11150, +11164, 11187, -11219, -11249, -11260, -11283, -11299, -11330, -11330, -11330, -11330, -11340, -11340, -11340, -11340, -11346, -11391, -11391, -11397, -11397, -11397, -11408, -11408, -11431, -11452, -11452, +11207, +11228, +11243, +11243, +11243, +11243, +11258, +11273, +11279, +11310, +11310, +11310, +11322, +11361, +11361, +11389, +11417, +11430, +11436, +11436, +11436, +11453, +11461, +11475, +11482, 11489, -11505, -11526, -11526, -11526, -11526, -11543, -11563, -11580, -11599, -11599, -11599, -11599, -11636, -11636, -11636, +11528, +11545, +11575, +11616, +11632, +11668, +11668, 11675, -11675, -11675, -11675, -11695, -11695, -11695, -11703, -11712, -11725, -11734, -11743, -11771, -11812, -11838, +11689, +11696, +11714, +11714, +11714, +11714, +11714, +11714, +11721, +11721, +11739, +11739, +11758, +11799, +11817, +11824, +11824, +11831, 11848, 11870, +11870, 11888, -11903, -11903, -11910, -11938, -11938, -11938, -11956, -11956, -11986, -11986, -11994, -12007, -12017, -12017, -12053, -12066, -12066, -12066, -12066, -12066, -12066, -12076, -12088, -12099, -12099, -12117, -12117, -12127, -12146, -12146, -12146, -12165, -12165, -12165, +11888, +11895, +11902, +11927, +11934, +11941, +11971, +12005, +12012, +12069, +12087, +12087, +12106, +12126, +12126, +12140, +12140, +12140, +12147, +12153, 12165, -12172, -12176, -12176, -12176, -12191, -12191, -12201, -12217, -12217, -12241, -12241, -12241, -12255, -12255, -12269, -12269, -12310, -12310, -12333, -12351, -12366, -12366, -12377, -12412, -12435, -12453, -12453, -12453, -12457, -12489, -12489, -12489, -12501, -12523, -12523, -12547, -12569, -12628, -12628, -12628, -12628, -12628, -12638, -12687, -12705, -12705, -12715, -12732, -12732, -12750, -12750, -12750, -12750, -12750, -12750, -12763, -12763, -12772, -12772, -12827, -12863, -12870, -12880, -12886, -12902, -12916, -12944, -12944, +12186, +12194, +12199, +12207, +12207, +12207, +12213, +12229, +12236, +12243, +12243, +12243, +12250, +12259, +12270, +12270, +12277, +12284, +12284, +12291, +12300, +12309, +12345, +12373, +12385, +12385, +12404, +12404, +12424, +12431, +12475, +12494, +12494, +12494, +12494, +12515, +12522, +12532, +12540, +12578, +12597, +12636, +12636, +12636, +12636, +12636, +12651, +12651, +12693, +12693, +12711, +12720, +12720, +12720, +12720, +12739, +12766, +12787, +12794, +12794, +12826, +12833, +12862, +12869, +12890, +12890, +12910, +12917, +12934, +12934, +12949, 12956, 12956, -12977, -12983, -12993, -13011, -13022, -13059, -13066, -13066, -13113, -13113, -13120, -13120, -13132, -13143, -13154, -13154, -13154, -13160, -13160, -13164, -13164, -13164, -13203, -13222, -13222, -13244, -13250, -13267, -13272, -13301, -13319, -13319, -13319, -13319, -13319, -13338, -13350, -13350, -13350, -13355, -13362, -13362, -13374, -13396, -13408, -13408, -13408, -13433, -13454, -13454, -13454, -13511, -13522, -13541, -13550, -13550, -13563, -13580, -13585, -13585, -13585, -13585, -13585, -13598, -13628, -13634, -13634, -13654, -13679, -13684, -13693, -13723, -13740, -13740, -13747, -13791, +12963, +12989, +12997, +13021, +13021, +13021, +13028, +13028, +13035, +13054, +13070, +13077, +13107, +13119, +13119, +13126, +13140, +13163, +13163, +13216, +13228, +13251, +13275, +13329, +13329, +13386, +13404, +13410, +13410, +13416, +13429, +13445, +13445, +13445, +13473, +13480, +13480, +13487, +13487, +13500, +13555, +13568, +13574, +13607, +13627, +13627, +13644, +13658, +13665, +13685, +13691, +13691, +13691, +13706, +13719, +13726, +13738, +13776, +13795, +13795, 13805, -13805, -13834, -13868, -13893, -13910, -13920, +13813, +13813, +13813, +13813, +13827, +13827, +13833, +13833, +13840, +13892, +13901, 13920, -13940, -13940, -13960, -13977, -13977, -13988, -13988, -13999, -13999, -13999, -13999, -14025, -14025, -14025, -14044, -14059, -14059, -14059, -14096, +13933, +13966, +13966, +13966, +13998, +14033, +14046, +14060, +14060, +14075, +14075, +14075, 14112, -14143, -14156, -14156, -14169, -14173, -14193, -14193, -14193, -14197, -14197, -14197, -14222, -14222, -14231, -14231, +14129, +14129, +14129, +14129, +14129, +14129, +14139, +14167, +14167, +14211, +14220, +14220, 14231, 14231, -14251, -14251, -14251, -14256, -14260, -14287, -14287, -14309, -14309, -14309, -14309, -14361, -14361, -14380, -14380, -14396, -14440, -14448, -14448, -14448, -14461, -14486, -14486, -14486, -14500, -14500, -14500, -14500, -14500, -14500, -14525, -14531, -14538, -14556, -14578, -14578, -14601, -14601, -14601, -14601, -14615, -14615, -14615, -14626, -14626, -14637, -14654, -14688, -14688, -14719, -14735, -14744, -14749, -14749, -14749, -14749, -14749, -14786, -14808, -14808, -14822, -14867, -14882, -14887, -14899, -14899, +14248, +14248, +14266, +14288, +14307, +14352, +14397, +14404, +14404, +14423, +14455, +14480, +14480, +14509, +14509, +14535, +14541, +14541, +14541, +14541, +14541, +14554, +14554, +14561, +14600, +14618, +14618, +14618, +14618, +14634, +14649, +14649, +14649, +14662, +14662, +14667, +14686, +14720, +14753, +14774, +14806, +14806, +14826, +14826, +14848, +14848, +14848, +14866, +14879, +14879, +14879, +14879, +14879, +14888, 14906, -14916, -14958, -14958, -14958, -14968, -15000, -15031, -15051, -15056, -15060, -15079, -15079, -15096, -15116, -15133, -15133, -15133, -15133, -15133, -15145, -15145, -15182, -15209, -15218, -15218, -15239, -15282, -15282, -15282, -15282, -15304, -15318, -15338, -15364, -15383, -15402, -15426, -15480, -15491, -15491, -15491, -15507, -15530, -15543, -15543, -15543, -15571, -15571, -15571, -15578, -15595, -15612, -15621, -15621, -15621, -15634, -15662, -15662, -15666, +14929, +14949, +14949, +14981, +14996, +15019, +15019, +15037, +15070, +15092, +15092, +15092, +15113, +15128, +15128, +15163, +15163, +15187, +15223, +15223, +15223, +15241, +15241, +15241, +15278, +15299, +15309, +15331, +15331, +15331, +15342, +15342, +15342, +15352, +15352, +15368, +15368, +15374, +15386, +15386, +15386, +15386, +15386, +15392, +15421, +15434, +15434, +15434, +15434, +15472, +15489, +15489, +15500, +15500, +15506, +15539, +15560, +15560, +15560, +15560, +15582, +15587, +15602, +15610, +15624, +15650, +15656, +15672, 15681, -15705, -15705, -15705, 15711, 15711, -15716, -15716, -15716, -15728, -15728, -15758, -15782, -15791, -15791, -15801, -15823, -15833, -15851, -15871, -15871, -15889, -15897, -15897, -15914, -15914, -15926, -15947, -15968, -15974, -15974, -15998, -16015, -16028, -16052, -16063, -16063, -16069, -16075, -16087, -16087, -16093, -16131, -16131, -16142, -16142, -16153, +15711, +15711, +15711, +15718, +15730, +15752, +15752, +15759, +15759, +15772, +15778, +15788, +15788, +15798, +15807, +15807, +15829, +15829, +15829, +15843, +15843, +15843, +15888, +15931, +15980, +15993, +16020, +16025, +16056, +16074, +16081, +16146, +16146, 16173, -16205, -16205, -16205, -16228, -16251, -16251, -16251, -16291, -16291, -16298, -16312, -16327, -16327, -16336, -16346, -16346, -16366, -16391, -16406, -16406, -16406, -16449, -16449, -16449, -16473, +16197, +16210, +16210, +16210, +16225, +16265, +16280, +16290, +16308, +16321, +16321, +16321, +16321, +16332, +16341, +16353, +16389, +16389, +16399, +16427, +16439, +16450, 16473, -16491, -16501, -16510, -16510, -16510, -16510, -16516, -16516, -16535, -16535, -16552, -16573, -16588, -16588, -16588, -16597, -16635, -16700, -16738, -16743, -16743, -16754, -16765, -16765, -16774, -16783, -16783, -16783, -16783, -16812, -16812, -16827, -16833, -16833, -16874, -16906, +16505, +16505, +16518, +16554, +16554, +16554, +16565, +16577, +16595, +16614, +16622, +16622, +16622, +16654, +16654, +16685, +16697, +16697, +16697, +16697, +16719, +16719, +16752, +16766, +16798, +16798, +16798, +16820, +16828, +16847, +16847, +16854, +16860, +16870, +16877, +16877, +16901, 16919, -16928, -16942, -16955, -16982, -17004, -17020, -17020, -17020, -17020, -17020, -17028, -17041, -17053, -17053, -17058, -17072, -17072, -17092, -17138, -17138, -17155, -17155, -17155, -17155, -17168, -17168, -17182, -17205, -17214, -17214, -17214, -17220, -17238, -17238, -17245, -17291, -17313, -17313, -17322, -17361, -17398, -17435, -17435, -17450, -17450, -17450, -17486, -17493, -17493, -17493, -17497, -17497, -17497, -17497, -17497, -17497, -17497, -17527, -17531, -17551, -17551, -17568, -17586, -17603, -17603, -17603, -17616, -17622, -17622, -17622, -17622, -17647, -17677, -17717, -17727, -17749, -17781, -17813, -17813, -17830, -17879, -17879, -17906, -17932, -17932, -17932, -17932, -17932, +16952, +16972, +16972, +16986, +16986, +17029, +17055, +17067, +17080, +17099, +17124, +17124, +17124, +17124, +17144, +17151, +17158, +17163, +17163, +17178, +17195, +17195, +17210, +17244, +17244, +17244, +17262, +17272, +17290, +17308, +17308, +17321, +17321, +17333, +17351, +17364, +17364, +17379, +17406, +17406, +17424, +17443, +17500, +17500, +17507, +17520, +17538, +17545, +17560, +17597, +17597, +17597, +17597, +17608, +17641, +17652, +17673, +17673, +17689, +17689, +17707, +17732, +17748, +17748, +17790, +17790, +17790, +17820, +17820, +17820, +17820, +17820, +17836, +17855, +17866, +17866, +17866, +17904, 17947, -17981, -17988, -18011, -18011, -18011, -18011, -18011, -18011, -18011, -18019, -18026, -18026, -18039, -18039, -18039, -18039, -18047, -18079, -18079, -18084, -18125, -18138, -18138, -18138, -18138, -18147, -18147, -18147, -18147, -18147, -18147, -18163, -18182, -18182, -18193, -18193, -18193, -18204, -18204, -18204, -18204, -18204, -18204, -18213, -18235, -18257, -18283, -18283, -18304, -18334, -18352, -18367, -18367, -18367, -18387, -18396, -18403, -18403, -18413, -18413, -18444, -18444, -18468, -18478, -18499, -18506, -18517, -18526, -18526, -18544, -18563, -18563, -18563, -18563, -18579, -18603, -18603, -18621, +17958, +17979, +17993, +18009, +18021, +18021, +18033, +18033, +18043, +18067, +18103, +18140, +18150, +18164, +18188, +18188, +18196, +18211, +18236, +18236, +18255, +18255, +18255, +18255, +18255, +18255, +18285, +18300, +18300, +18324, +18333, +18360, +18388, +18425, +18443, +18457, +18466, +18466, +18466, +18482, +18482, +18482, +18515, +18538, +18538, +18555, +18565, +18631, +18631, +18631, +18631, 18631, 18631, 18631, 18631, -18638, -18638, -18638, -18638, -18662, -18703, -18703, -18703, -18703, -18715, -18723, -18741, -18759, -18798, -18814, -18834, -18853, -18853, -18871, -18881, -18935, -18935, -18962, -18962, -18962, -18962, -18978, -18987, -18987, -18987, -19014, -19027, -19037, -19060, -19060, -19060, -19060, -19109, -19134, -19149, -19170, -19170, -19188, -19195, -19211, +18644, +18644, +18669, +18669, +18686, +18686, +18706, +18718, +18751, +18769, +18776, +18783, +18783, +18783, +18783, +18783, +18783, +18803, +18836, +18845, +18845, +18856, +18856, +18864, +18864, +18878, +18878, +18878, +18878, +18885, +18891, +18901, +18926, +18926, +18937, +18961, +18981, +18981, +18981, +18981, +18988, +19002, +19028, +19078, +19078, +19078, +19098, +19104, +19151, +19151, +19158, +19182, +19198, +19198, +19198, +19213, 19233, -19248, -19257, -19275, -19278, -19323, -19326, -19366, -19378, -19378, -19381, -19381, -19394, -19414, -19417, -19420, -19433, -19456, -19462, -19468, -19494, -19497, -19503, -19539, -19561, -19567, -19570, -19576, -19576, -19576, -19599, -19599, -19633, -19633, -19643, -19651, -19662, -19695, -19711, -19740, -19758, -19783, -19789, -19792, -19802, -19825, -19838, -19841, -19870, -19900, -19900, -19930, -19930, -19974, -20013, -20052, -20059, -20079, -20085, -20101, -20113, -20126, -20129, -20169, -20180, +19233, +19233, +19243, +19243, +19300, +19350, +19350, +19368, +19368, +19393, +19423, +19434, +19434, +19451, +19466, +19477, +19477, +19498, +19498, +19519, +19543, +19550, +19550, +19557, +19557, +19557, +19557, +19590, +19590, +19595, +19595, +19595, +19626, +19626, +19636, +19678, +19678, +19697, +19703, +19703, +19703, +19722, +19735, +19761, +19782, +19782, +19782, +19782, +19808, +19808, +19814, +19814, +19814, +19830, +19830, +19830, +19830, +19840, +19840, +19852, +19875, +19894, +19894, +19894, +19915, +19915, +19922, +19922, +19922, +19953, +19968, +19984, +19997, +20012, +20028, +20068, +20099, +20099, +20117, +20148, +20148, +20155, +20155, +20165, +20195, 20220, 20220, -20230, -20264, -20264, -20289, -20296, -20299, -20299, -20299, -20308, -20308, -20358, -20374, -20374, -20388, -20396, -20402, -20402, -20428, -20468, -20493, -20493, +20250, +20250, +20275, +20287, +20287, +20321, +20321, +20321, +20355, +20370, +20395, +20410, +20432, +20435, +20463, +20466, +20466, +20479, +20499, +20499, +20502, 20517, -20524, -20534, -20551, -20593, -20608, -20611, -20611, -20618, -20632, -20635, -20657, -20657, -20677, -20704, -20707, -20734, -20751, -20754, -20774, -20794, -20813, -20816, -20819, -20830, -20839, -20842, -20855, -20865, -20868, -20868, -20868, -20881, -20888, -20891, -20891, -20933, -20933, -20936, -20939, -20939, -20963, -20963, -20998, -21005, -21063, -21111, -21118, -21118, -21141, -21147, -21164, -21164, -21171, -21209, -21230, -21253, -21273, -21283, -21300, -21332, -21347, -21379, -21386, -21397, -21404, -21412, -21419, -21419, -21419, -21434, -21434, -21451, -21494, -21501, -21508, -21526, +20554, +20613, +20613, +20658, +20672, +20716, +20741, +20769, +20772, +20795, +20801, +20836, +20852, +20852, +20873, +20876, +20930, +20949, +20970, +20987, +20990, +21010, +21016, +21016, +21022, +21035, +21038, +21044, +21047, +21062, +21065, +21094, +21114, +21126, +21126, +21145, +21166, +21166, +21173, +21226, +21291, +21313, +21331, +21331, +21337, +21340, +21340, +21359, +21378, +21387, +21421, +21439, +21452, +21460, +21460, +21463, +21485, +21520, +21537, +21537, +21540, +21540, 21540, -21549, -21549, -21565, -21565, -21575, +21540, +21558, +21586, +21586, +21607, 21607, -21625, -21663, -21703, -21713, +21621, +21634, +21654, +21654, +21671, +21671, +21674, +21674, +21674, +21674, +21677, +21683, +21686, +21698, +21716, 21746, -21797, -21811, -21817, -21833, +21764, +21767, +21789, +21813, +21816, +21819, +21822, 21839, -21846, -21865, -21865, -21872, -21943, -21954, -21957, -21995, -22002, -22019, -22026, -22044, -22057, -22060, -22073, -22090, -22103, -22106, -22116, -22126, -22129, +21854, +21873, +21886, +21889, +21902, +21905, +21908, +21947, +21965, +21994, +21994, +22001, +22004, +22020, +22023, +22023, +22034, +22034, +22037, +22059, +22059, +22065, +22065, +22068, +22091, +22130, 22136, -22139, -22163, -22187, -22190, -22203, -22206, -22224, -22249, -22255, -22282, -22293, -22319, -22325, -22349, -22365, -22365, -22386, -22408, -22408, -22408, -22420, -22420, -22420, -22447, -22472, -22493, -22548, -22564, -22581, -22601, -22608, -22611, -22622, -22622, -22625, -22632, -22649, -22675, +22164, +22205, +22205, +22205, +22227, +22235, +22238, +22241, +22263, +22266, +22272, +22317, +22320, +22328, +22344, +22353, +22359, +22368, +22380, +22405, +22427, +22427, +22427, +22441, +22489, +22512, +22531, +22552, +22575, +22591, +22591, +22629, +22629, +22658, +22677, 22691, -22698, -22720, -22736, -22739, -22742, -22756, -22785, -22811, -22864, -22881, -22921, -22924, -22950, -22950, +22691, +22721, +22721, +22730, +22733, +22741, +22757, +22760, +22775, +22788, +22795, +22804, +22809, +22809, +22847, +22894, +22916, 22966, -22969, -22986, -23024, -23043, -23063, -23063, -23079, -23113, -23124, +22966, +22993, +23007, +23044, +23066, +23100, +23110, 23124, 23135, -23175, -23175, -23190, -23190, -23224, -23238, -23245, -23252, -23259, -23274, -23283, -23310, -23310, -23310, -23310, -23310, -23310, -23336, -23349, -23359, -23359, -23380, -23421, -23447, -23457, -23471, -23471, -23484, -23516, -23551, -23569, -23572, -23575, -23599, -23609, -23612, -23635, -23651, -23680, -23690, +23156, +23159, +23182, +23185, +23188, +23188, +23201, +23204, +23219, +23222, +23232, +23241, +23253, +23276, +23306, +23323, +23329, +23341, +23367, +23383, +23386, +23402, +23416, +23452, +23459, +23478, +23481, +23481, +23488, +23504, +23518, +23518, +23521, +23540, +23561, +23570, +23570, +23573, +23587, +23620, +23633, +23659, +23671, +23671, +23681, +23681, +23687, +23694, 23714, -23753, -23777, -23789, -23849, -23859, -23872, -23882, -23892, -23911, -23931, -23934, -23937, -23960, -23970, -23982, -23998, -24016, -24053, -24066, -24090, +23767, +23767, +23770, +23786, +23823, +23826, +23845, +23856, +23876, +23876, +23876, +23896, +23923, +23944, +23955, +23979, +23990, +23993, +24000, +24003, +24021, +24021, +24021, +24021, +24029, +24035, +24035, +24035, +24035, +24046, +24046, +24049, +24077, 24097, -24100, -24110, -24146, -24165, -24179, +24106, +24150, +24150, +24150, +24169, +24186, 24186, -24193, -24196, -24240, -24253, -24270, -24280, -24312, -24329, -24329, -24342, -24345, -24354, -24354, +24216, +24226, +24229, +24232, +24248, +24271, +24286, +24301, +24307, +24332, 24370, -24373, +24391, 24394, -24394, -24405, -24430, -24440, -24462, -24465, -24488, -24502, -24502, -24526, -24533, -24542, -24542, -24559, -24578, -24585, -24617, -24617, -24634, -24648, -24664, -24690, -24690, -24690, -24715, -24715, -24732, -24757, -24764, +24406, +24409, +24412, +24415, +24425, +24425, +24428, +24438, +24444, +24447, +24481, +24505, +24547, +24556, +24562, +24565, +24568, +24594, +24614, +24632, +24632, +24635, +24676, +24705, +24738, +24765, +24773, 24779, -24786, -24786, -24786, -24793, -24830, -24852, -24872, -24872, -24890, -24903, -24903, -24910, -24914, -24921, -24939, -24946, -24977, -24986, -25008, -25022, -25022, -25032, -25035, -25047, -25047, -25073, +24810, +24842, +24881, +24896, +24904, +24919, +24919, +24944, +24944, +24947, +24969, +24994, +25013, +25028, +25034, +25037, +25037, +25060, +25063, +25063, +25063, +25075, +25078, +25078, 25084, -25111, -25111, -25137, -25137, +25084, +25116, +25116, +25116, 25137, -25142, -25142, -25149, -25156, -25163, -25177, -25184, -25197, -25197, -25235, -25261, -25267, -25313, -25333, -25362, -25362, +25140, +25183, +25183, +25214, +25214, +25214, +25214, +25272, +25288, +25315, +25315, +25325, +25351, +25394, 25409, 25409, 25409, -25409, -25427, -25427, -25447, -25447, -25477, -25483, -25490, -25504, -25529, -25536, -25543, -25550, -25573, -25580, -25593, -25612, -25619, -25637, -25651, -25651, -25682, -25703, -25712, -25712, -25712, -25719, -25725, -25725, -25725, -25745, -25763, -25783, -25789, -25809, -25809, -25823, -25829, -25829, -25835, -25847, -25847, -25867, -25886, -25886, -25914, -25914, -25914, -25914, -25914, -25920, -25920, -25927, -25927, -25953, -25961, -25961, -25973, -25994, -25994, -26009, -26009, -26015, -26015, -26015, -26037, -26053, -26089, +25417, +25433, +25433, +25463, +25463, +25463, +25463, +25508, +25508, +25508, +25517, +25541, +25586, +25604, +25622, +25634, +25634, +25644, +25677, +25688, +25723, +25723, +25735, +25750, +25750, +25750, +25785, +25785, +25803, +25830, +25850, +25850, +25850, +25863, +25863, +25913, +25921, +25921, +25930, +25950, +25974, +25974, +25999, +25999, +26023, +26048, +26092, 26098, -26104, -26113, -26118, -26133, -26133, -26133, -26146, -26155, -26155, -26185, -26185, -26202, -26246, -26246, -26246, -26261, -26298, -26298, -26298, -26298, -26316, -26331, -26358, -26367, -26411, -26411, -26411, -26444, -26451, -26458, -26464, -26464, -26464, -26464, -26482, -26482, -26482, -26512, -26512, -26512, -26555, -26555, -26555, -26555, -26587, -26587, -26587, -26587, -26610, -26610, -26620, -26639, -26657, -26673, -26688, -26688, -26723, -26740, -26749, -26765, -26807, -26807, -26877, -26904, -26904, -26945, -26962, -26962, -26982, -26992, -27013, -27030, -27060, -27065, -27104, +26109, +26122, +26190, +26201, +26207, +26216, +26234, +26234, +26248, +26248, +26269, +26269, +26275, +26291, +26346, +26365, +26365, +26365, +26414, +26432, +26438, +26438, +26438, +26438, +26438, +26459, +26469, +26469, +26509, +26532, +26581, +26608, +26615, +26615, +26615, +26615, +26615, +26615, +26615, +26615, +26615, +26645, +26666, +26694, +26694, +26694, +26694, +26694, +26694, +26714, +26714, +26730, +26743, +26796, +26796, +26824, +26844, +26872, +26872, +26878, +26887, +26892, +26912, +26931, +26931, +26949, +26949, +26949, +26949, +26949, +26958, +26994, +27010, +27031, +27053, +27071, +27110, 27110, -27119, -27125, -27125, -27125, +27139, +27139, +27139, +27139, +27139, +27139, +27139, +27144, 27150, -27166, -27166, -27185, -27185, -27207, +27150, +27165, +27184, +27184, +27184, +27202, +27214, +27230, +27246, 27246, -27265, -27265, -27286, -27294, -27311, -27331, -27331, -27331, -27331, -27331, -27353, -27353, -27360, -27378, -27402, -27419, -27431, -27431, -27431, -27437, -27506, -27514, -27514, -27514, -27514, -27514, -27514, -27530, -27542, -27550, -27550, -27550, -27550, -27550, -27550, -27585, -27603, -27603, -27635, -27635, -27635, -27642, -27650, -27686, -27686, -27686, -27697, -27717, -27723, -27766, -27808, -27815, -27831, -27831, -27831, -27850, -27866, -27866, -27866, -27866, -27871, -27871, -27877, -27899, -27923, -27948, -27955, -27955, -27964, -27990, -27999, -28015, -28023, -28027, -28052, -28052, -28052, -28059, -28059, -28096, -28096, -28112, -28112, -28124, -28124, -28180, -28180, -28203, -28203, -28212, -28212, -28244, -28279, -28286, -28298, -28298, -28317, -28340, -28340, -28340, -28385, -28406, -28438, -28445, -28462, -28462, -28462, -28462, -28462, -28462, -28488, -28504, -28520, -28558, -28558, -28558, -28563, -28578, -28578, -28578, -28584, -28584, -28584, -28584, -28584, -28600, -28600, -28600, -28600, -28606, -28611, -28611, -28631, -28631, -28655, -28655, -28664, -28664, -28668, -28672, -28672, -28672, -28672, -28700, -28708, -28708, -28730, -28746, -28758, -28758, -28776, +27255, +27255, +27266, +27266, +27266, +27279, +27279, +27279, +27288, +27296, +27358, +27367, +27367, +27367, +27367, +27367, +27367, +27367, +27395, +27427, +27427, +27451, +27451, +27462, +27462, +27462, +27497, +27508, +27512, +27512, +27538, +27538, +27564, +27564, +27587, +27611, +27626, +27626, +27648, +27648, +27667, +27667, +27691, +27706, +27720, +27734, +27764, +27791, +27791, +27823, +27847, +27847, +27847, +27857, +27863, +27874, +27878, +27878, +27878, +27884, +27891, +27891, +27907, +27929, +27935, +27935, +27935, +27942, +27966, +27966, +27966, +27993, +27993, +27993, +27993, +28009, +28020, +28020, +28020, +28025, +28045, +28066, +28087, +28104, +28117, +28148, +28158, +28167, +28208, +28225, +28254, +28305, +28305, +28310, +28319, +28319, +28319, +28328, +28328, +28359, +28405, +28409, +28409, +28409, +28409, +28440, +28440, +28440, +28440, +28486, +28486, +28486, +28501, +28530, +28530, +28546, +28546, +28569, +28569, +28587, +28650, +28650, +28650, +28650, +28673, +28686, +28686, +28697, +28697, +28732, +28737, +28737, +28749, +28760, +28760, +28772, +28779, 28794, -28801, -28801, -28801, -28811, -28811, -28827, -28834, -28860, -28872, -28887, -28917, -28930, +28841, +28841, +28865, +28865, +28865, +28897, +28920, +28920, +28927, +28934, 28965, -28983, -28983, -29018, -29038, -29051, -29051, -29082, -29082, -29136, -29152, -29172, -29182, -29198, -29198, -29205, -29205, -29219, -29219, -29219, +29022, +29022, +29047, +29065, +29083, +29089, +29125, +29125, +29125, +29125, +29130, +29186, +29186, +29194, +29247, +29257, +29257, 29285, -29299, -29305, -29323, -29323, -29332, -29355, -29390, -29396, -29447, -29447, +29285, +29285, +29368, +29375, +29402, +29409, +29414, +29421, +29428, +29434, 29447, -29460, -29460, -29472, -29472, -29484, -29484, -29484, -29484, -29502, -29502, -29529, -29538, -29538, +29464, +29473, +29494, +29509, +29509, +29521, +29521, +29533, 29538, -29538, -29577, -29589, -29589, -29605, -29624, -29624, -29624, -29624, -29624, -29624, -29632, -29641, -29641, -29650, -29695, -29702, -29702, -29714, +29544, +29561, +29571, +29578, +29578, +29578, +29588, +29598, +29609, +29609, +29616, +29634, +29640, +29651, +29651, +29663, +29679, +29694, +29694, +29694, +29694, +29727, 29727, 29737, -29737, -29737, -29788, -29802, -29825, -29825, -29825, -29832, -29859, -29876, -29894, -29894, -29904, -29904, -29904, -29904, -29904, -29919, -29929, -29940, -29940, -29947, -29967, -29991, -29991, -29991, -29998, -30006, -30006, -30006, -30026, +29746, +29752, +29759, +29778, +29778, +29778, +29784, +29784, +29792, +29792, +29792, +29792, +29826, +29843, +29854, +29877, +29903, +29903, +29903, +29903, +29903, +29903, +29910, +29910, +29910, +29910, +29933, +29961, +29979, +30013, +30013, +30024, +30028, +30028, 30042, 30042, -30059, -30067, -30067, -30090, -30096, -30115, -30133, -30133, -30138, -30144, -30152, -30152, -30164, -30164, -30164, -30164, -30164, -30178, +30042, +30048, +30062, +30062, +30080, +30086, +30093, +30113, +30113, +30130, +30130, +30130, +30130, 30178, -30211, -30215, -30255, -30259, -30267, -30277, -30283, -30289, -30289, -30307, -30327, -30334, -30334, -30334, -30353, -30359, -30375, -30387, -30387, -30387, -30413, -30413, -30422, -30422, -30422, -30459, -30477, -30492, +30183, +30183, +30183, +30204, +30208, +30217, +30238, +30250, +30250, +30250, +30270, +30276, +30282, +30298, +30336, +30336, +30370, +30415, +30415, +30415, +30415, +30415, +30419, +30423, +30423, +30436, +30436, +30436, +30436, +30436, +30436, +30475, +30475, 30519, -30519, -30567, -30567, -30575, -30581, -30618, -30618, -30618, -30618, -30635, -30657, -30665, -30665, -30685, -30695, -30717, -30738, -30757, -30757, -30780, -30786, -30786, -30796, -30834, -30834, -30834, -30838, -30864, -30894, -30913, -30913, -30913, -30935, -30935, -30935, -30965, -30965, -30993, -31002, -31002, -31002, -31014, -31014, -31040, -31065, -31075, -31075, -31109, -31121, -31121, -31121, +30536, +30536, +30536, +30542, +30542, +30562, +30602, +30608, +30617, +30641, +30701, +30701, +30701, +30730, +30730, +30730, +30743, +30751, +30765, +30779, +30807, +30814, +30814, +30814, +30850, +30850, +30850, +30850, +30879, +30886, +30893, +30893, +30907, +30923, +30930, +30930, +30930, +30930, +30940, +31010, +31023, +31023, +31032, +31032, +31032, +31032, +31049, +31049, +31059, +31059, +31071, +31090, +31113, +31120, 31136, -31164, -31164, -31164, -31179, -31189, -31189, -31189, -31189, -31189, -31202, -31202, -31202, -31202, -31219, -31219, -31225, -31243, -31259, -31259, -31282, -31282, -31282, +31162, +31168, +31235, +31249, +31249, +31254, +31260, +31260, +31290, 31290, -31298, -31313, -31330, -31338, -31338, -31338, -31338, -31338, -31338, -31338, -31338, -31353, -31353, -31353, -31382, -31390, -31429, -31437, -31447, -31447, +31299, +31311, +31348, +31348, +31357, +31357, +31380, +31430, +31469, 31475, -31499, -31499, -31521, -31562, -31562, -31562, -31595, -31614, -31631, -31683, -31707, -31735, -31735, -31762, -31776, -31817, -31828, -31828, -31838, -31852, -31870, -31870, -31870, -31870, -31879, -31879, -31879, -31879, -31895, -31895, -31895, -31925, -31925, -31925, -31925, -31944, -31944, -31944, -31944, -31968, -31968, -31985, -32000, -32021, -32032, -32054, -32065, -32065, -32076, -32099, -32099, -32118, -32126, -32152, -32152, -32152, -32169, -32169, +31493, +31531, +31542, +31563, +31579, +31625, +31636, +31651, +31661, +31684, +31688, +31698, +31698, +31704, +31730, +31785, +31798, +31798, +31798, +31798, +31808, +31808, +31808, +31808, +31822, +31840, +31840, +31854, +31874, +31874, +31885, +31896, +31896, +31903, +31903, +31942, +31942, +31942, +31946, +31951, +31972, +31999, +31999, +32016, +32030, +32030, +32030, +32037, +32037, +32067, +32105, +32105, +32148, +32170, 32176, -32235, -32240, -32240, -32257, -32257, -32257, -32288, -32288, -32288, -32301, -32301, -32301, -32301, -32331, -32331, -32331, -32331, -32331, -32331, -32359, -32359, -32424, -32440, -32440, -32468, -32468, +32188, +32188, +32188, +32188, +32208, +32234, +32234, +32251, +32295, +32295, +32295, +32295, +32295, +32295, +32295, +32295, +32308, +32308, +32323, +32336, +32336, +32341, +32367, +32411, +32411, +32429, +32461, +32461, +32461, +32467, +32478, 32488, -32488, -32509, -32536, -32558, -32573, -32573, -32577, -32597, -32597, -32609, -32620, -32634, -32640, -32640, -32668, -32679, -32679, -32687, -32718, -32718, -32718, -32718, -32718, -32738, -32745, -32760, -32784, -32848, +32525, +32563, +32586, +32598, +32598, +32598, +32613, +32629, +32629, +32660, +32676, +32708, +32720, +32736, +32743, +32743, +32752, +32752, +32762, +32766, +32778, +32778, +32797, +32801, +32813, +32820, +32820, +32838, 32862, -32894, -32901, -32901, -32901, -32908, -32908, -32915, -32915, -32919, -32961, -32993, -33005, -33005, -33037, -33044, -33044, -33051, -33090, -33097, -33097, -33116, -33123, -33123, -33130, -33138, -33142, -33168, -33186, -33193, -33193, +32868, +32881, +32881, +32892, +32906, +32920, +32920, +32920, +32942, +32942, +32942, +32955, +32970, +32970, +32979, +32979, +32983, +32990, +33013, +33045, +33057, +33067, +33073, +33099, +33099, +33099, +33099, +33103, +33103, +33141, +33141, +33173, +33190, +33190, +33190, +33190, +33212, 33216, -33223, -33223, -33240, -33268, -33272, -33272, -33304, -33311, -33343, -33343, -33343, -33362, -33362, -33372, -33389, -33389, -33396, -33396, -33404, -33404, -33420, -33420, +33234, +33234, +33245, +33245, +33263, +33263, +33263, +33271, +33312, +33337, +33359, +33398, 33427, -33435, -33456, +33432, 33456, -33467, -33536, -33543, -33547, -33554, -33576, -33583, -33606, -33606, -33613, -33629, -33657, -33664, -33664, -33664, -33690, -33699, -33699, -33730, -33750, -33762, -33783, -33826, -33844, -33844, -33868, -33868, -33903, -33911, -33911, -33927, -33945, +33460, +33490, +33500, +33500, +33508, +33508, +33508, +33508, +33508, +33532, +33570, +33593, +33597, +33597, +33597, +33597, +33597, +33601, +33638, +33638, +33638, +33638, +33638, +33660, +33693, +33729, +33739, +33787, +33787, +33787, +33798, +33798, +33808, +33808, +33808, +33808, +33840, +33840, +33840, +33854, +33854, +33854, +33884, +33884, +33884, +33914, +33955, +33961, +33965, +33974, +33974, +33974, 33990, -34010, -34025, -34025, -34032, -34051, -34075, -34095, -34129, -34129, +33998, +34006, +34030, +34030, +34030, +34064, +34074, +34094, +34108, +34108, 34129, -34129, -34129, -34136, -34149, -34173, -34173, -34186, -34199, -34206, -34218, -34218, -34227, -34227, -34227, -34227, -34234, -34234, -34234, -34241, -34268, -34275, +34174, +34198, +34225, +34246, +34261, +34277, +34277, +34281, +34305, +34305, 34305, -34326, -34360, -34367, -34386, -34397, -34407, -34407, -34407, -34407, -34407, -34461, -34468, -34496, -34496, -34505, -34512, -34566, -34594, -34594, -34601, -34606, -34634, -34634, -34634, -34634, -34634, -34634, -34634, -34653, -34660, -34660, -34666, -34686, -34696, -34703, -34720, -34720, -34727, +34305, +34305, +34305, +34338, +34355, +34355, +34355, +34355, +34380, +34380, +34395, +34422, +34443, +34443, +34448, +34448, +34459, +34472, +34488, +34495, +34504, +34515, +34515, +34533, +34533, +34533, +34563, +34622, +34622, +34639, +34656, +34706, 34744, -34751, -34758, -34773, -34794, -34801, -34808, -34808, -34828, -34835, -34852, -34859, -34876, -34876, +34752, +34752, +34767, +34788, +34793, +34793, +34793, +34793, +34793, +34793, +34837, +34837, +34837, 34885, -34893, -34905, -34934, -34941, -34988, -34988, -34988, -35033, -35033, -35033, -35040, -35058, -35065, +34908, +34908, +34926, +34933, +34953, +34963, +34963, +34963, +34990, +34990, +35013, +35013, +35017, +35017, +35024, +35024, +35041, +35041, +35059, +35059, +35059, +35073, 35073, -35093, -35119, -35137, -35144, -35171, -35199, +35073, +35084, +35108, +35120, +35130, +35184, +35184, +35184, +35191, 35206, -35213, -35253, -35266, -35273, -35273, -35312, -35329, -35336, -35365, -35381, -35399, -35413, -35420, -35427, -35427, -35432, -35442, -35448, -35455, -35467, -35517, -35531, -35538, +35216, +35216, +35216, +35226, +35244, +35260, +35260, +35290, +35296, +35296, +35296, +35313, +35334, +35334, +35343, +35382, +35414, +35414, +35447, +35447, +35457, +35457, +35475, +35475, +35484, +35491, +35491, +35503, +35503, +35509, +35529, +35537, +35558, 35558, -35571, -35581, -35606, -35619, -35645, -35659, -35666, -35666, -35681, -35688, -35719, -35729, -35736, -35743, -35761, -35769, -35828, -35835, -35859, -35859, -35866, -35866, -35866, -35873, -35921, -35950, +35567, +35567, +35585, +35595, +35610, +35624, +35654, +35654, +35661, +35661, +35680, +35696, +35701, +35701, +35726, +35752, +35768, +35768, +35838, +35870, +35870, +35894, +35894, +35894, +35905, +35922, 35965, -35976, -35976, -35983, -36007, -36014, -36021, -36021, -36021, -36021, -36021, -36038, -36038, -36038, -36053, -36067, -36082, -36082, -36082, -36119, -36155, -36171, -36171, -36171, -36184, -36199, -36206, -36206, -36220, -36234, -36242, -36272, -36282, -36296, -36296, -36314, -36321, -36352, -36359, -36383, -36391, -36412, -36419, -36419, -36434, -36442, -36449, -36462, -36469, -36476, -36492, -36492, -36512, -36512, -36567, -36567, -36588, -36588, -36588, -36608, -36650, -36660, -36670, -36687, -36694, -36701, -36714, -36725, -36732, -36762, -36777, -36804, -36804, -36838, -36855, -36855, -36903, -36922, -36943, -36943, -36949, -36949, -36969, +35984, +35989, +36011, +36025, +36040, +36057, +36057, +36057, +36074, +36086, +36096, +36108, +36140, +36163, +36191, +36216, +36248, +36248, +36275, +36284, +36284, +36298, +36298, +36328, +36335, +36344, +36348, +36406, +36413, +36433, +36457, +36470, +36470, +36478, +36485, +36485, +36485, +36523, +36541, +36550, +36550, +36550, +36550, +36550, +36565, +36565, +36565, +36569, +36569, +36576, +36576, +36576, +36595, +36595, +36610, +36620, +36620, +36639, +36639, +36639, +36653, +36653, +36682, +36722, +36722, +36722, +36722, +36722, +36728, +36745, +36745, +36759, +36759, +36759, +36759, +36768, +36785, +36803, +36834, +36834, +36834, +36865, +36887, +36887, +36887, +36907, +36926, +36967, 36977, -36977, -36993, -36993, -37000, -37023, -37023, -37030, -37121, -37137, -37137, -37153, -37176, -37183, -37192, +36981, +36981, +37005, +37005, +37054, +37086, +37096, +37103, +37116, +37116, +37116, +37143, +37143, +37149, +37149, +37181, +37181, +37181, +37205, +37209, 37209, -37217, -37248, -37248, -37248, -37266, +37236, +37259, +37259, 37286, -37292, -37292, -37300, -37339, -37339, -37355, -37362, -37379, -37387, -37403, -37403, -37403, -37432, -37432, -37450, -37450, -37466, -37481, -37481, -37481, -37500, +37302, +37302, +37319, +37336, +37348, +37361, +37361, +37361, +37361, +37361, +37371, +37371, +37382, +37396, +37396, +37396, +37420, +37433, +37449, +37449, +37449, +37449, +37471, +37471, +37499, +37519, +37519, 37540, -37540, -37540, -37552, -37569, -37594, -37594, -37609, -37628, -37628, -37661, -37677, -37677, -37677, -37717, -37717, -37717, -37723, -37754, -37754, -37799, -37799, -37810, -37810, -37825, -37825, -37825, -37825, -37845, -37867, -37867, -37877, -37892, -37909, -37909, -37919, -37919, -37938, -37959, -37967, -37972, -37992, -37992, -38026, +37550, +37555, +37555, +37572, +37576, +37576, +37576, +37583, +37583, +37599, +37615, +37615, +37634, +37634, +37647, +37672, +37672, +37690, +37705, +37710, +37728, +37728, +37728, +37728, +37745, +37755, +37755, +37761, +37771, +37771, +37788, +37813, +37813, +37832, +37832, +37832, +37832, +37856, +37856, +37872, +37872, +37872, +37872, +37872, +37872, +37872, +37902, +37913, +37913, +37925, +37943, +37952, +37952, +37952, +37982, +38011, +38011, +38011, +38011, +38019, +38019, +38019, +38019, +38019, 38035, -38061, -38061, -38072, -38083, -38083, -38099, -38123, -38146, -38146, -38158, -38158, -38182, -38234, -38255, -38255, -38310, -38331, -38331, -38346, -38346, -38346, -38353, -38353, -38353, -38378, -38378, -38388, -38408, -38428, -38428, -38428, -38428, -38445, -38453, -38460, -38460, -38460, -38493, -38503, -38525, -38525, -38532, -38532, -38546, -38546, -38569, -38599, -38618, -38618, -38618, -38643, -38643, -38643, -38691, -38699, -38717, +38035, +38057, +38057, +38068, +38080, +38091, +38110, +38128, +38149, +38164, +38189, +38199, +38199, +38199, +38207, +38207, +38224, +38224, +38235, +38251, +38251, +38251, +38251, +38251, +38260, +38260, +38260, +38260, +38260, +38279, +38279, +38290, +38290, +38297, +38345, +38351, +38351, +38389, +38398, +38402, +38402, +38450, +38450, +38466, +38490, +38490, +38494, +38517, +38544, +38544, +38557, +38568, +38574, +38574, +38574, +38574, +38574, +38574, +38595, +38616, +38642, +38672, +38672, +38672, +38672, +38672, +38686, +38693, 38717, -38729, -38729, -38733, -38760, -38760, -38773, -38801, -38817, -38824, +38735, +38751, +38751, +38758, +38794, +38808, +38829, 38836, 38843, -38843, -38843, -38870, -38880, -38880, -38887, -38900, -38907, -38919, -38919, -38919, -38949, -38967, -38984, -38984, -38984, -38989, -38989, -39029, -39036, -39054, -39080, -39086, -39103, -39110, -39130, -39130, -39130, -39154, -39154, -39176, -39176, -39213, -39213, -39213, -39225, -39230, -39249, -39264, -39264, -39264, -39284, -39284, -39293, -39293, -39311, -39311, -39311, -39320, +38858, +38883, +38893, +38915, +38915, +38915, +38922, +38933, +38940, +38940, +38950, +38957, +38991, +39009, +39009, +39014, +39021, +39021, +39028, +39042, +39048, +39055, +39077, +39102, +39116, +39129, +39136, +39155, +39155, +39161, +39179, +39205, +39219, +39239, +39283, +39283, +39304, 39339, -39345, -39355, -39369, -39388, -39399, -39399, -39399, -39418, -39418, -39433, -39451, -39451, -39458, -39476, -39481, -39519, -39519, -39519, -39519, -39529, -39567, -39609, -39624, -39637, -39637, -39644, -39644, -39651, -39679, -39679, -39679, -39697, -39709, -39751, -39751, -39777, -39791, -39817, -39817, -39835, -39835, -39844, -39844, -39851, -39874, -39878, -39878, -39888, -39905, -39905, -39928, -39928, +39365, +39387, +39413, +39413, +39413, +39430, +39437, +39437, +39450, +39462, +39469, +39484, +39502, +39509, +39509, +39548, +39548, +39548, +39560, +39573, +39582, +39582, +39582, +39596, +39616, +39639, +39639, +39646, +39668, +39677, +39694, +39705, +39721, +39731, +39731, +39750, +39750, +39760, +39760, +39769, +39796, +39796, +39815, +39822, +39847, +39867, +39881, +39881, +39900, +39907, +39907, +39920, +39934, +39945, 39945, 39952, -39978, -39978, -39985, -40029, -40043, -40043, -40043, -40053, -40066, -40094, -40106, -40129, -40129, -40151, -40151, -40151, -40158, -40182, -40199, -40232, -40232, -40232, -40281, -40288, -40302, -40302, -40302, -40302, -40317, -40317, -40324, -40324, -40356, -40356, -40369, -40384, -40392, -40392, -40392, -40413, -40413, -40455, -40462, -40469, -40483, +39952, +39952, +39961, +39989, +40030, +40045, +40058, +40085, +40101, +40138, +40178, +40188, +40210, +40221, +40228, +40228, +40241, +40248, +40279, +40292, +40292, +40301, +40308, +40322, +40322, +40329, +40336, +40352, +40359, +40366, +40373, +40380, +40380, +40435, +40435, +40435, +40473, 40483, 40483, -40511, -40511, -40524, -40524, -40528, -40546, -40546, -40568, -40575, -40582, -40610, -40629, -40656, -40656, -40656, -40679, -40679, -40679, -40693, -40713, -40732, -40754, -40795, -40795, -40809, -40816, -40823, -40851, -40889, -40908, -40956, -40970, -41026, -41040, -41056, -41063, -41070, -41077, -41100, -41108, -41141, -41148, -41181, -41197, -41220, -41241, -41275, -41291, -41307, -41307, -41327, -41334, -41355, -41369, -41394, -41401, -41414, -41430, -41444, -41494, +40488, +40488, +40488, +40513, +40537, +40537, +40564, +40569, +40612, +40637, +40637, +40651, +40651, +40658, +40665, +40665, +40672, +40686, +40717, +40741, +40766, +40789, +40815, +40830, +40830, +40840, +40840, +40840, +40840, +40860, +40886, +40893, +40933, +40933, +40946, +40968, +41002, +41017, +41024, +41057, +41080, +41087, +41094, +41137, +41150, +41157, +41157, +41164, +41171, +41177, +41184, +41198, +41198, +41198, +41216, +41240, +41251, +41293, +41300, +41330, +41346, +41383, +41405, +41405, +41417, +41448, +41466, +41466, +41466, +41466, +41473, +41485, 41513, -41513, -41520, -41529, -41575, -41589, -41612, +41528, +41537, +41564, +41564, +41594, +41627, +41627, +41627, 41634, 41634, +41639, +41639, 41652, -41652, -41664, -41696, -41703, -41750, -41772, -41772, -41793, -41819, -41826, -41848, -41855, -41872, -41884, -41892, -41892, -41947, -41947, -41947, -41971, -41971, -41971, -41971, -41977, -41977, -41984, -42033, -42051, -42051, +41671, +41680, +41690, +41690, +41690, +41690, +41712, +41712, +41722, +41746, +41778, +41784, +41816, +41825, +41825, +41832, +41856, +41868, +41916, +41922, +41935, +41944, +41956, +41970, +41982, +41982, +41982, +41989, +41996, +42018, +42018, +42018, +42025, +42032, +42040, +42040, +42047, +42047, +42055, +42055, 42066, -42066, -42066, -42066, -42087, -42102, -42127, -42134, -42134, -42155, -42167, -42186, -42186, -42186, -42193, -42215, -42224, -42242, -42249, -42262, -42286, -42303, -42316, -42340, -42360, -42392, -42392, -42399, -42406, -42433, -42449, -42449, -42459, -42485, -42513, -42530, -42537, -42537, -42544, -42576, -42576, -42583, -42583, -42590, -42599, -42628, -42649, -42649, -42656, -42697, -42704, +42086, +42086, +42086, +42103, +42103, +42122, +42129, +42136, +42157, +42164, +42179, +42179, +42212, +42226, +42233, +42240, +42240, +42247, +42274, +42308, +42315, +42343, +42343, +42385, +42408, +42415, +42415, +42415, +42415, +42436, +42443, +42450, +42450, +42457, +42464, +42471, +42484, +42508, +42529, +42548, +42548, +42596, +42596, +42596, +42603, +42624, +42645, +42661, +42684, +42684, +42694, +42694, +42701, +42701, +42720, 42720, -42739, -42739, -42815, -42815, -42834, -42834, -42870, -42892, -42899, -42899, -42919, -42939, -42969, -42969, -42979, -42979, -42979, -42990, -43030, -43030, -43052, -43052, -43074, -43102, -43102, -43102, -43130, -43147, -43154, +42754, +42776, +42795, +42795, +42808, +42808, +42846, +42855, +42864, +42882, +42888, +42909, +42909, +42929, +42964, +42985, +43001, +43017, +43043, +43050, +43050, +43060, +43073, +43091, +43111, +43134, 43172, -43179, -43199, -43211, -43215, -43222, -43222, +43172, +43172, +43204, +43250, +43250, 43257, -43284, -43302, -43352, -43368, -43368, -43368, -43381, -43393, -43423, -43444, -43487, -43494, -43523, -43547, -43567, -43595, -43612, -43612, -43619, -43619, -43640, -43646, -43664, -43697, -43717, -43724, -43724, -43744, -43767, -43776, -43781, -43801, -43801, -43808, -43808, -43815, -43822, -43836, -43850, -43869, +43286, +43325, +43345, +43362, +43362, +43362, +43362, +43362, +43430, +43430, +43430, +43437, +43437, +43455, +43455, +43464, +43464, +43471, +43471, +43471, +43471, +43484, +43484, +43490, +43490, +43513, +43526, +43546, +43546, +43553, +43571, +43584, +43584, +43631, +43642, +43642, +43642, +43682, +43702, +43702, +43722, +43729, +43729, +43756, +43783, +43783, +43795, +43814, +43818, +43824, +43854, +43854, +43861, +43861, +43868, 43888, -43895, -43911, -43943, -43963, -43963, -43998, -43998, -44033, -44033, -44047, -44064, -44077, -44077, -44101, -44112, -44112, -44112, -44130, -44130, -44130, -44155, -44166, -44166, -44166, -44184, -44184, -44268, -44268, -44291, -44317, -44326, -44353, -44353, -44392, -44408, -44444, -44444, -44444, -44444, -44444, -44451, -44483, +43888, +43893, +43900, +43917, +43939, +43939, +43939, +43946, +43980, +43980, +43996, +44024, +44030, +44036, +44036, +44043, +44043, +44055, +44071, +44087, +44087, +44097, +44097, +44097, +44110, +44158, +44164, +44171, +44208, +44208, +44235, +44241, +44241, +44241, +44241, +44241, +44251, +44251, +44275, +44275, +44300, +44307, +44307, +44314, +44321, +44332, +44377, +44400, +44426, +44432, +44446, +44446, +44476, +44476, +44486, +44486, +44486, +44486, 44502, -44525, -44525, -44570, -44606, -44606, -44658, -44677, -44677, -44711, -44711, -44711, -44711, -44711, -44742, -44742, -44742, -44749, -44763, -44804, +44512, +44522, +44535, +44550, +44574, +44597, +44605, +44616, +44616, +44622, +44622, +44628, +44636, +44636, +44636, +44643, +44643, +44662, +44669, +44701, +44720, +44720, +44727, +44750, +44754, +44772, +44772, 44804, -44854, -44866, -44866, -44884, -44884, -44894, -44909, -44916, -44916, -44923, -44938, -44958, -44965, -45004, -45016, -45030, -45050, -45060, -45060, -45066, -45073, -45077, -45084, -45105, -45105, -45105, -45105, -45105, -45112, -45112, -45130, -45139, -45159, -45166, -45208, -45223, -45251, +44819, +44835, +44859, +44859, +44883, +44887, +44898, +44910, +44922, +44939, +44939, +44939, +44945, +44945, +44945, +44952, +44952, +44952, +44991, +45023, +45054, +45071, +45071, +45071, +45080, +45102, +45102, +45102, +45128, +45132, +45162, +45175, +45193, +45199, +45199, +45206, +45221, +45228, +45243, 45258, -45275, -45291, +45276, +45280, 45291, 45310, -45323, -45351, -45358, -45368, -45399, -45413, -45437, -45437, -45446, -45473, -45481, -45488, -45488, -45488, -45488, -45501, -45526, -45544, -45589, -45612, -45632, -45632, -45658, -45672, -45715, -45721, -45721, -45727, -45734, -45759, -45810, -45838, -45903, -45915, -45952, -45959, -45978, -45991, -45997, -45997, -45997, -45997, -46020, -46020, -46038, -46070, -46076, -46076, -46076, -46093, -46112, -46135, -46152, -46152, -46182, -46182, -46182, -46182, -46182, -46182, -46182, -46182, -46198, -46222, -46222, -46229, -46229, -46240, -46261, -46273, -46273, -46288, -46288, -46288, -46314, -46314, -46314, -46327, -46327, -46327, -46362, -46377, -46377, -46383, -46383, -46383, +45331, +45338, +45346, +45346, +45383, +45383, +45390, +45416, +45442, +45449, +45477, +45484, +45503, +45503, +45503, +45510, +45547, +45561, +45571, +45578, +45585, +45617, +45617, +45617, +45617, +45676, +45700, +45730, +45745, +45745, +45765, +45796, +45803, +45829, +45833, +45843, +45851, +45886, +45886, +45909, +45916, +45916, +45916, +45923, +45963, +45984, +45984, +46004, +46022, +46052, +46090, +46113, +46119, +46138, +46166, +46166, +46179, +46196, +46224, +46224, +46224, +46224, +46224, +46234, +46234, +46289, +46309, +46328, +46334, +46357, +46369, 46383, -46391, -46391, -46400, -46400, -46400, -46404, -46433, -46450, -46475, -46493, -46515, -46521, -46521, -46521, -46546, -46567, -46567, -46567, +46390, +46398, +46398, +46412, +46443, +46457, +46476, +46476, +46484, +46484, +46484, +46504, +46522, +46522, +46522, +46522, +46538, +46538, +46544, +46544, 46582, 46582, 46582, -46603, -46603, -46603, -46620, -46653, -46653, -46659, -46690, -46700, -46700, -46719, -46736, -46736, -46763, -46763, -46763, -46785, -46785, +46596, +46596, +46613, +46621, +46628, +46643, +46657, +46665, +46699, +46707, +46716, +46720, +46747, +46762, +46762, +46770, 46796, -46811, -46811, -46819, -46819, -46819, -46855, -46855, -46874, -46874, -46893, +46806, +46816, +46827, +46827, +46827, +46844, +46857, +46867, +46881, +46896, +46903, +46903, +46903, 46911, -46931, -46931, -46931, -46941, -46954, -46961, -46967, -46996, -47009, -47009, -47046, -47046, -47046, -47046, -47046, -47074, +46932, +46947, +46964, +46964, +46984, +47006, +47013, +47013, +47013, +47027, +47027, +47069, +47077, +47077, +47077, +47083, 47093, -47100, -47121, -47130, -47168, -47168, -47168, -47168, -47168, -47168, -47209, -47243, -47282, +47093, +47106, +47181, +47195, +47195, +47195, +47237, +47273, 47295, 47295, -47302, -47336, -47346, -47346, -47353, -47353, -47359, -47366, -47373, -47380, -47419, -47434, -47441, -47458, -47486, -47486, -47486, -47493, -47512, -47519, -47519, -47519, -47519, -47536, -47550, -47575, -47601, -47601, -47612, -47619, -47643, -47655, -47655, -47670, -47670, -47683, -47690, -47690, -47727, -47740, -47747, -47755, -47771, -47771, -47806, -47806, -47813, -47819, -47819, -47819, -47826, -47851, -47858, -47865, -47890, -47912, +47301, +47343, +47349, +47369, +47393, +47409, +47414, +47428, +47428, +47454, +47499, +47511, +47529, +47535, +47535, +47535, +47535, +47535, +47547, +47572, +47587, +47587, +47587, +47625, +47625, +47645, +47664, +47664, +47696, +47704, +47731, +47769, +47790, +47799, +47799, +47816, +47816, +47833, +47833, +47833, +47839, +47856, +47877, +47877, 47918, -47939, -47955, -47996, -48029, -48029, -48029, -48050, -48050, -48068, -48092, -48106, -48106, -48117, -48117, -48134, -48134, -48134, -48134, -48134, -48134, -48134, -48134, -48143, -48158, -48192, -48199, -48199, -48206, -48234, -48270, -48277, -48322, -48337, -48337, -48337, -48344, -48351, -48364, -48371, -48371, -48378, -48395, -48402, -48402, -48402, -48412, -48421, -48421, -48445, -48452, +47948, +47956, +47978, +47978, +47991, +47991, +47991, +48008, +48008, +48019, +48031, +48045, +48045, +48045, +48045, +48066, +48066, +48070, +48090, +48119, +48136, +48142, +48149, +48149, +48160, +48160, +48160, +48160, +48172, +48172, +48185, +48196, +48196, +48218, +48218, +48225, +48225, +48225, +48225, +48235, +48249, +48249, +48258, +48258, +48284, +48284, +48308, +48326, +48341, +48370, +48370, +48394, +48429, +48429, +48437, +48442, 48452, 48452, -48482, -48500, -48542, -48542, -48559, -48579, -48611, -48611, -48628, -48651, -48657, -48657, -48676, -48676, -48676, -48676, -48683, -48689, -48722, -48729, -48729, -48736, -48749, -48765, +48456, +48479, +48479, +48485, +48492, +48498, +48498, +48498, +48523, +48560, +48581, +48597, +48597, +48597, +48624, +48624, +48652, +48665, +48705, +48705, +48712, +48726, +48726, +48726, +48760, +48760, +48770, +48770, +48770, +48770, +48770, +48770, +48770, +48770, +48770, +48770, +48779, +48786, +48786, 48786, -48802, -48802, -48802, -48832, -48853, -48869, -48888, -48888, -48895, -48922, -48922, -48922, -48922, -48943, -48943, -48956, -48973, -48973, -48986, -48992, -49006, -49045, -49064, +48797, +48811, +48820, +48820, +48820, +48836, +48836, +48842, +48871, +48894, +48894, +48894, +48894, +48894, +48911, +48935, +48935, +48935, +48968, +48979, +48994, +49007, +49019, +49040, +49051, 49071, -49080, -49116, -49123, -49130, -49137, -49172, -49193, -49193, -49193, -49193, -49210, -49217, -49224, -49261, -49261, -49285, -49310, -49327, -49343, -49350, -49371, -49371, +49079, +49079, +49096, +49106, +49106, +49128, +49138, +49138, +49138, +49150, +49150, +49159, +49219, +49262, +49262, +49300, +49300, +49300, +49331, +49337, +49347, +49347, +49347, +49368, +49368, +49368, +49368, +49368, 49378, -49385, -49392, -49392, -49428, -49448, -49464, -49512, -49542, -49549, -49556, -49562, -49594, -49623, -49630, -49674, -49674, -49699, +49378, +49378, +49387, +49403, +49412, +49412, +49422, +49441, +49474, +49498, +49498, +49498, +49514, +49514, +49524, +49524, +49535, +49535, +49546, +49546, +49551, +49602, +49602, +49609, +49613, +49624, +49624, +49624, +49624, +49641, +49648, +49648, +49648, +49675, +49692, +49692, +49709, +49724, 49739, -49752, -49775, -49775, -49775, -49793, -49803, -49819, -49819, -49819, -49828, -49846, +49770, +49770, +49770, +49770, +49770, +49786, +49825, +49825, +49825, +49834, +49853, +49853, 49860, -49860, -49867, -49888, -49895, -49909, -49941, -49947, -49947, -50014, -50030, -50036, -50036, -50036, -50049, -50071, -50097, -50136, -50143, -50158, -50158, -50165, -50165, -50183, -50196, +49875, +49891, +49914, +49924, +49924, +49939, +49949, +49960, +49970, +49970, +49980, +49994, +50001, +50013, +50039, +50039, +50039, +50065, +50081, +50114, +50142, +50169, +50180, +50180, 50203, 50203, -50210, -50237, -50248, +50220, +50220, +50229, +50236, +50236, 50266, -50280, -50293, -50307, +50275, +50295, 50307, -50307, -50307, -50346, +50340, 50359, -50390, -50412, -50440, -50440, -50440, -50446, -50462, -50462, -50478, -50486, -50486, -50494, -50498, -50552, -50569, -50569, -50569, -50569, -50569, -50569, -50591, -50604, -50604, -50611, -50618, -50642, -50684, -50720, -50720, -50750, -50754, -50754, -50784, -50784, -50817, -50832, -50858, -50874, -50874, -50919, -50955, -50955, -50962, -50962, -50992, -51013, -51013, -51020, -51046, -51056, -51115, -51122, -51152, -51189, -51189, -51196, -51203, -51203, -51217, -51217, -51217, -51265, -51304, -51327, -51347, -51360, -51371, -51386, -51386, -51411, -51452, -51452, -51452, -51459, -51484, -51491, -51491, -51491, -51491, -51510, -51510, +50359, +50374, +50374, +50387, +50387, +50387, +50387, +50387, +50387, +50409, +50414, +50423, +50423, +50449, +50449, +50449, +50459, +50482, +50499, +50499, +50514, +50522, +50522, +50522, +50540, +50558, +50565, +50574, +50574, +50620, +50620, +50620, +50624, +50633, +50633, +50653, +50665, +50673, +50673, +50700, +50700, +50700, +50713, +50713, +50713, +50740, +50748, +50767, +50767, +50767, +50775, +50781, +50789, +50803, +50803, +50803, +50803, +50803, +50810, +50810, +50821, +50827, +50839, +50876, +50893, +50893, +50910, +50942, +50960, +50960, +50984, +50984, +50991, +50991, +51025, +51043, +51058, +51073, +51077, +51077, +51092, +51092, +51113, +51144, +51160, +51172, +51188, +51198, +51198, +51208, +51221, +51231, +51235, +51235, +51255, +51271, +51288, +51288, +51288, +51307, +51307, +51318, +51318, +51318, +51338, +51338, +51349, +51349, +51364, +51375, +51375, +51416, +51416, +51416, +51416, +51416, +51437, +51437, +51457, +51470, +51470, +51470, +51486, +51501, 51521, -51565, -51581, -51588, -51601, -51620, -51620, -51635, -51666, -51683, -51690, -51718, -51718, -51718, -51757, -51779, -51779, -51779, -51779, -51779, -51779, -51809, -51814, -51820, -51842, -51886, -51900, -51900, -51900, -51900, -51900, -51910, -51927, -51927, -51945, -51962, -51968, -51974, -51974, -51980, -51980, -51980, -51980, -52001, -52011, -52011, -52025, -52025, -52025, -52039, -52071, -52096, -52096, -52096, -52096, -52102, -52119, -52119, -52119, -52119, -52125, -52153, -52164, -52164, -52164, -52195, -52207, -52223, -52255, +51531, +51548, +51548, +51558, +51576, +51611, +51611, +51611, +51632, +51670, +51682, +51695, +51717, +51717, +51717, +51717, +51732, +51743, +51743, +51758, +51765, +51765, +51782, +51812, +51812, +51812, +51812, +51828, +51828, +51828, +51845, +51845, +51851, +51851, +51908, +51923, +51923, +51923, +51932, +51953, +51953, +51969, +52002, +52002, +52056, +52072, +52072, +52072, +52092, +52137, +52145, +52145, +52145, +52163, +52183, +52219, +52219, +52227, +52256, +52267, +52267, +52276, 52276, 52276, -52299, -52305, -52305, -52320, -52320, -52359, -52373, -52389, -52389, -52396, -52401, -52401, +52295, +52363, +52375, +52375, +52395, +52395, 52414, 52414, -52420, -52432, -52432, -52432, -52449, -52449, -52456, -52466, -52466, +52414, +52429, +52429, +52429, +52445, +52471, 52471, 52471, -52478, -52478, -52478, -52507, -52507, -52507, -52519, -52537, -52537, -52537, -52537, -52556, -52569, -52569, -52569, -52585, -52594, -52594, -52631, -52652, -52680, -52695, -52710, -52745, -52745, -52745, -52758, -52764, +52471, +52492, +52492, +52510, +52530, +52530, +52530, +52538, +52555, +52555, +52579, +52587, +52587, +52587, +52644, +52644, +52644, +52644, +52644, +52654, +52654, +52667, +52690, +52690, +52702, +52727, +52727, +52755, +52773, +52778, 52778, -52789, -52805, -52805, -52821, -52842, -52855, -52855, -52896, -52896, -52928, -52928, -52941, -52947, -52947, -52960, -52960, -52990, -53004, +52790, +52810, +52826, +52826, +52826, +52826, +52834, +52848, +52848, +52848, +52856, +52875, +52885, +52895, +52895, +52895, +52895, +52908, +52908, +52959, +52963, +52963, +52988, +52993, 53014, -53020, -53020, -53020, -53020, -53034, -53073, -53084, -53084, -53100, -53100, -53100, -53115, -53123, -53148, -53178, -53188, -53202, -53202, -53218, -53218, -53228, -53251, -53256, -53262, -53262, -53262, -53282, -53299, +53014, +53056, +53080, +53111, +53111, +53118, +53118, +53134, +53161, +53161, +53161, +53172, +53172, +53194, +53208, +53208, +53208, +53233, +53233, +53233, +53240, +53240, +53247, +53274, +53296, +53321, +53321, +53338, 53338, -53358, -53358, -53431, -53436, -53436, -53456, -53504, -53504, -53517, -53531, -53574, -53583, -53619, -53631, -53631, -53631, -53631, -53640, -53670, -53670, -53718, -53718, +53355, +53362, +53369, +53376, +53393, +53393, +53393, +53393, +53400, +53412, +53426, +53437, +53460, +53467, +53509, +53509, +53509, +53532, +53532, +53542, +53588, +53593, +53600, +53600, +53615, +53615, +53615, +53630, +53637, +53637, +53653, +53667, +53674, +53674, +53681, +53681, +53681, 53728, -53733, -53749, -53774, -53774, -53811, -53811, +53735, +53740, +53748, +53772, +53783, +53791, +53791, +53791, +53791, +53791, +53804, 53822, -53835, -53842, -53882, +53831, +53861, +53861, +53861, +53879, +53893, +53899, +53899, +53899, 53903, -53919, -53932, -53942, -53942, -53951, -53978, -54001, -54015, -54015, -54015, -54015, -54024, -54024, -54031, -54067, -54081, -54081, -54081, -54086, -54086, -54105, -54132, -54132, -54132, +53903, +53914, +53924, +53924, +53924, +53924, +53946, +53975, +53988, +53988, +54008, +54008, +54016, +54033, +54054, +54094, +54123, 54140, 54140, -54178, -54178, -54178, -54192, -54192, -54209, -54231, -54258, +54147, +54147, +54180, +54180, +54198, +54198, +54217, +54217, +54234, +54241, +54251, 54258, -54280, -54287, -54293, -54308, -54308, -54315, +54300, +54300, +54307, +54307, 54332, 54332, -54346, -54379, -54379, -54421, -54444, -54467, -54481, -54481, -54497, -54529, -54555, -54555, -54597, -54614, -54620, -54635, -54635, -54635, -54652, -54664, -54664, -54724, -54752, -54752, -54762, -54778, -54788, -54788, -54796, -54835, -54848, -54848, -54864, -54914, -54940, -54940, -54945, -54957, -54966, -54966, -54966, -54966, -54988, -54988, -54988, -55008, -55008, -55008, -55014, -55014, -55030, -55044, +54339, +54356, +54370, +54380, +54380, +54380, +54380, +54380, +54380, +54384, +54405, +54438, +54459, +54480, +54480, +54487, +54494, +54528, +54538, +54552, +54552, +54552, +54552, +54568, +54585, +54595, +54624, +54624, +54637, +54644, +54644, +54644, +54644, +54657, +54657, +54677, +54677, +54684, +54684, +54697, +54697, +54712, +54739, +54749, +54773, +54793, +54802, +54827, +54834, +54841, +54841, +54873, +54882, +54901, +54941, +54948, +54963, +54970, +54986, +54986, +55001, +55029, +55035, +55065, 55072, -55072, -55102, -55102, -55102, -55130, -55137, -55137, -55137, -55137, -55137, -55156, -55168, -55168, -55181, -55226, -55226, -55233, -55246, -55246, -55256, -55256, -55261, -55261, -55261, -55282, -55298, -55314, -55321, -55330, -55339, +55089, +55111, +55124, +55143, +55143, +55143, +55150, +55150, +55189, +55196, +55216, +55245, +55252, +55252, +55272, +55272, +55332, 55339, -55350, -55368, -55381, -55401, -55412, -55412, -55412, -55412, -55412, -55430, -55440, -55461, -55461, -55474, -55518, -55537, -55537, -55553, -55571, -55571, -55615, -55622, -55622, -55622, -55634, -55650, -55650, -55685, -55691, -55691, -55691, -55697, -55734, -55734, +55363, +55396, +55410, +55433, +55447, +55454, +55458, +55458, +55487, +55487, +55497, +55497, +55497, +55544, +55544, +55548, +55562, +55568, +55568, +55568, +55568, +55585, +55585, +55585, +55604, +55604, +55619, +55625, +55632, +55632, +55671, +55671, +55684, +55684, +55684, +55709, +55717, +55727, 55734, +55769, 55801, -55813, -55844, -55857, -55863, -55876, -55890, -55924, +55815, +55837, +55848, +55855, +55871, +55885, +55905, +55926, +55926, 55942, -55949, -55970, -55970, -55970, -55970, -55990, -56006, -56006, -56029, -56038, -56050, -56057, -56057, -56073, -56073, -56073, -56073, -56073, -56085, -56085, -56108, -56108, -56108, -56141, -56155, -56168, +55942, +55973, +55973, +55973, +55973, +55979, +56020, +56033, +56033, +56047, +56054, +56072, +56089, +56096, +56103, +56130, +56146, +56146, +56153, 56179, -56186, -56204, -56245, -56257, -56257, -56257, -56274, -56304, -56341, -56341, -56341, -56367, -56405, -56405, -56405, -56405, -56443, -56443, -56463, -56482, -56492, -56522, -56539, -56539, -56539, -56546, -56553, -56586, -56605, -56612, -56631, -56631, -56631, -56649, -56649, -56670, -56684, -56684, -56733, -56769, -56769, -56779, -56807, -56823, -56839, -56870, -56870, -56870, -56870, -56886, -56886, -56886, -56886, -56886, -56908, -56908, -56964, -56964, -56970, -56982, -57001, -57001, -57001, -57010, -57032, -57039, -57039, -57070, -57080, -57088, -57095, -57095, -57112, -57112, -57131, -57141, -57161, -57193, -57193, -57204, -57221, -57221, -57221, -57221, -57221, -57231, -57241, -57271, -57298, -57310, -57321, -57321, -57321, -57336, -57336, -57342, -57349, -57349, -57349, -57349, -57349, -57349, -57366, -57397, -57406, -57437, -57437, -57456, -57511, -57527, -57548, -57564, -57564, -57564, -57586, -57586, -57611, -57627, -57649, -57656, -57708, -57708, -57708, -57708, -57728, -57728, -57747, -57747, -57747, -57756, -57772, -57784, -57784, -57784, -57806, -57854, -57861, -57876, -57882, -57882, -57882, -57890, -57911, -57911, -57911, -57918, -57918, -57936, -57936, -57936, -57936, -57942, -57942, -57942, -57942, -57947, -57947, -57947, -57954, +56183, +56202, +56216, +56226, +56260, +56287, +56300, +56307, +56345, +56359, +56376, +56390, +56410, +56417, +56435, +56442, +56462, +56462, +56480, +56514, +56521, +56521, +56521, +56528, +56558, +56565, +56626, +56646, +56685, +56692, +56718, +56741, +56741, +56768, +56804, +56821, +56821, +56851, +56904, +56911, +56918, +56925, +56940, +56962, +56977, +56984, +56999, +57019, +57019, +57019, +57037, +57049, +57049, +57083, +57083, +57115, +57115, +57152, +57178, +57178, +57209, +57223, +57244, +57244, +57244, +57244, +57273, +57280, +57287, +57287, +57332, +57368, +57368, +57375, +57375, +57375, +57412, +57412, +57418, +57433, +57433, +57452, +57462, +57462, +57469, +57476, +57485, +57499, +57544, +57551, +57551, +57561, +57568, +57577, +57593, +57593, +57606, +57606, +57633, +57633, +57644, +57644, +57659, +57659, +57689, +57710, +57718, +57725, +57725, +57725, +57732, +57732, +57732, +57732, +57745, +57767, +57774, +57809, +57809, +57809, +57829, +57880, +57915, +57927, 57954, -57978, -57978, -58000, -58006, -58013, -58013, -58013, -58027, -58076, -58093, -58093, -58093, -58099, -58099, -58107, -58118, -58158, -58158, -58173, -58181, -58187, -58194, -58194, -58215, -58240, -58240, -58240, -58240, -58256, -58256, -58256, -58263, -58282, -58290, -58290, +58002, +58009, +58009, +58021, +58035, +58042, +58049, +58069, +58084, +58105, +58105, +58122, +58122, +58140, +58177, +58195, +58199, +58220, +58239, +58252, +58252, +58252, +58291, 58312, 58312, -58312, -58317, -58317, -58317, 58333, -58345, -58345, -58361, -58361, -58387, -58414, -58438, +58351, +58398, +58409, +58409, +58409, +58409, +58416, +58446, 58446, -58467, -58467, -58482, -58482, -58512, -58512, -58512, -58520, -58542, -58569, -58598, -58607, -58626, -58647, -58666, -58688, -58688, -58688, -58697, -58703, -58703, -58703, -58703, -58721, -58742, -58794, +58453, +58469, +58476, +58509, +58509, +58509, +58509, +58509, +58529, +58555, +58571, +58587, +58587, +58587, +58587, +58594, +58594, +58628, +58635, +58668, +58668, +58693, +58700, +58707, +58761, +58789, +58789, 58829, -58847, -58866, -58866, -58874, -58880, -58880, -58887, -58887, -58900, -58900, -58900, -58928, +58854, +58854, +58871, +58878, +58886, +58893, +58931, +58938, 58945, -58945, -58963, -58963, -58963, -58985, -58985, -58991, -59011, -59062, -59062, -59062, -59062, -59062, -59062, -59095, -59115, -59138, -59138, -59138, -59155, +58952, +58970, +58984, +59013, +59038, +59045, +59068, +59077, +59077, +59086, +59086, +59086, +59086, +59112, +59151, +59151, 59166, 59166, -59202, -59202, -59202, -59211, -59218, -59224, +59166, +59166, +59166, +59194, 59224, 59224, -59242, -59242, -59268, -59268, -59308, -59314, -59326, -59326, -59340, -59340, -59345, -59368, -59373, -59373, -59412, -59412, -59435, -59435, -59435, -59435, -59455, -59466, +59247, +59247, +59247, +59259, +59283, +59283, +59283, +59283, +59290, +59297, +59330, +59349, +59362, +59374, +59437, +59449, +59459, 59466, -59466, -59481, -59481, -59481, -59481, -59500, -59517, -59517, -59549, -59555, -59555, -59555, -59568, -59595, -59615, -59631, -59631, -59631, -59631, +59488, +59494, +59511, +59537, +59560, +59574, +59598, +59611, +59634, +59634, 59641, 59641, -59654, -59678, -59678, -59694, -59700, -59700, -59700, -59700, -59700, -59714, -59721, +59641, +59641, +59652, +59663, +59663, +59679, +59679, +59685, 59721, -59740, -59749, -59765, -59765, -59784, -59784, +59727, +59727, +59727, +59741, +59760, +59771, +59810, 59822, -59822, -59867, -59878, -59890, -59890, -59925, -59925, -59925, -59925, -59925, -59942, -59942, -59964, -59964, -59964, -59978, -59985, -59997, -60010, -60010, -60055, -60091, -60101, -60101, -60108, -60114, -60139, -60139, -60139, -60156, -60156, -60156, -60163, -60163, -60169, -60175, -60181, -60181, -60181, -60187, -60195, -60215, -60215, -60215, -60215, -60234, -60234, -60234, -60244, -60284, -60290, -60305, -60305, -60317, -60380, -60388, -60388, -60393, -60400, -60400, -60400, -60400, -60407, -60407, -60407, -60407, -60431, -60450, -60460, -60512, -60522, -60532, -60532, -60552, -60560, -60560, -60560, -60594, -60594, -60607, -60615, -60615, -60615, -60628, -60628, -60649, -60655, -60663, -60675, +59831, +59850, +59856, +59880, +59923, +59966, +59973, +59987, +60006, +60041, +60041, +60070, +60103, +60119, +60131, +60136, +60152, +60184, +60191, +60220, +60228, +60253, +60253, +60280, +60303, +60303, +60310, +60345, +60345, +60372, +60395, +60406, +60430, +60454, +60461, +60486, +60497, +60504, +60511, +60528, +60535, +60535, +60535, +60556, +60556, +60563, +60581, +60599, +60599, +60616, +60636, +60636, +60668, +60690, +60690, 60697, -60713, -60731, +60716, +60723, 60747, -60754, -60761, -60761, -60778, -60778, -60778, -60778, -60782, -60793, -60811, -60811, -60848, -60874, -60904, -60904, -60910, +60759, +60771, +60785, +60792, +60792, +60792, +60815, +60829, +60849, +60849, +60849, +60849, +60859, +60870, +60911, 60929, -60944, -60959, -60977, -60984, -60992, -60992, -61013, -61019, -61045, -61045, -61049, -61061, -61061, -61061, -61061, -61069, -61089, -61115, -61138, -61148, -61165, -61182, -61203, -61241, -61295, -61295, -61295, -61295, -61308, -61335, -61335, -61335, -61335, -61358, -61406, -61410, +60929, +60947, +60947, +60947, +60947, +60947, +60947, +60947, +60974, +60974, +60974, +60991, +61014, +61025, +61025, +61025, +61062, +61074, +61074, +61074, +61080, +61096, +61112, +61112, +61136, +61136, +61136, +61147, +61154, +61154, +61176, +61176, +61199, +61209, +61224, +61224, +61231, +61246, +61246, +61246, +61266, +61266, +61273, +61294, +61312, +61312, +61332, +61332, +61354, +61371, +61378, +61378, +61378, 61410, -61418, -61418, -61418, -61418, -61424, -61424, -61424, -61424, -61438, -61452, -61497, -61505, -61505, -61529, -61554, -61575, -61581, -61581, -61615, -61623, +61417, +61433, +61433, +61455, +61489, +61489, +61501, +61501, +61513, +61513, +61547, +61547, +61547, +61558, +61558, +61578, +61584, +61598, +61598, +61598, +61598, +61598, +61598, +61627, +61635, +61635, +61635, 61663, 61663, -61677, -61677, -61686, -61686, -61698, -61698, -61698, -61705, -61705, -61705, -61705, -61714, -61714, -61745, -61755, -61761, -61779, -61807, -61807, -61817, -61817, -61855, -61872, -61872, -61872, -61872, -61872, -61872, -61878, -61905, -61905, -61905, -61905, -61930, -61943, -61943, -61949, +61669, +61687, +61687, +61687, +61706, +61723, +61803, +61803, +61803, +61813, +61823, +61842, +61842, +61870, +61870, +61926, +61926, +61926, +61944, 61970, -61982, -61982, -61982, -61982, -61993, -61993, -62005, -62036, -62036, -62055, -62076, -62076, -62091, +61980, +61980, +61980, +61985, +62001, +62007, +62007, +62035, +62052, +62067, +62081, +62081, +62081, +62081, +62087, +62118, +62118, 62124, -62134, -62134, -62140, -62161, +62142, +62149, +62149, 62181, -62193, -62236, -62243, -62261, -62261, -62297, -62297, -62308, -62317, -62317, -62331, -62356, -62356, -62417, -62452, -62452, -62452, -62467, -62467, -62467, -62477, -62477, -62486, -62486, -62510, -62510, -62518, -62548, -62548, -62567, -62567, -62567, -62580, -62580, -62580, -62586, -62593, -62613, -62613, -62628, -62669, -62697, -62697, -62697, +62209, +62209, +62209, +62209, +62225, +62225, +62225, +62232, +62268, +62286, +62320, +62320, +62320, +62320, +62320, +62320, +62320, +62335, +62335, +62343, +62379, +62425, +62425, +62442, +62442, +62474, +62484, +62530, +62555, +62555, +62582, +62582, +62608, +62608, +62621, +62621, +62631, +62681, +62681, 62697, 62697, -62718, -62718, -62718, -62718, -62718, -62741, -62771, -62797, -62827, -62847, -62847, -62847, -62847, -62901, -62901, -62901, -62901, -62901, -62915, -62915, -62926, -62940, -62940, -62940, -62948, -62954, -62954, -62960, -62975, -62975, +62723, +62753, +62774, +62774, +62774, +62774, +62774, +62820, +62829, +62829, +62837, +62841, +62841, +62849, +62849, +62857, +62857, +62925, +62931, +62931, +62937, +62966, +62978, 62987, -63007, -63007, -63044, -63044, -63065, -63065, -63081, -63081, -63100, -63120, -63133, -63150, -63150, -63167, -63167, -63187, -63227, -63227, -63227, -63227, -63227, -63227, -63256, -63273, -63277, -63291, -63297, -63297, -63297, -63297, -63315, -63351, -63368, -63397, -63397, -63397, -63397, -63409, -63437, -63437, -63437, -63444, -63444, -63444, -63489, -63522, -63522, -63522, -63538, -63554, -63554, -63554, -63569, -63576, -63576, -63606, -63615, -63626, -63646, -63670, -63670, -63670, -63696, -63710, -63730, -63742, -63757, -63766, -63792, -63807, -63807, -63828, +62993, +63002, +63016, +63052, +63097, +63101, +63123, +63152, +63175, +63202, +63208, +63214, +63214, +63214, +63214, +63231, +63231, +63239, +63286, +63321, +63333, +63333, +63348, +63348, +63348, +63355, +63355, +63359, +63372, +63394, +63394, +63394, +63410, +63410, +63417, +63417, +63417, +63452, +63469, +63501, +63501, +63511, +63520, +63530, +63530, +63530, +63530, +63543, +63558, +63558, +63574, +63574, +63591, +63613, +63625, +63645, +63645, +63663, +63663, +63675, +63687, +63687, +63687, +63687, +63715, +63731, +63737, +63737, +63737, +63741, +63759, +63759, +63759, +63769, +63769, +63769, +63769, +63769, +63794, +63810, +63841, 63849, 63849, -63856, -63876, -63910, +63849, +63849, +63849, +63862, +63862, +63862, +63880, +63886, +63901, +63914, +63928, 63928, -63945, -63961, -63961, -63982, -64042, -64050, -64066, -64071, -64089, -64099, -64099, -64129, -64150, -64150, -64168, -64168, -64168, -64168, -64168, -64214, -64231, +63955, +63962, +63969, +63981, +63981, +63981, +63981, +63981, +63999, +64014, +64014, +64033, +64048, +64048, +64059, +64059, +64059, +64059, +64108, +64108, +64108, +64108, +64117, +64127, +64158, +64158, +64158, +64178, +64190, +64215, 64241, 64241, -64250, -64294, -64294, -64294, -64326, -64355, -64366, -64386, -64386, -64386, -64408, -64408, -64426, -64458, -64458, -64492, -64492, -64498, -64537, -64555, -64573, -64573, -64622, -64642, -64651, -64651, -64659, -64659, -64683, -64683, -64683, -64718, -64718, -64735, -64735, -64741, -64741, -64745, -64745, -64771, -64771, -64771, -64771, -64792, -64800, -64825, -64825, -64825, -64850, -64868, -64868, -64886, -64886, -64897, -64897, -64904, -64909, -64945, -64945, -64965, -64982, -65005, -65005, -65044, -65068, -65082, -65090, -65090, -65113, -65125, -65134, -65151, -65172, -65184, -65211, -65211, -65221, -65277, -65284, -65290, -65290, -65290, +64241, +64241, +64263, +64291, +64295, +64295, +64307, +64307, +64307, +64307, +64307, +64307, +64311, +64352, +64352, +64352, +64368, +64368, +64368, +64412, +64412, +64434, +64443, +64443, +64456, +64456, +64456, +64469, +64514, +64514, +64514, +64514, +64514, +64522, +64522, +64522, +64544, +64578, +64608, +64633, +64644, +64672, +64700, +64716, +64742, +64755, +64755, +64765, +64793, +64846, +64856, +64856, +64879, +64885, +64896, +64896, +64924, +64928, +64928, +64938, +64971, +64971, +64977, +65007, +65019, +65019, +65034, +65073, +65073, +65091, +65091, +65091, +65101, +65101, +65101, +65112, +65146, +65167, +65178, +65178, +65192, +65208, +65227, +65227, +65227, +65227, +65227, +65227, +65227, +65227, +65227, +65271, +65286, 65290, -65301, -65362, -65380, -65380, -65400, -65411, -65437, -65437, -65437, -65450, -65458, -65458, -65458, -65458, -65483, -65483, -65496, +65324, +65348, +65358, +65412, +65412, +65412, +65419, +65423, +65459, +65466, +65489, 65496, -65528, -65542, -65568, -65568, -65578, -65578, -65578, -65610, -65610, -65618, -65641, -65664, -65664, -65664, -65664, -65693, -65693, -65693, -65716, -65743, -65760, -65760, -65760, -65767, -65771, -65781, -65811, -65816, -65836, -65836, -65857, -65868, -65880, -65880, -65880, -65886, -65904, -65904, -65919, -65919, -65947, -65951, -65958, -65962, -65972, -65989, -65989, -65989, -65993, -66011, -66011, +65502, +65512, +65538, +65547, +65551, +65585, +65601, +65601, +65612, +65632, +65651, +65657, +65657, +65669, +65669, +65675, +65679, +65701, +65701, +65730, +65756, +65756, +65770, +65789, +65789, +65789, +65818, +65818, +65851, +65851, +65865, +65869, +65879, +65879, +65911, +65911, +65917, +65917, +65936, +65959, +65965, +65965, +65965, +65965, +65990, +66019, 66036, -66073, -66073, -66079, -66095, -66095, -66124, -66136, -66136, -66154, -66172, -66176, -66176, -66185, -66185, -66185, -66198, -66198, -66236, -66250, -66255, -66277, -66277, -66277, -66291, -66313, -66332, -66352, -66352, -66356, -66378, -66384, -66384, -66399, -66399, -66434, -66444, -66444, -66444, -66486, -66501, -66546, -66556, -66589, -66589, -66589, -66596, -66596, -66607, -66618, -66644, -66672, -66672, -66672, -66686, -66686, -66705, -66705, -66705, -66723, -66733, -66733, -66741, -66764, -66785, -66810, -66810, -66841, -66841, -66841, -66849, -66857, -66857, -66857, -66867, -66885, -66885, +66068, +66076, +66090, +66108, +66130, +66130, +66166, +66184, +66204, +66204, +66217, +66217, +66228, +66228, +66228, +66247, +66247, +66278, +66311, +66316, +66335, +66350, +66368, +66382, +66382, +66382, +66382, +66382, +66382, +66386, +66402, +66408, +66408, +66418, +66422, +66470, +66470, +66491, +66521, +66548, +66548, +66555, +66574, +66581, +66581, +66593, +66593, +66600, +66610, +66636, +66657, +66675, +66675, +66675, +66687, +66721, +66751, +66760, +66781, +66798, +66798, +66811, +66811, +66811, +66819, +66819, +66830, +66830, +66853, +66869, 66893, -66899, -66919, -66927, -66944, -66954, -66954, -66961, -66993, -66993, -67008, -67022, -67064, -67068, -67089, -67089, -67093, -67106, +66893, +66893, +66893, +66900, +66918, +66940, +66950, +66959, +66959, +66965, +67016, +67023, +67047, +67047, +67062, +67069, 67106, -67121, -67121, -67125, 67136, -67145, -67145, -67161, -67161, -67161, -67191, -67191, -67191, -67200, -67200, -67209, -67209, -67209, -67209, -67223, -67223, -67223, -67223, -67223, -67223, -67223, -67237, -67237, -67287, -67287, -67294, -67294, -67294, -67294, -67294, +67167, +67177, +67212, +67230, +67230, +67249, +67279, +67285, 67312, -67338, -67338, -67338, -67354, -67376, -67387, -67392, -67407, -67407, -67432, -67472, -67483, -67526, -67526, +67330, +67351, +67358, +67374, +67394, +67441, +67473, +67513, +67524, +67524, +67545, +67565, +67573, 67584, -67605, -67625, -67633, -67649, -67659, -67659, -67659, -67659, -67675, -67712, -67746, -67764, -67764, -67795, -67795, -67799, -67808, -67808, -67817, -67829, -67829, -67836, -67856, -67874, -67874, -67884, -67907, -67907, -67912, -67912, -67936, -67936, -67951, -67969, -67975, -67984, -67984, -67984, -67984, -67984, -68010, -68010, -68016, -68037, -68044, -68044, -68053, -68072, -68078, -68078, -68078, -68078, -68078, -68078, -68091, -68091, -68091, +67619, +67637, +67637, +67657, +67684, +67684, +67684, +67684, +67684, +67713, +67721, +67733, +67733, +67733, +67739, +67745, +67745, +67750, +67750, +67787, +67787, +67806, +67827, +67837, +67872, +67872, +67872, +67898, +67916, +67922, +67922, +67944, +67953, +67996, +67996, +68023, +68023, +68038, +68038, +68038, +68074, 68100, 68100, -68110, -68117, 68125, 68125, -68125, -68157, +68141, 68157, 68157, -68173, -68173, -68218, -68218, -68248, -68288, -68288, -68288, -68310, -68310, -68343, -68343, -68382, -68402, -68402, -68427, -68450, -68461, -68468, -68493, -68542, -68542, -68573, -68591, -68591, -68591, -68598, -68616, -68634, -68634, -68634, -68634, -68634, -68663, -68682, -68695, -68711, -68733, -68769, -68769, -68804, -68804, -68815, -68821, -68842, -68842, -68868, -68868, -68868, -68868, -68868, -68868, -68868, -68884, -68884, -68884, -68888, -68888, -68888, -68888, -68926, -68926, -68940, -68962, -68962, -68979, -68998, -69014, -69020, -69020, -69039, -69039, -69045, -69073, -69073, -69073, -69073, -69077, -69077, -69077, -69093, -69099, -69099, -69099, -69107, -69138, -69138, -69146, -69146, -69180, -69180, -69213, -69222, -69222, -69245, +68177, +68216, +68221, +68256, +68256, +68262, +68285, +68285, +68301, +68301, +68301, +68312, +68312, +68332, +68332, +68381, +68403, +68409, +68432, +68432, +68445, +68465, +68471, +68471, +68488, +68515, +68515, +68539, +68539, +68552, +68569, +68594, +68594, +68609, +68648, +68704, +68710, +68730, +68737, +68737, +68750, +68760, +68766, +68794, +68794, +68794, +68794, +68794, +68810, +68810, +68825, +68839, +68839, +68860, +68893, +68893, +68893, +68922, +68922, +68922, +68927, +68927, +68927, +68944, +68944, +68944, +68944, +68944, +68944, +68960, +68970, +68985, +69001, +69001, +69007, +69028, +69028, +69042, +69042, +69048, +69076, +69076, +69095, +69124, +69131, +69155, +69162, +69162, +69176, +69184, +69184, +69184, +69184, +69230, 69254, -69276, -69286, -69286, -69286, -69326, -69344, -69378, -69396, -69396, -69408, -69408, -69445, -69445, -69456, -69469, -69469, -69477, +69261, +69267, +69267, +69273, +69292, +69298, +69335, +69356, +69356, +69361, +69367, +69367, +69367, +69367, +69382, +69402, +69421, +69434, +69455, +69467, +69479, 69485, -69513, -69526, -69526, -69536, -69569, -69569, -69614, -69632, +69493, +69505, +69511, +69556, +69586, +69595, +69605, +69605, +69605, +69621, +69634, +69634, +69648, +69648, +69652, +69652, 69658, -69668, -69668, -69693, -69732, -69740, -69756, -69772, -69772, -69779, -69779, -69779, -69779, -69779, -69800, -69815, -69819, -69819, -69846, -69852, -69941, -69962, -69962, -69962, -69962, -69962, -69962, -69962, -69962, -69982, -70001, -70012, -70031, -70038, -70038, -70046, -70069, -70069, -70094, -70128, -70128, -70128, -70128, -70128, -70128, -70128, +69678, +69706, +69717, +69717, +69731, +69731, +69731, +69731, +69752, +69766, +69775, +69807, +69814, +69814, +69855, +69859, +69868, +69868, +69874, +69874, +69874, +69874, +69874, +69883, +69900, +69900, +69917, +69934, +69949, +69969, +69969, +69996, +69996, +70014, +70056, +70075, +70097, 70145, -70177, -70177, -70189, -70189, -70189, -70189, -70189, -70219, -70219, -70219, -70219, -70226, -70226, -70245, -70245, -70245, -70245, -70253, -70253, -70253, -70279, -70279, -70279, -70279, -70279, -70279, -70311, -70349, -70356, -70386, -70386, -70424, -70424, -70466, -70466, -70494, -70523, -70541, -70550, -70568, -70583, -70592, -70592, -70592, -70592, -70631, -70656, -70676, -70676, -70696, -70696, -70703, +70145, +70168, +70182, +70193, +70209, +70209, +70233, +70233, +70240, +70240, +70240, +70247, +70280, +70295, +70295, +70321, +70351, +70357, +70364, +70384, +70397, +70409, +70413, +70413, +70421, +70430, +70446, +70446, +70446, +70461, +70461, +70461, +70478, +70478, +70484, +70490, +70490, +70490, +70504, +70509, +70509, +70522, +70522, +70522, +70532, +70532, +70532, +70539, +70546, +70574, +70604, +70634, +70649, +70649, +70663, +70669, +70669, +70681, +70681, +70681, +70698, +70698, +70710, +70710, +70710, 70710, 70710, -70716, -70730, -70730, -70769, -70769, -70769, -70786, -70804, -70804, -70821, -70832, -70832, -70844, -70844, -70891, -70891, +70710, +70731, +70744, +70761, +70783, +70783, +70783, +70783, +70790, +70790, +70800, +70835, +70835, +70835, +70851, +70851, +70851, +70856, +70856, +70864, +70864, +70864, +70864, +70879, +70879, +70879, +70898, +70904, 70904, -70944, -70951, -70951, -70961, -70961, -70990, -71009, -71025, -71032, -71045, -71045, -71052, -71052, -71052, -71052, -71052, -71063, -71073, -71080, -71080, -71119, -71119, -71119, -71155, -71155, -71155, -71155, -71191, -71207, -71207, -71214, -71214, -71214, -71225, -71242, -71248, -71252, -71274, -71307, +70904, +70910, +70910, +70930, +70930, +70941, +70957, +70978, +70988, +71002, +71006, +71020, +71030, +71035, +71056, +71094, +71116, +71116, +71135, +71135, +71147, +71164, +71175, +71195, +71195, +71239, +71257, +71277, +71277, +71291, +71311, +71311, +71311, 71320, -71356, -71356, -71356, -71374, -71374, -71404, -71428, -71459, -71467, -71478, -71478, -71489, -71495, -71505, -71543, -71543, -71565, -71565, -71578, -71638, -71666, -71673, -71688, -71688, -71688, -71700, -71700, -71730, -71742, -71742, -71742, -71754, -71771, +71324, +71331, +71331, +71331, +71337, +71337, +71349, +71362, +71362, +71362, +71362, +71385, +71400, +71409, +71416, +71416, +71416, +71416, +71434, +71454, +71454, +71466, +71466, +71466, +71466, +71493, +71511, +71511, +71547, +71547, +71581, +71581, +71590, +71590, +71590, +71597, +71613, +71613, +71620, +71641, +71645, +71645, +71659, +71659, +71668, +71675, +71681, +71687, +71687, +71704, +71704, +71704, +71704, +71722, +71722, +71765, 71789, -71836, -71841, -71852, -71852, -71885, -71896, -71913, -71913, -71971, -71991, -71991, -72030, -72054, -72054, -72101, -72130, -72130, -72148, +71789, +71814, +71825, +71838, +71855, +71855, +71861, +71891, +71891, +71907, +71928, +71928, +71936, +71983, +71983, +71993, +71998, +71998, +71998, +72033, +72052, +72077, +72089, +72098, +72137, +72137, +72144, +72144, 72148, -72158, -72158, -72158, -72158, -72158, -72158, -72158, -72167, -72184, -72203, -72209, -72209, -72214, -72228, +72166, +72191, +72221, 72238, -72248, -72248, -72248, -72257, -72289, -72289, -72289, -72289, -72295, -72295, -72295, -72295, -72356, -72369, -72369, -72369, -72377, -72414, -72434, -72441, -72459, -72459, -72470, -72477, -72477, -72477, -72477, -72477, +72293, +72326, +72350, +72350, +72375, +72375, +72387, +72400, +72432, +72432, +72456, +72482, 72482, -72486, -72504, -72504, -72527, -72527, -72548, -72548, -72548, -72558, -72564, -72564, -72581, -72581, -72587, -72587, -72612, -72627, -72633, -72633, -72633, -72644, -72660, -72660, -72681, -72702, -72712, -72712, -72732, -72775, -72775, -72775, -72775, -72775, -72775, -72775, -72830, -72839, -72861, -72877, -72894, -72894, -72894, -72894, -72900, -72900, -72931, -72931, -72931, +72502, +72502, +72506, +72506, +72525, +72578, +72585, +72618, +72618, +72632, +72674, +72674, +72683, +72726, +72743, +72743, +72743, +72753, +72761, +72767, +72798, +72832, +72832, +72872, +72886, +72913, +72913, 72943, +72965, 72980, -72991, -73019, -73034, -73056, -73056, -73073, -73086, -73086, -73086, -73086, -73109, -73129, -73139, -73157, -73167, -73167, -73192, -73192, -73209, -73231, -73231, -73247, -73268, -73288, +73003, +73025, +73025, +73025, +73058, +73104, +73119, +73126, +73146, +73146, +73158, +73170, +73186, +73186, +73205, +73218, +73222, +73234, +73251, +73261, +73261, +73261, +73299, +73299, +73299, +73299, 73303, -73324, -73324, -73324, -73331, -73331, -73331, -73367, -73393, -73398, -73429, -73452, -73463, -73463, -73463, -73492, -73492, -73492, -73492, -73515, -73530, -73553, -73563, -73563, -73576, -73576, -73592, -73611, -73645, -73687, -73700, -73700, -73700, -73716, -73758, -73790, -73790, -73804, -73804, -73822, -73822, -73845, +73322, +73343, +73352, +73352, +73357, +73357, +73374, +73382, +73382, +73396, +73402, +73402, +73414, +73441, +73459, +73459, +73488, +73494, +73508, +73508, +73584, +73610, +73610, +73630, +73647, +73647, +73647, +73665, +73703, +73715, +73715, +73715, +73736, +73750, +73762, +73782, +73796, +73824, +73824, +73838, +73838, +73838, +73850, 73862, 73862, -73875, -73919, -73919, -73938, -73938, -73938, -73968, -73968, -73981, -73992, -73992, -73992, -73992, -73992, -74000, -74000, -74005, -74024, -74058, -74074, -74074, -74096, -74144, -74161, -74161, -74161, -74161, -74161, -74169, -74179, -74191, -74204, -74204, -74214, -74225, -74225, -74238, -74279, -74289, -74296, -74320, -74320, -74325, -74325, -74325, -74378, -74426, -74426, -74426, -74473, -74488, -74498, -74498, -74531, -74531, -74531, +73882, +73882, +73882, +73882, +73897, +73918, +73951, +73951, +73951, +73951, +73963, +73973, +73973, +73973, +73983, +73993, +74021, +74021, +74021, +74021, +74021, +74068, +74091, +74104, +74104, +74104, +74104, +74116, +74147, +74147, +74147, +74147, +74159, +74183, +74197, +74209, +74229, +74243, +74243, +74254, +74254, +74254, +74260, +74267, +74267, +74288, +74333, +74350, +74350, +74360, +74365, +74365, +74381, +74393, +74408, +74414, +74414, +74414, +74414, +74464, +74469, +74486, +74515, +74515, +74515, 74531, +74540, +74562, 74572, -74597, -74597, -74597, -74611, +74572, +74572, +74595, +74595, +74601, 74611, -74631, -74645, +74643, 74663, -74674, -74701, -74701, -74707, -74712, -74712, -74712, -74727, -74737, -74746, -74770, -74790, +74716, +74716, +74732, +74732, +74745, +74745, +74760, +74775, +74775, +74792, +74792, +74792, 74803, -74808, -74843, -74854, -74897, -74901, -74901, -74907, -74945, -74945, -74945, -74958, -74978, -74978, -74998, -74998, -75015, -75015, -75015, -75023, -75023, -75023, -75032, -75077, -75077, -75115, -75127, -75127, -75127, -75160, -75166, -75166, -75172, -75172, -75186, -75224, -75224, -75241, -75241, -75241, -75251, -75251, -75257, -75263, -75278, +74803, +74826, +74865, +74870, +74870, +74870, +74870, +74886, +74886, +74890, +74890, +74926, +74926, +74940, +74940, +74954, +74954, +74964, +74976, +74976, +74976, +75000, +75010, +75019, +75044, +75044, +75050, +75059, +75088, +75088, +75128, +75128, +75141, +75153, +75153, +75153, +75153, +75185, +75209, +75221, +75221, +75221, +75233, +75233, +75237, +75237, +75267, 75291, -75335, -75372, -75382, -75398, -75404, -75423, -75438, -75438, -75444, -75444, -75452, -75452, -75458, -75481, -75481, -75481, -75494, -75504, -75510, -75524, -75540, -75540, -75540, -75546, -75552, -75574, -75574, -75614, -75630, -75646, -75652, -75652, -75652, -75692, -75708, -75708, -75724, -75724, -75724, -75724, -75724, -75724, -75729, -75737, -75754, -75754, -75754, -75772, -75772, -75795, -75795, -75820, -75858, -75858, -75875, -75881, -75890, -75890, +75296, +75308, +75328, +75346, +75357, +75369, +75390, +75390, +75462, +75475, +75475, +75475, +75496, +75523, +75523, +75542, +75562, +75580, +75590, +75604, +75604, +75660, +75678, +75678, +75678, +75678, +75690, +75702, +75728, +75751, +75764, +75792, +75805, +75805, +75805, +75805, +75815, +75824, +75824, +75824, +75824, +75833, +75833, +75833, +75833, +75833, +75841, +75851, +75851, +75851, +75851, +75851, +75863, +75863, +75885, +75885, 75900, -75916, -75916, -75925, -75941, -75941, -75960, -75960, -75960, -75960, -75983, -75983, -75983, -75983, -75993, -75993, -75993, -76007, -76028, -76028, -76056, -76056, -76067, -76067, +75912, +75943, +75943, +75962, +75991, +75991, +76016, +76045, +76052, +76052, +76052, +76052, +76065, +76080, 76080, -76100, -76100, -76107, -76107, -76107, -76107, -76107, -76107, -76107, -76116, -76136, -76136, -76136, -76149, -76177, -76193, -76193, -76199, +76080, +76087, +76087, +76108, +76108, +76108, +76108, +76108, +76118, +76129, +76129, +76129, +76169, +76169, +76188, +76188, +76197, +76206, +76216, +76227, +76227, +76227, +76232, +76253, 76253, +76253, +76259, 76259, -76281, -76299, -76349, -76349, -76357, -76362, -76382, -76399, -76405, -76421, +76274, +76295, +76310, +76310, +76326, +76326, +76326, +76344, +76374, +76406, +76406, +76406, 76437, -76442, -76442, -76457, -76480, -76480, -76497, -76514, -76520, -76525, -76535, -76535, -76597, -76597, -76603, -76625, -76625, +76472, +76486, +76493, +76499, +76509, +76530, +76537, +76558, +76568, +76587, +76587, +76587, +76587, +76587, +76617, +76617, +76617, +76617, +76617, +76617, 76625, +76640, 76659, -76679, -76698, -76698, -76698, -76726, -76757, -76780, -76786, -76792, -76792, -76806, -76826, -76846, -76862, -76871, +76678, +76678, +76678, +76693, +76693, +76702, +76734, +76734, +76734, +76734, +76771, +76794, +76808, +76830, +76830, +76830, +76837, +76837, +76837, +76843, +76843, +76861, +76890, +76898, 76906, -76906, -76921, -76921, -76921, -76921, -76921, -76955, -76955, -76968, -76994, -77032, +76913, +76913, +76927, +76927, +76934, +76943, +76943, +76943, +76943, +76959, +76959, +76969, +76969, +76976, +76976, +77017, +77017, +77048, 77048, -77068, -77068, 77073, -77094, -77094, -77094, -77103, -77120, -77120, -77120, -77136, -77136, -77148, -77166, -77185, -77185, -77191, -77191, -77233, -77252, -77252, -77252, -77252, +77073, +77088, +77118, +77118, +77139, +77153, +77153, +77153, +77153, +77178, +77214, +77214, +77214, +77231, +77249, +77258, +77258, +77265, +77284, +77301, +77301, +77301, 77307, -77318, -77318, -77318, -77318, -77324, -77343, -77357, -77357, -77373, -77383, -77389, -77416, -77427, -77444, -77475, -77514, -77514, -77514, -77520, -77520, -77538, -77563, -77572, -77572, -77572, -77572, -77613, -77613, -77633, -77643, -77651, -77667, -77673, -77690, -77690, -77690, -77705, -77723, -77723, -77723, -77744, -77744, -77763, -77801, -77816, -77838, -77838, +77316, +77316, +77316, +77316, +77322, +77322, +77340, +77340, +77346, +77364, +77364, +77371, +77371, +77371, +77371, +77388, +77394, +77394, +77394, +77409, +77409, +77429, +77459, +77459, +77477, +77491, +77491, +77529, +77529, +77546, +77577, +77599, +77604, +77625, +77625, +77631, +77640, +77662, +77675, +77675, +77675, +77688, +77698, +77708, +77708, +77708, +77715, +77731, +77749, +77749, +77753, +77785, +77785, +77785, +77805, +77818, +77818, +77844, 77844, -77856, 77862, -77877, -77889, -77919, -77935, -77940, -77981, -77986, -78016, -78029, -78029, -78029, -78049, -78049, -78049, -78061, -78061, -78080, -78080, -78080, -78080, -78080, -78080, -78089, -78089, -78101, -78101, -78101, -78101, -78121, -78125, -78155, -78155, -78185, -78185, -78209, -78224, -78254, -78282, -78282, -78296, -78314, -78337, -78342, -78371, -78371, -78383, -78393, -78426, -78440, -78440, -78455, -78477, -78486, -78499, -78499, -78507, -78507, -78578, -78584, -78596, -78617, -78659, -78665, -78665, -78705, -78705, -78741, -78778, -78792, -78805, -78805, -78812, -78831, -78831, -78848, -78866, -78911, -78911, -78916, -78935, -78952, -78964, -78979, -78979, -78985, -79017, -79039, -79039, -79066, -79066, -79085, +77886, +77886, +77904, +77915, +77930, +77945, +77945, +77945, +77945, +77961, +77984, +77997, +78011, +78041, +78041, +78058, +78065, +78065, +78072, +78098, +78113, +78127, +78141, +78153, +78183, +78183, +78202, +78202, +78202, +78202, +78202, +78202, +78202, +78202, +78202, +78202, +78231, +78231, +78231, +78273, +78273, +78283, +78341, +78341, +78341, +78341, +78341, +78363, +78363, +78363, +78396, +78413, +78413, +78424, +78445, +78445, +78472, +78522, +78522, +78522, +78539, +78539, +78543, +78558, +78558, +78588, +78592, +78592, +78609, +78609, +78633, +78633, +78646, +78646, +78646, +78654, +78654, +78694, +78694, +78712, +78721, +78742, +78774, +78774, +78774, +78790, +78810, +78828, +78891, +78891, +78903, +78903, +78903, +78903, +78978, +78978, +78993, +78999, +79016, +79048, +79056, +79056, +79086, 79091, -79091, -79110, -79128, -79147, -79147, -79168, -79168, -79224, -79224, -79242, -79242, -79252, -79252, -79252, -79252, -79271, -79291, -79309, -79327, -79327, -79327, -79346, -79375, -79393, +79119, +79125, +79141, +79141, +79150, +79166, +79212, +79232, +79266, +79266, +79266, +79302, +79319, +79335, +79376, 79400, 79400, -79407, -79407, -79417, -79432, -79432, -79432, -79464, -79476, -79476, -79501, -79511, -79518, -79518, -79539, -79547, +79418, +79418, +79418, +79418, +79455, +79455, +79455, +79474, +79503, +79503, +79515, 79569, 79569, -79600, -79610, -79642, -79676, -79713, -79713, -79736, -79736, -79755, -79755, -79755, +79578, +79589, +79589, +79589, +79601, +79601, +79601, +79601, +79625, +79625, +79625, +79646, +79659, +79659, +79665, +79665, +79665, +79688, +79694, +79704, +79716, +79716, +79737, +79737, +79737, +79744, 79755, -79771, -79801, -79801, -79821, -79837, -79848, -79860, -79860, -79867, -79867, -79867, -79867, -79867, -79906, -79933, -79943, -79977, -79993, -80011, -80042, -80060, -80060, -80082, -80101, -80113, -80119, -80155, -80159, -80174, -80174, -80174, -80174, -80174, -80183, -80202, -80214, +79806, +79833, +79843, +79856, +79870, +79887, +79887, +79917, +79917, +79917, +79925, +79925, +79932, +79932, +79950, +79975, +80002, +80002, +80027, +80044, +80044, +80044, +80044, +80044, +80044, +80044, +80044, +80044, +80055, +80074, +80089, +80089, +80089, +80098, +80118, +80126, +80150, +80150, +80198, +80198, +80207, +80207, 80218, -80247, -80259, -80259, -80295, -80295, -80300, -80342, -80342, -80342, -80359, -80359, -80375, -80375, -80402, -80413, -80446, -80446, -80480, -80485, -80504, -80504, -80525, -80529, +80235, +80246, +80246, +80246, +80255, +80276, +80276, +80280, +80306, +80329, +80350, +80360, +80376, +80376, +80396, +80396, +80396, +80396, +80406, +80406, +80415, +80424, +80437, +80461, +80461, +80476, +80503, +80515, +80515, 80533, -80548, -80553, -80565, -80569, -80569, -80605, -80623, -80623, -80623, -80623, -80643, -80684, -80684, -80695, -80695, -80712, -80730, -80737, -80737, -80776, -80776, -80776, -80776, -80776, -80776, -80795, -80795, -80816, -80867, -80881, -80881, -80881, -80896, -80896, -80913, -80913, -80937, -80937, -80947, -80952, -80952, -80952, -80958, -80992, -80992, -81015, -81048, -81063, -81063, -81082, -81089, -81121, -81121, -81121, -81151, -81196, -81201, -81215, -81215, -81244, -81244, -81244, +80559, +80567, +80567, +80567, +80567, +80595, +80595, +80600, +80618, +80618, +80624, +80624, +80624, +80624, +80661, +80661, +80697, +80697, +80697, +80697, +80697, +80714, +80718, +80718, +80725, +80772, +80786, +80805, +80805, +80833, +80882, +80886, +80907, +80907, +80907, +80955, +80955, +80963, +80986, +80986, +81002, +81002, +81025, +81025, +81043, +81066, +81066, +81076, +81081, +81101, +81117, +81146, +81146, +81162, +81188, +81188, +81195, +81204, +81227, +81227, +81227, +81227, +81264, +81264, 81273, -81273, -81307, -81333, -81338, -81400, -81400, -81400, -81400, -81418, -81418, -81418, -81430, -81455, +81283, +81299, +81311, +81339, +81339, +81350, +81372, +81397, +81425, +81425, +81425, +81425, 81455, -81493, -81499, -81527, -81527, -81539, -81554, +81467, +81467, +81467, +81483, +81497, +81513, +81513, +81513, 81560, -81584, -81584, -81601, -81601, -81601, -81601, -81601, -81601, -81601, -81619, -81631, -81643, -81643, -81643, -81654, -81666, -81716, -81740, -81740, -81757, -81769, -81797, -81797, -81848, -81873, -81873, -81873, -81873, -81885, -81885, -81898, -81911, -81916, -81940, -81940, -81940, -81940, -81956, -81956, -81961, -81977, -81994, -81994, -82025, -82025, +81578, +81595, +81595, +81605, +81605, +81616, +81616, +81623, +81623, +81623, +81632, +81640, +81640, +81640, +81640, +81640, +81640, +81640, +81659, +81676, +81690, +81690, +81690, +81690, +81690, +81690, +81694, +81694, +81709, +81725, +81730, +81730, +81746, +81746, +81765, +81765, +81765, +81801, +81815, +81815, +81826, +81826, +81830, +81830, +81830, +81849, +81863, +81874, +81884, +81884, +81884, +81909, +81953, +81971, +82024, +82024, +82024, +82024, 82031, -82047, -82047, -82086, -82105, -82124, -82124, -82143, -82143, -82143, -82143, -82163, -82163, -82163, -82163, -82163, -82188, -82193, -82207, -82207, -82207, -82234, -82246, -82265, -82314, -82314, -82314, -82323, -82323, -82323, -82323, -82337, -82337, -82343, -82349, -82349, -82375, -82385, -82402, -82402, -82452, -82462, -82462, -82462, -82469, -82481, -82481, -82481, -82540, -82550, -82567, -82576, -82576, -82576, -82585, -82591, -82620, -82634, -82668, +82054, +82068, +82088, +82104, +82132, +82192, +82221, +82221, +82262, +82281, +82287, +82300, +82300, +82300, +82300, +82300, +82300, +82300, +82306, +82306, +82328, +82328, +82338, +82338, +82365, +82365, +82365, +82365, +82365, +82365, +82365, +82372, +82372, +82403, +82403, +82403, +82403, +82403, +82420, +82453, +82453, +82467, +82467, +82467, +82479, +82484, +82493, +82502, +82518, +82559, +82582, +82618, +82618, +82618, +82667, +82667, 82687, -82714, -82724, -82724, -82750, -82750, -82750, -82764, -82777, -82811, -82849, -82849, +82703, +82726, +82726, +82726, +82738, +82799, +82799, +82806, +82827, +82843, +82843, +82848, +82848, +82848, +82848, +82848, 82864, -82877, -82888, -82917, -82917, +82864, +82870, +82878, +82891, +82895, 82917, -82923, -82944, -82958, -82958, -82958, -82958, -82958, -82971, -82985, -82985, -83004, -83004, -83025, +82933, +82960, +82983, +82983, +83005, 83025, -83107, -83126, -83126, -83126, -83126, -83126, -83126, -83126, -83132, -83132, -83147, -83153, -83153, -83153, -83164, -83164, -83176, -83183, -83212, -83233, -83294, -83315, -83336, -83355, -83355, -83355, -83367, -83403, -83430, -83448, -83448, +83058, +83068, +83085, +83090, +83094, +83094, +83094, +83094, +83136, +83169, +83169, +83169, +83169, +83187, +83201, +83201, +83201, +83209, +83225, +83252, +83252, +83275, +83297, +83304, +83304, +83312, +83312, +83316, +83343, +83365, +83370, +83370, +83370, +83390, +83431, +83431, +83436, +83436, 83448, -83448, -83488, -83488, -83488, -83488, -83488, -83488, -83506, -83506, -83506, -83510, -83551, -83567, -83575, -83575, -83591, -83591, -83599, -83681, -83681, -83703, -83703, +83454, +83487, +83504, +83504, +83515, +83519, +83519, +83519, +83529, +83529, +83562, +83562, +83569, +83587, +83592, +83606, +83615, +83615, +83642, +83690, 83709, -83732, -83742, -83742, -83752, -83752, -83805, -83805, -83805, -83845, -83864, -83864, -83875, -83907, -83933, -83950, -83976, -83985, -83992, -83992, -84001, -84040, -84040, -84057, -84070, -84096, -84124, +83714, +83714, +83721, +83721, +83721, +83741, +83741, +83755, +83773, +83797, +83812, +83812, +83827, +83837, +83865, +83865, +83865, +83865, +83865, +83877, +83877, +83877, +83884, +83884, +83905, +83910, +83922, +83922, +83934, +83946, +83946, +83968, +83968, +83988, +83988, +84023, +84023, +84023, +84034, +84034, +84034, +84048, +84061, +84085, +84085, +84085, +84125, +84125, +84125, +84125, +84125, +84134, +84134, +84134, +84155, +84155, +84170, +84179, 84179, -84187, -84232, -84232, -84286, -84308, -84308, -84322, -84322, -84322, -84322, -84338, -84357, -84373, -84373, -84373, -84394, -84394, -84402, -84402, -84402, -84424, -84445, -84466, -84485, -84501, -84501, -84522, -84529, -84547, -84592, -84592, -84621, -84633, -84651, -84651, -84662, -84689, +84179, +84212, +84212, +84224, +84242, +84247, +84256, +84256, +84276, +84303, +84303, +84310, +84310, +84317, +84324, +84324, +84324, +84328, +84328, +84346, +84346, +84353, +84364, +84397, +84407, +84407, +84433, +84433, +84433, +84447, +84447, +84463, +84463, +84463, +84488, +84488, +84499, +84523, +84523, +84523, +84540, +84540, +84540, +84556, +84556, +84556, +84556, +84588, +84619, +84666, +84666, +84666, +84666, 84696, -84704, -84704, -84704}; +84730, +84751, +84756, +84756, +84790, +84800, +84832, +84832, +84837, +84853, +84853, +84879, +84879, +84901, +84907, +84920, +84947, +84965, +84997, +85035, +85045, +85045, +85045, +85045, +85086, +85118, +85135, +85172, +85192, +85192, +85192, +85202, +85202, +85215, +85228, +85241, +85268, +85268, +85268, +85287, +85287, +85287, +85287, +85300, +85300, +85305, +85305, +85305, +85353, +85353, +85353, +85368, +85405, +85405, +85432, +85432, +85438, +85443, +85443, +85452, +85459, +85477, +85477, +85490, +85490, +85519, +85519, +85524, +85542, +85552, +85557, +85557, +85557, +85577, +85622, +85640, +85651, +85658, +85663, +85668, +85668, +85680, +85688, +85695, +85695, +85695, +85731, +85731, +85738, +85742, +85742, +85758, +85758, +85758, +85796, +85796, +85796, +85796, +85818, +85840, +85872, +85872, +85872, +85872, +85893, +85898, +85898, +85898, +85907, +85907, +85914, +85933, +85933, +85955, +85955, +85981, +85981, +85996, +86009, +86009, +86019, +86019, +86019, +86029, +86033, +86033, +86033, +86048, +86053, +86053, +86068, +86068, +86088, +86138, +86153, +86178, +86178, +86199, +86218, +86231, +86231, +86231, +86231, +86231, +86247, +86252, +86252, +86277, +86292, +86313, +86342, +86370, +86378, +86430, +86470, +86504, +86509, +86509, +86527, +86536, +86536, +86544, +86555, +86555, +86555, +86580, +86597, +86597, +86618, +86623, +86633, +86648, +86671, +86671, +86698, +86698, +86698, +86705, +86714, +86727, +86732, +86732, +86754, +86754, +86776, +86776, +86810, +86810, +86810, +86817, +86817, +86849, +86870, +86875, +86896, +86941, +86947, +86952, +86973, +86980, +86980, +87006, +87022, +87030, +87037, +87043, +87051, +87051, +87085, +87085, +87101, +87101, +87123, +87160, +87160, +87173, +87188, +87188, +87207, +87207, +87223, +87241, +87258, +87305, +87312, +87312, +87328, +87328, +87348, +87357, +87357, +87375, +87375, +87375, +87375, +87394, +87394, +87425, +87445, +87453, +87471, +87480, +87480, +87501, +87510, +87528, +87528, +87545, +87545, +87560, +87593, +87600, +87600, +87600, +87600, +87600, +87600, +87676, +87676, +87676, +87689, +87709, +87744, +87744, +87778, +87778, +87819, +87819, +87819, +87835, +87835, +87842, +87853, +87853, +87868, +87880, +87893, +87912, +87912, +87943, +87953, +87953, +87953, +87953, +87958, +87958, +87969, +88010, +88010, +88029, +88029, +88029, +88040, +88040, +88040, +88040, +88055, +88060, +88066, +88072, +88072, +88085, +88085, +88104, +88104, +88132, +88138, +88138, +88138, +88138, +88142, +88161, +88171, +88171, +88180, +88180, +88180, +88180, +88200, +88206, +88206, +88206, +88240, +88266, +88282, +88282, +88301, +88312, +88325, +88343, +88354, +88354, +88385, +88385, +88385, +88401, +88415, +88415, +88424, +88424, +88435, +88458, +88458, +88502, +88514, +88520, +88520, +88536, +88536, +88536, +88558, +88576, +88576, +88576, +88576, +88588, +88612, +88655, +88662, +88672, +88683, +88699, +88707, +88725, +88732, +88772, +88772, +88778, +88807, +88814, +88824, +88824, +88845, +88877, +88877, +88882, +88888, +88921, +88921, +88921, +88927, +88934, +88934, +88958, +88958, +88958, +88988, +89030, +89044, +89044, +89073, +89087, +89117, +89132, +89142, +89142, +89147, +89164, +89171, +89185, +89206, +89206, +89206, +89206, +89206, +89206, +89206, +89227, +89233, +89233, +89259, +89281, +89281, +89281, +89312, +89321, +89328, +89342, +89360, +89360, +89369, +89378, +89378, +89398, +89398, +89417, +89429, +89429, +89442, +89442, +89442, +89442, +89460, +89476, +89476, +89476, +89493, +89551, +89551, +89570, +89583, +89583, +89600, +89609, +89609, +89619, +89636, +89636, +89658, +89681, +89688, +89714, +89733, +89744, +89744, +89753, +89753, +89753, +89766, +89766, +89778, +89778, +89799, +89820, +89832, +89866, +89907, +89907, +89907, +89947, +89947, +89975, +89995, +90004, +90004, +90004, +90015, +90023, +90023, +90040, +90047, +90065, +90065, +90074, +90088, +90088, +90088, +90094, +90109, +90109, +90139, +90139, +90139, +90139, +90145, +90151, +90156, +90156, +90187, +90187, +90198, +90204, +90204, +90204, +90204, +90226, +90238, +90245, +90245, +90250, +90281, +90281, +90281, +90329, +90334, +90349, +90370, +90392, +90392, +90412, +90412, +90437, +90437, +90464, +90470, +90483, +90483, +90495, +90495, +90495, +90495, +90506, +90506, +90506, +90506, +90522, +90529, +90547, +90596, +90614, +90614, +90614, +90614, +90636, +90636, +90636, +90654, +90654, +90654, +90654, +90654, +90661, +90661, +90693, +90713, +90713, +90719, +90744, +90744, +90744, +90756, +90776, +90782, +90782, +90807, +90865, +90865, +90865, +90865, +90865, +90892, +90892, +90892, +90892, +90938, +90974, +90974, +90980, +90980, +90997, +90997, +91011, +91031, +91061, +91074, +91106, +91111, +91123, +91123, +91150, +91159, +91159, +91159, +91190, +91195, +91208, +91208, +91216, +91228, +91228, +91228, +91228, +91238, +91258, +91258, +91258, +91275, +91297, +91335, +91335, +91351, +91382, +91382, +91389, +91389, +91397, +91397, +91425, +91425, +91425, +91425, +91425, +91425, +91440, +91469, +91476, +91476, +91500, +91534, +91553, +91553, +91580, +91587, +91607, +91617, +91639, +91639, +91656, +91671, +91677, +91710, +91710, +91719, +91719, +91743, +91743, +91743, +91743, +91748, +91768, +91781, +91781, +91803, +91826, +91826, +91836, +91856, +91856, +91872, +91872, +91872, +91878, +91878, +91878, +91878, +91878, +91901, +91901, +91915, +91931, +91931, +91931, +91942, +91942, +91952, +91967, +91982, +91982, +92000, +92000, +92000, +92000, +92000, +92023, +92023, +92048, +92070, +92085, +92104, +92104, +92116, +92116, +92150, +92163, +92163, +92179, +92179, +92179, +92193, +92221, +92221, +92228, +92228, +92265, +92289, +92303, +92303, +92303, +92303, +92311, +92311, +92328, +92365, +92365, +92365, +92365, +92365, +92365, +92365, +92365, +92365, +92365, +92401, +92401, +92401, +92401, +92401, +92401, +92420, +92434, +92448, +92498, +92556, +92561, +92561, +92576, +92576, +92576, +92576, +92582, +92599, +92614, +92638, +92654, +92654, +92665, +92665, +92665, +92665, +92665, +92699, +92699, +92718, +92718, +92741, +92746, +92765, +92783, +92783, +92820, +92850, +92850, +92896, +92918, +92955, +92955, +92955, +92955, +92955, +92967, +92967, +92982, +92998, +93004, +93004, +93026, +93026, +93026, +93026, +93032, +93073, +93073, +93079, +93093, +93093, +93105, +93123, +93123, +93145, +93145, +93145, +93145, +93150, +93150, +93179, +93201, +93227, +93245, +93267, +93276, +93276, +93287, +93292, +93292, +93292, +93292, +93292, +93305, +93305, +93319, +93323, +93341, +93349, +93349, +93361, +93361, +93361, +93372, +93389, +93389, +93389, +93432, +93464, +93477, +93477, +93484, +93484, +93484, +93484, +93484, +93503, +93503, +93519, +93519, +93544, +93553, +93553, +93562, +93606, +93621, +93621, +93631, +93654, +93670, +93693, +93699, +93705, +93715, +93734, +93745, +93745, +93745, +93745, +93745, +93761}; static const char *tldData[] = { -"trentinosudtirol.it\0ashikaga.tochigi.jp\0" -"radio.br\0" -"lib.il.us\0photography\0" -"miki.hyogo.jp\0edunet.tn\0" -"aisai.aichi.jp\0" -"isa-geek.org\0" -"educator.aero\0mining.museum\0" -"tsu.mie.jp\0yakumo.shimane.jp\0turek.pl\0" -"*.sch.uk\0ifm\0" -"an.it\0" -"consulting\0" -"tsuyama.okayama.jp\0" -"kommune.no\0" -"hl.cn\0mamurogawa.yamagata.jp\0" -"michigan.museum\0" -"\xe6\x89\x8b\xe6\x9c\xba\0" -"sand\xc3\xb8y.no\0" -"jprs\0" -"ne.jp\0" -"rnd.ru\0" -"ogaki.gifu.jp\0chitose.hokkaido.jp\0chigasaki.kanagawa.jp\0kasukabe.saitama.jp\0" -"kawaguchi.saitama.jp\0takashima.shiga.jp\0chuo.tokyo.jp\0expert\0" -"ueno.gunma.jp\0bifuka.hokkaido.jp\0" -"oster\xc3\xb8y.no\0" -"nishigo.fukushima.jp\0" -"gs.sf.no\0" -"higashichichibu.saitama.jp\0qpon\0" -"ns.ca\0" -"oishida.yamagata.jp\0ne.kr\0kobierzyce.pl\0" -"for-some.biz\0" -"satx.museum\0" -"sydney.museum\0" -"fujishiro.ibaraki.jp\0gift\0" -"akaiwa.okayama.jp\0" -"azumino.nagano.jp\0" -"divtasvuodna.no\0" -"slg.br\0" -"creditunion\0" -"ralingen.no\0" -"trust\0" -"lib.tn.us\0" -"h\xc3\xa1mm\xc3\xa1rfeasta.no\0" -"trentinosud-tirol.it\0unazuki.toyama.jp\0" -"naturhistorisches.museum\0war.museum\0nico\0" -"nedre-eiker.no\0odda.no\0" -"zentsuji.kagawa.jp\0" -"finn\xc3\xb8y.no\0" -"ikeda.osaka.jp\0" -"lerdal.no\0" -"mill.museum\0" -"wolomin.pl\0" -"vrn.ru\0" -"g12.br\0" -"artanddesign.museum\0" -"fujimino.saitama.jp\0" -"arts.co\0" -"shiroishi.saga.jp\0" -"honda\0" -"otaki.nagano.jp\0" -"harvestcelebration.museum\0bremanger.no\0nikolaev.ua\0" -"ilawa.pl\0" -"brandywinevalley.museum\0portal.museum\0" -"indianapolis.museum\0\xc3\xb8vre-eiker.no\0ski.no\0" -"catering\0condos\0" -"vlaanderen.museum\0" -"higashiyamato.tokyo.jp\0" -"alesund.no\0ternopil.ua\0" -"living.museum\0tysvar.no\0norilsk.ru\0osaka\0from-wi.com\0" -"bill.museum\0" -"is-saved.org\0" -"accident-investigation.aero\0palmsprings.museum\0" -"aeroport.fr\0tamba.hyogo.jp\0" -"sorum.no\0" -"ts.it\0" -"nose.osaka.jp\0" -"miners.museum\0ne.pw\0mari.ru\0ing\0" -"saikai.nagasaki.jp\0iheya.okinawa.jp\0miasta.pl\0" -"scientist.aero\0ovre-eiker.no\0" -"hirogawa.wakayama.jp\0" -"gs.oslo.no\0mn.us\0ink\0blogdns.com\0is-a-chef.org\0" -"miyama.mie.jp\0" -"starachowice.pl\0" -"settlement.museum\0k12.nh.us\0" -"sassari.it\0" -"lib.vi.us\0directory\0" -"b.bg\0" -"int\0" -"veg\xc3\xa5rshei.no\0" -"tsurugashima.saitama.jp\0" -"net.ac\0here-for-more.info\0" -"kamijima.ehime.jp\0" -"net.ae\0" -"net.af\0hakodate.hokkaido.jp\0opoczno.pl\0" -"net.ag\0" -"date.hokkaido.jp\0" -"net.ai\0" -"b.br\0" -"te.ua\0" -"net.al\0bl.it\0shichikashuku.miyagi.jp\0" -"net.an\0" -"net.ba\0tyumen.ru\0" -"net.ar\0net.bb\0friuli-v-giulia.it\0yawara.ibaraki.jp\0" -"nl.no\0dnsdojo.com\0" -"monzabrianza.it\0" -"net.au\0granvin.no\0" -"net.bh\0tadotsu.kagawa.jp\0olawa.pl\0" -"airforce\0" -"net.az\0konin.pl\0" -"fin.ec\0" -"shonai.yamagata.jp\0" -"net.bm\0vestre-toten.no\0" -"webhop.net\0" -"net.bo\0" -"net.br\0gen.in\0" -"net.bs\0" -"net.bt\0" -"shinjuku.tokyo.jp\0lincoln\0" -"geology.museum\0lahppi.no\0" -"net.ci\0" -"net.bz\0campidanomedio.it\0" -"gs.st.no\0naustdal.no\0omasvuotna.no\0from-il.com\0" -"aomori.aomori.jp\0tanabe.kyoto.jp\0" -"net.cm\0beeldengeluid.museum\0openair.museum\0tana.no\0" -"net.cn\0" -"net.co\0arboretum.museum\0ivano-frankivsk.ua\0" -"stavropol.ru\0" -"ne.ug\0" -"koganei.tokyo.jp\0" -"net.cu\0hl.no\0" -"ne.tz\0goldpoint\0" -"net.cw\0" -"haga.tochigi.jp\0" -"services.aero\0net.dm\0whoswho\0" -"sodegaura.chiba.jp\0toyoura.hokkaido.jp\0jcb\0" -"net.do\0ne.us\0courses\0" -"best\0" -"baseball.museum\0paleo.museum\0" -"net.ec\0k12.ne.us\0isa-geek.com\0" -"gemological.museum\0" -"i.bg\0net.eg\0" -"toga.toyama.jp\0williamhill\0" -"net.dz\0matsue.shimane.jp\0" -"mytis.ru\0auto\0" -"toho.fukuoka.jp\0" -"saintlouis.museum\0is-a-chef.com\0" -"chikujo.fukuoka.jp\0okagaki.fukuoka.jp\0wegrow.pl\0" -"ogliastra.it\0hs.kr\0ist\0" -"atm.pl\0" -"ballangen.no\0date\0" -"bs.it\0" -"gotdns.com\0" -"pharmacy.museum\0blogsite.org\0" -"natuurwetenschappen.museum\0" -"tysfjord.no\0vagan.no\0" -"gu.us\0" -"vlaanderen\0" -"net.ge\0k12.gu.us\0" -"joso.ibaraki.jp\0shimotsuma.ibaraki.jp\0kawagoe.saitama.jp\0" -"net.gg\0iraq.museum\0holtalen.no\0za.com\0from-or.com\0" -"isehara.kanagawa.jp\0itoman.okinawa.jp\0zgorzelec.pl\0" -"slask.pl\0" -"est-a-la-maison.com\0" -"design\0" -"s3-website-ap-northeast-1.amazonaws.com\0" -"net.gn\0benevento.it\0" -"\xe7\xbb\x84\xe7\xb9\x94.hk\0botanical.museum\0" -"net.gp\0hanawa.fukushima.jp\0" -"arts.ve\0" -"net.gr\0" -"works.aero\0" -"net.gt\0" -"net.gy\0" -"seihi.nagasaki.jp\0" -"net.hk\0" -"koza.wakayama.jp\0hotel.tz\0" -"cq.cn\0net.hn\0va.it\0masuda.shimane.jp\0gen.nz\0" -"britishcolumbia.museum\0orkdal.no\0iwc\0" -"dynalias.org\0" -"net.ht\0net.id\0" -"ono.hyogo.jp\0" -"\xe5\x8f\xb0\xe6\xb9\xbe\0" -"k12.nv.us\0" -"net.im\0newmexico.museum\0chelyabinsk.ru\0" -"net.in\0" -"p.bg\0" -"yasuda.kochi.jp\0" -"net.iq\0cc.na\0" -"net.ir\0hofu.yamaguchi.jp\0" -"net.is\0r\xc3\xb8ros.no\0dyn-o-saur.com\0" -"net.je\0" -"video.hu\0graphics\0" +"sakae.chiba.jp\0" +"equipment.aero\0bjerkreim.no\0" +"gyeonggi.kr\0" +"jeep\0" +"chieti.it\0" +"landrover\0" +"genoa.it\0ugim.gov.pl\0" +"rishirifuji.hokkaido.jp\0tomiya.miyagi.jp\0foodnetwork\0" +"bananarepublic\0" +"kr\xc3\xb8""dsherad.no\0" +"swiftcover\0" +"wtc\0unusualperson.com\0" +"unazuki.toyama.jp\0" +"wtf\0forgot.his.name\0" +"dyndns.org\0ma.leg.br\0" +"cci.fr\0\xd8\xa7\xd9\x84\xd8\xa7\xd8\xb1\xd8\xaf\xd9\x86\0" +"hiroo.hokkaido.jp\0" +"showa.gunma.jp\0yawata.kyoto.jp\0" +"help\0" +"name.vn\0" +"cagliari.it\0game-host.org\0" +"\xe5\x9f\xbc\xe7\x8e\x89.jp\0trust\0" +"dagestan.ru\0pokrovsk.su\0" +"cmw.ru\0" +"tokamachi.niigata.jp\0" +"hirono.fukushima.jp\0" +"forlicesena.it\0tsushima.nagasaki.jp\0" +"sci.eg\0\xe7\xae\x87\xe4\xba\xba.hk\0" +"kawaba.gunma.jp\0ookuwa.nagano.jp\0" +"masuda.shimane.jp\0xbox\0" +"servep2p.com\0" +"portal.museum\0" +"blog.br\0dagestan.su\0" +"fukushima.jp\0newholland\0" +"merseine.nu\0ditchyourip.com\0" +"iraq.museum\0bronnoy.no\0" +"ogasawara.tokyo.jp\0" +"furukawa.miyagi.jp\0takayama.nagano.jp\0" +"name.tj\0" +"mb.ca\0koto.tokyo.jp\0" +"loyalist.museum\0gdansk.pl\0" +"chosei.chiba.jp\0nagawa.nagano.jp\0" +"cheltenham.museum\0" +"casadelamoneda.museum\0name.tr\0" +"d\xc3\xb8nna.no\0name.tt\0futuremailing.at\0" +"al.no\0" +"trentinoa-adige.it\0herad.no\0" +"kizu.kyoto.jp\0\xc3\xa5krehamn.no\0" +"katagami.akita.jp\0\xc3\xb8stre-toten.no\0" +"johana.toyama.jp\0" +"kawasaki.miyagi.jp\0" +"cc.in.us\0dnsdojo.com\0" +"cc.de.us\0\xe6\x89\x8b\xe8\xa1\xa8\0" +"toki.gifu.jp\0" +"georgia.museum\0gs.tr.no\0" +"ri.it\0" +"an.it\0house.museum\0" +"is-a-musician.com\0servehttp.com\0" +"oto.fukuoka.jp\0" +"\xe5\xbe\xae\xe5\x8d\x9a\0" +"mtpc\0" +"nordkapp.no\0boxfuse.io\0" +"shell.museum\0" +"alipay\0mt.eu.org\0" +"\xe6\x9d\xb1\xe4\xba\xac.jp\0softbank\0" +"yashio.saitama.jp\0" +"mutsuzawa.chiba.jp\0nowtv\0" +"ina.ibaraki.jp\0hembygdsforbund.museum\0" +"xin\0" +"loppa.no\0" +"judygarland.museum\0here\0scjohnson\0" +"firm.ht\0" +"suita.osaka.jp\0" +"assn.lk\0" +"saikai.nagasaki.jp\0" +"mo-i-rana.no\0spiegel\0sites.static.land\0" +"skydiving.aero\0homegoods\0" +"hino.tokyo.jp\0phoenix.museum\0kvalsund.no\0" +"firm.in\0" +"k12.ia.us\0" +"heguri.nara.jp\0name.qa\0guru\0lego\0" +"flor\xc3\xb8.no\0name.pr\0" +"\xe9\x95\xb7\xe9\x87\x8e.jp\0" +"palermo.it\0" +"control.aero\0verona.it\0" +"traniandriabarletta.it\0takamori.kumamoto.jp\0" +"skedsmo.no\0" +"kyotamba.kyoto.jp\0" +"itami.hyogo.jp\0" +"clubmed\0star\0" +"ginowan.okinawa.jp\0name.na\0" +"griw.gov.pl\0" +"name.mv\0mormon\0" +"name.ng\0" +"fvg.it\0name.my\0tomsk.ru\0" +"altoadige.it\0" +"school.museum\0gs.jan-mayen.no\0" +"md.ci\0firm.co\0" +"and\xc3\xb8y.no\0mari-el.ru\0lib.az.us\0" +"wanouchi.gifu.jp\0higashiyamato.tokyo.jp\0" +"textile.museum\0" +"kitakami.iwate.jp\0mansions.museum\0randaberg.no\0chrysler\0" +"udm.ru\0cc.ny.us\0is-a-guru.com\0" +"eisenbahn.museum\0" +"eun.eg\0her\xc3\xb8y.m\xc3\xb8re-og-romsdal.no\0praxi\0" +"firm.dk\0" +"domains\0" +"parachuting.aero\0" +"mb.it\0" +"ap.it\0" +"travel\0" +"muko.kyoto.jp\0" +"tsukiyono.gunma.jp\0freiburg.museum\0" +"higashiyama.kyoto.jp\0" +"\xe6\x84\x9b\xe7\x9f\xa5.jp\0al.us\0" +"kamagaya.chiba.jp\0" +"ibaraki.ibaraki.jp\0chikuhoku.nagano.jp\0mima.tokushima.jp\0" +"noheji.aomori.jp\0" +"edu.ac\0" +"redirectme.net\0" +"tahara.aichi.jp\0" +"edu.af\0" +"taxi.br\0" +"name.mk\0" +"med.br\0" +"edu.al\0nishitosa.kochi.jp\0stpetersburg.museum\0" +"salon\0" +"edu.ba\0" +"edu.ar\0edu.bb\0gyeongnam.kr\0" +"*.0emm.com\0" +"shimoichi.nara.jp\0" +"civilaviation.aero\0edu.au\0la-spezia.it\0" +"seiyo.ehime.jp\0" +"edu.bh\0is-very-bad.org\0" +"edu.bi\0" +"edu.az\0" +"k12.ct.us\0" +"b.ssl.fastly.net\0" +"edu.bm\0" +"name.jo\0" +"edu.bo\0" +"dyndns-wiki.com\0" +"edu.br\0\xeb\x8b\xb7\xec\xbb\xb4\0" +"edu.bs\0" +"flog.br\0edu.bt\0onjuku.chiba.jp\0" +"otoyo.kochi.jp\0" +"benevento.it\0" +"edu.ci\0" +"in-addr.arpa\0edu.bz\0" +"art.br\0history.museum\0brother\0" +"med.ec\0meteorapp.com\0" +"agr.br\0" +"edu.cn\0med.ee\0naka.hiroshima.jp\0kamimine.saga.jp\0" +"edu.co\0" +"rishiri.hokkaido.jp\0" +"edu.cu\0shinjo.nara.jp\0nesset.no\0" +"edu.cw\0click\0" +"\xe9\xa4\x90\xe5\x8e\x85\0" +"lib.ga.us\0" +"\xd9\x83\xd9\x88\xd9\x85\0is-a-bookkeeper.com\0" +"samara.ru\0" +"ainan.ehime.jp\0" +"edu.dm\0" +"edu.do\0" +"cc.ok.us\0" +"fujisawa.iwate.jp\0" +"edu.ec\0" +"vlog.br\0" +"edu.ee\0hamatonbetsu.hokkaido.jp\0" +"datsun\0my.eu.org\0" +"edu.eg\0football\0" +"art.do\0rm.it\0" +"lt.it\0" +"edu.dz\0" +"ar.it\0juedisches.museum\0" +"e4.cz\0" +"a.prod.fastly.net\0" +"ri.us\0" +"norddal.no\0" +"art.dz\0edu.es\0" +"edu.et\0" +"geisei.kochi.jp\0" +"kasaoka.okayama.jp\0" +"bergen.no\0" +"kujukuri.chiba.jp\0ochi.kochi.jp\0ladbrokes\0" +"foundation\0" +"ven.it\0style\0" +"edu.ge\0okayama.jp\0takahama.aichi.jp\0shimofusa.chiba.jp\0" +"family\0godaddy\0read\0" +"edu.gh\0imakane.hokkaido.jp\0" +"edu.gi\0shioya.tochigi.jp\0" +"\xe1\x83\x92\xe1\x83\x94\0" +"edu.gl\0skjak.no\0" +"med.ht\0gifu.jp\0" +"edu.gn\0" +"culturalcenter.museum\0" +"edu.gp\0" +"is-a-llama.com\0" +"edu.gr\0skanland.no\0" +"edu.gt\0inagi.tokyo.jp\0" +"mobara.chiba.jp\0creditunion\0" +"edu.gy\0community\0" +"osaka.jp\0historisch.museum\0" +"edu.hk\0b\xc3\xa1l\xc3\xa1t.no\0" +"press.aero\0pri.ee\0edu.hn\0" +"sa.au\0ulvik.no\0" +"barreau.bj\0edu.ht\0asaka.saitama.jp\0birkenes.no\0evje-og-hornnes.no\0pomorze.pl\0firm.ve\0" +"siena.it\0nysa.pl\0est-a-la-maison.com\0paris.eu.org\0" +"brussels\0" "withgoogle.com\0" -"operaunite.com\0" -"bz.it\0yamazoe.nara.jp\0" -"vgs.no\0" -"net.jo\0" -"pa.it\0" -"telekommunikation.museum\0cc.mt.us\0cc.nd.us\0" -"brasil.museum\0" -"net.kg\0ullensvang.no\0sebastopol.ua\0" -"toyooka.hyogo.jp\0" -"net.ki\0supply\0" -"higashiomi.shiga.jp\0" -"tottori.tottori.jp\0" -"jfk.museum\0" -"misaki.okayama.jp\0net.kn\0" -"kr.com\0" -"ookuwa.nagano.jp\0koshigaya.saitama.jp\0" -"net.la\0" -"furubira.hokkaido.jp\0net.lb\0" -"net.lc\0historicalsociety.museum\0" -"cesenaforli.it\0" -"kagami.kochi.jp\0" -"gobo.wakayama.jp\0" -"net.ky\0loppa.no\0" -"net.kz\0" -"net.lk\0gs.tr.no\0arts.ro\0" -"castres.museum\0r\xc3\xb8""d\xc3\xb8y.no\0" -"net.ma\0" -"net.lr\0" -"is-a-landscaper.com\0" -"net.me\0" -"imizu.toyama.jp\0net.lv\0" -"birkenes.no\0" -"net.ly\0va.no\0" -"net.mk\0" -"hikimi.shimane.jp\0net.ml\0" -"uri.arpa\0ltd.gi\0net.mo\0depot.museum\0smolensk.ru\0jlc\0" -"showa.gunma.jp\0kawanishi.hyogo.jp\0" -"klepp.no\0" -"net.ms\0honefoss.no\0" -"net.mt\0" -"net.mu\0" -"yazu.tottori.jp\0net.mv\0net.nf\0gen.tr\0" -"w.bg\0net.mw\0net.ng\0" -"net.mx\0" -"net.my\0" -"tos.it\0toya.hokkaido.jp\0" -"sakura\0" -"assedic.fr\0aid.pl\0" -"ltd.hk\0" -"isernia.it\0net.nr\0" -"botany.museum\0" -"aramco\0" -"net.nz\0" -"ostrowwlkp.pl\0" -"hotel.lk\0net.om\0voting\0" -"\xe4\xbc\x81\xe4\xb8\x9a\0" -"virginia.museum\0googlecode.com\0" -"stj\xc3\xb8rdalshalsen.no\0net.pa\0adygeya.ru\0" -"arai.shizuoka.jp\0arts.nf\0" -"americanart.museum\0habmer.no\0net.pe\0" -"lib.pr.us\0" -"net.ph\0" -"net.pk\0" -"net.pl\0" -"morioka.iwate.jp\0net.pn\0" -"net.qa\0" -"kanuma.tochigi.jp\0net.pr\0" -"gjerdrum.no\0net.ps\0" -"inawashiro.fukushima.jp\0yamatotakada.nara.jp\0net.pt\0" -"shimizu.shizuoka.jp\0wielun.pl\0" -"net.py\0" -"asahi.chiba.jp\0" -"os\xc3\xb8yro.no\0" -"kijo.miyazaki.jp\0\xe7\xbd\x91\xe5\x9d\x80\0" -"b.se\0rhcloud.com\0" -"kamikitayama.nara.jp\0jot\0" -"toyotomi.hokkaido.jp\0" -"from.hr\0" -"portlligat.museum\0joy\0" -"saijo.ehime.jp\0fin.tn\0yandex\0" -"other.nf\0" -"bruxelles.museum\0" -"utsunomiya.tochigi.jp\0gyeongbuk.kr\0" -"tools\0" -"ltd.lk\0net.sa\0" -"ikata.ehime.jp\0net.sb\0" -"catering.aero\0net.sc\0" -"health.nz\0net.sd\0" -"net.ru\0" -"tsuno.kochi.jp\0shimane.shimane.jp\0" -"net.rw\0net.sg\0is-very-evil.org\0" -"i.ph\0net.sh\0" -"kosuge.yamanashi.jp\0" -"\xc3\xb8ystre-slidre.no\0" -"net.sl\0" -"info.ht\0maizuru.kyoto.jp\0shinjo.nara.jp\0yorii.saitama.jp\0" -"info.hu\0m\xc3\xa5s\xc3\xb8y.no\0press.se\0net.so\0" -"po.it\0" -"s\xc3\xb8r-varanger.no\0" -"net.st\0" -"hotel.hu\0oppegard.no\0" -"net.th\0" -"nsw.au\0net.sy\0githubusercontent.com\0" -"kanagawa.jp\0net.tj\0" -"roma.museum\0" -"contemporaryart.museum\0net.tm\0va.us\0" -"info.et\0net.tn\0" -"net.to\0land-4-sale.us\0" -"konan.aichi.jp\0\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86\0" -"net.ua\0k12.vi.us\0" -"alto-adige.it\0net.tr\0" -"net.tt\0" -"dyndns-web.com\0" -"shiwa.iwate.jp\0nagai.yamagata.jp\0stargard.pl\0" -"net.tw\0" -"kasuya.fukuoka.jp\0nagaoka.niigata.jp\0" -"!city.sapporo.jp\0" -"tranoy.no\0net.uk\0" -"pila.pl\0" -"dyndns-home.com\0is-into-cartoons.com\0" -"aizumisato.fukushima.jp\0" -"\xe3\x81\xbf\xe3\x82\x93\xe3\x81\xaa\0" -"clock.museum\0net.vc\0" -"kamioka.akita.jp\0fujimi.nagano.jp\0ando.nara.jp\0tochigi.tochigi.jp\0" -"lorenskog.no\0i.se\0net.ve\0" -"vv.it\0kamishihoro.hokkaido.jp\0shiogama.miyagi.jp\0" -"pilots.museum\0net.uy\0net.vi\0" -"net.uz\0" -"is-a-cubicle-slave.com\0" -"cargo.aero\0salzburg.museum\0" -"kitami.hokkaido.jp\0net.vn\0" -"dyroy.no\0pa.us\0" -"nagiso.nagano.jp\0" +"ikawa.akita.jp\0\xc3\xa5mot.no\0credit\0" +"art.ht\0midori.gunma.jp\0kazo.saitama.jp\0komatsushima.tokushima.jp\0" +"edu.in\0pavia.it\0mihara.kochi.jp\0aridagawa.wakayama.jp\0transport.museum\0" +"sodegaura.chiba.jp\0" +"edu.iq\0edunet.tn\0" +"edu.is\0lib.md.us\0\xd8\xa7\xd9\x85\xd8\xa7\xd8\xb1\xd8\xa7\xd8\xaa\0" +"edu.it\0kawakita.ishikawa.jp\0" +"go.ci\0\xe7\x9f\xb3\xe5\xb7\x9d.jp\0accountants\0" +"act.edu.au\0" +"xj.cn\0" +"kurgan.ru\0" +"s3-us-gov-west-1.amazonaws.com\0" +"yashiro.hyogo.jp\0" +"sa.cr\0alabama.museum\0pasadena.museum\0ro.im\0" +"gs.svalbard.no\0" +"go.cr\0" +"edu.jo\0ap-northeast-2.compute.amazonaws.com\0" +"sakai.fukui.jp\0" +"ro.it\0miyama.fukuoka.jp\0" +"extraspace\0" +"memorial.museum\0" +"at.it\0nl.eu.org\0" +"edu.kg\0xxx\0\xd8\xa8\xd9\x8a\xd8\xaa\xd9\x83\0us-west-2.compute.amazonaws.com\0" +"toya.hokkaido.jp\0edu.ki\0suldal.no\0kurgan.su\0" +"enebakk.no\0groks-the.info\0" +"edu.km\0tiffany\0\xe4\xbd\x9b\xe5\xb1\xb1\0" +"edu.kn\0anthropology.museum\0baghdad.museum\0" +"edu.kp\0" +"edu.la\0" +"edu.lb\0med.ly\0\xd8\xaa\xd9\x88\xd9\x86\xd8\xb3\0" +"edu.lc\0kafjord.no\0" +"ueno.gunma.jp\0" +"edu.ky\0vinnytsia.ua\0xyz\0" +"edu.kz\0" +"edu.lk\0" +"misato.saitama.jp\0" +"mus.br\0monza.it\0torahime.shiga.jp\0ichikai.tochigi.jp\0" +"katori.chiba.jp\0" +"edu.lr\0" +"shikama.miyagi.jp\0vestnes.no\0banamex\0" +"edu.me\0" +"edu.lv\0" +"edu.mg\0" +"edu.ly\0" +"orientexpress\0team\0" +"edu.mk\0inder\xc3\xb8y.no\0ru.com\0se.com\0" +"edu.ml\0" +"taiki.hokkaido.jp\0" +"edu.mn\0nyc.museum\0firm.ro\0from-fl.com\0" +"varese.it\0edu.mo\0" +"isumi.chiba.jp\0" +"a.ssl.fastly.net\0" +"edu.ms\0" +"imari.saga.jp\0edu.mt\0" +"edu.mv\0med.om\0" +"edu.mw\0edu.ng\0" +"edu.mx\0amot.no\0" +"lom.it\0edu.my\0edu.ni\0" +"hiji.oita.jp\0edu.mz\0med.pa\0" +"goto.nagasaki.jp\0freebox-os.fr\0" +"yamazoe.nara.jp\0" +"\xe5\xa4\xa9\xe4\xb8\xbb\xe6\x95\x99\0" +"nesoddtangen.no\0edu.nr\0\xe4\xb8\xad\xe4\xbf\xa1\0" +"amakusa.kumamoto.jp\0" +"ryazan.ru\0tech\0med.pl\0" +"arai.shizuoka.jp\0\xe0\xa4\xa8\xe0\xa5\x87\xe0\xa4\x9f\0" +"isa.us\0" +"edu.om\0" +"donostia.museum\0" +"go.id\0" +"edu.pa\0edeka\0" +"construction\0" +"sc.cn\0" +"ha.cn\0shibecha.hokkaido.jp\0edu.pe\0" +"cody.museum\0palace.museum\0edu.pf\0lt.ua\0cc.tx.us\0\xd9\x85\xd8\xb5\xd8\xb1\0reit\0" +"topology.museum\0edu.ph\0" +"serveftp.com\0" +"edu.pk\0" +"edu.pl\0" +"sa.it\0academy.museum\0edu.pn\0rnd.ru\0" +"go.it\0nakatsugawa.gifu.jp\0" +"av.it\0edu.qa\0" +"vet.br\0edu.pr\0" +"edu.ps\0" +"eigersund.no\0edu.pt\0" +"firm.nf\0art.pl\0" +"wv.us\0ng.eu.org\0" +"shacknet.nu\0" +"md.us\0" +"edu.py\0" +"med.sa\0ar.us\0" +"pisa.it\0tr.eu.org\0" +"go.jp\0" +"med.sd\0" +"*.ext.githubcloud.com\0" +"bihoro.hokkaido.jp\0" +"potager.org\0" +"tattoo\0you\0" +"reggio-emilia.it\0" +"mg.leg.br\0" +"kawagoe.saitama.jp\0us-2.evennode.com\0" +"samsclub\0is-saved.org\0" +"shinanomachi.nagano.jp\0" +"club.tw\0" +"go.kr\0" +"artcenter.museum\0komforb.se\0news\0" +"whaling.museum\0edu.sa\0" +"edu.sb\0" +"edu.rs\0edu.sc\0" +"lom.no\0edu.sd\0" +"edu.ru\0" +"info.ht\0sannan.hyogo.jp\0edu.rw\0edu.sg\0" +"info.hu\0" +"edu.sl\0" +"edu.sn\0" +"ambulance.museum\0" +"kanra.gunma.jp\0academy\0next\0" +"kokubunji.tokyo.jp\0" +"nfshost.com\0" +"kushiro.hokkaido.jp\0edu.st\0" +"edu.sv\0toshiba\0" +"info.et\0bd.se\0art.sn\0" +"from-pa.com\0" +"voronezh.ru\0edu.sy\0" +"edu.tj\0" +"kaneyama.yamagata.jp\0meraker.no\0game.tw\0" +"swiss\0" +"gs.oslo.no\0edu.tm\0" +"aoki.nagano.jp\0ikoma.nara.jp\0" +"edu.to\0" +"joyo.kyoto.jp\0edu.ua\0" +"newyork.museum\0edu.tr\0" +"edu.tt\0is-a-hard-worker.com\0" +"samegawa.fukushima.jp\0" +"narvik.no\0rent\0" +"soc.lk\0edu.tw\0" +"lib.ar.us\0webcam\0" +"sola.no\0" +"flekkefjord.no\0" +"gs.cn\0" +"bj.cn\0lv.ua\0" +"ketrzyn.pl\0cc.pa.us\0" +"hitoyoshi.kumamoto.jp\0edu.vc\0" +"edu.ve\0" +"ilawa.pl\0" +"tabayama.yamanashi.jp\0us-1.evennode.com\0" +"edu.uy\0" +"kumejima.okinawa.jp\0from-co.net\0" +"bilbao.museum\0alfaromeo\0" +"edu.vn\0" +"kashima.ibaraki.jp\0agrinet.tn\0expert\0" +"settsu.osaka.jp\0" +"bus.museum\0h\xc3\xb8ylandet.no\0" +"video\0" +"pro.az\0" +"kawanehon.shizuoka.jp\0edu.vu\0" +"info.ec\0firenze.it\0murakami.niigata.jp\0" +"nord-aurdal.no\0" +"yachimata.chiba.jp\0" +"pro.br\0" +"yun\0elb.amazonaws.com\0" +"chrome\0istmein.de\0" +"itano.tokushima.jp\0mycd.eu\0" +"go.pw\0edu.ws\0" +"info.bb\0yamada.iwate.jp\0tawaramoto.nara.jp\0lgbt\0" +"partners\0" +"sc.kr\0balsfjord.no\0info.at\0" +"info.au\0" +"fairwinds\0" +"beskidy.pl\0creditcard\0" +"shingo.aomori.jp\0ouda.nara.jp\0" +"info.az\0" +"servemp3.com\0" +"axis.museum\0lplfinancial\0" +"sor-aurdal.no\0" +"aosta-valley.it\0fujiidera.osaka.jp\0" +"pro.cy\0pescara.it\0hiranai.aomori.jp\0" +"sagamihara.kanagawa.jp\0" +"gjemnes.no\0" +"asakuchi.okayama.jp\0heritage.museum\0weber\0" +"pro.ec\0venezia.it\0oguni.yamagata.jp\0" +"kobayashi.miyazaki.jp\0" +"kagawa.jp\0nango.fukushima.jp\0" +"edu.za\0marriott\0" +"info.co\0bill.museum\0fet.no\0\xe5\x9c\xa8\xe7\xba\xbf\0" +"culture.museum\0nissedal.no\0" +"olawa.pl\0rest\0" +"bajddar.no\0" +"journal.aero\0" +"evenassi.no\0" +"katano.osaka.jp\0" +"penza.ru\0edu.zm\0" +"kosaka.akita.jp\0" +"s3-ap-southeast-2.amazonaws.com\0" +"tome.miyagi.jp\0higashiyodogawa.osaka.jp\0on-the-web.tv\0" +"go.th\0" +"omachi.nagano.jp\0katowice.pl\0lib.hi.us\0isa-hockeynut.com\0" +"ha.no\0go.tj\0" +"verm\xc3\xb6gensberatung\0" +"he.cn\0savannahga.museum\0" +"kashima.kumamoto.jp\0penza.su\0" +"is-a-chef.org\0" +"av.tr\0solar\0zip\0" +"kainan.wakayama.jp\0" +"yamada.fukuoka.jp\0go.ug\0\xe5\xa8\xb1\xe4\xb9\x90\0" +"oseto.nagasaki.jp\0coastaldefence.museum\0" +"go.tz\0" +"kadogawa.miyazaki.jp\0lease\0" +"safety\0" +"mielec.pl\0" +"katashina.gunma.jp\0" "sortland.no\0" -"\xe5\xb1\xb1\xe6\xa2\xa8.jp\0" -"volgograd.ru\0net.vu\0" -"tsunan.niigata.jp\0" -"takata.fukuoka.jp\0" -"info.ec\0" -"istanbul\0" -"rel.ht\0" -"dyndns-server.com\0" -"\xe9\x9d\x92\xe6\xa3\xae.jp\0" -"net.ws\0bauhaus\0" -"forlicesena.it\0kfh\0" -"pv.it\0norton\0" -"cc.ny.us\0" -"info.bb\0hashikami.aomori.jp\0" -"seirou.niigata.jp\0info.at\0" -"info.au\0lib.ee\0" -"selfip.biz\0" -"info.az\0tsukigata.hokkaido.jp\0" -"trani-barletta-andria.it\0loan\0" -"press.ma\0" -"legnica.pl\0" -"lavangen.no\0pors\xc3\xa1\xc5\x8bgu.no\0sk\xc3\xa5nland.no\0" -"orsta.no\0" -"hakusan.ishikawa.jp\0" -"flight.aero\0hemnes.no\0moss.no\0sykkylven.no\0" -"hirara.okinawa.jp\0" -"ukiha.fukuoka.jp\0kyotango.kyoto.jp\0health.vn\0" -"info.co\0bo.nordland.no\0tysv\xc3\xa6r.no\0fhsk.se\0" -"\xe9\xb9\xbf\xe5\x85\x90\xe5\xb3\xb6.jp\0" -"air-traffic-control.aero\0design.aero\0meland.no\0chtr.k12.ma.us\0" -"matsumae.hokkaido.jp\0sakuragawa.ibaraki.jp\0nagano.nagano.jp\0motegi.tochigi.jp\0" -"insurance.aero\0automotive.museum\0ullensaker.no\0p.se\0" -"alessandria.it\0" -"journalist.aero\0cody.museum\0" -"bato.tochigi.jp\0misasa.tottori.jp\0" -"polkowice.pl\0" -"correios-e-telecomunica\xc3\xa7\xc3\xb5""es.museum\0" -"trentino-sued-tirol.it\0" -"asahi.toyama.jp\0" -"sogne.no\0orenburg.ru\0kim\0" -"isa-geek.net\0" -"tatarstan.ru\0" -"kashiwa.chiba.jp\0kamimine.saga.jp\0" -"contractors\0" -"tagajo.miyagi.jp\0fujikawa.shizuoka.jp\0" -"kudamatsu.yamaguchi.jp\0" -"ltd.uk\0" -"nantan.kyoto.jp\0" -"r\xc3\xb8yrvik.no\0" -"is-a-chef.net\0" -"planetarium.museum\0langev\xc3\xa5g.no\0" -"abbott\0" -"club.aero\0" +"qsl.br\0" +"\xe5\xa4\xa7\xe9\x98\xaa.jp\0indiana.museum\0" +"seika.kyoto.jp\0workshop.museum\0gallup\0" +"linz.museum\0financial\0" +"pro.ht\0" +"surf\0" +"konin.pl\0" +"joetsu.niigata.jp\0" +"l\xc3\xa6rdal.no\0" +"shingu.fukuoka.jp\0miyama.mie.jp\0" +"yoita.niigata.jp\0" "ind.br\0" -"from-nv.com\0" -"tokushima.jp\0omaezaki.shizuoka.jp\0" -"hongo.hiroshima.jp\0" -"inderoy.no\0" -"res.in\0" -"\xe5\xb1\xb1\xe5\xbd\xa2.jp\0echizen.fukui.jp\0" -"dr\xc3\xb8""bak.no\0s\xc3\xb8r-fron.no\0" -"teo.br\0yokoze.saitama.jp\0" -"sch.ae\0franziskaner.museum\0undersea.museum\0belau.pw\0" -"kouyama.kagoshima.jp\0" -"zarow.pl\0" -"aviation.museum\0" -"soeda.fukuoka.jp\0" -"skydiving.aero\0teaches-yoga.com\0" -"shinto.gunma.jp\0kure.hiroshima.jp\0" -"yakumo.hokkaido.jp\0minobu.yamanashi.jp\0" -"dclk\0" -"ibaraki.jp\0" -"naklo.pl\0" -"yachimata.chiba.jp\0" -"vanylven.no\0" -"shimodate.ibaraki.jp\0" -"union.aero\0toshiba\0from-ak.com\0" -"kuju.oita.jp\0" -"w.se\0" -"rel.pl\0" -"friuliv-giulia.it\0minamiashigara.kanagawa.jp\0" -"togura.nagano.jp\0" -"!www.ck\0b\xc3\xa1id\xc3\xa1r.no\0" -"miyoshi.aichi.jp\0" -"izumo.shimane.jp\0" -"us-west-1.compute.amazonaws.com\0" -"tsuruoka.yamagata.jp\0" -"finland.museum\0" -"barreau.bj\0tokashiki.okinawa.jp\0" -"television.museum\0\xe0\xb8\x84\xe0\xb8\xad\xe0\xb8\xa1\0" -"tuscany.it\0" -"sport.hu\0fjell.no\0" -"philadelphia.museum\0" -"hasami.nagasaki.jp\0" -"software.aero\0" -"yufu.oita.jp\0" -"kongsvinger.no\0boots\0" -"chikuma.nagano.jp\0" -"london.museum\0" -"s3-ap-northeast-1.amazonaws.com\0" -"ind.gt\0suzu.ishikawa.jp\0" -"arteducation.museum\0eidsberg.no\0vevelstad.no\0" -"\xe5\xb2\x90\xe9\x98\x9c.jp\0fujisato.akita.jp\0hanyu.saitama.jp\0" -"bod\xc3\xb8.no\0" -"is-a-therapist.com\0" -"yoshikawa.saitama.jp\0" -"r\xc3\xb8st.no\0" -"rishiri.hokkaido.jp\0grajewo.pl\0" -"3.bg\0" -"kosai.shizuoka.jp\0kpn\0" -"chuo.chiba.jp\0susono.shizuoka.jp\0" +"sicily.it\0miyazaki.jp\0kawazu.shizuoka.jp\0\xe5\x95\x86\xe6\xa5\xad.tw\0" +"ic.gov.pl\0za.net\0" +"tondabayashi.osaka.jp\0astronomy.museum\0hgtv\0" +"agrar.hu\0suginami.tokyo.jp\0rentals\0" +"kariya.aichi.jp\0usgarden.museum\0\xd8\xb4\xd8\xa8\xd9\x83\xd8\xa9\0" +"asn.au\0" +"fujinomiya.shizuoka.jp\0" +"isa.kagoshima.jp\0muenster.museum\0" +"mp.br\0mashike.hokkaido.jp\0" +"!city.kawasaki.jp\0" +"townnews-staging.com\0" +"novosibirsk.ru\0" +"kunisaki.oita.jp\0from-sd.com\0" +"ris\xc3\xb8r.no\0sanok.pl\0nikolaev.ua\0is-a-chef.com\0" +"sandnessj\xc3\xb8""en.no\0" +"rikuzentakata.iwate.jp\0" +"\xe7\xb6\xb2\xe7\xbb\x9c.hk\0" +"shinyoshitomi.fukuoka.jp\0\xeb\x8b\xb7\xeb\x84\xb7\0" +"sc.ug\0" +"zhytomyr.ua\0" +"abo.pa\0teva\0cloudns.asia\0" +"sc.tz\0" +"mn.it\0urausu.hokkaido.jp\0ee.eu.org\0" +"nanae.hokkaido.jp\0" +"bl.it\0pilots.museum\0zakopane.pl\0" +"minato.tokyo.jp\0database.museum\0" +"ohkura.yamagata.jp\0jessheim.no\0" +"sc.us\0" +"pro.na\0" +"pro.mv\0" +"psc.br\0tamayu.shimane.jp\0j\xc3\xb8lster.no\0" +"ivano-frankivsk.ua\0" +"motorcycles\0" +"eu.meteorapp.com\0cable-modem.org\0" +"muika.niigata.jp\0" +"sener\0" +"com.ac\0kami.kochi.jp\0leangaviika.no\0" +"oppeg\xc3\xa5rd.no\0uk.eu.org\0" +"com.af\0otsuka\0" +"com.ag\0nakamichi.yamanashi.jp\0" +"ind.gt\0" +"com.ai\0bike\0" +"com.al\0" +"\xe7\xbb\x84\xe7\xbb\x87.hk\0kiyosu.aichi.jp\0karatsu.saga.jp\0" +"nishio.aichi.jp\0" +"com.ba\0inf.br\0sirdal.no\0pro.om\0" +"com.ar\0com.bb\0info.ve\0" +"diet\0" +"com.au\0k12.or.us\0" +"com.aw\0" +"com.bh\0\xe7\xa6\x8f\xe4\xba\x95.jp\0minokamo.gifu.jp\0tver.ru\0" +"com.bi\0from-ky.com\0freeboxos.fr\0" +"com.az\0" +"info.vn\0" +"mining.museum\0vevelstad.no\0" +"com.bm\0" +"com.bo\0family.museum\0shangrila\0int.eu.org\0" "fla.no\0" -"roma.it\0kudoyama.wakayama.jp\0global.prod.fastly.net\0" -"gamo.shiga.jp\0" -"gildesk\xc3\xa5l.no\0cloudcontrolled.com\0" -"ind.in\0futsu.nagasaki.jp\0" -"furudono.fukushima.jp\0kashiwara.osaka.jp\0" -"minoh.osaka.jp\0" -"akrehamn.no\0" -"nosegawa.nara.jp\0" -"baths.museum\0likes-pie.com\0" -"krd\0lat\0" -"seki.gifu.jp\0togakushi.nagano.jp\0ens.tn\0" -"rana.no\0law\0" -"juedisches.museum\0national.museum\0" -"sande.m\xc3\xb8re-og-romsdal.no\0" -"bozen.it\0" -"furniture.museum\0malvik.no\0" -"hjelmeland.no\0" -"loabat.no\0" -"info.ve\0" -"kamagaya.chiba.jp\0" -"betainabox.com\0" -"fosnes.no\0from-tn.com\0" -"sakae.chiba.jp\0" -"sohu\0" -"mb.ca\0" -"wanouchi.gifu.jp\0hidaka.kochi.jp\0torahime.shiga.jp\0info.vn\0" -"mari-el.ru\0" -"tsukumi.oita.jp\0" -"sch.id\0kota.aichi.jp\0" -"snillfjord.no\0" -"akkeshi.hokkaido.jp\0" -"kanegasaki.iwate.jp\0takaoka.toyama.jp\0" -"ostre-toten.no\0novosibirsk.ru\0selfip.com\0" -"molise.it\0" -"barrel-of-knowledge.info\0" -"sch.ir\0" -"fuoisku.no\0" -"lds\0" -"oguchi.aichi.jp\0" -"omsk.ru\0" -"nogata.fukuoka.jp\0" -"sch.jo\0guide\0" -"sunagawa.hokkaido.jp\0info.tn\0" -"turystyka.pl\0a.ssl.fastly.net\0" -"nishiarita.saga.jp\0info.tr\0" -"mortgage\0" +"com.br\0ind.in\0" +"com.bs\0" +"com.bt\0inf.cu\0lavagis.no\0" +"kawai.iwate.jp\0" +"pro.pr\0" +"klodzko.pl\0" +"\xe5\x85\xac\xe5\x8f\xb8.cn\0saigawa.fukuoka.jp\0kawatana.nagasaki.jp\0on-aptible.com\0" +"com.by\0com.ci\0s3-fips-us-gov-west-1.amazonaws.com\0" +"com.bz\0" +"tanabe.kyoto.jp\0" +"sk.ca\0winb.gov.pl\0" +"nb.ca\0com.cm\0" +"com.cn\0fiat\0" +"com.co\0" +"higashiizu.shizuoka.jp\0" +"larsson.museum\0" +"lib.sc.us\0" +"br\xc3\xb8nn\xc3\xb8ysund.no\0lib.nj.us\0" +"com.cu\0\xe5\x85\xac\xe5\x8f\xb8.hk\0hapmir.no\0lib.gu.us\0com.de\0" +"is-a-rockstar.com\0" +"com.cw\0aca.pro\0" +"com.cy\0" +"carraramassa.it\0" +"hi.cn\0oiso.kanagawa.jp\0info.tn\0bing\0" +"com.dm\0" +"com.do\0info.tr\0" +"rad\xc3\xb8y.no\0" "info.tt\0" -"\xe5\x8f\xb0\xe7\x81\xa3\0" -"muroran.hokkaido.jp\0" -"tendo.yamagata.jp\0" -"nanbu.tottori.jp\0info.tz\0" -"go.dyndns.org\0" -"is-very-nice.org\0" -"hammarfeasta.no\0" -"williamsburg.museum\0dyndns-wiki.com\0" -"tagawa.fukuoka.jp\0" -"kurotaki.nara.jp\0xerox\0" -"lib.ma.us\0" -"sch.lk\0" -"arkhangelsk.ru\0" -"trentino-s-tirol.it\0" -"\xc3\xa1lt\xc3\xa1.no\0info.ro\0" -"ab.ca\0askoy.no\0" -"malopolska.pl\0" -"aogaki.hyogo.jp\0info.sd\0" -"km.ua\0" -"sch.ly\0" -"onjuku.chiba.jp\0" -"muncie.museum\0" -"kawaminami.miyazaki.jp\0" -"cn-north-1.compute.amazonaws.cn\0" -"vads\xc3\xb8.no\0" -"ushuaia.museum\0vista\0" -"kaminokawa.tochigi.jp\0" -"olbiatempio.it\0shiga.jp\0" -"sener\0" -"sch.ng\0kddi\0endoftheinternet.org\0" -"ichikai.tochigi.jp\0" -"lund.no\0lib.ga.us\0style\0" -"info.pk\0tsaritsyn.ru\0" -"info.pl\0" -"jevnaker.no\0" -"fst.br\0ainan.ehime.jp\0" -"california.museum\0sony\0" -"oketo.hokkaido.jp\0" -"is-a-bruinsfan.org\0" +"com.ec\0" +"si.it\0" +"com.ee\0" +"verbania.it\0" +"com.eg\0bn.it\0info.tz\0" +"com.dz\0kamigori.hyogo.jp\0" +"yamatsuri.fukushima.jp\0" +"pharmaciens.km\0portland.museum\0" +"michigan.museum\0" +"az.us\0" +"is-a-linux-user.org\0" +"com.es\0couchpotatofries.org\0" +"com.et\0" +"voyage\0" +"finn\xc3\xb8y.no\0" +"kumenan.okayama.jp\0fido\0" +"aomori.jp\0" +"info.ro\0" +"minamiashigara.kanagawa.jp\0" +"info.sd\0" +"com.fr\0kasai.hyogo.jp\0ski.museum\0" +"leg.br\0com.ge\0" +"com.gh\0pro.tt\0" +"com.gi\0" +"targi.pl\0" +"elvendrell.museum\0" +"com.gl\0" +"com.gn\0tingvoll.no\0nationwide\0sakura\0\xe5\x95\x86\xe5\xba\x97\0" +"com.gp\0matsusaka.mie.jp\0asn.lv\0stcgroup\0" +"com.gr\0" +"com.gt\0" +"tonsberg.no\0" +"namie.fukushima.jp\0info.pk\0" +"com.gy\0info.pl\0bounty-full.com\0" +"com.hk\0southcarolina.museum\0" +"media.aero\0bjarkoy.no\0folldal.no\0forex\0" +"vadso.no\0" +"com.hn\0daejeon.kr\0" "info.pr\0" -"nt.edu.au\0" -"carrier.museum\0newport.museum\0" -"promo\0" -"mb.it\0mima.tokushima.jp\0" -"info.na\0jan-mayen.no\0" -"narita.chiba.jp\0" -"info.mv\0info.nf\0" -"fuso.aichi.jp\0gmina.pl\0" -"manx.museum\0\xd9\x85\xd9\x84\xd9\x8a\xd8\xb3\xd9\x8a\xd8\xa7\0" -"show.aero\0moskenes.no\0sch.qa\0lib.nh.us\0" -"fnd.br\0cieszyn.pl\0" -"properties\0ru.com\0se.com\0" -"info.nr\0" -"madrid.museum\0love\0" -"hakone.kanagawa.jp\0kita.osaka.jp\0" -"from-de.com\0" -"siena.it\0tateshina.nagano.jp\0" -"cricket\0\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0\0" -"numata.hokkaido.jp\0" -"brussel.museum\0hitra.no\0pyatigorsk.ru\0" -"rifu.miyagi.jp\0ind.tn\0" -"judygarland.museum\0" -"mp.br\0" -"higashitsuno.kochi.jp\0" +"myfritz.net\0" +"okazaki.aichi.jp\0" +"com.hr\0pro.vn\0" +"com.ht\0" +"urbino-pesaro.it\0" +"\xe5\xae\xae\xe5\xb4\x8e.jp\0" +"shijonawate.osaka.jp\0saitama.saitama.jp\0\xe5\x98\x89\xe9\x87\x8c\0" +"magazine.aero\0duckdns.org\0" +"com.im\0choshi.chiba.jp\0mosvik.no\0" +"info.na\0rana.no\0" +"com.io\0mashiki.kumamoto.jp\0lib.nh.us\0azurewebsites.net\0" +"com.iq\0" +"com.is\0info.mv\0info.nf\0career\0" +"schlesisches.museum\0" +"urn.arpa\0uw.gov.pl\0" +"hk.cn\0info.ni\0" +"\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa7\0theguardian\0" +"odawara.kanagawa.jp\0" +"\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa9\0statebank\0" +"jaguar\0weather\0" +"hole.no\0warman\0" +"com.jo\0info.nr\0" +"vodka\0" +"sande.more-og-romsdal.no\0apple\0" +"kvits\xc3\xb8y.no\0" +"higashihiroshima.hiroshima.jp\0sauda.no\0" +"yoshikawa.saitama.jp\0com.kg\0" +"humanities.museum\0ask\xc3\xb8y.no\0" +"com.ki\0mn.us\0" +"gu.us\0" +"plc.co.im\0com.km\0" "info.la\0" -"fr.it\0" -"zone\0" -"si.it\0elblag.pl\0" -"baikal.ru\0" -"toyotsu.fukuoka.jp\0" -"building.museum\0sorfold.no\0" -"is-a-geek.com\0" -"eidsvoll.no\0sch.sa\0" -"institute\0" -"dazaifu.fukuoka.jp\0" -"chukotka.ru\0rivne.ua\0domains\0from-sd.com\0ro.com\0" -"mihara.kochi.jp\0asahi.nagano.jp\0" -"stockholm.museum\0chernigov.ua\0" -"potenza.it\0" -"pagespeedmobilizer.com\0" -"shoo.okayama.jp\0" -"bible.museum\0sherbrooke.museum\0" -"nesset.no\0" -"chloe\0" -"anpachi.gifu.jp\0aibetsu.hokkaido.jp\0wlocl.pl\0" -"mi.it\0" -"elverum.no\0" -"fredrikstad.no\0markets\0" -"iglesias-carbonia.it\0" -"nikaho.akita.jp\0miyashiro.saitama.jp\0" -"asmatart.museum\0" -"tsushima.nagasaki.jp\0" -"hekinan.aichi.jp\0" -"lib.ms.us\0lib.nc.us\0" -"inazawa.aichi.jp\0" -"info.ki\0agdenes.no\0" -"medizinhistorisches.museum\0furniture\0" -"ozora.hokkaido.jp\0wakayama.wakayama.jp\0" -"gyokuto.kumamoto.jp\0" -"fishing\0" -"hyogo.jp\0" -"stj\xc3\xb8rdal.no\0" -"kutno.pl\0" -"ulvik.no\0" -"ofunato.iwate.jp\0restaurant\0" -"americanantiques.museum\0paderborn.museum\0" -"sp.it\0yokaichiba.chiba.jp\0" -"kurgan.ru\0" -"hakata.fukuoka.jp\0man\0" -"entomology.museum\0" -"otoyo.kochi.jp\0" -"lel.br\0" -"zoology.museum\0samnanger.no\0" -"obama.nagasaki.jp\0" -"oshu.iwate.jp\0miasa.nagano.jp\0" -"rnrt.tn\0" -"money.museum\0" -"\xe5\xb1\xb1\xe5\x8f\xa3.jp\0" -"yahiko.niigata.jp\0kadena.okinawa.jp\0" -"\xc3\xb8ygarden.no\0" -"v\xc3\xa5gan.no\0" -"trentino.it\0" -"\xc3\xb8rskog.no\0" -"hoyanger.no\0sb.ua\0" -"vestby.no\0" -"yurihonjo.akita.jp\0" -"fjaler.no\0cc.ks.us\0" -"\xd9\x82\xd8\xb7\xd8\xb1\0" -"ltd\0" -"rockart.museum\0" -"lib.as.us\0" -"hashima.gifu.jp\0" -"agano.niigata.jp\0ath.cx\0" -"gangaviika.no\0" -"hammerfest.no\0" -"saskatchewan.museum\0est-mon-blogueur.com\0" -"hoylandet.no\0stockholm\0" -"tatsuno.nagano.jp\0" -"georgia.museum\0" -"kherson.ua\0" -"shiroishi.miyagi.jp\0tomi.nagano.jp\0" -"computerhistory.museum\0" -"kofu.yamanashi.jp\0" -"meo\0" -"setagaya.tokyo.jp\0prochowice.pl\0" -"farm.museum\0" -"fujikawa.yamanashi.jp\0" -"\xe9\xa3\x9e\xe5\x88\xa9\xe6\xb5\xa6\0dontexist.net\0" -"workshop.museum\0toray\0" -"kosaka.akita.jp\0shijonawate.osaka.jp\0takanezawa.tochigi.jp\0" -"k12.ak.us\0" -"nakamura.kochi.jp\0ochi.kochi.jp\0iizuna.nagano.jp\0" -"midtre-gauldal.no\0" -"k12.md.us\0" -"inuyama.aichi.jp\0" -"kumatori.osaka.jp\0" -"ako.hyogo.jp\0" -"tgory.pl\0" -"ato.br\0higashikawa.hokkaido.jp\0akagi.shimane.jp\0bbs.tr\0" -"newspaper.museum\0oregontrail.museum\0" -"gb.net\0" -"\xe7\xb6\xb2\xe8\xb7\xaf.tw\0" -"ap.it\0" -"zaporizhzhia.ua\0" -"taka.hyogo.jp\0" -"karate.museum\0is-a-geek.org\0" -"from-ks.com\0" -"fage\0misconfused.org\0" -"hn.cn\0" -"palana.ru\0" +"design.museum\0" +"com.kp\0" +"com.la\0" +"ono.hyogo.jp\0com.lb\0oregontrail.museum\0" +"\xe4\xba\xac\xe9\x83\xbd.jp\0com.lc\0" +"takayama.gunma.jp\0cyou\0bnr.la\0" +"ebina.kanagawa.jp\0kawachinagano.osaka.jp\0" +"gotpantheon.com\0" +"takata.fukuoka.jp\0tarama.okinawa.jp\0" +"com.ky\0" +"com.kz\0inf.mk\0" +"com.lk\0" "kisarazu.chiba.jp\0" -"vaapste.no\0" -"namie.fukushima.jp\0ichikawa.hyogo.jp\0" -"cn.com\0" -"stpetersburg.museum\0nord-fron.no\0iamallama.com\0" -"fam.pk\0" -"skjervoy.no\0" -"beskidy.pl\0" -"siellak.no\0" -"mi.th\0" -"mil\0" -"culturalcenter.museum\0tsk.ru\0odessa.ua\0" -"otama.fukushima.jp\0" -"ishikawa.fukushima.jp\0" -"nu.ca\0" -"omiya.saitama.jp\0" -"bike\0" -"hirono.iwate.jp\0digital\0read\0" -"exhibition.museum\0" -"tn.it\0hita.oita.jp\0" -"inder\xc3\xb8y.no\0" -"fail\0" -"otsuka\0" -"k-uralsk.ru\0" -"tamaki.mie.jp\0florist\0" -"mi.us\0place\0" -"yono.saitama.jp\0movistar\0" -"sn\xc3\xa5""ase.no\0k12.ma.us\0" -"ashibetsu.hokkaido.jp\0mizusawa.iwate.jp\0isa.kagoshima.jp\0" -"farsund.no\0" -"haebaru.okinawa.jp\0" -"gs.aa.no\0" -"hyllestad.no\0" -"itako.ibaraki.jp\0" -"pics\0" -"godo.gifu.jp\0" -"fauske.no\0frei.no\0dyndns.info\0" -"bg.it\0" -"matsumoto.nagano.jp\0" -"kids.museum\0gaivuotna.no\0" -"dell\0" -"cc.ma.us\0" -"\xe5\xb2\xa9\xe6\x89\x8b.jp\0yamagata.ibaraki.jp\0" -"austevoll.no\0mma\0" -"br.com\0" -"fuchu.hiroshima.jp\0ostrowiec.pl\0podlasie.pl\0" -"nature.museum\0" -"usdecorativearts.museum\0bing\0" -"matsudo.chiba.jp\0niimi.okayama.jp\0" -"federation.aero\0brussels\0" -"ancona.it\0piaget\0" -"k12.ga.us\0" -"jorpeland.no\0camera\0" -"preservation.museum\0" -"vibo-valentia.it\0" -"tochigi.jp\0" -"salerno.it\0" -"iwade.wakayama.jp\0kiwi.nz\0" -"pvt.ge\0gifts\0globo\0" -"honai.ehime.jp\0" -"childrensgarden.museum\0spreadbetting\0" -"hannan.osaka.jp\0" -"raholt.no\0cc.ga.us\0from-ut.com\0" -"cartier\0maif\0" -"kolobrzeg.pl\0" -"moe\0" -"bungotakada.oita.jp\0" -"moi\0" -"otaru.hokkaido.jp\0\xe8\xb0\xb7\xe6\xad\x8c\0" -"akita.jp\0" -"carboniaiglesias.it\0" -"d.bg\0" -"mov\0" -"gs.ah.no\0marnardal.no\0fans\0" -"tysnes.no\0mordovia.ru\0" -"bearalv\xc3\xa1hki.no\0engineering\0compute-1.amazonaws.com\0" -"is-a-nascarfan.com\0" -"\xd0\xb8\xd0\xba\xd0\xbe\xd0\xbc.museum\0" -"friuli-venezia-giulia.it\0bn.it\0udono.mie.jp\0" -"oslo.no\0" -"nu.it\0mormon\0" -"freiburg.museum\0hamar.no\0" -"kita.tokyo.jp\0" -"minamifurano.hokkaido.jp\0" -"bible\0" -"esp.br\0" -"is-a-democrat.com\0" -"narusawa.yamanashi.jp\0" -"uonuma.niigata.jp\0wien\0" -"on-the-web.tv\0" -"karm\xc3\xb8y.no\0" -"mosjoen.no\0" -"koya.wakayama.jp\0" -"chernovtsy.ua\0holiday\0from-mi.com\0" -"square.museum\0is-a-patsfan.org\0" -"mihama.fukui.jp\0" -"clothing\0" -"reit\0" -"historichouses.museum\0gjovik.no\0desi\0" -"cam.it\0asuke.aichi.jp\0" -"kizu.kyoto.jp\0" -"syzran.ru\0eu-central-1.compute.amazonaws.com\0" -"ama.shimane.jp\0" -"farm\0" -"jaworzno.pl\0" -"emp.br\0" -"k12.ar.us\0" -"oto.fukuoka.jp\0takahagi.ibaraki.jp\0elk.pl\0" -"k12.mo.us\0" -"soo.kagoshima.jp\0umaji.kochi.jp\0" -"farmequipment.museum\0github.io\0" -"mashiki.kumamoto.jp\0" -"k.bg\0" -"mtn\0" -"skole.museum\0deals\0" -"is-a-student.com\0" -"friuli-ve-giulia.it\0" -"force.museum\0nec\0" -"fast\0walter\0" -"pharmacien.fr\0ce.it\0hakuba.nagano.jp\0" -"s3-eu-west-1.amazonaws.com\0" -"lucca.it\0" -"nakadomari.aomori.jp\0" -"antiques.museum\0resistance.museum\0cc.mo.us\0" -"troandin.no\0vyatka.ru\0" -"net\0microsoft\0" -"civilisation.museum\0" -"komatsushima.tokushima.jp\0" -"bronnoysund.no\0new\0" -"nanbu.yamanashi.jp\0" -"vic.au\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd9\x87\0" -"shitara.aichi.jp\0kamikawa.hokkaido.jp\0nogi.tochigi.jp\0" -"tn.us\0pink\0" -"yokote.akita.jp\0" -"oz.au\0k12.tx.us\0physio\0" -"\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa6\xb0\xe0\xa6\xa4\0" -"stalbans.museum\0productions\0" -"fvg.it\0" -"riik.ee\0aland.fi\0" -"okazaki.aichi.jp\0" -"gs.tm.no\0" -"*.sapporo.jp\0" -"children.museum\0dali.museum\0" -"ngo\0" -"ritto.shiga.jp\0" -"wiki\0dyndns-at-home.com\0" -"vc.it\0" -"rent\0" -"berlevag.no\0" -"bryne.no\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd8\xa9\0nhk\0" -"eng.br\0carrara-massa.it\0" -"penza.ru\0" -"lib.in.us\0" -"onomichi.hiroshima.jp\0" -"k12.oh.us\0" -"ebino.miyazaki.jp\0" -"deatnu.no\0lib.wi.us\0" -"wa.au\0r.bg\0us.org\0" -"univ.sn\0" -"seiro.niigata.jp\0" -"brindisi.it\0" -"is-a-hard-worker.com\0" -"rankoshi.hokkaido.jp\0" -"archi\0" -"dnsdojo.org\0from-ia.com\0" -"kimitsu.chiba.jp\0" -"chernihiv.ua\0" -"cl.it\0toride.ibaraki.jp\0" -"bjarkoy.no\0" -"bu.no\0" -"pc.it\0" -"karasjok.no\0" -"ol.no\0" -"kesennuma.miyagi.jp\0katsuragi.nara.jp\0" -"tourism.tn\0" -"bolzano.it\0" -"act.au\0trondheim.no\0" -"trentinosuedtirol.it\0suwalki.pl\0" -"bahccavuotna.no\0abo.pa\0" -"yamagata.gifu.jp\0canon\0" -"\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x82\xe0\xae\xb0\xe0\xaf\x8d\0horse\0" -"viajes\0" -"repair\0\xe6\x89\x8b\xe8\xa1\xa8\0" -"history.museum\0" -"gs.hm.no\0" -"\xe7\xa6\x8f\xe4\xba\x95.jp\0" -"inashiki.ibaraki.jp\0" -"us.na\0osoyro.no\0fedje.no\0" -"sakai.fukui.jp\0" -"air-surveillance.aero\0engineer.aero\0pri.ee\0" -"is.it\0namikata.ehime.jp\0" -"warabi.saitama.jp\0" -"strand.no\0" -"lecco.it\0" -"tatar\0" -"shinjo.yamagata.jp\0" -"sakahogi.gifu.jp\0" -"aarborte.no\0cityeats\0" -"\xe7\xbe\xa4\xe9\xa6\xac.jp\0rest\0" -"skien.no\0" -"kasai.hyogo.jp\0hitachinaka.ibaraki.jp\0" -"costume.museum\0photography.museum\0froya.no\0grozny.ru\0simbirsk.ru\0" -"barletta-trani-andria.it\0sells-it.net\0" -"y.bg\0" -"art.museum\0" -"karpacz.pl\0" -"sanok.pl\0" -"gs.nt.no\0" -"fortworth.museum\0murmansk.ru\0" -"mansion.museum\0" -"cs.it\0" -"nishiokoppe.hokkaido.jp\0yaese.okinawa.jp\0" -"santacruz.museum\0googleapis.com\0" -"servebbs.net\0" -"cc.nm.us\0" -"asso.fr\0lupin\0" -"eigersund.no\0" -"sukumo.kochi.jp\0ketrzyn.pl\0" -"compute.amazonaws.com\0" -"nagara.chiba.jp\0" -"bokn.no\0" -"mino.gifu.jp\0" -"author.aero\0" -"erni\0" -"asso.gp\0iz.hr\0" -"otsuki.yamanashi.jp\0" -"posts-and-telecommunications.museum\0marker.no\0" -"is-into-cars.com\0" -"flynnhub.com\0" -"kr\xc3\xa5""anghke.no\0" -"nakamichi.yamanashi.jp\0" -"tokke.no\0" -"pc.pl\0" -"etne.no\0community\0" -"hol.no\0" -"asso.ht\0tatsuno.hyogo.jp\0tokamachi.niigata.jp\0" -"valer.ostfold.no\0d.se\0" -"agrar.hu\0" -"nagareyama.chiba.jp\0niigata.niigata.jp\0" -"ap-northeast-1.compute.amazonaws.com\0" -"qh.cn\0sardinia.it\0tozawa.yamagata.jp\0" -"oe.yamagata.jp\0" -"scotland.museum\0kalmykia.ru\0wedding\0" -"med.br\0" -"nra\0" -"asso.bj\0tabayama.yamanashi.jp\0" -"obi\0" -"cci.fr\0ome.tokyo.jp\0" -"sakuho.nagano.jp\0" -"per.la\0s\xc3\xa1l\xc3\xa1t.no\0" -"murata.miyagi.jp\0" -"airport.aero\0" -"cz.it\0" -"friulive-giulia.it\0koeln\0" -"asso.ci\0birthplace.museum\0nrw\0" -"naka.hiroshima.jp\0shiranuka.hokkaido.jp\0" -"bamble.no\0" -"jx.cn\0mibu.tochigi.jp\0" -"watchandclock.museum\0g\xc3\xa1ls\xc3\xa1.no\0" -"shibata.niigata.jp\0!teledata.mz\0" -"nanmoku.gunma.jp\0" -"med.ec\0aquarium.museum\0il.us\0outsystemscloud.com\0" -"med.ee\0mandal.no\0verran.no\0" -"kumamoto.jp\0is-a-geek.net\0" -"flekkefjord.no\0" -"shinonsen.hyogo.jp\0fudai.iwate.jp\0" -"\xe4\xbf\xa1\xe6\x81\xaf\0" -"nishiaizu.fukushima.jp\0" -"sumy.ua\0" -"per.nf\0" -"chiba.jp\0ntt\0" -"asso.dz\0" -"badaddja.no\0cc.id.us\0\xd8\xa8\xd8\xa7\xd8\xb2\xd8\xa7\xd8\xb1\0" -"k.se\0" -"niki.hokkaido.jp\0higashikagawa.kagawa.jp\0" -"koeln.museum\0" -"andoy.no\0" -"frana.no\0\xd9\x83\xd9\x88\xd9\x85\0" -"katashina.gunma.jp\0" -"tourism.pl\0" -"aremark.no\0" -"chita.ru\0" -"tarumizu.kagoshima.jp\0" -"\xe7\xbd\x91\xe7\xb5\xa1.hk\0orkanger.no\0" -"tempioolbia.it\0saotome.st\0" -"kawakita.ishikawa.jp\0" -"karikatur.museum\0uz.ua\0hermes\0" -"friuli-vgiulia.it\0" -"textile.museum\0" -"iwatsuki.saitama.jp\0" -"cc.ok.us\0" -"med.ht\0" -"\xe8\xaf\xba\xe5\x9f\xba\xe4\xba\x9a\0" -"tsushima.aichi.jp\0ide.kyoto.jp\0" -"abira.hokkaido.jp\0actor\0" -"\xe7\xb5\x84\xe7\xbb\x87.hk\0" -"tsuchiura.ibaraki.jp\0" -"dep.no\0" -"republican\0" -"vefsn.no\0" -"luxembourg.museum\0" +"com.lr\0" +"marylhurst.museum\0" +"com.lv\0from-ia.com\0" +"piedmont.it\0goshiki.hyogo.jp\0com.mg\0zero\0" +"mizusawa.iwate.jp\0" +"com.ly\0" +"com.mk\0" +"com.ml\0sandoy.no\0" +"atlanta.museum\0george\0" +"imperia.it\0com.mo\0" +"com.na\0" +"ind.tn\0" +"com.ms\0is-very-sweet.org\0" +"com.mt\0" +"com.mu\0" +"naka.ibaraki.jp\0com.mv\0com.nf\0" +"giessen.museum\0com.mw\0com.ng\0film\0" +"com.mx\0" +"vic.edu.au\0com.my\0com.ni\0sa-east-1.compute.amazonaws.com\0" +"hakui.ishikawa.jp\0" +"chikujo.fukuoka.jp\0" +"okuizumo.shimane.jp\0" +"kota.aichi.jp\0" +"com.nr\0" +"nf.ca\0" +"kids.museum\0" +"fukagawa.hokkaido.jp\0" +"info.ki\0" +"dish\0" +"tana.no\0" +"mr.no\0" +"kerryproperties\0" +"com.om\0" +"hiphop\0" +"com.pa\0" +"cc.ut.us\0" +"sdn.gov.pl\0" +"com.pe\0" +"com.pf\0" +"com.ph\0" +"gs.vf.no\0" +"showtime\0" +"mt.it\0makinohara.shizuoka.jp\0com.pk\0" +"nishikata.tochigi.jp\0com.pl\0" +"br.it\0cb.it\0" +"numata.hokkaido.jp\0" +"com.qa\0rubtsovsk.ru\0" +"com.pr\0" +"zgora.pl\0com.ps\0s3-external-2.amazonaws.com\0" +"com.pt\0certmgr.org\0" +"etajima.hiroshima.jp\0" +"com.py\0" +"cn.eu.org\0" +"mobi.gp\0" +"ichikawa.hyogo.jp\0uchihara.ibaraki.jp\0" +"psi.br\0nittedal.no\0" +"hayakawa.yamanashi.jp\0yorkshire.museum\0" +"valleeaoste.it\0" +"\xe5\xba\x83\xe5\xb3\xb6.jp\0tanabe.wakayama.jp\0com.re\0chloe\0" +"balashov.su\0loans\0" +"selbu.no\0" +"niigata.niigata.jp\0" +"paris.museum\0vantaa.museum\0" +"kembuchi.hokkaido.jp\0" +"com.ro\0" +"com.sa\0poltava.ua\0mymediapc.net\0" +"com.sb\0" +"trentino-sud-tirol.it\0com.sc\0" +"com.sd\0" +"pmn.it\0com.ru\0com.se\0" +"com.rw\0com.sg\0homes\0" +"com.sh\0" +"naie.hokkaido.jp\0" +"fussa.tokyo.jp\0" +"com.sl\0" +"com.sn\0" +"com.so\0fire\0servegame.com\0" +"leclerc\0" +"holmestrand.no\0dedyn.io\0" +"com.st\0" +"com.sv\0" +"bio.br\0ternopil.ua\0" +"githubcloud.com\0" +"com.sy\0" +"trentino-alto-adige.it\0com.tj\0" +"blockbuster\0" +"com.tm\0" +"com.tn\0\xe7\xbd\x91\xe5\x9d\x80\0" +"joboji.iwate.jp\0com.to\0" +"handson.museum\0society.museum\0com.ua\0dyndns-free.com\0" +"com.tr\0fish\0" +"miyakonojo.miyazaki.jp\0" +"nishi.fukuoka.jp\0com.tt\0" +"nichinan.tottori.jp\0lib.mt.us\0lib.nd.us\0is-a-chef.net\0" +"shimotsuma.ibaraki.jp\0kamikitayama.nara.jp\0com.tw\0com.ug\0" +"tsugaru.aomori.jp\0" +"xz.cn\0" +"vegas\0" +"kuju.oita.jp\0" +"kunohe.iwate.jp\0" +"takarazuka.hyogo.jp\0geek.nz\0" +"stv.ru\0" +"com.vc\0" +"so.it\0com.ve\0" +"anamizu.ishikawa.jp\0semine.miyagi.jp\0itoman.okinawa.jp\0" +"ama.aichi.jp\0" +"bt.it\0" +"iwanai.hokkaido.jp\0com.uy\0com.vi\0" +"kunst.museum\0com.uz\0" +"nyuzen.toyama.jp\0" +"dontexist.net\0" +"com.vn\0" +"kitaura.miyazaki.jp\0" +"hi.us\0" +"brussel.museum\0" +"austevoll.no\0" +"com.vu\0" +"oygarden.no\0" +"tomika.gifu.jp\0kumatori.osaka.jp\0lidl\0" "chikuho.fukuoka.jp\0" +"cy.eu.org\0" +"philips\0" +"kawai.nara.jp\0" +"forum\0" +"com.ws\0" +"munakata.fukuoka.jp\0tokuyama.yamaguchi.jp\0dyr\xc3\xb8y.no\0" +"deloitte\0" +"gemological.museum\0" +"airport.aero\0" +"\xc3\xa1laheadju.no\0northwesternmutual\0" +"higashikagura.hokkaido.jp\0glade\0" +"toei.aichi.jp\0mombetsu.hokkaido.jp\0" +"press\0za.org\0" +"servegame.org\0" +"k12.vi.us\0life\0" +"shimokawa.hokkaido.jp\0ritto.shiga.jp\0" +"!city.sapporo.jp\0" +"cz.eu.org\0" +"leitungsen.de\0worse-than.tv\0" +"yokoshibahikari.chiba.jp\0miyoshi.saitama.jp\0" +"feedback\0" +"kaszuby.pl\0" +"pesaro-urbino.it\0" +"moriya.ibaraki.jp\0" +"furudono.fukushima.jp\0" +"tateyama.toyama.jp\0" +"\xe5\xb3\xb6\xe6\xa0\xb9.jp\0brandywinevalley.museum\0sogndal.no\0" +"tachikawa.tokyo.jp\0alaheadju.no\0vestvagoy.no\0" +"\xe5\xae\xb6\xe9\x9b\xbb\0" +"zentsuji.kagawa.jp\0" +"oita.jp\0\xc3\xa1lt\xc3\xa1.no\0dyndns-ip.com\0" +"workinggroup.aero\0com.zm\0" +"corvette.museum\0for-more.biz\0" +"rimini.it\0mihama.chiba.jp\0" +"hm.no\0" +"sm.ua\0\xe9\xa6\x99\xe6\xb8\xaf\0" +"ath.cx\0" +"bungotakada.oita.jp\0lutsk.ua\0dk.eu.org\0" +"hirara.okinawa.jp\0" +"media.hu\0bharti\0" +"ta.it\0ipiranga\0" +"is-slick.com\0" +"nico\0" +"marumori.miyagi.jp\0" +"arts.co\0tsuruta.aomori.jp\0lancome\0" +"gliding.aero\0inatsuki.fukuoka.jp\0" +"nome.pt\0familyds.net\0" +"naruto.tokushima.jp\0mt.us\0nd.us\0" +"kakinoki.shimane.jp\0" +"is-an-entertainer.com\0" +"port.fr\0gotdns.ch\0" +"bydgoszcz.pl\0" +"r\xc3\xb8st.no\0" +"ranzan.saitama.jp\0" +"marburg.museum\0komi.ru\0" +"wellbeingzone.co.uk\0" +"chikuzen.fukuoka.jp\0hjartdal.no\0" +"ikeda.fukui.jp\0" +"contemporaryart.museum\0" +"ostroleka.pl\0like\0" +"\xc3\xb8vre-eiker.no\0dyndns-server.com\0" +"ishikawa.fukushima.jp\0" +"um.gov.pl\0industries\0" +"b\xc3\xa5""d\xc3\xa5""ddj\xc3\xa5.no\0" +"koga.fukuoka.jp\0tsukui.kanagawa.jp\0" +"sumida.tokyo.jp\0info.zm\0" +"tohma.hokkaido.jp\0shika.ishikawa.jp\0" +"ilovecollege.info\0" +"gojome.akita.jp\0tsuchiura.ibaraki.jp\0" +"shikokuchuo.ehime.jp\0" +"pulawy.pl\0" +"dr\xc3\xb8""bak.no\0muos\xc3\xa1t.no\0" +"cremona.it\0" +"de.eu.org\0" +"\xe5\x98\x89\xe9\x87\x8c\xe5\xa4\xa7\xe9\x85\x92\xe5\xba\x97\0" +"mx.na\0" +"oster\xc3\xb8y.no\0" +"nl.ca\0" +"minami.fukuoka.jp\0r\xc3\xb8yken.no\0" +"t\xc3\xb8nsberg.no\0" +"mihama.fukui.jp\0kodaira.tokyo.jp\0limo\0" +"bv.nl\0lind\xc3\xa5s.no\0" +"livorno.it\0" +"yn.cn\0" +"ascolipiceno.it\0sm\xc3\xb8la.no\0\xe6\x96\xb0\xe9\x97\xbb\0" +"is-not-certified.com\0" +"kanmaki.nara.jp\0honda\0" +"link\0" +"roma.it\0nowruz\0" +"prof.pr\0" +"dallas.museum\0" +"iron.museum\0futbol\0hk.org\0" +"ss.it\0" "nasu.tochigi.jp\0" -"intelligence.museum\0nyc\0" -"is-an-actress.com\0" -"\xe7\xa6\x8f\xe5\xb2\xa1.jp\0" -"vda.it\0" -"\xe6\xbb\x8b\xe8\xb3\x80.jp\0worse-than.tv\0" -"gliding.aero\0notaires.km\0lea\xc5\x8bgaviika.no\0" -"r.se\0per.sg\0" -"taxi.br\0" -"elvendrell.museum\0" -"kariwa.niigata.jp\0" -"science.museum\0from-ms.com\0from-nc.com\0" -"cesena-forli.it\0" -"dc.us\0dontexist.org\0" -"kishiwada.osaka.jp\0" -"yoshioka.gunma.jp\0" -"k12.dc.us\0" -"toyoake.aichi.jp\0seranishi.hiroshima.jp\0noda.iwate.jp\0" -"cagliari.it\0buyshouses.net\0" -"aso.kumamoto.jp\0" -"sauda.no\0" -"\xe5\x85\xb5\xe5\xba\xab.jp\0nisshin.aichi.jp\0" -"vegarshei.no\0" -"m\xc4\x81ori.nz\0" -"overhalla.no\0voagat.no\0" -"indian.museum\0railroad.museum\0nsk.ru\0is-leet.com\0" -"inf.br\0nakama.fukuoka.jp\0" -"readmyblog.org\0" -"bergamo.it\0\xe5\xa5\x88\xe8\x89\xaf.jp\0" -"ushiku.ibaraki.jp\0" -"med.ly\0" -"tahara.aichi.jp\0" -"ringsaker.no\0cc.or.us\0" -"aga.niigata.jp\0" -"property\0" -"hinohara.tokyo.jp\0" -"ac\0" -"ad\0kuji.iwate.jp\0kinder\0compute.amazonaws.cn\0" +"other.nf\0" +"ch.it\0sykkylven.no\0loginto.me\0" +"author\0" +"aid.pl\0pics\0" +"us.gov.pl\0kustanai.ru\0" +"nkz.ru\0" +"yaroslavl.ru\0" +"koeln\0" +"padova.it\0" +"vard\xc3\xb8.no\0" +"shiga.jp\0" +"gaular.no\0rennesoy.no\0" +"panama.museum\0" +"yonezawa.yamagata.jp\0media.pl\0ciscofreak.com\0" +"tosa.kochi.jp\0ogawa.nagano.jp\0holt\xc3\xa5len.no\0" +"itayanagi.aomori.jp\0nakamura.kochi.jp\0askvoll.no\0" +"batsfjord.no\0" +"yosemite.museum\0homeip.net\0" +"nike\0" +"tempioolbia.it\0sandvikcoromant\0" +"iwade.wakayama.jp\0" +"kaufen\0" +"shinjuku.tokyo.jp\0presidio.museum\0gloppen.no\0is-a-celticsfan.org\0" +"bahccavuotna.no\0lezajsk.pl\0" +"minamisanriku.miyagi.jp\0" +"*.sapporo.jp\0" +"tomi.nagano.jp\0" +"friuliveneziagiulia.it\0bando.ibaraki.jp\0" +"meiwa.gunma.jp\0" +"k12.fl.us\0" +"sos.pl\0gotdns.org\0" +"bashkiria.ru\0" +"troitsk.su\0" +"kuban.ru\0" +"nakhodka.ru\0" +"moriyama.shiga.jp\0motorcycle.museum\0" +"crew.aero\0" +"luster.no\0podhale.pl\0hockey\0" +"bahn.museum\0" +"tas.gov.au\0" +"izumizaki.fukushima.jp\0" +"b\xc3\xa1jddar.no\0*.magentosite.cloud\0" +"bashkiria.su\0" +"satosho.okayama.jp\0kvam.no\0discount\0" +"cosenza.it\0" +"orkanger.no\0" +"v\xc3\xa5ler.hedmark.no\0" +"tobishima.aichi.jp\0" +"vang.no\0" +"higashine.yamagata.jp\0lib.mn.us\0" +"arao.kumamoto.jp\0center.museum\0" +"doomdns.com\0" +"n\xc3\xb8tter\xc3\xb8y.no\0arts.ve\0" +"\xc3\xa5lesund.no\0mobi.tt\0pamperedchef\0" +"valleaosta.it\0" +"kunstunddesign.museum\0gdynia.pl\0" +"valer.ostfold.no\0rich\0" +"mobi.tz\0" +"te.it\0udono.mie.jp\0" +"abarth\0" +"bz.it\0" +"ca.eu.org\0" +"\xe3\x82\xb3\xe3\x83\xa0\0" +"sondrio.it\0for-some.biz\0" +"wa.gov.au\0agro.pl\0" +"hanno.saitama.jp\0asahi.toyama.jp\0" +"taka.hyogo.jp\0nh.us\0" +"noda.iwate.jp\0" +"hongo.hiroshima.jp\0omiya.saitama.jp\0\xd0\xb1\xd0\xb5\xd0\xbb\0" +"cuneo.it\0yachiyo.chiba.jp\0" +"troandin.no\0" +"is-a-cpa.com\0" +"mikasa.hokkaido.jp\0" +"\xe9\x95\xb7\xe5\xb4\x8e.jp\0smola.no\0glass\0" +"kanoya.kagoshima.jp\0" +"int.ar\0" +"tel.tr\0" +"live\0" +"mitake.gifu.jp\0" +"nakano.nagano.jp\0" +"is-a-nurse.com\0" +"int.az\0matera.it\0hs.kr\0\xc3\xb8rskog.no\0" +"yuzawa.niigata.jp\0" +"lowicz.pl\0" +"int.bo\0grondar.za\0" +"eu-2.evennode.com\0" +"volgograd.ru\0" +"mazowsze.pl\0" +"is-into-games.com\0" +"is-found.org\0" +"vossevangen.no\0" +"int.ci\0yonabaru.okinawa.jp\0" +"resistance.museum\0" +"ginan.gifu.jp\0tiaa\0" +"ayase.kanagawa.jp\0ise.mie.jp\0chichibu.saitama.jp\0athleta\0" +"int.co\0" +"langev\xc3\xa5g.no\0" +"oguni.kumamoto.jp\0" +"sec.ps\0" +"chita.aichi.jp\0" +"nakagyo.kyoto.jp\0cloudcontrolled.com\0" +"inderoy.no\0" +"monmouth.museum\0dep.no\0mazury.pl\0" +"gliwice.pl\0" +"jan-mayen.no\0arts.ro\0" +"ohira.miyagi.jp\0" +"\xe5\xa5\x88\xe8\x89\xaf.jp\0law.pro\0" +"riik.ee\0mobi.na\0volda.no\0" +"shisui.chiba.jp\0" +"kyuragi.saga.jp\0\xe6\x96\xb0\xe5\x8a\xa0\xe5\x9d\xa1\0home.dyndns.org\0" +"rotorcraft.aero\0mobi.ng\0nl.no\0" +"kasuga.hyogo.jp\0" +"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86.ir\0ping\0" +"jfk.museum\0" +"vestv\xc3\xa5g\xc3\xb8y.no\0fam.pk\0healthcare\0pink\0" +"rome.it\0fukushima.hokkaido.jp\0nord-fron.no\0" +"magadan.ru\0" +"nakayama.yamagata.jp\0" +"val-daosta.it\0" +"kiyose.tokyo.jp\0" +"notodden.no\0" +"cl.it\0miami\0" +"modena.it\0" +"hitachiomiya.ibaraki.jp\0" +"kyowa.hokkaido.jp\0yakage.okayama.jp\0" +"\xe6\x96\xb0\xe6\xbd\x9f.jp\0mer\xc3\xa5ker.no\0simple-url.com\0" +"cd.eu.org\0" +"nj.us\0schwarz\0" +"ia.us\0eu-1.evennode.com\0" +"oldnavy\0" +"vladivostok.ru\0" +"barrel-of-knowledge.info\0" +"hirosaki.aomori.jp\0" +"aeroclub.aero\0navigation.aero\0" +"santafe.museum\0" +"dellogliastra.it\0\xe6\x94\xbf\xe5\xba\x9c\0" +"asnes.no\0" +"vao.it\0yugawa.fukushima.jp\0" +"chuo.osaka.jp\0arts.nf\0tokyo\0" +"ap-southeast-1.compute.amazonaws.com\0" +"notogawa.shiga.jp\0" +"tennis\0us.com\0" +"holdings\0" +"beats\0lifestyle\0" +"redumbrella\0issmarterthanyou.com\0" +"britishcolumbia.museum\0" +"maizuru.kyoto.jp\0" +"k12.va.us\0" +"encyclopedic.museum\0posts-and-telecommunications.museum\0k12.pr.us\0" +"youth.museum\0" +"barletta-trani-andria.it\0" +"kai.yamanashi.jp\0" +"riodejaneiro.museum\0" +"nyny.museum\0" +"software.aero\0yamato.kanagawa.jp\0" +"obira.hokkaido.jp\0" +"int.is\0" +"review\0" +"mishima.shizuoka.jp\0" +"aizubange.fukushima.jp\0vestby.no\0" +"akita.jp\0" +"budejju.no\0" +"hosting\0" +"kuwana.mie.jp\0" +"\xe4\xb8\x96\xe7\x95\x8c\0" +"te.ua\0" +"\xe5\xa4\xa7\xe5\x88\x86.jp\0" +"tako.chiba.jp\0moareke.no\0" +"associates\0" +"m\xc3\xa1latvuopmi.no\0windows\0" +"mail.pl\0augustow.pl\0" +"int.la\0" +"!city.kobe.jp\0" +"cn.it\0sanfrancisco.museum\0" +"sakado.saitama.jp\0s3-ap-southeast-1.amazonaws.com\0" +"principe.st\0okinawa\0" +"drive\0" +"jogasz.hu\0misato.shimane.jp\0kuroiso.tochigi.jp\0" +"int.lk\0" +"higashikagawa.kagawa.jp\0" +"groks-this.info\0" +"arkhangelsk.ru\0" +"yawatahama.ehime.jp\0" +"pa.leg.br\0" +"chigasaki.kanagawa.jp\0minami-alps.yamanashi.jp\0osoyro.no\0" +"tone.ibaraki.jp\0matsuda.kanagawa.jp\0tenri.nara.jp\0" +"nogata.fukuoka.jp\0" +"omachi.saga.jp\0\xc3\xb8rsta.no\0" +"lucca.it\0yanaizu.fukushima.jp\0" +"africa.com\0" +"wakuya.miyagi.jp\0" +"arkhangelsk.su\0" +"eurovision\0" +"manx.museum\0askim.no\0" +"sakegawa.yamagata.jp\0" +"int.mv\0b\xc3\xa1hccavuotna.no\0" +"int.mw\0" +"int.ni\0" +"sakaki.nagano.jp\0nakano.tokyo.jp\0" +"blog\0" +"tinn.no\0ostroda.pl\0mydrobo.com\0" +"pb.leg.br\0" +"gonohe.aomori.jp\0starostwo.gov.pl\0edu.krd\0" +"marugame.kagawa.jp\0" +"nt.au\0" +"sekigahara.gifu.jp\0" +"plaza.museum\0" +"leasing.aero\0tjeldsund.no\0" +"sunagawa.hokkaido.jp\0" +"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86.ir\0from-nh.com\0" +"nt.ca\0" +"bellevue.museum\0" +"lib.oh.us\0" +"tysfjord.no\0" +"otsuki.kochi.jp\0co.krd\0" +"k12.ec\0porsangu.no\0" +"yukuhashi.fukuoka.jp\0" +"int.pt\0" +"soundandvision.museum\0nesna.no\0" +"read-books.org\0" +"khmelnitskiy.ua\0" +"br\xc3\xb8nn\xc3\xb8y.no\0" +"tm.cy\0fedje.no\0" +"monzabrianza.it\0" +"ami.ibaraki.jp\0marker.no\0cloudfront.net\0" +"naganohara.gunma.jp\0forsand.no\0" +"\xe6\xbe\xb3\xe9\x96\x80\0volkswagen\0" +"tosu.saga.jp\0raisa.no\0yokohama\0" +"aip.ee\0" +"foggia.it\0" +"takinoue.hokkaido.jp\0realm.cz\0" +"coldwar.museum\0lancaster\0" +"wassamu.hokkaido.jp\0ro.eu.org\0" +"tomari.hokkaido.jp\0locus\0" +"stjordal.no\0" +"aga.niigata.jp\0americanart.museum\0" +"campobasso.it\0shimoda.shizuoka.jp\0" +"adult\0pharmacy\0" +"telekommunikation.museum\0" +"ac\0kopervik.no\0" +"ad\0witd.gov.pl\0int.ru\0" "ae\0" -"af\0uchinomi.kagawa.jp\0kashihara.nara.jp\0" -"ag\0snasa.no\0" -"ai\0" -"inf.cu\0wa.us\0" -"al\0tomioka.gunma.jp\0" -"am\0" -"an\0" -"ao\0k12.wi.us\0" -"traniandriabarletta.it\0" -"aq\0ba\0" -"ar\0bb\0" -"as\0uslivinghistory.museum\0" -"at\0" -"au\0be\0" -"bf\0tomisato.chiba.jp\0tajimi.gifu.jp\0" -"aw\0bg\0is-a-knight.org\0" +"af\0mytis.ru\0int.rw\0abudhabi\0" +"ag\0" +"ai\0raholt.no\0" +"oshima.yamaguchi.jp\0" +"al\0" +"am\0latino\0tips\0" +"reklam.hu\0jewish.museum\0rakkestad.no\0" +"ao\0higashimatsushima.miyagi.jp\0\xe5\xa4\xa7\xe6\x8b\xbf\0elasticbeanstalk.com\0" +"aq\0ba\0chernivtsi.ua\0blogsite.org\0from-id.com\0" +"ar\0bb\0jobs.tt\0" +"as\0tm.fr\0yamagata.yamagata.jp\0dontexist.org\0" +"at\0obanazawa.yamagata.jp\0" +"air-surveillance.aero\0au\0be\0" +"bf\0" +"aw\0bg\0carrara-massa.it\0" "ax\0bh\0" -"bi\0" -"az\0bj\0" -"bm\0nebraska.museum\0one\0" -"bo\0ong\0s3-sa-east-1.amazonaws.com\0" -"ca\0med.om\0" -"br\0gold\0" -"bs\0cc\0y.se\0" -"bt\0cd\0nakai.kanagawa.jp\0golf\0onl\0" -"med.pa\0cc.vi.us\0" -"bv\0cf\0shinanomachi.nagano.jp\0" -"bw\0cg\0york.museum\0" -"ch\0nishihara.kumamoto.jp\0" +"bi\0heroy.more-og-romsdal.no\0int.tj\0" +"az\0bj\0myftp.org\0" +"aogaki.hyogo.jp\0blue\0" +"bm\0" +"kawamata.fukushima.jp\0aurskog-h\xc3\xb8land.no\0scholarships\0" +"bo\0romskog.no\0flir\0" +"honbetsu.hokkaido.jp\0" +"ca\0pors\xc3\xa1\xc5\x8bgu.no\0" +"br\0" +"bs\0cc\0idf.il\0int.tt\0" +"bt\0cd\0" +"bv\0cf\0" +"bw\0cg\0k12.il\0" +"ch\0" "by\0ci\0" "bz\0" -"firestone\0" -"cl\0chikusei.ibaraki.jp\0" -"cm\0frosta.no\0" -"cn\0" -"co\0tingvoll.no\0isa.us\0\xe5\x95\x86\xe5\xba\x97\0" -"sic.it\0kasuga.hyogo.jp\0med.pl\0" -"cr\0!city.yokohama.jp\0maori.nz\0" -"shiroi.chiba.jp\0amagasaki.hyogo.jp\0flsmidth\0" -"cu\0de\0soc.lk\0gloppen.no\0holdings\0loans\0" -"cv\0funabashi.chiba.jp\0kaizuka.osaka.jp\0" -"cw\0ooo\0" -"cx\0\xe1\x83\x92\xe1\x83\x94\0financial\0" -"stada\0" -"cz\0dj\0bedzin.pl\0" -"dk\0\xd8\xa8\xd9\x8a\xd8\xaa\xd9\x83\0" -"wodzislaw.pl\0" -"dm\0" -"otaki.chiba.jp\0saroma.hokkaido.jp\0poker\0" -"do\0lviv.ua\0" -"bibai.hokkaido.jp\0aridagawa.wakayama.jp\0" -"arezzo.it\0" -"ec\0civilization.museum\0vestnes.no\0" -"ee\0communications.museum\0" -"pmn.it\0" -"eg\0" -"dz\0final\0" -"sarufutsu.hokkaido.jp\0nagawa.nagano.jp\0accountant\0" -"muenchen.museum\0" -"\xd1\x83\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0" -"pisa.it\0" -"linde\0" -"es\0audnedaln.no\0narvik.no\0" -"et\0geometre-expert.fr\0livorno.it\0tra.kp\0" -"eu\0med.sa\0lib.sd.us\0goog\0" -"5.bg\0krager\xc3\xb8.no\0gratis\0" -"med.sd\0" -"fi\0luxury\0" -"nanjo.okinawa.jp\0" -"askim.no\0aurskog-holand.no\0asso.re\0\xd9\x85\xd8\xb5\xd8\xb1\0" -"wada.nagano.jp\0" +"hangout\0moscow\0" +"cl\0" +"cm\0aostavalley.it\0prudential\0" +"cn\0oirase.aomori.jp\0" +"co\0\xc3\xa5mli.no\0" +"chikugo.fukuoka.jp\0" +"cr\0yaizu.shizuoka.jp\0" +"int.ve\0" +"cu\0de\0shiraoi.hokkaido.jp\0iruma.saitama.jp\0lib.nv.us\0" +"of.by\0cv\0tm.hu\0teshikaga.hokkaido.jp\0lib.ia.us\0lawyer\0university\0" +"cw\0yamaga.kumamoto.jp\0" +"b.bg\0cx\0si.eu.org\0" +"cz\0dj\0" +"dk\0" +"dm\0cc.vt.us\0int.vn\0" +"furano.hokkaido.jp\0" +"do\0cn.ua\0" +"consultant.aero\0kasama.ibaraki.jp\0" +"lecce.it\0frana.no\0" +"\xe9\x9b\xbb\xe8\xa8\x8a\xe7\x9b\x88\xe7\xa7\x91\0" +"b.br\0ec\0" +"ee\0" +"higashitsuno.kochi.jp\0" +"eg\0s3-ap-northeast-1.amazonaws.com\0" +"cr.it\0defense.tn\0" +"dz\0" +"tokoname.aichi.jp\0" +"cargo.aero\0frankfurt.museum\0" +"yamakita.kanagawa.jp\0" +"es\0yakutia.ru\0" +"et\0torino.it\0" +"eu\0noshiro.akita.jp\0" +"fr\xc3\xb8ya.no\0\xe6\xbe\xb3\xe9\x97\xa8\0" +"fi\0" "fm\0" -"fo\0org\0" -"fm.br\0agro.pl\0" -"ga\0" -"fr\0gb\0kazo.saitama.jp\0" -"gd\0ogawa.ibaraki.jp\0" -"ge\0us-east-1.amazonaws.com\0" -"gf\0" -"gg\0mer\xc3\xa5ker.no\0from-ok.com\0" -"gh\0kuwana.mie.jp\0" +"tm.km\0" +"fo\0" +"blogdns.org\0" +"ga\0for-better.biz\0" +"fr\0gb\0iinet\0is-a-democrat.com\0" +"kurate.fukuoka.jp\0" +"gd\0" +"ge\0nakijin.okinawa.jp\0" +"gf\0miyoshi.tokushima.jp\0" +"gg\0" +"gh\0" "gi\0" -"mashike.hokkaido.jp\0" -"is-a-celticsfan.org\0" -"gl\0ogawa.nagano.jp\0" -"gm\0" +"oyama.tochigi.jp\0" +"kanan.osaka.jp\0" +"gl\0hannan.osaka.jp\0" +"gm\0tranby.no\0" "gn\0" -"arendal.no\0" -"sd.cn\0gp\0" +"familyds.org\0" +"gp\0" "gq\0" -"gr\0\xe5\xbe\xb3\xe5\xb3\xb6.jp\0" -"gs\0claims\0" -"gt\0" -"gw\0lib.md.us\0" -"int.ar\0" +"gr\0trentinostirol.it\0sande.vestfold.no\0" +"gs\0kanna.gunma.jp\0" +"gt\0tm.mc\0k12.ak.us\0insurance\0" +"virgin\0" +"gw\0" +"tm.mg\0sk.eu.org\0" "gy\0" -"hk\0colonialwilliamsburg.museum\0associates\0" +"hk\0amli.no\0" "hm\0" -"hn\0" -"int.az\0karumai.iwate.jp\0" -"hr\0zao.miyagi.jp\0anan.tokushima.jp\0" -"gov.ac\0" -"ht\0id\0tsuiki.fukuoka.jp\0ikoma.nara.jp\0chungnam.kr\0mail.pl\0" -"gov.ae\0int.bo\0hu\0ie\0bergen.no\0kh.ua\0is-lost.org\0" -"gov.af\0" -"kurobe.toyama.jp\0green\0" -"yk.ca\0" -"tonami.toyama.jp\0" -"gov.al\0" -"md.ci\0im\0histoire.museum\0salem.museum\0" -"in\0rm.it\0vercelli.it\0" -"int.ci\0io\0music.museum\0" -"bieszczady.pl\0gmail\0" -"gov.ba\0iq\0" -"gov.ar\0gov.bb\0ir\0" -"gov.as\0is\0\xc3\xa1laheadju.no\0samsung\0" -"it\0dnsdojo.net\0" -"gov.au\0int.co\0je\0game-server.cc\0" -"gov.bf\0" -"kragero.no\0" -"gov.bh\0" -"asso.nc\0" -"gov.az\0" -"gov.bm\0voss.no\0" -"gov.bo\0jo\0insure\0" -"chirurgiens-dentistes.fr\0gorizia.it\0jp\0ovh\0" -"inf.mk\0" -"gov.br\0" -"gov.bs\0\xc3\xb8ksnes.no\0" -"gov.bt\0gov.cd\0" -"flora.no\0" -"kg\0khakassia.ru\0" -"gov.by\0ki\0" -"gov.bz\0shinkamigoto.nagasaki.jp\0" -"sk.ca\0\xc3\xa5lesund.no\0" -"gov.cl\0fukaya.saitama.jp\0wloclawek.pl\0" -"gov.cm\0km\0tynset.no\0chuvashia.ru\0tec.ve\0" -"gov.cn\0kn\0" -"gov.co\0journalism.museum\0netbank\0" -"basilicata.it\0susaki.kochi.jp\0ogawara.miyagi.jp\0kp\0" -"la\0kvitsoy.no\0" -"kr\0lb\0" -"lc\0alaheadju.no\0" -"gd.cn\0" -"gov.cu\0" -"fujiidera.osaka.jp\0" -"gov.cx\0" -"ky\0li\0oceanographique.museum\0viking.museum\0jessheim.no\0forgot.her.name\0" -"kz\0kitchen\0" -"lk\0" -"minamiawaji.hyogo.jp\0nikko.tochigi.jp\0" -"gov.dm\0" -"kakuda.miyagi.jp\0" -"gov.do\0" -"kasuga.fukuoka.jp\0" -"ma\0r\xc3\xa1isa.no\0" -"lr\0" -"gov.ec\0ls\0mc\0" -"fukuoka.jp\0lt\0md\0" -"gov.ee\0lu\0me\0" +"hn\0shonai.yamagata.jp\0" +"bible\0" +"hr\0" +"pagespeedmobilizer.com\0" +"ht\0id\0trentino-s-tirol.it\0kppsp.gov.pl\0" +"hu\0ie\0" +"yamatokoriyama.nara.jp\0visa\0" +"assedic.fr\0seihi.nagasaki.jp\0\xd0\xb0\xd0\xba.\xd1\x81\xd1\x80\xd0\xb1\0" +"higashiosaka.osaka.jp\0" +"digital\0" +"il\0" +"im\0" +"in\0nagasaki.jp\0alstom\0" +"io\0" +"tm.no\0" +"iq\0shimonoseki.yamaguchi.jp\0nt.no\0protection\0" +"ir\0" +"d.bg\0is\0" +"zj.cn\0it\0vrn.ru\0" +"je\0macys\0" +"nx.cn\0" +"grane.no\0" +"no-ip.co.uk\0" +"santacruz.museum\0aaa.pro\0" +"shiranuka.hokkaido.jp\0" +"surrey.museum\0" +"misato.miyagi.jp\0ngo.lk\0baikal.ru\0careers\0sharp\0" +"jo\0aizumi.tokushima.jp\0" +"to.it\0jp\0palana.ru\0" +"lombardia.it\0markets\0" +"im.it\0gs.fm.no\0latrobe\0" +"ct.it\0pi.leg.br\0" +"sannohe.aomori.jp\0mizumaki.fukuoka.jp\0" +"kg\0guernsey.museum\0\xe7\xb6\xb2\xe8\xb7\xaf.tw\0" +"educational.museum\0" +"ki\0kwp.gov.pl\0" +"soma.fukushima.jp\0dvrcam.info\0" +"km\0tm.pl\0" +"kn\0" +"med.pro\0" +"ota.tokyo.jp\0kp\0" +"la\0" +"kr\0lb\0bradesco\0" +"lc\0dynv6.net\0" +"its.me\0" +"molde.no\0" +"viva\0" +"hofu.yamaguchi.jp\0ru.eu.org\0se.eu.org\0" +"nakatombetsu.hokkaido.jp\0susaki.kochi.jp\0ky\0li\0" +"kz\0chattanooga.museum\0" +"kunitachi.tokyo.jp\0lk\0marnardal.no\0apps.fbsbx.com\0" +"is-an-artist.com\0ch.eu.org\0" +"ovre-eiker.no\0" +"aeroport.fr\0kuromatsunai.hokkaido.jp\0" +"naturalhistory.museum\0" +"shobara.hiroshima.jp\0ma\0""1kapp.com\0" +"taa.it\0lr\0" +"ls\0mc\0grue.no\0" +"lt\0md\0vivo\0" +"kiryu.gunma.jp\0lu\0me\0" "lv\0" -"gov.eg\0mg\0" -"vet.br\0mh\0" +"mg\0gratangen.no\0nat.tn\0" +"mh\0" "ly\0" -"gov.dz\0" -"mk\0" -"zama.kanagawa.jp\0ml\0pid\0" -"trade\0isa-hockeynut.com\0" +"mk\0k12.wi.us\0" +"ml\0" +"betainabox.com\0" "mn\0" -"mo\0komvux.se\0" -"mp\0" -"mq\0na\0from-al.com\0" -"fm.it\0futtsu.chiba.jp\0mr\0" -"ms\0nc\0" -"gov.et\0yasaka.nagano.jp\0mt\0" -"mu\0ne\0ltda\0" -"kazuno.akita.jp\0mv\0nf\0pin\0" -"mw\0ng\0" -"mishima.fukushima.jp\0mx\0" -"steam.museum\0my\0" -"group.aero\0\xe5\x80\x8b\xe4\xba\xba.hk\0" -"matsuyama.ehime.jp\0nl\0" -"no\0trana.no\0" -"minamitane.kagoshima.jp\0nr\0" -"schoenbrunn.museum\0wv.us\0" -"mombetsu.hokkaido.jp\0" -"gov.ge\0boston.museum\0schweiz.museum\0nu\0dyndns-pics.com\0" -"ureshino.mie.jp\0" -"aseral.no\0snz.ru\0" -"gov.gh\0thruhere.net\0" -"gov.gi\0" +"mo\0global\0" +"mp\0tm.ro\0" +"mq\0na\0nt.ro\0" +"yotsukaido.chiba.jp\0mr\0" +"nishiokoppe.hokkaido.jp\0ms\0nc\0" +"kira.aichi.jp\0mt\0" +"mu\0ne\0" +"mv\0nf\0tm.se\0" +"miyawaka.fukuoka.jp\0mw\0ng\0" +"mx\0servebbs.net\0" +"my\0" +"mz\0kraanghke.no\0" +"ngo.ph\0hzc.io\0" +"planetarium.museum\0nl\0onthewifi.com\0" +"k12.tr\0" +"toyako.hokkaido.jp\0" +"no\0" +"adm.br\0" +"samnanger.no\0nr\0" +"wolterskluwer\0" +"nu\0" +"midatlantic.museum\0" +"tsuruoka.yamagata.jp\0" +"radio.br\0" "nz\0" -"gjesdal.no\0" -"om\0" -"gov.gn\0" -"s3.amazonaws.com\0" -"friulivgiulia.it\0tokyo.jp\0" -"kvinesdal.no\0pa\0" -"gov.gr\0" -"asso.km\0hagebostad.no\0" -"adachi.tokyo.jp\0" -"pe\0" -"pf\0" -"bushey.museum\0" -"lt.it\0seoul.kr\0ph\0kaszuby.pl\0" -"civilaviation.aero\0int.is\0" -"genoa.it\0teshikaga.hokkaido.jp\0kawanabe.kagoshima.jp\0" -"gov.hk\0pk\0bharti\0" -"friulivegiulia.it\0ebetsu.hokkaido.jp\0pl\0" -"pm\0" -"kanonji.kagawa.jp\0pn\0star\0" -"shisui.chiba.jp\0" -"qa\0" -"tenri.nara.jp\0pr\0" -"ps\0s3-website-us-west-2.amazonaws.com\0" -"nago.okinawa.jp\0pt\0" -"gov.ie\0alstahaug.no\0" -"pw\0blogspot.com\0" -"aya.miyazaki.jp\0tamano.okayama.jp\0" -"asso.mc\0py\0" -"cuisinella\0" -"moriyoshi.akita.jp\0ikeda.gifu.jp\0berlin\0" -"gov.in\0geek.nz\0" -"okuizumo.shimane.jp\0konskowola.pl\0" -"gov.iq\0circle\0" -"gov.ir\0" -"gov.is\0" -"gov.it\0" -"nb.ca\0re\0kv.ua\0" -"zagan.pl\0" -"int.la\0v\xc3\xa5g\xc3\xa5.no\0\xe4\xb8\xad\xe6\x96\x87\xe7\xbd\x91\0" -"newhampshire.museum\0fm.no\0" -"hiji.oita.jp\0" -"gov.jo\0ro\0" -"press.aero\0int.lk\0sa\0" -"yoichi.hokkaido.jp\0kumenan.okayama.jp\0sb\0" -"rs\0sc\0is-a-linux-user.org\0" -"leg.br\0sd\0" -"jur.pro\0ru\0se\0" -"gov.kg\0rw\0sg\0" -"brescia.it\0akishima.tokyo.jp\0sh\0" -"gov.ki\0basel.museum\0si\0shacknet.nu\0" -"ami.ibaraki.jp\0sj\0" +"kicks-ass.net\0" +"of.no\0rade.no\0wloclawek.pl\0legal\0" +"om\0lib.ct.us\0" +"f.bg\0uchinada.ishikawa.jp\0" +"trogstad.no\0" +"pa\0gsm.pl\0" +"od.ua\0" +"k12.vi\0" +"pe\0wsa.gov.pl\0cr.ua\0" +"minamitane.kagoshima.jp\0pf\0pomorskie.pl\0homeunix.net\0" +"ph\0" +"khmelnytskyi.ua\0" +"fukushima.fukushima.jp\0miki.hyogo.jp\0" +"pk\0" +"b\xc3\xb8.nordland.no\0pl\0" +"pm\0panerai\0" +"newmexico.museum\0pn\0" +"qa\0*.ex.ortsinfo.at\0" +"alstahaug.no\0pr\0schaeffler\0" +"otobe.hokkaido.jp\0ps\0" +"como.it\0pt\0" +"oystre-slidre.no\0racing\0" +"trapani.it\0" +"pw\0" +"bayern\0" +"py\0" +"naamesjevuemie.no\0" +"abogado\0" +"space\0" +"svelvik.no\0" +"re\0" +"shirako.chiba.jp\0kvitsoy.no\0" +"hachinohe.aomori.jp\0" +"padua.it\0" +"kurogi.fukuoka.jp\0kanuma.tochigi.jp\0aure.no\0" +"entertainment.aero\0" +"soeda.fukuoka.jp\0" +"moseushi.hokkaido.jp\0ro\0boats\0" +"oksnes.no\0" +"sa\0" +"sb\0" +"rs\0sc\0pe.leg.br\0" +"isehara.kanagawa.jp\0sd\0" +"perso.ht\0ru\0se\0" +"otaki.chiba.jp\0" +"rw\0sg\0" +"sh\0k12.ky.us\0from-ga.com\0" +"scienceandindustry.museum\0si\0budapest\0" +"zushi.kanagawa.jp\0sj\0" "sk\0" -"sl\0" -"gov.km\0sandefjord.no\0sm\0" -"gov.kn\0sn\0" +"sl\0graphics\0" +"sm\0" +"sn\0" "so\0" -"yahaba.iwate.jp\0gov.kp\0" -"gov.la\0pharmacy\0" -"kunitachi.tokyo.jp\0gov.lb\0sr\0" -"gov.lc\0tc\0" -"hidaka.saitama.jp\0st\0td\0" -"convent.museum\0nyny.museum\0floro.no\0su\0" -"kurate.fukuoka.jp\0sv\0tf\0" -"altai.ru\0tg\0" -"ibigawa.gifu.jp\0kakogawa.hyogo.jp\0nagaokakyo.kyoto.jp\0sx\0th\0" -"gov.ky\0sy\0" -"gov.kz\0sz\0tj\0" -"gov.lk\0tk\0" -"int.mv\0tl\0" -"int.mw\0herad.no\0tm\0" -"oarai.ibaraki.jp\0tn\0" -"to\0" -"tp\0" -"gov.ma\0ua\0dnsalias.com\0" -"gov.lr\0tr\0" -"sor-fron.no\0" -"hb.cn\0gov.lt\0tt\0" -"gov.me\0healthcare\0" -"\xe9\x9d\x99\xe5\xb2\xa1.jp\0inagawa.hyogo.jp\0gov.lv\0tv\0" -"gov.mg\0tw\0ug\0" -"ad.jp\0miura.kanagawa.jp\0" -"gov.ly\0" -"tz\0" -"gov.mk\0uk\0" -"\xe4\xbd\x90\xe8\xb3\x80.jp\0okinawa.okinawa.jp\0gov.ml\0" -"archaeology.museum\0" -"biz.bb\0gov.mn\0" -"gov.mo\0" -"biz.at\0" +"beardu.no\0" +"sr\0" +"tc\0durban\0" +"st\0td\0" +"su\0" +"works.aero\0valer.hedmark.no\0sv\0tf\0" +"kikugawa.shizuoka.jp\0tg\0" +"obihiro.hokkaido.jp\0joso.ibaraki.jp\0sx\0th\0" +"sy\0media\0" +"sz\0tj\0" +"tk\0" +"tl\0" +"trading.aero\0tm\0at.eu.org\0" +"nieruchomosci.pl\0tn\0" +"to\0dyn-o-saur.com\0" +"ua\0" +"nakagusuku.okinawa.jp\0tr\0tm.za\0myftp.biz\0" +"kashima.saga.jp\0andasuolo.no\0" +"tt\0s3-eu-central-1.amazonaws.com\0" +"toride.ibaraki.jp\0lighting\0" +"b.se\0tv\0" +"tw\0ug\0" +"artsandcrafts.museum\0bievat.no\0" +"h.bg\0divtasvuodna.no\0dominic.ua\0" +"shizuoka.jp\0mitane.akita.jp\0tz\0booking\0" +"eidfjord.no\0uk\0" +"city.hu\0" +"oki.fukuoka.jp\0" +"shinjo.okayama.jp\0oracle\0" "va\0" -"iglesiascarbonia.it\0satte.saitama.jp\0gov.mr\0" -"gov.ms\0us\0vc\0" -"isshiki.aichi.jp\0" -"gov.mu\0ve\0" -"biz.az\0obira.hokkaido.jp\0gov.mv\0" -"gov.mw\0gov.ng\0vg\0" -"gov.my\0uy\0vi\0" +"nozawaonsen.nagano.jp\0" +"schoenbrunn.museum\0us\0vc\0" +"stjordalshalsen.no\0" +"ve\0from-wa.com\0" +"ts.it\0" +"vg\0" +"gs.ah.no\0uy\0vi\0gallery\0" "uz\0" -"gs.rl.no\0" -"corvette.museum\0" +"unj\xc3\xa1rga.no\0" "vn\0" -"marburg.museum\0swiss\0" -"lyngdal.no\0" -"taiki.hokkaido.jp\0gov.nr\0" -"sandoy.no\0" -"otoineppu.hokkaido.jp\0" -"vu\0" -"sr.it\0misugi.mie.jp\0wf\0" -"orland.no\0pro\0" -"can.museum\0servebbs.org\0" -"int.pt\0" -"services\0" -"s\xc3\xb8mna.no\0gov.om\0" -"higashi.fukuoka.jp\0" -"taobao\0" -"lombardia.it\0tsuwano.shimane.jp\0" -"biei.hokkaido.jp\0" -"meraker.no\0ws\0" +"nv.us\0" +"ct.us\0\xe5\xb9\xbf\xe4\xb8\x9c\0sells-for-less.com\0" +"hikawa.shimane.jp\0vu\0" +"wf\0" +"kamisu.ibaraki.jp\0grajewo.pl\0rsc.cdn77.org\0" +"yamanakako.yamanashi.jp\0red.sv\0" +"uruma.okinawa.jp\0ryuoh.shiga.jp\0tree.museum\0hotel.tz\0play\0" +"komaki.aichi.jp\0" +"ogliastra.it\0elburg.museum\0" +"averoy.no\0" +"fuchu.toyama.jp\0koenig.ru\0" +"umb.it\0hitachinaka.ibaraki.jp\0alvdal.no\0ws\0" +"berg.no\0ngo.za\0" +"cooking\0" +"okaya.nagano.jp\0" +"kuroishi.aomori.jp\0gwangju.kr\0" +"osakasayama.osaka.jp\0nationalfirearms.museum\0" +"trana.no\0" +"kamogawa.chiba.jp\0prime\0" +"union.aero\0newjersey.museum\0k12.ks.us\0coupon\0" +"nagahama.shiga.jp\0" +"settlement.museum\0" +"siracusa.it\0" +"ac.leg.br\0" +"s\xc3\xb8r-aurdal.no\0adygeya.su\0kep.tr\0" +"os\xc3\xb8yro.no\0" +"kouzushima.tokyo.jp\0malatvuopmi.no\0" +"lavangen.no\0" +"carrier.museum\0" +"uslivinghistory.museum\0homedns.org\0" +"hamada.shimane.jp\0" +"vallee-aoste.it\0vega.no\0yt\0" +"ishigaki.okinawa.jp\0" +"kv\xc3\xa6""fjord.no\0" +"emergency.aero\0on.ca\0m\xc3\xa1tta-v\xc3\xa1rjjat.no\0tj\xc3\xb8me.no\0" +"politie\0" +"zm\0cloud\0" +"washingtondc.museum\0" +"tromsa.no\0xen.prgmr.com\0" +"urakawa.hokkaido.jp\0d.se\0" +"chihayaakasaka.osaka.jp\0" +"j.bg\0stjohn.museum\0audio\0" +"qld.edu.au\0kitanakagusuku.okinawa.jp\0\xe7\xbd\x91\xe7\xab\x99\0" +"tw.cn\0" +"no-ip.info\0" +"kusu.oita.jp\0" +"veneto.it\0namikata.ehime.jp\0higashikurume.tokyo.jp\0iide.yamagata.jp\0" +"ddr.museum\0" +"cv.ua\0" +"cc.ga.us\0" +"kyotango.kyoto.jp\0" +"seto.aichi.jp\0" +"takaharu.miyazaki.jp\0" +"is.it\0" +"cz.it\0\xe4\xbd\x90\xe8\xb3\x80.jp\0" +"yoshinogari.saga.jp\0kristiansand.no\0zarow.pl\0no-ip.org\0" +"drangedal.no\0amfam\0" +"trd.br\0adygeya.ru\0\xe0\xae\x87\xe0\xae\xa8\xe0\xaf\x8d\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xaf\xe0\xae\xbe\0frontier\0" +"tamano.okayama.jp\0" +"oh.us\0" +"assassination.museum\0" +"afjord.no\0" +"napoli.it\0komatsu.ishikawa.jp\0pr.leg.br\0" +"shishikui.tokushima.jp\0" +"taranto.it\0!city.yokohama.jp\0higashiomi.shiga.jp\0" +"erimo.hokkaido.jp\0opole.pl\0" +"berlin\0" +"kamisato.saitama.jp\0rindal.no\0" +"trustee.museum\0stada\0" +"accident-investigation.aero\0" +"hokuto.yamanashi.jp\0" +"ownprovider.com\0" +"trainer.aero\0" +"koshu.yamanashi.jp\0countryestate.museum\0astrakhan.ru\0" +"hotel.lk\0direct\0does-it.net\0" +"hatoyama.saitama.jp\0" +"asahi.ibaraki.jp\0norilsk.ru\0" +"pizza\0" +"stryn.no\0" +"\xd0\xb5\xd1\x8e\0" +"audnedaln.no\0supply\0" +"shimamoto.osaka.jp\0" +"saito.miyazaki.jp\0" +"stord.no\0" +"nonoichi.ishikawa.jp\0likescandy.com\0" +"valled-aosta.it\0" +"biratori.hokkaido.jp\0" +"trentinosued-tirol.it\0" +"television.museum\0" +"heimatunduhren.museum\0minnesota.museum\0" +"narashino.chiba.jp\0aejrie.no\0" +"f.se\0" +"ol.no\0" +"l.bg\0ruovat.no\0" +"yatsuka.shimane.jp\0" +"tsushima.aichi.jp\0" +"upow.gov.pl\0" +"nantan.kyoto.jp\0" +"airguard.museum\0" +"lecco.it\0" +"gorlice.pl\0" +"lorenskog.no\0" +"kursk.ru\0" +"perm.ru\0" +"\xe7\xa6\x8f\xe5\xb3\xb6.jp\0oga.akita.jp\0kiyosato.hokkaido.jp\0ouchi.saga.jp\0aaa\0" +"tjome.no\0" +"wakkanai.hokkaido.jp\0\xe8\x87\xba\xe7\x81\xa3\0" +"is-very-nice.org\0""3utilities.com\0" +"compute-1.amazonaws.com\0" +"crotone.it\0" +"toyohashi.aichi.jp\0soja.okayama.jp\0" +"rel.ht\0abb\0" +"abc\0" +"chikusei.ibaraki.jp\0tunes\0" +"hotel.hu\0bofa\0dnsdojo.org\0" +"mamurogawa.yamagata.jp\0" +"bindal.no\0kv\xc3\xa6nangen.no\0" +"medical.museum\0" +"sarufutsu.hokkaido.jp\0" +"2000.hu\0n\xc3\xa6r\xc3\xb8y.no\0" +"fukui.jp\0vipsinaapp.com\0" +"oharu.aichi.jp\0" +"lebtimnetz.de\0" +"bushey.museum\0" +"kashiwazaki.niigata.jp\0london\0" +"francaise.museum\0k12.wa.us\0" +"s3.ap-northeast-2.amazonaws.com\0" +"desa.id\0railroad.museum\0" +"r\xc3\xb8ros.no\0" +"pb.ao\0" +"bologna.it\0" +"aco\0" +"or.at\0" +"gratis\0" +"anpachi.gifu.jp\0" +"uenohara.yamanashi.jp\0" +"or.bi\0" +"\xe4\xb8\xad\xe5\x9b\xbd\0" +"from-mt.com\0from-nd.com\0" +"hobol.no\0perso.sn\0attorney\0" +"mitaka.tokyo.jp\0" +"ads\0kinder\0" +"h.se\0" +"or.ci\0s\xc3\xb8gne.no\0aeg\0" +"veg\xc3\xa5rshei.no\0\xe4\xb8\xad\xe5\x9c\x8b\0" +"n.bg\0ureshino.mie.jp\0" +"buzen.fukuoka.jp\0" +"ora.gunma.jp\0" +"unjarga.no\0au.eu.org\0be.eu.org\0" +"powiat.pl\0" +"perso.tn\0" +"kawaminami.miyazaki.jp\0dnipropetrovsk.ua\0" +"or.cr\0osteroy.no\0" +"ooshika.nagano.jp\0boehringer\0" +"kaho.fukuoka.jp\0missoula.museum\0lur\xc3\xb8y.no\0cc.al.us\0" +"docs\0" +"klabu.no\0" +"chita.ru\0" +"s3.cn-north-1.amazonaws.com.cn\0" +"foundation.museum\0l\xc3\xa1hppi.no\0comsec\0mcdonalds\0" +"afl\0" +"pesarourbino.it\0asahi.chiba.jp\0" +"iris.arpa\0inagawa.hyogo.jp\0takatsuki.osaka.jp\0" +"shiso.hyogo.jp\0" +"chofu.tokyo.jp\0viking.museum\0" +"\xc3\xa1k\xc5\x8boluokta.no\0" +"higashinaruse.akita.jp\0" +"vaapste.no\0yachts\0" +"friuli-vegiulia.it\0andria-barletta-trani.it\0grandrapids.museum\0" +"taiki.mie.jp\0dyndns.tv\0" +"gob.ar\0tools\0" +"mup.gov.pl\0" +"uto.kumamoto.jp\0palmsprings.museum\0" +"\xd1\x80\xd1\x84\0" +"akrehamn.no\0" +"caserta.it\0" +"mordovia.su\0" +"sld.do\0" +"farmers\0search\0" +"gob.bo\0nishikatsura.yamanashi.jp\0davvesiida.no\0" +"bialowieza.pl\0k12.la.us\0" +"frogn.no\0g\xc3\xa1ls\xc3\xa1.no\0sinaapp.com\0" +"vic.gov.au\0aero.tt\0aig\0" +"\xe8\xb0\xb7\xe6\xad\x8c\0" +"rel.pl\0" +"annaka.gunma.jp\0izumi.osaka.jp\0" +"tobetsu.hokkaido.jp\0ina.saitama.jp\0blogdns.net\0bg.eu.org\0" +"gob.cl\0capebreton.museum\0" +"embroidery.museum\0" +"miyako.fukuoka.jp\0" +"weibo\0" +"pol.dz\0mjondalen.no\0doha\0ptplus.fit\0" +"plus\0" +"yoshimi.saitama.jp\0\xe7\xa7\xbb\xe5\x8a\xa8\0is-a-republican.com\0al.leg.br\0" +"aero.mv\0" +"labour.museum\0\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x82\xe0\xae\xb0\xe0\xaf\x8d\0bond\0" +"kaluga.ru\0" +"koka.shiga.jp\0kicks-ass.org\0" +"ono.fukushima.jp\0takasago.hyogo.jp\0asahi.nagano.jp\0kadoma.osaka.jp\0gives\0dyndns.ws\0" +"gob.do\0" +"or.id\0tosashimizu.kochi.jp\0" +"bel.tr\0" +"p.bg\0" +"gob.ec\0" +"kindle\0" +"zp.ua\0" +"homeunix.org\0" +"miyota.nagano.jp\0" +"cc.ri.us\0" +"medecin.km\0kaluga.su\0" +"aisho.shiga.jp\0" +"mordovia.ru\0" +"nowaruda.pl\0" +"book\0" +"or.it\0" +"is-a-patsfan.org\0" +"sigdal.no\0" +"gob.es\0" +"\xe7\xa6\x8f\xe5\xb2\xa1.jp\0" +"lindas.no\0" +"potenza.it\0" +"nsk.ru\0" +"tsuiki.fukuoka.jp\0" +"or.jp\0" +"sk\xc3\xa1nit.no\0" +"b\xc3\xa1id\xc3\xa1r.no\0" +"lea\xc5\x8bgaviika.no\0" +"rifu.miyagi.jp\0" +"ibaraki.jp\0crown\0is-a-knight.org\0" +"mincom.tn\0" +"diamonds\0" +"coach\0" +"pol.ht\0" +"nemuro.hokkaido.jp\0" +"or.kr\0" +"rost.no\0" +"fuel.aero\0gob.gt\0kitagata.saga.jp\0" +"is-a-student.com\0" +"incheon.kr\0" +"idv.hk\0muroto.kochi.jp\0" +"valle-d-aosta.it\0modum.no\0" +"gob.hn\0" +"servecounterstrike.com\0" +"repbody.aero\0ed.ao\0vagan.no\0" +"himeshima.oita.jp\0" +"tajimi.gifu.jp\0takamori.nagano.jp\0" +"wif.gov.pl\0" +"anz\0" +"aol\0hr.eu.org\0" +"or.na\0" +"gildesk\xc3\xa5l.no\0" +"yahiko.niigata.jp\0" +"or.mu\0" +"rep.kp\0" +"shimada.shizuoka.jp\0" +"yokkaichi.mie.jp\0" +"santabarbara.museum\0republican\0*.cns.joyent.com\0" +"l.se\0" +"r.bg\0ed.ci\0surgut.ru\0" +"app\0" +"fjell.no\0" +"kurashiki.okayama.jp\0" +"york.museum\0" +"konskowola.pl\0dn.ua\0" +"green\0" +"ed.cr\0" +"backplaneapp.io\0" +"higashimurayama.tokyo.jp\0servebbs.org\0" +"yokosuka.kanagawa.jp\0tsaritsyn.ru\0" +"ot.it\0pd.it\0livinghistory.museum\0sandcats.io\0" +"bar\0" +"bbc\0" +"shima.mie.jp\0" +"shimonita.gunma.jp\0philadelphia.museum\0" +"show.aero\0carboniaiglesias.it\0koryo.nara.jp\0" +"giehtavuoatna.no\0" +"nadex\0" +"cieszyn.pl\0catholic\0" +"yamatotakada.nara.jp\0lebesby.no\0art\0bbt\0" +"or.pw\0" +"uconnect\0" +"paleo.museum\0bcg\0\xe9\x80\x9a\xe8\xb2\xa9\0" +"vibovalentia.it\0nobeoka.miyazaki.jp\0tsurugashima.saitama.jp\0" +"basilicata.it\0\xd0\xba\xd0\xb0\xd1\x82\xd0\xbe\xd0\xbb\xd0\xb8\xd0\xba\0" +"agric.za\0bcn\0" +"frogans\0" +"babia-gora.pl\0" +"sld.pa\0cruise\0" +"minamiechizen.fukui.jp\0rmit\0" +"walter\0" +"pug.it\0tono.iwate.jp\0joshkar-ola.ru\0" +"gob.mx\0hadsel.no\0hashbang.sh\0" +"gob.ni\0" +"fst.br\0" +"pyatigorsk.ru\0" +"masaki.ehime.jp\0" +"emp.br\0" +"fitjar.no\0" +"ashibetsu.hokkaido.jp\0uzhgorod.ua\0komatsu\0xfinity\0cloudcontrolapp.com\0" +"jorpeland.no\0" +"parti.se\0" +"dr.na\0h\xc3\xa1""bmer.no\0" +"biella.it\0" +"oristano.it\0" +"atsugi.kanagawa.jp\0" +"coal.museum\0stordal.no\0" +"gob.pa\0" +"grosseto.it\0bet\0" +"viterbo.it\0jobs\0rollag.no\0" +"or.th\0" +"shonai.fukuoka.jp\0yono.saitama.jp\0kunstsammlung.museum\0gob.pe\0n.se\0" +"dontexist.com\0" +"t.bg\0" +"horse\0" +"kashiwa.chiba.jp\0gob.pk\0zt.ua\0" +"cc.wv.us\0" +"food\0health\0" +"vladimir.su\0dp.ua\0cc.md.us\0no-ip.net\0" +"cc.ar.us\0" +"tas.au\0\xe5\xb1\xb1\xe6\xa2\xa8.jp\0or.ug\0" +"tomisato.chiba.jp\0ibaraki.osaka.jp\0farmers.museum\0" +"\xe6\xbb\x8b\xe8\xb3\x80.jp\0yokote.akita.jp\0ine.kyoto.jp\0" +"or.tz\0" +"monticello.museum\0" +"sakawa.kochi.jp\0nakagawa.tokushima.jp\0" +"saitama.jp\0" +"ozu.ehime.jp\0college\0" +"pharmacy.museum\0" +"press.museum\0r\xc3\xb8yrvik.no\0gist.githubcloud.com\0" +"slattum.no\0" +"umi.fukuoka.jp\0" +"or.us\0axa\0" +"usa.oita.jp\0drammen.no\0" +"aws\0" +"e164.arpa\0" +"ed.jp\0" +"spjelkavik.no\0brasilia.me\0" +"trani-andria-barletta.it\0kasumigaura.ibaraki.jp\0studio\0" +"\xe3\x82\xaf\xe3\x83\xa9\xe3\x82\xa6\xe3\x83\x89\0" +"travelers\0" +"swiebodzin.pl\0" +"kure.hiroshima.jp\0" +"molise.it\0bid\0" +"iwatsuki.saitama.jp\0" +"pup.gov.pl\0" +"nhlfan.net\0" +"pol.tr\0" +"kyowa.akita.jp\0oum.gov.pl\0yolasite.com\0" +"bio\0" +"ford\0" +"rygge.no\0vladimir.ru\0" +"k12.wy.us\0servesarcasm.com\0" +"toyooka.hyogo.jp\0" +"nabari.mie.jp\0" +"gob.sv\0" +"biz\0nachikatsuura.wakayama.jp\0" +"*.kitakyushu.jp\0loan\0azure-mobile.net\0" +"chuo.fukuoka.jp\0satsumasendai.kagoshima.jp\0" +"compute.amazonaws.com\0" +"oz.au\0" +"badaddja.no\0" +"akabira.hokkaido.jp\0" +"kashiwara.osaka.jp\0idv.tw\0" +"itakura.gunma.jp\0" +"association.museum\0is-a-personaltrainer.com\0" +"ringerike.no\0" +"p.se\0lib.or.us\0" +"folkebibl.no\0" +"v.bg\0" +"uwajima.ehime.jp\0maserati\0" +"oskol.ru\0gob.ve\0z-2.compute-1.amazonaws.com\0" +"urasoe.okinawa.jp\0" +"kumagaya.saitama.jp\0warszawa.pl\0" +"dr.tr\0" +"can.museum\0" +"skanit.no\0" +"ap-northeast-1.compute.amazonaws.com\0" +"atsuma.hokkaido.jp\0mitou.yamaguchi.jp\0" +"va.it\0isesaki.gunma.jp\0" +"rhcloud.com\0" +"mitsue.nara.jp\0" +"columbia.museum\0" +"shimizu.hokkaido.jp\0\xd9\x87\xd9\x85\xd8\xb1\xd8\xa7\xd9\x87\0" +"cadaques.museum\0" +"is-a-bruinsfan.org\0sells-it.net\0" +"chungnam.kr\0" +"akashi.hyogo.jp\0" +"nsw.au\0" +"barum.no\0" +"ms.leg.br\0" +"bms\0" +"dnsdojo.net\0" +"yomitan.okinawa.jp\0" +"bmw\0" +"\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0" +"villas\0" +"endofinternet.net\0" +"haibara.shizuoka.jp\0bnl\0" +"ed.pw\0" +"yamaguchi.jp\0" +"medecin.fr\0" +"suzuka.mie.jp\0" +"tamaki.mie.jp\0" +"nirasaki.yamanashi.jp\0" +"catanzaro.it\0" +"nordre-land.no\0" +"ustka.pl\0" +"bom\0" +"nic.in\0" +"froya.no\0k12.mi.us\0boo\0" +"station.museum\0is-a-blogger.com\0" +"coffee\0loft\0" +"mt.leg.br\0" +"tires\0" +"iwamizawa.hokkaido.jp\0bot\0" +"box\0" +"kamo.niigata.jp\0nativeamerican.museum\0" +"friuli-ve-giulia.it\0from-or.com\0" +"ohira.tochigi.jp\0" +"bomlo.no\0\xd8\xa7\xd8\xa8\xd9\x88\xd8\xb8\xd8\xa8\xd9\x8a\0" +"cab\0" +"nagai.yamagata.jp\0" +"czeladz.pl\0" +"tonaki.okinawa.jp\0" +"dentist\0" +"communication.museum\0fusa.no\0condos\0host\0" +"lib.vi.us\0cal\0ufcfan.org\0" +"emr.it\0va.no\0r.se\0cam\0" +"gushikami.okinawa.jp\0sayama.saitama.jp\0" +"sosa.chiba.jp\0geology.museum\0" +"x.bg\0" +"fyresdal.no\0cba\0noip.us\0" +"car\0" +"\xe7\xbe\xa4\xe9\xa6\xac.jp\0minobu.yamanashi.jp\0" +"cat\0js.cn\0" +"publ.pt\0" +"assabu.hokkaido.jp\0cafe\0" +"sumoto.kumamoto.jp\0ar.com\0from-vt.com\0" +"vc.it\0chiyoda.tokyo.jp\0" +"cbn\0" +"cbs\0" +"correios-e-telecomunica\xc3\xa7\xc3\xb5""es.museum\0" +"asmatart.museum\0shell\0" +"yamato.kumamoto.jp\0azure\0compare\0" +"*.nagoya.jp\0music.museum\0farsund.no\0" +"il.eu.org\0" +"\xe6\xa0\x83\xe6\x9c\xa8.jp\0tanagura.fukushima.jp\0mibu.tochigi.jp\0" +"\xc3\xb8rland.no\0" +"nt.edu.au\0" +"s3-ap-northeast-2.amazonaws.com\0" +"tama.tokyo.jp\0" +"kosai.shizuoka.jp\0from-in.com\0" +"forsale\0alpha-myqnapcloud.com\0" +"nagano.nagano.jp\0taira.toyama.jp\0schmidt\0" +"trade\0" +"ceb\0" +"meloy.no\0" +"casino.hu\0tatar\0" +"auction\0" +"reviews\0" +"s\xc3\xb8r-fron.no\0vaksdal.no\0" +"yabu.hyogo.jp\0hu.eu.org\0ie.eu.org\0" +"hopto.org\0" +"kasukabe.saitama.jp\0" +"ceo\0logoip.de\0" +"soo.kagoshima.jp\0cfa\0" +"hiroshima.jp\0daito.osaka.jp\0baltimore.museum\0" +"minamioguni.kumamoto.jp\0" +"tarui.gifu.jp\0*.sch.uk\0cfd\0" +"matsushima.miyagi.jp\0" +"kerrylogistics\0" +"numata.gunma.jp\0" +"buy\0" +"hachioji.tokyo.jp\0us.na\0" +"flanders.museum\0irkutsk.ru\0seven\0" +"matta-varjjat.no\0" +"fr\xc3\xa6na.no\0chtr.k12.ma.us\0" +"blanco\0emerson\0" +"matsubushi.saitama.jp\0t.se\0" +"shintoku.hokkaido.jp\0" +"z.bg\0" +"vinnica.ua\0" +"\xe7\xbb\x84\xe7\xbb\x87\xe6\x9c\xba\xe6\x9e\x84\0" "soka.saitama.jp\0" -"wildlife.museum\0lib.tx.us\0" -"shonai.fukuoka.jp\0gov.ph\0" -"sakaki.nagano.jp\0" -"copenhagen.museum\0gov.pk\0" -"gov.pl\0" -"blue\0christmas\0" -"gov.pn\0" +"cal.it\0" +"cc.sc.us\0" +"wroclaw.pl\0" +"*.cryptonomic.net\0" +"sejny.pl\0deals\0\xd9\x85\xd9\x88\xd8\xa8\xd8\xa7\xd9\x8a\xd9\x84\xd9\x8a\0" +"ve.it\0\xe7\xa7\x8b\xe7\x94\xb0.jp\0matsubara.osaka.jp\0americanantiques.museum\0" +"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd9\x87\0" +"ham-radio-op.net\0" +"forum.hu\0otaru.hokkaido.jp\0s\xc3\xa1l\xc3\xa1t.no\0skjervoy.no\0" +"mitsuke.niigata.jp\0jevnaker.no\0iki.fi\0" +"company\0" +"kami.miyagi.jp\0" +"va.us\0is-a-green.com\0" +"call\0" +"ballooning.aero\0hirogawa.wakayama.jp\0taipei\0" +"aogashima.tokyo.jp\0nationalheritage.museum\0aarp\0" +"lund.no\0loten.no\0tirol\0" +"dell-ogliastra.it\0" +"dental\0" +"kitamoto.saitama.jp\0" +"aseral.no\0" +"miyake.nara.jp\0orenburg.ru\0" +"kamaishi.iwate.jp\0camp\0" +"bzh\0" +"nic.tj\0" +"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd8\xa9\0" +"is-a-designer.com\0" +"fylkesbibl.no\0" +"tochigi.jp\0" +"sevastopol.ua\0k12.me.us\0" +"from-ks.com\0" +"k12.as.us\0" +"sobetsu.hokkaido.jp\0oyamazaki.kyoto.jp\0\xd9\xbe\xd8\xa7\xd9\x83\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86\0" +"nhs.uk\0" +"awaji.hyogo.jp\0" +"\xe6\xb2\x96\xe7\xb8\x84.jp\0" +"trysil.no\0" +"kariwa.niigata.jp\0" +"tajiri.osaka.jp\0" +"calvinklein\0genting\0fbx-os.fr\0" +"pp.az\0" +"traeumtgerade.de\0" +"nedre-eiker.no\0amica\0" +"bykle.no\0" +"tsuwano.shimane.jp\0arteducation.museum\0" +"tanohata.iwate.jp\0nose.osaka.jp\0" +"pohl\0z-1.compute-1.amazonaws.com\0" +"tromso.no\0" +"venice.it\0noip.me\0" +"builders\0" +"eu.com\0" +"asso.eu.org\0" +"toray\0" +"nagaokakyo.kyoto.jp\0" +"flights\0" +"kumamoto.kumamoto.jp\0" +"cc.az.us\0" +"journalism.museum\0" +"\xe8\xaf\xba\xe5\x9f\xba\xe4\xba\x9a\0" +"omi.niigata.jp\0" +"lodi.it\0pn.it\0" +"usuki.oita.jp\0helsinki.museum\0" +"\xed\x95\x9c\xea\xb5\xad\0" +"moriyoshi.akita.jp\0" +"ikeda.nagano.jp\0" +"care\0" +"naturhistorisches.museum\0" +"friuli-vgiulia.it\0cruises\0" +"hikone.shiga.jp\0" +"paragliding.aero\0hirata.fukushima.jp\0chiyoda.gunma.jp\0sumoto.hyogo.jp\0" +"noda.chiba.jp\0texas.museum\0love\0" +"scientist.aero\0hurum.no\0" +"casa\0ubank\0" +"esurance\0goip.de\0" +"sakaiminato.tottori.jp\0burghof.museum\0cars\0" +"shiogama.miyagi.jp\0" +"case\0" +"webhop.info\0gr.eu.org\0" +"com\0\xe3\x82\xb9\xe3\x83\x88\xe3\x82\xa2\0" +"school.na\0cash\0" +"toyoake.aichi.jp\0" +"discovery.museum\0" +"uppo.gov.pl\0" +"frosta.no\0" +"author.aero\0" +"gotemba.shizuoka.jp\0nesodden.no\0" +"asker.no\0fhv.se\0\xe7\xbd\x91\xe5\xba\x97\0" +"obuse.nagano.jp\0aarborte.no\0" +"museet.museum\0golffan.us\0" +"altai.ru\0komvux.se\0\xd0\xbe\xd0\xbd\xd0\xbb\xd0\xb0\xd0\xb9\xd0\xbd\0" +"marche.it\0guovdageaidnu.no\0" +"grong.no\0" +"*.kawasaki.jp\0" +"itoigawa.niigata.jp\0travel.pl\0" +"pfizer\0" +"\xd0\xb4\xd0\xb5\xd1\x82\xd0\xb8\0" +"dad\0" +"hanggliding.aero\0shimabara.nagasaki.jp\0environment.museum\0" +"etc.br\0" +"school.nz\0statefarm\0" +"satte.saitama.jp\0gol.no\0" +"cherkassy.ua\0" +"lier.no\0" +"laz.it\0" +"matsuyama.ehime.jp\0kamchatka.ru\0wales\0" +"shiroishi.saga.jp\0" +"tokke.no\0" +"dyndns-web.com\0" +"day\0" +"quebec\0" +"cri.nz\0x.se\0report\0" +"lib.fl.us\0able\0" +"l\xc3\xb8ten.no\0" +"art.museum\0crs\0csc\0" +"pl.ua\0samsung\0" +"cc.mn.us\0securitytactics.com\0" +"yonaguni.okinawa.jp\0rennebu.no\0cc.gu.us\0" +"vi.it\0" +"*.alwaysdata.net\0" +"en.it\0wedding\0" +"mutuelle\0" +"sorum.no\0kiev.ua\0" +"office-on-the.net\0" +"hadano.kanagawa.jp\0krager\xc3\xb8.no\0" +"journalist.aero\0ogata.akita.jp\0" +"sciencecenters.museum\0" +"barcelona\0kuokgroup\0" +"shingu.wakayama.jp\0" +"trentinoaltoadige.it\0gallery.museum\0game\0" +"\xe6\x94\xbf\xe5\xba\x9c.hk\0" +"dds\0" +"uvic.museum\0from-me.org\0" +"odo.br\0\xe7\xbd\x91\xe7\xbb\x9c.cn\0\xe9\x9d\x99\xe5\xb2\xa1.jp\0nordreisa.no\0engineer\0" +"kaizuka.osaka.jp\0trolley.museum\0" +"travel.tt\0" +"vda.it\0" +"bible.museum\0" +"miyoshi.hiroshima.jp\0kg.kr\0" +"dabur\0" +"toyoura.hokkaido.jp\0udmurtia.ru\0" +"leksvik.no\0bentley\0jprs\0" +"dev\0" +"trader.aero\0kochi.kochi.jp\0" +"kamifurano.hokkaido.jp\0" +"australia.museum\0k12.ma.us\0" +"tenkawa.nara.jp\0" +"bizen.okayama.jp\0" +"oumu.hokkaido.jp\0" +"from-ma.com\0" +"wiki.br\0porn\0" +"vads\xc3\xb8.no\0" +"leirvik.no\0" +"yasu.shiga.jp\0" +"tank.museum\0k\xc3\xa5""fjord.no\0" +"yufu.oita.jp\0" +"se.net\0hopto.me\0" +"okinoshima.shimane.jp\0" +"mino.gifu.jp\0bo.telemark.no\0" +"fukuroi.shizuoka.jp\0" +"nes.akershus.no\0post\0" +"lib.va.us\0" +"z.se\0" +"uryu.hokkaido.jp\0" +"dhl\0" +"gon.pk\0" +"fin.ec\0adult.ht\0" +"doesntexist.com\0" +"kaisei.kanagawa.jp\0" +"sk\xc3\xa5nland.no\0" +"versailles.museum\0olayan\0" +"tendo.yamagata.jp\0" +"pr.it\0gs.mr.no\0" +"room\0" +"serveexchange.com\0" +"beauxarts.museum\0" +"dynns.com\0" +"baidu\0" +"\xe7\xbd\x91\xe7\xbb\x9c.hk\0" +"newspaper.museum\0" +"historical.museum\0\xe7\xbd\x91\xe7\xbb\x9c\0" +"odate.akita.jp\0diy\0" +"railway.museum\0masoy.no\0" +"is-a-player.com\0" +"sport.hu\0sciencecenter.museum\0" +"saltdal.no\0" +"playstation\0" +"atami.shizuoka.jp\0" +"download\0" +"chambagri.fr\0sar.it\0hvaler.no\0" +"haboro.hokkaido.jp\0tranoy.no\0" +"lapy.pl\0" +"iselect\0yamaxun\0" +"vestre-toten.no\0phone\0" +"bryansk.su\0" +"navuotna.no\0" +"dscloud.me\0" +"oyer.no\0bielawa.pl\0" +"pp.ru\0pp.se\0volvo\0" +"kuki.saitama.jp\0free\0" +"newport.museum\0" +"fujiyoshida.yamanashi.jp\0" +"amsterdam\0" +"sund.no\0" +"urayasu.chiba.jp\0" +"nflfan.org\0" +"uki.kumamoto.jp\0" +"etisalat\0" +"fuchu.hiroshima.jp\0" +"logoip.com\0" +"gop.pk\0" +"asago.hyogo.jp\0higashimatsuyama.saitama.jp\0cbre\0" +"pp.ua\0" +"nakagawa.fukuoka.jp\0luxembourg.museum\0" +"cc.hi.us\0" +"dnp\0" +"kurotaki.nara.jp\0ogose.saitama.jp\0\xd0\xbe\xd0\xb1\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0" +"naha.okinawa.jp\0" +"pt.it\0kasamatsu.gifu.jp\0" +"dog\0" +"minamiminowa.nagano.jp\0" +"tcm.museum\0is-uberleet.com\0" +"depot.museum\0" +"bryansk.ru\0" +"vi.us\0" +"gov.ac\0web.co\0anquan\0" +"maibara.shiga.jp\0dot\0" +"gov.ae\0kyotanabe.kyoto.jp\0" +"gov.af\0tadaoka.osaka.jp\0codes\0" +"keymachine.de\0" +"gov.al\0" +"from-ct.com\0from-la.net\0" +"kofu.yamanashi.jp\0" +"baseball.museum\0" +"gov.ba\0" +"gov.ar\0gov.bb\0fujikawa.yamanashi.jp\0" +"gov.as\0web.do\0" +"\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\0rexroth\0" +"gov.au\0" +"gov.bf\0" +"hamburg.museum\0" +"gov.bh\0copenhagen.museum\0" +"namsos.no\0" +"gov.az\0saku.nagano.jp\0" +"gov.bm\0" +"shimane.jp\0" +"gov.bo\0" +"k12.nm.us\0" +"gov.br\0" +"gov.bs\0film.museum\0maif\0yodobashi\0" +"gov.bt\0gov.cd\0eat\0" +"gbiz\0" +"eti.br\0" +"gov.by\0" +"ecn.br\0gov.bz\0" +"wa.au\0" +"gov.cl\0" +"gov.cm\0tsuno.kochi.jp\0" +"gov.cn\0endofinternet.org\0" +"gov.co\0maison\0" +"\xc3\xb8ygarden.no\0" +"rogers\0" +"iwafune.tochigi.jp\0" +"photo\0" +"gov.cu\0\xd8\xa8\xd8\xa7\xd8\xb2\xd8\xa7\xd8\xb1\0" +"calabria.it\0fuso.aichi.jp\0" +"g\xc3\xa1ivuotna.no\0" +"council.aero\0gov.cx\0" +"gov.cy\0kusatsu.gunma.jp\0kikonai.hokkaido.jp\0" +"kitayama.wakayama.jp\0" +"shinshinotsu.hokkaido.jp\0\xe7\xb5\x84\xe7\xb9\x94.tw\0" +"gov.dm\0timekeeping.museum\0" +"communications.museum\0" +"gov.do\0pacific.museum\0eco\0" +"imabari.ehime.jp\0" +"gov.ec\0" +"qh.cn\0gov.ee\0" +"salangen.no\0" +"gov.eg\0" +"boleslawiec.pl\0" +"cc.mt.us\0cc.nd.us\0" +"gov.dz\0" +"computerhistory.museum\0nes.buskerud.no\0" +"eidsvoll.no\0" +"pv.it\0\xe5\x95\x86\xe6\xa0\x87\0" +"gs.hm.no\0" +"qld.au\0gov.et\0" +"edu\0scotland.museum\0" +"takatsuki.shiga.jp\0dtv\0" +"web.id\0" +"pr.us\0pantheonsite.io\0" +"kirov.ru\0" +"fujioka.gunma.jp\0" +"nesseby.no\0" +"narita.chiba.jp\0" +"hurdal.no\0" +"travelersinsurance\0" +"baidar.no\0" +"\xc3\xb8yer.no\0" +"gov.ge\0n\xc3\xa5\xc3\xa5mesjevuemie.no\0" +"writesthisblog.com\0" +"gov.gh\0" +"gov.gi\0california.museum\0" +"kushima.miyazaki.jp\0" +"house\0zuerich\0" +"shinjo.yamagata.jp\0" +"gov.gn\0" +"servebbs.com\0" +"crafts.museum\0" +"gov.gr\0dvr\0" +"photos\0" +"dwg\0town\0" +"friuliv-giulia.it\0accenture\0" +"gov.gy\0gujo.gifu.jp\0minamiaiki.nagano.jp\0" +"konan.shiga.jp\0" +"gov.hk\0lamer\0" +"okoppe.hokkaido.jp\0grocery\0" +"honjyo.akita.jp\0" +"catering.aero\0eniwa.hokkaido.jp\0adac\0" +"higashiizumo.shimane.jp\0oyabe.toyama.jp\0" +"\xc3\xa5rdal.no\0" +"alpha.bounty-full.com\0" +"pgafan.net\0" +"sanofi\0" +"gov.ie\0osaka\0" +"\xc3\xa5s.no\0" +"minamata.kumamoto.jp\0is.gov.pl\0" +"scrapping.cc\0" +"skaun.no\0" +"pictet\0" +"gov.il\0fin.tn\0" +"gov.in\0" +"web.lk\0" +"shiroi.chiba.jp\0" +"gov.iq\0" +"gov.ir\0" +"gov.is\0" +"gov.it\0" +"fukudomi.saga.jp\0boston.museum\0frog.museum\0moskenes.no\0" +"gamagori.aichi.jp\0fuchu.tokyo.jp\0vote\0" +"lib.pr.us\0" +"toys\0" +"gov.jo\0birthplace.museum\0" +"minamiuonuma.niigata.jp\0" +"huissier-justice.fr\0luxury\0" +"voto\0" +"community.museum\0silk.museum\0namsskogan.no\0" +"higashiagatsuma.gunma.jp\0" +"gov.kg\0\xe4\xbc\x81\xe4\xb8\x9a\0" +"gov.ki\0" +"web.nf\0" +"aramco\0" +"gov.km\0web.ni\0" +"gov.kn\0bodo.no\0dyndns-pics.com\0" +"makurazaki.kagoshima.jp\0" +"fukusaki.hyogo.jp\0gov.kp\0" +"cesena-forli.it\0gov.la\0" +"mifune.kumamoto.jp\0gov.lb\0" +"gov.lc\0systems\0" +"tr\xc3\xa6na.no\0" +"gov.ky\0salem.museum\0" +"saroma.hokkaido.jp\0gov.kz\0" +"gov.lk\0" +"kunneppu.hokkaido.jp\0pila.pl\0fareast.ru\0" +"gaivuotna.no\0" +"investments\0\xe3\x81\xbf\xe3\x82\x93\xe3\x81\xaa\0" +"shibata.niigata.jp\0kongsvinger.no\0" +"gov.ma\0tickets\0" +"gov.lr\0" +"mulhouse.museum\0nuernberg.museum\0" +"gov.lt\0b\xc3\xa1hcavuotna.no\0" +"gov.me\0" +"gov.lv\0" +"gov.mg\0kommunalforbund.se\0is-very-evil.org\0" +"l\xc3\xb8""dingen.no\0" +"gov.ly\0" +"gov.mk\0" +"gov.ml\0" +"total\0" +"gov.mn\0" +"gov.mo\0web.pk\0" +"gov.mr\0\xd8\xa8\xda\xbe\xd8\xa7\xd8\xb1\xd8\xaa\0" +"gov.ms\0jefferson.museum\0" +"tuscany.it\0" +"friulivegiulia.it\0kitahata.saga.jp\0gov.mu\0" +"gov.mv\0" +"gov.mw\0gov.ng\0zgrad.ru\0physio\0" +"istanbul\0secure\0" +"isahaya.nagasaki.jp\0gov.my\0lebork.pl\0" +"veterinaire.km\0gov.mz\0" +"kanagawa.jp\0" +"sado.niigata.jp\0fineart.museum\0" +"kashihara.nara.jp\0" +"gov.nr\0" +"narviika.no\0" +"kunigami.okinawa.jp\0agakhan\0" +"alessandria.it\0" +"tolga.no\0" +"izumisano.osaka.jp\0contact\0" +"\xe5\xaf\x8c\xe5\xb1\xb1.jp\0namegawa.saitama.jp\0" +"miyoshi.aichi.jp\0finearts.museum\0" +"gov.om\0" +"zone\0" +"neues.museum\0" +"syzran.ru\0bargains\0" +"daegu.kr\0" +"lib.wi.us\0" +"ambulance.aero\0gov.ph\0" +"hsbc\0icbc\0" +"kusatsu.shiga.jp\0gov.pk\0" +"gov.pl\0krasnoyarsk.ru\0fr.eu.org\0" +"fj.cn\0" +"showa.fukushima.jp\0gov.pn\0km.ua\0" +"cc.nh.us\0" "gov.qa\0" -"sanagochi.tokushima.jp\0gov.pr\0author\0" -"vestv\xc3\xa5g\xc3\xb8y.no\0gov.ps\0" -"yamanashi.jp\0gov.pt\0" -"yakage.okayama.jp\0" -"holt\xc3\xa5len.no\0" -"gov.py\0" -"pub\0" -"int.ru\0" -"hi.cn\0notaires.fr\0" -"int.rw\0" -"trentino-altoadige.it\0osaka.jp\0" -"loten.no\0" -"biz.et\0odate.akita.jp\0" -"niepce.museum\0" -"rollag.no\0" -"yt\0" -"sd.us\0click\0" -"lib.oh.us\0doesntexist.org\0" -"immobilien\0" -"stor-elvdal.no\0from-ri.com\0" -"fribourg.museum\0finnoy.no\0" -"diet\0" -"int.tj\0" +"gov.pr\0jp.net\0poznan.pl\0" +"gov.ps\0safe\0" +"mil.ac\0archaeological.museum\0gov.pt\0r.cdn77.net\0" +"vs.it\0" +"mil.ae\0pz.it\0" +"guardian\0" +"c.cdn77.org\0" +"gov.py\0airtel\0" +"gjerdrum.no\0" +"mil.al\0" +"web.tj\0" +"veterinaire.fr\0chanel\0" +"mil.ba\0" +"mil.ar\0" +"lviv.ua\0" +"web.tr\0" +"kiwi.nz\0" +"sand\xc3\xb8y.no\0" +"mil.az\0\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa6\xb0\xe0\xa6\xa4\0" +"sarpsborg.no\0fan\0" +"mil.bo\0poivron.org\0" "gov.sa\0" "gov.sb\0" -"gov.rs\0gov.sc\0" +"mil.br\0gov.rs\0gov.sc\0" "gov.sd\0" -"gov.ru\0lt.ua\0" -"shell.museum\0saratov.ru\0gov.rw\0gov.sg\0" -"aikawa.kanagawa.jp\0gov.sh\0" -"tours\0" -"aosta-valley.it\0gr.it\0buzen.fukuoka.jp\0int.tt\0" -"res.aero\0v\xc3\xa6r\xc3\xb8y.no\0" -"kawamata.fukushima.jp\0gov.sl\0" -"minami.fukuoka.jp\0suzuka.mie.jp\0genkai.saga.jp\0" -"shika.ishikawa.jp\0" -"yao.osaka.jp\0gov.st\0" -"gr.jp\0mitake.gifu.jp\0sejny.pl\0" -"md.us\0" -"gov.sx\0" -"gov.sy\0nagoya\0" -"kurume.fukuoka.jp\0gov.tj\0" -"int.ve\0" +"gov.ru\0lanxess\0" +"gov.rw\0gov.sg\0is-a-socialist.com\0" +"gov.sh\0intuit\0" +"web.ve\0" +"mil.by\0" +"gov.sl\0" +"mil.cl\0gangwon.kr\0rivne.ua\0" +"shimamaki.hokkaido.jp\0glas.museum\0" +"mil.cn\0" +"ac.ae\0mil.co\0honai.ehime.jp\0" +"narusawa.yamanashi.jp\0k12.ms.us\0k12.nc.us\0" +"k12.il.us\0\xe9\xa6\x99\xe6\xa0\xbc\xe9\x87\x8c\xe6\x8b\x89\0" +"gov.st\0" +"services.aero\0gov.sx\0" +"gov.sy\0" +"gov.tj\0" "gov.tl\0" "gov.tm\0" -"mitaka.tokyo.jp\0gov.tn\0" -"gov.to\0" -"biz.id\0my.id\0" -"trogstad.no\0gov.ua\0" -"gov.tr\0" -"ass.km\0budejju.no\0" -"gov.tt\0int.vn\0" -"aogashima.tokyo.jp\0gets-it.net\0" -"plants.museum\0gov.tw\0" -"store.nf\0" -"gov.uk\0" -"ar.it\0" -"schlesisches.museum\0" -"unzen.nagasaki.jp\0" -"gaular.no\0koenig.ru\0" -"epson\0" -"sld.do\0mr.no\0gov.vc\0" -"ptz.ru\0gov.ve\0" -"build\0" -"tw.cn\0" -"from-mn.com\0" -"og.ao\0namsskogan.no\0" -"yamato.kumamoto.jp\0" -"moseushi.hokkaido.jp\0gov.vn\0" -"rocks\0" -"biz.ki\0" -"nes.buskerud.no\0\xe7\xb5\x84\xe7\xb9\x94.tw\0" -"schwarz\0" -"pruszkow.pl\0" -"r\xc3\xb8mskog.no\0bargains\0" -"vardo.no\0mk.ua\0" -"house\0" -"hashimoto.wakayama.jp\0" -"cc.fl.us\0gov.ws\0" -"chosei.chiba.jp\0shimosuwa.nagano.jp\0" -"donna.no\0" -"tp.it\0" -"cc.sc.us\0" -"meet\0" -"sologne.museum\0" -"obu.aichi.jp\0" -"ardal.no\0" -"meldal.no\0is-a-republican.com\0" -"maintenance.aero\0" -"haboro.hokkaido.jp\0hatoyama.saitama.jp\0rich\0" -"gateway.museum\0" -"kikonai.hokkaido.jp\0kosa.kumamoto.jp\0" -"yasuoka.nagano.jp\0" -"village.museum\0" -"kyoto.jp\0hanamaki.iwate.jp\0" -"tomsk.ru\0" -"\xe7\xa7\x8b\xe7\x94\xb0.jp\0toyohashi.aichi.jp\0shiso.hyogo.jp\0" -"hadsel.no\0google\0firebaseapp.com\0" -"biz.mv\0" -"biz.mw\0" -"bi.it\0" -"otobe.hokkaido.jp\0" -"kvam.no\0vindafjord.no\0mine.nu\0" -"omuta.fukuoka.jp\0ogasawara.tokyo.jp\0biz.nr\0" -"frosinone.it\0kainan.wakayama.jp\0" -"higashiyoshino.nara.jp\0" -"\xe5\xa4\xa7\xe9\x98\xaa.jp\0" -"delmenhorst.museum\0" -"iwanuma.miyagi.jp\0" -"khmelnitskiy.ua\0" -"kanan.osaka.jp\0" -"uwajima.ehime.jp\0toyonaka.osaka.jp\0" -"transport.museum\0" -"sklep.pl\0" -"figueres.museum\0" -"shimogo.fukushima.jp\0nishinomiya.hyogo.jp\0" -"oumu.hokkaido.jp\0habikino.osaka.jp\0nakano.tokyo.jp\0ohkura.yamagata.jp\0" -"qld.edu.au\0on.ca\0vacations\0" -"berkeley.museum\0collection.museum\0biz.pk\0" -"biz.pl\0pulawy.pl\0" -"yabuki.fukushima.jp\0" +"gov.tn\0" +"ac.at\0gov.to\0" +"ac.be\0mil.do\0steigen.no\0" +"gov.ua\0esq\0vacations\0" +"taki.mie.jp\0gov.tr\0" +"mil.ec\0tsuruga.fukui.jp\0stockholm.museum\0gov.tt\0" +"gov.tw\0" +"mil.eg\0landes.museum\0" +"murayama.yamagata.jp\0" +"b\xc3\xb8.telemark.no\0" +"kanzaki.saga.jp\0gov.uk\0" +"mypsx.net\0" +"per.la\0" +"lib.ky.us\0baseball\0" +"miyada.nagano.jp\0lib.ak.us\0gov.vc\0" +"1.bg\0ac.ci\0jeonbuk.kr\0" +"gov.ve\0is-lost.org\0" +"tushu\0\xe4\xbf\xa1\xe6\x81\xaf\0" +"ac.cn\0nasushiobara.tochigi.jp\0hyundai\0" +"cc.nj.us\0" +"cc.ia.us\0" +"exhibition.museum\0" +"ac.cr\0" +"gov.vn\0ferrari\0lilly\0" +"fortmissoula.museum\0" +"gs.nl.no\0bearalv\xc3\xa1hki.no\0passagens\0" +"lc.it\0missile.museum\0" +"eus\0sale\0select\0" +"ac.cy\0hasvik.no\0" +"andebu.no\0web.za\0memorial\0" +"mil.ge\0" +"marshalls\0" +"mil.gh\0wa.us\0" +"shirakawa.gifu.jp\0" +"spreadbetting\0yahoo\0" +"coloradoplateau.museum\0" +"medizinhistorisches.museum\0loab\xc3\xa1t.no\0" +"\xe7\xb5\x84\xe7\xb9\x94.hk\0theater.museum\0\xe8\x81\x94\xe9\x80\x9a\0" +"zao.miyagi.jp\0taketomi.okinawa.jp\0from-ak.com\0" +"gov.ws\0" +"nakaniikawa.toyama.jp\0per.nf\0" +"mil.gt\0bungoono.oita.jp\0bo.nordland.no\0" +"skodje.no\0dnsfor.me\0" +"westfalen.museum\0" +"naples.it\0\xe5\x8d\x83\xe8\x91\x89.jp\0toyotomi.hokkaido.jp\0tsuyama.okayama.jp\0bugatti\0" +"mil.hn\0" +"kadena.okinawa.jp\0" +"balat.no\0" +"mil.id\0" +"gildeskal.no\0" +"promo\0" +"l\xc3\xa4ns.museum\0k12.ne.us\0" +"homeunix.com\0" +"mil.in\0tara.saga.jp\0" +"gov.za\0" +"mil.iq\0war.museum\0" +"dynalias.com\0" +"yanagawa.fukuoka.jp\0skoczow.pl\0misconfused.org\0" +"jolster.no\0" +"ac.gn\0minamimaki.nagano.jp\0iwi.nz\0fh.se\0" +"g12.br\0clock.museum\0" +"is-a-landscaper.com\0" +"gov.zm\0" +"shiojiri.nagano.jp\0hotmail\0" +"mil.jo\0\xe5\xbe\xb3\xe5\xb3\xb6.jp\0lierne.no\0" +"dyndns.info\0" +"arakawa.saitama.jp\0" +"fit\0" +"dubai\0" +"ethnology.museum\0\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3\x83\xab\0" +"mil.kg\0" +"rocher\0" +"salvadordali.museum\0" +"sapo\0" +"mil.km\0" +"3.bg\0ac.id\0aa.no\0" +"karasuyama.tochigi.jp\0" +"mil.kr\0" +"abiko.chiba.jp\0daiwa.hiroshima.jp\0" +"bas.it\0oryol.ru\0" +"ac.il\0shimokitayama.nara.jp\0" +"ac.im\0" +"ac.in\0" +"mil.kz\0" +"ac.ir\0le.it\0" +"school.za\0gripe\0" +"svizzera.museum\0" "b\xc3\xa6rum.no\0" -"kanazawa.ishikawa.jp\0" -"reklam.hu\0emerck\0" -"\xe5\xae\xae\xe5\xb4\x8e.jp\0oita.oita.jp\0biz.pr\0" -"cyou\0" -"kiyokawa.kanagawa.jp\0yonago.tottori.jp\0" -"cards\0" -"discount\0" -"ak.us\0" -"iide.yamagata.jp\0exposed\0" -"store.ve\0de.com\0" -"seljord.no\0sula.no\0" -"skiptvet.no\0k12.mt.us\0" -"friuliveneziagiulia.it\0ikeda.nagano.jp\0" -"corporation.museum\0" -"f.bg\0gj\xc3\xb8vik.no\0immo\0" -"name.hr\0" -"southwest.museum\0" -"sekikawa.niigata.jp\0" -"sciencecenters.museum\0" -"tienda\0" -"motoyama.kochi.jp\0" -"plantation.museum\0kyoto\0" -"izena.okinawa.jp\0" -"mo\xc3\xa5reke.no\0" -"og.it\0" -"ap-southeast-1.compute.amazonaws.com\0s3-ap-southeast-1.amazonaws.com\0" -"name.et\0" -"kihoku.ehime.jp\0" -"meme\0co.com\0" -"prof.pr\0" -"foggia.it\0kamisunagawa.hokkaido.jp\0" -"historical.museum\0" -"s3-ap-southeast-2.amazonaws.com\0" -"biz.tj\0" -"perm.ru\0" -"tamayu.shimane.jp\0nanyo.yamagata.jp\0" -"folldal.no\0" -"matsuda.kanagawa.jp\0" -"pe.ca\0" -"etajima.hiroshima.jp\0mitsue.nara.jp\0biz.tr\0" -"localhistory.museum\0rodeo\0doesntexist.com\0" -"biz.tt\0" -"iris.arpa\0zp.ua\0" -"showa.yamanashi.jp\0" -"urn.arpa\0sld.pa\0" -"menu\0" -"ar.us\0" -"yusuhara.kochi.jp\0red\0" -"glass.museum\0bygland.no\0" -"ginoza.okinawa.jp\0\xd0\xba\xd0\xbe\xd0\xbc\0" -"\xe7\xbd\x91\xe5\xba\x97\0" -"store.ro\0" -"higashikagura.hokkaido.jp\0" -"selbu.no\0" -"ohda.shimane.jp\0" -"name.eg\0" -"ren\0" -"m.bg\0architecture.museum\0" -"biz.vn\0" -"satsumasendai.kagoshima.jp\0mazury.pl\0" -"gojome.akita.jp\0" +"gyeongbuk.kr\0" +"saskatchewan.museum\0per.sg\0mysecuritycamera.net\0" +"la.us\0" +"mil.lv\0" +"\xe7\xb6\xb2\xe7\xb5\xa1.cn\0nagato.yamaguchi.jp\0mil.mg\0" +"takehara.hiroshima.jp\0sarl\0" +"ac.jp\0" +"gjovik.no\0" +"historyofscience.museum\0" +"chiryu.aichi.jp\0broadway\0" +"not.br\0" +"mil.mv\0" +"mil.ng\0" +"nis.za\0fly\0" +"yaotsu.gifu.jp\0osaki.miyagi.jp\0mil.my\0mil.ni\0" +"kagami.kochi.jp\0mil.mz\0" +"davvenj\xc3\xa1rga.no\0no-ip.biz\0" +"ac.kr\0" +"hazu.aichi.jp\0" +"mil.no\0kobierzyce.pl\0boutique\0" +"\xe4\xb8\x80\xe5\x8f\xb7\xe5\xba\x97\0" +"ac.lk\0lanbib.se\0" +"\xe5\xb2\x90\xe9\x98\x9c.jp\0" +"k12.mo.us\0" +"isa-geek.org\0" +"operaunite.com\0" +"seiro.niigata.jp\0mil.nz\0" +"ofunato.iwate.jp\0ac.ma\0" +"nara.jp\0" +"modalen.no\0" +"ac.me\0" +"epost\0" +"alta.no\0" +"mil.pe\0" +"freemasonry.museum\0" +"mil.ph\0" +"\xd8\xa7\xd9\x84\xd9\x85\xd8\xba\xd8\xb1\xd8\xa8\0dyndns-at-work.com\0" +"shimoji.okinawa.jp\0" +"mil.pl\0" +"barlettatraniandria.it\0" +"foo\0" +"ac.mu\0stargard.pl\0" +"schokoladen.museum\0ac.mw\0mil.qa\0" +"verdal.no\0save\0" +"\xe7\x86\x8a\xe6\x9c\xac.jp\0ac.ni\0" +"ac.mz\0naturbruksgymn.se\0" +"b\xc3\xa5tsfjord.no\0\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xae\0" +"fox\0" +"tysv\xc3\xa6r.no\0" +"5.bg\0mil.py\0" +"eidsberg.no\0" +"barcelona.museum\0" +"ks.ua\0" +"dni.us\0" +"\xe7\xb6\xb2\xe7\xb5\xa1.hk\0ac.nz\0embaixada.st\0gov.nc.tr\0" +"mutsu.aomori.jp\0figueres.museum\0" +"tsukumi.oita.jp\0diskstation.me\0" +"ujiie.tochigi.jp\0" +"halsa.no\0" +"flakstad.no\0ac.pa\0gal\0" +"realtor\0dyndns-remote.com\0" +"gap\0" +"inawashiro.fukushima.jp\0ks.us\0" +"\xe0\xa8\xad\xe0\xa8\xbe\xe0\xa8\xb0\xe0\xa8\xa4\0" +"tsunan.niigata.jp\0" +"lg.jp\0" +"mil.ru\0" +"tvedestrand.no\0" +"mil.rw\0" +"asso.fr\0mil.sh\0" +"village.museum\0" +"minakami.gunma.jp\0" +"frl\0" +"ac.pr\0saxo\0" +"hidaka.wakayama.jp\0" +"kamiizumi.saitama.jp\0" +"jar.ru\0" +"gouv.fr\0" +"kahoku.ishikawa.jp\0habikino.osaka.jp\0" +"mil.st\0" +"etne.no\0verm\xc3\xb6gensberater\0" +"asso.gp\0kani.gifu.jp\0prod\0" +"uk.com\0" +"allstate\0international\0prof\0" +"mil.sy\0" +"mil.tj\0wang\0\xe6\x97\xb6\xe5\xb0\x9a\0" +"mil.tm\0" +"milan.it\0xihuan\0is-a-libertarian.com\0" +"mil.to\0\xe6\x9c\xba\xe6\x9e\x84\0" +"milano.it\0" +"imamat\0" +"mil.tr\0" +"nakama.fukuoka.jp\0malopolska.pl\0" +"noboribetsu.hokkaido.jp\0cultural.museum\0mil.tw\0from-md.com\0" +"nishinoshima.shimane.jp\0" +"kazuno.akita.jp\0celtic.museum\0" +"asso.ht\0mil.tz\0" +"yokaichiba.chiba.jp\0" +"shizukuishi.iwate.jp\0ac.rs\0gdn\0" +"natura\0" +"durham.museum\0ac.ru\0ac.se\0" +"gea\0" +"ac.rw\0ftr\0" +"gouv.ht\0" +"tokai.ibaraki.jp\0mil.vc\0apartments\0" +"kouhoku.saga.jp\0mil.ve\0" +"gen.in\0" +"mil.uy\0" +"piemonte.it\0krokstadelva.no\0enterprises\0" +"reggioemilia.it\0duck\0" +"sayama.osaka.jp\0fun\0" +"hyuga.miyazaki.jp\0" +"localhistory.museum\0lib.wa.us\0" +"asso.bj\0koto.shiga.jp\0doesntexist.org\0" +"lib.ks.us\0pimienta.org\0" +"ac.th\0" +"barefoot\0pgfog.com\0" +"7.bg\0gj\xc3\xb8vik.no\0ac.sz\0ac.tj\0" +"stavropol.ru\0" +"suifu.ibaraki.jp\0" +"gouv.bj\0illustration.museum\0" +"sn\xc3\xa5sa.no\0" +"asso.ci\0hatogaya.saitama.jp\0maryland.museum\0dnshome.de\0" +"dev-myqnapcloud.com\0" +"ac.ug\0neat-url.com\0" +"li.it\0" +"virginia.museum\0kosher\0" +"ag.it\0ac.tz\0" +"ac.uk\0watches\0" +"\xd0\xba\xd0\xbe\xd0\xbc\0" +"gouv.ci\0" +"hasura-app.io\0" +"galsa.no\0kddi\0teaches-yoga.com\0" +"freeboxos.com\0" +"fl.us\0rackmaze.com\0" +"jur.pro\0" +"tozsde.hu\0sp.leg.br\0" +"collection.museum\0" +"\xe0\xa4\xb8\xe0\xa4\x82\xe0\xa4\x97\xe0\xa4\xa0\xe0\xa4\xa8\0" +"ac.vn\0" +"!city.sendai.jp\0convent.museum\0suzuki\0" +"kamo.kyoto.jp\0" +"morioka.iwate.jp\0" +"asso.dz\0" +"mil.za\0" +"kawaue.gifu.jp\0" +"email\0fitness\0" +"film.hu\0" +"chirurgiens-dentistes.fr\0fidelity\0" +"monster\0" +"skien.no\0" +"fyi\0" +"aero\0nrw.museum\0wolomin.pl\0" +"project.museum\0" +"eng.pro\0" +"k12.ok.us\0\xd8\xb9\xd9\x85\xd8\xa7\xd9\x86\0mil.zm\0" +"k12.id.us\0" +"k12.ca.us\0" +"saotome.st\0" +"honjo.saitama.jp\0" +"h\xc3\xb8nefoss.no\0" +"b\xc3\xb8mlo.no\0" +"living.museum\0" +"dnsiskinky.com\0" +"lig.it\0" +"auto.pl\0" +"niikappu.hokkaido.jp\0" +"seaport.museum\0" +"vibo-valentia.it\0" +"mari.ru\0homeftp.org\0" +"costume.museum\0sydney\0" +"gen.nz\0" +"aioi.hyogo.jp\0" +"oguchi.aichi.jp\0alaska.museum\0pinb.gov.pl\0" +"nnov.ru\0" +"ac.za\0" +"lib.la.us\0" +"isa-geek.com\0" +"9.bg\0hokkaido.jp\0kitadaito.okinawa.jp\0technology.museum\0fuettertdasnetz.de\0" +"gangaviika.no\0" +"gd.cn\0samukawa.kanagawa.jp\0bahcavuotna.no\0" +"miasta.pl\0lg.ua\0gle\0shopping\0de.com\0" +"money.museum\0jpmorgan\0" +"ac.zm\0" +"kumiyama.kyoto.jp\0izumo.shimane.jp\0agency\0" +"linde\0" +"kamikawa.saitama.jp\0" +"asuke.aichi.jp\0gs.tm.no\0" +"gs.nt.no\0juegos\0" +"ltda\0" +"fr.it\0fishing\0" +"is-a-financialadvisor.com\0" +"kitagawa.miyazaki.jp\0plc.ly\0workisboring.com\0" +"*.sendai.jp\0" +"tohnosho.chiba.jp\0" +"wi.us\0" +"blogdns.com\0" +"ozora.hokkaido.jp\0\xe7\x8f\xa0\xe5\xae\x9d\0" +"davvenjarga.no\0" +"shichinohe.aomori.jp\0meiwa.mie.jp\0gmo\0" +"yao.osaka.jp\0kms.ru\0" +"otake.hiroshima.jp\0" +"somna.no\0tours\0publishproxy.com\0" +"chintai\0" +"s3-sa-east-1.amazonaws.com\0" +"toyotsu.fukuoka.jp\0busan.kr\0df.leg.br\0" +"botanical.museum\0gmx\0" +"fbxos.fr\0" +"hekinan.aichi.jp\0" +"philately.museum\0" +"dodge\0" +"otaki.saitama.jp\0" +"kinokawa.wakayama.jp\0" +"trentino-sudtirol.it\0motosu.gifu.jp\0cern\0" +"asahi.yamagata.jp\0from-il.com\0" +"lasalle\0" +"hitachiota.ibaraki.jp\0" +"student.aero\0" +"kakuda.miyagi.jp\0" +"mmafan.biz\0" +"florist\0goo\0" +"gop\0pramerica\0" +"omuta.fukuoka.jp\0got\0" +"gov\0" +"indianapolis.museum\0" +"finland.museum\0likes-pie.com\0" +"gotsu.shimane.jp\0" +"sling\0" +"gen.tr\0" +"r\xc3\xb8""d\xc3\xb8y.no\0" +"hokksund.no\0" +"\xe5\x92\x8c\xe6\xad\x8c\xe5\xb1\xb1.jp\0" +"am.br\0duns\0" +"odesa.ua\0myeffect.net\0" +"sch.ae\0" +"es.eu.org\0" +"realestate.pl\0" +"telecity\0" +"harvestcelebration.museum\0" +"etnedal.no\0krasnodar.su\0" +"hirakata.osaka.jp\0" +"castres.museum\0" +"lucania.it\0tainai.niigata.jp\0" +"gs.of.no\0hemne.no\0skype\0" +"matsuzaki.shizuoka.jp\0\xe0\xaa\xad\xe0\xaa\xbe\xe0\xaa\xb0\xe0\xaa\xa4\0" +"saga.jp\0" +"ieee\0" +"amursk.ru\0" +"hbo\0" +"akita.akita.jp\0netbank\0" +"ky.us\0" +"nov.ru\0" +"omega\0" +"fudai.iwate.jp\0furniture\0" +"sanagochi.tokushima.jp\0turen.tn\0dvag\0" +"asakawa.fukushima.jp\0" +"egyptian.museum\0" +"natuurwetenschappen.museum\0" +"xperia\0est-mon-blogueur.com\0" +"cymru.museum\0" +"moroyama.saitama.jp\0hikari.yamaguchi.jp\0" +"nov.su\0" +"hagebostad.no\0" +"trentino.it\0shirahama.wakayama.jp\0" +"fauske.no\0" +"sopot.pl\0" +"plc.uk\0" +"usa.museum\0" +"chernovtsy.ua\0" +"vefsn.no\0" +"asso.re\0android\0" +"iveco\0" +"latina.it\0kitaaiki.nagano.jp\0" +"tsuno.miyazaki.jp\0fund\0" +"unnan.shimane.jp\0" +"philadelphiaarea.museum\0" +"nomi.ishikawa.jp\0sumita.iwate.jp\0" +"lugansk.ua\0" +"mansion.museum\0" +"media.museum\0" "chungbuk.kr\0" -"\xe7\xbd\x91\xe7\xbb\x9c.cn\0nakasatsunai.hokkaido.jp\0takikawa.hokkaido.jp\0" -"tokushima.tokushima.jp\0" -"store.st\0" -"name.az\0cnt.br\0johana.toyama.jp\0" -"s3-website-eu-west-1.amazonaws.com\0" -"social\0" -"kvits\xc3\xb8y.no\0" -"association.museum\0" -"rikuzentakata.iwate.jp\0" -"environment.museum\0indianmarket.museum\0hi.us\0" -"ishikari.hokkaido.jp\0" -"heimatunduhren.museum\0lib.de.us\0" -"eti.br\0" -"lunner.no\0estate\0" -"lewismiller.museum\0\xec\x82\xbc\xec\x84\xb1\0" -"komaki.aichi.jp\0" -"naumburg.museum\0" -"misato.wakayama.jp\0tsuru.yamanashi.jp\0" -"haus\0" -"kawagoe.mie.jp\0" -"dance\0" -"kadoma.osaka.jp\0" -"ve.it\0" -"vana\0" -"museumcenter.museum\0" -"\xc3\xb8stre-toten.no\0philips\0" -"volyn.ua\0" -"rio\0" -"rip\0" -"hiraya.nagano.jp\0skoczow.pl\0" -"latrobe\0" -"t.bg\0info\0homeftp.org\0" -"shingu.hyogo.jp\0" -"mykolaiv.ua\0" -"loab\xc3\xa1t.no\0\xe7\xbd\x91\xe7\xab\x99\0" -"prd.fr\0incheon.kr\0" -"joburg\0" -"\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" -"oizumi.gunma.jp\0" -"grp.lk\0" -"cn.it\0kitamoto.saitama.jp\0" -"silk.museum\0" -"swinoujscie.pl\0" -"\xe7\xbd\x91\xe7\xbb\x9c.hk\0sauherad.no\0komatsu\0" -"pe.it\0datsun\0" -"drangedal.no\0cc.nh.us\0versicherung\0" -"date.fukushima.jp\0" -"jl.cn\0mitane.akita.jp\0ozu.ehime.jp\0" -"is-with-theband.com\0" -"yoro.gifu.jp\0" -"kamo.kyoto.jp\0azure-mobile.net\0" -"aizuwakamatsu.fukushima.jp\0hasuda.saitama.jp\0targi.pl\0" -"ddr.museum\0kiwi\0" -"niyodogawa.kochi.jp\0" -"snaase.no\0" -"sumida.tokyo.jp\0" -"emr.it\0" -"prato.it\0surf\0" -"iron.museum\0pittsburgh.museum\0us-gov-west-1.compute.amazonaws.com\0" -"church\0futbol\0" -"in.na\0" -"moriyama.shiga.jp\0" -"ehime.jp\0" -"watch-and-clock.museum\0" -"kushima.miyazaki.jp\0fussa.tokyo.jp\0" -"qc.ca\0" -"bmd.br\0shakotan.hokkaido.jp\0nyuzen.toyama.jp\0pe.kr\0" -"skjerv\xc3\xb8y.no\0" -"tree.museum\0" -"egersund.no\0" -"gratangen.no\0luxe\0" -"\xe7\xb5\x84\xe7\xb9\x94.hk\0valer.hedmark.no\0" -"stcgroup\0" -"\xe5\x8c\x97\xe6\xb5\xb7\xe9\x81\x93.jp\0higashisumiyoshi.osaka.jp\0" -"accountants\0" -"is-uberleet.com\0" -"kitaaiki.nagano.jp\0" -"test.tj\0" -"bomlo.no\0" -"gs.of.no\0" -"obanazawa.yamagata.jp\0yamanashi.yamanashi.jp\0" -"prd.km\0" -"from-wa.com\0" -"agrigento.it\0" -"casino.hu\0" -"tawaramoto.nara.jp\0babia-gora.pl\0\xd8\xa8\xda\xbe\xd8\xa7\xd8\xb1\xd8\xaa\0credit\0" -"dontexist.com\0" -"yatsushiro.kumamoto.jp\0" -"h\xc3\xa5.no\0" -"js.cn\0niikappu.hokkaido.jp\0" -"gallery\0training\0" -"oguni.kumamoto.jp\0" -"\xe5\xaf\x8c\xe5\xb1\xb1.jp\0" -"homebuilt.aero\0" -"lowicz.pl\0" -"sokndal.no\0" -"prd.mg\0" -"kakinoki.shimane.jp\0" -"farmstead.museum\0active\0" -"adm.br\0" -"alibaba\0" -"kunigami.okinawa.jp\0" -"forgot.his.name\0" -"\xc3\xa5mot.no\0test.ru\0" -"bari.it\0" -"fukuchi.fukuoka.jp\0sap\0" -"in.rs\0" -"doshi.yamanashi.jp\0" -"monticello.museum\0" -"f.se\0" -"vs.it\0" -"cpa.pro\0" -"oygarden.no\0" -"tarui.gifu.jp\0" -"inzai.chiba.jp\0arida.wakayama.jp\0" -"sca\0" -"hokuto.hokkaido.jp\0okutama.tokyo.jp\0scb\0" -"sbs\0" -"name.vn\0" +"gausdal.no\0slupsk.pl\0" +"troms\xc3\xb8.no\0" +"gent\0hobby-site.com\0" +"vaga.no\0" +"stackspace.space\0" +"fresenius\0" +"ullensvang.no\0gouv.rw\0" +"us.eu.org\0" +"sor-odal.no\0" +"cc.nv.us\0" +"fujikawaguchiko.yamanashi.jp\0gouv.sn\0global.prod.fastly.net\0" +"inashiki.ibaraki.jp\0sebastopol.ua\0cc.ct.us\0" +"togitsu.nagasaki.jp\0omaha.museum\0buzz\0" +"tateshina.nagano.jp\0edu.eu.org\0" +"lo.it\0" +"goodhands\0" +"mysecuritycamera.org\0" +"tysvar.no\0" +"democrat\0" +"adachi.tokyo.jp\0" +"delivery\0" +"\xe8\x8c\xa8\xe5\x9f\x8e.jp\0" +"greta.fr\0szkola.pl\0" +"iitate.fukushima.jp\0hida.gifu.jp\0" +"sch.id\0tonami.toyama.jp\0" +"asso.nc\0odda.no\0" +"dgca.aero\0" +"kommune.no\0" +"build\0scor\0" +"scot\0" +"kimitsu.chiba.jp\0lunner.no\0salat.no\0\xd2\x9b\xd0\xb0\xd0\xb7\0coupons\0" +"sch.ir\0" +"hiv\0" +"gotdns.com\0" +"koza.wakayama.jp\0" +"ro.com\0" +"otsuchi.iwate.jp\0k12.ny.us\0" +"edogawa.tokyo.jp\0" +"sch.jo\0algard.no\0" +"hasama.oita.jp\0" +"hara.nagano.jp\0" +"kitakata.miyazaki.jp\0elblag.pl\0" +"horology.museum\0" +"arboretum.museum\0sciencehistory.museum\0" +"commbank\0" +"kounosu.saitama.jp\0" +"arq.br\0" +"ikeda.osaka.jp\0" +"conference.aero\0" +"shinonsen.hyogo.jp\0hkt\0" +"tynset.no\0" +"okawa.kochi.jp\0" +"meland.no\0" +"\xc3\xa5seral.no\0" +"kl\xc3\xa6""bu.no\0" "lib.wy.us\0" -"in.th\0" -"dubai\0" -"magnitka.ru\0vegas\0" -"otofuke.hokkaido.jp\0" -"taipei\0" -"trentinoa-adige.it\0" -"in.ua\0" -"ozu.kumamoto.jp\0" -"from-id.com\0" -"psi.br\0koshu.yamanashi.jp\0" -"capetown\0" -"fylkesbibl.no\0cc.nv.us\0pvt.k12.ma.us\0" -"hachioji.tokyo.jp\0" -"western.museum\0" -"store.bb\0kasama.ibaraki.jp\0" -"trentino-alto-adige.it\0terni.it\0kawaba.gunma.jp\0" -"name.tj\0" -"in.us\0" -"katagami.akita.jp\0kawazu.shizuoka.jp\0" -"mizunami.gifu.jp\0" -"tank.museum\0lib.ri.us\0" -"name.tr\0" -"kiwa.mie.jp\0name.tt\0" -"sm\xc3\xb8la.no\0" -"nakaniikawa.toyama.jp\0" -"online.museum\0hk.org\0" -"miyoshi.saitama.jp\0" -"asaminami.hiroshima.jp\0" -"cn.ua\0" -"fr\xc3\xb8ya.no\0" -"!city.kawasaki.jp\0fukuroi.shizuoka.jp\0" -"sew\0" -"izunokuni.shizuoka.jp\0sex\0" -"exeter.museum\0nesoddtangen.no\0" -"tsukuba.ibaraki.jp\0" -"m.se\0dreamhosters.com\0" -"yame.fukuoka.jp\0ouchi.saga.jp\0" -"amakusa.kumamoto.jp\0realtor\0" -"symantec\0" -"gyeonggi.kr\0" -"ooshika.nagano.jp\0isla.pr\0" -"eun.eg\0sund.no\0lib.ky.us\0" +"canada.museum\0" +"sch.lk\0" +"protonet.io\0" +"haga.tochigi.jp\0allfinanz\0" +"shiroishi.miyagi.jp\0jetzt\0" +"miyazu.kyoto.jp\0" +"tagawa.fukuoka.jp\0zoology.museum\0" +"prd.fr\0mishima.fukushima.jp\0" +"choyo.kumamoto.jp\0cc.oh.us\0" +"kharkiv.ua\0" +"yatsushiro.kumamoto.jp\0" +"sch.ly\0fi.eu.org\0" +"business\0" +"estate\0" +"ao.it\0bari.it\0antiques.museum\0" +"property\0" +"!city.kitakyushu.jp\0" +"svalbard.no\0" +"happou.akita.jp\0skedsmokorset.no\0" +"kumakogen.ehime.jp\0" +"taketa.oita.jp\0" +"sch.ng\0ak.us\0" +"graz.museum\0krakow.pl\0" +"meet\0" +"ulsan.kr\0" +"asso.km\0cartoonart.museum\0" "teramo.it\0" -"natori.miyagi.jp\0goto.nagasaki.jp\0" -"notteroy.no\0" -"sue.fukuoka.jp\0" -"beardu.no\0naamesjevuemie.no\0" -"iida.nagano.jp\0" -"skj\xc3\xa5k.no\0" -"ino.kochi.jp\0" -"valle-d-aosta.it\0" -"pz.it\0" -"eastafrica.museum\0" -"\xe0\xa4\xb8\xe0\xa4\x82\xe0\xa4\x97\xe0\xa4\xa0\xe0\xa4\xa8\0" -"minamiminowa.nagano.jp\0" -"name.qa\0" -"name.pr\0" -"jamison.museum\0" -"kai.yamanashi.jp\0" -"guitars\0" -"farmers.museum\0" -"ntr.br\0kamitonda.wakayama.jp\0" -"name.na\0" -"hanno.saitama.jp\0matsuzaki.shizuoka.jp\0" -"leclerc\0" -"napoli.it\0" -"inatsuki.fukuoka.jp\0name.mv\0" -"name.ng\0pl.ua\0police.uk\0" -"oxford.museum\0name.my\0" -"\xe7\xb6\xb2\xe7\xb5\xa1.cn\0kashima.saga.jp\0fuchu.tokyo.jp\0" -"coal.museum\0bridgestone\0software\0" -"campania.it\0rep.kp\0" -"sor-odal.no\0t.se\0" -"kyonan.chiba.jp\0hikawa.shimane.jp\0suginami.tokyo.jp\0" -"medical.museum\0cc.ut.us\0" -"kitakami.iwate.jp\0pa.gov.pl\0" -"ecn.br\0aizumi.tokushima.jp\0" -"amur.ru\0de.us\0" -"kikugawa.shizuoka.jp\0yoshida.shizuoka.jp\0" -"r\xc3\xa5holt.no\0" -"k12.de.us\0" -"international\0" -"sande.vestfold.no\0" -"\xd8\xaa\xd9\x88\xd9\x86\xd8\xb3\0" -"sky\0from-fl.com\0" -"seiyo.ehime.jp\0ariake.saga.jp\0" -"shiojiri.nagano.jp\0" -"koori.fukushima.jp\0bond\0" -"nakagyo.kyoto.jp\0" -"academy.museum\0" -"ra.it\0abeno.osaka.jp\0" -"eidskog.no\0" -"shirahama.wakayama.jp\0" -"dudinka.ru\0" -"bnpparibas\0" -"rybnik.pl\0\xd8\xa7\xd9\x84\xd8\xa7\xd8\xb1\xd8\xaf\xd9\x86\0" -"lazio.it\0gdynia.pl\0" -"name.mk\0" -"\xe5\xae\xae\xe5\x9f\x8e.jp\0nagi.okayama.jp\0" -"is-an-artist.com\0" -"racing\0" -"hatsukaichi.hiroshima.jp\0sakai.ibaraki.jp\0chizu.tottori.jp\0" -"0.bg\0" -"nore-og-uvdal.no\0" -"ichinomiya.chiba.jp\0lezajsk.pl\0" -"bashkiria.ru\0" -"name.jo\0sciencehistory.museum\0" -"lucerne.museum\0vinnytsia.ua\0" -"\xe7\xb6\xb2\xe7\xb5\xa1.hk\0s3-website-us-east-1.amazonaws.com\0is-an-anarchist.com\0" -"annaka.gunma.jp\0" -"florence.it\0tajiri.osaka.jp\0" -"shikabe.hokkaido.jp\0" -"uchinada.ishikawa.jp\0" -"from-pr.com\0hobby-site.com\0" -"higashine.yamagata.jp\0" -"society.museum\0" -"soy\0" -"anamizu.ishikawa.jp\0" -"lom.it\0pohl\0" -"\xc3\xa5seral.no\0" -"kira.aichi.jp\0" -"pizza\0" -"ethnology.museum\0malselv.no\0" -"bayern\0tab\0" -"contact\0" -"tozsde.hu\0saves-the-whales.com\0" -"hokuto.yamanashi.jp\0" -"org.ac\0" -"ayabe.kyoto.jp\0" -"org.ae\0time.no\0cc.ct.us\0" -"org.af\0sobetsu.hokkaido.jp\0takinoue.hokkaido.jp\0sayama.osaka.jp\0" -"org.ag\0moscow\0" -"fukushima.jp\0hirado.nagasaki.jp\0" +"matsumoto.kagoshima.jp\0" +"iheya.okinawa.jp\0" +"\xd9\xbe\xd8\xa7\xda\xa9\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86\0" +"gouv.km\0" +"is-into-anime.com\0" +"yawara.ibaraki.jp\0" +"sic.it\0" +"rovno.ua\0" +"asahikawa.hokkaido.jp\0nagatoro.saitama.jp\0hot\0" +"how\0" +"everbank\0" +"asso.mc\0getmyip.com\0" +"campania.it\0" +"capital\0" +"kawanishi.yamagata.jp\0rsvp\0" +"\xe9\xb9\xbf\xe5\x85\x90\xe5\xb3\xb6.jp\0" +"glogow.pl\0recht.pro\0sch.qa\0" +"jpn.com\0" +"is-a-candidate.org\0" +"i234.me\0" +"ws.na\0" +"gouv.ml\0" +"mydissent.net\0" +"prd.km\0" +"qld.gov.au\0" +"bc.ca\0" +"ogi.saga.jp\0" +"arts.museum\0mosj\xc3\xb8""en.no\0isa-geek.net\0" +"is-a-caterer.com\0" +"lib.mi.us\0gb.com\0" +"katsushika.tokyo.jp\0naustdal.no\0" +"nanao.ishikawa.jp\0" +"yoshida.shizuoka.jp\0ibm\0" +"\xd0\xbc\xd0\xba\xd0\xb4\0" +"austin.museum\0outsystemscloud.com\0" +"ichihara.chiba.jp\0" +"cookingchannel\0" +"sch.sa\0corsica\0" +"ice\0" +"kiso.nagano.jp\0" +"gs.ol.no\0from-wi.com\0" +"friuli-venezia-giulia.it\0mc.it\0" +"prd.mg\0software\0" +"aq.it\0ba.it\0" +"toho.fukuoka.jp\0" +"fjaler.no\0" +"hareid.no\0" +"dnsalias.com\0" +"stange.no\0" +"htc\0" +"nanto.toyama.jp\0icu\0" +"kristiansund.no\0" +"yekaterinburg.ru\0" +"certification.aero\0" +"harstad.no\0" +"ichinomiya.aichi.jp\0" +"ibestad.no\0" +"logistics.aero\0" +"arendal.no\0" +"yaese.okinawa.jp\0hoylandet.no\0midsund.no\0" +"endoftheinternet.org\0" +"ohtawara.tochigi.jp\0" +"koeln.museum\0" +"kyonan.chiba.jp\0" +"meme\0to.leg.br\0" +"hashikami.aomori.jp\0" +"k12.tx.us\0" +"association.aero\0" +"k12.dc.us\0" +"gorizia.it\0dealer\0" +"miho.ibaraki.jp\0kotoura.tottori.jp\0" +"takazaki.miyazaki.jp\0" +"asaminami.hiroshima.jp\0skierva.no\0ifm\0" +"homeftp.net\0" +"naval.museum\0" +"histoire.museum\0mango\0" +"bristol.museum\0" +"vologda.su\0" +"ontario.museum\0" +"\xd0\xbc\xd0\xbe\xd0\xbd\0" +"*.compute.estate\0" +"higashiyoshino.nara.jp\0alt.za\0" +"chino.nagano.jp\0" +"gjerstad.no\0menu\0" +"rl.no\0" +"\xe3\x82\xbb\xe3\x83\xbc\xe3\x83\xab\0zappos\0s3-external-1.amazonaws.com\0from-sc.com\0" +"chelyabinsk.ru\0" +"haram.no\0" +"fujikawa.shizuoka.jp\0" +"microlight.aero\0" +"automotive.museum\0virtual.museum\0" +"yurihonjo.akita.jp\0akiruno.tokyo.jp\0plantation.museum\0" +"myqnapcloud.com\0" +"rn.it\0tuxfamily.org\0" +"lu.it\0me.it\0noto.ishikawa.jp\0laakesvuemie.no\0" +"bokn.no\0" +"takaoka.toyama.jp\0" +"is-an-anarchist.com\0" +"yakumo.hokkaido.jp\0ogano.saitama.jp\0" +"bestbuy\0" +"ayabe.kyoto.jp\0ma.us\0theater\0" +"mosjoen.no\0" +"rissa.no\0" +"amagasaki.hyogo.jp\0" +"taishi.osaka.jp\0snillfjord.no\0vologda.ru\0s3-us-west-2.amazonaws.com\0" +"macerata.it\0" +"stj\xc3\xb8rdalshalsen.no\0" +"dazaifu.fukuoka.jp\0" +"\xd8\xa7\xd9\x84\xd8\xac\xd8\xb2\xd8\xa7\xd8\xa6\xd8\xb1\0" +"sch.zm\0ventures\0" +"florence.it\0brasil.museum\0" +"rzeszow.pl\0homedepot\0" +"piw.gov.pl\0design\0" +"sardegna.it\0alibaba\0" +"arna.no\0" +"tsuga.tochigi.jp\0" +"shichikashuku.miyagi.jp\0" +"ddns.me\0" +"kumano.hiroshima.jp\0nakatane.kagoshima.jp\0k12.de.us\0seat\0" +"pa.gov.pl\0" +"rennes\xc3\xb8y.no\0" +"nishiaizu.fukushima.jp\0" +"avellino.it\0" +"cnt.br\0eu.int\0bolzano.it\0" +"kiyama.saga.jp\0\xe3\x83\x9d\xe3\x82\xa4\xe3\x83\xb3\xe3\x83\x88\0" +"heroy.nordland.no\0" +"ggee\0" +"from-ne.com\0" +"chuo.chiba.jp\0kyoto\0" +"shinto.gunma.jp\0" +"network\0" +"*.platform.sh\0" +"science\0" +"hasami.nagasaki.jp\0" +"lib.me.us\0" +"marine.ru\0" +"rackmaze.net\0" +"baths.museum\0uscountryestate.museum\0damnserver.com\0" +"ing\0" +"kvinnherad.no\0siellak.no\0" +"chat\0" +"net.ac\0tambov.ru\0ink\0" +"net.ae\0toyono.osaka.jp\0nishiazai.shiga.jp\0" +"net.af\0niki.hokkaido.jp\0" +"net.ag\0r\xc3\xa1isa.no\0\xd1\x83\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0" +"net.ai\0" +"harima.hyogo.jp\0" +"net.al\0int\0dinosaur.museum\0" +"liguria.it\0" +"net.ba\0health.nz\0seek\0" +"net.ar\0net.bb\0" +"net.au\0router.management\0" +"net.bh\0" +"net.az\0" +"tabuse.yamaguchi.jp\0ae.org\0" +"tokai.aichi.jp\0khv.ru\0" +"net.bm\0zoological.museum\0" +"net.bo\0wegrow.pl\0" +"fantasyleague.cc\0" +"net.br\0" +"net.bs\0" +"net.bt\0" +"fortworth.museum\0" +"net.ci\0" +"net.bz\0luxe\0" +"serveblog.net\0" +"pistoia.it\0" +"net.cm\0uchiko.ehime.jp\0" +"net.cn\0" +"net.co\0izena.okinawa.jp\0iwata.shizuoka.jp\0" +"r\xc3\xa6lingen.no\0zp.gov.pl\0" +"nagano.jp\0" +"net.cu\0monzaedellabrianza.it\0k12.co.us\0\xec\x82\xbc\xec\x84\xb1\0" +"tube\0" +"net.cw\0" +"net.cy\0time.no\0" +"aerobatic.aero\0" +"net.dm\0" +"press.cy\0net.do\0" +"komono.mie.jp\0" +"cim.br\0" +"net.ec\0" +"kagoshima.jp\0rochester.museum\0plo.ps\0myvnc.com\0" +"net.eg\0" +"ruhr\0" +"leka.no\0" +"net.dz\0obu.aichi.jp\0jcb\0" +"and.museum\0" +"krym.ua\0" +"ako.hyogo.jp\0" +"oketo.hokkaido.jp\0" +"helsinki\0" +"net.et\0misato.akita.jp\0bbs.tr\0" +"sd.cn\0kostroma.ru\0" +"\xe5\xae\xae\xe5\x9f\x8e.jp\0jcp\0" +"hb.cn\0" +"ist\0" +"onyourside\0" +"ba.leg.br\0" +"mi.it\0toyama.jp\0me.tz\0" +"aver\xc3\xb8y.no\0k-uralsk.ru\0me.uk\0" +"net.ge\0bg.it\0" +"net.gg\0hyllestad.no\0" +"singles\0" +"yasaka.nagano.jp\0" +"security\0from-az.net\0" +"net.gl\0sardinia.it\0sakai.osaka.jp\0me.us\0" +"ushiku.ibaraki.jp\0r\xc3\xa5holt.no\0" +"net.gn\0as.us\0itv\0" +"net.gp\0" +"educator.aero\0net.gr\0dsmynas.org\0" +"net.gt\0technology\0" +"vennesla.no\0dunlop\0" +"takayama.gifu.jp\0" +"net.gy\0" +"\xe5\xb2\xa1\xe5\xb1\xb1.jp\0" +"net.hk\0" +"\xd7\x99\xd7\xa8\xd7\x95\xd7\xa9\xd7\x9c\xd7\x99\xd7\x9d.museum\0\xc3\xa5lg\xc3\xa5rd.no\0ferrero\0" +"net.hn\0" +"minamiyamashiro.kyoto.jp\0" +"unicom\0" +"massa-carrara.it\0" +"net.ht\0net.id\0" +"health.vn\0" +"iwc\0" +"net.il\0hizen.saga.jp\0" +"net.im\0owani.aomori.jp\0k12.tn.us\0" +"net.in\0os.hedmark.no\0" +"trieste.it\0mc.eu.org\0" +"net.iq\0" +"net.ir\0" +"passenger-association.aero\0net.is\0" +"stokke.no\0" +"net.je\0us.org\0" +"sweetpepper.org\0" +"iwakura.aichi.jp\0" +"lardal.no\0" +"lancashire.museum\0eidskog.no\0" +"blogsyte.com\0" +"net.jo\0" +"broke-it.net\0" +"channel\0from-ok.com\0" +"net.kg\0" +"net.ki\0vista\0" +"sakyo.kyoto.jp\0" +"akaiwa.okayama.jp\0verisign\0" +"lib.ma.us\0" +"net.kn\0is-into-cars.com\0" +"lib.as.us\0lt.eu.org\0" +"grainger\0" +"maniwa.okayama.jp\0net.la\0" +"net.lb\0" +"net.lc\0" +"usui.fukuoka.jp\0nagi.okayama.jp\0" +"cc.or.us\0" +"amur.ru\0tom.ru\0jio\0" +"ryugasaki.ibaraki.jp\0jeju.kr\0sko.gov.pl\0" +"net.ky\0" +"asti.it\0net.kz\0" +"net.lk\0" +"montreal.museum\0" +"sibenik.museum\0" +"gr.it\0sakuragawa.ibaraki.jp\0" +"bi.it\0" +"net.ma\0oceanographique.museum\0" +"net.lr\0" +"kamioka.akita.jp\0" +"ikaruga.nara.jp\0epson\0" +"net.me\0wy.us\0" +"net.lv\0hoyanger.no\0" +"net.ly\0" +"lakas.hu\0gr.jp\0takagi.nagano.jp\0net.mk\0" +"net.ml\0" +"stadt.museum\0school\0" +"kahoku.yamagata.jp\0karmoy.no\0" +"net.mo\0" +"kawajima.saitama.jp\0" +"treviso.it\0kamiamakusa.kumamoto.jp\0net.ms\0pittsburgh.museum\0" +"net.mt\0" +"koganei.tokyo.jp\0net.mu\0" +"net.mv\0net.nf\0\xe3\x83\x95\xe3\x82\xa1\xe3\x83\x83\xe3\x82\xb7\xe3\x83\xa7\xe3\x83\xb3\0" +"net.mw\0net.ng\0" +"yazu.tottori.jp\0net.mx\0" +"net.my\0net.ni\0" +"net.mz\0" +"jlc\0" +"hichiso.gifu.jp\0tatarstan.ru\0" +"am.leg.br\0" +"shinichi.hiroshima.jp\0onagawa.miyagi.jp\0net.nr\0" +"jll\0" +"togo.aichi.jp\0" +"lipsy\0" +"net.nz\0k12.in.us\0" +"ishikawa.jp\0net.om\0" +"naklo.pl\0globo\0" +"gv.ao\0" +"net.pa\0" +"yamanouchi.nagano.jp\0koebenhavn.museum\0" +"gv.at\0net.pe\0" +"mihama.mie.jp\0net.ph\0jmp\0" +"theatre\0" +"sa.edu.au\0" +"net.pk\0" +"wildlife.museum\0vanylven.no\0net.pl\0" +"sagae.yamagata.jp\0botany.museum\0" +"net.pn\0abbott\0" +"nishikawa.yamagata.jp\0" +"selfip.net\0" +"net.qa\0" +"net.pr\0aigo\0jnj\0" +"net.ps\0ryukyu\0" +"austrheim.no\0net.pt\0" +"takahashi.okayama.jp\0" +"mi.th\0lib.sd.us\0" +"nishiawakura.okayama.jp\0net.py\0" +"sh.cn\0" +"mo.cn\0tempio-olbia.it\0gamo.shiga.jp\0weir\0" +"org.ac\0sb.ua\0" +"org.ae\0hotels\0" +"org.af\0" +"org.ag\0fetsund.no\0" +"takatori.nara.jp\0" "org.ai\0" -"org.al\0" -"org.an\0" -"tax\0" -"org.ba\0soundandvision.museum\0trust.museum\0" -"org.ar\0org.bb\0takasago.hyogo.jp\0" -"engine.aero\0" -"org.au\0kursk.ru\0is-very-bad.org\0" -"\xe6\x94\xbf\xe5\xba\x9c\0" -"org.bh\0" -"7.bg\0org.bi\0sola.no\0is-a-socialist.com\0" -"org.az\0" -"hitachi.ibaraki.jp\0" +"orange\0" +"mihama.wakayama.jp\0tuva.su\0" +"org.al\0seoul.kr\0" +"active\0" +"lerdal.no\0servehumour.com\0" +"jot\0" +"org.ba\0ingatlan.hu\0" +"org.ar\0org.bb\0" +"po.gov.pl\0" +"yasugi.shimane.jp\0is-an-actor.com\0" +"org.au\0net.sa\0barclays\0joy\0" +"net.sb\0mi.us\0" +"net.sc\0" +"org.bh\0echizen.fukui.jp\0net.sd\0nissan\0" +"org.bi\0net.ru\0" +"org.az\0\xe7\xb5\x84\xe7\xbb\x87.hk\0" +"net.rw\0net.sg\0" +"a\xc3\xa9roport.ci\0net.sh\0" "org.bm\0" +"tateyama.chiba.jp\0" "org.bo\0" -"rome.it\0" -"tci\0" -"org.br\0tsukiyono.gunma.jp\0" -"org.bs\0ulm.museum\0" +"uji.kyoto.jp\0net.sl\0" +"org.br\0mantova.it\0" +"org.bs\0s\xc3\xb8r-odal.no\0net.so\0nissay\0" "org.bt\0" -"padova.it\0iyo.ehime.jp\0" "org.bw\0" -"sa.edu.au\0org.ci\0" -"org.bz\0shintoku.hokkaido.jp\0" -"stc\0" -"detroit.museum\0geelvinck.museum\0" -"org.cn\0" -"org.co\0sande.more-og-romsdal.no\0" -"sakata.yamagata.jp\0" -"sicily.it\0" -"org.cu\0lib.ak.us\0" +"aosta.it\0net.st\0*.triton.zone\0" +"org.ci\0" +"org.bz\0hakusan.ishikawa.jp\0kudoyama.wakayama.jp\0leirfjord.no\0" +"tos.it\0space.museum\0" +"ikeda.hokkaido.jp\0net.th\0iamallama.com\0" +"net.sy\0" +"org.cn\0langevag.no\0net.tj\0" +"org.co\0hirono.iwate.jp\0" +"shunan.yamaguchi.jp\0net.tm\0" +"rikubetsu.hokkaido.jp\0net.tn\0inc.hk\0" +"net.to\0ap.leg.br\0" +"org.cu\0kameyama.mie.jp\0net.ua\0" +"iwaizumi.iwate.jp\0losangeles.museum\0hob\xc3\xb8l.no\0net.tr\0" "org.cw\0" -"vang.no\0" -"maritimo.museum\0" +"net.tt\0" +"org.cy\0" +"afamilycompany\0" +"ggf.br\0tuva.ru\0net.tw\0" +"wada.nagano.jp\0" "org.dm\0" -"lapy.pl\0" -"org.do\0lom.no\0\xd0\xbc\xd0\xbe\xd0\xbd\0" -"stranda.no\0" -"sicilia.it\0takasu.hokkaido.jp\0kunitomi.miyazaki.jp\0sugito.saitama.jp\0" -"org.ec\0" -"tel\0" -"org.ee\0" -"nishimera.miyazaki.jp\0" -"org.eg\0" -"aichi.jp\0koto.tokyo.jp\0" -"org.dz\0" -"maryland.museum\0" -"minami.kyoto.jp\0homeftp.net\0" -"giving\0" -"ro.it\0turin.it\0wroclaw.pl\0" -"cc.pr.us\0" -"org.es\0from-mt.com\0from-nd.com\0" -"org.et\0\xe0\xa8\xad\xe0\xa8\xbe\xe0\xa8\xb0\xe0\xa8\xa4\0" -"langevag.no\0" -"yamanouchi.nagano.jp\0" -"r\xc3\xa6lingen.no\0fairwinds\0est-a-la-masion.com\0" -"hakui.ishikawa.jp\0" -"kuzumaki.iwate.jp\0sharp\0" -"toyono.osaka.jp\0saitama.saitama.jp\0" -"singles\0" -"military.museum\0" -"eniwa.hokkaido.jp\0" -"jerusalem.museum\0k12.wy.us\0is-a-designer.com\0" -"itayanagi.aomori.jp\0" -"trustee.museum\0" +"schweiz.museum\0" +"org.do\0net.uk\0nikon\0" +"govt.nz\0\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0\0" +"org.ec\0sexy\0" +"org.ee\0chesapeakebay.museum\0bingo\0" +"org.eg\0kamijima.ehime.jp\0net.vc\0" +"tenei.fukushima.jp\0\xc3\xa5""fjord.no\0net.ve\0" +"org.dz\0izumiotsu.osaka.jp\0" +"yamagata.ibaraki.jp\0obninsk.su\0" +"net.uy\0net.vi\0" +"kuji.iwate.jp\0net.uz\0" +"net.vn\0hdfcbank\0ftpaccess.cc\0" +"org.es\0" +"org.et\0" +"trentinosudtirol.it\0nakasatsunai.hokkaido.jp\0" +"franziskaner.museum\0sf.no\0lib.nm.us\0" +"net.vu\0" +"shibuya.tokyo.jp\0funahashi.toyama.jp\0" +"gx.cn\0" +"press.se\0mk.ua\0" +"esashi.hokkaido.jp\0" +"gamvik.no\0" +"abr.it\0" "org.ge\0" -"amami.kagoshima.jp\0" -"parachuting.aero\0org.gg\0" -"org.gh\0ostroleka.pl\0" -"org.gi\0jondal.no\0stuff-4-sale.org\0" -"org.gn\0" -"servebbs.com\0" -"org.gp\0urawa.saitama.jp\0" -"org.gr\0lo.it\0" -"h\xc3\xb8nefoss.no\0" -"org.gt\0" -"from-nj.com\0" -"cc.wi.us\0" +"gs.va.no\0" +"org.gg\0net.ws\0" +"org.gh\0mo.it\0lomza.pl\0zhitomir.ua\0cupcake.is\0" +"org.gi\0" +"beiarn.no\0" +"org.gl\0" +"is-by.us\0" +"ip6.arpa\0org.gn\0" +"org.gp\0sd.us\0" +"org.gr\0otofuke.hokkaido.jp\0" +"org.gt\0kfh\0" +"alsace\0exposed\0" +"nogi.tochigi.jp\0london.museum\0" +"aircraft.aero\0org.gy\0" +"courses\0" "org.hk\0" "org.hn\0" -"oystre-slidre.no\0k12.fl.us\0" -"nat.tn\0" -"encyclopedic.museum\0lib.nm.us\0" -"minamiaiki.nagano.jp\0" -"kv\xc3\xa6nangen.no\0oppdal.no\0k12.ri.us\0" +"dlugoleka.pl\0" +"sorreisa.no\0mk.eu.org\0" "org.ht\0" -"org.hu\0dagestan.ru\0" -"gangwon.kr\0" -"rad\xc3\xb8y.no\0" -"*.yokohama.jp\0mochizuki.nagano.jp\0shimoda.shizuoka.jp\0" -"org.im\0" -"org.in\0kunneppu.hokkaido.jp\0" -"marriott\0" -"org.iq\0" -"org.ir\0lodi.it\0shirakawa.gifu.jp\0kumamoto.kumamoto.jp\0" -"org.is\0alabama.museum\0photo\0" -"org.je\0" -"porn\0" -"kristiansand.no\0from-nh.com\0" -"rokunohe.aomori.jp\0" -"org.jo\0" -"la.us\0" -"chichibu.saitama.jp\0" -"afjord.no\0" -"tel.tr\0" -"asn.au\0k12.ky.us\0" -"org.kg\0" -"okawa.fukuoka.jp\0" -"org.ki\0" -"za.net\0" -"badajoz.museum\0" -"tenkawa.nara.jp\0post\0" +"org.hu\0nishiizu.shizuoka.jp\0net.za\0" +"shimizu.shizuoka.jp\0" +"shiwa.iwate.jp\0natori.miyagi.jp\0haebaru.okinawa.jp\0" +"eu-central-1.compute.amazonaws.com\0" +"bern.museum\0" +"org.il\0mihara.hiroshima.jp\0" +"org.im\0higashishirakawa.gifu.jp\0aviation.museum\0" +"org.in\0" +"from-mn.com\0" +"org.iq\0net.zm\0" +"org.ir\0" +"org.is\0" +"jewelry\0static.land\0" +"org.je\0youtube\0" +"trentinosuedtirol.it\0" +"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xd8\xa9\0" +"donetsk.ua\0\xd0\xbe\xd1\x80\xd0\xb3\0" +"salerno.it\0shoo.okayama.jp\0stockholm\0" +"shibata.miyagi.jp\0" +"kia\0" +"beeldengeluid.museum\0" +"org.jo\0levanger.no\0" +"touch.museum\0" +"tsukigata.hokkaido.jp\0no-ip.ca\0qa2.com\0" +"takahata.yamagata.jp\0" +"shirosato.ibaraki.jp\0" +"org.kg\0mlbfan.org\0" +"abashiri.hokkaido.jp\0higashisumiyoshi.osaka.jp\0" +"org.ki\0kim\0" "org.km\0" -"org.kn\0" -"ohi.fukui.jp\0org.kp\0" -"org.la\0" -"\xe6\xa0\x83\xe6\x9c\xa8.jp\0org.lb\0" -"org.lc\0" -"caltanissetta.it\0" -"monza.it\0" -"vega.no\0" -"grosseto.it\0" -"council.aero\0org.ky\0pictures\0" -"org.kz\0" -"org.lk\0s3-website-ap-southeast-2.amazonaws.com\0" -"togo.aichi.jp\0wajima.ishikawa.jp\0tado.mie.jp\0" -"org.ma\0" -"org.lr\0dyndns.biz\0" -"org.ls\0" -"saga.jp\0" -"org.me\0h\xc3\xb8yanger.no\0" -"narashino.chiba.jp\0org.lv\0" -"org.mg\0and.museum\0" -"sos.pl\0" -"org.ly\0lib.mt.us\0lib.nd.us\0" -"tohnosho.chiba.jp\0poznan.pl\0" -"org.mk\0" -"org.ml\0" -"s3-website-ap-southeast-1.amazonaws.com\0" -"org.mn\0tmall\0" +"org.kn\0boldlygoingnowhere.org\0" +"org.kp\0" +"org.la\0vikna.no\0" +"org.lb\0" +"org.lc\0porsgrunn.no\0consulado.st\0" +"tsubata.ishikawa.jp\0" +"tur.ar\0gz.cn\0org.ky\0rv.ua\0" +"org.kz\0cc.va.us\0" +"org.lk\0press.ma\0" +"camera\0" +"org.ma\0\xc3\xb8ystre-slidre.no\0yalta.ua\0" +"org.lr\0" +"na.it\0org.ls\0lu.eu.org\0me.eu.org\0" +"bo.it\0org.me\0sauherad.no\0" +"org.lv\0" +"org.mg\0" +"columbus.museum\0kazimierz-dolny.pl\0e12.ve\0cloudns.pro\0" +"tur.br\0toon.ehime.jp\0org.ly\0" +"org.mk\0watchandclock.museum\0kvafjord.no\0" +"seirou.niigata.jp\0org.ml\0" +"org.mn\0rj.leg.br\0" "org.mo\0" -"cheltenham.museum\0org.na\0sor-aurdal.no\0" -"kusatsu.shiga.jp\0" +"mine.nu\0" +"org.na\0" +"bifuka.hokkaido.jp\0volkenkunde.museum\0" "org.ms\0" -"am.br\0toyone.aichi.jp\0org.mt\0" -"org.mu\0plumbing\0" -"org.mv\0bielawa.pl\0" +"org.mt\0" +"org.mu\0" +"org.mv\0dyndns.biz\0" "org.mw\0org.ng\0" -"org.mx\0" -"org.my\0" -"work\0" -"toyama.jp\0" -"fh.se\0" -"pol.dz\0" -"gripe\0wales\0" -"tenei.fukushima.jp\0iwakuni.yamaguchi.jp\0po.gov.pl\0" -"family.museum\0" -"org.nr\0" -"bilbao.museum\0sf.no\0" -"hida.gifu.jp\0" -"lyngen.no\0" -"yokoshibahikari.chiba.jp\0" -"kamchatka.ru\0" -"nirasaki.yamanashi.jp\0top\0" -"brunel.museum\0" -"org.nz\0" -"meiwa.gunma.jp\0" -"org.om\0" -"hino.tottori.jp\0boleslawiec.pl\0" -"hareid.no\0" -"taa.it\0" -"org.pa\0" -"tagami.niigata.jp\0" -"komi.ru\0" -"kurogi.fukuoka.jp\0nakatombetsu.hokkaido.jp\0naha.okinawa.jp\0" +"urbinopesaro.it\0org.mx\0fedex\0" +"org.my\0org.ni\0varggat.no\0" +"org.mz\0" +"lindesnes.no\0mandal.no\0" +"volyn.ua\0" +"aoste.it\0" +"hakone.kanagawa.jp\0org.nr\0" +"date.hokkaido.jp\0money\0nokia\0lv.eu.org\0" +"toga.toyama.jp\0" +"yamanobe.yamagata.jp\0org.nz\0" +"itako.ibaraki.jp\0skole.museum\0" +"maritimo.museum\0org.om\0" +"from-ny.net\0" +"nosegawa.nara.jp\0org.pa\0" "org.pe\0" -"wakuya.miyagi.jp\0org.pf\0" -"org.ph\0" -"org.pk\0" -"higashi.fukushima.jp\0kushiro.hokkaido.jp\0org.pl\0" -"\xd0\xbe\xd1\x80\xd0\xb3.\xd1\x81\xd1\x80\xd0\xb1\0is-a-llama.com\0" -"desa.id\0org.pn\0" -"leksvik.no\0" -"org.qa\0" -"shirako.chiba.jp\0org.pr\0" -"org.ps\0" -"org.pt\0" -"gamvik.no\0org.py\0" -"ikawa.akita.jp\0" -"aircraft.aero\0" -"obama.fukui.jp\0" -"england.museum\0graz.museum\0lib.mo.us\0" -"akita.akita.jp\0nakagawa.hokkaido.jp\0" -"davvenj\xc3\xa1rga.no\0" -"embaixada.st\0" -"ambulance.aero\0" -"pol.ht\0" -"chuo.osaka.jp\0" -"l\xc3\xb8ten.no\0ubs\0" -"limited\0" -"bergbau.museum\0h\xc3\xa6gebostad.no\0" -"savona.it\0" -"org.ro\0uk.com\0" -"ski.museum\0org.sa\0" +"org.pf\0" +"kamitsue.oita.jp\0blogspot.com.cy\0" +"satx.museum\0org.ph\0" +"zgorzelec.pl\0" +"mill.museum\0" +"ishikari.hokkaido.jp\0minami.tokushima.jp\0org.pk\0better-than.tv\0" +"org.pl\0gift\0" +"\xe4\xb8\xaa\xe4\xba\xba.hk\0" +"org.pn\0" +"*.api.githubcloud.com\0" +"watch\0" +"meldal.no\0org.qa\0" +"org.pr\0is-a-bulls-fan.com\0" +"org.ps\0blogspot.com.ee\0" +"org.pt\0events\0" +"finance\0blogspot.com.eg\0" +"codespot.com\0" +"beppu.oita.jp\0bytom.pl\0" +"org.py\0" +"izhevsk.ru\0" +"h\xc3\xa1pmir.no\0" +"blogspot.com.ar\0" +"sn.cn\0" +"mw.gov.pl\0education\0blogspot.com.au\0" +"hl.cn\0" +"circus.museum\0" +"shinshiro.aichi.jp\0" +"suwalki.pl\0" +"kijo.miyazaki.jp\0sunndal.no\0snz.ru\0kpn\0" +"citi\0target\0" +"exchange\0" +"uchinomi.kagawa.jp\0" +"ms.it\0" +"shiki.saitama.jp\0org.ro\0" +"ca.it\0tokashiki.okinawa.jp\0blogspot.com.br\0" +"org.sa\0cn-north-1.compute.amazonaws.com.cn\0" "org.sb\0" -"ushistory.museum\0org.rs\0org.sc\0" -"org.sd\0" -"org.ru\0org.se\0amsterdam\0" -"coop.ht\0" -"usarts.museum\0org.sg\0" -"org.sh\0" -"iwate.iwate.jp\0" -"tuva.ru\0" -"org.sl\0" -"stadt.museum\0" +"org.rs\0org.sc\0" +"moma.museum\0org.sd\0" +"yugawara.kanagawa.jp\0org.ru\0org.se\0" +"org.sg\0mo.us\0blogspot.com.by\0" +"mad.museum\0even\xc3\xa1\xc5\xa1\xc5\xa1i.no\0org.sh\0" +"yatomi.aichi.jp\0" +"limanowa.pl\0" +"city\0" +"org.sl\0ddns.net\0" +"recreation.aero\0blogspot.com.co\0" "org.sn\0" -"org.so\0" -"kisosaki.mie.jp\0" -"shunan.yamaguchi.jp\0" -"ohira.miyagi.jp\0wake.okayama.jp\0kyuragi.saga.jp\0org.st\0" -"kumano.mie.jp\0org.sv\0" -"porsanger.no\0org.sy\0" -"trentino-sudtirol.it\0org.sz\0org.tj\0gda.pl\0" -"tj\xc3\xb8me.no\0" -"museum.tt\0" -"org.tm\0lifestyle\0" +"horokanai.hokkaido.jp\0org.so\0" +"krd\0lat\0" +"bolt.hu\0ojiya.niigata.jp\0" +"childrensgarden.museum\0law\0" +"fribourg.museum\0org.st\0" +"org.sv\0" +"kaminoyama.yamagata.jp\0dali.museum\0" +"higashiura.aichi.jp\0org.sy\0" +"rieti.it\0org.sz\0org.tj\0" +"v\xc3\xa6r\xc3\xb8y.no\0" +"taiji.wakayama.jp\0ms.kr\0" +"machida.tokyo.jp\0org.tm\0" "org.tn\0" -"org.to\0" -"altoadige.it\0" -"org.ua\0tui\0" +"neyagawa.osaka.jp\0org.to\0" +"wiw.gov.pl\0" +"org.ua\0" "org.tr\0" -"r\xc3\xb8yken.no\0m\xc3\xa1tta-v\xc3\xa1rjjat.no\0" -"coop.br\0org.tt\0" -"brumunddal.no\0rv.ua\0gr.com\0" -"ingatlan.hu\0org.tw\0org.ug\0finance\0" -"itakura.gunma.jp\0" -"mt.it\0semboku.akita.jp\0minami-alps.yamanashi.jp\0" -"uvic.museum\0org.uk\0" -"nishikata.tochigi.jp\0" -"hk.cn\0" -"namegawa.saitama.jp\0" -"rentals\0" -"volda.no\0org.vc\0" +"zagan.pl\0mex.com\0" +"org.tt\0" +"org.tw\0org.ug\0caseih\0" +"tec.ve\0" +"ikusaka.nagano.jp\0" +"jeonnam.kr\0org.uk\0" +"ascoli-piceno.it\0" +"homesecuritymac.com\0" +"miyako.iwate.jp\0yoshino.nara.jp\0" +"lupin\0blogspot.com.es\0" +"org.vc\0" +"is-a-anarchist.com\0" "org.ve\0" -"kariya.aichi.jp\0asn.lv\0" -"jp.net\0" -"museumvereniging.museum\0philately.museum\0project.museum\0stordal.no\0lib.nv.us\0org.uy\0org.vi\0" -"org.uz\0football\0" -"!city.sendai.jp\0" -"lebesby.no\0vladimir.ru\0" -"org.vn\0" -"games.hu\0" -"kawakami.nara.jp\0" -"priv.hu\0" -"takamatsu.kagawa.jp\0foundation\0" -"fetsund.no\0org.vu\0" -"yotsukaido.chiba.jp\0" -"lv.ua\0" -"osen.no\0" -"soma.fukushima.jp\0fujisawa.kanagawa.jp\0" -"reggioemilia.it\0" -"\xed\x95\x9c\xea\xb5\xad\0" -"bando.ibaraki.jp\0" -"leka.no\0" -"oshima.tokyo.jp\0" -"presidio.museum\0st.no\0org.ws\0" -"space-to-rent.com\0" -"delaware.museum\0" -"kiyama.saga.jp\0" -"omaha.museum\0azure\0" -"matsukawa.nagano.jp\0kannami.shizuoka.jp\0" -"nakhodka.ru\0" -"suifu.ibaraki.jp\0" -"safety.aero\0songdalen.no\0" -"utazas.hu\0guge\0" -"kahoku.ishikawa.jp\0" -"gotsu.shimane.jp\0koge.tottori.jp\0" -"home.dyndns.org\0" -"trentinostirol.it\0kobayashi.miyazaki.jp\0" -"sm.ua\0" -"at.it\0monza-e-della-brianza.it\0" -"ishigaki.okinawa.jp\0musashimurayama.tokyo.jp\0" -"defense.tn\0" -"kosei.shiga.jp\0" -"nichinan.tottori.jp\0" -"\xd7\x99\xd7\xa8\xd7\x95\xd7\xa9\xd7\x9c\xd7\x99\xd7\x9d.museum\0" -"surgut.ru\0" -"taito.tokyo.jp\0" -"isleofman.museum\0" -"oksnes.no\0" -"volkenkunde.museum\0" -"minamimaki.nagano.jp\0" -"cologne\0" -"call\0" +"chizu.tottori.jp\0monash\0" +"dscloud.biz\0" +"tananger.no\0" +"org.uy\0org.vi\0" +"org.uz\0" +"ca.na\0myshopblocks.com\0" +"ing.pa\0org.vn\0" +"stalbans.museum\0lds\0" +"kr.eu.org\0" +"isernia.it\0" +"matsue.shimane.jp\0org.vu\0dev.static.land\0" +"tomobe.ibaraki.jp\0" +"xenapponazure.com\0" +"hn.cn\0farmequipment.museum\0" +"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xdb\x83\0" +"org.ws\0forgot.her.name\0" +"catania.it\0" +"fukumitsu.toyama.jp\0koya.wakayama.jp\0" +"agents.aero\0" +"bs.it\0" +"hidaka.kochi.jp\0" +"konsulat.gov.pl\0" +"aso.kumamoto.jp\0walmart\0" +"froland.no\0" +"hughes\0" +"ne.jp\0onga.fukuoka.jp\0" +"yamanashi.yamanashi.jp\0" +"presse.km\0" +"watarai.mie.jp\0" +"ass.km\0" +"h\xc3\xa6gebostad.no\0" +"bandai.fukushima.jp\0" +"org.za\0" +"is-into-cartoons.com\0" +"tochio.niigata.jp\0" +"futaba.fukushima.jp\0" +"production.aero\0ne.kr\0" +"monzaebrianza.it\0" +"lel.br\0" +"frosinone.it\0is-a-therapist.com\0" +"org.zm\0" +"futtsu.chiba.jp\0" +"tamakawa.fukushima.jp\0" +"nankoku.kochi.jp\0fuji.shizuoka.jp\0" +"dsmynas.net\0" +"myphotos.cc\0" +"\xe4\xb8\x89\xe9\x87\x8d.jp\0presse.ml\0pvt.k12.ma.us\0" +"bnpparibas\0" +"karuizawa.nagano.jp\0" +"irish\0" +"*.transurl.be\0" +"hitachi.ibaraki.jp\0kalisz.pl\0" +"beep.pl\0" +"kushimoto.wakayama.jp\0cc.na\0" +"yk.ca\0" +"kawanishi.nara.jp\0" +"nanbu.yamanashi.jp\0" +"tagajo.miyagi.jp\0" +"chikushino.fukuoka.jp\0ikeda.gifu.jp\0eu-west-1.compute.amazonaws.com\0cloudns.org\0" +"lib.ne.us\0" +"lib.il.us\0" +"hl.no\0akdn\0liaison\0" +"ota.gunma.jp\0\xd8\xa7\xd8\xaa\xd8\xb5\xd8\xa7\xd9\x84\xd8\xa7\xd8\xaa\0" +"suedtirol.it\0shitara.aichi.jp\0jinsekikogen.hiroshima.jp\0" +"szczytno.pl\0nc.tr\0" +"usculture.museum\0sochi.su\0" +"rr.leg.br\0" +"shaw\0" +"blogspot.com.mt\0" +"sp.it\0" +"flesberg.no\0blogspot.com.ng\0" +"ce.it\0olsztyn.pl\0" +"achi.nagano.jp\0" +"go.dyndns.org\0" +"shoes\0" +"geometre-expert.fr\0ms.us\0nc.us\0" +"ca.us\0" +"virtueeldomein.nl\0" +"online\0" +"alto-adige.it\0opencraft.hosting\0" +"naturalhistorymuseum.museum\0" +"\xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\x82\xe0\xa6\xb2\xe0\xa6\xbe\0" +"\xe5\x81\xa5\xe5\xba\xb7\0" +"!www.ck\0valle-aosta.it\0ne.pw\0rns.tn\0" +"cincinnati.museum\0" +"rs.leg.br\0sc.leg.br\0*.transurl.eu\0" +"gateway.museum\0" +"roan.no\0" +"togakushi.nagano.jp\0oshima.tokyo.jp\0" +"higashi.fukushima.jp\0musashimurayama.tokyo.jp\0" +"is-certified.com\0" +"kaga.ishikawa.jp\0quicksytes.com\0" +"k12.ut.us\0" +"christiansburg.museum\0vindafjord.no\0k12.pa.us\0" +"kazan.ru\0blogspot.com.tr\0" +"claims\0knightpoint.systems\0" +"ueda.nagano.jp\0ringebu.no\0" +"leikanger.no\0" +"lol\0works\0" +"chiba.jp\0science-fiction.museum\0murmansk.su\0world\0" +"nago.okinawa.jp\0" +"jelenia-gora.pl\0goldpoint\0" +"nahari.kochi.jp\0estate.museum\0" +"mysecuritycamera.com\0" +"hanamaki.iwate.jp\0ube.yamaguchi.jp\0sorfold.no\0" +"fermo.it\0" +"lincoln\0" +"lpl\0" +"country\0" +"whoswho\0" +"hioki.kagoshima.jp\0musashino.tokyo.jp\0muosat.no\0lib.ms.us\0lib.nc.us\0" +"my.id\0" +"bu.no\0" +"north.museum\0is-a-soxfan.org\0" +"blackfriday\0" +"parma.it\0" +"group\0" +"cc.vi.us\0" +"masfjorden.no\0" +"trentino-sued-tirol.it\0\xd9\x81\xd9\x84\xd8\xb3\xd8\xb7\xd9\x8a\xd9\x86\0" +"iizuna.nagano.jp\0sor-varanger.no\0engineering\0" +"man\0" +"nishihara.kumamoto.jp\0" +"sveio.no\0ne.ug\0map\0microsoft\0" +"her\xc3\xb8y.nordland.no\0mba\0" +"sr.it\0kouyama.kagoshima.jp\0" +"ne.tz\0" +"canon\0" +"kasugai.aichi.jp\0" +"guitars\0" +"oarai.ibaraki.jp\0selfip.org\0serveminecraft.net\0" +"teo.br\0kochi.jp\0berlev\xc3\xa5g.no\0ne.us\0" +"murmansk.ru\0" +"mel\xc3\xb8y.no\0shia\0" +"grp.lk\0" +"mcd\0" +"ome.tokyo.jp\0" +"izunokuni.shizuoka.jp\0" +"dyndns-work.com\0" +"rnu.tn\0" +"okawa.fukuoka.jp\0misaki.okayama.jp\0" +"hakuba.nagano.jp\0" +"owariasahi.aichi.jp\0s\xc3\xb8rfold.no\0" +"rn.leg.br\0" +"clinique\0" +"gmail\0ltd\0" +"state.museum\0" +"readmyblog.org\0" +"blogspot.com.uy\0" +"niiza.saitama.jp\0" +"v\xc3\xa5gan.no\0williamhill\0" +"rawa-maz.pl\0" "historisches.museum\0" -"asker.no\0hornindal.no\0from-tx.com\0" -"jgora.pl\0" -"barrell-of-knowledge.info\0" -"l\xc3\xa6rdal.no\0" -"rzeszow.pl\0" -"izu.shizuoka.jp\0" -"jewish.museum\0aejrie.no\0" -"blogspot.co.at\0priv.at\0" -"lombardy.it\0" -"minamiise.mie.jp\0school\0" -"botanicalgarden.museum\0freemasonry.museum\0lur\xc3\xb8y.no\0" -"omihachiman.shiga.jp\0" -"tr.it\0hokkaido.jp\0miyoshi.hiroshima.jp\0klodzko.pl\0camp\0" -"suisse.museum\0\xe5\x81\xa5\xe5\xba\xb7\0" -"denmark.museum\0" -"in.net\0" -"trysil.no\0is-a-green.com\0" -"lib.ia.us\0" +"abira.hokkaido.jp\0" +"audible\0med\0" +"from-mi.com\0" +"insurance.aero\0hita.oita.jp\0" +"is-a-techie.com\0" +"id.au\0" +"men\0" +"kr\xc3\xa5""anghke.no\0meo\0" +"ro.leg.br\0" +"takaishi.osaka.jp\0www.ro\0" +"himeji.hyogo.jp\0" +"sakuho.nagano.jp\0*.transurl.nl\0" +"priv.hu\0" +"aki.kochi.jp\0" +"arida.wakayama.jp\0" +"nm.cn\0" +"kawagoe.mie.jp\0" +"pubol.museum\0" +"cc.pr.us\0mini\0" +"square.museum\0chernihiv.ua\0" +"church\0" +"spb.ru\0" +"contractors\0" +"ci.it\0ulan-ude.ru\0" +"avoues.fr\0mint\0" +"trentino-stirol.it\0" +"lincoln.museum\0" +"tottori.jp\0" +"campidano-medio.it\0oamishirasato.chiba.jp\0spb.su\0" +"aichi.jp\0" +"hisamitsu\0" +"kurobe.toyama.jp\0mopar\0drud.io\0" +"hisayama.fukuoka.jp\0" +"time.museum\0" +"skjerv\xc3\xb8y.no\0from-de.com\0" +"ehime.jp\0biei.hokkaido.jp\0" +"koriyama.fukushima.jp\0" +"mugi.tokushima.jp\0idrett.no\0" +"mil\0" +"shop\0\xd8\xb9\xd8\xb1\xd8\xa8\0" +"mit\0" +"show\0us-gov-west-1.compute.amazonaws.com\0" +"takko.aomori.jp\0" +"kamoenai.hokkaido.jp\0tadotsu.kagawa.jp\0kiwi\0" +"jamison.museum\0dupont\0" +"flora.no\0" +"tokushima.jp\0" +"bounceme.net\0" +"garden.museum\0paderborn.museum\0hjelmeland.no\0" +"priv.at\0" +"glass.museum\0plumbing\0" +"training\0compute.amazonaws.com.cn\0" +"*.yokohama.jp\0g\xc3\xa1\xc5\x8bgaviika.no\0" +"stj\xc3\xb8rdal.no\0v\xc3\xa5gs\xc3\xb8y.no\0" +"vlaanderen\0" +"rebun.hokkaido.jp\0cyon.site\0" +"hiraya.nagano.jp\0mlb\0hu.com\0" +"sakae.nagano.jp\0" +"kitashiobara.fukushima.jp\0" +"chernigov.ua\0" +"ce.leg.br\0" +"st.no\0lib.mo.us\0radio\0za.bz\0" +"engineer.aero\0matsuura.nagasaki.jp\0toyosato.shiga.jp\0" +"lib.ca.us\0" +"bunkyo.tokyo.jp\0\xd1\x80\xd1\x83\xd1\x81\0" +"sx.cn\0" +"cloudns.eu\0" +"keisen.fukuoka.jp\0webhop.me\0" +"mma\0" +"actor\0mls\0" +"karpacz.pl\0is-a-conservative.com\0" +"ninja\0" +"misasa.tottori.jp\0rightathome\0" +"id.ir\0sv.it\0" +"buyshouses.net\0" +"oceanographic.museum\0aurskog-holand.no\0" +"uonuma.niigata.jp\0" +"\xe9\xa3\x9e\xe5\x88\xa9\xe6\xb5\xa6\0" +"telefonica\0" +"monza-e-della-brianza.it\0snasa.no\0" +"kozagawa.wakayama.jp\0" +"kragero.no\0" +"isteingeek.de\0" +"sandiego.museum\0" +"agematsu.nagano.jp\0" +"kitahiroshima.hokkaido.jp\0toyonaka.osaka.jp\0" +"bergbau.museum\0" +"moe\0" +"trentino-suedtirol.it\0ralingen.no\0" +"jewelry.museum\0lenug.su\0" +"presse.ci\0" +"shirakawa.fukushima.jp\0takashima.shiga.jp\0moi\0wroc.pl\0" +"norton\0" +"mom\0" +"takino.hyogo.jp\0kviteseid.no\0waw.pl\0" +"google\0" +"dvrdns.org\0is-leet.com\0" +"market\0" +"co.ae\0" +"lenvik.no\0" +, + +"co.ag\0hanawa.fukushima.jp\0" +"gmina.pl\0" +"mov\0" +"kihoku.ehime.jp\0bir.ru\0cloudns.in\0" +"onna.okinawa.jp\0" +"bygland.no\0" +"far.br\0kongsberg.no\0" +"co.ao\0act.au\0id.lv\0" +"aetna\0" +"co.bb\0id.ly\0" +"co.at\0" +"nab\0" +"utashinai.hokkaido.jp\0" +"obama.nagasaki.jp\0elverum.no\0" +"co.bi\0ato.br\0soni.nara.jp\0" +"homelinux.com\0" +"omitama.ibaraki.jp\0" +"motobu.okinawa.jp\0cloudns.cc\0" +"fujisawa.kanagawa.jp\0boots\0co.ca\0" +"bauern.museum\0" +"nba\0" +"se.leg.br\0" +"co.bw\0lib.id.us\0starhub\0support\0" +"co.ci\0" +"tj.cn\0seki.gifu.jp\0" +"co.cl\0yuza.yamagata.jp\0" +"co.cm\0" +"scienceandhistory.museum\0" +"co.cr\0alesund.no\0from-va.com\0" +"abu.yamaguchi.jp\0" +"presse.fr\0shiriuchi.hokkaido.jp\0" +"storage\0" +"county.museum\0" +"no.it\0tula.su\0msd\0" +"yamanashi.jp\0bod\xc3\xb8.no\0" +"nagareyama.chiba.jp\0larvik.no\0co.cz\0" +"konyvelo.hu\0co.dk\0" +"from.hr\0laspezia.it\0" +"chuvashia.ru\0" +"m\xc3\xa5s\xc3\xb8y.no\0" +"sakata.yamagata.jp\0" +"kishiwada.osaka.jp\0synology.me\0" +"suli.hu\0sakai.ibaraki.jp\0pisz.pl\0" +"ally\0" +"susono.shizuoka.jp\0" +"komae.tokyo.jp\0" +"takasaki.gunma.jp\0" +"nature.museum\0" +"mtn\0" +"valle-daosta.it\0" +"black\0" +"mtr\0xerox\0" +"nec\0" +"tokyo.jp\0shimosuwa.nagano.jp\0hamaroy.no\0drud.us\0" +"nichinan.miyazaki.jp\0" +"championship.aero\0surnadal.no\0" +"jor.br\0ichiba.tokushima.jp\0" +"yandex\0" +"tsukuba.ibaraki.jp\0" +"sa.com\0" +"honefoss.no\0" +"biz.bb\0" +"museum.tt\0" +"lewismiller.museum\0biz.at\0" +"skierv\xc3\xa1.no\0\xd9\x85\xd9\x88\xd9\x82\xd8\xb9\0" +"co.gg\0net\0tula.ru\0" +"fhsk.se\0new\0" +"biz.az\0niimi.okayama.jp\0orland.no\0" +"co.gl\0shimane.shimane.jp\0silk\0" +"capetown\0" +"iwakuni.yamaguchi.jp\0" +"pordenone.it\0nfl\0" +"gifu.gifu.jp\0" +"sula.no\0" +"pointto.us\0" +"orskog.no\0porsanger.no\0" +"co.gy\0hemnes.no\0" +"ns.ca\0tonosho.kagawa.jp\0" +"realty\0" +"fujisato.akita.jp\0" +"comunica\xc3\xa7\xc3\xb5""es.museum\0" +"lib.ok.us\0" +"ngo\0sina\0" +"co.id\0" +"co.hu\0hiraizumi.iwate.jp\0mitoyo.kagawa.jp\0firmdale\0" +"toyota\0" +"inabe.mie.jp\0karelia.ru\0" +"cq.cn\0cc.wa.us\0" +"biz.cy\0" +"naoshima.kagawa.jp\0rzgw.gov.pl\0ck.ua\0" +"co.il\0iijima.nagano.jp\0biz.dk\0" +"co.im\0historicalsociety.museum\0" +"co.in\0nhk\0" +"numazu.shizuoka.jp\0\xd1\x81\xd1\x80\xd0\xb1\0observer\0" +"szczecin.pl\0ricoh\0" +"co.ir\0wodzislaw.pl\0" +"iida.nagano.jp\0zaporizhzhe.ua\0" +"co.it\0" +"co.je\0horonobe.hokkaido.jp\0" +"est-le-patron.com\0" +"\xe5\xb2\xa9\xe6\x89\x8b.jp\0karelia.su\0" +"atm.pl\0" +"is-a-doctor.com\0" +"kainan.tokushima.jp\0" +"himi.toyama.jp\0nm.us\0barrell-of-knowledge.info\0" +"utazu.kagawa.jp\0id.us\0\xe6\xb7\xa1\xe9\xa9\xac\xe9\x94\xa1\0" +"tomioka.gunma.jp\0russia.museum\0kutno.pl\0" +"tran\xc3\xb8y.no\0" +"co.jp\0lillehammer.no\0" "minamiboso.chiba.jp\0" -"karmoy.no\0k12.nm.us\0" -"mil.ac\0a.bg\0film\0" -"liaison\0" -"mil.ae\0" -"bologna.it\0museum.mv\0from-co.net\0" -"museum.mw\0" -"kaneyama.fukushima.jp\0" -"mil.al\0" -"val-daosta.it\0" -"okaya.nagano.jp\0pol.tr\0" -"mil.ba\0museum.no\0business\0uno\0" -"mil.ar\0macerata.it\0" -"government.aero\0cc.me.us\0" -"toba.mie.jp\0watarai.mie.jp\0meguro.tokyo.jp\0help\0" -"shiksha\0" -"mil.az\0abruzzo.it\0" -"barclaycard\0" -"uol\0" -"mil.bo\0museum.om\0lib.ca.us\0" -"naval.museum\0" -"mil.br\0abashiri.hokkaido.jp\0" -"dyndns-work.com\0" -"fot.br\0" -"s\xc3\xb8rfold.no\0" -"mus.br\0" -"mil.by\0website\0from-dc.com\0" -"\xe6\x96\xb0\xe6\xbd\x9f.jp\0" -"mil.cl\0" -"scholarships\0" -"mil.cn\0" -"aero\0mil.co\0" -"avocat.fr\0kawahara.tottori.jp\0" -"heroy.nordland.no\0" -"arakawa.tokyo.jp\0" -"care\0" -"austrheim.no\0her\xc3\xb8y.m\xc3\xb8re-og-romsdal.no\0" -"tur.ar\0" -"humanities.museum\0" -"showa.fukushima.jp\0monash\0" -"tr.no\0" -"yoita.niigata.jp\0" -"mil.do\0" -"nakatsugawa.gifu.jp\0" -"mil.ec\0mt.us\0nd.us\0casa\0" -"sirdal.no\0cars\0iki.fi\0" -"mil.eg\0youth.museum\0k12.mn.us\0sa.com\0" -"tur.br\0cash\0" -"h.bg\0" -"tsubame.niigata.jp\0" -"davvenjarga.no\0" -"shimizu.hokkaido.jp\0" -"budapest\0" -"sagae.yamagata.jp\0" -"kirov.ru\0" -"br.it\0cb.it\0mie.jp\0" -"bd.se\0" -"\xe6\x9d\xb1\xe4\xba\xac.jp\0" -"game-host.org\0" -"yachiyo.ibaraki.jp\0" -"h\xc3\xa1pmir.no\0" -"otake.hiroshima.jp\0" -"blogspot.co.il\0" -"marylhurst.museum\0" -"mil.ge\0" -"shikama.miyagi.jp\0" -"mini\0" -"mil.gh\0tobishima.aichi.jp\0podzone.net\0" -"avoues.fr\0" -"here\0lifeinsurance\0is-an-engineer.com\0" -"komagane.nagano.jp\0fish\0endofinternet.net\0" -"lajolla.museum\0" -"dlugoleka.pl\0" -"mol.it\0" -"mil.gt\0" -"museum\0castle.museum\0udm.ru\0" -"katsuura.chiba.jp\0" -"arts.museum\0" -"kuromatsunai.hokkaido.jp\0minowa.nagano.jp\0" -"hadano.kanagawa.jp\0lawyer\0" -"oryol.ru\0guru\0" -"mil.hn\0mifune.kumamoto.jp\0" -"yaizu.shizuoka.jp\0" -"lecce.it\0" -"mil.id\0" -"m\xc3\xa1latvuopmi.no\0\xe5\x9c\xa8\xe7\xba\xbf\0" -"vet\0" -"olecko.pl\0" -"newjersey.museum\0" -"celtic.museum\0delivery\0" -"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xd8\xa9\0" -"mil.in\0" -"k12.ok.us\0supplies\0\xd0\xbe\xd1\x80\xd0\xb3\0" -"mil.iq\0" -"ouda.nara.jp\0chihayaakasaka.osaka.jp\0iwi.nz\0" -"o.bg\0skjak.no\0" -"travel.pl\0" +"news.hu\0" +"group.aero\0" +"tochigi.tochigi.jp\0maritime.museum\0" +"biz.et\0net.eu.org\0" +"kibichuo.okayama.jp\0" +"management\0dyndns-home.com\0" +"ina.nagano.jp\0service.gov.uk\0" +"shriram\0" +"from-ar.com\0" +"co.kr\0" +"co.lc\0" +"wien\0" +"mukawa.hokkaido.jp\0bedzin.pl\0express\0" +"hokuto.hokkaido.jp\0" +"nakadomari.aomori.jp\0" +"frontdoor\0" +"amami.kagoshima.jp\0kisosaki.mie.jp\0" +"birdart.museum\0seljord.no\0" +"artgallery.museum\0" +"co.ma\0" +"co.ls\0dating\0reliance\0" +"mckinsey\0" +"obama.fukui.jp\0kaneyama.fukushima.jp\0co.me\0" +"omihachiman.shiga.jp\0co.mg\0" +"ushuaia.museum\0" +"morimachi.shizuoka.jp\0namdalseid.no\0" +"iwanuma.miyagi.jp\0limited\0" +"hellas.museum\0cloudns.us\0" +"co.na\0\xc3\xa5snes.no\0" +"yasuda.kochi.jp\0" +"miharu.fukushima.jp\0" +"nu.ca\0biz.id\0co.mu\0preservation.museum\0" +"amex\0" +"minamiise.mie.jp\0co.mw\0nerdpol.ovh\0" +"co.ni\0" +"co.mz\0gniezno.pl\0archi\0" +"lib.ny.us\0co.nl\0" +"a.bg\0co.no\0" +"res.aero\0aremark.no\0" +"air-traffic-control.aero\0aizumisato.fukushima.jp\0" +"exeter.museum\0priv.pl\0" +"if.ua\0" +"cc.la.us\0infiniti\0site\0" +"blogspot.com\0" +"yamato.fukushima.jp\0" +"co.nz\0" +"iiyama.nagano.jp\0" +"botanicgarden.museum\0co.om\0" +"minoh.osaka.jp\0gs.aa.no\0" "for-our.info\0" -"mobi.gp\0embetsu.hokkaido.jp\0" -"rennesoy.no\0" -"aomori.jp\0hiroshima.jp\0" -"monzaedellabrianza.it\0" -"mil.jo\0" -"ci.it\0trento.it\0coop.tt\0" -"cc.al.us\0academy\0" -"seika.kyoto.jp\0hyuga.miyazaki.jp\0" -"design.museum\0cc.ms.us\0cc.nc.us\0is-certified.com\0" -"\xe5\xa8\xb1\xe4\xb9\x90\0" -"mil.kg\0za.org\0" -"norfolk.museum\0" -"mil.km\0" -"naturalhistory.museum\0lib.dc.us\0" -"wales.museum\0" -"mil.kr\0coop.mv\0" -"coop.mw\0" -"nagasaki.nagasaki.jp\0" -"toyokawa.aichi.jp\0imari.saga.jp\0landrover\0" -"fhv.se\0" -"mil.kz\0" -"roros.no\0java\0" -"toki.gifu.jp\0ina.saitama.jp\0" -"for-more.biz\0" -"vip\0" -"\xe4\xb8\xaa\xe4\xba\xba.hk\0careers\0" -"idrett.no\0kustanai.ru\0" -"mil.lv\0" -"mil.mg\0" -"chofu.tokyo.jp\0\xd9\x81\xd9\x84\xd8\xb3\xd8\xb7\xd9\x8a\xd9\x86\0" -"writesthisblog.com\0" -"oirase.aomori.jp\0olkusz.pl\0" -"com.ac\0ballooning.aero\0" -"com.af\0\xe7\xbd\x91\xe7\xbb\x9c\0" -"airline.aero\0com.ag\0" -"nakijin.okinawa.jp\0" -"com.ai\0vossevangen.no\0" -"shinichi.hiroshima.jp\0marumori.miyagi.jp\0" -"com.al\0mil.mv\0" -"mil.ng\0" -"com.an\0" -"\xe6\x94\xbf\xe5\xba\x9c.hk\0mil.my\0paris\0tips\0" -"trentinos-tirol.it\0kashima.ibaraki.jp\0" -"com.ba\0v.bg\0degree\0" -"com.ar\0com.bb\0caserta.it\0tranibarlettaandria.it\0" -"lebtimnetz.de\0" -"joboji.iwate.jp\0takatsuki.osaka.jp\0gniezno.pl\0travel.tt\0" -"com.au\0mil.no\0" -"in-the-band.net\0" -"com.aw\0" -"com.bh\0" -"com.bi\0" -"com.az\0mito.ibaraki.jp\0" -"coop.py\0" -"kashima.kumamoto.jp\0pomorskie.pl\0" -"com.bm\0" -"shiki.saitama.jp\0sandvikcoromant\0" -"com.bo\0cc.as.us\0" -"minato.tokyo.jp\0mil.nz\0" -"labour.museum\0coffee\0" -"com.br\0pg.it\0shintomi.miyazaki.jp\0" -"com.bs\0cc.nj.us\0" -"com.bt\0bytom.pl\0" -"ichiba.tokushima.jp\0" -"qc.com\0" -"kakamigahara.gifu.jp\0" -"com.by\0com.ci\0" -"com.bz\0ichihara.chiba.jp\0" -"mil.pe\0" -"uji.kyoto.jp\0" -"com.cm\0nesna.no\0" -"com.cn\0mil.ph\0" -"com.co\0\xc4\x8d\xc3\xa1hcesuolo.no\0k12.id.us\0\xe8\x87\xba\xe7\x81\xa3\0melbourne\0" -"kahoku.yamagata.jp\0" -"mil.pl\0" -"selje.no\0" -"tatebayashi.gunma.jp\0shinjo.okayama.jp\0\xe9\x9b\x86\xe5\x9b\xa2\0" -"com.cu\0com.de\0" -"higashikurume.tokyo.jp\0" -"com.cw\0mil.qa\0club.tw\0" -"v\xc3\xa5ler.hedmark.no\0" -"town.museum\0" -"nagasu.kumamoto.jp\0\xd8\xa7\xd9\x85\xd8\xa7\xd8\xb1\xd8\xa7\xd8\xaa\0" -"com.dm\0" -"ninomiya.kanagawa.jp\0so.gov.pl\0\xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\x82\xe0\xa6\xb2\xe0\xa6\xbe\0" -"com.do\0coop.km\0mil.py\0" -"elasticbeanstalk.com\0" -"nachikatsuura.wakayama.jp\0" -"com.ec\0" -"cim.br\0ogata.akita.jp\0" -"com.ee\0" -"komoro.nagano.jp\0" -"com.eg\0a.se\0" -"priv.pl\0" -"com.dz\0yuki.ibaraki.jp\0utazu.kagawa.jp\0geisei.kochi.jp\0" -"city.hu\0dovre.no\0energy\0" -"ny.us\0" -"com.es\0" -"com.et\0tsurugi.ishikawa.jp\0nakagusuku.okinawa.jp\0" -"bajddar.no\0shouji\0" -"blogspot.co.uk\0" -"meeres.museum\0mil.ru\0" -"chita.aichi.jp\0" -"mil.rw\0naturbruksgymn.se\0" -"mil.sh\0" -"seto.aichi.jp\0vision\0" -"agents.aero\0" -"com.fr\0verbania.it\0" -"com.ge\0" -"shiriuchi.hokkaido.jp\0" -"cc.az.us\0" -"com.gh\0creditcard\0" -"com.gi\0" -"pn.it\0mil.st\0" -"maritime.museum\0priv.no\0" -"jus.br\0genova.it\0" -"haugesund.no\0" -"com.gn\0pesaro-urbino.it\0" -"rubtsovsk.ru\0mil.sy\0" -"com.gp\0kyowa.hokkaido.jp\0mil.tj\0" -"com.gr\0" -"mil.tm\0" -"com.gt\0ishikawa.jp\0android\0" -"kazan.ru\0mil.to\0" -"k12.ia.us\0" -"izumi.kagoshima.jp\0mil.tr\0" -"com.gy\0is-a-libertarian.com\0" -"noshiro.akita.jp\0" -"com.hk\0" -"mil.tw\0" -"com.hn\0est.pr\0management\0se.net\0" -"mil.tz\0" -"com.hr\0" -"grane.no\0" -"experts-comptables.fr\0com.ht\0" -"bauern.museum\0nkz.ru\0" -"webcam\0" -"iwanai.hokkaido.jp\0okinoshima.shimane.jp\0" -"mil.vc\0" -"hamura.tokyo.jp\0" -"sorreisa.no\0mil.ve\0" -"com.im\0brussels.museum\0juif.museum\0cc.ia.us\0sa-east-1.compute.amazonaws.com\0" -"com.io\0h.se\0mil.uy\0" -"com.iq\0priv.me\0cc.tx.us\0from-ca.com\0" -"hitoyoshi.kumamoto.jp\0" -"com.is\0" -"salvadordali.museum\0" -"ishikawa.okinawa.jp\0" -"\xe7\xb6\xb2\xe7\xbb\x9c.hk\0algard.no\0ris\xc3\xb8r.no\0" -"k12.ca.us\0" -"homeip.net\0" -"k12.or.us\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xdb\x83\0docs\0frogans\0" -"com.jo\0groks-the.info\0" -"askvoll.no\0aver\xc3\xb8y.no\0" -"ogose.saitama.jp\0gliwice.pl\0" -"sakhalin.ru\0\xe0\xb0\xad\xe0\xb0\xbe\xe0\xb0\xb0\xe0\xb0\xa4\xe0\xb1\x8d\0" -"otsuchi.iwate.jp\0" -"com.kg\0" -"keisen.fukuoka.jp\0" -"com.ki\0" -"yonaguni.okinawa.jp\0" -"from-ma.com\0" -"wed\0" -"com.km\0" -"kv\xc3\xa6""fjord.no\0cherkassy.ua\0cc.ca.us\0" -"chikuzen.fukuoka.jp\0com.kp\0" -"com.la\0nyc.museum\0" -"pu.it\0hirata.fukushima.jp\0suzaka.nagano.jp\0com.lb\0" -"com.lc\0cc.oh.us\0" -"dnsalias.net\0" -"zhitomir.ua\0" -"midori.gunma.jp\0kawai.nara.jp\0" -"com.ky\0masfjorden.no\0" -"wazuka.kyoto.jp\0gotemba.shizuoka.jp\0com.kz\0" -"com.lk\0" -"fujieda.shizuoka.jp\0opole.pl\0" -"lib.fl.us\0homelinux.com\0" -"sar.it\0bydgoszcz.pl\0" -"bristol.museum\0parts\0photos\0" -"ogawa.saitama.jp\0" -"com.lr\0" -"shibetsu.hokkaido.jp\0" -"party\0" -"liguria.it\0com.lv\0" -"com.mg\0m\xc3\xa5lselv.no\0herokussl.com\0" -"adv.br\0oga.akita.jp\0" -"com.ly\0" -"com.mk\0north.museum\0" -"com.ml\0agrinet.tn\0prod\0" -"gs.vf.no\0" -"prof\0" -"com.mo\0yolasite.com\0" -"com.na\0" -"com.ms\0" -"com.mt\0" -"com.mu\0ar.com\0" -"com.mv\0com.nf\0" -"com.mw\0com.ng\0o.se\0" -"com.mx\0swidnica.pl\0" -"com.my\0" -"yamada.iwate.jp\0" -"landes.museum\0stathelle.no\0doha\0" -"togitsu.nagasaki.jp\0" -"trani-andria-barletta.it\0sr.gov.pl\0" -"asakawa.fukushima.jp\0joyo.kyoto.jp\0" -"laz.it\0com.nr\0" -"usculture.museum\0" -"yamaguchi.jp\0" -"tottori.jp\0ota.gunma.jp\0" -"midsund.no\0" -"sannohe.aomori.jp\0" -"lancashire.museum\0com.om\0" -"olsztyn.pl\0" -"com.pa\0\xd9\x87\xd9\x85\xd8\xb1\xd8\xa7\xd9\x87\0" -"eisenbahn.museum\0paroch.k12.ma.us\0s3-us-gov-west-1.amazonaws.com\0no.com\0from-vt.com\0" -"dgca.aero\0com.pe\0vn.ua\0" -"com.pf\0win\0blogspot.co.nz\0" -"bykle.no\0" -"oshima.yamaguchi.jp\0com.ph\0" -"honjo.saitama.jp\0nishikawa.yamagata.jp\0" -"lakas.hu\0com.pk\0" -"*.nagoya.jp\0fuji.shizuoka.jp\0com.pl\0" -"com.qa\0" -"xj.cn\0tomari.hokkaido.jp\0com.pr\0" -"j\xc3\xb8lster.no\0com.ps\0" -"sumoto.hyogo.jp\0com.pt\0" -"kuriyama.hokkaido.jp\0nasushiobara.tochigi.jp\0" -"barcelona.museum\0aurskog-h\xc3\xb8land.no\0" -"com.py\0marketing\0s3-website-sa-east-1.amazonaws.com\0" -"kayabe.hokkaido.jp\0" -"minamata.kumamoto.jp\0shima.mie.jp\0" -"mulhouse.museum\0gs.svalbard.no\0" -"red.sv\0" -"ngo.lk\0com.re\0" -"hachirogata.akita.jp\0kanoya.kagoshima.jp\0" -"massacarrara.it\0anjo.aichi.jp\0chijiwa.nagasaki.jp\0" -"from-hi.com\0" -"is-into-games.com\0" -"\xe6\x96\xb0\xe5\x8a\xa0\xe5\x9d\xa1\0" -"ina.ibaraki.jp\0" -"com.ro\0" -"com.sa\0" -"com.sb\0mobi.tt\0" -"com.sc\0neat-url.com\0" -"com.sd\0" -"drobak.no\0lillehammer.no\0com.ru\0com.se\0" +"ogimi.okinawa.jp\0" +"usarts.museum\0nextdirect\0" +"oi.kanagawa.jp\0" +"university.museum\0museum.mv\0\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86\0" +"pharmacien.fr\0museum.mw\0andoy.no\0pictures\0taifun-dns.de\0" +"delta\0" +"newhampshire.museum\0" +"biz.ki\0" +"rec.br\0co.pl\0" +"puglia.it\0" +"co.pn\0" +"nanyo.yamagata.jp\0museum.no\0" +"nikaho.akita.jp\0" +"handa.aichi.jp\0" +"priv.no\0co.pw\0" +"rec.co\0herokussl.com\0" +"mo\xc3\xa5reke.no\0now\0viajes\0go.leg.br\0" +"okayama.okayama.jp\0museum.om\0" +"wiki\0" +"aguni.okinawa.jp\0" +"computer.museum\0" +"jp.eu.org\0" +"k12.al.us\0club\0" +"ozu.kumamoto.jp\0" +"og.ao\0" +"hayashima.okayama.jp\0" +"karasjohka.no\0" +"co.rs\0" +"usdecorativearts.museum\0nra\0" +"wajima.ishikawa.jp\0" +"yahaba.iwate.jp\0biz.mv\0co.rw\0" +"biz.mw\0" +"zama.kanagawa.jp\0kr.com\0" +"biz.ni\0" +"malvik.no\0obi\0" +"priv.me\0" +"ujitawara.kyoto.jp\0malselv.no\0orsta.no\0doctor\0" +"matsushige.tokushima.jp\0" +"biz.nr\0" +"co.st\0" +"dance\0" +"yoshida.saitama.jp\0" +"co.th\0" +"kamisunagawa.hokkaido.jp\0from-ri.com\0" +"c.bg\0co.sz\0co.tj\0nrw\0" +"wine\0" +"co.tm\0" +"cc.ks.us\0co.ua\0" +"sicilia.it\0catering\0" +"okegawa.saitama.jp\0" +"elk.pl\0co.tt\0" +"assisi.museum\0nagoya\0" "kiho.mie.jp\0" -"com.rw\0com.sg\0" -"com.sh\0mobi.tz\0xbox\0" -"k12.co.us\0" -"lease\0" -"com.sl\0" -"wme\0" -"com.sn\0" -"l\xc3\xb8renskog.no\0com.so\0" -"com.st\0" -"cosenza.it\0com.sv\0" -"masoy.no\0" -"sasaguri.fukuoka.jp\0" -"com.sy\0" -"assabu.hokkaido.jp\0kanmaki.nara.jp\0com.tj\0" -"zaporizhzhe.ua\0" -"tamakawa.fukushima.jp\0faith\0" -"com.tm\0" -"ug.gov.pl\0com.tn\0" -"com.to\0cc.co.us\0" -"voronezh.ru\0com.ua\0" -"rc.it\0com.tr\0" -"hokksund.no\0\xc3\xa1k\xc5\x8boluokta.no\0" -"com.tt\0" -"mel\xc3\xb8y.no\0" -"\xe6\x84\x9b\xe5\xaa\x9b.jp\0shichinohe.aomori.jp\0" -"com.tw\0com.ug\0" -"kisofukushima.nagano.jp\0" -"kepno.pl\0" -"artgallery.museum\0zgrad.ru\0" -"nome.pt\0" -"inc.hk\0" -"control.aero\0" -"gamagori.aichi.jp\0ngo.ph\0" -"sa.au\0""2.bg\0com.vc\0" -"biratori.hokkaido.jp\0matsushige.tokushima.jp\0" -"topology.museum\0com.ve\0" -"ichinomiya.aichi.jp\0" -"semine.miyagi.jp\0saarland\0" -"com.uy\0com.vi\0" -"valle-aosta.it\0nakayama.yamagata.jp\0com.uz\0" -"dn.ua\0" -"ws.na\0" -"com.vn\0" -"act.edu.au\0durham.museum\0" -"reggio-emilia.it\0bizen.okayama.jp\0yamada.toyama.jp\0" -"mansions.museum\0podzone.org\0" -"tomobe.ibaraki.jp\0minamiyamashiro.kyoto.jp\0matsubushi.saitama.jp\0" -"glas.museum\0" -"lc.it\0rikubetsu.hokkaido.jp\0engineer\0" -"com.vu\0" -"nishitosa.kochi.jp\0" -"yaroslavl.ru\0" -"fj.cn\0" -"makinohara.shizuoka.jp\0" -"saka.hiroshima.jp\0" -"mobi.na\0vagsoy.no\0sevastopol.ua\0" -"sa.cr\0" -"lib.mi.us\0com.ws\0" -"naoshima.kagawa.jp\0" -"mobi.ng\0hobby-site.org\0" -"tokai.ibaraki.jp\0" -"catania.it\0shinagawa.tokyo.jp\0" -"sannan.hyogo.jp\0" -"rotorcraft.aero\0amot.no\0" -"sanofi\0" -"tas.gov.au\0" -"fc.it\0kochi.kochi.jp\0" -"kemerovo.ru\0" -"leangaviika.no\0" -"gyeongnam.kr\0consulado.st\0" -"leirfjord.no\0" -"hayashima.okayama.jp\0koka.shiga.jp\0" -"autos\0is-by.us\0" -"smile\0" -"conf.au\0" -"9.bg\0wtc\0" -"wtf\0" -"nsw.edu.au\0aurland.no\0chrome\0" -"otaki.saitama.jp\0" -"yosemite.museum\0parti.se\0" -"kawanishi.nara.jp\0" -"baltimore.museum\0yoga\0" -"es.kr\0" -"heroy.more-og-romsdal.no\0" -"omotego.fukushima.jp\0" -"british.museum\0" -"ishinomaki.miyagi.jp\0" -"game.tw\0cc.vt.us\0" -"umi.fukuoka.jp\0ikusaka.nagano.jp\0" -"sh.cn\0" -"judaica.museum\0gjemnes.no\0itau\0" -"slupsk.pl\0" -"musashino.tokyo.jp\0" -"k\xc3\xa1r\xc3\xa1\xc5\xa1johka.no\0" -"malatvuopmi.no\0from-pa.com\0" -"tomakomai.hokkaido.jp\0" -"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86\0" -"unbi.ba\0nid.io\0" -"szex.hu\0" -"wassamu.hokkaido.jp\0naka.ibaraki.jp\0" -"kawasaki.miyagi.jp\0" -"daiwa.hiroshima.jp\0" -"is-very-sweet.org\0" -"naganohara.gunma.jp\0" -"solund.no\0" -"gose.nara.jp\0" -"juegos\0" -"sa.it\0" -"emergency.aero\0hawaii.museum\0" -"\xd0\xbc\xd0\xbe\xd1\x81\xd0\xba\xd0\xb2\xd0\xb0\0" -"medio-campidano.it\0hiroo.hokkaido.jp\0" -"svizzera.museum\0doomdns.org\0" -"hioki.kagoshima.jp\0" -"edu.ac\0" -"yokosuka.kanagawa.jp\0" -"ipiranga\0" -"edu.af\0tono.iwate.jp\0takagi.nagano.jp\0" -"edu.al\0nuoro.it\0\xe5\xb3\xb6\xe6\xa0\xb9.jp\0inagi.tokyo.jp\0" -"sogndal.no\0room\0endofinternet.org\0" -"edu.an\0\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86.ir\0yuasa.wakayama.jp\0" -"berlev\xc3\xa5g.no\0" -"edu.ba\0" -"edu.ar\0edu.bb\0taketomi.okinawa.jp\0" -"crimea.ua\0" -"edu.au\0" -"video\0" -"edu.bh\0" -"edu.bi\0" -"edu.az\0" -"anthropology.museum\0is-a-anarchist.com\0" -"kartuzy.pl\0xin\0" -"edu.bm\0" -"watari.miyagi.jp\0" -"edu.bo\0flatanger.no\0roan.no\0" -"edu.br\0" -"edu.bs\0homedns.org\0" -"edu.bt\0" -"imabari.ehime.jp\0" -"edu.ci\0\xd1\x80\xd1\x83\xd1\x81\0" -"edu.bz\0kumiyama.kyoto.jp\0" -"is-a-financialadvisor.com\0" -"izhevsk.ru\0" -"edu.cn\0" -"edu.co\0sandnessj\xc3\xb8""en.no\0" -"sardegna.it\0" -"awaji.hyogo.jp\0" -"soni.nara.jp\0" -"edu.cu\0" -"edu.cw\0clinton.museum\0\xc3\xa5mli.no\0ks.ua\0" -"\xe7\xbb\x84\xe7\xbb\x87\xe6\x9c\xba\xe6\x9e\x84\0" -"gol.no\0" -"pisz.pl\0" -"monmouth.museum\0" -"edu.dm\0z-1.compute-1.amazonaws.com\0" -"edu.do\0" -"ah.cn\0" -"edu.ec\0" -"mo.cn\0izumiotsu.osaka.jp\0" -"edu.ee\0" -"dental\0" -"edu.eg\0cartoonart.museum\0" -"trentinoalto-adige.it\0" -"ks.us\0" -"edu.dz\0homelinux.net\0" -"epilepsy.museum\0" -"nakanoto.ishikawa.jp\0shiraoka.saitama.jp\0" -"stateofdelaware.museum\0k12.ks.us\0" -"izumozaki.niigata.jp\0" -"kamisu.ibaraki.jp\0" -"edu.es\0discovery.museum\0" -"edu.et\0airtel\0" -"palermo.it\0" -"yura.wakayama.jp\0" -"\xd0\xb4\xd0\xb5\xd1\x82\xd0\xb8\0" -"go.ci\0romsa.no\0" -"omigawa.chiba.jp\0niihama.ehime.jp\0" -"villas\0" -"edu.ge\0" -"pug.it\0matsuura.nagasaki.jp\0" -"comunica\xc3\xa7\xc3\xb5""es.museum\0dyndns-ip.com\0" -"edu.gh\0" -"edu.gi\0br\xc3\xb8nn\xc3\xb8y.no\0rahkkeravju.no\0sn\xc3\xa5sa.no\0" -"go.cr\0ulsan.kr\0" -"agency\0" -"edu.gn\0" -"stavanger.no\0" -"edu.gp\0" -"edu.gr\0" -"artcenter.museum\0" -"edu.gt\0" -"fitjar.no\0" -"aosta.it\0" -"yoshino.nara.jp\0publ.pt\0" -"edu.hk\0" -"edu.hn\0higashiizu.shizuoka.jp\0" -"nf.ca\0investments\0" -"trentinosued-tirol.it\0imakane.hokkaido.jp\0" -"naie.hokkaido.jp\0" -"illustration.museum\0" -"edu.ht\0fujiyoshida.yamanashi.jp\0" -"chiyoda.gunma.jp\0" -"science-fiction.museum\0" -"so.it\0" -"kamikoani.akita.jp\0" -"edu.in\0" -"gv.ao\0" -"kyotanabe.kyoto.jp\0nabari.mie.jp\0" -"edu.iq\0" -"edu.is\0" -"gv.at\0edu.it\0" +"tn.it\0co.ug\0" +"nu.it\0" +"ismaili\0" +"cs.it\0co.tz\0" +"co.uk\0" +"decorativearts.museum\0naumburg.museum\0biz.pk\0" +"botanicalgarden.museum\0biz.pl\0" +"computer\0" +"\xe6\x95\x99\xe8\x82\xb2.hk\0" "stuff-4-sale.us\0" -"yamagata.yamagata.jp\0" -"pasadena.museum\0" -"kawai.iwate.jp\0ryuoh.shiga.jp\0" -"saltdal.no\0stokke.no\0" -"tychy.pl\0makeup\0" -"surnadal.no\0gos.pk\0" -"edu.jo\0" -"fermo.it\0fujimi.saitama.jp\0" -"wakkanai.hokkaido.jp\0" -"nara.nara.jp\0" -"edu.kg\0\xe0\xa4\xa8\xe0\xa5\x87\xe0\xa4\x9f\0" -"edu.ki\0aa.no\0" -"mo.it\0" -"kvinnherad.no\0" -"oamishirasato.chiba.jp\0sumita.iwate.jp\0" -"edu.km\0from-nm.com\0" -"edu.kn\0" -"cc.wy.us\0" -"fukui.fukui.jp\0koryo.nara.jp\0edu.kp\0" -"edu.la\0" -"edu.lb\0" -"edu.lc\0" -"kounosu.saitama.jp\0fuchu.toyama.jp\0" -"dominic.ua\0lib.ar.us\0" -"\xe7\xae\x87\xe4\xba\xba.hk\0edu.ky\0" -"edu.kz\0" -"edu.lk\0" -"go.id\0mantova.it\0funahashi.toyama.jp\0" +"biz.pr\0co.us\0" +"co.ve\0caravan\0" +"ntt\0" +"co.vi\0" +"toyo.kochi.jp\0co.uz\0" +"izumozaki.niigata.jp\0sel.no\0" +"uzs.gov.pl\0" +"quebec.museum\0" +"funagata.yamagata.jp\0" +"yoka.hyogo.jp\0" +"brand.se\0" +"ryokami.saitama.jp\0dscloud.mobi\0" +"uy.com\0" +"trentino-aadige.it\0ide.kyoto.jp\0saarland\0" +"off\0" +"aland.fi\0" +"rocks\0" +"slask.pl\0" +"nore-og-uvdal.no\0" +"semboku.akita.jp\0" +"k\xc3\xa1r\xc3\xa1\xc5\xa1johka.no\0" +"\xd8\xa7\xd9\x84\xd8\xb9\xd9\x84\xd9\x8a\xd8\xa7\xd9\x86\0" +"chijiwa.nagasaki.jp\0" +"eastafrica.museum\0radom.pl\0" +"motegi.tochigi.jp\0" +"aya.miyazaki.jp\0ariake.saga.jp\0spy.museum\0" +"shinagawa.tokyo.jp\0" +"utsunomiya.tochigi.jp\0" +"higashi.fukuoka.jp\0izumi.kagoshima.jp\0solund.no\0" +"kagoshima.kagoshima.jp\0" +"homelinux.net\0" +"cloudns.pw\0" +"olbia-tempio.it\0" +"from-ms.com\0from-nc.com\0" +"soccer\0" +"biz.tj\0" +"egersund.no\0yuzhno-sakhalinsk.ru\0" +"science.museum\0" +"bryne.no\0paroch.k12.ma.us\0" +"s3.eu-central-1.amazonaws.com\0" +"co.za\0" +"biz.ua\0" +"yoro.gifu.jp\0biz.tr\0" +"spydeberg.no\0" +"e.bg\0biz.tt\0" +"nyc\0" +"conf.au\0" +"cleaning\0" +"yuki.ibaraki.jp\0" +"cc.fl.us\0co.zm\0" +"wellbeingzone.eu\0" +"tp.it\0" +"og.it\0" +"parliament.nz\0" +"gmbh\0" +"ando.nara.jp\0" +"\xe6\x95\x8e\xe8\x82\xb2.hk\0" +"biz.vn\0" +"rec.nf\0" +"jerusalem.museum\0selfip.biz\0" +"azumino.nagano.jp\0grimstad.no\0" +"kamikawa.hyogo.jp\0wiih.gov.pl\0" +"olbiatempio.it\0" +"sango.nara.jp\0" +"store\0" +"notaires.km\0" +"inuyama.aichi.jp\0" +"is-gone.com\0" +"shakotan.hokkaido.jp\0" +"\xe5\x8c\x97\xe6\xb5\xb7\xe9\x81\x93.jp\0" +"jus.br\0fhapp.xyz\0" +"rovigo.it\0yamagata.jp\0" +"reg.dk\0" +"k12.vt.us\0" +"kamitonda.wakayama.jp\0turystyka.pl\0" +"children.museum\0" +"c.la\0" +"kyiv.ua\0" +"weatherchannel\0" +"okinawa.okinawa.jp\0" +"lotte\0" +"in.na\0" +"ivgu.no\0from-nj.com\0" +"basketball\0" +"is-a-hunter.com\0" +"imageandsound.museum\0" +"lotto\0one\0" +"in.ni\0osen.no\0" +"ong\0" +"krodsherad.no\0" +"lib.tx.us\0" +"a.se\0" +"arita.saga.jp\0biz.zm\0" +"kamishihoro.hokkaido.jp\0onl\0lib.de.us\0" +"g.bg\0omigawa.chiba.jp\0" +"nagaoka.niigata.jp\0" +"belgorod.ru\0" +"cc.wi.us\0neustar\0" +"fuoisku.no\0" +"namegata.ibaraki.jp\0" +"sakahogi.gifu.jp\0takahagi.ibaraki.jp\0rec.ro\0" +"omura.nagasaki.jp\0" +"tokigawa.saitama.jp\0" +"tr.it\0hoteles\0" +"hanamigawa.chiba.jp\0" +"mortgage\0" +"ooo\0" +"eu.org\0" +"tn.us\0" +"il.us\0rodeo\0" +"dc.us\0shouji\0" +"tamatsukuri.ibaraki.jp\0" +"blogspot.co.at\0" +"caa.aero\0" +"ski.no\0" +"steiermark.museum\0" +"civilization.museum\0" +"blogspot.vn\0" +"kitagata.gifu.jp\0utsira.no\0" +"ono.fukui.jp\0imdb\0" +"lefrak\0*.githubcloudusercontent.com\0" +"fukuchiyama.kyoto.jp\0cloudns.info\0" +"symantec\0" +"giving\0" +"firestone\0quest\0" +"tjmaxx\0" +"shintomi.miyazaki.jp\0" +"org\0" +"grozny.su\0pay\0" +"floro.no\0" +"rec.ve\0" +"it.ao\0" +"tv.bb\0" +"biev\xc3\xa1t.no\0in.rs\0" +"takahama.fukui.jp\0" +"ebiz.tw\0chirurgiens-dentistes-en-france.fr\0" +"higashikawa.hokkaido.jp\0" +"wallonie.museum\0dovre.no\0" +"lipetsk.ru\0" +"tv.bo\0\xd1\x83\xd0\xba\xd1\x80\0" +"broker.aero\0skin\0" +"tv.br\0" +"fredrikstad.no\0hobby-site.org\0" +"sano.tochigi.jp\0" +"arezzo.it\0q-a.eu.org\0" +"metlife\0" +"gokase.miyazaki.jp\0tr.no\0aurland.no\0c.se\0in.th\0" +"lib.dc.us\0" +"i.bg\0" +"is-a-cubicle-slave.com\0blogspot.re\0" +"akune.kagoshima.jp\0" +"gucci\0from-wv.com\0js.org\0" +"tt.im\0in.ua\0" +"cc.ky.us\0" +"matsudo.chiba.jp\0kiwa.mie.jp\0e-burg.ru\0" +"viking\0" +"ott\0" +"ud.it\0blogspot.ro\0" +"karate.museum\0royrvik.no\0" +"prochowice.pl\0warmia.pl\0smart\0" +"nanbu.tottori.jp\0" +"hino.tottori.jp\0americana.museum\0grozny.ru\0blogspot.rs\0" +"erotica.hu\0trentinoalto-adige.it\0" +"blogspot.ru\0blogspot.se\0" +"steinkjer.no\0blogspot.sg\0" +"blogspot.si\0" +"vgs.no\0in.us\0" +"wzmiuw.gov.pl\0de.us\0blogspot.sk\0" "chippubetsu.hokkaido.jp\0" -"hamburg.museum\0\xc3\xa5snes.no\0" -"tsuga.tochigi.jp\0" -"sciences.museum\0" -"edu.lr\0" -"luster.no\0vinnica.ua\0" -"edu.me\0" -"edu.lv\0" -"edu.mg\0" -"edu.ly\0cultural.museum\0ftpaccess.cc\0" -"kagamino.okayama.jp\0" -"edu.mk\0rygge.no\0" -"go.it\0hirono.fukushima.jp\0daito.osaka.jp\0edu.ml\0" -"salangen.no\0tromsa.no\0reviews\0" -"edu.mn\0" -"edu.mo\0" -"sv.it\0" -"cymru.museum\0e-burg.ru\0cc.ri.us\0" -"tsumagoi.gunma.jp\0gorlice.pl\0" -"edu.ms\0" -"nm.cn\0\xe5\x8d\x83\xe8\x91\x89.jp\0nonoichi.ishikawa.jp\0edu.mt\0" -"ayagawa.kagawa.jp\0edu.mv\0" -"edu.mw\0edu.ng\0b\xc3\xa5""d\xc3\xa5""ddj\xc3\xa5.no\0poltava.ua\0" -"go.jp\0edu.mx\0" -"edu.my\0ma.us\0k12.al.us\0" -"kyotamba.kyoto.jp\0" -"k12.mi.us\0" -"onna.okinawa.jp\0" -"stryn.no\0" -"pescara.it\0edu.nr\0" -"county.museum\0" -"\xe5\x95\x86\xe6\xa0\x87\0" -"tm.fr\0komae.tokyo.jp\0" -"msk.ru\0" -"bialowieza.pl\0" -"haram.no\0\xd1\x81\xd1\x80\xd0\xb1\0sells-for-u.com\0" -"go.kr\0" -"trapani.it\0takahama.fukui.jp\0nayoro.hokkaido.jp\0ibaraki.ibaraki.jp\0" -"forde.no\0edu.om\0" -"ao.it\0" -"ah.no\0edu.pa\0" -"trentino-suedtirol.it\0" -"mesaverde.museum\0cc.ky.us\0" -"taishin.fukushima.jp\0erimo.hokkaido.jp\0" -"edu.pe\0" -"como.it\0edu.pf\0" -"edu.ph\0" -"yamada.fukuoka.jp\0" -"edu.pk\0ga.us\0" -"edu.pl\0" -"edu.pn\0" -"production.aero\0sk\xc3\xa1nit.no\0" -"lucania.it\0" -"sandnes.no\0edu.qa\0" -"edu.pr\0garden\0" -"nt.au\0edu.ps\0" -"mar.it\0edu.pt\0" -"fukagawa.hokkaido.jp\0toyosato.shiga.jp\0" -"tm.hu\0edu.py\0" -"friulivenezia-giulia.it\0hiphop\0" -"coastaldefence.museum\0" -"chiyoda.tokyo.jp\0mragowo.pl\0" -"nt.ca\0" -"valle-daosta.it\0" -"hinode.tokyo.jp\0" -"lacaixa\0" -"watches\0" -"xxx\0" -"field.museum\0missoula.museum\0d\xc3\xb8nna.no\0science\0hu.com\0" -"tadaoka.osaka.jp\0" -"hayakawa.yamanashi.jp\0" -"dnsalias.org\0" -"edu.sa\0" -"edu.sb\0" -"edu.rs\0edu.sc\0lib.id.us\0" -"ogori.fukuoka.jp\0notogawa.shiga.jp\0edu.sd\0" -"repbody.aero\0id.au\0edu.ru\0k12.nj.us\0" -"loyalist.museum\0edu.rw\0edu.sg\0" -"xyz\0" -"moka.tochigi.jp\0dynathome.net\0" -"kimino.wakayama.jp\0edu.sl\0nissan\0" -"veterinaire.km\0" -"kokubunji.tokyo.jp\0edu.sn\0" -"os.hordaland.no\0" -"tm.km\0artsandcrafts.museum\0is-a-musician.com\0" -"*.kitakyushu.jp\0iitate.fukushima.jp\0" -"edu.st\0" -"av.it\0urayasu.chiba.jp\0edu.sv\0" -"florida.museum\0ninja\0" -"edu.sy\0" -"nemuro.hokkaido.jp\0edu.tj\0" +"\xe7\xbd\x91\xe7\xb5\xa1.hk\0pet\0blogspot.sn\0" +"\xe9\xb3\xa5\xe5\x8f\x96.jp\0drobak.no\0" +"ovh\0" +"za.com\0blogspot.td\0" +"ichinomiya.chiba.jp\0ikata.ehime.jp\0yuasa.wakayama.jp\0" +"degree\0" +"takasu.hokkaido.jp\0herokuapp.com\0" +"miners.museum\0" +"fukuoka.jp\0moriguchi.osaka.jp\0lodingen.no\0" +"selje.no\0" +"trentinoaadige.it\0minowa.nagano.jp\0rnrt.tn\0" +"mat.br\0verran.no\0" +"is.eu.org\0" +"bar.pro\0" +"cards\0" +"friulivgiulia.it\0cdn77-ssl.net\0" +"kawakami.nagano.jp\0blogspot.co.id\0" +"epilepsy.museum\0blogspot.tw\0blogspot.ug\0" +"schule\0\xe7\x82\xb9\xe7\x9c\x8b\0" +"aizuwakamatsu.fukushima.jp\0" +"isla.pr\0capitalone\0selfip.com\0" +"hornindal.no\0tychy.pl\0" +"blogspot.co.il\0" +"yachiyo.ibaraki.jp\0phd\0" +"nara.nara.jp\0redstone\0" +"iglesias-carbonia.it\0blogspot.mr\0" +"osakikamijima.hiroshima.jp\0kimino.wakayama.jp\0" +"kids.us\0no.com\0" +"mar.it\0" +"mochizuki.nagano.jp\0" +"blogspot.mx\0" +"blogspot.my\0" +"terni.it\0tra.kp\0" +"casino\0blogspot.nl\0" +"kmpsp.gov.pl\0" +"pid\0" +"blogspot.no\0" +"tatsuno.hyogo.jp\0" +"it.eu.org\0" +"sakura.tochigi.jp\0staples\0from-oh.com\0" +"pin\0" +"cymru\0dynalias.net\0" +"togane.chiba.jp\0e.se\0" +"klepp.no\0" +"k.bg\0" +"inazawa.aichi.jp\0" +"moss.no\0" +"khabarovsk.ru\0" +"tv.im\0" +"blogspot.pe\0" +"forde.no\0so.gov.pl\0website\0" +"space-to-rent.com\0" +"indianmarket.museum\0\xd1\x81\xd0\xb0\xd0\xb9\xd1\x82\0" +"tv.it\0" +"tobe.ehime.jp\0" +"aisai.aichi.jp\0hinode.tokyo.jp\0v\xc3\xa1rgg\xc3\xa1t.no\0us-west-1.compute.amazonaws.com\0" +"miyagi.jp\0delaware.museum\0" +"aerodrome.aero\0immo\0" +"ollo\0blogspot.qa\0" +"ny.us\0blogspot.pt\0" +"hatsukaichi.hiroshima.jp\0kvinesdal.no\0" +"kalmykia.su\0" +"nishigo.fukushima.jp\0" +"otsu.shiga.jp\0" +"r\xc3\xb8mskog.no\0" +"gyokuto.kumamoto.jp\0" +"lifeinsurance\0" +"games.hu\0kotohira.kagawa.jp\0" +"brumunddal.no\0" +"blogspot.is\0" +"blogspot.it\0" +"civilisation.museum\0" +"saijo.ehime.jp\0" +"nishinomiya.hyogo.jp\0" +"kuzumaki.iwate.jp\0stor-elvdal.no\0" +"blogspot.jp\0" +"in.eu.org\0" +"solutions\0" "s\xc3\xb8rum.no\0" -"yawatahama.ehime.jp\0oyamazaki.kyoto.jp\0moroyama.saitama.jp\0" -"edu.tm\0" -"shinyoshitomi.fukuoka.jp\0\xd1\x80\xd1\x84\0" -"fuel.aero\0hellas.museum\0go.pw\0edu.to\0" -"edu.ua\0" -"edu.tr\0" -"zlg.br\0edu.tt\0" -"tm.mc\0edu.tw\0fitness\0s3-us-west-2.amazonaws.com\0" -"iwaizumi.iwate.jp\0kitakata.miyazaki.jp\0" -"hembygdsforbund.museum\0" -"kumano.hiroshima.jp\0" -"tm.mg\0sec.ps\0" -"cremona.it\0" -"railway.museum\0" -"r\xc3\xa5""de.no\0is-a-lawyer.com\0" -"nishiizu.shizuoka.jp\0wajiki.tokushima.jp\0" -"edu.vc\0" -"shimonoseki.yamaguchi.jp\0" -"edu.ve\0" -"tt.im\0edu.uy\0bingo\0" -"ibestad.no\0" -"komatsu.ishikawa.jp\0meiwa.mie.jp\0\xd8\xa7\xd9\x84\xd9\x8a\xd9\x85\xd9\x86\0" -"cadaques.museum\0" -"edu.vn\0" -"cyber.museum\0" -"ud.it\0aki.kochi.jp\0" -"veterinaire.fr\0" -"tm.no\0royrvik.no\0boats\0youtube\0" -"toshima.tokyo.jp\0" -"edu.vu\0" -"hazu.aichi.jp\0yoka.hyogo.jp\0" -"mo.us\0k12.az.us\0boldlygoingnowhere.org\0" -"shimamaki.hokkaido.jp\0" -"mizuho.tokyo.jp\0conf.lv\0go.th\0" -"c.bg\0" -"go.tj\0" -"indiana.museum\0edu.ws\0" -"kamifurano.hokkaido.jp\0ryugasaki.ibaraki.jp\0" -"giske.no\0safe\0" -"miyagi.jp\0" -"matta-varjjat.no\0" -"caa.aero\0firmdale\0" -"ojiya.niigata.jp\0" -"go.ug\0" -"tm.pl\0" -"go.tz\0" -"sakegawa.yamagata.jp\0" -"alvdal.no\0" -"os.hedmark.no\0" -"hizen.saga.jp\0" -"pb.ao\0chicago.museum\0fuossko.no\0" -"srv.br\0azurewebsites.net\0" -"or.at\0" -"br\xc3\xb8nn\xc3\xb8ysund.no\0" -"or.bi\0" -"higashimatsuyama.saitama.jp\0" -"l\xc3\xa1hppi.no\0" -"\xe5\x85\xac\xe5\x8f\xb8.cn\0koga.fukuoka.jp\0cern\0" -"notodden.no\0" -"katano.osaka.jp\0" -"dinosaur.museum\0windmill.museum\0" -"yonezawa.yamagata.jp\0" -"id.ir\0kasahara.gifu.jp\0" -"tm.ro\0" -"sex.hu\0college\0" -"or.ci\0starnberg.museum\0hm.no\0bloomberg\0" -"cal.it\0rns.tn\0" -"\xe5\x85\xac\xe5\x8f\xb8.hk\0tm.se\0" -"web.co\0" -"land\0" -"saga.saga.jp\0" -"or.cr\0" -"navuotna.no\0" -"onojo.fukuoka.jp\0" -"global\0" -"lib.va.us\0" -"j.bg\0" -"web.do\0" -"kagoshima.jp\0misato.akita.jp\0" -"webhop.info\0" -"nagahama.shiga.jp\0" -"bt.it\0taku.saga.jp\0" -"kraanghke.no\0" -"sakurai.nara.jp\0" -"cc.mn.us\0" -"culture.museum\0guernsey.museum\0nt.no\0" -"tachiarai.fukuoka.jp\0" -"plc.co.im\0historisch.museum\0" -"aisho.shiga.jp\0" -"coldwar.museum\0" -"motobu.okinawa.jp\0ibaraki.osaka.jp\0" -"news.hu\0sale\0" -"id.lv\0" -"anthro.museum\0" -"sondrio.it\0" -"id.ly\0lib.pa.us\0" -"finearts.museum\0" -"matsuno.ehime.jp\0yun\0" -"t\xc3\xb8nsberg.no\0" -"sciencecenter.museum\0baidar.no\0muosat.no\0" -"lind\xc3\xa5s.no\0v\xc3\xa1rgg\xc3\xa1t.no\0kiev.ua\0" -"scrapping.cc\0" -"av.tr\0" -"\xe0\xaa\xad\xe0\xaa\xbe\xe0\xaa\xb0\xe0\xaa\xa4\0" -"kitagata.gifu.jp\0ota.tokyo.jp\0" -"j\xc3\xb8rpeland.no\0" -"krakow.pl\0" -"zt.ua\0" -"kirovograd.ua\0" -"vb.it\0\xe0\xae\x87\xe0\xae\xb2\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x88\0kicks-ass.net\0" -"telefonica\0" -"fundacio.museum\0" -"tomika.gifu.jp\0" -"bodo.no\0" -"cuneo.it\0!city.nagoya.jp\0" -"neues.museum\0bryansk.ru\0nm.us\0" -"mielno.pl\0" -"elburg.museum\0" -"american.museum\0" -"skanit.no\0" -"web.id\0sakawa.kochi.jp\0" -"q.bg\0" -"or.id\0" -"lavagis.no\0tydal.no\0" -"hachijo.tokyo.jp\0" -"gs.nl.no\0vestvagoy.no\0yekaterinburg.ru\0" -"uchihara.ibaraki.jp\0" -"trentino-aadige.it\0pesarourbino.it\0masaki.ehime.jp\0sukagawa.fukushima.jp\0" -"c.la\0" -"nt.ro\0homelinux.org\0" -"pordenone.it\0chuo.fukuoka.jp\0okegawa.saitama.jp\0" -"\xe3\x83\x9d\xe3\x82\xa4\xe3\x83\xb3\xe3\x83\x88\0" -"voyage\0\xe5\xa4\xa7\xe6\x8b\xbf\0" -"or.it\0isumi.chiba.jp\0takehara.hiroshima.jp\0" -"cc.ne.us\0" -"soja.okayama.jp\0naruto.tokushima.jp\0" -"\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0" -"exchange\0" -"kaho.fukuoka.jp\0tosa.kochi.jp\0" -"asago.hyogo.jp\0kawatana.nagasaki.jp\0sex.pl\0kred\0" -"or.jp\0zip\0" -"sapo\0" -"honjyo.akita.jp\0" -"skaun.no\0knowsitall.info\0" -"stuttgart.museum\0\xc3\xb8rsta.no\0k12.tn.us\0" -"tcm.museum\0" -"kani.gifu.jp\0" -"eu.com\0" -"pp.az\0milan.it\0hikari.yamaguchi.jp\0buzz\0" -"gs.hl.no\0enterprises\0" -"miho.ibaraki.jp\0" -"codespot.com\0" -"milano.it\0" -"perso.ht\0" -"kunstsammlung.museum\0od.ua\0" -"oyama.tochigi.jp\0or.kr\0" -"estate.museum\0" -"cc.gu.us\0" -"web.lk\0" -"balsan.it\0vi.it\0shikaoi.hokkaido.jp\0" -"quebec.museum\0" -"sarl\0" -"moriguchi.osaka.jp\0" -"leikanger.no\0safety\0\xe6\x96\xb0\xe9\x97\xbb\0" -"hangout\0" -"yamashina.kyoto.jp\0yoshida.saitama.jp\0" -"research.aero\0" -"x.bg\0from-ct.com\0" -"kimobetsu.hokkaido.jp\0" -"artdeco.museum\0levanger.no\0" -"b\xc3\xb8mlo.no\0skanland.no\0" -"pro.az\0" -"or.na\0" -"kanie.aichi.jp\0" -"web.nf\0" -"or.mu\0donetsk.ua\0" -"russia.museum\0" -"pro.br\0cr.it\0mizumaki.fukuoka.jp\0" -"*.nom.br\0hara.nagano.jp\0inami.wakayama.jp\0" -"uscountryestate.museum\0" -"pi.it\0ujiie.tochigi.jp\0" -"is-a-guru.com\0" -"creation.museum\0" -"higashishirakawa.gifu.jp\0\xe5\x85\xab\xe5\x8d\xa6\0" -"sciencesnaturelles.museum\0" -"bonn.museum\0sondre-land.no\0s\xc3\xb8r-aurdal.no\0" -"ham-radio-op.net\0" -"id.us\0" -"oki.fukuoka.jp\0" -"b\xc3\xa1hccavuotna.no\0" -"katowice.pl\0" -"\xe5\xa4\xa7\xe5\x88\x86.jp\0takayama.nagano.jp\0nishinoshima.shimane.jp\0nyc.mn\0" -"folkebibl.no\0vladivostok.ru\0" -"halden.no\0" -"ninohe.iwate.jp\0" -"\xe6\x95\x99\xe8\x82\xb2.hk\0" -"ebiz.tw\0" -"gujo.gifu.jp\0rebun.hokkaido.jp\0dentist\0" -"lindesnes.no\0" -"s\xc3\xb8ndre-land.no\0" -"tamamura.gunma.jp\0akashi.hyogo.jp\0toda.saitama.jp\0" -"pro.ec\0web.pk\0blackfriday\0" -"zara\0" -"for-the.biz\0" -"vadso.no\0" -"chocolate.museum\0c.se\0" -"chikuhoku.nagano.jp\0" -"or.pw\0" -"e164.arpa\0tushu\0" -"komono.mie.jp\0" -"ok.us\0is-a-photographer.com\0" -"nuernberg.museum\0is-slick.com\0" -"\xe4\xba\xac\xe9\x83\xbd.jp\0tonosho.kagawa.jp\0" -"k12.ec\0" -"mikasa.hokkaido.jp\0" -"tom.ru\0viva\0" -"a\xc3\xa9roport.ci\0" -"umb.it\0iwafune.tochigi.jp\0mazowsze.pl\0\xd1\x83\xd0\xba\xd1\x80\0" -"bel.tr\0" -"rakkestad.no\0" -"bievat.no\0" -"saxo\0" -"fuefuki.yamanashi.jp\0" -"research.museum\0" -"ragusa.it\0nadex\0" -"jar.ru\0" -"busan.kr\0" -"rovno.ua\0" -"pilot.aero\0" -"dell-ogliastra.it\0" -"space.museum\0" -"asakuchi.okayama.jp\0" -"kafjord.no\0" -"sakado.saitama.jp\0" -"k12.ut.us\0" -"matsushima.miyagi.jp\0" -"or.th\0web.tj\0" -"communication.museum\0naturalsciences.museum\0" -"pro.ht\0rawa-maz.pl\0" -"ashiya.hyogo.jp\0" -"udmurtia.ru\0ck.ua\0" -"eastcoast.museum\0gs.va.no\0motorcycles\0praxi\0" -"web.tr\0" +"sekikawa.niigata.jp\0comcast\0" +"fnd.br\0kitaakita.akita.jp\0nakanoto.ishikawa.jp\0" +"hof.no\0withyoutube.com\0" +"store.nf\0pnc\0" "cechire.com\0" -"choshi.chiba.jp\0" -"avellino.it\0kuchinotsu.nagasaki.jp\0" -"or.ug\0" -"or.tz\0" -"ap-southeast-2.compute.amazonaws.com\0" -"kusatsu.gunma.jp\0okawa.kochi.jp\0yamaga.kumamoto.jp\0hikone.shiga.jp\0" -"selfip.info\0" -"urausu.hokkaido.jp\0taki.mie.jp\0" -"essex.museum\0" -"group\0" -"or.us\0web.ve\0" -"tama.tokyo.jp\0" -"l\xc3\xb8""dingen.no\0today\0likescandy.com\0" -"iizuka.fukuoka.jp\0" -"\xe4\xb8\xad\xe4\xbf\xa1\0" -"takamori.kumamoto.jp\0" -"kibichuo.okayama.jp\0" -"kristiansund.no\0" -"dallas.museum\0diamonds\0" -"daegu.kr\0" -"svalbard.no\0" -"rocher\0" -"chonan.chiba.jp\0" -"evenassi.no\0" -"cinema.museum\0bardu.no\0" -"midori.chiba.jp\0starostwo.gov.pl\0" +"mikawa.yamagata.jp\0blogspot.kr\0" +"kalmykia.ru\0" +"shikatsu.aichi.jp\0tv.na\0" +"niepce.museum\0" +"blogspot.li\0" +"hirokawa.fukuoka.jp\0" "balestrand.no\0" -"homeunix.net\0" -"forsand.no\0" -"\xe3\x82\xb3\xe3\x83\xa0\0" -"steiermark.museum\0" -"kamiizumi.saitama.jp\0fukumitsu.toyama.jp\0" -"from-ar.com\0" -"gosen.niigata.jp\0" -"s\xc3\xb8gne.no\0chernivtsi.ua\0vi.us\0" -"takahama.aichi.jp\0kamiichi.toyama.jp\0" -"memorial.museum\0k12.va.us\0" -"hitachiota.ibaraki.jp\0taiwa.miyagi.jp\0" -"odo.br\0minamiuonuma.niigata.jp\0\xe5\x85\xac\xe5\x8f\xb8\0" -"shimada.shizuoka.jp\0" -"mobi\0oyer.no\0cr.ua\0" -"\xe6\xb2\x96\xe7\xb8\x84.jp\0" -"pro.na\0b\xc3\xa1hcavuotna.no\0\xd7\xa7\xd7\x95\xd7\x9d\0" -"ogano.saitama.jp\0" -"\xe6\xb8\xb8\xe6\x88\x8f\0" -"pro.mv\0" -"environmentalconservation.museum\0" -"takatsuki.shiga.jp\0" -"www.ro\0" -"furukawa.miyagi.jp\0" -"balat.no\0cc.va.us\0" -"h\xc3\xb8ylandet.no\0schule\0" -"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86.ir\0" -"aostavalley.it\0ferrara.it\0kashiwazaki.niigata.jp\0" -"consulting.aero\0n\xc3\xa5\xc3\xa5mesjevuemie.no\0" -"k12.ct.us\0" -"forli-cesena.it\0warszawa.pl\0" -"media.aero\0moda\0" -"kuki.saitama.jp\0" -"b\xc3\xa1jddar.no\0vikna.no\0k12.pa.us\0" -"pro.om\0boutique\0" -"katsuragi.wakayama.jp\0" -"esashi.hokkaido.jp\0urakawa.hokkaido.jp\0hamatama.saga.jp\0" -"kg.kr\0" -"appspot.com\0" +"realestate\0" +"faith\0" +"hk.com\0" +"saves-the-whales.com\0" +"kawaguchi.saitama.jp\0blogspot.lt\0blogspot.md\0" +"g.se\0blogspot.lu\0" +"lib.co.us\0" +"m.bg\0" +"is-a-lawyer.com\0" +"blogspot.mk\0" +"tamba.hyogo.jp\0" +"bosch\0" +"moka.tochigi.jp\0cc.ak.us\0autos\0br.com\0from-ut.com\0" +"i.ng\0" +"ushistory.museum\0" +"nanmoku.gunma.jp\0pruszkow.pl\0" +"kokonoe.oita.jp\0" +"woodside\0" +"jondal.no\0blogspot.fi\0" +"lahppi.no\0" +"naturalsciences.museum\0" +"ok.us\0" +"utazas.hu\0" +"hachijo.tokyo.jp\0googlecode.com\0" +"trading\0blogspot.fr\0" +"tsubetsu.hokkaido.jp\0creation.museum\0risor.no\0nyc.mn\0" +"!city.nagoya.jp\0" +"field.museum\0" +"servequake.com\0" +"sex.hu\0fujitsu\0" +"is-a-painter.com\0" +"kherson.ua\0" +"minato.osaka.jp\0abbvie\0" +"otsuki.yamanashi.jp\0circle\0blogspot.gr\0" +"i.ph\0" +"muenchen.museum\0" +"pro\0" +"us-east-1.amazonaws.com\0blogspot.hk\0" +"oshu.iwate.jp\0" +"pru\0richardli\0" +"k12.ri.us\0" +"blogspot.hr\0" +"blogspot.hu\0blogspot.ie\0" +"institute\0" +"clothing\0" +"berkeley.museum\0cipriani\0" +"tv.sd\0" +"rodoy.no\0" +"homelinux.org\0blogspot.co.uk\0" +"ssl.origin.cdn77-secure.org\0blogspot.in\0" +"info\0conf.lv\0" +"blogspot.ba\0" +"aibetsu.hokkaido.jp\0blogspot.be\0" +"adv.br\0sr.gov.pl\0\xe5\xb7\xa5\xe8\xa1\x8c\0" +"blogspot.bg\0" +"blogspot.bj\0" +"pub\0" +"fujimi.saitama.jp\0from-tn.com\0" +"friulivenezia-giulia.it\0" +"i.se\0" +"blogspot.ca\0" +"health.museum\0poker\0" +"o.bg\0steam.museum\0" +"fuossko.no\0" +"berlevag.no\0" +"giske.no\0blogspot.cf\0" +"tomigusuku.okinawa.jp\0ashikaga.tochigi.jp\0tv.tr\0for-the.biz\0blogspot.ch\0" +"stavanger.no\0" +"store.ve\0blogspot.cl\0" +"abeno.osaka.jp\0town.museum\0" "mashiko.tochigi.jp\0" -"kuban.ru\0" -"kawanehon.shizuoka.jp\0" -"africa\0" -"suldal.no\0pp.ru\0pp.se\0cc.pa.us\0" -"modena.it\0" -"krym.ua\0" -"pro.pr\0" -"goshiki.hyogo.jp\0" -"sasebo.nagasaki.jp\0" -"marine.ru\0" -"nanporo.hokkaido.jp\0" -"sa.gov.au\0frogn.no\0is-a-cpa.com\0" -"vaksdal.no\0" -"tomiya.miyagi.jp\0" -"orskog.no\0" -"\xe5\x9f\xbc\xe7\x8e\x89.jp\0" -"missile.museum\0theater.museum\0" -"nanto.toyama.jp\0jeonbuk.kr\0" -"unj\xc3\xa1rga.no\0" -"crotone.it\0" -"2000.hu\0\xe7\x8f\xa0\xe5\xae\x9d\0" -"pp.ua\0" -"broker\0" -"kui.hiroshima.jp\0" -"aerobatic.aero\0x.se\0lugansk.ua\0" -"perso.sn\0" -"palace.museum\0hob\xc3\xb8l.no\0plo.ps\0" -"agriculture.museum\0" -"nozawaonsen.nagano.jp\0mitsuke.niigata.jp\0parliament.nz\0" -"hattfjelldal.no\0" -"jeonnam.kr\0mielec.pl\0" -"wallonie.museum\0" -"shimabara.nagasaki.jp\0" -"higashimurayama.tokyo.jp\0" -"k12.pr.us\0works\0" -"sado.niigata.jp\0world\0" -"eid.no\0" -"nishiwaki.hyogo.jp\0minamisanriku.miyagi.jp\0perso.tn\0" -"hanamigawa.chiba.jp\0" -"mikawa.yamagata.jp\0" -"odesa.ua\0" -"obuse.nagano.jp\0" -"from-md.com\0" -"en.it\0koga.ibaraki.jp\0" -"lincoln.museum\0aure.no\0gildeskal.no\0belgorod.ru\0" -"pro.tt\0" -"sibenik.museum\0" -"re.it\0" -"storage\0" -"kinokawa.wakayama.jp\0" -"sci.eg\0" -"manchester.museum\0" -"rs.ba\0" -"4.bg\0" -"k12.tr\0" -"minamioguni.kumamoto.jp\0" -"pro.vn\0chat\0dyndns.tv\0" -"dp.ua\0" -"nom.ad\0" -"nom.ag\0fed.us\0" -"kanna.gunma.jp\0inabe.mie.jp\0izumi.osaka.jp\0re.kr\0" -"dielddanuorri.no\0" -"le.it\0" -"firm.ht\0" -"modalen.no\0" -"hitachiomiya.ibaraki.jp\0taishi.osaka.jp\0" -"kin.okinawa.jp\0" -"windows\0" -"sc.cn\0" -"k12.vi\0" -"qld.gov.au\0lib.al.us\0" -"firm.in\0yashiro.hyogo.jp\0" -"manno.kagawa.jp\0" -"\xe9\xa4\x90\xe5\x8e\x85\0" -"kuroiso.tochigi.jp\0" -"abogado\0" -"okinawa\0kicks-ass.org\0" -"ford\0" -"bellevue.museum\0" -"shizuoka.jp\0" -"misaki.osaka.jp\0" -"fe.it\0karuizawa.nagano.jp\0" -"wa.edu.au\0nom.co\0dyndns.ws\0" -"miyako.fukuoka.jp\0earth\0" -"film.hu\0" -"takahashi.okayama.jp\0" -"suita.osaka.jp\0" -"\xe5\xb2\xa1\xe5\xb1\xb1.jp\0toyota.yamaguchi.jp\0" -"firm.co\0" -"xz.cn\0sakae.nagano.jp\0" -"fareast.ru\0is-a-soxfan.org\0" -"la-spezia.it\0tempio-olbia.it\0" +"tv.tz\0is-a-geek.com\0" +"pa.it\0progressive\0" +"orkdal.no\0" +"torino.museum\0" +"notaires.fr\0corporation.museum\0otago.museum\0blogspot.de\0" +"chase\0blogspot.cv\0" +"blogspot.cz\0" +"blogspot.dk\0" +"parliament.cy\0bridgestone\0" +"pwc\0dyndns-at-home.com\0" +"essex.museum\0" +"inzai.chiba.jp\0oita.oita.jp\0" +"ringsaker.no\0" +"genova.it\0" "radoy.no\0" -"shimofusa.chiba.jp\0" -"issmarterthanyou.com\0" -"okuma.fukushima.jp\0" -"is-an-entertainer.com\0" -"ustka.pl\0" -"nexus\0" -"is-into-anime.com\0" -"kadogawa.miyazaki.jp\0" -"gc.ca\0mj\xc3\xb8ndalen.no\0holmestrand.no\0divttasvuotna.no\0" -"art.br\0puglia.it\0maniwa.okayama.jp\0" -"workinggroup.aero\0" -"yoshimi.saitama.jp\0" -"channel\0" -"ac.ae\0" -"nom.es\0" -"storfjord.no\0" -"owariasahi.aichi.jp\0hotmail\0" -"astronomy.museum\0" -"losangeles.museum\0" -"trentino-sud-tirol.it\0" -"ac.at\0" -"ac.be\0crafts.museum\0" -"nom.fr\0rishirifuji.hokkaido.jp\0kamikawa.saitama.jp\0" -"kouhoku.saga.jp\0akiruno.tokyo.jp\0" -"art.do\0pubol.museum\0" -"not.br\0vallee-aoste.it\0" -"hanggliding.aero\0" -"ravenna.it\0" -"katsuyama.fukui.jp\0kitahata.saga.jp\0" -"builders\0" -"art.dz\0" -"ac.ci\0" -"choyo.kumamoto.jp\0" -"ac.cn\0kawajima.saitama.jp\0" -"shimoichi.nara.jp\0global.ssl.fastly.net\0" -"rl.no\0" -"ac.cr\0za.bz\0" -"tobe.ehime.jp\0" -"scor\0" -"leasing.aero\0presse.km\0" -"scot\0" -"makurazaki.kagoshima.jp\0tome.miyagi.jp\0" -"andriatranibarletta.it\0" -"takarazuka.hyogo.jp\0" -"air.museum\0" -"kanra.gunma.jp\0" -"sumoto.kumamoto.jp\0" -"ambulance.museum\0" -"motorcycle.museum\0isteingeek.de\0" -"sc.kr\0" -"journal.aero\0" -"wiki.br\0mc.it\0kusu.oita.jp\0" -"cloudcontrolapp.com\0" -"inami.toyama.jp\0" -"presse.ml\0" -"broke-it.net\0" -"assn.lk\0montreal.museum\0" -"egyptian.museum\0" -"legal\0" -"nom.km\0its.me\0" -"art.ht\0" -"kotoura.tottori.jp\0" -"lutsk.ua\0" -"chino.nagano.jp\0" -"mitou.yamaguchi.jp\0" -"ujitawara.kyoto.jp\0yomitan.okinawa.jp\0" -"rieti.it\0sera.hiroshima.jp\0joetsu.niigata.jp\0" -"unjarga.no\0" -"ac.gn\0watch\0" -"nishihara.okinawa.jp\0*.platform.sh\0" -"beauxarts.museum\0" -"kviteseid.no\0rissa.no\0" -"toei.aichi.jp\0" -"nom.mg\0" -"piedmont.it\0" -"kongsberg.no\0" -"kunstunddesign.museum\0flakstad.no\0rennebu.no\0" -"campobasso.it\0nowaruda.pl\0gdansk.pl\0" -"lib.hi.us\0" -"events\0" -"ac.id\0" -"touch.museum\0narviika.no\0" -"kamitsue.oita.jp\0" -"gon.pk\0" -"ac.im\0" -"ac.in\0" -"glass\0" -"ac.ir\0" -"firm.ve\0" -"murakami.niigata.jp\0" -"furano.hokkaido.jp\0" -"melhus.no\0" -"ha.cn\0andria-trani-barletta.it\0computer\0" -"gives\0" -"saku.nagano.jp\0" -"sx.cn\0ac.jp\0" -"coloradoplateau.museum\0livinghistory.museum\0is-a-candidate.org\0" -"flog.br\0" -"rsvp\0" -"nom.pa\0" -"nom.pe\0" -"sweden.museum\0namsos.no\0" -"tanabe.wakayama.jp\0" -"beiarn.no\0" -"\xe7\xa5\x9e\xe5\xa5\x88\xe5\xb7\x9d.jp\0handa.aichi.jp\0edogawa.tokyo.jp\0nom.pl\0" -"snoasa.no\0" -"ac.kr\0abb\0" -"tokigawa.saitama.jp\0" -"surgery\0" -"nakanojo.gunma.jp\0takino.hyogo.jp\0" -"construction\0" -"tinn.no\0" -"ta.it\0\xe6\x97\xb6\xe5\xb0\x9a\0" -"kitadaito.okinawa.jp\0" -"ac.ma\0" -"vlog.br\0" -"kirkenes.no\0" -"urbino-pesaro.it\0town\0" -"ac.me\0solutions\0" -"gouv.fr\0novara.it\0" -"gs.jan-mayen.no\0" -"mat.br\0" -"nom.re\0" -"filatelia.museum\0" -"aco\0" -"pistoia.it\0" -"versailles.museum\0" -"community.museum\0rennes\xc3\xb8y.no\0nom.ro\0" -"agr.br\0chikugo.fukuoka.jp\0" -"ac.mu\0stavern.no\0homeunix.org\0" -"ac.mw\0" -"mutsuzawa.chiba.jp\0" -"virtual.museum\0" -"intl.tn\0art.pl\0" -"dnepropetrovsk.ua\0" -"ppg.br\0" -"firm.ro\0" -"tas.au\0kautokeino.no\0" -"na.it\0" -"kvanangen.no\0pub.sa\0sc.ug\0" -"ads\0" -"gx.cn\0sc.tz\0" -"gouv.ht\0" -"somna.no\0fl.us\0toys\0" -"kutchan.hokkaido.jp\0ac.nz\0" -"iveland.no\0nordkapp.no\0" -"rovigo.it\0" -"\xc3\xa5""fjord.no\0sc.us\0" -"veneto.it\0report\0" -"nalchik.ru\0lib.ok.us\0" -"iwaki.fukushima.jp\0yatsuka.shimane.jp\0" -"lindas.no\0tvedestrand.no\0ac.pa\0nom.tm\0k12.sc.us\0omega\0" -"mjondalen.no\0" -"obihiro.hokkaido.jp\0cri.nz\0" -"matsumoto.kagoshima.jp\0" -"state.museum\0fl\xc3\xa5.no\0rauma.no\0vennesla.no\0tires\0" -"afl\0" -"gouv.bj\0" -"ac.pr\0" -"usuki.oita.jp\0" -"oregon.museum\0" -"matsusaka.mie.jp\0tochio.niigata.jp\0lebork.pl\0" -"stat.no\0" -"balsfjord.no\0karlsoy.no\0" -"mugi.tokushima.jp\0art.sn\0" -"freight.aero\0gouv.ci\0" -"coach\0" -"marche.it\0nishiawakura.okayama.jp\0" -"kids.us\0" -"shimonita.gunma.jp\0kitagawa.miyazaki.jp\0" -"tv.bb\0firm.nf\0" +"supplies\0" +"hamburg\0" +"\xe4\xb8\xad\xe6\x96\x87\xe7\xbd\x91\0" +"holtalen.no\0" +"kimobetsu.hokkaido.jp\0" +"virtuel.museum\0" +"skiptvet.no\0" +"kinko.kagoshima.jp\0sakhalin.ru\0" +"komagane.nagano.jp\0" +"finnoy.no\0homesecuritypc.com\0" +"k12.az.us\0point2this.com\0" +"florida.museum\0\xd0\xbe\xd1\x80\xd0\xb3.\xd1\x81\xd1\x80\xd0\xb1\0" +"sex.pl\0" +"cloudns.club\0" +"blogspot.co.ke\0" +"uk.net\0" +"minamiawaji.hyogo.jp\0" +"habmer.no\0" +"\xd8\xa7\xd9\x84\xd9\x8a\xd9\x85\xd9\x86\0" +"pe.ca\0oregon.museum\0mutual\0flynnhub.com\0" +"ug.gov.pl\0store.ro\0" "udine.it\0" -"nagasaki.jp\0" -"dni.us\0" -"luroy.no\0" -"tv.bo\0education.museum\0cooking\0" -"kagawa.jp\0" -"ac.rs\0" -"tv.br\0aq.it\0ba.it\0" -"usgarden.museum\0ac.ru\0ac.se\0" -"ac.rw\0aig\0" -"panama.museum\0bahcavuotna.no\0stord.no\0" -"shibuya.tokyo.jp\0" +"*.nom.br\0" +"lib.tn.us\0" +"iz.hr\0k.se\0" +"q.bg\0" +"luzern.museum\0mobile\0" +"jl.cn\0" +"clinton.museum\0" +"cc.ma.us\0blogspot.ae\0" +"kanie.aichi.jp\0" +"building.museum\0" +"gs.rl.no\0store.st\0" +"pc.it\0pub.sa\0cool\0blogspot.al\0" +"podzone.net\0blogspot.am\0myds.me\0" +"coop\0ogawa.saitama.jp\0gulen.no\0" +"matsumae.hokkaido.jp\0public.museum\0" +"sweden.museum\0" +"mobily\0" +"tx.us\0" +"lyngen.no\0" +"shibetsu.hokkaido.jp\0" +"slg.br\0" +"trentinosud-tirol.it\0" +"halden.no\0" +"shiiba.miyazaki.jp\0" +"kartuzy.pl\0vision\0dsmynas.com\0" +"holiday\0" +"sanda.hyogo.jp\0" +"kaita.hiroshima.jp\0" +"photography.museum\0" +"blogspot.co.nz\0" +"askoy.no\0" +"iglesiascarbonia.it\0bjark\xc3\xb8y.no\0" +"sera.hiroshima.jp\0hidaka.hokkaido.jp\0" +"uozu.toyama.jp\0cpa.pro\0" +"omasvuotna.no\0" +"mragowo.pl\0consulting\0" +"\xe5\x85\xab\xe5\x8d\xa6\0" "rehab\0" -"consultant.aero\0harstad.no\0" -"spjelkavik.no\0moareke.no\0" -"ono.fukui.jp\0" -"ac.th\0" -"imageandsound.museum\0" -"ac.sz\0ac.tj\0" -"malbork.pl\0" -"usa.oita.jp\0" -"bahn.museum\0educational.museum\0" -"stjordalshalsen.no\0" -"kozagawa.wakayama.jp\0" -"uozu.toyama.jp\0" -"ac.ug\0s3-us-west-1.amazonaws.com\0" -"education\0" -"ac.tz\0" -"pharmaciens.km\0ac.uk\0" -"hachinohe.aomori.jp\0" -"of.by\0ha.no\0" -"qsl.br\0to.it\0okayama.jp\0higashi.okinawa.jp\0" -"online\0" -"maebashi.gunma.jp\0" -"valleaosta.it\0kushimoto.wakayama.jp\0" -"pomorze.pl\0" -"salat.no\0" -"surrey.museum\0" -"ichinoseki.iwate.jp\0seat\0" -"tokai.aichi.jp\0abiko.chiba.jp\0numata.gunma.jp\0for-better.biz\0" -"tas.edu.au\0nationalheritage.museum\0" -"ac.vn\0sopot.pl\0" -"tambov.ru\0" -"redstone\0" -"mx.na\0est-le-patron.com\0" -"amli.no\0" -"higashiosaka.osaka.jp\0auto.pl\0" -"omitama.ibaraki.jp\0" -"dynalias.com\0" -"no.it\0" -"bir.ru\0" -"haibara.shizuoka.jp\0" -"suwa.nagano.jp\0" -"recreation.aero\0jewishart.museum\0rade.no\0" -"shingu.fukuoka.jp\0warmia.pl\0" -"flesberg.no\0hemne.no\0" -"minamidaito.okinawa.jp\0" -"station.museum\0bo.telemark.no\0" -"kitanakagusuku.okinawa.jp\0" -"nesodden.no\0vologda.ru\0casino\0" -"itoigawa.niigata.jp\0" -"misawa.aomori.jp\0tsubata.ishikawa.jp\0maibara.shiga.jp\0" -"exchange.aero\0" -"tv.im\0seek\0" -"toon.ehime.jp\0" -"kyiv.ua\0" -"tirol\0" -"tv.it\0" -"phoenix.museum\0" -"stjordal.no\0" -"yonabaru.okinawa.jp\0" -"akabira.hokkaido.jp\0aguni.okinawa.jp\0" -"yugawara.kanagawa.jp\0" -"kiyose.tokyo.jp\0" -"powiat.pl\0lomza.pl\0" -"lans.museum\0mex.com\0" -"gifu.gifu.jp\0" -"sel.no\0lib.ut.us\0" -"e.bg\0film.museum\0" -"fortmissoula.museum\0" -"itano.tokushima.jp\0yamanobe.yamagata.jp\0" -"honjo.akita.jp\0ginan.gifu.jp\0" +"air.museum\0hol.no\0" +"privatizehealthinsurance.net\0" +"shop.ht\0" +"shop.hu\0" +"\xe6\x94\xbf\xe5\x8a\xa1\0" +"nsupdate.info\0" +"africa\0" +"sklep.pl\0" +"zaporizhzhia.ua\0" +"montblanc\0" +"adv.mz\0" +"koshigaya.saitama.jp\0m\xc4\x81ori.nz\0odessa.ua\0" +"brunel.museum\0s3.amazonaws.com\0" +"lillesand.no\0jaworzno.pl\0" +"m.se\0panasonic\0" +"oishida.yamagata.jp\0lib.in.us\0" +"s.bg\0sciences.museum\0" +"is-a-geek.org\0" +"force.museum\0spacekit.io\0" +"frei.no\0dnepropetrovsk.ua\0police.uk\0" +"nisshin.aichi.jp\0" +"katsuura.chiba.jp\0" +"jgora.pl\0" +"in.net\0" +"pe.it\0taku.saga.jp\0" +"isleofman.museum\0" +"lixil\0" +"hyogo.jp\0" +"pa.us\0" +"campidanomedio.it\0" +"pc.pl\0" +"yakumo.shimane.jp\0" +"flickr\0" +"ibara.okayama.jp\0" +"lexus\0" +"taito.tokyo.jp\0" +"\xd0\xbe\xd0\xb4.\xd1\x81\xd1\x80\xd0\xb1\0hitachi\0" +"cranbrook.museum\0khakassia.ru\0" +"setagaya.tokyo.jp\0" +"pe.kr\0voss.no\0" +"res.in\0williamsburg.museum\0cuisinella\0" +"toshima.tokyo.jp\0" +"ancona.it\0koga.ibaraki.jp\0gold\0" +"barclaycard\0directory\0" +"golf\0" +"omotego.fukushima.jp\0" +"gifts\0" +"maori.nz\0" +"tarumizu.kagoshima.jp\0" +"khakassia.su\0" +"valdaosta.it\0" +"melhus.no\0" +"analytics\0" +"stream\0" +"wazuka.kyoto.jp\0" +"warabi.saitama.jp\0" +"red\0" +"trani-barletta-andria.it\0nsn.us\0" +"hokuryu.hokkaido.jp\0" +"iyo.ehime.jp\0" +"freight.aero\0agrigento.it\0" +"futsu.nagasaki.jp\0" +"ericsson\0mitsubishi\0ren\0" +"iizuka.fukuoka.jp\0" +"karlsoy.no\0" +"vladikavkaz.ru\0" +"sandnes.no\0qvc\0" +"o.se\0webhop.biz\0" +"ashiya.hyogo.jp\0h\xc3\xa5.no\0" +"familyds.com\0" +"u.bg\0lesja.no\0" +"basel.museum\0pagefrontapp.com\0" +"jewishart.museum\0" +"vic.au\0" +"gda.pl\0" +"towada.aomori.jp\0cc.me.us\0" +"vladikavkaz.su\0" +"cc.as.us\0goog\0" +"online.museum\0" +"doomdns.org\0" +"lamborghini\0is-an-actress.com\0" +"pg.it\0bialystok.pl\0" +"enna.it\0kunitomi.miyazaki.jp\0" +"hakodate.hokkaido.jp\0*.kunden.ortsinfo.at\0" +"es.leg.br\0" +"friuli-veneziagiulia.it\0mimata.miyazaki.jp\0blogspot.co.za\0" +"health-carereform.com\0" +"reggio-calabria.it\0museum\0\xe5\x85\xac\xe5\x8f\xb8\0" +"dielddanuorri.no\0" +"perugia.it\0" +"takikawa.hokkaido.jp\0" +"laquila.it\0\xc4\x8d\xc3\xa1hcesuolo.no\0" +"fukuyama.hiroshima.jp\0yokoze.saitama.jp\0pt.eu.org\0" +"farmstead.museum\0" +"ril\0" +"oe.yamagata.jp\0" +"store.bb\0rio\0is-a-liberal.com\0" +"rip\0" +"arakawa.tokyo.jp\0" +"medio-campidano.it\0baby\0" +"przeworsk.pl\0" +"citadel\0" +"kuriyama.hokkaido.jp\0doshi.yamanashi.jp\0" +"entomology.museum\0" +"merckmsd\0" +"dyroy.no\0notteroy.no\0" +"reggiocalabria.it\0mj\xc3\xb8ndalen.no\0" +"hamura.tokyo.jp\0" +"madrid\0thruhere.net\0" +"saka.hiroshima.jp\0" +"gunma.jp\0mito.ibaraki.jp\0mobi\0annefrank.museum\0nebraska.museum\0" +"from-nm.com\0" +"kozaki.chiba.jp\0aknoluokta.no\0\xe6\xb8\xb8\xe6\x88\x8f\0is-an-accountant.com\0is-very-good.org\0" +"kosei.shiga.jp\0" +"zippo\0" +"urawa.saitama.jp\0" +"togura.nagano.jp\0ama.shimane.jp\0" +"avianca\0" +"nayoro.hokkaido.jp\0vistaprint\0" +"w.bg\0" +"sennan.osaka.jp\0appspot.com\0" +"tmall\0" +"garden\0store.dk\0" +"cc.wy.us\0" +"federation.aero\0" +"fie.ee\0takanabe.miyazaki.jp\0hinohara.tokyo.jp\0" +"ishikawa.okinawa.jp\0" +"uhren.museum\0undersea.museum\0moda\0" +"halloffame.museum\0wskr.gov.pl\0cisco\0" +"brescia.it\0vb.it\0" +"pi.it\0cyon.link\0" +"sugito.saitama.jp\0sncf\0dyndns-office.com\0" +"szex.hu\0american.museum\0" +"katsuragi.nara.jp\0" +"sowa.ibaraki.jp\0kiyokawa.kanagawa.jp\0" +"delmenhorst.museum\0" +"mizuho.tokyo.jp\0trondheim.no\0" +"flight.aero\0" +"exchange.aero\0wa.edu.au\0furniture.museum\0dynalias.org\0" +"hitra.no\0" +"toscana.it\0" +"wakayama.jp\0" +"muni.il\0savona.it\0ikano\0" +"miyazaki.miyazaki.jp\0" +"vegarshei.no\0" +"oy.lc\0" +"emiliaromagna.it\0dy.fi\0" +"hyatt\0" +"\xe5\x85\xb5\xe5\xba\xab.jp\0" +"from-hi.com\0" +"carbonia-iglesias.it\0" +"tkmaxx\0" +"agdenes.no\0" +"ebino.miyazaki.jp\0k12.md.us\0\xe0\xb0\xad\xe0\xb0\xbe\xe0\xb0\xb0\xe0\xb0\xa4\xe0\xb1\x8d\0nid.io\0" +"kasahara.gifu.jp\0k12.ga.us\0" +"k12.ar.us\0" +"dolls.museum\0" +"sandefjord.no\0" "r\xc3\xa1hkker\xc3\xa1vju.no\0" -"bar\0" -"presse.ci\0bbc\0" -"bo.it\0" -"minakami.gunma.jp\0" -"hapmir.no\0cc.mi.us\0is-a-teacher.com\0" -"kasugai.aichi.jp\0" -"jewelry.museum\0gulen.no\0dvag\0" -"engerdal.no\0" -"achi.nagano.jp\0serveftp.net\0" -"khv.ru\0" -"morotsuka.miyazaki.jp\0tarama.okinawa.jp\0ruhr\0" -"laakesvuemie.no\0is-a-caterer.com\0" -"onga.fukuoka.jp\0" -"khmelnytskyi.ua\0" -"messina.it\0bcn\0" +"sherbrooke.museum\0rendalen.no\0" +"fl\xc3\xa5.no\0" "fhs.no\0" -"berlin.museum\0alipay\0infiniti\0" -"adult.ht\0" -"tv.na\0name\0" -"vao.it\0zachpomor.pl\0" -"\xc3\xa5rdal.no\0herokuapp.com\0" -"karatsu.saga.jp\0gov.nc.tr\0" -"sydney\0uy.com\0" -"imperia.it\0turen.tn\0" -"time.museum\0" -"\xd9\x85\xd9\x88\xd8\xa8\xd8\xa7\xd9\x8a\xd9\x84\xd9\x8a\0" -"lighting\0" -"matsubara.osaka.jp\0rnu.tn\0" -"seaport.museum\0" -"assassination.museum\0" -"ikeda.fukui.jp\0iinet\0" -"doosan\0" -"it.ao\0idv.hk\0e12.ve\0" -"shari.hokkaido.jp\0nahari.kochi.jp\0" -"trader.aero\0nh.us\0" -"takatori.nara.jp\0" -"columbia.museum\0" -"city\0is-a-player.com\0" -"presse.fr\0shimoji.okinawa.jp\0numazu.shizuoka.jp\0upow.gov.pl\0" -"arna.no\0" -"muroto.kochi.jp\0" -"l.bg\0" -"kamogawa.chiba.jp\0" -"mosvik.no\0" -"frankfurt.museum\0mo-i-rana.no\0" -"nichinan.miyazaki.jp\0" -"kitagawa.kochi.jp\0" -"kr\xc3\xb8""dsherad.no\0skierv\xc3\xa1.no\0us.com\0from-oh.com\0" -"arao.kumamoto.jp\0" -"ryazan.ru\0" -"hurum.no\0" -"kitashiobara.fukushima.jp\0ichinohe.iwate.jp\0" -"louvre.museum\0moma.museum\0of.no\0" -"\xe4\xb8\x89\xe9\x87\x8d.jp\0shingu.wakayama.jp\0" -"cupcake.is\0" -"limanowa.pl\0zuerich\0" -"decorativearts.museum\0" -"gouv.rw\0lib.ct.us\0" -"andria-barletta-trani.it\0market\0" -"nomi.ishikawa.jp\0nakano.nagano.jp\0" -"irish\0" -"logistics.aero\0molde.no\0axa\0industries\0" -"nagano.jp\0gouv.sn\0" -"technology.museum\0" -"press.museum\0s3-fips-us-gov-west-1.amazonaws.com\0" -"munakata.fukuoka.jp\0" -"rodoy.no\0" -"bolt.hu\0" -"flor\xc3\xb8.no\0khabarovsk.ru\0" -"yachiyo.chiba.jp\0miyama.fukuoka.jp\0" -"sanuki.kagawa.jp\0" -"im.it\0" -"bid\0" -"kitaura.miyazaki.jp\0tv.sd\0" -"shizukuishi.iwate.jp\0" -"corsica\0" -"pavia.it\0usui.fukuoka.jp\0" -"chesapeakebay.museum\0bio\0" -"atami.shizuoka.jp\0" -"nanae.hokkaido.jp\0" -"saitama.jp\0" -"ggf.br\0" -"s.bg\0" -"shobara.hiroshima.jp\0himi.toyama.jp\0" -"biz\0takko.aomori.jp\0" -"guovdageaidnu.no\0" -"shishikui.tokushima.jp\0" -"massa-carrara.it\0shimokawa.hokkaido.jp\0" -"erotika.hu\0oppeg\xc3\xa5rd.no\0" -"sayo.hyogo.jp\0" -"bentley\0" -"eidfjord.no\0hamaroy.no\0" -"bv.nl\0tv.tr\0" -"smola.no\0" -"ohira.tochigi.jp\0" -"botanicgarden.museum\0" -"ot.it\0pd.it\0" -"halsa.no\0troms\xc3\xb8.no\0\xd2\x9b\xd0\xb0\xd0\xb7\0" -"fr\xc3\xa6na.no\0" -"niigata.jp\0takayama.gifu.jp\0koshimizu.hokkaido.jp\0tv.tz\0" +"fukaya.saitama.jp\0" +"kwpsp.gov.pl\0kerryhotels\0" +"hasuda.saitama.jp\0vanguard\0" +"umaji.kochi.jp\0royken.no\0" +"\xe5\x80\x8b\xe4\xba\xba.hk\0clinic\0" +"ivanovo.ru\0" +"is-a-nascarfan.com\0" +"s.se\0lib.pa.us\0" +"y.bg\0sap\0" +"niyodogawa.kochi.jp\0" +"intl.tn\0" +"surgeonshall.museum\0sas\0" +"funabashi.chiba.jp\0karumai.iwate.jp\0from-wy.com\0" +"cc.mi.us\0" +"sbi\0voting\0" +"ogori.fukuoka.jp\0" +"ivanovo.su\0" +"turin.it\0" +"ishinomaki.miyagi.jp\0" +"sca\0" +"nishi.osaka.jp\0ptz.ru\0scb\0" +"aikawa.kanagawa.jp\0sbs\0" +"ninomiya.kanagawa.jp\0" +"daplie.me\0" +"hammarfeasta.no\0" +"trentino-a-adige.it\0" +"al.eu.org\0" +"bardu.no\0" +"\xd8\xb9\xd8\xb1\xd8\xa7\xd9\x82\0" +"\xe0\xb6\xbd\xe0\xb6\x82\xe0\xb6\x9a\xe0\xb7\x8f\0" +"ppg.br\0education.museum\0" +"openair.museum\0" +"higashichichibu.saitama.jp\0" +"from-dc.com\0" +"ashiya.fukuoka.jp\0" +"brussels.museum\0s\xc3\xa1lat.no\0" +"omsk.ru\0" +"genkai.saga.jp\0dnsalias.net\0" +"band\0" +"mypets.ws\0shop.ro\0" +"sucks\0" +"sukagawa.fukushima.jp\0bamble.no\0bank\0" +"kayabe.hokkaido.jp\0yura.wakayama.jp\0" +"daigo.ibaraki.jp\0" +"run\0" +"esp.br\0" +"eng.br\0mediocampidano.it\0is-a-photographer.com\0" +"tarnobrzeg.pl\0" +"cancerresearch\0ses\0" +"southwest.museum\0accountant\0" +"tokushima.tokushima.jp\0sande.m\xc3\xb8re-og-romsdal.no\0" +"sew\0" +"isshiki.aichi.jp\0sex\0" +"andria-trani-barletta.it\0andriatranibarletta.it\0" +"shop.pl\0" +"seranishi.hiroshima.jp\0" +"midori.chiba.jp\0" +"sasebo.nagasaki.jp\0sfr\0" +"kanonji.kagawa.jp\0" +"yamashina.kyoto.jp\0rwe\0" +"lib.ut.us\0" +"u.se\0" +"est-a-la-masion.com\0" +"ibigawa.gifu.jp\0" +"kameoka.kyoto.jp\0toba.mie.jp\0" +"iveland.no\0arab\0" +"sciencesnaturelles.museum\0" +"cam.it\0" +"cc.sd.us\0" +"koge.tottori.jp\0cn.com\0" +"wake.okayama.jp\0bjugn.no\0podzone.org\0" +"gs.sf.no\0" +"oppdal.no\0" +"ito.shizuoka.jp\0" +"psse.gov.pl\0" +"sayo.hyogo.jp\0sydney.museum\0" +"niigata.jp\0" +"hashimoto.wakayama.jp\0" +"hagi.yamaguchi.jp\0gb.net\0" +"ichikawamisato.yamanashi.jp\0" +"kamikoani.akita.jp\0legnica.pl\0" +"msk.ru\0fage\0" +"ohda.shimane.jp\0" +"saiki.oita.jp\0" +"yokawa.hyogo.jp\0" +"lazio.it\0matsuno.ehime.jp\0shimodate.ibaraki.jp\0" +"isen.kagoshima.jp\0" +"onojo.fukuoka.jp\0" +"siljan.no\0" +"properties\0" +"msk.su\0" +"lubin.pl\0" +"sandvik\0" +"tottori.tottori.jp\0" +"toyama.toyama.jp\0" +"cinema.museum\0" +"ski\0" +"british.museum\0" +"daisen.akita.jp\0" +"fail\0" +"ninohe.iwate.jp\0" +"otama.fukushima.jp\0" +"nakagawa.nagano.jp\0at-band-camp.net\0" +"louvre.museum\0" +"tsu.mie.jp\0" +"sky\0" +"kawanishi.hyogo.jp\0" +"is-a-geek.net\0" +"tas.edu.au\0" +"fujixerox\0" +"storfjord.no\0chukotka.ru\0" +"ogawara.miyagi.jp\0lucerne.museum\0vf.no\0w.se\0" +"saintlouis.museum\0" +"forli-cesena.it\0tomakomai.hokkaido.jp\0swinoujscie.pl\0" +"gok.pk\0" +"maintenance.aero\0jx.cn\0" +"zlg.br\0gub.uy\0" +"sue.fukuoka.jp\0moto\0" +"toyota.aichi.jp\0" +"tamamura.gunma.jp\0evenes.no\0" +"misugi.mie.jp\0watari.miyagi.jp\0artanddesign.museum\0donna.no\0" +"stathelle.no\0knowsitall.info\0" +"yoichi.hokkaido.jp\0hamamatsu.shizuoka.jp\0" +"fukuchi.fukuoka.jp\0" +"po.it\0" +"airline.aero\0" +"ut.us\0" +"tokorozawa.saitama.jp\0" +"novara.it\0" +"s3-eu-west-1.amazonaws.com\0" +"office\0" +"kumano.mie.jp\0cambridge.museum\0" +"myoko.niigata.jp\0" +"otari.nagano.jp\0starnberg.museum\0" +"bauhaus\0movie\0" +"oppegard.no\0" +"data\0" +"iwate.jp\0" +"kpmg\0soy\0" +"stalowa-wola.pl\0" +"hakata.fukuoka.jp\0miura.kanagawa.jp\0date\0" +"stranda.no\0from-mo.com\0" +"koori.fukushima.jp\0okutama.tokyo.jp\0" +"matsumoto.nagano.jp\0interactive.museum\0k12.nj.us\0" +"research.museum\0tab\0" +"starachowice.pl\0" +"umig.gov.pl\0fans\0reise\0" +"safety.aero\0" +"yusuhara.kochi.jp\0kudamatsu.yamaguchi.jp\0intelligence.museum\0" "\xc3\xa5l.no\0" -"solar\0" -"belluno.it\0" -"interactive.museum\0lib.co.us\0us-west-2.compute.amazonaws.com\0" -"shikatsu.aichi.jp\0" -"nobeoka.miyazaki.jp\0" -"torsken.no\0" -"\xe9\x95\xb7\xe9\x87\x8e.jp\0iki.nagasaki.jp\0" -"express.aero\0" -"nysa.pl\0" -"miyawaka.fukuoka.jp\0gbiz\0" -"catanzaro.it\0" -"kiyosu.aichi.jp\0ikaruga.nara.jp\0" -, - -"\xd0\xbe\xd0\xb1\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0" -"kitahiroshima.hokkaido.jp\0" -"\xe9\x95\xb7\xe5\xb4\x8e.jp\0" -"student.aero\0kopervik.no\0hof.no\0" -"tula.ru\0" -"izumizaki.fukushima.jp\0" -"g\xc3\xa1ivuotna.no\0cc.tn.us\0" -"fyresdal.no\0bms\0media\0ryukyu\0" -"miyakonojo.miyazaki.jp\0" -"mosj\xc3\xb8""en.no\0nv.us\0bmw\0navy\0" -"iwakura.aichi.jp\0" -"\xe4\xbd\x9b\xe5\xb1\xb1\0" -"bnl\0" -"lib.wa.us\0" -"sabae.fukui.jp\0motosu.gifu.jp\0" -"z.bg\0" -"miharu.fukushima.jp\0" -"higashiyama.kyoto.jp\0" -"skierva.no\0" -"laspezia.it\0" -"if.ua\0" -"himeshima.oita.jp\0" -"imb.br\0caravan\0" -"ct.it\0utashinai.hokkaido.jp\0" -"bom\0" -"pictet\0" -"boo\0" -"biella.it\0" -"gouv.km\0risor.no\0" -"bot\0" -"\xc3\xa5s.no\0gotdns.org\0" -"oskol.ru\0dyndns-blog.com\0" -"gokase.miyazaki.jp\0tonaki.okinawa.jp\0" -"salon\0" -"averoy.no\0press\0" -"halloffame.museum\0h\xc3\xa1""bmer.no\0" -"*.sendai.jp\0" -"oseto.nagasaki.jp\0" -"usantiques.museum\0" -"cab\0" -"download\0" -"nord-odal.no\0" -"unsa.ba\0museet.museum\0galsa.no\0gb.com\0" -"muko.kyoto.jp\0" -"zero\0" -"yasugi.shimane.jp\0cal\0" -"torino.museum\0" -"kami.kochi.jp\0gouv.ml\0" -"idv.tw\0cba\0network\0" -"yokawa.hyogo.jp\0car\0" -"cat\0" -"americana.museum\0e.se\0" +"balsan.it\0saratov.ru\0" +"mihama.aichi.jp\0" +"hair\0" +"coop.ht\0netflix\0" +"citic\0" +"stat.no\0" +"qc.ca\0broker\0" +"tax\0" +"oslo.no\0servepics.com\0" +"iki.nagasaki.jp\0" +"chitose.hokkaido.jp\0joburg\0" +"misato.wakayama.jp\0srl\0" +"gosen.niigata.jp\0y.se\0" +"shikaoi.hokkaido.jp\0" +"kanegasaki.iwate.jp\0sosnowiec.pl\0" +"ap.gov.pl\0" +"yorii.saitama.jp\0" +"sohu\0" +"srt\0" +"vald-aosta.it\0tsubame.niigata.jp\0cc.mo.us\0" +"togliatti.su\0tci\0sells-for-u.com\0" +"kurume.fukuoka.jp\0" +"servebeer.com\0" +"coop.br\0" +"americanexpress\0" +"oyodo.nara.jp\0hamar.no\0stc\0" +"watch-and-clock.museum\0" +"niihama.ehime.jp\0open\0" +"tmp.br\0" +"statoil\0" +"tdk\0" +"emilia-romagna.it\0roros.no\0" +"experts-comptables.fr\0" +"farm\0" +"toyota.yamaguchi.jp\0" +"consulting.aero\0photography\0serveftp.net\0" +"army\0" +"m\xc3\xa5lselv.no\0" +"cheap\0" +"fundacio.museum\0organic\0ngrok.io\0" +"stuttgart.museum\0" +"sassari.it\0" +"tel\0" +"tysnes.no\0" +"itabashi.tokyo.jp\0americanfamily\0" +"law.za\0" +"ichikawa.chiba.jp\0" +"fast\0" +"hammerfest.no\0" +"sogne.no\0" +"bozen.it\0vlaanderen.museum\0" +"airtraffic.aero\0k12.sc.us\0myactivedirectory.com\0" +"here-for-more.info\0" +"arpa\0" +"\xd5\xb0\xd5\xa1\xd5\xb5\0" +"messina.it\0airforce\0" +"ogaki.gifu.jp\0" +"h\xc3\xa1mm\xc3\xa1rfeasta.no\0" +"nuoro.it\0detroit.museum\0" +"western.museum\0" +"konan.aichi.jp\0" +"s\xc3\xb8mna.no\0" +"brindisi.it\0miasa.nagano.jp\0" +"karasjok.no\0" +"\xd7\xa7\xd7\x95\xd7\x9d\0" +"yuu.yamaguchi.jp\0thd\0" +"song\0" +"podlasie.pl\0" +"productions\0" +"from-tx.com\0" +"rybnik.pl\0mykolaiv.ua\0" +"is-with-theband.com\0" +"kawara.fukuoka.jp\0komoro.nagano.jp\0" +"karm\xc3\xb8y.no\0" +"kautokeino.no\0" +"tr\xc3\xb8gstad.no\0" +"showa.yamanashi.jp\0sony\0" +"maebashi.gunma.jp\0onomichi.hiroshima.jp\0" +"lukow.pl\0" +"kanazawa.ishikawa.jp\0" +"vik.no\0flowers\0" +"services\0" +"ukiha.fukuoka.jp\0dyndns-blog.com\0" +"piacenza.it\0" +"midtre-gauldal.no\0" +"asda\0" +"vardo.no\0" +"kawahara.tottori.jp\0" +"engine.aero\0deatnu.no\0arte\0" +"ntr.br\0" +"\xe6\x85\x88\xe5\x96\x84\0" +"airbus\0" +"tjx\0" +"sellsyourhome.org\0" +"\xe5\x95\x86\xe5\x9f\x8e\0" +"avocat.pro\0" +"caltanissetta.it\0massacarrara.it\0" +"zapto.org\0" +"saga.saga.jp\0overhalla.no\0" +"l\xc3\xb8renskog.no\0" +"chonan.chiba.jp\0" +"cartier\0stuff-4-sale.org\0" +"stavern.no\0" +"friulive-giulia.it\0bbva\0" +"misawa.aomori.jp\0" +"hashima.gifu.jp\0" +"groundhandling.aero\0from-pr.com\0" +"fujimino.saitama.jp\0ulm.museum\0" +"okuma.fukushima.jp\0shizuoka.shizuoka.jp\0vuelos\0" +"zamami.okinawa.jp\0cloudns.biz\0" +"bmoattachments.org\0geekgalaxy.com\0" +"tachiarai.fukuoka.jp\0" +"haus\0" +"aquarium.museum\0manchester.museum\0" +"gitlab.io\0" +"chiropractic.museum\0olayangroup\0" +"*.bd\0" +"izu.shizuoka.jp\0" +"fujieda.shizuoka.jp\0study\0" +"labor.museum\0r\xc3\xa5""de.no\0" +"uz.ua\0" +"songdalen.no\0" +"ostrowwlkp.pl\0kh.ua\0emerck\0" +"cc.ms.us\0cc.nc.us\0" +"*.bn\0s3-us-west-1.amazonaws.com\0" +"sakurai.nara.jp\0haugesund.no\0cc.ca.us\0" +"ltd.co.im\0" +"pu.it\0architecture.museum\0sondre-land.no\0" +"sakura.chiba.jp\0gs.hl.no\0est.pr\0" +"fc.it\0\xc3\xb8ksnes.no\0" +"ginoza.okinawa.jp\0v\xc3\xa5ler.\xc3\xb8stfold.no\0" +"takamatsu.kagawa.jp\0" +"asia\0*.ck\0" +"hepforge.org\0" +"\xe5\xa4\xa7\xe4\xbc\x97\xe6\xb1\xbd\xe8\xbd\xa6\0" +"ardal.no\0top\0" +"bruxelles.museum\0skj\xc3\xa5k.no\0" +"is-an-engineer.com\0" +"\xd9\x85\xd9\x84\xd9\x8a\xd8\xb3\xd9\x8a\xd8\xa7\0" +"erni\0" +"ashoro.hokkaido.jp\0pippu.hokkaido.jp\0dudinka.ru\0" +"sologne.museum\0" +"ap-southeast-2.compute.amazonaws.com\0" +"akagi.shimane.jp\0aquarelle\0" +"es.kr\0" +"land\0" +"yamal.ru\0" +"4u.com\0" +"shari.hokkaido.jp\0" +"kvanangen.no\0" +"sasaguri.fukuoka.jp\0tgory.pl\0" +"yoga\0" +"k12.nh.us\0juniper\0" +"k12.gu.us\0" +"*.er\0" +"embetsu.hokkaido.jp\0" +"trento.it\0shimogo.fukushima.jp\0castle.museum\0" +"portlligat.museum\0" +"tourism.tn\0" +"eco.br\0" +"*.fj\0" +"*.fk\0" +"kumamoto.jp\0" +"sumy.ua\0" +"eid.no\0" +"modelling.aero\0kui.hiroshima.jp\0ubs\0" +"mie.jp\0" +"trv\0" +"abruzzo.it\0java\0" +"aomori.aomori.jp\0beta.bounty-full.com\0" +"homebuilt.aero\0social\0" +"shirataka.yamagata.jp\0" +"f\xc3\xb8rde.no\0v\xc3\xa5g\xc3\xa5.no\0qpon\0repair\0" +"gos.pk\0myasustor.com\0" +"*.gu\0" +"cc.ne.us\0" +"nom.ad\0" +"umbria.it\0movistar\0" +"nom.ag\0rahkkeravju.no\0" +"erotika.hu\0england.museum\0" +"fe.it\0gs.bu.no\0" +"serveirc.com\0" +"\xe6\x84\x9b\xe5\xaa\x9b.jp\0" +"\xe9\xa6\x99\xe5\xb7\x9d.jp\0" +"tui\0" +"bronnoysund.no\0" +"page\0" +"judaica.museum\0" +"nanporo.hokkaido.jp\0" +"lajolla.museum\0wales.museum\0name\0divttasvuotna.no\0" +"coop.tt\0hermes\0" +"ragusa.it\0game-server.cc\0" +"fuefuki.yamanashi.jp\0" +"friuli-v-giulia.it\0" +"walbrzych.pl\0" +"civilwar.museum\0" +"*.jm\0" +"\xe7\xa5\x9e\xe5\xa5\x88\xe5\xb7\x9d.jp\0uda.nara.jp\0" +"cesenaforli.it\0" +"rankoshi.hokkaido.jp\0" +"shinkamigoto.nagasaki.jp\0tvs\0" +"ekloges.cy\0kawakami.nara.jp\0" +"coop.mv\0" +"nom.co\0iwaki.fukushima.jp\0godo.gifu.jp\0*.ke\0coop.mw\0" +"video.hu\0minami.kyoto.jp\0locker\0shiksha\0" +"ichinohe.iwate.jp\0nerima.tokyo.jp\0" +"*.kh\0" +"servehalflife.com\0" +"cityeats\0" +"kitchen\0" +"today\0work\0" +"childrens.museum\0test.tj\0" +"yamada.toyama.jp\0" +"sa.gov.au\0ravenna.it\0" +"kred\0" +"crimea.ua\0" +"avocat.fr\0*.kw\0" +"ena.gifu.jp\0webhop.org\0" +"bato.tochigi.jp\0kuzbass.ru\0" +"bostik\0" +"rauma.no\0" +"dnsalias.org\0" +"dclk\0" +"nishimera.miyazaki.jp\0" +"nord-odal.no\0tunk.org\0" +"kisofukushima.nagano.jp\0pl.eu.org\0" +"nom.es\0" +"okinawa.jp\0wakayama.wakayama.jp\0" +"lib.al.us\0restaurant\0" +"*.mm\0" +"hachirogata.akita.jp\0" +"andriabarlettatrani.it\0minamiizu.shizuoka.jp\0" +"vn.ua\0" +"spot\0" +"kamikawa.hokkaido.jp\0" +"tsk.ru\0" +"fi.cr\0akkeshi.hokkaido.jp\0" +"hattfjelldal.no\0" +"coop.py\0" +"nom.fr\0" "vr.it\0" -"omi.niigata.jp\0" -"togane.chiba.jp\0toyako.hokkaido.jp\0" -"samara.ru\0" -"nakagawa.fukuoka.jp\0urasoe.okinawa.jp\0cbn\0" -"nordre-land.no\0" -"aquila.it\0gonohe.aomori.jp\0fukusaki.hyogo.jp\0" -"yodobashi\0" -"rimini.it\0sakaiminato.tottori.jp\0" -"plc.ly\0" -"erotica.hu\0" -"eurovision\0" -"jefferson.museum\0gs.bu.no\0" -"uki.kumamoto.jp\0augustow.pl\0" -"gs.ol.no\0sexy\0" -"v\xc3\xa5ler.\xc3\xb8stfold.no\0" -"ayase.kanagawa.jp\0" -"vard\xc3\xb8.no\0" -"recipes\0" -"varese.it\0asahi.mie.jp\0" -"yuzhno-sakhalinsk.ru\0" -"pr.it\0nango.fukushima.jp\0" -"oharu.aichi.jp\0wakasa.fukui.jp\0" -"avianca\0" -"govt.nz\0" -"ruovat.no\0" -"kujukuri.chiba.jp\0" -"weather\0" -"ut.us\0" -"odawara.kanagawa.jp\0" -"shriram\0" -"niiza.saitama.jp\0" -"siljan.no\0" -"ae.org\0" -"latina.it\0iwamizawa.hokkaido.jp\0" -"itami.hyogo.jp\0" -"stange.no\0ceo\0" -"gifu.jp\0yamato.fukushima.jp\0toyo.kochi.jp\0" -"cfa\0" +"temasek\0" +"fg.it\0setouchi.okayama.jp\0test.ru\0" +"uri.arpa\0center\0" +"esan.hokkaido.jp\0*.np\0" +"\xe9\xab\x98\xe7\x9f\xa5.jp\0asahi.mie.jp\0hawaii.museum\0" +"ostrowiec.pl\0" +"srv.br\0chel.ru\0" +"tsuru.yamanashi.jp\0" +"yame.fukuoka.jp\0" +"chikuma.nagano.jp\0" +"dreamhosters.com\0" +"environmentalconservation.museum\0valley.museum\0" +"\xe5\x85\xac\xe7\x9b\x8a\0" +"mallorca.museum\0" +"ichinoseki.iwate.jp\0" +"prato.it\0" +"tatsuno.nagano.jp\0" +"anthro.museum\0*.pg\0" +"yamamoto.miyagi.jp\0gets-it.net\0" +"kagamino.okayama.jp\0" +"coop.km\0" +"ayagawa.kagawa.jp\0" +"valle.no\0" "kamakura.kanagawa.jp\0" -"cfd\0" -"otago.museum\0" -"baghdad.museum\0" -"buy\0" +"discover\0" +"yonago.tottori.jp\0" +"s\xc3\xb8r-varanger.no\0" +"honjo.akita.jp\0" +"inami.wakayama.jp\0k12.mt.us\0raid\0" +"cbg.ru\0" +"kitami.hokkaido.jp\0shingu.hyogo.jp\0nishinoomote.kagoshima.jp\0ostre-toten.no\0" +"gorge.museum\0" +"kunimi.fukushima.jp\0" +"kitakata.fukushima.jp\0cyber.museum\0" +"nakanojo.gunma.jp\0misaki.osaka.jp\0" +"bmd.br\0tranibarlettaandria.it\0tourism.pl\0" +"inami.toyama.jp\0" +"reisen\0" +"nsw.edu.au\0" +"torsken.no\0uno\0" +"farm.museum\0" +"ab.ca\0boston\0" +"archaeology.museum\0" +"nom.km\0museumvereniging.museum\0" +"bloomberg\0" +"0.bg\0" +"belluno.it\0" +"\xe9\x9d\x92\xe6\xa3\xae.jp\0nishiwaki.hyogo.jp\0lacaixa\0uol\0" +"nagasu.kumamoto.jp\0" +"tatamotors\0" +"vt.it\0gs.st.no\0" +"navy\0" +"kr.it\0" +"fi.it\0" +"ballangen.no\0" +"sor-fron.no\0\xe5\x8f\xb0\xe6\xb9\xbe\0" +"mod.gi\0nom.mg\0j\xc3\xb8rpeland.no\0" +"intel\0" +"ups\0" +"kemerovo.ru\0taobao\0" +"honeywell\0" +"varoy.no\0" +"pars\0land-4-sale.us\0" +"paris\0" +"modern.museum\0s\xc3\xb8rreisa.no\0living\0" +"katsuyama.fukui.jp\0nom.ni\0" +"military.museum\0" +"rokunohe.aomori.jp\0" +"granvin.no\0" +"ino.kochi.jp\0" +"kasuya.fukuoka.jp\0" "vicenza.it\0" -"ip6.arpa\0" -"skedsmo.no\0l.se\0" -"okinawa.jp\0marugame.kagawa.jp\0" -"\xc3\xb8yer.no\0" +"furubira.hokkaido.jp\0loabat.no\0" +"taishi.hyogo.jp\0" +"travelchannel\0" +"wlocl.pl\0" +"mypep.link\0" +"ohi.fukui.jp\0k12.mn.us\0" +"otoineppu.hokkaido.jp\0githubusercontent.com\0" +"tado.mie.jp\0" +"final\0" +"nom.pa\0jamal.ru\0" +"amusement.aero\0ltd.cy\0" +"nom.pe\0psp.gov.pl\0" +"kirkenes.no\0" +"kagamiishi.fukushima.jp\0" +"val-d-aosta.it\0kannami.shizuoka.jp\0auspost\0" +"nom.pl\0" +"fosnes.no\0" +"opoczno.pl\0" +"firebaseapp.com\0" +"cologne\0" +"akishima.tokyo.jp\0" +"lib.ee\0" +"tagami.niigata.jp\0horten.no\0from-nv.com\0" +"fm.br\0" +"sabae.fukui.jp\0omi.nagano.jp\0" +"insure\0" +"lib.vt.us\0" +"nagasaki.nagasaki.jp\0" +"fukui.fukui.jp\0is-a-teacher.com\0" +"2.bg\0" +"gallo\0" +"*.ye\0scrapper-site.net\0github.io\0" +"guide\0" +"co.com\0" +"fujimi.nagano.jp\0nom.re\0" +"research.aero\0oizumi.gunma.jp\0" +"vv.it\0muroran.hokkaido.jp\0s\xc3\xb8ndre-land.no\0" +"ullensaker.no\0" +"sandnessjoen.no\0nannestad.no\0" +"equipment\0vet\0" +"nikko.tochigi.jp\0\xd0\xbc\xd0\xbe\xd1\x81\xd0\xba\xd0\xb2\xd0\xb0\0" +"nom.ro\0winners\0" +"*.kobe.jp\0" +"talk\0" +"geelvinck.museum\0" +"ltd.gi\0" +"plants.museum\0" +"omaezaki.shizuoka.jp\0" +"fujishiro.ibaraki.jp\0" +"place\0" +"imizu.toyama.jp\0marketing\0" +"monza-brianza.it\0*.zw\0" +"nakai.kanagawa.jp\0ddnsking.com\0" +"romsa.no\0" +"ltd.hk\0" +"bieszczady.pl\0" +"toyokawa.aichi.jp\0" "aukra.no\0" -"luzern.museum\0" -"mihama.mie.jp\0" -"fukushima.hokkaido.jp\0kembuchi.hokkaido.jp\0\xe6\x85\x88\xe5\x96\x84\0" -"gsm.pl\0" -"savannahga.museum\0" -"sanjo.niigata.jp\0\xd8\xb9\xd9\x85\xd8\xa7\xd9\x86\0" -"lesja.no\0vik.no\0" -"minamiizu.shizuoka.jp\0" -"tran\xc3\xb8y.no\0" -"lgbt\0" -"joshkar-ola.ru\0" -"hemsedal.no\0sarpsborg.no\0" -"gob.ar\0calabria.it\0kurashiki.okayama.jp\0" -"irkutsk.ru\0" -"osaki.miyagi.jp\0ginowan.okinawa.jp\0neustar\0" -"higashinaruse.akita.jp\0taketa.oita.jp\0nagatoro.saitama.jp\0" -"ventures\0from-mo.com\0" -"mishima.shizuoka.jp\0" -"vaga.no\0" -"sano.tochigi.jp\0" -"k12.in.us\0" -"gob.bo\0partners\0" -"mediocampidano.it\0kumakogen.ehime.jp\0" -"dyr\xc3\xb8y.no\0lier.no\0groks-this.info\0" -"tsuruta.aomori.jp\0" -"tosu.saga.jp\0office-on-the.net\0" -"bzh\0" -"grong.no\0" -"attorney\0" -"oji.nara.jp\0" -"gob.cl\0" -"froland.no\0meloy.no\0" -"taranto.it\0uk.net\0" -"\xe8\x8c\xa8\xe5\x9f\x8e.jp\0" -"school.museum\0cc.il.us\0" -"s.se\0" -"marketplace.aero\0plc.uk\0" -"ontario.museum\0" -"ranzan.saitama.jp\0" -"ct.us\0" -"memorial\0" -"gob.do\0media.hu\0lib.ks.us\0" -"reise\0" -"horonobe.hokkaido.jp\0" -"gob.ec\0" -"yamal.ru\0" -"yamato.kanagawa.jp\0" -"dr.na\0" -"spydeberg.no\0" -"zgora.pl\0" -"verona.it\0" -"gob.es\0" -"jeju.kr\0" -"chiropractic.museum\0doomdns.com\0" -"kozaki.chiba.jp\0" -"monza-brianza.it\0isen.kagoshima.jp\0glogow.pl\0" -"uchiko.ehime.jp\0yasu.shiga.jp\0" -"sandvik\0eu-west-1.compute.amazonaws.com\0" -"suedtirol.it\0czest.pl\0" -"kashiba.nara.jp\0yuza.yamagata.jp\0" -"tondabayashi.osaka.jp\0toyama.toyama.jp\0" -"\xe6\x95\x8e\xe8\x82\xb2.hk\0k12.vt.us\0" -"astrakhan.ru\0nfshost.com\0" -"!city.kobe.jp\0\xd1\x81\xd0\xb0\xd0\xb9\xd1\x82\0" -"enebakk.no\0" -"travel\0" -"sandiego.museum\0yokohama\0" -"valleeaoste.it\0parma.it\0kochi.jp\0kunohe.iwate.jp\0" -"izumisano.osaka.jp\0szczecin.pl\0" -"sellsyourhome.org\0" -"gob.gt\0" -"dyndns-remote.com\0" -"pippu.hokkaido.jp\0" -"com\0z.se\0is-a-bookkeeper.com\0" -"kotohira.kagawa.jp\0" -"is-found.org\0" -"gob.hn\0radom.pl\0" -"christiansburg.museum\0" -"tomigusuku.okinawa.jp\0swiebodzin.pl\0" -"bihoro.hokkaido.jp\0minato.osaka.jp\0" -"firenze.it\0" -"pr.us\0" -"takanabe.miyazaki.jp\0" -"jinsekikogen.hiroshima.jp\0" -"computer.museum\0" -"dad\0" -"kikuchi.kumamoto.jp\0sakura.tochigi.jp\0" -"otsu.shiga.jp\0" -"larvik.no\0\xd0\xb0\xd0\xba.\xd1\x81\xd1\x80\xd0\xb1\0" -"berg.no\0cc.dc.us\0" -"tateyama.toyama.jp\0" -"is-an-actor.com\0" -"rg.it\0" -"kep.tr\0from-la.net\0" -"ln.cn\0" -"from-wv.com\0is-a-hunter.com\0" -"day\0" -"kokonoe.oita.jp\0" -"wi.us\0" -"schmidt\0" -"6.bg\0portland.museum\0k12.wa.us\0" -"crs\0csc\0" -"groundhandling.aero\0cahcesuolo.no\0" -"francaise.museum\0dyndns-free.com\0" -"media.pl\0" -"dr.tr\0b.ssl.fastly.net\0" -"everbank\0" -"kitakata.fukushima.jp\0" -"montblanc\0" -"tanohata.iwate.jp\0nishi.osaka.jp\0reisen\0" -"rindal.no\0hamburg\0" -"koriyama.fukushima.jp\0ena.gifu.jp\0" -"foundation.museum\0" -"axis.museum\0" -"helsinki.museum\0cc.wa.us\0myphotos.cc\0" -"vic.edu.au\0" -"cloudapp.net\0" -"yamaxun\0" -"trading\0" -"viterbo.it\0lg.jp\0ise.mie.jp\0" -"lillesand.no\0" -"lib.me.us\0" -"okoppe.hokkaido.jp\0oyodo.nara.jp\0" -"shinshinotsu.hokkaido.jp\0tobetsu.hokkaido.jp\0" -"magadan.ru\0tennis\0" -"\xe5\xba\x83\xe5\xb3\xb6.jp\0mobara.chiba.jp\0" -"ltd.co.im\0" -"fet.no\0elb.amazonaws.com\0" -"kamikawa.hyogo.jp\0sango.nara.jp\0gob.mx\0" -"alta.no\0" -"sowa.ibaraki.jp\0" -"g\xc3\xa1\xc5\x8bgaviika.no\0" -"tattoo\0" -"fg.it\0konan.shiga.jp\0" -"off.ai\0country\0" -"dev\0" -"rn.it\0samukawa.kanagawa.jp\0" -"baidu\0" -"port.fr\0carbonia-iglesias.it\0miyoshi.tokushima.jp\0tabuse.yamaguchi.jp\0sosnowiec.pl\0adult\0" -"in-addr.arpa\0gran.no\0" -"gob.pa\0serveftp.org\0" -"hidaka.hokkaido.jp\0" -"nesseby.no\0" -"satosho.okayama.jp\0" -"gob.pe\0" -"flights\0" -"andriabarlettatrani.it\0" -"nagato.yamaguchi.jp\0host\0" -"nes.akershus.no\0gob.pk\0dvrdns.org\0" -"miyota.nagano.jp\0" -"embroidery.museum\0karasjohka.no\0" -"from-ky.com\0" -"trieste.it\0ashoro.hokkaido.jp\0" -"dealer\0" -"saigawa.fukuoka.jp\0" -"spiegel\0" -"atlanta.museum\0romskog.no\0" -"l\xc3\xa4ns.museum\0evje-og-hornnes.no\0" -"valled-aosta.it\0karasuyama.tochigi.jp\0" -"ing.pa\0" -"siracusa.it\0minano.saitama.jp\0" -"isahaya.nagasaki.jp\0hagi.yamaguchi.jp\0" -"!city.kitakyushu.jp\0uto.kumamoto.jp\0forex\0" -"murayama.yamagata.jp\0virgin\0" -"norddal.no\0cherkasy.ua\0codes\0" -"misato.saitama.jp\0" -"\xd9\x85\xd9\x88\xd9\x82\xd8\xb9\0" -"iwata.shizuoka.jp\0" -"tjome.no\0mango\0" -"greta.fr\0" -"eu.int\0minokamo.gifu.jp\0oi.kanagawa.jp\0" -"accident-prevention.aero\0" -"hirokawa.fukuoka.jp\0" -"kainan.tokushima.jp\0" -"gob.sv\0" -"gub.uy\0" -"black\0" -"noda.chiba.jp\0" -"tanagura.fukushima.jp\0abu.yamaguchi.jp\0" -"is-a-painter.com\0" -"ikeda.hokkaido.jp\0" -"mitoyo.kagawa.jp\0" -"gausdal.no\0" -"kvafjord.no\0" -"philadelphiaarea.museum\0santafe.museum\0cruises\0" -"ringerike.no\0" -"ven.it\0kamisato.saitama.jp\0przeworsk.pl\0" -"\xe7\x82\xb9\xe7\x9c\x8b\0" -"ask\xc3\xb8y.no\0" -"suli.hu\0is-an-accountant.com\0" -"lu.it\0me.it\0\xe7\xa7\xbb\xe5\x8a\xa8\0" -"flanders.museum\0" -"anquan\0" -"s\xc3\xb8rreisa.no\0" -"gob.ve\0" -"treviso.it\0" -"crew.aero\0" -"jaguar\0" -"barlettatraniandria.it\0happou.akita.jp\0" -"annefrank.museum\0is-a-bulls-fan.com\0" -"medecin.km\0jamal.ru\0dyndns-mail.com\0" -"toyota.aichi.jp\0" -"\xe6\x9c\xba\xe6\x9e\x84\0" -"muos\xc3\xa1t.no\0" -"monzaebrianza.it\0" -"lg.ua\0" -"dnp\0" -"archaeological.museum\0" -"ichikawa.chiba.jp\0kami.miyagi.jp\0" -"media.museum\0" -"ge.it\0unnan.shimane.jp\0walbrzych.pl\0" -"namdalseid.no\0dog\0" -"australia.museum\0\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3\x83\xab\0" -"shop.ht\0ascolipiceno.it\0" -"trading.aero\0shop.hu\0tr\xc3\xa6na.no\0" -"wroc.pl\0" -"kharkiv.ua\0" -"slattum.no\0" -"zj.cn\0" -"amursk.ru\0" -"miyazaki.jp\0nishinoomote.kagoshima.jp\0" -"\xe0\xae\x87\xe0\xae\xa8\xe0\xaf\x8d\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xaf\xe0\xae\xbe\0" -"ora.gunma.jp\0" -"chattanooga.museum\0naturalhistorymuseum.museum\0uhren.museum\0" -"emilia-romagna.it\0\xe9\xa6\x99\xe5\xb7\x9d.jp\0" -"spb.ru\0" -"kiso.nagano.jp\0" -"gop.pk\0vote\0" -"krokstadelva.no\0leitungsen.de\0" -"ogi.saga.jp\0" -"broker.aero\0" -"asaka.saitama.jp\0" -"dnipropetrovsk.ua\0" -"minamiechizen.fukui.jp\0kagamiishi.fukushima.jp\0" -"voto\0" -"ostroda.pl\0" -"noheji.aomori.jp\0stalowa-wola.pl\0" -"jolster.no\0" -"iijima.nagano.jp\0" -"blog.br\0gs.cn\0tainai.niigata.jp\0kouzushima.tokyo.jp\0cheap\0" -"kharkov.ua\0cc.wv.us\0" -"s3-website-us-gov-west-1.amazonaws.com\0" -"tj.cn\0onagawa.miyagi.jp\0" -"naples.it\0miyako.iwate.jp\0yaita.tochigi.jp\0eat\0" -"nord-aurdal.no\0servegame.org\0" -"money\0blogdns.org\0" -"lib.mn.us\0" -"aoste.it\0" -"westfalen.museum\0" -"kasaoka.okayama.jp\0" -"bc.ca\0" -"shia\0" -"*.kawasaki.jp\0" -"skodje.no\0" -"\xe7\x86\x8a\xe6\x9c\xac.jp\0" -"varoy.no\0" -"kaga.ishikawa.jp\0cloudfront.net\0" -"ss.it\0" -"shimane.jp\0ryokami.saitama.jp\0yamanakako.yamanashi.jp\0durban\0" -"randaberg.no\0" -"jobs.tt\0" -"bjugn.no\0z-2.compute-1.amazonaws.com\0" -"futaba.fukushima.jp\0" -"kms.ru\0" -"zamami.okinawa.jp\0" -"laquila.it\0" -"mobily\0" -"club\0" -"edu\0" -"a.prod.fastly.net\0" -"tamatsukuri.ibaraki.jp\0" -"kamoenai.hokkaido.jp\0" -"f\xc3\xb8rde.no\0" -"al.it\0" -"ube.yamaguchi.jp\0" -"ms.it\0" -"higashiagatsuma.gunma.jp\0" -"pacific.museum\0" -"gz.cn\0" -"dyndns.org\0" -"otari.nagano.jp\0" -"miyazaki.miyazaki.jp\0" -"texas.museum\0hosting\0" -"mincom.tn\0" -"huissier-justice.fr\0" -"\xc3\xa5lg\xc3\xa5rd.no\0fusa.no\0lib.ny.us\0mtpc\0panerai\0" -"chieti.it\0fujikawaguchiko.yamanashi.jp\0blogspot.com.ar\0" -"gs.fm.no\0" -"chikushino.fukuoka.jp\0" -"blogspot.com.au\0" -"iiyama.nagano.jp\0" -"ms.kr\0" -"tohma.hokkaido.jp\0tara.saga.jp\0" -"is-gone.com\0" -"friuli-vegiulia.it\0saito.miyazaki.jp\0" -"ringebu.no\0" -"bj.cn\0me.tz\0blogspot.com.br\0" -"raisa.no\0me.uk\0" -"tokuyama.yamaguchi.jp\0" -"isesaki.gunma.jp\0" -"kunst.museum\0" -"childrens.museum\0me.us\0" -"mihara.hiroshima.jp\0" -"jogasz.hu\0" -"sayama.saitama.jp\0" -"k12.me.us\0" -"bale.museum\0s\xc3\xb8r-odal.no\0" -"cambridge.museum\0" -"shimotsuke.tochigi.jp\0" -"harima.hyogo.jp\0" -"varggat.no\0barcelona\0" -"kunimi.fukushima.jp\0" -"gallery.museum\0" -"kitayama.wakayama.jp\0" -"nov.ru\0" -"kasumigaura.ibaraki.jp\0taiki.mie.jp\0" -"lierne.no\0is-a-doctor.com\0" -"lidl\0" -"al.no\0\xeb\x8b\xb7\xeb\x84\xb7\0dyndns-office.com\0" -"kunisaki.oita.jp\0ricoh\0" -"biev\xc3\xa1t.no\0" -"yamagata.jp\0ibara.okayama.jp\0" -"shirakawa.fukushima.jp\0" -"is-a-nurse.com\0" -"sagamihara.kanagawa.jp\0" -"verdal.no\0" -"fie.ee\0shoes\0" -"blogspot.com.es\0" -"tachikawa.tokyo.jp\0" -"valley.museum\0oracle\0\xd0\xbe\xd0\xbd\xd0\xbb\xd0\xb0\xd0\xb9\xd0\xbd\0" -"yuzawa.niigata.jp\0higashiizumo.shimane.jp\0" -"\xe0\xb6\xbd\xe0\xb6\x82\xe0\xb6\x9a\xe0\xb7\x8f\0" -"katori.chiba.jp\0" -"vic.gov.au\0center.museum\0ulan-ude.ru\0life\0" -"machida.tokyo.jp\0better-than.tv\0" -"hino.tokyo.jp\0" -"tokoname.aichi.jp\0" -"kawachinagano.osaka.jp\0" -"minnesota.museum\0" -"steinkjer.no\0" -"trentino-stirol.it\0hamatonbetsu.hokkaido.jp\0" -"reggio-calabria.it\0" -"etnedal.no\0vdonsk.ru\0cc.sd.us\0" -"plaza.museum\0" -"nx.cn\0band\0" -"flowers\0" -"bank\0" -"agematsu.nagano.jp\0" -"passenger-association.aero\0mod.gi\0" -"settsu.osaka.jp\0" -"shimokitayama.nara.jp\0" -"washingtondc.museum\0apartments\0is-a-blogger.com\0" -"at-band-camp.net\0" -"med.pro\0" -"torino.it\0" -"merseine.nu\0" -"ine.kyoto.jp\0" -"\xe9\xb3\xa5\xe5\x8f\x96.jp\0" -"komforb.se\0" -"porsgrunn.no\0" -"noboribetsu.hokkaido.jp\0kameoka.kyoto.jp\0" -"analytics\0" -"cng.br\0" -"vladikavkaz.ru\0cc.md.us\0" -"page\0" -"friuli-veneziagiulia.it\0shimamoto.osaka.jp\0uw.gov.pl\0" -"microlight.aero\0canada.museum\0koebenhavn.museum\0" -"olbia-tempio.it\0yukuhashi.fukuoka.jp\0allfinanz\0" -"aerodrome.aero\0" -"\xe6\x84\x9b\xe7\x9f\xa5.jp\0" -"beppu.oita.jp\0nishiazai.shiga.jp\0" -"minami.tokushima.jp\0kaneyama.yamagata.jp\0" -"amber.museum\0from-ga.com\0" -"kita.kyoto.jp\0" -"sakyo.kyoto.jp\0fund\0" -"modern.museum\0" -"ebina.kanagawa.jp\0" -"kuzbass.ru\0" -"namegata.ibaraki.jp\0nowruz\0" -"nc.tr\0" -"like\0" +"czest.pl\0" +"nom.tm\0cloudapp.net\0" +"\xe7\xbb\x84\xe7\xb9\x94.hk\0acct.pro\0" +"juif.museum\0" +"gose.nara.jp\0" +"kakogawa.hyogo.jp\0" +"taiwa.miyagi.jp\0" +"club.aero\0fot.br\0" +"lombardy.it\0tsumagoi.gunma.jp\0colonialwilliamsburg.museum\0" +"ebetsu.hokkaido.jp\0" +"serveftp.org\0" +"n\xc3\xa1vuotna.no\0vig\0" +"kepno.pl\0" +"\xe5\xb1\xb1\xe5\x8f\xa3.jp\0" +"nanjo.okinawa.jp\0" +"koshimizu.hokkaido.jp\0" +"agriculture.museum\0vin\0" +"ens.tn\0" +"kaminokawa.tochigi.jp\0vip\0" +"yamagata.nagano.jp\0" +"immobilien\0" +"lundbeck\0" +"\xd8\xa7\xd8\xb1\xd8\xa7\xd9\x85\xd9\x83\xd9\x88\0" +"cherkasy.ua\0" +"browsersafetymark.io\0" +"namerikawa.toyama.jp\0" +"oirm.gov.pl\0" +"mizunami.gifu.jp\0nagiso.nagano.jp\0" +"4.bg\0mesaverde.museum\0cloudfunctions.net\0" +"kasuga.fukuoka.jp\0muncie.museum\0pioneer\0" +"suzaka.nagano.jp\0kr.ua\0audi\0" +"malbork.pl\0cc.nm.us\0" +"cc.id.us\0" +"ferrara.it\0" +"recipes\0" +"gobo.wakayama.jp\0" +"ltd.lk\0" +"fm.it\0roma.museum\0" +"turek.pl\0" +"anjo.aichi.jp\0" +"vt.us\0" +"artdeco.museum\0" +"kita.tokyo.jp\0\xd0\xb8\xd0\xba\xd0\xbe\xd0\xbc.museum\0" +"ad.jp\0" +"parts\0" +"beer\0" +"yasuoka.nagano.jp\0flatanger.no\0" +"pilot.aero\0" +"party\0" +"hiratsuka.kanagawa.jp\0" +"hemsedal.no\0" +"nom.za\0" +"vana\0" +"miyashiro.saitama.jp\0strand.no\0" +"kawanabe.kagoshima.jp\0smolensk.ru\0dynathome.net\0" +"hdfc\0" "valledaosta.it\0" -"tromso.no\0" -"fukui.jp\0" -"b\xc3\xb8.telemark.no\0jpn.com\0" -"kumagaya.saitama.jp\0" +"nishihara.okinawa.jp\0" +"yaita.tochigi.jp\0deal\0" +"contemporary.museum\0" +"minamifurano.hokkaido.jp\0" +"kin.okinawa.jp\0engerdal.no\0" +"games\0" +"amber.museum\0" +"simbirsk.ru\0" +"sn\xc3\xa5""ase.no\0" +"*.alces.network\0" +"\xe6\x89\x8b\xe6\x9c\xba\0" +"unzen.nagasaki.jp\0" +"shikabe.hokkaido.jp\0hirado.nagasaki.jp\0no.eu.org\0" +"minano.saitama.jp\0" +"murata.miyagi.jp\0itau\0" +"kitagawa.kochi.jp\0" +"gr.com\0" +"windmill.museum\0in-the-band.net\0" +"express.aero\0\xd9\x82\xd8\xb7\xd8\xb1\0" +"fm.no\0" +"6.bg\0wajiki.tokushima.jp\0" +"bonn.museum\0" +"shiraoka.saitama.jp\0" +"ah.cn\0" +"pvt.ge\0anan.tokushima.jp\0" +"bibai.hokkaido.jp\0katsuragi.wakayama.jp\0chuo.yamanashi.jp\0" +"ra.it\0naroy.no\0buryatia.ru\0" +"tatebayashi.gunma.jp\0wakasa.tottori.jp\0swatch\0" +"oshino.yamanashi.jp\0dyndns-mail.com\0" +"earth\0" +"vestre-slidre.no\0" +"cahcesuolo.no\0" +"wios.gov.pl\0wanggou\0" +"matsukawa.nagano.jp\0tyumen.ru\0" +"kolobrzeg.pl\0" +"morotsuka.miyazaki.jp\0olkusz.pl\0" +"taxi\0" +"bloxcms.com\0" +"filatelia.museum\0vagsoy.no\0" +"luroy.no\0" +"yabuki.fukushima.jp\0sokndal.no\0" +"pccw\0" +"polkowice.pl\0" +"name.hr\0" +"vercelli.it\0" +"aquila.it\0" +"vdonsk.ru\0melbourne\0" +"yamagata.gifu.jp\0" +"oji.nara.jp\0snaase.no\0" +"kakegawa.shizuoka.jp\0chocolate.museum\0" +"kashiba.nara.jp\0" +"hamatama.saga.jp\0kirovograd.ua\0" +"lancia\0" +"name.et\0" +"wakasa.fukui.jp\0lans.museum\0" +"freebox-os.com\0" +"takanezawa.tochigi.jp\0ltd.uk\0" +"beauty\0" +"cng.br\0eiheiji.fukui.jp\0" +"taishin.fukushima.jp\0versicherung\0" +"nishiarita.saga.jp\0" +"national.museum\0mattel\0wed\0" +"\xe9\xa3\x9f\xe5\x93\x81\0" +"kikuchi.kumamoto.jp\0" +"nz.eu.org\0" +"global.ssl.fastly.net\0" +"sanuki.kagawa.jp\0" +"iwate.iwate.jp\0" +"gc.ca\0" +"kakamigahara.gifu.jp\0selfip.info\0" +"belau.pw\0" +"kita.osaka.jp\0lib.ri.us\0" +"8.bg\0" +"museumcenter.museum\0" "charter.aero\0" -"gent\0" -"barum.no\0nannestad.no\0homeunix.com\0" -"medecin.fr\0" -"bern.museum\0batsfjord.no\0al.us\0getmyip.com\0" -"fan\0" -"jetzt\0" -"alaska.museum\0zhytomyr.ua\0ms.us\0nc.us\0" -"\xd8\xa7\xd9\x84\xd9\x85\xd8\xba\xd8\xb1\xd8\xa8\0" -"k12.ms.us\0k12.nc.us\0" -"surgeonshall.museum\0" -"g.bg\0from-me.org\0" -"auction\0" -"gs.mr.no\0" -"osakikamijima.hiroshima.jp\0nanao.ishikawa.jp\0" -"yanaizu.fukushima.jp\0muika.niigata.jp\0" -"hjartdal.no\0" -"ca.it\0kawakami.nagano.jp\0support\0" -"co.ae\0" -"co.ag\0" -"naroy.no\0limo\0" -"kawara.fukuoka.jp\0katsushika.tokyo.jp\0" -"bungoono.oita.jp\0" -"co.ao\0esq\0" -"co.ba\0" -"co.bb\0" -"simple-url.com\0" -"co.at\0etc.br\0" -"\xc3\xa5krehamn.no\0vestre-slidre.no\0barclays\0link\0" -"kiryu.gunma.jp\0hamamatsu.shizuoka.jp\0" -"lib.or.us\0" -"taira.toyama.jp\0" -"co.bi\0" -"kazimierz-dolny.pl\0" -"krasnoyarsk.ru\0" -"gucci\0" -"wanggou\0" -"co.ca\0" -"yamatsuri.fukushima.jp\0" -"paris.museum\0" -"\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xae\0" -"co.bw\0" -"omi.nagano.jp\0" -"co.ci\0aquarelle\0" -"co.cl\0" -"co.cm\0" -"nakagawa.tokushima.jp\0" -"zushi.kanagawa.jp\0tokorozawa.saitama.jp\0" -"eus\0from-ne.com\0" -"co.cr\0szkola.pl\0" -"as.us\0" -"oiso.kanagawa.jp\0xihuan\0blogspot.com.tr\0" -"nj.us\0k12.as.us\0" -"conference.aero\0" -"n.bg\0" -"shop.pl\0" -"ca.na\0n\xc3\xa6r\xc3\xb8y.no\0" -"takaishi.osaka.jp\0" -"miyazu.kyoto.jp\0\xe5\x85\xac\xe7\x9b\x8a\0" -"abr.it\0taiji.wakayama.jp\0" -"v\xc3\xa5gs\xc3\xb8y.no\0bar.pro\0kchr.ru\0lanbib.se\0" -"traeumtgerade.de\0" -"ch.it\0" -"cc.ak.us\0" -"mypets.ws\0" -"owani.aomori.jp\0" -"iwate.jp\0" -"\xe4\xb8\xad\xe5\x9b\xbd\0feedback\0" -"dyndns-at-work.com\0" -"even\xc3\xa1\xc5\xa1\xc5\xa1i.no\0organic\0" -"k12.il.us\0" -"yabu.hyogo.jp\0" -"stjohn.museum\0\xe4\xb8\xad\xe5\x9c\x8b\0" -"davvesiida.no\0sucks\0temasek\0" -"drammen.no\0" -"aip.ee\0co.gg\0" -"kumejima.okinawa.jp\0" -"london\0" -"tolga.no\0" -"sakura.chiba.jp\0fit\0" -"tjeldsund.no\0" -"rec.br\0gushikami.okinawa.jp\0" -"navigation.aero\0" -"co.gy\0" -"sanda.hyogo.jp\0daigo.ibaraki.jp\0uenohara.yamanashi.jp\0" -"az.us\0" -"nakatane.kagoshima.jp\0" -"labor.museum\0wang\0" -"matera.it\0shirataka.yamagata.jp\0swatch\0selfip.net\0" +"name.cy\0berlin.museum\0" +"suzu.ishikawa.jp\0kv.ua\0" +"sa.gov.pl\0" +"kharkov.ua\0cc.co.us\0" +"government.aero\0" +"rc.it\0" +"name.eg\0norfolk.museum\0" +"oxford.museum\0" +"salzburg.museum\0" +"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86\0" +"\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" +"chicago.museum\0" +"anan.nagano.jp\0" +"hidaka.saitama.jp\0" +"minamidaito.okinawa.jp\0" +"name.az\0\xe5\xb1\xb1\xe5\xbd\xa2.jp\0tienda\0" +"badajoz.museum\0\xe9\x9b\x86\xe5\x9b\xa2\0" +"net-freaks.com\0" +"trentinos-tirol.it\0" +"wmflabs.org\0" +"rockart.museum\0swidnica.pl\0makeup\0" +"univ.sn\0dell\0" +"settlers.museum\0" +"madrid.museum\0" +"tsurugi.ishikawa.jp\0gran.no\0" +"imb.br\0" +"nakagawa.hokkaido.jp\0manno.kagawa.jp\0" +"trust.museum\0\xd8\xb3\xd9\x88\xd8\xaf\xd8\xa7\xd9\x86\0" +"k12.nv.us\0win\0" "fashion\0" -"pars\0" -"yugawa.fukushima.jp\0" -"rec.co\0k12.ny.us\0" -"co.id\0" -"co.hu\0lib.vt.us\0" -"jelenia-gora.pl\0" -"u.bg\0" -"\xd8\xa7\xd9\x84\xd8\xac\xd8\xb2\xd8\xa7\xd8\xa6\xd8\xb1\0" -"ito.shizuoka.jp\0maison\0" -"miyada.nagano.jp\0" -"co.im\0yakutia.ru\0" -"co.in\0" -"live\0" -"venice.it\0" -"co.ir\0aizubange.fukushima.jp\0shizuoka.shizuoka.jp\0principe.st\0" -"co.it\0" -"co.je\0cc.ar.us\0review\0" -"heguri.nara.jp\0center\0from-ny.net\0" -"sanfrancisco.museum\0" -"akune.kagoshima.jp\0" -"casadelamoneda.museum\0edeka\0" -"\xe7\x9f\xb3\xe5\xb7\x9d.jp\0fukuchiyama.kyoto.jp\0" -"nissedal.no\0ivanovo.ru\0" -"co.jp\0" -"ia.us\0" -"vantaa.museum\0" -"yanagawa.fukuoka.jp\0" -"aeroclub.aero\0tx.us\0" -"urbinopesaro.it\0" -"army\0fly\0" -"fukudomi.saga.jp\0oguni.yamagata.jp\0" -"val-d-aosta.it\0" -"historyofscience.museum\0tranby.no\0" -"andasuolo.no\0" -"yoshinogari.saga.jp\0co.kr\0" -"championship.aero\0co.lc\0public.museum\0" -"nerima.tokyo.jp\0" -"moscow.museum\0cymru\0" -"site\0" -"namerikawa.toyama.jp\0" -"cc.hi.us\0" -"tsuruga.fukui.jp\0" -"arpa\0news\0nokia\0" -"co.ma\0vf.no\0" -"verm\xc3\xb6gensberater\0" -"co.ls\0cmw.ru\0ca.us\0" -"co.me\0" -"grandrapids.museum\0nuremberg.museum\0oh.us\0" -"shibukawa.gunma.jp\0" -"fujioka.gunma.jp\0asahi.yamagata.jp\0oshino.yamanashi.jp\0" -"foo\0quebec\0" -"co.na\0" -"campidano-medio.it\0" -"austin.museum\0" -"\xe7\xbb\x84\xe7\xbb\x87.hk\0co.mu\0" -"\xe7\xa6\x8f\xe5\xb3\xb6.jp\0" -"co.mw\0" -"yatomi.aichi.jp\0daejeon.kr\0" -"steigen.no\0" -"ogimi.okinawa.jp\0" -"equipment.aero\0settlers.museum\0" -"psc.br\0nara.jp\0tsugaru.aomori.jp\0co.nl\0" -"co.no\0" -"university.museum\0" -"nakagawa.nagano.jp\0email\0" -"sveio.no\0" -"ed.ao\0donostia.museum\0kommunalforbund.se\0" -"cleaning\0technology\0" -"co.nz\0gal\0" -"forsale\0" -"carraramassa.it\0" -"co.om\0" -"emiliaromagna.it\0" -"birdart.museum\0" -"scrapper-site.net\0" -"oceanographic.museum\0" -"aca.pro\0karelia.ru\0" -"atsuma.hokkaido.jp\0hidaka.wakayama.jp\0" -"handson.museum\0" -"chuo.yamanashi.jp\0frl\0" -"co.pl\0" -"gjerstad.no\0" -"co.pn\0" +"agano.niigata.jp\0" +"mol.it\0kamiichi.toyama.jp\0lyngdal.no\0" +"wuoz.gov.pl\0best\0eating-organic.net\0" +"tozawa.yamagata.jp\0" +"meeres.museum\0" +"indian.museum\0" +"kutchan.hokkaido.jp\0kosuge.yamanashi.jp\0snoasa.no\0" +"higashi.okinawa.jp\0meguro.tokyo.jp\0origins\0\xd9\x83\xd8\xa7\xd8\xab\xd9\x88\xd9\x84\xd9\x8a\xd9\x83\0" +"auto\0" "bearalvahki.no\0" -"piemonte.it\0" -"ed.ci\0amsterdam.museum\0hk.com\0" -"taishi.hyogo.jp\0" -"arte\0" -"jor.br\0shinshiro.aichi.jp\0kyowa.akita.jp\0" -"g.se\0" -"vt.it\0koto.shiga.jp\0um.gov.pl\0" -"co.pw\0cbg.ru\0" -"ed.cr\0vald-aosta.it\0" -"blogspot.re\0" -"midatlantic.museum\0" -"modum.no\0" -"blogspot.ro\0" -"riodejaneiro.museum\0" -"gdn\0" -"cisco\0blogspot.ru\0blogspot.se\0" -"brand.se\0bbva\0gea\0blogspot.sg\0" -"utah.museum\0porsangu.no\0" -"sakai.osaka.jp\0" -"linz.museum\0co.rs\0blogspot.sk\0" -"trentino-a-adige.it\0aero.tt\0" -"realestate.pl\0" -"bjark\xc3\xb8y.no\0co.rw\0" -"pt.it\0esan.hokkaido.jp\0" -"hsbc\0" -"kawanishi.yamagata.jp\0rec.nf\0" -"blogspot.td\0" -"taxi.aero\0" -"kamigori.hyogo.jp\0aoki.nagano.jp\0" -"ferrero\0lotte\0" -"whaling.museum\0" -"\xe9\xab\x98\xe7\x9f\xa5.jp\0blogdns.net\0" -"broadway\0" -"co.st\0\xe5\xb9\xbf\xe4\xb8\x9c\0" -"aero.mv\0" -"ama.aichi.jp\0iwama.ibaraki.jp\0uruma.okinawa.jp\0hamada.shimane.jp\0co.th\0" -"lotto\0" -"co.sz\0co.tj\0" -"is-not-certified.com\0" -"samegawa.fukushima.jp\0hatogaya.saitama.jp\0" -"co.tm\0" -"zoological.museum\0evenes.no\0blogspot.tw\0" -"b\xc3\xb8.nordland.no\0n\xc3\xb8tter\xc3\xb8y.no\0co.ua\0" -"nishio.aichi.jp\0shibecha.hokkaido.jp\0" -"magazine.aero\0" -"co.tt\0\xe4\xb8\x96\xe7\x95\x8c\0" -"\xeb\x8b\xb7\xec\xbb\xb4\0" -"nordreisa.no\0co.ug\0" -"kvalsund.no\0ggee\0" -"co.tz\0blogspot.mr\0" -"jobs\0giessen.museum\0co.uk\0verm\xc3\xb6gensberatung\0" -"n.se\0" -"yamamoto.miyagi.jp\0" -"asia\0uzhgorod.ua\0" -"blogspot.mx\0" -"burghof.museum\0" -"co.us\0" -"higashiura.aichi.jp\0blogspot.nl\0" -"columbus.museum\0co.ve\0" -"nnov.ru\0yachts\0blogspot.no\0" -"bjerkreim.no\0co.vi\0" -"co.uz\0" -"sekigahara.gifu.jp\0" -"osteroy.no\0\xe9\xa6\x99\xe6\xb8\xaf\0" -"kinko.kagoshima.jp\0" -"tsubetsu.hokkaido.jp\0" -"eiheiji.fukui.jp\0yawata.kyoto.jp\0yamatokoriyama.nara.jp\0" -"sasayama.hyogo.jp\0" -"equipment\0" -"takamori.nagano.jp\0" -"hobol.no\0university\0" -"itabashi.tokyo.jp\0" -"school.na\0chel.ru\0" -"kuroishi.aomori.jp\0" -"timekeeping.museum\0\xe6\xb7\xa1\xe9\xa9\xac\xe9\x94\xa1\0" -"reggiocalabria.it\0" -"rec.ro\0" -"alsace\0" -"royken.no\0" -"ed.jp\0gunma.jp\0" -"amusement.aero\0giehtavuoatna.no\0" -"blogspot.pt\0" -"*.bd\0hokuryu.hokkaido.jp\0" -"and\xc3\xb8y.no\0" -"trd.br\0" -"osakasayama.osaka.jp\0" -"systems\0" -"asahikawa.hokkaido.jp\0" -"takazaki.miyazaki.jp\0school.nz\0" -"\xe5\x95\x86\xe6\xa5\xad.tw\0" -"*.bn\0tosashimizu.kochi.jp\0dabur\0" -"cranbrook.museum\0usa.museum\0cv.ua\0" -"daisen.akita.jp\0shirosato.ibaraki.jp\0" -"perugia.it\0blogspot.it\0" -"atsugi.kanagawa.jp\0" -"oyabe.toyama.jp\0" -"skedsmokorset.no\0cc.in.us\0gle\0" -"*.ck\0hurdal.no\0u.se\0" -"bunkyo.tokyo.jp\0" -"mad.museum\0" -"blogspot.jp\0" -"eco.br\0" -"wa.gov.au\0k\xc3\xa5""fjord.no\0\xc3\xb8rland.no\0space\0" -"oita.jp\0mukawa.hokkaido.jp\0" -"lib.la.us\0" -"bialystok.pl\0szczytno.pl\0democrat\0" -"*.cy\0webhop.org\0" -"neyagawa.osaka.jp\0" -"horology.museum\0audio\0commbank\0" -"ashiya.fukuoka.jp\0" -"hiratsuka.kanagawa.jp\0" -"grimstad.no\0rec.ve\0" -"blogspot.kr\0" -"tokyo\0" -"dellogliastra.it\0shiiba.miyazaki.jp\0" -"gmo\0" -"yaotsu.gifu.jp\0" -"\xd8\xb4\xd8\xa8\xd9\x83\xd8\xa9\0" -"kaisei.kanagawa.jp\0" -"tonsberg.no\0" -"gmx\0" -"b\xc3\xa5tsfjord.no\0law.pro\0suzuki\0" -"oristano.it\0" -"tsukui.kanagawa.jp\0yokkaichi.mie.jp\0" -"*.er\0" -"capebreton.museum\0n\xc3\xa1vuotna.no\0sunndal.no\0" -"nishi.fukuoka.jp\0" -"otsuki.kochi.jp\0" -"*.fj\0*.kobe.jp\0zakopane.pl\0" -"*.fk\0vt.us\0" -"lig.it\0nishikatsura.yamanashi.jp\0" -"valdaosta.it\0takahata.yamagata.jp\0" -"1.bg\0" -"podhale.pl\0capital\0" -"kamo.niigata.jp\0cool\0" -"goo\0" -"gop\0" -"larsson.museum\0" -"coop\0" -"blogspot.fi\0" -"got\0" -"gov\0piacenza.it\0hisayama.fukuoka.jp\0" -"cincinnati.museum\0" -"frog.museum\0hitachi\0" -"kr.it\0fujinomiya.shizuoka.jp\0blogspot.fr\0" -"vistaprint\0" -"kodaira.tokyo.jp\0" -"*.gu\0ed.pw\0nsn.us\0" -"hu.net\0" -"fi.cr\0horokanai.hokkaido.jp\0gwangju.kr\0" -"yamagata.nagano.jp\0" -"lubin.pl\0blogspot.gr\0" -"modelling.aero\0rendalen.no\0kostroma.ru\0from-sc.com\0" -"tarnobrzeg.pl\0" -"ivgu.no\0comsec\0" -"broadcast.museum\0" -"buryatia.ru\0blogspot.hk\0" -"kl\xc3\xa6""bu.no\0" -"*.il\0" -"study\0" -"kameyama.mie.jp\0wakasa.tottori.jp\0" -"bas.it\0kanzaki.saga.jp\0" -"cc.de.us\0blogspot.hu\0blogspot.ie\0" -"hasama.oita.jp\0" -"ri.it\0dynalias.net\0" -"\xe6\x94\xbf\xe5\x8a\xa1\0" -"toscana.it\0shikokuchuo.ehime.jp\0" -"aknoluokta.no\0sor-varanger.no\0" -"kasamatsu.gifu.jp\0kawaue.gifu.jp\0blogspot.in\0" -"*.jm\0" -"ina.nagano.jp\0" -"venezia.it\0misato.shimane.jp\0" -"is-very-good.org\0blogspot.be\0" -"*.ke\0tananger.no\0lib.sc.us\0dating\0" -"kakegawa.shizuoka.jp\0skin\0" -"8.bg\0" -"omachi.nagano.jp\0ichikawamisato.yamanashi.jp\0*.kh\0blogspot.bj\0" -"yashio.saitama.jp\0" -"blogspot.ca\0" -"arq.br\0takayama.gunma.jp\0" -"kagoshima.kagoshima.jp\0cancerresearch\0" -"miami\0" -"mihama.aichi.jp\0blogspot.cf\0" -"blogspot.ch\0" -"*.kw\0bindal.no\0" -"li.it\0" -"nationalfirearms.museum\0" -"rochester.museum\0" -"shibata.miyagi.jp\0" -"blogspot.de\0" -"blogspot.cv\0" -"leirvik.no\0" -"blogspot.cz\0" -"civilwar.museum\0krodsherad.no\0eng.pro\0blogspot.dk\0" -"kamiamakusa.kumamoto.jp\0" -"nic.in\0umbria.it\0" -"*.mm\0stv.ru\0" -"noto.ishikawa.jp\0webhop.biz\0" -"kiyosato.hokkaido.jp\0ueda.nagano.jp\0miyake.nara.jp\0" -"scienceandhistory.museum\0" -"nittedal.no\0" -"gorge.museum\0" -"\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\0" -"*.ni\0" -"fi.it\0*.mz\0\xd8\xa7\xd8\xb1\xd8\xa7\xd9\x85\xd9\x83\xd9\x88\0" -"vibovalentia.it\0" -"*.np\0" -"sigdal.no\0skype\0" -"ono.fukushima.jp\0" -"mutsu.aomori.jp\0omachi.saga.jp\0" -"yn.cn\0" -"rost.no\0company\0" -"trainer.aero\0scienceandindustry.museum\0" -"kitaakita.akita.jp\0" -"entertainment.aero\0" -"fuettertdasnetz.de\0" -"contemporary.museum\0" -"higashiyodogawa.osaka.jp\0" -"*.pg\0" -"aioi.hyogo.jp\0" -"newyork.museum\0\xd0\xbe\xd0\xb4.\xd1\x81\xd1\x80\xd0\xb1\0" -"does-it.net\0" -"her\xc3\xb8y.nordland.no\0" -"sosa.chiba.jp\0uryu.hokkaido.jp\0hirakata.osaka.jp\0" -"valle.no\0" -"circus.museum\0" -"citic\0" -"sn.cn\0" -"fukuyama.hiroshima.jp\0hiv\0" -"lenvik.no\0" -"nieruchomosci.pl\0" -"higashihiroshima.hiroshima.jp\0ohtawara.tochigi.jp\0" -"lib.nj.us\0" -"direct\0" -"blogspot.ae\0" -"kamaishi.iwate.jp\0omura.nagasaki.jp\0kaminoyama.yamagata.jp\0" -"s\xc3\xa1lat.no\0" -"towada.aomori.jp\0" -"klabu.no\0" -"padua.it\0" -"kr.ua\0" -"bio.br\0morimachi.shizuoka.jp\0" -"assisi.museum\0" -"tone.ibaraki.jp\0tsuno.miyazaki.jp\0" -"sells-for-less.com\0" -"hichiso.gifu.jp\0czeladz.pl\0" -"hvaler.no\0" -"paragliding.aero\0asnes.no\0" -"tako.chiba.jp\0" -"house.museum\0" -"anan.nagano.jp\0mihama.wakayama.jp\0" -"heritage.museum\0andebu.no\0from-wy.com\0" -"service.gov.uk\0" -"chambagri.fr\0" -"istmein.de\0" -"myoko.niigata.jp\0from-az.net\0" -"wy.us\0" -"yamakita.kanagawa.jp\0" -"garden.museum\0" -"\xe5\x92\x8c\xe6\xad\x8c\xe5\xb1\xb1.jp\0" -"qld.au\0gok.pk\0" -"schokoladen.museum\0" -"southcarolina.museum\0" -"nativeamerican.museum\0s3-website-us-west-1.amazonaws.com\0is-a-personaltrainer.com\0" -"hirosaki.aomori.jp\0" -"homes\0" -"fineart.museum\0" -"crown\0" -"nrw.museum\0" -"from-in.com\0" -"kaufen\0" -"grue.no\0lib.az.us\0\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa7\0" -"far.br\0arita.saga.jp\0" -"bronnoy.no\0lipetsk.ru\0ri.us\0\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa9\0is-a-conservative.com\0" -"honbetsu.hokkaido.jp\0" -"lib.ne.us\0selfip.org\0" -"tmp.br\0wakayama.jp\0" -"lodingen.no\0" -"moriya.ibaraki.jp\0shioya.tochigi.jp\0" -"dolls.museum\0health.museum\0" -"trentinoaadige.it\0" -"ascoli-piceno.it\0fukushima.fukushima.jp\0" -"takasaki.gunma.jp\0" -"how\0" -"bandai.fukushima.jp\0takaharu.miyazaki.jp\0" -"muenster.museum\0" -"statoil\0" -"himeji.hyogo.jp\0" -"asti.it\0" -"certification.aero\0santabarbara.museum\0yorkshire.museum\0sandnessjoen.no\0hasvik.no\0" -"bus.museum\0africa.com\0" -"ky.us\0" -"sennan.osaka.jp\0nic.tj\0" -"lib.gu.us\0" -"k12.la.us\0" -"konyvelo.hu\0trolley.museum\0bradesco\0is-a-liberal.com\0" -"mihama.chiba.jp\0misato.miyagi.jp\0madrid\0" -"yalta.ua\0accenture\0" -"b\xc3\xa1l\xc3\xa1t.no\0" -"fujisawa.iwate.jp\0saiki.oita.jp\0" -"countryestate.museum\0*.ye\0" -"yuu.yamaguchi.jp\0" -"airguard.museum\0horten.no\0" -"lukow.pl\0" -"nhs.uk\0" -"forum.hu\0" -"ag.it\0chiryu.aichi.jp\0nankoku.kochi.jp\0" -"asahi.ibaraki.jp\0" -"tr\xc3\xb8gstad.no\0" -"mn.it\0setouchi.okayama.jp\0" -"utsira.no\0cc.la.us\0*.za\0ibm\0" -"uda.nara.jp\0kitagata.saga.jp\0arakawa.saitama.jp\0\xe5\x95\x86\xe5\x9f\x8e\0" -"hole.no\0" -"he.cn\0shiraoi.hokkaido.jp\0mimata.miyazaki.jp\0" -"shingo.aomori.jp\0tateyama.chiba.jp\0kaita.hiroshima.jp\0" -"database.museum\0vodka\0" -"lardal.no\0ice\0" -"spy.museum\0*.zm\0" -"hiraizumi.iwate.jp\0" -"airtraffic.aero\0" -"trentinoaltoadige.it\0" -"enna.it\0" -"association.aero\0*.zw\0" -"funagata.yamagata.jp\0" -"kaluga.ru\0clinic\0icu\0" -"okayama.okayama.jp\0" -"is-a-techie.com\0" -"nl.ca\0virtuel.museum\0" -"waw.pl\0" -"is-a-rockstar.com\0" -"higashimatsushima.miyagi.jp\0iruma.saitama.jp\0" -"yusui.kagoshima.jp\0kalisz.pl\0" -"from-va.com\0" -"hiranai.aomori.jp\0" -"te.it\0beer\0" -"mallorca.museum\0svelvik.no\0" -"career\0" -"tver.ru\0" +"ah.no\0" +"amsterdam.museum\0" +"collegefan.org\0" +"ln.cn\0yoshioka.gunma.jp\0" +"toyone.aichi.jp\0" +"webhop.net\0" +"sanjo.niigata.jp\0eastcoast.museum\0" +"re.it\0h\xc3\xb8yanger.no\0" +"kuchinotsu.nagasaki.jp\0" +"zara\0" +"okagaki.fukuoka.jp\0" +"date.fukushima.jp\0" +"accident-prevention.aero\0design.aero\0" +"kyoto.jp\0homesense\0piaget\0wme\0" +"hanyu.saitama.jp\0nuremberg.museum\0utah.museum\0" +"historichouses.museum\0" +"moscow.museum\0stateofdelaware.museum\0" +"from-al.com\0" +"denmark.museum\0" +"sukumo.kochi.jp\0" +"nexus\0" +"trentino-altoadige.it\0" +"smile\0" +"iwama.ibaraki.jp\0karikatur.museum\0\xe6\x9b\xb8\xe7\xb1\x8d\0" +"re.kr\0" +"suisse.museum\0" +"from-ca.com\0" +"usantiques.museum\0" +"vyatka.ru\0\xe5\x8f\xb0\xe7\x81\xa3\0guge\0" +"\xce\xb5\xce\xbb\0" +"yusui.kagoshima.jp\0sytes.net\0" +"shimotsuke.tochigi.jp\0" +"k12.oh.us\0stufftoread.com\0" +"hikimi.shimane.jp\0" +"qc.com\0googleapis.com\0" +"goodyear\0" +"nalchik.ru\0" +"desi\0" +"bremanger.no\0" +"chuo.tokyo.jp\0" +"wow\0" +"christmas\0cricket\0" +"kchr.ru\0" +"bale.museum\0" +"nalchik.su\0" +"ogawa.ibaraki.jp\0" +"toda.saitama.jp\0\xe0\xae\x87\xe0\xae\xb2\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x88\0surgery\0" +"kita.kyoto.jp\0gjesdal.no\0energy\0" +"zachpomor.pl\0" +"\xe8\xb4\xad\xe7\x89\xa9\0" +"tydal.no\0wielun.pl\0" +"otaki.nagano.jp\0" +"sasayama.hyogo.jp\0fed.us\0" +"cc.tn.us\0" +"cc.il.us\0" +"motoyama.kochi.jp\0broadcast.museum\0cc.dc.us\0" +"suwa.nagano.jp\0" +"voagat.no\0" +"off.ai\0nagara.chiba.jp\0" +"rg.it\0\xe0\xb8\x84\xe0\xb8\xad\xe0\xb8\xa1\0" +"os.hordaland.no\0hu.net\0" +"ge.it\0" +"al.it\0" +"olecko.pl\0" +"shibukawa.gunma.jp\0" +"bergamo.it\0" +"mielno.pl\0ga.us\0" }; static const quint16 tldChunkCount = 2; -static const quint32 tldChunks[] = {65528, 84704}; +static const quint32 tldChunks[] = {65512, 93761}; QT_END_NAMESPACE diff --git a/src/corelib/io/qurltlds_p.h.INFO b/src/corelib/io/qurltlds_p.h.INFO index 7e5c0bb19f..3f3d808a21 100644 --- a/src/corelib/io/qurltlds_p.h.INFO +++ b/src/corelib/io/qurltlds_p.h.INFO @@ -9,8 +9,8 @@ Those arrays in qurltlds_p.h are derived from the Public Suffix List ([2]), which was originally provided by Jo Hermans <jo.hermans@gmail.com>. -The file qurltlds_p.h was last generated Wednesday, -February 11th 14:36 2015. +The file qurltlds_p.h was last generated Thursday, +October 20th 8:40 2016. ---- [1] list: http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1 diff --git a/src/corelib/json/qjsondocument.cpp b/src/corelib/json/qjsondocument.cpp index 86fd63ead4..ed454d5442 100644 --- a/src/corelib/json/qjsondocument.cpp +++ b/src/corelib/json/qjsondocument.cpp @@ -260,22 +260,28 @@ QJsonDocument QJsonDocument::fromBinaryData(const QByteArray &data, DataValidati Creates a QJsonDocument from the QVariant \a variant. If the \a variant contains any other type than a QVariantMap, - QVariantHash, QVariantList or QStringList, the returned document - document is invalid. + QVariantHash, QVariantList or QStringList, the returned document is invalid. \sa toVariant() */ QJsonDocument QJsonDocument::fromVariant(const QVariant &variant) { QJsonDocument doc; - if (variant.type() == QVariant::Map) { + switch (variant.type()) { + case QVariant::Map: doc.setObject(QJsonObject::fromVariantMap(variant.toMap())); - } else if (variant.type() == QVariant::Hash) { + break; + case QVariant::Hash: doc.setObject(QJsonObject::fromVariantHash(variant.toHash())); - } else if (variant.type() == QVariant::List) { + break; + case QVariant::List: doc.setArray(QJsonArray::fromVariantList(variant.toList())); - } else if (variant.type() == QVariant::StringList) { + break; + case QVariant::StringList: doc.setArray(QJsonArray::fromStringList(variant.toStringList())); + break; + default: + break; } return doc; } @@ -344,10 +350,9 @@ QByteArray QJsonDocument::toJson() const #ifndef QT_JSON_READONLY QByteArray QJsonDocument::toJson(JsonFormat format) const { - if (!d) - return QByteArray(); - QByteArray json; + if (!d) + return json; if (d->header->root()->isArray()) QJsonPrivate::Writer::arrayToJson(static_cast<QJsonPrivate::Array *>(d->header->root()), json, 0, (format == Compact)); diff --git a/src/corelib/kernel/QEVENTDISPATCHER_CF_LICENSE.txt b/src/corelib/kernel/QEVENTDISPATCHER_CF_LICENSE.txt new file mode 100644 index 0000000000..8c08f48528 --- /dev/null +++ b/src/corelib/kernel/QEVENTDISPATCHER_CF_LICENSE.txt @@ -0,0 +1,29 @@ +Copyright (c) 2007-2008, Apple, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name of Apple, Inc. nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/src/corelib/kernel/kernel.pri b/src/corelib/kernel/kernel.pri index a78397e46c..7799113d30 100644 --- a/src/corelib/kernel/kernel.pri +++ b/src/corelib/kernel/kernel.pri @@ -140,14 +140,12 @@ nacl { unix|integrity { SOURCES += \ kernel/qcore_unix.cpp \ - kernel/qcrashhandler.cpp \ kernel/qeventdispatcher_unix.cpp \ kernel/qtimerinfo_unix.cpp !darwin|nacl: SOURCES += kernel/qelapsedtimer_unix.cpp HEADERS += \ kernel/qcore_unix_p.h \ - kernel/qcrashhandler_p.h \ kernel/qeventdispatcher_unix_p.h \ kernel/qpoll_p.h \ kernel/qtimerinfo_unix_p.h diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp index adefea4f09..a4a4e50f10 100644 --- a/src/corelib/kernel/qcoreapplication.cpp +++ b/src/corelib/kernel/qcoreapplication.cpp @@ -1004,7 +1004,7 @@ bool QCoreApplication::notifyInternal2(QObject *receiver, QEvent *event) approaches are listed below: \list 1 \li Reimplementing \l {QWidget::}{paintEvent()}, \l {QWidget::}{mousePressEvent()} and so - on. This is the commonest, easiest, and least powerful way. + on. This is the most common, easiest, and least powerful way. \li Reimplementing this function. This is very powerful, providing complete control; but only one subclass can be active at a time. diff --git a/src/corelib/kernel/qcrashhandler.cpp b/src/corelib/kernel/qcrashhandler.cpp deleted file mode 100644 index 46bb8b7c11..0000000000 --- a/src/corelib/kernel/qcrashhandler.cpp +++ /dev/null @@ -1,421 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtCore module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** 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 Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** 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-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/************************************************************************* - * - * stacktrace.c 1.2 1998/12/21 - * - * Copyright (c) 1998 by Bjorn Reese <breese@imada.ou.dk> - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND - * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER. - * - ************************************************************************/ - -#include "qplatformdefs.h" -#include "private/qcrashhandler_p.h" -#include "qbytearray.h" // for qvsnprintf() - -#ifndef QT_NO_CRASHHANDLER - -#include <stdio.h> -#include <signal.h> -#include <stdlib.h> - -QT_BEGIN_NAMESPACE - -QtCrashHandler QSegfaultHandler::callback = 0; - -#if defined(__GLIBC__) && (__GLIBC__ >= 2) && !defined(__UCLIBC__) && !defined(QT_LINUXBASE) -QT_BEGIN_INCLUDE_NAMESPACE -# include "qstring.h" -# include <execinfo.h> -QT_END_INCLUDE_NAMESPACE - -static void print_backtrace(FILE *outb) -{ - void *stack[128]; - int stack_size = backtrace(stack, sizeof(stack) / sizeof(void *)); - char **stack_symbols = backtrace_symbols(stack, stack_size); - fprintf(outb, "Stack [%d]:\n", stack_size); - if(FILE *cppfilt = popen("c++filt", "rw")) { - dup2(fileno(outb), fileno(cppfilt)); - for(int i = stack_size-1; i>=0; --i) - fwrite(stack_symbols[i], 1, strlen(stack_symbols[i]), cppfilt); - pclose(cppfilt); - } else { - for(int i = stack_size-1; i>=0; --i) - fprintf(outb, "#%d %p [%s]\n", i, stack[i], stack_symbols[i]); - } -} -static void init_backtrace(char **, int) -{ -} - -#else /* Don't use the GLIBC callback */ -/* Code sourced from: */ -QT_BEGIN_INCLUDE_NAMESPACE -#include <stdarg.h> -#include <string.h> -#include <errno.h> -#include <sys/types.h> -#include <sys/wait.h> -#if defined(Q_OS_IRIX) && defined(USE_LIBEXC) -# include <libexc.h> -#endif -QT_END_INCLUDE_NAMESPACE - - -static char *globalProgName = NULL; -static bool backtrace_command(FILE *outb, const char *format, ...) -{ - - bool ret = false; - char buffer[50]; - - /* - * Please note that vsnprintf() is not ASync safe (ie. cannot safely - * be used from a signal handler.) If this proves to be a problem - * then the cmd string can be built by more basic functions such as - * strcpy, strcat, and a home-made integer-to-ascii function. - */ - va_list args; - char cmd[512]; - va_start(args, format); - qvsnprintf(cmd, 512, format, args); - va_end(args); - - char *foo = cmd; -#if 0 - foo = "echo hi"; -#endif - if(FILE *inb = popen(foo, "r")) { - while(!feof(inb)) { - int len = fread(buffer, 1, sizeof(buffer), inb); - if(!len) - break; - if(!ret) { - fwrite("Output from ", 1, strlen("Output from "), outb); - strtok(cmd, " "); - fwrite(cmd, 1, strlen(cmd), outb); - fwrite("\n", 1, 1, outb); - ret = true; - } - fwrite(buffer, 1, len, outb); - } - fclose(inb); - } - return ret; -} - -static void init_backtrace(char **argv, int argc) -{ - if(argc >= 1) - globalProgName = argv[0]; -} - -static void print_backtrace(FILE *outb) -{ - /* - * In general dbx seems to do a better job than gdb. - * - * Different dbx implementations require different flags/commands. - */ -#if defined(Q_OS_AIX) - if(backtrace_command(outb, "dbx -a %d 2>/dev/null <<EOF\n" - "where\n" - "detach\n" - "EOF\n", - (int)getpid())) - return; - if(backtrace_command(outb, "gdb -q %s %d 2>/dev/null <<EOF\n" - "set prompt\n" - "where\n" - "detach\n" - "quit\n" - "EOF\n", - globalProgName, (int)getpid())) - return; -#elif defined(Q_OS_FREEBSD) - /* - * FreeBSD insists on sending a SIGSTOP to the process we - * attach to, so we let the debugger send a SIGCONT to that - * process after we have detached. - */ - if(backtrace_command(outb, "gdb -q %s %d 2>/dev/null <<EOF\n" - "set prompt\n" - "where\n" - "detach\n" - "shell kill -CONT %d\n" - "quit\n" - "EOF\n", - globalProgName, (int)getpid(), (int)getpid())) - return; -#elif defined(Q_OS_HPUX) - /* - * HP decided to call their debugger xdb. - * - * This does not seem to work properly yet. The debugger says - * "Note: Stack traces may not be possible until you are - * stopped in user code." on HP-UX 09.01 - * - * -L = line-oriented interface. - * "T [depth]" gives a stacktrace with local variables. - * The final "y" is confirmation to the quit command. - */ - if(backtrace_command(outb, "xdb -P %d -L %s 2>&1 <<EOF\n" - "T 50\n" - "q\ny\n" - "EOF\n", - (int)getpid(), globalProgName)) - return; - if(backtrace_command(outb, "gdb -q %s %d 2>/dev/null <<EOF\n" - "set prompt\n" - "where\n" - "detach\n" - "quit\n" - "EOF\n", - globalProgName, (int)getpid())) - return; -#elif defined(Q_OS_IRIX) - /* - * "set $page=0" drops hold mode - * "dump ." displays the contents of the variables - */ - if(backtrace_command(outb, "dbx -p %d 2>/dev/null <<EOF\n" - "set \\$page=0\n" - "where\n" -# if !defined(__GNUC__) - /* gcc does not generate this information */ - "dump .\n" -# endif - "detach\n" - "EOF\n", - (int)getpid())) - return; - -# if defined(USE_LIBEXC) - if(trace_back_stack_and_print()) - return; -# endif - if(backtrace_command(outb, "gdb -q %s %d 2>/dev/null <<EOF\n" - "set prompt\n" - "where\n" - "echo ---\\n\n" - "frame 5\n" /* Skip signal handler frames */ - "set \\$x = 50\n" - "while (\\$x)\n" /* Print local variables for each frame */ - "info locals\n" - "up\n" - "set \\$x--\n" - "end\n" - "echo ---\\n\n" - "detach\n" - "quit\n" - "EOF\n", - globalProgName, (int)getpid())) - return; -#elif defined(Q_OS_OSF) - if(backtrace_command(outb, "dbx -pid %d %s 2>/dev/null <<EOF\n" - "where\n" - "detach\n" - "quit\n" - "EOF\n", - (int)getpid(), globalProgName)) - return; - if(backtrace_command(outb, "gdb -q %s %d 2>/dev/null <<EOF\n" - "set prompt\n" - "where\n" - "detach\n" - "quit\n" - "EOF\n", - globalProgName, (int)getpid())) - return; -#elif defined(Q_OS_SCO) - /* - * SCO OpenServer dbx is like a catch-22. The 'detach' command - * depends on whether ptrace(S) support detaching or not. If it - * is supported then 'detach' must be used, otherwise the process - * will be killed upon dbx exit. If it isn't supported then 'detach' - * will cause the process to be killed. We do not want it to be - * killed. - * - * Out of two evils, the omission of 'detach' was chosen because - * it worked on our system. - */ - if(backtrace_command(outb, "dbx %s %d 2>/dev/null <<EOF\n" - "where\n" - "quit\nEOF\n", - globalProgName, (int)getpid())) - return; - if(backtrace_command(outb, "gdb -q %s %d 2>/dev/null <<EOF\n" - "set prompt\n" - "where\n" - "detach\n" - "quit\n" - "EOF\n", - globalProgName, (int)getpid())) - return; -#elif defined(Q_OS_SOLARIS) - if(backtrace_command(outb, "dbx %s %d 2>/dev/null <<EOF\n" - "where\n" - "detach\n" - "EOF\n", - globalProgName, (int)getpid())) - return; - if(backtrace_command(outb, "gdb -q %s %d 2>/dev/null <<EOF\n" - "set prompt\n" - "where\n" - "echo ---\\n\n" - "frame 5\n" /* Skip signal handler frames */ - "set \\$x = 50\n" - "while (\\$x)\n" /* Print local variables for each frame */ - "info locals\n" - "up\n" - "set \\$x--\n" - "end\n" - "echo ---\\n\n" - "detach\n" - "quit\n" - "EOF\n", - globalProgName, (int)getpid())) - return; - if(backtrace_command(outb, "/usr/proc/bin/pstack %d", - (int)getpid())) - return; - /* - * Other Unices (AIX, HPUX, SCO) also have adb, but - * they seem unable to attach to a running process.) - */ - if(backtrace_command(outb, "adb %s 2>&1 <<EOF\n" - "0t%d:A\n" /* Attach to pid */ - "\\$c\n" /* print stacktrace */ - ":R\n" /* Detach */ - "\\$q\n" /* Quit */ - "EOF\n", - globalProgName, (int)getpid())) - return; -#elif defined(Q_OS_INTEGRITY) - /* abort */ - CheckSuccess(Failure); -#else /* All other platforms */ - /* - * TODO: SCO/UnixWare 7 must be something like (not tested) - * debug -i c <pid> <<EOF\nstack -f 4\nquit\nEOF\n - */ -# if !defined(__GNUC__) - if(backtrace_command(outb, "dbx %s %d 2>/dev/null <<EOF\n" - "where\n" - "detach\n" - "EOF\n", - globalProgName, (int)getpid())) - return; -# endif - if(backtrace_command(outb, "gdb -q %s %d 2>/dev/null <<EOF\n" - "set prompt\n" - "where\n" -#if 0 - "echo ---\\n\n" - "frame 4\n" - "set \\$x = 50\n" - "while (\\$x)\n" - "info locals\n" - "up\n" - "set \\$x--\n" - "end\n" - "echo ---\\n\n" -#endif - "detach\n" - "quit\n" - "EOF\n", - globalProgName, (int)getpid())) - return; -#endif - const char debug_err[] = "No debugger found\n"; - fwrite(debug_err, strlen(debug_err), 1, outb); -} -/* end of copied code */ -#endif - - -void qt_signal_handler(int sig) -{ - signal(sig, SIG_DFL); - if(QSegfaultHandler::callback) { - (*QSegfaultHandler::callback)(); - _exit(1); - } - FILE *outb = stderr; - if(char *crash_loc = ::getenv("QT_CRASH_OUTPUT")) { - if(FILE *new_outb = fopen(crash_loc, "w")) { - fprintf(stderr, "Crash (backtrace written to %s)!!!\n", crash_loc); - outb = new_outb; - } - } else { - fprintf(outb, "Crash!!!\n"); - } - print_backtrace(outb); - if(outb != stderr) - fclose(outb); - _exit(1); -} - - -void -QSegfaultHandler::initialize(char **argv, int argc) -{ - init_backtrace(argv, argc); - - struct sigaction SignalAction; - SignalAction.sa_flags = 0; - SignalAction.sa_handler = qt_signal_handler; - sigemptyset(&SignalAction.sa_mask); - sigaction(SIGSEGV, &SignalAction, NULL); - sigaction(SIGBUS, &SignalAction, NULL); -} - -QT_END_NAMESPACE - -#endif // QT_NO_CRASHHANDLER diff --git a/src/corelib/kernel/qt_attribution.json b/src/corelib/kernel/qt_attribution.json new file mode 100644 index 0000000000..37764a5330 --- /dev/null +++ b/src/corelib/kernel/qt_attribution.json @@ -0,0 +1,13 @@ +{ + "Id": "qeventdispatcher_cf", + "Name": "QEventDispatcher on macOS", + "QDocModule": "qtcore", + "QtUsage": "Used in Qt Core on macOS.", + "Path": "qeventdispatcher_cf_p.h", + + "Description": "Implementation of QAbstractEventDispatcher for macOS.", + "License": "BSD 3-clause \"New\" or \"Revised\" License", + "LicenseId": "BSD-3-Clause", + "LicenseFile": "QEVENTDISPATCHER_CF_LICENSE.txt", + "Copyright": "Copyright (c) 2007-2008, Apple, Inc." +} diff --git a/src/corelib/kernel/qtimer.cpp b/src/corelib/kernel/qtimer.cpp index 6d39233aa7..4a5738a6dc 100644 --- a/src/corelib/kernel/qtimer.cpp +++ b/src/corelib/kernel/qtimer.cpp @@ -533,7 +533,7 @@ void QTimer::singleShot(int msec, Qt::TimerType timerType, const QObject *receiv */ /*! - \fn void QTimer::singleShot(std::chrono::duration<Rep, Period> value, const QObject *receiver, const char *member) + \fn void QTimer::singleShot(std::chrono::milliseconds msec, const QObject *receiver, const char *member) \since 5.8 \overload \reentrant @@ -545,13 +545,13 @@ void QTimer::singleShot(int msec, Qt::TimerType timerType, const QObject *receiv create a local QTimer object. The \a receiver is the receiving object and the \a member is the slot. The - time interval is given in the duration object \a value. + time interval is given in the duration object \a msec. \sa start() */ /*! - \fn void QTimer::singleShot(std::chrono::duration<Rep, Period> value, Qt::TimerType timerType, const QObject *receiver, const char *member) + \fn void QTimer::singleShot(std::chrono::milliseconds msec, Qt::TimerType timerType, const QObject *receiver, const char *member) \since 5.8 \overload \reentrant @@ -563,18 +563,18 @@ void QTimer::singleShot(int msec, Qt::TimerType timerType, const QObject *receiv create a local QTimer object. The \a receiver is the receiving object and the \a member is the slot. The - time interval is given in the duration object \a value. The \a timerType affects the + time interval is given in the duration object \a msec. The \a timerType affects the accuracy of the timer. \sa start() */ /*! - \fn void QTimer::start(std::chrono::duration<Rep, Period> value) + \fn void QTimer::start(std::chrono::milliseconds msec) \since 5.8 \overload - Starts or restarts the timer with a timeout of duration \a value. + Starts or restarts the timer with a timeout of duration \a msec milliseconds. If the timer is already running, it will be \l{QTimer::stop()}{stopped} and restarted. diff --git a/src/corelib/kernel/qtimer.h b/src/corelib/kernel/qtimer.h index 1567fe760c..4f934d0367 100644 --- a/src/corelib/kernel/qtimer.h +++ b/src/corelib/kernel/qtimer.h @@ -165,38 +165,40 @@ Q_SIGNALS: public: #if QT_HAS_INCLUDE(<chrono>) || defined(Q_QDOC) - template <class Rep, class Period> - void setInterval(std::chrono::duration<Rep, Period> value) + Q_ALWAYS_INLINE + void setInterval(std::chrono::milliseconds value) { - setInterval(std::chrono::duration_cast<std::chrono::milliseconds>(value).count()); + setInterval(value.count()); } + Q_ALWAYS_INLINE std::chrono::milliseconds intervalAsDuration() const { return std::chrono::milliseconds(interval()); } + Q_ALWAYS_INLINE std::chrono::milliseconds remainingTimeAsDuration() const { return std::chrono::milliseconds(remainingTime()); } - template <class Rep, class Period> - static void singleShot(std::chrono::duration<Rep, Period> value, const QObject *receiver, const char *member) + Q_ALWAYS_INLINE + static void singleShot(std::chrono::milliseconds value, const QObject *receiver, const char *member) { - singleShot(int(std::chrono::duration_cast<std::chrono::milliseconds>(value).count()), receiver, member); + singleShot(int(value.count()), receiver, member); } - template <class Rep, class Period> - static void singleShot(std::chrono::duration<Rep, Period> value, Qt::TimerType timerType, const QObject *receiver, const char *member) + Q_ALWAYS_INLINE + static void singleShot(std::chrono::milliseconds value, Qt::TimerType timerType, const QObject *receiver, const char *member) { - singleShot(int(std::chrono::duration_cast<std::chrono::milliseconds>(value).count()), timerType, receiver, member); + singleShot(int(value.count()), timerType, receiver, member); } - template <class Rep, class Period> - void start(std::chrono::duration<Rep, Period> value) + Q_ALWAYS_INLINE + void start(std::chrono::milliseconds value) { - start(int(std::chrono::duration_cast<std::chrono::milliseconds>(value).count())); + start(int(value.count())); } #endif @@ -215,15 +217,13 @@ private: const QObject *receiver, QtPrivate::QSlotObjectBase *slotObj); #if QT_HAS_INCLUDE(<chrono>) - template <class Rep, class Period> - static Qt::TimerType defaultTypeFor(std::chrono::duration<Rep, Period> interval) - { return defaultTypeFor(int(std::chrono::duration_cast<std::chrono::milliseconds>(interval).count())); } + static Qt::TimerType defaultTypeFor(std::chrono::milliseconds interval) + { return defaultTypeFor(int(interval.count())); } - template <class Rep, class Period> - static void singleShotImpl(std::chrono::duration<Rep, Period> interval, Qt::TimerType timerType, + static void singleShotImpl(std::chrono::milliseconds interval, Qt::TimerType timerType, const QObject *receiver, QtPrivate::QSlotObjectBase *slotObj) { - singleShotImpl(int(std::chrono::duration_cast<std::chrono::milliseconds>(interval).count()), + singleShotImpl(int(interval.count()), timerType, receiver, slotObj); } #endif diff --git a/src/corelib/mimetypes/qmimeprovider.cpp b/src/corelib/mimetypes/qmimeprovider.cpp index e9996c204d..65b011b439 100644 --- a/src/corelib/mimetypes/qmimeprovider.cpp +++ b/src/corelib/mimetypes/qmimeprovider.cpp @@ -712,6 +712,10 @@ QMimeXMLProvider::QMimeXMLProvider(QMimeDatabasePrivate *db) initResources(); } +QMimeXMLProvider::~QMimeXMLProvider() +{ +} + bool QMimeXMLProvider::isValid() { return true; diff --git a/src/corelib/mimetypes/qmimeprovider_p.h b/src/corelib/mimetypes/qmimeprovider_p.h index b6028191f7..e6fc47bf80 100644 --- a/src/corelib/mimetypes/qmimeprovider_p.h +++ b/src/corelib/mimetypes/qmimeprovider_p.h @@ -138,6 +138,7 @@ class QMimeXMLProvider : public QMimeProviderBase { public: QMimeXMLProvider(QMimeDatabasePrivate *db); + ~QMimeXMLProvider(); virtual bool isValid() Q_DECL_OVERRIDE; virtual QMimeType mimeTypeForName(const QString &name) Q_DECL_OVERRIDE; diff --git a/src/corelib/thread/qorderedmutexlocker_p.h b/src/corelib/thread/qorderedmutexlocker_p.h index 81c7c5268c..ded102d32d 100644 --- a/src/corelib/thread/qorderedmutexlocker_p.h +++ b/src/corelib/thread/qorderedmutexlocker_p.h @@ -89,8 +89,8 @@ public: void unlock() { if (locked) { - if (mtx1) mtx1->unlock(); if (mtx2) mtx2->unlock(); + if (mtx1) mtx1->unlock(); locked = false; } } @@ -100,7 +100,7 @@ public: // mtx1 is already locked, mtx2 not... do we need to unlock and relock? if (mtx1 == mtx2) return false; - if (mtx1 < mtx2) { + if (std::less<QMutex *>()(mtx1, mtx2)) { mtx2->lock(); return true; } diff --git a/src/corelib/tools/CLDR_LICENSE.txt b/src/corelib/tools/CLDR_LICENSE.txt new file mode 100644 index 0000000000..ad28161436 --- /dev/null +++ b/src/corelib/tools/CLDR_LICENSE.txt @@ -0,0 +1,31 @@ +Copyright © 1991-2016 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in http://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. diff --git a/src/corelib/tools/qalgorithms.h b/src/corelib/tools/qalgorithms.h index 6e472e8b22..038f4149c3 100644 --- a/src/corelib/tools/qalgorithms.h +++ b/src/corelib/tools/qalgorithms.h @@ -42,6 +42,10 @@ #include <QtCore/qglobal.h> +#if defined(Q_CC_MSVC) +#include <intrin.h> +#endif + QT_BEGIN_NAMESPACE QT_WARNING_PUSH QT_WARNING_DISABLE_GCC("-Wdeprecated-declarations") diff --git a/src/corelib/tools/qdatetime.cpp b/src/corelib/tools/qdatetime.cpp index 50b9f0decb..896b4a3840 100644 --- a/src/corelib/tools/qdatetime.cpp +++ b/src/corelib/tools/qdatetime.cpp @@ -873,6 +873,7 @@ QString QDate::toString(Qt::DateFormat format) const return toStringTextDate(*this); #endif case Qt::ISODate: + case Qt::ISODateWithMs: return toStringIsoDate(jd); } } @@ -1569,7 +1570,9 @@ int QTime::msec() const If \a format is Qt::ISODate, the string format corresponds to the ISO 8601 extended specification for representations of dates, - which is also HH:mm:ss. + represented by HH:mm:ss. To include milliseconds in the ISO 8601 + date, use the \a format Qt::ISODateWithMs, which corresponds to + HH:mm:ss.zzz. If the \a format is Qt::SystemLocaleShortDate or Qt::SystemLocaleLongDate, the string format depends on the locale @@ -1611,6 +1614,8 @@ QString QTime::toString(Qt::DateFormat format) const return QLocale().toString(*this, QLocale::ShortFormat); case Qt::DefaultLocaleLongDate: return QLocale().toString(*this, QLocale::LongFormat); + case Qt::ISODateWithMs: + return QString::asprintf("%02d:%02d:%02d.%03d", hour(), minute(), second(), msec()); case Qt::RFC2822Date: case Qt::ISODate: case Qt::TextDate: @@ -1642,9 +1647,11 @@ QString QTime::toString(Qt::DateFormat format) const \row \li z \li the milliseconds without leading zeroes (0 to 999) \row \li zzz \li the milliseconds with leading zeroes (000 to 999) \row \li AP or A - \li use AM/PM display. \e A/AP will be replaced by either "AM" or "PM". + \li use AM/PM display. \e A/AP will be replaced by either + QLocale::amText() or QLocale::pmText(). \row \li ap or a - \li use am/pm display. \e a/ap will be replaced by either "am" or "pm". + \li use am/pm display. \e a/ap will be replaced by a lower-case version of + QLocale::amText() or QLocale::pmText(). \row \li t \li the timezone (for example "CEST") \endtable @@ -1653,7 +1660,8 @@ QString QTime::toString(Qt::DateFormat format) const expression. Two consecutive single quotes ("''") are replaced by a singlequote in the output. Formats without separators (e.g. "HHmm") are currently not supported. - Example format strings (assuming that the QTime is 14:13:09.042) + Example format strings (assuming that the QTime is 14:13:09.042 and the system + locale is \c{en_US}) \table \header \li Format \li Result @@ -1917,7 +1925,8 @@ static QTime fromIsoTimeString(const QStringRef &string, Qt::DateFormat format, } } - if (format == Qt::ISODate && hour == 24 && minute == 0 && second == 0 && msec == 0) { + const bool isISODate = format == Qt::ISODate || format == Qt::ISODateWithMs; + if (isISODate && hour == 24 && minute == 0 && second == 0 && msec == 0) { if (isMidnight24) *isMidnight24 = true; hour = 0; @@ -1959,6 +1968,7 @@ QTime QTime::fromString(const QString& string, Qt::DateFormat format) case Qt::RFC2822Date: return rfcDateImpl(string).time; case Qt::ISODate: + case Qt::ISODateWithMs: case Qt::TextDate: default: return fromIsoTimeString(&string, format, 0); @@ -3715,7 +3725,9 @@ void QDateTime::setTime_t(uint secsSince1Jan1970UTC) depending on the timeSpec() of the QDateTime. If the timeSpec() is Qt::UTC, Z will be appended to the string; if the timeSpec() is Qt::OffsetFromUTC, the offset in hours and minutes from UTC will - be appended to the string. + be appended to the string. To include milliseconds in the ISO 8601 + date, use the \a format Qt::ISODateWithMs, which corresponds to + YYYY-MM-DDTHH:mm:ss.zzz[Z|[+|-]HH:mm]. If the \a format is Qt::SystemLocaleShortDate or Qt::SystemLocaleLongDate, the string format depends on the locale @@ -3786,7 +3798,8 @@ QString QDateTime::toString(Qt::DateFormat format) const return buf; } #endif - case Qt::ISODate: { + case Qt::ISODate: + case Qt::ISODateWithMs: { const QPair<QDate, QTime> p = getDateTime(d); const QDate &dt = p.first; const QTime &tm = p.second; @@ -3794,7 +3807,7 @@ QString QDateTime::toString(Qt::DateFormat format) const if (buf.isEmpty()) return QString(); // failed to convert buf += QLatin1Char('T'); - buf += tm.toString(Qt::ISODate); + buf += tm.toString(format); switch (getSpec(d)) { case Qt::UTC: buf += QLatin1Char('Z'); @@ -4653,7 +4666,8 @@ QDateTime QDateTime::fromString(const QString& string, Qt::DateFormat format) dateTime.setOffsetFromUtc(rfc.utcOffset); return dateTime; } - case Qt::ISODate: { + case Qt::ISODate: + case Qt::ISODateWithMs: { const int size = string.size(); if (size < 10) return QDateTime(); @@ -4701,7 +4715,7 @@ QDateTime QDateTime::fromString(const QString& string, Qt::DateFormat format) // Might be end of day (24:00, including variants), which QTime considers invalid. // ISO 8601 (section 4.2.3) says that 24:00 is equivalent to 00:00 the next day. bool isMidnight24 = false; - QTime time = fromIsoTimeString(isoString, Qt::ISODate, &isMidnight24); + QTime time = fromIsoTimeString(isoString, format, &isMidnight24); if (!time.isValid()) return QDateTime(); if (isMidnight24) diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp index c25ee5ffbe..ca04c2bd44 100644 --- a/src/corelib/tools/qlocale.cpp +++ b/src/corelib/tools/qlocale.cpp @@ -1072,20 +1072,14 @@ QLocale::Country QLocale::country() const QString QLocale::name() const { Language l = language(); - - QString result = d->languageCode(); - if (l == C) - return result; + return d->languageCode(); Country c = country(); if (c == AnyCountry) - return result; - - result.append(QLatin1Char('_')); - result.append(d->countryCode()); + return d->languageCode(); - return result; + return d->languageCode() + QLatin1Char('_') + d->countryCode(); } static qlonglong toIntegral_helper(const QLocaleData *d, const QChar *data, int len, bool *ok, @@ -2987,12 +2981,14 @@ QString QLocaleData::unsLongLongToString(const QChar zero, const QChar group, } } - for (int i = num_str.length()/* - cnt_thousand_sep*/; i < precision; ++i) - num_str.prepend(base == 10 ? zero : QChar::fromLatin1('0')); + const QChar resultZero = base == 10 ? zero : QChar(QLatin1Char('0')); + const int zeroPadding = precision - num_str.length()/* + cnt_thousand_sep*/; + if (zeroPadding > 0) + num_str.prepend(QString(zeroPadding, resultZero)); if ((flags & ShowBase) && base == 8 - && (num_str.isEmpty() || num_str[0].unicode() != QLatin1Char('0'))) + && (num_str.isEmpty() || num_str.at(0).unicode() != QLatin1Char('0'))) num_str.prepend(QLatin1Char('0')); // LeftAdjusted overrides this flag ZeroPadded. sprintf only padds @@ -3011,8 +3007,8 @@ QString QLocaleData::unsLongLongToString(const QChar zero, const QChar group, else if (base == 2 && flags & ShowBase) num_pad_chars -= 2; - for (int i = 0; i < num_pad_chars; ++i) - num_str.prepend(base == 10 ? zero : QChar::fromLatin1('0')); + if (num_pad_chars > 0) + num_str.prepend(QString(num_pad_chars, resultZero)); } if (flags & CapitalEorX) diff --git a/src/corelib/tools/qlocale.qdoc b/src/corelib/tools/qlocale.qdoc index 88b071e161..d419172356 100644 --- a/src/corelib/tools/qlocale.qdoc +++ b/src/corelib/tools/qlocale.qdoc @@ -94,26 +94,6 @@ QLocale's data is based on Common Locale Data Repository v29. - The double-to-string and string-to-double conversion functions are - covered by the following licenses: - - \legalese - Copyright (c) 1991 by AT&T. - - Permission to use, copy, modify, and distribute this software for any - purpose without fee is hereby granted, provided that this entire notice - is included in all copies of any software which is or includes a copy - or modification of this software and in all copies of the supporting - documentation for such software. - - THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR AT&T MAKES ANY - REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - - This product includes software developed by the University of - California, Berkeley and its contributors. - \sa QString::arg(), QString::toInt(), QString::toDouble(), QInputMethod::locale() */ diff --git a/src/corelib/tools/qregularexpression.cpp b/src/corelib/tools/qregularexpression.cpp index e7f86ddf6b..4a30daa72c 100644 --- a/src/corelib/tools/qregularexpression.cpp +++ b/src/corelib/tools/qregularexpression.cpp @@ -548,7 +548,7 @@ QT_BEGIN_NAMESPACE \inmodule QtCore \reentrant - \brief The QRegularExpressionMatch class provides the results of a matching + \brief The QRegularExpressionMatch class provides the results of matching a QRegularExpression against a string. \since 5.0 diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp index dd57af9f0f..3161c41063 100644 --- a/src/corelib/tools/qstring.cpp +++ b/src/corelib/tools/qstring.cpp @@ -446,6 +446,16 @@ extern "C" int qt_ucstrncmp_mips_dsp_asm(const ushort *a, // Unicode case-sensitive compare two same-sized strings static int ucstrncmp(const QChar *a, const QChar *b, int l) { +#ifdef __OPTIMIZE_SIZE__ + const QChar *end = a + l; + while (a < end) { + if (int diff = (int)a->unicode() - (int)b->unicode()) + return diff; + ++a; + ++b; + } + return 0; +#else #if defined(__mips_dsp) if (l >= 8) { return qt_ucstrncmp_mips_dsp_asm(reinterpret_cast<const ushort*>(a), @@ -473,7 +483,7 @@ static int ucstrncmp(const QChar *a, const QChar *b, int l) - reinterpret_cast<const QChar *>(ptr + distance + idx)->unicode(); } } -# if defined(Q_COMPILER_LAMBDA) && !defined(__OPTIMIZE_SIZE__) +# if defined(Q_COMPILER_LAMBDA) const auto &lambda = [=](int i) -> int { return reinterpret_cast<const QChar *>(ptr)[i].unicode() - reinterpret_cast<const QChar *>(ptr + distance)[i].unicode(); @@ -484,51 +494,50 @@ static int ucstrncmp(const QChar *a, const QChar *b, int l) if (!l) return 0; - union { - const QChar *w; - const quint32 *d; - quintptr value; - } sa, sb; - sa.w = a; - sb.w = b; - // check alignment - if ((sa.value & 2) == (sb.value & 2)) { + if ((reinterpret_cast<quintptr>(a) & 2) == (reinterpret_cast<quintptr>(b) & 2)) { // both addresses have the same alignment - if (sa.value & 2) { + if (reinterpret_cast<quintptr>(a) & 2) { // both addresses are not aligned to 4-bytes boundaries // compare the first character - if (*sa.w != *sb.w) - return sa.w->unicode() - sb.w->unicode(); + if (*a != *b) + return a->unicode() - b->unicode(); --l; - ++sa.w; - ++sb.w; + ++a; + ++b; // now both addresses are 4-bytes aligned } // both addresses are 4-bytes aligned // do a fast 32-bit comparison - const quint32 *e = sa.d + (l >> 1); - for ( ; sa.d != e; ++sa.d, ++sb.d) { - if (*sa.d != *sb.d) { - if (*sa.w != *sb.w) - return sa.w->unicode() - sb.w->unicode(); - return sa.w[1].unicode() - sb.w[1].unicode(); + const quint32 *da = reinterpret_cast<const quint32 *>(a); + const quint32 *db = reinterpret_cast<const quint32 *>(b); + const quint32 *e = da + (l >> 1); + for ( ; da != e; ++da, ++db) { + if (*da != *db) { + a = reinterpret_cast<const QChar *>(da); + b = reinterpret_cast<const QChar *>(db); + if (*a != *b) + return a->unicode() - b->unicode(); + return a[1].unicode() - b[1].unicode(); } } // do we have a tail? - return (l & 1) ? sa.w->unicode() - sb.w->unicode() : 0; + a = reinterpret_cast<const QChar *>(da); + b = reinterpret_cast<const QChar *>(db); + return (l & 1) ? a->unicode() - b->unicode() : 0; } else { // one of the addresses isn't 4-byte aligned but the other is - const QChar *e = sa.w + l; - for ( ; sa.w != e; ++sa.w, ++sb.w) { - if (*sa.w != *sb.w) - return sa.w->unicode() - sb.w->unicode(); + const QChar *e = a + l; + for ( ; a != e; ++a, ++b) { + if (*a != *b) + return a->unicode() - b->unicode(); } } return 0; +#endif } static int ucstrncmp(const QChar *a, const uchar *c, int l) diff --git a/src/corelib/tools/qt_attribution.json b/src/corelib/tools/qt_attribution.json new file mode 100644 index 0000000000..eec2cd6795 --- /dev/null +++ b/src/corelib/tools/qt_attribution.json @@ -0,0 +1,13 @@ +{ + "Id": "cldr-data", + "Name": "Unicode CLDR (Unicode Common Locale Data Repository)", + "QDocModule": "qtcore", + "QtUsage": "Used in Qt Core (QTimeZone). Disable the timezone feature to avoid.", + "Files": "qlocale_data_p.h", + + "Description": "QTimeZone includes data obtained from the CLDR data files.", + "License": "Unicode Data Files and Software License", + "LicenseId": "Unicode-TOU", + "LicenseFile": "CLDR_LICENSE.txt", + "Copyright": "Copyright (C) 1991-2016 Unicode, Inc." +} diff --git a/src/corelib/tools/qtimezone.cpp b/src/corelib/tools/qtimezone.cpp index 63a21ec75c..e423d9af0c 100644 --- a/src/corelib/tools/qtimezone.cpp +++ b/src/corelib/tools/qtimezone.cpp @@ -218,28 +218,8 @@ Q_GLOBAL_STATIC(QTimeZoneSingleton, global_tz); \section2 License This class includes data obtained from the CLDR data files under the terms - of the Unicode license. - - \legalese - COPYRIGHT AND PERMISSION NOTICE - - Copyright © 1991-2012 Unicode, Inc. All rights reserved. Distributed under - the Terms of Use in http://www.unicode.org/copyright.html. - - Permission is hereby granted, free of charge, to any person obtaining a - copy of the Unicode data files and any associated documentation (the "Data - Files") or Unicode software and any associated documentation (the "Software") - to deal in the Data Files or Software without restriction, including without - limitation the rights to use, copy, modify, merge, publish, distribute, and/or - sell copies of the Data Files or Software, and to permit persons to whom the - Data Files or Software are furnished to do so, provided that (a) the above - copyright notice(s) and this permission notice appear with all copies of the - Data Files or Software, (b) both the above copyright notice(s) and this - permission notice appear in associated documentation, and (c) there is clear - notice in each modified Data File or in the Software as well as in the - documentation associated with the Data File(s) or Software that the data or - software has been modified. - \endlegalese + of the Unicode Data Files and Software License. See + \l{Unicode CLDR (Unicode Common Locale Data Repository)} for the details. \sa QDateTime */ diff --git a/src/corelib/tools/tools.pri b/src/corelib/tools/tools.pri index 47b0b2d4be..fb80bbd6b8 100644 --- a/src/corelib/tools/tools.pri +++ b/src/corelib/tools/tools.pri @@ -174,7 +174,7 @@ qtConfig(timezone) { } qtConfig(regularexpression) { - include($$PWD/../../3rdparty/pcre_dependency.pri) + QMAKE_USE_PRIVATE += pcre HEADERS += tools/qregularexpression.h SOURCES += tools/qregularexpression.cpp diff --git a/src/dbus/qdbusabstractinterface.cpp b/src/dbus/qdbusabstractinterface.cpp index eb57ad1816..c90173db76 100644 --- a/src/dbus/qdbusabstractinterface.cpp +++ b/src/dbus/qdbusabstractinterface.cpp @@ -761,18 +761,25 @@ QDBusMessage QDBusAbstractInterface::call(QDBus::CallMode mode, const QString &m switch (count) { case 8: argList.prepend(arg8); + // fall through case 7: argList.prepend(arg7); + // fall through case 6: argList.prepend(arg6); + // fall through case 5: argList.prepend(arg5); + // fall through case 4: argList.prepend(arg4); + // fall through case 3: argList.prepend(arg3); + // fall through case 2: argList.prepend(arg2); + // fall through case 1: argList.prepend(arg1); } @@ -819,18 +826,25 @@ QDBusPendingCall QDBusAbstractInterface::asyncCall(const QString &method, const switch (count) { case 8: argList.prepend(arg8); + // fall through case 7: argList.prepend(arg7); + // fall through case 6: argList.prepend(arg6); + // fall through case 5: argList.prepend(arg5); + // fall through case 4: argList.prepend(arg4); + // fall through case 3: argList.prepend(arg3); + // fall through case 2: argList.prepend(arg2); + // fall through case 1: argList.prepend(arg1); } diff --git a/src/dbus/qdbusserver.cpp b/src/dbus/qdbusserver.cpp index a59496bce8..027ce935d6 100644 --- a/src/dbus/qdbusserver.cpp +++ b/src/dbus/qdbusserver.cpp @@ -110,7 +110,7 @@ QDBusServer::~QDBusServer() QDBusConnectionManager::instance()->removeConnection(name); d->serverConnectionNames.clear(); } - d->serverObject = nullptr; + d->serverObject = Q_NULLPTR; d->ref.store(0); d->deleteLater(); } diff --git a/src/gui/configure.json b/src/gui/configure.json index 318efe5401..f4e2faf08b 100644 --- a/src/gui/configure.json +++ b/src/gui/configure.json @@ -7,6 +7,7 @@ "commandline": { "options": { + "android-style-assets": "boolean", "angle": "boolean", "directfb": "boolean", "directwrite": "boolean", @@ -164,7 +165,6 @@ }, "mirclient": { "label": "Mir client libraries", - "export": "", "test": "qpa/mirclient", "sources": [ { "type": "pkgConfig", "args": "egl mirclient ubuntu-platform-api" } @@ -172,7 +172,6 @@ }, "mtdev": { "label": "mtdev", - "export": "", "test": "unix/mtdev", "sources": [ { "type": "pkgConfig", "args": "mtdev" } @@ -203,7 +202,6 @@ }, "wayland_server": { "label": "Wayland Server", - "export": "", "test": "qpa/wayland-server", "sources": [ { "type": "pkgConfig", "args": "wayland-server" } @@ -414,6 +412,11 @@ "condition": "features.accessibility && features.xcb && features.dbus", "output": [ "privateFeature", "feature" ] }, + "android-style-assets": { + "label": "Android Style Assets", + "condition": "config.android", + "output": [ "privateFeature" ] + }, "angle": { "label": "ANGLE", "autoDetect": "features.opengles2 || features.opengl-dynamic", diff --git a/src/gui/gui.pro b/src/gui/gui.pro index a6eaadd6c5..5f8cbe2cbe 100644 --- a/src/gui/gui.pro +++ b/src/gui/gui.pro @@ -9,6 +9,7 @@ QMAKE_DOCS = $$PWD/doc/qtgui.qdocconf MODULE_PLUGIN_TYPES = \ platforms \ + platforms/darwin \ xcbglintegrations \ platformthemes \ platforminputcontexts \ diff --git a/src/gui/image/image.pri b/src/gui/image/image.pri index 3c4d2c0bbf..bac00f7e95 100644 --- a/src/gui/image/image.pri +++ b/src/gui/image/image.pri @@ -74,7 +74,7 @@ SOURCES += \ qtConfig(png) { HEADERS += image/qpnghandler_p.h SOURCES += image/qpnghandler.cpp - include($$PWD/../../3rdparty/png_dependency.pri) + QMAKE_USE_PRIVATE += libpng } # SIMD diff --git a/src/gui/image/qiconloader_p.h b/src/gui/image/qiconloader_p.h index 583499be76..ed7b7ff7ae 100644 --- a/src/gui/image/qiconloader_p.h +++ b/src/gui/image/qiconloader_p.h @@ -95,7 +95,6 @@ public: QIcon::State state) = 0; QString filename; QIconDirInfo dir; - static int count; }; struct ScalableEntry : public QIconLoaderEngineEntry @@ -124,18 +123,18 @@ public: QIconLoaderEngine(const QString& iconName = QString()); ~QIconLoaderEngine(); - void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state); - QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state); - QSize actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state); - QIconEngine *clone() const; - bool read(QDataStream &in); - bool write(QDataStream &out) const; + void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state) Q_DECL_OVERRIDE; + QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state) Q_DECL_OVERRIDE; + QSize actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state) Q_DECL_OVERRIDE; + QIconEngine *clone() const Q_DECL_OVERRIDE; + bool read(QDataStream &in) Q_DECL_OVERRIDE; + bool write(QDataStream &out) const Q_DECL_OVERRIDE; private: - QString key() const; + QString key() const Q_DECL_OVERRIDE; bool hasIcon() const; void ensureLoaded(); - void virtual_hook(int id, void *data); + void virtual_hook(int id, void *data) Q_DECL_OVERRIDE; QIconLoaderEngineEntry *entryForSize(const QSize &size); QIconLoaderEngine(const QIconLoaderEngine &other); QThemeIconInfo m_info; diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp index 8bbcfa612d..9e911bdcea 100644 --- a/src/gui/image/qimage.cpp +++ b/src/gui/image/qimage.cpp @@ -5062,7 +5062,7 @@ static Q_CONSTEXPR QPixelFormat pixelformats[] = { /*ALPHA USAGE*/ QPixelFormat::IgnoresAlpha, /*ALPHA POSITION*/ QPixelFormat::AtBeginning, /*PREMULTIPLIED*/ QPixelFormat::NotPremultiplied, - /*INTERPRETATION*/ QPixelFormat::UnsignedInteger, + /*INTERPRETATION*/ QPixelFormat::UnsignedByte, /*BYTE ORDER*/ QPixelFormat::CurrentSystemEndian), //QImage::Format_RGB444: QPixelFormat(QPixelFormat::RGB, diff --git a/src/gui/image/qimage_conversions.cpp b/src/gui/image/qimage_conversions.cpp index 9bd098b7b1..c646ee96b4 100644 --- a/src/gui/image/qimage_conversions.cpp +++ b/src/gui/image/qimage_conversions.cpp @@ -930,12 +930,12 @@ static bool convert_indexed8_to_RGB16_inplace(QImageData *data, Qt::ImageConvers const int dest_pad = (dst_bytes_per_line >> 1) - width; quint16 colorTableRGB16[256]; - if (data->colortable.isEmpty()) { + const int tableSize = data->colortable.size(); + if (tableSize == 0) { for (int i = 0; i < 256; ++i) colorTableRGB16[i] = qConvertRgb32To16(qRgb(i, i, i)); } else { // 1) convert the existing colors to RGB16 - const int tableSize = data->colortable.size(); for (int i = 0; i < tableSize; ++i) colorTableRGB16[i] = qConvertRgb32To16(data->colortable.at(i)); data->colortable = QVector<QRgb>(); diff --git a/src/gui/kernel/qclipboard.cpp b/src/gui/kernel/qclipboard.cpp index 21127eebbd..f14355bc01 100644 --- a/src/gui/kernel/qclipboard.cpp +++ b/src/gui/kernel/qclipboard.cpp @@ -425,8 +425,9 @@ void QClipboard::setPixmap(const QPixmap &pixmap, Mode mode) /*! \fn QMimeData *QClipboard::mimeData(Mode mode) const - Returns a reference to a QMimeData representation of the current - clipboard data. + Returns a pointer to a QMimeData representation of the current + clipboard data (can be NULL if the given \a mode is not + supported by the platform). The \a mode argument is used to control which part of the system clipboard is used. If \a mode is QClipboard::Clipboard, the diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index 76386a30a0..14f94951d0 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -352,6 +352,16 @@ void QWindowGeometrySpecification::applyTo(QWindow *window) const static QWindowGeometrySpecification windowGeometrySpecification = Q_WINDOW_GEOMETRY_SPECIFICATION_INITIALIZER; /*! + \macro qGuiApp + \relates QGuiApplication + + A global pointer referring to the unique application object. + Only valid for use when that object is a QGuiApplication. + + \sa QCoreApplication::instance(), qApp +*/ + +/*! \class QGuiApplication \brief The QGuiApplication class manages the GUI application's control flow and main settings. diff --git a/src/gui/kernel/qplatformscreen.cpp b/src/gui/kernel/qplatformscreen.cpp index 3c1552c31e..1d519e84f9 100644 --- a/src/gui/kernel/qplatformscreen.cpp +++ b/src/gui/kernel/qplatformscreen.cpp @@ -342,6 +342,10 @@ void QPlatformScreen::resizeMaximizedWindows() for (int i = 0; i < windows.size(); ++i) { QWindow *w = windows.at(i); + // Skip non-platform windows, e.g., offscreen windows. + if (!w->handle()) + continue; + if (platformScreenForWindow(w) != this) continue; diff --git a/src/gui/kernel/qsurfaceformat.cpp b/src/gui/kernel/qsurfaceformat.cpp index d7dc0faceb..000d727380 100644 --- a/src/gui/kernel/qsurfaceformat.cpp +++ b/src/gui/kernel/qsurfaceformat.cpp @@ -41,6 +41,8 @@ #include <QtCore/qatomic.h> #include <QtCore/QDebug> +#include <QOpenGLContext> +#include <QtGui/qguiapplication.h> #ifdef major #undef major @@ -761,6 +763,16 @@ Q_GLOBAL_STATIC(QSurfaceFormat, qt_default_surface_format) */ void QSurfaceFormat::setDefaultFormat(const QSurfaceFormat &format) { +#ifndef QT_NO_OPENGL + if (qApp) { + QOpenGLContext *globalContext = QOpenGLContext::globalShareContext(); + if (globalContext && globalContext->isValid()) { + qWarning("Warning: Setting a new default format with a different version or profile " + "after the global shared context is created may cause issues with context " + "sharing."); + } + } +#endif *qt_default_surface_format() = format; } diff --git a/src/gui/kernel/qwindowsysteminterface.cpp b/src/gui/kernel/qwindowsysteminterface.cpp index 08aa625112..1f2528dd5c 100644 --- a/src/gui/kernel/qwindowsysteminterface.cpp +++ b/src/gui/kernel/qwindowsysteminterface.cpp @@ -165,11 +165,11 @@ void QWindowSystemInterface::handleEnterLeaveEvent(QWindow *enter, QWindow *leav handleEnterEvent(enter, local, global); } -void QWindowSystemInterface::handleWindowActivated(QWindow *tlw, Qt::FocusReason r) +QT_DEFINE_QPA_EVENT_HANDLER(void, handleWindowActivated, QWindow *tlw, Qt::FocusReason r) { QWindowSystemInterfacePrivate::ActivatedWindowEvent *e = new QWindowSystemInterfacePrivate::ActivatedWindowEvent(tlw, r); - QWindowSystemInterfacePrivate::handleWindowSystemEvent(e); + QWindowSystemInterfacePrivate::handleWindowSystemEvent<Delivery>(e); } void QWindowSystemInterface::handleWindowStateChanged(QWindow *tlw, Qt::WindowState newState) @@ -197,10 +197,25 @@ void QWindowSystemInterface::handleApplicationStateChanged(Qt::ApplicationState /*! If \a oldRect is null, Qt will use the previously reported geometry instead. */ -void QWindowSystemInterface::handleGeometryChange(QWindow *tlw, const QRect &newRect, const QRect &oldRect) +QT_DEFINE_QPA_EVENT_HANDLER(void, handleGeometryChange, QWindow *tlw, const QRect &newRect, const QRect &oldRect) { QWindowSystemInterfacePrivate::GeometryChangeEvent *e = new QWindowSystemInterfacePrivate::GeometryChangeEvent(tlw, QHighDpi::fromNativePixels(newRect, tlw), QHighDpi::fromNativePixels(oldRect, tlw)); - QWindowSystemInterfacePrivate::handleWindowSystemEvent(e); + QWindowSystemInterfacePrivate::handleWindowSystemEvent<Delivery>(e); +} + +QWindowSystemInterfacePrivate::ExposeEvent::ExposeEvent(QWindow *window, const QRegion ®ion) + : WindowSystemEvent(Expose) + , window(window) + , isExposed(window && window->handle() ? window->handle()->isExposed() : false) + , region(region) +{ +} + +QT_DEFINE_QPA_EVENT_HANDLER(void, handleExposeEvent, QWindow *tlw, const QRegion ®ion) +{ + QWindowSystemInterfacePrivate::ExposeEvent *e = + new QWindowSystemInterfacePrivate::ExposeEvent(tlw, QHighDpi::fromNativeLocalExposedRegion(region, tlw)); + QWindowSystemInterfacePrivate::handleWindowSystemEvent<Delivery>(e); } void QWindowSystemInterface::handleCloseEvent(QWindow *tlw, bool *accepted) @@ -405,15 +420,6 @@ void QWindowSystemInterface::handleWheelEvent(QWindow *tlw, ulong timestamp, con QWindowSystemInterfacePrivate::handleWindowSystemEvent(e); } - -QWindowSystemInterfacePrivate::ExposeEvent::ExposeEvent(QWindow *window, const QRegion ®ion) - : WindowSystemEvent(Expose) - , window(window) - , isExposed(window && window->handle() ? window->handle()->isExposed() : false) - , region(region) -{ -} - int QWindowSystemInterfacePrivate::windowSystemEventsQueued() { return windowSystemEventQueue.count(); @@ -634,20 +640,20 @@ QT_DEFINE_QPA_EVENT_HANDLER(void, handleTouchEvent, QWindow *tlw, ulong timestam QWindowSystemInterfacePrivate::handleWindowSystemEvent<Delivery>(e); } -void QWindowSystemInterface::handleTouchCancelEvent(QWindow *w, QTouchDevice *device, +QT_DEFINE_QPA_EVENT_HANDLER(void, handleTouchCancelEvent, QWindow *w, QTouchDevice *device, Qt::KeyboardModifiers mods) { unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed(); - handleTouchCancelEvent(w, time, device, mods); + handleTouchCancelEvent<Delivery>(w, time, device, mods); } -void QWindowSystemInterface::handleTouchCancelEvent(QWindow *w, ulong timestamp, QTouchDevice *device, +QT_DEFINE_QPA_EVENT_HANDLER(void, handleTouchCancelEvent, QWindow *w, ulong timestamp, QTouchDevice *device, Qt::KeyboardModifiers mods) { QWindowSystemInterfacePrivate::TouchEvent *e = new QWindowSystemInterfacePrivate::TouchEvent(w, timestamp, QEvent::TouchCancel, device, QList<QTouchEvent::TouchPoint>(), mods); - QWindowSystemInterfacePrivate::handleWindowSystemEvent(e); + QWindowSystemInterfacePrivate::handleWindowSystemEvent<Delivery>(e); } void QWindowSystemInterface::handleScreenOrientationChange(QScreen *screen, Qt::ScreenOrientation orientation) @@ -684,13 +690,6 @@ void QWindowSystemInterface::handleThemeChange(QWindow *tlw) QWindowSystemInterfacePrivate::handleWindowSystemEvent(e); } -void QWindowSystemInterface::handleExposeEvent(QWindow *tlw, const QRegion ®ion) -{ - QWindowSystemInterfacePrivate::ExposeEvent *e = - new QWindowSystemInterfacePrivate::ExposeEvent(tlw, QHighDpi::fromNativeLocalExposedRegion(region, tlw)); - QWindowSystemInterfacePrivate::handleWindowSystemEvent(e); -} - void QWindowSystemInterface::deferredFlushWindowSystemEvents(QEventLoop::ProcessEventsFlags flags) { Q_ASSERT(QThread::currentThread() == QGuiApplication::instance()->thread()); diff --git a/src/gui/kernel/qwindowsysteminterface.h b/src/gui/kernel/qwindowsysteminterface.h index 6fade3cc4c..3be3c3188c 100644 --- a/src/gui/kernel/qwindowsysteminterface.h +++ b/src/gui/kernel/qwindowsysteminterface.h @@ -150,11 +150,19 @@ public: template<typename Delivery = QWindowSystemInterface::DefaultDelivery> static void handleTouchEvent(QWindow *w, ulong timestamp, QTouchDevice *device, const QList<struct TouchPoint> &points, Qt::KeyboardModifiers mods = Qt::NoModifier); + template<typename Delivery = QWindowSystemInterface::DefaultDelivery> static void handleTouchCancelEvent(QWindow *w, QTouchDevice *device, Qt::KeyboardModifiers mods = Qt::NoModifier); + template<typename Delivery = QWindowSystemInterface::DefaultDelivery> static void handleTouchCancelEvent(QWindow *w, ulong timestamp, QTouchDevice *device, Qt::KeyboardModifiers mods = Qt::NoModifier); // rect is relative to parent + template<typename Delivery = QWindowSystemInterface::DefaultDelivery> static void handleGeometryChange(QWindow *w, const QRect &newRect, const QRect &oldRect = QRect()); + + // region is in local coordinates, do not confuse with geometry which is parent-relative + template<typename Delivery = QWindowSystemInterface::DefaultDelivery> + static void handleExposeEvent(QWindow *tlw, const QRegion ®ion); + static void handleCloseEvent(QWindow *w, bool *accepted = Q_NULLPTR); template<typename Delivery = QWindowSystemInterface::DefaultDelivery> @@ -162,6 +170,7 @@ public: template<typename Delivery = QWindowSystemInterface::DefaultDelivery> static void handleLeaveEvent(QWindow *w); static void handleEnterLeaveEvent(QWindow *enter, QWindow *leave, const QPointF &local = QPointF(), const QPointF& global = QPointF()); + template<typename Delivery = QWindowSystemInterface::DefaultDelivery> static void handleWindowActivated(QWindow *w, Qt::FocusReason r = Qt::OtherFocusReason); static void handleWindowStateChanged(QWindow *w, Qt::WindowState newState); @@ -169,9 +178,6 @@ public: static void handleApplicationStateChanged(Qt::ApplicationState newState, bool forcePropagate = false); - // region is in local coordinates, do not confuse with geometry which is parent-relative - static void handleExposeEvent(QWindow *tlw, const QRegion ®ion); - #ifndef QT_NO_DRAGANDDROP // Drag and drop. These events are sent immediately. static QPlatformDragQtResponse handleDrag(QWindow *w, const QMimeData *dropData, const QPoint &p, Qt::DropActions supportedActions); diff --git a/src/gui/opengl/KHRONOS_LICENSE.txt b/src/gui/opengl/KHRONOS_LICENSE.txt new file mode 100644 index 0000000000..63b1e1f940 --- /dev/null +++ b/src/gui/opengl/KHRONOS_LICENSE.txt @@ -0,0 +1,20 @@ +Copyright (c) 2013-2014 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and/or associated documentation files (the +"Materials"), to deal in the Materials without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Materials, and to +permit persons to whom the Materials are furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Materials. + +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. diff --git a/src/gui/opengl/qopenglframebufferobject.cpp b/src/gui/opengl/qopenglframebufferobject.cpp index e0f469cbcb..4833617377 100644 --- a/src/gui/opengl/qopenglframebufferobject.cpp +++ b/src/gui/opengl/qopenglframebufferobject.cpp @@ -1492,6 +1492,7 @@ bool QOpenGLFramebufferObject::bindDefault() if (ctx) { ctx->functions()->glBindFramebuffer(GL_FRAMEBUFFER, ctx->defaultFramebufferObject()); QOpenGLContextPrivate::get(ctx)->qgl_current_fbo_invalid = true; + QOpenGLContextPrivate::get(ctx)->qgl_current_fbo = Q_NULLPTR; } #ifdef QT_DEBUG else diff --git a/src/gui/opengl/qt_attribution.json b/src/gui/opengl/qt_attribution.json new file mode 100644 index 0000000000..d3ff10d803 --- /dev/null +++ b/src/gui/opengl/qt_attribution.json @@ -0,0 +1,32 @@ +[ + { + "Id": "opengl-headers", + "Name": "OpenGL Headers", + "QDocModule": "qtgui", + "Description": "OpenGL header generated from the Khronos OpenGL / OpenGL ES XML API Registry.", + "QtUsage": "Used on Windows and Linux in the OpenGL related headers of Qt GUI.", + "Path": "qopenglext.h", + + "Homepage": "https://www.khronos.org/", + "Version": "Revision 27684", + "License": "MIT License", + "LicenseId": "MIT", + "LicenseFile": "KHRONOS_LICENSE.txt", + "Copyright": "Copyright (c) 2013-2014 The Khronos Group Inc." + }, + { + "Id": "opengl-es2-headers", + "Name": "OpenGL ES 2 Headers", + "QDocModule": "qtgui", + "Description": "OpenGL ES 2 header generated from the Khronos OpenGL / OpenGL ES XML API Registry.", + "QtUsage": "Used on Windows and Linux in the OpenGL related headers of Qt GUI.", + "Path": "qopengles2ext.h", + + "Homepage": "https://www.khronos.org/", + "Version": "Revision 27673", + "License": "MIT License", + "LicenseId": "MIT", + "LicenseFile": "KHRONOS_LICENSE.txt", + "Copyright": "Copyright (c) 2013-2014 The Khronos Group Inc." + } +] diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp index 928a56fd2f..2716d92d13 100644 --- a/src/gui/painting/qdrawhelper.cpp +++ b/src/gui/painting/qdrawhelper.cpp @@ -836,10 +836,7 @@ static const uint *QT_FASTCALL convertGrayscale8FromARGB32PM(uint *buffer, const } template <QPixelLayout::BPP bpp> static -uint QT_FASTCALL fetchPixel(const uchar *, int) -{ - Q_UNREACHABLE(); -} +uint QT_FASTCALL fetchPixel(const uchar *src, int index); template <> inline uint QT_FASTCALL fetchPixel<QPixelLayout::BPP1LSB>(const uchar *src, int index) @@ -1557,11 +1554,92 @@ static const QRgba64 *QT_FASTCALL fetchUntransformed64(QRgba64 *buffer, const Op } } -template<TextureBlendType blendType, QPixelLayout::BPP bpp> +// blendType is either BlendTransformed or BlendTransformedTiled +template<TextureBlendType blendType> +static const uint *QT_FASTCALL fetchTransformedARGB32PM(uint *buffer, const Operator *, const QSpanData *data, + int y, int x, int length) +{ + int image_width = data->texture.width; + int image_height = data->texture.height; + + const qreal cx = x + qreal(0.5); + const qreal cy = y + qreal(0.5); + + const uint *end = buffer + length; + uint *b = buffer; + if (data->fast_matrix) { + // The increment pr x in the scanline + int fdx = (int)(data->m11 * fixed_scale); + int fdy = (int)(data->m12 * fixed_scale); + + int fx = int((data->m21 * cy + + data->m11 * cx + data->dx) * fixed_scale); + int fy = int((data->m22 * cy + + data->m12 * cx + data->dy) * fixed_scale); + + while (b < end) { + int px = fx >> 16; + int py = fy >> 16; + + if (blendType == BlendTransformedTiled) { + px %= image_width; + py %= image_height; + if (px < 0) px += image_width; + if (py < 0) py += image_height; + } else { + px = qBound(0, px, image_width - 1); + py = qBound(0, py, image_height - 1); + } + *b = reinterpret_cast<const uint *>(data->texture.scanLine(py))[px]; + + fx += fdx; + fy += fdy; + ++b; + } + } else { + const qreal fdx = data->m11; + const qreal fdy = data->m12; + const qreal fdw = data->m13; + + qreal fx = data->m21 * cy + data->m11 * cx + data->dx; + qreal fy = data->m22 * cy + data->m12 * cx + data->dy; + qreal fw = data->m23 * cy + data->m13 * cx + data->m33; + + while (b < end) { + const qreal iw = fw == 0 ? 1 : 1 / fw; + const qreal tx = fx * iw; + const qreal ty = fy * iw; + int px = int(tx) - (tx < 0); + int py = int(ty) - (ty < 0); + + if (blendType == BlendTransformedTiled) { + px %= image_width; + py %= image_height; + if (px < 0) px += image_width; + if (py < 0) py += image_height; + } else { + px = qBound(0, px, image_width - 1); + py = qBound(0, py, image_height - 1); + } + *b = reinterpret_cast<const uint *>(data->texture.scanLine(py))[px]; + + fx += fdx; + fy += fdy; + fw += fdw; + //force increment to avoid /0 + if (!fw) { + fw += fdw; + } + ++b; + } + } + return buffer; +} + +template<TextureBlendType blendType> /* either BlendTransformed or BlendTransformedTiled */ static const uint *QT_FASTCALL fetchTransformed(uint *buffer, const Operator *, const QSpanData *data, int y, int x, int length) { - Q_STATIC_ASSERT(blendType == BlendTransformed || blendType == BlendTransformedTiled); int image_width = data->texture.width; int image_height = data->texture.height; @@ -1569,12 +1647,9 @@ static const uint *QT_FASTCALL fetchTransformed(uint *buffer, const Operator *, const qreal cy = y + qreal(0.5); const QPixelLayout *layout = &qPixelLayouts[data->texture.format]; - if (bpp != QPixelLayout::BPPNone) // Like this to not ICE on GCC 5.3.1 - Q_ASSERT(layout->bpp == bpp); - // When templated 'fetch' should be inlined at compile time: - const FetchPixelFunc fetch = (bpp == QPixelLayout::BPPNone) ? qFetchPixel[layout->bpp] : fetchPixel<bpp>; + FetchPixelFunc fetch = qFetchPixel[layout->bpp]; - uint *const end = buffer + length; + const uint *end = buffer + length; uint *b = buffer; if (data->fast_matrix) { // The increment pr x in the scanline @@ -2510,17 +2585,12 @@ static const uint * QT_FASTCALL fetchTransformedBilinearARGB32PM(uint *buffer, c } // blendType = BlendTransformedBilinear or BlendTransformedBilinearTiled -template<TextureBlendType blendType, QPixelLayout::BPP bpp> +template<TextureBlendType blendType> static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Operator *, const QSpanData *data, int y, int x, int length) { const QPixelLayout *layout = &qPixelLayouts[data->texture.format]; const QVector<QRgb> *clut = data->texture.colorTable; - if (bpp != QPixelLayout::BPPNone) // Like this to not ICE on GCC 5.3.1 - Q_ASSERT(layout->bpp == bpp); - // When templated 'fetch' should be inlined at compile time: - const FetchPixelsFunc fetch = (bpp == QPixelLayout::BPPNone) ? qFetchPixels[layout->bpp] : fetchPixels<bpp>; - const FetchPixelFunc fetch1 = (bpp == QPixelLayout::BPPNone) ? qFetchPixel[layout->bpp] : fetchPixel<bpp>; int image_width = data->texture.width; int image_height = data->texture.height; @@ -2558,6 +2628,7 @@ static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Oper // The idea is first to do the interpolation between the row s1 and the row s2 // into an intermediate buffer, then we interpolate between two pixel of this buffer. + FetchPixelsFunc fetch = qFetchPixels[layout->bpp]; // +1 for the last pixel to interpolate with, and +1 for rounding errors. uint buf1[buffer_size + 2]; uint buf2[buffer_size + 2]; @@ -2646,6 +2717,7 @@ static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Oper fx += fdx; } } else { + FetchPixelFunc fetch = qFetchPixel[layout->bpp]; uint buf1[buffer_size]; uint buf2[buffer_size]; uint *b = buffer; @@ -2656,10 +2728,19 @@ static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Oper int x1 = (fx >> 16); int x2; fetchTransformedBilinear_pixelBounds<blendType>(image_width, image_x1, image_x2, x1, x2); - buf1[i * 2 + 0] = fetch1(s1, x1); - buf1[i * 2 + 1] = fetch1(s1, x2); - buf2[i * 2 + 0] = fetch1(s2, x1); - buf2[i * 2 + 1] = fetch1(s2, x2); + + if (layout->bpp == QPixelLayout::BPP32) { + buf1[i * 2 + 0] = ((const uint*)s1)[x1]; + buf1[i * 2 + 1] = ((const uint*)s1)[x2]; + buf2[i * 2 + 0] = ((const uint*)s2)[x1]; + buf2[i * 2 + 1] = ((const uint*)s2)[x2]; + } else { + buf1[i * 2 + 0] = fetch(s1, x1); + buf1[i * 2 + 1] = fetch(s1, x2); + buf2[i * 2 + 0] = fetch(s2, x1); + buf2[i * 2 + 1] = fetch(s2, x2); + } + fx += fdx; } layout->convertToARGB32PM(buf1, buf1, len * 2, clut, 0); @@ -2689,6 +2770,7 @@ static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Oper } } } else { //rotation + FetchPixelFunc fetch = qFetchPixel[layout->bpp]; uint buf1[buffer_size]; uint buf2[buffer_size]; uint *b = buffer; @@ -2707,10 +2789,19 @@ static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Oper const uchar *s1 = data->texture.scanLine(y1); const uchar *s2 = data->texture.scanLine(y2); - buf1[i * 2 + 0] = fetch1(s1, x1); - buf1[i * 2 + 1] = fetch1(s1, x2); - buf2[i * 2 + 0] = fetch1(s2, x1); - buf2[i * 2 + 1] = fetch1(s2, x2); + + if (layout->bpp == QPixelLayout::BPP32) { + buf1[i * 2 + 0] = ((const uint*)s1)[x1]; + buf1[i * 2 + 1] = ((const uint*)s1)[x2]; + buf2[i * 2 + 0] = ((const uint*)s2)[x1]; + buf2[i * 2 + 1] = ((const uint*)s2)[x2]; + } else { + buf1[i * 2 + 0] = fetch(s1, x1); + buf1[i * 2 + 1] = fetch(s1, x2); + buf2[i * 2 + 0] = fetch(s2, x1); + buf2[i * 2 + 1] = fetch(s2, x2); + } + fx += fdx; fy += fdy; } @@ -2757,6 +2848,7 @@ static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Oper qreal fy = data->m22 * cy + data->m12 * cx + data->dy; qreal fw = data->m23 * cy + data->m13 * cx + data->m33; + FetchPixelFunc fetch = qFetchPixel[layout->bpp]; uint buf1[buffer_size]; uint buf2[buffer_size]; uint *b = buffer; @@ -2784,10 +2876,18 @@ static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Oper const uchar *s1 = data->texture.scanLine(y1); const uchar *s2 = data->texture.scanLine(y2); - buf1[i * 2 + 0] = fetch1(s1, x1); - buf1[i * 2 + 1] = fetch1(s1, x2); - buf2[i * 2 + 0] = fetch1(s2, x1); - buf2[i * 2 + 1] = fetch1(s2, x2); + + if (layout->bpp == QPixelLayout::BPP32) { + buf1[i * 2 + 0] = ((const uint*)s1)[x1]; + buf1[i * 2 + 1] = ((const uint*)s1)[x2]; + buf2[i * 2 + 0] = ((const uint*)s2)[x1]; + buf2[i * 2 + 1] = ((const uint*)s2)[x2]; + } else { + buf1[i * 2 + 0] = fetch(s1, x1); + buf1[i * 2 + 1] = fetch(s1, x2); + buf2[i * 2 + 0] = fetch(s2, x1); + buf2[i * 2 + 1] = fetch(s2, x2); + } fx += fdx; fy += fdy; @@ -3193,32 +3293,23 @@ static SourceFetchProc sourceFetchUntransformed[QImage::NImageFormats] = { }; static const SourceFetchProc sourceFetchGeneric[NBlendTypes] = { - fetchUntransformed, // Untransformed - fetchUntransformed, // Tiled - fetchTransformed<BlendTransformed, QPixelLayout::BPPNone>, // Transformed - fetchTransformed<BlendTransformedTiled, QPixelLayout::BPPNone>, // TransformedTiled - fetchTransformedBilinear<BlendTransformedBilinear, QPixelLayout::BPPNone>, // TransformedBilinear - fetchTransformedBilinear<BlendTransformedBilinearTiled, QPixelLayout::BPPNone> // TransformedBilinearTiled + fetchUntransformed, // Untransformed + fetchUntransformed, // Tiled + fetchTransformed<BlendTransformed>, // Transformed + fetchTransformed<BlendTransformedTiled>, // TransformedTiled + fetchTransformedBilinear<BlendTransformedBilinear>, // Bilinear + fetchTransformedBilinear<BlendTransformedBilinearTiled> // BilinearTiled }; static SourceFetchProc sourceFetchARGB32PM[NBlendTypes] = { fetchUntransformedARGB32PM, // Untransformed fetchUntransformedARGB32PM, // Tiled - fetchTransformed<BlendTransformed, QPixelLayout::BPP32>, // Transformed - fetchTransformed<BlendTransformedTiled, QPixelLayout::BPP32>, // TransformedTiled + fetchTransformedARGB32PM<BlendTransformed>, // Transformed + fetchTransformedARGB32PM<BlendTransformedTiled>, // TransformedTiled fetchTransformedBilinearARGB32PM<BlendTransformedBilinear>, // Bilinear fetchTransformedBilinearARGB32PM<BlendTransformedBilinearTiled> // BilinearTiled }; -static SourceFetchProc sourceFetchAny32[NBlendTypes] = { - fetchUntransformed, // Untransformed - fetchUntransformed, // Tiled - fetchTransformed<BlendTransformed, QPixelLayout::BPP32>, // Transformed - fetchTransformed<BlendTransformedTiled, QPixelLayout::BPP32>, // TransformedTiled - fetchTransformedBilinear<BlendTransformedBilinear, QPixelLayout::BPP32>, // TransformedBilinear - fetchTransformedBilinear<BlendTransformedBilinearTiled, QPixelLayout::BPP32> // TransformedBilinearTiled -}; - static const SourceFetchProc64 sourceFetchGeneric64[NBlendTypes] = { fetchUntransformed64, // Untransformed fetchUntransformed64, // Tiled @@ -3234,8 +3325,6 @@ static inline SourceFetchProc getSourceFetch(TextureBlendType blendType, QImage: return sourceFetchARGB32PM[blendType]; if (blendType == BlendUntransformed || blendType == BlendTiled) return sourceFetchUntransformed[format]; - if (qPixelLayouts[format].bpp == QPixelLayout::BPP32) - return sourceFetchAny32[blendType]; return sourceFetchGeneric[blendType]; } diff --git a/src/gui/painting/qdrawhelper_p.h b/src/gui/painting/qdrawhelper_p.h index 45a3174734..e537c343bb 100644 --- a/src/gui/painting/qdrawhelper_p.h +++ b/src/gui/painting/qdrawhelper_p.h @@ -335,6 +335,8 @@ struct QSpanData QGradientData gradient; QTextureData texture; }; + QExplicitlySharedDataPointer<const QSharedData> cachedGradient; + void init(QRasterBuffer *rb, const QRasterPaintEngine *pe); void setup(const QBrush &brush, int alpha, QPainter::CompositionMode compositionMode); diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index dd6bcdebec..d8aa727328 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -2314,6 +2314,8 @@ void QRasterPaintEngine::drawImage(const QRectF &r, const QImage &img, const QRe = QRectF(sr.x() + clippedTargetRect.x() - r.x(), sr.y() + clippedTargetRect.y() - r.y(), clippedTargetRect.width(), clippedTargetRect.height()).toRect(); + clippedSourceRect = clippedSourceRect.intersected(img.rect()); + uint dbpl = d->rasterBuffer->bytesPerLine(); uint sbpl = img.bytesPerLine(); @@ -4178,7 +4180,8 @@ void QRasterBuffer::flushToARGBImage(QImage *target) const class QGradientCache { - struct CacheInfo +public: + struct CacheInfo : public QSharedData { inline CacheInfo(QGradientStops s, int op, QGradient::InterpolationMode mode) : stops(qMove(s)), opacity(op), interpolationMode(mode) {} @@ -4189,12 +4192,9 @@ class QGradientCache QGradient::InterpolationMode interpolationMode; }; - typedef QMultiHash<quint64, CacheInfo> QGradientColorTableHash; - -public: - typedef QPair<const QRgb *, const QRgba64 *> ColorBufferPair; + typedef QMultiHash<quint64, QExplicitlySharedDataPointer<const CacheInfo> > QGradientColorTableHash; - inline ColorBufferPair getBuffer(const QGradient &gradient, int opacity) { + inline QExplicitlySharedDataPointer<const CacheInfo> getBuffer(const QGradient &gradient, int opacity) { quint64 hash_val = 0; const QGradientStops stops = gradient.stops(); @@ -4208,10 +4208,9 @@ public: return addCacheElement(hash_val, gradient, opacity); else { do { - const CacheInfo &cache_info = it.value(); - if (cache_info.stops == stops && cache_info.opacity == opacity && cache_info.interpolationMode == gradient.interpolationMode()) - return qMakePair(reinterpret_cast<const QRgb *>(cache_info.buffer32), - reinterpret_cast<const QRgba64 *>(cache_info.buffer64)); + const QExplicitlySharedDataPointer<const CacheInfo> &cache_info = it.value(); + if (cache_info->stops == stops && cache_info->opacity == opacity && cache_info->interpolationMode == gradient.interpolationMode()) + return cache_info; ++it; } while (it != cache.constEnd() && it.key() == hash_val); // an exact match for these stops and opacity was not found, create new cache @@ -4225,18 +4224,16 @@ protected: inline void generateGradientColorTable(const QGradient& g, QRgba64 *colorTable, int size, int opacity) const; - ColorBufferPair addCacheElement(quint64 hash_val, const QGradient &gradient, int opacity) { + QExplicitlySharedDataPointer<const CacheInfo> addCacheElement(quint64 hash_val, const QGradient &gradient, int opacity) { if (cache.size() == maxCacheSize()) { // may remove more than 1, but OK cache.erase(cache.begin() + (qrand() % maxCacheSize())); } - CacheInfo cache_entry(gradient.stops(), opacity, gradient.interpolationMode()); - generateGradientColorTable(gradient, cache_entry.buffer64, paletteSize(), opacity); + QExplicitlySharedDataPointer<CacheInfo> cache_entry(new CacheInfo (gradient.stops(), opacity, gradient.interpolationMode())); + generateGradientColorTable(gradient, cache_entry->buffer64, paletteSize(), opacity); for (int i = 0; i < GRADIENT_STOPTABLE_SIZE; ++i) - cache_entry.buffer32[i] = cache_entry.buffer64[i].toArgb32(); - CacheInfo &cache_value = cache.insert(hash_val, cache_entry).value(); - return qMakePair(reinterpret_cast<const QRgb *>(cache_value.buffer32), - reinterpret_cast<const QRgba64 *>(cache_value.buffer64)); + cache_entry->buffer32[i] = cache_entry->buffer64[i].toArgb32(); + return cache.insert(hash_val, cache_entry).value(); } QGradientColorTableHash cache; @@ -4455,6 +4452,7 @@ Q_GUI_EXPORT extern QImage qt_imageForBrush(int brushStyle, bool invert); void QSpanData::setup(const QBrush &brush, int alpha, QPainter::CompositionMode compositionMode) { Qt::BrushStyle brushStyle = qbrush_style(brush); + cachedGradient.reset(); switch (brushStyle) { case Qt::SolidPattern: { type = Solid; @@ -4471,9 +4469,10 @@ void QSpanData::setup(const QBrush &brush, int alpha, QPainter::CompositionMode const QLinearGradient *g = static_cast<const QLinearGradient *>(brush.gradient()); gradient.alphaColor = !brush.isOpaque() || alpha != 256; - QGradientCache::ColorBufferPair colorBuffers = qt_gradient_cache()->getBuffer(*g, alpha); - gradient.colorTable64 = colorBuffers.second; - gradient.colorTable32 = colorBuffers.first; + QExplicitlySharedDataPointer<const QGradientCache::CacheInfo> cacheInfo = qt_gradient_cache()->getBuffer(*g, alpha); + cachedGradient = cacheInfo; + gradient.colorTable32 = cacheInfo->buffer32; + gradient.colorTable64 = cacheInfo->buffer64; gradient.spread = g->spread(); @@ -4492,9 +4491,10 @@ void QSpanData::setup(const QBrush &brush, int alpha, QPainter::CompositionMode const QRadialGradient *g = static_cast<const QRadialGradient *>(brush.gradient()); gradient.alphaColor = !brush.isOpaque() || alpha != 256; - QGradientCache::ColorBufferPair colorBuffers = qt_gradient_cache()->getBuffer(*g, alpha); - gradient.colorTable64 = colorBuffers.second; - gradient.colorTable32 = colorBuffers.first; + QExplicitlySharedDataPointer<const QGradientCache::CacheInfo> cacheInfo = qt_gradient_cache()->getBuffer(*g, alpha); + cachedGradient = cacheInfo; + gradient.colorTable32 = cacheInfo->buffer32; + gradient.colorTable64 = cacheInfo->buffer64; gradient.spread = g->spread(); @@ -4517,9 +4517,10 @@ void QSpanData::setup(const QBrush &brush, int alpha, QPainter::CompositionMode const QConicalGradient *g = static_cast<const QConicalGradient *>(brush.gradient()); gradient.alphaColor = !brush.isOpaque() || alpha != 256; - QGradientCache::ColorBufferPair colorBuffers = qt_gradient_cache()->getBuffer(*g, alpha); - gradient.colorTable64 = colorBuffers.second; - gradient.colorTable32 = colorBuffers.first; + QExplicitlySharedDataPointer<const QGradientCache::CacheInfo> cacheInfo = qt_gradient_cache()->getBuffer(*g, alpha); + cachedGradient = cacheInfo; + gradient.colorTable32 = cacheInfo->buffer32; + gradient.colorTable64 = cacheInfo->buffer64; gradient.spread = QGradient::RepeatSpread; diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index 6472481e7a..74b961f042 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -6439,7 +6439,8 @@ void QPainterPrivate::drawTextItem(const QPointF &p, const QTextItem &_ti, QText updateState(state); if (!ti.glyphs.numGlyphs) { - // nothing to do + drawTextItemDecoration(q, p, ti.fontEngine, textEngine, ti.underlineStyle, + ti.flags, ti.width.toReal(), ti.charFormat); } else if (ti.fontEngine->type() == QFontEngine::Multi) { QFontEngineMulti *multi = static_cast<QFontEngineMulti *>(ti.fontEngine); diff --git a/src/gui/painting/qpathclipper.cpp b/src/gui/painting/qpathclipper.cpp index f92a681eca..addd9c0c2c 100644 --- a/src/gui/painting/qpathclipper.cpp +++ b/src/gui/painting/qpathclipper.cpp @@ -1458,25 +1458,6 @@ QPathClipper::QPathClipper(const QPainterPath &subject, bMask = clipPath.fillRule() == Qt::WindingFill ? ~0x0 : 0x1; } -template <typename Iterator, typename Equality> -Iterator qRemoveDuplicates(Iterator begin, Iterator end, Equality eq) -{ - if (begin == end) - return end; - - Iterator last = begin; - ++begin; - Iterator insert = begin; - for (Iterator it = begin; it != end; ++it) { - if (!eq(*it, *last)) { - *insert++ = *it; - last = it; - } - } - - return insert; -} - static void clear(QWingedEdge& list, int edge, QPathEdge::Traversal traversal) { QWingedEdge::TraversalStatus status; @@ -1643,7 +1624,7 @@ bool QPathClipper::doClip(QWingedEdge &list, ClipperMode mode) y_coords << list.vertex(i)->y; std::sort(y_coords.begin(), y_coords.end()); - y_coords.resize(qRemoveDuplicates(y_coords.begin(), y_coords.end(), fuzzyCompare) - y_coords.begin()); + y_coords.erase(std::unique(y_coords.begin(), y_coords.end(), fuzzyCompare), y_coords.end()); #ifdef QDEBUG_CLIPPER printf("sorted y coords:\n"); diff --git a/src/gui/painting/qpdf.cpp b/src/gui/painting/qpdf.cpp index d246c96da6..84e18a64dd 100644 --- a/src/gui/painting/qpdf.cpp +++ b/src/gui/painting/qpdf.cpp @@ -1924,7 +1924,7 @@ int QPdfEnginePrivate::writeCompressed(const char *src, int len) } int QPdfEnginePrivate::writeImage(const QByteArray &data, int width, int height, int depth, - int maskObject, int softMaskObject, bool dct) + int maskObject, int softMaskObject, bool dct, bool isMono) { int image = addXrefEntry(-1); xprintf("<<\n" @@ -1934,8 +1934,13 @@ int QPdfEnginePrivate::writeImage(const QByteArray &data, int width, int height, "/Height %d\n", width, height); if (depth == 1) { - xprintf("/ImageMask true\n" - "/Decode [1 0]\n"); + if (!isMono) { + xprintf("/ImageMask true\n" + "/Decode [1 0]\n"); + } else { + xprintf("/BitsPerComponent 1\n" + "/ColorSpace /DeviceGray\n"); + } } else { xprintf("/BitsPerComponent 8\n" "/ColorSpace %s\n", (depth == 32) ? "/DeviceRGB" : "/DeviceGray"); @@ -2453,7 +2458,7 @@ int QPdfEnginePrivate::addImage(const QImage &img, bool *bitmap, qint64 serial_n memcpy(rawdata, image.constScanLine(y), bytesPerLine); rawdata += bytesPerLine; } - object = writeImage(data, w, h, d, 0, 0); + object = writeImage(data, w, h, d, 0, 0, false, is_monochrome(img.colorTable())); } else { QByteArray softMaskData; bool dct = false; diff --git a/src/gui/painting/qpdf_p.h b/src/gui/painting/qpdf_p.h index cb1a91e09f..a6aa2940c8 100644 --- a/src/gui/painting/qpdf_p.h +++ b/src/gui/painting/qpdf_p.h @@ -295,7 +295,7 @@ private: int streampos; int writeImage(const QByteArray &data, int width, int height, int depth, - int maskObject, int softMaskObject, bool dct = false); + int maskObject, int softMaskObject, bool dct = false, bool isMono = false); void writePage(); int addXrefEntry(int object, bool printostr = true); diff --git a/src/gui/painting/qt_attribution.json b/src/gui/painting/qt_attribution.json new file mode 100644 index 0000000000..f635cf98ac --- /dev/null +++ b/src/gui/painting/qt_attribution.json @@ -0,0 +1,14 @@ +{ + "Id": "grayraster", + "Name": "Anti-aliasing rasterizer from FreeType 2", + "QDocModule": "qtgui", + "QtUsage": "Used in Qt GUI.", + "Path": "qgrayraster.c", + + "Description": "FreeType is a freely available software library to render fonts.", + "Homepage": "http://www.freetype.org", + "License": "Freetype Project License or GNU General Public License v2.0 only", + "LicenseId": "FTL or GPL-2.0", + "LicenseFile": "../../3rdparty/freetype/docs/LICENSE.TXT", + "Copyright": "Copyright 2006-2015 by David Turner, Robert Wilhelm, and Werner Lemberg." +} diff --git a/src/gui/text/qcssparser.cpp b/src/gui/text/qcssparser.cpp index cb19a42688..31d832a9ce 100644 --- a/src/gui/text/qcssparser.cpp +++ b/src/gui/text/qcssparser.cpp @@ -746,8 +746,9 @@ static ColorData parseColorValue(QCss::Value v) QVector<QCss::Value> colorDigits; if (!p.parseExpr(&colorDigits)) return ColorData(); + const int tokenCount = colorDigits.count(); - for (int i = 0; i < qMin(colorDigits.count(), 7); i += 2) { + for (int i = 0; i < qMin(tokenCount, 7); i += 2) { if (colorDigits.at(i).type == Value::Percentage) { colorDigits[i].variant = colorDigits.at(i).variant.toReal() * (255. / 100.); colorDigits[i].type = Value::Number; @@ -756,11 +757,15 @@ static ColorData parseColorValue(QCss::Value v) } } + + if (tokenCount < 5) + return ColorData(); + int v1 = colorDigits.at(0).variant.toInt(); int v2 = colorDigits.at(2).variant.toInt(); int v3 = colorDigits.at(4).variant.toInt(); int alpha = 255; - if (colorDigits.count() >= 7) { + if (tokenCount >= 7) { int alphaValue = colorDigits.at(6).variant.toInt(); if (rgba && alphaValue <= 1) alpha = colorDigits.at(6).variant.toReal() * 255.; diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp index 7fcac9b9f2..d2da24ca94 100644 --- a/src/gui/text/qfontdatabase.cpp +++ b/src/gui/text/qfontdatabase.cpp @@ -804,7 +804,8 @@ QStringList QPlatformFontDatabase::fallbacksForFamily(const QString &family, QFo Q_UNUSED(family); Q_UNUSED(styleHint); - QStringList retList; + QStringList preferredFallbacks; + QStringList otherFallbacks; size_t writingSystem = std::find(scriptForWritingSystem, scriptForWritingSystem + QFontDatabase::WritingSystemsCount, @@ -825,18 +826,18 @@ QStringList QPlatformFontDatabase::fallbacksForFamily(const QString &family, QFo QtFontFoundry *foundry = f->foundries[j]; for (int k = 0; k < foundry->count; ++k) { - if (style == foundry->styles[k]->key.style) { - if (foundry->name.isEmpty()) - retList.append(f->name); - else - retList.append(f->name + QLatin1String(" [") + foundry->name + QLatin1Char(']')); - break; - } + QString name = foundry->name.isEmpty() + ? f->name + : f->name + QLatin1String(" [") + foundry->name + QLatin1Char(']'); + if (style == foundry->styles[k]->key.style) + preferredFallbacks.append(name); + else + otherFallbacks.append(name); } } } - return retList; + return preferredFallbacks + otherFallbacks; } static void initializeDb(); @@ -1659,9 +1660,6 @@ bool QFontDatabase::isFixedPitch(const QString &family, bool QFontDatabase::isBitmapScalable(const QString &family, const QString &style) const { - if (QGuiApplicationPrivate::platformIntegration()->fontDatabase()->fontsAlwaysScalable()) - return true; - bool bitmapScalable = false; QString familyName, foundryName; parseFontName(family, foundryName, familyName); @@ -1702,9 +1700,6 @@ bool QFontDatabase::isBitmapScalable(const QString &family, */ bool QFontDatabase::isSmoothlyScalable(const QString &family, const QString &style) const { - if (QGuiApplicationPrivate::platformIntegration()->fontDatabase()->fontsAlwaysScalable()) - return true; - bool smoothScalable = false; QString familyName, foundryName; parseFontName(family, foundryName, familyName); diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp index d6af6d21a2..09b0475a84 100644 --- a/src/gui/text/qfontengine_ft.cpp +++ b/src/gui/text/qfontengine_ft.cpp @@ -1910,7 +1910,7 @@ void QFontEngineFT::unlockAlphaMapForGlyph() static inline bool is2dRotation(const QTransform &t) { return qFuzzyCompare(t.m11(), t.m22()) && qFuzzyCompare(t.m12(), -t.m21()) - && qFuzzyCompare(t.m11()*t.m22() - t.m12()*t.m21(), 1.0); + && qFuzzyCompare(t.m11()*t.m22() - t.m12()*t.m21(), qreal(1.0)); } QFontEngineFT::Glyph *QFontEngineFT::loadGlyphFor(glyph_t g, diff --git a/src/gui/text/text.pri b/src/gui/text/text.pri index 3fe47a6645..c1c52f2d1a 100644 --- a/src/gui/text/text.pri +++ b/src/gui/text/text.pri @@ -88,7 +88,7 @@ HEADERS += \ qtConfig(harfbuzz)|qtConfig(system-harfbuzz) { DEFINES += QT_ENABLE_HARFBUZZ_NG - include($$PWD/../../3rdparty/harfbuzz_dependency.pri) + QMAKE_USE_PRIVATE += harfbuzz SOURCES += text/qharfbuzzng.cpp HEADERS += text/qharfbuzzng_p.h diff --git a/src/network/access/http2/http2frames.cpp b/src/network/access/http2/http2frames.cpp index 978bee09b1..5a684c2f41 100644 --- a/src/network/access/http2/http2frames.cpp +++ b/src/network/access/http2/http2frames.cpp @@ -244,6 +244,24 @@ quint32 Frame::dataSize() const return size; } +quint32 Frame::hpackBlockSize() const +{ + Q_ASSERT(validatePayload() == FrameStatus::goodFrame); + + const auto frameType = type(); + Q_ASSERT(frameType == FrameType::HEADERS || + frameType == FrameType::PUSH_PROMISE || + frameType == FrameType::CONTINUATION); + + quint32 size = dataSize(); + if (frameType == FrameType::PUSH_PROMISE) { + Q_ASSERT(size >= 4); + size -= 4; + } + + return size; +} + const uchar *Frame::dataBegin() const { Q_ASSERT(validatePayload() == FrameStatus::goodFrame); @@ -260,6 +278,21 @@ const uchar *Frame::dataBegin() const return src; } +const uchar *Frame::hpackBlockBegin() const +{ + Q_ASSERT(validatePayload() == FrameStatus::goodFrame); + + const auto frameType = type(); + Q_ASSERT(frameType == FrameType::HEADERS || + frameType == FrameType::PUSH_PROMISE || + frameType == FrameType::CONTINUATION); + + const uchar *begin = dataBegin(); + if (frameType == FrameType::PUSH_PROMISE) + begin += 4; // That's a promised stream, skip it. + return begin; +} + FrameStatus FrameReader::read(QAbstractSocket &socket) { if (offset < frameHeaderSize) { diff --git a/src/network/access/http2/http2frames_p.h b/src/network/access/http2/http2frames_p.h index 84ba9c3662..e5f6d46c67 100644 --- a/src/network/access/http2/http2frames_p.h +++ b/src/network/access/http2/http2frames_p.h @@ -71,27 +71,29 @@ namespace Http2 struct Q_AUTOTEST_EXPORT Frame { Frame(); - // Reading these values without first forming a valid frame - // (either reading it from a socket or building it) will result - // in undefined behavior: + // Reading these values without first forming a valid frame (either reading + // it from a socket or building it) will result in undefined behavior: FrameType type() const; quint32 streamID() const; FrameFlags flags() const; quint32 payloadSize() const; uchar padding() const; - // In HTTP/2 a stream's priority is specified by its weight - // and a stream (id) it depends on: + // In HTTP/2 a stream's priority is specified by its weight and a stream + // (id) it depends on: bool priority(quint32 *streamID = nullptr, uchar *weight = nullptr) const; FrameStatus validateHeader() const; FrameStatus validatePayload() const; - // Number of payload bytes without padding and/or priority + // Number of payload bytes without padding and/or priority. quint32 dataSize() const; - // Beginning of payload without priority/padding - // bytes. + // HEADERS data size for HEADERS, PUSH_PROMISE and CONTINUATION streams: + quint32 hpackBlockSize() const; + // Beginning of payload without priority/padding bytes. const uchar *dataBegin() const; + // HEADERS data beginning for HEADERS, PUSH_PROMISE and CONTINUATION streams: + const uchar *hpackBlockBegin() const; std::vector<uchar> buffer; }; @@ -134,8 +136,7 @@ public: void setFlags(FrameFlags flags); void addFlag(FrameFlag flag); - // All append functions also update frame's payload - // length. + // All append functions also update frame's payload length. template<typename ValueType> void append(ValueType val) { @@ -161,16 +162,14 @@ public: // Write as a single frame: bool write(QAbstractSocket &socket) const; - // Two types of frames we are sending are affected by - // frame size limits: HEADERS and DATA. HEADERS' payload - // (hpacked HTTP headers, following a frame header) - // is always in our 'buffer', we send the initial HEADERS + // Two types of frames we are sending are affected by frame size limits: + // HEADERS and DATA. HEADERS' payload (hpacked HTTP headers, following a + // frame header) is always in our 'buffer', we send the initial HEADERS // frame first and then CONTINUTATION frame(s) if needed: bool writeHEADERS(QAbstractSocket &socket, quint32 sizeLimit); - // With DATA frames the actual payload is never in our 'buffer', - // it's a 'readPointer' from QNonContiguousData. We split - // this payload as needed into DATA frames with correct - // payload size fitting into frame size limit: + // With DATA frames the actual payload is never in our 'buffer', it's a + // 'readPointer' from QNonContiguousData. We split this payload as needed + // into DATA frames with correct payload size fitting into frame size limit: bool writeDATA(QAbstractSocket &socket, quint32 sizeLimit, const uchar *src, quint32 size); private: diff --git a/src/network/access/http2/http2protocol_p.h b/src/network/access/http2/http2protocol_p.h index 5c46949e23..5d730404bb 100644 --- a/src/network/access/http2/http2protocol_p.h +++ b/src/network/access/http2/http2protocol_p.h @@ -127,6 +127,10 @@ enum Http2PredefinedParameters maxConcurrentStreams = 100 // HTTP/2, 6.5.2 }; +// It's int, it has internal linkage, it's ok to have it in headers - +// no ODR violation is possible. +const quint32 lastValidStreamID((quint32(1) << 31) - 1); // HTTP/2, 5.1.1 + extern const Q_AUTOTEST_EXPORT char Http2clientPreface[clientPrefaceLength]; enum class FrameStatus diff --git a/src/network/access/http2/http2streams.cpp b/src/network/access/http2/http2streams.cpp index 660100f5e4..fa39c1d57b 100644 --- a/src/network/access/http2/http2streams.cpp +++ b/src/network/access/http2/http2streams.cpp @@ -61,6 +61,15 @@ Stream::Stream(const HttpMessagePair &message, quint32 id, qint32 sendSize, qint { } +Stream::Stream(const QString &cacheKey, quint32 id, qint32 recvSize) + : streamID(id), + // sendWindow is 0, this stream only receives data + recvWindow(recvSize), + state(remoteReserved), + key(cacheKey) +{ +} + QHttpNetworkReply *Stream::reply() const { return httpPair.second; @@ -99,6 +108,6 @@ QNonContiguousByteDevice *Stream::data() const return httpPair.first.uploadByteDevice(); } -} +} // namespace Http2 QT_END_NAMESPACE diff --git a/src/network/access/http2/http2streams_p.h b/src/network/access/http2/http2streams_p.h index 8a825a5457..8465486ae8 100644 --- a/src/network/access/http2/http2streams_p.h +++ b/src/network/access/http2/http2streams_p.h @@ -51,10 +51,16 @@ // We mean it. // +#include "http2frames_p.h" +#include "hpack_p.h" + #include <private/qhttpnetworkconnectionchannel_p.h> #include <private/qhttpnetworkrequest_p.h> #include <QtCore/qglobal.h> +#include <QtCore/qstring.h> + +#include <vector> QT_BEGIN_NAMESPACE @@ -70,12 +76,16 @@ struct Q_AUTOTEST_EXPORT Stream open, halfClosedLocal, halfClosedRemote, + remoteReserved, closed }; Stream(); + // That's a ctor for a client-initiated stream: Stream(const HttpMessagePair &message, quint32 streamID, qint32 sendSize, qint32 recvSize); + // That's a reserved stream, created by PUSH_PROMISE from a server: + Stream(const QString &key, quint32 streamID, qint32 recvSize); QHttpNetworkReply *reply() const; const QHttpNetworkRequest &request() const; @@ -92,9 +102,22 @@ struct Q_AUTOTEST_EXPORT Stream qint32 recvWindow = 65535; StreamState state = idle; + QString key; // for PUSH_PROMISE +}; + +struct PushPromise +{ + quint32 reservedID = 0; + // PUSH_PROMISE has its own HEADERS, + // usually similar to what request has: + HPack::HttpHeader pushHeader; + // Response has its own (normal) HEADERS: + HPack::HttpHeader responseHeader; + // DATA frames on a promised stream: + std::vector<Frame> dataFrames; }; -} +} // namespace Http2 QT_END_NAMESPACE diff --git a/src/network/access/qhttp2protocolhandler.cpp b/src/network/access/qhttp2protocolhandler.cpp index 68a00c6837..3fa0c18dc0 100644 --- a/src/network/access/qhttp2protocolhandler.cpp +++ b/src/network/access/qhttp2protocolhandler.cpp @@ -108,6 +108,41 @@ HPack::HttpHeader build_headers(const QHttpNetworkRequest &request, quint32 maxH return header; } +std::vector<uchar> assemble_hpack_block(const std::vector<Http2::Frame> &frames) +{ + std::vector<uchar> hpackBlock; + + quint32 total = 0; + for (const auto &frame : frames) + total += frame.hpackBlockSize(); + + if (!total) + return hpackBlock; + + hpackBlock.resize(total); + auto dst = hpackBlock.begin(); + for (const auto &frame : frames) { + if (const auto hpackBlockSize = frame.hpackBlockSize()) { + const uchar *src = frame.hpackBlockBegin(); + std::copy(src, src + hpackBlockSize, dst); + dst += hpackBlockSize; + } + } + + return hpackBlock; +} + +QUrl urlkey_from_request(const QHttpNetworkRequest &request) +{ + QUrl url; + + url.setScheme(request.url().scheme()); + url.setAuthority(request.url().authority(QUrl::FullyEncoded | QUrl::RemoveUserInfo)); + url.setPath(QLatin1String(request.uri(false))); + + return url; +} + bool sum_will_overflow(qint32 windowSize, qint32 delta) { if (windowSize > 0) @@ -131,6 +166,9 @@ QHttp2ProtocolHandler::QHttp2ProtocolHandler(QHttpNetworkConnectionChannel *chan encoder(HPack::FieldLookupTable::DefaultSize, true) { continuedFrames.reserve(20); + bool ok = false; + const int env = qEnvironmentVariableIntValue("QT_HTTP2_ENABLE_PUSH_PROMISE", &ok); + pushPromiseEnabled = ok && env; } void QHttp2ProtocolHandler::_q_uploadDataReadyRead() @@ -241,10 +279,25 @@ bool QHttp2ProtocolHandler::sendRequest() if (!requests.size()) return true; + m_channel->state = QHttpNetworkConnectionChannel::WritingState; + // Check what was promised/pushed, maybe we do not have to send a request + // and have a response already? + + for (auto it = requests.begin(), endIt = requests.end(); it != endIt;) { + const auto key = urlkey_from_request(it->first).toString(); + if (!promisedData.contains(key)) { + ++it; + continue; + } + // Woo-hoo, we do not have to ask, the answer is ready for us: + HttpMessagePair message = *it; + it = requests.erase(it); + initReplyFromPushPromise(message, key); + } + const auto streamsToUse = std::min<quint32>(maxConcurrentStreams - activeStreams.size(), requests.size()); auto it = requests.begin(); - m_channel->state = QHttpNetworkConnectionChannel::WritingState; for (quint32 i = 0; i < streamsToUse; ++i) { const qint32 newStreamID = createNewStream(*it); if (!newStreamID) { @@ -293,11 +346,11 @@ bool QHttp2ProtocolHandler::sendClientPreface() // 6.5 SETTINGS frameWriter.start(FrameType::SETTINGS, FrameFlag::EMPTY, Http2::connectionStreamID); - // MAX frame size (16 kb), disable PUSH + // MAX frame size (16 kb), enable/disable PUSH frameWriter.append(Settings::MAX_FRAME_SIZE_ID); frameWriter.append(quint32(Http2::maxFrameSize)); frameWriter.append(Settings::ENABLE_PUSH_ID); - frameWriter.append(quint32(0)); + frameWriter.append(quint32(pushPromiseEnabled)); if (!frameWriter.write(*m_socket)) return false; @@ -621,7 +674,7 @@ void QHttp2ProtocolHandler::handlePUSH_PROMISE() // 6.6 PUSH_PROMISE. Q_ASSERT(inboundFrame.type() == FrameType::PUSH_PROMISE); - if (prefaceSent && !waitingForSettingsACK) { + if (!pushPromiseEnabled && prefaceSent && !waitingForSettingsACK) { // This means, server ACKed our 'NO PUSH', // but sent us PUSH_PROMISE anyway. return connectionError(PROTOCOL_ERROR, "unexpected PUSH_PROMISE frame"); @@ -639,15 +692,19 @@ void QHttp2ProtocolHandler::handlePUSH_PROMISE() } const auto reservedID = qFromBigEndian<quint32>(inboundFrame.dataBegin()); - if (!reservedID || (reservedID & 0x1)) { + if ((reservedID & 1) || reservedID <= lastPromisedID || + reservedID > Http2::lastValidStreamID) { return connectionError(PROTOCOL_ERROR, "PUSH_PROMISE with invalid promised stream ID"); } - // "ignoring a PUSH_PROMISE frame causes the stream - // state to become indeterminate" - let's RST_STREAM it then ... - sendRST_STREAM(reservedID, REFUSE_STREAM); - markAsReset(reservedID); + lastPromisedID = reservedID; + + if (!pushPromiseEnabled) { + // "ignoring a PUSH_PROMISE frame causes the stream state to become + // indeterminate" - let's send RST_STREAM frame with REFUSE_STREAM code. + resetPromisedStream(inboundFrame, Http2::REFUSE_STREAM); + } const bool endHeaders = inboundFrame.flags().testFlag(FrameFlag::END_HEADERS); continuedFrames.clear(); @@ -710,7 +767,7 @@ void QHttp2ProtocolHandler::handleGOAWAY() // "A server that is attempting to gracefully shut down a connection SHOULD // send an initial GOAWAY frame with the last stream identifier set to 2^31-1 // and a NO_ERROR code." - if (lastStreamID != (quint32(1) << 31) - 1 || errorCode != HTTP2_NO_ERROR) + if (lastStreamID != Http2::lastValidStreamID || errorCode != HTTP2_NO_ERROR) return connectionError(PROTOCOL_ERROR, "GOAWAY invalid stream/error code"); lastStreamID = 1; } else { @@ -795,16 +852,24 @@ void QHttp2ProtocolHandler::handleCONTINUATION() void QHttp2ProtocolHandler::handleContinuedHEADERS() { + // 'Continued' HEADERS can be: the initial HEADERS/PUSH_PROMISE frame + // with/without END_HEADERS flag set plus, if no END_HEADERS flag, + // a sequence of one or more CONTINUATION frames. Q_ASSERT(continuedFrames.size()); + const auto firstFrameType = continuedFrames[0].type(); + Q_ASSERT(firstFrameType == FrameType::HEADERS || + firstFrameType == FrameType::PUSH_PROMISE); const auto streamID = continuedFrames[0].streamID(); - if (continuedFrames[0].type() == FrameType::HEADERS) { + if (firstFrameType == FrameType::HEADERS) { if (activeStreams.contains(streamID)) { Stream &stream = activeStreams[streamID]; - if (stream.state != Stream::halfClosedLocal) { - // If we're receiving headers, they're a response to a request we sent; - // and we closed our end when we finished sending that. + if (stream.state != Stream::halfClosedLocal + && stream.state != Stream::remoteReserved) { + // We can receive HEADERS on streams initiated by our requests + // (these streams are in halfClosedLocal state) or remote-reserved + // streams from a server's PUSH_PROMISE. finishStreamWithError(stream, QNetworkReply::ProtocolInvalidOperationError, QLatin1String("HEADERS on invalid stream")); sendRST_STREAM(streamID, CANCEL); @@ -815,42 +880,49 @@ void QHttp2ProtocolHandler::handleContinuedHEADERS() } else if (!streamWasReset(streamID)) { return connectionError(PROTOCOL_ERROR, "HEADERS on invalid stream"); } + // Else: we cannot just ignore our peer's HEADERS frames - they change + // HPACK context - even though the stream was reset; apparently the peer + // has yet to see the reset. } - quint32 total = 0; - for (const auto &frame : continuedFrames) - total += frame.dataSize(); + std::vector<uchar> hpackBlock(assemble_hpack_block(continuedFrames)); + if (!hpackBlock.size()) { + // It could be a PRIORITY sent in HEADERS - already handled by this + // point in handleHEADERS. If it was PUSH_PROMISE (HTTP/2 8.2.1): + // "The header fields in PUSH_PROMISE and any subsequent CONTINUATION + // frames MUST be a valid and complete set of request header fields + // (Section 8.1.2.3) ... If a client receives a PUSH_PROMISE that does + // not include a complete and valid set of header fields or the :method + // pseudo-header field identifies a method that is not safe, it MUST + // respond with a stream error (Section 5.4.2) of type PROTOCOL_ERROR." + if (firstFrameType == FrameType::PUSH_PROMISE) + resetPromisedStream(continuedFrames[0], Http2::PROTOCOL_ERROR); - if (!total) { - // It could be a PRIORITY sent in HEADERS - handled by this point. return; } - std::vector<uchar> hpackBlock(total); - auto dst = hpackBlock.begin(); - for (const auto &frame : continuedFrames) { - if (!frame.dataSize()) - continue; - const uchar *src = frame.dataBegin(); - std::copy(src, src + frame.dataSize(), dst); - dst += frame.dataSize(); - } - - HPack::BitIStream inputStream{&hpackBlock[0], - &hpackBlock[0] + hpackBlock.size()}; - + HPack::BitIStream inputStream{&hpackBlock[0], &hpackBlock[0] + hpackBlock.size()}; if (!decoder.decodeHeaderFields(inputStream)) return connectionError(COMPRESSION_ERROR, "HPACK decompression failed"); - if (continuedFrames[0].type() == FrameType::HEADERS) { + switch (firstFrameType) { + case FrameType::HEADERS: if (activeStreams.contains(streamID)) { Stream &stream = activeStreams[streamID]; updateStream(stream, decoder.decodedHeader()); + // No DATA frames. if (continuedFrames[0].flags() & FrameFlag::END_STREAM) { finishStream(stream); deleteActiveStream(stream.streamID); } } + break; + case FrameType::PUSH_PROMISE: + if (!tryReserveStream(continuedFrames[0], decoder.decodedHeader())) + resetPromisedStream(continuedFrames[0], Http2::PROTOCOL_ERROR); + break; + default: + break; } } @@ -923,10 +995,26 @@ bool QHttp2ProtocolHandler::acceptSetting(Http2::Settings identifier, quint32 ne return true; } -void QHttp2ProtocolHandler::updateStream(Stream &stream, const HPack::HttpHeader &headers) +void QHttp2ProtocolHandler::updateStream(Stream &stream, const HPack::HttpHeader &headers, + Qt::ConnectionType connectionType) { const auto httpReply = stream.reply(); - Q_ASSERT(httpReply); + Q_ASSERT(httpReply || stream.state == Stream::remoteReserved); + + if (!httpReply) { + // It's a PUSH_PROMISEd HEADERS, no actual request/reply + // exists yet, we have to cache this data for a future + // (potential) request. + + // TODO: the part with assignment is not especially cool + // or beautiful, good that at least QByteArray is implicitly + // sharing data. To be refactored (std::move). + Q_ASSERT(promisedData.contains(stream.key)); + PushPromise &promise = promisedData[stream.key]; + promise.responseHeader = headers; + return; + } + const auto httpReplyPrivate = httpReply->d_func(); for (const auto &pair : headers) { const auto &name = pair.name; @@ -951,18 +1039,30 @@ void QHttp2ProtocolHandler::updateStream(Stream &stream, const HPack::HttpHeader } } - emit httpReply->headerChanged(); + if (connectionType == Qt::DirectConnection) + emit httpReply->headerChanged(); + else + QMetaObject::invokeMethod(httpReply, "headerChanged", connectionType); } -void QHttp2ProtocolHandler::updateStream(Stream &stream, const Frame &frame) +void QHttp2ProtocolHandler::updateStream(Stream &stream, const Frame &frame, + Qt::ConnectionType connectionType) { Q_ASSERT(frame.type() == FrameType::DATA); + auto httpReply = stream.reply(); + Q_ASSERT(httpReply || stream.state == Stream::remoteReserved); + + if (!httpReply) { + Q_ASSERT(promisedData.contains(stream.key)); + PushPromise &promise = promisedData[stream.key]; + // TODO: refactor this to use std::move. + promise.dataFrames.push_back(frame); + return; + } if (const auto length = frame.dataSize()) { const char *data = reinterpret_cast<const char *>(frame.dataBegin()); auto &httpRequest = stream.request(); - auto httpReply = stream.reply(); - Q_ASSERT(httpReply); auto replyPrivate = httpReply->d_func(); replyPrivate->compressedData.append(data, length); @@ -978,24 +1078,38 @@ void QHttp2ProtocolHandler::updateStream(Stream &stream, const Frame &frame) } if (replyPrivate->shouldEmitSignals()) { - emit httpReply->readyRead(); - emit httpReply->dataReadProgress(replyPrivate->totalProgress, replyPrivate->bodyLength); + if (connectionType == Qt::DirectConnection) { + emit httpReply->readyRead(); + emit httpReply->dataReadProgress(replyPrivate->totalProgress, + replyPrivate->bodyLength); + } else { + QMetaObject::invokeMethod(httpReply, "readyRead", connectionType); + QMetaObject::invokeMethod(httpReply, "dataReadProgress", connectionType, + Q_ARG(qint64, replyPrivate->totalProgress), + Q_ARG(qint64, replyPrivate->bodyLength)); + } } } } -void QHttp2ProtocolHandler::finishStream(Stream &stream) +void QHttp2ProtocolHandler::finishStream(Stream &stream, Qt::ConnectionType connectionType) { + Q_ASSERT(stream.state == Stream::remoteReserved || stream.reply()); + stream.state = Stream::closed; auto httpReply = stream.reply(); - Q_ASSERT(httpReply); - httpReply->disconnect(this); - if (stream.data()) - stream.data()->disconnect(this); + if (httpReply) { + httpReply->disconnect(this); + if (stream.data()) + stream.data()->disconnect(this); - qCDebug(QT_HTTP2) << "stream" << stream.streamID << "closed"; + if (connectionType == Qt::DirectConnection) + emit httpReply->finished(); + else + QMetaObject::invokeMethod(httpReply, "finished", connectionType); + } - emit httpReply->finished(); + qCDebug(QT_HTTP2) << "stream" << stream.streamID << "closed"; } void QHttp2ProtocolHandler::finishStreamWithError(Stream &stream, quint32 errorCode) @@ -1009,18 +1123,20 @@ void QHttp2ProtocolHandler::finishStreamWithError(Stream &stream, quint32 errorC void QHttp2ProtocolHandler::finishStreamWithError(Stream &stream, QNetworkReply::NetworkError error, const QString &message) { + Q_ASSERT(stream.state == Stream::remoteReserved || stream.reply()); + stream.state = Stream::closed; - auto httpReply = stream.reply(); - Q_ASSERT(httpReply); - httpReply->disconnect(this); - if (stream.data()) - stream.data()->disconnect(this); + if (auto httpReply = stream.reply()) { + httpReply->disconnect(this); + if (stream.data()) + stream.data()->disconnect(this); + + // TODO: error message must be translated!!! (tr) + emit httpReply->finishedWithError(error, message); + } qCWarning(QT_HTTP2) << "stream" << stream.streamID << "finished with error:" << message; - - // TODO: error message must be translated!!! (tr) - emit httpReply->finishedWithError(error, message); } quint32 QHttp2ProtocolHandler::createNewStream(const HttpMessagePair &message) @@ -1066,26 +1182,24 @@ void QHttp2ProtocolHandler::addToSuspended(Stream &stream) void QHttp2ProtocolHandler::markAsReset(quint32 streamID) { - // For now, we trace only client's streams (created by us, - // odd integer numbers). - if (streamID & 0x1) { - qCDebug(QT_HTTP2) << "stream" << streamID << "was reset"; - // This part is quite tricky: I have to clear this set - // so that it does not become tOOO big. - if (recycledStreams.size() > maxRecycledStreams) { - // At least, I'm erasing the oldest first ... - recycledStreams.erase(recycledStreams.begin(), - recycledStreams.begin() + - recycledStreams.size() / 2); - } + Q_ASSERT(streamID); + + qCDebug(QT_HTTP2) << "stream" << streamID << "was reset"; + // This part is quite tricky: I have to clear this set + // so that it does not become tOOO big. + if (recycledStreams.size() > maxRecycledStreams) { + // At least, I'm erasing the oldest first ... + recycledStreams.erase(recycledStreams.begin(), + recycledStreams.begin() + + recycledStreams.size() / 2); + } - const auto it = std::lower_bound(recycledStreams.begin(), recycledStreams.end(), - streamID); - if (it != recycledStreams.end() && *it == streamID) - return; + const auto it = std::lower_bound(recycledStreams.begin(), recycledStreams.end(), + streamID); + if (it != recycledStreams.end() && *it == streamID) + return; - recycledStreams.insert(it, streamID); - } + recycledStreams.insert(it, streamID); } quint32 QHttp2ProtocolHandler::popStreamToResume() @@ -1175,7 +1289,7 @@ quint32 QHttp2ProtocolHandler::allocateStreamID() { // With protocol upgrade streamID == 1 will become // invalid. The logic must be updated. - if (nextID > quint32(std::numeric_limits<qint32>::max())) + if (nextID > Http2::lastValidStreamID) return 0; const quint32 streamID = nextID; @@ -1184,6 +1298,114 @@ quint32 QHttp2ProtocolHandler::allocateStreamID() return streamID; } +bool QHttp2ProtocolHandler::tryReserveStream(const Http2::Frame &pushPromiseFrame, + const HPack::HttpHeader &requestHeader) +{ + Q_ASSERT(pushPromiseFrame.type() == FrameType::PUSH_PROMISE); + + QMap<QByteArray, QByteArray> pseudoHeaders; + for (const auto &field : requestHeader) { + if (field.name == ":scheme" || field.name == ":path" + || field.name == ":authority" || field.name == ":method") { + if (field.value.isEmpty() || pseudoHeaders.contains(field.name)) + return false; + pseudoHeaders[field.name] = field.value; + } + } + + if (pseudoHeaders.size() != 4) { + // All four required, HTTP/2 8.1.2.3. + return false; + } + + const auto method = pseudoHeaders[":method"].toLower(); + if (method != "get" && method != "head") + return false; + + QUrl url; + url.setScheme(QLatin1String(pseudoHeaders[":scheme"])); + url.setAuthority(QLatin1String(pseudoHeaders[":authority"])); + url.setPath(QLatin1String(pseudoHeaders[":path"])); + + if (!url.isValid()) + return false; + + Q_ASSERT(activeStreams.contains(pushPromiseFrame.streamID())); + const Stream &associatedStream = activeStreams[pushPromiseFrame.streamID()]; + + const auto associatedUrl = urlkey_from_request(associatedStream.request()); + if (url.adjusted(QUrl::RemovePath) != associatedUrl.adjusted(QUrl::RemovePath)) + return false; + + const auto urlKey = url.toString(); + if (promisedData.contains(urlKey)) // duplicate push promise + return false; + + const auto reservedID = qFromBigEndian<quint32>(pushPromiseFrame.dataBegin()); + // By this time all sanity checks on reservedID were done already + // in handlePUSH_PROMISE. We do not repeat them, only those below: + Q_ASSERT(!activeStreams.contains(reservedID)); + Q_ASSERT(!streamWasReset(reservedID)); + + auto &promise = promisedData[urlKey]; + promise.reservedID = reservedID; + promise.pushHeader = requestHeader; + + activeStreams.insert(reservedID, Stream(urlKey, reservedID, streamInitialRecvWindowSize)); + return true; +} + +void QHttp2ProtocolHandler::resetPromisedStream(const Frame &pushPromiseFrame, + Http2::Http2Error reason) +{ + Q_ASSERT(pushPromiseFrame.type() == FrameType::PUSH_PROMISE); + const auto reservedID = qFromBigEndian<quint32>(pushPromiseFrame.dataBegin()); + sendRST_STREAM(reservedID, reason); + markAsReset(reservedID); +} + +void QHttp2ProtocolHandler::initReplyFromPushPromise(const HttpMessagePair &message, + const QString &cacheKey) +{ + Q_ASSERT(promisedData.contains(cacheKey)); + auto promise = promisedData.take(cacheKey); + + qCDebug(QT_HTTP2) << "found cached/promised response on stream" << promise.reservedID; + + bool replyFinished = false; + Stream *promisedStream = nullptr; + if (activeStreams.contains(promise.reservedID)) { + promisedStream = &activeStreams[promise.reservedID]; + // Ok, we have an active (not closed yet) stream waiting for more frames, + // let's pretend we requested it: + promisedStream->httpPair = message; + } else { + // Let's pretent we're sending a request now: + Stream closedStream(message, promise.reservedID, + streamInitialSendWindowSize, + streamInitialRecvWindowSize); + closedStream.state = Stream::halfClosedLocal; + activeStreams.insert(promise.reservedID, closedStream); + promisedStream = &activeStreams[promise.reservedID]; + replyFinished = true; + } + + Q_ASSERT(promisedStream); + + if (!promise.responseHeader.empty()) + updateStream(*promisedStream, promise.responseHeader, Qt::QueuedConnection); + + for (const auto &frame : promise.dataFrames) + updateStream(*promisedStream, frame, Qt::QueuedConnection); + + if (replyFinished) { + // Good, we already have received ALL the frames of that PUSH_PROMISE, + // nothing more to do. + finishStream(*promisedStream, Qt::QueuedConnection); + deleteActiveStream(promisedStream->streamID); + } +} + void QHttp2ProtocolHandler::connectionError(Http2::Http2Error errorCode, const char *message) { diff --git a/src/network/access/qhttp2protocolhandler_p.h b/src/network/access/qhttp2protocolhandler_p.h index 92c6851078..df0cf6a288 100644 --- a/src/network/access/qhttp2protocolhandler_p.h +++ b/src/network/access/qhttp2protocolhandler_p.h @@ -63,6 +63,7 @@ #include "http2/hpacktable_p.h" #include "http2/hpack_p.h" +#include <QtCore/qnamespace.h> #include <QtCore/qbytearray.h> #include <QtCore/qglobal.h> #include <QtCore/qobject.h> @@ -123,9 +124,11 @@ private: bool acceptSetting(Http2::Settings identifier, quint32 newValue); - void updateStream(Stream &stream, const HPack::HttpHeader &headers); - void updateStream(Stream &stream, const Http2::Frame &dataFrame); - void finishStream(Stream &stream); + void updateStream(Stream &stream, const HPack::HttpHeader &headers, + Qt::ConnectionType connectionType = Qt::DirectConnection); + void updateStream(Stream &stream, const Http2::Frame &dataFrame, + Qt::ConnectionType connectionType = Qt::DirectConnection); + void finishStream(Stream &stream, Qt::ConnectionType connectionType = Qt::DirectConnection); // Error code send by a peer (GOAWAY/RST_STREAM): void finishStreamWithError(Stream &stream, quint32 errorCode); // Locally encountered error: @@ -194,7 +197,15 @@ private: quint32 allocateStreamID(); bool validPeerStreamID() const; bool goingAway = false; - + bool pushPromiseEnabled = false; + quint32 lastPromisedID = Http2::connectionStreamID; + QHash<QString, Http2::PushPromise> promisedData; + bool tryReserveStream(const Http2::Frame &pushPromiseFrame, + const HPack::HttpHeader &requestHeader); + void resetPromisedStream(const Http2::Frame &pushPromiseFrame, + Http2::Http2Error reason); + void initReplyFromPushPromise(const HttpMessagePair &message, + const QString &cacheKey); // Errors: void connectionError(Http2::Http2Error errorCode, const char *message); diff --git a/src/network/access/qnetworkreplyhttpimpl.cpp b/src/network/access/qnetworkreplyhttpimpl.cpp index f70f11d384..00f3468ebd 100644 --- a/src/network/access/qnetworkreplyhttpimpl.cpp +++ b/src/network/access/qnetworkreplyhttpimpl.cpp @@ -244,7 +244,8 @@ QNetworkReplyHttpImpl::QNetworkReplyHttpImpl(QNetworkAccessManager* const manage QNetworkReplyHttpImpl::~QNetworkReplyHttpImpl() { - // Most work is done in private destructor + // This will do nothing if the request was already finished or aborted + emit abortHttpRequest(); } void QNetworkReplyHttpImpl::close() @@ -442,9 +443,6 @@ QNetworkReplyHttpImplPrivate::QNetworkReplyHttpImplPrivate() QNetworkReplyHttpImplPrivate::~QNetworkReplyHttpImplPrivate() { - Q_Q(QNetworkReplyHttpImpl); - // This will do nothing if the request was already finished or aborted - emit q->abortHttpRequest(); } /* diff --git a/src/network/bearer/qnetworksession.cpp b/src/network/bearer/qnetworksession.cpp index 6d864a7d3e..2ad46918b2 100644 --- a/src/network/bearer/qnetworksession.cpp +++ b/src/network/bearer/qnetworksession.cpp @@ -48,6 +48,11 @@ #include "qnetworkconfigmanager_p.h" +// for QNetworkSession::interface +#ifdef interface +# undef interface +#endif + #ifndef QT_NO_BEARERMANAGEMENT QT_BEGIN_NAMESPACE diff --git a/src/network/configure.json b/src/network/configure.json index 97bf92167d..124fa1718f 100644 --- a/src/network/configure.json +++ b/src/network/configure.json @@ -60,7 +60,14 @@ }, "condition": "config.win32 && !features.shared" }, - { "libs": "-lssleay32 -llibeay32", "condition": "config.win32 && features.shared" }, + { + "libs": "-lssleay32 -llibeay32", + "builds": { + "debug": "", + "release": "" + }, + "condition": "config.win32 && features.shared" + }, { "libs": "-lssl -lcrypto", "condition": "!config.win32" } ] } diff --git a/src/network/doc/src/external-resources.qdoc b/src/network/doc/src/external-resources.qdoc new file mode 100644 index 0000000000..f033ddc729 --- /dev/null +++ b/src/network/doc/src/external-resources.qdoc @@ -0,0 +1,36 @@ +/**************************************************************************** +** +** 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:FDL$ +** 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 Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \externalpage https://www.openssl.org/ + \title OpenSSL Toolkit +*/ + +/*! + \externalpage https://www.openssl.org/source/license.html + \title OpenSSL License +*/ diff --git a/src/network/doc/src/qtnetwork.qdoc b/src/network/doc/src/qtnetwork.qdoc index f15b180625..7a95195da2 100644 --- a/src/network/doc/src/qtnetwork.qdoc +++ b/src/network/doc/src/qtnetwork.qdoc @@ -60,7 +60,37 @@ \list \li \l{Qt Network C++ Classes}{C++ Classes} \endlist + + \section1 Licenses and Attributions + + Qt Network is available under commercial licenses from \l{The Qt Company}. + In addition, it is available under the + \l{GNU Lesser General Public License, version 3}, or + the \l{GNU General Public License, version 2}. + See \l{Qt Licensing} for further details. + + Qt Network can use the \l{OpenSSL Toolkit} as a backend. The library is then + linked against OpenSSL in a way that requires compliance with the \l{OpenSSL + License}. To allow linking OpenSSL with Qt Network under the GPL, following + exceptions to the GPL do apply: + + \badcode + In addition, as a special exception, the copyright holders listed above give + permission to link the code of its release of Qt with the OpenSSL project's + "OpenSSL" library (or modified versions of the "OpenSSL" library that use the + same license as the original version), and distribute the linked executables. + + You must comply with the GNU General Public License version 2 in all + respects for all of the code used other than the "OpenSSL" code. If you + modify this file, you may extend this exception to your version of the file, + but you are not obligated to do so. If you do not wish to do so, delete + this exception statement from your version of this file. + \endcode + + Also note shipping OpenSSL might cause \l{Import and Export Restrictions} + to apply. */ + /*! \module QtNetwork \title Qt Network C++ Classes diff --git a/src/network/doc/src/ssl.qdoc b/src/network/doc/src/ssl.qdoc index 5ad2cfafc6..e4948c393c 100644 --- a/src/network/doc/src/ssl.qdoc +++ b/src/network/doc/src/ssl.qdoc @@ -33,7 +33,7 @@ \keyword SSL The classes below provide support for secure network communication using - the Secure Sockets Layer (SSL) protocol, using the OpenSSL Toolkit (\l{http://www.openssl.org/}) + the Secure Sockets Layer (SSL) protocol, using the \l{OpenSSL Toolkit} to perform encryption and protocol handling. From Qt version 5.2 onwards, the officially supported version for OpenSSL @@ -67,16 +67,13 @@ To disable SSL support in a Qt build, configure Qt with the \c{-no-openssl} option. - \section1 Licensing Information + \section1 Import and Export Restrictions - \note Due to import and export restrictions in some parts of the world, we + Due to import and export restrictions in some parts of the world, we are unable to supply the OpenSSL Toolkit with Qt packages. Developers wishing to use SSL communication in their deployed applications should either ensure that their users have the appropriate libraries installed, or they should consult a suitably qualified legal professional to ensure that applications using code from the OpenSSL project are correctly certified for import and export in relevant regions of the world. - - When the Qt Network module is built with SSL support, the library is linked - against OpenSSL in a way that requires OpenSSL license compliance. */ diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp index 34a8025cdd..02bba2d293 100644 --- a/src/network/socket/qabstractsocket.cpp +++ b/src/network/socket/qabstractsocket.cpp @@ -850,7 +850,7 @@ bool QAbstractSocketPrivate::writeToSocket() const char *ptr = writeBuffer.readPointer(); // Attempt to write it all in one chunk. - qint64 written = socketEngine->write(ptr, nextSize); + qint64 written = nextSize ? socketEngine->write(ptr, nextSize) : Q_INT64_C(0); if (written < 0) { #if defined (QABSTRACTSOCKET_DEBUG) qDebug() << "QAbstractSocketPrivate::writeToSocket() write error, aborting." @@ -2504,7 +2504,7 @@ qint64 QAbstractSocket::writeData(const char *data, qint64 size) if (!d->isBuffered && d->socketType == TcpSocket && d->socketEngine && d->writeBuffer.isEmpty()) { // This code is for the new Unbuffered QTcpSocket use case - qint64 written = d->socketEngine->write(data, size); + qint64 written = size ? d->socketEngine->write(data, size) : Q_INT64_C(0); if (written < 0) { d->setError(d->socketEngine->error(), d->socketEngine->errorString()); } else if (written < size) { diff --git a/src/network/socket/qnativesocketengine.cpp b/src/network/socket/qnativesocketengine.cpp index f2bc3cec94..11d19682d8 100644 --- a/src/network/socket/qnativesocketengine.cpp +++ b/src/network/socket/qnativesocketengine.cpp @@ -873,6 +873,10 @@ qint64 QNativeSocketEngine::writeDatagram(const char *data, qint64 size, const Q /*! Writes a block of \a size bytes from \a data to the socket. Returns the number of bytes written, or -1 if an error occurred. + + Passing zero as the \a size parameter on a connected UDP socket + will send an empty datagram. For other socket types results are + unspecified. */ qint64 QNativeSocketEngine::write(const char *data, qint64 size) { diff --git a/src/network/socket/qnativesocketengine_winrt.cpp b/src/network/socket/qnativesocketengine_winrt.cpp index bd9b443602..f8e92d3f50 100644 --- a/src/network/socket/qnativesocketengine_winrt.cpp +++ b/src/network/socket/qnativesocketengine_winrt.cpp @@ -317,26 +317,31 @@ bool QNativeSocketEngine::initialize(qintptr socketDescriptor, QAbstractSocket:: // Start processing incoming data if (d->socketType == QAbstractSocket::TcpSocket) { HRESULT hr; - QEventDispatcherWinRT::runOnXamlThread([d, &hr, socket, this]() { + QEventDispatcherWinRT::runOnXamlThread([&hr, socket, socketState, this]() { + Q_D(QNativeSocketEngine); ComPtr<IBuffer> buffer; HRESULT hr = g->bufferFactory->Create(READ_BUFFER_SIZE, &buffer); RETURN_OK_IF_FAILED("initialize(): Could not create buffer"); ComPtr<IInputStream> stream; hr = socket->get_InputStream(&stream); RETURN_OK_IF_FAILED("initialize(): Could not obtain input stream"); - hr = stream->ReadAsync(buffer.Get(), READ_BUFFER_SIZE, InputStreamOptions_Partial, d->readOp.GetAddressOf()); + ComPtr<IAsyncBufferOperation> readOp; + hr = stream->ReadAsync(buffer.Get(), READ_BUFFER_SIZE, InputStreamOptions_Partial, readOp.GetAddressOf()); RETURN_OK_IF_FAILED_WITH_ARGS("initialize(): Failed to read from the socket buffer (%s).", socketDescription(this).constData()); - hr = d->readOp->put_Completed(Callback<SocketReadCompletedHandler>(d, &QNativeSocketEnginePrivate::handleReadyRead).Get()); + d->pendingReadOps.append(readOp); + d->socketState = socketState; + hr = readOp->put_Completed(Callback<SocketReadCompletedHandler>(d, &QNativeSocketEnginePrivate::handleReadyRead).Get()); RETURN_OK_IF_FAILED_WITH_ARGS("initialize(): Failed to set socket read callback (%s).", socketDescription(this).constData()); return S_OK; }); if (FAILED(hr)) return false; + } else { + d->socketState = socketState; } - d->socketState = socketState; return true; } @@ -556,10 +561,12 @@ void QNativeSocketEngine::close() ComPtr<IAsyncAction> action; hr = socket3->CancelIOAsync(&action); Q_ASSERT_SUCCEEDED(hr); - hr = QWinRTFunctions::await(action); + hr = QWinRTFunctions::await(action, QWinRTFunctions::YieldThread, 5000); // If there is no pending IO (no read established before) the function will fail with // "function was called at an unexpected time" which is fine. - if (hr != E_ILLEGAL_METHOD_CALL) + // Timeout is fine as well. The result will be the socket being hard reset instead of + // being closed gracefully + if (hr != E_ILLEGAL_METHOD_CALL && hr != ERROR_TIMEOUT) Q_ASSERT_SUCCEEDED(hr); return S_OK; }); @@ -567,9 +574,9 @@ void QNativeSocketEngine::close() } #endif // _MSC_VER >= 1900 - if (d->readOp) { + for (ComPtr<IAsyncBufferOperation> readOp : d->pendingReadOps) { ComPtr<IAsyncInfo> info; - hr = d->readOp.As(&info); + hr = readOp.As(&info); Q_ASSERT_SUCCEEDED(hr); if (info) { hr = info->Cancel(); @@ -933,9 +940,11 @@ void QNativeSocketEngine::establishRead() hr = g->bufferFactory->Create(READ_BUFFER_SIZE, &buffer); RETURN_HR_IF_FAILED("establishRead(): Failed to create buffer"); - hr = stream->ReadAsync(buffer.Get(), READ_BUFFER_SIZE, InputStreamOptions_Partial, &d->readOp); + ComPtr<IAsyncBufferOperation> readOp; + hr = stream->ReadAsync(buffer.Get(), READ_BUFFER_SIZE, InputStreamOptions_Partial, readOp.GetAddressOf()); RETURN_HR_IF_FAILED("establishRead(): Failed to initiate socket read"); - hr = d->readOp->put_Completed(Callback<SocketReadCompletedHandler>(d, &QNativeSocketEnginePrivate::handleReadyRead).Get()); + d->pendingReadOps.append(readOp); + hr = readOp->put_Completed(Callback<SocketReadCompletedHandler>(d, &QNativeSocketEnginePrivate::handleReadyRead).Get()); RETURN_HR_IF_FAILED("establishRead(): Failed to register read callback"); return S_OK; }); @@ -1410,7 +1419,15 @@ HRESULT QNativeSocketEnginePrivate::handleReadyRead(IAsyncBufferOperation *async } Q_Q(QNativeSocketEngine); + for (int i = 0; i < pendingReadOps.count(); ++i) { + if (pendingReadOps.at(i).Get() == asyncInfo) { + pendingReadOps.takeAt(i); + break; + } + } + static QMutex mutex; + mutex.lock(); // A read in UnconnectedState will close the socket and return -1 and thus tell the caller, // that the connection was closed. The socket cannot be closed here, as the subsequent read // might fail then. @@ -1463,6 +1480,7 @@ HRESULT QNativeSocketEnginePrivate::handleReadyRead(IAsyncBufferOperation *async if (notifyOnRead) emit q->readReady(); + mutex.unlock(); hr = QEventDispatcherWinRT::runOnXamlThread([buffer, q, this]() { UINT32 readBufferLength; @@ -1476,12 +1494,14 @@ HRESULT QNativeSocketEnginePrivate::handleReadyRead(IAsyncBufferOperation *async hr = buffer->put_Length(0); RETURN_HR_IF_FAILED("handleReadyRead(): Could not set buffer length"); + ComPtr<IAsyncBufferOperation> readOp; hr = stream->ReadAsync(buffer.Get(), readBufferLength, InputStreamOptions_Partial, &readOp); if (FAILED(hr)) { qErrnoWarning(hr, "handleReadyRead(): Could not read into socket stream buffer (%s).", socketDescription(q).constData()); return S_OK; } + pendingReadOps.append(readOp); hr = readOp->put_Completed(Callback<SocketReadCompletedHandler>(this, &QNativeSocketEnginePrivate::handleReadyRead).Get()); if (FAILED(hr)) { qErrnoWarning(hr, "handleReadyRead(): Failed to set socket read callback (%s).", diff --git a/src/network/socket/qnativesocketengine_winrt_p.h b/src/network/socket/qnativesocketengine_winrt_p.h index 605f3631b9..79530d57f1 100644 --- a/src/network/socket/qnativesocketengine_winrt_p.h +++ b/src/network/socket/qnativesocketengine_winrt_p.h @@ -214,7 +214,7 @@ private: { return reinterpret_cast<ABI::Windows::Networking::Sockets::IDatagramSocket *>(socketDescriptor); } Microsoft::WRL::ComPtr<ABI::Windows::Networking::Sockets::IStreamSocketListener> tcpListener; Microsoft::WRL::ComPtr<ABI::Windows::Foundation::IAsyncAction> connectOp; - Microsoft::WRL::ComPtr<ABI::Windows::Foundation::IAsyncOperationWithProgress<ABI::Windows::Storage::Streams::IBuffer *, UINT32>> readOp; + QVector<Microsoft::WRL::ComPtr<ABI::Windows::Foundation::IAsyncOperationWithProgress<ABI::Windows::Storage::Streams::IBuffer *, UINT32>>> pendingReadOps; QBuffer readBytes; QMutex readMutex; bool emitOnNewDatagram; diff --git a/src/network/ssl/ssl.pri b/src/network/ssl/ssl.pri index 8139af50af..79351017a6 100644 --- a/src/network/ssl/ssl.pri +++ b/src/network/ssl/ssl.pri @@ -79,6 +79,8 @@ qtConfig(ssl) { # - libs in <OPENSSL_DIR>\lib\VC\static # - configure: -openssl -openssl-linked -I <OPENSSL_DIR>\include -L <OPENSSL_DIR>\lib\VC\static OPENSSL_LIBS="-lUser32 -lAdvapi32 -lGdi32" OPENSSL_LIBS_DEBUG="-lssleay32MDd -llibeay32MDd" OPENSSL_LIBS_RELEASE="-lssleay32MD -llibeay32MD" + include($$OUT_PWD/qtnetwork-config.pri) + CONFIG(debug, debug|release) { LIBS_PRIVATE += $$OPENSSL_LIBS_DEBUG } else { diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 5aa807b12c..42baf448ac 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -1293,14 +1293,19 @@ QGLFormat::OpenGLVersionFlags Q_AUTOTEST_EXPORT qOpenGLVersionFlagsFromString(co switch (versionString[2].toLatin1()) { case '5': versionFlags |= QGLFormat::OpenGL_Version_1_5; + // fall through case '4': versionFlags |= QGLFormat::OpenGL_Version_1_4; + // fall through case '3': versionFlags |= QGLFormat::OpenGL_Version_1_3; + // fall through case '2': versionFlags |= QGLFormat::OpenGL_Version_1_2; + // fall through case '1': versionFlags |= QGLFormat::OpenGL_Version_1_1; + // fall through default: break; } @@ -1325,10 +1330,13 @@ QGLFormat::OpenGLVersionFlags Q_AUTOTEST_EXPORT qOpenGLVersionFlagsFromString(co switch (versionString[2].toLatin1()) { case '3': versionFlags |= QGLFormat::OpenGL_Version_3_3; + // fall through case '2': versionFlags |= QGLFormat::OpenGL_Version_3_2; + // fall through case '1': versionFlags |= QGLFormat::OpenGL_Version_3_1; + // fall through case '0': break; default: @@ -1353,10 +1361,13 @@ QGLFormat::OpenGLVersionFlags Q_AUTOTEST_EXPORT qOpenGLVersionFlagsFromString(co switch (versionString[2].toLatin1()) { case '3': versionFlags |= QGLFormat::OpenGL_Version_4_3; + // fall through case '2': versionFlags |= QGLFormat::OpenGL_Version_4_2; + // fall through case '1': versionFlags |= QGLFormat::OpenGL_Version_4_1; + // fall through case '0': break; default: diff --git a/src/platformheaders/nativecontexts/qeglnativecontext.h b/src/platformheaders/nativecontexts/qeglnativecontext.h index 67a6d2b808..697b3ef3fd 100644 --- a/src/platformheaders/nativecontexts/qeglnativecontext.h +++ b/src/platformheaders/nativecontexts/qeglnativecontext.h @@ -41,7 +41,7 @@ #define QEGLNATIVECONTEXT_H #include <QtCore/QMetaType> -#include <QtPlatformSupport/private/qt_egl_p.h> +#include <QtEglSupport/private/qt_egl_p.h> QT_BEGIN_NAMESPACE diff --git a/src/platformsupport/accessibility/accessibility.pri b/src/platformsupport/accessibility/accessibility.pri deleted file mode 100644 index 924f6a512f..0000000000 --- a/src/platformsupport/accessibility/accessibility.pri +++ /dev/null @@ -1,9 +0,0 @@ -qtConfig(accessibility) { - INCLUDEPATH += $$PWD - - HEADERS += \ - $$PWD/qaccessiblebridgeutils_p.h - - SOURCES += \ - $$PWD/qaccessiblebridgeutils.cpp -} diff --git a/src/platformsupport/accessibility/accessibility.pro b/src/platformsupport/accessibility/accessibility.pro new file mode 100644 index 0000000000..5004dc8cbe --- /dev/null +++ b/src/platformsupport/accessibility/accessibility.pro @@ -0,0 +1,16 @@ +TARGET = QtAccessibilitySupport +MODULE = accessibility_support + +QT = core-private gui-private +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +HEADERS += \ + qaccessiblebridgeutils_p.h + +SOURCES += \ + qaccessiblebridgeutils.cpp + +load(qt_module) diff --git a/src/platformsupport/accessibility/qaccessiblebridgeutils.cpp b/src/platformsupport/accessibility/qaccessiblebridgeutils.cpp index 935cff3e6c..f280e65c29 100644 --- a/src/platformsupport/accessibility/qaccessiblebridgeutils.cpp +++ b/src/platformsupport/accessibility/qaccessiblebridgeutils.cpp @@ -39,8 +39,6 @@ #include "qaccessiblebridgeutils_p.h" #include <QtCore/qmath.h> -#ifndef QT_NO_ACCESSIBILITY - QT_BEGIN_NAMESPACE namespace QAccessibleBridgeUtils { @@ -113,5 +111,3 @@ bool performEffectiveAction(QAccessibleInterface *iface, const QString &actionNa } //namespace QT_END_NAMESPACE - -#endif diff --git a/src/platformsupport/accessibility/qaccessiblebridgeutils_p.h b/src/platformsupport/accessibility/qaccessiblebridgeutils_p.h index 79b153a749..cf8e126894 100644 --- a/src/platformsupport/accessibility/qaccessiblebridgeutils_p.h +++ b/src/platformsupport/accessibility/qaccessiblebridgeutils_p.h @@ -51,10 +51,12 @@ // We mean it. // +#include <QtGui/private/qtguiglobal_p.h> + #include <QtCore/qstringlist.h> #include <QtGui/qaccessible.h> -#ifndef QT_NO_ACCESSIBILITY +QT_REQUIRE_CONFIG(accessibility); QT_BEGIN_NAMESPACE @@ -65,6 +67,4 @@ namespace QAccessibleBridgeUtils { QT_END_NAMESPACE -#endif - #endif //QACCESSIBLEBRIDGEUTILS_H diff --git a/src/platformsupport/cglconvenience/cglconvenience.pri b/src/platformsupport/cglconvenience/cglconvenience.pri deleted file mode 100644 index 1de38bbd08..0000000000 --- a/src/platformsupport/cglconvenience/cglconvenience.pri +++ /dev/null @@ -1,11 +0,0 @@ -osx { - INCLUDEPATH += $$PWD - - HEADERS += \ - $$PWD/cglconvenience_p.h - - OBJECTIVE_SOURCES += \ - $$PWD/cglconvenience.mm - - LIBS_PRIVATE += -framework AppKit -framework OpenGL -} diff --git a/src/platformsupport/cglconvenience/cglconvenience.pro b/src/platformsupport/cglconvenience/cglconvenience.pro new file mode 100644 index 0000000000..0422a844aa --- /dev/null +++ b/src/platformsupport/cglconvenience/cglconvenience.pro @@ -0,0 +1,18 @@ +TARGET = QtCglSupport +MODULE = cgl_support + +QT = core-private gui +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +HEADERS += \ + cglconvenience_p.h + +OBJECTIVE_SOURCES += \ + cglconvenience.mm + +LIBS_PRIVATE += -framework AppKit -framework OpenGL + +load(qt_module) diff --git a/src/platformsupport/clipboard/clipboard.pri b/src/platformsupport/clipboard/clipboard.pri deleted file mode 100644 index cb8315d003..0000000000 --- a/src/platformsupport/clipboard/clipboard.pri +++ /dev/null @@ -1,7 +0,0 @@ -mac { - HEADERS += $$PWD/qmacmime_p.h - OBJECTIVE_SOURCES += $$PWD/qmacmime.mm - - osx: LIBS_PRIVATE += -framework AppKit -} - diff --git a/src/platformsupport/clipboard/clipboard.pro b/src/platformsupport/clipboard/clipboard.pro new file mode 100644 index 0000000000..336d81fe46 --- /dev/null +++ b/src/platformsupport/clipboard/clipboard.pro @@ -0,0 +1,15 @@ +TARGET = QtClipboardSupport +MODULE = clipboard_support + +QT = core-private gui +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +HEADERS += qmacmime_p.h +SOURCES += qmacmime.mm + +macos: LIBS_PRIVATE += -framework AppKit + +load(qt_module) diff --git a/src/platformsupport/clipboard/qmacmime.mm b/src/platformsupport/clipboard/qmacmime.mm index d48da8da15..6a6e033bec 100644 --- a/src/platformsupport/clipboard/qmacmime.mm +++ b/src/platformsupport/clipboard/qmacmime.mm @@ -414,8 +414,7 @@ QVariant QMacPasteboardMimeUnicodeText::convertToMime(const QString &mimetype, Q if (flavor == QLatin1String("public.utf8-plain-text")) { ret = QString::fromUtf8(firstData); } else if (flavor == QLatin1String("public.utf16-plain-text")) { - ret = QString(reinterpret_cast<const QChar *>(firstData.constData()), - firstData.size() / sizeof(QChar)); + ret = QTextCodec::codecForName("UTF-16")->toUnicode(firstData); } else { qWarning("QMime::convertToMime: unhandled mimetype: %s", qPrintable(mimetype)); } @@ -429,7 +428,7 @@ QList<QByteArray> QMacPasteboardMimeUnicodeText::convertFromMime(const QString & if (flavor == QLatin1String("public.utf8-plain-text")) ret.append(string.toUtf8()); else if (flavor == QLatin1String("public.utf16-plain-text")) - ret.append(QByteArray((char*)string.utf16(), string.length()*2)); + ret.append(QTextCodec::codecForName("UTF-16")->fromUnicode(string)); return ret; } diff --git a/src/platformsupport/devicediscovery/devicediscovery.pri b/src/platformsupport/devicediscovery/devicediscovery.pri deleted file mode 100644 index f4e9103130..0000000000 --- a/src/platformsupport/devicediscovery/devicediscovery.pri +++ /dev/null @@ -1,13 +0,0 @@ -HEADERS += $$PWD/qdevicediscovery_p.h - -qtConfig(libudev) { - SOURCES += $$PWD/qdevicediscovery_udev.cpp - HEADERS += $$PWD/qdevicediscovery_udev_p.h - QMAKE_USE_PRIVATE += libudev -} else: qtConfig(evdev) { - SOURCES += $$PWD/qdevicediscovery_static.cpp - HEADERS += $$PWD/qdevicediscovery_static_p.h -} else { - SOURCES += $$PWD/qdevicediscovery_dummy.cpp - HEADERS += $$PWD/qdevicediscovery_dummy_p.h -} diff --git a/src/platformsupport/devicediscovery/devicediscovery.pro b/src/platformsupport/devicediscovery/devicediscovery.pro new file mode 100644 index 0000000000..b429b8b97e --- /dev/null +++ b/src/platformsupport/devicediscovery/devicediscovery.pro @@ -0,0 +1,25 @@ +TARGET = QtDeviceDiscoverySupport +MODULE = devicediscovery_support + +QT = core-private +QT_FOR_CONFIG += gui-private +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +HEADERS += qdevicediscovery_p.h + +qtConfig(libudev) { + SOURCES += qdevicediscovery_udev.cpp + HEADERS += qdevicediscovery_udev_p.h + QMAKE_USE_PRIVATE += libudev +} else: qtConfig(evdev) { + SOURCES += qdevicediscovery_static.cpp + HEADERS += qdevicediscovery_static_p.h +} else { + SOURCES += qdevicediscovery_dummy.cpp + HEADERS += qdevicediscovery_dummy_p.h +} + +load(qt_module) diff --git a/src/platformsupport/eglconvenience/eglconvenience.pri b/src/platformsupport/eglconvenience/eglconvenience.pri deleted file mode 100644 index 4a93d997fb..0000000000 --- a/src/platformsupport/eglconvenience/eglconvenience.pri +++ /dev/null @@ -1,32 +0,0 @@ -qtConfig(egl) { - HEADERS += \ - $$PWD/qeglconvenience_p.h \ - $$PWD/qeglstreamconvenience_p.h \ - $$PWD/qt_egl_p.h - - SOURCES += \ - $$PWD/qeglconvenience.cpp \ - $$PWD/qeglstreamconvenience.cpp - - qtConfig(opengl) { - HEADERS += $$PWD/qeglplatformcontext_p.h \ - $$PWD/qeglpbuffer_p.h - - SOURCES += $$PWD/qeglplatformcontext.cpp \ - $$PWD/qeglpbuffer.cpp - } - - # Avoid X11 header collision, use generic EGL native types - DEFINES += QT_EGL_NO_X11 - - qtConfig(xlib) { - HEADERS += \ - $$PWD/qxlibeglintegration_p.h - SOURCES += \ - $$PWD/qxlibeglintegration.cpp - LIBS_PRIVATE += $$QMAKE_LIBS_X11 - } - CONFIG += egl - - LIBS_PRIVATE += $$QMAKE_LIBS_DYNLOAD -} diff --git a/src/platformsupport/eglconvenience/eglconvenience.pro b/src/platformsupport/eglconvenience/eglconvenience.pro new file mode 100644 index 0000000000..d364a42b3b --- /dev/null +++ b/src/platformsupport/eglconvenience/eglconvenience.pro @@ -0,0 +1,43 @@ +TARGET = QtEglSupport +MODULE = egl_support + +QT = core-private gui-private +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +HEADERS += \ + qeglconvenience_p.h \ + qeglstreamconvenience_p.h \ + qt_egl_p.h + +SOURCES += \ + qeglconvenience.cpp \ + qeglstreamconvenience.cpp + +qtConfig(opengl) { + HEADERS += \ + qeglplatformcontext_p.h \ + qeglpbuffer_p.h + + SOURCES += \ + qeglplatformcontext.cpp \ + qeglpbuffer.cpp +} + +# Avoid X11 header collision, use generic EGL native types +DEFINES += QT_EGL_NO_X11 + +qtConfig(xlib) { + HEADERS += \ + qxlibeglintegration_p.h + SOURCES += \ + qxlibeglintegration.cpp + LIBS_PRIVATE += $$QMAKE_LIBS_X11 +} +CONFIG += egl + +LIBS_PRIVATE += $$QMAKE_LIBS_DYNLOAD + +load(qt_module) diff --git a/src/platformsupport/eglconvenience/qeglconvenience_p.h b/src/platformsupport/eglconvenience/qeglconvenience_p.h index fdd21b8f19..ab2b813515 100644 --- a/src/platformsupport/eglconvenience/qeglconvenience_p.h +++ b/src/platformsupport/eglconvenience/qeglconvenience_p.h @@ -54,7 +54,7 @@ #include <QtGui/QSurfaceFormat> #include <QtCore/QVector> #include <QtCore/QSizeF> -#include <QtPlatformSupport/private/qt_egl_p.h> +#include <QtEglSupport/private/qt_egl_p.h> QT_BEGIN_NAMESPACE diff --git a/src/platformsupport/eglconvenience/qeglpbuffer_p.h b/src/platformsupport/eglconvenience/qeglpbuffer_p.h index 4f9ea9d5f3..38370c0e62 100644 --- a/src/platformsupport/eglconvenience/qeglpbuffer_p.h +++ b/src/platformsupport/eglconvenience/qeglpbuffer_p.h @@ -52,7 +52,7 @@ // #include <qpa/qplatformoffscreensurface.h> -#include <QtPlatformSupport/private/qeglplatformcontext_p.h> +#include <QtEglSupport/private/qeglplatformcontext_p.h> QT_BEGIN_NAMESPACE diff --git a/src/platformsupport/eglconvenience/qeglplatformcontext_p.h b/src/platformsupport/eglconvenience/qeglplatformcontext_p.h index f6b2b876f7..9d41eecd99 100644 --- a/src/platformsupport/eglconvenience/qeglplatformcontext_p.h +++ b/src/platformsupport/eglconvenience/qeglplatformcontext_p.h @@ -55,7 +55,7 @@ #include <qpa/qplatformwindow.h> #include <qpa/qplatformopenglcontext.h> #include <QtCore/QVariant> -#include <QtPlatformSupport/private/qt_egl_p.h> +#include <QtEglSupport/private/qt_egl_p.h> QT_BEGIN_NAMESPACE diff --git a/src/platformsupport/eglconvenience/qeglstreamconvenience_p.h b/src/platformsupport/eglconvenience/qeglstreamconvenience_p.h index a4c8245280..6c84f29613 100644 --- a/src/platformsupport/eglconvenience/qeglstreamconvenience_p.h +++ b/src/platformsupport/eglconvenience/qeglstreamconvenience_p.h @@ -52,7 +52,7 @@ // #include <qglobal.h> -#include <QtPlatformSupport/private/qt_egl_p.h> +#include <QtEglSupport/private/qt_egl_p.h> // This provides runtime EGLDevice/Output/Stream support even when eglext.h in // the sysroot is not up-to-date. diff --git a/src/platformsupport/eventdispatchers/eventdispatchers.pri b/src/platformsupport/eventdispatchers/eventdispatchers.pri deleted file mode 100644 index fb0f3b3827..0000000000 --- a/src/platformsupport/eventdispatchers/eventdispatchers.pri +++ /dev/null @@ -1,21 +0,0 @@ -unix { -SOURCES +=\ - $$PWD/qunixeventdispatcher.cpp\ - $$PWD/qgenericunixeventdispatcher.cpp\ - -HEADERS +=\ - $$PWD/qunixeventdispatcher_qpa_p.h\ - $$PWD/qgenericunixeventdispatcher_p.h\ -} else: win32 { -SOURCES +=\ - $$PWD/qwindowsguieventdispatcher.cpp - -HEADERS +=\ - $$PWD/qwindowsguieventdispatcher_p.h -} - -qtConfig(glib) { - SOURCES +=$$PWD/qeventdispatcher_glib.cpp - HEADERS +=$$PWD/qeventdispatcher_glib_p.h - QMAKE_USE_PRIVATE += glib -} diff --git a/src/platformsupport/eventdispatchers/eventdispatchers.pro b/src/platformsupport/eventdispatchers/eventdispatchers.pro new file mode 100644 index 0000000000..9d3ac4bbc6 --- /dev/null +++ b/src/platformsupport/eventdispatchers/eventdispatchers.pro @@ -0,0 +1,32 @@ +TARGET = QtEventDispatcherSupport +MODULE = eventdispatcher_support + +QT = core-private gui-private +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +unix { + SOURCES += \ + qunixeventdispatcher.cpp \ + qgenericunixeventdispatcher.cpp + + HEADERS += \ + qunixeventdispatcher_qpa_p.h \ + qgenericunixeventdispatcher_p.h +} else { + SOURCES += \ + qwindowsguieventdispatcher.cpp + + HEADERS += \ + qwindowsguieventdispatcher_p.h +} + +qtConfig(glib) { + SOURCES += qeventdispatcher_glib.cpp + HEADERS += qeventdispatcher_glib_p.h + QMAKE_USE_PRIVATE += glib +} + +load(qt_module) diff --git a/src/platformsupport/fbconvenience/fbconvenience.pri b/src/platformsupport/fbconvenience/fbconvenience.pri deleted file mode 100644 index 4634f57fb4..0000000000 --- a/src/platformsupport/fbconvenience/fbconvenience.pri +++ /dev/null @@ -1,11 +0,0 @@ -SOURCES += $$PWD/qfbscreen.cpp \ - $$PWD/qfbbackingstore.cpp \ - $$PWD/qfbwindow.cpp \ - $$PWD/qfbcursor.cpp \ - $$PWD/qfbvthandler.cpp - -HEADERS += $$PWD/qfbscreen_p.h \ - $$PWD/qfbbackingstore_p.h \ - $$PWD/qfbwindow_p.h \ - $$PWD/qfbcursor_p.h \ - $$PWD/qfbvthandler_p.h diff --git a/src/platformsupport/fbconvenience/fbconvenience.pro b/src/platformsupport/fbconvenience/fbconvenience.pro new file mode 100644 index 0000000000..3775906470 --- /dev/null +++ b/src/platformsupport/fbconvenience/fbconvenience.pro @@ -0,0 +1,24 @@ +TARGET = QtFbSupport +MODULE = fb_support + +QT = core-private gui-private +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +SOURCES += \ + qfbscreen.cpp \ + qfbbackingstore.cpp \ + qfbwindow.cpp \ + qfbcursor.cpp \ + qfbvthandler.cpp + +HEADERS += \ + qfbscreen_p.h \ + qfbbackingstore_p.h \ + qfbwindow_p.h \ + qfbcursor_p.h \ + qfbvthandler_p.h + +load(qt_module) diff --git a/src/platformsupport/fontdatabases/basic/basic.pri b/src/platformsupport/fontdatabases/basic/basic.pri index 575c93fe20..c50dba3ce2 100644 --- a/src/platformsupport/fontdatabases/basic/basic.pri +++ b/src/platformsupport/fontdatabases/basic/basic.pri @@ -6,4 +6,4 @@ SOURCES += \ $$PWD/qbasicfontdatabase.cpp \ $$QT_SOURCE_TREE/src/gui/text/qfontengine_ft.cpp -include($$QT_SOURCE_TREE/src/3rdparty/freetype_dependency.pri) +QMAKE_USE += freetype diff --git a/src/platformsupport/fontdatabases/fontconfig/fontconfig.pri b/src/platformsupport/fontdatabases/fontconfig/fontconfig.pri index 911f0c884d..6458464870 100644 --- a/src/platformsupport/fontdatabases/fontconfig/fontconfig.pri +++ b/src/platformsupport/fontdatabases/fontconfig/fontconfig.pri @@ -3,4 +3,4 @@ HEADERS += $$PWD/qfontconfigdatabase_p.h \ SOURCES += $$PWD/qfontconfigdatabase.cpp \ $$PWD/qfontenginemultifontconfig.cpp -QMAKE_USE += fontconfig/nolink +QMAKE_USE += fontconfig diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h index 244558b910..f7e3172b65 100644 --- a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h +++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h @@ -52,7 +52,7 @@ // #include <qpa/qplatformfontdatabase.h> -#include <QtPlatformSupport/private/qbasicfontdatabase_p.h> +#include <QtFontDatabaseSupport/private/qbasicfontdatabase_p.h> QT_BEGIN_NAMESPACE diff --git a/src/platformsupport/fontdatabases/fontdatabases.pri b/src/platformsupport/fontdatabases/fontdatabases.pri deleted file mode 100644 index d435359141..0000000000 --- a/src/platformsupport/fontdatabases/fontdatabases.pri +++ /dev/null @@ -1,15 +0,0 @@ -darwin { - include($$PWD/mac/coretext.pri) -} else { - qtConfig(freetype) { - include($$PWD/basic/basic.pri) - } - - unix { - CONFIG += qpa/genericunixfontdatabase - include($$PWD/genericunix/genericunix.pri) - qtConfig(fontconfig) { - include($$PWD/fontconfig/fontconfig.pri) - } - } -} diff --git a/src/platformsupport/fontdatabases/fontdatabases.pro b/src/platformsupport/fontdatabases/fontdatabases.pro new file mode 100644 index 0000000000..f2c0ae4d96 --- /dev/null +++ b/src/platformsupport/fontdatabases/fontdatabases.pro @@ -0,0 +1,29 @@ +TARGET = QtFontDatabaseSupport +MODULE = fontdatabase_support + +QT = core-private gui-private +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +darwin { + include($$PWD/mac/coretext.pri) +} else { + qtConfig(freetype) { + include($$PWD/basic/basic.pri) + } + + unix { + include($$PWD/genericunix/genericunix.pri) + qtConfig(fontconfig) { + include($$PWD/fontconfig/fontconfig.pri) + } + } + + win32:!winrt { + include($$PWD/windows/windows.pri) + } +} + +load(qt_module) diff --git a/src/platformsupport/fontdatabases/genericunix/qgenericunixfontdatabase_p.h b/src/platformsupport/fontdatabases/genericunix/qgenericunixfontdatabase_p.h index 043f831530..37c667eeb3 100644 --- a/src/platformsupport/fontdatabases/genericunix/qgenericunixfontdatabase_p.h +++ b/src/platformsupport/fontdatabases/genericunix/qgenericunixfontdatabase_p.h @@ -51,13 +51,13 @@ // We mean it. // -#include <QtCore/qglobal.h> +#include <QtGui/private/qtguiglobal_p.h> -#ifdef Q_FONTCONFIGDATABASE -#include <QtPlatformSupport/private/qfontconfigdatabase_p.h> +#if QT_CONFIG(fontconfig) +#include <QtFontDatabaseSupport/private/qfontconfigdatabase_p.h> typedef QFontconfigDatabase QGenericUnixFontDatabase; #else -#include <QtPlatformSupport/private/qbasicfontdatabase_p.h> +#include <QtFontDatabaseSupport/private/qbasicfontdatabase_p.h> typedef QBasicFontDatabase QGenericUnixFontDatabase; #endif //Q_FONTCONFIGDATABASE diff --git a/src/platformsupport/fontdatabases/mac/coretext.pri b/src/platformsupport/fontdatabases/mac/coretext.pri index e1132cfcbe..aed89ad8c7 100644 --- a/src/platformsupport/fontdatabases/mac/coretext.pri +++ b/src/platformsupport/fontdatabases/mac/coretext.pri @@ -2,7 +2,7 @@ HEADERS += $$PWD/qcoretextfontdatabase_p.h $$PWD/qfontengine_coretext_p.h OBJECTIVE_SOURCES += $$PWD/qfontengine_coretext.mm $$PWD/qcoretextfontdatabase.mm qtConfig(freetype) { - include($$QT_SOURCE_TREE/src/3rdparty/freetype_dependency.pri) + QMAKE_USE += freetype HEADERS += $$QT_SOURCE_TREE/src/gui/text/qfontengine_ft_p.h SOURCES += $$QT_SOURCE_TREE/src/gui/text/qfontengine_ft.cpp } diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp index 4f022141cf..434aa16d16 100644 --- a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp @@ -37,12 +37,10 @@ ** ****************************************************************************/ -#include "qwindowsfontdatabase.h" -#include "qwindowsfontdatabase_ft.h" // for default font -#include "qwindowscontext.h" -#include "qwindowsintegration.h" -#include "qwindowsfontengine.h" -#include "qwindowsfontenginedirectwrite.h" +#include "qwindowsfontdatabase_p.h" +#include "qwindowsfontdatabase_ft_p.h" // for default font +#include "qwindowsfontengine_p.h" +#include "qwindowsfontenginedirectwrite_p.h" #include <QtCore/qt_windows.h> #include <QtGui/QFont> @@ -69,6 +67,8 @@ QT_BEGIN_NAMESPACE +Q_LOGGING_CATEGORY(lcQpaFonts, "qt.qpa.fonts") + #ifndef QT_NO_DIRECTWRITE // ### fixme: Consider direct linking of dwrite.dll once Windows Vista pre SP2 is dropped (QTBUG-49711) @@ -110,13 +110,22 @@ static void createDirectWriteFactory(IDWriteFactory **factory) *factory = static_cast<IDWriteFactory *>(result); } -static inline bool useDirectWrite(QFont::HintingPreference hintingPreference, bool isColorFont = false) +static inline bool useDirectWrite(QFont::HintingPreference hintingPreference, + const QString &familyName = QString(), + bool isColorFont = false) { - const unsigned options = QWindowsIntegration::instance()->options(); - if (Q_UNLIKELY(options & QWindowsIntegration::DontUseDirectWriteFonts)) + const unsigned options = QWindowsFontDatabase::fontOptions(); + if (Q_UNLIKELY(options & QWindowsFontDatabase::DontUseDirectWriteFonts)) return false; + + // At some scales, GDI will misrender the MingLiU font, so we force use of + // DirectWrite to work around the issue. + if (Q_UNLIKELY(familyName.startsWith(QLatin1String("MingLiU")))) + return true; + if (isColorFont) - return (options & QWindowsIntegration::DontUseColorFonts) == 0; + return (options & QWindowsFontDatabase::DontUseColorFonts) == 0; + return hintingPreference == QFont::PreferNoHinting || hintingPreference == QFont::PreferVerticalHinting || (QHighDpiScaling::isActive() && hintingPreference == QFont::PreferDefaultHinting); @@ -602,6 +611,19 @@ QWindowsFontEngineData::QWindowsFontEngineData() ReleaseDC(0, displayDC); } +unsigned QWindowsFontDatabase::m_fontOptions = 0; + +void QWindowsFontDatabase::setFontOptions(unsigned options) +{ + m_fontOptions = options & (QWindowsFontDatabase::DontUseDirectWriteFonts | + QWindowsFontDatabase::DontUseColorFonts); +} + +unsigned QWindowsFontDatabase::fontOptions() +{ + return m_fontOptions; +} + QWindowsFontEngineData::~QWindowsFontEngineData() { if (hdc) @@ -984,7 +1006,7 @@ static bool addFontToDatabase(const QString &familyName, const QString &styleNam const QFont::Stretch stretch = QFont::Unstretched; #ifndef QT_NO_DEBUG_OUTPUT - if (QWindowsContext::verbose > 2) { + if (lcQpaFonts().isDebugEnabled()) { QString message; QTextStream str(&message); str << __FUNCTION__ << ' ' << familyName << ' ' << charSet << " TTF=" << ttf; @@ -1206,7 +1228,7 @@ QFontEngineMulti *QWindowsFontDatabase::fontEngineMulti(QFontEngine *fontEngine, QFontEngine * QWindowsFontDatabase::fontEngine(const QFontDef &fontDef, void *handle) { QFontEngine *fe = QWindowsFontDatabase::createEngine(fontDef, - QWindowsContext::instance()->defaultDPI(), + defaultVerticalDPI(), sharedFontData()); qCDebug(lcQpaFonts) << __FUNCTION__ << "FONTDEF" << fontDef << fe << handle; return fe; @@ -1260,7 +1282,7 @@ QT_WARNING_POP request.stretch = QFont::Unstretched; fontEngine = QWindowsFontDatabase::createEngine(request, - QWindowsContext::instance()->defaultDPI(), + defaultVerticalDPI(), sharedFontData()); if (fontEngine) { @@ -1875,7 +1897,7 @@ QFontEngine *QWindowsFontDatabase::createEngine(const QFontDef &request, #endif const QFont::HintingPreference hintingPreference = static_cast<QFont::HintingPreference>(request.hintingPreference); - const bool useDw = useDirectWrite(hintingPreference, isColorFont); + const bool useDw = useDirectWrite(hintingPreference, fam, isColorFont); qCDebug(lcQpaFonts) << __FUNCTION__ << request.family << request.pointSize << "pt" << "hintingPreference=" << hintingPreference << "color=" << isColorFont << dpi << "dpi" << "useDirectWrite=" << useDw; @@ -1916,11 +1938,6 @@ QFontEngine *QWindowsFontDatabase::createEngine(const QFontDef &request, return fe; } -static inline int verticalDPI() -{ - return GetDeviceCaps(QWindowsContext::instance()->displayContext(), LOGPIXELSY); -} - QFont QWindowsFontDatabase::systemDefaultFont() { LOGFONT lf; @@ -1936,7 +1953,7 @@ QFont QWindowsFontDatabase::systemDefaultFont() QFont QWindowsFontDatabase::LOGFONT_to_QFont(const LOGFONT& logFont, int verticalDPI_In) { if (verticalDPI_In <= 0) - verticalDPI_In = verticalDPI(); + verticalDPI_In = defaultVerticalDPI(); QFont qFont(QString::fromWCharArray(logFont.lfFaceName)); qFont.setItalic(logFont.lfItalic); if (logFont.lfWeight != FW_DONTCARE) @@ -1949,4 +1966,41 @@ QFont QWindowsFontDatabase::LOGFONT_to_QFont(const LOGFONT& logFont, int vertica return qFont; } +int QWindowsFontDatabase::defaultVerticalDPI() +{ + static int vDPI = -1; + if (vDPI == -1) { + if (HDC defaultDC = GetDC(0)) { + vDPI = GetDeviceCaps(defaultDC, LOGPIXELSY); + ReleaseDC(0, defaultDC); + } else { + // FIXME: Resolve now or return 96 and keep unresolved? + vDPI = 96; + } + } + return vDPI; +} + +QString QWindowsFontDatabase::readRegistryString(HKEY parentHandle, const wchar_t *keyPath, const wchar_t *keyName) +{ + QString result; + HKEY handle = 0; + if (RegOpenKeyEx(parentHandle, keyPath, 0, KEY_READ, &handle) == ERROR_SUCCESS) { + // get the size and type of the value + DWORD dataType; + DWORD dataSize; + if (RegQueryValueEx(handle, keyName, 0, &dataType, 0, &dataSize) == ERROR_SUCCESS) { + if (dataType == REG_SZ || dataType == REG_EXPAND_SZ) { + dataSize += 2; // '\0' missing? + QVarLengthArray<unsigned char> data(dataSize); + data[dataSize - 2] = data[dataSize - 1] = '\0'; + if (RegQueryValueEx(handle, keyName, 0, 0, data.data(), &dataSize) == ERROR_SUCCESS) + result = QString::fromWCharArray(reinterpret_cast<const wchar_t *>(data.data())); + } + } + RegCloseKey(handle); + } + return result; +} + QT_END_NAMESPACE diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase_ft.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft.cpp index f7c8dbdf23..4d973bbf17 100644 --- a/src/plugins/platforms/windows/qwindowsfontdatabase_ft.cpp +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft.cpp @@ -37,9 +37,8 @@ ** ****************************************************************************/ -#include "qwindowsfontdatabase_ft.h" -#include "qwindowsfontdatabase.h" -#include "qwindowscontext.h" +#include "qwindowsfontdatabase_ft_p.h" +#include "qwindowsfontdatabase_p.h" #include <ft2build.h> #include FT_TRUETYPE_TABLES_H @@ -137,10 +136,10 @@ static FontKeys &fontKeys() QString realKey = registryFontKey; realKey.remove(trueType); realKey.remove(sizeListMatch); - const QStringList fontNames = realKey.trimmed().split(QLatin1Char('&')); + const auto fontNames = QStringRef(&realKey).trimmed().split(QLatin1Char('&')); fontKey.fontNames.reserve(fontNames.size()); - foreach (const QString &fontName, fontNames) - fontKey.fontNames.append(fontName.trimmed()); + for (const QStringRef &fontName : fontNames) + fontKey.fontNames.append(fontName.trimmed().toString()); result.append(fontKey); } } @@ -188,7 +187,7 @@ static bool addFontToDatabase(const QString &faceName, const QFont::Stretch stretch = QFont::Unstretched; #ifndef QT_NO_DEBUG_STREAM - if (QWindowsContext::verbose > 2) { + if (lcQpaFonts().isDebugEnabled()) { QString message; QTextStream str(&message); str << __FUNCTION__ << ' ' << faceName << "::" << fullName << ' ' << charSet << " TTF=" << ttf; diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase_ft.h b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft_p.h index fa8f777133..3a432842e5 100644 --- a/src/plugins/platforms/windows/qwindowsfontdatabase_ft.h +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft_p.h @@ -40,7 +40,18 @@ #ifndef QWINDOWSFONTDATABASEFT_H #define QWINDOWSFONTDATABASEFT_H -#include <QtPlatformSupport/private/qbasicfontdatabase_p.h> +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include <QtFontDatabaseSupport/private/qbasicfontdatabase_p.h> #include <QtCore/QSharedPointer> #include <QtCore/qt_windows.h> diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase.h b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h index 8b8c9c15f4..b7ebfc033f 100644 --- a/src/plugins/platforms/windows/qwindowsfontdatabase.h +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h @@ -40,8 +40,20 @@ #ifndef QWINDOWSFONTDATABASE_H #define QWINDOWSFONTDATABASE_H +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + #include <qpa/qplatformfontdatabase.h> #include <QtCore/QSharedPointer> +#include <QtCore/QLoggingCategory> #include <QtCore/qt_windows.h> #if !defined(QT_NO_DIRECTWRITE) @@ -51,6 +63,8 @@ QT_BEGIN_NAMESPACE +Q_DECLARE_LOGGING_CATEGORY(lcQpaFonts) + class QWindowsFontEngineData { Q_DISABLE_COPY(QWindowsFontEngineData) @@ -72,6 +86,12 @@ public: class QWindowsFontDatabase : public QPlatformFontDatabase { public: + enum FontOptions { + // Relevant bits from QWindowsIntegration::Options + DontUseDirectWriteFonts = 0x40, + DontUseColorFonts = 0x80 + }; + QWindowsFontDatabase(); ~QWindowsFontDatabase(); @@ -105,6 +125,13 @@ public: static QStringList extraTryFontsForFamily(const QString &family); static QString familyForStyleHint(QFont::StyleHint styleHint); + static int defaultVerticalDPI(); + + static void setFontOptions(unsigned options); + static unsigned fontOptions(); + + static QString readRegistryString(HKEY parentHandle, const wchar_t *keyPath, const wchar_t *keyName); + private: void populateFamily(const QString &familyName, bool registerAlias); void removeApplicationFonts(); @@ -122,6 +149,8 @@ private: }; QMap<QString, UniqueFontData> m_uniqueFontData; + + static unsigned m_fontOptions; }; #ifndef QT_NO_DEBUG_STREAM diff --git a/src/plugins/platforms/windows/qwindowsfontengine.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontengine.cpp index f5d1ed9fad..9fc6fec915 100644 --- a/src/plugins/platforms/windows/qwindowsfontengine.cpp +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontengine.cpp @@ -37,14 +37,13 @@ ** ****************************************************************************/ -#include "qwindowsintegration.h" -#include "qwindowsfontengine.h" -#include "qwindowsnativeimage.h" -#include "qwindowscontext.h" -#include "qwindowsfontdatabase.h" +#include "qwindowsfontengine_p.h" +#include "qwindowsnativeimage_p.h" +#include "qwindowsfontdatabase_p.h" #include <QtCore/qt_windows.h> -#include "qwindowsfontenginedirectwrite.h" +#include "qwindowsfontenginedirectwrite_p.h" +#include <QtGui/qpa/qplatformintegration.h> #include <QtGui/private/qtextengine_p.h> // glyph_metrics_t #include <QtGui/private/qguiapplication_p.h> #include <QtGui/QPaintDevice> @@ -315,8 +314,10 @@ QWindowsFontEngine::~QWindowsFontEngine() qCDebug(lcQpaFonts) << __FUNCTION__ << _name; if (!uniqueFamilyName.isEmpty()) { - QPlatformFontDatabase *pfdb = QWindowsIntegration::instance()->fontDatabase(); - static_cast<QWindowsFontDatabase *>(pfdb)->derefUniqueFont(uniqueFamilyName); + if (QPlatformIntegration *pi = QGuiApplicationPrivate::platformIntegration()) { + QPlatformFontDatabase *pfdb = pi->fontDatabase(); + static_cast<QWindowsFontDatabase *>(pfdb)->derefUniqueFont(uniqueFamilyName); + } } } @@ -1194,14 +1195,16 @@ QFontEngine *QWindowsFontEngine::cloneWithSize(qreal pixelSize) const QFontEngine *fontEngine = QWindowsFontDatabase::createEngine(request, - QWindowsContext::instance()->defaultDPI(), + QWindowsFontDatabase::defaultVerticalDPI(), m_fontEngineData); if (fontEngine) { fontEngine->fontDef.family = actualFontName; if (!uniqueFamilyName.isEmpty()) { static_cast<QWindowsFontEngine *>(fontEngine)->setUniqueFamilyName(uniqueFamilyName); - QPlatformFontDatabase *pfdb = QWindowsIntegration::instance()->fontDatabase(); - static_cast<QWindowsFontDatabase *>(pfdb)->refUniqueFont(uniqueFamilyName); + if (QPlatformIntegration *pi = QGuiApplicationPrivate::platformIntegration()) { + QPlatformFontDatabase *pfdb = pi->fontDatabase(); + static_cast<QWindowsFontDatabase *>(pfdb)->refUniqueFont(uniqueFamilyName); + } } } return fontEngine; @@ -1325,4 +1328,3 @@ bool QWindowsFontEngine::supportsTransformation(const QTransform &transform) con } QT_END_NAMESPACE - diff --git a/src/plugins/platforms/windows/qwindowsfontengine.h b/src/platformsupport/fontdatabases/windows/qwindowsfontengine_p.h index b63d8fd282..709de7d11d 100644 --- a/src/plugins/platforms/windows/qwindowsfontengine.h +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontengine_p.h @@ -44,8 +44,8 @@ // W A R N I N G // ------------- // -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to // version without notice, or even be removed. // // We mean it. @@ -184,4 +184,3 @@ Q_DECLARE_METATYPE(HFONT) Q_DECLARE_METATYPE(LOGFONT) #endif // QWINDOWSFONTENGINE_H - diff --git a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite.cpp index 66cc08f9fa..f266e85126 100644 --- a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite.cpp @@ -39,11 +39,9 @@ #ifndef QT_NO_DIRECTWRITE -#include "qwindowsfontenginedirectwrite.h" -#include "qwindowsfontdatabase.h" -#include "qwindowscontext.h" +#include "qwindowsfontenginedirectwrite_p.h" +#include "qwindowsfontdatabase_p.h" -#include <QtCore/QSettings> #include <QtCore/QtEndian> #include <QtCore/QVarLengthArray> #include <QtCore/QFile> @@ -185,6 +183,18 @@ namespace { } +static DWRITE_RENDERING_MODE hintingPreferenceToRenderingMode(QFont::HintingPreference hintingPreference) +{ + switch (hintingPreference) { + case QFont::PreferNoHinting: + return DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC; + case QFont::PreferVerticalHinting: + return DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL; + default: + return DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC; + } +} + /*! \class QWindowsFontEngineDirectWrite \brief Windows font engine using Direct Write. @@ -661,9 +671,7 @@ QImage QWindowsFontEngineDirectWrite::imageForGlyph(glyph_t t, transform.m22 = xform.m22(); DWRITE_RENDERING_MODE renderMode = - fontDef.hintingPreference == QFont::PreferNoHinting - ? DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC - : DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL; + hintingPreferenceToRenderingMode(QFont::HintingPreference(fontDef.hintingPreference)); IDWriteGlyphRunAnalysis *glyphAnalysis = NULL; HRESULT hr = m_fontEngineData->directWriteFactory->CreateGlyphRunAnalysis( @@ -906,9 +914,11 @@ void QWindowsFontEngineDirectWrite::initFontInfo(const QFontDef &request, QString QWindowsFontEngineDirectWrite::fontNameSubstitute(const QString &familyName) { - static const char keyC[] = "HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion\\" - "FontSubstitutes"; - return QSettings(QLatin1String(keyC), QSettings::NativeFormat).value(familyName, familyName).toString(); + const wchar_t key[] = L"Software\\Microsoft\\Windows NT\\CurrentVersion\\FontSubstitutes"; + const QString substitute = + QWindowsFontDatabase::readRegistryString(HKEY_LOCAL_MACHINE, key, + reinterpret_cast<const wchar_t *>(familyName.utf16())); + return substitute.isEmpty() ? familyName : substitute; } glyph_metrics_t QWindowsFontEngineDirectWrite::alphaMapBoundingBox(glyph_t glyph, @@ -950,9 +960,7 @@ glyph_metrics_t QWindowsFontEngineDirectWrite::alphaMapBoundingBox(glyph_t glyph transform.m22 = matrix.m22(); DWRITE_RENDERING_MODE renderMode = - fontDef.hintingPreference == QFont::PreferNoHinting - ? DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC - : DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL; + hintingPreferenceToRenderingMode(QFont::HintingPreference(fontDef.hintingPreference)); IDWriteGlyphRunAnalysis *glyphAnalysis = NULL; HRESULT hr = m_fontEngineData->directWriteFactory->CreateGlyphRunAnalysis( diff --git a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.h b/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite_p.h index e4a82c6a6e..65b16b9ba7 100644 --- a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.h +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite_p.h @@ -40,6 +40,17 @@ #ifndef QWINDOWSFONTENGINEDIRECTWRITE_H #define QWINDOWSFONTENGINEDIRECTWRITE_H +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + #include <QtCore/qglobal.h> #ifndef QT_NO_DIRECTWRITE diff --git a/src/plugins/platforms/windows/qwindowsnativeimage.cpp b/src/platformsupport/fontdatabases/windows/qwindowsnativeimage.cpp index ec9683ea8d..7022615511 100644 --- a/src/plugins/platforms/windows/qwindowsnativeimage.cpp +++ b/src/platformsupport/fontdatabases/windows/qwindowsnativeimage.cpp @@ -37,8 +37,7 @@ ** ****************************************************************************/ -#include "qwindowsnativeimage.h" -#include "qwindowscontext.h" +#include "qwindowsnativeimage_p.h" #include <QtGui/private/qpaintengine_p.h> #include <QtGui/private/qpaintengine_raster_p.h> @@ -143,7 +142,17 @@ QWindowsNativeImage::~QWindowsNativeImage() QImage::Format QWindowsNativeImage::systemFormat() { - static const int depth = QWindowsContext::instance()->screenDepth(); + static int depth = -1; + if (depth == -1) { + if (HDC defaultDC = GetDC(0)) { + depth = GetDeviceCaps(defaultDC, BITSPIXEL); + ReleaseDC(0, defaultDC); + } else { + // FIXME Same remark as in QWindowsFontDatabase::defaultVerticalDPI() + // BONUS FIXME: Is 32 too generous/optimistic? + depth = 32; + } + } return depth == 16 ? QImage::Format_RGB16 : QImage::Format_RGB32; } diff --git a/src/plugins/platforms/windows/qwindowsnativeimage.h b/src/platformsupport/fontdatabases/windows/qwindowsnativeimage_p.h index bfe0f07dfd..c27c0d1e98 100644 --- a/src/plugins/platforms/windows/qwindowsnativeimage.h +++ b/src/platformsupport/fontdatabases/windows/qwindowsnativeimage_p.h @@ -40,8 +40,19 @@ #ifndef QWINDOWSNATIVEIMAGE_H #define QWINDOWSNATIVEIMAGE_H -#include <QtCore/qt_windows.h> +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// +#include <QtCore/QtGlobal> +#include <QtCore/qt_windows.h> #include <QtGui/QImage> QT_BEGIN_NAMESPACE diff --git a/src/platformsupport/fontdatabases/windows/windows.pri b/src/platformsupport/fontdatabases/windows/windows.pri new file mode 100644 index 0000000000..419c4dc6d9 --- /dev/null +++ b/src/platformsupport/fontdatabases/windows/windows.pri @@ -0,0 +1,33 @@ +QT *= gui-private + +SOURCES += \ + $$PWD/qwindowsfontdatabase.cpp \ + $$PWD/qwindowsfontengine.cpp \ + $$PWD/qwindowsnativeimage.cpp + +HEADERS += \ + $$PWD/qwindowsfontdatabase_p.h \ + $$PWD/qwindowsfontengine_p.h \ + $$PWD/qwindowsnativeimage_p.h + +qtConfig(freetype) { + SOURCES += $$PWD/qwindowsfontdatabase_ft.cpp + HEADERS += $$PWD/qwindowsfontdatabase_ft_p.h + qtConfig(system-freetype) { + include($$QT_SOURCE_TREE/src/platformsupport/fontdatabases/basic/basic.pri) + } else { + include($$QT_SOURCE_TREE/src/3rdparty/freetype_dependency.pri) + } +} + +qtConfig(directwrite) { + qtConfig(directwrite2): \ + DEFINES *= QT_USE_DIRECTWRITE2 + + SOURCES += $$PWD/qwindowsfontenginedirectwrite.cpp + HEADERS += $$PWD/qwindowsfontenginedirectwrite_p.h +} else { + DEFINES *= QT_NO_DIRECTWRITE +} + +LIBS += -lole32 -lgdi32 -luser32 diff --git a/src/platformsupport/glxconvenience/glxconvenience.pri b/src/platformsupport/glxconvenience/glxconvenience.pri deleted file mode 100644 index 80e79ee663..0000000000 --- a/src/platformsupport/glxconvenience/glxconvenience.pri +++ /dev/null @@ -1,8 +0,0 @@ -qtConfig(xlib) { - qtConfig(opengl):!qtConfig(opengles2) { - qtConfig(xrender): QMAKE_USE_PRIVATE += xrender - LIBS_PRIVATE += $$QMAKE_LIBS_X11 - HEADERS += $$PWD/qglxconvenience_p.h - SOURCES += $$PWD/qglxconvenience.cpp - } -} diff --git a/src/platformsupport/glxconvenience/glxconvenience.pro b/src/platformsupport/glxconvenience/glxconvenience.pro new file mode 100644 index 0000000000..185d6b0364 --- /dev/null +++ b/src/platformsupport/glxconvenience/glxconvenience.pro @@ -0,0 +1,16 @@ +TARGET = QtGlxSupport +MODULE = glx_support + +QT = core-private gui-private +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +qtConfig(xrender): QMAKE_USE_PRIVATE += xrender +LIBS_PRIVATE += $$QMAKE_LIBS_X11 + +HEADERS += qglxconvenience_p.h +SOURCES += qglxconvenience.cpp + +load(qt_module) diff --git a/src/platformsupport/glxconvenience/qglxconvenience.cpp b/src/platformsupport/glxconvenience/qglxconvenience.cpp index 7dc29fae6d..4225bebf37 100644 --- a/src/platformsupport/glxconvenience/qglxconvenience.cpp +++ b/src/platformsupport/glxconvenience/qglxconvenience.cpp @@ -386,5 +386,10 @@ bool qglx_reduceFormat(QSurfaceFormat *format) return true; } + if (format->stereo()) { + format->setStereo(false); + return true; + } + return false; } diff --git a/src/platformsupport/graphics/graphics.pri b/src/platformsupport/graphics/graphics.pri deleted file mode 100644 index 43062682aa..0000000000 --- a/src/platformsupport/graphics/graphics.pri +++ /dev/null @@ -1,2 +0,0 @@ -HEADERS += $$PWD/qrasterbackingstore_p.h -SOURCES += $$PWD/qrasterbackingstore.cpp diff --git a/src/platformsupport/graphics/graphics.pro b/src/platformsupport/graphics/graphics.pro new file mode 100644 index 0000000000..878fca7f49 --- /dev/null +++ b/src/platformsupport/graphics/graphics.pro @@ -0,0 +1,13 @@ +TARGET = QtGraphicsSupport +MODULE = graphics_support + +QT = core-private gui-private +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +HEADERS += $$PWD/qrasterbackingstore_p.h +SOURCES += $$PWD/qrasterbackingstore.cpp + +load(qt_module) diff --git a/src/platformsupport/input/evdevkeyboard/qevdevkeyboardmanager_p.h b/src/platformsupport/input/evdevkeyboard/qevdevkeyboardmanager_p.h index 01f23f2542..d2e34fead3 100644 --- a/src/platformsupport/input/evdevkeyboard/qevdevkeyboardmanager_p.h +++ b/src/platformsupport/input/evdevkeyboard/qevdevkeyboardmanager_p.h @@ -53,7 +53,7 @@ #include "qevdevkeyboardhandler_p.h" -#include <QtPlatformSupport/private/qdevicediscovery_p.h> +#include <QtDeviceDiscoverySupport/private/qdevicediscovery_p.h> #include <QObject> #include <QHash> diff --git a/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp b/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp index 2d96691b09..b2f3fe5787 100644 --- a/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp +++ b/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp @@ -44,7 +44,7 @@ #include <QScreen> #include <QLoggingCategory> #include <qpa/qwindowsysteminterface.h> -#include <QtPlatformSupport/private/qdevicediscovery_p.h> +#include <QtDeviceDiscoverySupport/private/qdevicediscovery_p.h> #include <private/qguiapplication_p.h> #include <private/qinputdevicemanager_p_p.h> #include <private/qhighdpiscaling_p.h> diff --git a/src/platformsupport/input/evdevtablet/qevdevtabletmanager.cpp b/src/platformsupport/input/evdevtablet/qevdevtabletmanager.cpp index 89a60df98d..4b00424e92 100644 --- a/src/platformsupport/input/evdevtablet/qevdevtabletmanager.cpp +++ b/src/platformsupport/input/evdevtablet/qevdevtabletmanager.cpp @@ -43,7 +43,7 @@ #include <QStringList> #include <QGuiApplication> #include <QLoggingCategory> -#include <QtPlatformSupport/private/qdevicediscovery_p.h> +#include <QtDeviceDiscoverySupport/private/qdevicediscovery_p.h> #include <private/qguiapplication_p.h> #include <private/qinputdevicemanager_p_p.h> diff --git a/src/platformsupport/input/evdevtouch/evdevtouch.pri b/src/platformsupport/input/evdevtouch/evdevtouch.pri index 58fafcd8f9..0ad236e882 100644 --- a/src/platformsupport/input/evdevtouch/evdevtouch.pri +++ b/src/platformsupport/input/evdevtouch/evdevtouch.pri @@ -12,6 +12,5 @@ qtConfig(libudev): \ QMAKE_USE_PRIVATE += libudev qtConfig(mtdev) { - CONFIG += link_pkgconfig - PKGCONFIG_PRIVATE += mtdev + QMAKE_USE_PRIVATE += mtdev } diff --git a/src/platformsupport/input/evdevtouch/qevdevtouchmanager.cpp b/src/platformsupport/input/evdevtouch/qevdevtouchmanager.cpp index d0c6c10224..ab71d08fb1 100644 --- a/src/platformsupport/input/evdevtouch/qevdevtouchmanager.cpp +++ b/src/platformsupport/input/evdevtouch/qevdevtouchmanager.cpp @@ -43,7 +43,7 @@ #include <QStringList> #include <QGuiApplication> #include <QLoggingCategory> -#include <QtPlatformSupport/private/qdevicediscovery_p.h> +#include <QtDeviceDiscoverySupport/private/qdevicediscovery_p.h> #include <private/qguiapplication_p.h> #include <private/qinputdevicemanager_p_p.h> diff --git a/src/platformsupport/input/input.pri b/src/platformsupport/input/input.pro index eb4d8a983d..2c2ace6780 100644 --- a/src/platformsupport/input/input.pri +++ b/src/platformsupport/input/input.pro @@ -1,3 +1,12 @@ +TARGET = QtInputSupport +MODULE = input_support + +QT = core-private gui-private devicediscovery_support-private +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + qtConfig(evdev) { include($$PWD/evdevmouse/evdevmouse.pri) include($$PWD/evdevkeyboard/evdevkeyboard.pri) @@ -16,3 +25,5 @@ qtConfig(libinput) { qtConfig(evdev)|qtConfig(libinput) { include($$PWD/shared/shared.pri) } + +load(qt_module) diff --git a/src/platformsupport/linuxaccessibility/application_p.h b/src/platformsupport/linuxaccessibility/application_p.h index 2e6d7a78c1..9c053b253c 100644 --- a/src/platformsupport/linuxaccessibility/application_p.h +++ b/src/platformsupport/linuxaccessibility/application_p.h @@ -51,12 +51,13 @@ // We mean it. // +#include <QtGui/private/qtguiglobal_p.h> #include <QtCore/QPointer> #include <QtCore/QQueue> #include <QtDBus/QDBusConnection> #include <QtGui/QAccessibleInterface> -#ifndef QT_NO_ACCESSIBILITY +QT_REQUIRE_CONFIG(accessibility); QT_BEGIN_NAMESPACE @@ -94,6 +95,4 @@ private: QT_END_NAMESPACE -#endif //QT_NO_ACCESSIBILITY - #endif diff --git a/src/platformsupport/linuxaccessibility/atspiadaptor.cpp b/src/platformsupport/linuxaccessibility/atspiadaptor.cpp index f6c126a771..70c4aa563c 100644 --- a/src/platformsupport/linuxaccessibility/atspiadaptor.cpp +++ b/src/platformsupport/linuxaccessibility/atspiadaptor.cpp @@ -50,7 +50,7 @@ #ifndef QT_NO_ACCESSIBILITY #include "socket_interface.h" #include "constant_mappings_p.h" -#include "../accessibility/qaccessiblebridgeutils_p.h" +#include <QtAccessibilitySupport/private/qaccessiblebridgeutils_p.h> #include "application_p.h" /*! diff --git a/src/platformsupport/linuxaccessibility/atspiadaptor_p.h b/src/platformsupport/linuxaccessibility/atspiadaptor_p.h index 87bdbe4bb6..b5704f53ad 100644 --- a/src/platformsupport/linuxaccessibility/atspiadaptor_p.h +++ b/src/platformsupport/linuxaccessibility/atspiadaptor_p.h @@ -54,6 +54,7 @@ #include <atspi/atspi-constants.h> +#include <QtGui/private/qtguiglobal_p.h> #include <QtCore/qsharedpointer.h> #include <QtDBus/qdbusvirtualobject.h> #include <QtGui/qaccessible.h> @@ -61,7 +62,8 @@ #include "dbusconnection_p.h" #include "struct_marshallers_p.h" -#ifndef QT_NO_ACCESSIBILITY +QT_REQUIRE_CONFIG(accessibility); + QT_BEGIN_NAMESPACE class QAccessibleInterface; @@ -222,6 +224,5 @@ private: }; QT_END_NAMESPACE -#endif //QT_NO_ACCESSIBILITY #endif diff --git a/src/platformsupport/linuxaccessibility/bridge_p.h b/src/platformsupport/linuxaccessibility/bridge_p.h index 44dfa82f5d..1e435ca351 100644 --- a/src/platformsupport/linuxaccessibility/bridge_p.h +++ b/src/platformsupport/linuxaccessibility/bridge_p.h @@ -52,12 +52,14 @@ // We mean it. // +#include <QtGui/private/qtguiglobal_p.h> #include <QtDBus/qdbusconnection.h> #include <qpa/qplatformaccessibility.h> class DeviceEventControllerAdaptor; -#ifndef QT_NO_ACCESSIBILITY +QT_REQUIRE_CONFIG(accessibility); + QT_BEGIN_NAMESPACE class DBusConnection; @@ -89,6 +91,5 @@ private: }; QT_END_NAMESPACE -#endif //QT_NO_ACCESSIBILITY #endif diff --git a/src/platformsupport/linuxaccessibility/cache_p.h b/src/platformsupport/linuxaccessibility/cache_p.h index f141785301..e8529b779b 100644 --- a/src/platformsupport/linuxaccessibility/cache_p.h +++ b/src/platformsupport/linuxaccessibility/cache_p.h @@ -52,10 +52,12 @@ // We mean it. // +#include <QtGui/private/qtguiglobal_p.h> #include <QtCore/QObject> #include "struct_marshallers_p.h" -#ifndef QT_NO_ACCESSIBILITY +QT_REQUIRE_CONFIG(accessibility); + QT_BEGIN_NAMESPACE class QSpiDBusCache : public QObject @@ -76,6 +78,5 @@ public Q_SLOTS: }; QT_END_NAMESPACE -#endif //QT_NO_ACCESSIBILITY #endif /* Q_SPI_CACHE_H */ diff --git a/src/platformsupport/linuxaccessibility/constant_mappings_p.h b/src/platformsupport/linuxaccessibility/constant_mappings_p.h index a096261da6..4da818c8c1 100644 --- a/src/platformsupport/linuxaccessibility/constant_mappings_p.h +++ b/src/platformsupport/linuxaccessibility/constant_mappings_p.h @@ -58,10 +58,11 @@ #include "struct_marshallers_p.h" +#include <QtGui/private/qtguiglobal_p.h> #include <QtGui/QAccessible> #include <atspi/atspi-constants.h> -#ifndef QT_NO_ACCESSIBILITY +QT_REQUIRE_CONFIG(accessibility); // interface names from at-spi2-core/atspi/atspi-misc-private.h #define ATSPI_DBUS_NAME_REGISTRY "org.a11y.atspi.Registry" @@ -141,6 +142,5 @@ QSpiUIntList spiStateSetFromSpiStates(quint64 states); AtspiRelationType qAccessibleRelationToAtSpiRelation(QAccessible::Relation relation); QT_END_NAMESPACE -#endif //QT_NO_ACCESSIBILITY #endif /* Q_SPI_CONSTANT_MAPPINGS_H */ diff --git a/src/platformsupport/linuxaccessibility/linuxaccessibility.pri b/src/platformsupport/linuxaccessibility/linuxaccessibility.pri deleted file mode 100644 index 1f36b815cf..0000000000 --- a/src/platformsupport/linuxaccessibility/linuxaccessibility.pri +++ /dev/null @@ -1,25 +0,0 @@ -qtConfig(accessibility-atspi-bridge) { - - QT_FOR_PRIVATE += dbus - include(../../3rdparty/atspi2/atspi2.pri) - - INCLUDEPATH += $$PWD - - HEADERS += \ - $$PWD/application_p.h \ - $$PWD/bridge_p.h \ - $$PWD/cache_p.h \ - $$PWD/struct_marshallers_p.h \ - $$PWD/constant_mappings_p.h \ - $$PWD/dbusconnection_p.h \ - $$PWD/atspiadaptor_p.h - - SOURCES += \ - $$PWD/application.cpp \ - $$PWD/bridge.cpp \ - $$PWD/cache.cpp \ - $$PWD/struct_marshallers.cpp \ - $$PWD/constant_mappings.cpp \ - $$PWD/dbusconnection.cpp \ - $$PWD/atspiadaptor.cpp -} diff --git a/src/platformsupport/linuxaccessibility/linuxaccessibility.pro b/src/platformsupport/linuxaccessibility/linuxaccessibility.pro new file mode 100644 index 0000000000..6d68909047 --- /dev/null +++ b/src/platformsupport/linuxaccessibility/linuxaccessibility.pro @@ -0,0 +1,30 @@ +TARGET = QtLinuxAccessibilitySupport +MODULE = linuxaccessibility_support + +QT = core-private dbus gui-private accessibility_support-private +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +include(../../3rdparty/atspi2/atspi2.pri) + +HEADERS += \ + application_p.h \ + bridge_p.h \ + cache_p.h \ + struct_marshallers_p.h \ + constant_mappings_p.h \ + dbusconnection_p.h \ + atspiadaptor_p.h + +SOURCES += \ + application.cpp \ + bridge.cpp \ + cache.cpp \ + struct_marshallers.cpp \ + constant_mappings.cpp \ + dbusconnection.cpp \ + atspiadaptor.cpp + +load(qt_module) diff --git a/src/platformsupport/linuxaccessibility/struct_marshallers_p.h b/src/platformsupport/linuxaccessibility/struct_marshallers_p.h index 28d96ec5ea..c8cc05ab5b 100644 --- a/src/platformsupport/linuxaccessibility/struct_marshallers_p.h +++ b/src/platformsupport/linuxaccessibility/struct_marshallers_p.h @@ -52,13 +52,15 @@ // We mean it. // +#include <QtGui/private/qtguiglobal_p.h> #include <QtCore/qvector.h> #include <QtCore/qpair.h> #include <QtDBus/QDBusArgument> #include <QtDBus/QDBusConnection> #include <QtDBus/QDBusObjectPath> -#ifndef QT_NO_ACCESSIBILITY +QT_REQUIRE_CONFIG(accessibility); + QT_BEGIN_NAMESPACE typedef QVector<int> QSpiIntList; @@ -192,5 +194,4 @@ Q_DECLARE_METATYPE(QSpiAttributeSet) Q_DECLARE_METATYPE(QSpiAppUpdate) Q_DECLARE_METATYPE(QSpiDeviceEvent) -#endif //QT_NO_ACCESSIBILITY #endif /* Q_SPI_STRUCT_MARSHALLERS_H */ diff --git a/src/platformsupport/platformcompositor/platformcompositor.pri b/src/platformsupport/platformcompositor/platformcompositor.pri deleted file mode 100644 index 1e908c9998..0000000000 --- a/src/platformsupport/platformcompositor/platformcompositor.pri +++ /dev/null @@ -1,7 +0,0 @@ -qtConfig(opengl) { - SOURCES += $$PWD/qopenglcompositor.cpp \ - $$PWD/qopenglcompositorbackingstore.cpp - - HEADERS += $$PWD/qopenglcompositor_p.h \ - $$PWD/qopenglcompositorbackingstore_p.h -} diff --git a/src/platformsupport/platformcompositor/platformcompositor.pro b/src/platformsupport/platformcompositor/platformcompositor.pro new file mode 100644 index 0000000000..633e71fb9d --- /dev/null +++ b/src/platformsupport/platformcompositor/platformcompositor.pro @@ -0,0 +1,18 @@ +TARGET = QtPlatformCompositorSupport +MODULE = platformcompositor_support + +QT = core-private gui-private +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +SOURCES += \ + qopenglcompositor.cpp \ + qopenglcompositorbackingstore.cpp + +HEADERS += \ + qopenglcompositor_p.h \ + qopenglcompositorbackingstore_p.h + +load(qt_module) diff --git a/src/platformsupport/platformsupport.pro b/src/platformsupport/platformsupport.pro index f9b57acaa8..b83038dbf9 100644 --- a/src/platformsupport/platformsupport.pro +++ b/src/platformsupport/platformsupport.pro @@ -1,27 +1,42 @@ -TARGET = QtPlatformSupport -QT = core-private gui-private +TEMPLATE = subdirs +QT_FOR_CONFIG += gui-private -CONFIG += static internal_module -mac:LIBS_PRIVATE += -lz +SUBDIRS = \ + eventdispatchers \ + devicediscovery \ + fbconvenience \ + themes -DEFINES += QT_NO_CAST_FROM_ASCII -PRECOMPILED_HEADER = ../corelib/global/qt_pch.h +qtConfig(freetype)|darwin|win32: \ + SUBDIRS += fontdatabases -include(cglconvenience/cglconvenience.pri) -include(eglconvenience/eglconvenience.pri) -include(eventdispatchers/eventdispatchers.pri) -include(fbconvenience/fbconvenience.pri) -include(fontdatabases/fontdatabases.pri) -include(glxconvenience/glxconvenience.pri) -include(input/input.pri) -include(devicediscovery/devicediscovery.pri) -include(services/services.pri) -include(themes/themes.pri) -include(accessibility/accessibility.pri) -include(linuxaccessibility/linuxaccessibility.pri) -include(clipboard/clipboard.pri) -include(platformcompositor/platformcompositor.pri) +qtConfig(evdev)|qtConfig(tslib)|qtConfig(libinput) { + SUBDIRS += input + input.depends += devicediscovery +} -darwin: include(graphics/graphics.pri) +unix:!darwin: \ + SUBDIRS += services -load(qt_module) +qtConfig(opengl): \ + SUBDIRS += platformcompositor +qtConfig(egl): \ + SUBDIRS += eglconvenience +qtConfig(xlib):qtConfig(opengl):!qtConfig(opengles2): \ + SUBDIRS += glxconvenience + +qtConfig(accessibility) { + SUBDIRS += accessibility + qtConfig(accessibility-atspi-bridge) { + SUBDIRS += linuxaccessibility + linuxaccessibility.depends += accessibility + } +} + +darwin { + SUBDIRS += \ + clipboard \ + graphics + macos: \ + SUBDIRS += cglconvenience +} diff --git a/src/platformsupport/services/services.pri b/src/platformsupport/services/services.pri deleted file mode 100644 index adee852626..0000000000 --- a/src/platformsupport/services/services.pri +++ /dev/null @@ -1,3 +0,0 @@ -unix:!mac { - include($$PWD/genericunix/genericunix.pri) -} diff --git a/src/platformsupport/services/services.pro b/src/platformsupport/services/services.pro new file mode 100644 index 0000000000..91957a0a78 --- /dev/null +++ b/src/platformsupport/services/services.pro @@ -0,0 +1,13 @@ +TARGET = QtServiceSupport +MODULE = service_support + +QT = core-private gui-private +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +unix:!darwin: \ + include($$PWD/genericunix/genericunix.pri) + +load(qt_module) diff --git a/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon_p.h b/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon_p.h index a383ef86fc..234ff60584 100644 --- a/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon_p.h +++ b/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon_p.h @@ -52,9 +52,9 @@ // We mean it. // -#include <QtCore/qglobal.h> +#include <QtGui/private/qtguiglobal_p.h> -#ifndef QT_NO_SYSTEMTRAYICON +QT_REQUIRE_CONFIG(systemtrayicon); #include <QIcon> #include <QTemporaryFile> @@ -165,5 +165,4 @@ private: QT_END_NAMESPACE -#endif // QT_NO_SYSTEMTRAYICON #endif // QDBUSTRAYICON_H diff --git a/src/platformsupport/themes/genericunix/dbustray/qdbustraytypes_p.h b/src/platformsupport/themes/genericunix/dbustray/qdbustraytypes_p.h index 1bdc855c3c..3f75555579 100644 --- a/src/platformsupport/themes/genericunix/dbustray/qdbustraytypes_p.h +++ b/src/platformsupport/themes/genericunix/dbustray/qdbustraytypes_p.h @@ -52,7 +52,9 @@ // We mean it. // -#ifndef QT_NO_SYSTEMTRAYICON +#include <QtGui/private/qtguiglobal_p.h> + +QT_REQUIRE_CONFIG(systemtrayicon); #include <QObject> #include <QString> @@ -104,5 +106,4 @@ Q_DECLARE_METATYPE(QXdgDBusImageStruct) Q_DECLARE_METATYPE(QXdgDBusImageVector) Q_DECLARE_METATYPE(QXdgDBusToolTipStruct) -#endif // QT_NO_SYSTEMTRAYICON #endif // QDBUSTRAYTYPES_P_H diff --git a/src/platformsupport/themes/genericunix/dbustray/qstatusnotifieritemadaptor_p.h b/src/platformsupport/themes/genericunix/dbustray/qstatusnotifieritemadaptor_p.h index 776e1b23ef..3f8fca7ac0 100644 --- a/src/platformsupport/themes/genericunix/dbustray/qstatusnotifieritemadaptor_p.h +++ b/src/platformsupport/themes/genericunix/dbustray/qstatusnotifieritemadaptor_p.h @@ -62,9 +62,9 @@ // We mean it. // -#include <QtCore/qglobal.h> +#include <QtGui/private/qtguiglobal_p.h> -#ifndef QT_NO_SYSTEMTRAYICON +QT_REQUIRE_CONFIG(systemtrayicon); #include <QtCore/QObject> #include <QtDBus/QtDBus> @@ -200,5 +200,5 @@ private: }; QT_END_NAMESPACE -#endif // QT_NO_SYSTEMTRAYICON + #endif // QSTATUSNOTIFIERITEMADAPTER_P_H diff --git a/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp b/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp index db264d1b22..1e1b1af4b5 100644 --- a/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp +++ b/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp @@ -38,7 +38,6 @@ ****************************************************************************/ #include "qgenericunixthemes_p.h" -#include "../../services/genericunix/qgenericunixservices_p.h" #include "qpa/qplatformtheme_p.h" @@ -61,11 +60,11 @@ #include <qpa/qplatformservices.h> #include <qpa/qplatformdialoghelper.h> #ifndef QT_NO_DBUS -#include "QtPlatformSupport/private/qdbusplatformmenu_p.h" -#include "QtPlatformSupport/private/qdbusmenubar_p.h" +#include "qdbusplatformmenu_p.h" +#include "qdbusmenubar_p.h" #endif #if !defined(QT_NO_DBUS) && !defined(QT_NO_SYSTEMTRAYICON) -#include "QtPlatformSupport/private/qdbustrayicon_p.h" +#include "qdbustrayicon_p.h" #endif #include <algorithm> diff --git a/src/platformsupport/themes/themes.pri b/src/platformsupport/themes/themes.pri deleted file mode 100644 index 552973431f..0000000000 --- a/src/platformsupport/themes/themes.pri +++ /dev/null @@ -1,9 +0,0 @@ -unix:!mac { - include($$PWD/genericunix/genericunix.pri) -} - -HEADERS += \ - $$PWD/qabstractfileiconengine_p.h - -SOURCES += \ - $$PWD/qabstractfileiconengine.cpp diff --git a/src/platformsupport/themes/themes.pro b/src/platformsupport/themes/themes.pro new file mode 100644 index 0000000000..2aeb1f89ad --- /dev/null +++ b/src/platformsupport/themes/themes.pro @@ -0,0 +1,19 @@ +TARGET = QtThemeSupport +MODULE = theme_support + +QT = core-private gui-private +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +unix:!darwin: \ + include($$PWD/genericunix/genericunix.pri) + +HEADERS += \ + qabstractfileiconengine_p.h + +SOURCES += \ + qabstractfileiconengine.cpp + +load(qt_module) diff --git a/src/plugins/bearer/connman/connman.pro b/src/plugins/bearer/connman/connman.pro index 9f3fff304b..065ed11dad 100644 --- a/src/plugins/bearer/connman/connman.pro +++ b/src/plugins/bearer/connman/connman.pro @@ -1,7 +1,6 @@ TARGET = qconnmanbearer QT = core network-private dbus -CONFIG += link_pkgconfig HEADERS += qconnmanservice_linux_p.h \ ../linux_common/qofonoservice_linux_p.h \ diff --git a/src/plugins/bearer/nativewifi/qnativewifiengine.cpp b/src/plugins/bearer/nativewifi/qnativewifiengine.cpp index 23656476bd..bb43072aba 100644 --- a/src/plugins/bearer/nativewifi/qnativewifiengine.cpp +++ b/src/plugins/bearer/nativewifi/qnativewifiengine.cpp @@ -459,7 +459,7 @@ void QNativeWifiEngine::disconnectFromId(const QString &id) return; } - QStringList split = interface.mid(1, interface.length() - 2).split('-'); + const QVector<QStringRef> split = interface.midRef(1, interface.length() - 2).split(QLatin1Char('-')); GUID guid; guid.Data1 = split.at(0).toUInt(0, 16); diff --git a/src/plugins/generic/evdevkeyboard/evdevkeyboard.pro b/src/plugins/generic/evdevkeyboard/evdevkeyboard.pro index d23ad3bad0..73fddf4d26 100644 --- a/src/plugins/generic/evdevkeyboard/evdevkeyboard.pro +++ b/src/plugins/generic/evdevkeyboard/evdevkeyboard.pro @@ -1,6 +1,6 @@ TARGET = qevdevkeyboardplugin -QT += core-private platformsupport-private gui-private +QT += core-private gui-private input_support-private SOURCES = main.cpp diff --git a/src/plugins/generic/evdevkeyboard/main.cpp b/src/plugins/generic/evdevkeyboard/main.cpp index 7fd6feaecc..ef08cd56ab 100644 --- a/src/plugins/generic/evdevkeyboard/main.cpp +++ b/src/plugins/generic/evdevkeyboard/main.cpp @@ -38,7 +38,7 @@ ****************************************************************************/ #include <QtGui/qgenericplugin.h> -#include <QtPlatformSupport/private/qevdevkeyboardmanager_p.h> +#include <QtInputSupport/private/qevdevkeyboardmanager_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/generic/evdevmouse/evdevmouse.pro b/src/plugins/generic/evdevmouse/evdevmouse.pro index 1a0bc08853..f3a8558ef2 100644 --- a/src/plugins/generic/evdevmouse/evdevmouse.pro +++ b/src/plugins/generic/evdevmouse/evdevmouse.pro @@ -1,6 +1,6 @@ TARGET = qevdevmouseplugin -QT += core-private platformsupport-private gui-private +QT += core-private gui-private input_support-private SOURCES = main.cpp diff --git a/src/plugins/generic/evdevmouse/main.cpp b/src/plugins/generic/evdevmouse/main.cpp index 88c29366fa..86ec7cb575 100644 --- a/src/plugins/generic/evdevmouse/main.cpp +++ b/src/plugins/generic/evdevmouse/main.cpp @@ -38,7 +38,7 @@ ****************************************************************************/ #include <QtGui/qgenericplugin.h> -#include <QtPlatformSupport/private/qevdevmousemanager_p.h> +#include <QtInputSupport/private/qevdevmousemanager_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/generic/evdevtablet/evdevtablet.pro b/src/plugins/generic/evdevtablet/evdevtablet.pro index aaf0ef4c67..1409cd83c9 100644 --- a/src/plugins/generic/evdevtablet/evdevtablet.pro +++ b/src/plugins/generic/evdevtablet/evdevtablet.pro @@ -2,7 +2,7 @@ TARGET = qevdevtabletplugin SOURCES = main.cpp -QT += core-private platformsupport-private gui-private +QT += core-private gui-private input_support-private OTHER_FILES += \ evdevtablet.json diff --git a/src/plugins/generic/evdevtablet/main.cpp b/src/plugins/generic/evdevtablet/main.cpp index cf8dc15c6e..0646d71146 100644 --- a/src/plugins/generic/evdevtablet/main.cpp +++ b/src/plugins/generic/evdevtablet/main.cpp @@ -38,7 +38,7 @@ ****************************************************************************/ #include <QtGui/qgenericplugin.h> -#include <QtPlatformSupport/private/qevdevtabletmanager_p.h> +#include <QtInputSupport/private/qevdevtabletmanager_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/generic/evdevtouch/evdevtouch.pro b/src/plugins/generic/evdevtouch/evdevtouch.pro index 4d61db4eb0..3ca646aaca 100644 --- a/src/plugins/generic/evdevtouch/evdevtouch.pro +++ b/src/plugins/generic/evdevtouch/evdevtouch.pro @@ -2,7 +2,7 @@ TARGET = qevdevtouchplugin SOURCES = main.cpp -QT += core-private platformsupport-private gui-private +QT += core-private gui-private input_support-private OTHER_FILES += \ evdevtouch.json diff --git a/src/plugins/generic/evdevtouch/main.cpp b/src/plugins/generic/evdevtouch/main.cpp index 411bf3d7a0..aa60614936 100644 --- a/src/plugins/generic/evdevtouch/main.cpp +++ b/src/plugins/generic/evdevtouch/main.cpp @@ -38,7 +38,7 @@ ****************************************************************************/ #include <QtGui/qgenericplugin.h> -#include <QtPlatformSupport/private/qevdevtouchmanager_p.h> +#include <QtInputSupport/private/qevdevtouchmanager_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/generic/libinput/libinput.pro b/src/plugins/generic/libinput/libinput.pro index 335605d354..434bf7b945 100644 --- a/src/plugins/generic/libinput/libinput.pro +++ b/src/plugins/generic/libinput/libinput.pro @@ -1,6 +1,6 @@ TARGET = qlibinputplugin -QT += core-private platformsupport-private gui-private +QT += core-private gui-private input_support-private SOURCES = main.cpp diff --git a/src/plugins/generic/libinput/main.cpp b/src/plugins/generic/libinput/main.cpp index e40fdd0097..6d1e76c0f0 100644 --- a/src/plugins/generic/libinput/main.cpp +++ b/src/plugins/generic/libinput/main.cpp @@ -38,7 +38,7 @@ ****************************************************************************/ #include <QtGui/qgenericplugin.h> -#include <QtPlatformSupport/private/qlibinputhandler_p.h> +#include <QtInputSupport/private/qlibinputhandler_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/generic/tslib/main.cpp b/src/plugins/generic/tslib/main.cpp index c5e0c720fc..fb9e0c35f3 100644 --- a/src/plugins/generic/tslib/main.cpp +++ b/src/plugins/generic/tslib/main.cpp @@ -38,7 +38,7 @@ ****************************************************************************/ #include <QtGui/qgenericplugin.h> -#include <QtPlatformSupport/private/qtslib_p.h> +#include <QtInputSupport/private/qtslib_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/generic/tslib/tslib.pro b/src/plugins/generic/tslib/tslib.pro index d6a0eea3a0..7c3a0bf607 100644 --- a/src/plugins/generic/tslib/tslib.pro +++ b/src/plugins/generic/tslib/tslib.pro @@ -2,7 +2,7 @@ TARGET = qtslibplugin SOURCES = main.cpp -QT += gui-private platformsupport-private +QT += core-private gui-private input_support-private QMAKE_USE += tslib diff --git a/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp b/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp index a4d7e504b7..bd25992457 100644 --- a/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp +++ b/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp @@ -255,6 +255,7 @@ void TableGenerator::initPossibleLocations() // never meant for external software to parse compose tables directly. Best we // can do is to hardcode search paths. To add an extra system path use // the QTCOMPOSE environment variable + m_possibleLocations.reserve(7); if (qEnvironmentVariableIsSet("QTCOMPOSE")) m_possibleLocations.append(QString::fromLocal8Bit(qgetenv("QTCOMPOSE"))); m_possibleLocations.append(QStringLiteral("/usr/share/X11/locale")); diff --git a/src/plugins/platforms/android/android.pro b/src/plugins/platforms/android/android.pro index 045e55ec65..bd3fe5a6cc 100644 --- a/src/plugins/platforms/android/android.pro +++ b/src/plugins/platforms/android/android.pro @@ -6,9 +6,10 @@ DEFINES += QT_STATICPLUGIN LIBS += -ljnigraphics -landroid -QT += core-private gui-private platformsupport-private - -CONFIG += qpa/genericunixfontdatabase +QT += \ + core-private gui-private \ + eventdispatcher_support-private accessibility_support-private \ + fontdatabase_support-private egl_support-private OTHER_FILES += $$PWD/android.json @@ -72,7 +73,7 @@ HEADERS += $$PWD/qandroidplatformintegration.h \ $$PWD/qandroidplatformforeignwindow.h \ $$PWD/qandroideventdispatcher.h -android-style-assets: SOURCES += $$PWD/extract.cpp +qtConfig(android-style-assets): SOURCES += $$PWD/extract.cpp else: SOURCES += $$PWD/extract-dummy.cpp PLUGIN_TYPE = platforms diff --git a/src/plugins/platforms/android/androidjniaccessibility.cpp b/src/plugins/platforms/android/androidjniaccessibility.cpp index e8536235d7..a987092862 100644 --- a/src/plugins/platforms/android/androidjniaccessibility.cpp +++ b/src/plugins/platforms/android/androidjniaccessibility.cpp @@ -41,7 +41,7 @@ #include "androidjnimain.h" #include "qandroidplatformintegration.h" #include "qpa/qplatformaccessibility.h" -#include <QtPlatformSupport/private/qaccessiblebridgeutils_p.h> +#include <QtAccessibilitySupport/private/qaccessiblebridgeutils_p.h> #include "qguiapplication.h" #include "qwindow.h" #include "qrect.h" diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp index c79198d7fe..df8883ab34 100644 --- a/src/plugins/platforms/android/androidjnimain.cpp +++ b/src/plugins/platforms/android/androidjnimain.cpp @@ -514,7 +514,7 @@ static jboolean startQtApplication(JNIEnv *env, jobject /*object*/, jstring para if (m_applicationParams.length()) { // Obtain a handle to the main library (the library that contains the main() function). // This library should already be loaded, and calling dlopen() will just return a reference to it. - m_mainLibraryHnd = dlopen(m_applicationParams.first().data(), 0); + m_mainLibraryHnd = dlopen(m_applicationParams.constFirst().data(), 0); if (Q_UNLIKELY(!m_mainLibraryHnd)) { qCritical() << "dlopen failed:" << dlerror(); return false; @@ -635,6 +635,11 @@ static void updateWindow(JNIEnv */*env*/, jobject /*thiz*/) if (QGuiApplication::instance() != nullptr) { const auto tlw = QGuiApplication::topLevelWindows(); for (QWindow *w : tlw) { + + // Skip non-platform windows, e.g., offscreen windows. + if (!w->handle()) + continue; + QRect availableGeometry = w->screen()->availableGeometry(); if (w->geometry().width() > 0 && w->geometry().height() > 0 && availableGeometry.width() > 0 && availableGeometry.height() > 0) QWindowSystemInterface::handleExposeEvent(w, QRegion(QRect(QPoint(), w->geometry().size()))); diff --git a/src/plugins/platforms/android/qandroideventdispatcher.h b/src/plugins/platforms/android/qandroideventdispatcher.h index 227027f3c3..86a7e460b3 100644 --- a/src/plugins/platforms/android/qandroideventdispatcher.h +++ b/src/plugins/platforms/android/qandroideventdispatcher.h @@ -42,7 +42,7 @@ #include <QtCore/QMutex> #include <QtCore/QSemaphore> -#include <QtPlatformSupport/private/qunixeventdispatcher_qpa_p.h> +#include <QtEventDispatcherSupport/private/qunixeventdispatcher_qpa_p.h> class QAndroidEventDispatcher : public QUnixEventDispatcherQPA { diff --git a/src/plugins/platforms/android/qandroidinputcontext.cpp b/src/plugins/platforms/android/qandroidinputcontext.cpp index 06a9c8c488..2656d45d5f 100644 --- a/src/plugins/platforms/android/qandroidinputcontext.cpp +++ b/src/plugins/platforms/android/qandroidinputcontext.cpp @@ -866,7 +866,7 @@ const QAndroidInputContext::ExtractedText &QAndroidInputContext::getExtractedTex if (composeLength > 0) { //Qt doesn't give us the preedit text, so we have to insert it at the correct position int localComposePos = m_composingTextStart - blockPos; - blockText = blockText.left(localComposePos) + m_composingText + blockText.mid(localComposePos); + blockText = blockText.leftRef(localComposePos) + m_composingText + blockText.midRef(localComposePos); } int cpos = localPos + composeLength; //actual cursor pos relative to the current block @@ -930,9 +930,8 @@ QString QAndroidInputContext::getTextAfterCursor(jint length, jint /*flags*/) QString QAndroidInputContext::getTextBeforeCursor(jint length, jint /*flags*/) { QVariant textBefore = queryFocusObjectThreadSafe(Qt::ImTextBeforeCursor, QVariant(length)); - if (textBefore.isValid()) { - return textBefore.toString().right(length) + m_composingText; - } + if (textBefore.isValid()) + return textBefore.toString().rightRef(length) + m_composingText; //compatibility code for old controls that do not implement the new API QSharedPointer<QInputMethodQueryEvent> query = focusObjectInputMethodQueryThreadSafe(); @@ -946,9 +945,9 @@ QString QAndroidInputContext::getTextBeforeCursor(jint length, jint /*flags*/) //### the preedit text does not need to be immediately before the cursor if (cursorPos <= length) - return text.left(cursorPos) + m_composingText; + return text.leftRef(cursorPos) + m_composingText; else - return text.mid(cursorPos - length, length) + m_composingText; + return text.midRef(cursorPos - length, length) + m_composingText; } /* diff --git a/src/plugins/platforms/android/qandroidplatformfontdatabase.h b/src/plugins/platforms/android/qandroidplatformfontdatabase.h index a00a3730fb..b20fd75cb2 100644 --- a/src/plugins/platforms/android/qandroidplatformfontdatabase.h +++ b/src/plugins/platforms/android/qandroidplatformfontdatabase.h @@ -40,7 +40,7 @@ #ifndef QANDROIDPLATFORMFONTDATABASE_H #define QANDROIDPLATFORMFONTDATABASE_H -#include <QtPlatformSupport/private/qbasicfontdatabase_p.h> +#include <QtFontDatabaseSupport/private/qbasicfontdatabase_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/android/qandroidplatformintegration.cpp b/src/plugins/platforms/android/qandroidplatformintegration.cpp index e10bd95e12..6669ee3176 100644 --- a/src/plugins/platforms/android/qandroidplatformintegration.cpp +++ b/src/plugins/platforms/android/qandroidplatformintegration.cpp @@ -46,7 +46,7 @@ #include <QThread> #include <QOffscreenSurface> -#include <QtPlatformSupport/private/qeglpbuffer_p.h> +#include <QtEglSupport/private/qeglpbuffer_p.h> #include <qpa/qwindowsysteminterface.h> #include <qpa/qplatformwindow.h> #include <qpa/qplatformoffscreensurface.h> diff --git a/src/plugins/platforms/android/qandroidplatformopenglcontext.cpp b/src/plugins/platforms/android/qandroidplatformopenglcontext.cpp index 80693acf88..2644fa27f6 100644 --- a/src/plugins/platforms/android/qandroidplatformopenglcontext.cpp +++ b/src/plugins/platforms/android/qandroidplatformopenglcontext.cpp @@ -42,7 +42,7 @@ #include "qandroidplatformopenglwindow.h" #include "qandroidplatformintegration.h" -#include <QtPlatformSupport/private/qeglpbuffer_p.h> +#include <QtEglSupport/private/qeglpbuffer_p.h> #include <QSurface> #include <QtGui/private/qopenglcontext_p.h> diff --git a/src/plugins/platforms/android/qandroidplatformopenglcontext.h b/src/plugins/platforms/android/qandroidplatformopenglcontext.h index c88dbf327b..d3f6cf13a4 100644 --- a/src/plugins/platforms/android/qandroidplatformopenglcontext.h +++ b/src/plugins/platforms/android/qandroidplatformopenglcontext.h @@ -41,7 +41,7 @@ #ifndef QANDROIDPLATFORMOPENGLCONTEXT_H #define QANDROIDPLATFORMOPENGLCONTEXT_H -#include <QtPlatformSupport/private/qeglplatformcontext_p.h> +#include <QtEglSupport/private/qeglplatformcontext_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/android/qandroidplatformopenglwindow.cpp b/src/plugins/platforms/android/qandroidplatformopenglwindow.cpp index 7801629633..3e1cfe305d 100644 --- a/src/plugins/platforms/android/qandroidplatformopenglwindow.cpp +++ b/src/plugins/platforms/android/qandroidplatformopenglwindow.cpp @@ -50,7 +50,7 @@ #include <qpa/qwindowsysteminterface.h> #include <qpa/qplatformscreen.h> -#include <QtPlatformSupport/private/qeglconvenience_p.h> +#include <QtEglSupport/private/qeglconvenience_p.h> #include <android/native_window.h> #include <android/native_window_jni.h> diff --git a/src/plugins/platforms/android/qandroidplatformtheme.cpp b/src/plugins/platforms/android/qandroidplatformtheme.cpp index c4387c5d88..b891407c44 100644 --- a/src/plugins/platforms/android/qandroidplatformtheme.cpp +++ b/src/plugins/platforms/android/qandroidplatformtheme.cpp @@ -461,9 +461,9 @@ QVariant QAndroidPlatformTheme::themeHint(ThemeHint hint) const case StyleNames: if (qEnvironmentVariableIntValue("QT_USE_ANDROID_NATIVE_STYLE") && m_androidStyleData) { - return QStringList("android"); + return QStringList(QLatin1String("android")); } - return QStringList("fusion"); + return QStringList(QLatin1String("fusion")); case MouseDoubleClickDistance: { diff --git a/src/plugins/platforms/bsdfb/bsdfb.pro b/src/plugins/platforms/bsdfb/bsdfb.pro index c24d8dd9e5..770145a8ff 100644 --- a/src/plugins/platforms/bsdfb/bsdfb.pro +++ b/src/plugins/platforms/bsdfb/bsdfb.pro @@ -1,12 +1,16 @@ TARGET = qbsdfb -QT += core-private gui-private platformsupport-private +QT += \ + core-private gui-private \ + service_support-private eventdispatcher_support-private \ + fontdatabase_support-private fb_support-private + +qtHaveModule(input_support-private): \ + QT += input_support-private SOURCES = main.cpp qbsdfbintegration.cpp qbsdfbscreen.cpp HEADERS = qbsdfbintegration.h qbsdfbscreen.h -CONFIG += qpa/genericunixfontdatabase - OTHER_FILES += bsdfb.json PLUGIN_TYPE = platforms diff --git a/src/plugins/platforms/bsdfb/qbsdfbintegration.cpp b/src/plugins/platforms/bsdfb/qbsdfbintegration.cpp index 9c25076c9c..1fa13183f8 100644 --- a/src/plugins/platforms/bsdfb/qbsdfbintegration.cpp +++ b/src/plugins/platforms/bsdfb/qbsdfbintegration.cpp @@ -35,21 +35,21 @@ #include "qbsdfbintegration.h" #include "qbsdfbscreen.h" -#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h> -#include <QtPlatformSupport/private/qgenericunixservices_p.h> -#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h> +#include <QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h> +#include <QtServiceSupport/private/qgenericunixservices_p.h> +#include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h> -#include <QtPlatformSupport/private/qfbvthandler_p.h> -#include <QtPlatformSupport/private/qfbbackingstore_p.h> -#include <QtPlatformSupport/private/qfbwindow_p.h> -#include <QtPlatformSupport/private/qfbcursor_p.h> +#include <QtFbSupport/private/qfbvthandler_p.h> +#include <QtFbSupport/private/qfbbackingstore_p.h> +#include <QtFbSupport/private/qfbwindow_p.h> +#include <QtFbSupport/private/qfbcursor_p.h> #include <QtGui/private/qguiapplication_p.h> #include <qpa/qplatforminputcontext.h> #include <qpa/qplatforminputcontextfactory_p.h> #if QT_CONFIG(tslib) -#include <QtPlatformSupport/private/qtslib_p.h> +#include <QtInputSupport/private/qtslib_p.h> #endif QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/bsdfb/qbsdfbscreen.cpp b/src/plugins/platforms/bsdfb/qbsdfbscreen.cpp index ee2dce6867..0ef57d37e5 100644 --- a/src/plugins/platforms/bsdfb/qbsdfbscreen.cpp +++ b/src/plugins/platforms/bsdfb/qbsdfbscreen.cpp @@ -33,8 +33,8 @@ ****************************************************************************/ #include "qbsdfbscreen.h" -#include <QtPlatformSupport/private/qfbcursor_p.h> -#include <QtPlatformSupport/private/qfbwindow_p.h> +#include <QtFbSupport/private/qfbcursor_p.h> +#include <QtFbSupport/private/qfbwindow_p.h> #include <QtCore/QRegularExpression> #include <QtGui/QPainter> diff --git a/src/plugins/platforms/bsdfb/qbsdfbscreen.h b/src/plugins/platforms/bsdfb/qbsdfbscreen.h index 0d9964afd5..3e244e3460 100644 --- a/src/plugins/platforms/bsdfb/qbsdfbscreen.h +++ b/src/plugins/platforms/bsdfb/qbsdfbscreen.h @@ -35,7 +35,7 @@ #ifndef QBSDFBSCREEN_H #define QBSDFBSCREEN_H -#include <QtPlatformSupport/private/qfbscreen_p.h> +#include <QtFbSupport/private/qfbscreen_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/cocoa/cocoa.pro b/src/plugins/platforms/cocoa/cocoa.pro index d9d3cb1627..0664841c2d 100644 --- a/src/plugins/platforms/cocoa/cocoa.pro +++ b/src/plugins/platforms/cocoa/cocoa.pro @@ -81,7 +81,10 @@ RESOURCES += qcocoaresources.qrc LIBS += -framework AppKit -framework Carbon -framework IOKit -lcups -QT += core-private gui-private platformsupport-private +QT += \ + core-private gui-private \ + accessibility_support-private clipboard_support-private theme_support-private \ + fontdatabase_support-private graphics_support-private cgl_support-private qtHaveModule(widgets) { OBJECTIVE_SOURCES += \ diff --git a/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm b/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm index 9c410506b0..97bd402b73 100644 --- a/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm +++ b/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm @@ -41,7 +41,7 @@ #include "qcocoahelpers.h" #include "qcocoawindow.h" #include "private/qaccessiblecache_p.h" -#include <QtPlatformSupport/private/qaccessiblebridgeutils_p.h> +#include <QtAccessibilitySupport/private/qaccessiblebridgeutils_p.h> #include <QtGui/qaccessible.h> #import <AppKit/NSAccessibility.h> diff --git a/src/plugins/platforms/cocoa/qcocoabackingstore.h b/src/plugins/platforms/cocoa/qcocoabackingstore.h index 562be2be8f..5ed455fd71 100644 --- a/src/plugins/platforms/cocoa/qcocoabackingstore.h +++ b/src/plugins/platforms/cocoa/qcocoabackingstore.h @@ -40,7 +40,7 @@ #ifndef QBACKINGSTORE_COCOA_H #define QBACKINGSTORE_COCOA_H -#include <QtPlatformSupport/private/qrasterbackingstore_p.h> +#include <QtGraphicsSupport/private/qrasterbackingstore_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm b/src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm index cc8436dcfe..3a5a0c8e78 100644 --- a/src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm +++ b/src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm @@ -122,7 +122,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSColorPanelDelegate); - (void)dealloc { - [self restoreOriginalContentView]; + [mStolenContentView release]; [mColorPanel setDelegate:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self]; diff --git a/src/plugins/platforms/cocoa/qcocoafontdialoghelper.mm b/src/plugins/platforms/cocoa/qcocoafontdialoghelper.mm index 214f44b548..0be931b54f 100644 --- a/src/plugins/platforms/cocoa/qcocoafontdialoghelper.mm +++ b/src/plugins/platforms/cocoa/qcocoafontdialoghelper.mm @@ -150,7 +150,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSFontPanelDelegate); - (void)dealloc { - [self restoreOriginalContentView]; + [mStolenContentView release]; [mFontPanel setDelegate:nil]; [[NSFontManager sharedFontManager] setDelegate:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self]; diff --git a/src/plugins/platforms/cocoa/qcocoaglcontext.mm b/src/plugins/platforms/cocoa/qcocoaglcontext.mm index 31b93be136..a7cc19b3bf 100644 --- a/src/plugins/platforms/cocoa/qcocoaglcontext.mm +++ b/src/plugins/platforms/cocoa/qcocoaglcontext.mm @@ -42,7 +42,7 @@ #include "qcocoahelpers.h" #include <qdebug.h> #include <QtCore/private/qcore_mac_p.h> -#include <QtPlatformSupport/private/cglconvenience_p.h> +#include <QtCglSupport/private/cglconvenience_p.h> #include <QtPlatformHeaders/qcocoanativecontext.h> #include <dlfcn.h> diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.h b/src/plugins/platforms/cocoa/qcocoaintegration.h index d0d88994d5..5cf8e7d237 100644 --- a/src/plugins/platforms/cocoa/qcocoaintegration.h +++ b/src/plugins/platforms/cocoa/qcocoaintegration.h @@ -54,7 +54,7 @@ #include <QtCore/QScopedPointer> #include <qpa/qplatformintegration.h> -#include <QtPlatformSupport/private/qcoretextfontdatabase_p.h> +#include <QtFontDatabaseSupport/private/qcoretextfontdatabase_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/cocoa/qcocoamenubar.h b/src/plugins/platforms/cocoa/qcocoamenubar.h index 7ce2059450..4870ca4103 100644 --- a/src/plugins/platforms/cocoa/qcocoamenubar.h +++ b/src/plugins/platforms/cocoa/qcocoamenubar.h @@ -76,6 +76,7 @@ private: static QCocoaWindow *findWindowForMenubar(); static QCocoaMenuBar *findGlobalMenubar(); + bool needsImmediateUpdate(); bool shouldDisable(QCocoaWindow *active) const; NSMenuItem *nativeItemForMenu(QCocoaMenu *menu) const; diff --git a/src/plugins/platforms/cocoa/qcocoamenubar.mm b/src/plugins/platforms/cocoa/qcocoamenubar.mm index 26af0d3f63..a95ffc2f9f 100644 --- a/src/plugins/platforms/cocoa/qcocoamenubar.mm +++ b/src/plugins/platforms/cocoa/qcocoamenubar.mm @@ -90,6 +90,32 @@ QCocoaMenuBar::~QCocoaMenuBar() } } +bool QCocoaMenuBar::needsImmediateUpdate() +{ + if (m_window && m_window->window()->isActive()) { + return true; + } else if (!m_window) { + // Only update if the focus/active window has no + // menubar, which means it'll be using this menubar. + // This is to avoid a modification in a parentless + // menubar to affect a window-assigned menubar. + QWindow *fw = QGuiApplication::focusWindow(); + if (!fw) { + // Same if there's no focus window, BTW. + return true; + } else { + QCocoaWindow *cw = static_cast<QCocoaWindow *>(fw->handle()); + if (cw && !cw->menubar()) + return true; + } + } + + // Either the menubar is attached to a non-active window, + // or the application's focus window has its own menubar + // (which is different from this one) + return false; +} + void QCocoaMenuBar::insertMenu(QPlatformMenu *platformMenu, QPlatformMenu *before) { QCocoaMenu *menu = static_cast<QCocoaMenu *>(platformMenu); @@ -130,7 +156,7 @@ void QCocoaMenuBar::insertMenu(QPlatformMenu *platformMenu, QPlatformMenu *befor syncMenu(menu); - if (m_window && m_window->window()->isActive()) + if (needsImmediateUpdate()) updateMenuBarImmediately(); } diff --git a/src/plugins/platforms/cocoa/qcocoamimetypes.mm b/src/plugins/platforms/cocoa/qcocoamimetypes.mm index c109eb7bf4..093f86da6e 100644 --- a/src/plugins/platforms/cocoa/qcocoamimetypes.mm +++ b/src/plugins/platforms/cocoa/qcocoamimetypes.mm @@ -38,7 +38,7 @@ ****************************************************************************/ #include "qcocoamimetypes.h" -#include <QtPlatformSupport/private/qmacmime_p.h> +#include <QtClipboardSupport/private/qmacmime_p.h> #include "qcocoahelpers.h" #include <QtGui/private/qcoregraphics_p.h> diff --git a/src/plugins/platforms/cocoa/qcocoatheme.mm b/src/plugins/platforms/cocoa/qcocoatheme.mm index 03ad15a381..4d74c11581 100644 --- a/src/plugins/platforms/cocoa/qcocoatheme.mm +++ b/src/plugins/platforms/cocoa/qcocoatheme.mm @@ -58,8 +58,8 @@ #include <QtGui/private/qguiapplication_p.h> #include <QtGui/private/qcoregraphics_p.h> #include <QtGui/qpainter.h> -#include <QtPlatformSupport/private/qcoretextfontdatabase_p.h> -#include <QtPlatformSupport/private/qabstractfileiconengine_p.h> +#include <QtFontDatabaseSupport/private/qcoretextfontdatabase_p.h> +#include <QtThemeSupport/private/qabstractfileiconengine_p.h> #include <qpa/qplatformintegration.h> #include <qpa/qplatformnativeinterface.h> diff --git a/src/plugins/platforms/cocoa/qcocoawindow.h b/src/plugins/platforms/cocoa/qcocoawindow.h index 52b3c19768..1cd4c1905a 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.h +++ b/src/plugins/platforms/cocoa/qcocoawindow.h @@ -354,6 +354,8 @@ public: // for QNSView }; QHash<quintptr, BorderRange> m_contentBorderAreas; // identifer -> uppper/lower QHash<quintptr, bool> m_enabledContentBorderAreas; // identifer -> enabled state (true/false) + + bool m_hasWindowFilePath; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm index 43bab0d6d8..dfaed9923e 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.mm +++ b/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -436,6 +436,7 @@ QCocoaWindow::QCocoaWindow(QWindow *tlw) , m_topContentBorderThickness(0) , m_bottomContentBorderThickness(0) , m_normalGeometry(QRect(0,0,-1,-1)) + , m_hasWindowFilePath(false) { qCDebug(lcQpaCocoaWindow) << "QCocoaWindow::QCocoaWindow" << window(); @@ -990,6 +991,7 @@ void QCocoaWindow::setWindowFilePath(const QString &filePath) QFileInfo fi(filePath); [m_nsWindow setRepresentedFilename:fi.exists() ? filePath.toNSString() : @""]; + m_hasWindowFilePath = fi.exists(); } void QCocoaWindow::setWindowIcon(const QIcon &icon) diff --git a/src/plugins/platforms/cocoa/qmacclipboard.h b/src/plugins/platforms/cocoa/qmacclipboard.h index 2ee0cb91e4..1d229a55d2 100644 --- a/src/plugins/platforms/cocoa/qmacclipboard.h +++ b/src/plugins/platforms/cocoa/qmacclipboard.h @@ -41,7 +41,7 @@ #define QMACCLIPBOARD_H #include <QtGui> -#include <QtPlatformSupport/private/qmacmime_p.h> +#include <QtClipboardSupport/private/qmacmime_p.h> #import <AppKit/AppKit.h> diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm index 6f469ec508..73fe5d8526 100644 --- a/src/plugins/platforms/cocoa/qnsview.mm +++ b/src/plugins/platforms/cocoa/qnsview.mm @@ -775,11 +775,6 @@ static bool _q_dontOverrideCtrlLMB = false; if (!(m_acceptedMouseDowns & button) == button) return false; - if (!(m_buttons & (m_sendUpAsRightButton ? Qt::RightButton : Qt::LeftButton))) { - qCWarning(lcQpaCocoaWindow) << "QNSView mouseDragged: Internal mouse button tracking" - << "invalid (missing Qt::LeftButton)"; - } - [self handleMouseEvent:theEvent]; return true; } diff --git a/src/plugins/platforms/cocoa/qnswindowdelegate.h b/src/plugins/platforms/cocoa/qnswindowdelegate.h index 667e08d0c1..a465b249c5 100644 --- a/src/plugins/platforms/cocoa/qnswindowdelegate.h +++ b/src/plugins/platforms/cocoa/qnswindowdelegate.h @@ -54,6 +54,8 @@ - (BOOL)windowShouldClose:(NSNotification *)notification; - (BOOL)windowShouldZoom:(NSWindow *)window toFrame:(NSRect)newFrame; +- (BOOL)window:(NSWindow *)window shouldPopUpDocumentPathMenu:(NSMenu *)menu; +- (BOOL)window:(NSWindow *)window shouldDragDocumentWithEvent:(NSEvent *)event from:(NSPoint)dragImageLocation withPasteboard:(NSPasteboard *)pasteboard; @end QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSWindowDelegate); diff --git a/src/plugins/platforms/cocoa/qnswindowdelegate.mm b/src/plugins/platforms/cocoa/qnswindowdelegate.mm index 7e18c023e5..3781a4cc65 100644 --- a/src/plugins/platforms/cocoa/qnswindowdelegate.mm +++ b/src/plugins/platforms/cocoa/qnswindowdelegate.mm @@ -71,4 +71,19 @@ return YES; } +- (BOOL)window:(NSWindow *)window shouldPopUpDocumentPathMenu:(NSMenu *)menu +{ + Q_UNUSED(window); + Q_UNUSED(menu); + return m_cocoaWindow && m_cocoaWindow->m_hasWindowFilePath; +} + +- (BOOL)window:(NSWindow *)window shouldDragDocumentWithEvent:(NSEvent *)event from:(NSPoint)dragImageLocation withPasteboard:(NSPasteboard *)pasteboard +{ + Q_UNUSED(window); + Q_UNUSED(event); + Q_UNUSED(dragImageLocation); + Q_UNUSED(pasteboard); + return m_cocoaWindow && m_cocoaWindow->m_hasWindowFilePath; +} @end diff --git a/src/plugins/platforms/direct2d/direct2d.pro b/src/plugins/platforms/direct2d/direct2d.pro index f4c3b5cc3b..224f122fc4 100644 --- a/src/plugins/platforms/direct2d/direct2d.pro +++ b/src/plugins/platforms/direct2d/direct2d.pro @@ -1,8 +1,9 @@ TARGET = qdirect2d -QT *= core-private -QT *= gui-private -QT *= platformsupport-private +QT += \ + core-private gui-private \ + eventdispatcher_support-private accessibility_support-private \ + fontdatabase_support-private theme_support-private LIBS += -ldwmapi -ld2d1 -ld3d11 -ldwrite -lVersion -lgdi32 diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp index c8349dc408..478995ad1c 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp @@ -50,7 +50,9 @@ #include <QtCore/QCoreApplication> #include <QtGui/private/qpixmap_raster_p.h> #include <QtGui/qpa/qwindowsysteminterface.h> -#include <QtPlatformSupport/private/qwindowsguieventdispatcher_p.h> +#include <QtEventDispatcherSupport/private/qwindowsguieventdispatcher_p.h> + +#include <QVarLengthArray> QT_BEGIN_NAMESPACE @@ -101,7 +103,7 @@ public: if (_tcscat_s(filename, bufSize, __TEXT("\\d2d1.dll")) == 0) { DWORD versionInfoSize = GetFileVersionInfoSize(filename, NULL); if (versionInfoSize) { - QVector<BYTE> info(static_cast<int>(versionInfoSize)); + QVarLengthArray<BYTE> info(static_cast<int>(versionInfoSize)); if (GetFileVersionInfo(filename, NULL, versionInfoSize, info.data())) { UINT size; DWORD *fi; diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp index 730f91ece3..a9e66d2586 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp @@ -45,8 +45,8 @@ #include "qwindowsdirect2dbitmap.h" #include "qwindowsdirect2ddevicecontext.h" -#include "qwindowsfontengine.h" -#include "qwindowsfontdatabase.h" +#include <QtFontDatabaseSupport/private/qwindowsfontdatabase_p.h> +#include <QtFontDatabaseSupport/private/qwindowsfontengine_p.h> #include "qwindowsintegration.h" #include <QtCore/QtMath> diff --git a/src/plugins/platforms/directfb/directfb.pro b/src/plugins/platforms/directfb/directfb.pro index de0344ff5c..406b89e3b2 100644 --- a/src/plugins/platforms/directfb/directfb.pro +++ b/src/plugins/platforms/directfb/directfb.pro @@ -1,6 +1,9 @@ TARGET = qdirectfb -QT += core-private gui-private platformsupport-private +QT += \ + core-private gui-private \ + eventdispatcher_support-private service_support-private \ + fontdatabase_support-private egl_support-private QMAKE_USE += directfb @@ -41,9 +44,6 @@ qtConfig(directfb_egl) { SOURCES += qdirectfbeglhooks_stub.cpp } - -CONFIG += qpa/genericunixfontdatabase - OTHER_FILES += directfb.json PLUGIN_TYPE = platforms diff --git a/src/plugins/platforms/directfb/qdirectfb_egl.cpp b/src/plugins/platforms/directfb/qdirectfb_egl.cpp index 2a04c0bba3..dad553c890 100644 --- a/src/plugins/platforms/directfb/qdirectfb_egl.cpp +++ b/src/plugins/platforms/directfb/qdirectfb_egl.cpp @@ -46,10 +46,10 @@ #include <qpa/qplatformopenglcontext.h> #include <QtGui/QScreen> -#include <QtPlatformSupport/private/qeglplatformcontext_p.h> -#include <QtPlatformSupport/private/qeglconvenience_p.h> +#include <QtEglSupport/private/qeglplatformcontext_p.h> +#include <QtEglSupport/private/qeglconvenience_p.h> -#include <QtPlatformSupport/private/qt_egl_p.h> +#include <QtEglSupport/private/qt_egl_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.cpp b/src/plugins/platforms/directfb/qdirectfbintegration.cpp index 506432f886..cdf340da7a 100644 --- a/src/plugins/platforms/directfb/qdirectfbintegration.cpp +++ b/src/plugins/platforms/directfb/qdirectfbintegration.cpp @@ -44,9 +44,9 @@ #include "qdirectfbcursor.h" #include "qdirectfbwindow.h" -#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h> -#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h> -#include <QtPlatformSupport/private/qgenericunixservices_p.h> +#include <QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h> +#include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h> +#include <QtServiceSupport/private/qgenericunixservices_p.h> #include <QtGui/private/qpixmap_blitter_p.h> #include <QtGui/private/qpixmap_raster_p.h> diff --git a/src/plugins/platforms/eglfs/api/qeglfscontext.cpp b/src/plugins/platforms/eglfs/api/qeglfscontext.cpp index 1a33215295..c5cef34d8e 100644 --- a/src/plugins/platforms/eglfs/api/qeglfscontext.cpp +++ b/src/plugins/platforms/eglfs/api/qeglfscontext.cpp @@ -39,8 +39,8 @@ #include "qeglfsglobal_p.h" #include <QtGui/QSurface> -#include <QtPlatformSupport/private/qeglconvenience_p.h> -#include <QtPlatformSupport/private/qeglpbuffer_p.h> +#include <QtEglSupport/private/qeglconvenience_p.h> +#include <QtEglSupport/private/qeglpbuffer_p.h> #include "qeglfscontext_p.h" #include "qeglfswindow_p.h" diff --git a/src/plugins/platforms/eglfs/api/qeglfscontext_p.h b/src/plugins/platforms/eglfs/api/qeglfscontext_p.h index 65af3a7cee..ab5bf99c3c 100644 --- a/src/plugins/platforms/eglfs/api/qeglfscontext_p.h +++ b/src/plugins/platforms/eglfs/api/qeglfscontext_p.h @@ -52,7 +52,7 @@ // #include "qeglfsglobal_p.h" -#include <QtPlatformSupport/private/qeglplatformcontext_p.h> +#include <QtEglSupport/private/qeglplatformcontext_p.h> #include <QtCore/QVariant> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/eglfs/api/qeglfscursor.cpp b/src/plugins/platforms/eglfs/api/qeglfscursor.cpp index 1b3446c4ac..2b54251a06 100644 --- a/src/plugins/platforms/eglfs/api/qeglfscursor.cpp +++ b/src/plugins/platforms/eglfs/api/qeglfscursor.cpp @@ -341,14 +341,16 @@ void QEglFSCursor::paintOnScreen() if (!m_visible) return; - QRect cr = cursorRect(); // hotspot included + // cr must be a QRectF, otherwise cr.right() and bottom() would be off by + // one in the calculations below. + QRectF cr = cursorRect(); // hotspot included // Support virtual desktop too. Backends with multi-screen support (e.g. all // variants of KMS/DRM) will enable this by default. In this case all // screens are siblings of each other. When not enabled, the sibling list // only contains m_screen itself. for (QPlatformScreen *screen : m_screen->virtualSiblings()) { - if (screen->geometry().contains(cr.topLeft() + m_cursor.hotSpot) + if (screen->geometry().contains(cr.topLeft().toPoint() + m_cursor.hotSpot) && QOpenGLContext::currentContext()->screen() == screen->screen()) { cr.translate(-screen->geometry().topLeft()); diff --git a/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp b/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp index 9f05767366..3e1e93f1e4 100644 --- a/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp +++ b/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp @@ -44,7 +44,7 @@ #include "qeglfsscreen_p.h" #include "qeglfshooks_p.h" -#include <QtPlatformSupport/private/qeglconvenience_p.h> +#include <QtEglSupport/private/qeglconvenience_p.h> #include <QGuiApplication> #include <private/qguiapplication_p.h> #include <QScreen> @@ -199,7 +199,7 @@ void QEglFSDeviceIntegration::screenDestroy() QEglFSIntegration *platformIntegration = static_cast<QEglFSIntegration *>( QGuiApplicationPrivate::platformIntegration()); while (!app->screens().isEmpty()) - platformIntegration->removeScreen(app->screens().last()->handle()); + platformIntegration->removeScreen(app->screens().constLast()->handle()); } QSizeF QEglFSDeviceIntegration::physicalScreenSize() const diff --git a/src/plugins/platforms/eglfs/api/qeglfsglobal_p.h b/src/plugins/platforms/eglfs/api/qeglfsglobal_p.h index bad5095d21..8d76ff5ee0 100644 --- a/src/plugins/platforms/eglfs/api/qeglfsglobal_p.h +++ b/src/plugins/platforms/eglfs/api/qeglfsglobal_p.h @@ -53,7 +53,7 @@ #include <QtCore/qglobal.h> -#include <QtPlatformSupport/private/qt_egl_p.h> +#include <QtEglSupport/private/qt_egl_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/eglfs/api/qeglfshooks.cpp b/src/plugins/platforms/eglfs/api/qeglfshooks.cpp index b67d8fab54..d8332a94cb 100644 --- a/src/plugins/platforms/eglfs/api/qeglfshooks.cpp +++ b/src/plugins/platforms/eglfs/api/qeglfshooks.cpp @@ -66,7 +66,8 @@ private: Q_GLOBAL_STATIC(DeviceIntegration, deviceIntegration) -DeviceIntegration::DeviceIntegration() : m_integration(0) +DeviceIntegration::DeviceIntegration() + : m_integration(nullptr) { QStringList pluginKeys = QEglFSDeviceIntegrationFactory::keys(); if (!pluginKeys.isEmpty()) { diff --git a/src/plugins/platforms/eglfs/api/qeglfsintegration.cpp b/src/plugins/platforms/eglfs/api/qeglfsintegration.cpp index 4974499e0a..733f0bd139 100644 --- a/src/plugins/platforms/eglfs/api/qeglfsintegration.cpp +++ b/src/plugins/platforms/eglfs/api/qeglfsintegration.cpp @@ -49,7 +49,6 @@ #include <QtCore/QLoggingCategory> #include <qpa/qwindowsysteminterface.h> #include <qpa/qplatforminputcontextfactory_p.h> -#include <private/qgenericunixthemes_p.h> #include "qeglfsintegration_p.h" #include "qeglfswindow_p.h" @@ -58,30 +57,31 @@ #include "qeglfsoffscreenwindow_p.h" #include "qeglfscursor_p.h" -#include <QtPlatformSupport/private/qeglconvenience_p.h> -#include <QtPlatformSupport/private/qeglplatformcontext_p.h> -#include <QtPlatformSupport/private/qeglpbuffer_p.h> +#include <QtEglSupport/private/qeglconvenience_p.h> +#include <QtEglSupport/private/qeglplatformcontext_p.h> +#include <QtEglSupport/private/qeglpbuffer_p.h> -#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h> -#include <QtPlatformSupport/private/qgenericunixservices_p.h> -#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h> -#include <QtPlatformSupport/private/qfbvthandler_p.h> -#include <QtPlatformSupport/private/qopenglcompositorbackingstore_p.h> +#include <QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h> +#include <QtServiceSupport/private/qgenericunixservices_p.h> +#include <QtThemeSupport/private/qgenericunixthemes_p.h> +#include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h> +#include <QtFbSupport/private/qfbvthandler_p.h> +#include <QtPlatformCompositorSupport/private/qopenglcompositorbackingstore_p.h> #include <QtPlatformHeaders/QEGLNativeContext> #if QT_CONFIG(libinput) -#include <QtPlatformSupport/private/qlibinputhandler_p.h> +#include <QtInputSupport/private/qlibinputhandler_p.h> #endif #if QT_CONFIG(evdev) -#include <QtPlatformSupport/private/qevdevmousemanager_p.h> -#include <QtPlatformSupport/private/qevdevkeyboardmanager_p.h> -#include <QtPlatformSupport/private/qevdevtouchmanager_p.h> +#include <QtInputSupport/private/qevdevmousemanager_p.h> +#include <QtInputSupport/private/qevdevkeyboardmanager_p.h> +#include <QtInputSupport/private/qevdevtouchmanager_p.h> #endif #if QT_CONFIG(tslib) -#include <QtPlatformSupport/private/qtslib_p.h> +#include <QtInputSupport/private/qtslib_p.h> #endif #include <QtPlatformHeaders/qeglfsfunctions.h> diff --git a/src/plugins/platforms/eglfs/api/qeglfsoffscreenwindow.cpp b/src/plugins/platforms/eglfs/api/qeglfsoffscreenwindow.cpp index 7de5379ae3..864271cd3a 100644 --- a/src/plugins/platforms/eglfs/api/qeglfsoffscreenwindow.cpp +++ b/src/plugins/platforms/eglfs/api/qeglfsoffscreenwindow.cpp @@ -40,7 +40,7 @@ #include "qeglfsoffscreenwindow_p.h" #include "qeglfshooks_p.h" #include <QtGui/QOffscreenSurface> -#include <QtPlatformSupport/private/qeglconvenience_p.h> +#include <QtEglSupport/private/qeglconvenience_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/eglfs/api/qeglfsscreen.cpp b/src/plugins/platforms/eglfs/api/qeglfsscreen.cpp index b0c32e5176..5613179041 100644 --- a/src/plugins/platforms/eglfs/api/qeglfsscreen.cpp +++ b/src/plugins/platforms/eglfs/api/qeglfsscreen.cpp @@ -41,7 +41,7 @@ #include <QtGui/qwindow.h> #include <qpa/qwindowsysteminterface.h> #include <qpa/qplatformcursor.h> -#include <QtPlatformSupport/private/qopenglcompositor_p.h> +#include <QtPlatformCompositorSupport/private/qopenglcompositor_p.h> #include "qeglfsscreen_p.h" #include "qeglfswindow_p.h" diff --git a/src/plugins/platforms/eglfs/api/qeglfswindow.cpp b/src/plugins/platforms/eglfs/api/qeglfswindow.cpp index 5ce88e6bd8..e79b377d40 100644 --- a/src/plugins/platforms/eglfs/api/qeglfswindow.cpp +++ b/src/plugins/platforms/eglfs/api/qeglfswindow.cpp @@ -43,8 +43,8 @@ #include <private/qguiapplication_p.h> #include <QtGui/private/qopenglcontext_p.h> #include <QtGui/QOpenGLContext> -#include <QtPlatformSupport/private/qeglconvenience_p.h> -#include <QtPlatformSupport/private/qopenglcompositorbackingstore_p.h> +#include <QtEglSupport/private/qeglconvenience_p.h> +#include <QtPlatformCompositorSupport/private/qopenglcompositorbackingstore_p.h> #include "qeglfswindow_p.h" #include "qeglfscursor_p.h" diff --git a/src/plugins/platforms/eglfs/api/qeglfswindow_p.h b/src/plugins/platforms/eglfs/api/qeglfswindow_p.h index 6e752b8f79..0889f27ae3 100644 --- a/src/plugins/platforms/eglfs/api/qeglfswindow_p.h +++ b/src/plugins/platforms/eglfs/api/qeglfswindow_p.h @@ -56,7 +56,7 @@ #include "qeglfsscreen_p.h" #include <qpa/qplatformwindow.h> -#include <QtPlatformSupport/private/qopenglcompositor_p.h> +#include <QtPlatformCompositorSupport/private/qopenglcompositor_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_brcm/eglfs_brcm.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_brcm/eglfs_brcm.pro index 7f1e7b9f59..fee67da2de 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_brcm/eglfs_brcm.pro +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_brcm/eglfs_brcm.pro @@ -1,6 +1,6 @@ TARGET = qeglfs-brcm-integration -QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private +QT += core-private gui-private eglfsdeviceintegration-private INCLUDEPATH += $$PWD/../../api CONFIG += egl diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.pro index 10571dc978..255db824b7 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.pro +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.pro @@ -4,7 +4,7 @@ PLUGIN_TYPE = egldeviceintegrations PLUGIN_CLASS_NAME = QEglFSKmsGbmIntegrationPlugin load(qt_plugin) -QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private eglfs_kms_support-private +QT += core-private gui-private eglfsdeviceintegration-private eglfs_kms_support-private INCLUDEPATH += $$PWD/../../api $$PWD/../eglfs_kms_support diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp index a5ab73cca4..38419a55c8 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp @@ -45,7 +45,7 @@ #include "qeglfskmsgbmcursor.h" #include "private/qeglfscursor_p.h" -#include <QtPlatformSupport/private/qdevicediscovery_p.h> +#include <QtDeviceDiscoverySupport/private/qdevicediscovery_p.h> #include <QtCore/QLoggingCategory> #include <QtCore/QJsonDocument> #include <QtCore/QJsonObject> @@ -126,7 +126,7 @@ QEglFSKmsDevice *QEglFSKmsGbmIntegration::createDevice(const QString &devicePath } else { QDeviceDiscovery *d = QDeviceDiscovery::create(QDeviceDiscovery::Device_VideoMask); - QStringList devices = d->scanConnectedDevices(); + const QStringList devices = d->scanConnectedDevices(); qCDebug(qLcEglfsKmsDebug) << "Found the following video devices:" << devices; d->deleteLater(); diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp index 75ff3ac749..bed775ff81 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp @@ -47,7 +47,7 @@ #include <QtCore/QLoggingCategory> #include <QtGui/private/qguiapplication_p.h> -#include <QtPlatformSupport/private/qfbvthandler_p.h> +#include <QtFbSupport/private/qfbvthandler_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/eglfs_kms_egldevice.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/eglfs_kms_egldevice.pro index 582982df76..a625021aba 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/eglfs_kms_egldevice.pro +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/eglfs_kms_egldevice.pro @@ -1,6 +1,6 @@ TARGET = qeglfs-kms-egldevice-integration -QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private eglfs_kms_support-private +QT += core-private gui-private eglfsdeviceintegration-private eglfs_kms_support-private INCLUDEPATH += $$PWD/../../api $$PWD/../eglfs_kms_support diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.cpp index d30963ff96..60989e2bd0 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.cpp @@ -79,7 +79,7 @@ void QEglFSKmsEglDevice::close() EGLNativeDisplayType QEglFSKmsEglDevice::nativeDisplay() const { - return static_cast<QEglFSKmsEglDeviceIntegration *>(m_integration)->eglDevice(); + return reinterpret_cast<EGLNativeDisplayType>(static_cast<QEglFSKmsEglDeviceIntegration *>(m_integration)->eglDevice()); } QEglFSKmsScreen *QEglFSKmsEglDevice::createScreen(QEglFSKmsIntegration *integration, QEglFSKmsDevice *device, diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp index ddb2499751..d0c9c9565e 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp @@ -39,7 +39,7 @@ ****************************************************************************/ #include "qeglfskmsegldeviceintegration.h" -#include <QtPlatformSupport/private/qeglconvenience_p.h> +#include <QtEglSupport/private/qeglconvenience_p.h> #include "private/qeglfswindow_p.h" #include "private/qeglfscursor_p.h" #include "qeglfskmsegldevice.h" diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.h index 375c388548..cddfdbd5c6 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.h +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.h @@ -46,7 +46,7 @@ #include <xf86drm.h> #include <xf86drmMode.h> -#include <QtPlatformSupport/private/qeglstreamconvenience_p.h> +#include <QtEglSupport/private/qeglstreamconvenience_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp index 55d5941e5f..1f672afeb4 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp @@ -88,7 +88,7 @@ void QEglFSKmsEglDeviceScreen::waitForFlip() qCDebug(qLcEglfsKmsDebug, "Setting mode"); int ret = drmModeSetCrtc(device()->fd(), output().crtc_id, - -1, 0, 0, + uint32_t(-1), 0, 0, &output().connector_id, 1, &output().modes[output().mode]); if (ret) diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/eglfs_kms_support.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/eglfs_kms_support.pro index f88a7c847e..487edb569e 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/eglfs_kms_support.pro +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/eglfs_kms_support.pro @@ -2,7 +2,7 @@ TARGET = QtEglFsKmsSupport CONFIG += no_module_headers internal_module load(qt_module) -QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private +QT += core-private gui-private eglfsdeviceintegration-private INCLUDEPATH += $$PWD/../../api diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.cpp index 6c30e8f930..5368a6d031 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.cpp @@ -42,15 +42,12 @@ #include "qeglfskmsintegration.h" #include "qeglfskmsdevice.h" #include "qeglfskmsscreen.h" -#include "private/qeglfswindow_p.h" -#include "private/qeglfscursor_p.h" -#include <QtPlatformSupport/private/qeglconvenience_p.h> #include <QtCore/QJsonDocument> #include <QtCore/QJsonObject> #include <QtCore/QJsonArray> +#include <QtCore/QFile> #include <QtGui/qpa/qplatformwindow.h> -#include <QtGui/qpa/qplatformcursor.h> #include <QtGui/QScreen> #include <xf86drm.h> diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp index e4b6c67f28..4021609407 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp @@ -46,7 +46,7 @@ #include <QtCore/QLoggingCategory> #include <QtGui/private/qguiapplication_p.h> -#include <QtPlatformSupport/private/qfbvthandler_p.h> +#include <QtFbSupport/private/qfbvthandler_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_mali/eglfs_mali.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_mali/eglfs_mali.pro index e72f5bdd14..5e6f636e2b 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_mali/eglfs_mali.pro +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_mali/eglfs_mali.pro @@ -1,6 +1,6 @@ TARGET = qeglfs-mali-integration -QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private +QT += core-private gui-private eglfsdeviceintegration-private # Avoid X11 header collision, use generic EGL native types DEFINES += QT_EGL_NO_X11 diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv/eglfs_viv.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv/eglfs_viv.pro index 364812ec60..f9cce8d48b 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv/eglfs_viv.pro +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv/eglfs_viv.pro @@ -1,6 +1,6 @@ TARGET = qeglfs-viv-integration -QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private +QT += core-private gui-private eglfsdeviceintegration-private INCLUDEPATH += $$PWD/../../api CONFIG += egl diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv_wl/eglfs_viv_wl.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv_wl/eglfs_viv_wl.pro index ccdf20b417..065a103376 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv_wl/eglfs_viv_wl.pro +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv_wl/eglfs_viv_wl.pro @@ -1,6 +1,6 @@ TARGET = qeglfs-viv-wl-integration -QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private +QT += core-private gui-private eglfsdeviceintegration-private INCLUDEPATH += $$PWD/../../api CONFIG += egl @@ -14,8 +14,7 @@ HEADERS += $$PWD/qeglfsvivwlintegration.h OTHER_FILES += $$PWD/eglfs_viv_wl.json -CONFIG += link_pkgconfig -PKGCONFIG_PRIVATE += wayland-server +QMAKE_USE_PRIVATE += wayland_server PLUGIN_TYPE = egldeviceintegrations PLUGIN_CLASS_NAME = QEglFSVivWaylandIntegrationPlugin diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/eglfs_x11.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/eglfs_x11.pro index 51a026e2cf..391f63615b 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/eglfs_x11.pro +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/eglfs_x11.pro @@ -1,6 +1,6 @@ TARGET = qeglfs-x11-integration -QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private +QT += core-private gui-private eglfsdeviceintegration-private # Avoid X11 header collision, use generic EGL native types DEFINES += QT_EGL_NO_X11 diff --git a/src/plugins/platforms/eglfs/eglfs-plugin.pro b/src/plugins/platforms/eglfs/eglfs-plugin.pro index d8adc13226..cf4863975a 100644 --- a/src/plugins/platforms/eglfs/eglfs-plugin.pro +++ b/src/plugins/platforms/eglfs/eglfs-plugin.pro @@ -1,6 +1,6 @@ TARGET = qeglfs -QT += platformsupport-private eglfsdeviceintegration-private +QT += eglfsdeviceintegration-private SOURCES += $$PWD/qeglfsmain.cpp diff --git a/src/plugins/platforms/eglfs/eglfsdeviceintegration.pro b/src/plugins/platforms/eglfs/eglfsdeviceintegration.pro index 15a825a7b0..35af3615bd 100644 --- a/src/plugins/platforms/eglfs/eglfsdeviceintegration.pro +++ b/src/plugins/platforms/eglfs/eglfsdeviceintegration.pro @@ -8,7 +8,15 @@ TARGET = QtEglFSDeviceIntegration CONFIG += internal_module MODULE = eglfsdeviceintegration -QT += core-private gui-private platformsupport-private +QT += \ + core-private gui-private \ + devicediscovery_support-private eventdispatcher_support-private \ + service_support-private theme_support-private fontdatabase_support-private \ + fb_support-private egl_support-private platformcompositor_support-private + +qtHaveModule(input_support-private): \ + QT += input_support-private + LIBS += $$QMAKE_LIBS_DYNLOAD # Avoid X11 header collision, use generic EGL native types @@ -31,7 +39,11 @@ QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF DEFINES += EGLFS_PREFERRED_PLUGIN=$$EGLFS_DEVICE_INTEGRATION } -CONFIG += egl qpa/genericunixfontdatabase +CONFIG += egl + +# Prevent gold linker from crashing. +# This started happening when QtPlatformSupport was modularized. +use_gold_linker: CONFIG += no_linker_version_script !contains(DEFINES, QT_NO_CURSOR): RESOURCES += $$PWD/cursor.qrc diff --git a/src/plugins/platforms/haiku/haiku.pro b/src/plugins/platforms/haiku/haiku.pro index ea5bb632db..fd1f47b963 100644 --- a/src/plugins/platforms/haiku/haiku.pro +++ b/src/plugins/platforms/haiku/haiku.pro @@ -1,6 +1,6 @@ TARGET = qhaiku -QT += platformsupport-private core-private gui-private +QT += core-private gui-private eventdistpatcher_support-private SOURCES = \ main.cpp \ @@ -36,8 +36,6 @@ LIBS += -lbe OTHER_FILES += haiku.json -include (../../../platformsupport/fontdatabases/fontdatabases.pri) - PLUGIN_TYPE = platforms PLUGIN_CLASS_NAME = QHaikuIntegrationPlugin load(qt_plugin) diff --git a/src/plugins/platforms/haiku/qhaikuintegration.cpp b/src/plugins/platforms/haiku/qhaikuintegration.cpp index d239380866..d46d77ff18 100644 --- a/src/plugins/platforms/haiku/qhaikuintegration.cpp +++ b/src/plugins/platforms/haiku/qhaikuintegration.cpp @@ -49,7 +49,7 @@ #include <QCoreApplication> #include <QFileInfo> #include <qpa/qplatformwindow.h> -#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h> +#include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h> #include <Application.h> diff --git a/src/plugins/platforms/integrity/integrity.pro b/src/plugins/platforms/integrity/integrity.pro index 07dbf4093d..0fb256793d 100644 --- a/src/plugins/platforms/integrity/integrity.pro +++ b/src/plugins/platforms/integrity/integrity.pro @@ -1,6 +1,9 @@ TARGET = integrityfb -QT += core-private gui-private platformsupport-private +QT += \ + core-private gui-private \ + eventdispatcher_support-private service_support-private \ + fontdatabase_support-private fb_support-private SOURCES = \ main.cpp \ @@ -13,8 +16,6 @@ HEADERS = \ qintegrityfbscreen.h \ qintegrityhidmanager.h -CONFIG += qpa/genericunixfontdatabase - OTHER_FILES += integrity.json PLUGIN_TYPE = platforms diff --git a/src/plugins/platforms/integrity/qintegrityfbintegration.cpp b/src/plugins/platforms/integrity/qintegrityfbintegration.cpp index 5332718c5e..a88c85e30d 100644 --- a/src/plugins/platforms/integrity/qintegrityfbintegration.cpp +++ b/src/plugins/platforms/integrity/qintegrityfbintegration.cpp @@ -35,13 +35,13 @@ #include "qintegrityfbscreen.h" #include "qintegrityhidmanager.h" -#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h> -#include <QtPlatformSupport/private/qgenericunixservices_p.h> -#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h> +#include <QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h> +#include <QtServiceSupport/private/qgenericunixservices_p.h> +#include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h> -#include <QtPlatformSupport/private/qfbbackingstore_p.h> -#include <QtPlatformSupport/private/qfbwindow_p.h> -#include <QtPlatformSupport/private/qfbcursor_p.h> +#include <QtFbSupport/private/qfbbackingstore_p.h> +#include <QtFbSupport/private/qfbwindow_p.h> +#include <QtFbSupport/private/qfbcursor_p.h> #include <QtGui/private/qguiapplication_p.h> #include <qpa/qplatforminputcontextfactory_p.h> diff --git a/src/plugins/platforms/integrity/qintegrityfbscreen.cpp b/src/plugins/platforms/integrity/qintegrityfbscreen.cpp index e043da7786..256cc117a2 100644 --- a/src/plugins/platforms/integrity/qintegrityfbscreen.cpp +++ b/src/plugins/platforms/integrity/qintegrityfbscreen.cpp @@ -32,8 +32,8 @@ ****************************************************************************/ #include "qintegrityfbscreen.h" -#include <QtPlatformSupport/private/qfbcursor_p.h> -#include <QtPlatformSupport/private/qfbwindow_p.h> +#include <QtFbSupport/private/qfbcursor_p.h> +#include <QtFbSupport/private/qfbwindow_p.h> #include <QtCore/QRegularExpression> #include <QtGui/QPainter> diff --git a/src/plugins/platforms/integrity/qintegrityfbscreen.h b/src/plugins/platforms/integrity/qintegrityfbscreen.h index 2a83f3426f..5b4d900a4b 100644 --- a/src/plugins/platforms/integrity/qintegrityfbscreen.h +++ b/src/plugins/platforms/integrity/qintegrityfbscreen.h @@ -34,7 +34,7 @@ #ifndef QINTEGRITYFBSCREEN_H #define QINTEGRITYFBSCREEN_H -#include <QtPlatformSupport/private/qfbscreen_p.h> +#include <QtFbSupport/private/qfbscreen_p.h> #include <device/fbdriver.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/ios/ios.pro b/src/plugins/platforms/ios/ios.pro index 35e4719955..594ccefcf1 100644 --- a/src/plugins/platforms/ios/ios.pro +++ b/src/plugins/platforms/ios/ios.pro @@ -1,76 +1,2 @@ -TARGET = qios - -# QTBUG-42937: Work around linker errors caused by circular -# dependencies between the iOS platform plugin and the user -# application's main() when the plugin is a shared library. -qtConfig(shared): CONFIG += static - -QT += core-private gui-private platformsupport-private -LIBS += -framework Foundation -framework UIKit -framework QuartzCore -framework AudioToolbox - -OBJECTIVE_SOURCES = \ - plugin.mm \ - qiosintegration.mm \ - qioseventdispatcher.mm \ - qioswindow.mm \ - qiosscreen.mm \ - qiosbackingstore.mm \ - qiosapplicationdelegate.mm \ - qiosapplicationstate.mm \ - qiosviewcontroller.mm \ - qioscontext.mm \ - qiosinputcontext.mm \ - qiostheme.mm \ - qiosglobal.mm \ - qiosservices.mm \ - quiview.mm \ - quiaccessibilityelement.mm \ - qiosplatformaccessibility.mm \ - qiostextresponder.mm - -HEADERS = \ - qiosintegration.h \ - qioseventdispatcher.h \ - qioswindow.h \ - qiosscreen.h \ - qiosbackingstore.h \ - qiosapplicationdelegate.h \ - qiosapplicationstate.h \ - qiosviewcontroller.h \ - qioscontext.h \ - qiosinputcontext.h \ - qiostheme.h \ - qiosglobal.h \ - qiosservices.h \ - quiview.h \ - quiaccessibilityelement.h \ - qiosplatformaccessibility.h \ - qiostextresponder.h \ - qiosfileenginefactory.h - -!tvos { - LIBS += -framework AssetsLibrary - OBJECTIVE_SOURCES += \ - qiosclipboard.mm \ - qiosmenu.mm \ - qiosfileengineassetslibrary.mm \ - qiosfiledialog.mm \ - qiosmessagedialog.mm \ - qiostextinputoverlay.mm - HEADERS += \ - qiosclipboard.h \ - qiosmenu.h \ - qiosfileengineassetslibrary.h \ - qiosfiledialog.h \ - qiosmessagedialog.h \ - qiostextinputoverlay.h -} - -OTHER_FILES = \ - quiview_textinput.mm \ - quiview_accessibility.mm - -PLUGIN_TYPE = platforms -PLUGIN_CLASS_NAME = QIOSIntegrationPlugin -!equals(TARGET, $$QT_DEFAULT_QPA_PLUGIN): PLUGIN_EXTENDS = - -load(qt_plugin) +TEMPLATE = subdirs +SUBDIRS = kernel.pro optional diff --git a/src/plugins/platforms/ios/kernel.pro b/src/plugins/platforms/ios/kernel.pro new file mode 100644 index 0000000000..0fe012071d --- /dev/null +++ b/src/plugins/platforms/ios/kernel.pro @@ -0,0 +1,77 @@ +TARGET = qios + +# QTBUG-42937: Work around linker errors caused by circular +# dependencies between the iOS platform plugin and the user +# application's main() when the plugin is a shared library. +qtConfig(shared): CONFIG += static + +QT += \ + core-private gui-private \ + clipboard_support-private fontdatabase_support-private graphics_support-private + +LIBS += -framework Foundation -framework UIKit -framework QuartzCore -framework AudioToolbox + +OBJECTIVE_SOURCES = \ + plugin.mm \ + qiosintegration.mm \ + qioseventdispatcher.mm \ + qioswindow.mm \ + qiosscreen.mm \ + qiosbackingstore.mm \ + qiosapplicationdelegate.mm \ + qiosapplicationstate.mm \ + qiosviewcontroller.mm \ + qioscontext.mm \ + qiosinputcontext.mm \ + qiostheme.mm \ + qiosglobal.mm \ + qiosservices.mm \ + quiview.mm \ + quiaccessibilityelement.mm \ + qiosplatformaccessibility.mm \ + qiostextresponder.mm + +HEADERS = \ + qiosintegration.h \ + qioseventdispatcher.h \ + qioswindow.h \ + qiosscreen.h \ + qiosbackingstore.h \ + qiosapplicationdelegate.h \ + qiosapplicationstate.h \ + qiosviewcontroller.h \ + qioscontext.h \ + qiosinputcontext.h \ + qiostheme.h \ + qiosglobal.h \ + qiosservices.h \ + quiview.h \ + quiaccessibilityelement.h \ + qiosplatformaccessibility.h \ + qiostextresponder.h \ + qiosfileenginefactory.h + +!tvos { + LIBS += -framework AssetsLibrary + OBJECTIVE_SOURCES += \ + qiosclipboard.mm \ + qiosmenu.mm \ + qiosfiledialog.mm \ + qiosmessagedialog.mm \ + qiostextinputoverlay.mm + HEADERS += \ + qiosclipboard.h \ + qiosmenu.h \ + qiosfiledialog.h \ + qiosmessagedialog.h \ + qiostextinputoverlay.h +} + +OTHER_FILES = \ + quiview_textinput.mm \ + quiview_accessibility.mm + +PLUGIN_TYPE = platforms +PLUGIN_CLASS_NAME = QIOSIntegrationPlugin +!equals(TARGET, $$QT_DEFAULT_QPA_PLUGIN): PLUGIN_EXTENDS = - +load(qt_plugin) diff --git a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/nsphotolibrarysupport.pro b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/nsphotolibrarysupport.pro new file mode 100644 index 0000000000..f4588dda03 --- /dev/null +++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/nsphotolibrarysupport.pro @@ -0,0 +1,22 @@ +TARGET = qiosnsphotolibrarysupport + +QT += core gui gui-private +LIBS += -framework UIKit -framework AssetsLibrary + +HEADERS = \ + qiosfileengineassetslibrary.h \ + qiosfileenginefactory.h \ + qiosimagepickercontroller.h + +OBJECTIVE_SOURCES = \ + plugin.mm \ + qiosfileengineassetslibrary.mm \ + qiosimagepickercontroller.mm \ + +OTHER_FILES = \ + plugin.json + +PLUGIN_CLASS_NAME = QIosOptionalPlugin_NSPhotoLibrary +PLUGIN_EXTENDS = - +PLUGIN_TYPE = platforms/darwin +load(qt_plugin) diff --git a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/plugin.json b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/plugin.json new file mode 100644 index 0000000000..4491fb3d59 --- /dev/null +++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/plugin.json @@ -0,0 +1,3 @@ +{ + "Keys": [ "NSPhotoLibrarySupport" ] +} diff --git a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/plugin.mm b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/plugin.mm new file mode 100644 index 0000000000..2ec0d33a41 --- /dev/null +++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/plugin.mm @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "../../qiosoptionalplugininterface.h" +#include "../../qiosfiledialog.h" + +#include "qiosimagepickercontroller.h" +#include "qiosfileenginefactory.h" + +QT_BEGIN_NAMESPACE + +class QIosOptionalPlugin_NSPhotoLibrary : public QObject, QIosOptionalPluginInterface +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID QIosOptionalPluginInterface_iid FILE "plugin.json") + Q_INTERFACES(QIosOptionalPluginInterface) + +public: + explicit QIosOptionalPlugin_NSPhotoLibrary(QObject* = 0) {}; + ~QIosOptionalPlugin_NSPhotoLibrary() {} + + UIViewController* createImagePickerController(QIOSFileDialog *fileDialog) const override + { + return [[[QIOSImagePickerController alloc] initWithQIOSFileDialog:fileDialog] autorelease]; + } + +private: + QIOSFileEngineFactory m_fileEngineFactory; + +}; + +QT_END_NAMESPACE + +#include "plugin.moc" diff --git a/src/plugins/platforms/ios/qiosfileengineassetslibrary.h b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h index 06f2e8d2ca..8d7cabf15b 100644 --- a/src/plugins/platforms/ios/qiosfileengineassetslibrary.h +++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h @@ -43,6 +43,9 @@ #include <QtCore/private/qabstractfileengine_p.h> Q_FORWARD_DECLARE_OBJC_CLASS(ALAsset); + +QT_BEGIN_NAMESPACE + class QIOSAssetData; class QIOSFileEngineAssetsLibrary : public QAbstractFileEngine @@ -51,20 +54,20 @@ public: QIOSFileEngineAssetsLibrary(const QString &fileName); ~QIOSFileEngineAssetsLibrary(); - bool open(QIODevice::OpenMode openMode) Q_DECL_OVERRIDE; - bool close() Q_DECL_OVERRIDE; - FileFlags fileFlags(FileFlags type) const Q_DECL_OVERRIDE; - qint64 size() const Q_DECL_OVERRIDE; - qint64 read(char *data, qint64 maxlen) Q_DECL_OVERRIDE; - qint64 pos() const Q_DECL_OVERRIDE; - bool seek(qint64 pos) Q_DECL_OVERRIDE; - QString fileName(FileName file) const Q_DECL_OVERRIDE; - void setFileName(const QString &file) Q_DECL_OVERRIDE; - QStringList entryList(QDir::Filters filters, const QStringList &filterNames) const Q_DECL_OVERRIDE; + bool open(QIODevice::OpenMode openMode) override; + bool close() override; + FileFlags fileFlags(FileFlags type) const override; + qint64 size() const override; + qint64 read(char *data, qint64 maxlen) override; + qint64 pos() const override; + bool seek(qint64 pos) override; + QString fileName(FileName file) const override; + void setFileName(const QString &file) override; + QStringList entryList(QDir::Filters filters, const QStringList &filterNames) const override; #ifndef QT_NO_FILESYSTEMITERATOR - Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) Q_DECL_OVERRIDE; - Iterator *endEntryList() Q_DECL_OVERRIDE; + Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) override; + Iterator *endEntryList() override; #endif void setError(QFile::FileError error, const QString &str) { QAbstractFileEngine::setError(error, str); } @@ -78,5 +81,7 @@ private: ALAsset *loadAsset() const; }; +QT_END_NAMESPACE + #endif // QIOSFILEENGINEASSETSLIBRARY_H diff --git a/src/plugins/platforms/ios/qiosfileengineassetslibrary.mm b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm index 560c54924a..bea2897240 100644 --- a/src/plugins/platforms/ios/qiosfileengineassetslibrary.mm +++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm @@ -48,6 +48,8 @@ #include <QtCore/qset.h> #include <QtCore/qthreadstorage.h> +QT_BEGIN_NAMESPACE + static QThreadStorage<QString> g_iteratorCurrentUrl; static QThreadStorage<QPointer<QIOSAssetData> > g_assetDataCache; @@ -472,4 +474,6 @@ QAbstractFileEngine::Iterator *QIOSFileEngineAssetsLibrary::endEntryList() return 0; } +QT_END_NAMESPACE + #endif diff --git a/src/plugins/platforms/ios/qiosfileenginefactory.h b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileenginefactory.h index 87665ac603..b143357aa5 100644 --- a/src/plugins/platforms/ios/qiosfileenginefactory.h +++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileenginefactory.h @@ -44,6 +44,8 @@ #include <QtCore/private/qabstractfileengine_p.h> #include "qiosfileengineassetslibrary.h" +QT_BEGIN_NAMESPACE + class QIOSFileEngineFactory : public QAbstractFileEngineHandler { public: @@ -62,4 +64,6 @@ public: } }; +QT_END_NAMESPACE + #endif // QIOSFILEENGINEFACTORY_H diff --git a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosimagepickercontroller.h b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosimagepickercontroller.h new file mode 100644 index 0000000000..df3f6b9fa3 --- /dev/null +++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosimagepickercontroller.h @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#import <UIKit/UIKit.h> + +#include "../../qiosfiledialog.h" + +@interface QIOSImagePickerController : UIImagePickerController <UIImagePickerControllerDelegate, UINavigationControllerDelegate> { + QIOSFileDialog *m_fileDialog; +} +- (id)initWithQIOSFileDialog:(QIOSFileDialog *)fileDialog; +@end diff --git a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosimagepickercontroller.mm b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosimagepickercontroller.mm new file mode 100644 index 0000000000..f9662b964a --- /dev/null +++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosimagepickercontroller.mm @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#import <UIKit/UIKit.h> + +#include "qiosimagepickercontroller.h" + +@implementation QIOSImagePickerController + +- (id)initWithQIOSFileDialog:(QIOSFileDialog *)fileDialog +{ + self = [super init]; + if (self) { + m_fileDialog = fileDialog; + [self setSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; + [self setDelegate:self]; + } + return self; +} + +- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info +{ + Q_UNUSED(picker); + NSURL *url = [info objectForKey:UIImagePickerControllerReferenceURL]; + QUrl fileUrl = QUrl::fromLocalFile(QString::fromNSString([url description])); + m_fileDialog->selectedFilesChanged(QList<QUrl>() << fileUrl); + emit m_fileDialog->accept(); +} + +- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker +{ + Q_UNUSED(picker) + emit m_fileDialog->reject(); +} + +@end diff --git a/src/plugins/platforms/ios/optional/optional.pro b/src/plugins/platforms/ios/optional/optional.pro new file mode 100644 index 0000000000..5e3421a025 --- /dev/null +++ b/src/plugins/platforms/ios/optional/optional.pro @@ -0,0 +1,2 @@ +TEMPLATE = subdirs +SUBDIRS = nsphotolibrarysupport diff --git a/src/plugins/platforms/ios/qiosbackingstore.h b/src/plugins/platforms/ios/qiosbackingstore.h index 5c37be5d38..1c072c0935 100644 --- a/src/plugins/platforms/ios/qiosbackingstore.h +++ b/src/plugins/platforms/ios/qiosbackingstore.h @@ -42,7 +42,7 @@ #include <qpa/qplatformbackingstore.h> -#include <QtPlatformSupport/private/qrasterbackingstore_p.h> +#include <QtGraphicsSupport/private/qrasterbackingstore_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/ios/qiosclipboard.mm b/src/plugins/platforms/ios/qiosclipboard.mm index 960c9f39db..ef3b453bbf 100644 --- a/src/plugins/platforms/ios/qiosclipboard.mm +++ b/src/plugins/platforms/ios/qiosclipboard.mm @@ -41,7 +41,7 @@ #ifndef QT_NO_CLIPBOARD -#include <QtPlatformSupport/private/qmacmime_p.h> +#include <QtClipboardSupport/private/qmacmime_p.h> #include <QtCore/QMimeData> #include <QtGui/QGuiApplication> diff --git a/src/plugins/platforms/ios/qiosfiledialog.h b/src/plugins/platforms/ios/qiosfiledialog.h index 7fe24eaefe..0b56bd20bf 100644 --- a/src/plugins/platforms/ios/qiosfiledialog.h +++ b/src/plugins/platforms/ios/qiosfiledialog.h @@ -72,6 +72,8 @@ private: QList<QUrl> m_selection; QEventLoop m_eventLoop; UIViewController *m_viewController; + + bool showImagePickerDialog(QWindow *parent); }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/ios/qiosfiledialog.mm b/src/plugins/platforms/ios/qiosfiledialog.mm index 70536fc5dc..c5722d33f8 100644 --- a/src/plugins/platforms/ios/qiosfiledialog.mm +++ b/src/plugins/platforms/ios/qiosfiledialog.mm @@ -37,52 +37,18 @@ ** ****************************************************************************/ -#include "qiosfiledialog.h" - #import <UIKit/UIKit.h> #include <QtCore/qstandardpaths.h> #include <QtGui/qwindow.h> +#include <QDebug> -@interface QIOSImagePickerController : UIImagePickerController <UIImagePickerControllerDelegate, UINavigationControllerDelegate> { - QIOSFileDialog *m_fileDialog; -} -@end - -@implementation QIOSImagePickerController - -- (id)initWithQIOSFileDialog:(QIOSFileDialog *)fileDialog -{ - self = [super init]; - if (self) { - m_fileDialog = fileDialog; - [self setSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; - [self setDelegate:self]; - } - return self; -} - -- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info -{ - Q_UNUSED(picker); - NSURL *url = [info objectForKey:UIImagePickerControllerReferenceURL]; - QUrl fileUrl = QUrl::fromLocalFile(QString::fromNSString([url description])); - m_fileDialog->selectedFilesChanged(QList<QUrl>() << fileUrl); - emit m_fileDialog->accept(); -} - -- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker -{ - Q_UNUSED(picker) - emit m_fileDialog->reject(); -} - -@end - -// -------------------------------------------------------------------------- +#include "qiosfiledialog.h" +#include "qiosintegration.h" +#include "qiosoptionalplugininterface.h" QIOSFileDialog::QIOSFileDialog() - : m_viewController(0) + : m_viewController(Q_NULLPTR) { } @@ -104,17 +70,36 @@ bool QIOSFileDialog::show(Qt::WindowFlags windowFlags, Qt::WindowModality window bool acceptOpen = options()->acceptMode() == QFileDialogOptions::AcceptOpen; QString directory = options()->initialDirectory().toLocalFile(); - if (acceptOpen && directory.startsWith(QLatin1String("assets-library:"))) { - m_viewController = [[QIOSImagePickerController alloc] initWithQIOSFileDialog:this]; - UIWindow *window = parent ? reinterpret_cast<UIView *>(parent->winId()).window - : [UIApplication sharedApplication].keyWindow; - [window.rootViewController presentViewController:m_viewController animated:YES completion:nil]; - return true; - } + if (acceptOpen && directory.startsWith(QLatin1String("assets-library:"))) + return showImagePickerDialog(parent); return false; } +bool QIOSFileDialog::showImagePickerDialog(QWindow *parent) +{ + if (!m_viewController) { + QFactoryLoader *plugins = QIOSIntegration::instance()->optionalPlugins(); + for (int i = 0; i < plugins->metaData().size(); ++i) { + QIosOptionalPluginInterface *plugin = qobject_cast<QIosOptionalPluginInterface *>(plugins->instance(i)); + m_viewController = [plugin->createImagePickerController(this) retain]; + if (m_viewController) + break; + } + } + + if (!m_viewController) { + qWarning() << "QIOSFileDialog: Could not resolve Qt plugin that gives access to photos on iOS"; + return false; + } + + UIWindow *window = parent ? reinterpret_cast<UIView *>(parent->winId()).window + : [UIApplication sharedApplication].keyWindow; + [window.rootViewController presentViewController:m_viewController animated:YES completion:nil]; + + return true; +} + void QIOSFileDialog::hide() { // QFileDialog will remember the last directory set, and open subsequent dialogs in the same @@ -126,6 +111,8 @@ void QIOSFileDialog::hide() emit directoryEntered(QUrl::fromLocalFile(QDir::currentPath())); [m_viewController dismissViewControllerAnimated:YES completion:nil]; + [m_viewController release]; + m_viewController = Q_NULLPTR; m_eventLoop.exit(); } diff --git a/src/plugins/platforms/ios/qiosintegration.h b/src/plugins/platforms/ios/qiosintegration.h index d9a43a683e..54c1a1dcb7 100644 --- a/src/plugins/platforms/ios/qiosintegration.h +++ b/src/plugins/platforms/ios/qiosintegration.h @@ -44,8 +44,9 @@ #include <qpa/qplatformnativeinterface.h> #include <qpa/qwindowsysteminterface.h> +#include <QtCore/private/qfactoryloader_p.h> + #include "qiosapplicationstate.h" -#include "qiosfileenginefactory.h" #ifndef Q_OS_TVOS #include "qiostextinputoverlay.h" #endif @@ -106,6 +107,8 @@ public: void setDebugWindowManagement(bool); bool debugWindowManagement() const; + QFactoryLoader *optionalPlugins() { return m_optionalPlugins; } + private: QPlatformFontDatabase *m_fontDatabase; #ifndef Q_OS_TVOS @@ -116,7 +119,7 @@ private: QIOSApplicationState m_applicationState; QIOSServices *m_platformServices; mutable QPlatformAccessibility *m_accessibility; - QIOSFileEngineFactory m_fileEngineFactory; + QFactoryLoader *m_optionalPlugins; #ifndef Q_OS_TVOS QIOSTextInputOverlay m_textInputOverlay; #endif diff --git a/src/plugins/platforms/ios/qiosintegration.mm b/src/plugins/platforms/ios/qiosintegration.mm index 9799e29cf2..fbf167b514 100644 --- a/src/plugins/platforms/ios/qiosintegration.mm +++ b/src/plugins/platforms/ios/qiosintegration.mm @@ -51,14 +51,15 @@ #include "qiosinputcontext.h" #include "qiostheme.h" #include "qiosservices.h" +#include "qiosoptionalplugininterface.h" #include <QtGui/private/qguiapplication_p.h> #include <qoffscreensurface.h> #include <qpa/qplatformoffscreensurface.h> -#include <QtPlatformSupport/private/qcoretextfontdatabase_p.h> -#include <QtPlatformSupport/private/qmacmime_p.h> +#include <QtFontDatabaseSupport/private/qcoretextfontdatabase_p.h> +#include <QtClipboardSupport/private/qmacmime_p.h> #include <QDir> #include <QOperatingSystemVersion> @@ -81,6 +82,7 @@ QIOSIntegration::QIOSIntegration() , m_inputContext(0) , m_platformServices(new QIOSServices) , m_accessibility(0) + , m_optionalPlugins(new QFactoryLoader(QIosOptionalPluginInterface_iid, QLatin1String("/platforms/darwin"))) , m_debugWindowManagement(false) { if (Q_UNLIKELY(![UIApplication sharedApplication])) { @@ -125,6 +127,9 @@ QIOSIntegration::QIOSIntegration() m_touchDevice->setCapabilities(touchCapabilities); QWindowSystemInterface::registerTouchDevice(m_touchDevice); QMacInternalPasteboardMime::initializeMimeTypes(); + + for (int i = 0; i < m_optionalPlugins->metaData().size(); ++i) + qobject_cast<QIosOptionalPluginInterface *>(m_optionalPlugins->instance(i))->initPlugin(); } QIOSIntegration::~QIOSIntegration() @@ -149,6 +154,9 @@ QIOSIntegration::~QIOSIntegration() delete m_accessibility; m_accessibility = 0; + + delete m_optionalPlugins; + m_optionalPlugins = 0; } bool QIOSIntegration::hasCapability(Capability cap) const @@ -228,7 +236,7 @@ QPlatformClipboard *QIOSIntegration::clipboard() const #ifndef Q_OS_TVOS return m_clipboard; #else - return 0; + return QPlatformIntegration::clipboard(); #endif } #endif diff --git a/src/plugins/platforms/ios/qiosoptionalplugininterface.h b/src/plugins/platforms/ios/qiosoptionalplugininterface.h new file mode 100644 index 0000000000..bcb8978e02 --- /dev/null +++ b/src/plugins/platforms/ios/qiosoptionalplugininterface.h @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QIOPLUGININTERFACE_H +#define QIOPLUGININTERFACE_H + +#include <QtCore/QtPlugin> + +#include "qiosfiledialog.h" + +QT_BEGIN_NAMESPACE + +Q_FORWARD_DECLARE_OBJC_CLASS(UIViewController); + +#define QIosOptionalPluginInterface_iid "org.qt-project.Qt.QPA.ios.optional" + +class QIosOptionalPluginInterface +{ +public: + virtual ~QIosOptionalPluginInterface() {} + virtual void initPlugin() const {}; + virtual UIViewController* createImagePickerController(QIOSFileDialog *) const { return Q_NULLPTR; }; +}; + +Q_DECLARE_INTERFACE(QIosOptionalPluginInterface, QIosOptionalPluginInterface_iid) + +QT_END_NAMESPACE + +#endif // QIOPLUGININTERFACE_H diff --git a/src/plugins/platforms/ios/qiosscreen.mm b/src/plugins/platforms/ios/qiosscreen.mm index 86bce0d70b..49268ee076 100644 --- a/src/plugins/platforms/ios/qiosscreen.mm +++ b/src/plugins/platforms/ios/qiosscreen.mm @@ -215,8 +215,8 @@ QIOSScreen::QIOSScreen(UIScreen *screen) else m_depth = 24; - if (deviceIdentifier.contains(QRegularExpression("^iPhone(7,1|8,2)$"))) { - // iPhone 6 Plus or iPhone 6S Plus + if (deviceIdentifier.contains(QRegularExpression("^iPhone(7,1|8,2|9,2|9,4)$"))) { + // iPhone Plus models m_physicalDpi = 401; } else if (deviceIdentifier.contains(QRegularExpression("^iPad(1,1|2,[1-4]|3,[1-6]|4,[1-3]|5,[3-4]|6,[7-8])$"))) { // All iPads except the iPad Mini series diff --git a/src/plugins/platforms/ios/qiostextinputoverlay.mm b/src/plugins/platforms/ios/qiostextinputoverlay.mm index 462da0a978..48262dad10 100644 --- a/src/plugins/platforms/ios/qiostextinputoverlay.mm +++ b/src/plugins/platforms/ios/qiostextinputoverlay.mm @@ -994,7 +994,8 @@ QIOSTextInputOverlay::QIOSTextInputOverlay() QIOSTextInputOverlay::~QIOSTextInputOverlay() { - disconnect(qApp, 0, this, 0); + if (qApp) + disconnect(qApp, 0, this, 0); } void QIOSTextInputOverlay::updateFocusObject() diff --git a/src/plugins/platforms/ios/qiostextresponder.mm b/src/plugins/platforms/ios/qiostextresponder.mm index d7b0a323ad..e8d216fbc2 100644 --- a/src/plugins/platforms/ios/qiostextresponder.mm +++ b/src/plugins/platforms/ios/qiostextresponder.mm @@ -236,6 +236,8 @@ self.inputView = [[[WrapperView alloc] initWithView:inputView] autorelease]; if (UIView *accessoryView = static_cast<UIView *>(platformData.value(kImePlatformDataInputAccessoryView).value<void *>())) self.inputAccessoryView = [[[WrapperView alloc] initWithView:accessoryView] autorelease]; + +#ifndef Q_OS_TVOS if (QSysInfo::MacintoshVersion >= QSysInfo::MV_IOS_9_0) { if (platformData.value(kImePlatformDataHideShortcutsBar).toBool()) { // According to the docs, leadingBarButtonGroups/trailingBarButtonGroups should be set to nil to hide the shortcuts bar. @@ -247,6 +249,7 @@ self.inputAssistantItem.trailingBarButtonGroups = @[trailing]; } } +#endif self.undoManager.groupsByEvent = NO; [self rebuildUndoStack]; diff --git a/src/plugins/platforms/ios/qiostheme.mm b/src/plugins/platforms/ios/qiostheme.mm index 83a8176478..91980d3f35 100644 --- a/src/plugins/platforms/ios/qiostheme.mm +++ b/src/plugins/platforms/ios/qiostheme.mm @@ -44,7 +44,7 @@ #include <QtGui/QFont> -#include <QtPlatformSupport/private/qcoretextfontdatabase_p.h> +#include <QtFontDatabaseSupport/private/qcoretextfontdatabase_p.h> #include <QtGui/private/qguiapplication_p.h> #include <qpa/qplatformintegration.h> diff --git a/src/plugins/platforms/ios/qiosviewcontroller.h b/src/plugins/platforms/ios/qiosviewcontroller.h index f7b190ba22..07d5535e1a 100644 --- a/src/plugins/platforms/ios/qiosviewcontroller.h +++ b/src/plugins/platforms/ios/qiosviewcontroller.h @@ -53,11 +53,9 @@ QT_END_NAMESPACE #ifndef Q_OS_TVOS @property (nonatomic, assign) UIInterfaceOrientation lockedOrientation; -#endif // UIViewController @property (nonatomic, assign) BOOL prefersStatusBarHidden; -#ifndef Q_OS_TVOS @property (nonatomic, assign) UIStatusBarAnimation preferredStatusBarUpdateAnimation; @property (nonatomic, assign) UIStatusBarStyle preferredStatusBarStyle; #endif diff --git a/src/plugins/platforms/ios/qiosviewcontroller.mm b/src/plugins/platforms/ios/qiosviewcontroller.mm index 0478c5b8c8..c47b6d68b1 100644 --- a/src/plugins/platforms/ios/qiosviewcontroller.mm +++ b/src/plugins/platforms/ios/qiosviewcontroller.mm @@ -229,9 +229,11 @@ @implementation QIOSViewController +#ifndef Q_OS_TVOS @synthesize prefersStatusBarHidden; @synthesize preferredStatusBarUpdateAnimation; @synthesize preferredStatusBarStyle; +#endif - (id)initWithQIOSScreen:(QT_PREPEND_NAMESPACE(QIOSScreen) *)screen { diff --git a/src/plugins/platforms/ios/quiview.mm b/src/plugins/platforms/ios/quiview.mm index 25bfa2ad90..259070216e 100644 --- a/src/plugins/platforms/ios/quiview.mm +++ b/src/plugins/platforms/ios/quiview.mm @@ -165,8 +165,7 @@ requestedGeometry : qt_window_private(m_qioswindow->window())->geometry; QWindow *window = m_qioswindow->window(); - QWindowSystemInterface::handleGeometryChange(window, actualGeometry, previousGeometry); - QWindowSystemInterface::flushWindowSystemEvents(window->inherits("QWidgetWindow") ? QEventLoop::ExcludeUserInputEvents : QEventLoop::AllEvents); + QWindowSystemInterface::handleGeometryChange<QWindowSystemInterface::SynchronousDelivery>(window, actualGeometry, previousGeometry); if (actualGeometry.size() != previousGeometry.size()) { // Trigger expose event on resize @@ -198,8 +197,7 @@ region = QRect(QPoint(), bounds); } - QWindowSystemInterface::handleExposeEvent(m_qioswindow->window(), region); - QWindowSystemInterface::flushWindowSystemEvents(); + QWindowSystemInterface::handleExposeEvent<QWindowSystemInterface::SynchronousDelivery>(m_qioswindow->window(), region); } // ------------------------------------------------------------------------- @@ -224,13 +222,10 @@ qImDebug() << m_qioswindow->window() << "became first responder"; - if (qGuiApp->focusWindow() != m_qioswindow->window()) { - QWindowSystemInterface::handleWindowActivated(m_qioswindow->window()); - QWindowSystemInterface::flushWindowSystemEvents(); - } else { - qImDebug() << m_qioswindow->window() - << "already active, not sending window activation"; - } + if (qGuiApp->focusWindow() != m_qioswindow->window()) + QWindowSystemInterface::handleWindowActivated<QWindowSystemInterface::SynchronousDelivery>(m_qioswindow->window()); + else + qImDebug() << m_qioswindow->window() << "already active, not sending window activation"; return YES; } @@ -265,10 +260,8 @@ qImDebug() << m_qioswindow->window() << "resigned first responder"; UIResponder *newResponder = FirstResponderCandidate::currentCandidate(); - if ([self responderShouldTriggerWindowDeactivation:newResponder]) { - QWindowSystemInterface::handleWindowActivated(0); - QWindowSystemInterface::flushWindowSystemEvents(); - } + if ([self responderShouldTriggerWindowDeactivation:newResponder]) + QWindowSystemInterface::handleWindowActivated<QWindowSystemInterface::SynchronousDelivery>(0); return YES; } @@ -358,10 +351,8 @@ - (void)sendTouchEventWithTimestamp:(ulong)timeStamp { - // Send touch event synchronously QIOSIntegration *iosIntegration = QIOSIntegration::instance(); - QWindowSystemInterface::handleTouchEvent(m_qioswindow->window(), timeStamp, iosIntegration->touchDevice(), m_activeTouches.values()); - QWindowSystemInterface::flushWindowSystemEvents(); + QWindowSystemInterface::handleTouchEvent<QWindowSystemInterface::SynchronousDelivery>(m_qioswindow->window(), timeStamp, iosIntegration->touchDevice(), m_activeTouches.values()); } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event @@ -439,10 +430,8 @@ NSTimeInterval timestamp = event ? event.timestamp : [[NSProcessInfo processInfo] systemUptime]; - // Send cancel touch event synchronously QIOSIntegration *iosIntegration = static_cast<QIOSIntegration *>(QGuiApplicationPrivate::platformIntegration()); - QWindowSystemInterface::handleTouchCancelEvent(m_qioswindow->window(), ulong(timestamp * 1000), iosIntegration->touchDevice()); - QWindowSystemInterface::flushWindowSystemEvents(); + QWindowSystemInterface::handleTouchCancelEvent<QWindowSystemInterface::SynchronousDelivery>(m_qioswindow->window(), ulong(timestamp * 1000), iosIntegration->touchDevice()); } - (int)mapPressTypeToKey:(UIPress*)press @@ -465,14 +454,12 @@ // When handling the event (for example, as a back button), both press and // release events must be handled accordingly. - QScopedValueRollback<bool> syncRollback(QWindowSystemInterfacePrivate::synchronousWindowSystemEvents, true); - bool handled = false; for (UIPress* press in presses) { int key = [self mapPressTypeToKey:press]; if (key == Qt::Key_unknown) continue; - if (QWindowSystemInterface::handleKeyEvent(m_qioswindow->window(), type, key, Qt::NoModifier)) + if (QWindowSystemInterface::handleKeyEvent<QWindowSystemInterface::SynchronousDelivery>(m_qioswindow->window(), type, key, Qt::NoModifier)) handled = true; } diff --git a/src/plugins/platforms/linuxfb/linuxfb.pro b/src/plugins/platforms/linuxfb/linuxfb.pro index db365ce739..e2fa31211d 100644 --- a/src/plugins/platforms/linuxfb/linuxfb.pro +++ b/src/plugins/platforms/linuxfb/linuxfb.pro @@ -2,13 +2,17 @@ TARGET = qlinuxfb DEFINES += QT_NO_FOREACH -QT += core-private gui-private platformsupport-private +QT += \ + core-private gui-private \ + service_support-private eventdispatcher_support-private \ + fontdatabase_support-private fb_support-private + +qtHaveModule(input_support-private): \ + QT += input_support-private SOURCES = main.cpp qlinuxfbintegration.cpp qlinuxfbscreen.cpp HEADERS = qlinuxfbintegration.h qlinuxfbscreen.h -CONFIG += qpa/genericunixfontdatabase - OTHER_FILES += linuxfb.json PLUGIN_TYPE = platforms diff --git a/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp b/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp index 707301487d..893205177d 100644 --- a/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp +++ b/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp @@ -40,30 +40,30 @@ #include "qlinuxfbintegration.h" #include "qlinuxfbscreen.h" -#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h> -#include <QtPlatformSupport/private/qgenericunixservices_p.h> -#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h> +#include <QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h> +#include <QtServiceSupport/private/qgenericunixservices_p.h> +#include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h> -#include <QtPlatformSupport/private/qfbvthandler_p.h> -#include <QtPlatformSupport/private/qfbbackingstore_p.h> -#include <QtPlatformSupport/private/qfbwindow_p.h> -#include <QtPlatformSupport/private/qfbcursor_p.h> +#include <QtFbSupport/private/qfbvthandler_p.h> +#include <QtFbSupport/private/qfbbackingstore_p.h> +#include <QtFbSupport/private/qfbwindow_p.h> +#include <QtFbSupport/private/qfbcursor_p.h> #include <QtGui/private/qguiapplication_p.h> #include <qpa/qplatforminputcontextfactory_p.h> #if QT_CONFIG(libinput) -#include <QtPlatformSupport/private/qlibinputhandler_p.h> +#include <QtInputSupport/private/qlibinputhandler_p.h> #endif #if QT_CONFIG(evdev) && !defined(Q_OS_ANDROID) -#include <QtPlatformSupport/private/qevdevmousemanager_p.h> -#include <QtPlatformSupport/private/qevdevkeyboardmanager_p.h> -#include <QtPlatformSupport/private/qevdevtouchmanager_p.h> +#include <QtInputSupport/private/qevdevmousemanager_p.h> +#include <QtInputSupport/private/qevdevkeyboardmanager_p.h> +#include <QtInputSupport/private/qevdevtouchmanager_p.h> #endif #if QT_CONFIG(tslib) && !defined(Q_OS_ANDROID) -#include <QtPlatformSupport/private/qtslib_p.h> +#include <QtInputSupport/private/qtslib_p.h> #endif QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp b/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp index a2e09611b4..246c959fd3 100644 --- a/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp +++ b/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp @@ -38,8 +38,8 @@ ****************************************************************************/ #include "qlinuxfbscreen.h" -#include <QtPlatformSupport/private/qfbcursor_p.h> -#include <QtPlatformSupport/private/qfbwindow_p.h> +#include <QtFbSupport/private/qfbcursor_p.h> +#include <QtFbSupport/private/qfbwindow_p.h> #include <QtCore/QFile> #include <QtCore/QRegularExpression> #include <QtGui/QPainter> diff --git a/src/plugins/platforms/linuxfb/qlinuxfbscreen.h b/src/plugins/platforms/linuxfb/qlinuxfbscreen.h index ada9c4d830..1e98191569 100644 --- a/src/plugins/platforms/linuxfb/qlinuxfbscreen.h +++ b/src/plugins/platforms/linuxfb/qlinuxfbscreen.h @@ -40,7 +40,7 @@ #ifndef QLINUXFBSCREEN_H #define QLINUXFBSCREEN_H -#include <QtPlatformSupport/private/qfbscreen_p.h> +#include <QtFbSupport/private/qfbscreen_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/minimal/minimal.pro b/src/plugins/platforms/minimal/minimal.pro index d4627605bb..8cfb68824e 100644 --- a/src/plugins/platforms/minimal/minimal.pro +++ b/src/plugins/platforms/minimal/minimal.pro @@ -1,6 +1,8 @@ TARGET = qminimal -QT += core-private gui-private platformsupport-private +QT += \ + core-private gui-private \ + eventdispatcher_support-private fontdatabase_support-private DEFINES += QT_NO_FOREACH @@ -12,8 +14,6 @@ HEADERS = qminimalintegration.h \ OTHER_FILES += minimal.json -CONFIG += qpa/genericunixfontdatabase - PLUGIN_TYPE = platforms PLUGIN_CLASS_NAME = QMinimalIntegrationPlugin !equals(TARGET, $$QT_DEFAULT_QPA_PLUGIN): PLUGIN_EXTENDS = - diff --git a/src/plugins/platforms/minimal/qminimalintegration.cpp b/src/plugins/platforms/minimal/qminimalintegration.cpp index 558089dfce..03c72502cb 100644 --- a/src/plugins/platforms/minimal/qminimalintegration.cpp +++ b/src/plugins/platforms/minimal/qminimalintegration.cpp @@ -45,15 +45,15 @@ #include <qpa/qplatformwindow.h> #if defined(Q_OS_WIN) -#include <QtPlatformSupport/private/qbasicfontdatabase_p.h> +#include <QtFontDatabaseSupport/private/qbasicfontdatabase_p.h> #elif QT_CONFIG(fontconfig) -#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h> +#include <QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h> #else #include <qpa/qplatformfontdatabase.h> #endif #if !defined(Q_OS_WIN) -#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h> +#include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h> #elif defined(Q_OS_WINRT) #include <QtCore/private/qeventdispatcher_winrt_p.h> #else diff --git a/src/plugins/platforms/minimalegl/minimalegl.pro b/src/plugins/platforms/minimalegl/minimalegl.pro index b8a91729fd..88466e7f36 100644 --- a/src/plugins/platforms/minimalegl/minimalegl.pro +++ b/src/plugins/platforms/minimalegl/minimalegl.pro @@ -1,6 +1,8 @@ TARGET = qminimalegl -QT += core-private gui-private platformsupport-private +QT += \ + core-private gui-private \ + eventdispatcher_support-private fontdatabase_support-private egl_support-private #DEFINES += QEGL_EXTRA_DEBUG @@ -20,7 +22,7 @@ HEADERS = qminimaleglintegration.h \ qminimaleglbackingstore.h \ qminimaleglscreen.h -CONFIG += egl qpa/genericunixfontdatabase +CONFIG += egl OTHER_FILES += \ minimalegl.json diff --git a/src/plugins/platforms/minimalegl/qminimaleglintegration.cpp b/src/plugins/platforms/minimalegl/qminimaleglintegration.cpp index b1d3691a10..c564e1e431 100644 --- a/src/plugins/platforms/minimalegl/qminimaleglintegration.cpp +++ b/src/plugins/platforms/minimalegl/qminimaleglintegration.cpp @@ -42,15 +42,15 @@ #include "qminimaleglwindow.h" #include "qminimaleglbackingstore.h" -#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h> +#include <QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h> #if defined(Q_OS_UNIX) -# include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h> +# include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h> #elif defined(Q_OS_WINRT) # include <QtCore/private/qeventdispatcher_winrt_p.h> # include <QtGui/qpa/qwindowsysteminterface.h> #elif defined(Q_OS_WIN) -# include <QtPlatformSupport/private/qwindowsguieventdispatcher_p.h> +# include <QtEventDispatcherSupport/private/qwindowsguieventdispatcher_p.h> #endif #include <qpa/qplatformwindow.h> @@ -58,7 +58,8 @@ #include <QtGui/QOpenGLContext> #include <QtGui/QScreen> -#include <QtPlatformSupport/private/qt_egl_p.h> +// this is where EGL headers are pulled in, make sure it is last +#include "qminimaleglscreen.h" QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/minimalegl/qminimaleglintegration.h b/src/plugins/platforms/minimalegl/qminimaleglintegration.h index 020fa09443..529e89f85a 100644 --- a/src/plugins/platforms/minimalegl/qminimaleglintegration.h +++ b/src/plugins/platforms/minimalegl/qminimaleglintegration.h @@ -40,8 +40,6 @@ #ifndef QMINIMALEGLINTEGRATION_H #define QMINIMALEGLINTEGRATION_H -#include "qminimaleglscreen.h" - #include <qpa/qplatformintegration.h> #include <qpa/qplatformscreen.h> diff --git a/src/plugins/platforms/minimalegl/qminimaleglscreen.cpp b/src/plugins/platforms/minimalegl/qminimaleglscreen.cpp index e8a9641224..d3d091fab7 100644 --- a/src/plugins/platforms/minimalegl/qminimaleglscreen.cpp +++ b/src/plugins/platforms/minimalegl/qminimaleglscreen.cpp @@ -40,8 +40,8 @@ #include "qminimaleglscreen.h" #include "qminimaleglwindow.h" -#include <QtPlatformSupport/private/qeglconvenience_p.h> -#include <QtPlatformSupport/private/qeglplatformcontext_p.h> +#include <QtEglSupport/private/qeglconvenience_p.h> +#include <QtEglSupport/private/qeglplatformcontext_p.h> #ifdef Q_OPENKODE #include <KD/kd.h> diff --git a/src/plugins/platforms/minimalegl/qminimaleglscreen.h b/src/plugins/platforms/minimalegl/qminimaleglscreen.h index 4b53bbd39a..ba605835a8 100644 --- a/src/plugins/platforms/minimalegl/qminimaleglscreen.h +++ b/src/plugins/platforms/minimalegl/qminimaleglscreen.h @@ -44,7 +44,7 @@ #include <QtCore/QTextStream> -#include <QtPlatformSupport/private/qt_egl_p.h> +#include <QtEglSupport/private/qt_egl_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/minimalegl/qminimaleglwindow.h b/src/plugins/platforms/minimalegl/qminimaleglwindow.h index 5c2955f783..b8bfd6c8d2 100644 --- a/src/plugins/platforms/minimalegl/qminimaleglwindow.h +++ b/src/plugins/platforms/minimalegl/qminimaleglwindow.h @@ -41,7 +41,6 @@ #define QMINIMALEGLWINDOW_H #include "qminimaleglintegration.h" -#include "qminimaleglscreen.h" #include <qpa/qplatformwindow.h> diff --git a/src/plugins/platforms/mirclient/mirclient.pro b/src/plugins/platforms/mirclient/mirclient.pro index d5d35f1632..0ba63601a9 100644 --- a/src/plugins/platforms/mirclient/mirclient.pro +++ b/src/plugins/platforms/mirclient/mirclient.pro @@ -1,16 +1,16 @@ TARGET = qmirclient -QT += core-private gui-private platformsupport-private dbus - -CONFIG += qpa/genericunixfontdatabase +QT += \ + core-private gui-private dbus \ + theme_support-private eventdispatcher_support-private \ + fontdatabase_support-private egl_support-private DEFINES += MESA_EGL_NO_X11_HEADERS # CONFIG += c++11 # only enables C++0x QMAKE_CXXFLAGS += -fvisibility=hidden -fvisibility-inlines-hidden -std=c++11 -Werror -Wall QMAKE_LFLAGS += -std=c++11 -Wl,-no-undefined -CONFIG += link_pkgconfig -PKGCONFIG += egl mirclient ubuntu-platform-api +QMAKE_USE_PRIVATE += mirclient SOURCES = \ qmirclientbackingstore.cpp \ diff --git a/src/plugins/platforms/mirclient/qmirclientglcontext.cpp b/src/plugins/platforms/mirclient/qmirclientglcontext.cpp index 4092669cfc..38eb0a4609 100644 --- a/src/plugins/platforms/mirclient/qmirclientglcontext.cpp +++ b/src/plugins/platforms/mirclient/qmirclientglcontext.cpp @@ -41,7 +41,7 @@ #include "qmirclientglcontext.h" #include "qmirclientwindow.h" #include "qmirclientlogging.h" -#include <QtPlatformSupport/private/qeglconvenience_p.h> +#include <QtEglSupport/private/qeglconvenience_p.h> #include <QtGui/private/qopenglcontext_p.h> #include <dlfcn.h> diff --git a/src/plugins/platforms/mirclient/qmirclientinput.cpp b/src/plugins/platforms/mirclient/qmirclientinput.cpp index 4817185d41..b3b21ae0e3 100644 --- a/src/plugins/platforms/mirclient/qmirclientinput.cpp +++ b/src/plugins/platforms/mirclient/qmirclientinput.cpp @@ -347,6 +347,7 @@ void QMirClientInput::dispatchTouchEvent(QMirClientWindow *window, const MirInpu // TODO: Is it worth setting the Qt::TouchPointStationary ones? Currently they are left // as Qt::TouchPointMoved const unsigned int kPointerCount = mir_touch_event_point_count(tev); + touchPoints.reserve(int(kPointerCount)); for (unsigned int i = 0; i < kPointerCount; ++i) { QWindowSystemInterface::TouchPoint touchPoint; diff --git a/src/plugins/platforms/mirclient/qmirclientintegration.cpp b/src/plugins/platforms/mirclient/qmirclientintegration.cpp index cfbcdc937e..2c8740f070 100644 --- a/src/plugins/platforms/mirclient/qmirclientintegration.cpp +++ b/src/plugins/platforms/mirclient/qmirclientintegration.cpp @@ -56,8 +56,8 @@ #include <qpa/qplatformnativeinterface.h> #include <qpa/qplatforminputcontextfactory_p.h> #include <qpa/qplatforminputcontext.h> -#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h> -#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h> +#include <QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h> +#include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h> #include <QOpenGLContext> // platform-api diff --git a/src/plugins/platforms/mirclient/qmirclientplatformservices.h b/src/plugins/platforms/mirclient/qmirclientplatformservices.h index 46cf4300f8..a1cd5758ca 100644 --- a/src/plugins/platforms/mirclient/qmirclientplatformservices.h +++ b/src/plugins/platforms/mirclient/qmirclientplatformservices.h @@ -42,8 +42,8 @@ #define QMIRCLIENTPLATFORMSERVICES_H #include <qpa/qplatformservices.h> -#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h> -#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h> +#include <QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h> +#include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h> class QMirClientPlatformServices : public QPlatformServices { public: diff --git a/src/plugins/platforms/mirclient/qmirclientscreen.cpp b/src/plugins/platforms/mirclient/qmirclientscreen.cpp index ca0c3e4733..0a2253e9e2 100644 --- a/src/plugins/platforms/mirclient/qmirclientscreen.cpp +++ b/src/plugins/platforms/mirclient/qmirclientscreen.cpp @@ -51,7 +51,7 @@ #include <QScreen> #include <QThread> #include <qpa/qwindowsysteminterface.h> -#include <QtPlatformSupport/private/qeglconvenience_p.h> +#include <QtEglSupport/private/qeglconvenience_p.h> #include <memory> diff --git a/src/plugins/platforms/mirclient/qmirclienttheme.h b/src/plugins/platforms/mirclient/qmirclienttheme.h index 19728741e3..4bab1d0ee0 100644 --- a/src/plugins/platforms/mirclient/qmirclienttheme.h +++ b/src/plugins/platforms/mirclient/qmirclienttheme.h @@ -41,7 +41,7 @@ #ifndef QMIRCLIENTTHEME_H #define QMIRCLIENTTHEME_H -#include <QtPlatformSupport/private/qgenericunixthemes_p.h> +#include <QtThemeSupport/private/qgenericunixthemes_p.h> class QMirClientTheme : public QGenericUnixTheme { diff --git a/src/plugins/platforms/offscreen/offscreen.pro b/src/plugins/platforms/offscreen/offscreen.pro index fbaa853c41..6652cefd86 100644 --- a/src/plugins/platforms/offscreen/offscreen.pro +++ b/src/plugins/platforms/offscreen/offscreen.pro @@ -1,6 +1,8 @@ TARGET = qoffscreen -QT += core-private gui-private platformsupport-private +QT += \ + core-private gui-private \ + eventdispatcher_support-private fontdatabase_support-private DEFINES += QT_NO_FOREACH @@ -18,6 +20,7 @@ OTHER_FILES += offscreen.json qtConfig(xlib):qtConfig(opengl):!qtConfig(opengles2) { SOURCES += qoffscreenintegration_x11.cpp HEADERS += qoffscreenintegration_x11.h + QT += glx_support-private system(echo "Using X11 offscreen integration with GLX") } else { SOURCES += qoffscreenintegration_dummy.cpp diff --git a/src/plugins/platforms/offscreen/qoffscreenintegration.cpp b/src/plugins/platforms/offscreen/qoffscreenintegration.cpp index 4c3d62a53b..56e6075cb2 100644 --- a/src/plugins/platforms/offscreen/qoffscreenintegration.cpp +++ b/src/plugins/platforms/offscreen/qoffscreenintegration.cpp @@ -42,14 +42,14 @@ #include "qoffscreencommon.h" #if defined(Q_OS_UNIX) -#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h> +#include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h> #if defined(Q_OS_MAC) #include <qpa/qplatformfontdatabase.h> #else -#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h> +#include <QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h> #endif #elif defined(Q_OS_WIN) -#include <QtPlatformSupport/private/qbasicfontdatabase_p.h> +#include <QtFontDatabaseSupport/private/qbasicfontdatabase_p.h> #ifndef Q_OS_WINRT #include <QtCore/private/qeventdispatcher_win_p.h> #else diff --git a/src/plugins/platforms/offscreen/qoffscreenintegration_x11.cpp b/src/plugins/platforms/offscreen/qoffscreenintegration_x11.cpp index 2187eceed4..b46d94dfd3 100644 --- a/src/plugins/platforms/offscreen/qoffscreenintegration_x11.cpp +++ b/src/plugins/platforms/offscreen/qoffscreenintegration_x11.cpp @@ -45,7 +45,7 @@ #include <X11/Xlib.h> #include <GL/glx.h> -#include <QtPlatformSupport/private/qglxconvenience_p.h> +#include <QtGlxSupport/private/qglxconvenience_p.h> #include <qpa/qplatformsurface.h> #include <qsurface.h> diff --git a/src/plugins/platforms/openwfd/openwf.pro b/src/plugins/platforms/openwfd/openwf.pro index 79f349f472..6012731b65 100644 --- a/src/plugins/platforms/openwfd/openwf.pro +++ b/src/plugins/platforms/openwfd/openwf.pro @@ -1,8 +1,8 @@ TARGET = qopenwf -QT += core-private gui-private platformsupport-private - -CONFIG += qpa/genericunixfontdatabase +QT += \ + core-private gui-private \ + eventdispatcher_support-private fontdatabase_support-private HEADERS += \ qopenwfddevice.h \ diff --git a/src/plugins/platforms/openwfd/qopenwfdintegration.cpp b/src/plugins/platforms/openwfd/qopenwfdintegration.cpp index 71e2b381fc..4850ca2e45 100644 --- a/src/plugins/platforms/openwfd/qopenwfdintegration.cpp +++ b/src/plugins/platforms/openwfd/qopenwfdintegration.cpp @@ -51,8 +51,8 @@ #include <QtGui/QOpenGLContext> #include <QtGui/QScreen> -#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h> -#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h> +#include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h> +#include <QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h> #include <stdio.h> @@ -68,6 +68,7 @@ QOpenWFDIntegration::QOpenWFDIntegration() int actualNumberOfDevices = wfdEnumerateDevices(devices,numberOfDevices,0); Q_ASSERT(actualNumberOfDevices == numberOfDevices); + mDevices.reserve(actualNumberOfDevices); for (int i = 0; i < actualNumberOfDevices; i++) { mDevices.append(new QOpenWFDDevice(this,devices[i])); } diff --git a/src/plugins/platforms/qnx/qnx.pro b/src/plugins/platforms/qnx/qnx.pro index d65b1af989..0b052adf0f 100644 --- a/src/plugins/platforms/qnx/qnx.pro +++ b/src/plugins/platforms/qnx/qnx.pro @@ -1,6 +1,8 @@ TARGET = qqnx -QT += platformsupport-private core-private gui-private +QT += \ + core-private gui-private \ + fontdatabase_support-private eventdispatcher_support-private egl_support-private # Uncomment this to build with support for IMF once it becomes available in the BBNDK #CONFIG += qqnx_imf @@ -115,11 +117,6 @@ lgmon { OTHER_FILES += qnx.json -QMAKE_CXXFLAGS += -I./private - -include (../../../platformsupport/eglconvenience/eglconvenience.pri) -include (../../../platformsupport/fontdatabases/fontdatabases.pri) - PLUGIN_TYPE = platforms PLUGIN_CLASS_NAME = QQnxIntegrationPlugin !equals(TARGET, $$QT_DEFAULT_QPA_PLUGIN): PLUGIN_EXTENDS = - diff --git a/src/plugins/platforms/qnx/qqnxbuttoneventnotifier.cpp b/src/plugins/platforms/qnx/qqnxbuttoneventnotifier.cpp index 90a09d3087..a6236f2376 100644 --- a/src/plugins/platforms/qnx/qqnxbuttoneventnotifier.cpp +++ b/src/plugins/platforms/qnx/qqnxbuttoneventnotifier.cpp @@ -67,6 +67,7 @@ QQnxButtonEventNotifier::QQnxButtonEventNotifier(QObject *parent) // fetch the new button ids int enumeratorIndex = QQnxButtonEventNotifier::staticMetaObject.indexOfEnumerator(QByteArrayLiteral("ButtonId")); QMetaEnum enumerator = QQnxButtonEventNotifier::staticMetaObject.enumerator(enumeratorIndex); + m_buttonKeys.reserve(ButtonCount - bid_minus); for (int buttonId = bid_minus; buttonId < ButtonCount; ++buttonId) { m_buttonKeys.append(enumerator.valueToKey(buttonId)); m_state[buttonId] = ButtonUp; diff --git a/src/plugins/platforms/qnx/qqnxscreen.cpp b/src/plugins/platforms/qnx/qqnxscreen.cpp index f8ae5121d1..46df500330 100644 --- a/src/plugins/platforms/qnx/qqnxscreen.cpp +++ b/src/plugins/platforms/qnx/qqnxscreen.cpp @@ -90,7 +90,7 @@ static QSize determineScreenSize(screen_display_t display, bool primaryScreen) { const QString envPhySizeStr = qgetenv("QQNX_PHYSICAL_SCREEN_SIZE"); if (!envPhySizeStr.isEmpty()) { - const QStringList envPhySizeStrList = envPhySizeStr.split(QLatin1Char(',')); + const auto envPhySizeStrList = envPhySizeStr.splitRef(QLatin1Char(',')); const int envWidth = envPhySizeStrList.size() == 2 ? envPhySizeStrList[0].toInt() : -1; const int envHeight = envPhySizeStrList.size() == 2 ? envPhySizeStrList[1].toInt() : -1; diff --git a/src/plugins/platforms/qnx/qqnxwindow.cpp b/src/plugins/platforms/qnx/qqnxwindow.cpp index 7b3a5ec70c..6fd0191e43 100644 --- a/src/plugins/platforms/qnx/qqnxwindow.cpp +++ b/src/plugins/platforms/qnx/qqnxwindow.cpp @@ -569,7 +569,7 @@ void QQnxWindow::requestActivateWindow() for (int i = 1; i < windowList.size(); ++i) windowList.at(i-1)->setFocus(windowList.at(i)->nativeHandle()); - windowList.last()->setFocus(windowList.last()->nativeHandle()); + windowList.last()->setFocus(windowList.constLast()->nativeHandle()); } screen_flush_context(m_screenContext, 0); diff --git a/src/plugins/platforms/vnc/qvnc.cpp b/src/plugins/platforms/vnc/qvnc.cpp index b3613cf18f..f386be193d 100644 --- a/src/plugins/platforms/vnc/qvnc.cpp +++ b/src/plugins/platforms/vnc/qvnc.cpp @@ -41,6 +41,7 @@ #include "qvncclient.h" #include "QtNetwork/qtcpserver.h" #include "QtNetwork/qtcpsocket.h" +#include <qendian.h> #include <qthread.h> #include <QtGui/qguiapplication.h> @@ -554,7 +555,7 @@ void QVncClientCursor::write(QVncClient *client) const htons(cursor.height()) }; socket->write((char*)tmp, sizeof(tmp)); - const quint32 encoding = htonl(-239); + const qint32 encoding = qToBigEndian(-239); socket->write((char*)(&encoding), sizeof(encoding)); } diff --git a/src/plugins/platforms/vnc/qvncintegration.cpp b/src/plugins/platforms/vnc/qvncintegration.cpp index 3227478ebe..025112c790 100644 --- a/src/plugins/platforms/vnc/qvncintegration.cpp +++ b/src/plugins/platforms/vnc/qvncintegration.cpp @@ -38,19 +38,19 @@ #include "qvncscreen.h" #include "qvnc_p.h" -#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h> -#include <QtPlatformSupport/private/qgenericunixservices_p.h> -#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h> +#include <QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h> +#include <QtServiceSupport/private/qgenericunixservices_p.h> +#include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h> -#include <QtPlatformSupport/private/qfbbackingstore_p.h> -#include <QtPlatformSupport/private/qfbwindow_p.h> -#include <QtPlatformSupport/private/qfbcursor_p.h> +#include <QtFbSupport/private/qfbbackingstore_p.h> +#include <QtFbSupport/private/qfbwindow_p.h> +#include <QtFbSupport/private/qfbcursor_p.h> #include <QtGui/private/qguiapplication_p.h> #include <qpa/qplatforminputcontextfactory_p.h> #include <private/qinputdevicemanager_p_p.h> #if QT_CONFIG(libinput) -#include <QtPlatformSupport/private/qlibinputhandler_p.h> +#include <QtInputSupport/private/qlibinputhandler_p.h> #endif #include <QtCore/QRegularExpression> diff --git a/src/plugins/platforms/vnc/qvncscreen.cpp b/src/plugins/platforms/vnc/qvncscreen.cpp index 6d117c62bf..34def45767 100644 --- a/src/plugins/platforms/vnc/qvncscreen.cpp +++ b/src/plugins/platforms/vnc/qvncscreen.cpp @@ -39,8 +39,8 @@ #include "qvncscreen.h" #include "qvnc_p.h" -#include <QtPlatformSupport/private/qfbwindow_p.h> -#include <QtPlatformSupport/private/qfbcursor_p.h> +#include <QtFbSupport/private/qfbwindow_p.h> +#include <QtFbSupport/private/qfbcursor_p.h> #include <QtGui/QPainter> #include <QtCore/QRegularExpression> diff --git a/src/plugins/platforms/vnc/qvncscreen.h b/src/plugins/platforms/vnc/qvncscreen.h index e3c6651781..785abd6dc2 100644 --- a/src/plugins/platforms/vnc/qvncscreen.h +++ b/src/plugins/platforms/vnc/qvncscreen.h @@ -40,7 +40,7 @@ #ifndef QVncScreen_H #define QVncScreen_H -#include <QtPlatformSupport/private/qfbscreen_p.h> +#include <QtFbSupport/private/qfbscreen_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/vnc/vnc.pro b/src/plugins/platforms/vnc/vnc.pro index 1817e15201..3cd7e9b160 100644 --- a/src/plugins/platforms/vnc/vnc.pro +++ b/src/plugins/platforms/vnc/vnc.pro @@ -5,7 +5,13 @@ PLUGIN_CLASS_NAME = QVncIntegrationPlugin !equals(TARGET, $$QT_DEFAULT_QPA_PLUGIN): PLUGIN_EXTENDS = - load(qt_plugin) -QT += core-private gui-private platformsupport-private network +QT += \ + core-private network gui-private \ + service_support-private theme_support-private fb_support-private \ + eventdispatcher_support-private fontdatabase_support-private + +qtHaveModule(input_support-private): \ + QT += input_support-private DEFINES += QT_NO_FOREACH @@ -22,6 +28,4 @@ HEADERS = \ qvnc_p.h \ qvncclient.h -CONFIG += qpa/genericunixfontdatabase - OTHER_FILES += vnc.json diff --git a/src/plugins/platforms/windows/accessible/iaccessible2.cpp b/src/plugins/platforms/windows/accessible/iaccessible2.cpp index 5ba49a8a98..d5cd9ac6db 100644 --- a/src/plugins/platforms/windows/accessible/iaccessible2.cpp +++ b/src/plugins/platforms/windows/accessible/iaccessible2.cpp @@ -41,7 +41,7 @@ #include "iaccessible2.h" #include "qwindowsaccessibility.h" -#include <QtPlatformSupport/private/qaccessiblebridgeutils_p.h> +#include <QtAccessibilitySupport/private/qaccessiblebridgeutils_p.h> #include <QtGui/qaccessible.h> #include <QtGui/qclipboard.h> #include <QtGui/qguiapplication.h> diff --git a/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp b/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp index 7cf24421f8..aed9c94003 100644 --- a/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp +++ b/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp @@ -47,13 +47,13 @@ #include <QtCore/qmap.h> #include <QtCore/qpair.h> #include <QtCore/qpointer.h> -#include <QtCore/qsettings.h> #include <QtGui/qaccessible.h> #include <QtGui/private/qguiapplication_p.h> #include <qpa/qplatformnativeinterface.h> #include <qpa/qplatformintegration.h> #include <QtGui/qwindow.h> #include <QtGui/qguiapplication.h> +#include <QtFontDatabaseSupport/private/qwindowsfontdatabase_p.h> // registry helper #include "qwindowsaccessibility.h" #ifdef Q_CC_MINGW @@ -114,6 +114,14 @@ static inline QString messageBoxAlertSound(const QObject *messageBox) return QString(); } +static QString soundFileName(const QString &soundName) +{ + const QString key = QStringLiteral("AppEvents\\Schemes\\Apps\\.Default\\") + + soundName + QStringLiteral("\\.Current"); + return QWindowsFontDatabase::readRegistryString(HKEY_CURRENT_USER, + reinterpret_cast<const wchar_t *>(key.utf16()), L""); +} + void QWindowsAccessibility::notifyAccessibilityUpdate(QAccessibleEvent *event) { QString soundName; @@ -134,17 +142,9 @@ void QWindowsAccessibility::notifyAccessibilityUpdate(QAccessibleEvent *event) break; } - if (!soundName.isEmpty()) { -#ifndef QT_NO_SETTINGS - QSettings settings(QLatin1String("HKEY_CURRENT_USER\\AppEvents\\Schemes\\Apps\\.Default\\") + soundName, - QSettings::NativeFormat); - QString file = settings.value(QLatin1String(".Current/.")).toString(); -#else - QString file; -#endif - if (!file.isEmpty()) { - PlaySound(reinterpret_cast<const wchar_t *>(soundName.utf16()), 0, SND_ALIAS | SND_ASYNC | SND_NODEFAULT | SND_NOWAIT); - } + if (!soundName.isEmpty() && !soundFileName(soundName).isEmpty()) { + PlaySound(reinterpret_cast<const wchar_t *>(soundName.utf16()), 0, + SND_ALIAS | SND_ASYNC | SND_NODEFAULT | SND_NOWAIT); } // An event has to be associated with a window, diff --git a/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp b/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp index 5d4afe8fb2..06d481b3af 100644 --- a/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp +++ b/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp @@ -50,7 +50,6 @@ #include <QtCore/qdebug.h> #include <QtCore/qmap.h> #include <QtCore/qpair.h> -#include <QtCore/qsettings.h> #include <QtGui/qaccessible.h> #include <QtGui/qguiapplication.h> #include <qpa/qplatformnativeinterface.h> diff --git a/src/plugins/platforms/windows/openglblacklists/default.json b/src/plugins/platforms/windows/openglblacklists/default.json index 1e00da52eb..dd99e674ec 100644 --- a/src/plugins/platforms/windows/openglblacklists/default.json +++ b/src/plugins/platforms/windows/openglblacklists/default.json @@ -102,6 +102,18 @@ "features": [ "disable_desktopgl", "disable_d3d11", "disable_d3d9" ] + }, + { + "id": 9, + "description": "Intel 945 crash (QTBUG-40991)", + "vendor_id": "0x8086", + "device_id": [ "0x27A2" ], + "os": { + "type": "win" + }, + "features": [ + "disable_desktopgl" + ] } ] } diff --git a/src/plugins/platforms/windows/qwindowsbackingstore.cpp b/src/plugins/platforms/windows/qwindowsbackingstore.cpp index 3b7374dc92..49c7144221 100644 --- a/src/plugins/platforms/windows/qwindowsbackingstore.cpp +++ b/src/plugins/platforms/windows/qwindowsbackingstore.cpp @@ -39,11 +39,11 @@ #include "qwindowsbackingstore.h" #include "qwindowswindow.h" -#include "qwindowsnativeimage.h" #include "qwindowscontext.h" #include <QtGui/QWindow> #include <QtGui/QPainter> +#include <QtFontDatabaseSupport/private/qwindowsnativeimage_p.h> #include <private/qhighdpiscaling_p.h> #include <private/qimage_p.h> diff --git a/src/plugins/platforms/windows/qwindowsclipboard.cpp b/src/plugins/platforms/windows/qwindowsclipboard.cpp index 21bc9d7377..d4a7e27762 100644 --- a/src/plugins/platforms/windows/qwindowsclipboard.cpp +++ b/src/plugins/platforms/windows/qwindowsclipboard.cpp @@ -53,7 +53,7 @@ #include <QtCore/QVariant> #include <QtCore/QUrl> -#include <QtPlatformSupport/private/qwindowsguieventdispatcher_p.h> +#include <QtEventDispatcherSupport/private/qwindowsguieventdispatcher_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/windows/qwindowscontext.cpp b/src/plugins/platforms/windows/qwindowscontext.cpp index 10d38f2a0c..40d4cb1497 100644 --- a/src/plugins/platforms/windows/qwindowscontext.cpp +++ b/src/plugins/platforms/windows/qwindowscontext.cpp @@ -73,7 +73,7 @@ #include <QtCore/QScopedArrayPointer> #include <QtCore/private/qsystemlibrary_p.h> -#include <QtPlatformSupport/private/qwindowsguieventdispatcher_p.h> +#include <QtEventDispatcherSupport/private/qwindowsguieventdispatcher_p.h> #include <stdlib.h> #include <stdio.h> @@ -85,7 +85,6 @@ QT_BEGIN_NAMESPACE Q_LOGGING_CATEGORY(lcQpaWindows, "qt.qpa.windows") Q_LOGGING_CATEGORY(lcQpaBackingStore, "qt.qpa.backingstore") Q_LOGGING_CATEGORY(lcQpaEvents, "qt.qpa.events") -Q_LOGGING_CATEGORY(lcQpaFonts, "qt.qpa.fonts") Q_LOGGING_CATEGORY(lcQpaGl, "qt.qpa.gl") Q_LOGGING_CATEGORY(lcQpaMime, "qt.qpa.mime") Q_LOGGING_CATEGORY(lcQpaInputMethods, "qt.qpa.input.methods") diff --git a/src/plugins/platforms/windows/qwindowscontext.h b/src/plugins/platforms/windows/qwindowscontext.h index 843f7e2ad6..9dfde67797 100644 --- a/src/plugins/platforms/windows/qwindowscontext.h +++ b/src/plugins/platforms/windows/qwindowscontext.h @@ -59,7 +59,6 @@ QT_BEGIN_NAMESPACE Q_DECLARE_LOGGING_CATEGORY(lcQpaWindows) Q_DECLARE_LOGGING_CATEGORY(lcQpaBackingStore) Q_DECLARE_LOGGING_CATEGORY(lcQpaEvents) -Q_DECLARE_LOGGING_CATEGORY(lcQpaFonts) Q_DECLARE_LOGGING_CATEGORY(lcQpaGl) Q_DECLARE_LOGGING_CATEGORY(lcQpaMime) Q_DECLARE_LOGGING_CATEGORY(lcQpaInputMethods) diff --git a/src/plugins/platforms/windows/qwindowsintegration.cpp b/src/plugins/platforms/windows/qwindowsintegration.cpp index b9a63c7a89..004b03d9a9 100644 --- a/src/plugins/platforms/windows/qwindowsintegration.cpp +++ b/src/plugins/platforms/windows/qwindowsintegration.cpp @@ -47,9 +47,8 @@ #include "qwindowstheme.h" #include "qwindowsservices.h" #ifndef QT_NO_FREETYPE -# include "qwindowsfontdatabase_ft.h" +# include <QtFontDatabaseSupport/private/qwindowsfontdatabase_ft_p.h> #endif -#include "qwindowsfontdatabase.h" #ifndef QT_NO_CLIPBOARD # include "qwindowsclipboard.h" # ifndef QT_NO_DRAGANDDROP @@ -72,7 +71,7 @@ #include <QtGui/private/qhighdpiscaling_p.h> #include <QtGui/qpa/qplatforminputcontextfactory_p.h> -#include <QtPlatformSupport/private/qwindowsguieventdispatcher_p.h> +#include <QtEventDispatcherSupport/private/qwindowsguieventdispatcher_p.h> #include <QtCore/QDebug> #include <QtCore/QVariant> @@ -220,6 +219,7 @@ QWindowsIntegrationPrivate::QWindowsIntegrationPrivate(const QStringList ¶mL // are connected to Windows 8.1 QtWindows::ProcessDpiAwareness dpiAwareness = QtWindows::ProcessPerMonitorDpiAware; m_options = parseOptions(paramList, &tabletAbsoluteRange, &dpiAwareness); + QWindowsFontDatabase::setFontOptions(m_options); if (tabletAbsoluteRange >= 0) m_context.setTabletAbsoluteRange(tabletAbsoluteRange); if (!dpiAwarenessSet) { // Set only once in case of repeated instantiations of QGuiApplication. diff --git a/src/plugins/platforms/windows/qwindowsintegration.h b/src/plugins/platforms/windows/qwindowsintegration.h index 4258f908e7..a668470993 100644 --- a/src/plugins/platforms/windows/qwindowsintegration.h +++ b/src/plugins/platforms/windows/qwindowsintegration.h @@ -43,6 +43,7 @@ #include <qpa/qplatformintegration.h> #include <QtCore/QScopedPointer> +#include <QtFontDatabaseSupport/private/qwindowsfontdatabase_p.h> QT_BEGIN_NAMESPACE @@ -61,8 +62,9 @@ public: NoNativeDialogs = 0x8, XpNativeDialogs = 0x10, DontPassOsMouseEventsSynthesizedFromTouch = 0x20, // Do not pass OS-generated mouse events from touch. - DontUseDirectWriteFonts = 0x40, - DontUseColorFonts = 0x80 + // Keep in sync with QWindowsFontDatabase::FontOptions + DontUseDirectWriteFonts = QWindowsFontDatabase::DontUseDirectWriteFonts, + DontUseColorFonts = QWindowsFontDatabase::DontUseColorFonts }; explicit QWindowsIntegration(const QStringList ¶mList); diff --git a/src/plugins/platforms/windows/qwindowskeymapper.cpp b/src/plugins/platforms/windows/qwindowskeymapper.cpp index fd7eca9e32..b8c4f0b736 100644 --- a/src/plugins/platforms/windows/qwindowskeymapper.cpp +++ b/src/plugins/platforms/windows/qwindowskeymapper.cpp @@ -49,7 +49,7 @@ #include <private/qguiapplication_p.h> #include <private/qhighdpiscaling_p.h> #include <QtGui/QKeyEvent> -#include <QtPlatformSupport/private/qwindowsguieventdispatcher_p.h> +#include <QtEventDispatcherSupport/private/qwindowsguieventdispatcher_p.h> #if defined(WM_APPCOMMAND) # ifndef FAPPCOMMAND_MOUSE diff --git a/src/plugins/platforms/windows/qwindowsnativeinterface.cpp b/src/plugins/platforms/windows/qwindowsnativeinterface.cpp index e0ae111b9a..eaa6e45b9f 100644 --- a/src/plugins/platforms/windows/qwindowsnativeinterface.cpp +++ b/src/plugins/platforms/windows/qwindowsnativeinterface.cpp @@ -41,7 +41,6 @@ #include "qwindowswindow.h" #include "qwindowscontext.h" #include "qwindowscursor.h" -#include "qwindowsfontdatabase.h" #include "qwindowsopenglcontext.h" #include "qwindowsopengltester.h" #include "qwindowsintegration.h" @@ -51,6 +50,7 @@ #include <QtGui/QOpenGLContext> #include <QtGui/QScreen> #include <qpa/qplatformscreen.h> +#include <QtFontDatabaseSupport/private/qwindowsfontdatabase_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/windows/qwindowstheme.cpp b/src/plugins/platforms/windows/qwindowstheme.cpp index 841464391d..ed12c8124e 100644 --- a/src/plugins/platforms/windows/qwindowstheme.cpp +++ b/src/plugins/platforms/windows/qwindowstheme.cpp @@ -48,7 +48,6 @@ #include "qwindowscontext.h" #include "qwindowsintegration.h" #include "qt_windows.h" -#include "qwindowsfontdatabase.h" #include <commctrl.h> #include <objbase.h> #ifndef Q_CC_MINGW @@ -68,7 +67,8 @@ #include <QtGui/QPainter> #include <QtGui/QPixmapCache> #include <qpa/qwindowsysteminterface.h> -#include <QtPlatformSupport/private/qabstractfileiconengine_p.h> +#include <QtThemeSupport/private/qabstractfileiconengine_p.h> +#include <QtFontDatabaseSupport/private/qwindowsfontdatabase_p.h> #include <private/qhighdpiscaling_p.h> #include <private/qsystemlibrary_p.h> diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp index 7289f8de6d..a9b061ad73 100644 --- a/src/plugins/platforms/windows/qwindowswindow.cpp +++ b/src/plugins/platforms/windows/qwindowswindow.cpp @@ -38,7 +38,6 @@ ****************************************************************************/ #include "qwindowswindow.h" -#include "qwindowsnativeimage.h" #include "qwindowscontext.h" #include "qwindowsdrag.h" #include "qwindowsscreen.h" @@ -424,11 +423,9 @@ static inline void fixTopLevelWindowFlags(Qt::WindowFlags &flags) |Qt::WindowMaximizeButtonHint|Qt::WindowCloseButtonHint; break; case Qt::Dialog: - flags |= Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowContextHelpButtonHint | Qt::WindowCloseButtonHint; - break; case Qt::Tool: - flags |= Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint; - break; + flags |= Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint; + break; default: break; } diff --git a/src/plugins/platforms/windows/windows.pri b/src/plugins/platforms/windows/windows.pri index 35d4c85a73..5071cd8e21 100644 --- a/src/plugins/platforms/windows/windows.pri +++ b/src/plugins/platforms/windows/windows.pri @@ -9,24 +9,12 @@ LIBS += -lshlwapi -lshell32 -ladvapi32 DEFINES *= QT_NO_CAST_FROM_ASCII -qtConfig(directwrite) { - qtConfig(directwrite2): \ - DEFINES *= QT_USE_DIRECTWRITE2 - - SOURCES += $$PWD/qwindowsfontenginedirectwrite.cpp - HEADERS += $$PWD/qwindowsfontenginedirectwrite.h -} else { - DEFINES *= QT_NO_DIRECTWRITE -} - SOURCES += \ $$PWD/qwindowswindow.cpp \ $$PWD/qwindowsintegration.cpp \ $$PWD/qwindowscontext.cpp \ $$PWD/qwindowsscreen.cpp \ $$PWD/qwindowskeymapper.cpp \ - $$PWD/qwindowsfontengine.cpp \ - $$PWD/qwindowsfontdatabase.cpp \ $$PWD/qwindowsmousehandler.cpp \ $$PWD/qwindowsole.cpp \ $$PWD/qwindowsmime.cpp \ @@ -36,7 +24,6 @@ SOURCES += \ $$PWD/qwindowstheme.cpp \ $$PWD/qwindowsdialoghelpers.cpp \ $$PWD/qwindowsservices.cpp \ - $$PWD/qwindowsnativeimage.cpp \ $$PWD/qwindowsnativeinterface.cpp \ $$PWD/qwindowsopengltester.cpp @@ -46,8 +33,6 @@ HEADERS += \ $$PWD/qwindowscontext.h \ $$PWD/qwindowsscreen.h \ $$PWD/qwindowskeymapper.h \ - $$PWD/qwindowsfontengine.h \ - $$PWD/qwindowsfontdatabase.h \ $$PWD/qwindowsmousehandler.h \ $$PWD/qtwindowsglobal.h \ $$PWD/qwindowsole.h \ @@ -58,7 +43,6 @@ HEADERS += \ $$PWD/qwindowstheme.h \ $$PWD/qwindowsdialoghelpers.h \ $$PWD/qwindowsservices.h \ - $$PWD/qwindowsnativeimage.h \ $$PWD/qwindowsnativeinterface.h \ $$PWD/qwindowsopengltester.h \ $$PWD/qwindowsthreadpoolrunner.h @@ -111,16 +95,6 @@ qtConfig(dynamicgl) { RESOURCES += $$PWD/openglblacklists.qrc -qtConfig(freetype) { - HEADERS += $$PWD/qwindowsfontdatabase_ft.h - SOURCES += $$PWD/qwindowsfontdatabase_ft.cpp - qtConfig(system-freetype) { - include($$QT_SOURCE_TREE/src/platformsupport/fontdatabases/basic/basic.pri) - } else { - include($$QT_SOURCE_TREE/src/3rdparty/freetype_dependency.pri) - } -} - qtConfig(accessibility): include($$PWD/accessible/accessible.pri) DEFINES *= LIBEGL_NAME=$${LIBQTANGLE_NAME} diff --git a/src/plugins/platforms/windows/windows.pro b/src/plugins/platforms/windows/windows.pro index adafa830d5..23168c10dc 100644 --- a/src/plugins/platforms/windows/windows.pro +++ b/src/plugins/platforms/windows/windows.pro @@ -1,8 +1,9 @@ TARGET = qwindows -QT *= core-private -QT *= gui-private -QT *= platformsupport-private +QT += \ + core-private gui-private \ + eventdispatcher_support-private accessibility_support-private \ + fontdatabase_support-private theme_support-private LIBS += -lgdi32 -ldwmapi diff --git a/src/plugins/platforms/winrt/qwinrteglcontext.cpp b/src/plugins/platforms/winrt/qwinrteglcontext.cpp index 5c3ecd8726..8a250c516a 100644 --- a/src/plugins/platforms/winrt/qwinrteglcontext.cpp +++ b/src/plugins/platforms/winrt/qwinrteglcontext.cpp @@ -51,8 +51,8 @@ #include <QOffscreenSurface> #include <QOpenGLContext> -#include <QtPlatformSupport/private/qeglconvenience_p.h> -#include <QtPlatformSupport/private/qeglpbuffer_p.h> +#include <QtEglSupport/private/qeglconvenience_p.h> +#include <QtEglSupport/private/qeglpbuffer_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/winrt/qwinrtfontdatabase.h b/src/plugins/platforms/winrt/qwinrtfontdatabase.h index 8539bcb9db..8fed4a3fa7 100644 --- a/src/plugins/platforms/winrt/qwinrtfontdatabase.h +++ b/src/plugins/platforms/winrt/qwinrtfontdatabase.h @@ -40,7 +40,7 @@ #ifndef QWINRTFONTDATABASE_H #define QWINRTFONTDATABASE_H -#include <QtPlatformSupport/private/qbasicfontdatabase_p.h> +#include <QtFontDatabaseSupport/private/qbasicfontdatabase_p.h> #include <QtCore/QLoggingCategory> struct IDWriteFontFile; diff --git a/src/plugins/platforms/winrt/qwinrtintegration.cpp b/src/plugins/platforms/winrt/qwinrtintegration.cpp index 32edf2b1a2..7a0c95e6c1 100644 --- a/src/plugins/platforms/winrt/qwinrtintegration.cpp +++ b/src/plugins/platforms/winrt/qwinrtintegration.cpp @@ -56,7 +56,7 @@ #include <QtGui/QOpenGLContext> #include <QtGui/QSurface> -#include <QtPlatformSupport/private/qeglpbuffer_p.h> +#include <QtEglSupport/private/qeglpbuffer_p.h> #include <qpa/qwindowsysteminterface.h> #include <qpa/qplatformwindow.h> #include <qpa/qplatformoffscreensurface.h> diff --git a/src/plugins/platforms/winrt/qwinrtwindow.cpp b/src/plugins/platforms/winrt/qwinrtwindow.cpp index 5b82183d40..297e6618d1 100644 --- a/src/plugins/platforms/winrt/qwinrtwindow.cpp +++ b/src/plugins/platforms/winrt/qwinrtwindow.cpp @@ -50,7 +50,7 @@ #include <QtGui/QGuiApplication> #include <QtGui/QOpenGLContext> #include <QtGui/QWindow> -#include <QtPlatformSupport/private/qeglconvenience_p.h> +#include <QtEglSupport/private/qeglconvenience_p.h> #include <functional> #include <wrl.h> diff --git a/src/plugins/platforms/winrt/winrt.pro b/src/plugins/platforms/winrt/winrt.pro index 28456f66ec..8fd2a83a16 100644 --- a/src/plugins/platforms/winrt/winrt.pro +++ b/src/plugins/platforms/winrt/winrt.pro @@ -2,12 +2,13 @@ TARGET = qwinrt CONFIG -= precompile_header -QT += core-private gui-private platformsupport-private +QT += \ + core-private gui-private \ + fontdatabase_support-private egl_support-private DEFINES *= QT_NO_CAST_FROM_ASCII __WRL_NO_DEFAULT_LIB__ LIBS += $$QMAKE_LIBS_CORE -ldwrite -ld3d11 -INCLUDEPATH += $$QT_SOURCE_TREE/src/3rdparty/freetype/include SOURCES = \ main.cpp \ diff --git a/src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri b/src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri index a3813ef993..4ab406acb9 100644 --- a/src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri +++ b/src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri @@ -1,4 +1,4 @@ -QT += core-private gui-private platformsupport-private xcb_qpa_lib-private +QT += core-private gui-private xcb_qpa_lib-private INCLUDEPATH += $$PWD INCLUDEPATH += $$PWD/../ @@ -18,14 +18,9 @@ qtConfig(xcb-sm) { DEFINES += XCB_USE_SM } -CONFIG += qpa/genericunixfontdatabase - !qtConfig(system-xcb) { DEFINES += XCB_USE_RENDER - XCB_DIR = $$clean_path($$PWD/../../../../3rdparty/xcb) - INCLUDEPATH += $$XCB_DIR/include $$XCB_DIR/include/xcb $$XCB_DIR/sysinclude - LIBS += -L$$MODULE_BASE_OUTDIR/lib -lxcb-static$$qtPlatformTargetSuffix() - QMAKE_USE += xcb + QMAKE_USE += xcb-static xcb } else { qtConfig(xkb): QMAKE_USE += xcb_xkb # to support custom cursors with depth > 1 diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglcontext.h b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglcontext.h index 64e9bec6db..48e774bbb2 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglcontext.h +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglcontext.h @@ -41,8 +41,8 @@ #define QXCBEGLCONTEXT_H #include "qxcbeglwindow.h" -#include <QtPlatformSupport/private/qeglplatformcontext_p.h> -#include <QtPlatformSupport/private/qeglpbuffer_p.h> +#include <QtEglSupport/private/qeglplatformcontext_p.h> +#include <QtEglSupport/private/qeglpbuffer_p.h> #include <QtPlatformHeaders/QEGLNativeContext> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglinclude.h b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglinclude.h index 7c6524c8ee..a5a47dd0bb 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglinclude.h +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglinclude.h @@ -46,7 +46,7 @@ #include <QtGui/private/qcssparser_p.h> #include <QtGui/private/qtextengine_p.h> -#include <QtPlatformSupport/private/qt_egl_p.h> +#include <QtEglSupport/private/qt_egl_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.cpp index 00f64e3c40..4852d38f7e 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.cpp +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.cpp @@ -42,7 +42,7 @@ #include "qxcbeglcontext.h" #include <QtGui/QOffscreenSurface> -#include <QtPlatformSupport/private/qeglstreamconvenience_p.h> +#include <QtEglSupport/private/qeglstreamconvenience_p.h> #include "qxcbeglnativeinterfacehandler.h" diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp index 69b7dfbdbf..3f7ef94238 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp @@ -41,8 +41,8 @@ #include "qxcbeglintegration.h" -#include <QtPlatformSupport/private/qeglconvenience_p.h> -#include <QtPlatformSupport/private/qxlibeglintegration_p.h> +#include <QtEglSupport/private/qeglconvenience_p.h> +#include <QtEglSupport/private/qxlibeglintegration_p.h> QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/xcb_egl.pro b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/xcb_egl.pro index 6b3f9b171a..1c193849ca 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/xcb_egl.pro +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/xcb_egl.pro @@ -1,6 +1,7 @@ TARGET = qxcb-egl-integration include(../gl_integrations_plugin_base.pri) +QT += egl_support-private CONFIG += egl diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp index 5580f81a7a..dc720c090f 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp @@ -51,7 +51,7 @@ #include <QtGui/QOffscreenSurface> #include "qglxintegration.h" -#include <QtPlatformSupport/private/qglxconvenience_p.h> +#include <QtGlxSupport/private/qglxconvenience_p.h> #include <QtPlatformHeaders/QGLXNativeContext> #if defined(Q_OS_LINUX) || defined(Q_OS_BSD4) diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp index 8ae83b8084..8df8b28f72 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp @@ -40,7 +40,7 @@ #include "qxcbglxwindow.h" #include "qxcbscreen.h" -#include <QtPlatformSupport/private/qglxconvenience_p.h> +#include <QtGlxSupport/private/qglxconvenience_p.h> QT_BEGIN_NAMESPACE @@ -59,6 +59,10 @@ const xcb_visualtype_t *QXcbGlxWindow::createVisual() if (!scr) return Q_NULLPTR; XVisualInfo *visualInfo = qglx_findVisualInfo(DISPLAY_FROM_XCB(scr), scr->screenNumber(), &m_format); + if (!visualInfo) { + qWarning() << "No XVisualInfo for format" << m_format; + return Q_NULLPTR; + } const xcb_visualtype_t *xcb_visualtype = scr->visualForId(visualInfo->visualid); XFree(visualInfo); return xcb_visualtype; diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.pro b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.pro index e52677d091..8aa6e1febd 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.pro +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.pro @@ -1,6 +1,7 @@ TARGET = qxcb-glx-integration include(../gl_integrations_plugin_base.pri) +QT += glx_support-private #should be removed from the sources DEFINES += XCB_USE_GLX XCB_USE_XLIB diff --git a/src/plugins/platforms/xcb/qxcbbackingstore.cpp b/src/plugins/platforms/xcb/qxcbbackingstore.cpp index 130ae9be0c..3d09b1c139 100644 --- a/src/plugins/platforms/xcb/qxcbbackingstore.cpp +++ b/src/plugins/platforms/xcb/qxcbbackingstore.cpp @@ -168,12 +168,13 @@ QXcbShmImage::QXcbShmImage(QXcbScreen *screen, const QSize &size, uint depth, QI return; int id = shmget(IPC_PRIVATE, segmentSize, IPC_CREAT | 0600); - if (id == -1) + if (id == -1) { qWarning("QXcbShmImage: shmget() failed (%d: %s) for size %d (%dx%d)", errno, strerror(errno), segmentSize, size.width(), size.height()); - else - m_shm_info.shmid = id; - m_shm_info.shmaddr = m_xcb_image->data = (quint8 *)shmat (m_shm_info.shmid, 0, 0); + } else { + m_shm_info.shmaddr = m_xcb_image->data = (quint8 *)shmat(id, 0, 0); + } + m_shm_info.shmid = id; m_shm_info.shmseg = xcb_generate_id(xcb_connection()); const xcb_query_extension_reply_t *shm_reply = xcb_get_extension_data(xcb_connection(), &xcb_shm_id); @@ -184,9 +185,10 @@ QXcbShmImage::QXcbShmImage(QXcbScreen *screen, const QSize &size, uint depth, QI if (!shm_present || error || id == -1) { free(error); - shmdt(m_shm_info.shmaddr); - shmctl(m_shm_info.shmid, IPC_RMID, 0); - + if (id != -1) { + shmdt(m_shm_info.shmaddr); + shmctl(m_shm_info.shmid, IPC_RMID, 0); + } m_shm_info.shmaddr = 0; m_xcb_image->data = (uint8_t *)malloc(segmentSize); diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp index d1d7be123d..57ce357a17 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection.cpp @@ -116,6 +116,7 @@ Q_LOGGING_CATEGORY(lcQpaScreen, "qt.qpa.screen") #define XCB_GE_GENERIC 35 #endif +#if defined(XCB_USE_XINPUT2) // Starting from the xcb version 1.9.3 struct xcb_ge_event_t has changed: // - "pad0" became "extension" // - "pad1" and "pad" became "pad0" @@ -133,6 +134,7 @@ static inline bool isXIEvent(xcb_generic_event_t *event, int opCode) qt_xcb_ge_event_t *e = reinterpret_cast<qt_xcb_ge_event_t *>(event); return e->extension == opCode; } +#endif // XCB_USE_XINPUT2 #ifdef XCB_USE_XLIB static const char * const xcbConnectionErrors[] = { diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp index b0c5ac79f9..f4da7ba033 100644 --- a/src/plugins/platforms/xcb/qxcbintegration.cpp +++ b/src/plugins/platforms/xcb/qxcbintegration.cpp @@ -55,9 +55,9 @@ #include <xcb/xcb.h> -#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h> -#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h> -#include <QtPlatformSupport/private/qgenericunixservices_p.h> +#include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h> +#include <QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h> +#include <QtServiceSupport/private/qgenericunixservices_p.h> #include <stdio.h> @@ -77,7 +77,7 @@ #ifndef QT_NO_ACCESSIBILITY #include <qpa/qplatformaccessibility.h> #ifndef QT_NO_ACCESSIBILITY_ATSPI_BRIDGE -#include "../../../platformsupport/linuxaccessibility/bridge_p.h" +#include <QtLinuxAccessibilitySupport/private/bridge_p.h> #endif #endif diff --git a/src/plugins/platforms/xcb/qxcbmime.cpp b/src/plugins/platforms/xcb/qxcbmime.cpp index f71c5464d0..7592eb2887 100644 --- a/src/plugins/platforms/xcb/qxcbmime.cpp +++ b/src/plugins/platforms/xcb/qxcbmime.cpp @@ -208,10 +208,11 @@ QVariant QXcbMime::mimeConvertToFormat(QXcbConnection *connection, xcb_atom_t a, reinterpret_cast<const ushort *>(data.constData()), data.size() / 2); if (!str.isNull()) { if (format == QLatin1String("text/uri-list")) { - const QStringList urls = str.split(QLatin1Char('\n')); + const auto urls = str.splitRef(QLatin1Char('\n')); QList<QVariant> list; - for (const QString &s : urls) { - const QUrl url(s.trimmed()); + list.reserve(urls.size()); + for (const QStringRef &s : urls) { + const QUrl url(s.trimmed().toString()); if (url.isValid()) list.append(url); } @@ -219,7 +220,7 @@ QVariant QXcbMime::mimeConvertToFormat(QXcbConnection *connection, xcb_atom_t a, // The atomName variable is not used because mimeAtomToString() // converts "text/x-moz-url" to "text/uri-list". if (!list.isEmpty() && connection->atomName(a) == "text/x-moz-url") - return list.first(); + return list.constFirst(); return list; } else { return str; diff --git a/src/plugins/platforms/xcb/qxcbsessionmanager.cpp b/src/plugins/platforms/xcb/qxcbsessionmanager.cpp index 8744fcba3e..2303ccf806 100644 --- a/src/plugins/platforms/xcb/qxcbsessionmanager.cpp +++ b/src/plugins/platforms/xcb/qxcbsessionmanager.cpp @@ -146,7 +146,7 @@ static void sm_setProperty(const QString &name, const QStringList &value) for (QStringList::ConstIterator it = value.begin(); it != value.end(); ++it) { prop[count].length = (*it).length(); vl.append((*it).toUtf8()); - prop[count].value = (char*)vl.last().data(); + prop[count].value = (char*)vl.constLast().data(); ++count; } sm_setProperty(name.toLatin1().data(), SmLISTofARRAY8, count, prop); diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index ee7bfd6c53..0c8e78491e 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -1691,9 +1691,11 @@ void QXcbWindow::requestActivateWindow() m_deferredActivation = false; updateNetWmUserTime(connection()->time()); + QWindow *focusWindow = QGuiApplication::focusWindow(); if (window()->isTopLevel() && !(window()->flags() & Qt::X11BypassWindowManagerHint) + && (!focusWindow || !window()->isAncestorOf(focusWindow)) && connection()->wmSupport()->isSupportedByWM(atom(QXcbAtom::_NET_ACTIVE_WINDOW))) { xcb_client_message_event_t event; @@ -1704,7 +1706,6 @@ void QXcbWindow::requestActivateWindow() event.type = atom(QXcbAtom::_NET_ACTIVE_WINDOW); event.data.data32[0] = 1; event.data.data32[1] = connection()->time(); - QWindow *focusWindow = QGuiApplication::focusWindow(); event.data.data32[2] = focusWindow ? focusWindow->winId() : XCB_NONE; event.data.data32[3] = 0; event.data.data32[4] = 0; diff --git a/src/plugins/platforms/xcb/xcb-plugin.pro b/src/plugins/platforms/xcb/xcb-plugin.pro index d7f150f276..01d493156d 100644 --- a/src/plugins/platforms/xcb/xcb-plugin.pro +++ b/src/plugins/platforms/xcb/xcb-plugin.pro @@ -1,6 +1,6 @@ TARGET = qxcb -QT += core-private gui-private platformsupport-private xcb_qpa_lib-private +QT += core-private gui-private xcb_qpa_lib-private DEFINES += QT_NO_FOREACH diff --git a/src/plugins/platforms/xcb/xcb-static/xcb-static.pro b/src/plugins/platforms/xcb/xcb-static/xcb-static.pro index a1dec2b0b5..f3e54813ee 100644 --- a/src/plugins/platforms/xcb/xcb-static/xcb-static.pro +++ b/src/plugins/platforms/xcb/xcb-static/xcb-static.pro @@ -5,11 +5,11 @@ # libxcb-xinerama # CONFIG += static -load(qt_helper_lib) XCB_DIR = ../../../../3rdparty/xcb -INCLUDEPATH += $$XCB_DIR/include $$XCB_DIR/include/xcb $$XCB_DIR/sysinclude +MODULE_INCLUDEPATH += $$XCB_DIR/include $$XCB_DIR/sysinclude +INCLUDEPATH += $$XCB_DIR/include/xcb QMAKE_USE += xcb/nolink @@ -75,3 +75,5 @@ SOURCES += \ OTHER_FILES = $$XCB_DIR/README TR_EXCLUDE += $$XCB_DIR/* + +load(qt_helper_lib) diff --git a/src/plugins/platforms/xcb/xcb_qpa_lib.pro b/src/plugins/platforms/xcb/xcb_qpa_lib.pro index 246bb1f118..6db0c76dea 100644 --- a/src/plugins/platforms/xcb/xcb_qpa_lib.pro +++ b/src/plugins/platforms/xcb/xcb_qpa_lib.pro @@ -2,7 +2,13 @@ TARGET = QtXcbQpa CONFIG += no_module_headers internal_module DEFINES += QT_NO_FOREACH -QT += core-private gui-private platformsupport-private +QT += \ + core-private gui-private \ + service_support-private theme_support-private \ + eventdispatcher_support-private fontdatabase_support-private + +qtHaveModule(linuxaccessibility_support-private): \ + QT += linuxaccessibility_support-private SOURCES = \ qxcbclipboard.cpp \ @@ -64,14 +70,9 @@ qtConfig(xcb-sm) { include(gl_integrations/gl_integrations.pri) -CONFIG += qpa/genericunixfontdatabase - !qtConfig(system-xcb) { DEFINES += XCB_USE_RENDER - XCB_DIR = ../../../3rdparty/xcb - INCLUDEPATH += $$XCB_DIR/include $$XCB_DIR/sysinclude - LIBS += -L$$MODULE_BASE_OUTDIR/lib -lxcb-static$$qtPlatformTargetSuffix() - QMAKE_USE += xcb + QMAKE_USE += xcb-static xcb } else { LIBS += -lxcb-xinerama ### there is no configure test for this! qtConfig(xkb): QMAKE_USE += xcb_xkb diff --git a/src/plugins/platformthemes/gtk3/gtk3.pro b/src/plugins/platformthemes/gtk3/gtk3.pro index 12364b0b57..c291ac56a0 100644 --- a/src/plugins/platformthemes/gtk3/gtk3.pro +++ b/src/plugins/platformthemes/gtk3/gtk3.pro @@ -5,7 +5,7 @@ PLUGIN_EXTENDS = - PLUGIN_CLASS_NAME = QGtk3ThemePlugin load(qt_plugin) -QT += core-private gui-private platformsupport-private +QT += core-private gui-private theme_support-private CONFIG += X11 QMAKE_USE += gtk3 diff --git a/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp b/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp index 42d3c1f193..2030732e4b 100644 --- a/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp +++ b/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp @@ -463,10 +463,10 @@ void QGtk3FileDialogHelper::setNameFilters(const QStringList &filters) foreach (const QString &filter, filters) { GtkFileFilter *gtkFilter = gtk_file_filter_new(); - const QString name = filter.left(filter.indexOf(QLatin1Char('('))); + const QStringRef name = filter.leftRef(filter.indexOf(QLatin1Char('('))); const QStringList extensions = cleanFilterList(filter); - gtk_file_filter_set_name(gtkFilter, name.isEmpty() ? extensions.join(QStringLiteral(", ")).toUtf8() : name.toUtf8()); + gtk_file_filter_set_name(gtkFilter, name.isEmpty() ? extensions.join(QLatin1String(", ")).toUtf8() : name.toUtf8()); foreach (const QString &ext, extensions) gtk_file_filter_add_pattern(gtkFilter, ext.toUtf8()); diff --git a/src/plugins/printsupport/cups/qppdprintdevice.cpp b/src/plugins/printsupport/cups/qppdprintdevice.cpp index caa7382462..9efa83d409 100644 --- a/src/plugins/printsupport/cups/qppdprintdevice.cpp +++ b/src/plugins/printsupport/cups/qppdprintdevice.cpp @@ -63,7 +63,7 @@ QPpdPrintDevice::QPpdPrintDevice(const QString &id) if (!id.isEmpty()) { // TODO For now each dest is an individual device - QStringList parts = id.split(QLatin1Char('/')); + const auto parts = id.splitRef(QLatin1Char('/')); m_cupsName = parts.at(0).toUtf8(); if (parts.size() > 1) m_cupsInstance = parts.at(1).toUtf8(); diff --git a/src/plugins/sqldrivers/db2/qsql_db2.cpp b/src/plugins/sqldrivers/db2/qsql_db2.cpp index 9408f464e0..27d0e7001a 100644 --- a/src/plugins/sqldrivers/db2/qsql_db2.cpp +++ b/src/plugins/sqldrivers/db2/qsql_db2.cpp @@ -59,8 +59,6 @@ #define SQL_BIGUINT_TYPE quint64 #endif -#define UNICODE - #include <sqlcli1.h> #include <string.h> @@ -1187,8 +1185,8 @@ QDB2Driver::QDB2Driver(Qt::HANDLE env, Qt::HANDLE con, QObject* parent) : QSqlDriver(*new QDB2DriverPrivate, parent) { Q_D(QDB2Driver); - d->hEnv = reinterpret_cast<intptr_t>(env); - d->hDbc = reinterpret_cast<intptr_t>(con); + d->hEnv = reinterpret_cast<SQLHANDLE>(env); + d->hDbc = reinterpret_cast<SQLHANDLE>(con); if (env && con) { setOpen(true); setOpenError(false); diff --git a/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp b/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp index ef4ef2e93c..1cb0f10494 100644 --- a/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp +++ b/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp @@ -72,7 +72,7 @@ QT_BEGIN_NAMESPACE static QString _q_escapeIdentifier(const QString &identifier) { QString res = identifier; - if(!identifier.isEmpty() && identifier.left(1) != QString(QLatin1Char('"')) && identifier.right(1) != QString(QLatin1Char('"')) ) { + if (!identifier.isEmpty() && !identifier.startsWith(QLatin1Char('"')) && !identifier.endsWith(QLatin1Char('"'))) { res.replace(QLatin1Char('"'), QLatin1String("\"\"")); res.prepend(QLatin1Char('"')).append(QLatin1Char('"')); res.replace(QLatin1Char('.'), QLatin1String("\".\"")); diff --git a/src/printsupport/dialogs/qpagesetupdialog.cpp b/src/printsupport/dialogs/qpagesetupdialog.cpp index 81cbf87777..911c0ecdf7 100644 --- a/src/printsupport/dialogs/qpagesetupdialog.cpp +++ b/src/printsupport/dialogs/qpagesetupdialog.cpp @@ -116,7 +116,7 @@ void QPageSetupDialogPrivate::setPrinter(QPrinter *newPrinter) printer = new QPrinter; ownsPrinter = true; } -#ifndef Q_DEAD_CODE_FROM_QT4_X11 +#if 1 // Used to be excluded in Qt4 for Q_WS_X11 if (printer->outputFormat() != QPrinter::NativeFormat) qWarning("QPageSetupDialog: Cannot be used on non-native printers"); #endif diff --git a/src/sql/kernel/qsqldriver.cpp b/src/sql/kernel/qsqldriver.cpp index ad5207cf6e..bf98f82087 100644 --- a/src/sql/kernel/qsqldriver.cpp +++ b/src/sql/kernel/qsqldriver.cpp @@ -671,6 +671,7 @@ QString QSqlDriver::formatValue(const QSqlField &field, bool trimStrings) const break; } } + // fall through default: r = field.value().toString(); break; diff --git a/src/src.pro b/src/src.pro index 541053eba5..87391eab5b 100644 --- a/src/src.pro +++ b/src/src.pro @@ -4,6 +4,9 @@ QT_FOR_CONFIG += gui-private include($$OUT_PWD/corelib/qtcore-config.pri) include($$OUT_PWD/gui/qtgui-config.pri) +force_bootstrap|!qtConfig(commandlineparser): \ + CONFIG += force_dbus_bootstrap + src_qtzlib.file = $$PWD/corelib/qtzlib.pro src_qtzlib.target = sub-zlib @@ -34,7 +37,7 @@ src_tools_bootstrap_dbus.depends = src_tools_bootstrap src_tools_qdbusxml2cpp.subdir = tools/qdbusxml2cpp src_tools_qdbusxml2cpp.target = sub-qdbusxml2cpp -force_bootstrap: src_tools_qdbusxml2cpp.depends = src_tools_bootstrap_dbus +force_dbus_bootstrap: src_tools_qdbusxml2cpp.depends = src_tools_bootstrap_dbus else: src_tools_qdbusxml2cpp.depends = src_dbus src_tools_qdbuscpp2xml.subdir = tools/qdbuscpp2xml @@ -57,7 +60,7 @@ src_xml.depends = src_corelib src_dbus.subdir = $$PWD/dbus src_dbus.target = sub-dbus src_dbus.depends = src_corelib -force_bootstrap: src_dbus.depends += src_tools_bootstrap_dbus # avoid syncqt race +force_dbus_bootstrap: src_dbus.depends += src_tools_bootstrap_dbus # avoid syncqt race src_concurrent.subdir = $$PWD/concurrent src_concurrent.target = sub-concurrent @@ -143,7 +146,7 @@ TOOLS = src_tools_moc src_tools_rcc src_tools_qlalr win32:SUBDIRS += src_winmain SUBDIRS += src_network src_sql src_xml src_testlib qtConfig(dbus) { - force_bootstrap|qtConfig(private_tests): \ + force_dbus_bootstrap|qtConfig(private_tests): \ SUBDIRS += src_tools_bootstrap_dbus SUBDIRS += src_dbus src_tools_qdbusxml2cpp src_tools_qdbuscpp2xml TOOLS += src_tools_qdbusxml2cpp src_tools_qdbuscpp2xml diff --git a/src/testlib/qbenchmark.cpp b/src/testlib/qbenchmark.cpp index c884d5d740..c933a16c35 100644 --- a/src/testlib/qbenchmark.cpp +++ b/src/testlib/qbenchmark.cpp @@ -40,6 +40,7 @@ #include <QtTest/qbenchmark.h> #include <QtTest/private/qbenchmark_p.h> #include <QtTest/private/qbenchmarkmetric_p.h> +#include <QtTest/private/qbenchmarktimemeasurers_p.h> #include <QtCore/qprocess.h> #include <QtCore/qdir.h> diff --git a/src/testlib/qbenchmarkmeasurement.cpp b/src/testlib/qbenchmarkmeasurement.cpp index ac4d75ce3b..228ab15f99 100644 --- a/src/testlib/qbenchmarkmeasurement.cpp +++ b/src/testlib/qbenchmarkmeasurement.cpp @@ -37,7 +37,7 @@ ** ****************************************************************************/ -#include <QtTest/private/qbenchmarkmeasurement_p.h> +#include <QtTest/private/qbenchmarktimemeasurers_p.h> #include <QtTest/private/qbenchmark_p.h> #include <QtTest/private/qbenchmarkmetric_p.h> #include <QtTest/qbenchmark.h> diff --git a/src/testlib/qbenchmarkmeasurement_p.h b/src/testlib/qbenchmarkmeasurement_p.h index 1444439e11..8dbfd4b618 100644 --- a/src/testlib/qbenchmarkmeasurement_p.h +++ b/src/testlib/qbenchmarkmeasurement_p.h @@ -51,8 +51,6 @@ // We mean it. // -#include <QtCore/qelapsedtimer.h> -#include <QtTest/private/cycle_p.h> #include <QtTest/qbenchmark.h> QT_BEGIN_NAMESPACE @@ -73,40 +71,6 @@ public: virtual QTest::QBenchmarkMetric metricType() = 0; }; -class QBenchmarkTimeMeasurer : public QBenchmarkMeasurerBase -{ -public: - void start(); - qint64 checkpoint(); - qint64 stop(); - bool isMeasurementAccepted(qint64 measurement); - int adjustIterationCount(int sugestion); - int adjustMedianCount(int suggestion); - bool needsWarmupIteration(); - QTest::QBenchmarkMetric metricType(); -private: - QElapsedTimer time; -}; - -#ifdef HAVE_TICK_COUNTER // defined in 3rdparty/cycle_p.h - -class QBenchmarkTickMeasurer : public QBenchmarkMeasurerBase -{ -public: - void start(); - qint64 checkpoint(); - qint64 stop(); - bool isMeasurementAccepted(qint64 measurement); - int adjustIterationCount(int); - int adjustMedianCount(int suggestion); - bool needsWarmupIteration(); - QTest::QBenchmarkMetric metricType(); -private: - CycleCounterTicks startTicks; -}; - -#endif - QT_END_NAMESPACE #endif // QBENCHMARKMEASUREMENT_P_H diff --git a/src/corelib/kernel/qcrashhandler_p.h b/src/testlib/qbenchmarktimemeasurers_p.h index 64c15ce66c..e5ffb1157d 100644 --- a/src/corelib/kernel/qcrashhandler_p.h +++ b/src/testlib/qbenchmarktimemeasurers_p.h @@ -3,7 +3,7 @@ ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** -** This file is part of the QtCore module of the Qt Toolkit. +** This file is part of the QtTest module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -37,8 +37,8 @@ ** ****************************************************************************/ -#ifndef QCRASHHANDLER_P_H -#define QCRASHHANDLER_P_H +#ifndef QBENCHMARKTIMEMEASURERS_P_H +#define QBENCHMARKTIMEMEASURERS_P_H // // W A R N I N G @@ -51,29 +51,46 @@ // We mean it. // -#include <QtCore/private/qglobal_p.h> - -#ifndef QT_NO_CRASHHANDLER +#include <QtTest/private/qbenchmarkmeasurement_p.h> +#include <QtCore/qelapsedtimer.h> +#include <QtTest/private/cycle_p.h> QT_BEGIN_NAMESPACE -typedef void (*QtCrashHandler)(); - -class Q_CORE_EXPORT QSegfaultHandler +class QBenchmarkTimeMeasurer : public QBenchmarkMeasurerBase { - friend void qt_signal_handler(int); - static QtCrashHandler callback; public: - static void initialize(char **, int); + void start(); + qint64 checkpoint(); + qint64 stop(); + bool isMeasurementAccepted(qint64 measurement); + int adjustIterationCount(int sugestion); + int adjustMedianCount(int suggestion); + bool needsWarmupIteration(); + QTest::QBenchmarkMetric metricType(); +private: + QElapsedTimer time; +}; - inline static void installCrashHandler(QtCrashHandler h) { callback = h; } - inline static QtCrashHandler crashHandler() { return callback; } +#ifdef HAVE_TICK_COUNTER // defined in 3rdparty/cycle_p.h +class QBenchmarkTickMeasurer : public QBenchmarkMeasurerBase +{ +public: + void start(); + qint64 checkpoint(); + qint64 stop(); + bool isMeasurementAccepted(qint64 measurement); + int adjustIterationCount(int); + int adjustMedianCount(int suggestion); + bool needsWarmupIteration(); + QTest::QBenchmarkMetric metricType(); private: + CycleCounterTicks startTicks; }; -QT_END_NAMESPACE +#endif // HAVE_TICK_COUNTER -#endif // QT_NO_CRASHHANDLER +QT_END_NAMESPACE -#endif // QCRASHHANDLER_P_H +#endif // QBENCHMARKTIMEMEASURERS_P_H diff --git a/src/testlib/qtestcase.qdoc b/src/testlib/qtestcase.qdoc index bee8a0ad93..8f3d140add 100644 --- a/src/testlib/qtestcase.qdoc +++ b/src/testlib/qtestcase.qdoc @@ -124,7 +124,7 @@ \relates QTest The QTRY_VERIFY_WITH_TIMEOUT() macro is similar to QVERIFY(), but checks the \a condition - repeatedly, until either the condition becomes true or the \a timeout is + repeatedly, until either the condition becomes true or the \a timeout (in milliseconds) is reached. Between each evaluation, events will be processed. If the timeout is reached, a failure is recorded in the test log and the test won't be executed further. @@ -156,7 +156,7 @@ The QTRY_VERIFY2_WITH_TIMEOUT macro is similar to QTRY_VERIFY_WITH_TIMEOUT() except that it outputs a verbose \a message when \a condition is still false - after the specified \a timeout. The \a message is a plain C string. + after the specified \a timeout (in milliseconds). The \a message is a plain C string. Example: \code @@ -196,7 +196,7 @@ The QTRY_COMPARE_WITH_TIMEOUT() macro is similar to QCOMPARE(), but performs the comparison of the \a actual and \a expected values repeatedly, until either the two values - are equal or the \a timeout is reached. Between each comparison, events + are equal or the \a timeout (in milliseconds) is reached. Between each comparison, events will be processed. If the timeout is reached, a failure is recorded in the test log and the test won't be executed further. diff --git a/src/testlib/testlib.pro b/src/testlib/testlib.pro index d76dbb8c75..5b2205e875 100644 --- a/src/testlib/testlib.pro +++ b/src/testlib/testlib.pro @@ -14,6 +14,7 @@ QMAKE_DOCS = $$PWD/doc/qttestlib.qdocconf HEADERS = qbenchmark.h \ qbenchmark_p.h \ qbenchmarkmeasurement_p.h \ + qbenchmarktimemeasurers_p.h \ qbenchmarkvalgrind_p.h \ qbenchmarkevent_p.h \ qbenchmarkperfevents_p.h \ diff --git a/src/tools/qdbusxml2cpp/qdbusxml2cpp.pro b/src/tools/qdbusxml2cpp/qdbusxml2cpp.pro index cb14db5fef..d9ee5de0be 100644 --- a/src/tools/qdbusxml2cpp/qdbusxml2cpp.pro +++ b/src/tools/qdbusxml2cpp/qdbusxml2cpp.pro @@ -1,4 +1,6 @@ option(host_build) +!force_bootstrap:!qtConfig(commandlineparser): \ + CONFIG += force_bootstrap QT = core-private force_bootstrap: QT += bootstrap_dbus-private else: QT += dbus-private diff --git a/src/tools/uic/uic.pro b/src/tools/uic/uic.pro index 8008dde07a..9afb2d847f 100644 --- a/src/tools/uic/uic.pro +++ b/src/tools/uic/uic.pro @@ -1,4 +1,6 @@ option(host_build) +!force_bootstrap:if(!qtConfig(commandlineparser)|!qtConfig(textcodec)): \ + CONFIG += force_bootstrap DEFINES += QT_UIC QT_NO_CAST_FROM_ASCII QT_NO_FOREACH diff --git a/src/widgets/configure.json b/src/widgets/configure.json index c1931d9d80..b241fcdf11 100644 --- a/src/widgets/configure.json +++ b/src/widgets/configure.json @@ -8,7 +8,6 @@ "commandline": { "options": { - "android-style-assets": "boolean", "gtk": { "type": "boolean", "name": "gtk3" }, "style-windows": "boolean", "style-windowsxp": "boolean", @@ -78,11 +77,6 @@ "condition": "features.style-windows && features.properties && features.cssparser", "output": [ "publicFeature", "feature" ] }, - "android-style-assets": { - "label": "Android Style Assets", - "condition": "features.style-android", - "output": [ "privateConfig" ] - }, "effects": { "label": "Effects", "purpose": "Provides special widget effects (e.g. fading and scrolling).", diff --git a/src/widgets/dialogs/qfiledialog.cpp b/src/widgets/dialogs/qfiledialog.cpp index 879f085f11..74875faf21 100644 --- a/src/widgets/dialogs/qfiledialog.cpp +++ b/src/widgets/dialogs/qfiledialog.cpp @@ -892,6 +892,9 @@ void QFileDialogPrivate::_q_goToUrl(const QUrl &url) {QStandardPaths::standardLocations(QStandardPaths::PicturesLocation).last()}, a native image picker dialog will be used for accessing the user's photo album. The filename returned can be loaded using QFile and related APIs. + For this to be enabled, the Info.plist assigned to QMAKE_INFO_PLIST in the + project file must contain the key \c NSPhotoLibraryUsageDescription. See + Info.plist documentation from Apple for more information regarding this key. This feature was added in Qt 5.5. */ void QFileDialog::setDirectory(const QString &directory) @@ -2034,10 +2037,12 @@ QString QFileDialog::labelText(DialogLabel label) const button = d->qFileDialogUi->buttonBox->button(QDialogButtonBox::Save); if (button) return button->text(); + break; case Reject: button = d->qFileDialogUi->buttonBox->button(QDialogButtonBox::Cancel); if (button) return button->text(); + break; } return QString(); } diff --git a/src/widgets/dialogs/qfilesystemmodel.cpp b/src/widgets/dialogs/qfilesystemmodel.cpp index 6e1bee94c4..db1ce3fe0e 100644 --- a/src/widgets/dialogs/qfilesystemmodel.cpp +++ b/src/widgets/dialogs/qfilesystemmodel.cpp @@ -904,16 +904,14 @@ bool QFileSystemModel::setData(const QModelIndex &idx, const QVariant &value, in int visibleLocation = parentNode->visibleLocation(parentNode->children.value(indexNode->fileName)->fileName); parentNode->visibleChildren.removeAt(visibleLocation); - QFileSystemModelPrivate::QFileSystemNode * oldValue = parentNode->children.value(oldName); - parentNode->children[newName] = oldValue; - oldValue->fileName = newName; - oldValue->parent = parentNode; + QScopedPointer<QFileSystemModelPrivate::QFileSystemNode> nodeToRename(parentNode->children.take(oldName)); + nodeToRename->fileName = newName; + nodeToRename->parent = parentNode; #ifndef QT_NO_FILESYSTEMWATCHER - oldValue->populate(d->fileInfoGatherer.getInfo(QFileInfo(parentPath, newName))); + nodeToRename->populate(d->fileInfoGatherer.getInfo(QFileInfo(parentPath, newName))); #endif - oldValue->isVisible = true; - - parentNode->children.remove(oldName); + nodeToRename->isVisible = true; + parentNode->children[newName] = nodeToRename.take(); parentNode->visibleChildren.insert(visibleLocation, newName); d->delayedSort(); diff --git a/src/widgets/doc/snippets/code/doc_src_styles.cpp b/src/widgets/doc/snippets/code/doc_src_styles.cpp index b10c875111..a70ed6b11d 100644 --- a/src/widgets/doc/snippets/code/doc_src_styles.cpp +++ b/src/widgets/doc/snippets/code/doc_src_styles.cpp @@ -81,7 +81,7 @@ state |= QStyle::State_MouseOver; if (widget->window()->isActiveWindow()) state |= QStyle::State_Active; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC extern bool qt_mac_can_clickThrough(const QWidget *w); //qwidget_mac.cpp if (!(state & QStyle::State_Active) && !qt_mac_can_clickThrough(widget)) state &= ~QStyle::State_Enabled; diff --git a/src/widgets/doc/snippets/macmainwindow.mm b/src/widgets/doc/snippets/macmainwindow.mm index f74f8453c7..d848e6442d 100644 --- a/src/widgets/doc/snippets/macmainwindow.mm +++ b/src/widgets/doc/snippets/macmainwindow.mm @@ -41,7 +41,7 @@ #include <QtGui> -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC #include <Carbon/Carbon.h> @@ -289,4 +289,4 @@ QAbstractItemModel *MacMainWindow::createDocumentModel() return model; } -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif diff --git a/src/widgets/graphicsview/qgraphicsitem.cpp b/src/widgets/graphicsview/qgraphicsitem.cpp index 5492862287..6124796073 100644 --- a/src/widgets/graphicsview/qgraphicsitem.cpp +++ b/src/widgets/graphicsview/qgraphicsitem.cpp @@ -7492,7 +7492,7 @@ void QGraphicsItem::setInputMethodHints(Qt::InputMethodHints hints) */ void QGraphicsItem::updateMicroFocus() { -#if !defined(QT_NO_IM) && defined(Q_DEAD_CODE_FROM_QT4_X11) +#if !defined(QT_NO_IM) && 0 /* Used to be included in Qt4 for Q_WS_X11 */ if (QWidget *fw = QApplication::focusWidget()) { if (scene()) { for (int i = 0 ; i < scene()->views().count() ; ++i) { diff --git a/src/widgets/graphicsview/qgraphicsscene.cpp b/src/widgets/graphicsview/qgraphicsscene.cpp index 5b46eb35be..e6726285d9 100644 --- a/src/widgets/graphicsview/qgraphicsscene.cpp +++ b/src/widgets/graphicsview/qgraphicsscene.cpp @@ -4160,7 +4160,7 @@ void QGraphicsScene::wheelEvent(QGraphicsSceneWheelEvent *wheelEvent) wheelEvent->scenePos(), wheelEvent->widget()); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // On Mac, ignore the event if the first item under the mouse is not the last opened // popup (or one of its descendant) if (!d->popupWidgets.isEmpty() && !wheelCandidates.isEmpty() && wheelCandidates.first() != d->popupWidgets.back() && !d->popupWidgets.back()->isAncestorOf(wheelCandidates.first())) { @@ -4399,7 +4399,7 @@ void QGraphicsScenePrivate::drawItemHelper(QGraphicsItem *item, QPainter *painte // Render directly, using no cache. if (cacheMode == QGraphicsItem::NoCache -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 || !X11->use_xrender #endif ) { diff --git a/src/widgets/graphicsview/qgraphicsview.cpp b/src/widgets/graphicsview/qgraphicsview.cpp index 3f7d2d1cd1..41f5eddd99 100644 --- a/src/widgets/graphicsview/qgraphicsview.cpp +++ b/src/widgets/graphicsview/qgraphicsview.cpp @@ -3490,7 +3490,7 @@ void QGraphicsView::paintEvent(QPaintEvent *event) // Draw background if ((d->cacheMode & CacheBackground) -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 && X11->use_xrender #endif ) { @@ -3689,7 +3689,7 @@ void QGraphicsView::scrollContentsBy(int dx, int dy) d->updateLastCenterPoint(); if ((d->cacheMode & CacheBackground) -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 && X11->use_xrender #endif ) { diff --git a/src/widgets/graphicsview/qgraphicsview_p.h b/src/widgets/graphicsview/qgraphicsview_p.h index 9065650216..10103a1809 100644 --- a/src/widgets/graphicsview/qgraphicsview_p.h +++ b/src/widgets/graphicsview/qgraphicsview_p.h @@ -184,7 +184,7 @@ public: inline void dispatchPendingUpdateRequests() { -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // QWidget::update() works slightly different on the Mac without the raster engine; // it's not part of our backing store so it needs special threatment. if (QApplicationPrivate::graphics_system_name != QLatin1String("raster")) { @@ -195,7 +195,7 @@ public: extern void qt_mac_dispatchPendingUpdateRequests(QWidget *); qt_mac_dispatchPendingUpdateRequests(viewport->window()); } else -#endif // !Q_DEAD_CODE_FROM_QT4_MAC +#endif { if (qt_widget_private(viewport)->paintOnScreen()) QCoreApplication::sendPostedEvents(viewport, QEvent::UpdateRequest); diff --git a/src/widgets/graphicsview/qgraphicswidget.cpp b/src/widgets/graphicsview/qgraphicswidget.cpp index e1ba3759e0..d153915ae6 100644 --- a/src/widgets/graphicsview/qgraphicswidget.cpp +++ b/src/widgets/graphicsview/qgraphicswidget.cpp @@ -708,7 +708,7 @@ void QGraphicsWidget::initStyleOption(QStyleOption *option) const option->state |= QStyle::State_Window; /* ### -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC extern bool qt_mac_can_clickThrough(const QGraphicsWidget *w); //qwidget_mac.cpp if (!(option->state & QStyle::State_Active) && !qt_mac_can_clickThrough(widget)) option->state &= ~QStyle::State_Enabled; diff --git a/src/widgets/graphicsview/qgraphicswidget_p.cpp b/src/widgets/graphicsview/qgraphicswidget_p.cpp index faf1a4c49a..4beb64a254 100644 --- a/src/widgets/graphicsview/qgraphicswidget_p.cpp +++ b/src/widgets/graphicsview/qgraphicswidget_p.cpp @@ -52,7 +52,7 @@ #include <QtWidgets/qstyleoption.h> #include <QtWidgets/QStyleOptionTitleBar> #include <QtWidgets/QGraphicsSceneMouseEvent> -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) && !defined(QT_NO_STYLE_MAC) +#if 0 /* Used to be included in Qt4 for Q_WS_MAC */ && !defined(QT_NO_STYLE_MAC) # include <private/qmacstyle_mac_p.h> #endif @@ -704,7 +704,7 @@ void QGraphicsWidgetPrivate::windowFrameHoverMoveEvent(QGraphicsSceneHoverEvent case Qt::TitleBarArea: windowData->buttonRect = q->style()->subControlRect( QStyle::CC_TitleBar, &bar, QStyle::SC_TitleBarCloseButton, 0); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // On mac we should hover if we are in the 'area' of the buttons windowData->buttonRect |= q->style()->subControlRect( QStyle::CC_TitleBar, &bar, QStyle::SC_TitleBarMinButton, 0); diff --git a/src/widgets/itemviews/qabstractitemview.cpp b/src/widgets/itemviews/qabstractitemview.cpp index fff09b46d0..6ecf5a664f 100644 --- a/src/widgets/itemviews/qabstractitemview.cpp +++ b/src/widgets/itemviews/qabstractitemview.cpp @@ -3698,7 +3698,7 @@ QStyleOptionViewItem QAbstractItemView::viewOptions() const option.state &= ~QStyle::State_MouseOver; option.font = font(); -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC // On mac the focus appearance follows window activation // not widget activation if (!hasFocus()) diff --git a/src/widgets/itemviews/qheaderview.cpp b/src/widgets/itemviews/qheaderview.cpp index 85bd3003e1..837383f016 100644 --- a/src/widgets/itemviews/qheaderview.cpp +++ b/src/widgets/itemviews/qheaderview.cpp @@ -2450,7 +2450,7 @@ void QHeaderView::mouseMoveEvent(QMouseEvent *e) if (pos < 0 && d->state != QHeaderViewPrivate::SelectSections) return; if (e->buttons() == Qt::NoButton) { -#if !defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC // Under Cocoa, when the mouse button is released, may include an extra // simulated mouse moved event. The state of the buttons when this event // is generated is already "no button" and the code below gets executed diff --git a/src/widgets/itemviews/qstyleditemdelegate.cpp b/src/widgets/itemviews/qstyleditemdelegate.cpp index bab8436dce..e4115c9e60 100644 --- a/src/widgets/itemviews/qstyleditemdelegate.cpp +++ b/src/widgets/itemviews/qstyleditemdelegate.cpp @@ -366,7 +366,7 @@ void QStyledItemDelegate::initStyleOption(QStyleOptionViewItem *option, if it is enabled or selected. After painting, you should ensure that the painter is returned to - its the state it was supplied in when this function was called. + the state it was supplied in when this function was called. For example, it may be useful to call QPainter::save() before painting and QPainter::restore() afterwards. diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp index cfe68d6b6a..2d1d1f43d0 100644 --- a/src/widgets/itemviews/qtreeview.cpp +++ b/src/widgets/itemviews/qtreeview.cpp @@ -2194,7 +2194,7 @@ QModelIndex QTreeView::moveCursor(CursorAction cursorAction, Qt::KeyboardModifie return QModelIndex(); } int vi = -1; -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) && !defined(QT_NO_STYLE_MAC) +#if 0 /* Used to be included in Qt4 for Q_WS_MAC */ && !defined(QT_NO_STYLE_MAC) // Selection behavior is slightly different on the Mac. if (d->selectionMode == QAbstractItemView::ExtendedSelection && d->selectionModel diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp index b94aa826d3..89eff898fe 100644 --- a/src/widgets/kernel/qapplication.cpp +++ b/src/widgets/kernel/qapplication.cpp @@ -4160,13 +4160,10 @@ void QApplication::beep() \relates QApplication A global pointer referring to the unique application object. It is - equivalent to the pointer returned by the QCoreApplication::instance() - function except that, in GUI applications, it is a pointer to a - QApplication instance. + equivalent to QCoreApplication::instance(), but cast as a QApplication pointer, + so only valid when the unique application object is a QApplication. - Only one application object can be created. - - \sa QCoreApplication::instance() + \sa QCoreApplication::instance(), qGuiApp */ /*! diff --git a/src/widgets/kernel/qapplication_p.h b/src/widgets/kernel/qapplication_p.h index 02079fb8d5..2a7859b056 100644 --- a/src/widgets/kernel/qapplication_p.h +++ b/src/widgets/kernel/qapplication_p.h @@ -112,7 +112,7 @@ public: virtual bool shouldQuit() Q_DECL_OVERRIDE; bool tryCloseAllWindows() Q_DECL_OVERRIDE; -#if defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 // Used to be included in Qt4 for Q_WS_X11 #ifndef QT_NO_SETTINGS static bool x11_apply_settings(); #endif @@ -132,7 +132,7 @@ public: static bool isBlockedByModal(QWidget *widget); static bool modalState(); static bool tryModalHelper(QWidget *widget, QWidget **rettop = 0); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC static QWidget *tryModalHelper_sys(QWidget *top); bool canQuit(); #endif @@ -146,14 +146,14 @@ public: bool notify_helper(QObject *receiver, QEvent * e); void init( -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 Display *dpy = 0, Qt::HANDLE visual = 0, Qt::HANDLE cmap = 0 #endif ); void initialize(); void process_cmdline(); -#if defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 // Used to be included in Qt4 for Q_WS_X11 static void x11_initialize_style(); #endif @@ -208,7 +208,7 @@ public: static void initializeWidgetFontHash(); static void setSystemFont(const QFont &font); -#if defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 // Used to be included in Qt4 for Q_WS_X11 static void applyX11SpecificCommandLineArguments(QWidget *main_widget); #endif @@ -219,7 +219,7 @@ public: static Qt::NavigationMode navigationMode; #endif -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) || defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 /* Used to be included in Qt4 for Q_WS_MAC */ || 0 /* Used to be included in Qt4 for Q_WS_X11 */ void _q_alertTimeOut(); QHash<QWidget *, QTimer *> alertTimerHash; #endif @@ -259,12 +259,12 @@ public: QGestureManager *gestureManager; QWidget *gestureWidget; #endif -#if defined(Q_DEAD_CODE_FROM_QT4_X11) || defined(Q_DEAD_CODE_FROM_QT4_WIN) +#if 0 /* Used to be included in Qt4 for Q_WS_X11 */ || 0 /* Used to be included in Qt4 for Q_WS_WIN */ QPixmap *move_cursor; QPixmap *copy_cursor; QPixmap *link_cursor; #endif -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) +#if 0 // Used to be included in Qt4 for Q_WS_WIN QPixmap *ignore_cursor; #endif @@ -295,9 +295,9 @@ private: static bool isAlien(QWidget *); }; -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) +#if 0 // Used to be included in Qt4 for Q_WS_WIN extern void qt_win_set_cursor(QWidget *, bool); -#elif defined(Q_DEAD_CODE_FROM_QT4_X11) +#elif 0 // Used to be included in Qt4 for Q_WS_X11 extern void qt_x11_enforce_cursor(QWidget *, bool); extern void qt_x11_enforce_cursor(QWidget *); #else diff --git a/src/widgets/kernel/qgesturemanager.cpp b/src/widgets/kernel/qgesturemanager.cpp index c901285d1a..2e5c2c53bd 100644 --- a/src/widgets/kernel/qgesturemanager.cpp +++ b/src/widgets/kernel/qgesturemanager.cpp @@ -52,7 +52,7 @@ #ifdef Q_OS_OSX #include "qmacgesturerecognizer_p.h" #endif -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) && !defined(QT_NO_NATIVE_GESTURES) +#if 0 /* Used to be included in Qt4 for Q_WS_WIN */ && !defined(QT_NO_NATIVE_GESTURES) #include "qwinnativepangesturerecognizer_win_p.h" #endif @@ -100,7 +100,7 @@ QGestureManager::QGestureManager(QObject *parent) registerGestureRecognizer(new QSwipeGestureRecognizer); registerGestureRecognizer(new QTapGestureRecognizer); #endif -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) +#if 0 // Used to be included in Qt4 for Q_WS_WIN #if !defined(QT_NO_NATIVE_GESTURES) if (QApplicationPrivate::HasTouchSupport) registerGestureRecognizer(new QWinNativePanGestureRecognizer); diff --git a/src/widgets/kernel/qt_widgets_pch.h b/src/widgets/kernel/qt_widgets_pch.h index f30202d89e..924a68d62e 100644 --- a/src/widgets/kernel/qt_widgets_pch.h +++ b/src/widgets/kernel/qt_widgets_pch.h @@ -50,7 +50,7 @@ #include <qtwidgetsglobal.h> -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN # define _POSIX_ # include <limits.h> # undef _POSIX_ diff --git a/src/widgets/kernel/qtooltip.cpp b/src/widgets/kernel/qtooltip.cpp index 78929d8cd5..a92dc2cbf7 100644 --- a/src/widgets/kernel/qtooltip.cpp +++ b/src/widgets/kernel/qtooltip.cpp @@ -36,7 +36,7 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC # include <private/qcore_mac_p.h> #endif @@ -56,7 +56,7 @@ #include <private/qstylesheetstyle_p.h> #ifndef QT_NO_TOOLTIP -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC # include <private/qcore_mac_p.h> #include <private/qt_cocoa_helpers_mac_p.h> #endif @@ -284,7 +284,7 @@ void QTipLabel::timerEvent(QTimerEvent *e) || e->timerId() == expireTimer.timerId()){ hideTimer.stop(); expireTimer.stop(); -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) && !defined(QT_NO_EFFECTS) +#if 0 /* Used to be included in Qt4 for Q_WS_MAC */ && !defined(QT_NO_EFFECTS) if (QApplication::isEffectEnabled(Qt::UI_FadeTooltip)){ // Fade out tip on mac (makes it invisible). // The tip will not be deleted until a new tip is shown. @@ -304,7 +304,7 @@ void QTipLabel::timerEvent(QTimerEvent *e) bool QTipLabel::eventFilter(QObject *o, QEvent *e) { switch (e->type()) { -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC case QEvent::KeyPress: case QEvent::KeyRelease: { int key = static_cast<QKeyEvent *>(e)->key(); @@ -386,7 +386,7 @@ void QTipLabel::placeTip(const QPoint &pos, QWidget *w) #endif //QT_NO_STYLE_STYLESHEET -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // When in full screen mode, there is no Dock nor Menu so we can use // the whole screen for displaying the tooltip. However when not in // full screen mode we need to save space for the dock, so we use @@ -403,7 +403,7 @@ void QTipLabel::placeTip(const QPoint &pos, QWidget *w) QPoint p = pos; p += QPoint(2, -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN 21 #else 16 @@ -492,7 +492,7 @@ void QToolTip::showText(const QPoint &pos, const QString &text, QWidget *w, cons } if (!text.isEmpty()){ // no tip can be reused, create new tip: -#ifndef Q_DEAD_CODE_FROM_QT4_WIN +#if 1 // Used to be excluded in Qt4 for Q_WS_WIN new QTipLabel(text, w, msecDisplayTime); // sets QTipLabel::instance to itself #else // On windows, we can't use the widget as parent otherwise the window will be @@ -504,7 +504,7 @@ void QToolTip::showText(const QPoint &pos, const QString &text, QWidget *w, cons QTipLabel::instance->setObjectName(QLatin1String("qtooltip_label")); -#if !defined(QT_NO_EFFECTS) && !defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if !defined(QT_NO_EFFECTS) && !0 /* Used to be included in Qt4 for Q_WS_MAC */ if (QApplication::isEffectEnabled(Qt::UI_FadeTooltip)) qFadeEffect(QTipLabel::instance); else if (QApplication::isEffectEnabled(Qt::UI_AnimateTooltip)) diff --git a/src/widgets/kernel/qwhatsthis.cpp b/src/widgets/kernel/qwhatsthis.cpp index 32fe5f5e64..6061af5f38 100644 --- a/src/widgets/kernel/qwhatsthis.cpp +++ b/src/widgets/kernel/qwhatsthis.cpp @@ -570,7 +570,7 @@ void QWhatsThisPrivate::say(QWidget * widget, const QString &text, int x, int y) // make a fresh widget, and set it up QWhatsThat *whatsThat = new QWhatsThat( text, -#if defined(Q_DEAD_CODE_FROM_QT4_X11) && !defined(QT_NO_CURSOR) +#if 0 /* Used to be included in Qt4 for Q_WS_X11 */ && !defined(QT_NO_CURSOR) QApplication::desktop()->screen(widget ? widget->x11Info().screen() : QCursor::x11Screen()), #else 0, @@ -583,11 +583,11 @@ void QWhatsThisPrivate::say(QWidget * widget, const QString &text, int x, int y) int scr = (widget ? QApplication::desktop()->screenNumber(widget) : -#if defined(Q_DEAD_CODE_FROM_QT4_X11) && !defined(QT_NO_CURSOR) +#if 0 /* Used to be included in Qt4 for Q_WS_X11 */ && !defined(QT_NO_CURSOR) QCursor::x11Screen() #else QApplication::desktop()->screenNumber(QPoint(x,y)) -#endif // Q_DEAD_CODE_FROM_QT4_X11 +#endif ); QRect screen = QApplication::desktop()->screenGeometry(scr); diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 51e1ef9aaf..dc04bfb632 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -59,7 +59,7 @@ #ifndef QT_NO_ACCESSIBILITY # include "qaccessible.h" #endif -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC # include "qt_mac_p.h" # include "qt_cocoa_helpers_mac_p.h" # include "qmainwindow.h" @@ -85,7 +85,7 @@ #include <private/qgraphicseffect_p.h> #include <qbackingstore.h> #include <private/qwidgetbackingstore_p.h> -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC # include <private/qpaintengine_mac_p.h> #endif #include <private/qpaintengine_raster_p.h> @@ -118,7 +118,7 @@ QT_BEGIN_NAMESPACE static bool qt_enable_backingstore = true; -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 // for compatibility with Qt 4.0 Q_WIDGETS_EXPORT void qt_x11_set_global_double_buffer(bool enable) { @@ -126,7 +126,7 @@ Q_WIDGETS_EXPORT void qt_x11_set_global_double_buffer(bool enable) } #endif -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC bool qt_mac_clearDirtyOnWidgetInsideDrawWidget = false; #endif @@ -141,7 +141,7 @@ static inline bool hasBackingStoreSupport() return true; } -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC # define QT_NO_PAINT_DEBUG #endif @@ -288,13 +288,13 @@ QWidgetPrivate::QWidgetPrivate(int version) #if defined(Q_OS_WIN) , noPaintOnScreen(0) #endif -#if defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 // Used to be included in Qt4 for Q_WS_X11 , picture(0) -#elif defined(Q_DEAD_CODE_FROM_QT4_WIN) +#elif 0 // Used to be included in Qt4 for Q_WS_WIN #ifndef QT_NO_GESTURES , nativeGesturePanEnabled(0) #endif -#elif defined(Q_DEAD_CODE_FROM_QT4_MAC) +#elif 0 // Used to be included in Qt4 for Q_WS_MAC , needWindowChange(0) , window_event(0) , qd_hd(0) @@ -317,7 +317,7 @@ QWidgetPrivate::QWidgetPrivate(int version) isWidget = true; memset(high_attributes, 0, sizeof(high_attributes)); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC drawRectOriginalAdded = false; originalDrawMethod = true; changeMethods = false; @@ -326,7 +326,7 @@ QWidgetPrivate::QWidgetPrivate(int version) toolbar_ancestor = 0; flushRequested = false; touchEventsEnabled = false; -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif #ifdef QWIDGET_EXTRA_DEBUG static int count = 0; qDebug() << "widgets" << ++count; @@ -809,6 +809,10 @@ void QWidget::setAutoFillBackground(bool enabled) parentWidget(), window(), setParent(), winId(), find(), metric(). + \row \li Context menu \li + contextMenuPolicy, contextMenuEvent(), + customContextMenuRequested(), actions() + \row \li Interactive help \li setToolTip(), setWhatsThis() @@ -1087,7 +1091,7 @@ void QWidgetPrivate::adjustFlags(Qt::WindowFlags &flags, QWidget *w) // Only enable this on non-Mac platforms. Since the old way of doing this would // interpret WindowSystemMenuHint as a close button and we can't change that behavior // we can't just add this in. -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC if ((flags & (Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint | Qt::WindowContextHelpButtonHint)) # ifdef Q_OS_WIN && type != Qt::Dialog // QTBUG-2027, allow for menu-less dialogs. @@ -1147,7 +1151,7 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) } #endif -#if defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 // Used to be included in Qt4 for Q_WS_X11 if (desktopWidget) { // make sure the widget is created on the same screen as the // programmer specified desktop widget @@ -1181,7 +1185,7 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) mustHaveWindowHandle = 1; q->setAttribute(Qt::WA_NativeWindow); } -//#ifdef Q_DEAD_CODE_FROM_QT4_MAC +//#if 0 // Used to be included in Qt4 for Q_WS_MAC // q->setAttribute(Qt::WA_NativeWindow); //#endif @@ -1206,9 +1210,9 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) setOpaque(q->isWindow() && background.style() != Qt::NoBrush && background.isOpaque()); } data.fnt = QFont(data.fnt, q); -#if defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 // Used to be included in Qt4 for Q_WS_X11 data.fnt.x11SetScreen(xinfo.screen()); -#endif // Q_DEAD_CODE_FROM_QT4_X11 +#endif q->setAttribute(Qt::WA_PendingMoveEvent); q->setAttribute(Qt::WA_PendingResizeEvent); @@ -1225,7 +1229,7 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) extraPaintEngine = 0; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // If we add a child to the unified toolbar, we have to redirect the painting. if (parentWidget && parentWidget->d_func() && parentWidget->d_func()->isInUnifiedToolbar) { if (parentWidget->d_func()->unifiedSurface) { @@ -1233,7 +1237,7 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) parentWidget->d_func()->unifiedSurface->recursiveRedirect(toolbar, toolbar, toolbar->d_func()->toolbar_offset); } } -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif } @@ -1323,14 +1327,14 @@ void QWidget::create(WId window, bool initializeWindow, bool destroyOldWindow) << "Alien?" << !testAttribute(Qt::WA_NativeWindow); #endif -#if defined (Q_DEAD_CODE_FROM_QT4_WIN) && !defined(QT_NO_DRAGANDDROP) +#if 0 /* Used to be included in Qt4 for Q_WS_WIN */ && !defined(QT_NO_DRAGANDDROP) // Unregister the dropsite (if already registered) before we // re-create the widget with a native window. if (testAttribute(Qt::WA_WState_Created) && !internalWinId() && testAttribute(Qt::WA_NativeWindow) && d->extra && d->extra->dropTarget) { d->registerDropSite(false); } -#endif // defined (Q_DEAD_CODE_FROM_QT4_WIN) && !defined(QT_NO_DRAGANDDROP) +#endif d->updateIsOpaque(); @@ -1630,7 +1634,7 @@ QWidget::~QWidget() } } -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(Q_DEAD_CODE_FROM_QT4_X11)|| defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 0 /* Used to be included in Qt4 for Q_WS_WIN */ || 0 /* Used to be included in Qt4 for Q_WS_X11 */|| 0 /* Used to be included in Qt4 for Q_WS_MAC */ else if (!internalWinId() && isVisible()) { qApp->d_func()->sendSyntheticEnterLeave(this); } @@ -1677,7 +1681,7 @@ QWidget::~QWidget() d->blockSig = blocked; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // QCocoaView holds a pointer back to this widget. Clear it now // to make sure it's not followed later on. The lifetime of the // QCocoaView might exceed the lifetime of this widget in cases @@ -1728,7 +1732,7 @@ void QWidgetPrivate::setWinId(WId id) // set widget identifier const WId oldWinId = data.winid; data.winid = id; -#if defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 // Used to be included in Qt4 for Q_WS_X11 hd = id; // X11: hd == ident #endif if (mapper && id && !userDesktopWidget) { @@ -1764,9 +1768,9 @@ void QWidgetPrivate::createTLExtra() x->window = 0; x->shareContext = 0; x->initialScreenIndex = -1; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC x->wasMaximized = false; -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif #ifdef QWIDGET_EXTRA_DEBUG static int count = 0; qDebug() << "tlextra" << ++count; @@ -2191,10 +2195,10 @@ void QWidgetPrivate::subtractOpaqueSiblings(QRegion &sourceRegion, bool *hasDirt if (disableSubtractOpaqueSiblings || q->isWindow()) return; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (q->d_func()->isInUnifiedToolbar) return; -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif QRect clipBoundingRect; bool dirtyClipBoundingRect = true; @@ -2328,7 +2332,7 @@ void QWidgetPrivate::updateIsOpaque() #endif //QT_NO_GRAPHICSEFFECT Q_Q(QWidget); -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 if (q->testAttribute(Qt::WA_X11OpenGLOverlay)) { setOpaque(false); return; @@ -2387,7 +2391,7 @@ static inline void fillRegion(QPainter *painter, const QRegion &rgn, const QBrus Q_ASSERT(painter); if (brush.style() == Qt::TexturePattern) { -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // Optimize pattern filling on mac by using HITheme directly // when filling with the standard widget background. // Defined in qmacstyle_mac.cpp @@ -2399,7 +2403,7 @@ static inline void fillRegion(QPainter *painter, const QRegion &rgn, const QBrus painter->setClipRegion(rgn); painter->drawTiledPixmap(rect, brush.texture(), rect.topLeft()); } -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif } else if (brush.gradient() && brush.gradient()->coordinateMode() == QGradient::ObjectBoundingMode) { @@ -2470,7 +2474,7 @@ void QWidgetPrivate::paintBackground(QPainter *painter, const QRegion &rgn, int visible widgets. */ -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC extern QPointer<QWidget> qt_button_down; #else extern QWidget *qt_button_down; @@ -2750,7 +2754,7 @@ void QWidget::setStyle(QStyle *style) } void QWidgetPrivate::setStyle_helper(QStyle *newStyle, bool propagate, bool -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC metalHack #endif ) @@ -2761,7 +2765,7 @@ void QWidgetPrivate::setStyle_helper(QStyle *newStyle, bool propagate, bool QPointer<QStyle> origStyle; #endif -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // the metalhack boolean allows Qt/Mac to do a proper re-polish depending // on how the Qt::WA_MacBrushedMetal attribute is set. It is only ever // set when changing that attribute and passes the widget's CURRENT style. @@ -2781,12 +2785,12 @@ void QWidgetPrivate::setStyle_helper(QStyle *newStyle, bool propagate, bool if (q->windowType() != Qt::Desktop) { if (polished) { oldStyle->unpolish(q); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (metalHack) macUpdateMetalAttribute(); #endif q->style()->polish(q); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC } else if (metalHack) { macUpdateMetalAttribute(); #endif @@ -3151,7 +3155,7 @@ bool QWidget::isFullScreen() const */ void QWidget::showFullScreen() { -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // If the unified toolbar is enabled, we have to disable it before going fullscreen. QMainWindow *mainWindow = qobject_cast<QMainWindow*>(this); if (mainWindow && mainWindow->unifiedTitleAndToolBarOnMac()) { @@ -3159,7 +3163,7 @@ void QWidget::showFullScreen() QMainWindowLayout *mainLayout = qobject_cast<QMainWindowLayout*>(mainWindow->layout()); mainLayout->activateUnifiedToolbarAfterFullScreen = true; } -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif ensurePolished(); setWindowState((windowState() & ~(Qt::WindowMinimized | Qt::WindowMaximized)) @@ -3187,7 +3191,7 @@ void QWidget::showMaximized() setWindowState((windowState() & ~(Qt::WindowMinimized | Qt::WindowFullScreen)) | Qt::WindowMaximized); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // If the unified toolbar was enabled before going fullscreen, we have to enable it back. QMainWindow *mainWindow = qobject_cast<QMainWindow*>(this); if (mainWindow) @@ -3198,7 +3202,7 @@ void QWidget::showMaximized() mainLayout->activateUnifiedToolbarAfterFullScreen = false; } } -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif setVisible(true); } @@ -3216,7 +3220,7 @@ void QWidget::showNormal() setWindowState(windowState() & ~(Qt::WindowMinimized | Qt::WindowMaximized | Qt::WindowFullScreen)); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // If the unified toolbar was enabled before going fullscreen, we have to enable it back. QMainWindow *mainWindow = qobject_cast<QMainWindow*>(this); if (mainWindow) @@ -3227,7 +3231,7 @@ void QWidget::showNormal() mainLayout->activateUnifiedToolbarAfterFullScreen = false; } } -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif setVisible(true); } @@ -3443,7 +3447,7 @@ void QWidgetPrivate::setEnabled_helper(bool enable) if (w && !w->testAttribute(attribute)) w->d_func()->setEnabled_helper(enable); } -#if defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 // Used to be included in Qt4 for Q_WS_X11 if (q->testAttribute(Qt::WA_SetCursor) || q->isWindow()) { // enforce the windows behavior of clearing the cursor on // disabled widgets @@ -3457,7 +3461,7 @@ void QWidgetPrivate::setEnabled_helper(bool enable) qt_qpa_set_cursor(q, false); } #endif -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 0 // Used to be included in Qt4 for Q_WS_MAC setEnabled_helper_sys(enable); #endif #ifndef QT_NO_IM @@ -4561,7 +4565,7 @@ const QPalette &QWidget::palette() const ) { data->pal.setCurrentColorGroup(QPalette::Active); } else { -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC extern bool qt_mac_can_clickThrough(const QWidget *); //qwidget_mac.cpp if (qt_mac_can_clickThrough(this)) data->pal.setCurrentColorGroup(QPalette::Active); @@ -4819,7 +4823,7 @@ void QWidgetPrivate::updateFont(const QFont &font) #endif data.fnt = QFont(font, q); -#if defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 // Used to be included in Qt4 for Q_WS_X11 // make sure the font set on this widget is associated with the correct screen data.fnt.x11SetScreen(xinfo.screen()); #endif @@ -4992,7 +4996,7 @@ void QWidget::setCursor(const QCursor &cursor) { Q_D(QWidget); // On Mac we must set the cursor even if it is the ArrowCursor. -#if !defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC if (cursor.shape() != Qt::ArrowCursor || (d->extra && d->extra->curs)) #endif @@ -5424,7 +5428,7 @@ void QWidgetPrivate::render_helper(QPainter *painter, const QPoint &targetOffset Q_ASSERT(!toBePainted.isEmpty()); Q_Q(QWidget); -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC const QTransform originalTransform = painter->worldTransform(); const bool useDeviceCoordinates = originalTransform.isScaling(); if (!useDeviceCoordinates) { @@ -5451,7 +5455,7 @@ void QWidgetPrivate::render_helper(QPainter *painter, const QPoint &targetOffset if (restore) painter->setRenderHints(QPainter::SmoothPixmapTransform, false); -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC } else { // Render via a pixmap in device coordinates (to avoid pixmap scaling). QTransform transform = originalTransform; @@ -5560,7 +5564,7 @@ void QWidgetPrivate::drawWidget(QPaintDevice *pdev, const QRegion &rgn, const QP if (paintEngine) { setRedirected(pdev, -offset); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // (Alien support) Special case for Mac when redirecting: If the paint device // is of the Widget type we need to set WA_WState_InPaintEvent since painting // outside the paint event is not supported on QWidgets. The attributeis @@ -5646,7 +5650,7 @@ void QWidgetPrivate::drawWidget(QPaintDevice *pdev, const QRegion &rgn, const QP //restore if (paintEngine) { -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (pdev->devType() == QInternal::Widget) static_cast<QWidget *>(pdev)->setAttribute(Qt::WA_WState_InPaintEvent, false); #endif @@ -5720,7 +5724,7 @@ void QWidgetPrivate::render(QPaintDevice *target, const QPoint &targetOffset, if (paintRegion.isEmpty()) return; -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC QPainter *oldSharedPainter = inRenderWithPainter ? sharedPainter() : 0; // Use the target's shared painter if set (typically set when doing @@ -6501,7 +6505,7 @@ void QWidget::setFocus(Qt::FocusReason reason) f = f->d_func()->extra->focus_proxy; if (QApplication::focusWidget() == f -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) +#if 0 // Used to be included in Qt4 for Q_WS_WIN && GetFocus() == f->internalWinId() #endif ) @@ -6686,7 +6690,7 @@ void QWidget::clearFocus() if (hasFocus()) { // Update proxy state QApplicationPrivate::setFocusWidget(0, Qt::OtherFocusReason); -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) +#if 0 // Used to be included in Qt4 for Q_WS_WIN if (!(windowType() == Qt::Popup) && GetFocus() == internalWinId()) SetFocus(0); else @@ -7318,7 +7322,7 @@ void QWidgetPrivate::setGeometry_sys(int x, int y, int w, int h, bool isMove) */ QByteArray QWidget::saveGeometry() const { -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // We check if the window was maximized during this invocation. If so, we need to record the // starting position as 0,0. Q_D(const QWidget); @@ -7329,7 +7333,7 @@ QByteArray QWidget::saveGeometry() const newFramePosition.moveTo(0, 0); newNormalPosition.moveTo(0, 0); } -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif QByteArray array; QDataStream stream(&array, QIODevice::WriteOnly); stream.setVersion(QDataStream::Qt_4_0); @@ -7343,13 +7347,13 @@ QByteArray QWidget::saveGeometry() const stream << magicNumber << majorVersion << minorVersion -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC << newFramePosition << newNormalPosition #else << frameGeometry() << normalGeometry() -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif << qint32(screenNumber) << quint8(windowState() & Qt::WindowMaximized) << quint8(windowState() & Qt::WindowFullScreen) @@ -7457,7 +7461,7 @@ bool QWidget::restoreGeometry(const QByteArray &geometry) // - The title bar is outside the available geometry. // - (Mac only) The window is higher than the available geometry. It must // be possible to bring the size grip on screen by moving the window. -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC restoredFrameGeometry.setHeight(qMin(restoredFrameGeometry.height(), availableGeometry.height())); restoredNormalGeometry.setHeight(qMin(restoredNormalGeometry.height(), availableGeometry.height() - frameHeight)); #endif @@ -7506,7 +7510,7 @@ bool QWidget::restoreGeometry(const QByteArray &geometry) d_func()->topData()->normalGeometry = restoredNormalGeometry; } else { QPoint offset; -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 if (isFullScreen()) offset = d_func()->topData()->fullScreenOffset; #endif @@ -7904,7 +7908,7 @@ void QWidgetPrivate::show_helper() // On Windows, show the popup now so that our own focus handling // stores the correct old focus widget even if it's stolen in the // showevent -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 0 /* Used to be included in Qt4 for Q_WS_WIN */ || 0 /* Used to be included in Qt4 for Q_WS_MAC */ if (!isEmbedded && q->windowType() == Qt::Popup) qApp->d_func()->openPopup(q); #endif @@ -8033,7 +8037,7 @@ void QWidgetPrivate::hide_helper() if (!isEmbedded && (q->windowType() == Qt::Popup)) qApp->d_func()->closePopup(q); -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) +#if 0 // Used to be included in Qt4 for Q_WS_WIN if (q->isWindow() && !(q->windowType() == Qt::Popup) && q->parentWidget() && !q->parentWidget()->isHidden() && q->isActiveWindow()) q->parentWidget()->activateWindow(); // Activate parent @@ -8217,7 +8221,7 @@ void QWidget::setVisible(bool visible) } else { // hide if (testAttribute(Qt::WA_WState_ExplicitShowHide) && testAttribute(Qt::WA_WState_Hidden)) return; -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) +#if 0 // Used to be included in Qt4 for Q_WS_WIN // reset WS_DISABLED style in a Blocked window if(isWindow() && testAttribute(Qt::WA_WState_Created) && QApplicationPrivate::isBlockedByModal(this)) @@ -8302,7 +8306,7 @@ void QWidgetPrivate::hideChildren(bool spontaneous) QWidget *widget = qobject_cast<QWidget*>(childList.at(i)); if (!widget || widget->isWindow() || widget->testAttribute(Qt::WA_WState_Hidden)) continue; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // Before doing anything we need to make sure that we don't leave anything in a non-consistent state. // When hiding a widget we need to make sure that no mouse_down events are active, because // the mouse_up event will never be received by a hidden widget or one of its descendants. @@ -8318,7 +8322,7 @@ void QWidgetPrivate::hideChildren(bool spontaneous) // supposed to trigger because it is not visible. if(widget == qt_button_down) qt_button_down = 0; -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif if (spontaneous) widget->setAttribute(Qt::WA_Mapped, false); else @@ -8553,7 +8557,7 @@ QSize QWidgetPrivate::adjustedSize() const s.setWidth(qMax(s.width(), 200)); if (exp & Qt::Vertical) s.setHeight(qMax(s.height(), 100)); -#if defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 // Used to be included in Qt4 for Q_WS_X11 QRect screen = QApplication::desktop()->screenGeometry(q->x11Info().screen()); #else // all others QRect screen = QApplication::desktop()->screenGeometry(q->pos()); @@ -8682,7 +8686,7 @@ bool QWidget::isAncestorOf(const QWidget *child) const return false; } -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) +#if 0 // Used to be included in Qt4 for Q_WS_WIN inline void setDisabledStyle(QWidget *w, bool setStyle) { // set/reset WS_DISABLED style. @@ -9114,7 +9118,7 @@ bool QWidget::event(QEvent *event) } } } -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) +#if 0 // Used to be included in Qt4 for Q_WS_WIN setDisabledStyle(this, (event->type() == QEvent::WindowBlocked)); #endif break; @@ -9141,7 +9145,7 @@ bool QWidget::event(QEvent *event) case QEvent::EmbeddingControl: d->topData()->frameStrut.setCoords(0 ,0, 0, 0); data->fstrut_dirty = false; -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 /* Used to be included in Qt4 for Q_WS_WIN */ || 0 /* Used to be included in Qt4 for Q_WS_X11 */ d->topData()->embedded = 1; #endif break; @@ -9166,7 +9170,7 @@ bool QWidget::event(QEvent *event) } break; } -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC case QEvent::MacGLWindowChange: d->needWindowChange = false; break; @@ -9280,7 +9284,7 @@ void QWidget::changeEvent(QEvent * event) case QEvent::MacSizeChange: updateGeometry(); break; -#elif defined Q_DEAD_CODE_FROM_QT4_MAC +#elif 0 // Used to be included in Qt4 for Q_WS_MAC case QEvent::ToolTipChange: case QEvent::MouseTrackingChange: qt_mac_update_mouseTracking(this); @@ -10561,7 +10565,7 @@ void QWidget::setParent(QWidget *parent, Qt::WindowFlags f) // (f & Qt::MSWindowsOwnDC) clause (which is set on QGLWidgets on all // platforms). if (newParent -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(QT_OPENGL_ES) +#if 0 /* Used to be included in Qt4 for Q_WS_WIN */ || defined(QT_OPENGL_ES) || (f & Qt::MSWindowsOwnDC) #endif ) { @@ -10581,7 +10585,7 @@ void QWidget::setParent(QWidget *parent, Qt::WindowFlags f) } //### already hidden above ---> must probably do something smart on the mac -// #ifdef Q_DEAD_CODE_FROM_QT4_MAC +// #if 0 // Used to be included in Qt4 for Q_WS_MAC // extern bool qt_mac_is_macdrawer(const QWidget *); //qwidget_mac.cpp // if(!qt_mac_is_macdrawer(q)) //special case // q->setAttribute(Qt::WA_WState_Hidden); @@ -11109,7 +11113,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) d->receiveChildEvents = !on; break; case Qt::WA_MacBrushedMetal: -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC d->setStyle_helper(style(), false, true); // Make sure things get unpolished/polished correctly. // fall through since changing the metal attribute affects the opaque size grip. case Qt::WA_MacOpaqueSizeGrip: @@ -11126,7 +11130,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) break; #endif case Qt::WA_MacAlwaysShowToolWindow: -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC d->macUpdateHideOnSuspend(); #endif break; @@ -11203,7 +11207,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) } case Qt::WA_PaintOnScreen: d->updateIsOpaque(); -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(Q_DEAD_CODE_FROM_QT4_X11) || defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 0 /* Used to be included in Qt4 for Q_WS_WIN */ || 0 /* Used to be included in Qt4 for Q_WS_X11 */ || 0 /* Used to be included in Qt4 for Q_WS_MAC */ // Recreate the widget if it's already created as an alien widget and // WA_PaintOnScreen is enabled. Paint on screen widgets must have win id. // So must their children. @@ -11223,7 +11227,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) d->updateSystemBackground(); break; case Qt::WA_TransparentForMouseEvents: -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC d->macUpdateIgnoreMouseEvents(); #endif break; @@ -11242,7 +11246,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) d->resolveFont(); d->resolveLocale(); break; -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 case Qt::WA_NoX11EventCompression: if (!d->extra) d->createExtra(); @@ -11299,7 +11303,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) break; case Qt::WA_AcceptTouchEvents: -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 0 /* Used to be included in Qt4 for Q_WS_WIN */ || 0 /* Used to be included in Qt4 for Q_WS_MAC */ if (on) d->registerTouchWindow(); #endif @@ -11918,7 +11922,7 @@ QRect QWidgetPrivate::frameStrut() const } if (data.fstrut_dirty -#ifndef Q_DEAD_CODE_FROM_QT4_WIN +#if 1 // Used to be excluded in Qt4 for Q_WS_WIN // ### Fix properly for 4.3 && q->isVisible() #endif @@ -12854,7 +12858,7 @@ void QWidget::setMask(const QRegion &newMask) d->extra->mask = newMask; d->extra->hasMask = !newMask.isEmpty(); -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC if (!testAttribute(Qt::WA_WState_Created)) return; #endif @@ -13050,45 +13054,6 @@ QDebug operator<<(QDebug debug, const QWidget *widget) } #endif // !QT_NO_DEBUG_STREAM -/*! \fn Qt::HANDLE QWidget::macCGHandle() const - \internal - - Returns the CoreGraphics handle of the widget. Use of this function is not portable. - This function will return 0 if no painter context can be established, or if the handle - could not be created. - - \warning This function is only available on \macos. -*/ -/*! \fn Qt::HANDLE QWidget::macQDHandle() const - \internal - - Returns the QuickDraw handle of the widget. Use of this function is not portable. - This function will return 0 if QuickDraw is not supported, or if the handle could - not be created. - - \warning This function is only available on \macos. -*/ -/*! \fn const QX11Info &QWidget::x11Info() const - \internal - - Returns information about the configuration of the X display used to display - the widget. - - \warning This function is only available on X11. -*/ - -/*! \fn Qt::HANDLE QWidget::x11PictureHandle() const - \internal - - Returns the X11 picture handle of the widget for XRender - support. Use of this function is not portable. This function will - return 0 if XRender support is not compiled into Qt, if the - XRender extension is not supported on the X11 display, or if the - handle could not be created. - - \warning This function is only available on X11. - -*/ QT_END_NAMESPACE #include "moc_qwidget.cpp" diff --git a/src/widgets/kernel/qwidget.h b/src/widgets/kernel/qwidget.h index bca89fe2c5..5edf2c62da 100644 --- a/src/widgets/kernel/qwidget.h +++ b/src/widgets/kernel/qwidget.h @@ -570,12 +570,12 @@ public: inline QWidget *childAt(int x, int y) const; QWidget *childAt(const QPoint &p) const; -#if defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 // Used to be included in Qt4 for Q_WS_X11 const QX11Info &x11Info() const; Qt::HANDLE x11PictureHandle() const; #endif -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 0 // Used to be included in Qt4 for Q_WS_MAC Qt::HANDLE macQDHandle() const; Qt::HANDLE macCGHandle() const; #endif diff --git a/src/widgets/kernel/qwidget_p.h b/src/widgets/kernel/qwidget_p.h index 3e57f9de41..68e063c25a 100644 --- a/src/widgets/kernel/qwidget_p.h +++ b/src/widgets/kernel/qwidget_p.h @@ -189,7 +189,7 @@ struct QTLWExtra { uint embedded : 1; // *************************** Platform specific values (bit fields first) ********** -#if defined(Q_DEAD_CODE_FROM_QT4_X11) // <----------------------------------------------------------- X11 +#if 0 /* Used to be included in Qt4 for Q_WS_X11 */ // <----------------------------------------------------------- X11 uint spont_unmapped: 1; // window was spontaneously unmapped uint dnd : 1; // DND properties installed uint validWMState : 1; // is WM_STATE valid? @@ -203,11 +203,11 @@ struct QTLWExtra { qint32 newCounterValueHi; quint32 newCounterValueLo; #endif -#elif defined(Q_DEAD_CODE_FROM_QT4_WIN) // <--------------------------------------------------------- WIN +#elif 0 /* Used to be included in Qt4 for Q_WS_WIN */ // <--------------------------------------------------------- WIN uint hotkeyRegistered: 1; // Hot key from the STARTUPINFO has been registered. HICON winIconBig; // internal big Windows icon HICON winIconSmall; // internal small Windows icon -#elif defined(Q_DEAD_CODE_FROM_QT4_MAC) // <--------------------------------------------------------- MAC +#elif 0 /* Used to be included in Qt4 for Q_WS_MAC */ // <--------------------------------------------------------- MAC uint resizer : 4; uint isSetGeometry : 1; uint isMove : 1; @@ -262,15 +262,15 @@ struct QWExtra { uint hasWindowContainer : 1; // *************************** Platform specific values (bit fields first) ********** -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) // <----------------------------------------------------------- WIN +#if 0 /* Used to be included in Qt4 for Q_WS_WIN */ // <----------------------------------------------------------- WIN #ifndef QT_NO_DRAGANDDROP QOleDropTarget *dropTarget; // drop target QList<QPointer<QWidget> > oleDropWidgets; #endif -#elif defined(Q_DEAD_CODE_FROM_QT4_X11) // <--------------------------------------------------------- X11 +#elif 0 /* Used to be included in Qt4 for Q_WS_X11 */ // <--------------------------------------------------------- X11 uint compress_events : 1; WId xDndProxy; // XDND forwarding to embedded windows -#elif defined(Q_DEAD_CODE_FROM_QT4_MAC) // <------------------------------------------------------ MAC +#elif 0 /* Used to be included in Qt4 for Q_WS_MAC */ // <------------------------------------------------------ MAC // Cocoa Mask stuff QImage maskBits; CGImageRef imageMask; @@ -402,9 +402,6 @@ public: const QRegion &rgn, const QPoint &offset, int flags, QPainter *sharedPainter, QWidgetBackingStore *backingStore); - - QPainter *beginSharedPainter(); - bool endSharedPainter(); #ifndef QT_NO_GRAPHICSVIEW static QGraphicsProxyWidget * nearestGraphicsProxyWidget(const QWidget *origin); #endif @@ -761,7 +758,7 @@ public: #if defined(Q_OS_WIN) uint noPaintOnScreen : 1; // see qwidget.cpp ::paintEngine() #endif -#if defined(Q_DEAD_CODE_FROM_QT4_X11) // <----------------------------------------------------------- X11 +#if 0 /* Used to be included in Qt4 for Q_WS_X11 */ // <----------------------------------------------------------- X11 Qt::HANDLE picture; static QWidget *mouseGrabber; static QWidget *keyboardGrabber; @@ -773,7 +770,7 @@ public: void updateX11AcceptFocus(); QPoint mapToGlobal(const QPoint &pos) const; QPoint mapFromGlobal(const QPoint &pos) const; -#elif defined(Q_DEAD_CODE_FROM_QT4_WIN) // <--------------------------------------------------------- WIN +#elif 0 /* Used to be included in Qt4 for Q_WS_WIN */ // <--------------------------------------------------------- WIN #ifndef QT_NO_GESTURES uint nativeGesturePanEnabled : 1; #endif @@ -789,7 +786,7 @@ public: void winSetupGestures(); #elif defined(Q_OS_MAC) // <--------------------------------------------------------- MAC void macUpdateSizeAttribute(); -#elif defined(Q_DEAD_CODE_FROM_QT4_MAC) // <--------------------------------------------------------- MAC (old stuff) +#elif 0 /* Used to be included in Qt4 for Q_WS_MAC */ // <--------------------------------------------------------- MAC (old stuff) // This is new stuff uint needWindowChange : 1; diff --git a/src/widgets/kernel/qwidgetbackingstore.cpp b/src/widgets/kernel/qwidgetbackingstore.cpp index 81fbe49a43..910704498c 100644 --- a/src/widgets/kernel/qwidgetbackingstore.cpp +++ b/src/widgets/kernel/qwidgetbackingstore.cpp @@ -112,6 +112,7 @@ void QWidgetBackingStore::qt_flush(QWidget *widget, const QRegion ®ion, QBack if (widget != tlw) offset += widget->mapTo(tlw, QPoint()); + QRegion effectiveRegion = region; #ifndef QT_NO_OPENGL const bool compositionWasActive = widget->d_func()->renderToTextureComposeActive; if (!widgetTextures) { @@ -125,6 +126,11 @@ void QWidgetBackingStore::qt_flush(QWidget *widget, const QRegion ®ion, QBack } else { widget->d_func()->renderToTextureComposeActive = true; } + // When changing the composition status, make sure the dirty region covers + // the entire widget. Just having e.g. the shown/hidden render-to-texture + // widget's area marked as dirty is incorrect when changing flush paths. + if (compositionWasActive != widget->d_func()->renderToTextureComposeActive) + effectiveRegion = widget->rect(); // re-test since we may have been forced to this path via the dummy texture list above if (widgetTextures) { @@ -136,12 +142,12 @@ void QWidgetBackingStore::qt_flush(QWidget *widget, const QRegion ®ion, QBack const bool translucentBackground = widget->testAttribute(Qt::WA_TranslucentBackground); // Use the tlw's context, not widget's. The difference is important with native child // widgets where tlw != widget. - backingStore->handle()->composeAndFlush(widget->windowHandle(), region, offset, widgetTextures, + backingStore->handle()->composeAndFlush(widget->windowHandle(), effectiveRegion, offset, widgetTextures, tlw->d_func()->shareContext(), translucentBackground); widget->window()->d_func()->sendComposeStatus(widget->window(), true); } else #endif - backingStore->flush(region, widget->windowHandle(), offset); + backingStore->flush(effectiveRegion, widget->windowHandle(), offset); } #ifndef QT_NO_PAINT_DEBUG @@ -699,7 +705,7 @@ void QWidgetBackingStore::markDirtyOnScreen(const QRegion ®ion, QWidget *widg if (!widget || widget->d_func()->paintOnScreen() || region.isEmpty()) return; -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (!widget->testAttribute(Qt::WA_WState_InPaintEvent)) dirtyOnScreen += region.translated(topLevelOffset); return; @@ -1624,7 +1630,7 @@ void QWidgetPrivate::repaint_sys(const QRegion &rgn) && (usesDoubleBufferedGLContext || q->autoFillBackground()); QRegion toBePainted(noPartialUpdateSupport ? q->rect() : rgn); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // No difference between update() and repaint() on the Mac. update_sys(toBePainted); return; diff --git a/src/widgets/kernel/qwidgetwindow.cpp b/src/widgets/kernel/qwidgetwindow.cpp index f3fbe13763..3e15b6977a 100644 --- a/src/widgets/kernel/qwidgetwindow.cpp +++ b/src/widgets/kernel/qwidgetwindow.cpp @@ -535,7 +535,7 @@ void QWidgetWindow::handleMouseEvent(QMouseEvent *event) // activate window of the widget under mouse pointer if (!w->isActiveWindow()) { w->activateWindow(); - w->raise(); + w->window()->raise(); } QWindow *win = w->windowHandle(); diff --git a/src/widgets/styles/qcommonstyle.cpp b/src/widgets/styles/qcommonstyle.cpp index 140f0ad2f3..690c811140 100644 --- a/src/widgets/styles/qcommonstyle.cpp +++ b/src/widgets/styles/qcommonstyle.cpp @@ -5246,6 +5246,8 @@ static QPixmap cachedPixmapFromXPM(const char * const *xpm) return result; } +static inline QPixmap titleBarMenuCachedPixmapFromXPM() { return cachedPixmapFromXPM(qt_menu_xpm); } + #ifndef QT_NO_IMAGEFORMAT_PNG static inline QString clearText16IconPath() { @@ -5590,7 +5592,7 @@ QPixmap QCommonStyle::standardPixmap(StandardPixmap sp, const QStyleOption *opti #ifndef QT_NO_IMAGEFORMAT_XPM switch (sp) { case SP_TitleBarMenuButton: - return cachedPixmapFromXPM(qt_menu_xpm); + return titleBarMenuCachedPixmapFromXPM(); case SP_TitleBarShadeButton: return cachedPixmapFromXPM(qt_shade_xpm); case SP_TitleBarUnshadeButton: @@ -6130,6 +6132,12 @@ QIcon QCommonStyle::standardIcon(StandardPixmap standardIcon, const QStyleOption case SP_MediaVolumeMuted: icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-volume-muted-16.png"), QSize(16, 16)); break; + case SP_TitleBarMenuButton: +# ifndef QT_NO_IMAGEFORMAT_XPM + icon.addPixmap(titleBarMenuCachedPixmapFromXPM()); +# endif + icon.addFile(QLatin1String(":/qt-project.org/qmessagebox/images/qtlogo-64.png")); + break; #endif // QT_NO_IMAGEFORMAT_PNG default: icon.addPixmap(proxy()->standardPixmap(standardIcon, option, widget)); diff --git a/src/widgets/styles/qfusionstyle.cpp b/src/widgets/styles/qfusionstyle.cpp index 06c3101643..3473ec7fb0 100644 --- a/src/widgets/styles/qfusionstyle.cpp +++ b/src/widgets/styles/qfusionstyle.cpp @@ -1080,8 +1080,8 @@ void QFusionStyle::drawControl(ControlElement element, const QStyleOption *optio painter->setPen(innerLine); painter->drawRoundedRect(option->rect.adjusted(1, 1, -2, -2), 1, 1); painter->restore(); - return; } + break; case CE_SizeGrip: painter->save(); { diff --git a/src/widgets/styles/qmacstyle_mac.mm b/src/widgets/styles/qmacstyle_mac.mm index 6fbc7c9eea..2d1de790c4 100644 --- a/src/widgets/styles/qmacstyle_mac.mm +++ b/src/widgets/styles/qmacstyle_mac.mm @@ -950,6 +950,8 @@ static QSize qt_aqua_get_known_size(QStyle::ContentsType ct, const QWidget *widg #if defined(QMAC_QAQUASTYLE_SIZE_CONSTRAIN) || defined(DEBUG_SIZE_CONSTRAINT) static QAquaWidgetSize qt_aqua_guess_size(const QWidget *widg, QSize large, QSize small, QSize mini) { + Q_UNUSED(widg); + if (large == QSize(-1, -1)) { if (small != QSize(-1, -1)) return QAquaSizeSmall; @@ -965,7 +967,7 @@ static QAquaWidgetSize qt_aqua_guess_size(const QWidget *widg, QSize large, QSiz } #ifndef QT_NO_MAINWINDOW - if (qobject_cast<QDockWidget *>(widg->window()) || qEnvironmentVariableIsSet("QWIDGET_ALL_SMALL")) { + if (qEnvironmentVariableIsSet("QWIDGET_ALL_SMALL")) { //if (small.width() != -1 || small.height() != -1) return QAquaSizeSmall; } else if (qEnvironmentVariableIsSet("QWIDGET_ALL_MINI")) { @@ -4214,10 +4216,6 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter bool verticalTabs = ttd == kThemeTabWest || ttd == kThemeTabEast; bool selected = (myTab.state & QStyle::State_Selected); - if (selected && !myTab.documentMode - && (!usingYosemiteOrLater || myTab.state & State_Active)) - myTab.palette.setColor(QPalette::WindowText, Qt::white); - // Check to see if we use have the same as the system font // (QComboMenuItem is internal and should never be seen by the // outside world, unless they read the source, in which case, it's diff --git a/src/widgets/styles/qmacstyle_mac_p.h b/src/widgets/styles/qmacstyle_mac_p.h index fdc22794b4..459784c538 100644 --- a/src/widgets/styles/qmacstyle_mac_p.h +++ b/src/widgets/styles/qmacstyle_mac_p.h @@ -134,7 +134,7 @@ private: friend bool qt_mac_buttonIsRenderedFlat(const QPushButton *pushButton, const QStyleOptionButton *option); }; -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif QT_END_NAMESPACE diff --git a/src/widgets/styles/qpixmapstyle.cpp b/src/widgets/styles/qpixmapstyle.cpp index ee5fd704dc..b51860045d 100644 --- a/src/widgets/styles/qpixmapstyle.cpp +++ b/src/widgets/styles/qpixmapstyle.cpp @@ -108,7 +108,7 @@ QPixmapStyle::~QPixmapStyle() void QPixmapStyle::polish(QApplication *application) { QCommonStyle::polish(application); -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) +#if 0 // Used to be included in Qt4 for Q_WS_WIN QApplication::setEffectEnabled(Qt::UI_AnimateCombo, false); #endif } @@ -170,7 +170,7 @@ void QPixmapStyle::polish(QWidget *widget) frame->setContentsMargins(pix.margins.left(), desc.margins.top(), pix.margins.right(), desc.margins.bottom()); frame->setAttribute(Qt::WA_TranslucentBackground); -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN // FramelessWindowHint is needed on windows to make // WA_TranslucentBackground work properly frame->setWindowFlags(widget->windowFlags() | Qt::FramelessWindowHint); diff --git a/src/widgets/styles/qstylefactory.cpp b/src/widgets/styles/qstylefactory.cpp index bb849c148f..09cccff4e8 100644 --- a/src/widgets/styles/qstylefactory.cpp +++ b/src/widgets/styles/qstylefactory.cpp @@ -131,7 +131,7 @@ QStyle *QStyleFactory::create(const QString& key) #ifndef QT_NO_STYLE_MAC if (style.startsWith(QLatin1String("macintosh"))) { ret = new QMacStyle; -# ifdef Q_DEAD_CODE_FROM_QT4_MAC +# if 0 // Used to be included in Qt4 for Q_WS_MAC if (style == QLatin1String("macintosh")) style += QLatin1String(" (aqua)"); # endif @@ -184,7 +184,7 @@ QStringList QStyleFactory::keys() #endif #ifndef QT_NO_STYLE_MAC QString mstyle = QLatin1String("Macintosh"); -# ifdef Q_DEAD_CODE_FROM_QT4_MAC +# if 0 // Used to be included in Qt4 for Q_WS_MAC mstyle += QLatin1String(" (aqua)"); # endif if (!list.contains(mstyle)) diff --git a/src/widgets/styles/qstyleoption.cpp b/src/widgets/styles/qstyleoption.cpp index 71cf2fb267..83739655af 100644 --- a/src/widgets/styles/qstyleoption.cpp +++ b/src/widgets/styles/qstyleoption.cpp @@ -199,7 +199,7 @@ void QStyleOption::init(const QWidget *widget) state |= QStyle::State_Active; if (widget->isWindow()) state |= QStyle::State_Window; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC extern bool qt_mac_can_clickThrough(const QWidget *w); //qwidget_mac.cpp if (!(state & QStyle::State_Active) && !qt_mac_can_clickThrough(widget)) state &= ~QStyle::State_Enabled; diff --git a/src/widgets/styles/qstylesheetstyle.cpp b/src/widgets/styles/qstylesheetstyle.cpp index b214dae154..8e77ae0e44 100644 --- a/src/widgets/styles/qstylesheetstyle.cpp +++ b/src/widgets/styles/qstylesheetstyle.cpp @@ -5045,7 +5045,7 @@ QSize QStyleSheetStyle::sizeFromContents(ContentsType ct, const QStyleOption *op sz = csz + QSize(vertical ? 0 : spaceForIcon, vertical ? spaceForIcon : 0); return subRule.boxSize(subRule.adjustSize(sz)); } -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (baseStyle()->inherits("QMacStyle")) { //adjust the size after the call to the style because the mac style ignore the size arguments anyway. //this might cause the (max-){width,height} property to include the native style border while they should not. diff --git a/src/widgets/styles/qwindowsxpstyle.cpp b/src/widgets/styles/qwindowsxpstyle.cpp index 9d764d2a41..4ce359a7c4 100644 --- a/src/widgets/styles/qwindowsxpstyle.cpp +++ b/src/widgets/styles/qwindowsxpstyle.cpp @@ -699,7 +699,7 @@ bool QWindowsXPStylePrivate::drawBackground(XPThemeData &themeData) bool translucentToplevel = false; const QPaintDevice *paintDevice = painter->device(); - const qreal aditionalDevicePixelRatio = themeData.widget ? themeData.widget->devicePixelRatio() : 1; + const qreal aditionalDevicePixelRatio = themeData.widget ? themeData.widget->devicePixelRatioF() : qreal(1); if (paintDevice->devType() == QInternal::Widget) { const QWidget *window = static_cast<const QWidget *>(paintDevice)->window(); translucentToplevel = window->testAttribute(Qt::WA_TranslucentBackground); @@ -727,28 +727,28 @@ bool QWindowsXPStylePrivate::drawBackground(XPThemeData &themeData) const HDC dc = canDrawDirectly ? hdcForWidgetBackingStore(themeData.widget) : HDC(0); const bool result = dc - ? drawBackgroundDirectly(dc, themeData, qRound(aditionalDevicePixelRatio)) - : drawBackgroundThruNativeBuffer(themeData, qRound(aditionalDevicePixelRatio)); + ? drawBackgroundDirectly(dc, themeData, aditionalDevicePixelRatio) + : drawBackgroundThruNativeBuffer(themeData, aditionalDevicePixelRatio); painter->restore(); return result; } -static inline QRect scaleRect(const QRect &r, int factor) +static inline QRectF scaleRect(const QRectF &r, qreal factor) { return r.isValid() && factor > 1 - ? QRect(r.topLeft() * factor, r.size() * factor) + ? QRectF(r.topLeft() * factor, r.size() * factor) : r; } -static QRegion scaleRegion(const QRegion ®ion, int factor) +static QRegion scaleRegion(const QRegion ®ion, qreal factor) { - if (region.isEmpty() || factor == 1) + if (region.isEmpty() || qFuzzyCompare(factor, qreal(1))) return region; if (region.rectCount() == 1) - return QRegion(scaleRect(region.boundingRect(), factor)); + return QRegion(scaleRect(QRectF(region.boundingRect()), factor).toRect()); QRegion result; foreach (const QRect &rect, region.rects()) - result += QRect(rect.topLeft() * factor, rect.size() * factor); + result += QRectF(QPointF(rect.topLeft()) * factor, QSizeF(rect.size() * factor)).toRect(); return result; } @@ -757,13 +757,12 @@ static QRegion scaleRegion(const QRegion ®ion, int factor) Do not use this if you need to perform other transformations on the resulting data. */ -bool QWindowsXPStylePrivate::drawBackgroundDirectly(HDC dc, XPThemeData &themeData, int additionalDevicePixelRatio) +bool QWindowsXPStylePrivate::drawBackgroundDirectly(HDC dc, XPThemeData &themeData, qreal additionalDevicePixelRatio) { QPainter *painter = themeData.painter; - QPoint redirectionDelta(int(painter->deviceMatrix().dx()), - int(painter->deviceMatrix().dy())); - QRect area = scaleRect(themeData.rect, additionalDevicePixelRatio).translated(redirectionDelta); + const QPointF redirectionDelta(painter->deviceMatrix().dx(), painter->deviceMatrix().dy()); + const QRect area = scaleRect(QRectF(themeData.rect), additionalDevicePixelRatio).translated(redirectionDelta).toRect(); QRegion sysRgn = painter->paintEngine()->systemClip(); if (sysRgn.isEmpty()) @@ -771,7 +770,7 @@ bool QWindowsXPStylePrivate::drawBackgroundDirectly(HDC dc, XPThemeData &themeDa else sysRgn &= area; if (painter->hasClipping()) - sysRgn &= scaleRegion(painter->clipRegion(), additionalDevicePixelRatio).translated(redirectionDelta); + sysRgn &= scaleRegion(painter->clipRegion(), additionalDevicePixelRatio).translated(redirectionDelta.toPoint()); HRGN hrgn = qt_hrgn_from_qregion(sysRgn); SelectClipRgn(dc, hrgn); @@ -806,15 +805,16 @@ bool QWindowsXPStylePrivate::drawBackgroundDirectly(HDC dc, XPThemeData &themeDa engine). */ bool QWindowsXPStylePrivate::drawBackgroundThruNativeBuffer(XPThemeData &themeData, - int additionalDevicePixelRatio) + qreal additionalDevicePixelRatio) { QPainter *painter = themeData.painter; - QRect rect = scaleRect(themeData.rect, additionalDevicePixelRatio); + QRectF rectF = scaleRect(QRectF(themeData.rect), additionalDevicePixelRatio); if ((themeData.rotate + 90) % 180 == 0) { // Catch 90,270,etc.. degree flips. - rect = QRect(0, 0, rect.height(), rect.width()); + rectF = QRectF(0, 0, rectF.height(), rectF.width()); } - rect.moveTo(0,0); + rectF.moveTo(0, 0); + QRect rect = rectF.toRect(); int partId = themeData.partId; int stateId = themeData.stateId; int w = rect.width(); diff --git a/src/widgets/styles/qwindowsxpstyle_p_p.h b/src/widgets/styles/qwindowsxpstyle_p_p.h index 7cbccdaf67..d6702c8803 100644 --- a/src/widgets/styles/qwindowsxpstyle_p_p.h +++ b/src/widgets/styles/qwindowsxpstyle_p_p.h @@ -240,8 +240,8 @@ public: void setTransparency(QWidget *widget, XPThemeData &themeData); bool drawBackground(XPThemeData &themeData); - bool drawBackgroundThruNativeBuffer(XPThemeData &themeData, int aditionalDevicePixelRatio); - bool drawBackgroundDirectly(HDC dc, XPThemeData &themeData, int aditionalDevicePixelRatio); + bool drawBackgroundThruNativeBuffer(XPThemeData &themeData, qreal aditionalDevicePixelRatio); + bool drawBackgroundDirectly(HDC dc, XPThemeData &themeData, qreal aditionalDevicePixelRatio); bool hasAlphaChannel(const QRect &rect); bool fixAlphaChannel(const QRect &rect); diff --git a/src/widgets/util/qflickgesture.cpp b/src/widgets/util/qflickgesture.cpp index 57db9ff7fc..10e92e04e1 100644 --- a/src/widgets/util/qflickgesture.cpp +++ b/src/widgets/util/qflickgesture.cpp @@ -460,7 +460,7 @@ QGestureRecognizer::Result QFlickGestureRecognizer::recognize(QGesture *state, } break; -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 0 // Used to be included in Qt4 for Q_WS_MAC // the only way to distinguish between real mouse wheels and wheel // events generated by the native 2 finger swipe gesture is to listen // for these events (according to Apple's Cocoa Event-Handling Guide) diff --git a/src/widgets/util/qscroller.cpp b/src/widgets/util/qscroller.cpp index 9973940c16..a348327c92 100644 --- a/src/widgets/util/qscroller.cpp +++ b/src/widgets/util/qscroller.cpp @@ -1011,12 +1011,12 @@ bool QScroller::handleInput(Input input, const QPointF &position, qint64 timesta return false; } -#if !defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC // the Mac version is implemented in qscroller_mac.mm QPointF QScrollerPrivate::realDpi(int screen) const { -# if defined(Q_DEAD_CODE_FROM_QT4_X11) && !defined(QT_NO_XRANDR) +# if 0 /* Used to be included in Qt4 for Q_WS_X11 */ && !defined(QT_NO_XRANDR) if (X11 && X11->use_xrandr && X11->ptrXRRSizes && X11->ptrXRRRootToScreen) { int nsizes = 0; // QDesktopWidget is based on Xinerama screens, which do not always @@ -1042,7 +1042,7 @@ QPointF QScrollerPrivate::realDpi(int screen) const return QPointF(w->physicalDpiX(), w->physicalDpiY()); } -#endif // !Q_DEAD_CODE_FROM_QT4_MAC +#endif /*! \internal diff --git a/src/widgets/util/qscroller_mac.mm b/src/widgets/util/qscroller_mac.mm index 31316f5518..6dbb483089 100644 --- a/src/widgets/util/qscroller_mac.mm +++ b/src/widgets/util/qscroller_mac.mm @@ -39,7 +39,7 @@ #include <QtCore/qglobal.h> -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC #import <AppKit/AppKit.h> diff --git a/src/widgets/util/qscrollerproperties.cpp b/src/widgets/util/qscrollerproperties.cpp index 35e1be15db..c26fba2cd3 100644 --- a/src/widgets/util/qscrollerproperties.cpp +++ b/src/widgets/util/qscrollerproperties.cpp @@ -40,7 +40,7 @@ #include <QPointer> #include <QObject> #include <QtCore/qmath.h> -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN # include <QLibrary> #endif @@ -73,7 +73,7 @@ QScrollerPropertiesPrivate *QScrollerPropertiesPrivate::defaults() spp.overshootDragDistanceFactor = qreal(1); spp.overshootScrollDistanceFactor = qreal(0.5); spp.overshootScrollTime = qreal(0.7); -# ifdef Q_DEAD_CODE_FROM_QT4_WIN +# if 0 // Used to be included in Qt4 for Q_WS_WIN if (QLibrary::resolve(QLatin1String("UxTheme"), "BeginPanningFeedback")) spp.overshootScrollTime = qreal(0.35); # endif diff --git a/src/widgets/util/qsystemtrayicon.cpp b/src/widgets/util/qsystemtrayicon.cpp index e44207301b..64daad87ae 100644 --- a/src/widgets/util/qsystemtrayicon.cpp +++ b/src/widgets/util/qsystemtrayicon.cpp @@ -586,7 +586,7 @@ void QBalloonTip::balloon(const QPoint& pos, int msecs, bool showArrow) } QPainterPath path; -#if defined(QT_NO_XSHAPE) && defined(Q_DEAD_CODE_FROM_QT4_X11) +#if defined(QT_NO_XSHAPE) && 0 /* Used to be included in Qt4 for Q_WS_X11 */ // XShape is required for setting the mask, so we just // draw an ugly square when its not available path.moveTo(0, 0); diff --git a/src/widgets/util/qundostack.cpp b/src/widgets/util/qundostack.cpp index 18f85ca505..59d517e77b 100644 --- a/src/widgets/util/qundostack.cpp +++ b/src/widgets/util/qundostack.cpp @@ -633,7 +633,7 @@ void QUndoStack::push(QUndoCommand *cmd) commands, it emits the signal cleanChanged(). This signal is also emitted when the stack leaves the clean state. - \sa isClean(), cleanIndex() + \sa isClean(), resetClean(), cleanIndex() */ void QUndoStack::setClean() @@ -648,6 +648,30 @@ void QUndoStack::setClean() } /*! + \since 5.8 + + Leaves the clean state and emits cleanChanged() if the stack was clean. + This method resets the clean index to -1. + + This is typically called in the following cases, when a document has been: + \li created basing on some template and has not been saved, + so no filename has been associated with the document yet. + \li restored from a backup file. + \li changed outside of the editor and the user did not reload it. + + \sa isClean(), setClean(), cleanIndex() +*/ + +void QUndoStack::resetClean() +{ + Q_D(QUndoStack); + const bool was_clean = isClean(); + d->clean_index = -1; + if (was_clean) + emit cleanChanged(false); +} + +/*! If the stack is in the clean state, returns \c true; otherwise returns \c false. \sa setClean(), cleanIndex() @@ -668,6 +692,7 @@ bool QUndoStack::isClean() const some commands are undone, then a new command is pushed. Since push() deletes all the undone commands before pushing the new command, the stack can't return to the clean state again. In this case, this function returns -1. + The -1 may also be returned after an explicit call to resetClean(). \sa isClean(), setClean() */ diff --git a/src/widgets/util/qundostack.h b/src/widgets/util/qundostack.h index f4db78300b..ca918b0618 100644 --- a/src/widgets/util/qundostack.h +++ b/src/widgets/util/qundostack.h @@ -128,6 +128,7 @@ public: public Q_SLOTS: void setClean(); + void resetClean(); void setIndex(int idx); void undo(); void redo(); diff --git a/src/widgets/widgets/qabstractscrollarea.cpp b/src/widgets/widgets/qabstractscrollarea.cpp index 2587a7a03b..5b31e4467f 100644 --- a/src/widgets/widgets/qabstractscrollarea.cpp +++ b/src/widgets/widgets/qabstractscrollarea.cpp @@ -60,7 +60,7 @@ #include <private/qapplication_p.h> -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC #include <private/qt_mac_p.h> #include <private/qt_cocoa_helpers_mac_p.h> #endif @@ -168,7 +168,7 @@ QAbstractScrollAreaPrivate::QAbstractScrollAreaPrivate() shownOnce(false), inResize(false), sizeAdjustPolicy(QAbstractScrollArea::AdjustIgnored), viewport(0), cornerWidget(0), left(0), top(0), right(0), bottom(0), xoffset(0), yoffset(0), viewportFilter(0) -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN , singleFingerPanEnabled(false) #endif { @@ -321,7 +321,7 @@ void QAbstractScrollAreaPrivate::init() #endif } -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN void QAbstractScrollAreaPrivate::setSingleFingerPanEnabled(bool on) { singleFingerPanEnabled = on; @@ -329,7 +329,7 @@ void QAbstractScrollAreaPrivate::setSingleFingerPanEnabled(bool on) if (dd) dd->winSetupGestures(); } -#endif // Q_DEAD_CODE_FROM_QT4_WIN +#endif void QAbstractScrollAreaPrivate::layoutChildren() { @@ -350,7 +350,7 @@ void QAbstractScrollAreaPrivate::layoutChildren() const int hscrollOverlap = hbar->style()->pixelMetric(QStyle::PM_ScrollView_ScrollBarOverlap, &opt, hbar); const int vscrollOverlap = vbar->style()->pixelMetric(QStyle::PM_ScrollView_ScrollBarOverlap, &opt, vbar); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC QWidget * const window = q->window(); // Use small scroll bars for tool windows, to match the native size grip. @@ -393,7 +393,7 @@ void QAbstractScrollAreaPrivate::layoutChildren() // If the scroll bars are at the very right and bottom of the window we // move their positions to be aligned with the size grip. -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // Check if a native sizegrip is present. bool hasMacReverseSizeGrip = false; bool hasMacSizeGrip = false; @@ -446,7 +446,7 @@ void QAbstractScrollAreaPrivate::layoutChildren() if (hasCornerWidget && ((needv && vscrollOverlap == 0) || (needh && hscrollOverlap == 0))) cornerOffset = extPoint; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // Also move the scroll bars if they are covered by the native Mac size grip. if (hasMacSizeGrip) cornerOffset = extPoint; @@ -463,7 +463,7 @@ void QAbstractScrollAreaPrivate::layoutChildren() else cornerPaintingRect = QRect(); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (hasMacReverseSizeGrip) reverseCornerPaintingRect = QRect(controlsRect.bottomRight() + QPoint(1, 1) - extPoint, extSize); else @@ -488,7 +488,7 @@ void QAbstractScrollAreaPrivate::layoutChildren() if (needh) { QRect horizontalScrollBarRect(QPoint(controlsRect.left() + vHeaderRight, cornerPoint.y()), QPoint(cornerPoint.x() - 1, controlsRect.bottom())); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (hasMacReverseSizeGrip) horizontalScrollBarRect.adjust(vsbExt, 0, 0, 0); #endif @@ -602,7 +602,7 @@ void QAbstractScrollArea::setViewport(QWidget *widget) d->viewport->setParent(this); d->viewport->setFocusProxy(this); d->viewport->installEventFilter(d->viewportFilter.data()); -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC #ifndef QT_NO_GESTURES d->viewport->grabGesture(Qt::PanGesture); #endif @@ -1029,7 +1029,7 @@ bool QAbstractScrollArea::event(QEvent *e) QPainter p(this); style()->drawPrimitive(QStyle::PE_PanelScrollAreaCorner, &option, &p, this); } -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (d->reverseCornerPaintingRect.isValid()) { option.rect = d->reverseCornerPaintingRect; QPainter p(this); @@ -1108,7 +1108,7 @@ bool QAbstractScrollArea::event(QEvent *e) hBar->setValue(se->contentPos().x()); vBar->setValue(se->contentPos().y()); -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN typedef BOOL (*PtrBeginPanningFeedback)(HWND); typedef BOOL (*PtrUpdatePanningFeedback)(HWND, LONG, LONG, BOOL); typedef BOOL (*PtrEndPanningFeedback)(HWND, BOOL); @@ -1532,13 +1532,13 @@ void QAbstractScrollAreaPrivate::_q_vslide(int y) void QAbstractScrollAreaPrivate::_q_showOrHideScrollBars() { layoutChildren(); -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN // Need to re-subscribe to gestures as the content changes to make sure we // enable/disable panning when needed. QWidgetPrivate *dd = static_cast<QWidgetPrivate *>(QObjectPrivate::get(viewport)); if (dd) dd->winSetupGestures(); -#endif // Q_DEAD_CODE_FROM_QT4_WIN +#endif } QPoint QAbstractScrollAreaPrivate::contentsOffset() const diff --git a/src/widgets/widgets/qabstractscrollarea_p.h b/src/widgets/widgets/qabstractscrollarea_p.h index 600c834c29..a3af77b11b 100644 --- a/src/widgets/widgets/qabstractscrollarea_p.h +++ b/src/widgets/widgets/qabstractscrollarea_p.h @@ -85,7 +85,7 @@ public: QWidget *viewport; QWidget *cornerWidget; QRect cornerPaintingRect; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC QRect reverseCornerPaintingRect; #endif int left, top, right, bottom; // viewport margin @@ -112,7 +112,7 @@ public: { return q_func()->viewportEvent(event); } QScopedPointer<QObject> viewportFilter; -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN bool singleFingerPanEnabled; void setSingleFingerPanEnabled(bool on = true); #endif diff --git a/src/widgets/widgets/qabstractslider.cpp b/src/widgets/widgets/qabstractslider.cpp index e85d82edb8..cc6a407bf8 100644 --- a/src/widgets/widgets/qabstractslider.cpp +++ b/src/widgets/widgets/qabstractslider.cpp @@ -721,7 +721,7 @@ bool QAbstractSliderPrivate::scrollByDelta(Qt::Orientation orientation, Qt::Keyb offset_accumulated = 0; offset_accumulated += stepsToScrollF; -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC // Don't scroll more than one page in any case: stepsToScroll = qBound(-pageStep, int(offset_accumulated), pageStep); #else diff --git a/src/widgets/widgets/qcalendarwidget.cpp b/src/widgets/widgets/qcalendarwidget.cpp index caeabb660b..b0ded70c4a 100644 --- a/src/widgets/widgets/qcalendarwidget.cpp +++ b/src/widgets/widgets/qcalendarwidget.cpp @@ -213,10 +213,9 @@ QString QCalendarDayValidator::text(const QDate &date, int repeat) const return formatNumber(date.day(), 2); } else if (repeat == 3) { return m_locale.dayName(date.dayOfWeek(), QLocale::ShortFormat); - } else if (repeat >= 4) { + } else /* repeat >= 4 */ { return m_locale.dayName(date.dayOfWeek(), QLocale::LongFormat); } - return QString(); } ////////////////////////////////// @@ -1579,7 +1578,7 @@ protected: { Q_UNUSED(e) -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC QStyleOptionToolButton opt; initStyleOption(&opt); @@ -3030,6 +3029,7 @@ bool QCalendarWidget::event(QEvent *event) switch (event->type()) { case QEvent::LayoutDirectionChange: d->updateButtonIcons(); + break; case QEvent::LocaleChange: d->m_model->setFirstColumnDay(locale().firstDayOfWeek()); d->cachedSizeHint = QSize(); diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp index 693d5f9e93..52e7962109 100644 --- a/src/widgets/widgets/qcombobox.cpp +++ b/src/widgets/widgets/qcombobox.cpp @@ -66,7 +66,7 @@ #include <private/qabstractitemmodel_p.h> #include <private/qabstractscrollarea_p.h> #include <qdebug.h> -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) && !defined(QT_NO_EFFECTS) && !defined(QT_NO_STYLE_MAC) +#if 0 /* Used to be included in Qt4 for Q_WS_MAC */ && !defined(QT_NO_EFFECTS) && !defined(QT_NO_STYLE_MAC) #include <private/qcore_mac_p.h> #include <private/qmacstyle_mac_p.h> #include <private/qt_cocoa_helpers_mac_p.h> @@ -415,7 +415,7 @@ void QComboBoxPrivateContainer::leaveEvent(QEvent *) { // On Mac using the Mac style we want to clear the selection // when the mouse moves outside the popup. -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC QStyleOptionComboBox opt = comboStyleOption(); if (combo->style()->styleHint(QStyle::SH_ComboBox_Popup, &opt, combo)) view->clearSelection(); @@ -1684,6 +1684,9 @@ void QComboBox::setIconSize(const QSize &size) By default, this property is \c false. The effect of editing depends on the insert policy. + \note When disabling the \a editable state, the validator and + completer are removed. + \sa InsertPolicy */ bool QComboBox::isEditable() const @@ -1837,6 +1840,8 @@ QLineEdit *QComboBox::lineEdit() const \fn void QComboBox::setValidator(const QValidator *validator) Sets the \a validator to use instead of the current validator. + + \note The validator is removed when the editable property becomes \c false. */ void QComboBox::setValidator(const QValidator *v) @@ -1870,6 +1875,8 @@ const QValidator *QComboBox::validator() const By default, for an editable combo box, a QCompleter that performs case insensitive inline completion is automatically created. + + \note The completer is removed when the \a editable property becomes \c false. */ void QComboBox::setCompleter(QCompleter *c) { @@ -3126,6 +3133,7 @@ void QComboBox::keyPressEvent(QKeyEvent *e) case Qt::Key_Up: if (e->modifiers() & Qt::ControlModifier) break; // pass to line edit for auto completion + // fall through case Qt::Key_PageUp: #ifdef QT_KEYPAD_NAVIGATION if (QApplication::keypadNavigationEnabled()) @@ -3168,6 +3176,7 @@ void QComboBox::keyPressEvent(QKeyEvent *e) showPopup(); return; } + break; case Qt::Key_Enter: case Qt::Key_Return: case Qt::Key_Escape: @@ -3212,6 +3221,7 @@ void QComboBox::keyPressEvent(QKeyEvent *e) switch (move) { case MoveFirst: newIndex = -1; + // fall through case MoveDown: newIndex++; while (newIndex < rowCount && !(d->model->index(newIndex, d->modelColumn, d->root).flags() & Qt::ItemIsEnabled)) @@ -3219,6 +3229,7 @@ void QComboBox::keyPressEvent(QKeyEvent *e) break; case MoveLast: newIndex = rowCount; + // fall through case MoveUp: newIndex--; while ((newIndex >= 0) && !(d->model->flags(d->model->index(newIndex,d->modelColumn,d->root)) & Qt::ItemIsEnabled)) diff --git a/src/widgets/widgets/qdatetimeedit.cpp b/src/widgets/widgets/qdatetimeedit.cpp index 54094de765..c5eab55a53 100644 --- a/src/widgets/widgets/qdatetimeedit.cpp +++ b/src/widgets/widgets/qdatetimeedit.cpp @@ -1125,7 +1125,7 @@ void QDateTimeEdit::keyPressEvent(QKeyEvent *event) select = false; break; } -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC else #ifdef QT_KEYPAD_NAVIGATION if (!QApplication::keypadNavigationEnabled()) @@ -2350,7 +2350,9 @@ void QDateTimeEditPrivate::interpret(EmitPolicy ep) const QValidator::State state = q->validate(tmp, pos); if (state != QValidator::Acceptable && correctionMode == QAbstractSpinBox::CorrectToPreviousValue - && (state == QValidator::Invalid || !(fieldInfo(currentSectionIndex) & AllowPartial))) { + && (state == QValidator::Invalid + || currentSectionIndex < 0 + || !(fieldInfo(currentSectionIndex) & AllowPartial))) { setValue(value, ep); updateTimeSpec(); } else { diff --git a/src/widgets/widgets/qdialogbuttonbox.cpp b/src/widgets/widgets/qdialogbuttonbox.cpp index 657eda3c68..23158cf82f 100644 --- a/src/widgets/widgets/qdialogbuttonbox.cpp +++ b/src/widgets/widgets/qdialogbuttonbox.cpp @@ -411,7 +411,7 @@ QPushButton *QDialogButtonBoxPrivate::createButton(QDialogButtonBox::StandardBut else addButton(button, static_cast<QDialogButtonBox::ButtonRole>(role), doLayout); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // Since mnemonics is off by default on Mac, we add a Cmd-D // shortcut here to e.g. make the "Don't Save" button work nativly: if (sbutton == QDialogButtonBox::Discard) diff --git a/src/widgets/widgets/qdockarealayout.cpp b/src/widgets/widgets/qdockarealayout.cpp index a7e865ff05..63f8172bf6 100644 --- a/src/widgets/widgets/qdockarealayout.cpp +++ b/src/widgets/widgets/qdockarealayout.cpp @@ -1935,7 +1935,7 @@ bool QDockAreaLayoutInfo::restoreState(QDataStream &stream, QList<QDockWidget*> QDockAreaLayoutItem item(new QDockWidgetItem(widget)); if (flags & StateFlagFloating) { bool drawer = false; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC // drawer support +#if 0 // Used to be included in Qt4 for Q_WS_MAC // drawer support extern bool qt_mac_is_macdrawer(const QWidget *); //qwidget_mac.cpp extern bool qt_mac_set_drawer_preferred_edge(QWidget *, Qt::DockWidgetArea); //qwidget_mac.cpp drawer = qt_mac_is_macdrawer(widget); @@ -1950,7 +1950,7 @@ bool QDockAreaLayoutInfo::restoreState(QDataStream &stream, QList<QDockWidget*> int x, y, w, h; stream >> x >> y >> w >> h; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC // drawer support +#if 0 // Used to be included in Qt4 for Q_WS_MAC // drawer support if (drawer) { mainWindow->window()->createWinId(); widget->window()->createWinId(); @@ -2050,7 +2050,7 @@ void QDockAreaLayoutInfo::updateSeparatorWidgets() const } j++; -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC sepWidget->raise(); #endif QRect sepRect = separatorRect(i).adjusted(-2, -2, 2, 2); @@ -3085,7 +3085,7 @@ bool QDockAreaLayout::restoreDockWidget(QDockWidget *dockWidget) dockWidget->d_func()->setWindowState(true, true, r); } dockWidget->setVisible(!placeHolder->hidden); -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 if (placeHolder->window) // gets rid of the X11BypassWindowManager window flag dockWidget->d_func()->setWindowState(true); #endif @@ -3316,7 +3316,7 @@ void QDockAreaLayout::updateSeparatorWidgets() const } j++; -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC sepWidget->raise(); #endif QRect sepRect = separatorRect(i).adjusted(-2, -2, 2, 2); diff --git a/src/widgets/widgets/qdockwidget.cpp b/src/widgets/widgets/qdockwidget.cpp index 5059616870..1df7259aba 100644 --- a/src/widgets/widgets/qdockwidget.cpp +++ b/src/widgets/widgets/qdockwidget.cpp @@ -58,7 +58,7 @@ #include "qdockwidget_p.h" #include "qmainwindowlayout_p.h" -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC #include <private/qapplication_p.h> #include <private/qt_mac_p.h> #include <private/qmacstyle_mac_p.h> @@ -916,7 +916,7 @@ bool QDockWidgetPrivate::mouseMoveEvent(QMouseEvent *event) && (event->pos() - state->pressPos).manhattanLength() > QApplication::startDragDistance()) { startDrag(); -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN grabMouseWhileInWindow(); #else q->grabMouse(); @@ -966,7 +966,7 @@ void QDockWidgetPrivate::nonClientAreaMouseEvent(QMouseEvent *event) QWidget *tl = q->topLevelWidget(); QRect geo = tl->geometry(); QRect titleRect = tl->frameGeometry(); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if ((features & QDockWidget::DockWidgetVerticalTitleBar)) { titleRect.setTop(geo.top()); titleRect.setBottom(geo.bottom()); @@ -1508,7 +1508,7 @@ bool QDockWidget::event(QEvent *event) if (d->mouseMoveEvent(static_cast<QMouseEvent *>(event))) return true; break; -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN case QEvent::Leave: if (d->state != 0 && d->state->dragging && !d->state->nca) { // This is a workaround for loosing the mouse on Vista. diff --git a/src/widgets/widgets/qlineedit.cpp b/src/widgets/widgets/qlineedit.cpp index 2bc715724d..dd5f5325b1 100644 --- a/src/widgets/widgets/qlineedit.cpp +++ b/src/widgets/widgets/qlineedit.cpp @@ -87,7 +87,7 @@ QT_BEGIN_NAMESPACE -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC extern void qt_mac_secure_keyboard(bool); //qapplication_mac.cpp #endif @@ -573,7 +573,7 @@ void QLineEdit::setEchoMode(EchoMode mode) setInputMethodHints(imHints); d->control->setEchoMode(mode); update(); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (hasFocus()) qt_mac_secure_keyboard(mode == Password || mode == NoEcho); #endif @@ -1810,7 +1810,7 @@ void QLineEdit::focusInEvent(QFocusEvent *e) if((!hasSelectedText() && d->control->preeditAreaText().isEmpty()) || style()->styleHint(QStyle::SH_BlinkCursorWhenTextSelected, &opt, this)) d->setCursorVisible(true); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (d->control->echoMode() == Password || d->control->echoMode() == NoEcho) qt_mac_secure_keyboard(true); #endif @@ -1858,7 +1858,7 @@ void QLineEdit::focusOutEvent(QFocusEvent *e) if (hasAcceptableInput() || d->control->fixup()) emit editingFinished(); } -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (d->control->echoMode() == Password || d->control->echoMode() == NoEcho) qt_mac_secure_keyboard(false); #endif diff --git a/src/widgets/widgets/qmainwindow.cpp b/src/widgets/widgets/qmainwindow.cpp index 2477510520..e32e379198 100644 --- a/src/widgets/widgets/qmainwindow.cpp +++ b/src/widgets/widgets/qmainwindow.cpp @@ -61,7 +61,7 @@ #ifdef Q_OS_OSX #include <qpa/qplatformnativeinterface.h> #endif -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC #include <private/qt_mac_p.h> #include <private/qt_cocoa_helpers_mac_p.h> QT_BEGIN_NAMESPACE @@ -80,7 +80,7 @@ public: #ifdef Q_OS_OSX , useUnifiedToolBar(false) #endif -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC , useHIToolBar(false) , activateUnifiedToolbarAfterFullScreen(false) #endif @@ -95,7 +95,7 @@ public: #ifdef Q_OS_OSX bool useUnifiedToolBar; #endif -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC bool useHIToolBar; bool activateUnifiedToolbarAfterFullScreen; #endif @@ -682,8 +682,10 @@ QWidget *QMainWindow::takeCentralWidget() { Q_D(QMainWindow); QWidget *oldcentralwidget = d->layout->centralWidget(); - oldcentralwidget->setParent(0); - d->layout->setCentralWidget(0); + if (oldcentralwidget) { + oldcentralwidget->setParent(0); + d->layout->setCentralWidget(0); + } return oldcentralwidget; } @@ -1110,7 +1112,7 @@ void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget d_func()->layout->removeWidget(dockwidget); // in case it was already in here addDockWidget(area, dockwidget, orientation); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC //drawer support +#if 0 // Used to be included in Qt4 for Q_WS_MAC //drawer support QMacAutoReleasePool pool; extern bool qt_mac_is_macdrawer(const QWidget *); //qwidget_mac.cpp if (qt_mac_is_macdrawer(dockwidget)) { @@ -1514,7 +1516,7 @@ bool QMainWindow::event(QEvent *event) if (!d->explicitIconSize) setIconSize(QSize()); break; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC case QEvent::Show: if (unifiedTitleAndToolBarOnMac()) d->layout->syncUnifiedToolbarVisibility(); @@ -1533,7 +1535,7 @@ bool QMainWindow::event(QEvent *event) } } break; -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif #if !defined(QT_NO_DOCKWIDGET) && !defined(QT_NO_CURSOR) case QEvent::CursorChange: // CursorChange events are triggered as mouse moves to new widgets even @@ -1589,7 +1591,7 @@ void QMainWindow::setUnifiedTitleAndToolBarOnMac(bool set) } #endif -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC Q_D(QMainWindow); if (!isWindow() || d->useHIToolBar == set || QSysInfo::MacintoshVersion < QSysInfo::MV_10_3) return; @@ -1624,7 +1626,7 @@ bool QMainWindow::unifiedTitleAndToolBarOnMac() const #ifdef Q_OS_OSX return d_func()->useUnifiedToolBar; #endif -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC return d_func()->useHIToolBar && !testAttribute(Qt::WA_MacBrushedMetal) && !(windowFlags() & Qt::FramelessWindowHint); #endif return false; diff --git a/src/widgets/widgets/qmainwindowlayout.cpp b/src/widgets/widgets/qmainwindowlayout.cpp index 939453473a..8df197e05c 100644 --- a/src/widgets/widgets/qmainwindowlayout.cpp +++ b/src/widgets/widgets/qmainwindowlayout.cpp @@ -70,7 +70,7 @@ #include <private/qapplication_p.h> #include <private/qlayoutengine_p.h> #include <private/qwidgetresizehandler_p.h> -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC # include <private/qcore_mac_p.h> # include <private/qt_cocoa_helpers_mac_p.h> #endif @@ -1129,11 +1129,11 @@ void QMainWindowLayout::removeToolBar(QToolBar *toolbar) QObject::disconnect(parentWidget(), SIGNAL(toolButtonStyleChanged(Qt::ToolButtonStyle)), toolbar, SLOT(_q_updateToolButtonStyle(Qt::ToolButtonStyle))); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (usesHIToolBar(toolbar)) { removeFromMacToolbar(toolbar); } else -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif { removeWidget(toolbar); } @@ -1148,7 +1148,7 @@ void QMainWindowLayout::addToolBar(Qt::ToolBarArea area, bool) { validateToolBarArea(area); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if ((area == Qt::TopToolBarArea) && layoutState.mainWindow->unifiedTitleAndToolBarOnMac()) { insertIntoMacToolbar(0, toolbar); @@ -1174,11 +1174,11 @@ void QMainWindowLayout::addToolBar(Qt::ToolBarArea area, */ void QMainWindowLayout::insertToolBar(QToolBar *before, QToolBar *toolbar) { -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (usesHIToolBar(before)) { insertIntoMacToolbar(before, toolbar); } else -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif { addChildWidget(toolbar); QLayoutItem * item = layoutState.toolBarAreaLayout.insertToolBar(before, toolbar); @@ -1207,7 +1207,7 @@ Qt::ToolBarArea QMainWindowLayout::toolBarArea(QToolBar *toolbar) const case QInternal::BottomDock: return Qt::BottomToolBarArea; default: break; } -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (pos == QInternal::DockCount) { if (qtoolbarsInUnifiedToolbarList.contains(toolbar)) return Qt::TopToolBarArea; @@ -1230,7 +1230,7 @@ void QMainWindowLayout::getStyleOptionInfo(QStyleOptionToolBar *option, QToolBar void QMainWindowLayout::toggleToolBarsVisible() { bool updateNonUnifiedParts = true; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (layoutState.mainWindow->unifiedTitleAndToolBarOnMac()) { // If we hit this case, someone has pressed the "toolbar button" which will // toggle the unified toolbar visibility, because that's what the user wants. @@ -1876,7 +1876,7 @@ QSize QMainWindowLayout::minimumSize() const const QSize sbMin = statusbar ? statusbar->minimumSize() : QSize(0, 0); minSize = QSize(qMax(sbMin.width(), minSize.width()), sbMin.height() + minSize.height()); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC const QSize storedSize = minSize; int minWidth = 0; foreach (QToolBar *toolbar, qtoolbarsInUnifiedToolbarList) { @@ -2186,7 +2186,7 @@ QMainWindowLayout::QMainWindowLayout(QMainWindow *mainwindow, QLayout *parentLay #endif // QT_NO_DOCKWIDGET , widgetAnimator(this) , pluggingWidget(0) -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC , blockVisiblityCheck(false) #endif { @@ -2213,7 +2213,7 @@ QMainWindowLayout::~QMainWindowLayout() layoutState.deleteAllLayoutItems(); layoutState.deleteCentralWidgetItem(); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC cleanUpMacToolbarItems(); #endif @@ -2581,7 +2581,7 @@ bool QMainWindowLayout::restoreState(QDataStream &stream) // HIToolbar. bool QMainWindowLayout::usesHIToolBar(QToolBar *toolbar) const { -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC Q_UNUSED(toolbar); return false; #else diff --git a/src/widgets/widgets/qmainwindowlayout_p.h b/src/widgets/widgets/qmainwindowlayout_p.h index c06122b9c7..6e8b965431 100644 --- a/src/widgets/widgets/qmainwindowlayout_p.h +++ b/src/widgets/widgets/qmainwindowlayout_p.h @@ -325,7 +325,7 @@ private: #ifndef QT_NO_TABBAR void updateTabBarShapes(); #endif -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC static OSStatus qtmacToolbarDelegate(EventHandlerCallRef, EventRef , void *); static OSStatus qtoolbarInHIToolbarHandler(EventHandlerCallRef inCallRef, EventRef event, void *data); @@ -358,7 +358,7 @@ public: QUnifiedToolbarSurface *unifiedSurface; void updateUnifiedToolbarOffset(); -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif }; #if !defined(QT_NO_DOCKWIDGET) && !defined(QT_NO_DEBUG_STREAM) diff --git a/src/widgets/widgets/qmdiarea.cpp b/src/widgets/widgets/qmdiarea.cpp index 5f3aff5e10..183f1c2848 100644 --- a/src/widgets/widgets/qmdiarea.cpp +++ b/src/widgets/widgets/qmdiarea.cpp @@ -160,7 +160,7 @@ #include <QApplication> #include <QStyle> -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) && !defined(QT_NO_STYLE_MAC) +#if 0 /* Used to be included in Qt4 for Q_WS_MAC */ && !defined(QT_NO_STYLE_MAC) #include <private/qmacstyle_mac_p.h> #endif #include <QChildEvent> @@ -2493,7 +2493,7 @@ bool QMdiArea::event(QEvent *event) { Q_D(QMdiArea); switch (event->type()) { -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN // QWidgetPrivate::hide_helper activates another sub-window when closing a // modal dialog on Windows (see activateWindow() inside the ifdef). case QEvent::WindowUnblocked: @@ -2557,7 +2557,7 @@ bool QMdiArea::eventFilter(QObject *object, QEvent *event) QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event); // Ingore key events without a Ctrl modifier (except for press/release on the modifier itself). -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (!(keyEvent->modifiers() & Qt::MetaModifier) && keyEvent->key() != Qt::Key_Meta) #else if (!(keyEvent->modifiers() & Qt::ControlModifier) && keyEvent->key() != Qt::Key_Control) @@ -2576,7 +2576,7 @@ bool QMdiArea::eventFilter(QObject *object, QEvent *event) // 3) Ctrl-Shift-Tab (Tab, Tab, ...) -> iterate through all windows in the opposite // direction (activatePreviousSubWindow()) switch (keyEvent->key()) { -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC case Qt::Key_Meta: #else case Qt::Key_Control: diff --git a/src/widgets/widgets/qmdisubwindow.cpp b/src/widgets/widgets/qmdisubwindow.cpp index afe87c6af9..2fff2fc729 100644 --- a/src/widgets/widgets/qmdisubwindow.cpp +++ b/src/widgets/widgets/qmdisubwindow.cpp @@ -280,7 +280,7 @@ static inline bool isHoverControl(QStyle::SubControl control) return control != QStyle::SC_None && control != QStyle::SC_TitleBarLabel; } -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) +#if 0 // Used to be included in Qt4 for Q_WS_WIN static inline QRgb colorref2qrgb(COLORREF col) { return qRgb(GetRValue(col),GetGValue(col),GetBValue(col)); @@ -1932,7 +1932,7 @@ QPalette QMdiSubWindowPrivate::desktopPalette() const QPalette newPalette = q->palette(); bool colorsInitialized = false; -#ifdef Q_DEAD_CODE_FROM_QT4_WIN // ask system properties on windows +#if 0 // Used to be included in Qt4 for Q_WS_WIN // ask system properties on windows #ifndef SPI_GETGRADIENTCAPTIONS #define SPI_GETGRADIENTCAPTIONS 0x1008 #endif @@ -1968,7 +1968,7 @@ QPalette QMdiSubWindowPrivate::desktopPalette() const newPalette.color(QPalette::Inactive, QPalette::Highlight)); } } -#endif // Q_DEAD_CODE_FROM_QT4_WIN +#endif if (!colorsInitialized) { newPalette.setColor(QPalette::Active, QPalette::Highlight, newPalette.color(QPalette::Active, QPalette::Highlight)); diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp index d957dda162..36a8a96b79 100644 --- a/src/widgets/widgets/qmenu.cpp +++ b/src/widgets/widgets/qmenu.cpp @@ -153,12 +153,19 @@ void QMenuPrivate::init() scroll->scrollFlags = QMenuPrivate::QMenuScroller::ScrollNone; } - setPlatformMenu(QGuiApplicationPrivate::platformTheme()->createPlatformMenu()); sloppyState.initialize(q); delayState.initialize(q); mousePopupDelay = q->style()->styleHint(QStyle::SH_Menu_SubMenuPopupDelay, 0, q); } +QPlatformMenu *QMenuPrivate::createPlatformMenu() +{ + Q_Q(QMenu); + if (platformMenu.isNull()) + q->setPlatformMenu(QGuiApplicationPrivate::platformTheme()->createPlatformMenu()); + return platformMenu.data(); +} + void QMenuPrivate::setPlatformMenu(QPlatformMenu *menu) { Q_Q(QMenu); @@ -809,6 +816,93 @@ void QMenuPrivate::updateLayoutDirection() } } +void QMenuPrivate::drawScroller(QPainter *painter, QMenuPrivate::ScrollerTearOffItem::Type type, const QRect &rect) +{ + if (!painter || rect.isEmpty()) + return; + + if (!scroll || !(scroll->scrollFlags & (QMenuPrivate::QMenuScroller::ScrollUp + | QMenuPrivate::QMenuScroller::ScrollDown))) + return; + + Q_Q(QMenu); + QStyleOptionMenuItem menuOpt; + menuOpt.initFrom(q); + menuOpt.state = QStyle::State_None; + menuOpt.checkType = QStyleOptionMenuItem::NotCheckable; + menuOpt.maxIconWidth = 0; + menuOpt.tabWidth = 0; + menuOpt.rect = rect; + menuOpt.menuItemType = QStyleOptionMenuItem::Scroller; + menuOpt.state |= QStyle::State_Enabled; + if (type == QMenuPrivate::ScrollerTearOffItem::ScrollDown) + menuOpt.state |= QStyle::State_DownArrow; + + painter->setClipRect(menuOpt.rect); + q->style()->drawControl(QStyle::CE_MenuScroller, &menuOpt, painter, q); +} + +void QMenuPrivate::drawTearOff(QPainter *painter, const QRect &rect) +{ + if (!painter || rect.isEmpty()) + return; + + if (!tearoff) + return; + + Q_Q(QMenu); + QStyleOptionMenuItem menuOpt; + menuOpt.initFrom(q); + menuOpt.state = QStyle::State_None; + menuOpt.checkType = QStyleOptionMenuItem::NotCheckable; + menuOpt.maxIconWidth = 0; + menuOpt.tabWidth = 0; + menuOpt.rect = rect; + menuOpt.menuItemType = QStyleOptionMenuItem::TearOff; + if (tearoffHighlighted) + menuOpt.state |= QStyle::State_Selected; + + painter->setClipRect(menuOpt.rect); + q->style()->drawControl(QStyle::CE_MenuTearoff, &menuOpt, painter, q); +} + +QMenuPrivate::ScrollerTearOffItem::ScrollerTearOffItem(QMenuPrivate::ScrollerTearOffItem::Type type, QMenuPrivate *mPrivate, QWidget *parent, Qt::WindowFlags f) + : QWidget(parent, f), menuPrivate(mPrivate), scrollType(type) +{ + if (parent) + setMouseTracking(parent->style()->styleHint(QStyle::SH_Menu_MouseTracking, 0, parent)); +} + +void QMenuPrivate::ScrollerTearOffItem::paintEvent(QPaintEvent *e) +{ + if (!e->rect().intersects(rect())) + return; + + QPainter p(this); + QWidget *parent = parentWidget(); + + //paint scroll up / down arrows + menuPrivate->drawScroller(&p, scrollType, QRect(0, 0, width(), menuPrivate->scrollerHeight())); + //paint the tear off + if (scrollType == QMenuPrivate::ScrollerTearOffItem::ScrollUp) { + QRect rect(0, 0, width(), parent->style()->pixelMetric(QStyle::PM_MenuTearoffHeight, 0, parent)); + if (menuPrivate->scroll && menuPrivate->scroll->scrollFlags & QMenuPrivate::QMenuScroller::ScrollUp) + rect.translate(0, menuPrivate->scrollerHeight()); + menuPrivate->drawTearOff(&p, rect); + } +} + +void QMenuPrivate::ScrollerTearOffItem::updateScrollerRects(const QRect &rect) +{ + if (rect.isEmpty()) + setVisible(false); + else { + setGeometry(rect); + raise(); + setVisible(true); + } +} + /*! Returns the action associated with this menu. @@ -2532,58 +2626,78 @@ void QMenu::paintEvent(QPaintEvent *e) menuOpt.tabWidth = 0; style()->drawPrimitive(QStyle::PE_PanelMenu, &menuOpt, &p, this); + //calculate the scroll up / down rect + const int fw = style()->pixelMetric(QStyle::PM_MenuPanelWidth, 0, this); + QRect scrollUpRect, scrollDownRect; + if (d->scroll) { + if (d->scroll->scrollFlags & QMenuPrivate::QMenuScroller::ScrollUp) + scrollUpRect.setRect(fw, fw, width() - (fw * 2), d->scrollerHeight()); + + if (d->scroll->scrollFlags & QMenuPrivate::QMenuScroller::ScrollDown) + scrollDownRect.setRect(fw, height() - d->scrollerHeight() - fw, width() - (fw * 2), + d->scrollerHeight()); + } + + //calculate the tear off rect + QRect tearOffRect; + if (d->tearoff) { + tearOffRect.setRect(fw, fw, width() - (fw * 2), + style()->pixelMetric(QStyle::PM_MenuTearoffHeight, 0, this)); + if (d->scroll && d->scroll->scrollFlags & QMenuPrivate::QMenuScroller::ScrollUp) + tearOffRect.translate(0, d->scrollerHeight()); + } + //draw the items that need updating.. + QRect scrollUpTearOffRect = scrollUpRect.united(tearOffRect); for (int i = 0; i < d->actions.count(); ++i) { QAction *action = d->actions.at(i); - QRect adjustedActionRect = d->actionRects.at(i); - if (!e->rect().intersects(adjustedActionRect) + QRect actionRect = d->actionRects.at(i); + if (!e->rect().intersects(actionRect) || d->widgetItems.value(action)) continue; //set the clip region to be extra safe (and adjust for the scrollers) + emptyArea -= QRegion(actionRect); + + QRect adjustedActionRect = actionRect; + if (adjustedActionRect.intersects(scrollUpTearOffRect)) { + if (adjustedActionRect.bottom() <= scrollUpTearOffRect.bottom()) + continue; + else + adjustedActionRect.setTop(scrollUpTearOffRect.bottom()+1); + } + + if (adjustedActionRect.intersects(scrollDownRect)) { + if (adjustedActionRect.top() >= scrollDownRect.top()) + continue; + else + adjustedActionRect.setBottom(scrollDownRect.top()-1); + } + QRegion adjustedActionReg(adjustedActionRect); - emptyArea -= adjustedActionReg; p.setClipRegion(adjustedActionReg); QStyleOptionMenuItem opt; initStyleOption(&opt, action); - opt.rect = adjustedActionRect; + opt.rect = actionRect; style()->drawControl(QStyle::CE_MenuItem, &opt, &p, this); } - const int fw = style()->pixelMetric(QStyle::PM_MenuPanelWidth, 0, this); - //draw the scroller regions.. - if (d->scroll) { - menuOpt.menuItemType = QStyleOptionMenuItem::Scroller; - menuOpt.state |= QStyle::State_Enabled; - if (d->scroll->scrollFlags & QMenuPrivate::QMenuScroller::ScrollUp) { - menuOpt.rect.setRect(fw, fw, width() - (fw * 2), d->scrollerHeight()); - emptyArea -= QRegion(menuOpt.rect); - p.setClipRect(menuOpt.rect); - style()->drawControl(QStyle::CE_MenuScroller, &menuOpt, &p, this); - } - if (d->scroll->scrollFlags & QMenuPrivate::QMenuScroller::ScrollDown) { - menuOpt.rect.setRect(fw, height() - d->scrollerHeight() - fw, width() - (fw * 2), - d->scrollerHeight()); - emptyArea -= QRegion(menuOpt.rect); - menuOpt.state |= QStyle::State_DownArrow; - p.setClipRect(menuOpt.rect); - style()->drawControl(QStyle::CE_MenuScroller, &menuOpt, &p, this); - } - } - //paint the tear off.. - if (d->tearoff) { - menuOpt.menuItemType = QStyleOptionMenuItem::TearOff; - menuOpt.rect.setRect(fw, fw, width() - (fw * 2), - style()->pixelMetric(QStyle::PM_MenuTearoffHeight, 0, this)); - if (d->scroll && d->scroll->scrollFlags & QMenuPrivate::QMenuScroller::ScrollUp) - menuOpt.rect.translate(0, d->scrollerHeight()); - emptyArea -= QRegion(menuOpt.rect); - p.setClipRect(menuOpt.rect); - menuOpt.state = QStyle::State_None; - if (d->tearoffHighlighted) - menuOpt.state |= QStyle::State_Selected; - style()->drawControl(QStyle::CE_MenuTearoff, &menuOpt, &p, this); + emptyArea -= QRegion(scrollUpTearOffRect); + emptyArea -= QRegion(scrollDownRect); + + if (d->scrollUpTearOffItem || d->scrollDownItem) { + if (d->scrollUpTearOffItem) + d->scrollUpTearOffItem->updateScrollerRects(scrollUpTearOffRect); + if (d->scrollDownItem) + d->scrollDownItem->updateScrollerRects(scrollDownRect); + } else { + //paint scroll up /down + d->drawScroller(&p, QMenuPrivate::ScrollerTearOffItem::ScrollUp, scrollUpRect); + d->drawScroller(&p, QMenuPrivate::ScrollerTearOffItem::ScrollDown, scrollDownRect); + //paint the tear off.. + d->drawTearOff(&p, tearOffRect); } + //draw border if (fw) { QRegion borderReg; @@ -2602,7 +2716,7 @@ void QMenu::paintEvent(QPaintEvent *e) style()->drawPrimitive(QStyle::PE_FrameMenu, &frame, &p, this); } - //finally the rest of the space + //finally the rest of the spaces p.setClipRegion(emptyArea); menuOpt.state = QStyle::State_None; menuOpt.menuItemType = QStyleOptionMenuItem::EmptyArea; @@ -3314,8 +3428,17 @@ void QMenu::actionEvent(QActionEvent *e) } if (QWidgetAction *wa = qobject_cast<QWidgetAction *>(e->action())) { QWidget *widget = wa->requestWidget(this); - if (widget) + if (widget) { d->widgetItems.insert(wa, widget); + if (d->scroll) { + if (!d->scrollUpTearOffItem) + d->scrollUpTearOffItem = + new QMenuPrivate::ScrollerTearOffItem(QMenuPrivate::ScrollerTearOffItem::ScrollUp, d, this); + if (!d->scrollDownItem) + d->scrollDownItem = + new QMenuPrivate::ScrollerTearOffItem(QMenuPrivate::ScrollerTearOffItem::ScrollDown, d, this); + } + } } } else if (e->type() == QEvent::ActionRemoved) { e->action()->disconnect(this); diff --git a/src/widgets/widgets/qmenu_mac.mm b/src/widgets/widgets/qmenu_mac.mm index fef1eb2cf4..f9f3ad08dc 100644 --- a/src/widgets/widgets/qmenu_mac.mm +++ b/src/widgets/widgets/qmenu_mac.mm @@ -80,11 +80,12 @@ inline QPlatformNativeInterface::NativeResourceForIntegrationFunction resolvePla */ NSMenu *QMenu::toNSMenu() { + Q_D(QMenu); // Call into the cocoa platform plugin: qMenuToNSMenu(platformMenu()) QPlatformNativeInterface::NativeResourceForIntegrationFunction function = resolvePlatformFunction("qmenutonsmenu"); if (function) { typedef void* (*QMenuToNSMenuFunction)(QPlatformMenu *platformMenu); - return reinterpret_cast<NSMenu *>(reinterpret_cast<QMenuToNSMenuFunction>(function)(platformMenu())); + return reinterpret_cast<NSMenu *>(reinterpret_cast<QMenuToNSMenuFunction>(function)(d->createPlatformMenu())); } return nil; } @@ -98,11 +99,12 @@ NSMenu *QMenu::toNSMenu() */ void QMenu::setAsDockMenu() { + Q_D(QMenu); // Call into the cocoa platform plugin: setDockMenu(platformMenu()) QPlatformNativeInterface::NativeResourceForIntegrationFunction function = resolvePlatformFunction("setdockmenu"); if (function) { typedef void (*SetDockMenuFunction)(QPlatformMenu *platformMenu); - reinterpret_cast<SetDockMenuFunction>(function)(platformMenu()); + reinterpret_cast<SetDockMenuFunction>(function)(d->createPlatformMenu()); } } diff --git a/src/widgets/widgets/qmenu_p.h b/src/widgets/widgets/qmenu_p.h index 2b0dc482da..64291e842f 100644 --- a/src/widgets/widgets/qmenu_p.h +++ b/src/widgets/widgets/qmenu_p.h @@ -276,7 +276,8 @@ public: cancelAction(0), #endif scroll(0), eventLoop(0), tearoff(0), tornoff(0), tearoffHighlighted(0), - hasCheckableItems(0), doChildEffects(false), platformMenu(0) + hasCheckableItems(0), doChildEffects(false), platformMenu(0), + scrollUpTearOffItem(nullptr), scrollDownItem(nullptr) { } ~QMenuPrivate() @@ -286,6 +287,7 @@ public: delete platformMenu.data(); } void init(); + QPlatformMenu *createPlatformMenu(); void setPlatformMenu(QPlatformMenu *menu); void syncPlatformMenu(); #ifdef Q_OS_OSX @@ -444,6 +446,24 @@ public: QPointer<QAction> actionAboutToTrigger; QPointer<QWidget> noReplayFor; + + class ScrollerTearOffItem : public QWidget { + public: + enum Type { ScrollUp, ScrollDown }; + ScrollerTearOffItem(Type type, QMenuPrivate *mPrivate, + QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags()); + void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE; + void updateScrollerRects(const QRect &rect); + + private: + QMenuPrivate *menuPrivate; + Type scrollType; + }; + ScrollerTearOffItem *scrollUpTearOffItem; + ScrollerTearOffItem *scrollDownItem; + + void drawScroller(QPainter *painter, ScrollerTearOffItem::Type type, const QRect &rect); + void drawTearOff(QPainter *painter, const QRect &rect); }; #endif // QT_NO_MENU diff --git a/src/widgets/widgets/qmenubar.cpp b/src/widgets/widgets/qmenubar.cpp index ce43740524..6b0c2fd621 100644 --- a/src/widgets/widgets/qmenubar.cpp +++ b/src/widgets/widgets/qmenubar.cpp @@ -1192,6 +1192,10 @@ QPlatformMenu *QMenuBarPrivate::getPlatformMenu(QAction *action) QPlatformMenu *platformMenu = action->menu()->platformMenu(); if (!platformMenu && platformMenuBar) { platformMenu = platformMenuBar->createMenu(); + // QPlatformMenuBar::createMenu() was introduced in Qt 5.7. Not all third party + // platform themes are using it, so fallback to QPlatformTheme::createPlatformMenu(). + if (!platformMenu) + platformMenu = QGuiApplicationPrivate::platformTheme()->createPlatformMenu(); if (platformMenu) action->menu()->setPlatformMenu(platformMenu); } diff --git a/src/widgets/widgets/qplaintextedit.cpp b/src/widgets/widgets/qplaintextedit.cpp index 27f1b16f60..7e01f6f3d5 100644 --- a/src/widgets/widgets/qplaintextedit.cpp +++ b/src/widgets/widgets/qplaintextedit.cpp @@ -811,7 +811,7 @@ void QPlainTextEditPrivate::init(const QString &txt) viewport->setCursor(Qt::IBeamCursor); #endif originalOffsetY = 0; -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN setSingleFingerPanEnabled(true); #endif } diff --git a/src/widgets/widgets/qpushbutton.cpp b/src/widgets/widgets/qpushbutton.cpp index bf10b9fb75..3b1440edb6 100644 --- a/src/widgets/widgets/qpushbutton.cpp +++ b/src/widgets/widgets/qpushbutton.cpp @@ -56,10 +56,10 @@ #include "qdebug.h" #include "qlayoutitem.h" #include "qdialogbuttonbox.h" -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC #include "private/qmacstyle_mac_p.h" #include "private/qmacstyle_mac_p_p.h" -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif #ifndef QT_NO_ACCESSIBILITY #include "qaccessible.h" @@ -675,7 +675,7 @@ bool QPushButton::event(QEvent *e) return QAbstractButton::event(e); } -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC /*! \reimp */ bool QPushButton::hitButton(const QPoint &pos) const { @@ -704,7 +704,7 @@ bool QPushButtonPrivate::hitButton(const QPoint &pos) q->rect().height() - QMacStylePrivate::PushButtonBottomOffset); return roundedRect.contains(pos); } -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif QT_END_NAMESPACE diff --git a/src/widgets/widgets/qpushbutton.h b/src/widgets/widgets/qpushbutton.h index 56d4d1de20..859ac247fb 100644 --- a/src/widgets/widgets/qpushbutton.h +++ b/src/widgets/widgets/qpushbutton.h @@ -87,9 +87,9 @@ public Q_SLOTS: protected: bool event(QEvent *e) Q_DECL_OVERRIDE; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC bool hitButton(const QPoint &pos) const; -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE; void keyPressEvent(QKeyEvent *) Q_DECL_OVERRIDE; void focusInEvent(QFocusEvent *) Q_DECL_OVERRIDE; diff --git a/src/widgets/widgets/qpushbutton_p.h b/src/widgets/widgets/qpushbutton_p.h index cd453a1339..ee41c345c8 100644 --- a/src/widgets/widgets/qpushbutton_p.h +++ b/src/widgets/widgets/qpushbutton_p.h @@ -71,7 +71,7 @@ public: inline void init() { resetLayoutItemMargins(); } static QPushButtonPrivate* get(QPushButton *b) { return b->d_func(); } -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC bool hitButton(const QPoint &pos); #endif #ifndef QT_NO_MENU diff --git a/src/widgets/widgets/qrubberband.cpp b/src/widgets/widgets/qrubberband.cpp index 123c955684..c91f837093 100644 --- a/src/widgets/widgets/qrubberband.cpp +++ b/src/widgets/widgets/qrubberband.cpp @@ -47,7 +47,7 @@ #include "qstyle.h" #include "qstyleoption.h" -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC # include <private/qt_mac_p.h> # include <private/qt_cocoa_helpers_mac_p.h> #endif @@ -142,12 +142,12 @@ QRubberBand::QRubberBand(Shape s, QWidget *p) Q_D(QRubberBand); d->shape = s; setAttribute(Qt::WA_TransparentForMouseEvents); -#ifndef Q_DEAD_CODE_FROM_QT4_WIN +#if 1 // Used to be excluded in Qt4 for Q_WS_WIN setAttribute(Qt::WA_NoSystemBackground); -#endif //Q_DEAD_CODE_FROM_QT4_WIN +#endif setAttribute(Qt::WA_WState_ExplicitShowHide); setVisible(false); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (isWindow()) { createWinId(); extern OSWindowRef qt_mac_window_for(const QWidget *); //qwidget_mac.cpp diff --git a/src/widgets/widgets/qsizegrip.cpp b/src/widgets/widgets/qsizegrip.cpp index dd0b383d2b..5150601366 100644 --- a/src/widgets/widgets/qsizegrip.cpp +++ b/src/widgets/widgets/qsizegrip.cpp @@ -52,7 +52,7 @@ #include "qdebug.h" #include <QDesktopWidget> -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC #include <private/qt_mac_p.h> #endif @@ -82,7 +82,7 @@ public: Qt::Corner m_corner; bool gotMousePress; QPointer<QWidget> tlw; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC void updateMacSizer(bool hide) const; #endif Qt::Corner corner() const; @@ -120,7 +120,7 @@ public: updateTopLevelWidget(); if (tlw && showSizeGrip) { Qt::WindowStates sizeGripNotVisibleState = Qt::WindowFullScreen; -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC sizeGripNotVisibleState |= Qt::WindowMaximized; #endif // Don't show the size grip if the tlw is maximized or in full screen mode. @@ -142,7 +142,7 @@ QSizeGripPrivate::QSizeGripPrivate() { } -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC void QSizeGripPrivate::updateMacSizer(bool hide) const { Q_Q(const QSizeGrip); @@ -225,7 +225,7 @@ void QSizeGripPrivate::init() Q_Q(QSizeGrip); m_corner = q->isLeftToRight() ? Qt::BottomRightCorner : Qt::BottomLeftCorner; -#if !defined(QT_NO_CURSOR) && !defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if !defined(QT_NO_CURSOR) && !0 /* Used to be included in Qt4 for Q_WS_MAC */ q->setCursor(m_corner == Qt::TopLeftCorner || m_corner == Qt::BottomRightCorner ? Qt::SizeFDiagCursor : Qt::SizeBDiagCursor); #endif @@ -438,7 +438,7 @@ void QSizeGrip::moveEvent(QMoveEvent * /*moveEvent*/) return; d->m_corner = d->corner(); -#if !defined(QT_NO_CURSOR) && !defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if !defined(QT_NO_CURSOR) && !0 /* Used to be included in Qt4 for Q_WS_MAC */ setCursor(d->m_corner == Qt::TopLeftCorner || d->m_corner == Qt::BottomRightCorner ? Qt::SizeFDiagCursor : Qt::SizeBDiagCursor); #endif @@ -449,7 +449,7 @@ void QSizeGrip::moveEvent(QMoveEvent * /*moveEvent*/) */ void QSizeGrip::showEvent(QShowEvent *showEvent) { -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC d_func()->updateMacSizer(false); #endif QWidget::showEvent(showEvent); @@ -460,7 +460,7 @@ void QSizeGrip::showEvent(QShowEvent *showEvent) */ void QSizeGrip::hideEvent(QHideEvent *hideEvent) { -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC d_func()->updateMacSizer(true); #endif QWidget::hideEvent(hideEvent); @@ -484,7 +484,7 @@ bool QSizeGrip::eventFilter(QObject *o, QEvent *e) return QWidget::eventFilter(o, e); } Qt::WindowStates sizeGripNotVisibleState = Qt::WindowFullScreen; -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC sizeGripNotVisibleState |= Qt::WindowMaximized; #endif // Don't show the size grip if the tlw is maximized or in full screen mode. diff --git a/src/widgets/widgets/qstatusbar.cpp b/src/widgets/widgets/qstatusbar.cpp index 5f1c373bb1..bdf728ead2 100644 --- a/src/widgets/widgets/qstatusbar.cpp +++ b/src/widgets/widgets/qstatusbar.cpp @@ -87,7 +87,7 @@ public: int savedStrut; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC QPoint dragStart; #endif @@ -746,7 +746,7 @@ bool QStatusBar::event(QEvent *e) // On Mac OS X Leopard it is possible to drag the window by clicking // on the tool bar on most applications. -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC return QWidget::event(e); #else // Enable drag-click only if the status bar is the status bar for a diff --git a/src/widgets/widgets/qtabbar.cpp b/src/widgets/widgets/qtabbar.cpp index b6a3ef7eb8..6e34198f67 100644 --- a/src/widgets/widgets/qtabbar.cpp +++ b/src/widgets/widgets/qtabbar.cpp @@ -63,7 +63,7 @@ #ifndef QT_NO_TABBAR -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC #include <private/qt_mac_p.h> #include <private/qt_cocoa_helpers_mac_p.h> #endif @@ -176,7 +176,12 @@ void QTabBarPrivate::initBasicStyleOption(QStyleOptionTab *option, int tabIndex) if (tab.textColor.isValid()) option->palette.setColor(q->foregroundRole(), tab.textColor); - +#ifdef Q_OS_MACOS + else if (isCurrent && !documentMode + && (QSysInfo::MacintoshVersion < QSysInfo::MV_10_10 || q->isActiveWindow())) { + option->palette.setColor(QPalette::WindowText, Qt::white); + } +#endif option->icon = tab.icon; option->iconSize = q->iconSize(); // Will get the default value then. @@ -1922,7 +1927,7 @@ void QTabBar::mousePressEvent(QMouseEvent *event) d->moveTabFinished(d->pressedIndex); d->pressedIndex = d->indexAtPos(event->pos()); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC d->previousPressedIndex = d->pressedIndex; #endif if (d->validIndex(d->pressedIndex)) { @@ -2004,7 +2009,7 @@ void QTabBar::mouseMoveEvent(QMouseEvent *event) update(); } -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC } else if (!d->documentMode && event->buttons() == Qt::LeftButton && d->previousPressedIndex != -1) { int newPressedIndex = d->indexAtPos(event->pos()); if (d->pressedIndex == -1 && d->previousPressedIndex == newPressedIndex) { @@ -2102,7 +2107,7 @@ void QTabBar::mouseReleaseEvent(QMouseEvent *event) event->ignore(); return; } -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC d->previousPressedIndex = -1; #endif if (d->movable && d->dragInProgress && d->validIndex(d->pressedIndex)) { diff --git a/src/widgets/widgets/qtabbar_p.h b/src/widgets/widgets/qtabbar_p.h index 0e9dce84b3..e8d5503fdf 100644 --- a/src/widgets/widgets/qtabbar_p.h +++ b/src/widgets/widgets/qtabbar_p.h @@ -91,7 +91,7 @@ public: selectionBehaviorOnRemove(QTabBar::SelectRightTab), paintWithOffsets(true), movable(false), dragInProgress(false), documentMode(false), autoHide(false), changeCurrentOnDrag(false), switchTabCurrentIndex(-1), switchTabTimerId(0), movingTab(0) -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC , previousPressedIndex(-1) #endif {} @@ -228,7 +228,7 @@ public: int switchTabTimerId; QMovableTabWidget *movingTab; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC int previousPressedIndex; #endif // shared by tabwidget and qtabbar diff --git a/src/widgets/widgets/qtextedit.cpp b/src/widgets/widgets/qtextedit.cpp index f354495e70..66bf2919eb 100644 --- a/src/widgets/widgets/qtextedit.cpp +++ b/src/widgets/widgets/qtextedit.cpp @@ -184,7 +184,7 @@ void QTextEditPrivate::init(const QString &html) #ifndef QT_NO_CURSOR viewport->setCursor(Qt::IBeamCursor); #endif -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN setSingleFingerPanEnabled(true); #endif } diff --git a/src/widgets/widgets/qtoolbar.cpp b/src/widgets/widgets/qtoolbar.cpp index 61bc6d19cf..2a0912df0a 100644 --- a/src/widgets/widgets/qtoolbar.cpp +++ b/src/widgets/widgets/qtoolbar.cpp @@ -322,7 +322,7 @@ bool QToolBarPrivate::mouseMoveEvent(QMouseEvent *event) startDrag(moving); if (!moving && !wasDragging) { -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN grabMouseWhileInWindow(); #else q->grabMouse(); diff --git a/src/widgets/widgets/qtoolbararealayout.cpp b/src/widgets/widgets/qtoolbararealayout.cpp index 05564bb6b1..0c57d9251d 100644 --- a/src/widgets/widgets/qtoolbararealayout.cpp +++ b/src/widgets/widgets/qtoolbararealayout.cpp @@ -604,16 +604,21 @@ int QToolBarAreaLayoutInfo::distance(const QPoint &pos) const case QInternal::LeftDock: if (pos.y() < rect.bottom()) return pos.x() - rect.right(); + break; case QInternal::RightDock: if (pos.y() < rect.bottom()) return rect.left() - pos.x(); + break; case QInternal::TopDock: if (pos.x() < rect.right()) return pos.y() - rect.bottom(); + break; case QInternal::BottomDock: if (pos.x() < rect.right()) return rect.top() - pos.y(); - default: + break; + + case QInternal::DockCount: break; } return -1; diff --git a/src/widgets/widgets/qwidgetlinecontrol.cpp b/src/widgets/widgets/qwidgetlinecontrol.cpp index 66f17dbe33..9b65dc43d1 100644 --- a/src/widgets/widgets/qwidgetlinecontrol.cpp +++ b/src/widgets/widgets/qwidgetlinecontrol.cpp @@ -72,7 +72,7 @@ int QWidgetLineControl::redoTextLayout() const QTextLine l = m_textLayout.createLine(); m_textLayout.endLayout(); -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (m_threadChecks) m_textLayoutThread = QThread::currentThread(); #endif diff --git a/src/widgets/widgets/qwidgetlinecontrol_p.h b/src/widgets/widgets/qwidgetlinecontrol_p.h index db9039e302..d4a4534fb5 100644 --- a/src/widgets/widgets/qwidgetlinecontrol_p.h +++ b/src/widgets/widgets/qwidgetlinecontrol_p.h @@ -91,7 +91,7 @@ public: m_selstart(0), m_selend(0), m_passwordEchoEditing(false) , m_passwordEchoTimer(0) , m_passwordMaskDelay(-1) -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 0 // Used to be included in Qt4 for Q_WS_MAC , m_threadChecks(false) , m_textLayoutThread(0) #endif @@ -382,14 +382,14 @@ public: QTextLayout *textLayout() const { -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (m_threadChecks && QThread::currentThread() != m_textLayoutThread) redoTextLayout(); #endif return &m_textLayout; } -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 0 // Used to be included in Qt4 for Q_WS_MAC void setThreadChecks(bool threadChecks) { m_threadChecks = threadChecks; @@ -512,7 +512,7 @@ private: } int redoTextLayout() const; -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 0 // Used to be included in Qt4 for Q_WS_MAC bool m_threadChecks; mutable QThread *m_textLayoutThread; #endif diff --git a/src/widgets/widgets/qwidgetresizehandler.cpp b/src/widgets/widgets/qwidgetresizehandler.cpp index 2a7b1eeecc..016598849b 100644 --- a/src/widgets/widgets/qwidgetresizehandler.cpp +++ b/src/widgets/widgets/qwidgetresizehandler.cpp @@ -120,7 +120,7 @@ bool QWidgetResizeHandler::eventFilter(QObject *o, QEvent *ee) if (!widget->rect().contains(widget->mapFromGlobal(e->globalPos()))) return false; if (e->button() == Qt::LeftButton) { -#if defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 // Used to be included in Qt4 for Q_WS_X11 /* Implicit grabs do not stop the X server from changing the cursor in children, which looks *really* bad when @@ -134,7 +134,7 @@ bool QWidgetResizeHandler::eventFilter(QObject *o, QEvent *ee) # else widget->grabMouse(); # endif // QT_NO_CURSOR -#endif // Q_DEAD_CODE_FROM_QT4_X11 +#endif buttonDown = false; emit activate(); bool me = movingEnabled; |