diff --git a/libquassel-client/src/main/kotlin/de/justjanne/libquassel/client/session/ClientHandshakeHandler.kt b/libquassel-client/src/main/kotlin/de/justjanne/libquassel/client/session/ClientHandshakeHandler.kt index c7c409aa8721814be041b8463706f829649e966c..b92936b4414194c28557100a4f33547db88b6654 100644 --- a/libquassel-client/src/main/kotlin/de/justjanne/libquassel/client/session/ClientHandshakeHandler.kt +++ b/libquassel-client/src/main/kotlin/de/justjanne/libquassel/client/session/ClientHandshakeHandler.kt @@ -20,14 +20,7 @@ import de.justjanne.libquassel.protocol.session.MessageChannelReadThread import de.justjanne.libquassel.protocol.session.Session import de.justjanne.libquassel.protocol.util.log.trace import de.justjanne.libquassel.protocol.variant.QVariantMap -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.coroutineScope -import kotlinx.coroutines.launch -import kotlinx.coroutines.runBlocking -import kotlinx.coroutines.runInterruptible -import kotlinx.coroutines.withContext import org.slf4j.LoggerFactory -import sun.security.util.DisabledAlgorithmConstraints import java.nio.ByteBuffer class ClientHandshakeHandler( diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QDateTimeSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QDateTimeSerializer.kt index 6ca4bb624ecbe49882ecdc867c70fd20580d6ff3..6c0995334c5ed3c0f2ded51687c8e1406717fcfe 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QDateTimeSerializer.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/qt/QDateTimeSerializer.kt @@ -42,9 +42,17 @@ object QDateTimeSerializer : PrimitiveSerializer<Temporal> { is LocalDateTime -> serialize(data, TimeSpec.LocalUnknown, null) is OffsetDateTime -> - serialize(data.toLocalDateTime(), TimeSpec.OffsetFromUTC, data.offset) + if (data.offset === ZoneOffset.UTC) { + serialize(data.toLocalDateTime(), TimeSpec.UTC, null) + } else { + serialize(data.toLocalDateTime(), TimeSpec.OffsetFromUTC, data.offset) + } is ZonedDateTime -> - serialize(data.toLocalDateTime(), TimeSpec.OffsetFromUTC, data.offset) + if (data.offset === ZoneOffset.UTC) { + serialize(data.toLocalDateTime(), TimeSpec.UTC, null) + } else { + serialize(data.toLocalDateTime(), TimeSpec.OffsetFromUTC, data.offset) + } is Instant -> serialize(data.atOffset(ZoneOffset.UTC).toLocalDateTime(), TimeSpec.UTC, null) else -> @@ -64,15 +72,9 @@ object QDateTimeSerializer : PrimitiveSerializer<Temporal> { TimeSpec.LocalDST -> localDateTime.atZone(ZoneId.systemDefault()).toOffsetDateTime() TimeSpec.OffsetFromUTC -> - localDateTime - .atOffset( - ZoneOffset.ofTotalSeconds( - IntSerializer.deserialize(buffer, featureSet) - ) - ) + localDateTime.atOffset(ZoneOffset.ofTotalSeconds(IntSerializer.deserialize(buffer, featureSet))) TimeSpec.UTC -> - localDateTime - .atOffset(ZoneOffset.UTC) + localDateTime.atOffset(ZoneOffset.UTC) } } } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/HeartBeatReplySerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/HeartBeatReplySerializer.kt index ef9f3eafd34640cfa84d182ee372081ef424a61c..2e4c8fce67f82ec32b10643ab4ccc3e52ef570e9 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/HeartBeatReplySerializer.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/HeartBeatReplySerializer.kt @@ -16,6 +16,7 @@ import de.justjanne.libquassel.protocol.variant.QVariantList import de.justjanne.libquassel.protocol.variant.into import de.justjanne.libquassel.protocol.variant.qVariant import org.threeten.bp.Instant +import org.threeten.bp.ZoneOffset /** * Serializer for [SignalProxyMessage.HeartBeatReply] @@ -29,6 +30,6 @@ object HeartBeatReplySerializer : SignalProxySerializer<SignalProxyMessage.Heart ) override fun deserialize(data: QVariantList) = SignalProxyMessage.HeartBeatReply( - data.getOrNull(1).into(Instant.EPOCH) + data.getOrNull(1).into(Instant.EPOCH.atOffset(ZoneOffset.UTC)).toInstant() ) } diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/InitDataSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/InitDataSerializer.kt index 3681fa9bc309148c4d12923b7e8bc8044d16f45d..fb030e195bdc7256dd2bbb1834d209264a6cf549 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/InitDataSerializer.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/InitDataSerializer.kt @@ -30,7 +30,7 @@ object InitDataSerializer : SignalProxySerializer<SignalProxyMessage.InitData> { qVariant(type, QtType.Int), qVariant(StringSerializerUtf8.serializeRaw(data.className), QtType.QByteArray), qVariant(StringSerializerUtf8.serializeRaw(data.objectName), QtType.QByteArray), - ) + data.initData.toVariantList() + ) + data.initData.toVariantList(byteBuffer = true) override fun deserialize(data: QVariantList) = SignalProxyMessage.InitData( StringSerializerUtf8.deserializeRaw(data.getOrNull(1).into<ByteBuffer>()), diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/common/BufferSyncer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/common/BufferSyncer.kt index 1db9f81185c5c0de1e3f683cea4333f3835b4138..d53dbf3b3dc12f13100790f4548c142efb83183a 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/common/BufferSyncer.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/common/BufferSyncer.kt @@ -28,7 +28,6 @@ import de.justjanne.libquassel.protocol.util.collections.pairs import de.justjanne.libquassel.protocol.util.update import de.justjanne.libquassel.protocol.variant.QVariantList import de.justjanne.libquassel.protocol.variant.QVariantMap -import de.justjanne.libquassel.protocol.variant.QVariant_ import de.justjanne.libquassel.protocol.variant.into import de.justjanne.libquassel.protocol.variant.qVariant diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/common/IrcUser.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/common/IrcUser.kt index 7870c59bca6b276727ba3c16820d7afdac714eca..6498c54c9ed13fb16afb7192f49b271954f0eaef 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/common/IrcUser.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/syncables/common/IrcUser.kt @@ -74,12 +74,12 @@ open class IrcUser( "account" to qVariant(account(), QtType.QString), "away" to qVariant(isAway(), QtType.Bool), "awayMessage" to qVariant(awayMessage(), QtType.QString), - "idleTime" to qVariant(idleTime(), QtType.QDateTime), - "loginTime" to qVariant(loginTime(), QtType.QDateTime), + "idleTime" to qVariant(idleTime().atOffset(ZoneOffset.UTC), QtType.QDateTime), + "loginTime" to qVariant(loginTime().atOffset(ZoneOffset.UTC), QtType.QDateTime), "server" to qVariant(server(), QtType.QString), "ircOperator" to qVariant(ircOperator(), QtType.QString), "lastAwayMessage" to qVariant(lastAwayMessageTime().epochSecond.toInt(), QtType.Int), - "lastAwayMessageTime" to qVariant(lastAwayMessageTime(), QtType.QDateTime), + "lastAwayMessageTime" to qVariant(lastAwayMessageTime().atOffset(ZoneOffset.UTC), QtType.QDateTime), "whoisServiceReply" to qVariant(whoisServiceReply(), QtType.QString), "suserHost" to qVariant(suserHost(), QtType.QString), "encrypted" to qVariant(isEncrypted(), QtType.Bool), diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/variant/QVariant.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/variant/QVariant.kt index 5022ca6299207abd1160bc45316c94d18c4e4998..38f03d7ee0e104ad74da966ed36bb9bda3c5584b 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/variant/QVariant.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/variant/QVariant.kt @@ -18,8 +18,6 @@ import de.justjanne.libquassel.protocol.serializers.PrimitiveSerializer import de.justjanne.libquassel.protocol.util.reflect.instanceof import de.justjanne.libquassel.protocol.util.reflect.subtype import java.nio.ByteBuffer -import org.threeten.bp.Instant -import org.threeten.bp.ZoneOffset /** * Simple alias for a generic QVariant type diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/variant/QVariantMap.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/variant/QVariantMap.kt index 421aa70ffebf1d2c1e4b86ae7d6e7b45417b01d8..ea5a49fc72e0b6385df0a8cb219f4053dc601feb 100644 --- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/variant/QVariantMap.kt +++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/variant/QVariantMap.kt @@ -10,6 +10,7 @@ package de.justjanne.libquassel.protocol.variant import de.justjanne.libquassel.protocol.models.types.QtType +import de.justjanne.libquassel.protocol.serializers.qt.StringSerializerUtf8 /** * Simple alias for a generic QVariantMap type @@ -19,7 +20,11 @@ typealias QVariantMap = Map<String, QVariant_> /** * Transform a QVariantMap into a QVariantList of interleaved keys and values */ -fun QVariantMap.toVariantList(): QVariantList = +fun QVariantMap.toVariantList(byteBuffer: Boolean = false): QVariantList = flatMap { (key, value) -> - listOf(qVariant(key, QtType.QString), value) + if (byteBuffer) { + listOf(qVariant(StringSerializerUtf8.serializeRaw(key), QtType.QByteArray), value) + } else { + listOf(qVariant(key, QtType.QString), value) + } } diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/InitDataSerializerTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/InitDataSerializerTest.kt index a92699cf93eeed2f95acdca6f5a88794ba064970..2be36307f89a783b06269590bf9a196272a7bf68 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/InitDataSerializerTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/serializers/signalproxy/InitDataSerializerTest.kt @@ -67,106 +67,78 @@ class InitDataSerializerTest { byteBufferOf( 0x00u, 0x00u, 0x00u, 0x45u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x00u, 0x04u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x4Eu, 0x65u, 0x74u, 0x77u, 0x6Fu, 0x72u, 0x6Bu, 0x00u, 0x00u, 0x00u, - 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x01u, 0x34u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x16u, - 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x77u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x6Bu, 0x00u, 0x4Eu, - 0x00u, 0x61u, 0x00u, 0x6Du, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x22u, 0x00u, - 0x3Cu, 0x00u, 0x6Eu, 0x00u, 0x6Fu, 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x69u, 0x00u, - 0x74u, 0x00u, 0x69u, 0x00u, 0x61u, 0x00u, 0x6Cu, 0x00u, 0x69u, 0x00u, 0x7Au, 0x00u, 0x65u, 0x00u, 0x64u, 0x00u, - 0x3Eu, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x1Au, 0x00u, 0x63u, 0x00u, 0x75u, 0x00u, 0x72u, - 0x00u, 0x72u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x76u, - 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, - 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x6Du, 0x00u, 0x79u, 0x00u, 0x4Eu, 0x00u, 0x69u, 0x00u, 0x63u, - 0x00u, 0x6Bu, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, - 0x00u, 0x00u, 0x00u, 0x0Eu, 0x00u, 0x6Cu, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x63u, - 0x00u, 0x79u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, - 0x00u, 0x00u, 0x00u, 0x1Cu, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x46u, - 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x76u, 0x00u, 0x65u, 0x00u, 0x72u, - 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x05u, 0x55u, 0x54u, 0x46u, 0x5Fu, 0x38u, 0x00u, 0x00u, - 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x20u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, - 0x63u, 0x00u, 0x46u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x45u, 0x00u, 0x6Eu, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, - 0x64u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x67u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x05u, - 0x55u, 0x54u, 0x46u, 0x5Fu, 0x38u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x20u, 0x00u, 0x63u, - 0x00u, 0x6Fu, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x46u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x44u, - 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x64u, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x67u, 0x00u, 0x00u, - 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x05u, 0x55u, 0x54u, 0x46u, 0x5Fu, 0x38u, 0x00u, 0x00u, 0x00u, 0x0Au, - 0x00u, 0x00u, 0x00u, 0x00u, 0x14u, 0x00u, 0x69u, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, - 0x69u, 0x00u, 0x74u, 0x00u, 0x79u, 0x00u, 0x49u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x7Fu, 0x00u, 0x00u, 0x00u, - 0x00u, 0x0Bu, 0x49u, 0x64u, 0x65u, 0x6Eu, 0x74u, 0x69u, 0x74u, 0x79u, 0x49u, 0x64u, 0x00u, 0xFFu, 0xFFu, 0xFFu, - 0xFFu, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, 0x69u, 0x00u, 0x73u, 0x00u, 0x43u, - 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x64u, - 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x1Eu, 0x00u, - 0x63u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, - 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x53u, 0x00u, 0x74u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, - 0x02u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x1Eu, 0x00u, - 0x75u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x52u, 0x00u, 0x61u, 0x00u, 0x6Eu, 0x00u, 0x64u, 0x00u, 0x6Fu, 0x00u, - 0x6Du, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x76u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x00u, 0x00u, - 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Eu, 0x00u, 0x70u, 0x00u, 0x65u, - 0x00u, 0x72u, 0x00u, 0x66u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x6Du, 0x00u, 0x00u, 0x00u, 0x0Bu, 0x00u, 0x00u, - 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x1Eu, 0x00u, 0x75u, 0x00u, 0x73u, - 0x00u, 0x65u, 0x00u, 0x41u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x49u, 0x00u, 0x64u, 0x00u, 0x65u, - 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x66u, 0x00u, 0x79u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, - 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x26u, 0x00u, 0x61u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, - 0x6Fu, 0x00u, 0x49u, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x66u, 0x00u, - 0x79u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x76u, 0x00u, 0x69u, 0x00u, 0x63u, 0x00u, 0x65u, 0x00u, - 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, - 0x28u, 0x00u, 0x61u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x49u, 0x00u, 0x64u, 0x00u, 0x65u, 0x00u, - 0x6Eu, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x66u, 0x00u, 0x79u, 0x00u, 0x50u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, - 0x73u, 0x00u, 0x77u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, - 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Eu, 0x00u, 0x75u, 0x00u, 0x73u, 0x00u, - 0x65u, 0x00u, 0x53u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x6Cu, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, - 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, 0x73u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x6Cu, - 0x00u, 0x41u, 0x00u, 0x63u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x75u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x00u, - 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x18u, - 0x00u, 0x73u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x6Cu, 0x00u, 0x50u, 0x00u, 0x61u, 0x00u, 0x73u, 0x00u, 0x73u, - 0x00u, 0x77u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, - 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x20u, 0x00u, 0x75u, 0x00u, 0x73u, 0x00u, 0x65u, - 0x00u, 0x41u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x6Fu, - 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, - 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x2Au, 0x00u, 0x61u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, - 0x6Fu, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, - 0x63u, 0x00u, 0x74u, 0x00u, 0x49u, 0x00u, 0x6Eu, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x76u, 0x00u, - 0x61u, 0x00u, 0x6Cu, 0x00u, 0x00u, 0x00u, 0x03u, 0x00u, 0x00u, 0x00u, 0x00u, 0x3Cu, 0x00u, 0x00u, 0x00u, 0x0Au, - 0x00u, 0x00u, 0x00u, 0x00u, 0x28u, 0x00u, 0x61u, 0x00u, 0x75u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x52u, 0x00u, - 0x65u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x74u, 0x00u, - 0x52u, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x72u, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, - 0x85u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x32u, 0x00u, 0x75u, 0x00u, - 0x6Eu, 0x00u, 0x6Cu, 0x00u, 0x69u, 0x00u, 0x6Du, 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x64u, 0x00u, - 0x52u, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, 0x6Fu, 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x63u, 0x00u, - 0x74u, 0x00u, 0x52u, 0x00u, 0x65u, 0x00u, 0x74u, 0x00u, 0x72u, 0x00u, 0x69u, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, - 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x1Cu, 0x00u, 0x72u, - 0x00u, 0x65u, 0x00u, 0x6Au, 0x00u, 0x6Fu, 0x00u, 0x69u, 0x00u, 0x6Eu, 0x00u, 0x43u, 0x00u, 0x68u, 0x00u, 0x61u, - 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, - 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x28u, 0x00u, 0x75u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, - 0x43u, 0x00u, 0x75u, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x6Fu, 0x00u, 0x6Du, 0x00u, 0x4Du, 0x00u, 0x65u, 0x00u, - 0x73u, 0x00u, 0x73u, 0x00u, 0x61u, 0x00u, 0x67u, 0x00u, 0x65u, 0x00u, 0x52u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, - 0x65u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x20u, - 0x00u, 0x6Du, 0x00u, 0x73u, 0x00u, 0x67u, 0x00u, 0x52u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x42u, - 0x00u, 0x75u, 0x00u, 0x72u, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x53u, 0x00u, 0x69u, 0x00u, 0x7Au, 0x00u, 0x65u, - 0x00u, 0x00u, 0x00u, 0x03u, 0x00u, 0x00u, 0x00u, 0x00u, 0x05u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, - 0x00u, 0x26u, 0x00u, 0x6Du, 0x00u, 0x73u, 0x00u, 0x67u, 0x00u, 0x52u, 0x00u, 0x61u, 0x00u, 0x74u, 0x00u, 0x65u, - 0x00u, 0x4Du, 0x00u, 0x65u, 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x61u, 0x00u, 0x67u, 0x00u, 0x65u, 0x00u, 0x44u, - 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x61u, 0x00u, 0x79u, 0x00u, 0x00u, 0x00u, 0x03u, 0x00u, 0x00u, 0x00u, 0x08u, - 0x98u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x28u, 0x00u, 0x75u, 0x00u, 0x6Eu, 0x00u, 0x6Cu, - 0x00u, 0x69u, 0x00u, 0x6Du, 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x65u, 0x00u, 0x64u, 0x00u, 0x4Du, 0x00u, 0x65u, - 0x00u, 0x73u, 0x00u, 0x73u, 0x00u, 0x61u, 0x00u, 0x67u, 0x00u, 0x65u, 0x00u, 0x52u, 0x00u, 0x61u, 0x00u, 0x74u, - 0x00u, 0x65u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, - 0x10u, 0x00u, 0x73u, 0x00u, 0x6Bu, 0x00u, 0x69u, 0x00u, 0x70u, 0x00u, 0x43u, 0x00u, 0x61u, 0x00u, 0x70u, 0x00u, - 0x73u, 0x00u, 0x00u, 0x00u, 0x0Bu, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, - 0x00u, 0x00u, 0x10u, 0x00u, 0x53u, 0x00u, 0x75u, 0x00u, 0x70u, 0x00u, 0x70u, 0x00u, 0x6Fu, 0x00u, 0x72u, 0x00u, - 0x74u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, - 0x00u, 0x00u, 0x00u, 0x00u, 0x14u, 0x00u, 0x53u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x76u, 0x00u, 0x65u, 0x00u, - 0x72u, 0x00u, 0x4Cu, 0x00u, 0x69u, 0x00u, 0x73u, 0x00u, 0x74u, 0x00u, 0x00u, 0x00u, 0x09u, 0x00u, 0x00u, 0x00u, - 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x43u, 0x00u, 0x61u, 0x00u, - 0x70u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, - 0x00u, 0x00u, 0x00u, 0x00u, 0x16u, 0x00u, 0x43u, 0x00u, 0x61u, 0x00u, 0x70u, 0x00u, 0x73u, 0x00u, 0x45u, 0x00u, - 0x6Eu, 0x00u, 0x61u, 0x00u, 0x62u, 0x00u, 0x6Cu, 0x00u, 0x65u, 0x00u, 0x64u, 0x00u, 0x00u, 0x00u, 0x09u, 0x00u, - 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x26u, 0x00u, 0x49u, 0x00u, - 0x72u, 0x00u, 0x63u, 0x00u, 0x55u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x73u, 0x00u, 0x41u, 0x00u, - 0x6Eu, 0x00u, 0x64u, 0x00u, 0x43u, 0x00u, 0x68u, 0x00u, 0x61u, 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, - 0x6Cu, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x0Au, - 0x00u, 0x55u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x72u, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, - 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, 0x43u, 0x00u, 0x68u, 0x00u, 0x61u, 0x00u, 0x6Eu, 0x00u, - 0x6Eu, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x01u, 0x34u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Bu, + 0x6Eu, 0x65u, 0x74u, 0x77u, 0x6Fu, 0x72u, 0x6Bu, 0x4Eu, 0x61u, 0x6Du, 0x65u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, + 0x00u, 0x00u, 0x00u, 0x22u, 0x00u, 0x3Cu, 0x00u, 0x6Eu, 0x00u, 0x6Fu, 0x00u, 0x74u, 0x00u, 0x20u, 0x00u, 0x69u, + 0x00u, 0x6Eu, 0x00u, 0x69u, 0x00u, 0x74u, 0x00u, 0x69u, 0x00u, 0x61u, 0x00u, 0x6Cu, 0x00u, 0x69u, 0x00u, 0x7Au, + 0x00u, 0x65u, 0x00u, 0x64u, 0x00u, 0x3Eu, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Du, 0x63u, + 0x75u, 0x72u, 0x72u, 0x65u, 0x6Eu, 0x74u, 0x53u, 0x65u, 0x72u, 0x76u, 0x65u, 0x72u, 0x00u, 0x00u, 0x00u, 0x0Au, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x06u, 0x6Du, 0x79u, + 0x4Eu, 0x69u, 0x63u, 0x6Bu, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x6Cu, 0x61u, 0x74u, 0x65u, 0x6Eu, 0x63u, 0x79u, 0x00u, 0x00u, 0x00u, + 0x02u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Eu, 0x63u, + 0x6Fu, 0x64u, 0x65u, 0x63u, 0x46u, 0x6Fu, 0x72u, 0x53u, 0x65u, 0x72u, 0x76u, 0x65u, 0x72u, 0x00u, 0x00u, 0x00u, + 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x05u, 0x55u, 0x54u, 0x46u, 0x5Fu, 0x38u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, + 0x00u, 0x00u, 0x00u, 0x10u, 0x63u, 0x6Fu, 0x64u, 0x65u, 0x63u, 0x46u, 0x6Fu, 0x72u, 0x45u, 0x6Eu, 0x63u, 0x6Fu, + 0x64u, 0x69u, 0x6Eu, 0x67u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x05u, 0x55u, 0x54u, 0x46u, + 0x5Fu, 0x38u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0x63u, 0x6Fu, 0x64u, 0x65u, 0x63u, + 0x46u, 0x6Fu, 0x72u, 0x44u, 0x65u, 0x63u, 0x6Fu, 0x64u, 0x69u, 0x6Eu, 0x67u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, + 0x00u, 0x00u, 0x00u, 0x05u, 0x55u, 0x54u, 0x46u, 0x5Fu, 0x38u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, + 0x00u, 0x0Au, 0x69u, 0x64u, 0x65u, 0x6Eu, 0x74u, 0x69u, 0x74u, 0x79u, 0x49u, 0x64u, 0x00u, 0x00u, 0x00u, 0x7Fu, + 0x00u, 0x00u, 0x00u, 0x00u, 0x0Bu, 0x49u, 0x64u, 0x65u, 0x6Eu, 0x74u, 0x69u, 0x74u, 0x79u, 0x49u, 0x64u, 0x00u, + 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Bu, 0x69u, 0x73u, 0x43u, + 0x6Fu, 0x6Eu, 0x6Eu, 0x65u, 0x63u, 0x74u, 0x65u, 0x64u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Fu, 0x63u, 0x6Fu, 0x6Eu, 0x6Eu, 0x65u, 0x63u, 0x74u, 0x69u, 0x6Fu, + 0x6Eu, 0x53u, 0x74u, 0x61u, 0x74u, 0x65u, 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Fu, 0x75u, 0x73u, 0x65u, 0x52u, 0x61u, 0x6Eu, 0x64u, 0x6Fu, + 0x6Du, 0x53u, 0x65u, 0x72u, 0x76u, 0x65u, 0x72u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x70u, 0x65u, 0x72u, 0x66u, 0x6Fu, 0x72u, 0x6Du, 0x00u, 0x00u, 0x00u, + 0x0Bu, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Fu, 0x75u, + 0x73u, 0x65u, 0x41u, 0x75u, 0x74u, 0x6Fu, 0x49u, 0x64u, 0x65u, 0x6Eu, 0x74u, 0x69u, 0x66u, 0x79u, 0x00u, 0x00u, + 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x13u, 0x61u, 0x75u, 0x74u, + 0x6Fu, 0x49u, 0x64u, 0x65u, 0x6Eu, 0x74u, 0x69u, 0x66u, 0x79u, 0x53u, 0x65u, 0x72u, 0x76u, 0x69u, 0x63u, 0x65u, + 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, + 0x00u, 0x14u, 0x61u, 0x75u, 0x74u, 0x6Fu, 0x49u, 0x64u, 0x65u, 0x6Eu, 0x74u, 0x69u, 0x66u, 0x79u, 0x50u, 0x61u, + 0x73u, 0x73u, 0x77u, 0x6Fu, 0x72u, 0x64u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x07u, 0x75u, 0x73u, 0x65u, 0x53u, 0x61u, 0x73u, 0x6Cu, 0x00u, + 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Bu, 0x73u, 0x61u, + 0x73u, 0x6Cu, 0x41u, 0x63u, 0x63u, 0x6Fu, 0x75u, 0x6Eu, 0x74u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x73u, 0x61u, 0x73u, 0x6Cu, 0x50u, + 0x61u, 0x73u, 0x73u, 0x77u, 0x6Fu, 0x72u, 0x64u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0x75u, 0x73u, 0x65u, 0x41u, 0x75u, 0x74u, 0x6Fu, + 0x52u, 0x65u, 0x63u, 0x6Fu, 0x6Eu, 0x6Eu, 0x65u, 0x63u, 0x74u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x15u, 0x61u, 0x75u, 0x74u, 0x6Fu, 0x52u, 0x65u, 0x63u, 0x6Fu, + 0x6Eu, 0x6Eu, 0x65u, 0x63u, 0x74u, 0x49u, 0x6Eu, 0x74u, 0x65u, 0x72u, 0x76u, 0x61u, 0x6Cu, 0x00u, 0x00u, 0x00u, + 0x03u, 0x00u, 0x00u, 0x00u, 0x00u, 0x3Cu, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x14u, 0x61u, + 0x75u, 0x74u, 0x6Fu, 0x52u, 0x65u, 0x63u, 0x6Fu, 0x6Eu, 0x6Eu, 0x65u, 0x63u, 0x74u, 0x52u, 0x65u, 0x74u, 0x72u, + 0x69u, 0x65u, 0x73u, 0x00u, 0x00u, 0x00u, 0x85u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, + 0x00u, 0x00u, 0x19u, 0x75u, 0x6Eu, 0x6Cu, 0x69u, 0x6Du, 0x69u, 0x74u, 0x65u, 0x64u, 0x52u, 0x65u, 0x63u, 0x6Fu, + 0x6Eu, 0x6Eu, 0x65u, 0x63u, 0x74u, 0x52u, 0x65u, 0x74u, 0x72u, 0x69u, 0x65u, 0x73u, 0x00u, 0x00u, 0x00u, 0x01u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Eu, 0x72u, 0x65u, 0x6Au, 0x6Fu, 0x69u, + 0x6Eu, 0x43u, 0x68u, 0x61u, 0x6Eu, 0x6Eu, 0x65u, 0x6Cu, 0x73u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x14u, 0x75u, 0x73u, 0x65u, 0x43u, 0x75u, 0x73u, 0x74u, 0x6Fu, + 0x6Du, 0x4Du, 0x65u, 0x73u, 0x73u, 0x61u, 0x67u, 0x65u, 0x52u, 0x61u, 0x74u, 0x65u, 0x00u, 0x00u, 0x00u, 0x01u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0x6Du, 0x73u, 0x67u, 0x52u, 0x61u, + 0x74u, 0x65u, 0x42u, 0x75u, 0x72u, 0x73u, 0x74u, 0x53u, 0x69u, 0x7Au, 0x65u, 0x00u, 0x00u, 0x00u, 0x03u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x05u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x13u, 0x6Du, 0x73u, 0x67u, + 0x52u, 0x61u, 0x74u, 0x65u, 0x4Du, 0x65u, 0x73u, 0x73u, 0x61u, 0x67u, 0x65u, 0x44u, 0x65u, 0x6Cu, 0x61u, 0x79u, + 0x00u, 0x00u, 0x00u, 0x03u, 0x00u, 0x00u, 0x00u, 0x08u, 0x98u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, + 0x00u, 0x14u, 0x75u, 0x6Eu, 0x6Cu, 0x69u, 0x6Du, 0x69u, 0x74u, 0x65u, 0x64u, 0x4Du, 0x65u, 0x73u, 0x73u, 0x61u, + 0x67u, 0x65u, 0x52u, 0x61u, 0x74u, 0x65u, 0x00u, 0x00u, 0x00u, 0x01u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, + 0x00u, 0x00u, 0x00u, 0x00u, 0x08u, 0x73u, 0x6Bu, 0x69u, 0x70u, 0x43u, 0x61u, 0x70u, 0x73u, 0x00u, 0x00u, 0x00u, + 0x0Bu, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x08u, 0x53u, + 0x75u, 0x70u, 0x70u, 0x6Fu, 0x72u, 0x74u, 0x73u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x53u, 0x65u, 0x72u, 0x76u, 0x65u, 0x72u, 0x4Cu, + 0x69u, 0x73u, 0x74u, 0x00u, 0x00u, 0x00u, 0x09u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, + 0x00u, 0x00u, 0x00u, 0x00u, 0x04u, 0x43u, 0x61u, 0x70u, 0x73u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x0Bu, 0x43u, 0x61u, 0x70u, 0x73u, 0x45u, + 0x6Eu, 0x61u, 0x62u, 0x6Cu, 0x65u, 0x64u, 0x00u, 0x00u, 0x00u, 0x09u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, + 0x00u, 0x00u, 0x0Cu, 0x00u, 0x00u, 0x00u, 0x00u, 0x13u, 0x49u, 0x72u, 0x63u, 0x55u, 0x73u, 0x65u, 0x72u, 0x73u, + 0x41u, 0x6Eu, 0x64u, 0x43u, 0x68u, 0x61u, 0x6Eu, 0x6Eu, 0x65u, 0x6Cu, 0x73u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, + 0x00u, 0x00u, 0x00u, 0x02u, 0x00u, 0x00u, 0x00u, 0x0Au, 0x00u, 0x55u, 0x00u, 0x73u, 0x00u, 0x65u, 0x00u, 0x72u, + 0x00u, 0x73u, 0x00u, 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x10u, 0x00u, + 0x43u, 0x00u, 0x68u, 0x00u, 0x61u, 0x00u, 0x6Eu, 0x00u, 0x6Eu, 0x00u, 0x65u, 0x00u, 0x6Cu, 0x00u, 0x73u, 0x00u, + 0x00u, 0x00u, 0x08u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, ) ) } diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/syncables/IrcChannelTest.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/syncables/IrcChannelTest.kt index 94e4d2ee760b30ac1acbcdd1cb46fb613b35d943..a9d305098b6059970d7e9687f1abf2e13af591f2 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/syncables/IrcChannelTest.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/syncables/IrcChannelTest.kt @@ -26,7 +26,6 @@ import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test import kotlin.random.Random -import kotlin.test.assertFalse class IrcChannelTest { @Test diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/matchers/TemporalMatcher.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/matchers/TemporalMatcher.kt index 068a516d614ef1ccaf902f93fca704adce9b6076..4234316f234d8c61dc4a5e2450f8b941c14f4357 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/matchers/TemporalMatcher.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/matchers/TemporalMatcher.kt @@ -15,6 +15,8 @@ import org.threeten.bp.LocalDate import org.threeten.bp.LocalDateTime import org.threeten.bp.LocalTime import org.threeten.bp.OffsetDateTime +import org.threeten.bp.ZoneId +import org.threeten.bp.ZoneOffset import org.threeten.bp.ZonedDateTime import org.threeten.bp.temporal.Temporal @@ -25,24 +27,46 @@ class TemporalMatcher<T : Temporal>( description?.appendText(expected.toString()) } - override fun matches(item: Any?): Boolean { - return when { - expected is ZonedDateTime && item is ZonedDateTime -> - expected == item - expected is ZonedDateTime && item is OffsetDateTime -> - expected.toOffsetDateTime() == item - expected is OffsetDateTime && item is OffsetDateTime -> - expected == item - expected is LocalDateTime && item is LocalDateTime -> - expected == item - expected is LocalTime && item is LocalTime -> - expected == item - expected is LocalDate && item is LocalDate -> - expected == item - expected is Instant && item is Instant -> - expected == item - else -> - false + private fun localDateTime(value: Any?): LocalDateTime? = when (value) { + is ZonedDateTime -> value.toLocalDateTime() + is OffsetDateTime -> value.toLocalDateTime() + is LocalDateTime -> value + is Instant -> value.atOffset(ZoneOffset.UTC).toLocalDateTime() + is LocalDate -> value.atTime(LocalTime.MIN) + is LocalTime -> value.atDate(LocalDate.MIN) + null -> null + else -> throw Exception("Unsupported date format: ${value::class.java.simpleName}") + } + + private fun offset(value: Any?): ZoneOffset = when (value) { + is ZonedDateTime -> value.offset + is OffsetDateTime -> value.offset + is LocalDateTime -> value.atZone(ZoneId.systemDefault()).toOffsetDateTime().offset + is LocalDate -> value.atTime(LocalTime.MIN).atZone(ZoneId.systemDefault()).toOffsetDateTime().offset + is LocalTime -> value.atDate(LocalDate.MIN).atZone(ZoneId.systemDefault()).toOffsetDateTime().offset + else -> ZoneOffset.UTC + } + + override fun describeMismatch(item: Any?, description: Description?) { + if (localDateTime(item) != localDateTime(expected)) { + description?.appendText("Expected local date time of ") + description?.appendValue(localDateTime(expected)) + description?.appendText(" but got") + description?.appendValue(localDateTime(item)) + description?.appendText(".") } + if (offset(item) != offset(expected)) { + description?.appendText("Expected zone offset of ") + description?.appendValue(offset(expected)) + description?.appendText(" but got ") + description?.appendValue(offset(item)) + description?.appendText(".") + } + super.describeMismatch(item, description) + } + + override fun matches(item: Any?): Boolean { + return localDateTime(expected) == localDateTime(item) && + (offset(expected) == offset(item)) } } diff --git a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/mocks/EmptySession.kt b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/mocks/EmptySession.kt index aa52533f18574315896cbd6a32d82802c6eed4e9..703e1d8a4babeb77ac23506187abbdfb0ef483a8 100644 --- a/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/mocks/EmptySession.kt +++ b/libquassel-protocol/src/test/kotlin/de/justjanne/libquassel/protocol/testutil/mocks/EmptySession.kt @@ -14,11 +14,13 @@ import de.justjanne.libquassel.protocol.models.BufferInfo import de.justjanne.libquassel.protocol.models.ids.IdentityId import de.justjanne.libquassel.protocol.models.ids.NetworkId import de.justjanne.libquassel.protocol.session.Session +import de.justjanne.libquassel.protocol.syncables.HeartBeatHandler import de.justjanne.libquassel.protocol.syncables.ObjectRepository import de.justjanne.libquassel.protocol.syncables.common.AliasManager import de.justjanne.libquassel.protocol.syncables.common.BacklogManager import de.justjanne.libquassel.protocol.syncables.common.BufferSyncer import de.justjanne.libquassel.protocol.syncables.common.BufferViewManager +import de.justjanne.libquassel.protocol.syncables.common.CertManager import de.justjanne.libquassel.protocol.syncables.common.CoreInfo import de.justjanne.libquassel.protocol.syncables.common.DccConfig import de.justjanne.libquassel.protocol.syncables.common.HighlightRuleManager @@ -27,21 +29,35 @@ import de.justjanne.libquassel.protocol.syncables.common.IgnoreListManager import de.justjanne.libquassel.protocol.syncables.common.IrcListHelper import de.justjanne.libquassel.protocol.syncables.common.Network import de.justjanne.libquassel.protocol.syncables.common.NetworkConfig +import de.justjanne.libquassel.protocol.syncables.common.RpcHandler import de.justjanne.libquassel.protocol.variant.QVariantMap open class EmptySession : Session { + override val heartBeatHandler = HeartBeatHandler() + override val rpcHandler = RpcHandler(this) final override val side = ProtocolSide.CLIENT final override val objectRepository = ObjectRepository() override val proxy = EmptySyncProxy() - override fun init(identities: List<QVariantMap>, bufferInfos: List<BufferInfo>, networkIds: List<NetworkId>) = Unit + override fun init( + identityInfo: List<QVariantMap>, + bufferInfos: List<BufferInfo>, + networkIds: List<NetworkId> + ) = Unit override fun network(id: NetworkId): Network? = null override fun addNetwork(id: NetworkId) = Unit override fun removeNetwork(id: NetworkId) = Unit + override fun networks() = emptySet<Network>() + override fun identity(id: IdentityId): Identity? = null override fun addIdentity(properties: QVariantMap) = Unit override fun removeIdentity(id: IdentityId) = Unit + override fun identities() = emptySet<Identity>() + + override fun certManager(id: IdentityId) = null + override fun certManagers() = emptySet<CertManager>() + override fun rename(className: String, oldName: String, newName: String) = Unit override val aliasManager = AliasManager(this)