// media/capture/mojom/video_capture.mojom-blink.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 MEDIA_CAPTURE_MOJOM_VIDEO_CAPTURE_MOJOM_BLINK_H_
#define MEDIA_CAPTURE_MOJOM_VIDEO_CAPTURE_MOJOM_BLINK_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 "media/capture/mojom/video_capture.mojom-shared.h"
#include "media/capture/mojom/video_capture.mojom-blink-forward.h"
#include "media/capture/mojom/video_capture_buffer.mojom-blink-forward.h"
#include "media/capture/mojom/video_capture_types.mojom-blink.h"
#include "ui/gfx/geometry/mojom/geometry.mojom-blink-forward.h"
#include "mojo/public/mojom/base/unguessable_token.mojom-blink.h"

#include "mojo/public/cpp/bindings/lib/wtf_clone_equals_util.h"
#include "mojo/public/cpp/bindings/lib/wtf_hash_util.h"
#include "third_party/blink/renderer/platform/wtf/hash_functions.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"

#include "mojo/public/cpp/bindings/lib/control_message_handler.h"
#include "mojo/public/cpp/bindings/raw_ptr_impl_ref_traits.h"


#include "third_party/blink/public/platform/web_common.h"

#ifdef KYTHE_IS_RUNNING
#pragma kythe_inline_metadata "Metadata comment"
#endif


namespace WTF {
struct media_mojom_internal_VideoCaptureState_DataHashFn {
  static unsigned GetHash(const ::media::mojom::VideoCaptureState& value) {
    using utype = std::underlying_type<::media::mojom::VideoCaptureState>::type;
    return DefaultHash<utype>::Hash().GetHash(static_cast<utype>(value));
  }
  static bool Equal(const ::media::mojom::VideoCaptureState& left, const ::media::mojom::VideoCaptureState& right) {
    return left == right;
  }
  static const bool safe_to_compare_to_empty_or_deleted = true;
};

template <>
struct HashTraits<::media::mojom::VideoCaptureState>
    : public GenericHashTraits<::media::mojom::VideoCaptureState> {
  static_assert(true,
                "-1000000 is a reserved enum value");
  static_assert(true,
                "-1000001 is a reserved enum value");
  static const bool kEmptyValueIsZero = false;
  static ::media::mojom::VideoCaptureState EmptyValue() { return static_cast<::media::mojom::VideoCaptureState>(-1000000); }
  static void ConstructDeletedValue(::media::mojom::VideoCaptureState& slot, bool) {
    slot = static_cast<::media::mojom::VideoCaptureState>(-1000001);
  }
  static bool IsDeletedValue(const ::media::mojom::VideoCaptureState& value) {
    return value == static_cast<::media::mojom::VideoCaptureState>(-1000001);
  }
};
}  // namespace WTF


namespace media {
namespace mojom {
namespace blink {

class VideoCaptureObserverProxy;

template <typename ImplRefTraits>
class VideoCaptureObserverStub;

class VideoCaptureObserverRequestValidator;


// @generated_from: media.mojom.VideoCaptureObserver
class BLINK_PLATFORM_EXPORT VideoCaptureObserver
    : public VideoCaptureObserverInterfaceBase {
 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 uint32_t Version_ = 0;
  static constexpr bool PassesAssociatedKinds_ = false;
  static constexpr bool HasSyncMethods_ = false;
  static constexpr bool HasUninterruptableMethods_ = false;

  using Base_ = VideoCaptureObserverInterfaceBase;
  using Proxy_ = VideoCaptureObserverProxy;

  template <typename ImplRefTraits>
  using Stub_ = VideoCaptureObserverStub<ImplRefTraits>;

  using RequestValidator_ = VideoCaptureObserverRequestValidator;
  using ResponseValidator_ = mojo::PassThroughFilter;
  enum MethodMinVersions : uint32_t {
    kOnStateChangedMinVersion = 0,
    kOnNewBufferMinVersion = 0,
    kOnBufferReadyMinVersion = 0,
    kOnBufferDestroyedMinVersion = 0,
    kOnNewCropVersionMinVersion = 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 OnStateChanged_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct OnNewBuffer_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct OnBufferReady_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct OnBufferDestroyed_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct OnNewCropVersion_Sym {
    NOINLINE static void IPCSymbol();
  };
#endif // !BUILDFLAG(IS_FUCHSIA)
  virtual ~VideoCaptureObserver() = default;

  
// @generated_from: media.mojom.VideoCaptureObserver.OnStateChanged
  virtual void OnStateChanged(VideoCaptureResultPtr result) = 0;

  
// @generated_from: media.mojom.VideoCaptureObserver.OnNewBuffer
  virtual void OnNewBuffer(int32_t buffer_id, ::media::mojom::blink::VideoBufferHandlePtr buffer_handle) = 0;

  
// @generated_from: media.mojom.VideoCaptureObserver.OnBufferReady
  virtual void OnBufferReady(::media::mojom::blink::ReadyBufferPtr buffer, WTF::Vector<::media::mojom::blink::ReadyBufferPtr> scaled_buffers) = 0;

  
// @generated_from: media.mojom.VideoCaptureObserver.OnBufferDestroyed
  virtual void OnBufferDestroyed(int32_t buffer_id) = 0;

  
// @generated_from: media.mojom.VideoCaptureObserver.OnNewCropVersion
  virtual void OnNewCropVersion(uint32_t crop_version) = 0;
};

class VideoCaptureHostProxy;

template <typename ImplRefTraits>
class VideoCaptureHostStub;

class VideoCaptureHostRequestValidator;
class VideoCaptureHostResponseValidator;


// @generated_from: media.mojom.VideoCaptureHost
class BLINK_PLATFORM_EXPORT VideoCaptureHost
    : public VideoCaptureHostInterfaceBase {
 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 uint32_t Version_ = 0;
  static constexpr bool PassesAssociatedKinds_ = false;
  static constexpr bool HasSyncMethods_ = false;
  static constexpr bool HasUninterruptableMethods_ = false;

  using Base_ = VideoCaptureHostInterfaceBase;
  using Proxy_ = VideoCaptureHostProxy;

  template <typename ImplRefTraits>
  using Stub_ = VideoCaptureHostStub<ImplRefTraits>;

  using RequestValidator_ = VideoCaptureHostRequestValidator;
  using ResponseValidator_ = VideoCaptureHostResponseValidator;
  enum MethodMinVersions : uint32_t {
    kStartMinVersion = 0,
    kStopMinVersion = 0,
    kPauseMinVersion = 0,
    kResumeMinVersion = 0,
    kRequestRefreshFrameMinVersion = 0,
    kReleaseBufferMinVersion = 0,
    kGetDeviceSupportedFormatsMinVersion = 0,
    kGetDeviceFormatsInUseMinVersion = 0,
    kOnFrameDroppedMinVersion = 0,
    kOnLogMinVersion = 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 Start_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct Stop_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct Pause_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct Resume_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct RequestRefreshFrame_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct ReleaseBuffer_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct GetDeviceSupportedFormats_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct GetDeviceFormatsInUse_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct OnFrameDropped_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct OnLog_Sym {
    NOINLINE static void IPCSymbol();
  };
#endif // !BUILDFLAG(IS_FUCHSIA)
  virtual ~VideoCaptureHost() = default;

  
// @generated_from: media.mojom.VideoCaptureHost.Start
  virtual void Start(const ::base::UnguessableToken& device_id, const ::base::UnguessableToken& session_id, const ::media::VideoCaptureParams& params, ::mojo::PendingRemote<VideoCaptureObserver> observer) = 0;

  
// @generated_from: media.mojom.VideoCaptureHost.Stop
  virtual void Stop(const ::base::UnguessableToken& device_id) = 0;

  
// @generated_from: media.mojom.VideoCaptureHost.Pause
  virtual void Pause(const ::base::UnguessableToken& device_id) = 0;

  
// @generated_from: media.mojom.VideoCaptureHost.Resume
  virtual void Resume(const ::base::UnguessableToken& device_id, const ::base::UnguessableToken& session_id, const ::media::VideoCaptureParams& params) = 0;

  
// @generated_from: media.mojom.VideoCaptureHost.RequestRefreshFrame
  virtual void RequestRefreshFrame(const ::base::UnguessableToken& device_id) = 0;

  
// @generated_from: media.mojom.VideoCaptureHost.ReleaseBuffer
  virtual void ReleaseBuffer(const ::base::UnguessableToken& device_id, int32_t buffer_id, const ::media::VideoCaptureFeedback& feedback) = 0;


  using GetDeviceSupportedFormatsCallback = base::OnceCallback<void(const WTF::Vector<::media::VideoCaptureFormat>&)>;
  
// @generated_from: media.mojom.VideoCaptureHost.GetDeviceSupportedFormats
  virtual void GetDeviceSupportedFormats(const ::base::UnguessableToken& device_id, const ::base::UnguessableToken& session_id, GetDeviceSupportedFormatsCallback callback) = 0;


  using GetDeviceFormatsInUseCallback = base::OnceCallback<void(const WTF::Vector<::media::VideoCaptureFormat>&)>;
  
// @generated_from: media.mojom.VideoCaptureHost.GetDeviceFormatsInUse
  virtual void GetDeviceFormatsInUse(const ::base::UnguessableToken& device_id, const ::base::UnguessableToken& session_id, GetDeviceFormatsInUseCallback callback) = 0;

  
// @generated_from: media.mojom.VideoCaptureHost.OnFrameDropped
  virtual void OnFrameDropped(const ::base::UnguessableToken& device_id, ::media::VideoCaptureFrameDropReason reason) = 0;

  
// @generated_from: media.mojom.VideoCaptureHost.OnLog
  virtual void OnLog(const ::base::UnguessableToken& device_id, const WTF::String& message) = 0;
};



// @generated_from: media.mojom.VideoCaptureObserver
class BLINK_PLATFORM_EXPORT VideoCaptureObserverProxy
    : public VideoCaptureObserver {
 public:
  using InterfaceType = VideoCaptureObserver;

  explicit VideoCaptureObserverProxy(mojo::MessageReceiverWithResponder* receiver);
  
// @generated_from: media.mojom.VideoCaptureObserver.OnStateChanged
  void OnStateChanged(VideoCaptureResultPtr result) final;
  
// @generated_from: media.mojom.VideoCaptureObserver.OnNewBuffer
  void OnNewBuffer(int32_t buffer_id, ::media::mojom::blink::VideoBufferHandlePtr buffer_handle) final;
  
// @generated_from: media.mojom.VideoCaptureObserver.OnBufferReady
  void OnBufferReady(::media::mojom::blink::ReadyBufferPtr buffer, WTF::Vector<::media::mojom::blink::ReadyBufferPtr> scaled_buffers) final;
  
// @generated_from: media.mojom.VideoCaptureObserver.OnBufferDestroyed
  void OnBufferDestroyed(int32_t buffer_id) final;
  
// @generated_from: media.mojom.VideoCaptureObserver.OnNewCropVersion
  void OnNewCropVersion(uint32_t crop_version) final;

 private:
  mojo::MessageReceiverWithResponder* receiver_;
};



// @generated_from: media.mojom.VideoCaptureHost
class BLINK_PLATFORM_EXPORT VideoCaptureHostProxy
    : public VideoCaptureHost {
 public:
  using InterfaceType = VideoCaptureHost;

  explicit VideoCaptureHostProxy(mojo::MessageReceiverWithResponder* receiver);
  
// @generated_from: media.mojom.VideoCaptureHost.Start
  void Start(const ::base::UnguessableToken& device_id, const ::base::UnguessableToken& session_id, const ::media::VideoCaptureParams& params, ::mojo::PendingRemote<VideoCaptureObserver> observer) final;
  
// @generated_from: media.mojom.VideoCaptureHost.Stop
  void Stop(const ::base::UnguessableToken& device_id) final;
  
// @generated_from: media.mojom.VideoCaptureHost.Pause
  void Pause(const ::base::UnguessableToken& device_id) final;
  
// @generated_from: media.mojom.VideoCaptureHost.Resume
  void Resume(const ::base::UnguessableToken& device_id, const ::base::UnguessableToken& session_id, const ::media::VideoCaptureParams& params) final;
  
// @generated_from: media.mojom.VideoCaptureHost.RequestRefreshFrame
  void RequestRefreshFrame(const ::base::UnguessableToken& device_id) final;
  
// @generated_from: media.mojom.VideoCaptureHost.ReleaseBuffer
  void ReleaseBuffer(const ::base::UnguessableToken& device_id, int32_t buffer_id, const ::media::VideoCaptureFeedback& feedback) final;
  
// @generated_from: media.mojom.VideoCaptureHost.GetDeviceSupportedFormats
  void GetDeviceSupportedFormats(const ::base::UnguessableToken& device_id, const ::base::UnguessableToken& session_id, GetDeviceSupportedFormatsCallback callback) final;
  
// @generated_from: media.mojom.VideoCaptureHost.GetDeviceFormatsInUse
  void GetDeviceFormatsInUse(const ::base::UnguessableToken& device_id, const ::base::UnguessableToken& session_id, GetDeviceFormatsInUseCallback callback) final;
  
// @generated_from: media.mojom.VideoCaptureHost.OnFrameDropped
  void OnFrameDropped(const ::base::UnguessableToken& device_id, ::media::VideoCaptureFrameDropReason reason) final;
  
// @generated_from: media.mojom.VideoCaptureHost.OnLog
  void OnLog(const ::base::UnguessableToken& device_id, const WTF::String& message) final;

 private:
  mojo::MessageReceiverWithResponder* receiver_;
};
class BLINK_PLATFORM_EXPORT VideoCaptureObserverStubDispatch {
 public:
  static bool Accept(VideoCaptureObserver* impl, mojo::Message* message);
  static bool AcceptWithResponder(
      VideoCaptureObserver* impl,
      mojo::Message* message,
      std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};

template <typename ImplRefTraits =
              mojo::RawPtrImplRefTraits<VideoCaptureObserver>>
class VideoCaptureObserverStub
    : public mojo::MessageReceiverWithResponderStatus {
 public:
  using ImplPointerType = typename ImplRefTraits::PointerType;

  VideoCaptureObserverStub() = default;
  ~VideoCaptureObserverStub() 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 VideoCaptureObserverStubDispatch::Accept(
        ImplRefTraits::GetRawPointer(&sink_), message);
  }

  bool AcceptWithResponder(
      mojo::Message* message,
      std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
    if (ImplRefTraits::IsNull(sink_))
      return false;
    return VideoCaptureObserverStubDispatch::AcceptWithResponder(
        ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
  }

 private:
  ImplPointerType sink_;
};
class BLINK_PLATFORM_EXPORT VideoCaptureHostStubDispatch {
 public:
  static bool Accept(VideoCaptureHost* impl, mojo::Message* message);
  static bool AcceptWithResponder(
      VideoCaptureHost* impl,
      mojo::Message* message,
      std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};

template <typename ImplRefTraits =
              mojo::RawPtrImplRefTraits<VideoCaptureHost>>
class VideoCaptureHostStub
    : public mojo::MessageReceiverWithResponderStatus {
 public:
  using ImplPointerType = typename ImplRefTraits::PointerType;

  VideoCaptureHostStub() = default;
  ~VideoCaptureHostStub() 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 VideoCaptureHostStubDispatch::Accept(
        ImplRefTraits::GetRawPointer(&sink_), message);
  }

  bool AcceptWithResponder(
      mojo::Message* message,
      std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
    if (ImplRefTraits::IsNull(sink_))
      return false;
    return VideoCaptureHostStubDispatch::AcceptWithResponder(
        ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
  }

 private:
  ImplPointerType sink_;
};
class BLINK_PLATFORM_EXPORT VideoCaptureObserverRequestValidator : public mojo::MessageReceiver {
 public:
  bool Accept(mojo::Message* message) override;
};
class BLINK_PLATFORM_EXPORT VideoCaptureHostRequestValidator : public mojo::MessageReceiver {
 public:
  bool Accept(mojo::Message* message) override;
};
class BLINK_PLATFORM_EXPORT VideoCaptureHostResponseValidator : public mojo::MessageReceiver {
 public:
  bool Accept(mojo::Message* message) override;
};





// @generated_from: media.mojom.VideoCaptureResult
class BLINK_PLATFORM_EXPORT VideoCaptureResult {
 public:
  using DataView = VideoCaptureResultDataView;
  using Data_ = internal::VideoCaptureResult_Data;
  using Tag = Data_::VideoCaptureResult_Tag;

  template <typename... Args>
  static VideoCaptureResultPtr New(Args&&... args) {
    static_assert(
        sizeof...(args) < 0,
        "Do not use Union::New(); to create a union of a given subtype, use "
        "New<SubType>(), not New() followed by set_<sub_type>(). To represent "
        "an empty union, mark the field or parameter as nullable in the mojom "
        "definition.");
  }
  // Construct an instance holding |state|.
  static VideoCaptureResultPtr
  NewState(
      VideoCaptureState state) {
    auto result = VideoCaptureResultPtr(absl::in_place);
    result->set_state(std::move(state));
    return result;
  }
  // Construct an instance holding |error_code|.
  static VideoCaptureResultPtr
  NewErrorCode(
      ::media::VideoCaptureError error_code) {
    auto result = VideoCaptureResultPtr(absl::in_place);
    result->set_error_code(std::move(error_code));
    return result;
  }

  template <typename U>
  static VideoCaptureResultPtr From(const U& u) {
    return mojo::TypeConverter<VideoCaptureResultPtr, U>::Convert(u);
  }

  template <typename U>
  U To() const {
    return mojo::TypeConverter<U, VideoCaptureResult>::Convert(*this);
  }

  VideoCaptureResult();
  ~VideoCaptureResult();

  // 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 UnionPtrType = VideoCaptureResultPtr>
  VideoCaptureResultPtr 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,
            typename std::enable_if<std::is_same<
                T, VideoCaptureResult>::value>::type* = nullptr>
  bool Equals(const T& other) const;

  template <typename T,
            typename std::enable_if<std::is_same<
                T, VideoCaptureResult>::value>::type* = nullptr>
  bool operator==(const T& rhs) const { return Equals(rhs); }

  Tag which() const {
    return tag_;
  }


  
// @generated_from: media.mojom.VideoCaptureResult.state
  bool is_state() const { return tag_ == Tag::kState; }

  
// @generated_from: media.mojom.VideoCaptureResult.state
  VideoCaptureState get_state() const {
    CHECK(tag_ == Tag::kState);
    return data_.state;
  }

  
// @generated_from: media.mojom.VideoCaptureResult.state
  void set_state(
      VideoCaptureState state);
  
// @generated_from: media.mojom.VideoCaptureResult.error_code
  bool is_error_code() const { return tag_ == Tag::kErrorCode; }

  
// @generated_from: media.mojom.VideoCaptureResult.error_code
  ::media::VideoCaptureError get_error_code() const {
    CHECK(tag_ == Tag::kErrorCode);
    return data_.error_code;
  }

  
// @generated_from: media.mojom.VideoCaptureResult.error_code
  void set_error_code(
      ::media::VideoCaptureError error_code);

  template <typename UserType>
  static mojo::Message SerializeAsMessage(UserType* input) {
    return mojo::internal::SerializeAsMessageImpl<
        VideoCaptureResult::DataView>(input);
  }

  template <typename UserType>
  static bool DeserializeFromMessage(mojo::Message input,
                                     UserType* output) {
    return mojo::internal::DeserializeImpl<VideoCaptureResult::DataView>(
        input, input.payload(), input.payload_num_bytes(), output, Validate);
  }

 private:
  union Union_ {
    Union_() = default;
    ~Union_() = default;
    VideoCaptureState state;
    ::media::VideoCaptureError error_code;
  };

  static bool Validate(const void* data,
                       mojo::internal::ValidationContext* validation_context);

  void DestroyActive();
  Tag tag_;
  Union_ data_;
};

template <typename UnionPtrType>
VideoCaptureResultPtr VideoCaptureResult::Clone() const {
  switch (tag_) {
    case Tag::kState:
      return NewState(
          mojo::Clone(data_.state));
    case Tag::kErrorCode:
      return NewErrorCode(
          mojo::Clone(data_.error_code));
  }
  return nullptr;
}

template <typename T,
          typename std::enable_if<std::is_same<
              T, VideoCaptureResult>::value>::type*>
bool VideoCaptureResult::Equals(const T& other) const {
  if (tag_ != other.which())
    return false;

  switch (tag_) {
    case Tag::kState:
      return mojo::Equals(data_.state, other.data_.state);
    case Tag::kErrorCode:
      return mojo::Equals(data_.error_code, other.data_.error_code);
  }

  return false;
}


}  // namespace blink
}  // namespace mojom
}  // namespace media

namespace mojo {


template <>
struct BLINK_PLATFORM_EXPORT UnionTraits<::media::mojom::blink::VideoCaptureResult::DataView,
                                        ::media::mojom::blink::VideoCaptureResultPtr> {
  static bool IsNull(const ::media::mojom::blink::VideoCaptureResultPtr& input) { return !input; }
  static void SetToNull(::media::mojom::blink::VideoCaptureResultPtr* output) { output->reset(); }

  static ::media::mojom::blink::VideoCaptureResult::Tag GetTag(const ::media::mojom::blink::VideoCaptureResultPtr& input) {
    return input->which();
  }

  static  ::media::mojom::blink::VideoCaptureState state(const ::media::mojom::blink::VideoCaptureResultPtr& input) {
    return input->get_state();
  }

  static  ::media::VideoCaptureError error_code(const ::media::mojom::blink::VideoCaptureResultPtr& input) {
    return input->get_error_code();
  }

  static bool Read(::media::mojom::blink::VideoCaptureResult::DataView input, ::media::mojom::blink::VideoCaptureResultPtr* output);
};

}  // namespace mojo

#endif  // MEDIA_CAPTURE_MOJOM_VIDEO_CAPTURE_MOJOM_BLINK_H_

/* Metadata comment
eyJtZXRhIjogW3siZW5kIjogMzQ4MSwgImJlZ2luIjogMzQ2MSwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1lZGlhLm1vam9tLlZpZGVvQ2FwdHVyZU9ic2VydmVy
In19LCB7ImVuZCI6IDUxNTgsICJiZWdpbiI6IDUxNDQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9n
ZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjog
ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1v
am9tIiwgInNpZ25hdHVyZSI6ICJtZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVPYnNlcnZlci5PblN0
YXRlQ2hhbmdlZCJ9fSwgeyJlbmQiOiA1Mjg5LCAiYmVnaW4iOiA1Mjc4LCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5n
dWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibWVkaWEubW9qb20uVmlkZW9DYXB0dXJlT2Jz
ZXJ2ZXIuT25OZXdCdWZmZXIifX0sIHsiZW5kIjogNTQ3MiwgImJlZ2luIjogNTQ1OSwgImVkZ2Ui
OiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZu
YW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMi
LCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1lZGlhLm1vam9tLlZpZGVvQ2Fw
dHVyZU9ic2VydmVyLk9uQnVmZmVyUmVhZHkifX0sIHsiZW5kIjogNTY5OCwgImJlZ2luIjogNTY4
MSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZp
bmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJv
bWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1lZGlhLm1vam9t
LlZpZGVvQ2FwdHVyZU9ic2VydmVyLk9uQnVmZmVyRGVzdHJveWVkIn19LCB7ImVuZCI6IDU4Mjgs
ICJiZWdpbiI6IDU4MTIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6
ICJtZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVPYnNlcnZlci5Pbk5ld0Nyb3BWZXJzaW9uIn19LCB7
ImVuZCI6IDYxMzAsICJiZWdpbiI6IDYxMTQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0
ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwg
InNpZ25hdHVyZSI6ICJtZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVIb3N0In19LCB7ImVuZCI6IDgy
NjMsICJiZWdpbiI6IDgyNTgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlw
ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVy
ZSI6ICJtZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVIb3N0LlN0YXJ0In19LCB7ImVuZCI6IDg1MzAs
ICJiZWdpbiI6IDg1MjYsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6
ICJtZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVIb3N0LlN0b3AifX0sIHsiZW5kIjogODY1OCwgImJl
Z2luIjogODY1MywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFu
Y2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNl
LmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1l
ZGlhLm1vam9tLlZpZGVvQ2FwdHVyZUhvc3QuUGF1c2UifX0sIHsiZW5kIjogODc4OCwgImJlZ2lu
IjogODc4MiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1lZGlh
Lm1vam9tLlZpZGVvQ2FwdHVyZUhvc3QuUmVzdW1lIn19LCB7ImVuZCI6IDkwMzEsICJiZWdpbiI6
IDkwMTIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtZWRpYS5t
b2pvbS5WaWRlb0NhcHR1cmVIb3N0LlJlcXVlc3RSZWZyZXNoRnJhbWUifX0sIHsiZW5kIjogOTE3
NSwgImJlZ2luIjogOTE2MiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBl
IjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xl
c291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJl
IjogIm1lZGlhLm1vam9tLlZpZGVvQ2FwdHVyZUhvc3QuUmVsZWFzZUJ1ZmZlciJ9fSwgeyJlbmQi
OiA5NTI5LCAiYmVnaW4iOiA5NTA0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwg
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWdu
YXR1cmUiOiAibWVkaWEubW9qb20uVmlkZW9DYXB0dXJlSG9zdC5HZXREZXZpY2VTdXBwb3J0ZWRG
b3JtYXRzIn19LCB7ImVuZCI6IDk4OTMsICJiZWdpbiI6IDk4NzIsICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdl
IjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVIb3N0Lkdl
dERldmljZUZvcm1hdHNJblVzZSJ9fSwgeyJlbmQiOiAxMDEyMywgImJlZ2luIjogMTAxMDksICJl
ZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIs
ICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0v
c3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtZWRpYS5tb2pvbS5WaWRl
b0NhcHR1cmVIb3N0Lk9uRnJhbWVEcm9wcGVkIn19LCB7ImVuZCI6IDEwMjk2LCAiYmVnaW4iOiAx
MDI5MSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1lZGlhLm1v
am9tLlZpZGVvQ2FwdHVyZUhvc3QuT25Mb2cifX0sIHsiZW5kIjogMTA3NTQsICJiZWdpbiI6IDEw
NzQwLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibWVkaWEubW9q
b20uVmlkZW9DYXB0dXJlT2JzZXJ2ZXIuT25TdGF0ZUNoYW5nZWQifX0sIHsiZW5kIjogMTA4Nzgs
ICJiZWdpbiI6IDEwODY3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUi
OiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVz
b3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUi
OiAibWVkaWEubW9qb20uVmlkZW9DYXB0dXJlT2JzZXJ2ZXIuT25OZXdCdWZmZXIifX0sIHsiZW5k
IjogMTEwNTQsICJiZWdpbiI6IDExMDQxLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVz
IiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1
bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJz
aWduYXR1cmUiOiAibWVkaWEubW9qb20uVmlkZW9DYXB0dXJlT2JzZXJ2ZXIuT25CdWZmZXJSZWFk
eSJ9fSwgeyJlbmQiOiAxMTI3MywgImJlZ2luIjogMTEyNTYsICJlZGdlIjogIiUva3l0aGUvZWRn
ZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVz
IjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjog
Im1vam9tIiwgInNpZ25hdHVyZSI6ICJtZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVPYnNlcnZlci5P
bkJ1ZmZlckRlc3Ryb3llZCJ9fSwgeyJlbmQiOiAxMTM5NiwgImJlZ2luIjogMTEzODAsICJlZGdl
IjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2
bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3Jj
IiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtZWRpYS5tb2pvbS5WaWRlb0Nh
cHR1cmVPYnNlcnZlci5Pbk5ld0Nyb3BWZXJzaW9uIn19LCB7ImVuZCI6IDExODI2LCAiYmVnaW4i
OiAxMTgyMSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1lZGlh
Lm1vam9tLlZpZGVvQ2FwdHVyZUhvc3QuU3RhcnQifX0sIHsiZW5kIjogMTIwODYsICJiZWdpbiI6
IDEyMDgyLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9y
X2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t
L2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibWVkaWEu
bW9qb20uVmlkZW9DYXB0dXJlSG9zdC5TdG9wIn19LCB7ImVuZCI6IDEyMjA3LCAiYmVnaW4iOiAx
MjIwMiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1lZGlhLm1v
am9tLlZpZGVvQ2FwdHVyZUhvc3QuUGF1c2UifX0sIHsiZW5kIjogMTIzMzAsICJiZWdpbiI6IDEy
MzI0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibWVkaWEubW9q
b20uVmlkZW9DYXB0dXJlSG9zdC5SZXN1bWUifX0sIHsiZW5kIjogMTI1NjYsICJiZWdpbiI6IDEy
NTQ3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibWVkaWEubW9q
b20uVmlkZW9DYXB0dXJlSG9zdC5SZXF1ZXN0UmVmcmVzaEZyYW1lIn19LCB7ImVuZCI6IDEyNzAz
LCAiYmVnaW4iOiAxMjY5MCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBl
IjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xl
c291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJl
IjogIm1lZGlhLm1vam9tLlZpZGVvQ2FwdHVyZUhvc3QuUmVsZWFzZUJ1ZmZlciJ9fSwgeyJlbmQi
OiAxMjkzMCwgImJlZ2luIjogMTI5MDUsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMi
LCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVt
Lmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNp
Z25hdHVyZSI6ICJtZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVIb3N0LkdldERldmljZVN1cHBvcnRl
ZEZvcm1hdHMifX0sIHsiZW5kIjogMTMxNzEsICJiZWdpbiI6IDEzMTUwLCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5n
dWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibWVkaWEubW9qb20uVmlkZW9DYXB0dXJlSG9z
dC5HZXREZXZpY2VGb3JtYXRzSW5Vc2UifX0sIHsiZW5kIjogMTMzOTQsICJiZWdpbiI6IDEzMzgw
LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9t
aXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibWVkaWEubW9qb20u
VmlkZW9DYXB0dXJlSG9zdC5PbkZyYW1lRHJvcHBlZCJ9fSwgeyJlbmQiOiAxMzU2MCwgImJlZ2lu
IjogMTM1NTUsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtZWRp
YS5tb2pvbS5WaWRlb0NhcHR1cmVIb3N0Lk9uTG9nIn19LCB7ImVuZCI6IDE2OTkxLCAiYmVnaW4i
OiAxNjk3MywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1lZGlh
Lm1vam9tLlZpZGVvQ2FwdHVyZVJlc3VsdCJ9fSwgeyJlbmQiOiAxOTM2OCwgImJlZ2luIjogMTkz
NjAsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVm
aW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hy
b21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtZWRpYS5tb2pv
bS5WaWRlb0NhcHR1cmVSZXN1bHQuc3RhdGUifX0sIHsiZW5kIjogMTk0OTksICJiZWdpbiI6IDE5
NDkwLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAibWVkaWEubW9q
b20uVmlkZW9DYXB0dXJlUmVzdWx0LnN0YXRlIn19LCB7ImVuZCI6IDE5NjQ3LCAiYmVnaW4iOiAx
OTYzOCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogIm1lZGlhLm1v
am9tLlZpZGVvQ2FwdHVyZVJlc3VsdC5zdGF0ZSJ9fSwgeyJlbmQiOiAxOTc2NiwgImJlZ2luIjog
MTk3NTMsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJtZWRpYS5t
b2pvbS5WaWRlb0NhcHR1cmVSZXN1bHQuZXJyb3JfY29kZSJ9fSwgeyJlbmQiOiAxOTkyMCwgImJl
Z2luIjogMTk5MDYsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJh
bmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJj
ZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJt
ZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVSZXN1bHQuZXJyb3JfY29kZSJ9fSwgeyJlbmQiOiAyMDA4
NywgImJlZ2luIjogMjAwNzMsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlw
ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVy
ZSI6ICJtZWRpYS5tb2pvbS5WaWRlb0NhcHR1cmVSZXN1bHQuZXJyb3JfY29kZSJ9fV0sICJ0eXBl
IjogImt5dGhlMCJ9
*/