Commit Graph

39199 Commits

Author SHA1 Message Date
Tor Arne Vestbø
77a4915bf9 macOS: Add IOSurface based backingstore for layer-backed views
The naïve approach used for layer-backing in the past caused a detach
of the backingstore QImage on each beginPaint, since the image was
assigned to the layer via a CGImageRef that participated in the
QImage implicit sharing (and had to, so we couldn't get around that).

We now use IOSurfaces, wrapped in a QPlatformGraphicsBuffer abstraction.
The surfaces can be assigned to the layer's content the same way images
could, but allows us to reason more closely about whether or a buffer
is in use, and increases the chance that we will have a zero-copy path
to the screen.

Unless the window has requested a surface format with single buffering
we use a dynamic swap chain of buffers. In most situations there will
be two buffers in play, one assigned to the layer and one ready to
paint to, but during resize and some other situations the buffers
will grow temporarily to accommodate the increased back-pressure.

Since QBackingStore is documented as having single-buffer behavior,
we take care to persist content between the buffers before every
swap. By doing this before swapping, instead of before each paint,
we can avoid preserving areas that will be painted to anyways, and
will in many situations (such as blinking cursors e.g.) end up not
persisting anything.

The RasterGL surface case is handled by reading out the buffer data
and doing a manual texture upload. In the future we can support
direct texture access via CGLTexImageIOSurface2D, but this requires
QPlatformBackingStore::composeAndFlush to learn how to support other
targets than GL_TEXTURE_2D, as CGLTexImageIOSurface2D only works with
GL_TEXTURE_RECTANGLE_ARB targets.

Fixes: QTBUG-48763
Fixes: QTBUG-72360
Fixes: QTBUG-71162

Change-Id: Ica12f69b244e54d0fd31c929730d15657c286af8
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2019-03-14 21:51:27 +00:00
Kai Koehne
097bf6fdd2 Fix compilation of qCDebug("", ...) with QT_NO_DEBUG_OUTPUT
... and fix QT_NO_INFO_OUTPUT, QT_NO_WARNING_OUTPUT alongside.

Fixes: QTBUG-74359
Change-Id: I2167dc943ae8c52602e08e24ca815d95f82a5db8
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2019-03-14 17:15:53 +00:00
Christian Ehrlicher
b8d5e0b4ce QAbstractItemView: Don't let editor width exceed item width if not needed
The editor geometry was adjusted in RTL but not in LTR mode before
Qt5.11. 3ed91da499 fixed this but now all
editors are shown with their default size instead adjusting to the item
width. This works in most cases but fails for small column widths and
e.g. a QDoubleSpinBox. Therefore adjust the size policy for the editors
so their default size is ignored and therefore the column width is used.
Don't do this for a QDateTimeEdit since this makes no sense to only show
a cut of part of the editor.

Fixes: QTBUG-74327
Change-Id: Ie526155571bf24a2d8f38e988d8b2af4bfcc92ba
Reviewed-by: Samuel Gaist <samuel.gaist@idiap.ch>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
2019-03-14 16:50:59 +00:00
Christian Ehrlicher
02c25f334d uic: write out min/maximumSectionSize property before current size
Since faff43348b the min/maxSectionSize is
respected when setting the current/default section size programatically.
This is not honored when writing out the properties and therefore the
default section size is not correctly set when it's smaller then the
default minimum section size.
Therefore make sure to set min/maxSectionSize property before all other
properties.

Fixes: QTBUG-74352
Change-Id: I8f9ede3e90b7c9c65f8440953b00e1d9d6006d38
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
2019-03-14 16:50:57 +00:00
Ulf Hermann
a6154ca648 androiddeployqt: Also shellquote rootPath as part of importPaths
Fixes: QTBUG-74212
Change-Id: Ie0c9b5b230e93e50d6e636a6105c3bd717715374
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2019-03-14 16:46:44 +00:00
Thiago Macieira
9649c41ed9 qfloat16: suppress the tables if FP16 is supported by the CPU
If QtCore is being compiled to a system with FP16 support, then all
applications are too and, therefore, we don't need the tables. Saves 12k
of read-only data.

Change-Id: I46363e5b8944459e8c48fffd158bb53d906df297
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
2019-03-14 14:59:28 +00:00
Christian Andersen
74aeacace4 Windows QPA: only calculate invisible margins when window has a frame
In commit ec97be5585 an invisible frame calculation was added for
Windows 10 that fixes QWidget::move(0,0) for main windows and dialogs.
But because e.g. Qt::ToolTip windows do not have a window frame, the
invisible margin calculation causes them to pop-up in the wrong
position (off by a few pixels).

[ChangeLog][Windows] Fixed QToolTip pop-ups and QComboBox animation
pop-ups being off by a few pixels on Windows 10.

Fixes: QTBUG-74062
Change-Id: I218e8409a250a8b81ecd1d409b597ebd01fb255f
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2019-03-14 12:15:47 +00:00
Friedemann Kleint
15f88a7c01 Windows QPA: Output all adapters in diagnostics used by qtdiag
Split up the code detecting the GPUs into small helpers. Add a
QDirect3D9Handle class providing Direct3D9 functionality, add
GpuDescription::detectAll() and add a QVariantList "gpuList" property to the
native interface.

Task-number: QTBUG-50371
Task-number: QTBUG-65882
Change-Id: I8673542d327837babc2ad8f507da76e8ff5524ea
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
2019-03-14 12:15:11 +00:00
Lukáš Turek
036fe49580 XCB: Fix clipboard breaking when timer wraps after 50 days
xcb_timestamp_t is a 32-bit unsigned value in miliseconds, so it
wraps after 49.7 days. When it happens, QXcbConnection::m_time stops
updating and copy & paste in an application would not work until the
application is restarted. This patch detects the timer wrap and
allows m_time to wrap too. The fix was verified in KDE desktop with
applications running for 51 days.

Fixes: QTBUG-65145
Change-Id: I328c4179c1b1f71914adda6f9a0ca3991a7e808e
Reviewed-by: Uli Schlachter <psychon@znc.in>
Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>
2019-03-14 12:14:30 +00:00
Yuhang Zhao
85250da09d Configure: simplify logic
Replace hard-coded win32-msvc20XX mkspec names with
a variable substitution expression.

Change-Id: I4911cb3e169cd7603453d7c8a67a2a291d15c796
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2019-03-14 12:13:58 +00:00
Yuhang Zhao
b9c4add832 Configure: add missing "clang.exe"
This amends commit 16b7afc.

Change-Id: I6c0e4b476035e4733e828724109b950d5b3a8dd6
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2019-03-14 12:13:37 +00:00
Qt Forward Merge Bot
32084b0733 Merge remote-tracking branch 'origin/5.13' into dev
Conflicts:
	src/corelib/tools/qcollator_win.cpp

Change-Id: I6d806d7c58b2057ebde3ad915bb5551f34b700e5
2019-03-14 10:49:29 +01:00
Kevin Funk
41e7b71c41 More nullptr usage in headers
Diff generated by running clang-tidy's modernize-use-nullptr checker on
the CMake-based Qt version.

Skipping src/3rdparty, examples/, tests/

Change-Id: Ib182074e2e2fd52f63093f73b3e2e4c0cb7af188
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-03-14 07:37:52 +00:00
Karim Pinter
68a2b3d46a QNX QPA: Add support for Qt Virtual Keyboard
If the QT_IM_MODULE environment variable is set, then it loads the
IM module accordingly, otherwise it is using the PPS one, if it is
available.

Task-number: QTBUG-54576
Change-Id: Icb8b474805053d8297029096365783c2cabc2cbc
Reviewed-by: Samuli Piippo <samuli.piippo@qt.io>
Reviewed-by: James McDonnell <jmcdonnell@blackberry.com>
(cherry picked from commit 8a7c373f8e)
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2019-03-14 06:46:06 +00:00
Anton Kudryavtsev
b35eec360d QStringMatcher: add QStringView support
While touching the code, deduplicate some methods.

Change-Id: I28f469f0e9ae000a34466b0ecc604b5f3bd09e63
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2019-03-14 04:48:06 +00:00
Thiago Macieira
c21e2d5706 Doc: "UTF" -> "UTF-8"
Change-Id: Ifbadc62ac2d04a9a8952fffd158a5a9ba87c30e0
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2019-03-14 03:12:47 +00:00
Thiago Macieira
0181e0e527 Add a pair of functions to convert to and from Q/CborError
We've so far made our public API match the TinyCBOR error codes, so the
conversion is trivial. Having the two functions allows us to change
that, if it becomes necessary.

It also effectively concentrates the Coverity warning about mixed enums
in a single pair of functions.

>>> CID 190307:  Incorrect expression  (MIXED_ENUMS)
>>> Mixing enum types "CborError" and "QCborError::Code" for "err".

Change-Id: Ifbadc62ac2d04a9a8952fffd1589e739c7a5b745
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-03-14 03:12:42 +00:00
Liang Qi
29a70348d4 Add qstringview.cpp into bootstrap
After e89fbd8c, QString depends on QStringView.

Fixes: QTBUG-74340
Change-Id: I9cba49db73b74deca05b9a9ddfeec580f30b5e35
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2019-03-13 22:32:09 +00:00
Kai Koehne
d5bb757987 Doc: Use nullptr in Signals & Slots
Change-Id: I9b377e00ce177ae33972479bde11dd03061224d7
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2019-03-13 20:54:51 +00:00
Giuseppe D'Angelo
6620f93a74 QOpenGLContext: fix docs about sharing
FBOs cannot be shared. Streamline the remainder of the sentence.

Change-Id: I654b23f86f4ee4ea2ca8e71958464d9f55394297
Reviewed-by: Martin Smith <martin.smith@qt.io>
2019-03-13 16:16:17 +00:00
Yuhang Zhao
16b7afc4de Fix win32-clang-g++ build
Change-Id: Ide803de12736d545807a4ae650ff8f8bce5dccd8
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2019-03-13 16:12:34 +00:00
Robert Loehning
eb25acc05b Improve project files of libfuzzer tests
Change-Id: I7977beb1bbc142326a3cc48435b91ec7293e2cff
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2019-03-13 11:18:40 +00:00
Christian Ehrlicher
fed9fa1714 Doc: replace 0 with \nullptr in documentation
Replace some more 0 with \nullptr.

Change-Id: I2af91bf3712eef5161b11da0c44614bc039ade03
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2019-03-13 10:57:25 +00:00
Christian Ehrlicher
b0f17780df Doc: Unify terminology for '\0'-terminated strings
The documentation for QByteArray and QString is using different
notations for '\0'-terminated strings. Unify them by using
'\0'-terminated everywhere.

Change-Id: Ia26ec5c50635bebba1b54b7fe227ff0bcca4f2ad
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Reviewed-by: Samuel Gaist <samuel.gaist@idiap.ch>
2019-03-13 10:57:22 +00:00
Robert Szefner
2c6593b721 QPSQL: Use nullptr for pointers
Change-Id: I2b61cf0b81550c0878b0f06488a933c4b14e4728
Reviewed-by: Christian Ehrlicher <ch.ehrlicher@gmx.de>
2019-03-13 10:57:19 +00:00
Robert Szefner
3fa5e637fb QPSQL: Fix code formatting
Only whitespace changes.

Change-Id: I474aa1b477be7081b58bd781417861878b207f4e
Reviewed-by: Christian Ehrlicher <ch.ehrlicher@gmx.de>
2019-03-13 10:57:15 +00:00
Timur Pocheptsov
5e74505c33 QOcspResponse - fix broken documentation
After the 'other' parameter in the "defaulted" definitions was
removed to get rid of 'unused variable' error, docs were not
updated properly, still referring to non-existing 'other'
parameter.

Change-Id: I3acbebfa5f1cf915d46a5bbf1b4a1ea18374b565
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-03-12 08:56:30 +00:00
Lorn Potter
a9cd8ce296 wasm: fix error report when network request is cancelled
Fixes: QTBUG-73346
Change-Id: I8aaf8fe45f3014e2c9187c554ed86a4d29c03c0b
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2019-03-11 23:05:10 +00:00
Timur Pocheptsov
8d4e8217fd Convert tst_QSslSocket to work with Docker
Change-Id: Ifb075763e3a0c6c08677dd2ae7febbbc8e4e48a9
Reviewed-by: Ryan Chu <ryan.chu@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2019-03-11 15:38:58 +00:00
Oliver Wolff
2412cfac51 moc: Fix parsing of [[deprecated]] enum values
moc now successfully parses enum values, that have been deprecated with
[[deprecated]]. This is valid c++17 and should be handled correctly.
By adding that functionality it is possible to parse Windows headers
which use this deprecation mechanism.

To make sure, that moc works correctly even on compilers that do not
support deprecated enum values yet, the auto test explicitly uses
[[deprecated]] enum values during moc run.

Fixes: QTBUG-74126
Change-Id: I7b9d9a49af6093a97f8fdb800ffbc5af3d54d262
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@qt.io>
2019-03-11 14:11:33 +00:00
Robert Szefner
52c0bb5994 QPSQL: Use qstrtod() function for string to double conversion
A change to qstrtod() will give us a small performance improvement.
Because the qstrtod() function does not correctly parse the NaN values,
an appropriate check condition for NaN has been added.
Also changed code structure so now the double conversion function
is called only in one place.

Task-number: QTBUG-65748
Change-Id: I49d40e5157e79cc5fce35db4c4272d1ccd270c6b
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2019-03-11 13:18:38 +00:00
Eirik Aavitsland
0f5ed788f2 Doc: fix some typos and missing doc for QScopeGuard
Change-Id: Ifd492387abbffa551e08a6bcc01e248b8402254d
Reviewed-by: Martin Smith <martin.smith@qt.io>
2019-03-11 08:37:29 +00:00
Qt Forward Merge Bot
0a02de62d1 Merge remote-tracking branch 'origin/5.12' into 5.13
Change-Id: Iecdf00ca61d819bde532daa42f093860ec4a499e
2019-03-11 01:00:06 +01:00
Topi Reinio
c7f6761bc9 Doc: Remove background colors from simplified offline CSS
The simplified style needs to work for both light and dark themes
in Qt Creator's help system. Background and text colors are already
applied according to the active theme, this commit removes the rest
of the hardcoded element colors that do not look good with a dark
theme.

Task-number: QTBUG-49417
Task-number: QTBUG-69327
Change-Id: Ib5ebe2755e98ca120f0500ab82713a37ec7199bd
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
2019-03-10 20:00:11 +00:00
Tony Sarajärvi
912bcf0f0d Expand blacklisting of tst_qsslkey to cover all versions of RHELs
Previous blacklisting 5c4e5032b5 only
covered RHEL 6.6 and RHEL 7.4. The problem however exists in all
6.x and 7.x distros as they have the same openssl.

This however leaves us the problem with future RHEL 8. This will
keep blacklisting these tests there as well. We need a way to blacklist
versions with a wildcard so that we could say RHEL-7.*

Task-number: QTBUG-46203
Change-Id: I2cc52ba2eac949214ecaa02e19d9e623d5befc49
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2019-03-10 14:08:21 +00:00
Thiago Macieira
3cdf3ae1f0 Fix Coverity warning about mixing enums
Coverity says:
>>>     CID 190310:  Incorrect expression  (MIXED_ENUMS)
>>>     Mixing enum types "CborType" and "QCborStreamReader::Type" for "type_".

Change-Id: Ifbadc62ac2d04a9a8952fffd1589e6e304fc7703
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2019-03-09 17:16:06 +00:00
Volker Hilsheimer
75c6bd54d7 Avoid copying QByteArray created via fromRawData in toDouble
qt_asciiToDouble accepts a length parameter, so we can just pass
that through. No need for explicitly null-terminating, which is
where the copy of the data would be made.

Change-Id: I4e7921541f03295a2fae6171b35157084ff3ed8c
Fixes: QTBUG-65748
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2019-03-09 15:26:24 +00:00
Andy Shaw
6a86cc612d Fix a couple of small doc things in relation to QScopeGuard
Change-Id: I6e61a18697b95d9e3f534d1d71ebf32fdff4a04f
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
2019-03-09 10:57:28 +00:00
Tor Arne Vestbø
a0a1d9c581 iOS: Fix broken application background tracking
e0e1c7ec2d amazingly both removed and inverted key parts of the
logic for tracking the background state of the application.

Fixes: QTBUG-74272
Change-Id: I9a9e8720f32e8228d27ee6b6a1fb35e5f7b7cedc
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2019-03-09 10:57:21 +00:00
Qt Forward Merge Bot
261c0dedac Merge remote-tracking branch 'origin/5.13' into dev
Change-Id: I056b658ffe9390dfcbe2787e2bddc7f4e9b389dd
2019-03-09 01:00:55 +01:00
Qt Forward Merge Bot
fbc9fb233d Merge remote-tracking branch 'origin/5.12' into 5.13
Change-Id: Ica3f89ace33585ad7854417a328156f5a68e2a00
2019-03-09 01:00:20 +01:00
Edward Welbourne
830e06a3f8 Clean up the QCollator code and comments
Broke over-long lines.  Reflowed documentation, refined a phrasing,
corrected some out of date details and typos.

Change-Id: Ic3835bb198bd062f85b3c466b56dc9636d4d3fe4
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2019-03-08 17:07:57 +00:00
Edward Welbourne
cdd3bd1d2c Report status codes in warnings about API failures
Also reuse the status variable, since the value saved in the one
previously declared int was an OSStatus, too.

Change-Id: I8e8fe308ae71df51e8057d89bc76cab0c6bbedb2
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2019-03-08 17:07:47 +00:00
Edward Welbourne
a769ab62cb Extend QCollator to support QStringView
This enables some simplification of the existing implementations.
Refined wording of the documentation in the process.

[ChangeLog][QtCore][QCollator] Added support for QStringView.

Change-Id: Idffaae8d109173d47c7be076828f4b58dc334957
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2019-03-08 17:07:38 +00:00
Edward Welbourne
e89fbd8c3a Add QStringView::toWCharArray() to match QString
QCollator needs it to add support for QStringView.
In any case, it extends the mirror of QString's API.
Naturally, we can reimplement QString's version using it.

Change-Id: I5a23a3f2a98c7d59597b5e935542a93764b5e350
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2019-03-08 17:07:21 +00:00
Edward Welbourne
e4749e7985 Do not mix QByteArray with QString in arithmetic
QLatin1String + QByteArray + QLatin1String + QString should not be supported.
That the compiler let us get away with this is distressing.
Exposed by Anton Kudryavtsev's workon extending QString's operator+ support.

Change-Id: I0adfaa87e48335928acb680da49e9173639af614
Reviewed-by: Anton Kudryavtsev <antkudr@mail.ru>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2019-03-08 14:20:54 +00:00
Christian Ehrlicher
8b3463fdeb QAbstractItemView: make v-aligned items texts more user-friendly
Commit 25133a1b77 fixed the item view text
layouting correctly in a technical way. For a vertically aligned text
which does not fit into the given rect it is not user-friendly to show
some parts of the text. It is better to display the start of it and show
an elide marker in the last visible line.

Fixes: QTBUG-73721
Change-Id: Ia7453133ea0a229b24196467168c8371585c4d8f
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
2019-03-08 12:04:46 +00:00
Morten Johan Sørvig
caa74f16d4 wasm: support rendering to multiple canvases
Qt (via the the qtloader.js API) now supports rendering
to multiple canvases. The application sees each canvas
as a QScreen.

Make qtloader.js support multiple canvases:

  var qtloader = QtLoader({
    canvasElements : [array-of-canvas],
    showCanvas: function() {
      // make canvas(es) visible
    },
 });

The canvases were previously created/returned by showCanvas(),
however this function is called after the Qt app has
been started and adding screens that that point is
too late. (This worked before since there was only one
screen, and no need to connect each screen instance
to specific canvas.)

Remove QWasmScreen, QWasmCompositor, and QWasmEventTranslator
singletons from QWasmIntegration. These are are now
crated per-screen and are owned by the QWasmScreen.

Task-number: QTBUG-64079
Change-Id: I24689929fd5bfb7ff0ba076f66937728fa4bc4e4
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
2019-03-08 10:09:57 +00:00
Lorn Potter
452c644c5c wasm: make wasm platform target a specific canvas instead of default
This allows for multi canvas use

Task-number: QTBUG-64079
Change-Id: I69c998aa4c2869bb5b7f14ba65bb63284365ad70
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2019-03-08 10:09:46 +00:00
Timur Pocheptsov
01a5434252 QSslKey - add a support for AES encrypted keys
for SecureTransport backend. OpenSSL, while reading
RSA/DSA, is internally calling EVP_BytesToKey that
essentially does the same thing this patch does in
'deriveAesKey' and thus able to correctly decrypt
whatever it first encrypted (while generating/
encrypting keys).

Fixes: QTBUG-54422
Change-Id: Ia9f7599c5b19bf364c179f2abd2aab7ea5359a65
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-03-08 05:36:14 +00:00