blob: 757f5ed9d2883860b06bfcadb8264c5dfe08f97a [file] [log] [blame]
// services/device/public/mojom/hid.mojom.h is auto generated by mojom_bindings_generator.py, do not edit
// 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 SERVICES_DEVICE_PUBLIC_MOJOM_HID_MOJOM_H_
#define SERVICES_DEVICE_PUBLIC_MOJOM_HID_MOJOM_H_
#include <stdint.h>
#include <limits>
#include <type_traits>
#include <utility>
#include "third_party/abseil-cpp/absl/types/optional.h"
#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 "third_party/perfetto/include/perfetto/tracing/traced_value_forward.h"
#include "services/device/public/mojom/hid.mojom-shared.h"
#include "services/device/public/mojom/hid.mojom-forward.h"
#include <string>
#include <vector>
#include "mojo/public/cpp/bindings/lib/control_message_handler.h"
#include "mojo/public/cpp/bindings/raw_ptr_impl_ref_traits.h"
#include "base/token.h"
#ifdef KYTHE_IS_RUNNING
#pragma kythe_inline_metadata "Metadata comment"
#endif
namespace device {
namespace mojom {
class HidManagerClientProxy;
template <typename ImplRefTraits>
class HidManagerClientStub;
class HidManagerClientRequestValidator;
// @generated_from: device.mojom.HidManagerClient
class HidManagerClient
: public HidManagerClientInterfaceBase {
public:
static const char Name_[];
static std::pair<uint32_t, const void*> MessageToMethodInfo_(mojo::Message& message);
static const char* MessageToMethodName_(mojo::Message& message);
static constexpr base::Token Uuid_{ 1989324435969231918ULL,
11342538021778458647ULL };
static constexpr uint32_t Version_ = 2;
static constexpr bool PassesAssociatedKinds_ = false;
static constexpr bool HasSyncMethods_ = false;
static constexpr bool HasUninterruptableMethods_ = false;
using Base_ = HidManagerClientInterfaceBase;
using Proxy_ = HidManagerClientProxy;
template <typename ImplRefTraits>
using Stub_ = HidManagerClientStub<ImplRefTraits>;
using RequestValidator_ = HidManagerClientRequestValidator;
using ResponseValidator_ = mojo::PassThroughFilter;
enum MethodMinVersions : uint32_t {
kDeviceAddedMinVersion = 0,
kDeviceRemovedMinVersion = 0,
kDeviceChangedMinVersion = 2,
};
// crbug.com/1340245 - this causes binary size bloat on Fuchsia, and we're OK
// with not having this data in traces there.
#if !BUILDFLAG(IS_FUCHSIA)
struct DeviceAdded_Sym {
NOINLINE static void IPCSymbol();
};
struct DeviceRemoved_Sym {
NOINLINE static void IPCSymbol();
};
struct DeviceChanged_Sym {
NOINLINE static void IPCSymbol();
};
#endif // !BUILDFLAG(IS_FUCHSIA)
virtual ~HidManagerClient() = default;
// @generated_from: device.mojom.HidManagerClient.DeviceAdded
virtual void DeviceAdded(HidDeviceInfoPtr device_info) = 0;
// @generated_from: device.mojom.HidManagerClient.DeviceRemoved
virtual void DeviceRemoved(HidDeviceInfoPtr device_info) = 0;
// @generated_from: device.mojom.HidManagerClient.DeviceChanged
virtual void DeviceChanged(HidDeviceInfoPtr device_info) = 0;
};
class HidManagerProxy;
template <typename ImplRefTraits>
class HidManagerStub;
class HidManagerRequestValidator;
class HidManagerResponseValidator;
// @generated_from: device.mojom.HidManager
class HidManager
: public HidManagerInterfaceBase {
public:
static const char Name_[];
static std::pair<uint32_t, const void*> MessageToMethodInfo_(mojo::Message& message);
static const char* MessageToMethodName_(mojo::Message& message);
static constexpr base::Token Uuid_{ 11426502403248704253ULL,
11368651741212670902ULL };
static constexpr uint32_t Version_ = 2;
static constexpr bool PassesAssociatedKinds_ = true;
static constexpr bool HasSyncMethods_ = false;
static constexpr bool HasUninterruptableMethods_ = false;
using Base_ = HidManagerInterfaceBase;
using Proxy_ = HidManagerProxy;
template <typename ImplRefTraits>
using Stub_ = HidManagerStub<ImplRefTraits>;
using RequestValidator_ = HidManagerRequestValidator;
using ResponseValidator_ = HidManagerResponseValidator;
enum MethodMinVersions : uint32_t {
kGetDevicesAndSetClientMinVersion = 0,
kGetDevicesMinVersion = 0,
kConnectMinVersion = 0,
kAddReceiverMinVersion = 0,
};
// crbug.com/1340245 - this causes binary size bloat on Fuchsia, and we're OK
// with not having this data in traces there.
#if !BUILDFLAG(IS_FUCHSIA)
struct GetDevicesAndSetClient_Sym {
NOINLINE static void IPCSymbol();
};
struct GetDevices_Sym {
NOINLINE static void IPCSymbol();
};
struct Connect_Sym {
NOINLINE static void IPCSymbol();
};
struct AddReceiver_Sym {
NOINLINE static void IPCSymbol();
};
#endif // !BUILDFLAG(IS_FUCHSIA)
virtual ~HidManager() = default;
using GetDevicesAndSetClientCallback = base::OnceCallback<void(std::vector<HidDeviceInfoPtr>)>;
// @generated_from: device.mojom.HidManager.GetDevicesAndSetClient
virtual void GetDevicesAndSetClient(::mojo::PendingAssociatedRemote<HidManagerClient> client, GetDevicesAndSetClientCallback callback) = 0;
using GetDevicesCallback = base::OnceCallback<void(std::vector<HidDeviceInfoPtr>)>;
// @generated_from: device.mojom.HidManager.GetDevices
virtual void GetDevices(GetDevicesCallback callback) = 0;
using ConnectCallback = base::OnceCallback<void(::mojo::PendingRemote<HidConnection>)>;
// @generated_from: device.mojom.HidManager.Connect
virtual void Connect(const std::string& device_guid, ::mojo::PendingRemote<HidConnectionClient> connection_client, ::mojo::PendingRemote<HidConnectionWatcher> watcher, bool allow_protected_reports, bool allow_fido_reports, ConnectCallback callback) = 0;
// @generated_from: device.mojom.HidManager.AddReceiver
virtual void AddReceiver(::mojo::PendingReceiver<HidManager> receiver) = 0;
};
class HidConnectionProxy;
template <typename ImplRefTraits>
class HidConnectionStub;
class HidConnectionRequestValidator;
class HidConnectionResponseValidator;
// @generated_from: device.mojom.HidConnection
class HidConnection
: public HidConnectionInterfaceBase {
public:
static const char Name_[];
static std::pair<uint32_t, const void*> MessageToMethodInfo_(mojo::Message& message);
static const char* MessageToMethodName_(mojo::Message& message);
static constexpr base::Token Uuid_{ 1989324435969231918ULL,
11342538021778458647ULL };
static constexpr uint32_t Version_ = 0;
static constexpr bool PassesAssociatedKinds_ = false;
static constexpr bool HasSyncMethods_ = false;
static constexpr bool HasUninterruptableMethods_ = false;
using Base_ = HidConnectionInterfaceBase;
using Proxy_ = HidConnectionProxy;
template <typename ImplRefTraits>
using Stub_ = HidConnectionStub<ImplRefTraits>;
using RequestValidator_ = HidConnectionRequestValidator;
using ResponseValidator_ = HidConnectionResponseValidator;
enum MethodMinVersions : uint32_t {
kReadMinVersion = 0,
kWriteMinVersion = 0,
kGetFeatureReportMinVersion = 0,
kSendFeatureReportMinVersion = 0,
};
// crbug.com/1340245 - this causes binary size bloat on Fuchsia, and we're OK
// with not having this data in traces there.
#if !BUILDFLAG(IS_FUCHSIA)
struct Read_Sym {
NOINLINE static void IPCSymbol();
};
struct Write_Sym {
NOINLINE static void IPCSymbol();
};
struct GetFeatureReport_Sym {
NOINLINE static void IPCSymbol();
};
struct SendFeatureReport_Sym {
NOINLINE static void IPCSymbol();
};
#endif // !BUILDFLAG(IS_FUCHSIA)
virtual ~HidConnection() = default;
using ReadCallback = base::OnceCallback<void(bool, uint8_t, const absl::optional<std::vector<uint8_t>>&)>;
// @generated_from: device.mojom.HidConnection.Read
virtual void Read(ReadCallback callback) = 0;
using WriteCallback = base::OnceCallback<void(bool)>;
// @generated_from: device.mojom.HidConnection.Write
virtual void Write(uint8_t report_id, const std::vector<uint8_t>& buffer, WriteCallback callback) = 0;
using GetFeatureReportCallback = base::OnceCallback<void(bool, const absl::optional<std::vector<uint8_t>>&)>;
// @generated_from: device.mojom.HidConnection.GetFeatureReport
virtual void GetFeatureReport(uint8_t report_id, GetFeatureReportCallback callback) = 0;
using SendFeatureReportCallback = base::OnceCallback<void(bool)>;
// @generated_from: device.mojom.HidConnection.SendFeatureReport
virtual void SendFeatureReport(uint8_t report_id, const std::vector<uint8_t>& buffer, SendFeatureReportCallback callback) = 0;
};
class HidConnectionClientProxy;
template <typename ImplRefTraits>
class HidConnectionClientStub;
class HidConnectionClientRequestValidator;
// @generated_from: device.mojom.HidConnectionClient
class HidConnectionClient
: public HidConnectionClientInterfaceBase {
public:
static const char Name_[];
static std::pair<uint32_t, const void*> MessageToMethodInfo_(mojo::Message& message);
static const char* MessageToMethodName_(mojo::Message& message);
static constexpr base::Token Uuid_{ 1295147654301829780ULL,
11831959762393443171ULL };
static constexpr uint32_t Version_ = 0;
static constexpr bool PassesAssociatedKinds_ = false;
static constexpr bool HasSyncMethods_ = false;
static constexpr bool HasUninterruptableMethods_ = false;
using Base_ = HidConnectionClientInterfaceBase;
using Proxy_ = HidConnectionClientProxy;
template <typename ImplRefTraits>
using Stub_ = HidConnectionClientStub<ImplRefTraits>;
using RequestValidator_ = HidConnectionClientRequestValidator;
using ResponseValidator_ = mojo::PassThroughFilter;
enum MethodMinVersions : uint32_t {
kOnInputReportMinVersion = 0,
};
// crbug.com/1340245 - this causes binary size bloat on Fuchsia, and we're OK
// with not having this data in traces there.
#if !BUILDFLAG(IS_FUCHSIA)
struct OnInputReport_Sym {
NOINLINE static void IPCSymbol();
};
#endif // !BUILDFLAG(IS_FUCHSIA)
virtual ~HidConnectionClient() = default;
// @generated_from: device.mojom.HidConnectionClient.OnInputReport
virtual void OnInputReport(uint8_t report_id, const std::vector<uint8_t>& buffer) = 0;
};
class HidConnectionWatcherProxy;
template <typename ImplRefTraits>
class HidConnectionWatcherStub;
class HidConnectionWatcherRequestValidator;
// @generated_from: device.mojom.HidConnectionWatcher
class HidConnectionWatcher
: public HidConnectionWatcherInterfaceBase {
public:
static const char Name_[];
static std::pair<uint32_t, const void*> MessageToMethodInfo_(mojo::Message& message);
static const char* MessageToMethodName_(mojo::Message& message);
static constexpr base::Token Uuid_{ 10011626994008345335ULL,
11258823309103065552ULL };
static constexpr uint32_t Version_ = 0;
static constexpr bool PassesAssociatedKinds_ = false;
static constexpr bool HasSyncMethods_ = false;
static constexpr bool HasUninterruptableMethods_ = false;
using Base_ = HidConnectionWatcherInterfaceBase;
using Proxy_ = HidConnectionWatcherProxy;
template <typename ImplRefTraits>
using Stub_ = HidConnectionWatcherStub<ImplRefTraits>;
using RequestValidator_ = HidConnectionWatcherRequestValidator;
using ResponseValidator_ = mojo::PassThroughFilter;
enum MethodMinVersions : uint32_t {
};
// crbug.com/1340245 - this causes binary size bloat on Fuchsia, and we're OK
// with not having this data in traces there.
#if !BUILDFLAG(IS_FUCHSIA)
#endif // !BUILDFLAG(IS_FUCHSIA)
virtual ~HidConnectionWatcher() = default;
};
// @generated_from: device.mojom.HidManagerClient
class HidManagerClientProxy
: public HidManagerClient {
public:
using InterfaceType = HidManagerClient;
explicit HidManagerClientProxy(mojo::MessageReceiverWithResponder* receiver);
// @generated_from: device.mojom.HidManagerClient.DeviceAdded
void DeviceAdded(HidDeviceInfoPtr device_info) final;
// @generated_from: device.mojom.HidManagerClient.DeviceRemoved
void DeviceRemoved(HidDeviceInfoPtr device_info) final;
// @generated_from: device.mojom.HidManagerClient.DeviceChanged
void DeviceChanged(HidDeviceInfoPtr device_info) final;
private:
mojo::MessageReceiverWithResponder* receiver_;
};
// @generated_from: device.mojom.HidManager
class HidManagerProxy
: public HidManager {
public:
using InterfaceType = HidManager;
explicit HidManagerProxy(mojo::MessageReceiverWithResponder* receiver);
// @generated_from: device.mojom.HidManager.GetDevicesAndSetClient
void GetDevicesAndSetClient(::mojo::PendingAssociatedRemote<HidManagerClient> client, GetDevicesAndSetClientCallback callback) final;
// @generated_from: device.mojom.HidManager.GetDevices
void GetDevices(GetDevicesCallback callback) final;
// @generated_from: device.mojom.HidManager.Connect
void Connect(const std::string& device_guid, ::mojo::PendingRemote<HidConnectionClient> connection_client, ::mojo::PendingRemote<HidConnectionWatcher> watcher, bool allow_protected_reports, bool allow_fido_reports, ConnectCallback callback) final;
// @generated_from: device.mojom.HidManager.AddReceiver
void AddReceiver(::mojo::PendingReceiver<HidManager> receiver) final;
private:
mojo::MessageReceiverWithResponder* receiver_;
};
// @generated_from: device.mojom.HidConnection
class HidConnectionProxy
: public HidConnection {
public:
using InterfaceType = HidConnection;
explicit HidConnectionProxy(mojo::MessageReceiverWithResponder* receiver);
// @generated_from: device.mojom.HidConnection.Read
void Read(ReadCallback callback) final;
// @generated_from: device.mojom.HidConnection.Write
void Write(uint8_t report_id, const std::vector<uint8_t>& buffer, WriteCallback callback) final;
// @generated_from: device.mojom.HidConnection.GetFeatureReport
void GetFeatureReport(uint8_t report_id, GetFeatureReportCallback callback) final;
// @generated_from: device.mojom.HidConnection.SendFeatureReport
void SendFeatureReport(uint8_t report_id, const std::vector<uint8_t>& buffer, SendFeatureReportCallback callback) final;
private:
mojo::MessageReceiverWithResponder* receiver_;
};
// @generated_from: device.mojom.HidConnectionClient
class HidConnectionClientProxy
: public HidConnectionClient {
public:
using InterfaceType = HidConnectionClient;
explicit HidConnectionClientProxy(mojo::MessageReceiverWithResponder* receiver);
// @generated_from: device.mojom.HidConnectionClient.OnInputReport
void OnInputReport(uint8_t report_id, const std::vector<uint8_t>& buffer) final;
private:
mojo::MessageReceiverWithResponder* receiver_;
};
// @generated_from: device.mojom.HidConnectionWatcher
class HidConnectionWatcherProxy
: public HidConnectionWatcher {
public:
using InterfaceType = HidConnectionWatcher;
explicit HidConnectionWatcherProxy(mojo::MessageReceiverWithResponder* receiver);
private:
mojo::MessageReceiverWithResponder* receiver_;
};
class HidManagerClientStubDispatch {
public:
static bool Accept(HidManagerClient* impl, mojo::Message* message);
static bool AcceptWithResponder(
HidManagerClient* impl,
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};
template <typename ImplRefTraits =
mojo::RawPtrImplRefTraits<HidManagerClient>>
class HidManagerClientStub
: public mojo::MessageReceiverWithResponderStatus {
public:
using ImplPointerType = typename ImplRefTraits::PointerType;
HidManagerClientStub() = default;
~HidManagerClientStub() override = default;
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 HidManagerClientStubDispatch::Accept(
ImplRefTraits::GetRawPointer(&sink_), message);
}
bool AcceptWithResponder(
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return HidManagerClientStubDispatch::AcceptWithResponder(
ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
}
private:
ImplPointerType sink_;
};
class HidManagerStubDispatch {
public:
static bool Accept(HidManager* impl, mojo::Message* message);
static bool AcceptWithResponder(
HidManager* impl,
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};
template <typename ImplRefTraits =
mojo::RawPtrImplRefTraits<HidManager>>
class HidManagerStub
: public mojo::MessageReceiverWithResponderStatus {
public:
using ImplPointerType = typename ImplRefTraits::PointerType;
HidManagerStub() = default;
~HidManagerStub() override = default;
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 HidManagerStubDispatch::Accept(
ImplRefTraits::GetRawPointer(&sink_), message);
}
bool AcceptWithResponder(
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return HidManagerStubDispatch::AcceptWithResponder(
ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
}
private:
ImplPointerType sink_;
};
class HidConnectionStubDispatch {
public:
static bool Accept(HidConnection* impl, mojo::Message* message);
static bool AcceptWithResponder(
HidConnection* impl,
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};
template <typename ImplRefTraits =
mojo::RawPtrImplRefTraits<HidConnection>>
class HidConnectionStub
: public mojo::MessageReceiverWithResponderStatus {
public:
using ImplPointerType = typename ImplRefTraits::PointerType;
HidConnectionStub() = default;
~HidConnectionStub() override = default;
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 HidConnectionStubDispatch::Accept(
ImplRefTraits::GetRawPointer(&sink_), message);
}
bool AcceptWithResponder(
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return HidConnectionStubDispatch::AcceptWithResponder(
ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
}
private:
ImplPointerType sink_;
};
class HidConnectionClientStubDispatch {
public:
static bool Accept(HidConnectionClient* impl, mojo::Message* message);
static bool AcceptWithResponder(
HidConnectionClient* impl,
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};
template <typename ImplRefTraits =
mojo::RawPtrImplRefTraits<HidConnectionClient>>
class HidConnectionClientStub
: public mojo::MessageReceiverWithResponderStatus {
public:
using ImplPointerType = typename ImplRefTraits::PointerType;
HidConnectionClientStub() = default;
~HidConnectionClientStub() override = default;
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 HidConnectionClientStubDispatch::Accept(
ImplRefTraits::GetRawPointer(&sink_), message);
}
bool AcceptWithResponder(
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return HidConnectionClientStubDispatch::AcceptWithResponder(
ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
}
private:
ImplPointerType sink_;
};
class HidConnectionWatcherStubDispatch {
public:
static bool Accept(HidConnectionWatcher* impl, mojo::Message* message);
static bool AcceptWithResponder(
HidConnectionWatcher* impl,
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};
template <typename ImplRefTraits =
mojo::RawPtrImplRefTraits<HidConnectionWatcher>>
class HidConnectionWatcherStub
: public mojo::MessageReceiverWithResponderStatus {
public:
using ImplPointerType = typename ImplRefTraits::PointerType;
HidConnectionWatcherStub() = default;
~HidConnectionWatcherStub() override = default;
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 HidConnectionWatcherStubDispatch::Accept(
ImplRefTraits::GetRawPointer(&sink_), message);
}
bool AcceptWithResponder(
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return HidConnectionWatcherStubDispatch::AcceptWithResponder(
ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
}
private:
ImplPointerType sink_;
};
class HidManagerClientRequestValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class HidManagerRequestValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class HidConnectionRequestValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class HidConnectionClientRequestValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class HidConnectionWatcherRequestValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class HidManagerResponseValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class HidConnectionResponseValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
// @generated_from: device.mojom.HidUsageAndPage
class HidUsageAndPage {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<HidUsageAndPage, T>::value>;
using DataView = HidUsageAndPageDataView;
using Data_ = internal::HidUsageAndPage_Data;
template <typename... Args>
static HidUsageAndPagePtr New(Args&&... args) {
return HidUsageAndPagePtr(
absl::in_place, std::forward<Args>(args)...);
}
template <typename U>
static HidUsageAndPagePtr From(const U& u) {
return mojo::TypeConverter<HidUsageAndPagePtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, HidUsageAndPage>::Convert(*this);
}
HidUsageAndPage();
HidUsageAndPage(
uint16_t usage,
uint16_t usage_page);
~HidUsageAndPage();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = HidUsageAndPagePtr>
HidUsageAndPagePtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, HidUsageAndPage::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, HidUsageAndPage::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
size_t Hash(size_t seed) const;
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
HidUsageAndPage::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
HidUsageAndPage::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::HidUsageAndPage_UnserializedMessageContext<
UserType, HidUsageAndPage::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<HidUsageAndPage::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return HidUsageAndPage::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::HidUsageAndPage_UnserializedMessageContext<
UserType, HidUsageAndPage::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<HidUsageAndPage::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: device.mojom.HidUsageAndPage.usage
uint16_t usage;
// @generated_from: device.mojom.HidUsageAndPage.usage_page
uint16_t usage_page;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, HidUsageAndPage::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, HidUsageAndPage::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, HidUsageAndPage::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, HidUsageAndPage::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: device.mojom.HidReportItem
class HidReportItem {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<HidReportItem, T>::value>;
using DataView = HidReportItemDataView;
using Data_ = internal::HidReportItem_Data;
template <typename... Args>
static HidReportItemPtr New(Args&&... args) {
return HidReportItemPtr(
absl::in_place, std::forward<Args>(args)...);
}
template <typename U>
static HidReportItemPtr From(const U& u) {
return mojo::TypeConverter<HidReportItemPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, HidReportItem>::Convert(*this);
}
HidReportItem();
HidReportItem(
bool is_range,
bool is_constant,
bool is_variable,
bool is_relative,
bool wrap,
bool is_non_linear,
bool no_preferred_state,
bool has_null_position,
bool is_volatile,
bool is_buffered_bytes,
std::vector<HidUsageAndPagePtr> usages,
HidUsageAndPagePtr usage_minimum,
HidUsageAndPagePtr usage_maximum,
uint32_t designator_minimum,
uint32_t designator_maximum,
uint32_t string_minimum,
uint32_t string_maximum,
int32_t logical_minimum,
int32_t logical_maximum,
int32_t physical_minimum,
int32_t physical_maximum,
uint32_t unit_exponent,
uint32_t unit,
uint32_t report_size,
uint32_t report_count);
HidReportItem(const HidReportItem&) = delete;
HidReportItem& operator=(const HidReportItem&) = delete;
~HidReportItem();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = HidReportItemPtr>
HidReportItemPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, HidReportItem::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, HidReportItem::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
HidReportItem::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
HidReportItem::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::HidReportItem_UnserializedMessageContext<
UserType, HidReportItem::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<HidReportItem::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return HidReportItem::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::HidReportItem_UnserializedMessageContext<
UserType, HidReportItem::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<HidReportItem::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: device.mojom.HidReportItem.is_range
bool is_range;
// @generated_from: device.mojom.HidReportItem.is_constant
bool is_constant;
// @generated_from: device.mojom.HidReportItem.is_variable
bool is_variable;
// @generated_from: device.mojom.HidReportItem.is_relative
bool is_relative;
// @generated_from: device.mojom.HidReportItem.wrap
bool wrap;
// @generated_from: device.mojom.HidReportItem.is_non_linear
bool is_non_linear;
// @generated_from: device.mojom.HidReportItem.no_preferred_state
bool no_preferred_state;
// @generated_from: device.mojom.HidReportItem.has_null_position
bool has_null_position;
// @generated_from: device.mojom.HidReportItem.is_volatile
bool is_volatile;
// @generated_from: device.mojom.HidReportItem.is_buffered_bytes
bool is_buffered_bytes;
// @generated_from: device.mojom.HidReportItem.usages
std::vector<HidUsageAndPagePtr> usages;
// @generated_from: device.mojom.HidReportItem.usage_minimum
HidUsageAndPagePtr usage_minimum;
// @generated_from: device.mojom.HidReportItem.usage_maximum
HidUsageAndPagePtr usage_maximum;
// @generated_from: device.mojom.HidReportItem.designator_minimum
uint32_t designator_minimum;
// @generated_from: device.mojom.HidReportItem.designator_maximum
uint32_t designator_maximum;
// @generated_from: device.mojom.HidReportItem.string_minimum
uint32_t string_minimum;
// @generated_from: device.mojom.HidReportItem.string_maximum
uint32_t string_maximum;
// @generated_from: device.mojom.HidReportItem.logical_minimum
int32_t logical_minimum;
// @generated_from: device.mojom.HidReportItem.logical_maximum
int32_t logical_maximum;
// @generated_from: device.mojom.HidReportItem.physical_minimum
int32_t physical_minimum;
// @generated_from: device.mojom.HidReportItem.physical_maximum
int32_t physical_maximum;
// @generated_from: device.mojom.HidReportItem.unit_exponent
uint32_t unit_exponent;
// @generated_from: device.mojom.HidReportItem.unit
uint32_t unit;
// @generated_from: device.mojom.HidReportItem.report_size
uint32_t report_size;
// @generated_from: device.mojom.HidReportItem.report_count
uint32_t report_count;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, HidReportItem::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, HidReportItem::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, HidReportItem::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, HidReportItem::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: device.mojom.HidReportDescription
class HidReportDescription {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<HidReportDescription, T>::value>;
using DataView = HidReportDescriptionDataView;
using Data_ = internal::HidReportDescription_Data;
template <typename... Args>
static HidReportDescriptionPtr New(Args&&... args) {
return HidReportDescriptionPtr(
absl::in_place, std::forward<Args>(args)...);
}
template <typename U>
static HidReportDescriptionPtr From(const U& u) {
return mojo::TypeConverter<HidReportDescriptionPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, HidReportDescription>::Convert(*this);
}
HidReportDescription();
HidReportDescription(
uint8_t report_id,
std::vector<HidReportItemPtr> items);
HidReportDescription(const HidReportDescription&) = delete;
HidReportDescription& operator=(const HidReportDescription&) = delete;
~HidReportDescription();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = HidReportDescriptionPtr>
HidReportDescriptionPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, HidReportDescription::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, HidReportDescription::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
HidReportDescription::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
HidReportDescription::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::HidReportDescription_UnserializedMessageContext<
UserType, HidReportDescription::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<HidReportDescription::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return HidReportDescription::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::HidReportDescription_UnserializedMessageContext<
UserType, HidReportDescription::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<HidReportDescription::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: device.mojom.HidReportDescription.report_id
uint8_t report_id;
// @generated_from: device.mojom.HidReportDescription.items
std::vector<HidReportItemPtr> items;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, HidReportDescription::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, HidReportDescription::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, HidReportDescription::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, HidReportDescription::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: device.mojom.HidCollectionInfo
class HidCollectionInfo {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<HidCollectionInfo, T>::value>;
using DataView = HidCollectionInfoDataView;
using Data_ = internal::HidCollectionInfo_Data;
template <typename... Args>
static HidCollectionInfoPtr New(Args&&... args) {
return HidCollectionInfoPtr(
absl::in_place, std::forward<Args>(args)...);
}
template <typename U>
static HidCollectionInfoPtr From(const U& u) {
return mojo::TypeConverter<HidCollectionInfoPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, HidCollectionInfo>::Convert(*this);
}
HidCollectionInfo();
HidCollectionInfo(
HidUsageAndPagePtr usage,
std::vector<uint8_t> report_ids,
uint32_t collection_type,
std::vector<HidReportDescriptionPtr> input_reports,
std::vector<HidReportDescriptionPtr> output_reports,
std::vector<HidReportDescriptionPtr> feature_reports,
std::vector<HidCollectionInfoPtr> children);
HidCollectionInfo(const HidCollectionInfo&) = delete;
HidCollectionInfo& operator=(const HidCollectionInfo&) = delete;
~HidCollectionInfo();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = HidCollectionInfoPtr>
HidCollectionInfoPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, HidCollectionInfo::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, HidCollectionInfo::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
HidCollectionInfo::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
HidCollectionInfo::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::HidCollectionInfo_UnserializedMessageContext<
UserType, HidCollectionInfo::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<HidCollectionInfo::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return HidCollectionInfo::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::HidCollectionInfo_UnserializedMessageContext<
UserType, HidCollectionInfo::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<HidCollectionInfo::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: device.mojom.HidCollectionInfo.usage
HidUsageAndPagePtr usage;
// @generated_from: device.mojom.HidCollectionInfo.report_ids
std::vector<uint8_t> report_ids;
// @generated_from: device.mojom.HidCollectionInfo.collection_type
uint32_t collection_type;
// @generated_from: device.mojom.HidCollectionInfo.input_reports
std::vector<HidReportDescriptionPtr> input_reports;
// @generated_from: device.mojom.HidCollectionInfo.output_reports
std::vector<HidReportDescriptionPtr> output_reports;
// @generated_from: device.mojom.HidCollectionInfo.feature_reports
std::vector<HidReportDescriptionPtr> feature_reports;
// @generated_from: device.mojom.HidCollectionInfo.children
std::vector<HidCollectionInfoPtr> children;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, HidCollectionInfo::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, HidCollectionInfo::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, HidCollectionInfo::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, HidCollectionInfo::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: device.mojom.HidDeviceInfo
class HidDeviceInfo {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<HidDeviceInfo, T>::value>;
using DataView = HidDeviceInfoDataView;
using Data_ = internal::HidDeviceInfo_Data;
template <typename... Args>
static HidDeviceInfoPtr New(Args&&... args) {
return HidDeviceInfoPtr(
absl::in_place, std::forward<Args>(args)...);
}
template <typename U>
static HidDeviceInfoPtr From(const U& u) {
return mojo::TypeConverter<HidDeviceInfoPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, HidDeviceInfo>::Convert(*this);
}
HidDeviceInfo();
HidDeviceInfo(
const std::string& guid,
const std::string& physical_device_id,
uint16_t vendor_id,
uint16_t product_id,
const std::string& product_name,
const std::string& serial_number,
HidBusType bus_type,
std::vector<uint8_t> report_descriptor,
std::vector<HidCollectionInfoPtr> collections,
bool has_report_id,
uint64_t max_input_report_size,
uint64_t max_output_report_size,
uint64_t max_feature_report_size,
const std::string& device_node);
HidDeviceInfo(
const std::string& guid,
const std::string& physical_device_id,
uint16_t vendor_id,
uint16_t product_id,
const std::string& product_name,
const std::string& serial_number,
HidBusType bus_type,
std::vector<uint8_t> report_descriptor,
std::vector<HidCollectionInfoPtr> collections,
bool has_report_id,
uint64_t max_input_report_size,
uint64_t max_output_report_size,
uint64_t max_feature_report_size,
const std::string& device_node,
absl::optional<std::vector<uint8_t>> protected_input_report_ids,
absl::optional<std::vector<uint8_t>> protected_output_report_ids,
absl::optional<std::vector<uint8_t>> protected_feature_report_ids);
HidDeviceInfo(
const std::string& guid,
const std::string& physical_device_id,
uint16_t vendor_id,
uint16_t product_id,
const std::string& product_name,
const std::string& serial_number,
HidBusType bus_type,
std::vector<uint8_t> report_descriptor,
std::vector<HidCollectionInfoPtr> collections,
bool has_report_id,
uint64_t max_input_report_size,
uint64_t max_output_report_size,
uint64_t max_feature_report_size,
const std::string& device_node,
absl::optional<std::vector<uint8_t>> protected_input_report_ids,
absl::optional<std::vector<uint8_t>> protected_output_report_ids,
absl::optional<std::vector<uint8_t>> protected_feature_report_ids,
bool is_excluded_by_blocklist);
HidDeviceInfo(const HidDeviceInfo&) = delete;
HidDeviceInfo& operator=(const HidDeviceInfo&) = delete;
~HidDeviceInfo();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = HidDeviceInfoPtr>
HidDeviceInfoPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, HidDeviceInfo::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, HidDeviceInfo::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
HidDeviceInfo::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
HidDeviceInfo::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::HidDeviceInfo_UnserializedMessageContext<
UserType, HidDeviceInfo::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<HidDeviceInfo::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return HidDeviceInfo::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::HidDeviceInfo_UnserializedMessageContext<
UserType, HidDeviceInfo::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<HidDeviceInfo::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: device.mojom.HidDeviceInfo.guid
std::string guid;
// @generated_from: device.mojom.HidDeviceInfo.physical_device_id
std::string physical_device_id;
// @generated_from: device.mojom.HidDeviceInfo.vendor_id
uint16_t vendor_id;
// @generated_from: device.mojom.HidDeviceInfo.product_id
uint16_t product_id;
// @generated_from: device.mojom.HidDeviceInfo.product_name
std::string product_name;
// @generated_from: device.mojom.HidDeviceInfo.serial_number
std::string serial_number;
// @generated_from: device.mojom.HidDeviceInfo.bus_type
HidBusType bus_type;
// @generated_from: device.mojom.HidDeviceInfo.report_descriptor
std::vector<uint8_t> report_descriptor;
// @generated_from: device.mojom.HidDeviceInfo.collections
std::vector<HidCollectionInfoPtr> collections;
// @generated_from: device.mojom.HidDeviceInfo.has_report_id
bool has_report_id;
// @generated_from: device.mojom.HidDeviceInfo.max_input_report_size
uint64_t max_input_report_size;
// @generated_from: device.mojom.HidDeviceInfo.max_output_report_size
uint64_t max_output_report_size;
// @generated_from: device.mojom.HidDeviceInfo.max_feature_report_size
uint64_t max_feature_report_size;
// @generated_from: device.mojom.HidDeviceInfo.device_node
std::string device_node;
// @generated_from: device.mojom.HidDeviceInfo.protected_input_report_ids
absl::optional<std::vector<uint8_t>> protected_input_report_ids;
// @generated_from: device.mojom.HidDeviceInfo.protected_output_report_ids
absl::optional<std::vector<uint8_t>> protected_output_report_ids;
// @generated_from: device.mojom.HidDeviceInfo.protected_feature_report_ids
absl::optional<std::vector<uint8_t>> protected_feature_report_ids;
// @generated_from: device.mojom.HidDeviceInfo.is_excluded_by_blocklist
bool is_excluded_by_blocklist;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, HidDeviceInfo::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, HidDeviceInfo::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, HidDeviceInfo::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, HidDeviceInfo::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
template <typename StructPtrType>
HidUsageAndPagePtr HidUsageAndPage::Clone() const {
return New(
mojo::Clone(usage),
mojo::Clone(usage_page)
);
}
template <typename T, HidUsageAndPage::EnableIfSame<T>*>
bool HidUsageAndPage::Equals(const T& other_struct) const {
if (!mojo::Equals(this->usage, other_struct.usage))
return false;
if (!mojo::Equals(this->usage_page, other_struct.usage_page))
return false;
return true;
}
template <typename T, HidUsageAndPage::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.usage < rhs.usage)
return true;
if (rhs.usage < lhs.usage)
return false;
if (lhs.usage_page < rhs.usage_page)
return true;
if (rhs.usage_page < lhs.usage_page)
return false;
return false;
}
template <typename StructPtrType>
HidReportItemPtr HidReportItem::Clone() const {
return New(
mojo::Clone(is_range),
mojo::Clone(is_constant),
mojo::Clone(is_variable),
mojo::Clone(is_relative),
mojo::Clone(wrap),
mojo::Clone(is_non_linear),
mojo::Clone(no_preferred_state),
mojo::Clone(has_null_position),
mojo::Clone(is_volatile),
mojo::Clone(is_buffered_bytes),
mojo::Clone(usages),
mojo::Clone(usage_minimum),
mojo::Clone(usage_maximum),
mojo::Clone(designator_minimum),
mojo::Clone(designator_maximum),
mojo::Clone(string_minimum),
mojo::Clone(string_maximum),
mojo::Clone(logical_minimum),
mojo::Clone(logical_maximum),
mojo::Clone(physical_minimum),
mojo::Clone(physical_maximum),
mojo::Clone(unit_exponent),
mojo::Clone(unit),
mojo::Clone(report_size),
mojo::Clone(report_count)
);
}
template <typename T, HidReportItem::EnableIfSame<T>*>
bool HidReportItem::Equals(const T& other_struct) const {
if (!mojo::Equals(this->is_range, other_struct.is_range))
return false;
if (!mojo::Equals(this->is_constant, other_struct.is_constant))
return false;
if (!mojo::Equals(this->is_variable, other_struct.is_variable))
return false;
if (!mojo::Equals(this->is_relative, other_struct.is_relative))
return false;
if (!mojo::Equals(this->wrap, other_struct.wrap))
return false;
if (!mojo::Equals(this->is_non_linear, other_struct.is_non_linear))
return false;
if (!mojo::Equals(this->no_preferred_state, other_struct.no_preferred_state))
return false;
if (!mojo::Equals(this->has_null_position, other_struct.has_null_position))
return false;
if (!mojo::Equals(this->is_volatile, other_struct.is_volatile))
return false;
if (!mojo::Equals(this->is_buffered_bytes, other_struct.is_buffered_bytes))
return false;
if (!mojo::Equals(this->usages, other_struct.usages))
return false;
if (!mojo::Equals(this->usage_minimum, other_struct.usage_minimum))
return false;
if (!mojo::Equals(this->usage_maximum, other_struct.usage_maximum))
return false;
if (!mojo::Equals(this->designator_minimum, other_struct.designator_minimum))
return false;
if (!mojo::Equals(this->designator_maximum, other_struct.designator_maximum))
return false;
if (!mojo::Equals(this->string_minimum, other_struct.string_minimum))
return false;
if (!mojo::Equals(this->string_maximum, other_struct.string_maximum))
return false;
if (!mojo::Equals(this->logical_minimum, other_struct.logical_minimum))
return false;
if (!mojo::Equals(this->logical_maximum, other_struct.logical_maximum))
return false;
if (!mojo::Equals(this->physical_minimum, other_struct.physical_minimum))
return false;
if (!mojo::Equals(this->physical_maximum, other_struct.physical_maximum))
return false;
if (!mojo::Equals(this->unit_exponent, other_struct.unit_exponent))
return false;
if (!mojo::Equals(this->unit, other_struct.unit))
return false;
if (!mojo::Equals(this->report_size, other_struct.report_size))
return false;
if (!mojo::Equals(this->report_count, other_struct.report_count))
return false;
return true;
}
template <typename T, HidReportItem::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.is_range < rhs.is_range)
return true;
if (rhs.is_range < lhs.is_range)
return false;
if (lhs.is_constant < rhs.is_constant)
return true;
if (rhs.is_constant < lhs.is_constant)
return false;
if (lhs.is_variable < rhs.is_variable)
return true;
if (rhs.is_variable < lhs.is_variable)
return false;
if (lhs.is_relative < rhs.is_relative)
return true;
if (rhs.is_relative < lhs.is_relative)
return false;
if (lhs.wrap < rhs.wrap)
return true;
if (rhs.wrap < lhs.wrap)
return false;
if (lhs.is_non_linear < rhs.is_non_linear)
return true;
if (rhs.is_non_linear < lhs.is_non_linear)
return false;
if (lhs.no_preferred_state < rhs.no_preferred_state)
return true;
if (rhs.no_preferred_state < lhs.no_preferred_state)
return false;
if (lhs.has_null_position < rhs.has_null_position)
return true;
if (rhs.has_null_position < lhs.has_null_position)
return false;
if (lhs.is_volatile < rhs.is_volatile)
return true;
if (rhs.is_volatile < lhs.is_volatile)
return false;
if (lhs.is_buffered_bytes < rhs.is_buffered_bytes)
return true;
if (rhs.is_buffered_bytes < lhs.is_buffered_bytes)
return false;
if (lhs.usages < rhs.usages)
return true;
if (rhs.usages < lhs.usages)
return false;
if (lhs.usage_minimum < rhs.usage_minimum)
return true;
if (rhs.usage_minimum < lhs.usage_minimum)
return false;
if (lhs.usage_maximum < rhs.usage_maximum)
return true;
if (rhs.usage_maximum < lhs.usage_maximum)
return false;
if (lhs.designator_minimum < rhs.designator_minimum)
return true;
if (rhs.designator_minimum < lhs.designator_minimum)
return false;
if (lhs.designator_maximum < rhs.designator_maximum)
return true;
if (rhs.designator_maximum < lhs.designator_maximum)
return false;
if (lhs.string_minimum < rhs.string_minimum)
return true;
if (rhs.string_minimum < lhs.string_minimum)
return false;
if (lhs.string_maximum < rhs.string_maximum)
return true;
if (rhs.string_maximum < lhs.string_maximum)
return false;
if (lhs.logical_minimum < rhs.logical_minimum)
return true;
if (rhs.logical_minimum < lhs.logical_minimum)
return false;
if (lhs.logical_maximum < rhs.logical_maximum)
return true;
if (rhs.logical_maximum < lhs.logical_maximum)
return false;
if (lhs.physical_minimum < rhs.physical_minimum)
return true;
if (rhs.physical_minimum < lhs.physical_minimum)
return false;
if (lhs.physical_maximum < rhs.physical_maximum)
return true;
if (rhs.physical_maximum < lhs.physical_maximum)
return false;
if (lhs.unit_exponent < rhs.unit_exponent)
return true;
if (rhs.unit_exponent < lhs.unit_exponent)
return false;
if (lhs.unit < rhs.unit)
return true;
if (rhs.unit < lhs.unit)
return false;
if (lhs.report_size < rhs.report_size)
return true;
if (rhs.report_size < lhs.report_size)
return false;
if (lhs.report_count < rhs.report_count)
return true;
if (rhs.report_count < lhs.report_count)
return false;
return false;
}
template <typename StructPtrType>
HidReportDescriptionPtr HidReportDescription::Clone() const {
return New(
mojo::Clone(report_id),
mojo::Clone(items)
);
}
template <typename T, HidReportDescription::EnableIfSame<T>*>
bool HidReportDescription::Equals(const T& other_struct) const {
if (!mojo::Equals(this->report_id, other_struct.report_id))
return false;
if (!mojo::Equals(this->items, other_struct.items))
return false;
return true;
}
template <typename T, HidReportDescription::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.report_id < rhs.report_id)
return true;
if (rhs.report_id < lhs.report_id)
return false;
if (lhs.items < rhs.items)
return true;
if (rhs.items < lhs.items)
return false;
return false;
}
template <typename StructPtrType>
HidCollectionInfoPtr HidCollectionInfo::Clone() const {
return New(
mojo::Clone(usage),
mojo::Clone(report_ids),
mojo::Clone(collection_type),
mojo::Clone(input_reports),
mojo::Clone(output_reports),
mojo::Clone(feature_reports),
mojo::Clone(children)
);
}
template <typename T, HidCollectionInfo::EnableIfSame<T>*>
bool HidCollectionInfo::Equals(const T& other_struct) const {
if (!mojo::Equals(this->usage, other_struct.usage))
return false;
if (!mojo::Equals(this->report_ids, other_struct.report_ids))
return false;
if (!mojo::Equals(this->collection_type, other_struct.collection_type))
return false;
if (!mojo::Equals(this->input_reports, other_struct.input_reports))
return false;
if (!mojo::Equals(this->output_reports, other_struct.output_reports))
return false;
if (!mojo::Equals(this->feature_reports, other_struct.feature_reports))
return false;
if (!mojo::Equals(this->children, other_struct.children))
return false;
return true;
}
template <typename T, HidCollectionInfo::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.usage < rhs.usage)
return true;
if (rhs.usage < lhs.usage)
return false;
if (lhs.report_ids < rhs.report_ids)
return true;
if (rhs.report_ids < lhs.report_ids)
return false;
if (lhs.collection_type < rhs.collection_type)
return true;
if (rhs.collection_type < lhs.collection_type)
return false;
if (lhs.input_reports < rhs.input_reports)
return true;
if (rhs.input_reports < lhs.input_reports)
return false;
if (lhs.output_reports < rhs.output_reports)
return true;
if (rhs.output_reports < lhs.output_reports)
return false;
if (lhs.feature_reports < rhs.feature_reports)
return true;
if (rhs.feature_reports < lhs.feature_reports)
return false;
if (lhs.children < rhs.children)
return true;
if (rhs.children < lhs.children)
return false;
return false;
}
template <typename StructPtrType>
HidDeviceInfoPtr HidDeviceInfo::Clone() const {
return New(
mojo::Clone(guid),
mojo::Clone(physical_device_id),
mojo::Clone(vendor_id),
mojo::Clone(product_id),
mojo::Clone(product_name),
mojo::Clone(serial_number),
mojo::Clone(bus_type),
mojo::Clone(report_descriptor),
mojo::Clone(collections),
mojo::Clone(has_report_id),
mojo::Clone(max_input_report_size),
mojo::Clone(max_output_report_size),
mojo::Clone(max_feature_report_size),
mojo::Clone(device_node),
mojo::Clone(protected_input_report_ids),
mojo::Clone(protected_output_report_ids),
mojo::Clone(protected_feature_report_ids),
mojo::Clone(is_excluded_by_blocklist)
);
}
template <typename T, HidDeviceInfo::EnableIfSame<T>*>
bool HidDeviceInfo::Equals(const T& other_struct) const {
if (!mojo::Equals(this->guid, other_struct.guid))
return false;
if (!mojo::Equals(this->physical_device_id, other_struct.physical_device_id))
return false;
if (!mojo::Equals(this->vendor_id, other_struct.vendor_id))
return false;
if (!mojo::Equals(this->product_id, other_struct.product_id))
return false;
if (!mojo::Equals(this->product_name, other_struct.product_name))
return false;
if (!mojo::Equals(this->serial_number, other_struct.serial_number))
return false;
if (!mojo::Equals(this->bus_type, other_struct.bus_type))
return false;
if (!mojo::Equals(this->report_descriptor, other_struct.report_descriptor))
return false;
if (!mojo::Equals(this->collections, other_struct.collections))
return false;
if (!mojo::Equals(this->has_report_id, other_struct.has_report_id))
return false;
if (!mojo::Equals(this->max_input_report_size, other_struct.max_input_report_size))
return false;
if (!mojo::Equals(this->max_output_report_size, other_struct.max_output_report_size))
return false;
if (!mojo::Equals(this->max_feature_report_size, other_struct.max_feature_report_size))
return false;
if (!mojo::Equals(this->device_node, other_struct.device_node))
return false;
if (!mojo::Equals(this->protected_input_report_ids, other_struct.protected_input_report_ids))
return false;
if (!mojo::Equals(this->protected_output_report_ids, other_struct.protected_output_report_ids))
return false;
if (!mojo::Equals(this->protected_feature_report_ids, other_struct.protected_feature_report_ids))
return false;
if (!mojo::Equals(this->is_excluded_by_blocklist, other_struct.is_excluded_by_blocklist))
return false;
return true;
}
template <typename T, HidDeviceInfo::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.guid < rhs.guid)
return true;
if (rhs.guid < lhs.guid)
return false;
if (lhs.physical_device_id < rhs.physical_device_id)
return true;
if (rhs.physical_device_id < lhs.physical_device_id)
return false;
if (lhs.vendor_id < rhs.vendor_id)
return true;
if (rhs.vendor_id < lhs.vendor_id)
return false;
if (lhs.product_id < rhs.product_id)
return true;
if (rhs.product_id < lhs.product_id)
return false;
if (lhs.product_name < rhs.product_name)
return true;
if (rhs.product_name < lhs.product_name)
return false;
if (lhs.serial_number < rhs.serial_number)
return true;
if (rhs.serial_number < lhs.serial_number)
return false;
if (lhs.bus_type < rhs.bus_type)
return true;
if (rhs.bus_type < lhs.bus_type)
return false;
if (lhs.report_descriptor < rhs.report_descriptor)
return true;
if (rhs.report_descriptor < lhs.report_descriptor)
return false;
if (lhs.collections < rhs.collections)
return true;
if (rhs.collections < lhs.collections)
return false;
if (lhs.has_report_id < rhs.has_report_id)
return true;
if (rhs.has_report_id < lhs.has_report_id)
return false;
if (lhs.max_input_report_size < rhs.max_input_report_size)
return true;
if (rhs.max_input_report_size < lhs.max_input_report_size)
return false;
if (lhs.max_output_report_size < rhs.max_output_report_size)
return true;
if (rhs.max_output_report_size < lhs.max_output_report_size)
return false;
if (lhs.max_feature_report_size < rhs.max_feature_report_size)
return true;
if (rhs.max_feature_report_size < lhs.max_feature_report_size)
return false;
if (lhs.device_node < rhs.device_node)
return true;
if (rhs.device_node < lhs.device_node)
return false;
if (lhs.protected_input_report_ids < rhs.protected_input_report_ids)
return true;
if (rhs.protected_input_report_ids < lhs.protected_input_report_ids)
return false;
if (lhs.protected_output_report_ids < rhs.protected_output_report_ids)
return true;
if (rhs.protected_output_report_ids < lhs.protected_output_report_ids)
return false;
if (lhs.protected_feature_report_ids < rhs.protected_feature_report_ids)
return true;
if (rhs.protected_feature_report_ids < lhs.protected_feature_report_ids)
return false;
if (lhs.is_excluded_by_blocklist < rhs.is_excluded_by_blocklist)
return true;
if (rhs.is_excluded_by_blocklist < lhs.is_excluded_by_blocklist)
return false;
return false;
}
} // namespace mojom
} // namespace device
namespace mojo {
template <>
struct StructTraits<::device::mojom::HidUsageAndPage::DataView,
::device::mojom::HidUsageAndPagePtr> {
static bool IsNull(const ::device::mojom::HidUsageAndPagePtr& input) { return !input; }
static void SetToNull(::device::mojom::HidUsageAndPagePtr* output) { output->reset(); }
static decltype(::device::mojom::HidUsageAndPage::usage) usage(
const ::device::mojom::HidUsageAndPagePtr& input) {
return input->usage;
}
static decltype(::device::mojom::HidUsageAndPage::usage_page) usage_page(
const ::device::mojom::HidUsageAndPagePtr& input) {
return input->usage_page;
}
static bool Read(::device::mojom::HidUsageAndPage::DataView input, ::device::mojom::HidUsageAndPagePtr* output);
};
template <>
struct StructTraits<::device::mojom::HidReportItem::DataView,
::device::mojom::HidReportItemPtr> {
static bool IsNull(const ::device::mojom::HidReportItemPtr& input) { return !input; }
static void SetToNull(::device::mojom::HidReportItemPtr* output) { output->reset(); }
static decltype(::device::mojom::HidReportItem::is_range) is_range(
const ::device::mojom::HidReportItemPtr& input) {
return input->is_range;
}
static decltype(::device::mojom::HidReportItem::is_constant) is_constant(
const ::device::mojom::HidReportItemPtr& input) {
return input->is_constant;
}
static decltype(::device::mojom::HidReportItem::is_variable) is_variable(
const ::device::mojom::HidReportItemPtr& input) {
return input->is_variable;
}
static decltype(::device::mojom::HidReportItem::is_relative) is_relative(
const ::device::mojom::HidReportItemPtr& input) {
return input->is_relative;
}
static decltype(::device::mojom::HidReportItem::wrap) wrap(
const ::device::mojom::HidReportItemPtr& input) {
return input->wrap;
}
static decltype(::device::mojom::HidReportItem::is_non_linear) is_non_linear(
const ::device::mojom::HidReportItemPtr& input) {
return input->is_non_linear;
}
static decltype(::device::mojom::HidReportItem::no_preferred_state) no_preferred_state(
const ::device::mojom::HidReportItemPtr& input) {
return input->no_preferred_state;
}
static decltype(::device::mojom::HidReportItem::has_null_position) has_null_position(
const ::device::mojom::HidReportItemPtr& input) {
return input->has_null_position;
}
static decltype(::device::mojom::HidReportItem::is_volatile) is_volatile(
const ::device::mojom::HidReportItemPtr& input) {
return input->is_volatile;
}
static decltype(::device::mojom::HidReportItem::is_buffered_bytes) is_buffered_bytes(
const ::device::mojom::HidReportItemPtr& input) {
return input->is_buffered_bytes;
}
static const decltype(::device::mojom::HidReportItem::usages)& usages(
const ::device::mojom::HidReportItemPtr& input) {
return input->usages;
}
static const decltype(::device::mojom::HidReportItem::usage_minimum)& usage_minimum(
const ::device::mojom::HidReportItemPtr& input) {
return input->usage_minimum;
}
static const decltype(::device::mojom::HidReportItem::usage_maximum)& usage_maximum(
const ::device::mojom::HidReportItemPtr& input) {
return input->usage_maximum;
}
static decltype(::device::mojom::HidReportItem::designator_minimum) designator_minimum(
const ::device::mojom::HidReportItemPtr& input) {
return input->designator_minimum;
}
static decltype(::device::mojom::HidReportItem::designator_maximum) designator_maximum(
const ::device::mojom::HidReportItemPtr& input) {
return input->designator_maximum;
}
static decltype(::device::mojom::HidReportItem::string_minimum) string_minimum(
const ::device::mojom::HidReportItemPtr& input) {
return input->string_minimum;
}
static decltype(::device::mojom::HidReportItem::string_maximum) string_maximum(
const ::device::mojom::HidReportItemPtr& input) {
return input->string_maximum;
}
static decltype(::device::mojom::HidReportItem::logical_minimum) logical_minimum(
const ::device::mojom::HidReportItemPtr& input) {
return input->logical_minimum;
}
static decltype(::device::mojom::HidReportItem::logical_maximum) logical_maximum(
const ::device::mojom::HidReportItemPtr& input) {
return input->logical_maximum;
}
static decltype(::device::mojom::HidReportItem::physical_minimum) physical_minimum(
const ::device::mojom::HidReportItemPtr& input) {
return input->physical_minimum;
}
static decltype(::device::mojom::HidReportItem::physical_maximum) physical_maximum(
const ::device::mojom::HidReportItemPtr& input) {
return input->physical_maximum;
}
static decltype(::device::mojom::HidReportItem::unit_exponent) unit_exponent(
const ::device::mojom::HidReportItemPtr& input) {
return input->unit_exponent;
}
static decltype(::device::mojom::HidReportItem::unit) unit(
const ::device::mojom::HidReportItemPtr& input) {
return input->unit;
}
static decltype(::device::mojom::HidReportItem::report_size) report_size(
const ::device::mojom::HidReportItemPtr& input) {
return input->report_size;
}
static decltype(::device::mojom::HidReportItem::report_count) report_count(
const ::device::mojom::HidReportItemPtr& input) {
return input->report_count;
}
static bool Read(::device::mojom::HidReportItem::DataView input, ::device::mojom::HidReportItemPtr* output);
};
template <>
struct StructTraits<::device::mojom::HidReportDescription::DataView,
::device::mojom::HidReportDescriptionPtr> {
static bool IsNull(const ::device::mojom::HidReportDescriptionPtr& input) { return !input; }
static void SetToNull(::device::mojom::HidReportDescriptionPtr* output) { output->reset(); }
static decltype(::device::mojom::HidReportDescription::report_id) report_id(
const ::device::mojom::HidReportDescriptionPtr& input) {
return input->report_id;
}
static const decltype(::device::mojom::HidReportDescription::items)& items(
const ::device::mojom::HidReportDescriptionPtr& input) {
return input->items;
}
static bool Read(::device::mojom::HidReportDescription::DataView input, ::device::mojom::HidReportDescriptionPtr* output);
};
template <>
struct StructTraits<::device::mojom::HidCollectionInfo::DataView,
::device::mojom::HidCollectionInfoPtr> {
static bool IsNull(const ::device::mojom::HidCollectionInfoPtr& input) { return !input; }
static void SetToNull(::device::mojom::HidCollectionInfoPtr* output) { output->reset(); }
static const decltype(::device::mojom::HidCollectionInfo::usage)& usage(
const ::device::mojom::HidCollectionInfoPtr& input) {
return input->usage;
}
static const decltype(::device::mojom::HidCollectionInfo::report_ids)& report_ids(
const ::device::mojom::HidCollectionInfoPtr& input) {
return input->report_ids;
}
static decltype(::device::mojom::HidCollectionInfo::collection_type) collection_type(
const ::device::mojom::HidCollectionInfoPtr& input) {
return input->collection_type;
}
static const decltype(::device::mojom::HidCollectionInfo::input_reports)& input_reports(
const ::device::mojom::HidCollectionInfoPtr& input) {
return input->input_reports;
}
static const decltype(::device::mojom::HidCollectionInfo::output_reports)& output_reports(
const ::device::mojom::HidCollectionInfoPtr& input) {
return input->output_reports;
}
static const decltype(::device::mojom::HidCollectionInfo::feature_reports)& feature_reports(
const ::device::mojom::HidCollectionInfoPtr& input) {
return input->feature_reports;
}
static const decltype(::device::mojom::HidCollectionInfo::children)& children(
const ::device::mojom::HidCollectionInfoPtr& input) {
return input->children;
}
static bool Read(::device::mojom::HidCollectionInfo::DataView input, ::device::mojom::HidCollectionInfoPtr* output);
};
template <>
struct StructTraits<::device::mojom::HidDeviceInfo::DataView,
::device::mojom::HidDeviceInfoPtr> {
static bool IsNull(const ::device::mojom::HidDeviceInfoPtr& input) { return !input; }
static void SetToNull(::device::mojom::HidDeviceInfoPtr* output) { output->reset(); }
static const decltype(::device::mojom::HidDeviceInfo::guid)& guid(
const ::device::mojom::HidDeviceInfoPtr& input) {
return input->guid;
}
static const decltype(::device::mojom::HidDeviceInfo::physical_device_id)& physical_device_id(
const ::device::mojom::HidDeviceInfoPtr& input) {
return input->physical_device_id;
}
static decltype(::device::mojom::HidDeviceInfo::vendor_id) vendor_id(
const ::device::mojom::HidDeviceInfoPtr& input) {
return input->vendor_id;
}
static decltype(::device::mojom::HidDeviceInfo::product_id) product_id(
const ::device::mojom::HidDeviceInfoPtr& input) {
return input->product_id;
}
static const decltype(::device::mojom::HidDeviceInfo::product_name)& product_name(
const ::device::mojom::HidDeviceInfoPtr& input) {
return input->product_name;
}
static const decltype(::device::mojom::HidDeviceInfo::serial_number)& serial_number(
const ::device::mojom::HidDeviceInfoPtr& input) {
return input->serial_number;
}
static decltype(::device::mojom::HidDeviceInfo::bus_type) bus_type(
const ::device::mojom::HidDeviceInfoPtr& input) {
return input->bus_type;
}
static const decltype(::device::mojom::HidDeviceInfo::report_descriptor)& report_descriptor(
const ::device::mojom::HidDeviceInfoPtr& input) {
return input->report_descriptor;
}
static const decltype(::device::mojom::HidDeviceInfo::collections)& collections(
const ::device::mojom::HidDeviceInfoPtr& input) {
return input->collections;
}
static decltype(::device::mojom::HidDeviceInfo::has_report_id) has_report_id(
const ::device::mojom::HidDeviceInfoPtr& input) {
return input->has_report_id;
}
static decltype(::device::mojom::HidDeviceInfo::max_input_report_size) max_input_report_size(
const ::device::mojom::HidDeviceInfoPtr& input) {
return input->max_input_report_size;
}
static decltype(::device::mojom::HidDeviceInfo::max_output_report_size) max_output_report_size(
const ::device::mojom::HidDeviceInfoPtr& input) {
return input->max_output_report_size;
}
static decltype(::device::mojom::HidDeviceInfo::max_feature_report_size) max_feature_report_size(
const ::device::mojom::HidDeviceInfoPtr& input) {
return input->max_feature_report_size;
}
static const decltype(::device::mojom::HidDeviceInfo::device_node)& device_node(
const ::device::mojom::HidDeviceInfoPtr& input) {
return input->device_node;
}
static const decltype(::device::mojom::HidDeviceInfo::protected_input_report_ids)& protected_input_report_ids(
const ::device::mojom::HidDeviceInfoPtr& input) {
return input->protected_input_report_ids;
}
static const decltype(::device::mojom::HidDeviceInfo::protected_output_report_ids)& protected_output_report_ids(
const ::device::mojom::HidDeviceInfoPtr& input) {
return input->protected_output_report_ids;
}
static const decltype(::device::mojom::HidDeviceInfo::protected_feature_report_ids)& protected_feature_report_ids(
const ::device::mojom::HidDeviceInfoPtr& input) {
return input->protected_feature_report_ids;
}
static decltype(::device::mojom::HidDeviceInfo::is_excluded_by_blocklist) is_excluded_by_blocklist(
const ::device::mojom::HidDeviceInfoPtr& input) {
return input->is_excluded_by_blocklist;
}
static bool Read(::device::mojom::HidDeviceInfo::DataView input, ::device::mojom::HidDeviceInfoPtr* output);
};
} // namespace mojo
#endif // SERVICES_DEVICE_PUBLIC_MOJOM_HID_MOJOM_H_
/* Metadata comment
eyJtZXRhIjogW3siZW5kIjogMTU0NCwgImJlZ2luIjogMTUyOCwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5IaWRNYW5hZ2VyQ2xpZW50In19
LCB7ImVuZCI6IDMwODcsICJiZWdpbiI6IDMwNzYsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5l
cmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNo
cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9t
IiwgInNpZ25hdHVyZSI6ICJkZXZpY2UubW9qb20uSGlkTWFuYWdlckNsaWVudC5EZXZpY2VBZGRl
ZCJ9fSwgeyJlbmQiOiAzMjE5LCAiYmVnaW4iOiAzMjA2LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2Uv
Z2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6
ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJt
b2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLkhpZE1hbmFnZXJDbGllbnQuRGV2aWNl
UmVtb3ZlZCJ9fSwgeyJlbmQiOiAzMzUxLCAiYmVnaW4iOiAzMzM4LCAiZWRnZSI6ICIlL2t5dGhl
L2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNv
cnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLkhpZE1hbmFnZXJDbGllbnQu
RGV2aWNlQ2hhbmdlZCJ9fSwgeyJlbmQiOiAzNjA0LCAiYmVnaW4iOiAzNTk0LCAiZWRnZSI6ICIl
L2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUi
OiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJs
YW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLkhpZE1hbmFnZXIi
fX0sIHsiZW5kIjogNTMzNiwgImJlZ2luIjogNTMxNCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dl
bmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAi
Y2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9q
b20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5IaWRNYW5hZ2VyLkdldERldmljZXNBbmRT
ZXRDbGllbnQifX0sIHsiZW5kIjogNTYxMiwgImJlZ2luIjogNTYwMiwgImVkZ2UiOiAiJS9reXRo
ZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJj
b3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3Vh
Z2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5IaWRNYW5hZ2VyLkdldERl
dmljZXMifX0sIHsiZW5kIjogNTgxNiwgImJlZ2luIjogNTgwOSwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5IaWRNYW5hZ2VyLkNvbm5lY3Qi
fX0sIHsiZW5kIjogNjEzNiwgImJlZ2luIjogNjEyNSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dl
bmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAi
Y2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9q
b20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5IaWRNYW5hZ2VyLkFkZFJlY2VpdmVyIn19
LCB7ImVuZCI6IDY0MjMsICJiZWdpbiI6IDY0MTAsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5l
cmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNo
cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9t
IiwgInNpZ25hdHVyZSI6ICJkZXZpY2UubW9qb20uSGlkQ29ubmVjdGlvbiJ9fSwgeyJlbmQiOiA4
MTM4LCAiYmVnaW4iOiA4MTM0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5
cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29n
bGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1
cmUiOiAiZGV2aWNlLm1vam9tLkhpZENvbm5lY3Rpb24uUmVhZCJ9fSwgeyJlbmQiOiA4MzAxLCAi
YmVnaW4iOiA4Mjk2LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAi
YW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3Vy
Y2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAi
ZGV2aWNlLm1vam9tLkhpZENvbm5lY3Rpb24uV3JpdGUifX0sIHsiZW5kIjogODU5OCwgImJlZ2lu
IjogODU4MiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmlj
ZS5tb2pvbS5IaWRDb25uZWN0aW9uLkdldEZlYXR1cmVSZXBvcnQifX0sIHsiZW5kIjogODgyOCwg
ImJlZ2luIjogODgxMSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjog
ImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjog
ImRldmljZS5tb2pvbS5IaWRDb25uZWN0aW9uLlNlbmRGZWF0dXJlUmVwb3J0In19LCB7ImVuZCI6
IDkxNTIsICJiZWdpbiI6IDkxMzMsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAi
dHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdv
b2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25h
dHVyZSI6ICJkZXZpY2UubW9qb20uSGlkQ29ubmVjdGlvbkNsaWVudCJ9fSwgeyJlbmQiOiAxMDUx
MiwgImJlZ2luIjogMTA0OTksICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlw
ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVy
ZSI6ICJkZXZpY2UubW9qb20uSGlkQ29ubmVjdGlvbkNsaWVudC5PbklucHV0UmVwb3J0In19LCB7
ImVuZCI6IDEwODA1LCAiYmVnaW4iOiAxMDc4NSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVy
YXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hy
b21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20i
LCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5IaWRDb25uZWN0aW9uV2F0Y2hlciJ9fSwgeyJl
bmQiOiAxMjI5OSwgImJlZ2luIjogMTIyODgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0
ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwg
InNpZ25hdHVyZSI6ICJkZXZpY2UubW9qb20uSGlkTWFuYWdlckNsaWVudC5EZXZpY2VBZGRlZCJ9
fSwgeyJlbmQiOiAxMjQyNCwgImJlZ2luIjogMTI0MTEsICJlZGdlIjogIiUva3l0aGUvZWRnZS9n
ZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjog
ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1v
am9tIiwgInNpZ25hdHVyZSI6ICJkZXZpY2UubW9qb20uSGlkTWFuYWdlckNsaWVudC5EZXZpY2VS
ZW1vdmVkIn19LCB7ImVuZCI6IDEyNTQ5LCAiYmVnaW4iOiAxMjUzNiwgImVkZ2UiOiAiJS9reXRo
ZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJj
b3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3Vh
Z2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5IaWRNYW5hZ2VyQ2xpZW50
LkRldmljZUNoYW5nZWQifX0sIHsiZW5kIjogMTI5NjUsICJiZWdpbiI6IDEyOTQzLCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5h
bWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIs
ICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLkhpZE1hbmFn
ZXIuR2V0RGV2aWNlc0FuZFNldENsaWVudCJ9fSwgeyJlbmQiOiAxMzE0NywgImJlZ2luIjogMTMx
MzcsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVm
aW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hy
b21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJkZXZpY2UubW9q
b20uSGlkTWFuYWdlci5HZXREZXZpY2VzIn19LCB7ImVuZCI6IDEzMjUzLCAiYmVnaW4iOiAxMzI0
NiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZp
bmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJv
bWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pv
bS5IaWRNYW5hZ2VyLkNvbm5lY3QifX0sIHsiZW5kIjogMTM1NjYsICJiZWdpbiI6IDEzNTU1LCAi
ZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMi
LCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVt
L3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLkhp
ZE1hbmFnZXIuQWRkUmVjZWl2ZXIifX0sIHsiZW5kIjogMTM5ODAsICJiZWdpbiI6IDEzOTc2LCAi
ZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMi
LCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVt
L3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLkhp
ZENvbm5lY3Rpb24uUmVhZCJ9fSwgeyJlbmQiOiAxNDA3OSwgImJlZ2luIjogMTQwNzQsICJlZGdl
IjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2
bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3Jj
IiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJkZXZpY2UubW9qb20uSGlkQ29u
bmVjdGlvbi5Xcml0ZSJ9fSwgeyJlbmQiOiAxNDI1NiwgImJlZ2luIjogMTQyNDAsICJlZGdlIjog
IiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFt
ZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwg
Imxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJkZXZpY2UubW9qb20uSGlkQ29ubmVj
dGlvbi5HZXRGZWF0dXJlUmVwb3J0In19LCB7ImVuZCI6IDE0NDEwLCAiYmVnaW4iOiAxNDM5Mywg
ImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVz
IiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1
bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5I
aWRDb25uZWN0aW9uLlNlbmRGZWF0dXJlUmVwb3J0In19LCB7ImVuZCI6IDE0OTIzLCAiYmVnaW4i
OiAxNDkxMCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmlj
ZS5tb2pvbS5IaWRDb25uZWN0aW9uQ2xpZW50Lk9uSW5wdXRSZXBvcnQifX0sIHsiZW5kIjogMjI5
NjMsICJiZWdpbiI6IDIyOTQ4LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5
cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29n
bGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1
cmUiOiAiZGV2aWNlLm1vam9tLkhpZFVzYWdlQW5kUGFnZSJ9fSwgeyJlbmQiOiAyNjY4NCwgImJl
Z2luIjogMjY2NzksICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJh
bmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJj
ZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJk
ZXZpY2UubW9qb20uSGlkVXNhZ2VBbmRQYWdlLnVzYWdlIn19LCB7ImVuZCI6IDI2NzcwLCAiYmVn
aW4iOiAyNjc2MCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFu
Y2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNl
LmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRl
dmljZS5tb2pvbS5IaWRVc2FnZUFuZFBhZ2UudXNhZ2VfcGFnZSJ9fSwgeyJlbmQiOiAyNzgyMywg
ImJlZ2luIjogMjc4MTAsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6
ICJkZXZpY2UubW9qb20uSGlkUmVwb3J0SXRlbSJ9fSwgeyJlbmQiOiAzMjI1OSwgImJlZ2luIjog
MzIyNTEsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJkZXZpY2Uu
bW9qb20uSGlkUmVwb3J0SXRlbS5pc19yYW5nZSJ9fSwgeyJlbmQiOiAzMjM0MSwgImJlZ2luIjog
MzIzMzAsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJkZXZpY2Uu
bW9qb20uSGlkUmVwb3J0SXRlbS5pc19jb25zdGFudCJ9fSwgeyJlbmQiOiAzMjQyMywgImJlZ2lu
IjogMzI0MTIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJkZXZp
Y2UubW9qb20uSGlkUmVwb3J0SXRlbS5pc192YXJpYWJsZSJ9fSwgeyJlbmQiOiAzMjUwNSwgImJl
Z2luIjogMzI0OTQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJh
bmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJj
ZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJk
ZXZpY2UubW9qb20uSGlkUmVwb3J0SXRlbS5pc19yZWxhdGl2ZSJ9fSwgeyJlbmQiOiAzMjU3Mywg
ImJlZ2luIjogMzI1NjksICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6
ICJkZXZpY2UubW9qb20uSGlkUmVwb3J0SXRlbS53cmFwIn19LCB7ImVuZCI6IDMyNjU5LCAiYmVn
aW4iOiAzMjY0NiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFu
Y2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNl
LmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRl
dmljZS5tb2pvbS5IaWRSZXBvcnRJdGVtLmlzX25vbl9saW5lYXIifX0sIHsiZW5kIjogMzI3NTUs
ICJiZWdpbiI6IDMyNzM3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUi
OiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVz
b3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUi
OiAiZGV2aWNlLm1vam9tLkhpZFJlcG9ydEl0ZW0ubm9fcHJlZmVycmVkX3N0YXRlIn19LCB7ImVu
ZCI6IDMyODQ5LCAiYmVnaW4iOiAzMjgzMiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRl
cyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21p
dW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAi
c2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5IaWRSZXBvcnRJdGVtLmhhc19udWxsX3Bvc2l0aW9u
In19LCB7ImVuZCI6IDMyOTMxLCAiYmVnaW4iOiAzMjkyMCwgImVkZ2UiOiAiJS9reXRoZS9lZGdl
L2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMi
OiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAi
bW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5IaWRSZXBvcnRJdGVtLmlzX3ZvbGF0
aWxlIn19LCB7ImVuZCI6IDMzMDI1LCAiYmVnaW4iOiAzMzAwOCwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5IaWRSZXBvcnRJdGVtLmlzX2J1
ZmZlcmVkX2J5dGVzIn19LCB7ImVuZCI6IDMzMTI0LCAiYmVnaW4iOiAzMzExOCwgImVkZ2UiOiAi
JS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1l
IjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAi
bGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5IaWRSZXBvcnRJ
dGVtLnVzYWdlcyJ9fSwgeyJlbmQiOiAzMzIyNCwgImJlZ2luIjogMzMyMTEsICJlZGdlIjogIiUv
a3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6
IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxh
bmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJkZXZpY2UubW9qb20uSGlkUmVwb3J0SXRl
bS51c2FnZV9taW5pbXVtIn19LCB7ImVuZCI6IDMzMzI0LCAiYmVnaW4iOiAzMzMxMSwgImVkZ2Ui
OiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZu
YW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMi
LCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5IaWRSZXBv
cnRJdGVtLnVzYWdlX21heGltdW0ifX0sIHsiZW5kIjogMzM0MjQsICJiZWdpbiI6IDMzNDA2LCAi
ZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMi
LCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVt
L3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLkhp
ZFJlcG9ydEl0ZW0uZGVzaWduYXRvcl9taW5pbXVtIn19LCB7ImVuZCI6IDMzNTI0LCAiYmVnaW4i
OiAzMzUwNiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmlj
ZS5tb2pvbS5IaWRSZXBvcnRJdGVtLmRlc2lnbmF0b3JfbWF4aW11bSJ9fSwgeyJlbmQiOiAzMzYx
NiwgImJlZ2luIjogMzM2MDIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlw
ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVy
ZSI6ICJkZXZpY2UubW9qb20uSGlkUmVwb3J0SXRlbS5zdHJpbmdfbWluaW11bSJ9fSwgeyJlbmQi
OiAzMzcwOCwgImJlZ2luIjogMzM2OTQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMi
LCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVt
Lmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNp
Z25hdHVyZSI6ICJkZXZpY2UubW9qb20uSGlkUmVwb3J0SXRlbS5zdHJpbmdfbWF4aW11bSJ9fSwg
eyJlbmQiOiAzMzgwMSwgImJlZ2luIjogMzM3ODYsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5l
cmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNo
cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9t
IiwgInNpZ25hdHVyZSI6ICJkZXZpY2UubW9qb20uSGlkUmVwb3J0SXRlbS5sb2dpY2FsX21pbmlt
dW0ifX0sIHsiZW5kIjogMzM4OTQsICJiZWdpbiI6IDMzODc5LCAiZWRnZSI6ICIlL2t5dGhlL2Vk
Z2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1
cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6
ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLkhpZFJlcG9ydEl0ZW0ubG9naWNh
bF9tYXhpbXVtIn19LCB7ImVuZCI6IDMzOTg5LCAiYmVnaW4iOiAzMzk3MywgImVkZ2UiOiAiJS9r
eXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjog
eyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFu
Z3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5IaWRSZXBvcnRJdGVt
LnBoeXNpY2FsX21pbmltdW0ifX0sIHsiZW5kIjogMzQwODQsICJiZWdpbiI6IDM0MDY4LCAiZWRn
ZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAi
dm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3Ny
YyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLkhpZFJl
cG9ydEl0ZW0ucGh5c2ljYWxfbWF4aW11bSJ9fSwgeyJlbmQiOiAzNDE3NCwgImJlZ2luIjogMzQx
NjEsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVm
aW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hy
b21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJkZXZpY2UubW9q
b20uSGlkUmVwb3J0SXRlbS51bml0X2V4cG9uZW50In19LCB7ImVuZCI6IDM0MjQ2LCAiYmVnaW4i
OiAzNDI0MiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmlj
ZS5tb2pvbS5IaWRSZXBvcnRJdGVtLnVuaXQifX0sIHsiZW5kIjogMzQzMzIsICJiZWdpbiI6IDM0
MzIxLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1v
am9tLkhpZFJlcG9ydEl0ZW0ucmVwb3J0X3NpemUifX0sIHsiZW5kIjogMzQ0MjAsICJiZWdpbiI6
IDM0NDA4LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9y
X2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t
L2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNl
Lm1vam9tLkhpZFJlcG9ydEl0ZW0ucmVwb3J0X2NvdW50In19LCB7ImVuZCI6IDM1NDcyLCAiYmVn
aW4iOiAzNTQ1MiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFu
Y2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNl
LmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRl
dmljZS5tb2pvbS5IaWRSZXBvcnREZXNjcmlwdGlvbiJ9fSwgeyJlbmQiOiAzOTQ0MSwgImJlZ2lu
IjogMzk0MzIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJkZXZp
Y2UubW9qb20uSGlkUmVwb3J0RGVzY3JpcHRpb24ucmVwb3J0X2lkIn19LCB7ImVuZCI6IDM5NTQz
LCAiYmVnaW4iOiAzOTUzOCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBl
IjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xl
c291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJl
IjogImRldmljZS5tb2pvbS5IaWRSZXBvcnREZXNjcmlwdGlvbi5pdGVtcyJ9fSwgeyJlbmQiOiA0
MDYxNywgImJlZ2luIjogNDA2MDAsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAi
dHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdv
b2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25h
dHVyZSI6ICJkZXZpY2UubW9qb20uSGlkQ29sbGVjdGlvbkluZm8ifX0sIHsiZW5kIjogNDQ3NjQs
ICJiZWdpbiI6IDQ0NzU5LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUi
OiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVz
b3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUi
OiAiZGV2aWNlLm1vam9tLkhpZENvbGxlY3Rpb25JbmZvLnVzYWdlIn19LCB7ImVuZCI6IDQ0ODY0
LCAiYmVnaW4iOiA0NDg1NCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBl
IjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xl
c291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJl
IjogImRldmljZS5tb2pvbS5IaWRDb2xsZWN0aW9uSW5mby5yZXBvcnRfaWRzIn19LCB7ImVuZCI6
IDQ0OTYyLCAiYmVnaW4iOiA0NDk0NywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIs
ICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2ln
bmF0dXJlIjogImRldmljZS5tb2pvbS5IaWRDb2xsZWN0aW9uSW5mby5jb2xsZWN0aW9uX3R5cGUi
fX0sIHsiZW5kIjogNDUwODQsICJiZWdpbiI6IDQ1MDcxLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2Uv
Z2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6
ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJt
b2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLkhpZENvbGxlY3Rpb25JbmZvLmlucHV0
X3JlcG9ydHMifX0sIHsiZW5kIjogNDUyMDgsICJiZWdpbiI6IDQ1MTk0LCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5n
dWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLkhpZENvbGxlY3Rpb25J
bmZvLm91dHB1dF9yZXBvcnRzIn19LCB7ImVuZCI6IDQ1MzM0LCAiYmVnaW4iOiA0NTMxOSwgImVk
Z2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwg
InZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9z
cmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5IaWRD
b2xsZWN0aW9uSW5mby5mZWF0dXJlX3JlcG9ydHMifX0sIHsiZW5kIjogNDU0NDMsICJiZWdpbiI6
IDQ1NDM1LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9y
X2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t
L2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNl
Lm1vam9tLkhpZENvbGxlY3Rpb25JbmZvLmNoaWxkcmVuIn19LCB7ImVuZCI6IDQ2NDk3LCAiYmVn
aW4iOiA0NjQ4NCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFu
Y2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNl
LmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRl
dmljZS5tb2pvbS5IaWREZXZpY2VJbmZvIn19LCB7ImVuZCI6IDUyMjQxLCAiYmVnaW4iOiA1MjIz
NywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZp
bmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJv
bWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pv
bS5IaWREZXZpY2VJbmZvLmd1aWQifX0sIHsiZW5kIjogNTIzNDQsICJiZWdpbiI6IDUyMzI2LCAi
ZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMi
LCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVt
L3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLkhp
ZERldmljZUluZm8ucGh5c2ljYWxfZGV2aWNlX2lkIn19LCB7ImVuZCI6IDUyNDI2LCAiYmVnaW4i
OiA1MjQxNywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmlj
ZS5tb2pvbS5IaWREZXZpY2VJbmZvLnZlbmRvcl9pZCJ9fSwgeyJlbmQiOiA1MjUxMCwgImJlZ2lu
IjogNTI1MDAsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJkZXZp
Y2UubW9qb20uSGlkRGV2aWNlSW5mby5wcm9kdWN0X2lkIn19LCB7ImVuZCI6IDUyNjAxLCAiYmVn
aW4iOiA1MjU4OSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFu
Y2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNl
LmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRl
dmljZS5tb2pvbS5IaWREZXZpY2VJbmZvLnByb2R1Y3RfbmFtZSJ9fSwgeyJlbmQiOiA1MjY5NCwg
ImJlZ2luIjogNTI2ODEsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6
ICJkZXZpY2UubW9qb20uSGlkRGV2aWNlSW5mby5zZXJpYWxfbnVtYmVyIn19LCB7ImVuZCI6IDUy
Nzc2LCAiYmVnaW4iOiA1Mjc2OCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0
eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29v
Z2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0
dXJlIjogImRldmljZS5tb2pvbS5IaWREZXZpY2VJbmZvLmJ1c190eXBlIn19LCB7ImVuZCI6IDUy
ODg2LCAiYmVnaW4iOiA1Mjg2OSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0
eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29v
Z2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0
dXJlIjogImRldmljZS5tb2pvbS5IaWREZXZpY2VJbmZvLnJlcG9ydF9kZXNjcmlwdG9yIn19LCB7
ImVuZCI6IDUyOTk3LCAiYmVnaW4iOiA1Mjk4NiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVy
YXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hy
b21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20i
LCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5IaWREZXZpY2VJbmZvLmNvbGxlY3Rpb25zIn19
LCB7ImVuZCI6IDUzMDgzLCAiYmVnaW4iOiA1MzA3MCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dl
bmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAi
Y2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9q
b20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5IaWREZXZpY2VJbmZvLmhhc19yZXBvcnRf
aWQifX0sIHsiZW5kIjogNTMxODksICJiZWdpbiI6IDUzMTY4LCAiZWRnZSI6ICIlL2t5dGhlL2Vk
Z2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1
cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6
ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLkhpZERldmljZUluZm8ubWF4X2lu
cHV0X3JlcG9ydF9zaXplIn19LCB7ImVuZCI6IDUzMjk3LCAiYmVnaW4iOiA1MzI3NSwgImVkZ2Ui
OiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZu
YW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMi
LCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5tb2pvbS5IaWREZXZp
Y2VJbmZvLm1heF9vdXRwdXRfcmVwb3J0X3NpemUifX0sIHsiZW5kIjogNTM0MDcsICJiZWdpbiI6
IDUzMzg0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9y
X2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t
L2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNl
Lm1vam9tLkhpZERldmljZUluZm8ubWF4X2ZlYXR1cmVfcmVwb3J0X3NpemUifX0sIHsiZW5kIjog
NTM0OTYsICJiZWdpbiI6IDUzNDg1LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwg
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWdu
YXR1cmUiOiAiZGV2aWNlLm1vam9tLkhpZERldmljZUluZm8uZGV2aWNlX25vZGUifX0sIHsiZW5k
IjogNTM2NDAsICJiZWdpbiI6IDUzNjE0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVz
IiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1
bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJz
aWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLkhpZERldmljZUluZm8ucHJvdGVjdGVkX2lucHV0X3Jl
cG9ydF9pZHMifX0sIHsiZW5kIjogNTM3ODYsICJiZWdpbiI6IDUzNzU5LCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5n
dWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLkhpZERldmljZUluZm8u
cHJvdGVjdGVkX291dHB1dF9yZXBvcnRfaWRzIn19LCB7ImVuZCI6IDUzOTM0LCAiYmVnaW4iOiA1
MzkwNiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImRldmljZS5t
b2pvbS5IaWREZXZpY2VJbmZvLnByb3RlY3RlZF9mZWF0dXJlX3JlcG9ydF9pZHMifX0sIHsiZW5k
IjogNTQwNDIsICJiZWdpbiI6IDU0MDE4LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVz
IiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1
bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJz
aWduYXR1cmUiOiAiZGV2aWNlLm1vam9tLkhpZERldmljZUluZm8uaXNfZXhjbHVkZWRfYnlfYmxv
Y2tsaXN0In19XSwgInR5cGUiOiAia3l0aGUwIn0=
*/