// third_party/blink/public/mojom/frame/frame.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 THIRD_PARTY_BLINK_PUBLIC_MOJOM_FRAME_FRAME_MOJOM_BLINK_H_
#define THIRD_PARTY_BLINK_PUBLIC_MOJOM_FRAME_FRAME_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 "third_party/blink/public/mojom/frame/frame.mojom-shared.h"
#include "third_party/blink/public/mojom/frame/frame.mojom-blink-forward.h"
#include "cc/mojom/browser_controls_state.mojom-blink.h"
#include "cc/mojom/render_frame_metadata.mojom-blink.h"
#include "cc/mojom/touch_action.mojom-blink.h"
#include "mojo/public/mojom/base/string16.mojom-blink.h"
#include "mojo/public/mojom/base/unguessable_token.mojom-blink.h"
#include "mojo/public/mojom/base/text_direction.mojom-blink.h"
#include "mojo/public/mojom/base/time.mojom-blink.h"
#include "mojo/public/mojom/base/values.mojom-blink.h"
#include "services/data_decoder/public/mojom/resource_snapshot_for_web_bundle.mojom-blink-forward.h"
#include "services/network/public/mojom/content_security_policy.mojom-blink-forward.h"
#include "services/network/public/mojom/cross_origin_opener_policy.mojom-blink-forward.h"
#include "services/network/public/mojom/fetch_api.mojom-blink-forward.h"
#include "services/network/public/mojom/source_location.mojom-blink.h"
#include "services/network/public/mojom/url_request.mojom-blink.h"
#include "services/network/public/mojom/web_sandbox_flags.mojom-blink-forward.h"
#include "services/viz/public/mojom/compositing/frame_sink_id.mojom-blink.h"
#include "skia/public/mojom/skcolor.mojom-blink.h"
#include "third_party/blink/public/mojom/blob/blob.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/blob/blob_url_store.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/messaging/transferable_message.mojom-blink.h"
#include "third_party/blink/public/mojom/close_watcher/close_listener.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/choosers/popup_menu.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/context_menu/context_menu.mojom-blink.h"
#include "third_party/blink/public/mojom/conversions/conversions.mojom-blink.h"
#include "third_party/blink/public/mojom/css/preferred_color_scheme.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/devtools/console_message.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/devtools/devtools_agent.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/devtools/inspector_issue.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/permissions_policy/permissions_policy.mojom-blink.h"
#include "third_party/blink/public/mojom/favicon/favicon_url.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/frame/blocked_navigation_types.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/frame/frame_owner_properties.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/frame/frame_policy.mojom-blink.h"
#include "third_party/blink/public/mojom/frame/frame_visual_properties.mojom-blink.h"
#include "third_party/blink/public/mojom/frame/fullscreen.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/frame/intrinsic_sizing_info.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/frame/lifecycle.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/frame/media_player_action.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/frame/policy_container.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/frame/reporting_observer.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/frame/sudden_termination_disabler_type.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/frame/text_autosizer_page_info.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/frame/triggering_event_info.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/frame/user_activation_notification_type.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/frame/user_activation_update_types.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/frame/viewport_intersection_state.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/input/focus_type.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/input/scroll_direction.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/messaging/delegated_capability.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/navigation/navigation_api_history_entry_arrays.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/navigation/navigation_policy.mojom-blink.h"
#include "third_party/blink/public/mojom/loader/referrer.mojom-blink.h"
#include "third_party/blink/public/mojom/opengraph/metadata.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/widget/platform_widget.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/page/widget.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/portal/portal.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/scroll/scroll_into_view_params.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/security_context/insecure_request_policy.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/timing/resource_timing.mojom-blink-forward.h"
#include "third_party/blink/public/mojom/tokens/tokens.mojom-blink.h"
#include "third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom-blink-forward.h"
#include "ui/base/mojom/window_open_disposition.mojom-blink-forward.h"
#include "ui/events/mojom/scroll_granularity.mojom-blink.h"
#include "ui/gfx/geometry/mojom/geometry.mojom-blink.h"
#include "ui/gfx/range/mojom/range.mojom-blink.h"
#include "url/mojom/origin.mojom-blink.h"
#include "url/mojom/url.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/renderer/core/core_export.h"

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


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

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


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

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


namespace blink {
namespace mojom {
namespace blink {

class KeepAliveHandleProxy;

template <typename ImplRefTraits>
class KeepAliveHandleStub;

class KeepAliveHandleRequestValidator;


// @generated_from: blink.mojom.KeepAliveHandle
class CORE_EXPORT KeepAliveHandle
    : public KeepAliveHandleInterfaceBase {
 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_ = KeepAliveHandleInterfaceBase;
  using Proxy_ = KeepAliveHandleProxy;

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

  using RequestValidator_ = KeepAliveHandleRequestValidator;
  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 ~KeepAliveHandle() = default;
};

class KeepAliveHandleFactoryProxy;

template <typename ImplRefTraits>
class KeepAliveHandleFactoryStub;

class KeepAliveHandleFactoryRequestValidator;


// @generated_from: blink.mojom.KeepAliveHandleFactory
class CORE_EXPORT KeepAliveHandleFactory
    : public KeepAliveHandleFactoryInterfaceBase {
 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_ = KeepAliveHandleFactoryInterfaceBase;
  using Proxy_ = KeepAliveHandleFactoryProxy;

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

  using RequestValidator_ = KeepAliveHandleFactoryRequestValidator;
  using ResponseValidator_ = mojo::PassThroughFilter;
  enum MethodMinVersions : uint32_t {
    kIssueKeepAliveHandleMinVersion = 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 IssueKeepAliveHandle_Sym {
    NOINLINE static void IPCSymbol();
  };
#endif // !BUILDFLAG(IS_FUCHSIA)
  virtual ~KeepAliveHandleFactory() = default;

  
// @generated_from: blink.mojom.KeepAliveHandleFactory.IssueKeepAliveHandle
  virtual void IssueKeepAliveHandle(::mojo::PendingReceiver<KeepAliveHandle> keep_alive_handle) = 0;
};

class LocalFrameHostProxy;

template <typename ImplRefTraits>
class LocalFrameHostStub;

class LocalFrameHostRequestValidator;
class LocalFrameHostResponseValidator;


// @generated_from: blink.mojom.LocalFrameHost
class CORE_EXPORT LocalFrameHost
    : public LocalFrameHostInterfaceBase {
 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_ = true;
  static constexpr bool HasSyncMethods_ = true;
  static constexpr bool HasUninterruptableMethods_ = false;

  using Base_ = LocalFrameHostInterfaceBase;
  using Proxy_ = LocalFrameHostProxy;

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

  using RequestValidator_ = LocalFrameHostRequestValidator;
  using ResponseValidator_ = LocalFrameHostResponseValidator;
  enum MethodMinVersions : uint32_t {
    kEnterFullscreenMinVersion = 0,
    kExitFullscreenMinVersion = 0,
    kFullscreenStateChangedMinVersion = 0,
    kRegisterProtocolHandlerMinVersion = 0,
    kUnregisterProtocolHandlerMinVersion = 0,
    kDidDisplayInsecureContentMinVersion = 0,
    kDidContainInsecureFormActionMinVersion = 0,
    kMainDocumentElementAvailableMinVersion = 0,
    kSetNeedsOcclusionTrackingMinVersion = 0,
    kSetVirtualKeyboardOverlayPolicyMinVersion = 0,
    kVisibilityChangedMinVersion = 0,
    kDidChangeThemeColorMinVersion = 0,
    kDidChangeBackgroundColorMinVersion = 0,
    kDidFailLoadWithErrorMinVersion = 0,
    kDidFocusFrameMinVersion = 0,
    kDidCallFocusMinVersion = 0,
    kEnforceInsecureRequestPolicyMinVersion = 0,
    kEnforceInsecureNavigationsSetMinVersion = 0,
    kSuddenTerminationDisablerChangedMinVersion = 0,
    kHadStickyUserActivationBeforeNavigationChangedMinVersion = 0,
    kScrollRectToVisibleInParentFrameMinVersion = 0,
    kBubbleLogicalScrollInParentFrameMinVersion = 0,
    kDidBlockNavigationMinVersion = 0,
    kDidChangeLoadProgressMinVersion = 0,
    kDidFinishLoadMinVersion = 0,
    kDispatchLoadMinVersion = 0,
    kGoToEntryAtOffsetMinVersion = 0,
    kNavigateToNavigationApiKeyMinVersion = 0,
    kUpdateTitleMinVersion = 0,
    kUpdateUserActivationStateMinVersion = 0,
    kHandleAccessibilityFindInPageResultMinVersion = 0,
    kHandleAccessibilityFindInPageTerminationMinVersion = 0,
    kDocumentOnLoadCompletedMinVersion = 0,
    kForwardResourceTimingToParentMinVersion = 0,
    kDidDispatchDOMContentLoadedEventMinVersion = 0,
    kRunModalAlertDialogMinVersion = 0,
    kRunModalConfirmDialogMinVersion = 0,
    kRunModalPromptDialogMinVersion = 0,
    kRunBeforeUnloadConfirmMinVersion = 0,
    kUpdateFaviconURLMinVersion = 0,
    kDownloadURLMinVersion = 0,
    kFocusedElementChangedMinVersion = 0,
    kTextSelectionChangedMinVersion = 0,
    kShowPopupMenuMinVersion = 0,
    kCreateNewPopupWidgetMinVersion = 0,
    kShowContextMenuMinVersion = 0,
    kDidLoadResourceFromMemoryCacheMinVersion = 0,
    kDidChangeFrameOwnerPropertiesMinVersion = 0,
    kDidChangeOpenerMinVersion = 0,
    kDidChangeFramePolicyMinVersion = 0,
    kDidChangeIframeAttributesMinVersion = 0,
    kCapturePaintPreviewOfSubframeMinVersion = 0,
    kSetCloseListenerMinVersion = 0,
    kDetachMinVersion = 0,
    kGetKeepAliveHandleFactoryMinVersion = 0,
    kDidAddMessageToConsoleMinVersion = 0,
    kFrameSizeChangedMinVersion = 0,
    kDidUpdatePreferredColorSchemeMinVersion = 0,
    kDidInferColorSchemeMinVersion = 0,
    kDidChangeSrcDocMinVersion = 0,
    kReceivedDelegatedCapabilityMinVersion = 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 EnterFullscreen_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct ExitFullscreen_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct FullscreenStateChanged_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct RegisterProtocolHandler_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct UnregisterProtocolHandler_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidDisplayInsecureContent_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidContainInsecureFormAction_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct MainDocumentElementAvailable_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct SetNeedsOcclusionTracking_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct SetVirtualKeyboardOverlayPolicy_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct VisibilityChanged_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidChangeThemeColor_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidChangeBackgroundColor_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidFailLoadWithError_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidFocusFrame_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidCallFocus_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct EnforceInsecureRequestPolicy_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct EnforceInsecureNavigationsSet_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct SuddenTerminationDisablerChanged_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct HadStickyUserActivationBeforeNavigationChanged_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct ScrollRectToVisibleInParentFrame_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct BubbleLogicalScrollInParentFrame_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidBlockNavigation_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidChangeLoadProgress_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidFinishLoad_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DispatchLoad_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct GoToEntryAtOffset_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct NavigateToNavigationApiKey_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct UpdateTitle_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct UpdateUserActivationState_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct HandleAccessibilityFindInPageResult_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct HandleAccessibilityFindInPageTermination_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DocumentOnLoadCompleted_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct ForwardResourceTimingToParent_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidDispatchDOMContentLoadedEvent_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct RunModalAlertDialog_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct RunModalConfirmDialog_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct RunModalPromptDialog_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct RunBeforeUnloadConfirm_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct UpdateFaviconURL_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DownloadURL_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct FocusedElementChanged_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct TextSelectionChanged_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct ShowPopupMenu_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct CreateNewPopupWidget_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct ShowContextMenu_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidLoadResourceFromMemoryCache_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidChangeFrameOwnerProperties_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidChangeOpener_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidChangeFramePolicy_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidChangeIframeAttributes_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct CapturePaintPreviewOfSubframe_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct SetCloseListener_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct Detach_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct GetKeepAliveHandleFactory_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidAddMessageToConsole_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct FrameSizeChanged_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidUpdatePreferredColorScheme_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidInferColorScheme_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidChangeSrcDoc_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct ReceivedDelegatedCapability_Sym {
    NOINLINE static void IPCSymbol();
  };
#endif // !BUILDFLAG(IS_FUCHSIA)
  virtual ~LocalFrameHost() = default;


  using EnterFullscreenCallback = base::OnceCallback<void(bool)>;
  
// @generated_from: blink.mojom.LocalFrameHost.EnterFullscreen
  virtual void EnterFullscreen(::blink::mojom::blink::FullscreenOptionsPtr options, EnterFullscreenCallback callback) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.ExitFullscreen
  virtual void ExitFullscreen() = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.FullscreenStateChanged
  virtual void FullscreenStateChanged(bool is_fullscreen, ::blink::mojom::blink::FullscreenOptionsPtr options) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.RegisterProtocolHandler
  virtual void RegisterProtocolHandler(const WTF::String& scheme, const ::blink::KURL& url, bool user_gesture) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.UnregisterProtocolHandler
  virtual void UnregisterProtocolHandler(const WTF::String& scheme, const ::blink::KURL& url, bool user_gesture) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.DidDisplayInsecureContent
  virtual void DidDisplayInsecureContent() = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.DidContainInsecureFormAction
  virtual void DidContainInsecureFormAction() = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.MainDocumentElementAvailable
  virtual void MainDocumentElementAvailable(bool uses_temporary_zoom_level) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.SetNeedsOcclusionTracking
  virtual void SetNeedsOcclusionTracking(bool needs_tracking) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.SetVirtualKeyboardOverlayPolicy
  virtual void SetVirtualKeyboardOverlayPolicy(bool vk_overlays_content) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.VisibilityChanged
  virtual void VisibilityChanged(::blink::mojom::blink::FrameVisibility visibility) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.DidChangeThemeColor
  virtual void DidChangeThemeColor(absl::optional<::SkColor> theme_color) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.DidChangeBackgroundColor
  virtual void DidChangeBackgroundColor(::SkColor background_color, bool color_adjust) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.DidFailLoadWithError
  virtual void DidFailLoadWithError(const ::blink::KURL& url, int32_t error_code) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.DidFocusFrame
  virtual void DidFocusFrame() = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.DidCallFocus
  virtual void DidCallFocus() = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.EnforceInsecureRequestPolicy
  virtual void EnforceInsecureRequestPolicy(::blink::mojom::blink::InsecureRequestPolicy policy_bitmap) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.EnforceInsecureNavigationsSet
  virtual void EnforceInsecureNavigationsSet(const WTF::Vector<uint32_t>& set) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.SuddenTerminationDisablerChanged
  virtual void SuddenTerminationDisablerChanged(bool present, ::blink::mojom::blink::SuddenTerminationDisablerType disabler_type) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.HadStickyUserActivationBeforeNavigationChanged
  virtual void HadStickyUserActivationBeforeNavigationChanged(bool has_gesture) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.ScrollRectToVisibleInParentFrame
  virtual void ScrollRectToVisibleInParentFrame(const ::gfx::RectF& rect_to_scroll, ::blink::mojom::blink::ScrollIntoViewParamsPtr params) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.BubbleLogicalScrollInParentFrame
  virtual void BubbleLogicalScrollInParentFrame(::blink::mojom::blink::ScrollDirection direction, ::ui::ScrollGranularity granularity) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.DidBlockNavigation
  virtual void DidBlockNavigation(const ::blink::KURL& blocked_url, const ::blink::KURL& initiator_url, ::blink::mojom::blink::NavigationBlockedReason reason) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.DidChangeLoadProgress
  virtual void DidChangeLoadProgress(double load_progress) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.DidFinishLoad
  virtual void DidFinishLoad(const ::blink::KURL& validated_url) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.DispatchLoad
  virtual void DispatchLoad() = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.GoToEntryAtOffset
  virtual void GoToEntryAtOffset(int32_t offset, bool has_user_gesture) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.NavigateToNavigationApiKey
  virtual void NavigateToNavigationApiKey(const WTF::String& key, bool has_user_gesture) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.UpdateTitle
  virtual void UpdateTitle(const ::WTF::String& title, ::base::i18n::TextDirection title_direction) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.UpdateUserActivationState
  virtual void UpdateUserActivationState(::blink::mojom::blink::UserActivationUpdateType update_type, ::blink::mojom::blink::UserActivationNotificationType notification_type) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.HandleAccessibilityFindInPageResult
  virtual void HandleAccessibilityFindInPageResult(FindInPageResultAXParamsPtr params) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.HandleAccessibilityFindInPageTermination
  virtual void HandleAccessibilityFindInPageTermination() = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.DocumentOnLoadCompleted
  virtual void DocumentOnLoadCompleted() = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.ForwardResourceTimingToParent
  virtual void ForwardResourceTimingToParent(::blink::mojom::blink::ResourceTimingInfoPtr timing) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.DidDispatchDOMContentLoadedEvent
  virtual void DidDispatchDOMContentLoadedEvent() = 0;

  // Sync method. This signature is used by the client side; the service side
  // should implement the signature with callback below.
  
// @generated_from: blink.mojom.LocalFrameHost.RunModalAlertDialog
  virtual bool RunModalAlertDialog(const ::WTF::String& alert_message, bool disable_third_party_subframe_suppresion);

  using RunModalAlertDialogCallback = base::OnceCallback<void()>;
  
// @generated_from: blink.mojom.LocalFrameHost.RunModalAlertDialog
  virtual void RunModalAlertDialog(const ::WTF::String& alert_message, bool disable_third_party_subframe_suppresion, RunModalAlertDialogCallback callback) = 0;

  // Sync method. This signature is used by the client side; the service side
  // should implement the signature with callback below.
  
// @generated_from: blink.mojom.LocalFrameHost.RunModalConfirmDialog
  virtual bool RunModalConfirmDialog(const ::WTF::String& alert_message, bool disable_third_party_subframe_suppresion, bool* out_success);

  using RunModalConfirmDialogCallback = base::OnceCallback<void(bool)>;
  
// @generated_from: blink.mojom.LocalFrameHost.RunModalConfirmDialog
  virtual void RunModalConfirmDialog(const ::WTF::String& alert_message, bool disable_third_party_subframe_suppresion, RunModalConfirmDialogCallback callback) = 0;

  // Sync method. This signature is used by the client side; the service side
  // should implement the signature with callback below.
  
// @generated_from: blink.mojom.LocalFrameHost.RunModalPromptDialog
  virtual bool RunModalPromptDialog(const ::WTF::String& alert_message, const ::WTF::String& default_value, bool disable_third_party_subframe_suppresion, bool* out_success, ::WTF::String* out_result);

  using RunModalPromptDialogCallback = base::OnceCallback<void(bool, const ::WTF::String&)>;
  
// @generated_from: blink.mojom.LocalFrameHost.RunModalPromptDialog
  virtual void RunModalPromptDialog(const ::WTF::String& alert_message, const ::WTF::String& default_value, bool disable_third_party_subframe_suppresion, RunModalPromptDialogCallback callback) = 0;

  // Sync method. This signature is used by the client side; the service side
  // should implement the signature with callback below.
  
// @generated_from: blink.mojom.LocalFrameHost.RunBeforeUnloadConfirm
  virtual bool RunBeforeUnloadConfirm(bool is_reload, bool* out_success);

  using RunBeforeUnloadConfirmCallback = base::OnceCallback<void(bool)>;
  
// @generated_from: blink.mojom.LocalFrameHost.RunBeforeUnloadConfirm
  virtual void RunBeforeUnloadConfirm(bool is_reload, RunBeforeUnloadConfirmCallback callback) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.UpdateFaviconURL
  virtual void UpdateFaviconURL(WTF::Vector<::blink::mojom::blink::FaviconURLPtr> favicon_urls) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.DownloadURL
  virtual void DownloadURL(DownloadURLParamsPtr params) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.FocusedElementChanged
  virtual void FocusedElementChanged(bool is_editable_element, const ::gfx::Rect& bounds_in_frame_widget, ::blink::mojom::blink::FocusType focus_type) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.TextSelectionChanged
  virtual void TextSelectionChanged(const ::WTF::String& text, uint32_t offset, const ::gfx::Range& range) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.ShowPopupMenu
  virtual void ShowPopupMenu(::mojo::PendingRemote<::blink::mojom::blink::PopupMenuClient> popup_client, const ::gfx::Rect& bounds, int32_t item_height, double font_size, int32_t selected_item, WTF::Vector<::blink::mojom::blink::MenuItemPtr> menu_items, bool right_aligned, bool allow_multiple_selection) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.CreateNewPopupWidget
  virtual void CreateNewPopupWidget(::mojo::PendingAssociatedReceiver<::blink::mojom::blink::PopupWidgetHost> popup_host, ::mojo::PendingAssociatedReceiver<::blink::mojom::blink::WidgetHost> blink_widget_host, ::mojo::PendingAssociatedRemote<::blink::mojom::blink::Widget> blink_widget) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.ShowContextMenu
  virtual void ShowContextMenu(::mojo::PendingAssociatedRemote<::blink::mojom::blink::ContextMenuClient> client, const ::blink::UntrustworthyContextMenuParams& params) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.DidLoadResourceFromMemoryCache
  virtual void DidLoadResourceFromMemoryCache(const ::blink::KURL& url, const WTF::String& http_method, const WTF::String& mime_type, ::network::mojom::blink::RequestDestination request_destination, bool include_credentials) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.DidChangeFrameOwnerProperties
  virtual void DidChangeFrameOwnerProperties(const ::blink::FrameToken& child_frame_token, ::blink::mojom::blink::FrameOwnerPropertiesPtr frame_owner_properties) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.DidChangeOpener
  virtual void DidChangeOpener(const absl::optional<::blink::LocalFrameToken>& opener_frame) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.DidChangeFramePolicy
  virtual void DidChangeFramePolicy(const ::blink::FrameToken& child_frame_token, const ::blink::FramePolicy& frame_policy) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.DidChangeIframeAttributes
  virtual void DidChangeIframeAttributes(const ::blink::FrameToken& child_frame_token, ::network::mojom::blink::ContentSecurityPolicyPtr parsed_csp_attribute, bool anonymous) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.CapturePaintPreviewOfSubframe
  virtual void CapturePaintPreviewOfSubframe(const ::gfx::Rect& clip_rect, const ::base::UnguessableToken& guid) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.SetCloseListener
  virtual void SetCloseListener(::mojo::PendingRemote<::blink::mojom::blink::CloseListener> listener) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.Detach
  virtual void Detach() = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.GetKeepAliveHandleFactory
  virtual void GetKeepAliveHandleFactory(::mojo::PendingReceiver<KeepAliveHandleFactory> factory) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.DidAddMessageToConsole
  virtual void DidAddMessageToConsole(::blink::mojom::blink::ConsoleMessageLevel log_level, const ::WTF::String& msg, uint32_t line_number, const ::WTF::String& source_id, const ::WTF::String& untrusted_stack_trace) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.FrameSizeChanged
  virtual void FrameSizeChanged(const ::gfx::Size& size) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.DidUpdatePreferredColorScheme
  virtual void DidUpdatePreferredColorScheme(::blink::mojom::blink::PreferredColorScheme preferred_color_scheme) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.DidInferColorScheme
  virtual void DidInferColorScheme(::blink::mojom::blink::PreferredColorScheme color_scheme) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.DidChangeSrcDoc
  virtual void DidChangeSrcDoc(const ::blink::FrameToken& child_frame_token, const WTF::String& srcdoc_value) = 0;

  
// @generated_from: blink.mojom.LocalFrameHost.ReceivedDelegatedCapability
  virtual void ReceivedDelegatedCapability(::blink::mojom::blink::DelegatedCapability delegated_capability) = 0;
};

class LocalFrameProxy;

template <typename ImplRefTraits>
class LocalFrameStub;

class LocalFrameRequestValidator;
class LocalFrameResponseValidator;


// @generated_from: blink.mojom.LocalFrame
class CORE_EXPORT LocalFrame
    : public LocalFrameInterfaceBase {
 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_ = true;
  static constexpr bool HasSyncMethods_ = false;
  static constexpr bool HasUninterruptableMethods_ = false;

  using Base_ = LocalFrameInterfaceBase;
  using Proxy_ = LocalFrameProxy;

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

  using RequestValidator_ = LocalFrameRequestValidator;
  using ResponseValidator_ = LocalFrameResponseValidator;
  enum MethodMinVersions : uint32_t {
    kGetTextSurroundingSelectionMinVersion = 0,
    kSendInterventionReportMinVersion = 0,
    kSetFrameOwnerPropertiesMinVersion = 0,
    kNotifyUserActivationMinVersion = 0,
    kNotifyVirtualKeyboardOverlayRectMinVersion = 0,
    kAddMessageToConsoleMinVersion = 0,
    kAddInspectorIssueMinVersion = 0,
    kSwapInImmediatelyMinVersion = 0,
    kCheckCompletedMinVersion = 0,
    kStopLoadingMinVersion = 0,
    kCollapseMinVersion = 0,
    kEnableViewSourceModeMinVersion = 0,
    kFocusMinVersion = 0,
    kClearFocusedElementMinVersion = 0,
    kGetResourceSnapshotForWebBundleMinVersion = 0,
    kCopyImageAtMinVersion = 0,
    kSaveImageAtMinVersion = 0,
    kReportBlinkFeatureUsageMinVersion = 0,
    kRenderFallbackContentMinVersion = 0,
    kRenderFallbackContentWithResourceTimingMinVersion = 0,
    kBeforeUnloadMinVersion = 0,
    kMediaPlayerActionAtMinVersion = 0,
    kPluginActionAtMinVersion = 0,
    kAdvanceFocusInFrameMinVersion = 0,
    kAdvanceFocusForIMEMinVersion = 0,
    kReportContentSecurityPolicyViolationMinVersion = 0,
    kDidUpdateFramePolicyMinVersion = 0,
    kPostMessageEventMinVersion = 0,
    kJavaScriptMethodExecuteRequestMinVersion = 0,
    kJavaScriptExecuteRequestMinVersion = 0,
    kJavaScriptExecuteRequestForTestsMinVersion = 0,
    kJavaScriptExecuteRequestInIsolatedWorldMinVersion = 0,
    kBindReportingObserverMinVersion = 0,
    kUpdateOpenerMinVersion = 0,
    kGetSavableResourceLinksMinVersion = 0,
    kMixedContentFoundMinVersion = 0,
    kBindDevToolsAgentMinVersion = 0,
    kExtractSmartClipDataMinVersion = 0,
    kHandleRendererDebugURLMinVersion = 0,
    kGetCanonicalUrlForSharingMinVersion = 0,
    kGetOpenGraphMetadataMinVersion = 0,
    kSetNavigationApiHistoryEntriesForRestoreMinVersion = 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 GetTextSurroundingSelection_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct SendInterventionReport_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct SetFrameOwnerProperties_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct NotifyUserActivation_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct NotifyVirtualKeyboardOverlayRect_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct AddMessageToConsole_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct AddInspectorIssue_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct SwapInImmediately_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct CheckCompleted_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct StopLoading_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct Collapse_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct EnableViewSourceMode_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct Focus_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct ClearFocusedElement_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct GetResourceSnapshotForWebBundle_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct CopyImageAt_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct SaveImageAt_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct ReportBlinkFeatureUsage_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct RenderFallbackContent_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct RenderFallbackContentWithResourceTiming_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct BeforeUnload_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct MediaPlayerActionAt_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct PluginActionAt_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct AdvanceFocusInFrame_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct AdvanceFocusForIME_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct ReportContentSecurityPolicyViolation_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidUpdateFramePolicy_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct PostMessageEvent_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct JavaScriptMethodExecuteRequest_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct JavaScriptExecuteRequest_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct JavaScriptExecuteRequestForTests_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct JavaScriptExecuteRequestInIsolatedWorld_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct BindReportingObserver_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct UpdateOpener_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct GetSavableResourceLinks_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct MixedContentFound_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct BindDevToolsAgent_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct ExtractSmartClipData_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct HandleRendererDebugURL_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct GetCanonicalUrlForSharing_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct GetOpenGraphMetadata_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct SetNavigationApiHistoryEntriesForRestore_Sym {
    NOINLINE static void IPCSymbol();
  };
#endif // !BUILDFLAG(IS_FUCHSIA)
  virtual ~LocalFrame() = default;


  using GetTextSurroundingSelectionCallback = base::OnceCallback<void(const ::WTF::String&, uint32_t, uint32_t)>;
  
// @generated_from: blink.mojom.LocalFrame.GetTextSurroundingSelection
  virtual void GetTextSurroundingSelection(uint32_t max_length, GetTextSurroundingSelectionCallback callback) = 0;

  
// @generated_from: blink.mojom.LocalFrame.SendInterventionReport
  virtual void SendInterventionReport(const WTF::String& id, const WTF::String& message) = 0;

  
// @generated_from: blink.mojom.LocalFrame.SetFrameOwnerProperties
  virtual void SetFrameOwnerProperties(::blink::mojom::blink::FrameOwnerPropertiesPtr properties) = 0;

  
// @generated_from: blink.mojom.LocalFrame.NotifyUserActivation
  virtual void NotifyUserActivation(::blink::mojom::blink::UserActivationNotificationType notification_type) = 0;

  
// @generated_from: blink.mojom.LocalFrame.NotifyVirtualKeyboardOverlayRect
  virtual void NotifyVirtualKeyboardOverlayRect(const ::gfx::Rect& keyboard_rect) = 0;

  
// @generated_from: blink.mojom.LocalFrame.AddMessageToConsole
  virtual void AddMessageToConsole(::blink::mojom::blink::ConsoleMessageLevel level, const WTF::String& message, bool discard_duplicates) = 0;

  
// @generated_from: blink.mojom.LocalFrame.AddInspectorIssue
  virtual void AddInspectorIssue(::blink::mojom::blink::InspectorIssueInfoPtr info) = 0;

  
// @generated_from: blink.mojom.LocalFrame.SwapInImmediately
  virtual void SwapInImmediately() = 0;

  
// @generated_from: blink.mojom.LocalFrame.CheckCompleted
  virtual void CheckCompleted() = 0;

  
// @generated_from: blink.mojom.LocalFrame.StopLoading
  virtual void StopLoading() = 0;

  
// @generated_from: blink.mojom.LocalFrame.Collapse
  virtual void Collapse(bool collapsed) = 0;

  
// @generated_from: blink.mojom.LocalFrame.EnableViewSourceMode
  virtual void EnableViewSourceMode() = 0;

  
// @generated_from: blink.mojom.LocalFrame.Focus
  virtual void Focus() = 0;

  
// @generated_from: blink.mojom.LocalFrame.ClearFocusedElement
  virtual void ClearFocusedElement() = 0;

  
// @generated_from: blink.mojom.LocalFrame.GetResourceSnapshotForWebBundle
  virtual void GetResourceSnapshotForWebBundle(::mojo::PendingReceiver<::data_decoder::mojom::blink::ResourceSnapshotForWebBundle> receiver) = 0;

  
// @generated_from: blink.mojom.LocalFrame.CopyImageAt
  virtual void CopyImageAt(const ::gfx::Point& window_point) = 0;

  
// @generated_from: blink.mojom.LocalFrame.SaveImageAt
  virtual void SaveImageAt(const ::gfx::Point& window_point) = 0;

  
// @generated_from: blink.mojom.LocalFrame.ReportBlinkFeatureUsage
  virtual void ReportBlinkFeatureUsage(const WTF::Vector<::blink::mojom::blink::WebFeature>& features) = 0;

  
// @generated_from: blink.mojom.LocalFrame.RenderFallbackContent
  virtual void RenderFallbackContent() = 0;

  
// @generated_from: blink.mojom.LocalFrame.RenderFallbackContentWithResourceTiming
  virtual void RenderFallbackContentWithResourceTiming(::blink::mojom::blink::ResourceTimingInfoPtr timing, const WTF::String& server_timing_value) = 0;


  using BeforeUnloadCallback = base::OnceCallback<void(bool, ::base::TimeTicks, ::base::TimeTicks)>;
  
// @generated_from: blink.mojom.LocalFrame.BeforeUnload
  virtual void BeforeUnload(bool is_reload, BeforeUnloadCallback callback) = 0;

  
// @generated_from: blink.mojom.LocalFrame.MediaPlayerActionAt
  virtual void MediaPlayerActionAt(const ::gfx::Point& location, ::blink::mojom::blink::MediaPlayerActionPtr action) = 0;

  
// @generated_from: blink.mojom.LocalFrame.PluginActionAt
  virtual void PluginActionAt(const ::gfx::Point& location, PluginActionType action) = 0;

  
// @generated_from: blink.mojom.LocalFrame.AdvanceFocusInFrame
  virtual void AdvanceFocusInFrame(::blink::mojom::blink::FocusType focus_type, const absl::optional<::blink::RemoteFrameToken>& source_frame_token) = 0;

  
// @generated_from: blink.mojom.LocalFrame.AdvanceFocusForIME
  virtual void AdvanceFocusForIME(::blink::mojom::blink::FocusType focus_type) = 0;

  
// @generated_from: blink.mojom.LocalFrame.ReportContentSecurityPolicyViolation
  virtual void ReportContentSecurityPolicyViolation(::network::mojom::blink::CSPViolationPtr violation) = 0;

  
// @generated_from: blink.mojom.LocalFrame.DidUpdateFramePolicy
  virtual void DidUpdateFramePolicy(const ::blink::FramePolicy& frame_policy) = 0;

  
// @generated_from: blink.mojom.LocalFrame.PostMessageEvent
  virtual void PostMessageEvent(const absl::optional<::blink::RemoteFrameToken>& source_frame_token, const ::WTF::String& source_origin, const ::WTF::String& target_origin, ::blink::BlinkTransferableMessage message) = 0;


  using JavaScriptMethodExecuteRequestCallback = base::OnceCallback<void(::base::Value)>;
  
// @generated_from: blink.mojom.LocalFrame.JavaScriptMethodExecuteRequest
  virtual void JavaScriptMethodExecuteRequest(const ::WTF::String& object_name, const ::WTF::String& method_name, ::base::Value::List arguments, bool wants_result, JavaScriptMethodExecuteRequestCallback callback) = 0;


  using JavaScriptExecuteRequestCallback = base::OnceCallback<void(::base::Value)>;
  
// @generated_from: blink.mojom.LocalFrame.JavaScriptExecuteRequest
  virtual void JavaScriptExecuteRequest(const ::WTF::String& javascript, bool wants_result, JavaScriptExecuteRequestCallback callback) = 0;


  using JavaScriptExecuteRequestForTestsCallback = base::OnceCallback<void(JavaScriptExecutionResultType, ::base::Value)>;
  
// @generated_from: blink.mojom.LocalFrame.JavaScriptExecuteRequestForTests
  virtual void JavaScriptExecuteRequestForTests(const ::WTF::String& javascript, bool has_user_gesture, bool resolve_promises, int32_t world_id, JavaScriptExecuteRequestForTestsCallback callback) = 0;


  using JavaScriptExecuteRequestInIsolatedWorldCallback = base::OnceCallback<void(::base::Value)>;
  
// @generated_from: blink.mojom.LocalFrame.JavaScriptExecuteRequestInIsolatedWorld
  virtual void JavaScriptExecuteRequestInIsolatedWorld(const ::WTF::String& javascript, bool wants_result, int32_t world_id, JavaScriptExecuteRequestInIsolatedWorldCallback callback) = 0;

  
// @generated_from: blink.mojom.LocalFrame.BindReportingObserver
  virtual void BindReportingObserver(::mojo::PendingReceiver<::blink::mojom::blink::ReportingObserver> receiver) = 0;

  
// @generated_from: blink.mojom.LocalFrame.UpdateOpener
  virtual void UpdateOpener(const absl::optional<::blink::FrameToken>& opener_frame_token) = 0;


  using GetSavableResourceLinksCallback = base::OnceCallback<void(GetSavableResourceLinksReplyPtr)>;
  
// @generated_from: blink.mojom.LocalFrame.GetSavableResourceLinks
  virtual void GetSavableResourceLinks(GetSavableResourceLinksCallback callback) = 0;

  
// @generated_from: blink.mojom.LocalFrame.MixedContentFound
  virtual void MixedContentFound(const ::blink::KURL& main_resource_url, const ::blink::KURL& mixed_content_url, ::blink::mojom::blink::RequestContextType request_context, bool was_allowed, const ::blink::KURL& url_before_redirects, bool had_redirect, ::network::mojom::blink::SourceLocationPtr source_location) = 0;

  
// @generated_from: blink.mojom.LocalFrame.BindDevToolsAgent
  virtual void BindDevToolsAgent(::mojo::PendingAssociatedRemote<::blink::mojom::blink::DevToolsAgentHost> agent_host, ::mojo::PendingAssociatedReceiver<::blink::mojom::blink::DevToolsAgent> agent) = 0;


  using ExtractSmartClipDataCallback = base::OnceCallback<void(const ::WTF::String&, const ::WTF::String&, const ::gfx::Rect&)>;
  
// @generated_from: blink.mojom.LocalFrame.ExtractSmartClipData
  virtual void ExtractSmartClipData(const ::gfx::Rect& rect, ExtractSmartClipDataCallback callback) = 0;

  
// @generated_from: blink.mojom.LocalFrame.HandleRendererDebugURL
  virtual void HandleRendererDebugURL(const ::blink::KURL& url) = 0;


  using GetCanonicalUrlForSharingCallback = base::OnceCallback<void(const absl::optional<::blink::KURL>&)>;
  
// @generated_from: blink.mojom.LocalFrame.GetCanonicalUrlForSharing
  virtual void GetCanonicalUrlForSharing(GetCanonicalUrlForSharingCallback callback) = 0;


  using GetOpenGraphMetadataCallback = base::OnceCallback<void(::blink::mojom::blink::OpenGraphMetadataPtr)>;
  
// @generated_from: blink.mojom.LocalFrame.GetOpenGraphMetadata
  virtual void GetOpenGraphMetadata(GetOpenGraphMetadataCallback callback) = 0;

  
// @generated_from: blink.mojom.LocalFrame.SetNavigationApiHistoryEntriesForRestore
  virtual void SetNavigationApiHistoryEntriesForRestore(::blink::mojom::blink::NavigationApiHistoryEntryArraysPtr entry_arrays) = 0;
};

class HighPriorityLocalFrameProxy;

template <typename ImplRefTraits>
class HighPriorityLocalFrameStub;

class HighPriorityLocalFrameRequestValidator;
class HighPriorityLocalFrameResponseValidator;


// @generated_from: blink.mojom.HighPriorityLocalFrame
class CORE_EXPORT HighPriorityLocalFrame
    : public HighPriorityLocalFrameInterfaceBase {
 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_ = HighPriorityLocalFrameInterfaceBase;
  using Proxy_ = HighPriorityLocalFrameProxy;

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

  using RequestValidator_ = HighPriorityLocalFrameRequestValidator;
  using ResponseValidator_ = HighPriorityLocalFrameResponseValidator;
  enum MethodMinVersions : uint32_t {
    kDispatchBeforeUnloadMinVersion = 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 DispatchBeforeUnload_Sym {
    NOINLINE static void IPCSymbol();
  };
#endif // !BUILDFLAG(IS_FUCHSIA)
  virtual ~HighPriorityLocalFrame() = default;


  using DispatchBeforeUnloadCallback = base::OnceCallback<void(bool, ::base::TimeTicks, ::base::TimeTicks)>;
  
// @generated_from: blink.mojom.HighPriorityLocalFrame.DispatchBeforeUnload
  virtual void DispatchBeforeUnload(bool is_reload, DispatchBeforeUnloadCallback callback) = 0;
};

class RemoteFrameHostProxy;

template <typename ImplRefTraits>
class RemoteFrameHostStub;

class RemoteFrameHostRequestValidator;


// @generated_from: blink.mojom.RemoteFrameHost
class CORE_EXPORT RemoteFrameHost
    : public RemoteFrameHostInterfaceBase {
 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_ = RemoteFrameHostInterfaceBase;
  using Proxy_ = RemoteFrameHostProxy;

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

  using RequestValidator_ = RemoteFrameHostRequestValidator;
  using ResponseValidator_ = mojo::PassThroughFilter;
  enum MethodMinVersions : uint32_t {
    kSetInheritedEffectiveTouchActionMinVersion = 0,
    kUpdateRenderThrottlingStatusMinVersion = 0,
    kVisibilityChangedMinVersion = 0,
    kDidFocusFrameMinVersion = 0,
    kCheckCompletedMinVersion = 0,
    kCapturePaintPreviewOfCrossProcessSubframeMinVersion = 0,
    kSetIsInertMinVersion = 0,
    kDidChangeOpenerMinVersion = 0,
    kAdvanceFocusMinVersion = 0,
    kRouteMessageEventMinVersion = 0,
    kPrintCrossProcessSubframeMinVersion = 0,
    kDetachMinVersion = 0,
    kUpdateViewportIntersectionMinVersion = 0,
    kSynchronizeVisualPropertiesMinVersion = 0,
    kOpenURLMinVersion = 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 SetInheritedEffectiveTouchAction_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct UpdateRenderThrottlingStatus_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct VisibilityChanged_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidFocusFrame_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct CheckCompleted_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct CapturePaintPreviewOfCrossProcessSubframe_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct SetIsInert_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidChangeOpener_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct AdvanceFocus_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct RouteMessageEvent_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct PrintCrossProcessSubframe_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct Detach_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct UpdateViewportIntersection_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct SynchronizeVisualProperties_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct OpenURL_Sym {
    NOINLINE static void IPCSymbol();
  };
#endif // !BUILDFLAG(IS_FUCHSIA)
  virtual ~RemoteFrameHost() = default;

  
// @generated_from: blink.mojom.RemoteFrameHost.SetInheritedEffectiveTouchAction
  virtual void SetInheritedEffectiveTouchAction(::cc::TouchAction touch_action) = 0;

  
// @generated_from: blink.mojom.RemoteFrameHost.UpdateRenderThrottlingStatus
  virtual void UpdateRenderThrottlingStatus(bool is_throttled, bool subtree_throttled, bool display_locked) = 0;

  
// @generated_from: blink.mojom.RemoteFrameHost.VisibilityChanged
  virtual void VisibilityChanged(::blink::mojom::blink::FrameVisibility visibility) = 0;

  
// @generated_from: blink.mojom.RemoteFrameHost.DidFocusFrame
  virtual void DidFocusFrame() = 0;

  
// @generated_from: blink.mojom.RemoteFrameHost.CheckCompleted
  virtual void CheckCompleted() = 0;

  
// @generated_from: blink.mojom.RemoteFrameHost.CapturePaintPreviewOfCrossProcessSubframe
  virtual void CapturePaintPreviewOfCrossProcessSubframe(const ::gfx::Rect& clip_rect, const ::base::UnguessableToken& guid) = 0;

  
// @generated_from: blink.mojom.RemoteFrameHost.SetIsInert
  virtual void SetIsInert(bool inert) = 0;

  
// @generated_from: blink.mojom.RemoteFrameHost.DidChangeOpener
  virtual void DidChangeOpener(const absl::optional<::blink::LocalFrameToken>& opener_frame) = 0;

  
// @generated_from: blink.mojom.RemoteFrameHost.AdvanceFocus
  virtual void AdvanceFocus(::blink::mojom::blink::FocusType focus_type, const ::blink::LocalFrameToken& source_frame_token) = 0;

  
// @generated_from: blink.mojom.RemoteFrameHost.RouteMessageEvent
  virtual void RouteMessageEvent(const absl::optional<::blink::LocalFrameToken>& source_frame_token, const ::WTF::String& source_origin, const ::WTF::String& target_origin, ::blink::BlinkTransferableMessage message) = 0;

  
// @generated_from: blink.mojom.RemoteFrameHost.PrintCrossProcessSubframe
  virtual void PrintCrossProcessSubframe(const ::gfx::Rect& frame_content_rect, int32_t document_cookie) = 0;

  
// @generated_from: blink.mojom.RemoteFrameHost.Detach
  virtual void Detach() = 0;

  
// @generated_from: blink.mojom.RemoteFrameHost.UpdateViewportIntersection
  virtual void UpdateViewportIntersection(::blink::mojom::blink::ViewportIntersectionStatePtr intersection_state, const absl::optional<::blink::FrameVisualProperties>& visual_properties) = 0;

  
// @generated_from: blink.mojom.RemoteFrameHost.SynchronizeVisualProperties
  virtual void SynchronizeVisualProperties(const ::blink::FrameVisualProperties& properties) = 0;

  
// @generated_from: blink.mojom.RemoteFrameHost.OpenURL
  virtual void OpenURL(OpenURLParamsPtr params) = 0;
};

class RemoteFrameProxy;

template <typename ImplRefTraits>
class RemoteFrameStub;

class RemoteFrameRequestValidator;


// @generated_from: blink.mojom.RemoteFrame
class CORE_EXPORT RemoteFrame
    : public RemoteFrameInterfaceBase {
 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_ = RemoteFrameInterfaceBase;
  using Proxy_ = RemoteFrameProxy;

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

  using RequestValidator_ = RemoteFrameRequestValidator;
  using ResponseValidator_ = mojo::PassThroughFilter;
  enum MethodMinVersions : uint32_t {
    kWillEnterFullscreenMinVersion = 0,
    kEnforceInsecureNavigationsSetMinVersion = 0,
    kSetFrameOwnerPropertiesMinVersion = 0,
    kEnforceInsecureRequestPolicyMinVersion = 0,
    kSetReplicatedOriginMinVersion = 0,
    kSetReplicatedIsAdSubframeMinVersion = 0,
    kSetReplicatedNameMinVersion = 0,
    kDispatchLoadEventForFrameOwnerMinVersion = 0,
    kSetNeedsOcclusionTrackingMinVersion = 0,
    kCollapseMinVersion = 0,
    kFocusMinVersion = 0,
    kSetHadStickyUserActivationBeforeNavigationMinVersion = 0,
    kBubbleLogicalScrollMinVersion = 0,
    kUpdateUserActivationStateMinVersion = 0,
    kSetEmbeddingTokenMinVersion = 0,
    kSetPageFocusMinVersion = 0,
    kRenderFallbackContentMinVersion = 0,
    kRenderFallbackContentWithResourceTimingMinVersion = 0,
    kAddResourceTimingFromChildMinVersion = 0,
    kScrollRectToVisibleMinVersion = 0,
    kDidStartLoadingMinVersion = 0,
    kDidStopLoadingMinVersion = 0,
    kIntrinsicSizingInfoOfChildChangedMinVersion = 0,
    kDidSetFramePolicyHeadersMinVersion = 0,
    kDidUpdateFramePolicyMinVersion = 0,
    kUpdateOpenerMinVersion = 0,
    kDetachAndDisposeMinVersion = 0,
    kEnableAutoResizeMinVersion = 0,
    kDisableAutoResizeMinVersion = 0,
    kDidUpdateVisualPropertiesMinVersion = 0,
    kSetFrameSinkIdMinVersion = 0,
    kChildProcessGoneMinVersion = 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 WillEnterFullscreen_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct EnforceInsecureNavigationsSet_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct SetFrameOwnerProperties_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct EnforceInsecureRequestPolicy_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct SetReplicatedOrigin_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct SetReplicatedIsAdSubframe_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct SetReplicatedName_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DispatchLoadEventForFrameOwner_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct SetNeedsOcclusionTracking_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct Collapse_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct Focus_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct SetHadStickyUserActivationBeforeNavigation_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct BubbleLogicalScroll_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct UpdateUserActivationState_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct SetEmbeddingToken_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct SetPageFocus_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct RenderFallbackContent_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct RenderFallbackContentWithResourceTiming_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct AddResourceTimingFromChild_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct ScrollRectToVisible_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidStartLoading_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidStopLoading_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct IntrinsicSizingInfoOfChildChanged_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidSetFramePolicyHeaders_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidUpdateFramePolicy_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct UpdateOpener_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DetachAndDispose_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct EnableAutoResize_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DisableAutoResize_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidUpdateVisualProperties_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct SetFrameSinkId_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct ChildProcessGone_Sym {
    NOINLINE static void IPCSymbol();
  };
#endif // !BUILDFLAG(IS_FUCHSIA)
  virtual ~RemoteFrame() = default;

  
// @generated_from: blink.mojom.RemoteFrame.WillEnterFullscreen
  virtual void WillEnterFullscreen(::blink::mojom::blink::FullscreenOptionsPtr options) = 0;

  
// @generated_from: blink.mojom.RemoteFrame.EnforceInsecureNavigationsSet
  virtual void EnforceInsecureNavigationsSet(const WTF::Vector<uint32_t>& set) = 0;

  
// @generated_from: blink.mojom.RemoteFrame.SetFrameOwnerProperties
  virtual void SetFrameOwnerProperties(::blink::mojom::blink::FrameOwnerPropertiesPtr properties) = 0;

  
// @generated_from: blink.mojom.RemoteFrame.EnforceInsecureRequestPolicy
  virtual void EnforceInsecureRequestPolicy(::blink::mojom::blink::InsecureRequestPolicy policy) = 0;

  
// @generated_from: blink.mojom.RemoteFrame.SetReplicatedOrigin
  virtual void SetReplicatedOrigin(const ::scoped_refptr<const ::blink::SecurityOrigin>& origin, bool is_potentially_trustworthy_unique_origin) = 0;

  
// @generated_from: blink.mojom.RemoteFrame.SetReplicatedIsAdSubframe
  virtual void SetReplicatedIsAdSubframe(bool is_ad_subframe) = 0;

  
// @generated_from: blink.mojom.RemoteFrame.SetReplicatedName
  virtual void SetReplicatedName(const WTF::String& name, const WTF::String& unique_name) = 0;

  
// @generated_from: blink.mojom.RemoteFrame.DispatchLoadEventForFrameOwner
  virtual void DispatchLoadEventForFrameOwner() = 0;

  
// @generated_from: blink.mojom.RemoteFrame.SetNeedsOcclusionTracking
  virtual void SetNeedsOcclusionTracking(bool needs_tracking) = 0;

  
// @generated_from: blink.mojom.RemoteFrame.Collapse
  virtual void Collapse(bool collapsed) = 0;

  
// @generated_from: blink.mojom.RemoteFrame.Focus
  virtual void Focus() = 0;

  
// @generated_from: blink.mojom.RemoteFrame.SetHadStickyUserActivationBeforeNavigation
  virtual void SetHadStickyUserActivationBeforeNavigation(bool has_gesture) = 0;

  
// @generated_from: blink.mojom.RemoteFrame.BubbleLogicalScroll
  virtual void BubbleLogicalScroll(::blink::mojom::blink::ScrollDirection direction, ::ui::ScrollGranularity granularity) = 0;

  
// @generated_from: blink.mojom.RemoteFrame.UpdateUserActivationState
  virtual void UpdateUserActivationState(::blink::mojom::blink::UserActivationUpdateType state_update_type, ::blink::mojom::blink::UserActivationNotificationType notification_type) = 0;

  
// @generated_from: blink.mojom.RemoteFrame.SetEmbeddingToken
  virtual void SetEmbeddingToken(const ::base::UnguessableToken& embedding_token) = 0;

  
// @generated_from: blink.mojom.RemoteFrame.SetPageFocus
  virtual void SetPageFocus(bool is_focused) = 0;

  
// @generated_from: blink.mojom.RemoteFrame.RenderFallbackContent
  virtual void RenderFallbackContent() = 0;

  
// @generated_from: blink.mojom.RemoteFrame.RenderFallbackContentWithResourceTiming
  virtual void RenderFallbackContentWithResourceTiming(::blink::mojom::blink::ResourceTimingInfoPtr timing, const WTF::String& server_timing_value) = 0;

  
// @generated_from: blink.mojom.RemoteFrame.AddResourceTimingFromChild
  virtual void AddResourceTimingFromChild(::blink::mojom::blink::ResourceTimingInfoPtr timing) = 0;

  
// @generated_from: blink.mojom.RemoteFrame.ScrollRectToVisible
  virtual void ScrollRectToVisible(const ::gfx::RectF& rect, ::blink::mojom::blink::ScrollIntoViewParamsPtr params) = 0;

  
// @generated_from: blink.mojom.RemoteFrame.DidStartLoading
  virtual void DidStartLoading() = 0;

  
// @generated_from: blink.mojom.RemoteFrame.DidStopLoading
  virtual void DidStopLoading() = 0;

  
// @generated_from: blink.mojom.RemoteFrame.IntrinsicSizingInfoOfChildChanged
  virtual void IntrinsicSizingInfoOfChildChanged(::blink::mojom::blink::IntrinsicSizingInfoPtr sizing_info) = 0;

  
// @generated_from: blink.mojom.RemoteFrame.DidSetFramePolicyHeaders
  virtual void DidSetFramePolicyHeaders(::network::mojom::blink::WebSandboxFlags sandbox_flags, const WTF::Vector<::blink::ParsedPermissionsPolicyDeclaration>& parsed_permissions_policy) = 0;

  
// @generated_from: blink.mojom.RemoteFrame.DidUpdateFramePolicy
  virtual void DidUpdateFramePolicy(const ::blink::FramePolicy& frame_policy) = 0;

  
// @generated_from: blink.mojom.RemoteFrame.UpdateOpener
  virtual void UpdateOpener(const absl::optional<::blink::FrameToken>& opener_frame_token) = 0;

  
// @generated_from: blink.mojom.RemoteFrame.DetachAndDispose
  virtual void DetachAndDispose() = 0;

  
// @generated_from: blink.mojom.RemoteFrame.EnableAutoResize
  virtual void EnableAutoResize(const ::gfx::Size& min_size, const ::gfx::Size& max_size) = 0;

  
// @generated_from: blink.mojom.RemoteFrame.DisableAutoResize
  virtual void DisableAutoResize() = 0;

  
// @generated_from: blink.mojom.RemoteFrame.DidUpdateVisualProperties
  virtual void DidUpdateVisualProperties(const ::cc::RenderFrameMetadata& metadata) = 0;

  
// @generated_from: blink.mojom.RemoteFrame.SetFrameSinkId
  virtual void SetFrameSinkId(const ::viz::FrameSinkId& frame_sink_id) = 0;

  
// @generated_from: blink.mojom.RemoteFrame.ChildProcessGone
  virtual void ChildProcessGone() = 0;
};

class LocalMainFrameProxy;

template <typename ImplRefTraits>
class LocalMainFrameStub;

class LocalMainFrameRequestValidator;
class LocalMainFrameResponseValidator;


// @generated_from: blink.mojom.LocalMainFrame
class CORE_EXPORT LocalMainFrame
    : public LocalMainFrameInterfaceBase {
 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_ = true;
  static constexpr bool HasSyncMethods_ = false;
  static constexpr bool HasUninterruptableMethods_ = false;

  using Base_ = LocalMainFrameInterfaceBase;
  using Proxy_ = LocalMainFrameProxy;

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

  using RequestValidator_ = LocalMainFrameRequestValidator;
  using ResponseValidator_ = LocalMainFrameResponseValidator;
  enum MethodMinVersions : uint32_t {
    kAnimateDoubleTapZoomMinVersion = 0,
    kSetScaleFactorMinVersion = 0,
    kClosePageMinVersion = 0,
    kSetInitialFocusMinVersion = 0,
    kEnablePreferredSizeChangedModeMinVersion = 0,
    kZoomToFindInPageRectMinVersion = 0,
    kInstallCoopAccessMonitorMinVersion = 0,
    kOnPortalActivatedMinVersion = 0,
    kForwardMessageFromHostMinVersion = 0,
    kUpdateBrowserControlsStateMinVersion = 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 AnimateDoubleTapZoom_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct SetScaleFactor_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct ClosePage_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct SetInitialFocus_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct EnablePreferredSizeChangedMode_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct ZoomToFindInPageRect_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct InstallCoopAccessMonitor_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct OnPortalActivated_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct ForwardMessageFromHost_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct UpdateBrowserControlsState_Sym {
    NOINLINE static void IPCSymbol();
  };
#endif // !BUILDFLAG(IS_FUCHSIA)
  virtual ~LocalMainFrame() = default;

  
// @generated_from: blink.mojom.LocalMainFrame.AnimateDoubleTapZoom
  virtual void AnimateDoubleTapZoom(const ::gfx::Point& point, const ::gfx::Rect& rect) = 0;

  
// @generated_from: blink.mojom.LocalMainFrame.SetScaleFactor
  virtual void SetScaleFactor(float scale) = 0;


  using ClosePageCallback = base::OnceCallback<void()>;
  
// @generated_from: blink.mojom.LocalMainFrame.ClosePage
  virtual void ClosePage(ClosePageCallback callback) = 0;

  
// @generated_from: blink.mojom.LocalMainFrame.SetInitialFocus
  virtual void SetInitialFocus(bool reverse) = 0;

  
// @generated_from: blink.mojom.LocalMainFrame.EnablePreferredSizeChangedMode
  virtual void EnablePreferredSizeChangedMode() = 0;

  
// @generated_from: blink.mojom.LocalMainFrame.ZoomToFindInPageRect
  virtual void ZoomToFindInPageRect(const ::gfx::Rect& rect_in_root_frame) = 0;

  
// @generated_from: blink.mojom.LocalMainFrame.InstallCoopAccessMonitor
  virtual void InstallCoopAccessMonitor(const ::blink::FrameToken& accessed_window, ::network::mojom::blink::CrossOriginOpenerPolicyReporterParamsPtr coop_reporter_info) = 0;


  using OnPortalActivatedCallback = base::OnceCallback<void(::blink::mojom::blink::PortalActivateResult)>;
  
// @generated_from: blink.mojom.LocalMainFrame.OnPortalActivated
  virtual void OnPortalActivated(const ::blink::PortalToken& portal_token, ::mojo::PendingAssociatedRemote<::blink::mojom::blink::Portal> portal, ::mojo::PendingAssociatedReceiver<::blink::mojom::blink::PortalClient> portal_client, ::blink::BlinkTransferableMessage data, uint64_t trace_id, OnPortalActivatedCallback callback) = 0;

  
// @generated_from: blink.mojom.LocalMainFrame.ForwardMessageFromHost
  virtual void ForwardMessageFromHost(::blink::BlinkTransferableMessage message, const ::scoped_refptr<const ::blink::SecurityOrigin>& source_origin) = 0;

  
// @generated_from: blink.mojom.LocalMainFrame.UpdateBrowserControlsState
  virtual void UpdateBrowserControlsState(::cc::BrowserControlsState constraints, ::cc::BrowserControlsState current, bool animate) = 0;
};

class RemoteMainFrameProxy;

template <typename ImplRefTraits>
class RemoteMainFrameStub;

class RemoteMainFrameRequestValidator;


// @generated_from: blink.mojom.RemoteMainFrame
class CORE_EXPORT RemoteMainFrame
    : public RemoteMainFrameInterfaceBase {
 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_ = RemoteMainFrameInterfaceBase;
  using Proxy_ = RemoteMainFrameProxy;

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

  using RequestValidator_ = RemoteMainFrameRequestValidator;
  using ResponseValidator_ = mojo::PassThroughFilter;
  enum MethodMinVersions : uint32_t {
    kUpdateTextAutosizerPageInfoMinVersion = 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 UpdateTextAutosizerPageInfo_Sym {
    NOINLINE static void IPCSymbol();
  };
#endif // !BUILDFLAG(IS_FUCHSIA)
  virtual ~RemoteMainFrame() = default;

  
// @generated_from: blink.mojom.RemoteMainFrame.UpdateTextAutosizerPageInfo
  virtual void UpdateTextAutosizerPageInfo(::blink::mojom::blink::TextAutosizerPageInfoPtr page_info) = 0;
};

class LocalMainFrameHostProxy;

template <typename ImplRefTraits>
class LocalMainFrameHostStub;

class LocalMainFrameHostRequestValidator;
class LocalMainFrameHostResponseValidator;


// @generated_from: blink.mojom.LocalMainFrameHost
class CORE_EXPORT LocalMainFrameHost
    : public LocalMainFrameHostInterfaceBase {
 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_ = LocalMainFrameHostInterfaceBase;
  using Proxy_ = LocalMainFrameHostProxy;

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

  using RequestValidator_ = LocalMainFrameHostRequestValidator;
  using ResponseValidator_ = LocalMainFrameHostResponseValidator;
  enum MethodMinVersions : uint32_t {
    kScaleFactorChangedMinVersion = 0,
    kContentsPreferredSizeChangedMinVersion = 0,
    kTextAutosizerPageInfoChangedMinVersion = 0,
    kFocusPageMinVersion = 0,
    kTakeFocusMinVersion = 0,
    kUpdateTargetURLMinVersion = 0,
    kRequestCloseMinVersion = 0,
    kShowCreatedWindowMinVersion = 0,
    kSetWindowRectMinVersion = 0,
    kDidFirstVisuallyNonEmptyPaintMinVersion = 0,
    kDidAccessInitialMainDocumentMinVersion = 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 ScaleFactorChanged_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct ContentsPreferredSizeChanged_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct TextAutosizerPageInfoChanged_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct FocusPage_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct TakeFocus_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct UpdateTargetURL_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct RequestClose_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct ShowCreatedWindow_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct SetWindowRect_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidFirstVisuallyNonEmptyPaint_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct DidAccessInitialMainDocument_Sym {
    NOINLINE static void IPCSymbol();
  };
#endif // !BUILDFLAG(IS_FUCHSIA)
  virtual ~LocalMainFrameHost() = default;

  
// @generated_from: blink.mojom.LocalMainFrameHost.ScaleFactorChanged
  virtual void ScaleFactorChanged(float scale) = 0;

  
// @generated_from: blink.mojom.LocalMainFrameHost.ContentsPreferredSizeChanged
  virtual void ContentsPreferredSizeChanged(const ::gfx::Size& pref_size) = 0;

  
// @generated_from: blink.mojom.LocalMainFrameHost.TextAutosizerPageInfoChanged
  virtual void TextAutosizerPageInfoChanged(::blink::mojom::blink::TextAutosizerPageInfoPtr page_info) = 0;

  
// @generated_from: blink.mojom.LocalMainFrameHost.FocusPage
  virtual void FocusPage() = 0;

  
// @generated_from: blink.mojom.LocalMainFrameHost.TakeFocus
  virtual void TakeFocus(bool reverse) = 0;


  using UpdateTargetURLCallback = base::OnceCallback<void()>;
  
// @generated_from: blink.mojom.LocalMainFrameHost.UpdateTargetURL
  virtual void UpdateTargetURL(const ::blink::KURL& url, UpdateTargetURLCallback callback) = 0;

  
// @generated_from: blink.mojom.LocalMainFrameHost.RequestClose
  virtual void RequestClose() = 0;


  using ShowCreatedWindowCallback = base::OnceCallback<void()>;
  
// @generated_from: blink.mojom.LocalMainFrameHost.ShowCreatedWindow
  virtual void ShowCreatedWindow(const ::blink::LocalFrameToken& opener_frame_token, ::ui::mojom::blink::WindowOpenDisposition disposition, const ::gfx::Rect& rect, bool opened_by_user_gesture, ShowCreatedWindowCallback callback) = 0;


  using SetWindowRectCallback = base::OnceCallback<void()>;
  
// @generated_from: blink.mojom.LocalMainFrameHost.SetWindowRect
  virtual void SetWindowRect(const ::gfx::Rect& bounds, SetWindowRectCallback callback) = 0;

  
// @generated_from: blink.mojom.LocalMainFrameHost.DidFirstVisuallyNonEmptyPaint
  virtual void DidFirstVisuallyNonEmptyPaint() = 0;

  
// @generated_from: blink.mojom.LocalMainFrameHost.DidAccessInitialMainDocument
  virtual void DidAccessInitialMainDocument() = 0;
};

class RemoteMainFrameHostProxy;

template <typename ImplRefTraits>
class RemoteMainFrameHostStub;

class RemoteMainFrameHostRequestValidator;
class RemoteMainFrameHostResponseValidator;


// @generated_from: blink.mojom.RemoteMainFrameHost
class CORE_EXPORT RemoteMainFrameHost
    : public RemoteMainFrameHostInterfaceBase {
 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_ = RemoteMainFrameHostInterfaceBase;
  using Proxy_ = RemoteMainFrameHostProxy;

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

  using RequestValidator_ = RemoteMainFrameHostRequestValidator;
  using ResponseValidator_ = RemoteMainFrameHostResponseValidator;
  enum MethodMinVersions : uint32_t {
    kFocusPageMinVersion = 0,
    kTakeFocusMinVersion = 0,
    kUpdateTargetURLMinVersion = 0,
    kRouteCloseEventMinVersion = 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 FocusPage_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct TakeFocus_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct UpdateTargetURL_Sym {
    NOINLINE static void IPCSymbol();
  };
  struct RouteCloseEvent_Sym {
    NOINLINE static void IPCSymbol();
  };
#endif // !BUILDFLAG(IS_FUCHSIA)
  virtual ~RemoteMainFrameHost() = default;

  
// @generated_from: blink.mojom.RemoteMainFrameHost.FocusPage
  virtual void FocusPage() = 0;

  
// @generated_from: blink.mojom.RemoteMainFrameHost.TakeFocus
  virtual void TakeFocus(bool reverse) = 0;


  using UpdateTargetURLCallback = base::OnceCallback<void()>;
  
// @generated_from: blink.mojom.RemoteMainFrameHost.UpdateTargetURL
  virtual void UpdateTargetURL(const ::blink::KURL& url, UpdateTargetURLCallback callback) = 0;

  
// @generated_from: blink.mojom.RemoteMainFrameHost.RouteCloseEvent
  virtual void RouteCloseEvent() = 0;
};



// @generated_from: blink.mojom.KeepAliveHandle
class CORE_EXPORT KeepAliveHandleProxy
    : public KeepAliveHandle {
 public:
  using InterfaceType = KeepAliveHandle;

  explicit KeepAliveHandleProxy(mojo::MessageReceiverWithResponder* receiver);

 private:
  mojo::MessageReceiverWithResponder* receiver_;
};



// @generated_from: blink.mojom.KeepAliveHandleFactory
class CORE_EXPORT KeepAliveHandleFactoryProxy
    : public KeepAliveHandleFactory {
 public:
  using InterfaceType = KeepAliveHandleFactory;

  explicit KeepAliveHandleFactoryProxy(mojo::MessageReceiverWithResponder* receiver);
  
// @generated_from: blink.mojom.KeepAliveHandleFactory.IssueKeepAliveHandle
  void IssueKeepAliveHandle(::mojo::PendingReceiver<KeepAliveHandle> keep_alive_handle) final;

 private:
  mojo::MessageReceiverWithResponder* receiver_;
};



// @generated_from: blink.mojom.LocalFrameHost
class CORE_EXPORT LocalFrameHostProxy
    : public LocalFrameHost {
 public:
  using InterfaceType = LocalFrameHost;

  explicit LocalFrameHostProxy(mojo::MessageReceiverWithResponder* receiver);
  
// @generated_from: blink.mojom.LocalFrameHost.EnterFullscreen
  void EnterFullscreen(::blink::mojom::blink::FullscreenOptionsPtr options, EnterFullscreenCallback callback) final;
  
// @generated_from: blink.mojom.LocalFrameHost.ExitFullscreen
  void ExitFullscreen() final;
  
// @generated_from: blink.mojom.LocalFrameHost.FullscreenStateChanged
  void FullscreenStateChanged(bool is_fullscreen, ::blink::mojom::blink::FullscreenOptionsPtr options) final;
  
// @generated_from: blink.mojom.LocalFrameHost.RegisterProtocolHandler
  void RegisterProtocolHandler(const WTF::String& scheme, const ::blink::KURL& url, bool user_gesture) final;
  
// @generated_from: blink.mojom.LocalFrameHost.UnregisterProtocolHandler
  void UnregisterProtocolHandler(const WTF::String& scheme, const ::blink::KURL& url, bool user_gesture) final;
  
// @generated_from: blink.mojom.LocalFrameHost.DidDisplayInsecureContent
  void DidDisplayInsecureContent() final;
  
// @generated_from: blink.mojom.LocalFrameHost.DidContainInsecureFormAction
  void DidContainInsecureFormAction() final;
  
// @generated_from: blink.mojom.LocalFrameHost.MainDocumentElementAvailable
  void MainDocumentElementAvailable(bool uses_temporary_zoom_level) final;
  
// @generated_from: blink.mojom.LocalFrameHost.SetNeedsOcclusionTracking
  void SetNeedsOcclusionTracking(bool needs_tracking) final;
  
// @generated_from: blink.mojom.LocalFrameHost.SetVirtualKeyboardOverlayPolicy
  void SetVirtualKeyboardOverlayPolicy(bool vk_overlays_content) final;
  
// @generated_from: blink.mojom.LocalFrameHost.VisibilityChanged
  void VisibilityChanged(::blink::mojom::blink::FrameVisibility visibility) final;
  
// @generated_from: blink.mojom.LocalFrameHost.DidChangeThemeColor
  void DidChangeThemeColor(absl::optional<::SkColor> theme_color) final;
  
// @generated_from: blink.mojom.LocalFrameHost.DidChangeBackgroundColor
  void DidChangeBackgroundColor(::SkColor background_color, bool color_adjust) final;
  
// @generated_from: blink.mojom.LocalFrameHost.DidFailLoadWithError
  void DidFailLoadWithError(const ::blink::KURL& url, int32_t error_code) final;
  
// @generated_from: blink.mojom.LocalFrameHost.DidFocusFrame
  void DidFocusFrame() final;
  
// @generated_from: blink.mojom.LocalFrameHost.DidCallFocus
  void DidCallFocus() final;
  
// @generated_from: blink.mojom.LocalFrameHost.EnforceInsecureRequestPolicy
  void EnforceInsecureRequestPolicy(::blink::mojom::blink::InsecureRequestPolicy policy_bitmap) final;
  
// @generated_from: blink.mojom.LocalFrameHost.EnforceInsecureNavigationsSet
  void EnforceInsecureNavigationsSet(const WTF::Vector<uint32_t>& set) final;
  
// @generated_from: blink.mojom.LocalFrameHost.SuddenTerminationDisablerChanged
  void SuddenTerminationDisablerChanged(bool present, ::blink::mojom::blink::SuddenTerminationDisablerType disabler_type) final;
  
// @generated_from: blink.mojom.LocalFrameHost.HadStickyUserActivationBeforeNavigationChanged
  void HadStickyUserActivationBeforeNavigationChanged(bool has_gesture) final;
  
// @generated_from: blink.mojom.LocalFrameHost.ScrollRectToVisibleInParentFrame
  void ScrollRectToVisibleInParentFrame(const ::gfx::RectF& rect_to_scroll, ::blink::mojom::blink::ScrollIntoViewParamsPtr params) final;
  
// @generated_from: blink.mojom.LocalFrameHost.BubbleLogicalScrollInParentFrame
  void BubbleLogicalScrollInParentFrame(::blink::mojom::blink::ScrollDirection direction, ::ui::ScrollGranularity granularity) final;
  
// @generated_from: blink.mojom.LocalFrameHost.DidBlockNavigation
  void DidBlockNavigation(const ::blink::KURL& blocked_url, const ::blink::KURL& initiator_url, ::blink::mojom::blink::NavigationBlockedReason reason) final;
  
// @generated_from: blink.mojom.LocalFrameHost.DidChangeLoadProgress
  void DidChangeLoadProgress(double load_progress) final;
  
// @generated_from: blink.mojom.LocalFrameHost.DidFinishLoad
  void DidFinishLoad(const ::blink::KURL& validated_url) final;
  
// @generated_from: blink.mojom.LocalFrameHost.DispatchLoad
  void DispatchLoad() final;
  
// @generated_from: blink.mojom.LocalFrameHost.GoToEntryAtOffset
  void GoToEntryAtOffset(int32_t offset, bool has_user_gesture) final;
  
// @generated_from: blink.mojom.LocalFrameHost.NavigateToNavigationApiKey
  void NavigateToNavigationApiKey(const WTF::String& key, bool has_user_gesture) final;
  
// @generated_from: blink.mojom.LocalFrameHost.UpdateTitle
  void UpdateTitle(const ::WTF::String& title, ::base::i18n::TextDirection title_direction) final;
  
// @generated_from: blink.mojom.LocalFrameHost.UpdateUserActivationState
  void UpdateUserActivationState(::blink::mojom::blink::UserActivationUpdateType update_type, ::blink::mojom::blink::UserActivationNotificationType notification_type) final;
  
// @generated_from: blink.mojom.LocalFrameHost.HandleAccessibilityFindInPageResult
  void HandleAccessibilityFindInPageResult(FindInPageResultAXParamsPtr params) final;
  
// @generated_from: blink.mojom.LocalFrameHost.HandleAccessibilityFindInPageTermination
  void HandleAccessibilityFindInPageTermination() final;
  
// @generated_from: blink.mojom.LocalFrameHost.DocumentOnLoadCompleted
  void DocumentOnLoadCompleted() final;
  
// @generated_from: blink.mojom.LocalFrameHost.ForwardResourceTimingToParent
  void ForwardResourceTimingToParent(::blink::mojom::blink::ResourceTimingInfoPtr timing) final;
  
// @generated_from: blink.mojom.LocalFrameHost.DidDispatchDOMContentLoadedEvent
  void DidDispatchDOMContentLoadedEvent() final;
  
// @generated_from: blink.mojom.LocalFrameHost.RunModalAlertDialog
  bool RunModalAlertDialog(const ::WTF::String& alert_message, bool disable_third_party_subframe_suppresion) final;
  
// @generated_from: blink.mojom.LocalFrameHost.RunModalAlertDialog
  void RunModalAlertDialog(const ::WTF::String& alert_message, bool disable_third_party_subframe_suppresion, RunModalAlertDialogCallback callback) final;
  
// @generated_from: blink.mojom.LocalFrameHost.RunModalConfirmDialog
  bool RunModalConfirmDialog(const ::WTF::String& alert_message, bool disable_third_party_subframe_suppresion, bool* out_success) final;
  
// @generated_from: blink.mojom.LocalFrameHost.RunModalConfirmDialog
  void RunModalConfirmDialog(const ::WTF::String& alert_message, bool disable_third_party_subframe_suppresion, RunModalConfirmDialogCallback callback) final;
  
// @generated_from: blink.mojom.LocalFrameHost.RunModalPromptDialog
  bool RunModalPromptDialog(const ::WTF::String& alert_message, const ::WTF::String& default_value, bool disable_third_party_subframe_suppresion, bool* out_success, ::WTF::String* out_result) final;
  
// @generated_from: blink.mojom.LocalFrameHost.RunModalPromptDialog
  void RunModalPromptDialog(const ::WTF::String& alert_message, const ::WTF::String& default_value, bool disable_third_party_subframe_suppresion, RunModalPromptDialogCallback callback) final;
  
// @generated_from: blink.mojom.LocalFrameHost.RunBeforeUnloadConfirm
  bool RunBeforeUnloadConfirm(bool is_reload, bool* out_success) final;
  
// @generated_from: blink.mojom.LocalFrameHost.RunBeforeUnloadConfirm
  void RunBeforeUnloadConfirm(bool is_reload, RunBeforeUnloadConfirmCallback callback) final;
  
// @generated_from: blink.mojom.LocalFrameHost.UpdateFaviconURL
  void UpdateFaviconURL(WTF::Vector<::blink::mojom::blink::FaviconURLPtr> favicon_urls) final;
  
// @generated_from: blink.mojom.LocalFrameHost.DownloadURL
  void DownloadURL(DownloadURLParamsPtr params) final;
  
// @generated_from: blink.mojom.LocalFrameHost.FocusedElementChanged
  void FocusedElementChanged(bool is_editable_element, const ::gfx::Rect& bounds_in_frame_widget, ::blink::mojom::blink::FocusType focus_type) final;
  
// @generated_from: blink.mojom.LocalFrameHost.TextSelectionChanged
  void TextSelectionChanged(const ::WTF::String& text, uint32_t offset, const ::gfx::Range& range) final;
  
// @generated_from: blink.mojom.LocalFrameHost.ShowPopupMenu
  void ShowPopupMenu(::mojo::PendingRemote<::blink::mojom::blink::PopupMenuClient> popup_client, const ::gfx::Rect& bounds, int32_t item_height, double font_size, int32_t selected_item, WTF::Vector<::blink::mojom::blink::MenuItemPtr> menu_items, bool right_aligned, bool allow_multiple_selection) final;
  
// @generated_from: blink.mojom.LocalFrameHost.CreateNewPopupWidget
  void CreateNewPopupWidget(::mojo::PendingAssociatedReceiver<::blink::mojom::blink::PopupWidgetHost> popup_host, ::mojo::PendingAssociatedReceiver<::blink::mojom::blink::WidgetHost> blink_widget_host, ::mojo::PendingAssociatedRemote<::blink::mojom::blink::Widget> blink_widget) final;
  
// @generated_from: blink.mojom.LocalFrameHost.ShowContextMenu
  void ShowContextMenu(::mojo::PendingAssociatedRemote<::blink::mojom::blink::ContextMenuClient> client, const ::blink::UntrustworthyContextMenuParams& params) final;
  
// @generated_from: blink.mojom.LocalFrameHost.DidLoadResourceFromMemoryCache
  void DidLoadResourceFromMemoryCache(const ::blink::KURL& url, const WTF::String& http_method, const WTF::String& mime_type, ::network::mojom::blink::RequestDestination request_destination, bool include_credentials) final;
  
// @generated_from: blink.mojom.LocalFrameHost.DidChangeFrameOwnerProperties
  void DidChangeFrameOwnerProperties(const ::blink::FrameToken& child_frame_token, ::blink::mojom::blink::FrameOwnerPropertiesPtr frame_owner_properties) final;
  
// @generated_from: blink.mojom.LocalFrameHost.DidChangeOpener
  void DidChangeOpener(const absl::optional<::blink::LocalFrameToken>& opener_frame) final;
  
// @generated_from: blink.mojom.LocalFrameHost.DidChangeFramePolicy
  void DidChangeFramePolicy(const ::blink::FrameToken& child_frame_token, const ::blink::FramePolicy& frame_policy) final;
  
// @generated_from: blink.mojom.LocalFrameHost.DidChangeIframeAttributes
  void DidChangeIframeAttributes(const ::blink::FrameToken& child_frame_token, ::network::mojom::blink::ContentSecurityPolicyPtr parsed_csp_attribute, bool anonymous) final;
  
// @generated_from: blink.mojom.LocalFrameHost.CapturePaintPreviewOfSubframe
  void CapturePaintPreviewOfSubframe(const ::gfx::Rect& clip_rect, const ::base::UnguessableToken& guid) final;
  
// @generated_from: blink.mojom.LocalFrameHost.SetCloseListener
  void SetCloseListener(::mojo::PendingRemote<::blink::mojom::blink::CloseListener> listener) final;
  
// @generated_from: blink.mojom.LocalFrameHost.Detach
  void Detach() final;
  
// @generated_from: blink.mojom.LocalFrameHost.GetKeepAliveHandleFactory
  void GetKeepAliveHandleFactory(::mojo::PendingReceiver<KeepAliveHandleFactory> factory) final;
  
// @generated_from: blink.mojom.LocalFrameHost.DidAddMessageToConsole
  void DidAddMessageToConsole(::blink::mojom::blink::ConsoleMessageLevel log_level, const ::WTF::String& msg, uint32_t line_number, const ::WTF::String& source_id, const ::WTF::String& untrusted_stack_trace) final;
  
// @generated_from: blink.mojom.LocalFrameHost.FrameSizeChanged
  void FrameSizeChanged(const ::gfx::Size& size) final;
  
// @generated_from: blink.mojom.LocalFrameHost.DidUpdatePreferredColorScheme
  void DidUpdatePreferredColorScheme(::blink::mojom::blink::PreferredColorScheme preferred_color_scheme) final;
  
// @generated_from: blink.mojom.LocalFrameHost.DidInferColorScheme
  void DidInferColorScheme(::blink::mojom::blink::PreferredColorScheme color_scheme) final;
  
// @generated_from: blink.mojom.LocalFrameHost.DidChangeSrcDoc
  void DidChangeSrcDoc(const ::blink::FrameToken& child_frame_token, const WTF::String& srcdoc_value) final;
  
// @generated_from: blink.mojom.LocalFrameHost.ReceivedDelegatedCapability
  void ReceivedDelegatedCapability(::blink::mojom::blink::DelegatedCapability delegated_capability) final;

 private:
  mojo::MessageReceiverWithResponder* receiver_;
};



// @generated_from: blink.mojom.LocalFrame
class CORE_EXPORT LocalFrameProxy
    : public LocalFrame {
 public:
  using InterfaceType = LocalFrame;

  explicit LocalFrameProxy(mojo::MessageReceiverWithResponder* receiver);
  
// @generated_from: blink.mojom.LocalFrame.GetTextSurroundingSelection
  void GetTextSurroundingSelection(uint32_t max_length, GetTextSurroundingSelectionCallback callback) final;
  
// @generated_from: blink.mojom.LocalFrame.SendInterventionReport
  void SendInterventionReport(const WTF::String& id, const WTF::String& message) final;
  
// @generated_from: blink.mojom.LocalFrame.SetFrameOwnerProperties
  void SetFrameOwnerProperties(::blink::mojom::blink::FrameOwnerPropertiesPtr properties) final;
  
// @generated_from: blink.mojom.LocalFrame.NotifyUserActivation
  void NotifyUserActivation(::blink::mojom::blink::UserActivationNotificationType notification_type) final;
  
// @generated_from: blink.mojom.LocalFrame.NotifyVirtualKeyboardOverlayRect
  void NotifyVirtualKeyboardOverlayRect(const ::gfx::Rect& keyboard_rect) final;
  
// @generated_from: blink.mojom.LocalFrame.AddMessageToConsole
  void AddMessageToConsole(::blink::mojom::blink::ConsoleMessageLevel level, const WTF::String& message, bool discard_duplicates) final;
  
// @generated_from: blink.mojom.LocalFrame.AddInspectorIssue
  void AddInspectorIssue(::blink::mojom::blink::InspectorIssueInfoPtr info) final;
  
// @generated_from: blink.mojom.LocalFrame.SwapInImmediately
  void SwapInImmediately() final;
  
// @generated_from: blink.mojom.LocalFrame.CheckCompleted
  void CheckCompleted() final;
  
// @generated_from: blink.mojom.LocalFrame.StopLoading
  void StopLoading() final;
  
// @generated_from: blink.mojom.LocalFrame.Collapse
  void Collapse(bool collapsed) final;
  
// @generated_from: blink.mojom.LocalFrame.EnableViewSourceMode
  void EnableViewSourceMode() final;
  
// @generated_from: blink.mojom.LocalFrame.Focus
  void Focus() final;
  
// @generated_from: blink.mojom.LocalFrame.ClearFocusedElement
  void ClearFocusedElement() final;
  
// @generated_from: blink.mojom.LocalFrame.GetResourceSnapshotForWebBundle
  void GetResourceSnapshotForWebBundle(::mojo::PendingReceiver<::data_decoder::mojom::blink::ResourceSnapshotForWebBundle> receiver) final;
  
// @generated_from: blink.mojom.LocalFrame.CopyImageAt
  void CopyImageAt(const ::gfx::Point& window_point) final;
  
// @generated_from: blink.mojom.LocalFrame.SaveImageAt
  void SaveImageAt(const ::gfx::Point& window_point) final;
  
// @generated_from: blink.mojom.LocalFrame.ReportBlinkFeatureUsage
  void ReportBlinkFeatureUsage(const WTF::Vector<::blink::mojom::blink::WebFeature>& features) final;
  
// @generated_from: blink.mojom.LocalFrame.RenderFallbackContent
  void RenderFallbackContent() final;
  
// @generated_from: blink.mojom.LocalFrame.RenderFallbackContentWithResourceTiming
  void RenderFallbackContentWithResourceTiming(::blink::mojom::blink::ResourceTimingInfoPtr timing, const WTF::String& server_timing_value) final;
  
// @generated_from: blink.mojom.LocalFrame.BeforeUnload
  void BeforeUnload(bool is_reload, BeforeUnloadCallback callback) final;
  
// @generated_from: blink.mojom.LocalFrame.MediaPlayerActionAt
  void MediaPlayerActionAt(const ::gfx::Point& location, ::blink::mojom::blink::MediaPlayerActionPtr action) final;
  
// @generated_from: blink.mojom.LocalFrame.PluginActionAt
  void PluginActionAt(const ::gfx::Point& location, PluginActionType action) final;
  
// @generated_from: blink.mojom.LocalFrame.AdvanceFocusInFrame
  void AdvanceFocusInFrame(::blink::mojom::blink::FocusType focus_type, const absl::optional<::blink::RemoteFrameToken>& source_frame_token) final;
  
// @generated_from: blink.mojom.LocalFrame.AdvanceFocusForIME
  void AdvanceFocusForIME(::blink::mojom::blink::FocusType focus_type) final;
  
// @generated_from: blink.mojom.LocalFrame.ReportContentSecurityPolicyViolation
  void ReportContentSecurityPolicyViolation(::network::mojom::blink::CSPViolationPtr violation) final;
  
// @generated_from: blink.mojom.LocalFrame.DidUpdateFramePolicy
  void DidUpdateFramePolicy(const ::blink::FramePolicy& frame_policy) final;
  
// @generated_from: blink.mojom.LocalFrame.PostMessageEvent
  void PostMessageEvent(const absl::optional<::blink::RemoteFrameToken>& source_frame_token, const ::WTF::String& source_origin, const ::WTF::String& target_origin, ::blink::BlinkTransferableMessage message) final;
  
// @generated_from: blink.mojom.LocalFrame.JavaScriptMethodExecuteRequest
  void JavaScriptMethodExecuteRequest(const ::WTF::String& object_name, const ::WTF::String& method_name, ::base::Value::List arguments, bool wants_result, JavaScriptMethodExecuteRequestCallback callback) final;
  
// @generated_from: blink.mojom.LocalFrame.JavaScriptExecuteRequest
  void JavaScriptExecuteRequest(const ::WTF::String& javascript, bool wants_result, JavaScriptExecuteRequestCallback callback) final;
  
// @generated_from: blink.mojom.LocalFrame.JavaScriptExecuteRequestForTests
  void JavaScriptExecuteRequestForTests(const ::WTF::String& javascript, bool has_user_gesture, bool resolve_promises, int32_t world_id, JavaScriptExecuteRequestForTestsCallback callback) final;
  
// @generated_from: blink.mojom.LocalFrame.JavaScriptExecuteRequestInIsolatedWorld
  void JavaScriptExecuteRequestInIsolatedWorld(const ::WTF::String& javascript, bool wants_result, int32_t world_id, JavaScriptExecuteRequestInIsolatedWorldCallback callback) final;
  
// @generated_from: blink.mojom.LocalFrame.BindReportingObserver
  void BindReportingObserver(::mojo::PendingReceiver<::blink::mojom::blink::ReportingObserver> receiver) final;
  
// @generated_from: blink.mojom.LocalFrame.UpdateOpener
  void UpdateOpener(const absl::optional<::blink::FrameToken>& opener_frame_token) final;
  
// @generated_from: blink.mojom.LocalFrame.GetSavableResourceLinks
  void GetSavableResourceLinks(GetSavableResourceLinksCallback callback) final;
  
// @generated_from: blink.mojom.LocalFrame.MixedContentFound
  void MixedContentFound(const ::blink::KURL& main_resource_url, const ::blink::KURL& mixed_content_url, ::blink::mojom::blink::RequestContextType request_context, bool was_allowed, const ::blink::KURL& url_before_redirects, bool had_redirect, ::network::mojom::blink::SourceLocationPtr source_location) final;
  
// @generated_from: blink.mojom.LocalFrame.BindDevToolsAgent
  void BindDevToolsAgent(::mojo::PendingAssociatedRemote<::blink::mojom::blink::DevToolsAgentHost> agent_host, ::mojo::PendingAssociatedReceiver<::blink::mojom::blink::DevToolsAgent> agent) final;
  
// @generated_from: blink.mojom.LocalFrame.ExtractSmartClipData
  void ExtractSmartClipData(const ::gfx::Rect& rect, ExtractSmartClipDataCallback callback) final;
  
// @generated_from: blink.mojom.LocalFrame.HandleRendererDebugURL
  void HandleRendererDebugURL(const ::blink::KURL& url) final;
  
// @generated_from: blink.mojom.LocalFrame.GetCanonicalUrlForSharing
  void GetCanonicalUrlForSharing(GetCanonicalUrlForSharingCallback callback) final;
  
// @generated_from: blink.mojom.LocalFrame.GetOpenGraphMetadata
  void GetOpenGraphMetadata(GetOpenGraphMetadataCallback callback) final;
  
// @generated_from: blink.mojom.LocalFrame.SetNavigationApiHistoryEntriesForRestore
  void SetNavigationApiHistoryEntriesForRestore(::blink::mojom::blink::NavigationApiHistoryEntryArraysPtr entry_arrays) final;

 private:
  mojo::MessageReceiverWithResponder* receiver_;
};



// @generated_from: blink.mojom.HighPriorityLocalFrame
class CORE_EXPORT HighPriorityLocalFrameProxy
    : public HighPriorityLocalFrame {
 public:
  using InterfaceType = HighPriorityLocalFrame;

  explicit HighPriorityLocalFrameProxy(mojo::MessageReceiverWithResponder* receiver);
  
// @generated_from: blink.mojom.HighPriorityLocalFrame.DispatchBeforeUnload
  void DispatchBeforeUnload(bool is_reload, DispatchBeforeUnloadCallback callback) final;

 private:
  mojo::MessageReceiverWithResponder* receiver_;
};



// @generated_from: blink.mojom.RemoteFrameHost
class CORE_EXPORT RemoteFrameHostProxy
    : public RemoteFrameHost {
 public:
  using InterfaceType = RemoteFrameHost;

  explicit RemoteFrameHostProxy(mojo::MessageReceiverWithResponder* receiver);
  
// @generated_from: blink.mojom.RemoteFrameHost.SetInheritedEffectiveTouchAction
  void SetInheritedEffectiveTouchAction(::cc::TouchAction touch_action) final;
  
// @generated_from: blink.mojom.RemoteFrameHost.UpdateRenderThrottlingStatus
  void UpdateRenderThrottlingStatus(bool is_throttled, bool subtree_throttled, bool display_locked) final;
  
// @generated_from: blink.mojom.RemoteFrameHost.VisibilityChanged
  void VisibilityChanged(::blink::mojom::blink::FrameVisibility visibility) final;
  
// @generated_from: blink.mojom.RemoteFrameHost.DidFocusFrame
  void DidFocusFrame() final;
  
// @generated_from: blink.mojom.RemoteFrameHost.CheckCompleted
  void CheckCompleted() final;
  
// @generated_from: blink.mojom.RemoteFrameHost.CapturePaintPreviewOfCrossProcessSubframe
  void CapturePaintPreviewOfCrossProcessSubframe(const ::gfx::Rect& clip_rect, const ::base::UnguessableToken& guid) final;
  
// @generated_from: blink.mojom.RemoteFrameHost.SetIsInert
  void SetIsInert(bool inert) final;
  
// @generated_from: blink.mojom.RemoteFrameHost.DidChangeOpener
  void DidChangeOpener(const absl::optional<::blink::LocalFrameToken>& opener_frame) final;
  
// @generated_from: blink.mojom.RemoteFrameHost.AdvanceFocus
  void AdvanceFocus(::blink::mojom::blink::FocusType focus_type, const ::blink::LocalFrameToken& source_frame_token) final;
  
// @generated_from: blink.mojom.RemoteFrameHost.RouteMessageEvent
  void RouteMessageEvent(const absl::optional<::blink::LocalFrameToken>& source_frame_token, const ::WTF::String& source_origin, const ::WTF::String& target_origin, ::blink::BlinkTransferableMessage message) final;
  
// @generated_from: blink.mojom.RemoteFrameHost.PrintCrossProcessSubframe
  void PrintCrossProcessSubframe(const ::gfx::Rect& frame_content_rect, int32_t document_cookie) final;
  
// @generated_from: blink.mojom.RemoteFrameHost.Detach
  void Detach() final;
  
// @generated_from: blink.mojom.RemoteFrameHost.UpdateViewportIntersection
  void UpdateViewportIntersection(::blink::mojom::blink::ViewportIntersectionStatePtr intersection_state, const absl::optional<::blink::FrameVisualProperties>& visual_properties) final;
  
// @generated_from: blink.mojom.RemoteFrameHost.SynchronizeVisualProperties
  void SynchronizeVisualProperties(const ::blink::FrameVisualProperties& properties) final;
  
// @generated_from: blink.mojom.RemoteFrameHost.OpenURL
  void OpenURL(OpenURLParamsPtr params) final;

 private:
  mojo::MessageReceiverWithResponder* receiver_;
};



// @generated_from: blink.mojom.RemoteFrame
class CORE_EXPORT RemoteFrameProxy
    : public RemoteFrame {
 public:
  using InterfaceType = RemoteFrame;

  explicit RemoteFrameProxy(mojo::MessageReceiverWithResponder* receiver);
  
// @generated_from: blink.mojom.RemoteFrame.WillEnterFullscreen
  void WillEnterFullscreen(::blink::mojom::blink::FullscreenOptionsPtr options) final;
  
// @generated_from: blink.mojom.RemoteFrame.EnforceInsecureNavigationsSet
  void EnforceInsecureNavigationsSet(const WTF::Vector<uint32_t>& set) final;
  
// @generated_from: blink.mojom.RemoteFrame.SetFrameOwnerProperties
  void SetFrameOwnerProperties(::blink::mojom::blink::FrameOwnerPropertiesPtr properties) final;
  
// @generated_from: blink.mojom.RemoteFrame.EnforceInsecureRequestPolicy
  void EnforceInsecureRequestPolicy(::blink::mojom::blink::InsecureRequestPolicy policy) final;
  
// @generated_from: blink.mojom.RemoteFrame.SetReplicatedOrigin
  void SetReplicatedOrigin(const ::scoped_refptr<const ::blink::SecurityOrigin>& origin, bool is_potentially_trustworthy_unique_origin) final;
  
// @generated_from: blink.mojom.RemoteFrame.SetReplicatedIsAdSubframe
  void SetReplicatedIsAdSubframe(bool is_ad_subframe) final;
  
// @generated_from: blink.mojom.RemoteFrame.SetReplicatedName
  void SetReplicatedName(const WTF::String& name, const WTF::String& unique_name) final;
  
// @generated_from: blink.mojom.RemoteFrame.DispatchLoadEventForFrameOwner
  void DispatchLoadEventForFrameOwner() final;
  
// @generated_from: blink.mojom.RemoteFrame.SetNeedsOcclusionTracking
  void SetNeedsOcclusionTracking(bool needs_tracking) final;
  
// @generated_from: blink.mojom.RemoteFrame.Collapse
  void Collapse(bool collapsed) final;
  
// @generated_from: blink.mojom.RemoteFrame.Focus
  void Focus() final;
  
// @generated_from: blink.mojom.RemoteFrame.SetHadStickyUserActivationBeforeNavigation
  void SetHadStickyUserActivationBeforeNavigation(bool has_gesture) final;
  
// @generated_from: blink.mojom.RemoteFrame.BubbleLogicalScroll
  void BubbleLogicalScroll(::blink::mojom::blink::ScrollDirection direction, ::ui::ScrollGranularity granularity) final;
  
// @generated_from: blink.mojom.RemoteFrame.UpdateUserActivationState
  void UpdateUserActivationState(::blink::mojom::blink::UserActivationUpdateType state_update_type, ::blink::mojom::blink::UserActivationNotificationType notification_type) final;
  
// @generated_from: blink.mojom.RemoteFrame.SetEmbeddingToken
  void SetEmbeddingToken(const ::base::UnguessableToken& embedding_token) final;
  
// @generated_from: blink.mojom.RemoteFrame.SetPageFocus
  void SetPageFocus(bool is_focused) final;
  
// @generated_from: blink.mojom.RemoteFrame.RenderFallbackContent
  void RenderFallbackContent() final;
  
// @generated_from: blink.mojom.RemoteFrame.RenderFallbackContentWithResourceTiming
  void RenderFallbackContentWithResourceTiming(::blink::mojom::blink::ResourceTimingInfoPtr timing, const WTF::String& server_timing_value) final;
  
// @generated_from: blink.mojom.RemoteFrame.AddResourceTimingFromChild
  void AddResourceTimingFromChild(::blink::mojom::blink::ResourceTimingInfoPtr timing) final;
  
// @generated_from: blink.mojom.RemoteFrame.ScrollRectToVisible
  void ScrollRectToVisible(const ::gfx::RectF& rect, ::blink::mojom::blink::ScrollIntoViewParamsPtr params) final;
  
// @generated_from: blink.mojom.RemoteFrame.DidStartLoading
  void DidStartLoading() final;
  
// @generated_from: blink.mojom.RemoteFrame.DidStopLoading
  void DidStopLoading() final;
  
// @generated_from: blink.mojom.RemoteFrame.IntrinsicSizingInfoOfChildChanged
  void IntrinsicSizingInfoOfChildChanged(::blink::mojom::blink::IntrinsicSizingInfoPtr sizing_info) final;
  
// @generated_from: blink.mojom.RemoteFrame.DidSetFramePolicyHeaders
  void DidSetFramePolicyHeaders(::network::mojom::blink::WebSandboxFlags sandbox_flags, const WTF::Vector<::blink::ParsedPermissionsPolicyDeclaration>& parsed_permissions_policy) final;
  
// @generated_from: blink.mojom.RemoteFrame.DidUpdateFramePolicy
  void DidUpdateFramePolicy(const ::blink::FramePolicy& frame_policy) final;
  
// @generated_from: blink.mojom.RemoteFrame.UpdateOpener
  void UpdateOpener(const absl::optional<::blink::FrameToken>& opener_frame_token) final;
  
// @generated_from: blink.mojom.RemoteFrame.DetachAndDispose
  void DetachAndDispose() final;
  
// @generated_from: blink.mojom.RemoteFrame.EnableAutoResize
  void EnableAutoResize(const ::gfx::Size& min_size, const ::gfx::Size& max_size) final;
  
// @generated_from: blink.mojom.RemoteFrame.DisableAutoResize
  void DisableAutoResize() final;
  
// @generated_from: blink.mojom.RemoteFrame.DidUpdateVisualProperties
  void DidUpdateVisualProperties(const ::cc::RenderFrameMetadata& metadata) final;
  
// @generated_from: blink.mojom.RemoteFrame.SetFrameSinkId
  void SetFrameSinkId(const ::viz::FrameSinkId& frame_sink_id) final;
  
// @generated_from: blink.mojom.RemoteFrame.ChildProcessGone
  void ChildProcessGone() final;

 private:
  mojo::MessageReceiverWithResponder* receiver_;
};



// @generated_from: blink.mojom.LocalMainFrame
class CORE_EXPORT LocalMainFrameProxy
    : public LocalMainFrame {
 public:
  using InterfaceType = LocalMainFrame;

  explicit LocalMainFrameProxy(mojo::MessageReceiverWithResponder* receiver);
  
// @generated_from: blink.mojom.LocalMainFrame.AnimateDoubleTapZoom
  void AnimateDoubleTapZoom(const ::gfx::Point& point, const ::gfx::Rect& rect) final;
  
// @generated_from: blink.mojom.LocalMainFrame.SetScaleFactor
  void SetScaleFactor(float scale) final;
  
// @generated_from: blink.mojom.LocalMainFrame.ClosePage
  void ClosePage(ClosePageCallback callback) final;
  
// @generated_from: blink.mojom.LocalMainFrame.SetInitialFocus
  void SetInitialFocus(bool reverse) final;
  
// @generated_from: blink.mojom.LocalMainFrame.EnablePreferredSizeChangedMode
  void EnablePreferredSizeChangedMode() final;
  
// @generated_from: blink.mojom.LocalMainFrame.ZoomToFindInPageRect
  void ZoomToFindInPageRect(const ::gfx::Rect& rect_in_root_frame) final;
  
// @generated_from: blink.mojom.LocalMainFrame.InstallCoopAccessMonitor
  void InstallCoopAccessMonitor(const ::blink::FrameToken& accessed_window, ::network::mojom::blink::CrossOriginOpenerPolicyReporterParamsPtr coop_reporter_info) final;
  
// @generated_from: blink.mojom.LocalMainFrame.OnPortalActivated
  void OnPortalActivated(const ::blink::PortalToken& portal_token, ::mojo::PendingAssociatedRemote<::blink::mojom::blink::Portal> portal, ::mojo::PendingAssociatedReceiver<::blink::mojom::blink::PortalClient> portal_client, ::blink::BlinkTransferableMessage data, uint64_t trace_id, OnPortalActivatedCallback callback) final;
  
// @generated_from: blink.mojom.LocalMainFrame.ForwardMessageFromHost
  void ForwardMessageFromHost(::blink::BlinkTransferableMessage message, const ::scoped_refptr<const ::blink::SecurityOrigin>& source_origin) final;
  
// @generated_from: blink.mojom.LocalMainFrame.UpdateBrowserControlsState
  void UpdateBrowserControlsState(::cc::BrowserControlsState constraints, ::cc::BrowserControlsState current, bool animate) final;

 private:
  mojo::MessageReceiverWithResponder* receiver_;
};



// @generated_from: blink.mojom.RemoteMainFrame
class CORE_EXPORT RemoteMainFrameProxy
    : public RemoteMainFrame {
 public:
  using InterfaceType = RemoteMainFrame;

  explicit RemoteMainFrameProxy(mojo::MessageReceiverWithResponder* receiver);
  
// @generated_from: blink.mojom.RemoteMainFrame.UpdateTextAutosizerPageInfo
  void UpdateTextAutosizerPageInfo(::blink::mojom::blink::TextAutosizerPageInfoPtr page_info) final;

 private:
  mojo::MessageReceiverWithResponder* receiver_;
};



// @generated_from: blink.mojom.LocalMainFrameHost
class CORE_EXPORT LocalMainFrameHostProxy
    : public LocalMainFrameHost {
 public:
  using InterfaceType = LocalMainFrameHost;

  explicit LocalMainFrameHostProxy(mojo::MessageReceiverWithResponder* receiver);
  
// @generated_from: blink.mojom.LocalMainFrameHost.ScaleFactorChanged
  void ScaleFactorChanged(float scale) final;
  
// @generated_from: blink.mojom.LocalMainFrameHost.ContentsPreferredSizeChanged
  void ContentsPreferredSizeChanged(const ::gfx::Size& pref_size) final;
  
// @generated_from: blink.mojom.LocalMainFrameHost.TextAutosizerPageInfoChanged
  void TextAutosizerPageInfoChanged(::blink::mojom::blink::TextAutosizerPageInfoPtr page_info) final;
  
// @generated_from: blink.mojom.LocalMainFrameHost.FocusPage
  void FocusPage() final;
  
// @generated_from: blink.mojom.LocalMainFrameHost.TakeFocus
  void TakeFocus(bool reverse) final;
  
// @generated_from: blink.mojom.LocalMainFrameHost.UpdateTargetURL
  void UpdateTargetURL(const ::blink::KURL& url, UpdateTargetURLCallback callback) final;
  
// @generated_from: blink.mojom.LocalMainFrameHost.RequestClose
  void RequestClose() final;
  
// @generated_from: blink.mojom.LocalMainFrameHost.ShowCreatedWindow
  void ShowCreatedWindow(const ::blink::LocalFrameToken& opener_frame_token, ::ui::mojom::blink::WindowOpenDisposition disposition, const ::gfx::Rect& rect, bool opened_by_user_gesture, ShowCreatedWindowCallback callback) final;
  
// @generated_from: blink.mojom.LocalMainFrameHost.SetWindowRect
  void SetWindowRect(const ::gfx::Rect& bounds, SetWindowRectCallback callback) final;
  
// @generated_from: blink.mojom.LocalMainFrameHost.DidFirstVisuallyNonEmptyPaint
  void DidFirstVisuallyNonEmptyPaint() final;
  
// @generated_from: blink.mojom.LocalMainFrameHost.DidAccessInitialMainDocument
  void DidAccessInitialMainDocument() final;

 private:
  mojo::MessageReceiverWithResponder* receiver_;
};



// @generated_from: blink.mojom.RemoteMainFrameHost
class CORE_EXPORT RemoteMainFrameHostProxy
    : public RemoteMainFrameHost {
 public:
  using InterfaceType = RemoteMainFrameHost;

  explicit RemoteMainFrameHostProxy(mojo::MessageReceiverWithResponder* receiver);
  
// @generated_from: blink.mojom.RemoteMainFrameHost.FocusPage
  void FocusPage() final;
  
// @generated_from: blink.mojom.RemoteMainFrameHost.TakeFocus
  void TakeFocus(bool reverse) final;
  
// @generated_from: blink.mojom.RemoteMainFrameHost.UpdateTargetURL
  void UpdateTargetURL(const ::blink::KURL& url, UpdateTargetURLCallback callback) final;
  
// @generated_from: blink.mojom.RemoteMainFrameHost.RouteCloseEvent
  void RouteCloseEvent() final;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 private:
  ImplPointerType sink_;
};
class CORE_EXPORT KeepAliveHandleRequestValidator : public mojo::MessageReceiver {
 public:
  bool Accept(mojo::Message* message) override;
};
class CORE_EXPORT KeepAliveHandleFactoryRequestValidator : public mojo::MessageReceiver {
 public:
  bool Accept(mojo::Message* message) override;
};
class CORE_EXPORT LocalFrameHostRequestValidator : public mojo::MessageReceiver {
 public:
  bool Accept(mojo::Message* message) override;
};
class CORE_EXPORT LocalFrameRequestValidator : public mojo::MessageReceiver {
 public:
  bool Accept(mojo::Message* message) override;
};
class CORE_EXPORT HighPriorityLocalFrameRequestValidator : public mojo::MessageReceiver {
 public:
  bool Accept(mojo::Message* message) override;
};
class CORE_EXPORT RemoteFrameHostRequestValidator : public mojo::MessageReceiver {
 public:
  bool Accept(mojo::Message* message) override;
};
class CORE_EXPORT RemoteFrameRequestValidator : public mojo::MessageReceiver {
 public:
  bool Accept(mojo::Message* message) override;
};
class CORE_EXPORT LocalMainFrameRequestValidator : public mojo::MessageReceiver {
 public:
  bool Accept(mojo::Message* message) override;
};
class CORE_EXPORT RemoteMainFrameRequestValidator : public mojo::MessageReceiver {
 public:
  bool Accept(mojo::Message* message) override;
};
class CORE_EXPORT LocalMainFrameHostRequestValidator : public mojo::MessageReceiver {
 public:
  bool Accept(mojo::Message* message) override;
};
class CORE_EXPORT RemoteMainFrameHostRequestValidator : public mojo::MessageReceiver {
 public:
  bool Accept(mojo::Message* message) override;
};
class CORE_EXPORT LocalFrameHostResponseValidator : public mojo::MessageReceiver {
 public:
  bool Accept(mojo::Message* message) override;
};
class CORE_EXPORT LocalFrameResponseValidator : public mojo::MessageReceiver {
 public:
  bool Accept(mojo::Message* message) override;
};
class CORE_EXPORT HighPriorityLocalFrameResponseValidator : public mojo::MessageReceiver {
 public:
  bool Accept(mojo::Message* message) override;
};
class CORE_EXPORT LocalMainFrameResponseValidator : public mojo::MessageReceiver {
 public:
  bool Accept(mojo::Message* message) override;
};
class CORE_EXPORT LocalMainFrameHostResponseValidator : public mojo::MessageReceiver {
 public:
  bool Accept(mojo::Message* message) override;
};
class CORE_EXPORT RemoteMainFrameHostResponseValidator : public mojo::MessageReceiver {
 public:
  bool Accept(mojo::Message* message) override;
};












// @generated_from: blink.mojom.SavableSubframe
class CORE_EXPORT SavableSubframe {
 public:
  template <typename T>
  using EnableIfSame = std::enable_if_t<std::is_same<SavableSubframe, T>::value>;
  using DataView = SavableSubframeDataView;
  using Data_ = internal::SavableSubframe_Data;

  template <typename... Args>
  static SavableSubframePtr New(Args&&... args) {
    return SavableSubframePtr(
        absl::in_place, std::forward<Args>(args)...);
  }

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

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


  SavableSubframe();

  SavableSubframe(
      const ::blink::KURL& original_url,
      const ::blink::FrameToken& subframe_token);


  ~SavableSubframe();

  // 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 = SavableSubframePtr>
  SavableSubframePtr 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, SavableSubframe::EnableIfSame<T>* = nullptr>
  bool Equals(const T& other) const;

  template <typename T, SavableSubframe::EnableIfSame<T>* = nullptr>
  bool operator==(const T& rhs) const { return Equals(rhs); }
  template <typename UserType>
  static WTF::Vector<uint8_t> Serialize(UserType* input) {
    return mojo::internal::SerializeImpl<
        SavableSubframe::DataView, WTF::Vector<uint8_t>>(input);
  }

  template <typename UserType>
  static mojo::Message SerializeAsMessage(UserType* input) {
    return mojo::internal::SerializeAsMessageImpl<
        SavableSubframe::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::SavableSubframe_UnserializedMessageContext<
            UserType, SavableSubframe::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<SavableSubframe::DataView>(
        message, data, data_num_bytes, output, Validate);
  }

  template <typename UserType>
  static bool Deserialize(const WTF::Vector<uint8_t>& input,
                          UserType* output) {
    return SavableSubframe::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::SavableSubframe_UnserializedMessageContext<
            UserType, SavableSubframe::DataView>>();
    if (context) {
      *output = std::move(context->TakeData());
      return true;
    }
    input.SerializeIfNecessary();
    return mojo::internal::DeserializeImpl<SavableSubframe::DataView>(
        input, input.payload(), input.payload_num_bytes(), output, Validate);
  }

  
// @generated_from: blink.mojom.SavableSubframe.original_url
  ::blink::KURL original_url;
  
// @generated_from: blink.mojom.SavableSubframe.subframe_token
  ::blink::FrameToken subframe_token;

  // 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, SavableSubframe::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);

template <typename T, SavableSubframe::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
  return !(rhs < lhs);
}

template <typename T, SavableSubframe::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
  return rhs < lhs;
}

template <typename T, SavableSubframe::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
  return !(lhs < rhs);
}





// @generated_from: blink.mojom.GetSavableResourceLinksReply
class CORE_EXPORT GetSavableResourceLinksReply {
 public:
  template <typename T>
  using EnableIfSame = std::enable_if_t<std::is_same<GetSavableResourceLinksReply, T>::value>;
  using DataView = GetSavableResourceLinksReplyDataView;
  using Data_ = internal::GetSavableResourceLinksReply_Data;

  template <typename... Args>
  static GetSavableResourceLinksReplyPtr New(Args&&... args) {
    return GetSavableResourceLinksReplyPtr(
        absl::in_place, std::forward<Args>(args)...);
  }

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

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


  GetSavableResourceLinksReply();

  GetSavableResourceLinksReply(
      WTF::Vector<::blink::KURL> resources_list,
      ::blink::mojom::blink::ReferrerPtr referrer,
      WTF::Vector<SavableSubframePtr> subframes);

GetSavableResourceLinksReply(const GetSavableResourceLinksReply&) = delete;
GetSavableResourceLinksReply& operator=(const GetSavableResourceLinksReply&) = delete;

  ~GetSavableResourceLinksReply();

  // 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 = GetSavableResourceLinksReplyPtr>
  GetSavableResourceLinksReplyPtr 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, GetSavableResourceLinksReply::EnableIfSame<T>* = nullptr>
  bool Equals(const T& other) const;

  template <typename T, GetSavableResourceLinksReply::EnableIfSame<T>* = nullptr>
  bool operator==(const T& rhs) const { return Equals(rhs); }
  template <typename UserType>
  static WTF::Vector<uint8_t> Serialize(UserType* input) {
    return mojo::internal::SerializeImpl<
        GetSavableResourceLinksReply::DataView, WTF::Vector<uint8_t>>(input);
  }

  template <typename UserType>
  static mojo::Message SerializeAsMessage(UserType* input) {
    return mojo::internal::SerializeAsMessageImpl<
        GetSavableResourceLinksReply::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::GetSavableResourceLinksReply_UnserializedMessageContext<
            UserType, GetSavableResourceLinksReply::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<GetSavableResourceLinksReply::DataView>(
        message, data, data_num_bytes, output, Validate);
  }

  template <typename UserType>
  static bool Deserialize(const WTF::Vector<uint8_t>& input,
                          UserType* output) {
    return GetSavableResourceLinksReply::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::GetSavableResourceLinksReply_UnserializedMessageContext<
            UserType, GetSavableResourceLinksReply::DataView>>();
    if (context) {
      *output = std::move(context->TakeData());
      return true;
    }
    input.SerializeIfNecessary();
    return mojo::internal::DeserializeImpl<GetSavableResourceLinksReply::DataView>(
        input, input.payload(), input.payload_num_bytes(), output, Validate);
  }

  
// @generated_from: blink.mojom.GetSavableResourceLinksReply.resources_list
  WTF::Vector<::blink::KURL> resources_list;
  
// @generated_from: blink.mojom.GetSavableResourceLinksReply.referrer
  ::blink::mojom::blink::ReferrerPtr referrer;
  
// @generated_from: blink.mojom.GetSavableResourceLinksReply.subframes
  WTF::Vector<SavableSubframePtr> subframes;

  // 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, GetSavableResourceLinksReply::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);

template <typename T, GetSavableResourceLinksReply::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
  return !(rhs < lhs);
}

template <typename T, GetSavableResourceLinksReply::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
  return rhs < lhs;
}

template <typename T, GetSavableResourceLinksReply::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
  return !(lhs < rhs);
}





// @generated_from: blink.mojom.FindInPageResultAXParams
class CORE_EXPORT FindInPageResultAXParams {
 public:
  template <typename T>
  using EnableIfSame = std::enable_if_t<std::is_same<FindInPageResultAXParams, T>::value>;
  using DataView = FindInPageResultAXParamsDataView;
  using Data_ = internal::FindInPageResultAXParams_Data;

  template <typename... Args>
  static FindInPageResultAXParamsPtr New(Args&&... args) {
    return FindInPageResultAXParamsPtr(
        absl::in_place, std::forward<Args>(args)...);
  }

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

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


  FindInPageResultAXParams();

  FindInPageResultAXParams(
      int32_t request_id,
      int32_t match_index,
      int32_t start_id,
      int32_t start_offset,
      int32_t end_id,
      int32_t end_offset);


  ~FindInPageResultAXParams();

  // 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 = FindInPageResultAXParamsPtr>
  FindInPageResultAXParamsPtr 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, FindInPageResultAXParams::EnableIfSame<T>* = nullptr>
  bool Equals(const T& other) const;

  template <typename T, FindInPageResultAXParams::EnableIfSame<T>* = nullptr>
  bool operator==(const T& rhs) const { return Equals(rhs); }
  size_t Hash(size_t seed) const;
  template <typename UserType>
  static WTF::Vector<uint8_t> Serialize(UserType* input) {
    return mojo::internal::SerializeImpl<
        FindInPageResultAXParams::DataView, WTF::Vector<uint8_t>>(input);
  }

  template <typename UserType>
  static mojo::Message SerializeAsMessage(UserType* input) {
    return mojo::internal::SerializeAsMessageImpl<
        FindInPageResultAXParams::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::FindInPageResultAXParams_UnserializedMessageContext<
            UserType, FindInPageResultAXParams::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<FindInPageResultAXParams::DataView>(
        message, data, data_num_bytes, output, Validate);
  }

  template <typename UserType>
  static bool Deserialize(const WTF::Vector<uint8_t>& input,
                          UserType* output) {
    return FindInPageResultAXParams::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::FindInPageResultAXParams_UnserializedMessageContext<
            UserType, FindInPageResultAXParams::DataView>>();
    if (context) {
      *output = std::move(context->TakeData());
      return true;
    }
    input.SerializeIfNecessary();
    return mojo::internal::DeserializeImpl<FindInPageResultAXParams::DataView>(
        input, input.payload(), input.payload_num_bytes(), output, Validate);
  }

  
// @generated_from: blink.mojom.FindInPageResultAXParams.request_id
  int32_t request_id;
  
// @generated_from: blink.mojom.FindInPageResultAXParams.match_index
  int32_t match_index;
  
// @generated_from: blink.mojom.FindInPageResultAXParams.start_id
  int32_t start_id;
  
// @generated_from: blink.mojom.FindInPageResultAXParams.start_offset
  int32_t start_offset;
  
// @generated_from: blink.mojom.FindInPageResultAXParams.end_id
  int32_t end_id;
  
// @generated_from: blink.mojom.FindInPageResultAXParams.end_offset
  int32_t end_offset;

  // 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, FindInPageResultAXParams::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);

template <typename T, FindInPageResultAXParams::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
  return !(rhs < lhs);
}

template <typename T, FindInPageResultAXParams::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
  return rhs < lhs;
}

template <typename T, FindInPageResultAXParams::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
  return !(lhs < rhs);
}





// @generated_from: blink.mojom.DownloadURLParams
class CORE_EXPORT DownloadURLParams {
 public:
  template <typename T>
  using EnableIfSame = std::enable_if_t<std::is_same<DownloadURLParams, T>::value>;
  using DataView = DownloadURLParamsDataView;
  using Data_ = internal::DownloadURLParams_Data;

  template <typename... Args>
  static DownloadURLParamsPtr New(Args&&... args) {
    return DownloadURLParamsPtr(
        absl::in_place, std::forward<Args>(args)...);
  }

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

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


  DownloadURLParams();

  DownloadURLParams(
      const ::blink::KURL& url,
      ::blink::mojom::blink::ReferrerPtr referrer,
      const ::scoped_refptr<const ::blink::SecurityOrigin>& initiator_origin,
      const ::WTF::String& suggested_name,
      ::network::mojom::blink::RedirectMode cross_origin_redirects,
      ::mojo::PendingRemote<::blink::mojom::blink::BlobURLToken> blob_url_token,
      ::mojo::PendingRemote<::blink::mojom::blink::Blob> data_url_blob,
      bool is_context_menu_save,
      bool has_user_gesture);

DownloadURLParams(const DownloadURLParams&) = delete;
DownloadURLParams& operator=(const DownloadURLParams&) = delete;

  ~DownloadURLParams();

  // 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 = DownloadURLParamsPtr>
  DownloadURLParamsPtr 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, DownloadURLParams::EnableIfSame<T>* = nullptr>
  bool Equals(const T& other) const;

  template <typename T, DownloadURLParams::EnableIfSame<T>* = nullptr>
  bool operator==(const T& rhs) const { return Equals(rhs); }

  template <typename UserType>
  static mojo::Message SerializeAsMessage(UserType* input) {
    return mojo::internal::SerializeAsMessageImpl<
        DownloadURLParams::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::DownloadURLParams_UnserializedMessageContext<
            UserType, DownloadURLParams::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<DownloadURLParams::DataView>(
        message, data, data_num_bytes, output, Validate);
  }

  template <typename UserType>
  static bool Deserialize(const WTF::Vector<uint8_t>& input,
                          UserType* output) {
    return DownloadURLParams::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::DownloadURLParams_UnserializedMessageContext<
            UserType, DownloadURLParams::DataView>>();
    if (context) {
      *output = std::move(context->TakeData());
      return true;
    }
    input.SerializeIfNecessary();
    return mojo::internal::DeserializeImpl<DownloadURLParams::DataView>(
        input, input.payload(), input.payload_num_bytes(), output, Validate);
  }

  
// @generated_from: blink.mojom.DownloadURLParams.url
  ::blink::KURL url;
  
// @generated_from: blink.mojom.DownloadURLParams.referrer
  ::blink::mojom::blink::ReferrerPtr referrer;
  
// @generated_from: blink.mojom.DownloadURLParams.initiator_origin
  ::scoped_refptr<const ::blink::SecurityOrigin> initiator_origin;
  
// @generated_from: blink.mojom.DownloadURLParams.suggested_name
  ::WTF::String suggested_name;
  
// @generated_from: blink.mojom.DownloadURLParams.cross_origin_redirects
  ::network::mojom::blink::RedirectMode cross_origin_redirects;
  
// @generated_from: blink.mojom.DownloadURLParams.blob_url_token
  ::mojo::PendingRemote<::blink::mojom::blink::BlobURLToken> blob_url_token;
  
// @generated_from: blink.mojom.DownloadURLParams.data_url_blob
  ::mojo::PendingRemote<::blink::mojom::blink::Blob> data_url_blob;
  
// @generated_from: blink.mojom.DownloadURLParams.is_context_menu_save
  bool is_context_menu_save;
  
// @generated_from: blink.mojom.DownloadURLParams.has_user_gesture
  bool has_user_gesture;

  // 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, DownloadURLParams::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);

template <typename T, DownloadURLParams::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
  return !(rhs < lhs);
}

template <typename T, DownloadURLParams::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
  return rhs < lhs;
}

template <typename T, DownloadURLParams::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
  return !(lhs < rhs);
}





// @generated_from: blink.mojom.OpenURLParams
class CORE_EXPORT OpenURLParams {
 public:
  template <typename T>
  using EnableIfSame = std::enable_if_t<std::is_same<OpenURLParams, T>::value>;
  using DataView = OpenURLParamsDataView;
  using Data_ = internal::OpenURLParams_Data;

  template <typename... Args>
  static OpenURLParamsPtr New(Args&&... args) {
    return OpenURLParamsPtr(
        absl::in_place, std::forward<Args>(args)...);
  }

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

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


  OpenURLParams();

  OpenURLParams(
      const ::blink::KURL& url,
      const ::scoped_refptr<const ::blink::SecurityOrigin>& initiator_origin,
      const absl::optional<::blink::LocalFrameToken>& initiator_frame_token,
      ::scoped_refptr<::network::ResourceRequestBody> post_body,
      const WTF::String& extra_headers,
      ::blink::mojom::blink::ReferrerPtr referrer,
      bool is_form_submission,
      ::ui::mojom::blink::WindowOpenDisposition disposition,
      bool should_replace_current_entry,
      bool user_gesture,
      bool is_unfenced_top_navigation,
      ::blink::mojom::blink::TriggeringEventInfo triggering_event_info,
      ::mojo::PendingRemote<::blink::mojom::blink::BlobURLToken> blob_url_token,
      const WTF::String& href_translate,
      const absl::optional<::blink::Impression>& impression,
      const ::blink::NavigationDownloadPolicy& download_policy,
      ::network::mojom::blink::SourceLocationPtr source_location,
      ::mojo::PendingRemote<::blink::mojom::blink::PolicyContainerHostKeepAliveHandle> initiator_policy_container_keep_alive_handle);

OpenURLParams(const OpenURLParams&) = delete;
OpenURLParams& operator=(const OpenURLParams&) = delete;

  ~OpenURLParams();

  // 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 = OpenURLParamsPtr>
  OpenURLParamsPtr 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, OpenURLParams::EnableIfSame<T>* = nullptr>
  bool Equals(const T& other) const;

  template <typename T, OpenURLParams::EnableIfSame<T>* = nullptr>
  bool operator==(const T& rhs) const { return Equals(rhs); }

  template <typename UserType>
  static mojo::Message SerializeAsMessage(UserType* input) {
    return mojo::internal::SerializeAsMessageImpl<
        OpenURLParams::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::OpenURLParams_UnserializedMessageContext<
            UserType, OpenURLParams::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<OpenURLParams::DataView>(
        message, data, data_num_bytes, output, Validate);
  }

  template <typename UserType>
  static bool Deserialize(const WTF::Vector<uint8_t>& input,
                          UserType* output) {
    return OpenURLParams::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::OpenURLParams_UnserializedMessageContext<
            UserType, OpenURLParams::DataView>>();
    if (context) {
      *output = std::move(context->TakeData());
      return true;
    }
    input.SerializeIfNecessary();
    return mojo::internal::DeserializeImpl<OpenURLParams::DataView>(
        input, input.payload(), input.payload_num_bytes(), output, Validate);
  }

  
// @generated_from: blink.mojom.OpenURLParams.url
  ::blink::KURL url;
  
// @generated_from: blink.mojom.OpenURLParams.initiator_origin
  ::scoped_refptr<const ::blink::SecurityOrigin> initiator_origin;
  
// @generated_from: blink.mojom.OpenURLParams.initiator_frame_token
  absl::optional<::blink::LocalFrameToken> initiator_frame_token;
  
// @generated_from: blink.mojom.OpenURLParams.post_body
  ::scoped_refptr<::network::ResourceRequestBody> post_body;
  
// @generated_from: blink.mojom.OpenURLParams.extra_headers
  WTF::String extra_headers;
  
// @generated_from: blink.mojom.OpenURLParams.referrer
  ::blink::mojom::blink::ReferrerPtr referrer;
  
// @generated_from: blink.mojom.OpenURLParams.is_form_submission
  bool is_form_submission;
  
// @generated_from: blink.mojom.OpenURLParams.disposition
  ::ui::mojom::blink::WindowOpenDisposition disposition;
  
// @generated_from: blink.mojom.OpenURLParams.should_replace_current_entry
  bool should_replace_current_entry;
  
// @generated_from: blink.mojom.OpenURLParams.user_gesture
  bool user_gesture;
  
// @generated_from: blink.mojom.OpenURLParams.is_unfenced_top_navigation
  bool is_unfenced_top_navigation;
  
// @generated_from: blink.mojom.OpenURLParams.triggering_event_info
  ::blink::mojom::blink::TriggeringEventInfo triggering_event_info;
  
// @generated_from: blink.mojom.OpenURLParams.blob_url_token
  ::mojo::PendingRemote<::blink::mojom::blink::BlobURLToken> blob_url_token;
  
// @generated_from: blink.mojom.OpenURLParams.href_translate
  WTF::String href_translate;
  
// @generated_from: blink.mojom.OpenURLParams.impression
  absl::optional<::blink::Impression> impression;
  
// @generated_from: blink.mojom.OpenURLParams.download_policy
  ::blink::NavigationDownloadPolicy download_policy;
  
// @generated_from: blink.mojom.OpenURLParams.source_location
  ::network::mojom::blink::SourceLocationPtr source_location;
  
// @generated_from: blink.mojom.OpenURLParams.initiator_policy_container_keep_alive_handle
  ::mojo::PendingRemote<::blink::mojom::blink::PolicyContainerHostKeepAliveHandle> initiator_policy_container_keep_alive_handle;

  // 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, OpenURLParams::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);

template <typename T, OpenURLParams::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
  return !(rhs < lhs);
}

template <typename T, OpenURLParams::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
  return rhs < lhs;
}

template <typename T, OpenURLParams::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
  return !(lhs < rhs);
}

template <typename StructPtrType>
SavableSubframePtr SavableSubframe::Clone() const {
  return New(
      mojo::Clone(original_url),
      mojo::Clone(subframe_token)
  );
}

template <typename T, SavableSubframe::EnableIfSame<T>*>
bool SavableSubframe::Equals(const T& other_struct) const {
  if (!mojo::Equals(this->original_url, other_struct.original_url))
    return false;
  if (!mojo::Equals(this->subframe_token, other_struct.subframe_token))
    return false;
  return true;
}

template <typename T, SavableSubframe::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
  if (lhs.original_url < rhs.original_url)
    return true;
  if (rhs.original_url < lhs.original_url)
    return false;
  if (lhs.subframe_token < rhs.subframe_token)
    return true;
  if (rhs.subframe_token < lhs.subframe_token)
    return false;
  return false;
}
template <typename StructPtrType>
GetSavableResourceLinksReplyPtr GetSavableResourceLinksReply::Clone() const {
  return New(
      mojo::Clone(resources_list),
      mojo::Clone(referrer),
      mojo::Clone(subframes)
  );
}

template <typename T, GetSavableResourceLinksReply::EnableIfSame<T>*>
bool GetSavableResourceLinksReply::Equals(const T& other_struct) const {
  if (!mojo::Equals(this->resources_list, other_struct.resources_list))
    return false;
  if (!mojo::Equals(this->referrer, other_struct.referrer))
    return false;
  if (!mojo::Equals(this->subframes, other_struct.subframes))
    return false;
  return true;
}

template <typename T, GetSavableResourceLinksReply::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
  if (lhs.resources_list < rhs.resources_list)
    return true;
  if (rhs.resources_list < lhs.resources_list)
    return false;
  if (lhs.referrer < rhs.referrer)
    return true;
  if (rhs.referrer < lhs.referrer)
    return false;
  if (lhs.subframes < rhs.subframes)
    return true;
  if (rhs.subframes < lhs.subframes)
    return false;
  return false;
}
template <typename StructPtrType>
FindInPageResultAXParamsPtr FindInPageResultAXParams::Clone() const {
  return New(
      mojo::Clone(request_id),
      mojo::Clone(match_index),
      mojo::Clone(start_id),
      mojo::Clone(start_offset),
      mojo::Clone(end_id),
      mojo::Clone(end_offset)
  );
}

template <typename T, FindInPageResultAXParams::EnableIfSame<T>*>
bool FindInPageResultAXParams::Equals(const T& other_struct) const {
  if (!mojo::Equals(this->request_id, other_struct.request_id))
    return false;
  if (!mojo::Equals(this->match_index, other_struct.match_index))
    return false;
  if (!mojo::Equals(this->start_id, other_struct.start_id))
    return false;
  if (!mojo::Equals(this->start_offset, other_struct.start_offset))
    return false;
  if (!mojo::Equals(this->end_id, other_struct.end_id))
    return false;
  if (!mojo::Equals(this->end_offset, other_struct.end_offset))
    return false;
  return true;
}

template <typename T, FindInPageResultAXParams::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
  if (lhs.request_id < rhs.request_id)
    return true;
  if (rhs.request_id < lhs.request_id)
    return false;
  if (lhs.match_index < rhs.match_index)
    return true;
  if (rhs.match_index < lhs.match_index)
    return false;
  if (lhs.start_id < rhs.start_id)
    return true;
  if (rhs.start_id < lhs.start_id)
    return false;
  if (lhs.start_offset < rhs.start_offset)
    return true;
  if (rhs.start_offset < lhs.start_offset)
    return false;
  if (lhs.end_id < rhs.end_id)
    return true;
  if (rhs.end_id < lhs.end_id)
    return false;
  if (lhs.end_offset < rhs.end_offset)
    return true;
  if (rhs.end_offset < lhs.end_offset)
    return false;
  return false;
}
template <typename StructPtrType>
DownloadURLParamsPtr DownloadURLParams::Clone() const {
  return New(
      mojo::Clone(url),
      mojo::Clone(referrer),
      mojo::Clone(initiator_origin),
      mojo::Clone(suggested_name),
      mojo::Clone(cross_origin_redirects),
      mojo::Clone(blob_url_token),
      mojo::Clone(data_url_blob),
      mojo::Clone(is_context_menu_save),
      mojo::Clone(has_user_gesture)
  );
}

template <typename T, DownloadURLParams::EnableIfSame<T>*>
bool DownloadURLParams::Equals(const T& other_struct) const {
  if (!mojo::Equals(this->url, other_struct.url))
    return false;
  if (!mojo::Equals(this->referrer, other_struct.referrer))
    return false;
  if (!mojo::Equals(this->initiator_origin, other_struct.initiator_origin))
    return false;
  if (!mojo::Equals(this->suggested_name, other_struct.suggested_name))
    return false;
  if (!mojo::Equals(this->cross_origin_redirects, other_struct.cross_origin_redirects))
    return false;
  if (!mojo::Equals(this->blob_url_token, other_struct.blob_url_token))
    return false;
  if (!mojo::Equals(this->data_url_blob, other_struct.data_url_blob))
    return false;
  if (!mojo::Equals(this->is_context_menu_save, other_struct.is_context_menu_save))
    return false;
  if (!mojo::Equals(this->has_user_gesture, other_struct.has_user_gesture))
    return false;
  return true;
}

template <typename T, DownloadURLParams::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
  if (lhs.url < rhs.url)
    return true;
  if (rhs.url < lhs.url)
    return false;
  if (lhs.referrer < rhs.referrer)
    return true;
  if (rhs.referrer < lhs.referrer)
    return false;
  if (lhs.initiator_origin < rhs.initiator_origin)
    return true;
  if (rhs.initiator_origin < lhs.initiator_origin)
    return false;
  if (lhs.suggested_name < rhs.suggested_name)
    return true;
  if (rhs.suggested_name < lhs.suggested_name)
    return false;
  if (lhs.cross_origin_redirects < rhs.cross_origin_redirects)
    return true;
  if (rhs.cross_origin_redirects < lhs.cross_origin_redirects)
    return false;
  if (lhs.blob_url_token < rhs.blob_url_token)
    return true;
  if (rhs.blob_url_token < lhs.blob_url_token)
    return false;
  if (lhs.data_url_blob < rhs.data_url_blob)
    return true;
  if (rhs.data_url_blob < lhs.data_url_blob)
    return false;
  if (lhs.is_context_menu_save < rhs.is_context_menu_save)
    return true;
  if (rhs.is_context_menu_save < lhs.is_context_menu_save)
    return false;
  if (lhs.has_user_gesture < rhs.has_user_gesture)
    return true;
  if (rhs.has_user_gesture < lhs.has_user_gesture)
    return false;
  return false;
}
template <typename StructPtrType>
OpenURLParamsPtr OpenURLParams::Clone() const {
  return New(
      mojo::Clone(url),
      mojo::Clone(initiator_origin),
      mojo::Clone(initiator_frame_token),
      mojo::Clone(post_body),
      mojo::Clone(extra_headers),
      mojo::Clone(referrer),
      mojo::Clone(is_form_submission),
      mojo::Clone(disposition),
      mojo::Clone(should_replace_current_entry),
      mojo::Clone(user_gesture),
      mojo::Clone(is_unfenced_top_navigation),
      mojo::Clone(triggering_event_info),
      mojo::Clone(blob_url_token),
      mojo::Clone(href_translate),
      mojo::Clone(impression),
      mojo::Clone(download_policy),
      mojo::Clone(source_location),
      mojo::Clone(initiator_policy_container_keep_alive_handle)
  );
}

template <typename T, OpenURLParams::EnableIfSame<T>*>
bool OpenURLParams::Equals(const T& other_struct) const {
  if (!mojo::Equals(this->url, other_struct.url))
    return false;
  if (!mojo::Equals(this->initiator_origin, other_struct.initiator_origin))
    return false;
  if (!mojo::Equals(this->initiator_frame_token, other_struct.initiator_frame_token))
    return false;
  if (!mojo::Equals(this->post_body, other_struct.post_body))
    return false;
  if (!mojo::Equals(this->extra_headers, other_struct.extra_headers))
    return false;
  if (!mojo::Equals(this->referrer, other_struct.referrer))
    return false;
  if (!mojo::Equals(this->is_form_submission, other_struct.is_form_submission))
    return false;
  if (!mojo::Equals(this->disposition, other_struct.disposition))
    return false;
  if (!mojo::Equals(this->should_replace_current_entry, other_struct.should_replace_current_entry))
    return false;
  if (!mojo::Equals(this->user_gesture, other_struct.user_gesture))
    return false;
  if (!mojo::Equals(this->is_unfenced_top_navigation, other_struct.is_unfenced_top_navigation))
    return false;
  if (!mojo::Equals(this->triggering_event_info, other_struct.triggering_event_info))
    return false;
  if (!mojo::Equals(this->blob_url_token, other_struct.blob_url_token))
    return false;
  if (!mojo::Equals(this->href_translate, other_struct.href_translate))
    return false;
  if (!mojo::Equals(this->impression, other_struct.impression))
    return false;
  if (!mojo::Equals(this->download_policy, other_struct.download_policy))
    return false;
  if (!mojo::Equals(this->source_location, other_struct.source_location))
    return false;
  if (!mojo::Equals(this->initiator_policy_container_keep_alive_handle, other_struct.initiator_policy_container_keep_alive_handle))
    return false;
  return true;
}

template <typename T, OpenURLParams::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
  if (lhs.url < rhs.url)
    return true;
  if (rhs.url < lhs.url)
    return false;
  if (lhs.initiator_origin < rhs.initiator_origin)
    return true;
  if (rhs.initiator_origin < lhs.initiator_origin)
    return false;
  if (lhs.initiator_frame_token < rhs.initiator_frame_token)
    return true;
  if (rhs.initiator_frame_token < lhs.initiator_frame_token)
    return false;
  if (lhs.post_body < rhs.post_body)
    return true;
  if (rhs.post_body < lhs.post_body)
    return false;
  if (lhs.extra_headers < rhs.extra_headers)
    return true;
  if (rhs.extra_headers < lhs.extra_headers)
    return false;
  if (lhs.referrer < rhs.referrer)
    return true;
  if (rhs.referrer < lhs.referrer)
    return false;
  if (lhs.is_form_submission < rhs.is_form_submission)
    return true;
  if (rhs.is_form_submission < lhs.is_form_submission)
    return false;
  if (lhs.disposition < rhs.disposition)
    return true;
  if (rhs.disposition < lhs.disposition)
    return false;
  if (lhs.should_replace_current_entry < rhs.should_replace_current_entry)
    return true;
  if (rhs.should_replace_current_entry < lhs.should_replace_current_entry)
    return false;
  if (lhs.user_gesture < rhs.user_gesture)
    return true;
  if (rhs.user_gesture < lhs.user_gesture)
    return false;
  if (lhs.is_unfenced_top_navigation < rhs.is_unfenced_top_navigation)
    return true;
  if (rhs.is_unfenced_top_navigation < lhs.is_unfenced_top_navigation)
    return false;
  if (lhs.triggering_event_info < rhs.triggering_event_info)
    return true;
  if (rhs.triggering_event_info < lhs.triggering_event_info)
    return false;
  if (lhs.blob_url_token < rhs.blob_url_token)
    return true;
  if (rhs.blob_url_token < lhs.blob_url_token)
    return false;
  if (lhs.href_translate < rhs.href_translate)
    return true;
  if (rhs.href_translate < lhs.href_translate)
    return false;
  if (lhs.impression < rhs.impression)
    return true;
  if (rhs.impression < lhs.impression)
    return false;
  if (lhs.download_policy < rhs.download_policy)
    return true;
  if (rhs.download_policy < lhs.download_policy)
    return false;
  if (lhs.source_location < rhs.source_location)
    return true;
  if (rhs.source_location < lhs.source_location)
    return false;
  if (lhs.initiator_policy_container_keep_alive_handle < rhs.initiator_policy_container_keep_alive_handle)
    return true;
  if (rhs.initiator_policy_container_keep_alive_handle < lhs.initiator_policy_container_keep_alive_handle)
    return false;
  return false;
}


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

namespace mojo {


template <>
struct CORE_EXPORT StructTraits<::blink::mojom::blink::SavableSubframe::DataView,
                                         ::blink::mojom::blink::SavableSubframePtr> {
  static bool IsNull(const ::blink::mojom::blink::SavableSubframePtr& input) { return !input; }
  static void SetToNull(::blink::mojom::blink::SavableSubframePtr* output) { output->reset(); }

  static const decltype(::blink::mojom::blink::SavableSubframe::original_url)& original_url(
      const ::blink::mojom::blink::SavableSubframePtr& input) {
    return input->original_url;
  }

  static const decltype(::blink::mojom::blink::SavableSubframe::subframe_token)& subframe_token(
      const ::blink::mojom::blink::SavableSubframePtr& input) {
    return input->subframe_token;
  }

  static bool Read(::blink::mojom::blink::SavableSubframe::DataView input, ::blink::mojom::blink::SavableSubframePtr* output);
};


template <>
struct CORE_EXPORT StructTraits<::blink::mojom::blink::GetSavableResourceLinksReply::DataView,
                                         ::blink::mojom::blink::GetSavableResourceLinksReplyPtr> {
  static bool IsNull(const ::blink::mojom::blink::GetSavableResourceLinksReplyPtr& input) { return !input; }
  static void SetToNull(::blink::mojom::blink::GetSavableResourceLinksReplyPtr* output) { output->reset(); }

  static const decltype(::blink::mojom::blink::GetSavableResourceLinksReply::resources_list)& resources_list(
      const ::blink::mojom::blink::GetSavableResourceLinksReplyPtr& input) {
    return input->resources_list;
  }

  static const decltype(::blink::mojom::blink::GetSavableResourceLinksReply::referrer)& referrer(
      const ::blink::mojom::blink::GetSavableResourceLinksReplyPtr& input) {
    return input->referrer;
  }

  static const decltype(::blink::mojom::blink::GetSavableResourceLinksReply::subframes)& subframes(
      const ::blink::mojom::blink::GetSavableResourceLinksReplyPtr& input) {
    return input->subframes;
  }

  static bool Read(::blink::mojom::blink::GetSavableResourceLinksReply::DataView input, ::blink::mojom::blink::GetSavableResourceLinksReplyPtr* output);
};


template <>
struct CORE_EXPORT StructTraits<::blink::mojom::blink::FindInPageResultAXParams::DataView,
                                         ::blink::mojom::blink::FindInPageResultAXParamsPtr> {
  static bool IsNull(const ::blink::mojom::blink::FindInPageResultAXParamsPtr& input) { return !input; }
  static void SetToNull(::blink::mojom::blink::FindInPageResultAXParamsPtr* output) { output->reset(); }

  static decltype(::blink::mojom::blink::FindInPageResultAXParams::request_id) request_id(
      const ::blink::mojom::blink::FindInPageResultAXParamsPtr& input) {
    return input->request_id;
  }

  static decltype(::blink::mojom::blink::FindInPageResultAXParams::match_index) match_index(
      const ::blink::mojom::blink::FindInPageResultAXParamsPtr& input) {
    return input->match_index;
  }

  static decltype(::blink::mojom::blink::FindInPageResultAXParams::start_id) start_id(
      const ::blink::mojom::blink::FindInPageResultAXParamsPtr& input) {
    return input->start_id;
  }

  static decltype(::blink::mojom::blink::FindInPageResultAXParams::start_offset) start_offset(
      const ::blink::mojom::blink::FindInPageResultAXParamsPtr& input) {
    return input->start_offset;
  }

  static decltype(::blink::mojom::blink::FindInPageResultAXParams::end_id) end_id(
      const ::blink::mojom::blink::FindInPageResultAXParamsPtr& input) {
    return input->end_id;
  }

  static decltype(::blink::mojom::blink::FindInPageResultAXParams::end_offset) end_offset(
      const ::blink::mojom::blink::FindInPageResultAXParamsPtr& input) {
    return input->end_offset;
  }

  static bool Read(::blink::mojom::blink::FindInPageResultAXParams::DataView input, ::blink::mojom::blink::FindInPageResultAXParamsPtr* output);
};


template <>
struct CORE_EXPORT StructTraits<::blink::mojom::blink::DownloadURLParams::DataView,
                                         ::blink::mojom::blink::DownloadURLParamsPtr> {
  static bool IsNull(const ::blink::mojom::blink::DownloadURLParamsPtr& input) { return !input; }
  static void SetToNull(::blink::mojom::blink::DownloadURLParamsPtr* output) { output->reset(); }

  static const decltype(::blink::mojom::blink::DownloadURLParams::url)& url(
      const ::blink::mojom::blink::DownloadURLParamsPtr& input) {
    return input->url;
  }

  static const decltype(::blink::mojom::blink::DownloadURLParams::referrer)& referrer(
      const ::blink::mojom::blink::DownloadURLParamsPtr& input) {
    return input->referrer;
  }

  static const decltype(::blink::mojom::blink::DownloadURLParams::initiator_origin)& initiator_origin(
      const ::blink::mojom::blink::DownloadURLParamsPtr& input) {
    return input->initiator_origin;
  }

  static const decltype(::blink::mojom::blink::DownloadURLParams::suggested_name)& suggested_name(
      const ::blink::mojom::blink::DownloadURLParamsPtr& input) {
    return input->suggested_name;
  }

  static decltype(::blink::mojom::blink::DownloadURLParams::cross_origin_redirects) cross_origin_redirects(
      const ::blink::mojom::blink::DownloadURLParamsPtr& input) {
    return input->cross_origin_redirects;
  }

  static  decltype(::blink::mojom::blink::DownloadURLParams::blob_url_token)& blob_url_token(
       ::blink::mojom::blink::DownloadURLParamsPtr& input) {
    return input->blob_url_token;
  }

  static  decltype(::blink::mojom::blink::DownloadURLParams::data_url_blob)& data_url_blob(
       ::blink::mojom::blink::DownloadURLParamsPtr& input) {
    return input->data_url_blob;
  }

  static decltype(::blink::mojom::blink::DownloadURLParams::is_context_menu_save) is_context_menu_save(
      const ::blink::mojom::blink::DownloadURLParamsPtr& input) {
    return input->is_context_menu_save;
  }

  static decltype(::blink::mojom::blink::DownloadURLParams::has_user_gesture) has_user_gesture(
      const ::blink::mojom::blink::DownloadURLParamsPtr& input) {
    return input->has_user_gesture;
  }

  static bool Read(::blink::mojom::blink::DownloadURLParams::DataView input, ::blink::mojom::blink::DownloadURLParamsPtr* output);
};


template <>
struct CORE_EXPORT StructTraits<::blink::mojom::blink::OpenURLParams::DataView,
                                         ::blink::mojom::blink::OpenURLParamsPtr> {
  static bool IsNull(const ::blink::mojom::blink::OpenURLParamsPtr& input) { return !input; }
  static void SetToNull(::blink::mojom::blink::OpenURLParamsPtr* output) { output->reset(); }

  static const decltype(::blink::mojom::blink::OpenURLParams::url)& url(
      const ::blink::mojom::blink::OpenURLParamsPtr& input) {
    return input->url;
  }

  static const decltype(::blink::mojom::blink::OpenURLParams::initiator_origin)& initiator_origin(
      const ::blink::mojom::blink::OpenURLParamsPtr& input) {
    return input->initiator_origin;
  }

  static const decltype(::blink::mojom::blink::OpenURLParams::initiator_frame_token)& initiator_frame_token(
      const ::blink::mojom::blink::OpenURLParamsPtr& input) {
    return input->initiator_frame_token;
  }

  static  decltype(::blink::mojom::blink::OpenURLParams::post_body)& post_body(
       ::blink::mojom::blink::OpenURLParamsPtr& input) {
    return input->post_body;
  }

  static const decltype(::blink::mojom::blink::OpenURLParams::extra_headers)& extra_headers(
      const ::blink::mojom::blink::OpenURLParamsPtr& input) {
    return input->extra_headers;
  }

  static const decltype(::blink::mojom::blink::OpenURLParams::referrer)& referrer(
      const ::blink::mojom::blink::OpenURLParamsPtr& input) {
    return input->referrer;
  }

  static decltype(::blink::mojom::blink::OpenURLParams::is_form_submission) is_form_submission(
      const ::blink::mojom::blink::OpenURLParamsPtr& input) {
    return input->is_form_submission;
  }

  static decltype(::blink::mojom::blink::OpenURLParams::disposition) disposition(
      const ::blink::mojom::blink::OpenURLParamsPtr& input) {
    return input->disposition;
  }

  static decltype(::blink::mojom::blink::OpenURLParams::should_replace_current_entry) should_replace_current_entry(
      const ::blink::mojom::blink::OpenURLParamsPtr& input) {
    return input->should_replace_current_entry;
  }

  static decltype(::blink::mojom::blink::OpenURLParams::user_gesture) user_gesture(
      const ::blink::mojom::blink::OpenURLParamsPtr& input) {
    return input->user_gesture;
  }

  static decltype(::blink::mojom::blink::OpenURLParams::is_unfenced_top_navigation) is_unfenced_top_navigation(
      const ::blink::mojom::blink::OpenURLParamsPtr& input) {
    return input->is_unfenced_top_navigation;
  }

  static decltype(::blink::mojom::blink::OpenURLParams::triggering_event_info) triggering_event_info(
      const ::blink::mojom::blink::OpenURLParamsPtr& input) {
    return input->triggering_event_info;
  }

  static  decltype(::blink::mojom::blink::OpenURLParams::blob_url_token)& blob_url_token(
       ::blink::mojom::blink::OpenURLParamsPtr& input) {
    return input->blob_url_token;
  }

  static const decltype(::blink::mojom::blink::OpenURLParams::href_translate)& href_translate(
      const ::blink::mojom::blink::OpenURLParamsPtr& input) {
    return input->href_translate;
  }

  static const decltype(::blink::mojom::blink::OpenURLParams::impression)& impression(
      const ::blink::mojom::blink::OpenURLParamsPtr& input) {
    return input->impression;
  }

  static const decltype(::blink::mojom::blink::OpenURLParams::download_policy)& download_policy(
      const ::blink::mojom::blink::OpenURLParamsPtr& input) {
    return input->download_policy;
  }

  static const decltype(::blink::mojom::blink::OpenURLParams::source_location)& source_location(
      const ::blink::mojom::blink::OpenURLParamsPtr& input) {
    return input->source_location;
  }

  static  decltype(::blink::mojom::blink::OpenURLParams::initiator_policy_container_keep_alive_handle)& initiator_policy_container_keep_alive_handle(
       ::blink::mojom::blink::OpenURLParamsPtr& input) {
    return input->initiator_policy_container_keep_alive_handle;
  }

  static bool Read(::blink::mojom::blink::OpenURLParams::DataView input, ::blink::mojom::blink::OpenURLParamsPtr* output);
};

}  // namespace mojo

#endif  // THIRD_PARTY_BLINK_PUBLIC_MOJOM_FRAME_FRAME_MOJOM_BLINK_H_

/* Metadata comment
eyJtZXRhIjogW3siZW5kIjogMTAxMzQsICJiZWdpbiI6IDEwMTE5LCAiZWRnZSI6ICIlL2t5dGhl
L2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNv
cnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uS2VlcEFsaXZlSGFuZGxlIn19
LCB7ImVuZCI6IDExMzkwLCAiYmVnaW4iOiAxMTM2OCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dl
bmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAi
Y2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9q
b20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLktlZXBBbGl2ZUhhbmRsZUZhY3RvcnkifX0s
IHsiZW5kIjogMTI2NzEsICJiZWdpbiI6IDEyNjUxLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2Vu
ZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJj
aHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pv
bSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uS2VlcEFsaXZlSGFuZGxlRmFjdG9yeS5Jc3N1
ZUtlZXBBbGl2ZUhhbmRsZSJ9fSwgeyJlbmQiOiAxMjk4OCwgImJlZ2luIjogMTI5NzQsICJlZGdl
IjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2
bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3Jj
IiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZy
YW1lSG9zdCJ9fSwgeyJlbmQiOiAyMTc2MiwgImJlZ2luIjogMjE3NDcsICJlZGdlIjogIiUva3l0
aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsi
Y29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1
YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lSG9zdC5F
bnRlckZ1bGxzY3JlZW4ifX0sIHsiZW5kIjogMjE5NTAsICJiZWdpbiI6IDIxOTM2LCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5h
bWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIs
ICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFt
ZUhvc3QuRXhpdEZ1bGxzY3JlZW4ifX0sIHsiZW5kIjogMjIwNjksICJiZWdpbiI6IDIyMDQ3LCAi
ZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMi
LCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVt
L3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9j
YWxGcmFtZUhvc3QuRnVsbHNjcmVlblN0YXRlQ2hhbmdlZCJ9fSwgeyJlbmQiOiAyMjI2MSwgImJl
Z2luIjogMjIyMzgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJh
bmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJj
ZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJi
bGluay5tb2pvbS5Mb2NhbEZyYW1lSG9zdC5SZWdpc3RlclByb3RvY29sSGFuZGxlciJ9fSwgeyJl
bmQiOiAyMjQ1NiwgImJlZ2luIjogMjI0MzEsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0
ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwg
InNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lSG9zdC5VbnJlZ2lzdGVyUHJvdG9j
b2xIYW5kbGVyIn19LCB7ImVuZCI6IDIyNjUxLCAiYmVnaW4iOiAyMjYyNiwgImVkZ2UiOiAiJS9r
eXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjog
eyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFu
Z3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVIb3N0
LkRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnQifX0sIHsiZW5kIjogMjI3ODIsICJiZWdpbiI6IDIy
NzU0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9q
b20uTG9jYWxGcmFtZUhvc3QuRGlkQ29udGFpbkluc2VjdXJlRm9ybUFjdGlvbiJ9fSwgeyJlbmQi
OiAyMjkxMywgImJlZ2luIjogMjI4ODUsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMi
LCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVt
Lmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNp
Z25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lSG9zdC5NYWluRG9jdW1lbnRFbGVtZW50
QXZhaWxhYmxlIn19LCB7ImVuZCI6IDIzMDY4LCAiYmVnaW4iOiAyMzA0MywgImVkZ2UiOiAiJS9r
eXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjog
eyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFu
Z3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVIb3N0
LlNldE5lZWRzT2NjbHVzaW9uVHJhY2tpbmcifX0sIHsiZW5kIjogMjMyMjQsICJiZWdpbiI6IDIz
MTkzLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9q
b20uTG9jYWxGcmFtZUhvc3QuU2V0VmlydHVhbEtleWJvYXJkT3ZlcmxheVBvbGljeSJ9fSwgeyJl
bmQiOiAyMzM1NywgImJlZ2luIjogMjMzNDAsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0
ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwg
InNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lSG9zdC5WaXNpYmlsaXR5Q2hhbmdl
ZCJ9fSwgeyJlbmQiOiAyMzUxOSwgImJlZ2luIjogMjM1MDAsICJlZGdlIjogIiUva3l0aGUvZWRn
ZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVz
IjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjog
Im1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lSG9zdC5EaWRDaGFu
Z2VUaGVtZUNvbG9yIn19LCB7ImVuZCI6IDIzNjc5LCAiYmVnaW4iOiAyMzY1NSwgImVkZ2UiOiAi
JS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1l
IjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAi
bGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVI
b3N0LkRpZENoYW5nZUJhY2tncm91bmRDb2xvciJ9fSwgeyJlbmQiOiAyMzgzOSwgImJlZ2luIjog
MjM4MTksICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5t
b2pvbS5Mb2NhbEZyYW1lSG9zdC5EaWRGYWlsTG9hZFdpdGhFcnJvciJ9fSwgeyJlbmQiOiAyMzk4
NCwgImJlZ2luIjogMjM5NzEsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlw
ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVy
ZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lSG9zdC5EaWRGb2N1c0ZyYW1lIn19LCB7ImVuZCI6
IDI0MDgzLCAiYmVnaW4iOiAyNDA3MSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIs
ICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2ln
bmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVIb3N0LkRpZENhbGxGb2N1cyJ9fSwgeyJl
bmQiOiAyNDIxNCwgImJlZ2luIjogMjQxODYsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0
ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwg
InNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lSG9zdC5FbmZvcmNlSW5zZWN1cmVS
ZXF1ZXN0UG9saWN5In19LCB7ImVuZCI6IDI0NDA1LCAiYmVnaW4iOiAyNDM3NiwgImVkZ2UiOiAi
JS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1l
IjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAi
bGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVI
b3N0LkVuZm9yY2VJbnNlY3VyZU5hdmlnYXRpb25zU2V0In19LCB7ImVuZCI6IDI0NTc2LCAiYmVn
aW4iOiAyNDU0NCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFu
Y2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNl
LmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJs
aW5rLm1vam9tLkxvY2FsRnJhbWVIb3N0LlN1ZGRlblRlcm1pbmF0aW9uRGlzYWJsZXJDaGFuZ2Vk
In19LCB7ImVuZCI6IDI0ODIzLCAiYmVnaW4iOiAyNDc3NywgImVkZ2UiOiAiJS9reXRoZS9lZGdl
L2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMi
OiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAi
bW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVIb3N0LkhhZFN0aWNr
eVVzZXJBY3RpdmF0aW9uQmVmb3JlTmF2aWdhdGlvbkNoYW5nZWQifX0sIHsiZW5kIjogMjQ5Nzgs
ICJiZWdpbiI6IDI0OTQ2LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUi
OiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVz
b3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUi
OiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhvc3QuU2Nyb2xsUmVjdFRvVmlzaWJsZUluUGFyZW50
RnJhbWUifX0sIHsiZW5kIjogMjUyMDYsICJiZWdpbiI6IDI1MTc0LCAiZWRnZSI6ICIlL2t5dGhl
L2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNv
cnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhvc3QuQnVi
YmxlTG9naWNhbFNjcm9sbEluUGFyZW50RnJhbWUifX0sIHsiZW5kIjogMjU0MDIsICJiZWdpbiI6
IDI1Mzg0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9y
X2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t
L2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsu
bW9qb20uTG9jYWxGcmFtZUhvc3QuRGlkQmxvY2tOYXZpZ2F0aW9uIn19LCB7ImVuZCI6IDI1NjQy
LCAiYmVnaW4iOiAyNTYyMSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBl
IjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xl
c291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJl
IjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVIb3N0LkRpZENoYW5nZUxvYWRQcm9ncmVzcyJ9fSwg
eyJlbmQiOiAyNTc2MywgImJlZ2luIjogMjU3NTAsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5l
cmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNo
cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9t
IiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lSG9zdC5EaWRGaW5pc2hMb2Fk
In19LCB7ImVuZCI6IDI1ODk2LCAiYmVnaW4iOiAyNTg4NCwgImVkZ2UiOiAiJS9reXRoZS9lZGdl
L2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMi
OiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAi
bW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVIb3N0LkRpc3BhdGNo
TG9hZCJ9fSwgeyJlbmQiOiAyNjAwNSwgImJlZ2luIjogMjU5ODgsICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdl
IjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lSG9zdC5Hb1Rv
RW50cnlBdE9mZnNldCJ9fSwgeyJlbmQiOiAyNjE2OSwgImJlZ2luIjogMjYxNDMsICJlZGdlIjog
IiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFt
ZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwg
Imxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1l
SG9zdC5OYXZpZ2F0ZVRvTmF2aWdhdGlvbkFwaUtleSJ9fSwgeyJlbmQiOiAyNjMxMSwgImJlZ2lu
IjogMjYzMDAsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGlu
ay5tb2pvbS5Mb2NhbEZyYW1lSG9zdC5VcGRhdGVUaXRsZSJ9fSwgeyJlbmQiOiAyNjUwNywgImJl
Z2luIjogMjY0ODIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJh
bmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJj
ZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJi
bGluay5tb2pvbS5Mb2NhbEZyYW1lSG9zdC5VcGRhdGVVc2VyQWN0aXZhdGlvblN0YXRlIn19LCB7
ImVuZCI6IDI2Nzg0LCAiYmVnaW4iOiAyNjc0OSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVy
YXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hy
b21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20i
LCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVIb3N0LkhhbmRsZUFjY2Vzc2li
aWxpdHlGaW5kSW5QYWdlUmVzdWx0In19LCB7ImVuZCI6IDI2OTczLCAiYmVnaW4iOiAyNjkzMywg
ImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVz
IiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1
bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxv
Y2FsRnJhbWVIb3N0LkhhbmRsZUFjY2Vzc2liaWxpdHlGaW5kSW5QYWdlVGVybWluYXRpb24ifX0s
IHsiZW5kIjogMjcwOTQsICJiZWdpbiI6IDI3MDcxLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2Vu
ZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJj
aHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pv
bSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhvc3QuRG9jdW1lbnRPbkxv
YWRDb21wbGV0ZWQifX0sIHsiZW5kIjogMjcyMjcsICJiZWdpbiI6IDI3MTk4LCAiZWRnZSI6ICIl
L2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUi
OiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJs
YW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhv
c3QuRm9yd2FyZFJlc291cmNlVGltaW5nVG9QYXJlbnQifX0sIHsiZW5kIjogMjc0MTcsICJiZWdp
biI6IDI3Mzg1LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5j
aG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2Uu
Y29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxp
bmsubW9qb20uTG9jYWxGcmFtZUhvc3QuRGlkRGlzcGF0Y2hET01Db250ZW50TG9hZGVkRXZlbnQi
fX0sIHsiZW5kIjogMjc2NjUsICJiZWdpbiI6IDI3NjQ2LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2Uv
Z2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6
ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJt
b2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhvc3QuUnVuTW9kYWxB
bGVydERpYWxvZyJ9fSwgeyJlbmQiOiAyNzkyMCwgImJlZ2luIjogMjc5MDEsICJlZGdlIjogIiUv
a3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6
IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxh
bmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lSG9z
dC5SdW5Nb2RhbEFsZXJ0RGlhbG9nIn19LCB7ImVuZCI6IDI4MjkwLCAiYmVnaW4iOiAyODI2OSwg
ImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVz
IiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1
bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxv
Y2FsRnJhbWVIb3N0LlJ1bk1vZGFsQ29uZmlybURpYWxvZyJ9fSwgeyJlbmQiOiAyODU3NCwgImJl
Z2luIjogMjg1NTMsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJh
bmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJj
ZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJi
bGluay5tb2pvbS5Mb2NhbEZyYW1lSG9zdC5SdW5Nb2RhbENvbmZpcm1EaWFsb2cifX0sIHsiZW5k
IjogMjg5NDQsICJiZWdpbiI6IDI4OTI0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVz
IiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1
bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJz
aWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhvc3QuUnVuTW9kYWxQcm9tcHREaWFs
b2cifX0sIHsiZW5kIjogMjkzMTAsICJiZWdpbiI6IDI5MjkwLCAiZWRnZSI6ICIlL2t5dGhlL2Vk
Z2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1
cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6
ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhvc3QuUnVuTW9k
YWxQcm9tcHREaWFsb2cifX0sIHsiZW5kIjogMjk3MTksICJiZWdpbiI6IDI5Njk3LCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5h
bWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIs
ICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFt
ZUhvc3QuUnVuQmVmb3JlVW5sb2FkQ29uZmlybSJ9fSwgeyJlbmQiOiAyOTk0MCwgImJlZ2luIjog
Mjk5MTgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5t
b2pvbS5Mb2NhbEZyYW1lSG9zdC5SdW5CZWZvcmVVbmxvYWRDb25maXJtIn19LCB7ImVuZCI6IDMw
MTAyLCAiYmVnaW4iOiAzMDA4NiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0
eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29v
Z2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0
dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVIb3N0LlVwZGF0ZUZhdmljb25VUkwifX0sIHsi
ZW5kIjogMzAyNjEsICJiZWdpbiI6IDMwMjUwLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh
dGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJv
bWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIs
ICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhvc3QuRG93bmxvYWRVUkwifX0s
IHsiZW5kIjogMzA0MDUsICJiZWdpbiI6IDMwMzg0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2Vu
ZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJj
aHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pv
bSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhvc3QuRm9jdXNlZEVsZW1l
bnRDaGFuZ2VkIn19LCB7ImVuZCI6IDMwNjMyLCAiYmVnaW4iOiAzMDYxMiwgImVkZ2UiOiAiJS9r
eXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjog
eyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFu
Z3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVIb3N0
LlRleHRTZWxlY3Rpb25DaGFuZ2VkIn19LCB7ImVuZCI6IDMwODAyLCAiYmVnaW4iOiAzMDc4OSwg
ImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVz
IiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1
bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxv
Y2FsRnJhbWVIb3N0LlNob3dQb3B1cE1lbnUifX0sIHsiZW5kIjogMzExOTEsICJiZWdpbiI6IDMx
MTcxLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9q
b20uTG9jYWxGcmFtZUhvc3QuQ3JlYXRlTmV3UG9wdXBXaWRnZXQifX0sIHsiZW5kIjogMzE1NDUs
ICJiZWdpbiI6IDMxNTMwLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUi
OiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVz
b3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUi
OiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhvc3QuU2hvd0NvbnRleHRNZW51In19LCB7ImVuZCI6
IDMxODE1LCAiYmVnaW4iOiAzMTc4NSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIs
ICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2ln
bmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVIb3N0LkRpZExvYWRSZXNvdXJjZUZyb21N
ZW1vcnlDYWNoZSJ9fSwgeyJlbmQiOiAzMjEyNSwgImJlZ2luIjogMzIwOTYsICJlZGdlIjogIiUv
a3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6
IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxh
bmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lSG9z
dC5EaWRDaGFuZ2VGcmFtZU93bmVyUHJvcGVydGllcyJ9fSwgeyJlbmQiOiAzMjM0NSwgImJlZ2lu
IjogMzIzMzAsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGlu
ay5tb2pvbS5Mb2NhbEZyYW1lSG9zdC5EaWRDaGFuZ2VPcGVuZXIifX0sIHsiZW5kIjogMzI1MjAs
ICJiZWdpbiI6IDMyNTAwLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUi
OiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVz
b3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUi
OiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhvc3QuRGlkQ2hhbmdlRnJhbWVQb2xpY3kifX0sIHsi
ZW5kIjogMzI3MzEsICJiZWdpbiI6IDMyNzA2LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh
dGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJv
bWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIs
ICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhvc3QuRGlkQ2hhbmdlSWZyYW1l
QXR0cmlidXRlcyJ9fSwgeyJlbmQiOiAzMjk5NiwgImJlZ2luIjogMzI5NjcsICJlZGdlIjogIiUv
a3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6
IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxh
bmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lSG9z
dC5DYXB0dXJlUGFpbnRQcmV2aWV3T2ZTdWJmcmFtZSJ9fSwgeyJlbmQiOiAzMzE2OSwgImJlZ2lu
IjogMzMxNTMsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGlu
ay5tb2pvbS5Mb2NhbEZyYW1lSG9zdC5TZXRDbG9zZUxpc3RlbmVyIn19LCB7ImVuZCI6IDMzMzI0
LCAiYmVnaW4iOiAzMzMxOCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBl
IjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xl
c291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJl
IjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVIb3N0LkRldGFjaCJ9fSwgeyJlbmQiOiAzMzQ0OSwg
ImJlZ2luIjogMzM0MjQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6
ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lSG9zdC5HZXRLZWVwQWxpdmVIYW5kbGVGYWN0b3J5In19
LCB7ImVuZCI6IDMzNjIzLCAiYmVnaW4iOiAzMzYwMSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dl
bmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAi
Y2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9q
b20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVIb3N0LkRpZEFkZE1lc3Nh
Z2VUb0NvbnNvbGUifX0sIHsiZW5kIjogMzM5MDYsICJiZWdpbiI6IDMzODkwLCAiZWRnZSI6ICIl
L2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUi
OiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJs
YW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhv
c3QuRnJhbWVTaXplQ2hhbmdlZCJ9fSwgeyJlbmQiOiAzNDA2MiwgImJlZ2luIjogMzQwMzMsICJl
ZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIs
ICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0v
c3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2Nh
bEZyYW1lSG9zdC5EaWRVcGRhdGVQcmVmZXJyZWRDb2xvclNjaGVtZSJ9fSwgeyJlbmQiOiAzNDI0
MSwgImJlZ2luIjogMzQyMjIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlw
ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVy
ZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lSG9zdC5EaWRJbmZlckNvbG9yU2NoZW1lIn19LCB7
ImVuZCI6IDM0NDAyLCAiYmVnaW4iOiAzNDM4NywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVy
YXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hy
b21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20i
LCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVIb3N0LkRpZENoYW5nZVNyY0Rv
YyJ9fSwgeyJlbmQiOiAzNDYwOCwgImJlZ2luIjogMzQ1ODEsICJlZGdlIjogIiUva3l0aGUvZWRn
ZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVz
IjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjog
Im1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lSG9zdC5SZWNlaXZl
ZERlbGVnYXRlZENhcGFiaWxpdHkifX0sIHsiZW5kIjogMzQ5MDYsICJiZWdpbiI6IDM0ODk2LCAi
ZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMi
LCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVt
L3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9j
YWxGcmFtZSJ9fSwgeyJlbmQiOiA0MTI0NywgImJlZ2luIjogNDEyMjAsICJlZGdlIjogIiUva3l0
aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsi
Y29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1
YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lLkdldFRl
eHRTdXJyb3VuZGluZ1NlbGVjdGlvbiJ9fSwgeyJlbmQiOiA0MTQyNywgImJlZ2luIjogNDE0MDUs
ICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5l
cyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21p
dW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5M
b2NhbEZyYW1lLlNlbmRJbnRlcnZlbnRpb25SZXBvcnQifX0sIHsiZW5kIjogNDE1OTMsICJiZWdp
biI6IDQxNTcwLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5j
aG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2Uu
Y29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxp
bmsubW9qb20uTG9jYWxGcmFtZS5TZXRGcmFtZU93bmVyUHJvcGVydGllcyJ9fSwgeyJlbmQiOiA0
MTc2MSwgImJlZ2luIjogNDE3NDEsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAi
dHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdv
b2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25h
dHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lLk5vdGlmeVVzZXJBY3RpdmF0aW9uIn19LCB7
ImVuZCI6IDQxOTY3LCAiYmVnaW4iOiA0MTkzNSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVy
YXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hy
b21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20i
LCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWUuTm90aWZ5VmlydHVhbEtleWJv
YXJkT3ZlcmxheVJlY3QifX0sIHsiZW5kIjogNDIxMDgsICJiZWdpbiI6IDQyMDg5LCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5h
bWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIs
ICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFt
ZS5BZGRNZXNzYWdlVG9Db25zb2xlIn19LCB7ImVuZCI6IDQyMzE0LCAiYmVnaW4iOiA0MjI5Nywg
ImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVz
IiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1
bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxv
Y2FsRnJhbWUuQWRkSW5zcGVjdG9ySXNzdWUifX0sIHsiZW5kIjogNDI0NjgsICJiZWdpbiI6IDQy
NDUxLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9q
b20uTG9jYWxGcmFtZS5Td2FwSW5JbW1lZGlhdGVseSJ9fSwgeyJlbmQiOiA0MjU2NywgImJlZ2lu
IjogNDI1NTMsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGlu
ay5tb2pvbS5Mb2NhbEZyYW1lLkNoZWNrQ29tcGxldGVkIn19LCB7ImVuZCI6IDQyNjYwLCAiYmVn
aW4iOiA0MjY0OSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFu
Y2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNl
LmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJs
aW5rLm1vam9tLkxvY2FsRnJhbWUuU3RvcExvYWRpbmcifX0sIHsiZW5kIjogNDI3NDcsICJiZWdp
biI6IDQyNzM5LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5j
aG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2Uu
Y29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxp
bmsubW9qb20uTG9jYWxGcmFtZS5Db2xsYXBzZSJ9fSwgeyJlbmQiOiA0Mjg3MiwgImJlZ2luIjog
NDI4NTIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5t
b2pvbS5Mb2NhbEZyYW1lLkVuYWJsZVZpZXdTb3VyY2VNb2RlIn19LCB7ImVuZCI6IDQyOTUzLCAi
YmVnaW4iOiA0Mjk0OCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjog
ImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjog
ImJsaW5rLm1vam9tLkxvY2FsRnJhbWUuRm9jdXMifX0sIHsiZW5kIjogNDMwNjIsICJiZWdpbiI6
IDQzMDQzLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9y
X2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t
L2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsu
bW9qb20uTG9jYWxGcmFtZS5DbGVhckZvY3VzZWRFbGVtZW50In19LCB7ImVuZCI6IDQzMTk1LCAi
YmVnaW4iOiA0MzE2NCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjog
ImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjog
ImJsaW5rLm1vam9tLkxvY2FsRnJhbWUuR2V0UmVzb3VyY2VTbmFwc2hvdEZvcldlYkJ1bmRsZSJ9
fSwgeyJlbmQiOiA0MzM4MCwgImJlZ2luIjogNDMzNjksICJlZGdlIjogIiUva3l0aGUvZWRnZS9n
ZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjog
ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1v
am9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lLkNvcHlJbWFnZUF0In19
LCB7ImVuZCI6IDQzNTA1LCAiYmVnaW4iOiA0MzQ5NCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dl
bmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAi
Y2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9q
b20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWUuU2F2ZUltYWdlQXQifX0s
IHsiZW5kIjogNDM2NTQsICJiZWdpbiI6IDQzNjMxLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2Vu
ZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJj
aHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pv
bSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZS5SZXBvcnRCbGlua0ZlYXR1
cmVVc2FnZSJ9fSwgeyJlbmQiOiA0MzgyOSwgImJlZ2luIjogNDM4MDgsICJlZGdlIjogIiUva3l0
aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsi
Y29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1
YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lLlJlbmRl
ckZhbGxiYWNrQ29udGVudCJ9fSwgeyJlbmQiOiA0Mzk3OCwgImJlZ2luIjogNDM5MzksICJlZGdl
IjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2
bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3Jj
IiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZy
YW1lLlJlbmRlckZhbGxiYWNrQ29udGVudFdpdGhSZXNvdXJjZVRpbWluZyJ9fSwgeyJlbmQiOiA0
NDI2NiwgImJlZ2luIjogNDQyNTQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAi
dHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdv
b2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25h
dHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lLkJlZm9yZVVubG9hZCJ9fSwgeyJlbmQiOiA0
NDQyMCwgImJlZ2luIjogNDQ0MDEsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAi
dHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdv
b2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25h
dHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lLk1lZGlhUGxheWVyQWN0aW9uQXQifX0sIHsi
ZW5kIjogNDQ1OTksICJiZWdpbiI6IDQ0NTg1LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh
dGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJv
bWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIs
ICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZS5QbHVnaW5BY3Rpb25BdCJ9fSwg
eyJlbmQiOiA0NDc2MSwgImJlZ2luIjogNDQ3NDIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5l
cmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNo
cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9t
IiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lLkFkdmFuY2VGb2N1c0luRnJh
bWUifX0sIHsiZW5kIjogNDQ5ODAsICJiZWdpbiI6IDQ0OTYyLCAiZWRnZSI6ICIlL2t5dGhlL2Vk
Z2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1
cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6
ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZS5BZHZhbmNlRm9j
dXNGb3JJTUUifX0sIHsiZW5kIjogNDUxNjYsICJiZWdpbiI6IDQ1MTMwLCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5n
dWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZS5SZXBv
cnRDb250ZW50U2VjdXJpdHlQb2xpY3lWaW9sYXRpb24ifX0sIHsiZW5kIjogNDUzMjcsICJiZWdp
biI6IDQ1MzA3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5j
aG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2Uu
Y29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxp
bmsubW9qb20uTG9jYWxGcmFtZS5EaWRVcGRhdGVGcmFtZVBvbGljeSJ9fSwgeyJlbmQiOiA0NTQ3
MCwgImJlZ2luIjogNDU0NTQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlw
ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVy
ZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lLlBvc3RNZXNzYWdlRXZlbnQifX0sIHsiZW5kIjog
NDU4NzQsICJiZWdpbiI6IDQ1ODQ0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwg
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWdu
YXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZS5KYXZhU2NyaXB0TWV0aG9kRXhlY3V0ZVJl
cXVlc3QifX0sIHsiZW5kIjogNDYyNDMsICJiZWdpbiI6IDQ2MjE5LCAiZWRnZSI6ICIlL2t5dGhl
L2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNv
cnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZS5KYXZhU2Ny
aXB0RXhlY3V0ZVJlcXVlc3QifX0sIHsiZW5kIjogNDY1OTUsICJiZWdpbiI6IDQ2NTYzLCAiZWRn
ZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAi
dm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3Ny
YyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxG
cmFtZS5KYXZhU2NyaXB0RXhlY3V0ZVJlcXVlc3RGb3JUZXN0cyJ9fSwgeyJlbmQiOiA0Njk5MCwg
ImJlZ2luIjogNDY5NTEsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6
ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lLkphdmFTY3JpcHRFeGVjdXRlUmVxdWVzdEluSXNvbGF0
ZWRXb3JsZCJ9fSwgeyJlbmQiOiA0NzIyOSwgImJlZ2luIjogNDcyMDgsICJlZGdlIjogIiUva3l0
aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsi
Y29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1
YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lLkJpbmRS
ZXBvcnRpbmdPYnNlcnZlciJ9fSwgeyJlbmQiOiA0NzM5OCwgImJlZ2luIjogNDczODYsICJlZGdl
IjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2
bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3Jj
IiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZy
YW1lLlVwZGF0ZU9wZW5lciJ9fSwgeyJlbmQiOiA0NzY3OCwgImJlZ2luIjogNDc2NTUsICJlZGdl
IjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2
bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3Jj
IiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZy
YW1lLkdldFNhdmFibGVSZXNvdXJjZUxpbmtzIn19LCB7ImVuZCI6IDQ3ODIzLCAiYmVnaW4iOiA0
NzgwNiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1v
am9tLkxvY2FsRnJhbWUuTWl4ZWRDb250ZW50Rm91bmQifX0sIHsiZW5kIjogNDgyMDUsICJiZWdp
biI6IDQ4MTg4LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5j
aG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2Uu
Y29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxp
bmsubW9qb20uTG9jYWxGcmFtZS5CaW5kRGV2VG9vbHNBZ2VudCJ9fSwgeyJlbmQiOiA0ODYwOSwg
ImJlZ2luIjogNDg1ODksICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6
ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lLkV4dHJhY3RTbWFydENsaXBEYXRhIn19LCB7ImVuZCI6
IDQ4Nzg2LCAiYmVnaW4iOiA0ODc2NCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIs
ICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2ln
bmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWUuSGFuZGxlUmVuZGVyZXJEZWJ1Z1VSTCJ9
fSwgeyJlbmQiOiA0OTA0MCwgImJlZ2luIjogNDkwMTUsICJlZGdlIjogIiUva3l0aGUvZWRnZS9n
ZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjog
ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1v
am9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lLkdldENhbm9uaWNhbFVy
bEZvclNoYXJpbmcifX0sIHsiZW5kIjogNDkzMDQsICJiZWdpbiI6IDQ5Mjg0LCAiZWRnZSI6ICIl
L2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUi
OiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJs
YW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZS5H
ZXRPcGVuR3JhcGhNZXRhZGF0YSJ9fSwgeyJlbmQiOiA0OTQ5MiwgImJlZ2luIjogNDk0NTIsICJl
ZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIs
ICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0v
c3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2Nh
bEZyYW1lLlNldE5hdmlnYXRpb25BcGlIaXN0b3J5RW50cmllc0ZvclJlc3RvcmUifX0sIHsiZW5k
IjogNDk4NjksICJiZWdpbiI6IDQ5ODQ3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVz
IiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1
bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJz
aWduYXR1cmUiOiAiYmxpbmsubW9qb20uSGlnaFByaW9yaXR5TG9jYWxGcmFtZSJ9fSwgeyJlbmQi
OiA1MTI3NiwgImJlZ2luIjogNTEyNTYsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMi
LCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVt
Lmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNp
Z25hdHVyZSI6ICJibGluay5tb2pvbS5IaWdoUHJpb3JpdHlMb2NhbEZyYW1lLkRpc3BhdGNoQmVm
b3JlVW5sb2FkIn19LCB7ImVuZCI6IDUxNTU0LCAiYmVnaW4iOiA1MTUzOSwgImVkZ2UiOiAiJS9r
eXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjog
eyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFu
Z3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLlJlbW90ZUZyYW1lSG9z
dCJ9fSwgeyJlbmQiOiA1NDQ3MCwgImJlZ2luIjogNTQ0MzgsICJlZGdlIjogIiUva3l0aGUvZWRn
ZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVz
IjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjog
Im1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5SZW1vdGVGcmFtZUhvc3QuU2V0SW5o
ZXJpdGVkRWZmZWN0aXZlVG91Y2hBY3Rpb24ifX0sIHsiZW5kIjogNTQ2MzIsICJiZWdpbiI6IDU0
NjA0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9q
b20uUmVtb3RlRnJhbWVIb3N0LlVwZGF0ZVJlbmRlclRocm90dGxpbmdTdGF0dXMifX0sIHsiZW5k
IjogNTQ4MDQsICJiZWdpbiI6IDU0Nzg3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVz
IiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1
bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJz
aWduYXR1cmUiOiAiYmxpbmsubW9qb20uUmVtb3RlRnJhbWVIb3N0LlZpc2liaWxpdHlDaGFuZ2Vk
In19LCB7ImVuZCI6IDU0OTU1LCAiYmVnaW4iOiA1NDk0MiwgImVkZ2UiOiAiJS9reXRoZS9lZGdl
L2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMi
OiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAi
bW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLlJlbW90ZUZyYW1lSG9zdC5EaWRGb2N1
c0ZyYW1lIn19LCB7ImVuZCI6IDU1MDU5LCAiYmVnaW4iOiA1NTA0NSwgImVkZ2UiOiAiJS9reXRo
ZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJj
b3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3Vh
Z2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLlJlbW90ZUZyYW1lSG9zdC5D
aGVja0NvbXBsZXRlZCJ9fSwgeyJlbmQiOiA1NTIxNywgImJlZ2luIjogNTUxNzYsICJlZGdlIjog
IiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFt
ZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwg
Imxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5SZW1vdGVGcmFt
ZUhvc3QuQ2FwdHVyZVBhaW50UHJldmlld09mQ3Jvc3NQcm9jZXNzU3ViZnJhbWUifX0sIHsiZW5k
IjogNTUzNzksICJiZWdpbiI6IDU1MzY5LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVz
IiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1
bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJz
aWduYXR1cmUiOiAiYmxpbmsubW9qb20uUmVtb3RlRnJhbWVIb3N0LlNldElzSW5lcnQifX0sIHsi
ZW5kIjogNTU0OTUsICJiZWdpbiI6IDU1NDgwLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh
dGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJv
bWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIs
ICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uUmVtb3RlRnJhbWVIb3N0LkRpZENoYW5nZU9wZW5l
ciJ9fSwgeyJlbmQiOiA1NTY1NSwgImJlZ2luIjogNTU2NDMsICJlZGdlIjogIiUva3l0aGUvZWRn
ZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVz
IjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjog
Im1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5SZW1vdGVGcmFtZUhvc3QuQWR2YW5j
ZUZvY3VzIn19LCB7ImVuZCI6IDU1ODYwLCAiYmVnaW4iOiA1NTg0MywgImVkZ2UiOiAiJS9reXRo
ZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJj
b3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3Vh
Z2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLlJlbW90ZUZyYW1lSG9zdC5S
b3V0ZU1lc3NhZ2VFdmVudCJ9fSwgeyJlbmQiOiA1NjE2NywgImJlZ2luIjogNTYxNDIsICJlZGdl
IjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2
bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3Jj
IiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5SZW1vdGVG
cmFtZUhvc3QuUHJpbnRDcm9zc1Byb2Nlc3NTdWJmcmFtZSJ9fSwgeyJlbmQiOiA1NjMxNywgImJl
Z2luIjogNTYzMTEsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJh
bmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJj
ZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJi
bGluay5tb2pvbS5SZW1vdGVGcmFtZUhvc3QuRGV0YWNoIn19LCB7ImVuZCI6IDU2NDQ1LCAiYmVn
aW4iOiA1NjQxOSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFu
Y2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNl
LmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJs
aW5rLm1vam9tLlJlbW90ZUZyYW1lSG9zdC5VcGRhdGVWaWV3cG9ydEludGVyc2VjdGlvbiJ9fSwg
eyJlbmQiOiA1NjcxOCwgImJlZ2luIjogNTY2OTEsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5l
cmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNo
cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9t
IiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5SZW1vdGVGcmFtZUhvc3QuU3luY2hyb25pemVW
aXN1YWxQcm9wZXJ0aWVzIn19LCB7ImVuZCI6IDU2ODU2LCAiYmVnaW4iOiA1Njg0OSwgImVkZ2Ui
OiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZu
YW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMi
LCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLlJlbW90ZUZy
YW1lSG9zdC5PcGVuVVJMIn19LCB7ImVuZCI6IDU3MDg0LCAiYmVnaW4iOiA1NzA3MywgImVkZ2Ui
OiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZu
YW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMi
LCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLlJlbW90ZUZy
YW1lIn19LCB7ImVuZCI6IDYyMDY2LCAiYmVnaW4iOiA2MjA0NywgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLlJlbW90ZUZyYW1lLldpbGxFbnRl
ckZ1bGxzY3JlZW4ifX0sIHsiZW5kIjogNjIyNDcsICJiZWdpbiI6IDYyMjE4LCAiZWRnZSI6ICIl
L2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUi
OiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJs
YW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uUmVtb3RlRnJhbWUu
RW5mb3JjZUluc2VjdXJlTmF2aWdhdGlvbnNTZXQifX0sIHsiZW5kIjogNjIzOTcsICJiZWdpbiI6
IDYyMzc0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9y
X2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t
L2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsu
bW9qb20uUmVtb3RlRnJhbWUuU2V0RnJhbWVPd25lclByb3BlcnRpZXMifX0sIHsiZW5kIjogNjI1
ODIsICJiZWdpbiI6IDYyNTU0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5
cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29n
bGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1
cmUiOiAiYmxpbmsubW9qb20uUmVtb3RlRnJhbWUuRW5mb3JjZUluc2VjdXJlUmVxdWVzdFBvbGlj
eSJ9fSwgeyJlbmQiOiA2Mjc0MywgImJlZ2luIjogNjI3MjQsICJlZGdlIjogIiUva3l0aGUvZWRn
ZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVz
IjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjog
Im1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5SZW1vdGVGcmFtZS5TZXRSZXBsaWNh
dGVkT3JpZ2luIn19LCB7ImVuZCI6IDYyOTcyLCAiYmVnaW4iOiA2Mjk0NywgImVkZ2UiOiAiJS9r
eXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjog
eyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFu
Z3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLlJlbW90ZUZyYW1lLlNl
dFJlcGxpY2F0ZWRJc0FkU3ViZnJhbWUifX0sIHsiZW5kIjogNjMwOTcsICJiZWdpbiI6IDYzMDgw
LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9t
aXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20u
UmVtb3RlRnJhbWUuU2V0UmVwbGljYXRlZE5hbWUifX0sIHsiZW5kIjogNjMyODQsICJiZWdpbiI6
IDYzMjU0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9y
X2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t
L2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsu
bW9qb20uUmVtb3RlRnJhbWUuRGlzcGF0Y2hMb2FkRXZlbnRGb3JGcmFtZU93bmVyIn19LCB7ImVu
ZCI6IDYzNDA2LCAiYmVnaW4iOiA2MzM4MSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRl
cyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21p
dW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAi
c2lnbmF0dXJlIjogImJsaW5rLm1vam9tLlJlbW90ZUZyYW1lLlNldE5lZWRzT2NjbHVzaW9uVHJh
Y2tpbmcifX0sIHsiZW5kIjogNjM1MTMsICJiZWdpbiI6IDYzNTA1LCAiZWRnZSI6ICIlL2t5dGhl
L2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNv
cnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uUmVtb3RlRnJhbWUuQ29sbGFw
c2UifX0sIHsiZW5kIjogNjM2MDksICJiZWdpbiI6IDYzNjA0LCAiZWRnZSI6ICIlL2t5dGhlL2Vk
Z2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1
cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6
ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uUmVtb3RlRnJhbWUuRm9jdXMifX0s
IHsiZW5kIjogNjM3NjUsICJiZWdpbiI6IDYzNzIzLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2Vu
ZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJj
aHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pv
bSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uUmVtb3RlRnJhbWUuU2V0SGFkU3RpY2t5VXNl
ckFjdGl2YXRpb25CZWZvcmVOYXZpZ2F0aW9uIn19LCB7ImVuZCI6IDYzODkxLCAiYmVnaW4iOiA2
Mzg3MiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1v
am9tLlJlbW90ZUZyYW1lLkJ1YmJsZUxvZ2ljYWxTY3JvbGwifX0sIHsiZW5kIjogNjQwOTgsICJi
ZWdpbiI6IDY0MDczLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAi
YW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3Vy
Y2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAi
YmxpbmsubW9qb20uUmVtb3RlRnJhbWUuVXBkYXRlVXNlckFjdGl2YXRpb25TdGF0ZSJ9fSwgeyJl
bmQiOiA2NDM0MiwgImJlZ2luIjogNjQzMjUsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0
ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwg
InNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5SZW1vdGVGcmFtZS5TZXRFbWJlZGRpbmdUb2tlbiJ9
fSwgeyJlbmQiOiA2NDQ4NSwgImJlZ2luIjogNjQ0NzMsICJlZGdlIjogIiUva3l0aGUvZWRnZS9n
ZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjog
ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1v
am9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5SZW1vdGVGcmFtZS5TZXRQYWdlRm9jdXMi
fX0sIHsiZW5kIjogNjQ2MTQsICJiZWdpbiI6IDY0NTkzLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2Uv
Z2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6
ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJt
b2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uUmVtb3RlRnJhbWUuUmVuZGVyRmFsbGJh
Y2tDb250ZW50In19LCB7ImVuZCI6IDY0NzY0LCAiYmVnaW4iOiA2NDcyNSwgImVkZ2UiOiAiJS9r
eXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjog
eyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFu
Z3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLlJlbW90ZUZyYW1lLlJl
bmRlckZhbGxiYWNrQ29udGVudFdpdGhSZXNvdXJjZVRpbWluZyJ9fSwgeyJlbmQiOiA2NDk3OSwg
ImJlZ2luIjogNjQ5NTMsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6
ICJibGluay5tb2pvbS5SZW1vdGVGcmFtZS5BZGRSZXNvdXJjZVRpbWluZ0Zyb21DaGlsZCJ9fSwg
eyJlbmQiOiA2NTE0MCwgImJlZ2luIjogNjUxMjEsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5l
cmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNo
cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9t
IiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5SZW1vdGVGcmFtZS5TY3JvbGxSZWN0VG9WaXNp
YmxlIn19LCB7ImVuZCI6IDY1MzIxLCAiYmVnaW4iOiA2NTMwNiwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLlJlbW90ZUZyYW1lLkRpZFN0YXJ0
TG9hZGluZyJ9fSwgeyJlbmQiOiA2NTQyMSwgImJlZ2luIjogNjU0MDcsICJlZGdlIjogIiUva3l0
aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsi
Y29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1
YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5SZW1vdGVGcmFtZS5EaWRT
dG9wTG9hZGluZyJ9fSwgeyJlbmQiOiA2NTU1OSwgImJlZ2luIjogNjU1MjYsICJlZGdlIjogIiUv
a3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6
IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxh
bmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5SZW1vdGVGcmFtZS5J
bnRyaW5zaWNTaXppbmdJbmZvT2ZDaGlsZENoYW5nZWQifX0sIHsiZW5kIjogNjU3MzYsICJiZWdp
biI6IDY1NzEyLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5j
aG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2Uu
Y29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxp
bmsubW9qb20uUmVtb3RlRnJhbWUuRGlkU2V0RnJhbWVQb2xpY3lIZWFkZXJzIn19LCB7ImVuZCI6
IDY1OTkzLCAiYmVnaW4iOiA2NTk3MywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIs
ICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2ln
bmF0dXJlIjogImJsaW5rLm1vam9tLlJlbW90ZUZyYW1lLkRpZFVwZGF0ZUZyYW1lUG9saWN5In19
LCB7ImVuZCI6IDY2MTI5LCAiYmVnaW4iOiA2NjExNywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dl
bmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAi
Y2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9q
b20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLlJlbW90ZUZyYW1lLlVwZGF0ZU9wZW5lciJ9
fSwgeyJlbmQiOiA2NjI5NCwgImJlZ2luIjogNjYyNzgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9n
ZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjog
ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1v
am9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5SZW1vdGVGcmFtZS5EZXRhY2hBbmREaXNw
b3NlIn19LCB7ImVuZCI6IDY2Mzk4LCAiYmVnaW4iOiA2NjM4MiwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLlJlbW90ZUZyYW1lLkVuYWJsZUF1
dG9SZXNpemUifX0sIHsiZW5kIjogNjY1NjAsICJiZWdpbiI6IDY2NTQzLCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5n
dWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uUmVtb3RlRnJhbWUuRGlz
YWJsZUF1dG9SZXNpemUifX0sIHsiZW5kIjogNjY2ODIsICJiZWdpbiI6IDY2NjU3LCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5h
bWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIs
ICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uUmVtb3RlRnJh
bWUuRGlkVXBkYXRlVmlzdWFsUHJvcGVydGllcyJ9fSwgeyJlbmQiOiA2NjgyMywgImJlZ2luIjog
NjY4MDksICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5t
b2pvbS5SZW1vdGVGcmFtZS5TZXRGcmFtZVNpbmtJZCJ9fSwgeyJlbmQiOiA2Njk2NiwgImJlZ2lu
IjogNjY5NTAsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGlu
ay5tb2pvbS5SZW1vdGVGcmFtZS5DaGlsZFByb2Nlc3NHb25lIn19LCB7ImVuZCI6IDY3MjI1LCAi
YmVnaW4iOiA2NzIxMSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjog
ImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjog
ImJsaW5rLm1vam9tLkxvY2FsTWFpbkZyYW1lIn19LCB7ImVuZCI6IDY5NTMxLCAiYmVnaW4iOiA2
OTUxMSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1v
am9tLkxvY2FsTWFpbkZyYW1lLkFuaW1hdGVEb3VibGVUYXBab29tIn19LCB7ImVuZCI6IDY5Njg0
LCAiYmVnaW4iOiA2OTY3MCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBl
IjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xl
c291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJl
IjogImJsaW5rLm1vam9tLkxvY2FsTWFpbkZyYW1lLlNldFNjYWxlRmFjdG9yIn19LCB7ImVuZCI6
IDY5ODQ1LCAiYmVnaW4iOiA2OTgzNiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIs
ICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2ln
bmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsTWFpbkZyYW1lLkNsb3NlUGFnZSJ9fSwgeyJlbmQi
OiA2OTk3NiwgImJlZ2luIjogNjk5NjEsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMi
LCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVt
Lmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNp
Z25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbE1haW5GcmFtZS5TZXRJbml0aWFsRm9jdXMifX0s
IHsiZW5kIjogNzAxMjMsICJiZWdpbiI6IDcwMDkzLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2Vu
ZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJj
aHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pv
bSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxNYWluRnJhbWUuRW5hYmxlUHJlZmVy
cmVkU2l6ZUNoYW5nZWRNb2RlIn19LCB7ImVuZCI6IDcwMjM4LCAiYmVnaW4iOiA3MDIxOCwgImVk
Z2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwg
InZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9z
cmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2Fs
TWFpbkZyYW1lLlpvb21Ub0ZpbmRJblBhZ2VSZWN0In19LCB7ImVuZCI6IDcwMzk4LCAiYmVnaW4i
OiA3MDM3NCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5r
Lm1vam9tLkxvY2FsTWFpbkZyYW1lLkluc3RhbGxDb29wQWNjZXNzTW9uaXRvciJ9fSwgeyJlbmQi
OiA3MDc0MywgImJlZ2luIjogNzA3MjYsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMi
LCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVt
Lmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNp
Z25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbE1haW5GcmFtZS5PblBvcnRhbEFjdGl2YXRlZCJ9
fSwgeyJlbmQiOiA3MTE1NCwgImJlZ2luIjogNzExMzIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9n
ZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjog
ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1v
am9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbE1haW5GcmFtZS5Gb3J3YXJkTWVz
c2FnZUZyb21Ib3N0In19LCB7ImVuZCI6IDcxMzkxLCAiYmVnaW4iOiA3MTM2NSwgImVkZ2UiOiAi
JS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1l
IjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAi
bGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsTWFpbkZy
YW1lLlVwZGF0ZUJyb3dzZXJDb250cm9sc1N0YXRlIn19LCB7ImVuZCI6IDcxNzA0LCAiYmVnaW4i
OiA3MTY4OSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5r
Lm1vam9tLlJlbW90ZU1haW5GcmFtZSJ9fSwgeyJlbmQiOiA3Mjk2NCwgImJlZ2luIjogNzI5Mzcs
ICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5l
cyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21p
dW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5S
ZW1vdGVNYWluRnJhbWUuVXBkYXRlVGV4dEF1dG9zaXplclBhZ2VJbmZvIn19LCB7ImVuZCI6IDcz
MzA0LCAiYmVnaW4iOiA3MzI4NiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0
eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29v
Z2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0
dXJlIjogImJsaW5rLm1vam9tLkxvY2FsTWFpbkZyYW1lSG9zdCJ9fSwgeyJlbmQiOiA3NTczNywg
ImJlZ2luIjogNzU3MTksICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6
ICJibGluay5tb2pvbS5Mb2NhbE1haW5GcmFtZUhvc3QuU2NhbGVGYWN0b3JDaGFuZ2VkIn19LCB7
ImVuZCI6IDc1ODgzLCAiYmVnaW4iOiA3NTg1NSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVy
YXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hy
b21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20i
LCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsTWFpbkZyYW1lSG9zdC5Db250ZW50c1By
ZWZlcnJlZFNpemVDaGFuZ2VkIn19LCB7ImVuZCI6IDc2MDQ2LCAiYmVnaW4iOiA3NjAxOCwgImVk
Z2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwg
InZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9z
cmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2Fs
TWFpbkZyYW1lSG9zdC5UZXh0QXV0b3NpemVyUGFnZUluZm9DaGFuZ2VkIn19LCB7ImVuZCI6IDc2
MjAwLCAiYmVnaW4iOiA3NjE5MSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0
eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29v
Z2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0
dXJlIjogImJsaW5rLm1vam9tLkxvY2FsTWFpbkZyYW1lSG9zdC5Gb2N1c1BhZ2UifX0sIHsiZW5k
IjogNzYyOTcsICJiZWdpbiI6IDc2Mjg4LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVz
IiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1
bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJz
aWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxNYWluRnJhbWVIb3N0LlRha2VGb2N1cyJ9fSwg
eyJlbmQiOiA3NjQ4MSwgImJlZ2luIjogNzY0NjYsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5l
cmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNo
cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9t
IiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbE1haW5GcmFtZUhvc3QuVXBkYXRlVGFy
Z2V0VVJMIn19LCB7ImVuZCI6IDc2NjQyLCAiYmVnaW4iOiA3NjYzMCwgImVkZ2UiOiAiJS9reXRo
ZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJj
b3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3Vh
Z2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsTWFpbkZyYW1lSG9z
dC5SZXF1ZXN0Q2xvc2UifX0sIHsiZW5kIjogNzY4MjAsICJiZWdpbiI6IDc2ODAzLCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5h
bWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIs
ICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxNYWlu
RnJhbWVIb3N0LlNob3dDcmVhdGVkV2luZG93In19LCB7ImVuZCI6IDc3MTgxLCAiYmVnaW4iOiA3
NzE2OCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1v
am9tLkxvY2FsTWFpbkZyYW1lSG9zdC5TZXRXaW5kb3dSZWN0In19LCB7ImVuZCI6IDc3Mzc1LCAi
YmVnaW4iOiA3NzM0NiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjog
ImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjog
ImJsaW5rLm1vam9tLkxvY2FsTWFpbkZyYW1lSG9zdC5EaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlQ
YWludCJ9fSwgeyJlbmQiOiA3NzUxMCwgImJlZ2luIjogNzc0ODIsICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdl
IjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbE1haW5GcmFtZUhvc3Qu
RGlkQWNjZXNzSW5pdGlhbE1haW5Eb2N1bWVudCJ9fSwgeyJlbmQiOiA3Nzc5OSwgImJlZ2luIjog
Nzc3ODAsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5t
b2pvbS5SZW1vdGVNYWluRnJhbWVIb3N0In19LCB7ImVuZCI6IDc5MzQ2LCAiYmVnaW4iOiA3OTMz
NywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZp
bmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJv
bWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9t
LlJlbW90ZU1haW5GcmFtZUhvc3QuRm9jdXNQYWdlIn19LCB7ImVuZCI6IDc5NDQ0LCAiYmVnaW4i
OiA3OTQzNSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5r
Lm1vam9tLlJlbW90ZU1haW5GcmFtZUhvc3QuVGFrZUZvY3VzIn19LCB7ImVuZCI6IDc5NjI5LCAi
YmVnaW4iOiA3OTYxNCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjog
ImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjog
ImJsaW5rLm1vam9tLlJlbW90ZU1haW5GcmFtZUhvc3QuVXBkYXRlVGFyZ2V0VVJMIn19LCB7ImVu
ZCI6IDc5Nzk3LCAiYmVnaW4iOiA3OTc4MiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRl
cyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21p
dW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAi
c2lnbmF0dXJlIjogImJsaW5rLm1vam9tLlJlbW90ZU1haW5GcmFtZUhvc3QuUm91dGVDbG9zZUV2
ZW50In19LCB7ImVuZCI6IDgwNTE0LCAiYmVnaW4iOiA4MDQ5NCwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLktlZXBBbGl2ZUhhbmRsZUZhY3Rv
cnkuSXNzdWVLZWVwQWxpdmVIYW5kbGUifX0sIHsiZW5kIjogODA5NzksICJiZWdpbiI6IDgwOTY0
LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9t
aXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20u
TG9jYWxGcmFtZUhvc3QuRW50ZXJGdWxsc2NyZWVuIn19LCB7ImVuZCI6IDgxMTYwLCAiYmVnaW4i
OiA4MTE0NiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5r
Lm1vam9tLkxvY2FsRnJhbWVIb3N0LkV4aXRGdWxsc2NyZWVuIn19LCB7ImVuZCI6IDgxMjcyLCAi
YmVnaW4iOiA4MTI1MCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjog
ImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjog
ImJsaW5rLm1vam9tLkxvY2FsRnJhbWVIb3N0LkZ1bGxzY3JlZW5TdGF0ZUNoYW5nZWQifX0sIHsi
ZW5kIjogODE0NTcsICJiZWdpbiI6IDgxNDM0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh
dGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJv
bWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIs
ICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhvc3QuUmVnaXN0ZXJQcm90b2Nv
bEhhbmRsZXIifX0sIHsiZW5kIjogODE2NDUsICJiZWdpbiI6IDgxNjIwLCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5n
dWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhvc3Qu
VW5yZWdpc3RlclByb3RvY29sSGFuZGxlciJ9fSwgeyJlbmQiOiA4MTgzMywgImJlZ2luIjogODE4
MDgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVm
aW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hy
b21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pv
bS5Mb2NhbEZyYW1lSG9zdC5EaWREaXNwbGF5SW5zZWN1cmVDb250ZW50In19LCB7ImVuZCI6IDgx
OTU3LCAiYmVnaW4iOiA4MTkyOSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0
eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29v
Z2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0
dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVIb3N0LkRpZENvbnRhaW5JbnNlY3VyZUZvcm1B
Y3Rpb24ifX0sIHsiZW5kIjogODIwODEsICJiZWdpbiI6IDgyMDUzLCAiZWRnZSI6ICIlL2t5dGhl
L2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNv
cnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhvc3QuTWFp
bkRvY3VtZW50RWxlbWVudEF2YWlsYWJsZSJ9fSwgeyJlbmQiOiA4MjIyOSwgImJlZ2luIjogODIy
MDQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVm
aW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hy
b21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pv
bS5Mb2NhbEZyYW1lSG9zdC5TZXROZWVkc09jY2x1c2lvblRyYWNraW5nIn19LCB7ImVuZCI6IDgy
Mzc4LCAiYmVnaW4iOiA4MjM0NywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0
eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29v
Z2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0
dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVIb3N0LlNldFZpcnR1YWxLZXlib2FyZE92ZXJs
YXlQb2xpY3kifX0sIHsiZW5kIjogODI1MDQsICJiZWdpbiI6IDgyNDg3LCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5n
dWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhvc3Qu
VmlzaWJpbGl0eUNoYW5nZWQifX0sIHsiZW5kIjogODI2NTksICJiZWdpbiI6IDgyNjQwLCAiZWRn
ZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAi
dm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3Ny
YyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxG
cmFtZUhvc3QuRGlkQ2hhbmdlVGhlbWVDb2xvciJ9fSwgeyJlbmQiOiA4MjgxMiwgImJlZ2luIjog
ODI3ODgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5t
b2pvbS5Mb2NhbEZyYW1lSG9zdC5EaWRDaGFuZ2VCYWNrZ3JvdW5kQ29sb3IifX0sIHsiZW5kIjog
ODI5NjUsICJiZWdpbiI6IDgyOTQ1LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwg
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWdu
YXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhvc3QuRGlkRmFpbExvYWRXaXRoRXJyb3Ii
fX0sIHsiZW5kIjogODMxMDMsICJiZWdpbiI6IDgzMDkwLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2Uv
Z2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6
ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJt
b2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhvc3QuRGlkRm9jdXNG
cmFtZSJ9fSwgeyJlbmQiOiA4MzE5NSwgImJlZ2luIjogODMxODMsICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdl
IjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lSG9zdC5EaWRD
YWxsRm9jdXMifX0sIHsiZW5kIjogODMzMTksICJiZWdpbiI6IDgzMjkxLCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5n
dWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhvc3Qu
RW5mb3JjZUluc2VjdXJlUmVxdWVzdFBvbGljeSJ9fSwgeyJlbmQiOiA4MzUwMywgImJlZ2luIjog
ODM0NzQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5t
b2pvbS5Mb2NhbEZyYW1lSG9zdC5FbmZvcmNlSW5zZWN1cmVOYXZpZ2F0aW9uc1NldCJ9fSwgeyJl
bmQiOiA4MzY2NywgImJlZ2luIjogODM2MzUsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0
ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwg
InNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lSG9zdC5TdWRkZW5UZXJtaW5hdGlv
bkRpc2FibGVyQ2hhbmdlZCJ9fSwgeyJlbmQiOiA4MzkwNywgImJlZ2luIjogODM4NjEsICJlZGdl
IjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2
bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3Jj
IiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZy
YW1lSG9zdC5IYWRTdGlja3lVc2VyQWN0aXZhdGlvbkJlZm9yZU5hdmlnYXRpb25DaGFuZ2VkIn19
LCB7ImVuZCI6IDg0MDU1LCAiYmVnaW4iOiA4NDAyMywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dl
bmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAi
Y2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9q
b20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVIb3N0LlNjcm9sbFJlY3RU
b1Zpc2libGVJblBhcmVudEZyYW1lIn19LCB7ImVuZCI6IDg0Mjc2LCAiYmVnaW4iOiA4NDI0NCwg
ImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVz
IiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1
bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxv
Y2FsRnJhbWVIb3N0LkJ1YmJsZUxvZ2ljYWxTY3JvbGxJblBhcmVudEZyYW1lIn19LCB7ImVuZCI6
IDg0NDY1LCAiYmVnaW4iOiA4NDQ0NywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIs
ICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2ln
bmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVIb3N0LkRpZEJsb2NrTmF2aWdhdGlvbiJ9
fSwgeyJlbmQiOiA4NDY5OCwgImJlZ2luIjogODQ2NzcsICJlZGdlIjogIiUva3l0aGUvZWRnZS9n
ZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjog
ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1v
am9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lSG9zdC5EaWRDaGFuZ2VM
b2FkUHJvZ3Jlc3MifX0sIHsiZW5kIjogODQ4MTIsICJiZWdpbiI6IDg0Nzk5LCAiZWRnZSI6ICIl
L2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUi
OiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJs
YW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhv
c3QuRGlkRmluaXNoTG9hZCJ9fSwgeyJlbmQiOiA4NDkzOCwgImJlZ2luIjogODQ5MjYsICJlZGdl
IjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2
bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3Jj
IiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZy
YW1lSG9zdC5EaXNwYXRjaExvYWQifX0sIHsiZW5kIjogODUwNDAsICJiZWdpbiI6IDg1MDIzLCAi
ZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMi
LCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVt
L3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9j
YWxGcmFtZUhvc3QuR29Ub0VudHJ5QXRPZmZzZXQifX0sIHsiZW5kIjogODUxOTcsICJiZWdpbiI6
IDg1MTcxLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9y
X2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t
L2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsu
bW9qb20uTG9jYWxGcmFtZUhvc3QuTmF2aWdhdGVUb05hdmlnYXRpb25BcGlLZXkifX0sIHsiZW5k
IjogODUzMzIsICJiZWdpbiI6IDg1MzIxLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVz
IiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1
bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJz
aWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhvc3QuVXBkYXRlVGl0bGUifX0sIHsi
ZW5kIjogODU1MjEsICJiZWdpbiI6IDg1NDk2LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh
dGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJv
bWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIs
ICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhvc3QuVXBkYXRlVXNlckFjdGl2
YXRpb25TdGF0ZSJ9fSwgeyJlbmQiOiA4NTc5MSwgImJlZ2luIjogODU3NTYsICJlZGdlIjogIiUv
a3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6
IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxh
bmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lSG9z
dC5IYW5kbGVBY2Nlc3NpYmlsaXR5RmluZEluUGFnZVJlc3VsdCJ9fSwgeyJlbmQiOiA4NTk3Mywg
ImJlZ2luIjogODU5MzMsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6
ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lSG9zdC5IYW5kbGVBY2Nlc3NpYmlsaXR5RmluZEluUGFn
ZVRlcm1pbmF0aW9uIn19LCB7ImVuZCI6IDg2MDg3LCAiYmVnaW4iOiA4NjA2NCwgImVkZ2UiOiAi
JS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1l
IjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAi
bGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVI
b3N0LkRvY3VtZW50T25Mb2FkQ29tcGxldGVkIn19LCB7ImVuZCI6IDg2MjEzLCAiYmVnaW4iOiA4
NjE4NCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1v
am9tLkxvY2FsRnJhbWVIb3N0LkZvcndhcmRSZXNvdXJjZVRpbWluZ1RvUGFyZW50In19LCB7ImVu
ZCI6IDg2Mzk2LCAiYmVnaW4iOiA4NjM2NCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRl
cyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21p
dW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAi
c2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVIb3N0LkRpZERpc3BhdGNoRE9NQ29u
dGVudExvYWRlZEV2ZW50In19LCB7ImVuZCI6IDg2NTAyLCAiYmVnaW4iOiA4NjQ4MywgImVkZ2Ui
OiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZu
YW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMi
LCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJh
bWVIb3N0LlJ1bk1vZGFsQWxlcnREaWFsb2cifX0sIHsiZW5kIjogODY2ODgsICJiZWdpbiI6IDg2
NjY5LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9q
b20uTG9jYWxGcmFtZUhvc3QuUnVuTW9kYWxBbGVydERpYWxvZyJ9fSwgeyJlbmQiOiA4NjkxNiwg
ImJlZ2luIjogODY4OTUsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6
ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lSG9zdC5SdW5Nb2RhbENvbmZpcm1EaWFsb2cifX0sIHsi
ZW5kIjogODcxMjUsICJiZWdpbiI6IDg3MTA0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh
dGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJv
bWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIs
ICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhvc3QuUnVuTW9kYWxDb25maXJt
RGlhbG9nIn19LCB7ImVuZCI6IDg3MzUzLCAiYmVnaW4iOiA4NzMzMywgImVkZ2UiOiAiJS9reXRo
ZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJj
b3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3Vh
Z2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVIb3N0LlJ1
bk1vZGFsUHJvbXB0RGlhbG9nIn19LCB7ImVuZCI6IDg3NjIzLCAiYmVnaW4iOiA4NzYwMywgImVk
Z2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwg
InZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9z
cmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2Fs
RnJhbWVIb3N0LlJ1bk1vZGFsUHJvbXB0RGlhbG9nIn19LCB7ImVuZCI6IDg3ODkwLCAiYmVnaW4i
OiA4Nzg2OCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5r
Lm1vam9tLkxvY2FsRnJhbWVIb3N0LlJ1bkJlZm9yZVVubG9hZENvbmZpcm0ifX0sIHsiZW5kIjog
ODgwMzUsICJiZWdpbiI6IDg4MDEzLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwg
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWdu
YXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhvc3QuUnVuQmVmb3JlVW5sb2FkQ29uZmly
bSJ9fSwgeyJlbmQiOiA4ODE5MCwgImJlZ2luIjogODgxNzQsICJlZGdlIjogIiUva3l0aGUvZWRn
ZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVz
IjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjog
Im1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lSG9zdC5VcGRhdGVG
YXZpY29uVVJMIn19LCB7ImVuZCI6IDg4MzQyLCAiYmVnaW4iOiA4ODMzMSwgImVkZ2UiOiAiJS9r
eXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjog
eyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFu
Z3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVIb3N0
LkRvd25sb2FkVVJMIn19LCB7ImVuZCI6IDg4NDc5LCAiYmVnaW4iOiA4ODQ1OCwgImVkZ2UiOiAi
JS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1l
IjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAi
bGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVI
b3N0LkZvY3VzZWRFbGVtZW50Q2hhbmdlZCJ9fSwgeyJlbmQiOiA4ODY5OSwgImJlZ2luIjogODg2
NzksICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVm
aW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hy
b21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pv
bS5Mb2NhbEZyYW1lSG9zdC5UZXh0U2VsZWN0aW9uQ2hhbmdlZCJ9fSwgeyJlbmQiOiA4ODg2Miwg
ImJlZ2luIjogODg4NDksICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6
ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lSG9zdC5TaG93UG9wdXBNZW51In19LCB7ImVuZCI6IDg5
MjQ0LCAiYmVnaW4iOiA4OTIyNCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0
eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29v
Z2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0
dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVIb3N0LkNyZWF0ZU5ld1BvcHVwV2lkZ2V0In19
LCB7ImVuZCI6IDg5NTkxLCAiYmVnaW4iOiA4OTU3NiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dl
bmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAi
Y2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9q
b20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVIb3N0LlNob3dDb250ZXh0
TWVudSJ9fSwgeyJlbmQiOiA4OTg1NCwgImJlZ2luIjogODk4MjQsICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdl
IjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lSG9zdC5EaWRM
b2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUifX0sIHsiZW5kIjogOTAxNTcsICJiZWdpbiI6IDkw
MTI4LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9q
b20uTG9jYWxGcmFtZUhvc3QuRGlkQ2hhbmdlRnJhbWVPd25lclByb3BlcnRpZXMifX0sIHsiZW5k
IjogOTAzNzAsICJiZWdpbiI6IDkwMzU1LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVz
IiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1
bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJz
aWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhvc3QuRGlkQ2hhbmdlT3BlbmVyIn19
LCB7ImVuZCI6IDkwNTM4LCAiYmVnaW4iOiA5MDUxOCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dl
bmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAi
Y2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9q
b20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVIb3N0LkRpZENoYW5nZUZy
YW1lUG9saWN5In19LCB7ImVuZCI6IDkwNzQyLCAiYmVnaW4iOiA5MDcxNywgImVkZ2UiOiAiJS9r
eXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjog
eyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFu
Z3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWVIb3N0
LkRpZENoYW5nZUlmcmFtZUF0dHJpYnV0ZXMifX0sIHsiZW5kIjogOTEwMDAsICJiZWdpbiI6IDkw
OTcxLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9q
b20uTG9jYWxGcmFtZUhvc3QuQ2FwdHVyZVBhaW50UHJldmlld09mU3ViZnJhbWUifX0sIHsiZW5k
IjogOTExNjYsICJiZWdpbiI6IDkxMTUwLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVz
IiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1
bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJz
aWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhvc3QuU2V0Q2xvc2VMaXN0ZW5lciJ9
fSwgeyJlbmQiOiA5MTMxNCwgImJlZ2luIjogOTEzMDgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9n
ZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjog
ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1v
am9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lSG9zdC5EZXRhY2gifX0s
IHsiZW5kIjogOTE0MzIsICJiZWdpbiI6IDkxNDA3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2Vu
ZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJj
aHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pv
bSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhvc3QuR2V0S2VlcEFsaXZl
SGFuZGxlRmFjdG9yeSJ9fSwgeyJlbmQiOiA5MTU5OSwgImJlZ2luIjogOTE1NzcsICJlZGdlIjog
IiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFt
ZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwg
Imxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1l
SG9zdC5EaWRBZGRNZXNzYWdlVG9Db25zb2xlIn19LCB7ImVuZCI6IDkxODc1LCAiYmVnaW4iOiA5
MTg1OSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1v
am9tLkxvY2FsRnJhbWVIb3N0LkZyYW1lU2l6ZUNoYW5nZWQifX0sIHsiZW5kIjogOTIwMjQsICJi
ZWdpbiI6IDkxOTk1LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAi
YW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3Vy
Y2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAi
YmxpbmsubW9qb20uTG9jYWxGcmFtZUhvc3QuRGlkVXBkYXRlUHJlZmVycmVkQ29sb3JTY2hlbWUi
fX0sIHsiZW5kIjogOTIxOTYsICJiZWdpbiI6IDkyMTc3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2Uv
Z2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6
ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJt
b2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZUhvc3QuRGlkSW5mZXJD
b2xvclNjaGVtZSJ9fSwgeyJlbmQiOiA5MjM1MCwgImJlZ2luIjogOTIzMzUsICJlZGdlIjogIiUv
a3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6
IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxh
bmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lSG9z
dC5EaWRDaGFuZ2VTcmNEb2MifX0sIHsiZW5kIjogOTI1NDksICJiZWdpbiI6IDkyNTIyLCAiZWRn
ZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAi
dm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3Ny
YyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxG
cmFtZUhvc3QuUmVjZWl2ZWREZWxlZ2F0ZWRDYXBhYmlsaXR5In19LCB7ImVuZCI6IDkzMDE5LCAi
YmVnaW4iOiA5Mjk5MiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjog
ImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjog
ImJsaW5rLm1vam9tLkxvY2FsRnJhbWUuR2V0VGV4dFN1cnJvdW5kaW5nU2VsZWN0aW9uIn19LCB7
ImVuZCI6IDkzMTkyLCAiYmVnaW4iOiA5MzE3MCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVy
YXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hy
b21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20i
LCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWUuU2VuZEludGVydmVudGlvblJl
cG9ydCJ9fSwgeyJlbmQiOiA5MzM1MSwgImJlZ2luIjogOTMzMjgsICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdl
IjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lLlNldEZyYW1l
T3duZXJQcm9wZXJ0aWVzIn19LCB7ImVuZCI6IDkzNTEyLCAiYmVnaW4iOiA5MzQ5MiwgImVkZ2Ui
OiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZu
YW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMi
LCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJh
bWUuTm90aWZ5VXNlckFjdGl2YXRpb24ifX0sIHsiZW5kIjogOTM3MTEsICJiZWdpbiI6IDkzNjc5
LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9t
aXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20u
TG9jYWxGcmFtZS5Ob3RpZnlWaXJ0dWFsS2V5Ym9hcmRPdmVybGF5UmVjdCJ9fSwgeyJlbmQiOiA5
Mzg0NSwgImJlZ2luIjogOTM4MjYsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAi
dHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdv
b2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25h
dHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lLkFkZE1lc3NhZ2VUb0NvbnNvbGUifX0sIHsi
ZW5kIjogOTQwNDQsICJiZWdpbiI6IDk0MDI3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh
dGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJv
bWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIs
ICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZS5BZGRJbnNwZWN0b3JJc3N1ZSJ9
fSwgeyJlbmQiOiA5NDE5MSwgImJlZ2luIjogOTQxNzQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9n
ZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjog
ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1v
am9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lLlN3YXBJbkltbWVkaWF0
ZWx5In19LCB7ImVuZCI6IDk0MjgzLCAiYmVnaW4iOiA5NDI2OSwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWUuQ2hlY2tDb21w
bGV0ZWQifX0sIHsiZW5kIjogOTQzNjksICJiZWdpbiI6IDk0MzU4LCAiZWRnZSI6ICIlL2t5dGhl
L2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNv
cnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZS5TdG9wTG9h
ZGluZyJ9fSwgeyJlbmQiOiA5NDQ0OSwgImJlZ2luIjogOTQ0NDEsICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdl
IjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lLkNvbGxhcHNl
In19LCB7ImVuZCI6IDk0NTY3LCAiYmVnaW4iOiA5NDU0NywgImVkZ2UiOiAiJS9reXRoZS9lZGdl
L2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMi
OiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAi
bW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWUuRW5hYmxlVmlld1Nv
dXJjZU1vZGUifX0sIHsiZW5kIjogOTQ2NDEsICJiZWdpbiI6IDk0NjM2LCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5n
dWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZS5Gb2N1
cyJ9fSwgeyJlbmQiOiA5NDc0MywgImJlZ2luIjogOTQ3MjQsICJlZGdlIjogIiUva3l0aGUvZWRn
ZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVz
IjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjog
Im1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lLkNsZWFyRm9jdXNl
ZEVsZW1lbnQifX0sIHsiZW5kIjogOTQ4NjksICJiZWdpbiI6IDk0ODM4LCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5n
dWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZS5HZXRS
ZXNvdXJjZVNuYXBzaG90Rm9yV2ViQnVuZGxlIn19LCB7ImVuZCI6IDk1MDQ3LCAiYmVnaW4iOiA5
NTAzNiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1v
am9tLkxvY2FsRnJhbWUuQ29weUltYWdlQXQifX0sIHsiZW5kIjogOTUxNjUsICJiZWdpbiI6IDk1
MTU0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9q
b20uTG9jYWxGcmFtZS5TYXZlSW1hZ2VBdCJ9fSwgeyJlbmQiOiA5NTMwNywgImJlZ2luIjogOTUy
ODQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVm
aW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hy
b21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pv
bS5Mb2NhbEZyYW1lLlJlcG9ydEJsaW5rRmVhdHVyZVVzYWdlIn19LCB7ImVuZCI6IDk1NDc1LCAi
YmVnaW4iOiA5NTQ1NCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjog
ImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjog
ImJsaW5rLm1vam9tLkxvY2FsRnJhbWUuUmVuZGVyRmFsbGJhY2tDb250ZW50In19LCB7ImVuZCI6
IDk1NjE3LCAiYmVnaW4iOiA5NTU3OCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIs
ICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2ln
bmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWUuUmVuZGVyRmFsbGJhY2tDb250ZW50V2l0
aFJlc291cmNlVGltaW5nIn19LCB7ImVuZCI6IDk1Nzk2LCAiYmVnaW4iOiA5NTc4NCwgImVkZ2Ui
OiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZu
YW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMi
LCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJh
bWUuQmVmb3JlVW5sb2FkIn19LCB7ImVuZCI6IDk1OTQzLCAiYmVnaW4iOiA5NTkyNCwgImVkZ2Ui
OiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZu
YW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMi
LCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJh
bWUuTWVkaWFQbGF5ZXJBY3Rpb25BdCJ9fSwgeyJlbmQiOiA5NjExNSwgImJlZ2luIjogOTYxMDEs
ICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5l
cyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21p
dW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5M
b2NhbEZyYW1lLlBsdWdpbkFjdGlvbkF0In19LCB7ImVuZCI6IDk2MjcwLCAiYmVnaW4iOiA5NjI1
MSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZp
bmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJv
bWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9t
LkxvY2FsRnJhbWUuQWR2YW5jZUZvY3VzSW5GcmFtZSJ9fSwgeyJlbmQiOiA5NjQ4MiwgImJlZ2lu
IjogOTY0NjQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGlu
ay5tb2pvbS5Mb2NhbEZyYW1lLkFkdmFuY2VGb2N1c0ZvcklNRSJ9fSwgeyJlbmQiOiA5NjY2MSwg
ImJlZ2luIjogOTY2MjUsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6
ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lLlJlcG9ydENvbnRlbnRTZWN1cml0eVBvbGljeVZpb2xh
dGlvbiJ9fSwgeyJlbmQiOiA5NjgxNSwgImJlZ2luIjogOTY3OTUsICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdl
IjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lLkRpZFVwZGF0
ZUZyYW1lUG9saWN5In19LCB7ImVuZCI6IDk2OTUxLCAiYmVnaW4iOiA5NjkzNSwgImVkZ2UiOiAi
JS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1l
IjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAi
bGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWUu
UG9zdE1lc3NhZ2VFdmVudCJ9fSwgeyJlbmQiOiA5NzI1NywgImJlZ2luIjogOTcyMjcsICJlZGdl
IjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2
bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3Jj
IiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZy
YW1lLkphdmFTY3JpcHRNZXRob2RFeGVjdXRlUmVxdWVzdCJ9fSwgeyJlbmQiOiA5NzUzNCwgImJl
Z2luIjogOTc1MTAsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJh
bmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJj
ZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJi
bGluay5tb2pvbS5Mb2NhbEZyYW1lLkphdmFTY3JpcHRFeGVjdXRlUmVxdWVzdCJ9fSwgeyJlbmQi
OiA5Nzc1NSwgImJlZ2luIjogOTc3MjMsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMi
LCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVt
Lmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNp
Z25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lLkphdmFTY3JpcHRFeGVjdXRlUmVxdWVz
dEZvclRlc3RzIn19LCB7ImVuZCI6IDk4MDQzLCAiYmVnaW4iOiA5ODAwNCwgImVkZ2UiOiAiJS9r
eXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjog
eyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFu
Z3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWUuSmF2
YVNjcmlwdEV4ZWN1dGVSZXF1ZXN0SW5Jc29sYXRlZFdvcmxkIn19LCB7ImVuZCI6IDk4Mjc1LCAi
YmVnaW4iOiA5ODI1NCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjog
ImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjog
ImJsaW5rLm1vam9tLkxvY2FsRnJhbWUuQmluZFJlcG9ydGluZ09ic2VydmVyIn19LCB7ImVuZCI6
IDk4NDM3LCAiYmVnaW4iOiA5ODQyNSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIs
ICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2ln
bmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWUuVXBkYXRlT3BlbmVyIn19LCB7ImVuZCI6
IDk4NjA4LCAiYmVnaW4iOiA5ODU4NSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIs
ICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2ln
bmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWUuR2V0U2F2YWJsZVJlc291cmNlTGlua3Mi
fX0sIHsiZW5kIjogOTg3NDYsICJiZWdpbiI6IDk4NzI5LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2Uv
Z2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6
ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJt
b2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxGcmFtZS5NaXhlZENvbnRlbnRG
b3VuZCJ9fSwgeyJlbmQiOiA5OTEyMSwgImJlZ2luIjogOTkxMDQsICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdl
IjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lLkJpbmREZXZU
b29sc0FnZW50In19LCB7ImVuZCI6IDk5Mzg4LCAiYmVnaW4iOiA5OTM2OCwgImVkZ2UiOiAiJS9r
eXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjog
eyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFu
Z3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsRnJhbWUuRXh0
cmFjdFNtYXJ0Q2xpcERhdGEifX0sIHsiZW5kIjogOTk1NTgsICJiZWdpbiI6IDk5NTM2LCAiZWRn
ZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAi
dm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3Ny
YyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxG
cmFtZS5IYW5kbGVSZW5kZXJlckRlYnVnVVJMIn19LCB7ImVuZCI6IDk5Njk2LCAiYmVnaW4iOiA5
OTY3MSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1v
am9tLkxvY2FsRnJhbWUuR2V0Q2Fub25pY2FsVXJsRm9yU2hhcmluZyJ9fSwgeyJlbmQiOiA5OTg0
MiwgImJlZ2luIjogOTk4MjIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlw
ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVy
ZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lLkdldE9wZW5HcmFwaE1ldGFkYXRhIn19LCB7ImVu
ZCI6IDEwMDAyMywgImJlZ2luIjogOTk5ODMsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0
ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwg
InNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbEZyYW1lLlNldE5hdmlnYXRpb25BcGlIaXN0
b3J5RW50cmllc0ZvclJlc3RvcmUifX0sIHsiZW5kIjogMTAwNTU4LCAiYmVnaW4iOiAxMDA1Mzgs
ICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5l
cyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21p
dW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5I
aWdoUHJpb3JpdHlMb2NhbEZyYW1lLkRpc3BhdGNoQmVmb3JlVW5sb2FkIn19LCB7ImVuZCI6IDEw
MTA1OCwgImJlZ2luIjogMTAxMDI2LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwg
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWdu
YXR1cmUiOiAiYmxpbmsubW9qb20uUmVtb3RlRnJhbWVIb3N0LlNldEluaGVyaXRlZEVmZmVjdGl2
ZVRvdWNoQWN0aW9uIn19LCB7ImVuZCI6IDEwMTIxMywgImJlZ2luIjogMTAxMTg1LCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5h
bWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIs
ICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uUmVtb3RlRnJh
bWVIb3N0LlVwZGF0ZVJlbmRlclRocm90dGxpbmdTdGF0dXMifX0sIHsiZW5kIjogMTAxMzc4LCAi
YmVnaW4iOiAxMDEzNjEsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6
ICJibGluay5tb2pvbS5SZW1vdGVGcmFtZUhvc3QuVmlzaWJpbGl0eUNoYW5nZWQifX0sIHsiZW5k
IjogMTAxNTIyLCAiYmVnaW4iOiAxMDE1MDksICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0
ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwg
InNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5SZW1vdGVGcmFtZUhvc3QuRGlkRm9jdXNGcmFtZSJ9
fSwgeyJlbmQiOiAxMDE2MTksICJiZWdpbiI6IDEwMTYwNSwgImVkZ2UiOiAiJS9reXRoZS9lZGdl
L2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMi
OiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAi
bW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLlJlbW90ZUZyYW1lSG9zdC5DaGVja0Nv
bXBsZXRlZCJ9fSwgeyJlbmQiOiAxMDE3NzAsICJiZWdpbiI6IDEwMTcyOSwgImVkZ2UiOiAiJS9r
eXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjog
eyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFu
Z3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLlJlbW90ZUZyYW1lSG9z
dC5DYXB0dXJlUGFpbnRQcmV2aWV3T2ZDcm9zc1Byb2Nlc3NTdWJmcmFtZSJ9fSwgeyJlbmQiOiAx
MDE5MjUsICJiZWdpbiI6IDEwMTkxNSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIs
ICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2ln
bmF0dXJlIjogImJsaW5rLm1vam9tLlJlbW90ZUZyYW1lSG9zdC5TZXRJc0luZXJ0In19LCB7ImVu
ZCI6IDEwMjAzNCwgImJlZ2luIjogMTAyMDE5LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh
dGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJv
bWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIs
ICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uUmVtb3RlRnJhbWVIb3N0LkRpZENoYW5nZU9wZW5l
ciJ9fSwgeyJlbmQiOiAxMDIxODcsICJiZWdpbiI6IDEwMjE3NSwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLlJlbW90ZUZyYW1lSG9zdC5BZHZh
bmNlRm9jdXMifX0sIHsiZW5kIjogMTAyMzg1LCAiYmVnaW4iOiAxMDIzNjgsICJlZGdlIjogIiUv
a3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6
IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxh
bmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5SZW1vdGVGcmFtZUhv
c3QuUm91dGVNZXNzYWdlRXZlbnQifX0sIHsiZW5kIjogMTAyNjg1LCAiYmVnaW4iOiAxMDI2NjAs
ICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5l
cyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21p
dW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5S
ZW1vdGVGcmFtZUhvc3QuUHJpbnRDcm9zc1Byb2Nlc3NTdWJmcmFtZSJ9fSwgeyJlbmQiOiAxMDI4
MjgsICJiZWdpbiI6IDEwMjgyMiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0
eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29v
Z2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0
dXJlIjogImJsaW5rLm1vam9tLlJlbW90ZUZyYW1lSG9zdC5EZXRhY2gifX0sIHsiZW5kIjogMTAy
OTQ5LCAiYmVnaW4iOiAxMDI5MjMsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAi
dHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdv
b2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25h
dHVyZSI6ICJibGluay5tb2pvbS5SZW1vdGVGcmFtZUhvc3QuVXBkYXRlVmlld3BvcnRJbnRlcnNl
Y3Rpb24ifX0sIHsiZW5kIjogMTAzMjE1LCAiYmVnaW4iOiAxMDMxODgsICJlZGdlIjogIiUva3l0
aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsi
Y29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1
YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5SZW1vdGVGcmFtZUhvc3Qu
U3luY2hyb25pemVWaXN1YWxQcm9wZXJ0aWVzIn19LCB7ImVuZCI6IDEwMzM0NiwgImJlZ2luIjog
MTAzMzM5LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9y
X2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t
L2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsu
bW9qb20uUmVtb3RlRnJhbWVIb3N0Lk9wZW5VUkwifX0sIHsiZW5kIjogMTAzNzY2LCAiYmVnaW4i
OiAxMDM3NDcsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGlu
ay5tb2pvbS5SZW1vdGVGcmFtZS5XaWxsRW50ZXJGdWxsc2NyZWVuIn19LCB7ImVuZCI6IDEwMzk0
MCwgImJlZ2luIjogMTAzOTExLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5
cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29n
bGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1
cmUiOiAiYmxpbmsubW9qb20uUmVtb3RlRnJhbWUuRW5mb3JjZUluc2VjdXJlTmF2aWdhdGlvbnNT
ZXQifX0sIHsiZW5kIjogMTA0MDgzLCAiYmVnaW4iOiAxMDQwNjAsICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdl
IjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5SZW1vdGVGcmFtZS5TZXRGcmFt
ZU93bmVyUHJvcGVydGllcyJ9fSwgeyJlbmQiOiAxMDQyNjEsICJiZWdpbiI6IDEwNDIzMywgImVk
Z2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwg
InZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9z
cmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLlJlbW90
ZUZyYW1lLkVuZm9yY2VJbnNlY3VyZVJlcXVlc3RQb2xpY3kifX0sIHsiZW5kIjogMTA0NDE1LCAi
YmVnaW4iOiAxMDQzOTYsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6
ICJibGluay5tb2pvbS5SZW1vdGVGcmFtZS5TZXRSZXBsaWNhdGVkT3JpZ2luIn19LCB7ImVuZCI6
IDEwNDYzNywgImJlZ2luIjogMTA0NjEyLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVz
IiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1
bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJz
aWduYXR1cmUiOiAiYmxpbmsubW9qb20uUmVtb3RlRnJhbWUuU2V0UmVwbGljYXRlZElzQWRTdWJm
cmFtZSJ9fSwgeyJlbmQiOiAxMDQ3NTUsICJiZWdpbiI6IDEwNDczOCwgImVkZ2UiOiAiJS9reXRo
ZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJj
b3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3Vh
Z2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLlJlbW90ZUZyYW1lLlNldFJl
cGxpY2F0ZWROYW1lIn19LCB7ImVuZCI6IDEwNDkzNSwgImJlZ2luIjogMTA0OTA1LCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5h
bWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIs
ICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uUmVtb3RlRnJh
bWUuRGlzcGF0Y2hMb2FkRXZlbnRGb3JGcmFtZU93bmVyIn19LCB7ImVuZCI6IDEwNTA1MCwgImJl
Z2luIjogMTA1MDI1LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAi
YW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3Vy
Y2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAi
YmxpbmsubW9qb20uUmVtb3RlRnJhbWUuU2V0TmVlZHNPY2NsdXNpb25UcmFja2luZyJ9fSwgeyJl
bmQiOiAxMDUxNTAsICJiZWdpbiI6IDEwNTE0MiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVy
YXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hy
b21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20i
LCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLlJlbW90ZUZyYW1lLkNvbGxhcHNlIn19LCB7ImVu
ZCI6IDEwNTIzOSwgImJlZ2luIjogMTA1MjM0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh
dGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJv
bWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIs
ICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uUmVtb3RlRnJhbWUuRm9jdXMifX0sIHsiZW5kIjog
MTA1Mzg4LCAiYmVnaW4iOiAxMDUzNDYsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMi
LCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVt
Lmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNp
Z25hdHVyZSI6ICJibGluay5tb2pvbS5SZW1vdGVGcmFtZS5TZXRIYWRTdGlja3lVc2VyQWN0aXZh
dGlvbkJlZm9yZU5hdmlnYXRpb24ifX0sIHsiZW5kIjogMTA1NTA3LCAiYmVnaW4iOiAxMDU0ODgs
ICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5l
cyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21p
dW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5S
ZW1vdGVGcmFtZS5CdWJibGVMb2dpY2FsU2Nyb2xsIn19LCB7ImVuZCI6IDEwNTcwNywgImJlZ2lu
IjogMTA1NjgyLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5j
aG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2Uu
Y29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxp
bmsubW9qb20uUmVtb3RlRnJhbWUuVXBkYXRlVXNlckFjdGl2YXRpb25TdGF0ZSJ9fSwgeyJlbmQi
OiAxMDU5NDQsICJiZWdpbiI6IDEwNTkyNywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRl
cyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21p
dW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAi
c2lnbmF0dXJlIjogImJsaW5rLm1vam9tLlJlbW90ZUZyYW1lLlNldEVtYmVkZGluZ1Rva2VuIn19
LCB7ImVuZCI6IDEwNjA4MCwgImJlZ2luIjogMTA2MDY4LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2Uv
Z2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6
ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJt
b2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uUmVtb3RlRnJhbWUuU2V0UGFnZUZvY3Vz
In19LCB7ImVuZCI6IDEwNjIwMiwgImJlZ2luIjogMTA2MTgxLCAiZWRnZSI6ICIlL2t5dGhlL2Vk
Z2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1
cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6
ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uUmVtb3RlRnJhbWUuUmVuZGVyRmFs
bGJhY2tDb250ZW50In19LCB7ImVuZCI6IDEwNjM0NSwgImJlZ2luIjogMTA2MzA2LCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5h
bWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIs
ICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uUmVtb3RlRnJh
bWUuUmVuZGVyRmFsbGJhY2tDb250ZW50V2l0aFJlc291cmNlVGltaW5nIn19LCB7ImVuZCI6IDEw
NjU1MywgImJlZ2luIjogMTA2NTI3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwg
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWdu
YXR1cmUiOiAiYmxpbmsubW9qb20uUmVtb3RlRnJhbWUuQWRkUmVzb3VyY2VUaW1pbmdGcm9tQ2hp
bGQifX0sIHsiZW5kIjogMTA2NzA3LCAiYmVnaW4iOiAxMDY2ODgsICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdl
IjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5SZW1vdGVGcmFtZS5TY3JvbGxS
ZWN0VG9WaXNpYmxlIn19LCB7ImVuZCI6IDEwNjg4MSwgImJlZ2luIjogMTA2ODY2LCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5h
bWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIs
ICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uUmVtb3RlRnJh
bWUuRGlkU3RhcnRMb2FkaW5nIn19LCB7ImVuZCI6IDEwNjk3NCwgImJlZ2luIjogMTA2OTYwLCAi
ZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMi
LCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVt
L3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uUmVt
b3RlRnJhbWUuRGlkU3RvcExvYWRpbmcifX0sIHsiZW5kIjogMTA3MTA1LCAiYmVnaW4iOiAxMDcw
NzIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVm
aW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hy
b21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pv
bS5SZW1vdGVGcmFtZS5JbnRyaW5zaWNTaXppbmdJbmZvT2ZDaGlsZENoYW5nZWQifX0sIHsiZW5k
IjogMTA3Mjc1LCAiYmVnaW4iOiAxMDcyNTEsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0
ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwg
InNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5SZW1vdGVGcmFtZS5EaWRTZXRGcmFtZVBvbGljeUhl
YWRlcnMifX0sIHsiZW5kIjogMTA3NTI1LCAiYmVnaW4iOiAxMDc1MDUsICJlZGdlIjogIiUva3l0
aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsi
Y29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1
YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5SZW1vdGVGcmFtZS5EaWRV
cGRhdGVGcmFtZVBvbGljeSJ9fSwgeyJlbmQiOiAxMDc2NTQsICJiZWdpbiI6IDEwNzY0MiwgImVk
Z2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwg
InZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9z
cmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLlJlbW90
ZUZyYW1lLlVwZGF0ZU9wZW5lciJ9fSwgeyJlbmQiOiAxMDc4MTIsICJiZWdpbiI6IDEwNzc5Niwg
ImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVz
IiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1
bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLlJl
bW90ZUZyYW1lLkRldGFjaEFuZERpc3Bvc2UifX0sIHsiZW5kIjogMTA3OTA5LCAiYmVnaW4iOiAx
MDc4OTMsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5t
b2pvbS5SZW1vdGVGcmFtZS5FbmFibGVBdXRvUmVzaXplIn19LCB7ImVuZCI6IDEwODA2NCwgImJl
Z2luIjogMTA4MDQ3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAi
YW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3Vy
Y2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAi
YmxpbmsubW9qb20uUmVtb3RlRnJhbWUuRGlzYWJsZUF1dG9SZXNpemUifX0sIHsiZW5kIjogMTA4
MTc5LCAiYmVnaW4iOiAxMDgxNTQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAi
dHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdv
b2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25h
dHVyZSI6ICJibGluay5tb2pvbS5SZW1vdGVGcmFtZS5EaWRVcGRhdGVWaXN1YWxQcm9wZXJ0aWVz
In19LCB7ImVuZCI6IDEwODMxMywgImJlZ2luIjogMTA4Mjk5LCAiZWRnZSI6ICIlL2t5dGhlL2Vk
Z2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1
cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6
ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uUmVtb3RlRnJhbWUuU2V0RnJhbWVT
aW5rSWQifX0sIHsiZW5kIjogMTA4NDQ5LCAiYmVnaW4iOiAxMDg0MzMsICJlZGdlIjogIiUva3l0
aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsi
Y29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1
YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5SZW1vdGVGcmFtZS5DaGls
ZFByb2Nlc3NHb25lIn19LCB7ImVuZCI6IDEwODg2NiwgImJlZ2luIjogMTA4ODQ2LCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5h
bWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIs
ICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxNYWlu
RnJhbWUuQW5pbWF0ZURvdWJsZVRhcFpvb20ifX0sIHsiZW5kIjogMTA5MDEyLCAiYmVnaW4iOiAx
MDg5OTgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5t
b2pvbS5Mb2NhbE1haW5GcmFtZS5TZXRTY2FsZUZhY3RvciJ9fSwgeyJlbmQiOiAxMDkxMDksICJi
ZWdpbiI6IDEwOTEwMCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjog
ImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjog
ImJsaW5rLm1vam9tLkxvY2FsTWFpbkZyYW1lLkNsb3NlUGFnZSJ9fSwgeyJlbmQiOiAxMDkyMzMs
ICJiZWdpbiI6IDEwOTIxOCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBl
IjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xl
c291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJl
IjogImJsaW5rLm1vam9tLkxvY2FsTWFpbkZyYW1lLlNldEluaXRpYWxGb2N1cyJ9fSwgeyJlbmQi
OiAxMDkzNzMsICJiZWdpbiI6IDEwOTM0MywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRl
cyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21p
dW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAi
c2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsTWFpbkZyYW1lLkVuYWJsZVByZWZlcnJlZFNp
emVDaGFuZ2VkTW9kZSJ9fSwgeyJlbmQiOiAxMDk0ODEsICJiZWdpbiI6IDEwOTQ2MSwgImVkZ2Ui
OiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZu
YW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMi
LCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2FsTWFp
bkZyYW1lLlpvb21Ub0ZpbmRJblBhZ2VSZWN0In19LCB7ImVuZCI6IDEwOTYzNCwgImJlZ2luIjog
MTA5NjEwLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9y
X2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t
L2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsu
bW9qb20uTG9jYWxNYWluRnJhbWUuSW5zdGFsbENvb3BBY2Nlc3NNb25pdG9yIn19LCB7ImVuZCI6
IDEwOTg2NCwgImJlZ2luIjogMTA5ODQ3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVz
IiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1
bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJz
aWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxNYWluRnJhbWUuT25Qb3J0YWxBY3RpdmF0ZWQi
fX0sIHsiZW5kIjogMTEwMjY4LCAiYmVnaW4iOiAxMTAyNDYsICJlZGdlIjogIiUva3l0aGUvZWRn
ZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVz
IjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjog
Im1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbE1haW5GcmFtZS5Gb3J3YXJk
TWVzc2FnZUZyb21Ib3N0In19LCB7ImVuZCI6IDExMDQ5OCwgImJlZ2luIjogMTEwNDcyLCAiZWRn
ZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAi
dm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3Ny
YyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxN
YWluRnJhbWUuVXBkYXRlQnJvd3NlckNvbnRyb2xzU3RhdGUifX0sIHsiZW5kIjogMTExMDIzLCAi
YmVnaW4iOiAxMTA5OTYsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6
ICJibGluay5tb2pvbS5SZW1vdGVNYWluRnJhbWUuVXBkYXRlVGV4dEF1dG9zaXplclBhZ2VJbmZv
In19LCB7ImVuZCI6IDExMTUxNywgImJlZ2luIjogMTExNDk5LCAiZWRnZSI6ICIlL2t5dGhlL2Vk
Z2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1
cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6
ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxNYWluRnJhbWVIb3N0LlNj
YWxlRmFjdG9yQ2hhbmdlZCJ9fSwgeyJlbmQiOiAxMTE2NTYsICJiZWdpbiI6IDExMTYyOCwgImVk
Z2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwg
InZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9z
cmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkxvY2Fs
TWFpbkZyYW1lSG9zdC5Db250ZW50c1ByZWZlcnJlZFNpemVDaGFuZ2VkIn19LCB7ImVuZCI6IDEx
MTgxMiwgImJlZ2luIjogMTExNzg0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwg
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWdu
YXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxNYWluRnJhbWVIb3N0LlRleHRBdXRvc2l6ZXJQYWdl
SW5mb0NoYW5nZWQifX0sIHsiZW5kIjogMTExOTU5LCAiYmVnaW4iOiAxMTE5NTAsICJlZGdlIjog
IiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFt
ZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwg
Imxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbE1haW5G
cmFtZUhvc3QuRm9jdXNQYWdlIn19LCB7ImVuZCI6IDExMjA0OSwgImJlZ2luIjogMTEyMDQwLCAi
ZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMi
LCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVt
L3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9j
YWxNYWluRnJhbWVIb3N0LlRha2VGb2N1cyJ9fSwgeyJlbmQiOiAxMTIxNjMsICJiZWdpbiI6IDEx
MjE0OCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1v
am9tLkxvY2FsTWFpbkZyYW1lSG9zdC5VcGRhdGVUYXJnZXRVUkwifX0sIHsiZW5kIjogMTEyMzE3
LCAiYmVnaW4iOiAxMTIzMDUsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlw
ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVy
ZSI6ICJibGluay5tb2pvbS5Mb2NhbE1haW5GcmFtZUhvc3QuUmVxdWVzdENsb3NlIn19LCB7ImVu
ZCI6IDExMjQyMywgImJlZ2luIjogMTEyNDA2LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh
dGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJv
bWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIs
ICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxNYWluRnJhbWVIb3N0LlNob3dDcmVhdGVk
V2luZG93In19LCB7ImVuZCI6IDExMjcxNiwgImJlZ2luIjogMTEyNzAzLCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5n
dWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uTG9jYWxNYWluRnJhbWVI
b3N0LlNldFdpbmRvd1JlY3QifX0sIHsiZW5kIjogMTEyOTAzLCAiYmVnaW4iOiAxMTI4NzQsICJl
ZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIs
ICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0v
c3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2Nh
bE1haW5GcmFtZUhvc3QuRGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5UGFpbnQifX0sIHsiZW5kIjog
MTEzMDMxLCAiYmVnaW4iOiAxMTMwMDMsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMi
LCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVt
Lmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNp
Z25hdHVyZSI6ICJibGluay5tb2pvbS5Mb2NhbE1haW5GcmFtZUhvc3QuRGlkQWNjZXNzSW5pdGlh
bE1haW5Eb2N1bWVudCJ9fSwgeyJlbmQiOiAxMTM0NTYsICJiZWdpbiI6IDExMzQ0NywgImVkZ2Ui
OiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZu
YW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMi
LCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLlJlbW90ZU1h
aW5GcmFtZUhvc3QuRm9jdXNQYWdlIn19LCB7ImVuZCI6IDExMzU0NywgImJlZ2luIjogMTEzNTM4
LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9t
aXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20u
UmVtb3RlTWFpbkZyYW1lSG9zdC5UYWtlRm9jdXMifX0sIHsiZW5kIjogMTEzNjYyLCAiYmVnaW4i
OiAxMTM2NDcsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGlu
ay5tb2pvbS5SZW1vdGVNYWluRnJhbWVIb3N0LlVwZGF0ZVRhcmdldFVSTCJ9fSwgeyJlbmQiOiAx
MTM4MjMsICJiZWdpbiI6IDExMzgwOCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIs
ICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2ln
bmF0dXJlIjogImJsaW5rLm1vam9tLlJlbW90ZU1haW5GcmFtZUhvc3QuUm91dGVDbG9zZUV2ZW50
In19LCB7ImVuZCI6IDEzMTA4NiwgImJlZ2luIjogMTMxMDcxLCAiZWRnZSI6ICIlL2t5dGhlL2Vk
Z2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1
cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6
ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uU2F2YWJsZVN1YmZyYW1lIn19LCB7
ImVuZCI6IDEzNDgzMiwgImJlZ2luIjogMTM0ODIwLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2Vu
ZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJj
aHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pv
bSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uU2F2YWJsZVN1YmZyYW1lLm9yaWdpbmFsX3Vy
bCJ9fSwgeyJlbmQiOiAxMzQ5MzYsICJiZWdpbiI6IDEzNDkyMiwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLlNhdmFibGVTdWJmcmFtZS5zdWJm
cmFtZV90b2tlbiJ9fSwgeyJlbmQiOiAxMzYwMjIsICJiZWdpbiI6IDEzNTk5NCwgImVkZ2UiOiAi
JS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1l
IjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAi
bGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkdldFNhdmFibGVS
ZXNvdXJjZUxpbmtzUmVwbHkifX0sIHsiZW5kIjogMTQwMzMyLCAiYmVnaW4iOiAxNDAzMTgsICJl
ZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIs
ICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0v
c3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5HZXRT
YXZhYmxlUmVzb3VyY2VMaW5rc1JlcGx5LnJlc291cmNlc19saXN0In19LCB7ImVuZCI6IDE0MDQ0
MywgImJlZ2luIjogMTQwNDMyLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5
cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29n
bGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1
cmUiOiAiYmxpbmsubW9qb20uR2V0U2F2YWJsZVJlc291cmNlTGlua3NSZXBseS5yZWZlcnJlciJ9
fSwgeyJlbmQiOiAxNDA1NzEsICJiZWdpbiI6IDE0MDU2MiwgImVkZ2UiOiAiJS9reXRoZS9lZGdl
L2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMi
OiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAi
bW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkdldFNhdmFibGVSZXNvdXJjZUxpbmtz
UmVwbHkuc3ViZnJhbWVzIn19LCB7ImVuZCI6IDE0MTcwMSwgImJlZ2luIjogMTQxNjc3LCAiZWRn
ZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAi
dm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3Ny
YyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uRmluZElu
UGFnZVJlc3VsdEFYUGFyYW1zIn19LCB7ImVuZCI6IDE0NTc1OSwgImJlZ2luIjogMTQ1NzQ5LCAi
ZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMi
LCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVt
L3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uRmlu
ZEluUGFnZVJlc3VsdEFYUGFyYW1zLnJlcXVlc3RfaWQifX0sIHsiZW5kIjogMTQ1ODU0LCAiYmVn
aW4iOiAxNDU4NDMsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJh
bmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJj
ZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJi
bGluay5tb2pvbS5GaW5kSW5QYWdlUmVzdWx0QVhQYXJhbXMubWF0Y2hfaW5kZXgifX0sIHsiZW5k
IjogMTQ1OTQzLCAiYmVnaW4iOiAxNDU5MzUsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0
ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwg
InNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5GaW5kSW5QYWdlUmVzdWx0QVhQYXJhbXMuc3RhcnRf
aWQifX0sIHsiZW5kIjogMTQ2MDQwLCAiYmVnaW4iOiAxNDYwMjgsICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdl
IjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5GaW5kSW5QYWdlUmVzdWx0QVhQ
YXJhbXMuc3RhcnRfb2Zmc2V0In19LCB7ImVuZCI6IDE0NjEyNSwgImJlZ2luIjogMTQ2MTE5LCAi
ZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMi
LCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVt
L3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uRmlu
ZEluUGFnZVJlc3VsdEFYUGFyYW1zLmVuZF9pZCJ9fSwgeyJlbmQiOiAxNDYyMTgsICJiZWdpbiI6
IDE0NjIwOCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5r
Lm1vam9tLkZpbmRJblBhZ2VSZXN1bHRBWFBhcmFtcy5lbmRfb2Zmc2V0In19LCB7ImVuZCI6IDE0
NzMxOCwgImJlZ2luIjogMTQ3MzAxLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwg
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWdu
YXR1cmUiOiAiYmxpbmsubW9qb20uRG93bmxvYWRVUkxQYXJhbXMifX0sIHsiZW5kIjogMTUxNDA5
LCAiYmVnaW4iOiAxNTE0MDYsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlw
ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVy
ZSI6ICJibGluay5tb2pvbS5Eb3dubG9hZFVSTFBhcmFtcy51cmwifX0sIHsiZW5kIjogMTUxNTA5
LCAiYmVnaW4iOiAxNTE0OTgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlw
ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVy
ZSI6ICJibGluay5tb2pvbS5Eb3dubG9hZFVSTFBhcmFtcy5yZWZlcnJlciJ9fSwgeyJlbmQiOiAx
NTE2NTUsICJiZWdpbiI6IDE1MTYzOSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIs
ICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2ln
bmF0dXJlIjogImJsaW5rLm1vam9tLkRvd25sb2FkVVJMUGFyYW1zLmluaXRpYXRvcl9vcmlnaW4i
fX0sIHsiZW5kIjogMTUxNzU1LCAiYmVnaW4iOiAxNTE3NDEsICJlZGdlIjogIiUva3l0aGUvZWRn
ZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVz
IjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjog
Im1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Eb3dubG9hZFVSTFBhcmFtcy5zdWdn
ZXN0ZWRfbmFtZSJ9fSwgeyJlbmQiOiAxNTE4OTUsICJiZWdpbiI6IDE1MTg3MywgImVkZ2UiOiAi
JS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1l
IjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAi
bGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkRvd25sb2FkVVJM
UGFyYW1zLmNyb3NzX29yaWdpbl9yZWRpcmVjdHMifX0sIHsiZW5kIjogMTUyMDQwLCAiYmVnaW4i
OiAxNTIwMjYsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGlu
ay5tb2pvbS5Eb3dubG9hZFVSTFBhcmFtcy5ibG9iX3VybF90b2tlbiJ9fSwgeyJlbmQiOiAxNTIx
NzUsICJiZWdpbiI6IDE1MjE2MiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0
eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29v
Z2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0
dXJlIjogImJsaW5rLm1vam9tLkRvd25sb2FkVVJMUGFyYW1zLmRhdGFfdXJsX2Jsb2IifX0sIHsi
ZW5kIjogMTUyMjc4LCAiYmVnaW4iOiAxNTIyNTgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5l
cmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNo
cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9t
IiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5Eb3dubG9hZFVSTFBhcmFtcy5pc19jb250ZXh0
X21lbnVfc2F2ZSJ9fSwgeyJlbmQiOiAxNTIzNzMsICJiZWdpbiI6IDE1MjM1NywgImVkZ2UiOiAi
JS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1l
IjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAi
bGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLkRvd25sb2FkVVJM
UGFyYW1zLmhhc191c2VyX2dlc3R1cmUifX0sIHsiZW5kIjogMTUzNDM3LCAiYmVnaW4iOiAxNTM0
MjQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVm
aW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hy
b21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pv
bS5PcGVuVVJMUGFyYW1zIn19LCB7ImVuZCI6IDE1Nzk4NywgImJlZ2luIjogMTU3OTg0LCAiZWRn
ZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAi
dm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3Ny
YyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uT3BlblVS
TFBhcmFtcy51cmwifX0sIHsiZW5kIjogMTU4MTIwLCAiYmVnaW4iOiAxNTgxMDQsICJlZGdlIjog
IiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFt
ZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwg
Imxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5PcGVuVVJMUGFy
YW1zLmluaXRpYXRvcl9vcmlnaW4ifX0sIHsiZW5kIjogMTU4MjU3LCAiYmVnaW4iOiAxNTgyMzYs
ICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5l
cyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21p
dW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5P
cGVuVVJMUGFyYW1zLmluaXRpYXRvcl9mcmFtZV90b2tlbiJ9fSwgeyJlbmQiOiAxNTgzNzcsICJi
ZWdpbiI6IDE1ODM2OCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjog
ImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjog
ImJsaW5rLm1vam9tLk9wZW5VUkxQYXJhbXMucG9zdF9ib2R5In19LCB7ImVuZCI6IDE1ODQ2OSwg
ImJlZ2luIjogMTU4NDU2LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUi
OiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVz
b3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUi
OiAiYmxpbmsubW9qb20uT3BlblVSTFBhcmFtcy5leHRyYV9oZWFkZXJzIn19LCB7ImVuZCI6IDE1
ODU2NSwgImJlZ2luIjogMTU4NTU0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwg
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWdu
YXR1cmUiOiAiYmxpbmsubW9qb20uT3BlblVSTFBhcmFtcy5yZWZlcnJlciJ9fSwgeyJlbmQiOiAx
NTg2NjksICJiZWdpbiI6IDE1ODY1MSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIs
ICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2ln
bmF0dXJlIjogImJsaW5rLm1vam9tLk9wZW5VUkxQYXJhbXMuaXNfZm9ybV9zdWJtaXNzaW9uIn19
LCB7ImVuZCI6IDE1ODc4NywgImJlZ2luIjogMTU4Nzc2LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2Uv
Z2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6
ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJt
b2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uT3BlblVSTFBhcmFtcy5kaXNwb3NpdGlv
biJ9fSwgeyJlbmQiOiAxNTg5MDIsICJiZWdpbiI6IDE1ODg3NCwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLk9wZW5VUkxQYXJhbXMuc2hvdWxk
X3JlcGxhY2VfY3VycmVudF9lbnRyeSJ9fSwgeyJlbmQiOiAxNTg5ODUsICJiZWdpbiI6IDE1ODk3
MywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZp
bmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJv
bWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9t
Lk9wZW5VUkxQYXJhbXMudXNlcl9nZXN0dXJlIn19LCB7ImVuZCI6IDE1OTA5NiwgImJlZ2luIjog
MTU5MDcwLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9y
X2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t
L2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsu
bW9qb20uT3BlblVSTFBhcmFtcy5pc191bmZlbmNlZF90b3BfbmF2aWdhdGlvbiJ9fSwgeyJlbmQi
OiAxNTkyMzUsICJiZWdpbiI6IDE1OTIxNCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRl
cyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21p
dW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAi
c2lnbmF0dXJlIjogImJsaW5rLm1vam9tLk9wZW5VUkxQYXJhbXMudHJpZ2dlcmluZ19ldmVudF9p
bmZvIn19LCB7ImVuZCI6IDE1OTM3NiwgImJlZ2luIjogMTU5MzYyLCAiZWRnZSI6ICIlL2t5dGhl
L2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNv
cnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiYmxpbmsubW9qb20uT3BlblVSTFBhcmFtcy5ibG9i
X3VybF90b2tlbiJ9fSwgeyJlbmQiOiAxNTk0NzAsICJiZWdpbiI6IDE1OTQ1NiwgImVkZ2UiOiAi
JS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1l
IjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAi
bGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5rLm1vam9tLk9wZW5VUkxQYXJh
bXMuaHJlZl90cmFuc2xhdGUifX0sIHsiZW5kIjogMTU5NTY4LCAiYmVnaW4iOiAxNTk1NTgsICJl
ZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIs
ICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0v
c3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5PcGVu
VVJMUGFyYW1zLmltcHJlc3Npb24ifX0sIHsiZW5kIjogMTU5Njk4LCAiYmVnaW4iOiAxNTk2ODMs
ICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5l
cyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21p
dW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJibGluay5tb2pvbS5P
cGVuVVJMUGFyYW1zLmRvd25sb2FkX3BvbGljeSJ9fSwgeyJlbmQiOiAxNTk4MjUsICJiZWdpbiI6
IDE1OTgxMCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImJsaW5r
Lm1vam9tLk9wZW5VUkxQYXJhbXMuc291cmNlX2xvY2F0aW9uIn19LCB7ImVuZCI6IDE2MDA0OCwg
ImJlZ2luIjogMTYwMDA0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUi
OiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVz
b3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUi
OiAiYmxpbmsubW9qb20uT3BlblVSTFBhcmFtcy5pbml0aWF0b3JfcG9saWN5X2NvbnRhaW5lcl9r
ZWVwX2FsaXZlX2hhbmRsZSJ9fV0sICJ0eXBlIjogImt5dGhlMCJ9
*/