blob: 1229ef746d0616116e83480e61efb154d7c83559 [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef MOJO_PUBLIC_INTERFACES_BINDINGS_TESTS_TEST_SYNC_METHODS_MOJOM_BLINK_H_
#define MOJO_PUBLIC_INTERFACES_BINDINGS_TESTS_TEST_SYNC_METHODS_MOJOM_BLINK_H_
#include <stdint.h>
#include <limits>
#include <type_traits>
#include <utility>
#include "base/callback.h"
#include "base/macros.h"
#include "base/optional.h"
#include "mojo/public/cpp/bindings/mojo_buildflags.h"
#if BUILDFLAG(MOJO_TRACE_ENABLED)
#include "base/trace_event/trace_event.h"
#endif
#include "mojo/public/cpp/bindings/clone_traits.h"
#include "mojo/public/cpp/bindings/equals_traits.h"
#include "mojo/public/cpp/bindings/lib/serialization.h"
#include "mojo/public/cpp/bindings/struct_ptr.h"
#include "mojo/public/cpp/bindings/struct_traits.h"
#include "mojo/public/cpp/bindings/union_traits.h"
#include "mojo/public/interfaces/bindings/tests/test_sync_methods.mojom-shared.h"
#include "mojo/public/interfaces/bindings/tests/test_sync_methods.mojom-blink-forward.h"
#include "mojo/public/cpp/bindings/lib/wtf_clone_equals_util.h"
#include "mojo/public/cpp/bindings/lib/wtf_hash_util.h"
#include "third_party/blink/renderer/platform/wtf/hash_functions.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
#include "mojo/public/cpp/bindings/associated_interface_ptr.h"
#include "mojo/public/cpp/bindings/associated_interface_ptr_info.h"
#include "mojo/public/cpp/bindings/associated_interface_request.h"
#include "mojo/public/cpp/bindings/interface_ptr.h"
#include "mojo/public/cpp/bindings/interface_request.h"
#include "mojo/public/cpp/bindings/lib/control_message_handler.h"
#include "mojo/public/cpp/bindings/raw_ptr_impl_ref_traits.h"
#include "mojo/public/cpp/bindings/thread_safe_interface_ptr.h"
#include "mojo/public/cpp/bindings/lib/native_enum_serialization.h"
#include "mojo/public/cpp/bindings/lib/native_struct_serialization.h"
#ifdef KYTHE_IS_RUNNING
#pragma kythe_inline_metadata "Metadata comment"
#endif
namespace mojo {
namespace test {
namespace blink {
class TestSyncCodeGenerationProxy;
template <typename ImplRefTraits>
class TestSyncCodeGenerationStub;
class TestSyncCodeGenerationRequestValidator;
class TestSyncCodeGenerationResponseValidator;
// @generated_from: mojo.test.TestSyncCodeGeneration
class TestSyncCodeGeneration
: public TestSyncCodeGenerationInterfaceBase {
public:
static const char Name_[];
static constexpr uint32_t Version_ = 0;
static constexpr bool PassesAssociatedKinds_ = false;
static constexpr bool HasSyncMethods_ = true;
using Base_ = TestSyncCodeGenerationInterfaceBase;
using Proxy_ = TestSyncCodeGenerationProxy;
template <typename ImplRefTraits>
using Stub_ = TestSyncCodeGenerationStub<ImplRefTraits>;
using RequestValidator_ = TestSyncCodeGenerationRequestValidator;
using ResponseValidator_ = TestSyncCodeGenerationResponseValidator;
enum MethodMinVersions : uint32_t {
kNoInputMinVersion = 0,
kNoOutputMinVersion = 0,
kNoInOutMinVersion = 0,
kHaveInOutMinVersion = 0,
};
virtual ~TestSyncCodeGeneration() {}
// Sync method. This signature is used by the client side; the service side
// should implement the signature with callback below.
// @generated_from: mojo.test.TestSyncCodeGeneration.NoInput
virtual bool NoInput(int32_t* out_result);
using NoInputCallback = base::OnceCallback<void(int32_t)>;
// @generated_from: mojo.test.TestSyncCodeGeneration.NoInput
virtual void NoInput(NoInputCallback callback) = 0;
// Sync method. This signature is used by the client side; the service side
// should implement the signature with callback below.
// @generated_from: mojo.test.TestSyncCodeGeneration.NoOutput
virtual bool NoOutput(int32_t value);
using NoOutputCallback = base::OnceCallback<void()>;
// @generated_from: mojo.test.TestSyncCodeGeneration.NoOutput
virtual void NoOutput(int32_t value, NoOutputCallback callback) = 0;
// Sync method. This signature is used by the client side; the service side
// should implement the signature with callback below.
// @generated_from: mojo.test.TestSyncCodeGeneration.NoInOut
virtual bool NoInOut();
using NoInOutCallback = base::OnceCallback<void()>;
// @generated_from: mojo.test.TestSyncCodeGeneration.NoInOut
virtual void NoInOut(NoInOutCallback callback) = 0;
// Sync method. This signature is used by the client side; the service side
// should implement the signature with callback below.
// @generated_from: mojo.test.TestSyncCodeGeneration.HaveInOut
virtual bool HaveInOut(int32_t value1, int32_t value2, int32_t* out_result1, int32_t* out_result2);
using HaveInOutCallback = base::OnceCallback<void(int32_t, int32_t)>;
// @generated_from: mojo.test.TestSyncCodeGeneration.HaveInOut
virtual void HaveInOut(int32_t value1, int32_t value2, HaveInOutCallback callback) = 0;
};
class TestSyncProxy;
template <typename ImplRefTraits>
class TestSyncStub;
class TestSyncRequestValidator;
class TestSyncResponseValidator;
// @generated_from: mojo.test.TestSync
class TestSync
: public TestSyncInterfaceBase {
public:
static const char Name_[];
static constexpr uint32_t Version_ = 0;
static constexpr bool PassesAssociatedKinds_ = false;
static constexpr bool HasSyncMethods_ = true;
using Base_ = TestSyncInterfaceBase;
using Proxy_ = TestSyncProxy;
template <typename ImplRefTraits>
using Stub_ = TestSyncStub<ImplRefTraits>;
using RequestValidator_ = TestSyncRequestValidator;
using ResponseValidator_ = TestSyncResponseValidator;
enum MethodMinVersions : uint32_t {
kPingMinVersion = 0,
kEchoMinVersion = 0,
kAsyncEchoMinVersion = 0,
};
virtual ~TestSync() {}
// Sync method. This signature is used by the client side; the service side
// should implement the signature with callback below.
// @generated_from: mojo.test.TestSync.Ping
virtual bool Ping();
using PingCallback = base::OnceCallback<void()>;
// @generated_from: mojo.test.TestSync.Ping
virtual void Ping(PingCallback callback) = 0;
// Sync method. This signature is used by the client side; the service side
// should implement the signature with callback below.
// @generated_from: mojo.test.TestSync.Echo
virtual bool Echo(int32_t value, int32_t* out_result);
using EchoCallback = base::OnceCallback<void(int32_t)>;
// @generated_from: mojo.test.TestSync.Echo
virtual void Echo(int32_t value, EchoCallback callback) = 0;
using AsyncEchoCallback = base::OnceCallback<void(int32_t)>;
// @generated_from: mojo.test.TestSync.AsyncEcho
virtual void AsyncEcho(int32_t value, AsyncEchoCallback callback) = 0;
};
class TestSyncMasterProxy;
template <typename ImplRefTraits>
class TestSyncMasterStub;
class TestSyncMasterRequestValidator;
class TestSyncMasterResponseValidator;
// @generated_from: mojo.test.TestSyncMaster
class TestSyncMaster
: public TestSyncMasterInterfaceBase {
public:
static const char Name_[];
static constexpr uint32_t Version_ = 0;
static constexpr bool PassesAssociatedKinds_ = true;
static constexpr bool HasSyncMethods_ = true;
using Base_ = TestSyncMasterInterfaceBase;
using Proxy_ = TestSyncMasterProxy;
template <typename ImplRefTraits>
using Stub_ = TestSyncMasterStub<ImplRefTraits>;
using RequestValidator_ = TestSyncMasterRequestValidator;
using ResponseValidator_ = TestSyncMasterResponseValidator;
enum MethodMinVersions : uint32_t {
kPingMinVersion = 0,
kEchoMinVersion = 0,
kAsyncEchoMinVersion = 0,
kSendRemoteMinVersion = 0,
kSendReceiverMinVersion = 0,
};
virtual ~TestSyncMaster() {}
// Sync method. This signature is used by the client side; the service side
// should implement the signature with callback below.
// @generated_from: mojo.test.TestSyncMaster.Ping
virtual bool Ping();
using PingCallback = base::OnceCallback<void()>;
// @generated_from: mojo.test.TestSyncMaster.Ping
virtual void Ping(PingCallback callback) = 0;
// Sync method. This signature is used by the client side; the service side
// should implement the signature with callback below.
// @generated_from: mojo.test.TestSyncMaster.Echo
virtual bool Echo(int32_t value, int32_t* out_result);
using EchoCallback = base::OnceCallback<void(int32_t)>;
// @generated_from: mojo.test.TestSyncMaster.Echo
virtual void Echo(int32_t value, EchoCallback callback) = 0;
using AsyncEchoCallback = base::OnceCallback<void(int32_t)>;
// @generated_from: mojo.test.TestSyncMaster.AsyncEcho
virtual void AsyncEcho(int32_t value, AsyncEchoCallback callback) = 0;
// @generated_from: mojo.test.TestSyncMaster.SendRemote
virtual void SendRemote(mojo::PendingAssociatedRemote<TestSync> remote) = 0;
// @generated_from: mojo.test.TestSyncMaster.SendReceiver
virtual void SendReceiver(mojo::PendingAssociatedReceiver<TestSync> receiver) = 0;
};
class TestSyncCodeGenerationProxy
: public TestSyncCodeGeneration {
public:
using InterfaceType = TestSyncCodeGeneration;
explicit TestSyncCodeGenerationProxy(mojo::MessageReceiverWithResponder* receiver);
bool NoInput(int32_t* out_result) final;
void NoInput(NoInputCallback callback) final;
bool NoOutput(int32_t value) final;
void NoOutput(int32_t value, NoOutputCallback callback) final;
bool NoInOut() final;
void NoInOut(NoInOutCallback callback) final;
bool HaveInOut(int32_t value1, int32_t value2, int32_t* out_result1, int32_t* out_result2) final;
void HaveInOut(int32_t value1, int32_t value2, HaveInOutCallback callback) final;
private:
mojo::MessageReceiverWithResponder* receiver_;
};
class TestSyncProxy
: public TestSync {
public:
using InterfaceType = TestSync;
explicit TestSyncProxy(mojo::MessageReceiverWithResponder* receiver);
bool Ping() final;
void Ping(PingCallback callback) final;
bool Echo(int32_t value, int32_t* out_result) final;
void Echo(int32_t value, EchoCallback callback) final;
void AsyncEcho(int32_t value, AsyncEchoCallback callback) final;
private:
mojo::MessageReceiverWithResponder* receiver_;
};
class TestSyncMasterProxy
: public TestSyncMaster {
public:
using InterfaceType = TestSyncMaster;
explicit TestSyncMasterProxy(mojo::MessageReceiverWithResponder* receiver);
bool Ping() final;
void Ping(PingCallback callback) final;
bool Echo(int32_t value, int32_t* out_result) final;
void Echo(int32_t value, EchoCallback callback) final;
void AsyncEcho(int32_t value, AsyncEchoCallback callback) final;
void SendRemote(mojo::PendingAssociatedRemote<TestSync> remote) final;
void SendReceiver(mojo::PendingAssociatedReceiver<TestSync> receiver) final;
private:
mojo::MessageReceiverWithResponder* receiver_;
};
class TestSyncCodeGenerationStubDispatch {
public:
static bool Accept(TestSyncCodeGeneration* impl, mojo::Message* message);
static bool AcceptWithResponder(
TestSyncCodeGeneration* impl,
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};
template <typename ImplRefTraits =
mojo::RawPtrImplRefTraits<TestSyncCodeGeneration>>
class TestSyncCodeGenerationStub
: public mojo::MessageReceiverWithResponderStatus {
public:
using ImplPointerType = typename ImplRefTraits::PointerType;
TestSyncCodeGenerationStub() {}
~TestSyncCodeGenerationStub() override {}
void set_sink(ImplPointerType sink) { sink_ = std::move(sink); }
ImplPointerType& sink() { return sink_; }
bool Accept(mojo::Message* message) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return TestSyncCodeGenerationStubDispatch::Accept(
ImplRefTraits::GetRawPointer(&sink_), message);
}
bool AcceptWithResponder(
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return TestSyncCodeGenerationStubDispatch::AcceptWithResponder(
ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
}
private:
ImplPointerType sink_;
};
class TestSyncStubDispatch {
public:
static bool Accept(TestSync* impl, mojo::Message* message);
static bool AcceptWithResponder(
TestSync* impl,
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};
template <typename ImplRefTraits =
mojo::RawPtrImplRefTraits<TestSync>>
class TestSyncStub
: public mojo::MessageReceiverWithResponderStatus {
public:
using ImplPointerType = typename ImplRefTraits::PointerType;
TestSyncStub() {}
~TestSyncStub() override {}
void set_sink(ImplPointerType sink) { sink_ = std::move(sink); }
ImplPointerType& sink() { return sink_; }
bool Accept(mojo::Message* message) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return TestSyncStubDispatch::Accept(
ImplRefTraits::GetRawPointer(&sink_), message);
}
bool AcceptWithResponder(
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return TestSyncStubDispatch::AcceptWithResponder(
ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
}
private:
ImplPointerType sink_;
};
class TestSyncMasterStubDispatch {
public:
static bool Accept(TestSyncMaster* impl, mojo::Message* message);
static bool AcceptWithResponder(
TestSyncMaster* impl,
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};
template <typename ImplRefTraits =
mojo::RawPtrImplRefTraits<TestSyncMaster>>
class TestSyncMasterStub
: public mojo::MessageReceiverWithResponderStatus {
public:
using ImplPointerType = typename ImplRefTraits::PointerType;
TestSyncMasterStub() {}
~TestSyncMasterStub() override {}
void set_sink(ImplPointerType sink) { sink_ = std::move(sink); }
ImplPointerType& sink() { return sink_; }
bool Accept(mojo::Message* message) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return TestSyncMasterStubDispatch::Accept(
ImplRefTraits::GetRawPointer(&sink_), message);
}
bool AcceptWithResponder(
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return TestSyncMasterStubDispatch::AcceptWithResponder(
ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
}
private:
ImplPointerType sink_;
};
class TestSyncCodeGenerationRequestValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class TestSyncRequestValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class TestSyncMasterRequestValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class TestSyncCodeGenerationResponseValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class TestSyncResponseValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class TestSyncMasterResponseValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
} // namespace blink
} // namespace test
} // namespace mojo
namespace mojo {
} // namespace mojo
#endif // MOJO_PUBLIC_INTERFACES_BINDINGS_TESTS_TEST_SYNC_METHODS_MOJOM_BLINK_H_
/* Metadata comment
eyJtZXRhIjogW3siZW5kIjogMjQyMSwgImJlZ2luIjogMjM5OSwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5UZXN0U3luY0NvZGVHZW5lcmF0aW9u
In19LCB7ImVuZCI6IDM0MTEsICJiZWdpbiI6IDM0MDQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9n
ZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjog
ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1v
am9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuVGVzdFN5bmNDb2RlR2VuZXJhdGlvbi5Ob0lu
cHV0In19LCB7ImVuZCI6IDM1ODIsICJiZWdpbiI6IDM1NzUsICJlZGdlIjogIiUva3l0aGUvZWRn
ZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVz
IjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjog
Im1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuVGVzdFN5bmNDb2RlR2VuZXJhdGlvbi5O
b0lucHV0In19LCB7ImVuZCI6IDM4MzgsICJiZWdpbiI6IDM4MzAsICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdl
IjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuVGVzdFN5bmNDb2RlR2VuZXJhdGlv
bi5Ob091dHB1dCJ9fSwgeyJlbmQiOiAzOTk5LCAiYmVnaW4iOiAzOTkxLCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5n
dWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlRlc3RTeW5jQ29kZUdlbmVy
YXRpb24uTm9PdXRwdXQifX0sIHsiZW5kIjogNDI2OSwgImJlZ2luIjogNDI2MiwgImVkZ2UiOiAi
JS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1l
IjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAi
bGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5UZXN0U3luY0NvZGVH
ZW5lcmF0aW9uLk5vSW5PdXQifX0sIHsiZW5kIjogNDQxNCwgImJlZ2luIjogNDQwNywgImVkZ2Ui
OiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZu
YW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMi
LCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5UZXN0U3luY0Nv
ZGVHZW5lcmF0aW9uLk5vSW5PdXQifX0sIHsiZW5kIjogNDY3MiwgImJlZ2luIjogNDY2MywgImVk
Z2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwg
InZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9z
cmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5UZXN0U3lu
Y0NvZGVHZW5lcmF0aW9uLkhhdmVJbk91dCJ9fSwgeyJlbmQiOiA0OTEzLCAiYmVnaW4iOiA0OTA0
LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9t
aXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlRl
c3RTeW5jQ29kZUdlbmVyYXRpb24uSGF2ZUluT3V0In19LCB7ImVuZCI6IDUxODEsICJiZWdpbiI6
IDUxNzMsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRl
c3QuVGVzdFN5bmMifX0sIHsiZW5kIjogNjAxOCwgImJlZ2luIjogNjAxNCwgImVkZ2UiOiAiJS9r
eXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjog
eyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFu
Z3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5UZXN0U3luYy5QaW5nIn19
LCB7ImVuZCI6IDYxNDAsICJiZWdpbiI6IDYxMzYsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5l
cmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNo
cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9t
IiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuVGVzdFN5bmMuUGluZyJ9fSwgeyJlbmQiOiA2Mzcx
LCAiYmVnaW4iOiA2MzY3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUi
OiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVz
b3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUi
OiAibW9qby50ZXN0LlRlc3RTeW5jLkVjaG8ifX0sIHsiZW5kIjogNjUzNCwgImJlZ2luIjogNjUz
MCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZp
bmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJv
bWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5U
ZXN0U3luYy5FY2hvIn19LCB7ImVuZCI6IDY3MTksICJiZWdpbiI6IDY3MTAsICJlZGdlIjogIiUv
a3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6
IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxh
bmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuVGVzdFN5bmMuQXN5bmNF
Y2hvIn19LCB7ImVuZCI6IDcwMDYsICJiZWdpbiI6IDY5OTIsICJlZGdlIjogIiUva3l0aGUvZWRn
ZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVz
IjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjog
Im1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuVGVzdFN5bmNNYXN0ZXIifX0sIHsiZW5k
IjogNzk1NCwgImJlZ2luIjogNzk1MCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIs
ICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2ln
bmF0dXJlIjogIm1vam8udGVzdC5UZXN0U3luY01hc3Rlci5QaW5nIn19LCB7ImVuZCI6IDgwODIs
ICJiZWdpbiI6IDgwNzgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6
ICJtb2pvLnRlc3QuVGVzdFN5bmNNYXN0ZXIuUGluZyJ9fSwgeyJlbmQiOiA4MzE5LCAiYmVnaW4i
OiA4MzE1LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9y
X2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t
L2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50
ZXN0LlRlc3RTeW5jTWFzdGVyLkVjaG8ifX0sIHsiZW5kIjogODQ4OCwgImJlZ2luIjogODQ4NCwg
ImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVz
IiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1
bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1vam8udGVzdC5UZXN0
U3luY01hc3Rlci5FY2hvIn19LCB7ImVuZCI6IDg2NzksICJiZWdpbiI6IDg2NzAsICJlZGdlIjog
IiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFt
ZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwg
Imxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuVGVzdFN5bmNNYXN0
ZXIuQXN5bmNFY2hvIn19LCB7ImVuZCI6IDg4MTMsICJiZWdpbiI6IDg4MDMsICJlZGdlIjogIiUv
a3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6
IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxh
bmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtb2pvLnRlc3QuVGVzdFN5bmNNYXN0ZXIu
U2VuZFJlbW90ZSJ9fSwgeyJlbmQiOiA4OTU2LCAiYmVnaW4iOiA4OTQ0LCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5n
dWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibW9qby50ZXN0LlRlc3RTeW5jTWFzdGVyLlNl
bmRSZWNlaXZlciJ9fV0sICJ0eXBlIjogImt5dGhlMCJ9
*/