<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>236852</bug_id>
          
          <creation_ts>2022-02-18 12:19:45 -0800</creation_ts>
          <short_desc>Clean up / optimize even more call sites constructing vectors</short_desc>
          <delta_ts>2022-02-22 17:05:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=236748</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=237068</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>237049</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>calvaris</cc>
    
    <cc>cgarcia</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fred.wang</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hta</cc>
    
    <cc>japhet</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>jsbell</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>sam</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1843551</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-18 12:19:45 -0800</bug_when>
    <thetext>Clean up / optimize even more call sites constructing vectors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843555</commentid>
    <comment_count>1</comment_count>
      <attachid>452559</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-18 12:24:38 -0800</bug_when>
    <thetext>Created attachment 452559
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843580</commentid>
    <comment_count>2</comment_count>
      <attachid>452565</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-18 12:53:19 -0800</bug_when>
    <thetext>Created attachment 452565
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843612</commentid>
    <comment_count>3</comment_count>
      <attachid>452572</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-18 13:26:11 -0800</bug_when>
    <thetext>Created attachment 452572
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843665</commentid>
    <comment_count>4</comment_count>
      <attachid>452587</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-18 15:13:50 -0800</bug_when>
    <thetext>Created attachment 452587
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843744</commentid>
    <comment_count>5</comment_count>
      <attachid>452612</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-18 18:28:27 -0800</bug_when>
    <thetext>Created attachment 452612
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843749</commentid>
    <comment_count>6</comment_count>
      <attachid>452613</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-18 18:41:33 -0800</bug_when>
    <thetext>Created attachment 452613
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843885</commentid>
    <comment_count>7</comment_count>
      <attachid>452649</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-19 12:31:59 -0800</bug_when>
    <thetext>Created attachment 452649
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843925</commentid>
    <comment_count>8</comment_count>
      <attachid>452649</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-19 16:00:20 -0800</bug_when>
    <thetext>Comment on attachment 452649
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=452649&amp;action=review

Some of these places where we create one-element vectors are cases where the receiving function should take a span so we don’t have to allocate/deallocate vector storage on the heap just to pass one thing in.

I haven’t been able to spot whatever mistake is making tests fail.

Seems like even more of these could use WTF::map.

&gt; Source/WebCore/Modules/indexeddb/IDBDatabase.cpp:182
&gt; +        // It is valid for javascript to pass in a list of object store names with the same name listed twice,
&gt; +        // so we need to put them all in a set to get a unique list.
&gt; +        HashSet&lt;String&gt; objectStoreSet;
&gt; +        objectStoreSet.add(objectStores.begin(), objectStores.end());
&gt; +        objectStores = copyToVector(objectStoreSet);

Not new: It is unpleasant this puts the strings in hash table order, basically random. I would be tempted to use ListHashSet or sort afterward so things work more consistently. Unless somehow the order of this vector definitely does not matter.

In fact, removing duplicates from a list is probably not best done by putting it into a hash table and then taking it back out. Could use std::sort, std::unique, then remove past the end.

&gt; Source/WebCore/Modules/indexeddb/IDBKeyData.h:171
&gt; +    add(hasher, keyData.isDeletedValue());

There is no good reason to include a boolean &quot;isDeletedValue&quot; in the hash. If the deleted value is being used for hash tables, then those keys will never be hashed. Also, leaving something out of the hash only causes hash collisions, no other correctness problem.

&gt; Source/WebCore/Modules/indexeddb/IDBTransaction.cpp:124
&gt; +    Vector&lt;String&gt; names = isVersionChange() ? m_database-&gt;info().objectStoreNames() : m_info.objectStores();

Doesn’t auto work?

&gt; Source/WebCore/Modules/mediasource/SourceBufferList.h:52
&gt;      unsigned long length() const { return m_list.size(); }
&gt; +
&gt;      SourceBuffer* item(unsigned long index) const { return (index &lt; m_list.size()) ? m_list[index].get() : nullptr; }

The &quot;unsigned long&quot; type here is not good.

&gt; Source/WebCore/dom/DOMStringList.h:51
&gt;      void append(const String&amp; string) { m_strings.append(string); }
&gt; +    void append(String&amp;&amp; string) { m_strings.append(WTFMove(string)); }

Not sure we need both of these; I think you can remove the const String&amp; without changing behavior?

&gt; Source/WebCore/dom/FullscreenManager.cpp:269
&gt; +    topDocument.fullscreenManager().m_fullscreenElementStack = Vector { WTFMove(fullscrenElement) };

Is Vector needed here?

&gt; Source/WebCore/dom/LoadableScript.cpp:54
&gt; +    Ref protectedThis { *this };

Really should move this to callers. But maybe too risky at this time.

&gt; Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3027
&gt;      Vector&lt;RefPtr&lt;WebGLShader&gt;&gt; shaderObjects;
&gt;      for (auto shaderType : shaderTypes) {
&gt; -        RefPtr&lt;WebGLShader&gt; shader = program.getAttachedShader(shaderType);
&gt; -        if (shader)
&gt; -            shaderObjects.append(shader);
&gt; +        if (RefPtr shader = program.getAttachedShader(shaderType))
&gt; +            shaderObjects.append(WTFMove(shader));
&gt;      }
&gt;      return shaderObjects;

Can we use compactMap?

&gt; Source/WebCore/html/parser/HTMLMetaCharsetParser.cpp:90
&gt;          String attributeName = StringImpl::create8BitIfPossible(attribute.name);
&gt;          String attributeValue = StringImpl::create8BitIfPossible(attribute.value);

Besides narrowing to 8-bit, maybe we should put these in the AtomString table?

&gt; Source/WebCore/page/TextIndicator.cpp:373
&gt; +    data.textBoundingRectInRootViewCoordinates = WTFMove(textBoundingRectInRootViewCoordinates);
&gt; +    data.textRectsInBoundingRectCoordinates = WTFMove(textRectsInBoundingRectCoordinates);

We don’t need move rectangles. They are all scalars.

&gt; Source/WebCore/platform/audio/AudioDSPKernelProcessor.cpp:59
&gt; +        m_kernels.reserveCapacity(m_kernels.capacity() + numberOfChannels());

If this happens repeatedly, then maybe we *don’t* want to reserve the exactly right amount of capacity, causing us to do a realloc each time. We could do a single shrinkToFit at the very end if we are going to keep the vector around.

&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:66
&gt; -    m_preDelayBuffers.clear();
&gt; +    m_preDelayBuffers.shrink(0);
&gt;      for (unsigned i = 0; i &lt; numberOfChannels; ++i)
&gt;          m_preDelayBuffers.append(makeUnique&lt;AudioFloatArray&gt;(MaxPreDelayFrames));
&gt; +    m_preDelayBuffers.shrinkToFit();

Maybe we could use an idiom where we set capacity exactly here, and use uncheckedAppend? Not sure how practical that is.

&gt; Source/WebCore/platform/gamepad/mac/LogitechGamepad.cpp:65
&gt; +            auto hatswitchValues = Vector&lt;SharedGamepadValue&gt;::from(
&gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterTop],
&gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterRight],
&gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterBottom],
&gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterLeft]
&gt; +            );

I don’t understand why this is Vector::from rather than just Vector with an initializer list.

&gt; Source/WebCore/platform/gamepad/mac/StadiaHIDGamepad.cpp:76
&gt; +            auto hatswitchValues = Vector&lt;SharedGamepadValue&gt;::from(
&gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterTop],
&gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterRight],
&gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterBottom],
&gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterLeft]
&gt; +            );

Ditto.

&gt; Source/WebCore/platform/graphics/PathUtilities.cpp:312
&gt; +    Vector&lt;Path&gt; paths;

reserveInitialCapacity(polys.size())?

&gt; Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm:71
&gt; +    auto map = defaultVariationValues(platformFont, shouldLocalizeAxisNames);

It sure does seem unnecessarily confusing to choose the name &quot;map&quot; for this local. I think we can just do without the local variable. The next line of code wouldn&apos;t be too long.

&gt; Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.cpp:81
&gt; +    segmentInfo.audioTracks.reserveInitialCapacity(segment.audioTracks.size());
&gt;      for (auto&amp; audioTrackInfo : segment.audioTracks) {
&gt;          auto identifier = m_remoteMediaPlayerProxy-&gt;addRemoteAudioTrackProxy(*audioTrackInfo.track);
&gt; -        segmentInfo.audioTracks.append({ MediaDescriptionInfo(*audioTrackInfo.description), identifier });
&gt; +        segmentInfo.audioTracks.uncheckedAppend({ MediaDescriptionInfo(*audioTrackInfo.description), identifier });

Could consider using WTF::map with a lambda with side effects here. After all, map is defined to be called sequentially, it’s not a super-magical parallel thing.

Same for the other two below.

&gt; Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp:298
&gt; +    for (const auto&amp; localStorageNamespace : m_localStorageNamespaces.values())

I don’t think these const do much good.

&gt; Source/WebKit/UIProcess/WebBackForwardList.cpp:371
&gt; -        for (size_t i = 0; i &lt; size; ++i) {
&gt; -            didRemoveItem(m_entries[i]);
&gt; -            removedItems.append(WTFMove(m_entries[i]));
&gt; -        }
&gt; +        for (auto&amp; entry : m_entries)
&gt; +            didRemoveItem(entry);
&gt;  
&gt; -        m_entries.clear();
&gt;          m_currentIndex = std::nullopt;
&gt; -        m_page-&gt;didChangeBackForwardList(nullptr, WTFMove(removedItems));
&gt; +        m_page-&gt;didChangeBackForwardList(nullptr, std::exchange(m_entries, { }));

Is this safe? Does didRemoveItem have any side effects that might be sensitive to the change in algorithm here?

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:676
&gt; +        origins.reserveCapacity(origins.size() + dataRecord.origins.size());

Is this a good algorithm? Maybe shrinkToFit at the end is better.

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:717
&gt; +                cookieHostNames.reserveCapacity(cookieHostNames.size() + dataRecord.cookieHostNames.size());

Same question. I always worry if we are manually expanding capacity, because it can lead to too many resizes in theory.

&gt; Source/WebKit/UIProcess/ios/TextCheckerIOS.mm:265
&gt; +                    detail.guesses = makeVector&lt;String&gt;(guesses);

Maybe even get rid of the local variable and do this as a one-liner?

&gt; Source/WebKit/WebProcess/WebPage/WebPage.cpp:7862
&gt;      Vector&lt;RefPtr&lt;SandboxExtension&gt;&gt; dragSandboxExtensions;

compactMap?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843933</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-19 17:02:08 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #8)
&gt; Comment on attachment 452649 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=452649&amp;action=review
&gt; 
&gt; Some of these places where we create one-element vectors are cases where the
&gt; receiving function should take a span so we don’t have to
&gt; allocate/deallocate vector storage on the heap just to pass one thing in.
&gt; 
&gt; I haven’t been able to spot whatever mistake is making tests fail.

I&apos;ll check. I was assuming the failures were unrelated until now.

&gt; 
&gt; Seems like even more of these could use WTF::map.
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBDatabase.cpp:182
&gt; &gt; +        // It is valid for javascript to pass in a list of object store names with the same name listed twice,
&gt; &gt; +        // so we need to put them all in a set to get a unique list.
&gt; &gt; +        HashSet&lt;String&gt; objectStoreSet;
&gt; &gt; +        objectStoreSet.add(objectStores.begin(), objectStores.end());
&gt; &gt; +        objectStores = copyToVector(objectStoreSet);
&gt; 
&gt; Not new: It is unpleasant this puts the strings in hash table order,
&gt; basically random. I would be tempted to use ListHashSet or sort afterward so
&gt; things work more consistently. Unless somehow the order of this vector
&gt; definitely does not matter.
&gt; 
&gt; In fact, removing duplicates from a list is probably not best done by
&gt; putting it into a hash table and then taking it back out. Could use
&gt; std::sort, std::unique, then remove past the end.
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBKeyData.h:171
&gt; &gt; +    add(hasher, keyData.isDeletedValue());
&gt; 
&gt; There is no good reason to include a boolean &quot;isDeletedValue&quot; in the hash.
&gt; If the deleted value is being used for hash tables, then those keys will
&gt; never be hashed. Also, leaving something out of the hash only causes hash
&gt; collisions, no other correctness problem.
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBTransaction.cpp:124
&gt; &gt; +    Vector&lt;String&gt; names = isVersionChange() ? m_database-&gt;info().objectStoreNames() : m_info.objectStores();
&gt; 
&gt; Doesn’t auto work?
&gt; 
&gt; &gt; Source/WebCore/Modules/mediasource/SourceBufferList.h:52
&gt; &gt;      unsigned long length() const { return m_list.size(); }
&gt; &gt; +
&gt; &gt;      SourceBuffer* item(unsigned long index) const { return (index &lt; m_list.size()) ? m_list[index].get() : nullptr; }
&gt; 
&gt; The &quot;unsigned long&quot; type here is not good.

Yes, will switch to unsigned.

&gt; &gt; Source/WebCore/dom/DOMStringList.h:51
&gt; &gt;      void append(const String&amp; string) { m_strings.append(string); }
&gt; &gt; +    void append(String&amp;&amp; string) { m_strings.append(WTFMove(string)); }
&gt; 
&gt; Not sure we need both of these; I think you can remove the const String&amp;
&gt; without changing behavior?

Yes, I can indeed drop it without making any additional code patches.

&gt; 
&gt; &gt; Source/WebCore/dom/FullscreenManager.cpp:269
&gt; &gt; +    topDocument.fullscreenManager().m_fullscreenElementStack = Vector { WTFMove(fullscrenElement) };
&gt; 
&gt; Is Vector needed here?

Apparently not, not sure why I added it.

&gt; &gt; Source/WebCore/dom/LoadableScript.cpp:54
&gt; &gt; +    Ref protectedThis { *this };
&gt; 
&gt; Really should move this to callers. But maybe too risky at this time.

Right, I&apos;d rather not to this in this large patch.

&gt; 
&gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3027
&gt; &gt;      Vector&lt;RefPtr&lt;WebGLShader&gt;&gt; shaderObjects;
&gt; &gt;      for (auto shaderType : shaderTypes) {
&gt; &gt; -        RefPtr&lt;WebGLShader&gt; shader = program.getAttachedShader(shaderType);
&gt; &gt; -        if (shader)
&gt; &gt; -            shaderObjects.append(shader);
&gt; &gt; +        if (RefPtr shader = program.getAttachedShader(shaderType))
&gt; &gt; +            shaderObjects.append(WTFMove(shader));
&gt; &gt;      }
&gt; &gt;      return shaderObjects;
&gt; 
&gt; Can we use compactMap?

shaderTypes is defined as an array (with only 2 items).

&gt; 
&gt; &gt; Source/WebCore/html/parser/HTMLMetaCharsetParser.cpp:90
&gt; &gt;          String attributeName = StringImpl::create8BitIfPossible(attribute.name);
&gt; &gt;          String attributeValue = StringImpl::create8BitIfPossible(attribute.value);
&gt; 
&gt; Besides narrowing to 8-bit, maybe we should put these in the AtomString
&gt; table?

Seems a little risky as part of this large patch.

&gt; &gt; Source/WebCore/page/TextIndicator.cpp:373
&gt; &gt; +    data.textBoundingRectInRootViewCoordinates = WTFMove(textBoundingRectInRootViewCoordinates);
&gt; &gt; +    data.textRectsInBoundingRectCoordinates = WTFMove(textRectsInBoundingRectCoordinates);
&gt; 
&gt; We don’t need move rectangles. They are all scalars.

OK. One is a Vector of rectangles though so that one is probably still valuable.

&gt; 
&gt; &gt; Source/WebCore/platform/audio/AudioDSPKernelProcessor.cpp:59
&gt; &gt; +        m_kernels.reserveCapacity(m_kernels.capacity() + numberOfChannels());
&gt; 
&gt; If this happens repeatedly, then maybe we *don’t* want to reserve the
&gt; exactly right amount of capacity, causing us to do a realloc each time. We
&gt; could do a single shrinkToFit at the very end if we are going to keep the
&gt; vector around.

I don&apos;t not believe this happens repeatedly. This is delayed initialization to avoid doing too much work in the constructor iirc.

&gt; 
&gt; &gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:66
&gt; &gt; -    m_preDelayBuffers.clear();
&gt; &gt; +    m_preDelayBuffers.shrink(0);
&gt; &gt;      for (unsigned i = 0; i &lt; numberOfChannels; ++i)
&gt; &gt;          m_preDelayBuffers.append(makeUnique&lt;AudioFloatArray&gt;(MaxPreDelayFrames));
&gt; &gt; +    m_preDelayBuffers.shrinkToFit();
&gt; 
&gt; Maybe we could use an idiom where we set capacity exactly here, and use
&gt; uncheckedAppend? Not sure how practical that is.
&gt; 
&gt; &gt; Source/WebCore/platform/gamepad/mac/LogitechGamepad.cpp:65
&gt; &gt; +            auto hatswitchValues = Vector&lt;SharedGamepadValue&gt;::from(
&gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterTop],
&gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterRight],
&gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterBottom],
&gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterLeft]
&gt; &gt; +            );
&gt; 
&gt; I don’t understand why this is Vector::from rather than just Vector with an
&gt; initializer list.

Good question, initializer list works fine here so I&apos;ll switch.

&gt; 
&gt; &gt; Source/WebCore/platform/gamepad/mac/StadiaHIDGamepad.cpp:76
&gt; &gt; +            auto hatswitchValues = Vector&lt;SharedGamepadValue&gt;::from(
&gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterTop],
&gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterRight],
&gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterBottom],
&gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterLeft]
&gt; &gt; +            );
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/PathUtilities.cpp:312
&gt; &gt; +    Vector&lt;Path&gt; paths;
&gt; 
&gt; reserveInitialCapacity(polys.size())?

Sure.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm:71
&gt; &gt; +    auto map = defaultVariationValues(platformFont, shouldLocalizeAxisNames);
&gt; 
&gt; It sure does seem unnecessarily confusing to choose the name &quot;map&quot; for this
&gt; local. I think we can just do without the local variable. The next line of
&gt; code wouldn&apos;t be too long.

OK.

&gt; &gt; Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.cpp:81
&gt; &gt; +    segmentInfo.audioTracks.reserveInitialCapacity(segment.audioTracks.size());
&gt; &gt;      for (auto&amp; audioTrackInfo : segment.audioTracks) {
&gt; &gt;          auto identifier = m_remoteMediaPlayerProxy-&gt;addRemoteAudioTrackProxy(*audioTrackInfo.track);
&gt; &gt; -        segmentInfo.audioTracks.append({ MediaDescriptionInfo(*audioTrackInfo.description), identifier });
&gt; &gt; +        segmentInfo.audioTracks.uncheckedAppend({ MediaDescriptionInfo(*audioTrackInfo.description), identifier });
&gt; 
&gt; Could consider using WTF::map with a lambda with side effects here. After
&gt; all, map is defined to be called sequentially, it’s not a super-magical
&gt; parallel thing.
&gt; 
&gt; Same for the other two below.

OK.

&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp:298
&gt; &gt; +    for (const auto&amp; localStorageNamespace : m_localStorageNamespaces.values())
&gt; 
&gt; I don’t think these const do much good.

OK.

&gt; 
&gt; &gt; Source/WebKit/UIProcess/WebBackForwardList.cpp:371
&gt; &gt; -        for (size_t i = 0; i &lt; size; ++i) {
&gt; &gt; -            didRemoveItem(m_entries[i]);
&gt; &gt; -            removedItems.append(WTFMove(m_entries[i]));
&gt; &gt; -        }
&gt; &gt; +        for (auto&amp; entry : m_entries)
&gt; &gt; +            didRemoveItem(entry);
&gt; &gt;  
&gt; &gt; -        m_entries.clear();
&gt; &gt;          m_currentIndex = std::nullopt;
&gt; &gt; -        m_page-&gt;didChangeBackForwardList(nullptr, WTFMove(removedItems));
&gt; &gt; +        m_page-&gt;didChangeBackForwardList(nullptr, std::exchange(m_entries, { }));
&gt; 
&gt; Is this safe? Does didRemoveItem have any side effects that might be
&gt; sensitive to the change in algorithm here?

I will double check.

&gt; 
&gt; &gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:676
&gt; &gt; +        origins.reserveCapacity(origins.size() + dataRecord.origins.size());
&gt; 
&gt; Is this a good algorithm? Maybe shrinkToFit at the end is better.

I don&apos;t understand the problem and I don&apos;t see how shrinkToFit() applies since I am not reserving too much capacity.
My change avoids unnecessary memory allocations for this loop:
```
for (auto&amp; origin : dataRecord.origins)
    origins.uncheckedAppend(origin);
```

Note that we just allocated the Vector before the outer loop, therefore, the Vector doesn&apos;t have &quot;extra&quot; capacity. As far as I can tell, we&apos;re doing less memory allocations with my patch, not more.

&gt; 
&gt; &gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:717
&gt; &gt; +                cookieHostNames.reserveCapacity(cookieHostNames.size() + dataRecord.cookieHostNames.size());
&gt; 
&gt; Same question. I always worry if we are manually expanding capacity, because
&gt; it can lead to too many resizes in theory.

Same comments as above. I do not understand how my change leads to more resizes. As far as I can tell, I can tell, I allocate just enough capacity right before each loop.
The only reason my code would cause an unnecessary capacity change is if the vector already had extra capacity. Looking at the code, I just don&apos;t see how that&apos;s possible.
We just allocated the Vector, and then we call append() in a nested loop.

&gt; 
&gt; &gt; Source/WebKit/UIProcess/ios/TextCheckerIOS.mm:265
&gt; &gt; +                    detail.guesses = makeVector&lt;String&gt;(guesses);
&gt; 
&gt; Maybe even get rid of the local variable and do this as a one-liner?

Ok.

&gt; 
&gt; &gt; Source/WebKit/WebProcess/WebPage/WebPage.cpp:7862
&gt; &gt;      Vector&lt;RefPtr&lt;SandboxExtension&gt;&gt; dragSandboxExtensions;
&gt; 
&gt; compactMap?

Done. I also changed the Vector to contain a Ref&lt;&gt; instead of a RefPtr&lt;&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843935</commentid>
    <comment_count>10</comment_count>
      <attachid>452664</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-19 17:09:03 -0800</bug_when>
    <thetext>Created attachment 452664
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843936</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-19 17:11:33 -0800</bug_when>
    <thetext>Retrying EWS. I haven&apos;t seen any evidence of an issue with the patch yet. I think the bots may be in a bad state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844022</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-19 22:15:26 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #8)
&gt; Comment on attachment 452649 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=452649&amp;action=review
&gt; 
&gt; Some of these places where we create one-element vectors are cases where the
&gt; receiving function should take a span so we don’t have to
&gt; allocate/deallocate vector storage on the heap just to pass one thing in.
&gt; 
&gt; I haven’t been able to spot whatever mistake is making tests fail.
&gt; 
&gt; Seems like even more of these could use WTF::map.
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBDatabase.cpp:182
&gt; &gt; +        // It is valid for javascript to pass in a list of object store names with the same name listed twice,
&gt; &gt; +        // so we need to put them all in a set to get a unique list.
&gt; &gt; +        HashSet&lt;String&gt; objectStoreSet;
&gt; &gt; +        objectStoreSet.add(objectStores.begin(), objectStores.end());
&gt; &gt; +        objectStores = copyToVector(objectStoreSet);
&gt; 
&gt; Not new: It is unpleasant this puts the strings in hash table order,
&gt; basically random. I would be tempted to use ListHashSet or sort afterward so
&gt; things work more consistently. Unless somehow the order of this vector
&gt; definitely does not matter.
&gt; 
&gt; In fact, removing duplicates from a list is probably not best done by
&gt; putting it into a hash table and then taking it back out. Could use
&gt; std::sort, std::unique, then remove past the end.
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBKeyData.h:171
&gt; &gt; +    add(hasher, keyData.isDeletedValue());
&gt; 
&gt; There is no good reason to include a boolean &quot;isDeletedValue&quot; in the hash.
&gt; If the deleted value is being used for hash tables, then those keys will
&gt; never be hashed. Also, leaving something out of the hash only causes hash
&gt; collisions, no other correctness problem.
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBTransaction.cpp:124
&gt; &gt; +    Vector&lt;String&gt; names = isVersionChange() ? m_database-&gt;info().objectStoreNames() : m_info.objectStores();
&gt; 
&gt; Doesn’t auto work?
&gt; 
&gt; &gt; Source/WebCore/Modules/mediasource/SourceBufferList.h:52
&gt; &gt;      unsigned long length() const { return m_list.size(); }
&gt; &gt; +
&gt; &gt;      SourceBuffer* item(unsigned long index) const { return (index &lt; m_list.size()) ? m_list[index].get() : nullptr; }
&gt; 
&gt; The &quot;unsigned long&quot; type here is not good.
&gt; 
&gt; &gt; Source/WebCore/dom/DOMStringList.h:51
&gt; &gt;      void append(const String&amp; string) { m_strings.append(string); }
&gt; &gt; +    void append(String&amp;&amp; string) { m_strings.append(WTFMove(string)); }
&gt; 
&gt; Not sure we need both of these; I think you can remove the const String&amp;
&gt; without changing behavior?
&gt; 
&gt; &gt; Source/WebCore/dom/FullscreenManager.cpp:269
&gt; &gt; +    topDocument.fullscreenManager().m_fullscreenElementStack = Vector { WTFMove(fullscrenElement) };
&gt; 
&gt; Is Vector needed here?
&gt; 
&gt; &gt; Source/WebCore/dom/LoadableScript.cpp:54
&gt; &gt; +    Ref protectedThis { *this };
&gt; 
&gt; Really should move this to callers. But maybe too risky at this time.
&gt; 
&gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3027
&gt; &gt;      Vector&lt;RefPtr&lt;WebGLShader&gt;&gt; shaderObjects;
&gt; &gt;      for (auto shaderType : shaderTypes) {
&gt; &gt; -        RefPtr&lt;WebGLShader&gt; shader = program.getAttachedShader(shaderType);
&gt; &gt; -        if (shader)
&gt; &gt; -            shaderObjects.append(shader);
&gt; &gt; +        if (RefPtr shader = program.getAttachedShader(shaderType))
&gt; &gt; +            shaderObjects.append(WTFMove(shader));
&gt; &gt;      }
&gt; &gt;      return shaderObjects;
&gt; 
&gt; Can we use compactMap?
&gt; 
&gt; &gt; Source/WebCore/html/parser/HTMLMetaCharsetParser.cpp:90
&gt; &gt;          String attributeName = StringImpl::create8BitIfPossible(attribute.name);
&gt; &gt;          String attributeValue = StringImpl::create8BitIfPossible(attribute.value);
&gt; 
&gt; Besides narrowing to 8-bit, maybe we should put these in the AtomString
&gt; table?
&gt; 
&gt; &gt; Source/WebCore/page/TextIndicator.cpp:373
&gt; &gt; +    data.textBoundingRectInRootViewCoordinates = WTFMove(textBoundingRectInRootViewCoordinates);
&gt; &gt; +    data.textRectsInBoundingRectCoordinates = WTFMove(textRectsInBoundingRectCoordinates);
&gt; 
&gt; We don’t need move rectangles. They are all scalars.
&gt; 
&gt; &gt; Source/WebCore/platform/audio/AudioDSPKernelProcessor.cpp:59
&gt; &gt; +        m_kernels.reserveCapacity(m_kernels.capacity() + numberOfChannels());
&gt; 
&gt; If this happens repeatedly, then maybe we *don’t* want to reserve the
&gt; exactly right amount of capacity, causing us to do a realloc each time. We
&gt; could do a single shrinkToFit at the very end if we are going to keep the
&gt; vector around.
&gt; 
&gt; &gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:66
&gt; &gt; -    m_preDelayBuffers.clear();
&gt; &gt; +    m_preDelayBuffers.shrink(0);
&gt; &gt;      for (unsigned i = 0; i &lt; numberOfChannels; ++i)
&gt; &gt;          m_preDelayBuffers.append(makeUnique&lt;AudioFloatArray&gt;(MaxPreDelayFrames));
&gt; &gt; +    m_preDelayBuffers.shrinkToFit();
&gt; 
&gt; Maybe we could use an idiom where we set capacity exactly here, and use
&gt; uncheckedAppend? Not sure how practical that is.
&gt; 
&gt; &gt; Source/WebCore/platform/gamepad/mac/LogitechGamepad.cpp:65
&gt; &gt; +            auto hatswitchValues = Vector&lt;SharedGamepadValue&gt;::from(
&gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterTop],
&gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterRight],
&gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterBottom],
&gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterLeft]
&gt; &gt; +            );
&gt; 
&gt; I don’t understand why this is Vector::from rather than just Vector with an
&gt; initializer list.
&gt; 
&gt; &gt; Source/WebCore/platform/gamepad/mac/StadiaHIDGamepad.cpp:76
&gt; &gt; +            auto hatswitchValues = Vector&lt;SharedGamepadValue&gt;::from(
&gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterTop],
&gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterRight],
&gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterBottom],
&gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterLeft]
&gt; &gt; +            );
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/PathUtilities.cpp:312
&gt; &gt; +    Vector&lt;Path&gt; paths;
&gt; 
&gt; reserveInitialCapacity(polys.size())?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm:71
&gt; &gt; +    auto map = defaultVariationValues(platformFont, shouldLocalizeAxisNames);
&gt; 
&gt; It sure does seem unnecessarily confusing to choose the name &quot;map&quot; for this
&gt; local. I think we can just do without the local variable. The next line of
&gt; code wouldn&apos;t be too long.
&gt; 
&gt; &gt; Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.cpp:81
&gt; &gt; +    segmentInfo.audioTracks.reserveInitialCapacity(segment.audioTracks.size());
&gt; &gt;      for (auto&amp; audioTrackInfo : segment.audioTracks) {
&gt; &gt;          auto identifier = m_remoteMediaPlayerProxy-&gt;addRemoteAudioTrackProxy(*audioTrackInfo.track);
&gt; &gt; -        segmentInfo.audioTracks.append({ MediaDescriptionInfo(*audioTrackInfo.description), identifier });
&gt; &gt; +        segmentInfo.audioTracks.uncheckedAppend({ MediaDescriptionInfo(*audioTrackInfo.description), identifier });
&gt; 
&gt; Could consider using WTF::map with a lambda with side effects here. After
&gt; all, map is defined to be called sequentially, it’s not a super-magical
&gt; parallel thing.
&gt; 
&gt; Same for the other two below.
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp:298
&gt; &gt; +    for (const auto&amp; localStorageNamespace : m_localStorageNamespaces.values())
&gt; 
&gt; I don’t think these const do much good.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/WebBackForwardList.cpp:371
&gt; &gt; -        for (size_t i = 0; i &lt; size; ++i) {
&gt; &gt; -            didRemoveItem(m_entries[i]);
&gt; &gt; -            removedItems.append(WTFMove(m_entries[i]));
&gt; &gt; -        }
&gt; &gt; +        for (auto&amp; entry : m_entries)
&gt; &gt; +            didRemoveItem(entry);
&gt; &gt;  
&gt; &gt; -        m_entries.clear();
&gt; &gt;          m_currentIndex = std::nullopt;
&gt; &gt; -        m_page-&gt;didChangeBackForwardList(nullptr, WTFMove(removedItems));
&gt; &gt; +        m_page-&gt;didChangeBackForwardList(nullptr, std::exchange(m_entries, { }));
&gt; 
&gt; Is this safe? Does didRemoveItem have any side effects that might be
&gt; sensitive to the change in algorithm here?

I looked at the implementation and didn’t find anything obviously risky. I think this is safe.

&gt; &gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:676
&gt; &gt; +        origins.reserveCapacity(origins.size() + dataRecord.origins.size());
&gt; 
&gt; Is this a good algorithm? Maybe shrinkToFit at the end is better.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:717
&gt; &gt; +                cookieHostNames.reserveCapacity(cookieHostNames.size() + dataRecord.cookieHostNames.size());
&gt; 
&gt; Same question. I always worry if we are manually expanding capacity, because
&gt; it can lead to too many resizes in theory.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/ios/TextCheckerIOS.mm:265
&gt; &gt; +                    detail.guesses = makeVector&lt;String&gt;(guesses);
&gt; 
&gt; Maybe even get rid of the local variable and do this as a one-liner?
&gt; 
&gt; &gt; Source/WebKit/WebProcess/WebPage/WebPage.cpp:7862
&gt; &gt;      Vector&lt;RefPtr&lt;SandboxExtension&gt;&gt; dragSandboxExtensions;
&gt; 
&gt; compactMap?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844065</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-20 08:51:00 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #8)
&gt; Comment on attachment 452649 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=452649&amp;action=review
&gt; 
&gt; Some of these places where we create one-element vectors are cases where the
&gt; receiving function should take a span so we don’t have to
&gt; allocate/deallocate vector storage on the heap just to pass one thing in.
&gt; 
&gt; I haven’t been able to spot whatever mistake is making tests fail.
&gt; 
&gt; Seems like even more of these could use WTF::map.
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBDatabase.cpp:182
&gt; &gt; +        // It is valid for javascript to pass in a list of object store names with the same name listed twice,
&gt; &gt; +        // so we need to put them all in a set to get a unique list.
&gt; &gt; +        HashSet&lt;String&gt; objectStoreSet;
&gt; &gt; +        objectStoreSet.add(objectStores.begin(), objectStores.end());
&gt; &gt; +        objectStores = copyToVector(objectStoreSet);
&gt; 
&gt; Not new: It is unpleasant this puts the strings in hash table order,
&gt; basically random. I would be tempted to use ListHashSet or sort afterward so
&gt; things work more consistently. Unless somehow the order of this vector
&gt; definitely does not matter.
&gt; 
&gt; In fact, removing duplicates from a list is probably not best done by
&gt; putting it into a hash table and then taking it back out. Could use
&gt; std::sort, std::unique, then remove past the end.
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBKeyData.h:171
&gt; &gt; +    add(hasher, keyData.isDeletedValue());
&gt; 
&gt; There is no good reason to include a boolean &quot;isDeletedValue&quot; in the hash.
&gt; If the deleted value is being used for hash tables, then those keys will
&gt; never be hashed. Also, leaving something out of the hash only causes hash
&gt; collisions, no other correctness problem.
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBTransaction.cpp:124
&gt; &gt; +    Vector&lt;String&gt; names = isVersionChange() ? m_database-&gt;info().objectStoreNames() : m_info.objectStores();
&gt; 
&gt; Doesn’t auto work?
&gt; 
&gt; &gt; Source/WebCore/Modules/mediasource/SourceBufferList.h:52
&gt; &gt;      unsigned long length() const { return m_list.size(); }
&gt; &gt; +
&gt; &gt;      SourceBuffer* item(unsigned long index) const { return (index &lt; m_list.size()) ? m_list[index].get() : nullptr; }
&gt; 
&gt; The &quot;unsigned long&quot; type here is not good.
&gt; 
&gt; &gt; Source/WebCore/dom/DOMStringList.h:51
&gt; &gt;      void append(const String&amp; string) { m_strings.append(string); }
&gt; &gt; +    void append(String&amp;&amp; string) { m_strings.append(WTFMove(string)); }
&gt; 
&gt; Not sure we need both of these; I think you can remove the const String&amp;
&gt; without changing behavior?
&gt; 
&gt; &gt; Source/WebCore/dom/FullscreenManager.cpp:269
&gt; &gt; +    topDocument.fullscreenManager().m_fullscreenElementStack = Vector { WTFMove(fullscrenElement) };
&gt; 
&gt; Is Vector needed here?
&gt; 
&gt; &gt; Source/WebCore/dom/LoadableScript.cpp:54
&gt; &gt; +    Ref protectedThis { *this };
&gt; 
&gt; Really should move this to callers. But maybe too risky at this time.
&gt; 
&gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3027
&gt; &gt;      Vector&lt;RefPtr&lt;WebGLShader&gt;&gt; shaderObjects;
&gt; &gt;      for (auto shaderType : shaderTypes) {
&gt; &gt; -        RefPtr&lt;WebGLShader&gt; shader = program.getAttachedShader(shaderType);
&gt; &gt; -        if (shader)
&gt; &gt; -            shaderObjects.append(shader);
&gt; &gt; +        if (RefPtr shader = program.getAttachedShader(shaderType))
&gt; &gt; +            shaderObjects.append(WTFMove(shader));
&gt; &gt;      }
&gt; &gt;      return shaderObjects;
&gt; 
&gt; Can we use compactMap?
&gt; 
&gt; &gt; Source/WebCore/html/parser/HTMLMetaCharsetParser.cpp:90
&gt; &gt;          String attributeName = StringImpl::create8BitIfPossible(attribute.name);
&gt; &gt;          String attributeValue = StringImpl::create8BitIfPossible(attribute.value);
&gt; 
&gt; Besides narrowing to 8-bit, maybe we should put these in the AtomString
&gt; table?
&gt; 
&gt; &gt; Source/WebCore/page/TextIndicator.cpp:373
&gt; &gt; +    data.textBoundingRectInRootViewCoordinates = WTFMove(textBoundingRectInRootViewCoordinates);
&gt; &gt; +    data.textRectsInBoundingRectCoordinates = WTFMove(textRectsInBoundingRectCoordinates);
&gt; 
&gt; We don’t need move rectangles. They are all scalars.
&gt; 
&gt; &gt; Source/WebCore/platform/audio/AudioDSPKernelProcessor.cpp:59
&gt; &gt; +        m_kernels.reserveCapacity(m_kernels.capacity() + numberOfChannels());
&gt; 
&gt; If this happens repeatedly, then maybe we *don’t* want to reserve the
&gt; exactly right amount of capacity, causing us to do a realloc each time. We
&gt; could do a single shrinkToFit at the very end if we are going to keep the
&gt; vector around.
&gt; 
&gt; &gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:66
&gt; &gt; -    m_preDelayBuffers.clear();
&gt; &gt; +    m_preDelayBuffers.shrink(0);
&gt; &gt;      for (unsigned i = 0; i &lt; numberOfChannels; ++i)
&gt; &gt;          m_preDelayBuffers.append(makeUnique&lt;AudioFloatArray&gt;(MaxPreDelayFrames));
&gt; &gt; +    m_preDelayBuffers.shrinkToFit();
&gt; 
&gt; Maybe we could use an idiom where we set capacity exactly here, and use
&gt; uncheckedAppend? Not sure how practical that is.
&gt; 
&gt; &gt; Source/WebCore/platform/gamepad/mac/LogitechGamepad.cpp:65
&gt; &gt; +            auto hatswitchValues = Vector&lt;SharedGamepadValue&gt;::from(
&gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterTop],
&gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterRight],
&gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterBottom],
&gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterLeft]
&gt; &gt; +            );
&gt; 
&gt; I don’t understand why this is Vector::from rather than just Vector with an
&gt; initializer list.
&gt; 
&gt; &gt; Source/WebCore/platform/gamepad/mac/StadiaHIDGamepad.cpp:76
&gt; &gt; +            auto hatswitchValues = Vector&lt;SharedGamepadValue&gt;::from(
&gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterTop],
&gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterRight],
&gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterBottom],
&gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterLeft]
&gt; &gt; +            );
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/PathUtilities.cpp:312
&gt; &gt; +    Vector&lt;Path&gt; paths;
&gt; 
&gt; reserveInitialCapacity(polys.size())?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm:71
&gt; &gt; +    auto map = defaultVariationValues(platformFont, shouldLocalizeAxisNames);
&gt; 
&gt; It sure does seem unnecessarily confusing to choose the name &quot;map&quot; for this
&gt; local. I think we can just do without the local variable. The next line of
&gt; code wouldn&apos;t be too long.
&gt; 
&gt; &gt; Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.cpp:81
&gt; &gt; +    segmentInfo.audioTracks.reserveInitialCapacity(segment.audioTracks.size());
&gt; &gt;      for (auto&amp; audioTrackInfo : segment.audioTracks) {
&gt; &gt;          auto identifier = m_remoteMediaPlayerProxy-&gt;addRemoteAudioTrackProxy(*audioTrackInfo.track);
&gt; &gt; -        segmentInfo.audioTracks.append({ MediaDescriptionInfo(*audioTrackInfo.description), identifier });
&gt; &gt; +        segmentInfo.audioTracks.uncheckedAppend({ MediaDescriptionInfo(*audioTrackInfo.description), identifier });
&gt; 
&gt; Could consider using WTF::map with a lambda with side effects here. After
&gt; all, map is defined to be called sequentially, it’s not a super-magical
&gt; parallel thing.
&gt; 
&gt; Same for the other two below.
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp:298
&gt; &gt; +    for (const auto&amp; localStorageNamespace : m_localStorageNamespaces.values())
&gt; 
&gt; I don’t think these const do much good.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/WebBackForwardList.cpp:371
&gt; &gt; -        for (size_t i = 0; i &lt; size; ++i) {
&gt; &gt; -            didRemoveItem(m_entries[i]);
&gt; &gt; -            removedItems.append(WTFMove(m_entries[i]));
&gt; &gt; -        }
&gt; &gt; +        for (auto&amp; entry : m_entries)
&gt; &gt; +            didRemoveItem(entry);
&gt; &gt;  
&gt; &gt; -        m_entries.clear();
&gt; &gt;          m_currentIndex = std::nullopt;
&gt; &gt; -        m_page-&gt;didChangeBackForwardList(nullptr, WTFMove(removedItems));
&gt; &gt; +        m_page-&gt;didChangeBackForwardList(nullptr, std::exchange(m_entries, { }));
&gt; 
&gt; Is this safe? Does didRemoveItem have any side effects that might be
&gt; sensitive to the change in algorithm here?
&gt; 
&gt; &gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:676
&gt; &gt; +        origins.reserveCapacity(origins.size() + dataRecord.origins.size());
&gt; 
&gt; Is this a good algorithm? Maybe shrinkToFit at the end is better.

Oh, maybe because the vector already has some initial capacity (16?). I’ll check and update as needed.

&gt; &gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:717
&gt; &gt; +                cookieHostNames.reserveCapacity(cookieHostNames.size() + dataRecord.cookieHostNames.size());
&gt; 
&gt; Same question. I always worry if we are manually expanding capacity, because
&gt; it can lead to too many resizes in theory.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/ios/TextCheckerIOS.mm:265
&gt; &gt; +                    detail.guesses = makeVector&lt;String&gt;(guesses);
&gt; 
&gt; Maybe even get rid of the local variable and do this as a one-liner?
&gt; 
&gt; &gt; Source/WebKit/WebProcess/WebPage/WebPage.cpp:7862
&gt; &gt;      Vector&lt;RefPtr&lt;SandboxExtension&gt;&gt; dragSandboxExtensions;
&gt; 
&gt; compactMap?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844066</commentid>
    <comment_count>14</comment_count>
      <attachid>452695</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-20 09:46:53 -0800</bug_when>
    <thetext>Created attachment 452695
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844067</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-20 09:53:35 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #13)
&gt; (In reply to Darin Adler from comment #8)
&gt; &gt; Comment on attachment 452649 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=452649&amp;action=review
&gt; &gt; 
&gt; &gt; Some of these places where we create one-element vectors are cases where the
&gt; &gt; receiving function should take a span so we don’t have to
&gt; &gt; allocate/deallocate vector storage on the heap just to pass one thing in.
&gt; &gt; 
&gt; &gt; I haven’t been able to spot whatever mistake is making tests fail.
&gt; &gt; 
&gt; &gt; Seems like even more of these could use WTF::map.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/Modules/indexeddb/IDBDatabase.cpp:182
&gt; &gt; &gt; +        // It is valid for javascript to pass in a list of object store names with the same name listed twice,
&gt; &gt; &gt; +        // so we need to put them all in a set to get a unique list.
&gt; &gt; &gt; +        HashSet&lt;String&gt; objectStoreSet;
&gt; &gt; &gt; +        objectStoreSet.add(objectStores.begin(), objectStores.end());
&gt; &gt; &gt; +        objectStores = copyToVector(objectStoreSet);
&gt; &gt; 
&gt; &gt; Not new: It is unpleasant this puts the strings in hash table order,
&gt; &gt; basically random. I would be tempted to use ListHashSet or sort afterward so
&gt; &gt; things work more consistently. Unless somehow the order of this vector
&gt; &gt; definitely does not matter.
&gt; &gt; 
&gt; &gt; In fact, removing duplicates from a list is probably not best done by
&gt; &gt; putting it into a hash table and then taking it back out. Could use
&gt; &gt; std::sort, std::unique, then remove past the end.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/Modules/indexeddb/IDBKeyData.h:171
&gt; &gt; &gt; +    add(hasher, keyData.isDeletedValue());
&gt; &gt; 
&gt; &gt; There is no good reason to include a boolean &quot;isDeletedValue&quot; in the hash.
&gt; &gt; If the deleted value is being used for hash tables, then those keys will
&gt; &gt; never be hashed. Also, leaving something out of the hash only causes hash
&gt; &gt; collisions, no other correctness problem.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/Modules/indexeddb/IDBTransaction.cpp:124
&gt; &gt; &gt; +    Vector&lt;String&gt; names = isVersionChange() ? m_database-&gt;info().objectStoreNames() : m_info.objectStores();
&gt; &gt; 
&gt; &gt; Doesn’t auto work?
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/Modules/mediasource/SourceBufferList.h:52
&gt; &gt; &gt;      unsigned long length() const { return m_list.size(); }
&gt; &gt; &gt; +
&gt; &gt; &gt;      SourceBuffer* item(unsigned long index) const { return (index &lt; m_list.size()) ? m_list[index].get() : nullptr; }
&gt; &gt; 
&gt; &gt; The &quot;unsigned long&quot; type here is not good.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/dom/DOMStringList.h:51
&gt; &gt; &gt;      void append(const String&amp; string) { m_strings.append(string); }
&gt; &gt; &gt; +    void append(String&amp;&amp; string) { m_strings.append(WTFMove(string)); }
&gt; &gt; 
&gt; &gt; Not sure we need both of these; I think you can remove the const String&amp;
&gt; &gt; without changing behavior?
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/dom/FullscreenManager.cpp:269
&gt; &gt; &gt; +    topDocument.fullscreenManager().m_fullscreenElementStack = Vector { WTFMove(fullscrenElement) };
&gt; &gt; 
&gt; &gt; Is Vector needed here?
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/dom/LoadableScript.cpp:54
&gt; &gt; &gt; +    Ref protectedThis { *this };
&gt; &gt; 
&gt; &gt; Really should move this to callers. But maybe too risky at this time.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3027
&gt; &gt; &gt;      Vector&lt;RefPtr&lt;WebGLShader&gt;&gt; shaderObjects;
&gt; &gt; &gt;      for (auto shaderType : shaderTypes) {
&gt; &gt; &gt; -        RefPtr&lt;WebGLShader&gt; shader = program.getAttachedShader(shaderType);
&gt; &gt; &gt; -        if (shader)
&gt; &gt; &gt; -            shaderObjects.append(shader);
&gt; &gt; &gt; +        if (RefPtr shader = program.getAttachedShader(shaderType))
&gt; &gt; &gt; +            shaderObjects.append(WTFMove(shader));
&gt; &gt; &gt;      }
&gt; &gt; &gt;      return shaderObjects;
&gt; &gt; 
&gt; &gt; Can we use compactMap?
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/html/parser/HTMLMetaCharsetParser.cpp:90
&gt; &gt; &gt;          String attributeName = StringImpl::create8BitIfPossible(attribute.name);
&gt; &gt; &gt;          String attributeValue = StringImpl::create8BitIfPossible(attribute.value);
&gt; &gt; 
&gt; &gt; Besides narrowing to 8-bit, maybe we should put these in the AtomString
&gt; &gt; table?
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/page/TextIndicator.cpp:373
&gt; &gt; &gt; +    data.textBoundingRectInRootViewCoordinates = WTFMove(textBoundingRectInRootViewCoordinates);
&gt; &gt; &gt; +    data.textRectsInBoundingRectCoordinates = WTFMove(textRectsInBoundingRectCoordinates);
&gt; &gt; 
&gt; &gt; We don’t need move rectangles. They are all scalars.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/audio/AudioDSPKernelProcessor.cpp:59
&gt; &gt; &gt; +        m_kernels.reserveCapacity(m_kernels.capacity() + numberOfChannels());
&gt; &gt; 
&gt; &gt; If this happens repeatedly, then maybe we *don’t* want to reserve the
&gt; &gt; exactly right amount of capacity, causing us to do a realloc each time. We
&gt; &gt; could do a single shrinkToFit at the very end if we are going to keep the
&gt; &gt; vector around.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:66
&gt; &gt; &gt; -    m_preDelayBuffers.clear();
&gt; &gt; &gt; +    m_preDelayBuffers.shrink(0);
&gt; &gt; &gt;      for (unsigned i = 0; i &lt; numberOfChannels; ++i)
&gt; &gt; &gt;          m_preDelayBuffers.append(makeUnique&lt;AudioFloatArray&gt;(MaxPreDelayFrames));
&gt; &gt; &gt; +    m_preDelayBuffers.shrinkToFit();
&gt; &gt; 
&gt; &gt; Maybe we could use an idiom where we set capacity exactly here, and use
&gt; &gt; uncheckedAppend? Not sure how practical that is.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/gamepad/mac/LogitechGamepad.cpp:65
&gt; &gt; &gt; +            auto hatswitchValues = Vector&lt;SharedGamepadValue&gt;::from(
&gt; &gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterTop],
&gt; &gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterRight],
&gt; &gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterBottom],
&gt; &gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterLeft]
&gt; &gt; &gt; +            );
&gt; &gt; 
&gt; &gt; I don’t understand why this is Vector::from rather than just Vector with an
&gt; &gt; initializer list.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/gamepad/mac/StadiaHIDGamepad.cpp:76
&gt; &gt; &gt; +            auto hatswitchValues = Vector&lt;SharedGamepadValue&gt;::from(
&gt; &gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterTop],
&gt; &gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterRight],
&gt; &gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterBottom],
&gt; &gt; &gt; +                m_buttonValues[(size_t)GamepadButtonRole::LeftClusterLeft]
&gt; &gt; &gt; +            );
&gt; &gt; 
&gt; &gt; Ditto.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/PathUtilities.cpp:312
&gt; &gt; &gt; +    Vector&lt;Path&gt; paths;
&gt; &gt; 
&gt; &gt; reserveInitialCapacity(polys.size())?
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm:71
&gt; &gt; &gt; +    auto map = defaultVariationValues(platformFont, shouldLocalizeAxisNames);
&gt; &gt; 
&gt; &gt; It sure does seem unnecessarily confusing to choose the name &quot;map&quot; for this
&gt; &gt; local. I think we can just do without the local variable. The next line of
&gt; &gt; code wouldn&apos;t be too long.
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.cpp:81
&gt; &gt; &gt; +    segmentInfo.audioTracks.reserveInitialCapacity(segment.audioTracks.size());
&gt; &gt; &gt;      for (auto&amp; audioTrackInfo : segment.audioTracks) {
&gt; &gt; &gt;          auto identifier = m_remoteMediaPlayerProxy-&gt;addRemoteAudioTrackProxy(*audioTrackInfo.track);
&gt; &gt; &gt; -        segmentInfo.audioTracks.append({ MediaDescriptionInfo(*audioTrackInfo.description), identifier });
&gt; &gt; &gt; +        segmentInfo.audioTracks.uncheckedAppend({ MediaDescriptionInfo(*audioTrackInfo.description), identifier });
&gt; &gt; 
&gt; &gt; Could consider using WTF::map with a lambda with side effects here. After
&gt; &gt; all, map is defined to be called sequentially, it’s not a super-magical
&gt; &gt; parallel thing.
&gt; &gt; 
&gt; &gt; Same for the other two below.
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp:298
&gt; &gt; &gt; +    for (const auto&amp; localStorageNamespace : m_localStorageNamespaces.values())
&gt; &gt; 
&gt; &gt; I don’t think these const do much good.
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/UIProcess/WebBackForwardList.cpp:371
&gt; &gt; &gt; -        for (size_t i = 0; i &lt; size; ++i) {
&gt; &gt; &gt; -            didRemoveItem(m_entries[i]);
&gt; &gt; &gt; -            removedItems.append(WTFMove(m_entries[i]));
&gt; &gt; &gt; -        }
&gt; &gt; &gt; +        for (auto&amp; entry : m_entries)
&gt; &gt; &gt; +            didRemoveItem(entry);
&gt; &gt; &gt;  
&gt; &gt; &gt; -        m_entries.clear();
&gt; &gt; &gt;          m_currentIndex = std::nullopt;
&gt; &gt; &gt; -        m_page-&gt;didChangeBackForwardList(nullptr, WTFMove(removedItems));
&gt; &gt; &gt; +        m_page-&gt;didChangeBackForwardList(nullptr, std::exchange(m_entries, { }));
&gt; &gt; 
&gt; &gt; Is this safe? Does didRemoveItem have any side effects that might be
&gt; &gt; sensitive to the change in algorithm here?
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:676
&gt; &gt; &gt; +        origins.reserveCapacity(origins.size() + dataRecord.origins.size());
&gt; &gt; 
&gt; &gt; Is this a good algorithm? Maybe shrinkToFit at the end is better.
&gt; 
&gt; Oh, maybe because the vector already has some initial capacity (16?). I’ll
&gt; check and update as needed.

Ok, I double checked. Vectors do start with an initial (minimum capacity) which is 16 by default and configurable via template parameters. As a result, my calls to reserveCapacity() would indeed result in possibility unnecessary allocations IF reserveCapacity() were to reduce the pre-existing capacity.

However, reserveCapacity() bails early if the new capacity is smaller or equal to the existing one. As a result, I think my code was correct and would only increase the capacity to something that we know for sure we&apos;ll need in the following loop.

I have however removed those changes from my patch to facilitate landing and in case there is still an issue with my approach that I didn&apos;t understand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844073</commentid>
    <comment_count>16</comment_count>
      <attachid>452697</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-20 11:32:28 -0800</bug_when>
    <thetext>Created attachment 452697
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844112</commentid>
    <comment_count>17</comment_count>
      <attachid>452711</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-20 23:07:31 -0800</bug_when>
    <thetext>Created attachment 452711
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844219</commentid>
    <comment_count>18</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-21 08:20:57 -0800</bug_when>
    <thetext>The iOS failure doesn&apos;t look related:
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   org.webkit.WebKitTestRunnerApp	0x000000010f19b9a3 WTFCrashWithInfo(int, char const*, char const*, int) + 19
1   org.webkit.WebKitTestRunnerApp	0x000000010f1ceaf0 WTR::TestInvocation::runUISideScriptImmediately(OpaqueWKError const*, void*) + 98
2   com.apple.WebKit              	0x0000000116237854 WebKit::GenericCallback&lt;&gt;::performCallbackWithReturnValue() + 40
3   com.apple.WebKit              	0x0000000116233930 WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree(WebKit::RemoteLayerTreeTransaction const&amp;, WebKit::RemoteScrollingCoordinatorTransaction const&amp;) + 594
4   com.apple.WebKit              	0x0000000115f44d3b WebKit::RemoteLayerTreeDrawingAreaProxy::didReceiveMessage(IPC::Connection&amp;, IPC::Decoder&amp;) + 273
5   com.apple.WebKit              	0x00000001161d2eae IPC::MessageReceiverMap::dispatchMessage(IPC::Connection&amp;, IPC::Decoder&amp;) + 224

Based on https://results.webkit.org/?suite=layout-tests&amp;test=editing%2Fspelling%2Fediting-word-with-marker-2.html, it appears it is a flaky crash on the bots already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844270</commentid>
    <comment_count>19</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-21 10:41:45 -0800</bug_when>
    <thetext>Here’s the capacity story:

1) Adding to a vector has an algorithm to balance memory use with excessive reallocation, designed so that it’s not pathologically slow in any case.

2) If we were to reserve capacity every time we added an element (straw person example because no one would do that), then it would be pathologically slow.

3) When we know the exact size we can reserve capacity exactly once, which is *always* a win over the more than one times we’d reallocate, and also has the same or better memory benefits as shrinkToFit.

4) When we are *growing* by an exact size, reserving the capacity might be a win, but might screw up the algorithm. For example, if we happened to be growing by a single element each time, but doing that many times repeatedly, then this would give us the same problem as (2) above.

5) If our main concern is the total memory use at the end, and it’s like (4) above, then it’s possible we should just append and not do any capacity reserving and then shrinkToFit at the end.

6) It’s possible we could design the perfect idiom for growing a bunch at a time. Maybe reserveCapacity already has the smarts to avoid pathological edge cases and I just don’t realize it?

So while I *always* know that reserving capacity for the entire size of a vector is good without thinking deeply, reserving as we grow might actually not be as good and it’s trickier to be sure we are right. That’s my concern. Maybe I am wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844274</commentid>
    <comment_count>20</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-21 10:50:02 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #19)
&gt; Here’s the capacity story:
&gt; 
&gt; 1) Adding to a vector has an algorithm to balance memory use with excessive
&gt; reallocation, designed so that it’s not pathologically slow in any case.

Indeed, appendSlow() calls expandCapacity(size + 1), which calls expandCapacity(size + 1), which calls:
`return reserveCapacity&lt;action&gt;(std::max(newMinCapacity, std::max(static_cast&lt;size_t&gt;(minCapacity), capacity() + capacity() / 4 + 1)));`

The `std::max(static_cast&lt;size_t&gt;(minCapacity), capacity() + capacity() / 4 + 1)` logic is likely the optimization you are referring to.
However, as I pointed out earlier, reserveCapacity() will just bail out early if the new capacity is smaller than (or the same as) the new one.

As a result, my extra calls to reserveCapacity() would not invalidate this optimization in expandCapacity(). Worse case scenario, we already have the capacity due to the optimization you mentioned and my new reserveCapacity() calls will be a no-op.
Best case scenario, we don&apos;t already have the capacity and my new reserveCapacity() calls will allocate enough capacity for the next loop.

Again, I took those out of my latest patch iteration as it seems a bit controversial.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844317</commentid>
    <comment_count>21</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-21 12:17:59 -0800</bug_when>
    <thetext>Yes, was just trying to convey this concern so we can figure it out for the future. I understand it’s no longer about this patch.

The risk I see is that reserveCapacity may result in a larger number of smaller-sized reallocations than if we hadn’t done reserveCapacity. If this happens it could hurt performance. I agree that there is no risk that reserveCapacity will allocate too much memory and no risk that it will shrink capacity. Because reserveCapacity allocates precise amounts of additional capacity, whereas expandCapacity intentionally allocates more to avoid pathologically large number of reallocations.

I am not saying that this is a problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844319</commentid>
    <comment_count>22</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-21 12:20:24 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #21)
&gt; Yes, was just trying to convey this concern so we can figure it out for the
&gt; future. I understand it’s no longer about this patch.
&gt; 
&gt; The risk I see is that reserveCapacity may result in a larger number of
&gt; smaller-sized reallocations than if we hadn’t done reserveCapacity. If this
&gt; happens it could hurt performance. I agree that there is no risk that
&gt; reserveCapacity will allocate too much memory and no risk that it will
&gt; shrink capacity. Because reserveCapacity allocates precise amounts of
&gt; additional capacity, whereas expandCapacity intentionally allocates more to
&gt; avoid pathologically large number of reallocations.
&gt; 
&gt; I am not saying that this is a problem.

Oh I see. Yes, I believe you&apos;re right that my potentially smaller reserveCapacity() calls could in theory hurt performance if append() would have reserved more. I think it is better not to make the change I suggested then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844686</commentid>
    <comment_count>23</comment_count>
      <attachid>452870</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-22 07:18:26 -0800</bug_when>
    <thetext>Created attachment 452870
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844730</commentid>
    <comment_count>24</comment_count>
      <attachid>452870</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-22 08:45:00 -0800</bug_when>
    <thetext>Comment on attachment 452870
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=452870&amp;action=review

Hope I’m just not just writing the same comments again. I can’t remember what is new here.

&gt; Source/WTF/wtf/cf/LanguageCF.cpp:109
&gt;      Vector&lt;String&gt; languages;
&gt; +    languages.reserveInitialCapacity(platformLanguagesCount);
&gt;      for (CFIndex i = 0; i &lt; platformLanguagesCount; i++) {
&gt;          auto platformLanguage = static_cast&lt;CFStringRef&gt;(CFArrayGetValueAtIndex(platformLanguages.get(), i));
&gt; -        languages.append(httpStyleLanguageCode(platformLanguage, shouldMinimizeLanguages));
&gt; +        languages.uncheckedAppend(httpStyleLanguageCode(platformLanguage, shouldMinimizeLanguages));
&gt;      }

Makes me think we should have a makeVector for CF in a VectorCF.h that is like VectorCocoa.h, because this would be nicer:

    auto languages = makeVector(platformLanguages.get(), [shouldMinimizeLanguages](CFTypeRef language) {
        return httpStyleLanguageCode(checked_cf_cast&lt;CFStringRef&gt;(language), shouldMinimizeLanguages);
    });

&gt; Source/WebCore/Modules/applepay/cocoa/PaymentMethodCocoa.mm:105
&gt; +        result.addressLines = Vector { String { street } };

I don’t think we need Vector here.

&gt; Source/WebCore/Modules/indexeddb/IDBDatabase.cpp:182
&gt; +        // It is valid for javascript to pass in a list of object store names with the same name listed twice,
&gt; +        // so we need to put them all in a set to get a unique list.
&gt; +        HashSet&lt;String&gt; objectStoreSet;
&gt; +        objectStoreSet.add(objectStores.begin(), objectStores.end());
&gt; +        objectStores = copyToVector(objectStoreSet);

I made some of these comments already, but four comments on this moved code:

1) To actually get the optimization pretty sure we need to call WTFMove on storeNames rather than on the result of std::get.
2) JavaScript rather than javascript.
3) Why doesn’t HashSet have a constructor that takes a pair of iterators?
4) Building a set is not a great way to remove duplicates. A ListHashSet would be better because it preserves ordering rather than accidentally scrambling ordering using hashing resulting in a pseudo-random ordering. An algorithm using std::sort and std::unique would be even better, significantly more efficient, and yields a sorted results rather than a pseudo-random one.
5) Even if we don’t change the algorithm as suggested in (4), the operation of &quot;remove duplicates from a Vector&lt;String&gt;&quot; seems like it should be broken out into a separate function; maybe one that takes an rvalue reference to a vector and return a vector.

    objectStores = removeDuplicates(std::get&lt;Vector&lt;String&gt;&gt;(WTFMove(storeNames)));
    objectStores = sortAndRemoveDuplicates(std::get&lt;Vector&lt;String&gt;&gt;(WTFMove(storeNames)));
    objectStores = sortUnique(std::get&lt;Vector&lt;String&gt;&gt;(WTFMove(storeNames)));

Note that it seems obvious once you have to name the function that &quot;remove duplicates and scramble the order&quot; is not a good semantic.

&gt; Source/WebCore/Modules/indexeddb/IDBDatabase.cpp:184
&gt;          objectStores.append(WTFMove(std::get&lt;String&gt;(storeNames)));

Calling append is not a great way to create a single-element vector. Maybe this:

    objectStores = { std::get&lt;String&gt;(WTFMove(storeNames)) };

&gt; Source/WebCore/Modules/indexeddb/IDBKeyData.h:168
&gt; +    add(hasher, keyData.isNull());

Is the other data to hash when the data is null? Maybe we need an if statement or early return?

&gt; Source/WebCore/Modules/mediasource/SourceBufferList.h:63
&gt;      Vector&lt;RefPtr&lt;SourceBuffer&gt;&gt;::iterator begin() { return m_list.begin(); }
&gt;      Vector&lt;RefPtr&lt;SourceBuffer&gt;&gt;::iterator end() { return m_list.end(); }
&gt; +    Vector&lt;RefPtr&lt;SourceBuffer&gt;&gt;::const_iterator begin() const { return m_list.begin(); }
&gt; +    Vector&lt;RefPtr&lt;SourceBuffer&gt;&gt;::const_iterator end() const { return m_list.end(); }

I think we can use &quot;auto&quot; for these return types. And many other return types, but these seem to particularly benefit from it.

&gt; Source/WebCore/Modules/speech/cocoa/WebSpeechRecognizerTask.mm:132
&gt; +    SpeechRecognitionResultData data { WTFMove(alternatives), !!isFinal };
&gt; +    _delegateCallback(SpeechRecognitionUpdate::createResult(_identifier, { WTFMove(data) }));

Might read better as a one liner since we would need one less WTFMove.

&gt; Source/WebCore/Modules/speech/cocoa/WebSpeechRecognizerTaskMock.mm:68
&gt; +    SpeechRecognitionAlternativeData alternative { &quot;Test&quot;, 1.0 };
&gt; +    SpeechRecognitionResultData data { { WTFMove(alternative) }, true };
&gt; +    _delegateCallback(SpeechRecognitionUpdate::createResult(_identifier, { WTFMove(data) }));

Similar thought.

&gt; Source/WebCore/dom/DOMStringList.h:64
&gt; +    { }

I usually format these braces vertically, when the part above is formatted vertically. I suppose we should choose one style or the other for the future here.

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:214
&gt; +        records.reserveCapacity(records.size() + value.size());
&gt;          for (auto&amp; record : value)
&gt; -            records.append(record);
&gt; +            records.uncheckedAppend(record);

I thought we discussed not making this change.

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:688
&gt; +        keys.reserveCapacity(keys.size() + records.size());
&gt;          for (auto&amp; record : records)
&gt; -            keys.append(record.key);
&gt; +            keys.uncheckedAppend(record.key);

Ditto.

&gt; Source/WebKit/NetworkProcess/storage/SQLiteStorageArea.cpp:74
&gt; +    m_cachedStatements.reserveInitialCapacity(static_cast&lt;size_t&gt;(StatementType::Invalid));
&gt;      for (size_t i = 0; i &lt; static_cast&lt;size_t&gt;(StatementType::Invalid); ++i)
&gt; -        m_cachedStatements.append(nullptr);
&gt; +        m_cachedStatements.uncheckedAppend(nullptr);

Should be:

    m_cachedStatements = Vector&lt;std::unique_ptr&lt;WebCore::SQLiteStatement&gt;&gt;(static_cast&lt;size_t&gt;(StatementType::Invalid), nullptr);

Or something roughly like that. No loop.

&gt; Source/WebKit/Shared/ApplePay/WebPaymentCoordinatorProxy.cpp:97
&gt; +        return URL(URL(), linkIconURLString);

We really have to fix the URL class so this super-common operation can be written in a less bizarre way!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844745</commentid>
    <comment_count>25</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-22 09:23:11 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #24)
&gt; Comment on attachment 452870 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=452870&amp;action=review
&gt; 
&gt; Hope I’m just not just writing the same comments again. I can’t remember
&gt; what is new here.
&gt; 
&gt; &gt; Source/WTF/wtf/cf/LanguageCF.cpp:109
&gt; &gt;      Vector&lt;String&gt; languages;
&gt; &gt; +    languages.reserveInitialCapacity(platformLanguagesCount);
&gt; &gt;      for (CFIndex i = 0; i &lt; platformLanguagesCount; i++) {
&gt; &gt;          auto platformLanguage = static_cast&lt;CFStringRef&gt;(CFArrayGetValueAtIndex(platformLanguages.get(), i));
&gt; &gt; -        languages.append(httpStyleLanguageCode(platformLanguage, shouldMinimizeLanguages));
&gt; &gt; +        languages.uncheckedAppend(httpStyleLanguageCode(platformLanguage, shouldMinimizeLanguages));
&gt; &gt;      }
&gt; 
&gt; Makes me think we should have a makeVector for CF in a VectorCF.h that is
&gt; like VectorCocoa.h, because this would be nicer:
&gt; 
&gt;     auto languages = makeVector(platformLanguages.get(),
&gt; [shouldMinimizeLanguages](CFTypeRef language) {
&gt;         return httpStyleLanguageCode(checked_cf_cast&lt;CFStringRef&gt;(language),
&gt; shouldMinimizeLanguages);
&gt;     });

Yes, I think this would be nice. However, I&apos;d rather not make such a change this is already large patch.

&gt; 
&gt; &gt; Source/WebCore/Modules/applepay/cocoa/PaymentMethodCocoa.mm:105
&gt; &gt; +        result.addressLines = Vector { String { street } };
&gt; 
&gt; I don’t think we need Vector here.

I thought I tried that and it didn&apos;t build but I may be misremembering. I&apos;ll try again.

&gt; &gt; Source/WebCore/Modules/indexeddb/IDBDatabase.cpp:182
&gt; &gt; +        // It is valid for javascript to pass in a list of object store names with the same name listed twice,
&gt; &gt; +        // so we need to put them all in a set to get a unique list.
&gt; &gt; +        HashSet&lt;String&gt; objectStoreSet;
&gt; &gt; +        objectStoreSet.add(objectStores.begin(), objectStores.end());
&gt; &gt; +        objectStores = copyToVector(objectStoreSet);
&gt; 
&gt; I made some of these comments already, but four comments on this moved code:
&gt; 
&gt; 1) To actually get the optimization pretty sure we need to call WTFMove on
&gt; storeNames rather than on the result of std::get.
&gt; 2) JavaScript rather than javascript.
&gt; 3) Why doesn’t HashSet have a constructor that takes a pair of iterators?
&gt; 4) Building a set is not a great way to remove duplicates. A ListHashSet
&gt; would be better because it preserves ordering rather than accidentally
&gt; scrambling ordering using hashing resulting in a pseudo-random ordering. An
&gt; algorithm using std::sort and std::unique would be even better,
&gt; significantly more efficient, and yields a sorted results rather than a
&gt; pseudo-random one.
&gt; 5) Even if we don’t change the algorithm as suggested in (4), the operation
&gt; of &quot;remove duplicates from a Vector&lt;String&gt;&quot; seems like it should be broken
&gt; out into a separate function; maybe one that takes an rvalue reference to a
&gt; vector and return a vector.
&gt; 
&gt;     objectStores =
&gt; removeDuplicates(std::get&lt;Vector&lt;String&gt;&gt;(WTFMove(storeNames)));
&gt;     objectStores =
&gt; sortAndRemoveDuplicates(std::get&lt;Vector&lt;String&gt;&gt;(WTFMove(storeNames)));
&gt;     objectStores = sortUnique(std::get&lt;Vector&lt;String&gt;&gt;(WTFMove(storeNames)));
&gt; 
&gt; Note that it seems obvious once you have to name the function that &quot;remove
&gt; duplicates and scramble the order&quot; is not a good semantic.

This is pre-existing code and my patch didn&apos;t make things worse AFAICT. However, I will adopt sort + unique in this patch.

&gt; &gt; Source/WebCore/Modules/indexeddb/IDBDatabase.cpp:184
&gt; &gt;          objectStores.append(WTFMove(std::get&lt;String&gt;(storeNames)));
&gt; 
&gt; Calling append is not a great way to create a single-element vector. Maybe
&gt; this:
&gt; 
&gt;     objectStores = { std::get&lt;String&gt;(WTFMove(storeNames)) };

Ok.

&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBKeyData.h:168
&gt; &gt; +    add(hasher, keyData.isNull());
&gt; 
&gt; Is the other data to hash when the data is null? Maybe we need an if
&gt; statement or early return?

This is pre-existing logic but I suspect you are right. I&apos;ll double check and fix if needed.

&gt; 
&gt; &gt; Source/WebCore/Modules/mediasource/SourceBufferList.h:63
&gt; &gt;      Vector&lt;RefPtr&lt;SourceBuffer&gt;&gt;::iterator begin() { return m_list.begin(); }
&gt; &gt;      Vector&lt;RefPtr&lt;SourceBuffer&gt;&gt;::iterator end() { return m_list.end(); }
&gt; &gt; +    Vector&lt;RefPtr&lt;SourceBuffer&gt;&gt;::const_iterator begin() const { return m_list.begin(); }
&gt; &gt; +    Vector&lt;RefPtr&lt;SourceBuffer&gt;&gt;::const_iterator end() const { return m_list.end(); }
&gt; 
&gt; I think we can use &quot;auto&quot; for these return types. And many other return
&gt; types, but these seem to particularly benefit from it.

OK.

&gt; &gt; Source/WebCore/Modules/speech/cocoa/WebSpeechRecognizerTask.mm:132
&gt; &gt; +    SpeechRecognitionResultData data { WTFMove(alternatives), !!isFinal };
&gt; &gt; +    _delegateCallback(SpeechRecognitionUpdate::createResult(_identifier, { WTFMove(data) }));
&gt; 
&gt; Might read better as a one liner since we would need one less WTFMove.

OK.

&gt; 
&gt; &gt; Source/WebCore/Modules/speech/cocoa/WebSpeechRecognizerTaskMock.mm:68
&gt; &gt; +    SpeechRecognitionAlternativeData alternative { &quot;Test&quot;, 1.0 };
&gt; &gt; +    SpeechRecognitionResultData data { { WTFMove(alternative) }, true };
&gt; &gt; +    _delegateCallback(SpeechRecognitionUpdate::createResult(_identifier, { WTFMove(data) }));
&gt; 
&gt; Similar thought.

OK.

&gt; &gt; Source/WebCore/dom/DOMStringList.h:64
&gt; &gt; +    { }
&gt; 
&gt; I usually format these braces vertically, when the part above is formatted
&gt; vertically. I suppose we should choose one style or the other for the future
&gt; here.
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:214
&gt; &gt; +        records.reserveCapacity(records.size() + value.size());
&gt; &gt;          for (auto&amp; record : value)
&gt; &gt; -            records.append(record);
&gt; &gt; +            records.uncheckedAppend(record);
&gt; 
&gt; I thought we discussed not making this change.

We did and I did drop it at some point, not sure what happened. I may have messed up with GIT and re-uploaded an older iteration. I&apos;ll drop again, sorry about that.

&gt; &gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:688
&gt; &gt; +        keys.reserveCapacity(keys.size() + records.size());
&gt; &gt;          for (auto&amp; record : records)
&gt; &gt; -            keys.append(record.key);
&gt; &gt; +            keys.uncheckedAppend(record.key);
&gt; 
&gt; Ditto.

Will drop.

&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/storage/SQLiteStorageArea.cpp:74
&gt; &gt; +    m_cachedStatements.reserveInitialCapacity(static_cast&lt;size_t&gt;(StatementType::Invalid));
&gt; &gt;      for (size_t i = 0; i &lt; static_cast&lt;size_t&gt;(StatementType::Invalid); ++i)
&gt; &gt; -        m_cachedStatements.append(nullptr);
&gt; &gt; +        m_cachedStatements.uncheckedAppend(nullptr);
&gt; 
&gt; Should be:
&gt; 
&gt;     m_cachedStatements =
&gt; Vector&lt;std::unique_ptr&lt;WebCore::
&gt; SQLiteStatement&gt;&gt;(static_cast&lt;size_t&gt;(StatementType::Invalid), nullptr);
&gt; 
&gt; Or something roughly like that. No loop.

I had thought of that and had tried it. We could even move it to the initializer list if it worked. Sadly, the compiler doesn&apos;t seem to like it.
```
In file included from /Volumes/Data/WebKit/OpenSource/WebKitBuild/Release/DerivedSources/WebKit/unified-sources/UnifiedSource31.cpp:1:
In file included from /Volumes/Data/WebKit/OpenSource/Source/WebKit/NetworkProcess/storage/MemoryStorageArea.cpp:27:
In file included from /Volumes/Data/WebKit/OpenSource/Source/WebKit/NetworkProcess/storage/MemoryStorageArea.h:28:
In file included from /Volumes/Data/WebKit/OpenSource/Source/WebKit/NetworkProcess/storage/StorageAreaBase.h:28:
In file included from /Volumes/Data/WebKit/OpenSource/Source/WebKit/Platform/IPC/Connection.h:31:
In file included from /Volumes/Data/WebKit/OpenSource/Source/WebKit/Platform/IPC/Decoder.h:32:
/Volumes/Data/WebKit/OpenSource/WebKitBuild/Release/usr/local/include/wtf/Vector.h:200:32: error: call to implicitly-deleted copy constructor of &apos;std::unique_ptr&lt;WebCore::SQLiteStatement&gt;&apos;
            new (NotNull, dst) T(val);
/Volumes/Data/WebKit/OpenSource/WebKitBuild/Release/usr/local/include/wtf/Vector.h:275:62: note: in instantiation of member function &apos;WTF::VectorFiller&lt;false, std::unique_ptr&lt;WebCore::SQLiteStatement&gt;&gt;::uninitializedFill&apos; requested here
        VectorFiller&lt;VectorTraits&lt;T&gt;::canFillWithMemset, T&gt;::uninitializedFill(dst, dstEnd, val);
/Volumes/Data/WebKit/OpenSource/WebKitBuild/Release/usr/local/include/wtf/Vector.h:645:29: note: in instantiation of member function &apos;WTF::VectorTypeOperations&lt;std::unique_ptr&lt;WebCore::SQLiteStatement&gt;&gt;::uninitializedFill&apos; requested here
            TypeOperations::uninitializedFill(begin(), end(), val);
In file included from /Volumes/Data/WebKit/OpenSource/WebKitBuild/Release/DerivedSources/WebKit/unified-sources/UnifiedSource31.cpp:5:
/Volumes/Data/WebKit/OpenSource/Source/WebKit/NetworkProcess/storage/SQLiteStorageArea.cpp:75:26: note: in instantiation of member function &apos;WTF::Vector&lt;std::unique_ptr&lt;WebCore::SQLiteStatement&gt;, 0, WTF::CrashOnOverflow, 16&gt;::Vector&apos; requested here
    m_cachedStatements = Vector&lt;std::unique_ptr&lt;WebCore::SQLiteStatement&gt;&gt;(static_cast&lt;size_t&gt;(StatementType::Invalid), nullptr);
In file included from /Volumes/Data/WebKit/OpenSource/WebKitBuild/Release/DerivedSources/WebKit/unified-sources/UnifiedSource31.cpp:1:
In file included from /Volumes/Data/WebKit/OpenSource/Source/WebKit/WebKit2Prefix.h:72:
In file included from /usr/include/c++/v1/algorithm:653:
/usr/include/c++/v1/memory:1584:3: note: copy constructor is implicitly deleted because &apos;unique_ptr&lt;WebCore::SQLiteStatement&gt;&apos; has a user-declared move constructor
  unique_ptr(unique_ptr&amp;&amp; __u) _NOEXCEPT
  ^
1 error generated.
```

I will try a bit more but I may not be able to do it.

&gt; 
&gt; &gt; Source/WebKit/Shared/ApplePay/WebPaymentCoordinatorProxy.cpp:97
&gt; &gt; +        return URL(URL(), linkIconURLString);
&gt; 
&gt; We really have to fix the URL class so this super-common operation can be
&gt; written in a less bizarre way!

Yes, I agree. I&apos;ll look into it. Maybe in a follow-up. Or maybe I can just add a new constructor, adopt it only here in this patch and follow-up for wider adoption.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844748</commentid>
    <comment_count>26</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-22 09:26:55 -0800</bug_when>
    <thetext>Not trying to get you to do all of this in one patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844749</commentid>
    <comment_count>27</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-22 09:29:48 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #25)
&gt; (In reply to Darin Adler from comment #24)
&gt; &gt; Comment on attachment 452870 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=452870&amp;action=review
&gt; &gt; 
&gt; &gt; Hope I’m just not just writing the same comments again. I can’t remember
&gt; &gt; what is new here.
&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/cf/LanguageCF.cpp:109
&gt; &gt; &gt;      Vector&lt;String&gt; languages;
&gt; &gt; &gt; +    languages.reserveInitialCapacity(platformLanguagesCount);
&gt; &gt; &gt;      for (CFIndex i = 0; i &lt; platformLanguagesCount; i++) {
&gt; &gt; &gt;          auto platformLanguage = static_cast&lt;CFStringRef&gt;(CFArrayGetValueAtIndex(platformLanguages.get(), i));
&gt; &gt; &gt; -        languages.append(httpStyleLanguageCode(platformLanguage, shouldMinimizeLanguages));
&gt; &gt; &gt; +        languages.uncheckedAppend(httpStyleLanguageCode(platformLanguage, shouldMinimizeLanguages));
&gt; &gt; &gt;      }
&gt; &gt; 
&gt; &gt; Makes me think we should have a makeVector for CF in a VectorCF.h that is
&gt; &gt; like VectorCocoa.h, because this would be nicer:
&gt; &gt; 
&gt; &gt;     auto languages = makeVector(platformLanguages.get(),
&gt; &gt; [shouldMinimizeLanguages](CFTypeRef language) {
&gt; &gt;         return httpStyleLanguageCode(checked_cf_cast&lt;CFStringRef&gt;(language),
&gt; &gt; shouldMinimizeLanguages);
&gt; &gt;     });
&gt; 
&gt; Yes, I think this would be nice. However, I&apos;d rather not make such a change
&gt; this is already large patch.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/Modules/applepay/cocoa/PaymentMethodCocoa.mm:105
&gt; &gt; &gt; +        result.addressLines = Vector { String { street } };
&gt; &gt; 
&gt; &gt; I don’t think we need Vector here.
&gt; 
&gt; I thought I tried that and it didn&apos;t build but I may be misremembering. I&apos;ll
&gt; try again.
&gt; 
&gt; &gt; &gt; Source/WebCore/Modules/indexeddb/IDBDatabase.cpp:182
&gt; &gt; &gt; +        // It is valid for javascript to pass in a list of object store names with the same name listed twice,
&gt; &gt; &gt; +        // so we need to put them all in a set to get a unique list.
&gt; &gt; &gt; +        HashSet&lt;String&gt; objectStoreSet;
&gt; &gt; &gt; +        objectStoreSet.add(objectStores.begin(), objectStores.end());
&gt; &gt; &gt; +        objectStores = copyToVector(objectStoreSet);
&gt; &gt; 
&gt; &gt; I made some of these comments already, but four comments on this moved code:
&gt; &gt; 
&gt; &gt; 1) To actually get the optimization pretty sure we need to call WTFMove on
&gt; &gt; storeNames rather than on the result of std::get.
&gt; &gt; 2) JavaScript rather than javascript.
&gt; &gt; 3) Why doesn’t HashSet have a constructor that takes a pair of iterators?
&gt; &gt; 4) Building a set is not a great way to remove duplicates. A ListHashSet
&gt; &gt; would be better because it preserves ordering rather than accidentally
&gt; &gt; scrambling ordering using hashing resulting in a pseudo-random ordering. An
&gt; &gt; algorithm using std::sort and std::unique would be even better,
&gt; &gt; significantly more efficient, and yields a sorted results rather than a
&gt; &gt; pseudo-random one.
&gt; &gt; 5) Even if we don’t change the algorithm as suggested in (4), the operation
&gt; &gt; of &quot;remove duplicates from a Vector&lt;String&gt;&quot; seems like it should be broken
&gt; &gt; out into a separate function; maybe one that takes an rvalue reference to a
&gt; &gt; vector and return a vector.
&gt; &gt; 
&gt; &gt;     objectStores =
&gt; &gt; removeDuplicates(std::get&lt;Vector&lt;String&gt;&gt;(WTFMove(storeNames)));
&gt; &gt;     objectStores =
&gt; &gt; sortAndRemoveDuplicates(std::get&lt;Vector&lt;String&gt;&gt;(WTFMove(storeNames)));
&gt; &gt;     objectStores = sortUnique(std::get&lt;Vector&lt;String&gt;&gt;(WTFMove(storeNames)));
&gt; &gt; 
&gt; &gt; Note that it seems obvious once you have to name the function that &quot;remove
&gt; &gt; duplicates and scramble the order&quot; is not a good semantic.
&gt; 
&gt; This is pre-existing code and my patch didn&apos;t make things worse AFAICT.
&gt; However, I will adopt sort + unique in this patch.
&gt; 
&gt; &gt; &gt; Source/WebCore/Modules/indexeddb/IDBDatabase.cpp:184
&gt; &gt; &gt;          objectStores.append(WTFMove(std::get&lt;String&gt;(storeNames)));
&gt; &gt; 
&gt; &gt; Calling append is not a great way to create a single-element vector. Maybe
&gt; &gt; this:
&gt; &gt; 
&gt; &gt;     objectStores = { std::get&lt;String&gt;(WTFMove(storeNames)) };
&gt; 
&gt; Ok.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/Modules/indexeddb/IDBKeyData.h:168
&gt; &gt; &gt; +    add(hasher, keyData.isNull());
&gt; &gt; 
&gt; &gt; Is the other data to hash when the data is null? Maybe we need an if
&gt; &gt; statement or early return?
&gt; 
&gt; This is pre-existing logic but I suspect you are right. I&apos;ll double check
&gt; and fix if needed.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/Modules/mediasource/SourceBufferList.h:63
&gt; &gt; &gt;      Vector&lt;RefPtr&lt;SourceBuffer&gt;&gt;::iterator begin() { return m_list.begin(); }
&gt; &gt; &gt;      Vector&lt;RefPtr&lt;SourceBuffer&gt;&gt;::iterator end() { return m_list.end(); }
&gt; &gt; &gt; +    Vector&lt;RefPtr&lt;SourceBuffer&gt;&gt;::const_iterator begin() const { return m_list.begin(); }
&gt; &gt; &gt; +    Vector&lt;RefPtr&lt;SourceBuffer&gt;&gt;::const_iterator end() const { return m_list.end(); }
&gt; &gt; 
&gt; &gt; I think we can use &quot;auto&quot; for these return types. And many other return
&gt; &gt; types, but these seem to particularly benefit from it.
&gt; 
&gt; OK.
&gt; 
&gt; &gt; &gt; Source/WebCore/Modules/speech/cocoa/WebSpeechRecognizerTask.mm:132
&gt; &gt; &gt; +    SpeechRecognitionResultData data { WTFMove(alternatives), !!isFinal };
&gt; &gt; &gt; +    _delegateCallback(SpeechRecognitionUpdate::createResult(_identifier, { WTFMove(data) }));
&gt; &gt; 
&gt; &gt; Might read better as a one liner since we would need one less WTFMove.
&gt; 
&gt; OK.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/Modules/speech/cocoa/WebSpeechRecognizerTaskMock.mm:68
&gt; &gt; &gt; +    SpeechRecognitionAlternativeData alternative { &quot;Test&quot;, 1.0 };
&gt; &gt; &gt; +    SpeechRecognitionResultData data { { WTFMove(alternative) }, true };
&gt; &gt; &gt; +    _delegateCallback(SpeechRecognitionUpdate::createResult(_identifier, { WTFMove(data) }));
&gt; &gt; 
&gt; &gt; Similar thought.
&gt; 
&gt; OK.
&gt; 
&gt; &gt; &gt; Source/WebCore/dom/DOMStringList.h:64
&gt; &gt; &gt; +    { }
&gt; &gt; 
&gt; &gt; I usually format these braces vertically, when the part above is formatted
&gt; &gt; vertically. I suppose we should choose one style or the other for the future
&gt; &gt; here.
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:214
&gt; &gt; &gt; +        records.reserveCapacity(records.size() + value.size());
&gt; &gt; &gt;          for (auto&amp; record : value)
&gt; &gt; &gt; -            records.append(record);
&gt; &gt; &gt; +            records.uncheckedAppend(record);
&gt; &gt; 
&gt; &gt; I thought we discussed not making this change.
&gt; 
&gt; We did and I did drop it at some point, not sure what happened. I may have
&gt; messed up with GIT and re-uploaded an older iteration. I&apos;ll drop again,
&gt; sorry about that.
&gt; 
&gt; &gt; &gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCache.cpp:688
&gt; &gt; &gt; +        keys.reserveCapacity(keys.size() + records.size());
&gt; &gt; &gt;          for (auto&amp; record : records)
&gt; &gt; &gt; -            keys.append(record.key);
&gt; &gt; &gt; +            keys.uncheckedAppend(record.key);
&gt; &gt; 
&gt; &gt; Ditto.
&gt; 
&gt; Will drop.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/NetworkProcess/storage/SQLiteStorageArea.cpp:74
&gt; &gt; &gt; +    m_cachedStatements.reserveInitialCapacity(static_cast&lt;size_t&gt;(StatementType::Invalid));
&gt; &gt; &gt;      for (size_t i = 0; i &lt; static_cast&lt;size_t&gt;(StatementType::Invalid); ++i)
&gt; &gt; &gt; -        m_cachedStatements.append(nullptr);
&gt; &gt; &gt; +        m_cachedStatements.uncheckedAppend(nullptr);
&gt; &gt; 
&gt; &gt; Should be:
&gt; &gt; 
&gt; &gt;     m_cachedStatements =
&gt; &gt; Vector&lt;std::unique_ptr&lt;WebCore::
&gt; &gt; SQLiteStatement&gt;&gt;(static_cast&lt;size_t&gt;(StatementType::Invalid), nullptr);
&gt; &gt; 
&gt; &gt; Or something roughly like that. No loop.
&gt; 
&gt; I had thought of that and had tried it. We could even move it to the
&gt; initializer list if it worked. Sadly, the compiler doesn&apos;t seem to like it.
&gt; ```
&gt; In file included from
&gt; /Volumes/Data/WebKit/OpenSource/WebKitBuild/Release/DerivedSources/WebKit/
&gt; unified-sources/UnifiedSource31.cpp:1:
&gt; In file included from
&gt; /Volumes/Data/WebKit/OpenSource/Source/WebKit/NetworkProcess/storage/
&gt; MemoryStorageArea.cpp:27:
&gt; In file included from
&gt; /Volumes/Data/WebKit/OpenSource/Source/WebKit/NetworkProcess/storage/
&gt; MemoryStorageArea.h:28:
&gt; In file included from
&gt; /Volumes/Data/WebKit/OpenSource/Source/WebKit/NetworkProcess/storage/
&gt; StorageAreaBase.h:28:
&gt; In file included from
&gt; /Volumes/Data/WebKit/OpenSource/Source/WebKit/Platform/IPC/Connection.h:31:
&gt; In file included from
&gt; /Volumes/Data/WebKit/OpenSource/Source/WebKit/Platform/IPC/Decoder.h:32:
&gt; /Volumes/Data/WebKit/OpenSource/WebKitBuild/Release/usr/local/include/wtf/
&gt; Vector.h:200:32: error: call to implicitly-deleted copy constructor of
&gt; &apos;std::unique_ptr&lt;WebCore::SQLiteStatement&gt;&apos;
&gt;             new (NotNull, dst) T(val);
&gt; /Volumes/Data/WebKit/OpenSource/WebKitBuild/Release/usr/local/include/wtf/
&gt; Vector.h:275:62: note: in instantiation of member function
&gt; &apos;WTF::VectorFiller&lt;false,
&gt; std::unique_ptr&lt;WebCore::SQLiteStatement&gt;&gt;::uninitializedFill&apos; requested here
&gt;         VectorFiller&lt;VectorTraits&lt;T&gt;::canFillWithMemset,
&gt; T&gt;::uninitializedFill(dst, dstEnd, val);
&gt; /Volumes/Data/WebKit/OpenSource/WebKitBuild/Release/usr/local/include/wtf/
&gt; Vector.h:645:29: note: in instantiation of member function
&gt; &apos;WTF::VectorTypeOperations&lt;std::unique_ptr&lt;WebCore::SQLiteStatement&gt;&gt;::
&gt; uninitializedFill&apos; requested here
&gt;             TypeOperations::uninitializedFill(begin(), end(), val);
&gt; In file included from
&gt; /Volumes/Data/WebKit/OpenSource/WebKitBuild/Release/DerivedSources/WebKit/
&gt; unified-sources/UnifiedSource31.cpp:5:
&gt; /Volumes/Data/WebKit/OpenSource/Source/WebKit/NetworkProcess/storage/
&gt; SQLiteStorageArea.cpp:75:26: note: in instantiation of member function
&gt; &apos;WTF::Vector&lt;std::unique_ptr&lt;WebCore::SQLiteStatement&gt;, 0,
&gt; WTF::CrashOnOverflow, 16&gt;::Vector&apos; requested here
&gt;     m_cachedStatements =
&gt; Vector&lt;std::unique_ptr&lt;WebCore::
&gt; SQLiteStatement&gt;&gt;(static_cast&lt;size_t&gt;(StatementType::Invalid), nullptr);
&gt; In file included from
&gt; /Volumes/Data/WebKit/OpenSource/WebKitBuild/Release/DerivedSources/WebKit/
&gt; unified-sources/UnifiedSource31.cpp:1:
&gt; In file included from
&gt; /Volumes/Data/WebKit/OpenSource/Source/WebKit/WebKit2Prefix.h:72:
&gt; In file included from /usr/include/c++/v1/algorithm:653:
&gt; /usr/include/c++/v1/memory:1584:3: note: copy constructor is implicitly
&gt; deleted because &apos;unique_ptr&lt;WebCore::SQLiteStatement&gt;&apos; has a user-declared
&gt; move constructor
&gt;   unique_ptr(unique_ptr&amp;&amp; __u) _NOEXCEPT
&gt;   ^
&gt; 1 error generated.
&gt; ```
&gt; 
&gt; I will try a bit more but I may not be able to do it.

Oh, I think I got it to build. This in the initializer list:
```
m_cachedStatements(Vector&lt;std::unique_ptr&lt;WebCore::SQLiteStatement&gt;&gt;(static_cast&lt;size_t&gt;(StatementType::Invalid)))
```

&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/Shared/ApplePay/WebPaymentCoordinatorProxy.cpp:97
&gt; &gt; &gt; +        return URL(URL(), linkIconURLString);
&gt; &gt; 
&gt; &gt; We really have to fix the URL class so this super-common operation can be
&gt; &gt; written in a less bizarre way!
&gt; 
&gt; Yes, I agree. I&apos;ll look into it. Maybe in a follow-up. Or maybe I can just
&gt; add a new constructor, adopt it only here in this patch and follow-up for
&gt; wider adoption.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844751</commentid>
    <comment_count>28</comment_count>
      <attachid>452878</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-22 09:32:48 -0800</bug_when>
    <thetext>Created attachment 452878
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844753</commentid>
    <comment_count>29</comment_count>
      <attachid>452878</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-22 09:38:54 -0800</bug_when>
    <thetext>Comment on attachment 452878
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=452878&amp;action=review

&gt; Source/WebKit/NetworkProcess/storage/SQLiteStorageArea.cpp:69
&gt; +    , m_cachedStatements(Vector&lt;std::unique_ptr&lt;WebCore::SQLiteStatement&gt;&gt;(static_cast&lt;size_t&gt;(StatementType::Invalid)))

Two other thoughts. First, does this work?

    , m_cachedStatements(static_cast&lt;size_t&gt;(StatementType::Invalid))

Or if we can’t do that and the super-long length of this line bothers you, we could name the Vector type. Something like this:

    using StatementVector = Vector&lt;std::unique_ptr&lt;WebCore::SQLiteStatement&gt;&gt;;

Could be in the header file inside the class. Or above in this .cpp file. With as short or long a name as you think is needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844756</commentid>
    <comment_count>30</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-22 09:43:16 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #29)
&gt; Comment on attachment 452878 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=452878&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/storage/SQLiteStorageArea.cpp:69
&gt; &gt; +    , m_cachedStatements(Vector&lt;std::unique_ptr&lt;WebCore::SQLiteStatement&gt;&gt;(static_cast&lt;size_t&gt;(StatementType::Invalid)))
&gt; 
&gt; Two other thoughts. First, does this work?
&gt; 
&gt;     , m_cachedStatements(static_cast&lt;size_t&gt;(StatementType::Invalid))

Oh duh, yes :) This would be much nicer indeed and I bet it will build. Trying now...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844768</commentid>
    <comment_count>31</comment_count>
      <attachid>452881</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-22 09:58:53 -0800</bug_when>
    <thetext>Created attachment 452881
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844771</commentid>
    <comment_count>32</comment_count>
      <attachid>452881</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-22 10:09:20 -0800</bug_when>
    <thetext>Comment on attachment 452881
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=452881&amp;action=review

&gt; Source/WebCore/Modules/indexeddb/IDBDatabase.cpp:185
&gt; +        // so we need to put them all in a set to get a unique list.

Comment should not mention &quot;put them all in a set&quot;.

&gt; Source/WebCore/Modules/indexeddb/IDBDatabase.cpp:188
&gt; +        objectStores = sortAndRemoveDuplicates(WTFMove(std::get&lt;Vector&lt;String&gt;&gt;(storeNames)));
&gt; +    } else
&gt; +        objectStores = { WTFMove(std::get&lt;String&gt;(storeNames)) };

I think these WTFMove are wrong. it should be std::get&lt;Vector&lt;String&gt;&gt;(WTFMove(storeNames)).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844777</commentid>
    <comment_count>33</comment_count>
      <attachid>452884</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-22 10:22:38 -0800</bug_when>
    <thetext>Created attachment 452884
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844785</commentid>
    <comment_count>34</comment_count>
      <attachid>452881</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-22 10:35:01 -0800</bug_when>
    <thetext>Comment on attachment 452881
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=452881&amp;action=review

&gt; Source/WebCore/Modules/indexeddb/IDBKeyData.h:168
&gt; +    add(hasher, keyData.isNull());

Note that I looked into it I am not convinced we need to do anything special (e.g. an early return is keyData is null).
If keyData is null, then keyData.type() will be IndexedDB::KeyType::Invalid and the next switch() will already do nothing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844788</commentid>
    <comment_count>35</comment_count>
      <attachid>452881</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-22 10:49:27 -0800</bug_when>
    <thetext>Comment on attachment 452881
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=452881&amp;action=review

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBKeyData.h:168
&gt;&gt; +    add(hasher, keyData.isNull());
&gt; 
&gt; Note that I looked into it I am not convinced we need to do anything special (e.g. an early return is keyData is null).
&gt; If keyData is null, then keyData.type() will be IndexedDB::KeyType::Invalid and the next switch() will already do nothing.

Not sure why null wasn’t implemented as a type instead of a separate flag. Later we could change this to use a Variant so we don’t have to write so much code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844830</commentid>
    <comment_count>36</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-02-22 12:50:24 -0800</bug_when>
    <thetext>Committed r290329 (247650@main): &lt;https://commits.webkit.org/247650@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 452884.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844831</commentid>
    <comment_count>37</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-02-22 12:51:22 -0800</bug_when>
    <thetext>&lt;rdar://problem/89311261&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452559</attachid>
            <date>2022-02-18 12:24:38 -0800</date>
            <delta_ts>2022-02-18 13:02:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236852-20220218122437.patch</filename>
            <type>text/plain</type>
            <size>164662</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDJlMmI5YWU2MjQ5YWMyM2U3YjEzZGRj
ZmUxODY3MzJjYjI3YWQyMTMuLmNhMjgwNWVlNWIxNmFhYWE1ZWMxYTM2YWJhMjJkMGM1MTRhMTAy
YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjItMDItMTggIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGV2ZW4gbW9yZSBjYWxs
IHNpdGVzIGNvbnN0cnVjdGluZyB2ZWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuY3BwOgorICAgICAgICAoV1RGOjpD
b25jdXJyZW50V29ya1F1ZXVlOjphcHBseSk6CisgICAgICAgICogd3RmL2NmL0xhbmd1YWdlQ0Yu
Y3BwOgorICAgICAgICAoV1RGOjpwbGF0Zm9ybVVzZXJQcmVmZXJyZWRMYW5ndWFnZXMpOgorCiAy
MDIyLTAyLTE3ICBNYXR0IFdvb2Ryb3cgIDxtYXR0d29vZHJvd0BhcHBsZS5jb20+CiAKICAgICAg
ICAgRW5hYmxlIHN1YmdyaWQgYnkgZGVmYXVsdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhNDc5MDMxMjg0ZTI2
M2FlNWJiYzY1Y2Y3OTM3YjBjMjI3NGI2OTExLi4xZTJhNDcyMzdmMjZkMDYyMGVkZjkxMTQ3Mzk1
M2VjMzFjOGZjMDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTY2IEBACisyMDIyLTAyLTE4ICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4gdXAgLyBvcHRp
bWl6ZSBldmVuIG1vcmUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9ycworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2ODUyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2FwcGxlcGF5
L1BheW1lbnRDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXltZW50Q29vcmRp
bmF0b3I6OmJlZ2luUGF5bWVudFNlc3Npb24pOgorICAgICAgICAqIE1vZHVsZXMvYXBwbGVwYXkv
Y29jb2EvUGF5bWVudE1ldGhvZENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydCk6
CisgICAgICAgICogTW9kdWxlcy9jYWNoZS9ET01DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpET01DYWNoZTo6YmF0Y2hQdXRPcGVyYXRpb24pOgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBh
ZC9HYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWQ6OkdhbWVwYWQpOgorICAg
ICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHYW1lcGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkRGlzY29ubmVjdGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdhbWVwYWRNYW5hZ2VyOjptYWtlR2FtZXBhZFZpc2libGUpOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlOjpvYmplY3RTdG9yZU5hbWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCS2V5RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6aXNEZWxldGVkVmFs
dWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QktleURhdGFIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6Omhhc2gg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzIGNv
bnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmVOYW1lcyBjb25zdCk6
CisgICAgICAgICogTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0OjpzaG93TWVkaWFDb250cm9sc0Nv
bnRleHRNZW51KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlOjphY3RpdmVSYW5nZXMgY29uc3QpOgor
ICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmg6CisgICAgICAgIChXZWJD
b3JlOjpEZWNvZGVPcmRlclNhbXBsZU1hcDo6c2l6ZSBjb25zdCk6CisgICAgICAgICogTW9kdWxl
cy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0Lmg6CisgICAgICAgICogTW9kdWxlcy9zcGVl
Y2gvU3BlZWNoU3ludGhlc2lzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNp
czo6Z2V0Vm9pY2VzKToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hS
ZWNvZ25pemVyVGFzay5tbToKKyAgICAgICAgKC1bV2ViU3BlZWNoUmVjb2duaXplclRhc2tJbXBs
IGNhbGxiYWNrV2l0aFRyYW5zY3JpcHRpb25zOmlzRmluYWw6XSk6CisgICAgICAgICogTW9kdWxl
cy9zcGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2tNb2NrLm1tOgorICAgICAgICAo
LVtXZWJTcGVlY2hSZWNvZ25pemVyVGFza01vY2sgYXVkaW9TYW1wbGVzQXZhaWxhYmxlOl0pOgor
ICAgICAgICAqIGFuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpibGVuZEZ1bmMpOgorICAgICAgICAqIGFuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5l
c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaW1lbGluZXNDb250
cm9sbGVyOjp1cGRhdGVBbmltYXRpb25zQW5kU2VuZEV2ZW50cyk6CisgICAgICAgICogYW5pbWF0
aW9uL0tleWZyYW1lRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByb2Nlc3NQcm9wZXJ0
eUluZGV4ZWRLZXlmcmFtZXMpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRF
eHRlbnNpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRl
bnRFeHRlbnNpb246OkNvbnRlbnRFeHRlbnNpb24pOgorICAgICAgICAqIGNzcy9DU1NWYWx1ZUxp
c3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlTGlzdDo6c2l6ZSBjb25zdCk6CisgICAg
ICAgICogY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmhvaXN0Q2hpbGRyZW5XaXRoT3BlcmF0b3IpOgorICAg
ICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXJJbXBsOjpjb25zdW1lQ29udGFpbmVyUnVsZSk6CisgICAgICAgICogZG9tL0RPTVN0
cmluZ0xpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVN0cmluZ0xpc3Q6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpET01TdHJpbmdMaXN0OjphcHBlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NU3RyaW5nTGlzdDo6RE9NU3RyaW5nTGlzdCk6CisgICAgICAgICogZG9tL0V2ZW50UGF0
aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFBhdGg6OkV2ZW50UGF0aCk6CisgICAgICAg
ICogZG9tL0Z1bGxzY3JlZW5NYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZ1bGxzY3Jl
ZW5NYW5hZ2VyOjpjYW5jZWxGdWxsc2NyZWVuKToKKyAgICAgICAgKiBkb20vTG9hZGFibGVTY3Jp
cHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGFibGVTY3JpcHQ6Om5vdGlmeUNsaWVudEZp
bmlzaGVkKToKKyAgICAgICAgKiBkb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmFkaW9CdXR0b25Hcm91cDo6bWVtYmVycyBjb25zdCk6CisgICAgICAgICogaHRt
bC9EaXJlY3RvcnlGaWxlTGlzdENyZWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9GaWxl
TGlzdCk6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2F2ZUxhc3RTZWxlY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4
KToKKyAgICAgICAgKiBodG1sL0ltYWdlQml0bWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQml0bWFwOjpkZXRhY2hCaXRtYXBzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgICogaHRtbC9wYXJzZXIv
SFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZXRhQ2hh
cnNldFBhcnNlcjo6cHJvY2Vzc01ldGEpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVl
QnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6Omluc2VydFBo
b25lTnVtYmVyTGluayk6CisgICAgICAgICogaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHREb2N1bWVudFBhcnNlcjo6aW5zZXJ0RmFrZVBy
ZUVsZW1lbnQpOgorICAgICAgICAqIGxvYWRlci9Db250ZW50RmlsdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRGaWx0ZXI6OmNyZWF0ZSk6CisgICAgICAgICogbG9hZGVyL2FwcGNh
Y2hlL0FwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpwYXJzZUFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdCk6CisgICAgICAgICogcGFnZS9SZXNpemVP
YnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNpemVPYnNlcnZlcjo6ZGVsaXZlck9i
c2VydmF0aW9ucyk6CisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmluaXRpYWxpemVJbmRpY2F0b3IpOgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRl
bnRTZWN1cml0eVBvbGljeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVN1YlJlc291cmNl
SW50ZWdyaXR5SW50b0RpZ2VzdHMpOgorICAgICAgICAqIHBsYXRmb3JtL0ZpbGVDaG9vc2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpG
aWxlQ2hvb3Nlcjo6Y2hvb3NlTWVkaWFGaWxlcyk6CisgICAgICAgICogcGxhdGZvcm0vU2hhcmVk
QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmFw
cGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vVGhyZWFkU2FmZURhdGFCdWZmZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OmFkZCk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9EU1BLZXJu
ZWxQcm9jZXNzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EU1BLZXJuZWxQcm9jZXNz
b3I6OmluaXRpYWxpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvUmVzYW1wbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUmVzYW1wbGVyOjpBdWRpb1Jlc2FtcGxlcik6
CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0TnVtYmVyT2ZD
aGFubmVscyk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vTXVsdGlDaGFubmVsUmVzYW1wbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok11bHRpQ2hhbm5lbFJlc2FtcGxlcjo6TXVsdGlDaGFu
bmVsUmVzYW1wbGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudC5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkL21hYy9EdWFsc2hvY2szSElER2FtZXBhZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEdWFsc2hvY2szSElER2FtZXBhZDo6RHVhbHNob2NrM0hJREdhbWVw
YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWQvbWFjL0xvZ2l0ZWNoR2FtZXBhZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMb2dpdGVjaEdhbWVwYWQ6OkxvZ2l0ZWNoR2FtZXBhZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ2FtZXBhZC9tYWMvU3RhZGlhSElER2FtZXBhZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdGFkaWFISURHYW1lcGFkOjpTdGFkaWFISURHYW1lcGFkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI6OmFkZFJlcGFpbnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhVdGlsaXRp
ZXM6OnBhdGhzV2l0aFNocmlua1dyYXBwZWRSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRo
VXRpbGl0aWVzOjpwYXRoV2l0aFNocmlua1dyYXBwZWRSZWN0c0Zvck91dGxpbmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZTo6YnVmZmVyZWRTYW1wbGVzRm9yVHJhY2tJZCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3Ry
ZWFtaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVGYWlyUGxheVN0cmVhbWlu
Zzo6ZXh0cmFjdEtleUlEc1NrZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFWRldyYXBwZXI6OnNldFJlcXVlc3RGb3JLZXkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1p
bmdBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBs
YXlTdHJlYW1pbmdBVkZPYmpDOjp1cGRhdGVLZXlTdGF0dXNlcyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVyQVZGT2JqQy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlckFWRk9iakM6OmZyYW1lSW5mb3MgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZl
clBhcnNlckFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJB
VkZPYmpDOjpkaWRQYXJzZVN0cmVhbURhdGFBc0Fzc2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW06CisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjp2YXJpYXRpb25BeGVzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6
OndyaXRlU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZVZp
ZGVvQ2FwdHVyZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZVZpZGVvQ2Fw
dHVyZVNvdXJjZTo6c2V0U3VwcG9ydGVkUHJlc2V0cyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3Ry
eUltcGw6OnJlZ2lzdGVyQmxvYlVSTCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVnaXN0cnlJ
bXBsOjp3cml0ZUJsb2JzVG9UZW1wb3JhcnlGaWxlc0ZvckluZGV4ZWREQik6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveE1vZGVsT2JqZWN0OjpkcmF3Qm94U2lkZUZyb21QYXRoKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyQmFja2luZzo6Y29ubmVjdENsaXBwaW5nU3RhY2tMYXllcnMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjphZGp1c3RPdmVyZmxvd1Njcm9sbGJhckNvbnRhaW5lckxheWVycyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6cGFpbnRBdHRhY2htZW50VGl0bGVCYWNrZ3JvdW5kKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTVkdT
dHJva2VQYWludGluZ1Jlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRD
aHVuay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1bms6OlNWR1RleHRDaHVuayk6
CisgICAgICAgICogc3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlBhZ2VSdWxlQ29sbGVjdG9yOjptYXRjaFBhZ2VSdWxlcyk6CisgICAgICAgICog
c3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVT
ZXRCdWlsZGVyOjpNZWRpYVF1ZXJ5Q29sbGVjdG9yOjpwb3ApOgorICAgICAgICAqIHN0eWxlL1N0
eWxlQnVpbGRlckNvbnZlcnRlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRDb250YWluZXJOYW1lKToKKwogMjAyMi0wMi0xOCAgQW50b2luZSBR
dWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KIAogICAgICAgICBbZnJhbWUtcmF0ZV0gW2N1c3Rv
bS1lZmZlY3RdIGFsbG93IHNldHRpbmcgZnJhbWVSYXRlIGFzIGFuIG9wdGlvbiBwYXNzZWQgdG8g
ZG9jdW1lbnQudGltZWxpbmUuYW5pbWF0ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDg5ZTQ3NjEyYzRmNjhmMjQ3
NTM5ZDM3MGNmYTM3NzkzMWZlZGVmZTUuLjU3NmQyOWNlZTg4NTVhMGIzNTk1MmYyOTAxMWQ2ZDUy
ZmQxMmYyZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTggQEAKKzIwMjItMDItMTggIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGV2
ZW4gbW9yZSBjYWxsIHNpdGVzIGNvbnN0cnVjdGluZyB2ZWN0b3JzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4NTIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3Rl
TWVkaWFQbGF5ZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZU1lZGlhUGxheWVy
UHJveHk6Om91dE9mQmFuZFRyYWNrU291cmNlcyk6CisgICAgICAgICogR1BVUHJvY2Vzcy9tZWRp
YS9SZW1vdGVTb3VyY2VCdWZmZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVNv
dXJjZUJ1ZmZlclByb3h5Ojpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0
aW9uU2VnbWVudCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5Ojp1
cGRhdGVUcmFja0lkcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyk6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0
OjpmZXRjaERpc2tDYWNoZUVudHJpZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05vdGlm
aWNhdGlvbnMvTmV0d29ya05vdGlmaWNhdGlvbk1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlcjo6Z2V0T3JpZ2luc1dpdGhQdXNoQW5kTm90aWZp
Y2F0aW9uUGVybWlzc2lvbnMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2Uv
U3RvcmFnZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6YWxs
U3RvcmFnZUFyZWFJZGVudGlmaWVycyBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
V2ViU3RvcmFnZS9UcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuY3BwOgorICAgICAgICAo
V2ViS2l0OjpUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6Om9yaWdpbnMgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OnN0b3JhZ2VB
cmVhSWRlbnRpZmllcnMgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0Nh
Y2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdl
OjpDYWNoZTo6ZmluaXNoT3BlbmluZyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6
Q2FjaGU6OmtleXMgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FM
aXRlU3RvcmFnZUFyZWEuY3BwOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6
U1FMaXRlU3RvcmFnZUFyZWEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVy
cy5oOgorICAgICAgICAqIFNoYXJlZC9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94
eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpzaG93
UGF5bWVudFVJKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb24uY3BwOgor
ICAgICAgICAoQVBJOjpOYXZpZ2F0aW9uOjpOYXZpZ2F0aW9uKToKKyAgICAgICAgKEFQSTo6bV9j
bGllbnROYXZpZ2F0aW9uQWN0aXZpdHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XS1No
YXJlU2hlZXQubW06CisgICAgICAgIChhcHBlbmRGaWxlc0FzU2hhcmVhYmxlVVJMcyk6CisgICAg
ICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnJlc3RvcmVBcHBIaWdobGlnaHRzQW5kU2Nyb2xsVG9JbmRleCk6
CisgICAgICAgICogVUlQcm9jZXNzL0ZyYW1lTG9hZFN0YXRlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6RnJhbWVMb2FkU3RhdGU6OmRpZEZpbmlzaExvYWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cGFy
YW1ldGVycyBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0F1
dGhlbnRpY2F0b3JNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6QXV0aGVudGljYXRvck1h
bmFnZXI6OnN0YXJ0RGlzY292ZXJ5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQmFja0Zvcndh
cmRMaXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0OjpyZW1vdmVB
bGxJdGVtcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6Y2xlYXIpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjppbml0aWFsaXplTmV3V2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpyZW1vdmVQcm9jZXNzRnJvbU9yaWdpbkNhY2hlU2V0KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Byb3h5Ojpwcm9jZXNzRGlkVGVybWluYXRlT3JGYWlsZWRUb0xhdW5jaCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBseSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9pb3MvVGV4dENoZWNrZXJJT1MubW06CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVj
a2VyOjpjaGVja1RleHRPZlBhcmFncmFwaCk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0Fj
dGlvblNoZWV0QXNzaXN0YW50Lm1tOgorICAgICAgICAoLVtXS0FjdGlvblNoZWV0QXNzaXN0YW50
IHByZXNlbnRhdGlvblJlY3RGb3JFbGVtZW50VXNpbmdDbG9zZXN0SW5kaWNhdGVkUmVjdF0pOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW06CisgICAgICAgIChXZWJL
aXQ6OlRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaCk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYXltZW50Q29vcmRpbmF0b3I6OnNob3dQYXltZW50VUkpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6c2V0RmlsZXNGb3JJbnB1dEZpbGVV
cGxvYWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVy
TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlcjo6
Y3JlYXRlUmVtb3RlTWVkaWFQbGF5ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL21lZGlh
L1NvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpTb3VyY2VC
dWZmZXJQcml2YXRlUmVtb3RlOjp1cGRhdGVUcmFja0lkcyk6CisgICAgICAgIChXZWJLaXQ6OlNv
dXJjZUJ1ZmZlclByaXZhdGVSZW1vdGU6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5p
dGlhbGl6YXRpb25TZWdtZW50KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS93ZWJydGMvTGli
V2ViUlRDQ29kZWNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGliV2ViUlRDQ29kZWNzOjpjcmVh
dGVFbmNvZGVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dL
QnVuZGxlUGFnZU92ZXJsYXkuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvU2Vzc2lvblN0YXRlQ29udmVyc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OnRvRnJhbWVT
dGF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEZXZpY2VPcmll
bnRhdGlvblVwZGF0ZVByb3ZpZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2aWNlT3Jp
ZW50YXRpb25VcGRhdGVQcm92aWRlcjo6ZGV2aWNlT3JpZW50YXRpb25DaGFuZ2VkKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlcjo6ZGV2aWNlTW90
aW9uQ2hhbmdlZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0
ZWJvYXJkT3ZlcnJpZGVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZE92ZXJy
aWRlczo6b3ZlcnJpZGRlblR5cGVzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYlNwZWVjaFN5bnRoZXNpc0NsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNw
ZWVjaFN5bnRoZXNpc0NsaWVudDo6dm9pY2VMaXN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpGaW5kQ29udHJvbGxl
cjo6ZmluZFN0cmluZ01hdGNoZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJG
b3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGb3VuZFRl
eHRSYW5nZUNvbnRyb2xsZXI6OmRyYXdSZWN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNvbnN1bWVTYW5kYm94
RXh0ZW5zaW9ucyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFj
Lm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpoYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xp
Y2spOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3M6OmZldGNoV2Vic2l0ZURhdGEpOgorCiAyMDIyLTAyLTE4ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBMQ19TT1VSQ0VfVkVSU0lP
TiB0byBjb21waWxlIHRhcmdldHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1
ZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwCmluZGV4IDllMTA2ZTM5NGQzZjQ0
ZDJjMjVmYzNjYTE1MzU0MGU1MjA0Y2IzNWIuLjg2NDA2ZjM4ODQzNzE0Y2IyNTVjMzRlYWUzZjkx
ODFkYWJhNThlMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAKKysr
IGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcApAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQg
Q29uY3VycmVudFdvcmtRdWV1ZTo6YXBwbHkoc2l6ZV90IGl0ZXJhdGlvbnMsIFdURjo6RnVuY3Rp
b248dm9pZChzaXplX3QgaW5kCiAKICAgICAgICAgICAgIG1fd29ya2Vycy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KHRocmVhZENvdW50KTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0aHJlYWRDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgbV93b3JrZXJzLmFwcGVu
ZChUaHJlYWQ6OmNyZWF0ZSgiVGhyZWFkUG9vbCBXb3JrZXIiLCBbdGhpc10geworICAgICAgICAg
ICAgICAgIG1fd29ya2Vycy51bmNoZWNrZWRBcHBlbmQoVGhyZWFkOjpjcmVhdGUoIlRocmVhZFBv
b2wgV29ya2VyIiwgW3RoaXNdIHsKICAgICAgICAgICAgICAgICAgICAgdGhyZWFkQm9keSgpOwog
ICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL2NmL0xhbmd1YWdlQ0YuY3BwIGIvU291cmNlL1dURi93dGYvY2YvTGFuZ3VhZ2VDRi5j
cHAKaW5kZXggYmJjMWVmNmY0ZWZlMDMwNTljZTU1MTMxZTA4YzEwMzMyMjQ4OGU1Ni4uYzA0YzU1
YmM2MDNkMjgxZDBjYTM4OTIwZWJhOGM3OWU1ZTY5Mjk4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvY2YvTGFuZ3VhZ2VDRi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvY2YvTGFuZ3VhZ2VD
Ri5jcHAKQEAgLTEwMiw5ICsxMDIsMTAgQEAgVmVjdG9yPFN0cmluZz4gcGxhdGZvcm1Vc2VyUHJl
ZmVycmVkTGFuZ3VhZ2VzKFNob3VsZE1pbmltaXplTGFuZ3VhZ2VzIHNob3VsZE1pbmkKICAgICAg
ICAgcmV0dXJuIHsgImVuIl9zIH07CiAKICAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXM7Cisg
ICAgbGFuZ3VhZ2VzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGxhdGZvcm1MYW5ndWFnZXNDb3Vu
dCk7CiAgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgcGxhdGZvcm1MYW5ndWFnZXNDb3VudDsg
aSsrKSB7CiAgICAgICAgIGF1dG8gcGxhdGZvcm1MYW5ndWFnZSA9IHN0YXRpY19jYXN0PENGU3Ry
aW5nUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KHBsYXRmb3JtTGFuZ3VhZ2VzLmdldCgpLCBp
KSk7Ci0gICAgICAgIGxhbmd1YWdlcy5hcHBlbmQoaHR0cFN0eWxlTGFuZ3VhZ2VDb2RlKHBsYXRm
b3JtTGFuZ3VhZ2UsIHNob3VsZE1pbmltaXplTGFuZ3VhZ2VzKSk7CisgICAgICAgIGxhbmd1YWdl
cy51bmNoZWNrZWRBcHBlbmQoaHR0cFN0eWxlTGFuZ3VhZ2VDb2RlKHBsYXRmb3JtTGFuZ3VhZ2Us
IHNob3VsZE1pbmltaXplTGFuZ3VhZ2VzKSk7CiAgICAgfQogCiAgICAgTE9HX1dJVEhfU1RSRUFN
KExhbmd1YWdlLCBzdHJlYW0gPDwgIkFmdGVyIHBhc3NpbmcgdGhyb3VnaCBodHRwU3R5bGVMYW5n
dWFnZUNvZGU6ICIgPDwgbGFuZ3VhZ2VzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvYXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvYXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNwcAppbmRleCAxYTMyN2E5NGIwYjcx
ZDRlYzc1ZWFjYzhkNGFkNzhhOTFiOWZmNjg1Li40YTk0MzIyNDlkNTJkNTFkMTQ3Yjg2ZTU3MDhk
NTE4ODhiYTY0ZjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5
L1BheW1lbnRDb29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBs
ZXBheS9QYXltZW50Q29vcmRpbmF0b3IuY3BwCkBAIC0xMDEsMTEgKzEwMSwxMCBAQCBib29sIFBh
eW1lbnRDb29yZGluYXRvcjo6YmVnaW5QYXltZW50U2Vzc2lvbihEb2N1bWVudCYgZG9jdW1lbnQs
IFBheW1lbnRTZXNzaW9uJgogewogICAgIEFTU0VSVCghbV9hY3RpdmVTZXNzaW9uKTsKIAotICAg
IFZlY3RvcjxVUkw+IGxpbmtJY29uVVJMczsKLSAgICBmb3IgKGF1dG8mIGljb24gOiBMaW5rSWNv
bkNvbGxlY3RvciB7IGRvY3VtZW50IH0uaWNvbnNPZlR5cGVzKHsgTGlua0ljb25UeXBlOjpUb3Vj
aEljb24sIExpbmtJY29uVHlwZTo6VG91Y2hQcmVjb21wb3NlZEljb24gfSkpCi0gICAgICAgIGxp
bmtJY29uVVJMcy5hcHBlbmQoaWNvbi51cmwpOwotCi0gICAgYXV0byBzaG93UGF5bWVudFVJID0g
bV9jbGllbnQuc2hvd1BheW1lbnRVSShkb2N1bWVudC51cmwoKSwgbGlua0ljb25VUkxzLCBwYXlt
ZW50UmVxdWVzdCk7CisgICAgYXV0byBsaW5rSWNvblVSTHMgPSBMaW5rSWNvbkNvbGxlY3RvciB7
IGRvY3VtZW50IH0uaWNvbnNPZlR5cGVzKHsgTGlua0ljb25UeXBlOjpUb3VjaEljb24sIExpbmtJ
Y29uVHlwZTo6VG91Y2hQcmVjb21wb3NlZEljb24gfSkubWFwKFtdKGF1dG8mIGljb24pIHsKKyAg
ICAgICAgcmV0dXJuIGljb24udXJsOworICAgIH0pOworICAgIGF1dG8gc2hvd1BheW1lbnRVSSA9
IG1fY2xpZW50LnNob3dQYXltZW50VUkoZG9jdW1lbnQudXJsKCksIFdURk1vdmUobGlua0ljb25V
UkxzKSwgcGF5bWVudFJlcXVlc3QpOwogICAgIFBBWU1FTlRfQ09PUkRJTkFUT1JfUkVMRUFTRV9M
T0coImJlZ2luUGF5bWVudFNlc3Npb24oKSAtPiAlZCIsIHNob3dQYXltZW50VUkpOwogICAgIGlm
ICghc2hvd1BheW1lbnRVSSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29jb2EubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L2NvY29hL1BheW1lbnRNZXRob2RDb2Nv
YS5tbQppbmRleCA3NjUzZGU1NGFmNTM5ZjI1NjFmNDIyMzZkMzBlYzYxYWI1ODAzZGQ1Li4zNzVl
NTNkNmQ0ZmRkYzg4OGYzMmUwNGUyODNhN2RiMDQxMTNkMDYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L2NvY29hL1BheW1lbnRNZXRob2RDb2NvYS5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L2NvY29hL1BheW1lbnRNZXRob2RDb2Nv
YS5tbQpAQCAtMTAxLDExICsxMDEsOCBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxBcHBsZVBheVBh
eW1lbnRNZXRob2Q6OlR5cGU+IGNvbnZlcnQoUEtQYXltZW50TWV0aG9kVHlwZSBwYQogI2lmIEhB
VkUoUEFTU0tJVF9QQVlNRU5UX01FVEhPRF9CSUxMSU5HX0FERFJFU1MpCiBzdGF0aWMgdm9pZCBj
b252ZXJ0KENOTGFiZWxlZFZhbHVlPENOUG9zdGFsQWRkcmVzcyo+ICpwb3N0YWxBZGRyZXNzLCBB
cHBsZVBheVBheW1lbnRDb250YWN0ICZyZXN1bHQpCiB7Ci0gICAgVmVjdG9yPFN0cmluZz4gYWRk
cmVzc0xpbmU7Ci0gICAgaWYgKE5TU3RyaW5nICpzdHJlZXQgPSBwb3N0YWxBZGRyZXNzLnZhbHVl
LnN0cmVldCkgewotICAgICAgICBhZGRyZXNzTGluZS5hcHBlbmQoc3RyZWV0KTsKLSAgICAgICAg
cmVzdWx0LmFkZHJlc3NMaW5lcyA9IFdURk1vdmUoYWRkcmVzc0xpbmUpOwotICAgIH0KKyAgICBp
ZiAoTlNTdHJpbmcgKnN0cmVldCA9IHBvc3RhbEFkZHJlc3MudmFsdWUuc3RyZWV0KQorICAgICAg
ICByZXN1bHQuYWRkcmVzc0xpbmVzID0gVmVjdG9yIHsgU3RyaW5nIHsgc3RyZWV0IH0gfTsKICAg
ICByZXN1bHQuc3ViTG9jYWxpdHkgPSBwb3N0YWxBZGRyZXNzLnZhbHVlLnN1YkxvY2FsaXR5Owog
ICAgIHJlc3VsdC5sb2NhbGl0eSA9IHBvc3RhbEFkZHJlc3MudmFsdWUuY2l0eTsKICAgICByZXN1
bHQuc3ViQWRtaW5pc3RyYXRpdmVBcmVhID0gcG9zdGFsQWRkcmVzcy52YWx1ZS5zdWJBZG1pbmlz
dHJhdGl2ZUFyZWE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RP
TUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGUuY3BwCmlu
ZGV4IDQ5ZjM5OGFhZmVmMzdjZDVlOGY4ZWIyNDRkNGUxMWYzOWYyYThjZDMuLjJkNDZkMWNkYmM3
MTdmM2M5Mjk5ZWZhODYzYTU0OTI2MzgzYWY1ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvY2FjaGUvRE9NQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
Y2FjaGUvRE9NQ2FjaGUuY3BwCkBAIC01MTUsMTAgKzUxNSw4IEBAIFJlY29yZCBET01DYWNoZTo6
dG9Db25uZWN0aW9uUmVjb3JkKGNvbnN0IEZldGNoUmVxdWVzdCYgcmVxdWVzdCwgRmV0Y2hSZXNw
b25zZSYKIAogdm9pZCBET01DYWNoZTo6YmF0Y2hQdXRPcGVyYXRpb24oY29uc3QgRmV0Y2hSZXF1
ZXN0JiByZXF1ZXN0LCBGZXRjaFJlc3BvbnNlJiByZXNwb25zZSwgRE9NQ2FjaGVFbmdpbmU6OlJl
c3BvbnNlQm9keSYmIHJlc3BvbnNlQm9keSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChFeGNlcHRp
b25Pcjx2b2lkPiYmKT4mJiBjYWxsYmFjaykKIHsKLSAgICBWZWN0b3I8UmVjb3JkPiByZWNvcmRz
OwotICAgIHJlY29yZHMuYXBwZW5kKHRvQ29ubmVjdGlvblJlY29yZChyZXF1ZXN0LCByZXNwb25z
ZSwgV1RGTW92ZShyZXNwb25zZUJvZHkpKSk7Ci0KLSAgICBiYXRjaFB1dE9wZXJhdGlvbihXVEZN
b3ZlKHJlY29yZHMpLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgYXV0byByZWNvcmQgPSB0b0Nv
bm5lY3Rpb25SZWNvcmQocmVxdWVzdCwgcmVzcG9uc2UsIFdURk1vdmUocmVzcG9uc2VCb2R5KSk7
CisgICAgYmF0Y2hQdXRPcGVyYXRpb24oeyBXVEZNb3ZlKHJlY29yZCkgfSwgV1RGTW92ZShjYWxs
YmFjaykpOwogfQogCiB2b2lkIERPTUNhY2hlOjpiYXRjaFB1dE9wZXJhdGlvbihWZWN0b3I8UmVj
b3JkPiYmIHJlY29yZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRXhjZXB0aW9uT3I8dm9pZD4m
Jik+JiYgY2FsbGJhY2spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVw
YWQvR2FtZXBhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5j
cHAKaW5kZXggNjk2OWUwYjUwM2E4N2RkMDM4NWUxODM5MDg4NDY3MGZlYTA0YzI2Ny4uNTgzZjlj
ODU1NTY3MTc4Y2NlNzJjYWQ0NDc5MjRjZjhiYzNjNGU1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmNwcApAQCAtNDMsOCArNDMsOSBAQCBHYW1lcGFkOjpHYW1l
cGFkKGNvbnN0IFBsYXRmb3JtR2FtZXBhZCYgcGxhdGZvcm1HYW1lcGFkKQogICAgICwgbV9heGVz
KHBsYXRmb3JtR2FtZXBhZC5heGlzVmFsdWVzKCkuc2l6ZSgpLCAwLjApCiB7CiAgICAgdW5zaWdu
ZWQgYnV0dG9uQ291bnQgPSBwbGF0Zm9ybUdhbWVwYWQuYnV0dG9uVmFsdWVzKCkuc2l6ZSgpOwor
ICAgIG1fYnV0dG9ucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGJ1dHRvbkNvdW50KTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0dG9uQ291bnQ7ICsraSkKLSAgICAgICAgbV9idXR0
b25zLmFwcGVuZChHYW1lcGFkQnV0dG9uOjpjcmVhdGUoKSk7CisgICAgICAgIG1fYnV0dG9ucy51
bmNoZWNrZWRBcHBlbmQoR2FtZXBhZEJ1dHRvbjo6Y3JlYXRlKCkpOwogfQogCiBHYW1lcGFkOjp+
R2FtZXBhZCgpID0gZGVmYXVsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
Z2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVw
YWQvR2FtZXBhZE1hbmFnZXIuY3BwCmluZGV4IGNjMzc0ODU4Y2ZlYTFiMjQ0YzA0YmQ0MWIyOTk0
OGQyOWFlYTMwMzAuLjU0M2ZlNDg5MTY3ZTdjZTEzZDQ5NzY4ZmM3ZTE1ZjM0ZDA4MjM2ZTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmNw
cApAQCAtNzksMTQgKzc5LDEwIEBAIHZvaWQgR2FtZXBhZE1hbmFnZXI6OnBsYXRmb3JtR2FtZXBh
ZENvbm5lY3RlZChQbGF0Zm9ybUdhbWVwYWQmIHBsYXRmb3JtR2FtZXBhZCwKIAogdm9pZCBHYW1l
cGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkRGlzY29ubmVjdGVkKFBsYXRmb3JtR2FtZXBhZCYg
cGxhdGZvcm1HYW1lcGFkKQogewotICAgIFZlY3RvcjxXZWFrUHRyPERPTVdpbmRvdz4+IHdlYWtX
aW5kb3dzOwotICAgIGZvciAoYXV0byogZG9tV2luZG93IDogbV9kb21XaW5kb3dzKQotICAgICAg
ICB3ZWFrV2luZG93cy5hcHBlbmQoKmRvbVdpbmRvdyk7Ci0KICAgICBIYXNoU2V0PE5hdmlnYXRv
ckdhbWVwYWQqPiBub3RpZmllZE5hdmlnYXRvcnM7CiAKICAgICAvLyBIYW5kbGUgdGhlIGRpc2Nv
bm5lY3QgZm9yIGFsbCBET01XaW5kb3dzIHdpdGggZXZlbnQgbGlzdGVuZXJzIGFuZCB0aGVpciBO
YXZpZ2F0b3JzLgotICAgIGZvciAoYXV0byYgd2luZG93IDogd2Vha1dpbmRvd3MpIHsKKyAgICBm
b3IgKGF1dG8mIHdpbmRvdyA6IGNvcHlUb1ZlY3Rvck9mPFdlYWtQdHI8RE9NV2luZG93Pj4obV9k
b21XaW5kb3dzKSkgewogICAgICAgICAvLyBFdmVudCBkaXNwYXRjaCBtaWdodCBoYXZlIG1hZGUg
dGhpcyB3aW5kb3cgZ28gYXdheS4KICAgICAgICAgaWYgKCF3aW5kb3cpCiAgICAgICAgICAgICBj
b250aW51ZTsKQEAgLTE0MywxMSArMTM5LDcgQEAgdm9pZCBHYW1lcGFkTWFuYWdlcjo6bWFrZUdh
bWVwYWRWaXNpYmxlKFBsYXRmb3JtR2FtZXBhZCYgcGxhdGZvcm1HYW1lcGFkLCBIYXNoU2UKICAg
ICBmb3IgKGF1dG8qIG5hdmlnYXRvciA6IG5hdmlnYXRvclNldCkKICAgICAgICAgbmF2aWdhdG9y
LT5nYW1lcGFkQ29ubmVjdGVkKHBsYXRmb3JtR2FtZXBhZCk7CiAKLSAgICBWZWN0b3I8V2Vha1B0
cjxET01XaW5kb3c+PiB3ZWFrV2luZG93czsKLSAgICBmb3IgKGF1dG8qIGRvbVdpbmRvdyA6IG1f
ZG9tV2luZG93cykKLSAgICAgICAgd2Vha1dpbmRvd3MuYXBwZW5kKCpkb21XaW5kb3cpOwotCi0g
ICAgZm9yIChhdXRvJiB3aW5kb3cgOiB3ZWFrV2luZG93cykgeworICAgIGZvciAoYXV0byYgd2lu
ZG93IDogY29weVRvVmVjdG9yT2Y8V2Vha1B0cjxET01XaW5kb3c+PihtX2RvbVdpbmRvd3MpKSB7
CiAgICAgICAgIC8vIEV2ZW50IGRpc3BhdGNoIG1pZ2h0IGhhdmUgbWFkZSB0aGlzIHdpbmRvdyBn
byBhd2F5LgogICAgICAgICBpZiAoIXdpbmRvdykKICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCmluZGV4
IDdhYTYzMmI3ZWMwNDdiZTQ2MDhiNTFhMDk0ZWExYTRlNTdhMjYyOWIuLjBiZThiZDExNmVjMjM2
MTIzYzcxNTMyZDdlZTM2YzU2ZTk5NjU0OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKQEAgLTEwMiw5ICsxMDIsNyBAQCBSZWY8RE9N
U3RyaW5nTGlzdD4gSURCRGF0YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMoKSBjb25zdAogewogICAg
IEFTU0VSVChjYW5DdXJyZW50VGhyZWFkQWNjZXNzVGhyZWFkTG9jYWxEYXRhKG9yaWdpblRocmVh
ZCgpKSk7CiAKLSAgICBhdXRvIG9iamVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVh
dGUoKTsKLSAgICBmb3IgKGF1dG8mIG5hbWUgOiBtX2luZm8ub2JqZWN0U3RvcmVOYW1lcygpKQot
ICAgICAgICBvYmplY3RTdG9yZU5hbWVzLT5hcHBlbmQobmFtZSk7CisgICAgYXV0byBvYmplY3RT
dG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKG1faW5mby5vYmplY3RTdG9yZU5hbWVz
KCkpOwogICAgIG9iamVjdFN0b3JlTmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gb2JqZWN0U3Rv
cmVOYW1lczsKIH0KQEAgLTE3NSwxOSArMTczLDE2IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJUcmFu
c2FjdGlvbj4+IElEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbihTdHJpbmdPclZlY3Rvck9mU3RyaW5n
CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0
byBleGVjdXRlICd0cmFuc2FjdGlvbicgb24gJ0lEQkRhdGFiYXNlJzogVGhlIGRhdGFiYXNlIGNv
bm5lY3Rpb24gaXMgY2xvc2luZy4iX3MgfTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IG9iamVjdFN0
b3JlczsKLSAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oc3Rv
cmVOYW1lcykpCisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPFN0cmluZz4+
KHN0b3JlTmFtZXMpKSB7CiAgICAgICAgIG9iamVjdFN0b3JlcyA9IFdURk1vdmUoc3RkOjpnZXQ8
VmVjdG9yPFN0cmluZz4+KHN0b3JlTmFtZXMpKTsKLSAgICBlbHNlCisgICAgICAgIC8vIEl0IGlz
IHZhbGlkIGZvciBqYXZhc2NyaXB0IHRvIHBhc3MgaW4gYSBsaXN0IG9mIG9iamVjdCBzdG9yZSBu
YW1lcyB3aXRoIHRoZSBzYW1lIG5hbWUgbGlzdGVkIHR3aWNlLAorICAgICAgICAvLyBzbyB3ZSBu
ZWVkIHRvIHB1dCB0aGVtIGFsbCBpbiBhIHNldCB0byBnZXQgYSB1bmlxdWUgbGlzdC4KKyAgICAg
ICAgSGFzaFNldDxTdHJpbmc+IG9iamVjdFN0b3JlU2V0OworICAgICAgICBvYmplY3RTdG9yZVNl
dC5hZGQob2JqZWN0U3RvcmVzLmJlZ2luKCksIG9iamVjdFN0b3Jlcy5lbmQoKSk7CisgICAgICAg
IG9iamVjdFN0b3JlcyA9IGNvcHlUb1ZlY3RvcihvYmplY3RTdG9yZVNldCk7CisgICAgfSBlbHNl
CiAgICAgICAgIG9iamVjdFN0b3Jlcy5hcHBlbmQoV1RGTW92ZShzdGQ6OmdldDxTdHJpbmc+KHN0
b3JlTmFtZXMpKSk7CiAKLSAgICAvLyBJdCBpcyB2YWxpZCBmb3IgamF2YXNjcmlwdCB0byBwYXNz
IGluIGEgbGlzdCBvZiBvYmplY3Qgc3RvcmUgbmFtZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGxpc3Rl
ZCB0d2ljZSwKLSAgICAvLyBzbyB3ZSBuZWVkIHRvIHB1dCB0aGVtIGFsbCBpbiBhIHNldCB0byBn
ZXQgYSB1bmlxdWUgbGlzdC4KLSAgICBIYXNoU2V0PFN0cmluZz4gb2JqZWN0U3RvcmVTZXQ7Ci0g
ICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZSA6IG9iamVjdFN0b3JlcykKLSAgICAgICAgb2JqZWN0
U3RvcmVTZXQuYWRkKG9iamVjdFN0b3JlKTsKLQotICAgIG9iamVjdFN0b3JlcyA9IGNvcHlUb1Zl
Y3RvcihvYmplY3RTdG9yZVNldCk7Ci0KICAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlTmFtZSA6
IG9iamVjdFN0b3JlcykgewogICAgICAgICBpZiAobV9pbmZvLmhhc09iamVjdFN0b3JlKG9iamVj
dFN0b3JlTmFtZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaAppbmRleCA0Yjk3ODUzNjlkMTkwYTZiMTk2OTFk
MTM3YWUxNTY3ZTVjMzc5NWQ5Li45ZDYzOWUyYTM0NWJjYjgzMjcyNjRhOGE2NzJmYzZjM2M4ZWQ2
NTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlE
YXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5o
CkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRlIDx2YXJp
YW50PgorI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvU3RkU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCkBAIC0xMTcsNDEgKzExOCw2IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwogICAgIH0KIAotICAgIHVu
c2lnbmVkIGhhc2goKSBjb25zdAotICAgIHsKLSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBoYXNo
Q29kZXM7Ci0gICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1f
dHlwZSkpOwotICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKG1faXNOdWxsID8gMSA6IDApOwotICAg
ICAgICBoYXNoQ29kZXMuYXBwZW5kKG1faXNEZWxldGVkVmFsdWUgPyAxIDogMCk7Ci0gICAgICAg
IHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpJbnZh
bGlkOgotICAgICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TWF4OgotICAgICAgICBjYXNl
IEluZGV4ZWREQjo6S2V5VHlwZTo6TWluOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgSW5kZXhlZERCOjpLZXlUeXBlOjpOdW1iZXI6Ci0gICAgICAgIGNhc2UgSW5kZXhlZERCOjpL
ZXlUeXBlOjpEYXRlOgotICAgICAgICAgICAgaGFzaENvZGVzLmFwcGVuZChTdHJpbmdIYXNoZXI6
Omhhc2hNZW1vcnk8c2l6ZW9mKGRvdWJsZSk+KCZzdGQ6OmdldDxkb3VibGU+KG1fdmFsdWUpKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OlN0
cmluZzoKLSAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoU3RyaW5nSGFzaDo6aGFzaChzdGQ6
OmdldDxTdHJpbmc+KG1fdmFsdWUpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBJbmRleGVkREI6OktleVR5cGU6OkJpbmFyeTogewotICAgICAgICAgICAgYXV0byogZGF0YSA9
IHN0ZDo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKS5kYXRhKCk7Ci0gICAgICAg
ICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAgICAgICAgaGFzaENvZGVzLmFwcGVuZCgwKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKFN0cmluZ0hh
c2hlcjo6aGFzaE1lbW9yeShkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OkFy
cmF5OgotICAgICAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBzdGQ6OmdldDxWZWN0b3I8SURCS2V5
RGF0YT4+KG1fdmFsdWUpKQotICAgICAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoa2V5Lmhh
c2goKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBT
dHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoaGFzaENvZGVzLmRhdGEoKSwgaGFzaENvZGVzLnNpemUo
KSAqIHNpemVvZih1bnNpZ25lZCkpOwotICAgIH0KLQogICAgIFN0cmluZyBzdHJpbmcoKSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBJbmRleGVkREI6OktleVR5cGU6OlN0
cmluZyk7CkBAIC0xODQsNiArMTUwLDggQEAgcHVibGljOgogCiAgICAgc2l6ZV90IHNpemUoKSBj
b25zdDsKIAorICAgIGJvb2wgaXNEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2lzRGVs
ZXRlZFZhbHVlOyB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIHN0cnVjdCBJREJLZXlEYXRhSGFz
aFRyYWl0czsKIApAQCAtMTk2LDggKzE2NCwzNiBAQCBwcml2YXRlOgogICAgIHN0ZDo6dmFyaWFu
dDxWZWN0b3I8SURCS2V5RGF0YT4sIFN0cmluZywgZG91YmxlLCBUaHJlYWRTYWZlRGF0YUJ1ZmZl
cj4gbV92YWx1ZTsKIH07CiAKK2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3Qg
SURCS2V5RGF0YSYga2V5RGF0YSkKK3sKKyAgICBhZGQoaGFzaGVyLCBrZXlEYXRhLnR5cGUoKSk7
CisgICAgYWRkKGhhc2hlciwga2V5RGF0YS5pc051bGwoKSk7CisgICAgYWRkKGhhc2hlciwga2V5
RGF0YS5pc0RlbGV0ZWRWYWx1ZSgpKTsKKyAgICBzd2l0Y2ggKGtleURhdGEudHlwZSgpKSB7Cisg
ICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OkludmFsaWQ6CisgICAgY2FzZSBJbmRleGVkREI6
OktleVR5cGU6Ok1heDoKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TWluOgorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TnVtYmVyOgorICAgIGNhc2Ug
SW5kZXhlZERCOjpLZXlUeXBlOjpEYXRlOgorICAgICAgICBhZGQoaGFzaGVyLCBrZXlEYXRhLm51
bWJlcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OlN0
cmluZzoKKyAgICAgICAgYWRkKGhhc2hlciwga2V5RGF0YS5zdHJpbmcoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpCaW5hcnk6IHsKKyAgICAgICAgYWRk
KGhhc2hlciwga2V5RGF0YS5iaW5hcnkoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6QXJyYXk6CisgICAgICAgIGZvciAoYXV0byYga2V5IDog
a2V5RGF0YS5hcnJheSgpKQorICAgICAgICAgICAgYWRkKGhhc2hlciwga2V5KTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCiBzdHJ1Y3QgSURCS2V5RGF0YUhhc2ggewotICAgIHN0YXRpYyB1
bnNpZ25lZCBoYXNoKGNvbnN0IElEQktleURhdGEmIGEpIHsgcmV0dXJuIGEuaGFzaCgpOyB9Cisg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgSURCS2V5RGF0YSYgYSkgeyByZXR1cm4gY29t
cHV0ZUhhc2goYSk7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBJREJLZXlEYXRhJiBh
LCBjb25zdCBJREJLZXlEYXRhJiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29u
c3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOwogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcApp
bmRleCAxNDM1MTQwYTVjYjRhMWExZDQwN2EyZGIyOWQxNWJkZjJkNTJjMGI2Li5jZTYzYzZhNTZi
MTRkNWJlMDMyMjU3MzcyNTMyMmI4MmYwZGRkZDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCkBAIC0xMjYsMTQgKzEyNiwx
MSBAQCBSZWY8RE9NU3RyaW5nTGlzdD4gSURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMoKSBjb25z
dAogewogICAgIEFTU0VSVChjYW5DdXJyZW50VGhyZWFkQWNjZXNzVGhyZWFkTG9jYWxEYXRhKG1f
dHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSkpOwogCi0gICAgYXV0byBpbmRl
eE5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0KLSAgICBpZiAoIW1fZGVsZXRlZCkg
ewotICAgICAgICBmb3IgKGF1dG8mIG5hbWUgOiBtX2luZm8uaW5kZXhOYW1lcygpKQotICAgICAg
ICAgICAgaW5kZXhOYW1lcy0+YXBwZW5kKG5hbWUpOwotICAgICAgICBpbmRleE5hbWVzLT5zb3J0
KCk7Ci0gICAgfQorICAgIGlmIChtX2RlbGV0ZWQpCisgICAgICAgIHJldHVybiBET01TdHJpbmdM
aXN0OjpjcmVhdGUoKTsKIAorICAgIGF1dG8gaW5kZXhOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNy
ZWF0ZShtX2luZm8uaW5kZXhOYW1lcygpKTsKKyAgICBpbmRleE5hbWVzLT5zb3J0KCk7CiAgICAg
cmV0dXJuIGluZGV4TmFtZXM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAppbmRleCA2YzExMjFiNzMxMGY3MzdmN2I5NWJl
Y2VlODQ1NGU2YWM1MGRmMmI2Li5iY2NmYzVkODA2MmI4MDI4ZGRmNDE1YzYyZWM1NTNmMzc2MDg4
ZTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb24uY3BwCkBAIC0xMjEsMTIgKzEyMSw5IEBAIFJlZjxET01TdHJpbmdMaXN0PiBJREJU
cmFuc2FjdGlvbjo6b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNhbkN1
cnJlbnRUaHJlYWRBY2Nlc3NUaHJlYWRMb2NhbERhdGEobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFk
KCkpKTsKIAotICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+IG5hbWVzID0gaXNWZXJzaW9uQ2hhbmdl
KCkgPyBtX2RhdGFiYXNlLT5pbmZvKCkub2JqZWN0U3RvcmVOYW1lcygpIDogbV9pbmZvLm9iamVj
dFN0b3JlcygpOwotCi0gICAgUmVmPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMgPSBE
T01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKLSAgICBmb3IgKGF1dG8mIG5hbWUgOiBuYW1lcykKLSAg
ICAgICAgb2JqZWN0U3RvcmVOYW1lcy0+YXBwZW5kKG5hbWUpOworICAgIFZlY3RvcjxTdHJpbmc+
IG5hbWVzID0gaXNWZXJzaW9uQ2hhbmdlKCkgPyBtX2RhdGFiYXNlLT5pbmZvKCkub2JqZWN0U3Rv
cmVOYW1lcygpIDogbV9pbmZvLm9iamVjdFN0b3JlcygpOwogCisgICAgYXV0byBvYmplY3RTdG9y
ZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKFdURk1vdmUobmFtZXMpKTsKICAgICBvYmpl
Y3RTdG9yZU5hbWVzLT5zb3J0KCk7CiAgICAgcmV0dXJuIG9iamVjdFN0b3JlTmFtZXM7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250
cm9sc0hvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlh
Q29udHJvbHNIb3N0LmNwcAppbmRleCAxOWEwNjllMjNiMzlkYmI0YTcwNjVkOGRlNzhkN2VlNDkz
YzY5ODE4Li5iODI1ZWM4MDA1MTQ4MDI4ZTJiMDdiMTlkYzc4MzkyYTQzYThjYmE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hv
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNv
bnRyb2xzSG9zdC5jcHAKQEAgLTU1NSwxMSArNTU1LDEwIEBAIGJvb2wgTWVkaWFDb250cm9sc0hv
c3Q6OnNob3dNZWRpYUNvbnRyb2xzQ29udGV4dE1lbnUoSFRNTEVsZW1lbnQmIHRhcmdldCwgU3Ry
aW5nCiAKICAgICBpZiAob3B0aW9uc0pTT05PYmplY3QtPmdldEJvb2xlYW4oImluY2x1ZGVMYW5n
dWFnZXMiX3MpLnZhbHVlX29yKGZhbHNlKSkgewogICAgICAgICBpZiAoYXV0byogYXVkaW9UcmFj
a3MgPSBtZWRpYUVsZW1lbnQuYXVkaW9UcmFja3MoKTsgYXVkaW9UcmFja3MgJiYgYXVkaW9UcmFj
a3MtPmxlbmd0aCgpID4gMSkgewotICAgICAgICAgICAgVmVjdG9yPE1lbnVJdGVtPiBsYW5ndWFn
ZU1lbnVJdGVtczsKLQogICAgICAgICAgICAgYXV0byYgY2FwdGlvblByZWZlcmVuY2VzID0gcGFn
ZS0+Z3JvdXAoKS5lbnN1cmVDYXB0aW9uUHJlZmVyZW5jZXMoKTsKLSAgICAgICAgICAgIGZvciAo
YXV0byYgYXVkaW9UcmFjayA6IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JN
ZW51KGF1ZGlvVHJhY2tzKSkKLSAgICAgICAgICAgICAgICBsYW5ndWFnZU1lbnVJdGVtcy5hcHBl
bmQoY3JlYXRlTWVudUl0ZW0oYXVkaW9UcmFjaywgY2FwdGlvblByZWZlcmVuY2VzLmRpc3BsYXlO
YW1lRm9yVHJhY2soYXVkaW9UcmFjay5nZXQoKSksIGF1ZGlvVHJhY2stPmVuYWJsZWQoKSkpOwor
ICAgICAgICAgICAgYXV0byBsYW5ndWFnZU1lbnVJdGVtcyA9IGNhcHRpb25QcmVmZXJlbmNlcy5z
b3J0ZWRUcmFja0xpc3RGb3JNZW51KGF1ZGlvVHJhY2tzKS5tYXAoWyZdKGF1dG8mIGF1ZGlvVHJh
Y2spIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTWVudUl0ZW0oYXVkaW9UcmFjaywg
Y2FwdGlvblByZWZlcmVuY2VzLmRpc3BsYXlOYW1lRm9yVHJhY2soYXVkaW9UcmFjay5nZXQoKSks
IGF1ZGlvVHJhY2stPmVuYWJsZWQoKSk7CisgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAg
aWYgKCFsYW5ndWFnZU1lbnVJdGVtcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgaXRlbXMu
YXBwZW5kKGNyZWF0ZVN1Ym1lbnUoV0VCX1VJX1NUUklOR19LRVkoIkxhbmd1YWdlcyIsICJMYW5n
dWFnZXMgKE1lZGlhIENvbnRyb2xzIE1lbnUpIiwgIkxhbmd1YWdlcyBtZWRpYSBjb250cm9scyBj
b250ZXh0IG1lbnUgdGl0bGUiKSwgImdsb2JlIl9zLCBXVEZNb3ZlKGxhbmd1YWdlTWVudUl0ZW1z
KSkpOwpAQCAtNTY4LDE1ICs1NjcsMTMgQEAgYm9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6c2hvd01l
ZGlhQ29udHJvbHNDb250ZXh0TWVudShIVE1MRWxlbWVudCYgdGFyZ2V0LCBTdHJpbmcKIAogICAg
IGlmIChvcHRpb25zSlNPTk9iamVjdC0+Z2V0Qm9vbGVhbigiaW5jbHVkZVN1YnRpdGxlcyJfcyku
dmFsdWVfb3IoZmFsc2UpKSB7CiAgICAgICAgIGlmIChhdXRvKiB0ZXh0VHJhY2tzID0gbWVkaWFF
bGVtZW50LnRleHRUcmFja3MoKTsgdGV4dFRyYWNrcyAmJiB0ZXh0VHJhY2tzLT5sZW5ndGgoKSkg
ewotICAgICAgICAgICAgVmVjdG9yPE1lbnVJdGVtPiBzdWJ0aXRsZU1lbnVJdGVtczsKLQogICAg
ICAgICAgICAgYXV0byYgY2FwdGlvblByZWZlcmVuY2VzID0gcGFnZS0+Z3JvdXAoKS5lbnN1cmVD
YXB0aW9uUHJlZmVyZW5jZXMoKTsKICAgICAgICAgICAgIGF1dG8gc29ydGVkVGV4dFRyYWNrcyA9
IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KHRleHRUcmFja3MsIHsg
VGV4dFRyYWNrOjpLaW5kOjpTdWJ0aXRsZXMsIFRleHRUcmFjazo6S2luZDo6Q2FwdGlvbnMsIFRl
eHRUcmFjazo6S2luZDo6RGVzY3JpcHRpb25zIH0pOwogICAgICAgICAgICAgYm9vbCBhbGxUcmFj
a3NEaXNhYmxlZCA9IG5vdEZvdW5kID09IHNvcnRlZFRleHRUcmFja3MuZmluZElmKFtdIChjb25z
dCBhdXRvJiB0ZXh0VHJhY2spIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dFRyYWNrLT5t
b2RlKCkgPT0gVGV4dFRyYWNrOjpNb2RlOjpTaG93aW5nOwogICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICBib29sIHVzZXNBdXRvbWF0aWNUcmFjayA9IGNhcHRpb25QcmVmZXJlbmNlcy5jYXB0
aW9uRGlzcGxheU1vZGUoKSA9PSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpBdXRvbWF0aWMgJiYg
YWxsVHJhY2tzRGlzYWJsZWQ7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHRleHRUcmFjayA6IHNv
cnRlZFRleHRUcmFja3MpIHsKKyAgICAgICAgICAgIGF1dG8gc3VidGl0bGVNZW51SXRlbXMgPSBz
b3J0ZWRUZXh0VHJhY2tzLm1hcChbJl0oYXV0byYgdGV4dFRyYWNrKSB7CiAgICAgICAgICAgICAg
ICAgYm9vbCBjaGVja2VkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYgKGFsbFRyYWNrc0Rp
c2FibGVkICYmIHRleHRUcmFjayA9PSAmVGV4dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0oKSAm
JiAoY2FwdGlvblByZWZlcmVuY2VzLmNhcHRpb25EaXNwbGF5TW9kZSgpID09IENhcHRpb25Vc2Vy
UHJlZmVyZW5jZXM6OkZvcmNlZE9ubHkgfHwgY2FwdGlvblByZWZlcmVuY2VzLmNhcHRpb25EaXNw
bGF5TW9kZSgpID09IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6Ok1hbnVhbCkpCiAgICAgICAgICAg
ICAgICAgICAgIGNoZWNrZWQgPSB0cnVlOwpAQCAtNTg0LDggKzU4MSw4IEBAIGJvb2wgTWVkaWFD
b250cm9sc0hvc3Q6OnNob3dNZWRpYUNvbnRyb2xzQ29udGV4dE1lbnUoSFRNTEVsZW1lbnQmIHRh
cmdldCwgU3RyaW5nCiAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKCF1c2VzQXV0b21hdGljVHJhY2sgJiYgdGV4dFRyYWNrLT5tb2Rl
KCkgPT0gVGV4dFRyYWNrOjpNb2RlOjpTaG93aW5nKQogICAgICAgICAgICAgICAgICAgICBjaGVj
a2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBzdWJ0aXRsZU1lbnVJdGVtcy5hcHBlbmQoY3Jl
YXRlTWVudUl0ZW0odGV4dFRyYWNrLCBjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JU
cmFjayh0ZXh0VHJhY2suZ2V0KCkpLCBjaGVja2VkKSk7Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZU1lbnVJdGVtKHRleHRUcmFjaywgY2FwdGlvblByZWZlcmVu
Y2VzLmRpc3BsYXlOYW1lRm9yVHJhY2sodGV4dFRyYWNrLmdldCgpKSwgY2hlY2tlZCk7CisgICAg
ICAgICAgICB9KTsKIAogICAgICAgICAgICAgaWYgKCFzdWJ0aXRsZU1lbnVJdGVtcy5pc0VtcHR5
KCkpCiAgICAgICAgICAgICAgICAgaXRlbXMuYXBwZW5kKGNyZWF0ZVN1Ym1lbnUoV0VCX1VJX1NU
UklOR19LRVkoIlN1YnRpdGxlcyIsICJTdWJ0aXRsZXMgKE1lZGlhIENvbnRyb2xzIE1lbnUpIiwg
IlN1YnRpdGxlcyBtZWRpYSBjb250cm9scyBjb250ZXh0IG1lbnUgdGl0bGUiKSwgImNhcHRpb25z
LmJ1YmJsZSJfcywgV1RGTW92ZShzdWJ0aXRsZU1lbnVJdGVtcykpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKaW5kZXggOTEyNzQ3
ZjQwNmMyOTU5NDk5NzNiNWJiMTM0OWRiY2E2NzQxYzEzNS4uYTJlNjU4YTkyZjk5N2Q3ZjRiNDNl
MTcwM2Y0YTBlMDk0OTE3YjBlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKQEAgLTEwNTEsMTAgKzEwNTEsOSBAQCB2b2lkIE1l
ZGlhU291cmNlOjpvblJlYWR5U3RhdGVDaGFuZ2UoUmVhZHlTdGF0ZSBvbGRTdGF0ZSwgUmVhZHlT
dGF0ZSBuZXdTdGF0ZSkKIAogVmVjdG9yPFBsYXRmb3JtVGltZVJhbmdlcz4gTWVkaWFTb3VyY2U6
OmFjdGl2ZVJhbmdlcygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFBsYXRmb3JtVGltZVJhbmdlcz4g
YWN0aXZlUmFuZ2VzOwotICAgIGZvciAoYXV0byYgc291cmNlQnVmZmVyIDogKm1fYWN0aXZlU291
cmNlQnVmZmVycykKLSAgICAgICAgYWN0aXZlUmFuZ2VzLmFwcGVuZChzb3VyY2VCdWZmZXItPmJ1
ZmZlcmVkSW50ZXJuYWwoKS5yYW5nZXMoKSk7Ci0gICAgcmV0dXJuIGFjdGl2ZVJhbmdlczsKKyAg
ICByZXR1cm4gV1RGOjptYXAoKm1fYWN0aXZlU291cmNlQnVmZmVycywgW10oYXV0byYgc291cmNl
QnVmZmVyKSB7CisgICAgICAgIHJldHVybiBzb3VyY2VCdWZmZXItPmJ1ZmZlcmVkSW50ZXJuYWwo
KS5yYW5nZXMoKTsKKyAgICB9KTsKIH0KIAogRXhjZXB0aW9uT3I8UmVmPFNvdXJjZUJ1ZmZlclBy
aXZhdGU+PiBNZWRpYVNvdXJjZTo6Y3JlYXRlU291cmNlQnVmZmVyUHJpdmF0ZShjb25zdCBDb250
ZW50VHlwZSYgaW5jb21pbmdUeXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXNvdXJjZS9TYW1wbGVNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
b3VyY2UvU2FtcGxlTWFwLmgKaW5kZXggZWFmNDkzMTU5N2QyNjg1MjNjNjY3YmQ5Y2RjYzRjZWE2
NTQzMzY5NS4uYWYxZTEwNDU4MTc4N2YxNWY2ZjFmMzg1YjI1NzI0NDRkODg1OTVmYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9TYW1wbGVNYXAuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1hcC5oCkBAIC05MSw2
ICs5MSw3IEBAIHB1YmxpYzoKICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5yYmVnaW4oKTsgfQogICAgIHJldmVyc2VfaXRlcmF0b3Ig
cmVuZCgpIHsgcmV0dXJuIG1fc2FtcGxlcy5yZW5kKCk7IH0KICAgICBjb25zdF9yZXZlcnNlX2l0
ZXJhdG9yIHJlbmQoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZXMucmVuZCgpOyB9CisgICAgc2l6
ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZXMuc2l6ZSgpOyB9CiAKICAgICBXRUJD
T1JFX0VYUE9SVCBpdGVyYXRvciBmaW5kU2FtcGxlV2l0aERlY29kZUtleShjb25zdCBLZXlUeXBl
Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgaXRlcmF0b3IgZmluZFNhbXBsZUFmdGVyRGVjb2RlS2V5
KGNvbnN0IEtleVR5cGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzb3VyY2UvU291cmNlQnVmZmVyTGlzdC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0LmgKaW5kZXggZmM2ZTA3M2FiOTBlNzZkMTgxNWY4ODk2
YjZmNjYwOTZkZjJmZGRkNS4uZjMyYzg1Nzk5MGM0ZDg2NDllMjQzZGI1NjU4MjMzM2ZmYjk0ZjEw
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VC
dWZmZXJMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3Vy
Y2VCdWZmZXJMaXN0LmgKQEAgLTQ3LDcgKzQ3LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWY8
U291cmNlQnVmZmVyTGlzdD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKICAgICB2
aXJ0dWFsIH5Tb3VyY2VCdWZmZXJMaXN0KCk7CiAKLSAgICB1bnNpZ25lZCBsb25nIGxlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KKyAgICBzaXplX3QgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQorCiAgICAgU291cmNlQnVmZmVyKiBpdGVtKHVu
c2lnbmVkIGxvbmcgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIChpbmRleCA8IG1fbGlzdC5zaXplKCkp
ID8gbV9saXN0W2luZGV4XS5nZXQoKSA6IG51bGxwdHI7IH0KIAogICAgIHZvaWQgYWRkKFJlZjxT
b3VyY2VCdWZmZXI+JiYpOwpAQCAtNTgsNiArNTksOSBAQCBwdWJsaWM6CiAKICAgICBWZWN0b3I8
UmVmUHRyPFNvdXJjZUJ1ZmZlcj4+OjppdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fbGlzdC5i
ZWdpbigpOyB9CiAgICAgVmVjdG9yPFJlZlB0cjxTb3VyY2VCdWZmZXI+Pjo6aXRlcmF0b3IgZW5k
KCkgeyByZXR1cm4gbV9saXN0LmVuZCgpOyB9CisgICAgVmVjdG9yPFJlZlB0cjxTb3VyY2VCdWZm
ZXI+Pjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2xpc3QuYmVnaW4o
KTsgfQorICAgIFZlY3RvcjxSZWZQdHI8U291cmNlQnVmZmVyPj46OmNvbnN0X2l0ZXJhdG9yIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5lbmQoKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQogCiAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJm
YWNlCiAgICAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBTb3VyY2VCdWZmZXJMaXN0RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBl
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50
aGVzaXMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lz
LmNwcAppbmRleCBlYWYzYTJlMWU3OThhNDgxZjc2OGIzM2M1ZmQyOWQzYzdjYmFiM2FlLi44MmMx
YTNhMGMwNzI1NWMxZTgwZGE2MWQ1OTBiYTljOTQxY2MwNjllIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5jcHAKQEAgLTkzLDkgKzkzLDEw
IEBAIGNvbnN0IFZlY3RvcjxSZWY8U3BlZWNoU3ludGhlc2lzVm9pY2U+PiYgU3BlZWNoU3ludGhl
c2lzOjpnZXRWb2ljZXMoKQogICAgICAgICByZXR1cm4gbV92b2ljZUxpc3Q7CiAKICAgICAvLyBJ
ZiB0aGUgdm9pY2VMaXN0IGlzIGVtcHR5LCB0aGF0J3MgdGhlIGN1ZSB0byBnZXQgdGhlIHZvaWNl
cyBmcm9tIHRoZSBwbGF0Zm9ybSBhZ2Fpbi4KLSAgICBmb3IgKGF1dG8mIHZvaWNlIDogbV9zcGVl
Y2hTeW50aGVzaXNDbGllbnQgPyBtX3NwZWVjaFN5bnRoZXNpc0NsaWVudC0+dm9pY2VMaXN0KCkg
OiBlbnN1cmVQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyKCkudm9pY2VMaXN0KCkpCi0gICAgICAg
IG1fdm9pY2VMaXN0LmFwcGVuZChTcGVlY2hTeW50aGVzaXNWb2ljZTo6Y3JlYXRlKCp2b2ljZSkp
OwotCisgICAgYXV0byYgdm9pY2VMaXN0ID0gbV9zcGVlY2hTeW50aGVzaXNDbGllbnQgPyBtX3Nw
ZWVjaFN5bnRoZXNpc0NsaWVudC0+dm9pY2VMaXN0KCkgOiBlbnN1cmVQbGF0Zm9ybVNwZWVjaFN5
bnRoZXNpemVyKCkudm9pY2VMaXN0KCk7CisgICAgbV92b2ljZUxpc3QgPSB2b2ljZUxpc3QubWFw
KFtdKGF1dG8mIHZvaWNlKSB7CisgICAgICAgIHJldHVybiBTcGVlY2hTeW50aGVzaXNWb2ljZTo6
Y3JlYXRlKCp2b2ljZSk7CisgICAgfSk7CiAgICAgcmV0dXJuIG1fdm9pY2VMaXN0OwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hS
ZWNvZ25pemVyVGFzay5tbSBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL2NvY29hL1dl
YlNwZWVjaFJlY29nbml6ZXJUYXNrLm1tCmluZGV4IGYxYjk2OTU4MDU3ZDJmZTYwNDRkMmM3YjI1
OWRiNmM1Y2ViNDRlZmUuLmE1ZTg1YWY4MjliYzBkZGRlZjYyYzYxYTRmNmM5ZjJjZjJhZDZjZjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVj
aFJlY29nbml6ZXJUYXNrLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL2Nv
Y29hL1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrLm1tCkBAIC0xMjgsOSArMTI4LDggQEAgLSAodm9p
ZCljYWxsYmFja1dpdGhUcmFuc2NyaXB0aW9uczooTlNBcnJheTxTRlRyYW5zY3JpcHRpb24gKj4g
Kil0cmFuc2NyaXB0aW9ucwogICAgICAgICBpZiAoYWx0ZXJuYXRpdmVzLnNpemUoKSA9PSBfbWF4
QWx0ZXJuYXRpdmVzKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIFZlY3RvcjxTcGVl
Y2hSZWNvZ25pdGlvblJlc3VsdERhdGE+IGRhdGFzOwotICAgIGRhdGFzLmFwcGVuZChTcGVlY2hS
ZWNvZ25pdGlvblJlc3VsdERhdGEgeyBXVEZNb3ZlKGFsdGVybmF0aXZlcyksIGJvb2woaXNGaW5h
bCkgfSk7Ci0gICAgX2RlbGVnYXRlQ2FsbGJhY2soU3BlZWNoUmVjb2duaXRpb25VcGRhdGU6OmNy
ZWF0ZVJlc3VsdChfaWRlbnRpZmllciwgV1RGTW92ZShkYXRhcykpKTsKKyAgICBTcGVlY2hSZWNv
Z25pdGlvblJlc3VsdERhdGEgZGF0YSB7IFdURk1vdmUoYWx0ZXJuYXRpdmVzKSwgISFpc0ZpbmFs
IH07CisgICAgX2RlbGVnYXRlQ2FsbGJhY2soU3BlZWNoUmVjb2duaXRpb25VcGRhdGU6OmNyZWF0
ZVJlc3VsdChfaWRlbnRpZmllciwgeyBXVEZNb3ZlKGRhdGEpIH0pKTsKIH0KIAogLSAodm9pZClh
dWRpb1NhbXBsZXNBdmFpbGFibGU6KENNU2FtcGxlQnVmZmVyUmVmKXNhbXBsZUJ1ZmZlcgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvY29jb2EvV2ViU3BlZWNoUmVj
b2duaXplclRhc2tNb2NrLm1tIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvY29jb2Ev
V2ViU3BlZWNoUmVjb2duaXplclRhc2tNb2NrLm1tCmluZGV4IGJjNWM2MjE5YjVkYWRjM2IxY2Rj
NTkwZDY1Yzg5N2I3MjUwYjFlMjEuLjk2M2ZiNDdjNGM4NWFhMDYwNWEyZGFiYzcxOWU1Njc0YzI2
MGFiZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL2NvY29hL1dl
YlNwZWVjaFJlY29nbml6ZXJUYXNrTW9jay5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFza01vY2subW0KQEAgLTYzLDExICs2
Myw5IEBAIC0gKHZvaWQpYXVkaW9TYW1wbGVzQXZhaWxhYmxlOihDTVNhbXBsZUJ1ZmZlclJlZilz
YW1wbGVCdWZmZXIKICAgICB9CiAKICAgICAvLyBGYWtlIHNvbWUgcmVjb2duaXRpb24gcmVzdWx0
cy4KLSAgICBWZWN0b3I8U3BlZWNoUmVjb2duaXRpb25BbHRlcm5hdGl2ZURhdGE+IGFsdGVybmF0
aXZlczsKLSAgICBhbHRlcm5hdGl2ZXMuYXBwZW5kKFNwZWVjaFJlY29nbml0aW9uQWx0ZXJuYXRp
dmVEYXRhIHsgIlRlc3QiLCAxLjAgfSk7Ci0gICAgVmVjdG9yPFNwZWVjaFJlY29nbml0aW9uUmVz
dWx0RGF0YT4gZGF0YXM7Ci0gICAgZGF0YXMuYXBwZW5kKFNwZWVjaFJlY29nbml0aW9uUmVzdWx0
RGF0YSB7IFdURk1vdmUoYWx0ZXJuYXRpdmVzKSwgdHJ1ZSAgfSk7Ci0gICAgX2RlbGVnYXRlQ2Fs
bGJhY2soU3BlZWNoUmVjb2duaXRpb25VcGRhdGU6OmNyZWF0ZVJlc3VsdChfaWRlbnRpZmllciwg
V1RGTW92ZShkYXRhcykpKTsKKyAgICBTcGVlY2hSZWNvZ25pdGlvbkFsdGVybmF0aXZlRGF0YSBh
bHRlcm5hdGl2ZSB7ICJUZXN0IiwgMS4wIH07CisgICAgU3BlZWNoUmVjb2duaXRpb25SZXN1bHRE
YXRhIGRhdGEgeyB7IFdURk1vdmUoYWx0ZXJuYXRpdmUpIH0sIHRydWUgfTsKKyAgICBfZGVsZWdh
dGVDYWxsYmFjayhTcGVlY2hSZWNvZ25pdGlvblVwZGF0ZTo6Y3JlYXRlUmVzdWx0KF9pZGVudGlm
aWVyLCB7IFdURk1vdmUoZGF0YSkgfSkpOwogCiAgICAgaWYgKCFfZG9NdWx0aXBsZVJlY29nbml0
aW9ucykKICAgICAgICAgW3NlbGYgYWJvcnRdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1h
dGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKaW5kZXggZTM1OWEwNDNiMmUzY2YzOWY5YzI2
YmM1OWU5OGYxMDVlMTMyYzEwNS4uOGJjZTY2NzA2NmEzZjc3NmYwZWFiYTk2NmI4MWE3NDZhOTc1
ZTMyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5p
bWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmlt
YXRpb24uY3BwCkBAIC0xNjQsMTAgKzE2NCw4IEBAIHN0YXRpYyBpbmxpbmUgVHJhbnNmb3JtT3Bl
cmF0aW9ucyBibGVuZEZ1bmMoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgY29uCiAg
ICAgaWYgKGNvbnRleHQuY29tcG9zaXRlT3BlcmF0aW9uID09IENvbXBvc2l0ZU9wZXJhdGlvbjo6
QWRkKSB7CiAgICAgICAgIEFTU0VSVChjb250ZXh0LnByb2dyZXNzID09IDEuMCk7CiAgICAgICAg
IFRyYW5zZm9ybU9wZXJhdGlvbnMgcmVzdWx0T3BlcmF0aW9uczsKLSAgICAgICAgZm9yIChhdXRv
IG9wZXJhdGlvbiA6IGZyb20ub3BlcmF0aW9ucygpKQotICAgICAgICAgICAgcmVzdWx0T3BlcmF0
aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKG9wZXJhdGlvbik7Ci0gICAgICAgIGZvciAoYXV0byBv
cGVyYXRpb24gOiB0by5vcGVyYXRpb25zKCkpCi0gICAgICAgICAgICByZXN1bHRPcGVyYXRpb25z
Lm9wZXJhdGlvbnMoKS5hcHBlbmQob3BlcmF0aW9uKTsKKyAgICAgICAgcmVzdWx0T3BlcmF0aW9u
cy5vcGVyYXRpb25zKCkuYXBwZW5kVmVjdG9yKGZyb20ub3BlcmF0aW9ucygpKTsKKyAgICAgICAg
cmVzdWx0T3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kVmVjdG9yKHRvLm9wZXJhdGlvbnMo
KSk7CiAgICAgICAgIHJldHVybiByZXN1bHRPcGVyYXRpb25zOwogICAgIH0KICAgICBhdXRvIGJv
eFNpemUgPSBpczxSZW5kZXJCb3g+KGNvbnRleHQuY2xpZW50LT5yZW5kZXJlcigpKSA/IGRvd25j
YXN0PFJlbmRlckJveD4oKmNvbnRleHQuY2xpZW50LT5yZW5kZXJlcigpKS5ib3JkZXJCb3hSZWN0
KCkuc2l6ZSgpIDogTGF5b3V0U2l6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5p
bWF0aW9uL0RvY3VtZW50VGltZWxpbmVzQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9h
bmltYXRpb24vRG9jdW1lbnRUaW1lbGluZXNDb250cm9sbGVyLmNwcAppbmRleCBiNWZkMmFlZjEw
MDAxMmRhOWM0YmRiMjFlN2FkMDQxYTM2NjQxNmJmLi43MDk0NTNiYzY2MjUyZjk1OTgyNGJhOTRl
Y2E3YTMzMDA4YzljYTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vRG9j
dW1lbnRUaW1lbGluZXNDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRp
b24vRG9jdW1lbnRUaW1lbGluZXNDb250cm9sbGVyLmNwcApAQCAtOTgsOSArOTgsNyBAQCB2b2lk
IERvY3VtZW50VGltZWxpbmVzQ29udHJvbGxlcjo6dXBkYXRlQW5pbWF0aW9uc0FuZFNlbmRFdmVu
dHMoUmVkdWNlZFJlc29sdXRpbwogICAgIEFTU0VSVCghbV90aW1lbGluZXMuaGFzTnVsbFJlZmVy
ZW5jZXMoKSk7CiAKICAgICAvLyBXZSBuZWVkIHRvIGNvcHkgbV90aW1lbGluZXMgYmVmb3JlIGl0
ZXJhdGluZyBvdmVyIGl0cyBtZW1iZXJzIHNpbmNlIHRoZSBzdGVwcyBpbiB0aGlzIHByb2NlZHVy
ZSBtYXkgbXV0YXRlIG1fdGltZWxpbmVzLgotICAgIFZlY3RvcjxSZWY8RG9jdW1lbnRUaW1lbGlu
ZT4+IHByb3RlY3RlZFRpbWVsaW5lczsKLSAgICBmb3IgKGF1dG8mIHRpbWVsaW5lIDogbV90aW1l
bGluZXMpCi0gICAgICAgIHByb3RlY3RlZFRpbWVsaW5lcy5hcHBlbmQodGltZWxpbmUpOworICAg
IGF1dG8gcHJvdGVjdGVkVGltZWxpbmVzID0gY29weVRvVmVjdG9yT2Y8UmVmPERvY3VtZW50VGlt
ZWxpbmU+PihtX3RpbWVsaW5lcyk7CiAKICAgICAvLyBXZSBuZWVkIHRvIGZyZWV6ZSB0aGUgY3Vy
cmVudCB0aW1lIGV2ZW4gaWYgbm8gYW5pbWF0aW9uIGlzIHJ1bm5pbmcuCiAgICAgLy8gZG9jdW1l
bnQudGltZWxpbmUuY3VycmVudFRpbWUgbWF5IGJlIGNhbGxlZCBmcm9tIGEgckFGIGNhbGxiYWNr
IGFuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAKaW5kZXgg
NzdkMWU2MGZhMzI4MzFiMTMyNmMzYjMwODQzNTc3NzI2MDczOTlmNS4uY2ZlNDMyZTdkZWJlMWJl
ZDE1NTU2NWQ4MTJhOGViZTgwN2Y2MDJjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5p
bWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24v
S2V5ZnJhbWVFZmZlY3QuY3BwCkBAIC0zNzUsOCArMzc1LDcgQEAgc3RhdGljIGlubGluZSBFeGNl
cHRpb25Pcjx2b2lkPiBwcm9jZXNzUHJvcGVydHlJbmRleGVkS2V5ZnJhbWVzKEpTR2xvYmFsT2Jq
ZWN0JgogICAgICAgICBjb21wdXRlTWlzc2luZ0tleWZyYW1lT2Zmc2V0cyhwcm9wZXJ0eUtleWZy
YW1lcyk7CiAKICAgICAgICAgLy8gNy4gQWRkIGtleWZyYW1lcyBpbiBwcm9wZXJ0eSBrZXlmcmFt
ZXMgdG8gcHJvY2Vzc2VkIGtleWZyYW1lcy4KLSAgICAgICAgZm9yIChhdXRvJiBrZXlmcmFtZSA6
IHByb3BlcnR5S2V5ZnJhbWVzKQotICAgICAgICAgICAgcGFyc2VkS2V5ZnJhbWVzLmFwcGVuZChX
VEZNb3ZlKGtleWZyYW1lKSk7CisgICAgICAgIHBhcnNlZEtleWZyYW1lcy5hcHBlbmRWZWN0b3Io
cHJvcGVydHlLZXlmcmFtZXMpOwogICAgIH0KIAogICAgIC8vIDMuIFNvcnQgcHJvY2Vzc2VkIGtl
eWZyYW1lcyBieSB0aGUgY29tcHV0ZWQga2V5ZnJhbWUgb2Zmc2V0IG9mIGVhY2gga2V5ZnJhbWUg
aW4gaW5jcmVhc2luZyBvcmRlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5jcHAKaW5kZXggNTM0OWVmMzhmZTY5MDY0ZGQ0NTNm
ZDY4ZDdkYzZhOGVlNzczZDllYy4uYzA1Y2Q4OTQxNWZmNDEyMDRlM2MzYzhjNzczZjQ4ZDExMzYz
YzA5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVu
dEV4dGVuc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29u
dGVudEV4dGVuc2lvbi5jcHAKQEAgLTQ2LDggKzQ2LDcgQEAgQ29udGVudEV4dGVuc2lvbjo6Q29u
dGVudEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFJlZjxDb21waWxlZENvbnRl
bnQKICAgICAsIG1fZXh0ZW5zaW9uQmFzZVVSTChXVEZNb3ZlKGV4dGVuc2lvbkJhc2VVUkwpKQog
ewogICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIgaW50ZXJwcmV0ZXIobV9jb21waWxlZEV4dGVu
c2lvbi0+dXJsRmlsdGVyc0J5dGVjb2RlKCkpOwotICAgIGZvciAodWludDY0X3QgYWN0aW9uIDog
aW50ZXJwcmV0ZXIuYWN0aW9uc01hdGNoaW5nRXZlcnl0aGluZygpKQotICAgICAgICBtX3VuaXZl
cnNhbEFjdGlvbnMuYXBwZW5kKGFjdGlvbik7CisgICAgbV91bml2ZXJzYWxBY3Rpb25zID0gY29w
eVRvVmVjdG9yKGludGVycHJldGVyLmFjdGlvbnNNYXRjaGluZ0V2ZXJ5dGhpbmcoKSk7CiAKICAg
ICBpZiAoc2hvdWxkQ29tcGlsZUNTUyA9PSBTaG91bGRDb21waWxlQ1NTOjpZZXMpCiAgICAgICAg
IGNvbXBpbGVHbG9iYWxEaXNwbGF5Tm9uZVN0eWxlU2hlZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1
ZUxpc3QuaAppbmRleCBiYjEyNzNhNWZkM2VlOGU2ODgwYmE3NjdhZjkyOTE3ZWJkZGE3NDhmLi5m
OWE3NjA2MDQwODliMGNlMmY2OWY4NzY4NjU0ZjEyNjgyMzdhNjdlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ZhbHVlTGlzdC5oCkBAIC01OCw2ICs1OCw3IEBAIHB1YmxpYzoKICAgICBjb25zdF9pdGVyYXRv
ciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQogICAgIGl0ZXJhdG9yIGJl
Z2luKCkgeyByZXR1cm4gbV92YWx1ZXMuYmVnaW4oKTsgfQogICAgIGl0ZXJhdG9yIGVuZCgpIHsg
cmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlcy5zaXplKCk7IH0KIAogICAgIHZvaWQgYXBwZW5kKFJlZjxDU1NWYWx1ZT4mJik7
CiAgICAgdm9pZCBwcmVwZW5kKFJlZjxDU1NWYWx1ZT4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAKaW5kZXggNmFiNWNiNjc0ZDQxNTNk
ODIyNTJmMjU4N2VlNDZmY2Y1YWFjOGM0YS4uODBmNjllNjBkNTQzZjEzNmI1MTIzNTlkYjA0Njg1
MjQ1NDVmNWJhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09w
ZXJhdGlvbk5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVy
YXRpb25Ob2RlLmNwcApAQCAtNjIwLDE1ICs2MjAsMTIgQEAgdm9pZCBDU1NDYWxjT3BlcmF0aW9u
Tm9kZTo6aG9pc3RDaGlsZHJlbldpdGhPcGVyYXRvcihDYWxjT3BlcmF0b3Igb3ApCiAKICAgICBW
ZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IG5ld0NoaWxkcmVuOwogICAgIGZvciAo
YXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKSB7Ci0gICAgICAgIGlmIChpczxDU1NDYWxjT3BlcmF0
aW9uTm9kZT4oY2hpbGQpICYmIGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZC5n
ZXQoKSkuY2FsY09wZXJhdG9yKCkgPT0gb3ApIHsKLSAgICAgICAgICAgIGF1dG8mIGNoaWxkcmVu
ID0gZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKS5jaGlsZHJlbigp
OwotICAgICAgICAgICAgZm9yIChhdXRvJiBjaGlsZFRvTW92ZSA6IGNoaWxkcmVuKQotICAgICAg
ICAgICAgICAgIG5ld0NoaWxkcmVuLmFwcGVuZChXVEZNb3ZlKGNoaWxkVG9Nb3ZlKSk7Ci0gICAg
ICAgIH0gZWxzZQorICAgICAgICBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkKSAm
JiBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpLmNhbGNPcGVyYXRv
cigpID09IG9wKQorICAgICAgICAgICAgbmV3Q2hpbGRyZW4uYXBwZW5kVmVjdG9yKGRvd25jYXN0
PENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZC5nZXQoKSkuY2hpbGRyZW4oKSk7CisgICAgICAg
IGVsc2UKICAgICAgICAgICAgIG5ld0NoaWxkcmVuLmFwcGVuZChXVEZNb3ZlKGNoaWxkKSk7CiAg
ICAgfQotICAgIAotICAgIG5ld0NoaWxkcmVuLnNocmlua1RvRml0KCk7CisgICAgQVNTRVJUKG5l
d0NoaWxkcmVuLmNhcGFjaXR5KCkgPT0gbmV3Q2hpbGRyZW4uc2l6ZSgpKTsKICAgICBtX2NoaWxk
cmVuID0gV1RGTW92ZShuZXdDaGlsZHJlbik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1BhcnNlckltcGwuY3BwCmluZGV4IGM0ZWRhYTA2NDNkYjQyYWFjNGY0NTc3NjgwYjFj
NzkxMDVjM2VmODMuLjI1MjlkMWVjZDUyMzBiMWY1NTA3OTE3NmY0OTBhOTEwYzJmM2VhNGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VySW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJJbXBsLmNwcApAQCAtODg4LDcg
Kzg4OCw3IEBAIFJlZlB0cjxTdHlsZVJ1bGVDb250YWluZXI+IENTU1BhcnNlckltcGw6OmNvbnN1
bWVDb250YWluZXJSdWxlKENTU1BhcnNlclRva2VuUmFuCiAgICAgY29uc3VtZVJ1bGVMaXN0KGJs
b2NrLCBSZWd1bGFyUnVsZUxpc3QsIFsmcnVsZXNdKFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiBydWxl
KSB7CiAgICAgICAgIHJ1bGVzLmFwcGVuZChydWxlKTsKICAgICB9KTsKLSAgICBydWxlcy5zaHJp
bmtUb0ZpdCgpOworICAgIEFTU0VSVChydWxlcy5jYXBhY2l0eSgpID09IHJ1bGVzLnNpemUoKSk7
CiAKICAgICBpZiAobV9vYnNlcnZlcldyYXBwZXIpCiAgICAgICAgIG1fb2JzZXJ2ZXJXcmFwcGVy
LT5vYnNlcnZlcigpLmVuZFJ1bGVCb2R5KG1fb2JzZXJ2ZXJXcmFwcGVyLT5lbmRPZmZzZXQoYmxv
Y2spKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdMaXN0LmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vRE9NU3RyaW5nTGlzdC5oCmluZGV4IDY5Y2IyZDdmOTMyZTAwYTI2
NWUwOGQ4ZmYzYjFjYjUwYzEyNzdjZTUuLjBhMTM4NDA4YTg1OTJlMDE1Nzg0ZjI5Yjc5MjhiNjRh
YmNjNTVmMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdMaXN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTVN0cmluZ0xpc3QuaApAQCAtNDAsOSArNDAsMTUg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBET01TdHJpbmdMaXN0KTsK
ICAgICB9CiAKKyAgICBzdGF0aWMgUmVmPERPTVN0cmluZ0xpc3Q+IGNyZWF0ZShWZWN0b3I8U3Ry
aW5nPiYmIHN0cmluZ3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBET01T
dHJpbmdMaXN0KFdURk1vdmUoc3RyaW5ncykpKTsKKyAgICB9CisKICAgICBib29sIGlzRW1wdHko
KSBjb25zdCB7IHJldHVybiBtX3N0cmluZ3MuaXNFbXB0eSgpOyB9CiAgICAgdm9pZCBjbGVhcigp
IHsgbV9zdHJpbmdzLmNsZWFyKCk7IH0KICAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIHN0
cmluZykgeyBtX3N0cmluZ3MuYXBwZW5kKHN0cmluZyk7IH0KKyAgICB2b2lkIGFwcGVuZChTdHJp
bmcmJiBzdHJpbmcpIHsgbV9zdHJpbmdzLmFwcGVuZChXVEZNb3ZlKHN0cmluZykpOyB9CiAgICAg
dm9pZCBzb3J0KCk7CiAKICAgICAvLyBJbXBsZW1lbnRzIHRoZSBJREwuCkBAIC01Myw3ICs1OSwx
MCBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgY29uc3QgVmVjdG9yPFN0cmluZz4mKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJpbmdzOyB9CiAKIHByaXZhdGU6Ci0gICAgRE9NU3RyaW5nTGlzdCgpIHsg
fQorICAgIERPTVN0cmluZ0xpc3QoKSA9IGRlZmF1bHQ7CisgICAgRE9NU3RyaW5nTGlzdChWZWN0
b3I8U3RyaW5nPiYmIHN0cmluZ3MpCisgICAgICAgIDogbV9zdHJpbmdzKFdURk1vdmUoc3RyaW5n
cykpCisgICAgeyB9CiAKICAgICBWZWN0b3I8U3RyaW5nPiBtX3N0cmluZ3M7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnRQYXRoLmNwcAppbmRleCA0NmZiNjQ1ZTA1MzM3NTgxZjlmYTM0NTIzMDNhMmZlMzgw
ZjQ2YzA2Li5lY2JjYzAwZjM2ZjA3NmUzMjBiNmFkMTZhZDFkOWEwYmYwMzhlMjc4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRQYXRoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnRQYXRoLmNwcApAQCAtMjc0LDExICsyNzQsMTEgQEAgVmVjdG9yPEV2ZW50VGFy
Z2V0Kj4gRXZlbnRQYXRoOjpjb21wdXRlUGF0aFVuY2xvc2VkVG9UYXJnZXQoY29uc3QgRXZlbnRU
YXJnZXQmIHQKIAogRXZlbnRQYXRoOjpFdmVudFBhdGgoY29uc3QgVmVjdG9yPEV2ZW50VGFyZ2V0
Kj4mIHRhcmdldHMpCiB7Ci0gICAgZm9yIChhdXRvKiB0YXJnZXQgOiB0YXJnZXRzKSB7CisgICAg
bV9wYXRoID0gdGFyZ2V0cy5tYXAoWyZdKGF1dG8qIHRhcmdldCkgewogICAgICAgICBBU1NFUlQo
dGFyZ2V0KTsKICAgICAgICAgQVNTRVJUKCFpczxOb2RlPih0YXJnZXQpKTsKLSAgICAgICAgbV9w
YXRoLmFwcGVuZChFdmVudENvbnRleHQgeyBFdmVudENvbnRleHQ6OlR5cGU6Ok5vcm1hbCwgbnVs
bHB0ciwgdGFyZ2V0LCAqdGFyZ2V0cy5iZWdpbigpLCAwIH0pOwotICAgIH0KKyAgICAgICAgcmV0
dXJuIEV2ZW50Q29udGV4dCB7IEV2ZW50Q29udGV4dDo6VHlwZTo6Tm9ybWFsLCBudWxscHRyLCB0
YXJnZXQsICp0YXJnZXRzLmJlZ2luKCksIDAgfTsKKyAgICB9KTsKIH0KIAogc3RhdGljIE5vZGUq
IG1vdmVPdXRPZkFsbFNoYWRvd1Jvb3RzKE5vZGUmIHN0YXJ0aW5nTm9kZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9GdWxsc2NyZWVuTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRnVsbHNjcmVlbk1hbmFnZXIuY3BwCmluZGV4IGVjZTQ4ZTQyNjc5NzA5NWRhNzA5YTA0
ZGE2ODZhNGZlMGJjMjkyOGMuLjhlMWIyNmNhZjA0MTgwMzkwNzkwOGJkNzZlZjEyOWI4OGZmMjVl
NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9GdWxsc2NyZWVuTWFuYWdlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Z1bGxzY3JlZW5NYW5hZ2VyLmNwcApAQCAtMjY1LDkg
KzI2NSw4IEBAIHZvaWQgRnVsbHNjcmVlbk1hbmFnZXI6OmNhbmNlbEZ1bGxzY3JlZW4oKQogCiAg
ICAgLy8gVG8gYWNoaWV2ZSB0aGF0IGFpbSwgcmVtb3ZlIGFsbCB0aGUgZWxlbWVudHMgZnJvbSB0
aGUgdG9wIGRvY3VtZW50J3Mgc3RhY2sgZXhjZXB0IGZvciB0aGUgZmlyc3QgYmVmb3JlCiAgICAg
Ly8gY2FsbGluZyB3ZWJraXRFeGl0RnVsbHNjcmVlbigpOgotICAgIFZlY3RvcjxSZWZQdHI8RWxl
bWVudD4+IHJlcGxhY2VtZW50RnVsbHNjcmVlbkVsZW1lbnRTdGFjazsKLSAgICByZXBsYWNlbWVu
dEZ1bGxzY3JlZW5FbGVtZW50U3RhY2suYXBwZW5kKHRvcERvY3VtZW50LmZ1bGxzY3JlZW5NYW5h
Z2VyKCkuZnVsbHNjcmVlbkVsZW1lbnQoKSk7Ci0gICAgdG9wRG9jdW1lbnQuZnVsbHNjcmVlbk1h
bmFnZXIoKS5tX2Z1bGxzY3JlZW5FbGVtZW50U3RhY2suc3dhcChyZXBsYWNlbWVudEZ1bGxzY3Jl
ZW5FbGVtZW50U3RhY2spOworICAgIFJlZlB0ciBmdWxsc2NyZW5FbGVtZW50ID0gdG9wRG9jdW1l
bnQuZnVsbHNjcmVlbk1hbmFnZXIoKS5mdWxsc2NyZWVuRWxlbWVudCgpOworICAgIHRvcERvY3Vt
ZW50LmZ1bGxzY3JlZW5NYW5hZ2VyKCkubV9mdWxsc2NyZWVuRWxlbWVudFN0YWNrID0gVmVjdG9y
IHsgV1RGTW92ZShmdWxsc2NyZW5FbGVtZW50KSB9OwogCiAgICAgdG9wRG9jdW1lbnQuZnVsbHNj
cmVlbk1hbmFnZXIoKS5leGl0RnVsbHNjcmVlbigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0xvYWRhYmxlU2NyaXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJs
ZVNjcmlwdC5jcHAKaW5kZXggMWJkZGUxZWI1ZDZhMDdmMTE3Mzg5Yjk5Yzc1ZWNiMDFiNjBmODgw
OS4uOWMxOTQ2ODA1ZjAzZDZhMThmZGQ3N2U0NmQ2ZTA3NjdhZmNhNGVkYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0xvYWRhYmxlU2NyaXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTG9hZGFibGVTY3JpcHQuY3BwCkBAIC01MSwxMiArNTEsMTIgQEAgdm9pZCBMb2FkYWJs
ZVNjcmlwdDo6cmVtb3ZlQ2xpZW50KExvYWRhYmxlU2NyaXB0Q2xpZW50JiBjbGllbnQpCiAKIHZv
aWQgTG9hZGFibGVTY3JpcHQ6Om5vdGlmeUNsaWVudEZpbmlzaGVkKCkKIHsKLSAgICBSZWZQdHI8
TG9hZGFibGVTY3JpcHQ+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmIHByb3RlY3RlZFRo
aXMgeyAqdGhpcyB9OwogCi0gICAgVmVjdG9yPExvYWRhYmxlU2NyaXB0Q2xpZW50Kj4gdmVjdG9y
OwotICAgIGZvciAoYXV0byYgcGFpciA6IG1fY2xpZW50cykKLSAgICAgICAgdmVjdG9yLmFwcGVu
ZChwYWlyLmtleSk7Ci0gICAgZm9yIChhdXRvJiBjbGllbnQgOiB2ZWN0b3IpCisgICAgYXV0byBj
bGllbnRzID0gV1RGOjptYXAobV9jbGllbnRzLCBbXShhdXRvJiBlbnRyeSkgeworICAgICAgICBy
ZXR1cm4gZW50cnkua2V5OworICAgIH0pOworICAgIGZvciAoYXV0byYgY2xpZW50IDogY2xpZW50
cykKICAgICAgICAgY2xpZW50LT5ub3RpZnlGaW5pc2hlZCgqdGhpcyk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwCmluZGV4IDUwZjQ2MzBmODllYzg5NWRmMWNl
NWFiOGVkNTgxODliN2FmYmY2NjIuLjEyMjYzZTI1NmVlNTZhNDUyYzMyMjgxMjVjYWRkNWYxNzBm
NDVmMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcApAQCAtNTks
OSArNTksNyBAQCBpbmxpbmUgYm9vbCBSYWRpb0J1dHRvbkdyb3VwOjppc1ZhbGlkKCkgY29uc3QK
IAogVmVjdG9yPFJlZjxIVE1MSW5wdXRFbGVtZW50Pj4gUmFkaW9CdXR0b25Hcm91cDo6bWVtYmVy
cygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFJlZjxIVE1MSW5wdXRFbGVtZW50Pj4gc29ydGVkTWVt
YmVyczsKLSAgICBmb3IgKGF1dG8mIG1lbWJlciA6IG1fbWVtYmVycykKLSAgICAgICAgc29ydGVk
TWVtYmVycy5hcHBlbmQobWVtYmVyKTsKKyAgICBhdXRvIHNvcnRlZE1lbWJlcnMgPSBjb3B5VG9W
ZWN0b3JPZjxSZWY8SFRNTElucHV0RWxlbWVudD4+KG1fbWVtYmVycyk7CiAgICAgc3RkOjpzb3J0
KHNvcnRlZE1lbWJlcnMuYmVnaW4oKSwgc29ydGVkTWVtYmVycy5lbmQoKSwgW10oYXV0byYgYSwg
YXV0byYgYikgewogICAgICAgICByZXR1cm4gaXNfbHQodHJlZU9yZGVyPENvbXBvc2VkVHJlZT4o
YSwgYikpOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9EaXJlY3Rv
cnlGaWxlTGlzdENyZWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9EaXJlY3RvcnlGaWxl
TGlzdENyZWF0b3IuY3BwCmluZGV4IDlkM2RhMTg1M2MzYTYzMjBmZWIzMTk3NTE2MmU0MzVhZTkz
ZmZkZDEuLjk4NWY3YTYyZjBjMWYzOTc1NTgyZWIzZjliOTg5NzUxNTYxNTY2NzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGlyZWN0b3J5RmlsZUxpc3RDcmVhdG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RpcmVjdG9yeUZpbGVMaXN0Q3JlYXRvci5jcHAKQEAgLTg2
LDEzICs4NiwxMSBAQCBzdGF0aWMgVmVjdG9yPEZpbGVJbmZvcm1hdGlvbj4gZ2F0aGVyRmlsZUlu
Zm9ybWF0aW9uKGNvbnN0IFZlY3RvcjxGaWxlQ2hvb3NlckZpbAogc3RhdGljIFJlZjxGaWxlTGlz
dD4gdG9GaWxlTGlzdChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFZlY3RvcjxGaWxlSW5mb3Jt
YXRpb24+JiBmaWxlcykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIFZlY3Rv
cjxSZWY8RmlsZT4+IGZpbGVPYmplY3RzOwotICAgIGZvciAoYXV0byYgZmlsZSA6IGZpbGVzKSB7
CisgICAgYXV0byBmaWxlT2JqZWN0cyA9IGZpbGVzLm1hcChbZG9jdW1lbnRdKGF1dG8mIGZpbGUp
IHsKICAgICAgICAgaWYgKGZpbGUucmVsYXRpdmVQYXRoLmlzTnVsbCgpKQotICAgICAgICAgICAg
ZmlsZU9iamVjdHMuYXBwZW5kKEZpbGU6OmNyZWF0ZShkb2N1bWVudCwgZmlsZS5wYXRoLCB7IH0s
IGZpbGUuZGlzcGxheU5hbWUpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZmlsZU9iamVj
dHMuYXBwZW5kKEZpbGU6OmNyZWF0ZVdpdGhSZWxhdGl2ZVBhdGgoZG9jdW1lbnQsIGZpbGUucGF0
aCwgZmlsZS5yZWxhdGl2ZVBhdGgpKTsKLSAgICB9CisgICAgICAgICAgICByZXR1cm4gRmlsZTo6
Y3JlYXRlKGRvY3VtZW50LCBmaWxlLnBhdGgsIHsgfSwgZmlsZS5kaXNwbGF5TmFtZSk7CisgICAg
ICAgIHJldHVybiBGaWxlOjpjcmVhdGVXaXRoUmVsYXRpdmVQYXRoKGRvY3VtZW50LCBmaWxlLnBh
dGgsIGZpbGUucmVsYXRpdmVQYXRoKTsKKyAgICB9KTsKICAgICByZXR1cm4gRmlsZUxpc3Q6OmNy
ZWF0ZShXVEZNb3ZlKGZpbGVPYmplY3RzKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
U2VsZWN0RWxlbWVudC5jcHAKaW5kZXggYzRiMDg0ZDJkZTcxZmQzMTlmZThjMDY5YjQ1ZmY3ZmNj
Y2VkZTVlYy4uNzJhZmUwNGUwN2Y4OWM4YzI0YWYzZjhiOGNhZDM4Y2UyOTZhOGQwMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKQEAgLTYzNCw5ICs2MzQsOSBA
QCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzYXZlTGFzdFNlbGVjdGlvbigpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbi5jbGVhcigpOwotICAg
IGZvciAoYXV0byYgZWxlbWVudCA6IGxpc3RJdGVtcygpKQotICAgICAgICBtX2xhc3RPbkNoYW5n
ZVNlbGVjdGlvbi5hcHBlbmQoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSAmJiBkb3du
Y2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCkpOworICAgIG1fbGFz
dE9uQ2hhbmdlU2VsZWN0aW9uID0gbGlzdEl0ZW1zKCkubWFwKFtdKGF1dG8mIGVsZW1lbnQpIHsK
KyAgICAgICAgcmV0dXJuIGlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkgJiYgZG93bmNh
c3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5zZWxlY3RlZCgpOworICAgIH0pOwogfQog
CiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleChp
bnQgaW5kZXgpCkBAIC02NDUsMTAgKzY0NSw5IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNl
dEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KGludCBpbmRleCkKIAogICAgIC8vIENhY2hlIHRo
ZSBzZWxlY3Rpb24gc3RhdGUgc28gd2UgY2FuIHJlc3RvcmUgdGhlIG9sZCBzZWxlY3Rpb24gYXMg
dGhlIG5ldwogICAgIC8vIHNlbGVjdGlvbiBwaXZvdHMgYXJvdW5kIHRoaXMgYW5jaG9yIGluZGV4
LgotICAgIG1fY2FjaGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rpb24uY2xlYXIoKTsKLQotICAgIGZv
ciAoYXV0byYgZWxlbWVudCA6IGxpc3RJdGVtcygpKQotICAgICAgICBtX2NhY2hlZFN0YXRlRm9y
QWN0aXZlU2VsZWN0aW9uLmFwcGVuZChpczxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpICYm
IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKSk7CisgICAg
bV9jYWNoZWRTdGF0ZUZvckFjdGl2ZVNlbGVjdGlvbiA9IGxpc3RJdGVtcygpLm1hcChbXShhdXRv
JiBlbGVtZW50KSB7CisgICAgICAgIHJldHVybiBpczxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1l
bnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKTsK
KyAgICB9KTsKIH0KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0QWN0aXZlU2VsZWN0aW9u
RW5kSW5kZXgoaW50IGluZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFn
ZUJpdG1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAppbmRleCAw
NWIyNzM3OWYyZDkyMTk0NDg5MzJjNDZhYjMzYjJlZjAzMWFmYzZhLi41OWJmYzZlMGYxZTU5MDQz
ZGNjNWJiZGEyZDIyYWFlMzY1YTYxMzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0ltYWdlQml0bWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNw
cApAQCAtMTEyLDEwICsxMTIsOSBAQCB2b2lkIEltYWdlQml0bWFwOjpjcmVhdGVQcm9taXNlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsCiAKIFZlY3Rvcjxz
dGQ6Om9wdGlvbmFsPEltYWdlQml0bWFwQmFja2luZz4+IEltYWdlQml0bWFwOjpkZXRhY2hCaXRt
YXBzKFZlY3RvcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiYmIGJpdG1hcHMpCiB7Ci0gICAgVmVjdG9y
PHN0ZDo6b3B0aW9uYWw8SW1hZ2VCaXRtYXBCYWNraW5nPj4gYnVmZmVyczsKLSAgICBmb3IgKGF1
dG8mIGJpdG1hcCA6IGJpdG1hcHMpCi0gICAgICAgIGJ1ZmZlcnMuYXBwZW5kKGJpdG1hcC0+dGFr
ZUltYWdlQml0bWFwQmFja2luZygpKTsKLSAgICByZXR1cm4gYnVmZmVyczsKKyAgICByZXR1cm4g
V1RGOjptYXAoV1RGTW92ZShiaXRtYXBzKSwgW10oYXV0byYmIGJpdG1hcCkgeworICAgICAgICBy
ZXR1cm4gYml0bWFwLT50YWtlSW1hZ2VCaXRtYXBCYWNraW5nKCk7CisgICAgfSk7CiB9CiAKIHZv
aWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCwgSW1hZ2VCaXRtYXA6OlNvdXJjZSYmIHNvdXJjZSwgSW1hZ2VC
aXRtYXBPcHRpb25zJiYgb3B0aW9ucywgaW50IHN4LCBpbnQgc3ksIGludCBzdywgaW50IHNoLCBJ
bWFnZUJpdG1hcDo6UHJvbWlzZSYmIHByb21pc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCmluZGV4IDYxMTQ2
MDI3N2Y2Njc5YTQ5MWUwZjk4MzE3Nzk3MzAwN2ViYmRkYzYuLmY3MzM2NGYzODYwYzI2YjkzNjYx
OGM0ZjdlMWExNzgyNWU4ZDUwMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCkBAIC0zMDIxLDkgKzMwMjEs
OCBAQCBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxSZWZQdHI8V2ViR0xTaGFkZXI+Pj4gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0YWNoZQogICAgIH07CiAgICAgVmVjdG9yPFJlZlB0cjxX
ZWJHTFNoYWRlcj4+IHNoYWRlck9iamVjdHM7CiAgICAgZm9yIChhdXRvIHNoYWRlclR5cGUgOiBz
aGFkZXJUeXBlcykgewotICAgICAgICBSZWZQdHI8V2ViR0xTaGFkZXI+IHNoYWRlciA9IHByb2dy
YW0uZ2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVyVHlwZSk7Ci0gICAgICAgIGlmIChzaGFkZXIpCi0g
ICAgICAgICAgICBzaGFkZXJPYmplY3RzLmFwcGVuZChzaGFkZXIpOworICAgICAgICBpZiAoUmVm
UHRyIHNoYWRlciA9IHByb2dyYW0uZ2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVyVHlwZSkpCisgICAg
ICAgICAgICBzaGFkZXJPYmplY3RzLmFwcGVuZChXVEZNb3ZlKHNoYWRlcikpOwogICAgIH0KICAg
ICByZXR1cm4gc2hhZGVyT2JqZWN0czsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCmluZGV4IDhhY2I2OGFmNDU1MWEzOGI3
OTljNzEzYWE3NWRjMGY3OTE5MDA0YmUuLjBhNWVkNzhmNDU4Zjk5YjZiYzdmYzM3MWRmOTRjZmU5
MjVhNGQ0ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRh
Q2hhcnNldFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1l
dGFDaGFyc2V0UGFyc2VyLmNwcApAQCAtODUsMTIgKzg1LDExIEBAIHN0YXRpYyBTdHJpbmdWaWV3
IGV4dHJhY3RDaGFyc2V0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAKIGJvb2wgSFRNTE1ldGFDaGFy
c2V0UGFyc2VyOjpwcm9jZXNzTWV0YShIVE1MVG9rZW4mIHRva2VuKQogewotICAgIEF0dHJpYnV0
ZUxpc3QgYXR0cmlidXRlczsKLSAgICBmb3IgKGF1dG8mIGF0dHJpYnV0ZSA6IHRva2VuLmF0dHJp
YnV0ZXMoKSkgeworICAgIGF1dG8gYXR0cmlidXRlcyA9IHRva2VuLmF0dHJpYnV0ZXMoKS5tYXAo
W10oYXV0byYgYXR0cmlidXRlKSB7CiAgICAgICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lID0gU3Ry
aW5nSW1wbDo6Y3JlYXRlOEJpdElmUG9zc2libGUoYXR0cmlidXRlLm5hbWUpOwogICAgICAgICBT
dHJpbmcgYXR0cmlidXRlVmFsdWUgPSBTdHJpbmdJbXBsOjpjcmVhdGU4Qml0SWZQb3NzaWJsZShh
dHRyaWJ1dGUudmFsdWUpOwotICAgICAgICBhdHRyaWJ1dGVzLmFwcGVuZChzdGQ6Om1ha2VfcGFp
cihhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVWYWx1ZSkpOwotICAgIH0KKyAgICAgICAgcmV0dXJu
IHN0ZDo6cGFpciB7IFdURk1vdmUoYXR0cmlidXRlTmFtZSksIFdURk1vdmUoYXR0cmlidXRlVmFs
dWUpIH07CisgICAgfSk7CiAKICAgICBtX2VuY29kaW5nID0gZW5jb2RpbmdGcm9tTWV0YUF0dHJp
YnV0ZXMoYXR0cmlidXRlcyk7CiAgICAgcmV0dXJuIG1fZW5jb2RpbmcuaXNWYWxpZCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKaW5kZXggNmI3
MWJlZjgxYTdlMjg0NzFlZWZkN2M1MzE1MmE4YTBhODJkMmRiNS4uYTFmMTY3Y2IwODNjOTk4NDM2
MTgzNDExODAyOWYyODVlNDFjMDAwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MVHJlZUJ1aWxkZXIuY3BwCkBAIC0yMjAwLDExICsyMjAwLDEwIEBAIHZvaWQgSFRNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzQ2hhcmFjdGVyKEF0b21IVE1MVG9rZW4mJiB0b2tlbikKIC8vIEZy
b20gdGhlIHN0cmluZyA0MDg5OTYxMDEwLCBjcmVhdGVzIGEgbGluayBvZiB0aGUgZm9ybSA8YSBo
cmVmPSJ0ZWw6NDA4OTk2MTAxMCI+NDA4OTk2MTAxMDwvYT4gYW5kIGluc2VydHMgaXQuCiB2b2lk
IEhUTUxUcmVlQnVpbGRlcjo6aW5zZXJ0UGhvbmVOdW1iZXJMaW5rKGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQogewotICAgIFZlY3RvcjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZXM7Ci0gICAgYXR0cmlidXRl
cy5hcHBlbmQoQXR0cmlidXRlKEhUTUxOYW1lczo6aHJlZkF0dHIsIG1ha2VTdHJpbmcoInRlbDoi
X3MsIHN0cmluZykpKTsKKyAgICBBdHRyaWJ1dGUgYXR0cmlidXRlKEhUTUxOYW1lczo6aHJlZkF0
dHIsIG1ha2VTdHJpbmcoInRlbDoiX3MsIHN0cmluZykpOwogCiAgICAgY29uc3QgQXRvbVN0cmlu
ZyYgYVRhZ0xvY2FsTmFtZSA9IGFUYWctPmxvY2FsTmFtZSgpOwotICAgIEF0b21IVE1MVG9rZW4g
YVN0YXJ0VG9rZW4oSFRNTFRva2VuOjpTdGFydFRhZywgYVRhZ0xvY2FsTmFtZSwgV1RGTW92ZShh
dHRyaWJ1dGVzKSk7CisgICAgQXRvbUhUTUxUb2tlbiBhU3RhcnRUb2tlbihIVE1MVG9rZW46OlN0
YXJ0VGFnLCBhVGFnTG9jYWxOYW1lLCB7IFdURk1vdmUoYXR0cmlidXRlKSB9KTsKICAgICBBdG9t
SFRNTFRva2VuIGFFbmRUb2tlbihIVE1MVG9rZW46OkVuZFRhZywgYVRhZ0xvY2FsTmFtZSk7CiAK
ICAgICBwcm9jZXNzU3RhcnRUYWcoV1RGTW92ZShhU3RhcnRUb2tlbikpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNlci5jcHAKaW5kZXggNGRhOTU5
ZjQwZmU5ZWEzMzc0N2NkMjM4OGNlYjc5ZjZkNzJkYjdlZC4uNDcwNmYyNmU4NDQwOWVlODEzY2Qx
M2JjNWY0ZTBhY2NmNjc0YTg2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvVGV4dERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwCkBAIC01MSw5ICs1MSw4IEBAIHZvaWQgVGV4dERvY3Vt
ZW50UGFyc2VyOjppbnNlcnRGYWtlUHJlRWxlbWVudCgpCiAgICAgLy8gV2UgY3JlYXRlIGEgZmFr
ZSB0b2tlbiBhbmQgZ2l2ZSBpdCB0byB0aGUgdHJlZSBidWlsZGVyIHJhdGhlciB0aGFuCiAgICAg
Ly8gc2VuZGluZyBmYWtlIGJ5dGVzIHRocm91Z2ggdGhlIGZyb250LWVuZCBvZiB0aGUgcGFyc2Vy
IHRvIGF2b2lkCiAgICAgLy8gZGlzdHJ1YmluZyB0aGUgbGluZS9jb2x1bW4gbnVtYmVyIGNhbGN1
bGF0aW9ucy4KLSAgICBWZWN0b3I8QXR0cmlidXRlPiBhdHRyaWJ1dGVzOwotICAgIGF0dHJpYnV0
ZXMuYXBwZW5kKEF0dHJpYnV0ZShzdHlsZUF0dHIsICJ3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IHdo
aXRlLXNwYWNlOiBwcmUtd3JhcDsiKSk7Ci0gICAgQXRvbUhUTUxUb2tlbiBmYWtlUHJlKEhUTUxU
b2tlbjo6U3RhcnRUYWcsIHByZVRhZy0+bG9jYWxOYW1lKCksIFdURk1vdmUoYXR0cmlidXRlcykp
OworICAgIEF0dHJpYnV0ZSBhdHRyaWJ1dGUoc3R5bGVBdHRyLCAid29yZC13cmFwOiBicmVhay13
b3JkOyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7Iik7CisgICAgQXRvbUhUTUxUb2tlbiBmYWtlUHJl
KEhUTUxUb2tlbjo6U3RhcnRUYWcsIHByZVRhZy0+bG9jYWxOYW1lKCksIHsgV1RGTW92ZShhdHRy
aWJ1dGUpIH0pOwogICAgIHRyZWVCdWlsZGVyKCkuY29uc3RydWN0VHJlZShXVEZNb3ZlKGZha2VQ
cmUpKTsKIAogICAgIC8vIE5vcm1hbGx5IHdlIHdvdWxkIHNraXAgdGhlIGZpcnN0IFxuIGFmdGVy
IGEgPHByZT4gZWxlbWVudCwgYnV0IHdlIGRvbid0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvQ29udGVudEZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29udGVu
dEZpbHRlci5jcHAKaW5kZXggMjg5ZjMyYTYzNzBkM2NkYzk1OGQ2MzZlNTg3MGNmNzYzZTEzNzM1
Zi4uZmQ5ZTk1YWQwN2ExM2VlZTdhMTJhYjcwNWJlNTcwMWYzMjNjOTg5ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0NvbnRlbnRGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9Db250ZW50RmlsdGVyLmNwcApAQCAtNjcsMTEgKzY3LDkgQEAgVmVjdG9yPENv
bnRlbnRGaWx0ZXI6OlR5cGU+JiBDb250ZW50RmlsdGVyOjp0eXBlcygpCiAKIHN0ZDo6dW5pcXVl
X3B0cjxDb250ZW50RmlsdGVyPiBDb250ZW50RmlsdGVyOjpjcmVhdGUoQ29udGVudEZpbHRlckNs
aWVudCYgY2xpZW50KQogewotICAgIENvbnRhaW5lciBmaWx0ZXJzOwotICAgIGZvciAoYXV0byYg
dHlwZSA6IHR5cGVzKCkpIHsKLSAgICAgICAgYXV0byBmaWx0ZXIgPSB0eXBlLmNyZWF0ZSgpOwot
ICAgICAgICBmaWx0ZXJzLmFwcGVuZChXVEZNb3ZlKGZpbHRlcikpOwotICAgIH0KKyAgICBhdXRv
IGZpbHRlcnMgPSB0eXBlcygpLm1hcChbXShhdXRvJiB0eXBlKSB7CisgICAgICAgIHJldHVybiB0
eXBlLmNyZWF0ZSgpOworICAgIH0pOwogCiAgICAgaWYgKGZpbHRlcnMuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFBhcnNlci5jcHAKaW5k
ZXggYjg3ZGQ4MzUwNjA3YzI0YmUyNTZlMzQ0MWJlZDJkMzc2N2UwOTU1Mi4uNGExMTQ0MjVlMTE2
ZDJjNDJkMTkwMzkyM2VkZjg4NjM4M2Q4ZjA2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFBhcnNlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFBh
cnNlci5jcHAKQEAgLTE4MCw3ICsxODAsNyBAQCBzdGQ6Om9wdGlvbmFsPEFwcGxpY2F0aW9uQ2Fj
aGVNYW5pZmVzdD4gcGFyc2VBcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3QoY29uc3QgVVJMJgogICAg
ICAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh1cmwucHJvdG9jb2woKSwg
bWFuaWZlc3RVUkwucHJvdG9jb2woKSkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgICAgICAgICAgbWFuaWZlc3Qub25saW5lQWxsb3dlZFVSTHMuYXBwZW5kKHVybCk7
CisgICAgICAgICAgICAgICAgbWFuaWZlc3Qub25saW5lQWxsb3dlZFVSTHMuYXBwZW5kKFdURk1v
dmUodXJsKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZlci5jcHAKaW5kZXggOTNkYTFh
NDU2MDRlNDUyYTc3NTkzZTE4ZDFmNDczMzYzNDk5NDM2Ny4uNGZmZDY5ZDAzNDQxMDliNDdhZmI1
ZTUxOTdhYTNmZGZkNDk3ZGVkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNp
emVPYnNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZlci5j
cHAKQEAgLTEyNSwxMSArMTI1LDEwIEBAIHNpemVfdCBSZXNpemVPYnNlcnZlcjo6Z2F0aGVyT2Jz
ZXJ2YXRpb25zKHNpemVfdCBkZWVwZXJUaGFuKQogCiB2b2lkIFJlc2l6ZU9ic2VydmVyOjpkZWxp
dmVyT2JzZXJ2YXRpb25zKCkKIHsKLSAgICBWZWN0b3I8UmVmPFJlc2l6ZU9ic2VydmVyRW50cnk+
PiBlbnRyaWVzOwotICAgIGZvciAoY29uc3QgYXV0byYgb2JzZXJ2YXRpb24gOiBtX2FjdGl2ZU9i
c2VydmF0aW9ucykgeworICAgIGF1dG8gZW50cmllcyA9IG1fYWN0aXZlT2JzZXJ2YXRpb25zLm1h
cChbXShhdXRvJiBvYnNlcnZhdGlvbikgewogICAgICAgICBBU1NFUlQob2JzZXJ2YXRpb24tPnRh
cmdldCgpKTsKLSAgICAgICAgZW50cmllcy5hcHBlbmQoUmVzaXplT2JzZXJ2ZXJFbnRyeTo6Y3Jl
YXRlKG9ic2VydmF0aW9uLT50YXJnZXQoKSwgb2JzZXJ2YXRpb24tPmNvbXB1dGVDb250ZW50UmVj
dCgpLCBvYnNlcnZhdGlvbi0+Ym9yZGVyQm94U2l6ZSgpLCBvYnNlcnZhdGlvbi0+Y29udGVudEJv
eFNpemUoKSkpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIFJlc2l6ZU9ic2VydmVyRW50cnk6OmNy
ZWF0ZShvYnNlcnZhdGlvbi0+dGFyZ2V0KCksIG9ic2VydmF0aW9uLT5jb21wdXRlQ29udGVudFJl
Y3QoKSwgb2JzZXJ2YXRpb24tPmJvcmRlckJveFNpemUoKSwgb2JzZXJ2YXRpb24tPmNvbnRlbnRC
b3hTaXplKCkpOworICAgIH0pOwogICAgIG1fYWN0aXZlT2JzZXJ2YXRpb25zLmNsZWFyKCk7CiAg
ICAgYXV0byBhY3RpdmVPYnNlcnZhdGlvblRhcmdldHMgPSBzdGQ6OmV4Y2hhbmdlKG1fYWN0aXZl
T2JzZXJ2YXRpb25UYXJnZXRzLCB7IH0pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1RleHRJbmRpY2F0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9y
LmNwcAppbmRleCAzODdkNTE5YWU1MTcyZDY4MGE1YjI4ODQzYmJlOGZmOTk2YzZiMzM1Li4wOTli
OTFkNTE1MjQ1NWFlNzc3ZTVmZjI1NmIxNTcyNjkwNDMzZWQxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
VGV4dEluZGljYXRvci5jcHAKQEAgLTM2MSwxNyArMzYxLDE2IEBAIHN0YXRpYyBib29sIGluaXRp
YWxpemVJbmRpY2F0b3IoVGV4dEluZGljYXRvckRhdGEmIGRhdGEsIEZyYW1lJiBmcmFtZSwgY29u
c3QgU2ltCiAgICAgICAgIHRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMudW5p
dGUodGV4dFJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMpOwogICAgIH0KIAotICAgIFZlY3RvcjxG
bG9hdFJlY3Q+IHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXM7Ci0gICAgZm9yIChh
dXRvIHJlY3QgOiB0ZXh0UmVjdHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMpIHsKKyAgICBhdXRvIHRl
eHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMgPSB0ZXh0UmVjdHNJblJvb3RWaWV3Q29v
cmRpbmF0ZXMubWFwKFsmXShhdXRvIHJlY3QpIHsKICAgICAgICAgcmVjdC5tb3ZlQnkoLXRleHRC
b3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKSk7Ci0gICAgICAgIHRl
eHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMuYXBwZW5kKHJlY3QpOwotICAgIH0KKyAg
ICAgICAgcmV0dXJuIHJlY3Q7CisgICAgfSk7CiAKICAgICAvLyBTdG9yZSB0aGUgc2VsZWN0aW9u
IHJlY3QgaW4gd2luZG93IGNvb3JkaW5hdGVzLCB0byBiZSB1c2VkIHN1YnNlcXVlbnRseQogICAg
IC8vIHRvIGRldGVybWluZSBpZiB0aGUgaW5kaWNhdG9yIGFuZCBzZWxlY3Rpb24gc3RpbGwgcHJl
Y2lzZWx5IG92ZXJsYXAuCiAgICAgZGF0YS5zZWxlY3Rpb25SZWN0SW5Sb290Vmlld0Nvb3JkaW5h
dGVzID0gZnJhbWUudmlldygpLT5jb250ZW50c1RvUm9vdFZpZXcoZW5jbG9zaW5nSW50UmVjdChm
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25Cb3VuZHMoRnJhbWVTZWxlY3Rpb246OkNsaXBUb1Zp
c2libGVDb250ZW50OjpObykpKTsKLSAgICBkYXRhLnRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3
Q29vcmRpbmF0ZXMgPSB0ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzOwotICAg
IGRhdGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcyA9IHRleHRSZWN0c0luQm91
bmRpbmdSZWN0Q29vcmRpbmF0ZXM7CisgICAgZGF0YS50ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmll
d0Nvb3JkaW5hdGVzID0gV1RGTW92ZSh0ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5h
dGVzKTsKKyAgICBkYXRhLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMgPSBXVEZN
b3ZlKHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMpOwogCiAgICAgcmV0dXJuIHRh
a2VTbmFwc2hvdHMoZGF0YSwgZnJhbWUsIGVuY2xvc2luZ0ludFJlY3QodGV4dEJvdW5kaW5nUmVj
dEluRG9jdW1lbnRDb29yZGluYXRlcyksIGNsaXBwZWRUZXh0UmVjdHNJbkRvY3VtZW50Q29vcmRp
bmF0ZXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNl
Y3VyaXR5UG9saWN5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0
eVBvbGljeS5jcHAKaW5kZXggNWIwMmI0ZDQyYWZjNmY4NjEzZmNjNDY0MDBjYjhkYzdmZjIwOGIz
Yy4uMzM4MGY0MzY0Mjg5N2ZjODJlNWIwMjNlNWM1Y2QwZThjZWZlZTY5MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCkBAIC0zNDMs
MTggKzM0MywxMiBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsUG9saWNpZXNBbGxv
dyhWaW9sYXRlZERpcmVjdGl2ZUNhbGxiYWNrJiYgY2FsbGJhYwogc3RhdGljIFZlY3RvcjxSZXNv
dXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlU3ViUmVzb3VyY2VJbnRlZ3JpdHlJbnRvRGln
ZXN0cyhjb25zdCBTdHJpbmcmIHN1YlJlc291cmNlSW50ZWdyaXR5KQogewogICAgIGF1dG8gZW5j
b2RlZERpZ2VzdHMgPSBwYXJzZUludGVncml0eU1ldGFkYXRhKHN1YlJlc291cmNlSW50ZWdyaXR5
KTsKLSAgICBWZWN0b3I8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBkZWNvZGVkRGlnZXN0
czsKLQotICAgIGlmICghZW5jb2RlZERpZ2VzdHMuaGFzX3ZhbHVlKCkpCisgICAgaWYgKCFlbmNv
ZGVkRGlnZXN0cykKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGZvciAoY29uc3QgYXV0byYg
ZW5jb2RlZERpZ2VzdCA6IGVuY29kZWREaWdlc3RzLnZhbHVlKCkpIHsKLSAgICAgICAgYXV0byBk
ZWNvZGVkRGlnZXN0ID0gZGVjb2RlRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChl
bmNvZGVkRGlnZXN0KTsKLSAgICAgICAgaWYgKGRlY29kZWREaWdlc3QuaGFzX3ZhbHVlKCkpCi0g
ICAgICAgICAgICBkZWNvZGVkRGlnZXN0cy5hcHBlbmQoZGVjb2RlZERpZ2VzdC52YWx1ZSgpKTsK
LSAgICAgICAgfQotCi0gICAgcmV0dXJuIGRlY29kZWREaWdlc3RzOworICAgIHJldHVybiBXVEY6
OmNvbXBhY3RNYXAoKmVuY29kZWREaWdlc3RzLCBbXShhdXRvJiBlbmNvZGVkRGlnZXN0KSAtPiBz
dGQ6Om9wdGlvbmFsPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4geworICAgICAgICByZXR1
cm4gZGVjb2RlRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChlbmNvZGVkRGlnZXN0
KTsKKyAgICB9KTsKIH0KIAogc3RhdGljIFZlY3RvcjxDb250ZW50U2VjdXJpdHlQb2xpY3lIYXNo
PiBnZW5lcmF0ZUhhc2hlc0ZvckNvbnRlbnQoY29uc3QgU3RyaW5nVmlldyBjb250ZW50LCBPcHRp
b25TZXQ8Q29udGVudFNlY3VyaXR5UG9saWN5SGFzaEFsZ29yaXRobT4gYWxnb3JpdGhtcykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmNwcAppbmRleCA4ZTRlY2U3MDUzYWU4ZTk4
ZWZlY2NmZTc2NTJmODZjZDI5NzQwNDA0Li43ODQyOGM0YWJkMzFlOTliMTBhYWU0OGZiZWNjMmE1
YjhkOWY1OGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwCkBAIC01
Myw5ICs1Myw3IEBAIHZvaWQgRmlsZUNob29zZXI6OmludmFsaWRhdGUoKQogCiB2b2lkIEZpbGVD
aG9vc2VyOjpjaG9vc2VGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCiB7Ci0gICAgVmVjdG9y
PFN0cmluZz4gZmlsZW5hbWVzOwotICAgIGZpbGVuYW1lcy5hcHBlbmQoZmlsZW5hbWUpOwotICAg
IGNob29zZUZpbGVzKGZpbGVuYW1lcyk7CisgICAgY2hvb3NlRmlsZXMoeyBmaWxlbmFtZSB9KTsK
IH0KIAogdm9pZCBGaWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4m
IGZpbGVuYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcGxhY2VtZW50TmFtZXMpCkBAIC02
OCw5ICs2NiwxMCBAQCB2b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlcyhjb25zdCBWZWN0b3I8
U3RyaW5nPiYgZmlsZW5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaQogICAgICAgICByZXR1cm47CiAK
ICAgICBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4gZmlsZXM7CisgICAgZmlsZXMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShmaWxlbmFtZXMuc2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0g
MCwgc2l6ZSA9IGZpbGVuYW1lcy5zaXplKCk7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIGZpbGVz
LmFwcGVuZCh7IGZpbGVuYW1lc1tpXSwgaSA8IHJlcGxhY2VtZW50TmFtZXMuc2l6ZSgpID8gcmVw
bGFjZW1lbnROYW1lc1tpXSA6IG51bGxTdHJpbmcoKSwgeyB9IH0pOwotICAgIG1fY2xpZW50LT5m
aWxlc0Nob3NlbihmaWxlcyk7CisgICAgICAgIGZpbGVzLnVuY2hlY2tlZEFwcGVuZCh7IGZpbGVu
YW1lc1tpXSwgaSA8IHJlcGxhY2VtZW50TmFtZXMuc2l6ZSgpID8gcmVwbGFjZW1lbnROYW1lc1tp
XSA6IG51bGxTdHJpbmcoKSwgeyB9IH0pOworICAgIG1fY2xpZW50LT5maWxlc0Nob3NlbihXVEZN
b3ZlKGZpbGVzKSk7CiB9CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtODYsMTkgKzg1
LDE5IEBAIHZvaWQgRmlsZUNob29zZXI6OmNob29zZU1lZGlhRmlsZXMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIGZpbGVuYW1lcywgY29uc3QgU3RyaW5nCiAgICAgaWYgKCFtX2NsaWVudCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+IGZpbGVzOwotICAg
IGZvciAoYXV0byYgZmlsZW5hbWUgOiBmaWxlbmFtZXMpCi0gICAgICAgIGZpbGVzLmFwcGVuZCh7
IGZpbGVuYW1lLCB7IH0sIHsgfSB9KTsKLSAgICBtX2NsaWVudC0+ZmlsZXNDaG9zZW4oZmlsZXMs
IGRpc3BsYXlTdHJpbmcsIGljb24pOworICAgIGF1dG8gZmlsZXMgPSBmaWxlbmFtZXMubWFwKFtd
KGF1dG8mIGZpbGVuYW1lKSB7CisgICAgICAgIHJldHVybiBGaWxlQ2hvb3NlckZpbGVJbmZvIHsg
ZmlsZW5hbWUsIHsgfSwgeyB9IH07CisgICAgfSk7CisgICAgbV9jbGllbnQtPmZpbGVzQ2hvc2Vu
KFdURk1vdmUoZmlsZXMpLCBkaXNwbGF5U3RyaW5nLCBpY29uKTsKIH0KIAogI2VuZGlmCiAKIHZv
aWQgRmlsZUNob29zZXI6OmNob29zZUZpbGVzKGNvbnN0IFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJ
bmZvPiYgZmlsZXMpCiB7Ci0gICAgVmVjdG9yPFN0cmluZz4gcGF0aHM7Ci0gICAgZm9yIChhdXRv
JiBmaWxlIDogZmlsZXMpCi0gICAgICAgIHBhdGhzLmFwcGVuZChmaWxlLnBhdGgpOworICAgIGF1
dG8gcGF0aHMgPSBmaWxlcy5tYXAoW10oYXV0byYgZmlsZSkgeworICAgICAgICByZXR1cm4gZmls
ZS5wYXRoOworICAgIH0pOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgaW5lbGVnYW50LiBXZSBz
aG91bGQgbm90IGJlIGxvb2tpbmcgYXQgc2V0dGluZ3MgaGVyZS4KICAgICBpZiAobV9zZXR0aW5n
cy5zZWxlY3RlZEZpbGVzID09IHBhdGhzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2hhcmVkQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1
ZmZlci5jcHAKaW5kZXggZDA5ZjEwNTJhMGYzMWVlOTcwNjExMDEzYjM5MzVmYjUzMDk1NTA5Ni4u
Zjg3YjZhNGY2M2IyNmEyMTg4MjA2ZTkzOGFhNTg1Nzk3YWIzOTVlNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCkBAIC0yMDYsOSArMjA2LDcgQEAgdm9pZCBGcmFn
bWVudGVkU2hhcmVkQnVmZmVyOjphcHBlbmQoY29uc3QgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlciYg
ZGF0YSkKIHZvaWQgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHNpemVfdCBsZW5ndGgpCiB7CiAgICAgQVNTRVJUKCFtX2NvbnRpZ3VvdXMpOwotICAg
IFZlY3Rvcjx1aW50OF90PiB2ZWN0b3I7Ci0gICAgdmVjdG9yLmFwcGVuZChkYXRhLCBsZW5ndGgp
OwotICAgIG1fc2VnbWVudHMuYXBwZW5kKHsgbV9zaXplLCBEYXRhU2VnbWVudDo6Y3JlYXRlKFdU
Rk1vdmUodmVjdG9yKSkgfSk7CisgICAgbV9zZWdtZW50cy5hcHBlbmQoeyBtX3NpemUsIERhdGFT
ZWdtZW50OjpjcmVhdGUoVmVjdG9yIHsgZGF0YSwgbGVuZ3RoIH0pIH0pOwogICAgIG1fc2l6ZSAr
PSBsZW5ndGg7CiAgICAgQVNTRVJUKGludGVybmFsbHlDb25zaXN0ZW50KCkpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkU2FmZURhdGFCdWZmZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZFNhZmVEYXRhQnVmZmVyLmgKaW5kZXggZDM5N2Qy
MjdkZmM1MzRhZDBjZjU4NzAyYmUxY2E1ODAyNDk5YTBiYi4uYjUwNmU5MTQ1ZDVjNzE3YWY0ZjM2
NzU3ZDg3ZDAwMjJjNDllNTI4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
VGhyZWFkU2FmZURhdGFCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJl
YWRTYWZlRGF0YUJ1ZmZlci5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisj
aW5jbHVkZSA8d3RmL0hhc2hlci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRl
ZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMTQzLDQgKzE0NCwxNiBAQCBib29s
IFRocmVhZFNhZmVEYXRhQnVmZmVyOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVGhyZWFkU2Fm
ZURhdGFCdWZmZXImIHJlc3VsdAogICAgIHJldHVybiB0cnVlOwogfQogCitpbmxpbmUgdm9pZCBh
ZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiBidWZmZXIpCit7
CisgICAgYXV0byogZGF0YSA9IGJ1ZmZlci5kYXRhKCk7CisgICAgaWYgKCFkYXRhKSB7CisgICAg
ICAgIGFkZChoYXNoZXIsIHRydWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFkZCho
YXNoZXIsIGZhbHNlKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IGJ1ZmZlci5zaXpl
KCk7IGkgPCBzaXplOyArK2kpCisgICAgICAgIGFkZChoYXNoZXIsIGRhdGFbaV0pOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHAKaW5kZXggMWNmMzljYWNmMzAy
NDUwOGU4ZDEyZTg2NDVjNTA4Njc3MjE5NDM1Yi4uMGY5MzU2OTBjNmI0NDVmY2NhNTEwY2M2NjAw
NmExNzczMWI0ZWRjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
QXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0F1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmNwcApAQCAtNTYsNiArNTYsNyBAQCB2b2lk
IEF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yOjppbml0aWFsaXplKCkKICAgICAgICAgRGlzYWJsZU1h
bGxvY1Jlc3RyaWN0aW9uc0ZvckN1cnJlbnRUaHJlYWRTY29wZSBkaXNhYmxlTWFsbG9jUmVzdHJp
Y3Rpb25zOwogCiAgICAgICAgIC8vIENyZWF0ZSBwcm9jZXNzaW5nIGtlcm5lbHMsIG9uZSBwZXIg
Y2hhbm5lbC4KKyAgICAgICAgbV9rZXJuZWxzLnJlc2VydmVDYXBhY2l0eShudW1iZXJPZkNoYW5u
ZWxzKCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVs
cygpOyArK2kpCiAgICAgICAgICAgICBtX2tlcm5lbHMuYXBwZW5kKGNyZWF0ZUtlcm5lbCgpKTsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1Jl
c2FtcGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1Jlc2FtcGxl
ci5jcHAKaW5kZXggZGU1MDhjYzZlZjRhNWIwMWJkNGViMjI0NzQ1YjdlZjI4Mjg0MGY4ZS4uNzQ2
OWNlNGRlM2YzYzE4ODg5MjhmNTQ5N2QxMmNlNTZkYjZlNmQyZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9SZXNhbXBsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUmVzYW1wbGVyLmNwcApAQCAtNDIsOCArNDIsOSBA
QCBBdWRpb1Jlc2FtcGxlcjo6QXVkaW9SZXNhbXBsZXIoKQogCiBBdWRpb1Jlc2FtcGxlcjo6QXVk
aW9SZXNhbXBsZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscykKIHsKKyAgICBtX2tlcm5lbHMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkNoYW5uZWxzKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKQotICAgICAgICBtX2tlcm5lbHMu
YXBwZW5kKG1ha2VVbmlxdWU8QXVkaW9SZXNhbXBsZXJLZXJuZWw+KHRoaXMpKTsKKyAgICAgICAg
bV9rZXJuZWxzLnVuY2hlY2tlZEFwcGVuZChtYWtlVW5pcXVlPEF1ZGlvUmVzYW1wbGVyS2VybmVs
Pih0aGlzKSk7CiAKICAgICBtX3NvdXJjZUJ1cyA9IEF1ZGlvQnVzOjpjcmVhdGUobnVtYmVyT2ZD
aGFubmVscywgMCwgZmFsc2UpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAKaW5kZXggOWYzMTgxY2Zi
YjQwMjI3Nzc5OTYyM2I5YmZkZGNkZDQ5NTljMDBiMC4uYzFjN2E1Nzc1YWZmZDUxMzkyNWI1N2Rk
YjE1Njc2Yzc4NTlhNzllOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwCkBAIC02MCw5ICs2MCwxMCBA
QCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0TnVtYmVyT2ZDaGFubmVscyh1bnNp
Z25lZCBudW1iZXJPZkNoYW5uZWxzKQogICAgIGlmIChtX3ByZURlbGF5QnVmZmVycy5zaXplKCkg
PT0gbnVtYmVyT2ZDaGFubmVscykKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcmVEZWxheUJ1
ZmZlcnMuY2xlYXIoKTsKKyAgICBtX3ByZURlbGF5QnVmZmVycy5zaHJpbmsoMCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkKICAgICAgICAgbV9w
cmVEZWxheUJ1ZmZlcnMuYXBwZW5kKG1ha2VVbmlxdWU8QXVkaW9GbG9hdEFycmF5PihNYXhQcmVE
ZWxheUZyYW1lcykpOworICAgIG1fcHJlRGVsYXlCdWZmZXJzLnNocmlua1RvRml0KCk7CiB9CiAK
IHZvaWQgRHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpzZXRQcmVEZWxheVRpbWUoZmxvYXQgcHJl
RGVsYXlUaW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTXVs
dGlDaGFubmVsUmVzYW1wbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL011
bHRpQ2hhbm5lbFJlc2FtcGxlci5jcHAKaW5kZXggYjk2NmZhMDZjZDMwZWIzNGRmNzFmY2ZiZGU3
YzE2NTgyMzExMTIxZi4uMTcwMjNiNjQyNjFiZGZkMzc1ZWUwOWZlMjk2YjNiZGE4ODI3ZjJlOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTXVsdGlDaGFubmVsUmVz
YW1wbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NdWx0aUNoYW5u
ZWxSZXNhbXBsZXIuY3BwCkBAIC01Myw4ICs1Myw5IEBAIE11bHRpQ2hhbm5lbFJlc2FtcGxlcjo6
TXVsdGlDaGFubmVsUmVzYW1wbGVyKGRvdWJsZSBzY2FsZUZhY3RvciwgdW5zaWduZWQgbnVtYmVy
CiAgICAgfQogCiAgICAgLy8gQ3JlYXRlIGVhY2ggY2hhbm5lbCdzIHJlc2FtcGxlci4KKyAgICBt
X2tlcm5lbHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkNoYW5uZWxzKTsKICAgICBm
b3IgKHVuc2lnbmVkIGNoYW5uZWxJbmRleCA9IDA7IGNoYW5uZWxJbmRleCA8IG51bWJlck9mQ2hh
bm5lbHM7ICsrY2hhbm5lbEluZGV4KQotICAgICAgICBtX2tlcm5lbHMuYXBwZW5kKG1ha2VVbmlx
dWU8U2luY1Jlc2FtcGxlcj4oc2NhbGVGYWN0b3IsIHJlcXVlc3RGcmFtZXMsIHN0ZDo6YmluZCgm
TXVsdGlDaGFubmVsUmVzYW1wbGVyOjpwcm92aWRlSW5wdXRGb3JDaGFubmVsLCB0aGlzLCBzdGQ6
OnBsYWNlaG9sZGVyczo6XzEsIHN0ZDo6cGxhY2Vob2xkZXJzOjpfMiwgY2hhbm5lbEluZGV4KSkp
OworICAgICAgICBtX2tlcm5lbHMudW5jaGVja2VkQXBwZW5kKG1ha2VVbmlxdWU8U2luY1Jlc2Ft
cGxlcj4oc2NhbGVGYWN0b3IsIHJlcXVlc3RGcmFtZXMsIHN0ZDo6YmluZCgmTXVsdGlDaGFubmVs
UmVzYW1wbGVyOjpwcm92aWRlSW5wdXRGb3JDaGFubmVsLCB0aGlzLCBzdGQ6OnBsYWNlaG9sZGVy
czo6XzEsIHN0ZDo6cGxhY2Vob2xkZXJzOjpfMiwgY2hhbm5lbEluZGV4KSkpOwogfQogCiBNdWx0
aUNoYW5uZWxSZXNhbXBsZXI6On5NdWx0aUNoYW5uZWxSZXNhbXBsZXIoKSA9IGRlZmF1bHQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tCmluZGV4IDA1ZWEyMTExZWI1ZDQ1M2NiMjhk
OGU3N2VmM2NiZjVmMzU2NzE5ODkuLmZhMzBhZmRlM2IxZTFlMzZlODYxYWVjYmQ5ZmJlOGM3ZjA5
MDM1NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNr
U2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tCkBAIC01MzQsMTQgKzUz
NCwxMiBAQCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IFBsYXliYWNrU2Vzc2lvbk1vZGVs
TWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxlYwogICAgIFZlY3RvcjxNZWRpYVNlbGVjdGlv
bk9wdGlvbj4gbGVnaWJsZU9wdGlvbnM7CiAKICAgICBpZiAoIW1fbWVkaWFFbGVtZW50IHx8ICFt
X21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJldHVybiBsZWdpYmxl
T3B0aW9uczsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGF1dG8mIGNhcHRpb25QcmVmZXJl
bmNlcyA9IG1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+Z3JvdXAoKS5lbnN1cmVD
YXB0aW9uUHJlZmVyZW5jZXMoKTsKLQotICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX2xlZ2libGVU
cmFja3NGb3JNZW51KQotICAgICAgICBsZWdpYmxlT3B0aW9ucy5hcHBlbmQoY2FwdGlvblByZWZl
cmVuY2VzLm1lZGlhU2VsZWN0aW9uT3B0aW9uRm9yVHJhY2sodHJhY2suZ2V0KCkpKTsKLQotICAg
IHJldHVybiBsZWdpYmxlT3B0aW9uczsKKyAgICByZXR1cm4gbV9sZWdpYmxlVHJhY2tzRm9yTWVu
dS5tYXAoWyZdKGF1dG8mIHRyYWNrKSB7CisgICAgICAgIHJldHVybiBjYXB0aW9uUHJlZmVyZW5j
ZXMubWVkaWFTZWxlY3Rpb25PcHRpb25Gb3JUcmFjayh0cmFjay5nZXQoKSk7CisgICAgfSk7CiB9
CiAKIHVpbnQ2NF90IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVk
aWFTZWxlY3RlZEluZGV4KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dhbWVwYWQvbWFjL0R1YWxzaG9jazNISURHYW1lcGFkLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dhbWVwYWQvbWFjL0R1YWxzaG9jazNISURHYW1lcGFkLmNwcAppbmRleCA2YzQw
ZThiODg5Mjg3M2ZmMDcyMDYxOGNmZTgzOTY0YzgwZWMzNDFlLi5jMGY1MTgxYmM0NGIxYmRjZWJh
NjliOGNiNmEzNGE5ZWExMjdkZjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9nYW1lcGFkL21hYy9EdWFsc2hvY2szSElER2FtZXBhZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvRHVhbHNob2NrM0hJREdhbWVwYWQuY3BwCkBAIC00Mywx
MiArNDMsMTAgQEAgRHVhbHNob2NrM0hJREdhbWVwYWQ6OkR1YWxzaG9jazNISURHYW1lcGFkKEhJ
RERldmljZSYmIGRldmljZSwgdW5zaWduZWQgaW5kZXgpCiAKICAgICBtX21hcHBpbmcgPSBzdGFu
ZGFyZEdhbWVwYWRNYXBwaW5nU3RyaW5nKCk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG51bWJlck9mU3RhbmRhcmRHYW1lcGFkQnV0dG9uc1dpdGhIb21lQnV0dG9uOyArK2kpCi0gICAg
ICAgIG1fYnV0dG9uVmFsdWVzLmFwcGVuZCgwLjApOworICAgIG1fYnV0dG9uVmFsdWVzID0gVmVj
dG9yKG51bWJlck9mU3RhbmRhcmRHYW1lcGFkQnV0dG9uc1dpdGhIb21lQnV0dG9uLCBTaGFyZWRH
YW1lcGFkVmFsdWUgeyAwLjAgfSk7CiAKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF4aXNDb3Vu
dCA9IDQ7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBheGlzQ291bnQ7ICsraSkKLSAgICAg
ICAgbV9heGlzVmFsdWVzLmFwcGVuZCgwLjApOworICAgIGNvbnN0ZXhwciBzaXplX3QgYXhpc0Nv
dW50ID0gNDsKKyAgICBtX2F4aXNWYWx1ZXMgPSBWZWN0b3IoYXhpc0NvdW50LCBTaGFyZWRHYW1l
cGFkVmFsdWUgeyAwLjAgfSk7CiAKICAgICBhdXRvIGlucHV0RWxlbWVudHMgPSBoaWREZXZpY2Uo
KS51bmlxdWVJbnB1dEVsZW1lbnRzSW5EZXZpY2VUcmVlT3JkZXIoKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvTG9naXRlY2hHYW1lcGFkLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL0xvZ2l0ZWNoR2FtZXBhZC5jcHAK
aW5kZXggNjcxNDNmYjk5NWJhMmMzZTY4ZGQyMTFkMTY1YmU2MjBjZWY3ODllZi4uNzgwZDRhM2Y5
ZWEyNTNiYmQ3ZTcyYzRmYmZjZDA1ZmVlMDMyMWE4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvTG9naXRlY2hHYW1lcGFkLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9Mb2dpdGVjaEdhbWVwYWQuY3BwCkBAIC00Mywx
MiArNDMsMTAgQEAgTG9naXRlY2hHYW1lcGFkOjpMb2dpdGVjaEdhbWVwYWQoSElERGV2aWNlJiYg
ZGV2aWNlLCB1bnNpZ25lZCBpbmRleCkKIAogICAgIG1fbWFwcGluZyA9IHN0YW5kYXJkR2FtZXBh
ZE1hcHBpbmdTdHJpbmcoKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZT
dGFuZGFyZEdhbWVwYWRCdXR0b25zV2l0aG91dEhvbWVCdXR0b247ICsraSkKLSAgICAgICAgbV9i
dXR0b25WYWx1ZXMuYXBwZW5kKDAuMCk7CisgICAgbV9idXR0b25WYWx1ZXMgPSBWZWN0b3IobnVt
YmVyT2ZTdGFuZGFyZEdhbWVwYWRCdXR0b25zV2l0aG91dEhvbWVCdXR0b24sIFNoYXJlZEdhbWVw
YWRWYWx1ZSB7IDAuMCB9KTsKIAotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYXhpc0NvdW50ID0g
NDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF4aXNDb3VudDsgKytpKQotICAgICAgICBt
X2F4aXNWYWx1ZXMuYXBwZW5kKDAuMCk7CisgICAgY29uc3RleHByIHNpemVfdCBheGlzQ291bnQg
PSA0OworICAgIG1fYXhpc1ZhbHVlcyA9IFZlY3RvcihheGlzQ291bnQsIFNoYXJlZEdhbWVwYWRW
YWx1ZSB7IDAuMCB9KTsKIAogICAgIGF1dG8gaW5wdXRFbGVtZW50cyA9IGhpZERldmljZSgpLnVu
aXF1ZUlucHV0RWxlbWVudHNJbkRldmljZVRyZWVPcmRlcigpOwogCkBAIC01OSwxMSArNTcsMTIg
QEAgTG9naXRlY2hHYW1lcGFkOjpMb2dpdGVjaEdhbWVwYWQoSElERGV2aWNlJiYgZGV2aWNlLCB1
bnNpZ25lZCBpbmRleCkKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBpbnB1dEVsZW1lbnRzKSB7
CiAgICAgICAgIHN3aXRjaCAoZWxlbWVudC5mdWxsVXNhZ2UoKSkgewogICAgICAgICBjYXNlIGhp
ZEhhdHN3aXRjaEZ1bGxVc2FnZTogewotICAgICAgICAgICAgVmVjdG9yPFNoYXJlZEdhbWVwYWRW
YWx1ZT4gaGF0c3dpdGNoVmFsdWVzOwotICAgICAgICAgICAgaGF0c3dpdGNoVmFsdWVzLmFwcGVu
ZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlclRv
cF0pOwotICAgICAgICAgICAgaGF0c3dpdGNoVmFsdWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1so
c2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlclJpZ2h0XSk7Ci0gICAgICAgICAg
ICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1
dHRvblJvbGU6OkxlZnRDbHVzdGVyQm90dG9tXSk7Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1
ZXMuYXBwZW5kKG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRD
bHVzdGVyTGVmdF0pOworICAgICAgICAgICAgYXV0byBoYXRzd2l0Y2hWYWx1ZXMgPSBWZWN0b3I8
U2hhcmVkR2FtZXBhZFZhbHVlPjo6ZnJvbSgKKyAgICAgICAgICAgICAgICBtX2J1dHRvblZhbHVl
c1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlclRvcF0sCisgICAgICAgICAg
ICAgICAgbV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0
ZXJSaWdodF0sCisgICAgICAgICAgICAgICAgbV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFk
QnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJCb3R0b21dLAorICAgICAgICAgICAgICAgIG1fYnV0dG9u
VmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyTGVmdF0KKyAgICAg
ICAgICAgICk7CiAKICAgICAgICAgICAgIG1fZWxlbWVudE1hcC5zZXQoZWxlbWVudC5jb29raWUo
KSwgbWFrZVVuaXF1ZTxISURHYW1lcGFkSGF0c3dpdGNoPihlbGVtZW50LCBXVEZNb3ZlKGhhdHN3
aXRjaFZhbHVlcykpKTsKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvU3RhZGlhSElER2FtZXBhZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9TdGFkaWFISURHYW1lcGFkLmNwcAppbmRleCAw
YTk0ZTU2MjMzYTIwNDQ2NDFmMTAwZjA1NjQ0ZDU3NWFkYmM5ZTczLi4zNzUyMTM0NDY0Yzc4NTY3
Y2I2YmUxOGYwMGVhNTdmODlhYjdiZDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9nYW1lcGFkL21hYy9TdGFkaWFISURHYW1lcGFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9TdGFkaWFISURHYW1lcGFkLmNwcApAQCAtNDEsMTIgKzQx
LDEwIEBAIFN0YWRpYUhJREdhbWVwYWQ6OlN0YWRpYUhJREdhbWVwYWQoSElERGV2aWNlJiYgZGV2
aWNlLCB1bnNpZ25lZCBpbmRleCkKIAogICAgIG1fbWFwcGluZyA9IHN0YW5kYXJkR2FtZXBhZE1h
cHBpbmdTdHJpbmcoKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTk7ICsraSkKLSAg
ICAgICAgbV9idXR0b25WYWx1ZXMuYXBwZW5kKDAuMCk7CisgICAgbV9idXR0b25WYWx1ZXMgPSBW
ZWN0b3IoMTksIFNoYXJlZEdhbWVwYWRWYWx1ZSB7IDAuMCB9KTsKIAotICAgIHN0YXRpYyBjb25z
dCBzaXplX3QgYXhpc0NvdW50ID0gNDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF4aXND
b3VudDsgKytpKQotICAgICAgICBtX2F4aXNWYWx1ZXMuYXBwZW5kKDAuMCk7CisgICAgY29uc3Rl
eHByIHNpemVfdCBheGlzQ291bnQgPSA0OworICAgIG1fYXhpc1ZhbHVlcyA9IFZlY3RvcihheGlz
Q291bnQsIFNoYXJlZEdhbWVwYWRWYWx1ZSB7IDAuMCB9KTsKIAogICAgIGF1dG8gaW5wdXRFbGVt
ZW50cyA9IGhpZERldmljZSgpLnVuaXF1ZUlucHV0RWxlbWVudHNJbkRldmljZVRyZWVPcmRlcigp
OwogCkBAIC03MCwxMSArNjgsMTIgQEAgU3RhZGlhSElER2FtZXBhZDo6U3RhZGlhSElER2FtZXBh
ZChISUREZXZpY2UmJiBkZXZpY2UsIHVuc2lnbmVkIGluZGV4KQogICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgY2FzZSBoaWRIYXRzd2l0Y2hGdWxsVXNhZ2U6IHsKLSAgICAgICAgICAgIFZl
Y3RvcjxTaGFyZWRHYW1lcGFkVmFsdWU+IGhhdHN3aXRjaFZhbHVlczsKLSAgICAgICAgICAgIGhh
dHN3aXRjaFZhbHVlcy5hcHBlbmQobV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9u
Um9sZTo6TGVmdENsdXN0ZXJUb3BdKTsKLSAgICAgICAgICAgIGhhdHN3aXRjaFZhbHVlcy5hcHBl
bmQobV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJS
aWdodF0pOwotICAgICAgICAgICAgaGF0c3dpdGNoVmFsdWVzLmFwcGVuZChtX2J1dHRvblZhbHVl
c1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlckJvdHRvbV0pOwotICAgICAg
ICAgICAgaGF0c3dpdGNoVmFsdWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVw
YWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlckxlZnRdKTsKKyAgICAgICAgICAgIGF1dG8gaGF0c3dp
dGNoVmFsdWVzID0gVmVjdG9yPFNoYXJlZEdhbWVwYWRWYWx1ZT46OmZyb20oCisgICAgICAgICAg
ICAgICAgbV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0
ZXJUb3BdLAorICAgICAgICAgICAgICAgIG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1
dHRvblJvbGU6OkxlZnRDbHVzdGVyUmlnaHRdLAorICAgICAgICAgICAgICAgIG1fYnV0dG9uVmFs
dWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyQm90dG9tXSwKKyAgICAg
ICAgICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0
Q2x1c3RlckxlZnRdCisgICAgICAgICAgICApOwogCiAgICAgICAgICAgICBtX2VsZW1lbnRNYXAu
c2V0KGVsZW1lbnQuY29va2llKCksIG1ha2VVbmlxdWU8SElER2FtZXBhZEhhdHN3aXRjaD4oZWxl
bWVudCwgV1RGTW92ZShoYXRzd2l0Y2hWYWx1ZXMpKSk7CiAgICAgICAgICAgICBicmVhazsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAK
aW5kZXggMWZlZTI5YWU1ZjcxOWM0ZTU1NGEyYzdlNzBjYjcwZjAxZjliMjAwMi4uMmRjNzZmODNm
NWZjNDk5YjdkYjI3YWM1YzRmZGY3NDIxYTE0YTk2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKQEAgLTc2MywxMyArNzYzLDEx
IEBAIHZvaWQgR3JhcGhpY3NMYXllcjo6YWRkUmVwYWludFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZXBhaW50UmVjdCkKICAgICBGbG9hdFJlY3QgbGFyZ2VzdFJlcGFpbnRSZWN0KEZsb2F0UG9pbnQo
KSwgbV9zaXplKTsKICAgICBsYXJnZXN0UmVwYWludFJlY3QuaW50ZXJzZWN0KHJlcGFpbnRSZWN0
KTsKICAgICBSZXBhaW50TWFwOjppdGVyYXRvciByZXBhaW50SXQgPSByZXBhaW50UmVjdE1hcCgp
LmZpbmQodGhpcyk7Ci0gICAgaWYgKHJlcGFpbnRJdCA9PSByZXBhaW50UmVjdE1hcCgpLmVuZCgp
KSB7Ci0gICAgICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHJlcGFpbnRSZWN0czsKLSAgICAgICAgcmVw
YWludFJlY3RzLmFwcGVuZChsYXJnZXN0UmVwYWludFJlY3QpOwotICAgICAgICByZXBhaW50UmVj
dE1hcCgpLnNldCh0aGlzLCByZXBhaW50UmVjdHMpOwotICAgIH0gZWxzZSB7CisgICAgaWYgKHJl
cGFpbnRJdCA9PSByZXBhaW50UmVjdE1hcCgpLmVuZCgpKQorICAgICAgICByZXBhaW50UmVjdE1h
cCgpLnNldCh0aGlzLCBWZWN0b3IgeyBXVEZNb3ZlKGxhcmdlc3RSZXBhaW50UmVjdCkgfSk7Cisg
ICAgZWxzZSB7CiAgICAgICAgIFZlY3RvcjxGbG9hdFJlY3Q+JiByZXBhaW50UmVjdHMgPSByZXBh
aW50SXQtPnZhbHVlOwotICAgICAgICByZXBhaW50UmVjdHMuYXBwZW5kKGxhcmdlc3RSZXBhaW50
UmVjdCk7CisgICAgICAgIHJlcGFpbnRSZWN0cy5hcHBlbmQoV1RGTW92ZShsYXJnZXN0UmVwYWlu
dFJlY3QpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUGF0aFV0aWxpdGllcy5jcHAKaW5kZXggYjk3OTlhNGQxMDYxZWQyMGExYjUwZWQ1MDY4
NjUxYzVmZWE0NjZhNC4uNzdkYzk4MzVkNTYxMmY2NjgxNzI0ZjdiNzZjYmExMDM5NmM3YzM4OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGll
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGll
cy5jcHAKQEAgLTI5MCwxNyArMjkwLDE0IEBAIHN0YXRpYyBWZWN0b3I8RmxvYXRQb2ludEdyYXBo
OjpQb2x5Z29uPiBwb2x5Z29uc0ZvclJlY3QoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mCiAKIFZl
Y3RvcjxQYXRoPiBQYXRoVXRpbGl0aWVzOjpwYXRoc1dpdGhTaHJpbmtXcmFwcGVkUmVjdHMoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCByYWRpdXMpCiB7Ci0gICAgVmVjdG9y
PFBhdGg+IHBhdGhzOwotCiAgICAgaWYgKHJlY3RzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IHBhdGhzOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgaWYgKHJlY3RzLnNpemUoKSA+IDIw
KSB7CiAgICAgICAgIFBhdGggcGF0aDsKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiByZWN0IDog
cmVjdHMpCiAgICAgICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QsIEZsb2F0U2l6ZShy
YWRpdXMsIHJhZGl1cykpOwotICAgICAgICBwYXRocy5hcHBlbmQocGF0aCk7Ci0gICAgICAgIHJl
dHVybiBwYXRoczsKKyAgICAgICAgcmV0dXJuIHsgV1RGTW92ZShwYXRoKSB9OwogICAgIH0KIAog
ICAgIEZsb2F0UG9pbnRHcmFwaCBncmFwaDsKQEAgLTMwOSwxMCArMzA2LDEwIEBAIFZlY3RvcjxQ
YXRoPiBQYXRoVXRpbGl0aWVzOjpwYXRoc1dpdGhTaHJpbmtXcmFwcGVkUmVjdHMoY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mCiAgICAgICAgIFBhdGggcGF0aDsKICAgICAgICAgZm9yIChjb25zdCBh
dXRvJiByZWN0IDogcmVjdHMpCiAgICAgICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3Qs
IEZsb2F0U2l6ZShyYWRpdXMsIHJhZGl1cykpOwotICAgICAgICBwYXRocy5hcHBlbmQocGF0aCk7
Ci0gICAgICAgIHJldHVybiBwYXRoczsKKyAgICAgICAgcmV0dXJuIHsgV1RGTW92ZShwYXRoKSB9
OwogICAgIH0KIAorICAgIFZlY3RvcjxQYXRoPiBwYXRoczsKICAgICBmb3IgKGF1dG8mIHBvbHkg
OiBwb2x5cykgewogICAgICAgICBQYXRoIHBhdGg7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBwb2x5LnNpemUoKTsgKytpKSB7CkBAIC0zNDQsNyArMzQxLDcgQEAgVmVjdG9yPFBh
dGg+IFBhdGhVdGlsaXRpZXM6OnBhdGhzV2l0aFNocmlua1dyYXBwZWRSZWN0cyhjb25zdCBWZWN0
b3I8RmxvYXRSZWN0PiYKICAgICAgICAgICAgIHBhdGguYWRkQXJjVG8oKmZyb21FZGdlLnNlY29u
ZCwgKnRvRWRnZS5maXJzdCArIHRvT2Zmc2V0LCBjbGFtcGVkUmFkaXVzKTsKICAgICAgICAgfQog
ICAgICAgICBwYXRoLmNsb3NlU3VicGF0aCgpOwotICAgICAgICBwYXRocy5hcHBlbmQocGF0aCk7
CisgICAgICAgIHBhdGhzLmFwcGVuZChXVEZNb3ZlKHBhdGgpKTsKICAgICB9CiAgICAgcmV0dXJu
IHBhdGhzOwogfQpAQCAtNTQzLDEzICs1NDAsMTQgQEAgUGF0aCBQYXRoVXRpbGl0aWVzOjpwYXRo
V2l0aFNocmlua1dyYXBwZWRSZWN0c0Zvck91dGxpbmUoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4K
ICAgICBib3R0b21MZWZ0UmFkaXVzID0gZmlyc3RMaW5lUmFkaWkuYm90dG9tTGVmdCgpOwogICAg
IHRvcFJpZ2h0UmFkaXVzID0gbGFzdExpbmVSYWRpaS50b3BSaWdodCgpOwogICAgIGJvdHRvbVJp
Z2h0UmFkaXVzID0gbGFzdExpbmVSYWRpaS5ib3R0b21SaWdodCgpOwotICAgIFZlY3RvcjxGbG9h
dFBvaW50PiBjb3JuZXJzOwogICAgIC8vIHBoeXNpY2FsIHRvcExlZnQvdG9wUmlnaHQvYm90dG9t
UmlnaHQvYm90dG9tTGVmdAogICAgIGF1dG8gaXNIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUod3JpdGluZ01vZGUpOwotICAgIGNvcm5lcnMuYXBwZW5kKGZpcnN0TGluZVJlY3Qu
bWluWE1pbllDb3JuZXIoKSk7Ci0gICAgY29ybmVycy5hcHBlbmQoaXNIb3Jpem9udGFsID8gbGFz
dExpbmVSZWN0Lm1heFhNaW5ZQ29ybmVyKCkgOiBmaXJzdExpbmVSZWN0Lm1heFhNaW5ZQ29ybmVy
KCkpOwotICAgIGNvcm5lcnMuYXBwZW5kKGxhc3RMaW5lUmVjdC5tYXhYTWF4WUNvcm5lcigpKTsK
LSAgICBjb3JuZXJzLmFwcGVuZChpc0hvcml6b250YWwgPyBmaXJzdExpbmVSZWN0Lm1pblhNYXhZ
Q29ybmVyKCkgOiBsYXN0TGluZVJlY3QubWluWE1heFlDb3JuZXIoKSk7CisgICAgYXV0byBjb3Ju
ZXJzID0gVmVjdG9yPEZsb2F0UG9pbnQ+Ojpmcm9tKAorICAgICAgICBmaXJzdExpbmVSZWN0Lm1p
blhNaW5ZQ29ybmVyKCksCisgICAgICAgIGlzSG9yaXpvbnRhbCA/IGxhc3RMaW5lUmVjdC5tYXhY
TWluWUNvcm5lcigpIDogZmlyc3RMaW5lUmVjdC5tYXhYTWluWUNvcm5lcigpLAorICAgICAgICBs
YXN0TGluZVJlY3QubWF4WE1heFlDb3JuZXIoKSwKKyAgICAgICAgaXNIb3Jpem9udGFsID8gZmly
c3RMaW5lUmVjdC5taW5YTWF4WUNvcm5lcigpIDogbGFzdExpbmVSZWN0Lm1pblhNYXhZQ29ybmVy
KCkKKyAgICApOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvbHkuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgYXV0byBtb3ZlT3JBZGRMaW5lVG8gPSBbaSwgJnBhdGhdIChjb25zdCBG
bG9hdFBvaW50JiBzdGFydFBvaW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcAppbmRleCA1NDk5ZjM3YTdmMzY0
NmJkNWYzOTVhNDhiMDlkOTQxMWQ0YzliNjY0Li4wNGNiZTRkMjdmMTkwYjdiMjdiOWNhN2U5OGE5
YzQ3MTczZDJmODliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcApAQCAtMjE2LDEwICsyMTYsOSBAQCB2b2lk
IFNvdXJjZUJ1ZmZlclByaXZhdGU6OmJ1ZmZlcmVkU2FtcGxlc0ZvclRyYWNrSWQoY29uc3QgQXRv
bVN0cmluZyYgdHJhY2tJZCwgQwogICAgIGlmICghdHJhY2tCdWZmZXIpCiAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKHsgfSk7CiAKLSAgICBWZWN0b3I8U3RyaW5nPiBzYW1wbGVEZXNjcmlwdGlv
bnM7Ci0gICAgZm9yIChhdXRvJiBwYWlyIDogdHJhY2tCdWZmZXItPnNhbXBsZXMuZGVjb2RlT3Jk
ZXIoKSkKLSAgICAgICAgc2FtcGxlRGVzY3JpcHRpb25zLmFwcGVuZCh0b1N0cmluZygqcGFpci5z
ZWNvbmQpKTsKLQorICAgIGF1dG8gc2FtcGxlRGVzY3JpcHRpb25zID0gV1RGOjptYXAodHJhY2tC
dWZmZXItPnNhbXBsZXMuZGVjb2RlT3JkZXIoKSwgW10oYXV0byYgZW50cnkpIHsKKyAgICAgICAg
cmV0dXJuIHRvU3RyaW5nKCplbnRyeS5zZWNvbmQpOworICAgIH0pOwogICAgIGNvbXBsZXRpb25I
YW5kbGVyKFdURk1vdmUoc2FtcGxlRGVzY3JpcHRpb25zKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0
cmVhbWluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCmluZGV4IDhiMDRmOWJlOTZjMzZlMGEyNjIxODBh
MjVlYTM3NDU5NjJiM2Q3ZDUuLmM1NDYxNDYyM2I4N2VjMDg5NjFmMWQ0NDIwZjk2MDFmMTZhNmFi
NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcApAQCAtMjAx
LDkgKzIwMSw3IEBAIFJlZlB0cjxGcmFnbWVudGVkU2hhcmVkQnVmZmVyPiBDRE1Qcml2YXRlRmFp
clBsYXlTdHJlYW1pbmc6OnNhbml0aXplU2tkKGNvbnN0IEZyCiBzdGQ6Om9wdGlvbmFsPFZlY3Rv
cjxSZWY8RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4+PiBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1p
bmc6OmV4dHJhY3RLZXlJRHNTa2QoY29uc3QgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlciYgYnVmZmVy
KQogewogICAgIC8vIEluIHRoZSAnc2tkJyBzY2hlbWUsIHRoZSBpbml0IGRhdGEgaXMgdGhlIGtl
eSBJRC4KLSAgICBWZWN0b3I8UmVmPEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+PiBrZXlJRHM7Ci0g
ICAga2V5SURzLmFwcGVuZChidWZmZXIuY29weSgpKTsKLSAgICByZXR1cm4ga2V5SURzOworICAg
IHJldHVybiBWZWN0b3IgeyBidWZmZXIuY29weSgpIH07CiB9CiAKIHN0YXRpYyBjb25zdCBNZW1v
cnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4mIHZhbGlkSW5p
dERhdGFUeXBlcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcAppbmRleCBmNTVmNDMzNDRjMTI4YmY1MWI1Mzk5
OGE1ZGI1ZDEyZDQyYzBjZGRjLi5lYTFlNjYyZDFkZGY1NzJiYjI1NDQxN2FmOTc1ZDU0ZWZmY2U0
ZWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25DRi5jcHAKQEAgLTIxMTEsOSArMjExMSw3IEBAIHZvaWQgQVZGV3Jh
cHBlcjo6c2V0UmVxdWVzdEZvcktleShjb25zdCBTdHJpbmcmIGtleVVSSSwgQVZDRkFzc2V0UmVz
b3VyY2VMb2FkaW5nCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBWZWN0b3I8UmV0YWlu
UHRyPEFWQ0ZBc3NldFJlc291cmNlTG9hZGluZ1JlcXVlc3RSZWY+PiByZXF1ZXN0czsKLSAgICBy
ZXF1ZXN0cy5hcHBlbmQoYXZSZXF1ZXN0KTsKLSAgICBtX2tleVVSSVRvUmVxdWVzdE1hcC5zZXQo
a2V5VVJJLCByZXF1ZXN0cyk7CisgICAgbV9rZXlVUklUb1JlcXVlc3RNYXAuc2V0KGtleVVSSSwg
VmVjdG9yIHsgUmV0YWluUHRyIHsgYXZSZXF1ZXN0IH0gfSk7CiB9CiAKIFJldGFpblB0cjxBVkNG
QXNzZXRSZXNvdXJjZUxvYWRpbmdSZXF1ZXN0UmVmPiBBVkZXcmFwcGVyOjp0YWtlUmVxdWVzdEZv
cktleVVSSShjb25zdCBTdHJpbmcmIGtleVVSSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlT
dHJlYW1pbmdBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0KaW5k
ZXggMGVjZmRjYzE1ZDU4OTNiY2ViNmQzNmY5NjFlMjZkYWI3NzE0NzY3NC4uMjgyMTQzZDhiMTE3
NzA5ZmQzODQwNTVmNGFlYjcwMzBmMTQ3MDM1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0
cmVhbWluZ0FWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0K
QEAgLTE0NTgsNyArMTQ1OCw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJl
YW1pbmdBVkZPYmpDOjp1cGRhdGVLZXlTdGF0dXNlcyhzdGQ6Om9wdGlvbmFsCiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBtX2tleVN0YXR1c2VzLnN3YXAoa2V5U3RhdHVzZXMpOworICAgIG1fa2V5
U3RhdHVzZXMgPSBXVEZNb3ZlKGtleVN0YXR1c2VzKTsKIAogICAgIG1faW5zdGFuY2UtPnNlc3Np
b25LZXlTdGF0dXNlc0NoYW5nZWQoKnRoaXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVyQVZGT2Jq
Qy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L0ltYWdlRGVjb2RlckFWRk9iakMubW0KaW5kZXggNTYzYWYxOTI0ZDlhZjM1OWU5MzBlZjY0YmFl
MzIzZmMwNDFkZTg3YS4uYWQ3ZjQ1MTAxYzA2YTE4ODhjMDA4ZmFlZDRhOTE5MDU2MTM4MjkzYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvSW1hZ2VEZWNvZGVyQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1tCkBAIC01
MzUsMTMgKzUzNSwxMCBAQCBWZWN0b3I8SW1hZ2VEZWNvZGVyOjpGcmFtZUluZm8+IEltYWdlRGVj
b2RlckFWRk9iakM6OmZyYW1lSW5mb3MoKSBjb25zdAogICAgIGlmIChtX3NhbXBsZURhdGEuZW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIFZlY3RvcjxJbWFnZURlY29kZXI6OkZy
YW1lSW5mbz4gaW5mb3M7Ci0gICAgZm9yIChhdXRvJiBzYW1wbGUgOiBtX3NhbXBsZURhdGEucHJl
c2VudGF0aW9uT3JkZXIoKSkgeworICAgIHJldHVybiBXVEY6Om1hcChtX3NhbXBsZURhdGEucHJl
c2VudGF0aW9uT3JkZXIoKSwgW10oYXV0byYgc2FtcGxlKSB7CiAgICAgICAgIGF1dG8qIGltYWdl
U2FtcGxlID0gKEltYWdlRGVjb2RlckFWRk9iakNTYW1wbGUqKXNhbXBsZS5zZWNvbmQuZ2V0KCk7
Ci0gICAgICAgIGluZm9zLmFwcGVuZCh7IGltYWdlU2FtcGxlLT5oYXNBbHBoYSgpLCBTZWNvbmRz
KGltYWdlU2FtcGxlLT5kdXJhdGlvbigpLnRvRG91YmxlKCkpfSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGluZm9zOworICAgICAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjpGcmFtZUluZm8geyBpbWFn
ZVNhbXBsZS0+aGFzQWxwaGEoKSwgU2Vjb25kcyhpbWFnZVNhbXBsZS0+ZHVyYXRpb24oKS50b0Rv
dWJsZSgpKSB9OworICAgIH0pOwogfQogCiBib29sIEltYWdlRGVjb2RlckFWRk9iakM6OmZyYW1l
QWxsb3dTdWJzYW1wbGluZ0F0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNl
QnVmZmVyUGFyc2VyQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclBhcnNlckFWRk9iakMubW0KaW5kZXggYWEx
NTg0MDRiMTBlNDQ0YWY2ZTVlZGRjOGRhZDZiYTk2ZWQ1Y2IyMi4uZTYxYjE0N2Y2M2M1ZjQ1NzI3
NWY2MDUwM2UzN2E4YjUyZDE4ZTNhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUGFyc2VyQVZGT2JqQy5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9Tb3VyY2VCdWZmZXJQYXJzZXJBVkZPYmpDLm1tCkBAIC0yOTcsMTYgKzI5NywxNCBAQCB2b2lk
IFNvdXJjZUJ1ZmZlclBhcnNlckFWRk9iakM6OmRpZFBhcnNlU3RyZWFtRGF0YUFzQXNzZXQoQVZB
c3NldCogYXNzZXQpCiAKICAgICAgICAgICAgIGlmIChbdHJhY2sgaGFzTWVkaWFDaGFyYWN0ZXJp
c3RpYzpBVk1lZGlhQ2hhcmFjdGVyaXN0aWNWaXN1YWxdKSB7CiAgICAgICAgICAgICAgICAgU291
cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25TZWdtZW50OjpWaWRlb1RyYWNr
SW5mb3JtYXRpb24gaW5mbzsKLSAgICAgICAgICAgICAgICBhdXRvIHZpZGVvVHJhY2sgPSBWaWRl
b1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6Y3JlYXRlKHRyYWNrKTsKLSAgICAgICAg
ICAgICAgICBpbmZvLnRyYWNrID0gdmlkZW9UcmFjay5jb3B5UmVmKCk7CisgICAgICAgICAgICAg
ICAgaW5mby50cmFjayA9IFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjcmVh
dGUodHJhY2spOwogICAgICAgICAgICAgICAgIGluZm8uZGVzY3JpcHRpb24gPSBNZWRpYURlc2Ny
aXB0aW9uQVZGT2JqQzo6Y3JlYXRlKHRyYWNrKTsKLSAgICAgICAgICAgICAgICBzZWdtZW50LnZp
ZGVvVHJhY2tzLmFwcGVuZChpbmZvKTsKKyAgICAgICAgICAgICAgICBzZWdtZW50LnZpZGVvVHJh
Y2tzLmFwcGVuZChXVEZNb3ZlKGluZm8pKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoW3RyYWNr
IGhhc01lZGlhQ2hhcmFjdGVyaXN0aWM6QVZNZWRpYUNoYXJhY3RlcmlzdGljQXVkaWJsZV0pIHsK
ICAgICAgICAgICAgICAgICBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlv
blNlZ21lbnQ6OkF1ZGlvVHJhY2tJbmZvcm1hdGlvbiBpbmZvOwotICAgICAgICAgICAgICAgIGF1
dG8gYXVkaW9UcmFjayA9IEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjcmVh
dGUodHJhY2spOwotICAgICAgICAgICAgICAgIGluZm8udHJhY2sgPSBhdWRpb1RyYWNrLmNvcHlS
ZWYoKTsKKyAgICAgICAgICAgICAgICBpbmZvLnRyYWNrID0gQXVkaW9UcmFja1ByaXZhdGVNZWRp
YVNvdXJjZUFWRk9iakM6OmNyZWF0ZSh0cmFjayk7CiAgICAgICAgICAgICAgICAgaW5mby5kZXNj
cmlwdGlvbiA9IE1lZGlhRGVzY3JpcHRpb25BVkZPYmpDOjpjcmVhdGUodHJhY2spOwotICAgICAg
ICAgICAgICAgIHNlZ21lbnQuYXVkaW9UcmFja3MuYXBwZW5kKGluZm8pOworICAgICAgICAgICAg
ICAgIHNlZ21lbnQuYXVkaW9UcmFja3MuYXBwZW5kKFdURk1vdmUoaW5mbykpOwogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICAvLyBGSVhNRSgxMjUxNjEpICAgIDogQWRkIFRleHRUcmFjayBz
dXBwb3J0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KaW5kZXggODU0MjFlM2RlNzA5Y2Ux
NTljNDk0YjQwZmI4ZDFhZDIzNTkzYzNiYi4uMjc0OTM2NDcyMGM0ZDIxNzcyZGZjNTY3Y2MzNDhh
NGViYjY1MzQ1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQpAQCAtNjgsOSArNjgs
MTEgQEAgVmVjdG9yPEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRWYXJpYXRpb25BeGlzPiBGb250UGxh
dGZvcm1EYXRhOjp2YXJpYXRpb25BeGVzKFNob3UKICAgICBpZiAoIXBsYXRmb3JtRm9udCkKICAg
ICAgICAgcmV0dXJuIHsgfTsKICAgICAKKyAgICBhdXRvIG1hcCA9IGRlZmF1bHRWYXJpYXRpb25W
YWx1ZXMocGxhdGZvcm1Gb250LCBzaG91bGRMb2NhbGl6ZUF4aXNOYW1lcyk7CiAgICAgVmVjdG9y
PEZvbnRWYXJpYXRpb25BeGlzPiByZXN1bHRzOwotICAgIGZvciAoYXV0byYgW3RhZywgdmFsdWVz
XSA6IGRlZmF1bHRWYXJpYXRpb25WYWx1ZXMocGxhdGZvcm1Gb250LCBzaG91bGRMb2NhbGl6ZUF4
aXNOYW1lcykpCi0gICAgICAgIHJlc3VsdHMuYXBwZW5kKEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRW
YXJpYXRpb25BeGlzKHZhbHVlcy5heGlzTmFtZSwgU3RyaW5nKHRhZy5kYXRhKCksIHRhZy5zaXpl
KCkpLCB2YWx1ZXMuZGVmYXVsdFZhbHVlLCB2YWx1ZXMubWluaW11bVZhbHVlLCB2YWx1ZXMubWF4
aW11bVZhbHVlKSk7CisgICAgcmVzdWx0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHJlc3VsdHMu
c2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIFt0YWcsIHZhbHVlc10gOiBtYXApCisgICAgICAgIHJl
c3VsdHMudW5jaGVja2VkQXBwZW5kKEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRWYXJpYXRpb25BeGlz
KHZhbHVlcy5heGlzTmFtZSwgU3RyaW5nKHRhZy5kYXRhKCksIHRhZy5zaXplKCkpLCB2YWx1ZXMu
ZGVmYXVsdFZhbHVlLCB2YWx1ZXMubWluaW11bVZhbHVlLCB2YWx1ZXMubWF4aW11bVZhbHVlKSk7
CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdHM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9QYXN0ZWJvYXJkTWFjLm1tCmluZGV4IGJhOGVhMWViNDQ4YTkyMWUzMGQzYWU2YTljNzdl
ODgyMzNhYmM1M2IuLmEyYzI1MGFhMmJlZjhkZTk2NGJhZjA5MjQwZDVlMGVjNDE1MGVmODQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCkBAIC03MDIs
MTAgKzcwMiw3IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCiAgICAgICAg
IE5TVVJMICp1cmwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpjb2NvYURhdGFdOwogICAgICAgICBp
ZiAoW3VybCBpc0ZpbGVVUkxdKQogICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFZlY3Rv
cjxTdHJpbmc+IHR5cGVzOwotICAgICAgICB0eXBlcy5hcHBlbmQoY29jb2FUeXBlKTsKLSAgICAg
ICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRUeXBlcyh0
eXBlcywgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKTsKKyAgICAgICAgcGxhdGZvcm1TdHJh
dGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRUeXBlcyh7IGNvY29hVHlwZSB9LCBt
X3Bhc3RlYm9hcmROYW1lLCBjb250ZXh0KCkpOwogICAgICAgICBtX2NoYW5nZUNvdW50ID0gcGxh
dGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRTdHJpbmdGb3JUeXBl
KGNvY29hRGF0YSwgY29jb2FUeXBlLCBtX3Bhc3RlYm9hcmROYW1lLCBjb250ZXh0KCkpOwogCiAg
ICAgICAgIHJldHVybjsKQEAgLTcxNCw5ICs3MTEsNyBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xB
UkFUSU9OU19FTkQKIAogICAgIGlmICghY29jb2FUeXBlLmlzRW1wdHkoKSkgewogICAgICAgICAv
LyBldmVyeXRoaW5nIGVsc2Ugd2Uga25vdyBvZiBnb2VzIG9uIHRoZSBwYm9hcmQgYXMgYSBzdHJp
bmcKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7Ci0gICAgICAgIHR5cGVzLmFwcGVuZChj
b2NvYVR5cGUpOwotICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0
ZWd5KCktPmFkZFR5cGVzKHR5cGVzLCBtX3Bhc3RlYm9hcmROYW1lLCBjb250ZXh0KCkpOworICAg
ICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmFkZFR5cGVz
KHsgY29jb2FUeXBlIH0sIG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQoKSk7CiAgICAgICAgIG1f
Y2hhbmdlQ291bnQgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCkt
PnNldFN0cmluZ0ZvclR5cGUoY29jb2FEYXRhLCBjb2NvYVR5cGUsIG1fcGFzdGVib2FyZE5hbWUs
IGNvbnRleHQoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVWaWRlb0NhcHR1cmVTb3VyY2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVWaWRlb0NhcHR1cmVTb3VyY2UuY3Bw
CmluZGV4IDNlM2Y0MWExYzU4MDdlNmNkMzU5ZGUzZGYyNmFlNzJkNTUxY2Q1ODIuLjc3ZDMyNjY1
NmQ1Y2JjNWFlZmNkNDE3YTE3YTg3YTQ2ZjcxMjI3YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZVZpZGVvQ2Fw
dHVyZVNvdXJjZS5jcHAKQEAgLTc1LDExICs3NSw5IEBAIFZlY3RvcjxWaWRlb1ByZXNldERhdGE+
IFJlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlOjpwcmVzZXRzRGF0YSgpCiAKIHZvaWQgUmVhbHRp
bWVWaWRlb0NhcHR1cmVTb3VyY2U6OnNldFN1cHBvcnRlZFByZXNldHMoVmVjdG9yPFZpZGVvUHJl
c2V0RGF0YT4mJiBwcmVzZXREYXRhKQogewotICAgIFZlY3RvcjxSZWY8VmlkZW9QcmVzZXQ+PiBw
cmVzZXRzOwotCi0gICAgZm9yIChhdXRvJiBkYXRhIDogcHJlc2V0RGF0YSkKLSAgICAgICAgcHJl
c2V0cy5hcHBlbmQoVmlkZW9QcmVzZXQ6OmNyZWF0ZShXVEZNb3ZlKGRhdGEpKSk7Ci0KKyAgICBh
dXRvIHByZXNldHMgPSBXVEY6Om1hcChXVEZNb3ZlKHByZXNldERhdGEpLCBbXShhdXRvJiYgZGF0
YSkgeworICAgICAgICByZXR1cm4gVmlkZW9QcmVzZXQ6OmNyZWF0ZShXVEZNb3ZlKGRhdGEpKTsK
KyAgICB9KTsKICAgICBzZXRTdXBwb3J0ZWRQcmVzZXRzKFdURk1vdmUocHJlc2V0cykpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3Ry
eUltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJ
bXBsLmNwcAppbmRleCA2N2E3NjI5NWQ4NWYzOTFjODNiMjQwMGU2ZDFmZTU3OWNjZGVkODhmLi42
MjM2MzZhYzJhYmQ2ODM4NDE0ZGM4ZjFmOTI2Y2VkNWM0N2NjYTJjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKQEAgLTE0
MSwxMCArMTQxLDggQEAgdm9pZCBCbG9iUmVnaXN0cnlJbXBsOjpyZWdpc3RlckJsb2JVUkwoY29u
c3QgVVJMJiB1cmwsIFZlY3RvcjxCbG9iUGFydD4mJiBibG9iUGEKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQmxvYlBhcnQ6OlR5cGU6OkJsb2I6IHsKLSAgICAg
ICAgICAgIGlmIChhdXRvIGJsb2IgPSBtX2Jsb2JzLmdldChwYXJ0LnVybCgpLnN0cmluZygpKSkg
ewotICAgICAgICAgICAgICAgIGZvciAoY29uc3QgQmxvYkRhdGFJdGVtJiBpdGVtIDogYmxvYi0+
aXRlbXMoKSkKLSAgICAgICAgICAgICAgICAgICAgYmxvYkRhdGEtPm1faXRlbXMuYXBwZW5kKGl0
ZW0pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGF1dG8gYmxvYiA9IG1fYmxvYnMu
Z2V0KHBhcnQudXJsKCkuc3RyaW5nKCkpKQorICAgICAgICAgICAgICAgIGJsb2JEYXRhLT5tX2l0
ZW1zLmFwcGVuZFZlY3RvcihibG9iLT5pdGVtcygpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTMyOCw3ICszMjYsNyBAQCB2b2lkIEJsb2JSZWdpc3RyeUlt
cGw6OndyaXRlQmxvYnNUb1RlbXBvcmFyeUZpbGVzRm9ySW5kZXhlZERCKGNvbnN0IFZlY3RvcjxT
dHJpbgogICAgICAgICAgICAgICAgIGZpbGVQYXRocy5jbGVhcigpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZmlsZVBhdGhzLmFwcGVuZCh0ZW1w
RmlsZVBhdGguaXNvbGF0ZWRDb3B5KCkpOworICAgICAgICAgICAgZmlsZVBhdGhzLmFwcGVuZChX
VEZNb3ZlKHRlbXBGaWxlUGF0aCkuaXNvbGF0ZWRDb3B5KCkpOwogICAgICAgICB9CiAKICAgICAg
ICAgY2FsbE9uTWFpblRocmVhZChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSwgZmlsZVBhdGhzID0gV1RGTW92ZShmaWxlUGF0aHMpXSAoKSBtdXRhYmxlIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3Bw
CmluZGV4IDg1MzBlMzM1NWYyZDZiOGQ3ZmZiNmVkZjgzZDYwOGJjYTRiOWY1NTUuLjlhYjk5OGU0
MWNiMDhjZjBiNmY5MGYxMGYxM2M0Yjg0NTdlYzkzOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtMjA4NiwxMCArMjA4Niw4
IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmRyYXdCb3hTaWRlRnJvbVBhdGgoR3JhcGhp
Y3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgZ2FwTGVuZ3RoICs9
IChkYXNoTGVuZ3RoICAvIG51bWJlck9mR2Fwcyk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIERhc2hBcnJheSBsaW5lRGFzaDsKLSAgICAgICAgICAgIGxpbmVEYXNoLmFwcGVuZChkYXNo
TGVuZ3RoKTsKLSAgICAgICAgICAgIGxpbmVEYXNoLmFwcGVuZChnYXBMZW5ndGgpOwotICAgICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldExpbmVEYXNoKGxpbmVEYXNoLCBkYXNoTGVuZ3RoKTsK
KyAgICAgICAgICAgIGF1dG8gbGluZURhc2ggPSBEYXNoQXJyYXk6OmZyb20oZGFzaExlbmd0aCwg
Z2FwTGVuZ3RoKTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRMaW5lRGFzaChXVEZN
b3ZlKGxpbmVEYXNoKSwgZGFzaExlbmd0aCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IC8vIEZJWE1FOiBzdHJva2luZyB0aGUgYm9yZGVyIHBhdGggY2F1c2VzIGlzc3VlcyB3aXRoIHRp
Z2h0IGNvcm5lcnM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwCmluZGV4IDNhYTBmODVlYThkZjc0ODczZmFkYTJjYWM2YWRjZjQ2ZjAxODI3Mjku
LmY2ZWVjMjZiYjRhODUyMDk3YzdlZTQ5NDI3MTJjNDBlNjgxZDBiMTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC0xOTU2LDkgKzE5
NTYsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6Y29ubmVjdENsaXBwaW5nU3RhY2tMYXll
cnMoTGF5ZXJBbmNlc3RvckNsaXBwaW5nU3RhY2smCiAgICAgYXV0byYgY2xpcHBpbmdFbnRyeVN0
YWNrID0gY2xpcHBpbmdTdGFjay5zdGFjaygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBjbGlwcGluZ0VudHJ5U3RhY2suc2l6ZSgpIC0gMTsgKytpKSB7CiAgICAgICAgIGF1dG8mIGVu
dHJ5ID0gY2xpcHBpbmdFbnRyeVN0YWNrLmF0KGkpOwotICAgICAgICBWZWN0b3I8UmVmPEdyYXBo
aWNzTGF5ZXI+PiBjaGlsZHJlbjsKLSAgICAgICAgY2hpbGRyZW4uYXBwZW5kKCpjbGlwcGluZ0Vu
dHJ5U3RhY2suYXQoaSArIDEpLmNsaXBwaW5nTGF5ZXIpOwotICAgICAgICBlbnRyeS5jbGlwcGlu
Z0xheWVyLT5zZXRDaGlsZHJlbihXVEZNb3ZlKGNoaWxkcmVuKSk7CisgICAgICAgIGVudHJ5LmNs
aXBwaW5nTGF5ZXItPnNldENoaWxkcmVuKHsgUmVmIHsgKmNsaXBwaW5nRW50cnlTdGFjay5hdChp
ICsgMSkuY2xpcHBpbmdMYXllciB9IH0pOwogICAgIH0KIAogICAgIGNsaXBwaW5nRW50cnlTdGFj
ay5sYXN0KCkuY2xpcHBpbmdMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXggMGJl
MDM5YTBmMjNkNTdmZjdmNTdkOTkwOWI2NTM3NWEwMjQyNDNiNC4uMjNkNzM3MTM0Y2E4ZWFhMTYw
NWQwYzQ3N2FjZTYyODNmODQ2MjFiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTE0OTEsOSArMTQ5MSw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphZGp1c3RPdmVyZmxvd1Njcm9sbGJhckNvbnRhaW5lckxh
eWVycyhSZW5kZXJMYXllciYKICAgICAgICAgICAgIG92ZXJmbG93QmFja2luZy0+ZW5zdXJlT3Zl
cmZsb3dDb250cm9sc0hvc3RMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjaygmc3RhY2tpbmdDb250
ZXh0TGF5ZXIpOwogCiAgICAgICAgIGlmIChhdXRvKiBvdmVyZmxvd0NvbnRyb2xzQW5jZXN0b3JD
bGlwcGluZ1N0YWNrID0gb3ZlcmZsb3dCYWNraW5nLT5vdmVyZmxvd0NvbnRyb2xzSG9zdExheWVy
QW5jZXN0b3JDbGlwcGluZ1N0YWNrKCkpIHsKLSAgICAgICAgICAgIFZlY3RvcjxSZWY8R3JhcGhp
Y3NMYXllcj4+IGNoaWxkcmVuOwotICAgICAgICAgICAgY2hpbGRyZW4uYXBwZW5kKCpvdmVyZmxv
d0NvbnRhaW5lckxheWVyKTsKLSAgICAgICAgICAgIG92ZXJmbG93Q29udHJvbHNBbmNlc3RvckNs
aXBwaW5nU3RhY2stPmxhc3RDbGlwcGluZ0xheWVyKCktPnNldENoaWxkcmVuKFdURk1vdmUoY2hp
bGRyZW4pKTsKKyAgICAgICAgICAgIG92ZXJmbG93Q29udHJvbHNBbmNlc3RvckNsaXBwaW5nU3Rh
Y2stPmxhc3RDbGlwcGluZ0xheWVyKCktPnNldENoaWxkcmVuKHsgUmVmIHsgKm92ZXJmbG93Q29u
dGFpbmVyTGF5ZXIgfSB9KTsKICAgICAgICAgICAgIG92ZXJmbG93Q29udGFpbmVyTGF5ZXIgPSBv
dmVyZmxvd0NvbnRyb2xzQW5jZXN0b3JDbGlwcGluZ1N0YWNrLT5maXJzdENsaXBwaW5nTGF5ZXIo
KTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMu
bW0KaW5kZXggOWUxMDhmOGI0ZmYyNjE3OTY4OTY0ZmExMzcwMTUxOWJiYzI0NTJjNC4uODc2Njdk
ZTJkZWQyOTVkOTM1ODAyYjMzODkyYTBjMzIxYzdlMzJlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQpAQCAtMjczMSwxMCArMjczMSw5IEBAIHN0YXRpYyB2
b2lkIHBhaW50QXR0YWNobWVudFRpdGxlQmFja2dyb3VuZChjb25zdCBSZW5kZXJBdHRhY2htZW50
JiBhdHRhY2htZW50LCBHCiAgICAgaWYgKGxheW91dC5saW5lcy5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGJhY2tncm91bmRSZWN0czsKLQotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5b3V0LmxpbmVzLnNpemUoKTsgKytpKQotICAgICAg
ICBiYWNrZ3JvdW5kUmVjdHMuYXBwZW5kKGxheW91dC5saW5lc1tpXS5iYWNrZ3JvdW5kUmVjdCk7
CisgICAgYXV0byBiYWNrZ3JvdW5kUmVjdHMgPSBsYXlvdXQubGluZXMubWFwKFtdKGF1dG8mIGxp
bmUpIHsKKyAgICAgICAgcmV0dXJuIGxpbmUuYmFja2dyb3VuZFJlY3Q7CisgICAgfSk7CiAKICAg
ICBDb2xvciBiYWNrZ3JvdW5kQ29sb3I7CiAgICAgaWYgKGF0dGFjaG1lbnQuZnJhbWUoKS5zZWxl
Y3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggZmU1NTliZDcwYjFk
MGNmNGIxYzVhNWIxYzkwYTI5NjM1ZThiMjczMS4uOTI3NmI5M2M3MzEyNjFjMWYyZmZiZWM0OWYx
ZWNjZTczY2ExYmI1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC0xOTcsMTEgKzE5Nyw5IEBAIHN0YXRpYyB2b2lk
IHdyaXRlU1ZHU3Ryb2tlUGFpbnRpbmdSZXNvdXJjZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVu
ZGVyRWxlbWVudCYKICAgICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0aENvbnRleHQoJnNoYXBlKTsK
ICAgICBkb3VibGUgZGFzaE9mZnNldCA9IGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3Zn
U3R5bGUuc3Ryb2tlRGFzaE9mZnNldCgpKTsKICAgICBkb3VibGUgc3Ryb2tlV2lkdGggPSBsZW5n
dGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN0eWxlLnN0cm9rZVdpZHRoKCkpOwotICAgIGNvbnN0
IGF1dG8mIGRhc2hlcyA9IHN2Z1N0eWxlLnN0cm9rZURhc2hBcnJheSgpOwotCi0gICAgRGFzaEFy
cmF5IGRhc2hBcnJheTsKLSAgICBmb3IgKGF1dG8mIGxlbmd0aCA6IGRhc2hlcykKLSAgICAgICAg
ZGFzaEFycmF5LmFwcGVuZChsZW5ndGgudmFsdWUobGVuZ3RoQ29udGV4dCkpOworICAgIGF1dG8g
ZGFzaEFycmF5ID0gc3ZnU3R5bGUuc3Ryb2tlRGFzaEFycmF5KCkubWFwKFsmXShhdXRvJiBsZW5n
dGgpIC0+IERhc2hBcnJheUVsZW1lbnQgeworICAgICAgICByZXR1cm4gbGVuZ3RoLnZhbHVlKGxl
bmd0aENvbnRleHQpOworICAgIH0pOwogCiAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJvcGFj
aXR5Iiwgc3ZnU3R5bGUuc3Ryb2tlT3BhY2l0eSgpLCAxLjBmKTsKICAgICB3cml0ZUlmTm90RGVm
YXVsdCh0cywgInN0cm9rZSB3aWR0aCIsIHN0cm9rZVdpZHRoLCAxLjApOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuY3BwCmluZGV4IGE2M2ViODBhNzc5ZDc3
NjhkYTQ3NzJiYjBkNmFmZTE5ZTM1MjFiYmQuLjg0ODEzNmM4YTUzOGM2ZWM4ZWNjMTZkNWJmMDFi
ZmRlMmRkYjM5MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dENodW5rLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRD
aHVuay5jcHAKQEAgLTcwLDggKzcwLDcgQEAgU1ZHVGV4dENodW5rOjpTVkdUZXh0Q2h1bmsoY29u
c3QgVmVjdG9yPFNWR0lubGluZVRleHRCb3gqPiYgbGluZUxheW91dEJveGVzLCB1bnMKICAgICAg
ICAgfQogICAgIH0KIAotICAgIGZvciAodW5zaWduZWQgaSA9IGZpcnN0OyBpIDwgbGltaXQ7ICsr
aSkKLSAgICAgICAgbV9ib3hlcy5hcHBlbmQobGluZUxheW91dEJveGVzW2ldKTsKKyAgICBtX2Jv
eGVzLmFwcGVuZCgmbGluZUxheW91dEJveGVzW2ZpcnN0XSwgbGltaXQgLSBmaXJzdCk7CiB9CiAK
IHVuc2lnbmVkIFNWR1RleHRDaHVuazo6dG90YWxDaGFyYWN0ZXJzKCkgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29sbGVjdG9yLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29sbGVjdG9yLmNwcAppbmRleCAyMjk5ZjhjNjM3OWI1MDk0
OTJhMWExZmZhNTIzMDZhMWFhMTY4OWI0Li5lM2RjM2VmYmMyOWI2M2Q3NTIxNDlkYWNiMTEzMWZm
YTUyYWNjOTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9QYWdlUnVsZUNvbGxl
Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuY3Bw
CkBAIC04NCw4ICs4NCw5IEBAIHZvaWQgUGFnZVJ1bGVDb2xsZWN0b3I6Om1hdGNoUGFnZVJ1bGVz
KFJ1bGVTZXQqIHJ1bGVzLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGCiAKICAgICBzdGQ6OnN0
YWJsZV9zb3J0KG1hdGNoZWRQYWdlUnVsZXMuYmVnaW4oKSwgbWF0Y2hlZFBhZ2VSdWxlcy5lbmQo
KSwgY29tcGFyZVBhZ2VSdWxlcyk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0
Y2hlZFBhZ2VSdWxlcy5zaXplKCk7IGkrKykKLSAgICAgICAgbV9yZXN1bHQuYXV0aG9yRGVjbGFy
YXRpb25zLmFwcGVuZCh7ICZtYXRjaGVkUGFnZVJ1bGVzW2ldLT5wcm9wZXJ0aWVzKCkgfSk7Cisg
ICAgbV9yZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zLnJlc2VydmVDYXBhY2l0eShtX3Jlc3VsdC5h
dXRob3JEZWNsYXJhdGlvbnMuc2l6ZSgpICsgbWF0Y2hlZFBhZ2VSdWxlcy5zaXplKCkpOworICAg
IGZvciAoYXV0byogcGFnZVJ1bGUgOiBtYXRjaGVkUGFnZVJ1bGVzKQorICAgICAgICBtX3Jlc3Vs
dC5hdXRob3JEZWNsYXJhdGlvbnMudW5jaGVja2VkQXBwZW5kKHsgJnBhZ2VSdWxlLT5wcm9wZXJ0
aWVzKCkgfSk7CiB9CiAKIHN0YXRpYyBib29sIGNoZWNrUGFnZVNlbGVjdG9yQ29tcG9uZW50cyhj
b25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0
UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRC
dWlsZGVyLmNwcAppbmRleCA1NzUxODU5MTk3YjIyNmZjMjQ0YWY2YmMzMjA1ZmFkMjZlMDE3MDE5
Li5jZjE2NTIyMWNkNTNhM2M1YTc3YzZkOTgwODQzMjFjMTNmMjIyMzhkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0QnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwCkBAIC0zNzgsOCArMzc4LDkgQEAgdm9pZCBSdWxl
U2V0QnVpbGRlcjo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cG9wKGNvbnN0IE1lZGlhUXVlcnlTZXQq
IHNldCkKIAogICAgIGlmICghZHluYW1pY0NvbnRleHRTdGFjay5sYXN0KCkuYWZmZWN0ZWRSdWxl
UG9zaXRpb25zLmlzRW1wdHkoKSB8fCAhY29sbGVjdER5bmFtaWMpIHsKICAgICAgICAgUnVsZVNl
dDo6RHluYW1pY01lZGlhUXVlcnlSdWxlcyBydWxlczsKKyAgICAgICAgcnVsZXMubWVkaWFRdWVy
eVNldHMucmVzZXJ2ZUNhcGFjaXR5KHJ1bGVzLm1lZGlhUXVlcnlTZXRzLnNpemUoKSArIGR5bmFt
aWNDb250ZXh0U3RhY2suc2l6ZSgpKTsKICAgICAgICAgZm9yIChhdXRvJiBjb250ZXh0IDogZHlu
YW1pY0NvbnRleHRTdGFjaykKLSAgICAgICAgICAgIHJ1bGVzLm1lZGlhUXVlcnlTZXRzLmFwcGVu
ZChjb250ZXh0LnNldC5nZXQoKSk7CisgICAgICAgICAgICBydWxlcy5tZWRpYVF1ZXJ5U2V0cy51
bmNoZWNrZWRBcHBlbmQoY29udGV4dC5zZXQuZ2V0KCkpOwogCiAgICAgICAgIGlmIChjb2xsZWN0
RHluYW1pYykgewogICAgICAgICAgICAgcnVsZXMuYWZmZWN0ZWRSdWxlUG9zaXRpb25zLmFwcGVu
ZFZlY3RvcihkeW5hbWljQ29udGV4dFN0YWNrLmxhc3QoKS5hZmZlY3RlZFJ1bGVQb3NpdGlvbnMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaAppbmRleCAy
ZjgzNGRmNjdkODBjYjEzZGQ0YzkxNTUxYmFkMTJkYjFiMjNhMjQ5Li43NDY0Zjg0ZDhiZjZiMmIy
YTMzMTIzZDU5MmJlMjkyZjE0Y2MyOGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZUJ1aWxkZXJDb252ZXJ0ZXIuaApAQCAtMTY5NywxMyArMTY5NywxMiBAQCBpbmxpbmUgVmVjdG9y
PEF0b21TdHJpbmc+IEJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRDb250YWluZXJOYW1lKEJ1aWxk
ZXJTdGF0ZSYsCiAgICAgICAgIEFTU0VSVChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFs
dWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpOwogICAgICAgICByZXR1cm4geyB9OwogICAg
IH0KKyAgICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4odmFsdWUpKQorICAgICAgICByZXR1cm4geyB9
OwogCi0gICAgVmVjdG9yPEF0b21TdHJpbmc+IHJlc3VsdDsKLSAgICBpZiAoaXM8Q1NTVmFsdWVM
aXN0Pih2YWx1ZSkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogZG93bmNhc3Q8Q1NTVmFs
dWVMaXN0Pih2YWx1ZSkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPihpdGVtLmdldCgpKS5zdHJpbmdWYWx1ZSgpKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gV1RGOjptYXAoZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2
YWx1ZSksIFtdKGF1dG8mIGl0ZW0pIC0+IEF0b21TdHJpbmcgeworICAgICAgICByZXR1cm4gZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0uZ2V0KCkpLnN0cmluZ1ZhbHVlKCk7CisgICAg
fSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9S
ZW1vdGVNZWRpYVBsYXllclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRp
YS9SZW1vdGVNZWRpYVBsYXllclByb3h5LmNwcAppbmRleCBjZDJjNTFiYmQzMmUyOGMyZmU0MzQ2
ZTlmMjYzNTAxODllZWE2NjNiLi4yYTZiMWViMzY3ZTZjYzcyYzU3Mjg5YTUzYzY2OTI3ZjU1OWIx
MWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVk
aWFQbGF5ZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1Jl
bW90ZU1lZGlhUGxheWVyUHJveHkuY3BwCkBAIC04MDIsMTEgKzgwMiw5IEBAIGJvb2wgUmVtb3Rl
TWVkaWFQbGF5ZXJQcm94eTo6ZG9lc0hhdmVBdHRyaWJ1dGUoY29uc3QgQXRvbVN0cmluZyYsIEF0
b21TdHJpbmcqKSBjCiAjaWYgRU5BQkxFKEFWRl9DQVBUSU9OUykKIFZlY3RvcjxSZWZQdHI8UGxh
dGZvcm1UZXh0VHJhY2s+PiBSZW1vdGVNZWRpYVBsYXllclByb3h5OjpvdXRPZkJhbmRUcmFja1Nv
dXJjZXMoKQogewotICAgIFZlY3RvcjxSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2s+PiBzb3VyY2Vz
OwotICAgIGZvciAoYXV0byYgZGF0YSA6IG1fY29uZmlndXJhdGlvbi5vdXRPZkJhbmRUcmFja0Rh
dGEpCi0gICAgICAgIHNvdXJjZXMuYXBwZW5kKFBsYXRmb3JtVGV4dFRyYWNrOjpjcmVhdGUoV1RG
TW92ZShkYXRhKSkpOwotICAgIAotICAgIHJldHVybiBzb3VyY2VzOworICAgIHJldHVybiBXVEY6
Om1hcChtX2NvbmZpZ3VyYXRpb24ub3V0T2ZCYW5kVHJhY2tEYXRhLCBbXShhdXRvJiBkYXRhKSAt
PiBSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2s+IHsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVGV4
dFRyYWNrOjpjcmVhdGUoV1RGTW92ZShkYXRhKSk7CisgICAgfSk7CiB9CiAKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZVNvdXJjZUJ1ZmZl
clByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVTb3VyY2VC
dWZmZXJQcm94eS5jcHAKaW5kZXggMjc5MTY1ZGU2NmFhZmUwMjQ2ODFlMTYxYTAzNWM0YTEwOTU0
ZTZlMS4uYmJkMzBkOGU3MWMxOTQyNzFlYTAzYmFhMjJlMzUwNmRiYjIwNTA4NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZVNvdXJjZUJ1ZmZlclByb3h5
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlU291cmNlQnVm
ZmVyUHJveHkuY3BwCkBAIC03NSw5ICs3NSwxMCBAQCB2b2lkIFJlbW90ZVNvdXJjZUJ1ZmZlclBy
b3h5Ojpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudAog
CiAgICAgSW5pdGlhbGl6YXRpb25TZWdtZW50SW5mbyBzZWdtZW50SW5mbzsKICAgICBzZWdtZW50
SW5mby5kdXJhdGlvbiA9IHNlZ21lbnQuZHVyYXRpb247CisgICAgc2VnbWVudEluZm8uYXVkaW9U
cmFja3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzZWdtZW50LmF1ZGlvVHJhY2tzLnNpemUoKSk7
CiAgICAgZm9yIChhdXRvJiBhdWRpb1RyYWNrSW5mbyA6IHNlZ21lbnQuYXVkaW9UcmFja3MpIHsK
ICAgICAgICAgYXV0byBpZGVudGlmaWVyID0gbV9yZW1vdGVNZWRpYVBsYXllclByb3h5LT5hZGRS
ZW1vdGVBdWRpb1RyYWNrUHJveHkoKmF1ZGlvVHJhY2tJbmZvLnRyYWNrKTsKLSAgICAgICAgc2Vn
bWVudEluZm8uYXVkaW9UcmFja3MuYXBwZW5kKHsgTWVkaWFEZXNjcmlwdGlvbkluZm8oKmF1ZGlv
VHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwgaWRlbnRpZmllciB9KTsKKyAgICAgICAgc2VnbWVudElu
Zm8uYXVkaW9UcmFja3MudW5jaGVja2VkQXBwZW5kKHsgTWVkaWFEZXNjcmlwdGlvbkluZm8oKmF1
ZGlvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwgaWRlbnRpZmllciB9KTsKIAogICAgICAgICBBU1NF
UlQoIW1fdHJhY2tJZHMuY29udGFpbnMoaWRlbnRpZmllcikpOwogICAgICAgICBBU1NFUlQoIW1f
bWVkaWFEZXNjcmlwdGlvbnMuY29udGFpbnMoaWRlbnRpZmllcikpOwpAQCAtODUsOSArODYsMTAg
QEAgdm9pZCBSZW1vdGVTb3VyY2VCdWZmZXJQcm94eTo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJl
Y2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQKICAgICAgICAgbV9tZWRpYURlc2NyaXB0aW9ucy5h
ZGQoaWRlbnRpZmllciwgKmF1ZGlvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKTsKICAgICB9CiAKKyAg
ICBzZWdtZW50SW5mby52aWRlb1RyYWNrcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNlZ21lbnQu
dmlkZW9UcmFja3Muc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIHZpZGVvVHJhY2tJbmZvIDogc2Vn
bWVudC52aWRlb1RyYWNrcykgewogICAgICAgICBhdXRvIGlkZW50aWZpZXIgPSBtX3JlbW90ZU1l
ZGlhUGxheWVyUHJveHktPmFkZFJlbW90ZVZpZGVvVHJhY2tQcm94eSgqdmlkZW9UcmFja0luZm8u
dHJhY2spOwotICAgICAgICBzZWdtZW50SW5mby52aWRlb1RyYWNrcy5hcHBlbmQoeyBNZWRpYURl
c2NyaXB0aW9uSW5mbygqdmlkZW9UcmFja0luZm8uZGVzY3JpcHRpb24pLCBpZGVudGlmaWVyIH0p
OworICAgICAgICBzZWdtZW50SW5mby52aWRlb1RyYWNrcy51bmNoZWNrZWRBcHBlbmQoeyBNZWRp
YURlc2NyaXB0aW9uSW5mbygqdmlkZW9UcmFja0luZm8uZGVzY3JpcHRpb24pLCBpZGVudGlmaWVy
IH0pOwogCiAgICAgICAgIEFTU0VSVCghbV90cmFja0lkcy5jb250YWlucyhpZGVudGlmaWVyKSk7
CiAgICAgICAgIEFTU0VSVCghbV9tZWRpYURlc2NyaXB0aW9ucy5jb250YWlucyhpZGVudGlmaWVy
KSk7CkBAIC05NSw5ICs5NywxMCBAQCB2b2lkIFJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5Ojpzb3Vy
Y2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudAogICAgICAgICBt
X21lZGlhRGVzY3JpcHRpb25zLmFkZChpZGVudGlmaWVyLCAqdmlkZW9UcmFja0luZm8uZGVzY3Jp
cHRpb24pOwogICAgIH0KIAorICAgIHNlZ21lbnRJbmZvLnRleHRUcmFja3MucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShzZWdtZW50LnRleHRUcmFja3Muc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIHRl
eHRUcmFja0luZm8gOiBzZWdtZW50LnRleHRUcmFja3MpIHsKICAgICAgICAgYXV0byBpZGVudGlm
aWVyID0gbV9yZW1vdGVNZWRpYVBsYXllclByb3h5LT5hZGRSZW1vdGVUZXh0VHJhY2tQcm94eSgq
dGV4dFRyYWNrSW5mby50cmFjayk7Ci0gICAgICAgIHNlZ21lbnRJbmZvLnRleHRUcmFja3MuYXBw
ZW5kKHsgTWVkaWFEZXNjcmlwdGlvbkluZm8oKnRleHRUcmFja0luZm8uZGVzY3JpcHRpb24pLCBp
ZGVudGlmaWVyIH0pOworICAgICAgICBzZWdtZW50SW5mby50ZXh0VHJhY2tzLnVuY2hlY2tlZEFw
cGVuZCh7IE1lZGlhRGVzY3JpcHRpb25JbmZvKCp0ZXh0VHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwg
aWRlbnRpZmllciB9KTsKIAogICAgICAgICBBU1NFUlQoIW1fdHJhY2tJZHMuY29udGFpbnMoaWRl
bnRpZmllcikpOwogICAgICAgICBBU1NFUlQoIW1fbWVkaWFEZXNjcmlwdGlvbnMuY29udGFpbnMo
aWRlbnRpZmllcikpOwpAQCAtMzM4LDE2ICszNDEsMTEgQEAgdm9pZCBSZW1vdGVTb3VyY2VCdWZm
ZXJQcm94eTo6c2Vla1RvVGltZShjb25zdCBNZWRpYVRpbWUmIG1lZGlhVGltZSkKIAogdm9pZCBS
ZW1vdGVTb3VyY2VCdWZmZXJQcm94eTo6dXBkYXRlVHJhY2tJZHMoVmVjdG9yPHN0ZDo6cGFpcjxU
cmFja1ByaXZhdGVSZW1vdGVJZGVudGlmaWVyLCBUcmFja1ByaXZhdGVSZW1vdGVJZGVudGlmaWVy
Pj4mJiBpZGVudGlmaWVyUGFpcnMpCiB7Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxBdG9tU3RyaW5n
LCBBdG9tU3RyaW5nPj4gdHJhY2tJZFBhaXJzOwotCi0gICAgZm9yIChhdXRvJiBpZGVudGlmaWVy
UGFpciA6IGlkZW50aWZpZXJQYWlycykgeworICAgIGF1dG8gdHJhY2tJZFBhaXJzID0gaWRlbnRp
ZmllclBhaXJzLm1hcChbJl0oYXV0byYgaWRlbnRpZmllclBhaXIpIHsKICAgICAgICAgQVNTRVJU
KG1fdHJhY2tJZHMuY29udGFpbnMoaWRlbnRpZmllclBhaXIuZmlyc3QpKTsKICAgICAgICAgQVNT
RVJUKG1fdHJhY2tJZHMuY29udGFpbnMoaWRlbnRpZmllclBhaXIuc2Vjb25kKSk7Ci0KLSAgICAg
ICAgYXV0byBvbGRJZCA9IG1fdHJhY2tJZHMudGFrZShpZGVudGlmaWVyUGFpci5maXJzdCk7Ci0g
ICAgICAgIGF1dG8gbmV3SWQgPSBtX3RyYWNrSWRzLmdldChpZGVudGlmaWVyUGFpci5zZWNvbmQp
OwotICAgICAgICB0cmFja0lkUGFpcnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG9sZElkLCBuZXdJ
ZCkpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIHN0ZDo6cGFpciB7IG1fdHJhY2tJZHMudGFrZShp
ZGVudGlmaWVyUGFpci5maXJzdCksIG1fdHJhY2tJZHMuZ2V0KGlkZW50aWZpZXJQYWlyLnNlY29u
ZCkgfTsKKyAgICB9KTsKIAogICAgIGlmICghdHJhY2tJZFBhaXJzLmlzRW1wdHkoKSkKICAgICAg
ICAgbV9zb3VyY2VCdWZmZXJQcml2YXRlLT51cGRhdGVUcmFja0lkcyhXVEZNb3ZlKHRyYWNrSWRQ
YWlycykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNw
cAppbmRleCA3MGI1YWZkYTUyNmU5OTA5Yjk2MmQ3MTIxM2Q4NWI2MGI1MzcxODFkLi5lODc2ZWMz
Nzc3MWZmNDAwY2FhODM0Y2VmYWU5NTYyNTRjYzNmZDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcApAQCAtODUzLDkgKzg1Myw3IEBAIHZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3Rpbmco
Y29uc3QgUmVnaXN0cmFibGVECiAKICAgICAgICAgICAgIHN0YXRpc3RpYy5zdWJmcmFtZVVuZGVy
VG9wRnJhbWVEb21haW5zID0gV1RGTW92ZSh0b3BGcmFtZURvbWFpbnMpOwogCi0gICAgICAgICAg
ICBWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4gc3RhdGlzdGljczsKLSAgICAgICAgICAg
IHN0YXRpc3RpY3MuYXBwZW5kKFdURk1vdmUoc3RhdGlzdGljKSk7Ci0gICAgICAgICAgICBtX3N0
YXRpc3RpY3NTdG9yZS0+bWVyZ2VTdGF0aXN0aWNzKFdURk1vdmUoc3RhdGlzdGljcykpOworICAg
ICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPm1lcmdlU3RhdGlzdGljcyhWZWN0b3I8UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcz46OmZyb20oV1RGTW92ZShzdGF0aXN0aWMpKSk7CiAgICAgICAgIH0K
ICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAg
fSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3Bw
CmluZGV4IGY0ZjhhNGM0ZjRhZjk2YWY2ODk0MmM1YzZjOTg5MmZmN2UxOTkzZjEuLjRhOGIwZWRh
MDliZjA1ODk4YTNiOGIyMmM5MDhiNDdiMjhlYjljODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC0xMzgwLDEwICsxMzgwLDkgQEAg
c3RhdGljIHZvaWQgZmV0Y2hEaXNrQ2FjaGVFbnRyaWVzKE5ldHdvcmtDYWNoZTo6Q2FjaGUqIGNh
Y2hlLCBQQUw6OlNlc3Npb25JRCBzZXMKICAgICBIYXNoTWFwPFNlY3VyaXR5T3JpZ2luRGF0YSwg
dWludDY0X3Q+IG9yaWdpbnNBbmRTaXplczsKICAgICBjYWNoZS0+dHJhdmVyc2UoW2ZldGNoT3B0
aW9ucywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgb3Jp
Z2luc0FuZFNpemVzID0gV1RGTW92ZShvcmlnaW5zQW5kU2l6ZXMpXShhdXRvKiB0cmF2ZXJzYWxF
bnRyeSkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghdHJhdmVyc2FsRW50cnkpIHsKLSAgICAgICAg
ICAgIFZlY3RvcjxXZWJzaXRlRGF0YTo6RW50cnk+IGVudHJpZXM7Ci0KLSAgICAgICAgICAgIGZv
ciAoYXV0byYgb3JpZ2luQW5kU2l6ZSA6IG9yaWdpbnNBbmRTaXplcykKLSAgICAgICAgICAgICAg
ICBlbnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW5BbmRTaXplLmtleSwg
V2Vic2l0ZURhdGFUeXBlOjpEaXNrQ2FjaGUsIG9yaWdpbkFuZFNpemUudmFsdWUgfSk7CisgICAg
ICAgICAgICBhdXRvIGVudHJpZXMgPSBXVEY6Om1hcChvcmlnaW5zQW5kU2l6ZXMsIFtdKGF1dG8m
IG9yaWdpbkFuZFNpemUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGE6OkVu
dHJ5IHsgb3JpZ2luQW5kU2l6ZS5rZXksIFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlLCBvcmln
aW5BbmRTaXplLnZhbHVlIH07CisgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpLCBlbnRyaWVzID0gV1RGTW92ZShlbnRyaWVzKV0gKCkgbXV0YWJsZSB7CiAgICAg
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZW50cmllcyk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05vdGlmaWNhdGlvbnMvTmV0d29ya05vdGlmaWNhdGlv
bk1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Ob3RpZmljYXRpb25z
L05ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2VyLmNwcAppbmRleCA0ODZjYjViM2RmNjcwMGU4ODAz
ZjYwMDk5Y2EzNTdlZjBkMmJhODQxLi45NzdiODk3NjdiNzhlNWUzYTg4OGM4MTI4NTY2ZTQ1ODJj
YTY2ZjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05vdGlmaWNh
dGlvbnMvTmV0d29ya05vdGlmaWNhdGlvbk1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTm90aWZpY2F0aW9ucy9OZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlci5j
cHAKQEAgLTgxLDkgKzgxLDkgQEAgdm9pZCBOZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlcjo6ZGVs
ZXRlUHVzaEFuZE5vdGlmaWNhdGlvblJlZ2lzdHJhdGlvbihjb25zdCBTZWMKIHZvaWQgTmV0d29y
a05vdGlmaWNhdGlvbk1hbmFnZXI6OmdldE9yaWdpbnNXaXRoUHVzaEFuZE5vdGlmaWNhdGlvblBl
cm1pc3Npb25zKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9yPFNlY3VyaXR5T3Jp
Z2luRGF0YT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiByZXBseUhhbmRsZXIgPSBbY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKFZlY3RvcjxTdHJpbmc+IG9yaWdpblN0
cmluZ3MpIG11dGFibGUgewotICAgICAgICBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmln
aW5zOwotICAgICAgICBmb3IgKGF1dG8mIG9yaWdpblN0cmluZyA6IG9yaWdpblN0cmluZ3MpCi0g
ICAgICAgICAgICBvcmlnaW5zLmFwcGVuZChTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21VUkwoeyB7
IH0sIG9yaWdpblN0cmluZyB9KSk7CisgICAgICAgIGF1dG8gb3JpZ2lucyA9IG9yaWdpblN0cmlu
Z3MubWFwKFtdKGF1dG8mIG9yaWdpblN0cmluZykgeworICAgICAgICAgICAgcmV0dXJuIFNlY3Vy
aXR5T3JpZ2luRGF0YTo6ZnJvbVVSTCh7IHsgfSwgb3JpZ2luU3RyaW5nIH0pOworICAgICAgICB9
KTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShvcmlnaW5zKSk7CiAgICAgfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0
b3JhZ2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFn
ZS9TdG9yYWdlTWFuYWdlci5jcHAKaW5kZXggY2I5MDFiNmM1OGIxODU5YWU4YmUyYWQ5ZGE5MDAy
ZDgyMmI4MDYxMi4uN2UyZDM3N2ExYmY4NjJkOGExNjk1ZWQ5NWJiMDVhZWNjNDNkY2QxZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VN
YW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2Uv
U3RvcmFnZU1hbmFnZXIuY3BwCkBAIC0yOTUsMjAgKzI5NSwxNCBAQCBWZWN0b3I8U3RvcmFnZUFy
ZWFJZGVudGlmaWVyPiBTdG9yYWdlTWFuYWdlcjo6YWxsU3RvcmFnZUFyZWFJZGVudGlmaWVycygp
IGNvbnN0CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBWZWN0b3I8U3Rv
cmFnZUFyZWFJZGVudGlmaWVyPiBpZGVudGlmaWVyczsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGxv
Y2FsU3RvcmFnZU5hbWVzcGFjZSA6IG1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkg
ewotICAgICAgICBmb3IgKGF1dG8ga2V5IDogbG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdl
QXJlYUlkZW50aWZpZXJzKCkpCi0gICAgICAgICAgICBpZGVudGlmaWVycy5hcHBlbmQoa2V5KTsK
LSAgICB9CisgICAgZm9yIChjb25zdCBhdXRvJiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UgOiBtX2xv
Y2FsU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpCisgICAgICAgIGlkZW50aWZpZXJzLmFwcGVu
ZFZlY3Rvcihsb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VBcmVhSWRlbnRpZmllcnMoKSk7
CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYXNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlIDog
bV90cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKSB7Ci0gICAgICAgIGZv
ciAoYXV0byBrZXkgOiB0cmFzaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZUFyZWFJ
ZGVudGlmaWVycygpKQotICAgICAgICAgICAgaWRlbnRpZmllcnMuYXBwZW5kKGtleSk7Ci0gICAg
fQorICAgIGZvciAoY29uc3QgYXV0byYgdHJhc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UgOiBt
X3RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpCisgICAgICAgIGlkZW50
aWZpZXJzLmFwcGVuZFZlY3Rvcih0cmFzaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFn
ZUFyZWFJZGVudGlmaWVycygpKTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgc2Vzc2lvblN0b3Jh
Z2VOYW1lc3BhY2UgOiBtX3Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkgewotICAg
ICAgICBmb3IgKGF1dG8ga2V5IDogc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VBcmVh
SWRlbnRpZmllcnMoKSkKLSAgICAgICAgICAgIGlkZW50aWZpZXJzLmFwcGVuZChrZXkpOwotICAg
IH0KKyAgICBmb3IgKGNvbnN0IGF1dG8mIHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlIDogbV9zZXNz
aW9uU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpCisgICAgICAgIGlkZW50aWZpZXJzLmFwcGVu
ZFZlY3RvcihzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZUFyZWFJZGVudGlmaWVycygp
KTsKIAogICAgIHJldHVybiBpZGVudGlmaWVyczsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9UcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3Bh
Y2UuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1RyYW5zaWVu
dExvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHAKaW5kZXggZWVlYzU1MGVlZjYzYWU1OWExZWFiM2Fh
OGE0OTdhMzJjMTA1MDYyNC4uZmI5OGVkMzk0ODA5MTYwNjg3MTcyNmFlMDg2ZDUxZjE1MTJkNDQw
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1Ry
YW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHAK
QEAgLTU1LDE0ICs1NSwxMSBAQCBTdG9yYWdlQXJlYSYgVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFt
ZXNwYWNlOjpnZXRPckNyZWF0ZVN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZwogVmVjdG9yPFNlY3Vy
aXR5T3JpZ2luRGF0YT4gVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpvcmlnaW5zKCkg
Y29uc3QKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBWZWN0b3I8U2Vj
dXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBzdG9yYWdl
QXJlYSA6IG1fc3RvcmFnZUFyZWFNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKCFzdG9yYWdl
QXJlYS0+aXRlbXMoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBvcmlnaW5zLmFwcGVuZChzdG9y
YWdlQXJlYS0+c2VjdXJpdHlPcmlnaW4oKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG9yaWdpbnM7
CisgICAgcmV0dXJuIFdURjo6Y29tcGFjdE1hcChtX3N0b3JhZ2VBcmVhTWFwLCBbXShhdXRvJiBl
bnRyeSkgLT4gc3RkOjpvcHRpb25hbDxTZWN1cml0eU9yaWdpbkRhdGE+IHsKKyAgICAgICAgaWYg
KGVudHJ5LnZhbHVlLT5pdGVtcygpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBlbnRyeS52YWx1ZS0+c2VjdXJpdHlPcmlnaW4oKTsK
KyAgICB9KTsKIH0KIAogdm9pZCBUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmNsZWFy
U3RvcmFnZUFyZWFzTWF0Y2hpbmdPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBzZWN1
cml0eU9yaWdpbikKQEAgLTgyLDEwICs3OSw5IEBAIHZvaWQgVHJhbnNpZW50TG9jYWxTdG9yYWdl
TmFtZXNwYWNlOjpjbGVhckFsbFN0b3JhZ2VBcmVhcygpCiAKIFZlY3RvcjxTdG9yYWdlQXJlYUlk
ZW50aWZpZXI+IFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6c3RvcmFnZUFyZWFJZGVu
dGlmaWVycygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFN0b3JhZ2VBcmVhSWRlbnRpZmllcj4gaWRl
bnRpZmllcnM7Ci0gICAgZm9yIChhdXRvJiBzdG9yYWdlQXJlYSA6IG1fc3RvcmFnZUFyZWFNYXAu
dmFsdWVzKCkpCi0gICAgICAgIGlkZW50aWZpZXJzLmFwcGVuZChzdG9yYWdlQXJlYS0+aWRlbnRp
ZmllcigpKTsKLSAgICByZXR1cm4gaWRlbnRpZmllcnM7CisgICAgcmV0dXJuIFdURjo6bWFwKG1f
c3RvcmFnZUFyZWFNYXAsIFtdKGF1dG8mIGVudHJ5KSB7CisgICAgICAgIHJldHVybiBlbnRyeS52
YWx1ZS0+aWRlbnRpZmllcigpOworICAgIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9y
YWdlRW5naW5lQ2FjaGUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9D
YWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAKaW5kZXggZGE5Y2I4YTVkY2MwZWQ3ZjlmNGMyZTNk
MmYyNzY4OTRhMDFlZDE3NC4uMTQ0MGUxOGFmYTlkNjBhNGVkMTVlYTgwMzRhZDVmYTVmZDk2ZTNl
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0
b3JhZ2VFbmdpbmVDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAKQEAgLTIwOSw4ICsyMDksOSBAQCB2b2lk
IENhY2hlOjpmaW5pc2hPcGVuaW5nKENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrLCBzdGQ6
Om9wdGlvbmFsPEVycm9yPiYmCiB7CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
UmVjb3JkSW5mb3JtYXRpb24+PiByZWNvcmRzOwogICAgIGZvciAoYXV0byYgdmFsdWUgOiBtX3Jl
Y29yZHMudmFsdWVzKCkpIHsKKyAgICAgICAgcmVjb3Jkcy5yZXNlcnZlQ2FwYWNpdHkocmVjb3Jk
cy5jYXBhY2l0eSgpICsgdmFsdWUuc2l6ZSgpKTsKICAgICAgICAgZm9yIChhdXRvJiByZWNvcmQg
OiB2YWx1ZSkKLSAgICAgICAgICAgIHJlY29yZHMuYXBwZW5kKHJlY29yZCk7CisgICAgICAgICAg
ICByZWNvcmRzLnVuY2hlY2tlZEFwcGVuZChyZWNvcmQpOwogICAgIH0KICAgICBzdGQ6OnNvcnQo
cmVjb3Jkcy5iZWdpbigpLCByZWNvcmRzLmVuZCgpLCBbJl0oY29uc3QgYXV0byYgYSwgY29uc3Qg
YXV0byYgYikgewogICAgICAgICByZXR1cm4gYS5nZXQoKS5pbnNlcnRpb25UaW1lIDwgYi5nZXQo
KS5pbnNlcnRpb25UaW1lOwpAQCAtNjgyLDggKzY4Myw5IEBAIFZlY3RvcjxLZXk+IENhY2hlOjpr
ZXlzKCkgY29uc3QKIHsKICAgICBWZWN0b3I8S2V5PiBrZXlzOwogICAgIGZvciAoYXV0byYgcmVj
b3JkcyA6IG1fcmVjb3Jkcy52YWx1ZXMoKSkgeworICAgICAgICBrZXlzLnJlc2VydmVDYXBhY2l0
eShrZXlzLmNhcGFjaXR5KCkgKyByZWNvcmRzLnNpemUoKSk7CiAgICAgICAgIGZvciAoYXV0byYg
cmVjb3JkIDogcmVjb3JkcykKLSAgICAgICAgICAgIGtleXMuYXBwZW5kKHJlY29yZC5rZXkpOwor
ICAgICAgICAgICAga2V5cy51bmNoZWNrZWRBcHBlbmQocmVjb3JkLmtleSk7CiAgICAgfQogICAg
IHJldHVybiBrZXlzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHAKaW5kZXggNDA5YTMzODhhMGI4ZWNm
OWFiNzEwNDliNzI5ZmRlMzkyN2M0OGViNS4uNDEzNjk0NGI1ZmY4NWVmMjNmY2VlNDdlZWQ4MzJm
MWVkMGI2MDQ3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9y
YWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuY3BwCkBAIC02OSw4ICs2OSw5IEBAIFNRTGl0
ZVN0b3JhZ2VBcmVhOjpTUUxpdGVTdG9yYWdlQXJlYSh1bnNpZ25lZCBxdW90YSwgY29uc3QgV2Vi
Q29yZTo6Q2xpZW50T3JpZ2luCiB7CiAgICAgQVNTRVJUKCFpc01haW5SdW5Mb29wKCkpOwogCisg
ICAgbV9jYWNoZWRTdGF0ZW1lbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc3RhdGljX2Nhc3Q8
c2l6ZV90PihTdGF0ZW1lbnRUeXBlOjpJbnZhbGlkKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KFN0YXRlbWVudFR5cGU6OkludmFsaWQpOyArK2kpCi0g
ICAgICAgIG1fY2FjaGVkU3RhdGVtZW50cy5hcHBlbmQobnVsbHB0cik7CisgICAgICAgIG1fY2Fj
aGVkU3RhdGVtZW50cy51bmNoZWNrZWRBcHBlbmQobnVsbHB0cik7CiB9CiAKIHZvaWQgU1FMaXRl
U3RvcmFnZUFyZWE6OmNsb3NlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
SVBDL0FyZ3VtZW50Q29kZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVu
dENvZGVycy5oCmluZGV4IDcxZTUyMjhiZjYwODVmZWZlMDI3OGU2YjFhZjM1NTU5Mzk3OGI4ZjYu
LmUyNDczYWZjYTdjNTkwODY5MjQ5OWRkOTgwYTIzMGVhMmVlYjRmMjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaApAQCAtNDQ1LDcgKzQ0NSw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZs
b3dIYW5kbGVyLCBzaXplX3QgbWluCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKICAgICAgICAgICAgIHZlY3Rvci5hcHBlbmQoV1RGTW92ZSgqZWxlbWVudCkpOwogICAgICAg
ICB9Ci0gICAgICAgIHZlY3Rvci5zaHJpbmtUb0ZpdCgpOworICAgICAgICBBU1NFUlQodmVjdG9y
LmNhcGFjaXR5KCkgPT0gdmVjdG9yLnNpemUoKSk7CiAgICAgICAgIHJldHVybiB2ZWN0b3I7CiAg
ICAgfQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FwcGxlUGF5L1dlYlBh
eW1lbnRDb29yZGluYXRvclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FwcGxlUGF5
L1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5LmNwcAppbmRleCAwNGE2OTY4MTc4YTZmNzU5NGMy
ODBlZjczMTgxOThjYjYzMmI5MjMwLi5iY2NjMDU1MDc3MTc3OTc2NjhmOWM5ZGNmMTAzMTA5MTEx
Yjk4YWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BcHBsZVBheS9XZWJQYXlt
ZW50Q29vcmRpbmF0b3JQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQXBwbGVQ
YXkvV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkuY3BwCkBAIC05Myw5ICs5Myw5IEBAIHZvaWQg
V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OnNob3dQYXltZW50VUkoV2ViQ29yZTo6UGFnZUlk
ZW50aWZpZXIgZGVzdGluYXRpCiAKICAgICBVUkwgb3JpZ2luYXRpbmdVUkwoVVJMKCksIG9yaWdp
bmF0aW5nVVJMU3RyaW5nKTsKIAotICAgIFZlY3RvcjxVUkw+IGxpbmtJY29uVVJMczsKLSAgICBm
b3IgKGNvbnN0IGF1dG8mIGxpbmtJY29uVVJMU3RyaW5nIDogbGlua0ljb25VUkxTdHJpbmdzKQot
ICAgICAgICBsaW5rSWNvblVSTHMuYXBwZW5kKFVSTChVUkwoKSwgbGlua0ljb25VUkxTdHJpbmcp
KTsKKyAgICBhdXRvIGxpbmtJY29uVVJMcyA9IGxpbmtJY29uVVJMU3RyaW5ncy5tYXAoW10oYXV0
byYgbGlua0ljb25VUkxTdHJpbmcpIHsKKyAgICAgICAgcmV0dXJuIFVSTChVUkwoKSwgbGlua0lj
b25VUkxTdHJpbmcpOworICAgIH0pOwogCiAgICAgcGxhdGZvcm1TaG93UGF5bWVudFVJKHdlYlBh
Z2VQcm94eUlELCBvcmlnaW5hdGluZ1VSTCwgbGlua0ljb25VUkxzLCBwYXltZW50UmVxdWVzdCwg
W3RoaXMsIHdlYWtUaGlzID0gV2Vha1B0ciB7ICp0aGlzIH1dKGJvb2wgcmVzdWx0KSB7CiAgICAg
ICAgIGlmICghd2Vha1RoaXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJTmF2aWdhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTmF2
aWdhdGlvbi5jcHAKaW5kZXggODg0NjZjNDllZDBkZTE4ZTIwMzJjYWEwYTA0NjQ4MzllYTc0NTEw
MS4uNGE4ODkwMzllOTRhNjJmYTU5MmYxOTU3Zjc2ZDg1OWU3OWM5ZmM2ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uLmNwcApAQCAtNjIsMTAgKzYyLDEw
IEBAIE5hdmlnYXRpb246Ok5hdmlnYXRpb24oV2ViTmF2aWdhdGlvblN0YXRlJiBzdGF0ZSwgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVxCiAgICAgOiBtX25hdmlnYXRpb25JRChzdGF0ZS5n
ZW5lcmF0ZU5hdmlnYXRpb25JRCgpKQogICAgICwgbV9vcmlnaW5hbFJlcXVlc3QoV1RGTW92ZShy
ZXF1ZXN0KSkKICAgICAsIG1fY3VycmVudFJlcXVlc3QobV9vcmlnaW5hbFJlcXVlc3QpCisgICAg
LCBtX3JlZGlyZWN0Q2hhaW4geyBtX29yaWdpbmFsUmVxdWVzdC51cmwoKSB9CiAgICAgLCBtX2Zy
b21JdGVtKGZyb21JdGVtKQogICAgICwgbV9jbGllbnROYXZpZ2F0aW9uQWN0aXZpdHkobmF2aWdh
dGlvbkFjdGl2aXR5VGltZW91dCkKIHsKLSAgICBtX3JlZGlyZWN0Q2hhaW4uYXBwZW5kKG1fb3Jp
Z2luYWxSZXF1ZXN0LnVybCgpKTsKIH0KIAogTmF2aWdhdGlvbjo6TmF2aWdhdGlvbihXZWJOYXZp
Z2F0aW9uU3RhdGUmIHN0YXRlLCBXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiB0YXJnZXRJdGVtLCBX
ZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBmcm9tSXRlbSwgRnJhbWVMb2FkVHlwZSBiYWNrRm9yd2Fy
ZEZyYW1lTG9hZFR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9XS1NoYXJlU2hlZXQubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NoYXJl
U2hlZXQubW0KaW5kZXggZTM0ZDU3MGE1OWJlYzI2ZmJmNmJlM2E2ZGY2NDZlNTA5YWVmMTYzMy4u
NzVlMjgzNDUxM2UxOGI1YWY2YjUyMjQ3MmIzODc5ZDlkNzExN2IxZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tTaGFyZVNoZWV0Lm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2hhcmVTaGVldC5tbQpAQCAtOTYsOSArOTYsOSBAQCBz
dGF0aWMgdm9pZCBhcHBlbmRGaWxlc0FzU2hhcmVhYmxlVVJMcyhSZXRhaW5QdHI8TlNNdXRhYmxl
QXJyYXk+JiYgc2hhcmVEYXRhQXJyYQogICAgICAgICBTdHJpbmcgZmlsZU5hbWU7CiAgICAgICAg
IFJldGFpblB0cjxOU0RhdGE+IGZpbGVEYXRhOwogICAgIH07Ci0gICAgVmVjdG9yPEZpbGVXcml0
ZVRhc2s+IGZpbGVXcml0ZVRhc2tzOwotICAgIGZvciAoYXV0byYgZmlsZSA6IGZpbGVzKQotICAg
ICAgICBmaWxlV3JpdGVUYXNrcy5hcHBlbmQoeyBmaWxlLmZpbGVOYW1lLmlzb2xhdGVkQ29weSgp
LCBmaWxlLmZpbGVEYXRhLT5jcmVhdGVOU0RhdGEoKSB9KTsKKyAgICBhdXRvIGZpbGVXcml0ZVRh
c2tzID0gZmlsZXMubWFwKFtdKGF1dG8mIGZpbGUpIHsKKyAgICAgICAgcmV0dXJuIEZpbGVXcml0
ZVRhc2sgeyBmaWxlLmZpbGVOYW1lLmlzb2xhdGVkQ29weSgpLCBmaWxlLmZpbGVEYXRhLT5jcmVh
dGVOU0RhdGEoKSB9OworICAgIH0pOwogCiAgICAgYXV0byBxdWV1ZSA9IFdvcmtRdWV1ZTo6Y3Jl
YXRlKCJjb20uYXBwbGUuV2ViS2l0LldLU2hhcmVTaGVldC5TaGFyZWFibGVGaWxlV3JpdGVyIik7
CiAgICAgcXVldWUtPmRpc3BhdGNoKFtzaGFyZURhdGFBcnJheSA9IFdURk1vdmUoc2hhcmVEYXRh
QXJyYXkpLCBmaWxlV3JpdGVUYXNrcyA9IFdURk1vdmUoZmlsZVdyaXRlVGFza3MpLCB0ZW1wb3Jh
cnlEaXJlY3RvcnkgPSByZXRhaW5QdHIodGVtcG9yYXJ5RGlyZWN0b3J5KSwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KaW5kZXgg
MzlhOGM4N2ExM2Y5MWQ2ZWE4OWIwNzY4NGUwMmM0YWE1ODU3ZjIxZC4uNmFlYThkNGM1NTVmN2Ez
MGEyNzA5M2I2YWEwYjljNDBhMDkzNDQxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KQEAgLTY2MiwxNCArNjYyLDEyIEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpyZXN0b3JlQXBwSGlnaGxpZ2h0c0FuZFNjcm9sbFRvSW5kZXgoY29u
c3QgVmVjdG9yPFJlZjxTaGFyZWRNCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8U2hhcmVkTWVtb3J5OjpJUENIYW5kbGU+IG1lbW9y
eUhhbmRsZXM7Ci0KLSAgICBmb3IgKGF1dG8gaGlnaGxpZ2h0IDogaGlnaGxpZ2h0cykgeworICAg
IGF1dG8gbWVtb3J5SGFuZGxlcyA9IFdURjo6Y29tcGFjdE1hcChoaWdobGlnaHRzLCBbXShhdXRv
JiBoaWdobGlnaHQpIC0+IHN0ZDo6b3B0aW9uYWw8U2hhcmVkTWVtb3J5OjpJUENIYW5kbGU+IHsK
ICAgICAgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwotICAgICAgICBoaWdobGlnaHQt
PmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkp
OwotCi0gICAgICAgIG1lbW9yeUhhbmRsZXMuYXBwZW5kKFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxl
IHsgV1RGTW92ZShoYW5kbGUpLCBoaWdobGlnaHQtPnNpemUoKSB9KTsKLSAgICB9CisgICAgICAg
IGlmICghaGlnaGxpZ2h0LT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3Rl
Y3Rpb246OlJlYWRPbmx5KSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
ICAgIHJldHVybiBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSB7IFdURk1vdmUoaGFuZGxlKSwgaGln
aGxpZ2h0LT5zaXplKCkgfTsKKyAgICB9KTsKICAgICAKICAgICBzZXRVcEhpZ2hsaWdodHNPYnNl
cnZlcigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9GcmFtZUxvYWRT
dGF0ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9GcmFtZUxvYWRTdGF0ZS5jcHAKaW5k
ZXggYzYxYmVkODFkMDkyODQ2MzJiZjI5NjVlZDJjOTliMGM2ZmU0MDFhMy4uNjllNTNkN2JlYjg2
Y2U2YjQwNmYzY2RiODM5MmFiNzJhM2ZmYzgyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0ZyYW1lTG9hZFN0YXRlLmNwcApAQCAtOTAsMTEgKzkwLDggQEAgdm9pZCBGcmFtZUxvYWRTdGF0
ZTo6ZGlkRmluaXNoTG9hZCgpCiAKICAgICBtX3N0YXRlID0gU3RhdGU6OkZpbmlzaGVkOwogCi0g
ICAgVmVjdG9yPE9ic2VydmVyKj4gb2JzZXJ2ZXJzQ29weTsKLSAgICBmb3IgKGF1dG8mIG9ic2Vy
dmVyIDogbV9vYnNlcnZlcnMpCi0gICAgICAgIG9ic2VydmVyc0NvcHkuYXBwZW5kKCZvYnNlcnZl
cik7Ci0gICAgZm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVyc0NvcHkpCi0gICAgICAgIG9i
c2VydmVyLT5kaWRGaW5pc2hMb2FkKCk7CisgICAgZm9yIChhdXRvJiBvYnNlcnZlciA6IGNvcHlU
b1ZlY3Rvck9mPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8T2JzZXJ2ZXI+PihtX29ic2VydmVycykp
CisgICAgICAgIG9ic2VydmVyLmdldCgpLmRpZEZpbmlzaExvYWQoKTsKIH0KIAogdm9pZCBGcmFt
ZUxvYWRTdGF0ZTo6ZGlkRmFpbExvYWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5kZXggODMxYjIxYTVmMDNm
YTQ2YWI4NDA4MDFhOTQ5MTk2NzM5ZGEwNjdlYi4uOTIyYTBkYjhhZWU2ZTAwNGE2M2M1MjMwMDgw
ZTVjNmNmN2Y2MTM4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBAIC0xODMsOCArMTgzLDggQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKCkK
ICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbCA9IGNvcHlUb1ZlY3Rv
cihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc0xv
Y2FsKCkpOwogICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzID0g
Y29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9S
ZWdpc3RlckFzTm9BY2Nlc3MoKSk7CiAgICAgcGFyYW1ldGVycy5jYWNoZU1vZGVsID0gTGVnYWN5
R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLmNhY2hlTW9kZWwoKTsKLSAgICBmb3IgKGF1dG8m
IHNjaGVtZSA6IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFu
ZGxlcnMoKSkKLSAgICAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3Rv
bVByb3RvY29scy5hcHBlbmQoc2NoZW1lKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdp
c3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzID0gV2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRo
Q3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOworCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAg
ICBpZiAoU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNzUG9vbDo6Y29v
a2llU3RvcmFnZURpcmVjdG9yeSgpOyAhY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkp
IHsKICAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFu
ZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRD
b250cm9sbGVyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlckNvbnRlbnQv
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCmluZGV4IGZhMjU0YzJkYWRjMDYzMDI4
ZGZkNTA0ZDI4OTBhODkyYWVkYWZiMDguLjViYmU3Mzk2MjA1MjdhODI3Y2Q1N2YxNjlhZjJmMGMw
YzU5NmE3MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJDb250ZW50
L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAKQEAg
LTExNywxMSArMTE3LDExIEBAIFVzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnMgV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnBhcmFtZXRlcnMoKSBjb25zCiAgICAgcGFyYW1ldGVy
cy5pZGVudGlmaWVyID0gaWRlbnRpZmllcigpOwogICAgIAogICAgIEFTU0VSVChwYXJhbWV0ZXJz
LnVzZXJDb250ZW50V29ybGRzLmlzRW1wdHkoKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBpZGVu
dGlmaWVyIDogbV9hc3NvY2lhdGVkQ29udGVudFdvcmxkcykgeworICAgIHBhcmFtZXRlcnMudXNl
ckNvbnRlbnRXb3JsZHMgPSBXVEY6Om1hcChtX2Fzc29jaWF0ZWRDb250ZW50V29ybGRzLCBbXShh
dXRvJiBpZGVudGlmaWVyKSB7CiAgICAgICAgIGF1dG8qIHdvcmxkID0gQVBJOjpDb250ZW50V29y
bGQ6OndvcmxkRm9ySWRlbnRpZmllcihpZGVudGlmaWVyKTsKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQod29ybGQpOwotICAgICAgICBwYXJhbWV0ZXJzLnVzZXJDb250ZW50V29ybGRzLmFwcGVuZCh3
b3JsZC0+d29ybGREYXRhKCkpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIHdvcmxkLT53b3JsZERh
dGEoKTsKKyAgICB9KTsKIAogICAgIGZvciAoYXV0byB1c2VyU2NyaXB0IDogbV91c2VyU2NyaXB0
cy0+ZWxlbWVudHNPZlR5cGU8QVBJOjpVc2VyU2NyaXB0PigpKQogICAgICAgICBwYXJhbWV0ZXJz
LnVzZXJTY3JpcHRzLmFwcGVuZCh7IHVzZXJTY3JpcHQtPmlkZW50aWZpZXIoKSwgdXNlclNjcmlw
dC0+Y29udGVudFdvcmxkKCkuaWRlbnRpZmllcigpLCB1c2VyU2NyaXB0LT51c2VyU2NyaXB0KCkg
fSk7CkBAIC0xMjksOCArMTI5LDkgQEAgVXNlckNvbnRlbnRDb250cm9sbGVyUGFyYW1ldGVycyBX
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cGFyYW1ldGVycygpIGNvbnMKICAgICBmb3Ig
KGF1dG8gdXNlclN0eWxlU2hlZXQgOiBtX3VzZXJTdHlsZVNoZWV0cy0+ZWxlbWVudHNPZlR5cGU8
QVBJOjpVc2VyU3R5bGVTaGVldD4oKSkKICAgICAgICAgcGFyYW1ldGVycy51c2VyU3R5bGVTaGVl
dHMuYXBwZW5kKHsgdXNlclN0eWxlU2hlZXQtPmlkZW50aWZpZXIoKSwgdXNlclN0eWxlU2hlZXQt
PmNvbnRlbnRXb3JsZCgpLmlkZW50aWZpZXIoKSwgdXNlclN0eWxlU2hlZXQtPnVzZXJTdHlsZVNo
ZWV0KCkgfSk7CiAKLSAgICBmb3IgKGF1dG8mIGhhbmRsZXIgOiBtX3NjcmlwdE1lc3NhZ2VIYW5k
bGVycy52YWx1ZXMoKSkKLSAgICAgICAgcGFyYW1ldGVycy5tZXNzYWdlSGFuZGxlcnMuYXBwZW5k
KHsgaGFuZGxlci0+aWRlbnRpZmllcigpLCBoYW5kbGVyLT53b3JsZCgpLmlkZW50aWZpZXIoKSwg
aGFuZGxlci0+bmFtZSgpIH0pOworICAgIHBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXJzID0gV1RG
OjptYXAobV9zY3JpcHRNZXNzYWdlSGFuZGxlcnMsIFtdKGF1dG8gZW50cnkpIHsKKyAgICAgICAg
cmV0dXJuIFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyRGF0YSB7IGVudHJ5LnZhbHVlLT5pZGVudGlm
aWVyKCksIGVudHJ5LnZhbHVlLT53b3JsZCgpLmlkZW50aWZpZXIoKSwgZW50cnkudmFsdWUtPm5h
bWUoKSB9OworICAgIH0pOwogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICBw
YXJhbWV0ZXJzLmNvbnRlbnRSdWxlTGlzdHMgPSBjb250ZW50UnVsZUxpc3REYXRhKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9BdXRoZW50
aWNhdG9yTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNh
dGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHAKaW5kZXggOTM0ODBlZDVjYjM5YTYxY2JjZjY3
MzUxZTBhODgwZWEwOWZlNDQ3Ni4uNjU3MmY1Mzk1OThlZjQxZGQxMDMwNWFjZWVjOGYxODdkOGQ1
MjUyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRp
b24vQXV0aGVudGljYXRvck1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkF1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmNwcApAQCAtNDE2LDExICs0
MTYsMTEgQEAgdm9pZCBBdXRoZW50aWNhdG9yTWFuYWdlcjo6c3RhcnREaXNjb3ZlcnkoY29uc3Qg
VHJhbnNwb3J0U2V0JiB0cmFuc3BvcnRzKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CiAgICAgQVNTRVJUKG1fc2VydmljZXMuaXNFbXB0eSgpICYmIHRyYW5zcG9ydHMuc2l6ZSgp
IDw9IG1heFRyYW5zcG9ydE51bWJlcik7Ci0gICAgZm9yIChhdXRvJiB0cmFuc3BvcnQgOiB0cmFu
c3BvcnRzKSB7CisgICAgbV9zZXJ2aWNlcyA9IFdURjo6bWFwKHRyYW5zcG9ydHMsIFt0aGlzXShh
dXRvJiB0cmFuc3BvcnQpIHsKICAgICAgICAgYXV0byBzZXJ2aWNlID0gY3JlYXRlU2VydmljZSh0
cmFuc3BvcnQsICp0aGlzKTsKICAgICAgICAgc2VydmljZS0+c3RhcnREaXNjb3ZlcnkoKTsKLSAg
ICAgICAgbV9zZXJ2aWNlcy5hcHBlbmQoV1RGTW92ZShzZXJ2aWNlKSk7Ci0gICAgfQorICAgICAg
ICByZXR1cm4gc2VydmljZTsKKyAgICB9KTsKIH0KIAogdm9pZCBBdXRoZW50aWNhdG9yTWFuYWdl
cjo6aW5pdFRpbWVPdXRUaW1lcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQmFj
a0ZvcndhcmRMaXN0LmNwcAppbmRleCBjNzQzNDNlNjViODg5Zjc4NjlkYzhjY2EzNDA1MWI4YjI2
NTQwMmI2Li5kZWM5ZTgzOTIyMzY4ZmU2MTU1ZTAzZDY5YTNmMzdkOWRiZjAxNzc4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAKQEAgLTM0MCwx
NiArMzQwLDExIEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjpyZW1vdmVBbGxJdGVtcygpCiAK
ICAgICBMT0coQmFja0ZvcndhcmQsICIoQmFjay9Gb3J3YXJkKSBXZWJCYWNrRm9yd2FyZExpc3Qg
JXAgcmVtb3ZlQWxsSXRlbXMgKGhhcyAlenUgb2YgdGhlbSkiLCB0aGlzLCBtX2VudHJpZXMuc2l6
ZSgpKTsKIAotICAgIFZlY3RvcjxSZWY8V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4+IHJlbW92ZWRJ
dGVtczsKLQotICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2VudHJpZXMpIHsKKyAgICBmb3IgKGF1
dG8mIGVudHJ5IDogbV9lbnRyaWVzKQogICAgICAgICBkaWRSZW1vdmVJdGVtKGVudHJ5KTsKLSAg
ICAgICAgcmVtb3ZlZEl0ZW1zLmFwcGVuZChXVEZNb3ZlKGVudHJ5KSk7Ci0gICAgfQogCi0gICAg
bV9lbnRyaWVzLmNsZWFyKCk7CiAgICAgbV9jdXJyZW50SW5kZXggPSBzdGQ6Om51bGxvcHQ7Ci0g
ICAgbV9wYWdlLT5kaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QobnVsbHB0ciwgV1RGTW92ZShyZW1v
dmVkSXRlbXMpKTsKKyAgICBtX3BhZ2UtPmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdChudWxscHRy
LCBzdGQ6OmV4Y2hhbmdlKG1fZW50cmllcywgeyB9KSk7CiB9CiAKIHZvaWQgV2ViQmFja0Zvcndh
cmRMaXN0OjpjbGVhcigpCkBAIC0zNjMsMjEgKzM1OCwxNyBAQCB2b2lkIFdlYkJhY2tGb3J3YXJk
TGlzdDo6Y2xlYXIoKQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8V2ViQmFja0Zvcndh
cmRMaXN0SXRlbT4gY3VycmVudEl0ZW0gPSB0aGlzLT5jdXJyZW50SXRlbSgpOwotICAgIFZlY3Rv
cjxSZWY8V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4+IHJlbW92ZWRJdGVtczsKIAogICAgIGlmICgh
Y3VycmVudEl0ZW0pIHsKICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZXZlciBoYXZlIG5vIGN1
cnJlbnQgaXRlbSBpZiB3ZSBhbHNvIGhhdmUgbm8gY3VycmVudCBpdGVtIGluZGV4LgogICAgICAg
ICBBU1NFUlQoIW1fY3VycmVudEluZGV4KTsKIAogICAgICAgICAvLyBCdXQganVzdCBpbiBjYXNl
IGl0IGRvZXMgaGFwcGVuIGluIHByYWN0aWNlIHdlIHNob3VsZCBnZXQgYmFjayBpbnRvIGEgY29u
c2lzdGVudCBzdGF0ZSBub3cuCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsg
KytpKSB7Ci0gICAgICAgICAgICBkaWRSZW1vdmVJdGVtKG1fZW50cmllc1tpXSk7Ci0gICAgICAg
ICAgICByZW1vdmVkSXRlbXMuYXBwZW5kKFdURk1vdmUobV9lbnRyaWVzW2ldKSk7Ci0gICAgICAg
IH0KKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fZW50cmllcykKKyAgICAgICAgICAgIGRp
ZFJlbW92ZUl0ZW0oZW50cnkpOwogCi0gICAgICAgIG1fZW50cmllcy5jbGVhcigpOwogICAgICAg
ICBtX2N1cnJlbnRJbmRleCA9IHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgbV9wYWdlLT5kaWRDaGFu
Z2VCYWNrRm9yd2FyZExpc3QobnVsbHB0ciwgV1RGTW92ZShyZW1vdmVkSXRlbXMpKTsKKyAgICAg
ICAgbV9wYWdlLT5kaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QobnVsbHB0ciwgc3RkOjpleGNoYW5n
ZShtX2VudHJpZXMsIHsgfSkpOwogCiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zODcsNiAr
Mzc4LDcgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3Q6OmNsZWFyKCkKICAgICAgICAgICAgIGRp
ZFJlbW92ZUl0ZW0obV9lbnRyaWVzW2ldKTsKICAgICB9CiAKKyAgICBWZWN0b3I8UmVmPFdlYkJh
Y2tGb3J3YXJkTGlzdEl0ZW0+PiByZW1vdmVkSXRlbXM7CiAgICAgcmVtb3ZlZEl0ZW1zLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSAtIDEpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7CiAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCAmJiBpICE9ICptX2N1cnJl
bnRJbmRleCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
b29sLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAppbmRl
eCBmYTE3NDJjZjMyZGE5OTUyNzMyM2RmYzdjOGJmMGE3OTA2MzA0MWZlLi42MWJkMzBhMzY0MTQ3
M2M1ZGIyYzU3NDMwZTkzY2I3ZTI2NjNhZDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Bvb2wuY3BwCkBAIC04NDksMTAgKzg0OSw5IEBAIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcywgV2Vi
c2l0ZURhCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmluamVjdGVkQnVuZGxlUGF0aEV4dGVuc2lv
bkhhbmRsZSA9IFdURk1vdmUoKmhhbmRsZSk7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwYXRo
IDogbV9yZXNvbHZlZFBhdGhzLmFkZGl0aW9uYWxXZWJQcm9jZXNzU2FuZGJveEV4dGVuc2lvblBh
dGhzKSB7Ci0gICAgICAgIGlmIChhdXRvIGhhbmRsZSA9ICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVh
dGVIYW5kbGVXaXRob3V0UmVzb2x2aW5nUGF0aChwYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBl
OjpSZWFkT25seSkpCi0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFkZGl0aW9uYWxTYW5kYm94RXh0
ZW5zaW9uSGFuZGxlcy5hcHBlbmQoV1RGTW92ZSgqaGFuZGxlKSk7Ci0gICAgfQorICAgIHBhcmFt
ZXRlcnMuYWRkaXRpb25hbFNhbmRib3hFeHRlbnNpb25IYW5kbGVzID0gV1RGOjpjb21wYWN0TWFw
KG1fcmVzb2x2ZWRQYXRocy5hZGRpdGlvbmFsV2ViUHJvY2Vzc1NhbmRib3hFeHRlbnNpb25QYXRo
cywgW10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlV2l0aG91dFJlc29sdmluZ1BhdGgocGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6VHlw
ZTo6UmVhZE9ubHkpOworICAgIH0pOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBz
ZXRKYXZhU2NyaXB0Q29uZmlndXJhdGlvbkZpbGVFbmFibGVkRnJvbURlZmF1bHRzKCk7CkBAIC0x
ODcwLDE0ICsxODY5LDkgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVtb3ZlUHJvY2Vzc0Zyb21P
cmlnaW5DYWNoZVNldChXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiAgICAgTE9HKFByb2Nlc3NT
d2FwcGluZywgIihQcm9jZXNzU3dhcHBpbmcpIFJlbW92aW5nIHByb2Nlc3Mgd2l0aCBwaWQgJWkg
ZnJvbSB0aGUgb3JpZ2luIGNhY2hlIHNldCIsIHByb2Nlc3MucHJvY2Vzc0lkZW50aWZpZXIoKSk7
CiAKICAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgdmVyeSBpbmVmZmljaWVudCBhcyB0aGUgbnVt
YmVyIG9mIHJlbWVtYmVyZWQgb3JpZ2lucyBhbmQgcHJvY2Vzc2VzIGdyb3dzCi0gICAgVmVjdG9y
PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiByZWdpc3RyYWJsZURvbWFpbnNUb1JlbW92ZTsK
LSAgICBmb3IgKGF1dG8gZW50cnkgOiBtX3N3YXBwZWRQcm9jZXNzZXNQZXJSZWdpc3RyYWJsZURv
bWFpbikgewotICAgICAgICBpZiAoZW50cnkudmFsdWUgPT0gJnByb2Nlc3MpCi0gICAgICAgICAg
ICByZWdpc3RyYWJsZURvbWFpbnNUb1JlbW92ZS5hcHBlbmQoZW50cnkua2V5KTsKLSAgICB9Ci0K
LSAgICBmb3IgKGF1dG8mIHJlZ2lzdHJhYmxlRG9tYWluIDogcmVnaXN0cmFibGVEb21haW5zVG9S
ZW1vdmUpCi0gICAgICAgIG1fc3dhcHBlZFByb2Nlc3Nlc1BlclJlZ2lzdHJhYmxlRG9tYWluLnJl
bW92ZShyZWdpc3RyYWJsZURvbWFpbik7CisgICAgbV9zd2FwcGVkUHJvY2Vzc2VzUGVyUmVnaXN0
cmFibGVEb21haW4ucmVtb3ZlSWYoWyZdKGF1dG8mIGVudHJ5KSB7CisgICAgICAgIHJldHVybiBl
bnRyeS52YWx1ZSA9PSAmcHJvY2VzczsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6cHJvY2Vzc0Zvck5hdmlnYXRpb24oV2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBBUEk6Ok5h
dmlnYXRpb24mIG5hdmlnYXRpb24sIFJlZjxXZWJQcm9jZXNzUHJveHk+JiYgc291cmNlUHJvY2Vz
cywgY29uc3QgVVJMJiBzb3VyY2VVUkwsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgcHJv
Y2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgV2ViUHJvY2Vzc1Byb3h5OjpDYXB0aXZlUG9ydGFs
TW9kZSBjYXB0aXZlUG9ydGFsTW9kZSwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBS
ZWY8V2Vic2l0ZURhdGFTdG9yZT4mJiBkYXRhU3RvcmUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
UmVmPFdlYlByb2Nlc3NQcm94eT4mJiwgU3VzcGVuZGVkUGFnZVByb3h5KiwgY29uc3QgU3RyaW5n
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Byb3h5LmNwcAppbmRleCBiMTI4NjBkZjUxMGJjNGUzZGZiYjdlM2ZjOTIwYjVkMDQyYjg0
MzIxLi4zNjhhMzk1ODdkYTMzZGU2NGMxYjg5ZDBlNjM4ZDM4Yjg4ZDdhMTdiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKQEAgLTkzNiw4ICs5MzYsOSBA
QCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6cHJvY2Vzc0RpZFRlcm1pbmF0ZU9yRmFpbGVkVG9MYXVu
Y2goUHJvY2Vzc1Rlcm1pbmF0aW9uUmVhcwogCiAgICAgLy8gVGhlcmUgaXMgYSBuZXN0ZWQgdHJh
bnNhY3Rpb24gaW4gV2ViUGFnZVByb3h5OjpyZXNldFN0YXRlQWZ0ZXJQcm9jZXNzRXhpdGVkKCkg
dGhhdCB3ZSBkb24ndCB3YW50IHRvIGNvbW1pdCBiZWZvcmUgdGhlIGNsaWVudCBjYWxsIGJlbG93
IChkaXNwYXRjaFByb2Nlc3NEaWRUZXJtaW5hdGUpLgogICAgIFZlY3RvcjxQYWdlTG9hZFN0YXRl
OjpUcmFuc2FjdGlvbj4gcGFnZUxvYWRTdGF0ZVRyYW5zYWN0aW9uczsKKyAgICBwYWdlTG9hZFN0
YXRlVHJhbnNhY3Rpb25zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGFnZXMuc2l6ZSgpKTsKICAg
ICBmb3IgKGF1dG8mIHBhZ2UgOiBwYWdlcykgewotICAgICAgICBwYWdlTG9hZFN0YXRlVHJhbnNh
Y3Rpb25zLmFwcGVuZChwYWdlLT5wYWdlTG9hZFN0YXRlKCkudHJhbnNhY3Rpb24oKSk7CisgICAg
ICAgIHBhZ2VMb2FkU3RhdGVUcmFuc2FjdGlvbnMudW5jaGVja2VkQXBwZW5kKHBhZ2UtPnBhZ2VM
b2FkU3RhdGUoKS50cmFuc2FjdGlvbigpKTsKICAgICAgICAgcGFnZS0+cmVzZXRTdGF0ZUFmdGVy
UHJvY2Vzc1Rlcm1pbmF0aW9uKHJlYXNvbik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4
IGIzNmQ5YTc0YjlhMTc1YTA4MTZiN2EyZTE0ZjEzOWRiNWVmNTZlNmQuLjQ5NWVjZGU5Njc4MGI1
MTljNjdjOGNlNWYzMjE5ZTQ0Y2YxNTY1YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBAIC00MzEsOCAr
NDMxLDEwIEBAIHByaXZhdGU6CiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0
YVR5cGU6OkRpc2tDYWNoZSkpIHsKICAgICAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW21lZGlhQ2Fj
aGVEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24tPm1lZGlhQ2FjaGVEaXJlY3RvcnkoKS5pc29s
YXRlZENvcHkoKSwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7CiAgICAgICAgICAgICBXZWJzaXRlRGF0
YSB3ZWJzaXRlRGF0YTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgb3JpZ2luIDogV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudDo6b3JpZ2luc0luTWVkaWFDYWNoZShtZWRpYUNhY2hlRGlyZWN0b3J5
KSkKLSAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0
YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlLCAwIH0pOworICAg
ICAgICAgICAgYXV0byBvcmlnaW5zID0gV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6b3JpZ2lu
c0luTWVkaWFDYWNoZShtZWRpYUNhY2hlRGlyZWN0b3J5KTsKKyAgICAgICAgICAgIHdlYnNpdGVE
YXRhLmVudHJpZXMgPSBXVEY6Om1hcChvcmlnaW5zLCBbXShhdXRvJiBvcmlnaW4pIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0
YVR5cGU6OkRpc2tDYWNoZSwgMCB9OworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBjYWxs
YmFja0FnZ3JlZ2F0b3ItPmFkZFdlYnNpdGVEYXRhKFdURk1vdmUod2Vic2l0ZURhdGEpKTsKICAg
ICAgICAgfSk7CiAgICAgfQpAQCAtNDY5LDggKzQ3MSw5IEBAIHByaXZhdGU6CiAgICAgaWYgKGRh
dGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRldmljZUlkSGFzaFNhbHQpKSB7CiAg
ICAgICAgIG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UtPmdldERldmljZUlkSGFzaFNhbHRPcmln
aW5zKFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1dG8mJiBvcmlnaW5zKSB7CiAgICAgICAgICAgICBX
ZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsKLSAgICAgICAgICAgIHdoaWxlICghb3JpZ2lucy5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmQoV2Vic2l0
ZURhdGE6OkVudHJ5IHsgb3JpZ2lucy50YWtlQW55KCksIFdlYnNpdGVEYXRhVHlwZTo6RGV2aWNl
SWRIYXNoU2FsdCwgMCB9KTsKKyAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMgPSBXVEY6
Om1hcChvcmlnaW5zLCBbXShhdXRvJiBvcmlnaW4pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
V2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6OkRldmljZUlkSGFz
aFNhbHQsIDAgfTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdh
dG9yLT5hZGRXZWJzaXRlRGF0YShXVEZNb3ZlKHdlYnNpdGVEYXRhKSk7CiAgICAgICAgIH0pOwog
ICAgIH0KQEAgLTQ3OSwxMCArNDgyLDExIEBAIHByaXZhdGU6CiAgICAgICAgIG1fcXVldWUtPmRp
c3BhdGNoKFtmZXRjaE9wdGlvbnMsIGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkgPSBtX2NvbmZp
Z3VyYXRpb24tPmFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkoKS5pc29sYXRlZENvcHkoKSwgYXBw
bGljYXRpb25DYWNoZUZsYXRGaWxlU3ViZGlyZWN0b3J5TmFtZSA9IG1fY29uZmlndXJhdGlvbi0+
YXBwbGljYXRpb25DYWNoZUZsYXRGaWxlU3ViZGlyZWN0b3J5TmFtZSgpLmlzb2xhdGVkQ29weSgp
LCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKICAgICAgICAgICAgIGF1dG8gc3RvcmFnZSA9IFdlYkNv
cmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjcmVhdGUoYXBwbGljYXRpb25DYWNoZURpcmVj
dG9yeSwgYXBwbGljYXRpb25DYWNoZUZsYXRGaWxlU3ViZGlyZWN0b3J5TmFtZSk7CiAgICAgICAg
ICAgICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgb3Jp
Z2luIDogc3RvcmFnZS0+b3JpZ2luc1dpdGhDYWNoZSgpKSB7CisgICAgICAgICAgICBhdXRvIG9y
aWdpbnMgPSBzdG9yYWdlLT5vcmlnaW5zV2l0aENhY2hlKCk7CisgICAgICAgICAgICB3ZWJzaXRl
RGF0YS5lbnRyaWVzID0gV1RGOjptYXAob3JpZ2lucywgWyZdKGF1dG8mIG9yaWdpbikgewogICAg
ICAgICAgICAgICAgIHVpbnQ2NF90IHNpemUgPSBmZXRjaE9wdGlvbnMuY29udGFpbnMoV2Vic2l0
ZURhdGFGZXRjaE9wdGlvbjo6Q29tcHV0ZVNpemVzKSA/IHN0b3JhZ2UtPmRpc2tVc2FnZUZvck9y
aWdpbihvcmlnaW4pIDogMDsKLSAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzLmFw
cGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6T2ZmbGlu
ZVdlYkFwcGxpY2F0aW9uQ2FjaGUsIHNpemUgfSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBl
OjpPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZSwgc2l6ZSB9OworICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFdlYnNpdGVEYXRhKFdURk1vdmUod2Vi
c2l0ZURhdGEpKTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtNDkwLDggKzQ5NCw5IEBAIHByaXZh
dGU6CiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OldlYlNRTERh
dGFiYXNlcykgJiYgaXNQZXJzaXN0ZW50KCkpIHsKICAgICAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2go
W3dlYlNRTERhdGFiYXNlRGlyZWN0b3J5ID0gbV9jb25maWd1cmF0aW9uLT53ZWJTUUxEYXRhYmFz
ZURpcmVjdG9yeSgpLmlzb2xhdGVkQ29weSgpLCBjYWxsYmFja0FnZ3JlZ2F0b3JdKCkgewogICAg
ICAgICAgICAgV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGE7Ci0gICAgICAgICAgICBmb3IgKGF1dG8m
IG9yaWdpbiA6IFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcldpdGhEYXRhYmFzZVBh
dGgod2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkpLT5vcmlnaW5zKCkpCi0gICAgICAgICAgICAgICAg
d2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmQoV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLCBX
ZWJzaXRlRGF0YVR5cGU6OldlYlNRTERhdGFiYXNlcywgMCB9KTsKKyAgICAgICAgICAgIHdlYnNp
dGVEYXRhLmVudHJpZXMgPSBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXJXaXRoRGF0
YWJhc2VQYXRoKHdlYlNRTERhdGFiYXNlRGlyZWN0b3J5KS0+b3JpZ2lucygpLm1hcChbXShhdXRv
JiBvcmlnaW4pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGE6OkVudHJ5IHsg
b3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6OldlYlNRTERhdGFiYXNlcywgMCB9OworICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFdlYnNpdGVEYXRhKFdU
Rk1vdmUod2Vic2l0ZURhdGEpKTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtNDk5LDggKzUwNCw5
IEBAIHByaXZhdGU6CiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6
Ok1lZGlhS2V5cykgJiYgaXNQZXJzaXN0ZW50KCkpIHsKICAgICAgICAgbV9xdWV1ZS0+ZGlzcGF0
Y2goW21lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24tPm1lZGlhS2V5
c1N0b3JhZ2VEaXJlY3RvcnkoKS5pc29sYXRlZENvcHkoKSwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
CiAgICAgICAgICAgICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsKLSAgICAgICAgICAgIGZvciAo
YXV0byYgb3JpZ2luIDogbWVkaWFLZXlPcmlnaW5zKG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3Rvcnkp
KQotICAgICAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRh
OjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpNZWRpYUtleXMsIDAgfSk7CisgICAg
ICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzID0gbWVkaWFLZXlPcmlnaW5zKG1lZGlhS2V5c1N0
b3JhZ2VEaXJlY3RvcnkpLm1hcChbXShhdXRvJiBvcmlnaW4pIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6Ok1lZGlh
S2V5cywgMCB9OworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0
b3ItPmFkZFdlYnNpdGVEYXRhKFdURk1vdmUod2Vic2l0ZURhdGEpKTsKICAgICAgICAgfSk7CiAg
ICAgfQpAQCAtNjY3LDggKzY3Myw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0
YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAgICAgVmVj
dG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gb3JpZ2luczsKIAogICAgIGZvciAoY29u
c3QgYXV0byYgZGF0YVJlY29yZCA6IGRhdGFSZWNvcmRzKSB7CisgICAgICAgIG9yaWdpbnMucmVz
ZXJ2ZUNhcGFjaXR5KG9yaWdpbnMuY2FwYWNpdHkoKSArIGRhdGFSZWNvcmQub3JpZ2lucy5zaXpl
KCkpOwogICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IGRhdGFSZWNvcmQub3JpZ2lucykKLSAg
ICAgICAgICAgIG9yaWdpbnMuYXBwZW5kKG9yaWdpbik7CisgICAgICAgICAgICBvcmlnaW5zLnVu
Y2hlY2tlZEFwcGVuZChvcmlnaW4pOwogICAgIH0KIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdh
dG9yID0gUmVtb3ZhbENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CkBAIC03MDcsMTMgKzcxNCwxNiBAQCB2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBj
b25zdCBWZQogICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gSFNUU0NhY2hlSG9zdE5hbWVzOwog
ICAgICAgICAgICAgVmVjdG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiByZWdpc3RyYWJs
ZURvbWFpbnM7CiAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGRhdGFSZWNvcmQgOiBkYXRh
UmVjb3JkcykgeworICAgICAgICAgICAgICAgIGNvb2tpZUhvc3ROYW1lcy5yZXNlcnZlQ2FwYWNp
dHkoY29va2llSG9zdE5hbWVzLmNhcGFjaXR5KCkgKyBkYXRhUmVjb3JkLmNvb2tpZUhvc3ROYW1l
cy5zaXplKCkpOwogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgaG9zdE5hbWUgOiBkYXRhUmVj
b3JkLmNvb2tpZUhvc3ROYW1lcykKLSAgICAgICAgICAgICAgICAgICAgY29va2llSG9zdE5hbWVz
LmFwcGVuZChob3N0TmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGNvb2tpZUhvc3ROYW1lcy51
bmNoZWNrZWRBcHBlbmQoaG9zdE5hbWUpOworICAgICAgICAgICAgICAgIEhTVFNDYWNoZUhvc3RO
YW1lcy5yZXNlcnZlQ2FwYWNpdHkoSFNUU0NhY2hlSG9zdE5hbWVzLmNhcGFjaXR5KCkgKyBkYXRh
UmVjb3JkLkhTVFNDYWNoZUhvc3ROYW1lcy5zaXplKCkpOwogICAgICAgICAgICAgICAgIGZvciAo
YXV0byYgaG9zdE5hbWUgOiBkYXRhUmVjb3JkLkhTVFNDYWNoZUhvc3ROYW1lcykKLSAgICAgICAg
ICAgICAgICAgICAgSFNUU0NhY2hlSG9zdE5hbWVzLmFwcGVuZChob3N0TmFtZSk7CisgICAgICAg
ICAgICAgICAgICAgIEhTVFNDYWNoZUhvc3ROYW1lcy51bmNoZWNrZWRBcHBlbmQoaG9zdE5hbWUp
OwogI2lmIEVOQUJMRShJTlRFTExJR0VOVF9UUkFDS0lOR19QUkVWRU5USU9OKQorICAgICAgICAg
ICAgICAgIHJlZ2lzdHJhYmxlRG9tYWlucy5yZXNlcnZlQ2FwYWNpdHkocmVnaXN0cmFibGVEb21h
aW5zLmNhcGFjaXR5KCkgKyBkYXRhUmVjb3JkLnJlc291cmNlTG9hZFN0YXRpc3RpY3NSZWdpc3Ry
YWJsZURvbWFpbnMuc2l6ZSgpKTsKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHJlZ2lzdHJh
YmxlRG9tYWluIDogZGF0YVJlY29yZC5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUmVnaXN0cmFibGVE
b21haW5zKQotICAgICAgICAgICAgICAgICAgICByZWdpc3RyYWJsZURvbWFpbnMuYXBwZW5kKHJl
Z2lzdHJhYmxlRG9tYWluKTsKKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmFibGVEb21haW5z
LnVuY2hlY2tlZEFwcGVuZChyZWdpc3RyYWJsZURvbWFpbik7CiAjZW5kaWYKICAgICAgICAgICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1RleHRDaGVja2Vy
SU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1RleHRDaGVja2VySU9TLm1tCmlu
ZGV4IGZhM2JjNTBiMjRmYWYyZWU1ZmVlNzQ2ZDJiZWM4MDRhYTRhZmI3MmMuLjg1NzU5YzFhNDFk
NDIyNGE3ZmRmYWJkOTkxNTFiNjA2ODljMDgwOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvVGV4dENoZWNrZXJJT1MubW0KQEAgLTM0LDYgKzM0LDcgQEAKICNpbXBvcnQgPHd0
Zi9IYXNoTWFwLmg+CiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0
Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9y
dCA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTI0MCwx
MiArMjQxLDEzIEBAIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVj
a1RleHRPZlBhcmFncmFwaChTcGVsbERvY3VtZW50VGFnIHNwCiAgICAgICAgICAgICAgICAgVGV4
dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgICAgICByZXN1bHQudHlwZSA9IFRl
eHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nOwogICAgICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9
IHJlc3VsdFJhbmdlOwotICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAg
ICAgIH0gZWxzZSBpZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVHcmFtbWFyICYm
IGNoZWNraW5nVHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcikpIHsKICAg
ICAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAgICAgICAg
IE5TQXJyYXkgKmRldGFpbHMgPSBbaW5jb21pbmdSZXN1bHQgZ3JhbW1hckRldGFpbHNdOwogICAg
ICAgICAgICAgICAgIHJlc3VsdC50eXBlID0gVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcjsKICAg
ICAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5nZTsKKyAgICAgICAgICAgICAg
ICByZXN1bHQuZGV0YWlscy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRldGFpbHMuY291bnQpOwog
ICAgICAgICAgICAgICAgIGZvciAoTlNEaWN0aW9uYXJ5ICppbmNvbWluZ0RldGFpbCBpbiBkZXRh
aWxzKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpbmNvbWluZ0RldGFpbCk7CiAgICAg
ICAgICAgICAgICAgICAgIEdyYW1tYXJEZXRhaWwgZGV0YWlsOwpAQCAtMjYwLDEyICsyNjIsMTAg
QEAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFy
YWdyYXBoKFNwZWxsRG9jdW1lbnRUYWcgc3AKICAgICAgICAgICAgICAgICAgICAgZGV0YWlsLnJh
bmdlID0gZGV0YWlsTlNSYW5nZTsKICAgICAgICAgICAgICAgICAgICAgZGV0YWlsLnVzZXJEZXNj
cmlwdGlvbiA9IFtpbmNvbWluZ0RldGFpbCBvYmplY3RGb3JLZXk6QCJOU0dyYW1tYXJVc2VyRGVz
Y3JpcHRpb24iXTsKICAgICAgICAgICAgICAgICAgICAgTlNBcnJheSAqZ3Vlc3NlcyA9IFtpbmNv
bWluZ0RldGFpbCBvYmplY3RGb3JLZXk6QCJOU0dyYW1tYXJDb3JyZWN0aW9ucyJdOwotICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChOU1N0cmluZyAqZ3Vlc3Mg
aW4gZ3Vlc3NlcykKLSAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbC5ndWVzc2VzLmFwcGVu
ZChndWVzcyk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5kZXRhaWxzLmFwcGVuZChkZXRh
aWwpOworICAgICAgICAgICAgICAgICAgICBkZXRhaWwuZ3Vlc3NlcyA9IG1ha2VWZWN0b3I8U3Ry
aW5nPihndWVzc2VzKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmRldGFpbHMudW5jaGVj
a2VkQXBwZW5kKGRldGFpbCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJl
c3VsdHMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RG
TW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3Rh
bnQubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFzc2lzdGFu
dC5tbQppbmRleCBjOWFlMWE2Njc3NzFiMjYxMDk1ODU0ZWFlNTllMjg1YWI3NTJmNjdiLi5jYmNl
ZTNlMjNjZDUzODNkYjljNjE0NzU3NDNkMTcyMWQ1ZmNlY2E3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFzc2lzdGFudC5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFzc2lzdGFudC5tbQpAQCAtMjA3
LDEyICsyMDcsMTEgQEAgLSAoQ0dSZWN0KXByZXNlbnRhdGlvblJlY3RGb3JFbGVtZW50VXNpbmdD
bG9zZXN0SW5kaWNhdGVkUmVjdAogCiAgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0b3VjaExvY2F0
aW9uID0gX3Bvc2l0aW9uSW5mb3JtYXRpb24tPnJlcXVlc3QucG9pbnQ7CiAgICAgV2ViQ29yZTo6
RmxvYXRQb2ludCBsaW5rRWxlbWVudExvY2F0aW9uID0gaW5kaWNhdG9yLnRleHRCb3VuZGluZ1Jl
Y3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6
RmxvYXRSZWN0PiBpbmRpY2F0ZWRSZWN0czsKLSAgICBmb3IgKGF1dG8gcmVjdCA6IGluZGljYXRv
ci50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKSB7CisgICAgYXV0byBpbmRpY2F0
ZWRSZWN0cyA9IGluZGljYXRvci50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzLm1h
cChbXShhdXRvIHJlY3QpIHsKICAgICAgICAgcmVjdC5pbmZsYXRlKDIpOwogICAgICAgICByZWN0
Lm1vdmVCeShsaW5rRWxlbWVudExvY2F0aW9uKTsKLSAgICAgICAgaW5kaWNhdGVkUmVjdHMuYXBw
ZW5kKHJlY3QpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIHJlY3Q7CisgICAgfSk7CiAKICAgICBm
b3IgKGNvbnN0IGF1dG8mIHBhdGggOiBXZWJDb3JlOjpQYXRoVXRpbGl0aWVzOjpwYXRoc1dpdGhT
aHJpbmtXcmFwcGVkUmVjdHMoaW5kaWNhdGVkUmVjdHMsIDApKSB7CiAgICAgICAgIGF1dG8gYm91
bmRpbmdSZWN0ID0gcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0KaW5kZXggMTZkNjgzOGU1NDhlMDQzMmZiZDE4
ZjhkNGQyYWRlMWMyYzEwOGY2ZS4uZWNlMmUzZTI0NTMxNWVlNzFhZDk3OTdmYTZjYzgwYjQyOTMz
MGQxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2Vy
TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5t
bQpAQCAtMzQ0LDEyICszNDQsMTMgQEAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENo
ZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFNwZWxsRG9jdW1lbnRUYWcgc3AKICAgICAgICAg
ICAgIFRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICByZXN1bHQudHlwZSA9
IFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0g
cmVzdWx0UmFuZ2U7Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAgICAg
ICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgfSBlbHNlIGlm
IChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZUdyYW1tYXIgJiYgY2hlY2tpbmdUeXBl
cy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKSkgewogICAgICAgICAgICAgVGV4
dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgIE5TQXJyYXkgKmRldGFpbHMgPSBb
aW5jb21pbmdSZXN1bHQgZ3JhbW1hckRldGFpbHNdOwogICAgICAgICAgICAgcmVzdWx0LnR5cGUg
PSBUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0g
cmVzdWx0UmFuZ2U7CisgICAgICAgICAgICByZXN1bHQuZGV0YWlscy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KGRldGFpbHMuY291bnQpOwogICAgICAgICAgICAgZm9yIChOU0RpY3Rpb25hcnkgKmlu
Y29taW5nRGV0YWlsIGluIGRldGFpbHMpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoaW5jb21p
bmdEZXRhaWwpOwogICAgICAgICAgICAgICAgIEdyYW1tYXJEZXRhaWwgZGV0YWlsOwpAQCAtMzYx
LDkgKzM2Miw4IEBAIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVj
a1RleHRPZlBhcmFncmFwaChTcGVsbERvY3VtZW50VGFnIHNwCiAgICAgICAgICAgICAgICAgZGV0
YWlsLnJhbmdlID0gZGV0YWlsTlNSYW5nZTsKICAgICAgICAgICAgICAgICBkZXRhaWwudXNlckRl
c2NyaXB0aW9uID0gW2luY29taW5nRGV0YWlsIG9iamVjdEZvcktleTpOU0dyYW1tYXJVc2VyRGVz
Y3JpcHRpb25dOwogICAgICAgICAgICAgICAgIE5TQXJyYXkgKmd1ZXNzZXMgPSBbaW5jb21pbmdE
ZXRhaWwgb2JqZWN0Rm9yS2V5Ok5TR3JhbW1hckNvcnJlY3Rpb25zXTsKLSAgICAgICAgICAgICAg
ICBmb3IgKE5TU3RyaW5nICpndWVzcyBpbiBndWVzc2VzKQotICAgICAgICAgICAgICAgICAgICBk
ZXRhaWwuZ3Vlc3Nlcy5hcHBlbmQoU3RyaW5nKGd1ZXNzKSk7Ci0gICAgICAgICAgICAgICAgcmVz
dWx0LmRldGFpbHMuYXBwZW5kKGRldGFpbCk7CisgICAgICAgICAgICAgICAgZGV0YWlsLmd1ZXNz
ZXMgPSBtYWtlVmVjdG9yPFN0cmluZz4oZ3Vlc3Nlcyk7CisgICAgICAgICAgICAgICAgcmVzdWx0
LmRldGFpbHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZGV0YWlsKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOwogICAgICAgICB9IGVsc2UgaWYg
KHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlTGluayAmJiBjaGVja2luZ1R5cGVzLmNv
bnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkxpbmspKSB7CkBAIC0zNzEsMzEgKzM3MSwzMSBAQCBW
ZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgoU3BlbGxEb2N1bWVudFRhZyBzcAogICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hl
Y2tpbmdUeXBlOjpMaW5rOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFuZ2U7
CiAgICAgICAgICAgICByZXN1bHQucmVwbGFjZW1lbnQgPSBbW2luY29taW5nUmVzdWx0IFVSTF0g
YWJzb2x1dGVTdHJpbmddOwotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKKyAg
ICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgIH0gZWxz
ZSBpZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVRdW90ZSAmJiBjaGVja2luZ1R5
cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlF1b3RlKSkgewogICAgICAgICAgICAgVGV4
dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgIHJlc3VsdC50eXBlID0gVGV4dENo
ZWNraW5nVHlwZTo6UXVvdGU7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5n
ZTsKICAgICAgICAgICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IFtpbmNvbWluZ1Jlc3VsdCByZXBs
YWNlbWVudFN0cmluZ107Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAg
ICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgfSBlbHNl
IGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZURhc2ggJiYgY2hlY2tpbmdUeXBl
cy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpEYXNoKSkgewogICAgICAgICAgICAgVGV4dENo
ZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgIHJlc3VsdC50eXBlID0gVGV4dENoZWNr
aW5nVHlwZTo6RGFzaDsKICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJhbmdlOwog
ICAgICAgICAgICAgcmVzdWx0LnJlcGxhY2VtZW50ID0gW2luY29taW5nUmVzdWx0IHJlcGxhY2Vt
ZW50U3RyaW5nXTsKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAg
ICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICB9IGVsc2UgaWYg
KHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlUmVwbGFjZW1lbnQgJiYgY2hlY2tpbmdU
eXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCkpIHsKICAgICAgICAg
ICAgIFRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICByZXN1bHQudHlwZSA9
IFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50OwogICAgICAgICAgICAgcmVzdWx0LnJhbmdl
ID0gcmVzdWx0UmFuZ2U7CiAgICAgICAgICAgICByZXN1bHQucmVwbGFjZW1lbnQgPSBbaW5jb21p
bmdSZXN1bHQgcmVwbGFjZW1lbnRTdHJpbmddOwotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQo
cmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAg
ICAgICAgIH0gZWxzZSBpZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVDb3JyZWN0
aW9uICYmIGNoZWNraW5nVHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6Q29ycmVjdGlv
bikpIHsKICAgICAgICAgICAgIFRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAg
ICByZXN1bHQudHlwZSA9IFRleHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rpb247CiAgICAgICAgICAg
ICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5nZTsKICAgICAgICAgICAgIHJlc3VsdC5yZXBsYWNl
bWVudCA9IFtpbmNvbWluZ1Jlc3VsdCByZXBsYWNlbWVudFN0cmluZ107Ci0gICAgICAgICAgICBy
ZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92
ZShyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yLmNwcAppbmRl
eCA3MzU3NmEyNDdjZTExNzUyNzU2NWZiMWQyNmI0Y2QwOWIyNDcyZTlmLi4xMjdhYzFlNDU3NzE1
YmY3ZGZiMGU5YzkzYTEwNDIwYjRmNWMzNTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yLmNwcApAQCAt
OTgsOSArOTgsOSBAQCB2b2lkIFdlYlBheW1lbnRDb29yZGluYXRvcjo6b3BlblBheW1lbnRTZXR1
cChjb25zdCBTdHJpbmcmIG1lcmNoYW50SWRlbnRpZmllciwgYwogCiBib29sIFdlYlBheW1lbnRD
b29yZGluYXRvcjo6c2hvd1BheW1lbnRVSShjb25zdCBVUkwmIG9yaWdpbmF0aW5nVVJMLCBjb25z
dCBWZWN0b3I8VVJMPiYgbGlua0ljb25VUkxzLCBjb25zdCBXZWJDb3JlOjpBcHBsZVBheVNlc3Np
b25QYXltZW50UmVxdWVzdCYgcGF5bWVudFJlcXVlc3QpCiB7Ci0gICAgVmVjdG9yPFN0cmluZz4g
bGlua0ljb25VUkxTdHJpbmdzOwotICAgIGZvciAoY29uc3QgYXV0byYgbGlua0ljb25VUkwgOiBs
aW5rSWNvblVSTHMpCi0gICAgICAgIGxpbmtJY29uVVJMU3RyaW5ncy5hcHBlbmQobGlua0ljb25V
Ukwuc3RyaW5nKCkpOworICAgIGF1dG8gbGlua0ljb25VUkxTdHJpbmdzID0gbGlua0ljb25VUkxz
Lm1hcChbXShhdXRvJiBsaW5rSWNvblVSTCkgeworICAgICAgICByZXR1cm4gbGlua0ljb25VUkwu
c3RyaW5nKCk7CisgICAgfSk7CiAKICAgICBib29sIHJlc3VsdDsKICAgICBpZiAoIXNlbmRTeW5j
KE1lc3NhZ2VzOjpXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTo6U2hvd1BheW1lbnRVSShtX3dl
YlBhZ2UuaWRlbnRpZmllcigpLCBtX3dlYlBhZ2Uud2ViUGFnZVByb3h5SWRlbnRpZmllcigpLCBv
cmlnaW5hdGluZ1VSTC5zdHJpbmcoKSwgbGlua0ljb25VUkxTdHJpbmdzLCBwYXltZW50UmVxdWVz
dCksIE1lc3NhZ2VzOjpXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTo6U2hvd1BheW1lbnRVSTo6
UmVwbHkocmVzdWx0KSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwCmluZGV4IGIw
ZmU4MzU3MjIzYjMxMzNmYzRkYjJmYmFhZDhlNzM5ZjVlM2I5ZDYuLjc4MGRjMjEwY2M4MTg2MTll
YmMyOWRhYjQ2YmM5Y2UzZTNmZTQ1MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHku
Y3BwCkBAIC04MDUsMTMgKzgwNSwxMiBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6
OnNldEZpbGVzRm9ySW5wdXRGaWxlVXBsb2FkKFdlYkNvcmU6OlBhZ2VJZGVudGlmaQogICAgIGF1
dG8mIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ+KCpj
b3JlRWxlbWVudCk7CiAgICAgVmVjdG9yPFJlZjxXZWJDb3JlOjpGaWxlPj4gZmlsZU9iamVjdHM7
CiAgICAgaWYgKGlucHV0RWxlbWVudC5tdWx0aXBsZSgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBm
aWxlcyA9IGlucHV0RWxlbWVudC5maWxlcygpKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGZp
bGUgOiBmaWxlcy0+ZmlsZXMoKSkKLSAgICAgICAgICAgICAgICBmaWxlT2JqZWN0cy5hcHBlbmQo
ZmlsZS5jb3B5UmVmKCkpOwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRvKiBmaWxlcyA9IGlu
cHV0RWxlbWVudC5maWxlcygpKQorICAgICAgICAgICAgZmlsZU9iamVjdHMuYXBwZW5kVmVjdG9y
KGZpbGVzLT5maWxlcygpKTsKICAgICB9CisgICAgZmlsZU9iamVjdHMucmVzZXJ2ZUNhcGFjaXR5
KGZpbGVPYmplY3RzLmNhcGFjaXR5KCkgKyBmaWxlbmFtZXMuc2l6ZSgpKTsKICAgICBmb3IgKGNv
bnN0IGF1dG8mIHBhdGggOiBmaWxlbmFtZXMpCi0gICAgICAgIGZpbGVPYmplY3RzLmFwcGVuZChX
ZWJDb3JlOjpGaWxlOjpjcmVhdGUoJmlucHV0RWxlbWVudC5kb2N1bWVudCgpLCBwYXRoKSk7Cisg
ICAgICAgIGZpbGVPYmplY3RzLnVuY2hlY2tlZEFwcGVuZChXZWJDb3JlOjpGaWxlOjpjcmVhdGUo
JmlucHV0RWxlbWVudC5kb2N1bWVudCgpLCBwYXRoKSk7CiAgICAgaW5wdXRFbGVtZW50LnNldEZp
bGVzKFdlYkNvcmU6OkZpbGVMaXN0OjpjcmVhdGUoV1RGTW92ZShmaWxlT2JqZWN0cykpKTsKIAog
ICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0ZDo6bnVsbG9wdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFu
YWdlci5jcHAKaW5kZXggN2M5ZDQ1NjlhNGU1MGIwNzEzYTc3YThiNGFjMjQwZmFlNDZkZGQxZS4u
ODEzYWYyODU5ODNjYjgyYzMwZjI0ZTI1MzcxNTVjN2YwZjNiNjEyOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQ
bGF5ZXJNYW5hZ2VyLmNwcApAQCAtMTYwLDggKzE2MCw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxNZWRp
YVBsYXllclByaXZhdGVJbnRlcmZhY2U+IFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlcjo6Y3JlYXRl
UmVtCiAgICAgcHJveHlDb25maWd1cmF0aW9uLmlzVmlkZW8gPSBwbGF5ZXItPmlzVmlkZW9QbGF5
ZXIoKTsKIAogI2lmIEVOQUJMRShBVkZfQ0FQVElPTlMpCi0gICAgZm9yIChjb25zdCBhdXRvJiB0
cmFjayA6IHBsYXllci0+b3V0T2ZCYW5kVHJhY2tTb3VyY2VzKCkpCi0gICAgICAgIHByb3h5Q29u
ZmlndXJhdGlvbi5vdXRPZkJhbmRUcmFja0RhdGEuYXBwZW5kKHRyYWNrLT5kYXRhKCkpOworICAg
IHByb3h5Q29uZmlndXJhdGlvbi5vdXRPZkJhbmRUcmFja0RhdGEgPSBwbGF5ZXItPm91dE9mQmFu
ZFRyYWNrU291cmNlcygpLm1hcChbXShhdXRvJiB0cmFjaykgeworICAgICAgICByZXR1cm4gdHJh
Y2stPmRhdGEoKTsKKyAgICB9KTsKICNlbmRpZgogCiAgICAgYXV0byBkb2N1bWVudFNlY3VyaXR5
T3JpZ2luID0gcGxheWVyLT5kb2N1bWVudFNlY3VyaXR5T3JpZ2luKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1NvdXJjZUJ1ZmZlclByaXZhdGVSZW1v
dGUuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9Tb3VyY2VCdWZmZXJQ
cml2YXRlUmVtb3RlLmNwcAppbmRleCA5NjZmYzkzYjc3YWZhYTNlNjIwOGQ3YWJhNWFlZDJjN2E5
NGM3NGIyLi40ZWYxNjQwYTQwMTAwNmE2YjhmNjljYzUwMTE2NGE4YmQxOTBlYjkxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1NvdXJjZUJ1ZmZlclByaXZh
dGVSZW1vdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvU291
cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZS5jcHAKQEAgLTMzOCwxNiArMzM4LDExIEBAIHZvaWQgU291
cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZTo6dXBkYXRlVHJhY2tJZHMoVmVjdG9yPHN0ZDo6cGFpcjxB
dG9tU3RyaW5nLCBBdG9tCiAgICAgaWYgKCFtX2dwdVByb2Nlc3NDb25uZWN0aW9uKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBWZWN0b3I8c3RkOjpwYWlyPFRyYWNrUHJpdmF0ZVJlbW90ZUlkZW50
aWZpZXIsIFRyYWNrUHJpdmF0ZVJlbW90ZUlkZW50aWZpZXI+PiBpZGVudGlmaWVyUGFpcnM7Ci0K
LSAgICBmb3IgKGF1dG8mIHRyYWNrSWRQYWlyIDogdHJhY2tJZFBhaXJzKSB7CisgICAgYXV0byBp
ZGVudGlmaWVyUGFpcnMgPSB0cmFja0lkUGFpcnMubWFwKFt0aGlzXShhdXRvJiB0cmFja0lkUGFp
cikgewogICAgICAgICBBU1NFUlQobV9wcmV2VHJhY2tJZGVudGlmaWVyTWFwLmNvbnRhaW5zKHRy
YWNrSWRQYWlyLmZpcnN0KSk7CiAgICAgICAgIEFTU0VSVChtX3RyYWNrSWRlbnRpZmllck1hcC5j
b250YWlucyh0cmFja0lkUGFpci5zZWNvbmQpKTsKLQotICAgICAgICBhdXRvIG9sZElkZW50aWZp
ZXIgPSBtX3ByZXZUcmFja0lkZW50aWZpZXJNYXAudGFrZSh0cmFja0lkUGFpci5maXJzdCk7Ci0g
ICAgICAgIGF1dG8gbmV3SWRlbnRpZmllciA9IG1fdHJhY2tJZGVudGlmaWVyTWFwLmdldCh0cmFj
a0lkUGFpci5zZWNvbmQpOwotICAgICAgICBpZGVudGlmaWVyUGFpcnMuYXBwZW5kKHN0ZDo6bWFr
ZV9wYWlyKG9sZElkZW50aWZpZXIsIG5ld0lkZW50aWZpZXIpKTsKLSAgICB9CisgICAgICAgIHJl
dHVybiBzdGQ6OnBhaXIgeyBtX3ByZXZUcmFja0lkZW50aWZpZXJNYXAudGFrZSh0cmFja0lkUGFp
ci5maXJzdCksIG1fdHJhY2tJZGVudGlmaWVyTWFwLmdldCh0cmFja0lkUGFpci5zZWNvbmQpIH07
CisgICAgfSk7CiAKICAgICBtX2dwdVByb2Nlc3NDb25uZWN0aW9uLT5jb25uZWN0aW9uKCkuc2Vu
ZChNZXNzYWdlczo6UmVtb3RlU291cmNlQnVmZmVyUHJveHk6OlVwZGF0ZVRyYWNrSWRzKGlkZW50
aWZpZXJQYWlycyksIG1fcmVtb3RlU291cmNlQnVmZmVySWRlbnRpZmllcik7CiB9CkBAIC0zODMs
MjcgKzM3OCwzMCBAQCB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGU6OnNvdXJjZUJ1ZmZl
clByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZQogICAgIHNlZ21lbnQuZHVyYXRp
b24gPSBzZWdtZW50SW5mby5kdXJhdGlvbjsKIAogICAgIG1fcHJldlRyYWNrSWRlbnRpZmllck1h
cC5zd2FwKG1fdHJhY2tJZGVudGlmaWVyTWFwKTsKKyAgICBzZWdtZW50LmF1ZGlvVHJhY2tzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoc2VnbWVudEluZm8uYXVkaW9UcmFja3Muc2l6ZSgpKTsKICAg
ICBmb3IgKGF1dG8mIGF1ZGlvVHJhY2sgOiBzZWdtZW50SW5mby5hdWRpb1RyYWNrcykgewogICAg
ICAgICBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQ6OkF1
ZGlvVHJhY2tJbmZvcm1hdGlvbiBpbmZvOwogICAgICAgICBpbmZvLnRyYWNrID0gbV9tZWRpYVBs
YXllclByaXZhdGUtPmF1ZGlvVHJhY2tQcml2YXRlUmVtb3RlKGF1ZGlvVHJhY2suaWRlbnRpZmll
cik7CiAgICAgICAgIGluZm8uZGVzY3JpcHRpb24gPSBSZW1vdGVNZWRpYURlc2NyaXB0aW9uOjpj
cmVhdGUoYXVkaW9UcmFjay5kZXNjcmlwdGlvbik7Ci0gICAgICAgIHNlZ21lbnQuYXVkaW9UcmFj
a3MuYXBwZW5kKGluZm8pOworICAgICAgICBzZWdtZW50LmF1ZGlvVHJhY2tzLnVuY2hlY2tlZEFw
cGVuZChpbmZvKTsKICAgICAgICAgbV90cmFja0lkZW50aWZpZXJNYXAuYWRkKGluZm8udHJhY2st
PmlkKCksIGF1ZGlvVHJhY2suaWRlbnRpZmllcik7CiAgICAgfQogCisgICAgc2VnbWVudC52aWRl
b1RyYWNrcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNlZ21lbnRJbmZvLnZpZGVvVHJhY2tzLnNp
emUoKSk7CiAgICAgZm9yIChhdXRvJiB2aWRlb1RyYWNrIDogc2VnbWVudEluZm8udmlkZW9UcmFj
a3MpIHsKICAgICAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25T
ZWdtZW50OjpWaWRlb1RyYWNrSW5mb3JtYXRpb24gaW5mbzsKICAgICAgICAgaW5mby50cmFjayA9
IG1fbWVkaWFQbGF5ZXJQcml2YXRlLT52aWRlb1RyYWNrUHJpdmF0ZVJlbW90ZSh2aWRlb1RyYWNr
LmlkZW50aWZpZXIpOwogICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0gUmVtb3RlTWVkaWFEZXNj
cmlwdGlvbjo6Y3JlYXRlKHZpZGVvVHJhY2suZGVzY3JpcHRpb24pOwotICAgICAgICBzZWdtZW50
LnZpZGVvVHJhY2tzLmFwcGVuZChpbmZvKTsKKyAgICAgICAgc2VnbWVudC52aWRlb1RyYWNrcy51
bmNoZWNrZWRBcHBlbmQoaW5mbyk7CiAgICAgICAgIG1fdHJhY2tJZGVudGlmaWVyTWFwLmFkZChp
bmZvLnRyYWNrLT5pZCgpLCB2aWRlb1RyYWNrLmlkZW50aWZpZXIpOwogICAgIH0KIAorICAgIHNl
Z21lbnQudGV4dFRyYWNrcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNlZ21lbnRJbmZvLnRleHRU
cmFja3Muc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIHRleHRUcmFjayA6IHNlZ21lbnRJbmZvLnRl
eHRUcmFja3MpIHsKICAgICAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6
YXRpb25TZWdtZW50OjpUZXh0VHJhY2tJbmZvcm1hdGlvbiBpbmZvOwogICAgICAgICBpbmZvLnRy
YWNrID0gbV9tZWRpYVBsYXllclByaXZhdGUtPnRleHRUcmFja1ByaXZhdGVSZW1vdGUodGV4dFRy
YWNrLmlkZW50aWZpZXIpOwogICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0gUmVtb3RlTWVkaWFE
ZXNjcmlwdGlvbjo6Y3JlYXRlKHRleHRUcmFjay5kZXNjcmlwdGlvbik7Ci0gICAgICAgIHNlZ21l
bnQudGV4dFRyYWNrcy5hcHBlbmQoaW5mbyk7CisgICAgICAgIHNlZ21lbnQudGV4dFRyYWNrcy51
bmNoZWNrZWRBcHBlbmQoaW5mbyk7CiAgICAgICAgIG1fdHJhY2tJZGVudGlmaWVyTWFwLmFkZChp
bmZvLnRyYWNrLT5pZCgpLCB0ZXh0VHJhY2suaWRlbnRpZmllcik7CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3Mu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNz
LmNwcAppbmRleCBkMDcwYzJiNzlkZjQwY2FjYjQxOGYwNjc4MjY3ZTRjM2I0YTU0NjFjLi4xYzIy
NzM0MzI1NDVhYmYzYzkwNmI4NWRjMTdkOWI5OWQ0ZTFmN2FkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAKQEAg
LTM5Miw5ICszOTIsOSBAQCBMaWJXZWJSVENDb2RlY3M6OkVuY29kZXIqIExpYldlYlJUQ0NvZGVj
czo6Y3JlYXRlRW5jb2RlcihUeXBlIHR5cGUsIGNvbnN0IHN0ZDo6bQogICAgIGVuY29kZXItPmlk
ZW50aWZpZXIgPSBSVENFbmNvZGVySWRlbnRpZmllcjo6Z2VuZXJhdGVUaHJlYWRTYWZlKCk7CiAg
ICAgZW5jb2Rlci0+Y29kZWNUeXBlID0gdG9XZWJSVENDb2RlY1R5cGUodHlwZSk7CiAKLSAgICBW
ZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gcGFyYW1ldGVyczsKLSAgICBmb3IgKGF1
dG8mIGtleVZhbHVlIDogZm9ybWF0UGFyYW1ldGVycykKLSAgICAgICAgcGFyYW1ldGVycy5hcHBl
bmQoc3RkOjptYWtlX3BhaXIoU3RyaW5nOjpmcm9tVVRGOChrZXlWYWx1ZS5maXJzdC5kYXRhKCks
IGtleVZhbHVlLmZpcnN0Lmxlbmd0aCgpKSwgU3RyaW5nOjpmcm9tVVRGOChrZXlWYWx1ZS5zZWNv
bmQuZGF0YSgpLCBrZXlWYWx1ZS5zZWNvbmQubGVuZ3RoKCkpKSk7CisgICAgYXV0byBwYXJhbWV0
ZXJzID0gV1RGOjptYXAoZm9ybWF0UGFyYW1ldGVycywgW10oYXV0byYgZW50cnkpIHsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6cGFpciB7IFN0cmluZzo6ZnJvbVVURjgoZW50cnkuZmlyc3QuZGF0YSgp
LCBlbnRyeS5maXJzdC5sZW5ndGgoKSksIFN0cmluZzo6ZnJvbVVURjgoZW50cnkuc2Vjb25kLmRh
dGEoKSwgZW50cnkuc2Vjb25kLmxlbmd0aCgpKSB9OworICAgIH0pOwogCiAgICAgZW5zdXJlR1BV
UHJvY2Vzc0Nvbm5lY3Rpb25BbmREaXNwYXRjaFRvVGhyZWFkKFt0aGlzLCBlbmNvZGVyID0gV1RG
TW92ZShlbmNvZGVyKSwgdHlwZSwgcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyldKCkg
bXV0YWJsZSB7CiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5
LmNwcAppbmRleCBkODU0MmEyYjEwYjFiM2UxNTM2MTQxNTQxMTVlZjdlY2VjNDRlYjg4Li42Zjhm
NzQ1MzU5MjQ1M2UwZTYxODY3NjEyNDRlMGI3NzkyMjFkZTc5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3Zlcmxh
eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9j
L1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwCkBAIC0xOTcsMTEgKzE5NywxMyBAQCBwcml2YXRlOgog
ICAgICAgICBhdXRvIHdrTmFtZXMgPSBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29w
eUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyh0b0FQSSgmcGFnZU92ZXJsYXkpLCBwYXJhbWVy
aXplZE5hbWVzLCBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuYmFzZS5jbGllbnRJbmZv
KTsKIAogICAgICAgICBzaXplX3QgY291bnQgPSBXS0FycmF5R2V0U2l6ZSh3a05hbWVzKTsKKyAg
ICAgICAgbmFtZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjb3VudCk7CiAgICAgICAgIGZvciAo
c2l6ZV90IGsgPSAwOyBrIDwgY291bnQ7IGsrKykgewogICAgICAgICAgICAgV0tUeXBlUmVmIGl0
ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgod2tOYW1lcywgayk7CiAgICAgICAgICAgICBpZiAo
V2ViS2l0Ojp0b0ltcGwoaXRlbSktPnR5cGUoKSA9PSBBUEk6OlN0cmluZzo6QVBJVHlwZSkKLSAg
ICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoV2ViS2l0Ojp0b1dURlN0cmluZyhzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4oaXRlbSkpKTsKKyAgICAgICAgICAgICAgICBuYW1lcy51bmNoZWNrZWRB
cHBlbmQoV2ViS2l0Ojp0b1dURlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oaXRlbSkp
KTsKICAgICAgICAgfQorICAgICAgICBuYW1lcy5zaHJpbmtUb0ZpdCgpOwogCiAgICAgICAgIHJl
dHVybiBuYW1lczsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvU2Vzc2lvblN0YXRlQ29udmVyc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvU2Vzc2lvblN0YXRlQ29udmVyc2lvbi5jcHAKaW5k
ZXggYzhmMjQ4YTY0NzY1NzZhMjkyYzc1ZDVmYWE2OGY1YWM2M2E0NzVjOC4uNTY3ZDQ3NTFiZWU4
M2EzYjNmNGY2ZTBmYTIzNzdiZDAwNjM1MGEyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1Nlc3Npb25TdGF0ZUNvbnZlcnNpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9TZXNzaW9uU3RhdGVDb252
ZXJzaW9uLmNwcApAQCAtOTksMTAgKzk5LDkgQEAgc3RhdGljIEZyYW1lU3RhdGUgdG9GcmFtZVN0
YXRlKGNvbnN0IEhpc3RvcnlJdGVtJiBoaXN0b3J5SXRlbSkKICAgICBmcmFtZVN0YXRlLm9ic2N1
cmVkSW5zZXRzID0gaGlzdG9yeUl0ZW0ub2JzY3VyZWRJbnNldHMoKTsKICNlbmRpZgogCi0gICAg
Zm9yIChhdXRvJiBjaGlsZEhpc3RvcnlJdGVtIDogaGlzdG9yeUl0ZW0uY2hpbGRyZW4oKSkgewot
ICAgICAgICBGcmFtZVN0YXRlIGNoaWxkRnJhbWVTdGF0ZSA9IHRvRnJhbWVTdGF0ZShjaGlsZEhp
c3RvcnlJdGVtKTsKLSAgICAgICAgZnJhbWVTdGF0ZS5jaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShj
aGlsZEZyYW1lU3RhdGUpKTsKLSAgICB9CisgICAgZnJhbWVTdGF0ZS5jaGlsZHJlbiA9IGhpc3Rv
cnlJdGVtLmNoaWxkcmVuKCkubWFwKFtdKGF1dG8mIGNoaWxkSGlzdG9yeUl0ZW0pIHsKKyAgICAg
ICAgcmV0dXJuIHRvRnJhbWVTdGF0ZShjaGlsZEhpc3RvcnlJdGVtKTsKKyAgICB9KTsKIAogICAg
IHJldHVybiBmcmFtZVN0YXRlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXIuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRldmljZU9yaWVu
dGF0aW9uVXBkYXRlUHJvdmlkZXIuY3BwCmluZGV4IGY5YWY5YWI5M2Y3ZTAxMjg3NzM2NTBjMWQy
NDk1YWRkZTM5ZmQ0MzUuLjFkMTFmNDIzYzE3ODhkNTk3ZmYyNTc4ZWU2MGQ5Y2I2MTZhMGRkMzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJE
ZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRl
ci5jcHAKQEAgLTgzLDExICs4Myw3IEBAIHZvaWQgV2ViRGV2aWNlT3JpZW50YXRpb25VcGRhdGVQ
cm92aWRlcjo6c3RvcFVwZGF0aW5nRGV2aWNlTW90aW9uKFdlYkNvcmU6Ok1vdGlvCiAKIHZvaWQg
V2ViRGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlcjo6ZGV2aWNlT3JpZW50YXRpb25DaGFu
Z2VkKGRvdWJsZSBhbHBoYSwgZG91YmxlIGJldGEsIGRvdWJsZSBnYW1tYSwgZG91YmxlIGNvbXBh
c3NIZWFkaW5nLCBkb3VibGUgY29tcGFzc0FjY3VyYWN5KQogewotICAgIFZlY3RvcjxXZWFrUHRy
PFdlYkNvcmU6Ok1vdGlvbk1hbmFnZXJDbGllbnQ+PiBjbGllbnRzOwotICAgIGZvciAoYXV0byYg
Y2xpZW50IDogbV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudHMpCi0gICAgICAgIGNsaWVudHMuYXBw
ZW5kKGNsaWVudCk7Ci0KLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IGNsaWVudHMpIHsKKyAgICBm
b3IgKGF1dG8mIGNsaWVudCA6IGNvcHlUb1ZlY3Rvck9mPFdlYWtQdHI8V2ViQ29yZTo6TW90aW9u
TWFuYWdlckNsaWVudD4+KG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRzKSkgewogICAgICAgICBp
ZiAoY2xpZW50KQogICAgICAgICAgICAgY2xpZW50LT5vcmllbnRhdGlvbkNoYW5nZWQoYWxwaGEs
IGJldGEsIGdhbW1hLCBjb21wYXNzSGVhZGluZywgY29tcGFzc0FjY3VyYWN5KTsKICAgICB9CkBA
IC05NSwxMSArOTEsNyBAQCB2b2lkIFdlYkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXI6
OmRldmljZU9yaWVudGF0aW9uQ2hhbmdlZChkb3VibGUgYWxwaGEsCiAKIHZvaWQgV2ViRGV2aWNl
T3JpZW50YXRpb25VcGRhdGVQcm92aWRlcjo6ZGV2aWNlTW90aW9uQ2hhbmdlZChkb3VibGUgeEFj
Y2VsZXJhdGlvbiwgZG91YmxlIHlBY2NlbGVyYXRpb24sIGRvdWJsZSB6QWNjZWxlcmF0aW9uLCBk
b3VibGUgeEFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHksIGRvdWJsZSB5QWNjZWxlcmF0aW9u
SW5jbHVkaW5nR3Jhdml0eSwgZG91YmxlIHpBY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5LCBz
dGQ6Om9wdGlvbmFsPGRvdWJsZT4geFJvdGF0aW9uUmF0ZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+
IHlSb3RhdGlvblJhdGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB6Um90YXRpb25SYXRlKQogewot
ICAgIFZlY3RvcjxXZWFrUHRyPFdlYkNvcmU6Ok1vdGlvbk1hbmFnZXJDbGllbnQ+PiBjbGllbnRz
OwotICAgIGZvciAoYXV0byYgY2xpZW50IDogbV9kZXZpY2VNb3Rpb25DbGllbnRzKQotICAgICAg
ICBjbGllbnRzLmFwcGVuZChjbGllbnQpOwotICAgIAotICAgIGZvciAoYXV0byYgY2xpZW50IDog
Y2xpZW50cykgeworICAgIGZvciAoYXV0byYgY2xpZW50IDogY29weVRvVmVjdG9yT2Y8V2Vha1B0
cjxXZWJDb3JlOjpNb3Rpb25NYW5hZ2VyQ2xpZW50Pj4obV9kZXZpY2VNb3Rpb25DbGllbnRzKSkg
ewogICAgICAgICBpZiAoY2xpZW50KQogICAgICAgICAgICAgY2xpZW50LT5tb3Rpb25DaGFuZ2Vk
KHhBY2NlbGVyYXRpb24sIHlBY2NlbGVyYXRpb24sIHpBY2NlbGVyYXRpb24sIHhBY2NlbGVyYXRp
b25JbmNsdWRpbmdHcmF2aXR5LCB5QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwgIHpBY2Nl
bGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5LCB4Um90YXRpb25SYXRlLCB5Um90YXRpb25SYXRlLCB6
Um90YXRpb25SYXRlKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5jcHAK
aW5kZXggZGZkZGExNzY5OTM2MDA0NDdhMGM5M2NjODQ2MGY1ZTY4YjJjMjQ4MS4uMzE4ZjdjM2Qy
OTMzMmMwMmFkMmNlMzBkOTBlN2NmZTZmNTVjMzIxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJk
T3ZlcnJpZGVzLmNwcApAQCAtNzEsMTggKzcxLDEzIEBAIHZvaWQgV2ViUGFzdGVib2FyZE92ZXJy
aWRlczo6cmVtb3ZlT3ZlcnJpZGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QK
IAogVmVjdG9yPFN0cmluZz4gV2ViUGFzdGVib2FyZE92ZXJyaWRlczo6b3ZlcnJpZGRlblR5cGVz
KGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7Ci0gICAgVmVjdG9yPFN0cmluZz4gcmVz
dWx0OwotCiAgICAgYXV0byBpdCA9IG1fb3ZlcnJpZGVzTWFwLmZpbmQocGFzdGVib2FyZE5hbWUp
OwogICAgIGlmIChpdCA9PSBtX292ZXJyaWRlc01hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIEFTU0VSVChpdC0+dmFsdWUpOwogCi0g
ICAgZm9yIChTdHJpbmcmIHR5cGUgOiBpdC0+dmFsdWUtPmtleXMoKSkKLSAgICAgICAgcmVzdWx0
LmFwcGVuZCh0eXBlKTsKLQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGNvcHlUb1Zl
Y3RvcihpdC0+dmFsdWUtPmtleXMoKSk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UGFz
dGVib2FyZEl0ZW1JbmZvPiBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpvdmVycmlkZGVuSW5mbyhj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlNwZWVjaFN5bnRoZXNpc0NsaWVudC5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViU3BlZWNoU3ludGhlc2lz
Q2xpZW50LmNwcAppbmRleCBjNGQwZGNjMDNkNWRhNmEwNDgzZWRmNTZkMWU0Mzk1MjdiYzk1Zjg4
Li5jNTdlNzgwOWIyZWUxNjZkZDZmNjg4YmUyMmE4NTljN2RhZGRhOGZhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViU3BlZWNoU3ludGhlc2lz
Q2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViU3BlZWNoU3ludGhlc2lzQ2xpZW50LmNwcApAQCAtNDIsOSArNDIsOSBAQCBjb25zdCBWZWN0
b3I8UmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2U+PiYgV2ViU3Bl
ZWNoU3ludGhlc2lzQwogICAgIFZlY3RvcjxXZWJTcGVlY2hTeW50aGVzaXNWb2ljZT4gdm9pY2VM
aXN0OwogICAgIG1fcGFnZS5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTcGVlY2hT
eW50aGVzaXNWb2ljZUxpc3QoKSwgdm9pY2VMaXN0KTsKIAotICAgIG1fdm9pY2VzLmNsZWFyKCk7
Ci0gICAgZm9yIChhdXRvJiB2b2ljZSA6IHZvaWNlTGlzdCkKLSAgICAgICAgbV92b2ljZXMuYXBw
ZW5kKFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2U6OmNyZWF0ZSh2b2ljZS52
b2ljZVVSSSwgdm9pY2UubmFtZSwgdm9pY2UubGFuZywgdm9pY2UubG9jYWxTZXJ2aWNlLCB2b2lj
ZS5kZWZhdWx0TGFuZykpOworICAgIG1fdm9pY2VzID0gdm9pY2VMaXN0Lm1hcChbXShhdXRvJiB2
b2ljZSkgLT4gUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2U+IHsK
KyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2U6OmNy
ZWF0ZSh2b2ljZS52b2ljZVVSSSwgdm9pY2UubmFtZSwgdm9pY2UubGFuZywgdm9pY2UubG9jYWxT
ZXJ2aWNlLCB2b2ljZS5kZWZhdWx0TGFuZyk7CisgICAgfSk7CiAgICAgcmV0dXJuIG1fdm9pY2Vz
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5k
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29u
dHJvbGxlci5jcHAKaW5kZXggYjUxMzRkMGQyYzVkN2M1MmY2ZmFjOTY4MDQ0MWFjYzNlZWJmNjVm
ZC4uMWQ2NDNiNmI0Mjg4ZDA4ZTAzOGM0NjI1ZDA1NDlkZTY4YWYyYWE3NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcApAQCAt
MjcyLDEwICsyNzIsOSBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpmaW5kU3RyaW5nTWF0Y2hlcyhj
b25zdCBTdHJpbmcmIHN0cmluZywgT3B0aW9uU2V0PEZpbmRPcHRpbwogICAgIGF1dG8gcmVzdWx0
ID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5maW5kVGV4dE1hdGNoZXMoc3RyaW5nLCBjb3JlKG9w
dGlvbnMpLCBtYXhNYXRjaENvdW50KTsKICAgICBtX2ZpbmRNYXRjaGVzID0gV1RGTW92ZShyZXN1
bHQucmFuZ2VzKTsKIAotICAgIFZlY3RvcjxWZWN0b3I8SW50UmVjdD4+IG1hdGNoUmVjdHM7Ci0g
ICAgZm9yIChhdXRvJiByYW5nZSA6IG1fZmluZE1hdGNoZXMpCi0gICAgICAgIG1hdGNoUmVjdHMu
YXBwZW5kKFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMocmFuZ2UpKTsKLQorICAgIGF1
dG8gbWF0Y2hSZWN0cyA9IG1fZmluZE1hdGNoZXMubWFwKFtdKGF1dG8mIHJhbmdlKSB7CisgICAg
ICAgIHJldHVybiBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKHJhbmdlKTsKKyAgICB9
KTsKICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmluZFN0
cmluZ01hdGNoZXMoc3RyaW5nLCBtYXRjaFJlY3RzLCByZXN1bHQuaW5kZXhGb3JTZWxlY3Rpb24p
KTsKIAogICAgIGlmICghb3B0aW9ucy5jb250YWlucyhGaW5kT3B0aW9uczo6U2hvd092ZXJsYXkp
ICYmICFvcHRpb25zLmNvbnRhaW5zKEZpbmRPcHRpb25zOjpTaG93RmluZEluZGljYXRvcikpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRS
YW5nZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
Rm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcAppbmRleCA3NDgwMmM0Nzg3NTVmZmU2MWI5MzA5
MmNiY2E2ZDBhYzdjY2M5YzgzLi4yYzliNDU3ZGJjYTA3YTZlYjEyNjg5YTc4ZjBkZDViMjkxNGEy
MWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3Vu
ZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAKQEAgLTI0OCwxMSArMjQ4LDEw
IEBAIHZvaWQgV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpkcmF3UmVjdChXZWJDb3JlOjpQ
YWdlT3ZlcmxheSYsIFdlYkNvcmU6OkdyYXBoCiAgICAgICAgIGF1dG8gdGV4dEJvdW5kaW5nUmVj
dEluUm9vdFZpZXdDb29yZGluYXRlcyA9IG1fdGV4dEluZGljYXRvci0+dGV4dEJvdW5kaW5nUmVj
dEluUm9vdFZpZXdDb29yZGluYXRlcygpOwogICAgICAgICBhdXRvIHRleHRSZWN0c0luQm91bmRp
bmdSZWN0Q29vcmRpbmF0ZXMgPSBtX3RleHRJbmRpY2F0b3ItPnRleHRSZWN0c0luQm91bmRpbmdS
ZWN0Q29vcmRpbmF0ZXMoKTsKIAotICAgICAgICBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiB0
ZXh0UmVjdHNJblJvb3RWaWV3Q29vcmRpbmF0ZXM7Ci0gICAgICAgIGZvciAoYXV0byByZWN0IDog
dGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcykgeworICAgICAgICBhdXRvIHRleHRS
ZWN0c0luUm9vdFZpZXdDb29yZGluYXRlcyA9IHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRp
bmF0ZXMubWFwKFsmXShhdXRvIHJlY3QpIHsKICAgICAgICAgICAgIHJlY3QubW92ZUJ5KHRleHRC
b3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKSk7Ci0gICAgICAgICAg
ICB0ZXh0UmVjdHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMuYXBwZW5kKHJlY3QpOwotICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gcmVjdDsKKyAgICAgICAgfSk7CiAKICAgICAgICAgYXV0byBw
YXRocyA9IFdlYkNvcmU6OlBhdGhVdGlsaXRpZXM6OnBhdGhzV2l0aFNocmlua1dyYXBwZWRSZWN0
cyh0ZXh0UmVjdHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMsIGluZGljYXRvclJhZGl1cyk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggMzQ5ODdi
ZGU2NGZkZmYwOTA4MzJjMzc1NDJiOTM1MTNhNjFhZGNjYi4uNDg3NjgwNDZhMTg5OWU5NDI2OGQ3
ZTI5NTQ5ODA1MTI2MDA1NWZkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAKQEAgLTc4NDAsMTQgKzc4NDAsMTYgQEAgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5JiBXZWJQYWdlOjplbnN1cmVSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKQog
VmVjdG9yPFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPj4gV2ViUGFnZTo6Y29uc3VtZVNhbmRib3hF
eHRlbnNpb25zKFZlY3RvcjxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+JiYgc2FuZGJveEV4dGVu
c2lvbnMpCiB7CiAgICAgVmVjdG9yPFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPj4gZHJhZ1NhbmRi
b3hFeHRlbnNpb25zOworICAgIGRyYWdTYW5kYm94RXh0ZW5zaW9ucy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KHNhbmRib3hFeHRlbnNpb25zLnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiBzYW5kYm94
RXh0ZW5zaW9uIDogc2FuZGJveEV4dGVuc2lvbnMpIHsKICAgICAgICAgYXV0byBleHRlbnNpb24g
PSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUoV1RGTW92ZShzYW5kYm94RXh0ZW5zaW9uKSk7CiAg
ICAgICAgIGlmICghZXh0ZW5zaW9uKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGJv
b2wgb2sgPSBleHRlbnNpb24tPmNvbnN1bWUoKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChvaywg
b2spOwotICAgICAgICBkcmFnU2FuZGJveEV4dGVuc2lvbnMuYXBwZW5kKFdURk1vdmUoZXh0ZW5z
aW9uKSk7CisgICAgICAgIGRyYWdTYW5kYm94RXh0ZW5zaW9ucy51bmNoZWNrZWRBcHBlbmQoV1RG
TW92ZShleHRlbnNpb24pKTsKICAgICB9CisgICAgZHJhZ1NhbmRib3hFeHRlbnNpb25zLnNocmlu
a1RvRml0KCk7CiAgICAgcmV0dXJuIGRyYWdTYW5kYm94RXh0ZW5zaW9uczsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0g
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRl
eCA5ZGMwMGRhMjc3MGMxOTM5ODkxYTMwMGYyMzM3NDk2YTljOGU3MDFkLi5iZDM2NzIwNzViNzU3
NjhjODQxNDc3OGZjNjY1ZjVkNzViNGUyNGFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtNzU0LDExICs3NTQsOCBAQCB2
b2lkIFdlYlBhZ2U6OmhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayhGcmFtZVNlbGVjdGlvbiYg
c2VsZWN0aW9uLCBjb25zdCBWZWN0bwogCiAgICAgTlNEYXRhICpzZWxlY3Rpb25EYXRhID0gW2F0
dHJpYnV0ZWRTZWxlY3Rpb24gUlRGREZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbYXR0cmlidXRl
ZFNlbGVjdGlvbiBsZW5ndGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6QHsgfV07CiAKLSAgICBWZWN0
b3I8dWludDhfdD4gc2VsZWN0aW9uRGF0YVZlY3RvcjsKLSAgICBzZWxlY3Rpb25EYXRhVmVjdG9y
LmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzZWxlY3Rpb25EYXRhLmJ5
dGVzKSwgc2VsZWN0aW9uRGF0YS5sZW5ndGgpOwotCiAgICAgZmx1c2hQZW5kaW5nRWRpdG9yU3Rh
dGVVcGRhdGUoKTsKLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3dDb250ZXh0
TWVudShDb250ZXh0TWVudUNvbnRleHREYXRhKHBvaW50LCBzZWxlY3Rpb25EYXRhVmVjdG9yLCBw
aG9uZU51bWJlcnMsIHNlbGVjdGlvbi5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSwg
VXNlckRhdGEoKSkpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2hvd0NvbnRl
eHRNZW51KENvbnRleHRNZW51Q29udGV4dERhdGEocG9pbnQsIFZlY3RvciB7IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNlbGVjdGlvbkRhdGEuYnl0ZXMpLCBzZWxlY3Rpb25EYXRh
Lmxlbmd0aCB9LCBwaG9uZU51bWJlcnMsIHNlbGVjdGlvbi5zZWxlY3Rpb24oKS5pc0NvbnRlbnRF
ZGl0YWJsZSgpKSwgVXNlckRhdGEoKSkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmhhbmRsZUltYWdl
U2VydmljZUNsaWNrKGNvbnN0IEludFBvaW50JiBwb2ludCwgSW1hZ2UmIGltYWdlLCBIVE1MSW1h
Z2VFbGVtZW50JiBlbGVtZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3Bw
CmluZGV4IDc5OTYxM2QzNzc0MjM2M2JmYmRjZDk1Mjk3OTk2MjIwNmYwMjI4YTguLjg5OTBlZGQ3
NmNhYjk2YzJkZWNkM2I5NjA1NGNmZjYyOTViYjBjZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUHJvY2Vzcy5jcHAKQEAgLTE0NTIsOCArMTQ1MiwxMCBAQCB2b2lkIFdlYlByb2Nlc3M6
OmZldGNoV2Vic2l0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gd2Vic2l0ZURhdGFU
eXBlcywgQwogewogICAgIFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhOwogICAgIGlmICh3ZWJzaXRl
RGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TWVtb3J5Q2FjaGUpKSB7Ci0gICAg
ICAgIGZvciAoYXV0byYgb3JpZ2luIDogTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpLm9yaWdpbnNX
aXRoQ2FjaGUoc2Vzc2lvbklEKCkpKQotICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcy5h
cHBlbmQoV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLT5kYXRhKCksIFdlYnNpdGVEYXRhVHlw
ZTo6TWVtb3J5Q2FjaGUsIDAgfSk7CisgICAgICAgIGF1dG8gb3JpZ2lucyA9IE1lbW9yeUNhY2hl
OjpzaW5nbGV0b24oKS5vcmlnaW5zV2l0aENhY2hlKHNlc3Npb25JRCgpKTsKKyAgICAgICAgd2Vi
c2l0ZURhdGEuZW50cmllcyA9IFdURjo6bWFwKG9yaWdpbnMsIFtdKGF1dG8mIG9yaWdpbikgewor
ICAgICAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbi0+ZGF0YSgpLCBX
ZWJzaXRlRGF0YVR5cGU6Ok1lbW9yeUNhY2hlLCAwIH07CisgICAgICAgIH0pOwogICAgIH0KICAg
ICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHdlYnNpdGVEYXRhKSk7CiB9Cg==
</data>
<flag name="commit-queue"
          id="479645"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452565</attachid>
            <date>2022-02-18 12:53:19 -0800</date>
            <delta_ts>2022-02-18 13:51:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236852-20220218125318.patch</filename>
            <type>text/plain</type>
            <size>164433</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDJlMmI5YWU2MjQ5YWMyM2U3YjEzZGRj
ZmUxODY3MzJjYjI3YWQyMTMuLmNhMjgwNWVlNWIxNmFhYWE1ZWMxYTM2YWJhMjJkMGM1MTRhMTAy
YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjItMDItMTggIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGV2ZW4gbW9yZSBjYWxs
IHNpdGVzIGNvbnN0cnVjdGluZyB2ZWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuY3BwOgorICAgICAgICAoV1RGOjpD
b25jdXJyZW50V29ya1F1ZXVlOjphcHBseSk6CisgICAgICAgICogd3RmL2NmL0xhbmd1YWdlQ0Yu
Y3BwOgorICAgICAgICAoV1RGOjpwbGF0Zm9ybVVzZXJQcmVmZXJyZWRMYW5ndWFnZXMpOgorCiAy
MDIyLTAyLTE3ICBNYXR0IFdvb2Ryb3cgIDxtYXR0d29vZHJvd0BhcHBsZS5jb20+CiAKICAgICAg
ICAgRW5hYmxlIHN1YmdyaWQgYnkgZGVmYXVsdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhNDc5MDMxMjg0ZTI2
M2FlNWJiYzY1Y2Y3OTM3YjBjMjI3NGI2OTExLi4xZTJhNDcyMzdmMjZkMDYyMGVkZjkxMTQ3Mzk1
M2VjMzFjOGZjMDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTY2IEBACisyMDIyLTAyLTE4ICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4gdXAgLyBvcHRp
bWl6ZSBldmVuIG1vcmUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9ycworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2ODUyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2FwcGxlcGF5
L1BheW1lbnRDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXltZW50Q29vcmRp
bmF0b3I6OmJlZ2luUGF5bWVudFNlc3Npb24pOgorICAgICAgICAqIE1vZHVsZXMvYXBwbGVwYXkv
Y29jb2EvUGF5bWVudE1ldGhvZENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydCk6
CisgICAgICAgICogTW9kdWxlcy9jYWNoZS9ET01DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpET01DYWNoZTo6YmF0Y2hQdXRPcGVyYXRpb24pOgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBh
ZC9HYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWQ6OkdhbWVwYWQpOgorICAg
ICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHYW1lcGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkRGlzY29ubmVjdGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdhbWVwYWRNYW5hZ2VyOjptYWtlR2FtZXBhZFZpc2libGUpOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlOjpvYmplY3RTdG9yZU5hbWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCS2V5RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6aXNEZWxldGVkVmFs
dWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QktleURhdGFIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6Omhhc2gg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzIGNv
bnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmVOYW1lcyBjb25zdCk6
CisgICAgICAgICogTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0OjpzaG93TWVkaWFDb250cm9sc0Nv
bnRleHRNZW51KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlOjphY3RpdmVSYW5nZXMgY29uc3QpOgor
ICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmg6CisgICAgICAgIChXZWJD
b3JlOjpEZWNvZGVPcmRlclNhbXBsZU1hcDo6c2l6ZSBjb25zdCk6CisgICAgICAgICogTW9kdWxl
cy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0Lmg6CisgICAgICAgICogTW9kdWxlcy9zcGVl
Y2gvU3BlZWNoU3ludGhlc2lzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNp
czo6Z2V0Vm9pY2VzKToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hS
ZWNvZ25pemVyVGFzay5tbToKKyAgICAgICAgKC1bV2ViU3BlZWNoUmVjb2duaXplclRhc2tJbXBs
IGNhbGxiYWNrV2l0aFRyYW5zY3JpcHRpb25zOmlzRmluYWw6XSk6CisgICAgICAgICogTW9kdWxl
cy9zcGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2tNb2NrLm1tOgorICAgICAgICAo
LVtXZWJTcGVlY2hSZWNvZ25pemVyVGFza01vY2sgYXVkaW9TYW1wbGVzQXZhaWxhYmxlOl0pOgor
ICAgICAgICAqIGFuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpibGVuZEZ1bmMpOgorICAgICAgICAqIGFuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5l
c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaW1lbGluZXNDb250
cm9sbGVyOjp1cGRhdGVBbmltYXRpb25zQW5kU2VuZEV2ZW50cyk6CisgICAgICAgICogYW5pbWF0
aW9uL0tleWZyYW1lRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByb2Nlc3NQcm9wZXJ0
eUluZGV4ZWRLZXlmcmFtZXMpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRF
eHRlbnNpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRl
bnRFeHRlbnNpb246OkNvbnRlbnRFeHRlbnNpb24pOgorICAgICAgICAqIGNzcy9DU1NWYWx1ZUxp
c3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlTGlzdDo6c2l6ZSBjb25zdCk6CisgICAg
ICAgICogY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmhvaXN0Q2hpbGRyZW5XaXRoT3BlcmF0b3IpOgorICAg
ICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXJJbXBsOjpjb25zdW1lQ29udGFpbmVyUnVsZSk6CisgICAgICAgICogZG9tL0RPTVN0
cmluZ0xpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVN0cmluZ0xpc3Q6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpET01TdHJpbmdMaXN0OjphcHBlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NU3RyaW5nTGlzdDo6RE9NU3RyaW5nTGlzdCk6CisgICAgICAgICogZG9tL0V2ZW50UGF0
aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFBhdGg6OkV2ZW50UGF0aCk6CisgICAgICAg
ICogZG9tL0Z1bGxzY3JlZW5NYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZ1bGxzY3Jl
ZW5NYW5hZ2VyOjpjYW5jZWxGdWxsc2NyZWVuKToKKyAgICAgICAgKiBkb20vTG9hZGFibGVTY3Jp
cHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGFibGVTY3JpcHQ6Om5vdGlmeUNsaWVudEZp
bmlzaGVkKToKKyAgICAgICAgKiBkb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmFkaW9CdXR0b25Hcm91cDo6bWVtYmVycyBjb25zdCk6CisgICAgICAgICogaHRt
bC9EaXJlY3RvcnlGaWxlTGlzdENyZWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9GaWxl
TGlzdCk6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2F2ZUxhc3RTZWxlY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4
KToKKyAgICAgICAgKiBodG1sL0ltYWdlQml0bWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQml0bWFwOjpkZXRhY2hCaXRtYXBzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgICogaHRtbC9wYXJzZXIv
SFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZXRhQ2hh
cnNldFBhcnNlcjo6cHJvY2Vzc01ldGEpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVl
QnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6Omluc2VydFBo
b25lTnVtYmVyTGluayk6CisgICAgICAgICogaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHREb2N1bWVudFBhcnNlcjo6aW5zZXJ0RmFrZVBy
ZUVsZW1lbnQpOgorICAgICAgICAqIGxvYWRlci9Db250ZW50RmlsdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRGaWx0ZXI6OmNyZWF0ZSk6CisgICAgICAgICogbG9hZGVyL2FwcGNh
Y2hlL0FwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpwYXJzZUFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdCk6CisgICAgICAgICogcGFnZS9SZXNpemVP
YnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNpemVPYnNlcnZlcjo6ZGVsaXZlck9i
c2VydmF0aW9ucyk6CisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmluaXRpYWxpemVJbmRpY2F0b3IpOgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRl
bnRTZWN1cml0eVBvbGljeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVN1YlJlc291cmNl
SW50ZWdyaXR5SW50b0RpZ2VzdHMpOgorICAgICAgICAqIHBsYXRmb3JtL0ZpbGVDaG9vc2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpG
aWxlQ2hvb3Nlcjo6Y2hvb3NlTWVkaWFGaWxlcyk6CisgICAgICAgICogcGxhdGZvcm0vU2hhcmVk
QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmFw
cGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vVGhyZWFkU2FmZURhdGFCdWZmZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OmFkZCk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9EU1BLZXJu
ZWxQcm9jZXNzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EU1BLZXJuZWxQcm9jZXNz
b3I6OmluaXRpYWxpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvUmVzYW1wbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUmVzYW1wbGVyOjpBdWRpb1Jlc2FtcGxlcik6
CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0TnVtYmVyT2ZD
aGFubmVscyk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vTXVsdGlDaGFubmVsUmVzYW1wbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok11bHRpQ2hhbm5lbFJlc2FtcGxlcjo6TXVsdGlDaGFu
bmVsUmVzYW1wbGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudC5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkL21hYy9EdWFsc2hvY2szSElER2FtZXBhZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEdWFsc2hvY2szSElER2FtZXBhZDo6RHVhbHNob2NrM0hJREdhbWVw
YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWQvbWFjL0xvZ2l0ZWNoR2FtZXBhZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMb2dpdGVjaEdhbWVwYWQ6OkxvZ2l0ZWNoR2FtZXBhZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ2FtZXBhZC9tYWMvU3RhZGlhSElER2FtZXBhZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdGFkaWFISURHYW1lcGFkOjpTdGFkaWFISURHYW1lcGFkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI6OmFkZFJlcGFpbnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhVdGlsaXRp
ZXM6OnBhdGhzV2l0aFNocmlua1dyYXBwZWRSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRo
VXRpbGl0aWVzOjpwYXRoV2l0aFNocmlua1dyYXBwZWRSZWN0c0Zvck91dGxpbmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZTo6YnVmZmVyZWRTYW1wbGVzRm9yVHJhY2tJZCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3Ry
ZWFtaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVGYWlyUGxheVN0cmVhbWlu
Zzo6ZXh0cmFjdEtleUlEc1NrZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFWRldyYXBwZXI6OnNldFJlcXVlc3RGb3JLZXkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1p
bmdBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBs
YXlTdHJlYW1pbmdBVkZPYmpDOjp1cGRhdGVLZXlTdGF0dXNlcyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVyQVZGT2JqQy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlckFWRk9iakM6OmZyYW1lSW5mb3MgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZl
clBhcnNlckFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJB
VkZPYmpDOjpkaWRQYXJzZVN0cmVhbURhdGFBc0Fzc2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW06CisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjp2YXJpYXRpb25BeGVzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6
OndyaXRlU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZVZp
ZGVvQ2FwdHVyZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZVZpZGVvQ2Fw
dHVyZVNvdXJjZTo6c2V0U3VwcG9ydGVkUHJlc2V0cyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3Ry
eUltcGw6OnJlZ2lzdGVyQmxvYlVSTCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVnaXN0cnlJ
bXBsOjp3cml0ZUJsb2JzVG9UZW1wb3JhcnlGaWxlc0ZvckluZGV4ZWREQik6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveE1vZGVsT2JqZWN0OjpkcmF3Qm94U2lkZUZyb21QYXRoKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyQmFja2luZzo6Y29ubmVjdENsaXBwaW5nU3RhY2tMYXllcnMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjphZGp1c3RPdmVyZmxvd1Njcm9sbGJhckNvbnRhaW5lckxheWVycyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6cGFpbnRBdHRhY2htZW50VGl0bGVCYWNrZ3JvdW5kKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTVkdT
dHJva2VQYWludGluZ1Jlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRD
aHVuay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1bms6OlNWR1RleHRDaHVuayk6
CisgICAgICAgICogc3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlBhZ2VSdWxlQ29sbGVjdG9yOjptYXRjaFBhZ2VSdWxlcyk6CisgICAgICAgICog
c3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVT
ZXRCdWlsZGVyOjpNZWRpYVF1ZXJ5Q29sbGVjdG9yOjpwb3ApOgorICAgICAgICAqIHN0eWxlL1N0
eWxlQnVpbGRlckNvbnZlcnRlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRDb250YWluZXJOYW1lKToKKwogMjAyMi0wMi0xOCAgQW50b2luZSBR
dWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KIAogICAgICAgICBbZnJhbWUtcmF0ZV0gW2N1c3Rv
bS1lZmZlY3RdIGFsbG93IHNldHRpbmcgZnJhbWVSYXRlIGFzIGFuIG9wdGlvbiBwYXNzZWQgdG8g
ZG9jdW1lbnQudGltZWxpbmUuYW5pbWF0ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDg5ZTQ3NjEyYzRmNjhmMjQ3
NTM5ZDM3MGNmYTM3NzkzMWZlZGVmZTUuLjU3NmQyOWNlZTg4NTVhMGIzNTk1MmYyOTAxMWQ2ZDUy
ZmQxMmYyZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTggQEAKKzIwMjItMDItMTggIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGV2
ZW4gbW9yZSBjYWxsIHNpdGVzIGNvbnN0cnVjdGluZyB2ZWN0b3JzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4NTIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3Rl
TWVkaWFQbGF5ZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZU1lZGlhUGxheWVy
UHJveHk6Om91dE9mQmFuZFRyYWNrU291cmNlcyk6CisgICAgICAgICogR1BVUHJvY2Vzcy9tZWRp
YS9SZW1vdGVTb3VyY2VCdWZmZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVNv
dXJjZUJ1ZmZlclByb3h5Ojpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0
aW9uU2VnbWVudCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5Ojp1
cGRhdGVUcmFja0lkcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyk6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0
OjpmZXRjaERpc2tDYWNoZUVudHJpZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05vdGlm
aWNhdGlvbnMvTmV0d29ya05vdGlmaWNhdGlvbk1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlcjo6Z2V0T3JpZ2luc1dpdGhQdXNoQW5kTm90aWZp
Y2F0aW9uUGVybWlzc2lvbnMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2Uv
U3RvcmFnZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6YWxs
U3RvcmFnZUFyZWFJZGVudGlmaWVycyBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
V2ViU3RvcmFnZS9UcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuY3BwOgorICAgICAgICAo
V2ViS2l0OjpUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6Om9yaWdpbnMgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OnN0b3JhZ2VB
cmVhSWRlbnRpZmllcnMgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0Nh
Y2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdl
OjpDYWNoZTo6ZmluaXNoT3BlbmluZyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6
Q2FjaGU6OmtleXMgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FM
aXRlU3RvcmFnZUFyZWEuY3BwOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6
U1FMaXRlU3RvcmFnZUFyZWEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVy
cy5oOgorICAgICAgICAqIFNoYXJlZC9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94
eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpzaG93
UGF5bWVudFVJKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb24uY3BwOgor
ICAgICAgICAoQVBJOjpOYXZpZ2F0aW9uOjpOYXZpZ2F0aW9uKToKKyAgICAgICAgKEFQSTo6bV9j
bGllbnROYXZpZ2F0aW9uQWN0aXZpdHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XS1No
YXJlU2hlZXQubW06CisgICAgICAgIChhcHBlbmRGaWxlc0FzU2hhcmVhYmxlVVJMcyk6CisgICAg
ICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnJlc3RvcmVBcHBIaWdobGlnaHRzQW5kU2Nyb2xsVG9JbmRleCk6
CisgICAgICAgICogVUlQcm9jZXNzL0ZyYW1lTG9hZFN0YXRlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6RnJhbWVMb2FkU3RhdGU6OmRpZEZpbmlzaExvYWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cGFy
YW1ldGVycyBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0F1
dGhlbnRpY2F0b3JNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6QXV0aGVudGljYXRvck1h
bmFnZXI6OnN0YXJ0RGlzY292ZXJ5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQmFja0Zvcndh
cmRMaXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0OjpyZW1vdmVB
bGxJdGVtcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6Y2xlYXIpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3NQb29sOjppbml0aWFsaXplTmV3V2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpyZW1vdmVQcm9jZXNzRnJvbU9yaWdpbkNhY2hlU2V0KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Byb3h5Ojpwcm9jZXNzRGlkVGVybWluYXRlT3JGYWlsZWRUb0xhdW5jaCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBseSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9pb3MvVGV4dENoZWNrZXJJT1MubW06CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVj
a2VyOjpjaGVja1RleHRPZlBhcmFncmFwaCk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0Fj
dGlvblNoZWV0QXNzaXN0YW50Lm1tOgorICAgICAgICAoLVtXS0FjdGlvblNoZWV0QXNzaXN0YW50
IHByZXNlbnRhdGlvblJlY3RGb3JFbGVtZW50VXNpbmdDbG9zZXN0SW5kaWNhdGVkUmVjdF0pOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW06CisgICAgICAgIChXZWJL
aXQ6OlRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaCk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYXltZW50Q29vcmRpbmF0b3I6OnNob3dQYXltZW50VUkpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6c2V0RmlsZXNGb3JJbnB1dEZpbGVV
cGxvYWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVy
TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlcjo6
Y3JlYXRlUmVtb3RlTWVkaWFQbGF5ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL21lZGlh
L1NvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpTb3VyY2VC
dWZmZXJQcml2YXRlUmVtb3RlOjp1cGRhdGVUcmFja0lkcyk6CisgICAgICAgIChXZWJLaXQ6OlNv
dXJjZUJ1ZmZlclByaXZhdGVSZW1vdGU6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5p
dGlhbGl6YXRpb25TZWdtZW50KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS93ZWJydGMvTGli
V2ViUlRDQ29kZWNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGliV2ViUlRDQ29kZWNzOjpjcmVh
dGVFbmNvZGVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dL
QnVuZGxlUGFnZU92ZXJsYXkuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvU2Vzc2lvblN0YXRlQ29udmVyc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OnRvRnJhbWVT
dGF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEZXZpY2VPcmll
bnRhdGlvblVwZGF0ZVByb3ZpZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2aWNlT3Jp
ZW50YXRpb25VcGRhdGVQcm92aWRlcjo6ZGV2aWNlT3JpZW50YXRpb25DaGFuZ2VkKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlcjo6ZGV2aWNlTW90
aW9uQ2hhbmdlZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0
ZWJvYXJkT3ZlcnJpZGVzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZE92ZXJy
aWRlczo6b3ZlcnJpZGRlblR5cGVzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYlNwZWVjaFN5bnRoZXNpc0NsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNw
ZWVjaFN5bnRoZXNpc0NsaWVudDo6dm9pY2VMaXN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpGaW5kQ29udHJvbGxl
cjo6ZmluZFN0cmluZ01hdGNoZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJG
b3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGb3VuZFRl
eHRSYW5nZUNvbnRyb2xsZXI6OmRyYXdSZWN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNvbnN1bWVTYW5kYm94
RXh0ZW5zaW9ucyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFj
Lm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpoYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xp
Y2spOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3M6OmZldGNoV2Vic2l0ZURhdGEpOgorCiAyMDIyLTAyLTE4ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBMQ19TT1VSQ0VfVkVSU0lP
TiB0byBjb21waWxlIHRhcmdldHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1
ZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwCmluZGV4IDllMTA2ZTM5NGQzZjQ0
ZDJjMjVmYzNjYTE1MzU0MGU1MjA0Y2IzNWIuLjg2NDA2ZjM4ODQzNzE0Y2IyNTVjMzRlYWUzZjkx
ODFkYWJhNThlMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAKKysr
IGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcApAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQg
Q29uY3VycmVudFdvcmtRdWV1ZTo6YXBwbHkoc2l6ZV90IGl0ZXJhdGlvbnMsIFdURjo6RnVuY3Rp
b248dm9pZChzaXplX3QgaW5kCiAKICAgICAgICAgICAgIG1fd29ya2Vycy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KHRocmVhZENvdW50KTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0aHJlYWRDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgbV93b3JrZXJzLmFwcGVu
ZChUaHJlYWQ6OmNyZWF0ZSgiVGhyZWFkUG9vbCBXb3JrZXIiLCBbdGhpc10geworICAgICAgICAg
ICAgICAgIG1fd29ya2Vycy51bmNoZWNrZWRBcHBlbmQoVGhyZWFkOjpjcmVhdGUoIlRocmVhZFBv
b2wgV29ya2VyIiwgW3RoaXNdIHsKICAgICAgICAgICAgICAgICAgICAgdGhyZWFkQm9keSgpOwog
ICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL2NmL0xhbmd1YWdlQ0YuY3BwIGIvU291cmNlL1dURi93dGYvY2YvTGFuZ3VhZ2VDRi5j
cHAKaW5kZXggYmJjMWVmNmY0ZWZlMDMwNTljZTU1MTMxZTA4YzEwMzMyMjQ4OGU1Ni4uYzA0YzU1
YmM2MDNkMjgxZDBjYTM4OTIwZWJhOGM3OWU1ZTY5Mjk4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvY2YvTGFuZ3VhZ2VDRi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvY2YvTGFuZ3VhZ2VD
Ri5jcHAKQEAgLTEwMiw5ICsxMDIsMTAgQEAgVmVjdG9yPFN0cmluZz4gcGxhdGZvcm1Vc2VyUHJl
ZmVycmVkTGFuZ3VhZ2VzKFNob3VsZE1pbmltaXplTGFuZ3VhZ2VzIHNob3VsZE1pbmkKICAgICAg
ICAgcmV0dXJuIHsgImVuIl9zIH07CiAKICAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXM7Cisg
ICAgbGFuZ3VhZ2VzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGxhdGZvcm1MYW5ndWFnZXNDb3Vu
dCk7CiAgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgcGxhdGZvcm1MYW5ndWFnZXNDb3VudDsg
aSsrKSB7CiAgICAgICAgIGF1dG8gcGxhdGZvcm1MYW5ndWFnZSA9IHN0YXRpY19jYXN0PENGU3Ry
aW5nUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KHBsYXRmb3JtTGFuZ3VhZ2VzLmdldCgpLCBp
KSk7Ci0gICAgICAgIGxhbmd1YWdlcy5hcHBlbmQoaHR0cFN0eWxlTGFuZ3VhZ2VDb2RlKHBsYXRm
b3JtTGFuZ3VhZ2UsIHNob3VsZE1pbmltaXplTGFuZ3VhZ2VzKSk7CisgICAgICAgIGxhbmd1YWdl
cy51bmNoZWNrZWRBcHBlbmQoaHR0cFN0eWxlTGFuZ3VhZ2VDb2RlKHBsYXRmb3JtTGFuZ3VhZ2Us
IHNob3VsZE1pbmltaXplTGFuZ3VhZ2VzKSk7CiAgICAgfQogCiAgICAgTE9HX1dJVEhfU1RSRUFN
KExhbmd1YWdlLCBzdHJlYW0gPDwgIkFmdGVyIHBhc3NpbmcgdGhyb3VnaCBodHRwU3R5bGVMYW5n
dWFnZUNvZGU6ICIgPDwgbGFuZ3VhZ2VzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvYXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvYXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNwcAppbmRleCAxYTMyN2E5NGIwYjcx
ZDRlYzc1ZWFjYzhkNGFkNzhhOTFiOWZmNjg1Li40YTk0MzIyNDlkNTJkNTFkMTQ3Yjg2ZTU3MDhk
NTE4ODhiYTY0ZjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5
L1BheW1lbnRDb29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBs
ZXBheS9QYXltZW50Q29vcmRpbmF0b3IuY3BwCkBAIC0xMDEsMTEgKzEwMSwxMCBAQCBib29sIFBh
eW1lbnRDb29yZGluYXRvcjo6YmVnaW5QYXltZW50U2Vzc2lvbihEb2N1bWVudCYgZG9jdW1lbnQs
IFBheW1lbnRTZXNzaW9uJgogewogICAgIEFTU0VSVCghbV9hY3RpdmVTZXNzaW9uKTsKIAotICAg
IFZlY3RvcjxVUkw+IGxpbmtJY29uVVJMczsKLSAgICBmb3IgKGF1dG8mIGljb24gOiBMaW5rSWNv
bkNvbGxlY3RvciB7IGRvY3VtZW50IH0uaWNvbnNPZlR5cGVzKHsgTGlua0ljb25UeXBlOjpUb3Vj
aEljb24sIExpbmtJY29uVHlwZTo6VG91Y2hQcmVjb21wb3NlZEljb24gfSkpCi0gICAgICAgIGxp
bmtJY29uVVJMcy5hcHBlbmQoaWNvbi51cmwpOwotCi0gICAgYXV0byBzaG93UGF5bWVudFVJID0g
bV9jbGllbnQuc2hvd1BheW1lbnRVSShkb2N1bWVudC51cmwoKSwgbGlua0ljb25VUkxzLCBwYXlt
ZW50UmVxdWVzdCk7CisgICAgYXV0byBsaW5rSWNvblVSTHMgPSBMaW5rSWNvbkNvbGxlY3RvciB7
IGRvY3VtZW50IH0uaWNvbnNPZlR5cGVzKHsgTGlua0ljb25UeXBlOjpUb3VjaEljb24sIExpbmtJ
Y29uVHlwZTo6VG91Y2hQcmVjb21wb3NlZEljb24gfSkubWFwKFtdKGF1dG8mIGljb24pIHsKKyAg
ICAgICAgcmV0dXJuIGljb24udXJsOworICAgIH0pOworICAgIGF1dG8gc2hvd1BheW1lbnRVSSA9
IG1fY2xpZW50LnNob3dQYXltZW50VUkoZG9jdW1lbnQudXJsKCksIFdURk1vdmUobGlua0ljb25V
UkxzKSwgcGF5bWVudFJlcXVlc3QpOwogICAgIFBBWU1FTlRfQ09PUkRJTkFUT1JfUkVMRUFTRV9M
T0coImJlZ2luUGF5bWVudFNlc3Npb24oKSAtPiAlZCIsIHNob3dQYXltZW50VUkpOwogICAgIGlm
ICghc2hvd1BheW1lbnRVSSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29jb2EubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L2NvY29hL1BheW1lbnRNZXRob2RDb2Nv
YS5tbQppbmRleCA3NjUzZGU1NGFmNTM5ZjI1NjFmNDIyMzZkMzBlYzYxYWI1ODAzZGQ1Li4zNzVl
NTNkNmQ0ZmRkYzg4OGYzMmUwNGUyODNhN2RiMDQxMTNkMDYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L2NvY29hL1BheW1lbnRNZXRob2RDb2NvYS5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L2NvY29hL1BheW1lbnRNZXRob2RDb2Nv
YS5tbQpAQCAtMTAxLDExICsxMDEsOCBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxBcHBsZVBheVBh
eW1lbnRNZXRob2Q6OlR5cGU+IGNvbnZlcnQoUEtQYXltZW50TWV0aG9kVHlwZSBwYQogI2lmIEhB
VkUoUEFTU0tJVF9QQVlNRU5UX01FVEhPRF9CSUxMSU5HX0FERFJFU1MpCiBzdGF0aWMgdm9pZCBj
b252ZXJ0KENOTGFiZWxlZFZhbHVlPENOUG9zdGFsQWRkcmVzcyo+ICpwb3N0YWxBZGRyZXNzLCBB
cHBsZVBheVBheW1lbnRDb250YWN0ICZyZXN1bHQpCiB7Ci0gICAgVmVjdG9yPFN0cmluZz4gYWRk
cmVzc0xpbmU7Ci0gICAgaWYgKE5TU3RyaW5nICpzdHJlZXQgPSBwb3N0YWxBZGRyZXNzLnZhbHVl
LnN0cmVldCkgewotICAgICAgICBhZGRyZXNzTGluZS5hcHBlbmQoc3RyZWV0KTsKLSAgICAgICAg
cmVzdWx0LmFkZHJlc3NMaW5lcyA9IFdURk1vdmUoYWRkcmVzc0xpbmUpOwotICAgIH0KKyAgICBp
ZiAoTlNTdHJpbmcgKnN0cmVldCA9IHBvc3RhbEFkZHJlc3MudmFsdWUuc3RyZWV0KQorICAgICAg
ICByZXN1bHQuYWRkcmVzc0xpbmVzID0gVmVjdG9yIHsgU3RyaW5nIHsgc3RyZWV0IH0gfTsKICAg
ICByZXN1bHQuc3ViTG9jYWxpdHkgPSBwb3N0YWxBZGRyZXNzLnZhbHVlLnN1YkxvY2FsaXR5Owog
ICAgIHJlc3VsdC5sb2NhbGl0eSA9IHBvc3RhbEFkZHJlc3MudmFsdWUuY2l0eTsKICAgICByZXN1
bHQuc3ViQWRtaW5pc3RyYXRpdmVBcmVhID0gcG9zdGFsQWRkcmVzcy52YWx1ZS5zdWJBZG1pbmlz
dHJhdGl2ZUFyZWE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RP
TUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGUuY3BwCmlu
ZGV4IDQ5ZjM5OGFhZmVmMzdjZDVlOGY4ZWIyNDRkNGUxMWYzOWYyYThjZDMuLjJkNDZkMWNkYmM3
MTdmM2M5Mjk5ZWZhODYzYTU0OTI2MzgzYWY1ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvY2FjaGUvRE9NQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
Y2FjaGUvRE9NQ2FjaGUuY3BwCkBAIC01MTUsMTAgKzUxNSw4IEBAIFJlY29yZCBET01DYWNoZTo6
dG9Db25uZWN0aW9uUmVjb3JkKGNvbnN0IEZldGNoUmVxdWVzdCYgcmVxdWVzdCwgRmV0Y2hSZXNw
b25zZSYKIAogdm9pZCBET01DYWNoZTo6YmF0Y2hQdXRPcGVyYXRpb24oY29uc3QgRmV0Y2hSZXF1
ZXN0JiByZXF1ZXN0LCBGZXRjaFJlc3BvbnNlJiByZXNwb25zZSwgRE9NQ2FjaGVFbmdpbmU6OlJl
c3BvbnNlQm9keSYmIHJlc3BvbnNlQm9keSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChFeGNlcHRp
b25Pcjx2b2lkPiYmKT4mJiBjYWxsYmFjaykKIHsKLSAgICBWZWN0b3I8UmVjb3JkPiByZWNvcmRz
OwotICAgIHJlY29yZHMuYXBwZW5kKHRvQ29ubmVjdGlvblJlY29yZChyZXF1ZXN0LCByZXNwb25z
ZSwgV1RGTW92ZShyZXNwb25zZUJvZHkpKSk7Ci0KLSAgICBiYXRjaFB1dE9wZXJhdGlvbihXVEZN
b3ZlKHJlY29yZHMpLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgYXV0byByZWNvcmQgPSB0b0Nv
bm5lY3Rpb25SZWNvcmQocmVxdWVzdCwgcmVzcG9uc2UsIFdURk1vdmUocmVzcG9uc2VCb2R5KSk7
CisgICAgYmF0Y2hQdXRPcGVyYXRpb24oeyBXVEZNb3ZlKHJlY29yZCkgfSwgV1RGTW92ZShjYWxs
YmFjaykpOwogfQogCiB2b2lkIERPTUNhY2hlOjpiYXRjaFB1dE9wZXJhdGlvbihWZWN0b3I8UmVj
b3JkPiYmIHJlY29yZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRXhjZXB0aW9uT3I8dm9pZD4m
Jik+JiYgY2FsbGJhY2spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVw
YWQvR2FtZXBhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5j
cHAKaW5kZXggNjk2OWUwYjUwM2E4N2RkMDM4NWUxODM5MDg4NDY3MGZlYTA0YzI2Ny4uNTgzZjlj
ODU1NTY3MTc4Y2NlNzJjYWQ0NDc5MjRjZjhiYzNjNGU1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmNwcApAQCAtNDMsOCArNDMsOSBAQCBHYW1lcGFkOjpHYW1l
cGFkKGNvbnN0IFBsYXRmb3JtR2FtZXBhZCYgcGxhdGZvcm1HYW1lcGFkKQogICAgICwgbV9heGVz
KHBsYXRmb3JtR2FtZXBhZC5heGlzVmFsdWVzKCkuc2l6ZSgpLCAwLjApCiB7CiAgICAgdW5zaWdu
ZWQgYnV0dG9uQ291bnQgPSBwbGF0Zm9ybUdhbWVwYWQuYnV0dG9uVmFsdWVzKCkuc2l6ZSgpOwor
ICAgIG1fYnV0dG9ucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGJ1dHRvbkNvdW50KTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0dG9uQ291bnQ7ICsraSkKLSAgICAgICAgbV9idXR0
b25zLmFwcGVuZChHYW1lcGFkQnV0dG9uOjpjcmVhdGUoKSk7CisgICAgICAgIG1fYnV0dG9ucy51
bmNoZWNrZWRBcHBlbmQoR2FtZXBhZEJ1dHRvbjo6Y3JlYXRlKCkpOwogfQogCiBHYW1lcGFkOjp+
R2FtZXBhZCgpID0gZGVmYXVsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
Z2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVw
YWQvR2FtZXBhZE1hbmFnZXIuY3BwCmluZGV4IGNjMzc0ODU4Y2ZlYTFiMjQ0YzA0YmQ0MWIyOTk0
OGQyOWFlYTMwMzAuLjU0M2ZlNDg5MTY3ZTdjZTEzZDQ5NzY4ZmM3ZTE1ZjM0ZDA4MjM2ZTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmNw
cApAQCAtNzksMTQgKzc5LDEwIEBAIHZvaWQgR2FtZXBhZE1hbmFnZXI6OnBsYXRmb3JtR2FtZXBh
ZENvbm5lY3RlZChQbGF0Zm9ybUdhbWVwYWQmIHBsYXRmb3JtR2FtZXBhZCwKIAogdm9pZCBHYW1l
cGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkRGlzY29ubmVjdGVkKFBsYXRmb3JtR2FtZXBhZCYg
cGxhdGZvcm1HYW1lcGFkKQogewotICAgIFZlY3RvcjxXZWFrUHRyPERPTVdpbmRvdz4+IHdlYWtX
aW5kb3dzOwotICAgIGZvciAoYXV0byogZG9tV2luZG93IDogbV9kb21XaW5kb3dzKQotICAgICAg
ICB3ZWFrV2luZG93cy5hcHBlbmQoKmRvbVdpbmRvdyk7Ci0KICAgICBIYXNoU2V0PE5hdmlnYXRv
ckdhbWVwYWQqPiBub3RpZmllZE5hdmlnYXRvcnM7CiAKICAgICAvLyBIYW5kbGUgdGhlIGRpc2Nv
bm5lY3QgZm9yIGFsbCBET01XaW5kb3dzIHdpdGggZXZlbnQgbGlzdGVuZXJzIGFuZCB0aGVpciBO
YXZpZ2F0b3JzLgotICAgIGZvciAoYXV0byYgd2luZG93IDogd2Vha1dpbmRvd3MpIHsKKyAgICBm
b3IgKGF1dG8mIHdpbmRvdyA6IGNvcHlUb1ZlY3Rvck9mPFdlYWtQdHI8RE9NV2luZG93Pj4obV9k
b21XaW5kb3dzKSkgewogICAgICAgICAvLyBFdmVudCBkaXNwYXRjaCBtaWdodCBoYXZlIG1hZGUg
dGhpcyB3aW5kb3cgZ28gYXdheS4KICAgICAgICAgaWYgKCF3aW5kb3cpCiAgICAgICAgICAgICBj
b250aW51ZTsKQEAgLTE0MywxMSArMTM5LDcgQEAgdm9pZCBHYW1lcGFkTWFuYWdlcjo6bWFrZUdh
bWVwYWRWaXNpYmxlKFBsYXRmb3JtR2FtZXBhZCYgcGxhdGZvcm1HYW1lcGFkLCBIYXNoU2UKICAg
ICBmb3IgKGF1dG8qIG5hdmlnYXRvciA6IG5hdmlnYXRvclNldCkKICAgICAgICAgbmF2aWdhdG9y
LT5nYW1lcGFkQ29ubmVjdGVkKHBsYXRmb3JtR2FtZXBhZCk7CiAKLSAgICBWZWN0b3I8V2Vha1B0
cjxET01XaW5kb3c+PiB3ZWFrV2luZG93czsKLSAgICBmb3IgKGF1dG8qIGRvbVdpbmRvdyA6IG1f
ZG9tV2luZG93cykKLSAgICAgICAgd2Vha1dpbmRvd3MuYXBwZW5kKCpkb21XaW5kb3cpOwotCi0g
ICAgZm9yIChhdXRvJiB3aW5kb3cgOiB3ZWFrV2luZG93cykgeworICAgIGZvciAoYXV0byYgd2lu
ZG93IDogY29weVRvVmVjdG9yT2Y8V2Vha1B0cjxET01XaW5kb3c+PihtX2RvbVdpbmRvd3MpKSB7
CiAgICAgICAgIC8vIEV2ZW50IGRpc3BhdGNoIG1pZ2h0IGhhdmUgbWFkZSB0aGlzIHdpbmRvdyBn
byBhd2F5LgogICAgICAgICBpZiAoIXdpbmRvdykKICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCmluZGV4
IDdhYTYzMmI3ZWMwNDdiZTQ2MDhiNTFhMDk0ZWExYTRlNTdhMjYyOWIuLjBiZThiZDExNmVjMjM2
MTIzYzcxNTMyZDdlZTM2YzU2ZTk5NjU0OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKQEAgLTEwMiw5ICsxMDIsNyBAQCBSZWY8RE9N
U3RyaW5nTGlzdD4gSURCRGF0YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMoKSBjb25zdAogewogICAg
IEFTU0VSVChjYW5DdXJyZW50VGhyZWFkQWNjZXNzVGhyZWFkTG9jYWxEYXRhKG9yaWdpblRocmVh
ZCgpKSk7CiAKLSAgICBhdXRvIG9iamVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVh
dGUoKTsKLSAgICBmb3IgKGF1dG8mIG5hbWUgOiBtX2luZm8ub2JqZWN0U3RvcmVOYW1lcygpKQot
ICAgICAgICBvYmplY3RTdG9yZU5hbWVzLT5hcHBlbmQobmFtZSk7CisgICAgYXV0byBvYmplY3RT
dG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKG1faW5mby5vYmplY3RTdG9yZU5hbWVz
KCkpOwogICAgIG9iamVjdFN0b3JlTmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gb2JqZWN0U3Rv
cmVOYW1lczsKIH0KQEAgLTE3NSwxOSArMTczLDE2IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJUcmFu
c2FjdGlvbj4+IElEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbihTdHJpbmdPclZlY3Rvck9mU3RyaW5n
CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0
byBleGVjdXRlICd0cmFuc2FjdGlvbicgb24gJ0lEQkRhdGFiYXNlJzogVGhlIGRhdGFiYXNlIGNv
bm5lY3Rpb24gaXMgY2xvc2luZy4iX3MgfTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IG9iamVjdFN0
b3JlczsKLSAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oc3Rv
cmVOYW1lcykpCisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPFN0cmluZz4+
KHN0b3JlTmFtZXMpKSB7CiAgICAgICAgIG9iamVjdFN0b3JlcyA9IFdURk1vdmUoc3RkOjpnZXQ8
VmVjdG9yPFN0cmluZz4+KHN0b3JlTmFtZXMpKTsKLSAgICBlbHNlCisgICAgICAgIC8vIEl0IGlz
IHZhbGlkIGZvciBqYXZhc2NyaXB0IHRvIHBhc3MgaW4gYSBsaXN0IG9mIG9iamVjdCBzdG9yZSBu
YW1lcyB3aXRoIHRoZSBzYW1lIG5hbWUgbGlzdGVkIHR3aWNlLAorICAgICAgICAvLyBzbyB3ZSBu
ZWVkIHRvIHB1dCB0aGVtIGFsbCBpbiBhIHNldCB0byBnZXQgYSB1bmlxdWUgbGlzdC4KKyAgICAg
ICAgSGFzaFNldDxTdHJpbmc+IG9iamVjdFN0b3JlU2V0OworICAgICAgICBvYmplY3RTdG9yZVNl
dC5hZGQob2JqZWN0U3RvcmVzLmJlZ2luKCksIG9iamVjdFN0b3Jlcy5lbmQoKSk7CisgICAgICAg
IG9iamVjdFN0b3JlcyA9IGNvcHlUb1ZlY3RvcihvYmplY3RTdG9yZVNldCk7CisgICAgfSBlbHNl
CiAgICAgICAgIG9iamVjdFN0b3Jlcy5hcHBlbmQoV1RGTW92ZShzdGQ6OmdldDxTdHJpbmc+KHN0
b3JlTmFtZXMpKSk7CiAKLSAgICAvLyBJdCBpcyB2YWxpZCBmb3IgamF2YXNjcmlwdCB0byBwYXNz
IGluIGEgbGlzdCBvZiBvYmplY3Qgc3RvcmUgbmFtZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGxpc3Rl
ZCB0d2ljZSwKLSAgICAvLyBzbyB3ZSBuZWVkIHRvIHB1dCB0aGVtIGFsbCBpbiBhIHNldCB0byBn
ZXQgYSB1bmlxdWUgbGlzdC4KLSAgICBIYXNoU2V0PFN0cmluZz4gb2JqZWN0U3RvcmVTZXQ7Ci0g
ICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZSA6IG9iamVjdFN0b3JlcykKLSAgICAgICAgb2JqZWN0
U3RvcmVTZXQuYWRkKG9iamVjdFN0b3JlKTsKLQotICAgIG9iamVjdFN0b3JlcyA9IGNvcHlUb1Zl
Y3RvcihvYmplY3RTdG9yZVNldCk7Ci0KICAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlTmFtZSA6
IG9iamVjdFN0b3JlcykgewogICAgICAgICBpZiAobV9pbmZvLmhhc09iamVjdFN0b3JlKG9iamVj
dFN0b3JlTmFtZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaAppbmRleCA0Yjk3ODUzNjlkMTkwYTZiMTk2OTFk
MTM3YWUxNTY3ZTVjMzc5NWQ5Li45ZWE5NjRhMTZkNTMyN2M1MDBhYmY0ZTAxMTZjODU3NWE0ZmE1
NWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlE
YXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5o
CkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRlIDx2YXJp
YW50PgorI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvU3RkU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCkBAIC0xMTcsNDEgKzExOCw2IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwogICAgIH0KIAotICAgIHVu
c2lnbmVkIGhhc2goKSBjb25zdAotICAgIHsKLSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBoYXNo
Q29kZXM7Ci0gICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1f
dHlwZSkpOwotICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKG1faXNOdWxsID8gMSA6IDApOwotICAg
ICAgICBoYXNoQ29kZXMuYXBwZW5kKG1faXNEZWxldGVkVmFsdWUgPyAxIDogMCk7Ci0gICAgICAg
IHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpJbnZh
bGlkOgotICAgICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TWF4OgotICAgICAgICBjYXNl
IEluZGV4ZWREQjo6S2V5VHlwZTo6TWluOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgSW5kZXhlZERCOjpLZXlUeXBlOjpOdW1iZXI6Ci0gICAgICAgIGNhc2UgSW5kZXhlZERCOjpL
ZXlUeXBlOjpEYXRlOgotICAgICAgICAgICAgaGFzaENvZGVzLmFwcGVuZChTdHJpbmdIYXNoZXI6
Omhhc2hNZW1vcnk8c2l6ZW9mKGRvdWJsZSk+KCZzdGQ6OmdldDxkb3VibGU+KG1fdmFsdWUpKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OlN0
cmluZzoKLSAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoU3RyaW5nSGFzaDo6aGFzaChzdGQ6
OmdldDxTdHJpbmc+KG1fdmFsdWUpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBJbmRleGVkREI6OktleVR5cGU6OkJpbmFyeTogewotICAgICAgICAgICAgYXV0byogZGF0YSA9
IHN0ZDo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKS5kYXRhKCk7Ci0gICAgICAg
ICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAgICAgICAgaGFzaENvZGVzLmFwcGVuZCgwKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKFN0cmluZ0hh
c2hlcjo6aGFzaE1lbW9yeShkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OkFy
cmF5OgotICAgICAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBzdGQ6OmdldDxWZWN0b3I8SURCS2V5
RGF0YT4+KG1fdmFsdWUpKQotICAgICAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoa2V5Lmhh
c2goKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBT
dHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoaGFzaENvZGVzLmRhdGEoKSwgaGFzaENvZGVzLnNpemUo
KSAqIHNpemVvZih1bnNpZ25lZCkpOwotICAgIH0KLQogICAgIFN0cmluZyBzdHJpbmcoKSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBJbmRleGVkREI6OktleVR5cGU6OlN0
cmluZyk7CkBAIC0xODQsNiArMTUwLDggQEAgcHVibGljOgogCiAgICAgc2l6ZV90IHNpemUoKSBj
b25zdDsKIAorICAgIGJvb2wgaXNEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2lzRGVs
ZXRlZFZhbHVlOyB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIHN0cnVjdCBJREJLZXlEYXRhSGFz
aFRyYWl0czsKIApAQCAtMTk2LDggKzE2NCwzNSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dmFyaWFu
dDxWZWN0b3I8SURCS2V5RGF0YT4sIFN0cmluZywgZG91YmxlLCBUaHJlYWRTYWZlRGF0YUJ1ZmZl
cj4gbV92YWx1ZTsKIH07CiAKK2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3Qg
SURCS2V5RGF0YSYga2V5RGF0YSkKK3sKKyAgICBhZGQoaGFzaGVyLCBrZXlEYXRhLnR5cGUoKSk7
CisgICAgYWRkKGhhc2hlciwga2V5RGF0YS5pc051bGwoKSk7CisgICAgYWRkKGhhc2hlciwga2V5
RGF0YS5pc0RlbGV0ZWRWYWx1ZSgpKTsKKyAgICBzd2l0Y2ggKGtleURhdGEudHlwZSgpKSB7Cisg
ICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OkludmFsaWQ6CisgICAgY2FzZSBJbmRleGVkREI6
OktleVR5cGU6Ok1heDoKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TWluOgorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TnVtYmVyOgorICAgIGNhc2Ug
SW5kZXhlZERCOjpLZXlUeXBlOjpEYXRlOgorICAgICAgICBhZGQoaGFzaGVyLCBrZXlEYXRhLm51
bWJlcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OlN0
cmluZzoKKyAgICAgICAgYWRkKGhhc2hlciwga2V5RGF0YS5zdHJpbmcoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpCaW5hcnk6IHsKKyAgICAgICAgYWRk
KGhhc2hlciwga2V5RGF0YS5iaW5hcnkoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6QXJyYXk6CisgICAgICAgIGFkZChoYXNoZXIsIGtleURh
dGEuYXJyYXkoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogc3RydWN0IElEQktleURh
dGFIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBJREJLZXlEYXRhJiBhKSB7
IHJldHVybiBhLmhhc2goKTsgfQorICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IElEQktl
eURhdGEmIGEpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKGEpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1
YWwoY29uc3QgSURCS2V5RGF0YSYgYSwgY29uc3QgSURCS2V5RGF0YSYgYikgeyByZXR1cm4gYSA9
PSBiOyB9CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0
ZWQgPSBmYWxzZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXggMTQzNTE0MGE1Y2I0YTFhMWQ0MDdhMmRiMjlkMTVi
ZGYyZDUyYzBiNi4uY2U2M2M2YTU2YjE0ZDViZTAzMjI1NzM3MjUzMjJiODJmMGRkZGQwOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmNwcApAQCAtMTI2LDE0ICsxMjYsMTEgQEAgUmVmPERPTVN0cmluZ0xpc3Q+IElEQk9iamVjdFN0
b3JlOjppbmRleE5hbWVzKCkgY29uc3QKIHsKICAgICBBU1NFUlQoY2FuQ3VycmVudFRocmVhZEFj
Y2Vzc1RocmVhZExvY2FsRGF0YShtX3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFk
KCkpKTsKIAotICAgIGF1dG8gaW5kZXhOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwot
Ci0gICAgaWYgKCFtX2RlbGV0ZWQpIHsKLSAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogbV9pbmZv
LmluZGV4TmFtZXMoKSkKLSAgICAgICAgICAgIGluZGV4TmFtZXMtPmFwcGVuZChuYW1lKTsKLSAg
ICAgICAgaW5kZXhOYW1lcy0+c29ydCgpOwotICAgIH0KKyAgICBpZiAobV9kZWxldGVkKQorICAg
ICAgICByZXR1cm4gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiAKKyAgICBhdXRvIGluZGV4TmFt
ZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUobV9pbmZvLmluZGV4TmFtZXMoKSk7CisgICAgaW5k
ZXhOYW1lcy0+c29ydCgpOwogICAgIHJldHVybiBpbmRleE5hbWVzOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKaW5kZXgg
NmMxMTIxYjczMTBmNzM3ZjdiOTViZWNlZTg0NTRlNmFjNTBkZjJiNi4uMWI0YzhiOTcxYmU2NzMz
ZWYzNTZiMDlhZGQ5YjMyMGJlNDY5NWU3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcApAQCAtMTIxLDEyICsxMjEsOCBAQCBS
ZWY8RE9NU3RyaW5nTGlzdD4gSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlTmFtZXMoKSBjb25z
dAogewogICAgIEFTU0VSVChjYW5DdXJyZW50VGhyZWFkQWNjZXNzVGhyZWFkTG9jYWxEYXRhKG1f
ZGF0YWJhc2UtPm9yaWdpblRocmVhZCgpKSk7CiAKLSAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiBu
YW1lcyA9IGlzVmVyc2lvbkNoYW5nZSgpID8gbV9kYXRhYmFzZS0+aW5mbygpLm9iamVjdFN0b3Jl
TmFtZXMoKSA6IG1faW5mby5vYmplY3RTdG9yZXMoKTsKLQotICAgIFJlZjxET01TdHJpbmdMaXN0
PiBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0gICAgZm9yIChh
dXRvJiBuYW1lIDogbmFtZXMpCi0gICAgICAgIG9iamVjdFN0b3JlTmFtZXMtPmFwcGVuZChuYW1l
KTsKLQorICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzID0gaXNWZXJzaW9uQ2hhbmdlKCkgPyBtX2Rh
dGFiYXNlLT5pbmZvKCkub2JqZWN0U3RvcmVOYW1lcygpIDogbV9pbmZvLm9iamVjdFN0b3Jlcygp
OworICAgIGF1dG8gb2JqZWN0U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZShXVEZN
b3ZlKG5hbWVzKSk7CiAgICAgb2JqZWN0U3RvcmVOYW1lcy0+c29ydCgpOwogICAgIHJldHVybiBv
YmplY3RTdG9yZU5hbWVzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAKaW5kZXggMTlhMDY5ZTIzYjM5
ZGJiNGE3MDY1ZDhkZTc4ZDdlZTQ5M2M2OTgxOC4uYjgyNWVjODAwNTE0ODAyOGUyYjA3YjE5ZGM3
ODM5MmE0M2E4Y2JhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNv
bnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCkBAIC01NTUsMTEgKzU1NSwxMCBA
QCBib29sIE1lZGlhQ29udHJvbHNIb3N0OjpzaG93TWVkaWFDb250cm9sc0NvbnRleHRNZW51KEhU
TUxFbGVtZW50JiB0YXJnZXQsIFN0cmluZwogCiAgICAgaWYgKG9wdGlvbnNKU09OT2JqZWN0LT5n
ZXRCb29sZWFuKCJpbmNsdWRlTGFuZ3VhZ2VzIl9zKS52YWx1ZV9vcihmYWxzZSkpIHsKICAgICAg
ICAgaWYgKGF1dG8qIGF1ZGlvVHJhY2tzID0gbWVkaWFFbGVtZW50LmF1ZGlvVHJhY2tzKCk7IGF1
ZGlvVHJhY2tzICYmIGF1ZGlvVHJhY2tzLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgICAgIFZl
Y3RvcjxNZW51SXRlbT4gbGFuZ3VhZ2VNZW51SXRlbXM7Ci0KICAgICAgICAgICAgIGF1dG8mIGNh
cHRpb25QcmVmZXJlbmNlcyA9IHBhZ2UtPmdyb3VwKCkuZW5zdXJlQ2FwdGlvblByZWZlcmVuY2Vz
KCk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGF1ZGlvVHJhY2sgOiBjYXB0aW9uUHJlZmVyZW5j
ZXMuc29ydGVkVHJhY2tMaXN0Rm9yTWVudShhdWRpb1RyYWNrcykpCi0gICAgICAgICAgICAgICAg
bGFuZ3VhZ2VNZW51SXRlbXMuYXBwZW5kKGNyZWF0ZU1lbnVJdGVtKGF1ZGlvVHJhY2ssIGNhcHRp
b25QcmVmZXJlbmNlcy5kaXNwbGF5TmFtZUZvclRyYWNrKGF1ZGlvVHJhY2suZ2V0KCkpLCBhdWRp
b1RyYWNrLT5lbmFibGVkKCkpKTsKKyAgICAgICAgICAgIGF1dG8gbGFuZ3VhZ2VNZW51SXRlbXMg
PSBjYXB0aW9uUHJlZmVyZW5jZXMuc29ydGVkVHJhY2tMaXN0Rm9yTWVudShhdWRpb1RyYWNrcyku
bWFwKFsmXShhdXRvJiBhdWRpb1RyYWNrKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0
ZU1lbnVJdGVtKGF1ZGlvVHJhY2ssIGNhcHRpb25QcmVmZXJlbmNlcy5kaXNwbGF5TmFtZUZvclRy
YWNrKGF1ZGlvVHJhY2suZ2V0KCkpLCBhdWRpb1RyYWNrLT5lbmFibGVkKCkpOworICAgICAgICAg
ICAgfSk7CiAKICAgICAgICAgICAgIGlmICghbGFuZ3VhZ2VNZW51SXRlbXMuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgICAgIGl0ZW1zLmFwcGVuZChjcmVhdGVTdWJtZW51KFdFQl9VSV9TVFJJTkdf
S0VZKCJMYW5ndWFnZXMiLCAiTGFuZ3VhZ2VzIChNZWRpYSBDb250cm9scyBNZW51KSIsICJMYW5n
dWFnZXMgbWVkaWEgY29udHJvbHMgY29udGV4dCBtZW51IHRpdGxlIiksICJnbG9iZSJfcywgV1RG
TW92ZShsYW5ndWFnZU1lbnVJdGVtcykpKTsKQEAgLTU2OCwxNSArNTY3LDEzIEBAIGJvb2wgTWVk
aWFDb250cm9sc0hvc3Q6OnNob3dNZWRpYUNvbnRyb2xzQ29udGV4dE1lbnUoSFRNTEVsZW1lbnQm
IHRhcmdldCwgU3RyaW5nCiAKICAgICBpZiAob3B0aW9uc0pTT05PYmplY3QtPmdldEJvb2xlYW4o
ImluY2x1ZGVTdWJ0aXRsZXMiX3MpLnZhbHVlX29yKGZhbHNlKSkgewogICAgICAgICBpZiAoYXV0
byogdGV4dFRyYWNrcyA9IG1lZGlhRWxlbWVudC50ZXh0VHJhY2tzKCk7IHRleHRUcmFja3MgJiYg
dGV4dFRyYWNrcy0+bGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIFZlY3RvcjxNZW51SXRlbT4gc3Vi
dGl0bGVNZW51SXRlbXM7Ci0KICAgICAgICAgICAgIGF1dG8mIGNhcHRpb25QcmVmZXJlbmNlcyA9
IHBhZ2UtPmdyb3VwKCkuZW5zdXJlQ2FwdGlvblByZWZlcmVuY2VzKCk7CiAgICAgICAgICAgICBh
dXRvIHNvcnRlZFRleHRUcmFja3MgPSBjYXB0aW9uUHJlZmVyZW5jZXMuc29ydGVkVHJhY2tMaXN0
Rm9yTWVudSh0ZXh0VHJhY2tzLCB7IFRleHRUcmFjazo6S2luZDo6U3VidGl0bGVzLCBUZXh0VHJh
Y2s6OktpbmQ6OkNhcHRpb25zLCBUZXh0VHJhY2s6OktpbmQ6OkRlc2NyaXB0aW9ucyB9KTsKICAg
ICAgICAgICAgIGJvb2wgYWxsVHJhY2tzRGlzYWJsZWQgPSBub3RGb3VuZCA9PSBzb3J0ZWRUZXh0
VHJhY2tzLmZpbmRJZihbXSAoY29uc3QgYXV0byYgdGV4dFRyYWNrKSB7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRleHRUcmFjay0+bW9kZSgpID09IFRleHRUcmFjazo6TW9kZTo6U2hvd2luZzsK
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgYm9vbCB1c2VzQXV0b21hdGljVHJhY2sgPSBj
YXB0aW9uUHJlZmVyZW5jZXMuY2FwdGlvbkRpc3BsYXlNb2RlKCkgPT0gQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlczo6QXV0b21hdGljICYmIGFsbFRyYWNrc0Rpc2FibGVkOwotICAgICAgICAgICAgZm9y
IChhdXRvJiB0ZXh0VHJhY2sgOiBzb3J0ZWRUZXh0VHJhY2tzKSB7CisgICAgICAgICAgICBhdXRv
IHN1YnRpdGxlTWVudUl0ZW1zID0gc29ydGVkVGV4dFRyYWNrcy5tYXAoWyZdKGF1dG8mIHRleHRU
cmFjaykgewogICAgICAgICAgICAgICAgIGJvb2wgY2hlY2tlZCA9IGZhbHNlOwogICAgICAgICAg
ICAgICAgIGlmIChhbGxUcmFja3NEaXNhYmxlZCAmJiB0ZXh0VHJhY2sgPT0gJlRleHRUcmFjazo6
Y2FwdGlvbk1lbnVPZmZJdGVtKCkgJiYgKGNhcHRpb25QcmVmZXJlbmNlcy5jYXB0aW9uRGlzcGxh
eU1vZGUoKSA9PSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpGb3JjZWRPbmx5IHx8IGNhcHRpb25Q
cmVmZXJlbmNlcy5jYXB0aW9uRGlzcGxheU1vZGUoKSA9PSBDYXB0aW9uVXNlclByZWZlcmVuY2Vz
OjpNYW51YWwpKQogICAgICAgICAgICAgICAgICAgICBjaGVja2VkID0gdHJ1ZTsKQEAgLTU4NCw4
ICs1ODEsOCBAQCBib29sIE1lZGlhQ29udHJvbHNIb3N0OjpzaG93TWVkaWFDb250cm9sc0NvbnRl
eHRNZW51KEhUTUxFbGVtZW50JiB0YXJnZXQsIFN0cmluZwogICAgICAgICAgICAgICAgICAgICBj
aGVja2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBlbHNlIGlmICghdXNlc0F1dG9tYXRpY1Ry
YWNrICYmIHRleHRUcmFjay0+bW9kZSgpID09IFRleHRUcmFjazo6TW9kZTo6U2hvd2luZykKICAg
ICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgc3VidGl0
bGVNZW51SXRlbXMuYXBwZW5kKGNyZWF0ZU1lbnVJdGVtKHRleHRUcmFjaywgY2FwdGlvblByZWZl
cmVuY2VzLmRpc3BsYXlOYW1lRm9yVHJhY2sodGV4dFRyYWNrLmdldCgpKSwgY2hlY2tlZCkpOwot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVNZW51SXRlbSh0ZXh0
VHJhY2ssIGNhcHRpb25QcmVmZXJlbmNlcy5kaXNwbGF5TmFtZUZvclRyYWNrKHRleHRUcmFjay5n
ZXQoKSksIGNoZWNrZWQpOworICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIGlmICghc3Vi
dGl0bGVNZW51SXRlbXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGl0ZW1zLmFwcGVuZChj
cmVhdGVTdWJtZW51KFdFQl9VSV9TVFJJTkdfS0VZKCJTdWJ0aXRsZXMiLCAiU3VidGl0bGVzIChN
ZWRpYSBDb250cm9scyBNZW51KSIsICJTdWJ0aXRsZXMgbWVkaWEgY29udHJvbHMgY29udGV4dCBt
ZW51IHRpdGxlIiksICJjYXB0aW9ucy5idWJibGUiX3MsIFdURk1vdmUoc3VidGl0bGVNZW51SXRl
bXMpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01l
ZGlhU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFT
b3VyY2UuY3BwCmluZGV4IDkxMjc0N2Y0MDZjMjk1OTQ5OTczYjViYjEzNDlkYmNhNjc0MWMxMzUu
LmEyZTY1OGE5MmY5OTdkN2Y0YjQzZTE3MDNmNGEwZTA5NDkxN2IwZTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCkBAIC0xMDUx
LDEwICsxMDUxLDkgQEAgdm9pZCBNZWRpYVNvdXJjZTo6b25SZWFkeVN0YXRlQ2hhbmdlKFJlYWR5
U3RhdGUgb2xkU3RhdGUsIFJlYWR5U3RhdGUgbmV3U3RhdGUpCiAKIFZlY3RvcjxQbGF0Zm9ybVRp
bWVSYW5nZXM+IE1lZGlhU291cmNlOjphY3RpdmVSYW5nZXMoKSBjb25zdAogewotICAgIFZlY3Rv
cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IGFjdGl2ZVJhbmdlczsKLSAgICBmb3IgKGF1dG8mIHNvdXJj
ZUJ1ZmZlciA6ICptX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMpCi0gICAgICAgIGFjdGl2ZVJhbmdlcy5h
cHBlbmQoc291cmNlQnVmZmVyLT5idWZmZXJlZEludGVybmFsKCkucmFuZ2VzKCkpOwotICAgIHJl
dHVybiBhY3RpdmVSYW5nZXM7CisgICAgcmV0dXJuIFdURjo6bWFwKCptX2FjdGl2ZVNvdXJjZUJ1
ZmZlcnMsIFtdKGF1dG8mIHNvdXJjZUJ1ZmZlcikgeworICAgICAgICByZXR1cm4gc291cmNlQnVm
ZmVyLT5idWZmZXJlZEludGVybmFsKCkucmFuZ2VzKCk7CisgICAgfSk7CiB9CiAKIEV4Y2VwdGlv
bk9yPFJlZjxTb3VyY2VCdWZmZXJQcml2YXRlPj4gTWVkaWFTb3VyY2U6OmNyZWF0ZVNvdXJjZUJ1
ZmZlclByaXZhdGUoY29uc3QgQ29udGVudFR5cGUmIGluY29taW5nVHlwZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1hcC5oCmluZGV4IGVhZjQ5MzE1OTdk
MjY4NTIzYzY2N2JkOWNkY2M0Y2VhNjU0MzM2OTUuLmFmMWUxMDQ1ODE3ODdmMTVmNmYxZjM4NWIy
NTcyNDQ0ZDg4NTk1ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
b3VyY2UvU2FtcGxlTWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJj
ZS9TYW1wbGVNYXAuaApAQCAtOTEsNiArOTEsNyBAQCBwdWJsaWM6CiAgICAgY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZXMucmJlZ2luKCk7IH0K
ICAgICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiBtX3NhbXBsZXMucmVuZCgpOyB9
CiAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyByZXR1cm4gbV9zYW1w
bGVzLnJlbmQoKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVz
LnNpemUoKTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgaXRlcmF0b3IgZmluZFNhbXBsZVdpdGhE
ZWNvZGVLZXkoY29uc3QgS2V5VHlwZSYpOwogICAgIFdFQkNPUkVfRVhQT1JUIGl0ZXJhdG9yIGZp
bmRTYW1wbGVBZnRlckRlY29kZUtleShjb25zdCBLZXlUeXBlJik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyTGlzdC5oCmluZGV4IGZj
NmUwNzNhYjkwZTc2ZDE4MTVmODg5NmI2ZjY2MDk2ZGYyZmRkZDUuLjQzNmJmMDE3YmM4MWFjZmI5
NGY1ZTg1YjkwZjkxY2Y0NWJiZWJkM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyTGlzdC5oCkBAIC00OCw2ICs0OCw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5Tb3VyY2VCdWZmZXJMaXN0KCk7CiAKICAgICB1bnNpZ25lZCBs
b25nIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KKwogICAgIFNvdXJj
ZUJ1ZmZlciogaXRlbSh1bnNpZ25lZCBsb25nIGluZGV4KSBjb25zdCB7IHJldHVybiAoaW5kZXgg
PCBtX2xpc3Quc2l6ZSgpKSA/IG1fbGlzdFtpbmRleF0uZ2V0KCkgOiBudWxscHRyOyB9CiAKICAg
ICB2b2lkIGFkZChSZWY8U291cmNlQnVmZmVyPiYmKTsKQEAgLTU4LDYgKzU5LDkgQEAgcHVibGlj
OgogCiAgICAgVmVjdG9yPFJlZlB0cjxTb3VyY2VCdWZmZXI+Pjo6aXRlcmF0b3IgYmVnaW4oKSB7
IHJldHVybiBtX2xpc3QuYmVnaW4oKTsgfQogICAgIFZlY3RvcjxSZWZQdHI8U291cmNlQnVmZmVy
Pj46Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fbGlzdC5lbmQoKTsgfQorICAgIFZlY3RvcjxS
ZWZQdHI8U291cmNlQnVmZmVyPj46OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9saXN0LmJlZ2luKCk7IH0KKyAgICBWZWN0b3I8UmVmUHRyPFNvdXJjZUJ1ZmZlcj4+Ojpj
b25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2xpc3QuZW5kKCk7IH0KKyAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KIAogICAgIC8vIEV2
ZW50VGFyZ2V0IGludGVyZmFjZQogICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0
SW50ZXJmYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gU291cmNlQnVmZmVyTGlzdEV2ZW50VGFy
Z2V0SW50ZXJmYWNlVHlwZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9z
cGVlY2gvU3BlZWNoU3ludGhlc2lzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNo
L1NwZWVjaFN5bnRoZXNpcy5jcHAKaW5kZXggZWFmM2EyZTFlNzk4YTQ4MWY3NjhiMzNjNWZkMjlk
M2M3Y2JhYjNhZS4uODJjMWEzYTBjMDcyNTVjMWU4MGRhNjFkNTkwYmE5Yzk0MWNjMDY5ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuY3Bw
CkBAIC05Myw5ICs5MywxMCBAQCBjb25zdCBWZWN0b3I8UmVmPFNwZWVjaFN5bnRoZXNpc1ZvaWNl
Pj4mIFNwZWVjaFN5bnRoZXNpczo6Z2V0Vm9pY2VzKCkKICAgICAgICAgcmV0dXJuIG1fdm9pY2VM
aXN0OwogCiAgICAgLy8gSWYgdGhlIHZvaWNlTGlzdCBpcyBlbXB0eSwgdGhhdCdzIHRoZSBjdWUg
dG8gZ2V0IHRoZSB2b2ljZXMgZnJvbSB0aGUgcGxhdGZvcm0gYWdhaW4uCi0gICAgZm9yIChhdXRv
JiB2b2ljZSA6IG1fc3BlZWNoU3ludGhlc2lzQ2xpZW50ID8gbV9zcGVlY2hTeW50aGVzaXNDbGll
bnQtPnZvaWNlTGlzdCgpIDogZW5zdXJlUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcigpLnZvaWNl
TGlzdCgpKQotICAgICAgICBtX3ZvaWNlTGlzdC5hcHBlbmQoU3BlZWNoU3ludGhlc2lzVm9pY2U6
OmNyZWF0ZSgqdm9pY2UpKTsKLQorICAgIGF1dG8mIHZvaWNlTGlzdCA9IG1fc3BlZWNoU3ludGhl
c2lzQ2xpZW50ID8gbV9zcGVlY2hTeW50aGVzaXNDbGllbnQtPnZvaWNlTGlzdCgpIDogZW5zdXJl
UGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcigpLnZvaWNlTGlzdCgpOworICAgIG1fdm9pY2VMaXN0
ID0gdm9pY2VMaXN0Lm1hcChbXShhdXRvJiB2b2ljZSkgeworICAgICAgICByZXR1cm4gU3BlZWNo
U3ludGhlc2lzVm9pY2U6OmNyZWF0ZSgqdm9pY2UpOworICAgIH0pOwogICAgIHJldHVybiBtX3Zv
aWNlTGlzdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gv
Y29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2subW0gYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFzay5tbQppbmRleCBmMWI5Njk1ODA1
N2QyZmU2MDQ0ZDJjN2IyNTlkYjZjNWNlYjQ0ZWZlLi5hNWU4NWFmODI5YmMwZGRkZWY2MmM2MWE0
ZjZjOWYyY2YyYWQ2Y2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVj
aC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFzay5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFzay5tbQpAQCAtMTI4LDkg
KzEyOCw4IEBAIC0gKHZvaWQpY2FsbGJhY2tXaXRoVHJhbnNjcmlwdGlvbnM6KE5TQXJyYXk8U0ZU
cmFuc2NyaXB0aW9uICo+ICopdHJhbnNjcmlwdGlvbnMKICAgICAgICAgaWYgKGFsdGVybmF0aXZl
cy5zaXplKCkgPT0gX21heEFsdGVybmF0aXZlcykKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0K
LSAgICBWZWN0b3I8U3BlZWNoUmVjb2duaXRpb25SZXN1bHREYXRhPiBkYXRhczsKLSAgICBkYXRh
cy5hcHBlbmQoU3BlZWNoUmVjb2duaXRpb25SZXN1bHREYXRhIHsgV1RGTW92ZShhbHRlcm5hdGl2
ZXMpLCBib29sKGlzRmluYWwpIH0pOwotICAgIF9kZWxlZ2F0ZUNhbGxiYWNrKFNwZWVjaFJlY29n
bml0aW9uVXBkYXRlOjpjcmVhdGVSZXN1bHQoX2lkZW50aWZpZXIsIFdURk1vdmUoZGF0YXMpKSk7
CisgICAgU3BlZWNoUmVjb2duaXRpb25SZXN1bHREYXRhIGRhdGEgeyBXVEZNb3ZlKGFsdGVybmF0
aXZlcyksICEhaXNGaW5hbCB9OworICAgIF9kZWxlZ2F0ZUNhbGxiYWNrKFNwZWVjaFJlY29nbml0
aW9uVXBkYXRlOjpjcmVhdGVSZXN1bHQoX2lkZW50aWZpZXIsIHsgV1RGTW92ZShkYXRhKSB9KSk7
CiB9CiAKIC0gKHZvaWQpYXVkaW9TYW1wbGVzQXZhaWxhYmxlOihDTVNhbXBsZUJ1ZmZlclJlZilz
YW1wbGVCdWZmZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL2Nv
Y29hL1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrTW9jay5tbSBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrTW9jay5tbQppbmRleCBiYzVj
NjIxOWI1ZGFkYzNiMWNkYzU5MGQ2NWM4OTdiNzI1MGIxZTIxLi45NjNmYjQ3YzRjODVhYTA2MDVh
MmRhYmM3MTllNTY3NGMyNjBhYmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFza01vY2subW0KKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2tNb2Nr
Lm1tCkBAIC02MywxMSArNjMsOSBAQCAtICh2b2lkKWF1ZGlvU2FtcGxlc0F2YWlsYWJsZTooQ01T
YW1wbGVCdWZmZXJSZWYpc2FtcGxlQnVmZmVyCiAgICAgfQogCiAgICAgLy8gRmFrZSBzb21lIHJl
Y29nbml0aW9uIHJlc3VsdHMuCi0gICAgVmVjdG9yPFNwZWVjaFJlY29nbml0aW9uQWx0ZXJuYXRp
dmVEYXRhPiBhbHRlcm5hdGl2ZXM7Ci0gICAgYWx0ZXJuYXRpdmVzLmFwcGVuZChTcGVlY2hSZWNv
Z25pdGlvbkFsdGVybmF0aXZlRGF0YSB7ICJUZXN0IiwgMS4wIH0pOwotICAgIFZlY3RvcjxTcGVl
Y2hSZWNvZ25pdGlvblJlc3VsdERhdGE+IGRhdGFzOwotICAgIGRhdGFzLmFwcGVuZChTcGVlY2hS
ZWNvZ25pdGlvblJlc3VsdERhdGEgeyBXVEZNb3ZlKGFsdGVybmF0aXZlcyksIHRydWUgIH0pOwot
ICAgIF9kZWxlZ2F0ZUNhbGxiYWNrKFNwZWVjaFJlY29nbml0aW9uVXBkYXRlOjpjcmVhdGVSZXN1
bHQoX2lkZW50aWZpZXIsIFdURk1vdmUoZGF0YXMpKSk7CisgICAgU3BlZWNoUmVjb2duaXRpb25B
bHRlcm5hdGl2ZURhdGEgYWx0ZXJuYXRpdmUgeyAiVGVzdCIsIDEuMCB9OworICAgIFNwZWVjaFJl
Y29nbml0aW9uUmVzdWx0RGF0YSBkYXRhIHsgeyBXVEZNb3ZlKGFsdGVybmF0aXZlKSB9LCB0cnVl
IH07CisgICAgX2RlbGVnYXRlQ2FsbGJhY2soU3BlZWNoUmVjb2duaXRpb25VcGRhdGU6OmNyZWF0
ZVJlc3VsdChfaWRlbnRpZmllciwgeyBXVEZNb3ZlKGRhdGEpIH0pKTsKIAogICAgIGlmICghX2Rv
TXVsdGlwbGVSZWNvZ25pdGlvbnMpCiAgICAgICAgIFtzZWxmIGFib3J0XTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCmluZGV4IGUzNTlh
MDQzYjJlM2NmMzlmOWMyNmJjNTllOThmMTA1ZTEzMmMxMDUuLjhiY2U2NjcwNjZhM2Y3NzZmMGVh
YmE5NjZiODFhNzQ2YTk3NWUzMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9u
L0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcApAQCAtMTY0LDEwICsxNjQsOCBAQCBzdGF0aWMgaW5s
aW5lIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRGdW5jKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlv
bnMmIGZyb20sIGNvbgogICAgIGlmIChjb250ZXh0LmNvbXBvc2l0ZU9wZXJhdGlvbiA9PSBDb21w
b3NpdGVPcGVyYXRpb246OkFkZCkgewogICAgICAgICBBU1NFUlQoY29udGV4dC5wcm9ncmVzcyA9
PSAxLjApOwogICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIHJlc3VsdE9wZXJhdGlvbnM7Ci0g
ICAgICAgIGZvciAoYXV0byBvcGVyYXRpb24gOiBmcm9tLm9wZXJhdGlvbnMoKSkKLSAgICAgICAg
ICAgIHJlc3VsdE9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChvcGVyYXRpb24pOwotICAg
ICAgICBmb3IgKGF1dG8gb3BlcmF0aW9uIDogdG8ub3BlcmF0aW9ucygpKQotICAgICAgICAgICAg
cmVzdWx0T3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKG9wZXJhdGlvbik7CisgICAgICAg
IHJlc3VsdE9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZFZlY3Rvcihmcm9tLm9wZXJhdGlv
bnMoKSk7CisgICAgICAgIHJlc3VsdE9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZFZlY3Rv
cih0by5vcGVyYXRpb25zKCkpOwogICAgICAgICByZXR1cm4gcmVzdWx0T3BlcmF0aW9uczsKICAg
ICB9CiAgICAgYXV0byBib3hTaXplID0gaXM8UmVuZGVyQm94Pihjb250ZXh0LmNsaWVudC0+cmVu
ZGVyZXIoKSkgPyBkb3duY2FzdDxSZW5kZXJCb3g+KCpjb250ZXh0LmNsaWVudC0+cmVuZGVyZXIo
KSkuYm9yZGVyQm94UmVjdCgpLnNpemUoKSA6IExheW91dFNpemUoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmVzQ29udHJvbGxlci5jcHAK
aW5kZXggYjVmZDJhZWYxMDAwMTJkYTljNGJkYjIxZTdhZDA0MWEzNjY0MTZiZi4uNzA5NDUzYmM2
NjI1MmY5NTk4MjRiYTk0ZWNhN2EzMzAwOGM5Y2EzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmVzQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmVzQ29udHJvbGxlci5jcHAKQEAgLTk4
LDkgKzk4LDcgQEAgdm9pZCBEb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXI6OnVwZGF0ZUFuaW1h
dGlvbnNBbmRTZW5kRXZlbnRzKFJlZHVjZWRSZXNvbHV0aW8KICAgICBBU1NFUlQoIW1fdGltZWxp
bmVzLmhhc051bGxSZWZlcmVuY2VzKCkpOwogCiAgICAgLy8gV2UgbmVlZCB0byBjb3B5IG1fdGlt
ZWxpbmVzIGJlZm9yZSBpdGVyYXRpbmcgb3ZlciBpdHMgbWVtYmVycyBzaW5jZSB0aGUgc3RlcHMg
aW4gdGhpcyBwcm9jZWR1cmUgbWF5IG11dGF0ZSBtX3RpbWVsaW5lcy4KLSAgICBWZWN0b3I8UmVm
PERvY3VtZW50VGltZWxpbmU+PiBwcm90ZWN0ZWRUaW1lbGluZXM7Ci0gICAgZm9yIChhdXRvJiB0
aW1lbGluZSA6IG1fdGltZWxpbmVzKQotICAgICAgICBwcm90ZWN0ZWRUaW1lbGluZXMuYXBwZW5k
KHRpbWVsaW5lKTsKKyAgICBhdXRvIHByb3RlY3RlZFRpbWVsaW5lcyA9IGNvcHlUb1ZlY3Rvck9m
PFJlZjxEb2N1bWVudFRpbWVsaW5lPj4obV90aW1lbGluZXMpOwogCiAgICAgLy8gV2UgbmVlZCB0
byBmcmVlemUgdGhlIGN1cnJlbnQgdGltZSBldmVuIGlmIG5vIGFuaW1hdGlvbiBpcyBydW5uaW5n
LgogICAgIC8vIGRvY3VtZW50LnRpbWVsaW5lLmN1cnJlbnRUaW1lIG1heSBiZSBjYWxsZWQgZnJv
bSBhIHJBRiBjYWxsYmFjayBhbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9LZXlmcmFtZUVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVF
ZmZlY3QuY3BwCmluZGV4IDc3ZDFlNjBmYTMyODMxYjEzMjZjM2IzMDg0MzU3NzcyNjA3Mzk5ZjUu
LmNmZTQzMmU3ZGViZTFiZWQxNTU1NjVkODEyYThlYmU4MDdmNjAyYzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcApAQCAtMzc1LDggKzM3NSw3IEBAIHN0
YXRpYyBpbmxpbmUgRXhjZXB0aW9uT3I8dm9pZD4gcHJvY2Vzc1Byb3BlcnR5SW5kZXhlZEtleWZy
YW1lcyhKU0dsb2JhbE9iamVjdCYKICAgICAgICAgY29tcHV0ZU1pc3NpbmdLZXlmcmFtZU9mZnNl
dHMocHJvcGVydHlLZXlmcmFtZXMpOwogCiAgICAgICAgIC8vIDcuIEFkZCBrZXlmcmFtZXMgaW4g
cHJvcGVydHkga2V5ZnJhbWVzIHRvIHByb2Nlc3NlZCBrZXlmcmFtZXMuCi0gICAgICAgIGZvciAo
YXV0byYga2V5ZnJhbWUgOiBwcm9wZXJ0eUtleWZyYW1lcykKLSAgICAgICAgICAgIHBhcnNlZEtl
eWZyYW1lcy5hcHBlbmQoV1RGTW92ZShrZXlmcmFtZSkpOworICAgICAgICBwYXJzZWRLZXlmcmFt
ZXMuYXBwZW5kVmVjdG9yKHByb3BlcnR5S2V5ZnJhbWVzKTsKICAgICB9CiAKICAgICAvLyAzLiBT
b3J0IHByb2Nlc3NlZCBrZXlmcmFtZXMgYnkgdGhlIGNvbXB1dGVkIGtleWZyYW1lIG9mZnNldCBv
ZiBlYWNoIGtleWZyYW1lIGluIGluY3JlYXNpbmcgb3JkZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uY3BwCmluZGV4IDUzNDll
ZjM4ZmU2OTA2NGRkNDUzZmQ2OGQ3ZGM2YThlZTc3M2Q5ZWMuLmMwNWNkODk0MTVmZjQxMjA0ZTNj
M2M4Yzc3M2Y0OGQxMTM2M2MwOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uY3BwCkBAIC00Niw4ICs0Niw3IEBAIENvbnRl
bnRFeHRlbnNpb246OkNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBS
ZWY8Q29tcGlsZWRDb250ZW50CiAgICAgLCBtX2V4dGVuc2lvbkJhc2VVUkwoV1RGTW92ZShleHRl
bnNpb25CYXNlVVJMKSkKIHsKICAgICBERkFCeXRlY29kZUludGVycHJldGVyIGludGVycHJldGVy
KG1fY29tcGlsZWRFeHRlbnNpb24tPnVybEZpbHRlcnNCeXRlY29kZSgpKTsKLSAgICBmb3IgKHVp
bnQ2NF90IGFjdGlvbiA6IGludGVycHJldGVyLmFjdGlvbnNNYXRjaGluZ0V2ZXJ5dGhpbmcoKSkK
LSAgICAgICAgbV91bml2ZXJzYWxBY3Rpb25zLmFwcGVuZChhY3Rpb24pOworICAgIG1fdW5pdmVy
c2FsQWN0aW9ucyA9IGNvcHlUb1ZlY3RvcihpbnRlcnByZXRlci5hY3Rpb25zTWF0Y2hpbmdFdmVy
eXRoaW5nKCkpOwogCiAgICAgaWYgKHNob3VsZENvbXBpbGVDU1MgPT0gU2hvdWxkQ29tcGlsZUNT
Uzo6WWVzKQogICAgICAgICBjb21waWxlR2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgKaW5kZXggYmIxMjczYTVmZDNlZThlNjg4MGJhNzY3YWY5
MjkxN2ViZGRhNzQ4Zi4uZjlhNzYwNjA0MDg5YjBjZTJmNjlmODc2ODY1NGYxMjY4MjM3YTY3ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaApAQCAtNTgsNiArNTgsNyBAQCBwdWJsaWM6CiAg
ICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuZW5kKCk7IH0K
ICAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KICAgICBp
dGVyYXRvciBlbmQoKSB7IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorICAgIHNpemVfdCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpOyB9CiAKICAgICB2b2lkIGFwcGVuZChS
ZWY8Q1NTVmFsdWU+JiYpOwogICAgIHZvaWQgcHJlcGVuZChSZWY8Q1NTVmFsdWU+JiYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwCmluZGV4
IDZhYjVjYjY3NGQ0MTUzZDgyMjUyZjI1ODdlZTQ2ZmNmNWFhYzhjNGEuLjgwZjY5ZTYwZDU0M2Yx
MzZiNTEyMzU5ZGIwNDY4NTI0NTQ1ZjViYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Y2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAKQEAgLTYyMCwxNSArNjIwLDEyIEBAIHZvaWQg
Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmhvaXN0Q2hpbGRyZW5XaXRoT3BlcmF0b3IoQ2FsY09wZXJh
dG9yIG9wKQogCiAgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBuZXdDaGls
ZHJlbjsKICAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikgewotICAgICAgICBpZiAo
aXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkKSAmJiBkb3duY2FzdDxDU1NDYWxjT3BlcmF0
aW9uTm9kZT4oY2hpbGQuZ2V0KCkpLmNhbGNPcGVyYXRvcigpID09IG9wKSB7Ci0gICAgICAgICAg
ICBhdXRvJiBjaGlsZHJlbiA9IGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZC5n
ZXQoKSkuY2hpbGRyZW4oKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY2hpbGRUb01vdmUgOiBj
aGlsZHJlbikKLSAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShjaGls
ZFRvTW92ZSkpOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgaWYgKGlzPENTU0NhbGNPcGVyYXRp
b25Ob2RlPihjaGlsZCkgJiYgZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdl
dCgpKS5jYWxjT3BlcmF0b3IoKSA9PSBvcCkKKyAgICAgICAgICAgIG5ld0NoaWxkcmVuLmFwcGVu
ZFZlY3Rvcihkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpLmNoaWxk
cmVuKCkpOworICAgICAgICBlbHNlCiAgICAgICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmQoV1RG
TW92ZShjaGlsZCkpOwogICAgIH0KLSAgICAKLSAgICBuZXdDaGlsZHJlbi5zaHJpbmtUb0ZpdCgp
OworICAgIEFTU0VSVChuZXdDaGlsZHJlbi5jYXBhY2l0eSgpID09IG5ld0NoaWxkcmVuLnNpemUo
KSk7CiAgICAgbV9jaGlsZHJlbiA9IFdURk1vdmUobmV3Q2hpbGRyZW4pOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckltcGwuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJJbXBsLmNwcAppbmRleCBjNGVkYWEwNjQzZGI0
MmFhYzRmNDU3NzY4MGIxYzc5MTA1YzNlZjgzLi4yNTI5ZDFlY2Q1MjMwYjFmNTUwNzkxNzZmNDkw
YTkxMGMyZjNlYTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Bh
cnNlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VySW1w
bC5jcHAKQEAgLTg4OCw3ICs4ODgsNyBAQCBSZWZQdHI8U3R5bGVSdWxlQ29udGFpbmVyPiBDU1NQ
YXJzZXJJbXBsOjpjb25zdW1lQ29udGFpbmVyUnVsZShDU1NQYXJzZXJUb2tlblJhbgogICAgIGNv
bnN1bWVSdWxlTGlzdChibG9jaywgUmVndWxhclJ1bGVMaXN0LCBbJnJ1bGVzXShSZWZQdHI8U3R5
bGVSdWxlQmFzZT4gcnVsZSkgewogICAgICAgICBydWxlcy5hcHBlbmQocnVsZSk7CiAgICAgfSk7
Ci0gICAgcnVsZXMuc2hyaW5rVG9GaXQoKTsKKyAgICBBU1NFUlQocnVsZXMuY2FwYWNpdHkoKSA9
PSBydWxlcy5zaXplKCkpOwogCiAgICAgaWYgKG1fb2JzZXJ2ZXJXcmFwcGVyKQogICAgICAgICBt
X29ic2VydmVyV3JhcHBlci0+b2JzZXJ2ZXIoKS5lbmRSdWxlQm9keShtX29ic2VydmVyV3JhcHBl
ci0+ZW5kT2Zmc2V0KGJsb2NrKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9N
U3RyaW5nTGlzdC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTVN0cmluZ0xpc3QuaAppbmRleCA2
OWNiMmQ3ZjkzMmUwMGEyNjVlMDhkOGZmM2IxY2I1MGMxMjc3Y2U1Li4yODczY2ZjZmNiZWMzZDg2
Y2YyNzUyODZhN2JkOTIyMjc3NzY1YzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RE9NU3RyaW5nTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdMaXN0LmgK
QEAgLTQwLDkgKzQwLDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RE9NU3RyaW5nTGlzdCk7CiAgICAgfQogCisgICAgc3RhdGljIFJlZjxET01TdHJpbmdMaXN0PiBj
cmVhdGUoVmVjdG9yPFN0cmluZz4mJiBzdHJpbmdzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRE9NU3RyaW5nTGlzdChXVEZNb3ZlKHN0cmluZ3MpKSk7CisgICAgfQorCiAg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmdzLmlzRW1wdHkoKTsgfQog
ICAgIHZvaWQgY2xlYXIoKSB7IG1fc3RyaW5ncy5jbGVhcigpOyB9CiAgICAgdm9pZCBhcHBlbmQo
Y29uc3QgU3RyaW5nJiBzdHJpbmcpIHsgbV9zdHJpbmdzLmFwcGVuZChzdHJpbmcpOyB9CisgICAg
dm9pZCBhcHBlbmQoU3RyaW5nJiYgc3RyaW5nKSB7IG1fc3RyaW5ncy5hcHBlbmQoV1RGTW92ZShz
dHJpbmcpKTsgfQogICAgIHZvaWQgc29ydCgpOwogCiAgICAgLy8gSW1wbGVtZW50cyB0aGUgSURM
LgpAQCAtNTMsNyArNTksMTAgQEAgcHVibGljOgogICAgIG9wZXJhdG9yIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JigpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nczsgfQogCiBwcml2YXRlOgotICAgIERP
TVN0cmluZ0xpc3QoKSB7IH0KKyAgICBET01TdHJpbmdMaXN0KCkgPSBkZWZhdWx0OworICAgIGV4
cGxpY2l0IERPTVN0cmluZ0xpc3QoVmVjdG9yPFN0cmluZz4mJiBzdHJpbmdzKQorICAgICAgICA6
IG1fc3RyaW5ncyhXVEZNb3ZlKHN0cmluZ3MpKQorICAgIHsgfQogCiAgICAgVmVjdG9yPFN0cmlu
Zz4gbV9zdHJpbmdzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFBh
dGguY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAKaW5kZXggNDZmYjY0NWUw
NTMzNzU4MWY5ZmEzNDUyMzAzYTJmZTM4MGY0NmMwNi4uZWNiY2MwMGYzNmYwNzZlMzIwYjZhZDE2
YWQxZDlhMGJmMDM4ZTI3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0
aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAKQEAgLTI3NCwxMSAr
Mjc0LDExIEBAIFZlY3RvcjxFdmVudFRhcmdldCo+IEV2ZW50UGF0aDo6Y29tcHV0ZVBhdGhVbmNs
b3NlZFRvVGFyZ2V0KGNvbnN0IEV2ZW50VGFyZ2V0JiB0CiAKIEV2ZW50UGF0aDo6RXZlbnRQYXRo
KGNvbnN0IFZlY3RvcjxFdmVudFRhcmdldCo+JiB0YXJnZXRzKQogewotICAgIGZvciAoYXV0byog
dGFyZ2V0IDogdGFyZ2V0cykgeworICAgIG1fcGF0aCA9IHRhcmdldHMubWFwKFsmXShhdXRvKiB0
YXJnZXQpIHsKICAgICAgICAgQVNTRVJUKHRhcmdldCk7CiAgICAgICAgIEFTU0VSVCghaXM8Tm9k
ZT4odGFyZ2V0KSk7Ci0gICAgICAgIG1fcGF0aC5hcHBlbmQoRXZlbnRDb250ZXh0IHsgRXZlbnRD
b250ZXh0OjpUeXBlOjpOb3JtYWwsIG51bGxwdHIsIHRhcmdldCwgKnRhcmdldHMuYmVnaW4oKSwg
MCB9KTsKLSAgICB9CisgICAgICAgIHJldHVybiBFdmVudENvbnRleHQgeyBFdmVudENvbnRleHQ6
OlR5cGU6Ok5vcm1hbCwgbnVsbHB0ciwgdGFyZ2V0LCAqdGFyZ2V0cy5iZWdpbigpLCAwIH07Cisg
ICAgfSk7CiB9CiAKIHN0YXRpYyBOb2RlKiBtb3ZlT3V0T2ZBbGxTaGFkb3dSb290cyhOb2RlJiBz
dGFydGluZ05vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRnVsbHNjcmVlbk1h
bmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0Z1bGxzY3JlZW5NYW5hZ2VyLmNwcAppbmRl
eCBlY2U0OGU0MjY3OTcwOTVkYTcwOWEwNGRhNjg2YTRmZTBiYzI5MjhjLi44ZTFiMjZjYWYwNDE4
MDM5MDc5MDhiZDc2ZWYxMjliODhmZjI1ZTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRnVsbHNjcmVlbk1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9GdWxsc2Ny
ZWVuTWFuYWdlci5jcHAKQEAgLTI2NSw5ICsyNjUsOCBAQCB2b2lkIEZ1bGxzY3JlZW5NYW5hZ2Vy
OjpjYW5jZWxGdWxsc2NyZWVuKCkKIAogICAgIC8vIFRvIGFjaGlldmUgdGhhdCBhaW0sIHJlbW92
ZSBhbGwgdGhlIGVsZW1lbnRzIGZyb20gdGhlIHRvcCBkb2N1bWVudCdzIHN0YWNrIGV4Y2VwdCBm
b3IgdGhlIGZpcnN0IGJlZm9yZQogICAgIC8vIGNhbGxpbmcgd2Via2l0RXhpdEZ1bGxzY3JlZW4o
KToKLSAgICBWZWN0b3I8UmVmUHRyPEVsZW1lbnQ+PiByZXBsYWNlbWVudEZ1bGxzY3JlZW5FbGVt
ZW50U3RhY2s7Ci0gICAgcmVwbGFjZW1lbnRGdWxsc2NyZWVuRWxlbWVudFN0YWNrLmFwcGVuZCh0
b3BEb2N1bWVudC5mdWxsc2NyZWVuTWFuYWdlcigpLmZ1bGxzY3JlZW5FbGVtZW50KCkpOwotICAg
IHRvcERvY3VtZW50LmZ1bGxzY3JlZW5NYW5hZ2VyKCkubV9mdWxsc2NyZWVuRWxlbWVudFN0YWNr
LnN3YXAocmVwbGFjZW1lbnRGdWxsc2NyZWVuRWxlbWVudFN0YWNrKTsKKyAgICBSZWZQdHIgZnVs
bHNjcmVuRWxlbWVudCA9IHRvcERvY3VtZW50LmZ1bGxzY3JlZW5NYW5hZ2VyKCkuZnVsbHNjcmVl
bkVsZW1lbnQoKTsKKyAgICB0b3BEb2N1bWVudC5mdWxsc2NyZWVuTWFuYWdlcigpLm1fZnVsbHNj
cmVlbkVsZW1lbnRTdGFjayA9IFZlY3RvciB7IFdURk1vdmUoZnVsbHNjcmVuRWxlbWVudCkgfTsK
IAogICAgIHRvcERvY3VtZW50LmZ1bGxzY3JlZW5NYW5hZ2VyKCkuZXhpdEZ1bGxzY3JlZW4oKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJsZVNjcmlwdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vTG9hZGFibGVTY3JpcHQuY3BwCmluZGV4IDFiZGRlMWViNWQ2YTA3
ZjExNzM4OWI5OWM3NWVjYjAxYjYwZjg4MDkuLjQxZjQzY2U2Njg1MDMwZWQ5ZDM5ZGYwNWI5ZmM5
MjNiMTIzOTVkZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJsZVNjcmlw
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0xvYWRhYmxlU2NyaXB0LmNwcApAQCAtNTEs
MTIgKzUxLDggQEAgdm9pZCBMb2FkYWJsZVNjcmlwdDo6cmVtb3ZlQ2xpZW50KExvYWRhYmxlU2Ny
aXB0Q2xpZW50JiBjbGllbnQpCiAKIHZvaWQgTG9hZGFibGVTY3JpcHQ6Om5vdGlmeUNsaWVudEZp
bmlzaGVkKCkKIHsKLSAgICBSZWZQdHI8TG9hZGFibGVTY3JpcHQ+IHByb3RlY3RlZFRoaXModGhp
cyk7Ci0KLSAgICBWZWN0b3I8TG9hZGFibGVTY3JpcHRDbGllbnQqPiB2ZWN0b3I7Ci0gICAgZm9y
IChhdXRvJiBwYWlyIDogbV9jbGllbnRzKQotICAgICAgICB2ZWN0b3IuYXBwZW5kKHBhaXIua2V5
KTsKLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IHZlY3RvcikKKyAgICBSZWYgcHJvdGVjdGVkVGhp
cyB7ICp0aGlzIH07CisgICAgZm9yIChhdXRvJiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGll
bnRzLnZhbHVlcygpKSkKICAgICAgICAgY2xpZW50LT5ub3RpZnlGaW5pc2hlZCgqdGhpcyk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwCmluZGV4IDUwZjQ2MzBm
ODllYzg5NWRmMWNlNWFiOGVkNTgxODliN2FmYmY2NjIuLjEyMjYzZTI1NmVlNTZhNDUyYzMyMjgx
MjVjYWRkNWYxNzBmNDVmMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1
dHRvbkdyb3Vwcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBz
LmNwcApAQCAtNTksOSArNTksNyBAQCBpbmxpbmUgYm9vbCBSYWRpb0J1dHRvbkdyb3VwOjppc1Zh
bGlkKCkgY29uc3QKIAogVmVjdG9yPFJlZjxIVE1MSW5wdXRFbGVtZW50Pj4gUmFkaW9CdXR0b25H
cm91cDo6bWVtYmVycygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFJlZjxIVE1MSW5wdXRFbGVtZW50
Pj4gc29ydGVkTWVtYmVyczsKLSAgICBmb3IgKGF1dG8mIG1lbWJlciA6IG1fbWVtYmVycykKLSAg
ICAgICAgc29ydGVkTWVtYmVycy5hcHBlbmQobWVtYmVyKTsKKyAgICBhdXRvIHNvcnRlZE1lbWJl
cnMgPSBjb3B5VG9WZWN0b3JPZjxSZWY8SFRNTElucHV0RWxlbWVudD4+KG1fbWVtYmVycyk7CiAg
ICAgc3RkOjpzb3J0KHNvcnRlZE1lbWJlcnMuYmVnaW4oKSwgc29ydGVkTWVtYmVycy5lbmQoKSwg
W10oYXV0byYgYSwgYXV0byYgYikgewogICAgICAgICByZXR1cm4gaXNfbHQodHJlZU9yZGVyPENv
bXBvc2VkVHJlZT4oYSwgYikpOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9EaXJlY3RvcnlGaWxlTGlzdENyZWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9E
aXJlY3RvcnlGaWxlTGlzdENyZWF0b3IuY3BwCmluZGV4IDlkM2RhMTg1M2MzYTYzMjBmZWIzMTk3
NTE2MmU0MzVhZTkzZmZkZDEuLjk4NWY3YTYyZjBjMWYzOTc1NTgyZWIzZjliOTg5NzUxNTYxNTY2
NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGlyZWN0b3J5RmlsZUxpc3RDcmVh
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RpcmVjdG9yeUZpbGVMaXN0Q3JlYXRv
ci5jcHAKQEAgLTg2LDEzICs4NiwxMSBAQCBzdGF0aWMgVmVjdG9yPEZpbGVJbmZvcm1hdGlvbj4g
Z2F0aGVyRmlsZUluZm9ybWF0aW9uKGNvbnN0IFZlY3RvcjxGaWxlQ2hvb3NlckZpbAogc3RhdGlj
IFJlZjxGaWxlTGlzdD4gdG9GaWxlTGlzdChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFZlY3Rv
cjxGaWxlSW5mb3JtYXRpb24+JiBmaWxlcykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotICAgIFZlY3RvcjxSZWY8RmlsZT4+IGZpbGVPYmplY3RzOwotICAgIGZvciAoYXV0byYgZmls
ZSA6IGZpbGVzKSB7CisgICAgYXV0byBmaWxlT2JqZWN0cyA9IGZpbGVzLm1hcChbZG9jdW1lbnRd
KGF1dG8mIGZpbGUpIHsKICAgICAgICAgaWYgKGZpbGUucmVsYXRpdmVQYXRoLmlzTnVsbCgpKQot
ICAgICAgICAgICAgZmlsZU9iamVjdHMuYXBwZW5kKEZpbGU6OmNyZWF0ZShkb2N1bWVudCwgZmls
ZS5wYXRoLCB7IH0sIGZpbGUuZGlzcGxheU5hbWUpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgZmlsZU9iamVjdHMuYXBwZW5kKEZpbGU6OmNyZWF0ZVdpdGhSZWxhdGl2ZVBhdGgoZG9jdW1l
bnQsIGZpbGUucGF0aCwgZmlsZS5yZWxhdGl2ZVBhdGgpKTsKLSAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gRmlsZTo6Y3JlYXRlKGRvY3VtZW50LCBmaWxlLnBhdGgsIHsgfSwgZmlsZS5kaXNwbGF5
TmFtZSk7CisgICAgICAgIHJldHVybiBGaWxlOjpjcmVhdGVXaXRoUmVsYXRpdmVQYXRoKGRvY3Vt
ZW50LCBmaWxlLnBhdGgsIGZpbGUucmVsYXRpdmVQYXRoKTsKKyAgICB9KTsKICAgICByZXR1cm4g
RmlsZUxpc3Q6OmNyZWF0ZShXVEZNb3ZlKGZpbGVPYmplY3RzKSk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKaW5kZXggYzRiMDg0ZDJkZTcxZmQzMTlmZThj
MDY5YjQ1ZmY3ZmNjY2VkZTVlYy4uNzJhZmUwNGUwN2Y4OWM4YzI0YWYzZjhiOGNhZDM4Y2UyOTZh
OGQwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKQEAgLTYz
NCw5ICs2MzQsOSBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzYXZlTGFzdFNlbGVjdGlvbigp
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbi5j
bGVhcigpOwotICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGxpc3RJdGVtcygpKQotICAgICAgICBt
X2xhc3RPbkNoYW5nZVNlbGVjdGlvbi5hcHBlbmQoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVt
ZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCkp
OworICAgIG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uID0gbGlzdEl0ZW1zKCkubWFwKFtdKGF1dG8m
IGVsZW1lbnQpIHsKKyAgICAgICAgcmV0dXJuIGlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVu
dCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5zZWxlY3RlZCgpOwor
ICAgIH0pOwogfQogCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3Rpb25B
bmNob3JJbmRleChpbnQgaW5kZXgpCkBAIC02NDUsMTAgKzY0NSw5IEBAIHZvaWQgSFRNTFNlbGVj
dEVsZW1lbnQ6OnNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KGludCBpbmRleCkKIAogICAg
IC8vIENhY2hlIHRoZSBzZWxlY3Rpb24gc3RhdGUgc28gd2UgY2FuIHJlc3RvcmUgdGhlIG9sZCBz
ZWxlY3Rpb24gYXMgdGhlIG5ldwogICAgIC8vIHNlbGVjdGlvbiBwaXZvdHMgYXJvdW5kIHRoaXMg
YW5jaG9yIGluZGV4LgotICAgIG1fY2FjaGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rpb24uY2xlYXIo
KTsKLQotICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGxpc3RJdGVtcygpKQotICAgICAgICBtX2Nh
Y2hlZFN0YXRlRm9yQWN0aXZlU2VsZWN0aW9uLmFwcGVuZChpczxIVE1MT3B0aW9uRWxlbWVudD4o
KmVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0
ZWQoKSk7CisgICAgbV9jYWNoZWRTdGF0ZUZvckFjdGl2ZVNlbGVjdGlvbiA9IGxpc3RJdGVtcygp
Lm1hcChbXShhdXRvJiBlbGVtZW50KSB7CisgICAgICAgIHJldHVybiBpczxIVE1MT3B0aW9uRWxl
bWVudD4oKmVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCku
c2VsZWN0ZWQoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0QWN0
aXZlU2VsZWN0aW9uRW5kSW5kZXgoaW50IGluZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFw
LmNwcAppbmRleCAwNWIyNzM3OWYyZDkyMTk0NDg5MzJjNDZhYjMzYjJlZjAzMWFmYzZhLi41OWJm
YzZlMGYxZTU5MDQzZGNjNWJiZGEyZDIyYWFlMzY1YTYxMzE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0lt
YWdlQml0bWFwLmNwcApAQCAtMTEyLDEwICsxMTIsOSBAQCB2b2lkIEltYWdlQml0bWFwOjpjcmVh
dGVQcm9taXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQs
CiAKIFZlY3RvcjxzdGQ6Om9wdGlvbmFsPEltYWdlQml0bWFwQmFja2luZz4+IEltYWdlQml0bWFw
OjpkZXRhY2hCaXRtYXBzKFZlY3RvcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiYmIGJpdG1hcHMpCiB7
Ci0gICAgVmVjdG9yPHN0ZDo6b3B0aW9uYWw8SW1hZ2VCaXRtYXBCYWNraW5nPj4gYnVmZmVyczsK
LSAgICBmb3IgKGF1dG8mIGJpdG1hcCA6IGJpdG1hcHMpCi0gICAgICAgIGJ1ZmZlcnMuYXBwZW5k
KGJpdG1hcC0+dGFrZUltYWdlQml0bWFwQmFja2luZygpKTsKLSAgICByZXR1cm4gYnVmZmVyczsK
KyAgICByZXR1cm4gV1RGOjptYXAoV1RGTW92ZShiaXRtYXBzKSwgW10oYXV0byYmIGJpdG1hcCkg
eworICAgICAgICByZXR1cm4gYml0bWFwLT50YWtlSW1hZ2VCaXRtYXBCYWNraW5nKCk7CisgICAg
fSk7CiB9CiAKIHZvaWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgSW1hZ2VCaXRtYXA6OlNvdXJjZSYmIHNv
dXJjZSwgSW1hZ2VCaXRtYXBPcHRpb25zJiYgb3B0aW9ucywgaW50IHN4LCBpbnQgc3ksIGludCBz
dywgaW50IHNoLCBJbWFnZUJpdG1hcDo6UHJvbWlzZSYmIHByb21pc2UpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3Bw
CmluZGV4IDYxMTQ2MDI3N2Y2Njc5YTQ5MWUwZjk4MzE3Nzk3MzAwN2ViYmRkYzYuLmY3MzM2NGYz
ODYwYzI2YjkzNjYxOGM0ZjdlMWExNzgyNWU4ZDUwMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCkBAIC0z
MDIxLDkgKzMwMjEsOCBAQCBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxSZWZQdHI8V2ViR0xTaGFkZXI+
Pj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0YWNoZQogICAgIH07CiAgICAgVmVj
dG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+IHNoYWRlck9iamVjdHM7CiAgICAgZm9yIChhdXRvIHNo
YWRlclR5cGUgOiBzaGFkZXJUeXBlcykgewotICAgICAgICBSZWZQdHI8V2ViR0xTaGFkZXI+IHNo
YWRlciA9IHByb2dyYW0uZ2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVyVHlwZSk7Ci0gICAgICAgIGlm
IChzaGFkZXIpCi0gICAgICAgICAgICBzaGFkZXJPYmplY3RzLmFwcGVuZChzaGFkZXIpOworICAg
ICAgICBpZiAoUmVmUHRyIHNoYWRlciA9IHByb2dyYW0uZ2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVy
VHlwZSkpCisgICAgICAgICAgICBzaGFkZXJPYmplY3RzLmFwcGVuZChXVEZNb3ZlKHNoYWRlcikp
OwogICAgIH0KICAgICByZXR1cm4gc2hhZGVyT2JqZWN0czsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCmluZGV4IDhhY2I2
OGFmNDU1MWEzOGI3OTljNzEzYWE3NWRjMGY3OTE5MDA0YmUuLjBhNWVkNzhmNDU4Zjk5YjZiYzdm
YzM3MWRmOTRjZmU5MjVhNGQ0ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcApAQCAtODUsMTIgKzg1LDExIEBAIHN0YXRp
YyBTdHJpbmdWaWV3IGV4dHJhY3RDaGFyc2V0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAKIGJvb2wg
SFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpwcm9jZXNzTWV0YShIVE1MVG9rZW4mIHRva2VuKQogewot
ICAgIEF0dHJpYnV0ZUxpc3QgYXR0cmlidXRlczsKLSAgICBmb3IgKGF1dG8mIGF0dHJpYnV0ZSA6
IHRva2VuLmF0dHJpYnV0ZXMoKSkgeworICAgIGF1dG8gYXR0cmlidXRlcyA9IHRva2VuLmF0dHJp
YnV0ZXMoKS5tYXAoW10oYXV0byYgYXR0cmlidXRlKSB7CiAgICAgICAgIFN0cmluZyBhdHRyaWJ1
dGVOYW1lID0gU3RyaW5nSW1wbDo6Y3JlYXRlOEJpdElmUG9zc2libGUoYXR0cmlidXRlLm5hbWUp
OwogICAgICAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUgPSBTdHJpbmdJbXBsOjpjcmVhdGU4Qml0
SWZQb3NzaWJsZShhdHRyaWJ1dGUudmFsdWUpOwotICAgICAgICBhdHRyaWJ1dGVzLmFwcGVuZChz
dGQ6Om1ha2VfcGFpcihhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVWYWx1ZSkpOwotICAgIH0KKyAg
ICAgICAgcmV0dXJuIHN0ZDo6cGFpciB7IFdURk1vdmUoYXR0cmlidXRlTmFtZSksIFdURk1vdmUo
YXR0cmlidXRlVmFsdWUpIH07CisgICAgfSk7CiAKICAgICBtX2VuY29kaW5nID0gZW5jb2RpbmdG
cm9tTWV0YUF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CiAgICAgcmV0dXJuIG1fZW5jb2RpbmcuaXNW
YWxpZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVC
dWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5j
cHAKaW5kZXggNmI3MWJlZjgxYTdlMjg0NzFlZWZkN2M1MzE1MmE4YTBhODJkMmRiNS4uYTFmMTY3
Y2IwODNjOTk4NDM2MTgzNDExODAyOWYyODVlNDFjMDAwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCkBAIC0yMjAwLDExICsyMjAwLDEwIEBA
IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2hhcmFjdGVyKEF0b21IVE1MVG9rZW4mJiB0
b2tlbikKIC8vIEZyb20gdGhlIHN0cmluZyA0MDg5OTYxMDEwLCBjcmVhdGVzIGEgbGluayBvZiB0
aGUgZm9ybSA8YSBocmVmPSJ0ZWw6NDA4OTk2MTAxMCI+NDA4OTk2MTAxMDwvYT4gYW5kIGluc2Vy
dHMgaXQuCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6aW5zZXJ0UGhvbmVOdW1iZXJMaW5rKGNvbnN0
IFN0cmluZyYgc3RyaW5nKQogewotICAgIFZlY3RvcjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZXM7Ci0g
ICAgYXR0cmlidXRlcy5hcHBlbmQoQXR0cmlidXRlKEhUTUxOYW1lczo6aHJlZkF0dHIsIG1ha2VT
dHJpbmcoInRlbDoiX3MsIHN0cmluZykpKTsKKyAgICBBdHRyaWJ1dGUgYXR0cmlidXRlKEhUTUxO
YW1lczo6aHJlZkF0dHIsIG1ha2VTdHJpbmcoInRlbDoiX3MsIHN0cmluZykpOwogCiAgICAgY29u
c3QgQXRvbVN0cmluZyYgYVRhZ0xvY2FsTmFtZSA9IGFUYWctPmxvY2FsTmFtZSgpOwotICAgIEF0
b21IVE1MVG9rZW4gYVN0YXJ0VG9rZW4oSFRNTFRva2VuOjpTdGFydFRhZywgYVRhZ0xvY2FsTmFt
ZSwgV1RGTW92ZShhdHRyaWJ1dGVzKSk7CisgICAgQXRvbUhUTUxUb2tlbiBhU3RhcnRUb2tlbihI
VE1MVG9rZW46OlN0YXJ0VGFnLCBhVGFnTG9jYWxOYW1lLCB7IFdURk1vdmUoYXR0cmlidXRlKSB9
KTsKICAgICBBdG9tSFRNTFRva2VuIGFFbmRUb2tlbihIVE1MVG9rZW46OkVuZFRhZywgYVRhZ0xv
Y2FsTmFtZSk7CiAKICAgICBwcm9jZXNzU3RhcnRUYWcoV1RGTW92ZShhU3RhcnRUb2tlbikpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNlci5jcHAK
aW5kZXggNGRhOTU5ZjQwZmU5ZWEzMzc0N2NkMjM4OGNlYjc5ZjZkNzJkYjdlZC4uNDcwNmYyNmU4
NDQwOWVlODEzY2QxM2JjNWY0ZTBhY2NmNjc0YTg2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwCkBAIC01MSw5ICs1MSw4IEBAIHZv
aWQgVGV4dERvY3VtZW50UGFyc2VyOjppbnNlcnRGYWtlUHJlRWxlbWVudCgpCiAgICAgLy8gV2Ug
Y3JlYXRlIGEgZmFrZSB0b2tlbiBhbmQgZ2l2ZSBpdCB0byB0aGUgdHJlZSBidWlsZGVyIHJhdGhl
ciB0aGFuCiAgICAgLy8gc2VuZGluZyBmYWtlIGJ5dGVzIHRocm91Z2ggdGhlIGZyb250LWVuZCBv
ZiB0aGUgcGFyc2VyIHRvIGF2b2lkCiAgICAgLy8gZGlzdHJ1YmluZyB0aGUgbGluZS9jb2x1bW4g
bnVtYmVyIGNhbGN1bGF0aW9ucy4KLSAgICBWZWN0b3I8QXR0cmlidXRlPiBhdHRyaWJ1dGVzOwot
ICAgIGF0dHJpYnV0ZXMuYXBwZW5kKEF0dHJpYnV0ZShzdHlsZUF0dHIsICJ3b3JkLXdyYXA6IGJy
ZWFrLXdvcmQ7IHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsiKSk7Ci0gICAgQXRvbUhUTUxUb2tlbiBm
YWtlUHJlKEhUTUxUb2tlbjo6U3RhcnRUYWcsIHByZVRhZy0+bG9jYWxOYW1lKCksIFdURk1vdmUo
YXR0cmlidXRlcykpOworICAgIEF0dHJpYnV0ZSBhdHRyaWJ1dGUoc3R5bGVBdHRyLCAid29yZC13
cmFwOiBicmVhay13b3JkOyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7Iik7CisgICAgQXRvbUhUTUxU
b2tlbiBmYWtlUHJlKEhUTUxUb2tlbjo6U3RhcnRUYWcsIHByZVRhZy0+bG9jYWxOYW1lKCksIHsg
V1RGTW92ZShhdHRyaWJ1dGUpIH0pOwogICAgIHRyZWVCdWlsZGVyKCkuY29uc3RydWN0VHJlZShX
VEZNb3ZlKGZha2VQcmUpKTsKIAogICAgIC8vIE5vcm1hbGx5IHdlIHdvdWxkIHNraXAgdGhlIGZp
cnN0IFxuIGFmdGVyIGEgPHByZT4gZWxlbWVudCwgYnV0IHdlIGRvbid0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29udGVudEZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvQ29udGVudEZpbHRlci5jcHAKaW5kZXggMjg5ZjMyYTYzNzBkM2NkYzk1OGQ2MzZlNTg3
MGNmNzYzZTEzNzM1Zi4uZmQ5ZTk1YWQwN2ExM2VlZTdhMTJhYjcwNWJlNTcwMWYzMjNjOTg5ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0NvbnRlbnRGaWx0ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Db250ZW50RmlsdGVyLmNwcApAQCAtNjcsMTEgKzY3LDkg
QEAgVmVjdG9yPENvbnRlbnRGaWx0ZXI6OlR5cGU+JiBDb250ZW50RmlsdGVyOjp0eXBlcygpCiAK
IHN0ZDo6dW5pcXVlX3B0cjxDb250ZW50RmlsdGVyPiBDb250ZW50RmlsdGVyOjpjcmVhdGUoQ29u
dGVudEZpbHRlckNsaWVudCYgY2xpZW50KQogewotICAgIENvbnRhaW5lciBmaWx0ZXJzOwotICAg
IGZvciAoYXV0byYgdHlwZSA6IHR5cGVzKCkpIHsKLSAgICAgICAgYXV0byBmaWx0ZXIgPSB0eXBl
LmNyZWF0ZSgpOwotICAgICAgICBmaWx0ZXJzLmFwcGVuZChXVEZNb3ZlKGZpbHRlcikpOwotICAg
IH0KKyAgICBhdXRvIGZpbHRlcnMgPSB0eXBlcygpLm1hcChbXShhdXRvJiB0eXBlKSB7CisgICAg
ICAgIHJldHVybiB0eXBlLmNyZWF0ZSgpOworICAgIH0pOwogCiAgICAgaWYgKGZpbHRlcnMuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFBh
cnNlci5jcHAKaW5kZXggYjg3ZGQ4MzUwNjA3YzI0YmUyNTZlMzQ0MWJlZDJkMzc2N2UwOTU1Mi4u
NGExMTQ0MjVlMTE2ZDJjNDJkMTkwMzkyM2VkZjg4NjM4M2Q4ZjA2NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFBhcnNl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVNYW5pZmVzdFBhcnNlci5jcHAKQEAgLTE4MCw3ICsxODAsNyBAQCBzdGQ6Om9wdGlvbmFsPEFw
cGxpY2F0aW9uQ2FjaGVNYW5pZmVzdD4gcGFyc2VBcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3QoY29u
c3QgVVJMJgogICAgICAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh1cmwu
cHJvdG9jb2woKSwgbWFuaWZlc3RVUkwucHJvdG9jb2woKSkpCiAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgbWFuaWZlc3Qub25saW5lQWxsb3dlZFVSTHMu
YXBwZW5kKHVybCk7CisgICAgICAgICAgICAgICAgbWFuaWZlc3Qub25saW5lQWxsb3dlZFVSTHMu
YXBwZW5kKFdURk1vdmUodXJsKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVz
aXplT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZlci5jcHAK
aW5kZXggOTNkYTFhNDU2MDRlNDUyYTc3NTkzZTE4ZDFmNDczMzYzNDk5NDM2Ny4uNGZmZDY5ZDAz
NDQxMDliNDdhZmI1ZTUxOTdhYTNmZGZkNDk3ZGVkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9SZXNpemVPYnNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNp
emVPYnNlcnZlci5jcHAKQEAgLTEyNSwxMSArMTI1LDEwIEBAIHNpemVfdCBSZXNpemVPYnNlcnZl
cjo6Z2F0aGVyT2JzZXJ2YXRpb25zKHNpemVfdCBkZWVwZXJUaGFuKQogCiB2b2lkIFJlc2l6ZU9i
c2VydmVyOjpkZWxpdmVyT2JzZXJ2YXRpb25zKCkKIHsKLSAgICBWZWN0b3I8UmVmPFJlc2l6ZU9i
c2VydmVyRW50cnk+PiBlbnRyaWVzOwotICAgIGZvciAoY29uc3QgYXV0byYgb2JzZXJ2YXRpb24g
OiBtX2FjdGl2ZU9ic2VydmF0aW9ucykgeworICAgIGF1dG8gZW50cmllcyA9IG1fYWN0aXZlT2Jz
ZXJ2YXRpb25zLm1hcChbXShhdXRvJiBvYnNlcnZhdGlvbikgewogICAgICAgICBBU1NFUlQob2Jz
ZXJ2YXRpb24tPnRhcmdldCgpKTsKLSAgICAgICAgZW50cmllcy5hcHBlbmQoUmVzaXplT2JzZXJ2
ZXJFbnRyeTo6Y3JlYXRlKG9ic2VydmF0aW9uLT50YXJnZXQoKSwgb2JzZXJ2YXRpb24tPmNvbXB1
dGVDb250ZW50UmVjdCgpLCBvYnNlcnZhdGlvbi0+Ym9yZGVyQm94U2l6ZSgpLCBvYnNlcnZhdGlv
bi0+Y29udGVudEJveFNpemUoKSkpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIFJlc2l6ZU9ic2Vy
dmVyRW50cnk6OmNyZWF0ZShvYnNlcnZhdGlvbi0+dGFyZ2V0KCksIG9ic2VydmF0aW9uLT5jb21w
dXRlQ29udGVudFJlY3QoKSwgb2JzZXJ2YXRpb24tPmJvcmRlckJveFNpemUoKSwgb2JzZXJ2YXRp
b24tPmNvbnRlbnRCb3hTaXplKCkpOworICAgIH0pOwogICAgIG1fYWN0aXZlT2JzZXJ2YXRpb25z
LmNsZWFyKCk7CiAgICAgYXV0byBhY3RpdmVPYnNlcnZhdGlvblRhcmdldHMgPSBzdGQ6OmV4Y2hh
bmdlKG1fYWN0aXZlT2JzZXJ2YXRpb25UYXJnZXRzLCB7IH0pOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9U
ZXh0SW5kaWNhdG9yLmNwcAppbmRleCAzODdkNTE5YWU1MTcyZDY4MGE1YjI4ODQzYmJlOGZmOTk2
YzZiMzM1Li4wOTliOTFkNTE1MjQ1NWFlNzc3ZTVmZjI1NmIxNTcyNjkwNDMzZWQxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKQEAgLTM2MSwxNyArMzYxLDE2IEBAIHN0YXRp
YyBib29sIGluaXRpYWxpemVJbmRpY2F0b3IoVGV4dEluZGljYXRvckRhdGEmIGRhdGEsIEZyYW1l
JiBmcmFtZSwgY29uc3QgU2ltCiAgICAgICAgIHRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29v
cmRpbmF0ZXMudW5pdGUodGV4dFJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMpOwogICAgIH0KIAot
ICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXM7
Ci0gICAgZm9yIChhdXRvIHJlY3QgOiB0ZXh0UmVjdHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMpIHsK
KyAgICBhdXRvIHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMgPSB0ZXh0UmVjdHNJ
blJvb3RWaWV3Q29vcmRpbmF0ZXMubWFwKFsmXShhdXRvIHJlY3QpIHsKICAgICAgICAgcmVjdC5t
b3ZlQnkoLXRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKSk7
Ci0gICAgICAgIHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMuYXBwZW5kKHJlY3Qp
OwotICAgIH0KKyAgICAgICAgcmV0dXJuIHJlY3Q7CisgICAgfSk7CiAKICAgICAvLyBTdG9yZSB0
aGUgc2VsZWN0aW9uIHJlY3QgaW4gd2luZG93IGNvb3JkaW5hdGVzLCB0byBiZSB1c2VkIHN1YnNl
cXVlbnRseQogICAgIC8vIHRvIGRldGVybWluZSBpZiB0aGUgaW5kaWNhdG9yIGFuZCBzZWxlY3Rp
b24gc3RpbGwgcHJlY2lzZWx5IG92ZXJsYXAuCiAgICAgZGF0YS5zZWxlY3Rpb25SZWN0SW5Sb290
Vmlld0Nvb3JkaW5hdGVzID0gZnJhbWUudmlldygpLT5jb250ZW50c1RvUm9vdFZpZXcoZW5jbG9z
aW5nSW50UmVjdChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25Cb3VuZHMoRnJhbWVTZWxlY3Rp
b246OkNsaXBUb1Zpc2libGVDb250ZW50OjpObykpKTsKLSAgICBkYXRhLnRleHRCb3VuZGluZ1Jl
Y3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3Jk
aW5hdGVzOwotICAgIGRhdGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcyA9IHRl
eHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXM7CisgICAgZGF0YS50ZXh0Qm91bmRpbmdS
ZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gV1RGTW92ZSh0ZXh0Qm91bmRpbmdSZWN0SW5Sb290
Vmlld0Nvb3JkaW5hdGVzKTsKKyAgICBkYXRhLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRp
bmF0ZXMgPSBXVEZNb3ZlKHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMpOwogCiAg
ICAgcmV0dXJuIHRha2VTbmFwc2hvdHMoZGF0YSwgZnJhbWUsIGVuY2xvc2luZ0ludFJlY3QodGV4
dEJvdW5kaW5nUmVjdEluRG9jdW1lbnRDb29yZGluYXRlcyksIGNsaXBwZWRUZXh0UmVjdHNJbkRv
Y3VtZW50Q29vcmRpbmF0ZXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9j
c3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0Nv
bnRlbnRTZWN1cml0eVBvbGljeS5jcHAKaW5kZXggNWIwMmI0ZDQyYWZjNmY4NjEzZmNjNDY0MDBj
YjhkYzdmZjIwOGIzYy4uYzNmMjU5NmJmMjU4NDVkOGI3ZGUyODQyZDcwNTA0NTI2MmU2Y2UxYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3ku
Y3BwCkBAIC0zNDMsMTggKzM0MywxMiBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxs
UG9saWNpZXNBbGxvdyhWaW9sYXRlZERpcmVjdGl2ZUNhbGxiYWNrJiYgY2FsbGJhYwogc3RhdGlj
IFZlY3RvcjxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlU3ViUmVzb3VyY2VJbnRl
Z3JpdHlJbnRvRGlnZXN0cyhjb25zdCBTdHJpbmcmIHN1YlJlc291cmNlSW50ZWdyaXR5KQogewog
ICAgIGF1dG8gZW5jb2RlZERpZ2VzdHMgPSBwYXJzZUludGVncml0eU1ldGFkYXRhKHN1YlJlc291
cmNlSW50ZWdyaXR5KTsKLSAgICBWZWN0b3I8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBk
ZWNvZGVkRGlnZXN0czsKLQotICAgIGlmICghZW5jb2RlZERpZ2VzdHMuaGFzX3ZhbHVlKCkpCisg
ICAgaWYgKCFlbmNvZGVkRGlnZXN0cykKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGZvciAo
Y29uc3QgYXV0byYgZW5jb2RlZERpZ2VzdCA6IGVuY29kZWREaWdlc3RzLnZhbHVlKCkpIHsKLSAg
ICAgICAgYXV0byBkZWNvZGVkRGlnZXN0ID0gZGVjb2RlRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3Jh
cGhpY0RpZ2VzdChlbmNvZGVkRGlnZXN0KTsKLSAgICAgICAgaWYgKGRlY29kZWREaWdlc3QuaGFz
X3ZhbHVlKCkpCi0gICAgICAgICAgICBkZWNvZGVkRGlnZXN0cy5hcHBlbmQoZGVjb2RlZERpZ2Vz
dC52YWx1ZSgpKTsKLSAgICAgICAgfQotCi0gICAgcmV0dXJuIGRlY29kZWREaWdlc3RzOworICAg
IHJldHVybiBXVEY6OmNvbXBhY3RNYXAoKmVuY29kZWREaWdlc3RzLCBbXShhdXRvJiBlbmNvZGVk
RGlnZXN0KSB7CisgICAgICAgIHJldHVybiBkZWNvZGVFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFw
aGljRGlnZXN0KGVuY29kZWREaWdlc3QpOworICAgIH0pOwogfQogCiBzdGF0aWMgVmVjdG9yPENv
bnRlbnRTZWN1cml0eVBvbGljeUhhc2g+IGdlbmVyYXRlSGFzaGVzRm9yQ29udGVudChjb25zdCBT
dHJpbmdWaWV3IGNvbnRlbnQsIE9wdGlvblNldDxDb250ZW50U2VjdXJpdHlQb2xpY3lIYXNoQWxn
b3JpdGhtPiBhbGdvcml0aG1zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
RmlsZUNob29zZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuY3Bw
CmluZGV4IDhlNGVjZTcwNTNhZThlOThlZmVjY2ZlNzY1MmY4NmNkMjk3NDA0MDQuLjc4NDI4YzRh
YmQzMWU5OWIxMGFhZTQ4ZmJlY2MyYTViOGQ5ZjU4ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9GaWxlQ2hvb3Nlci5jcHAKQEAgLTUzLDkgKzUzLDcgQEAgdm9pZCBGaWxlQ2hvb3Nlcjo6aW52
YWxpZGF0ZSgpCiAKIHZvaWQgRmlsZUNob29zZXI6OmNob29zZUZpbGUoY29uc3QgU3RyaW5nJiBm
aWxlbmFtZSkKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXM7Ci0gICAgZmlsZW5hbWVz
LmFwcGVuZChmaWxlbmFtZSk7Ci0gICAgY2hvb3NlRmlsZXMoZmlsZW5hbWVzKTsKKyAgICBjaG9v
c2VGaWxlcyh7IGZpbGVuYW1lIH0pOwogfQogCiB2b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxl
cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cmVwbGFjZW1lbnROYW1lcykKQEAgLTY4LDkgKzY2LDEwIEBAIHZvaWQgRmlsZUNob29zZXI6OmNo
b29zZUZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIGNvbnN0IFZlY3RvcjxT
dHJpCiAgICAgICAgIHJldHVybjsKIAogICAgIFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJbmZvPiBm
aWxlczsKKyAgICBmaWxlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZpbGVuYW1lcy5zaXplKCkp
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gZmlsZW5hbWVzLnNpemUoKTsgaSA8IHNp
emU7ICsraSkKLSAgICAgICAgZmlsZXMuYXBwZW5kKHsgZmlsZW5hbWVzW2ldLCBpIDwgcmVwbGFj
ZW1lbnROYW1lcy5zaXplKCkgPyByZXBsYWNlbWVudE5hbWVzW2ldIDogbnVsbFN0cmluZygpLCB7
IH0gfSk7Ci0gICAgbV9jbGllbnQtPmZpbGVzQ2hvc2VuKGZpbGVzKTsKKyAgICAgICAgZmlsZXMu
dW5jaGVja2VkQXBwZW5kKHsgZmlsZW5hbWVzW2ldLCBpIDwgcmVwbGFjZW1lbnROYW1lcy5zaXpl
KCkgPyByZXBsYWNlbWVudE5hbWVzW2ldIDogbnVsbFN0cmluZygpLCB7IH0gfSk7CisgICAgbV9j
bGllbnQtPmZpbGVzQ2hvc2VuKFdURk1vdmUoZmlsZXMpKTsKIH0KIAogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCkBAIC04NiwxOSArODUsMTkgQEAgdm9pZCBGaWxlQ2hvb3Nlcjo6Y2hvb3NlTWVk
aWFGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBjb25zdCBTdHJpbmcKICAg
ICBpZiAoIW1fY2xpZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8RmlsZUNob29z
ZXJGaWxlSW5mbz4gZmlsZXM7Ci0gICAgZm9yIChhdXRvJiBmaWxlbmFtZSA6IGZpbGVuYW1lcykK
LSAgICAgICAgZmlsZXMuYXBwZW5kKHsgZmlsZW5hbWUsIHsgfSwgeyB9IH0pOwotICAgIG1fY2xp
ZW50LT5maWxlc0Nob3NlbihmaWxlcywgZGlzcGxheVN0cmluZywgaWNvbik7CisgICAgYXV0byBm
aWxlcyA9IGZpbGVuYW1lcy5tYXAoW10oYXV0byYgZmlsZW5hbWUpIHsKKyAgICAgICAgcmV0dXJu
IEZpbGVDaG9vc2VyRmlsZUluZm8geyBmaWxlbmFtZSwgeyB9LCB7IH0gfTsKKyAgICB9KTsKKyAg
ICBtX2NsaWVudC0+ZmlsZXNDaG9zZW4oV1RGTW92ZShmaWxlcyksIGRpc3BsYXlTdHJpbmcsIGlj
b24pOwogfQogCiAjZW5kaWYKIAogdm9pZCBGaWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZXMoY29uc3Qg
VmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+JiBmaWxlcykKIHsKLSAgICBWZWN0b3I8U3RyaW5n
PiBwYXRoczsKLSAgICBmb3IgKGF1dG8mIGZpbGUgOiBmaWxlcykKLSAgICAgICAgcGF0aHMuYXBw
ZW5kKGZpbGUucGF0aCk7CisgICAgYXV0byBwYXRocyA9IGZpbGVzLm1hcChbXShhdXRvJiBmaWxl
KSB7CisgICAgICAgIHJldHVybiBmaWxlLnBhdGg7CisgICAgfSk7CiAKICAgICAvLyBGSVhNRTog
VGhpcyBpcyBpbmVsZWdhbnQuIFdlIHNob3VsZCBub3QgYmUgbG9va2luZyBhdCBzZXR0aW5ncyBo
ZXJlLgogICAgIGlmIChtX3NldHRpbmdzLnNlbGVjdGVkRmlsZXMgPT0gcGF0aHMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAppbmRleCBkMDlmMTA1MmEwZjMxZWU5NzA2
MTEwMTNiMzkzNWZiNTMwOTU1MDk2Li5mODdiNmE0ZjYzYjI2YTIxODgyMDZlOTM4YWE1ODU3OTdh
YjM5NWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKQEAgLTIw
Niw5ICsyMDYsNyBAQCB2b2lkIEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25zdCBG
cmFnbWVudGVkU2hhcmVkQnVmZmVyJiBkYXRhKQogdm9pZCBGcmFnbWVudGVkU2hhcmVkQnVmZmVy
OjphcHBlbmQoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBBU1NF
UlQoIW1fY29udGlndW91cyk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvcjsKLSAgICB2ZWN0
b3IuYXBwZW5kKGRhdGEsIGxlbmd0aCk7Ci0gICAgbV9zZWdtZW50cy5hcHBlbmQoeyBtX3NpemUs
IERhdGFTZWdtZW50OjpjcmVhdGUoV1RGTW92ZSh2ZWN0b3IpKSB9KTsKKyAgICBtX3NlZ21lbnRz
LmFwcGVuZCh7IG1fc2l6ZSwgRGF0YVNlZ21lbnQ6OmNyZWF0ZShWZWN0b3IgeyBkYXRhLCBsZW5n
dGggfSkgfSk7CiAgICAgbV9zaXplICs9IGxlbmd0aDsKICAgICBBU1NFUlQoaW50ZXJuYWxseUNv
bnNpc3RlbnQoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJl
YWRTYWZlRGF0YUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkU2FmZURh
dGFCdWZmZXIuaAppbmRleCBkMzk3ZDIyN2RmYzUzNGFkMGNmNTg3MDJiZTFjYTU4MDI0OTlhMGJi
Li5iNTA2ZTkxNDVkNWM3MTdhZjRmMzY3NTdkODdkMDAyMmM0OWU1Mjg2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRTYWZlRGF0YUJ1ZmZlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZFNhZmVEYXRhQnVmZmVyLmgKQEAgLTI1LDYgKzI1LDcg
QEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8
d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBA
IC0xNDMsNCArMTQ0LDE2IEBAIGJvb2wgVGhyZWFkU2FmZURhdGFCdWZmZXI6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyLCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgcmVzdWx0CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKK2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgVGhyZWFkU2Fm
ZURhdGFCdWZmZXImIGJ1ZmZlcikKK3sKKyAgICBhdXRvKiBkYXRhID0gYnVmZmVyLmRhdGEoKTsK
KyAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAgYWRkKGhhc2hlciwgdHJ1ZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgYWRkKGhhc2hlciwgZmFsc2UpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwLCBzaXplID0gYnVmZmVyLnNpemUoKTsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgYWRkKGhh
c2hlciwgZGF0YVtpXSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVsUHJvY2Vzc29y
LmNwcAppbmRleCAxY2YzOWNhY2YzMDI0NTA4ZThkMTJlODY0NWM1MDg2NzcyMTk0MzViLi5kOGMz
NGZhMzc2OTUwNzI1MjU0NzQxOGZlNWU4NDRmZmUyYzMwODdkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuY3Bw
CkBAIC01Niw4ICs1Niw5IEBAIHZvaWQgQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3I6OmluaXRpYWxp
emUoKQogICAgICAgICBEaXNhYmxlTWFsbG9jUmVzdHJpY3Rpb25zRm9yQ3VycmVudFRocmVhZFNj
b3BlIGRpc2FibGVNYWxsb2NSZXN0cmljdGlvbnM7CiAKICAgICAgICAgLy8gQ3JlYXRlIHByb2Nl
c3Npbmcga2VybmVscywgb25lIHBlciBjaGFubmVsLgorICAgICAgICBtX2tlcm5lbHMucmVzZXJ2
ZUNhcGFjaXR5KG1fa2VybmVscy5jYXBhY2l0eSgpICsgbnVtYmVyT2ZDaGFubmVscygpKTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHMoKTsgKytpKQot
ICAgICAgICAgICAgbV9rZXJuZWxzLmFwcGVuZChjcmVhdGVLZXJuZWwoKSk7CisgICAgICAgICAg
ICBtX2tlcm5lbHMudW5jaGVja2VkQXBwZW5kKGNyZWF0ZUtlcm5lbCgpKTsKICAgICB9CiAgICAg
bV9pbml0aWFsaXplZCA9IHRydWU7CiAgICAgbV9oYXNKdXN0UmVzZXQgPSB0cnVlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9SZXNhbXBsZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9SZXNhbXBsZXIuY3BwCmluZGV4IGRl
NTA4Y2M2ZWY0YTViMDFiZDRlYjIyNDc0NWI3ZWYyODI4NDBmOGUuLjc0NjljZTRkZTNmM2MxODg4
OTI4ZjU0OTdkMTJjZTU2ZGI2ZTZkMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL0F1ZGlvUmVzYW1wbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9BdWRpb1Jlc2FtcGxlci5jcHAKQEAgLTQyLDggKzQyLDkgQEAgQXVkaW9SZXNhbXBs
ZXI6OkF1ZGlvUmVzYW1wbGVyKCkKIAogQXVkaW9SZXNhbXBsZXI6OkF1ZGlvUmVzYW1wbGVyKHVu
c2lnbmVkIG51bWJlck9mQ2hhbm5lbHMpCiB7CisgICAgbV9rZXJuZWxzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkobnVtYmVyT2ZDaGFubmVscyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG51bWJlck9mQ2hhbm5lbHM7ICsraSkKLSAgICAgICAgbV9rZXJuZWxzLmFwcGVuZChtYWtlVW5p
cXVlPEF1ZGlvUmVzYW1wbGVyS2VybmVsPih0aGlzKSk7CisgICAgICAgIG1fa2VybmVscy51bmNo
ZWNrZWRBcHBlbmQobWFrZVVuaXF1ZTxBdWRpb1Jlc2FtcGxlcktlcm5lbD4odGhpcykpOwogCiAg
ICAgbV9zb3VyY2VCdXMgPSBBdWRpb0J1czo6Y3JlYXRlKG51bWJlck9mQ2hhbm5lbHMsIDAsIGZh
bHNlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFt
aWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9E
eW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwCmluZGV4IDlmMzE4MWNmYmI0MDIyNzc3OTk2MjNi
OWJmZGRjZGQ0OTU5YzAwYjAuLmMxYzdhNTc3NWFmZmQ1MTM5MjViNTdkZGIxNTY3NmM3ODU5YTc5
ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29t
cHJlc3Nvcktlcm5lbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHlu
YW1pY3NDb21wcmVzc29yS2VybmVsLmNwcApAQCAtNjAsOSArNjAsMTAgQEAgdm9pZCBEeW5hbWlj
c0NvbXByZXNzb3JLZXJuZWw6OnNldE51bWJlck9mQ2hhbm5lbHModW5zaWduZWQgbnVtYmVyT2ZD
aGFubmVscykKICAgICBpZiAobV9wcmVEZWxheUJ1ZmZlcnMuc2l6ZSgpID09IG51bWJlck9mQ2hh
bm5lbHMpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJlRGVsYXlCdWZmZXJzLmNsZWFyKCk7
CisgICAgbV9wcmVEZWxheUJ1ZmZlcnMuc2hyaW5rKDApOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyArK2kpCiAgICAgICAgIG1fcHJlRGVsYXlCdWZmZXJz
LmFwcGVuZChtYWtlVW5pcXVlPEF1ZGlvRmxvYXRBcnJheT4oTWF4UHJlRGVsYXlGcmFtZXMpKTsK
KyAgICBtX3ByZURlbGF5QnVmZmVycy5zaHJpbmtUb0ZpdCgpOwogfQogCiB2b2lkIER5bmFtaWNz
Q29tcHJlc3Nvcktlcm5lbDo6c2V0UHJlRGVsYXlUaW1lKGZsb2F0IHByZURlbGF5VGltZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL011bHRpQ2hhbm5lbFJlc2Ft
cGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NdWx0aUNoYW5uZWxSZXNh
bXBsZXIuY3BwCmluZGV4IGI5NjZmYTA2Y2QzMGViMzRkZjcxZmNmYmRlN2MxNjU4MjMxMTEyMWYu
LjE3MDIzYjY0MjYxYmRmZDM3NWVlMDlmZTI5NmIzYmRhODgyN2YyZTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL011bHRpQ2hhbm5lbFJlc2FtcGxlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTXVsdGlDaGFubmVsUmVzYW1wbGVyLmNw
cApAQCAtNTMsOCArNTMsOSBAQCBNdWx0aUNoYW5uZWxSZXNhbXBsZXI6Ok11bHRpQ2hhbm5lbFJl
c2FtcGxlcihkb3VibGUgc2NhbGVGYWN0b3IsIHVuc2lnbmVkIG51bWJlcgogICAgIH0KIAogICAg
IC8vIENyZWF0ZSBlYWNoIGNoYW5uZWwncyByZXNhbXBsZXIuCisgICAgbV9rZXJuZWxzLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZDaGFubmVscyk7CiAgICAgZm9yICh1bnNpZ25lZCBj
aGFubmVsSW5kZXggPSAwOyBjaGFubmVsSW5kZXggPCBudW1iZXJPZkNoYW5uZWxzOyArK2NoYW5u
ZWxJbmRleCkKLSAgICAgICAgbV9rZXJuZWxzLmFwcGVuZChtYWtlVW5pcXVlPFNpbmNSZXNhbXBs
ZXI+KHNjYWxlRmFjdG9yLCByZXF1ZXN0RnJhbWVzLCBzdGQ6OmJpbmQoJk11bHRpQ2hhbm5lbFJl
c2FtcGxlcjo6cHJvdmlkZUlucHV0Rm9yQ2hhbm5lbCwgdGhpcywgc3RkOjpwbGFjZWhvbGRlcnM6
Ol8xLCBzdGQ6OnBsYWNlaG9sZGVyczo6XzIsIGNoYW5uZWxJbmRleCkpKTsKKyAgICAgICAgbV9r
ZXJuZWxzLnVuY2hlY2tlZEFwcGVuZChtYWtlVW5pcXVlPFNpbmNSZXNhbXBsZXI+KHNjYWxlRmFj
dG9yLCByZXF1ZXN0RnJhbWVzLCBzdGQ6OmJpbmQoJk11bHRpQ2hhbm5lbFJlc2FtcGxlcjo6cHJv
dmlkZUlucHV0Rm9yQ2hhbm5lbCwgdGhpcywgc3RkOjpwbGFjZWhvbGRlcnM6Ol8xLCBzdGQ6OnBs
YWNlaG9sZGVyczo6XzIsIGNoYW5uZWxJbmRleCkpKTsKIH0KIAogTXVsdGlDaGFubmVsUmVzYW1w
bGVyOjp+TXVsdGlDaGFubmVsUmVzYW1wbGVyKCkgPSBkZWZhdWx0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudC5tbQppbmRleCAwNWVhMjExMWViNWQ0NTNjYjI4ZDhlNzdlZjNjYmY1ZjM1
NjcxOTg5Li5mYTMwYWZkZTNiMWUxZTM2ZTg2MWFlY2JkOWZiZThjN2YwOTAzNTZlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1l
ZGlhRWxlbWVudC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFj
a1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbQpAQCAtNTM0LDE0ICs1MzQsMTIgQEAgVmVjdG9y
PE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6
bGVnaWJsZU1lZGlhU2VsZWMKICAgICBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGxlZ2li
bGVPcHRpb25zOwogCiAgICAgaWYgKCFtX21lZGlhRWxlbWVudCB8fCAhbV9tZWRpYUVsZW1lbnQt
PmRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICByZXR1cm4gbGVnaWJsZU9wdGlvbnM7CisgICAg
ICAgIHJldHVybiB7IH07CiAKICAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBtX21lZGlh
RWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuZW5zdXJlQ2FwdGlvblByZWZlcmVu
Y2VzKCk7Ci0KLSAgICBmb3IgKGF1dG8mIHRyYWNrIDogbV9sZWdpYmxlVHJhY2tzRm9yTWVudSkK
LSAgICAgICAgbGVnaWJsZU9wdGlvbnMuYXBwZW5kKGNhcHRpb25QcmVmZXJlbmNlcy5tZWRpYVNl
bGVjdGlvbk9wdGlvbkZvclRyYWNrKHRyYWNrLmdldCgpKSk7Ci0KLSAgICByZXR1cm4gbGVnaWJs
ZU9wdGlvbnM7CisgICAgcmV0dXJuIG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUubWFwKFsmXShhdXRv
JiB0cmFjaykgeworICAgICAgICByZXR1cm4gY2FwdGlvblByZWZlcmVuY2VzLm1lZGlhU2VsZWN0
aW9uT3B0aW9uRm9yVHJhY2sodHJhY2suZ2V0KCkpOworICAgIH0pOwogfQogCiB1aW50NjRfdCBQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRl
eCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21h
Yy9EdWFsc2hvY2szSElER2FtZXBhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1l
cGFkL21hYy9EdWFsc2hvY2szSElER2FtZXBhZC5jcHAKaW5kZXggNmM0MGU4Yjg4OTI4NzNmZjA3
MjA2MThjZmU4Mzk2NGM4MGVjMzQxZS4uYzBmNTE4MWJjNDRiMWJkY2ViYTY5YjhjYjZhMzRhOWVh
MTI3ZGY2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMv
RHVhbHNob2NrM0hJREdhbWVwYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dh
bWVwYWQvbWFjL0R1YWxzaG9jazNISURHYW1lcGFkLmNwcApAQCAtNDMsMTIgKzQzLDEwIEBAIER1
YWxzaG9jazNISURHYW1lcGFkOjpEdWFsc2hvY2szSElER2FtZXBhZChISUREZXZpY2UmJiBkZXZp
Y2UsIHVuc2lnbmVkIGluZGV4KQogCiAgICAgbV9tYXBwaW5nID0gc3RhbmRhcmRHYW1lcGFkTWFw
cGluZ1N0cmluZygpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlN0YW5k
YXJkR2FtZXBhZEJ1dHRvbnNXaXRoSG9tZUJ1dHRvbjsgKytpKQotICAgICAgICBtX2J1dHRvblZh
bHVlcy5hcHBlbmQoMC4wKTsKKyAgICBtX2J1dHRvblZhbHVlcyA9IFZlY3RvcihudW1iZXJPZlN0
YW5kYXJkR2FtZXBhZEJ1dHRvbnNXaXRoSG9tZUJ1dHRvbiwgU2hhcmVkR2FtZXBhZFZhbHVlIHsg
MC4wIH0pOwogCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBheGlzQ291bnQgPSA0OwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYXhpc0NvdW50OyArK2kpCi0gICAgICAgIG1fYXhpc1ZhbHVl
cy5hcHBlbmQoMC4wKTsKKyAgICBjb25zdGV4cHIgc2l6ZV90IGF4aXNDb3VudCA9IDQ7CisgICAg
bV9heGlzVmFsdWVzID0gVmVjdG9yKGF4aXNDb3VudCwgU2hhcmVkR2FtZXBhZFZhbHVlIHsgMC4w
IH0pOwogCiAgICAgYXV0byBpbnB1dEVsZW1lbnRzID0gaGlkRGV2aWNlKCkudW5pcXVlSW5wdXRF
bGVtZW50c0luRGV2aWNlVHJlZU9yZGVyKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dhbWVwYWQvbWFjL0xvZ2l0ZWNoR2FtZXBhZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9Mb2dpdGVjaEdhbWVwYWQuY3BwCmluZGV4IDY3MTQzZmI5
OTViYTJjM2U2OGRkMjExZDE2NWJlNjIwY2VmNzg5ZWYuLjc4MGQ0YTNmOWVhMjUzYmJkN2U3MmM0
ZmJmY2QwNWZlZTAzMjFhOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dh
bWVwYWQvbWFjL0xvZ2l0ZWNoR2FtZXBhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ2FtZXBhZC9tYWMvTG9naXRlY2hHYW1lcGFkLmNwcApAQCAtNDMsMTIgKzQzLDEwIEBAIExv
Z2l0ZWNoR2FtZXBhZDo6TG9naXRlY2hHYW1lcGFkKEhJRERldmljZSYmIGRldmljZSwgdW5zaWdu
ZWQgaW5kZXgpCiAKICAgICBtX21hcHBpbmcgPSBzdGFuZGFyZEdhbWVwYWRNYXBwaW5nU3RyaW5n
KCk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mU3RhbmRhcmRHYW1lcGFk
QnV0dG9uc1dpdGhvdXRIb21lQnV0dG9uOyArK2kpCi0gICAgICAgIG1fYnV0dG9uVmFsdWVzLmFw
cGVuZCgwLjApOworICAgIG1fYnV0dG9uVmFsdWVzID0gVmVjdG9yKG51bWJlck9mU3RhbmRhcmRH
YW1lcGFkQnV0dG9uc1dpdGhvdXRIb21lQnV0dG9uLCBTaGFyZWRHYW1lcGFkVmFsdWUgeyAwLjAg
fSk7CiAKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF4aXNDb3VudCA9IDQ7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBheGlzQ291bnQ7ICsraSkKLSAgICAgICAgbV9heGlzVmFsdWVzLmFw
cGVuZCgwLjApOworICAgIGNvbnN0ZXhwciBzaXplX3QgYXhpc0NvdW50ID0gNDsKKyAgICBtX2F4
aXNWYWx1ZXMgPSBWZWN0b3IoYXhpc0NvdW50LCBTaGFyZWRHYW1lcGFkVmFsdWUgeyAwLjAgfSk7
CiAKICAgICBhdXRvIGlucHV0RWxlbWVudHMgPSBoaWREZXZpY2UoKS51bmlxdWVJbnB1dEVsZW1l
bnRzSW5EZXZpY2VUcmVlT3JkZXIoKTsKIApAQCAtNTksMTEgKzU3LDEyIEBAIExvZ2l0ZWNoR2Ft
ZXBhZDo6TG9naXRlY2hHYW1lcGFkKEhJRERldmljZSYmIGRldmljZSwgdW5zaWduZWQgaW5kZXgp
CiAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogaW5wdXRFbGVtZW50cykgewogICAgICAgICBzd2l0
Y2ggKGVsZW1lbnQuZnVsbFVzYWdlKCkpIHsKICAgICAgICAgY2FzZSBoaWRIYXRzd2l0Y2hGdWxs
VXNhZ2U6IHsKLSAgICAgICAgICAgIFZlY3RvcjxTaGFyZWRHYW1lcGFkVmFsdWU+IGhhdHN3aXRj
aFZhbHVlczsKLSAgICAgICAgICAgIGhhdHN3aXRjaFZhbHVlcy5hcHBlbmQobV9idXR0b25WYWx1
ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJUb3BdKTsKLSAgICAgICAg
ICAgIGhhdHN3aXRjaFZhbHVlcy5hcHBlbmQobV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFk
QnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJSaWdodF0pOwotICAgICAgICAgICAgaGF0c3dpdGNoVmFs
dWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0
Q2x1c3RlckJvdHRvbV0pOwotICAgICAgICAgICAgaGF0c3dpdGNoVmFsdWVzLmFwcGVuZChtX2J1
dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlckxlZnRdKTsK
KyAgICAgICAgICAgIGF1dG8gaGF0c3dpdGNoVmFsdWVzID0gVmVjdG9yPFNoYXJlZEdhbWVwYWRW
YWx1ZT46OmZyb20oCisgICAgICAgICAgICAgICAgbV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1l
cGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJUb3BdLAorICAgICAgICAgICAgICAgIG1fYnV0dG9u
VmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyUmlnaHRdLAorICAg
ICAgICAgICAgICAgIG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6Okxl
ZnRDbHVzdGVyQm90dG9tXSwKKyAgICAgICAgICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90
KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlckxlZnRdCisgICAgICAgICAgICApOwogCiAg
ICAgICAgICAgICBtX2VsZW1lbnRNYXAuc2V0KGVsZW1lbnQuY29va2llKCksIG1ha2VVbmlxdWU8
SElER2FtZXBhZEhhdHN3aXRjaD4oZWxlbWVudCwgV1RGTW92ZShoYXRzd2l0Y2hWYWx1ZXMpKSk7
CiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dhbWVwYWQvbWFjL1N0YWRpYUhJREdhbWVwYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ2FtZXBhZC9tYWMvU3RhZGlhSElER2FtZXBhZC5jcHAKaW5kZXggMGE5NGU1NjIzM2EyMDQ0
NjQxZjEwMGYwNTY0NGQ1NzVhZGJjOWU3My4uMzc1MjEzNDQ2NGM3ODU2N2NiNmJlMThmMDBlYTU3
Zjg5YWI3YmQyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9t
YWMvU3RhZGlhSElER2FtZXBhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2Ft
ZXBhZC9tYWMvU3RhZGlhSElER2FtZXBhZC5jcHAKQEAgLTQxLDEyICs0MSwxMCBAQCBTdGFkaWFI
SURHYW1lcGFkOjpTdGFkaWFISURHYW1lcGFkKEhJRERldmljZSYmIGRldmljZSwgdW5zaWduZWQg
aW5kZXgpCiAKICAgICBtX21hcHBpbmcgPSBzdGFuZGFyZEdhbWVwYWRNYXBwaW5nU3RyaW5nKCk7
CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDE5OyArK2kpCi0gICAgICAgIG1fYnV0dG9u
VmFsdWVzLmFwcGVuZCgwLjApOworICAgIG1fYnV0dG9uVmFsdWVzID0gVmVjdG9yKDE5LCBTaGFy
ZWRHYW1lcGFkVmFsdWUgeyAwLjAgfSk7CiAKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF4aXND
b3VudCA9IDQ7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBheGlzQ291bnQ7ICsraSkKLSAg
ICAgICAgbV9heGlzVmFsdWVzLmFwcGVuZCgwLjApOworICAgIGNvbnN0ZXhwciBzaXplX3QgYXhp
c0NvdW50ID0gNDsKKyAgICBtX2F4aXNWYWx1ZXMgPSBWZWN0b3IoYXhpc0NvdW50LCBTaGFyZWRH
YW1lcGFkVmFsdWUgeyAwLjAgfSk7CiAKICAgICBhdXRvIGlucHV0RWxlbWVudHMgPSBoaWREZXZp
Y2UoKS51bmlxdWVJbnB1dEVsZW1lbnRzSW5EZXZpY2VUcmVlT3JkZXIoKTsKIApAQCAtNzAsMTEg
KzY4LDEyIEBAIFN0YWRpYUhJREdhbWVwYWQ6OlN0YWRpYUhJREdhbWVwYWQoSElERGV2aWNlJiYg
ZGV2aWNlLCB1bnNpZ25lZCBpbmRleCkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNh
c2UgaGlkSGF0c3dpdGNoRnVsbFVzYWdlOiB7Ci0gICAgICAgICAgICBWZWN0b3I8U2hhcmVkR2Ft
ZXBhZFZhbHVlPiBoYXRzd2l0Y2hWYWx1ZXM7Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMu
YXBwZW5kKG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVz
dGVyVG9wXSk7Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFs
dWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyUmlnaHRdKTsKLSAgICAg
ICAgICAgIGhhdHN3aXRjaFZhbHVlcy5hcHBlbmQobV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1l
cGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJCb3R0b21dKTsKLSAgICAgICAgICAgIGhhdHN3aXRj
aFZhbHVlcy5hcHBlbmQobV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6
TGVmdENsdXN0ZXJMZWZ0XSk7CisgICAgICAgICAgICBhdXRvIGhhdHN3aXRjaFZhbHVlcyA9IFZl
Y3RvcjxTaGFyZWRHYW1lcGFkVmFsdWU+Ojpmcm9tKAorICAgICAgICAgICAgICAgIG1fYnV0dG9u
VmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyVG9wXSwKKyAgICAg
ICAgICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0
Q2x1c3RlclJpZ2h0XSwKKyAgICAgICAgICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdh
bWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlckJvdHRvbV0sCisgICAgICAgICAgICAgICAgbV9i
dXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJMZWZ0XQor
ICAgICAgICAgICAgKTsKIAogICAgICAgICAgICAgbV9lbGVtZW50TWFwLnNldChlbGVtZW50LmNv
b2tpZSgpLCBtYWtlVW5pcXVlPEhJREdhbWVwYWRIYXRzd2l0Y2g+KGVsZW1lbnQsIFdURk1vdmUo
aGF0c3dpdGNoVmFsdWVzKSkpOwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IDFmZWUyOWFl
NWY3MTljNGU1NTRhMmM3ZTcwY2I3MGYwMWY5YjIwMDIuLjcyNGZiMTdjMzNmNGJjYTQ2ODg5Yzgz
YmM1NTg0OGZkNzI3MGMzMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCkBAIC03NjMsMTEgKzc2Myw5IEBAIHZvaWQgR3JhcGhp
Y3NMYXllcjo6YWRkUmVwYWludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZXBhaW50UmVjdCkKICAg
ICBGbG9hdFJlY3QgbGFyZ2VzdFJlcGFpbnRSZWN0KEZsb2F0UG9pbnQoKSwgbV9zaXplKTsKICAg
ICBsYXJnZXN0UmVwYWludFJlY3QuaW50ZXJzZWN0KHJlcGFpbnRSZWN0KTsKICAgICBSZXBhaW50
TWFwOjppdGVyYXRvciByZXBhaW50SXQgPSByZXBhaW50UmVjdE1hcCgpLmZpbmQodGhpcyk7Ci0g
ICAgaWYgKHJlcGFpbnRJdCA9PSByZXBhaW50UmVjdE1hcCgpLmVuZCgpKSB7Ci0gICAgICAgIFZl
Y3RvcjxGbG9hdFJlY3Q+IHJlcGFpbnRSZWN0czsKLSAgICAgICAgcmVwYWludFJlY3RzLmFwcGVu
ZChsYXJnZXN0UmVwYWludFJlY3QpOwotICAgICAgICByZXBhaW50UmVjdE1hcCgpLnNldCh0aGlz
LCByZXBhaW50UmVjdHMpOwotICAgIH0gZWxzZSB7CisgICAgaWYgKHJlcGFpbnRJdCA9PSByZXBh
aW50UmVjdE1hcCgpLmVuZCgpKQorICAgICAgICByZXBhaW50UmVjdE1hcCgpLnNldCh0aGlzLCBW
ZWN0b3IgeyBXVEZNb3ZlKGxhcmdlc3RSZXBhaW50UmVjdCkgfSk7CisgICAgZWxzZSB7CiAgICAg
ICAgIFZlY3RvcjxGbG9hdFJlY3Q+JiByZXBhaW50UmVjdHMgPSByZXBhaW50SXQtPnZhbHVlOwog
ICAgICAgICByZXBhaW50UmVjdHMuYXBwZW5kKGxhcmdlc3RSZXBhaW50UmVjdCk7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGll
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmNw
cAppbmRleCBiOTc5OWE0ZDEwNjFlZDIwYTFiNTBlZDUwNjg2NTFjNWZlYTQ2NmE0Li43N2RjOTgz
NWQ1NjEyZjY2ODE3MjRmN2I3NmNiYTEwMzk2YzdjMzg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcApAQCAtMjkwLDE3ICsyOTAs
MTQgQEAgc3RhdGljIFZlY3RvcjxGbG9hdFBvaW50R3JhcGg6OlBvbHlnb24+IHBvbHlnb25zRm9y
UmVjdChjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYKIAogVmVjdG9yPFBhdGg+IFBhdGhVdGlsaXRp
ZXM6OnBhdGhzV2l0aFNocmlua1dyYXBwZWRSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYg
cmVjdHMsIGZsb2F0IHJhZGl1cykKIHsKLSAgICBWZWN0b3I8UGF0aD4gcGF0aHM7Ci0KICAgICBp
ZiAocmVjdHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gcGF0aHM7CisgICAgICAgIHJldHVy
biB7IH07CiAKICAgICBpZiAocmVjdHMuc2l6ZSgpID4gMjApIHsKICAgICAgICAgUGF0aCBwYXRo
OwogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiByZWN0cykKICAgICAgICAgICAgIHBh
dGguYWRkUm91bmRlZFJlY3QocmVjdCwgRmxvYXRTaXplKHJhZGl1cywgcmFkaXVzKSk7Ci0gICAg
ICAgIHBhdGhzLmFwcGVuZChwYXRoKTsKLSAgICAgICAgcmV0dXJuIHBhdGhzOworICAgICAgICBy
ZXR1cm4geyBXVEZNb3ZlKHBhdGgpIH07CiAgICAgfQogCiAgICAgRmxvYXRQb2ludEdyYXBoIGdy
YXBoOwpAQCAtMzA5LDEwICszMDYsMTAgQEAgVmVjdG9yPFBhdGg+IFBhdGhVdGlsaXRpZXM6OnBh
dGhzV2l0aFNocmlua1dyYXBwZWRSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYKICAgICAg
ICAgUGF0aCBwYXRoOwogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiByZWN0cykKICAg
ICAgICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCwgRmxvYXRTaXplKHJhZGl1cywgcmFk
aXVzKSk7Ci0gICAgICAgIHBhdGhzLmFwcGVuZChwYXRoKTsKLSAgICAgICAgcmV0dXJuIHBhdGhz
OworICAgICAgICByZXR1cm4geyBXVEZNb3ZlKHBhdGgpIH07CiAgICAgfQogCisgICAgVmVjdG9y
PFBhdGg+IHBhdGhzOwogICAgIGZvciAoYXV0byYgcG9seSA6IHBvbHlzKSB7CiAgICAgICAgIFBh
dGggcGF0aDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvbHkuc2l6ZSgpOyAr
K2kpIHsKQEAgLTM0NCw3ICszNDEsNyBAQCBWZWN0b3I8UGF0aD4gUGF0aFV0aWxpdGllczo6cGF0
aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JgogICAgICAg
ICAgICAgcGF0aC5hZGRBcmNUbygqZnJvbUVkZ2Uuc2Vjb25kLCAqdG9FZGdlLmZpcnN0ICsgdG9P
ZmZzZXQsIGNsYW1wZWRSYWRpdXMpOwogICAgICAgICB9CiAgICAgICAgIHBhdGguY2xvc2VTdWJw
YXRoKCk7Ci0gICAgICAgIHBhdGhzLmFwcGVuZChwYXRoKTsKKyAgICAgICAgcGF0aHMuYXBwZW5k
KFdURk1vdmUocGF0aCkpOwogICAgIH0KICAgICByZXR1cm4gcGF0aHM7CiB9CkBAIC01NDMsMTMg
KzU0MCwxNCBAQCBQYXRoIFBhdGhVdGlsaXRpZXM6OnBhdGhXaXRoU2hyaW5rV3JhcHBlZFJlY3Rz
Rm9yT3V0bGluZShjb25zdCBWZWN0b3I8RmxvYXRSZWN0PgogICAgIGJvdHRvbUxlZnRSYWRpdXMg
PSBmaXJzdExpbmVSYWRpaS5ib3R0b21MZWZ0KCk7CiAgICAgdG9wUmlnaHRSYWRpdXMgPSBsYXN0
TGluZVJhZGlpLnRvcFJpZ2h0KCk7CiAgICAgYm90dG9tUmlnaHRSYWRpdXMgPSBsYXN0TGluZVJh
ZGlpLmJvdHRvbVJpZ2h0KCk7Ci0gICAgVmVjdG9yPEZsb2F0UG9pbnQ+IGNvcm5lcnM7CiAgICAg
Ly8gcGh5c2ljYWwgdG9wTGVmdC90b3BSaWdodC9ib3R0b21SaWdodC9ib3R0b21MZWZ0CiAgICAg
YXV0byBpc0hvcml6b250YWwgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5nTW9kZSk7
Ci0gICAgY29ybmVycy5hcHBlbmQoZmlyc3RMaW5lUmVjdC5taW5YTWluWUNvcm5lcigpKTsKLSAg
ICBjb3JuZXJzLmFwcGVuZChpc0hvcml6b250YWwgPyBsYXN0TGluZVJlY3QubWF4WE1pbllDb3Ju
ZXIoKSA6IGZpcnN0TGluZVJlY3QubWF4WE1pbllDb3JuZXIoKSk7Ci0gICAgY29ybmVycy5hcHBl
bmQobGFzdExpbmVSZWN0Lm1heFhNYXhZQ29ybmVyKCkpOwotICAgIGNvcm5lcnMuYXBwZW5kKGlz
SG9yaXpvbnRhbCA/IGZpcnN0TGluZVJlY3QubWluWE1heFlDb3JuZXIoKSA6IGxhc3RMaW5lUmVj
dC5taW5YTWF4WUNvcm5lcigpKTsKKyAgICBhdXRvIGNvcm5lcnMgPSBWZWN0b3I8RmxvYXRQb2lu
dD46OmZyb20oCisgICAgICAgIGZpcnN0TGluZVJlY3QubWluWE1pbllDb3JuZXIoKSwKKyAgICAg
ICAgaXNIb3Jpem9udGFsID8gbGFzdExpbmVSZWN0Lm1heFhNaW5ZQ29ybmVyKCkgOiBmaXJzdExp
bmVSZWN0Lm1heFhNaW5ZQ29ybmVyKCksCisgICAgICAgIGxhc3RMaW5lUmVjdC5tYXhYTWF4WUNv
cm5lcigpLAorICAgICAgICBpc0hvcml6b250YWwgPyBmaXJzdExpbmVSZWN0Lm1pblhNYXhZQ29y
bmVyKCkgOiBsYXN0TGluZVJlY3QubWluWE1heFlDb3JuZXIoKQorICAgICk7CiAKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9seS5zaXplKCk7ICsraSkgewogICAgICAgICBhdXRvIG1v
dmVPckFkZExpbmVUbyA9IFtpLCAmcGF0aF0gKGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZm
ZXJQcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1
ZmZlclByaXZhdGUuY3BwCmluZGV4IDU0OTlmMzdhN2YzNjQ2YmQ1ZjM5NWE0OGIwOWQ5NDExZDRj
OWI2NjQuLjA0Y2JlNGQyN2YxOTBiN2IyN2I5Y2E3ZTk4YTljNDcxNzNkMmY4OWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclBy
aXZhdGUuY3BwCkBAIC0yMTYsMTAgKzIxNiw5IEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZTo6
YnVmZmVyZWRTYW1wbGVzRm9yVHJhY2tJZChjb25zdCBBdG9tU3RyaW5nJiB0cmFja0lkLCBDCiAg
ICAgaWYgKCF0cmFja0J1ZmZlcikKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKIAot
ICAgIFZlY3RvcjxTdHJpbmc+IHNhbXBsZURlc2NyaXB0aW9uczsKLSAgICBmb3IgKGF1dG8mIHBh
aXIgOiB0cmFja0J1ZmZlci0+c2FtcGxlcy5kZWNvZGVPcmRlcigpKQotICAgICAgICBzYW1wbGVE
ZXNjcmlwdGlvbnMuYXBwZW5kKHRvU3RyaW5nKCpwYWlyLnNlY29uZCkpOwotCisgICAgYXV0byBz
YW1wbGVEZXNjcmlwdGlvbnMgPSBXVEY6Om1hcCh0cmFja0J1ZmZlci0+c2FtcGxlcy5kZWNvZGVP
cmRlcigpLCBbXShhdXRvJiBlbnRyeSkgeworICAgICAgICByZXR1cm4gdG9TdHJpbmcoKmVudHJ5
LnNlY29uZCk7CisgICAgfSk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShzYW1wbGVE
ZXNjcmlwdGlvbnMpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWlu
Zy5jcHAKaW5kZXggOGIwNGY5YmU5NmMzNmUwYTI2MjE4MGEyNWVhMzc0NTk2MmIzZDdkNS4uYzU0
NjE0NjIzYjg3ZWMwODk2MWYxZDQ0MjBmOTYwMWYxNmE2YWI0ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFt
aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCkBAIC0yMDEsOSArMjAxLDcgQEAgUmVmUHRyPEZy
YWdtZW50ZWRTaGFyZWRCdWZmZXI+IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6c2FuaXRp
emVTa2QoY29uc3QgRnIKIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFJlZjxGcmFnbWVudGVkU2hhcmVk
QnVmZmVyPj4+IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6ZXh0cmFjdEtleUlEc1NrZChj
b25zdCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyJiBidWZmZXIpCiB7CiAgICAgLy8gSW4gdGhlICdz
a2QnIHNjaGVtZSwgdGhlIGluaXQgZGF0YSBpcyB0aGUga2V5IElELgotICAgIFZlY3RvcjxSZWY8
RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4+IGtleUlEczsKLSAgICBrZXlJRHMuYXBwZW5kKGJ1ZmZl
ci5jb3B5KCkpOwotICAgIHJldHVybiBrZXlJRHM7CisgICAgcmV0dXJuIFZlY3RvciB7IGJ1ZmZl
ci5jb3B5KCkgfTsKIH0KIAogc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiYgdmFsaWRJbml0RGF0YVR5cGVzKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
Q0YuY3BwCmluZGV4IGY1NWY0MzM0NGMxMjhiZjUxYjUzOTk4YTVkYjVkMTJkNDJjMGNkZGMuLmVh
MWU2NjJkMWRkZjU3MmJiMjU0NDE3YWY5NzVkNTRlZmZjZTRlZGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25DRi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNw
cApAQCAtMjExMSw5ICsyMTExLDcgQEAgdm9pZCBBVkZXcmFwcGVyOjpzZXRSZXF1ZXN0Rm9yS2V5
KGNvbnN0IFN0cmluZyYga2V5VVJJLCBBVkNGQXNzZXRSZXNvdXJjZUxvYWRpbmcKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIFZlY3RvcjxSZXRhaW5QdHI8QVZDRkFzc2V0UmVzb3VyY2VM
b2FkaW5nUmVxdWVzdFJlZj4+IHJlcXVlc3RzOwotICAgIHJlcXVlc3RzLmFwcGVuZChhdlJlcXVl
c3QpOwotICAgIG1fa2V5VVJJVG9SZXF1ZXN0TWFwLnNldChrZXlVUkksIHJlcXVlc3RzKTsKKyAg
ICBtX2tleVVSSVRvUmVxdWVzdE1hcC5zZXQoa2V5VVJJLCBWZWN0b3IgeyBSZXRhaW5QdHIgeyBh
dlJlcXVlc3QgfSB9KTsKIH0KIAogUmV0YWluUHRyPEFWQ0ZBc3NldFJlc291cmNlTG9hZGluZ1Jl
cXVlc3RSZWY+IEFWRldyYXBwZXI6OnRha2VSZXF1ZXN0Rm9yS2V5VVJJKGNvbnN0IFN0cmluZyYg
a2V5VVJJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0
YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQppbmRleCAwZWNmZGNjMTVkNTg5M2JjZWI2
ZDM2Zjk2MWUyNmRhYjc3MTQ3Njc0Li4yODIxNDNkOGIxMTc3MDlmZDM4NDA1NWY0YWViNzAzMGYx
NDcwMzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1J
bnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQpAQCAtMTQ1OCw3ICsxNDU4LDcgQEAg
dm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnVwZGF0ZUtl
eVN0YXR1c2VzKHN0ZDo6b3B0aW9uYWwKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fa2V5U3Rh
dHVzZXMuc3dhcChrZXlTdGF0dXNlcyk7CisgICAgbV9rZXlTdGF0dXNlcyA9IFdURk1vdmUoa2V5
U3RhdHVzZXMpOwogCiAgICAgbV9pbnN0YW5jZS0+c2Vzc2lvbktleVN0YXR1c2VzQ2hhbmdlZCgq
dGhpcyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVyQVZGT2JqQy5t
bQppbmRleCA1NjNhZjE5MjRkOWFmMzU5ZTkzMGVmNjRiYWUzMjNmYzA0MWRlODdhLi5hZDdmNDUx
MDFjMDZhMTg4OGMwMDhmYWVkNGE5MTkwNTYxMzgyOTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9JbWFnZURlY29kZXJBVkZP
YmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL0ltYWdlRGVjb2RlckFWRk9iakMubW0KQEAgLTUzNSwxMyArNTM1LDEwIEBAIFZlY3Rv
cjxJbWFnZURlY29kZXI6OkZyYW1lSW5mbz4gSW1hZ2VEZWNvZGVyQVZGT2JqQzo6ZnJhbWVJbmZv
cygpIGNvbnN0CiAgICAgaWYgKG1fc2FtcGxlRGF0YS5lbXB0eSgpKQogICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgVmVjdG9yPEltYWdlRGVjb2Rlcjo6RnJhbWVJbmZvPiBpbmZvczsKLSAgICBm
b3IgKGF1dG8mIHNhbXBsZSA6IG1fc2FtcGxlRGF0YS5wcmVzZW50YXRpb25PcmRlcigpKSB7Cisg
ICAgcmV0dXJuIFdURjo6bWFwKG1fc2FtcGxlRGF0YS5wcmVzZW50YXRpb25PcmRlcigpLCBbXShh
dXRvJiBzYW1wbGUpIHsKICAgICAgICAgYXV0byogaW1hZ2VTYW1wbGUgPSAoSW1hZ2VEZWNvZGVy
QVZGT2JqQ1NhbXBsZSopc2FtcGxlLnNlY29uZC5nZXQoKTsKLSAgICAgICAgaW5mb3MuYXBwZW5k
KHsgaW1hZ2VTYW1wbGUtPmhhc0FscGhhKCksIFNlY29uZHMoaW1hZ2VTYW1wbGUtPmR1cmF0aW9u
KCkudG9Eb3VibGUoKSl9KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaW5mb3M7CisgICAgICAgIHJl
dHVybiBJbWFnZURlY29kZXI6OkZyYW1lSW5mbyB7IGltYWdlU2FtcGxlLT5oYXNBbHBoYSgpLCBT
ZWNvbmRzKGltYWdlU2FtcGxlLT5kdXJhdGlvbigpLnRvRG91YmxlKCkpIH07CisgICAgfSk7CiB9
CiAKIGJvb2wgSW1hZ2VEZWNvZGVyQVZGT2JqQzo6ZnJhbWVBbGxvd1N1YnNhbXBsaW5nQXRJbmRl
eChzaXplX3QgaW5kZXgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQYXJzZXJBVkZPYmpDLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291
cmNlQnVmZmVyUGFyc2VyQVZGT2JqQy5tbQppbmRleCBhYTE1ODQwNGIxMGU0NDRhZjZlNWVkZGM4
ZGFkNmJhOTZlZDVjYjIyLi5lNjFiMTQ3ZjYzYzVmNDU3Mjc1ZjYwNTAzZTM3YThiNTJkMThlM2Ez
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9Tb3VyY2VCdWZmZXJQYXJzZXJBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclBhcnNlckFW
Rk9iakMubW0KQEAgLTI5NywxNiArMjk3LDE0IEBAIHZvaWQgU291cmNlQnVmZmVyUGFyc2VyQVZG
T2JqQzo6ZGlkUGFyc2VTdHJlYW1EYXRhQXNBc3NldChBVkFzc2V0KiBhc3NldCkKIAogICAgICAg
ICAgICAgaWYgKFt0cmFjayBoYXNNZWRpYUNoYXJhY3RlcmlzdGljOkFWTWVkaWFDaGFyYWN0ZXJp
c3RpY1Zpc3VhbF0pIHsKICAgICAgICAgICAgICAgICBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50
OjpJbml0aWFsaXphdGlvblNlZ21lbnQ6OlZpZGVvVHJhY2tJbmZvcm1hdGlvbiBpbmZvOwotICAg
ICAgICAgICAgICAgIGF1dG8gdmlkZW9UcmFjayA9IFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDOjpjcmVhdGUodHJhY2spOwotICAgICAgICAgICAgICAgIGluZm8udHJhY2sgPSB2
aWRlb1RyYWNrLmNvcHlSZWYoKTsKKyAgICAgICAgICAgICAgICBpbmZvLnRyYWNrID0gVmlkZW9U
cmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmNyZWF0ZSh0cmFjayk7CiAgICAgICAgICAg
ICAgICAgaW5mby5kZXNjcmlwdGlvbiA9IE1lZGlhRGVzY3JpcHRpb25BVkZPYmpDOjpjcmVhdGUo
dHJhY2spOwotICAgICAgICAgICAgICAgIHNlZ21lbnQudmlkZW9UcmFja3MuYXBwZW5kKGluZm8p
OworICAgICAgICAgICAgICAgIHNlZ21lbnQudmlkZW9UcmFja3MuYXBwZW5kKFdURk1vdmUoaW5m
bykpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChbdHJhY2sgaGFzTWVkaWFDaGFyYWN0ZXJpc3Rp
YzpBVk1lZGlhQ2hhcmFjdGVyaXN0aWNBdWRpYmxlXSkgewogICAgICAgICAgICAgICAgIFNvdXJj
ZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudDo6QXVkaW9UcmFja0lu
Zm9ybWF0aW9uIGluZm87Ci0gICAgICAgICAgICAgICAgYXV0byBhdWRpb1RyYWNrID0gQXVkaW9U
cmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmNyZWF0ZSh0cmFjayk7Ci0gICAgICAgICAg
ICAgICAgaW5mby50cmFjayA9IGF1ZGlvVHJhY2suY29weVJlZigpOworICAgICAgICAgICAgICAg
IGluZm8udHJhY2sgPSBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6Y3JlYXRl
KHRyYWNrKTsKICAgICAgICAgICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0gTWVkaWFEZXNjcmlw
dGlvbkFWRk9iakM6OmNyZWF0ZSh0cmFjayk7Ci0gICAgICAgICAgICAgICAgc2VnbWVudC5hdWRp
b1RyYWNrcy5hcHBlbmQoaW5mbyk7CisgICAgICAgICAgICAgICAgc2VnbWVudC5hdWRpb1RyYWNr
cy5hcHBlbmQoV1RGTW92ZShpbmZvKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8v
IEZJWE1FKDEyNTE2MSkgICAgOiBBZGQgVGV4dFRyYWNrIHN1cHBvcnQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2Nv
YS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9y
bURhdGFDb2NvYS5tbQppbmRleCA4NTQyMWUzZGU3MDljZTE1OWM0OTRiNDBmYjhkMWFkMjM1OTNj
M2JiLi45Nzk1YjZlYzU1N2U1NGUyMjFjOGI0NmRkNzI0OTAwNjI0ZGI2YjZlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRh
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dFBsYXRmb3JtRGF0YUNvY29hLm1tCkBAIC02OCwxMSArNjgsMTEgQEAgVmVjdG9yPEZvbnRQbGF0
Zm9ybURhdGE6OkZvbnRWYXJpYXRpb25BeGlzPiBGb250UGxhdGZvcm1EYXRhOjp2YXJpYXRpb25B
eGVzKFNob3UKICAgICBpZiAoIXBsYXRmb3JtRm9udCkKICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICAKLSAgICBWZWN0b3I8Rm9udFZhcmlhdGlvbkF4aXM+IHJlc3VsdHM7Ci0gICAgZm9yIChhdXRv
JiBbdGFnLCB2YWx1ZXNdIDogZGVmYXVsdFZhcmlhdGlvblZhbHVlcyhwbGF0Zm9ybUZvbnQsIHNo
b3VsZExvY2FsaXplQXhpc05hbWVzKSkKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQoRm9udFBsYXRm
b3JtRGF0YTo6Rm9udFZhcmlhdGlvbkF4aXModmFsdWVzLmF4aXNOYW1lLCBTdHJpbmcodGFnLmRh
dGEoKSwgdGFnLnNpemUoKSksIHZhbHVlcy5kZWZhdWx0VmFsdWUsIHZhbHVlcy5taW5pbXVtVmFs
dWUsIHZhbHVlcy5tYXhpbXVtVmFsdWUpKTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0czsKKyAg
ICBhdXRvIG1hcCA9IGRlZmF1bHRWYXJpYXRpb25WYWx1ZXMocGxhdGZvcm1Gb250LCBzaG91bGRM
b2NhbGl6ZUF4aXNOYW1lcyk7CisgICAgcmV0dXJuIFdURjo6bWFwKG1hcCwgW10oYXV0byYgZW50
cnkpIHsKKyAgICAgICAgYXV0byYgW3RhZywgdmFsdWVzXSA9IGVudHJ5OworICAgICAgICByZXR1
cm4gRm9udFBsYXRmb3JtRGF0YTo6Rm9udFZhcmlhdGlvbkF4aXMgeyB2YWx1ZXMuYXhpc05hbWUs
IFN0cmluZyh0YWcuZGF0YSgpLCB0YWcuc2l6ZSgpKSwgdmFsdWVzLmRlZmF1bHRWYWx1ZSwgdmFs
dWVzLm1pbmltdW1WYWx1ZSwgdmFsdWVzLm1heGltdW1WYWx1ZSB9OworICAgIH0pOwogfQogCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KaW5kZXggYmE4
ZWExZWI0NDhhOTIxZTMwZDNhZTZhOWM3N2U4ODIzM2FiYzUzYi4uYTJjMjUwYWEyYmVmOGRlOTY0
YmFmMDkyNDBkNWUwZWM0MTUwZWY4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1Bhc3RlYm9hcmRNYWMubW0KQEAgLTcwMiwxMCArNzAyLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9E
RUNMQVJBVElPTlNfQkVHSU4KICAgICAgICAgTlNVUkwgKnVybCA9IFtOU1VSTCBVUkxXaXRoU3Ry
aW5nOmNvY29hRGF0YV07CiAgICAgICAgIGlmIChbdXJsIGlzRmlsZVVSTF0pCiAgICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7Ci0gICAgICAgIHR5cGVz
LmFwcGVuZChjb2NvYVR5cGUpOwotICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVi
b2FyZFN0cmF0ZWd5KCktPnNldFR5cGVzKHR5cGVzLCBtX3Bhc3RlYm9hcmROYW1lLCBjb250ZXh0
KCkpOworICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCkt
PnNldFR5cGVzKHsgY29jb2FUeXBlIH0sIG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQoKSk7CiAg
ICAgICAgIG1fY2hhbmdlQ291bnQgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0
cmF0ZWd5KCktPnNldFN0cmluZ0ZvclR5cGUoY29jb2FEYXRhLCBjb2NvYVR5cGUsIG1fcGFzdGVi
b2FyZE5hbWUsIGNvbnRleHQoKSk7CiAKICAgICAgICAgcmV0dXJuOwpAQCAtNzE0LDkgKzcxMSw3
IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogCiAgICAgaWYgKCFjb2NvYVR5
cGUuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIGV2ZXJ5dGhpbmcgZWxzZSB3ZSBrbm93IG9mIGdv
ZXMgb24gdGhlIHBib2FyZCBhcyBhIHN0cmluZwotICAgICAgICBWZWN0b3I8U3RyaW5nPiB0eXBl
czsKLSAgICAgICAgdHlwZXMuYXBwZW5kKGNvY29hVHlwZSk7Ci0gICAgICAgIHBsYXRmb3JtU3Ry
YXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+YWRkVHlwZXModHlwZXMsIG1fcGFzdGVi
b2FyZE5hbWUsIGNvbnRleHQoKSk7CisgICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0
ZWJvYXJkU3RyYXRlZ3koKS0+YWRkVHlwZXMoeyBjb2NvYVR5cGUgfSwgbV9wYXN0ZWJvYXJkTmFt
ZSwgY29udGV4dCgpKTsKICAgICAgICAgbV9jaGFuZ2VDb3VudCA9IHBsYXRmb3JtU3RyYXRlZ2ll
cygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0U3RyaW5nRm9yVHlwZShjb2NvYURhdGEsIGNv
Y29hVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKTsKICAgICB9CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZVZpZGVvQ2Fw
dHVyZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFs
dGltZVZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAKaW5kZXggM2UzZjQxYTFjNTgwN2U2Y2QzNTlkZTNk
ZjI2YWU3MmQ1NTFjZDU4Mi4uNzdkMzI2NjU2ZDVjYmM1YWVmY2Q0MTdhMTdhODdhNDZmNzEyMjdi
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRp
bWVWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL1JlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlLmNwcApAQCAtNzUsMTEgKzc1LDkg
QEAgVmVjdG9yPFZpZGVvUHJlc2V0RGF0YT4gUmVhbHRpbWVWaWRlb0NhcHR1cmVTb3VyY2U6OnBy
ZXNldHNEYXRhKCkKIAogdm9pZCBSZWFsdGltZVZpZGVvQ2FwdHVyZVNvdXJjZTo6c2V0U3VwcG9y
dGVkUHJlc2V0cyhWZWN0b3I8VmlkZW9QcmVzZXREYXRhPiYmIHByZXNldERhdGEpCiB7Ci0gICAg
VmVjdG9yPFJlZjxWaWRlb1ByZXNldD4+IHByZXNldHM7Ci0KLSAgICBmb3IgKGF1dG8mIGRhdGEg
OiBwcmVzZXREYXRhKQotICAgICAgICBwcmVzZXRzLmFwcGVuZChWaWRlb1ByZXNldDo6Y3JlYXRl
KFdURk1vdmUoZGF0YSkpKTsKLQorICAgIGF1dG8gcHJlc2V0cyA9IFdURjo6bWFwKFdURk1vdmUo
cHJlc2V0RGF0YSksIFtdKGF1dG8mJiBkYXRhKSB7CisgICAgICAgIHJldHVybiBWaWRlb1ByZXNl
dDo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpOworICAgIH0pOwogICAgIHNldFN1cHBvcnRlZFByZXNl
dHMoV1RGTW92ZShwcmVzZXRzKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCmluZGV4IDY3YTc2Mjk1ZDg1ZjM5MWM4
M2IyNDAwZTZkMWZlNTc5Y2NkZWQ4OGYuLjYyMzYzNmFjMmFiZDY4Mzg0MTRkYzhmMWY5MjZjZWQ1
YzQ3Y2NhMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxv
YlJlZ2lzdHJ5SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9C
bG9iUmVnaXN0cnlJbXBsLmNwcApAQCAtMTQxLDEwICsxNDEsOCBAQCB2b2lkIEJsb2JSZWdpc3Ry
eUltcGw6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmIHVybCwgVmVjdG9yPEJsb2JQYXJ0PiYm
IGJsb2JQYQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBCbG9i
UGFydDo6VHlwZTo6QmxvYjogewotICAgICAgICAgICAgaWYgKGF1dG8gYmxvYiA9IG1fYmxvYnMu
Z2V0KHBhcnQudXJsKCkuc3RyaW5nKCkpKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChjb25zdCBC
bG9iRGF0YUl0ZW0mIGl0ZW0gOiBibG9iLT5pdGVtcygpKQotICAgICAgICAgICAgICAgICAgICBi
bG9iRGF0YS0+bV9pdGVtcy5hcHBlbmQoaXRlbSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoYXV0byBibG9iID0gbV9ibG9icy5nZXQocGFydC51cmwoKS5zdHJpbmcoKSkpCisgICAg
ICAgICAgICAgICAgYmxvYkRhdGEtPm1faXRlbXMuYXBwZW5kVmVjdG9yKGJsb2ItPml0ZW1zKCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzI4LDcgKzMy
Niw3IEBAIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6d3JpdGVCbG9ic1RvVGVtcG9yYXJ5RmlsZXNG
b3JJbmRleGVkREIoY29uc3QgVmVjdG9yPFN0cmluCiAgICAgICAgICAgICAgICAgZmlsZVBhdGhz
LmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBmaWxlUGF0aHMuYXBwZW5kKHRlbXBGaWxlUGF0aC5pc29sYXRlZENvcHkoKSk7CisgICAg
ICAgICAgICBmaWxlUGF0aHMuYXBwZW5kKFdURk1vdmUodGVtcEZpbGVQYXRoKS5pc29sYXRlZENv
cHkoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBmaWxlUGF0aHMgPSBXVEZNb3Zl
KGZpbGVQYXRocyldICgpIG11dGFibGUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggODUzMGUzMzU1ZjJkNmI4ZDdmZmI2ZWRm
ODNkNjA4YmNhNGI5ZjU1NS4uOWFiOTk4ZTQxY2IwOGNmMGI2ZjkwZjEwZjEzYzRiODQ1N2VjOTM5
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwCkBAIC0yMDg2LDEwICsyMDg2LDggQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
ZHJhd0JveFNpZGVGcm9tUGF0aChHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwKICAg
ICAgICAgICAgICAgICBnYXBMZW5ndGggKz0gKGRhc2hMZW5ndGggIC8gbnVtYmVyT2ZHYXBzKTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgRGFzaEFycmF5IGxpbmVEYXNoOwotICAgICAg
ICAgICAgbGluZURhc2guYXBwZW5kKGRhc2hMZW5ndGgpOwotICAgICAgICAgICAgbGluZURhc2gu
YXBwZW5kKGdhcExlbmd0aCk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0TGluZURh
c2gobGluZURhc2gsIGRhc2hMZW5ndGgpOworICAgICAgICAgICAgYXV0byBsaW5lRGFzaCA9IERh
c2hBcnJheTo6ZnJvbShkYXNoTGVuZ3RoLCBnYXBMZW5ndGgpOworICAgICAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LnNldExpbmVEYXNoKFdURk1vdmUobGluZURhc2gpLCBkYXNoTGVuZ3RoKTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IHN0cm9raW5nIHRoZSBib3JkZXIg
cGF0aCBjYXVzZXMgaXNzdWVzIHdpdGggdGlnaHQgY29ybmVyczoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggM2FhMGY4NWVhOGRmNzQ4
NzNmYWRhMmNhYzZhZGNmNDZmMDE4MjcyOS4uZjZlZWMyNmJiNGE4NTIwOTdjN2VlNDk0MjcxMmM0
MGU2ODFkMGIxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
QmFja2luZy5jcHAKQEAgLTE5NTYsOSArMTk1Niw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5n
Ojpjb25uZWN0Q2xpcHBpbmdTdGFja0xheWVycyhMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjayYK
ICAgICBhdXRvJiBjbGlwcGluZ0VudHJ5U3RhY2sgPSBjbGlwcGluZ1N0YWNrLnN0YWNrKCk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNsaXBwaW5nRW50cnlTdGFjay5zaXplKCkgLSAx
OyArK2kpIHsKICAgICAgICAgYXV0byYgZW50cnkgPSBjbGlwcGluZ0VudHJ5U3RhY2suYXQoaSk7
Ci0gICAgICAgIFZlY3RvcjxSZWY8R3JhcGhpY3NMYXllcj4+IGNoaWxkcmVuOwotICAgICAgICBj
aGlsZHJlbi5hcHBlbmQoKmNsaXBwaW5nRW50cnlTdGFjay5hdChpICsgMSkuY2xpcHBpbmdMYXll
cik7Ci0gICAgICAgIGVudHJ5LmNsaXBwaW5nTGF5ZXItPnNldENoaWxkcmVuKFdURk1vdmUoY2hp
bGRyZW4pKTsKKyAgICAgICAgZW50cnkuY2xpcHBpbmdMYXllci0+c2V0Q2hpbGRyZW4oeyBSZWYg
eyAqY2xpcHBpbmdFbnRyeVN0YWNrLmF0KGkgKyAxKS5jbGlwcGluZ0xheWVyIH0gfSk7CiAgICAg
fQogCiAgICAgY2xpcHBpbmdFbnRyeVN0YWNrLmxhc3QoKS5jbGlwcGluZ0xheWVyLT5yZW1vdmVB
bGxDaGlsZHJlbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmNwcAppbmRleCAwYmUwMzlhMGYyM2Q1N2ZmN2Y1N2Q5OTA5YjY1Mzc1YTAy
NDI0M2I0Li4yM2Q3MzcxMzRjYThlYWExNjA1ZDBjNDc3YWNlNjI4M2Y4NDYyMWI3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApA
QCAtMTQ5MSw5ICsxNDkxLDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkanVzdE92
ZXJmbG93U2Nyb2xsYmFyQ29udGFpbmVyTGF5ZXJzKFJlbmRlckxheWVyJgogICAgICAgICAgICAg
b3ZlcmZsb3dCYWNraW5nLT5lbnN1cmVPdmVyZmxvd0NvbnRyb2xzSG9zdExheWVyQW5jZXN0b3JD
bGlwcGluZ1N0YWNrKCZzdGFja2luZ0NvbnRleHRMYXllcik7CiAKICAgICAgICAgaWYgKGF1dG8q
IG92ZXJmbG93Q29udHJvbHNBbmNlc3RvckNsaXBwaW5nU3RhY2sgPSBvdmVyZmxvd0JhY2tpbmct
Pm92ZXJmbG93Q29udHJvbHNIb3N0TGF5ZXJBbmNlc3RvckNsaXBwaW5nU3RhY2soKSkgewotICAg
ICAgICAgICAgVmVjdG9yPFJlZjxHcmFwaGljc0xheWVyPj4gY2hpbGRyZW47Ci0gICAgICAgICAg
ICBjaGlsZHJlbi5hcHBlbmQoKm92ZXJmbG93Q29udGFpbmVyTGF5ZXIpOwotICAgICAgICAgICAg
b3ZlcmZsb3dDb250cm9sc0FuY2VzdG9yQ2xpcHBpbmdTdGFjay0+bGFzdENsaXBwaW5nTGF5ZXIo
KS0+c2V0Q2hpbGRyZW4oV1RGTW92ZShjaGlsZHJlbikpOworICAgICAgICAgICAgb3ZlcmZsb3dD
b250cm9sc0FuY2VzdG9yQ2xpcHBpbmdTdGFjay0+bGFzdENsaXBwaW5nTGF5ZXIoKS0+c2V0Q2hp
bGRyZW4oeyBSZWYgeyAqb3ZlcmZsb3dDb250YWluZXJMYXllciB9IH0pOwogICAgICAgICAgICAg
b3ZlcmZsb3dDb250YWluZXJMYXllciA9IG92ZXJmbG93Q29udHJvbHNBbmNlc3RvckNsaXBwaW5n
U3RhY2stPmZpcnN0Q2xpcHBpbmdMYXllcigpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCA5ZTEwOGY4YjRmZjI2MTc5Njg5NjRm
YTEzNzAxNTE5YmJjMjQ1MmM0Li44NzY2N2RlMmRlZDI5NWQ5MzU4MDJiMzM4OTJhMGMzMjFjN2Uz
MmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCkBAIC0y
NzMxLDEwICsyNzMxLDkgQEAgc3RhdGljIHZvaWQgcGFpbnRBdHRhY2htZW50VGl0bGVCYWNrZ3Jv
dW5kKGNvbnN0IFJlbmRlckF0dGFjaG1lbnQmIGF0dGFjaG1lbnQsIEcKICAgICBpZiAobGF5b3V0
LmxpbmVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPEZsb2F0UmVj
dD4gYmFja2dyb3VuZFJlY3RzOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXlvdXQu
bGluZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGJhY2tncm91bmRSZWN0cy5hcHBlbmQobGF5b3V0
LmxpbmVzW2ldLmJhY2tncm91bmRSZWN0KTsKKyAgICBhdXRvIGJhY2tncm91bmRSZWN0cyA9IGxh
eW91dC5saW5lcy5tYXAoW10oYXV0byYgbGluZSkgeworICAgICAgICByZXR1cm4gbGluZS5iYWNr
Z3JvdW5kUmVjdDsKKyAgICB9KTsKIAogICAgIENvbG9yIGJhY2tncm91bmRDb2xvcjsKICAgICBp
ZiAoYXR0YWNobWVudC5mcmFtZSgpLnNlbGVjdGlvbigpLmlzRm9jdXNlZEFuZEFjdGl2ZSgpKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVB
c1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNU
ZXh0LmNwcAppbmRleCBmZTU1OWJkNzBiMWQwY2Y0YjFjNWE1YjFjOTBhMjk2MzVlOGIyNzMxLi45
Mjc2YjkzYzczMTI2MWMxZjJmZmJlYzQ5ZjFlY2NlNzNjYTFiYjVjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTE5
NywxMSArMTk3LDkgQEAgc3RhdGljIHZvaWQgd3JpdGVTVkdTdHJva2VQYWludGluZ1Jlc291cmNl
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJFbGVtZW50JgogICAgIFNWR0xlbmd0aENvbnRl
eHQgbGVuZ3RoQ29udGV4dCgmc2hhcGUpOwogICAgIGRvdWJsZSBkYXNoT2Zmc2V0ID0gbGVuZ3Ro
Q29udGV4dC52YWx1ZUZvckxlbmd0aChzdmdTdHlsZS5zdHJva2VEYXNoT2Zmc2V0KCkpOwogICAg
IGRvdWJsZSBzdHJva2VXaWR0aCA9IGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3R5bGUu
c3Ryb2tlV2lkdGgoKSk7Ci0gICAgY29uc3QgYXV0byYgZGFzaGVzID0gc3ZnU3R5bGUuc3Ryb2tl
RGFzaEFycmF5KCk7Ci0KLSAgICBEYXNoQXJyYXkgZGFzaEFycmF5OwotICAgIGZvciAoYXV0byYg
bGVuZ3RoIDogZGFzaGVzKQotICAgICAgICBkYXNoQXJyYXkuYXBwZW5kKGxlbmd0aC52YWx1ZShs
ZW5ndGhDb250ZXh0KSk7CisgICAgYXV0byBkYXNoQXJyYXkgPSBzdmdTdHlsZS5zdHJva2VEYXNo
QXJyYXkoKS5tYXAoWyZdKGF1dG8mIGxlbmd0aCkgLT4gRGFzaEFycmF5RWxlbWVudCB7CisgICAg
ICAgIHJldHVybiBsZW5ndGgudmFsdWUobGVuZ3RoQ29udGV4dCk7CisgICAgfSk7CiAKICAgICB3
cml0ZUlmTm90RGVmYXVsdCh0cywgIm9wYWNpdHkiLCBzdmdTdHlsZS5zdHJva2VPcGFjaXR5KCks
IDEuMGYpOwogICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAic3Ryb2tlIHdpZHRoIiwgc3Ryb2tl
V2lkdGgsIDEuMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRDaHVuay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVu
ay5jcHAKaW5kZXggYTYzZWI4MGE3NzlkNzc2OGRhNDc3MmJiMGQ2YWZlMTllMzUyMWJiZC4uODQ4
MTM2YzhhNTM4YzZlYzhlY2MxNmQ1YmYwMWJmZGUyZGRiMzkxOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcApAQCAtNzAsOCArNzAsNyBAQCBTVkdU
ZXh0Q2h1bms6OlNWR1RleHRDaHVuayhjb25zdCBWZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+JiBs
aW5lTGF5b3V0Qm94ZXMsIHVucwogICAgICAgICB9CiAgICAgfQogCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gZmlyc3Q7IGkgPCBsaW1pdDsgKytpKQotICAgICAgICBtX2JveGVzLmFwcGVuZChsaW5l
TGF5b3V0Qm94ZXNbaV0pOworICAgIG1fYm94ZXMuYXBwZW5kKCZsaW5lTGF5b3V0Qm94ZXNbZmly
c3RdLCBsaW1pdCAtIGZpcnN0KTsKIH0KIAogdW5zaWduZWQgU1ZHVGV4dENodW5rOjp0b3RhbENo
YXJhY3RlcnMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUGFnZVJ1
bGVDb2xsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3Iu
Y3BwCmluZGV4IDIyOTlmOGM2Mzc5YjUwOTQ5MmExYTFmZmE1MjMwNmExYWExNjg5YjQuLmUzZGMz
ZWZiYzI5YjYzZDc1MjE0OWRhY2IxMTMxZmZhNTJhY2M5NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29sbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5jcHAKQEAgLTg0LDggKzg0LDkgQEAgdm9pZCBQYWdlUnVs
ZUNvbGxlY3Rvcjo6bWF0Y2hQYWdlUnVsZXMoUnVsZVNldCogcnVsZXMsIGJvb2wgaXNMZWZ0UGFn
ZSwgYm9vbCBpc0YKIAogICAgIHN0ZDo6c3RhYmxlX3NvcnQobWF0Y2hlZFBhZ2VSdWxlcy5iZWdp
bigpLCBtYXRjaGVkUGFnZVJ1bGVzLmVuZCgpLCBjb21wYXJlUGFnZVJ1bGVzKTsKIAotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXRjaGVkUGFnZVJ1bGVzLnNpemUoKTsgaSsrKQotICAg
ICAgICBtX3Jlc3VsdC5hdXRob3JEZWNsYXJhdGlvbnMuYXBwZW5kKHsgJm1hdGNoZWRQYWdlUnVs
ZXNbaV0tPnByb3BlcnRpZXMoKSB9KTsKKyAgICBtX3Jlc3VsdC5hdXRob3JEZWNsYXJhdGlvbnMu
cmVzZXJ2ZUNhcGFjaXR5KG1fcmVzdWx0LmF1dGhvckRlY2xhcmF0aW9ucy5zaXplKCkgKyBtYXRj
aGVkUGFnZVJ1bGVzLnNpemUoKSk7CisgICAgZm9yIChhdXRvKiBwYWdlUnVsZSA6IG1hdGNoZWRQ
YWdlUnVsZXMpCisgICAgICAgIG1fcmVzdWx0LmF1dGhvckRlY2xhcmF0aW9ucy51bmNoZWNrZWRB
cHBlbmQoeyAmcGFnZVJ1bGUtPnByb3BlcnRpZXMoKSB9KTsKIH0KIAogc3RhdGljIGJvb2wgY2hl
Y2tQYWdlU2VsZWN0b3JDb21wb25lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgYm9v
bCBpc0xlZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1lKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwCmluZGV4IDU3NTE4NTkxOTdiMjI2
ZmMyNDRhZjZiYzMyMDVmYWQyNmUwMTcwMTkuLmNmMTY1MjIxY2Q1M2EzYzVhNzdjNmQ5ODA4NDMy
MWMxM2YyMjIzOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWls
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0QnVpbGRlci5jcHAKQEAg
LTM3OCw4ICszNzgsOSBAQCB2b2lkIFJ1bGVTZXRCdWlsZGVyOjpNZWRpYVF1ZXJ5Q29sbGVjdG9y
Ojpwb3AoY29uc3QgTWVkaWFRdWVyeVNldCogc2V0KQogCiAgICAgaWYgKCFkeW5hbWljQ29udGV4
dFN0YWNrLmxhc3QoKS5hZmZlY3RlZFJ1bGVQb3NpdGlvbnMuaXNFbXB0eSgpIHx8ICFjb2xsZWN0
RHluYW1pYykgewogICAgICAgICBSdWxlU2V0OjpEeW5hbWljTWVkaWFRdWVyeVJ1bGVzIHJ1bGVz
OworICAgICAgICBydWxlcy5tZWRpYVF1ZXJ5U2V0cy5yZXNlcnZlQ2FwYWNpdHkocnVsZXMubWVk
aWFRdWVyeVNldHMuc2l6ZSgpICsgZHluYW1pY0NvbnRleHRTdGFjay5zaXplKCkpOwogICAgICAg
ICBmb3IgKGF1dG8mIGNvbnRleHQgOiBkeW5hbWljQ29udGV4dFN0YWNrKQotICAgICAgICAgICAg
cnVsZXMubWVkaWFRdWVyeVNldHMuYXBwZW5kKGNvbnRleHQuc2V0LmdldCgpKTsKKyAgICAgICAg
ICAgIHJ1bGVzLm1lZGlhUXVlcnlTZXRzLnVuY2hlY2tlZEFwcGVuZChjb250ZXh0LnNldC5nZXQo
KSk7CiAKICAgICAgICAgaWYgKGNvbGxlY3REeW5hbWljKSB7CiAgICAgICAgICAgICBydWxlcy5h
ZmZlY3RlZFJ1bGVQb3NpdGlvbnMuYXBwZW5kVmVjdG9yKGR5bmFtaWNDb250ZXh0U3RhY2subGFz
dCgpLmFmZmVjdGVkUnVsZVBvc2l0aW9ucyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
QnVpbGRlckNvbnZlcnRlci5oCmluZGV4IDJmODM0ZGY2N2Q4MGNiMTNkZDRjOTE1NTFiYWQxMmRi
MWIyM2EyNDkuLjc0NjRmODRkOGJmNmIyYjJhMzMxMjNkNTkyYmUyOTJmMTRjYzI4ZGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCkBAIC0xNjk3LDEz
ICsxNjk3LDEyIEBAIGlubGluZSBWZWN0b3I8QXRvbVN0cmluZz4gQnVpbGRlckNvbnZlcnRlcjo6
Y29udmVydENvbnRhaW5lck5hbWUoQnVpbGRlclN0YXRlJiwKICAgICAgICAgQVNTRVJUKGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSk7
CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQorICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0Pih2
YWx1ZSkpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBWZWN0b3I8QXRvbVN0cmluZz4gcmVz
dWx0OwotICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgewotICAgICAgICBmb3IgKGF1
dG8mIGl0ZW0gOiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkKLSAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0uZ2V0KCkpLnN0cmlu
Z1ZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBXVEY6Om1h
cChkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSwgW10oYXV0byYgaXRlbSkgLT4gQXRvbVN0
cmluZyB7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oaXRlbS5n
ZXQoKSkuc3RyaW5nVmFsdWUoKTsKKyAgICB9KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyUHJveHkuY3BwIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyUHJveHkuY3BwCmlu
ZGV4IGNkMmM1MWJiZDMyZTI4YzJmZTQzNDZlOWYyNjM1MDE4OWVlYTY2M2IuLjJhNmIxZWIzNjdl
NmNjNzJjNTcyODlhNTNjNjY5MjdmNTU5YjExYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllclByb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJQcm94eS5jcHAKQEAgLTgw
MiwxMSArODAyLDkgQEAgYm9vbCBSZW1vdGVNZWRpYVBsYXllclByb3h5Ojpkb2VzSGF2ZUF0dHJp
YnV0ZShjb25zdCBBdG9tU3RyaW5nJiwgQXRvbVN0cmluZyopIGMKICNpZiBFTkFCTEUoQVZGX0NB
UFRJT05TKQogVmVjdG9yPFJlZlB0cjxQbGF0Zm9ybVRleHRUcmFjaz4+IFJlbW90ZU1lZGlhUGxh
eWVyUHJveHk6Om91dE9mQmFuZFRyYWNrU291cmNlcygpCiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxQ
bGF0Zm9ybVRleHRUcmFjaz4+IHNvdXJjZXM7Ci0gICAgZm9yIChhdXRvJiBkYXRhIDogbV9jb25m
aWd1cmF0aW9uLm91dE9mQmFuZFRyYWNrRGF0YSkKLSAgICAgICAgc291cmNlcy5hcHBlbmQoUGxh
dGZvcm1UZXh0VHJhY2s6OmNyZWF0ZShXVEZNb3ZlKGRhdGEpKSk7Ci0gICAgCi0gICAgcmV0dXJu
IHNvdXJjZXM7CisgICAgcmV0dXJuIFdURjo6bWFwKG1fY29uZmlndXJhdGlvbi5vdXRPZkJhbmRU
cmFja0RhdGEsIFtdKGF1dG8mIGRhdGEpIC0+IFJlZlB0cjxQbGF0Zm9ybVRleHRUcmFjaz4gewor
ICAgICAgICByZXR1cm4gUGxhdGZvcm1UZXh0VHJhY2s6OmNyZWF0ZShXVEZNb3ZlKGRhdGEpKTsK
KyAgICB9KTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvbWVkaWEvUmVtb3RlU291cmNlQnVmZmVyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL21lZGlhL1JlbW90ZVNvdXJjZUJ1ZmZlclByb3h5LmNwcAppbmRleCAyNzkxNjVkZTY2
YWFmZTAyNDY4MWUxNjFhMDM1YzRhMTA5NTRlNmUxLi5iYmQzMGQ4ZTcxYzE5NDI3MWVhMDNiYWEy
MmUzNTA2ZGJiMjA1MDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVk
aWEvUmVtb3RlU291cmNlQnVmZmVyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9tZWRpYS9SZW1vdGVTb3VyY2VCdWZmZXJQcm94eS5jcHAKQEAgLTc1LDkgKzc1LDEwIEBA
IHZvaWQgUmVtb3RlU291cmNlQnVmZmVyUHJveHk6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNl
aXZlSW5pdGlhbGl6YXRpb25TZWdtZW50CiAKICAgICBJbml0aWFsaXphdGlvblNlZ21lbnRJbmZv
IHNlZ21lbnRJbmZvOwogICAgIHNlZ21lbnRJbmZvLmR1cmF0aW9uID0gc2VnbWVudC5kdXJhdGlv
bjsKKyAgICBzZWdtZW50SW5mby5hdWRpb1RyYWNrcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNl
Z21lbnQuYXVkaW9UcmFja3Muc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIGF1ZGlvVHJhY2tJbmZv
IDogc2VnbWVudC5hdWRpb1RyYWNrcykgewogICAgICAgICBhdXRvIGlkZW50aWZpZXIgPSBtX3Jl
bW90ZU1lZGlhUGxheWVyUHJveHktPmFkZFJlbW90ZUF1ZGlvVHJhY2tQcm94eSgqYXVkaW9UcmFj
a0luZm8udHJhY2spOwotICAgICAgICBzZWdtZW50SW5mby5hdWRpb1RyYWNrcy5hcHBlbmQoeyBN
ZWRpYURlc2NyaXB0aW9uSW5mbygqYXVkaW9UcmFja0luZm8uZGVzY3JpcHRpb24pLCBpZGVudGlm
aWVyIH0pOworICAgICAgICBzZWdtZW50SW5mby5hdWRpb1RyYWNrcy51bmNoZWNrZWRBcHBlbmQo
eyBNZWRpYURlc2NyaXB0aW9uSW5mbygqYXVkaW9UcmFja0luZm8uZGVzY3JpcHRpb24pLCBpZGVu
dGlmaWVyIH0pOwogCiAgICAgICAgIEFTU0VSVCghbV90cmFja0lkcy5jb250YWlucyhpZGVudGlm
aWVyKSk7CiAgICAgICAgIEFTU0VSVCghbV9tZWRpYURlc2NyaXB0aW9ucy5jb250YWlucyhpZGVu
dGlmaWVyKSk7CkBAIC04NSw5ICs4NiwxMCBAQCB2b2lkIFJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5
Ojpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudAogICAg
ICAgICBtX21lZGlhRGVzY3JpcHRpb25zLmFkZChpZGVudGlmaWVyLCAqYXVkaW9UcmFja0luZm8u
ZGVzY3JpcHRpb24pOwogICAgIH0KIAorICAgIHNlZ21lbnRJbmZvLnZpZGVvVHJhY2tzLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoc2VnbWVudC52aWRlb1RyYWNrcy5zaXplKCkpOwogICAgIGZvciAo
YXV0byYgdmlkZW9UcmFja0luZm8gOiBzZWdtZW50LnZpZGVvVHJhY2tzKSB7CiAgICAgICAgIGF1
dG8gaWRlbnRpZmllciA9IG1fcmVtb3RlTWVkaWFQbGF5ZXJQcm94eS0+YWRkUmVtb3RlVmlkZW9U
cmFja1Byb3h5KCp2aWRlb1RyYWNrSW5mby50cmFjayk7Ci0gICAgICAgIHNlZ21lbnRJbmZvLnZp
ZGVvVHJhY2tzLmFwcGVuZCh7IE1lZGlhRGVzY3JpcHRpb25JbmZvKCp2aWRlb1RyYWNrSW5mby5k
ZXNjcmlwdGlvbiksIGlkZW50aWZpZXIgfSk7CisgICAgICAgIHNlZ21lbnRJbmZvLnZpZGVvVHJh
Y2tzLnVuY2hlY2tlZEFwcGVuZCh7IE1lZGlhRGVzY3JpcHRpb25JbmZvKCp2aWRlb1RyYWNrSW5m
by5kZXNjcmlwdGlvbiksIGlkZW50aWZpZXIgfSk7CiAKICAgICAgICAgQVNTRVJUKCFtX3RyYWNr
SWRzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKICAgICAgICAgQVNTRVJUKCFtX21lZGlhRGVzY3Jp
cHRpb25zLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKQEAgLTk1LDkgKzk3LDEwIEBAIHZvaWQgUmVt
b3RlU291cmNlQnVmZmVyUHJveHk6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlh
bGl6YXRpb25TZWdtZW50CiAgICAgICAgIG1fbWVkaWFEZXNjcmlwdGlvbnMuYWRkKGlkZW50aWZp
ZXIsICp2aWRlb1RyYWNrSW5mby5kZXNjcmlwdGlvbik7CiAgICAgfQogCisgICAgc2VnbWVudElu
Zm8udGV4dFRyYWNrcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNlZ21lbnQudGV4dFRyYWNrcy5z
aXplKCkpOwogICAgIGZvciAoYXV0byYgdGV4dFRyYWNrSW5mbyA6IHNlZ21lbnQudGV4dFRyYWNr
cykgewogICAgICAgICBhdXRvIGlkZW50aWZpZXIgPSBtX3JlbW90ZU1lZGlhUGxheWVyUHJveHkt
PmFkZFJlbW90ZVRleHRUcmFja1Byb3h5KCp0ZXh0VHJhY2tJbmZvLnRyYWNrKTsKLSAgICAgICAg
c2VnbWVudEluZm8udGV4dFRyYWNrcy5hcHBlbmQoeyBNZWRpYURlc2NyaXB0aW9uSW5mbygqdGV4
dFRyYWNrSW5mby5kZXNjcmlwdGlvbiksIGlkZW50aWZpZXIgfSk7CisgICAgICAgIHNlZ21lbnRJ
bmZvLnRleHRUcmFja3MudW5jaGVja2VkQXBwZW5kKHsgTWVkaWFEZXNjcmlwdGlvbkluZm8oKnRl
eHRUcmFja0luZm8uZGVzY3JpcHRpb24pLCBpZGVudGlmaWVyIH0pOwogCiAgICAgICAgIEFTU0VS
VCghbV90cmFja0lkcy5jb250YWlucyhpZGVudGlmaWVyKSk7CiAgICAgICAgIEFTU0VSVCghbV9t
ZWRpYURlc2NyaXB0aW9ucy5jb250YWlucyhpZGVudGlmaWVyKSk7CkBAIC0zMzgsMTYgKzM0MSwx
MSBAQCB2b2lkIFJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5OjpzZWVrVG9UaW1lKGNvbnN0IE1lZGlh
VGltZSYgbWVkaWFUaW1lKQogCiB2b2lkIFJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5Ojp1cGRhdGVU
cmFja0lkcyhWZWN0b3I8c3RkOjpwYWlyPFRyYWNrUHJpdmF0ZVJlbW90ZUlkZW50aWZpZXIsIFRy
YWNrUHJpdmF0ZVJlbW90ZUlkZW50aWZpZXI+PiYmIGlkZW50aWZpZXJQYWlycykKIHsKLSAgICBW
ZWN0b3I8c3RkOjpwYWlyPEF0b21TdHJpbmcsIEF0b21TdHJpbmc+PiB0cmFja0lkUGFpcnM7Ci0K
LSAgICBmb3IgKGF1dG8mIGlkZW50aWZpZXJQYWlyIDogaWRlbnRpZmllclBhaXJzKSB7CisgICAg
YXV0byB0cmFja0lkUGFpcnMgPSBpZGVudGlmaWVyUGFpcnMubWFwKFsmXShhdXRvJiBpZGVudGlm
aWVyUGFpcikgewogICAgICAgICBBU1NFUlQobV90cmFja0lkcy5jb250YWlucyhpZGVudGlmaWVy
UGFpci5maXJzdCkpOwogICAgICAgICBBU1NFUlQobV90cmFja0lkcy5jb250YWlucyhpZGVudGlm
aWVyUGFpci5zZWNvbmQpKTsKLQotICAgICAgICBhdXRvIG9sZElkID0gbV90cmFja0lkcy50YWtl
KGlkZW50aWZpZXJQYWlyLmZpcnN0KTsKLSAgICAgICAgYXV0byBuZXdJZCA9IG1fdHJhY2tJZHMu
Z2V0KGlkZW50aWZpZXJQYWlyLnNlY29uZCk7Ci0gICAgICAgIHRyYWNrSWRQYWlycy5hcHBlbmQo
c3RkOjptYWtlX3BhaXIob2xkSWQsIG5ld0lkKSk7Ci0gICAgfQorICAgICAgICByZXR1cm4gc3Rk
OjpwYWlyIHsgbV90cmFja0lkcy50YWtlKGlkZW50aWZpZXJQYWlyLmZpcnN0KSwgbV90cmFja0lk
cy5nZXQoaWRlbnRpZmllclBhaXIuc2Vjb25kKSB9OworICAgIH0pOwogCiAgICAgaWYgKCF0cmFj
a0lkUGFpcnMuaXNFbXB0eSgpKQogICAgICAgICBtX3NvdXJjZUJ1ZmZlclByaXZhdGUtPnVwZGF0
ZVRyYWNrSWRzKFdURk1vdmUodHJhY2tJZFBhaXJzKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCmluZGV4IDcwYjVhZmRhNTI2ZTk5MDliOTYyZDcx
MjEzZDg1YjYwYjUzNzE4MWQuLmU4NzZlYzM3NzcxZmY0MDBjYWE4MzRjZWZhZTk1NjI1NGNjM2Zk
OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3Bw
CkBAIC04NTMsOSArODUzLDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBSZWdpc3RyYWJsZUQKIAogICAgICAgICAg
ICAgc3RhdGlzdGljLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgPSBXVEZNb3ZlKHRvcEZy
YW1lRG9tYWlucyk7CiAKLSAgICAgICAgICAgIFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
PiBzdGF0aXN0aWNzOwotICAgICAgICAgICAgc3RhdGlzdGljcy5hcHBlbmQoV1RGTW92ZShzdGF0
aXN0aWMpKTsKLSAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5tZXJnZVN0YXRpc3RpY3Mo
V1RGTW92ZShzdGF0aXN0aWNzKSk7CisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+bWVy
Z2VTdGF0aXN0aWNzKFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPjo6ZnJvbShXVEZNb3Zl
KHN0YXRpc3RpYykpKTsKICAgICAgICAgfQogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggZjRmOGE0YzRmNGFmOTZhZjY4OTQyYzVj
NmM5ODkyZmY3ZTE5OTNmMS4uNGE4YjBlZGEwOWJmMDU4OThhM2I4YjIyYzkwOGI0N2IyOGViOWM4
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5j
cHAKQEAgLTEzODAsMTAgKzEzODAsOSBAQCBzdGF0aWMgdm9pZCBmZXRjaERpc2tDYWNoZUVudHJp
ZXMoTmV0d29ya0NhY2hlOjpDYWNoZSogY2FjaGUsIFBBTDo6U2Vzc2lvbklEIHNlcwogICAgIEhh
c2hNYXA8U2VjdXJpdHlPcmlnaW5EYXRhLCB1aW50NjRfdD4gb3JpZ2luc0FuZFNpemVzOwogICAg
IGNhY2hlLT50cmF2ZXJzZShbZmV0Y2hPcHRpb25zLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpLCBvcmlnaW5zQW5kU2l6ZXMgPSBXVEZNb3ZlKG9yaWdpbnNB
bmRTaXplcyldKGF1dG8qIHRyYXZlcnNhbEVudHJ5KSBtdXRhYmxlIHsKICAgICAgICAgaWYgKCF0
cmF2ZXJzYWxFbnRyeSkgewotICAgICAgICAgICAgVmVjdG9yPFdlYnNpdGVEYXRhOjpFbnRyeT4g
ZW50cmllczsKLQotICAgICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW5BbmRTaXplIDogb3JpZ2lu
c0FuZFNpemVzKQotICAgICAgICAgICAgICAgIGVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpF
bnRyeSB7IG9yaWdpbkFuZFNpemUua2V5LCBXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSwgb3Jp
Z2luQW5kU2l6ZS52YWx1ZSB9KTsKKyAgICAgICAgICAgIGF1dG8gZW50cmllcyA9IFdURjo6bWFw
KG9yaWdpbnNBbmRTaXplcywgW10oYXV0byYgb3JpZ2luQW5kU2l6ZSkgeworICAgICAgICAgICAg
ICAgIHJldHVybiBXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW5BbmRTaXplLmtleSwgV2Vic2l0
ZURhdGFUeXBlOjpEaXNrQ2FjaGUsIG9yaWdpbkFuZFNpemUudmFsdWUgfTsKKyAgICAgICAgICAg
IH0pOwogCiAgICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGVudHJpZXMgPSBXVEZNb3ZlKGVu
dHJpZXMpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihl
bnRyaWVzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTm90aWZp
Y2F0aW9ucy9OZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05vdGlmaWNhdGlvbnMvTmV0d29ya05vdGlmaWNhdGlvbk1hbmFnZXIuY3Bw
CmluZGV4IDQ4NmNiNWIzZGY2NzAwZTg4MDNmNjAwOTljYTM1N2VmMGQyYmE4NDEuLjk3N2I4OTc2
N2I3OGU1ZTNhODg4YzgxMjg1NjZlNDU4MmNhNjZmMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTm90aWZpY2F0aW9ucy9OZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdl
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05l
dHdvcmtOb3RpZmljYXRpb25NYW5hZ2VyLmNwcApAQCAtODEsOSArODEsOSBAQCB2b2lkIE5ldHdv
cmtOb3RpZmljYXRpb25NYW5hZ2VyOjpkZWxldGVQdXNoQW5kTm90aWZpY2F0aW9uUmVnaXN0cmF0
aW9uKGNvbnN0IFNlYwogdm9pZCBOZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlcjo6Z2V0T3JpZ2lu
c1dpdGhQdXNoQW5kTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+IHJlcGx5
SGFuZGxlciA9IFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSAoVmVjdG9yPFN0cmluZz4gb3JpZ2luU3RyaW5ncykgbXV0YWJsZSB7Ci0gICAgICAgIFZlY3Rv
cjxTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnM7Ci0gICAgICAgIGZvciAoYXV0byYgb3JpZ2lu
U3RyaW5nIDogb3JpZ2luU3RyaW5ncykKLSAgICAgICAgICAgIG9yaWdpbnMuYXBwZW5kKFNlY3Vy
aXR5T3JpZ2luRGF0YTo6ZnJvbVVSTCh7IHsgfSwgb3JpZ2luU3RyaW5nIH0pKTsKKyAgICAgICAg
YXV0byBvcmlnaW5zID0gb3JpZ2luU3RyaW5ncy5tYXAoW10oYXV0byYgb3JpZ2luU3RyaW5nKSB7
CisgICAgICAgICAgICByZXR1cm4gU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tVVJMKHsgeyB9LCBv
cmlnaW5TdHJpbmcgfSk7CisgICAgICAgIH0pOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihX
VEZNb3ZlKG9yaWdpbnMpKTsKICAgICB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAppbmRleCBjYjkw
MWI2YzU4YjE4NTlhZThiZTJhZDlkYTkwMDJkODIyYjgwNjEyLi43ZTJkMzc3YTFiZjg2MmQ4YTE2
OTVlZDk1YmIwNWFlY2M0M2RjZDFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKQEAgLTI5NSwyMCAr
Mjk1LDE0IEBAIFZlY3RvcjxTdG9yYWdlQXJlYUlkZW50aWZpZXI+IFN0b3JhZ2VNYW5hZ2VyOjph
bGxTdG9yYWdlQXJlYUlkZW50aWZpZXJzKCkgY29uc3QKICAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKIAogICAgIFZlY3RvcjxTdG9yYWdlQXJlYUlkZW50aWZpZXI+IGlkZW50aWZpZXJz
OwotICAgIGZvciAoY29uc3QgYXV0byYgbG9jYWxTdG9yYWdlTmFtZXNwYWNlIDogbV9sb2NhbFN0
b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKSB7Ci0gICAgICAgIGZvciAoYXV0byBrZXkgOiBsb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VBcmVhSWRlbnRpZmllcnMoKSkKLSAgICAgICAgICAg
IGlkZW50aWZpZXJzLmFwcGVuZChrZXkpOwotICAgIH0KKyAgICBmb3IgKGNvbnN0IGF1dG8mIGxv
Y2FsU3RvcmFnZU5hbWVzcGFjZSA6IG1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkK
KyAgICAgICAgaWRlbnRpZmllcnMuYXBwZW5kVmVjdG9yKGxvY2FsU3RvcmFnZU5hbWVzcGFjZS0+
c3RvcmFnZUFyZWFJZGVudGlmaWVycygpKTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgdHJhc2ll
bnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UgOiBtX3RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFj
ZXMudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvIGtleSA6IHRyYXNpZW50TG9jYWxTdG9y
YWdlTmFtZXNwYWNlLT5zdG9yYWdlQXJlYUlkZW50aWZpZXJzKCkpCi0gICAgICAgICAgICBpZGVu
dGlmaWVycy5hcHBlbmQoa2V5KTsKLSAgICB9CisgICAgZm9yIChjb25zdCBhdXRvJiB0cmFzaWVu
dExvY2FsU3RvcmFnZU5hbWVzcGFjZSA6IG1fdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNl
cy52YWx1ZXMoKSkKKyAgICAgICAgaWRlbnRpZmllcnMuYXBwZW5kVmVjdG9yKHRyYXNpZW50TG9j
YWxTdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlQXJlYUlkZW50aWZpZXJzKCkpOwogCi0gICAgZm9y
IChjb25zdCBhdXRvJiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSA6IG1fc2Vzc2lvblN0b3JhZ2VO
YW1lc3BhY2VzLnZhbHVlcygpKSB7Ci0gICAgICAgIGZvciAoYXV0byBrZXkgOiBzZXNzaW9uU3Rv
cmFnZU5hbWVzcGFjZS0+c3RvcmFnZUFyZWFJZGVudGlmaWVycygpKQotICAgICAgICAgICAgaWRl
bnRpZmllcnMuYXBwZW5kKGtleSk7Ci0gICAgfQorICAgIGZvciAoY29uc3QgYXV0byYgc2Vzc2lv
blN0b3JhZ2VOYW1lc3BhY2UgOiBtX3Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkK
KyAgICAgICAgaWRlbnRpZmllcnMuYXBwZW5kVmVjdG9yKHNlc3Npb25TdG9yYWdlTmFtZXNwYWNl
LT5zdG9yYWdlQXJlYUlkZW50aWZpZXJzKCkpOwogCiAgICAgcmV0dXJuIGlkZW50aWZpZXJzOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1Ry
YW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcAppbmRl
eCBlZWVjNTUwZWVmNjNhZTU5YTFlYWIzYWE4YTQ5N2EzMmMxMDUwNjI0Li5mYjk4ZWQzOTQ4MDkx
NjA2ODcxNzI2YWUwODZkNTFmMTUxMmQ0NDA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvVHJhbnNpZW50
TG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcApAQCAtNTUsMTQgKzU1LDExIEBAIFN0b3JhZ2VBcmVh
JiBUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmdldE9yQ3JlYXRlU3RvcmFnZUFyZWEo
U2VjdXJpdHlPcmlnCiBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiBUcmFuc2llbnRMb2NhbFN0
b3JhZ2VOYW1lc3BhY2U6Om9yaWdpbnMoKSBjb25zdAogewogICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOwotICAgIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnM7Ci0KLSAg
ICBmb3IgKGNvbnN0IGF1dG8mIHN0b3JhZ2VBcmVhIDogbV9zdG9yYWdlQXJlYU1hcC52YWx1ZXMo
KSkgewotICAgICAgICBpZiAoIXN0b3JhZ2VBcmVhLT5pdGVtcygpLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgIG9yaWdpbnMuYXBwZW5kKHN0b3JhZ2VBcmVhLT5zZWN1cml0eU9yaWdpbigpKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gb3JpZ2luczsKKyAgICByZXR1cm4gV1RGOjpjb21wYWN0TWFwKG1f
c3RvcmFnZUFyZWFNYXAsIFtdKGF1dG8mIGVudHJ5KSAtPiBzdGQ6Om9wdGlvbmFsPFNlY3VyaXR5
T3JpZ2luRGF0YT4geworICAgICAgICBpZiAoZW50cnkudmFsdWUtPml0ZW1zKCkuaXNFbXB0eSgp
KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIGVudHJ5
LnZhbHVlLT5zZWN1cml0eU9yaWdpbigpOworICAgIH0pOwogfQogCiB2b2lkIFRyYW5zaWVudExv
Y2FsU3RvcmFnZU5hbWVzcGFjZTo6Y2xlYXJTdG9yYWdlQXJlYXNNYXRjaGluZ09yaWdpbihjb25z
dCBTZWN1cml0eU9yaWdpbkRhdGEmIHNlY3VyaXR5T3JpZ2luKQpAQCAtODIsMTAgKzc5LDkgQEAg
dm9pZCBUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmNsZWFyQWxsU3RvcmFnZUFyZWFz
KCkKIAogVmVjdG9yPFN0b3JhZ2VBcmVhSWRlbnRpZmllcj4gVHJhbnNpZW50TG9jYWxTdG9yYWdl
TmFtZXNwYWNlOjpzdG9yYWdlQXJlYUlkZW50aWZpZXJzKCkgY29uc3QKIHsKLSAgICBWZWN0b3I8
U3RvcmFnZUFyZWFJZGVudGlmaWVyPiBpZGVudGlmaWVyczsKLSAgICBmb3IgKGF1dG8mIHN0b3Jh
Z2VBcmVhIDogbV9zdG9yYWdlQXJlYU1hcC52YWx1ZXMoKSkKLSAgICAgICAgaWRlbnRpZmllcnMu
YXBwZW5kKHN0b3JhZ2VBcmVhLT5pZGVudGlmaWVyKCkpOwotICAgIHJldHVybiBpZGVudGlmaWVy
czsKKyAgICByZXR1cm4gV1RGOjptYXAobV9zdG9yYWdlQXJlYU1hcCwgW10oYXV0byYgZW50cnkp
IHsKKyAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlLT5pZGVudGlmaWVyKCk7CisgICAgfSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcAppbmRl
eCBkYTljYjhhNWRjYzBlZDdmOWY0YzJlM2QyZjI3Njg5NGEwMWVkMTc0Li4zZTFhZTMxMzAyOGFk
MDAzY2Q1NWY4MWU0NmU1Y2FlMGJmMWVhZGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNw
cApAQCAtMjA5LDggKzIwOSw5IEBAIHZvaWQgQ2FjaGU6OmZpbmlzaE9wZW5pbmcoQ29tcGxldGlv
bkNhbGxiYWNrJiYgY2FsbGJhY2ssIHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYKIHsKICAgICBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZWNvcmRJbmZvcm1hdGlvbj4+IHJlY29yZHM7CiAg
ICAgZm9yIChhdXRvJiB2YWx1ZSA6IG1fcmVjb3Jkcy52YWx1ZXMoKSkgeworICAgICAgICByZWNv
cmRzLnJlc2VydmVDYXBhY2l0eShyZWNvcmRzLnNpemUoKSArIHZhbHVlLnNpemUoKSk7CiAgICAg
ICAgIGZvciAoYXV0byYgcmVjb3JkIDogdmFsdWUpCi0gICAgICAgICAgICByZWNvcmRzLmFwcGVu
ZChyZWNvcmQpOworICAgICAgICAgICAgcmVjb3Jkcy51bmNoZWNrZWRBcHBlbmQocmVjb3JkKTsK
ICAgICB9CiAgICAgc3RkOjpzb3J0KHJlY29yZHMuYmVnaW4oKSwgcmVjb3Jkcy5lbmQoKSwgWyZd
KGNvbnN0IGF1dG8mIGEsIGNvbnN0IGF1dG8mIGIpIHsKICAgICAgICAgcmV0dXJuIGEuZ2V0KCku
aW5zZXJ0aW9uVGltZSA8IGIuZ2V0KCkuaW5zZXJ0aW9uVGltZTsKQEAgLTY4Miw4ICs2ODMsOSBA
QCBWZWN0b3I8S2V5PiBDYWNoZTo6a2V5cygpIGNvbnN0CiB7CiAgICAgVmVjdG9yPEtleT4ga2V5
czsKICAgICBmb3IgKGF1dG8mIHJlY29yZHMgOiBtX3JlY29yZHMudmFsdWVzKCkpIHsKKyAgICAg
ICAga2V5cy5yZXNlcnZlQ2FwYWNpdHkoa2V5cy5zaXplKCkgKyByZWNvcmRzLnNpemUoKSk7CiAg
ICAgICAgIGZvciAoYXV0byYgcmVjb3JkIDogcmVjb3JkcykKLSAgICAgICAgICAgIGtleXMuYXBw
ZW5kKHJlY29yZC5rZXkpOworICAgICAgICAgICAga2V5cy51bmNoZWNrZWRBcHBlbmQocmVjb3Jk
LmtleSk7CiAgICAgfQogICAgIHJldHVybiBrZXlzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHAKaW5k
ZXggNDA5YTMzODhhMGI4ZWNmOWFiNzEwNDliNzI5ZmRlMzkyN2M0OGViNS4uNDEzNjk0NGI1ZmY4
NWVmMjNmY2VlNDdlZWQ4MzJmMWVkMGI2MDQ3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuY3BwCkBAIC02
OSw4ICs2OSw5IEBAIFNRTGl0ZVN0b3JhZ2VBcmVhOjpTUUxpdGVTdG9yYWdlQXJlYSh1bnNpZ25l
ZCBxdW90YSwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luCiB7CiAgICAgQVNTRVJUKCFpc01h
aW5SdW5Mb29wKCkpOwogCisgICAgbV9jYWNoZWRTdGF0ZW1lbnRzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoc3RhdGljX2Nhc3Q8c2l6ZV90PihTdGF0ZW1lbnRUeXBlOjpJbnZhbGlkKSk7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KFN0YXRlbWVudFR5cGU6
OkludmFsaWQpOyArK2kpCi0gICAgICAgIG1fY2FjaGVkU3RhdGVtZW50cy5hcHBlbmQobnVsbHB0
cik7CisgICAgICAgIG1fY2FjaGVkU3RhdGVtZW50cy51bmNoZWNrZWRBcHBlbmQobnVsbHB0cik7
CiB9CiAKIHZvaWQgU1FMaXRlU3RvcmFnZUFyZWE6OmNsb3NlKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oCmluZGV4IDcxZTUyMjhiZjYwODVmZWZlMDI3OGU2
YjFhZjM1NTU5Mzk3OGI4ZjYuLmUyNDczYWZjYTdjNTkwODY5MjQ5OWRkOTgwYTIzMGVhMmVlYjRm
MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJz
LmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaApAQCAt
NDQ1LDcgKzQ0NSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAgICAgICAgIHZlY3Rvci5hcHBlbmQoV1RGTW92ZSgq
ZWxlbWVudCkpOwogICAgICAgICB9Ci0gICAgICAgIHZlY3Rvci5zaHJpbmtUb0ZpdCgpOworICAg
ICAgICBBU1NFUlQodmVjdG9yLmNhcGFjaXR5KCkgPT0gdmVjdG9yLnNpemUoKSk7CiAgICAgICAg
IHJldHVybiB2ZWN0b3I7CiAgICAgfQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5LmNwcCBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5LmNwcAppbmRleCAw
NGE2OTY4MTc4YTZmNzU5NGMyODBlZjczMTgxOThjYjYzMmI5MjMwLi5iY2NjMDU1MDc3MTc3OTc2
NjhmOWM5ZGNmMTAzMTA5MTExYjk4YWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkuY3BwCkBAIC05
Myw5ICs5Myw5IEBAIHZvaWQgV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OnNob3dQYXltZW50
VUkoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgZGVzdGluYXRpCiAKICAgICBVUkwgb3JpZ2luYXRp
bmdVUkwoVVJMKCksIG9yaWdpbmF0aW5nVVJMU3RyaW5nKTsKIAotICAgIFZlY3RvcjxVUkw+IGxp
bmtJY29uVVJMczsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGxpbmtJY29uVVJMU3RyaW5nIDogbGlu
a0ljb25VUkxTdHJpbmdzKQotICAgICAgICBsaW5rSWNvblVSTHMuYXBwZW5kKFVSTChVUkwoKSwg
bGlua0ljb25VUkxTdHJpbmcpKTsKKyAgICBhdXRvIGxpbmtJY29uVVJMcyA9IGxpbmtJY29uVVJM
U3RyaW5ncy5tYXAoW10oYXV0byYgbGlua0ljb25VUkxTdHJpbmcpIHsKKyAgICAgICAgcmV0dXJu
IFVSTChVUkwoKSwgbGlua0ljb25VUkxTdHJpbmcpOworICAgIH0pOwogCiAgICAgcGxhdGZvcm1T
aG93UGF5bWVudFVJKHdlYlBhZ2VQcm94eUlELCBvcmlnaW5hdGluZ1VSTCwgbGlua0ljb25VUkxz
LCBwYXltZW50UmVxdWVzdCwgW3RoaXMsIHdlYWtUaGlzID0gV2Vha1B0ciB7ICp0aGlzIH1dKGJv
b2wgcmVzdWx0KSB7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbi5jcHAKaW5kZXggODg0NjZjNDllZDBkZTE4ZTIwMzJj
YWEwYTA0NjQ4MzllYTc0NTEwMS4uNGE4ODkwMzllOTRhNjJmYTU5MmYxOTU3Zjc2ZDg1OWU3OWM5
ZmM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uLmNw
cApAQCAtNjIsMTAgKzYyLDEwIEBAIE5hdmlnYXRpb246Ok5hdmlnYXRpb24oV2ViTmF2aWdhdGlv
blN0YXRlJiBzdGF0ZSwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVxCiAgICAgOiBtX25h
dmlnYXRpb25JRChzdGF0ZS5nZW5lcmF0ZU5hdmlnYXRpb25JRCgpKQogICAgICwgbV9vcmlnaW5h
bFJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSkKICAgICAsIG1fY3VycmVudFJlcXVlc3QobV9vcmln
aW5hbFJlcXVlc3QpCisgICAgLCBtX3JlZGlyZWN0Q2hhaW4geyBtX29yaWdpbmFsUmVxdWVzdC51
cmwoKSB9CiAgICAgLCBtX2Zyb21JdGVtKGZyb21JdGVtKQogICAgICwgbV9jbGllbnROYXZpZ2F0
aW9uQWN0aXZpdHkobmF2aWdhdGlvbkFjdGl2aXR5VGltZW91dCkKIHsKLSAgICBtX3JlZGlyZWN0
Q2hhaW4uYXBwZW5kKG1fb3JpZ2luYWxSZXF1ZXN0LnVybCgpKTsKIH0KIAogTmF2aWdhdGlvbjo6
TmF2aWdhdGlvbihXZWJOYXZpZ2F0aW9uU3RhdGUmIHN0YXRlLCBXZWJCYWNrRm9yd2FyZExpc3RJ
dGVtJiB0YXJnZXRJdGVtLCBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBmcm9tSXRlbSwgRnJhbWVM
b2FkVHlwZSBiYWNrRm9yd2FyZEZyYW1lTG9hZFR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NoYXJlU2hlZXQubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9XS1NoYXJlU2hlZXQubW0KaW5kZXggZTM0ZDU3MGE1OWJlYzI2ZmJmNmJlM2E2
ZGY2NDZlNTA5YWVmMTYzMy4uNzVlMjgzNDUxM2UxOGI1YWY2YjUyMjQ3MmIzODc5ZDlkNzExN2Ix
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tTaGFyZVNoZWV0
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2hhcmVTaGVldC5tbQpA
QCAtOTYsOSArOTYsOSBAQCBzdGF0aWMgdm9pZCBhcHBlbmRGaWxlc0FzU2hhcmVhYmxlVVJMcyhS
ZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+JiYgc2hhcmVEYXRhQXJyYQogICAgICAgICBTdHJpbmcg
ZmlsZU5hbWU7CiAgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGZpbGVEYXRhOwogICAgIH07Ci0g
ICAgVmVjdG9yPEZpbGVXcml0ZVRhc2s+IGZpbGVXcml0ZVRhc2tzOwotICAgIGZvciAoYXV0byYg
ZmlsZSA6IGZpbGVzKQotICAgICAgICBmaWxlV3JpdGVUYXNrcy5hcHBlbmQoeyBmaWxlLmZpbGVO
YW1lLmlzb2xhdGVkQ29weSgpLCBmaWxlLmZpbGVEYXRhLT5jcmVhdGVOU0RhdGEoKSB9KTsKKyAg
ICBhdXRvIGZpbGVXcml0ZVRhc2tzID0gZmlsZXMubWFwKFtdKGF1dG8mIGZpbGUpIHsKKyAgICAg
ICAgcmV0dXJuIEZpbGVXcml0ZVRhc2sgeyBmaWxlLmZpbGVOYW1lLmlzb2xhdGVkQ29weSgpLCBm
aWxlLmZpbGVEYXRhLT5jcmVhdGVOU0RhdGEoKSB9OworICAgIH0pOwogCiAgICAgYXV0byBxdWV1
ZSA9IFdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LldLU2hhcmVTaGVldC5TaGFy
ZWFibGVGaWxlV3JpdGVyIik7CiAgICAgcXVldWUtPmRpc3BhdGNoKFtzaGFyZURhdGFBcnJheSA9
IFdURk1vdmUoc2hhcmVEYXRhQXJyYXkpLCBmaWxlV3JpdGVUYXNrcyA9IFdURk1vdmUoZmlsZVdy
aXRlVGFza3MpLCB0ZW1wb3JhcnlEaXJlY3RvcnkgPSByZXRhaW5QdHIodGVtcG9yYXJ5RGlyZWN0
b3J5KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBt
dXRhYmxlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBh
Z2VQcm94eUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVBy
b3h5Q29jb2EubW0KaW5kZXggMzlhOGM4N2ExM2Y5MWQ2ZWE4OWIwNzY4NGUwMmM0YWE1ODU3ZjIx
ZC4uNmFlYThkNGM1NTVmN2EzMGEyNzA5M2I2YWEwYjljNDBhMDkzNDQxMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KQEAgLTY2
MiwxNCArNjYyLDEyIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZXN0b3JlQXBwSGlnaGxpZ2h0c0Fu
ZFNjcm9sbFRvSW5kZXgoY29uc3QgVmVjdG9yPFJlZjxTaGFyZWRNCiAgICAgaWYgKCFoYXNSdW5u
aW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8U2hhcmVkTWVtb3J5
OjpJUENIYW5kbGU+IG1lbW9yeUhhbmRsZXM7Ci0KLSAgICBmb3IgKGF1dG8gaGlnaGxpZ2h0IDog
aGlnaGxpZ2h0cykgeworICAgIGF1dG8gbWVtb3J5SGFuZGxlcyA9IFdURjo6Y29tcGFjdE1hcCho
aWdobGlnaHRzLCBbXShhdXRvJiBoaWdobGlnaHQpIC0+IHN0ZDo6b3B0aW9uYWw8U2hhcmVkTWVt
b3J5OjpJUENIYW5kbGU+IHsKICAgICAgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwot
ICAgICAgICBoaWdobGlnaHQtPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJv
dGVjdGlvbjo6UmVhZE9ubHkpOwotCi0gICAgICAgIG1lbW9yeUhhbmRsZXMuYXBwZW5kKFNoYXJl
ZE1lbW9yeTo6SVBDSGFuZGxlIHsgV1RGTW92ZShoYW5kbGUpLCBoaWdobGlnaHQtPnNpemUoKSB9
KTsKLSAgICB9CisgICAgICAgIGlmICghaGlnaGxpZ2h0LT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBT
aGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KSkKKyAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSB7IFdU
Rk1vdmUoaGFuZGxlKSwgaGlnaGxpZ2h0LT5zaXplKCkgfTsKKyAgICB9KTsKICAgICAKICAgICBz
ZXRVcEhpZ2hsaWdodHNPYnNlcnZlcigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9GcmFtZUxvYWRTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9GcmFt
ZUxvYWRTdGF0ZS5jcHAKaW5kZXggYzYxYmVkODFkMDkyODQ2MzJiZjI5NjVlZDJjOTliMGM2ZmU0
MDFhMy4uNjllNTNkN2JlYjg2Y2U2YjQwNmYzY2RiODM5MmFiNzJhM2ZmYzgyNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0ZyYW1lTG9hZFN0YXRlLmNwcApAQCAtOTAsMTEgKzkwLDggQEAg
dm9pZCBGcmFtZUxvYWRTdGF0ZTo6ZGlkRmluaXNoTG9hZCgpCiAKICAgICBtX3N0YXRlID0gU3Rh
dGU6OkZpbmlzaGVkOwogCi0gICAgVmVjdG9yPE9ic2VydmVyKj4gb2JzZXJ2ZXJzQ29weTsKLSAg
ICBmb3IgKGF1dG8mIG9ic2VydmVyIDogbV9vYnNlcnZlcnMpCi0gICAgICAgIG9ic2VydmVyc0Nv
cHkuYXBwZW5kKCZvYnNlcnZlcik7Ci0gICAgZm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVy
c0NvcHkpCi0gICAgICAgIG9ic2VydmVyLT5kaWRGaW5pc2hMb2FkKCk7CisgICAgZm9yIChhdXRv
JiBvYnNlcnZlciA6IGNvcHlUb1ZlY3Rvck9mPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8T2JzZXJ2
ZXI+PihtX29ic2VydmVycykpCisgICAgICAgIG9ic2VydmVyLmdldCgpLmRpZEZpbmlzaExvYWQo
KTsKIH0KIAogdm9pZCBGcmFtZUxvYWRTdGF0ZTo6ZGlkRmFpbExvYWQoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAK
aW5kZXggODMxYjIxYTVmMDNmYTQ2YWI4NDA4MDFhOTQ5MTk2NzM5ZGEwNjdlYi4uOTIyYTBkYjhh
ZWU2ZTAwNGE2M2M1MjMwMDgwZTVjNmNmN2Y2MTM4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBAIC0xODMs
OCArMTgzLDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0
ZXJzVG9OZXdQcm9jZXNzKCkKICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNM
b2NhbCA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2No
ZW1lc1RvUmVnaXN0ZXJBc0xvY2FsKCkpOwogICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lz
dGVyZWRBc05vQWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5n
bGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3MoKSk7CiAgICAgcGFyYW1ldGVycy5j
YWNoZU1vZGVsID0gTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLmNhY2hlTW9kZWwo
KTsKLSAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0
aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKLSAgICAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVz
UmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBlbmQoc2NoZW1lKTsKKyAgICBwYXJhbWV0
ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzID0gV2ViUHJvY2Vzc1Bv
b2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOworCiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKICAgICBpZiAoU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBX
ZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOyAhY29va2llU3RvcmFnZURp
cmVjdG9yeS5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0gU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VE
aXJlY3RvcnkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlckNvbnRl
bnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCmluZGV4
IGZhMjU0YzJkYWRjMDYzMDI4ZGZkNTA0ZDI4OTBhODkyYWVkYWZiMDguLjViYmU3Mzk2MjA1Mjdh
ODI3Y2Q1N2YxNjlhZjJmMGMwYzU5NmE3MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRy
b2xsZXJQcm94eS5jcHAKQEAgLTExNywxMSArMTE3LDExIEBAIFVzZXJDb250ZW50Q29udHJvbGxl
clBhcmFtZXRlcnMgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnBhcmFtZXRlcnMoKSBj
b25zCiAgICAgcGFyYW1ldGVycy5pZGVudGlmaWVyID0gaWRlbnRpZmllcigpOwogICAgIAogICAg
IEFTU0VSVChwYXJhbWV0ZXJzLnVzZXJDb250ZW50V29ybGRzLmlzRW1wdHkoKSk7Ci0gICAgZm9y
IChjb25zdCBhdXRvJiBpZGVudGlmaWVyIDogbV9hc3NvY2lhdGVkQ29udGVudFdvcmxkcykgewor
ICAgIHBhcmFtZXRlcnMudXNlckNvbnRlbnRXb3JsZHMgPSBXVEY6Om1hcChtX2Fzc29jaWF0ZWRD
b250ZW50V29ybGRzLCBbXShhdXRvJiBpZGVudGlmaWVyKSB7CiAgICAgICAgIGF1dG8qIHdvcmxk
ID0gQVBJOjpDb250ZW50V29ybGQ6OndvcmxkRm9ySWRlbnRpZmllcihpZGVudGlmaWVyKTsKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQod29ybGQpOwotICAgICAgICBwYXJhbWV0ZXJzLnVzZXJDb250
ZW50V29ybGRzLmFwcGVuZCh3b3JsZC0+d29ybGREYXRhKCkpOwotICAgIH0KKyAgICAgICAgcmV0
dXJuIHdvcmxkLT53b3JsZERhdGEoKTsKKyAgICB9KTsKIAogICAgIGZvciAoYXV0byB1c2VyU2Ny
aXB0IDogbV91c2VyU2NyaXB0cy0+ZWxlbWVudHNPZlR5cGU8QVBJOjpVc2VyU2NyaXB0PigpKQog
ICAgICAgICBwYXJhbWV0ZXJzLnVzZXJTY3JpcHRzLmFwcGVuZCh7IHVzZXJTY3JpcHQtPmlkZW50
aWZpZXIoKSwgdXNlclNjcmlwdC0+Y29udGVudFdvcmxkKCkuaWRlbnRpZmllcigpLCB1c2VyU2Ny
aXB0LT51c2VyU2NyaXB0KCkgfSk7CkBAIC0xMjksOCArMTI5LDkgQEAgVXNlckNvbnRlbnRDb250
cm9sbGVyUGFyYW1ldGVycyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cGFyYW1ldGVy
cygpIGNvbnMKICAgICBmb3IgKGF1dG8gdXNlclN0eWxlU2hlZXQgOiBtX3VzZXJTdHlsZVNoZWV0
cy0+ZWxlbWVudHNPZlR5cGU8QVBJOjpVc2VyU3R5bGVTaGVldD4oKSkKICAgICAgICAgcGFyYW1l
dGVycy51c2VyU3R5bGVTaGVldHMuYXBwZW5kKHsgdXNlclN0eWxlU2hlZXQtPmlkZW50aWZpZXIo
KSwgdXNlclN0eWxlU2hlZXQtPmNvbnRlbnRXb3JsZCgpLmlkZW50aWZpZXIoKSwgdXNlclN0eWxl
U2hlZXQtPnVzZXJTdHlsZVNoZWV0KCkgfSk7CiAKLSAgICBmb3IgKGF1dG8mIGhhbmRsZXIgOiBt
X3NjcmlwdE1lc3NhZ2VIYW5kbGVycy52YWx1ZXMoKSkKLSAgICAgICAgcGFyYW1ldGVycy5tZXNz
YWdlSGFuZGxlcnMuYXBwZW5kKHsgaGFuZGxlci0+aWRlbnRpZmllcigpLCBoYW5kbGVyLT53b3Js
ZCgpLmlkZW50aWZpZXIoKSwgaGFuZGxlci0+bmFtZSgpIH0pOworICAgIHBhcmFtZXRlcnMubWVz
c2FnZUhhbmRsZXJzID0gV1RGOjptYXAobV9zY3JpcHRNZXNzYWdlSGFuZGxlcnMsIFtdKGF1dG8g
ZW50cnkpIHsKKyAgICAgICAgcmV0dXJuIFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyRGF0YSB7IGVu
dHJ5LnZhbHVlLT5pZGVudGlmaWVyKCksIGVudHJ5LnZhbHVlLT53b3JsZCgpLmlkZW50aWZpZXIo
KSwgZW50cnkudmFsdWUtPm5hbWUoKSB9OworICAgIH0pOwogCiAjaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKICAgICBwYXJhbWV0ZXJzLmNvbnRlbnRSdWxlTGlzdHMgPSBjb250ZW50UnVs
ZUxpc3REYXRhKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHAKaW5kZXggOTM0
ODBlZDVjYjM5YTYxY2JjZjY3MzUxZTBhODgwZWEwOWZlNDQ3Ni4uNjU3MmY1Mzk1OThlZjQxZGQx
MDMwNWFjZWVjOGYxODdkOGQ1MjUyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRvck1hbmFnZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0b3JNYW5hZ2Vy
LmNwcApAQCAtNDE2LDExICs0MTYsMTEgQEAgdm9pZCBBdXRoZW50aWNhdG9yTWFuYWdlcjo6c3Rh
cnREaXNjb3ZlcnkoY29uc3QgVHJhbnNwb3J0U2V0JiB0cmFuc3BvcnRzKQogewogICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgQVNTRVJUKG1fc2VydmljZXMuaXNFbXB0eSgpICYm
IHRyYW5zcG9ydHMuc2l6ZSgpIDw9IG1heFRyYW5zcG9ydE51bWJlcik7Ci0gICAgZm9yIChhdXRv
JiB0cmFuc3BvcnQgOiB0cmFuc3BvcnRzKSB7CisgICAgbV9zZXJ2aWNlcyA9IFdURjo6bWFwKHRy
YW5zcG9ydHMsIFt0aGlzXShhdXRvJiB0cmFuc3BvcnQpIHsKICAgICAgICAgYXV0byBzZXJ2aWNl
ID0gY3JlYXRlU2VydmljZSh0cmFuc3BvcnQsICp0aGlzKTsKICAgICAgICAgc2VydmljZS0+c3Rh
cnREaXNjb3ZlcnkoKTsKLSAgICAgICAgbV9zZXJ2aWNlcy5hcHBlbmQoV1RGTW92ZShzZXJ2aWNl
KSk7Ci0gICAgfQorICAgICAgICByZXR1cm4gc2VydmljZTsKKyAgICB9KTsKIH0KIAogdm9pZCBB
dXRoZW50aWNhdG9yTWFuYWdlcjo6aW5pdFRpbWVPdXRUaW1lcigpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmNwcAppbmRleCBjNzQzNDNlNjViODg5Zjc4
NjlkYzhjY2EzNDA1MWI4YjI2NTQwMmI2Li5kZWM5ZTgzOTIyMzY4ZmU2MTU1ZTAzZDY5YTNmMzdk
OWRiZjAxNzc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJCYWNrRm9y
d2FyZExpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJk
TGlzdC5jcHAKQEAgLTM0MCwxNiArMzQwLDExIEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0Ojpy
ZW1vdmVBbGxJdGVtcygpCiAKICAgICBMT0coQmFja0ZvcndhcmQsICIoQmFjay9Gb3J3YXJkKSBX
ZWJCYWNrRm9yd2FyZExpc3QgJXAgcmVtb3ZlQWxsSXRlbXMgKGhhcyAlenUgb2YgdGhlbSkiLCB0
aGlzLCBtX2VudHJpZXMuc2l6ZSgpKTsKIAotICAgIFZlY3RvcjxSZWY8V2ViQmFja0ZvcndhcmRM
aXN0SXRlbT4+IHJlbW92ZWRJdGVtczsKLQotICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2VudHJp
ZXMpIHsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9lbnRyaWVzKQogICAgICAgICBkaWRSZW1v
dmVJdGVtKGVudHJ5KTsKLSAgICAgICAgcmVtb3ZlZEl0ZW1zLmFwcGVuZChXVEZNb3ZlKGVudHJ5
KSk7Ci0gICAgfQogCi0gICAgbV9lbnRyaWVzLmNsZWFyKCk7CiAgICAgbV9jdXJyZW50SW5kZXgg
PSBzdGQ6Om51bGxvcHQ7Ci0gICAgbV9wYWdlLT5kaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QobnVs
bHB0ciwgV1RGTW92ZShyZW1vdmVkSXRlbXMpKTsKKyAgICBtX3BhZ2UtPmRpZENoYW5nZUJhY2tG
b3J3YXJkTGlzdChudWxscHRyLCBzdGQ6OmV4Y2hhbmdlKG1fZW50cmllcywgeyB9KSk7CiB9CiAK
IHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjpjbGVhcigpCkBAIC0zNjMsMjEgKzM1OCwxNyBAQCB2
b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6Y2xlYXIoKQogICAgICAgICByZXR1cm47CiAKICAgICBS
ZWZQdHI8V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4gY3VycmVudEl0ZW0gPSB0aGlzLT5jdXJyZW50
SXRlbSgpOwotICAgIFZlY3RvcjxSZWY8V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4+IHJlbW92ZWRJ
dGVtczsKIAogICAgIGlmICghY3VycmVudEl0ZW0pIHsKICAgICAgICAgLy8gV2Ugc2hvdWxkIG9u
bHkgZXZlciBoYXZlIG5vIGN1cnJlbnQgaXRlbSBpZiB3ZSBhbHNvIGhhdmUgbm8gY3VycmVudCBp
dGVtIGluZGV4LgogICAgICAgICBBU1NFUlQoIW1fY3VycmVudEluZGV4KTsKIAogICAgICAgICAv
LyBCdXQganVzdCBpbiBjYXNlIGl0IGRvZXMgaGFwcGVuIGluIHByYWN0aWNlIHdlIHNob3VsZCBn
ZXQgYmFjayBpbnRvIGEgY29uc2lzdGVudCBzdGF0ZSBub3cuCi0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBkaWRSZW1vdmVJdGVtKG1fZW50
cmllc1tpXSk7Ci0gICAgICAgICAgICByZW1vdmVkSXRlbXMuYXBwZW5kKFdURk1vdmUobV9lbnRy
aWVzW2ldKSk7Ci0gICAgICAgIH0KKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fZW50cmll
cykKKyAgICAgICAgICAgIGRpZFJlbW92ZUl0ZW0oZW50cnkpOwogCi0gICAgICAgIG1fZW50cmll
cy5jbGVhcigpOwogICAgICAgICBtX2N1cnJlbnRJbmRleCA9IHN0ZDo6bnVsbG9wdDsKLSAgICAg
ICAgbV9wYWdlLT5kaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QobnVsbHB0ciwgV1RGTW92ZShyZW1v
dmVkSXRlbXMpKTsKKyAgICAgICAgbV9wYWdlLT5kaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QobnVs
bHB0ciwgc3RkOjpleGNoYW5nZShtX2VudHJpZXMsIHsgfSkpOwogCiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC0zODcsNiArMzc4LDcgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3Q6OmNsZWFy
KCkKICAgICAgICAgICAgIGRpZFJlbW92ZUl0ZW0obV9lbnRyaWVzW2ldKTsKICAgICB9CiAKKyAg
ICBWZWN0b3I8UmVmPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiByZW1vdmVkSXRlbXM7CiAgICAg
cmVtb3ZlZEl0ZW1zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSAtIDEpOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRl
eCAmJiBpICE9ICptX2N1cnJlbnRJbmRleCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQb29sLmNwcAppbmRleCBmYTE3NDJjZjMyZGE5OTUyNzMyM2RmYzdjOGJmMGE3OTA2MzA0
MWZlLi42MWJkMzBhMzY0MTQ3M2M1ZGIyYzU3NDMwZTkzY2I3ZTI2NjNhZDg5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCkBAIC04NDksMTAgKzg0OSw5IEBA
IHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKFdlYlByb2Nlc3NQ
cm94eSYgcHJvY2VzcywgV2Vic2l0ZURhCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmluamVjdGVk
QnVuZGxlUGF0aEV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmhhbmRsZSk7CiAgICAgfQogCi0g
ICAgZm9yIChhdXRvJiBwYXRoIDogbV9yZXNvbHZlZFBhdGhzLmFkZGl0aW9uYWxXZWJQcm9jZXNz
U2FuZGJveEV4dGVuc2lvblBhdGhzKSB7Ci0gICAgICAgIGlmIChhdXRvIGhhbmRsZSA9ICBTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVXaXRob3V0UmVzb2x2aW5nUGF0aChwYXRoLCBTYW5k
Ym94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25seSkpCi0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFk
ZGl0aW9uYWxTYW5kYm94RXh0ZW5zaW9uSGFuZGxlcy5hcHBlbmQoV1RGTW92ZSgqaGFuZGxlKSk7
Ci0gICAgfQorICAgIHBhcmFtZXRlcnMuYWRkaXRpb25hbFNhbmRib3hFeHRlbnNpb25IYW5kbGVz
ID0gV1RGOjpjb21wYWN0TWFwKG1fcmVzb2x2ZWRQYXRocy5hZGRpdGlvbmFsV2ViUHJvY2Vzc1Nh
bmRib3hFeHRlbnNpb25QYXRocywgW10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlV2l0aG91dFJlc29sdmluZ1BhdGgocGF0aCwgU2Fu
ZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHkpOworICAgIH0pOwogCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICBzZXRKYXZhU2NyaXB0Q29uZmlndXJhdGlvbkZpbGVFbmFibGVkRnJv
bURlZmF1bHRzKCk7CkBAIC0xODcwLDE0ICsxODY5LDkgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
cmVtb3ZlUHJvY2Vzc0Zyb21PcmlnaW5DYWNoZVNldChXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3Mp
CiAgICAgTE9HKFByb2Nlc3NTd2FwcGluZywgIihQcm9jZXNzU3dhcHBpbmcpIFJlbW92aW5nIHBy
b2Nlc3Mgd2l0aCBwaWQgJWkgZnJvbSB0aGUgb3JpZ2luIGNhY2hlIHNldCIsIHByb2Nlc3MucHJv
Y2Vzc0lkZW50aWZpZXIoKSk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgdmVyeSBpbmVm
ZmljaWVudCBhcyB0aGUgbnVtYmVyIG9mIHJlbWVtYmVyZWQgb3JpZ2lucyBhbmQgcHJvY2Vzc2Vz
IGdyb3dzCi0gICAgVmVjdG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiByZWdpc3RyYWJs
ZURvbWFpbnNUb1JlbW92ZTsKLSAgICBmb3IgKGF1dG8gZW50cnkgOiBtX3N3YXBwZWRQcm9jZXNz
ZXNQZXJSZWdpc3RyYWJsZURvbWFpbikgewotICAgICAgICBpZiAoZW50cnkudmFsdWUgPT0gJnBy
b2Nlc3MpCi0gICAgICAgICAgICByZWdpc3RyYWJsZURvbWFpbnNUb1JlbW92ZS5hcHBlbmQoZW50
cnkua2V5KTsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIHJlZ2lzdHJhYmxlRG9tYWluIDogcmVn
aXN0cmFibGVEb21haW5zVG9SZW1vdmUpCi0gICAgICAgIG1fc3dhcHBlZFByb2Nlc3Nlc1BlclJl
Z2lzdHJhYmxlRG9tYWluLnJlbW92ZShyZWdpc3RyYWJsZURvbWFpbik7CisgICAgbV9zd2FwcGVk
UHJvY2Vzc2VzUGVyUmVnaXN0cmFibGVEb21haW4ucmVtb3ZlSWYoWyZdKGF1dG8mIGVudHJ5KSB7
CisgICAgICAgIHJldHVybiBlbnRyeS52YWx1ZSA9PSAmcHJvY2VzczsKKyAgICB9KTsKIH0KIAog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0Zvck5hdmlnYXRpb24oV2ViUGFnZVByb3h5JiBw
YWdlLCBjb25zdCBBUEk6Ok5hdmlnYXRpb24mIG5hdmlnYXRpb24sIFJlZjxXZWJQcm9jZXNzUHJv
eHk+JiYgc291cmNlUHJvY2VzcywgY29uc3QgVVJMJiBzb3VyY2VVUkwsIFByb2Nlc3NTd2FwUmVx
dWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgV2ViUHJvY2Vzc1By
b3h5OjpDYXB0aXZlUG9ydGFsTW9kZSBjYXB0aXZlUG9ydGFsTW9kZSwgY29uc3QgRnJhbWVJbmZv
RGF0YSYgZnJhbWVJbmZvLCBSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJiBkYXRhU3RvcmUsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoUmVmPFdlYlByb2Nlc3NQcm94eT4mJiwgU3VzcGVuZGVkUGFnZVBy
b3h5KiwgY29uc3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAppbmRleCBiMTI4NjBkZjUxMGJjNGUzZGZi
YjdlM2ZjOTIwYjVkMDQyYjg0MzIxLi4zNjhhMzk1ODdkYTMzZGU2NGMxYjg5ZDBlNjM4ZDM4Yjg4
ZDdhMTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAK
QEAgLTkzNiw4ICs5MzYsOSBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6cHJvY2Vzc0RpZFRlcm1p
bmF0ZU9yRmFpbGVkVG9MYXVuY2goUHJvY2Vzc1Rlcm1pbmF0aW9uUmVhcwogCiAgICAgLy8gVGhl
cmUgaXMgYSBuZXN0ZWQgdHJhbnNhY3Rpb24gaW4gV2ViUGFnZVByb3h5OjpyZXNldFN0YXRlQWZ0
ZXJQcm9jZXNzRXhpdGVkKCkgdGhhdCB3ZSBkb24ndCB3YW50IHRvIGNvbW1pdCBiZWZvcmUgdGhl
IGNsaWVudCBjYWxsIGJlbG93IChkaXNwYXRjaFByb2Nlc3NEaWRUZXJtaW5hdGUpLgogICAgIFZl
Y3RvcjxQYWdlTG9hZFN0YXRlOjpUcmFuc2FjdGlvbj4gcGFnZUxvYWRTdGF0ZVRyYW5zYWN0aW9u
czsKKyAgICBwYWdlTG9hZFN0YXRlVHJhbnNhY3Rpb25zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
cGFnZXMuc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIHBhZ2UgOiBwYWdlcykgewotICAgICAgICBw
YWdlTG9hZFN0YXRlVHJhbnNhY3Rpb25zLmFwcGVuZChwYWdlLT5wYWdlTG9hZFN0YXRlKCkudHJh
bnNhY3Rpb24oKSk7CisgICAgICAgIHBhZ2VMb2FkU3RhdGVUcmFuc2FjdGlvbnMudW5jaGVja2Vk
QXBwZW5kKHBhZ2UtPnBhZ2VMb2FkU3RhdGUoKS50cmFuc2FjdGlvbigpKTsKICAgICAgICAgcGFn
ZS0+cmVzZXRTdGF0ZUFmdGVyUHJvY2Vzc1Rlcm1pbmF0aW9uKHJlYXNvbik7CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0
YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVE
YXRhU3RvcmUuY3BwCmluZGV4IGIzNmQ5YTc0YjlhMTc1YTA4MTZiN2EyZTE0ZjEzOWRiNWVmNTZl
NmQuLmRmYTdiMmE0Yzc1OTk5MmJiYzI1YmE2YWI5ZWNiYjBiMjgyYzQ0NzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3Rv
cmUuY3BwCkBAIC00MzEsOCArNDMxLDEwIEBAIHByaXZhdGU6CiAgICAgaWYgKGRhdGFUeXBlcy5j
b250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSkpIHsKICAgICAgICAgbV9xdWV1ZS0+
ZGlzcGF0Y2goW21lZGlhQ2FjaGVEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24tPm1lZGlhQ2Fj
aGVEaXJlY3RvcnkoKS5pc29sYXRlZENvcHkoKSwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7CiAgICAg
ICAgICAgICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsKLSAgICAgICAgICAgIGZvciAoYXV0byYg
b3JpZ2luIDogV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6b3JpZ2luc0luTWVkaWFDYWNoZSht
ZWRpYUNhY2hlRGlyZWN0b3J5KSkKLSAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVz
LmFwcGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6RGlz
a0NhY2hlLCAwIH0pOworICAgICAgICAgICAgYXV0byBvcmlnaW5zID0gV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6b3JpZ2luc0luTWVkaWFDYWNoZShtZWRpYUNhY2hlRGlyZWN0b3J5KTsKKyAg
ICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMgPSBXVEY6Om1hcChvcmlnaW5zLCBbXShhdXRv
JiBvcmlnaW4pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGE6OkVudHJ5IHsg
b3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSwgMCB9OworICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFdlYnNpdGVEYXRhKFdURk1vdmUo
d2Vic2l0ZURhdGEpKTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtNDY5LDggKzQ3MSw5IEBAIHBy
aXZhdGU6CiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRldmlj
ZUlkSGFzaFNhbHQpKSB7CiAgICAgICAgIG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UtPmdldERl
dmljZUlkSGFzaFNhbHRPcmlnaW5zKFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1dG8mJiBvcmlnaW5z
KSB7CiAgICAgICAgICAgICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsKLSAgICAgICAgICAgIHdo
aWxlICghb3JpZ2lucy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50
cmllcy5hcHBlbmQoV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2lucy50YWtlQW55KCksIFdlYnNp
dGVEYXRhVHlwZTo6RGV2aWNlSWRIYXNoU2FsdCwgMCB9KTsKKyAgICAgICAgICAgIHdlYnNpdGVE
YXRhLmVudHJpZXMgPSBXVEY6Om1hcChvcmlnaW5zLCBbXShhdXRvJiBvcmlnaW4pIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0
YVR5cGU6OkRldmljZUlkSGFzaFNhbHQsIDAgfTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRXZWJzaXRlRGF0YShXVEZNb3ZlKHdlYnNpdGVEYXRh
KSk7CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTQ3OSwxMCArNDgyLDExIEBAIHByaXZhdGU6CiAg
ICAgICAgIG1fcXVldWUtPmRpc3BhdGNoKFtmZXRjaE9wdGlvbnMsIGFwcGxpY2F0aW9uQ2FjaGVE
aXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24tPmFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkoKS5p
c29sYXRlZENvcHkoKSwgYXBwbGljYXRpb25DYWNoZUZsYXRGaWxlU3ViZGlyZWN0b3J5TmFtZSA9
IG1fY29uZmlndXJhdGlvbi0+YXBwbGljYXRpb25DYWNoZUZsYXRGaWxlU3ViZGlyZWN0b3J5TmFt
ZSgpLmlzb2xhdGVkQ29weSgpLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKICAgICAgICAgICAgIGF1
dG8gc3RvcmFnZSA9IFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjcmVhdGUoYXBw
bGljYXRpb25DYWNoZURpcmVjdG9yeSwgYXBwbGljYXRpb25DYWNoZUZsYXRGaWxlU3ViZGlyZWN0
b3J5TmFtZSk7CiAgICAgICAgICAgICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsKLSAgICAgICAg
ICAgIGZvciAoYXV0byYgb3JpZ2luIDogc3RvcmFnZS0+b3JpZ2luc1dpdGhDYWNoZSgpKSB7Cisg
ICAgICAgICAgICBhdXRvIG9yaWdpbnMgPSBzdG9yYWdlLT5vcmlnaW5zV2l0aENhY2hlKCk7Cisg
ICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzID0gV1RGOjptYXAob3JpZ2lucywgWyZdKGF1
dG8mIG9yaWdpbikgewogICAgICAgICAgICAgICAgIHVpbnQ2NF90IHNpemUgPSBmZXRjaE9wdGlv
bnMuY29udGFpbnMoV2Vic2l0ZURhdGFGZXRjaE9wdGlvbjo6Q29tcHV0ZVNpemVzKSA/IHN0b3Jh
Z2UtPmRpc2tVc2FnZUZvck9yaWdpbihvcmlnaW4pIDogMDsKLSAgICAgICAgICAgICAgICB3ZWJz
aXRlRGF0YS5lbnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNp
dGVEYXRhVHlwZTo6T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGUsIHNpemUgfSk7Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdp
biwgV2Vic2l0ZURhdGFUeXBlOjpPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZSwgc2l6ZSB9Owor
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFdlYnNp
dGVEYXRhKFdURk1vdmUod2Vic2l0ZURhdGEpKTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtNDkw
LDggKzQ5NCw5IEBAIHByaXZhdGU6CiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRl
RGF0YVR5cGU6OldlYlNRTERhdGFiYXNlcykgJiYgaXNQZXJzaXN0ZW50KCkpIHsKICAgICAgICAg
bV9xdWV1ZS0+ZGlzcGF0Y2goW3dlYlNRTERhdGFiYXNlRGlyZWN0b3J5ID0gbV9jb25maWd1cmF0
aW9uLT53ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSgpLmlzb2xhdGVkQ29weSgpLCBjYWxsYmFja0Fn
Z3JlZ2F0b3JdKCkgewogICAgICAgICAgICAgV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGE7Ci0gICAg
ICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJh
Y2tlcldpdGhEYXRhYmFzZVBhdGgod2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkpLT5vcmlnaW5zKCkp
Ci0gICAgICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmQoV2Vic2l0ZURhdGE6
OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6OldlYlNRTERhdGFiYXNlcywgMCB9KTsK
KyAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMgPSBXZWJDb3JlOjpEYXRhYmFzZVRyYWNr
ZXI6OnRyYWNrZXJXaXRoRGF0YWJhc2VQYXRoKHdlYlNRTERhdGFiYXNlRGlyZWN0b3J5KS0+b3Jp
Z2lucygpLm1hcChbXShhdXRvJiBvcmlnaW4pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV2Vi
c2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6OldlYlNRTERhdGFiYXNl
cywgMCB9OworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3It
PmFkZFdlYnNpdGVEYXRhKFdURk1vdmUod2Vic2l0ZURhdGEpKTsKICAgICAgICAgfSk7CiAgICAg
fQpAQCAtNDk5LDggKzUwNCw5IEBAIHByaXZhdGU6CiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlu
cyhXZWJzaXRlRGF0YVR5cGU6Ok1lZGlhS2V5cykgJiYgaXNQZXJzaXN0ZW50KCkpIHsKICAgICAg
ICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW21lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkgPSBtX2NvbmZp
Z3VyYXRpb24tPm1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoKS5pc29sYXRlZENvcHkoKSwgY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7CiAgICAgICAgICAgICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsK
LSAgICAgICAgICAgIGZvciAoYXV0byYgb3JpZ2luIDogbWVkaWFLZXlPcmlnaW5zKG1lZGlhS2V5
c1N0b3JhZ2VEaXJlY3RvcnkpKQotICAgICAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMu
YXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpNZWRp
YUtleXMsIDAgfSk7CisgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzID0gbWVkaWFLZXlP
cmlnaW5zKG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkpLm1hcChbXShhdXRvJiBvcmlnaW4pIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLCBXZWJz
aXRlRGF0YVR5cGU6Ok1lZGlhS2V5cywgMCB9OworICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFdlYnNpdGVEYXRhKFdURk1vdmUod2Vic2l0ZURhdGEp
KTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtNjY3LDggKzY3Myw5IEBAIHZvaWQgV2Vic2l0ZURh
dGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMs
IGNvbnN0IFZlCiAgICAgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gb3JpZ2lu
czsKIAogICAgIGZvciAoY29uc3QgYXV0byYgZGF0YVJlY29yZCA6IGRhdGFSZWNvcmRzKSB7Cisg
ICAgICAgIG9yaWdpbnMucmVzZXJ2ZUNhcGFjaXR5KG9yaWdpbnMuc2l6ZSgpICsgZGF0YVJlY29y
ZC5vcmlnaW5zLnNpemUoKSk7CiAgICAgICAgIGZvciAoYXV0byYgb3JpZ2luIDogZGF0YVJlY29y
ZC5vcmlnaW5zKQotICAgICAgICAgICAgb3JpZ2lucy5hcHBlbmQob3JpZ2luKTsKKyAgICAgICAg
ICAgIG9yaWdpbnMudW5jaGVja2VkQXBwZW5kKG9yaWdpbik7CiAgICAgfQogCiAgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBSZW1vdmFsQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoKnRo
aXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTcwNywxMyArNzE0LDE2IEBAIHZv
aWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
PiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBIU1RTQ2Fj
aGVIb3N0TmFtZXM7CiAgICAgICAgICAgICBWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4+IHJlZ2lzdHJhYmxlRG9tYWluczsKICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgZGF0
YVJlY29yZCA6IGRhdGFSZWNvcmRzKSB7CisgICAgICAgICAgICAgICAgY29va2llSG9zdE5hbWVz
LnJlc2VydmVDYXBhY2l0eShjb29raWVIb3N0TmFtZXMuc2l6ZSgpICsgZGF0YVJlY29yZC5jb29r
aWVIb3N0TmFtZXMuc2l6ZSgpKTsKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGhvc3ROYW1l
IDogZGF0YVJlY29yZC5jb29raWVIb3N0TmFtZXMpCi0gICAgICAgICAgICAgICAgICAgIGNvb2tp
ZUhvc3ROYW1lcy5hcHBlbmQoaG9zdE5hbWUpOworICAgICAgICAgICAgICAgICAgICBjb29raWVI
b3N0TmFtZXMudW5jaGVja2VkQXBwZW5kKGhvc3ROYW1lKTsKKyAgICAgICAgICAgICAgICBIU1RT
Q2FjaGVIb3N0TmFtZXMucmVzZXJ2ZUNhcGFjaXR5KEhTVFNDYWNoZUhvc3ROYW1lcy5zaXplKCkg
KyBkYXRhUmVjb3JkLkhTVFNDYWNoZUhvc3ROYW1lcy5zaXplKCkpOwogICAgICAgICAgICAgICAg
IGZvciAoYXV0byYgaG9zdE5hbWUgOiBkYXRhUmVjb3JkLkhTVFNDYWNoZUhvc3ROYW1lcykKLSAg
ICAgICAgICAgICAgICAgICAgSFNUU0NhY2hlSG9zdE5hbWVzLmFwcGVuZChob3N0TmFtZSk7Cisg
ICAgICAgICAgICAgICAgICAgIEhTVFNDYWNoZUhvc3ROYW1lcy51bmNoZWNrZWRBcHBlbmQoaG9z
dE5hbWUpOwogI2lmIEVOQUJMRShJTlRFTExJR0VOVF9UUkFDS0lOR19QUkVWRU5USU9OKQorICAg
ICAgICAgICAgICAgIHJlZ2lzdHJhYmxlRG9tYWlucy5yZXNlcnZlQ2FwYWNpdHkocmVnaXN0cmFi
bGVEb21haW5zLnNpemUoKSArIGRhdGFSZWNvcmQucmVzb3VyY2VMb2FkU3RhdGlzdGljc1JlZ2lz
dHJhYmxlRG9tYWlucy5zaXplKCkpOwogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgcmVnaXN0
cmFibGVEb21haW4gOiBkYXRhUmVjb3JkLnJlc291cmNlTG9hZFN0YXRpc3RpY3NSZWdpc3RyYWJs
ZURvbWFpbnMpCi0gICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhYmxlRG9tYWlucy5hcHBlbmQo
cmVnaXN0cmFibGVEb21haW4pOworICAgICAgICAgICAgICAgICAgICByZWdpc3RyYWJsZURvbWFp
bnMudW5jaGVja2VkQXBwZW5kKHJlZ2lzdHJhYmxlRG9tYWluKTsKICNlbmRpZgogICAgICAgICAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvVGV4dENoZWNr
ZXJJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvVGV4dENoZWNrZXJJT1MubW0K
aW5kZXggZmEzYmM1MGIyNGZhZjJlZTVmZWU3NDZkMmJlYzgwNGFhNGFmYjcyYy4uODU3NTljMWE0
MWQ0MjI0YTdmZGZhYmQ5OTE1MWI2MDY4OWMwODA5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1RleHRDaGVja2VySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbQpAQCAtMzQsNiArMzQsNyBAQAogI2ltcG9ydCA8
d3RmL0hhc2hNYXAuaD4KICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1w
b3J0IDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMjQw
LDEyICsyNDEsMTMgQEAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNo
ZWNrVGV4dE9mUGFyYWdyYXBoKFNwZWxsRG9jdW1lbnRUYWcgc3AKICAgICAgICAgICAgICAgICBU
ZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAgICAgICAgIHJlc3VsdC50eXBlID0g
VGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmc7CiAgICAgICAgICAgICAgICAgcmVzdWx0LnJhbmdl
ID0gcmVzdWx0UmFuZ2U7Ci0gICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsK
KyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAg
ICAgICAgfSBlbHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZUdyYW1tYXIg
JiYgY2hlY2tpbmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKSkgewog
ICAgICAgICAgICAgICAgIFRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICAg
ICAgTlNBcnJheSAqZGV0YWlscyA9IFtpbmNvbWluZ1Jlc3VsdCBncmFtbWFyRGV0YWlsc107CiAg
ICAgICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyOwog
ICAgICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJhbmdlOworICAgICAgICAgICAg
ICAgIHJlc3VsdC5kZXRhaWxzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGV0YWlscy5jb3VudCk7
CiAgICAgICAgICAgICAgICAgZm9yIChOU0RpY3Rpb25hcnkgKmluY29taW5nRGV0YWlsIGluIGRl
dGFpbHMpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGluY29taW5nRGV0YWlsKTsKICAg
ICAgICAgICAgICAgICAgICAgR3JhbW1hckRldGFpbCBkZXRhaWw7CkBAIC0yNjAsMTIgKzI2Miwx
MCBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQ
YXJhZ3JhcGgoU3BlbGxEb2N1bWVudFRhZyBzcAogICAgICAgICAgICAgICAgICAgICBkZXRhaWwu
cmFuZ2UgPSBkZXRhaWxOU1JhbmdlOwogICAgICAgICAgICAgICAgICAgICBkZXRhaWwudXNlckRl
c2NyaXB0aW9uID0gW2luY29taW5nRGV0YWlsIG9iamVjdEZvcktleTpAIk5TR3JhbW1hclVzZXJE
ZXNjcmlwdGlvbiJdOwogICAgICAgICAgICAgICAgICAgICBOU0FycmF5ICpndWVzc2VzID0gW2lu
Y29taW5nRGV0YWlsIG9iamVjdEZvcktleTpAIk5TR3JhbW1hckNvcnJlY3Rpb25zIl07Ci0gICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBmb3IgKE5TU3RyaW5nICpndWVz
cyBpbiBndWVzc2VzKQotICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsLmd1ZXNzZXMuYXBw
ZW5kKGd1ZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmRldGFpbHMuYXBwZW5kKGRl
dGFpbCk7CisgICAgICAgICAgICAgICAgICAgIGRldGFpbC5ndWVzc2VzID0gbWFrZVZlY3RvcjxT
dHJpbmc+KGd1ZXNzZXMpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuZGV0YWlscy51bmNo
ZWNrZWRBcHBlbmQoZGV0YWlsKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
cmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChX
VEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFzc2lz
dGFudC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0
YW50Lm1tCmluZGV4IGM5YWUxYTY2Nzc3MWIyNjEwOTU4NTRlYWU1OWUyODVhYjc1MmY2N2IuLjQ1
ZGQyZTEzNGM0ZDg3OGY2NWIxNmY5ZGY0NGQ2MTQwMTM1OWZiYjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0YW50Lm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0YW50Lm1tCkBAIC0y
MDcsMTIgKzIwNywxMSBAQCAtIChDR1JlY3QpcHJlc2VudGF0aW9uUmVjdEZvckVsZW1lbnRVc2lu
Z0Nsb3Nlc3RJbmRpY2F0ZWRSZWN0CiAKICAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHRvdWNoTG9j
YXRpb24gPSBfcG9zaXRpb25JbmZvcm1hdGlvbi0+cmVxdWVzdC5wb2ludDsKICAgICBXZWJDb3Jl
OjpGbG9hdFBvaW50IGxpbmtFbGVtZW50TG9jYXRpb24gPSBpbmRpY2F0b3IudGV4dEJvdW5kaW5n
UmVjdEluUm9vdFZpZXdDb29yZGluYXRlcy5sb2NhdGlvbigpOwotICAgIFZlY3RvcjxXZWJDb3Jl
OjpGbG9hdFJlY3Q+IGluZGljYXRlZFJlY3RzOwotICAgIGZvciAoYXV0byByZWN0IDogaW5kaWNh
dG9yLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMpIHsKKyAgICBhdXRvIGluZGlj
YXRlZFJlY3RzID0gaW5kaWNhdG9yLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMu
bWFwKFsmXShhdXRvIHJlY3QpIHsKICAgICAgICAgcmVjdC5pbmZsYXRlKDIpOwogICAgICAgICBy
ZWN0Lm1vdmVCeShsaW5rRWxlbWVudExvY2F0aW9uKTsKLSAgICAgICAgaW5kaWNhdGVkUmVjdHMu
YXBwZW5kKHJlY3QpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIHJlY3Q7CisgICAgfSk7CiAKICAg
ICBmb3IgKGNvbnN0IGF1dG8mIHBhdGggOiBXZWJDb3JlOjpQYXRoVXRpbGl0aWVzOjpwYXRoc1dp
dGhTaHJpbmtXcmFwcGVkUmVjdHMoaW5kaWNhdGVkUmVjdHMsIDApKSB7CiAgICAgICAgIGF1dG8g
Ym91bmRpbmdSZWN0ID0gcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0gYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0KaW5kZXggMTZkNjgzOGU1NDhlMDQzMmZi
ZDE4ZjhkNGQyYWRlMWMyYzEwOGY2ZS4uZWNlMmUzZTI0NTMxNWVlNzFhZDk3OTdmYTZjYzgwYjQy
OTMzMGQxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1RleHRDaGVj
a2VyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1h
Yy5tbQpAQCAtMzQ0LDEyICszNDQsMTMgQEAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4
dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFNwZWxsRG9jdW1lbnRUYWcgc3AKICAgICAg
ICAgICAgIFRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICByZXN1bHQudHlw
ZSA9IFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdl
ID0gcmVzdWx0UmFuZ2U7Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAg
ICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgfSBlbHNl
IGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZUdyYW1tYXIgJiYgY2hlY2tpbmdU
eXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKSkgewogICAgICAgICAgICAg
VGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgIE5TQXJyYXkgKmRldGFpbHMg
PSBbaW5jb21pbmdSZXN1bHQgZ3JhbW1hckRldGFpbHNdOwogICAgICAgICAgICAgcmVzdWx0LnR5
cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdl
ID0gcmVzdWx0UmFuZ2U7CisgICAgICAgICAgICByZXN1bHQuZGV0YWlscy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGRldGFpbHMuY291bnQpOwogICAgICAgICAgICAgZm9yIChOU0RpY3Rpb25hcnkg
KmluY29taW5nRGV0YWlsIGluIGRldGFpbHMpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoaW5j
b21pbmdEZXRhaWwpOwogICAgICAgICAgICAgICAgIEdyYW1tYXJEZXRhaWwgZGV0YWlsOwpAQCAt
MzYxLDkgKzM2Miw4IEBAIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpj
aGVja1RleHRPZlBhcmFncmFwaChTcGVsbERvY3VtZW50VGFnIHNwCiAgICAgICAgICAgICAgICAg
ZGV0YWlsLnJhbmdlID0gZGV0YWlsTlNSYW5nZTsKICAgICAgICAgICAgICAgICBkZXRhaWwudXNl
ckRlc2NyaXB0aW9uID0gW2luY29taW5nRGV0YWlsIG9iamVjdEZvcktleTpOU0dyYW1tYXJVc2Vy
RGVzY3JpcHRpb25dOwogICAgICAgICAgICAgICAgIE5TQXJyYXkgKmd1ZXNzZXMgPSBbaW5jb21p
bmdEZXRhaWwgb2JqZWN0Rm9yS2V5Ok5TR3JhbW1hckNvcnJlY3Rpb25zXTsKLSAgICAgICAgICAg
ICAgICBmb3IgKE5TU3RyaW5nICpndWVzcyBpbiBndWVzc2VzKQotICAgICAgICAgICAgICAgICAg
ICBkZXRhaWwuZ3Vlc3Nlcy5hcHBlbmQoU3RyaW5nKGd1ZXNzKSk7Ci0gICAgICAgICAgICAgICAg
cmVzdWx0LmRldGFpbHMuYXBwZW5kKGRldGFpbCk7CisgICAgICAgICAgICAgICAgZGV0YWlsLmd1
ZXNzZXMgPSBtYWtlVmVjdG9yPFN0cmluZz4oZ3Vlc3Nlcyk7CisgICAgICAgICAgICAgICAgcmVz
dWx0LmRldGFpbHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZGV0YWlsKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOwogICAgICAgICB9IGVsc2Ug
aWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlTGluayAmJiBjaGVja2luZ1R5cGVz
LmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkxpbmspKSB7CkBAIC0zNzEsMzEgKzM3MSwzMSBA
QCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoU3BlbGxEb2N1bWVudFRhZyBzcAogICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0
Q2hlY2tpbmdUeXBlOjpMaW5rOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFu
Z2U7CiAgICAgICAgICAgICByZXN1bHQucmVwbGFjZW1lbnQgPSBbW2luY29taW5nUmVzdWx0IFVS
TF0gYWJzb2x1dGVTdHJpbmddOwotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsK
KyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgIH0g
ZWxzZSBpZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVRdW90ZSAmJiBjaGVja2lu
Z1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlF1b3RlKSkgewogICAgICAgICAgICAg
VGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgIHJlc3VsdC50eXBlID0gVGV4
dENoZWNraW5nVHlwZTo6UXVvdGU7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRS
YW5nZTsKICAgICAgICAgICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IFtpbmNvbWluZ1Jlc3VsdCBy
ZXBsYWNlbWVudFN0cmluZ107Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOwor
ICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgfSBl
bHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZURhc2ggJiYgY2hlY2tpbmdU
eXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpEYXNoKSkgewogICAgICAgICAgICAgVGV4
dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgIHJlc3VsdC50eXBlID0gVGV4dENo
ZWNraW5nVHlwZTo6RGFzaDsKICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJhbmdl
OwogICAgICAgICAgICAgcmVzdWx0LnJlcGxhY2VtZW50ID0gW2luY29taW5nUmVzdWx0IHJlcGxh
Y2VtZW50U3RyaW5nXTsKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7CisgICAg
ICAgICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICB9IGVsc2Ug
aWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlUmVwbGFjZW1lbnQgJiYgY2hlY2tp
bmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCkpIHsKICAgICAg
ICAgICAgIFRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICByZXN1bHQudHlw
ZSA9IFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50OwogICAgICAgICAgICAgcmVzdWx0LnJh
bmdlID0gcmVzdWx0UmFuZ2U7CiAgICAgICAgICAgICByZXN1bHQucmVwbGFjZW1lbnQgPSBbaW5j
b21pbmdSZXN1bHQgcmVwbGFjZW1lbnRTdHJpbmddOwotICAgICAgICAgICAgcmVzdWx0cy5hcHBl
bmQocmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7
CiAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVDb3Jy
ZWN0aW9uICYmIGNoZWNraW5nVHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6Q29ycmVj
dGlvbikpIHsKICAgICAgICAgICAgIFRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgICAg
ICAgICByZXN1bHQudHlwZSA9IFRleHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rpb247CiAgICAgICAg
ICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5nZTsKICAgICAgICAgICAgIHJlc3VsdC5yZXBs
YWNlbWVudCA9IFtpbmNvbWluZ1Jlc3VsdCByZXBsYWNlbWVudFN0cmluZ107Ci0gICAgICAgICAg
ICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RG
TW92ZShyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yLmNwcApp
bmRleCA3MzU3NmEyNDdjZTExNzUyNzU2NWZiMWQyNmI0Y2QwOWIyNDcyZTlmLi4xMjdhYzFlNDU3
NzE1YmY3ZGZiMGU5YzkzYTEwNDIwYjRmNWMzNTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yLmNwcApA
QCAtOTgsOSArOTgsOSBAQCB2b2lkIFdlYlBheW1lbnRDb29yZGluYXRvcjo6b3BlblBheW1lbnRT
ZXR1cChjb25zdCBTdHJpbmcmIG1lcmNoYW50SWRlbnRpZmllciwgYwogCiBib29sIFdlYlBheW1l
bnRDb29yZGluYXRvcjo6c2hvd1BheW1lbnRVSShjb25zdCBVUkwmIG9yaWdpbmF0aW5nVVJMLCBj
b25zdCBWZWN0b3I8VVJMPiYgbGlua0ljb25VUkxzLCBjb25zdCBXZWJDb3JlOjpBcHBsZVBheVNl
c3Npb25QYXltZW50UmVxdWVzdCYgcGF5bWVudFJlcXVlc3QpCiB7Ci0gICAgVmVjdG9yPFN0cmlu
Zz4gbGlua0ljb25VUkxTdHJpbmdzOwotICAgIGZvciAoY29uc3QgYXV0byYgbGlua0ljb25VUkwg
OiBsaW5rSWNvblVSTHMpCi0gICAgICAgIGxpbmtJY29uVVJMU3RyaW5ncy5hcHBlbmQobGlua0lj
b25VUkwuc3RyaW5nKCkpOworICAgIGF1dG8gbGlua0ljb25VUkxTdHJpbmdzID0gbGlua0ljb25V
UkxzLm1hcChbXShhdXRvJiBsaW5rSWNvblVSTCkgeworICAgICAgICByZXR1cm4gbGlua0ljb25V
Ukwuc3RyaW5nKCk7CisgICAgfSk7CiAKICAgICBib29sIHJlc3VsdDsKICAgICBpZiAoIXNlbmRT
eW5jKE1lc3NhZ2VzOjpXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTo6U2hvd1BheW1lbnRVSSht
X3dlYlBhZ2UuaWRlbnRpZmllcigpLCBtX3dlYlBhZ2Uud2ViUGFnZVByb3h5SWRlbnRpZmllcigp
LCBvcmlnaW5hdGluZ1VSTC5zdHJpbmcoKSwgbGlua0ljb25VUkxTdHJpbmdzLCBwYXltZW50UmVx
dWVzdCksIE1lc3NhZ2VzOjpXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTo6U2hvd1BheW1lbnRV
STo6UmVwbHkocmVzdWx0KSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
QXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwCmluZGV4
IGIwZmU4MzU3MjIzYjMxMzNmYzRkYjJmYmFhZDhlNzM5ZjVlM2I5ZDYuLmY0NWNmYjQxOTEzNmI3
Y2YwOGUzYmZkNDk2YjJiNjk3YTNjOWVmZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJv
eHkuY3BwCkBAIC04MDUsMTMgKzgwNSwxMiBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uUHJv
eHk6OnNldEZpbGVzRm9ySW5wdXRGaWxlVXBsb2FkKFdlYkNvcmU6OlBhZ2VJZGVudGlmaQogICAg
IGF1dG8mIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ+
KCpjb3JlRWxlbWVudCk7CiAgICAgVmVjdG9yPFJlZjxXZWJDb3JlOjpGaWxlPj4gZmlsZU9iamVj
dHM7CiAgICAgaWYgKGlucHV0RWxlbWVudC5tdWx0aXBsZSgpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBmaWxlcyA9IGlucHV0RWxlbWVudC5maWxlcygpKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8m
IGZpbGUgOiBmaWxlcy0+ZmlsZXMoKSkKLSAgICAgICAgICAgICAgICBmaWxlT2JqZWN0cy5hcHBl
bmQoZmlsZS5jb3B5UmVmKCkpOwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRvKiBmaWxlcyA9
IGlucHV0RWxlbWVudC5maWxlcygpKQorICAgICAgICAgICAgZmlsZU9iamVjdHMuYXBwZW5kVmVj
dG9yKGZpbGVzLT5maWxlcygpKTsKICAgICB9CisgICAgZmlsZU9iamVjdHMucmVzZXJ2ZUNhcGFj
aXR5KGZpbGVPYmplY3RzLnNpemUoKSArIGZpbGVuYW1lcy5zaXplKCkpOwogICAgIGZvciAoY29u
c3QgYXV0byYgcGF0aCA6IGZpbGVuYW1lcykKLSAgICAgICAgZmlsZU9iamVjdHMuYXBwZW5kKFdl
YkNvcmU6OkZpbGU6OmNyZWF0ZSgmaW5wdXRFbGVtZW50LmRvY3VtZW50KCksIHBhdGgpKTsKKyAg
ICAgICAgZmlsZU9iamVjdHMudW5jaGVja2VkQXBwZW5kKFdlYkNvcmU6OkZpbGU6OmNyZWF0ZSgm
aW5wdXRFbGVtZW50LmRvY3VtZW50KCksIHBhdGgpKTsKICAgICBpbnB1dEVsZW1lbnQuc2V0Rmls
ZXMoV2ViQ29yZTo6RmlsZUxpc3Q6OmNyZWF0ZShXVEZNb3ZlKGZpbGVPYmplY3RzKSkpOwogCiAg
ICAgY29tcGxldGlvbkhhbmRsZXIoc3RkOjpudWxsb3B0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyLmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5h
Z2VyLmNwcAppbmRleCA3YzlkNDU2OWE0ZTUwYjA3MTNhNzdhOGI0YWMyNDBmYWU0NmRkZDFlLi44
MTNhZjI4NTk4M2NiODJjMzBmMjRlMjUzNzE1NWM3ZjBmM2I2MTI5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlci5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBs
YXllck1hbmFnZXIuY3BwCkBAIC0xNjAsOCArMTYwLDkgQEAgc3RkOjp1bmlxdWVfcHRyPE1lZGlh
UGxheWVyUHJpdmF0ZUludGVyZmFjZT4gUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyOjpjcmVhdGVS
ZW0KICAgICBwcm94eUNvbmZpZ3VyYXRpb24uaXNWaWRlbyA9IHBsYXllci0+aXNWaWRlb1BsYXll
cigpOwogCiAjaWYgRU5BQkxFKEFWRl9DQVBUSU9OUykKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHRy
YWNrIDogcGxheWVyLT5vdXRPZkJhbmRUcmFja1NvdXJjZXMoKSkKLSAgICAgICAgcHJveHlDb25m
aWd1cmF0aW9uLm91dE9mQmFuZFRyYWNrRGF0YS5hcHBlbmQodHJhY2stPmRhdGEoKSk7CisgICAg
cHJveHlDb25maWd1cmF0aW9uLm91dE9mQmFuZFRyYWNrRGF0YSA9IHBsYXllci0+b3V0T2ZCYW5k
VHJhY2tTb3VyY2VzKCkubWFwKFtdKGF1dG8mIHRyYWNrKSB7CisgICAgICAgIHJldHVybiB0cmFj
ay0+ZGF0YSgpOworICAgIH0pOwogI2VuZGlmCiAKICAgICBhdXRvIGRvY3VtZW50U2VjdXJpdHlP
cmlnaW4gPSBwbGF5ZXItPmRvY3VtZW50U2VjdXJpdHlPcmlnaW4oKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvU291cmNlQnVmZmVyUHJpdmF0ZVJlbW90
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1NvdXJjZUJ1ZmZlclBy
aXZhdGVSZW1vdGUuY3BwCmluZGV4IDk2NmZjOTNiNzdhZmFhM2U2MjA4ZDdhYmE1YWVkMmM3YTk0
Yzc0YjIuLjRlZjE2NDBhNDAxMDA2YTZiOGY2OWNjNTAxMTY0YThiZDE5MGViOTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvU291cmNlQnVmZmVyUHJpdmF0
ZVJlbW90ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9Tb3Vy
Y2VCdWZmZXJQcml2YXRlUmVtb3RlLmNwcApAQCAtMzM4LDE2ICszMzgsMTEgQEAgdm9pZCBTb3Vy
Y2VCdWZmZXJQcml2YXRlUmVtb3RlOjp1cGRhdGVUcmFja0lkcyhWZWN0b3I8c3RkOjpwYWlyPEF0
b21TdHJpbmcsIEF0b20KICAgICBpZiAoIW1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24pCiAgICAgICAg
IHJldHVybjsKIAotICAgIFZlY3RvcjxzdGQ6OnBhaXI8VHJhY2tQcml2YXRlUmVtb3RlSWRlbnRp
ZmllciwgVHJhY2tQcml2YXRlUmVtb3RlSWRlbnRpZmllcj4+IGlkZW50aWZpZXJQYWlyczsKLQot
ICAgIGZvciAoYXV0byYgdHJhY2tJZFBhaXIgOiB0cmFja0lkUGFpcnMpIHsKKyAgICBhdXRvIGlk
ZW50aWZpZXJQYWlycyA9IHRyYWNrSWRQYWlycy5tYXAoW3RoaXNdKGF1dG8mIHRyYWNrSWRQYWly
KSB7CiAgICAgICAgIEFTU0VSVChtX3ByZXZUcmFja0lkZW50aWZpZXJNYXAuY29udGFpbnModHJh
Y2tJZFBhaXIuZmlyc3QpKTsKICAgICAgICAgQVNTRVJUKG1fdHJhY2tJZGVudGlmaWVyTWFwLmNv
bnRhaW5zKHRyYWNrSWRQYWlyLnNlY29uZCkpOwotCi0gICAgICAgIGF1dG8gb2xkSWRlbnRpZmll
ciA9IG1fcHJldlRyYWNrSWRlbnRpZmllck1hcC50YWtlKHRyYWNrSWRQYWlyLmZpcnN0KTsKLSAg
ICAgICAgYXV0byBuZXdJZGVudGlmaWVyID0gbV90cmFja0lkZW50aWZpZXJNYXAuZ2V0KHRyYWNr
SWRQYWlyLnNlY29uZCk7Ci0gICAgICAgIGlkZW50aWZpZXJQYWlycy5hcHBlbmQoc3RkOjptYWtl
X3BhaXIob2xkSWRlbnRpZmllciwgbmV3SWRlbnRpZmllcikpOwotICAgIH0KKyAgICAgICAgcmV0
dXJuIHN0ZDo6cGFpciB7IG1fcHJldlRyYWNrSWRlbnRpZmllck1hcC50YWtlKHRyYWNrSWRQYWly
LmZpcnN0KSwgbV90cmFja0lkZW50aWZpZXJNYXAuZ2V0KHRyYWNrSWRQYWlyLnNlY29uZCkgfTsK
KyAgICB9KTsKIAogICAgIG1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS5zZW5k
KE1lc3NhZ2VzOjpSZW1vdGVTb3VyY2VCdWZmZXJQcm94eTo6VXBkYXRlVHJhY2tJZHMoaWRlbnRp
ZmllclBhaXJzKSwgbV9yZW1vdGVTb3VyY2VCdWZmZXJJZGVudGlmaWVyKTsKIH0KQEAgLTM4Mywy
NyArMzc4LDMwIEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZTo6c291cmNlQnVmZmVy
UHJpdmF0ZURpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lCiAgICAgc2VnbWVudC5kdXJhdGlv
biA9IHNlZ21lbnRJbmZvLmR1cmF0aW9uOwogCiAgICAgbV9wcmV2VHJhY2tJZGVudGlmaWVyTWFw
LnN3YXAobV90cmFja0lkZW50aWZpZXJNYXApOworICAgIHNlZ21lbnQuYXVkaW9UcmFja3MucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShzZWdtZW50SW5mby5hdWRpb1RyYWNrcy5zaXplKCkpOwogICAg
IGZvciAoYXV0byYgYXVkaW9UcmFjayA6IHNlZ21lbnRJbmZvLmF1ZGlvVHJhY2tzKSB7CiAgICAg
ICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudDo6QXVk
aW9UcmFja0luZm9ybWF0aW9uIGluZm87CiAgICAgICAgIGluZm8udHJhY2sgPSBtX21lZGlhUGxh
eWVyUHJpdmF0ZS0+YXVkaW9UcmFja1ByaXZhdGVSZW1vdGUoYXVkaW9UcmFjay5pZGVudGlmaWVy
KTsKICAgICAgICAgaW5mby5kZXNjcmlwdGlvbiA9IFJlbW90ZU1lZGlhRGVzY3JpcHRpb246OmNy
ZWF0ZShhdWRpb1RyYWNrLmRlc2NyaXB0aW9uKTsKLSAgICAgICAgc2VnbWVudC5hdWRpb1RyYWNr
cy5hcHBlbmQoaW5mbyk7CisgICAgICAgIHNlZ21lbnQuYXVkaW9UcmFja3MudW5jaGVja2VkQXBw
ZW5kKGluZm8pOwogICAgICAgICBtX3RyYWNrSWRlbnRpZmllck1hcC5hZGQoaW5mby50cmFjay0+
aWQoKSwgYXVkaW9UcmFjay5pZGVudGlmaWVyKTsKICAgICB9CiAKKyAgICBzZWdtZW50LnZpZGVv
VHJhY2tzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2VnbWVudEluZm8udmlkZW9UcmFja3Muc2l6
ZSgpKTsKICAgICBmb3IgKGF1dG8mIHZpZGVvVHJhY2sgOiBzZWdtZW50SW5mby52aWRlb1RyYWNr
cykgewogICAgICAgICBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNl
Z21lbnQ6OlZpZGVvVHJhY2tJbmZvcm1hdGlvbiBpbmZvOwogICAgICAgICBpbmZvLnRyYWNrID0g
bV9tZWRpYVBsYXllclByaXZhdGUtPnZpZGVvVHJhY2tQcml2YXRlUmVtb3RlKHZpZGVvVHJhY2su
aWRlbnRpZmllcik7CiAgICAgICAgIGluZm8uZGVzY3JpcHRpb24gPSBSZW1vdGVNZWRpYURlc2Ny
aXB0aW9uOjpjcmVhdGUodmlkZW9UcmFjay5kZXNjcmlwdGlvbik7Ci0gICAgICAgIHNlZ21lbnQu
dmlkZW9UcmFja3MuYXBwZW5kKGluZm8pOworICAgICAgICBzZWdtZW50LnZpZGVvVHJhY2tzLnVu
Y2hlY2tlZEFwcGVuZChpbmZvKTsKICAgICAgICAgbV90cmFja0lkZW50aWZpZXJNYXAuYWRkKGlu
Zm8udHJhY2stPmlkKCksIHZpZGVvVHJhY2suaWRlbnRpZmllcik7CiAgICAgfQogCisgICAgc2Vn
bWVudC50ZXh0VHJhY2tzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2VnbWVudEluZm8udGV4dFRy
YWNrcy5zaXplKCkpOwogICAgIGZvciAoYXV0byYgdGV4dFRyYWNrIDogc2VnbWVudEluZm8udGV4
dFRyYWNrcykgewogICAgICAgICBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXph
dGlvblNlZ21lbnQ6OlRleHRUcmFja0luZm9ybWF0aW9uIGluZm87CiAgICAgICAgIGluZm8udHJh
Y2sgPSBtX21lZGlhUGxheWVyUHJpdmF0ZS0+dGV4dFRyYWNrUHJpdmF0ZVJlbW90ZSh0ZXh0VHJh
Y2suaWRlbnRpZmllcik7CiAgICAgICAgIGluZm8uZGVzY3JpcHRpb24gPSBSZW1vdGVNZWRpYURl
c2NyaXB0aW9uOjpjcmVhdGUodGV4dFRyYWNrLmRlc2NyaXB0aW9uKTsKLSAgICAgICAgc2VnbWVu
dC50ZXh0VHJhY2tzLmFwcGVuZChpbmZvKTsKKyAgICAgICAgc2VnbWVudC50ZXh0VHJhY2tzLnVu
Y2hlY2tlZEFwcGVuZChpbmZvKTsKICAgICAgICAgbV90cmFja0lkZW50aWZpZXJNYXAuYWRkKGlu
Zm8udHJhY2stPmlkKCksIHRleHRUcmFjay5pZGVudGlmaWVyKTsKICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3Mu
Y3BwCmluZGV4IGQwNzBjMmI3OWRmNDBjYWNiNDE4ZjA2NzgyNjdlNGMzYjRhNTQ2MWMuLjFjMjI3
MzQzMjU0NWFiZjNjOTA2Yjg1ZGMxN2Q5Yjk5ZDRlMWY3YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcApAQCAt
MzkyLDkgKzM5Miw5IEBAIExpYldlYlJUQ0NvZGVjczo6RW5jb2RlciogTGliV2ViUlRDQ29kZWNz
OjpjcmVhdGVFbmNvZGVyKFR5cGUgdHlwZSwgY29uc3Qgc3RkOjptCiAgICAgZW5jb2Rlci0+aWRl
bnRpZmllciA9IFJUQ0VuY29kZXJJZGVudGlmaWVyOjpnZW5lcmF0ZVRocmVhZFNhZmUoKTsKICAg
ICBlbmNvZGVyLT5jb2RlY1R5cGUgPSB0b1dlYlJUQ0NvZGVjVHlwZSh0eXBlKTsKIAotICAgIFZl
Y3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiBwYXJhbWV0ZXJzOwotICAgIGZvciAoYXV0
byYga2V5VmFsdWUgOiBmb3JtYXRQYXJhbWV0ZXJzKQotICAgICAgICBwYXJhbWV0ZXJzLmFwcGVu
ZChzdGQ6Om1ha2VfcGFpcihTdHJpbmc6OmZyb21VVEY4KGtleVZhbHVlLmZpcnN0LmRhdGEoKSwg
a2V5VmFsdWUuZmlyc3QubGVuZ3RoKCkpLCBTdHJpbmc6OmZyb21VVEY4KGtleVZhbHVlLnNlY29u
ZC5kYXRhKCksIGtleVZhbHVlLnNlY29uZC5sZW5ndGgoKSkpKTsKKyAgICBhdXRvIHBhcmFtZXRl
cnMgPSBXVEY6Om1hcChmb3JtYXRQYXJhbWV0ZXJzLCBbXShhdXRvJiBlbnRyeSkgeworICAgICAg
ICByZXR1cm4gc3RkOjpwYWlyIHsgU3RyaW5nOjpmcm9tVVRGOChlbnRyeS5maXJzdC5kYXRhKCks
IGVudHJ5LmZpcnN0Lmxlbmd0aCgpKSwgU3RyaW5nOjpmcm9tVVRGOChlbnRyeS5zZWNvbmQuZGF0
YSgpLCBlbnRyeS5zZWNvbmQubGVuZ3RoKCkpIH07CisgICAgfSk7CiAKICAgICBlbnN1cmVHUFVQ
cm9jZXNzQ29ubmVjdGlvbkFuZERpc3BhdGNoVG9UaHJlYWQoW3RoaXMsIGVuY29kZXIgPSBXVEZN
b3ZlKGVuY29kZXIpLCB0eXBlLCBwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKV0oKSBt
dXRhYmxlIHsKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXku
Y3BwCmluZGV4IGQ4NTQyYTJiMTBiMWIzZTE1MzYxNDE1NDExNWVmN2VjZWM0NGViODguLjZmOGY3
NDUzNTkyNDUzZTBlNjE4Njc2MTI0NGUwYjc3OTIyMWRlNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2Mv
V0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAKQEAgLTE5NywxMSArMTk3LDEzIEBAIHByaXZhdGU6CiAg
ICAgICAgIGF1dG8gd2tOYW1lcyA9IG1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5jb3B5
QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKHRvQVBJKCZwYWdlT3ZlcmxheSksIHBhcmFtZXJp
emVkTmFtZXMsIG1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5iYXNlLmNsaWVudEluZm8p
OwogCiAgICAgICAgIHNpemVfdCBjb3VudCA9IFdLQXJyYXlHZXRTaXplKHdrTmFtZXMpOworICAg
ICAgICBuYW1lcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNvdW50KTsKICAgICAgICAgZm9yIChz
aXplX3QgayA9IDA7IGsgPCBjb3VudDsgaysrKSB7CiAgICAgICAgICAgICBXS1R5cGVSZWYgaXRl
bSA9IFdLQXJyYXlHZXRJdGVtQXRJbmRleCh3a05hbWVzLCBrKTsKICAgICAgICAgICAgIGlmIChX
ZWJLaXQ6OnRvSW1wbChpdGVtKS0+dHlwZSgpID09IEFQSTo6U3RyaW5nOjpBUElUeXBlKQotICAg
ICAgICAgICAgICAgIG5hbWVzLmFwcGVuZChXZWJLaXQ6OnRvV1RGU3RyaW5nKHN0YXRpY19jYXN0
PFdLU3RyaW5nUmVmPihpdGVtKSkpOworICAgICAgICAgICAgICAgIG5hbWVzLnVuY2hlY2tlZEFw
cGVuZChXZWJLaXQ6OnRvV1RGU3RyaW5nKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihpdGVtKSkp
OwogICAgICAgICB9CisgICAgICAgIG5hbWVzLnNocmlua1RvRml0KCk7CiAKICAgICAgICAgcmV0
dXJuIG5hbWVzOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9TZXNzaW9uU3RhdGVDb252ZXJzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9TZXNzaW9uU3RhdGVDb252ZXJzaW9uLmNwcAppbmRl
eCBjOGYyNDhhNjQ3NjU3NmEyOTJjNzVkNWZhYTY4ZjVhYzYzYTQ3NWM4Li41NjdkNDc1MWJlZTgz
YTNiM2Y0ZjZlMGZhMjM3N2JkMDA2MzUwYTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvU2Vzc2lvblN0YXRlQ29udmVyc2lvbi5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1Nlc3Npb25TdGF0ZUNvbnZl
cnNpb24uY3BwCkBAIC05OSwxMCArOTksOSBAQCBzdGF0aWMgRnJhbWVTdGF0ZSB0b0ZyYW1lU3Rh
dGUoY29uc3QgSGlzdG9yeUl0ZW0mIGhpc3RvcnlJdGVtKQogICAgIGZyYW1lU3RhdGUub2JzY3Vy
ZWRJbnNldHMgPSBoaXN0b3J5SXRlbS5vYnNjdXJlZEluc2V0cygpOwogI2VuZGlmCiAKLSAgICBm
b3IgKGF1dG8mIGNoaWxkSGlzdG9yeUl0ZW0gOiBoaXN0b3J5SXRlbS5jaGlsZHJlbigpKSB7Ci0g
ICAgICAgIEZyYW1lU3RhdGUgY2hpbGRGcmFtZVN0YXRlID0gdG9GcmFtZVN0YXRlKGNoaWxkSGlz
dG9yeUl0ZW0pOwotICAgICAgICBmcmFtZVN0YXRlLmNoaWxkcmVuLmFwcGVuZChXVEZNb3ZlKGNo
aWxkRnJhbWVTdGF0ZSkpOwotICAgIH0KKyAgICBmcmFtZVN0YXRlLmNoaWxkcmVuID0gaGlzdG9y
eUl0ZW0uY2hpbGRyZW4oKS5tYXAoW10oYXV0byYgY2hpbGRIaXN0b3J5SXRlbSkgeworICAgICAg
ICByZXR1cm4gdG9GcmFtZVN0YXRlKGNoaWxkSGlzdG9yeUl0ZW0pOworICAgIH0pOwogCiAgICAg
cmV0dXJuIGZyYW1lU3RhdGU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRGV2aWNlT3JpZW50
YXRpb25VcGRhdGVQcm92aWRlci5jcHAKaW5kZXggZjlhZjlhYjkzZjdlMDEyODc3MzY1MGMxZDI0
OTVhZGRlMzlmZDQzNS4uMWQxMWY0MjNjMTc4OGQ1OTdmZjI1NzhlZTYwZDljYjYxNmEwZGQzOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRl
dmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVy
LmNwcApAQCAtODMsMTEgKzgzLDcgQEAgdm9pZCBXZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVBy
b3ZpZGVyOjpzdG9wVXBkYXRpbmdEZXZpY2VNb3Rpb24oV2ViQ29yZTo6TW90aW8KIAogdm9pZCBX
ZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyOjpkZXZpY2VPcmllbnRhdGlvbkNoYW5n
ZWQoZG91YmxlIGFscGhhLCBkb3VibGUgYmV0YSwgZG91YmxlIGdhbW1hLCBkb3VibGUgY29tcGFz
c0hlYWRpbmcsIGRvdWJsZSBjb21wYXNzQWNjdXJhY3kpCiB7Ci0gICAgVmVjdG9yPFdlYWtQdHI8
V2ViQ29yZTo6TW90aW9uTWFuYWdlckNsaWVudD4+IGNsaWVudHM7Ci0gICAgZm9yIChhdXRvJiBj
bGllbnQgOiBtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50cykKLSAgICAgICAgY2xpZW50cy5hcHBl
bmQoY2xpZW50KTsKLQotICAgIGZvciAoYXV0byYgY2xpZW50IDogY2xpZW50cykgeworICAgIGZv
ciAoYXV0byYgY2xpZW50IDogY29weVRvVmVjdG9yT2Y8V2Vha1B0cjxXZWJDb3JlOjpNb3Rpb25N
YW5hZ2VyQ2xpZW50Pj4obV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudHMpKSB7CiAgICAgICAgIGlm
IChjbGllbnQpCiAgICAgICAgICAgICBjbGllbnQtPm9yaWVudGF0aW9uQ2hhbmdlZChhbHBoYSwg
YmV0YSwgZ2FtbWEsIGNvbXBhc3NIZWFkaW5nLCBjb21wYXNzQWNjdXJhY3kpOwogICAgIH0KQEAg
LTk1LDExICs5MSw3IEBAIHZvaWQgV2ViRGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlcjo6
ZGV2aWNlT3JpZW50YXRpb25DaGFuZ2VkKGRvdWJsZSBhbHBoYSwKIAogdm9pZCBXZWJEZXZpY2VP
cmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyOjpkZXZpY2VNb3Rpb25DaGFuZ2VkKGRvdWJsZSB4QWNj
ZWxlcmF0aW9uLCBkb3VibGUgeUFjY2VsZXJhdGlvbiwgZG91YmxlIHpBY2NlbGVyYXRpb24sIGRv
dWJsZSB4QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwgZG91YmxlIHlBY2NlbGVyYXRpb25J
bmNsdWRpbmdHcmF2aXR5LCBkb3VibGUgekFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHksIHN0
ZDo6b3B0aW9uYWw8ZG91YmxlPiB4Um90YXRpb25SYXRlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4g
eVJvdGF0aW9uUmF0ZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHpSb3RhdGlvblJhdGUpCiB7Ci0g
ICAgVmVjdG9yPFdlYWtQdHI8V2ViQ29yZTo6TW90aW9uTWFuYWdlckNsaWVudD4+IGNsaWVudHM7
Ci0gICAgZm9yIChhdXRvJiBjbGllbnQgOiBtX2RldmljZU1vdGlvbkNsaWVudHMpCi0gICAgICAg
IGNsaWVudHMuYXBwZW5kKGNsaWVudCk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBjbGllbnQgOiBj
bGllbnRzKSB7CisgICAgZm9yIChhdXRvJiBjbGllbnQgOiBjb3B5VG9WZWN0b3JPZjxXZWFrUHRy
PFdlYkNvcmU6Ok1vdGlvbk1hbmFnZXJDbGllbnQ+PihtX2RldmljZU1vdGlvbkNsaWVudHMpKSB7
CiAgICAgICAgIGlmIChjbGllbnQpCiAgICAgICAgICAgICBjbGllbnQtPm1vdGlvbkNoYW5nZWQo
eEFjY2VsZXJhdGlvbiwgeUFjY2VsZXJhdGlvbiwgekFjY2VsZXJhdGlvbiwgeEFjY2VsZXJhdGlv
bkluY2x1ZGluZ0dyYXZpdHksIHlBY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5LCAgekFjY2Vs
ZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHksIHhSb3RhdGlvblJhdGUsIHlSb3RhdGlvblJhdGUsIHpS
b3RhdGlvblJhdGUpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmNwcApp
bmRleCBkZmRkYTE3Njk5MzYwMDQ0N2EwYzkzY2M4NDYwZjVlNjhiMmMyNDgxLi4zMThmN2MzZDI5
MzMyYzAyYWQyY2UzMGQ5MGU3Y2ZlNmY1NWMzMjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRP
dmVycmlkZXMuY3BwCkBAIC03MSwxOCArNzEsMTMgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkT3ZlcnJp
ZGVzOjpyZW1vdmVPdmVycmlkZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdAog
CiBWZWN0b3I8U3RyaW5nPiBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpvdmVycmlkZGVuVHlwZXMo
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiByZXN1
bHQ7Ci0KICAgICBhdXRvIGl0ID0gbV9vdmVycmlkZXNNYXAuZmluZChwYXN0ZWJvYXJkTmFtZSk7
CiAgICAgaWYgKGl0ID09IG1fb3ZlcnJpZGVzTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgQVNTRVJUKGl0LT52YWx1ZSk7CiAKLSAg
ICBmb3IgKFN0cmluZyYgdHlwZSA6IGl0LT52YWx1ZS0+a2V5cygpKQotICAgICAgICByZXN1bHQu
YXBwZW5kKHR5cGUpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gY29weVRvVmVj
dG9yKGl0LT52YWx1ZS0+a2V5cygpKTsKIH0KIAogc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQYXN0
ZWJvYXJkSXRlbUluZm8+IFdlYlBhc3RlYm9hcmRPdmVycmlkZXM6Om92ZXJyaWRkZW5JbmZvKGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViU3BlZWNoU3ludGhlc2lzQ2xpZW50LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJTcGVlY2hTeW50aGVzaXND
bGllbnQuY3BwCmluZGV4IGM0ZDBkY2MwM2Q1ZGE2YTA0ODNlZGY1NmQxZTQzOTUyN2JjOTVmODgu
LmM1N2U3ODA5YjJlZTE2NmRkNmY2ODhiZTIyYTg1OWM3ZGFkZGE4ZmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJTcGVlY2hTeW50aGVzaXND
bGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJTcGVlY2hTeW50aGVzaXNDbGllbnQuY3BwCkBAIC00Miw5ICs0Miw5IEBAIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8V2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZT4+JiBXZWJTcGVl
Y2hTeW50aGVzaXNDCiAgICAgVmVjdG9yPFdlYlNwZWVjaFN5bnRoZXNpc1ZvaWNlPiB2b2ljZUxp
c3Q7CiAgICAgbV9wYWdlLnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNwZWVjaFN5
bnRoZXNpc1ZvaWNlTGlzdCgpLCB2b2ljZUxpc3QpOwogCi0gICAgbV92b2ljZXMuY2xlYXIoKTsK
LSAgICBmb3IgKGF1dG8mIHZvaWNlIDogdm9pY2VMaXN0KQotICAgICAgICBtX3ZvaWNlcy5hcHBl
bmQoV2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZTo6Y3JlYXRlKHZvaWNlLnZv
aWNlVVJJLCB2b2ljZS5uYW1lLCB2b2ljZS5sYW5nLCB2b2ljZS5sb2NhbFNlcnZpY2UsIHZvaWNl
LmRlZmF1bHRMYW5nKSk7CisgICAgbV92b2ljZXMgPSB2b2ljZUxpc3QubWFwKFtdKGF1dG8mIHZv
aWNlKSAtPiBSZWZQdHI8V2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZT4gewor
ICAgICAgICByZXR1cm4gV2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZTo6Y3Jl
YXRlKHZvaWNlLnZvaWNlVVJJLCB2b2ljZS5uYW1lLCB2b2ljZS5sYW5nLCB2b2ljZS5sb2NhbFNl
cnZpY2UsIHZvaWNlLmRlZmF1bHRMYW5nKTsKKyAgICB9KTsKICAgICByZXR1cm4gbV92b2ljZXM7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRD
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250
cm9sbGVyLmNwcAppbmRleCBiNTEzNGQwZDJjNWQ3YzUyZjZmYWM5NjgwNDQxYWNjM2VlYmY2NWZk
Li4xZDY0M2I2YjQyODhkMDhlMDM4YzQ2MjVkMDU0OWRlNjhhZjJhYTc3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCkBAIC0y
NzIsMTAgKzI3Miw5IEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OmZpbmRTdHJpbmdNYXRjaGVzKGNv
bnN0IFN0cmluZyYgc3RyaW5nLCBPcHRpb25TZXQ8RmluZE9wdGlvCiAgICAgYXV0byByZXN1bHQg
PSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPmZpbmRUZXh0TWF0Y2hlcyhzdHJpbmcsIGNvcmUob3B0
aW9ucyksIG1heE1hdGNoQ291bnQpOwogICAgIG1fZmluZE1hdGNoZXMgPSBXVEZNb3ZlKHJlc3Vs
dC5yYW5nZXMpOwogCi0gICAgVmVjdG9yPFZlY3RvcjxJbnRSZWN0Pj4gbWF0Y2hSZWN0czsKLSAg
ICBmb3IgKGF1dG8mIHJhbmdlIDogbV9maW5kTWF0Y2hlcykKLSAgICAgICAgbWF0Y2hSZWN0cy5h
cHBlbmQoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cyhyYW5nZSkpOwotCisgICAgYXV0
byBtYXRjaFJlY3RzID0gbV9maW5kTWF0Y2hlcy5tYXAoW10oYXV0byYgcmFuZ2UpIHsKKyAgICAg
ICAgcmV0dXJuIFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMocmFuZ2UpOworICAgIH0p
OwogICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaW5kU3Ry
aW5nTWF0Y2hlcyhzdHJpbmcsIG1hdGNoUmVjdHMsIHJlc3VsdC5pbmRleEZvclNlbGVjdGlvbikp
OwogCiAgICAgaWYgKCFvcHRpb25zLmNvbnRhaW5zKEZpbmRPcHRpb25zOjpTaG93T3ZlcmxheSkg
JiYgIW9wdGlvbnMuY29udGFpbnMoRmluZE9wdGlvbnM6OlNob3dGaW5kSW5kaWNhdG9yKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJh
bmdlQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJG
b3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwCmluZGV4IDc0ODAyYzQ3ODc1NWZmZTYxYjkzMDky
Y2JjYTZkMGFjN2NjYzljODMuLjJjOWI0NTdkYmNhMDdhNmViMTI2ODlhNzhmMGRkNWIyOTE0YTIx
Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5k
VGV4dFJhbmdlQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcApAQCAtMjQ4LDExICsyNDgsMTAg
QEAgdm9pZCBXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmRyYXdSZWN0KFdlYkNvcmU6OlBh
Z2VPdmVybGF5JiwgV2ViQ29yZTo6R3JhcGgKICAgICAgICAgYXV0byB0ZXh0Qm91bmRpbmdSZWN0
SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gbV90ZXh0SW5kaWNhdG9yLT50ZXh0Qm91bmRpbmdSZWN0
SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCk7CiAgICAgICAgIGF1dG8gdGV4dFJlY3RzSW5Cb3VuZGlu
Z1JlY3RDb29yZGluYXRlcyA9IG1fdGV4dEluZGljYXRvci0+dGV4dFJlY3RzSW5Cb3VuZGluZ1Jl
Y3RDb29yZGluYXRlcygpOwogCi0gICAgICAgIFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IHRl
eHRSZWN0c0luUm9vdFZpZXdDb29yZGluYXRlczsKLSAgICAgICAgZm9yIChhdXRvIHJlY3QgOiB0
ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKSB7CisgICAgICAgIGF1dG8gdGV4dFJl
Y3RzSW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGlu
YXRlcy5tYXAoWyZdKGF1dG8gcmVjdCkgewogICAgICAgICAgICAgcmVjdC5tb3ZlQnkodGV4dEJv
dW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcy5sb2NhdGlvbigpKTsKLSAgICAgICAgICAg
IHRleHRSZWN0c0luUm9vdFZpZXdDb29yZGluYXRlcy5hcHBlbmQocmVjdCk7Ci0gICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiByZWN0OworICAgICAgICB9KTsKIAogICAgICAgICBhdXRvIHBh
dGhzID0gV2ViQ29yZTo6UGF0aFV0aWxpdGllczo6cGF0aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3Rz
KHRleHRSZWN0c0luUm9vdFZpZXdDb29yZGluYXRlcywgaW5kaWNhdG9yUmFkaXVzKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCAzNDk4N2Jk
ZTY0ZmRmZjA5MDgzMmMzNzU0MmI5MzUxM2E2MWFkY2NiLi40ODc2ODA0NmExODk5ZTk0MjY4ZDdl
Mjk1NDk4MDUxMjYwMDU1ZmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcApAQCAtNzg0MCwxNCArNzg0MCwxNiBAQCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkmIFdlYlBhZ2U6OmVuc3VyZVJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpCiBW
ZWN0b3I8UmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiBXZWJQYWdlOjpjb25zdW1lU2FuZGJveEV4
dGVuc2lvbnMoVmVjdG9yPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4mJiBzYW5kYm94RXh0ZW5z
aW9ucykKIHsKICAgICBWZWN0b3I8UmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiBkcmFnU2FuZGJv
eEV4dGVuc2lvbnM7CisgICAgZHJhZ1NhbmRib3hFeHRlbnNpb25zLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoc2FuZGJveEV4dGVuc2lvbnMuc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIHNhbmRib3hF
eHRlbnNpb24gOiBzYW5kYm94RXh0ZW5zaW9ucykgewogICAgICAgICBhdXRvIGV4dGVuc2lvbiA9
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZShXVEZNb3ZlKHNhbmRib3hFeHRlbnNpb24pKTsKICAg
ICAgICAgaWYgKCFleHRlbnNpb24pCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYm9v
bCBvayA9IGV4dGVuc2lvbi0+Y29uc3VtZSgpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKG9rLCBv
ayk7Ci0gICAgICAgIGRyYWdTYW5kYm94RXh0ZW5zaW9ucy5hcHBlbmQoV1RGTW92ZShleHRlbnNp
b24pKTsKKyAgICAgICAgZHJhZ1NhbmRib3hFeHRlbnNpb25zLnVuY2hlY2tlZEFwcGVuZChXVEZN
b3ZlKGV4dGVuc2lvbikpOwogICAgIH0KKyAgICBkcmFnU2FuZGJveEV4dGVuc2lvbnMuc2hyaW5r
VG9GaXQoKTsKICAgICByZXR1cm4gZHJhZ1NhbmRib3hFeHRlbnNpb25zOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbSBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCmluZGV4
IDlkYzAwZGEyNzcwYzE5Mzk4OTFhMzAwZjIzMzc0OTZhOWM4ZTcwMWQuLmJkMzY3MjA3NWI3NTc2
OGM4NDE0Nzc4ZmM2NjVmNWQ3NWI0ZTI0YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC03NTQsMTEgKzc1NCw4IEBAIHZv
aWQgV2ViUGFnZTo6aGFuZGxlU2VsZWN0aW9uU2VydmljZUNsaWNrKEZyYW1lU2VsZWN0aW9uJiBz
ZWxlY3Rpb24sIGNvbnN0IFZlY3RvCiAKICAgICBOU0RhdGEgKnNlbGVjdGlvbkRhdGEgPSBbYXR0
cmlidXRlZFNlbGVjdGlvbiBSVEZERnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIFthdHRyaWJ1dGVk
U2VsZWN0aW9uIGxlbmd0aF0pIGRvY3VtZW50QXR0cmlidXRlczpAeyB9XTsKIAotICAgIFZlY3Rv
cjx1aW50OF90PiBzZWxlY3Rpb25EYXRhVmVjdG9yOwotICAgIHNlbGVjdGlvbkRhdGFWZWN0b3Iu
YXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNlbGVjdGlvbkRhdGEuYnl0
ZXMpLCBzZWxlY3Rpb25EYXRhLmxlbmd0aCk7Ci0KICAgICBmbHVzaFBlbmRpbmdFZGl0b3JTdGF0
ZVVwZGF0ZSgpOwotICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2hvd0NvbnRleHRN
ZW51KENvbnRleHRNZW51Q29udGV4dERhdGEocG9pbnQsIHNlbGVjdGlvbkRhdGFWZWN0b3IsIHBo
b25lTnVtYmVycywgc2VsZWN0aW9uLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpLCBV
c2VyRGF0YSgpKSk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93Q29udGV4
dE1lbnUoQ29udGV4dE1lbnVDb250ZXh0RGF0YShwb2ludCwgVmVjdG9yIHsgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50OF90Kj4oc2VsZWN0aW9uRGF0YS5ieXRlcyksIHNlbGVjdGlvbkRhdGEu
bGVuZ3RoIH0sIHBob25lTnVtYmVycywgc2VsZWN0aW9uLnNlbGVjdGlvbigpLmlzQ29udGVudEVk
aXRhYmxlKCkpLCBVc2VyRGF0YSgpKSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6aGFuZGxlSW1hZ2VT
ZXJ2aWNlQ2xpY2soY29uc3QgSW50UG9pbnQmIHBvaW50LCBJbWFnZSYgaW1hZ2UsIEhUTUxJbWFn
ZUVsZW1lbnQmIGVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAK
aW5kZXggNzk5NjEzZDM3NzQyMzYzYmZiZGNkOTUyOTc5OTYyMjA2ZjAyMjhhOC4uODk5MGVkZDc2
Y2FiOTZjMmRlY2QzYjk2MDU0Y2ZmNjI5NWJiMGNmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLmNwcApAQCAtMTQ1Miw4ICsxNDUyLDEwIEBAIHZvaWQgV2ViUHJvY2Vzczo6
ZmV0Y2hXZWJzaXRlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB3ZWJzaXRlRGF0YVR5
cGVzLCBDCiB7CiAgICAgV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGE7CiAgICAgaWYgKHdlYnNpdGVE
YXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpNZW1vcnlDYWNoZSkpIHsKLSAgICAg
ICAgZm9yIChhdXRvJiBvcmlnaW4gOiBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkub3JpZ2luc1dp
dGhDYWNoZShzZXNzaW9uSUQoKSkpCi0gICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzLmFw
cGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4tPmRhdGEoKSwgV2Vic2l0ZURhdGFUeXBl
OjpNZW1vcnlDYWNoZSwgMCB9KTsKKyAgICAgICAgYXV0byBvcmlnaW5zID0gTWVtb3J5Q2FjaGU6
OnNpbmdsZXRvbigpLm9yaWdpbnNXaXRoQ2FjaGUoc2Vzc2lvbklEKCkpOworICAgICAgICB3ZWJz
aXRlRGF0YS5lbnRyaWVzID0gV1RGOjptYXAob3JpZ2lucywgW10oYXV0byYgb3JpZ2luKSB7Cisg
ICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLT5kYXRhKCksIFdl
YnNpdGVEYXRhVHlwZTo6TWVtb3J5Q2FjaGUsIDAgfTsKKyAgICAgICAgfSk7CiAgICAgfQogICAg
IGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUod2Vic2l0ZURhdGEpKTsKIH0K
</data>
<flag name="commit-queue"
          id="479657"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452572</attachid>
            <date>2022-02-18 13:26:11 -0800</date>
            <delta_ts>2022-02-18 15:13:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236852-20220218132610.patch</filename>
            <type>text/plain</type>
            <size>163562</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMTU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDQwMjRhYTk5ZmEyYjQyNGY1MmIwYjk2
MGUxMmEyZmViOTdmZTdmNjUuLjkxMjI3MjJmZjBlOTkwMjg4NDM0MTJlZDVlMDNiNDUwN2FmOWZi
NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjItMDItMTggIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGV2ZW4gbW9yZSBjYWxs
IHNpdGVzIGNvbnN0cnVjdGluZyB2ZWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuY3BwOgorICAgICAgICAoV1RGOjpD
b25jdXJyZW50V29ya1F1ZXVlOjphcHBseSk6CisgICAgICAgICogd3RmL2NmL0xhbmd1YWdlQ0Yu
Y3BwOgorICAgICAgICAoV1RGOjpwbGF0Zm9ybVVzZXJQcmVmZXJyZWRMYW5ndWFnZXMpOgorCiAy
MDIyLTAyLTE4ICBCcmFuZG9uIFN0ZXdhcnQgIDxicmFuZG9uc3Rld2FydEBhcHBsZS5jb20+CiAK
ICAgICAgICAgR2VuZXJhdGUgY29tcGlsZV9jb21tYW5kcy5qc29uIG9uIG1hY09TIEJ1aWxkcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IDRmNzQ4Y2I3ZDAyYzI3MTU3ZDdmM2VlNzEwZjA0NTdmMGNhMTI0OTIuLmFj
OTI3ZGIzMjllZWFlYzE1N2M3NWY0NWJhNTIzZmI3MThkNmU2NmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNjYgQEAKKzIwMjItMDItMTggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
KworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGV2ZW4gbW9yZSBjYWxsIHNpdGVzIGNvbnN0
cnVjdGluZyB2ZWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzY4NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIE1vZHVsZXMvYXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBheW1lbnRDb29yZGluYXRvcjo6YmVnaW5QYXltZW50U2Vzc2lvbik6Cisg
ICAgICAgICogTW9kdWxlcy9hcHBsZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29jb2EubW06Cisg
ICAgICAgIChXZWJDb3JlOjpjb252ZXJ0KToKKyAgICAgICAgKiBNb2R1bGVzL2NhY2hlL0RPTUNh
Y2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUNhY2hlOjpiYXRjaFB1dE9wZXJhdGlvbik6
CisgICAgICAgICogTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R2FtZXBhZDo6R2FtZXBhZCk6CisgICAgICAgICogTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRN
YW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRNYW5hZ2VyOjpwbGF0Zm9ybUdh
bWVwYWREaXNjb25uZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZE1hbmFnZXI6Om1h
a2VHYW1lcGFkVmlzaWJsZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OnRyYW5zYWN0aW9uKToKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmg6CisgICAgICAgIChXZWJDb3Jl
OjpJREJLZXlEYXRhOjppc0RlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjph
ZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YUhhc2g6Omhhc2gpOgorICAgICAgICAo
V2ViQ29yZTo6SURCS2V5RGF0YTo6aGFzaCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmU6OmluZGV4TmFtZXMgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
OjpvYmplY3RTdG9yZU5hbWVzIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhY29udHJv
bHMvTWVkaWFDb250cm9sc0hvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
c0hvc3Q6OnNob3dNZWRpYUNvbnRyb2xzQ29udGV4dE1lbnUpOgorICAgICAgICAqIE1vZHVsZXMv
bWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3Vy
Y2U6OmFjdGl2ZVJhbmdlcyBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9T
YW1wbGVNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRlY29kZU9yZGVyU2FtcGxlTWFwOjpzaXpl
IGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3Qu
aDoKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzOjpnZXRWb2ljZXMpOgorICAgICAgICAqIE1vZHVs
ZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrLm1tOgorICAgICAgICAoLVtX
ZWJTcGVlY2hSZWNvZ25pemVyVGFza0ltcGwgY2FsbGJhY2tXaXRoVHJhbnNjcmlwdGlvbnM6aXNG
aW5hbDpdKToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25p
emVyVGFza01vY2subW06CisgICAgICAgICgtW1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrTW9jayBh
dWRpb1NhbXBsZXNBdmFpbGFibGU6XSk6CisgICAgICAgICogYW5pbWF0aW9uL0NTU1Byb3BlcnR5
QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRnVuYyk6CisgICAgICAgICog
YW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmVzQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXI6OnVwZGF0ZUFuaW1hdGlvbnNBbmRTZW5k
RXZlbnRzKToKKyAgICAgICAgKiBhbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cHJvY2Vzc1Byb3BlcnR5SW5kZXhlZEtleWZyYW1lcyk6CisgICAgICAgICog
Y29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbjo6Q29udGVudEV4dGVuc2lvbik6
CisgICAgICAgICogY3NzL0NTU1ZhbHVlTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFs
dWVMaXN0OjpzaXplIGNvbnN0KToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9u
Tm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6aG9pc3RD
aGlsZHJlbldpdGhPcGVyYXRvcik6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXJJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlckltcGw6OmNvbnN1bWVDb250YWluZXJS
dWxlKToKKyAgICAgICAgKiBkb20vRE9NU3RyaW5nTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6
RE9NU3RyaW5nTGlzdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVN0cmluZ0xpc3Q6
OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpET01TdHJpbmdMaXN0OjpET01TdHJpbmdMaXN0
KToKKyAgICAgICAgKiBkb20vRXZlbnRQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
UGF0aDo6RXZlbnRQYXRoKToKKyAgICAgICAgKiBkb20vRnVsbHNjcmVlbk1hbmFnZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RnVsbHNjcmVlbk1hbmFnZXI6OmNhbmNlbEZ1bGxzY3JlZW4pOgor
ICAgICAgICAqIGRvbS9Mb2FkYWJsZVNjcmlwdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2Fk
YWJsZVNjcmlwdDo6bm90aWZ5Q2xpZW50RmluaXNoZWQpOgorICAgICAgICAqIGRvbS9SYWRpb0J1
dHRvbkdyb3Vwcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYWRpb0J1dHRvbkdyb3VwOjptZW1i
ZXJzIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0RpcmVjdG9yeUZpbGVMaXN0Q3JlYXRvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp0b0ZpbGVMaXN0KToKKyAgICAgICAgKiBodG1sL0hUTUxTZWxl
Y3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzYXZl
TGFzdFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2V0
QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgpOgorICAgICAgICAqIGh0bWwvSW1hZ2VCaXRtYXAu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OmRldGFjaEJpdG1hcHMpOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0YWNoZWRTaGFkZXJz
KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpwcm9jZXNzTWV0YSk6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUcmVlQnVpbGRlcjo6aW5zZXJ0UGhvbmVOdW1iZXJMaW5rKToKKyAgICAgICAgKiBodG1s
L3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dERv
Y3VtZW50UGFyc2VyOjppbnNlcnRGYWtlUHJlRWxlbWVudCk6CisgICAgICAgICogbG9hZGVyL0Nv
bnRlbnRGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEZpbHRlcjo6Y3JlYXRl
KToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0UGFy
c2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0
KToKKyAgICAgICAgKiBwYWdlL1Jlc2l6ZU9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlc2l6ZU9ic2VydmVyOjpkZWxpdmVyT2JzZXJ2YXRpb25zKToKKyAgICAgICAgKiBwYWdlL1Rl
eHRJbmRpY2F0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZUluZGljYXRvcik6
CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlU3ViUmVzb3VyY2VJbnRlZ3JpdHlJbnRvRGlnZXN0cyk6CisgICAgICAg
ICogcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUNob29z
ZXI6OmNob29zZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUNob29zZXI6OmNob29zZUZp
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjaG9vc2VNZWRpYUZpbGVzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9UaHJl
YWRTYWZlRGF0YUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBdWRpb0RTUEtlcm5lbFByb2Nlc3Nvcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcGxh
dGZvcm0vYXVkaW8vQXVkaW9SZXNhbXBsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9S
ZXNhbXBsZXI6OkF1ZGlvUmVzYW1wbGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9EeW5h
bWljc0NvbXByZXNzb3JLZXJuZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21w
cmVzc29yS2VybmVsOjpzZXROdW1iZXJPZkNoYW5uZWxzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9h
dWRpby9NdWx0aUNoYW5uZWxSZXNhbXBsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TXVsdGlD
aGFubmVsUmVzYW1wbGVyOjpNdWx0aUNoYW5uZWxSZXNhbXBsZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tOgorICAgICAgICAo
V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRpYVNl
bGVjdGlvbk9wdGlvbnMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWQvbWFjL0R1
YWxzaG9jazNISURHYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkR1YWxzaG9jazNISURH
YW1lcGFkOjpEdWFsc2hvY2szSElER2FtZXBhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ2FtZXBh
ZC9tYWMvTG9naXRlY2hHYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvZ2l0ZWNoR2Ft
ZXBhZDo6TG9naXRlY2hHYW1lcGFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkL21hYy9T
dGFkaWFISURHYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0YWRpYUhJREdhbWVwYWQ6
OlN0YWRpYUhJREdhbWVwYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
TGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6YWRkUmVwYWludFJl
Y3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGF0aFV0aWxpdGllczo6cGF0aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3Rz
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhVdGlsaXRpZXM6OnBhdGhXaXRoU2hyaW5rV3JhcHBl
ZFJlY3RzRm9yT3V0bGluZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVm
ZmVyUHJpdmF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlOjpi
dWZmZXJlZFNhbXBsZXNGb3JUcmFja0lkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpleHRyYWN0S2V5SURzU2tkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVZGV3JhcHBlcjo6c2V0UmVxdWVz
dEZvcktleSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
Q0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW06CisgICAgICAgIChXZWJDb3Jl
OjpDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnVwZGF0ZUtleVN0
YXR1c2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9J
bWFnZURlY29kZXJBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyQVZG
T2JqQzo6ZnJhbWVJbmZvcyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUGFyc2VyQVZGT2JqQy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlckFWRk9iakM6OmRpZFBhcnNlU3RyZWFtRGF0YUFzQXNz
ZXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFD
b2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnZhcmlhdGlvbkF4
ZXMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVTdHJpbmcpOgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlOjpzZXRTdXBwb3J0ZWRQcmVzZXRz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJsb2JSZWdpc3RyeUltcGw6OndyaXRlQmxvYnNUb1RlbXBvcmFyeUZpbGVz
Rm9ySW5kZXhlZERCKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmRyYXdCb3hTaWRl
RnJvbVBhdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpjb25uZWN0Q2xpcHBpbmdTdGFj
a0xheWVycyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkanVzdE92ZXJmbG93
U2Nyb2xsYmFyQ29udGFpbmVyTGF5ZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhl
bWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpwYWludEF0dGFjaG1lbnRUaXRsZUJhY2tncm91
bmQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjp3cml0ZVNWR1N0cm9rZVBhaW50aW5nUmVzb3VyY2UpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RleHRDaHVuazo6U1ZHVGV4dENodW5rKToKKyAgICAgICAgKiBzdHlsZS9QYWdlUnVsZUNvbGxl
Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UGFnZVJ1bGVDb2xsZWN0b3I6Om1h
dGNoUGFnZVJ1bGVzKToKKyAgICAgICAgKiBzdHlsZS9SdWxlU2V0QnVpbGRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldEJ1aWxkZXI6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6
OnBvcCk6CisgICAgICAgICogc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENvbnRhaW5lck5hbWUp
OgorCiAyMDIyLTAyLTE4ICBTYW0gU25lZGRvbiAgPGdzbmVkZGVyc0BhcHBsZS5jb20+CiAKICAg
ICAgICAgU2VydmljZVdvcmtlckdsb2JhbFNjb3BlK1B1c2hBUEkgcmVxdWlyZXMgUHVzaEFQSUVu
YWJsZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKaW5kZXggMWYwMTFiZWMxMDExNGZiNjZmZjMzYzRlMzI4ZDQ0NmJmNWRmNGQy
NS4uYTdlNWJkY2MyMTk1ZTdhNTc3Y2NjNjljMGQ1ZWFjNWZjZjc5NzIyYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw5OCBAQAorMjAyMi0wMi0xOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgorCisgICAgICAgIENsZWFuIHVwIC8gb3B0aW1pemUgZXZlbiBtb3JlIGNhbGwgc2l0ZXMgY29u
c3RydWN0aW5nIHZlY3RvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzNjg1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllclByb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlTWVkaWFQbGF5ZXJQcm94eTo6b3V0T2ZCYW5kVHJhY2tT
b3VyY2VzKToKKyAgICAgICAgKiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZVNvdXJjZUJ1ZmZlclBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlU291cmNlQnVmZmVyUHJveHk6OnNvdXJj
ZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50KToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlU291cmNlQnVmZmVyUHJveHk6OnVwZGF0ZVRyYWNrSWRzKToKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OmZldGNoRGlza0NhY2hlRW50cmll
cyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTm90aWZpY2F0aW9ucy9OZXR3b3JrTm90aWZp
Y2F0aW9uTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtOb3RpZmljYXRpb25N
YW5hZ2VyOjpnZXRPcmlnaW5zV2l0aFB1c2hBbmROb3RpZmljYXRpb25QZXJtaXNzaW9ucyk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjphbGxTdG9yYWdlQXJlYUlkZW50aWZpZXJz
IGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1RyYW5zaWVudExv
Y2FsU3RvcmFnZU5hbWVzcGFjZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRyYW5zaWVudExvY2Fs
U3RvcmFnZU5hbWVzcGFjZTo6b3JpZ2lucyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlRyYW5z
aWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6c3RvcmFnZUFyZWFJZGVudGlmaWVycyBjb25zdCk6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpmaW5pc2hPcGVuaW5n
KToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6a2V5cyBjb25zdCk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpTUUxpdGVTdG9yYWdlQXJlYSk6Cisg
ICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgICogU2hhcmVk
L0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OnNob3dQYXltZW50VUkpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbi5jcHA6CisgICAgICAgIChBUEk6Ok5hdmlnYXRp
b246Ok5hdmlnYXRpb24pOgorICAgICAgICAoQVBJOjptX2NsaWVudE5hdmlnYXRpb25BY3Rpdml0
eSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dLU2hhcmVTaGVldC5tbToKKyAgICAgICAg
KGFwcGVuZEZpbGVzQXNTaGFyZWFibGVVUkxzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2Ev
V2ViUGFnZVByb3h5Q29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVz
dG9yZUFwcEhpZ2hsaWdodHNBbmRTY3JvbGxUb0luZGV4KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
RnJhbWVMb2FkU3RhdGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRTdGF0ZTo6ZGlk
RmluaXNoTG9hZCk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVh
dGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Vc2VyQ29u
dGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpwYXJhbWV0ZXJzIGNvbnN0KToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRvck1hbmFnZXIuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpBdXRoZW50aWNhdG9yTWFuYWdlcjo6c3RhcnREaXNjb3Zlcnkp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OnJlbW92ZUFsbEl0ZW1zKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQmFja0ZvcndhcmRMaXN0OjpjbGVhcik6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRp
YWxpemVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJl
bW92ZVByb2Nlc3NGcm9tT3JpZ2luQ2FjaGVTZXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnByb2Nl
c3NEaWRUZXJtaW5hdGVPckZhaWxlZFRvTGF1bmNoKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5KToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6cmVtb3ZlRGF0YSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tl
cklPUy5tbToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdy
YXBoKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW06
CisgICAgICAgICgtW1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQgcHJlc2VudGF0aW9uUmVjdEZvckVs
ZW1lbnRVc2luZ0Nsb3Nlc3RJbmRpY2F0ZWRSZWN0XSk6CisgICAgICAgICogVUlQcm9jZXNzL21h
Yy9UZXh0Q2hlY2tlck1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNr
VGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0FwcGxlUGF5L1dlYlBheW1l
bnRDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBheW1lbnRDb29yZGluYXRv
cjo6c2hvd1BheW1lbnRVSSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1
dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9u
U2Vzc2lvblByb3h5OjpzZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZCk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyOjpjcmVhdGVSZW1vdGVNZWRpYVBsYXll
cik6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvU291cmNlQnVmZmVyUHJpdmF0ZVJl
bW90ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGU6OnVw
ZGF0ZVRyYWNrSWRzKToKKyAgICAgICAgKFdlYktpdDo6U291cmNlQnVmZmVyUHJpdmF0ZVJlbW90
ZTo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpMaWJXZWJSVENDb2RlY3M6OmNyZWF0ZUVuY29kZXIpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHA6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9TZXNzaW9uU3RhdGVDb252ZXJz
aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6dG9GcmFtZVN0YXRlKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXIu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVy
OjpkZXZpY2VPcmllbnRhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZpY2VP
cmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyOjpkZXZpY2VNb3Rpb25DaGFuZ2VkKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpvdmVycmlkZGVuVHlwZXMp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViU3BlZWNoU3ludGhlc2lz
Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoU3ludGhlc2lzQ2xpZW50Ojp2
b2ljZUxpc3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjpmaW5kU3RyaW5nTWF0Y2hlcyk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6ZHJh
d1JlY3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6Y29uc3VtZVNhbmRib3hFeHRlbnNpb25zKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OmhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6ZmV0Y2hX
ZWJzaXRlRGF0YSk6CisKIDIwMjItMDItMTggIEogUGFzY29lICA8al9wYXNjb2VAYXBwbGUuY29t
PgogCiAgICAgICAgIFtXZWJBdXRobl0gQWRkIGNyZWRlbnRpYWxJRCB0byBfV0tXZWJBdXRoZW50
aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlIGFuZCB1c2VySGFuZGxlIGluIGdldEFsbExvY2FsQXV0
aGVudGljYXRvckNyZWRlbnRpYWxzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVl
dWUuY3BwIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcAppbmRleCA5ZTEwNmUzOTRkM2Y0
NGQyYzI1ZmMzY2ExNTM1NDBlNTIwNGNiMzViLi44NjQwNmYzODg0MzcxNGNiMjU1YzM0ZWFlM2Y5
MTgxZGFiYTU4ZTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAKQEAgLTEwNSw3ICsxMDUsNyBAQCB2b2lk
IENvbmN1cnJlbnRXb3JrUXVldWU6OmFwcGx5KHNpemVfdCBpdGVyYXRpb25zLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoc2l6ZV90IGluZAogCiAgICAgICAgICAgICBtX3dvcmtlcnMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eSh0aHJlYWRDb3VudCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdGhyZWFkQ291bnQ7ICsraSkgewotICAgICAgICAgICAgICAgIG1fd29ya2Vycy5hcHBl
bmQoVGhyZWFkOjpjcmVhdGUoIlRocmVhZFBvb2wgV29ya2VyIiwgW3RoaXNdIHsKKyAgICAgICAg
ICAgICAgICBtX3dvcmtlcnMudW5jaGVja2VkQXBwZW5kKFRocmVhZDo6Y3JlYXRlKCJUaHJlYWRQ
b29sIFdvcmtlciIsIFt0aGlzXSB7CiAgICAgICAgICAgICAgICAgICAgIHRocmVhZEJvZHkoKTsK
ICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9jZi9MYW5ndWFnZUNGLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2NmL0xhbmd1YWdlQ0Yu
Y3BwCmluZGV4IGJiYzFlZjZmNGVmZTAzMDU5Y2U1NTEzMWUwOGMxMDMzMjI0ODhlNTYuLmMwNGM1
NWJjNjAzZDI4MWQwY2EzODkyMGViYThjNzllNWU2OTI5ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL2NmL0xhbmd1YWdlQ0YuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2NmL0xhbmd1YWdl
Q0YuY3BwCkBAIC0xMDIsOSArMTAyLDEwIEBAIFZlY3RvcjxTdHJpbmc+IHBsYXRmb3JtVXNlclBy
ZWZlcnJlZExhbmd1YWdlcyhTaG91bGRNaW5pbWl6ZUxhbmd1YWdlcyBzaG91bGRNaW5pCiAgICAg
ICAgIHJldHVybiB7ICJlbiJfcyB9OwogCiAgICAgVmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzOwor
ICAgIGxhbmd1YWdlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBsYXRmb3JtTGFuZ3VhZ2VzQ291
bnQpOwogICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IHBsYXRmb3JtTGFuZ3VhZ2VzQ291bnQ7
IGkrKykgewogICAgICAgICBhdXRvIHBsYXRmb3JtTGFuZ3VhZ2UgPSBzdGF0aWNfY2FzdDxDRlN0
cmluZ1JlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChwbGF0Zm9ybUxhbmd1YWdlcy5nZXQoKSwg
aSkpOwotICAgICAgICBsYW5ndWFnZXMuYXBwZW5kKGh0dHBTdHlsZUxhbmd1YWdlQ29kZShwbGF0
Zm9ybUxhbmd1YWdlLCBzaG91bGRNaW5pbWl6ZUxhbmd1YWdlcykpOworICAgICAgICBsYW5ndWFn
ZXMudW5jaGVja2VkQXBwZW5kKGh0dHBTdHlsZUxhbmd1YWdlQ29kZShwbGF0Zm9ybUxhbmd1YWdl
LCBzaG91bGRNaW5pbWl6ZUxhbmd1YWdlcykpOwogICAgIH0KIAogICAgIExPR19XSVRIX1NUUkVB
TShMYW5ndWFnZSwgc3RyZWFtIDw8ICJBZnRlciBwYXNzaW5nIHRocm91Z2ggaHR0cFN0eWxlTGFu
Z3VhZ2VDb2RlOiAiIDw8IGxhbmd1YWdlcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29yZGluYXRvci5jcHAKaW5kZXggMWEzMjdhOTRiMGI3
MWQ0ZWM3NWVhY2M4ZDRhZDc4YTkxYjlmZjY4NS4uNGE5NDMyMjQ5ZDUyZDUxZDE0N2I4NmU1NzA4
ZDUxODg4YmE2NGY1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBh
eS9QYXltZW50Q29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBw
bGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNwcApAQCAtMTAxLDExICsxMDEsMTAgQEAgYm9vbCBQ
YXltZW50Q29vcmRpbmF0b3I6OmJlZ2luUGF5bWVudFNlc3Npb24oRG9jdW1lbnQmIGRvY3VtZW50
LCBQYXltZW50U2Vzc2lvbiYKIHsKICAgICBBU1NFUlQoIW1fYWN0aXZlU2Vzc2lvbik7CiAKLSAg
ICBWZWN0b3I8VVJMPiBsaW5rSWNvblVSTHM7Ci0gICAgZm9yIChhdXRvJiBpY29uIDogTGlua0lj
b25Db2xsZWN0b3IgeyBkb2N1bWVudCB9Lmljb25zT2ZUeXBlcyh7IExpbmtJY29uVHlwZTo6VG91
Y2hJY29uLCBMaW5rSWNvblR5cGU6OlRvdWNoUHJlY29tcG9zZWRJY29uIH0pKQotICAgICAgICBs
aW5rSWNvblVSTHMuYXBwZW5kKGljb24udXJsKTsKLQotICAgIGF1dG8gc2hvd1BheW1lbnRVSSA9
IG1fY2xpZW50LnNob3dQYXltZW50VUkoZG9jdW1lbnQudXJsKCksIGxpbmtJY29uVVJMcywgcGF5
bWVudFJlcXVlc3QpOworICAgIGF1dG8gbGlua0ljb25VUkxzID0gTGlua0ljb25Db2xsZWN0b3Ig
eyBkb2N1bWVudCB9Lmljb25zT2ZUeXBlcyh7IExpbmtJY29uVHlwZTo6VG91Y2hJY29uLCBMaW5r
SWNvblR5cGU6OlRvdWNoUHJlY29tcG9zZWRJY29uIH0pLm1hcChbXShhdXRvJiBpY29uKSB7Cisg
ICAgICAgIHJldHVybiBpY29uLnVybDsKKyAgICB9KTsKKyAgICBhdXRvIHNob3dQYXltZW50VUkg
PSBtX2NsaWVudC5zaG93UGF5bWVudFVJKGRvY3VtZW50LnVybCgpLCBXVEZNb3ZlKGxpbmtJY29u
VVJMcyksIHBheW1lbnRSZXF1ZXN0KTsKICAgICBQQVlNRU5UX0NPT1JESU5BVE9SX1JFTEVBU0Vf
TE9HKCJiZWdpblBheW1lbnRTZXNzaW9uKCkgLT4gJWQiLCBzaG93UGF5bWVudFVJKTsKICAgICBp
ZiAoIXNob3dQYXltZW50VUkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvY29jb2EvUGF5bWVudE1ldGhvZENvY29hLm1t
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29j
b2EubW0KaW5kZXggNzY1M2RlNTRhZjUzOWYyNTYxZjQyMjM2ZDMwZWM2MWFiNTgwM2RkNS4uMzc1
ZTUzZDZkNGZkZGM4ODhmMzJlMDRlMjgzYTdkYjA0MTEzZDA2MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29jb2EubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29j
b2EubW0KQEAgLTEwMSwxMSArMTAxLDggQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8QXBwbGVQYXlQ
YXltZW50TWV0aG9kOjpUeXBlPiBjb252ZXJ0KFBLUGF5bWVudE1ldGhvZFR5cGUgcGEKICNpZiBI
QVZFKFBBU1NLSVRfUEFZTUVOVF9NRVRIT0RfQklMTElOR19BRERSRVNTKQogc3RhdGljIHZvaWQg
Y29udmVydChDTkxhYmVsZWRWYWx1ZTxDTlBvc3RhbEFkZHJlc3MqPiAqcG9zdGFsQWRkcmVzcywg
QXBwbGVQYXlQYXltZW50Q29udGFjdCAmcmVzdWx0KQogewotICAgIFZlY3RvcjxTdHJpbmc+IGFk
ZHJlc3NMaW5lOwotICAgIGlmIChOU1N0cmluZyAqc3RyZWV0ID0gcG9zdGFsQWRkcmVzcy52YWx1
ZS5zdHJlZXQpIHsKLSAgICAgICAgYWRkcmVzc0xpbmUuYXBwZW5kKHN0cmVldCk7Ci0gICAgICAg
IHJlc3VsdC5hZGRyZXNzTGluZXMgPSBXVEZNb3ZlKGFkZHJlc3NMaW5lKTsKLSAgICB9CisgICAg
aWYgKE5TU3RyaW5nICpzdHJlZXQgPSBwb3N0YWxBZGRyZXNzLnZhbHVlLnN0cmVldCkKKyAgICAg
ICAgcmVzdWx0LmFkZHJlc3NMaW5lcyA9IFZlY3RvciB7IFN0cmluZyB7IHN0cmVldCB9IH07CiAg
ICAgcmVzdWx0LnN1YkxvY2FsaXR5ID0gcG9zdGFsQWRkcmVzcy52YWx1ZS5zdWJMb2NhbGl0eTsK
ICAgICByZXN1bHQubG9jYWxpdHkgPSBwb3N0YWxBZGRyZXNzLnZhbHVlLmNpdHk7CiAgICAgcmVz
dWx0LnN1YkFkbWluaXN0cmF0aXZlQXJlYSA9IHBvc3RhbEFkZHJlc3MudmFsdWUuc3ViQWRtaW5p
c3RyYXRpdmVBcmVhOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9E
T01DYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlLmNwcApp
bmRleCA0OWYzOThhYWZlZjM3Y2Q1ZThmOGViMjQ0ZDRlMTFmMzlmMmE4Y2QzLi4yZDQ2ZDFjZGJj
NzE3ZjNjOTI5OWVmYTg2M2E1NDkyNjM4M2FmNWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2NhY2hlL0RPTUNhY2hlLmNwcApAQCAtNTE1LDEwICs1MTUsOCBAQCBSZWNvcmQgRE9NQ2FjaGU6
OnRvQ29ubmVjdGlvblJlY29yZChjb25zdCBGZXRjaFJlcXVlc3QmIHJlcXVlc3QsIEZldGNoUmVz
cG9uc2UmCiAKIHZvaWQgRE9NQ2FjaGU6OmJhdGNoUHV0T3BlcmF0aW9uKGNvbnN0IEZldGNoUmVx
dWVzdCYgcmVxdWVzdCwgRmV0Y2hSZXNwb25zZSYgcmVzcG9uc2UsIERPTUNhY2hlRW5naW5lOjpS
ZXNwb25zZUJvZHkmJiByZXNwb25zZUJvZHksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRXhjZXB0
aW9uT3I8dm9pZD4mJik+JiYgY2FsbGJhY2spCiB7Ci0gICAgVmVjdG9yPFJlY29yZD4gcmVjb3Jk
czsKLSAgICByZWNvcmRzLmFwcGVuZCh0b0Nvbm5lY3Rpb25SZWNvcmQocmVxdWVzdCwgcmVzcG9u
c2UsIFdURk1vdmUocmVzcG9uc2VCb2R5KSkpOwotCi0gICAgYmF0Y2hQdXRPcGVyYXRpb24oV1RG
TW92ZShyZWNvcmRzKSwgV1RGTW92ZShjYWxsYmFjaykpOworICAgIGF1dG8gcmVjb3JkID0gdG9D
b25uZWN0aW9uUmVjb3JkKHJlcXVlc3QsIHJlc3BvbnNlLCBXVEZNb3ZlKHJlc3BvbnNlQm9keSkp
OworICAgIGJhdGNoUHV0T3BlcmF0aW9uKHsgV1RGTW92ZShyZWNvcmQpIH0sIFdURk1vdmUoY2Fs
bGJhY2spKTsKIH0KIAogdm9pZCBET01DYWNoZTo6YmF0Y2hQdXRPcGVyYXRpb24oVmVjdG9yPFJl
Y29yZD4mJiByZWNvcmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEV4Y2VwdGlvbk9yPHZvaWQ+
JiYpPiYmIGNhbGxiYWNrKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1l
cGFkL0dhbWVwYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQu
Y3BwCmluZGV4IDY5NjllMGI1MDNhODdkZDAzODVlMTgzOTA4ODQ2NzBmZWEwNGMyNjcuLjU4M2Y5
Yzg1NTU2NzE3OGNjZTcyY2FkNDQ3OTI0Y2Y4YmMzYzRlNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5jcHAKQEAgLTQzLDggKzQzLDkgQEAgR2FtZXBhZDo6R2Ft
ZXBhZChjb25zdCBQbGF0Zm9ybUdhbWVwYWQmIHBsYXRmb3JtR2FtZXBhZCkKICAgICAsIG1fYXhl
cyhwbGF0Zm9ybUdhbWVwYWQuYXhpc1ZhbHVlcygpLnNpemUoKSwgMC4wKQogewogICAgIHVuc2ln
bmVkIGJ1dHRvbkNvdW50ID0gcGxhdGZvcm1HYW1lcGFkLmJ1dHRvblZhbHVlcygpLnNpemUoKTsK
KyAgICBtX2J1dHRvbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShidXR0b25Db3VudCk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRvbkNvdW50OyArK2kpCi0gICAgICAgIG1fYnV0
dG9ucy5hcHBlbmQoR2FtZXBhZEJ1dHRvbjo6Y3JlYXRlKCkpOworICAgICAgICBtX2J1dHRvbnMu
dW5jaGVja2VkQXBwZW5kKEdhbWVwYWRCdXR0b246OmNyZWF0ZSgpKTsKIH0KIAogR2FtZXBhZDo6
fkdhbWVwYWQoKSA9IGRlZmF1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2dhbWVwYWQvR2FtZXBhZE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1l
cGFkL0dhbWVwYWRNYW5hZ2VyLmNwcAppbmRleCBjYzM3NDg1OGNmZWExYjI0NGMwNGJkNDFiMjk5
NDhkMjlhZWEzMDMwLi41NDNmZTQ4OTE2N2U3Y2UxM2Q0OTc2OGZjN2UxNWYzNGQwODIzNmU5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZE1hbmFnZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5j
cHAKQEAgLTc5LDE0ICs3OSwxMCBAQCB2b2lkIEdhbWVwYWRNYW5hZ2VyOjpwbGF0Zm9ybUdhbWVw
YWRDb25uZWN0ZWQoUGxhdGZvcm1HYW1lcGFkJiBwbGF0Zm9ybUdhbWVwYWQsCiAKIHZvaWQgR2Ft
ZXBhZE1hbmFnZXI6OnBsYXRmb3JtR2FtZXBhZERpc2Nvbm5lY3RlZChQbGF0Zm9ybUdhbWVwYWQm
IHBsYXRmb3JtR2FtZXBhZCkKIHsKLSAgICBWZWN0b3I8V2Vha1B0cjxET01XaW5kb3c+PiB3ZWFr
V2luZG93czsKLSAgICBmb3IgKGF1dG8qIGRvbVdpbmRvdyA6IG1fZG9tV2luZG93cykKLSAgICAg
ICAgd2Vha1dpbmRvd3MuYXBwZW5kKCpkb21XaW5kb3cpOwotCiAgICAgSGFzaFNldDxOYXZpZ2F0
b3JHYW1lcGFkKj4gbm90aWZpZWROYXZpZ2F0b3JzOwogCiAgICAgLy8gSGFuZGxlIHRoZSBkaXNj
b25uZWN0IGZvciBhbGwgRE9NV2luZG93cyB3aXRoIGV2ZW50IGxpc3RlbmVycyBhbmQgdGhlaXIg
TmF2aWdhdG9ycy4KLSAgICBmb3IgKGF1dG8mIHdpbmRvdyA6IHdlYWtXaW5kb3dzKSB7CisgICAg
Zm9yIChhdXRvJiB3aW5kb3cgOiBjb3B5VG9WZWN0b3JPZjxXZWFrUHRyPERPTVdpbmRvdz4+KG1f
ZG9tV2luZG93cykpIHsKICAgICAgICAgLy8gRXZlbnQgZGlzcGF0Y2ggbWlnaHQgaGF2ZSBtYWRl
IHRoaXMgd2luZG93IGdvIGF3YXkuCiAgICAgICAgIGlmICghd2luZG93KQogICAgICAgICAgICAg
Y29udGludWU7CkBAIC0xNDMsMTEgKzEzOSw3IEBAIHZvaWQgR2FtZXBhZE1hbmFnZXI6Om1ha2VH
YW1lcGFkVmlzaWJsZShQbGF0Zm9ybUdhbWVwYWQmIHBsYXRmb3JtR2FtZXBhZCwgSGFzaFNlCiAg
ICAgZm9yIChhdXRvKiBuYXZpZ2F0b3IgOiBuYXZpZ2F0b3JTZXQpCiAgICAgICAgIG5hdmlnYXRv
ci0+Z2FtZXBhZENvbm5lY3RlZChwbGF0Zm9ybUdhbWVwYWQpOwogCi0gICAgVmVjdG9yPFdlYWtQ
dHI8RE9NV2luZG93Pj4gd2Vha1dpbmRvd3M7Ci0gICAgZm9yIChhdXRvKiBkb21XaW5kb3cgOiBt
X2RvbVdpbmRvd3MpCi0gICAgICAgIHdlYWtXaW5kb3dzLmFwcGVuZCgqZG9tV2luZG93KTsKLQot
ICAgIGZvciAoYXV0byYgd2luZG93IDogd2Vha1dpbmRvd3MpIHsKKyAgICBmb3IgKGF1dG8mIHdp
bmRvdyA6IGNvcHlUb1ZlY3Rvck9mPFdlYWtQdHI8RE9NV2luZG93Pj4obV9kb21XaW5kb3dzKSkg
ewogICAgICAgICAvLyBFdmVudCBkaXNwYXRjaCBtaWdodCBoYXZlIG1hZGUgdGhpcyB3aW5kb3cg
Z28gYXdheS4KICAgICAgICAgaWYgKCF3aW5kb3cpCiAgICAgICAgICAgICBjb250aW51ZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAppbmRl
eCA3YWE2MzJiN2VjMDQ3YmU0NjA4YjUxYTA5NGVhMWE0ZTU3YTI2MjliLi4wYmU4YmQxMTZlYzIz
NjEyM2M3MTUzMmQ3ZWUzNmM1NmU5OTY1NDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCkBAIC0xMDIsOSArMTAyLDcgQEAgUmVmPERP
TVN0cmluZ0xpc3Q+IElEQkRhdGFiYXNlOjpvYmplY3RTdG9yZU5hbWVzKCkgY29uc3QKIHsKICAg
ICBBU1NFUlQoY2FuQ3VycmVudFRocmVhZEFjY2Vzc1RocmVhZExvY2FsRGF0YShvcmlnaW5UaHJl
YWQoKSkpOwogCi0gICAgYXV0byBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3Jl
YXRlKCk7Ci0gICAgZm9yIChhdXRvJiBuYW1lIDogbV9pbmZvLm9iamVjdFN0b3JlTmFtZXMoKSkK
LSAgICAgICAgb2JqZWN0U3RvcmVOYW1lcy0+YXBwZW5kKG5hbWUpOworICAgIGF1dG8gb2JqZWN0
U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZShtX2luZm8ub2JqZWN0U3RvcmVOYW1l
cygpKTsKICAgICBvYmplY3RTdG9yZU5hbWVzLT5zb3J0KCk7CiAgICAgcmV0dXJuIG9iamVjdFN0
b3JlTmFtZXM7CiB9CkBAIC0xNzUsMTkgKzE3MywxNiBAQCBFeGNlcHRpb25PcjxSZWY8SURCVHJh
bnNhY3Rpb24+PiBJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24oU3RyaW5nT3JWZWN0b3JPZlN0cmlu
ZwogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJGYWlsZWQg
dG8gZXhlY3V0ZSAndHJhbnNhY3Rpb24nIG9uICdJREJEYXRhYmFzZSc6IFRoZSBkYXRhYmFzZSBj
b25uZWN0aW9uIGlzIGNsb3NpbmcuIl9zIH07CiAKICAgICBWZWN0b3I8U3RyaW5nPiBvYmplY3RT
dG9yZXM7Ci0gICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPFN0cmluZz4+KHN0
b3JlTmFtZXMpKQorICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+
PihzdG9yZU5hbWVzKSkgewogICAgICAgICBvYmplY3RTdG9yZXMgPSBXVEZNb3ZlKHN0ZDo6Z2V0
PFZlY3RvcjxTdHJpbmc+PihzdG9yZU5hbWVzKSk7Ci0gICAgZWxzZQorICAgICAgICAvLyBJdCBp
cyB2YWxpZCBmb3IgamF2YXNjcmlwdCB0byBwYXNzIGluIGEgbGlzdCBvZiBvYmplY3Qgc3RvcmUg
bmFtZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGxpc3RlZCB0d2ljZSwKKyAgICAgICAgLy8gc28gd2Ug
bmVlZCB0byBwdXQgdGhlbSBhbGwgaW4gYSBzZXQgdG8gZ2V0IGEgdW5pcXVlIGxpc3QuCisgICAg
ICAgIEhhc2hTZXQ8U3RyaW5nPiBvYmplY3RTdG9yZVNldDsKKyAgICAgICAgb2JqZWN0U3RvcmVT
ZXQuYWRkKG9iamVjdFN0b3Jlcy5iZWdpbigpLCBvYmplY3RTdG9yZXMuZW5kKCkpOworICAgICAg
ICBvYmplY3RTdG9yZXMgPSBjb3B5VG9WZWN0b3Iob2JqZWN0U3RvcmVTZXQpOworICAgIH0gZWxz
ZQogICAgICAgICBvYmplY3RTdG9yZXMuYXBwZW5kKFdURk1vdmUoc3RkOjpnZXQ8U3RyaW5nPihz
dG9yZU5hbWVzKSkpOwogCi0gICAgLy8gSXQgaXMgdmFsaWQgZm9yIGphdmFzY3JpcHQgdG8gcGFz
cyBpbiBhIGxpc3Qgb2Ygb2JqZWN0IHN0b3JlIG5hbWVzIHdpdGggdGhlIHNhbWUgbmFtZSBsaXN0
ZWQgdHdpY2UsCi0gICAgLy8gc28gd2UgbmVlZCB0byBwdXQgdGhlbSBhbGwgaW4gYSBzZXQgdG8g
Z2V0IGEgdW5pcXVlIGxpc3QuCi0gICAgSGFzaFNldDxTdHJpbmc+IG9iamVjdFN0b3JlU2V0Owot
ICAgIGZvciAoYXV0byYgb2JqZWN0U3RvcmUgOiBvYmplY3RTdG9yZXMpCi0gICAgICAgIG9iamVj
dFN0b3JlU2V0LmFkZChvYmplY3RTdG9yZSk7Ci0KLSAgICBvYmplY3RTdG9yZXMgPSBjb3B5VG9W
ZWN0b3Iob2JqZWN0U3RvcmVTZXQpOwotCiAgICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZU5hbWUg
OiBvYmplY3RTdG9yZXMpIHsKICAgICAgICAgaWYgKG1faW5mby5oYXNPYmplY3RTdG9yZShvYmpl
Y3RTdG9yZU5hbWUpKQogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmgKaW5kZXggNGI5Nzg1MzY5ZDE5MGE2YjE5Njkx
ZDEzN2FlMTU2N2U1YzM3OTVkOS4uOWVhOTY0YTE2ZDUzMjdjNTAwYWJmNGUwMTE2Yzg1NzVhNGZh
NTVhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5
RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEu
aApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSA8dmFy
aWFudD4KKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZFNldC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIApAQCAtMTE3LDQxICsxMTgsNiBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKICAgICB9CiAKLSAgICB1
bnNpZ25lZCBoYXNoKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gaGFz
aENvZGVzOwotICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPiht
X3R5cGUpKTsKLSAgICAgICAgaGFzaENvZGVzLmFwcGVuZChtX2lzTnVsbCA/IDEgOiAwKTsKLSAg
ICAgICAgaGFzaENvZGVzLmFwcGVuZChtX2lzRGVsZXRlZFZhbHVlID8gMSA6IDApOwotICAgICAg
ICBzd2l0Y2ggKG1fdHlwZSkgewotICAgICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6SW52
YWxpZDoKLSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6Ok1heDoKLSAgICAgICAgY2Fz
ZSBJbmRleGVkREI6OktleVR5cGU6Ok1pbjoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TnVtYmVyOgotICAgICAgICBjYXNlIEluZGV4ZWREQjo6
S2V5VHlwZTo6RGF0ZToKLSAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoU3RyaW5nSGFzaGVy
OjpoYXNoTWVtb3J5PHNpemVvZihkb3VibGUpPigmc3RkOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKSkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpT
dHJpbmc6Ci0gICAgICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKFN0cmluZ0hhc2g6Omhhc2goc3Rk
OjpnZXQ8U3RyaW5nPihtX3ZhbHVlKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgSW5kZXhlZERCOjpLZXlUeXBlOjpCaW5hcnk6IHsKLSAgICAgICAgICAgIGF1dG8qIGRhdGEg
PSBzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSkuZGF0YSgpOwotICAgICAg
ICAgICAgaWYgKCFkYXRhKQotICAgICAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoMCk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaGFzaENvZGVzLmFwcGVuZChTdHJpbmdI
YXNoZXI6Omhhc2hNZW1vcnkoZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpB
cnJheToKLSAgICAgICAgICAgIGZvciAoYXV0byYga2V5IDogc3RkOjpnZXQ8VmVjdG9yPElEQktl
eURhdGE+PihtX3ZhbHVlKSkKLSAgICAgICAgICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKGtleS5o
YXNoKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
U3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KGhhc2hDb2Rlcy5kYXRhKCksIGhhc2hDb2Rlcy5zaXpl
KCkgKiBzaXplb2YodW5zaWduZWQpKTsKLSAgICB9Ci0KICAgICBTdHJpbmcgc3RyaW5nKCkgY29u
c3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gSW5kZXhlZERCOjpLZXlUeXBlOjpT
dHJpbmcpOwpAQCAtMTg0LDYgKzE1MCw4IEBAIHB1YmxpYzoKIAogICAgIHNpemVfdCBzaXplKCkg
Y29uc3Q7CiAKKyAgICBib29sIGlzRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9pc0Rl
bGV0ZWRWYWx1ZTsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBzdHJ1Y3QgSURCS2V5RGF0YUhh
c2hUcmFpdHM7CiAKQEAgLTE5Niw4ICsxNjQsMzUgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnZhcmlh
bnQ8VmVjdG9yPElEQktleURhdGE+LCBTdHJpbmcsIGRvdWJsZSwgVGhyZWFkU2FmZURhdGFCdWZm
ZXI+IG1fdmFsdWU7CiB9OwogCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0
IElEQktleURhdGEmIGtleURhdGEpCit7CisgICAgYWRkKGhhc2hlciwga2V5RGF0YS50eXBlKCkp
OworICAgIGFkZChoYXNoZXIsIGtleURhdGEuaXNOdWxsKCkpOworICAgIGFkZChoYXNoZXIsIGtl
eURhdGEuaXNEZWxldGVkVmFsdWUoKSk7CisgICAgc3dpdGNoIChrZXlEYXRhLnR5cGUoKSkgewor
ICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpJbnZhbGlkOgorICAgIGNhc2UgSW5kZXhlZERC
OjpLZXlUeXBlOjpNYXg6CisgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6Ok1pbjoKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6Ok51bWJlcjoKKyAgICBjYXNl
IEluZGV4ZWREQjo6S2V5VHlwZTo6RGF0ZToKKyAgICAgICAgYWRkKGhhc2hlciwga2V5RGF0YS5u
dW1iZXIoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpT
dHJpbmc6CisgICAgICAgIGFkZChoYXNoZXIsIGtleURhdGEuc3RyaW5nKCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6QmluYXJ5OiB7CisgICAgICAgIGFk
ZChoYXNoZXIsIGtleURhdGEuYmluYXJ5KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBJbmRleGVkREI6OktleVR5cGU6OkFycmF5OgorICAgICAgICBhZGQoaGFzaGVyLCBrZXlE
YXRhLmFycmF5KCkpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKIHN0cnVjdCBJREJLZXlE
YXRhSGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgSURCS2V5RGF0YSYgYSkg
eyByZXR1cm4gYS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBJREJL
ZXlEYXRhJiBhKSB7IHJldHVybiBjb21wdXRlSGFzaChhKTsgfQogICAgIHN0YXRpYyBib29sIGVx
dWFsKGNvbnN0IElEQktleURhdGEmIGEsIGNvbnN0IElEQktleURhdGEmIGIpIHsgcmV0dXJuIGEg
PT0gYjsgfQogICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxl
dGVkID0gZmFsc2U7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IDE0MzUxNDBhNWNiNGExYTFkNDA3YTJkYjI5ZDE1
YmRmMmQ1MmMwYjYuLmNlNjNjNmE1NmIxNGQ1YmUwMzIyNTczNzI1MzIyYjgyZjBkZGRkMDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZS5jcHAKQEAgLTEyNiwxNCArMTI2LDExIEBAIFJlZjxET01TdHJpbmdMaXN0PiBJREJPYmplY3RT
dG9yZTo6aW5kZXhOYW1lcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNhbkN1cnJlbnRUaHJlYWRB
Y2Nlc3NUaHJlYWRMb2NhbERhdGEobV90cmFuc2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVh
ZCgpKSk7CiAKLSAgICBhdXRvIGluZGV4TmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsK
LQotICAgIGlmICghbV9kZWxldGVkKSB7Ci0gICAgICAgIGZvciAoYXV0byYgbmFtZSA6IG1faW5m
by5pbmRleE5hbWVzKCkpCi0gICAgICAgICAgICBpbmRleE5hbWVzLT5hcHBlbmQobmFtZSk7Ci0g
ICAgICAgIGluZGV4TmFtZXMtPnNvcnQoKTsKLSAgICB9CisgICAgaWYgKG1fZGVsZXRlZCkKKyAg
ICAgICAgcmV0dXJuIERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogCisgICAgYXV0byBpbmRleE5h
bWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKG1faW5mby5pbmRleE5hbWVzKCkpOworICAgIGlu
ZGV4TmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gaW5kZXhOYW1lczsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCmluZGV4
IDZjMTEyMWI3MzEwZjczN2Y3Yjk1YmVjZWU4NDU0ZTZhYzUwZGYyYjYuLjFiNGM4Yjk3MWJlNjcz
M2VmMzU2YjA5YWRkOWIzMjBiZTQ2OTVlNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKQEAgLTEyMSwxMiArMTIxLDggQEAg
UmVmPERPTVN0cmluZ0xpc3Q+IElEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZU5hbWVzKCkgY29u
c3QKIHsKICAgICBBU1NFUlQoY2FuQ3VycmVudFRocmVhZEFjY2Vzc1RocmVhZExvY2FsRGF0YSht
X2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogCi0gICAgY29uc3QgVmVjdG9yPFN0cmluZz4g
bmFtZXMgPSBpc1ZlcnNpb25DaGFuZ2UoKSA/IG1fZGF0YWJhc2UtPmluZm8oKS5vYmplY3RTdG9y
ZU5hbWVzKCkgOiBtX2luZm8ub2JqZWN0U3RvcmVzKCk7Ci0KLSAgICBSZWY8RE9NU3RyaW5nTGlz
dD4gb2JqZWN0U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwotICAgIGZvciAo
YXV0byYgbmFtZSA6IG5hbWVzKQotICAgICAgICBvYmplY3RTdG9yZU5hbWVzLT5hcHBlbmQobmFt
ZSk7Ci0KKyAgICBWZWN0b3I8U3RyaW5nPiBuYW1lcyA9IGlzVmVyc2lvbkNoYW5nZSgpID8gbV9k
YXRhYmFzZS0+aW5mbygpLm9iamVjdFN0b3JlTmFtZXMoKSA6IG1faW5mby5vYmplY3RTdG9yZXMo
KTsKKyAgICBhdXRvIG9iamVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoV1RG
TW92ZShuYW1lcykpOwogICAgIG9iamVjdFN0b3JlTmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4g
b2JqZWN0U3RvcmVOYW1lczsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCmluZGV4IDE5YTA2OWUyM2Iz
OWRiYjRhNzA2NWQ4ZGU3OGQ3ZWU0OTNjNjk4MTguLmI4MjVlYzgwMDUxNDgwMjhlMmIwN2IxOWRj
NzgzOTJhNDNhOGNiYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFj
b250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcApAQCAtNTU1LDExICs1NTUsMTAg
QEAgYm9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6c2hvd01lZGlhQ29udHJvbHNDb250ZXh0TWVudShI
VE1MRWxlbWVudCYgdGFyZ2V0LCBTdHJpbmcKIAogICAgIGlmIChvcHRpb25zSlNPTk9iamVjdC0+
Z2V0Qm9vbGVhbigiaW5jbHVkZUxhbmd1YWdlcyJfcykudmFsdWVfb3IoZmFsc2UpKSB7CiAgICAg
ICAgIGlmIChhdXRvKiBhdWRpb1RyYWNrcyA9IG1lZGlhRWxlbWVudC5hdWRpb1RyYWNrcygpOyBh
dWRpb1RyYWNrcyAmJiBhdWRpb1RyYWNrcy0+bGVuZ3RoKCkgPiAxKSB7Ci0gICAgICAgICAgICBW
ZWN0b3I8TWVudUl0ZW0+IGxhbmd1YWdlTWVudUl0ZW1zOwotCiAgICAgICAgICAgICBhdXRvJiBj
YXB0aW9uUHJlZmVyZW5jZXMgPSBwYWdlLT5ncm91cCgpLmVuc3VyZUNhcHRpb25QcmVmZXJlbmNl
cygpOwotICAgICAgICAgICAgZm9yIChhdXRvJiBhdWRpb1RyYWNrIDogY2FwdGlvblByZWZlcmVu
Y2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUoYXVkaW9UcmFja3MpKQotICAgICAgICAgICAgICAg
IGxhbmd1YWdlTWVudUl0ZW1zLmFwcGVuZChjcmVhdGVNZW51SXRlbShhdWRpb1RyYWNrLCBjYXB0
aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFjayhhdWRpb1RyYWNrLmdldCgpKSwgYXVk
aW9UcmFjay0+ZW5hYmxlZCgpKSk7CisgICAgICAgICAgICBhdXRvIGxhbmd1YWdlTWVudUl0ZW1z
ID0gY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUoYXVkaW9UcmFja3Mp
Lm1hcChbJl0oYXV0byYgYXVkaW9UcmFjaykgeworICAgICAgICAgICAgICAgIHJldHVybiBjcmVh
dGVNZW51SXRlbShhdWRpb1RyYWNrLCBjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JU
cmFjayhhdWRpb1RyYWNrLmdldCgpKSwgYXVkaW9UcmFjay0+ZW5hYmxlZCgpKTsKKyAgICAgICAg
ICAgIH0pOwogCiAgICAgICAgICAgICBpZiAoIWxhbmd1YWdlTWVudUl0ZW1zLmlzRW1wdHkoKSkK
ICAgICAgICAgICAgICAgICBpdGVtcy5hcHBlbmQoY3JlYXRlU3VibWVudShXRUJfVUlfU1RSSU5H
X0tFWSgiTGFuZ3VhZ2VzIiwgIkxhbmd1YWdlcyAoTWVkaWEgQ29udHJvbHMgTWVudSkiLCAiTGFu
Z3VhZ2VzIG1lZGlhIGNvbnRyb2xzIGNvbnRleHQgbWVudSB0aXRsZSIpLCAiZ2xvYmUiX3MsIFdU
Rk1vdmUobGFuZ3VhZ2VNZW51SXRlbXMpKSk7CkBAIC01NjgsMTUgKzU2NywxMyBAQCBib29sIE1l
ZGlhQ29udHJvbHNIb3N0OjpzaG93TWVkaWFDb250cm9sc0NvbnRleHRNZW51KEhUTUxFbGVtZW50
JiB0YXJnZXQsIFN0cmluZwogCiAgICAgaWYgKG9wdGlvbnNKU09OT2JqZWN0LT5nZXRCb29sZWFu
KCJpbmNsdWRlU3VidGl0bGVzIl9zKS52YWx1ZV9vcihmYWxzZSkpIHsKICAgICAgICAgaWYgKGF1
dG8qIHRleHRUcmFja3MgPSBtZWRpYUVsZW1lbnQudGV4dFRyYWNrcygpOyB0ZXh0VHJhY2tzICYm
IHRleHRUcmFja3MtPmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBWZWN0b3I8TWVudUl0ZW0+IHN1
YnRpdGxlTWVudUl0ZW1zOwotCiAgICAgICAgICAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMg
PSBwYWdlLT5ncm91cCgpLmVuc3VyZUNhcHRpb25QcmVmZXJlbmNlcygpOwogICAgICAgICAgICAg
YXV0byBzb3J0ZWRUZXh0VHJhY2tzID0gY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlz
dEZvck1lbnUodGV4dFRyYWNrcywgeyBUZXh0VHJhY2s6OktpbmQ6OlN1YnRpdGxlcywgVGV4dFRy
YWNrOjpLaW5kOjpDYXB0aW9ucywgVGV4dFRyYWNrOjpLaW5kOjpEZXNjcmlwdGlvbnMgfSk7CiAg
ICAgICAgICAgICBib29sIGFsbFRyYWNrc0Rpc2FibGVkID0gbm90Rm91bmQgPT0gc29ydGVkVGV4
dFRyYWNrcy5maW5kSWYoW10gKGNvbnN0IGF1dG8mIHRleHRUcmFjaykgewogICAgICAgICAgICAg
ICAgIHJldHVybiB0ZXh0VHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmc7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGJvb2wgdXNlc0F1dG9tYXRpY1RyYWNrID0g
Y2FwdGlvblByZWZlcmVuY2VzLmNhcHRpb25EaXNwbGF5TW9kZSgpID09IENhcHRpb25Vc2VyUHJl
ZmVyZW5jZXM6OkF1dG9tYXRpYyAmJiBhbGxUcmFja3NEaXNhYmxlZDsKLSAgICAgICAgICAgIGZv
ciAoYXV0byYgdGV4dFRyYWNrIDogc29ydGVkVGV4dFRyYWNrcykgeworICAgICAgICAgICAgYXV0
byBzdWJ0aXRsZU1lbnVJdGVtcyA9IHNvcnRlZFRleHRUcmFja3MubWFwKFsmXShhdXRvJiB0ZXh0
VHJhY2spIHsKICAgICAgICAgICAgICAgICBib29sIGNoZWNrZWQgPSBmYWxzZTsKICAgICAgICAg
ICAgICAgICBpZiAoYWxsVHJhY2tzRGlzYWJsZWQgJiYgdGV4dFRyYWNrID09ICZUZXh0VHJhY2s6
OmNhcHRpb25NZW51T2ZmSXRlbSgpICYmIChjYXB0aW9uUHJlZmVyZW5jZXMuY2FwdGlvbkRpc3Bs
YXlNb2RlKCkgPT0gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6Rm9yY2VkT25seSB8fCBjYXB0aW9u
UHJlZmVyZW5jZXMuY2FwdGlvbkRpc3BsYXlNb2RlKCkgPT0gQ2FwdGlvblVzZXJQcmVmZXJlbmNl
czo6TWFudWFsKSkKICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IHRydWU7CkBAIC01ODQs
OCArNTgxLDggQEAgYm9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6c2hvd01lZGlhQ29udHJvbHNDb250
ZXh0TWVudShIVE1MRWxlbWVudCYgdGFyZ2V0LCBTdHJpbmcKICAgICAgICAgICAgICAgICAgICAg
Y2hlY2tlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXVzZXNBdXRvbWF0aWNU
cmFjayAmJiB0ZXh0VHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmcpCiAg
ICAgICAgICAgICAgICAgICAgIGNoZWNrZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHN1YnRp
dGxlTWVudUl0ZW1zLmFwcGVuZChjcmVhdGVNZW51SXRlbSh0ZXh0VHJhY2ssIGNhcHRpb25QcmVm
ZXJlbmNlcy5kaXNwbGF5TmFtZUZvclRyYWNrKHRleHRUcmFjay5nZXQoKSksIGNoZWNrZWQpKTsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTWVudUl0ZW0odGV4
dFRyYWNrLCBjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFjayh0ZXh0VHJhY2su
Z2V0KCkpLCBjaGVja2VkKTsKKyAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICBpZiAoIXN1
YnRpdGxlTWVudUl0ZW1zLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBpdGVtcy5hcHBlbmQo
Y3JlYXRlU3VibWVudShXRUJfVUlfU1RSSU5HX0tFWSgiU3VidGl0bGVzIiwgIlN1YnRpdGxlcyAo
TWVkaWEgQ29udHJvbHMgTWVudSkiLCAiU3VidGl0bGVzIG1lZGlhIGNvbnRyb2xzIGNvbnRleHQg
bWVudSB0aXRsZSIpLCAiY2FwdGlvbnMuYnViYmxlIl9zLCBXVEZNb3ZlKHN1YnRpdGxlTWVudUl0
ZW1zKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9N
ZWRpYVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlh
U291cmNlLmNwcAppbmRleCA5MTI3NDdmNDA2YzI5NTk0OTk3M2I1YmIxMzQ5ZGJjYTY3NDFjMTM1
Li5hMmU2NThhOTJmOTk3ZDdmNGI0M2UxNzAzZjRhMGUwOTQ5MTdiMGUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcApAQCAtMTA1
MSwxMCArMTA1MSw5IEBAIHZvaWQgTWVkaWFTb3VyY2U6Om9uUmVhZHlTdGF0ZUNoYW5nZShSZWFk
eVN0YXRlIG9sZFN0YXRlLCBSZWFkeVN0YXRlIG5ld1N0YXRlKQogCiBWZWN0b3I8UGxhdGZvcm1U
aW1lUmFuZ2VzPiBNZWRpYVNvdXJjZTo6YWN0aXZlUmFuZ2VzKCkgY29uc3QKIHsKLSAgICBWZWN0
b3I8UGxhdGZvcm1UaW1lUmFuZ2VzPiBhY3RpdmVSYW5nZXM7Ci0gICAgZm9yIChhdXRvJiBzb3Vy
Y2VCdWZmZXIgOiAqbV9hY3RpdmVTb3VyY2VCdWZmZXJzKQotICAgICAgICBhY3RpdmVSYW5nZXMu
YXBwZW5kKHNvdXJjZUJ1ZmZlci0+YnVmZmVyZWRJbnRlcm5hbCgpLnJhbmdlcygpKTsKLSAgICBy
ZXR1cm4gYWN0aXZlUmFuZ2VzOworICAgIHJldHVybiBXVEY6Om1hcCgqbV9hY3RpdmVTb3VyY2VC
dWZmZXJzLCBbXShhdXRvJiBzb3VyY2VCdWZmZXIpIHsKKyAgICAgICAgcmV0dXJuIHNvdXJjZUJ1
ZmZlci0+YnVmZmVyZWRJbnRlcm5hbCgpLnJhbmdlcygpOworICAgIH0pOwogfQogCiBFeGNlcHRp
b25PcjxSZWY8U291cmNlQnVmZmVyUHJpdmF0ZT4+IE1lZGlhU291cmNlOjpjcmVhdGVTb3VyY2VC
dWZmZXJQcml2YXRlKGNvbnN0IENvbnRlbnRUeXBlJiBpbmNvbWluZ1R5cGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1hcC5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9TYW1wbGVNYXAuaAppbmRleCBlYWY0OTMxNTk3
ZDI2ODUyM2M2NjdiZDljZGNjNGNlYTY1NDMzNjk1Li5hZjFlMTA0NTgxNzg3ZjE1ZjZmMWYzODVi
MjU3MjQ0NGQ4ODU5NWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c291cmNlL1NhbXBsZU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3Vy
Y2UvU2FtcGxlTWFwLmgKQEAgLTkxLDYgKzkxLDcgQEAgcHVibGljOgogICAgIGNvbnN0X3JldmVy
c2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVzLnJiZWdpbigpOyB9
CiAgICAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gbV9zYW1wbGVzLnJlbmQoKTsg
fQogICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Ft
cGxlcy5yZW5kKCk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxl
cy5zaXplKCk7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIGl0ZXJhdG9yIGZpbmRTYW1wbGVXaXRo
RGVjb2RlS2V5KGNvbnN0IEtleVR5cGUmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBpdGVyYXRvciBm
aW5kU2FtcGxlQWZ0ZXJEZWNvZGVLZXkoY29uc3QgS2V5VHlwZSYpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaAppbmRleCBm
YzZlMDczYWI5MGU3NmQxODE1Zjg4OTZiNmY2NjA5NmRmMmZkZGQ1Li40MzZiZjAxN2JjODFhY2Zi
OTRmNWU4NWI5MGY5MWNmNDViYmViZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaApAQCAtNDgsNiArNDgsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB+U291cmNlQnVmZmVyTGlzdCgpOwogCiAgICAgdW5zaWduZWQg
bG9uZyBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CisKICAgICBTb3Vy
Y2VCdWZmZXIqIGl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCkgY29uc3QgeyByZXR1cm4gKGluZGV4
IDwgbV9saXN0LnNpemUoKSkgPyBtX2xpc3RbaW5kZXhdLmdldCgpIDogbnVsbHB0cjsgfQogCiAg
ICAgdm9pZCBhZGQoUmVmPFNvdXJjZUJ1ZmZlcj4mJik7CkBAIC01OCw2ICs1OSw5IEBAIHB1Ymxp
YzoKIAogICAgIFZlY3RvcjxSZWZQdHI8U291cmNlQnVmZmVyPj46Oml0ZXJhdG9yIGJlZ2luKCkg
eyByZXR1cm4gbV9saXN0LmJlZ2luKCk7IH0KICAgICBWZWN0b3I8UmVmUHRyPFNvdXJjZUJ1ZmZl
cj4+OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX2xpc3QuZW5kKCk7IH0KKyAgICBWZWN0b3I8
UmVmUHRyPFNvdXJjZUJ1ZmZlcj4+Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIG1fbGlzdC5iZWdpbigpOyB9CisgICAgVmVjdG9yPFJlZlB0cjxTb3VyY2VCdWZmZXI+Pjo6
Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LmVuZCgpOyB9CisgICAg
c2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CiAKICAgICAvLyBF
dmVudFRhcmdldCBpbnRlcmZhY2UKICAgICBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdl
dEludGVyZmFjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFNvdXJjZUJ1ZmZlckxpc3RFdmVudFRh
cmdldEludGVyZmFjZVR5cGU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
c3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVj
aC9TcGVlY2hTeW50aGVzaXMuY3BwCmluZGV4IGVhZjNhMmUxZTc5OGE0ODFmNzY4YjMzYzVmZDI5
ZDNjN2NiYWIzYWUuLjgyYzFhM2EwYzA3MjU1YzFlODBkYTYxZDU5MGJhOWM5NDFjYzA2OWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzLmNw
cApAQCAtOTMsOSArOTMsMTAgQEAgY29uc3QgVmVjdG9yPFJlZjxTcGVlY2hTeW50aGVzaXNWb2lj
ZT4+JiBTcGVlY2hTeW50aGVzaXM6OmdldFZvaWNlcygpCiAgICAgICAgIHJldHVybiBtX3ZvaWNl
TGlzdDsKIAogICAgIC8vIElmIHRoZSB2b2ljZUxpc3QgaXMgZW1wdHksIHRoYXQncyB0aGUgY3Vl
IHRvIGdldCB0aGUgdm9pY2VzIGZyb20gdGhlIHBsYXRmb3JtIGFnYWluLgotICAgIGZvciAoYXV0
byYgdm9pY2UgOiBtX3NwZWVjaFN5bnRoZXNpc0NsaWVudCA/IG1fc3BlZWNoU3ludGhlc2lzQ2xp
ZW50LT52b2ljZUxpc3QoKSA6IGVuc3VyZVBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIoKS52b2lj
ZUxpc3QoKSkKLSAgICAgICAgbV92b2ljZUxpc3QuYXBwZW5kKFNwZWVjaFN5bnRoZXNpc1ZvaWNl
OjpjcmVhdGUoKnZvaWNlKSk7Ci0KKyAgICBhdXRvJiB2b2ljZUxpc3QgPSBtX3NwZWVjaFN5bnRo
ZXNpc0NsaWVudCA/IG1fc3BlZWNoU3ludGhlc2lzQ2xpZW50LT52b2ljZUxpc3QoKSA6IGVuc3Vy
ZVBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIoKS52b2ljZUxpc3QoKTsKKyAgICBtX3ZvaWNlTGlz
dCA9IHZvaWNlTGlzdC5tYXAoW10oYXV0byYgdm9pY2UpIHsKKyAgICAgICAgcmV0dXJuIFNwZWVj
aFN5bnRoZXNpc1ZvaWNlOjpjcmVhdGUoKnZvaWNlKTsKKyAgICB9KTsKICAgICByZXR1cm4gbV92
b2ljZUxpc3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNo
L2NvY29hL1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrLm1tIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9zcGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2subW0KaW5kZXggZjFiOTY5NTgw
NTdkMmZlNjA0NGQyYzdiMjU5ZGI2YzVjZWI0NGVmZS4uYTVlODVhZjgyOWJjMGRkZGVmNjJjNjFh
NGY2YzlmMmNmMmFkNmNmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVl
Y2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2subW0KKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9zcGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2subW0KQEAgLTEyOCw5
ICsxMjgsOCBAQCAtICh2b2lkKWNhbGxiYWNrV2l0aFRyYW5zY3JpcHRpb25zOihOU0FycmF5PFNG
VHJhbnNjcmlwdGlvbiAqPiAqKXRyYW5zY3JpcHRpb25zCiAgICAgICAgIGlmIChhbHRlcm5hdGl2
ZXMuc2l6ZSgpID09IF9tYXhBbHRlcm5hdGl2ZXMpCiAgICAgICAgICAgICBicmVhazsKICAgICB9
Ci0gICAgVmVjdG9yPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0RGF0YT4gZGF0YXM7Ci0gICAgZGF0
YXMuYXBwZW5kKFNwZWVjaFJlY29nbml0aW9uUmVzdWx0RGF0YSB7IFdURk1vdmUoYWx0ZXJuYXRp
dmVzKSwgYm9vbChpc0ZpbmFsKSB9KTsKLSAgICBfZGVsZWdhdGVDYWxsYmFjayhTcGVlY2hSZWNv
Z25pdGlvblVwZGF0ZTo6Y3JlYXRlUmVzdWx0KF9pZGVudGlmaWVyLCBXVEZNb3ZlKGRhdGFzKSkp
OworICAgIFNwZWVjaFJlY29nbml0aW9uUmVzdWx0RGF0YSBkYXRhIHsgV1RGTW92ZShhbHRlcm5h
dGl2ZXMpLCAhIWlzRmluYWwgfTsKKyAgICBfZGVsZWdhdGVDYWxsYmFjayhTcGVlY2hSZWNvZ25p
dGlvblVwZGF0ZTo6Y3JlYXRlUmVzdWx0KF9pZGVudGlmaWVyLCB7IFdURk1vdmUoZGF0YSkgfSkp
OwogfQogCiAtICh2b2lkKWF1ZGlvU2FtcGxlc0F2YWlsYWJsZTooQ01TYW1wbGVCdWZmZXJSZWYp
c2FtcGxlQnVmZmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9j
b2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFza01vY2subW0gYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFza01vY2subW0KaW5kZXggYmM1
YzYyMTliNWRhZGMzYjFjZGM1OTBkNjVjODk3YjcyNTBiMWUyMS4uOTYzZmI0N2M0Yzg1YWEwNjA1
YTJkYWJjNzE5ZTU2NzRjMjYwYWJmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9zcGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2tNb2NrLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrTW9j
ay5tbQpAQCAtNjMsMTEgKzYzLDkgQEAgLSAodm9pZClhdWRpb1NhbXBsZXNBdmFpbGFibGU6KENN
U2FtcGxlQnVmZmVyUmVmKXNhbXBsZUJ1ZmZlcgogICAgIH0KIAogICAgIC8vIEZha2Ugc29tZSBy
ZWNvZ25pdGlvbiByZXN1bHRzLgotICAgIFZlY3RvcjxTcGVlY2hSZWNvZ25pdGlvbkFsdGVybmF0
aXZlRGF0YT4gYWx0ZXJuYXRpdmVzOwotICAgIGFsdGVybmF0aXZlcy5hcHBlbmQoU3BlZWNoUmVj
b2duaXRpb25BbHRlcm5hdGl2ZURhdGEgeyAiVGVzdCIsIDEuMCB9KTsKLSAgICBWZWN0b3I8U3Bl
ZWNoUmVjb2duaXRpb25SZXN1bHREYXRhPiBkYXRhczsKLSAgICBkYXRhcy5hcHBlbmQoU3BlZWNo
UmVjb2duaXRpb25SZXN1bHREYXRhIHsgV1RGTW92ZShhbHRlcm5hdGl2ZXMpLCB0cnVlICB9KTsK
LSAgICBfZGVsZWdhdGVDYWxsYmFjayhTcGVlY2hSZWNvZ25pdGlvblVwZGF0ZTo6Y3JlYXRlUmVz
dWx0KF9pZGVudGlmaWVyLCBXVEZNb3ZlKGRhdGFzKSkpOworICAgIFNwZWVjaFJlY29nbml0aW9u
QWx0ZXJuYXRpdmVEYXRhIGFsdGVybmF0aXZlIHsgIlRlc3QiLCAxLjAgfTsKKyAgICBTcGVlY2hS
ZWNvZ25pdGlvblJlc3VsdERhdGEgZGF0YSB7IHsgV1RGTW92ZShhbHRlcm5hdGl2ZSkgfSwgdHJ1
ZSB9OworICAgIF9kZWxlZ2F0ZUNhbGxiYWNrKFNwZWVjaFJlY29nbml0aW9uVXBkYXRlOjpjcmVh
dGVSZXN1bHQoX2lkZW50aWZpZXIsIHsgV1RGTW92ZShkYXRhKSB9KSk7CiAKICAgICBpZiAoIV9k
b011bHRpcGxlUmVjb2duaXRpb25zKQogICAgICAgICBbc2VsZiBhYm9ydF07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAppbmRleCBlMzU5
YTA0M2IyZTNjZjM5ZjljMjZiYzU5ZTk4ZjEwNWUxMzJjMTA1Li44YmNlNjY3MDY2YTNmNzc2ZjBl
YWJhOTY2YjgxYTc0NmE5NzVlMzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRp
b24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKQEAgLTE2NCwxMCArMTY0LDggQEAgc3RhdGljIGlu
bGluZSBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kRnVuYyhjb25zdCBUcmFuc2Zvcm1PcGVyYXRp
b25zJiBmcm9tLCBjb24KICAgICBpZiAoY29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24gPT0gQ29t
cG9zaXRlT3BlcmF0aW9uOjpBZGQpIHsKICAgICAgICAgQVNTRVJUKGNvbnRleHQucHJvZ3Jlc3Mg
PT0gMS4wKTsKICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyByZXN1bHRPcGVyYXRpb25zOwot
ICAgICAgICBmb3IgKGF1dG8gb3BlcmF0aW9uIDogZnJvbS5vcGVyYXRpb25zKCkpCi0gICAgICAg
ICAgICByZXN1bHRPcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQob3BlcmF0aW9uKTsKLSAg
ICAgICAgZm9yIChhdXRvIG9wZXJhdGlvbiA6IHRvLm9wZXJhdGlvbnMoKSkKLSAgICAgICAgICAg
IHJlc3VsdE9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChvcGVyYXRpb24pOworICAgICAg
ICByZXN1bHRPcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmRWZWN0b3IoZnJvbS5vcGVyYXRp
b25zKCkpOworICAgICAgICByZXN1bHRPcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmRWZWN0
b3IodG8ub3BlcmF0aW9ucygpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdE9wZXJhdGlvbnM7CiAg
ICAgfQogICAgIGF1dG8gYm94U2l6ZSA9IGlzPFJlbmRlckJveD4oY29udGV4dC5jbGllbnQtPnJl
bmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PigqY29udGV4dC5jbGllbnQtPnJlbmRlcmVy
KCkpLmJvcmRlckJveFJlY3QoKS5zaXplKCkgOiBMYXlvdXRTaXplKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hbmltYXRpb24vRG9jdW1lbnRUaW1lbGluZXNDb250cm9sbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXIuY3Bw
CmluZGV4IGI1ZmQyYWVmMTAwMDEyZGE5YzRiZGIyMWU3YWQwNDFhMzY2NDE2YmYuLjcwOTQ1M2Jj
NjYyNTJmOTU5ODI0YmE5NGVjYTdhMzMwMDhjOWNhM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXIuY3BwCkBAIC05
OCw5ICs5OCw3IEBAIHZvaWQgRG9jdW1lbnRUaW1lbGluZXNDb250cm9sbGVyOjp1cGRhdGVBbmlt
YXRpb25zQW5kU2VuZEV2ZW50cyhSZWR1Y2VkUmVzb2x1dGlvCiAgICAgQVNTRVJUKCFtX3RpbWVs
aW5lcy5oYXNOdWxsUmVmZXJlbmNlcygpKTsKIAogICAgIC8vIFdlIG5lZWQgdG8gY29weSBtX3Rp
bWVsaW5lcyBiZWZvcmUgaXRlcmF0aW5nIG92ZXIgaXRzIG1lbWJlcnMgc2luY2UgdGhlIHN0ZXBz
IGluIHRoaXMgcHJvY2VkdXJlIG1heSBtdXRhdGUgbV90aW1lbGluZXMuCi0gICAgVmVjdG9yPFJl
ZjxEb2N1bWVudFRpbWVsaW5lPj4gcHJvdGVjdGVkVGltZWxpbmVzOwotICAgIGZvciAoYXV0byYg
dGltZWxpbmUgOiBtX3RpbWVsaW5lcykKLSAgICAgICAgcHJvdGVjdGVkVGltZWxpbmVzLmFwcGVu
ZCh0aW1lbGluZSk7CisgICAgYXV0byBwcm90ZWN0ZWRUaW1lbGluZXMgPSBjb3B5VG9WZWN0b3JP
ZjxSZWY8RG9jdW1lbnRUaW1lbGluZT4+KG1fdGltZWxpbmVzKTsKIAogICAgIC8vIFdlIG5lZWQg
dG8gZnJlZXplIHRoZSBjdXJyZW50IHRpbWUgZXZlbiBpZiBubyBhbmltYXRpb24gaXMgcnVubmlu
Zy4KICAgICAvLyBkb2N1bWVudC50aW1lbGluZS5jdXJyZW50VGltZSBtYXkgYmUgY2FsbGVkIGZy
b20gYSByQUYgY2FsbGJhY2sgYW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRp
b24vS2V5ZnJhbWVFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1l
RWZmZWN0LmNwcAppbmRleCA3N2QxZTYwZmEzMjgzMWIxMzI2YzNiMzA4NDM1Nzc3MjYwNzM5OWY1
Li5jZmU0MzJlN2RlYmUxYmVkMTU1NTY1ZDgxMmE4ZWJlODA3ZjYwMmMxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAKQEAgLTM3NSw4ICszNzUsNyBAQCBz
dGF0aWMgaW5saW5lIEV4Y2VwdGlvbk9yPHZvaWQ+IHByb2Nlc3NQcm9wZXJ0eUluZGV4ZWRLZXlm
cmFtZXMoSlNHbG9iYWxPYmplY3QmCiAgICAgICAgIGNvbXB1dGVNaXNzaW5nS2V5ZnJhbWVPZmZz
ZXRzKHByb3BlcnR5S2V5ZnJhbWVzKTsKIAogICAgICAgICAvLyA3LiBBZGQga2V5ZnJhbWVzIGlu
IHByb3BlcnR5IGtleWZyYW1lcyB0byBwcm9jZXNzZWQga2V5ZnJhbWVzLgotICAgICAgICBmb3Ig
KGF1dG8mIGtleWZyYW1lIDogcHJvcGVydHlLZXlmcmFtZXMpCi0gICAgICAgICAgICBwYXJzZWRL
ZXlmcmFtZXMuYXBwZW5kKFdURk1vdmUoa2V5ZnJhbWUpKTsKKyAgICAgICAgcGFyc2VkS2V5ZnJh
bWVzLmFwcGVuZFZlY3Rvcihwcm9wZXJ0eUtleWZyYW1lcyk7CiAgICAgfQogCiAgICAgLy8gMy4g
U29ydCBwcm9jZXNzZWQga2V5ZnJhbWVzIGJ5IHRoZSBjb21wdXRlZCBrZXlmcmFtZSBvZmZzZXQg
b2YgZWFjaCBrZXlmcmFtZSBpbiBpbmNyZWFzaW5nIG9yZGVyLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uLmNwcAppbmRleCA1MzQ5
ZWYzOGZlNjkwNjRkZDQ1M2ZkNjhkN2RjNmE4ZWU3NzNkOWVjLi5jMDVjZDg5NDE1ZmY0MTIwNGUz
YzNjOGM3NzNmNDhkMTEzNjNjMDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uLmNwcApAQCAtNDYsOCArNDYsNyBAQCBDb250
ZW50RXh0ZW5zaW9uOjpDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwg
UmVmPENvbXBpbGVkQ29udGVudAogICAgICwgbV9leHRlbnNpb25CYXNlVVJMKFdURk1vdmUoZXh0
ZW5zaW9uQmFzZVVSTCkpCiB7CiAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlciBpbnRlcnByZXRl
cihtX2NvbXBpbGVkRXh0ZW5zaW9uLT51cmxGaWx0ZXJzQnl0ZWNvZGUoKSk7Ci0gICAgZm9yICh1
aW50NjRfdCBhY3Rpb24gOiBpbnRlcnByZXRlci5hY3Rpb25zTWF0Y2hpbmdFdmVyeXRoaW5nKCkp
Ci0gICAgICAgIG1fdW5pdmVyc2FsQWN0aW9ucy5hcHBlbmQoYWN0aW9uKTsKKyAgICBtX3VuaXZl
cnNhbEFjdGlvbnMgPSBjb3B5VG9WZWN0b3IoaW50ZXJwcmV0ZXIuYWN0aW9uc01hdGNoaW5nRXZl
cnl0aGluZygpKTsKIAogICAgIGlmIChzaG91bGRDb21waWxlQ1NTID09IFNob3VsZENvbXBpbGVD
U1M6OlllcykKICAgICAgICAgY29tcGlsZUdsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVldCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oCmluZGV4IGJiMTI3M2E1ZmQzZWU4ZTY4ODBiYTc2N2Fm
OTI5MTdlYmRkYTc0OGYuLmY5YTc2MDYwNDA4OWIwY2UyZjY5Zjg3Njg2NTRmMTI2ODIzN2E2N2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgKQEAgLTU4LDYgKzU4LDcgQEAgcHVibGljOgog
ICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9
CiAgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9CiAgICAg
aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV92YWx1ZXMuZW5kKCk7IH0KKyAgICBzaXplX3Qgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQogCiAgICAgdm9pZCBhcHBlbmQo
UmVmPENTU1ZhbHVlPiYmKTsKICAgICB2b2lkIHByZXBlbmQoUmVmPENTU1ZhbHVlPiYmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmNwcAppbmRl
eCA2YWI1Y2I2NzRkNDE1M2Q4MjI1MmYyNTg3ZWU0NmZjZjVhYWM4YzRhLi44MGY2OWU2MGQ1NDNm
MTM2YjUxMjM1OWRiMDQ2ODUyNDU0NWY1YmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwCkBAIC02MjAsMTUgKzYyMCwxMiBAQCB2b2lk
IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpob2lzdENoaWxkcmVuV2l0aE9wZXJhdG9yKENhbGNPcGVy
YXRvciBvcCkKIAogICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gbmV3Q2hp
bGRyZW47CiAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pIHsKLSAgICAgICAgaWYg
KGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZCkgJiYgZG93bmNhc3Q8Q1NTQ2FsY09wZXJh
dGlvbk5vZGU+KGNoaWxkLmdldCgpKS5jYWxjT3BlcmF0b3IoKSA9PSBvcCkgewotICAgICAgICAg
ICAgYXV0byYgY2hpbGRyZW4gPSBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQu
Z2V0KCkpLmNoaWxkcmVuKCk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNoaWxkVG9Nb3ZlIDog
Y2hpbGRyZW4pCi0gICAgICAgICAgICAgICAgbmV3Q2hpbGRyZW4uYXBwZW5kKFdURk1vdmUoY2hp
bGRUb01vdmUpKTsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIGlmIChpczxDU1NDYWxjT3BlcmF0
aW9uTm9kZT4oY2hpbGQpICYmIGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZC5n
ZXQoKSkuY2FsY09wZXJhdG9yKCkgPT0gb3ApCisgICAgICAgICAgICBuZXdDaGlsZHJlbi5hcHBl
bmRWZWN0b3IoZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKS5jaGls
ZHJlbigpKTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgbmV3Q2hpbGRyZW4uYXBwZW5kKFdU
Rk1vdmUoY2hpbGQpKTsKICAgICB9Ci0gICAgCi0gICAgbmV3Q2hpbGRyZW4uc2hyaW5rVG9GaXQo
KTsKKyAgICBBU1NFUlQobmV3Q2hpbGRyZW4uY2FwYWNpdHkoKSA9PSBuZXdDaGlsZHJlbi5zaXpl
KCkpOwogICAgIG1fY2hpbGRyZW4gPSBXVEZNb3ZlKG5ld0NoaWxkcmVuKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VySW1wbC5jcHAKaW5kZXggYzRlZGFhMDY0M2Ri
NDJhYWM0ZjQ1Nzc2ODBiMWM3OTEwNWMzZWY4My4uMjUyOWQxZWNkNTIzMGIxZjU1MDc5MTc2ZjQ5
MGE5MTBjMmYzZWE0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQ
YXJzZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlcklt
cGwuY3BwCkBAIC04ODgsNyArODg4LDcgQEAgUmVmUHRyPFN0eWxlUnVsZUNvbnRhaW5lcj4gQ1NT
UGFyc2VySW1wbDo6Y29uc3VtZUNvbnRhaW5lclJ1bGUoQ1NTUGFyc2VyVG9rZW5SYW4KICAgICBj
b25zdW1lUnVsZUxpc3QoYmxvY2ssIFJlZ3VsYXJSdWxlTGlzdCwgWyZydWxlc10oUmVmUHRyPFN0
eWxlUnVsZUJhc2U+IHJ1bGUpIHsKICAgICAgICAgcnVsZXMuYXBwZW5kKHJ1bGUpOwogICAgIH0p
OwotICAgIHJ1bGVzLnNocmlua1RvRml0KCk7CisgICAgQVNTRVJUKHJ1bGVzLmNhcGFjaXR5KCkg
PT0gcnVsZXMuc2l6ZSgpKTsKIAogICAgIGlmIChtX29ic2VydmVyV3JhcHBlcikKICAgICAgICAg
bV9vYnNlcnZlcldyYXBwZXItPm9ic2VydmVyKCkuZW5kUnVsZUJvZHkobV9vYnNlcnZlcldyYXBw
ZXItPmVuZE9mZnNldChibG9jaykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RP
TVN0cmluZ0xpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdMaXN0LmgKaW5kZXgg
NjljYjJkN2Y5MzJlMDBhMjY1ZTA4ZDhmZjNiMWNiNTBjMTI3N2NlNS4uMjg3M2NmY2ZjYmVjM2Q4
NmNmMjc1Mjg2YTdiZDkyMjI3Nzc2NWMxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0RPTVN0cmluZ0xpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NU3RyaW5nTGlzdC5o
CkBAIC00MCw5ICs0MCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IERPTVN0cmluZ0xpc3QpOwogICAgIH0KIAorICAgIHN0YXRpYyBSZWY8RE9NU3RyaW5nTGlzdD4g
Y3JlYXRlKFZlY3RvcjxTdHJpbmc+JiYgc3RyaW5ncykKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IERPTVN0cmluZ0xpc3QoV1RGTW92ZShzdHJpbmdzKSkpOworICAgIH0KKwog
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5ncy5pc0VtcHR5KCk7IH0K
ICAgICB2b2lkIGNsZWFyKCkgeyBtX3N0cmluZ3MuY2xlYXIoKTsgfQogICAgIHZvaWQgYXBwZW5k
KGNvbnN0IFN0cmluZyYgc3RyaW5nKSB7IG1fc3RyaW5ncy5hcHBlbmQoc3RyaW5nKTsgfQorICAg
IHZvaWQgYXBwZW5kKFN0cmluZyYmIHN0cmluZykgeyBtX3N0cmluZ3MuYXBwZW5kKFdURk1vdmUo
c3RyaW5nKSk7IH0KICAgICB2b2lkIHNvcnQoKTsKIAogICAgIC8vIEltcGxlbWVudHMgdGhlIElE
TC4KQEAgLTUzLDcgKzU5LDEwIEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBjb25zdCBWZWN0b3I8
U3RyaW5nPiYoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZ3M7IH0KIAogcHJpdmF0ZToKLSAgICBE
T01TdHJpbmdMaXN0KCkgeyB9CisgICAgRE9NU3RyaW5nTGlzdCgpID0gZGVmYXVsdDsKKyAgICBl
eHBsaWNpdCBET01TdHJpbmdMaXN0KFZlY3RvcjxTdHJpbmc+JiYgc3RyaW5ncykKKyAgICAgICAg
OiBtX3N0cmluZ3MoV1RGTW92ZShzdHJpbmdzKSkKKyAgICB7IH0KIAogICAgIFZlY3RvcjxTdHJp
bmc+IG1fc3RyaW5nczsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRQ
YXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFBhdGguY3BwCmluZGV4IDQ2ZmI2NDVl
MDUzMzc1ODFmOWZhMzQ1MjMwM2EyZmUzODBmNDZjMDYuLmVjYmNjMDBmMzZmMDc2ZTMyMGI2YWQx
NmFkMWQ5YTBiZjAzOGUyNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFBh
dGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFBhdGguY3BwCkBAIC0yNzQsMTEg
KzI3NCwxMSBAQCBWZWN0b3I8RXZlbnRUYXJnZXQqPiBFdmVudFBhdGg6OmNvbXB1dGVQYXRoVW5j
bG9zZWRUb1RhcmdldChjb25zdCBFdmVudFRhcmdldCYgdAogCiBFdmVudFBhdGg6OkV2ZW50UGF0
aChjb25zdCBWZWN0b3I8RXZlbnRUYXJnZXQqPiYgdGFyZ2V0cykKIHsKLSAgICBmb3IgKGF1dG8q
IHRhcmdldCA6IHRhcmdldHMpIHsKKyAgICBtX3BhdGggPSB0YXJnZXRzLm1hcChbJl0oYXV0byog
dGFyZ2V0KSB7CiAgICAgICAgIEFTU0VSVCh0YXJnZXQpOwogICAgICAgICBBU1NFUlQoIWlzPE5v
ZGU+KHRhcmdldCkpOwotICAgICAgICBtX3BhdGguYXBwZW5kKEV2ZW50Q29udGV4dCB7IEV2ZW50
Q29udGV4dDo6VHlwZTo6Tm9ybWFsLCBudWxscHRyLCB0YXJnZXQsICp0YXJnZXRzLmJlZ2luKCks
IDAgfSk7Ci0gICAgfQorICAgICAgICByZXR1cm4gRXZlbnRDb250ZXh0IHsgRXZlbnRDb250ZXh0
OjpUeXBlOjpOb3JtYWwsIG51bGxwdHIsIHRhcmdldCwgKnRhcmdldHMuYmVnaW4oKSwgMCB9Owor
ICAgIH0pOwogfQogCiBzdGF0aWMgTm9kZSogbW92ZU91dE9mQWxsU2hhZG93Um9vdHMoTm9kZSYg
c3RhcnRpbmdOb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Z1bGxzY3JlZW5N
YW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9GdWxsc2NyZWVuTWFuYWdlci5jcHAKaW5k
ZXggZWNlNDhlNDI2Nzk3MDk1ZGE3MDlhMDRkYTY4NmE0ZmUwYmMyOTI4Yy4uOGUxYjI2Y2FmMDQx
ODAzOTA3OTA4YmQ3NmVmMTI5Yjg4ZmYyNWU2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0Z1bGxzY3JlZW5NYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRnVsbHNj
cmVlbk1hbmFnZXIuY3BwCkBAIC0yNjUsOSArMjY1LDggQEAgdm9pZCBGdWxsc2NyZWVuTWFuYWdl
cjo6Y2FuY2VsRnVsbHNjcmVlbigpCiAKICAgICAvLyBUbyBhY2hpZXZlIHRoYXQgYWltLCByZW1v
dmUgYWxsIHRoZSBlbGVtZW50cyBmcm9tIHRoZSB0b3AgZG9jdW1lbnQncyBzdGFjayBleGNlcHQg
Zm9yIHRoZSBmaXJzdCBiZWZvcmUKICAgICAvLyBjYWxsaW5nIHdlYmtpdEV4aXRGdWxsc2NyZWVu
KCk6Ci0gICAgVmVjdG9yPFJlZlB0cjxFbGVtZW50Pj4gcmVwbGFjZW1lbnRGdWxsc2NyZWVuRWxl
bWVudFN0YWNrOwotICAgIHJlcGxhY2VtZW50RnVsbHNjcmVlbkVsZW1lbnRTdGFjay5hcHBlbmQo
dG9wRG9jdW1lbnQuZnVsbHNjcmVlbk1hbmFnZXIoKS5mdWxsc2NyZWVuRWxlbWVudCgpKTsKLSAg
ICB0b3BEb2N1bWVudC5mdWxsc2NyZWVuTWFuYWdlcigpLm1fZnVsbHNjcmVlbkVsZW1lbnRTdGFj
ay5zd2FwKHJlcGxhY2VtZW50RnVsbHNjcmVlbkVsZW1lbnRTdGFjayk7CisgICAgUmVmUHRyIGZ1
bGxzY3JlbkVsZW1lbnQgPSB0b3BEb2N1bWVudC5mdWxsc2NyZWVuTWFuYWdlcigpLmZ1bGxzY3Jl
ZW5FbGVtZW50KCk7CisgICAgdG9wRG9jdW1lbnQuZnVsbHNjcmVlbk1hbmFnZXIoKS5tX2Z1bGxz
Y3JlZW5FbGVtZW50U3RhY2sgPSBWZWN0b3IgeyBXVEZNb3ZlKGZ1bGxzY3JlbkVsZW1lbnQpIH07
CiAKICAgICB0b3BEb2N1bWVudC5mdWxsc2NyZWVuTWFuYWdlcigpLmV4aXRGdWxsc2NyZWVuKCk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTG9hZGFibGVTY3JpcHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL0xvYWRhYmxlU2NyaXB0LmNwcAppbmRleCAxYmRkZTFlYjVkNmEw
N2YxMTczODliOTljNzVlY2IwMWI2MGY4ODA5Li40MWY0M2NlNjY4NTAzMGVkOWQzOWRmMDViOWZj
OTIzYjEyMzk1ZGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTG9hZGFibGVTY3Jp
cHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJsZVNjcmlwdC5jcHAKQEAgLTUx
LDEyICs1MSw4IEBAIHZvaWQgTG9hZGFibGVTY3JpcHQ6OnJlbW92ZUNsaWVudChMb2FkYWJsZVNj
cmlwdENsaWVudCYgY2xpZW50KQogCiB2b2lkIExvYWRhYmxlU2NyaXB0Ojpub3RpZnlDbGllbnRG
aW5pc2hlZCgpCiB7Ci0gICAgUmVmUHRyPExvYWRhYmxlU2NyaXB0PiBwcm90ZWN0ZWRUaGlzKHRo
aXMpOwotCi0gICAgVmVjdG9yPExvYWRhYmxlU2NyaXB0Q2xpZW50Kj4gdmVjdG9yOwotICAgIGZv
ciAoYXV0byYgcGFpciA6IG1fY2xpZW50cykKLSAgICAgICAgdmVjdG9yLmFwcGVuZChwYWlyLmtl
eSk7Ci0gICAgZm9yIChhdXRvJiBjbGllbnQgOiB2ZWN0b3IpCisgICAgUmVmIHByb3RlY3RlZFRo
aXMgeyAqdGhpcyB9OworICAgIGZvciAoYXV0byYgY2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xp
ZW50cy52YWx1ZXMoKSkpCiAgICAgICAgIGNsaWVudC0+bm90aWZ5RmluaXNoZWQoKnRoaXMpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcAppbmRleCA1MGY0NjMw
Zjg5ZWM4OTVkZjFjZTVhYjhlZDU4MTg5YjdhZmJmNjYyLi4xMjI2M2UyNTZlZTU2YTQ1MmMzMjI4
MTI1Y2FkZDVmMTcwZjQ1ZjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFkaW9C
dXR0b25Hcm91cHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vw
cy5jcHAKQEAgLTU5LDkgKzU5LDcgQEAgaW5saW5lIGJvb2wgUmFkaW9CdXR0b25Hcm91cDo6aXNW
YWxpZCgpIGNvbnN0CiAKIFZlY3RvcjxSZWY8SFRNTElucHV0RWxlbWVudD4+IFJhZGlvQnV0dG9u
R3JvdXA6Om1lbWJlcnMoKSBjb25zdAogewotICAgIFZlY3RvcjxSZWY8SFRNTElucHV0RWxlbWVu
dD4+IHNvcnRlZE1lbWJlcnM7Ci0gICAgZm9yIChhdXRvJiBtZW1iZXIgOiBtX21lbWJlcnMpCi0g
ICAgICAgIHNvcnRlZE1lbWJlcnMuYXBwZW5kKG1lbWJlcik7CisgICAgYXV0byBzb3J0ZWRNZW1i
ZXJzID0gY29weVRvVmVjdG9yT2Y8UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PihtX21lbWJlcnMpOwog
ICAgIHN0ZDo6c29ydChzb3J0ZWRNZW1iZXJzLmJlZ2luKCksIHNvcnRlZE1lbWJlcnMuZW5kKCks
IFtdKGF1dG8mIGEsIGF1dG8mIGIpIHsKICAgICAgICAgcmV0dXJuIGlzX2x0KHRyZWVPcmRlcjxD
b21wb3NlZFRyZWU+KGEsIGIpKTsKICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvRGlyZWN0b3J5RmlsZUxpc3RDcmVhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
RGlyZWN0b3J5RmlsZUxpc3RDcmVhdG9yLmNwcAppbmRleCA5ZDNkYTE4NTNjM2E2MzIwZmViMzE5
NzUxNjJlNDM1YWU5M2ZmZGQxLi45ODVmN2E2MmYwYzFmMzk3NTU4MmViM2Y5Yjk4OTc1MTU2MTU2
Njc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0RpcmVjdG9yeUZpbGVMaXN0Q3Jl
YXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9EaXJlY3RvcnlGaWxlTGlzdENyZWF0
b3IuY3BwCkBAIC04NiwxMyArODYsMTEgQEAgc3RhdGljIFZlY3RvcjxGaWxlSW5mb3JtYXRpb24+
IGdhdGhlckZpbGVJbmZvcm1hdGlvbihjb25zdCBWZWN0b3I8RmlsZUNob29zZXJGaWwKIHN0YXRp
YyBSZWY8RmlsZUxpc3Q+IHRvRmlsZUxpc3QoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBWZWN0
b3I8RmlsZUluZm9ybWF0aW9uPiYgZmlsZXMpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKLSAgICBWZWN0b3I8UmVmPEZpbGU+PiBmaWxlT2JqZWN0czsKLSAgICBmb3IgKGF1dG8mIGZp
bGUgOiBmaWxlcykgeworICAgIGF1dG8gZmlsZU9iamVjdHMgPSBmaWxlcy5tYXAoW2RvY3VtZW50
XShhdXRvJiBmaWxlKSB7CiAgICAgICAgIGlmIChmaWxlLnJlbGF0aXZlUGF0aC5pc051bGwoKSkK
LSAgICAgICAgICAgIGZpbGVPYmplY3RzLmFwcGVuZChGaWxlOjpjcmVhdGUoZG9jdW1lbnQsIGZp
bGUucGF0aCwgeyB9LCBmaWxlLmRpc3BsYXlOYW1lKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGZpbGVPYmplY3RzLmFwcGVuZChGaWxlOjpjcmVhdGVXaXRoUmVsYXRpdmVQYXRoKGRvY3Vt
ZW50LCBmaWxlLnBhdGgsIGZpbGUucmVsYXRpdmVQYXRoKSk7Ci0gICAgfQorICAgICAgICAgICAg
cmV0dXJuIEZpbGU6OmNyZWF0ZShkb2N1bWVudCwgZmlsZS5wYXRoLCB7IH0sIGZpbGUuZGlzcGxh
eU5hbWUpOworICAgICAgICByZXR1cm4gRmlsZTo6Y3JlYXRlV2l0aFJlbGF0aXZlUGF0aChkb2N1
bWVudCwgZmlsZS5wYXRoLCBmaWxlLnJlbGF0aXZlUGF0aCk7CisgICAgfSk7CiAgICAgcmV0dXJu
IEZpbGVMaXN0OjpjcmVhdGUoV1RGTW92ZShmaWxlT2JqZWN0cykpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCmluZGV4IGM0YjA4NGQyZGU3MWZkMzE5ZmU4
YzA2OWI0NWZmN2ZjY2NlZGU1ZWMuLjcyYWZlMDRlMDdmODljOGMyNGFmM2Y4YjhjYWQzOGNlMjk2
YThkMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCkBAIC02
MzQsOSArNjM0LDkgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2F2ZUxhc3RTZWxlY3Rpb24o
KQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9sYXN0T25DaGFuZ2VTZWxlY3Rpb24u
Y2xlYXIoKTsKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBsaXN0SXRlbXMoKSkKLSAgICAgICAg
bV9sYXN0T25DaGFuZ2VTZWxlY3Rpb24uYXBwZW5kKGlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxl
bWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5zZWxlY3RlZCgp
KTsKKyAgICBtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbiA9IGxpc3RJdGVtcygpLm1hcChbXShhdXRv
JiBlbGVtZW50KSB7CisgICAgICAgIHJldHVybiBpczxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1l
bnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKTsK
KyAgICB9KTsKIH0KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0QWN0aXZlU2VsZWN0aW9u
QW5jaG9ySW5kZXgoaW50IGluZGV4KQpAQCAtNjQ1LDEwICs2NDUsOSBAQCB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleChpbnQgaW5kZXgpCiAKICAg
ICAvLyBDYWNoZSB0aGUgc2VsZWN0aW9uIHN0YXRlIHNvIHdlIGNhbiByZXN0b3JlIHRoZSBvbGQg
c2VsZWN0aW9uIGFzIHRoZSBuZXcKICAgICAvLyBzZWxlY3Rpb24gcGl2b3RzIGFyb3VuZCB0aGlz
IGFuY2hvciBpbmRleC4KLSAgICBtX2NhY2hlZFN0YXRlRm9yQWN0aXZlU2VsZWN0aW9uLmNsZWFy
KCk7Ci0KLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBsaXN0SXRlbXMoKSkKLSAgICAgICAgbV9j
YWNoZWRTdGF0ZUZvckFjdGl2ZVNlbGVjdGlvbi5hcHBlbmQoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+
KCplbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVj
dGVkKCkpOworICAgIG1fY2FjaGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rpb24gPSBsaXN0SXRlbXMo
KS5tYXAoW10oYXV0byYgZWxlbWVudCkgeworICAgICAgICByZXR1cm4gaXM8SFRNTE9wdGlvbkVs
ZW1lbnQ+KCplbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQp
LnNlbGVjdGVkKCk7CisgICAgfSk7CiB9CiAKIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldEFj
dGl2ZVNlbGVjdGlvbkVuZEluZGV4KGludCBpbmRleCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1h
cC5jcHAKaW5kZXggMDViMjczNzlmMmQ5MjE5NDQ4OTMyYzQ2YWIzM2IyZWYwMzFhZmM2YS4uNTli
ZmM2ZTBmMWU1OTA0M2RjYzViYmRhMmQyMmFhZTM2NWE2MTMxNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9J
bWFnZUJpdG1hcC5jcHAKQEAgLTExMiwxMCArMTEyLDkgQEAgdm9pZCBJbWFnZUJpdG1hcDo6Y3Jl
YXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LAogCiBWZWN0b3I8c3RkOjpvcHRpb25hbDxJbWFnZUJpdG1hcEJhY2tpbmc+PiBJbWFnZUJpdG1h
cDo6ZGV0YWNoQml0bWFwcyhWZWN0b3I8UmVmUHRyPEltYWdlQml0bWFwPj4mJiBiaXRtYXBzKQog
ewotICAgIFZlY3RvcjxzdGQ6Om9wdGlvbmFsPEltYWdlQml0bWFwQmFja2luZz4+IGJ1ZmZlcnM7
Ci0gICAgZm9yIChhdXRvJiBiaXRtYXAgOiBiaXRtYXBzKQotICAgICAgICBidWZmZXJzLmFwcGVu
ZChiaXRtYXAtPnRha2VJbWFnZUJpdG1hcEJhY2tpbmcoKSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcnM7
CisgICAgcmV0dXJuIFdURjo6bWFwKFdURk1vdmUoYml0bWFwcyksIFtdKGF1dG8mJiBiaXRtYXAp
IHsKKyAgICAgICAgcmV0dXJuIGJpdG1hcC0+dGFrZUltYWdlQml0bWFwQmFja2luZygpOworICAg
IH0pOwogfQogCiB2b2lkIEltYWdlQml0bWFwOjpjcmVhdGVQcm9taXNlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEltYWdlQml0bWFwOjpTb3VyY2UmJiBz
b3VyY2UsIEltYWdlQml0bWFwT3B0aW9ucyYmIG9wdGlvbnMsIGludCBzeCwgaW50IHN5LCBpbnQg
c3csIGludCBzaCwgSW1hZ2VCaXRtYXA6OlByb21pc2UmJiBwcm9taXNlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNw
cAppbmRleCA2MTE0NjAyNzdmNjY3OWE0OTFlMGY5ODMxNzc5NzMwMDdlYmJkZGM2Li5mNzMzNjRm
Mzg2MGMyNmI5MzY2MThjNGY3ZTFhMTc4MjVlOGQ1MDEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcApAQCAt
MzAyMSw5ICszMDIxLDggQEAgc3RkOjpvcHRpb25hbDxWZWN0b3I8UmVmUHRyPFdlYkdMU2hhZGVy
Pj4+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEF0dGFjaGUKICAgICB9OwogICAgIFZl
Y3RvcjxSZWZQdHI8V2ViR0xTaGFkZXI+PiBzaGFkZXJPYmplY3RzOwogICAgIGZvciAoYXV0byBz
aGFkZXJUeXBlIDogc2hhZGVyVHlwZXMpIHsKLSAgICAgICAgUmVmUHRyPFdlYkdMU2hhZGVyPiBz
aGFkZXIgPSBwcm9ncmFtLmdldEF0dGFjaGVkU2hhZGVyKHNoYWRlclR5cGUpOwotICAgICAgICBp
ZiAoc2hhZGVyKQotICAgICAgICAgICAgc2hhZGVyT2JqZWN0cy5hcHBlbmQoc2hhZGVyKTsKKyAg
ICAgICAgaWYgKFJlZlB0ciBzaGFkZXIgPSBwcm9ncmFtLmdldEF0dGFjaGVkU2hhZGVyKHNoYWRl
clR5cGUpKQorICAgICAgICAgICAgc2hhZGVyT2JqZWN0cy5hcHBlbmQoV1RGTW92ZShzaGFkZXIp
KTsKICAgICB9CiAgICAgcmV0dXJuIHNoYWRlck9iamVjdHM7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcAppbmRleCA4YWNi
NjhhZjQ1NTFhMzhiNzk5YzcxM2FhNzVkYzBmNzkxOTAwNGJlLi4wYTVlZDc4ZjQ1OGY5OWI2YmM3
ZmMzNzFkZjk0Y2ZlOTI1YTRkNDgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAKQEAgLTg1LDEyICs4NSwxMSBAQCBzdGF0
aWMgU3RyaW5nVmlldyBleHRyYWN0Q2hhcnNldChjb25zdCBTdHJpbmcmIHZhbHVlKQogCiBib29s
IEhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6cHJvY2Vzc01ldGEoSFRNTFRva2VuJiB0b2tlbikKIHsK
LSAgICBBdHRyaWJ1dGVMaXN0IGF0dHJpYnV0ZXM7Ci0gICAgZm9yIChhdXRvJiBhdHRyaWJ1dGUg
OiB0b2tlbi5hdHRyaWJ1dGVzKCkpIHsKKyAgICBhdXRvIGF0dHJpYnV0ZXMgPSB0b2tlbi5hdHRy
aWJ1dGVzKCkubWFwKFtdKGF1dG8mIGF0dHJpYnV0ZSkgewogICAgICAgICBTdHJpbmcgYXR0cmli
dXRlTmFtZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZThCaXRJZlBvc3NpYmxlKGF0dHJpYnV0ZS5uYW1l
KTsKICAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0gU3RyaW5nSW1wbDo6Y3JlYXRlOEJp
dElmUG9zc2libGUoYXR0cmlidXRlLnZhbHVlKTsKLSAgICAgICAgYXR0cmlidXRlcy5hcHBlbmQo
c3RkOjptYWtlX3BhaXIoYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVmFsdWUpKTsKLSAgICB9Cisg
ICAgICAgIHJldHVybiBzdGQ6OnBhaXIgeyBXVEZNb3ZlKGF0dHJpYnV0ZU5hbWUpLCBXVEZNb3Zl
KGF0dHJpYnV0ZVZhbHVlKSB9OworICAgIH0pOwogCiAgICAgbV9lbmNvZGluZyA9IGVuY29kaW5n
RnJvbU1ldGFBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwogICAgIHJldHVybiBtX2VuY29kaW5nLmlz
VmFsaWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVl
QnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIu
Y3BwCmluZGV4IDZiNzFiZWY4MWE3ZTI4NDcxZWVmZDdjNTMxNTJhOGEwYTgyZDJkYjUuLmExZjE2
N2NiMDgzYzk5ODQzNjE4MzQxMTgwMjlmMjg1ZTQxYzAwMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcApAQCAtMjIwMCwxMSArMjIwMCwxMCBA
QCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NoYXJhY3RlcihBdG9tSFRNTFRva2VuJiYg
dG9rZW4pCiAvLyBGcm9tIHRoZSBzdHJpbmcgNDA4OTk2MTAxMCwgY3JlYXRlcyBhIGxpbmsgb2Yg
dGhlIGZvcm0gPGEgaHJlZj0idGVsOjQwODk5NjEwMTAiPjQwODk5NjEwMTA8L2E+IGFuZCBpbnNl
cnRzIGl0Lgogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6Omluc2VydFBob25lTnVtYmVyTGluayhjb25z
dCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBWZWN0b3I8QXR0cmlidXRlPiBhdHRyaWJ1dGVzOwot
ICAgIGF0dHJpYnV0ZXMuYXBwZW5kKEF0dHJpYnV0ZShIVE1MTmFtZXM6OmhyZWZBdHRyLCBtYWtl
U3RyaW5nKCJ0ZWw6Il9zLCBzdHJpbmcpKSk7CisgICAgQXR0cmlidXRlIGF0dHJpYnV0ZShIVE1M
TmFtZXM6OmhyZWZBdHRyLCBtYWtlU3RyaW5nKCJ0ZWw6Il9zLCBzdHJpbmcpKTsKIAogICAgIGNv
bnN0IEF0b21TdHJpbmcmIGFUYWdMb2NhbE5hbWUgPSBhVGFnLT5sb2NhbE5hbWUoKTsKLSAgICBB
dG9tSFRNTFRva2VuIGFTdGFydFRva2VuKEhUTUxUb2tlbjo6U3RhcnRUYWcsIGFUYWdMb2NhbE5h
bWUsIFdURk1vdmUoYXR0cmlidXRlcykpOworICAgIEF0b21IVE1MVG9rZW4gYVN0YXJ0VG9rZW4o
SFRNTFRva2VuOjpTdGFydFRhZywgYVRhZ0xvY2FsTmFtZSwgeyBXVEZNb3ZlKGF0dHJpYnV0ZSkg
fSk7CiAgICAgQXRvbUhUTUxUb2tlbiBhRW5kVG9rZW4oSFRNTFRva2VuOjpFbmRUYWcsIGFUYWdM
b2NhbE5hbWUpOwogCiAgICAgcHJvY2Vzc1N0YXJ0VGFnKFdURk1vdmUoYVN0YXJ0VG9rZW4pKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3Bw
CmluZGV4IDRkYTk1OWY0MGZlOWVhMzM3NDdjZDIzODhjZWI3OWY2ZDcyZGI3ZWQuLjQ3MDZmMjZl
ODQ0MDllZTgxM2NkMTNiYzVmNGUwYWNjZjY3NGE4NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNwcApAQCAtNTEsOSArNTEsOCBAQCB2
b2lkIFRleHREb2N1bWVudFBhcnNlcjo6aW5zZXJ0RmFrZVByZUVsZW1lbnQoKQogICAgIC8vIFdl
IGNyZWF0ZSBhIGZha2UgdG9rZW4gYW5kIGdpdmUgaXQgdG8gdGhlIHRyZWUgYnVpbGRlciByYXRo
ZXIgdGhhbgogICAgIC8vIHNlbmRpbmcgZmFrZSBieXRlcyB0aHJvdWdoIHRoZSBmcm9udC1lbmQg
b2YgdGhlIHBhcnNlciB0byBhdm9pZAogICAgIC8vIGRpc3RydWJpbmcgdGhlIGxpbmUvY29sdW1u
IG51bWJlciBjYWxjdWxhdGlvbnMuCi0gICAgVmVjdG9yPEF0dHJpYnV0ZT4gYXR0cmlidXRlczsK
LSAgICBhdHRyaWJ1dGVzLmFwcGVuZChBdHRyaWJ1dGUoc3R5bGVBdHRyLCAid29yZC13cmFwOiBi
cmVhay13b3JkOyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IikpOwotICAgIEF0b21IVE1MVG9rZW4g
ZmFrZVByZShIVE1MVG9rZW46OlN0YXJ0VGFnLCBwcmVUYWctPmxvY2FsTmFtZSgpLCBXVEZNb3Zl
KGF0dHJpYnV0ZXMpKTsKKyAgICBBdHRyaWJ1dGUgYXR0cmlidXRlKHN0eWxlQXR0ciwgIndvcmQt
d3JhcDogYnJlYWstd29yZDsgd2hpdGUtc3BhY2U6IHByZS13cmFwOyIpOworICAgIEF0b21IVE1M
VG9rZW4gZmFrZVByZShIVE1MVG9rZW46OlN0YXJ0VGFnLCBwcmVUYWctPmxvY2FsTmFtZSgpLCB7
IFdURk1vdmUoYXR0cmlidXRlKSB9KTsKICAgICB0cmVlQnVpbGRlcigpLmNvbnN0cnVjdFRyZWUo
V1RGTW92ZShmYWtlUHJlKSk7CiAKICAgICAvLyBOb3JtYWxseSB3ZSB3b3VsZCBza2lwIHRoZSBm
aXJzdCBcbiBhZnRlciBhIDxwcmU+IGVsZW1lbnQsIGJ1dCB3ZSBkb24ndApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0NvbnRlbnRGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0NvbnRlbnRGaWx0ZXIuY3BwCmluZGV4IDI4OWYzMmE2MzcwZDNjZGM5NThkNjM2ZTU4
NzBjZjc2M2UxMzczNWYuLmZkOWU5NWFkMDdhMTNlZWU3YTEyYWI3MDViZTU3MDFmMzIzYzk4OWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Db250ZW50RmlsdGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29udGVudEZpbHRlci5jcHAKQEAgLTY3LDExICs2Nyw5
IEBAIFZlY3RvcjxDb250ZW50RmlsdGVyOjpUeXBlPiYgQ29udGVudEZpbHRlcjo6dHlwZXMoKQog
CiBzdGQ6OnVuaXF1ZV9wdHI8Q29udGVudEZpbHRlcj4gQ29udGVudEZpbHRlcjo6Y3JlYXRlKENv
bnRlbnRGaWx0ZXJDbGllbnQmIGNsaWVudCkKIHsKLSAgICBDb250YWluZXIgZmlsdGVyczsKLSAg
ICBmb3IgKGF1dG8mIHR5cGUgOiB0eXBlcygpKSB7Ci0gICAgICAgIGF1dG8gZmlsdGVyID0gdHlw
ZS5jcmVhdGUoKTsKLSAgICAgICAgZmlsdGVycy5hcHBlbmQoV1RGTW92ZShmaWx0ZXIpKTsKLSAg
ICB9CisgICAgYXV0byBmaWx0ZXJzID0gdHlwZXMoKS5tYXAoW10oYXV0byYgdHlwZSkgeworICAg
ICAgICByZXR1cm4gdHlwZS5jcmVhdGUoKTsKKyAgICB9KTsKIAogICAgIGlmIChmaWx0ZXJzLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0UGFyc2VyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RQ
YXJzZXIuY3BwCmluZGV4IGI4N2RkODM1MDYwN2MyNGJlMjU2ZTM0NDFiZWQyZDM3NjdlMDk1NTIu
LjRhMTE0NDI1ZTExNmQyYzQyZDE5MDM5MjNlZGY4ODYzODNkOGYwNjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJz
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlTWFuaWZlc3RQYXJzZXIuY3BwCkBAIC0xODAsNyArMTgwLDcgQEAgc3RkOjpvcHRpb25hbDxB
cHBsaWNhdGlvbkNhY2hlTWFuaWZlc3Q+IHBhcnNlQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0KGNv
bnN0IFVSTCYKICAgICAgICAgICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdBU0NJSUNhc2UodXJs
LnByb3RvY29sKCksIG1hbmlmZXN0VVJMLnByb3RvY29sKCkpKQogICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICAgICAgICAgIG1hbmlmZXN0Lm9ubGluZUFsbG93ZWRVUkxz
LmFwcGVuZCh1cmwpOworICAgICAgICAgICAgICAgIG1hbmlmZXN0Lm9ubGluZUFsbG93ZWRVUkxz
LmFwcGVuZChXVEZNb3ZlKHVybCkpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jl
c2l6ZU9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuY3Bw
CmluZGV4IDkzZGExYTQ1NjA0ZTQ1MmE3NzU5M2UxOGQxZjQ3MzM2MzQ5OTQzNjcuLjRmZmQ2OWQw
MzQ0MTA5YjQ3YWZiNWU1MTk3YWEzZmRmZDQ5N2RlZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVz
aXplT2JzZXJ2ZXIuY3BwCkBAIC0xMjUsMTEgKzEyNSwxMCBAQCBzaXplX3QgUmVzaXplT2JzZXJ2
ZXI6OmdhdGhlck9ic2VydmF0aW9ucyhzaXplX3QgZGVlcGVyVGhhbikKIAogdm9pZCBSZXNpemVP
YnNlcnZlcjo6ZGVsaXZlck9ic2VydmF0aW9ucygpCiB7Ci0gICAgVmVjdG9yPFJlZjxSZXNpemVP
YnNlcnZlckVudHJ5Pj4gZW50cmllczsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIG9ic2VydmF0aW9u
IDogbV9hY3RpdmVPYnNlcnZhdGlvbnMpIHsKKyAgICBhdXRvIGVudHJpZXMgPSBtX2FjdGl2ZU9i
c2VydmF0aW9ucy5tYXAoW10oYXV0byYgb2JzZXJ2YXRpb24pIHsKICAgICAgICAgQVNTRVJUKG9i
c2VydmF0aW9uLT50YXJnZXQoKSk7Ci0gICAgICAgIGVudHJpZXMuYXBwZW5kKFJlc2l6ZU9ic2Vy
dmVyRW50cnk6OmNyZWF0ZShvYnNlcnZhdGlvbi0+dGFyZ2V0KCksIG9ic2VydmF0aW9uLT5jb21w
dXRlQ29udGVudFJlY3QoKSwgb2JzZXJ2YXRpb24tPmJvcmRlckJveFNpemUoKSwgb2JzZXJ2YXRp
b24tPmNvbnRlbnRCb3hTaXplKCkpKTsKLSAgICB9CisgICAgICAgIHJldHVybiBSZXNpemVPYnNl
cnZlckVudHJ5OjpjcmVhdGUob2JzZXJ2YXRpb24tPnRhcmdldCgpLCBvYnNlcnZhdGlvbi0+Y29t
cHV0ZUNvbnRlbnRSZWN0KCksIG9ic2VydmF0aW9uLT5ib3JkZXJCb3hTaXplKCksIG9ic2VydmF0
aW9uLT5jb250ZW50Qm94U2l6ZSgpKTsKKyAgICB9KTsKICAgICBtX2FjdGl2ZU9ic2VydmF0aW9u
cy5jbGVhcigpOwogICAgIGF1dG8gYWN0aXZlT2JzZXJ2YXRpb25UYXJnZXRzID0gc3RkOjpleGNo
YW5nZShtX2FjdGl2ZU9ic2VydmF0aW9uVGFyZ2V0cywgeyB9KTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
VGV4dEluZGljYXRvci5jcHAKaW5kZXggMzg3ZDUxOWFlNTE3MmQ2ODBhNWIyODg0M2JiZThmZjk5
NmM2YjMzNS4uMDk5YjkxZDUxNTI0NTVhZTc3N2U1ZmYyNTZiMTU3MjY5MDQzM2VkMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCkBAIC0zNjEsMTcgKzM2MSwxNiBAQCBzdGF0
aWMgYm9vbCBpbml0aWFsaXplSW5kaWNhdG9yKFRleHRJbmRpY2F0b3JEYXRhJiBkYXRhLCBGcmFt
ZSYgZnJhbWUsIGNvbnN0IFNpbQogICAgICAgICB0ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nv
b3JkaW5hdGVzLnVuaXRlKHRleHRSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKTsKICAgICB9CiAK
LSAgICBWZWN0b3I8RmxvYXRSZWN0PiB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVz
OwotICAgIGZvciAoYXV0byByZWN0IDogdGV4dFJlY3RzSW5Sb290Vmlld0Nvb3JkaW5hdGVzKSB7
CisgICAgYXV0byB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzID0gdGV4dFJlY3Rz
SW5Sb290Vmlld0Nvb3JkaW5hdGVzLm1hcChbJl0oYXV0byByZWN0KSB7CiAgICAgICAgIHJlY3Qu
bW92ZUJ5KC10ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCkp
OwotICAgICAgICB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzLmFwcGVuZChyZWN0
KTsKLSAgICB9CisgICAgICAgIHJldHVybiByZWN0OworICAgIH0pOwogCiAgICAgLy8gU3RvcmUg
dGhlIHNlbGVjdGlvbiByZWN0IGluIHdpbmRvdyBjb29yZGluYXRlcywgdG8gYmUgdXNlZCBzdWJz
ZXF1ZW50bHkKICAgICAvLyB0byBkZXRlcm1pbmUgaWYgdGhlIGluZGljYXRvciBhbmQgc2VsZWN0
aW9uIHN0aWxsIHByZWNpc2VseSBvdmVybGFwLgogICAgIGRhdGEuc2VsZWN0aW9uUmVjdEluUm9v
dFZpZXdDb29yZGluYXRlcyA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KGVuY2xv
c2luZ0ludFJlY3QoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uQm91bmRzKEZyYW1lU2VsZWN0
aW9uOjpDbGlwVG9WaXNpYmxlQ29udGVudDo6Tm8pKSk7Ci0gICAgZGF0YS50ZXh0Qm91bmRpbmdS
ZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gdGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29y
ZGluYXRlczsKLSAgICBkYXRhLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMgPSB0
ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzOworICAgIGRhdGEudGV4dEJvdW5kaW5n
UmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9IFdURk1vdmUodGV4dEJvdW5kaW5nUmVjdEluUm9v
dFZpZXdDb29yZGluYXRlcyk7CisgICAgZGF0YS50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3Jk
aW5hdGVzID0gV1RGTW92ZSh0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKTsKIAog
ICAgIHJldHVybiB0YWtlU25hcHNob3RzKGRhdGEsIGZyYW1lLCBlbmNsb3NpbmdJbnRSZWN0KHRl
eHRCb3VuZGluZ1JlY3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMpLCBjbGlwcGVkVGV4dFJlY3RzSW5E
b2N1bWVudENvb3JkaW5hdGVzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Y3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9D
b250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCmluZGV4IDUyZjYyMDEyMmI4NWM3NTAzZTdkYTZhNjgz
NWJmMzc1NjE0OTY3ZjQuLjhhMmJhNGNmZmEyNmRjY2JiZDFlNzVlZTUwMTEzYTg2NmJlNWEyZmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGlj
eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5
LmNwcApAQCAtMzQzLDE4ICszNDMsMTIgQEAgYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFs
bFBvbGljaWVzQWxsb3coVmlvbGF0ZWREaXJlY3RpdmVDYWxsYmFjayYmIGNhbGxiYWMKIHN0YXRp
YyBWZWN0b3I8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZVN1YlJlc291cmNlSW50
ZWdyaXR5SW50b0RpZ2VzdHMoY29uc3QgU3RyaW5nJiBzdWJSZXNvdXJjZUludGVncml0eSkKIHsK
ICAgICBhdXRvIGVuY29kZWREaWdlc3RzID0gcGFyc2VJbnRlZ3JpdHlNZXRhZGF0YShzdWJSZXNv
dXJjZUludGVncml0eSk7Ci0gICAgVmVjdG9yPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4g
ZGVjb2RlZERpZ2VzdHM7Ci0KLSAgICBpZiAoIWVuY29kZWREaWdlc3RzLmhhc192YWx1ZSgpKQor
ICAgIGlmICghZW5jb2RlZERpZ2VzdHMpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIGVuY29kZWREaWdlc3QgOiBlbmNvZGVkRGlnZXN0cy52YWx1ZSgpKSB7Ci0g
ICAgICAgIGF1dG8gZGVjb2RlZERpZ2VzdCA9IGRlY29kZUVuY29kZWRSZXNvdXJjZUNyeXB0b2dy
YXBoaWNEaWdlc3QoZW5jb2RlZERpZ2VzdCk7Ci0gICAgICAgIGlmIChkZWNvZGVkRGlnZXN0Lmhh
c192YWx1ZSgpKQotICAgICAgICAgICAgZGVjb2RlZERpZ2VzdHMuYXBwZW5kKGRlY29kZWREaWdl
c3QudmFsdWUoKSk7Ci0gICAgICAgIH0KLQotICAgIHJldHVybiBkZWNvZGVkRGlnZXN0czsKKyAg
ICByZXR1cm4gV1RGOjpjb21wYWN0TWFwKCplbmNvZGVkRGlnZXN0cywgW10oYXV0byYgZW5jb2Rl
ZERpZ2VzdCkgeworICAgICAgICByZXR1cm4gZGVjb2RlRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3Jh
cGhpY0RpZ2VzdChlbmNvZGVkRGlnZXN0KTsKKyAgICB9KTsKIH0KIAogc3RhdGljIFZlY3RvcjxD
b250ZW50U2VjdXJpdHlQb2xpY3lIYXNoPiBnZW5lcmF0ZUhhc2hlc0ZvckNvbnRlbnQoY29uc3Qg
U3RyaW5nVmlldyBjb250ZW50LCBPcHRpb25TZXQ8Q29udGVudFNlY3VyaXR5UG9saWN5SGFzaEFs
Z29yaXRobT4gYWxnb3JpdGhtcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0ZpbGVDaG9vc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmNw
cAppbmRleCA4ZTRlY2U3MDUzYWU4ZTk4ZWZlY2NmZTc2NTJmODZjZDI5NzQwNDA0Li43ODQyOGM0
YWJkMzFlOTliMTBhYWU0OGZiZWNjMmE1YjhkOWY1OGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vRmlsZUNob29zZXIuY3BwCkBAIC01Myw5ICs1Myw3IEBAIHZvaWQgRmlsZUNob29zZXI6Omlu
dmFsaWRhdGUoKQogCiB2b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlKGNvbnN0IFN0cmluZyYg
ZmlsZW5hbWUpCiB7Ci0gICAgVmVjdG9yPFN0cmluZz4gZmlsZW5hbWVzOwotICAgIGZpbGVuYW1l
cy5hcHBlbmQoZmlsZW5hbWUpOwotICAgIGNob29zZUZpbGVzKGZpbGVuYW1lcyk7CisgICAgY2hv
b3NlRmlsZXMoeyBmaWxlbmFtZSB9KTsKIH0KIAogdm9pZCBGaWxlQ2hvb3Nlcjo6Y2hvb3NlRmls
ZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHJlcGxhY2VtZW50TmFtZXMpCkBAIC02OCw5ICs2NiwxMCBAQCB2b2lkIEZpbGVDaG9vc2VyOjpj
aG9vc2VGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBjb25zdCBWZWN0b3I8
U3RyaQogICAgICAgICByZXR1cm47CiAKICAgICBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4g
ZmlsZXM7CisgICAgZmlsZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmaWxlbmFtZXMuc2l6ZSgp
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IGZpbGVuYW1lcy5zaXplKCk7IGkgPCBz
aXplOyArK2kpCi0gICAgICAgIGZpbGVzLmFwcGVuZCh7IGZpbGVuYW1lc1tpXSwgaSA8IHJlcGxh
Y2VtZW50TmFtZXMuc2l6ZSgpID8gcmVwbGFjZW1lbnROYW1lc1tpXSA6IG51bGxTdHJpbmcoKSwg
eyB9IH0pOwotICAgIG1fY2xpZW50LT5maWxlc0Nob3NlbihmaWxlcyk7CisgICAgICAgIGZpbGVz
LnVuY2hlY2tlZEFwcGVuZCh7IGZpbGVuYW1lc1tpXSwgaSA8IHJlcGxhY2VtZW50TmFtZXMuc2l6
ZSgpID8gcmVwbGFjZW1lbnROYW1lc1tpXSA6IG51bGxTdHJpbmcoKSwgeyB9IH0pOworICAgIG1f
Y2xpZW50LT5maWxlc0Nob3NlbihXVEZNb3ZlKGZpbGVzKSk7CiB9CiAKICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQpAQCAtODYsMTkgKzg1LDE5IEBAIHZvaWQgRmlsZUNob29zZXI6OmNob29zZU1l
ZGlhRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywgY29uc3QgU3RyaW5nCiAg
ICAgaWYgKCFtX2NsaWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPEZpbGVDaG9v
c2VyRmlsZUluZm8+IGZpbGVzOwotICAgIGZvciAoYXV0byYgZmlsZW5hbWUgOiBmaWxlbmFtZXMp
Ci0gICAgICAgIGZpbGVzLmFwcGVuZCh7IGZpbGVuYW1lLCB7IH0sIHsgfSB9KTsKLSAgICBtX2Ns
aWVudC0+ZmlsZXNDaG9zZW4oZmlsZXMsIGRpc3BsYXlTdHJpbmcsIGljb24pOworICAgIGF1dG8g
ZmlsZXMgPSBmaWxlbmFtZXMubWFwKFtdKGF1dG8mIGZpbGVuYW1lKSB7CisgICAgICAgIHJldHVy
biBGaWxlQ2hvb3NlckZpbGVJbmZvIHsgZmlsZW5hbWUsIHsgfSwgeyB9IH07CisgICAgfSk7Cisg
ICAgbV9jbGllbnQtPmZpbGVzQ2hvc2VuKFdURk1vdmUoZmlsZXMpLCBkaXNwbGF5U3RyaW5nLCBp
Y29uKTsKIH0KIAogI2VuZGlmCiAKIHZvaWQgRmlsZUNob29zZXI6OmNob29zZUZpbGVzKGNvbnN0
IFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJbmZvPiYgZmlsZXMpCiB7Ci0gICAgVmVjdG9yPFN0cmlu
Zz4gcGF0aHM7Ci0gICAgZm9yIChhdXRvJiBmaWxlIDogZmlsZXMpCi0gICAgICAgIHBhdGhzLmFw
cGVuZChmaWxlLnBhdGgpOworICAgIGF1dG8gcGF0aHMgPSBmaWxlcy5tYXAoW10oYXV0byYgZmls
ZSkgeworICAgICAgICByZXR1cm4gZmlsZS5wYXRoOworICAgIH0pOwogCiAgICAgLy8gRklYTUU6
IFRoaXMgaXMgaW5lbGVnYW50LiBXZSBzaG91bGQgbm90IGJlIGxvb2tpbmcgYXQgc2V0dGluZ3Mg
aGVyZS4KICAgICBpZiAobV9zZXR0aW5ncy5zZWxlY3RlZEZpbGVzID09IHBhdGhzKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKaW5kZXggZDA5ZjEwNTJhMGYzMWVlOTcw
NjExMDEzYjM5MzVmYjUzMDk1NTA5Ni4uZjg3YjZhNGY2M2IyNmEyMTg4MjA2ZTkzOGFhNTg1Nzk3
YWIzOTVlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCkBAIC0y
MDYsOSArMjA2LDcgQEAgdm9pZCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyOjphcHBlbmQoY29uc3Qg
RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlciYgZGF0YSkKIHZvaWQgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZl
cjo6YXBwZW5kKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgpCiB7CiAgICAgQVNT
RVJUKCFtX2NvbnRpZ3VvdXMpOwotICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3I7Ci0gICAgdmVj
dG9yLmFwcGVuZChkYXRhLCBsZW5ndGgpOwotICAgIG1fc2VnbWVudHMuYXBwZW5kKHsgbV9zaXpl
LCBEYXRhU2VnbWVudDo6Y3JlYXRlKFdURk1vdmUodmVjdG9yKSkgfSk7CisgICAgbV9zZWdtZW50
cy5hcHBlbmQoeyBtX3NpemUsIERhdGFTZWdtZW50OjpjcmVhdGUoVmVjdG9yIHsgZGF0YSwgbGVu
Z3RoIH0pIH0pOwogICAgIG1fc2l6ZSArPSBsZW5ndGg7CiAgICAgQVNTRVJUKGludGVybmFsbHlD
b25zaXN0ZW50KCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhy
ZWFkU2FmZURhdGFCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZFNhZmVE
YXRhQnVmZmVyLmgKaW5kZXggZDM5N2QyMjdkZmM1MzRhZDBjZjU4NzAyYmUxY2E1ODAyNDk5YTBi
Yi4uYjUwNmU5MTQ1ZDVjNzE3YWY0ZjM2NzU3ZDg3ZDAwMjJjNDllNTI4NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkU2FmZURhdGFCdWZmZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRTYWZlRGF0YUJ1ZmZlci5oCkBAIC0yNSw2ICsyNSw3
IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8d3RmL0hhc2hlci5oPgogI2luY2x1ZGUg
PHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApA
QCAtMTQzLDQgKzE0NCwxNiBAQCBib29sIFRocmVhZFNhZmVEYXRhQnVmZmVyOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlciwgVGhyZWFkU2FmZURhdGFCdWZmZXImIHJlc3VsdAogICAgIHJldHVybiB0
cnVlOwogfQogCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IFRocmVhZFNh
ZmVEYXRhQnVmZmVyJiBidWZmZXIpCit7CisgICAgYXV0byogZGF0YSA9IGJ1ZmZlci5kYXRhKCk7
CisgICAgaWYgKCFkYXRhKSB7CisgICAgICAgIGFkZChoYXNoZXIsIHRydWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGFkZChoYXNoZXIsIGZhbHNlKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMCwgc2l6ZSA9IGJ1ZmZlci5zaXplKCk7IGkgPCBzaXplOyArK2kpCisgICAgICAgIGFkZCho
YXNoZXIsIGRhdGFbaV0pOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nv
ci5jcHAKaW5kZXggMWNmMzljYWNmMzAyNDUwOGU4ZDEyZTg2NDVjNTA4Njc3MjE5NDM1Yi4uZDhj
MzRmYTM3Njk1MDcyNTI1NDc0MThmZTVlODQ0ZmZlMmMzMDg3ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmNw
cApAQCAtNTYsOCArNTYsOSBAQCB2b2lkIEF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yOjppbml0aWFs
aXplKCkKICAgICAgICAgRGlzYWJsZU1hbGxvY1Jlc3RyaWN0aW9uc0ZvckN1cnJlbnRUaHJlYWRT
Y29wZSBkaXNhYmxlTWFsbG9jUmVzdHJpY3Rpb25zOwogCiAgICAgICAgIC8vIENyZWF0ZSBwcm9j
ZXNzaW5nIGtlcm5lbHMsIG9uZSBwZXIgY2hhbm5lbC4KKyAgICAgICAgbV9rZXJuZWxzLnJlc2Vy
dmVDYXBhY2l0eShtX2tlcm5lbHMuY2FwYWNpdHkoKSArIG51bWJlck9mQ2hhbm5lbHMoKSk7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzKCk7ICsraSkK
LSAgICAgICAgICAgIG1fa2VybmVscy5hcHBlbmQoY3JlYXRlS2VybmVsKCkpOworICAgICAgICAg
ICAgbV9rZXJuZWxzLnVuY2hlY2tlZEFwcGVuZChjcmVhdGVLZXJuZWwoKSk7CiAgICAgfQogICAg
IG1faW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgIG1faGFzSnVzdFJlc2V0ID0gdHJ1ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUmVzYW1wbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUmVzYW1wbGVyLmNwcAppbmRleCBk
ZTUwOGNjNmVmNGE1YjAxYmQ0ZWIyMjQ3NDViN2VmMjgyODQwZjhlLi43NDY5Y2U0ZGUzZjNjMTg4
ODkyOGY1NDk3ZDEyY2U1NmRiNmU2ZDJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9BdWRpb1Jlc2FtcGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vQXVkaW9SZXNhbXBsZXIuY3BwCkBAIC00Miw4ICs0Miw5IEBAIEF1ZGlvUmVzYW1w
bGVyOjpBdWRpb1Jlc2FtcGxlcigpCiAKIEF1ZGlvUmVzYW1wbGVyOjpBdWRpb1Jlc2FtcGxlcih1
bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKQogeworICAgIG1fa2VybmVscy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KG51bWJlck9mQ2hhbm5lbHMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1iZXJPZkNoYW5uZWxzOyArK2kpCi0gICAgICAgIG1fa2VybmVscy5hcHBlbmQobWFrZVVu
aXF1ZTxBdWRpb1Jlc2FtcGxlcktlcm5lbD4odGhpcykpOworICAgICAgICBtX2tlcm5lbHMudW5j
aGVja2VkQXBwZW5kKG1ha2VVbmlxdWU8QXVkaW9SZXNhbXBsZXJLZXJuZWw+KHRoaXMpKTsKIAog
ICAgIG1fc291cmNlQnVzID0gQXVkaW9CdXM6OmNyZWF0ZShudW1iZXJPZkNoYW5uZWxzLCAwLCBm
YWxzZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5h
bWljc0NvbXByZXNzb3JLZXJuZWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
RHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcAppbmRleCA5ZjMxODFjZmJiNDAyMjc3Nzk5NjIz
YjliZmRkY2RkNDk1OWMwMGIwLi5jMWM3YTU3NzVhZmZkNTEzOTI1YjU3ZGRiMTU2NzZjNzg1OWE3
OWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0Nv
bXByZXNzb3JLZXJuZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5
bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAKQEAgLTYwLDkgKzYwLDEwIEBAIHZvaWQgRHluYW1p
Y3NDb21wcmVzc29yS2VybmVsOjpzZXROdW1iZXJPZkNoYW5uZWxzKHVuc2lnbmVkIG51bWJlck9m
Q2hhbm5lbHMpCiAgICAgaWYgKG1fcHJlRGVsYXlCdWZmZXJzLnNpemUoKSA9PSBudW1iZXJPZkNo
YW5uZWxzKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3ByZURlbGF5QnVmZmVycy5jbGVhcigp
OworICAgIG1fcHJlRGVsYXlCdWZmZXJzLnNocmluaygwKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKQogICAgICAgICBtX3ByZURlbGF5QnVmZmVy
cy5hcHBlbmQobWFrZVVuaXF1ZTxBdWRpb0Zsb2F0QXJyYXk+KE1heFByZURlbGF5RnJhbWVzKSk7
CisgICAgbV9wcmVEZWxheUJ1ZmZlcnMuc2hyaW5rVG9GaXQoKTsKIH0KIAogdm9pZCBEeW5hbWlj
c0NvbXByZXNzb3JLZXJuZWw6OnNldFByZURlbGF5VGltZShmbG9hdCBwcmVEZWxheVRpbWUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NdWx0aUNoYW5uZWxSZXNh
bXBsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTXVsdGlDaGFubmVsUmVz
YW1wbGVyLmNwcAppbmRleCBiOTY2ZmEwNmNkMzBlYjM0ZGY3MWZjZmJkZTdjMTY1ODIzMTExMjFm
Li4xNzAyM2I2NDI2MWJkZmQzNzVlZTA5ZmUyOTZiM2JkYTg4MjdmMmU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NdWx0aUNoYW5uZWxSZXNhbXBsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL011bHRpQ2hhbm5lbFJlc2FtcGxlci5j
cHAKQEAgLTUzLDggKzUzLDkgQEAgTXVsdGlDaGFubmVsUmVzYW1wbGVyOjpNdWx0aUNoYW5uZWxS
ZXNhbXBsZXIoZG91YmxlIHNjYWxlRmFjdG9yLCB1bnNpZ25lZCBudW1iZXIKICAgICB9CiAKICAg
ICAvLyBDcmVhdGUgZWFjaCBjaGFubmVsJ3MgcmVzYW1wbGVyLgorICAgIG1fa2VybmVscy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG51bWJlck9mQ2hhbm5lbHMpOwogICAgIGZvciAodW5zaWduZWQg
Y2hhbm5lbEluZGV4ID0gMDsgY2hhbm5lbEluZGV4IDwgbnVtYmVyT2ZDaGFubmVsczsgKytjaGFu
bmVsSW5kZXgpCi0gICAgICAgIG1fa2VybmVscy5hcHBlbmQobWFrZVVuaXF1ZTxTaW5jUmVzYW1w
bGVyPihzY2FsZUZhY3RvciwgcmVxdWVzdEZyYW1lcywgc3RkOjpiaW5kKCZNdWx0aUNoYW5uZWxS
ZXNhbXBsZXI6OnByb3ZpZGVJbnB1dEZvckNoYW5uZWwsIHRoaXMsIHN0ZDo6cGxhY2Vob2xkZXJz
OjpfMSwgc3RkOjpwbGFjZWhvbGRlcnM6Ol8yLCBjaGFubmVsSW5kZXgpKSk7CisgICAgICAgIG1f
a2VybmVscy51bmNoZWNrZWRBcHBlbmQobWFrZVVuaXF1ZTxTaW5jUmVzYW1wbGVyPihzY2FsZUZh
Y3RvciwgcmVxdWVzdEZyYW1lcywgc3RkOjpiaW5kKCZNdWx0aUNoYW5uZWxSZXNhbXBsZXI6OnBy
b3ZpZGVJbnB1dEZvckNoYW5uZWwsIHRoaXMsIHN0ZDo6cGxhY2Vob2xkZXJzOjpfMSwgc3RkOjpw
bGFjZWhvbGRlcnM6Ol8yLCBjaGFubmVsSW5kZXgpKSk7CiB9CiAKIE11bHRpQ2hhbm5lbFJlc2Ft
cGxlcjo6fk11bHRpQ2hhbm5lbFJlc2FtcGxlcigpID0gZGVmYXVsdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQubW0KaW5kZXggMDVlYTIxMTFlYjVkNDUzY2IyOGQ4ZTc3ZWYzY2JmNWYz
NTY3MTk4OS4uZmEzMGFmZGUzYjFlMWUzNmU4NjFhZWNiZDlmYmU4YzdmMDkwMzU2ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0KQEAgLTUzNCwxNCArNTM0LDEyIEBAIFZlY3Rv
cjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6
OmxlZ2libGVNZWRpYVNlbGVjCiAgICAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBsZWdp
YmxlT3B0aW9uczsKIAogICAgIGlmICghbV9tZWRpYUVsZW1lbnQgfHwgIW1fbWVkaWFFbGVtZW50
LT5kb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGxlZ2libGVPcHRpb25zOworICAg
ICAgICByZXR1cm4geyB9OwogCiAgICAgYXV0byYgY2FwdGlvblByZWZlcmVuY2VzID0gbV9tZWRp
YUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT5ncm91cCgpLmVuc3VyZUNhcHRpb25QcmVmZXJl
bmNlcygpOwotCi0gICAgZm9yIChhdXRvJiB0cmFjayA6IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUp
Ci0gICAgICAgIGxlZ2libGVPcHRpb25zLmFwcGVuZChjYXB0aW9uUHJlZmVyZW5jZXMubWVkaWFT
ZWxlY3Rpb25PcHRpb25Gb3JUcmFjayh0cmFjay5nZXQoKSkpOwotCi0gICAgcmV0dXJuIGxlZ2li
bGVPcHRpb25zOworICAgIHJldHVybiBtX2xlZ2libGVUcmFja3NGb3JNZW51Lm1hcChbJl0oYXV0
byYgdHJhY2spIHsKKyAgICAgICAgcmV0dXJuIGNhcHRpb25QcmVmZXJlbmNlcy5tZWRpYVNlbGVj
dGlvbk9wdGlvbkZvclRyYWNrKHRyYWNrLmdldCgpKTsKKyAgICB9KTsKIH0KIAogdWludDY0X3Qg
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRpYVNlbGVjdGVkSW5k
ZXgoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9t
YWMvRHVhbHNob2NrM0hJREdhbWVwYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2Ft
ZXBhZC9tYWMvRHVhbHNob2NrM0hJREdhbWVwYWQuY3BwCmluZGV4IDZjNDBlOGI4ODkyODczZmYw
NzIwNjE4Y2ZlODM5NjRjODBlYzM0MWUuLmMwZjUxODFiYzQ0YjFiZGNlYmE2OWI4Y2I2YTM0YTll
YTEyN2RmNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFj
L0R1YWxzaG9jazNISURHYW1lcGFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
YW1lcGFkL21hYy9EdWFsc2hvY2szSElER2FtZXBhZC5jcHAKQEAgLTQzLDEyICs0MywxMCBAQCBE
dWFsc2hvY2szSElER2FtZXBhZDo6RHVhbHNob2NrM0hJREdhbWVwYWQoSElERGV2aWNlJiYgZGV2
aWNlLCB1bnNpZ25lZCBpbmRleCkKIAogICAgIG1fbWFwcGluZyA9IHN0YW5kYXJkR2FtZXBhZE1h
cHBpbmdTdHJpbmcoKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZTdGFu
ZGFyZEdhbWVwYWRCdXR0b25zV2l0aEhvbWVCdXR0b247ICsraSkKLSAgICAgICAgbV9idXR0b25W
YWx1ZXMuYXBwZW5kKDAuMCk7CisgICAgbV9idXR0b25WYWx1ZXMgPSBWZWN0b3IobnVtYmVyT2ZT
dGFuZGFyZEdhbWVwYWRCdXR0b25zV2l0aEhvbWVCdXR0b24sIFNoYXJlZEdhbWVwYWRWYWx1ZSB7
IDAuMCB9KTsKIAotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYXhpc0NvdW50ID0gNDsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGF4aXNDb3VudDsgKytpKQotICAgICAgICBtX2F4aXNWYWx1
ZXMuYXBwZW5kKDAuMCk7CisgICAgY29uc3RleHByIHNpemVfdCBheGlzQ291bnQgPSA0OworICAg
IG1fYXhpc1ZhbHVlcyA9IFZlY3RvcihheGlzQ291bnQsIFNoYXJlZEdhbWVwYWRWYWx1ZSB7IDAu
MCB9KTsKIAogICAgIGF1dG8gaW5wdXRFbGVtZW50cyA9IGhpZERldmljZSgpLnVuaXF1ZUlucHV0
RWxlbWVudHNJbkRldmljZVRyZWVPcmRlcigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9Mb2dpdGVjaEdhbWVwYWQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvTG9naXRlY2hHYW1lcGFkLmNwcAppbmRleCA2NzE0M2Zi
OTk1YmEyYzNlNjhkZDIxMWQxNjViZTYyMGNlZjc4OWVmLi43ODBkNGEzZjllYTI1M2JiZDdlNzJj
NGZiZmNkMDVmZWUwMzIxYThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
YW1lcGFkL21hYy9Mb2dpdGVjaEdhbWVwYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dhbWVwYWQvbWFjL0xvZ2l0ZWNoR2FtZXBhZC5jcHAKQEAgLTQzLDEyICs0MywxMCBAQCBM
b2dpdGVjaEdhbWVwYWQ6OkxvZ2l0ZWNoR2FtZXBhZChISUREZXZpY2UmJiBkZXZpY2UsIHVuc2ln
bmVkIGluZGV4KQogCiAgICAgbV9tYXBwaW5nID0gc3RhbmRhcmRHYW1lcGFkTWFwcGluZ1N0cmlu
ZygpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlN0YW5kYXJkR2FtZXBh
ZEJ1dHRvbnNXaXRob3V0SG9tZUJ1dHRvbjsgKytpKQotICAgICAgICBtX2J1dHRvblZhbHVlcy5h
cHBlbmQoMC4wKTsKKyAgICBtX2J1dHRvblZhbHVlcyA9IFZlY3RvcihudW1iZXJPZlN0YW5kYXJk
R2FtZXBhZEJ1dHRvbnNXaXRob3V0SG9tZUJ1dHRvbiwgU2hhcmVkR2FtZXBhZFZhbHVlIHsgMC4w
IH0pOwogCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBheGlzQ291bnQgPSA0OwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYXhpc0NvdW50OyArK2kpCi0gICAgICAgIG1fYXhpc1ZhbHVlcy5h
cHBlbmQoMC4wKTsKKyAgICBjb25zdGV4cHIgc2l6ZV90IGF4aXNDb3VudCA9IDQ7CisgICAgbV9h
eGlzVmFsdWVzID0gVmVjdG9yKGF4aXNDb3VudCwgU2hhcmVkR2FtZXBhZFZhbHVlIHsgMC4wIH0p
OwogCiAgICAgYXV0byBpbnB1dEVsZW1lbnRzID0gaGlkRGV2aWNlKCkudW5pcXVlSW5wdXRFbGVt
ZW50c0luRGV2aWNlVHJlZU9yZGVyKCk7CiAKQEAgLTU5LDExICs1NywxMiBAQCBMb2dpdGVjaEdh
bWVwYWQ6OkxvZ2l0ZWNoR2FtZXBhZChISUREZXZpY2UmJiBkZXZpY2UsIHVuc2lnbmVkIGluZGV4
KQogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGlucHV0RWxlbWVudHMpIHsKICAgICAgICAgc3dp
dGNoIChlbGVtZW50LmZ1bGxVc2FnZSgpKSB7CiAgICAgICAgIGNhc2UgaGlkSGF0c3dpdGNoRnVs
bFVzYWdlOiB7Ci0gICAgICAgICAgICBWZWN0b3I8U2hhcmVkR2FtZXBhZFZhbHVlPiBoYXRzd2l0
Y2hWYWx1ZXM7Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFs
dWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyVG9wXSk7Ci0gICAgICAg
ICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBh
ZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyUmlnaHRdKTsKLSAgICAgICAgICAgIGhhdHN3aXRjaFZh
bHVlcy5hcHBlbmQobV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVm
dENsdXN0ZXJCb3R0b21dKTsKLSAgICAgICAgICAgIGhhdHN3aXRjaFZhbHVlcy5hcHBlbmQobV9i
dXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJMZWZ0XSk7
CisgICAgICAgICAgICBhdXRvIGhhdHN3aXRjaFZhbHVlcyA9IFZlY3RvcjxTaGFyZWRHYW1lcGFk
VmFsdWU+Ojpmcm9tKAorICAgICAgICAgICAgICAgIG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2Ft
ZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyVG9wXSwKKyAgICAgICAgICAgICAgICBtX2J1dHRv
blZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlclJpZ2h0XSwKKyAg
ICAgICAgICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpM
ZWZ0Q2x1c3RlckJvdHRvbV0sCisgICAgICAgICAgICAgICAgbV9idXR0b25WYWx1ZXNbKHNpemVf
dClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJMZWZ0XQorICAgICAgICAgICAgKTsKIAog
ICAgICAgICAgICAgbV9lbGVtZW50TWFwLnNldChlbGVtZW50LmNvb2tpZSgpLCBtYWtlVW5pcXVl
PEhJREdhbWVwYWRIYXRzd2l0Y2g+KGVsZW1lbnQsIFdURk1vdmUoaGF0c3dpdGNoVmFsdWVzKSkp
OwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9nYW1lcGFkL21hYy9TdGFkaWFISURHYW1lcGFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dhbWVwYWQvbWFjL1N0YWRpYUhJREdhbWVwYWQuY3BwCmluZGV4IDBhOTRlNTYyMzNhMjA0
NDY0MWYxMDBmMDU2NDRkNTc1YWRiYzllNzMuLjM3NTIxMzQ0NjRjNzg1NjdjYjZiZTE4ZjAwZWE1
N2Y4OWFiN2JkMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQv
bWFjL1N0YWRpYUhJREdhbWVwYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dh
bWVwYWQvbWFjL1N0YWRpYUhJREdhbWVwYWQuY3BwCkBAIC00MSwxMiArNDEsMTAgQEAgU3RhZGlh
SElER2FtZXBhZDo6U3RhZGlhSElER2FtZXBhZChISUREZXZpY2UmJiBkZXZpY2UsIHVuc2lnbmVk
IGluZGV4KQogCiAgICAgbV9tYXBwaW5nID0gc3RhbmRhcmRHYW1lcGFkTWFwcGluZ1N0cmluZygp
OwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxOTsgKytpKQotICAgICAgICBtX2J1dHRv
blZhbHVlcy5hcHBlbmQoMC4wKTsKKyAgICBtX2J1dHRvblZhbHVlcyA9IFZlY3RvcigxOSwgU2hh
cmVkR2FtZXBhZFZhbHVlIHsgMC4wIH0pOwogCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBheGlz
Q291bnQgPSA0OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXhpc0NvdW50OyArK2kpCi0g
ICAgICAgIG1fYXhpc1ZhbHVlcy5hcHBlbmQoMC4wKTsKKyAgICBjb25zdGV4cHIgc2l6ZV90IGF4
aXNDb3VudCA9IDQ7CisgICAgbV9heGlzVmFsdWVzID0gVmVjdG9yKGF4aXNDb3VudCwgU2hhcmVk
R2FtZXBhZFZhbHVlIHsgMC4wIH0pOwogCiAgICAgYXV0byBpbnB1dEVsZW1lbnRzID0gaGlkRGV2
aWNlKCkudW5pcXVlSW5wdXRFbGVtZW50c0luRGV2aWNlVHJlZU9yZGVyKCk7CiAKQEAgLTcwLDEx
ICs2OCwxMiBAQCBTdGFkaWFISURHYW1lcGFkOjpTdGFkaWFISURHYW1lcGFkKEhJRERldmljZSYm
IGRldmljZSwgdW5zaWduZWQgaW5kZXgpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBj
YXNlIGhpZEhhdHN3aXRjaEZ1bGxVc2FnZTogewotICAgICAgICAgICAgVmVjdG9yPFNoYXJlZEdh
bWVwYWRWYWx1ZT4gaGF0c3dpdGNoVmFsdWVzOwotICAgICAgICAgICAgaGF0c3dpdGNoVmFsdWVz
LmFwcGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1
c3RlclRvcF0pOwotICAgICAgICAgICAgaGF0c3dpdGNoVmFsdWVzLmFwcGVuZChtX2J1dHRvblZh
bHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlclJpZ2h0XSk7Ci0gICAg
ICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2Ft
ZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyQm90dG9tXSk7Ci0gICAgICAgICAgICBoYXRzd2l0
Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6
OkxlZnRDbHVzdGVyTGVmdF0pOworICAgICAgICAgICAgYXV0byBoYXRzd2l0Y2hWYWx1ZXMgPSBW
ZWN0b3I8U2hhcmVkR2FtZXBhZFZhbHVlPjo6ZnJvbSgKKyAgICAgICAgICAgICAgICBtX2J1dHRv
blZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlclRvcF0sCisgICAg
ICAgICAgICAgICAgbV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVm
dENsdXN0ZXJSaWdodF0sCisgICAgICAgICAgICAgICAgbV9idXR0b25WYWx1ZXNbKHNpemVfdClH
YW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJCb3R0b21dLAorICAgICAgICAgICAgICAgIG1f
YnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyTGVmdF0K
KyAgICAgICAgICAgICk7CiAKICAgICAgICAgICAgIG1fZWxlbWVudE1hcC5zZXQoZWxlbWVudC5j
b29raWUoKSwgbWFrZVVuaXF1ZTxISURHYW1lcGFkSGF0c3dpdGNoPihlbGVtZW50LCBXVEZNb3Zl
KGhhdHN3aXRjaFZhbHVlcykpKTsKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAppbmRleCAxZmVlMjlh
ZTVmNzE5YzRlNTU0YTJjN2U3MGNiNzBmMDFmOWIyMDAyLi43MjRmYjE3YzMzZjRiY2E0Njg4OWM4
M2JjNTU4NDhmZDcyNzBjMzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0xheWVyLmNwcApAQCAtNzYzLDExICs3NjMsOSBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXI6OmFkZFJlcGFpbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVwYWludFJlY3QpCiAg
ICAgRmxvYXRSZWN0IGxhcmdlc3RSZXBhaW50UmVjdChGbG9hdFBvaW50KCksIG1fc2l6ZSk7CiAg
ICAgbGFyZ2VzdFJlcGFpbnRSZWN0LmludGVyc2VjdChyZXBhaW50UmVjdCk7CiAgICAgUmVwYWlu
dE1hcDo6aXRlcmF0b3IgcmVwYWludEl0ID0gcmVwYWludFJlY3RNYXAoKS5maW5kKHRoaXMpOwot
ICAgIGlmIChyZXBhaW50SXQgPT0gcmVwYWludFJlY3RNYXAoKS5lbmQoKSkgewotICAgICAgICBW
ZWN0b3I8RmxvYXRSZWN0PiByZXBhaW50UmVjdHM7Ci0gICAgICAgIHJlcGFpbnRSZWN0cy5hcHBl
bmQobGFyZ2VzdFJlcGFpbnRSZWN0KTsKLSAgICAgICAgcmVwYWludFJlY3RNYXAoKS5zZXQodGhp
cywgcmVwYWludFJlY3RzKTsKLSAgICB9IGVsc2UgeworICAgIGlmIChyZXBhaW50SXQgPT0gcmVw
YWludFJlY3RNYXAoKS5lbmQoKSkKKyAgICAgICAgcmVwYWludFJlY3RNYXAoKS5zZXQodGhpcywg
VmVjdG9yIHsgV1RGTW92ZShsYXJnZXN0UmVwYWludFJlY3QpIH0pOworICAgIGVsc2UgewogICAg
ICAgICBWZWN0b3I8RmxvYXRSZWN0PiYgcmVwYWludFJlY3RzID0gcmVwYWludEl0LT52YWx1ZTsK
ICAgICAgICAgcmVwYWludFJlY3RzLmFwcGVuZChsYXJnZXN0UmVwYWludFJlY3QpOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRp
ZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5j
cHAKaW5kZXggYjk3OTlhNGQxMDYxZWQyMGExYjUwZWQ1MDY4NjUxYzVmZWE0NjZhNC4uNzdkYzk4
MzVkNTYxMmY2NjgxNzI0ZjdiNzZjYmExMDM5NmM3YzM4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5jcHAKQEAgLTI5MCwxNyArMjkw
LDE0IEBAIHN0YXRpYyBWZWN0b3I8RmxvYXRQb2ludEdyYXBoOjpQb2x5Z29uPiBwb2x5Z29uc0Zv
clJlY3QoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mCiAKIFZlY3RvcjxQYXRoPiBQYXRoVXRpbGl0
aWVzOjpwYXRoc1dpdGhTaHJpbmtXcmFwcGVkUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4m
IHJlY3RzLCBmbG9hdCByYWRpdXMpCiB7Ci0gICAgVmVjdG9yPFBhdGg+IHBhdGhzOwotCiAgICAg
aWYgKHJlY3RzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHBhdGhzOworICAgICAgICByZXR1
cm4geyB9OwogCiAgICAgaWYgKHJlY3RzLnNpemUoKSA+IDIwKSB7CiAgICAgICAgIFBhdGggcGF0
aDsKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiByZWN0IDogcmVjdHMpCiAgICAgICAgICAgICBw
YXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QsIEZsb2F0U2l6ZShyYWRpdXMsIHJhZGl1cykpOwotICAg
ICAgICBwYXRocy5hcHBlbmQocGF0aCk7Ci0gICAgICAgIHJldHVybiBwYXRoczsKKyAgICAgICAg
cmV0dXJuIHsgV1RGTW92ZShwYXRoKSB9OwogICAgIH0KIAogICAgIEZsb2F0UG9pbnRHcmFwaCBn
cmFwaDsKQEAgLTMwOSwxMCArMzA2LDEwIEBAIFZlY3RvcjxQYXRoPiBQYXRoVXRpbGl0aWVzOjpw
YXRoc1dpdGhTaHJpbmtXcmFwcGVkUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mCiAgICAg
ICAgIFBhdGggcGF0aDsKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiByZWN0IDogcmVjdHMpCiAg
ICAgICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QsIEZsb2F0U2l6ZShyYWRpdXMsIHJh
ZGl1cykpOwotICAgICAgICBwYXRocy5hcHBlbmQocGF0aCk7Ci0gICAgICAgIHJldHVybiBwYXRo
czsKKyAgICAgICAgcmV0dXJuIHsgV1RGTW92ZShwYXRoKSB9OwogICAgIH0KIAorICAgIFZlY3Rv
cjxQYXRoPiBwYXRoczsKICAgICBmb3IgKGF1dG8mIHBvbHkgOiBwb2x5cykgewogICAgICAgICBQ
YXRoIHBhdGg7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwb2x5LnNpemUoKTsg
KytpKSB7CkBAIC0zNDQsNyArMzQxLDcgQEAgVmVjdG9yPFBhdGg+IFBhdGhVdGlsaXRpZXM6OnBh
dGhzV2l0aFNocmlua1dyYXBwZWRSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYKICAgICAg
ICAgICAgIHBhdGguYWRkQXJjVG8oKmZyb21FZGdlLnNlY29uZCwgKnRvRWRnZS5maXJzdCArIHRv
T2Zmc2V0LCBjbGFtcGVkUmFkaXVzKTsKICAgICAgICAgfQogICAgICAgICBwYXRoLmNsb3NlU3Vi
cGF0aCgpOwotICAgICAgICBwYXRocy5hcHBlbmQocGF0aCk7CisgICAgICAgIHBhdGhzLmFwcGVu
ZChXVEZNb3ZlKHBhdGgpKTsKICAgICB9CiAgICAgcmV0dXJuIHBhdGhzOwogfQpAQCAtNTQzLDEz
ICs1NDAsMTQgQEAgUGF0aCBQYXRoVXRpbGl0aWVzOjpwYXRoV2l0aFNocmlua1dyYXBwZWRSZWN0
c0Zvck91dGxpbmUoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4KICAgICBib3R0b21MZWZ0UmFkaXVz
ID0gZmlyc3RMaW5lUmFkaWkuYm90dG9tTGVmdCgpOwogICAgIHRvcFJpZ2h0UmFkaXVzID0gbGFz
dExpbmVSYWRpaS50b3BSaWdodCgpOwogICAgIGJvdHRvbVJpZ2h0UmFkaXVzID0gbGFzdExpbmVS
YWRpaS5ib3R0b21SaWdodCgpOwotICAgIFZlY3RvcjxGbG9hdFBvaW50PiBjb3JuZXJzOwogICAg
IC8vIHBoeXNpY2FsIHRvcExlZnQvdG9wUmlnaHQvYm90dG9tUmlnaHQvYm90dG9tTGVmdAogICAg
IGF1dG8gaXNIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUp
OwotICAgIGNvcm5lcnMuYXBwZW5kKGZpcnN0TGluZVJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci0g
ICAgY29ybmVycy5hcHBlbmQoaXNIb3Jpem9udGFsID8gbGFzdExpbmVSZWN0Lm1heFhNaW5ZQ29y
bmVyKCkgOiBmaXJzdExpbmVSZWN0Lm1heFhNaW5ZQ29ybmVyKCkpOwotICAgIGNvcm5lcnMuYXBw
ZW5kKGxhc3RMaW5lUmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKLSAgICBjb3JuZXJzLmFwcGVuZChp
c0hvcml6b250YWwgPyBmaXJzdExpbmVSZWN0Lm1pblhNYXhZQ29ybmVyKCkgOiBsYXN0TGluZVJl
Y3QubWluWE1heFlDb3JuZXIoKSk7CisgICAgYXV0byBjb3JuZXJzID0gVmVjdG9yPEZsb2F0UG9p
bnQ+Ojpmcm9tKAorICAgICAgICBmaXJzdExpbmVSZWN0Lm1pblhNaW5ZQ29ybmVyKCksCisgICAg
ICAgIGlzSG9yaXpvbnRhbCA/IGxhc3RMaW5lUmVjdC5tYXhYTWluWUNvcm5lcigpIDogZmlyc3RM
aW5lUmVjdC5tYXhYTWluWUNvcm5lcigpLAorICAgICAgICBsYXN0TGluZVJlY3QubWF4WE1heFlD
b3JuZXIoKSwKKyAgICAgICAgaXNIb3Jpem9udGFsID8gZmlyc3RMaW5lUmVjdC5taW5YTWF4WUNv
cm5lcigpIDogbGFzdExpbmVSZWN0Lm1pblhNYXhZQ29ybmVyKCkKKyAgICApOwogCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvbHkuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgYXV0byBt
b3ZlT3JBZGRMaW5lVG8gPSBbaSwgJnBhdGhdIChjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVm
ZmVyUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VC
dWZmZXJQcml2YXRlLmNwcAppbmRleCA1NDk5ZjM3YTdmMzY0NmJkNWYzOTVhNDhiMDlkOTQxMWQ0
YzliNjY0Li4wNGNiZTRkMjdmMTkwYjdiMjdiOWNhN2U5OGE5YzQ3MTczZDJmODliIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQ
cml2YXRlLmNwcApAQCAtMjE2LDEwICsyMTYsOSBAQCB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGU6
OmJ1ZmZlcmVkU2FtcGxlc0ZvclRyYWNrSWQoY29uc3QgQXRvbVN0cmluZyYgdHJhY2tJZCwgQwog
ICAgIGlmICghdHJhY2tCdWZmZXIpCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAK
LSAgICBWZWN0b3I8U3RyaW5nPiBzYW1wbGVEZXNjcmlwdGlvbnM7Ci0gICAgZm9yIChhdXRvJiBw
YWlyIDogdHJhY2tCdWZmZXItPnNhbXBsZXMuZGVjb2RlT3JkZXIoKSkKLSAgICAgICAgc2FtcGxl
RGVzY3JpcHRpb25zLmFwcGVuZCh0b1N0cmluZygqcGFpci5zZWNvbmQpKTsKLQorICAgIGF1dG8g
c2FtcGxlRGVzY3JpcHRpb25zID0gV1RGOjptYXAodHJhY2tCdWZmZXItPnNhbXBsZXMuZGVjb2Rl
T3JkZXIoKSwgW10oYXV0byYgZW50cnkpIHsKKyAgICAgICAgcmV0dXJuIHRvU3RyaW5nKCplbnRy
eS5zZWNvbmQpOworICAgIH0pOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoc2FtcGxl
RGVzY3JpcHRpb25zKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1p
bmcuY3BwCmluZGV4IDhiMDRmOWJlOTZjMzZlMGEyNjIxODBhMjVlYTM3NDU5NjJiM2Q3ZDUuLmM1
NDYxNDYyM2I4N2VjMDg5NjFmMWQ0NDIwZjk2MDFmMTZhNmFiNGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVh
bWluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcApAQCAtMjAxLDkgKzIwMSw3IEBAIFJlZlB0cjxG
cmFnbWVudGVkU2hhcmVkQnVmZmVyPiBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OnNhbml0
aXplU2tkKGNvbnN0IEZyCiBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxSZWY8RnJhZ21lbnRlZFNoYXJl
ZEJ1ZmZlcj4+PiBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OmV4dHJhY3RLZXlJRHNTa2Qo
Y29uc3QgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogewogICAgIC8vIEluIHRoZSAn
c2tkJyBzY2hlbWUsIHRoZSBpbml0IGRhdGEgaXMgdGhlIGtleSBJRC4KLSAgICBWZWN0b3I8UmVm
PEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+PiBrZXlJRHM7Ci0gICAga2V5SURzLmFwcGVuZChidWZm
ZXIuY29weSgpKTsKLSAgICByZXR1cm4ga2V5SURzOworICAgIHJldHVybiBWZWN0b3IgeyBidWZm
ZXIuY29weSgpIH07CiB9CiAKIHN0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJv
YmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4mIHZhbGlkSW5pdERhdGFUeXBlcygpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9D
RE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJl
YW1pbmdBVkZPYmpDLm1tCmluZGV4IGQ2MzYxMmZhYTA1MzcwYTAzOTczYTFlMmQ1NmMxODY4YTJm
OTkxNjAuLjk2MjVmYTk1MDNlN2JlYmM3MTlmYzRiMzdhNjNjMzhkNzQ1MDMwOGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NE
TUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlT
dHJlYW1pbmdBVkZPYmpDLm1tCkBAIC0xNDk0LDcgKzE0OTQsNyBAQCB2b2lkIENETUluc3RhbmNl
U2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6dXBkYXRlS2V5U3RhdHVzZXMoc3RkOjpv
cHRpb25hbAogICAgICAgICB9CiAgICAgfQogCi0gICAgbV9rZXlTdGF0dXNlcy5zd2FwKGtleVN0
YXR1c2VzKTsKKyAgICBtX2tleVN0YXR1c2VzID0gV1RGTW92ZShrZXlTdGF0dXNlcyk7CiAKICAg
ICBtX2luc3RhbmNlLT5zZXNzaW9uS2V5U3RhdHVzZXNDaGFuZ2VkKCp0aGlzKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L0ltYWdlRGVjb2RlckFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1tCmluZGV4IDU2M2FmMTky
NGQ5YWYzNTllOTMwZWY2NGJhZTMyM2ZjMDQxZGU4N2EuLmFkN2Y0NTEwMWMwNmExODg4YzAwOGZh
ZWQ0YTkxOTA1NjEzODI5M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVjb2RlckFWRk9iakMubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvSW1hZ2VEZWNv
ZGVyQVZGT2JqQy5tbQpAQCAtNTM1LDEzICs1MzUsMTAgQEAgVmVjdG9yPEltYWdlRGVjb2Rlcjo6
RnJhbWVJbmZvPiBJbWFnZURlY29kZXJBVkZPYmpDOjpmcmFtZUluZm9zKCkgY29uc3QKICAgICBp
ZiAobV9zYW1wbGVEYXRhLmVtcHR5KCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBWZWN0
b3I8SW1hZ2VEZWNvZGVyOjpGcmFtZUluZm8+IGluZm9zOwotICAgIGZvciAoYXV0byYgc2FtcGxl
IDogbV9zYW1wbGVEYXRhLnByZXNlbnRhdGlvbk9yZGVyKCkpIHsKKyAgICByZXR1cm4gV1RGOjpt
YXAobV9zYW1wbGVEYXRhLnByZXNlbnRhdGlvbk9yZGVyKCksIFtdKGF1dG8mIHNhbXBsZSkgewog
ICAgICAgICBhdXRvKiBpbWFnZVNhbXBsZSA9IChJbWFnZURlY29kZXJBVkZPYmpDU2FtcGxlKilz
YW1wbGUuc2Vjb25kLmdldCgpOwotICAgICAgICBpbmZvcy5hcHBlbmQoeyBpbWFnZVNhbXBsZS0+
aGFzQWxwaGEoKSwgU2Vjb25kcyhpbWFnZVNhbXBsZS0+ZHVyYXRpb24oKS50b0RvdWJsZSgpKX0p
OwotICAgIH0KLQotICAgIHJldHVybiBpbmZvczsKKyAgICAgICAgcmV0dXJuIEltYWdlRGVjb2Rl
cjo6RnJhbWVJbmZvIHsgaW1hZ2VTYW1wbGUtPmhhc0FscGhhKCksIFNlY29uZHMoaW1hZ2VTYW1w
bGUtPmR1cmF0aW9uKCkudG9Eb3VibGUoKSkgfTsKKyAgICB9KTsKIH0KIAogYm9vbCBJbWFnZURl
Y29kZXJBVkZPYmpDOjpmcmFtZUFsbG93U3Vic2FtcGxpbmdBdEluZGV4KHNpemVfdCBpbmRleCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclBhcnNlckFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQYXJzZXJB
VkZPYmpDLm1tCmluZGV4IGFhMTU4NDA0YjEwZTQ0NGFmNmU1ZWRkYzhkYWQ2YmE5NmVkNWNiMjIu
LmU2MWIxNDdmNjNjNWY0NTcyNzVmNjA1MDNlMzdhOGI1MmQxOGUzYTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1
ZmZlclBhcnNlckFWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUGFyc2VyQVZGT2JqQy5tbQpAQCAtMjk3
LDE2ICsyOTcsMTQgQEAgdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJBVkZPYmpDOjpkaWRQYXJzZVN0
cmVhbURhdGFBc0Fzc2V0KEFWQXNzZXQqIGFzc2V0KQogCiAgICAgICAgICAgICBpZiAoW3RyYWNr
IGhhc01lZGlhQ2hhcmFjdGVyaXN0aWM6QVZNZWRpYUNoYXJhY3RlcmlzdGljVmlzdWFsXSkgewog
ICAgICAgICAgICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9u
U2VnbWVudDo6VmlkZW9UcmFja0luZm9ybWF0aW9uIGluZm87Ci0gICAgICAgICAgICAgICAgYXV0
byB2aWRlb1RyYWNrID0gVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmNyZWF0
ZSh0cmFjayk7Ci0gICAgICAgICAgICAgICAgaW5mby50cmFjayA9IHZpZGVvVHJhY2suY29weVJl
ZigpOworICAgICAgICAgICAgICAgIGluZm8udHJhY2sgPSBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQzo6Y3JlYXRlKHRyYWNrKTsKICAgICAgICAgICAgICAgICBpbmZvLmRlc2Ny
aXB0aW9uID0gTWVkaWFEZXNjcmlwdGlvbkFWRk9iakM6OmNyZWF0ZSh0cmFjayk7Ci0gICAgICAg
ICAgICAgICAgc2VnbWVudC52aWRlb1RyYWNrcy5hcHBlbmQoaW5mbyk7CisgICAgICAgICAgICAg
ICAgc2VnbWVudC52aWRlb1RyYWNrcy5hcHBlbmQoV1RGTW92ZShpbmZvKSk7CiAgICAgICAgICAg
ICB9IGVsc2UgaWYgKFt0cmFjayBoYXNNZWRpYUNoYXJhY3RlcmlzdGljOkFWTWVkaWFDaGFyYWN0
ZXJpc3RpY0F1ZGlibGVdKSB7CiAgICAgICAgICAgICAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNs
aWVudDo6SW5pdGlhbGl6YXRpb25TZWdtZW50OjpBdWRpb1RyYWNrSW5mb3JtYXRpb24gaW5mbzsK
LSAgICAgICAgICAgICAgICBhdXRvIGF1ZGlvVHJhY2sgPSBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQzo6Y3JlYXRlKHRyYWNrKTsKLSAgICAgICAgICAgICAgICBpbmZvLnRyYWNr
ID0gYXVkaW9UcmFjay5jb3B5UmVmKCk7CisgICAgICAgICAgICAgICAgaW5mby50cmFjayA9IEF1
ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjcmVhdGUodHJhY2spOwogICAgICAg
ICAgICAgICAgIGluZm8uZGVzY3JpcHRpb24gPSBNZWRpYURlc2NyaXB0aW9uQVZGT2JqQzo6Y3Jl
YXRlKHRyYWNrKTsKLSAgICAgICAgICAgICAgICBzZWdtZW50LmF1ZGlvVHJhY2tzLmFwcGVuZChp
bmZvKTsKKyAgICAgICAgICAgICAgICBzZWdtZW50LmF1ZGlvVHJhY2tzLmFwcGVuZChXVEZNb3Zl
KGluZm8pKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gRklYTUUoMTI1MTYxKSAg
ICA6IEFkZCBUZXh0VHJhY2sgc3VwcG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCmlu
ZGV4IDg1NDIxZTNkZTcwOWNlMTU5YzQ5NGI0MGZiOGQxYWQyMzU5M2MzYmIuLjk3OTViNmVjNTU3
ZTU0ZTIyMWM4YjQ2ZGQ3MjQ5MDA2MjRkYjZiNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29j
b2EubW0KQEAgLTY4LDExICs2OCwxMSBAQCBWZWN0b3I8Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFZh
cmlhdGlvbkF4aXM+IEZvbnRQbGF0Zm9ybURhdGE6OnZhcmlhdGlvbkF4ZXMoU2hvdQogICAgIGlm
ICghcGxhdGZvcm1Gb250KQogICAgICAgICByZXR1cm4geyB9OwogICAgIAotICAgIFZlY3RvcjxG
b250VmFyaWF0aW9uQXhpcz4gcmVzdWx0czsKLSAgICBmb3IgKGF1dG8mIFt0YWcsIHZhbHVlc10g
OiBkZWZhdWx0VmFyaWF0aW9uVmFsdWVzKHBsYXRmb3JtRm9udCwgc2hvdWxkTG9jYWxpemVBeGlz
TmFtZXMpKQotICAgICAgICByZXN1bHRzLmFwcGVuZChGb250UGxhdGZvcm1EYXRhOjpGb250VmFy
aWF0aW9uQXhpcyh2YWx1ZXMuYXhpc05hbWUsIFN0cmluZyh0YWcuZGF0YSgpLCB0YWcuc2l6ZSgp
KSwgdmFsdWVzLmRlZmF1bHRWYWx1ZSwgdmFsdWVzLm1pbmltdW1WYWx1ZSwgdmFsdWVzLm1heGlt
dW1WYWx1ZSkpOwotICAgIAotICAgIHJldHVybiByZXN1bHRzOworICAgIGF1dG8gbWFwID0gZGVm
YXVsdFZhcmlhdGlvblZhbHVlcyhwbGF0Zm9ybUZvbnQsIHNob3VsZExvY2FsaXplQXhpc05hbWVz
KTsKKyAgICByZXR1cm4gV1RGOjptYXAobWFwLCBbXShhdXRvJiBlbnRyeSkgeworICAgICAgICBh
dXRvJiBbdGFnLCB2YWx1ZXNdID0gZW50cnk7CisgICAgICAgIHJldHVybiBGb250UGxhdGZvcm1E
YXRhOjpGb250VmFyaWF0aW9uQXhpcyB7IHZhbHVlcy5heGlzTmFtZSwgU3RyaW5nKHRhZy5kYXRh
KCksIHRhZy5zaXplKCkpLCB2YWx1ZXMuZGVmYXVsdFZhbHVlLCB2YWx1ZXMubWluaW11bVZhbHVl
LCB2YWx1ZXMubWF4aW11bVZhbHVlIH07CisgICAgfSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQppbmRleCBiYThlYTFlYjQ0OGE5MjFlMzBk
M2FlNmE5Yzc3ZTg4MjMzYWJjNTNiLi5hMmMyNTBhYTJiZWY4ZGU5NjRiYWYwOTI0MGQ1ZTBlYzQx
NTBlZjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2Fy
ZE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5t
bQpAQCAtNzAyLDEwICs3MDIsNyBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJ
TgogICAgICAgICBOU1VSTCAqdXJsID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6Y29jb2FEYXRhXTsK
ICAgICAgICAgaWYgKFt1cmwgaXNGaWxlVVJMXSkKICAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKLSAgICAgICAgdHlwZXMuYXBwZW5kKGNvY29hVHlw
ZSk7Ci0gICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+
c2V0VHlwZXModHlwZXMsIG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQoKSk7CisgICAgICAgIHBs
YXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0VHlwZXMoeyBjb2Nv
YVR5cGUgfSwgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKTsKICAgICAgICAgbV9jaGFuZ2VD
b3VudCA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0U3Ry
aW5nRm9yVHlwZShjb2NvYURhdGEsIGNvY29hVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4
dCgpKTsKIAogICAgICAgICByZXR1cm47CkBAIC03MTQsOSArNzExLDcgQEAgQUxMT1dfREVQUkVD
QVRFRF9ERUNMQVJBVElPTlNfRU5ECiAKICAgICBpZiAoIWNvY29hVHlwZS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgLy8gZXZlcnl0aGluZyBlbHNlIHdlIGtub3cgb2YgZ29lcyBvbiB0aGUgcGJvYXJk
IGFzIGEgc3RyaW5nCi0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwotICAgICAgICB0eXBl
cy5hcHBlbmQoY29jb2FUeXBlKTsKLSAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3Rl
Ym9hcmRTdHJhdGVneSgpLT5hZGRUeXBlcyh0eXBlcywgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4
dCgpKTsKKyAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgp
LT5hZGRUeXBlcyh7IGNvY29hVHlwZSB9LCBtX3Bhc3RlYm9hcmROYW1lLCBjb250ZXh0KCkpOwog
ICAgICAgICBtX2NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRT
dHJhdGVneSgpLT5zZXRTdHJpbmdGb3JUeXBlKGNvY29hRGF0YSwgY29jb2FUeXBlLCBtX3Bhc3Rl
Ym9hcmROYW1lLCBjb250ZXh0KCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lVmlkZW9DYXB0dXJl
U291cmNlLmNwcAppbmRleCAzZTNmNDFhMWM1ODA3ZTZjZDM1OWRlM2RmMjZhZTcyZDU1MWNkNTgy
Li43N2QzMjY2NTZkNWNiYzVhZWZjZDQxN2ExN2E4N2E0NmY3MTIyN2JlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZVZpZGVvQ2FwdHVyZVNv
dXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRp
bWVWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCkBAIC03NSwxMSArNzUsOSBAQCBWZWN0b3I8VmlkZW9Q
cmVzZXREYXRhPiBSZWFsdGltZVZpZGVvQ2FwdHVyZVNvdXJjZTo6cHJlc2V0c0RhdGEoKQogCiB2
b2lkIFJlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlOjpzZXRTdXBwb3J0ZWRQcmVzZXRzKFZlY3Rv
cjxWaWRlb1ByZXNldERhdGE+JiYgcHJlc2V0RGF0YSkKIHsKLSAgICBWZWN0b3I8UmVmPFZpZGVv
UHJlc2V0Pj4gcHJlc2V0czsKLQotICAgIGZvciAoYXV0byYgZGF0YSA6IHByZXNldERhdGEpCi0g
ICAgICAgIHByZXNldHMuYXBwZW5kKFZpZGVvUHJlc2V0OjpjcmVhdGUoV1RGTW92ZShkYXRhKSkp
OwotCisgICAgYXV0byBwcmVzZXRzID0gV1RGOjptYXAoV1RGTW92ZShwcmVzZXREYXRhKSwgW10o
YXV0byYmIGRhdGEpIHsKKyAgICAgICAgcmV0dXJuIFZpZGVvUHJlc2V0OjpjcmVhdGUoV1RGTW92
ZShkYXRhKSk7CisgICAgfSk7CiAgICAgc2V0U3VwcG9ydGVkUHJlc2V0cyhXVEZNb3ZlKHByZXNl
dHMpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9C
bG9iUmVnaXN0cnlJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxv
YlJlZ2lzdHJ5SW1wbC5jcHAKaW5kZXggNjdhNzYyOTVkODVmMzkxYzgzYjI0MDBlNmQxZmU1Nzlj
Y2RlZDg4Zi4uNjIzNjM2YWMyYWJkNjgzODQxNGRjOGYxZjkyNmNlZDVjNDdjY2EyYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwu
Y3BwCkBAIC0xNDEsMTAgKzE0MSw4IEBAIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJC
bG9iVVJMKGNvbnN0IFVSTCYgdXJsLCBWZWN0b3I8QmxvYlBhcnQ+JiYgYmxvYlBhCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEJsb2JQYXJ0OjpUeXBlOjpCbG9i
OiB7Ci0gICAgICAgICAgICBpZiAoYXV0byBibG9iID0gbV9ibG9icy5nZXQocGFydC51cmwoKS5z
dHJpbmcoKSkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRl
bSA6IGJsb2ItPml0ZW1zKCkpCi0gICAgICAgICAgICAgICAgICAgIGJsb2JEYXRhLT5tX2l0ZW1z
LmFwcGVuZChpdGVtKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhdXRvIGJsb2Ig
PSBtX2Jsb2JzLmdldChwYXJ0LnVybCgpLnN0cmluZygpKSkKKyAgICAgICAgICAgICAgICBibG9i
RGF0YS0+bV9pdGVtcy5hcHBlbmRWZWN0b3IoYmxvYi0+aXRlbXMoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICB9CkBAIC0zMjgsNyArMzI2LDcgQEAgdm9pZCBCbG9i
UmVnaXN0cnlJbXBsOjp3cml0ZUJsb2JzVG9UZW1wb3JhcnlGaWxlc0ZvckluZGV4ZWREQihjb25z
dCBWZWN0b3I8U3RyaW4KICAgICAgICAgICAgICAgICBmaWxlUGF0aHMuY2xlYXIoKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbGVQYXRocy5h
cHBlbmQodGVtcEZpbGVQYXRoLmlzb2xhdGVkQ29weSgpKTsKKyAgICAgICAgICAgIGZpbGVQYXRo
cy5hcHBlbmQoV1RGTW92ZSh0ZW1wRmlsZVBhdGgpLmlzb2xhdGVkQ29weSgpKTsKICAgICAgICAg
fQogCiAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlciksIGZpbGVQYXRocyA9IFdURk1vdmUoZmlsZVBhdGhzKV0gKCkg
bXV0YWJsZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcAppbmRleCA4NTMwZTMzNTVmMmQ2YjhkN2ZmYjZlZGY4M2Q2MDhiY2E0YjlmNTU1
Li45YWI5OThlNDFjYjA4Y2YwYjZmOTBmMTBmMTNjNGI4NDU3ZWM5MzlmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTIwODYs
MTAgKzIwODYsOCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpkcmF3Qm94U2lkZUZyb21Q
YXRoKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LAogICAgICAgICAgICAgICAgIGdh
cExlbmd0aCArPSAoZGFzaExlbmd0aCAgLyBudW1iZXJPZkdhcHMpOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBEYXNoQXJyYXkgbGluZURhc2g7Ci0gICAgICAgICAgICBsaW5lRGFzaC5h
cHBlbmQoZGFzaExlbmd0aCk7Ci0gICAgICAgICAgICBsaW5lRGFzaC5hcHBlbmQoZ2FwTGVuZ3Ro
KTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRMaW5lRGFzaChsaW5lRGFzaCwgZGFz
aExlbmd0aCk7CisgICAgICAgICAgICBhdXRvIGxpbmVEYXNoID0gRGFzaEFycmF5Ojpmcm9tKGRh
c2hMZW5ndGgsIGdhcExlbmd0aCk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0TGlu
ZURhc2goV1RGTW92ZShsaW5lRGFzaCksIGRhc2hMZW5ndGgpOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICAvLyBGSVhNRTogc3Ryb2tpbmcgdGhlIGJvcmRlciBwYXRoIGNhdXNlcyBpc3N1
ZXMgd2l0aCB0aWdodCBjb3JuZXJzOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCAzYWEwZjg1ZWE4ZGY3NDg3M2ZhZGEyY2FjNmFkY2Y0
NmYwMTgyNzI5Li5mNmVlYzI2YmI0YTg1MjA5N2M3ZWU0OTQyNzEyYzQwZTY4MWQwYjE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAt
MTk1Niw5ICsxOTU2LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbm5lY3RDbGlwcGlu
Z1N0YWNrTGF5ZXJzKExheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrJgogICAgIGF1dG8mIGNsaXBw
aW5nRW50cnlTdGFjayA9IGNsaXBwaW5nU3RhY2suc3RhY2soKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY2xpcHBpbmdFbnRyeVN0YWNrLnNpemUoKSAtIDE7ICsraSkgewogICAgICAg
ICBhdXRvJiBlbnRyeSA9IGNsaXBwaW5nRW50cnlTdGFjay5hdChpKTsKLSAgICAgICAgVmVjdG9y
PFJlZjxHcmFwaGljc0xheWVyPj4gY2hpbGRyZW47Ci0gICAgICAgIGNoaWxkcmVuLmFwcGVuZCgq
Y2xpcHBpbmdFbnRyeVN0YWNrLmF0KGkgKyAxKS5jbGlwcGluZ0xheWVyKTsKLSAgICAgICAgZW50
cnkuY2xpcHBpbmdMYXllci0+c2V0Q2hpbGRyZW4oV1RGTW92ZShjaGlsZHJlbikpOworICAgICAg
ICBlbnRyeS5jbGlwcGluZ0xheWVyLT5zZXRDaGlsZHJlbih7IFJlZiB7ICpjbGlwcGluZ0VudHJ5
U3RhY2suYXQoaSArIDEpLmNsaXBwaW5nTGF5ZXIgfSB9KTsKICAgICB9CiAKICAgICBjbGlwcGlu
Z0VudHJ5U3RhY2subGFzdCgpLmNsaXBwaW5nTGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
CmluZGV4IDBiZTAzOWEwZjIzZDU3ZmY3ZjU3ZDk5MDliNjUzNzVhMDI0MjQzYjQuLjIzZDczNzEz
NGNhOGVhYTE2MDVkMGM0NzdhY2U2MjgzZjg0NjIxYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBAIC0xNDkxLDkgKzE0OTEs
NyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRqdXN0T3ZlcmZsb3dTY3JvbGxiYXJD
b250YWluZXJMYXllcnMoUmVuZGVyTGF5ZXImCiAgICAgICAgICAgICBvdmVyZmxvd0JhY2tpbmct
PmVuc3VyZU92ZXJmbG93Q29udHJvbHNIb3N0TGF5ZXJBbmNlc3RvckNsaXBwaW5nU3RhY2soJnN0
YWNraW5nQ29udGV4dExheWVyKTsKIAogICAgICAgICBpZiAoYXV0byogb3ZlcmZsb3dDb250cm9s
c0FuY2VzdG9yQ2xpcHBpbmdTdGFjayA9IG92ZXJmbG93QmFja2luZy0+b3ZlcmZsb3dDb250cm9s
c0hvc3RMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjaygpKSB7Ci0gICAgICAgICAgICBWZWN0b3I8
UmVmPEdyYXBoaWNzTGF5ZXI+PiBjaGlsZHJlbjsKLSAgICAgICAgICAgIGNoaWxkcmVuLmFwcGVu
ZCgqb3ZlcmZsb3dDb250YWluZXJMYXllcik7Ci0gICAgICAgICAgICBvdmVyZmxvd0NvbnRyb2xz
QW5jZXN0b3JDbGlwcGluZ1N0YWNrLT5sYXN0Q2xpcHBpbmdMYXllcigpLT5zZXRDaGlsZHJlbihX
VEZNb3ZlKGNoaWxkcmVuKSk7CisgICAgICAgICAgICBvdmVyZmxvd0NvbnRyb2xzQW5jZXN0b3JD
bGlwcGluZ1N0YWNrLT5sYXN0Q2xpcHBpbmdMYXllcigpLT5zZXRDaGlsZHJlbih7IFJlZiB7ICpv
dmVyZmxvd0NvbnRhaW5lckxheWVyIH0gfSk7CiAgICAgICAgICAgICBvdmVyZmxvd0NvbnRhaW5l
ckxheWVyID0gb3ZlcmZsb3dDb250cm9sc0FuY2VzdG9yQ2xpcHBpbmdTdGFjay0+Zmlyc3RDbGlw
cGluZ0xheWVyKCk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tCmluZGV4IDllMTA4ZjhiNGZmMjYxNzk2ODk2NGZhMTM3MDE1MTliYmMyNDUy
YzQuLjg3NjY3ZGUyZGVkMjk1ZDkzNTgwMmIzMzg5MmEwYzMyMWM3ZTMyZWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTI3MzEsMTAgKzI3MzEsOSBA
QCBzdGF0aWMgdm9pZCBwYWludEF0dGFjaG1lbnRUaXRsZUJhY2tncm91bmQoY29uc3QgUmVuZGVy
QXR0YWNobWVudCYgYXR0YWNobWVudCwgRwogICAgIGlmIChsYXlvdXQubGluZXMuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8RmxvYXRSZWN0PiBiYWNrZ3JvdW5kUmVj
dHM7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheW91dC5saW5lcy5zaXplKCk7ICsr
aSkKLSAgICAgICAgYmFja2dyb3VuZFJlY3RzLmFwcGVuZChsYXlvdXQubGluZXNbaV0uYmFja2dy
b3VuZFJlY3QpOworICAgIGF1dG8gYmFja2dyb3VuZFJlY3RzID0gbGF5b3V0LmxpbmVzLm1hcChb
XShhdXRvJiBsaW5lKSB7CisgICAgICAgIHJldHVybiBsaW5lLmJhY2tncm91bmRSZWN0OworICAg
IH0pOwogCiAgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yOwogICAgIGlmIChhdHRhY2htZW50LmZy
YW1lKCkuc2VsZWN0aW9uKCkuaXNGb2N1c2VkQW5kQWN0aXZlKCkpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IGZl
NTU5YmQ3MGIxZDBjZjRiMWM1YTViMWM5MGEyOTYzNWU4YjI3MzEuLjkyNzZiOTNjNzMxMjYxYzFm
MmZmYmVjNDlmMWVjY2U3M2NhMWJiNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtMTk3LDExICsxOTcsOSBAQCBz
dGF0aWMgdm9pZCB3cml0ZVNWR1N0cm9rZVBhaW50aW5nUmVzb3VyY2UoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IFJlbmRlckVsZW1lbnQmCiAgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5ndGhDb250ZXh0
KCZzaGFwZSk7CiAgICAgZG91YmxlIGRhc2hPZmZzZXQgPSBsZW5ndGhDb250ZXh0LnZhbHVlRm9y
TGVuZ3RoKHN2Z1N0eWxlLnN0cm9rZURhc2hPZmZzZXQoKSk7CiAgICAgZG91YmxlIHN0cm9rZVdp
ZHRoID0gbGVuZ3RoQ29udGV4dC52YWx1ZUZvckxlbmd0aChzdHlsZS5zdHJva2VXaWR0aCgpKTsK
LSAgICBjb25zdCBhdXRvJiBkYXNoZXMgPSBzdmdTdHlsZS5zdHJva2VEYXNoQXJyYXkoKTsKLQot
ICAgIERhc2hBcnJheSBkYXNoQXJyYXk7Ci0gICAgZm9yIChhdXRvJiBsZW5ndGggOiBkYXNoZXMp
Ci0gICAgICAgIGRhc2hBcnJheS5hcHBlbmQobGVuZ3RoLnZhbHVlKGxlbmd0aENvbnRleHQpKTsK
KyAgICBhdXRvIGRhc2hBcnJheSA9IHN2Z1N0eWxlLnN0cm9rZURhc2hBcnJheSgpLm1hcChbJl0o
YXV0byYgbGVuZ3RoKSAtPiBEYXNoQXJyYXlFbGVtZW50IHsKKyAgICAgICAgcmV0dXJuIGxlbmd0
aC52YWx1ZShsZW5ndGhDb250ZXh0KTsKKyAgICB9KTsKIAogICAgIHdyaXRlSWZOb3REZWZhdWx0
KHRzLCAib3BhY2l0eSIsIHN2Z1N0eWxlLnN0cm9rZU9wYWNpdHkoKSwgMS4wZik7CiAgICAgd3Jp
dGVJZk5vdERlZmF1bHQodHMsICJzdHJva2Ugd2lkdGgiLCBzdHJva2VXaWR0aCwgMS4wKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcAppbmRleCBhNjNl
YjgwYTc3OWQ3NzY4ZGE0NzcyYmIwZDZhZmUxOWUzNTIxYmJkLi44NDgxMzZjOGE1MzhjNmVjOGVj
YzE2ZDViZjAxYmZkZTJkZGIzOTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRDaHVuay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0Q2h1bmsuY3BwCkBAIC03MCw4ICs3MCw3IEBAIFNWR1RleHRDaHVuazo6U1ZHVGV4
dENodW5rKGNvbnN0IFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGxpbmVMYXlvdXRCb3hlcywg
dW5zCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBmaXJzdDsgaSA8
IGxpbWl0OyArK2kpCi0gICAgICAgIG1fYm94ZXMuYXBwZW5kKGxpbmVMYXlvdXRCb3hlc1tpXSk7
CisgICAgbV9ib3hlcy5hcHBlbmQoJmxpbmVMYXlvdXRCb3hlc1tmaXJzdF0sIGxpbWl0IC0gZmly
c3QpOwogfQogCiB1bnNpZ25lZCBTVkdUZXh0Q2h1bms6OnRvdGFsQ2hhcmFjdGVycygpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5jcHAKaW5kZXggMjI5OWY4
YzYzNzliNTA5NDkyYTFhMWZmYTUyMzA2YTFhYTE2ODliNC4uZTNkYzNlZmJjMjliNjNkNzUyMTQ5
ZGFjYjExMzFmZmE1MmFjYzk0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUGFn
ZVJ1bGVDb2xsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29s
bGVjdG9yLmNwcApAQCAtODQsOCArODQsOSBAQCB2b2lkIFBhZ2VSdWxlQ29sbGVjdG9yOjptYXRj
aFBhZ2VSdWxlcyhSdWxlU2V0KiBydWxlcywgYm9vbCBpc0xlZnRQYWdlLCBib29sIGlzRgogCiAg
ICAgc3RkOjpzdGFibGVfc29ydChtYXRjaGVkUGFnZVJ1bGVzLmJlZ2luKCksIG1hdGNoZWRQYWdl
UnVsZXMuZW5kKCksIGNvbXBhcmVQYWdlUnVsZXMpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1hdGNoZWRQYWdlUnVsZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIG1fcmVzdWx0LmF1
dGhvckRlY2xhcmF0aW9ucy5hcHBlbmQoeyAmbWF0Y2hlZFBhZ2VSdWxlc1tpXS0+cHJvcGVydGll
cygpIH0pOworICAgIG1fcmVzdWx0LmF1dGhvckRlY2xhcmF0aW9ucy5yZXNlcnZlQ2FwYWNpdHko
bV9yZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zLnNpemUoKSArIG1hdGNoZWRQYWdlUnVsZXMuc2l6
ZSgpKTsKKyAgICBmb3IgKGF1dG8qIHBhZ2VSdWxlIDogbWF0Y2hlZFBhZ2VSdWxlcykKKyAgICAg
ICAgbV9yZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zLnVuY2hlY2tlZEFwcGVuZCh7ICZwYWdlUnVs
ZS0+cHJvcGVydGllcygpIH0pOwogfQogCiBzdGF0aWMgYm9vbCBjaGVja1BhZ2VTZWxlY3RvckNv
bXBvbmVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBib29sIGlzTGVmdFBhZ2UsIGJv
b2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0QnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHls
ZS9SdWxlU2V0QnVpbGRlci5jcHAKaW5kZXggNTc1MTg1OTE5N2IyMjZmYzI0NGFmNmJjMzIwNWZh
ZDI2ZTAxNzAxOS4uY2YxNjUyMjFjZDUzYTNjNWE3N2M2ZDk4MDg0MzIxYzEzZjIyMjM4ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcApAQCAtMzc4LDggKzM3OCw5IEBA
IHZvaWQgUnVsZVNldEJ1aWxkZXI6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OnBvcChjb25zdCBNZWRp
YVF1ZXJ5U2V0KiBzZXQpCiAKICAgICBpZiAoIWR5bmFtaWNDb250ZXh0U3RhY2subGFzdCgpLmFm
ZmVjdGVkUnVsZVBvc2l0aW9ucy5pc0VtcHR5KCkgfHwgIWNvbGxlY3REeW5hbWljKSB7CiAgICAg
ICAgIFJ1bGVTZXQ6OkR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMgcnVsZXM7CisgICAgICAgIHJ1bGVz
Lm1lZGlhUXVlcnlTZXRzLnJlc2VydmVDYXBhY2l0eShydWxlcy5tZWRpYVF1ZXJ5U2V0cy5zaXpl
KCkgKyBkeW5hbWljQ29udGV4dFN0YWNrLnNpemUoKSk7CiAgICAgICAgIGZvciAoYXV0byYgY29u
dGV4dCA6IGR5bmFtaWNDb250ZXh0U3RhY2spCi0gICAgICAgICAgICBydWxlcy5tZWRpYVF1ZXJ5
U2V0cy5hcHBlbmQoY29udGV4dC5zZXQuZ2V0KCkpOworICAgICAgICAgICAgcnVsZXMubWVkaWFR
dWVyeVNldHMudW5jaGVja2VkQXBwZW5kKGNvbnRleHQuc2V0LmdldCgpKTsKIAogICAgICAgICBp
ZiAoY29sbGVjdER5bmFtaWMpIHsKICAgICAgICAgICAgIHJ1bGVzLmFmZmVjdGVkUnVsZVBvc2l0
aW9ucy5hcHBlbmRWZWN0b3IoZHluYW1pY0NvbnRleHRTdGFjay5sYXN0KCkuYWZmZWN0ZWRSdWxl
UG9zaXRpb25zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRl
ckNvbnZlcnRlci5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVy
LmgKaW5kZXggMmY4MzRkZjY3ZDgwY2IxM2RkNGM5MTU1MWJhZDEyZGIxYjIzYTI0OS4uNzQ2NGY4
NGQ4YmY2YjJiMmEzMzEyM2Q1OTJiZTI5MmYxNGNjMjhkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgKQEAgLTE2OTcsMTMgKzE2OTcsMTIgQEAgaW5s
aW5lIFZlY3RvcjxBdG9tU3RyaW5nPiBCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Q29udGFpbmVy
TmFtZShCdWlsZGVyU3RhdGUmLAogICAgICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKTsKICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CisgICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkKKyAgICAgICAg
cmV0dXJuIHsgfTsKIAotICAgIFZlY3RvcjxBdG9tU3RyaW5nPiByZXN1bHQ7Ci0gICAgaWYgKGlz
PENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgaXRlbSA6IGRvd25j
YXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oaXRlbS5nZXQoKSkuc3RyaW5nVmFsdWUoKSk7Ci0gICAg
fQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIFdURjo6bWFwKGRvd25jYXN0PENTU1Zh
bHVlTGlzdD4odmFsdWUpLCBbXShhdXRvJiBpdGVtKSAtPiBBdG9tU3RyaW5nIHsKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihpdGVtLmdldCgpKS5zdHJpbmdWYWx1
ZSgpOworICAgIH0pOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJQcm94eS5jcHAKaW5kZXggY2QyYzUxYmJkMzJl
MjhjMmZlNDM0NmU5ZjI2MzUwMTg5ZWVhNjYzYi4uMmE2YjFlYjM2N2U2Y2M3MmM1NzI4OWE1M2M2
NjkyN2Y1NTliMTFjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlh
L1JlbW90ZU1lZGlhUGxheWVyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllclByb3h5LmNwcApAQCAtODAyLDExICs4MDIsOSBAQCBi
b29sIFJlbW90ZU1lZGlhUGxheWVyUHJveHk6OmRvZXNIYXZlQXR0cmlidXRlKGNvbnN0IEF0b21T
dHJpbmcmLCBBdG9tU3RyaW5nKikgYwogI2lmIEVOQUJMRShBVkZfQ0FQVElPTlMpCiBWZWN0b3I8
UmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNrPj4gUmVtb3RlTWVkaWFQbGF5ZXJQcm94eTo6b3V0T2ZC
YW5kVHJhY2tTb3VyY2VzKCkKIHsKLSAgICBWZWN0b3I8UmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNr
Pj4gc291cmNlczsKLSAgICBmb3IgKGF1dG8mIGRhdGEgOiBtX2NvbmZpZ3VyYXRpb24ub3V0T2ZC
YW5kVHJhY2tEYXRhKQotICAgICAgICBzb3VyY2VzLmFwcGVuZChQbGF0Zm9ybVRleHRUcmFjazo6
Y3JlYXRlKFdURk1vdmUoZGF0YSkpKTsKLSAgICAKLSAgICByZXR1cm4gc291cmNlczsKKyAgICBy
ZXR1cm4gV1RGOjptYXAobV9jb25maWd1cmF0aW9uLm91dE9mQmFuZFRyYWNrRGF0YSwgW10oYXV0
byYgZGF0YSkgLT4gUmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNrPiB7CisgICAgICAgIHJldHVybiBQ
bGF0Zm9ybVRleHRUcmFjazo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpOworICAgIH0pOwogfQogCiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVT
b3VyY2VCdWZmZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVt
b3RlU291cmNlQnVmZmVyUHJveHkuY3BwCmluZGV4IDI3OTE2NWRlNjZhYWZlMDI0NjgxZTE2MWEw
MzVjNGExMDk1NGU2ZTEuLmJiZDMwZDhlNzFjMTk0MjcxZWEwM2JhYTIyZTM1MDZkYmIyMDUwODUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVTb3VyY2VC
dWZmZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90
ZVNvdXJjZUJ1ZmZlclByb3h5LmNwcApAQCAtNzUsOSArNzUsMTAgQEAgdm9pZCBSZW1vdGVTb3Vy
Y2VCdWZmZXJQcm94eTo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0aWFsaXphdGlv
blNlZ21lbnQKIAogICAgIEluaXRpYWxpemF0aW9uU2VnbWVudEluZm8gc2VnbWVudEluZm87CiAg
ICAgc2VnbWVudEluZm8uZHVyYXRpb24gPSBzZWdtZW50LmR1cmF0aW9uOworICAgIHNlZ21lbnRJ
bmZvLmF1ZGlvVHJhY2tzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2VnbWVudC5hdWRpb1RyYWNr
cy5zaXplKCkpOwogICAgIGZvciAoYXV0byYgYXVkaW9UcmFja0luZm8gOiBzZWdtZW50LmF1ZGlv
VHJhY2tzKSB7CiAgICAgICAgIGF1dG8gaWRlbnRpZmllciA9IG1fcmVtb3RlTWVkaWFQbGF5ZXJQ
cm94eS0+YWRkUmVtb3RlQXVkaW9UcmFja1Byb3h5KCphdWRpb1RyYWNrSW5mby50cmFjayk7Ci0g
ICAgICAgIHNlZ21lbnRJbmZvLmF1ZGlvVHJhY2tzLmFwcGVuZCh7IE1lZGlhRGVzY3JpcHRpb25J
bmZvKCphdWRpb1RyYWNrSW5mby5kZXNjcmlwdGlvbiksIGlkZW50aWZpZXIgfSk7CisgICAgICAg
IHNlZ21lbnRJbmZvLmF1ZGlvVHJhY2tzLnVuY2hlY2tlZEFwcGVuZCh7IE1lZGlhRGVzY3JpcHRp
b25JbmZvKCphdWRpb1RyYWNrSW5mby5kZXNjcmlwdGlvbiksIGlkZW50aWZpZXIgfSk7CiAKICAg
ICAgICAgQVNTRVJUKCFtX3RyYWNrSWRzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKICAgICAgICAg
QVNTRVJUKCFtX21lZGlhRGVzY3JpcHRpb25zLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKQEAgLTg1
LDkgKzg2LDEwIEBAIHZvaWQgUmVtb3RlU291cmNlQnVmZmVyUHJveHk6OnNvdXJjZUJ1ZmZlclBy
aXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50CiAgICAgICAgIG1fbWVkaWFEZXNj
cmlwdGlvbnMuYWRkKGlkZW50aWZpZXIsICphdWRpb1RyYWNrSW5mby5kZXNjcmlwdGlvbik7CiAg
ICAgfQogCisgICAgc2VnbWVudEluZm8udmlkZW9UcmFja3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShzZWdtZW50LnZpZGVvVHJhY2tzLnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiB2aWRlb1RyYWNr
SW5mbyA6IHNlZ21lbnQudmlkZW9UcmFja3MpIHsKICAgICAgICAgYXV0byBpZGVudGlmaWVyID0g
bV9yZW1vdGVNZWRpYVBsYXllclByb3h5LT5hZGRSZW1vdGVWaWRlb1RyYWNrUHJveHkoKnZpZGVv
VHJhY2tJbmZvLnRyYWNrKTsKLSAgICAgICAgc2VnbWVudEluZm8udmlkZW9UcmFja3MuYXBwZW5k
KHsgTWVkaWFEZXNjcmlwdGlvbkluZm8oKnZpZGVvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwgaWRl
bnRpZmllciB9KTsKKyAgICAgICAgc2VnbWVudEluZm8udmlkZW9UcmFja3MudW5jaGVja2VkQXBw
ZW5kKHsgTWVkaWFEZXNjcmlwdGlvbkluZm8oKnZpZGVvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwg
aWRlbnRpZmllciB9KTsKIAogICAgICAgICBBU1NFUlQoIW1fdHJhY2tJZHMuY29udGFpbnMoaWRl
bnRpZmllcikpOwogICAgICAgICBBU1NFUlQoIW1fbWVkaWFEZXNjcmlwdGlvbnMuY29udGFpbnMo
aWRlbnRpZmllcikpOwpAQCAtOTUsOSArOTcsMTAgQEAgdm9pZCBSZW1vdGVTb3VyY2VCdWZmZXJQ
cm94eTo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQK
ICAgICAgICAgbV9tZWRpYURlc2NyaXB0aW9ucy5hZGQoaWRlbnRpZmllciwgKnZpZGVvVHJhY2tJ
bmZvLmRlc2NyaXB0aW9uKTsKICAgICB9CiAKKyAgICBzZWdtZW50SW5mby50ZXh0VHJhY2tzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoc2VnbWVudC50ZXh0VHJhY2tzLnNpemUoKSk7CiAgICAgZm9y
IChhdXRvJiB0ZXh0VHJhY2tJbmZvIDogc2VnbWVudC50ZXh0VHJhY2tzKSB7CiAgICAgICAgIGF1
dG8gaWRlbnRpZmllciA9IG1fcmVtb3RlTWVkaWFQbGF5ZXJQcm94eS0+YWRkUmVtb3RlVGV4dFRy
YWNrUHJveHkoKnRleHRUcmFja0luZm8udHJhY2spOwotICAgICAgICBzZWdtZW50SW5mby50ZXh0
VHJhY2tzLmFwcGVuZCh7IE1lZGlhRGVzY3JpcHRpb25JbmZvKCp0ZXh0VHJhY2tJbmZvLmRlc2Ny
aXB0aW9uKSwgaWRlbnRpZmllciB9KTsKKyAgICAgICAgc2VnbWVudEluZm8udGV4dFRyYWNrcy51
bmNoZWNrZWRBcHBlbmQoeyBNZWRpYURlc2NyaXB0aW9uSW5mbygqdGV4dFRyYWNrSW5mby5kZXNj
cmlwdGlvbiksIGlkZW50aWZpZXIgfSk7CiAKICAgICAgICAgQVNTRVJUKCFtX3RyYWNrSWRzLmNv
bnRhaW5zKGlkZW50aWZpZXIpKTsKICAgICAgICAgQVNTRVJUKCFtX21lZGlhRGVzY3JpcHRpb25z
LmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKQEAgLTMzOCwxNiArMzQxLDExIEBAIHZvaWQgUmVtb3Rl
U291cmNlQnVmZmVyUHJveHk6OnNlZWtUb1RpbWUoY29uc3QgTWVkaWFUaW1lJiBtZWRpYVRpbWUp
CiAKIHZvaWQgUmVtb3RlU291cmNlQnVmZmVyUHJveHk6OnVwZGF0ZVRyYWNrSWRzKFZlY3Rvcjxz
dGQ6OnBhaXI8VHJhY2tQcml2YXRlUmVtb3RlSWRlbnRpZmllciwgVHJhY2tQcml2YXRlUmVtb3Rl
SWRlbnRpZmllcj4+JiYgaWRlbnRpZmllclBhaXJzKQogewotICAgIFZlY3RvcjxzdGQ6OnBhaXI8
QXRvbVN0cmluZywgQXRvbVN0cmluZz4+IHRyYWNrSWRQYWlyczsKLQotICAgIGZvciAoYXV0byYg
aWRlbnRpZmllclBhaXIgOiBpZGVudGlmaWVyUGFpcnMpIHsKKyAgICBhdXRvIHRyYWNrSWRQYWly
cyA9IGlkZW50aWZpZXJQYWlycy5tYXAoWyZdKGF1dG8mIGlkZW50aWZpZXJQYWlyKSB7CiAgICAg
ICAgIEFTU0VSVChtX3RyYWNrSWRzLmNvbnRhaW5zKGlkZW50aWZpZXJQYWlyLmZpcnN0KSk7CiAg
ICAgICAgIEFTU0VSVChtX3RyYWNrSWRzLmNvbnRhaW5zKGlkZW50aWZpZXJQYWlyLnNlY29uZCkp
OwotCi0gICAgICAgIGF1dG8gb2xkSWQgPSBtX3RyYWNrSWRzLnRha2UoaWRlbnRpZmllclBhaXIu
Zmlyc3QpOwotICAgICAgICBhdXRvIG5ld0lkID0gbV90cmFja0lkcy5nZXQoaWRlbnRpZmllclBh
aXIuc2Vjb25kKTsKLSAgICAgICAgdHJhY2tJZFBhaXJzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihv
bGRJZCwgbmV3SWQpKTsKLSAgICB9CisgICAgICAgIHJldHVybiBzdGQ6OnBhaXIgeyBtX3RyYWNr
SWRzLnRha2UoaWRlbnRpZmllclBhaXIuZmlyc3QpLCBtX3RyYWNrSWRzLmdldChpZGVudGlmaWVy
UGFpci5zZWNvbmQpIH07CisgICAgfSk7CiAKICAgICBpZiAoIXRyYWNrSWRQYWlycy5pc0VtcHR5
KCkpCiAgICAgICAgIG1fc291cmNlQnVmZmVyUHJpdmF0ZS0+dXBkYXRlVHJhY2tJZHMoV1RGTW92
ZSh0cmFja0lkUGFpcnMpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5jcHAKaW5kZXggNzBiNWFmZGE1MjZlOTkwOWI5NjJkNzEyMTNkODViNjBiNTM3MTgx
ZC4uZTg3NmVjMzc3NzFmZjQwMGNhYTgzNGNlZmFlOTU2MjU0Y2MzZmQ5MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFz
c2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKQEAgLTg1Myw5ICs4NTMs
NyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWVyZ2VTdGF0aXN0aWNG
b3JUZXN0aW5nKGNvbnN0IFJlZ2lzdHJhYmxlRAogCiAgICAgICAgICAgICBzdGF0aXN0aWMuc3Vi
ZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyA9IFdURk1vdmUodG9wRnJhbWVEb21haW5zKTsKIAot
ICAgICAgICAgICAgVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+IHN0YXRpc3RpY3M7Ci0g
ICAgICAgICAgICBzdGF0aXN0aWNzLmFwcGVuZChXVEZNb3ZlKHN0YXRpc3RpYykpOwotICAgICAg
ICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPm1lcmdlU3RhdGlzdGljcyhXVEZNb3ZlKHN0YXRpc3Rp
Y3MpKTsKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5tZXJnZVN0YXRpc3RpY3MoVmVj
dG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+Ojpmcm9tKFdURk1vdmUoc3RhdGlzdGljKSkpOwog
ICAgICAgICB9CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmNwcAppbmRleCBmNGY4YTRjNGY0YWY5NmFmNjg5NDJjNWM2Yzk4OTJmZjdlMTk5M2Yx
Li40YThiMGVkYTA5YmYwNTg5OGEzYjhiMjJjOTA4YjQ3YjI4ZWI5YzgxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMTM4MCwxMCAr
MTM4MCw5IEBAIHN0YXRpYyB2b2lkIGZldGNoRGlza0NhY2hlRW50cmllcyhOZXR3b3JrQ2FjaGU6
OkNhY2hlKiBjYWNoZSwgUEFMOjpTZXNzaW9uSUQgc2VzCiAgICAgSGFzaE1hcDxTZWN1cml0eU9y
aWdpbkRhdGEsIHVpbnQ2NF90PiBvcmlnaW5zQW5kU2l6ZXM7CiAgICAgY2FjaGUtPnRyYXZlcnNl
KFtmZXRjaE9wdGlvbnMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlciksIG9yaWdpbnNBbmRTaXplcyA9IFdURk1vdmUob3JpZ2luc0FuZFNpemVzKV0oYXV0byog
dHJhdmVyc2FsRW50cnkpIG11dGFibGUgewogICAgICAgICBpZiAoIXRyYXZlcnNhbEVudHJ5KSB7
Ci0gICAgICAgICAgICBWZWN0b3I8V2Vic2l0ZURhdGE6OkVudHJ5PiBlbnRyaWVzOwotCi0gICAg
ICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbkFuZFNpemUgOiBvcmlnaW5zQW5kU2l6ZXMpCi0gICAg
ICAgICAgICAgICAgZW50cmllcy5hcHBlbmQoV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luQW5k
U2l6ZS5rZXksIFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlLCBvcmlnaW5BbmRTaXplLnZhbHVl
IH0pOworICAgICAgICAgICAgYXV0byBlbnRyaWVzID0gV1RGOjptYXAob3JpZ2luc0FuZFNpemVz
LCBbXShhdXRvJiBvcmlnaW5BbmRTaXplKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYnNp
dGVEYXRhOjpFbnRyeSB7IG9yaWdpbkFuZFNpemUua2V5LCBXZWJzaXRlRGF0YVR5cGU6OkRpc2tD
YWNoZSwgb3JpZ2luQW5kU2l6ZS52YWx1ZSB9OworICAgICAgICAgICAgfSk7CiAKICAgICAgICAg
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSwgZW50cmllcyA9IFdURk1vdmUoZW50cmllcyldICgpIG11dGFi
bGUgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGVudHJpZXMpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05ldHdvcmtO
b3RpZmljYXRpb25NYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTm90
aWZpY2F0aW9ucy9OZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlci5jcHAKaW5kZXggZjAwYTIxOTNh
YTJiMTM5ODAyYjM2NmE0ZjEyMWM3NmVkZmY4OGYwMy4uYzUxMmYyY2IzMjU0MDQ1NGIwNmRmNzMy
NWEzMWIyYTNjZTFkMGM2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Ob3RpZmljYXRpb25zL05ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05vdGlmaWNhdGlvbnMvTmV0d29ya05vdGlmaWNhdGlv
bk1hbmFnZXIuY3BwCkBAIC04Miw5ICs4Miw5IEBAIHZvaWQgTmV0d29ya05vdGlmaWNhdGlvbk1h
bmFnZXI6OmRlbGV0ZVB1c2hBbmROb3RpZmljYXRpb25SZWdpc3RyYXRpb24oY29uc3QgU2VjCiB2
b2lkIE5ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2VyOjpnZXRPcmlnaW5zV2l0aFB1c2hBbmROb3Rp
ZmljYXRpb25QZXJtaXNzaW9ucyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxT
ZWN1cml0eU9yaWdpbkRhdGE+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4gcmVwbHlIYW5kbGVyID0gW2NvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChWZWN0b3I8U3RyaW5n
PiBvcmlnaW5TdHJpbmdzKSBtdXRhYmxlIHsKLSAgICAgICAgVmVjdG9yPFNlY3VyaXR5T3JpZ2lu
RGF0YT4gb3JpZ2luczsKLSAgICAgICAgZm9yIChhdXRvJiBvcmlnaW5TdHJpbmcgOiBvcmlnaW5T
dHJpbmdzKQotICAgICAgICAgICAgb3JpZ2lucy5hcHBlbmQoU2VjdXJpdHlPcmlnaW5EYXRhOjpm
cm9tVVJMKHsgeyB9LCBvcmlnaW5TdHJpbmcgfSkpOworICAgICAgICBhdXRvIG9yaWdpbnMgPSBv
cmlnaW5TdHJpbmdzLm1hcChbXShhdXRvJiBvcmlnaW5TdHJpbmcpIHsKKyAgICAgICAgICAgIHJl
dHVybiBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21VUkwoeyB7IH0sIG9yaWdpblN0cmluZyB9KTsK
KyAgICAgICAgfSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUob3JpZ2lucykp
OwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2Vi
U3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCmluZGV4IGNiOTAxYjZjNThiMTg1OWFlOGJl
MmFkOWRhOTAwMmQ4MjJiODA2MTIuLjdlMmQzNzdhMWJmODYyZDhhMTY5NWVkOTViYjA1YWVjYzQz
ZGNkMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFn
ZS9TdG9yYWdlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9X
ZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcApAQCAtMjk1LDIwICsyOTUsMTQgQEAgVmVjdG9y
PFN0b3JhZ2VBcmVhSWRlbnRpZmllcj4gU3RvcmFnZU1hbmFnZXI6OmFsbFN0b3JhZ2VBcmVhSWRl
bnRpZmllcnMoKSBjb25zdAogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAg
VmVjdG9yPFN0b3JhZ2VBcmVhSWRlbnRpZmllcj4gaWRlbnRpZmllcnM7Ci0gICAgZm9yIChjb25z
dCBhdXRvJiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UgOiBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZXMu
dmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvIGtleSA6IGxvY2FsU3RvcmFnZU5hbWVzcGFj
ZS0+c3RvcmFnZUFyZWFJZGVudGlmaWVycygpKQotICAgICAgICAgICAgaWRlbnRpZmllcnMuYXBw
ZW5kKGtleSk7Ci0gICAgfQorICAgIGZvciAoY29uc3QgYXV0byYgbG9jYWxTdG9yYWdlTmFtZXNw
YWNlIDogbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQorICAgICAgICBpZGVudGlm
aWVycy5hcHBlbmRWZWN0b3IobG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlQXJlYUlkZW50
aWZpZXJzKCkpOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiB0cmFzaWVudExvY2FsU3RvcmFnZU5h
bWVzcGFjZSA6IG1fdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkgewot
ICAgICAgICBmb3IgKGF1dG8ga2V5IDogdHJhc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPnN0
b3JhZ2VBcmVhSWRlbnRpZmllcnMoKSkKLSAgICAgICAgICAgIGlkZW50aWZpZXJzLmFwcGVuZChr
ZXkpOwotICAgIH0KKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYXNpZW50TG9jYWxTdG9yYWdlTmFt
ZXNwYWNlIDogbV90cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQorICAg
ICAgICBpZGVudGlmaWVycy5hcHBlbmRWZWN0b3IodHJhc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3Bh
Y2UtPnN0b3JhZ2VBcmVhSWRlbnRpZmllcnMoKSk7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHNl
c3Npb25TdG9yYWdlTmFtZXNwYWNlIDogbV9zZXNzaW9uU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVz
KCkpIHsKLSAgICAgICAgZm9yIChhdXRvIGtleSA6IHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlLT5z
dG9yYWdlQXJlYUlkZW50aWZpZXJzKCkpCi0gICAgICAgICAgICBpZGVudGlmaWVycy5hcHBlbmQo
a2V5KTsKLSAgICB9CisgICAgZm9yIChjb25zdCBhdXRvJiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFj
ZSA6IG1fc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQorICAgICAgICBpZGVudGlm
aWVycy5hcHBlbmRWZWN0b3Ioc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VBcmVhSWRl
bnRpZmllcnMoKSk7CiAKICAgICByZXR1cm4gaWRlbnRpZmllcnM7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvVHJhbnNpZW50TG9jYWxTdG9y
YWdlTmFtZXNwYWNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFn
ZS9UcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuY3BwCmluZGV4IGVlZWM1NTBlZWY2M2Fl
NTlhMWVhYjNhYThhNDk3YTMyYzEwNTA2MjQuLmZiOThlZDM5NDgwOTE2MDY4NzE3MjZhZTA4NmQ1
MWYxNTEyZDQ0MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2Vi
U3RvcmFnZS9UcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9UcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1l
c3BhY2UuY3BwCkBAIC01NSwxNCArNTUsMTEgQEAgU3RvcmFnZUFyZWEmIFRyYW5zaWVudExvY2Fs
U3RvcmFnZU5hbWVzcGFjZTo6Z2V0T3JDcmVhdGVTdG9yYWdlQXJlYShTZWN1cml0eU9yaWcKIFZl
Y3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6
b3JpZ2lucygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAg
VmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4gb3JpZ2luczsKLQotICAgIGZvciAoY29uc3QgYXV0
byYgc3RvcmFnZUFyZWEgOiBtX3N0b3JhZ2VBcmVhTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIGlm
ICghc3RvcmFnZUFyZWEtPml0ZW1zKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgb3JpZ2lucy5h
cHBlbmQoc3RvcmFnZUFyZWEtPnNlY3VyaXR5T3JpZ2luKCkpOwotICAgIH0KLQotICAgIHJldHVy
biBvcmlnaW5zOworICAgIHJldHVybiBXVEY6OmNvbXBhY3RNYXAobV9zdG9yYWdlQXJlYU1hcCwg
W10oYXV0byYgZW50cnkpIC0+IHN0ZDo6b3B0aW9uYWw8U2VjdXJpdHlPcmlnaW5EYXRhPiB7Cisg
ICAgICAgIGlmIChlbnRyeS52YWx1ZS0+aXRlbXMoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICByZXR1cm4gZW50cnkudmFsdWUtPnNlY3VyaXR5
T3JpZ2luKCk7CisgICAgfSk7CiB9CiAKIHZvaWQgVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNw
YWNlOjpjbGVhclN0b3JhZ2VBcmVhc01hdGNoaW5nT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2lu
RGF0YSYgc2VjdXJpdHlPcmlnaW4pCkBAIC04MiwxMCArNzksOSBAQCB2b2lkIFRyYW5zaWVudExv
Y2FsU3RvcmFnZU5hbWVzcGFjZTo6Y2xlYXJBbGxTdG9yYWdlQXJlYXMoKQogCiBWZWN0b3I8U3Rv
cmFnZUFyZWFJZGVudGlmaWVyPiBUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OnN0b3Jh
Z2VBcmVhSWRlbnRpZmllcnMoKSBjb25zdAogewotICAgIFZlY3RvcjxTdG9yYWdlQXJlYUlkZW50
aWZpZXI+IGlkZW50aWZpZXJzOwotICAgIGZvciAoYXV0byYgc3RvcmFnZUFyZWEgOiBtX3N0b3Jh
Z2VBcmVhTWFwLnZhbHVlcygpKQotICAgICAgICBpZGVudGlmaWVycy5hcHBlbmQoc3RvcmFnZUFy
ZWEtPmlkZW50aWZpZXIoKSk7Ci0gICAgcmV0dXJuIGlkZW50aWZpZXJzOworICAgIHJldHVybiBX
VEY6Om1hcChtX3N0b3JhZ2VBcmVhTWFwLCBbXShhdXRvJiBlbnRyeSkgeworICAgICAgICByZXR1
cm4gZW50cnkudmFsdWUtPmlkZW50aWZpZXIoKTsKKyAgICB9KTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hl
L0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCmluZGV4IGRhOWNiOGE1ZGNjMGVk
N2Y5ZjRjMmUzZDJmMjc2ODk0YTAxZWQxNzQuLjNlMWFlMzEzMDI4YWQwMDNjZDU1ZjgxZTQ2ZTVj
YWUwYmYxZWFkZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCkBAIC0yMDksOCArMjA5
LDkgQEAgdm9pZCBDYWNoZTo6ZmluaXNoT3BlbmluZyhDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxs
YmFjaywgc3RkOjpvcHRpb25hbDxFcnJvcj4mJgogewogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPFJlY29yZEluZm9ybWF0aW9uPj4gcmVjb3JkczsKICAgICBmb3IgKGF1dG8mIHZh
bHVlIDogbV9yZWNvcmRzLnZhbHVlcygpKSB7CisgICAgICAgIHJlY29yZHMucmVzZXJ2ZUNhcGFj
aXR5KHJlY29yZHMuc2l6ZSgpICsgdmFsdWUuc2l6ZSgpKTsKICAgICAgICAgZm9yIChhdXRvJiBy
ZWNvcmQgOiB2YWx1ZSkKLSAgICAgICAgICAgIHJlY29yZHMuYXBwZW5kKHJlY29yZCk7CisgICAg
ICAgICAgICByZWNvcmRzLnVuY2hlY2tlZEFwcGVuZChyZWNvcmQpOwogICAgIH0KICAgICBzdGQ6
OnNvcnQocmVjb3Jkcy5iZWdpbigpLCByZWNvcmRzLmVuZCgpLCBbJl0oY29uc3QgYXV0byYgYSwg
Y29uc3QgYXV0byYgYikgewogICAgICAgICByZXR1cm4gYS5nZXQoKS5pbnNlcnRpb25UaW1lIDwg
Yi5nZXQoKS5pbnNlcnRpb25UaW1lOwpAQCAtNjgyLDggKzY4Myw5IEBAIFZlY3RvcjxLZXk+IENh
Y2hlOjprZXlzKCkgY29uc3QKIHsKICAgICBWZWN0b3I8S2V5PiBrZXlzOwogICAgIGZvciAoYXV0
byYgcmVjb3JkcyA6IG1fcmVjb3Jkcy52YWx1ZXMoKSkgeworICAgICAgICBrZXlzLnJlc2VydmVD
YXBhY2l0eShrZXlzLnNpemUoKSArIHJlY29yZHMuc2l6ZSgpKTsKICAgICAgICAgZm9yIChhdXRv
JiByZWNvcmQgOiByZWNvcmRzKQotICAgICAgICAgICAga2V5cy5hcHBlbmQocmVjb3JkLmtleSk7
CisgICAgICAgICAgICBrZXlzLnVuY2hlY2tlZEFwcGVuZChyZWNvcmQua2V5KTsKICAgICB9CiAg
ICAgcmV0dXJuIGtleXM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmNwcAppbmRleCA0MDlhMzM4OGEwYjhl
Y2Y5YWI3MTA0OWI3MjlmZGUzOTI3YzQ4ZWI1Li40MTM2OTQ0YjVmZjg1ZWYyM2ZjZWU0N2VlZDgz
MmYxZWQwYjYwNDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0
b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHAKQEAgLTY5LDggKzY5LDkgQEAgU1FM
aXRlU3RvcmFnZUFyZWE6OlNRTGl0ZVN0b3JhZ2VBcmVhKHVuc2lnbmVkIHF1b3RhLCBjb25zdCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4KIHsKICAgICBBU1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7CiAK
KyAgICBtX2NhY2hlZFN0YXRlbWVudHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzdGF0aWNfY2Fz
dDxzaXplX3Q+KFN0YXRlbWVudFR5cGU6OkludmFsaWQpKTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHN0YXRpY19jYXN0PHNpemVfdD4oU3RhdGVtZW50VHlwZTo6SW52YWxpZCk7ICsraSkK
LSAgICAgICAgbV9jYWNoZWRTdGF0ZW1lbnRzLmFwcGVuZChudWxscHRyKTsKKyAgICAgICAgbV9j
YWNoZWRTdGF0ZW1lbnRzLnVuY2hlY2tlZEFwcGVuZChudWxscHRyKTsKIH0KIAogdm9pZCBTUUxp
dGVTdG9yYWdlQXJlYTo6Y2xvc2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3Vt
ZW50Q29kZXJzLmgKaW5kZXggNzFlNTIyOGJmNjA4NWZlZmUwMjc4ZTZiMWFmMzU1NTkzOTc4Yjhm
Ni4uZTI0NzNhZmNhN2M1OTA4NjkyNDk5ZGQ5ODBhMjMwZWEyZWViNGYyNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oCkBAIC00NDUsNyArNDQ1LDcgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVy
Zmxvd0hhbmRsZXIsIHNpemVfdCBtaW4KICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwogICAgICAgICAgICAgdmVjdG9yLmFwcGVuZChXVEZNb3ZlKCplbGVtZW50KSk7CiAgICAg
ICAgIH0KLSAgICAgICAgdmVjdG9yLnNocmlua1RvRml0KCk7CisgICAgICAgIEFTU0VSVCh2ZWN0
b3IuY2FwYWNpdHkoKSA9PSB2ZWN0b3Iuc2l6ZSgpKTsKICAgICAgICAgcmV0dXJuIHZlY3RvcjsK
ICAgICB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQXBwbGVQYXkvV2Vi
UGF5bWVudENvb3JkaW5hdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQXBwbGVQ
YXkvV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkuY3BwCmluZGV4IDA0YTY5NjgxNzhhNmY3NTk0
YzI4MGVmNzMxODE5OGNiNjMyYjkyMzAuLmJjY2MwNTUwNzcxNzc5NzY2OGY5YzlkY2YxMDMxMDkx
MTFiOThhZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FwcGxlUGF5L1dlYlBh
eW1lbnRDb29yZGluYXRvclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BcHBs
ZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS5jcHAKQEAgLTkzLDkgKzkzLDkgQEAgdm9p
ZCBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTo6c2hvd1BheW1lbnRVSShXZWJDb3JlOjpQYWdl
SWRlbnRpZmllciBkZXN0aW5hdGkKIAogICAgIFVSTCBvcmlnaW5hdGluZ1VSTChVUkwoKSwgb3Jp
Z2luYXRpbmdVUkxTdHJpbmcpOwogCi0gICAgVmVjdG9yPFVSTD4gbGlua0ljb25VUkxzOwotICAg
IGZvciAoY29uc3QgYXV0byYgbGlua0ljb25VUkxTdHJpbmcgOiBsaW5rSWNvblVSTFN0cmluZ3Mp
Ci0gICAgICAgIGxpbmtJY29uVVJMcy5hcHBlbmQoVVJMKFVSTCgpLCBsaW5rSWNvblVSTFN0cmlu
ZykpOworICAgIGF1dG8gbGlua0ljb25VUkxzID0gbGlua0ljb25VUkxTdHJpbmdzLm1hcChbXShh
dXRvJiBsaW5rSWNvblVSTFN0cmluZykgeworICAgICAgICByZXR1cm4gVVJMKFVSTCgpLCBsaW5r
SWNvblVSTFN0cmluZyk7CisgICAgfSk7CiAKICAgICBwbGF0Zm9ybVNob3dQYXltZW50VUkod2Vi
UGFnZVByb3h5SUQsIG9yaWdpbmF0aW5nVVJMLCBsaW5rSWNvblVSTHMsIHBheW1lbnRSZXF1ZXN0
LCBbdGhpcywgd2Vha1RoaXMgPSBXZWFrUHRyIHsgKnRoaXMgfV0oYm9vbCByZXN1bHQpIHsKICAg
ICAgICAgaWYgKCF3ZWFrVGhpcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9BUElOYXZpZ2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElO
YXZpZ2F0aW9uLmNwcAppbmRleCA4ODQ2NmM0OWVkMGRlMThlMjAzMmNhYTBhMDQ2NDgzOWVhNzQ1
MTAxLi40YTg4OTAzOWU5NGE2MmZhNTkyZjE5NTdmNzZkODU5ZTc5YzlmYzZkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb24uY3BwCkBAIC02MiwxMCArNjIs
MTAgQEAgTmF2aWdhdGlvbjo6TmF2aWdhdGlvbihXZWJOYXZpZ2F0aW9uU3RhdGUmIHN0YXRlLCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiByZXEKICAgICA6IG1fbmF2aWdhdGlvbklEKHN0YXRl
LmdlbmVyYXRlTmF2aWdhdGlvbklEKCkpCiAgICAgLCBtX29yaWdpbmFsUmVxdWVzdChXVEZNb3Zl
KHJlcXVlc3QpKQogICAgICwgbV9jdXJyZW50UmVxdWVzdChtX29yaWdpbmFsUmVxdWVzdCkKKyAg
ICAsIG1fcmVkaXJlY3RDaGFpbiB7IG1fb3JpZ2luYWxSZXF1ZXN0LnVybCgpIH0KICAgICAsIG1f
ZnJvbUl0ZW0oZnJvbUl0ZW0pCiAgICAgLCBtX2NsaWVudE5hdmlnYXRpb25BY3Rpdml0eShuYXZp
Z2F0aW9uQWN0aXZpdHlUaW1lb3V0KQogewotICAgIG1fcmVkaXJlY3RDaGFpbi5hcHBlbmQobV9v
cmlnaW5hbFJlcXVlc3QudXJsKCkpOwogfQogCiBOYXZpZ2F0aW9uOjpOYXZpZ2F0aW9uKFdlYk5h
dmlnYXRpb25TdGF0ZSYgc3RhdGUsIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIHRhcmdldEl0ZW0s
IFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIGZyb21JdGVtLCBGcmFtZUxvYWRUeXBlIGJhY2tGb3J3
YXJkRnJhbWVMb2FkVHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1dLU2hhcmVTaGVldC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2hh
cmVTaGVldC5tbQppbmRleCBlMzRkNTcwYTU5YmVjMjZmYmY2YmUzYTZkZjY0NmU1MDlhZWYxNjMz
Li43NWUyODM0NTEzZTE4YjVhZjZiNTIyNDcyYjM4NzlkOWQ3MTE3YjFmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NoYXJlU2hlZXQubW0KKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tTaGFyZVNoZWV0Lm1tCkBAIC05Niw5ICs5Niw5IEBA
IHN0YXRpYyB2b2lkIGFwcGVuZEZpbGVzQXNTaGFyZWFibGVVUkxzKFJldGFpblB0cjxOU011dGFi
bGVBcnJheT4mJiBzaGFyZURhdGFBcnJhCiAgICAgICAgIFN0cmluZyBmaWxlTmFtZTsKICAgICAg
ICAgUmV0YWluUHRyPE5TRGF0YT4gZmlsZURhdGE7CiAgICAgfTsKLSAgICBWZWN0b3I8RmlsZVdy
aXRlVGFzaz4gZmlsZVdyaXRlVGFza3M7Ci0gICAgZm9yIChhdXRvJiBmaWxlIDogZmlsZXMpCi0g
ICAgICAgIGZpbGVXcml0ZVRhc2tzLmFwcGVuZCh7IGZpbGUuZmlsZU5hbWUuaXNvbGF0ZWRDb3B5
KCksIGZpbGUuZmlsZURhdGEtPmNyZWF0ZU5TRGF0YSgpIH0pOworICAgIGF1dG8gZmlsZVdyaXRl
VGFza3MgPSBmaWxlcy5tYXAoW10oYXV0byYgZmlsZSkgeworICAgICAgICByZXR1cm4gRmlsZVdy
aXRlVGFzayB7IGZpbGUuZmlsZU5hbWUuaXNvbGF0ZWRDb3B5KCksIGZpbGUuZmlsZURhdGEtPmNy
ZWF0ZU5TRGF0YSgpIH07CisgICAgfSk7CiAKICAgICBhdXRvIHF1ZXVlID0gV29ya1F1ZXVlOjpj
cmVhdGUoImNvbS5hcHBsZS5XZWJLaXQuV0tTaGFyZVNoZWV0LlNoYXJlYWJsZUZpbGVXcml0ZXIi
KTsKICAgICBxdWV1ZS0+ZGlzcGF0Y2goW3NoYXJlRGF0YUFycmF5ID0gV1RGTW92ZShzaGFyZURh
dGFBcnJheSksIGZpbGVXcml0ZVRhc2tzID0gV1RGTW92ZShmaWxlV3JpdGVUYXNrcyksIHRlbXBv
cmFyeURpcmVjdG9yeSA9IHJldGFpblB0cih0ZW1wb3JhcnlEaXJlY3RvcnkpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQppbmRl
eCAzOWE4Yzg3YTEzZjkxZDZlYTg5YjA3Njg0ZTAyYzRhYTU4NTdmMjFkLi42YWVhOGQ0YzU1NWY3
YTMwYTI3MDkzYjZhYTBiOWM0MGEwOTM0NDEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQpAQCAtNjYyLDE0ICs2NjIsMTIgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnJlc3RvcmVBcHBIaWdobGlnaHRzQW5kU2Nyb2xsVG9JbmRleChj
b25zdCBWZWN0b3I8UmVmPFNoYXJlZE0KICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZT4gbWVt
b3J5SGFuZGxlczsKLQotICAgIGZvciAoYXV0byBoaWdobGlnaHQgOiBoaWdobGlnaHRzKSB7Cisg
ICAgYXV0byBtZW1vcnlIYW5kbGVzID0gV1RGOjpjb21wYWN0TWFwKGhpZ2hsaWdodHMsIFtdKGF1
dG8mIGhpZ2hsaWdodCkgLT4gc3RkOjpvcHRpb25hbDxTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZT4g
ewogICAgICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7Ci0gICAgICAgIGhpZ2hsaWdo
dC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25s
eSk7Ci0KLSAgICAgICAgbWVtb3J5SGFuZGxlcy5hcHBlbmQoU2hhcmVkTWVtb3J5OjpJUENIYW5k
bGUgeyBXVEZNb3ZlKGhhbmRsZSksIGhpZ2hsaWdodC0+c2l6ZSgpIH0pOwotICAgIH0KKyAgICAg
ICAgaWYgKCFoaWdobGlnaHQtPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJv
dGVjdGlvbjo6UmVhZE9ubHkpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICAgICAgcmV0dXJuIFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIHsgV1RGTW92ZShoYW5kbGUpLCBo
aWdobGlnaHQtPnNpemUoKSB9OworICAgIH0pOwogICAgIAogICAgIHNldFVwSGlnaGxpZ2h0c09i
c2VydmVyKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0ZyYW1lTG9h
ZFN0YXRlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0ZyYW1lTG9hZFN0YXRlLmNwcApp
bmRleCBjNjFiZWQ4MWQwOTI4NDYzMmJmMjk2NWVkMmM5OWIwYzZmZTQwMWEzLi42OWU1M2Q3YmVi
ODZjZTZiNDA2ZjNjZGI4MzkyYWI3MmEzZmZjODI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9GcmFtZUxvYWRTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvRnJhbWVMb2FkU3RhdGUuY3BwCkBAIC05MCwxMSArOTAsOCBAQCB2b2lkIEZyYW1lTG9hZFN0
YXRlOjpkaWRGaW5pc2hMb2FkKCkKIAogICAgIG1fc3RhdGUgPSBTdGF0ZTo6RmluaXNoZWQ7CiAK
LSAgICBWZWN0b3I8T2JzZXJ2ZXIqPiBvYnNlcnZlcnNDb3B5OwotICAgIGZvciAoYXV0byYgb2Jz
ZXJ2ZXIgOiBtX29ic2VydmVycykKLSAgICAgICAgb2JzZXJ2ZXJzQ29weS5hcHBlbmQoJm9ic2Vy
dmVyKTsKLSAgICBmb3IgKGF1dG8qIG9ic2VydmVyIDogb2JzZXJ2ZXJzQ29weSkKLSAgICAgICAg
b2JzZXJ2ZXItPmRpZEZpbmlzaExvYWQoKTsKKyAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogY29w
eVRvVmVjdG9yT2Y8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxPYnNlcnZlcj4+KG1fb2JzZXJ2ZXJz
KSkKKyAgICAgICAgb2JzZXJ2ZXIuZ2V0KCkuZGlkRmluaXNoTG9hZCgpOwogfQogCiB2b2lkIEZy
YW1lTG9hZFN0YXRlOjpkaWRGYWlsTG9hZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAppbmRleCA4MzFiMjFhNWYw
M2ZhNDZhYjg0MDgwMWE5NDkxOTY3MzlkYTA2N2ViLi45MjJhMGRiOGFlZTZlMDA0YTYzYzUyMzAw
ODBlNWM2Y2Y3ZjYxMzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKQEAgLTE4Myw4ICsxODMsOCBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3Mo
KQogICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsID0gY29weVRvVmVj
dG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFz
TG9jYWwoKSk7CiAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3Mg
PSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNU
b1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsKICAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdh
Y3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgpOwotICAgIGZvciAoYXV0
byYgc2NoZW1lIDogV2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xI
YW5kbGVycygpKQotICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3Vz
dG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1Jl
Z2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMgPSBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dp
dGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCk7CisKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQog
ICAgIGlmIChTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpj
b29raWVTdG9yYWdlRGlyZWN0b3J5KCk7ICFjb29raWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHko
KSkgewogICAgICAgICBpZiAoYXV0byBoYW5kbGUgPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29va2llU3RvcmFnZURpcmVjdG9yeSkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVu
dC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAKaW5kZXggZmEyNTRjMmRhZGMwNjMw
MjhkZmQ1MDRkMjg5MGE4OTJhZWRhZmIwOC4uNWJiZTczOTYyMDUyN2E4MjdjZDU3ZjE2OWFmMmYw
YzBjNTk2YTcwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlckNvbnRl
bnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcApA
QCAtMTE3LDExICsxMTcsMTEgQEAgVXNlckNvbnRlbnRDb250cm9sbGVyUGFyYW1ldGVycyBXZWJV
c2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cGFyYW1ldGVycygpIGNvbnMKICAgICBwYXJhbWV0
ZXJzLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyKCk7CiAgICAgCiAgICAgQVNTRVJUKHBhcmFtZXRl
cnMudXNlckNvbnRlbnRXb3JsZHMuaXNFbXB0eSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGlk
ZW50aWZpZXIgOiBtX2Fzc29jaWF0ZWRDb250ZW50V29ybGRzKSB7CisgICAgcGFyYW1ldGVycy51
c2VyQ29udGVudFdvcmxkcyA9IFdURjo6bWFwKG1fYXNzb2NpYXRlZENvbnRlbnRXb3JsZHMsIFtd
KGF1dG8mIGlkZW50aWZpZXIpIHsKICAgICAgICAgYXV0byogd29ybGQgPSBBUEk6OkNvbnRlbnRX
b3JsZDo6d29ybGRGb3JJZGVudGlmaWVyKGlkZW50aWZpZXIpOwogICAgICAgICBSRUxFQVNFX0FT
U0VSVCh3b3JsZCk7Ci0gICAgICAgIHBhcmFtZXRlcnMudXNlckNvbnRlbnRXb3JsZHMuYXBwZW5k
KHdvcmxkLT53b3JsZERhdGEoKSk7Ci0gICAgfQorICAgICAgICByZXR1cm4gd29ybGQtPndvcmxk
RGF0YSgpOworICAgIH0pOwogCiAgICAgZm9yIChhdXRvIHVzZXJTY3JpcHQgOiBtX3VzZXJTY3Jp
cHRzLT5lbGVtZW50c09mVHlwZTxBUEk6OlVzZXJTY3JpcHQ+KCkpCiAgICAgICAgIHBhcmFtZXRl
cnMudXNlclNjcmlwdHMuYXBwZW5kKHsgdXNlclNjcmlwdC0+aWRlbnRpZmllcigpLCB1c2VyU2Ny
aXB0LT5jb250ZW50V29ybGQoKS5pZGVudGlmaWVyKCksIHVzZXJTY3JpcHQtPnVzZXJTY3JpcHQo
KSB9KTsKQEAgLTEyOSw4ICsxMjksOSBAQCBVc2VyQ29udGVudENvbnRyb2xsZXJQYXJhbWV0ZXJz
IFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpwYXJhbWV0ZXJzKCkgY29ucwogICAgIGZv
ciAoYXV0byB1c2VyU3R5bGVTaGVldCA6IG1fdXNlclN0eWxlU2hlZXRzLT5lbGVtZW50c09mVHlw
ZTxBUEk6OlVzZXJTdHlsZVNoZWV0PigpKQogICAgICAgICBwYXJhbWV0ZXJzLnVzZXJTdHlsZVNo
ZWV0cy5hcHBlbmQoeyB1c2VyU3R5bGVTaGVldC0+aWRlbnRpZmllcigpLCB1c2VyU3R5bGVTaGVl
dC0+Y29udGVudFdvcmxkKCkuaWRlbnRpZmllcigpLCB1c2VyU3R5bGVTaGVldC0+dXNlclN0eWxl
U2hlZXQoKSB9KTsKIAotICAgIGZvciAoYXV0byYgaGFuZGxlciA6IG1fc2NyaXB0TWVzc2FnZUhh
bmRsZXJzLnZhbHVlcygpKQotICAgICAgICBwYXJhbWV0ZXJzLm1lc3NhZ2VIYW5kbGVycy5hcHBl
bmQoeyBoYW5kbGVyLT5pZGVudGlmaWVyKCksIGhhbmRsZXItPndvcmxkKCkuaWRlbnRpZmllcigp
LCBoYW5kbGVyLT5uYW1lKCkgfSk7CisgICAgcGFyYW1ldGVycy5tZXNzYWdlSGFuZGxlcnMgPSBX
VEY6Om1hcChtX3NjcmlwdE1lc3NhZ2VIYW5kbGVycywgW10oYXV0byBlbnRyeSkgeworICAgICAg
ICByZXR1cm4gV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXJEYXRhIHsgZW50cnkudmFsdWUtPmlkZW50
aWZpZXIoKSwgZW50cnkudmFsdWUtPndvcmxkKCkuaWRlbnRpZmllcigpLCBlbnRyeS52YWx1ZS0+
bmFtZSgpIH07CisgICAgfSk7CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAg
IHBhcmFtZXRlcnMuY29udGVudFJ1bGVMaXN0cyA9IGNvbnRlbnRSdWxlTGlzdERhdGEoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0F1dGhl
bnRpY2F0b3JNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRp
Y2F0aW9uL0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmNwcAppbmRleCA5MzQ4MGVkNWNiMzlhNjFjYmNm
NjczNTFlMGE4ODBlYTA5ZmU0NDc2Li42NTcyZjUzOTU5OGVmNDFkZDEwMzA1YWNlZWM4ZjE4N2Q4
ZDUyNTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNh
dGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRvck1hbmFnZXIuY3BwCkBAIC00MTYsMTEg
KzQxNiwxMSBAQCB2b2lkIEF1dGhlbnRpY2F0b3JNYW5hZ2VyOjpzdGFydERpc2NvdmVyeShjb25z
dCBUcmFuc3BvcnRTZXQmIHRyYW5zcG9ydHMpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKICAgICBBU1NFUlQobV9zZXJ2aWNlcy5pc0VtcHR5KCkgJiYgdHJhbnNwb3J0cy5zaXpl
KCkgPD0gbWF4VHJhbnNwb3J0TnVtYmVyKTsKLSAgICBmb3IgKGF1dG8mIHRyYW5zcG9ydCA6IHRy
YW5zcG9ydHMpIHsKKyAgICBtX3NlcnZpY2VzID0gV1RGOjptYXAodHJhbnNwb3J0cywgW3RoaXNd
KGF1dG8mIHRyYW5zcG9ydCkgewogICAgICAgICBhdXRvIHNlcnZpY2UgPSBjcmVhdGVTZXJ2aWNl
KHRyYW5zcG9ydCwgKnRoaXMpOwogICAgICAgICBzZXJ2aWNlLT5zdGFydERpc2NvdmVyeSgpOwot
ICAgICAgICBtX3NlcnZpY2VzLmFwcGVuZChXVEZNb3ZlKHNlcnZpY2UpKTsKLSAgICB9CisgICAg
ICAgIHJldHVybiBzZXJ2aWNlOworICAgIH0pOwogfQogCiB2b2lkIEF1dGhlbnRpY2F0b3JNYW5h
Z2VyOjppbml0VGltZU91dFRpbWVyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJC
YWNrRm9yd2FyZExpc3QuY3BwCmluZGV4IGM3NDM0M2U2NWI4ODlmNzg2OWRjOGNjYTM0MDUxYjhi
MjY1NDAyYjYuLmRlYzllODM5MjIzNjhmZTYxNTVlMDNkNjlhM2YzN2Q5ZGJmMDE3NzggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmNwcApAQCAtMzQw
LDE2ICszNDAsMTEgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3Q6OnJlbW92ZUFsbEl0ZW1zKCkK
IAogICAgIExPRyhCYWNrRm9yd2FyZCwgIihCYWNrL0ZvcndhcmQpIFdlYkJhY2tGb3J3YXJkTGlz
dCAlcCByZW1vdmVBbGxJdGVtcyAoaGFzICV6dSBvZiB0aGVtKSIsIHRoaXMsIG1fZW50cmllcy5z
aXplKCkpOwogCi0gICAgVmVjdG9yPFJlZjxXZWJCYWNrRm9yd2FyZExpc3RJdGVtPj4gcmVtb3Zl
ZEl0ZW1zOwotCi0gICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fZW50cmllcykgeworICAgIGZvciAo
YXV0byYgZW50cnkgOiBtX2VudHJpZXMpCiAgICAgICAgIGRpZFJlbW92ZUl0ZW0oZW50cnkpOwot
ICAgICAgICByZW1vdmVkSXRlbXMuYXBwZW5kKFdURk1vdmUoZW50cnkpKTsKLSAgICB9CiAKLSAg
ICBtX2VudHJpZXMuY2xlYXIoKTsKICAgICBtX2N1cnJlbnRJbmRleCA9IHN0ZDo6bnVsbG9wdDsK
LSAgICBtX3BhZ2UtPmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdChudWxscHRyLCBXVEZNb3ZlKHJl
bW92ZWRJdGVtcykpOworICAgIG1fcGFnZS0+ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KG51bGxw
dHIsIHN0ZDo6ZXhjaGFuZ2UobV9lbnRyaWVzLCB7IH0pKTsKIH0KIAogdm9pZCBXZWJCYWNrRm9y
d2FyZExpc3Q6OmNsZWFyKCkKQEAgLTM2MywyMSArMzU4LDE3IEBAIHZvaWQgV2ViQmFja0Zvcndh
cmRMaXN0OjpjbGVhcigpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxXZWJCYWNrRm9y
d2FyZExpc3RJdGVtPiBjdXJyZW50SXRlbSA9IHRoaXMtPmN1cnJlbnRJdGVtKCk7Ci0gICAgVmVj
dG9yPFJlZjxXZWJCYWNrRm9yd2FyZExpc3RJdGVtPj4gcmVtb3ZlZEl0ZW1zOwogCiAgICAgaWYg
KCFjdXJyZW50SXRlbSkgewogICAgICAgICAvLyBXZSBzaG91bGQgb25seSBldmVyIGhhdmUgbm8g
Y3VycmVudCBpdGVtIGlmIHdlIGFsc28gaGF2ZSBubyBjdXJyZW50IGl0ZW0gaW5kZXguCiAgICAg
ICAgIEFTU0VSVCghbV9jdXJyZW50SW5kZXgpOwogCiAgICAgICAgIC8vIEJ1dCBqdXN0IGluIGNh
c2UgaXQgZG9lcyBoYXBwZW4gaW4gcHJhY3RpY2Ugd2Ugc2hvdWxkIGdldCBiYWNrIGludG8gYSBj
b25zaXN0ZW50IHN0YXRlIG5vdy4KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXpl
OyArK2kpIHsKLSAgICAgICAgICAgIGRpZFJlbW92ZUl0ZW0obV9lbnRyaWVzW2ldKTsKLSAgICAg
ICAgICAgIHJlbW92ZWRJdGVtcy5hcHBlbmQoV1RGTW92ZShtX2VudHJpZXNbaV0pKTsKLSAgICAg
ICAgfQorICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9lbnRyaWVzKQorICAgICAgICAgICAg
ZGlkUmVtb3ZlSXRlbShlbnRyeSk7CiAKLSAgICAgICAgbV9lbnRyaWVzLmNsZWFyKCk7CiAgICAg
ICAgIG1fY3VycmVudEluZGV4ID0gc3RkOjpudWxsb3B0OwotICAgICAgICBtX3BhZ2UtPmRpZENo
YW5nZUJhY2tGb3J3YXJkTGlzdChudWxscHRyLCBXVEZNb3ZlKHJlbW92ZWRJdGVtcykpOworICAg
ICAgICBtX3BhZ2UtPmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdChudWxscHRyLCBzdGQ6OmV4Y2hh
bmdlKG1fZW50cmllcywgeyB9KSk7CiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM4Nyw2
ICszNzgsNyBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6Y2xlYXIoKQogICAgICAgICAgICAg
ZGlkUmVtb3ZlSXRlbShtX2VudHJpZXNbaV0pOwogICAgIH0KIAorICAgIFZlY3RvcjxSZWY8V2Vi
QmFja0ZvcndhcmRMaXN0SXRlbT4+IHJlbW92ZWRJdGVtczsKICAgICByZW1vdmVkSXRlbXMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplIC0gMSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKICAgICAgICAgaWYgKG1fY3VycmVudEluZGV4ICYmIGkgIT0gKm1fY3Vy
cmVudEluZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmlu
ZGV4IGZhMTc0MmNmMzJkYTk5NTI3MzIzZGZjN2M4YmYwYTc5MDYzMDQxZmUuLjYxYmQzMGEzNjQx
NDczYzVkYjJjNTc0MzBlOTNjYjdlMjY2M2FkODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUG9vbC5jcHAKQEAgLTg0OSwxMCArODQ5LDkgQEAgdm9pZCBXZWJQcm9jZXNz
UG9vbDo6aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzLCBX
ZWJzaXRlRGEKICAgICAgICAgICAgIHBhcmFtZXRlcnMuaW5qZWN0ZWRCdW5kbGVQYXRoRXh0ZW5z
aW9uSGFuZGxlID0gV1RGTW92ZSgqaGFuZGxlKTsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHBh
dGggOiBtX3Jlc29sdmVkUGF0aHMuYWRkaXRpb25hbFdlYlByb2Nlc3NTYW5kYm94RXh0ZW5zaW9u
UGF0aHMpIHsKLSAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0gIFNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZUhhbmRsZVdpdGhvdXRSZXNvbHZpbmdQYXRoKHBhdGgsIFNhbmRib3hFeHRlbnNpb246OlR5
cGU6OlJlYWRPbmx5KSkKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuYWRkaXRpb25hbFNhbmRib3hF
eHRlbnNpb25IYW5kbGVzLmFwcGVuZChXVEZNb3ZlKCpoYW5kbGUpKTsKLSAgICB9CisgICAgcGFy
YW1ldGVycy5hZGRpdGlvbmFsU2FuZGJveEV4dGVuc2lvbkhhbmRsZXMgPSBXVEY6OmNvbXBhY3RN
YXAobV9yZXNvbHZlZFBhdGhzLmFkZGl0aW9uYWxXZWJQcm9jZXNzU2FuZGJveEV4dGVuc2lvblBh
dGhzLCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGVXaXRob3V0UmVzb2x2aW5nUGF0aChwYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpU
eXBlOjpSZWFkT25seSk7CisgICAgfSk7CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAg
IHNldEphdmFTY3JpcHRDb25maWd1cmF0aW9uRmlsZUVuYWJsZWRGcm9tRGVmYXVsdHMoKTsKQEAg
LTE4NzAsMTQgKzE4NjksOSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZW1vdmVQcm9jZXNzRnJv
bU9yaWdpbkNhY2hlU2V0KFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKICAgICBMT0coUHJvY2Vz
c1N3YXBwaW5nLCAiKFByb2Nlc3NTd2FwcGluZykgUmVtb3ZpbmcgcHJvY2VzcyB3aXRoIHBpZCAl
aSBmcm9tIHRoZSBvcmlnaW4gY2FjaGUgc2V0IiwgcHJvY2Vzcy5wcm9jZXNzSWRlbnRpZmllcigp
KTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSB2ZXJ5IGluZWZmaWNpZW50IGFzIHRoZSBu
dW1iZXIgb2YgcmVtZW1iZXJlZCBvcmlnaW5zIGFuZCBwcm9jZXNzZXMgZ3Jvd3MKLSAgICBWZWN0
b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IHJlZ2lzdHJhYmxlRG9tYWluc1RvUmVtb3Zl
OwotICAgIGZvciAoYXV0byBlbnRyeSA6IG1fc3dhcHBlZFByb2Nlc3Nlc1BlclJlZ2lzdHJhYmxl
RG9tYWluKSB7Ci0gICAgICAgIGlmIChlbnRyeS52YWx1ZSA9PSAmcHJvY2VzcykKLSAgICAgICAg
ICAgIHJlZ2lzdHJhYmxlRG9tYWluc1RvUmVtb3ZlLmFwcGVuZChlbnRyeS5rZXkpOwotICAgIH0K
LQotICAgIGZvciAoYXV0byYgcmVnaXN0cmFibGVEb21haW4gOiByZWdpc3RyYWJsZURvbWFpbnNU
b1JlbW92ZSkKLSAgICAgICAgbV9zd2FwcGVkUHJvY2Vzc2VzUGVyUmVnaXN0cmFibGVEb21haW4u
cmVtb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKTsKKyAgICBtX3N3YXBwZWRQcm9jZXNzZXNQZXJSZWdp
c3RyYWJsZURvbWFpbi5yZW1vdmVJZihbJl0oYXV0byYgZW50cnkpIHsKKyAgICAgICAgcmV0dXJu
IGVudHJ5LnZhbHVlID09ICZwcm9jZXNzOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpwcm9jZXNzRm9yTmF2aWdhdGlvbihXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IEFQSTo6
TmF2aWdhdGlvbiYgbmF2aWdhdGlvbiwgUmVmPFdlYlByb2Nlc3NQcm94eT4mJiBzb3VyY2VQcm9j
ZXNzLCBjb25zdCBVUkwmIHNvdXJjZVVSTCwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCBw
cm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBXZWJQcm9jZXNzUHJveHk6OkNhcHRpdmVQb3J0
YWxNb2RlIGNhcHRpdmVQb3J0YWxNb2RlLCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8s
IFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmIGRhdGFTdG9yZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmLCBTdXNwZW5kZWRQYWdlUHJveHkqLCBjb25zdCBTdHJp
bmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuY3BwCmluZGV4IGIxMjg2MGRmNTEwYmM0ZTNkZmJiN2UzZmM5MjBiNWQwNDJi
ODQzMjEuLjM2OGEzOTU4N2RhMzNkZTY0YzFiODlkMGU2MzhkMzhiODhkN2ExN2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApAQCAtOTM2LDggKzkzNiw5
IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojpwcm9jZXNzRGlkVGVybWluYXRlT3JGYWlsZWRUb0xh
dW5jaChQcm9jZXNzVGVybWluYXRpb25SZWFzCiAKICAgICAvLyBUaGVyZSBpcyBhIG5lc3RlZCB0
cmFuc2FjdGlvbiBpbiBXZWJQYWdlUHJveHk6OnJlc2V0U3RhdGVBZnRlclByb2Nlc3NFeGl0ZWQo
KSB0aGF0IHdlIGRvbid0IHdhbnQgdG8gY29tbWl0IGJlZm9yZSB0aGUgY2xpZW50IGNhbGwgYmVs
b3cgKGRpc3BhdGNoUHJvY2Vzc0RpZFRlcm1pbmF0ZSkuCiAgICAgVmVjdG9yPFBhZ2VMb2FkU3Rh
dGU6OlRyYW5zYWN0aW9uPiBwYWdlTG9hZFN0YXRlVHJhbnNhY3Rpb25zOworICAgIHBhZ2VMb2Fk
U3RhdGVUcmFuc2FjdGlvbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwYWdlcy5zaXplKCkpOwog
ICAgIGZvciAoYXV0byYgcGFnZSA6IHBhZ2VzKSB7Ci0gICAgICAgIHBhZ2VMb2FkU3RhdGVUcmFu
c2FjdGlvbnMuYXBwZW5kKHBhZ2UtPnBhZ2VMb2FkU3RhdGUoKS50cmFuc2FjdGlvbigpKTsKKyAg
ICAgICAgcGFnZUxvYWRTdGF0ZVRyYW5zYWN0aW9ucy51bmNoZWNrZWRBcHBlbmQocGFnZS0+cGFn
ZUxvYWRTdGF0ZSgpLnRyYW5zYWN0aW9uKCkpOwogICAgICAgICBwYWdlLT5yZXNldFN0YXRlQWZ0
ZXJQcm9jZXNzVGVybWluYXRpb24ocmVhc29uKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKaW5k
ZXggYjM2ZDlhNzRiOWExNzVhMDgxNmI3YTJlMTRmMTM5ZGI1ZWY1NmU2ZC4uZGZhN2IyYTRjNzU5
OTkyYmJjMjViYTZhYjllY2JiMGIyODJjNDQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTQzMSw4
ICs0MzEsMTAgQEAgcHJpdmF0ZToKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVE
YXRhVHlwZTo6RGlza0NhY2hlKSkgewogICAgICAgICBtX3F1ZXVlLT5kaXNwYXRjaChbbWVkaWFD
YWNoZURpcmVjdG9yeSA9IG1fY29uZmlndXJhdGlvbi0+bWVkaWFDYWNoZURpcmVjdG9yeSgpLmlz
b2xhdGVkQ29weSgpLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKICAgICAgICAgICAgIFdlYnNpdGVE
YXRhIHdlYnNpdGVEYXRhOwotICAgICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50OjpvcmlnaW5zSW5NZWRpYUNhY2hlKG1lZGlhQ2FjaGVEaXJlY3Rv
cnkpKQotICAgICAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKFdlYnNpdGVE
YXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpEaXNrQ2FjaGUsIDAgfSk7Cisg
ICAgICAgICAgICBhdXRvIG9yaWdpbnMgPSBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpvcmln
aW5zSW5NZWRpYUNhY2hlKG1lZGlhQ2FjaGVEaXJlY3RvcnkpOworICAgICAgICAgICAgd2Vic2l0
ZURhdGEuZW50cmllcyA9IFdURjo6bWFwKG9yaWdpbnMsIFtdKGF1dG8mIG9yaWdpbikgeworICAg
ICAgICAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVE
YXRhVHlwZTo6RGlza0NhY2hlLCAwIH07CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGNh
bGxiYWNrQWdncmVnYXRvci0+YWRkV2Vic2l0ZURhdGEoV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwog
ICAgICAgICB9KTsKICAgICB9CkBAIC00NjksOCArNDcxLDkgQEAgcHJpdmF0ZToKICAgICBpZiAo
ZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RGV2aWNlSWRIYXNoU2FsdCkpIHsK
ICAgICAgICAgbV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS0+Z2V0RGV2aWNlSWRIYXNoU2FsdE9y
aWdpbnMoW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byYmIG9yaWdpbnMpIHsKICAgICAgICAgICAg
IFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhOwotICAgICAgICAgICAgd2hpbGUgKCFvcmlnaW5zLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZChXZWJz
aXRlRGF0YTo6RW50cnkgeyBvcmlnaW5zLnRha2VBbnkoKSwgV2Vic2l0ZURhdGFUeXBlOjpEZXZp
Y2VJZEhhc2hTYWx0LCAwIH0pOworICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcyA9IFdU
Rjo6bWFwKG9yaWdpbnMsIFtdKGF1dG8mIG9yaWdpbikgeworICAgICAgICAgICAgICAgIHJldHVy
biBXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6RGV2aWNlSWRI
YXNoU2FsdCwgMCB9OworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBjYWxsYmFja0FnZ3Jl
Z2F0b3ItPmFkZFdlYnNpdGVEYXRhKFdURk1vdmUod2Vic2l0ZURhdGEpKTsKICAgICAgICAgfSk7
CiAgICAgfQpAQCAtNDc5LDEwICs0ODIsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgbV9xdWV1ZS0+
ZGlzcGF0Y2goW2ZldGNoT3B0aW9ucywgYXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSA9IG1fY29u
ZmlndXJhdGlvbi0+YXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSgpLmlzb2xhdGVkQ29weSgpLCBh
cHBsaWNhdGlvbkNhY2hlRmxhdEZpbGVTdWJkaXJlY3RvcnlOYW1lID0gbV9jb25maWd1cmF0aW9u
LT5hcHBsaWNhdGlvbkNhY2hlRmxhdEZpbGVTdWJkaXJlY3RvcnlOYW1lKCkuaXNvbGF0ZWRDb3B5
KCksIGNhbGxiYWNrQWdncmVnYXRvcl0gewogICAgICAgICAgICAgYXV0byBzdG9yYWdlID0gV2Vi
Q29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNyZWF0ZShhcHBsaWNhdGlvbkNhY2hlRGly
ZWN0b3J5LCBhcHBsaWNhdGlvbkNhY2hlRmxhdEZpbGVTdWJkaXJlY3RvcnlOYW1lKTsKICAgICAg
ICAgICAgIFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhOwotICAgICAgICAgICAgZm9yIChhdXRvJiBv
cmlnaW4gOiBzdG9yYWdlLT5vcmlnaW5zV2l0aENhY2hlKCkpIHsKKyAgICAgICAgICAgIGF1dG8g
b3JpZ2lucyA9IHN0b3JhZ2UtPm9yaWdpbnNXaXRoQ2FjaGUoKTsKKyAgICAgICAgICAgIHdlYnNp
dGVEYXRhLmVudHJpZXMgPSBXVEY6Om1hcChvcmlnaW5zLCBbJl0oYXV0byYgb3JpZ2luKSB7CiAg
ICAgICAgICAgICAgICAgdWludDY0X3Qgc2l6ZSA9IGZldGNoT3B0aW9ucy5jb250YWlucyhXZWJz
aXRlRGF0YUZldGNoT3B0aW9uOjpDb21wdXRlU2l6ZXMpID8gc3RvcmFnZS0+ZGlza1VzYWdlRm9y
T3JpZ2luKG9yaWdpbikgOiAwOwotICAgICAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMu
YXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpPZmZs
aW5lV2ViQXBwbGljYXRpb25DYWNoZSwgc2l6ZSB9KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5
cGU6Ok9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlLCBzaXplIH07CisgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkV2Vic2l0ZURhdGEoV1RGTW92ZSh3
ZWJzaXRlRGF0YSkpOwogICAgICAgICB9KTsKICAgICB9CkBAIC00OTAsOCArNDk0LDkgQEAgcHJp
dmF0ZToKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6V2ViU1FM
RGF0YWJhc2VzKSAmJiBpc1BlcnNpc3RlbnQoKSkgewogICAgICAgICBtX3F1ZXVlLT5kaXNwYXRj
aChbd2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24tPndlYlNRTERhdGFi
YXNlRGlyZWN0b3J5KCkuaXNvbGF0ZWRDb3B5KCksIGNhbGxiYWNrQWdncmVnYXRvcl0oKSB7CiAg
ICAgICAgICAgICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsKLSAgICAgICAgICAgIGZvciAoYXV0
byYgb3JpZ2luIDogV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyV2l0aERhdGFiYXNl
UGF0aCh3ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSktPm9yaWdpbnMoKSkKLSAgICAgICAgICAgICAg
ICB3ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4s
IFdlYnNpdGVEYXRhVHlwZTo6V2ViU1FMRGF0YWJhc2VzLCAwIH0pOworICAgICAgICAgICAgd2Vi
c2l0ZURhdGEuZW50cmllcyA9IFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcldpdGhE
YXRhYmFzZVBhdGgod2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkpLT5vcmlnaW5zKCkubWFwKFtdKGF1
dG8mIG9yaWdpbikgeworICAgICAgICAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0YTo6RW50cnkg
eyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6V2ViU1FMRGF0YWJhc2VzLCAwIH07CisgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkV2Vic2l0ZURhdGEo
V1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICB9KTsKICAgICB9CkBAIC00OTksOCArNTA0
LDkgQEAgcHJpdmF0ZToKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlw
ZTo6TWVkaWFLZXlzKSAmJiBpc1BlcnNpc3RlbnQoKSkgewogICAgICAgICBtX3F1ZXVlLT5kaXNw
YXRjaChbbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSA9IG1fY29uZmlndXJhdGlvbi0+bWVkaWFL
ZXlzU3RvcmFnZURpcmVjdG9yeSgpLmlzb2xhdGVkQ29weSgpLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsKICAgICAgICAgICAgIFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhOwotICAgICAgICAgICAgZm9y
IChhdXRvJiBvcmlnaW4gOiBtZWRpYUtleU9yaWdpbnMobWVkaWFLZXlzU3RvcmFnZURpcmVjdG9y
eSkpCi0gICAgICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmQoV2Vic2l0ZURh
dGE6OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6Ok1lZGlhS2V5cywgMCB9KTsKKyAg
ICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMgPSBtZWRpYUtleU9yaWdpbnMobWVkaWFLZXlz
U3RvcmFnZURpcmVjdG9yeSkubWFwKFtdKGF1dG8mIG9yaWdpbikgeworICAgICAgICAgICAgICAg
IHJldHVybiBXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6TWVk
aWFLZXlzLCAwIH07CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVn
YXRvci0+YWRkV2Vic2l0ZURhdGEoV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICB9KTsK
ICAgICB9CkBAIC02NjcsOCArNjczLDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVE
YXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgY29uc3QgVmUKICAgICBW
ZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zOwogCiAgICAgZm9yIChj
b25zdCBhdXRvJiBkYXRhUmVjb3JkIDogZGF0YVJlY29yZHMpIHsKKyAgICAgICAgb3JpZ2lucy5y
ZXNlcnZlQ2FwYWNpdHkob3JpZ2lucy5zaXplKCkgKyBkYXRhUmVjb3JkLm9yaWdpbnMuc2l6ZSgp
KTsKICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBkYXRhUmVjb3JkLm9yaWdpbnMpCi0gICAg
ICAgICAgICBvcmlnaW5zLmFwcGVuZChvcmlnaW4pOworICAgICAgICAgICAgb3JpZ2lucy51bmNo
ZWNrZWRBcHBlbmQob3JpZ2luKTsKICAgICB9CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRv
ciA9IFJlbW92YWxDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwpAQCAtNzA3LDEzICs3MTQsMTYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgY29u
c3QgVmUKICAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IEhTVFNDYWNoZUhvc3ROYW1lczsKICAg
ICAgICAgICAgIFZlY3RvcjxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gcmVnaXN0cmFibGVE
b21haW5zOwogICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBkYXRhUmVjb3JkIDogZGF0YVJl
Y29yZHMpIHsKKyAgICAgICAgICAgICAgICBjb29raWVIb3N0TmFtZXMucmVzZXJ2ZUNhcGFjaXR5
KGNvb2tpZUhvc3ROYW1lcy5zaXplKCkgKyBkYXRhUmVjb3JkLmNvb2tpZUhvc3ROYW1lcy5zaXpl
KCkpOwogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgaG9zdE5hbWUgOiBkYXRhUmVjb3JkLmNv
b2tpZUhvc3ROYW1lcykKLSAgICAgICAgICAgICAgICAgICAgY29va2llSG9zdE5hbWVzLmFwcGVu
ZChob3N0TmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGNvb2tpZUhvc3ROYW1lcy51bmNoZWNr
ZWRBcHBlbmQoaG9zdE5hbWUpOworICAgICAgICAgICAgICAgIEhTVFNDYWNoZUhvc3ROYW1lcy5y
ZXNlcnZlQ2FwYWNpdHkoSFNUU0NhY2hlSG9zdE5hbWVzLnNpemUoKSArIGRhdGFSZWNvcmQuSFNU
U0NhY2hlSG9zdE5hbWVzLnNpemUoKSk7CiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBob3N0
TmFtZSA6IGRhdGFSZWNvcmQuSFNUU0NhY2hlSG9zdE5hbWVzKQotICAgICAgICAgICAgICAgICAg
ICBIU1RTQ2FjaGVIb3N0TmFtZXMuYXBwZW5kKGhvc3ROYW1lKTsKKyAgICAgICAgICAgICAgICAg
ICAgSFNUU0NhY2hlSG9zdE5hbWVzLnVuY2hlY2tlZEFwcGVuZChob3N0TmFtZSk7CiAjaWYgRU5B
QkxFKElOVEVMTElHRU5UX1RSQUNLSU5HX1BSRVZFTlRJT04pCisgICAgICAgICAgICAgICAgcmVn
aXN0cmFibGVEb21haW5zLnJlc2VydmVDYXBhY2l0eShyZWdpc3RyYWJsZURvbWFpbnMuc2l6ZSgp
ICsgZGF0YVJlY29yZC5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUmVnaXN0cmFibGVEb21haW5zLnNp
emUoKSk7CiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiByZWdpc3RyYWJsZURvbWFpbiA6IGRh
dGFSZWNvcmQucmVzb3VyY2VMb2FkU3RhdGlzdGljc1JlZ2lzdHJhYmxlRG9tYWlucykKLSAgICAg
ICAgICAgICAgICAgICAgcmVnaXN0cmFibGVEb21haW5zLmFwcGVuZChyZWdpc3RyYWJsZURvbWFp
bik7CisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhYmxlRG9tYWlucy51bmNoZWNrZWRBcHBl
bmQocmVnaXN0cmFibGVEb21haW4pOwogI2VuZGlmCiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbQppbmRleCBmYTNiYzUwYjI0
ZmFmMmVlNWZlZTc0NmQyYmVjODA0YWE0YWZiNzJjLi44NTc1OWMxYTQxZDQyMjRhN2ZkZmFiZDk5
MTUxYjYwNjg5YzA4MDlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
VGV4dENoZWNrZXJJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1RleHRD
aGVja2VySU9TLm1tCkBAIC0zNCw2ICszNCw3IEBACiAjaW1wb3J0IDx3dGYvSGFzaE1hcC5oPgog
I2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0
cmluZ1ZpZXcuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0yNDAsMTIgKzI0MSwxMyBAQCBW
ZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgoU3BlbGxEb2N1bWVudFRhZyBzcAogICAgICAgICAgICAgICAgIFRleHRDaGVja2luZ1Jlc3Vs
dCByZXN1bHQ7CiAgICAgICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBl
OjpTcGVsbGluZzsKICAgICAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5nZTsK
LSAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgICAg
IHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYg
KHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiBjaGVja2luZ1R5cGVz
LmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpKSB7CiAgICAgICAgICAgICAgICAg
VGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgICAgICBOU0FycmF5ICpkZXRh
aWxzID0gW2luY29taW5nUmVzdWx0IGdyYW1tYXJEZXRhaWxzXTsKICAgICAgICAgICAgICAgICBy
ZXN1bHQudHlwZSA9IFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXI7CiAgICAgICAgICAgICAgICAg
cmVzdWx0LnJhbmdlID0gcmVzdWx0UmFuZ2U7CisgICAgICAgICAgICAgICAgcmVzdWx0LmRldGFp
bHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkZXRhaWxzLmNvdW50KTsKICAgICAgICAgICAgICAg
ICBmb3IgKE5TRGljdGlvbmFyeSAqaW5jb21pbmdEZXRhaWwgaW4gZGV0YWlscykgewogICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoaW5jb21pbmdEZXRhaWwpOwogICAgICAgICAgICAgICAgICAg
ICBHcmFtbWFyRGV0YWlsIGRldGFpbDsKQEAgLTI2MCwxMiArMjYyLDEwIEBAIFZlY3RvcjxUZXh0
Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChTcGVsbERv
Y3VtZW50VGFnIHNwCiAgICAgICAgICAgICAgICAgICAgIGRldGFpbC5yYW5nZSA9IGRldGFpbE5T
UmFuZ2U7CiAgICAgICAgICAgICAgICAgICAgIGRldGFpbC51c2VyRGVzY3JpcHRpb24gPSBbaW5j
b21pbmdEZXRhaWwgb2JqZWN0Rm9yS2V5OkAiTlNHcmFtbWFyVXNlckRlc2NyaXB0aW9uIl07CiAg
ICAgICAgICAgICAgICAgICAgIE5TQXJyYXkgKmd1ZXNzZXMgPSBbaW5jb21pbmdEZXRhaWwgb2Jq
ZWN0Rm9yS2V5OkAiTlNHcmFtbWFyQ29ycmVjdGlvbnMiXTsKLSAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoTlNTdHJpbmcgKmd1ZXNzIGluIGd1ZXNzZXMpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWwuZ3Vlc3Nlcy5hcHBlbmQoZ3Vlc3MpOwotICAg
ICAgICAgICAgICAgICAgICByZXN1bHQuZGV0YWlscy5hcHBlbmQoZGV0YWlsKTsKKyAgICAgICAg
ICAgICAgICAgICAgZGV0YWlsLmd1ZXNzZXMgPSBtYWtlVmVjdG9yPFN0cmluZz4oZ3Vlc3Nlcyk7
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5kZXRhaWxzLnVuY2hlY2tlZEFwcGVuZChkZXRh
aWwpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChy
ZXN1bHQpOworICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0YW50Lm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0KaW5kZXggYzlh
ZTFhNjY3NzcxYjI2MTA5NTg1NGVhZTU5ZTI4NWFiNzUyZjY3Yi4uNDVkZDJlMTM0YzRkODc4ZjY1
YjE2ZjlkZjQ0ZDYxNDAxMzU5ZmJiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0KQEAgLTIwNywxMiArMjA3LDExIEBA
IC0gKENHUmVjdClwcmVzZW50YXRpb25SZWN0Rm9yRWxlbWVudFVzaW5nQ2xvc2VzdEluZGljYXRl
ZFJlY3QKIAogICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgdG91Y2hMb2NhdGlvbiA9IF9wb3NpdGlv
bkluZm9ybWF0aW9uLT5yZXF1ZXN0LnBvaW50OwogICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgbGlu
a0VsZW1lbnRMb2NhdGlvbiA9IGluZGljYXRvci50ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nv
b3JkaW5hdGVzLmxvY2F0aW9uKCk7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4gaW5k
aWNhdGVkUmVjdHM7Ci0gICAgZm9yIChhdXRvIHJlY3QgOiBpbmRpY2F0b3IudGV4dFJlY3RzSW5C
b3VuZGluZ1JlY3RDb29yZGluYXRlcykgeworICAgIGF1dG8gaW5kaWNhdGVkUmVjdHMgPSBpbmRp
Y2F0b3IudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcy5tYXAoWyZdKGF1dG8gcmVj
dCkgewogICAgICAgICByZWN0LmluZmxhdGUoMik7CiAgICAgICAgIHJlY3QubW92ZUJ5KGxpbmtF
bGVtZW50TG9jYXRpb24pOwotICAgICAgICBpbmRpY2F0ZWRSZWN0cy5hcHBlbmQocmVjdCk7Ci0g
ICAgfQorICAgICAgICByZXR1cm4gcmVjdDsKKyAgICB9KTsKIAogICAgIGZvciAoY29uc3QgYXV0
byYgcGF0aCA6IFdlYkNvcmU6OlBhdGhVdGlsaXRpZXM6OnBhdGhzV2l0aFNocmlua1dyYXBwZWRS
ZWN0cyhpbmRpY2F0ZWRSZWN0cywgMCkpIHsKICAgICAgICAgYXV0byBib3VuZGluZ1JlY3QgPSBw
YXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9U
ZXh0Q2hlY2tlck1hYy5tbQppbmRleCAxNmQ2ODM4ZTU0OGUwNDMyZmJkMThmOGQ0ZDJhZGUxYzJj
MTA4ZjZlLi5lY2UyZTNlMjQ1MzE1ZWU3MWFkOTc5N2ZhNmNjODBiNDI5MzMwZDExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0KKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFjLm1tCkBAIC0zNDQsMTIg
KzM0NCwxMyBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tU
ZXh0T2ZQYXJhZ3JhcGgoU3BlbGxEb2N1bWVudFRhZyBzcAogICAgICAgICAgICAgVGV4dENoZWNr
aW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgIHJlc3VsdC50eXBlID0gVGV4dENoZWNraW5n
VHlwZTo6U3BlbGxpbmc7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5nZTsK
LSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICByZXN1bHRz
LmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdFR5cGUg
PT0gTlNUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiBjaGVja2luZ1R5cGVzLmNvbnRhaW5zKFRl
eHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpKSB7CiAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1
bHQgcmVzdWx0OwogICAgICAgICAgICAgTlNBcnJheSAqZGV0YWlscyA9IFtpbmNvbWluZ1Jlc3Vs
dCBncmFtbWFyRGV0YWlsc107CiAgICAgICAgICAgICByZXN1bHQudHlwZSA9IFRleHRDaGVja2lu
Z1R5cGU6OkdyYW1tYXI7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5nZTsK
KyAgICAgICAgICAgIHJlc3VsdC5kZXRhaWxzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGV0YWls
cy5jb3VudCk7CiAgICAgICAgICAgICBmb3IgKE5TRGljdGlvbmFyeSAqaW5jb21pbmdEZXRhaWwg
aW4gZGV0YWlscykgewogICAgICAgICAgICAgICAgIEFTU0VSVChpbmNvbWluZ0RldGFpbCk7CiAg
ICAgICAgICAgICAgICAgR3JhbW1hckRldGFpbCBkZXRhaWw7CkBAIC0zNjEsOSArMzYyLDggQEAg
VmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdy
YXBoKFNwZWxsRG9jdW1lbnRUYWcgc3AKICAgICAgICAgICAgICAgICBkZXRhaWwucmFuZ2UgPSBk
ZXRhaWxOU1JhbmdlOwogICAgICAgICAgICAgICAgIGRldGFpbC51c2VyRGVzY3JpcHRpb24gPSBb
aW5jb21pbmdEZXRhaWwgb2JqZWN0Rm9yS2V5Ok5TR3JhbW1hclVzZXJEZXNjcmlwdGlvbl07CiAg
ICAgICAgICAgICAgICAgTlNBcnJheSAqZ3Vlc3NlcyA9IFtpbmNvbWluZ0RldGFpbCBvYmplY3RG
b3JLZXk6TlNHcmFtbWFyQ29ycmVjdGlvbnNdOwotICAgICAgICAgICAgICAgIGZvciAoTlNTdHJp
bmcgKmd1ZXNzIGluIGd1ZXNzZXMpCi0gICAgICAgICAgICAgICAgICAgIGRldGFpbC5ndWVzc2Vz
LmFwcGVuZChTdHJpbmcoZ3Vlc3MpKTsKLSAgICAgICAgICAgICAgICByZXN1bHQuZGV0YWlscy5h
cHBlbmQoZGV0YWlsKTsKKyAgICAgICAgICAgICAgICBkZXRhaWwuZ3Vlc3NlcyA9IG1ha2VWZWN0
b3I8U3RyaW5nPihndWVzc2VzKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuZGV0YWlscy51bmNo
ZWNrZWRBcHBlbmQoV1RGTW92ZShkZXRhaWwpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7CiAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0VHlwZSA9
PSBOU1RleHRDaGVja2luZ1R5cGVMaW5rICYmIGNoZWNraW5nVHlwZXMuY29udGFpbnMoVGV4dENo
ZWNraW5nVHlwZTo6TGluaykpIHsKQEAgLTM3MSwzMSArMzcxLDMxIEBAIFZlY3RvcjxUZXh0Q2hl
Y2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChTcGVsbERvY3Vt
ZW50VGFnIHNwCiAgICAgICAgICAgICByZXN1bHQudHlwZSA9IFRleHRDaGVja2luZ1R5cGU6Okxp
bms7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5nZTsKICAgICAgICAgICAg
IHJlc3VsdC5yZXBsYWNlbWVudCA9IFtbaW5jb21pbmdSZXN1bHQgVVJMXSBhYnNvbHV0ZVN0cmlu
Z107Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgcmVz
dWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRU
eXBlID09IE5TVGV4dENoZWNraW5nVHlwZVF1b3RlICYmIGNoZWNraW5nVHlwZXMuY29udGFpbnMo
VGV4dENoZWNraW5nVHlwZTo6UXVvdGUpKSB7CiAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1
bHQgcmVzdWx0OwogICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpR
dW90ZTsKICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJhbmdlOwogICAgICAgICAg
ICAgcmVzdWx0LnJlcGxhY2VtZW50ID0gW2luY29taW5nUmVzdWx0IHJlcGxhY2VtZW50U3RyaW5n
XTsKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICByZXN1
bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdFR5
cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlRGFzaCAmJiBjaGVja2luZ1R5cGVzLmNvbnRhaW5zKFRl
eHRDaGVja2luZ1R5cGU6OkRhc2gpKSB7CiAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQg
cmVzdWx0OwogICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpEYXNo
OwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFuZ2U7CiAgICAgICAgICAgICBy
ZXN1bHQucmVwbGFjZW1lbnQgPSBbaW5jb21pbmdSZXN1bHQgcmVwbGFjZW1lbnRTdHJpbmddOwot
ICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3VsdHMu
YXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0VHlwZSA9
PSBOU1RleHRDaGVja2luZ1R5cGVSZXBsYWNlbWVudCAmJiBjaGVja2luZ1R5cGVzLmNvbnRhaW5z
KFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50KSkgewogICAgICAgICAgICAgVGV4dENoZWNr
aW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgIHJlc3VsdC50eXBlID0gVGV4dENoZWNraW5n
VHlwZTo6UmVwbGFjZW1lbnQ7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5n
ZTsKICAgICAgICAgICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IFtpbmNvbWluZ1Jlc3VsdCByZXBs
YWNlbWVudFN0cmluZ107Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAg
ICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgfSBlbHNl
IGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb24gJiYgY2hlY2tp
bmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpDb3JyZWN0aW9uKSkgewogICAgICAg
ICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgIHJlc3VsdC50eXBl
ID0gVGV4dENoZWNraW5nVHlwZTo6Q29ycmVjdGlvbjsKICAgICAgICAgICAgIHJlc3VsdC5yYW5n
ZSA9IHJlc3VsdFJhbmdlOwogICAgICAgICAgICAgcmVzdWx0LnJlcGxhY2VtZW50ID0gW2luY29t
aW5nUmVzdWx0IHJlcGxhY2VtZW50U3RyaW5nXTsKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5k
KHJlc3VsdCk7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwog
ICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
QXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3IuY3BwCmluZGV4IDczNTc2YTI0N2Nl
MTE3NTI3NTY1ZmIxZDI2YjRjZDA5YjI0NzJlOWYuLjEyN2FjMWU0NTc3MTViZjdkZmIwZTljOTNh
MTA0MjBiNGY1YzM1NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9BcHBs
ZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3IuY3BwCkBAIC05OCw5ICs5OCw5IEBA
IHZvaWQgV2ViUGF5bWVudENvb3JkaW5hdG9yOjpvcGVuUGF5bWVudFNldHVwKGNvbnN0IFN0cmlu
ZyYgbWVyY2hhbnRJZGVudGlmaWVyLCBjCiAKIGJvb2wgV2ViUGF5bWVudENvb3JkaW5hdG9yOjpz
aG93UGF5bWVudFVJKGNvbnN0IFVSTCYgb3JpZ2luYXRpbmdVUkwsIGNvbnN0IFZlY3RvcjxVUkw+
JiBsaW5rSWNvblVSTHMsIGNvbnN0IFdlYkNvcmU6OkFwcGxlUGF5U2Vzc2lvblBheW1lbnRSZXF1
ZXN0JiBwYXltZW50UmVxdWVzdCkKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiBsaW5rSWNvblVSTFN0
cmluZ3M7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBsaW5rSWNvblVSTCA6IGxpbmtJY29uVVJMcykK
LSAgICAgICAgbGlua0ljb25VUkxTdHJpbmdzLmFwcGVuZChsaW5rSWNvblVSTC5zdHJpbmcoKSk7
CisgICAgYXV0byBsaW5rSWNvblVSTFN0cmluZ3MgPSBsaW5rSWNvblVSTHMubWFwKFtdKGF1dG8m
IGxpbmtJY29uVVJMKSB7CisgICAgICAgIHJldHVybiBsaW5rSWNvblVSTC5zdHJpbmcoKTsKKyAg
ICB9KTsKIAogICAgIGJvb2wgcmVzdWx0OwogICAgIGlmICghc2VuZFN5bmMoTWVzc2FnZXM6Oldl
YlBheW1lbnRDb29yZGluYXRvclByb3h5OjpTaG93UGF5bWVudFVJKG1fd2ViUGFnZS5pZGVudGlm
aWVyKCksIG1fd2ViUGFnZS53ZWJQYWdlUHJveHlJZGVudGlmaWVyKCksIG9yaWdpbmF0aW5nVVJM
LnN0cmluZygpLCBsaW5rSWNvblVSTFN0cmluZ3MsIHBheW1lbnRSZXF1ZXN0KSwgTWVzc2FnZXM6
OldlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpTaG93UGF5bWVudFVJOjpSZXBseShyZXN1bHQp
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1
dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0F1dG9t
YXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5jcHAKaW5kZXggYjBmZTgzNTcyMjNiMzEz
M2ZjNGRiMmZiYWFkOGU3MzlmNWUzYjlkNi4uZjQ1Y2ZiNDE5MTM2YjdjZjA4ZTNiZmQ0OTZiMmI2
OTdhM2M5ZWZlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5jcHAKQEAgLTgwNSwx
MyArODA1LDEyIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6c2V0RmlsZXNGb3JJ
bnB1dEZpbGVVcGxvYWQoV2ViQ29yZTo6UGFnZUlkZW50aWZpCiAgICAgYXV0byYgaW5wdXRFbGVt
ZW50ID0gZG93bmNhc3Q8V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudD4oKmNvcmVFbGVtZW50KTsK
ICAgICBWZWN0b3I8UmVmPFdlYkNvcmU6OkZpbGU+PiBmaWxlT2JqZWN0czsKICAgICBpZiAoaW5w
dXRFbGVtZW50Lm11bHRpcGxlKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIGZpbGVzID0gaW5wdXRF
bGVtZW50LmZpbGVzKCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgZmlsZSA6IGZpbGVzLT5m
aWxlcygpKQotICAgICAgICAgICAgICAgIGZpbGVPYmplY3RzLmFwcGVuZChmaWxlLmNvcHlSZWYo
KSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8qIGZpbGVzID0gaW5wdXRFbGVtZW50LmZp
bGVzKCkpCisgICAgICAgICAgICBmaWxlT2JqZWN0cy5hcHBlbmRWZWN0b3IoZmlsZXMtPmZpbGVz
KCkpOwogICAgIH0KKyAgICBmaWxlT2JqZWN0cy5yZXNlcnZlQ2FwYWNpdHkoZmlsZU9iamVjdHMu
c2l6ZSgpICsgZmlsZW5hbWVzLnNpemUoKSk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBwYXRoIDog
ZmlsZW5hbWVzKQotICAgICAgICBmaWxlT2JqZWN0cy5hcHBlbmQoV2ViQ29yZTo6RmlsZTo6Y3Jl
YXRlKCZpbnB1dEVsZW1lbnQuZG9jdW1lbnQoKSwgcGF0aCkpOworICAgICAgICBmaWxlT2JqZWN0
cy51bmNoZWNrZWRBcHBlbmQoV2ViQ29yZTo6RmlsZTo6Y3JlYXRlKCZpbnB1dEVsZW1lbnQuZG9j
dW1lbnQoKSwgcGF0aCkpOwogICAgIGlucHV0RWxlbWVudC5zZXRGaWxlcyhXZWJDb3JlOjpGaWxl
TGlzdDo6Y3JlYXRlKFdURk1vdmUoZmlsZU9iamVjdHMpKSk7CiAKICAgICBjb21wbGV0aW9uSGFu
ZGxlcihzdGQ6Om51bGxvcHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIuY3BwCmluZGV4IDdj
OWQ0NTY5YTRlNTBiMDcxM2E3N2E4YjRhYzI0MGZhZTQ2ZGRkMWUuLjgxM2FmMjg1OTgzY2I4MmMz
MGYyNGUyNTM3MTU1YzdmMGYzYjYxMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlci5jcHAK
QEAgLTE2MCw4ICsxNjAsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFQbGF5ZXJQcml2YXRlSW50
ZXJmYWNlPiBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXI6OmNyZWF0ZVJlbQogICAgIHByb3h5Q29u
ZmlndXJhdGlvbi5pc1ZpZGVvID0gcGxheWVyLT5pc1ZpZGVvUGxheWVyKCk7CiAKICNpZiBFTkFC
TEUoQVZGX0NBUFRJT05TKQotICAgIGZvciAoY29uc3QgYXV0byYgdHJhY2sgOiBwbGF5ZXItPm91
dE9mQmFuZFRyYWNrU291cmNlcygpKQotICAgICAgICBwcm94eUNvbmZpZ3VyYXRpb24ub3V0T2ZC
YW5kVHJhY2tEYXRhLmFwcGVuZCh0cmFjay0+ZGF0YSgpKTsKKyAgICBwcm94eUNvbmZpZ3VyYXRp
b24ub3V0T2ZCYW5kVHJhY2tEYXRhID0gcGxheWVyLT5vdXRPZkJhbmRUcmFja1NvdXJjZXMoKS5t
YXAoW10oYXV0byYgdHJhY2spIHsKKyAgICAgICAgcmV0dXJuIHRyYWNrLT5kYXRhKCk7CisgICAg
fSk7CiAjZW5kaWYKIAogICAgIGF1dG8gZG9jdW1lbnRTZWN1cml0eU9yaWdpbiA9IHBsYXllci0+
ZG9jdW1lbnRTZWN1cml0eU9yaWdpbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9tZWRpYS9Tb3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvU291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZS5jcHAK
aW5kZXggOTY2ZmM5M2I3N2FmYWEzZTYyMDhkN2FiYTVhZWQyYzdhOTRjNzRiMi4uNGVmMTY0MGE0
MDEwMDZhNmI4ZjY5Y2M1MDExNjRhOGJkMTkwZWI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9Tb3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1NvdXJjZUJ1ZmZlclByaXZhdGVS
ZW1vdGUuY3BwCkBAIC0zMzgsMTYgKzMzOCwxMSBAQCB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVS
ZW1vdGU6OnVwZGF0ZVRyYWNrSWRzKFZlY3RvcjxzdGQ6OnBhaXI8QXRvbVN0cmluZywgQXRvbQog
ICAgIGlmICghbV9ncHVQcm9jZXNzQ29ubmVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAg
VmVjdG9yPHN0ZDo6cGFpcjxUcmFja1ByaXZhdGVSZW1vdGVJZGVudGlmaWVyLCBUcmFja1ByaXZh
dGVSZW1vdGVJZGVudGlmaWVyPj4gaWRlbnRpZmllclBhaXJzOwotCi0gICAgZm9yIChhdXRvJiB0
cmFja0lkUGFpciA6IHRyYWNrSWRQYWlycykgeworICAgIGF1dG8gaWRlbnRpZmllclBhaXJzID0g
dHJhY2tJZFBhaXJzLm1hcChbdGhpc10oYXV0byYgdHJhY2tJZFBhaXIpIHsKICAgICAgICAgQVNT
RVJUKG1fcHJldlRyYWNrSWRlbnRpZmllck1hcC5jb250YWlucyh0cmFja0lkUGFpci5maXJzdCkp
OwogICAgICAgICBBU1NFUlQobV90cmFja0lkZW50aWZpZXJNYXAuY29udGFpbnModHJhY2tJZFBh
aXIuc2Vjb25kKSk7Ci0KLSAgICAgICAgYXV0byBvbGRJZGVudGlmaWVyID0gbV9wcmV2VHJhY2tJ
ZGVudGlmaWVyTWFwLnRha2UodHJhY2tJZFBhaXIuZmlyc3QpOwotICAgICAgICBhdXRvIG5ld0lk
ZW50aWZpZXIgPSBtX3RyYWNrSWRlbnRpZmllck1hcC5nZXQodHJhY2tJZFBhaXIuc2Vjb25kKTsK
LSAgICAgICAgaWRlbnRpZmllclBhaXJzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihvbGRJZGVudGlm
aWVyLCBuZXdJZGVudGlmaWVyKSk7Ci0gICAgfQorICAgICAgICByZXR1cm4gc3RkOjpwYWlyIHsg
bV9wcmV2VHJhY2tJZGVudGlmaWVyTWFwLnRha2UodHJhY2tJZFBhaXIuZmlyc3QpLCBtX3RyYWNr
SWRlbnRpZmllck1hcC5nZXQodHJhY2tJZFBhaXIuc2Vjb25kKSB9OworICAgIH0pOwogCiAgICAg
bV9ncHVQcm9jZXNzQ29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6OlJlbW90
ZVNvdXJjZUJ1ZmZlclByb3h5OjpVcGRhdGVUcmFja0lkcyhpZGVudGlmaWVyUGFpcnMpLCBtX3Jl
bW90ZVNvdXJjZUJ1ZmZlcklkZW50aWZpZXIpOwogfQpAQCAtMzgzLDI3ICszNzgsMzAgQEAgdm9p
ZCBTb3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlOjpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2
ZUluaXRpYWxpemF0aW9uU2VnbWUKICAgICBzZWdtZW50LmR1cmF0aW9uID0gc2VnbWVudEluZm8u
ZHVyYXRpb247CiAKICAgICBtX3ByZXZUcmFja0lkZW50aWZpZXJNYXAuc3dhcChtX3RyYWNrSWRl
bnRpZmllck1hcCk7CisgICAgc2VnbWVudC5hdWRpb1RyYWNrcy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KHNlZ21lbnRJbmZvLmF1ZGlvVHJhY2tzLnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiBhdWRp
b1RyYWNrIDogc2VnbWVudEluZm8uYXVkaW9UcmFja3MpIHsKICAgICAgICAgU291cmNlQnVmZmVy
UHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25TZWdtZW50OjpBdWRpb1RyYWNrSW5mb3JtYXRp
b24gaW5mbzsKICAgICAgICAgaW5mby50cmFjayA9IG1fbWVkaWFQbGF5ZXJQcml2YXRlLT5hdWRp
b1RyYWNrUHJpdmF0ZVJlbW90ZShhdWRpb1RyYWNrLmlkZW50aWZpZXIpOwogICAgICAgICBpbmZv
LmRlc2NyaXB0aW9uID0gUmVtb3RlTWVkaWFEZXNjcmlwdGlvbjo6Y3JlYXRlKGF1ZGlvVHJhY2su
ZGVzY3JpcHRpb24pOwotICAgICAgICBzZWdtZW50LmF1ZGlvVHJhY2tzLmFwcGVuZChpbmZvKTsK
KyAgICAgICAgc2VnbWVudC5hdWRpb1RyYWNrcy51bmNoZWNrZWRBcHBlbmQoaW5mbyk7CiAgICAg
ICAgIG1fdHJhY2tJZGVudGlmaWVyTWFwLmFkZChpbmZvLnRyYWNrLT5pZCgpLCBhdWRpb1RyYWNr
LmlkZW50aWZpZXIpOwogICAgIH0KIAorICAgIHNlZ21lbnQudmlkZW9UcmFja3MucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShzZWdtZW50SW5mby52aWRlb1RyYWNrcy5zaXplKCkpOwogICAgIGZvciAo
YXV0byYgdmlkZW9UcmFjayA6IHNlZ21lbnRJbmZvLnZpZGVvVHJhY2tzKSB7CiAgICAgICAgIFNv
dXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudDo6VmlkZW9UcmFj
a0luZm9ybWF0aW9uIGluZm87CiAgICAgICAgIGluZm8udHJhY2sgPSBtX21lZGlhUGxheWVyUHJp
dmF0ZS0+dmlkZW9UcmFja1ByaXZhdGVSZW1vdGUodmlkZW9UcmFjay5pZGVudGlmaWVyKTsKICAg
ICAgICAgaW5mby5kZXNjcmlwdGlvbiA9IFJlbW90ZU1lZGlhRGVzY3JpcHRpb246OmNyZWF0ZSh2
aWRlb1RyYWNrLmRlc2NyaXB0aW9uKTsKLSAgICAgICAgc2VnbWVudC52aWRlb1RyYWNrcy5hcHBl
bmQoaW5mbyk7CisgICAgICAgIHNlZ21lbnQudmlkZW9UcmFja3MudW5jaGVja2VkQXBwZW5kKGlu
Zm8pOwogICAgICAgICBtX3RyYWNrSWRlbnRpZmllck1hcC5hZGQoaW5mby50cmFjay0+aWQoKSwg
dmlkZW9UcmFjay5pZGVudGlmaWVyKTsKICAgICB9CiAKKyAgICBzZWdtZW50LnRleHRUcmFja3Mu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzZWdtZW50SW5mby50ZXh0VHJhY2tzLnNpemUoKSk7CiAg
ICAgZm9yIChhdXRvJiB0ZXh0VHJhY2sgOiBzZWdtZW50SW5mby50ZXh0VHJhY2tzKSB7CiAgICAg
ICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudDo6VGV4
dFRyYWNrSW5mb3JtYXRpb24gaW5mbzsKICAgICAgICAgaW5mby50cmFjayA9IG1fbWVkaWFQbGF5
ZXJQcml2YXRlLT50ZXh0VHJhY2tQcml2YXRlUmVtb3RlKHRleHRUcmFjay5pZGVudGlmaWVyKTsK
ICAgICAgICAgaW5mby5kZXNjcmlwdGlvbiA9IFJlbW90ZU1lZGlhRGVzY3JpcHRpb246OmNyZWF0
ZSh0ZXh0VHJhY2suZGVzY3JpcHRpb24pOwotICAgICAgICBzZWdtZW50LnRleHRUcmFja3MuYXBw
ZW5kKGluZm8pOworICAgICAgICBzZWdtZW50LnRleHRUcmFja3MudW5jaGVja2VkQXBwZW5kKGlu
Zm8pOwogICAgICAgICBtX3RyYWNrSWRlbnRpZmllck1hcC5hZGQoaW5mby50cmFjay0+aWQoKSwg
dGV4dFRyYWNrLmlkZW50aWZpZXIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAKaW5kZXggZDA3MGMy
Yjc5ZGY0MGNhY2I0MThmMDY3ODI2N2U0YzNiNGE1NDYxYy4uMWMyMjczNDMyNTQ1YWJmM2M5MDZi
ODVkYzE3ZDliOTlkNGUxZjdhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwCkBAIC0zOTIsOSArMzkyLDkgQEAg
TGliV2ViUlRDQ29kZWNzOjpFbmNvZGVyKiBMaWJXZWJSVENDb2RlY3M6OmNyZWF0ZUVuY29kZXIo
VHlwZSB0eXBlLCBjb25zdCBzdGQ6Om0KICAgICBlbmNvZGVyLT5pZGVudGlmaWVyID0gUlRDRW5j
b2RlcklkZW50aWZpZXI6OmdlbmVyYXRlVGhyZWFkU2FmZSgpOwogICAgIGVuY29kZXItPmNvZGVj
VHlwZSA9IHRvV2ViUlRDQ29kZWNUeXBlKHR5cGUpOwogCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjxT
dHJpbmcsIFN0cmluZz4+IHBhcmFtZXRlcnM7Ci0gICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6IGZv
cm1hdFBhcmFtZXRlcnMpCi0gICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KFN0cmluZzo6ZnJvbVVURjgoa2V5VmFsdWUuZmlyc3QuZGF0YSgpLCBrZXlWYWx1ZS5maXJzdC5s
ZW5ndGgoKSksIFN0cmluZzo6ZnJvbVVURjgoa2V5VmFsdWUuc2Vjb25kLmRhdGEoKSwga2V5VmFs
dWUuc2Vjb25kLmxlbmd0aCgpKSkpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IFdURjo6bWFwKGZv
cm1hdFBhcmFtZXRlcnMsIFtdKGF1dG8mIGVudHJ5KSB7CisgICAgICAgIHJldHVybiBzdGQ6OnBh
aXIgeyBTdHJpbmc6OmZyb21VVEY4KGVudHJ5LmZpcnN0LmRhdGEoKSwgZW50cnkuZmlyc3QubGVu
Z3RoKCkpLCBTdHJpbmc6OmZyb21VVEY4KGVudHJ5LnNlY29uZC5kYXRhKCksIGVudHJ5LnNlY29u
ZC5sZW5ndGgoKSkgfTsKKyAgICB9KTsKIAogICAgIGVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9u
QW5kRGlzcGF0Y2hUb1RocmVhZChbdGhpcywgZW5jb2RlciA9IFdURk1vdmUoZW5jb2RlciksIHR5
cGUsIHBhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpXSgpIG11dGFibGUgewogICAgICAg
ICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAKaW5kZXggZDg1NDJh
MmIxMGIxYjNlMTUzNjE0MTU0MTE1ZWY3ZWNlYzQ0ZWI4OC4uNmY4Zjc0NTM1OTI0NTNlMGU2MTg2
NzYxMjQ0ZTBiNzc5MjIxZGU3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVy
bGF5LmNwcApAQCAtMTk3LDExICsxOTcsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgYXV0byB3a05h
bWVzID0gbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0
cmlidXRlTmFtZXModG9BUEkoJnBhZ2VPdmVybGF5KSwgcGFyYW1lcml6ZWROYW1lcywgbV9hY2Nl
c3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmJhc2UuY2xpZW50SW5mbyk7CiAKICAgICAgICAgc2l6
ZV90IGNvdW50ID0gV0tBcnJheUdldFNpemUod2tOYW1lcyk7CisgICAgICAgIG5hbWVzLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoY291bnQpOwogICAgICAgICBmb3IgKHNpemVfdCBrID0gMDsgayA8
IGNvdW50OyBrKyspIHsKICAgICAgICAgICAgIFdLVHlwZVJlZiBpdGVtID0gV0tBcnJheUdldEl0
ZW1BdEluZGV4KHdrTmFtZXMsIGspOwogICAgICAgICAgICAgaWYgKFdlYktpdDo6dG9JbXBsKGl0
ZW0pLT50eXBlKCkgPT0gQVBJOjpTdHJpbmc6OkFQSVR5cGUpCi0gICAgICAgICAgICAgICAgbmFt
ZXMuYXBwZW5kKFdlYktpdDo6dG9XVEZTdHJpbmcoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KGl0
ZW0pKSk7CisgICAgICAgICAgICAgICAgbmFtZXMudW5jaGVja2VkQXBwZW5kKFdlYktpdDo6dG9X
VEZTdHJpbmcoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KGl0ZW0pKSk7CiAgICAgICAgIH0KKyAg
ICAgICAgbmFtZXMuc2hyaW5rVG9GaXQoKTsKIAogICAgICAgICByZXR1cm4gbmFtZXM7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1Nl
c3Npb25TdGF0ZUNvbnZlcnNpb24uY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1Nlc3Npb25TdGF0ZUNvbnZlcnNpb24uY3BwCmluZGV4IGM4ZjI0OGE2NDc2NTc2
YTI5MmM3NWQ1ZmFhNjhmNWFjNjNhNDc1YzguLjU2N2Q0NzUxYmVlODNhM2IzZjRmNmUwZmEyMzc3
YmQwMDYzNTBhMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9TZXNzaW9uU3RhdGVDb252ZXJzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvU2Vzc2lvblN0YXRlQ29udmVyc2lvbi5jcHAKQEAgLTk5
LDEwICs5OSw5IEBAIHN0YXRpYyBGcmFtZVN0YXRlIHRvRnJhbWVTdGF0ZShjb25zdCBIaXN0b3J5
SXRlbSYgaGlzdG9yeUl0ZW0pCiAgICAgZnJhbWVTdGF0ZS5vYnNjdXJlZEluc2V0cyA9IGhpc3Rv
cnlJdGVtLm9ic2N1cmVkSW5zZXRzKCk7CiAjZW5kaWYKIAotICAgIGZvciAoYXV0byYgY2hpbGRI
aXN0b3J5SXRlbSA6IGhpc3RvcnlJdGVtLmNoaWxkcmVuKCkpIHsKLSAgICAgICAgRnJhbWVTdGF0
ZSBjaGlsZEZyYW1lU3RhdGUgPSB0b0ZyYW1lU3RhdGUoY2hpbGRIaXN0b3J5SXRlbSk7Ci0gICAg
ICAgIGZyYW1lU3RhdGUuY2hpbGRyZW4uYXBwZW5kKFdURk1vdmUoY2hpbGRGcmFtZVN0YXRlKSk7
Ci0gICAgfQorICAgIGZyYW1lU3RhdGUuY2hpbGRyZW4gPSBoaXN0b3J5SXRlbS5jaGlsZHJlbigp
Lm1hcChbXShhdXRvJiBjaGlsZEhpc3RvcnlJdGVtKSB7CisgICAgICAgIHJldHVybiB0b0ZyYW1l
U3RhdGUoY2hpbGRIaXN0b3J5SXRlbSk7CisgICAgfSk7CiAKICAgICByZXR1cm4gZnJhbWVTdGF0
ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3Zp
ZGVyLmNwcAppbmRleCBmOWFmOWFiOTNmN2UwMTI4NzczNjUwYzFkMjQ5NWFkZGUzOWZkNDM1Li4x
ZDExZjQyM2MxNzg4ZDU5N2ZmMjU3OGVlNjBkOWNiNjE2YTBkZDM4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRGV2aWNlT3JpZW50YXRpb25V
cGRhdGVQcm92aWRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXIuY3BwCkBAIC04MywxMSAr
ODMsNyBAQCB2b2lkIFdlYkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXI6OnN0b3BVcGRh
dGluZ0RldmljZU1vdGlvbihXZWJDb3JlOjpNb3RpbwogCiB2b2lkIFdlYkRldmljZU9yaWVudGF0
aW9uVXBkYXRlUHJvdmlkZXI6OmRldmljZU9yaWVudGF0aW9uQ2hhbmdlZChkb3VibGUgYWxwaGEs
IGRvdWJsZSBiZXRhLCBkb3VibGUgZ2FtbWEsIGRvdWJsZSBjb21wYXNzSGVhZGluZywgZG91Ymxl
IGNvbXBhc3NBY2N1cmFjeSkKIHsKLSAgICBWZWN0b3I8V2Vha1B0cjxXZWJDb3JlOjpNb3Rpb25N
YW5hZ2VyQ2xpZW50Pj4gY2xpZW50czsKLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IG1fZGV2aWNl
T3JpZW50YXRpb25DbGllbnRzKQotICAgICAgICBjbGllbnRzLmFwcGVuZChjbGllbnQpOwotCi0g
ICAgZm9yIChhdXRvJiBjbGllbnQgOiBjbGllbnRzKSB7CisgICAgZm9yIChhdXRvJiBjbGllbnQg
OiBjb3B5VG9WZWN0b3JPZjxXZWFrUHRyPFdlYkNvcmU6Ok1vdGlvbk1hbmFnZXJDbGllbnQ+Piht
X2RldmljZU9yaWVudGF0aW9uQ2xpZW50cykpIHsKICAgICAgICAgaWYgKGNsaWVudCkKICAgICAg
ICAgICAgIGNsaWVudC0+b3JpZW50YXRpb25DaGFuZ2VkKGFscGhhLCBiZXRhLCBnYW1tYSwgY29t
cGFzc0hlYWRpbmcsIGNvbXBhc3NBY2N1cmFjeSk7CiAgICAgfQpAQCAtOTUsMTEgKzkxLDcgQEAg
dm9pZCBXZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyOjpkZXZpY2VPcmllbnRhdGlv
bkNoYW5nZWQoZG91YmxlIGFscGhhLAogCiB2b2lkIFdlYkRldmljZU9yaWVudGF0aW9uVXBkYXRl
UHJvdmlkZXI6OmRldmljZU1vdGlvbkNoYW5nZWQoZG91YmxlIHhBY2NlbGVyYXRpb24sIGRvdWJs
ZSB5QWNjZWxlcmF0aW9uLCBkb3VibGUgekFjY2VsZXJhdGlvbiwgZG91YmxlIHhBY2NlbGVyYXRp
b25JbmNsdWRpbmdHcmF2aXR5LCBkb3VibGUgeUFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHks
IGRvdWJsZSB6QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwgc3RkOjpvcHRpb25hbDxkb3Vi
bGU+IHhSb3RhdGlvblJhdGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB5Um90YXRpb25SYXRlLCBz
dGQ6Om9wdGlvbmFsPGRvdWJsZT4gelJvdGF0aW9uUmF0ZSkKIHsKLSAgICBWZWN0b3I8V2Vha1B0
cjxXZWJDb3JlOjpNb3Rpb25NYW5hZ2VyQ2xpZW50Pj4gY2xpZW50czsKLSAgICBmb3IgKGF1dG8m
IGNsaWVudCA6IG1fZGV2aWNlTW90aW9uQ2xpZW50cykKLSAgICAgICAgY2xpZW50cy5hcHBlbmQo
Y2xpZW50KTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IGNsaWVudHMpIHsKKyAgICBm
b3IgKGF1dG8mIGNsaWVudCA6IGNvcHlUb1ZlY3Rvck9mPFdlYWtQdHI8V2ViQ29yZTo6TW90aW9u
TWFuYWdlckNsaWVudD4+KG1fZGV2aWNlTW90aW9uQ2xpZW50cykpIHsKICAgICAgICAgaWYgKGNs
aWVudCkKICAgICAgICAgICAgIGNsaWVudC0+bW90aW9uQ2hhbmdlZCh4QWNjZWxlcmF0aW9uLCB5
QWNjZWxlcmF0aW9uLCB6QWNjZWxlcmF0aW9uLCB4QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0
eSwgeUFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHksICB6QWNjZWxlcmF0aW9uSW5jbHVkaW5n
R3Jhdml0eSwgeFJvdGF0aW9uUmF0ZSwgeVJvdGF0aW9uUmF0ZSwgelJvdGF0aW9uUmF0ZSk7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuY3BwCmluZGV4IGRmZGRhMTc2OTkz
NjAwNDQ3YTBjOTNjYzg0NjBmNWU2OGIyYzI0ODEuLjMxOGY3YzNkMjkzMzJjMDJhZDJjZTMwZDkw
ZTdjZmU2ZjU1YzMyMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5jcHAKQEAg
LTcxLDE4ICs3MSwxMyBAQCB2b2lkIFdlYlBhc3RlYm9hcmRPdmVycmlkZXM6OnJlbW92ZU92ZXJy
aWRlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0CiAKIFZlY3RvcjxTdHJpbmc+
IFdlYlBhc3RlYm9hcmRPdmVycmlkZXM6Om92ZXJyaWRkZW5UeXBlcyhjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lKQogewotICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKLQogICAgIGF1dG8g
aXQgPSBtX292ZXJyaWRlc01hcC5maW5kKHBhc3RlYm9hcmROYW1lKTsKICAgICBpZiAoaXQgPT0g
bV9vdmVycmlkZXNNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJl
dHVybiB7IH07CiAKICAgICBBU1NFUlQoaXQtPnZhbHVlKTsKIAotICAgIGZvciAoU3RyaW5nJiB0
eXBlIDogaXQtPnZhbHVlLT5rZXlzKCkpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQodHlwZSk7Ci0K
LSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBjb3B5VG9WZWN0b3IoaXQtPnZhbHVlLT5r
ZXlzKCkpOwogfQogCiBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBhc3RlYm9hcmRJdGVtSW5mbz4g
V2ViUGFzdGVib2FyZE92ZXJyaWRlczo6b3ZlcnJpZGRlbkluZm8oY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkTmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJTcGVlY2hTeW50aGVzaXNDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlNwZWVjaFN5bnRoZXNpc0NsaWVudC5jcHAKaW5kZXgg
YzRkMGRjYzAzZDVkYTZhMDQ4M2VkZjU2ZDFlNDM5NTI3YmM5NWY4OC4uYzU3ZTc4MDliMmVlMTY2
ZGQ2ZjY4OGJlMjJhODU5YzdkYWRkYThmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlNwZWVjaFN5bnRoZXNpc0NsaWVudC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlNwZWVjaFN5bnRoZXNp
c0NsaWVudC5jcHAKQEAgLTQyLDkgKzQyLDkgQEAgY29uc3QgVmVjdG9yPFJlZlB0cjxXZWJDb3Jl
OjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlPj4mIFdlYlNwZWVjaFN5bnRoZXNpc0MKICAg
ICBWZWN0b3I8V2ViU3BlZWNoU3ludGhlc2lzVm9pY2U+IHZvaWNlTGlzdDsKICAgICBtX3BhZ2Uu
c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U3BlZWNoU3ludGhlc2lzVm9pY2VMaXN0
KCksIHZvaWNlTGlzdCk7CiAKLSAgICBtX3ZvaWNlcy5jbGVhcigpOwotICAgIGZvciAoYXV0byYg
dm9pY2UgOiB2b2ljZUxpc3QpCi0gICAgICAgIG1fdm9pY2VzLmFwcGVuZChXZWJDb3JlOjpQbGF0
Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlOjpjcmVhdGUodm9pY2Uudm9pY2VVUkksIHZvaWNlLm5h
bWUsIHZvaWNlLmxhbmcsIHZvaWNlLmxvY2FsU2VydmljZSwgdm9pY2UuZGVmYXVsdExhbmcpKTsK
KyAgICBtX3ZvaWNlcyA9IHZvaWNlTGlzdC5tYXAoW10oYXV0byYgdm9pY2UpIC0+IFJlZlB0cjxX
ZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlPiB7CisgICAgICAgIHJldHVybiBX
ZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlOjpjcmVhdGUodm9pY2Uudm9pY2VV
UkksIHZvaWNlLm5hbWUsIHZvaWNlLmxhbmcsIHZvaWNlLmxvY2FsU2VydmljZSwgdm9pY2UuZGVm
YXVsdExhbmcpOworICAgIH0pOwogICAgIHJldHVybiBtX3ZvaWNlczsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCmluZGV4
IGI1MTM0ZDBkMmM1ZDdjNTJmNmZhYzk2ODA0NDFhY2MzZWViZjY1ZmQuLjFkNjQzYjZiNDI4OGQw
OGUwMzhjNDYyNWQwNTQ5ZGU2OGFmMmFhNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKQEAgLTI3MiwxMCArMjcyLDkgQEAg
dm9pZCBGaW5kQ29udHJvbGxlcjo6ZmluZFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiBzdHJp
bmcsIE9wdGlvblNldDxGaW5kT3B0aW8KICAgICBhdXRvIHJlc3VsdCA9IG1fd2ViUGFnZS0+Y29y
ZVBhZ2UoKS0+ZmluZFRleHRNYXRjaGVzKHN0cmluZywgY29yZShvcHRpb25zKSwgbWF4TWF0Y2hD
b3VudCk7CiAgICAgbV9maW5kTWF0Y2hlcyA9IFdURk1vdmUocmVzdWx0LnJhbmdlcyk7CiAKLSAg
ICBWZWN0b3I8VmVjdG9yPEludFJlY3Q+PiBtYXRjaFJlY3RzOwotICAgIGZvciAoYXV0byYgcmFu
Z2UgOiBtX2ZpbmRNYXRjaGVzKQotICAgICAgICBtYXRjaFJlY3RzLmFwcGVuZChSZW5kZXJPYmpl
Y3Q6OmFic29sdXRlVGV4dFJlY3RzKHJhbmdlKSk7Ci0KKyAgICBhdXRvIG1hdGNoUmVjdHMgPSBt
X2ZpbmRNYXRjaGVzLm1hcChbXShhdXRvJiByYW5nZSkgeworICAgICAgICByZXR1cm4gUmVuZGVy
T2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cyhyYW5nZSk7CisgICAgfSk7CiAgICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmRTdHJpbmdNYXRjaGVzKHN0cmlu
ZywgbWF0Y2hSZWN0cywgcmVzdWx0LmluZGV4Rm9yU2VsZWN0aW9uKSk7CiAKICAgICBpZiAoIW9w
dGlvbnMuY29udGFpbnMoRmluZE9wdGlvbnM6OlNob3dPdmVybGF5KSAmJiAhb3B0aW9ucy5jb250
YWlucyhGaW5kT3B0aW9uczo6U2hvd0ZpbmRJbmRpY2F0b3IpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29u
dHJvbGxlci5jcHAKaW5kZXggNzQ4MDJjNDc4NzU1ZmZlNjFiOTMwOTJjYmNhNmQwYWM3Y2NjOWM4
My4uMmM5YjQ1N2RiY2EwN2E2ZWIxMjY4OWE3OGYwZGQ1YjI5MTRhMjFjYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRl
eHRSYW5nZUNvbnRyb2xsZXIuY3BwCkBAIC0yNDgsMTEgKzI0OCwxMCBAQCB2b2lkIFdlYkZvdW5k
VGV4dFJhbmdlQ29udHJvbGxlcjo6ZHJhd1JlY3QoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJD
b3JlOjpHcmFwaAogICAgICAgICBhdXRvIHRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRp
bmF0ZXMgPSBtX3RleHRJbmRpY2F0b3ItPnRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRp
bmF0ZXMoKTsKICAgICAgICAgYXV0byB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVz
ID0gbV90ZXh0SW5kaWNhdG9yLT50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKCk7
CiAKLSAgICAgICAgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4gdGV4dFJlY3RzSW5Sb290Vmll
d0Nvb3JkaW5hdGVzOwotICAgICAgICBmb3IgKGF1dG8gcmVjdCA6IHRleHRSZWN0c0luQm91bmRp
bmdSZWN0Q29vcmRpbmF0ZXMpIHsKKyAgICAgICAgYXV0byB0ZXh0UmVjdHNJblJvb3RWaWV3Q29v
cmRpbmF0ZXMgPSB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzLm1hcChbJl0oYXV0
byByZWN0KSB7CiAgICAgICAgICAgICByZWN0Lm1vdmVCeSh0ZXh0Qm91bmRpbmdSZWN0SW5Sb290
Vmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCkpOwotICAgICAgICAgICAgdGV4dFJlY3RzSW5Sb290
Vmlld0Nvb3JkaW5hdGVzLmFwcGVuZChyZWN0KTsKLSAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIHJlY3Q7CisgICAgICAgIH0pOwogCiAgICAgICAgIGF1dG8gcGF0aHMgPSBXZWJDb3JlOjpQ
YXRoVXRpbGl0aWVzOjpwYXRoc1dpdGhTaHJpbmtXcmFwcGVkUmVjdHModGV4dFJlY3RzSW5Sb290
Vmlld0Nvb3JkaW5hdGVzLCBpbmRpY2F0b3JSYWRpdXMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDM0OTg3YmRlNjRmZGZmMDkwODMyYzM3
NTQyYjkzNTEzYTYxYWRjY2IuLjQ4NzY4MDQ2YTE4OTllOTQyNjhkN2UyOTU0OTgwNTEyNjAwNTVm
ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBA
IC03ODQwLDE0ICs3ODQwLDE2IEBAIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSYgV2ViUGFn
ZTo6ZW5zdXJlUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KCkKIFZlY3RvcjxSZWZQdHI8U2Fu
ZGJveEV4dGVuc2lvbj4+IFdlYlBhZ2U6OmNvbnN1bWVTYW5kYm94RXh0ZW5zaW9ucyhWZWN0b3I8
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiYmIHNhbmRib3hFeHRlbnNpb25zKQogewogICAgIFZl
Y3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+IGRyYWdTYW5kYm94RXh0ZW5zaW9uczsKKyAg
ICBkcmFnU2FuZGJveEV4dGVuc2lvbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzYW5kYm94RXh0
ZW5zaW9ucy5zaXplKCkpOwogICAgIGZvciAoYXV0byYgc2FuZGJveEV4dGVuc2lvbiA6IHNhbmRi
b3hFeHRlbnNpb25zKSB7CiAgICAgICAgIGF1dG8gZXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlKFdURk1vdmUoc2FuZGJveEV4dGVuc2lvbikpOwogICAgICAgICBpZiAoIWV4dGVu
c2lvbikKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBib29sIG9rID0gZXh0ZW5zaW9u
LT5jb25zdW1lKCk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKLSAgICAgICAgZHJh
Z1NhbmRib3hFeHRlbnNpb25zLmFwcGVuZChXVEZNb3ZlKGV4dGVuc2lvbikpOworICAgICAgICBk
cmFnU2FuZGJveEV4dGVuc2lvbnMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZXh0ZW5zaW9uKSk7
CiAgICAgfQorICAgIGRyYWdTYW5kYm94RXh0ZW5zaW9ucy5zaHJpbmtUb0ZpdCgpOwogICAgIHJl
dHVybiBkcmFnU2FuZGJveEV4dGVuc2lvbnM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggOWRjMDBkYTI3NzBjMTkz
OTg5MWEzMDBmMjMzNzQ5NmE5YzhlNzAxZC4uYmQzNjcyMDc1Yjc1NzY4Yzg0MTQ3NzhmYzY2NWY1
ZDc1YjRlMjRhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1dlYlBhZ2VNYWMubW0KQEAgLTc1NCwxMSArNzU0LDggQEAgdm9pZCBXZWJQYWdlOjpoYW5k
bGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2soRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgY29uc3Qg
VmVjdG8KIAogICAgIE5TRGF0YSAqc2VsZWN0aW9uRGF0YSA9IFthdHRyaWJ1dGVkU2VsZWN0aW9u
IFJURkRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW2F0dHJpYnV0ZWRTZWxlY3Rpb24gbGVuZ3Ro
XSkgZG9jdW1lbnRBdHRyaWJ1dGVzOkB7IH1dOwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHNlbGVj
dGlvbkRhdGFWZWN0b3I7Ci0gICAgc2VsZWN0aW9uRGF0YVZlY3Rvci5hcHBlbmQocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc2VsZWN0aW9uRGF0YS5ieXRlcyksIHNlbGVjdGlvbkRh
dGEubGVuZ3RoKTsKLQogICAgIGZsdXNoUGVuZGluZ0VkaXRvclN0YXRlVXBkYXRlKCk7Ci0gICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93Q29udGV4dE1lbnUoQ29udGV4dE1lbnVD
b250ZXh0RGF0YShwb2ludCwgc2VsZWN0aW9uRGF0YVZlY3RvciwgcGhvbmVOdW1iZXJzLCBzZWxl
Y3Rpb24uc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSksIFVzZXJEYXRhKCkpKTsKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3dDb250ZXh0TWVudShDb250ZXh0TWVu
dUNvbnRleHREYXRhKHBvaW50LCBWZWN0b3IgeyByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihzZWxlY3Rpb25EYXRhLmJ5dGVzKSwgc2VsZWN0aW9uRGF0YS5sZW5ndGggfSwgcGhvbmVO
dW1iZXJzLCBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSksIFVzZXJE
YXRhKCkpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpoYW5kbGVJbWFnZVNlcnZpY2VDbGljayhjb25z
dCBJbnRQb2ludCYgcG9pbnQsIEltYWdlJiBpbWFnZSwgSFRNTEltYWdlRWxlbWVudCYgZWxlbWVu
dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAppbmRleCA3OTk2MTNkMzc3
NDIzNjNiZmJkY2Q5NTI5Nzk5NjIyMDZmMDIyOGE4Li44OTkwZWRkNzZjYWI5NmMyZGVjZDNiOTYw
NTRjZmY2Mjk1YmIwY2Y1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3Bw
CkBAIC0xNDUyLDggKzE0NTIsMTAgQEAgdm9pZCBXZWJQcm9jZXNzOjpmZXRjaFdlYnNpdGVEYXRh
KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHdlYnNpdGVEYXRhVHlwZXMsIEMKIHsKICAgICBX
ZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlu
cyhXZWJzaXRlRGF0YVR5cGU6Ok1lbW9yeUNhY2hlKSkgewotICAgICAgICBmb3IgKGF1dG8mIG9y
aWdpbiA6IE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5vcmlnaW5zV2l0aENhY2hlKHNlc3Npb25J
RCgpKSkKLSAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRh
OjpFbnRyeSB7IG9yaWdpbi0+ZGF0YSgpLCBXZWJzaXRlRGF0YVR5cGU6Ok1lbW9yeUNhY2hlLCAw
IH0pOworICAgICAgICBhdXRvIG9yaWdpbnMgPSBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkub3Jp
Z2luc1dpdGhDYWNoZShzZXNzaW9uSUQoKSk7CisgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMg
PSBXVEY6Om1hcChvcmlnaW5zLCBbXShhdXRvJiBvcmlnaW4pIHsKKyAgICAgICAgICAgIHJldHVy
biBXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4tPmRhdGEoKSwgV2Vic2l0ZURhdGFUeXBlOjpN
ZW1vcnlDYWNoZSwgMCB9OworICAgICAgICB9KTsKICAgICB9CiAgICAgY29tcGxldGlvbkhhbmRs
ZXIoV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452587</attachid>
            <date>2022-02-18 15:13:50 -0800</date>
            <delta_ts>2022-02-18 18:28:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236852-20220218151349.patch</filename>
            <type>text/plain</type>
            <size>163634</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDQwMjRhYTk5ZmEyYjQyNGY1MmIwYjk2
MGUxMmEyZmViOTdmZTdmNjUuLjkxMjI3MjJmZjBlOTkwMjg4NDM0MTJlZDVlMDNiNDUwN2FmOWZi
NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjItMDItMTggIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGV2ZW4gbW9yZSBjYWxs
IHNpdGVzIGNvbnN0cnVjdGluZyB2ZWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuY3BwOgorICAgICAgICAoV1RGOjpD
b25jdXJyZW50V29ya1F1ZXVlOjphcHBseSk6CisgICAgICAgICogd3RmL2NmL0xhbmd1YWdlQ0Yu
Y3BwOgorICAgICAgICAoV1RGOjpwbGF0Zm9ybVVzZXJQcmVmZXJyZWRMYW5ndWFnZXMpOgorCiAy
MDIyLTAyLTE4ICBCcmFuZG9uIFN0ZXdhcnQgIDxicmFuZG9uc3Rld2FydEBhcHBsZS5jb20+CiAK
ICAgICAgICAgR2VuZXJhdGUgY29tcGlsZV9jb21tYW5kcy5qc29uIG9uIG1hY09TIEJ1aWxkcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IDk3MzQ3NWE5MWYzMWFjM2QwNDAzZGEwYjMxZjAzMmQ4ZGYwMDE5ZDYuLmZk
NTE1N2MwYjU0MzAxYTY2NjYyMWZkMjgwMGYxNDFiNDQyMzllZjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNjYgQEAKKzIwMjItMDItMTggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
KworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGV2ZW4gbW9yZSBjYWxsIHNpdGVzIGNvbnN0
cnVjdGluZyB2ZWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzY4NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIE1vZHVsZXMvYXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBheW1lbnRDb29yZGluYXRvcjo6YmVnaW5QYXltZW50U2Vzc2lvbik6Cisg
ICAgICAgICogTW9kdWxlcy9hcHBsZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29jb2EubW06Cisg
ICAgICAgIChXZWJDb3JlOjpjb252ZXJ0KToKKyAgICAgICAgKiBNb2R1bGVzL2NhY2hlL0RPTUNh
Y2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUNhY2hlOjpiYXRjaFB1dE9wZXJhdGlvbik6
CisgICAgICAgICogTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R2FtZXBhZDo6R2FtZXBhZCk6CisgICAgICAgICogTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRN
YW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRNYW5hZ2VyOjpwbGF0Zm9ybUdh
bWVwYWREaXNjb25uZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZE1hbmFnZXI6Om1h
a2VHYW1lcGFkVmlzaWJsZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OnRyYW5zYWN0aW9uKToKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmg6CisgICAgICAgIChXZWJDb3Jl
OjpJREJLZXlEYXRhOjppc0RlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjph
ZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YUhhc2g6Omhhc2gpOgorICAgICAgICAo
V2ViQ29yZTo6SURCS2V5RGF0YTo6aGFzaCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmU6OmluZGV4TmFtZXMgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
OjpvYmplY3RTdG9yZU5hbWVzIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhY29udHJv
bHMvTWVkaWFDb250cm9sc0hvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
c0hvc3Q6OnNob3dNZWRpYUNvbnRyb2xzQ29udGV4dE1lbnUpOgorICAgICAgICAqIE1vZHVsZXMv
bWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3Vy
Y2U6OmFjdGl2ZVJhbmdlcyBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9T
YW1wbGVNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRlY29kZU9yZGVyU2FtcGxlTWFwOjpzaXpl
IGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3Qu
aDoKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzOjpnZXRWb2ljZXMpOgorICAgICAgICAqIE1vZHVs
ZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrLm1tOgorICAgICAgICAoLVtX
ZWJTcGVlY2hSZWNvZ25pemVyVGFza0ltcGwgY2FsbGJhY2tXaXRoVHJhbnNjcmlwdGlvbnM6aXNG
aW5hbDpdKToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25p
emVyVGFza01vY2subW06CisgICAgICAgICgtW1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrTW9jayBh
dWRpb1NhbXBsZXNBdmFpbGFibGU6XSk6CisgICAgICAgICogYW5pbWF0aW9uL0NTU1Byb3BlcnR5
QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRnVuYyk6CisgICAgICAgICog
YW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmVzQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXI6OnVwZGF0ZUFuaW1hdGlvbnNBbmRTZW5k
RXZlbnRzKToKKyAgICAgICAgKiBhbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cHJvY2Vzc1Byb3BlcnR5SW5kZXhlZEtleWZyYW1lcyk6CisgICAgICAgICog
Y29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbjo6Q29udGVudEV4dGVuc2lvbik6
CisgICAgICAgICogY3NzL0NTU1ZhbHVlTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFs
dWVMaXN0OjpzaXplIGNvbnN0KToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9u
Tm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6aG9pc3RD
aGlsZHJlbldpdGhPcGVyYXRvcik6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXJJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlckltcGw6OmNvbnN1bWVDb250YWluZXJS
dWxlKToKKyAgICAgICAgKiBkb20vRE9NU3RyaW5nTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6
RE9NU3RyaW5nTGlzdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVN0cmluZ0xpc3Q6
OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpET01TdHJpbmdMaXN0OjpET01TdHJpbmdMaXN0
KToKKyAgICAgICAgKiBkb20vRXZlbnRQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
UGF0aDo6RXZlbnRQYXRoKToKKyAgICAgICAgKiBkb20vRnVsbHNjcmVlbk1hbmFnZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RnVsbHNjcmVlbk1hbmFnZXI6OmNhbmNlbEZ1bGxzY3JlZW4pOgor
ICAgICAgICAqIGRvbS9Mb2FkYWJsZVNjcmlwdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2Fk
YWJsZVNjcmlwdDo6bm90aWZ5Q2xpZW50RmluaXNoZWQpOgorICAgICAgICAqIGRvbS9SYWRpb0J1
dHRvbkdyb3Vwcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYWRpb0J1dHRvbkdyb3VwOjptZW1i
ZXJzIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0RpcmVjdG9yeUZpbGVMaXN0Q3JlYXRvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp0b0ZpbGVMaXN0KToKKyAgICAgICAgKiBodG1sL0hUTUxTZWxl
Y3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzYXZl
TGFzdFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2V0
QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgpOgorICAgICAgICAqIGh0bWwvSW1hZ2VCaXRtYXAu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OmRldGFjaEJpdG1hcHMpOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0YWNoZWRTaGFkZXJz
KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpwcm9jZXNzTWV0YSk6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUcmVlQnVpbGRlcjo6aW5zZXJ0UGhvbmVOdW1iZXJMaW5rKToKKyAgICAgICAgKiBodG1s
L3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dERv
Y3VtZW50UGFyc2VyOjppbnNlcnRGYWtlUHJlRWxlbWVudCk6CisgICAgICAgICogbG9hZGVyL0Nv
bnRlbnRGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEZpbHRlcjo6Y3JlYXRl
KToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0UGFy
c2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0
KToKKyAgICAgICAgKiBwYWdlL1Jlc2l6ZU9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlc2l6ZU9ic2VydmVyOjpkZWxpdmVyT2JzZXJ2YXRpb25zKToKKyAgICAgICAgKiBwYWdlL1Rl
eHRJbmRpY2F0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZUluZGljYXRvcik6
CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlU3ViUmVzb3VyY2VJbnRlZ3JpdHlJbnRvRGlnZXN0cyk6CisgICAgICAg
ICogcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUNob29z
ZXI6OmNob29zZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUNob29zZXI6OmNob29zZUZp
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjaG9vc2VNZWRpYUZpbGVzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9UaHJl
YWRTYWZlRGF0YUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBdWRpb0RTUEtlcm5lbFByb2Nlc3Nvcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcGxh
dGZvcm0vYXVkaW8vQXVkaW9SZXNhbXBsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9S
ZXNhbXBsZXI6OkF1ZGlvUmVzYW1wbGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9EeW5h
bWljc0NvbXByZXNzb3JLZXJuZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21w
cmVzc29yS2VybmVsOjpzZXROdW1iZXJPZkNoYW5uZWxzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9h
dWRpby9NdWx0aUNoYW5uZWxSZXNhbXBsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TXVsdGlD
aGFubmVsUmVzYW1wbGVyOjpNdWx0aUNoYW5uZWxSZXNhbXBsZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tOgorICAgICAgICAo
V2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRpYVNl
bGVjdGlvbk9wdGlvbnMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWQvbWFjL0R1
YWxzaG9jazNISURHYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkR1YWxzaG9jazNISURH
YW1lcGFkOjpEdWFsc2hvY2szSElER2FtZXBhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ2FtZXBh
ZC9tYWMvTG9naXRlY2hHYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvZ2l0ZWNoR2Ft
ZXBhZDo6TG9naXRlY2hHYW1lcGFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkL21hYy9T
dGFkaWFISURHYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0YWRpYUhJREdhbWVwYWQ6
OlN0YWRpYUhJREdhbWVwYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
TGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6YWRkUmVwYWludFJl
Y3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGF0aFV0aWxpdGllczo6cGF0aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3Rz
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhVdGlsaXRpZXM6OnBhdGhXaXRoU2hyaW5rV3JhcHBl
ZFJlY3RzRm9yT3V0bGluZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVm
ZmVyUHJpdmF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlOjpi
dWZmZXJlZFNhbXBsZXNGb3JUcmFja0lkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpleHRyYWN0S2V5SURzU2tkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVZGV3JhcHBlcjo6c2V0UmVxdWVz
dEZvcktleSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
Q0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW06CisgICAgICAgIChXZWJDb3Jl
OjpDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnVwZGF0ZUtleVN0
YXR1c2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9J
bWFnZURlY29kZXJBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyQVZG
T2JqQzo6ZnJhbWVJbmZvcyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUGFyc2VyQVZGT2JqQy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlckFWRk9iakM6OmRpZFBhcnNlU3RyZWFtRGF0YUFzQXNz
ZXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFD
b2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnZhcmlhdGlvbkF4
ZXMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVTdHJpbmcpOgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlOjpzZXRTdXBwb3J0ZWRQcmVzZXRz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJsb2JSZWdpc3RyeUltcGw6OndyaXRlQmxvYnNUb1RlbXBvcmFyeUZpbGVz
Rm9ySW5kZXhlZERCKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmRyYXdCb3hTaWRl
RnJvbVBhdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpjb25uZWN0Q2xpcHBpbmdTdGFj
a0xheWVycyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkanVzdE92ZXJmbG93
U2Nyb2xsYmFyQ29udGFpbmVyTGF5ZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhl
bWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpwYWludEF0dGFjaG1lbnRUaXRsZUJhY2tncm91
bmQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjp3cml0ZVNWR1N0cm9rZVBhaW50aW5nUmVzb3VyY2UpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RleHRDaHVuazo6U1ZHVGV4dENodW5rKToKKyAgICAgICAgKiBzdHlsZS9QYWdlUnVsZUNvbGxl
Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UGFnZVJ1bGVDb2xsZWN0b3I6Om1h
dGNoUGFnZVJ1bGVzKToKKyAgICAgICAgKiBzdHlsZS9SdWxlU2V0QnVpbGRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldEJ1aWxkZXI6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6
OnBvcCk6CisgICAgICAgICogc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENvbnRhaW5lck5hbWUp
OgorCiAyMDIyLTAyLTE4ICBBbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbTEZDXVtJRkNdIEZpeCBpZGVvZ3JhcGhpYyBiYXNlbGluZSBmb3IgYXRvbWljIGlubGluZSBs
ZXZlbCBib3hlcyB3aXRoIG5vbi16ZXJvIGRlc2NlbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMWYwMTFiZWMxMDEx
NGZiNjZmZjMzYzRlMzI4ZDQ0NmJmNWRmNGQyNS4uYTdlNWJkY2MyMTk1ZTdhNTc3Y2NjNjljMGQ1
ZWFjNWZjZjc5NzIyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5OCBAQAorMjAyMi0wMi0xOCAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIC8gb3B0aW1p
emUgZXZlbiBtb3JlIGNhbGwgc2l0ZXMgY29uc3RydWN0aW5nIHZlY3RvcnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjg1MgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9tZWRpYS9S
ZW1vdGVNZWRpYVBsYXllclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTWVkaWFQ
bGF5ZXJQcm94eTo6b3V0T2ZCYW5kVHJhY2tTb3VyY2VzKToKKyAgICAgICAgKiBHUFVQcm9jZXNz
L21lZGlhL1JlbW90ZVNvdXJjZUJ1ZmZlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlU291cmNlQnVmZmVyUHJveHk6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlh
bGl6YXRpb25TZWdtZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlU291cmNlQnVmZmVyUHJv
eHk6OnVwZGF0ZVRyYWNrSWRzKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVy
L1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKToK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OmZldGNoRGlza0NhY2hlRW50cmllcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Tm90aWZpY2F0aW9ucy9OZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2VyOjpnZXRPcmlnaW5zV2l0aFB1c2hBbmRO
b3RpZmljYXRpb25QZXJtaXNzaW9ucyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2Vy
OjphbGxTdG9yYWdlQXJlYUlkZW50aWZpZXJzIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9XZWJTdG9yYWdlL1RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OlRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6b3JpZ2lucyBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OlRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6c3Rv
cmFnZUFyZWFJZGVudGlmaWVycyBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0
b3JhZ2U6OkNhY2hlOjpmaW5pc2hPcGVuaW5nKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9y
YWdlOjpDYWNoZTo6a2V5cyBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFn
ZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VB
cmVhOjpTUUxpdGVTdG9yYWdlQXJlYSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50
Q29kZXJzLmg6CisgICAgICAgICogU2hhcmVkL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRv
clByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6
OnNob3dQYXltZW50VUkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbi5j
cHA6CisgICAgICAgIChBUEk6Ok5hdmlnYXRpb246Ok5hdmlnYXRpb24pOgorICAgICAgICAoQVBJ
OjptX2NsaWVudE5hdmlnYXRpb25BY3Rpdml0eSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29h
L1dLU2hhcmVTaGVldC5tbToKKyAgICAgICAgKGFwcGVuZEZpbGVzQXNTaGFyZWFibGVVUkxzKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW06CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVzdG9yZUFwcEhpZ2hsaWdodHNBbmRTY3JvbGxUb0lu
ZGV4KToKKyAgICAgICAgKiBVSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwOgorICAgICAgICAo
V2ViS2l0OjpGcmFtZUxvYWRTdGF0ZTo6ZGlkRmluaXNoTG9hZCk6CisgICAgICAgICogVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
OjpwYXJhbWV0ZXJzIGNvbnN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRp
b24vQXV0aGVudGljYXRvck1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpBdXRoZW50aWNh
dG9yTWFuYWdlcjo6c3RhcnREaXNjb3ZlcnkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJCYWNr
Rm9yd2FyZExpc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OnJl
bW92ZUFsbEl0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0OjpjbGVh
cik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZVByb2Nlc3NGcm9tT3JpZ2luQ2FjaGVTZXQp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUHJveHk6OnByb2Nlc3NEaWRUZXJtaW5hdGVPckZhaWxlZFRvTGF1bmNo
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5KToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YSk6CisgICAgICAg
ICogVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbToKKyAgICAgICAgKFdlYktpdDo6VGV4
dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9z
L1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW06CisgICAgICAgICgtW1dLQWN0aW9uU2hlZXRBc3Np
c3RhbnQgcHJlc2VudGF0aW9uUmVjdEZvckVsZW1lbnRVc2luZ0Nsb3Nlc3RJbmRpY2F0ZWRSZWN0
XSk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbToKKyAgICAgICAg
KFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBheW1lbnRDb29yZGluYXRvcjo6c2hvd1BheW1lbnRVSSk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpzZXRGaWxlc0ZvcklucHV0
RmlsZVVwbG9hZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQ
bGF5ZXJNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5h
Z2VyOjpjcmVhdGVSZW1vdGVNZWRpYVBsYXllcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUv
bWVkaWEvU291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNv
dXJjZUJ1ZmZlclByaXZhdGVSZW1vdGU6OnVwZGF0ZVRyYWNrSWRzKToKKyAgICAgICAgKFdlYktp
dDo6U291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZTo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2Vp
dmVJbml0aWFsaXphdGlvblNlZ21lbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL3dlYnJ0
Yy9MaWJXZWJSVENDb2RlY3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpMaWJXZWJSVENDb2RlY3M6
OmNyZWF0ZUVuY29kZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9TZXNzaW9uU3RhdGVDb252ZXJzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6dG9G
cmFtZVN0YXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRldmlj
ZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZp
Y2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyOjpkZXZpY2VPcmllbnRhdGlvbkNoYW5nZWQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyOjpkZXZp
Y2VNb3Rpb25DaGFuZ2VkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YlBhc3RlYm9hcmRPdmVycmlkZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJk
T3ZlcnJpZGVzOjpvdmVycmlkZGVuVHlwZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViU3BlZWNoU3ludGhlc2lzQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViU3BlZWNoU3ludGhlc2lzQ2xpZW50Ojp2b2ljZUxpc3QpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250
cm9sbGVyOjpmaW5kU3RyaW5nTWF0Y2hlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZv
dW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6ZHJhd1JlY3QpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y29uc3VtZVNh
bmRib3hFeHRlbnNpb25zKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmhhbmRsZVNlbGVjdGlvblNlcnZp
Y2VDbGljayk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzczo6ZmV0Y2hXZWJzaXRlRGF0YSk6CisKIDIwMjItMDItMTggIEog
UGFzY29lICA8al9wYXNjb2VAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJBdXRobl0gQWRkIGNy
ZWRlbnRpYWxJRCB0byBfV0tXZWJBdXRoZW50aWNhdGlvbkFzc2VydGlvblJlc3BvbnNlIGFuZCB1
c2VySGFuZGxlIGluIGdldEFsbExvY2FsQXV0aGVudGljYXRvckNyZWRlbnRpYWxzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwIGIvU291cmNlL1dURi93dGYvV29ya1F1
ZXVlLmNwcAppbmRleCA5ZTEwNmUzOTRkM2Y0NGQyYzI1ZmMzY2ExNTM1NDBlNTIwNGNiMzViLi44
NjQwNmYzODg0MzcxNGNiMjU1YzM0ZWFlM2Y5MTgxZGFiYTU4ZTM5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5j
cHAKQEAgLTEwNSw3ICsxMDUsNyBAQCB2b2lkIENvbmN1cnJlbnRXb3JrUXVldWU6OmFwcGx5KHNp
emVfdCBpdGVyYXRpb25zLCBXVEY6OkZ1bmN0aW9uPHZvaWQoc2l6ZV90IGluZAogCiAgICAgICAg
ICAgICBtX3dvcmtlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0aHJlYWRDb3VudCk7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhyZWFkQ291bnQ7ICsraSkgewotICAg
ICAgICAgICAgICAgIG1fd29ya2Vycy5hcHBlbmQoVGhyZWFkOjpjcmVhdGUoIlRocmVhZFBvb2wg
V29ya2VyIiwgW3RoaXNdIHsKKyAgICAgICAgICAgICAgICBtX3dvcmtlcnMudW5jaGVja2VkQXBw
ZW5kKFRocmVhZDo6Y3JlYXRlKCJUaHJlYWRQb29sIFdvcmtlciIsIFt0aGlzXSB7CiAgICAgICAg
ICAgICAgICAgICAgIHRocmVhZEJvZHkoKTsKICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAg
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9jZi9MYW5ndWFnZUNGLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL2NmL0xhbmd1YWdlQ0YuY3BwCmluZGV4IGJiYzFlZjZmNGVmZTAzMDU5Y2U1
NTEzMWUwOGMxMDMzMjI0ODhlNTYuLmMwNGM1NWJjNjAzZDI4MWQwY2EzODkyMGViYThjNzllNWU2
OTI5ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2NmL0xhbmd1YWdlQ0YuY3BwCisrKyBi
L1NvdXJjZS9XVEYvd3RmL2NmL0xhbmd1YWdlQ0YuY3BwCkBAIC0xMDIsOSArMTAyLDEwIEBAIFZl
Y3RvcjxTdHJpbmc+IHBsYXRmb3JtVXNlclByZWZlcnJlZExhbmd1YWdlcyhTaG91bGRNaW5pbWl6
ZUxhbmd1YWdlcyBzaG91bGRNaW5pCiAgICAgICAgIHJldHVybiB7ICJlbiJfcyB9OwogCiAgICAg
VmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzOworICAgIGxhbmd1YWdlcy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KHBsYXRmb3JtTGFuZ3VhZ2VzQ291bnQpOwogICAgIGZvciAoQ0ZJbmRleCBpID0gMDsg
aSA8IHBsYXRmb3JtTGFuZ3VhZ2VzQ291bnQ7IGkrKykgewogICAgICAgICBhdXRvIHBsYXRmb3Jt
TGFuZ3VhZ2UgPSBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRl
eChwbGF0Zm9ybUxhbmd1YWdlcy5nZXQoKSwgaSkpOwotICAgICAgICBsYW5ndWFnZXMuYXBwZW5k
KGh0dHBTdHlsZUxhbmd1YWdlQ29kZShwbGF0Zm9ybUxhbmd1YWdlLCBzaG91bGRNaW5pbWl6ZUxh
bmd1YWdlcykpOworICAgICAgICBsYW5ndWFnZXMudW5jaGVja2VkQXBwZW5kKGh0dHBTdHlsZUxh
bmd1YWdlQ29kZShwbGF0Zm9ybUxhbmd1YWdlLCBzaG91bGRNaW5pbWl6ZUxhbmd1YWdlcykpOwog
ICAgIH0KIAogICAgIExPR19XSVRIX1NUUkVBTShMYW5ndWFnZSwgc3RyZWFtIDw8ICJBZnRlciBw
YXNzaW5nIHRocm91Z2ggaHR0cFN0eWxlTGFuZ3VhZ2VDb2RlOiAiIDw8IGxhbmd1YWdlcyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29yZGlu
YXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29yZGlu
YXRvci5jcHAKaW5kZXggMWEzMjdhOTRiMGI3MWQ0ZWM3NWVhY2M4ZDRhZDc4YTkxYjlmZjY4NS4u
NGE5NDMyMjQ5ZDUyZDUxZDE0N2I4NmU1NzA4ZDUxODg4YmE2NGY1NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXltZW50Q29vcmRpbmF0b3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNwcApA
QCAtMTAxLDExICsxMDEsMTAgQEAgYm9vbCBQYXltZW50Q29vcmRpbmF0b3I6OmJlZ2luUGF5bWVu
dFNlc3Npb24oRG9jdW1lbnQmIGRvY3VtZW50LCBQYXltZW50U2Vzc2lvbiYKIHsKICAgICBBU1NF
UlQoIW1fYWN0aXZlU2Vzc2lvbik7CiAKLSAgICBWZWN0b3I8VVJMPiBsaW5rSWNvblVSTHM7Ci0g
ICAgZm9yIChhdXRvJiBpY29uIDogTGlua0ljb25Db2xsZWN0b3IgeyBkb2N1bWVudCB9Lmljb25z
T2ZUeXBlcyh7IExpbmtJY29uVHlwZTo6VG91Y2hJY29uLCBMaW5rSWNvblR5cGU6OlRvdWNoUHJl
Y29tcG9zZWRJY29uIH0pKQotICAgICAgICBsaW5rSWNvblVSTHMuYXBwZW5kKGljb24udXJsKTsK
LQotICAgIGF1dG8gc2hvd1BheW1lbnRVSSA9IG1fY2xpZW50LnNob3dQYXltZW50VUkoZG9jdW1l
bnQudXJsKCksIGxpbmtJY29uVVJMcywgcGF5bWVudFJlcXVlc3QpOworICAgIGF1dG8gbGlua0lj
b25VUkxzID0gTGlua0ljb25Db2xsZWN0b3IgeyBkb2N1bWVudCB9Lmljb25zT2ZUeXBlcyh7IExp
bmtJY29uVHlwZTo6VG91Y2hJY29uLCBMaW5rSWNvblR5cGU6OlRvdWNoUHJlY29tcG9zZWRJY29u
IH0pLm1hcChbXShhdXRvJiBpY29uKSB7CisgICAgICAgIHJldHVybiBpY29uLnVybDsKKyAgICB9
KTsKKyAgICBhdXRvIHNob3dQYXltZW50VUkgPSBtX2NsaWVudC5zaG93UGF5bWVudFVJKGRvY3Vt
ZW50LnVybCgpLCBXVEZNb3ZlKGxpbmtJY29uVVJMcyksIHBheW1lbnRSZXF1ZXN0KTsKICAgICBQ
QVlNRU5UX0NPT1JESU5BVE9SX1JFTEVBU0VfTE9HKCJiZWdpblBheW1lbnRTZXNzaW9uKCkgLT4g
JWQiLCBzaG93UGF5bWVudFVJKTsKICAgICBpZiAoIXNob3dQYXltZW50VUkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkv
Y29jb2EvUGF5bWVudE1ldGhvZENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBs
ZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29jb2EubW0KaW5kZXggNzY1M2RlNTRhZjUzOWYyNTYx
ZjQyMjM2ZDMwZWM2MWFiNTgwM2RkNS4uMzc1ZTUzZDZkNGZkZGM4ODhmMzJlMDRlMjgzYTdkYjA0
MTEzZDA2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9jb2Nv
YS9QYXltZW50TWV0aG9kQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBs
ZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29jb2EubW0KQEAgLTEwMSwxMSArMTAxLDggQEAgc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8QXBwbGVQYXlQYXltZW50TWV0aG9kOjpUeXBlPiBjb252ZXJ0KFBL
UGF5bWVudE1ldGhvZFR5cGUgcGEKICNpZiBIQVZFKFBBU1NLSVRfUEFZTUVOVF9NRVRIT0RfQklM
TElOR19BRERSRVNTKQogc3RhdGljIHZvaWQgY29udmVydChDTkxhYmVsZWRWYWx1ZTxDTlBvc3Rh
bEFkZHJlc3MqPiAqcG9zdGFsQWRkcmVzcywgQXBwbGVQYXlQYXltZW50Q29udGFjdCAmcmVzdWx0
KQogewotICAgIFZlY3RvcjxTdHJpbmc+IGFkZHJlc3NMaW5lOwotICAgIGlmIChOU1N0cmluZyAq
c3RyZWV0ID0gcG9zdGFsQWRkcmVzcy52YWx1ZS5zdHJlZXQpIHsKLSAgICAgICAgYWRkcmVzc0xp
bmUuYXBwZW5kKHN0cmVldCk7Ci0gICAgICAgIHJlc3VsdC5hZGRyZXNzTGluZXMgPSBXVEZNb3Zl
KGFkZHJlc3NMaW5lKTsKLSAgICB9CisgICAgaWYgKE5TU3RyaW5nICpzdHJlZXQgPSBwb3N0YWxB
ZGRyZXNzLnZhbHVlLnN0cmVldCkKKyAgICAgICAgcmVzdWx0LmFkZHJlc3NMaW5lcyA9IFZlY3Rv
ciB7IFN0cmluZyB7IHN0cmVldCB9IH07CiAgICAgcmVzdWx0LnN1YkxvY2FsaXR5ID0gcG9zdGFs
QWRkcmVzcy52YWx1ZS5zdWJMb2NhbGl0eTsKICAgICByZXN1bHQubG9jYWxpdHkgPSBwb3N0YWxB
ZGRyZXNzLnZhbHVlLmNpdHk7CiAgICAgcmVzdWx0LnN1YkFkbWluaXN0cmF0aXZlQXJlYSA9IHBv
c3RhbEFkZHJlc3MudmFsdWUuc3ViQWRtaW5pc3RyYXRpdmVBcmVhOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2NhY2hlL0RPTUNhY2hlLmNwcAppbmRleCA0OWYzOThhYWZlZjM3Y2Q1ZThmOGViMjQ0
ZDRlMTFmMzlmMmE4Y2QzLi4yZDQ2ZDFjZGJjNzE3ZjNjOTI5OWVmYTg2M2E1NDkyNjM4M2FmNWRm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlLmNwcApAQCAtNTE1LDEw
ICs1MTUsOCBAQCBSZWNvcmQgRE9NQ2FjaGU6OnRvQ29ubmVjdGlvblJlY29yZChjb25zdCBGZXRj
aFJlcXVlc3QmIHJlcXVlc3QsIEZldGNoUmVzcG9uc2UmCiAKIHZvaWQgRE9NQ2FjaGU6OmJhdGNo
UHV0T3BlcmF0aW9uKGNvbnN0IEZldGNoUmVxdWVzdCYgcmVxdWVzdCwgRmV0Y2hSZXNwb25zZSYg
cmVzcG9uc2UsIERPTUNhY2hlRW5naW5lOjpSZXNwb25zZUJvZHkmJiByZXNwb25zZUJvZHksIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoRXhjZXB0aW9uT3I8dm9pZD4mJik+JiYgY2FsbGJhY2spCiB7
Ci0gICAgVmVjdG9yPFJlY29yZD4gcmVjb3JkczsKLSAgICByZWNvcmRzLmFwcGVuZCh0b0Nvbm5l
Y3Rpb25SZWNvcmQocmVxdWVzdCwgcmVzcG9uc2UsIFdURk1vdmUocmVzcG9uc2VCb2R5KSkpOwot
Ci0gICAgYmF0Y2hQdXRPcGVyYXRpb24oV1RGTW92ZShyZWNvcmRzKSwgV1RGTW92ZShjYWxsYmFj
aykpOworICAgIGF1dG8gcmVjb3JkID0gdG9Db25uZWN0aW9uUmVjb3JkKHJlcXVlc3QsIHJlc3Bv
bnNlLCBXVEZNb3ZlKHJlc3BvbnNlQm9keSkpOworICAgIGJhdGNoUHV0T3BlcmF0aW9uKHsgV1RG
TW92ZShyZWNvcmQpIH0sIFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAogdm9pZCBET01DYWNoZTo6
YmF0Y2hQdXRPcGVyYXRpb24oVmVjdG9yPFJlY29yZD4mJiByZWNvcmRzLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKEV4Y2VwdGlvbk9yPHZvaWQ+JiYpPiYmIGNhbGxiYWNrKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuY3BwCmluZGV4IDY5NjllMGI1MDNhODdkZDAzODVl
MTgzOTA4ODQ2NzBmZWEwNGMyNjcuLjU4M2Y5Yzg1NTU2NzE3OGNjZTcyY2FkNDQ3OTI0Y2Y4YmMz
YzRlNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFk
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5jcHAKQEAg
LTQzLDggKzQzLDkgQEAgR2FtZXBhZDo6R2FtZXBhZChjb25zdCBQbGF0Zm9ybUdhbWVwYWQmIHBs
YXRmb3JtR2FtZXBhZCkKICAgICAsIG1fYXhlcyhwbGF0Zm9ybUdhbWVwYWQuYXhpc1ZhbHVlcygp
LnNpemUoKSwgMC4wKQogewogICAgIHVuc2lnbmVkIGJ1dHRvbkNvdW50ID0gcGxhdGZvcm1HYW1l
cGFkLmJ1dHRvblZhbHVlcygpLnNpemUoKTsKKyAgICBtX2J1dHRvbnMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShidXR0b25Db3VudCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRv
bkNvdW50OyArK2kpCi0gICAgICAgIG1fYnV0dG9ucy5hcHBlbmQoR2FtZXBhZEJ1dHRvbjo6Y3Jl
YXRlKCkpOworICAgICAgICBtX2J1dHRvbnMudW5jaGVja2VkQXBwZW5kKEdhbWVwYWRCdXR0b246
OmNyZWF0ZSgpKTsKIH0KIAogR2FtZXBhZDo6fkdhbWVwYWQoKSA9IGRlZmF1bHQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZE1hbmFnZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmNwcAppbmRleCBj
YzM3NDg1OGNmZWExYjI0NGMwNGJkNDFiMjk5NDhkMjlhZWEzMDMwLi41NDNmZTQ4OTE2N2U3Y2Ux
M2Q0OTc2OGZjN2UxNWYzNGQwODIzNmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2dhbWVwYWQvR2FtZXBhZE1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAKQEAgLTc5LDE0ICs3OSwxMCBAQCB2b2lkIEdh
bWVwYWRNYW5hZ2VyOjpwbGF0Zm9ybUdhbWVwYWRDb25uZWN0ZWQoUGxhdGZvcm1HYW1lcGFkJiBw
bGF0Zm9ybUdhbWVwYWQsCiAKIHZvaWQgR2FtZXBhZE1hbmFnZXI6OnBsYXRmb3JtR2FtZXBhZERp
c2Nvbm5lY3RlZChQbGF0Zm9ybUdhbWVwYWQmIHBsYXRmb3JtR2FtZXBhZCkKIHsKLSAgICBWZWN0
b3I8V2Vha1B0cjxET01XaW5kb3c+PiB3ZWFrV2luZG93czsKLSAgICBmb3IgKGF1dG8qIGRvbVdp
bmRvdyA6IG1fZG9tV2luZG93cykKLSAgICAgICAgd2Vha1dpbmRvd3MuYXBwZW5kKCpkb21XaW5k
b3cpOwotCiAgICAgSGFzaFNldDxOYXZpZ2F0b3JHYW1lcGFkKj4gbm90aWZpZWROYXZpZ2F0b3Jz
OwogCiAgICAgLy8gSGFuZGxlIHRoZSBkaXNjb25uZWN0IGZvciBhbGwgRE9NV2luZG93cyB3aXRo
IGV2ZW50IGxpc3RlbmVycyBhbmQgdGhlaXIgTmF2aWdhdG9ycy4KLSAgICBmb3IgKGF1dG8mIHdp
bmRvdyA6IHdlYWtXaW5kb3dzKSB7CisgICAgZm9yIChhdXRvJiB3aW5kb3cgOiBjb3B5VG9WZWN0
b3JPZjxXZWFrUHRyPERPTVdpbmRvdz4+KG1fZG9tV2luZG93cykpIHsKICAgICAgICAgLy8gRXZl
bnQgZGlzcGF0Y2ggbWlnaHQgaGF2ZSBtYWRlIHRoaXMgd2luZG93IGdvIGF3YXkuCiAgICAgICAg
IGlmICghd2luZG93KQogICAgICAgICAgICAgY29udGludWU7CkBAIC0xNDMsMTEgKzEzOSw3IEBA
IHZvaWQgR2FtZXBhZE1hbmFnZXI6Om1ha2VHYW1lcGFkVmlzaWJsZShQbGF0Zm9ybUdhbWVwYWQm
IHBsYXRmb3JtR2FtZXBhZCwgSGFzaFNlCiAgICAgZm9yIChhdXRvKiBuYXZpZ2F0b3IgOiBuYXZp
Z2F0b3JTZXQpCiAgICAgICAgIG5hdmlnYXRvci0+Z2FtZXBhZENvbm5lY3RlZChwbGF0Zm9ybUdh
bWVwYWQpOwogCi0gICAgVmVjdG9yPFdlYWtQdHI8RE9NV2luZG93Pj4gd2Vha1dpbmRvd3M7Ci0g
ICAgZm9yIChhdXRvKiBkb21XaW5kb3cgOiBtX2RvbVdpbmRvd3MpCi0gICAgICAgIHdlYWtXaW5k
b3dzLmFwcGVuZCgqZG9tV2luZG93KTsKLQotICAgIGZvciAoYXV0byYgd2luZG93IDogd2Vha1dp
bmRvd3MpIHsKKyAgICBmb3IgKGF1dG8mIHdpbmRvdyA6IGNvcHlUb1ZlY3Rvck9mPFdlYWtQdHI8
RE9NV2luZG93Pj4obV9kb21XaW5kb3dzKSkgewogICAgICAgICAvLyBFdmVudCBkaXNwYXRjaCBt
aWdodCBoYXZlIG1hZGUgdGhpcyB3aW5kb3cgZ28gYXdheS4KICAgICAgICAgaWYgKCF3aW5kb3cp
CiAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAppbmRleCA3YWE2MzJiN2VjMDQ3YmU0NjA4YjUxYTA5NGVh
MWE0ZTU3YTI2MjliLi4wYmU4YmQxMTZlYzIzNjEyM2M3MTUzMmQ3ZWUzNmM1NmU5OTY1NDkzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3Bw
CkBAIC0xMDIsOSArMTAyLDcgQEAgUmVmPERPTVN0cmluZ0xpc3Q+IElEQkRhdGFiYXNlOjpvYmpl
Y3RTdG9yZU5hbWVzKCkgY29uc3QKIHsKICAgICBBU1NFUlQoY2FuQ3VycmVudFRocmVhZEFjY2Vz
c1RocmVhZExvY2FsRGF0YShvcmlnaW5UaHJlYWQoKSkpOwogCi0gICAgYXV0byBvYmplY3RTdG9y
ZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0gICAgZm9yIChhdXRvJiBuYW1lIDog
bV9pbmZvLm9iamVjdFN0b3JlTmFtZXMoKSkKLSAgICAgICAgb2JqZWN0U3RvcmVOYW1lcy0+YXBw
ZW5kKG5hbWUpOworICAgIGF1dG8gb2JqZWN0U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNy
ZWF0ZShtX2luZm8ub2JqZWN0U3RvcmVOYW1lcygpKTsKICAgICBvYmplY3RTdG9yZU5hbWVzLT5z
b3J0KCk7CiAgICAgcmV0dXJuIG9iamVjdFN0b3JlTmFtZXM7CiB9CkBAIC0xNzUsMTkgKzE3Mywx
NiBAQCBFeGNlcHRpb25PcjxSZWY8SURCVHJhbnNhY3Rpb24+PiBJREJEYXRhYmFzZTo6dHJhbnNh
Y3Rpb24oU3RyaW5nT3JWZWN0b3JPZlN0cmluZwogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZFN0YXRlRXJyb3IsICJGYWlsZWQgdG8gZXhlY3V0ZSAndHJhbnNhY3Rpb24nIG9uICdJ
REJEYXRhYmFzZSc6IFRoZSBkYXRhYmFzZSBjb25uZWN0aW9uIGlzIGNsb3NpbmcuIl9zIH07CiAK
ICAgICBWZWN0b3I8U3RyaW5nPiBvYmplY3RTdG9yZXM7Ci0gICAgaWYgKHN0ZDo6aG9sZHNfYWx0
ZXJuYXRpdmU8VmVjdG9yPFN0cmluZz4+KHN0b3JlTmFtZXMpKQorICAgIGlmIChzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+PihzdG9yZU5hbWVzKSkgewogICAgICAgICBvYmpl
Y3RTdG9yZXMgPSBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3RvcjxTdHJpbmc+PihzdG9yZU5hbWVzKSk7
Ci0gICAgZWxzZQorICAgICAgICAvLyBJdCBpcyB2YWxpZCBmb3IgamF2YXNjcmlwdCB0byBwYXNz
IGluIGEgbGlzdCBvZiBvYmplY3Qgc3RvcmUgbmFtZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGxpc3Rl
ZCB0d2ljZSwKKyAgICAgICAgLy8gc28gd2UgbmVlZCB0byBwdXQgdGhlbSBhbGwgaW4gYSBzZXQg
dG8gZ2V0IGEgdW5pcXVlIGxpc3QuCisgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBvYmplY3RTdG9y
ZVNldDsKKyAgICAgICAgb2JqZWN0U3RvcmVTZXQuYWRkKG9iamVjdFN0b3Jlcy5iZWdpbigpLCBv
YmplY3RTdG9yZXMuZW5kKCkpOworICAgICAgICBvYmplY3RTdG9yZXMgPSBjb3B5VG9WZWN0b3Io
b2JqZWN0U3RvcmVTZXQpOworICAgIH0gZWxzZQogICAgICAgICBvYmplY3RTdG9yZXMuYXBwZW5k
KFdURk1vdmUoc3RkOjpnZXQ8U3RyaW5nPihzdG9yZU5hbWVzKSkpOwogCi0gICAgLy8gSXQgaXMg
dmFsaWQgZm9yIGphdmFzY3JpcHQgdG8gcGFzcyBpbiBhIGxpc3Qgb2Ygb2JqZWN0IHN0b3JlIG5h
bWVzIHdpdGggdGhlIHNhbWUgbmFtZSBsaXN0ZWQgdHdpY2UsCi0gICAgLy8gc28gd2UgbmVlZCB0
byBwdXQgdGhlbSBhbGwgaW4gYSBzZXQgdG8gZ2V0IGEgdW5pcXVlIGxpc3QuCi0gICAgSGFzaFNl
dDxTdHJpbmc+IG9iamVjdFN0b3JlU2V0OwotICAgIGZvciAoYXV0byYgb2JqZWN0U3RvcmUgOiBv
YmplY3RTdG9yZXMpCi0gICAgICAgIG9iamVjdFN0b3JlU2V0LmFkZChvYmplY3RTdG9yZSk7Ci0K
LSAgICBvYmplY3RTdG9yZXMgPSBjb3B5VG9WZWN0b3Iob2JqZWN0U3RvcmVTZXQpOwotCiAgICAg
Zm9yIChhdXRvJiBvYmplY3RTdG9yZU5hbWUgOiBvYmplY3RTdG9yZXMpIHsKICAgICAgICAgaWYg
KG1faW5mby5oYXNPYmplY3RTdG9yZShvYmplY3RTdG9yZU5hbWUpKQogICAgICAgICAgICAgY29u
dGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXlEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmgK
aW5kZXggNGI5Nzg1MzY5ZDE5MGE2YjE5NjkxZDEzN2FlMTU2N2U1YzM3OTVkOS4uOWY4YzMzNWY4
NTMzZWZjNDA4YWQyZjljZjY3YjAxYjJlNjdiNjA3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVk
ZSAiSURCS2V5LmgiCiAjaW5jbHVkZSA8dmFyaWFudD4KKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2gu
aD4KIApAQCAtMTE3LDQxICsxMTgsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gaGFzaENvZGVzOwotICAgICAgICBoYXNoQ29kZXMuYXBw
ZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3R5cGUpKTsKLSAgICAgICAgaGFzaENvZGVzLmFw
cGVuZChtX2lzTnVsbCA/IDEgOiAwKTsKLSAgICAgICAgaGFzaENvZGVzLmFwcGVuZChtX2lzRGVs
ZXRlZFZhbHVlID8gMSA6IDApOwotICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgICAgICBj
YXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6SW52YWxpZDoKLSAgICAgICAgY2FzZSBJbmRleGVkREI6
OktleVR5cGU6Ok1heDoKLSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6Ok1pbjoKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TnVtYmVy
OgotICAgICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6RGF0ZToKLSAgICAgICAgICAgIGhh
c2hDb2Rlcy5hcHBlbmQoU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5PHNpemVvZihkb3VibGUpPigm
c3RkOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBoYXNoQ29kZXMu
YXBwZW5kKFN0cmluZ0hhc2g6Omhhc2goc3RkOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKSkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpCaW5hcnk6
IHsKLSAgICAgICAgICAgIGF1dG8qIGRhdGEgPSBzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZl
cj4obV92YWx1ZSkuZGF0YSgpOwotICAgICAgICAgICAgaWYgKCFkYXRhKQotICAgICAgICAgICAg
ICAgIGhhc2hDb2Rlcy5hcHBlbmQoMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgaGFzaENvZGVzLmFwcGVuZChTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoZGF0YS0+ZGF0YSgp
LCBkYXRhLT5zaXplKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpBcnJheToKLSAgICAgICAgICAgIGZvciAoYXV0byYg
a2V5IDogc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKSkKLSAgICAgICAgICAg
ICAgICBoYXNoQ29kZXMuYXBwZW5kKGtleS5oYXNoKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KGhhc2hD
b2Rlcy5kYXRhKCksIGhhc2hDb2Rlcy5zaXplKCkgKiBzaXplb2YodW5zaWduZWQpKTsKLSAgICB9
Ci0KICAgICBTdHJpbmcgc3RyaW5nKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5
cGUgPT0gSW5kZXhlZERCOjpLZXlUeXBlOjpTdHJpbmcpOwpAQCAtMTg0LDYgKzE1MCw4IEBAIHB1
YmxpYzoKIAogICAgIHNpemVfdCBzaXplKCkgY29uc3Q7CiAKKyAgICBib29sIGlzRGVsZXRlZFZh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9pc0RlbGV0ZWRWYWx1ZTsgfQorCiBwcml2YXRlOgogICAg
IGZyaWVuZCBzdHJ1Y3QgSURCS2V5RGF0YUhhc2hUcmFpdHM7CiAKQEAgLTE5Niw4ICsxNjQsMzYg
QEAgcHJpdmF0ZToKICAgICBzdGQ6OnZhcmlhbnQ8VmVjdG9yPElEQktleURhdGE+LCBTdHJpbmcs
IGRvdWJsZSwgVGhyZWFkU2FmZURhdGFCdWZmZXI+IG1fdmFsdWU7CiB9OwogCitpbmxpbmUgdm9p
ZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEpCit7CisgICAg
YWRkKGhhc2hlciwga2V5RGF0YS50eXBlKCkpOworICAgIGFkZChoYXNoZXIsIGtleURhdGEuaXNO
dWxsKCkpOworICAgIGFkZChoYXNoZXIsIGtleURhdGEuaXNEZWxldGVkVmFsdWUoKSk7CisgICAg
c3dpdGNoIChrZXlEYXRhLnR5cGUoKSkgeworICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpJ
bnZhbGlkOgorICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpNYXg6CisgICAgY2FzZSBJbmRl
eGVkREI6OktleVR5cGU6Ok1pbjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbmRleGVkREI6
OktleVR5cGU6Ok51bWJlcjoKKyAgICAgICAgYWRkKGhhc2hlciwga2V5RGF0YS5udW1iZXIoKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpEYXRlOgorICAg
ICAgICBhZGQoaGFzaGVyLCBrZXlEYXRhLmRhdGUoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgSW5kZXhlZERCOjpLZXlUeXBlOjpTdHJpbmc6CisgICAgICAgIGFkZChoYXNoZXIsIGtleURh
dGEuc3RyaW5nKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlw
ZTo6QmluYXJ5OgorICAgICAgICBhZGQoaGFzaGVyLCBrZXlEYXRhLmJpbmFyeSgpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OkFycmF5OgorICAgICAgICBh
ZGQoaGFzaGVyLCBrZXlEYXRhLmFycmF5KCkpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
IHN0cnVjdCBJREJLZXlEYXRhSGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
SURCS2V5RGF0YSYgYSkgeyByZXR1cm4gYS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBJREJLZXlEYXRhJiBhKSB7IHJldHVybiBjb21wdXRlSGFzaChhKTsgfQogICAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IElEQktleURhdGEmIGEsIGNvbnN0IElEQktleURhdGEm
IGIpIHsgcmV0dXJuIGEgPT0gYjsgfQogICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBh
cmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IDE0MzUxNDBhNWNiNGEx
YTFkNDA3YTJkYjI5ZDE1YmRmMmQ1MmMwYjYuLmNlNjNjNmE1NmIxNGQ1YmUwMzIyNTczNzI1MzIy
YjgyZjBkZGRkMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTEyNiwxNCArMTI2LDExIEBAIFJlZjxET01TdHJpbmdM
aXN0PiBJREJPYmplY3RTdG9yZTo6aW5kZXhOYW1lcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNh
bkN1cnJlbnRUaHJlYWRBY2Nlc3NUaHJlYWRMb2NhbERhdGEobV90cmFuc2FjdGlvbi5kYXRhYmFz
ZSgpLm9yaWdpblRocmVhZCgpKSk7CiAKLSAgICBhdXRvIGluZGV4TmFtZXMgPSBET01TdHJpbmdM
aXN0OjpjcmVhdGUoKTsKLQotICAgIGlmICghbV9kZWxldGVkKSB7Ci0gICAgICAgIGZvciAoYXV0
byYgbmFtZSA6IG1faW5mby5pbmRleE5hbWVzKCkpCi0gICAgICAgICAgICBpbmRleE5hbWVzLT5h
cHBlbmQobmFtZSk7Ci0gICAgICAgIGluZGV4TmFtZXMtPnNvcnQoKTsKLSAgICB9CisgICAgaWYg
KG1fZGVsZXRlZCkKKyAgICAgICAgcmV0dXJuIERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogCisg
ICAgYXV0byBpbmRleE5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKG1faW5mby5pbmRleE5h
bWVzKCkpOworICAgIGluZGV4TmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gaW5kZXhOYW1lczsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb24uY3BwCmluZGV4IDZjMTEyMWI3MzEwZjczN2Y3Yjk1YmVjZWU4NDU0ZTZhYzUwZGYyYjYu
LjFiNGM4Yjk3MWJlNjczM2VmMzU2YjA5YWRkOWIzMjBiZTQ2OTVlNzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKQEAgLTEy
MSwxMiArMTIxLDggQEAgUmVmPERPTVN0cmluZ0xpc3Q+IElEQlRyYW5zYWN0aW9uOjpvYmplY3RT
dG9yZU5hbWVzKCkgY29uc3QKIHsKICAgICBBU1NFUlQoY2FuQ3VycmVudFRocmVhZEFjY2Vzc1Ro
cmVhZExvY2FsRGF0YShtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogCi0gICAgY29uc3Qg
VmVjdG9yPFN0cmluZz4gbmFtZXMgPSBpc1ZlcnNpb25DaGFuZ2UoKSA/IG1fZGF0YWJhc2UtPmlu
Zm8oKS5vYmplY3RTdG9yZU5hbWVzKCkgOiBtX2luZm8ub2JqZWN0U3RvcmVzKCk7Ci0KLSAgICBS
ZWY8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0
ZSgpOwotICAgIGZvciAoYXV0byYgbmFtZSA6IG5hbWVzKQotICAgICAgICBvYmplY3RTdG9yZU5h
bWVzLT5hcHBlbmQobmFtZSk7Ci0KKyAgICBWZWN0b3I8U3RyaW5nPiBuYW1lcyA9IGlzVmVyc2lv
bkNoYW5nZSgpID8gbV9kYXRhYmFzZS0+aW5mbygpLm9iamVjdFN0b3JlTmFtZXMoKSA6IG1faW5m
by5vYmplY3RTdG9yZXMoKTsKKyAgICBhdXRvIG9iamVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdM
aXN0OjpjcmVhdGUoV1RGTW92ZShuYW1lcykpOwogICAgIG9iamVjdFN0b3JlTmFtZXMtPnNvcnQo
KTsKICAgICByZXR1cm4gb2JqZWN0U3RvcmVOYW1lczsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCmlu
ZGV4IDE5YTA2OWUyM2IzOWRiYjRhNzA2NWQ4ZGU3OGQ3ZWU0OTNjNjk4MTguLmI4MjVlYzgwMDUx
NDgwMjhlMmIwN2IxOWRjNzgzOTJhNDNhOGNiYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcApAQCAt
NTU1LDExICs1NTUsMTAgQEAgYm9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6c2hvd01lZGlhQ29udHJv
bHNDb250ZXh0TWVudShIVE1MRWxlbWVudCYgdGFyZ2V0LCBTdHJpbmcKIAogICAgIGlmIChvcHRp
b25zSlNPTk9iamVjdC0+Z2V0Qm9vbGVhbigiaW5jbHVkZUxhbmd1YWdlcyJfcykudmFsdWVfb3Io
ZmFsc2UpKSB7CiAgICAgICAgIGlmIChhdXRvKiBhdWRpb1RyYWNrcyA9IG1lZGlhRWxlbWVudC5h
dWRpb1RyYWNrcygpOyBhdWRpb1RyYWNrcyAmJiBhdWRpb1RyYWNrcy0+bGVuZ3RoKCkgPiAxKSB7
Ci0gICAgICAgICAgICBWZWN0b3I8TWVudUl0ZW0+IGxhbmd1YWdlTWVudUl0ZW1zOwotCiAgICAg
ICAgICAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBwYWdlLT5ncm91cCgpLmVuc3VyZUNh
cHRpb25QcmVmZXJlbmNlcygpOwotICAgICAgICAgICAgZm9yIChhdXRvJiBhdWRpb1RyYWNrIDog
Y2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUoYXVkaW9UcmFja3MpKQot
ICAgICAgICAgICAgICAgIGxhbmd1YWdlTWVudUl0ZW1zLmFwcGVuZChjcmVhdGVNZW51SXRlbShh
dWRpb1RyYWNrLCBjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFjayhhdWRpb1Ry
YWNrLmdldCgpKSwgYXVkaW9UcmFjay0+ZW5hYmxlZCgpKSk7CisgICAgICAgICAgICBhdXRvIGxh
bmd1YWdlTWVudUl0ZW1zID0gY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlzdEZvck1l
bnUoYXVkaW9UcmFja3MpLm1hcChbJl0oYXV0byYgYXVkaW9UcmFjaykgeworICAgICAgICAgICAg
ICAgIHJldHVybiBjcmVhdGVNZW51SXRlbShhdWRpb1RyYWNrLCBjYXB0aW9uUHJlZmVyZW5jZXMu
ZGlzcGxheU5hbWVGb3JUcmFjayhhdWRpb1RyYWNrLmdldCgpKSwgYXVkaW9UcmFjay0+ZW5hYmxl
ZCgpKTsKKyAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICBpZiAoIWxhbmd1YWdlTWVudUl0
ZW1zLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBpdGVtcy5hcHBlbmQoY3JlYXRlU3VibWVu
dShXRUJfVUlfU1RSSU5HX0tFWSgiTGFuZ3VhZ2VzIiwgIkxhbmd1YWdlcyAoTWVkaWEgQ29udHJv
bHMgTWVudSkiLCAiTGFuZ3VhZ2VzIG1lZGlhIGNvbnRyb2xzIGNvbnRleHQgbWVudSB0aXRsZSIp
LCAiZ2xvYmUiX3MsIFdURk1vdmUobGFuZ3VhZ2VNZW51SXRlbXMpKSk7CkBAIC01NjgsMTUgKzU2
NywxMyBAQCBib29sIE1lZGlhQ29udHJvbHNIb3N0OjpzaG93TWVkaWFDb250cm9sc0NvbnRleHRN
ZW51KEhUTUxFbGVtZW50JiB0YXJnZXQsIFN0cmluZwogCiAgICAgaWYgKG9wdGlvbnNKU09OT2Jq
ZWN0LT5nZXRCb29sZWFuKCJpbmNsdWRlU3VidGl0bGVzIl9zKS52YWx1ZV9vcihmYWxzZSkpIHsK
ICAgICAgICAgaWYgKGF1dG8qIHRleHRUcmFja3MgPSBtZWRpYUVsZW1lbnQudGV4dFRyYWNrcygp
OyB0ZXh0VHJhY2tzICYmIHRleHRUcmFja3MtPmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBWZWN0
b3I8TWVudUl0ZW0+IHN1YnRpdGxlTWVudUl0ZW1zOwotCiAgICAgICAgICAgICBhdXRvJiBjYXB0
aW9uUHJlZmVyZW5jZXMgPSBwYWdlLT5ncm91cCgpLmVuc3VyZUNhcHRpb25QcmVmZXJlbmNlcygp
OwogICAgICAgICAgICAgYXV0byBzb3J0ZWRUZXh0VHJhY2tzID0gY2FwdGlvblByZWZlcmVuY2Vz
LnNvcnRlZFRyYWNrTGlzdEZvck1lbnUodGV4dFRyYWNrcywgeyBUZXh0VHJhY2s6OktpbmQ6OlN1
YnRpdGxlcywgVGV4dFRyYWNrOjpLaW5kOjpDYXB0aW9ucywgVGV4dFRyYWNrOjpLaW5kOjpEZXNj
cmlwdGlvbnMgfSk7CiAgICAgICAgICAgICBib29sIGFsbFRyYWNrc0Rpc2FibGVkID0gbm90Rm91
bmQgPT0gc29ydGVkVGV4dFRyYWNrcy5maW5kSWYoW10gKGNvbnN0IGF1dG8mIHRleHRUcmFjaykg
ewogICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0VHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6
Ok1vZGU6OlNob3dpbmc7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGJvb2wgdXNlc0F1
dG9tYXRpY1RyYWNrID0gY2FwdGlvblByZWZlcmVuY2VzLmNhcHRpb25EaXNwbGF5TW9kZSgpID09
IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OkF1dG9tYXRpYyAmJiBhbGxUcmFja3NEaXNhYmxlZDsK
LSAgICAgICAgICAgIGZvciAoYXV0byYgdGV4dFRyYWNrIDogc29ydGVkVGV4dFRyYWNrcykgewor
ICAgICAgICAgICAgYXV0byBzdWJ0aXRsZU1lbnVJdGVtcyA9IHNvcnRlZFRleHRUcmFja3MubWFw
KFsmXShhdXRvJiB0ZXh0VHJhY2spIHsKICAgICAgICAgICAgICAgICBib29sIGNoZWNrZWQgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICBpZiAoYWxsVHJhY2tzRGlzYWJsZWQgJiYgdGV4dFRyYWNr
ID09ICZUZXh0VHJhY2s6OmNhcHRpb25NZW51T2ZmSXRlbSgpICYmIChjYXB0aW9uUHJlZmVyZW5j
ZXMuY2FwdGlvbkRpc3BsYXlNb2RlKCkgPT0gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6Rm9yY2Vk
T25seSB8fCBjYXB0aW9uUHJlZmVyZW5jZXMuY2FwdGlvbkRpc3BsYXlNb2RlKCkgPT0gQ2FwdGlv
blVzZXJQcmVmZXJlbmNlczo6TWFudWFsKSkKICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9
IHRydWU7CkBAIC01ODQsOCArNTgxLDggQEAgYm9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6c2hvd01l
ZGlhQ29udHJvbHNDb250ZXh0TWVudShIVE1MRWxlbWVudCYgdGFyZ2V0LCBTdHJpbmcKICAgICAg
ICAgICAgICAgICAgICAgY2hlY2tlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
IXVzZXNBdXRvbWF0aWNUcmFjayAmJiB0ZXh0VHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1v
ZGU6OlNob3dpbmcpCiAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIHN1YnRpdGxlTWVudUl0ZW1zLmFwcGVuZChjcmVhdGVNZW51SXRlbSh0ZXh0VHJh
Y2ssIGNhcHRpb25QcmVmZXJlbmNlcy5kaXNwbGF5TmFtZUZvclRyYWNrKHRleHRUcmFjay5nZXQo
KSksIGNoZWNrZWQpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gY3Jl
YXRlTWVudUl0ZW0odGV4dFRyYWNrLCBjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JU
cmFjayh0ZXh0VHJhY2suZ2V0KCkpLCBjaGVja2VkKTsKKyAgICAgICAgICAgIH0pOwogCiAgICAg
ICAgICAgICBpZiAoIXN1YnRpdGxlTWVudUl0ZW1zLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAg
ICBpdGVtcy5hcHBlbmQoY3JlYXRlU3VibWVudShXRUJfVUlfU1RSSU5HX0tFWSgiU3VidGl0bGVz
IiwgIlN1YnRpdGxlcyAoTWVkaWEgQ29udHJvbHMgTWVudSkiLCAiU3VidGl0bGVzIG1lZGlhIGNv
bnRyb2xzIGNvbnRleHQgbWVudSB0aXRsZSIpLCAiY2FwdGlvbnMuYnViYmxlIl9zLCBXVEZNb3Zl
KHN1YnRpdGxlTWVudUl0ZW1zKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc291cmNlL01lZGlhU291cmNlLmNwcAppbmRleCA5MTI3NDdmNDA2YzI5NTk0OTk3M2I1YmIx
MzQ5ZGJjYTY3NDFjMTM1Li5hMmU2NThhOTJmOTk3ZDdmNGI0M2UxNzAzZjRhMGUwOTQ5MTdiMGUy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291
cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291
cmNlLmNwcApAQCAtMTA1MSwxMCArMTA1MSw5IEBAIHZvaWQgTWVkaWFTb3VyY2U6Om9uUmVhZHlT
dGF0ZUNoYW5nZShSZWFkeVN0YXRlIG9sZFN0YXRlLCBSZWFkeVN0YXRlIG5ld1N0YXRlKQogCiBW
ZWN0b3I8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVNvdXJjZTo6YWN0aXZlUmFuZ2VzKCkgY29u
c3QKIHsKLSAgICBWZWN0b3I8UGxhdGZvcm1UaW1lUmFuZ2VzPiBhY3RpdmVSYW5nZXM7Ci0gICAg
Zm9yIChhdXRvJiBzb3VyY2VCdWZmZXIgOiAqbV9hY3RpdmVTb3VyY2VCdWZmZXJzKQotICAgICAg
ICBhY3RpdmVSYW5nZXMuYXBwZW5kKHNvdXJjZUJ1ZmZlci0+YnVmZmVyZWRJbnRlcm5hbCgpLnJh
bmdlcygpKTsKLSAgICByZXR1cm4gYWN0aXZlUmFuZ2VzOworICAgIHJldHVybiBXVEY6Om1hcCgq
bV9hY3RpdmVTb3VyY2VCdWZmZXJzLCBbXShhdXRvJiBzb3VyY2VCdWZmZXIpIHsKKyAgICAgICAg
cmV0dXJuIHNvdXJjZUJ1ZmZlci0+YnVmZmVyZWRJbnRlcm5hbCgpLnJhbmdlcygpOworICAgIH0p
OwogfQogCiBFeGNlcHRpb25PcjxSZWY8U291cmNlQnVmZmVyUHJpdmF0ZT4+IE1lZGlhU291cmNl
OjpjcmVhdGVTb3VyY2VCdWZmZXJQcml2YXRlKGNvbnN0IENvbnRlbnRUeXBlJiBpbmNvbWluZ1R5
cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NhbXBs
ZU1hcC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9TYW1wbGVNYXAuaApp
bmRleCBlYWY0OTMxNTk3ZDI2ODUyM2M2NjdiZDljZGNjNGNlYTY1NDMzNjk1Li5hZjFlMTA0NTgx
Nzg3ZjE1ZjZmMWYzODViMjU3MjQ0NGQ4ODU5NWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmgKQEAgLTkxLDYgKzkxLDcgQEAgcHVibGljOgog
ICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9zYW1w
bGVzLnJiZWdpbigpOyB9CiAgICAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gbV9z
YW1wbGVzLnJlbmQoKTsgfQogICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2FtcGxlcy5yZW5kKCk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2FtcGxlcy5zaXplKCk7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIGl0ZXJhdG9y
IGZpbmRTYW1wbGVXaXRoRGVjb2RlS2V5KGNvbnN0IEtleVR5cGUmKTsKICAgICBXRUJDT1JFX0VY
UE9SVCBpdGVyYXRvciBmaW5kU2FtcGxlQWZ0ZXJEZWNvZGVLZXkoY29uc3QgS2V5VHlwZSYpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZm
ZXJMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZl
ckxpc3QuaAppbmRleCBmYzZlMDczYWI5MGU3NmQxODE1Zjg4OTZiNmY2NjA5NmRmMmZkZGQ1Li40
MzZiZjAxN2JjODFhY2ZiOTRmNWU4NWI5MGY5MWNmNDViYmViZDNmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaApAQCAt
NDgsNiArNDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+U291cmNlQnVmZmVyTGlzdCgpOwog
CiAgICAgdW5zaWduZWQgbG9uZyBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgp
OyB9CisKICAgICBTb3VyY2VCdWZmZXIqIGl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCkgY29uc3Qg
eyByZXR1cm4gKGluZGV4IDwgbV9saXN0LnNpemUoKSkgPyBtX2xpc3RbaW5kZXhdLmdldCgpIDog
bnVsbHB0cjsgfQogCiAgICAgdm9pZCBhZGQoUmVmPFNvdXJjZUJ1ZmZlcj4mJik7CkBAIC01OCw2
ICs1OSw5IEBAIHB1YmxpYzoKIAogICAgIFZlY3RvcjxSZWZQdHI8U291cmNlQnVmZmVyPj46Oml0
ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9saXN0LmJlZ2luKCk7IH0KICAgICBWZWN0b3I8UmVm
UHRyPFNvdXJjZUJ1ZmZlcj4+OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX2xpc3QuZW5kKCk7
IH0KKyAgICBWZWN0b3I8UmVmUHRyPFNvdXJjZUJ1ZmZlcj4+Ojpjb25zdF9pdGVyYXRvciBiZWdp
bigpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5iZWdpbigpOyB9CisgICAgVmVjdG9yPFJlZlB0cjxT
b3VyY2VCdWZmZXI+Pjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9saXN0
LmVuZCgpOyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgp
OyB9CiAKICAgICAvLyBFdmVudFRhcmdldCBpbnRlcmZhY2UKICAgICBFdmVudFRhcmdldEludGVy
ZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFNvdXJjZUJ1
ZmZlckxpc3RFdmVudFRhcmdldEludGVyZmFjZVR5cGU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuY3BwCmluZGV4IGVhZjNhMmUxZTc5OGE0
ODFmNzY4YjMzYzVmZDI5ZDNjN2NiYWIzYWUuLjgyYzFhM2EwYzA3MjU1YzFlODBkYTYxZDU5MGJh
OWM5NDFjYzA2OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1Nw
ZWVjaFN5bnRoZXNpcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3Bl
ZWNoU3ludGhlc2lzLmNwcApAQCAtOTMsOSArOTMsMTAgQEAgY29uc3QgVmVjdG9yPFJlZjxTcGVl
Y2hTeW50aGVzaXNWb2ljZT4+JiBTcGVlY2hTeW50aGVzaXM6OmdldFZvaWNlcygpCiAgICAgICAg
IHJldHVybiBtX3ZvaWNlTGlzdDsKIAogICAgIC8vIElmIHRoZSB2b2ljZUxpc3QgaXMgZW1wdHks
IHRoYXQncyB0aGUgY3VlIHRvIGdldCB0aGUgdm9pY2VzIGZyb20gdGhlIHBsYXRmb3JtIGFnYWlu
LgotICAgIGZvciAoYXV0byYgdm9pY2UgOiBtX3NwZWVjaFN5bnRoZXNpc0NsaWVudCA/IG1fc3Bl
ZWNoU3ludGhlc2lzQ2xpZW50LT52b2ljZUxpc3QoKSA6IGVuc3VyZVBsYXRmb3JtU3BlZWNoU3lu
dGhlc2l6ZXIoKS52b2ljZUxpc3QoKSkKLSAgICAgICAgbV92b2ljZUxpc3QuYXBwZW5kKFNwZWVj
aFN5bnRoZXNpc1ZvaWNlOjpjcmVhdGUoKnZvaWNlKSk7Ci0KKyAgICBhdXRvJiB2b2ljZUxpc3Qg
PSBtX3NwZWVjaFN5bnRoZXNpc0NsaWVudCA/IG1fc3BlZWNoU3ludGhlc2lzQ2xpZW50LT52b2lj
ZUxpc3QoKSA6IGVuc3VyZVBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIoKS52b2ljZUxpc3QoKTsK
KyAgICBtX3ZvaWNlTGlzdCA9IHZvaWNlTGlzdC5tYXAoW10oYXV0byYgdm9pY2UpIHsKKyAgICAg
ICAgcmV0dXJuIFNwZWVjaFN5bnRoZXNpc1ZvaWNlOjpjcmVhdGUoKnZvaWNlKTsKKyAgICB9KTsK
ICAgICByZXR1cm4gbV92b2ljZUxpc3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrLm1tIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2subW0K
aW5kZXggZjFiOTY5NTgwNTdkMmZlNjA0NGQyYzdiMjU5ZGI2YzVjZWI0NGVmZS4uYTVlODVhZjgy
OWJjMGRkZGVmNjJjNjFhNGY2YzlmMmNmMmFkNmNmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9zcGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2subW0KKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRh
c2subW0KQEAgLTEyOCw5ICsxMjgsOCBAQCAtICh2b2lkKWNhbGxiYWNrV2l0aFRyYW5zY3JpcHRp
b25zOihOU0FycmF5PFNGVHJhbnNjcmlwdGlvbiAqPiAqKXRyYW5zY3JpcHRpb25zCiAgICAgICAg
IGlmIChhbHRlcm5hdGl2ZXMuc2l6ZSgpID09IF9tYXhBbHRlcm5hdGl2ZXMpCiAgICAgICAgICAg
ICBicmVhazsKICAgICB9Ci0gICAgVmVjdG9yPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0RGF0YT4g
ZGF0YXM7Ci0gICAgZGF0YXMuYXBwZW5kKFNwZWVjaFJlY29nbml0aW9uUmVzdWx0RGF0YSB7IFdU
Rk1vdmUoYWx0ZXJuYXRpdmVzKSwgYm9vbChpc0ZpbmFsKSB9KTsKLSAgICBfZGVsZWdhdGVDYWxs
YmFjayhTcGVlY2hSZWNvZ25pdGlvblVwZGF0ZTo6Y3JlYXRlUmVzdWx0KF9pZGVudGlmaWVyLCBX
VEZNb3ZlKGRhdGFzKSkpOworICAgIFNwZWVjaFJlY29nbml0aW9uUmVzdWx0RGF0YSBkYXRhIHsg
V1RGTW92ZShhbHRlcm5hdGl2ZXMpLCAhIWlzRmluYWwgfTsKKyAgICBfZGVsZWdhdGVDYWxsYmFj
ayhTcGVlY2hSZWNvZ25pdGlvblVwZGF0ZTo6Y3JlYXRlUmVzdWx0KF9pZGVudGlmaWVyLCB7IFdU
Rk1vdmUoZGF0YSkgfSkpOwogfQogCiAtICh2b2lkKWF1ZGlvU2FtcGxlc0F2YWlsYWJsZTooQ01T
YW1wbGVCdWZmZXJSZWYpc2FtcGxlQnVmZmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFza01vY2subW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFza01v
Y2subW0KaW5kZXggYmM1YzYyMTliNWRhZGMzYjFjZGM1OTBkNjVjODk3YjcyNTBiMWUyMS4uOTYz
ZmI0N2M0Yzg1YWEwNjA1YTJkYWJjNzE5ZTU2NzRjMjYwYWJmNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2tNb2Nr
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVjaFJl
Y29nbml6ZXJUYXNrTW9jay5tbQpAQCAtNjMsMTEgKzYzLDkgQEAgLSAodm9pZClhdWRpb1NhbXBs
ZXNBdmFpbGFibGU6KENNU2FtcGxlQnVmZmVyUmVmKXNhbXBsZUJ1ZmZlcgogICAgIH0KIAogICAg
IC8vIEZha2Ugc29tZSByZWNvZ25pdGlvbiByZXN1bHRzLgotICAgIFZlY3RvcjxTcGVlY2hSZWNv
Z25pdGlvbkFsdGVybmF0aXZlRGF0YT4gYWx0ZXJuYXRpdmVzOwotICAgIGFsdGVybmF0aXZlcy5h
cHBlbmQoU3BlZWNoUmVjb2duaXRpb25BbHRlcm5hdGl2ZURhdGEgeyAiVGVzdCIsIDEuMCB9KTsK
LSAgICBWZWN0b3I8U3BlZWNoUmVjb2duaXRpb25SZXN1bHREYXRhPiBkYXRhczsKLSAgICBkYXRh
cy5hcHBlbmQoU3BlZWNoUmVjb2duaXRpb25SZXN1bHREYXRhIHsgV1RGTW92ZShhbHRlcm5hdGl2
ZXMpLCB0cnVlICB9KTsKLSAgICBfZGVsZWdhdGVDYWxsYmFjayhTcGVlY2hSZWNvZ25pdGlvblVw
ZGF0ZTo6Y3JlYXRlUmVzdWx0KF9pZGVudGlmaWVyLCBXVEZNb3ZlKGRhdGFzKSkpOworICAgIFNw
ZWVjaFJlY29nbml0aW9uQWx0ZXJuYXRpdmVEYXRhIGFsdGVybmF0aXZlIHsgIlRlc3QiLCAxLjAg
fTsKKyAgICBTcGVlY2hSZWNvZ25pdGlvblJlc3VsdERhdGEgZGF0YSB7IHsgV1RGTW92ZShhbHRl
cm5hdGl2ZSkgfSwgdHJ1ZSB9OworICAgIF9kZWxlZ2F0ZUNhbGxiYWNrKFNwZWVjaFJlY29nbml0
aW9uVXBkYXRlOjpjcmVhdGVSZXN1bHQoX2lkZW50aWZpZXIsIHsgV1RGTW92ZShkYXRhKSB9KSk7
CiAKICAgICBpZiAoIV9kb011bHRpcGxlUmVjb2duaXRpb25zKQogICAgICAgICBbc2VsZiBhYm9y
dF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmlt
YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9u
LmNwcAppbmRleCBlMzU5YTA0M2IyZTNjZjM5ZjljMjZiYzU5ZTk4ZjEwNWUxMzJjMTA1Li44YmNl
NjY3MDY2YTNmNzc2ZjBlYWJhOTY2YjgxYTc0NmE5NzVlMzI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKQEAgLTE2NCwxMCArMTY0
LDggQEAgc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kRnVuYyhjb25zdCBU
cmFuc2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBjb24KICAgICBpZiAoY29udGV4dC5jb21wb3NpdGVP
cGVyYXRpb24gPT0gQ29tcG9zaXRlT3BlcmF0aW9uOjpBZGQpIHsKICAgICAgICAgQVNTRVJUKGNv
bnRleHQucHJvZ3Jlc3MgPT0gMS4wKTsKICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyByZXN1
bHRPcGVyYXRpb25zOwotICAgICAgICBmb3IgKGF1dG8gb3BlcmF0aW9uIDogZnJvbS5vcGVyYXRp
b25zKCkpCi0gICAgICAgICAgICByZXN1bHRPcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQo
b3BlcmF0aW9uKTsKLSAgICAgICAgZm9yIChhdXRvIG9wZXJhdGlvbiA6IHRvLm9wZXJhdGlvbnMo
KSkKLSAgICAgICAgICAgIHJlc3VsdE9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChvcGVy
YXRpb24pOworICAgICAgICByZXN1bHRPcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmRWZWN0
b3IoZnJvbS5vcGVyYXRpb25zKCkpOworICAgICAgICByZXN1bHRPcGVyYXRpb25zLm9wZXJhdGlv
bnMoKS5hcHBlbmRWZWN0b3IodG8ub3BlcmF0aW9ucygpKTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dE9wZXJhdGlvbnM7CiAgICAgfQogICAgIGF1dG8gYm94U2l6ZSA9IGlzPFJlbmRlckJveD4oY29u
dGV4dC5jbGllbnQtPnJlbmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PigqY29udGV4dC5j
bGllbnQtPnJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKS5zaXplKCkgOiBMYXlvdXRTaXplKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vRG9jdW1lbnRUaW1lbGluZXND
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5l
c0NvbnRyb2xsZXIuY3BwCmluZGV4IGI1ZmQyYWVmMTAwMDEyZGE5YzRiZGIyMWU3YWQwNDFhMzY2
NDE2YmYuLjcwOTQ1M2JjNjYyNTJmOTU5ODI0YmE5NGVjYTdhMzMwMDhjOWNhM2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lc0NvbnRy
b2xsZXIuY3BwCkBAIC05OCw5ICs5OCw3IEBAIHZvaWQgRG9jdW1lbnRUaW1lbGluZXNDb250cm9s
bGVyOjp1cGRhdGVBbmltYXRpb25zQW5kU2VuZEV2ZW50cyhSZWR1Y2VkUmVzb2x1dGlvCiAgICAg
QVNTRVJUKCFtX3RpbWVsaW5lcy5oYXNOdWxsUmVmZXJlbmNlcygpKTsKIAogICAgIC8vIFdlIG5l
ZWQgdG8gY29weSBtX3RpbWVsaW5lcyBiZWZvcmUgaXRlcmF0aW5nIG92ZXIgaXRzIG1lbWJlcnMg
c2luY2UgdGhlIHN0ZXBzIGluIHRoaXMgcHJvY2VkdXJlIG1heSBtdXRhdGUgbV90aW1lbGluZXMu
Ci0gICAgVmVjdG9yPFJlZjxEb2N1bWVudFRpbWVsaW5lPj4gcHJvdGVjdGVkVGltZWxpbmVzOwot
ICAgIGZvciAoYXV0byYgdGltZWxpbmUgOiBtX3RpbWVsaW5lcykKLSAgICAgICAgcHJvdGVjdGVk
VGltZWxpbmVzLmFwcGVuZCh0aW1lbGluZSk7CisgICAgYXV0byBwcm90ZWN0ZWRUaW1lbGluZXMg
PSBjb3B5VG9WZWN0b3JPZjxSZWY8RG9jdW1lbnRUaW1lbGluZT4+KG1fdGltZWxpbmVzKTsKIAog
ICAgIC8vIFdlIG5lZWQgdG8gZnJlZXplIHRoZSBjdXJyZW50IHRpbWUgZXZlbiBpZiBubyBhbmlt
YXRpb24gaXMgcnVubmluZy4KICAgICAvLyBkb2N1bWVudC50aW1lbGluZS5jdXJyZW50VGltZSBt
YXkgYmUgY2FsbGVkIGZyb20gYSByQUYgY2FsbGJhY2sgYW5kCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYW5p
bWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcAppbmRleCA3N2QxZTYwZmEzMjgzMWIxMzI2YzNiMzA4
NDM1Nzc3MjYwNzM5OWY1Li5jZmU0MzJlN2RlYmUxYmVkMTU1NTY1ZDgxMmE4ZWJlODA3ZjYwMmMx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAKQEAgLTM3
NSw4ICszNzUsNyBAQCBzdGF0aWMgaW5saW5lIEV4Y2VwdGlvbk9yPHZvaWQ+IHByb2Nlc3NQcm9w
ZXJ0eUluZGV4ZWRLZXlmcmFtZXMoSlNHbG9iYWxPYmplY3QmCiAgICAgICAgIGNvbXB1dGVNaXNz
aW5nS2V5ZnJhbWVPZmZzZXRzKHByb3BlcnR5S2V5ZnJhbWVzKTsKIAogICAgICAgICAvLyA3LiBB
ZGQga2V5ZnJhbWVzIGluIHByb3BlcnR5IGtleWZyYW1lcyB0byBwcm9jZXNzZWQga2V5ZnJhbWVz
LgotICAgICAgICBmb3IgKGF1dG8mIGtleWZyYW1lIDogcHJvcGVydHlLZXlmcmFtZXMpCi0gICAg
ICAgICAgICBwYXJzZWRLZXlmcmFtZXMuYXBwZW5kKFdURk1vdmUoa2V5ZnJhbWUpKTsKKyAgICAg
ICAgcGFyc2VkS2V5ZnJhbWVzLmFwcGVuZFZlY3Rvcihwcm9wZXJ0eUtleWZyYW1lcyk7CiAgICAg
fQogCiAgICAgLy8gMy4gU29ydCBwcm9jZXNzZWQga2V5ZnJhbWVzIGJ5IHRoZSBjb21wdXRlZCBr
ZXlmcmFtZSBvZmZzZXQgb2YgZWFjaCBrZXlmcmFtZSBpbiBpbmNyZWFzaW5nIG9yZGVyLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9u
LmNwcAppbmRleCA1MzQ5ZWYzOGZlNjkwNjRkZDQ1M2ZkNjhkN2RjNmE4ZWU3NzNkOWVjLi5jMDVj
ZDg5NDE1ZmY0MTIwNGUzYzNjOGM3NzNmNDhkMTEzNjNjMDkyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uLmNwcApAQCAtNDYs
OCArNDYsNyBAQCBDb250ZW50RXh0ZW5zaW9uOjpDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmlu
ZyYgaWRlbnRpZmllciwgUmVmPENvbXBpbGVkQ29udGVudAogICAgICwgbV9leHRlbnNpb25CYXNl
VVJMKFdURk1vdmUoZXh0ZW5zaW9uQmFzZVVSTCkpCiB7CiAgICAgREZBQnl0ZWNvZGVJbnRlcnBy
ZXRlciBpbnRlcnByZXRlcihtX2NvbXBpbGVkRXh0ZW5zaW9uLT51cmxGaWx0ZXJzQnl0ZWNvZGUo
KSk7Ci0gICAgZm9yICh1aW50NjRfdCBhY3Rpb24gOiBpbnRlcnByZXRlci5hY3Rpb25zTWF0Y2hp
bmdFdmVyeXRoaW5nKCkpCi0gICAgICAgIG1fdW5pdmVyc2FsQWN0aW9ucy5hcHBlbmQoYWN0aW9u
KTsKKyAgICBtX3VuaXZlcnNhbEFjdGlvbnMgPSBjb3B5VG9WZWN0b3IoaW50ZXJwcmV0ZXIuYWN0
aW9uc01hdGNoaW5nRXZlcnl0aGluZygpKTsKIAogICAgIGlmIChzaG91bGRDb21waWxlQ1NTID09
IFNob3VsZENvbXBpbGVDU1M6OlllcykKICAgICAgICAgY29tcGlsZUdsb2JhbERpc3BsYXlOb25l
U3R5bGVTaGVldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlz
dC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oCmluZGV4IGJiMTI3M2E1ZmQz
ZWU4ZTY4ODBiYTc2N2FmOTI5MTdlYmRkYTc0OGYuLmY5YTc2MDYwNDA4OWIwY2UyZjY5Zjg3Njg2
NTRmMTI2ODIzN2E2N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxp
c3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgKQEAgLTU4LDYgKzU4
LDcgQEAgcHVibGljOgogICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWVzLmVuZCgpOyB9CiAgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX3ZhbHVlcy5i
ZWdpbigpOyB9CiAgICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV92YWx1ZXMuZW5kKCk7IH0K
KyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQogCiAg
ICAgdm9pZCBhcHBlbmQoUmVmPENTU1ZhbHVlPiYmKTsKICAgICB2b2lkIHByZXBlbmQoUmVmPENT
U1ZhbHVlPiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNP
cGVyYXRpb25Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRp
b25Ob2RlLmNwcAppbmRleCA2YWI1Y2I2NzRkNDE1M2Q4MjI1MmYyNTg3ZWU0NmZjZjVhYWM4YzRh
Li44MGY2OWU2MGQ1NDNmMTM2YjUxMjM1OWRiMDQ2ODUyNDU0NWY1YmExIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwCkBAIC02MjAsMTUg
KzYyMCwxMiBAQCB2b2lkIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpob2lzdENoaWxkcmVuV2l0aE9w
ZXJhdG9yKENhbGNPcGVyYXRvciBvcCkKIAogICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlPj4gbmV3Q2hpbGRyZW47CiAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4p
IHsKLSAgICAgICAgaWYgKGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZCkgJiYgZG93bmNh
c3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKS5jYWxjT3BlcmF0b3IoKSA9PSBv
cCkgewotICAgICAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBkb3duY2FzdDxDU1NDYWxjT3BlcmF0
aW9uTm9kZT4oY2hpbGQuZ2V0KCkpLmNoaWxkcmVuKCk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8m
IGNoaWxkVG9Nb3ZlIDogY2hpbGRyZW4pCi0gICAgICAgICAgICAgICAgbmV3Q2hpbGRyZW4uYXBw
ZW5kKFdURk1vdmUoY2hpbGRUb01vdmUpKTsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIGlmIChp
czxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQpICYmIGRvd25jYXN0PENTU0NhbGNPcGVyYXRp
b25Ob2RlPihjaGlsZC5nZXQoKSkuY2FsY09wZXJhdG9yKCkgPT0gb3ApCisgICAgICAgICAgICBu
ZXdDaGlsZHJlbi5hcHBlbmRWZWN0b3IoZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNo
aWxkLmdldCgpKS5jaGlsZHJlbigpKTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgbmV3Q2hp
bGRyZW4uYXBwZW5kKFdURk1vdmUoY2hpbGQpKTsKICAgICB9Ci0gICAgCi0gICAgbmV3Q2hpbGRy
ZW4uc2hyaW5rVG9GaXQoKTsKKyAgICBBU1NFUlQobmV3Q2hpbGRyZW4uY2FwYWNpdHkoKSA9PSBu
ZXdDaGlsZHJlbi5zaXplKCkpOwogICAgIG1fY2hpbGRyZW4gPSBXVEZNb3ZlKG5ld0NoaWxkcmVu
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VySW1wbC5jcHAKaW5k
ZXggYzRlZGFhMDY0M2RiNDJhYWM0ZjQ1Nzc2ODBiMWM3OTEwNWMzZWY4My4uMjUyOWQxZWNkNTIz
MGIxZjU1MDc5MTc2ZjQ5MGE5MTBjMmYzZWE0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NQYXJzZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1BhcnNlckltcGwuY3BwCkBAIC04ODgsNyArODg4LDcgQEAgUmVmUHRyPFN0eWxlUnVs
ZUNvbnRhaW5lcj4gQ1NTUGFyc2VySW1wbDo6Y29uc3VtZUNvbnRhaW5lclJ1bGUoQ1NTUGFyc2Vy
VG9rZW5SYW4KICAgICBjb25zdW1lUnVsZUxpc3QoYmxvY2ssIFJlZ3VsYXJSdWxlTGlzdCwgWyZy
dWxlc10oUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHJ1bGUpIHsKICAgICAgICAgcnVsZXMuYXBwZW5k
KHJ1bGUpOwogICAgIH0pOwotICAgIHJ1bGVzLnNocmlua1RvRml0KCk7CisgICAgQVNTRVJUKHJ1
bGVzLmNhcGFjaXR5KCkgPT0gcnVsZXMuc2l6ZSgpKTsKIAogICAgIGlmIChtX29ic2VydmVyV3Jh
cHBlcikKICAgICAgICAgbV9vYnNlcnZlcldyYXBwZXItPm9ic2VydmVyKCkuZW5kUnVsZUJvZHko
bV9vYnNlcnZlcldyYXBwZXItPmVuZE9mZnNldChibG9jaykpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0RPTVN0cmluZ0xpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJp
bmdMaXN0LmgKaW5kZXggNjljYjJkN2Y5MzJlMDBhMjY1ZTA4ZDhmZjNiMWNiNTBjMTI3N2NlNS4u
Mjg3M2NmY2ZjYmVjM2Q4NmNmMjc1Mjg2YTdiZDkyMjI3Nzc2NWMxOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0RPTVN0cmluZ0xpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RE9NU3RyaW5nTGlzdC5oCkBAIC00MCw5ICs0MCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IERPTVN0cmluZ0xpc3QpOwogICAgIH0KIAorICAgIHN0YXRpYyBSZWY8
RE9NU3RyaW5nTGlzdD4gY3JlYXRlKFZlY3RvcjxTdHJpbmc+JiYgc3RyaW5ncykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERPTVN0cmluZ0xpc3QoV1RGTW92ZShzdHJpbmdz
KSkpOworICAgIH0KKwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5n
cy5pc0VtcHR5KCk7IH0KICAgICB2b2lkIGNsZWFyKCkgeyBtX3N0cmluZ3MuY2xlYXIoKTsgfQog
ICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYgc3RyaW5nKSB7IG1fc3RyaW5ncy5hcHBlbmQo
c3RyaW5nKTsgfQorICAgIHZvaWQgYXBwZW5kKFN0cmluZyYmIHN0cmluZykgeyBtX3N0cmluZ3Mu
YXBwZW5kKFdURk1vdmUoc3RyaW5nKSk7IH0KICAgICB2b2lkIHNvcnQoKTsKIAogICAgIC8vIElt
cGxlbWVudHMgdGhlIElETC4KQEAgLTUzLDcgKzU5LDEwIEBAIHB1YmxpYzoKICAgICBvcGVyYXRv
ciBjb25zdCBWZWN0b3I8U3RyaW5nPiYoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZ3M7IH0KIAog
cHJpdmF0ZToKLSAgICBET01TdHJpbmdMaXN0KCkgeyB9CisgICAgRE9NU3RyaW5nTGlzdCgpID0g
ZGVmYXVsdDsKKyAgICBleHBsaWNpdCBET01TdHJpbmdMaXN0KFZlY3RvcjxTdHJpbmc+JiYgc3Ry
aW5ncykKKyAgICAgICAgOiBtX3N0cmluZ3MoV1RGTW92ZShzdHJpbmdzKSkKKyAgICB7IH0KIAog
ICAgIFZlY3RvcjxTdHJpbmc+IG1fc3RyaW5nczsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRXZlbnRQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFBhdGguY3Bw
CmluZGV4IDQ2ZmI2NDVlMDUzMzc1ODFmOWZhMzQ1MjMwM2EyZmUzODBmNDZjMDYuLmVjYmNjMDBm
MzZmMDc2ZTMyMGI2YWQxNmFkMWQ5YTBiZjAzOGUyNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudFBhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFBhdGgu
Y3BwCkBAIC0yNzQsMTEgKzI3NCwxMSBAQCBWZWN0b3I8RXZlbnRUYXJnZXQqPiBFdmVudFBhdGg6
OmNvbXB1dGVQYXRoVW5jbG9zZWRUb1RhcmdldChjb25zdCBFdmVudFRhcmdldCYgdAogCiBFdmVu
dFBhdGg6OkV2ZW50UGF0aChjb25zdCBWZWN0b3I8RXZlbnRUYXJnZXQqPiYgdGFyZ2V0cykKIHsK
LSAgICBmb3IgKGF1dG8qIHRhcmdldCA6IHRhcmdldHMpIHsKKyAgICBtX3BhdGggPSB0YXJnZXRz
Lm1hcChbJl0oYXV0byogdGFyZ2V0KSB7CiAgICAgICAgIEFTU0VSVCh0YXJnZXQpOwogICAgICAg
ICBBU1NFUlQoIWlzPE5vZGU+KHRhcmdldCkpOwotICAgICAgICBtX3BhdGguYXBwZW5kKEV2ZW50
Q29udGV4dCB7IEV2ZW50Q29udGV4dDo6VHlwZTo6Tm9ybWFsLCBudWxscHRyLCB0YXJnZXQsICp0
YXJnZXRzLmJlZ2luKCksIDAgfSk7Ci0gICAgfQorICAgICAgICByZXR1cm4gRXZlbnRDb250ZXh0
IHsgRXZlbnRDb250ZXh0OjpUeXBlOjpOb3JtYWwsIG51bGxwdHIsIHRhcmdldCwgKnRhcmdldHMu
YmVnaW4oKSwgMCB9OworICAgIH0pOwogfQogCiBzdGF0aWMgTm9kZSogbW92ZU91dE9mQWxsU2hh
ZG93Um9vdHMoTm9kZSYgc3RhcnRpbmdOb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0Z1bGxzY3JlZW5NYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9GdWxsc2NyZWVu
TWFuYWdlci5jcHAKaW5kZXggZWNlNDhlNDI2Nzk3MDk1ZGE3MDlhMDRkYTY4NmE0ZmUwYmMyOTI4
Yy4uOGUxYjI2Y2FmMDQxODAzOTA3OTA4YmQ3NmVmMTI5Yjg4ZmYyNWU2MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0Z1bGxzY3JlZW5NYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRnVsbHNjcmVlbk1hbmFnZXIuY3BwCkBAIC0yNjUsOSArMjY1LDggQEAgdm9pZCBG
dWxsc2NyZWVuTWFuYWdlcjo6Y2FuY2VsRnVsbHNjcmVlbigpCiAKICAgICAvLyBUbyBhY2hpZXZl
IHRoYXQgYWltLCByZW1vdmUgYWxsIHRoZSBlbGVtZW50cyBmcm9tIHRoZSB0b3AgZG9jdW1lbnQn
cyBzdGFjayBleGNlcHQgZm9yIHRoZSBmaXJzdCBiZWZvcmUKICAgICAvLyBjYWxsaW5nIHdlYmtp
dEV4aXRGdWxsc2NyZWVuKCk6Ci0gICAgVmVjdG9yPFJlZlB0cjxFbGVtZW50Pj4gcmVwbGFjZW1l
bnRGdWxsc2NyZWVuRWxlbWVudFN0YWNrOwotICAgIHJlcGxhY2VtZW50RnVsbHNjcmVlbkVsZW1l
bnRTdGFjay5hcHBlbmQodG9wRG9jdW1lbnQuZnVsbHNjcmVlbk1hbmFnZXIoKS5mdWxsc2NyZWVu
RWxlbWVudCgpKTsKLSAgICB0b3BEb2N1bWVudC5mdWxsc2NyZWVuTWFuYWdlcigpLm1fZnVsbHNj
cmVlbkVsZW1lbnRTdGFjay5zd2FwKHJlcGxhY2VtZW50RnVsbHNjcmVlbkVsZW1lbnRTdGFjayk7
CisgICAgUmVmUHRyIGZ1bGxzY3JlbkVsZW1lbnQgPSB0b3BEb2N1bWVudC5mdWxsc2NyZWVuTWFu
YWdlcigpLmZ1bGxzY3JlZW5FbGVtZW50KCk7CisgICAgdG9wRG9jdW1lbnQuZnVsbHNjcmVlbk1h
bmFnZXIoKS5tX2Z1bGxzY3JlZW5FbGVtZW50U3RhY2sgPSBWZWN0b3IgeyBXVEZNb3ZlKGZ1bGxz
Y3JlbkVsZW1lbnQpIH07CiAKICAgICB0b3BEb2N1bWVudC5mdWxsc2NyZWVuTWFuYWdlcigpLmV4
aXRGdWxsc2NyZWVuKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTG9hZGFi
bGVTY3JpcHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0xvYWRhYmxlU2NyaXB0LmNwcAppbmRl
eCAxYmRkZTFlYjVkNmEwN2YxMTczODliOTljNzVlY2IwMWI2MGY4ODA5Li40MWY0M2NlNjY4NTAz
MGVkOWQzOWRmMDViOWZjOTIzYjEyMzk1ZGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vTG9hZGFibGVTY3JpcHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJsZVNj
cmlwdC5jcHAKQEAgLTUxLDEyICs1MSw4IEBAIHZvaWQgTG9hZGFibGVTY3JpcHQ6OnJlbW92ZUNs
aWVudChMb2FkYWJsZVNjcmlwdENsaWVudCYgY2xpZW50KQogCiB2b2lkIExvYWRhYmxlU2NyaXB0
Ojpub3RpZnlDbGllbnRGaW5pc2hlZCgpCiB7Ci0gICAgUmVmUHRyPExvYWRhYmxlU2NyaXB0PiBw
cm90ZWN0ZWRUaGlzKHRoaXMpOwotCi0gICAgVmVjdG9yPExvYWRhYmxlU2NyaXB0Q2xpZW50Kj4g
dmVjdG9yOwotICAgIGZvciAoYXV0byYgcGFpciA6IG1fY2xpZW50cykKLSAgICAgICAgdmVjdG9y
LmFwcGVuZChwYWlyLmtleSk7Ci0gICAgZm9yIChhdXRvJiBjbGllbnQgOiB2ZWN0b3IpCisgICAg
UmVmIHByb3RlY3RlZFRoaXMgeyAqdGhpcyB9OworICAgIGZvciAoYXV0byYgY2xpZW50IDogY29w
eVRvVmVjdG9yKG1fY2xpZW50cy52YWx1ZXMoKSkpCiAgICAgICAgIGNsaWVudC0+bm90aWZ5Rmlu
aXNoZWQoKnRoaXMpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFkaW9C
dXR0b25Hcm91cHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNw
cAppbmRleCA1MGY0NjMwZjg5ZWM4OTVkZjFjZTVhYjhlZDU4MTg5YjdhZmJmNjYyLi4xMjI2M2Uy
NTZlZTU2YTQ1MmMzMjI4MTI1Y2FkZDVmMTcwZjQ1ZjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9S
YWRpb0J1dHRvbkdyb3Vwcy5jcHAKQEAgLTU5LDkgKzU5LDcgQEAgaW5saW5lIGJvb2wgUmFkaW9C
dXR0b25Hcm91cDo6aXNWYWxpZCgpIGNvbnN0CiAKIFZlY3RvcjxSZWY8SFRNTElucHV0RWxlbWVu
dD4+IFJhZGlvQnV0dG9uR3JvdXA6Om1lbWJlcnMoKSBjb25zdAogewotICAgIFZlY3RvcjxSZWY8
SFRNTElucHV0RWxlbWVudD4+IHNvcnRlZE1lbWJlcnM7Ci0gICAgZm9yIChhdXRvJiBtZW1iZXIg
OiBtX21lbWJlcnMpCi0gICAgICAgIHNvcnRlZE1lbWJlcnMuYXBwZW5kKG1lbWJlcik7CisgICAg
YXV0byBzb3J0ZWRNZW1iZXJzID0gY29weVRvVmVjdG9yT2Y8UmVmPEhUTUxJbnB1dEVsZW1lbnQ+
PihtX21lbWJlcnMpOwogICAgIHN0ZDo6c29ydChzb3J0ZWRNZW1iZXJzLmJlZ2luKCksIHNvcnRl
ZE1lbWJlcnMuZW5kKCksIFtdKGF1dG8mIGEsIGF1dG8mIGIpIHsKICAgICAgICAgcmV0dXJuIGlz
X2x0KHRyZWVPcmRlcjxDb21wb3NlZFRyZWU+KGEsIGIpKTsKICAgICB9KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvRGlyZWN0b3J5RmlsZUxpc3RDcmVhdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvRGlyZWN0b3J5RmlsZUxpc3RDcmVhdG9yLmNwcAppbmRleCA5ZDNkYTE4
NTNjM2E2MzIwZmViMzE5NzUxNjJlNDM1YWU5M2ZmZGQxLi45ODVmN2E2MmYwYzFmMzk3NTU4MmVi
M2Y5Yjk4OTc1MTU2MTU2Njc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0RpcmVj
dG9yeUZpbGVMaXN0Q3JlYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9EaXJlY3Rv
cnlGaWxlTGlzdENyZWF0b3IuY3BwCkBAIC04NiwxMyArODYsMTEgQEAgc3RhdGljIFZlY3RvcjxG
aWxlSW5mb3JtYXRpb24+IGdhdGhlckZpbGVJbmZvcm1hdGlvbihjb25zdCBWZWN0b3I8RmlsZUNo
b29zZXJGaWwKIHN0YXRpYyBSZWY8RmlsZUxpc3Q+IHRvRmlsZUxpc3QoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBjb25zdCBWZWN0b3I8RmlsZUluZm9ybWF0aW9uPiYgZmlsZXMpCiB7CiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLSAgICBWZWN0b3I8UmVmPEZpbGU+PiBmaWxlT2JqZWN0czsKLSAg
ICBmb3IgKGF1dG8mIGZpbGUgOiBmaWxlcykgeworICAgIGF1dG8gZmlsZU9iamVjdHMgPSBmaWxl
cy5tYXAoW2RvY3VtZW50XShhdXRvJiBmaWxlKSB7CiAgICAgICAgIGlmIChmaWxlLnJlbGF0aXZl
UGF0aC5pc051bGwoKSkKLSAgICAgICAgICAgIGZpbGVPYmplY3RzLmFwcGVuZChGaWxlOjpjcmVh
dGUoZG9jdW1lbnQsIGZpbGUucGF0aCwgeyB9LCBmaWxlLmRpc3BsYXlOYW1lKSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGZpbGVPYmplY3RzLmFwcGVuZChGaWxlOjpjcmVhdGVXaXRoUmVs
YXRpdmVQYXRoKGRvY3VtZW50LCBmaWxlLnBhdGgsIGZpbGUucmVsYXRpdmVQYXRoKSk7Ci0gICAg
fQorICAgICAgICAgICAgcmV0dXJuIEZpbGU6OmNyZWF0ZShkb2N1bWVudCwgZmlsZS5wYXRoLCB7
IH0sIGZpbGUuZGlzcGxheU5hbWUpOworICAgICAgICByZXR1cm4gRmlsZTo6Y3JlYXRlV2l0aFJl
bGF0aXZlUGF0aChkb2N1bWVudCwgZmlsZS5wYXRoLCBmaWxlLnJlbGF0aXZlUGF0aCk7CisgICAg
fSk7CiAgICAgcmV0dXJuIEZpbGVMaXN0OjpjcmVhdGUoV1RGTW92ZShmaWxlT2JqZWN0cykpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCmluZGV4IGM0YjA4
NGQyZGU3MWZkMzE5ZmU4YzA2OWI0NWZmN2ZjY2NlZGU1ZWMuLjcyYWZlMDRlMDdmODljOGMyNGFm
M2Y4YjhjYWQzOGNlMjk2YThkMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFNlbGVjdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVs
ZW1lbnQuY3BwCkBAIC02MzQsOSArNjM0LDkgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2F2
ZUxhc3RTZWxlY3Rpb24oKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9sYXN0T25D
aGFuZ2VTZWxlY3Rpb24uY2xlYXIoKTsKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBsaXN0SXRl
bXMoKSkKLSAgICAgICAgbV9sYXN0T25DaGFuZ2VTZWxlY3Rpb24uYXBwZW5kKGlzPEhUTUxPcHRp
b25FbGVtZW50PigqZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVt
ZW50KS5zZWxlY3RlZCgpKTsKKyAgICBtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbiA9IGxpc3RJdGVt
cygpLm1hcChbXShhdXRvJiBlbGVtZW50KSB7CisgICAgICAgIHJldHVybiBpczxIVE1MT3B0aW9u
RWxlbWVudD4oKmVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVu
dCkuc2VsZWN0ZWQoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0
QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgoaW50IGluZGV4KQpAQCAtNjQ1LDEwICs2NDUsOSBA
QCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleChp
bnQgaW5kZXgpCiAKICAgICAvLyBDYWNoZSB0aGUgc2VsZWN0aW9uIHN0YXRlIHNvIHdlIGNhbiBy
ZXN0b3JlIHRoZSBvbGQgc2VsZWN0aW9uIGFzIHRoZSBuZXcKICAgICAvLyBzZWxlY3Rpb24gcGl2
b3RzIGFyb3VuZCB0aGlzIGFuY2hvciBpbmRleC4KLSAgICBtX2NhY2hlZFN0YXRlRm9yQWN0aXZl
U2VsZWN0aW9uLmNsZWFyKCk7Ci0KLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBsaXN0SXRlbXMo
KSkKLSAgICAgICAgbV9jYWNoZWRTdGF0ZUZvckFjdGl2ZVNlbGVjdGlvbi5hcHBlbmQoaXM8SFRN
TE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4o
KmVsZW1lbnQpLnNlbGVjdGVkKCkpOworICAgIG1fY2FjaGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rp
b24gPSBsaXN0SXRlbXMoKS5tYXAoW10oYXV0byYgZWxlbWVudCkgeworICAgICAgICByZXR1cm4g
aXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxl
bWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCk7CisgICAgfSk7CiB9CiAKIHZvaWQgSFRNTFNlbGVj
dEVsZW1lbnQ6OnNldEFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KGludCBpbmRleCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9JbWFnZUJpdG1hcC5jcHAKaW5kZXggMDViMjczNzlmMmQ5MjE5NDQ4OTMyYzQ2YWIzM2Iy
ZWYwMzFhZmM2YS4uNTliZmM2ZTBmMWU1OTA0M2RjYzViYmRhMmQyMmFhZTM2NWE2MTMxNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKQEAgLTExMiwxMCArMTEyLDkgQEAgdm9pZCBJ
bWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0LAogCiBWZWN0b3I8c3RkOjpvcHRpb25hbDxJbWFnZUJpdG1hcEJhY2tp
bmc+PiBJbWFnZUJpdG1hcDo6ZGV0YWNoQml0bWFwcyhWZWN0b3I8UmVmUHRyPEltYWdlQml0bWFw
Pj4mJiBiaXRtYXBzKQogewotICAgIFZlY3RvcjxzdGQ6Om9wdGlvbmFsPEltYWdlQml0bWFwQmFj
a2luZz4+IGJ1ZmZlcnM7Ci0gICAgZm9yIChhdXRvJiBiaXRtYXAgOiBiaXRtYXBzKQotICAgICAg
ICBidWZmZXJzLmFwcGVuZChiaXRtYXAtPnRha2VJbWFnZUJpdG1hcEJhY2tpbmcoKSk7Ci0gICAg
cmV0dXJuIGJ1ZmZlcnM7CisgICAgcmV0dXJuIFdURjo6bWFwKFdURk1vdmUoYml0bWFwcyksIFtd
KGF1dG8mJiBiaXRtYXApIHsKKyAgICAgICAgcmV0dXJuIGJpdG1hcC0+dGFrZUltYWdlQml0bWFw
QmFja2luZygpOworICAgIH0pOwogfQogCiB2b2lkIEltYWdlQml0bWFwOjpjcmVhdGVQcm9taXNl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEltYWdlQml0
bWFwOjpTb3VyY2UmJiBzb3VyY2UsIEltYWdlQml0bWFwT3B0aW9ucyYmIG9wdGlvbnMsIGludCBz
eCwgaW50IHN5LCBpbnQgc3csIGludCBzaCwgSW1hZ2VCaXRtYXA6OlByb21pc2UmJiBwcm9taXNl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcAppbmRleCA2MTE0NjAyNzdmNjY3OWE0OTFlMGY5ODMxNzc5NzMwMDdl
YmJkZGM2Li5mNzMzNjRmMzg2MGMyNmI5MzY2MThjNGY3ZTFhMTc4MjVlOGQ1MDEwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmNwcApAQCAtMzAyMSw5ICszMDIxLDggQEAgc3RkOjpvcHRpb25hbDxWZWN0b3I8UmVm
UHRyPFdlYkdMU2hhZGVyPj4+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEF0dGFjaGUK
ICAgICB9OwogICAgIFZlY3RvcjxSZWZQdHI8V2ViR0xTaGFkZXI+PiBzaGFkZXJPYmplY3RzOwog
ICAgIGZvciAoYXV0byBzaGFkZXJUeXBlIDogc2hhZGVyVHlwZXMpIHsKLSAgICAgICAgUmVmUHRy
PFdlYkdMU2hhZGVyPiBzaGFkZXIgPSBwcm9ncmFtLmdldEF0dGFjaGVkU2hhZGVyKHNoYWRlclR5
cGUpOwotICAgICAgICBpZiAoc2hhZGVyKQotICAgICAgICAgICAgc2hhZGVyT2JqZWN0cy5hcHBl
bmQoc2hhZGVyKTsKKyAgICAgICAgaWYgKFJlZlB0ciBzaGFkZXIgPSBwcm9ncmFtLmdldEF0dGFj
aGVkU2hhZGVyKHNoYWRlclR5cGUpKQorICAgICAgICAgICAgc2hhZGVyT2JqZWN0cy5hcHBlbmQo
V1RGTW92ZShzaGFkZXIpKTsKICAgICB9CiAgICAgcmV0dXJuIHNoYWRlck9iamVjdHM7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJz
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2Vy
LmNwcAppbmRleCA4YWNiNjhhZjQ1NTFhMzhiNzk5YzcxM2FhNzVkYzBmNzkxOTAwNGJlLi4wYTVl
ZDc4ZjQ1OGY5OWI2YmM3ZmMzNzFkZjk0Y2ZlOTI1YTRkNDgwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAKQEAgLTg1LDEy
ICs4NSwxMSBAQCBzdGF0aWMgU3RyaW5nVmlldyBleHRyYWN0Q2hhcnNldChjb25zdCBTdHJpbmcm
IHZhbHVlKQogCiBib29sIEhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6cHJvY2Vzc01ldGEoSFRNTFRv
a2VuJiB0b2tlbikKIHsKLSAgICBBdHRyaWJ1dGVMaXN0IGF0dHJpYnV0ZXM7Ci0gICAgZm9yIChh
dXRvJiBhdHRyaWJ1dGUgOiB0b2tlbi5hdHRyaWJ1dGVzKCkpIHsKKyAgICBhdXRvIGF0dHJpYnV0
ZXMgPSB0b2tlbi5hdHRyaWJ1dGVzKCkubWFwKFtdKGF1dG8mIGF0dHJpYnV0ZSkgewogICAgICAg
ICBTdHJpbmcgYXR0cmlidXRlTmFtZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZThCaXRJZlBvc3NpYmxl
KGF0dHJpYnV0ZS5uYW1lKTsKICAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0gU3RyaW5n
SW1wbDo6Y3JlYXRlOEJpdElmUG9zc2libGUoYXR0cmlidXRlLnZhbHVlKTsKLSAgICAgICAgYXR0
cmlidXRlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVmFs
dWUpKTsKLSAgICB9CisgICAgICAgIHJldHVybiBzdGQ6OnBhaXIgeyBXVEZNb3ZlKGF0dHJpYnV0
ZU5hbWUpLCBXVEZNb3ZlKGF0dHJpYnV0ZVZhbHVlKSB9OworICAgIH0pOwogCiAgICAgbV9lbmNv
ZGluZyA9IGVuY29kaW5nRnJvbU1ldGFBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwogICAgIHJldHVy
biBtX2VuY29kaW5nLmlzVmFsaWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IDZiNzFiZWY4MWE3ZTI4NDcxZWVmZDdjNTMxNTJhOGEw
YTgyZDJkYjUuLmExZjE2N2NiMDgzYzk5ODQzNjE4MzQxMTgwMjlmMjg1ZTQxYzAwMDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcApAQCAtMjIw
MCwxMSArMjIwMCwxMCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NoYXJhY3RlcihB
dG9tSFRNTFRva2VuJiYgdG9rZW4pCiAvLyBGcm9tIHRoZSBzdHJpbmcgNDA4OTk2MTAxMCwgY3Jl
YXRlcyBhIGxpbmsgb2YgdGhlIGZvcm0gPGEgaHJlZj0idGVsOjQwODk5NjEwMTAiPjQwODk5NjEw
MTA8L2E+IGFuZCBpbnNlcnRzIGl0Lgogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6Omluc2VydFBob25l
TnVtYmVyTGluayhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBWZWN0b3I8QXR0cmlidXRl
PiBhdHRyaWJ1dGVzOwotICAgIGF0dHJpYnV0ZXMuYXBwZW5kKEF0dHJpYnV0ZShIVE1MTmFtZXM6
OmhyZWZBdHRyLCBtYWtlU3RyaW5nKCJ0ZWw6Il9zLCBzdHJpbmcpKSk7CisgICAgQXR0cmlidXRl
IGF0dHJpYnV0ZShIVE1MTmFtZXM6OmhyZWZBdHRyLCBtYWtlU3RyaW5nKCJ0ZWw6Il9zLCBzdHJp
bmcpKTsKIAogICAgIGNvbnN0IEF0b21TdHJpbmcmIGFUYWdMb2NhbE5hbWUgPSBhVGFnLT5sb2Nh
bE5hbWUoKTsKLSAgICBBdG9tSFRNTFRva2VuIGFTdGFydFRva2VuKEhUTUxUb2tlbjo6U3RhcnRU
YWcsIGFUYWdMb2NhbE5hbWUsIFdURk1vdmUoYXR0cmlidXRlcykpOworICAgIEF0b21IVE1MVG9r
ZW4gYVN0YXJ0VG9rZW4oSFRNTFRva2VuOjpTdGFydFRhZywgYVRhZ0xvY2FsTmFtZSwgeyBXVEZN
b3ZlKGF0dHJpYnV0ZSkgfSk7CiAgICAgQXRvbUhUTUxUb2tlbiBhRW5kVG9rZW4oSFRNTFRva2Vu
OjpFbmRUYWcsIGFUYWdMb2NhbE5hbWUpOwogCiAgICAgcHJvY2Vzc1N0YXJ0VGFnKFdURk1vdmUo
YVN0YXJ0VG9rZW4pKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1Rl
eHREb2N1bWVudFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9UZXh0RG9j
dW1lbnRQYXJzZXIuY3BwCmluZGV4IDRkYTk1OWY0MGZlOWVhMzM3NDdjZDIzODhjZWI3OWY2ZDcy
ZGI3ZWQuLjQ3MDZmMjZlODQ0MDllZTgxM2NkMTNiYzVmNGUwYWNjZjY3NGE4NjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNwcApAQCAt
NTEsOSArNTEsOCBAQCB2b2lkIFRleHREb2N1bWVudFBhcnNlcjo6aW5zZXJ0RmFrZVByZUVsZW1l
bnQoKQogICAgIC8vIFdlIGNyZWF0ZSBhIGZha2UgdG9rZW4gYW5kIGdpdmUgaXQgdG8gdGhlIHRy
ZWUgYnVpbGRlciByYXRoZXIgdGhhbgogICAgIC8vIHNlbmRpbmcgZmFrZSBieXRlcyB0aHJvdWdo
IHRoZSBmcm9udC1lbmQgb2YgdGhlIHBhcnNlciB0byBhdm9pZAogICAgIC8vIGRpc3RydWJpbmcg
dGhlIGxpbmUvY29sdW1uIG51bWJlciBjYWxjdWxhdGlvbnMuCi0gICAgVmVjdG9yPEF0dHJpYnV0
ZT4gYXR0cmlidXRlczsKLSAgICBhdHRyaWJ1dGVzLmFwcGVuZChBdHRyaWJ1dGUoc3R5bGVBdHRy
LCAid29yZC13cmFwOiBicmVhay13b3JkOyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IikpOwotICAg
IEF0b21IVE1MVG9rZW4gZmFrZVByZShIVE1MVG9rZW46OlN0YXJ0VGFnLCBwcmVUYWctPmxvY2Fs
TmFtZSgpLCBXVEZNb3ZlKGF0dHJpYnV0ZXMpKTsKKyAgICBBdHRyaWJ1dGUgYXR0cmlidXRlKHN0
eWxlQXR0ciwgIndvcmQtd3JhcDogYnJlYWstd29yZDsgd2hpdGUtc3BhY2U6IHByZS13cmFwOyIp
OworICAgIEF0b21IVE1MVG9rZW4gZmFrZVByZShIVE1MVG9rZW46OlN0YXJ0VGFnLCBwcmVUYWct
PmxvY2FsTmFtZSgpLCB7IFdURk1vdmUoYXR0cmlidXRlKSB9KTsKICAgICB0cmVlQnVpbGRlcigp
LmNvbnN0cnVjdFRyZWUoV1RGTW92ZShmYWtlUHJlKSk7CiAKICAgICAvLyBOb3JtYWxseSB3ZSB3
b3VsZCBza2lwIHRoZSBmaXJzdCBcbiBhZnRlciBhIDxwcmU+IGVsZW1lbnQsIGJ1dCB3ZSBkb24n
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0NvbnRlbnRGaWx0ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0NvbnRlbnRGaWx0ZXIuY3BwCmluZGV4IDI4OWYzMmE2Mzcw
ZDNjZGM5NThkNjM2ZTU4NzBjZjc2M2UxMzczNWYuLmZkOWU5NWFkMDdhMTNlZWU3YTEyYWI3MDVi
ZTU3MDFmMzIzYzk4OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Db250ZW50
RmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29udGVudEZpbHRlci5jcHAK
QEAgLTY3LDExICs2Nyw5IEBAIFZlY3RvcjxDb250ZW50RmlsdGVyOjpUeXBlPiYgQ29udGVudEZp
bHRlcjo6dHlwZXMoKQogCiBzdGQ6OnVuaXF1ZV9wdHI8Q29udGVudEZpbHRlcj4gQ29udGVudEZp
bHRlcjo6Y3JlYXRlKENvbnRlbnRGaWx0ZXJDbGllbnQmIGNsaWVudCkKIHsKLSAgICBDb250YWlu
ZXIgZmlsdGVyczsKLSAgICBmb3IgKGF1dG8mIHR5cGUgOiB0eXBlcygpKSB7Ci0gICAgICAgIGF1
dG8gZmlsdGVyID0gdHlwZS5jcmVhdGUoKTsKLSAgICAgICAgZmlsdGVycy5hcHBlbmQoV1RGTW92
ZShmaWx0ZXIpKTsKLSAgICB9CisgICAgYXV0byBmaWx0ZXJzID0gdHlwZXMoKS5tYXAoW10oYXV0
byYgdHlwZSkgeworICAgICAgICByZXR1cm4gdHlwZS5jcmVhdGUoKTsKKyAgICB9KTsKIAogICAg
IGlmIChmaWx0ZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZU1hbmlm
ZXN0UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlTWFuaWZlc3RQYXJzZXIuY3BwCmluZGV4IGI4N2RkODM1MDYwN2MyNGJlMjU2ZTM0NDFi
ZWQyZDM3NjdlMDk1NTIuLjRhMTE0NDI1ZTExNmQyYzQyZDE5MDM5MjNlZGY4ODYzODNkOGYwNjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlTWFuaWZlc3RQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuY3BwCkBAIC0xODAsNyArMTgwLDcgQEAg
c3RkOjpvcHRpb25hbDxBcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3Q+IHBhcnNlQXBwbGljYXRpb25D
YWNoZU1hbmlmZXN0KGNvbnN0IFVSTCYKICAgICAgICAgICAgICAgICBpZiAoIWVxdWFsSWdub3Jp
bmdBU0NJSUNhc2UodXJsLnByb3RvY29sKCksIG1hbmlmZXN0VVJMLnByb3RvY29sKCkpKQogICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgICAgIG1hbmlmZXN0Lm9u
bGluZUFsbG93ZWRVUkxzLmFwcGVuZCh1cmwpOworICAgICAgICAgICAgICAgIG1hbmlmZXN0Lm9u
bGluZUFsbG93ZWRVUkxzLmFwcGVuZChXVEZNb3ZlKHVybCkpOwogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1Jlc2l6ZU9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVz
aXplT2JzZXJ2ZXIuY3BwCmluZGV4IDkzZGExYTQ1NjA0ZTQ1MmE3NzU5M2UxOGQxZjQ3MzM2MzQ5
OTQzNjcuLjRmZmQ2OWQwMzQ0MTA5YjQ3YWZiNWU1MTk3YWEzZmRmZDQ5N2RlZDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuY3BwCkBAIC0xMjUsMTEgKzEyNSwxMCBAQCBzaXpl
X3QgUmVzaXplT2JzZXJ2ZXI6OmdhdGhlck9ic2VydmF0aW9ucyhzaXplX3QgZGVlcGVyVGhhbikK
IAogdm9pZCBSZXNpemVPYnNlcnZlcjo6ZGVsaXZlck9ic2VydmF0aW9ucygpCiB7Ci0gICAgVmVj
dG9yPFJlZjxSZXNpemVPYnNlcnZlckVudHJ5Pj4gZW50cmllczsKLSAgICBmb3IgKGNvbnN0IGF1
dG8mIG9ic2VydmF0aW9uIDogbV9hY3RpdmVPYnNlcnZhdGlvbnMpIHsKKyAgICBhdXRvIGVudHJp
ZXMgPSBtX2FjdGl2ZU9ic2VydmF0aW9ucy5tYXAoW10oYXV0byYgb2JzZXJ2YXRpb24pIHsKICAg
ICAgICAgQVNTRVJUKG9ic2VydmF0aW9uLT50YXJnZXQoKSk7Ci0gICAgICAgIGVudHJpZXMuYXBw
ZW5kKFJlc2l6ZU9ic2VydmVyRW50cnk6OmNyZWF0ZShvYnNlcnZhdGlvbi0+dGFyZ2V0KCksIG9i
c2VydmF0aW9uLT5jb21wdXRlQ29udGVudFJlY3QoKSwgb2JzZXJ2YXRpb24tPmJvcmRlckJveFNp
emUoKSwgb2JzZXJ2YXRpb24tPmNvbnRlbnRCb3hTaXplKCkpKTsKLSAgICB9CisgICAgICAgIHJl
dHVybiBSZXNpemVPYnNlcnZlckVudHJ5OjpjcmVhdGUob2JzZXJ2YXRpb24tPnRhcmdldCgpLCBv
YnNlcnZhdGlvbi0+Y29tcHV0ZUNvbnRlbnRSZWN0KCksIG9ic2VydmF0aW9uLT5ib3JkZXJCb3hT
aXplKCksIG9ic2VydmF0aW9uLT5jb250ZW50Qm94U2l6ZSgpKTsKKyAgICB9KTsKICAgICBtX2Fj
dGl2ZU9ic2VydmF0aW9ucy5jbGVhcigpOwogICAgIGF1dG8gYWN0aXZlT2JzZXJ2YXRpb25UYXJn
ZXRzID0gc3RkOjpleGNoYW5nZShtX2FjdGl2ZU9ic2VydmF0aW9uVGFyZ2V0cywgeyB9KTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKaW5kZXggMzg3ZDUxOWFlNTE3MmQ2ODBh
NWIyODg0M2JiZThmZjk5NmM2YjMzNS4uMDk5YjkxZDUxNTI0NTVhZTc3N2U1ZmYyNTZiMTU3MjY5
MDQzM2VkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCkBAIC0zNjEsMTcg
KzM2MSwxNiBAQCBzdGF0aWMgYm9vbCBpbml0aWFsaXplSW5kaWNhdG9yKFRleHRJbmRpY2F0b3JE
YXRhJiBkYXRhLCBGcmFtZSYgZnJhbWUsIGNvbnN0IFNpbQogICAgICAgICB0ZXh0Qm91bmRpbmdS
ZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLnVuaXRlKHRleHRSZWN0SW5Sb290Vmlld0Nvb3JkaW5h
dGVzKTsKICAgICB9CiAKLSAgICBWZWN0b3I8RmxvYXRSZWN0PiB0ZXh0UmVjdHNJbkJvdW5kaW5n
UmVjdENvb3JkaW5hdGVzOwotICAgIGZvciAoYXV0byByZWN0IDogdGV4dFJlY3RzSW5Sb290Vmll
d0Nvb3JkaW5hdGVzKSB7CisgICAgYXV0byB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5h
dGVzID0gdGV4dFJlY3RzSW5Sb290Vmlld0Nvb3JkaW5hdGVzLm1hcChbJl0oYXV0byByZWN0KSB7
CiAgICAgICAgIHJlY3QubW92ZUJ5KC10ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5h
dGVzLmxvY2F0aW9uKCkpOwotICAgICAgICB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5h
dGVzLmFwcGVuZChyZWN0KTsKLSAgICB9CisgICAgICAgIHJldHVybiByZWN0OworICAgIH0pOwog
CiAgICAgLy8gU3RvcmUgdGhlIHNlbGVjdGlvbiByZWN0IGluIHdpbmRvdyBjb29yZGluYXRlcywg
dG8gYmUgdXNlZCBzdWJzZXF1ZW50bHkKICAgICAvLyB0byBkZXRlcm1pbmUgaWYgdGhlIGluZGlj
YXRvciBhbmQgc2VsZWN0aW9uIHN0aWxsIHByZWNpc2VseSBvdmVybGFwLgogICAgIGRhdGEuc2Vs
ZWN0aW9uUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNU
b1Jvb3RWaWV3KGVuY2xvc2luZ0ludFJlY3QoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uQm91
bmRzKEZyYW1lU2VsZWN0aW9uOjpDbGlwVG9WaXNpYmxlQ29udGVudDo6Tm8pKSk7Ci0gICAgZGF0
YS50ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gdGV4dEJvdW5kaW5nUmVj
dEluUm9vdFZpZXdDb29yZGluYXRlczsKLSAgICBkYXRhLnRleHRSZWN0c0luQm91bmRpbmdSZWN0
Q29vcmRpbmF0ZXMgPSB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzOworICAgIGRh
dGEudGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9IFdURk1vdmUodGV4dEJv
dW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyk7CisgICAgZGF0YS50ZXh0UmVjdHNJbkJv
dW5kaW5nUmVjdENvb3JkaW5hdGVzID0gV1RGTW92ZSh0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENv
b3JkaW5hdGVzKTsKIAogICAgIHJldHVybiB0YWtlU25hcHNob3RzKGRhdGEsIGZyYW1lLCBlbmNs
b3NpbmdJbnRSZWN0KHRleHRCb3VuZGluZ1JlY3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMpLCBjbGlw
cGVkVGV4dFJlY3RzSW5Eb2N1bWVudENvb3JkaW5hdGVzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCmluZGV4IDUyZjYyMDEyMmI4
NWM3NTAzZTdkYTZhNjgzNWJmMzc1NjE0OTY3ZjQuLjhhMmJhNGNmZmEyNmRjY2JiZDFlNzVlZTUw
MTEzYTg2NmJlNWEyZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRl
bnRTZWN1cml0eVBvbGljeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVu
dFNlY3VyaXR5UG9saWN5LmNwcApAQCAtMzQzLDE4ICszNDMsMTIgQEAgYm9vbCBDb250ZW50U2Vj
dXJpdHlQb2xpY3k6OmFsbFBvbGljaWVzQWxsb3coVmlvbGF0ZWREaXJlY3RpdmVDYWxsYmFjayYm
IGNhbGxiYWMKIHN0YXRpYyBWZWN0b3I8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJz
ZVN1YlJlc291cmNlSW50ZWdyaXR5SW50b0RpZ2VzdHMoY29uc3QgU3RyaW5nJiBzdWJSZXNvdXJj
ZUludGVncml0eSkKIHsKICAgICBhdXRvIGVuY29kZWREaWdlc3RzID0gcGFyc2VJbnRlZ3JpdHlN
ZXRhZGF0YShzdWJSZXNvdXJjZUludGVncml0eSk7Ci0gICAgVmVjdG9yPFJlc291cmNlQ3J5cHRv
Z3JhcGhpY0RpZ2VzdD4gZGVjb2RlZERpZ2VzdHM7Ci0KLSAgICBpZiAoIWVuY29kZWREaWdlc3Rz
Lmhhc192YWx1ZSgpKQorICAgIGlmICghZW5jb2RlZERpZ2VzdHMpCiAgICAgICAgIHJldHVybiB7
IH07CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGVuY29kZWREaWdlc3QgOiBlbmNvZGVkRGlnZXN0
cy52YWx1ZSgpKSB7Ci0gICAgICAgIGF1dG8gZGVjb2RlZERpZ2VzdCA9IGRlY29kZUVuY29kZWRS
ZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QoZW5jb2RlZERpZ2VzdCk7Ci0gICAgICAgIGlmIChk
ZWNvZGVkRGlnZXN0Lmhhc192YWx1ZSgpKQotICAgICAgICAgICAgZGVjb2RlZERpZ2VzdHMuYXBw
ZW5kKGRlY29kZWREaWdlc3QudmFsdWUoKSk7Ci0gICAgICAgIH0KLQotICAgIHJldHVybiBkZWNv
ZGVkRGlnZXN0czsKKyAgICByZXR1cm4gV1RGOjpjb21wYWN0TWFwKCplbmNvZGVkRGlnZXN0cywg
W10oYXV0byYgZW5jb2RlZERpZ2VzdCkgeworICAgICAgICByZXR1cm4gZGVjb2RlRW5jb2RlZFJl
c291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChlbmNvZGVkRGlnZXN0KTsKKyAgICB9KTsKIH0KIAog
c3RhdGljIFZlY3RvcjxDb250ZW50U2VjdXJpdHlQb2xpY3lIYXNoPiBnZW5lcmF0ZUhhc2hlc0Zv
ckNvbnRlbnQoY29uc3QgU3RyaW5nVmlldyBjb250ZW50LCBPcHRpb25TZXQ8Q29udGVudFNlY3Vy
aXR5UG9saWN5SGFzaEFsZ29yaXRobT4gYWxnb3JpdGhtcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0ZpbGVDaG9vc2VyLmNwcAppbmRleCA4ZTRlY2U3MDUzYWU4ZTk4ZWZlY2NmZTc2NTJmODZjZDI5
NzQwNDA0Li43ODQyOGM0YWJkMzFlOTliMTBhYWU0OGZiZWNjMmE1YjhkOWY1OGZjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwCkBAIC01Myw5ICs1Myw3IEBAIHZvaWQg
RmlsZUNob29zZXI6OmludmFsaWRhdGUoKQogCiB2b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxl
KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCiB7Ci0gICAgVmVjdG9yPFN0cmluZz4gZmlsZW5hbWVz
OwotICAgIGZpbGVuYW1lcy5hcHBlbmQoZmlsZW5hbWUpOwotICAgIGNob29zZUZpbGVzKGZpbGVu
YW1lcyk7CisgICAgY2hvb3NlRmlsZXMoeyBmaWxlbmFtZSB9KTsKIH0KIAogdm9pZCBGaWxlQ2hv
b3Nlcjo6Y2hvb3NlRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHJlcGxhY2VtZW50TmFtZXMpCkBAIC02OCw5ICs2NiwxMCBAQCB2b2lk
IEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVz
LCBjb25zdCBWZWN0b3I8U3RyaQogICAgICAgICByZXR1cm47CiAKICAgICBWZWN0b3I8RmlsZUNo
b29zZXJGaWxlSW5mbz4gZmlsZXM7CisgICAgZmlsZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShm
aWxlbmFtZXMuc2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IGZpbGVuYW1l
cy5zaXplKCk7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIGZpbGVzLmFwcGVuZCh7IGZpbGVuYW1l
c1tpXSwgaSA8IHJlcGxhY2VtZW50TmFtZXMuc2l6ZSgpID8gcmVwbGFjZW1lbnROYW1lc1tpXSA6
IG51bGxTdHJpbmcoKSwgeyB9IH0pOwotICAgIG1fY2xpZW50LT5maWxlc0Nob3NlbihmaWxlcyk7
CisgICAgICAgIGZpbGVzLnVuY2hlY2tlZEFwcGVuZCh7IGZpbGVuYW1lc1tpXSwgaSA8IHJlcGxh
Y2VtZW50TmFtZXMuc2l6ZSgpID8gcmVwbGFjZW1lbnROYW1lc1tpXSA6IG51bGxTdHJpbmcoKSwg
eyB9IH0pOworICAgIG1fY2xpZW50LT5maWxlc0Nob3NlbihXVEZNb3ZlKGZpbGVzKSk7CiB9CiAK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtODYsMTkgKzg1LDE5IEBAIHZvaWQgRmlsZUNo
b29zZXI6OmNob29zZU1lZGlhRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywg
Y29uc3QgU3RyaW5nCiAgICAgaWYgKCFtX2NsaWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
VmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+IGZpbGVzOwotICAgIGZvciAoYXV0byYgZmlsZW5h
bWUgOiBmaWxlbmFtZXMpCi0gICAgICAgIGZpbGVzLmFwcGVuZCh7IGZpbGVuYW1lLCB7IH0sIHsg
fSB9KTsKLSAgICBtX2NsaWVudC0+ZmlsZXNDaG9zZW4oZmlsZXMsIGRpc3BsYXlTdHJpbmcsIGlj
b24pOworICAgIGF1dG8gZmlsZXMgPSBmaWxlbmFtZXMubWFwKFtdKGF1dG8mIGZpbGVuYW1lKSB7
CisgICAgICAgIHJldHVybiBGaWxlQ2hvb3NlckZpbGVJbmZvIHsgZmlsZW5hbWUsIHsgfSwgeyB9
IH07CisgICAgfSk7CisgICAgbV9jbGllbnQtPmZpbGVzQ2hvc2VuKFdURk1vdmUoZmlsZXMpLCBk
aXNwbGF5U3RyaW5nLCBpY29uKTsKIH0KIAogI2VuZGlmCiAKIHZvaWQgRmlsZUNob29zZXI6OmNo
b29zZUZpbGVzKGNvbnN0IFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJbmZvPiYgZmlsZXMpCiB7Ci0g
ICAgVmVjdG9yPFN0cmluZz4gcGF0aHM7Ci0gICAgZm9yIChhdXRvJiBmaWxlIDogZmlsZXMpCi0g
ICAgICAgIHBhdGhzLmFwcGVuZChmaWxlLnBhdGgpOworICAgIGF1dG8gcGF0aHMgPSBmaWxlcy5t
YXAoW10oYXV0byYgZmlsZSkgeworICAgICAgICByZXR1cm4gZmlsZS5wYXRoOworICAgIH0pOwog
CiAgICAgLy8gRklYTUU6IFRoaXMgaXMgaW5lbGVnYW50LiBXZSBzaG91bGQgbm90IGJlIGxvb2tp
bmcgYXQgc2V0dGluZ3MgaGVyZS4KICAgICBpZiAobV9zZXR0aW5ncy5zZWxlY3RlZEZpbGVzID09
IHBhdGhzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKaW5kZXggZDA5
ZjEwNTJhMGYzMWVlOTcwNjExMDEzYjM5MzVmYjUzMDk1NTA5Ni4uZjg3YjZhNGY2M2IyNmEyMTg4
MjA2ZTkzOGFhNTg1Nzk3YWIzOTVlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2hhcmVkQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRC
dWZmZXIuY3BwCkBAIC0yMDYsOSArMjA2LDcgQEAgdm9pZCBGcmFnbWVudGVkU2hhcmVkQnVmZmVy
OjphcHBlbmQoY29uc3QgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlciYgZGF0YSkKIHZvaWQgRnJhZ21l
bnRlZFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5n
dGgpCiB7CiAgICAgQVNTRVJUKCFtX2NvbnRpZ3VvdXMpOwotICAgIFZlY3Rvcjx1aW50OF90PiB2
ZWN0b3I7Ci0gICAgdmVjdG9yLmFwcGVuZChkYXRhLCBsZW5ndGgpOwotICAgIG1fc2VnbWVudHMu
YXBwZW5kKHsgbV9zaXplLCBEYXRhU2VnbWVudDo6Y3JlYXRlKFdURk1vdmUodmVjdG9yKSkgfSk7
CisgICAgbV9zZWdtZW50cy5hcHBlbmQoeyBtX3NpemUsIERhdGFTZWdtZW50OjpjcmVhdGUoVmVj
dG9yIHsgZGF0YSwgbGVuZ3RoIH0pIH0pOwogICAgIG1fc2l6ZSArPSBsZW5ndGg7CiAgICAgQVNT
RVJUKGludGVybmFsbHlDb25zaXN0ZW50KCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVGhyZWFkU2FmZURhdGFCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1RocmVhZFNhZmVEYXRhQnVmZmVyLmgKaW5kZXggZDM5N2QyMjdkZmM1MzRhZDBjZjU4NzAy
YmUxY2E1ODAyNDk5YTBiYi4uYjUwNmU5MTQ1ZDVjNzE3YWY0ZjM2NzU3ZDg3ZDAwMjJjNDllNTI4
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkU2FmZURhdGFCdWZm
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRTYWZlRGF0YUJ1ZmZlci5o
CkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8d3RmL0hhc2hl
ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIApAQCAtMTQzLDQgKzE0NCwxNiBAQCBib29sIFRocmVhZFNhZmVEYXRhQnVm
ZmVyOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVGhyZWFkU2FmZURhdGFCdWZmZXImIHJlc3Vs
dAogICAgIHJldHVybiB0cnVlOwogfQogCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIs
IGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiBidWZmZXIpCit7CisgICAgYXV0byogZGF0YSA9
IGJ1ZmZlci5kYXRhKCk7CisgICAgaWYgKCFkYXRhKSB7CisgICAgICAgIGFkZChoYXNoZXIsIHRy
dWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFkZChoYXNoZXIsIGZhbHNlKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IGJ1ZmZlci5zaXplKCk7IGkgPCBzaXplOyArK2kp
CisgICAgICAgIGFkZChoYXNoZXIsIGRhdGFbaV0pOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtl
cm5lbFByb2Nlc3Nvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0RT
UEtlcm5lbFByb2Nlc3Nvci5jcHAKaW5kZXggMWNmMzljYWNmMzAyNDUwOGU4ZDEyZTg2NDVjNTA4
Njc3MjE5NDM1Yi4uZDhjMzRmYTM3Njk1MDcyNTI1NDc0MThmZTVlODQ0ZmZlMmMzMDg3ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9EU1BLZXJuZWxQcm9j
ZXNzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2Vy
bmVsUHJvY2Vzc29yLmNwcApAQCAtNTYsOCArNTYsOSBAQCB2b2lkIEF1ZGlvRFNQS2VybmVsUHJv
Y2Vzc29yOjppbml0aWFsaXplKCkKICAgICAgICAgRGlzYWJsZU1hbGxvY1Jlc3RyaWN0aW9uc0Zv
ckN1cnJlbnRUaHJlYWRTY29wZSBkaXNhYmxlTWFsbG9jUmVzdHJpY3Rpb25zOwogCiAgICAgICAg
IC8vIENyZWF0ZSBwcm9jZXNzaW5nIGtlcm5lbHMsIG9uZSBwZXIgY2hhbm5lbC4KKyAgICAgICAg
bV9rZXJuZWxzLnJlc2VydmVDYXBhY2l0eShtX2tlcm5lbHMuY2FwYWNpdHkoKSArIG51bWJlck9m
Q2hhbm5lbHMoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNo
YW5uZWxzKCk7ICsraSkKLSAgICAgICAgICAgIG1fa2VybmVscy5hcHBlbmQoY3JlYXRlS2VybmVs
KCkpOworICAgICAgICAgICAgbV9rZXJuZWxzLnVuY2hlY2tlZEFwcGVuZChjcmVhdGVLZXJuZWwo
KSk7CiAgICAgfQogICAgIG1faW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgIG1faGFzSnVzdFJlc2V0
ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlv
UmVzYW1wbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUmVzYW1w
bGVyLmNwcAppbmRleCBkZTUwOGNjNmVmNGE1YjAxYmQ0ZWIyMjQ3NDViN2VmMjgyODQwZjhlLi43
NDY5Y2U0ZGUzZjNjMTg4ODkyOGY1NDk3ZDEyY2U1NmRiNmU2ZDJkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1Jlc2FtcGxlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9SZXNhbXBsZXIuY3BwCkBAIC00Miw4ICs0Miw5
IEBAIEF1ZGlvUmVzYW1wbGVyOjpBdWRpb1Jlc2FtcGxlcigpCiAKIEF1ZGlvUmVzYW1wbGVyOjpB
dWRpb1Jlc2FtcGxlcih1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKQogeworICAgIG1fa2VybmVs
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bWJlck9mQ2hhbm5lbHMpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyArK2kpCi0gICAgICAgIG1fa2VybmVs
cy5hcHBlbmQobWFrZVVuaXF1ZTxBdWRpb1Jlc2FtcGxlcktlcm5lbD4odGhpcykpOworICAgICAg
ICBtX2tlcm5lbHMudW5jaGVja2VkQXBwZW5kKG1ha2VVbmlxdWU8QXVkaW9SZXNhbXBsZXJLZXJu
ZWw+KHRoaXMpKTsKIAogICAgIG1fc291cmNlQnVzID0gQXVkaW9CdXM6OmNyZWF0ZShudW1iZXJP
ZkNoYW5uZWxzLCAwLCBmYWxzZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcAppbmRleCA5ZjMxODFj
ZmJiNDAyMjc3Nzk5NjIzYjliZmRkY2RkNDk1OWMwMGIwLi5jMWM3YTU3NzVhZmZkNTEzOTI1YjU3
ZGRiMTU2NzZjNzg1OWE3OWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAKQEAgLTYwLDkgKzYwLDEw
IEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpzZXROdW1iZXJPZkNoYW5uZWxzKHVu
c2lnbmVkIG51bWJlck9mQ2hhbm5lbHMpCiAgICAgaWYgKG1fcHJlRGVsYXlCdWZmZXJzLnNpemUo
KSA9PSBudW1iZXJPZkNoYW5uZWxzKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3ByZURlbGF5
QnVmZmVycy5jbGVhcigpOworICAgIG1fcHJlRGVsYXlCdWZmZXJzLnNocmluaygwKTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKQogICAgICAgICBt
X3ByZURlbGF5QnVmZmVycy5hcHBlbmQobWFrZVVuaXF1ZTxBdWRpb0Zsb2F0QXJyYXk+KE1heFBy
ZURlbGF5RnJhbWVzKSk7CisgICAgbV9wcmVEZWxheUJ1ZmZlcnMuc2hyaW5rVG9GaXQoKTsKIH0K
IAogdm9pZCBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnNldFByZURlbGF5VGltZShmbG9hdCBw
cmVEZWxheVRpbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9N
dWx0aUNoYW5uZWxSZXNhbXBsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
TXVsdGlDaGFubmVsUmVzYW1wbGVyLmNwcAppbmRleCBiOTY2ZmEwNmNkMzBlYjM0ZGY3MWZjZmJk
ZTdjMTY1ODIzMTExMjFmLi4xNzAyM2I2NDI2MWJkZmQzNzVlZTA5ZmUyOTZiM2JkYTg4MjdmMmU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NdWx0aUNoYW5uZWxS
ZXNhbXBsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL011bHRpQ2hh
bm5lbFJlc2FtcGxlci5jcHAKQEAgLTUzLDggKzUzLDkgQEAgTXVsdGlDaGFubmVsUmVzYW1wbGVy
OjpNdWx0aUNoYW5uZWxSZXNhbXBsZXIoZG91YmxlIHNjYWxlRmFjdG9yLCB1bnNpZ25lZCBudW1i
ZXIKICAgICB9CiAKICAgICAvLyBDcmVhdGUgZWFjaCBjaGFubmVsJ3MgcmVzYW1wbGVyLgorICAg
IG1fa2VybmVscy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bWJlck9mQ2hhbm5lbHMpOwogICAg
IGZvciAodW5zaWduZWQgY2hhbm5lbEluZGV4ID0gMDsgY2hhbm5lbEluZGV4IDwgbnVtYmVyT2ZD
aGFubmVsczsgKytjaGFubmVsSW5kZXgpCi0gICAgICAgIG1fa2VybmVscy5hcHBlbmQobWFrZVVu
aXF1ZTxTaW5jUmVzYW1wbGVyPihzY2FsZUZhY3RvciwgcmVxdWVzdEZyYW1lcywgc3RkOjpiaW5k
KCZNdWx0aUNoYW5uZWxSZXNhbXBsZXI6OnByb3ZpZGVJbnB1dEZvckNoYW5uZWwsIHRoaXMsIHN0
ZDo6cGxhY2Vob2xkZXJzOjpfMSwgc3RkOjpwbGFjZWhvbGRlcnM6Ol8yLCBjaGFubmVsSW5kZXgp
KSk7CisgICAgICAgIG1fa2VybmVscy51bmNoZWNrZWRBcHBlbmQobWFrZVVuaXF1ZTxTaW5jUmVz
YW1wbGVyPihzY2FsZUZhY3RvciwgcmVxdWVzdEZyYW1lcywgc3RkOjpiaW5kKCZNdWx0aUNoYW5u
ZWxSZXNhbXBsZXI6OnByb3ZpZGVJbnB1dEZvckNoYW5uZWwsIHRoaXMsIHN0ZDo6cGxhY2Vob2xk
ZXJzOjpfMSwgc3RkOjpwbGFjZWhvbGRlcnM6Ol8yLCBjaGFubmVsSW5kZXgpKSk7CiB9CiAKIE11
bHRpQ2hhbm5lbFJlc2FtcGxlcjo6fk11bHRpQ2hhbm5lbFJlc2FtcGxlcigpID0gZGVmYXVsdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lv
bk1vZGVsTWVkaWFFbGVtZW50Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxh
eWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0KaW5kZXggMDVlYTIxMTFlYjVkNDUzY2Iy
OGQ4ZTc3ZWYzY2JmNWYzNTY3MTk4OS4uZmEzMGFmZGUzYjFlMWUzNmU4NjFhZWNiZDlmYmU4Yzdm
MDkwMzU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0KQEAgLTUzNCwxNCAr
NTM0LDEyIEBAIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRpYVNlbGVjCiAgICAgVmVjdG9yPE1lZGlhU2VsZWN0
aW9uT3B0aW9uPiBsZWdpYmxlT3B0aW9uczsKIAogICAgIGlmICghbV9tZWRpYUVsZW1lbnQgfHwg
IW1fbWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGxlZ2li
bGVPcHRpb25zOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgYXV0byYgY2FwdGlvblByZWZl
cmVuY2VzID0gbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT5ncm91cCgpLmVuc3Vy
ZUNhcHRpb25QcmVmZXJlbmNlcygpOwotCi0gICAgZm9yIChhdXRvJiB0cmFjayA6IG1fbGVnaWJs
ZVRyYWNrc0Zvck1lbnUpCi0gICAgICAgIGxlZ2libGVPcHRpb25zLmFwcGVuZChjYXB0aW9uUHJl
ZmVyZW5jZXMubWVkaWFTZWxlY3Rpb25PcHRpb25Gb3JUcmFjayh0cmFjay5nZXQoKSkpOwotCi0g
ICAgcmV0dXJuIGxlZ2libGVPcHRpb25zOworICAgIHJldHVybiBtX2xlZ2libGVUcmFja3NGb3JN
ZW51Lm1hcChbJl0oYXV0byYgdHJhY2spIHsKKyAgICAgICAgcmV0dXJuIGNhcHRpb25QcmVmZXJl
bmNlcy5tZWRpYVNlbGVjdGlvbk9wdGlvbkZvclRyYWNrKHRyYWNrLmdldCgpKTsKKyAgICB9KTsK
IH0KIAogdWludDY0X3QgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVN
ZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ2FtZXBhZC9tYWMvRHVhbHNob2NrM0hJREdhbWVwYWQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvRHVhbHNob2NrM0hJREdhbWVwYWQuY3BwCmluZGV4IDZj
NDBlOGI4ODkyODczZmYwNzIwNjE4Y2ZlODM5NjRjODBlYzM0MWUuLmMwZjUxODFiYzQ0YjFiZGNl
YmE2OWI4Y2I2YTM0YTllYTEyN2RmNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dhbWVwYWQvbWFjL0R1YWxzaG9jazNISURHYW1lcGFkLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9EdWFsc2hvY2szSElER2FtZXBhZC5jcHAKQEAgLTQz
LDEyICs0MywxMCBAQCBEdWFsc2hvY2szSElER2FtZXBhZDo6RHVhbHNob2NrM0hJREdhbWVwYWQo
SElERGV2aWNlJiYgZGV2aWNlLCB1bnNpZ25lZCBpbmRleCkKIAogICAgIG1fbWFwcGluZyA9IHN0
YW5kYXJkR2FtZXBhZE1hcHBpbmdTdHJpbmcoKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbnVtYmVyT2ZTdGFuZGFyZEdhbWVwYWRCdXR0b25zV2l0aEhvbWVCdXR0b247ICsraSkKLSAg
ICAgICAgbV9idXR0b25WYWx1ZXMuYXBwZW5kKDAuMCk7CisgICAgbV9idXR0b25WYWx1ZXMgPSBW
ZWN0b3IobnVtYmVyT2ZTdGFuZGFyZEdhbWVwYWRCdXR0b25zV2l0aEhvbWVCdXR0b24sIFNoYXJl
ZEdhbWVwYWRWYWx1ZSB7IDAuMCB9KTsKIAotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYXhpc0Nv
dW50ID0gNDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF4aXNDb3VudDsgKytpKQotICAg
ICAgICBtX2F4aXNWYWx1ZXMuYXBwZW5kKDAuMCk7CisgICAgY29uc3RleHByIHNpemVfdCBheGlz
Q291bnQgPSA0OworICAgIG1fYXhpc1ZhbHVlcyA9IFZlY3RvcihheGlzQ291bnQsIFNoYXJlZEdh
bWVwYWRWYWx1ZSB7IDAuMCB9KTsKIAogICAgIGF1dG8gaW5wdXRFbGVtZW50cyA9IGhpZERldmlj
ZSgpLnVuaXF1ZUlucHV0RWxlbWVudHNJbkRldmljZVRyZWVPcmRlcigpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9Mb2dpdGVjaEdhbWVwYWQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvTG9naXRlY2hHYW1lcGFkLmNw
cAppbmRleCA2NzE0M2ZiOTk1YmEyYzNlNjhkZDIxMWQxNjViZTYyMGNlZjc4OWVmLi43ODBkNGEz
ZjllYTI1M2JiZDdlNzJjNGZiZmNkMDVmZWUwMzIxYThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9Mb2dpdGVjaEdhbWVwYWQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL0xvZ2l0ZWNoR2FtZXBhZC5jcHAKQEAgLTQz
LDEyICs0MywxMCBAQCBMb2dpdGVjaEdhbWVwYWQ6OkxvZ2l0ZWNoR2FtZXBhZChISUREZXZpY2Um
JiBkZXZpY2UsIHVuc2lnbmVkIGluZGV4KQogCiAgICAgbV9tYXBwaW5nID0gc3RhbmRhcmRHYW1l
cGFkTWFwcGluZ1N0cmluZygpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJP
ZlN0YW5kYXJkR2FtZXBhZEJ1dHRvbnNXaXRob3V0SG9tZUJ1dHRvbjsgKytpKQotICAgICAgICBt
X2J1dHRvblZhbHVlcy5hcHBlbmQoMC4wKTsKKyAgICBtX2J1dHRvblZhbHVlcyA9IFZlY3Rvcihu
dW1iZXJPZlN0YW5kYXJkR2FtZXBhZEJ1dHRvbnNXaXRob3V0SG9tZUJ1dHRvbiwgU2hhcmVkR2Ft
ZXBhZFZhbHVlIHsgMC4wIH0pOwogCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBheGlzQ291bnQg
PSA0OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXhpc0NvdW50OyArK2kpCi0gICAgICAg
IG1fYXhpc1ZhbHVlcy5hcHBlbmQoMC4wKTsKKyAgICBjb25zdGV4cHIgc2l6ZV90IGF4aXNDb3Vu
dCA9IDQ7CisgICAgbV9heGlzVmFsdWVzID0gVmVjdG9yKGF4aXNDb3VudCwgU2hhcmVkR2FtZXBh
ZFZhbHVlIHsgMC4wIH0pOwogCiAgICAgYXV0byBpbnB1dEVsZW1lbnRzID0gaGlkRGV2aWNlKCku
dW5pcXVlSW5wdXRFbGVtZW50c0luRGV2aWNlVHJlZU9yZGVyKCk7CiAKQEAgLTU5LDExICs1Nywx
MiBAQCBMb2dpdGVjaEdhbWVwYWQ6OkxvZ2l0ZWNoR2FtZXBhZChISUREZXZpY2UmJiBkZXZpY2Us
IHVuc2lnbmVkIGluZGV4KQogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGlucHV0RWxlbWVudHMp
IHsKICAgICAgICAgc3dpdGNoIChlbGVtZW50LmZ1bGxVc2FnZSgpKSB7CiAgICAgICAgIGNhc2Ug
aGlkSGF0c3dpdGNoRnVsbFVzYWdlOiB7Ci0gICAgICAgICAgICBWZWN0b3I8U2hhcmVkR2FtZXBh
ZFZhbHVlPiBoYXRzd2l0Y2hWYWx1ZXM7Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBw
ZW5kKG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVy
VG9wXSk7Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFsdWVz
WyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyUmlnaHRdKTsKLSAgICAgICAg
ICAgIGhhdHN3aXRjaFZhbHVlcy5hcHBlbmQobV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFk
QnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJCb3R0b21dKTsKLSAgICAgICAgICAgIGhhdHN3aXRjaFZh
bHVlcy5hcHBlbmQobV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVm
dENsdXN0ZXJMZWZ0XSk7CisgICAgICAgICAgICBhdXRvIGhhdHN3aXRjaFZhbHVlcyA9IFZlY3Rv
cjxTaGFyZWRHYW1lcGFkVmFsdWU+Ojpmcm9tKAorICAgICAgICAgICAgICAgIG1fYnV0dG9uVmFs
dWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyVG9wXSwKKyAgICAgICAg
ICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1
c3RlclJpZ2h0XSwKKyAgICAgICAgICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVw
YWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlckJvdHRvbV0sCisgICAgICAgICAgICAgICAgbV9idXR0
b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJMZWZ0XQorICAg
ICAgICAgICAgKTsKIAogICAgICAgICAgICAgbV9lbGVtZW50TWFwLnNldChlbGVtZW50LmNvb2tp
ZSgpLCBtYWtlVW5pcXVlPEhJREdhbWVwYWRIYXRzd2l0Y2g+KGVsZW1lbnQsIFdURk1vdmUoaGF0
c3dpdGNoVmFsdWVzKSkpOwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9TdGFkaWFISURHYW1lcGFkLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL1N0YWRpYUhJREdhbWVwYWQuY3BwCmluZGV4
IDBhOTRlNTYyMzNhMjA0NDY0MWYxMDBmMDU2NDRkNTc1YWRiYzllNzMuLjM3NTIxMzQ0NjRjNzg1
NjdjYjZiZTE4ZjAwZWE1N2Y4OWFiN2JkMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dhbWVwYWQvbWFjL1N0YWRpYUhJREdhbWVwYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL1N0YWRpYUhJREdhbWVwYWQuY3BwCkBAIC00MSwxMiAr
NDEsMTAgQEAgU3RhZGlhSElER2FtZXBhZDo6U3RhZGlhSElER2FtZXBhZChISUREZXZpY2UmJiBk
ZXZpY2UsIHVuc2lnbmVkIGluZGV4KQogCiAgICAgbV9tYXBwaW5nID0gc3RhbmRhcmRHYW1lcGFk
TWFwcGluZ1N0cmluZygpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxOTsgKytpKQot
ICAgICAgICBtX2J1dHRvblZhbHVlcy5hcHBlbmQoMC4wKTsKKyAgICBtX2J1dHRvblZhbHVlcyA9
IFZlY3RvcigxOSwgU2hhcmVkR2FtZXBhZFZhbHVlIHsgMC4wIH0pOwogCi0gICAgc3RhdGljIGNv
bnN0IHNpemVfdCBheGlzQ291bnQgPSA0OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXhp
c0NvdW50OyArK2kpCi0gICAgICAgIG1fYXhpc1ZhbHVlcy5hcHBlbmQoMC4wKTsKKyAgICBjb25z
dGV4cHIgc2l6ZV90IGF4aXNDb3VudCA9IDQ7CisgICAgbV9heGlzVmFsdWVzID0gVmVjdG9yKGF4
aXNDb3VudCwgU2hhcmVkR2FtZXBhZFZhbHVlIHsgMC4wIH0pOwogCiAgICAgYXV0byBpbnB1dEVs
ZW1lbnRzID0gaGlkRGV2aWNlKCkudW5pcXVlSW5wdXRFbGVtZW50c0luRGV2aWNlVHJlZU9yZGVy
KCk7CiAKQEAgLTcwLDExICs2OCwxMiBAQCBTdGFkaWFISURHYW1lcGFkOjpTdGFkaWFISURHYW1l
cGFkKEhJRERldmljZSYmIGRldmljZSwgdW5zaWduZWQgaW5kZXgpCiAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICBjYXNlIGhpZEhhdHN3aXRjaEZ1bGxVc2FnZTogewotICAgICAgICAgICAg
VmVjdG9yPFNoYXJlZEdhbWVwYWRWYWx1ZT4gaGF0c3dpdGNoVmFsdWVzOwotICAgICAgICAgICAg
aGF0c3dpdGNoVmFsdWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0
b25Sb2xlOjpMZWZ0Q2x1c3RlclRvcF0pOwotICAgICAgICAgICAgaGF0c3dpdGNoVmFsdWVzLmFw
cGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3Rl
clJpZ2h0XSk7Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFs
dWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyQm90dG9tXSk7Ci0gICAg
ICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2Ft
ZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyTGVmdF0pOworICAgICAgICAgICAgYXV0byBoYXRz
d2l0Y2hWYWx1ZXMgPSBWZWN0b3I8U2hhcmVkR2FtZXBhZFZhbHVlPjo6ZnJvbSgKKyAgICAgICAg
ICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1
c3RlclRvcF0sCisgICAgICAgICAgICAgICAgbV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFk
QnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJSaWdodF0sCisgICAgICAgICAgICAgICAgbV9idXR0b25W
YWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJCb3R0b21dLAorICAg
ICAgICAgICAgICAgIG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6Okxl
ZnRDbHVzdGVyTGVmdF0KKyAgICAgICAgICAgICk7CiAKICAgICAgICAgICAgIG1fZWxlbWVudE1h
cC5zZXQoZWxlbWVudC5jb29raWUoKSwgbWFrZVVuaXF1ZTxISURHYW1lcGFkSGF0c3dpdGNoPihl
bGVtZW50LCBXVEZNb3ZlKGhhdHN3aXRjaFZhbHVlcykpKTsKICAgICAgICAgICAgIGJyZWFrOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNw
cAppbmRleCAxZmVlMjlhZTVmNzE5YzRlNTU0YTJjN2U3MGNiNzBmMDFmOWIyMDAyLi43MjRmYjE3
YzMzZjRiY2E0Njg4OWM4M2JjNTU4NDhmZDcyNzBjMzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcApAQCAtNzYzLDExICs3NjMs
OSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXI6OmFkZFJlcGFpbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVwYWludFJlY3QpCiAgICAgRmxvYXRSZWN0IGxhcmdlc3RSZXBhaW50UmVjdChGbG9hdFBvaW50
KCksIG1fc2l6ZSk7CiAgICAgbGFyZ2VzdFJlcGFpbnRSZWN0LmludGVyc2VjdChyZXBhaW50UmVj
dCk7CiAgICAgUmVwYWludE1hcDo6aXRlcmF0b3IgcmVwYWludEl0ID0gcmVwYWludFJlY3RNYXAo
KS5maW5kKHRoaXMpOwotICAgIGlmIChyZXBhaW50SXQgPT0gcmVwYWludFJlY3RNYXAoKS5lbmQo
KSkgewotICAgICAgICBWZWN0b3I8RmxvYXRSZWN0PiByZXBhaW50UmVjdHM7Ci0gICAgICAgIHJl
cGFpbnRSZWN0cy5hcHBlbmQobGFyZ2VzdFJlcGFpbnRSZWN0KTsKLSAgICAgICAgcmVwYWludFJl
Y3RNYXAoKS5zZXQodGhpcywgcmVwYWludFJlY3RzKTsKLSAgICB9IGVsc2UgeworICAgIGlmIChy
ZXBhaW50SXQgPT0gcmVwYWludFJlY3RNYXAoKS5lbmQoKSkKKyAgICAgICAgcmVwYWludFJlY3RN
YXAoKS5zZXQodGhpcywgVmVjdG9yIHsgV1RGTW92ZShsYXJnZXN0UmVwYWludFJlY3QpIH0pOwor
ICAgIGVsc2UgewogICAgICAgICBWZWN0b3I8RmxvYXRSZWN0PiYgcmVwYWludFJlY3RzID0gcmVw
YWludEl0LT52YWx1ZTsKICAgICAgICAgcmVwYWludFJlY3RzLmFwcGVuZChsYXJnZXN0UmVwYWlu
dFJlY3QpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BhdGhVdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGF0aFV0aWxpdGllcy5jcHAKaW5kZXggYjk3OTlhNGQxMDYxZWQyMGExYjUwZWQ1MDY4NjUxYzVm
ZWE0NjZhNC4uNzdkYzk4MzVkNTYxMmY2NjgxNzI0ZjdiNzZjYmExMDM5NmM3YzM4OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5jcHAK
QEAgLTI5MCwxNyArMjkwLDE0IEBAIHN0YXRpYyBWZWN0b3I8RmxvYXRQb2ludEdyYXBoOjpQb2x5
Z29uPiBwb2x5Z29uc0ZvclJlY3QoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mCiAKIFZlY3RvcjxQ
YXRoPiBQYXRoVXRpbGl0aWVzOjpwYXRoc1dpdGhTaHJpbmtXcmFwcGVkUmVjdHMoY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCByYWRpdXMpCiB7Ci0gICAgVmVjdG9yPFBhdGg+
IHBhdGhzOwotCiAgICAgaWYgKHJlY3RzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHBhdGhz
OworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgaWYgKHJlY3RzLnNpemUoKSA+IDIwKSB7CiAg
ICAgICAgIFBhdGggcGF0aDsKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiByZWN0IDogcmVjdHMp
CiAgICAgICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QsIEZsb2F0U2l6ZShyYWRpdXMs
IHJhZGl1cykpOwotICAgICAgICBwYXRocy5hcHBlbmQocGF0aCk7Ci0gICAgICAgIHJldHVybiBw
YXRoczsKKyAgICAgICAgcmV0dXJuIHsgV1RGTW92ZShwYXRoKSB9OwogICAgIH0KIAogICAgIEZs
b2F0UG9pbnRHcmFwaCBncmFwaDsKQEAgLTMwOSwxMCArMzA2LDEwIEBAIFZlY3RvcjxQYXRoPiBQ
YXRoVXRpbGl0aWVzOjpwYXRoc1dpdGhTaHJpbmtXcmFwcGVkUmVjdHMoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mCiAgICAgICAgIFBhdGggcGF0aDsKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBy
ZWN0IDogcmVjdHMpCiAgICAgICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QsIEZsb2F0
U2l6ZShyYWRpdXMsIHJhZGl1cykpOwotICAgICAgICBwYXRocy5hcHBlbmQocGF0aCk7Ci0gICAg
ICAgIHJldHVybiBwYXRoczsKKyAgICAgICAgcmV0dXJuIHsgV1RGTW92ZShwYXRoKSB9OwogICAg
IH0KIAorICAgIFZlY3RvcjxQYXRoPiBwYXRoczsKICAgICBmb3IgKGF1dG8mIHBvbHkgOiBwb2x5
cykgewogICAgICAgICBQYXRoIHBhdGg7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBwb2x5LnNpemUoKTsgKytpKSB7CkBAIC0zNDQsNyArMzQxLDcgQEAgVmVjdG9yPFBhdGg+IFBh
dGhVdGlsaXRpZXM6OnBhdGhzV2l0aFNocmlua1dyYXBwZWRSZWN0cyhjb25zdCBWZWN0b3I8Rmxv
YXRSZWN0PiYKICAgICAgICAgICAgIHBhdGguYWRkQXJjVG8oKmZyb21FZGdlLnNlY29uZCwgKnRv
RWRnZS5maXJzdCArIHRvT2Zmc2V0LCBjbGFtcGVkUmFkaXVzKTsKICAgICAgICAgfQogICAgICAg
ICBwYXRoLmNsb3NlU3VicGF0aCgpOwotICAgICAgICBwYXRocy5hcHBlbmQocGF0aCk7CisgICAg
ICAgIHBhdGhzLmFwcGVuZChXVEZNb3ZlKHBhdGgpKTsKICAgICB9CiAgICAgcmV0dXJuIHBhdGhz
OwogfQpAQCAtNTQzLDEzICs1NDAsMTQgQEAgUGF0aCBQYXRoVXRpbGl0aWVzOjpwYXRoV2l0aFNo
cmlua1dyYXBwZWRSZWN0c0Zvck91dGxpbmUoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4KICAgICBi
b3R0b21MZWZ0UmFkaXVzID0gZmlyc3RMaW5lUmFkaWkuYm90dG9tTGVmdCgpOwogICAgIHRvcFJp
Z2h0UmFkaXVzID0gbGFzdExpbmVSYWRpaS50b3BSaWdodCgpOwogICAgIGJvdHRvbVJpZ2h0UmFk
aXVzID0gbGFzdExpbmVSYWRpaS5ib3R0b21SaWdodCgpOwotICAgIFZlY3RvcjxGbG9hdFBvaW50
PiBjb3JuZXJzOwogICAgIC8vIHBoeXNpY2FsIHRvcExlZnQvdG9wUmlnaHQvYm90dG9tUmlnaHQv
Ym90dG9tTGVmdAogICAgIGF1dG8gaXNIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUod3JpdGluZ01vZGUpOwotICAgIGNvcm5lcnMuYXBwZW5kKGZpcnN0TGluZVJlY3QubWluWE1p
bllDb3JuZXIoKSk7Ci0gICAgY29ybmVycy5hcHBlbmQoaXNIb3Jpem9udGFsID8gbGFzdExpbmVS
ZWN0Lm1heFhNaW5ZQ29ybmVyKCkgOiBmaXJzdExpbmVSZWN0Lm1heFhNaW5ZQ29ybmVyKCkpOwot
ICAgIGNvcm5lcnMuYXBwZW5kKGxhc3RMaW5lUmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKLSAgICBj
b3JuZXJzLmFwcGVuZChpc0hvcml6b250YWwgPyBmaXJzdExpbmVSZWN0Lm1pblhNYXhZQ29ybmVy
KCkgOiBsYXN0TGluZVJlY3QubWluWE1heFlDb3JuZXIoKSk7CisgICAgYXV0byBjb3JuZXJzID0g
VmVjdG9yPEZsb2F0UG9pbnQ+Ojpmcm9tKAorICAgICAgICBmaXJzdExpbmVSZWN0Lm1pblhNaW5Z
Q29ybmVyKCksCisgICAgICAgIGlzSG9yaXpvbnRhbCA/IGxhc3RMaW5lUmVjdC5tYXhYTWluWUNv
cm5lcigpIDogZmlyc3RMaW5lUmVjdC5tYXhYTWluWUNvcm5lcigpLAorICAgICAgICBsYXN0TGlu
ZVJlY3QubWF4WE1heFlDb3JuZXIoKSwKKyAgICAgICAgaXNIb3Jpem9udGFsID8gZmlyc3RMaW5l
UmVjdC5taW5YTWF4WUNvcm5lcigpIDogbGFzdExpbmVSZWN0Lm1pblhNYXhZQ29ybmVyKCkKKyAg
ICApOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvbHkuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgYXV0byBtb3ZlT3JBZGRMaW5lVG8gPSBbaSwgJnBhdGhdIChjb25zdCBGbG9hdFBv
aW50JiBzdGFydFBvaW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcAppbmRleCA1NDk5ZjM3YTdmMzY0NmJkNWYz
OTVhNDhiMDlkOTQxMWQ0YzliNjY0Li4wNGNiZTRkMjdmMTkwYjdiMjdiOWNhN2U5OGE5YzQ3MTcz
ZDJmODliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3Vy
Y2VCdWZmZXJQcml2YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcApAQCAtMjE2LDEwICsyMTYsOSBAQCB2b2lkIFNvdXJj
ZUJ1ZmZlclByaXZhdGU6OmJ1ZmZlcmVkU2FtcGxlc0ZvclRyYWNrSWQoY29uc3QgQXRvbVN0cmlu
ZyYgdHJhY2tJZCwgQwogICAgIGlmICghdHJhY2tCdWZmZXIpCiAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKHsgfSk7CiAKLSAgICBWZWN0b3I8U3RyaW5nPiBzYW1wbGVEZXNjcmlwdGlvbnM7Ci0g
ICAgZm9yIChhdXRvJiBwYWlyIDogdHJhY2tCdWZmZXItPnNhbXBsZXMuZGVjb2RlT3JkZXIoKSkK
LSAgICAgICAgc2FtcGxlRGVzY3JpcHRpb25zLmFwcGVuZCh0b1N0cmluZygqcGFpci5zZWNvbmQp
KTsKLQorICAgIGF1dG8gc2FtcGxlRGVzY3JpcHRpb25zID0gV1RGOjptYXAodHJhY2tCdWZmZXIt
PnNhbXBsZXMuZGVjb2RlT3JkZXIoKSwgW10oYXV0byYgZW50cnkpIHsKKyAgICAgICAgcmV0dXJu
IHRvU3RyaW5nKCplbnRyeS5zZWNvbmQpOworICAgIH0pOwogICAgIGNvbXBsZXRpb25IYW5kbGVy
KFdURk1vdmUoc2FtcGxlRGVzY3JpcHRpb25zKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWlu
Zy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RN
RmFpclBsYXlTdHJlYW1pbmcuY3BwCmluZGV4IDhiMDRmOWJlOTZjMzZlMGEyNjIxODBhMjVlYTM3
NDU5NjJiM2Q3ZDUuLmM1NDYxNDYyM2I4N2VjMDg5NjFmMWQ0NDIwZjk2MDFmMTZhNmFiNGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9D
RE1GYWlyUGxheVN0cmVhbWluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcApAQCAtMjAxLDkgKzIw
MSw3IEBAIFJlZlB0cjxGcmFnbWVudGVkU2hhcmVkQnVmZmVyPiBDRE1Qcml2YXRlRmFpclBsYXlT
dHJlYW1pbmc6OnNhbml0aXplU2tkKGNvbnN0IEZyCiBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxSZWY8
RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4+PiBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OmV4
dHJhY3RLZXlJRHNTa2QoY29uc3QgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogewog
ICAgIC8vIEluIHRoZSAnc2tkJyBzY2hlbWUsIHRoZSBpbml0IGRhdGEgaXMgdGhlIGtleSBJRC4K
LSAgICBWZWN0b3I8UmVmPEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+PiBrZXlJRHM7Ci0gICAga2V5
SURzLmFwcGVuZChidWZmZXIuY29weSgpKTsKLSAgICByZXR1cm4ga2V5SURzOworICAgIHJldHVy
biBWZWN0b3IgeyBidWZmZXIuY29weSgpIH07CiB9CiAKIHN0YXRpYyBjb25zdCBNZW1vcnlDb21w
YWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4mIHZhbGlkSW5pdERhdGFU
eXBlcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3Rh
bmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCmluZGV4IGQ2MzYxMmZhYTA1MzcwYTAzOTcz
YTFlMmQ1NmMxODY4YTJmOTkxNjAuLjk2MjVmYTk1MDNlN2JlYmM3MTlmYzRiMzdhNjNjMzhkNzQ1
MDMwOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUlu
c3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCkBAIC0xNDk0LDcgKzE0OTQsNyBAQCB2
b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6dXBkYXRlS2V5
U3RhdHVzZXMoc3RkOjpvcHRpb25hbAogICAgICAgICB9CiAgICAgfQogCi0gICAgbV9rZXlTdGF0
dXNlcy5zd2FwKGtleVN0YXR1c2VzKTsKKyAgICBtX2tleVN0YXR1c2VzID0gV1RGTW92ZShrZXlT
dGF0dXNlcyk7CiAKICAgICBtX2luc3RhbmNlLT5zZXNzaW9uS2V5U3RhdHVzZXNDaGFuZ2VkKCp0
aGlzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVjb2RlckFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1t
CmluZGV4IDU2M2FmMTkyNGQ5YWYzNTllOTMwZWY2NGJhZTMyM2ZjMDQxZGU4N2EuLmFkN2Y0NTEw
MWMwNmExODg4YzAwOGZhZWQ0YTkxOTA1NjEzODI5M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVjb2RlckFWRk9i
akMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvSW1hZ2VEZWNvZGVyQVZGT2JqQy5tbQpAQCAtNTM1LDEzICs1MzUsMTAgQEAgVmVjdG9y
PEltYWdlRGVjb2Rlcjo6RnJhbWVJbmZvPiBJbWFnZURlY29kZXJBVkZPYmpDOjpmcmFtZUluZm9z
KCkgY29uc3QKICAgICBpZiAobV9zYW1wbGVEYXRhLmVtcHR5KCkpCiAgICAgICAgIHJldHVybiB7
IH07CiAKLSAgICBWZWN0b3I8SW1hZ2VEZWNvZGVyOjpGcmFtZUluZm8+IGluZm9zOwotICAgIGZv
ciAoYXV0byYgc2FtcGxlIDogbV9zYW1wbGVEYXRhLnByZXNlbnRhdGlvbk9yZGVyKCkpIHsKKyAg
ICByZXR1cm4gV1RGOjptYXAobV9zYW1wbGVEYXRhLnByZXNlbnRhdGlvbk9yZGVyKCksIFtdKGF1
dG8mIHNhbXBsZSkgewogICAgICAgICBhdXRvKiBpbWFnZVNhbXBsZSA9IChJbWFnZURlY29kZXJB
VkZPYmpDU2FtcGxlKilzYW1wbGUuc2Vjb25kLmdldCgpOwotICAgICAgICBpbmZvcy5hcHBlbmQo
eyBpbWFnZVNhbXBsZS0+aGFzQWxwaGEoKSwgU2Vjb25kcyhpbWFnZVNhbXBsZS0+ZHVyYXRpb24o
KS50b0RvdWJsZSgpKX0pOwotICAgIH0KLQotICAgIHJldHVybiBpbmZvczsKKyAgICAgICAgcmV0
dXJuIEltYWdlRGVjb2Rlcjo6RnJhbWVJbmZvIHsgaW1hZ2VTYW1wbGUtPmhhc0FscGhhKCksIFNl
Y29uZHMoaW1hZ2VTYW1wbGUtPmR1cmF0aW9uKCkudG9Eb3VibGUoKSkgfTsKKyAgICB9KTsKIH0K
IAogYm9vbCBJbWFnZURlY29kZXJBVkZPYmpDOjpmcmFtZUFsbG93U3Vic2FtcGxpbmdBdEluZGV4
KHNpemVfdCBpbmRleCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclBhcnNlckFWRk9iakMubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3Vy
Y2VCdWZmZXJQYXJzZXJBVkZPYmpDLm1tCmluZGV4IGFhMTU4NDA0YjEwZTQ0NGFmNmU1ZWRkYzhk
YWQ2YmE5NmVkNWNiMjIuLmU2MWIxNDdmNjNjNWY0NTcyNzVmNjA1MDNlMzdhOGI1MmQxOGUzYTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL1NvdXJjZUJ1ZmZlclBhcnNlckFWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUGFyc2VyQVZG
T2JqQy5tbQpAQCAtMjk3LDE2ICsyOTcsMTQgQEAgdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJBVkZP
YmpDOjpkaWRQYXJzZVN0cmVhbURhdGFBc0Fzc2V0KEFWQXNzZXQqIGFzc2V0KQogCiAgICAgICAg
ICAgICBpZiAoW3RyYWNrIGhhc01lZGlhQ2hhcmFjdGVyaXN0aWM6QVZNZWRpYUNoYXJhY3Rlcmlz
dGljVmlzdWFsXSkgewogICAgICAgICAgICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6
OkluaXRpYWxpemF0aW9uU2VnbWVudDo6VmlkZW9UcmFja0luZm9ybWF0aW9uIGluZm87Ci0gICAg
ICAgICAgICAgICAgYXV0byB2aWRlb1RyYWNrID0gVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakM6OmNyZWF0ZSh0cmFjayk7Ci0gICAgICAgICAgICAgICAgaW5mby50cmFjayA9IHZp
ZGVvVHJhY2suY29weVJlZigpOworICAgICAgICAgICAgICAgIGluZm8udHJhY2sgPSBWaWRlb1Ry
YWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6Y3JlYXRlKHRyYWNrKTsKICAgICAgICAgICAg
ICAgICBpbmZvLmRlc2NyaXB0aW9uID0gTWVkaWFEZXNjcmlwdGlvbkFWRk9iakM6OmNyZWF0ZSh0
cmFjayk7Ci0gICAgICAgICAgICAgICAgc2VnbWVudC52aWRlb1RyYWNrcy5hcHBlbmQoaW5mbyk7
CisgICAgICAgICAgICAgICAgc2VnbWVudC52aWRlb1RyYWNrcy5hcHBlbmQoV1RGTW92ZShpbmZv
KSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKFt0cmFjayBoYXNNZWRpYUNoYXJhY3RlcmlzdGlj
OkFWTWVkaWFDaGFyYWN0ZXJpc3RpY0F1ZGlibGVdKSB7CiAgICAgICAgICAgICAgICAgU291cmNl
QnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25TZWdtZW50OjpBdWRpb1RyYWNrSW5m
b3JtYXRpb24gaW5mbzsKLSAgICAgICAgICAgICAgICBhdXRvIGF1ZGlvVHJhY2sgPSBBdWRpb1Ry
YWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6Y3JlYXRlKHRyYWNrKTsKLSAgICAgICAgICAg
ICAgICBpbmZvLnRyYWNrID0gYXVkaW9UcmFjay5jb3B5UmVmKCk7CisgICAgICAgICAgICAgICAg
aW5mby50cmFjayA9IEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjcmVhdGUo
dHJhY2spOwogICAgICAgICAgICAgICAgIGluZm8uZGVzY3JpcHRpb24gPSBNZWRpYURlc2NyaXB0
aW9uQVZGT2JqQzo6Y3JlYXRlKHRyYWNrKTsKLSAgICAgICAgICAgICAgICBzZWdtZW50LmF1ZGlv
VHJhY2tzLmFwcGVuZChpbmZvKTsKKyAgICAgICAgICAgICAgICBzZWdtZW50LmF1ZGlvVHJhY2tz
LmFwcGVuZChXVEZNb3ZlKGluZm8pKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8g
RklYTUUoMTI1MTYxKSAgICA6IEFkZCBUZXh0VHJhY2sgc3VwcG9ydApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29h
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3Jt
RGF0YUNvY29hLm1tCmluZGV4IDg1NDIxZTNkZTcwOWNlMTU5YzQ5NGI0MGZiOGQxYWQyMzU5M2Mz
YmIuLjk3OTViNmVjNTU3ZTU0ZTIyMWM4YjQ2ZGQ3MjQ5MDA2MjRkYjZiNmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFD
b2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
UGxhdGZvcm1EYXRhQ29jb2EubW0KQEAgLTY4LDExICs2OCwxMSBAQCBWZWN0b3I8Rm9udFBsYXRm
b3JtRGF0YTo6Rm9udFZhcmlhdGlvbkF4aXM+IEZvbnRQbGF0Zm9ybURhdGE6OnZhcmlhdGlvbkF4
ZXMoU2hvdQogICAgIGlmICghcGxhdGZvcm1Gb250KQogICAgICAgICByZXR1cm4geyB9OwogICAg
IAotICAgIFZlY3RvcjxGb250VmFyaWF0aW9uQXhpcz4gcmVzdWx0czsKLSAgICBmb3IgKGF1dG8m
IFt0YWcsIHZhbHVlc10gOiBkZWZhdWx0VmFyaWF0aW9uVmFsdWVzKHBsYXRmb3JtRm9udCwgc2hv
dWxkTG9jYWxpemVBeGlzTmFtZXMpKQotICAgICAgICByZXN1bHRzLmFwcGVuZChGb250UGxhdGZv
cm1EYXRhOjpGb250VmFyaWF0aW9uQXhpcyh2YWx1ZXMuYXhpc05hbWUsIFN0cmluZyh0YWcuZGF0
YSgpLCB0YWcuc2l6ZSgpKSwgdmFsdWVzLmRlZmF1bHRWYWx1ZSwgdmFsdWVzLm1pbmltdW1WYWx1
ZSwgdmFsdWVzLm1heGltdW1WYWx1ZSkpOwotICAgIAotICAgIHJldHVybiByZXN1bHRzOworICAg
IGF1dG8gbWFwID0gZGVmYXVsdFZhcmlhdGlvblZhbHVlcyhwbGF0Zm9ybUZvbnQsIHNob3VsZExv
Y2FsaXplQXhpc05hbWVzKTsKKyAgICByZXR1cm4gV1RGOjptYXAobWFwLCBbXShhdXRvJiBlbnRy
eSkgeworICAgICAgICBhdXRvJiBbdGFnLCB2YWx1ZXNdID0gZW50cnk7CisgICAgICAgIHJldHVy
biBGb250UGxhdGZvcm1EYXRhOjpGb250VmFyaWF0aW9uQXhpcyB7IHZhbHVlcy5heGlzTmFtZSwg
U3RyaW5nKHRhZy5kYXRhKCksIHRhZy5zaXplKCkpLCB2YWx1ZXMuZGVmYXVsdFZhbHVlLCB2YWx1
ZXMubWluaW11bVZhbHVlLCB2YWx1ZXMubWF4aW11bVZhbHVlIH07CisgICAgfSk7CiB9CiAKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQppbmRleCBiYThl
YTFlYjQ0OGE5MjFlMzBkM2FlNmE5Yzc3ZTg4MjMzYWJjNTNiLi5hMmMyNTBhYTJiZWY4ZGU5NjRi
YWYwOTI0MGQ1ZTBlYzQxNTBlZjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvUGFzdGVib2FyZE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
UGFzdGVib2FyZE1hYy5tbQpAQCAtNzAyLDEwICs3MDIsNyBAQCBBTExPV19ERVBSRUNBVEVEX0RF
Q0xBUkFUSU9OU19CRUdJTgogICAgICAgICBOU1VSTCAqdXJsID0gW05TVVJMIFVSTFdpdGhTdHJp
bmc6Y29jb2FEYXRhXTsKICAgICAgICAgaWYgKFt1cmwgaXNGaWxlVVJMXSkKICAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKLSAgICAgICAgdHlwZXMu
YXBwZW5kKGNvY29hVHlwZSk7Ci0gICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJv
YXJkU3RyYXRlZ3koKS0+c2V0VHlwZXModHlwZXMsIG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQo
KSk7CisgICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+
c2V0VHlwZXMoeyBjb2NvYVR5cGUgfSwgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKTsKICAg
ICAgICAgbV9jaGFuZ2VDb3VudCA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3Ry
YXRlZ3koKS0+c2V0U3RyaW5nRm9yVHlwZShjb2NvYURhdGEsIGNvY29hVHlwZSwgbV9wYXN0ZWJv
YXJkTmFtZSwgY29udGV4dCgpKTsKIAogICAgICAgICByZXR1cm47CkBAIC03MTQsOSArNzExLDcg
QEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAKICAgICBpZiAoIWNvY29hVHlw
ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gZXZlcnl0aGluZyBlbHNlIHdlIGtub3cgb2YgZ29l
cyBvbiB0aGUgcGJvYXJkIGFzIGEgc3RyaW5nCi0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVz
OwotICAgICAgICB0eXBlcy5hcHBlbmQoY29jb2FUeXBlKTsKLSAgICAgICAgcGxhdGZvcm1TdHJh
dGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5hZGRUeXBlcyh0eXBlcywgbV9wYXN0ZWJv
YXJkTmFtZSwgY29udGV4dCgpKTsKKyAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3Rl
Ym9hcmRTdHJhdGVneSgpLT5hZGRUeXBlcyh7IGNvY29hVHlwZSB9LCBtX3Bhc3RlYm9hcmROYW1l
LCBjb250ZXh0KCkpOwogICAgICAgICBtX2NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVz
KCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRTdHJpbmdGb3JUeXBlKGNvY29hRGF0YSwgY29j
b2FUeXBlLCBtX3Bhc3RlYm9hcmROYW1lLCBjb250ZXh0KCkpOwogICAgIH0KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lVmlkZW9DYXB0
dXJlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0
aW1lVmlkZW9DYXB0dXJlU291cmNlLmNwcAppbmRleCAzZTNmNDFhMWM1ODA3ZTZjZDM1OWRlM2Rm
MjZhZTcyZDU1MWNkNTgyLi43N2QzMjY2NTZkNWNiYzVhZWZjZDQxN2ExN2E4N2E0NmY3MTIyN2Jl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGlt
ZVZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vUmVhbHRpbWVWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCkBAIC03NSwxMSArNzUsOSBA
QCBWZWN0b3I8VmlkZW9QcmVzZXREYXRhPiBSZWFsdGltZVZpZGVvQ2FwdHVyZVNvdXJjZTo6cHJl
c2V0c0RhdGEoKQogCiB2b2lkIFJlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlOjpzZXRTdXBwb3J0
ZWRQcmVzZXRzKFZlY3RvcjxWaWRlb1ByZXNldERhdGE+JiYgcHJlc2V0RGF0YSkKIHsKLSAgICBW
ZWN0b3I8UmVmPFZpZGVvUHJlc2V0Pj4gcHJlc2V0czsKLQotICAgIGZvciAoYXV0byYgZGF0YSA6
IHByZXNldERhdGEpCi0gICAgICAgIHByZXNldHMuYXBwZW5kKFZpZGVvUHJlc2V0OjpjcmVhdGUo
V1RGTW92ZShkYXRhKSkpOwotCisgICAgYXV0byBwcmVzZXRzID0gV1RGOjptYXAoV1RGTW92ZShw
cmVzZXREYXRhKSwgW10oYXV0byYmIGRhdGEpIHsKKyAgICAgICAgcmV0dXJuIFZpZGVvUHJlc2V0
OjpjcmVhdGUoV1RGTW92ZShkYXRhKSk7CisgICAgfSk7CiAgICAgc2V0U3VwcG9ydGVkUHJlc2V0
cyhXVEZNb3ZlKHByZXNldHMpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKaW5kZXggNjdhNzYyOTVkODVmMzkxYzgz
YjI0MDBlNmQxZmU1NzljY2RlZDg4Zi4uNjIzNjM2YWMyYWJkNjgzODQxNGRjOGYxZjkyNmNlZDVj
NDdjY2EyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9i
UmVnaXN0cnlJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Js
b2JSZWdpc3RyeUltcGwuY3BwCkBAIC0xNDEsMTAgKzE0MSw4IEBAIHZvaWQgQmxvYlJlZ2lzdHJ5
SW1wbDo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYgdXJsLCBWZWN0b3I8QmxvYlBhcnQ+JiYg
YmxvYlBhCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEJsb2JQ
YXJ0OjpUeXBlOjpCbG9iOiB7Ci0gICAgICAgICAgICBpZiAoYXV0byBibG9iID0gbV9ibG9icy5n
ZXQocGFydC51cmwoKS5zdHJpbmcoKSkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEJs
b2JEYXRhSXRlbSYgaXRlbSA6IGJsb2ItPml0ZW1zKCkpCi0gICAgICAgICAgICAgICAgICAgIGJs
b2JEYXRhLT5tX2l0ZW1zLmFwcGVuZChpdGVtKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChhdXRvIGJsb2IgPSBtX2Jsb2JzLmdldChwYXJ0LnVybCgpLnN0cmluZygpKSkKKyAgICAg
ICAgICAgICAgICBibG9iRGF0YS0+bV9pdGVtcy5hcHBlbmRWZWN0b3IoYmxvYi0+aXRlbXMoKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICB9CkBAIC0zMjgsNyArMzI2
LDcgQEAgdm9pZCBCbG9iUmVnaXN0cnlJbXBsOjp3cml0ZUJsb2JzVG9UZW1wb3JhcnlGaWxlc0Zv
ckluZGV4ZWREQihjb25zdCBWZWN0b3I8U3RyaW4KICAgICAgICAgICAgICAgICBmaWxlUGF0aHMu
Y2xlYXIoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGZpbGVQYXRocy5hcHBlbmQodGVtcEZpbGVQYXRoLmlzb2xhdGVkQ29weSgpKTsKKyAgICAg
ICAgICAgIGZpbGVQYXRocy5hcHBlbmQoV1RGTW92ZSh0ZW1wRmlsZVBhdGgpLmlzb2xhdGVkQ29w
eSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW2NvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGZpbGVQYXRocyA9IFdURk1vdmUo
ZmlsZVBhdGhzKV0gKCkgbXV0YWJsZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCA4NTMwZTMzNTVmMmQ2YjhkN2ZmYjZlZGY4
M2Q2MDhiY2E0YjlmNTU1Li45YWI5OThlNDFjYjA4Y2YwYjZmOTBmMTBmMTNjNGI4NDU3ZWM5Mzlm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHAKQEAgLTIwODYsMTAgKzIwODYsOCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpk
cmF3Qm94U2lkZUZyb21QYXRoKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LAogICAg
ICAgICAgICAgICAgIGdhcExlbmd0aCArPSAoZGFzaExlbmd0aCAgLyBudW1iZXJPZkdhcHMpOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBEYXNoQXJyYXkgbGluZURhc2g7Ci0gICAgICAg
ICAgICBsaW5lRGFzaC5hcHBlbmQoZGFzaExlbmd0aCk7Ci0gICAgICAgICAgICBsaW5lRGFzaC5h
cHBlbmQoZ2FwTGVuZ3RoKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRMaW5lRGFz
aChsaW5lRGFzaCwgZGFzaExlbmd0aCk7CisgICAgICAgICAgICBhdXRvIGxpbmVEYXNoID0gRGFz
aEFycmF5Ojpmcm9tKGRhc2hMZW5ndGgsIGdhcExlbmd0aCk7CisgICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQuc2V0TGluZURhc2goV1RGTW92ZShsaW5lRGFzaCksIGRhc2hMZW5ndGgpOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBGSVhNRTogc3Ryb2tpbmcgdGhlIGJvcmRlciBw
YXRoIGNhdXNlcyBpc3N1ZXMgd2l0aCB0aWdodCBjb3JuZXJzOgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCAzYWEwZjg1ZWE4ZGY3NDg3
M2ZhZGEyY2FjNmFkY2Y0NmYwMTgyNzI5Li5mNmVlYzI2YmI0YTg1MjA5N2M3ZWU0OTQyNzEyYzQw
ZTY4MWQwYjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmNwcApAQCAtMTk1Niw5ICsxOTU2LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6
OmNvbm5lY3RDbGlwcGluZ1N0YWNrTGF5ZXJzKExheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrJgog
ICAgIGF1dG8mIGNsaXBwaW5nRW50cnlTdGFjayA9IGNsaXBwaW5nU3RhY2suc3RhY2soKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2xpcHBpbmdFbnRyeVN0YWNrLnNpemUoKSAtIDE7
ICsraSkgewogICAgICAgICBhdXRvJiBlbnRyeSA9IGNsaXBwaW5nRW50cnlTdGFjay5hdChpKTsK
LSAgICAgICAgVmVjdG9yPFJlZjxHcmFwaGljc0xheWVyPj4gY2hpbGRyZW47Ci0gICAgICAgIGNo
aWxkcmVuLmFwcGVuZCgqY2xpcHBpbmdFbnRyeVN0YWNrLmF0KGkgKyAxKS5jbGlwcGluZ0xheWVy
KTsKLSAgICAgICAgZW50cnkuY2xpcHBpbmdMYXllci0+c2V0Q2hpbGRyZW4oV1RGTW92ZShjaGls
ZHJlbikpOworICAgICAgICBlbnRyeS5jbGlwcGluZ0xheWVyLT5zZXRDaGlsZHJlbih7IFJlZiB7
ICpjbGlwcGluZ0VudHJ5U3RhY2suYXQoaSArIDEpLmNsaXBwaW5nTGF5ZXIgfSB9KTsKICAgICB9
CiAKICAgICBjbGlwcGluZ0VudHJ5U3RhY2subGFzdCgpLmNsaXBwaW5nTGF5ZXItPnJlbW92ZUFs
bENoaWxkcmVuKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuY3BwCmluZGV4IDBiZTAzOWEwZjIzZDU3ZmY3ZjU3ZDk5MDliNjUzNzVhMDI0
MjQzYjQuLjIzZDczNzEzNGNhOGVhYTE2MDVkMGM0NzdhY2U2MjgzZjg0NjIxYjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBA
IC0xNDkxLDkgKzE0OTEsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRqdXN0T3Zl
cmZsb3dTY3JvbGxiYXJDb250YWluZXJMYXllcnMoUmVuZGVyTGF5ZXImCiAgICAgICAgICAgICBv
dmVyZmxvd0JhY2tpbmctPmVuc3VyZU92ZXJmbG93Q29udHJvbHNIb3N0TGF5ZXJBbmNlc3RvckNs
aXBwaW5nU3RhY2soJnN0YWNraW5nQ29udGV4dExheWVyKTsKIAogICAgICAgICBpZiAoYXV0byog
b3ZlcmZsb3dDb250cm9sc0FuY2VzdG9yQ2xpcHBpbmdTdGFjayA9IG92ZXJmbG93QmFja2luZy0+
b3ZlcmZsb3dDb250cm9sc0hvc3RMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjaygpKSB7Ci0gICAg
ICAgICAgICBWZWN0b3I8UmVmPEdyYXBoaWNzTGF5ZXI+PiBjaGlsZHJlbjsKLSAgICAgICAgICAg
IGNoaWxkcmVuLmFwcGVuZCgqb3ZlcmZsb3dDb250YWluZXJMYXllcik7Ci0gICAgICAgICAgICBv
dmVyZmxvd0NvbnRyb2xzQW5jZXN0b3JDbGlwcGluZ1N0YWNrLT5sYXN0Q2xpcHBpbmdMYXllcigp
LT5zZXRDaGlsZHJlbihXVEZNb3ZlKGNoaWxkcmVuKSk7CisgICAgICAgICAgICBvdmVyZmxvd0Nv
bnRyb2xzQW5jZXN0b3JDbGlwcGluZ1N0YWNrLT5sYXN0Q2xpcHBpbmdMYXllcigpLT5zZXRDaGls
ZHJlbih7IFJlZiB7ICpvdmVyZmxvd0NvbnRhaW5lckxheWVyIH0gfSk7CiAgICAgICAgICAgICBv
dmVyZmxvd0NvbnRhaW5lckxheWVyID0gb3ZlcmZsb3dDb250cm9sc0FuY2VzdG9yQ2xpcHBpbmdT
dGFjay0+Zmlyc3RDbGlwcGluZ0xheWVyKCk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCmluZGV4IDllMTA4ZjhiNGZmMjYxNzk2ODk2NGZh
MTM3MDE1MTliYmMyNDUyYzQuLjg3NjY3ZGUyZGVkMjk1ZDkzNTgwMmIzMzg5MmEwYzMyMWM3ZTMy
ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTI3
MzEsMTAgKzI3MzEsOSBAQCBzdGF0aWMgdm9pZCBwYWludEF0dGFjaG1lbnRUaXRsZUJhY2tncm91
bmQoY29uc3QgUmVuZGVyQXR0YWNobWVudCYgYXR0YWNobWVudCwgRwogICAgIGlmIChsYXlvdXQu
bGluZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8RmxvYXRSZWN0
PiBiYWNrZ3JvdW5kUmVjdHM7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheW91dC5s
aW5lcy5zaXplKCk7ICsraSkKLSAgICAgICAgYmFja2dyb3VuZFJlY3RzLmFwcGVuZChsYXlvdXQu
bGluZXNbaV0uYmFja2dyb3VuZFJlY3QpOworICAgIGF1dG8gYmFja2dyb3VuZFJlY3RzID0gbGF5
b3V0LmxpbmVzLm1hcChbXShhdXRvJiBsaW5lKSB7CisgICAgICAgIHJldHVybiBsaW5lLmJhY2tn
cm91bmRSZWN0OworICAgIH0pOwogCiAgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yOwogICAgIGlm
IChhdHRhY2htZW50LmZyYW1lKCkuc2VsZWN0aW9uKCkuaXNGb2N1c2VkQW5kQWN0aXZlKCkpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFz
VGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1Rl
eHQuY3BwCmluZGV4IGZlNTU5YmQ3MGIxZDBjZjRiMWM1YTViMWM5MGEyOTYzNWU4YjI3MzEuLjky
NzZiOTNjNzMxMjYxYzFmMmZmYmVjNDlmMWVjY2U3M2NhMWJiNWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtMTk3
LDExICsxOTcsOSBAQCBzdGF0aWMgdm9pZCB3cml0ZVNWR1N0cm9rZVBhaW50aW5nUmVzb3VyY2Uo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlckVsZW1lbnQmCiAgICAgU1ZHTGVuZ3RoQ29udGV4
dCBsZW5ndGhDb250ZXh0KCZzaGFwZSk7CiAgICAgZG91YmxlIGRhc2hPZmZzZXQgPSBsZW5ndGhD
b250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN2Z1N0eWxlLnN0cm9rZURhc2hPZmZzZXQoKSk7CiAgICAg
ZG91YmxlIHN0cm9rZVdpZHRoID0gbGVuZ3RoQ29udGV4dC52YWx1ZUZvckxlbmd0aChzdHlsZS5z
dHJva2VXaWR0aCgpKTsKLSAgICBjb25zdCBhdXRvJiBkYXNoZXMgPSBzdmdTdHlsZS5zdHJva2VE
YXNoQXJyYXkoKTsKLQotICAgIERhc2hBcnJheSBkYXNoQXJyYXk7Ci0gICAgZm9yIChhdXRvJiBs
ZW5ndGggOiBkYXNoZXMpCi0gICAgICAgIGRhc2hBcnJheS5hcHBlbmQobGVuZ3RoLnZhbHVlKGxl
bmd0aENvbnRleHQpKTsKKyAgICBhdXRvIGRhc2hBcnJheSA9IHN2Z1N0eWxlLnN0cm9rZURhc2hB
cnJheSgpLm1hcChbJl0oYXV0byYgbGVuZ3RoKSAtPiBEYXNoQXJyYXlFbGVtZW50IHsKKyAgICAg
ICAgcmV0dXJuIGxlbmd0aC52YWx1ZShsZW5ndGhDb250ZXh0KTsKKyAgICB9KTsKIAogICAgIHdy
aXRlSWZOb3REZWZhdWx0KHRzLCAib3BhY2l0eSIsIHN2Z1N0eWxlLnN0cm9rZU9wYWNpdHkoKSwg
MS4wZik7CiAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJzdHJva2Ugd2lkdGgiLCBzdHJva2VX
aWR0aCwgMS4wKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dENodW5rLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5r
LmNwcAppbmRleCBhNjNlYjgwYTc3OWQ3NzY4ZGE0NzcyYmIwZDZhZmUxOWUzNTIxYmJkLi44NDgx
MzZjOGE1MzhjNmVjOGVjYzE2ZDViZjAxYmZkZTJkZGIzOTE4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuY3BwCkBAIC03MCw4ICs3MCw3IEBAIFNWR1Rl
eHRDaHVuazo6U1ZHVGV4dENodW5rKGNvbnN0IFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGxp
bmVMYXlvdXRCb3hlcywgdW5zCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSBmaXJzdDsgaSA8IGxpbWl0OyArK2kpCi0gICAgICAgIG1fYm94ZXMuYXBwZW5kKGxpbmVM
YXlvdXRCb3hlc1tpXSk7CisgICAgbV9ib3hlcy5hcHBlbmQoJmxpbmVMYXlvdXRCb3hlc1tmaXJz
dF0sIGxpbWl0IC0gZmlyc3QpOwogfQogCiB1bnNpZ25lZCBTVkdUZXh0Q2h1bms6OnRvdGFsQ2hh
cmFjdGVycygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9QYWdlUnVs
ZUNvbGxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5j
cHAKaW5kZXggMjI5OWY4YzYzNzliNTA5NDkyYTFhMWZmYTUyMzA2YTFhYTE2ODliNC4uZTNkYzNl
ZmJjMjliNjNkNzUyMTQ5ZGFjYjExMzFmZmE1MmFjYzk0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0
eWxlL1BhZ2VSdWxlQ29sbGVjdG9yLmNwcApAQCAtODQsOCArODQsOSBAQCB2b2lkIFBhZ2VSdWxl
Q29sbGVjdG9yOjptYXRjaFBhZ2VSdWxlcyhSdWxlU2V0KiBydWxlcywgYm9vbCBpc0xlZnRQYWdl
LCBib29sIGlzRgogCiAgICAgc3RkOjpzdGFibGVfc29ydChtYXRjaGVkUGFnZVJ1bGVzLmJlZ2lu
KCksIG1hdGNoZWRQYWdlUnVsZXMuZW5kKCksIGNvbXBhcmVQYWdlUnVsZXMpOwogCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hdGNoZWRQYWdlUnVsZXMuc2l6ZSgpOyBpKyspCi0gICAg
ICAgIG1fcmVzdWx0LmF1dGhvckRlY2xhcmF0aW9ucy5hcHBlbmQoeyAmbWF0Y2hlZFBhZ2VSdWxl
c1tpXS0+cHJvcGVydGllcygpIH0pOworICAgIG1fcmVzdWx0LmF1dGhvckRlY2xhcmF0aW9ucy5y
ZXNlcnZlQ2FwYWNpdHkobV9yZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zLnNpemUoKSArIG1hdGNo
ZWRQYWdlUnVsZXMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8qIHBhZ2VSdWxlIDogbWF0Y2hlZFBh
Z2VSdWxlcykKKyAgICAgICAgbV9yZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zLnVuY2hlY2tlZEFw
cGVuZCh7ICZwYWdlUnVsZS0+cHJvcGVydGllcygpIH0pOwogfQogCiBzdGF0aWMgYm9vbCBjaGVj
a1BhZ2VTZWxlY3RvckNvbXBvbmVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBib29s
IGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0QnVpbGRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0QnVpbGRlci5jcHAKaW5kZXggNTc1MTg1OTE5N2IyMjZm
YzI0NGFmNmJjMzIwNWZhZDI2ZTAxNzAxOS4uY2YxNjUyMjFjZDUzYTNjNWE3N2M2ZDk4MDg0MzIx
YzEzZjIyMjM4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxk
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcApAQCAt
Mzc4LDggKzM3OCw5IEBAIHZvaWQgUnVsZVNldEJ1aWxkZXI6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6
OnBvcChjb25zdCBNZWRpYVF1ZXJ5U2V0KiBzZXQpCiAKICAgICBpZiAoIWR5bmFtaWNDb250ZXh0
U3RhY2subGFzdCgpLmFmZmVjdGVkUnVsZVBvc2l0aW9ucy5pc0VtcHR5KCkgfHwgIWNvbGxlY3RE
eW5hbWljKSB7CiAgICAgICAgIFJ1bGVTZXQ6OkR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMgcnVsZXM7
CisgICAgICAgIHJ1bGVzLm1lZGlhUXVlcnlTZXRzLnJlc2VydmVDYXBhY2l0eShydWxlcy5tZWRp
YVF1ZXJ5U2V0cy5zaXplKCkgKyBkeW5hbWljQ29udGV4dFN0YWNrLnNpemUoKSk7CiAgICAgICAg
IGZvciAoYXV0byYgY29udGV4dCA6IGR5bmFtaWNDb250ZXh0U3RhY2spCi0gICAgICAgICAgICBy
dWxlcy5tZWRpYVF1ZXJ5U2V0cy5hcHBlbmQoY29udGV4dC5zZXQuZ2V0KCkpOworICAgICAgICAg
ICAgcnVsZXMubWVkaWFRdWVyeVNldHMudW5jaGVja2VkQXBwZW5kKGNvbnRleHQuc2V0LmdldCgp
KTsKIAogICAgICAgICBpZiAoY29sbGVjdER5bmFtaWMpIHsKICAgICAgICAgICAgIHJ1bGVzLmFm
ZmVjdGVkUnVsZVBvc2l0aW9ucy5hcHBlbmRWZWN0b3IoZHluYW1pY0NvbnRleHRTdGFjay5sYXN0
KCkuYWZmZWN0ZWRSdWxlUG9zaXRpb25zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0
eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVC
dWlsZGVyQ29udmVydGVyLmgKaW5kZXggMmY4MzRkZjY3ZDgwY2IxM2RkNGM5MTU1MWJhZDEyZGIx
YjIzYTI0OS4uNzQ2NGY4NGQ4YmY2YjJiMmEzMzEyM2Q1OTJiZTI5MmYxNGNjMjhkZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgKQEAgLTE2OTcsMTMg
KzE2OTcsMTIgQEAgaW5saW5lIFZlY3RvcjxBdG9tU3RyaW5nPiBCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0Q29udGFpbmVyTmFtZShCdWlsZGVyU3RhdGUmLAogICAgICAgICBBU1NFUlQoZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKTsK
ICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CisgICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KHZh
bHVlKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIFZlY3RvcjxBdG9tU3RyaW5nPiByZXN1
bHQ7Ci0gICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7Ci0gICAgICAgIGZvciAoYXV0
byYgaXRlbSA6IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpKQotICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oaXRlbS5nZXQoKSkuc3RyaW5n
VmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIFdURjo6bWFw
KGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpLCBbXShhdXRvJiBpdGVtKSAtPiBBdG9tU3Ry
aW5nIHsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihpdGVtLmdl
dCgpKS5zdHJpbmdWYWx1ZSgpOworICAgIH0pOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJQcm94eS5jcHAKaW5k
ZXggY2QyYzUxYmJkMzJlMjhjMmZlNDM0NmU5ZjI2MzUwMTg5ZWVhNjYzYi4uMmE2YjFlYjM2N2U2
Y2M3MmM1NzI4OWE1M2M2NjkyN2Y1NTliMTFjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllclByb3h5LmNwcApAQCAtODAy
LDExICs4MDIsOSBAQCBib29sIFJlbW90ZU1lZGlhUGxheWVyUHJveHk6OmRvZXNIYXZlQXR0cmli
dXRlKGNvbnN0IEF0b21TdHJpbmcmLCBBdG9tU3RyaW5nKikgYwogI2lmIEVOQUJMRShBVkZfQ0FQ
VElPTlMpCiBWZWN0b3I8UmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNrPj4gUmVtb3RlTWVkaWFQbGF5
ZXJQcm94eTo6b3V0T2ZCYW5kVHJhY2tTb3VyY2VzKCkKIHsKLSAgICBWZWN0b3I8UmVmUHRyPFBs
YXRmb3JtVGV4dFRyYWNrPj4gc291cmNlczsKLSAgICBmb3IgKGF1dG8mIGRhdGEgOiBtX2NvbmZp
Z3VyYXRpb24ub3V0T2ZCYW5kVHJhY2tEYXRhKQotICAgICAgICBzb3VyY2VzLmFwcGVuZChQbGF0
Zm9ybVRleHRUcmFjazo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpKTsKLSAgICAKLSAgICByZXR1cm4g
c291cmNlczsKKyAgICByZXR1cm4gV1RGOjptYXAobV9jb25maWd1cmF0aW9uLm91dE9mQmFuZFRy
YWNrRGF0YSwgW10oYXV0byYgZGF0YSkgLT4gUmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNrPiB7Cisg
ICAgICAgIHJldHVybiBQbGF0Zm9ybVRleHRUcmFjazo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpOwor
ICAgIH0pOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9tZWRpYS9SZW1vdGVTb3VyY2VCdWZmZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvbWVkaWEvUmVtb3RlU291cmNlQnVmZmVyUHJveHkuY3BwCmluZGV4IDI3OTE2NWRlNjZh
YWZlMDI0NjgxZTE2MWEwMzVjNGExMDk1NGU2ZTEuLmJiZDMwZDhlNzFjMTk0MjcxZWEwM2JhYTIy
ZTM1MDZkYmIyMDUwODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRp
YS9SZW1vdGVTb3VyY2VCdWZmZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL21lZGlhL1JlbW90ZVNvdXJjZUJ1ZmZlclByb3h5LmNwcApAQCAtNzUsOSArNzUsMTAgQEAg
dm9pZCBSZW1vdGVTb3VyY2VCdWZmZXJQcm94eTo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2Vp
dmVJbml0aWFsaXphdGlvblNlZ21lbnQKIAogICAgIEluaXRpYWxpemF0aW9uU2VnbWVudEluZm8g
c2VnbWVudEluZm87CiAgICAgc2VnbWVudEluZm8uZHVyYXRpb24gPSBzZWdtZW50LmR1cmF0aW9u
OworICAgIHNlZ21lbnRJbmZvLmF1ZGlvVHJhY2tzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2Vn
bWVudC5hdWRpb1RyYWNrcy5zaXplKCkpOwogICAgIGZvciAoYXV0byYgYXVkaW9UcmFja0luZm8g
OiBzZWdtZW50LmF1ZGlvVHJhY2tzKSB7CiAgICAgICAgIGF1dG8gaWRlbnRpZmllciA9IG1fcmVt
b3RlTWVkaWFQbGF5ZXJQcm94eS0+YWRkUmVtb3RlQXVkaW9UcmFja1Byb3h5KCphdWRpb1RyYWNr
SW5mby50cmFjayk7Ci0gICAgICAgIHNlZ21lbnRJbmZvLmF1ZGlvVHJhY2tzLmFwcGVuZCh7IE1l
ZGlhRGVzY3JpcHRpb25JbmZvKCphdWRpb1RyYWNrSW5mby5kZXNjcmlwdGlvbiksIGlkZW50aWZp
ZXIgfSk7CisgICAgICAgIHNlZ21lbnRJbmZvLmF1ZGlvVHJhY2tzLnVuY2hlY2tlZEFwcGVuZCh7
IE1lZGlhRGVzY3JpcHRpb25JbmZvKCphdWRpb1RyYWNrSW5mby5kZXNjcmlwdGlvbiksIGlkZW50
aWZpZXIgfSk7CiAKICAgICAgICAgQVNTRVJUKCFtX3RyYWNrSWRzLmNvbnRhaW5zKGlkZW50aWZp
ZXIpKTsKICAgICAgICAgQVNTRVJUKCFtX21lZGlhRGVzY3JpcHRpb25zLmNvbnRhaW5zKGlkZW50
aWZpZXIpKTsKQEAgLTg1LDkgKzg2LDEwIEBAIHZvaWQgUmVtb3RlU291cmNlQnVmZmVyUHJveHk6
OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50CiAgICAg
ICAgIG1fbWVkaWFEZXNjcmlwdGlvbnMuYWRkKGlkZW50aWZpZXIsICphdWRpb1RyYWNrSW5mby5k
ZXNjcmlwdGlvbik7CiAgICAgfQogCisgICAgc2VnbWVudEluZm8udmlkZW9UcmFja3MucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShzZWdtZW50LnZpZGVvVHJhY2tzLnNpemUoKSk7CiAgICAgZm9yIChh
dXRvJiB2aWRlb1RyYWNrSW5mbyA6IHNlZ21lbnQudmlkZW9UcmFja3MpIHsKICAgICAgICAgYXV0
byBpZGVudGlmaWVyID0gbV9yZW1vdGVNZWRpYVBsYXllclByb3h5LT5hZGRSZW1vdGVWaWRlb1Ry
YWNrUHJveHkoKnZpZGVvVHJhY2tJbmZvLnRyYWNrKTsKLSAgICAgICAgc2VnbWVudEluZm8udmlk
ZW9UcmFja3MuYXBwZW5kKHsgTWVkaWFEZXNjcmlwdGlvbkluZm8oKnZpZGVvVHJhY2tJbmZvLmRl
c2NyaXB0aW9uKSwgaWRlbnRpZmllciB9KTsKKyAgICAgICAgc2VnbWVudEluZm8udmlkZW9UcmFj
a3MudW5jaGVja2VkQXBwZW5kKHsgTWVkaWFEZXNjcmlwdGlvbkluZm8oKnZpZGVvVHJhY2tJbmZv
LmRlc2NyaXB0aW9uKSwgaWRlbnRpZmllciB9KTsKIAogICAgICAgICBBU1NFUlQoIW1fdHJhY2tJ
ZHMuY29udGFpbnMoaWRlbnRpZmllcikpOwogICAgICAgICBBU1NFUlQoIW1fbWVkaWFEZXNjcmlw
dGlvbnMuY29udGFpbnMoaWRlbnRpZmllcikpOwpAQCAtOTUsOSArOTcsMTAgQEAgdm9pZCBSZW1v
dGVTb3VyY2VCdWZmZXJQcm94eTo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0aWFs
aXphdGlvblNlZ21lbnQKICAgICAgICAgbV9tZWRpYURlc2NyaXB0aW9ucy5hZGQoaWRlbnRpZmll
ciwgKnZpZGVvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKTsKICAgICB9CiAKKyAgICBzZWdtZW50SW5m
by50ZXh0VHJhY2tzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2VnbWVudC50ZXh0VHJhY2tzLnNp
emUoKSk7CiAgICAgZm9yIChhdXRvJiB0ZXh0VHJhY2tJbmZvIDogc2VnbWVudC50ZXh0VHJhY2tz
KSB7CiAgICAgICAgIGF1dG8gaWRlbnRpZmllciA9IG1fcmVtb3RlTWVkaWFQbGF5ZXJQcm94eS0+
YWRkUmVtb3RlVGV4dFRyYWNrUHJveHkoKnRleHRUcmFja0luZm8udHJhY2spOwotICAgICAgICBz
ZWdtZW50SW5mby50ZXh0VHJhY2tzLmFwcGVuZCh7IE1lZGlhRGVzY3JpcHRpb25JbmZvKCp0ZXh0
VHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwgaWRlbnRpZmllciB9KTsKKyAgICAgICAgc2VnbWVudElu
Zm8udGV4dFRyYWNrcy51bmNoZWNrZWRBcHBlbmQoeyBNZWRpYURlc2NyaXB0aW9uSW5mbygqdGV4
dFRyYWNrSW5mby5kZXNjcmlwdGlvbiksIGlkZW50aWZpZXIgfSk7CiAKICAgICAgICAgQVNTRVJU
KCFtX3RyYWNrSWRzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKICAgICAgICAgQVNTRVJUKCFtX21l
ZGlhRGVzY3JpcHRpb25zLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKQEAgLTMzOCwxNiArMzQxLDEx
IEBAIHZvaWQgUmVtb3RlU291cmNlQnVmZmVyUHJveHk6OnNlZWtUb1RpbWUoY29uc3QgTWVkaWFU
aW1lJiBtZWRpYVRpbWUpCiAKIHZvaWQgUmVtb3RlU291cmNlQnVmZmVyUHJveHk6OnVwZGF0ZVRy
YWNrSWRzKFZlY3RvcjxzdGQ6OnBhaXI8VHJhY2tQcml2YXRlUmVtb3RlSWRlbnRpZmllciwgVHJh
Y2tQcml2YXRlUmVtb3RlSWRlbnRpZmllcj4+JiYgaWRlbnRpZmllclBhaXJzKQogewotICAgIFZl
Y3RvcjxzdGQ6OnBhaXI8QXRvbVN0cmluZywgQXRvbVN0cmluZz4+IHRyYWNrSWRQYWlyczsKLQot
ICAgIGZvciAoYXV0byYgaWRlbnRpZmllclBhaXIgOiBpZGVudGlmaWVyUGFpcnMpIHsKKyAgICBh
dXRvIHRyYWNrSWRQYWlycyA9IGlkZW50aWZpZXJQYWlycy5tYXAoWyZdKGF1dG8mIGlkZW50aWZp
ZXJQYWlyKSB7CiAgICAgICAgIEFTU0VSVChtX3RyYWNrSWRzLmNvbnRhaW5zKGlkZW50aWZpZXJQ
YWlyLmZpcnN0KSk7CiAgICAgICAgIEFTU0VSVChtX3RyYWNrSWRzLmNvbnRhaW5zKGlkZW50aWZp
ZXJQYWlyLnNlY29uZCkpOwotCi0gICAgICAgIGF1dG8gb2xkSWQgPSBtX3RyYWNrSWRzLnRha2Uo
aWRlbnRpZmllclBhaXIuZmlyc3QpOwotICAgICAgICBhdXRvIG5ld0lkID0gbV90cmFja0lkcy5n
ZXQoaWRlbnRpZmllclBhaXIuc2Vjb25kKTsKLSAgICAgICAgdHJhY2tJZFBhaXJzLmFwcGVuZChz
dGQ6Om1ha2VfcGFpcihvbGRJZCwgbmV3SWQpKTsKLSAgICB9CisgICAgICAgIHJldHVybiBzdGQ6
OnBhaXIgeyBtX3RyYWNrSWRzLnRha2UoaWRlbnRpZmllclBhaXIuZmlyc3QpLCBtX3RyYWNrSWRz
LmdldChpZGVudGlmaWVyUGFpci5zZWNvbmQpIH07CisgICAgfSk7CiAKICAgICBpZiAoIXRyYWNr
SWRQYWlycy5pc0VtcHR5KCkpCiAgICAgICAgIG1fc291cmNlQnVmZmVyUHJpdmF0ZS0+dXBkYXRl
VHJhY2tJZHMoV1RGTW92ZSh0cmFja0lkUGFpcnMpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKaW5kZXggNzBiNWFmZGE1MjZlOTkwOWI5NjJkNzEy
MTNkODViNjBiNTM3MTgxZC4uZTg3NmVjMzc3NzFmZjQwMGNhYTgzNGNlZmFlOTU2MjU0Y2MzZmQ5
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAK
QEAgLTg1Myw5ICs4NTMsNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFJlZ2lzdHJhYmxlRAogCiAgICAgICAgICAg
ICBzdGF0aXN0aWMuc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyA9IFdURk1vdmUodG9wRnJh
bWVEb21haW5zKTsKIAotICAgICAgICAgICAgVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+
IHN0YXRpc3RpY3M7Ci0gICAgICAgICAgICBzdGF0aXN0aWNzLmFwcGVuZChXVEZNb3ZlKHN0YXRp
c3RpYykpOwotICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPm1lcmdlU3RhdGlzdGljcyhX
VEZNb3ZlKHN0YXRpc3RpY3MpKTsKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5tZXJn
ZVN0YXRpc3RpY3MoVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+Ojpmcm9tKFdURk1vdmUo
c3RhdGlzdGljKSkpOwogICAgICAgICB9CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCBmNGY4YTRjNGY0YWY5NmFmNjg5NDJjNWM2
Yzk4OTJmZjdlMTk5M2YxLi40YThiMGVkYTA5YmYwNTg5OGEzYjhiMjJjOTA4YjQ3YjI4ZWI5Yzgx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNw
cApAQCAtMTM4MCwxMCArMTM4MCw5IEBAIHN0YXRpYyB2b2lkIGZldGNoRGlza0NhY2hlRW50cmll
cyhOZXR3b3JrQ2FjaGU6OkNhY2hlKiBjYWNoZSwgUEFMOjpTZXNzaW9uSUQgc2VzCiAgICAgSGFz
aE1hcDxTZWN1cml0eU9yaWdpbkRhdGEsIHVpbnQ2NF90PiBvcmlnaW5zQW5kU2l6ZXM7CiAgICAg
Y2FjaGUtPnRyYXZlcnNlKFtmZXRjaE9wdGlvbnMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlciksIG9yaWdpbnNBbmRTaXplcyA9IFdURk1vdmUob3JpZ2luc0Fu
ZFNpemVzKV0oYXV0byogdHJhdmVyc2FsRW50cnkpIG11dGFibGUgewogICAgICAgICBpZiAoIXRy
YXZlcnNhbEVudHJ5KSB7Ci0gICAgICAgICAgICBWZWN0b3I8V2Vic2l0ZURhdGE6OkVudHJ5PiBl
bnRyaWVzOwotCi0gICAgICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbkFuZFNpemUgOiBvcmlnaW5z
QW5kU2l6ZXMpCi0gICAgICAgICAgICAgICAgZW50cmllcy5hcHBlbmQoV2Vic2l0ZURhdGE6OkVu
dHJ5IHsgb3JpZ2luQW5kU2l6ZS5rZXksIFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlLCBvcmln
aW5BbmRTaXplLnZhbHVlIH0pOworICAgICAgICAgICAgYXV0byBlbnRyaWVzID0gV1RGOjptYXAo
b3JpZ2luc0FuZFNpemVzLCBbXShhdXRvJiBvcmlnaW5BbmRTaXplKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbkFuZFNpemUua2V5LCBXZWJzaXRl
RGF0YVR5cGU6OkRpc2tDYWNoZSwgb3JpZ2luQW5kU2l6ZS52YWx1ZSB9OworICAgICAgICAgICAg
fSk7CiAKICAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgZW50cmllcyA9IFdURk1vdmUoZW50
cmllcyldICgpIG11dGFibGUgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGVu
dHJpZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Ob3RpZmlj
YXRpb25zL05ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTm90aWZpY2F0aW9ucy9OZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlci5jcHAK
aW5kZXggZjAwYTIxOTNhYTJiMTM5ODAyYjM2NmE0ZjEyMWM3NmVkZmY4OGYwMy4uYzUxMmYyY2Iz
MjU0MDQ1NGIwNmRmNzMyNWEzMWIyYTNjZTFkMGM2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05vdGlmaWNhdGlvbnMvTmV0
d29ya05vdGlmaWNhdGlvbk1hbmFnZXIuY3BwCkBAIC04Miw5ICs4Miw5IEBAIHZvaWQgTmV0d29y
a05vdGlmaWNhdGlvbk1hbmFnZXI6OmRlbGV0ZVB1c2hBbmROb3RpZmljYXRpb25SZWdpc3RyYXRp
b24oY29uc3QgU2VjCiB2b2lkIE5ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2VyOjpnZXRPcmlnaW5z
V2l0aFB1c2hBbmROb3RpZmljYXRpb25QZXJtaXNzaW9ucyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4gcmVwbHlI
YW5kbGVyID0gW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
IChWZWN0b3I8U3RyaW5nPiBvcmlnaW5TdHJpbmdzKSBtdXRhYmxlIHsKLSAgICAgICAgVmVjdG9y
PFNlY3VyaXR5T3JpZ2luRGF0YT4gb3JpZ2luczsKLSAgICAgICAgZm9yIChhdXRvJiBvcmlnaW5T
dHJpbmcgOiBvcmlnaW5TdHJpbmdzKQotICAgICAgICAgICAgb3JpZ2lucy5hcHBlbmQoU2VjdXJp
dHlPcmlnaW5EYXRhOjpmcm9tVVJMKHsgeyB9LCBvcmlnaW5TdHJpbmcgfSkpOworICAgICAgICBh
dXRvIG9yaWdpbnMgPSBvcmlnaW5TdHJpbmdzLm1hcChbXShhdXRvJiBvcmlnaW5TdHJpbmcpIHsK
KyAgICAgICAgICAgIHJldHVybiBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21VUkwoeyB7IH0sIG9y
aWdpblN0cmluZyB9KTsKKyAgICAgICAgfSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdU
Rk1vdmUob3JpZ2lucykpOwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCmluZGV4IGNiOTAx
YjZjNThiMTg1OWFlOGJlMmFkOWRhOTAwMmQ4MjJiODA2MTIuLjdlMmQzNzdhMWJmODYyZDhhMTY5
NWVkOTViYjA1YWVjYzQzZGNkMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcApAQCAtMjk1LDIwICsy
OTUsMTQgQEAgVmVjdG9yPFN0b3JhZ2VBcmVhSWRlbnRpZmllcj4gU3RvcmFnZU1hbmFnZXI6OmFs
bFN0b3JhZ2VBcmVhSWRlbnRpZmllcnMoKSBjb25zdAogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOwogCiAgICAgVmVjdG9yPFN0b3JhZ2VBcmVhSWRlbnRpZmllcj4gaWRlbnRpZmllcnM7
Ci0gICAgZm9yIChjb25zdCBhdXRvJiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UgOiBtX2xvY2FsU3Rv
cmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvIGtleSA6IGxvY2Fs
U3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZUFyZWFJZGVudGlmaWVycygpKQotICAgICAgICAgICAg
aWRlbnRpZmllcnMuYXBwZW5kKGtleSk7Ci0gICAgfQorICAgIGZvciAoY29uc3QgYXV0byYgbG9j
YWxTdG9yYWdlTmFtZXNwYWNlIDogbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQor
ICAgICAgICBpZGVudGlmaWVycy5hcHBlbmRWZWN0b3IobG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5z
dG9yYWdlQXJlYUlkZW50aWZpZXJzKCkpOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiB0cmFzaWVu
dExvY2FsU3RvcmFnZU5hbWVzcGFjZSA6IG1fdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNl
cy52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8ga2V5IDogdHJhc2llbnRMb2NhbFN0b3Jh
Z2VOYW1lc3BhY2UtPnN0b3JhZ2VBcmVhSWRlbnRpZmllcnMoKSkKLSAgICAgICAgICAgIGlkZW50
aWZpZXJzLmFwcGVuZChrZXkpOwotICAgIH0KKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYXNpZW50
TG9jYWxTdG9yYWdlTmFtZXNwYWNlIDogbV90cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2Vz
LnZhbHVlcygpKQorICAgICAgICBpZGVudGlmaWVycy5hcHBlbmRWZWN0b3IodHJhc2llbnRMb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VBcmVhSWRlbnRpZmllcnMoKSk7CiAKLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlIDogbV9zZXNzaW9uU3RvcmFnZU5h
bWVzcGFjZXMudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvIGtleSA6IHNlc3Npb25TdG9y
YWdlTmFtZXNwYWNlLT5zdG9yYWdlQXJlYUlkZW50aWZpZXJzKCkpCi0gICAgICAgICAgICBpZGVu
dGlmaWVycy5hcHBlbmQoa2V5KTsKLSAgICB9CisgICAgZm9yIChjb25zdCBhdXRvJiBzZXNzaW9u
U3RvcmFnZU5hbWVzcGFjZSA6IG1fc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQor
ICAgICAgICBpZGVudGlmaWVycy5hcHBlbmRWZWN0b3Ioc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2Ut
PnN0b3JhZ2VBcmVhSWRlbnRpZmllcnMoKSk7CiAKICAgICByZXR1cm4gaWRlbnRpZmllcnM7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvVHJh
bnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvV2ViU3RvcmFnZS9UcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuY3BwCmluZGV4
IGVlZWM1NTBlZWY2M2FlNTlhMWVhYjNhYThhNDk3YTMyYzEwNTA2MjQuLmZiOThlZDM5NDgwOTE2
MDY4NzE3MjZhZTA4NmQ1MWYxNTEyZDQ0MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9UcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9UcmFuc2llbnRM
b2NhbFN0b3JhZ2VOYW1lc3BhY2UuY3BwCkBAIC01NSwxNCArNTUsMTEgQEAgU3RvcmFnZUFyZWEm
IFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6Z2V0T3JDcmVhdGVTdG9yYWdlQXJlYShT
ZWN1cml0eU9yaWcKIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IFRyYW5zaWVudExvY2FsU3Rv
cmFnZU5hbWVzcGFjZTo6b3JpZ2lucygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7Ci0gICAgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4gb3JpZ2luczsKLQotICAg
IGZvciAoY29uc3QgYXV0byYgc3RvcmFnZUFyZWEgOiBtX3N0b3JhZ2VBcmVhTWFwLnZhbHVlcygp
KSB7Ci0gICAgICAgIGlmICghc3RvcmFnZUFyZWEtPml0ZW1zKCkuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgb3JpZ2lucy5hcHBlbmQoc3RvcmFnZUFyZWEtPnNlY3VyaXR5T3JpZ2luKCkpOwotICAg
IH0KLQotICAgIHJldHVybiBvcmlnaW5zOworICAgIHJldHVybiBXVEY6OmNvbXBhY3RNYXAobV9z
dG9yYWdlQXJlYU1hcCwgW10oYXV0byYgZW50cnkpIC0+IHN0ZDo6b3B0aW9uYWw8U2VjdXJpdHlP
cmlnaW5EYXRhPiB7CisgICAgICAgIGlmIChlbnRyeS52YWx1ZS0+aXRlbXMoKS5pc0VtcHR5KCkp
CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICByZXR1cm4gZW50cnku
dmFsdWUtPnNlY3VyaXR5T3JpZ2luKCk7CisgICAgfSk7CiB9CiAKIHZvaWQgVHJhbnNpZW50TG9j
YWxTdG9yYWdlTmFtZXNwYWNlOjpjbGVhclN0b3JhZ2VBcmVhc01hdGNoaW5nT3JpZ2luKGNvbnN0
IFNlY3VyaXR5T3JpZ2luRGF0YSYgc2VjdXJpdHlPcmlnaW4pCkBAIC04MiwxMCArNzksOSBAQCB2
b2lkIFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6Y2xlYXJBbGxTdG9yYWdlQXJlYXMo
KQogCiBWZWN0b3I8U3RvcmFnZUFyZWFJZGVudGlmaWVyPiBUcmFuc2llbnRMb2NhbFN0b3JhZ2VO
YW1lc3BhY2U6OnN0b3JhZ2VBcmVhSWRlbnRpZmllcnMoKSBjb25zdAogewotICAgIFZlY3RvcjxT
dG9yYWdlQXJlYUlkZW50aWZpZXI+IGlkZW50aWZpZXJzOwotICAgIGZvciAoYXV0byYgc3RvcmFn
ZUFyZWEgOiBtX3N0b3JhZ2VBcmVhTWFwLnZhbHVlcygpKQotICAgICAgICBpZGVudGlmaWVycy5h
cHBlbmQoc3RvcmFnZUFyZWEtPmlkZW50aWZpZXIoKSk7Ci0gICAgcmV0dXJuIGlkZW50aWZpZXJz
OworICAgIHJldHVybiBXVEY6Om1hcChtX3N0b3JhZ2VBcmVhTWFwLCBbXShhdXRvJiBlbnRyeSkg
eworICAgICAgICByZXR1cm4gZW50cnkudmFsdWUtPmlkZW50aWZpZXIoKTsKKyAgICB9KTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCmluZGV4
IGRhOWNiOGE1ZGNjMGVkN2Y5ZjRjMmUzZDJmMjc2ODk0YTAxZWQxNzQuLjNlMWFlMzEzMDI4YWQw
MDNjZDU1ZjgxZTQ2ZTVjYWUwYmYxZWFkZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3Bw
CkBAIC0yMDksOCArMjA5LDkgQEAgdm9pZCBDYWNoZTo6ZmluaXNoT3BlbmluZyhDb21wbGV0aW9u
Q2FsbGJhY2smJiBjYWxsYmFjaywgc3RkOjpvcHRpb25hbDxFcnJvcj4mJgogewogICAgIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlY29yZEluZm9ybWF0aW9uPj4gcmVjb3JkczsKICAg
ICBmb3IgKGF1dG8mIHZhbHVlIDogbV9yZWNvcmRzLnZhbHVlcygpKSB7CisgICAgICAgIHJlY29y
ZHMucmVzZXJ2ZUNhcGFjaXR5KHJlY29yZHMuc2l6ZSgpICsgdmFsdWUuc2l6ZSgpKTsKICAgICAg
ICAgZm9yIChhdXRvJiByZWNvcmQgOiB2YWx1ZSkKLSAgICAgICAgICAgIHJlY29yZHMuYXBwZW5k
KHJlY29yZCk7CisgICAgICAgICAgICByZWNvcmRzLnVuY2hlY2tlZEFwcGVuZChyZWNvcmQpOwog
ICAgIH0KICAgICBzdGQ6OnNvcnQocmVjb3Jkcy5iZWdpbigpLCByZWNvcmRzLmVuZCgpLCBbJl0o
Y29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYgYikgewogICAgICAgICByZXR1cm4gYS5nZXQoKS5p
bnNlcnRpb25UaW1lIDwgYi5nZXQoKS5pbnNlcnRpb25UaW1lOwpAQCAtNjgyLDggKzY4Myw5IEBA
IFZlY3RvcjxLZXk+IENhY2hlOjprZXlzKCkgY29uc3QKIHsKICAgICBWZWN0b3I8S2V5PiBrZXlz
OwogICAgIGZvciAoYXV0byYgcmVjb3JkcyA6IG1fcmVjb3Jkcy52YWx1ZXMoKSkgeworICAgICAg
ICBrZXlzLnJlc2VydmVDYXBhY2l0eShrZXlzLnNpemUoKSArIHJlY29yZHMuc2l6ZSgpKTsKICAg
ICAgICAgZm9yIChhdXRvJiByZWNvcmQgOiByZWNvcmRzKQotICAgICAgICAgICAga2V5cy5hcHBl
bmQocmVjb3JkLmtleSk7CisgICAgICAgICAgICBrZXlzLnVuY2hlY2tlZEFwcGVuZChyZWNvcmQu
a2V5KTsKICAgICB9CiAgICAgcmV0dXJuIGtleXM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuY3BwIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmNwcAppbmRl
eCA0MDlhMzM4OGEwYjhlY2Y5YWI3MTA0OWI3MjlmZGUzOTI3YzQ4ZWI1Li40MTM2OTQ0YjVmZjg1
ZWYyM2ZjZWU0N2VlZDgzMmYxZWQwYjYwNDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHAKQEAgLTY5
LDggKzY5LDkgQEAgU1FMaXRlU3RvcmFnZUFyZWE6OlNRTGl0ZVN0b3JhZ2VBcmVhKHVuc2lnbmVk
IHF1b3RhLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4KIHsKICAgICBBU1NFUlQoIWlzTWFp
blJ1bkxvb3AoKSk7CiAKKyAgICBtX2NhY2hlZFN0YXRlbWVudHMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShzdGF0aWNfY2FzdDxzaXplX3Q+KFN0YXRlbWVudFR5cGU6OkludmFsaWQpKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHNpemVfdD4oU3RhdGVtZW50VHlwZTo6
SW52YWxpZCk7ICsraSkKLSAgICAgICAgbV9jYWNoZWRTdGF0ZW1lbnRzLmFwcGVuZChudWxscHRy
KTsKKyAgICAgICAgbV9jYWNoZWRTdGF0ZW1lbnRzLnVuY2hlY2tlZEFwcGVuZChudWxscHRyKTsK
IH0KIAogdm9pZCBTUUxpdGVTdG9yYWdlQXJlYTo6Y2xvc2UoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgKaW5kZXggNzFlNTIyOGJmNjA4NWZlZmUwMjc4ZTZi
MWFmMzU1NTkzOTc4YjhmNi4uZTI0NzNhZmNhN2M1OTA4NjkyNDk5ZGQ5ODBhMjMwZWEyZWViNGYy
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oCkBAIC00
NDUsNyArNDQ1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW4KICAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICAgICAgdmVjdG9yLmFwcGVuZChXVEZNb3ZlKCpl
bGVtZW50KSk7CiAgICAgICAgIH0KLSAgICAgICAgdmVjdG9yLnNocmlua1RvRml0KCk7CisgICAg
ICAgIEFTU0VSVCh2ZWN0b3IuY2FwYWNpdHkoKSA9PSB2ZWN0b3Iuc2l6ZSgpKTsKICAgICAgICAg
cmV0dXJuIHZlY3RvcjsKICAgICB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkuY3BwCmluZGV4IDA0
YTY5NjgxNzhhNmY3NTk0YzI4MGVmNzMxODE5OGNiNjMyYjkyMzAuLmJjY2MwNTUwNzcxNzc5NzY2
OGY5YzlkY2YxMDMxMDkxMTFiOThhZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS5jcHAKQEAgLTkz
LDkgKzkzLDkgQEAgdm9pZCBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTo6c2hvd1BheW1lbnRV
SShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBkZXN0aW5hdGkKIAogICAgIFVSTCBvcmlnaW5hdGlu
Z1VSTChVUkwoKSwgb3JpZ2luYXRpbmdVUkxTdHJpbmcpOwogCi0gICAgVmVjdG9yPFVSTD4gbGlu
a0ljb25VUkxzOwotICAgIGZvciAoY29uc3QgYXV0byYgbGlua0ljb25VUkxTdHJpbmcgOiBsaW5r
SWNvblVSTFN0cmluZ3MpCi0gICAgICAgIGxpbmtJY29uVVJMcy5hcHBlbmQoVVJMKFVSTCgpLCBs
aW5rSWNvblVSTFN0cmluZykpOworICAgIGF1dG8gbGlua0ljb25VUkxzID0gbGlua0ljb25VUkxT
dHJpbmdzLm1hcChbXShhdXRvJiBsaW5rSWNvblVSTFN0cmluZykgeworICAgICAgICByZXR1cm4g
VVJMKFVSTCgpLCBsaW5rSWNvblVSTFN0cmluZyk7CisgICAgfSk7CiAKICAgICBwbGF0Zm9ybVNo
b3dQYXltZW50VUkod2ViUGFnZVByb3h5SUQsIG9yaWdpbmF0aW5nVVJMLCBsaW5rSWNvblVSTHMs
IHBheW1lbnRSZXF1ZXN0LCBbdGhpcywgd2Vha1RoaXMgPSBXZWFrUHRyIHsgKnRoaXMgfV0oYm9v
bCByZXN1bHQpIHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uLmNwcAppbmRleCA4ODQ2NmM0OWVkMGRlMThlMjAzMmNh
YTBhMDQ2NDgzOWVhNzQ1MTAxLi40YTg4OTAzOWU5NGE2MmZhNTkyZjE5NTdmNzZkODU5ZTc5Yzlm
YzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb24uY3Bw
CkBAIC02MiwxMCArNjIsMTAgQEAgTmF2aWdhdGlvbjo6TmF2aWdhdGlvbihXZWJOYXZpZ2F0aW9u
U3RhdGUmIHN0YXRlLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiByZXEKICAgICA6IG1fbmF2
aWdhdGlvbklEKHN0YXRlLmdlbmVyYXRlTmF2aWdhdGlvbklEKCkpCiAgICAgLCBtX29yaWdpbmFs
UmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKQogICAgICwgbV9jdXJyZW50UmVxdWVzdChtX29yaWdp
bmFsUmVxdWVzdCkKKyAgICAsIG1fcmVkaXJlY3RDaGFpbiB7IG1fb3JpZ2luYWxSZXF1ZXN0LnVy
bCgpIH0KICAgICAsIG1fZnJvbUl0ZW0oZnJvbUl0ZW0pCiAgICAgLCBtX2NsaWVudE5hdmlnYXRp
b25BY3Rpdml0eShuYXZpZ2F0aW9uQWN0aXZpdHlUaW1lb3V0KQogewotICAgIG1fcmVkaXJlY3RD
aGFpbi5hcHBlbmQobV9vcmlnaW5hbFJlcXVlc3QudXJsKCkpOwogfQogCiBOYXZpZ2F0aW9uOjpO
YXZpZ2F0aW9uKFdlYk5hdmlnYXRpb25TdGF0ZSYgc3RhdGUsIFdlYkJhY2tGb3J3YXJkTGlzdEl0
ZW0mIHRhcmdldEl0ZW0sIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIGZyb21JdGVtLCBGcmFtZUxv
YWRUeXBlIGJhY2tGb3J3YXJkRnJhbWVMb2FkVHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1dLU2hhcmVTaGVldC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1dLU2hhcmVTaGVldC5tbQppbmRleCBlMzRkNTcwYTU5YmVjMjZmYmY2YmUzYTZk
ZjY0NmU1MDlhZWYxNjMzLi43NWUyODM0NTEzZTE4YjVhZjZiNTIyNDcyYjM4NzlkOWQ3MTE3YjFm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NoYXJlU2hlZXQu
bW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tTaGFyZVNoZWV0Lm1tCkBA
IC05Niw5ICs5Niw5IEBAIHN0YXRpYyB2b2lkIGFwcGVuZEZpbGVzQXNTaGFyZWFibGVVUkxzKFJl
dGFpblB0cjxOU011dGFibGVBcnJheT4mJiBzaGFyZURhdGFBcnJhCiAgICAgICAgIFN0cmluZyBm
aWxlTmFtZTsKICAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gZmlsZURhdGE7CiAgICAgfTsKLSAg
ICBWZWN0b3I8RmlsZVdyaXRlVGFzaz4gZmlsZVdyaXRlVGFza3M7Ci0gICAgZm9yIChhdXRvJiBm
aWxlIDogZmlsZXMpCi0gICAgICAgIGZpbGVXcml0ZVRhc2tzLmFwcGVuZCh7IGZpbGUuZmlsZU5h
bWUuaXNvbGF0ZWRDb3B5KCksIGZpbGUuZmlsZURhdGEtPmNyZWF0ZU5TRGF0YSgpIH0pOworICAg
IGF1dG8gZmlsZVdyaXRlVGFza3MgPSBmaWxlcy5tYXAoW10oYXV0byYgZmlsZSkgeworICAgICAg
ICByZXR1cm4gRmlsZVdyaXRlVGFzayB7IGZpbGUuZmlsZU5hbWUuaXNvbGF0ZWRDb3B5KCksIGZp
bGUuZmlsZURhdGEtPmNyZWF0ZU5TRGF0YSgpIH07CisgICAgfSk7CiAKICAgICBhdXRvIHF1ZXVl
ID0gV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBsZS5XZWJLaXQuV0tTaGFyZVNoZWV0LlNoYXJl
YWJsZUZpbGVXcml0ZXIiKTsKICAgICBxdWV1ZS0+ZGlzcGF0Y2goW3NoYXJlRGF0YUFycmF5ID0g
V1RGTW92ZShzaGFyZURhdGFBcnJheSksIGZpbGVXcml0ZVRhc2tzID0gV1RGTW92ZShmaWxlV3Jp
dGVUYXNrcyksIHRlbXBvcmFyeURpcmVjdG9yeSA9IHJldGFpblB0cih0ZW1wb3JhcnlEaXJlY3Rv
cnkpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFn
ZVByb3h5Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJv
eHlDb2NvYS5tbQppbmRleCAzOWE4Yzg3YTEzZjkxZDZlYTg5YjA3Njg0ZTAyYzRhYTU4NTdmMjFk
Li42YWVhOGQ0YzU1NWY3YTMwYTI3MDkzYjZhYTBiOWM0MGEwOTM0NDEyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQpAQCAtNjYy
LDE0ICs2NjIsMTIgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlc3RvcmVBcHBIaWdobGlnaHRzQW5k
U2Nyb2xsVG9JbmRleChjb25zdCBWZWN0b3I8UmVmPFNoYXJlZE0KICAgICBpZiAoIWhhc1J1bm5p
bmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxTaGFyZWRNZW1vcnk6
OklQQ0hhbmRsZT4gbWVtb3J5SGFuZGxlczsKLQotICAgIGZvciAoYXV0byBoaWdobGlnaHQgOiBo
aWdobGlnaHRzKSB7CisgICAgYXV0byBtZW1vcnlIYW5kbGVzID0gV1RGOjpjb21wYWN0TWFwKGhp
Z2hsaWdodHMsIFtdKGF1dG8mIGhpZ2hsaWdodCkgLT4gc3RkOjpvcHRpb25hbDxTaGFyZWRNZW1v
cnk6OklQQ0hhbmRsZT4gewogICAgICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7Ci0g
ICAgICAgIGhpZ2hsaWdodC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90
ZWN0aW9uOjpSZWFkT25seSk7Ci0KLSAgICAgICAgbWVtb3J5SGFuZGxlcy5hcHBlbmQoU2hhcmVk
TWVtb3J5OjpJUENIYW5kbGUgeyBXVEZNb3ZlKGhhbmRsZSksIGhpZ2hsaWdodC0+c2l6ZSgpIH0p
OwotICAgIH0KKyAgICAgICAgaWYgKCFoaWdobGlnaHQtPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNo
YXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpKQorICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIHsgV1RG
TW92ZShoYW5kbGUpLCBoaWdobGlnaHQtPnNpemUoKSB9OworICAgIH0pOwogICAgIAogICAgIHNl
dFVwSGlnaGxpZ2h0c09ic2VydmVyKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0ZyYW1lTG9hZFN0YXRlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0ZyYW1l
TG9hZFN0YXRlLmNwcAppbmRleCBjNjFiZWQ4MWQwOTI4NDYzMmJmMjk2NWVkMmM5OWIwYzZmZTQw
MWEzLi42OWU1M2Q3YmViODZjZTZiNDA2ZjNjZGI4MzkyYWI3MmEzZmZjODI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9GcmFtZUxvYWRTdGF0ZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwCkBAIC05MCwxMSArOTAsOCBAQCB2
b2lkIEZyYW1lTG9hZFN0YXRlOjpkaWRGaW5pc2hMb2FkKCkKIAogICAgIG1fc3RhdGUgPSBTdGF0
ZTo6RmluaXNoZWQ7CiAKLSAgICBWZWN0b3I8T2JzZXJ2ZXIqPiBvYnNlcnZlcnNDb3B5OwotICAg
IGZvciAoYXV0byYgb2JzZXJ2ZXIgOiBtX29ic2VydmVycykKLSAgICAgICAgb2JzZXJ2ZXJzQ29w
eS5hcHBlbmQoJm9ic2VydmVyKTsKLSAgICBmb3IgKGF1dG8qIG9ic2VydmVyIDogb2JzZXJ2ZXJz
Q29weSkKLSAgICAgICAgb2JzZXJ2ZXItPmRpZEZpbmlzaExvYWQoKTsKKyAgICBmb3IgKGF1dG8m
IG9ic2VydmVyIDogY29weVRvVmVjdG9yT2Y8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxPYnNlcnZl
cj4+KG1fb2JzZXJ2ZXJzKSkKKyAgICAgICAgb2JzZXJ2ZXIuZ2V0KCkuZGlkRmluaXNoTG9hZCgp
OwogfQogCiB2b2lkIEZyYW1lTG9hZFN0YXRlOjpkaWRGYWlsTG9hZCgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcApp
bmRleCA4MzFiMjFhNWYwM2ZhNDZhYjg0MDgwMWE5NDkxOTY3MzlkYTA2N2ViLi45MjJhMGRiOGFl
ZTZlMDA0YTYzYzUyMzAwODBlNWM2Y2Y3ZjYxMzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKQEAgLTE4Myw4
ICsxODMsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRl
cnNUb05ld1Byb2Nlc3MoKQogICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xv
Y2FsID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hl
bWVzVG9SZWdpc3RlckFzTG9jYWwoKSk7CiAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0
ZXJlZEFzTm9BY2Nlc3MgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmds
ZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsKICAgICBwYXJhbWV0ZXJzLmNh
Y2hlTW9kZWwgPSBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgp
OwotICAgIGZvciAoYXV0byYgc2NoZW1lIDogV2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRo
Q3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKQotICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNS
ZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOworICAgIHBhcmFtZXRl
cnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMgPSBXZWJQcm9jZXNzUG9v
bDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCk7CisKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQogICAgIGlmIChTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSA9IFdl
YlByb2Nlc3NQb29sOjpjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7ICFjb29raWVTdG9yYWdlRGly
ZWN0b3J5LmlzRW1wdHkoKSkgewogICAgICAgICBpZiAoYXV0byBoYW5kbGUgPSBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29va2llU3RvcmFnZURp
cmVjdG9yeSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVu
dC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAKaW5kZXgg
ZmEyNTRjMmRhZGMwNjMwMjhkZmQ1MDRkMjg5MGE4OTJhZWRhZmIwOC4uNWJiZTczOTYyMDUyN2E4
MjdjZDU3ZjE2OWFmMmYwYzBjNTk2YTcwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJv
bGxlclByb3h5LmNwcApAQCAtMTE3LDExICsxMTcsMTEgQEAgVXNlckNvbnRlbnRDb250cm9sbGVy
UGFyYW1ldGVycyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cGFyYW1ldGVycygpIGNv
bnMKICAgICBwYXJhbWV0ZXJzLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyKCk7CiAgICAgCiAgICAg
QVNTRVJUKHBhcmFtZXRlcnMudXNlckNvbnRlbnRXb3JsZHMuaXNFbXB0eSgpKTsKLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIGlkZW50aWZpZXIgOiBtX2Fzc29jaWF0ZWRDb250ZW50V29ybGRzKSB7Cisg
ICAgcGFyYW1ldGVycy51c2VyQ29udGVudFdvcmxkcyA9IFdURjo6bWFwKG1fYXNzb2NpYXRlZENv
bnRlbnRXb3JsZHMsIFtdKGF1dG8mIGlkZW50aWZpZXIpIHsKICAgICAgICAgYXV0byogd29ybGQg
PSBBUEk6OkNvbnRlbnRXb3JsZDo6d29ybGRGb3JJZGVudGlmaWVyKGlkZW50aWZpZXIpOwogICAg
ICAgICBSRUxFQVNFX0FTU0VSVCh3b3JsZCk7Ci0gICAgICAgIHBhcmFtZXRlcnMudXNlckNvbnRl
bnRXb3JsZHMuYXBwZW5kKHdvcmxkLT53b3JsZERhdGEoKSk7Ci0gICAgfQorICAgICAgICByZXR1
cm4gd29ybGQtPndvcmxkRGF0YSgpOworICAgIH0pOwogCiAgICAgZm9yIChhdXRvIHVzZXJTY3Jp
cHQgOiBtX3VzZXJTY3JpcHRzLT5lbGVtZW50c09mVHlwZTxBUEk6OlVzZXJTY3JpcHQ+KCkpCiAg
ICAgICAgIHBhcmFtZXRlcnMudXNlclNjcmlwdHMuYXBwZW5kKHsgdXNlclNjcmlwdC0+aWRlbnRp
ZmllcigpLCB1c2VyU2NyaXB0LT5jb250ZW50V29ybGQoKS5pZGVudGlmaWVyKCksIHVzZXJTY3Jp
cHQtPnVzZXJTY3JpcHQoKSB9KTsKQEAgLTEyOSw4ICsxMjksOSBAQCBVc2VyQ29udGVudENvbnRy
b2xsZXJQYXJhbWV0ZXJzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpwYXJhbWV0ZXJz
KCkgY29ucwogICAgIGZvciAoYXV0byB1c2VyU3R5bGVTaGVldCA6IG1fdXNlclN0eWxlU2hlZXRz
LT5lbGVtZW50c09mVHlwZTxBUEk6OlVzZXJTdHlsZVNoZWV0PigpKQogICAgICAgICBwYXJhbWV0
ZXJzLnVzZXJTdHlsZVNoZWV0cy5hcHBlbmQoeyB1c2VyU3R5bGVTaGVldC0+aWRlbnRpZmllcigp
LCB1c2VyU3R5bGVTaGVldC0+Y29udGVudFdvcmxkKCkuaWRlbnRpZmllcigpLCB1c2VyU3R5bGVT
aGVldC0+dXNlclN0eWxlU2hlZXQoKSB9KTsKIAotICAgIGZvciAoYXV0byYgaGFuZGxlciA6IG1f
c2NyaXB0TWVzc2FnZUhhbmRsZXJzLnZhbHVlcygpKQotICAgICAgICBwYXJhbWV0ZXJzLm1lc3Nh
Z2VIYW5kbGVycy5hcHBlbmQoeyBoYW5kbGVyLT5pZGVudGlmaWVyKCksIGhhbmRsZXItPndvcmxk
KCkuaWRlbnRpZmllcigpLCBoYW5kbGVyLT5uYW1lKCkgfSk7CisgICAgcGFyYW1ldGVycy5tZXNz
YWdlSGFuZGxlcnMgPSBXVEY6Om1hcChtX3NjcmlwdE1lc3NhZ2VIYW5kbGVycywgW10oYXV0byBl
bnRyeSkgeworICAgICAgICByZXR1cm4gV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXJEYXRhIHsgZW50
cnkudmFsdWUtPmlkZW50aWZpZXIoKSwgZW50cnkudmFsdWUtPndvcmxkKCkuaWRlbnRpZmllcigp
LCBlbnRyeS52YWx1ZS0+bmFtZSgpIH07CisgICAgfSk7CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9F
WFRFTlNJT05TKQogICAgIHBhcmFtZXRlcnMuY29udGVudFJ1bGVMaXN0cyA9IGNvbnRlbnRSdWxl
TGlzdERhdGEoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhl
bnRpY2F0aW9uL0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmNwcAppbmRleCA5MzQ4
MGVkNWNiMzlhNjFjYmNmNjczNTFlMGE4ODBlYTA5ZmU0NDc2Li42NTcyZjUzOTU5OGVmNDFkZDEw
MzA1YWNlZWM4ZjE4N2Q4ZDUyNTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJBdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRvck1hbmFnZXIu
Y3BwCkBAIC00MTYsMTEgKzQxNiwxMSBAQCB2b2lkIEF1dGhlbnRpY2F0b3JNYW5hZ2VyOjpzdGFy
dERpc2NvdmVyeShjb25zdCBUcmFuc3BvcnRTZXQmIHRyYW5zcG9ydHMpCiB7CiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBBU1NFUlQobV9zZXJ2aWNlcy5pc0VtcHR5KCkgJiYg
dHJhbnNwb3J0cy5zaXplKCkgPD0gbWF4VHJhbnNwb3J0TnVtYmVyKTsKLSAgICBmb3IgKGF1dG8m
IHRyYW5zcG9ydCA6IHRyYW5zcG9ydHMpIHsKKyAgICBtX3NlcnZpY2VzID0gV1RGOjptYXAodHJh
bnNwb3J0cywgW3RoaXNdKGF1dG8mIHRyYW5zcG9ydCkgewogICAgICAgICBhdXRvIHNlcnZpY2Ug
PSBjcmVhdGVTZXJ2aWNlKHRyYW5zcG9ydCwgKnRoaXMpOwogICAgICAgICBzZXJ2aWNlLT5zdGFy
dERpc2NvdmVyeSgpOwotICAgICAgICBtX3NlcnZpY2VzLmFwcGVuZChXVEZNb3ZlKHNlcnZpY2Up
KTsKLSAgICB9CisgICAgICAgIHJldHVybiBzZXJ2aWNlOworICAgIH0pOwogfQogCiB2b2lkIEF1
dGhlbnRpY2F0b3JNYW5hZ2VyOjppbml0VGltZU91dFRpbWVyKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwCmluZGV4IGM3NDM0M2U2NWI4ODlmNzg2
OWRjOGNjYTM0MDUxYjhiMjY1NDAyYjYuLmRlYzllODM5MjIzNjhmZTYxNTVlMDNkNjlhM2YzN2Q5
ZGJmMDE3NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkJhY2tGb3J3
YXJkTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRM
aXN0LmNwcApAQCAtMzQwLDE2ICszNDAsMTEgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3Q6OnJl
bW92ZUFsbEl0ZW1zKCkKIAogICAgIExPRyhCYWNrRm9yd2FyZCwgIihCYWNrL0ZvcndhcmQpIFdl
YkJhY2tGb3J3YXJkTGlzdCAlcCByZW1vdmVBbGxJdGVtcyAoaGFzICV6dSBvZiB0aGVtKSIsIHRo
aXMsIG1fZW50cmllcy5zaXplKCkpOwogCi0gICAgVmVjdG9yPFJlZjxXZWJCYWNrRm9yd2FyZExp
c3RJdGVtPj4gcmVtb3ZlZEl0ZW1zOwotCi0gICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fZW50cmll
cykgeworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2VudHJpZXMpCiAgICAgICAgIGRpZFJlbW92
ZUl0ZW0oZW50cnkpOwotICAgICAgICByZW1vdmVkSXRlbXMuYXBwZW5kKFdURk1vdmUoZW50cnkp
KTsKLSAgICB9CiAKLSAgICBtX2VudHJpZXMuY2xlYXIoKTsKICAgICBtX2N1cnJlbnRJbmRleCA9
IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3BhZ2UtPmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdChudWxs
cHRyLCBXVEZNb3ZlKHJlbW92ZWRJdGVtcykpOworICAgIG1fcGFnZS0+ZGlkQ2hhbmdlQmFja0Zv
cndhcmRMaXN0KG51bGxwdHIsIHN0ZDo6ZXhjaGFuZ2UobV9lbnRyaWVzLCB7IH0pKTsKIH0KIAog
dm9pZCBXZWJCYWNrRm9yd2FyZExpc3Q6OmNsZWFyKCkKQEAgLTM2MywyMSArMzU4LDE3IEBAIHZv
aWQgV2ViQmFja0ZvcndhcmRMaXN0OjpjbGVhcigpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJl
ZlB0cjxXZWJCYWNrRm9yd2FyZExpc3RJdGVtPiBjdXJyZW50SXRlbSA9IHRoaXMtPmN1cnJlbnRJ
dGVtKCk7Ci0gICAgVmVjdG9yPFJlZjxXZWJCYWNrRm9yd2FyZExpc3RJdGVtPj4gcmVtb3ZlZEl0
ZW1zOwogCiAgICAgaWYgKCFjdXJyZW50SXRlbSkgewogICAgICAgICAvLyBXZSBzaG91bGQgb25s
eSBldmVyIGhhdmUgbm8gY3VycmVudCBpdGVtIGlmIHdlIGFsc28gaGF2ZSBubyBjdXJyZW50IGl0
ZW0gaW5kZXguCiAgICAgICAgIEFTU0VSVCghbV9jdXJyZW50SW5kZXgpOwogCiAgICAgICAgIC8v
IEJ1dCBqdXN0IGluIGNhc2UgaXQgZG9lcyBoYXBwZW4gaW4gcHJhY3RpY2Ugd2Ugc2hvdWxkIGdl
dCBiYWNrIGludG8gYSBjb25zaXN0ZW50IHN0YXRlIG5vdy4KLSAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIGRpZFJlbW92ZUl0ZW0obV9lbnRy
aWVzW2ldKTsKLSAgICAgICAgICAgIHJlbW92ZWRJdGVtcy5hcHBlbmQoV1RGTW92ZShtX2VudHJp
ZXNbaV0pKTsKLSAgICAgICAgfQorICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9lbnRyaWVz
KQorICAgICAgICAgICAgZGlkUmVtb3ZlSXRlbShlbnRyeSk7CiAKLSAgICAgICAgbV9lbnRyaWVz
LmNsZWFyKCk7CiAgICAgICAgIG1fY3VycmVudEluZGV4ID0gc3RkOjpudWxsb3B0OwotICAgICAg
ICBtX3BhZ2UtPmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdChudWxscHRyLCBXVEZNb3ZlKHJlbW92
ZWRJdGVtcykpOworICAgICAgICBtX3BhZ2UtPmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdChudWxs
cHRyLCBzdGQ6OmV4Y2hhbmdlKG1fZW50cmllcywgeyB9KSk7CiAKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTM4Nyw2ICszNzgsNyBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6Y2xlYXIo
KQogICAgICAgICAgICAgZGlkUmVtb3ZlSXRlbShtX2VudHJpZXNbaV0pOwogICAgIH0KIAorICAg
IFZlY3RvcjxSZWY8V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4+IHJlbW92ZWRJdGVtczsKICAgICBy
ZW1vdmVkSXRlbXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplIC0gMSk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgaWYgKG1fY3VycmVudEluZGV4
ICYmIGkgIT0gKm1fY3VycmVudEluZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Bvb2wuY3BwCmluZGV4IGZhMTc0MmNmMzJkYTk5NTI3MzIzZGZjN2M4YmYwYTc5MDYzMDQx
ZmUuLjYxYmQzMGEzNjQxNDczYzVkYjJjNTc0MzBlOTNjYjdlMjY2M2FkODkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKQEAgLTg0OSwxMCArODQ5LDkgQEAg
dm9pZCBXZWJQcm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MoV2ViUHJvY2Vzc1By
b3h5JiBwcm9jZXNzLCBXZWJzaXRlRGEKICAgICAgICAgICAgIHBhcmFtZXRlcnMuaW5qZWN0ZWRC
dW5kbGVQYXRoRXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaGFuZGxlKTsKICAgICB9CiAKLSAg
ICBmb3IgKGF1dG8mIHBhdGggOiBtX3Jlc29sdmVkUGF0aHMuYWRkaXRpb25hbFdlYlByb2Nlc3NT
YW5kYm94RXh0ZW5zaW9uUGF0aHMpIHsKLSAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0gIFNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZVdpdGhvdXRSZXNvbHZpbmdQYXRoKHBhdGgsIFNhbmRi
b3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5KSkKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuYWRk
aXRpb25hbFNhbmRib3hFeHRlbnNpb25IYW5kbGVzLmFwcGVuZChXVEZNb3ZlKCpoYW5kbGUpKTsK
LSAgICB9CisgICAgcGFyYW1ldGVycy5hZGRpdGlvbmFsU2FuZGJveEV4dGVuc2lvbkhhbmRsZXMg
PSBXVEY6OmNvbXBhY3RNYXAobV9yZXNvbHZlZFBhdGhzLmFkZGl0aW9uYWxXZWJQcm9jZXNzU2Fu
ZGJveEV4dGVuc2lvblBhdGhzLCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVXaXRob3V0UmVzb2x2aW5nUGF0aChwYXRoLCBTYW5k
Ym94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25seSk7CisgICAgfSk7CiAKICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQogICAgIHNldEphdmFTY3JpcHRDb25maWd1cmF0aW9uRmlsZUVuYWJsZWRGcm9t
RGVmYXVsdHMoKTsKQEAgLTE4NzAsMTQgKzE4NjksOSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpy
ZW1vdmVQcm9jZXNzRnJvbU9yaWdpbkNhY2hlU2V0KFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykK
ICAgICBMT0coUHJvY2Vzc1N3YXBwaW5nLCAiKFByb2Nlc3NTd2FwcGluZykgUmVtb3ZpbmcgcHJv
Y2VzcyB3aXRoIHBpZCAlaSBmcm9tIHRoZSBvcmlnaW4gY2FjaGUgc2V0IiwgcHJvY2Vzcy5wcm9j
ZXNzSWRlbnRpZmllcigpKTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSB2ZXJ5IGluZWZm
aWNpZW50IGFzIHRoZSBudW1iZXIgb2YgcmVtZW1iZXJlZCBvcmlnaW5zIGFuZCBwcm9jZXNzZXMg
Z3Jvd3MKLSAgICBWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IHJlZ2lzdHJhYmxl
RG9tYWluc1RvUmVtb3ZlOwotICAgIGZvciAoYXV0byBlbnRyeSA6IG1fc3dhcHBlZFByb2Nlc3Nl
c1BlclJlZ2lzdHJhYmxlRG9tYWluKSB7Ci0gICAgICAgIGlmIChlbnRyeS52YWx1ZSA9PSAmcHJv
Y2VzcykKLSAgICAgICAgICAgIHJlZ2lzdHJhYmxlRG9tYWluc1RvUmVtb3ZlLmFwcGVuZChlbnRy
eS5rZXkpOwotICAgIH0KLQotICAgIGZvciAoYXV0byYgcmVnaXN0cmFibGVEb21haW4gOiByZWdp
c3RyYWJsZURvbWFpbnNUb1JlbW92ZSkKLSAgICAgICAgbV9zd2FwcGVkUHJvY2Vzc2VzUGVyUmVn
aXN0cmFibGVEb21haW4ucmVtb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKTsKKyAgICBtX3N3YXBwZWRQ
cm9jZXNzZXNQZXJSZWdpc3RyYWJsZURvbWFpbi5yZW1vdmVJZihbJl0oYXV0byYgZW50cnkpIHsK
KyAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlID09ICZwcm9jZXNzOworICAgIH0pOwogfQogCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzRm9yTmF2aWdhdGlvbihXZWJQYWdlUHJveHkmIHBh
Z2UsIGNvbnN0IEFQSTo6TmF2aWdhdGlvbiYgbmF2aWdhdGlvbiwgUmVmPFdlYlByb2Nlc3NQcm94
eT4mJiBzb3VyY2VQcm9jZXNzLCBjb25zdCBVUkwmIHNvdXJjZVVSTCwgUHJvY2Vzc1N3YXBSZXF1
ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBXZWJQcm9jZXNzUHJv
eHk6OkNhcHRpdmVQb3J0YWxNb2RlIGNhcHRpdmVQb3J0YWxNb2RlLCBjb25zdCBGcmFtZUluZm9E
YXRhJiBmcmFtZUluZm8sIFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmIGRhdGFTdG9yZSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmLCBTdXNwZW5kZWRQYWdlUHJv
eHkqLCBjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCmluZGV4IGIxMjg2MGRmNTEwYmM0ZTNkZmJi
N2UzZmM5MjBiNWQwNDJiODQzMjEuLjM2OGEzOTU4N2RhMzNkZTY0YzFiODlkMGU2MzhkMzhiODhk
N2ExN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94
eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApA
QCAtOTM2LDggKzkzNiw5IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojpwcm9jZXNzRGlkVGVybWlu
YXRlT3JGYWlsZWRUb0xhdW5jaChQcm9jZXNzVGVybWluYXRpb25SZWFzCiAKICAgICAvLyBUaGVy
ZSBpcyBhIG5lc3RlZCB0cmFuc2FjdGlvbiBpbiBXZWJQYWdlUHJveHk6OnJlc2V0U3RhdGVBZnRl
clByb2Nlc3NFeGl0ZWQoKSB0aGF0IHdlIGRvbid0IHdhbnQgdG8gY29tbWl0IGJlZm9yZSB0aGUg
Y2xpZW50IGNhbGwgYmVsb3cgKGRpc3BhdGNoUHJvY2Vzc0RpZFRlcm1pbmF0ZSkuCiAgICAgVmVj
dG9yPFBhZ2VMb2FkU3RhdGU6OlRyYW5zYWN0aW9uPiBwYWdlTG9hZFN0YXRlVHJhbnNhY3Rpb25z
OworICAgIHBhZ2VMb2FkU3RhdGVUcmFuc2FjdGlvbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShw
YWdlcy5zaXplKCkpOwogICAgIGZvciAoYXV0byYgcGFnZSA6IHBhZ2VzKSB7Ci0gICAgICAgIHBh
Z2VMb2FkU3RhdGVUcmFuc2FjdGlvbnMuYXBwZW5kKHBhZ2UtPnBhZ2VMb2FkU3RhdGUoKS50cmFu
c2FjdGlvbigpKTsKKyAgICAgICAgcGFnZUxvYWRTdGF0ZVRyYW5zYWN0aW9ucy51bmNoZWNrZWRB
cHBlbmQocGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnRyYW5zYWN0aW9uKCkpOwogICAgICAgICBwYWdl
LT5yZXNldFN0YXRlQWZ0ZXJQcm9jZXNzVGVybWluYXRpb24ocmVhc29uKTsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRh
U3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURh
dGFTdG9yZS5jcHAKaW5kZXggYjM2ZDlhNzRiOWExNzVhMDgxNmI3YTJlMTRmMTM5ZGI1ZWY1NmU2
ZC4uZGZhN2IyYTRjNzU5OTkyYmJjMjViYTZhYjllY2JiMGIyODJjNDQ3OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9y
ZS5jcHAKQEAgLTQzMSw4ICs0MzEsMTAgQEAgcHJpdmF0ZToKICAgICBpZiAoZGF0YVR5cGVzLmNv
bnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlKSkgewogICAgICAgICBtX3F1ZXVlLT5k
aXNwYXRjaChbbWVkaWFDYWNoZURpcmVjdG9yeSA9IG1fY29uZmlndXJhdGlvbi0+bWVkaWFDYWNo
ZURpcmVjdG9yeSgpLmlzb2xhdGVkQ29weSgpLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKICAgICAg
ICAgICAgIFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhOwotICAgICAgICAgICAgZm9yIChhdXRvJiBv
cmlnaW4gOiBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpvcmlnaW5zSW5NZWRpYUNhY2hlKG1l
ZGlhQ2FjaGVEaXJlY3RvcnkpKQotICAgICAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMu
YXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpEaXNr
Q2FjaGUsIDAgfSk7CisgICAgICAgICAgICBhdXRvIG9yaWdpbnMgPSBXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50OjpvcmlnaW5zSW5NZWRpYUNhY2hlKG1lZGlhQ2FjaGVEaXJlY3RvcnkpOworICAg
ICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcyA9IFdURjo6bWFwKG9yaWdpbnMsIFtdKGF1dG8m
IG9yaWdpbikgeworICAgICAgICAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0YTo6RW50cnkgeyBv
cmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlLCAwIH07CisgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkV2Vic2l0ZURhdGEoV1RGTW92ZSh3
ZWJzaXRlRGF0YSkpOwogICAgICAgICB9KTsKICAgICB9CkBAIC00NjksOCArNDcxLDkgQEAgcHJp
dmF0ZToKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RGV2aWNl
SWRIYXNoU2FsdCkpIHsKICAgICAgICAgbV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS0+Z2V0RGV2
aWNlSWRIYXNoU2FsdE9yaWdpbnMoW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byYmIG9yaWdpbnMp
IHsKICAgICAgICAgICAgIFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhOwotICAgICAgICAgICAgd2hp
bGUgKCFvcmlnaW5zLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRy
aWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW5zLnRha2VBbnkoKSwgV2Vic2l0
ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0LCAwIH0pOworICAgICAgICAgICAgd2Vic2l0ZURh
dGEuZW50cmllcyA9IFdURjo6bWFwKG9yaWdpbnMsIFtdKGF1dG8mIG9yaWdpbikgeworICAgICAg
ICAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRh
VHlwZTo6RGV2aWNlSWRIYXNoU2FsdCwgMCB9OworICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFdlYnNpdGVEYXRhKFdURk1vdmUod2Vic2l0ZURhdGEp
KTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtNDc5LDEwICs0ODIsMTEgQEAgcHJpdmF0ZToKICAg
ICAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW2ZldGNoT3B0aW9ucywgYXBwbGljYXRpb25DYWNoZURp
cmVjdG9yeSA9IG1fY29uZmlndXJhdGlvbi0+YXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSgpLmlz
b2xhdGVkQ29weSgpLCBhcHBsaWNhdGlvbkNhY2hlRmxhdEZpbGVTdWJkaXJlY3RvcnlOYW1lID0g
bV9jb25maWd1cmF0aW9uLT5hcHBsaWNhdGlvbkNhY2hlRmxhdEZpbGVTdWJkaXJlY3RvcnlOYW1l
KCkuaXNvbGF0ZWRDb3B5KCksIGNhbGxiYWNrQWdncmVnYXRvcl0gewogICAgICAgICAgICAgYXV0
byBzdG9yYWdlID0gV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNyZWF0ZShhcHBs
aWNhdGlvbkNhY2hlRGlyZWN0b3J5LCBhcHBsaWNhdGlvbkNhY2hlRmxhdEZpbGVTdWJkaXJlY3Rv
cnlOYW1lKTsKICAgICAgICAgICAgIFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhOwotICAgICAgICAg
ICAgZm9yIChhdXRvJiBvcmlnaW4gOiBzdG9yYWdlLT5vcmlnaW5zV2l0aENhY2hlKCkpIHsKKyAg
ICAgICAgICAgIGF1dG8gb3JpZ2lucyA9IHN0b3JhZ2UtPm9yaWdpbnNXaXRoQ2FjaGUoKTsKKyAg
ICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMgPSBXVEY6Om1hcChvcmlnaW5zLCBbJl0oYXV0
byYgb3JpZ2luKSB7CiAgICAgICAgICAgICAgICAgdWludDY0X3Qgc2l6ZSA9IGZldGNoT3B0aW9u
cy5jb250YWlucyhXZWJzaXRlRGF0YUZldGNoT3B0aW9uOjpDb21wdXRlU2l6ZXMpID8gc3RvcmFn
ZS0+ZGlza1VzYWdlRm9yT3JpZ2luKG9yaWdpbikgOiAwOwotICAgICAgICAgICAgICAgIHdlYnNp
dGVEYXRhLmVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0
ZURhdGFUeXBlOjpPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZSwgc2l6ZSB9KTsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2lu
LCBXZWJzaXRlRGF0YVR5cGU6Ok9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlLCBzaXplIH07Cisg
ICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkV2Vic2l0
ZURhdGEoV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICB9KTsKICAgICB9CkBAIC00OTAs
OCArNDk0LDkgQEAgcHJpdmF0ZToKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVE
YXRhVHlwZTo6V2ViU1FMRGF0YWJhc2VzKSAmJiBpc1BlcnNpc3RlbnQoKSkgewogICAgICAgICBt
X3F1ZXVlLT5kaXNwYXRjaChbd2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRp
b24tPndlYlNRTERhdGFiYXNlRGlyZWN0b3J5KCkuaXNvbGF0ZWRDb3B5KCksIGNhbGxiYWNrQWdn
cmVnYXRvcl0oKSB7CiAgICAgICAgICAgICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsKLSAgICAg
ICAgICAgIGZvciAoYXV0byYgb3JpZ2luIDogV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFj
a2VyV2l0aERhdGFiYXNlUGF0aCh3ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSktPm9yaWdpbnMoKSkK
LSAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6
RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6V2ViU1FMRGF0YWJhc2VzLCAwIH0pOwor
ICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcyA9IFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tl
cjo6dHJhY2tlcldpdGhEYXRhYmFzZVBhdGgod2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkpLT5vcmln
aW5zKCkubWFwKFtdKGF1dG8mIG9yaWdpbikgeworICAgICAgICAgICAgICAgIHJldHVybiBXZWJz
aXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6V2ViU1FMRGF0YWJhc2Vz
LCAwIH07CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+
YWRkV2Vic2l0ZURhdGEoV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICB9KTsKICAgICB9
CkBAIC00OTksOCArNTA0LDkgQEAgcHJpdmF0ZToKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5z
KFdlYnNpdGVEYXRhVHlwZTo6TWVkaWFLZXlzKSAmJiBpc1BlcnNpc3RlbnQoKSkgewogICAgICAg
ICBtX3F1ZXVlLT5kaXNwYXRjaChbbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSA9IG1fY29uZmln
dXJhdGlvbi0+bWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSgpLmlzb2xhdGVkQ29weSgpLCBjYWxs
YmFja0FnZ3JlZ2F0b3JdIHsKICAgICAgICAgICAgIFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhOwot
ICAgICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBtZWRpYUtleU9yaWdpbnMobWVkaWFLZXlz
U3RvcmFnZURpcmVjdG9yeSkpCi0gICAgICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcy5h
cHBlbmQoV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6Ok1lZGlh
S2V5cywgMCB9KTsKKyAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMgPSBtZWRpYUtleU9y
aWdpbnMobWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSkubWFwKFtdKGF1dG8mIG9yaWdpbikgewor
ICAgICAgICAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNp
dGVEYXRhVHlwZTo6TWVkaWFLZXlzLCAwIH07CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
IGNhbGxiYWNrQWdncmVnYXRvci0+YWRkV2Vic2l0ZURhdGEoV1RGTW92ZSh3ZWJzaXRlRGF0YSkp
OwogICAgICAgICB9KTsKICAgICB9CkBAIC02NjcsOCArNjczLDkgQEAgdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywg
Y29uc3QgVmUKICAgICBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5z
OwogCiAgICAgZm9yIChjb25zdCBhdXRvJiBkYXRhUmVjb3JkIDogZGF0YVJlY29yZHMpIHsKKyAg
ICAgICAgb3JpZ2lucy5yZXNlcnZlQ2FwYWNpdHkob3JpZ2lucy5zaXplKCkgKyBkYXRhUmVjb3Jk
Lm9yaWdpbnMuc2l6ZSgpKTsKICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBkYXRhUmVjb3Jk
Lm9yaWdpbnMpCi0gICAgICAgICAgICBvcmlnaW5zLmFwcGVuZChvcmlnaW4pOworICAgICAgICAg
ICAgb3JpZ2lucy51bmNoZWNrZWRBcHBlbmQob3JpZ2luKTsKICAgICB9CiAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IFJlbW92YWxDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZSgqdGhp
cywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwpAQCAtNzA3LDEzICs3MTQsMTYgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
IGRhdGFUeXBlcywgY29uc3QgVmUKICAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IEhTVFNDYWNo
ZUhvc3ROYW1lczsKICAgICAgICAgICAgIFZlY3RvcjxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
bj4gcmVnaXN0cmFibGVEb21haW5zOwogICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBkYXRh
UmVjb3JkIDogZGF0YVJlY29yZHMpIHsKKyAgICAgICAgICAgICAgICBjb29raWVIb3N0TmFtZXMu
cmVzZXJ2ZUNhcGFjaXR5KGNvb2tpZUhvc3ROYW1lcy5zaXplKCkgKyBkYXRhUmVjb3JkLmNvb2tp
ZUhvc3ROYW1lcy5zaXplKCkpOwogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgaG9zdE5hbWUg
OiBkYXRhUmVjb3JkLmNvb2tpZUhvc3ROYW1lcykKLSAgICAgICAgICAgICAgICAgICAgY29va2ll
SG9zdE5hbWVzLmFwcGVuZChob3N0TmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGNvb2tpZUhv
c3ROYW1lcy51bmNoZWNrZWRBcHBlbmQoaG9zdE5hbWUpOworICAgICAgICAgICAgICAgIEhTVFND
YWNoZUhvc3ROYW1lcy5yZXNlcnZlQ2FwYWNpdHkoSFNUU0NhY2hlSG9zdE5hbWVzLnNpemUoKSAr
IGRhdGFSZWNvcmQuSFNUU0NhY2hlSG9zdE5hbWVzLnNpemUoKSk7CiAgICAgICAgICAgICAgICAg
Zm9yIChhdXRvJiBob3N0TmFtZSA6IGRhdGFSZWNvcmQuSFNUU0NhY2hlSG9zdE5hbWVzKQotICAg
ICAgICAgICAgICAgICAgICBIU1RTQ2FjaGVIb3N0TmFtZXMuYXBwZW5kKGhvc3ROYW1lKTsKKyAg
ICAgICAgICAgICAgICAgICAgSFNUU0NhY2hlSG9zdE5hbWVzLnVuY2hlY2tlZEFwcGVuZChob3N0
TmFtZSk7CiAjaWYgRU5BQkxFKElOVEVMTElHRU5UX1RSQUNLSU5HX1BSRVZFTlRJT04pCisgICAg
ICAgICAgICAgICAgcmVnaXN0cmFibGVEb21haW5zLnJlc2VydmVDYXBhY2l0eShyZWdpc3RyYWJs
ZURvbWFpbnMuc2l6ZSgpICsgZGF0YVJlY29yZC5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUmVnaXN0
cmFibGVEb21haW5zLnNpemUoKSk7CiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiByZWdpc3Ry
YWJsZURvbWFpbiA6IGRhdGFSZWNvcmQucmVzb3VyY2VMb2FkU3RhdGlzdGljc1JlZ2lzdHJhYmxl
RG9tYWlucykKLSAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmFibGVEb21haW5zLmFwcGVuZChy
ZWdpc3RyYWJsZURvbWFpbik7CisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhYmxlRG9tYWlu
cy51bmNoZWNrZWRBcHBlbmQocmVnaXN0cmFibGVEb21haW4pOwogI2VuZGlmCiAgICAgICAgICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tl
cklPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbQpp
bmRleCBmYTNiYzUwYjI0ZmFmMmVlNWZlZTc0NmQyYmVjODA0YWE0YWZiNzJjLi44NTc1OWMxYTQx
ZDQyMjRhN2ZkZmFiZDk5MTUxYjYwNjg5YzA4MDlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvVGV4dENoZWNrZXJJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1RleHRDaGVja2VySU9TLm1tCkBAIC0zNCw2ICszNCw3IEBACiAjaW1wb3J0IDx3
dGYvSGFzaE1hcC5oPgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KICNpbXBv
cnQgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0yNDAs
MTIgKzI0MSwxMyBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hl
Y2tUZXh0T2ZQYXJhZ3JhcGgoU3BlbGxEb2N1bWVudFRhZyBzcAogICAgICAgICAgICAgICAgIFRl
eHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBU
ZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZzsKICAgICAgICAgICAgICAgICByZXN1bHQucmFuZ2Ug
PSByZXN1bHRSYW5nZTsKLSAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOwor
ICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAm
JiBjaGVja2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpKSB7CiAg
ICAgICAgICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgICAg
ICBOU0FycmF5ICpkZXRhaWxzID0gW2luY29taW5nUmVzdWx0IGdyYW1tYXJEZXRhaWxzXTsKICAg
ICAgICAgICAgICAgICByZXN1bHQudHlwZSA9IFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXI7CiAg
ICAgICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFuZ2U7CisgICAgICAgICAgICAg
ICAgcmVzdWx0LmRldGFpbHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkZXRhaWxzLmNvdW50KTsK
ICAgICAgICAgICAgICAgICBmb3IgKE5TRGljdGlvbmFyeSAqaW5jb21pbmdEZXRhaWwgaW4gZGV0
YWlscykgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaW5jb21pbmdEZXRhaWwpOwogICAg
ICAgICAgICAgICAgICAgICBHcmFtbWFyRGV0YWlsIGRldGFpbDsKQEAgLTI2MCwxMiArMjYyLDEw
IEBAIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBh
cmFncmFwaChTcGVsbERvY3VtZW50VGFnIHNwCiAgICAgICAgICAgICAgICAgICAgIGRldGFpbC5y
YW5nZSA9IGRldGFpbE5TUmFuZ2U7CiAgICAgICAgICAgICAgICAgICAgIGRldGFpbC51c2VyRGVz
Y3JpcHRpb24gPSBbaW5jb21pbmdEZXRhaWwgb2JqZWN0Rm9yS2V5OkAiTlNHcmFtbWFyVXNlckRl
c2NyaXB0aW9uIl07CiAgICAgICAgICAgICAgICAgICAgIE5TQXJyYXkgKmd1ZXNzZXMgPSBbaW5j
b21pbmdEZXRhaWwgb2JqZWN0Rm9yS2V5OkAiTlNHcmFtbWFyQ29ycmVjdGlvbnMiXTsKLSAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGZvciAoTlNTdHJpbmcgKmd1ZXNz
IGluIGd1ZXNzZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWwuZ3Vlc3Nlcy5hcHBl
bmQoZ3Vlc3MpOwotICAgICAgICAgICAgICAgICAgICByZXN1bHQuZGV0YWlscy5hcHBlbmQoZGV0
YWlsKTsKKyAgICAgICAgICAgICAgICAgICAgZGV0YWlsLmd1ZXNzZXMgPSBtYWtlVmVjdG9yPFN0
cmluZz4oZ3Vlc3Nlcyk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5kZXRhaWxzLnVuY2hl
Y2tlZEFwcGVuZChkZXRhaWwpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBy
ZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKFdU
Rk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0
YW50Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3Rh
bnQubW0KaW5kZXggYzlhZTFhNjY3NzcxYjI2MTA5NTg1NGVhZTU5ZTI4NWFiNzUyZjY3Yi4uNDVk
ZDJlMTM0YzRkODc4ZjY1YjE2ZjlkZjQ0ZDYxNDAxMzU5ZmJiOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0KKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0KQEAgLTIw
NywxMiArMjA3LDExIEBAIC0gKENHUmVjdClwcmVzZW50YXRpb25SZWN0Rm9yRWxlbWVudFVzaW5n
Q2xvc2VzdEluZGljYXRlZFJlY3QKIAogICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgdG91Y2hMb2Nh
dGlvbiA9IF9wb3NpdGlvbkluZm9ybWF0aW9uLT5yZXF1ZXN0LnBvaW50OwogICAgIFdlYkNvcmU6
OkZsb2F0UG9pbnQgbGlua0VsZW1lbnRMb2NhdGlvbiA9IGluZGljYXRvci50ZXh0Qm91bmRpbmdS
ZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCk7Ci0gICAgVmVjdG9yPFdlYkNvcmU6
OkZsb2F0UmVjdD4gaW5kaWNhdGVkUmVjdHM7Ci0gICAgZm9yIChhdXRvIHJlY3QgOiBpbmRpY2F0
b3IudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcykgeworICAgIGF1dG8gaW5kaWNh
dGVkUmVjdHMgPSBpbmRpY2F0b3IudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcy5t
YXAoWyZdKGF1dG8gcmVjdCkgewogICAgICAgICByZWN0LmluZmxhdGUoMik7CiAgICAgICAgIHJl
Y3QubW92ZUJ5KGxpbmtFbGVtZW50TG9jYXRpb24pOwotICAgICAgICBpbmRpY2F0ZWRSZWN0cy5h
cHBlbmQocmVjdCk7Ci0gICAgfQorICAgICAgICByZXR1cm4gcmVjdDsKKyAgICB9KTsKIAogICAg
IGZvciAoY29uc3QgYXV0byYgcGF0aCA6IFdlYkNvcmU6OlBhdGhVdGlsaXRpZXM6OnBhdGhzV2l0
aFNocmlua1dyYXBwZWRSZWN0cyhpbmRpY2F0ZWRSZWN0cywgMCkpIHsKICAgICAgICAgYXV0byBi
b3VuZGluZ1JlY3QgPSBwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbSBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbQppbmRleCAxNmQ2ODM4ZTU0OGUwNDMyZmJk
MThmOGQ0ZDJhZGUxYzJjMTA4ZjZlLi5lY2UyZTNlMjQ1MzE1ZWU3MWFkOTc5N2ZhNmNjODBiNDI5
MzMwZDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNr
ZXJNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFj
Lm1tCkBAIC0zNDQsMTIgKzM0NCwxMyBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0
Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3BlbGxEb2N1bWVudFRhZyBzcAogICAgICAg
ICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgIHJlc3VsdC50eXBl
ID0gVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmc7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2Ug
PSByZXN1bHRSYW5nZTsKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7CisgICAg
ICAgICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICB9IGVsc2Ug
aWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiBjaGVja2luZ1R5
cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpKSB7CiAgICAgICAgICAgICBU
ZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAgICAgTlNBcnJheSAqZGV0YWlscyA9
IFtpbmNvbWluZ1Jlc3VsdCBncmFtbWFyRGV0YWlsc107CiAgICAgICAgICAgICByZXN1bHQudHlw
ZSA9IFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXI7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2Ug
PSByZXN1bHRSYW5nZTsKKyAgICAgICAgICAgIHJlc3VsdC5kZXRhaWxzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoZGV0YWlscy5jb3VudCk7CiAgICAgICAgICAgICBmb3IgKE5TRGljdGlvbmFyeSAq
aW5jb21pbmdEZXRhaWwgaW4gZGV0YWlscykgewogICAgICAgICAgICAgICAgIEFTU0VSVChpbmNv
bWluZ0RldGFpbCk7CiAgICAgICAgICAgICAgICAgR3JhbW1hckRldGFpbCBkZXRhaWw7CkBAIC0z
NjEsOSArMzYyLDggQEAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNo
ZWNrVGV4dE9mUGFyYWdyYXBoKFNwZWxsRG9jdW1lbnRUYWcgc3AKICAgICAgICAgICAgICAgICBk
ZXRhaWwucmFuZ2UgPSBkZXRhaWxOU1JhbmdlOwogICAgICAgICAgICAgICAgIGRldGFpbC51c2Vy
RGVzY3JpcHRpb24gPSBbaW5jb21pbmdEZXRhaWwgb2JqZWN0Rm9yS2V5Ok5TR3JhbW1hclVzZXJE
ZXNjcmlwdGlvbl07CiAgICAgICAgICAgICAgICAgTlNBcnJheSAqZ3Vlc3NlcyA9IFtpbmNvbWlu
Z0RldGFpbCBvYmplY3RGb3JLZXk6TlNHcmFtbWFyQ29ycmVjdGlvbnNdOwotICAgICAgICAgICAg
ICAgIGZvciAoTlNTdHJpbmcgKmd1ZXNzIGluIGd1ZXNzZXMpCi0gICAgICAgICAgICAgICAgICAg
IGRldGFpbC5ndWVzc2VzLmFwcGVuZChTdHJpbmcoZ3Vlc3MpKTsKLSAgICAgICAgICAgICAgICBy
ZXN1bHQuZGV0YWlscy5hcHBlbmQoZGV0YWlsKTsKKyAgICAgICAgICAgICAgICBkZXRhaWwuZ3Vl
c3NlcyA9IG1ha2VWZWN0b3I8U3RyaW5nPihndWVzc2VzKTsKKyAgICAgICAgICAgICAgICByZXN1
bHQuZGV0YWlscy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShkZXRhaWwpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7CiAgICAgICAgIH0gZWxzZSBp
ZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVMaW5rICYmIGNoZWNraW5nVHlwZXMu
Y29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6TGluaykpIHsKQEAgLTM3MSwzMSArMzcxLDMxIEBA
IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFn
cmFwaChTcGVsbERvY3VtZW50VGFnIHNwCiAgICAgICAgICAgICByZXN1bHQudHlwZSA9IFRleHRD
aGVja2luZ1R5cGU6Okxpbms7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5n
ZTsKICAgICAgICAgICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IFtbaW5jb21pbmdSZXN1bHQgVVJM
XSBhYnNvbHV0ZVN0cmluZ107Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOwor
ICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgfSBl
bHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZVF1b3RlICYmIGNoZWNraW5n
VHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6UXVvdGUpKSB7CiAgICAgICAgICAgICBU
ZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0
Q2hlY2tpbmdUeXBlOjpRdW90ZTsKICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJh
bmdlOwogICAgICAgICAgICAgcmVzdWx0LnJlcGxhY2VtZW50ID0gW2luY29taW5nUmVzdWx0IHJl
cGxhY2VtZW50U3RyaW5nXTsKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7Cisg
ICAgICAgICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICB9IGVs
c2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlRGFzaCAmJiBjaGVja2luZ1R5
cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkRhc2gpKSB7CiAgICAgICAgICAgICBUZXh0
Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hl
Y2tpbmdUeXBlOjpEYXNoOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFuZ2U7
CiAgICAgICAgICAgICByZXN1bHQucmVwbGFjZW1lbnQgPSBbaW5jb21pbmdSZXN1bHQgcmVwbGFj
ZW1lbnRTdHJpbmddOwotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKKyAgICAg
ICAgICAgIHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgIH0gZWxzZSBp
ZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVSZXBsYWNlbWVudCAmJiBjaGVja2lu
Z1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50KSkgewogICAgICAg
ICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgIHJlc3VsdC50eXBl
ID0gVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQ7CiAgICAgICAgICAgICByZXN1bHQucmFu
Z2UgPSByZXN1bHRSYW5nZTsKICAgICAgICAgICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IFtpbmNv
bWluZ1Jlc3VsdCByZXBsYWNlbWVudFN0cmluZ107Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVu
ZChyZXN1bHQpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsK
ICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZUNvcnJl
Y3Rpb24gJiYgY2hlY2tpbmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpDb3JyZWN0
aW9uKSkgewogICAgICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAg
ICAgIHJlc3VsdC50eXBlID0gVGV4dENoZWNraW5nVHlwZTo6Q29ycmVjdGlvbjsKICAgICAgICAg
ICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJhbmdlOwogICAgICAgICAgICAgcmVzdWx0LnJlcGxh
Y2VtZW50ID0gW2luY29taW5nUmVzdWx0IHJlcGxhY2VtZW50U3RyaW5nXTsKLSAgICAgICAgICAg
IHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChXVEZN
b3ZlKHJlc3VsdCkpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3IuY3BwCmlu
ZGV4IDczNTc2YTI0N2NlMTE3NTI3NTY1ZmIxZDI2YjRjZDA5YjI0NzJlOWYuLjEyN2FjMWU0NTc3
MTViZjdkZmIwZTljOTNhMTA0MjBiNGY1YzM1NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3IuY3BwCkBA
IC05OCw5ICs5OCw5IEBAIHZvaWQgV2ViUGF5bWVudENvb3JkaW5hdG9yOjpvcGVuUGF5bWVudFNl
dHVwKGNvbnN0IFN0cmluZyYgbWVyY2hhbnRJZGVudGlmaWVyLCBjCiAKIGJvb2wgV2ViUGF5bWVu
dENvb3JkaW5hdG9yOjpzaG93UGF5bWVudFVJKGNvbnN0IFVSTCYgb3JpZ2luYXRpbmdVUkwsIGNv
bnN0IFZlY3RvcjxVUkw+JiBsaW5rSWNvblVSTHMsIGNvbnN0IFdlYkNvcmU6OkFwcGxlUGF5U2Vz
c2lvblBheW1lbnRSZXF1ZXN0JiBwYXltZW50UmVxdWVzdCkKIHsKLSAgICBWZWN0b3I8U3RyaW5n
PiBsaW5rSWNvblVSTFN0cmluZ3M7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBsaW5rSWNvblVSTCA6
IGxpbmtJY29uVVJMcykKLSAgICAgICAgbGlua0ljb25VUkxTdHJpbmdzLmFwcGVuZChsaW5rSWNv
blVSTC5zdHJpbmcoKSk7CisgICAgYXV0byBsaW5rSWNvblVSTFN0cmluZ3MgPSBsaW5rSWNvblVS
THMubWFwKFtdKGF1dG8mIGxpbmtJY29uVVJMKSB7CisgICAgICAgIHJldHVybiBsaW5rSWNvblVS
TC5zdHJpbmcoKTsKKyAgICB9KTsKIAogICAgIGJvb2wgcmVzdWx0OwogICAgIGlmICghc2VuZFN5
bmMoTWVzc2FnZXM6OldlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpTaG93UGF5bWVudFVJKG1f
d2ViUGFnZS5pZGVudGlmaWVyKCksIG1fd2ViUGFnZS53ZWJQYWdlUHJveHlJZGVudGlmaWVyKCks
IG9yaWdpbmF0aW5nVVJMLnN0cmluZygpLCBsaW5rSWNvblVSTFN0cmluZ3MsIHBheW1lbnRSZXF1
ZXN0KSwgTWVzc2FnZXM6OldlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpTaG93UGF5bWVudFVJ
OjpSZXBseShyZXN1bHQpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9B
dXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5jcHAKaW5kZXgg
YjBmZTgzNTcyMjNiMzEzM2ZjNGRiMmZiYWFkOGU3MzlmNWUzYjlkNi4uZjQ1Y2ZiNDE5MTM2Yjdj
ZjA4ZTNiZmQ0OTZiMmI2OTdhM2M5ZWZlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94
eS5jcHAKQEAgLTgwNSwxMyArODA1LDEyIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb25Qcm94
eTo6c2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWQoV2ViQ29yZTo6UGFnZUlkZW50aWZpCiAgICAg
YXV0byYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudD4o
KmNvcmVFbGVtZW50KTsKICAgICBWZWN0b3I8UmVmPFdlYkNvcmU6OkZpbGU+PiBmaWxlT2JqZWN0
czsKICAgICBpZiAoaW5wdXRFbGVtZW50Lm11bHRpcGxlKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IGZpbGVzID0gaW5wdXRFbGVtZW50LmZpbGVzKCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYg
ZmlsZSA6IGZpbGVzLT5maWxlcygpKQotICAgICAgICAgICAgICAgIGZpbGVPYmplY3RzLmFwcGVu
ZChmaWxlLmNvcHlSZWYoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8qIGZpbGVzID0g
aW5wdXRFbGVtZW50LmZpbGVzKCkpCisgICAgICAgICAgICBmaWxlT2JqZWN0cy5hcHBlbmRWZWN0
b3IoZmlsZXMtPmZpbGVzKCkpOwogICAgIH0KKyAgICBmaWxlT2JqZWN0cy5yZXNlcnZlQ2FwYWNp
dHkoZmlsZU9iamVjdHMuc2l6ZSgpICsgZmlsZW5hbWVzLnNpemUoKSk7CiAgICAgZm9yIChjb25z
dCBhdXRvJiBwYXRoIDogZmlsZW5hbWVzKQotICAgICAgICBmaWxlT2JqZWN0cy5hcHBlbmQoV2Vi
Q29yZTo6RmlsZTo6Y3JlYXRlKCZpbnB1dEVsZW1lbnQuZG9jdW1lbnQoKSwgcGF0aCkpOworICAg
ICAgICBmaWxlT2JqZWN0cy51bmNoZWNrZWRBcHBlbmQoV2ViQ29yZTo6RmlsZTo6Y3JlYXRlKCZp
bnB1dEVsZW1lbnQuZG9jdW1lbnQoKSwgcGF0aCkpOwogICAgIGlucHV0RWxlbWVudC5zZXRGaWxl
cyhXZWJDb3JlOjpGaWxlTGlzdDo6Y3JlYXRlKFdURk1vdmUoZmlsZU9iamVjdHMpKSk7CiAKICAg
ICBjb21wbGV0aW9uSGFuZGxlcihzdGQ6Om51bGxvcHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFn
ZXIuY3BwCmluZGV4IDdjOWQ0NTY5YTRlNTBiMDcxM2E3N2E4YjRhYzI0MGZhZTQ2ZGRkMWUuLjgx
M2FmMjg1OTgzY2I4MmMzMGYyNGUyNTM3MTU1YzdmMGYzYjYxMjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxh
eWVyTWFuYWdlci5jcHAKQEAgLTE2MCw4ICsxNjAsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFQ
bGF5ZXJQcml2YXRlSW50ZXJmYWNlPiBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXI6OmNyZWF0ZVJl
bQogICAgIHByb3h5Q29uZmlndXJhdGlvbi5pc1ZpZGVvID0gcGxheWVyLT5pc1ZpZGVvUGxheWVy
KCk7CiAKICNpZiBFTkFCTEUoQVZGX0NBUFRJT05TKQotICAgIGZvciAoY29uc3QgYXV0byYgdHJh
Y2sgOiBwbGF5ZXItPm91dE9mQmFuZFRyYWNrU291cmNlcygpKQotICAgICAgICBwcm94eUNvbmZp
Z3VyYXRpb24ub3V0T2ZCYW5kVHJhY2tEYXRhLmFwcGVuZCh0cmFjay0+ZGF0YSgpKTsKKyAgICBw
cm94eUNvbmZpZ3VyYXRpb24ub3V0T2ZCYW5kVHJhY2tEYXRhID0gcGxheWVyLT5vdXRPZkJhbmRU
cmFja1NvdXJjZXMoKS5tYXAoW10oYXV0byYgdHJhY2spIHsKKyAgICAgICAgcmV0dXJuIHRyYWNr
LT5kYXRhKCk7CisgICAgfSk7CiAjZW5kaWYKIAogICAgIGF1dG8gZG9jdW1lbnRTZWN1cml0eU9y
aWdpbiA9IHBsYXllci0+ZG9jdW1lbnRTZWN1cml0eU9yaWdpbigpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9Tb3VyY2VCdWZmZXJQcml2YXRlUmVtb3Rl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvU291cmNlQnVmZmVyUHJp
dmF0ZVJlbW90ZS5jcHAKaW5kZXggOTY2ZmM5M2I3N2FmYWEzZTYyMDhkN2FiYTVhZWQyYzdhOTRj
NzRiMi4uNGVmMTY0MGE0MDEwMDZhNmI4ZjY5Y2M1MDExNjRhOGJkMTkwZWI5MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9Tb3VyY2VCdWZmZXJQcml2YXRl
UmVtb3RlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1NvdXJj
ZUJ1ZmZlclByaXZhdGVSZW1vdGUuY3BwCkBAIC0zMzgsMTYgKzMzOCwxMSBAQCB2b2lkIFNvdXJj
ZUJ1ZmZlclByaXZhdGVSZW1vdGU6OnVwZGF0ZVRyYWNrSWRzKFZlY3RvcjxzdGQ6OnBhaXI8QXRv
bVN0cmluZywgQXRvbQogICAgIGlmICghbV9ncHVQcm9jZXNzQ29ubmVjdGlvbikKICAgICAgICAg
cmV0dXJuOwogCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjxUcmFja1ByaXZhdGVSZW1vdGVJZGVudGlm
aWVyLCBUcmFja1ByaXZhdGVSZW1vdGVJZGVudGlmaWVyPj4gaWRlbnRpZmllclBhaXJzOwotCi0g
ICAgZm9yIChhdXRvJiB0cmFja0lkUGFpciA6IHRyYWNrSWRQYWlycykgeworICAgIGF1dG8gaWRl
bnRpZmllclBhaXJzID0gdHJhY2tJZFBhaXJzLm1hcChbdGhpc10oYXV0byYgdHJhY2tJZFBhaXIp
IHsKICAgICAgICAgQVNTRVJUKG1fcHJldlRyYWNrSWRlbnRpZmllck1hcC5jb250YWlucyh0cmFj
a0lkUGFpci5maXJzdCkpOwogICAgICAgICBBU1NFUlQobV90cmFja0lkZW50aWZpZXJNYXAuY29u
dGFpbnModHJhY2tJZFBhaXIuc2Vjb25kKSk7Ci0KLSAgICAgICAgYXV0byBvbGRJZGVudGlmaWVy
ID0gbV9wcmV2VHJhY2tJZGVudGlmaWVyTWFwLnRha2UodHJhY2tJZFBhaXIuZmlyc3QpOwotICAg
ICAgICBhdXRvIG5ld0lkZW50aWZpZXIgPSBtX3RyYWNrSWRlbnRpZmllck1hcC5nZXQodHJhY2tJ
ZFBhaXIuc2Vjb25kKTsKLSAgICAgICAgaWRlbnRpZmllclBhaXJzLmFwcGVuZChzdGQ6Om1ha2Vf
cGFpcihvbGRJZGVudGlmaWVyLCBuZXdJZGVudGlmaWVyKSk7Ci0gICAgfQorICAgICAgICByZXR1
cm4gc3RkOjpwYWlyIHsgbV9wcmV2VHJhY2tJZGVudGlmaWVyTWFwLnRha2UodHJhY2tJZFBhaXIu
Zmlyc3QpLCBtX3RyYWNrSWRlbnRpZmllck1hcC5nZXQodHJhY2tJZFBhaXIuc2Vjb25kKSB9Owor
ICAgIH0pOwogCiAgICAgbV9ncHVQcm9jZXNzQ29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLnNlbmQo
TWVzc2FnZXM6OlJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5OjpVcGRhdGVUcmFja0lkcyhpZGVudGlm
aWVyUGFpcnMpLCBtX3JlbW90ZVNvdXJjZUJ1ZmZlcklkZW50aWZpZXIpOwogfQpAQCAtMzgzLDI3
ICszNzgsMzAgQEAgdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlOjpzb3VyY2VCdWZmZXJQ
cml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWUKICAgICBzZWdtZW50LmR1cmF0aW9u
ID0gc2VnbWVudEluZm8uZHVyYXRpb247CiAKICAgICBtX3ByZXZUcmFja0lkZW50aWZpZXJNYXAu
c3dhcChtX3RyYWNrSWRlbnRpZmllck1hcCk7CisgICAgc2VnbWVudC5hdWRpb1RyYWNrcy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KHNlZ21lbnRJbmZvLmF1ZGlvVHJhY2tzLnNpemUoKSk7CiAgICAg
Zm9yIChhdXRvJiBhdWRpb1RyYWNrIDogc2VnbWVudEluZm8uYXVkaW9UcmFja3MpIHsKICAgICAg
ICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25TZWdtZW50OjpBdWRp
b1RyYWNrSW5mb3JtYXRpb24gaW5mbzsKICAgICAgICAgaW5mby50cmFjayA9IG1fbWVkaWFQbGF5
ZXJQcml2YXRlLT5hdWRpb1RyYWNrUHJpdmF0ZVJlbW90ZShhdWRpb1RyYWNrLmlkZW50aWZpZXIp
OwogICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0gUmVtb3RlTWVkaWFEZXNjcmlwdGlvbjo6Y3Jl
YXRlKGF1ZGlvVHJhY2suZGVzY3JpcHRpb24pOwotICAgICAgICBzZWdtZW50LmF1ZGlvVHJhY2tz
LmFwcGVuZChpbmZvKTsKKyAgICAgICAgc2VnbWVudC5hdWRpb1RyYWNrcy51bmNoZWNrZWRBcHBl
bmQoaW5mbyk7CiAgICAgICAgIG1fdHJhY2tJZGVudGlmaWVyTWFwLmFkZChpbmZvLnRyYWNrLT5p
ZCgpLCBhdWRpb1RyYWNrLmlkZW50aWZpZXIpOwogICAgIH0KIAorICAgIHNlZ21lbnQudmlkZW9U
cmFja3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzZWdtZW50SW5mby52aWRlb1RyYWNrcy5zaXpl
KCkpOwogICAgIGZvciAoYXV0byYgdmlkZW9UcmFjayA6IHNlZ21lbnRJbmZvLnZpZGVvVHJhY2tz
KSB7CiAgICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2Vn
bWVudDo6VmlkZW9UcmFja0luZm9ybWF0aW9uIGluZm87CiAgICAgICAgIGluZm8udHJhY2sgPSBt
X21lZGlhUGxheWVyUHJpdmF0ZS0+dmlkZW9UcmFja1ByaXZhdGVSZW1vdGUodmlkZW9UcmFjay5p
ZGVudGlmaWVyKTsKICAgICAgICAgaW5mby5kZXNjcmlwdGlvbiA9IFJlbW90ZU1lZGlhRGVzY3Jp
cHRpb246OmNyZWF0ZSh2aWRlb1RyYWNrLmRlc2NyaXB0aW9uKTsKLSAgICAgICAgc2VnbWVudC52
aWRlb1RyYWNrcy5hcHBlbmQoaW5mbyk7CisgICAgICAgIHNlZ21lbnQudmlkZW9UcmFja3MudW5j
aGVja2VkQXBwZW5kKGluZm8pOwogICAgICAgICBtX3RyYWNrSWRlbnRpZmllck1hcC5hZGQoaW5m
by50cmFjay0+aWQoKSwgdmlkZW9UcmFjay5pZGVudGlmaWVyKTsKICAgICB9CiAKKyAgICBzZWdt
ZW50LnRleHRUcmFja3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzZWdtZW50SW5mby50ZXh0VHJh
Y2tzLnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiB0ZXh0VHJhY2sgOiBzZWdtZW50SW5mby50ZXh0
VHJhY2tzKSB7CiAgICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0
aW9uU2VnbWVudDo6VGV4dFRyYWNrSW5mb3JtYXRpb24gaW5mbzsKICAgICAgICAgaW5mby50cmFj
ayA9IG1fbWVkaWFQbGF5ZXJQcml2YXRlLT50ZXh0VHJhY2tQcml2YXRlUmVtb3RlKHRleHRUcmFj
ay5pZGVudGlmaWVyKTsKICAgICAgICAgaW5mby5kZXNjcmlwdGlvbiA9IFJlbW90ZU1lZGlhRGVz
Y3JpcHRpb246OmNyZWF0ZSh0ZXh0VHJhY2suZGVzY3JpcHRpb24pOwotICAgICAgICBzZWdtZW50
LnRleHRUcmFja3MuYXBwZW5kKGluZm8pOworICAgICAgICBzZWdtZW50LnRleHRUcmFja3MudW5j
aGVja2VkQXBwZW5kKGluZm8pOwogICAgICAgICBtX3RyYWNrSWRlbnRpZmllck1hcC5hZGQoaW5m
by50cmFjay0+aWQoKSwgdGV4dFRyYWNrLmlkZW50aWZpZXIpOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5j
cHAKaW5kZXggZDA3MGMyYjc5ZGY0MGNhY2I0MThmMDY3ODI2N2U0YzNiNGE1NDYxYy4uMWMyMjcz
NDMyNTQ1YWJmM2M5MDZiODVkYzE3ZDliOTlkNGUxZjdhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwCkBAIC0z
OTIsOSArMzkyLDkgQEAgTGliV2ViUlRDQ29kZWNzOjpFbmNvZGVyKiBMaWJXZWJSVENDb2RlY3M6
OmNyZWF0ZUVuY29kZXIoVHlwZSB0eXBlLCBjb25zdCBzdGQ6Om0KICAgICBlbmNvZGVyLT5pZGVu
dGlmaWVyID0gUlRDRW5jb2RlcklkZW50aWZpZXI6OmdlbmVyYXRlVGhyZWFkU2FmZSgpOwogICAg
IGVuY29kZXItPmNvZGVjVHlwZSA9IHRvV2ViUlRDQ29kZWNUeXBlKHR5cGUpOwogCi0gICAgVmVj
dG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IHBhcmFtZXRlcnM7Ci0gICAgZm9yIChhdXRv
JiBrZXlWYWx1ZSA6IGZvcm1hdFBhcmFtZXRlcnMpCi0gICAgICAgIHBhcmFtZXRlcnMuYXBwZW5k
KHN0ZDo6bWFrZV9wYWlyKFN0cmluZzo6ZnJvbVVURjgoa2V5VmFsdWUuZmlyc3QuZGF0YSgpLCBr
ZXlWYWx1ZS5maXJzdC5sZW5ndGgoKSksIFN0cmluZzo6ZnJvbVVURjgoa2V5VmFsdWUuc2Vjb25k
LmRhdGEoKSwga2V5VmFsdWUuc2Vjb25kLmxlbmd0aCgpKSkpOworICAgIGF1dG8gcGFyYW1ldGVy
cyA9IFdURjo6bWFwKGZvcm1hdFBhcmFtZXRlcnMsIFtdKGF1dG8mIGVudHJ5KSB7CisgICAgICAg
IHJldHVybiBzdGQ6OnBhaXIgeyBTdHJpbmc6OmZyb21VVEY4KGVudHJ5LmZpcnN0LmRhdGEoKSwg
ZW50cnkuZmlyc3QubGVuZ3RoKCkpLCBTdHJpbmc6OmZyb21VVEY4KGVudHJ5LnNlY29uZC5kYXRh
KCksIGVudHJ5LnNlY29uZC5sZW5ndGgoKSkgfTsKKyAgICB9KTsKIAogICAgIGVuc3VyZUdQVVBy
b2Nlc3NDb25uZWN0aW9uQW5kRGlzcGF0Y2hUb1RocmVhZChbdGhpcywgZW5jb2RlciA9IFdURk1v
dmUoZW5jb2RlciksIHR5cGUsIHBhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpXSgpIG11
dGFibGUgewogICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5j
cHAKaW5kZXggZDg1NDJhMmIxMGIxYjNlMTUzNjE0MTU0MTE1ZWY3ZWNlYzQ0ZWI4OC4uNmY4Zjc0
NTM1OTI0NTNlMGU2MTg2NzYxMjQ0ZTBiNzc5MjIxZGU3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9X
S0J1bmRsZVBhZ2VPdmVybGF5LmNwcApAQCAtMTk3LDExICsxOTcsMTMgQEAgcHJpdmF0ZToKICAg
ICAgICAgYXV0byB3a05hbWVzID0gbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmNvcHlB
Y2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXModG9BUEkoJnBhZ2VPdmVybGF5KSwgcGFyYW1lcml6
ZWROYW1lcywgbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmJhc2UuY2xpZW50SW5mbyk7
CiAKICAgICAgICAgc2l6ZV90IGNvdW50ID0gV0tBcnJheUdldFNpemUod2tOYW1lcyk7CisgICAg
ICAgIG5hbWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY291bnQpOwogICAgICAgICBmb3IgKHNp
emVfdCBrID0gMDsgayA8IGNvdW50OyBrKyspIHsKICAgICAgICAgICAgIFdLVHlwZVJlZiBpdGVt
ID0gV0tBcnJheUdldEl0ZW1BdEluZGV4KHdrTmFtZXMsIGspOwogICAgICAgICAgICAgaWYgKFdl
YktpdDo6dG9JbXBsKGl0ZW0pLT50eXBlKCkgPT0gQVBJOjpTdHJpbmc6OkFQSVR5cGUpCi0gICAg
ICAgICAgICAgICAgbmFtZXMuYXBwZW5kKFdlYktpdDo6dG9XVEZTdHJpbmcoc3RhdGljX2Nhc3Q8
V0tTdHJpbmdSZWY+KGl0ZW0pKSk7CisgICAgICAgICAgICAgICAgbmFtZXMudW5jaGVja2VkQXBw
ZW5kKFdlYktpdDo6dG9XVEZTdHJpbmcoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KGl0ZW0pKSk7
CiAgICAgICAgIH0KKyAgICAgICAgbmFtZXMuc2hyaW5rVG9GaXQoKTsKIAogICAgICAgICByZXR1
cm4gbmFtZXM7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1Nlc3Npb25TdGF0ZUNvbnZlcnNpb24uY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1Nlc3Npb25TdGF0ZUNvbnZlcnNpb24uY3BwCmluZGV4
IGM4ZjI0OGE2NDc2NTc2YTI5MmM3NWQ1ZmFhNjhmNWFjNjNhNDc1YzguLjU2N2Q0NzUxYmVlODNh
M2IzZjRmNmUwZmEyMzc3YmQwMDYzNTBhMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9TZXNzaW9uU3RhdGVDb252ZXJzaW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvU2Vzc2lvblN0YXRlQ29udmVy
c2lvbi5jcHAKQEAgLTk5LDEwICs5OSw5IEBAIHN0YXRpYyBGcmFtZVN0YXRlIHRvRnJhbWVTdGF0
ZShjb25zdCBIaXN0b3J5SXRlbSYgaGlzdG9yeUl0ZW0pCiAgICAgZnJhbWVTdGF0ZS5vYnNjdXJl
ZEluc2V0cyA9IGhpc3RvcnlJdGVtLm9ic2N1cmVkSW5zZXRzKCk7CiAjZW5kaWYKIAotICAgIGZv
ciAoYXV0byYgY2hpbGRIaXN0b3J5SXRlbSA6IGhpc3RvcnlJdGVtLmNoaWxkcmVuKCkpIHsKLSAg
ICAgICAgRnJhbWVTdGF0ZSBjaGlsZEZyYW1lU3RhdGUgPSB0b0ZyYW1lU3RhdGUoY2hpbGRIaXN0
b3J5SXRlbSk7Ci0gICAgICAgIGZyYW1lU3RhdGUuY2hpbGRyZW4uYXBwZW5kKFdURk1vdmUoY2hp
bGRGcmFtZVN0YXRlKSk7Ci0gICAgfQorICAgIGZyYW1lU3RhdGUuY2hpbGRyZW4gPSBoaXN0b3J5
SXRlbS5jaGlsZHJlbigpLm1hcChbXShhdXRvJiBjaGlsZEhpc3RvcnlJdGVtKSB7CisgICAgICAg
IHJldHVybiB0b0ZyYW1lU3RhdGUoY2hpbGRIaXN0b3J5SXRlbSk7CisgICAgfSk7CiAKICAgICBy
ZXR1cm4gZnJhbWVTdGF0ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEZXZpY2VPcmllbnRh
dGlvblVwZGF0ZVByb3ZpZGVyLmNwcAppbmRleCBmOWFmOWFiOTNmN2UwMTI4NzczNjUwYzFkMjQ5
NWFkZGUzOWZkNDM1Li4xZDExZjQyM2MxNzg4ZDU5N2ZmMjU3OGVlNjBkOWNiNjE2YTBkZDM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRGV2
aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXIu
Y3BwCkBAIC04MywxMSArODMsNyBAQCB2b2lkIFdlYkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJv
dmlkZXI6OnN0b3BVcGRhdGluZ0RldmljZU1vdGlvbihXZWJDb3JlOjpNb3RpbwogCiB2b2lkIFdl
YkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXI6OmRldmljZU9yaWVudGF0aW9uQ2hhbmdl
ZChkb3VibGUgYWxwaGEsIGRvdWJsZSBiZXRhLCBkb3VibGUgZ2FtbWEsIGRvdWJsZSBjb21wYXNz
SGVhZGluZywgZG91YmxlIGNvbXBhc3NBY2N1cmFjeSkKIHsKLSAgICBWZWN0b3I8V2Vha1B0cjxX
ZWJDb3JlOjpNb3Rpb25NYW5hZ2VyQ2xpZW50Pj4gY2xpZW50czsKLSAgICBmb3IgKGF1dG8mIGNs
aWVudCA6IG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRzKQotICAgICAgICBjbGllbnRzLmFwcGVu
ZChjbGllbnQpOwotCi0gICAgZm9yIChhdXRvJiBjbGllbnQgOiBjbGllbnRzKSB7CisgICAgZm9y
IChhdXRvJiBjbGllbnQgOiBjb3B5VG9WZWN0b3JPZjxXZWFrUHRyPFdlYkNvcmU6Ok1vdGlvbk1h
bmFnZXJDbGllbnQ+PihtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50cykpIHsKICAgICAgICAgaWYg
KGNsaWVudCkKICAgICAgICAgICAgIGNsaWVudC0+b3JpZW50YXRpb25DaGFuZ2VkKGFscGhhLCBi
ZXRhLCBnYW1tYSwgY29tcGFzc0hlYWRpbmcsIGNvbXBhc3NBY2N1cmFjeSk7CiAgICAgfQpAQCAt
OTUsMTEgKzkxLDcgQEAgdm9pZCBXZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyOjpk
ZXZpY2VPcmllbnRhdGlvbkNoYW5nZWQoZG91YmxlIGFscGhhLAogCiB2b2lkIFdlYkRldmljZU9y
aWVudGF0aW9uVXBkYXRlUHJvdmlkZXI6OmRldmljZU1vdGlvbkNoYW5nZWQoZG91YmxlIHhBY2Nl
bGVyYXRpb24sIGRvdWJsZSB5QWNjZWxlcmF0aW9uLCBkb3VibGUgekFjY2VsZXJhdGlvbiwgZG91
YmxlIHhBY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5LCBkb3VibGUgeUFjY2VsZXJhdGlvbklu
Y2x1ZGluZ0dyYXZpdHksIGRvdWJsZSB6QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwgc3Rk
OjpvcHRpb25hbDxkb3VibGU+IHhSb3RhdGlvblJhdGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB5
Um90YXRpb25SYXRlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gelJvdGF0aW9uUmF0ZSkKIHsKLSAg
ICBWZWN0b3I8V2Vha1B0cjxXZWJDb3JlOjpNb3Rpb25NYW5hZ2VyQ2xpZW50Pj4gY2xpZW50czsK
LSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IG1fZGV2aWNlTW90aW9uQ2xpZW50cykKLSAgICAgICAg
Y2xpZW50cy5hcHBlbmQoY2xpZW50KTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IGNs
aWVudHMpIHsKKyAgICBmb3IgKGF1dG8mIGNsaWVudCA6IGNvcHlUb1ZlY3Rvck9mPFdlYWtQdHI8
V2ViQ29yZTo6TW90aW9uTWFuYWdlckNsaWVudD4+KG1fZGV2aWNlTW90aW9uQ2xpZW50cykpIHsK
ICAgICAgICAgaWYgKGNsaWVudCkKICAgICAgICAgICAgIGNsaWVudC0+bW90aW9uQ2hhbmdlZCh4
QWNjZWxlcmF0aW9uLCB5QWNjZWxlcmF0aW9uLCB6QWNjZWxlcmF0aW9uLCB4QWNjZWxlcmF0aW9u
SW5jbHVkaW5nR3Jhdml0eSwgeUFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHksICB6QWNjZWxl
cmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwgeFJvdGF0aW9uUmF0ZSwgeVJvdGF0aW9uUmF0ZSwgelJv
dGF0aW9uUmF0ZSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuY3BwCmlu
ZGV4IGRmZGRhMTc2OTkzNjAwNDQ3YTBjOTNjYzg0NjBmNWU2OGIyYzI0ODEuLjMxOGY3YzNkMjkz
MzJjMDJhZDJjZTMwZDkwZTdjZmU2ZjU1YzMyMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGFzdGVib2FyZE92
ZXJyaWRlcy5jcHAKQEAgLTcxLDE4ICs3MSwxMyBAQCB2b2lkIFdlYlBhc3RlYm9hcmRPdmVycmlk
ZXM6OnJlbW92ZU92ZXJyaWRlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0CiAK
IFZlY3RvcjxTdHJpbmc+IFdlYlBhc3RlYm9hcmRPdmVycmlkZXM6Om92ZXJyaWRkZW5UeXBlcyhj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewotICAgIFZlY3RvcjxTdHJpbmc+IHJlc3Vs
dDsKLQogICAgIGF1dG8gaXQgPSBtX292ZXJyaWRlc01hcC5maW5kKHBhc3RlYm9hcmROYW1lKTsK
ICAgICBpZiAoaXQgPT0gbV9vdmVycmlkZXNNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBBU1NFUlQoaXQtPnZhbHVlKTsKIAotICAg
IGZvciAoU3RyaW5nJiB0eXBlIDogaXQtPnZhbHVlLT5rZXlzKCkpCi0gICAgICAgIHJlc3VsdC5h
cHBlbmQodHlwZSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBjb3B5VG9WZWN0
b3IoaXQtPnZhbHVlLT5rZXlzKCkpOwogfQogCiBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBhc3Rl
Ym9hcmRJdGVtSW5mbz4gV2ViUGFzdGVib2FyZE92ZXJyaWRlczo6b3ZlcnJpZGRlbkluZm8oY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJTcGVlY2hTeW50aGVzaXNDbGllbnQuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlNwZWVjaFN5bnRoZXNpc0Ns
aWVudC5jcHAKaW5kZXggYzRkMGRjYzAzZDVkYTZhMDQ4M2VkZjU2ZDFlNDM5NTI3YmM5NWY4OC4u
YzU3ZTc4MDliMmVlMTY2ZGQ2ZjY4OGJlMjJhODU5YzdkYWRkYThmYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlNwZWVjaFN5bnRoZXNpc0Ns
aWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YlNwZWVjaFN5bnRoZXNpc0NsaWVudC5jcHAKQEAgLTQyLDkgKzQyLDkgQEAgY29uc3QgVmVjdG9y
PFJlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlPj4mIFdlYlNwZWVj
aFN5bnRoZXNpc0MKICAgICBWZWN0b3I8V2ViU3BlZWNoU3ludGhlc2lzVm9pY2U+IHZvaWNlTGlz
dDsKICAgICBtX3BhZ2Uuc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U3BlZWNoU3lu
dGhlc2lzVm9pY2VMaXN0KCksIHZvaWNlTGlzdCk7CiAKLSAgICBtX3ZvaWNlcy5jbGVhcigpOwot
ICAgIGZvciAoYXV0byYgdm9pY2UgOiB2b2ljZUxpc3QpCi0gICAgICAgIG1fdm9pY2VzLmFwcGVu
ZChXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlOjpjcmVhdGUodm9pY2Uudm9p
Y2VVUkksIHZvaWNlLm5hbWUsIHZvaWNlLmxhbmcsIHZvaWNlLmxvY2FsU2VydmljZSwgdm9pY2Uu
ZGVmYXVsdExhbmcpKTsKKyAgICBtX3ZvaWNlcyA9IHZvaWNlTGlzdC5tYXAoW10oYXV0byYgdm9p
Y2UpIC0+IFJlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlPiB7Cisg
ICAgICAgIHJldHVybiBXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlOjpjcmVh
dGUodm9pY2Uudm9pY2VVUkksIHZvaWNlLm5hbWUsIHZvaWNlLmxhbmcsIHZvaWNlLmxvY2FsU2Vy
dmljZSwgdm9pY2UuZGVmYXVsdExhbmcpOworICAgIH0pOwogICAgIHJldHVybiBtX3ZvaWNlczsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENv
bnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRy
b2xsZXIuY3BwCmluZGV4IGI1MTM0ZDBkMmM1ZDdjNTJmNmZhYzk2ODA0NDFhY2MzZWViZjY1ZmQu
LjFkNjQzYjZiNDI4OGQwOGUwMzhjNDYyNWQwNTQ5ZGU2OGFmMmFhNzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKQEAgLTI3
MiwxMCArMjcyLDkgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6ZmluZFN0cmluZ01hdGNoZXMoY29u
c3QgU3RyaW5nJiBzdHJpbmcsIE9wdGlvblNldDxGaW5kT3B0aW8KICAgICBhdXRvIHJlc3VsdCA9
IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+ZmluZFRleHRNYXRjaGVzKHN0cmluZywgY29yZShvcHRp
b25zKSwgbWF4TWF0Y2hDb3VudCk7CiAgICAgbV9maW5kTWF0Y2hlcyA9IFdURk1vdmUocmVzdWx0
LnJhbmdlcyk7CiAKLSAgICBWZWN0b3I8VmVjdG9yPEludFJlY3Q+PiBtYXRjaFJlY3RzOwotICAg
IGZvciAoYXV0byYgcmFuZ2UgOiBtX2ZpbmRNYXRjaGVzKQotICAgICAgICBtYXRjaFJlY3RzLmFw
cGVuZChSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKHJhbmdlKSk7Ci0KKyAgICBhdXRv
IG1hdGNoUmVjdHMgPSBtX2ZpbmRNYXRjaGVzLm1hcChbXShhdXRvJiByYW5nZSkgeworICAgICAg
ICByZXR1cm4gUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cyhyYW5nZSk7CisgICAgfSk7
CiAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmRTdHJp
bmdNYXRjaGVzKHN0cmluZywgbWF0Y2hSZWN0cywgcmVzdWx0LmluZGV4Rm9yU2VsZWN0aW9uKSk7
CiAKICAgICBpZiAoIW9wdGlvbnMuY29udGFpbnMoRmluZE9wdGlvbnM6OlNob3dPdmVybGF5KSAm
JiAhb3B0aW9ucy5jb250YWlucyhGaW5kT3B0aW9uczo6U2hvd0ZpbmRJbmRpY2F0b3IpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFu
Z2VDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZv
dW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAKaW5kZXggNzQ4MDJjNDc4NzU1ZmZlNjFiOTMwOTJj
YmNhNmQwYWM3Y2NjOWM4My4uMmM5YjQ1N2RiY2EwN2E2ZWIxMjY4OWE3OGYwZGQ1YjI5MTRhMjFj
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRU
ZXh0UmFuZ2VDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwCkBAIC0yNDgsMTEgKzI0OCwxMCBA
QCB2b2lkIFdlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6ZHJhd1JlY3QoV2ViQ29yZTo6UGFn
ZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaAogICAgICAgICBhdXRvIHRleHRCb3VuZGluZ1JlY3RJ
blJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBtX3RleHRJbmRpY2F0b3ItPnRleHRCb3VuZGluZ1JlY3RJ
blJvb3RWaWV3Q29vcmRpbmF0ZXMoKTsKICAgICAgICAgYXV0byB0ZXh0UmVjdHNJbkJvdW5kaW5n
UmVjdENvb3JkaW5hdGVzID0gbV90ZXh0SW5kaWNhdG9yLT50ZXh0UmVjdHNJbkJvdW5kaW5nUmVj
dENvb3JkaW5hdGVzKCk7CiAKLSAgICAgICAgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4gdGV4
dFJlY3RzSW5Sb290Vmlld0Nvb3JkaW5hdGVzOwotICAgICAgICBmb3IgKGF1dG8gcmVjdCA6IHRl
eHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMpIHsKKyAgICAgICAgYXV0byB0ZXh0UmVj
dHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5h
dGVzLm1hcChbJl0oYXV0byByZWN0KSB7CiAgICAgICAgICAgICByZWN0Lm1vdmVCeSh0ZXh0Qm91
bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCkpOwotICAgICAgICAgICAg
dGV4dFJlY3RzSW5Sb290Vmlld0Nvb3JkaW5hdGVzLmFwcGVuZChyZWN0KTsKLSAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIHJlY3Q7CisgICAgICAgIH0pOwogCiAgICAgICAgIGF1dG8gcGF0
aHMgPSBXZWJDb3JlOjpQYXRoVXRpbGl0aWVzOjpwYXRoc1dpdGhTaHJpbmtXcmFwcGVkUmVjdHMo
dGV4dFJlY3RzSW5Sb290Vmlld0Nvb3JkaW5hdGVzLCBpbmRpY2F0b3JSYWRpdXMpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDM0OTg3YmRl
NjRmZGZmMDkwODMyYzM3NTQyYjkzNTEzYTYxYWRjY2IuLjQ4NzY4MDQ2YTE4OTllOTQyNjhkN2Uy
OTU0OTgwNTEyNjAwNTVmZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCkBAIC03ODQwLDE0ICs3ODQwLDE2IEBAIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eSYgV2ViUGFnZTo6ZW5zdXJlUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KCkKIFZl
Y3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+IFdlYlBhZ2U6OmNvbnN1bWVTYW5kYm94RXh0
ZW5zaW9ucyhWZWN0b3I8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiYmIHNhbmRib3hFeHRlbnNp
b25zKQogewogICAgIFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+IGRyYWdTYW5kYm94
RXh0ZW5zaW9uczsKKyAgICBkcmFnU2FuZGJveEV4dGVuc2lvbnMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShzYW5kYm94RXh0ZW5zaW9ucy5zaXplKCkpOwogICAgIGZvciAoYXV0byYgc2FuZGJveEV4
dGVuc2lvbiA6IHNhbmRib3hFeHRlbnNpb25zKSB7CiAgICAgICAgIGF1dG8gZXh0ZW5zaW9uID0g
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlKFdURk1vdmUoc2FuZGJveEV4dGVuc2lvbikpOwogICAg
ICAgICBpZiAoIWV4dGVuc2lvbikKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBib29s
IG9rID0gZXh0ZW5zaW9uLT5jb25zdW1lKCk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQob2ssIG9r
KTsKLSAgICAgICAgZHJhZ1NhbmRib3hFeHRlbnNpb25zLmFwcGVuZChXVEZNb3ZlKGV4dGVuc2lv
bikpOworICAgICAgICBkcmFnU2FuZGJveEV4dGVuc2lvbnMudW5jaGVja2VkQXBwZW5kKFdURk1v
dmUoZXh0ZW5zaW9uKSk7CiAgICAgfQorICAgIGRyYWdTYW5kYm94RXh0ZW5zaW9ucy5zaHJpbmtU
b0ZpdCgpOwogICAgIHJldHVybiBkcmFnU2FuZGJveEV4dGVuc2lvbnM7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXgg
OWRjMDBkYTI3NzBjMTkzOTg5MWEzMDBmMjMzNzQ5NmE5YzhlNzAxZC4uYmQzNjcyMDc1Yjc1NzY4
Yzg0MTQ3NzhmYzY2NWY1ZDc1YjRlMjRhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTc1NCwxMSArNzU0LDggQEAgdm9p
ZCBXZWJQYWdlOjpoYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2soRnJhbWVTZWxlY3Rpb24mIHNl
bGVjdGlvbiwgY29uc3QgVmVjdG8KIAogICAgIE5TRGF0YSAqc2VsZWN0aW9uRGF0YSA9IFthdHRy
aWJ1dGVkU2VsZWN0aW9uIFJURkRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW2F0dHJpYnV0ZWRT
ZWxlY3Rpb24gbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVzOkB7IH1dOwogCi0gICAgVmVjdG9y
PHVpbnQ4X3Q+IHNlbGVjdGlvbkRhdGFWZWN0b3I7Ci0gICAgc2VsZWN0aW9uRGF0YVZlY3Rvci5h
cHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc2VsZWN0aW9uRGF0YS5ieXRl
cyksIHNlbGVjdGlvbkRhdGEubGVuZ3RoKTsKLQogICAgIGZsdXNoUGVuZGluZ0VkaXRvclN0YXRl
VXBkYXRlKCk7Ci0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93Q29udGV4dE1l
bnUoQ29udGV4dE1lbnVDb250ZXh0RGF0YShwb2ludCwgc2VsZWN0aW9uRGF0YVZlY3RvciwgcGhv
bmVOdW1iZXJzLCBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSksIFVz
ZXJEYXRhKCkpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3dDb250ZXh0
TWVudShDb250ZXh0TWVudUNvbnRleHREYXRhKHBvaW50LCBWZWN0b3IgeyByZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihzZWxlY3Rpb25EYXRhLmJ5dGVzKSwgc2VsZWN0aW9uRGF0YS5s
ZW5ndGggfSwgcGhvbmVOdW1iZXJzLCBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuaXNDb250ZW50RWRp
dGFibGUoKSksIFVzZXJEYXRhKCkpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpoYW5kbGVJbWFnZVNl
cnZpY2VDbGljayhjb25zdCBJbnRQb2ludCYgcG9pbnQsIEltYWdlJiBpbWFnZSwgSFRNTEltYWdl
RWxlbWVudCYgZWxlbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcApp
bmRleCA3OTk2MTNkMzc3NDIzNjNiZmJkY2Q5NTI5Nzk5NjIyMDZmMDIyOGE4Li44OTkwZWRkNzZj
YWI5NmMyZGVjZDNiOTYwNTRjZmY2Mjk1YmIwY2Y1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlByb2Nlc3MuY3BwCkBAIC0xNDUyLDggKzE0NTIsMTAgQEAgdm9pZCBXZWJQcm9jZXNzOjpm
ZXRjaFdlYnNpdGVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHdlYnNpdGVEYXRhVHlw
ZXMsIEMKIHsKICAgICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsKICAgICBpZiAod2Vic2l0ZURh
dGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6Ok1lbW9yeUNhY2hlKSkgewotICAgICAg
ICBmb3IgKGF1dG8mIG9yaWdpbiA6IE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5vcmlnaW5zV2l0
aENhY2hlKHNlc3Npb25JRCgpKSkKLSAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMuYXBw
ZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbi0+ZGF0YSgpLCBXZWJzaXRlRGF0YVR5cGU6
Ok1lbW9yeUNhY2hlLCAwIH0pOworICAgICAgICBhdXRvIG9yaWdpbnMgPSBNZW1vcnlDYWNoZTo6
c2luZ2xldG9uKCkub3JpZ2luc1dpdGhDYWNoZShzZXNzaW9uSUQoKSk7CisgICAgICAgIHdlYnNp
dGVEYXRhLmVudHJpZXMgPSBXVEY6Om1hcChvcmlnaW5zLCBbXShhdXRvJiBvcmlnaW4pIHsKKyAg
ICAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4tPmRhdGEoKSwgV2Vi
c2l0ZURhdGFUeXBlOjpNZW1vcnlDYWNoZSwgMCB9OworICAgICAgICB9KTsKICAgICB9CiAgICAg
Y29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452612</attachid>
            <date>2022-02-18 18:28:27 -0800</date>
            <delta_ts>2022-02-18 18:41:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236852-20220218182826.patch</filename>
            <type>text/plain</type>
            <size>162099</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDM5OWU1MDY5NDYzM2NiYmY1OTIzNWNm
OTJlZmJiNjc2MTkxYWMyOGIuLjVlNjk4NjA4YzllYjEyMWExMzU2MmM4MzJjYzRhNjAyZTU3NmI3
YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjItMDItMTggIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGV2ZW4gbW9yZSBjYWxs
IHNpdGVzIGNvbnN0cnVjdGluZyB2ZWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuY3BwOgorICAgICAgICAoV1RGOjpD
b25jdXJyZW50V29ya1F1ZXVlOjphcHBseSk6CisgICAgICAgICogd3RmL2NmL0xhbmd1YWdlQ0Yu
Y3BwOgorICAgICAgICAoV1RGOjpwbGF0Zm9ybVVzZXJQcmVmZXJyZWRMYW5ndWFnZXMpOgorCiAy
MDIyLTAyLTE4ICBSb2JlcnQgSmVubmVyICA8SmVubmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBV
bnJldmlld2VkLCByZXZlcnRpbmcgcjI5MDE0OS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1NDRlYjFjM2ZhMDRi
MWY3MTM2YzZjNDFhYmQ2ZmVjNjZkYzlhOTkwLi5jYzEyZmZmZWMwYzY0OTFmMmNhZjg4NjVkODIy
YWZkMDViYmY1MGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTY2IEBACisyMDIyLTAyLTE4ICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4gdXAgLyBvcHRp
bWl6ZSBldmVuIG1vcmUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9ycworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2ODUyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2FwcGxlcGF5
L1BheW1lbnRDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXltZW50Q29vcmRp
bmF0b3I6OmJlZ2luUGF5bWVudFNlc3Npb24pOgorICAgICAgICAqIE1vZHVsZXMvYXBwbGVwYXkv
Y29jb2EvUGF5bWVudE1ldGhvZENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydCk6
CisgICAgICAgICogTW9kdWxlcy9jYWNoZS9ET01DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpET01DYWNoZTo6YmF0Y2hQdXRPcGVyYXRpb24pOgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBh
ZC9HYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWQ6OkdhbWVwYWQpOgorICAg
ICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHYW1lcGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkRGlzY29ubmVjdGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdhbWVwYWRNYW5hZ2VyOjptYWtlR2FtZXBhZFZpc2libGUpOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlOjpvYmplY3RTdG9yZU5hbWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCS2V5RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6aXNEZWxldGVkVmFs
dWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QktleURhdGFIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6Omhhc2gg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzIGNv
bnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmVOYW1lcyBjb25zdCk6
CisgICAgICAgICogTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0OjpzaG93TWVkaWFDb250cm9sc0Nv
bnRleHRNZW51KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlOjphY3RpdmVSYW5nZXMgY29uc3QpOgor
ICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmg6CisgICAgICAgIChXZWJD
b3JlOjpEZWNvZGVPcmRlclNhbXBsZU1hcDo6c2l6ZSBjb25zdCk6CisgICAgICAgICogTW9kdWxl
cy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0Lmg6CisgICAgICAgICogTW9kdWxlcy9zcGVl
Y2gvU3BlZWNoU3ludGhlc2lzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNp
czo6Z2V0Vm9pY2VzKToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hS
ZWNvZ25pemVyVGFzay5tbToKKyAgICAgICAgKC1bV2ViU3BlZWNoUmVjb2duaXplclRhc2tJbXBs
IGNhbGxiYWNrV2l0aFRyYW5zY3JpcHRpb25zOmlzRmluYWw6XSk6CisgICAgICAgICogTW9kdWxl
cy9zcGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2tNb2NrLm1tOgorICAgICAgICAo
LVtXZWJTcGVlY2hSZWNvZ25pemVyVGFza01vY2sgYXVkaW9TYW1wbGVzQXZhaWxhYmxlOl0pOgor
ICAgICAgICAqIGFuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpibGVuZEZ1bmMpOgorICAgICAgICAqIGFuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5l
c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaW1lbGluZXNDb250
cm9sbGVyOjp1cGRhdGVBbmltYXRpb25zQW5kU2VuZEV2ZW50cyk6CisgICAgICAgICogYW5pbWF0
aW9uL0tleWZyYW1lRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByb2Nlc3NQcm9wZXJ0
eUluZGV4ZWRLZXlmcmFtZXMpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRF
eHRlbnNpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRl
bnRFeHRlbnNpb246OkNvbnRlbnRFeHRlbnNpb24pOgorICAgICAgICAqIGNzcy9DU1NWYWx1ZUxp
c3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlTGlzdDo6c2l6ZSBjb25zdCk6CisgICAg
ICAgICogY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmhvaXN0Q2hpbGRyZW5XaXRoT3BlcmF0b3IpOgorICAg
ICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXJJbXBsOjpjb25zdW1lQ29udGFpbmVyUnVsZSk6CisgICAgICAgICogZG9tL0RPTVN0
cmluZ0xpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVN0cmluZ0xpc3Q6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpET01TdHJpbmdMaXN0OjphcHBlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NU3RyaW5nTGlzdDo6RE9NU3RyaW5nTGlzdCk6CisgICAgICAgICogZG9tL0V2ZW50UGF0
aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFBhdGg6OkV2ZW50UGF0aCk6CisgICAgICAg
ICogZG9tL0Z1bGxzY3JlZW5NYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZ1bGxzY3Jl
ZW5NYW5hZ2VyOjpjYW5jZWxGdWxsc2NyZWVuKToKKyAgICAgICAgKiBkb20vTG9hZGFibGVTY3Jp
cHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGFibGVTY3JpcHQ6Om5vdGlmeUNsaWVudEZp
bmlzaGVkKToKKyAgICAgICAgKiBkb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmFkaW9CdXR0b25Hcm91cDo6bWVtYmVycyBjb25zdCk6CisgICAgICAgICogaHRt
bC9EaXJlY3RvcnlGaWxlTGlzdENyZWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9GaWxl
TGlzdCk6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2F2ZUxhc3RTZWxlY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4
KToKKyAgICAgICAgKiBodG1sL0ltYWdlQml0bWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQml0bWFwOjpkZXRhY2hCaXRtYXBzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgICogaHRtbC9wYXJzZXIv
SFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZXRhQ2hh
cnNldFBhcnNlcjo6cHJvY2Vzc01ldGEpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVl
QnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6Omluc2VydFBo
b25lTnVtYmVyTGluayk6CisgICAgICAgICogaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHREb2N1bWVudFBhcnNlcjo6aW5zZXJ0RmFrZVBy
ZUVsZW1lbnQpOgorICAgICAgICAqIGxvYWRlci9Db250ZW50RmlsdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRGaWx0ZXI6OmNyZWF0ZSk6CisgICAgICAgICogbG9hZGVyL2FwcGNh
Y2hlL0FwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpwYXJzZUFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdCk6CisgICAgICAgICogcGFnZS9SZXNpemVP
YnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNpemVPYnNlcnZlcjo6ZGVsaXZlck9i
c2VydmF0aW9ucyk6CisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmluaXRpYWxpemVJbmRpY2F0b3IpOgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRl
bnRTZWN1cml0eVBvbGljeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVN1YlJlc291cmNl
SW50ZWdyaXR5SW50b0RpZ2VzdHMpOgorICAgICAgICAqIHBsYXRmb3JtL0ZpbGVDaG9vc2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpG
aWxlQ2hvb3Nlcjo6Y2hvb3NlTWVkaWFGaWxlcyk6CisgICAgICAgICogcGxhdGZvcm0vU2hhcmVk
QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmFw
cGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vVGhyZWFkU2FmZURhdGFCdWZmZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OmFkZCk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9EU1BLZXJu
ZWxQcm9jZXNzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EU1BLZXJuZWxQcm9jZXNz
b3I6OmluaXRpYWxpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvUmVzYW1wbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUmVzYW1wbGVyOjpBdWRpb1Jlc2FtcGxlcik6
CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0TnVtYmVyT2ZD
aGFubmVscyk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vTXVsdGlDaGFubmVsUmVzYW1wbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok11bHRpQ2hhbm5lbFJlc2FtcGxlcjo6TXVsdGlDaGFu
bmVsUmVzYW1wbGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudC5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkL21hYy9EdWFsc2hvY2szSElER2FtZXBhZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEdWFsc2hvY2szSElER2FtZXBhZDo6RHVhbHNob2NrM0hJREdhbWVw
YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWQvbWFjL0xvZ2l0ZWNoR2FtZXBhZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMb2dpdGVjaEdhbWVwYWQ6OkxvZ2l0ZWNoR2FtZXBhZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ2FtZXBhZC9tYWMvU3RhZGlhSElER2FtZXBhZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdGFkaWFISURHYW1lcGFkOjpTdGFkaWFISURHYW1lcGFkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI6OmFkZFJlcGFpbnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhVdGlsaXRp
ZXM6OnBhdGhzV2l0aFNocmlua1dyYXBwZWRSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRo
VXRpbGl0aWVzOjpwYXRoV2l0aFNocmlua1dyYXBwZWRSZWN0c0Zvck91dGxpbmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZTo6YnVmZmVyZWRTYW1wbGVzRm9yVHJhY2tJZCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3Ry
ZWFtaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVGYWlyUGxheVN0cmVhbWlu
Zzo6ZXh0cmFjdEtleUlEc1NrZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFWRldyYXBwZXI6OnNldFJlcXVlc3RGb3JLZXkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1p
bmdBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBs
YXlTdHJlYW1pbmdBVkZPYmpDOjp1cGRhdGVLZXlTdGF0dXNlcyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVyQVZGT2JqQy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlckFWRk9iakM6OmZyYW1lSW5mb3MgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZl
clBhcnNlckFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJB
VkZPYmpDOjpkaWRQYXJzZVN0cmVhbURhdGFBc0Fzc2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW06CisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjp2YXJpYXRpb25BeGVzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6
OndyaXRlU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZVZp
ZGVvQ2FwdHVyZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZVZpZGVvQ2Fw
dHVyZVNvdXJjZTo6c2V0U3VwcG9ydGVkUHJlc2V0cyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3Ry
eUltcGw6OnJlZ2lzdGVyQmxvYlVSTCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVnaXN0cnlJ
bXBsOjp3cml0ZUJsb2JzVG9UZW1wb3JhcnlGaWxlc0ZvckluZGV4ZWREQik6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveE1vZGVsT2JqZWN0OjpkcmF3Qm94U2lkZUZyb21QYXRoKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyQmFja2luZzo6Y29ubmVjdENsaXBwaW5nU3RhY2tMYXllcnMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjphZGp1c3RPdmVyZmxvd1Njcm9sbGJhckNvbnRhaW5lckxheWVycyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6cGFpbnRBdHRhY2htZW50VGl0bGVCYWNrZ3JvdW5kKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTVkdT
dHJva2VQYWludGluZ1Jlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRD
aHVuay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1bms6OlNWR1RleHRDaHVuayk6
CisgICAgICAgICogc3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlBhZ2VSdWxlQ29sbGVjdG9yOjptYXRjaFBhZ2VSdWxlcyk6CisgICAgICAgICog
c3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVT
ZXRCdWlsZGVyOjpNZWRpYVF1ZXJ5Q29sbGVjdG9yOjpwb3ApOgorICAgICAgICAqIHN0eWxlL1N0
eWxlQnVpbGRlckNvbnZlcnRlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRDb250YWluZXJOYW1lKToKKwogMjAyMi0wMi0xOCAgSiBQYXNjb2Ug
IDxqX3Bhc2NvZUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkF1dGhuXSBTdXBwb3J0IGZvciBj
b25kaXRpb25hbCBtZWRpYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYWIwMzJhMDA4MmViZjUzZDc3Y2FmZjY3
YmQ1MzBmOGRhZjlkNjUwYy4uY2ZkNWRiY2Q1ZDI3ZjQ0ZTczY2U2ZGMyOTY3Zjg1ZDk1ZTcxNWI3
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5OCBAQAorMjAyMi0wMi0xOCAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIC8gb3B0aW1pemUgZXZlbiBtb3Jl
IGNhbGwgc2l0ZXMgY29uc3RydWN0aW5nIHZlY3RvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjg1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBs
YXllclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTWVkaWFQbGF5ZXJQcm94eTo6
b3V0T2ZCYW5kVHJhY2tTb3VyY2VzKToKKyAgICAgICAgKiBHUFVQcm9jZXNzL21lZGlhL1JlbW90
ZVNvdXJjZUJ1ZmZlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlU291cmNlQnVm
ZmVyUHJveHk6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdt
ZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlU291cmNlQnVmZmVyUHJveHk6OnVwZGF0ZVRy
YWNrSWRzKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKToKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OmZldGNo
RGlza0NhY2hlRW50cmllcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTm90aWZpY2F0aW9u
cy9OZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtOb3RpZmljYXRpb25NYW5hZ2VyOjpnZXRPcmlnaW5zV2l0aFB1c2hBbmROb3RpZmljYXRpb25Q
ZXJtaXNzaW9ucyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdl
TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjphbGxTdG9yYWdl
QXJlYUlkZW50aWZpZXJzIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9y
YWdlL1RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OlRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6b3JpZ2lucyBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OlRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6c3RvcmFnZUFyZWFJZGVu
dGlmaWVycyBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9y
YWdlRW5naW5lQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hl
OjpmaW5pc2hPcGVuaW5nKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6
a2V5cyBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9y
YWdlQXJlYS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpTUUxpdGVT
dG9yYWdlQXJlYSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmg6Cisg
ICAgICAgICogU2hhcmVkL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OnNob3dQYXltZW50
VUkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbi5jcHA6CisgICAgICAg
IChBUEk6Ok5hdmlnYXRpb246Ok5hdmlnYXRpb24pOgorICAgICAgICAoQVBJOjptX2NsaWVudE5h
dmlnYXRpb25BY3Rpdml0eSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dLU2hhcmVTaGVl
dC5tbToKKyAgICAgICAgKGFwcGVuZEZpbGVzQXNTaGFyZWFibGVVUkxzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6cmVzdG9yZUFwcEhpZ2hsaWdodHNBbmRTY3JvbGxUb0luZGV4KToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpGcmFt
ZUxvYWRTdGF0ZTo6ZGlkRmluaXNoTG9hZCk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpwYXJhbWV0ZXJz
IGNvbnN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGlj
YXRvck1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpBdXRoZW50aWNhdG9yTWFuYWdlcjo6
c3RhcnREaXNjb3ZlcnkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3Qu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OnJlbW92ZUFsbEl0ZW1z
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0OjpjbGVhcik6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnJlbW92ZVByb2Nlc3NGcm9tT3JpZ2luQ2FjaGVTZXQpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUHJveHk6OnByb2Nlc3NEaWRUZXJtaW5hdGVPckZhaWxlZFRvTGF1bmNoKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5KToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YSk6CisgICAgICAgICogVUlQcm9jZXNz
L2lvcy9UZXh0Q2hlY2tlcklPUy5tbToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNo
ZWNrVGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hl
ZXRBc3Npc3RhbnQubW06CisgICAgICAgICgtW1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQgcHJlc2Vu
dGF0aW9uUmVjdEZvckVsZW1lbnRVc2luZ0Nsb3Nlc3RJbmRpY2F0ZWRSZWN0XSk6CisgICAgICAg
ICogVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6VGV4
dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0Fw
cGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
eW1lbnRDb29yZGluYXRvcjo6c2hvd1BheW1lbnRVSSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9B
dXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpzZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZCk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2Vy
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyOjpjcmVhdGVS
ZW1vdGVNZWRpYVBsYXllcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvU291cmNl
QnVmZmVyUHJpdmF0ZVJlbW90ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNvdXJjZUJ1ZmZlclBy
aXZhdGVSZW1vdGU6OnVwZGF0ZVRyYWNrSWRzKToKKyAgICAgICAgKFdlYktpdDo6U291cmNlQnVm
ZmVyUHJpdmF0ZVJlbW90ZTo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0aWFsaXph
dGlvblNlZ21lbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVEND
b2RlY3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpMaWJXZWJSVENDb2RlY3M6OmNyZWF0ZUVuY29k
ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQ
YWdlT3ZlcmxheS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9TZXNz
aW9uU3RhdGVDb252ZXJzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6dG9GcmFtZVN0YXRlKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRldmljZU9yaWVudGF0aW9u
VXBkYXRlUHJvdmlkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZpY2VPcmllbnRhdGlv
blVwZGF0ZVByb3ZpZGVyOjpkZXZpY2VPcmllbnRhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyOjpkZXZpY2VNb3Rpb25DaGFu
Z2VkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRP
dmVycmlkZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpv
dmVycmlkZGVuVHlwZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
U3BlZWNoU3ludGhlc2lzQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoU3lu
dGhlc2lzQ2xpZW50Ojp2b2ljZUxpc3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9G
aW5kQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjpmaW5k
U3RyaW5nTWF0Y2hlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4
dFJhbmdlQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZvdW5kVGV4dFJhbmdl
Q29udHJvbGxlcjo6ZHJhd1JlY3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y29uc3VtZVNhbmRib3hFeHRlbnNp
b25zKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzczo6ZmV0Y2hXZWJzaXRlRGF0YSk6CisKIDIwMjItMDItMTggIEogUGFzY29lICA8al9w
YXNjb2VAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJBdXRobl0gU3VwcG9ydCBmb3IgY29uZGl0
aW9uYWwgbWVkaWF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3Bw
IGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcAppbmRleCA5ZTEwNmUzOTRkM2Y0NGQyYzI1
ZmMzY2ExNTM1NDBlNTIwNGNiMzViLi44NjQwNmYzODg0MzcxNGNiMjU1YzM0ZWFlM2Y5MTgxZGFi
YTU4ZTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAKQEAgLTEwNSw3ICsxMDUsNyBAQCB2b2lkIENvbmN1
cnJlbnRXb3JrUXVldWU6OmFwcGx5KHNpemVfdCBpdGVyYXRpb25zLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoc2l6ZV90IGluZAogCiAgICAgICAgICAgICBtX3dvcmtlcnMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eSh0aHJlYWRDb3VudCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dGhyZWFkQ291bnQ7ICsraSkgewotICAgICAgICAgICAgICAgIG1fd29ya2Vycy5hcHBlbmQoVGhy
ZWFkOjpjcmVhdGUoIlRocmVhZFBvb2wgV29ya2VyIiwgW3RoaXNdIHsKKyAgICAgICAgICAgICAg
ICBtX3dvcmtlcnMudW5jaGVja2VkQXBwZW5kKFRocmVhZDo6Y3JlYXRlKCJUaHJlYWRQb29sIFdv
cmtlciIsIFt0aGlzXSB7CiAgICAgICAgICAgICAgICAgICAgIHRocmVhZEJvZHkoKTsKICAgICAg
ICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9jZi9MYW5ndWFnZUNGLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2NmL0xhbmd1YWdlQ0YuY3BwCmlu
ZGV4IGJiYzFlZjZmNGVmZTAzMDU5Y2U1NTEzMWUwOGMxMDMzMjI0ODhlNTYuLmMwNGM1NWJjNjAz
ZDI4MWQwY2EzODkyMGViYThjNzllNWU2OTI5ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L2NmL0xhbmd1YWdlQ0YuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2NmL0xhbmd1YWdlQ0YuY3Bw
CkBAIC0xMDIsOSArMTAyLDEwIEBAIFZlY3RvcjxTdHJpbmc+IHBsYXRmb3JtVXNlclByZWZlcnJl
ZExhbmd1YWdlcyhTaG91bGRNaW5pbWl6ZUxhbmd1YWdlcyBzaG91bGRNaW5pCiAgICAgICAgIHJl
dHVybiB7ICJlbiJfcyB9OwogCiAgICAgVmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzOworICAgIGxh
bmd1YWdlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBsYXRmb3JtTGFuZ3VhZ2VzQ291bnQpOwog
ICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IHBsYXRmb3JtTGFuZ3VhZ2VzQ291bnQ7IGkrKykg
ewogICAgICAgICBhdXRvIHBsYXRmb3JtTGFuZ3VhZ2UgPSBzdGF0aWNfY2FzdDxDRlN0cmluZ1Jl
Zj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChwbGF0Zm9ybUxhbmd1YWdlcy5nZXQoKSwgaSkpOwot
ICAgICAgICBsYW5ndWFnZXMuYXBwZW5kKGh0dHBTdHlsZUxhbmd1YWdlQ29kZShwbGF0Zm9ybUxh
bmd1YWdlLCBzaG91bGRNaW5pbWl6ZUxhbmd1YWdlcykpOworICAgICAgICBsYW5ndWFnZXMudW5j
aGVja2VkQXBwZW5kKGh0dHBTdHlsZUxhbmd1YWdlQ29kZShwbGF0Zm9ybUxhbmd1YWdlLCBzaG91
bGRNaW5pbWl6ZUxhbmd1YWdlcykpOwogICAgIH0KIAogICAgIExPR19XSVRIX1NUUkVBTShMYW5n
dWFnZSwgc3RyZWFtIDw8ICJBZnRlciBwYXNzaW5nIHRocm91Z2ggaHR0cFN0eWxlTGFuZ3VhZ2VD
b2RlOiAiIDw8IGxhbmd1YWdlcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2FwcGxlcGF5L1BheW1lbnRDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2FwcGxlcGF5L1BheW1lbnRDb29yZGluYXRvci5jcHAKaW5kZXggMWEzMjdhOTRiMGI3MWQ0ZWM3
NWVhY2M4ZDRhZDc4YTkxYjlmZjY4NS4uNGE5NDMyMjQ5ZDUyZDUxZDE0N2I4NmU1NzA4ZDUxODg4
YmE2NGY1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXlt
ZW50Q29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkv
UGF5bWVudENvb3JkaW5hdG9yLmNwcApAQCAtMTAxLDExICsxMDEsMTAgQEAgYm9vbCBQYXltZW50
Q29vcmRpbmF0b3I6OmJlZ2luUGF5bWVudFNlc3Npb24oRG9jdW1lbnQmIGRvY3VtZW50LCBQYXlt
ZW50U2Vzc2lvbiYKIHsKICAgICBBU1NFUlQoIW1fYWN0aXZlU2Vzc2lvbik7CiAKLSAgICBWZWN0
b3I8VVJMPiBsaW5rSWNvblVSTHM7Ci0gICAgZm9yIChhdXRvJiBpY29uIDogTGlua0ljb25Db2xs
ZWN0b3IgeyBkb2N1bWVudCB9Lmljb25zT2ZUeXBlcyh7IExpbmtJY29uVHlwZTo6VG91Y2hJY29u
LCBMaW5rSWNvblR5cGU6OlRvdWNoUHJlY29tcG9zZWRJY29uIH0pKQotICAgICAgICBsaW5rSWNv
blVSTHMuYXBwZW5kKGljb24udXJsKTsKLQotICAgIGF1dG8gc2hvd1BheW1lbnRVSSA9IG1fY2xp
ZW50LnNob3dQYXltZW50VUkoZG9jdW1lbnQudXJsKCksIGxpbmtJY29uVVJMcywgcGF5bWVudFJl
cXVlc3QpOworICAgIGF1dG8gbGlua0ljb25VUkxzID0gTGlua0ljb25Db2xsZWN0b3IgeyBkb2N1
bWVudCB9Lmljb25zT2ZUeXBlcyh7IExpbmtJY29uVHlwZTo6VG91Y2hJY29uLCBMaW5rSWNvblR5
cGU6OlRvdWNoUHJlY29tcG9zZWRJY29uIH0pLm1hcChbXShhdXRvJiBpY29uKSB7CisgICAgICAg
IHJldHVybiBpY29uLnVybDsKKyAgICB9KTsKKyAgICBhdXRvIHNob3dQYXltZW50VUkgPSBtX2Ns
aWVudC5zaG93UGF5bWVudFVJKGRvY3VtZW50LnVybCgpLCBXVEZNb3ZlKGxpbmtJY29uVVJMcyks
IHBheW1lbnRSZXF1ZXN0KTsKICAgICBQQVlNRU5UX0NPT1JESU5BVE9SX1JFTEVBU0VfTE9HKCJi
ZWdpblBheW1lbnRTZXNzaW9uKCkgLT4gJWQiLCBzaG93UGF5bWVudFVJKTsKICAgICBpZiAoIXNo
b3dQYXltZW50VUkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvY29jb2EvUGF5bWVudE1ldGhvZENvY29hLm1tIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29jb2EubW0K
aW5kZXggNzY1M2RlNTRhZjUzOWYyNTYxZjQyMjM2ZDMwZWM2MWFiNTgwM2RkNS4uMzc1ZTUzZDZk
NGZkZGM4ODhmMzJlMDRlMjgzYTdkYjA0MTEzZDA2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9hcHBsZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29jb2EubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29jb2EubW0K
QEAgLTEwMSwxMSArMTAxLDggQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8QXBwbGVQYXlQYXltZW50
TWV0aG9kOjpUeXBlPiBjb252ZXJ0KFBLUGF5bWVudE1ldGhvZFR5cGUgcGEKICNpZiBIQVZFKFBB
U1NLSVRfUEFZTUVOVF9NRVRIT0RfQklMTElOR19BRERSRVNTKQogc3RhdGljIHZvaWQgY29udmVy
dChDTkxhYmVsZWRWYWx1ZTxDTlBvc3RhbEFkZHJlc3MqPiAqcG9zdGFsQWRkcmVzcywgQXBwbGVQ
YXlQYXltZW50Q29udGFjdCAmcmVzdWx0KQogewotICAgIFZlY3RvcjxTdHJpbmc+IGFkZHJlc3NM
aW5lOwotICAgIGlmIChOU1N0cmluZyAqc3RyZWV0ID0gcG9zdGFsQWRkcmVzcy52YWx1ZS5zdHJl
ZXQpIHsKLSAgICAgICAgYWRkcmVzc0xpbmUuYXBwZW5kKHN0cmVldCk7Ci0gICAgICAgIHJlc3Vs
dC5hZGRyZXNzTGluZXMgPSBXVEZNb3ZlKGFkZHJlc3NMaW5lKTsKLSAgICB9CisgICAgaWYgKE5T
U3RyaW5nICpzdHJlZXQgPSBwb3N0YWxBZGRyZXNzLnZhbHVlLnN0cmVldCkKKyAgICAgICAgcmVz
dWx0LmFkZHJlc3NMaW5lcyA9IFZlY3RvciB7IFN0cmluZyB7IHN0cmVldCB9IH07CiAgICAgcmVz
dWx0LnN1YkxvY2FsaXR5ID0gcG9zdGFsQWRkcmVzcy52YWx1ZS5zdWJMb2NhbGl0eTsKICAgICBy
ZXN1bHQubG9jYWxpdHkgPSBwb3N0YWxBZGRyZXNzLnZhbHVlLmNpdHk7CiAgICAgcmVzdWx0LnN1
YkFkbWluaXN0cmF0aXZlQXJlYSA9IHBvc3RhbEFkZHJlc3MudmFsdWUuc3ViQWRtaW5pc3RyYXRp
dmVBcmVhOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNo
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlLmNwcAppbmRleCA0
OWYzOThhYWZlZjM3Y2Q1ZThmOGViMjQ0ZDRlMTFmMzlmMmE4Y2QzLi4yZDQ2ZDFjZGJjNzE3ZjNj
OTI5OWVmYTg2M2E1NDkyNjM4M2FmNWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2NhY2hlL0RPTUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hl
L0RPTUNhY2hlLmNwcApAQCAtNTE1LDEwICs1MTUsOCBAQCBSZWNvcmQgRE9NQ2FjaGU6OnRvQ29u
bmVjdGlvblJlY29yZChjb25zdCBGZXRjaFJlcXVlc3QmIHJlcXVlc3QsIEZldGNoUmVzcG9uc2Um
CiAKIHZvaWQgRE9NQ2FjaGU6OmJhdGNoUHV0T3BlcmF0aW9uKGNvbnN0IEZldGNoUmVxdWVzdCYg
cmVxdWVzdCwgRmV0Y2hSZXNwb25zZSYgcmVzcG9uc2UsIERPTUNhY2hlRW5naW5lOjpSZXNwb25z
ZUJvZHkmJiByZXNwb25zZUJvZHksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRXhjZXB0aW9uT3I8
dm9pZD4mJik+JiYgY2FsbGJhY2spCiB7Ci0gICAgVmVjdG9yPFJlY29yZD4gcmVjb3JkczsKLSAg
ICByZWNvcmRzLmFwcGVuZCh0b0Nvbm5lY3Rpb25SZWNvcmQocmVxdWVzdCwgcmVzcG9uc2UsIFdU
Rk1vdmUocmVzcG9uc2VCb2R5KSkpOwotCi0gICAgYmF0Y2hQdXRPcGVyYXRpb24oV1RGTW92ZShy
ZWNvcmRzKSwgV1RGTW92ZShjYWxsYmFjaykpOworICAgIGF1dG8gcmVjb3JkID0gdG9Db25uZWN0
aW9uUmVjb3JkKHJlcXVlc3QsIHJlc3BvbnNlLCBXVEZNb3ZlKHJlc3BvbnNlQm9keSkpOworICAg
IGJhdGNoUHV0T3BlcmF0aW9uKHsgV1RGTW92ZShyZWNvcmQpIH0sIFdURk1vdmUoY2FsbGJhY2sp
KTsKIH0KIAogdm9pZCBET01DYWNoZTo6YmF0Y2hQdXRPcGVyYXRpb24oVmVjdG9yPFJlY29yZD4m
JiByZWNvcmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEV4Y2VwdGlvbk9yPHZvaWQ+JiYpPiYm
IGNhbGxiYWNrKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dh
bWVwYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuY3BwCmlu
ZGV4IDY5NjllMGI1MDNhODdkZDAzODVlMTgzOTA4ODQ2NzBmZWEwNGMyNjcuLjU4M2Y5Yzg1NTU2
NzE3OGNjZTcyY2FkNDQ3OTI0Y2Y4YmMzYzRlNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2dhbWVwYWQvR2FtZXBhZC5jcHAKQEAgLTQzLDggKzQzLDkgQEAgR2FtZXBhZDo6R2FtZXBhZChj
b25zdCBQbGF0Zm9ybUdhbWVwYWQmIHBsYXRmb3JtR2FtZXBhZCkKICAgICAsIG1fYXhlcyhwbGF0
Zm9ybUdhbWVwYWQuYXhpc1ZhbHVlcygpLnNpemUoKSwgMC4wKQogewogICAgIHVuc2lnbmVkIGJ1
dHRvbkNvdW50ID0gcGxhdGZvcm1HYW1lcGFkLmJ1dHRvblZhbHVlcygpLnNpemUoKTsKKyAgICBt
X2J1dHRvbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShidXR0b25Db3VudCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRvbkNvdW50OyArK2kpCi0gICAgICAgIG1fYnV0dG9ucy5h
cHBlbmQoR2FtZXBhZEJ1dHRvbjo6Y3JlYXRlKCkpOworICAgICAgICBtX2J1dHRvbnMudW5jaGVj
a2VkQXBwZW5kKEdhbWVwYWRCdXR0b246OmNyZWF0ZSgpKTsKIH0KIAogR2FtZXBhZDo6fkdhbWVw
YWQoKSA9IGRlZmF1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVw
YWQvR2FtZXBhZE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dh
bWVwYWRNYW5hZ2VyLmNwcAppbmRleCBjYzM3NDg1OGNmZWExYjI0NGMwNGJkNDFiMjk5NDhkMjlh
ZWEzMDMwLi41NDNmZTQ4OTE2N2U3Y2UxM2Q0OTc2OGZjN2UxNWYzNGQwODIzNmU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZE1hbmFnZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAKQEAg
LTc5LDE0ICs3OSwxMCBAQCB2b2lkIEdhbWVwYWRNYW5hZ2VyOjpwbGF0Zm9ybUdhbWVwYWRDb25u
ZWN0ZWQoUGxhdGZvcm1HYW1lcGFkJiBwbGF0Zm9ybUdhbWVwYWQsCiAKIHZvaWQgR2FtZXBhZE1h
bmFnZXI6OnBsYXRmb3JtR2FtZXBhZERpc2Nvbm5lY3RlZChQbGF0Zm9ybUdhbWVwYWQmIHBsYXRm
b3JtR2FtZXBhZCkKIHsKLSAgICBWZWN0b3I8V2Vha1B0cjxET01XaW5kb3c+PiB3ZWFrV2luZG93
czsKLSAgICBmb3IgKGF1dG8qIGRvbVdpbmRvdyA6IG1fZG9tV2luZG93cykKLSAgICAgICAgd2Vh
a1dpbmRvd3MuYXBwZW5kKCpkb21XaW5kb3cpOwotCiAgICAgSGFzaFNldDxOYXZpZ2F0b3JHYW1l
cGFkKj4gbm90aWZpZWROYXZpZ2F0b3JzOwogCiAgICAgLy8gSGFuZGxlIHRoZSBkaXNjb25uZWN0
IGZvciBhbGwgRE9NV2luZG93cyB3aXRoIGV2ZW50IGxpc3RlbmVycyBhbmQgdGhlaXIgTmF2aWdh
dG9ycy4KLSAgICBmb3IgKGF1dG8mIHdpbmRvdyA6IHdlYWtXaW5kb3dzKSB7CisgICAgZm9yIChh
dXRvJiB3aW5kb3cgOiBjb3B5VG9WZWN0b3JPZjxXZWFrUHRyPERPTVdpbmRvdz4+KG1fZG9tV2lu
ZG93cykpIHsKICAgICAgICAgLy8gRXZlbnQgZGlzcGF0Y2ggbWlnaHQgaGF2ZSBtYWRlIHRoaXMg
d2luZG93IGdvIGF3YXkuCiAgICAgICAgIGlmICghd2luZG93KQogICAgICAgICAgICAgY29udGlu
dWU7CkBAIC0xNDMsMTEgKzEzOSw3IEBAIHZvaWQgR2FtZXBhZE1hbmFnZXI6Om1ha2VHYW1lcGFk
VmlzaWJsZShQbGF0Zm9ybUdhbWVwYWQmIHBsYXRmb3JtR2FtZXBhZCwgSGFzaFNlCiAgICAgZm9y
IChhdXRvKiBuYXZpZ2F0b3IgOiBuYXZpZ2F0b3JTZXQpCiAgICAgICAgIG5hdmlnYXRvci0+Z2Ft
ZXBhZENvbm5lY3RlZChwbGF0Zm9ybUdhbWVwYWQpOwogCi0gICAgVmVjdG9yPFdlYWtQdHI8RE9N
V2luZG93Pj4gd2Vha1dpbmRvd3M7Ci0gICAgZm9yIChhdXRvKiBkb21XaW5kb3cgOiBtX2RvbVdp
bmRvd3MpCi0gICAgICAgIHdlYWtXaW5kb3dzLmFwcGVuZCgqZG9tV2luZG93KTsKLQotICAgIGZv
ciAoYXV0byYgd2luZG93IDogd2Vha1dpbmRvd3MpIHsKKyAgICBmb3IgKGF1dG8mIHdpbmRvdyA6
IGNvcHlUb1ZlY3Rvck9mPFdlYWtQdHI8RE9NV2luZG93Pj4obV9kb21XaW5kb3dzKSkgewogICAg
ICAgICAvLyBFdmVudCBkaXNwYXRjaCBtaWdodCBoYXZlIG1hZGUgdGhpcyB3aW5kb3cgZ28gYXdh
eS4KICAgICAgICAgaWYgKCF3aW5kb3cpCiAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAppbmRleCA3YWE2
MzJiN2VjMDQ3YmU0NjA4YjUxYTA5NGVhMWE0ZTU3YTI2MjliLi4wYmU4YmQxMTZlYzIzNjEyM2M3
MTUzMmQ3ZWUzNmM1NmU5OTY1NDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCkBAIC0xMDIsOSArMTAyLDcgQEAgUmVmPERPTVN0cmlu
Z0xpc3Q+IElEQkRhdGFiYXNlOjpvYmplY3RTdG9yZU5hbWVzKCkgY29uc3QKIHsKICAgICBBU1NF
UlQoY2FuQ3VycmVudFRocmVhZEFjY2Vzc1RocmVhZExvY2FsRGF0YShvcmlnaW5UaHJlYWQoKSkp
OwogCi0gICAgYXV0byBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7
Ci0gICAgZm9yIChhdXRvJiBuYW1lIDogbV9pbmZvLm9iamVjdFN0b3JlTmFtZXMoKSkKLSAgICAg
ICAgb2JqZWN0U3RvcmVOYW1lcy0+YXBwZW5kKG5hbWUpOworICAgIGF1dG8gb2JqZWN0U3RvcmVO
YW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZShtX2luZm8ub2JqZWN0U3RvcmVOYW1lcygpKTsK
ICAgICBvYmplY3RTdG9yZU5hbWVzLT5zb3J0KCk7CiAgICAgcmV0dXJuIG9iamVjdFN0b3JlTmFt
ZXM7CiB9CkBAIC0xNzUsMTkgKzE3MywxNiBAQCBFeGNlcHRpb25PcjxSZWY8SURCVHJhbnNhY3Rp
b24+PiBJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24oU3RyaW5nT3JWZWN0b3JPZlN0cmluZwogICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJGYWlsZWQgdG8gZXhl
Y3V0ZSAndHJhbnNhY3Rpb24nIG9uICdJREJEYXRhYmFzZSc6IFRoZSBkYXRhYmFzZSBjb25uZWN0
aW9uIGlzIGNsb3NpbmcuIl9zIH07CiAKICAgICBWZWN0b3I8U3RyaW5nPiBvYmplY3RTdG9yZXM7
Ci0gICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPFN0cmluZz4+KHN0b3JlTmFt
ZXMpKQorICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+PihzdG9y
ZU5hbWVzKSkgewogICAgICAgICBvYmplY3RTdG9yZXMgPSBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rv
cjxTdHJpbmc+PihzdG9yZU5hbWVzKSk7Ci0gICAgZWxzZQorICAgICAgICAvLyBJdCBpcyB2YWxp
ZCBmb3IgamF2YXNjcmlwdCB0byBwYXNzIGluIGEgbGlzdCBvZiBvYmplY3Qgc3RvcmUgbmFtZXMg
d2l0aCB0aGUgc2FtZSBuYW1lIGxpc3RlZCB0d2ljZSwKKyAgICAgICAgLy8gc28gd2UgbmVlZCB0
byBwdXQgdGhlbSBhbGwgaW4gYSBzZXQgdG8gZ2V0IGEgdW5pcXVlIGxpc3QuCisgICAgICAgIEhh
c2hTZXQ8U3RyaW5nPiBvYmplY3RTdG9yZVNldDsKKyAgICAgICAgb2JqZWN0U3RvcmVTZXQuYWRk
KG9iamVjdFN0b3Jlcy5iZWdpbigpLCBvYmplY3RTdG9yZXMuZW5kKCkpOworICAgICAgICBvYmpl
Y3RTdG9yZXMgPSBjb3B5VG9WZWN0b3Iob2JqZWN0U3RvcmVTZXQpOworICAgIH0gZWxzZQogICAg
ICAgICBvYmplY3RTdG9yZXMuYXBwZW5kKFdURk1vdmUoc3RkOjpnZXQ8U3RyaW5nPihzdG9yZU5h
bWVzKSkpOwogCi0gICAgLy8gSXQgaXMgdmFsaWQgZm9yIGphdmFzY3JpcHQgdG8gcGFzcyBpbiBh
IGxpc3Qgb2Ygb2JqZWN0IHN0b3JlIG5hbWVzIHdpdGggdGhlIHNhbWUgbmFtZSBsaXN0ZWQgdHdp
Y2UsCi0gICAgLy8gc28gd2UgbmVlZCB0byBwdXQgdGhlbSBhbGwgaW4gYSBzZXQgdG8gZ2V0IGEg
dW5pcXVlIGxpc3QuCi0gICAgSGFzaFNldDxTdHJpbmc+IG9iamVjdFN0b3JlU2V0OwotICAgIGZv
ciAoYXV0byYgb2JqZWN0U3RvcmUgOiBvYmplY3RTdG9yZXMpCi0gICAgICAgIG9iamVjdFN0b3Jl
U2V0LmFkZChvYmplY3RTdG9yZSk7Ci0KLSAgICBvYmplY3RTdG9yZXMgPSBjb3B5VG9WZWN0b3Io
b2JqZWN0U3RvcmVTZXQpOwotCiAgICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZU5hbWUgOiBvYmpl
Y3RTdG9yZXMpIHsKICAgICAgICAgaWYgKG1faW5mby5oYXNPYmplY3RTdG9yZShvYmplY3RTdG9y
ZU5hbWUpKQogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJLZXlEYXRhLmgKaW5kZXggNGI5Nzg1MzY5ZDE5MGE2YjE5NjkxZDEzN2Fl
MTU2N2U1YzM3OTVkOS4uOWY4YzMzNWY4NTMzZWZjNDA4YWQyZjljZjY3YjAxYjJlNjdiNjA3MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaApAQCAt
MjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSA8dmFyaWFudD4K
KyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZFNldC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIApAQCAtMTE3LDQxICsxMTgsNiBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKICAgICB9CiAKLSAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gaGFzaENvZGVz
OwotICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3R5cGUp
KTsKLSAgICAgICAgaGFzaENvZGVzLmFwcGVuZChtX2lzTnVsbCA/IDEgOiAwKTsKLSAgICAgICAg
aGFzaENvZGVzLmFwcGVuZChtX2lzRGVsZXRlZFZhbHVlID8gMSA6IDApOwotICAgICAgICBzd2l0
Y2ggKG1fdHlwZSkgewotICAgICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6SW52YWxpZDoK
LSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6Ok1heDoKLSAgICAgICAgY2FzZSBJbmRl
eGVkREI6OktleVR5cGU6Ok1pbjoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElu
ZGV4ZWREQjo6S2V5VHlwZTo6TnVtYmVyOgotICAgICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlw
ZTo6RGF0ZToKLSAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoU3RyaW5nSGFzaGVyOjpoYXNo
TWVtb3J5PHNpemVvZihkb3VibGUpPigmc3RkOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKSkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpTdHJpbmc6
Ci0gICAgICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKFN0cmluZ0hhc2g6Omhhc2goc3RkOjpnZXQ8
U3RyaW5nPihtX3ZhbHVlKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5k
ZXhlZERCOjpLZXlUeXBlOjpCaW5hcnk6IHsKLSAgICAgICAgICAgIGF1dG8qIGRhdGEgPSBzdGQ6
OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSkuZGF0YSgpOwotICAgICAgICAgICAg
aWYgKCFkYXRhKQotICAgICAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoMCk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaGFzaENvZGVzLmFwcGVuZChTdHJpbmdIYXNoZXI6
Omhhc2hNZW1vcnkoZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpBcnJheToK
LSAgICAgICAgICAgIGZvciAoYXV0byYga2V5IDogc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+
PihtX3ZhbHVlKSkKLSAgICAgICAgICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKGtleS5oYXNoKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gU3RyaW5n
SGFzaGVyOjpoYXNoTWVtb3J5KGhhc2hDb2Rlcy5kYXRhKCksIGhhc2hDb2Rlcy5zaXplKCkgKiBz
aXplb2YodW5zaWduZWQpKTsKLSAgICB9Ci0KICAgICBTdHJpbmcgc3RyaW5nKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gSW5kZXhlZERCOjpLZXlUeXBlOjpTdHJpbmcp
OwpAQCAtMTg0LDYgKzE1MCw4IEBAIHB1YmxpYzoKIAogICAgIHNpemVfdCBzaXplKCkgY29uc3Q7
CiAKKyAgICBib29sIGlzRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9pc0RlbGV0ZWRW
YWx1ZTsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBzdHJ1Y3QgSURCS2V5RGF0YUhhc2hUcmFp
dHM7CiAKQEAgLTE5Niw4ICsxNjQsMzYgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnZhcmlhbnQ8VmVj
dG9yPElEQktleURhdGE+LCBTdHJpbmcsIGRvdWJsZSwgVGhyZWFkU2FmZURhdGFCdWZmZXI+IG1f
dmFsdWU7CiB9OwogCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IElEQktl
eURhdGEmIGtleURhdGEpCit7CisgICAgYWRkKGhhc2hlciwga2V5RGF0YS50eXBlKCkpOworICAg
IGFkZChoYXNoZXIsIGtleURhdGEuaXNOdWxsKCkpOworICAgIGFkZChoYXNoZXIsIGtleURhdGEu
aXNEZWxldGVkVmFsdWUoKSk7CisgICAgc3dpdGNoIChrZXlEYXRhLnR5cGUoKSkgeworICAgIGNh
c2UgSW5kZXhlZERCOjpLZXlUeXBlOjpJbnZhbGlkOgorICAgIGNhc2UgSW5kZXhlZERCOjpLZXlU
eXBlOjpNYXg6CisgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6Ok1pbjoKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6Ok51bWJlcjoKKyAgICAgICAgYWRkKGhh
c2hlciwga2V5RGF0YS5udW1iZXIoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW5kZXhl
ZERCOjpLZXlUeXBlOjpEYXRlOgorICAgICAgICBhZGQoaGFzaGVyLCBrZXlEYXRhLmRhdGUoKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpTdHJpbmc6Cisg
ICAgICAgIGFkZChoYXNoZXIsIGtleURhdGEuc3RyaW5nKCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6QmluYXJ5OgorICAgICAgICBhZGQoaGFzaGVyLCBr
ZXlEYXRhLmJpbmFyeSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbmRleGVkREI6Oktl
eVR5cGU6OkFycmF5OgorICAgICAgICBhZGQoaGFzaGVyLCBrZXlEYXRhLmFycmF5KCkpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKIHN0cnVjdCBJREJLZXlEYXRhSGFzaCB7Ci0gICAgc3Rh
dGljIHVuc2lnbmVkIGhhc2goY29uc3QgSURCS2V5RGF0YSYgYSkgeyByZXR1cm4gYS5oYXNoKCk7
IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBJREJLZXlEYXRhJiBhKSB7IHJldHVy
biBjb21wdXRlSGFzaChhKTsgfQogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IElEQktleURh
dGEmIGEsIGNvbnN0IElEQktleURhdGEmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQogICAgIHN0YXRp
YyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUu
Y3BwCmluZGV4IDE0MzUxNDBhNWNiNGExYTFkNDA3YTJkYjI5ZDE1YmRmMmQ1MmMwYjYuLmNlNjNj
NmE1NmIxNGQ1YmUwMzIyNTczNzI1MzIyYjgyZjBkZGRkMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTEyNiwxNCAr
MTI2LDExIEBAIFJlZjxET01TdHJpbmdMaXN0PiBJREJPYmplY3RTdG9yZTo6aW5kZXhOYW1lcygp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKGNhbkN1cnJlbnRUaHJlYWRBY2Nlc3NUaHJlYWRMb2NhbERh
dGEobV90cmFuc2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAKLSAgICBhdXRv
IGluZGV4TmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKLQotICAgIGlmICghbV9kZWxl
dGVkKSB7Ci0gICAgICAgIGZvciAoYXV0byYgbmFtZSA6IG1faW5mby5pbmRleE5hbWVzKCkpCi0g
ICAgICAgICAgICBpbmRleE5hbWVzLT5hcHBlbmQobmFtZSk7Ci0gICAgICAgIGluZGV4TmFtZXMt
PnNvcnQoKTsKLSAgICB9CisgICAgaWYgKG1fZGVsZXRlZCkKKyAgICAgICAgcmV0dXJuIERPTVN0
cmluZ0xpc3Q6OmNyZWF0ZSgpOwogCisgICAgYXV0byBpbmRleE5hbWVzID0gRE9NU3RyaW5nTGlz
dDo6Y3JlYXRlKG1faW5mby5pbmRleE5hbWVzKCkpOworICAgIGluZGV4TmFtZXMtPnNvcnQoKTsK
ICAgICByZXR1cm4gaW5kZXhOYW1lczsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCmluZGV4IDZjMTEyMWI3MzEwZjczN2Y3
Yjk1YmVjZWU4NDU0ZTZhYzUwZGYyYjYuLjFiNGM4Yjk3MWJlNjczM2VmMzU2YjA5YWRkOWIzMjBi
ZTQ2OTVlNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbi5jcHAKQEAgLTEyMSwxMiArMTIxLDggQEAgUmVmPERPTVN0cmluZ0xpc3Q+
IElEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZU5hbWVzKCkgY29uc3QKIHsKICAgICBBU1NFUlQo
Y2FuQ3VycmVudFRocmVhZEFjY2Vzc1RocmVhZExvY2FsRGF0YShtX2RhdGFiYXNlLT5vcmlnaW5U
aHJlYWQoKSkpOwogCi0gICAgY29uc3QgVmVjdG9yPFN0cmluZz4gbmFtZXMgPSBpc1ZlcnNpb25D
aGFuZ2UoKSA/IG1fZGF0YWJhc2UtPmluZm8oKS5vYmplY3RTdG9yZU5hbWVzKCkgOiBtX2luZm8u
b2JqZWN0U3RvcmVzKCk7Ci0KLSAgICBSZWY8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1l
cyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwotICAgIGZvciAoYXV0byYgbmFtZSA6IG5hbWVz
KQotICAgICAgICBvYmplY3RTdG9yZU5hbWVzLT5hcHBlbmQobmFtZSk7Ci0KKyAgICBWZWN0b3I8
U3RyaW5nPiBuYW1lcyA9IGlzVmVyc2lvbkNoYW5nZSgpID8gbV9kYXRhYmFzZS0+aW5mbygpLm9i
amVjdFN0b3JlTmFtZXMoKSA6IG1faW5mby5vYmplY3RTdG9yZXMoKTsKKyAgICBhdXRvIG9iamVj
dFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoV1RGTW92ZShuYW1lcykpOwogICAg
IG9iamVjdFN0b3JlTmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gb2JqZWN0U3RvcmVOYW1lczsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRp
YUNvbnRyb2xzSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMv
TWVkaWFDb250cm9sc0hvc3QuY3BwCmluZGV4IDE5YTA2OWUyM2IzOWRiYjRhNzA2NWQ4ZGU3OGQ3
ZWU0OTNjNjk4MTguLmI4MjVlYzgwMDUxNDgwMjhlMmIwN2IxOWRjNzgzOTJhNDNhOGNiYTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRy
b2xzSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01l
ZGlhQ29udHJvbHNIb3N0LmNwcApAQCAtNTU1LDExICs1NTUsMTAgQEAgYm9vbCBNZWRpYUNvbnRy
b2xzSG9zdDo6c2hvd01lZGlhQ29udHJvbHNDb250ZXh0TWVudShIVE1MRWxlbWVudCYgdGFyZ2V0
LCBTdHJpbmcKIAogICAgIGlmIChvcHRpb25zSlNPTk9iamVjdC0+Z2V0Qm9vbGVhbigiaW5jbHVk
ZUxhbmd1YWdlcyJfcykudmFsdWVfb3IoZmFsc2UpKSB7CiAgICAgICAgIGlmIChhdXRvKiBhdWRp
b1RyYWNrcyA9IG1lZGlhRWxlbWVudC5hdWRpb1RyYWNrcygpOyBhdWRpb1RyYWNrcyAmJiBhdWRp
b1RyYWNrcy0+bGVuZ3RoKCkgPiAxKSB7Ci0gICAgICAgICAgICBWZWN0b3I8TWVudUl0ZW0+IGxh
bmd1YWdlTWVudUl0ZW1zOwotCiAgICAgICAgICAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMg
PSBwYWdlLT5ncm91cCgpLmVuc3VyZUNhcHRpb25QcmVmZXJlbmNlcygpOwotICAgICAgICAgICAg
Zm9yIChhdXRvJiBhdWRpb1RyYWNrIDogY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlz
dEZvck1lbnUoYXVkaW9UcmFja3MpKQotICAgICAgICAgICAgICAgIGxhbmd1YWdlTWVudUl0ZW1z
LmFwcGVuZChjcmVhdGVNZW51SXRlbShhdWRpb1RyYWNrLCBjYXB0aW9uUHJlZmVyZW5jZXMuZGlz
cGxheU5hbWVGb3JUcmFjayhhdWRpb1RyYWNrLmdldCgpKSwgYXVkaW9UcmFjay0+ZW5hYmxlZCgp
KSk7CisgICAgICAgICAgICBhdXRvIGxhbmd1YWdlTWVudUl0ZW1zID0gY2FwdGlvblByZWZlcmVu
Y2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUoYXVkaW9UcmFja3MpLm1hcChbJl0oYXV0byYgYXVk
aW9UcmFjaykgeworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVNZW51SXRlbShhdWRpb1Ry
YWNrLCBjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFjayhhdWRpb1RyYWNrLmdl
dCgpKSwgYXVkaW9UcmFjay0+ZW5hYmxlZCgpKTsKKyAgICAgICAgICAgIH0pOwogCiAgICAgICAg
ICAgICBpZiAoIWxhbmd1YWdlTWVudUl0ZW1zLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBp
dGVtcy5hcHBlbmQoY3JlYXRlU3VibWVudShXRUJfVUlfU1RSSU5HX0tFWSgiTGFuZ3VhZ2VzIiwg
Ikxhbmd1YWdlcyAoTWVkaWEgQ29udHJvbHMgTWVudSkiLCAiTGFuZ3VhZ2VzIG1lZGlhIGNvbnRy
b2xzIGNvbnRleHQgbWVudSB0aXRsZSIpLCAiZ2xvYmUiX3MsIFdURk1vdmUobGFuZ3VhZ2VNZW51
SXRlbXMpKSk7CkBAIC01NjgsMTUgKzU2NywxMyBAQCBib29sIE1lZGlhQ29udHJvbHNIb3N0Ojpz
aG93TWVkaWFDb250cm9sc0NvbnRleHRNZW51KEhUTUxFbGVtZW50JiB0YXJnZXQsIFN0cmluZwog
CiAgICAgaWYgKG9wdGlvbnNKU09OT2JqZWN0LT5nZXRCb29sZWFuKCJpbmNsdWRlU3VidGl0bGVz
Il9zKS52YWx1ZV9vcihmYWxzZSkpIHsKICAgICAgICAgaWYgKGF1dG8qIHRleHRUcmFja3MgPSBt
ZWRpYUVsZW1lbnQudGV4dFRyYWNrcygpOyB0ZXh0VHJhY2tzICYmIHRleHRUcmFja3MtPmxlbmd0
aCgpKSB7Ci0gICAgICAgICAgICBWZWN0b3I8TWVudUl0ZW0+IHN1YnRpdGxlTWVudUl0ZW1zOwot
CiAgICAgICAgICAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBwYWdlLT5ncm91cCgpLmVu
c3VyZUNhcHRpb25QcmVmZXJlbmNlcygpOwogICAgICAgICAgICAgYXV0byBzb3J0ZWRUZXh0VHJh
Y2tzID0gY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUodGV4dFRyYWNr
cywgeyBUZXh0VHJhY2s6OktpbmQ6OlN1YnRpdGxlcywgVGV4dFRyYWNrOjpLaW5kOjpDYXB0aW9u
cywgVGV4dFRyYWNrOjpLaW5kOjpEZXNjcmlwdGlvbnMgfSk7CiAgICAgICAgICAgICBib29sIGFs
bFRyYWNrc0Rpc2FibGVkID0gbm90Rm91bmQgPT0gc29ydGVkVGV4dFRyYWNrcy5maW5kSWYoW10g
KGNvbnN0IGF1dG8mIHRleHRUcmFjaykgewogICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0VHJh
Y2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmc7CiAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgIGJvb2wgdXNlc0F1dG9tYXRpY1RyYWNrID0gY2FwdGlvblByZWZlcmVuY2Vz
LmNhcHRpb25EaXNwbGF5TW9kZSgpID09IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OkF1dG9tYXRp
YyAmJiBhbGxUcmFja3NEaXNhYmxlZDsKLSAgICAgICAgICAgIGZvciAoYXV0byYgdGV4dFRyYWNr
IDogc29ydGVkVGV4dFRyYWNrcykgeworICAgICAgICAgICAgYXV0byBzdWJ0aXRsZU1lbnVJdGVt
cyA9IHNvcnRlZFRleHRUcmFja3MubWFwKFsmXShhdXRvJiB0ZXh0VHJhY2spIHsKICAgICAgICAg
ICAgICAgICBib29sIGNoZWNrZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAoYWxsVHJh
Y2tzRGlzYWJsZWQgJiYgdGV4dFRyYWNrID09ICZUZXh0VHJhY2s6OmNhcHRpb25NZW51T2ZmSXRl
bSgpICYmIChjYXB0aW9uUHJlZmVyZW5jZXMuY2FwdGlvbkRpc3BsYXlNb2RlKCkgPT0gQ2FwdGlv
blVzZXJQcmVmZXJlbmNlczo6Rm9yY2VkT25seSB8fCBjYXB0aW9uUHJlZmVyZW5jZXMuY2FwdGlv
bkRpc3BsYXlNb2RlKCkgPT0gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6TWFudWFsKSkKICAgICAg
ICAgICAgICAgICAgICAgY2hlY2tlZCA9IHRydWU7CkBAIC01ODQsOCArNTgxLDggQEAgYm9vbCBN
ZWRpYUNvbnRyb2xzSG9zdDo6c2hvd01lZGlhQ29udHJvbHNDb250ZXh0TWVudShIVE1MRWxlbWVu
dCYgdGFyZ2V0LCBTdHJpbmcKICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoIXVzZXNBdXRvbWF0aWNUcmFjayAmJiB0ZXh0VHJhY2st
Pm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmcpCiAgICAgICAgICAgICAgICAgICAg
IGNoZWNrZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHN1YnRpdGxlTWVudUl0ZW1zLmFwcGVu
ZChjcmVhdGVNZW51SXRlbSh0ZXh0VHJhY2ssIGNhcHRpb25QcmVmZXJlbmNlcy5kaXNwbGF5TmFt
ZUZvclRyYWNrKHRleHRUcmFjay5nZXQoKSksIGNoZWNrZWQpKTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTWVudUl0ZW0odGV4dFRyYWNrLCBjYXB0aW9uUHJl
ZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFjayh0ZXh0VHJhY2suZ2V0KCkpLCBjaGVja2VkKTsK
KyAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICBpZiAoIXN1YnRpdGxlTWVudUl0ZW1zLmlz
RW1wdHkoKSkKICAgICAgICAgICAgICAgICBpdGVtcy5hcHBlbmQoY3JlYXRlU3VibWVudShXRUJf
VUlfU1RSSU5HX0tFWSgiU3VidGl0bGVzIiwgIlN1YnRpdGxlcyAoTWVkaWEgQ29udHJvbHMgTWVu
dSkiLCAiU3VidGl0bGVzIG1lZGlhIGNvbnRyb2xzIGNvbnRleHQgbWVudSB0aXRsZSIpLCAiY2Fw
dGlvbnMuYnViYmxlIl9zLCBXVEZNb3ZlKHN1YnRpdGxlTWVudUl0ZW1zKSkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcAppbmRleCA5
MTI3NDdmNDA2YzI5NTk0OTk3M2I1YmIxMzQ5ZGJjYTY3NDFjMTM1Li5hMmU2NThhOTJmOTk3ZDdm
NGI0M2UxNzAzZjRhMGUwOTQ5MTdiMGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcApAQCAtMTA1MSwxMCArMTA1MSw5IEBAIHZv
aWQgTWVkaWFTb3VyY2U6Om9uUmVhZHlTdGF0ZUNoYW5nZShSZWFkeVN0YXRlIG9sZFN0YXRlLCBS
ZWFkeVN0YXRlIG5ld1N0YXRlKQogCiBWZWN0b3I8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVNv
dXJjZTo6YWN0aXZlUmFuZ2VzKCkgY29uc3QKIHsKLSAgICBWZWN0b3I8UGxhdGZvcm1UaW1lUmFu
Z2VzPiBhY3RpdmVSYW5nZXM7Ci0gICAgZm9yIChhdXRvJiBzb3VyY2VCdWZmZXIgOiAqbV9hY3Rp
dmVTb3VyY2VCdWZmZXJzKQotICAgICAgICBhY3RpdmVSYW5nZXMuYXBwZW5kKHNvdXJjZUJ1ZmZl
ci0+YnVmZmVyZWRJbnRlcm5hbCgpLnJhbmdlcygpKTsKLSAgICByZXR1cm4gYWN0aXZlUmFuZ2Vz
OworICAgIHJldHVybiBXVEY6Om1hcCgqbV9hY3RpdmVTb3VyY2VCdWZmZXJzLCBbXShhdXRvJiBz
b3VyY2VCdWZmZXIpIHsKKyAgICAgICAgcmV0dXJuIHNvdXJjZUJ1ZmZlci0+YnVmZmVyZWRJbnRl
cm5hbCgpLnJhbmdlcygpOworICAgIH0pOwogfQogCiBFeGNlcHRpb25PcjxSZWY8U291cmNlQnVm
ZmVyUHJpdmF0ZT4+IE1lZGlhU291cmNlOjpjcmVhdGVTb3VyY2VCdWZmZXJQcml2YXRlKGNvbnN0
IENvbnRlbnRUeXBlJiBpbmNvbWluZ1R5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1hcC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXNvdXJjZS9TYW1wbGVNYXAuaAppbmRleCBlYWY0OTMxNTk3ZDI2ODUyM2M2NjdiZDljZGNj
NGNlYTY1NDMzNjk1Li5hZjFlMTA0NTgxNzg3ZjE1ZjZmMWYzODViMjU3MjQ0NGQ4ODU5NWZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1hcC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmgKQEAg
LTkxLDYgKzkxLDcgQEAgcHVibGljOgogICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVzLnJiZWdpbigpOyB9CiAgICAgcmV2ZXJzZV9pdGVy
YXRvciByZW5kKCkgeyByZXR1cm4gbV9zYW1wbGVzLnJlbmQoKTsgfQogICAgIGNvbnN0X3JldmVy
c2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5yZW5kKCk7IH0KKyAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5zaXplKCk7IH0KIAogICAg
IFdFQkNPUkVfRVhQT1JUIGl0ZXJhdG9yIGZpbmRTYW1wbGVXaXRoRGVjb2RlS2V5KGNvbnN0IEtl
eVR5cGUmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBpdGVyYXRvciBmaW5kU2FtcGxlQWZ0ZXJEZWNv
ZGVLZXkoY29uc3QgS2V5VHlwZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaAppbmRleCBmYzZlMDczYWI5MGU3NmQxODE1
Zjg4OTZiNmY2NjA5NmRmMmZkZGQ1Li40MzZiZjAxN2JjODFhY2ZiOTRmNWU4NWI5MGY5MWNmNDVi
YmViZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1Nv
dXJjZUJ1ZmZlckxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNl
L1NvdXJjZUJ1ZmZlckxpc3QuaApAQCAtNDgsNiArNDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB+U291cmNlQnVmZmVyTGlzdCgpOwogCiAgICAgdW5zaWduZWQgbG9uZyBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CisKICAgICBTb3VyY2VCdWZmZXIqIGl0ZW0odW5z
aWduZWQgbG9uZyBpbmRleCkgY29uc3QgeyByZXR1cm4gKGluZGV4IDwgbV9saXN0LnNpemUoKSkg
PyBtX2xpc3RbaW5kZXhdLmdldCgpIDogbnVsbHB0cjsgfQogCiAgICAgdm9pZCBhZGQoUmVmPFNv
dXJjZUJ1ZmZlcj4mJik7CkBAIC01OCw2ICs1OSw5IEBAIHB1YmxpYzoKIAogICAgIFZlY3RvcjxS
ZWZQdHI8U291cmNlQnVmZmVyPj46Oml0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9saXN0LmJl
Z2luKCk7IH0KICAgICBWZWN0b3I8UmVmUHRyPFNvdXJjZUJ1ZmZlcj4+OjppdGVyYXRvciBlbmQo
KSB7IHJldHVybiBtX2xpc3QuZW5kKCk7IH0KKyAgICBWZWN0b3I8UmVmUHRyPFNvdXJjZUJ1ZmZl
cj4+Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5iZWdpbigp
OyB9CisgICAgVmVjdG9yPFJlZlB0cjxTb3VyY2VCdWZmZXI+Pjo6Y29uc3RfaXRlcmF0b3IgZW5k
KCkgY29uc3QgeyByZXR1cm4gbV9saXN0LmVuZCgpOyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25z
dCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CiAKICAgICAvLyBFdmVudFRhcmdldCBpbnRlcmZh
Y2UKICAgICBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIFNvdXJjZUJ1ZmZlckxpc3RFdmVudFRhcmdldEludGVyZmFjZVR5cGU7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRo
ZXNpcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMu
Y3BwCmluZGV4IGVhZjNhMmUxZTc5OGE0ODFmNzY4YjMzYzVmZDI5ZDNjN2NiYWIzYWUuLjgyYzFh
M2EwYzA3MjU1YzFlODBkYTYxZDU5MGJhOWM5NDFjYzA2OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzLmNwcApAQCAtOTMsOSArOTMsMTAg
QEAgY29uc3QgVmVjdG9yPFJlZjxTcGVlY2hTeW50aGVzaXNWb2ljZT4+JiBTcGVlY2hTeW50aGVz
aXM6OmdldFZvaWNlcygpCiAgICAgICAgIHJldHVybiBtX3ZvaWNlTGlzdDsKIAogICAgIC8vIElm
IHRoZSB2b2ljZUxpc3QgaXMgZW1wdHksIHRoYXQncyB0aGUgY3VlIHRvIGdldCB0aGUgdm9pY2Vz
IGZyb20gdGhlIHBsYXRmb3JtIGFnYWluLgotICAgIGZvciAoYXV0byYgdm9pY2UgOiBtX3NwZWVj
aFN5bnRoZXNpc0NsaWVudCA/IG1fc3BlZWNoU3ludGhlc2lzQ2xpZW50LT52b2ljZUxpc3QoKSA6
IGVuc3VyZVBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIoKS52b2ljZUxpc3QoKSkKLSAgICAgICAg
bV92b2ljZUxpc3QuYXBwZW5kKFNwZWVjaFN5bnRoZXNpc1ZvaWNlOjpjcmVhdGUoKnZvaWNlKSk7
Ci0KKyAgICBhdXRvJiB2b2ljZUxpc3QgPSBtX3NwZWVjaFN5bnRoZXNpc0NsaWVudCA/IG1fc3Bl
ZWNoU3ludGhlc2lzQ2xpZW50LT52b2ljZUxpc3QoKSA6IGVuc3VyZVBsYXRmb3JtU3BlZWNoU3lu
dGhlc2l6ZXIoKS52b2ljZUxpc3QoKTsKKyAgICBtX3ZvaWNlTGlzdCA9IHZvaWNlTGlzdC5tYXAo
W10oYXV0byYgdm9pY2UpIHsKKyAgICAgICAgcmV0dXJuIFNwZWVjaFN5bnRoZXNpc1ZvaWNlOjpj
cmVhdGUoKnZvaWNlKTsKKyAgICB9KTsKICAgICByZXR1cm4gbV92b2ljZUxpc3Q7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVjaFJl
Y29nbml6ZXJUYXNrLm1tIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvY29jb2EvV2Vi
U3BlZWNoUmVjb2duaXplclRhc2subW0KaW5kZXggZjFiOTY5NTgwNTdkMmZlNjA0NGQyYzdiMjU5
ZGI2YzVjZWI0NGVmZS4uYTVlODVhZjgyOWJjMGRkZGVmNjJjNjFhNGY2YzlmMmNmMmFkNmNmNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvY29jb2EvV2ViU3BlZWNo
UmVjb2duaXplclRhc2subW0KKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvY29j
b2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2subW0KQEAgLTEyOCw5ICsxMjgsOCBAQCAtICh2b2lk
KWNhbGxiYWNrV2l0aFRyYW5zY3JpcHRpb25zOihOU0FycmF5PFNGVHJhbnNjcmlwdGlvbiAqPiAq
KXRyYW5zY3JpcHRpb25zCiAgICAgICAgIGlmIChhbHRlcm5hdGl2ZXMuc2l6ZSgpID09IF9tYXhB
bHRlcm5hdGl2ZXMpCiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgVmVjdG9yPFNwZWVj
aFJlY29nbml0aW9uUmVzdWx0RGF0YT4gZGF0YXM7Ci0gICAgZGF0YXMuYXBwZW5kKFNwZWVjaFJl
Y29nbml0aW9uUmVzdWx0RGF0YSB7IFdURk1vdmUoYWx0ZXJuYXRpdmVzKSwgYm9vbChpc0ZpbmFs
KSB9KTsKLSAgICBfZGVsZWdhdGVDYWxsYmFjayhTcGVlY2hSZWNvZ25pdGlvblVwZGF0ZTo6Y3Jl
YXRlUmVzdWx0KF9pZGVudGlmaWVyLCBXVEZNb3ZlKGRhdGFzKSkpOworICAgIFNwZWVjaFJlY29n
bml0aW9uUmVzdWx0RGF0YSBkYXRhIHsgV1RGTW92ZShhbHRlcm5hdGl2ZXMpLCAhIWlzRmluYWwg
fTsKKyAgICBfZGVsZWdhdGVDYWxsYmFjayhTcGVlY2hSZWNvZ25pdGlvblVwZGF0ZTo6Y3JlYXRl
UmVzdWx0KF9pZGVudGlmaWVyLCB7IFdURk1vdmUoZGF0YSkgfSkpOwogfQogCiAtICh2b2lkKWF1
ZGlvU2FtcGxlc0F2YWlsYWJsZTooQ01TYW1wbGVCdWZmZXJSZWYpc2FtcGxlQnVmZmVyCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNv
Z25pemVyVGFza01vY2subW0gYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9jb2NvYS9X
ZWJTcGVlY2hSZWNvZ25pemVyVGFza01vY2subW0KaW5kZXggYmM1YzYyMTliNWRhZGMzYjFjZGM1
OTBkNjVjODk3YjcyNTBiMWUyMS4uOTYzZmI0N2M0Yzg1YWEwNjA1YTJkYWJjNzE5ZTU2NzRjMjYw
YWJmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvY29jb2EvV2Vi
U3BlZWNoUmVjb2duaXplclRhc2tNb2NrLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
c3BlZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrTW9jay5tbQpAQCAtNjMsMTEgKzYz
LDkgQEAgLSAodm9pZClhdWRpb1NhbXBsZXNBdmFpbGFibGU6KENNU2FtcGxlQnVmZmVyUmVmKXNh
bXBsZUJ1ZmZlcgogICAgIH0KIAogICAgIC8vIEZha2Ugc29tZSByZWNvZ25pdGlvbiByZXN1bHRz
LgotICAgIFZlY3RvcjxTcGVlY2hSZWNvZ25pdGlvbkFsdGVybmF0aXZlRGF0YT4gYWx0ZXJuYXRp
dmVzOwotICAgIGFsdGVybmF0aXZlcy5hcHBlbmQoU3BlZWNoUmVjb2duaXRpb25BbHRlcm5hdGl2
ZURhdGEgeyAiVGVzdCIsIDEuMCB9KTsKLSAgICBWZWN0b3I8U3BlZWNoUmVjb2duaXRpb25SZXN1
bHREYXRhPiBkYXRhczsKLSAgICBkYXRhcy5hcHBlbmQoU3BlZWNoUmVjb2duaXRpb25SZXN1bHRE
YXRhIHsgV1RGTW92ZShhbHRlcm5hdGl2ZXMpLCB0cnVlICB9KTsKLSAgICBfZGVsZWdhdGVDYWxs
YmFjayhTcGVlY2hSZWNvZ25pdGlvblVwZGF0ZTo6Y3JlYXRlUmVzdWx0KF9pZGVudGlmaWVyLCBX
VEZNb3ZlKGRhdGFzKSkpOworICAgIFNwZWVjaFJlY29nbml0aW9uQWx0ZXJuYXRpdmVEYXRhIGFs
dGVybmF0aXZlIHsgIlRlc3QiLCAxLjAgfTsKKyAgICBTcGVlY2hSZWNvZ25pdGlvblJlc3VsdERh
dGEgZGF0YSB7IHsgV1RGTW92ZShhbHRlcm5hdGl2ZSkgfSwgdHJ1ZSB9OworICAgIF9kZWxlZ2F0
ZUNhbGxiYWNrKFNwZWVjaFJlY29nbml0aW9uVXBkYXRlOjpjcmVhdGVSZXN1bHQoX2lkZW50aWZp
ZXIsIHsgV1RGTW92ZShkYXRhKSB9KSk7CiAKICAgICBpZiAoIV9kb011bHRpcGxlUmVjb2duaXRp
b25zKQogICAgICAgICBbc2VsZiBhYm9ydF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
bmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0
aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAppbmRleCBlMzU5YTA0M2IyZTNjZjM5ZjljMjZi
YzU5ZTk4ZjEwNWUxMzJjMTA1Li44YmNlNjY3MDY2YTNmNzc2ZjBlYWJhOTY2YjgxYTc0NmE5NzVl
MzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmlt
YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1h
dGlvbi5jcHAKQEAgLTE2NCwxMCArMTY0LDggQEAgc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVy
YXRpb25zIGJsZW5kRnVuYyhjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBjb24KICAg
ICBpZiAoY29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24gPT0gQ29tcG9zaXRlT3BlcmF0aW9uOjpB
ZGQpIHsKICAgICAgICAgQVNTRVJUKGNvbnRleHQucHJvZ3Jlc3MgPT0gMS4wKTsKICAgICAgICAg
VHJhbnNmb3JtT3BlcmF0aW9ucyByZXN1bHRPcGVyYXRpb25zOwotICAgICAgICBmb3IgKGF1dG8g
b3BlcmF0aW9uIDogZnJvbS5vcGVyYXRpb25zKCkpCi0gICAgICAgICAgICByZXN1bHRPcGVyYXRp
b25zLm9wZXJhdGlvbnMoKS5hcHBlbmQob3BlcmF0aW9uKTsKLSAgICAgICAgZm9yIChhdXRvIG9w
ZXJhdGlvbiA6IHRvLm9wZXJhdGlvbnMoKSkKLSAgICAgICAgICAgIHJlc3VsdE9wZXJhdGlvbnMu
b3BlcmF0aW9ucygpLmFwcGVuZChvcGVyYXRpb24pOworICAgICAgICByZXN1bHRPcGVyYXRpb25z
Lm9wZXJhdGlvbnMoKS5hcHBlbmRWZWN0b3IoZnJvbS5vcGVyYXRpb25zKCkpOworICAgICAgICBy
ZXN1bHRPcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmRWZWN0b3IodG8ub3BlcmF0aW9ucygp
KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdE9wZXJhdGlvbnM7CiAgICAgfQogICAgIGF1dG8gYm94
U2l6ZSA9IGlzPFJlbmRlckJveD4oY29udGV4dC5jbGllbnQtPnJlbmRlcmVyKCkpID8gZG93bmNh
c3Q8UmVuZGVyQm94PigqY29udGV4dC5jbGllbnQtPnJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3Qo
KS5zaXplKCkgOiBMYXlvdXRTaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmlt
YXRpb24vRG9jdW1lbnRUaW1lbGluZXNDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXIuY3BwCmluZGV4IGI1ZmQyYWVmMTAw
MDEyZGE5YzRiZGIyMWU3YWQwNDFhMzY2NDE2YmYuLjcwOTQ1M2JjNjYyNTJmOTU5ODI0YmE5NGVj
YTdhMzMwMDhjOWNhM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1
bWVudFRpbWVsaW5lc0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9Eb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXIuY3BwCkBAIC05OCw5ICs5OCw3IEBAIHZvaWQg
RG9jdW1lbnRUaW1lbGluZXNDb250cm9sbGVyOjp1cGRhdGVBbmltYXRpb25zQW5kU2VuZEV2ZW50
cyhSZWR1Y2VkUmVzb2x1dGlvCiAgICAgQVNTRVJUKCFtX3RpbWVsaW5lcy5oYXNOdWxsUmVmZXJl
bmNlcygpKTsKIAogICAgIC8vIFdlIG5lZWQgdG8gY29weSBtX3RpbWVsaW5lcyBiZWZvcmUgaXRl
cmF0aW5nIG92ZXIgaXRzIG1lbWJlcnMgc2luY2UgdGhlIHN0ZXBzIGluIHRoaXMgcHJvY2VkdXJl
IG1heSBtdXRhdGUgbV90aW1lbGluZXMuCi0gICAgVmVjdG9yPFJlZjxEb2N1bWVudFRpbWVsaW5l
Pj4gcHJvdGVjdGVkVGltZWxpbmVzOwotICAgIGZvciAoYXV0byYgdGltZWxpbmUgOiBtX3RpbWVs
aW5lcykKLSAgICAgICAgcHJvdGVjdGVkVGltZWxpbmVzLmFwcGVuZCh0aW1lbGluZSk7CisgICAg
YXV0byBwcm90ZWN0ZWRUaW1lbGluZXMgPSBjb3B5VG9WZWN0b3JPZjxSZWY8RG9jdW1lbnRUaW1l
bGluZT4+KG1fdGltZWxpbmVzKTsKIAogICAgIC8vIFdlIG5lZWQgdG8gZnJlZXplIHRoZSBjdXJy
ZW50IHRpbWUgZXZlbiBpZiBubyBhbmltYXRpb24gaXMgcnVubmluZy4KICAgICAvLyBkb2N1bWVu
dC50aW1lbGluZS5jdXJyZW50VGltZSBtYXkgYmUgY2FsbGVkIGZyb20gYSByQUYgY2FsbGJhY2sg
YW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcAppbmRleCA3
N2QxZTYwZmEzMjgzMWIxMzI2YzNiMzA4NDM1Nzc3MjYwNzM5OWY1Li5jZmU0MzJlN2RlYmUxYmVk
MTU1NTY1ZDgxMmE4ZWJlODA3ZjYwMmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmlt
YXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9L
ZXlmcmFtZUVmZmVjdC5jcHAKQEAgLTM3NSw4ICszNzUsNyBAQCBzdGF0aWMgaW5saW5lIEV4Y2Vw
dGlvbk9yPHZvaWQ+IHByb2Nlc3NQcm9wZXJ0eUluZGV4ZWRLZXlmcmFtZXMoSlNHbG9iYWxPYmpl
Y3QmCiAgICAgICAgIGNvbXB1dGVNaXNzaW5nS2V5ZnJhbWVPZmZzZXRzKHByb3BlcnR5S2V5ZnJh
bWVzKTsKIAogICAgICAgICAvLyA3LiBBZGQga2V5ZnJhbWVzIGluIHByb3BlcnR5IGtleWZyYW1l
cyB0byBwcm9jZXNzZWQga2V5ZnJhbWVzLgotICAgICAgICBmb3IgKGF1dG8mIGtleWZyYW1lIDog
cHJvcGVydHlLZXlmcmFtZXMpCi0gICAgICAgICAgICBwYXJzZWRLZXlmcmFtZXMuYXBwZW5kKFdU
Rk1vdmUoa2V5ZnJhbWUpKTsKKyAgICAgICAgcGFyc2VkS2V5ZnJhbWVzLmFwcGVuZFZlY3Rvcihw
cm9wZXJ0eUtleWZyYW1lcyk7CiAgICAgfQogCiAgICAgLy8gMy4gU29ydCBwcm9jZXNzZWQga2V5
ZnJhbWVzIGJ5IHRoZSBjb21wdXRlZCBrZXlmcmFtZSBvZmZzZXQgb2YgZWFjaCBrZXlmcmFtZSBp
biBpbmNyZWFzaW5nIG9yZGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uLmNwcAppbmRleCA1MzQ5ZWYzOGZlNjkwNjRkZDQ1M2Zk
NjhkN2RjNmE4ZWU3NzNkOWVjLi5jMDVjZDg5NDE1ZmY0MTIwNGUzYzNjOGM3NzNmNDhkMTEzNjNj
MDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50
RXh0ZW5zaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250
ZW50RXh0ZW5zaW9uLmNwcApAQCAtNDYsOCArNDYsNyBAQCBDb250ZW50RXh0ZW5zaW9uOjpDb250
ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgUmVmPENvbXBpbGVkQ29udGVu
dAogICAgICwgbV9leHRlbnNpb25CYXNlVVJMKFdURk1vdmUoZXh0ZW5zaW9uQmFzZVVSTCkpCiB7
CiAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlciBpbnRlcnByZXRlcihtX2NvbXBpbGVkRXh0ZW5z
aW9uLT51cmxGaWx0ZXJzQnl0ZWNvZGUoKSk7Ci0gICAgZm9yICh1aW50NjRfdCBhY3Rpb24gOiBp
bnRlcnByZXRlci5hY3Rpb25zTWF0Y2hpbmdFdmVyeXRoaW5nKCkpCi0gICAgICAgIG1fdW5pdmVy
c2FsQWN0aW9ucy5hcHBlbmQoYWN0aW9uKTsKKyAgICBtX3VuaXZlcnNhbEFjdGlvbnMgPSBjb3B5
VG9WZWN0b3IoaW50ZXJwcmV0ZXIuYWN0aW9uc01hdGNoaW5nRXZlcnl0aGluZygpKTsKIAogICAg
IGlmIChzaG91bGRDb21waWxlQ1NTID09IFNob3VsZENvbXBpbGVDU1M6OlllcykKICAgICAgICAg
Y29tcGlsZUdsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVl
TGlzdC5oCmluZGV4IGJiMTI3M2E1ZmQzZWU4ZTY4ODBiYTc2N2FmOTI5MTdlYmRkYTc0OGYuLmY5
YTc2MDYwNDA4OWIwY2UyZjY5Zjg3Njg2NTRmMTI2ODIzN2E2N2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
VmFsdWVMaXN0LmgKQEAgLTU4LDYgKzU4LDcgQEAgcHVibGljOgogICAgIGNvbnN0X2l0ZXJhdG9y
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CiAgICAgaXRlcmF0b3IgYmVn
aW4oKSB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9CiAgICAgaXRlcmF0b3IgZW5kKCkgeyBy
ZXR1cm4gbV92YWx1ZXMuZW5kKCk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzLnNpemUoKTsgfQogCiAgICAgdm9pZCBhcHBlbmQoUmVmPENTU1ZhbHVlPiYmKTsK
ICAgICB2b2lkIHByZXBlbmQoUmVmPENTU1ZhbHVlPiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmNwcAppbmRleCA2YWI1Y2I2NzRkNDE1M2Q4
MjI1MmYyNTg3ZWU0NmZjZjVhYWM4YzRhLi43OWYyYTg4MjYwY2VhZWYwZDU4MDE1NzY2MTM5YzA3
NTc2NjdjMDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3Bl
cmF0aW9uTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJh
dGlvbk5vZGUuY3BwCkBAIC02MjAsMTQgKzYyMCwxMSBAQCB2b2lkIENTU0NhbGNPcGVyYXRpb25O
b2RlOjpob2lzdENoaWxkcmVuV2l0aE9wZXJhdG9yKENhbGNPcGVyYXRvciBvcCkKIAogICAgIFZl
Y3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gbmV3Q2hpbGRyZW47CiAgICAgZm9yIChh
dXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pIHsKLSAgICAgICAgaWYgKGlzPENTU0NhbGNPcGVyYXRp
b25Ob2RlPihjaGlsZCkgJiYgZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdl
dCgpKS5jYWxjT3BlcmF0b3IoKSA9PSBvcCkgewotICAgICAgICAgICAgYXV0byYgY2hpbGRyZW4g
PSBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpLmNoaWxkcmVuKCk7
Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNoaWxkVG9Nb3ZlIDogY2hpbGRyZW4pCi0gICAgICAg
ICAgICAgICAgbmV3Q2hpbGRyZW4uYXBwZW5kKFdURk1vdmUoY2hpbGRUb01vdmUpKTsKLSAgICAg
ICAgfSBlbHNlCisgICAgICAgIGlmIChpczxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQpICYm
IGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZC5nZXQoKSkuY2FsY09wZXJhdG9y
KCkgPT0gb3ApCisgICAgICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmRWZWN0b3IoZG93bmNhc3Q8
Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKS5jaGlsZHJlbigpKTsKKyAgICAgICAg
ZWxzZQogICAgICAgICAgICAgbmV3Q2hpbGRyZW4uYXBwZW5kKFdURk1vdmUoY2hpbGQpKTsKICAg
ICB9Ci0gICAgCiAgICAgbmV3Q2hpbGRyZW4uc2hyaW5rVG9GaXQoKTsKICAgICBtX2NoaWxkcmVu
ID0gV1RGTW92ZShuZXdDaGlsZHJlbik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRE9NU3RyaW5nTGlzdC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTVN0cmluZ0xpc3QuaApp
bmRleCA2OWNiMmQ3ZjkzMmUwMGEyNjVlMDhkOGZmM2IxY2I1MGMxMjc3Y2U1Li4yODczY2ZjZmNi
ZWMzZDg2Y2YyNzUyODZhN2JkOTIyMjc3NzY1YzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRE9NU3RyaW5nTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdM
aXN0LmgKQEAgLTQwLDkgKzQwLDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRE9NU3RyaW5nTGlzdCk7CiAgICAgfQogCisgICAgc3RhdGljIFJlZjxET01TdHJpbmdM
aXN0PiBjcmVhdGUoVmVjdG9yPFN0cmluZz4mJiBzdHJpbmdzKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRE9NU3RyaW5nTGlzdChXVEZNb3ZlKHN0cmluZ3MpKSk7CisgICAg
fQorCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmdzLmlzRW1wdHko
KTsgfQogICAgIHZvaWQgY2xlYXIoKSB7IG1fc3RyaW5ncy5jbGVhcigpOyB9CiAgICAgdm9pZCBh
cHBlbmQoY29uc3QgU3RyaW5nJiBzdHJpbmcpIHsgbV9zdHJpbmdzLmFwcGVuZChzdHJpbmcpOyB9
CisgICAgdm9pZCBhcHBlbmQoU3RyaW5nJiYgc3RyaW5nKSB7IG1fc3RyaW5ncy5hcHBlbmQoV1RG
TW92ZShzdHJpbmcpKTsgfQogICAgIHZvaWQgc29ydCgpOwogCiAgICAgLy8gSW1wbGVtZW50cyB0
aGUgSURMLgpAQCAtNTMsNyArNTksMTAgQEAgcHVibGljOgogICAgIG9wZXJhdG9yIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JigpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nczsgfQogCiBwcml2YXRlOgot
ICAgIERPTVN0cmluZ0xpc3QoKSB7IH0KKyAgICBET01TdHJpbmdMaXN0KCkgPSBkZWZhdWx0Owor
ICAgIGV4cGxpY2l0IERPTVN0cmluZ0xpc3QoVmVjdG9yPFN0cmluZz4mJiBzdHJpbmdzKQorICAg
ICAgICA6IG1fc3RyaW5ncyhXVEZNb3ZlKHN0cmluZ3MpKQorICAgIHsgfQogCiAgICAgVmVjdG9y
PFN0cmluZz4gbV9zdHJpbmdzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudFBhdGguY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAKaW5kZXggNDZm
YjY0NWUwNTMzNzU4MWY5ZmEzNDUyMzAzYTJmZTM4MGY0NmMwNi4uZWNiY2MwMGYzNmYwNzZlMzIw
YjZhZDE2YWQxZDlhMGJmMDM4ZTI3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50UGF0aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAKQEAgLTI3
NCwxMSArMjc0LDExIEBAIFZlY3RvcjxFdmVudFRhcmdldCo+IEV2ZW50UGF0aDo6Y29tcHV0ZVBh
dGhVbmNsb3NlZFRvVGFyZ2V0KGNvbnN0IEV2ZW50VGFyZ2V0JiB0CiAKIEV2ZW50UGF0aDo6RXZl
bnRQYXRoKGNvbnN0IFZlY3RvcjxFdmVudFRhcmdldCo+JiB0YXJnZXRzKQogewotICAgIGZvciAo
YXV0byogdGFyZ2V0IDogdGFyZ2V0cykgeworICAgIG1fcGF0aCA9IHRhcmdldHMubWFwKFsmXShh
dXRvKiB0YXJnZXQpIHsKICAgICAgICAgQVNTRVJUKHRhcmdldCk7CiAgICAgICAgIEFTU0VSVCgh
aXM8Tm9kZT4odGFyZ2V0KSk7Ci0gICAgICAgIG1fcGF0aC5hcHBlbmQoRXZlbnRDb250ZXh0IHsg
RXZlbnRDb250ZXh0OjpUeXBlOjpOb3JtYWwsIG51bGxwdHIsIHRhcmdldCwgKnRhcmdldHMuYmVn
aW4oKSwgMCB9KTsKLSAgICB9CisgICAgICAgIHJldHVybiBFdmVudENvbnRleHQgeyBFdmVudENv
bnRleHQ6OlR5cGU6Ok5vcm1hbCwgbnVsbHB0ciwgdGFyZ2V0LCAqdGFyZ2V0cy5iZWdpbigpLCAw
IH07CisgICAgfSk7CiB9CiAKIHN0YXRpYyBOb2RlKiBtb3ZlT3V0T2ZBbGxTaGFkb3dSb290cyhO
b2RlJiBzdGFydGluZ05vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRnVsbHNj
cmVlbk1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0Z1bGxzY3JlZW5NYW5hZ2VyLmNw
cAppbmRleCBlY2U0OGU0MjY3OTcwOTVkYTcwOWEwNGRhNjg2YTRmZTBiYzI5MjhjLi44ZTFiMjZj
YWYwNDE4MDM5MDc5MDhiZDc2ZWYxMjliODhmZjI1ZTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRnVsbHNjcmVlbk1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9G
dWxsc2NyZWVuTWFuYWdlci5jcHAKQEAgLTI2NSw5ICsyNjUsOCBAQCB2b2lkIEZ1bGxzY3JlZW5N
YW5hZ2VyOjpjYW5jZWxGdWxsc2NyZWVuKCkKIAogICAgIC8vIFRvIGFjaGlldmUgdGhhdCBhaW0s
IHJlbW92ZSBhbGwgdGhlIGVsZW1lbnRzIGZyb20gdGhlIHRvcCBkb2N1bWVudCdzIHN0YWNrIGV4
Y2VwdCBmb3IgdGhlIGZpcnN0IGJlZm9yZQogICAgIC8vIGNhbGxpbmcgd2Via2l0RXhpdEZ1bGxz
Y3JlZW4oKToKLSAgICBWZWN0b3I8UmVmUHRyPEVsZW1lbnQ+PiByZXBsYWNlbWVudEZ1bGxzY3Jl
ZW5FbGVtZW50U3RhY2s7Ci0gICAgcmVwbGFjZW1lbnRGdWxsc2NyZWVuRWxlbWVudFN0YWNrLmFw
cGVuZCh0b3BEb2N1bWVudC5mdWxsc2NyZWVuTWFuYWdlcigpLmZ1bGxzY3JlZW5FbGVtZW50KCkp
OwotICAgIHRvcERvY3VtZW50LmZ1bGxzY3JlZW5NYW5hZ2VyKCkubV9mdWxsc2NyZWVuRWxlbWVu
dFN0YWNrLnN3YXAocmVwbGFjZW1lbnRGdWxsc2NyZWVuRWxlbWVudFN0YWNrKTsKKyAgICBSZWZQ
dHIgZnVsbHNjcmVuRWxlbWVudCA9IHRvcERvY3VtZW50LmZ1bGxzY3JlZW5NYW5hZ2VyKCkuZnVs
bHNjcmVlbkVsZW1lbnQoKTsKKyAgICB0b3BEb2N1bWVudC5mdWxsc2NyZWVuTWFuYWdlcigpLm1f
ZnVsbHNjcmVlbkVsZW1lbnRTdGFjayA9IFZlY3RvciB7IFdURk1vdmUoZnVsbHNjcmVuRWxlbWVu
dCkgfTsKIAogICAgIHRvcERvY3VtZW50LmZ1bGxzY3JlZW5NYW5hZ2VyKCkuZXhpdEZ1bGxzY3Jl
ZW4oKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJsZVNjcmlwdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTG9hZGFibGVTY3JpcHQuY3BwCmluZGV4IDFiZGRlMWVi
NWQ2YTA3ZjExNzM4OWI5OWM3NWVjYjAxYjYwZjg4MDkuLjQxZjQzY2U2Njg1MDMwZWQ5ZDM5ZGYw
NWI5ZmM5MjNiMTIzOTVkZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJs
ZVNjcmlwdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0xvYWRhYmxlU2NyaXB0LmNwcApA
QCAtNTEsMTIgKzUxLDggQEAgdm9pZCBMb2FkYWJsZVNjcmlwdDo6cmVtb3ZlQ2xpZW50KExvYWRh
YmxlU2NyaXB0Q2xpZW50JiBjbGllbnQpCiAKIHZvaWQgTG9hZGFibGVTY3JpcHQ6Om5vdGlmeUNs
aWVudEZpbmlzaGVkKCkKIHsKLSAgICBSZWZQdHI8TG9hZGFibGVTY3JpcHQ+IHByb3RlY3RlZFRo
aXModGhpcyk7Ci0KLSAgICBWZWN0b3I8TG9hZGFibGVTY3JpcHRDbGllbnQqPiB2ZWN0b3I7Ci0g
ICAgZm9yIChhdXRvJiBwYWlyIDogbV9jbGllbnRzKQotICAgICAgICB2ZWN0b3IuYXBwZW5kKHBh
aXIua2V5KTsKLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IHZlY3RvcikKKyAgICBSZWYgcHJvdGVj
dGVkVGhpcyB7ICp0aGlzIH07CisgICAgZm9yIChhdXRvJiBjbGllbnQgOiBjb3B5VG9WZWN0b3Io
bV9jbGllbnRzLnZhbHVlcygpKSkKICAgICAgICAgY2xpZW50LT5ub3RpZnlGaW5pc2hlZCgqdGhp
cyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vw
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwCmluZGV4IDUw
ZjQ2MzBmODllYzg5NWRmMWNlNWFiOGVkNTgxODliN2FmYmY2NjIuLjEyMjYzZTI1NmVlNTZhNDUy
YzMyMjgxMjVjYWRkNWYxNzBmNDVmMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9S
YWRpb0J1dHRvbkdyb3Vwcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9u
R3JvdXBzLmNwcApAQCAtNTksOSArNTksNyBAQCBpbmxpbmUgYm9vbCBSYWRpb0J1dHRvbkdyb3Vw
Ojppc1ZhbGlkKCkgY29uc3QKIAogVmVjdG9yPFJlZjxIVE1MSW5wdXRFbGVtZW50Pj4gUmFkaW9C
dXR0b25Hcm91cDo6bWVtYmVycygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFJlZjxIVE1MSW5wdXRF
bGVtZW50Pj4gc29ydGVkTWVtYmVyczsKLSAgICBmb3IgKGF1dG8mIG1lbWJlciA6IG1fbWVtYmVy
cykKLSAgICAgICAgc29ydGVkTWVtYmVycy5hcHBlbmQobWVtYmVyKTsKKyAgICBhdXRvIHNvcnRl
ZE1lbWJlcnMgPSBjb3B5VG9WZWN0b3JPZjxSZWY8SFRNTElucHV0RWxlbWVudD4+KG1fbWVtYmVy
cyk7CiAgICAgc3RkOjpzb3J0KHNvcnRlZE1lbWJlcnMuYmVnaW4oKSwgc29ydGVkTWVtYmVycy5l
bmQoKSwgW10oYXV0byYgYSwgYXV0byYgYikgewogICAgICAgICByZXR1cm4gaXNfbHQodHJlZU9y
ZGVyPENvbXBvc2VkVHJlZT4oYSwgYikpOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9EaXJlY3RvcnlGaWxlTGlzdENyZWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9EaXJlY3RvcnlGaWxlTGlzdENyZWF0b3IuY3BwCmluZGV4IDlkM2RhMTg1M2MzYTYzMjBm
ZWIzMTk3NTE2MmU0MzVhZTkzZmZkZDEuLjk4NWY3YTYyZjBjMWYzOTc1NTgyZWIzZjliOTg5NzUx
NTYxNTY2NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGlyZWN0b3J5RmlsZUxp
c3RDcmVhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RpcmVjdG9yeUZpbGVMaXN0
Q3JlYXRvci5jcHAKQEAgLTg2LDEzICs4NiwxMSBAQCBzdGF0aWMgVmVjdG9yPEZpbGVJbmZvcm1h
dGlvbj4gZ2F0aGVyRmlsZUluZm9ybWF0aW9uKGNvbnN0IFZlY3RvcjxGaWxlQ2hvb3NlckZpbAog
c3RhdGljIFJlZjxGaWxlTGlzdD4gdG9GaWxlTGlzdChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IFZlY3RvcjxGaWxlSW5mb3JtYXRpb24+JiBmaWxlcykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotICAgIFZlY3RvcjxSZWY8RmlsZT4+IGZpbGVPYmplY3RzOwotICAgIGZvciAoYXV0
byYgZmlsZSA6IGZpbGVzKSB7CisgICAgYXV0byBmaWxlT2JqZWN0cyA9IGZpbGVzLm1hcChbZG9j
dW1lbnRdKGF1dG8mIGZpbGUpIHsKICAgICAgICAgaWYgKGZpbGUucmVsYXRpdmVQYXRoLmlzTnVs
bCgpKQotICAgICAgICAgICAgZmlsZU9iamVjdHMuYXBwZW5kKEZpbGU6OmNyZWF0ZShkb2N1bWVu
dCwgZmlsZS5wYXRoLCB7IH0sIGZpbGUuZGlzcGxheU5hbWUpKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgZmlsZU9iamVjdHMuYXBwZW5kKEZpbGU6OmNyZWF0ZVdpdGhSZWxhdGl2ZVBhdGgo
ZG9jdW1lbnQsIGZpbGUucGF0aCwgZmlsZS5yZWxhdGl2ZVBhdGgpKTsKLSAgICB9CisgICAgICAg
ICAgICByZXR1cm4gRmlsZTo6Y3JlYXRlKGRvY3VtZW50LCBmaWxlLnBhdGgsIHsgfSwgZmlsZS5k
aXNwbGF5TmFtZSk7CisgICAgICAgIHJldHVybiBGaWxlOjpjcmVhdGVXaXRoUmVsYXRpdmVQYXRo
KGRvY3VtZW50LCBmaWxlLnBhdGgsIGZpbGUucmVsYXRpdmVQYXRoKTsKKyAgICB9KTsKICAgICBy
ZXR1cm4gRmlsZUxpc3Q6OmNyZWF0ZShXVEZNb3ZlKGZpbGVPYmplY3RzKSk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKaW5kZXggYzRiMDg0ZDJkZTcxZmQz
MTlmZThjMDY5YjQ1ZmY3ZmNjY2VkZTVlYy4uNzJhZmUwNGUwN2Y4OWM4YzI0YWYzZjhiOGNhZDM4
Y2UyOTZhOGQwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAK
QEAgLTYzNCw5ICs2MzQsOSBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzYXZlTGFzdFNlbGVj
dGlvbigpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2xhc3RPbkNoYW5nZVNlbGVj
dGlvbi5jbGVhcigpOwotICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGxpc3RJdGVtcygpKQotICAg
ICAgICBtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbi5hcHBlbmQoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+
KCplbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVj
dGVkKCkpOworICAgIG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uID0gbGlzdEl0ZW1zKCkubWFwKFtd
KGF1dG8mIGVsZW1lbnQpIHsKKyAgICAgICAgcmV0dXJuIGlzPEhUTUxPcHRpb25FbGVtZW50Pigq
ZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5zZWxlY3Rl
ZCgpOworICAgIH0pOwogfQogCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVTZWxl
Y3Rpb25BbmNob3JJbmRleChpbnQgaW5kZXgpCkBAIC02NDUsMTAgKzY0NSw5IEBAIHZvaWQgSFRN
TFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KGludCBpbmRleCkK
IAogICAgIC8vIENhY2hlIHRoZSBzZWxlY3Rpb24gc3RhdGUgc28gd2UgY2FuIHJlc3RvcmUgdGhl
IG9sZCBzZWxlY3Rpb24gYXMgdGhlIG5ldwogICAgIC8vIHNlbGVjdGlvbiBwaXZvdHMgYXJvdW5k
IHRoaXMgYW5jaG9yIGluZGV4LgotICAgIG1fY2FjaGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rpb24u
Y2xlYXIoKTsKLQotICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGxpc3RJdGVtcygpKQotICAgICAg
ICBtX2NhY2hlZFN0YXRlRm9yQWN0aXZlU2VsZWN0aW9uLmFwcGVuZChpczxIVE1MT3B0aW9uRWxl
bWVudD4oKmVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCku
c2VsZWN0ZWQoKSk7CisgICAgbV9jYWNoZWRTdGF0ZUZvckFjdGl2ZVNlbGVjdGlvbiA9IGxpc3RJ
dGVtcygpLm1hcChbXShhdXRvJiBlbGVtZW50KSB7CisgICAgICAgIHJldHVybiBpczxIVE1MT3B0
aW9uRWxlbWVudD4oKmVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxl
bWVudCkuc2VsZWN0ZWQoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6
c2V0QWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgoaW50IGluZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdl
Qml0bWFwLmNwcAppbmRleCAwNWIyNzM3OWYyZDkyMTk0NDg5MzJjNDZhYjMzYjJlZjAzMWFmYzZh
Li41OWJmYzZlMGYxZTU5MDQzZGNjNWJiZGEyZDIyYWFlMzY1YTYxMzE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0ltYWdlQml0bWFwLmNwcApAQCAtMTEyLDEwICsxMTIsOSBAQCB2b2lkIEltYWdlQml0bWFw
OjpjcmVhdGVQcm9taXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQsCiAKIFZlY3RvcjxzdGQ6Om9wdGlvbmFsPEltYWdlQml0bWFwQmFja2luZz4+IEltYWdl
Qml0bWFwOjpkZXRhY2hCaXRtYXBzKFZlY3RvcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiYmIGJpdG1h
cHMpCiB7Ci0gICAgVmVjdG9yPHN0ZDo6b3B0aW9uYWw8SW1hZ2VCaXRtYXBCYWNraW5nPj4gYnVm
ZmVyczsKLSAgICBmb3IgKGF1dG8mIGJpdG1hcCA6IGJpdG1hcHMpCi0gICAgICAgIGJ1ZmZlcnMu
YXBwZW5kKGJpdG1hcC0+dGFrZUltYWdlQml0bWFwQmFja2luZygpKTsKLSAgICByZXR1cm4gYnVm
ZmVyczsKKyAgICByZXR1cm4gV1RGOjptYXAoV1RGTW92ZShiaXRtYXBzKSwgW10oYXV0byYmIGJp
dG1hcCkgeworICAgICAgICByZXR1cm4gYml0bWFwLT50YWtlSW1hZ2VCaXRtYXBCYWNraW5nKCk7
CisgICAgfSk7CiB9CiAKIHZvaWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgSW1hZ2VCaXRtYXA6OlNvdXJj
ZSYmIHNvdXJjZSwgSW1hZ2VCaXRtYXBPcHRpb25zJiYgb3B0aW9ucywgaW50IHN4LCBpbnQgc3ks
IGludCBzdywgaW50IHNoLCBJbWFnZUJpdG1hcDo6UHJvbWlzZSYmIHByb21pc2UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuY3BwCmluZGV4IDYxMTQ2MDI3N2Y2Njc5YTQ5MWUwZjk4MzE3Nzk3MzAwN2ViYmRkYzYuLmY3
MzM2NGYzODYwYzI2YjkzNjYxOGM0ZjdlMWExNzgyNWU4ZDUwMTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3Bw
CkBAIC0zMDIxLDkgKzMwMjEsOCBAQCBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxSZWZQdHI8V2ViR0xT
aGFkZXI+Pj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0YWNoZQogICAgIH07CiAg
ICAgVmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+IHNoYWRlck9iamVjdHM7CiAgICAgZm9yIChh
dXRvIHNoYWRlclR5cGUgOiBzaGFkZXJUeXBlcykgewotICAgICAgICBSZWZQdHI8V2ViR0xTaGFk
ZXI+IHNoYWRlciA9IHByb2dyYW0uZ2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVyVHlwZSk7Ci0gICAg
ICAgIGlmIChzaGFkZXIpCi0gICAgICAgICAgICBzaGFkZXJPYmplY3RzLmFwcGVuZChzaGFkZXIp
OworICAgICAgICBpZiAoUmVmUHRyIHNoYWRlciA9IHByb2dyYW0uZ2V0QXR0YWNoZWRTaGFkZXIo
c2hhZGVyVHlwZSkpCisgICAgICAgICAgICBzaGFkZXJPYmplY3RzLmFwcGVuZChXVEZNb3ZlKHNo
YWRlcikpOwogICAgIH0KICAgICByZXR1cm4gc2hhZGVyT2JqZWN0czsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCmluZGV4
IDhhY2I2OGFmNDU1MWEzOGI3OTljNzEzYWE3NWRjMGY3OTE5MDA0YmUuLjBhNWVkNzhmNDU4Zjk5
YjZiYzdmYzM3MWRmOTRjZmU5MjVhNGQ0ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcApAQCAtODUsMTIgKzg1LDExIEBA
IHN0YXRpYyBTdHJpbmdWaWV3IGV4dHJhY3RDaGFyc2V0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAK
IGJvb2wgSFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpwcm9jZXNzTWV0YShIVE1MVG9rZW4mIHRva2Vu
KQogewotICAgIEF0dHJpYnV0ZUxpc3QgYXR0cmlidXRlczsKLSAgICBmb3IgKGF1dG8mIGF0dHJp
YnV0ZSA6IHRva2VuLmF0dHJpYnV0ZXMoKSkgeworICAgIGF1dG8gYXR0cmlidXRlcyA9IHRva2Vu
LmF0dHJpYnV0ZXMoKS5tYXAoW10oYXV0byYgYXR0cmlidXRlKSB7CiAgICAgICAgIFN0cmluZyBh
dHRyaWJ1dGVOYW1lID0gU3RyaW5nSW1wbDo6Y3JlYXRlOEJpdElmUG9zc2libGUoYXR0cmlidXRl
Lm5hbWUpOwogICAgICAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUgPSBTdHJpbmdJbXBsOjpjcmVh
dGU4Qml0SWZQb3NzaWJsZShhdHRyaWJ1dGUudmFsdWUpOwotICAgICAgICBhdHRyaWJ1dGVzLmFw
cGVuZChzdGQ6Om1ha2VfcGFpcihhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVWYWx1ZSkpOwotICAg
IH0KKyAgICAgICAgcmV0dXJuIHN0ZDo6cGFpciB7IFdURk1vdmUoYXR0cmlidXRlTmFtZSksIFdU
Rk1vdmUoYXR0cmlidXRlVmFsdWUpIH07CisgICAgfSk7CiAKICAgICBtX2VuY29kaW5nID0gZW5j
b2RpbmdGcm9tTWV0YUF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CiAgICAgcmV0dXJuIG1fZW5jb2Rp
bmcuaXNWYWxpZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TFRyZWVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVp
bGRlci5jcHAKaW5kZXggNmI3MWJlZjgxYTdlMjg0NzFlZWZkN2M1MzE1MmE4YTBhODJkMmRiNS4u
YTFmMTY3Y2IwODNjOTk4NDM2MTgzNDExODAyOWYyODVlNDFjMDAwNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCkBAIC0yMjAwLDExICsyMjAw
LDEwIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2hhcmFjdGVyKEF0b21IVE1MVG9r
ZW4mJiB0b2tlbikKIC8vIEZyb20gdGhlIHN0cmluZyA0MDg5OTYxMDEwLCBjcmVhdGVzIGEgbGlu
ayBvZiB0aGUgZm9ybSA8YSBocmVmPSJ0ZWw6NDA4OTk2MTAxMCI+NDA4OTk2MTAxMDwvYT4gYW5k
IGluc2VydHMgaXQuCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6aW5zZXJ0UGhvbmVOdW1iZXJMaW5r
KGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIFZlY3RvcjxBdHRyaWJ1dGU+IGF0dHJpYnV0
ZXM7Ci0gICAgYXR0cmlidXRlcy5hcHBlbmQoQXR0cmlidXRlKEhUTUxOYW1lczo6aHJlZkF0dHIs
IG1ha2VTdHJpbmcoInRlbDoiX3MsIHN0cmluZykpKTsKKyAgICBBdHRyaWJ1dGUgYXR0cmlidXRl
KEhUTUxOYW1lczo6aHJlZkF0dHIsIG1ha2VTdHJpbmcoInRlbDoiX3MsIHN0cmluZykpOwogCiAg
ICAgY29uc3QgQXRvbVN0cmluZyYgYVRhZ0xvY2FsTmFtZSA9IGFUYWctPmxvY2FsTmFtZSgpOwot
ICAgIEF0b21IVE1MVG9rZW4gYVN0YXJ0VG9rZW4oSFRNTFRva2VuOjpTdGFydFRhZywgYVRhZ0xv
Y2FsTmFtZSwgV1RGTW92ZShhdHRyaWJ1dGVzKSk7CisgICAgQXRvbUhUTUxUb2tlbiBhU3RhcnRU
b2tlbihIVE1MVG9rZW46OlN0YXJ0VGFnLCBhVGFnTG9jYWxOYW1lLCB7IFdURk1vdmUoYXR0cmli
dXRlKSB9KTsKICAgICBBdG9tSFRNTFRva2VuIGFFbmRUb2tlbihIVE1MVG9rZW46OkVuZFRhZywg
YVRhZ0xvY2FsTmFtZSk7CiAKICAgICBwcm9jZXNzU3RhcnRUYWcoV1RGTW92ZShhU3RhcnRUb2tl
bikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50
UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNl
ci5jcHAKaW5kZXggNGRhOTU5ZjQwZmU5ZWEzMzc0N2NkMjM4OGNlYjc5ZjZkNzJkYjdlZC4uNDcw
NmYyNmU4NDQwOWVlODEzY2QxM2JjNWY0ZTBhY2NmNjc0YTg2NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwCkBAIC01MSw5ICs1MSw4
IEBAIHZvaWQgVGV4dERvY3VtZW50UGFyc2VyOjppbnNlcnRGYWtlUHJlRWxlbWVudCgpCiAgICAg
Ly8gV2UgY3JlYXRlIGEgZmFrZSB0b2tlbiBhbmQgZ2l2ZSBpdCB0byB0aGUgdHJlZSBidWlsZGVy
IHJhdGhlciB0aGFuCiAgICAgLy8gc2VuZGluZyBmYWtlIGJ5dGVzIHRocm91Z2ggdGhlIGZyb250
LWVuZCBvZiB0aGUgcGFyc2VyIHRvIGF2b2lkCiAgICAgLy8gZGlzdHJ1YmluZyB0aGUgbGluZS9j
b2x1bW4gbnVtYmVyIGNhbGN1bGF0aW9ucy4KLSAgICBWZWN0b3I8QXR0cmlidXRlPiBhdHRyaWJ1
dGVzOwotICAgIGF0dHJpYnV0ZXMuYXBwZW5kKEF0dHJpYnV0ZShzdHlsZUF0dHIsICJ3b3JkLXdy
YXA6IGJyZWFrLXdvcmQ7IHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsiKSk7Ci0gICAgQXRvbUhUTUxU
b2tlbiBmYWtlUHJlKEhUTUxUb2tlbjo6U3RhcnRUYWcsIHByZVRhZy0+bG9jYWxOYW1lKCksIFdU
Rk1vdmUoYXR0cmlidXRlcykpOworICAgIEF0dHJpYnV0ZSBhdHRyaWJ1dGUoc3R5bGVBdHRyLCAi
d29yZC13cmFwOiBicmVhay13b3JkOyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7Iik7CisgICAgQXRv
bUhUTUxUb2tlbiBmYWtlUHJlKEhUTUxUb2tlbjo6U3RhcnRUYWcsIHByZVRhZy0+bG9jYWxOYW1l
KCksIHsgV1RGTW92ZShhdHRyaWJ1dGUpIH0pOwogICAgIHRyZWVCdWlsZGVyKCkuY29uc3RydWN0
VHJlZShXVEZNb3ZlKGZha2VQcmUpKTsKIAogICAgIC8vIE5vcm1hbGx5IHdlIHdvdWxkIHNraXAg
dGhlIGZpcnN0IFxuIGFmdGVyIGEgPHByZT4gZWxlbWVudCwgYnV0IHdlIGRvbid0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29udGVudEZpbHRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvQ29udGVudEZpbHRlci5jcHAKaW5kZXggMjg5ZjMyYTYzNzBkM2NkYzk1OGQ2
MzZlNTg3MGNmNzYzZTEzNzM1Zi4uZmQ5ZTk1YWQwN2ExM2VlZTdhMTJhYjcwNWJlNTcwMWYzMjNj
OTg5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0NvbnRlbnRGaWx0ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Db250ZW50RmlsdGVyLmNwcApAQCAtNjcsMTEg
KzY3LDkgQEAgVmVjdG9yPENvbnRlbnRGaWx0ZXI6OlR5cGU+JiBDb250ZW50RmlsdGVyOjp0eXBl
cygpCiAKIHN0ZDo6dW5pcXVlX3B0cjxDb250ZW50RmlsdGVyPiBDb250ZW50RmlsdGVyOjpjcmVh
dGUoQ29udGVudEZpbHRlckNsaWVudCYgY2xpZW50KQogewotICAgIENvbnRhaW5lciBmaWx0ZXJz
OwotICAgIGZvciAoYXV0byYgdHlwZSA6IHR5cGVzKCkpIHsKLSAgICAgICAgYXV0byBmaWx0ZXIg
PSB0eXBlLmNyZWF0ZSgpOwotICAgICAgICBmaWx0ZXJzLmFwcGVuZChXVEZNb3ZlKGZpbHRlcikp
OwotICAgIH0KKyAgICBhdXRvIGZpbHRlcnMgPSB0eXBlcygpLm1hcChbXShhdXRvJiB0eXBlKSB7
CisgICAgICAgIHJldHVybiB0eXBlLmNyZWF0ZSgpOworICAgIH0pOwogCiAgICAgaWYgKGZpbHRl
cnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVNYW5p
ZmVzdFBhcnNlci5jcHAKaW5kZXggYjg3ZGQ4MzUwNjA3YzI0YmUyNTZlMzQ0MWJlZDJkMzc2N2Uw
OTU1Mi4uNGExMTQ0MjVlMTE2ZDJjNDJkMTkwMzkyM2VkZjg4NjM4M2Q4ZjA2NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVNYW5pZmVz
dFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVNYW5pZmVzdFBhcnNlci5jcHAKQEAgLTE4MCw3ICsxODAsNyBAQCBzdGQ6Om9wdGlv
bmFsPEFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdD4gcGFyc2VBcHBsaWNhdGlvbkNhY2hlTWFuaWZl
c3QoY29uc3QgVVJMJgogICAgICAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZSh1cmwucHJvdG9jb2woKSwgbWFuaWZlc3RVUkwucHJvdG9jb2woKSkpCiAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgbWFuaWZlc3Qub25saW5lQWxsb3dl
ZFVSTHMuYXBwZW5kKHVybCk7CisgICAgICAgICAgICAgICAgbWFuaWZlc3Qub25saW5lQWxsb3dl
ZFVSTHMuYXBwZW5kKFdURk1vdmUodXJsKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUmVzaXplT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZl
ci5jcHAKaW5kZXggOTNkYTFhNDU2MDRlNDUyYTc3NTkzZTE4ZDFmNDczMzYzNDk5NDM2Ny4uNGZm
ZDY5ZDAzNDQxMDliNDdhZmI1ZTUxOTdhYTNmZGZkNDk3ZGVkNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9SZXNpemVPYnNlcnZlci5jcHAKQEAgLTEyNSwxMSArMTI1LDEwIEBAIHNpemVfdCBSZXNpemVP
YnNlcnZlcjo6Z2F0aGVyT2JzZXJ2YXRpb25zKHNpemVfdCBkZWVwZXJUaGFuKQogCiB2b2lkIFJl
c2l6ZU9ic2VydmVyOjpkZWxpdmVyT2JzZXJ2YXRpb25zKCkKIHsKLSAgICBWZWN0b3I8UmVmPFJl
c2l6ZU9ic2VydmVyRW50cnk+PiBlbnRyaWVzOwotICAgIGZvciAoY29uc3QgYXV0byYgb2JzZXJ2
YXRpb24gOiBtX2FjdGl2ZU9ic2VydmF0aW9ucykgeworICAgIGF1dG8gZW50cmllcyA9IG1fYWN0
aXZlT2JzZXJ2YXRpb25zLm1hcChbXShhdXRvJiBvYnNlcnZhdGlvbikgewogICAgICAgICBBU1NF
UlQob2JzZXJ2YXRpb24tPnRhcmdldCgpKTsKLSAgICAgICAgZW50cmllcy5hcHBlbmQoUmVzaXpl
T2JzZXJ2ZXJFbnRyeTo6Y3JlYXRlKG9ic2VydmF0aW9uLT50YXJnZXQoKSwgb2JzZXJ2YXRpb24t
PmNvbXB1dGVDb250ZW50UmVjdCgpLCBvYnNlcnZhdGlvbi0+Ym9yZGVyQm94U2l6ZSgpLCBvYnNl
cnZhdGlvbi0+Y29udGVudEJveFNpemUoKSkpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIFJlc2l6
ZU9ic2VydmVyRW50cnk6OmNyZWF0ZShvYnNlcnZhdGlvbi0+dGFyZ2V0KCksIG9ic2VydmF0aW9u
LT5jb21wdXRlQ29udGVudFJlY3QoKSwgb2JzZXJ2YXRpb24tPmJvcmRlckJveFNpemUoKSwgb2Jz
ZXJ2YXRpb24tPmNvbnRlbnRCb3hTaXplKCkpOworICAgIH0pOwogICAgIG1fYWN0aXZlT2JzZXJ2
YXRpb25zLmNsZWFyKCk7CiAgICAgYXV0byBhY3RpdmVPYnNlcnZhdGlvblRhcmdldHMgPSBzdGQ6
OmV4Y2hhbmdlKG1fYWN0aXZlT2JzZXJ2YXRpb25UYXJnZXRzLCB7IH0pOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9UZXh0SW5kaWNhdG9yLmNwcAppbmRleCAzODdkNTE5YWU1MTcyZDY4MGE1YjI4ODQzYmJl
OGZmOTk2YzZiMzM1Li4wOTliOTFkNTE1MjQ1NWFlNzc3ZTVmZjI1NmIxNTcyNjkwNDMzZWQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKQEAgLTM2MSwxNyArMzYxLDE2IEBA
IHN0YXRpYyBib29sIGluaXRpYWxpemVJbmRpY2F0b3IoVGV4dEluZGljYXRvckRhdGEmIGRhdGEs
IEZyYW1lJiBmcmFtZSwgY29uc3QgU2ltCiAgICAgICAgIHRleHRCb3VuZGluZ1JlY3RJblJvb3RW
aWV3Q29vcmRpbmF0ZXMudW5pdGUodGV4dFJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMpOwogICAg
IH0KIAotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRp
bmF0ZXM7Ci0gICAgZm9yIChhdXRvIHJlY3QgOiB0ZXh0UmVjdHNJblJvb3RWaWV3Q29vcmRpbmF0
ZXMpIHsKKyAgICBhdXRvIHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMgPSB0ZXh0
UmVjdHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMubWFwKFsmXShhdXRvIHJlY3QpIHsKICAgICAgICAg
cmVjdC5tb3ZlQnkoLXRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMubG9jYXRp
b24oKSk7Ci0gICAgICAgIHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMuYXBwZW5k
KHJlY3QpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIHJlY3Q7CisgICAgfSk7CiAKICAgICAvLyBT
dG9yZSB0aGUgc2VsZWN0aW9uIHJlY3QgaW4gd2luZG93IGNvb3JkaW5hdGVzLCB0byBiZSB1c2Vk
IHN1YnNlcXVlbnRseQogICAgIC8vIHRvIGRldGVybWluZSBpZiB0aGUgaW5kaWNhdG9yIGFuZCBz
ZWxlY3Rpb24gc3RpbGwgcHJlY2lzZWx5IG92ZXJsYXAuCiAgICAgZGF0YS5zZWxlY3Rpb25SZWN0
SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gZnJhbWUudmlldygpLT5jb250ZW50c1RvUm9vdFZpZXco
ZW5jbG9zaW5nSW50UmVjdChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25Cb3VuZHMoRnJhbWVT
ZWxlY3Rpb246OkNsaXBUb1Zpc2libGVDb250ZW50OjpObykpKTsKLSAgICBkYXRhLnRleHRCb3Vu
ZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmll
d0Nvb3JkaW5hdGVzOwotICAgIGRhdGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRl
cyA9IHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXM7CisgICAgZGF0YS50ZXh0Qm91
bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gV1RGTW92ZSh0ZXh0Qm91bmRpbmdSZWN0
SW5Sb290Vmlld0Nvb3JkaW5hdGVzKTsKKyAgICBkYXRhLnRleHRSZWN0c0luQm91bmRpbmdSZWN0
Q29vcmRpbmF0ZXMgPSBXVEZNb3ZlKHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMp
OwogCiAgICAgcmV0dXJuIHRha2VTbmFwc2hvdHMoZGF0YSwgZnJhbWUsIGVuY2xvc2luZ0ludFJl
Y3QodGV4dEJvdW5kaW5nUmVjdEluRG9jdW1lbnRDb29yZGluYXRlcyksIGNsaXBwZWRUZXh0UmVj
dHNJbkRvY3VtZW50Q29vcmRpbmF0ZXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Y3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKaW5kZXggNTJmNjIwMTIyYjg1Yzc1MDNlN2Rh
NmE2ODM1YmYzNzU2MTQ5NjdmNC4uOGEyYmE0Y2ZmYTI2ZGNjYmJkMWU3NWVlNTAxMTNhODY2YmU1
YTJmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5
UG9saWN5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQ
b2xpY3kuY3BwCkBAIC0zNDMsMTggKzM0MywxMiBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGlj
eTo6YWxsUG9saWNpZXNBbGxvdyhWaW9sYXRlZERpcmVjdGl2ZUNhbGxiYWNrJiYgY2FsbGJhYwog
c3RhdGljIFZlY3RvcjxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlU3ViUmVzb3Vy
Y2VJbnRlZ3JpdHlJbnRvRGlnZXN0cyhjb25zdCBTdHJpbmcmIHN1YlJlc291cmNlSW50ZWdyaXR5
KQogewogICAgIGF1dG8gZW5jb2RlZERpZ2VzdHMgPSBwYXJzZUludGVncml0eU1ldGFkYXRhKHN1
YlJlc291cmNlSW50ZWdyaXR5KTsKLSAgICBWZWN0b3I8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGln
ZXN0PiBkZWNvZGVkRGlnZXN0czsKLQotICAgIGlmICghZW5jb2RlZERpZ2VzdHMuaGFzX3ZhbHVl
KCkpCisgICAgaWYgKCFlbmNvZGVkRGlnZXN0cykKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAg
IGZvciAoY29uc3QgYXV0byYgZW5jb2RlZERpZ2VzdCA6IGVuY29kZWREaWdlc3RzLnZhbHVlKCkp
IHsKLSAgICAgICAgYXV0byBkZWNvZGVkRGlnZXN0ID0gZGVjb2RlRW5jb2RlZFJlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdChlbmNvZGVkRGlnZXN0KTsKLSAgICAgICAgaWYgKGRlY29kZWREaWdl
c3QuaGFzX3ZhbHVlKCkpCi0gICAgICAgICAgICBkZWNvZGVkRGlnZXN0cy5hcHBlbmQoZGVjb2Rl
ZERpZ2VzdC52YWx1ZSgpKTsKLSAgICAgICAgfQotCi0gICAgcmV0dXJuIGRlY29kZWREaWdlc3Rz
OworICAgIHJldHVybiBXVEY6OmNvbXBhY3RNYXAoKmVuY29kZWREaWdlc3RzLCBbXShhdXRvJiBl
bmNvZGVkRGlnZXN0KSB7CisgICAgICAgIHJldHVybiBkZWNvZGVFbmNvZGVkUmVzb3VyY2VDcnlw
dG9ncmFwaGljRGlnZXN0KGVuY29kZWREaWdlc3QpOworICAgIH0pOwogfQogCiBzdGF0aWMgVmVj
dG9yPENvbnRlbnRTZWN1cml0eVBvbGljeUhhc2g+IGdlbmVyYXRlSGFzaGVzRm9yQ29udGVudChj
b25zdCBTdHJpbmdWaWV3IGNvbnRlbnQsIE9wdGlvblNldDxDb250ZW50U2VjdXJpdHlQb2xpY3lI
YXNoQWxnb3JpdGhtPiBhbGdvcml0aG1zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vRmlsZUNob29zZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29z
ZXIuY3BwCmluZGV4IDhlNGVjZTcwNTNhZThlOThlZmVjY2ZlNzY1MmY4NmNkMjk3NDA0MDQuLjc4
NDI4YzRhYmQzMWU5OWIxMGFhZTQ4ZmJlY2MyYTViOGQ5ZjU4ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHAKQEAgLTUzLDkgKzUzLDcgQEAgdm9pZCBGaWxlQ2hvb3Nl
cjo6aW52YWxpZGF0ZSgpCiAKIHZvaWQgRmlsZUNob29zZXI6OmNob29zZUZpbGUoY29uc3QgU3Ry
aW5nJiBmaWxlbmFtZSkKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXM7Ci0gICAgZmls
ZW5hbWVzLmFwcGVuZChmaWxlbmFtZSk7Ci0gICAgY2hvb3NlRmlsZXMoZmlsZW5hbWVzKTsKKyAg
ICBjaG9vc2VGaWxlcyh7IGZpbGVuYW1lIH0pOwogfQogCiB2b2lkIEZpbGVDaG9vc2VyOjpjaG9v
c2VGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcmVwbGFjZW1lbnROYW1lcykKQEAgLTY4LDkgKzY2LDEwIEBAIHZvaWQgRmlsZUNob29z
ZXI6OmNob29zZUZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIGNvbnN0IFZl
Y3RvcjxTdHJpCiAgICAgICAgIHJldHVybjsKIAogICAgIFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJ
bmZvPiBmaWxlczsKKyAgICBmaWxlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZpbGVuYW1lcy5z
aXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gZmlsZW5hbWVzLnNpemUoKTsg
aSA8IHNpemU7ICsraSkKLSAgICAgICAgZmlsZXMuYXBwZW5kKHsgZmlsZW5hbWVzW2ldLCBpIDwg
cmVwbGFjZW1lbnROYW1lcy5zaXplKCkgPyByZXBsYWNlbWVudE5hbWVzW2ldIDogbnVsbFN0cmlu
ZygpLCB7IH0gfSk7Ci0gICAgbV9jbGllbnQtPmZpbGVzQ2hvc2VuKGZpbGVzKTsKKyAgICAgICAg
ZmlsZXMudW5jaGVja2VkQXBwZW5kKHsgZmlsZW5hbWVzW2ldLCBpIDwgcmVwbGFjZW1lbnROYW1l
cy5zaXplKCkgPyByZXBsYWNlbWVudE5hbWVzW2ldIDogbnVsbFN0cmluZygpLCB7IH0gfSk7Cisg
ICAgbV9jbGllbnQtPmZpbGVzQ2hvc2VuKFdURk1vdmUoZmlsZXMpKTsKIH0KIAogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCkBAIC04NiwxOSArODUsMTkgQEAgdm9pZCBGaWxlQ2hvb3Nlcjo6Y2hv
b3NlTWVkaWFGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBjb25zdCBTdHJp
bmcKICAgICBpZiAoIW1fY2xpZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8Rmls
ZUNob29zZXJGaWxlSW5mbz4gZmlsZXM7Ci0gICAgZm9yIChhdXRvJiBmaWxlbmFtZSA6IGZpbGVu
YW1lcykKLSAgICAgICAgZmlsZXMuYXBwZW5kKHsgZmlsZW5hbWUsIHsgfSwgeyB9IH0pOwotICAg
IG1fY2xpZW50LT5maWxlc0Nob3NlbihmaWxlcywgZGlzcGxheVN0cmluZywgaWNvbik7CisgICAg
YXV0byBmaWxlcyA9IGZpbGVuYW1lcy5tYXAoW10oYXV0byYgZmlsZW5hbWUpIHsKKyAgICAgICAg
cmV0dXJuIEZpbGVDaG9vc2VyRmlsZUluZm8geyBmaWxlbmFtZSwgeyB9LCB7IH0gfTsKKyAgICB9
KTsKKyAgICBtX2NsaWVudC0+ZmlsZXNDaG9zZW4oV1RGTW92ZShmaWxlcyksIGRpc3BsYXlTdHJp
bmcsIGljb24pOwogfQogCiAjZW5kaWYKIAogdm9pZCBGaWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZXMo
Y29uc3QgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+JiBmaWxlcykKIHsKLSAgICBWZWN0b3I8
U3RyaW5nPiBwYXRoczsKLSAgICBmb3IgKGF1dG8mIGZpbGUgOiBmaWxlcykKLSAgICAgICAgcGF0
aHMuYXBwZW5kKGZpbGUucGF0aCk7CisgICAgYXV0byBwYXRocyA9IGZpbGVzLm1hcChbXShhdXRv
JiBmaWxlKSB7CisgICAgICAgIHJldHVybiBmaWxlLnBhdGg7CisgICAgfSk7CiAKICAgICAvLyBG
SVhNRTogVGhpcyBpcyBpbmVsZWdhbnQuIFdlIHNob3VsZCBub3QgYmUgbG9va2luZyBhdCBzZXR0
aW5ncyBoZXJlLgogICAgIGlmIChtX3NldHRpbmdzLnNlbGVjdGVkRmlsZXMgPT0gcGF0aHMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAppbmRleCBkMDlmMTA1MmEwZjMx
ZWU5NzA2MTEwMTNiMzkzNWZiNTMwOTU1MDk2Li5mODdiNmE0ZjYzYjI2YTIxODgyMDZlOTM4YWE1
ODU3OTdhYjM5NWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRC
dWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAK
QEAgLTIwNiw5ICsyMDYsNyBAQCB2b2lkIEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmFwcGVuZChj
b25zdCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyJiBkYXRhKQogdm9pZCBGcmFnbWVudGVkU2hhcmVk
QnVmZmVyOjphcHBlbmQoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCkKIHsKICAg
ICBBU1NFUlQoIW1fY29udGlndW91cyk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvcjsKLSAg
ICB2ZWN0b3IuYXBwZW5kKGRhdGEsIGxlbmd0aCk7Ci0gICAgbV9zZWdtZW50cy5hcHBlbmQoeyBt
X3NpemUsIERhdGFTZWdtZW50OjpjcmVhdGUoV1RGTW92ZSh2ZWN0b3IpKSB9KTsKKyAgICBtX3Nl
Z21lbnRzLmFwcGVuZCh7IG1fc2l6ZSwgRGF0YVNlZ21lbnQ6OmNyZWF0ZShWZWN0b3IgeyBkYXRh
LCBsZW5ndGggfSkgfSk7CiAgICAgbV9zaXplICs9IGxlbmd0aDsKICAgICBBU1NFUlQoaW50ZXJu
YWxseUNvbnNpc3RlbnQoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9UaHJlYWRTYWZlRGF0YUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFk
U2FmZURhdGFCdWZmZXIuaAppbmRleCBkMzk3ZDIyN2RmYzUzNGFkMGNmNTg3MDJiZTFjYTU4MDI0
OTlhMGJiLi5iNTA2ZTkxNDVkNWM3MTdhZjRmMzY3NTdkODdkMDAyMmM0OWU1Mjg2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRTYWZlRGF0YUJ1ZmZlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZFNhZmVEYXRhQnVmZmVyLmgKQEAgLTI1LDYg
KzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5j
bHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCkBAIC0xNDMsNCArMTQ0LDE2IEBAIGJvb2wgVGhyZWFkU2FmZURhdGFCdWZmZXI6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgcmVzdWx0CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKK2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgVGhy
ZWFkU2FmZURhdGFCdWZmZXImIGJ1ZmZlcikKK3sKKyAgICBhdXRvKiBkYXRhID0gYnVmZmVyLmRh
dGEoKTsKKyAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAgYWRkKGhhc2hlciwgdHJ1ZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgYWRkKGhhc2hlciwgZmFsc2UpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwLCBzaXplID0gYnVmZmVyLnNpemUoKTsgaSA8IHNpemU7ICsraSkKKyAgICAgICAg
YWRkKGhhc2hlciwgZGF0YVtpXSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVsUHJvY2Vz
c29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVsUHJv
Y2Vzc29yLmNwcAppbmRleCAxY2YzOWNhY2YzMDI0NTA4ZThkMTJlODY0NWM1MDg2NzcyMTk0MzVi
Li5kOGMzNGZhMzc2OTUwNzI1MjU0NzQxOGZlNWU4NDRmZmUyYzMwODdkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9EU1BLZXJuZWxQcm9jZXNz
b3IuY3BwCkBAIC01Niw4ICs1Niw5IEBAIHZvaWQgQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3I6Omlu
aXRpYWxpemUoKQogICAgICAgICBEaXNhYmxlTWFsbG9jUmVzdHJpY3Rpb25zRm9yQ3VycmVudFRo
cmVhZFNjb3BlIGRpc2FibGVNYWxsb2NSZXN0cmljdGlvbnM7CiAKICAgICAgICAgLy8gQ3JlYXRl
IHByb2Nlc3Npbmcga2VybmVscywgb25lIHBlciBjaGFubmVsLgorICAgICAgICBtX2tlcm5lbHMu
cmVzZXJ2ZUNhcGFjaXR5KG1fa2VybmVscy5jYXBhY2l0eSgpICsgbnVtYmVyT2ZDaGFubmVscygp
KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHMoKTsg
KytpKQotICAgICAgICAgICAgbV9rZXJuZWxzLmFwcGVuZChjcmVhdGVLZXJuZWwoKSk7CisgICAg
ICAgICAgICBtX2tlcm5lbHMudW5jaGVja2VkQXBwZW5kKGNyZWF0ZUtlcm5lbCgpKTsKICAgICB9
CiAgICAgbV9pbml0aWFsaXplZCA9IHRydWU7CiAgICAgbV9oYXNKdXN0UmVzZXQgPSB0cnVlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9SZXNhbXBsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9SZXNhbXBsZXIuY3BwCmlu
ZGV4IGRlNTA4Y2M2ZWY0YTViMDFiZDRlYjIyNDc0NWI3ZWYyODI4NDBmOGUuLjc0NjljZTRkZTNm
M2MxODg4OTI4ZjU0OTdkMTJjZTU2ZGI2ZTZkMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUmVzYW1wbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9BdWRpb1Jlc2FtcGxlci5jcHAKQEAgLTQyLDggKzQyLDkgQEAgQXVkaW9S
ZXNhbXBsZXI6OkF1ZGlvUmVzYW1wbGVyKCkKIAogQXVkaW9SZXNhbXBsZXI6OkF1ZGlvUmVzYW1w
bGVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMpCiB7CisgICAgbV9rZXJuZWxzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZDaGFubmVscyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkKLSAgICAgICAgbV9rZXJuZWxzLmFwcGVuZCht
YWtlVW5pcXVlPEF1ZGlvUmVzYW1wbGVyS2VybmVsPih0aGlzKSk7CisgICAgICAgIG1fa2VybmVs
cy51bmNoZWNrZWRBcHBlbmQobWFrZVVuaXF1ZTxBdWRpb1Jlc2FtcGxlcktlcm5lbD4odGhpcykp
OwogCiAgICAgbV9zb3VyY2VCdXMgPSBBdWRpb0J1czo6Y3JlYXRlKG51bWJlck9mQ2hhbm5lbHMs
IDAsIGZhbHNlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwCmluZGV4IDlmMzE4MWNmYmI0MDIyNzc3
OTk2MjNiOWJmZGRjZGQ0OTU5YzAwYjAuLmMxYzdhNTc3NWFmZmQ1MTM5MjViNTdkZGIxNTY3NmM3
ODU5YTc5ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFt
aWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcApAQCAtNjAsOSArNjAsMTAgQEAgdm9pZCBE
eW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnNldE51bWJlck9mQ2hhbm5lbHModW5zaWduZWQgbnVt
YmVyT2ZDaGFubmVscykKICAgICBpZiAobV9wcmVEZWxheUJ1ZmZlcnMuc2l6ZSgpID09IG51bWJl
ck9mQ2hhbm5lbHMpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJlRGVsYXlCdWZmZXJzLmNs
ZWFyKCk7CisgICAgbV9wcmVEZWxheUJ1ZmZlcnMuc2hyaW5rKDApOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyArK2kpCiAgICAgICAgIG1fcHJlRGVsYXlC
dWZmZXJzLmFwcGVuZChtYWtlVW5pcXVlPEF1ZGlvRmxvYXRBcnJheT4oTWF4UHJlRGVsYXlGcmFt
ZXMpKTsKKyAgICBtX3ByZURlbGF5QnVmZmVycy5zaHJpbmtUb0ZpdCgpOwogfQogCiB2b2lkIER5
bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0UHJlRGVsYXlUaW1lKGZsb2F0IHByZURlbGF5VGlt
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL011bHRpQ2hhbm5l
bFJlc2FtcGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NdWx0aUNoYW5u
ZWxSZXNhbXBsZXIuY3BwCmluZGV4IGI5NjZmYTA2Y2QzMGViMzRkZjcxZmNmYmRlN2MxNjU4MjMx
MTEyMWYuLjE3MDIzYjY0MjYxYmRmZDM3NWVlMDlmZTI5NmIzYmRhODgyN2YyZTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL011bHRpQ2hhbm5lbFJlc2FtcGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTXVsdGlDaGFubmVsUmVzYW1w
bGVyLmNwcApAQCAtNTMsOCArNTMsOSBAQCBNdWx0aUNoYW5uZWxSZXNhbXBsZXI6Ok11bHRpQ2hh
bm5lbFJlc2FtcGxlcihkb3VibGUgc2NhbGVGYWN0b3IsIHVuc2lnbmVkIG51bWJlcgogICAgIH0K
IAogICAgIC8vIENyZWF0ZSBlYWNoIGNoYW5uZWwncyByZXNhbXBsZXIuCisgICAgbV9rZXJuZWxz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZDaGFubmVscyk7CiAgICAgZm9yICh1bnNp
Z25lZCBjaGFubmVsSW5kZXggPSAwOyBjaGFubmVsSW5kZXggPCBudW1iZXJPZkNoYW5uZWxzOyAr
K2NoYW5uZWxJbmRleCkKLSAgICAgICAgbV9rZXJuZWxzLmFwcGVuZChtYWtlVW5pcXVlPFNpbmNS
ZXNhbXBsZXI+KHNjYWxlRmFjdG9yLCByZXF1ZXN0RnJhbWVzLCBzdGQ6OmJpbmQoJk11bHRpQ2hh
bm5lbFJlc2FtcGxlcjo6cHJvdmlkZUlucHV0Rm9yQ2hhbm5lbCwgdGhpcywgc3RkOjpwbGFjZWhv
bGRlcnM6Ol8xLCBzdGQ6OnBsYWNlaG9sZGVyczo6XzIsIGNoYW5uZWxJbmRleCkpKTsKKyAgICAg
ICAgbV9rZXJuZWxzLnVuY2hlY2tlZEFwcGVuZChtYWtlVW5pcXVlPFNpbmNSZXNhbXBsZXI+KHNj
YWxlRmFjdG9yLCByZXF1ZXN0RnJhbWVzLCBzdGQ6OmJpbmQoJk11bHRpQ2hhbm5lbFJlc2FtcGxl
cjo6cHJvdmlkZUlucHV0Rm9yQ2hhbm5lbCwgdGhpcywgc3RkOjpwbGFjZWhvbGRlcnM6Ol8xLCBz
dGQ6OnBsYWNlaG9sZGVyczo6XzIsIGNoYW5uZWxJbmRleCkpKTsKIH0KIAogTXVsdGlDaGFubmVs
UmVzYW1wbGVyOjp+TXVsdGlDaGFubmVsUmVzYW1wbGVyKCkgPSBkZWZhdWx0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRp
YUVsZW1lbnQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudC5tbQppbmRleCAwNWVhMjExMWViNWQ0NTNjYjI4ZDhlNzdlZjNj
YmY1ZjM1NjcxOTg5Li5mYTMwYWZkZTNiMWUxZTM2ZTg2MWFlY2JkOWZiZThjN2YwOTAzNTZlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Q
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbQpAQCAtNTM0LDE0ICs1MzQsMTIgQEAg
VmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudDo6bGVnaWJsZU1lZGlhU2VsZWMKICAgICBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+
IGxlZ2libGVPcHRpb25zOwogCiAgICAgaWYgKCFtX21lZGlhRWxlbWVudCB8fCAhbV9tZWRpYUVs
ZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICByZXR1cm4gbGVnaWJsZU9wdGlvbnM7
CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBt
X21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuZW5zdXJlQ2FwdGlvblBy
ZWZlcmVuY2VzKCk7Ci0KLSAgICBmb3IgKGF1dG8mIHRyYWNrIDogbV9sZWdpYmxlVHJhY2tzRm9y
TWVudSkKLSAgICAgICAgbGVnaWJsZU9wdGlvbnMuYXBwZW5kKGNhcHRpb25QcmVmZXJlbmNlcy5t
ZWRpYVNlbGVjdGlvbk9wdGlvbkZvclRyYWNrKHRyYWNrLmdldCgpKSk7Ci0KLSAgICByZXR1cm4g
bGVnaWJsZU9wdGlvbnM7CisgICAgcmV0dXJuIG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUubWFwKFsm
XShhdXRvJiB0cmFjaykgeworICAgICAgICByZXR1cm4gY2FwdGlvblByZWZlcmVuY2VzLm1lZGlh
U2VsZWN0aW9uT3B0aW9uRm9yVHJhY2sodHJhY2suZ2V0KCkpOworICAgIH0pOwogfQogCiB1aW50
NjRfdCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWN0
ZWRJbmRleCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1l
cGFkL21hYy9EdWFsc2hvY2szSElER2FtZXBhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9nYW1lcGFkL21hYy9EdWFsc2hvY2szSElER2FtZXBhZC5jcHAKaW5kZXggNmM0MGU4Yjg4OTI4
NzNmZjA3MjA2MThjZmU4Mzk2NGM4MGVjMzQxZS4uYzBmNTE4MWJjNDRiMWJkY2ViYTY5YjhjYjZh
MzRhOWVhMTI3ZGY2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBh
ZC9tYWMvRHVhbHNob2NrM0hJREdhbWVwYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dhbWVwYWQvbWFjL0R1YWxzaG9jazNISURHYW1lcGFkLmNwcApAQCAtNDMsMTIgKzQzLDEw
IEBAIER1YWxzaG9jazNISURHYW1lcGFkOjpEdWFsc2hvY2szSElER2FtZXBhZChISUREZXZpY2Um
JiBkZXZpY2UsIHVuc2lnbmVkIGluZGV4KQogCiAgICAgbV9tYXBwaW5nID0gc3RhbmRhcmRHYW1l
cGFkTWFwcGluZ1N0cmluZygpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJP
ZlN0YW5kYXJkR2FtZXBhZEJ1dHRvbnNXaXRoSG9tZUJ1dHRvbjsgKytpKQotICAgICAgICBtX2J1
dHRvblZhbHVlcy5hcHBlbmQoMC4wKTsKKyAgICBtX2J1dHRvblZhbHVlcyA9IFZlY3RvcihudW1i
ZXJPZlN0YW5kYXJkR2FtZXBhZEJ1dHRvbnNXaXRoSG9tZUJ1dHRvbiwgU2hhcmVkR2FtZXBhZFZh
bHVlIHsgMC4wIH0pOwogCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBheGlzQ291bnQgPSA0Owot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXhpc0NvdW50OyArK2kpCi0gICAgICAgIG1fYXhp
c1ZhbHVlcy5hcHBlbmQoMC4wKTsKKyAgICBjb25zdGV4cHIgc2l6ZV90IGF4aXNDb3VudCA9IDQ7
CisgICAgbV9heGlzVmFsdWVzID0gVmVjdG9yKGF4aXNDb3VudCwgU2hhcmVkR2FtZXBhZFZhbHVl
IHsgMC4wIH0pOwogCiAgICAgYXV0byBpbnB1dEVsZW1lbnRzID0gaGlkRGV2aWNlKCkudW5pcXVl
SW5wdXRFbGVtZW50c0luRGV2aWNlVHJlZU9yZGVyKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL0xvZ2l0ZWNoR2FtZXBhZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9Mb2dpdGVjaEdhbWVwYWQuY3BwCmluZGV4IDY3
MTQzZmI5OTViYTJjM2U2OGRkMjExZDE2NWJlNjIwY2VmNzg5ZWYuLjc4MGQ0YTNmOWVhMjUzYmJk
N2U3MmM0ZmJmY2QwNWZlZTAzMjFhOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dhbWVwYWQvbWFjL0xvZ2l0ZWNoR2FtZXBhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ2FtZXBhZC9tYWMvTG9naXRlY2hHYW1lcGFkLmNwcApAQCAtNDMsMTIgKzQzLDEw
IEBAIExvZ2l0ZWNoR2FtZXBhZDo6TG9naXRlY2hHYW1lcGFkKEhJRERldmljZSYmIGRldmljZSwg
dW5zaWduZWQgaW5kZXgpCiAKICAgICBtX21hcHBpbmcgPSBzdGFuZGFyZEdhbWVwYWRNYXBwaW5n
U3RyaW5nKCk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mU3RhbmRhcmRH
YW1lcGFkQnV0dG9uc1dpdGhvdXRIb21lQnV0dG9uOyArK2kpCi0gICAgICAgIG1fYnV0dG9uVmFs
dWVzLmFwcGVuZCgwLjApOworICAgIG1fYnV0dG9uVmFsdWVzID0gVmVjdG9yKG51bWJlck9mU3Rh
bmRhcmRHYW1lcGFkQnV0dG9uc1dpdGhvdXRIb21lQnV0dG9uLCBTaGFyZWRHYW1lcGFkVmFsdWUg
eyAwLjAgfSk7CiAKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF4aXNDb3VudCA9IDQ7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBheGlzQ291bnQ7ICsraSkKLSAgICAgICAgbV9heGlzVmFs
dWVzLmFwcGVuZCgwLjApOworICAgIGNvbnN0ZXhwciBzaXplX3QgYXhpc0NvdW50ID0gNDsKKyAg
ICBtX2F4aXNWYWx1ZXMgPSBWZWN0b3IoYXhpc0NvdW50LCBTaGFyZWRHYW1lcGFkVmFsdWUgeyAw
LjAgfSk7CiAKICAgICBhdXRvIGlucHV0RWxlbWVudHMgPSBoaWREZXZpY2UoKS51bmlxdWVJbnB1
dEVsZW1lbnRzSW5EZXZpY2VUcmVlT3JkZXIoKTsKIApAQCAtNTksMTEgKzU3LDEyIEBAIExvZ2l0
ZWNoR2FtZXBhZDo6TG9naXRlY2hHYW1lcGFkKEhJRERldmljZSYmIGRldmljZSwgdW5zaWduZWQg
aW5kZXgpCiAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogaW5wdXRFbGVtZW50cykgewogICAgICAg
ICBzd2l0Y2ggKGVsZW1lbnQuZnVsbFVzYWdlKCkpIHsKICAgICAgICAgY2FzZSBoaWRIYXRzd2l0
Y2hGdWxsVXNhZ2U6IHsKLSAgICAgICAgICAgIFZlY3RvcjxTaGFyZWRHYW1lcGFkVmFsdWU+IGhh
dHN3aXRjaFZhbHVlczsKLSAgICAgICAgICAgIGhhdHN3aXRjaFZhbHVlcy5hcHBlbmQobV9idXR0
b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJUb3BdKTsKLSAg
ICAgICAgICAgIGhhdHN3aXRjaFZhbHVlcy5hcHBlbmQobV9idXR0b25WYWx1ZXNbKHNpemVfdClH
YW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJSaWdodF0pOwotICAgICAgICAgICAgaGF0c3dp
dGNoVmFsdWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xl
OjpMZWZ0Q2x1c3RlckJvdHRvbV0pOwotICAgICAgICAgICAgaGF0c3dpdGNoVmFsdWVzLmFwcGVu
ZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3Rlckxl
ZnRdKTsKKyAgICAgICAgICAgIGF1dG8gaGF0c3dpdGNoVmFsdWVzID0gVmVjdG9yPFNoYXJlZEdh
bWVwYWRWYWx1ZT46OmZyb20oCisgICAgICAgICAgICAgICAgbV9idXR0b25WYWx1ZXNbKHNpemVf
dClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJUb3BdLAorICAgICAgICAgICAgICAgIG1f
YnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyUmlnaHRd
LAorICAgICAgICAgICAgICAgIG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJv
bGU6OkxlZnRDbHVzdGVyQm90dG9tXSwKKyAgICAgICAgICAgICAgICBtX2J1dHRvblZhbHVlc1so
c2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlckxlZnRdCisgICAgICAgICAgICAp
OwogCiAgICAgICAgICAgICBtX2VsZW1lbnRNYXAuc2V0KGVsZW1lbnQuY29va2llKCksIG1ha2VV
bmlxdWU8SElER2FtZXBhZEhhdHN3aXRjaD4oZWxlbWVudCwgV1RGTW92ZShoYXRzd2l0Y2hWYWx1
ZXMpKSk7CiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dhbWVwYWQvbWFjL1N0YWRpYUhJREdhbWVwYWQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ2FtZXBhZC9tYWMvU3RhZGlhSElER2FtZXBhZC5jcHAKaW5kZXggMGE5NGU1NjIz
M2EyMDQ0NjQxZjEwMGYwNTY0NGQ1NzVhZGJjOWU3My4uMzc1MjEzNDQ2NGM3ODU2N2NiNmJlMThm
MDBlYTU3Zjg5YWI3YmQyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2Ft
ZXBhZC9tYWMvU3RhZGlhSElER2FtZXBhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ2FtZXBhZC9tYWMvU3RhZGlhSElER2FtZXBhZC5jcHAKQEAgLTQxLDEyICs0MSwxMCBAQCBT
dGFkaWFISURHYW1lcGFkOjpTdGFkaWFISURHYW1lcGFkKEhJRERldmljZSYmIGRldmljZSwgdW5z
aWduZWQgaW5kZXgpCiAKICAgICBtX21hcHBpbmcgPSBzdGFuZGFyZEdhbWVwYWRNYXBwaW5nU3Ry
aW5nKCk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDE5OyArK2kpCi0gICAgICAgIG1f
YnV0dG9uVmFsdWVzLmFwcGVuZCgwLjApOworICAgIG1fYnV0dG9uVmFsdWVzID0gVmVjdG9yKDE5
LCBTaGFyZWRHYW1lcGFkVmFsdWUgeyAwLjAgfSk7CiAKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGF4aXNDb3VudCA9IDQ7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBheGlzQ291bnQ7ICsr
aSkKLSAgICAgICAgbV9heGlzVmFsdWVzLmFwcGVuZCgwLjApOworICAgIGNvbnN0ZXhwciBzaXpl
X3QgYXhpc0NvdW50ID0gNDsKKyAgICBtX2F4aXNWYWx1ZXMgPSBWZWN0b3IoYXhpc0NvdW50LCBT
aGFyZWRHYW1lcGFkVmFsdWUgeyAwLjAgfSk7CiAKICAgICBhdXRvIGlucHV0RWxlbWVudHMgPSBo
aWREZXZpY2UoKS51bmlxdWVJbnB1dEVsZW1lbnRzSW5EZXZpY2VUcmVlT3JkZXIoKTsKIApAQCAt
NzAsMTEgKzY4LDEyIEBAIFN0YWRpYUhJREdhbWVwYWQ6OlN0YWRpYUhJREdhbWVwYWQoSElERGV2
aWNlJiYgZGV2aWNlLCB1bnNpZ25lZCBpbmRleCkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgIGNhc2UgaGlkSGF0c3dpdGNoRnVsbFVzYWdlOiB7Ci0gICAgICAgICAgICBWZWN0b3I8U2hh
cmVkR2FtZXBhZFZhbHVlPiBoYXRzd2l0Y2hWYWx1ZXM7Ci0gICAgICAgICAgICBoYXRzd2l0Y2hW
YWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6Okxl
ZnRDbHVzdGVyVG9wXSk7Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0
dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyUmlnaHRdKTsK
LSAgICAgICAgICAgIGhhdHN3aXRjaFZhbHVlcy5hcHBlbmQobV9idXR0b25WYWx1ZXNbKHNpemVf
dClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJCb3R0b21dKTsKLSAgICAgICAgICAgIGhh
dHN3aXRjaFZhbHVlcy5hcHBlbmQobV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9u
Um9sZTo6TGVmdENsdXN0ZXJMZWZ0XSk7CisgICAgICAgICAgICBhdXRvIGhhdHN3aXRjaFZhbHVl
cyA9IFZlY3RvcjxTaGFyZWRHYW1lcGFkVmFsdWU+Ojpmcm9tKAorICAgICAgICAgICAgICAgIG1f
YnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyVG9wXSwK
KyAgICAgICAgICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xl
OjpMZWZ0Q2x1c3RlclJpZ2h0XSwKKyAgICAgICAgICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6
ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlckJvdHRvbV0sCisgICAgICAgICAgICAg
ICAgbV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJM
ZWZ0XQorICAgICAgICAgICAgKTsKIAogICAgICAgICAgICAgbV9lbGVtZW50TWFwLnNldChlbGVt
ZW50LmNvb2tpZSgpLCBtYWtlVW5pcXVlPEhJREdhbWVwYWRIYXRzd2l0Y2g+KGVsZW1lbnQsIFdU
Rk1vdmUoaGF0c3dpdGNoVmFsdWVzKSkpOwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IDFm
ZWUyOWFlNWY3MTljNGU1NTRhMmM3ZTcwY2I3MGYwMWY5YjIwMDIuLjcyNGZiMTdjMzNmNGJjYTQ2
ODg5YzgzYmM1NTg0OGZkNzI3MGMzMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCkBAIC03NjMsMTEgKzc2Myw5IEBAIHZvaWQg
R3JhcGhpY3NMYXllcjo6YWRkUmVwYWludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZXBhaW50UmVj
dCkKICAgICBGbG9hdFJlY3QgbGFyZ2VzdFJlcGFpbnRSZWN0KEZsb2F0UG9pbnQoKSwgbV9zaXpl
KTsKICAgICBsYXJnZXN0UmVwYWludFJlY3QuaW50ZXJzZWN0KHJlcGFpbnRSZWN0KTsKICAgICBS
ZXBhaW50TWFwOjppdGVyYXRvciByZXBhaW50SXQgPSByZXBhaW50UmVjdE1hcCgpLmZpbmQodGhp
cyk7Ci0gICAgaWYgKHJlcGFpbnRJdCA9PSByZXBhaW50UmVjdE1hcCgpLmVuZCgpKSB7Ci0gICAg
ICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHJlcGFpbnRSZWN0czsKLSAgICAgICAgcmVwYWludFJlY3Rz
LmFwcGVuZChsYXJnZXN0UmVwYWludFJlY3QpOwotICAgICAgICByZXBhaW50UmVjdE1hcCgpLnNl
dCh0aGlzLCByZXBhaW50UmVjdHMpOwotICAgIH0gZWxzZSB7CisgICAgaWYgKHJlcGFpbnRJdCA9
PSByZXBhaW50UmVjdE1hcCgpLmVuZCgpKQorICAgICAgICByZXBhaW50UmVjdE1hcCgpLnNldCh0
aGlzLCBWZWN0b3IgeyBXVEZNb3ZlKGxhcmdlc3RSZXBhaW50UmVjdCkgfSk7CisgICAgZWxzZSB7
CiAgICAgICAgIFZlY3RvcjxGbG9hdFJlY3Q+JiByZXBhaW50UmVjdHMgPSByZXBhaW50SXQtPnZh
bHVlOwogICAgICAgICByZXBhaW50UmVjdHMuYXBwZW5kKGxhcmdlc3RSZXBhaW50UmVjdCk7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0
aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0
aWVzLmNwcAppbmRleCBiOTc5OWE0ZDEwNjFlZDIwYTFiNTBlZDUwNjg2NTFjNWZlYTQ2NmE0Li43
N2RjOTgzNWQ1NjEyZjY2ODE3MjRmN2I3NmNiYTEwMzk2YzdjMzg5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcApAQCAtMjkwLDE3
ICsyOTAsMTQgQEAgc3RhdGljIFZlY3RvcjxGbG9hdFBvaW50R3JhcGg6OlBvbHlnb24+IHBvbHln
b25zRm9yUmVjdChjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYKIAogVmVjdG9yPFBhdGg+IFBhdGhV
dGlsaXRpZXM6OnBhdGhzV2l0aFNocmlua1dyYXBwZWRSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRS
ZWN0PiYgcmVjdHMsIGZsb2F0IHJhZGl1cykKIHsKLSAgICBWZWN0b3I8UGF0aD4gcGF0aHM7Ci0K
ICAgICBpZiAocmVjdHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gcGF0aHM7CisgICAgICAg
IHJldHVybiB7IH07CiAKICAgICBpZiAocmVjdHMuc2l6ZSgpID4gMjApIHsKICAgICAgICAgUGF0
aCBwYXRoOwogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiByZWN0cykKICAgICAgICAg
ICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCwgRmxvYXRTaXplKHJhZGl1cywgcmFkaXVzKSk7
Ci0gICAgICAgIHBhdGhzLmFwcGVuZChwYXRoKTsKLSAgICAgICAgcmV0dXJuIHBhdGhzOworICAg
ICAgICByZXR1cm4geyBXVEZNb3ZlKHBhdGgpIH07CiAgICAgfQogCiAgICAgRmxvYXRQb2ludEdy
YXBoIGdyYXBoOwpAQCAtMzA5LDEwICszMDYsMTAgQEAgVmVjdG9yPFBhdGg+IFBhdGhVdGlsaXRp
ZXM6OnBhdGhzV2l0aFNocmlua1dyYXBwZWRSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYK
ICAgICAgICAgUGF0aCBwYXRoOwogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiByZWN0
cykKICAgICAgICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCwgRmxvYXRTaXplKHJhZGl1
cywgcmFkaXVzKSk7Ci0gICAgICAgIHBhdGhzLmFwcGVuZChwYXRoKTsKLSAgICAgICAgcmV0dXJu
IHBhdGhzOworICAgICAgICByZXR1cm4geyBXVEZNb3ZlKHBhdGgpIH07CiAgICAgfQogCisgICAg
VmVjdG9yPFBhdGg+IHBhdGhzOwogICAgIGZvciAoYXV0byYgcG9seSA6IHBvbHlzKSB7CiAgICAg
ICAgIFBhdGggcGF0aDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvbHkuc2l6
ZSgpOyArK2kpIHsKQEAgLTM0NCw3ICszNDEsNyBAQCBWZWN0b3I8UGF0aD4gUGF0aFV0aWxpdGll
czo6cGF0aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+Jgog
ICAgICAgICAgICAgcGF0aC5hZGRBcmNUbygqZnJvbUVkZ2Uuc2Vjb25kLCAqdG9FZGdlLmZpcnN0
ICsgdG9PZmZzZXQsIGNsYW1wZWRSYWRpdXMpOwogICAgICAgICB9CiAgICAgICAgIHBhdGguY2xv
c2VTdWJwYXRoKCk7Ci0gICAgICAgIHBhdGhzLmFwcGVuZChwYXRoKTsKKyAgICAgICAgcGF0aHMu
YXBwZW5kKFdURk1vdmUocGF0aCkpOwogICAgIH0KICAgICByZXR1cm4gcGF0aHM7CiB9CkBAIC01
NDMsMTMgKzU0MCwxNCBAQCBQYXRoIFBhdGhVdGlsaXRpZXM6OnBhdGhXaXRoU2hyaW5rV3JhcHBl
ZFJlY3RzRm9yT3V0bGluZShjb25zdCBWZWN0b3I8RmxvYXRSZWN0PgogICAgIGJvdHRvbUxlZnRS
YWRpdXMgPSBmaXJzdExpbmVSYWRpaS5ib3R0b21MZWZ0KCk7CiAgICAgdG9wUmlnaHRSYWRpdXMg
PSBsYXN0TGluZVJhZGlpLnRvcFJpZ2h0KCk7CiAgICAgYm90dG9tUmlnaHRSYWRpdXMgPSBsYXN0
TGluZVJhZGlpLmJvdHRvbVJpZ2h0KCk7Ci0gICAgVmVjdG9yPEZsb2F0UG9pbnQ+IGNvcm5lcnM7
CiAgICAgLy8gcGh5c2ljYWwgdG9wTGVmdC90b3BSaWdodC9ib3R0b21SaWdodC9ib3R0b21MZWZ0
CiAgICAgYXV0byBpc0hvcml6b250YWwgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0aW5n
TW9kZSk7Ci0gICAgY29ybmVycy5hcHBlbmQoZmlyc3RMaW5lUmVjdC5taW5YTWluWUNvcm5lcigp
KTsKLSAgICBjb3JuZXJzLmFwcGVuZChpc0hvcml6b250YWwgPyBsYXN0TGluZVJlY3QubWF4WE1p
bllDb3JuZXIoKSA6IGZpcnN0TGluZVJlY3QubWF4WE1pbllDb3JuZXIoKSk7Ci0gICAgY29ybmVy
cy5hcHBlbmQobGFzdExpbmVSZWN0Lm1heFhNYXhZQ29ybmVyKCkpOwotICAgIGNvcm5lcnMuYXBw
ZW5kKGlzSG9yaXpvbnRhbCA/IGZpcnN0TGluZVJlY3QubWluWE1heFlDb3JuZXIoKSA6IGxhc3RM
aW5lUmVjdC5taW5YTWF4WUNvcm5lcigpKTsKKyAgICBhdXRvIGNvcm5lcnMgPSBWZWN0b3I8Rmxv
YXRQb2ludD46OmZyb20oCisgICAgICAgIGZpcnN0TGluZVJlY3QubWluWE1pbllDb3JuZXIoKSwK
KyAgICAgICAgaXNIb3Jpem9udGFsID8gbGFzdExpbmVSZWN0Lm1heFhNaW5ZQ29ybmVyKCkgOiBm
aXJzdExpbmVSZWN0Lm1heFhNaW5ZQ29ybmVyKCksCisgICAgICAgIGxhc3RMaW5lUmVjdC5tYXhY
TWF4WUNvcm5lcigpLAorICAgICAgICBpc0hvcml6b250YWwgPyBmaXJzdExpbmVSZWN0Lm1pblhN
YXhZQ29ybmVyKCkgOiBsYXN0TGluZVJlY3QubWluWE1heFlDb3JuZXIoKQorICAgICk7CiAKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9seS5zaXplKCk7ICsraSkgewogICAgICAgICBh
dXRvIG1vdmVPckFkZExpbmVUbyA9IFtpLCAmcGF0aF0gKGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0
UG9pbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3Vy
Y2VCdWZmZXJQcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Nv
dXJjZUJ1ZmZlclByaXZhdGUuY3BwCmluZGV4IDU0OTlmMzdhN2YzNjQ2YmQ1ZjM5NWE0OGIwOWQ5
NDExZDRjOWI2NjQuLjA0Y2JlNGQyN2YxOTBiN2IyN2I5Y2E3ZTk4YTljNDcxNzNkMmY4OWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclBy
aXZhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1
ZmZlclByaXZhdGUuY3BwCkBAIC0yMTYsMTAgKzIxNiw5IEBAIHZvaWQgU291cmNlQnVmZmVyUHJp
dmF0ZTo6YnVmZmVyZWRTYW1wbGVzRm9yVHJhY2tJZChjb25zdCBBdG9tU3RyaW5nJiB0cmFja0lk
LCBDCiAgICAgaWYgKCF0cmFja0J1ZmZlcikKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9
KTsKIAotICAgIFZlY3RvcjxTdHJpbmc+IHNhbXBsZURlc2NyaXB0aW9uczsKLSAgICBmb3IgKGF1
dG8mIHBhaXIgOiB0cmFja0J1ZmZlci0+c2FtcGxlcy5kZWNvZGVPcmRlcigpKQotICAgICAgICBz
YW1wbGVEZXNjcmlwdGlvbnMuYXBwZW5kKHRvU3RyaW5nKCpwYWlyLnNlY29uZCkpOwotCisgICAg
YXV0byBzYW1wbGVEZXNjcmlwdGlvbnMgPSBXVEY6Om1hcCh0cmFja0J1ZmZlci0+c2FtcGxlcy5k
ZWNvZGVPcmRlcigpLCBbXShhdXRvJiBlbnRyeSkgeworICAgICAgICByZXR1cm4gdG9TdHJpbmco
KmVudHJ5LnNlY29uZCk7CisgICAgfSk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShz
YW1wbGVEZXNjcmlwdGlvbnMpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0
cmVhbWluZy5jcHAKaW5kZXggOGIwNGY5YmU5NmMzNmUwYTI2MjE4MGEyNWVhMzc0NTk2MmIzZDdk
NS4uYzU0NjE0NjIzYjg3ZWMwODk2MWYxZDQ0MjBmOTYwMWYxNmE2YWI0ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5
U3RyZWFtaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCkBAIC0yMDEsOSArMjAxLDcgQEAgUmVm
UHRyPEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6
c2FuaXRpemVTa2QoY29uc3QgRnIKIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFJlZjxGcmFnbWVudGVk
U2hhcmVkQnVmZmVyPj4+IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6ZXh0cmFjdEtleUlE
c1NrZChjb25zdCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyJiBidWZmZXIpCiB7CiAgICAgLy8gSW4g
dGhlICdza2QnIHNjaGVtZSwgdGhlIGluaXQgZGF0YSBpcyB0aGUga2V5IElELgotICAgIFZlY3Rv
cjxSZWY8RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4+IGtleUlEczsKLSAgICBrZXlJRHMuYXBwZW5k
KGJ1ZmZlci5jb3B5KCkpOwotICAgIHJldHVybiBrZXlJRHM7CisgICAgcmV0dXJuIFZlY3RvciB7
IGJ1ZmZlci5jb3B5KCkgfTsKIH0KIAogc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBP
bmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiYgdmFsaWRJbml0RGF0YVR5cGVzKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxh
eVN0cmVhbWluZ0FWRk9iakMubW0KaW5kZXggZDYzNjEyZmFhMDUzNzBhMDM5NzNhMWUyZDU2YzE4
NjhhMmY5OTE2MC4uOTYyNWZhOTUwM2U3YmViYzcxOWZjNGIzN2E2M2MzOGQ3NDUwMzA4YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWly
UGxheVN0cmVhbWluZ0FWRk9iakMubW0KQEAgLTE0OTQsNyArMTQ5NCw3IEBAIHZvaWQgQ0RNSW5z
dGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjp1cGRhdGVLZXlTdGF0dXNlcyhz
dGQ6Om9wdGlvbmFsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX2tleVN0YXR1c2VzLnN3YXAo
a2V5U3RhdHVzZXMpOworICAgIG1fa2V5U3RhdHVzZXMgPSBXVEZNb3ZlKGtleVN0YXR1c2VzKTsK
IAogICAgIG1faW5zdGFuY2UtPnNlc3Npb25LZXlTdGF0dXNlc0NoYW5nZWQoKnRoaXMpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvSW1hZ2VEZWNvZGVyQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVjb2RlckFWRk9iakMubW0KaW5kZXggNTYz
YWYxOTI0ZDlhZjM1OWU5MzBlZjY0YmFlMzIzZmMwNDFkZTg3YS4uYWQ3ZjQ1MTAxYzA2YTE4ODhj
MDA4ZmFlZDRhOTE5MDU2MTM4MjkzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVyQVZGT2JqQy5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9JbWFn
ZURlY29kZXJBVkZPYmpDLm1tCkBAIC01MzUsMTMgKzUzNSwxMCBAQCBWZWN0b3I8SW1hZ2VEZWNv
ZGVyOjpGcmFtZUluZm8+IEltYWdlRGVjb2RlckFWRk9iakM6OmZyYW1lSW5mb3MoKSBjb25zdAog
ICAgIGlmIChtX3NhbXBsZURhdGEuZW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAg
IFZlY3RvcjxJbWFnZURlY29kZXI6OkZyYW1lSW5mbz4gaW5mb3M7Ci0gICAgZm9yIChhdXRvJiBz
YW1wbGUgOiBtX3NhbXBsZURhdGEucHJlc2VudGF0aW9uT3JkZXIoKSkgeworICAgIHJldHVybiBX
VEY6Om1hcChtX3NhbXBsZURhdGEucHJlc2VudGF0aW9uT3JkZXIoKSwgW10oYXV0byYgc2FtcGxl
KSB7CiAgICAgICAgIGF1dG8qIGltYWdlU2FtcGxlID0gKEltYWdlRGVjb2RlckFWRk9iakNTYW1w
bGUqKXNhbXBsZS5zZWNvbmQuZ2V0KCk7Ci0gICAgICAgIGluZm9zLmFwcGVuZCh7IGltYWdlU2Ft
cGxlLT5oYXNBbHBoYSgpLCBTZWNvbmRzKGltYWdlU2FtcGxlLT5kdXJhdGlvbigpLnRvRG91Ymxl
KCkpfSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGluZm9zOworICAgICAgICByZXR1cm4gSW1hZ2VE
ZWNvZGVyOjpGcmFtZUluZm8geyBpbWFnZVNhbXBsZS0+aGFzQWxwaGEoKSwgU2Vjb25kcyhpbWFn
ZVNhbXBsZS0+ZHVyYXRpb24oKS50b0RvdWJsZSgpKSB9OworICAgIH0pOwogfQogCiBib29sIElt
YWdlRGVjb2RlckFWRk9iakM6OmZyYW1lQWxsb3dTdWJzYW1wbGluZ0F0SW5kZXgoc2l6ZV90IGlu
ZGV4KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUGFyc2VyQVZGT2JqQy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclBh
cnNlckFWRk9iakMubW0KaW5kZXggYWExNTg0MDRiMTBlNDQ0YWY2ZTVlZGRjOGRhZDZiYTk2ZWQ1
Y2IyMi4uZTYxYjE0N2Y2M2M1ZjQ1NzI3NWY2MDUwM2UzN2E4YjUyZDE4ZTNhMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291
cmNlQnVmZmVyUGFyc2VyQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQYXJzZXJBVkZPYmpDLm1tCkBA
IC0yOTcsMTYgKzI5NywxNCBAQCB2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlckFWRk9iakM6OmRpZFBh
cnNlU3RyZWFtRGF0YUFzQXNzZXQoQVZBc3NldCogYXNzZXQpCiAKICAgICAgICAgICAgIGlmIChb
dHJhY2sgaGFzTWVkaWFDaGFyYWN0ZXJpc3RpYzpBVk1lZGlhQ2hhcmFjdGVyaXN0aWNWaXN1YWxd
KSB7CiAgICAgICAgICAgICAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6
YXRpb25TZWdtZW50OjpWaWRlb1RyYWNrSW5mb3JtYXRpb24gaW5mbzsKLSAgICAgICAgICAgICAg
ICBhdXRvIHZpZGVvVHJhY2sgPSBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6
Y3JlYXRlKHRyYWNrKTsKLSAgICAgICAgICAgICAgICBpbmZvLnRyYWNrID0gdmlkZW9UcmFjay5j
b3B5UmVmKCk7CisgICAgICAgICAgICAgICAgaW5mby50cmFjayA9IFZpZGVvVHJhY2tQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDOjpjcmVhdGUodHJhY2spOwogICAgICAgICAgICAgICAgIGluZm8u
ZGVzY3JpcHRpb24gPSBNZWRpYURlc2NyaXB0aW9uQVZGT2JqQzo6Y3JlYXRlKHRyYWNrKTsKLSAg
ICAgICAgICAgICAgICBzZWdtZW50LnZpZGVvVHJhY2tzLmFwcGVuZChpbmZvKTsKKyAgICAgICAg
ICAgICAgICBzZWdtZW50LnZpZGVvVHJhY2tzLmFwcGVuZChXVEZNb3ZlKGluZm8pKTsKICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoW3RyYWNrIGhhc01lZGlhQ2hhcmFjdGVyaXN0aWM6QVZNZWRpYUNo
YXJhY3RlcmlzdGljQXVkaWJsZV0pIHsKICAgICAgICAgICAgICAgICBTb3VyY2VCdWZmZXJQcml2
YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQ6OkF1ZGlvVHJhY2tJbmZvcm1hdGlvbiBp
bmZvOwotICAgICAgICAgICAgICAgIGF1dG8gYXVkaW9UcmFjayA9IEF1ZGlvVHJhY2tQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDOjpjcmVhdGUodHJhY2spOwotICAgICAgICAgICAgICAgIGluZm8u
dHJhY2sgPSBhdWRpb1RyYWNrLmNvcHlSZWYoKTsKKyAgICAgICAgICAgICAgICBpbmZvLnRyYWNr
ID0gQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmNyZWF0ZSh0cmFjayk7CiAg
ICAgICAgICAgICAgICAgaW5mby5kZXNjcmlwdGlvbiA9IE1lZGlhRGVzY3JpcHRpb25BVkZPYmpD
OjpjcmVhdGUodHJhY2spOwotICAgICAgICAgICAgICAgIHNlZ21lbnQuYXVkaW9UcmFja3MuYXBw
ZW5kKGluZm8pOworICAgICAgICAgICAgICAgIHNlZ21lbnQuYXVkaW9UcmFja3MuYXBwZW5kKFdU
Rk1vdmUoaW5mbykpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBGSVhNRSgxMjUx
NjEpICAgIDogQWRkIFRleHRUcmFjayBzdXBwb3J0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2Eu
bW0KaW5kZXggODU0MjFlM2RlNzA5Y2UxNTljNDk0YjQwZmI4ZDFhZDIzNTkzYzNiYi4uOTc5NWI2
ZWM1NTdlNTRlMjIxYzhiNDZkZDcyNDkwMDYyNGRiNmI2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURh
dGFDb2NvYS5tbQpAQCAtNjgsMTEgKzY4LDExIEBAIFZlY3RvcjxGb250UGxhdGZvcm1EYXRhOjpG
b250VmFyaWF0aW9uQXhpcz4gRm9udFBsYXRmb3JtRGF0YTo6dmFyaWF0aW9uQXhlcyhTaG91CiAg
ICAgaWYgKCFwbGF0Zm9ybUZvbnQpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgCi0gICAgVmVj
dG9yPEZvbnRWYXJpYXRpb25BeGlzPiByZXN1bHRzOwotICAgIGZvciAoYXV0byYgW3RhZywgdmFs
dWVzXSA6IGRlZmF1bHRWYXJpYXRpb25WYWx1ZXMocGxhdGZvcm1Gb250LCBzaG91bGRMb2NhbGl6
ZUF4aXNOYW1lcykpCi0gICAgICAgIHJlc3VsdHMuYXBwZW5kKEZvbnRQbGF0Zm9ybURhdGE6OkZv
bnRWYXJpYXRpb25BeGlzKHZhbHVlcy5heGlzTmFtZSwgU3RyaW5nKHRhZy5kYXRhKCksIHRhZy5z
aXplKCkpLCB2YWx1ZXMuZGVmYXVsdFZhbHVlLCB2YWx1ZXMubWluaW11bVZhbHVlLCB2YWx1ZXMu
bWF4aW11bVZhbHVlKSk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdHM7CisgICAgYXV0byBtYXAg
PSBkZWZhdWx0VmFyaWF0aW9uVmFsdWVzKHBsYXRmb3JtRm9udCwgc2hvdWxkTG9jYWxpemVBeGlz
TmFtZXMpOworICAgIHJldHVybiBXVEY6Om1hcChtYXAsIFtdKGF1dG8mIGVudHJ5KSB7CisgICAg
ICAgIGF1dG8mIFt0YWcsIHZhbHVlc10gPSBlbnRyeTsKKyAgICAgICAgcmV0dXJuIEZvbnRQbGF0
Zm9ybURhdGE6OkZvbnRWYXJpYXRpb25BeGlzIHsgdmFsdWVzLmF4aXNOYW1lLCBTdHJpbmcodGFn
LmRhdGEoKSwgdGFnLnNpemUoKSksIHZhbHVlcy5kZWZhdWx0VmFsdWUsIHZhbHVlcy5taW5pbXVt
VmFsdWUsIHZhbHVlcy5tYXhpbXVtVmFsdWUgfTsKKyAgICB9KTsKIH0KIAogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCmluZGV4IGJhOGVhMWViNDQ4YTky
MWUzMGQzYWU2YTljNzdlODgyMzNhYmM1M2IuLmEyYzI1MGFhMmJlZjhkZTk2NGJhZjA5MjQwZDVl
MGVjNDE1MGVmODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0
ZWJvYXJkTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJk
TWFjLm1tCkBAIC03MDIsMTAgKzcwMiw3IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05T
X0JFR0lOCiAgICAgICAgIE5TVVJMICp1cmwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpjb2NvYURh
dGFdOwogICAgICAgICBpZiAoW3VybCBpc0ZpbGVVUkxdKQogICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwotICAgICAgICB0eXBlcy5hcHBlbmQoY29j
b2FUeXBlKTsKLSAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVn
eSgpLT5zZXRUeXBlcyh0eXBlcywgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKTsKKyAgICAg
ICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRUeXBlcyh7
IGNvY29hVHlwZSB9LCBtX3Bhc3RlYm9hcmROYW1lLCBjb250ZXh0KCkpOwogICAgICAgICBtX2No
YW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5z
ZXRTdHJpbmdGb3JUeXBlKGNvY29hRGF0YSwgY29jb2FUeXBlLCBtX3Bhc3RlYm9hcmROYW1lLCBj
b250ZXh0KCkpOwogCiAgICAgICAgIHJldHVybjsKQEAgLTcxNCw5ICs3MTEsNyBAQCBBTExPV19E
RVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIAogICAgIGlmICghY29jb2FUeXBlLmlzRW1wdHko
KSkgewogICAgICAgICAvLyBldmVyeXRoaW5nIGVsc2Ugd2Uga25vdyBvZiBnb2VzIG9uIHRoZSBw
Ym9hcmQgYXMgYSBzdHJpbmcKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7Ci0gICAgICAg
IHR5cGVzLmFwcGVuZChjb2NvYVR5cGUpOwotICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+
cGFzdGVib2FyZFN0cmF0ZWd5KCktPmFkZFR5cGVzKHR5cGVzLCBtX3Bhc3RlYm9hcmROYW1lLCBj
b250ZXh0KCkpOworICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0
ZWd5KCktPmFkZFR5cGVzKHsgY29jb2FUeXBlIH0sIG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQo
KSk7CiAgICAgICAgIG1fY2hhbmdlQ291bnQgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVi
b2FyZFN0cmF0ZWd5KCktPnNldFN0cmluZ0ZvclR5cGUoY29jb2FEYXRhLCBjb2NvYVR5cGUsIG1f
cGFzdGVib2FyZE5hbWUsIGNvbnRleHQoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVWaWRlb0NhcHR1cmVTb3VyY2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVWaWRlb0Nh
cHR1cmVTb3VyY2UuY3BwCmluZGV4IDNlM2Y0MWExYzU4MDdlNmNkMzU5ZGUzZGYyNmFlNzJkNTUx
Y2Q1ODIuLjc3ZDMyNjY1NmQ1Y2JjNWFlZmNkNDE3YTE3YTg3YTQ2ZjcxMjI3YmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lVmlkZW9DYXB0
dXJlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9S
ZWFsdGltZVZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAKQEAgLTc1LDExICs3NSw5IEBAIFZlY3RvcjxW
aWRlb1ByZXNldERhdGE+IFJlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlOjpwcmVzZXRzRGF0YSgp
CiAKIHZvaWQgUmVhbHRpbWVWaWRlb0NhcHR1cmVTb3VyY2U6OnNldFN1cHBvcnRlZFByZXNldHMo
VmVjdG9yPFZpZGVvUHJlc2V0RGF0YT4mJiBwcmVzZXREYXRhKQogewotICAgIFZlY3RvcjxSZWY8
VmlkZW9QcmVzZXQ+PiBwcmVzZXRzOwotCi0gICAgZm9yIChhdXRvJiBkYXRhIDogcHJlc2V0RGF0
YSkKLSAgICAgICAgcHJlc2V0cy5hcHBlbmQoVmlkZW9QcmVzZXQ6OmNyZWF0ZShXVEZNb3ZlKGRh
dGEpKSk7Ci0KKyAgICBhdXRvIHByZXNldHMgPSBXVEY6Om1hcChXVEZNb3ZlKHByZXNldERhdGEp
LCBbXShhdXRvJiYgZGF0YSkgeworICAgICAgICByZXR1cm4gVmlkZW9QcmVzZXQ6OmNyZWF0ZShX
VEZNb3ZlKGRhdGEpKTsKKyAgICB9KTsKICAgICBzZXRTdXBwb3J0ZWRQcmVzZXRzKFdURk1vdmUo
cHJlc2V0cykpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9CbG9iUmVnaXN0cnlJbXBsLmNwcAppbmRleCA2N2E3NjI5NWQ4NWYzOTFjODNiMjQwMGU2ZDFm
ZTU3OWNjZGVkODhmLi42MjM2MzZhYzJhYmQ2ODM4NDE0ZGM4ZjFmOTI2Y2VkNWM0N2NjYTJjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUlt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5
SW1wbC5jcHAKQEAgLTE0MSwxMCArMTQxLDggQEAgdm9pZCBCbG9iUmVnaXN0cnlJbXBsOjpyZWdp
c3RlckJsb2JVUkwoY29uc3QgVVJMJiB1cmwsIFZlY3RvcjxCbG9iUGFydD4mJiBibG9iUGEKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQmxvYlBhcnQ6OlR5cGU6
OkJsb2I6IHsKLSAgICAgICAgICAgIGlmIChhdXRvIGJsb2IgPSBtX2Jsb2JzLmdldChwYXJ0LnVy
bCgpLnN0cmluZygpKSkgewotICAgICAgICAgICAgICAgIGZvciAoY29uc3QgQmxvYkRhdGFJdGVt
JiBpdGVtIDogYmxvYi0+aXRlbXMoKSkKLSAgICAgICAgICAgICAgICAgICAgYmxvYkRhdGEtPm1f
aXRlbXMuYXBwZW5kKGl0ZW0pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGF1dG8g
YmxvYiA9IG1fYmxvYnMuZ2V0KHBhcnQudXJsKCkuc3RyaW5nKCkpKQorICAgICAgICAgICAgICAg
IGJsb2JEYXRhLT5tX2l0ZW1zLmFwcGVuZFZlY3RvcihibG9iLT5pdGVtcygpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIH0KQEAgLTMyOCw3ICszMjYsNyBAQCB2b2lk
IEJsb2JSZWdpc3RyeUltcGw6OndyaXRlQmxvYnNUb1RlbXBvcmFyeUZpbGVzRm9ySW5kZXhlZERC
KGNvbnN0IFZlY3RvcjxTdHJpbgogICAgICAgICAgICAgICAgIGZpbGVQYXRocy5jbGVhcigpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZmlsZVBh
dGhzLmFwcGVuZCh0ZW1wRmlsZVBhdGguaXNvbGF0ZWRDb3B5KCkpOworICAgICAgICAgICAgZmls
ZVBhdGhzLmFwcGVuZChXVEZNb3ZlKHRlbXBGaWxlUGF0aCkuaXNvbGF0ZWRDb3B5KCkpOwogICAg
ICAgICB9CiAKICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgZmlsZVBhdGhzID0gV1RGTW92ZShmaWxlUGF0aHMp
XSAoKSBtdXRhYmxlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuY3BwCmluZGV4IDg1MzBlMzM1NWYyZDZiOGQ3ZmZiNmVkZjgzZDYwOGJjYTRi
OWY1NTUuLjlhYjk5OGU0MWNiMDhjZjBiNmY5MGYxMGYxM2M0Yjg0NTdlYzkzOWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAt
MjA4NiwxMCArMjA4Niw4IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmRyYXdCb3hTaWRl
RnJvbVBhdGgoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsCiAgICAgICAgICAgICAg
ICAgZ2FwTGVuZ3RoICs9IChkYXNoTGVuZ3RoICAvIG51bWJlck9mR2Fwcyk7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIERhc2hBcnJheSBsaW5lRGFzaDsKLSAgICAgICAgICAgIGxpbmVE
YXNoLmFwcGVuZChkYXNoTGVuZ3RoKTsKLSAgICAgICAgICAgIGxpbmVEYXNoLmFwcGVuZChnYXBM
ZW5ndGgpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldExpbmVEYXNoKGxpbmVEYXNo
LCBkYXNoTGVuZ3RoKTsKKyAgICAgICAgICAgIGF1dG8gbGluZURhc2ggPSBEYXNoQXJyYXk6OmZy
b20oZGFzaExlbmd0aCwgZ2FwTGVuZ3RoKTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5z
ZXRMaW5lRGFzaChXVEZNb3ZlKGxpbmVEYXNoKSwgZGFzaExlbmd0aCk7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBzdHJva2luZyB0aGUgYm9yZGVyIHBhdGggY2F1c2Vz
IGlzc3VlcyB3aXRoIHRpZ2h0IGNvcm5lcnM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDNhYTBmODVlYThkZjc0ODczZmFkYTJjYWM2
YWRjZjQ2ZjAxODI3MjkuLmY2ZWVjMjZiYjRhODUyMDk3YzdlZTQ5NDI3MTJjNDBlNjgxZDBiMTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
CkBAIC0xOTU2LDkgKzE5NTYsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6Y29ubmVjdENs
aXBwaW5nU3RhY2tMYXllcnMoTGF5ZXJBbmNlc3RvckNsaXBwaW5nU3RhY2smCiAgICAgYXV0byYg
Y2xpcHBpbmdFbnRyeVN0YWNrID0gY2xpcHBpbmdTdGFjay5zdGFjaygpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBjbGlwcGluZ0VudHJ5U3RhY2suc2l6ZSgpIC0gMTsgKytpKSB7CiAg
ICAgICAgIGF1dG8mIGVudHJ5ID0gY2xpcHBpbmdFbnRyeVN0YWNrLmF0KGkpOwotICAgICAgICBW
ZWN0b3I8UmVmPEdyYXBoaWNzTGF5ZXI+PiBjaGlsZHJlbjsKLSAgICAgICAgY2hpbGRyZW4uYXBw
ZW5kKCpjbGlwcGluZ0VudHJ5U3RhY2suYXQoaSArIDEpLmNsaXBwaW5nTGF5ZXIpOwotICAgICAg
ICBlbnRyeS5jbGlwcGluZ0xheWVyLT5zZXRDaGlsZHJlbihXVEZNb3ZlKGNoaWxkcmVuKSk7Cisg
ICAgICAgIGVudHJ5LmNsaXBwaW5nTGF5ZXItPnNldENoaWxkcmVuKHsgUmVmIHsgKmNsaXBwaW5n
RW50cnlTdGFjay5hdChpICsgMSkuY2xpcHBpbmdMYXllciB9IH0pOwogICAgIH0KIAogICAgIGNs
aXBwaW5nRW50cnlTdGFjay5sYXN0KCkuY2xpcHBpbmdMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4o
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAKaW5kZXggMGJlMDM5YTBmMjNkNTdmZjdmNTdkOTkwOWI2NTM3NWEwMjQyNDNiNC4uMjNk
NzM3MTM0Y2E4ZWFhMTYwNWQwYzQ3N2FjZTYyODNmODQ2MjFiNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTE0OTEsOSAr
MTQ5MSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphZGp1c3RPdmVyZmxvd1Njcm9s
bGJhckNvbnRhaW5lckxheWVycyhSZW5kZXJMYXllciYKICAgICAgICAgICAgIG92ZXJmbG93QmFj
a2luZy0+ZW5zdXJlT3ZlcmZsb3dDb250cm9sc0hvc3RMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFj
aygmc3RhY2tpbmdDb250ZXh0TGF5ZXIpOwogCiAgICAgICAgIGlmIChhdXRvKiBvdmVyZmxvd0Nv
bnRyb2xzQW5jZXN0b3JDbGlwcGluZ1N0YWNrID0gb3ZlcmZsb3dCYWNraW5nLT5vdmVyZmxvd0Nv
bnRyb2xzSG9zdExheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrKCkpIHsKLSAgICAgICAgICAgIFZl
Y3RvcjxSZWY8R3JhcGhpY3NMYXllcj4+IGNoaWxkcmVuOwotICAgICAgICAgICAgY2hpbGRyZW4u
YXBwZW5kKCpvdmVyZmxvd0NvbnRhaW5lckxheWVyKTsKLSAgICAgICAgICAgIG92ZXJmbG93Q29u
dHJvbHNBbmNlc3RvckNsaXBwaW5nU3RhY2stPmxhc3RDbGlwcGluZ0xheWVyKCktPnNldENoaWxk
cmVuKFdURk1vdmUoY2hpbGRyZW4pKTsKKyAgICAgICAgICAgIG92ZXJmbG93Q29udHJvbHNBbmNl
c3RvckNsaXBwaW5nU3RhY2stPmxhc3RDbGlwcGluZ0xheWVyKCktPnNldENoaWxkcmVuKHsgUmVm
IHsgKm92ZXJmbG93Q29udGFpbmVyTGF5ZXIgfSB9KTsKICAgICAgICAgICAgIG92ZXJmbG93Q29u
dGFpbmVyTGF5ZXIgPSBvdmVyZmxvd0NvbnRyb2xzQW5jZXN0b3JDbGlwcGluZ1N0YWNrLT5maXJz
dENsaXBwaW5nTGF5ZXIoKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVNYWMubW0KaW5kZXggOWUxMDhmOGI0ZmYyNjE3OTY4OTY0ZmExMzcwMTUxOWJi
YzI0NTJjNC4uODc2NjdkZTJkZWQyOTVkOTM1ODAyYjMzODkyYTBjMzIxYzdlMzJlYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQpAQCAtMjczMSwxMCArMjcz
MSw5IEBAIHN0YXRpYyB2b2lkIHBhaW50QXR0YWNobWVudFRpdGxlQmFja2dyb3VuZChjb25zdCBS
ZW5kZXJBdHRhY2htZW50JiBhdHRhY2htZW50LCBHCiAgICAgaWYgKGxheW91dC5saW5lcy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGJhY2tncm91
bmRSZWN0czsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5b3V0LmxpbmVzLnNpemUo
KTsgKytpKQotICAgICAgICBiYWNrZ3JvdW5kUmVjdHMuYXBwZW5kKGxheW91dC5saW5lc1tpXS5i
YWNrZ3JvdW5kUmVjdCk7CisgICAgYXV0byBiYWNrZ3JvdW5kUmVjdHMgPSBsYXlvdXQubGluZXMu
bWFwKFtdKGF1dG8mIGxpbmUpIHsKKyAgICAgICAgcmV0dXJuIGxpbmUuYmFja2dyb3VuZFJlY3Q7
CisgICAgfSk7CiAKICAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3I7CiAgICAgaWYgKGF0dGFjaG1l
bnQuZnJhbWUoKS5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5k
ZXggZmU1NTliZDcwYjFkMGNmNGIxYzVhNWIxYzkwYTI5NjM1ZThiMjczMS4uOTI3NmI5M2M3MzEy
NjFjMWYyZmZiZWM0OWYxZWNjZTczY2ExYmI1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC0xOTcsMTEgKzE5Nyw5
IEBAIHN0YXRpYyB2b2lkIHdyaXRlU1ZHU3Ryb2tlUGFpbnRpbmdSZXNvdXJjZShUZXh0U3RyZWFt
JiB0cywgY29uc3QgUmVuZGVyRWxlbWVudCYKICAgICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0aENv
bnRleHQoJnNoYXBlKTsKICAgICBkb3VibGUgZGFzaE9mZnNldCA9IGxlbmd0aENvbnRleHQudmFs
dWVGb3JMZW5ndGgoc3ZnU3R5bGUuc3Ryb2tlRGFzaE9mZnNldCgpKTsKICAgICBkb3VibGUgc3Ry
b2tlV2lkdGggPSBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN0eWxlLnN0cm9rZVdpZHRo
KCkpOwotICAgIGNvbnN0IGF1dG8mIGRhc2hlcyA9IHN2Z1N0eWxlLnN0cm9rZURhc2hBcnJheSgp
OwotCi0gICAgRGFzaEFycmF5IGRhc2hBcnJheTsKLSAgICBmb3IgKGF1dG8mIGxlbmd0aCA6IGRh
c2hlcykKLSAgICAgICAgZGFzaEFycmF5LmFwcGVuZChsZW5ndGgudmFsdWUobGVuZ3RoQ29udGV4
dCkpOworICAgIGF1dG8gZGFzaEFycmF5ID0gc3ZnU3R5bGUuc3Ryb2tlRGFzaEFycmF5KCkubWFw
KFsmXShhdXRvJiBsZW5ndGgpIC0+IERhc2hBcnJheUVsZW1lbnQgeworICAgICAgICByZXR1cm4g
bGVuZ3RoLnZhbHVlKGxlbmd0aENvbnRleHQpOworICAgIH0pOwogCiAgICAgd3JpdGVJZk5vdERl
ZmF1bHQodHMsICJvcGFjaXR5Iiwgc3ZnU3R5bGUuc3Ryb2tlT3BhY2l0eSgpLCAxLjBmKTsKICAg
ICB3cml0ZUlmTm90RGVmYXVsdCh0cywgInN0cm9rZSB3aWR0aCIsIHN0cm9rZVdpZHRoLCAxLjAp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuY3BwCmluZGV4
IGE2M2ViODBhNzc5ZDc3NjhkYTQ3NzJiYjBkNmFmZTE5ZTM1MjFiYmQuLjg0ODEzNmM4YTUzOGM2
ZWM4ZWNjMTZkNWJmMDFiZmRlMmRkYjM5MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRDaHVuay5jcHAKQEAgLTcwLDggKzcwLDcgQEAgU1ZHVGV4dENodW5rOjpT
VkdUZXh0Q2h1bmsoY29uc3QgVmVjdG9yPFNWR0lubGluZVRleHRCb3gqPiYgbGluZUxheW91dEJv
eGVzLCB1bnMKICAgICAgICAgfQogICAgIH0KIAotICAgIGZvciAodW5zaWduZWQgaSA9IGZpcnN0
OyBpIDwgbGltaXQ7ICsraSkKLSAgICAgICAgbV9ib3hlcy5hcHBlbmQobGluZUxheW91dEJveGVz
W2ldKTsKKyAgICBtX2JveGVzLmFwcGVuZCgmbGluZUxheW91dEJveGVzW2ZpcnN0XSwgbGltaXQg
LSBmaXJzdCk7CiB9CiAKIHVuc2lnbmVkIFNWR1RleHRDaHVuazo6dG90YWxDaGFyYWN0ZXJzKCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29sbGVjdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29sbGVjdG9yLmNwcAppbmRleCAy
Mjk5ZjhjNjM3OWI1MDk0OTJhMWExZmZhNTIzMDZhMWFhMTY4OWI0Li5lM2RjM2VmYmMyOWI2M2Q3
NTIxNDlkYWNiMTEzMWZmYTUyYWNjOTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHls
ZS9QYWdlUnVsZUNvbGxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUGFnZVJ1
bGVDb2xsZWN0b3IuY3BwCkBAIC04NCw4ICs4NCw5IEBAIHZvaWQgUGFnZVJ1bGVDb2xsZWN0b3I6
Om1hdGNoUGFnZVJ1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNG
CiAKICAgICBzdGQ6OnN0YWJsZV9zb3J0KG1hdGNoZWRQYWdlUnVsZXMuYmVnaW4oKSwgbWF0Y2hl
ZFBhZ2VSdWxlcy5lbmQoKSwgY29tcGFyZVBhZ2VSdWxlcyk7CiAKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbWF0Y2hlZFBhZ2VSdWxlcy5zaXplKCk7IGkrKykKLSAgICAgICAgbV9yZXN1
bHQuYXV0aG9yRGVjbGFyYXRpb25zLmFwcGVuZCh7ICZtYXRjaGVkUGFnZVJ1bGVzW2ldLT5wcm9w
ZXJ0aWVzKCkgfSk7CisgICAgbV9yZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zLnJlc2VydmVDYXBh
Y2l0eShtX3Jlc3VsdC5hdXRob3JEZWNsYXJhdGlvbnMuc2l6ZSgpICsgbWF0Y2hlZFBhZ2VSdWxl
cy5zaXplKCkpOworICAgIGZvciAoYXV0byogcGFnZVJ1bGUgOiBtYXRjaGVkUGFnZVJ1bGVzKQor
ICAgICAgICBtX3Jlc3VsdC5hdXRob3JEZWNsYXJhdGlvbnMudW5jaGVja2VkQXBwZW5kKHsgJnBh
Z2VSdWxlLT5wcm9wZXJ0aWVzKCkgfSk7CiB9CiAKIHN0YXRpYyBib29sIGNoZWNrUGFnZVNlbGVj
dG9yQ29tcG9uZW50cyhjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIGJvb2wgaXNMZWZ0UGFn
ZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcAppbmRleCA1NzUxODU5MTk3YjIyNmZjMjQ0YWY2YmMz
MjA1ZmFkMjZlMDE3MDE5Li5jZjE2NTIyMWNkNTNhM2M1YTc3YzZkOTgwODQzMjFjMTNmMjIyMzhk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0QnVpbGRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwCkBAIC0zNzgsOCArMzc4
LDkgQEAgdm9pZCBSdWxlU2V0QnVpbGRlcjo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6cG9wKGNvbnN0
IE1lZGlhUXVlcnlTZXQqIHNldCkKIAogICAgIGlmICghZHluYW1pY0NvbnRleHRTdGFjay5sYXN0
KCkuYWZmZWN0ZWRSdWxlUG9zaXRpb25zLmlzRW1wdHkoKSB8fCAhY29sbGVjdER5bmFtaWMpIHsK
ICAgICAgICAgUnVsZVNldDo6RHluYW1pY01lZGlhUXVlcnlSdWxlcyBydWxlczsKKyAgICAgICAg
cnVsZXMubWVkaWFRdWVyeVNldHMucmVzZXJ2ZUNhcGFjaXR5KHJ1bGVzLm1lZGlhUXVlcnlTZXRz
LnNpemUoKSArIGR5bmFtaWNDb250ZXh0U3RhY2suc2l6ZSgpKTsKICAgICAgICAgZm9yIChhdXRv
JiBjb250ZXh0IDogZHluYW1pY0NvbnRleHRTdGFjaykKLSAgICAgICAgICAgIHJ1bGVzLm1lZGlh
UXVlcnlTZXRzLmFwcGVuZChjb250ZXh0LnNldC5nZXQoKSk7CisgICAgICAgICAgICBydWxlcy5t
ZWRpYVF1ZXJ5U2V0cy51bmNoZWNrZWRBcHBlbmQoY29udGV4dC5zZXQuZ2V0KCkpOwogCiAgICAg
ICAgIGlmIChjb2xsZWN0RHluYW1pYykgewogICAgICAgICAgICAgcnVsZXMuYWZmZWN0ZWRSdWxl
UG9zaXRpb25zLmFwcGVuZFZlY3RvcihkeW5hbWljQ29udGV4dFN0YWNrLmxhc3QoKS5hZmZlY3Rl
ZFJ1bGVQb3NpdGlvbnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVC
dWlsZGVyQ29udmVydGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDb252
ZXJ0ZXIuaAppbmRleCAyZjgzNGRmNjdkODBjYjEzZGQ0YzkxNTUxYmFkMTJkYjFiMjNhMjQ5Li43
NDY0Zjg0ZDhiZjZiMmIyYTMzMTIzZDU5MmJlMjkyZjE0Y2MyOGRlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaApAQCAtMTY5NywxMyArMTY5NywxMiBA
QCBpbmxpbmUgVmVjdG9yPEF0b21TdHJpbmc+IEJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRDb250
YWluZXJOYW1lKEJ1aWxkZXJTdGF0ZSYsCiAgICAgICAgIEFTU0VSVChkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpOwogICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KKyAgICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4odmFsdWUpKQorICAg
ICAgICByZXR1cm4geyB9OwogCi0gICAgVmVjdG9yPEF0b21TdHJpbmc+IHJlc3VsdDsKLSAgICBp
ZiAoaXM8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBpdGVtIDog
ZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5k
KGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihpdGVtLmdldCgpKS5zdHJpbmdWYWx1ZSgpKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gV1RGOjptYXAoZG93bmNhc3Q8
Q1NTVmFsdWVMaXN0Pih2YWx1ZSksIFtdKGF1dG8mIGl0ZW0pIC0+IEF0b21TdHJpbmcgeworICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0uZ2V0KCkpLnN0cmlu
Z1ZhbHVlKCk7CisgICAgfSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllclByb3h5LmNwcAppbmRleCAwZWY4MzQy
ZGQyNjhlZTY4YzMwNDc2MmRhMDU4YmE0ZmJjYmM2ZTNjLi45NDlmZjMyMDU1NTBiNDhiN2NjNzll
NDUwNTE2YTQwNDAyYTRhMzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
bWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyUHJveHkuY3BwCkBAIC04MDUsMTEgKzgwNSw5
IEBAIGJvb2wgUmVtb3RlTWVkaWFQbGF5ZXJQcm94eTo6ZG9lc0hhdmVBdHRyaWJ1dGUoY29uc3Qg
QXRvbVN0cmluZyYsIEF0b21TdHJpbmcqKSBjCiAjaWYgRU5BQkxFKEFWRl9DQVBUSU9OUykKIFZl
Y3RvcjxSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2s+PiBSZW1vdGVNZWRpYVBsYXllclByb3h5Ojpv
dXRPZkJhbmRUcmFja1NvdXJjZXMoKQogewotICAgIFZlY3RvcjxSZWZQdHI8UGxhdGZvcm1UZXh0
VHJhY2s+PiBzb3VyY2VzOwotICAgIGZvciAoYXV0byYgZGF0YSA6IG1fY29uZmlndXJhdGlvbi5v
dXRPZkJhbmRUcmFja0RhdGEpCi0gICAgICAgIHNvdXJjZXMuYXBwZW5kKFBsYXRmb3JtVGV4dFRy
YWNrOjpjcmVhdGUoV1RGTW92ZShkYXRhKSkpOwotICAgIAotICAgIHJldHVybiBzb3VyY2VzOwor
ICAgIHJldHVybiBXVEY6Om1hcChtX2NvbmZpZ3VyYXRpb24ub3V0T2ZCYW5kVHJhY2tEYXRhLCBb
XShhdXRvJiBkYXRhKSAtPiBSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2s+IHsKKyAgICAgICAgcmV0
dXJuIFBsYXRmb3JtVGV4dFRyYWNrOjpjcmVhdGUoV1RGTW92ZShkYXRhKSk7CisgICAgfSk7CiB9
CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1Jl
bW90ZVNvdXJjZUJ1ZmZlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRp
YS9SZW1vdGVTb3VyY2VCdWZmZXJQcm94eS5jcHAKaW5kZXggMjc5MTY1ZGU2NmFhZmUwMjQ2ODFl
MTYxYTAzNWM0YTEwOTU0ZTZlMS4uYmJkMzBkOGU3MWMxOTQyNzFlYTAzYmFhMjJlMzUwNmRiYjIw
NTA4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZVNv
dXJjZUJ1ZmZlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEv
UmVtb3RlU291cmNlQnVmZmVyUHJveHkuY3BwCkBAIC03NSw5ICs3NSwxMCBAQCB2b2lkIFJlbW90
ZVNvdXJjZUJ1ZmZlclByb3h5Ojpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZUluaXRpYWxp
emF0aW9uU2VnbWVudAogCiAgICAgSW5pdGlhbGl6YXRpb25TZWdtZW50SW5mbyBzZWdtZW50SW5m
bzsKICAgICBzZWdtZW50SW5mby5kdXJhdGlvbiA9IHNlZ21lbnQuZHVyYXRpb247CisgICAgc2Vn
bWVudEluZm8uYXVkaW9UcmFja3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzZWdtZW50LmF1ZGlv
VHJhY2tzLnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiBhdWRpb1RyYWNrSW5mbyA6IHNlZ21lbnQu
YXVkaW9UcmFja3MpIHsKICAgICAgICAgYXV0byBpZGVudGlmaWVyID0gbV9yZW1vdGVNZWRpYVBs
YXllclByb3h5LT5hZGRSZW1vdGVBdWRpb1RyYWNrUHJveHkoKmF1ZGlvVHJhY2tJbmZvLnRyYWNr
KTsKLSAgICAgICAgc2VnbWVudEluZm8uYXVkaW9UcmFja3MuYXBwZW5kKHsgTWVkaWFEZXNjcmlw
dGlvbkluZm8oKmF1ZGlvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwgaWRlbnRpZmllciB9KTsKKyAg
ICAgICAgc2VnbWVudEluZm8uYXVkaW9UcmFja3MudW5jaGVja2VkQXBwZW5kKHsgTWVkaWFEZXNj
cmlwdGlvbkluZm8oKmF1ZGlvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwgaWRlbnRpZmllciB9KTsK
IAogICAgICAgICBBU1NFUlQoIW1fdHJhY2tJZHMuY29udGFpbnMoaWRlbnRpZmllcikpOwogICAg
ICAgICBBU1NFUlQoIW1fbWVkaWFEZXNjcmlwdGlvbnMuY29udGFpbnMoaWRlbnRpZmllcikpOwpA
QCAtODUsOSArODYsMTAgQEAgdm9pZCBSZW1vdGVTb3VyY2VCdWZmZXJQcm94eTo6c291cmNlQnVm
ZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQKICAgICAgICAgbV9tZWRp
YURlc2NyaXB0aW9ucy5hZGQoaWRlbnRpZmllciwgKmF1ZGlvVHJhY2tJbmZvLmRlc2NyaXB0aW9u
KTsKICAgICB9CiAKKyAgICBzZWdtZW50SW5mby52aWRlb1RyYWNrcy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KHNlZ21lbnQudmlkZW9UcmFja3Muc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIHZpZGVv
VHJhY2tJbmZvIDogc2VnbWVudC52aWRlb1RyYWNrcykgewogICAgICAgICBhdXRvIGlkZW50aWZp
ZXIgPSBtX3JlbW90ZU1lZGlhUGxheWVyUHJveHktPmFkZFJlbW90ZVZpZGVvVHJhY2tQcm94eSgq
dmlkZW9UcmFja0luZm8udHJhY2spOwotICAgICAgICBzZWdtZW50SW5mby52aWRlb1RyYWNrcy5h
cHBlbmQoeyBNZWRpYURlc2NyaXB0aW9uSW5mbygqdmlkZW9UcmFja0luZm8uZGVzY3JpcHRpb24p
LCBpZGVudGlmaWVyIH0pOworICAgICAgICBzZWdtZW50SW5mby52aWRlb1RyYWNrcy51bmNoZWNr
ZWRBcHBlbmQoeyBNZWRpYURlc2NyaXB0aW9uSW5mbygqdmlkZW9UcmFja0luZm8uZGVzY3JpcHRp
b24pLCBpZGVudGlmaWVyIH0pOwogCiAgICAgICAgIEFTU0VSVCghbV90cmFja0lkcy5jb250YWlu
cyhpZGVudGlmaWVyKSk7CiAgICAgICAgIEFTU0VSVCghbV9tZWRpYURlc2NyaXB0aW9ucy5jb250
YWlucyhpZGVudGlmaWVyKSk7CkBAIC05NSw5ICs5NywxMCBAQCB2b2lkIFJlbW90ZVNvdXJjZUJ1
ZmZlclByb3h5Ojpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2Vn
bWVudAogICAgICAgICBtX21lZGlhRGVzY3JpcHRpb25zLmFkZChpZGVudGlmaWVyLCAqdmlkZW9U
cmFja0luZm8uZGVzY3JpcHRpb24pOwogICAgIH0KIAorICAgIHNlZ21lbnRJbmZvLnRleHRUcmFj
a3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzZWdtZW50LnRleHRUcmFja3Muc2l6ZSgpKTsKICAg
ICBmb3IgKGF1dG8mIHRleHRUcmFja0luZm8gOiBzZWdtZW50LnRleHRUcmFja3MpIHsKICAgICAg
ICAgYXV0byBpZGVudGlmaWVyID0gbV9yZW1vdGVNZWRpYVBsYXllclByb3h5LT5hZGRSZW1vdGVU
ZXh0VHJhY2tQcm94eSgqdGV4dFRyYWNrSW5mby50cmFjayk7Ci0gICAgICAgIHNlZ21lbnRJbmZv
LnRleHRUcmFja3MuYXBwZW5kKHsgTWVkaWFEZXNjcmlwdGlvbkluZm8oKnRleHRUcmFja0luZm8u
ZGVzY3JpcHRpb24pLCBpZGVudGlmaWVyIH0pOworICAgICAgICBzZWdtZW50SW5mby50ZXh0VHJh
Y2tzLnVuY2hlY2tlZEFwcGVuZCh7IE1lZGlhRGVzY3JpcHRpb25JbmZvKCp0ZXh0VHJhY2tJbmZv
LmRlc2NyaXB0aW9uKSwgaWRlbnRpZmllciB9KTsKIAogICAgICAgICBBU1NFUlQoIW1fdHJhY2tJ
ZHMuY29udGFpbnMoaWRlbnRpZmllcikpOwogICAgICAgICBBU1NFUlQoIW1fbWVkaWFEZXNjcmlw
dGlvbnMuY29udGFpbnMoaWRlbnRpZmllcikpOwpAQCAtMzM4LDE2ICszNDEsMTEgQEAgdm9pZCBS
ZW1vdGVTb3VyY2VCdWZmZXJQcm94eTo6c2Vla1RvVGltZShjb25zdCBNZWRpYVRpbWUmIG1lZGlh
VGltZSkKIAogdm9pZCBSZW1vdGVTb3VyY2VCdWZmZXJQcm94eTo6dXBkYXRlVHJhY2tJZHMoVmVj
dG9yPHN0ZDo6cGFpcjxUcmFja1ByaXZhdGVSZW1vdGVJZGVudGlmaWVyLCBUcmFja1ByaXZhdGVS
ZW1vdGVJZGVudGlmaWVyPj4mJiBpZGVudGlmaWVyUGFpcnMpCiB7Ci0gICAgVmVjdG9yPHN0ZDo6
cGFpcjxBdG9tU3RyaW5nLCBBdG9tU3RyaW5nPj4gdHJhY2tJZFBhaXJzOwotCi0gICAgZm9yIChh
dXRvJiBpZGVudGlmaWVyUGFpciA6IGlkZW50aWZpZXJQYWlycykgeworICAgIGF1dG8gdHJhY2tJ
ZFBhaXJzID0gaWRlbnRpZmllclBhaXJzLm1hcChbJl0oYXV0byYgaWRlbnRpZmllclBhaXIpIHsK
ICAgICAgICAgQVNTRVJUKG1fdHJhY2tJZHMuY29udGFpbnMoaWRlbnRpZmllclBhaXIuZmlyc3Qp
KTsKICAgICAgICAgQVNTRVJUKG1fdHJhY2tJZHMuY29udGFpbnMoaWRlbnRpZmllclBhaXIuc2Vj
b25kKSk7Ci0KLSAgICAgICAgYXV0byBvbGRJZCA9IG1fdHJhY2tJZHMudGFrZShpZGVudGlmaWVy
UGFpci5maXJzdCk7Ci0gICAgICAgIGF1dG8gbmV3SWQgPSBtX3RyYWNrSWRzLmdldChpZGVudGlm
aWVyUGFpci5zZWNvbmQpOwotICAgICAgICB0cmFja0lkUGFpcnMuYXBwZW5kKHN0ZDo6bWFrZV9w
YWlyKG9sZElkLCBuZXdJZCkpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIHN0ZDo6cGFpciB7IG1f
dHJhY2tJZHMudGFrZShpZGVudGlmaWVyUGFpci5maXJzdCksIG1fdHJhY2tJZHMuZ2V0KGlkZW50
aWZpZXJQYWlyLnNlY29uZCkgfTsKKyAgICB9KTsKIAogICAgIGlmICghdHJhY2tJZFBhaXJzLmlz
RW1wdHkoKSkKICAgICAgICAgbV9zb3VyY2VCdWZmZXJQcml2YXRlLT51cGRhdGVUcmFja0lkcyhX
VEZNb3ZlKHRyYWNrSWRQYWlycykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmNwcAppbmRleCA3MGI1YWZkYTUyNmU5OTA5Yjk2MmQ3MTIxM2Q4NWI2MGI1
MzcxODFkLi5lODc2ZWMzNzc3MWZmNDAwY2FhODM0Y2VmYWU5NTYyNTRjYzNmZDkzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcApAQCAtODUzLDkg
Kzg1Myw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptZXJnZVN0YXRp
c3RpY0ZvclRlc3RpbmcoY29uc3QgUmVnaXN0cmFibGVECiAKICAgICAgICAgICAgIHN0YXRpc3Rp
Yy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zID0gV1RGTW92ZSh0b3BGcmFtZURvbWFpbnMp
OwogCi0gICAgICAgICAgICBWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4gc3RhdGlzdGlj
czsKLSAgICAgICAgICAgIHN0YXRpc3RpY3MuYXBwZW5kKFdURk1vdmUoc3RhdGlzdGljKSk7Ci0g
ICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+bWVyZ2VTdGF0aXN0aWNzKFdURk1vdmUoc3Rh
dGlzdGljcykpOworICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPm1lcmdlU3RhdGlzdGlj
cyhWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz46OmZyb20oV1RGTW92ZShzdGF0aXN0aWMp
KSk7CiAgICAgICAgIH0KICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MuY3BwCmluZGV4IGY0ZjhhNGM0ZjRhZjk2YWY2ODk0MmM1YzZjOTg5MmZmN2Ux
OTkzZjEuLjRhOGIwZWRhMDliZjA1ODk4YTNiOGIyMmM5MDhiNDdiMjhlYjljODEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC0xMzgw
LDEwICsxMzgwLDkgQEAgc3RhdGljIHZvaWQgZmV0Y2hEaXNrQ2FjaGVFbnRyaWVzKE5ldHdvcmtD
YWNoZTo6Q2FjaGUqIGNhY2hlLCBQQUw6OlNlc3Npb25JRCBzZXMKICAgICBIYXNoTWFwPFNlY3Vy
aXR5T3JpZ2luRGF0YSwgdWludDY0X3Q+IG9yaWdpbnNBbmRTaXplczsKICAgICBjYWNoZS0+dHJh
dmVyc2UoW2ZldGNoT3B0aW9ucywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSwgb3JpZ2luc0FuZFNpemVzID0gV1RGTW92ZShvcmlnaW5zQW5kU2l6ZXMpXShh
dXRvKiB0cmF2ZXJzYWxFbnRyeSkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghdHJhdmVyc2FsRW50
cnkpIHsKLSAgICAgICAgICAgIFZlY3RvcjxXZWJzaXRlRGF0YTo6RW50cnk+IGVudHJpZXM7Ci0K
LSAgICAgICAgICAgIGZvciAoYXV0byYgb3JpZ2luQW5kU2l6ZSA6IG9yaWdpbnNBbmRTaXplcykK
LSAgICAgICAgICAgICAgICBlbnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmln
aW5BbmRTaXplLmtleSwgV2Vic2l0ZURhdGFUeXBlOjpEaXNrQ2FjaGUsIG9yaWdpbkFuZFNpemUu
dmFsdWUgfSk7CisgICAgICAgICAgICBhdXRvIGVudHJpZXMgPSBXVEY6Om1hcChvcmlnaW5zQW5k
U2l6ZXMsIFtdKGF1dG8mIG9yaWdpbkFuZFNpemUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
V2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luQW5kU2l6ZS5rZXksIFdlYnNpdGVEYXRhVHlwZTo6
RGlza0NhY2hlLCBvcmlnaW5BbmRTaXplLnZhbHVlIH07CisgICAgICAgICAgICB9KTsKIAogICAg
ICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBlbnRyaWVzID0gV1RGTW92ZShlbnRyaWVzKV0gKCkg
bXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZW50cmllcyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05vdGlmaWNhdGlvbnMvTmV0
d29ya05vdGlmaWNhdGlvbk1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Ob3RpZmljYXRpb25zL05ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2VyLmNwcAppbmRleCBmMDBh
MjE5M2FhMmIxMzk4MDJiMzY2YTRmMTIxYzc2ZWRmZjg4ZjAzLi5jNTEyZjJjYjMyNTQwNDU0YjA2
ZGY3MzI1YTMxYjJhM2NlMWQwYzY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05vdGlmaWNhdGlvbnMvTmV0d29ya05vdGlmaWNhdGlvbk1hbmFnZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTm90aWZpY2F0aW9ucy9OZXR3b3JrTm90aWZp
Y2F0aW9uTWFuYWdlci5jcHAKQEAgLTgyLDkgKzgyLDkgQEAgdm9pZCBOZXR3b3JrTm90aWZpY2F0
aW9uTWFuYWdlcjo6ZGVsZXRlUHVzaEFuZE5vdGlmaWNhdGlvblJlZ2lzdHJhdGlvbihjb25zdCBT
ZWMKIHZvaWQgTmV0d29ya05vdGlmaWNhdGlvbk1hbmFnZXI6OmdldE9yaWdpbnNXaXRoUHVzaEFu
ZE5vdGlmaWNhdGlvblBlcm1pc3Npb25zKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVj
dG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiByZXBseUhhbmRsZXIgPSBb
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKFZlY3RvcjxT
dHJpbmc+IG9yaWdpblN0cmluZ3MpIG11dGFibGUgewotICAgICAgICBWZWN0b3I8U2VjdXJpdHlP
cmlnaW5EYXRhPiBvcmlnaW5zOwotICAgICAgICBmb3IgKGF1dG8mIG9yaWdpblN0cmluZyA6IG9y
aWdpblN0cmluZ3MpCi0gICAgICAgICAgICBvcmlnaW5zLmFwcGVuZChTZWN1cml0eU9yaWdpbkRh
dGE6OmZyb21VUkwoeyB7IH0sIG9yaWdpblN0cmluZyB9KSk7CisgICAgICAgIGF1dG8gb3JpZ2lu
cyA9IG9yaWdpblN0cmluZ3MubWFwKFtdKGF1dG8mIG9yaWdpblN0cmluZykgeworICAgICAgICAg
ICAgcmV0dXJuIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbVVSTCh7IHsgfSwgb3JpZ2luU3RyaW5n
IH0pOworICAgICAgICB9KTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShvcmln
aW5zKSk7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKaW5kZXggY2I5MDFiNmM1OGIxODU5
YWU4YmUyYWQ5ZGE5MDAyZDgyMmI4MDYxMi4uN2UyZDM3N2ExYmY4NjJkOGExNjk1ZWQ5NWJiMDVh
ZWNjNDNkY2QxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC0yOTUsMjAgKzI5NSwxNCBAQCBW
ZWN0b3I8U3RvcmFnZUFyZWFJZGVudGlmaWVyPiBTdG9yYWdlTWFuYWdlcjo6YWxsU3RvcmFnZUFy
ZWFJZGVudGlmaWVycygpIGNvbnN0CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAK
ICAgICBWZWN0b3I8U3RvcmFnZUFyZWFJZGVudGlmaWVyPiBpZGVudGlmaWVyczsKLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIGxvY2FsU3RvcmFnZU5hbWVzcGFjZSA6IG1fbG9jYWxTdG9yYWdlTmFtZXNw
YWNlcy52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8ga2V5IDogbG9jYWxTdG9yYWdlTmFt
ZXNwYWNlLT5zdG9yYWdlQXJlYUlkZW50aWZpZXJzKCkpCi0gICAgICAgICAgICBpZGVudGlmaWVy
cy5hcHBlbmQoa2V5KTsKLSAgICB9CisgICAgZm9yIChjb25zdCBhdXRvJiBsb2NhbFN0b3JhZ2VO
YW1lc3BhY2UgOiBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpCisgICAgICAgIGlk
ZW50aWZpZXJzLmFwcGVuZFZlY3Rvcihsb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VBcmVh
SWRlbnRpZmllcnMoKSk7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYXNpZW50TG9jYWxTdG9y
YWdlTmFtZXNwYWNlIDogbV90cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygp
KSB7Ci0gICAgICAgIGZvciAoYXV0byBrZXkgOiB0cmFzaWVudExvY2FsU3RvcmFnZU5hbWVzcGFj
ZS0+c3RvcmFnZUFyZWFJZGVudGlmaWVycygpKQotICAgICAgICAgICAgaWRlbnRpZmllcnMuYXBw
ZW5kKGtleSk7Ci0gICAgfQorICAgIGZvciAoY29uc3QgYXV0byYgdHJhc2llbnRMb2NhbFN0b3Jh
Z2VOYW1lc3BhY2UgOiBtX3RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkp
CisgICAgICAgIGlkZW50aWZpZXJzLmFwcGVuZFZlY3Rvcih0cmFzaWVudExvY2FsU3RvcmFnZU5h
bWVzcGFjZS0+c3RvcmFnZUFyZWFJZGVudGlmaWVycygpKTsKIAotICAgIGZvciAoY29uc3QgYXV0
byYgc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UgOiBtX3Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlcy52
YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8ga2V5IDogc2Vzc2lvblN0b3JhZ2VOYW1lc3Bh
Y2UtPnN0b3JhZ2VBcmVhSWRlbnRpZmllcnMoKSkKLSAgICAgICAgICAgIGlkZW50aWZpZXJzLmFw
cGVuZChrZXkpOwotICAgIH0KKyAgICBmb3IgKGNvbnN0IGF1dG8mIHNlc3Npb25TdG9yYWdlTmFt
ZXNwYWNlIDogbV9zZXNzaW9uU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpCisgICAgICAgIGlk
ZW50aWZpZXJzLmFwcGVuZFZlY3RvcihzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZUFy
ZWFJZGVudGlmaWVycygpKTsKIAogICAgIHJldHVybiBpZGVudGlmaWVyczsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9UcmFuc2llbnRMb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJT
dG9yYWdlL1RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHAKaW5kZXggZWVlYzU1MGVl
ZjYzYWU1OWExZWFiM2FhOGE0OTdhMzJjMTA1MDYyNC4uZmI5OGVkMzk0ODA5MTYwNjg3MTcyNmFl
MDg2ZDUxZjE1MTJkNDQwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9XZWJTdG9yYWdlL1RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1RyYW5zaWVudExvY2FsU3RvcmFn
ZU5hbWVzcGFjZS5jcHAKQEAgLTU1LDE0ICs1NSwxMSBAQCBTdG9yYWdlQXJlYSYgVHJhbnNpZW50
TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpnZXRPckNyZWF0ZVN0b3JhZ2VBcmVhKFNlY3VyaXR5T3Jp
ZwogVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4gVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNw
YWNlOjpvcmlnaW5zKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
LSAgICBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zOwotCi0gICAgZm9yIChjb25z
dCBhdXRvJiBzdG9yYWdlQXJlYSA6IG1fc3RvcmFnZUFyZWFNYXAudmFsdWVzKCkpIHsKLSAgICAg
ICAgaWYgKCFzdG9yYWdlQXJlYS0+aXRlbXMoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBvcmln
aW5zLmFwcGVuZChzdG9yYWdlQXJlYS0+c2VjdXJpdHlPcmlnaW4oKSk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIG9yaWdpbnM7CisgICAgcmV0dXJuIFdURjo6Y29tcGFjdE1hcChtX3N0b3JhZ2VBcmVh
TWFwLCBbXShhdXRvJiBlbnRyeSkgLT4gc3RkOjpvcHRpb25hbDxTZWN1cml0eU9yaWdpbkRhdGE+
IHsKKyAgICAgICAgaWYgKGVudHJ5LnZhbHVlLT5pdGVtcygpLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBlbnRyeS52YWx1ZS0+c2Vj
dXJpdHlPcmlnaW4oKTsKKyAgICB9KTsKIH0KIAogdm9pZCBUcmFuc2llbnRMb2NhbFN0b3JhZ2VO
YW1lc3BhY2U6OmNsZWFyU3RvcmFnZUFyZWFzTWF0Y2hpbmdPcmlnaW4oY29uc3QgU2VjdXJpdHlP
cmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbikKQEAgLTgyLDEwICs3OSw5IEBAIHZvaWQgVHJhbnNp
ZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpjbGVhckFsbFN0b3JhZ2VBcmVhcygpCiAKIFZlY3Rv
cjxTdG9yYWdlQXJlYUlkZW50aWZpZXI+IFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6
c3RvcmFnZUFyZWFJZGVudGlmaWVycygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFN0b3JhZ2VBcmVh
SWRlbnRpZmllcj4gaWRlbnRpZmllcnM7Ci0gICAgZm9yIChhdXRvJiBzdG9yYWdlQXJlYSA6IG1f
c3RvcmFnZUFyZWFNYXAudmFsdWVzKCkpCi0gICAgICAgIGlkZW50aWZpZXJzLmFwcGVuZChzdG9y
YWdlQXJlYS0+aWRlbnRpZmllcigpKTsKLSAgICByZXR1cm4gaWRlbnRpZmllcnM7CisgICAgcmV0
dXJuIFdURjo6bWFwKG1fc3RvcmFnZUFyZWFNYXAsIFtdKGF1dG8mIGVudHJ5KSB7CisgICAgICAg
IHJldHVybiBlbnRyeS52YWx1ZS0+aWRlbnRpZmllcigpOworICAgIH0pOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAKaW5kZXggZGE5Y2I4YTVk
Y2MwZWQ3ZjlmNGMyZTNkMmYyNzY4OTRhMDFlZDE3NC4uM2UxYWUzMTMwMjhhZDAwM2NkNTVmODFl
NDZlNWNhZTBiZjFlYWRlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAKQEAgLTIwOSw4
ICsyMDksOSBAQCB2b2lkIENhY2hlOjpmaW5pc2hPcGVuaW5nKENvbXBsZXRpb25DYWxsYmFjayYm
IGNhbGxiYWNrLCBzdGQ6Om9wdGlvbmFsPEVycm9yPiYmCiB7CiAgICAgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8UmVjb3JkSW5mb3JtYXRpb24+PiByZWNvcmRzOwogICAgIGZvciAoYXV0
byYgdmFsdWUgOiBtX3JlY29yZHMudmFsdWVzKCkpIHsKKyAgICAgICAgcmVjb3Jkcy5yZXNlcnZl
Q2FwYWNpdHkocmVjb3Jkcy5zaXplKCkgKyB2YWx1ZS5zaXplKCkpOwogICAgICAgICBmb3IgKGF1
dG8mIHJlY29yZCA6IHZhbHVlKQotICAgICAgICAgICAgcmVjb3Jkcy5hcHBlbmQocmVjb3JkKTsK
KyAgICAgICAgICAgIHJlY29yZHMudW5jaGVja2VkQXBwZW5kKHJlY29yZCk7CiAgICAgfQogICAg
IHN0ZDo6c29ydChyZWNvcmRzLmJlZ2luKCksIHJlY29yZHMuZW5kKCksIFsmXShjb25zdCBhdXRv
JiBhLCBjb25zdCBhdXRvJiBiKSB7CiAgICAgICAgIHJldHVybiBhLmdldCgpLmluc2VydGlvblRp
bWUgPCBiLmdldCgpLmluc2VydGlvblRpbWU7CkBAIC02ODIsOCArNjgzLDkgQEAgVmVjdG9yPEtl
eT4gQ2FjaGU6OmtleXMoKSBjb25zdAogewogICAgIFZlY3RvcjxLZXk+IGtleXM7CiAgICAgZm9y
IChhdXRvJiByZWNvcmRzIDogbV9yZWNvcmRzLnZhbHVlcygpKSB7CisgICAgICAgIGtleXMucmVz
ZXJ2ZUNhcGFjaXR5KGtleXMuc2l6ZSgpICsgcmVjb3Jkcy5zaXplKCkpOwogICAgICAgICBmb3Ig
KGF1dG8mIHJlY29yZCA6IHJlY29yZHMpCi0gICAgICAgICAgICBrZXlzLmFwcGVuZChyZWNvcmQu
a2V5KTsKKyAgICAgICAgICAgIGtleXMudW5jaGVja2VkQXBwZW5kKHJlY29yZC5rZXkpOwogICAg
IH0KICAgICByZXR1cm4ga2V5czsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuY3BwCmluZGV4IDQwOWEzMzg4
YTBiOGVjZjlhYjcxMDQ5YjcyOWZkZTM5MjdjNDhlYjUuLjQxMzY5NDRiNWZmODVlZjIzZmNlZTQ3
ZWVkODMyZjFlZDBiNjA0N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmNwcApAQCAtNjksOCArNjksOSBA
QCBTUUxpdGVTdG9yYWdlQXJlYTo6U1FMaXRlU3RvcmFnZUFyZWEodW5zaWduZWQgcXVvdGEsIGNv
bnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbgogewogICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgp
KTsKIAorICAgIG1fY2FjaGVkU3RhdGVtZW50cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHN0YXRp
Y19jYXN0PHNpemVfdD4oU3RhdGVtZW50VHlwZTo6SW52YWxpZCkpOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihTdGF0ZW1lbnRUeXBlOjpJbnZhbGlkKTsg
KytpKQotICAgICAgICBtX2NhY2hlZFN0YXRlbWVudHMuYXBwZW5kKG51bGxwdHIpOworICAgICAg
ICBtX2NhY2hlZFN0YXRlbWVudHMudW5jaGVja2VkQXBwZW5kKG51bGxwdHIpOwogfQogCiB2b2lk
IFNRTGl0ZVN0b3JhZ2VBcmVhOjpjbG9zZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS5jcHAKaW5kZXgg
MDRhNjk2ODE3OGE2Zjc1OTRjMjgwZWY3MzE4MTk4Y2I2MzJiOTIzMC4uYmNjYzA1NTA3NzE3Nzk3
NjY4ZjljOWRjZjEwMzEwOTExMWI5OGFlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5LmNwcApAQCAt
OTMsOSArOTMsOSBAQCB2b2lkIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpzaG93UGF5bWVu
dFVJKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIGRlc3RpbmF0aQogCiAgICAgVVJMIG9yaWdpbmF0
aW5nVVJMKFVSTCgpLCBvcmlnaW5hdGluZ1VSTFN0cmluZyk7CiAKLSAgICBWZWN0b3I8VVJMPiBs
aW5rSWNvblVSTHM7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBsaW5rSWNvblVSTFN0cmluZyA6IGxp
bmtJY29uVVJMU3RyaW5ncykKLSAgICAgICAgbGlua0ljb25VUkxzLmFwcGVuZChVUkwoVVJMKCks
IGxpbmtJY29uVVJMU3RyaW5nKSk7CisgICAgYXV0byBsaW5rSWNvblVSTHMgPSBsaW5rSWNvblVS
TFN0cmluZ3MubWFwKFtdKGF1dG8mIGxpbmtJY29uVVJMU3RyaW5nKSB7CisgICAgICAgIHJldHVy
biBVUkwoVVJMKCksIGxpbmtJY29uVVJMU3RyaW5nKTsKKyAgICB9KTsKIAogICAgIHBsYXRmb3Jt
U2hvd1BheW1lbnRVSSh3ZWJQYWdlUHJveHlJRCwgb3JpZ2luYXRpbmdVUkwsIGxpbmtJY29uVVJM
cywgcGF5bWVudFJlcXVlc3QsIFt0aGlzLCB3ZWFrVGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9XShi
b29sIHJlc3VsdCkgewogICAgICAgICBpZiAoIXdlYWtUaGlzKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb24uY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb24uY3BwCmluZGV4IDg4NDY2YzQ5ZWQwZGUxOGUyMDMy
Y2FhMGEwNDY0ODM5ZWE3NDUxMDEuLjRhODg5MDM5ZTk0YTYyZmE1OTJmMTk1N2Y3NmQ4NTllNzlj
OWZjNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbi5j
cHAKQEAgLTYyLDEwICs2MiwxMCBAQCBOYXZpZ2F0aW9uOjpOYXZpZ2F0aW9uKFdlYk5hdmlnYXRp
b25TdGF0ZSYgc3RhdGUsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJlcQogICAgIDogbV9u
YXZpZ2F0aW9uSUQoc3RhdGUuZ2VuZXJhdGVOYXZpZ2F0aW9uSUQoKSkKICAgICAsIG1fb3JpZ2lu
YWxSZXF1ZXN0KFdURk1vdmUocmVxdWVzdCkpCiAgICAgLCBtX2N1cnJlbnRSZXF1ZXN0KG1fb3Jp
Z2luYWxSZXF1ZXN0KQorICAgICwgbV9yZWRpcmVjdENoYWluIHsgbV9vcmlnaW5hbFJlcXVlc3Qu
dXJsKCkgfQogICAgICwgbV9mcm9tSXRlbShmcm9tSXRlbSkKICAgICAsIG1fY2xpZW50TmF2aWdh
dGlvbkFjdGl2aXR5KG5hdmlnYXRpb25BY3Rpdml0eVRpbWVvdXQpCiB7Ci0gICAgbV9yZWRpcmVj
dENoYWluLmFwcGVuZChtX29yaWdpbmFsUmVxdWVzdC51cmwoKSk7CiB9CiAKIE5hdmlnYXRpb246
Ok5hdmlnYXRpb24oV2ViTmF2aWdhdGlvblN0YXRlJiBzdGF0ZSwgV2ViQmFja0ZvcndhcmRMaXN0
SXRlbSYgdGFyZ2V0SXRlbSwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogZnJvbUl0ZW0sIEZyYW1l
TG9hZFR5cGUgYmFja0ZvcndhcmRGcmFtZUxvYWRUeXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV0tTaGFyZVNoZWV0Lm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV0tTaGFyZVNoZWV0Lm1tCmluZGV4IDU1NGFiODA2NDI3ZWNiOWNlODMwYWNh
OTdmYzdkZGNkYzk4NTNlMTUuLmUzODhhM2MzN2QwZjY5NjVkNzY5MWYyN2IxNzgwYTkxM2YwNGVl
MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2hhcmVTaGVl
dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NoYXJlU2hlZXQubW0K
QEAgLTEwMCw5ICsxMDAsOSBAQCBzdGF0aWMgdm9pZCBhcHBlbmRGaWxlc0FzU2hhcmVhYmxlVVJM
cyhSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+JiYgc2hhcmVEYXRhQXJyYQogICAgICAgICBTdHJp
bmcgZmlsZU5hbWU7CiAgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGZpbGVEYXRhOwogICAgIH07
Ci0gICAgVmVjdG9yPEZpbGVXcml0ZVRhc2s+IGZpbGVXcml0ZVRhc2tzOwotICAgIGZvciAoYXV0
byYgZmlsZSA6IGZpbGVzKQotICAgICAgICBmaWxlV3JpdGVUYXNrcy5hcHBlbmQoeyBmaWxlLmZp
bGVOYW1lLmlzb2xhdGVkQ29weSgpLCBmaWxlLmZpbGVEYXRhLT5jcmVhdGVOU0RhdGEoKSB9KTsK
KyAgICBhdXRvIGZpbGVXcml0ZVRhc2tzID0gZmlsZXMubWFwKFtdKGF1dG8mIGZpbGUpIHsKKyAg
ICAgICAgcmV0dXJuIEZpbGVXcml0ZVRhc2sgeyBmaWxlLmZpbGVOYW1lLmlzb2xhdGVkQ29weSgp
LCBmaWxlLmZpbGVEYXRhLT5jcmVhdGVOU0RhdGEoKSB9OworICAgIH0pOwogCiAgICAgYXV0byBx
dWV1ZSA9IFdvcmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LldLU2hhcmVTaGVldC5T
aGFyZWFibGVGaWxlV3JpdGVyIik7CiAgICAgcXVldWUtPmRpc3BhdGNoKFtzaGFyZURhdGFBcnJh
eSA9IFdURk1vdmUoc2hhcmVEYXRhQXJyYXkpLCBmaWxlV3JpdGVUYXNrcyA9IFdURk1vdmUoZmls
ZVdyaXRlVGFza3MpLCB0ZW1wb3JhcnlEaXJlY3RvcnkgPSByZXRhaW5QdHIodGVtcG9yYXJ5RGly
ZWN0b3J5KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
KSBtdXRhYmxlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dl
YlBhZ2VQcm94eUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFn
ZVByb3h5Q29jb2EubW0KaW5kZXggZjFjMzcwNmIwOWZmOWUxMjgyMWQ3ZGEzYTIyNWI3MGJhNDZk
Y2UzNi4uNTZhMTRkOGJmMzZlZDQ0ZGFkYmYxZTRjNDg0MGE1ZTA2NDE0YjhlNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KQEAg
LTY2NiwxNCArNjY2LDEyIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZXN0b3JlQXBwSGlnaGxpZ2h0
c0FuZFNjcm9sbFRvSW5kZXgoY29uc3QgVmVjdG9yPFJlZjxTaGFyZWRNCiAgICAgaWYgKCFoYXNS
dW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8U2hhcmVkTWVt
b3J5OjpJUENIYW5kbGU+IG1lbW9yeUhhbmRsZXM7Ci0KLSAgICBmb3IgKGF1dG8gaGlnaGxpZ2h0
IDogaGlnaGxpZ2h0cykgeworICAgIGF1dG8gbWVtb3J5SGFuZGxlcyA9IFdURjo6Y29tcGFjdE1h
cChoaWdobGlnaHRzLCBbXShhdXRvJiBoaWdobGlnaHQpIC0+IHN0ZDo6b3B0aW9uYWw8U2hhcmVk
TWVtb3J5OjpJUENIYW5kbGU+IHsKICAgICAgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxl
OwotICAgICAgICBoaWdobGlnaHQtPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6
UHJvdGVjdGlvbjo6UmVhZE9ubHkpOwotCi0gICAgICAgIG1lbW9yeUhhbmRsZXMuYXBwZW5kKFNo
YXJlZE1lbW9yeTo6SVBDSGFuZGxlIHsgV1RGTW92ZShoYW5kbGUpLCBoaWdobGlnaHQtPnNpemUo
KSB9KTsKLSAgICB9CisgICAgICAgIGlmICghaGlnaGxpZ2h0LT5jcmVhdGVIYW5kbGUoaGFuZGxl
LCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KSkKKyAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSB7
IFdURk1vdmUoaGFuZGxlKSwgaGlnaGxpZ2h0LT5zaXplKCkgfTsKKyAgICB9KTsKICAgICAKICAg
ICBzZXRVcEhpZ2hsaWdodHNPYnNlcnZlcigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9GcmFtZUxvYWRTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9G
cmFtZUxvYWRTdGF0ZS5jcHAKaW5kZXggYzYxYmVkODFkMDkyODQ2MzJiZjI5NjVlZDJjOTliMGM2
ZmU0MDFhMy4uNjllNTNkN2JlYjg2Y2U2YjQwNmYzY2RiODM5MmFiNzJhM2ZmYzgyNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0ZyYW1lTG9hZFN0YXRlLmNwcApAQCAtOTAsMTEgKzkwLDgg
QEAgdm9pZCBGcmFtZUxvYWRTdGF0ZTo6ZGlkRmluaXNoTG9hZCgpCiAKICAgICBtX3N0YXRlID0g
U3RhdGU6OkZpbmlzaGVkOwogCi0gICAgVmVjdG9yPE9ic2VydmVyKj4gb2JzZXJ2ZXJzQ29weTsK
LSAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogbV9vYnNlcnZlcnMpCi0gICAgICAgIG9ic2VydmVy
c0NvcHkuYXBwZW5kKCZvYnNlcnZlcik7Ci0gICAgZm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2Vy
dmVyc0NvcHkpCi0gICAgICAgIG9ic2VydmVyLT5kaWRGaW5pc2hMb2FkKCk7CisgICAgZm9yIChh
dXRvJiBvYnNlcnZlciA6IGNvcHlUb1ZlY3Rvck9mPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8T2Jz
ZXJ2ZXI+PihtX29ic2VydmVycykpCisgICAgICAgIG9ic2VydmVyLmdldCgpLmRpZEZpbmlzaExv
YWQoKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRTdGF0ZTo6ZGlkRmFpbExvYWQoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5j
cHAKaW5kZXggODMxYjIxYTVmMDNmYTQ2YWI4NDA4MDFhOTQ5MTk2NzM5ZGEwNjdlYi4uOTIyYTBk
YjhhZWU2ZTAwNGE2M2M1MjMwMDgwZTVjNmNmN2Y2MTM4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBAIC0x
ODMsOCArMTgzLDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJh
bWV0ZXJzVG9OZXdQcm9jZXNzKCkKICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVk
QXNMb2NhbCA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCku
c2NoZW1lc1RvUmVnaXN0ZXJBc0xvY2FsKCkpOwogICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1Jl
Z2lzdGVyZWRBc05vQWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpz
aW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3MoKSk7CiAgICAgcGFyYW1ldGVy
cy5jYWNoZU1vZGVsID0gTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLmNhY2hlTW9k
ZWwoKTsKLSAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVz
V2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKLSAgICAgICAgcGFyYW1ldGVycy51cmxTY2hl
bWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBlbmQoc2NoZW1lKTsKKyAgICBwYXJh
bWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzID0gV2ViUHJvY2Vz
c1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOworCiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAoU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnkg
PSBXZWJQcm9jZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOyAhY29va2llU3RvcmFn
ZURpcmVjdG9yeS5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0gU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3Jh
Z2VEaXJlY3RvcnkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlckNv
bnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCmlu
ZGV4IGZhMjU0YzJkYWRjMDYzMDI4ZGZkNTA0ZDI4OTBhODkyYWVkYWZiMDguLjViYmU3Mzk2MjA1
MjdhODI3Y2Q1N2YxNjlhZjJmMGMwYzU5NmE3MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENv
bnRyb2xsZXJQcm94eS5jcHAKQEAgLTExNywxMSArMTE3LDExIEBAIFVzZXJDb250ZW50Q29udHJv
bGxlclBhcmFtZXRlcnMgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnBhcmFtZXRlcnMo
KSBjb25zCiAgICAgcGFyYW1ldGVycy5pZGVudGlmaWVyID0gaWRlbnRpZmllcigpOwogICAgIAog
ICAgIEFTU0VSVChwYXJhbWV0ZXJzLnVzZXJDb250ZW50V29ybGRzLmlzRW1wdHkoKSk7Ci0gICAg
Zm9yIChjb25zdCBhdXRvJiBpZGVudGlmaWVyIDogbV9hc3NvY2lhdGVkQ29udGVudFdvcmxkcykg
eworICAgIHBhcmFtZXRlcnMudXNlckNvbnRlbnRXb3JsZHMgPSBXVEY6Om1hcChtX2Fzc29jaWF0
ZWRDb250ZW50V29ybGRzLCBbXShhdXRvJiBpZGVudGlmaWVyKSB7CiAgICAgICAgIGF1dG8qIHdv
cmxkID0gQVBJOjpDb250ZW50V29ybGQ6OndvcmxkRm9ySWRlbnRpZmllcihpZGVudGlmaWVyKTsK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQod29ybGQpOwotICAgICAgICBwYXJhbWV0ZXJzLnVzZXJD
b250ZW50V29ybGRzLmFwcGVuZCh3b3JsZC0+d29ybGREYXRhKCkpOwotICAgIH0KKyAgICAgICAg
cmV0dXJuIHdvcmxkLT53b3JsZERhdGEoKTsKKyAgICB9KTsKIAogICAgIGZvciAoYXV0byB1c2Vy
U2NyaXB0IDogbV91c2VyU2NyaXB0cy0+ZWxlbWVudHNPZlR5cGU8QVBJOjpVc2VyU2NyaXB0Pigp
KQogICAgICAgICBwYXJhbWV0ZXJzLnVzZXJTY3JpcHRzLmFwcGVuZCh7IHVzZXJTY3JpcHQtPmlk
ZW50aWZpZXIoKSwgdXNlclNjcmlwdC0+Y29udGVudFdvcmxkKCkuaWRlbnRpZmllcigpLCB1c2Vy
U2NyaXB0LT51c2VyU2NyaXB0KCkgfSk7CkBAIC0xMjksOCArMTI5LDkgQEAgVXNlckNvbnRlbnRD
b250cm9sbGVyUGFyYW1ldGVycyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cGFyYW1l
dGVycygpIGNvbnMKICAgICBmb3IgKGF1dG8gdXNlclN0eWxlU2hlZXQgOiBtX3VzZXJTdHlsZVNo
ZWV0cy0+ZWxlbWVudHNPZlR5cGU8QVBJOjpVc2VyU3R5bGVTaGVldD4oKSkKICAgICAgICAgcGFy
YW1ldGVycy51c2VyU3R5bGVTaGVldHMuYXBwZW5kKHsgdXNlclN0eWxlU2hlZXQtPmlkZW50aWZp
ZXIoKSwgdXNlclN0eWxlU2hlZXQtPmNvbnRlbnRXb3JsZCgpLmlkZW50aWZpZXIoKSwgdXNlclN0
eWxlU2hlZXQtPnVzZXJTdHlsZVNoZWV0KCkgfSk7CiAKLSAgICBmb3IgKGF1dG8mIGhhbmRsZXIg
OiBtX3NjcmlwdE1lc3NhZ2VIYW5kbGVycy52YWx1ZXMoKSkKLSAgICAgICAgcGFyYW1ldGVycy5t
ZXNzYWdlSGFuZGxlcnMuYXBwZW5kKHsgaGFuZGxlci0+aWRlbnRpZmllcigpLCBoYW5kbGVyLT53
b3JsZCgpLmlkZW50aWZpZXIoKSwgaGFuZGxlci0+bmFtZSgpIH0pOworICAgIHBhcmFtZXRlcnMu
bWVzc2FnZUhhbmRsZXJzID0gV1RGOjptYXAobV9zY3JpcHRNZXNzYWdlSGFuZGxlcnMsIFtdKGF1
dG8gZW50cnkpIHsKKyAgICAgICAgcmV0dXJuIFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyRGF0YSB7
IGVudHJ5LnZhbHVlLT5pZGVudGlmaWVyKCksIGVudHJ5LnZhbHVlLT53b3JsZCgpLmlkZW50aWZp
ZXIoKSwgZW50cnkudmFsdWUtPm5hbWUoKSB9OworICAgIH0pOwogCiAjaWYgRU5BQkxFKENPTlRF
TlRfRVhURU5TSU9OUykKICAgICBwYXJhbWV0ZXJzLmNvbnRlbnRSdWxlTGlzdHMgPSBjb250ZW50
UnVsZUxpc3REYXRhKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJB
dXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHAKaW5kZXgg
OTM0ODBlZDVjYjM5YTYxY2JjZjY3MzUxZTBhODgwZWEwOWZlNDQ3Ni4uNjU3MmY1Mzk1OThlZjQx
ZGQxMDMwNWFjZWVjOGYxODdkOGQ1MjUyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRvck1hbmFnZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0b3JNYW5h
Z2VyLmNwcApAQCAtNDE2LDExICs0MTYsMTEgQEAgdm9pZCBBdXRoZW50aWNhdG9yTWFuYWdlcjo6
c3RhcnREaXNjb3ZlcnkoY29uc3QgVHJhbnNwb3J0U2V0JiB0cmFuc3BvcnRzKQogewogICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgQVNTRVJUKG1fc2VydmljZXMuaXNFbXB0eSgp
ICYmIHRyYW5zcG9ydHMuc2l6ZSgpIDw9IG1heFRyYW5zcG9ydE51bWJlcik7Ci0gICAgZm9yIChh
dXRvJiB0cmFuc3BvcnQgOiB0cmFuc3BvcnRzKSB7CisgICAgbV9zZXJ2aWNlcyA9IFdURjo6bWFw
KHRyYW5zcG9ydHMsIFt0aGlzXShhdXRvJiB0cmFuc3BvcnQpIHsKICAgICAgICAgYXV0byBzZXJ2
aWNlID0gY3JlYXRlU2VydmljZSh0cmFuc3BvcnQsICp0aGlzKTsKICAgICAgICAgc2VydmljZS0+
c3RhcnREaXNjb3ZlcnkoKTsKLSAgICAgICAgbV9zZXJ2aWNlcy5hcHBlbmQoV1RGTW92ZShzZXJ2
aWNlKSk7Ci0gICAgfQorICAgICAgICByZXR1cm4gc2VydmljZTsKKyAgICB9KTsKIH0KIAogdm9p
ZCBBdXRoZW50aWNhdG9yTWFuYWdlcjo6aW5pdFRpbWVPdXRUaW1lcigpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmNwcAppbmRleCBjNzQzNDNlNjViODg5
Zjc4NjlkYzhjY2EzNDA1MWI4YjI2NTQwMmI2Li5kZWM5ZTgzOTIyMzY4ZmU2MTU1ZTAzZDY5YTNm
MzdkOWRiZjAxNzc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJCYWNr
Rm9yd2FyZExpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkJhY2tGb3J3
YXJkTGlzdC5jcHAKQEAgLTM0MCwxNiArMzQwLDExIEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0
OjpyZW1vdmVBbGxJdGVtcygpCiAKICAgICBMT0coQmFja0ZvcndhcmQsICIoQmFjay9Gb3J3YXJk
KSBXZWJCYWNrRm9yd2FyZExpc3QgJXAgcmVtb3ZlQWxsSXRlbXMgKGhhcyAlenUgb2YgdGhlbSki
LCB0aGlzLCBtX2VudHJpZXMuc2l6ZSgpKTsKIAotICAgIFZlY3RvcjxSZWY8V2ViQmFja0Zvcndh
cmRMaXN0SXRlbT4+IHJlbW92ZWRJdGVtczsKLQotICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2Vu
dHJpZXMpIHsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9lbnRyaWVzKQogICAgICAgICBkaWRS
ZW1vdmVJdGVtKGVudHJ5KTsKLSAgICAgICAgcmVtb3ZlZEl0ZW1zLmFwcGVuZChXVEZNb3ZlKGVu
dHJ5KSk7Ci0gICAgfQogCi0gICAgbV9lbnRyaWVzLmNsZWFyKCk7CiAgICAgbV9jdXJyZW50SW5k
ZXggPSBzdGQ6Om51bGxvcHQ7Ci0gICAgbV9wYWdlLT5kaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3Qo
bnVsbHB0ciwgV1RGTW92ZShyZW1vdmVkSXRlbXMpKTsKKyAgICBtX3BhZ2UtPmRpZENoYW5nZUJh
Y2tGb3J3YXJkTGlzdChudWxscHRyLCBzdGQ6OmV4Y2hhbmdlKG1fZW50cmllcywgeyB9KSk7CiB9
CiAKIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjpjbGVhcigpCkBAIC0zNjMsMjEgKzM1OCwxNyBA
QCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6Y2xlYXIoKQogICAgICAgICByZXR1cm47CiAKICAg
ICBSZWZQdHI8V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4gY3VycmVudEl0ZW0gPSB0aGlzLT5jdXJy
ZW50SXRlbSgpOwotICAgIFZlY3RvcjxSZWY8V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4+IHJlbW92
ZWRJdGVtczsKIAogICAgIGlmICghY3VycmVudEl0ZW0pIHsKICAgICAgICAgLy8gV2Ugc2hvdWxk
IG9ubHkgZXZlciBoYXZlIG5vIGN1cnJlbnQgaXRlbSBpZiB3ZSBhbHNvIGhhdmUgbm8gY3VycmVu
dCBpdGVtIGluZGV4LgogICAgICAgICBBU1NFUlQoIW1fY3VycmVudEluZGV4KTsKIAogICAgICAg
ICAvLyBCdXQganVzdCBpbiBjYXNlIGl0IGRvZXMgaGFwcGVuIGluIHByYWN0aWNlIHdlIHNob3Vs
ZCBnZXQgYmFjayBpbnRvIGEgY29uc2lzdGVudCBzdGF0ZSBub3cuCi0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBkaWRSZW1vdmVJdGVtKG1f
ZW50cmllc1tpXSk7Ci0gICAgICAgICAgICByZW1vdmVkSXRlbXMuYXBwZW5kKFdURk1vdmUobV9l
bnRyaWVzW2ldKSk7Ci0gICAgICAgIH0KKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fZW50
cmllcykKKyAgICAgICAgICAgIGRpZFJlbW92ZUl0ZW0oZW50cnkpOwogCi0gICAgICAgIG1fZW50
cmllcy5jbGVhcigpOwogICAgICAgICBtX2N1cnJlbnRJbmRleCA9IHN0ZDo6bnVsbG9wdDsKLSAg
ICAgICAgbV9wYWdlLT5kaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QobnVsbHB0ciwgV1RGTW92ZShy
ZW1vdmVkSXRlbXMpKTsKKyAgICAgICAgbV9wYWdlLT5kaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3Qo
bnVsbHB0ciwgc3RkOjpleGNoYW5nZShtX2VudHJpZXMsIHsgfSkpOwogCiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0zODcsNiArMzc4LDcgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3Q6OmNs
ZWFyKCkKICAgICAgICAgICAgIGRpZFJlbW92ZUl0ZW0obV9lbnRyaWVzW2ldKTsKICAgICB9CiAK
KyAgICBWZWN0b3I8UmVmPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiByZW1vdmVkSXRlbXM7CiAg
ICAgcmVtb3ZlZEl0ZW1zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSAtIDEpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIGlmIChtX2N1cnJlbnRJ
bmRleCAmJiBpICE9ICptX2N1cnJlbnRJbmRleCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQb29sLmNwcAppbmRleCBmYTE3NDJjZjMyZGE5OTUyNzMyM2RmYzdjOGJmMGE3OTA2
MzA0MWZlLi42MWJkMzBhMzY0MTQ3M2M1ZGIyYzU3NDMwZTkzY2I3ZTI2NjNhZDg5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCkBAIC04NDksMTAgKzg0OSw5
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKFdlYlByb2Nl
c3NQcm94eSYgcHJvY2VzcywgV2Vic2l0ZURhCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmluamVj
dGVkQnVuZGxlUGF0aEV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmhhbmRsZSk7CiAgICAgfQog
Ci0gICAgZm9yIChhdXRvJiBwYXRoIDogbV9yZXNvbHZlZFBhdGhzLmFkZGl0aW9uYWxXZWJQcm9j
ZXNzU2FuZGJveEV4dGVuc2lvblBhdGhzKSB7Ci0gICAgICAgIGlmIChhdXRvIGhhbmRsZSA9ICBT
YW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVXaXRob3V0UmVzb2x2aW5nUGF0aChwYXRoLCBT
YW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25seSkpCi0gICAgICAgICAgICBwYXJhbWV0ZXJz
LmFkZGl0aW9uYWxTYW5kYm94RXh0ZW5zaW9uSGFuZGxlcy5hcHBlbmQoV1RGTW92ZSgqaGFuZGxl
KSk7Ci0gICAgfQorICAgIHBhcmFtZXRlcnMuYWRkaXRpb25hbFNhbmRib3hFeHRlbnNpb25IYW5k
bGVzID0gV1RGOjpjb21wYWN0TWFwKG1fcmVzb2x2ZWRQYXRocy5hZGRpdGlvbmFsV2ViUHJvY2Vz
c1NhbmRib3hFeHRlbnNpb25QYXRocywgW10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4g
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlV2l0aG91dFJlc29sdmluZ1BhdGgocGF0aCwg
U2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHkpOworICAgIH0pOwogCiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKICAgICBzZXRKYXZhU2NyaXB0Q29uZmlndXJhdGlvbkZpbGVFbmFibGVk
RnJvbURlZmF1bHRzKCk7CkBAIC0xODcwLDE0ICsxODY5LDkgQEAgdm9pZCBXZWJQcm9jZXNzUG9v
bDo6cmVtb3ZlUHJvY2Vzc0Zyb21PcmlnaW5DYWNoZVNldChXZWJQcm9jZXNzUHJveHkmIHByb2Nl
c3MpCiAgICAgTE9HKFByb2Nlc3NTd2FwcGluZywgIihQcm9jZXNzU3dhcHBpbmcpIFJlbW92aW5n
IHByb2Nlc3Mgd2l0aCBwaWQgJWkgZnJvbSB0aGUgb3JpZ2luIGNhY2hlIHNldCIsIHByb2Nlc3Mu
cHJvY2Vzc0lkZW50aWZpZXIoKSk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgdmVyeSBp
bmVmZmljaWVudCBhcyB0aGUgbnVtYmVyIG9mIHJlbWVtYmVyZWQgb3JpZ2lucyBhbmQgcHJvY2Vz
c2VzIGdyb3dzCi0gICAgVmVjdG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiByZWdpc3Ry
YWJsZURvbWFpbnNUb1JlbW92ZTsKLSAgICBmb3IgKGF1dG8gZW50cnkgOiBtX3N3YXBwZWRQcm9j
ZXNzZXNQZXJSZWdpc3RyYWJsZURvbWFpbikgewotICAgICAgICBpZiAoZW50cnkudmFsdWUgPT0g
JnByb2Nlc3MpCi0gICAgICAgICAgICByZWdpc3RyYWJsZURvbWFpbnNUb1JlbW92ZS5hcHBlbmQo
ZW50cnkua2V5KTsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIHJlZ2lzdHJhYmxlRG9tYWluIDog
cmVnaXN0cmFibGVEb21haW5zVG9SZW1vdmUpCi0gICAgICAgIG1fc3dhcHBlZFByb2Nlc3Nlc1Bl
clJlZ2lzdHJhYmxlRG9tYWluLnJlbW92ZShyZWdpc3RyYWJsZURvbWFpbik7CisgICAgbV9zd2Fw
cGVkUHJvY2Vzc2VzUGVyUmVnaXN0cmFibGVEb21haW4ucmVtb3ZlSWYoWyZdKGF1dG8mIGVudHJ5
KSB7CisgICAgICAgIHJldHVybiBlbnRyeS52YWx1ZSA9PSAmcHJvY2VzczsKKyAgICB9KTsKIH0K
IAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0Zvck5hdmlnYXRpb24oV2ViUGFnZVByb3h5
JiBwYWdlLCBjb25zdCBBUEk6Ok5hdmlnYXRpb24mIG5hdmlnYXRpb24sIFJlZjxXZWJQcm9jZXNz
UHJveHk+JiYgc291cmNlUHJvY2VzcywgY29uc3QgVVJMJiBzb3VyY2VVUkwsIFByb2Nlc3NTd2Fw
UmVxdWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgV2ViUHJvY2Vz
c1Byb3h5OjpDYXB0aXZlUG9ydGFsTW9kZSBjYXB0aXZlUG9ydGFsTW9kZSwgY29uc3QgRnJhbWVJ
bmZvRGF0YSYgZnJhbWVJbmZvLCBSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJiBkYXRhU3RvcmUsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmPFdlYlByb2Nlc3NQcm94eT4mJiwgU3VzcGVuZGVkUGFn
ZVByb3h5KiwgY29uc3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAppbmRleCBiMTI4NjBkZjUxMGJjNGUz
ZGZiYjdlM2ZjOTIwYjVkMDQyYjg0MzIxLi4zNjhhMzk1ODdkYTMzZGU2NGMxYjg5ZDBlNjM4ZDM4
Yjg4ZDdhMTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5j
cHAKQEAgLTkzNiw4ICs5MzYsOSBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6cHJvY2Vzc0RpZFRl
cm1pbmF0ZU9yRmFpbGVkVG9MYXVuY2goUHJvY2Vzc1Rlcm1pbmF0aW9uUmVhcwogCiAgICAgLy8g
VGhlcmUgaXMgYSBuZXN0ZWQgdHJhbnNhY3Rpb24gaW4gV2ViUGFnZVByb3h5OjpyZXNldFN0YXRl
QWZ0ZXJQcm9jZXNzRXhpdGVkKCkgdGhhdCB3ZSBkb24ndCB3YW50IHRvIGNvbW1pdCBiZWZvcmUg
dGhlIGNsaWVudCBjYWxsIGJlbG93IChkaXNwYXRjaFByb2Nlc3NEaWRUZXJtaW5hdGUpLgogICAg
IFZlY3RvcjxQYWdlTG9hZFN0YXRlOjpUcmFuc2FjdGlvbj4gcGFnZUxvYWRTdGF0ZVRyYW5zYWN0
aW9uczsKKyAgICBwYWdlTG9hZFN0YXRlVHJhbnNhY3Rpb25zLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkocGFnZXMuc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIHBhZ2UgOiBwYWdlcykgewotICAgICAg
ICBwYWdlTG9hZFN0YXRlVHJhbnNhY3Rpb25zLmFwcGVuZChwYWdlLT5wYWdlTG9hZFN0YXRlKCku
dHJhbnNhY3Rpb24oKSk7CisgICAgICAgIHBhZ2VMb2FkU3RhdGVUcmFuc2FjdGlvbnMudW5jaGVj
a2VkQXBwZW5kKHBhZ2UtPnBhZ2VMb2FkU3RhdGUoKS50cmFuc2FjdGlvbigpKTsKICAgICAgICAg
cGFnZS0+cmVzZXRTdGF0ZUFmdGVyUHJvY2Vzc1Rlcm1pbmF0aW9uKHJlYXNvbik7CiAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRl
RGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhU3RvcmUuY3BwCmluZGV4IGIzNmQ5YTc0YjlhMTc1YTA4MTZiN2EyZTE0ZjEzOWRiNWVm
NTZlNmQuLmRmYTdiMmE0Yzc1OTk5MmJiYzI1YmE2YWI5ZWNiYjBiMjgyYzQ0NzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRh
U3RvcmUuY3BwCkBAIC00MzEsOCArNDMxLDEwIEBAIHByaXZhdGU6CiAgICAgaWYgKGRhdGFUeXBl
cy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSkpIHsKICAgICAgICAgbV9xdWV1
ZS0+ZGlzcGF0Y2goW21lZGlhQ2FjaGVEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24tPm1lZGlh
Q2FjaGVEaXJlY3RvcnkoKS5pc29sYXRlZENvcHkoKSwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7CiAg
ICAgICAgICAgICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsKLSAgICAgICAgICAgIGZvciAoYXV0
byYgb3JpZ2luIDogV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6b3JpZ2luc0luTWVkaWFDYWNo
ZShtZWRpYUNhY2hlRGlyZWN0b3J5KSkKLSAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRy
aWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6
RGlza0NhY2hlLCAwIH0pOworICAgICAgICAgICAgYXV0byBvcmlnaW5zID0gV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudDo6b3JpZ2luc0luTWVkaWFDYWNoZShtZWRpYUNhY2hlRGlyZWN0b3J5KTsK
KyAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMgPSBXVEY6Om1hcChvcmlnaW5zLCBbXShh
dXRvJiBvcmlnaW4pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGE6OkVudHJ5
IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSwgMCB9OworICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFdlYnNpdGVEYXRhKFdURk1v
dmUod2Vic2l0ZURhdGEpKTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtNDY5LDggKzQ3MSw5IEBA
IHByaXZhdGU6CiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRl
dmljZUlkSGFzaFNhbHQpKSB7CiAgICAgICAgIG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UtPmdl
dERldmljZUlkSGFzaFNhbHRPcmlnaW5zKFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1dG8mJiBvcmln
aW5zKSB7CiAgICAgICAgICAgICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsKLSAgICAgICAgICAg
IHdoaWxlICghb3JpZ2lucy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgd2Vic2l0ZURhdGEu
ZW50cmllcy5hcHBlbmQoV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2lucy50YWtlQW55KCksIFdl
YnNpdGVEYXRhVHlwZTo6RGV2aWNlSWRIYXNoU2FsdCwgMCB9KTsKKyAgICAgICAgICAgIHdlYnNp
dGVEYXRhLmVudHJpZXMgPSBXVEY6Om1hcChvcmlnaW5zLCBbXShhdXRvJiBvcmlnaW4pIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRl
RGF0YVR5cGU6OkRldmljZUlkSGFzaFNhbHQsIDAgfTsKKyAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRXZWJzaXRlRGF0YShXVEZNb3ZlKHdlYnNpdGVE
YXRhKSk7CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTQ3OSwxMCArNDgyLDExIEBAIHByaXZhdGU6
CiAgICAgICAgIG1fcXVldWUtPmRpc3BhdGNoKFtmZXRjaE9wdGlvbnMsIGFwcGxpY2F0aW9uQ2Fj
aGVEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24tPmFwcGxpY2F0aW9uQ2FjaGVEaXJlY3Rvcnko
KS5pc29sYXRlZENvcHkoKSwgYXBwbGljYXRpb25DYWNoZUZsYXRGaWxlU3ViZGlyZWN0b3J5TmFt
ZSA9IG1fY29uZmlndXJhdGlvbi0+YXBwbGljYXRpb25DYWNoZUZsYXRGaWxlU3ViZGlyZWN0b3J5
TmFtZSgpLmlzb2xhdGVkQ29weSgpLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKICAgICAgICAgICAg
IGF1dG8gc3RvcmFnZSA9IFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjcmVhdGUo
YXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSwgYXBwbGljYXRpb25DYWNoZUZsYXRGaWxlU3ViZGly
ZWN0b3J5TmFtZSk7CiAgICAgICAgICAgICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsKLSAgICAg
ICAgICAgIGZvciAoYXV0byYgb3JpZ2luIDogc3RvcmFnZS0+b3JpZ2luc1dpdGhDYWNoZSgpKSB7
CisgICAgICAgICAgICBhdXRvIG9yaWdpbnMgPSBzdG9yYWdlLT5vcmlnaW5zV2l0aENhY2hlKCk7
CisgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzID0gV1RGOjptYXAob3JpZ2lucywgWyZd
KGF1dG8mIG9yaWdpbikgewogICAgICAgICAgICAgICAgIHVpbnQ2NF90IHNpemUgPSBmZXRjaE9w
dGlvbnMuY29udGFpbnMoV2Vic2l0ZURhdGFGZXRjaE9wdGlvbjo6Q29tcHV0ZVNpemVzKSA/IHN0
b3JhZ2UtPmRpc2tVc2FnZUZvck9yaWdpbihvcmlnaW4pIDogMDsKLSAgICAgICAgICAgICAgICB3
ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdl
YnNpdGVEYXRhVHlwZTo6T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGUsIHNpemUgfSk7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9y
aWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZSwgc2l6ZSB9
OworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFdl
YnNpdGVEYXRhKFdURk1vdmUod2Vic2l0ZURhdGEpKTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAt
NDkwLDggKzQ5NCw5IEBAIHByaXZhdGU6CiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJz
aXRlRGF0YVR5cGU6OldlYlNRTERhdGFiYXNlcykgJiYgaXNQZXJzaXN0ZW50KCkpIHsKICAgICAg
ICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3dlYlNRTERhdGFiYXNlRGlyZWN0b3J5ID0gbV9jb25maWd1
cmF0aW9uLT53ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSgpLmlzb2xhdGVkQ29weSgpLCBjYWxsYmFj
a0FnZ3JlZ2F0b3JdKCkgewogICAgICAgICAgICAgV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGE7Ci0g
ICAgICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6
dHJhY2tlcldpdGhEYXRhYmFzZVBhdGgod2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkpLT5vcmlnaW5z
KCkpCi0gICAgICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmQoV2Vic2l0ZURh
dGE6OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6OldlYlNRTERhdGFiYXNlcywgMCB9
KTsKKyAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMgPSBXZWJDb3JlOjpEYXRhYmFzZVRy
YWNrZXI6OnRyYWNrZXJXaXRoRGF0YWJhc2VQYXRoKHdlYlNRTERhdGFiYXNlRGlyZWN0b3J5KS0+
b3JpZ2lucygpLm1hcChbXShhdXRvJiBvcmlnaW4pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
V2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6OldlYlNRTERhdGFi
YXNlcywgMCB9OworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0
b3ItPmFkZFdlYnNpdGVEYXRhKFdURk1vdmUod2Vic2l0ZURhdGEpKTsKICAgICAgICAgfSk7CiAg
ICAgfQpAQCAtNDk5LDggKzUwNCw5IEBAIHByaXZhdGU6CiAgICAgaWYgKGRhdGFUeXBlcy5jb250
YWlucyhXZWJzaXRlRGF0YVR5cGU6Ok1lZGlhS2V5cykgJiYgaXNQZXJzaXN0ZW50KCkpIHsKICAg
ICAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW21lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkgPSBtX2Nv
bmZpZ3VyYXRpb24tPm1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoKS5pc29sYXRlZENvcHkoKSwg
Y2FsbGJhY2tBZ2dyZWdhdG9yXSB7CiAgICAgICAgICAgICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0
YTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgb3JpZ2luIDogbWVkaWFLZXlPcmlnaW5zKG1lZGlh
S2V5c1N0b3JhZ2VEaXJlY3RvcnkpKQotICAgICAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJp
ZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpN
ZWRpYUtleXMsIDAgfSk7CisgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzID0gbWVkaWFL
ZXlPcmlnaW5zKG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkpLm1hcChbXShhdXRvJiBvcmlnaW4p
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLCBX
ZWJzaXRlRGF0YVR5cGU6Ok1lZGlhS2V5cywgMCB9OworICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFdlYnNpdGVEYXRhKFdURk1vdmUod2Vic2l0ZURh
dGEpKTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtNjY3LDggKzY3Myw5IEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlw
ZXMsIGNvbnN0IFZlCiAgICAgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gb3Jp
Z2luczsKIAogICAgIGZvciAoY29uc3QgYXV0byYgZGF0YVJlY29yZCA6IGRhdGFSZWNvcmRzKSB7
CisgICAgICAgIG9yaWdpbnMucmVzZXJ2ZUNhcGFjaXR5KG9yaWdpbnMuc2l6ZSgpICsgZGF0YVJl
Y29yZC5vcmlnaW5zLnNpemUoKSk7CiAgICAgICAgIGZvciAoYXV0byYgb3JpZ2luIDogZGF0YVJl
Y29yZC5vcmlnaW5zKQotICAgICAgICAgICAgb3JpZ2lucy5hcHBlbmQob3JpZ2luKTsKKyAgICAg
ICAgICAgIG9yaWdpbnMudW5jaGVja2VkQXBwZW5kKG9yaWdpbik7CiAgICAgfQogCiAgICAgYXV0
byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBSZW1vdmFsQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUo
KnRoaXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTcwNywxMyArNzE0LDE2IEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFU
eXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZlCiAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBIU1RT
Q2FjaGVIb3N0TmFtZXM7CiAgICAgICAgICAgICBWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4+IHJlZ2lzdHJhYmxlRG9tYWluczsKICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYg
ZGF0YVJlY29yZCA6IGRhdGFSZWNvcmRzKSB7CisgICAgICAgICAgICAgICAgY29va2llSG9zdE5h
bWVzLnJlc2VydmVDYXBhY2l0eShjb29raWVIb3N0TmFtZXMuc2l6ZSgpICsgZGF0YVJlY29yZC5j
b29raWVIb3N0TmFtZXMuc2l6ZSgpKTsKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGhvc3RO
YW1lIDogZGF0YVJlY29yZC5jb29raWVIb3N0TmFtZXMpCi0gICAgICAgICAgICAgICAgICAgIGNv
b2tpZUhvc3ROYW1lcy5hcHBlbmQoaG9zdE5hbWUpOworICAgICAgICAgICAgICAgICAgICBjb29r
aWVIb3N0TmFtZXMudW5jaGVja2VkQXBwZW5kKGhvc3ROYW1lKTsKKyAgICAgICAgICAgICAgICBI
U1RTQ2FjaGVIb3N0TmFtZXMucmVzZXJ2ZUNhcGFjaXR5KEhTVFNDYWNoZUhvc3ROYW1lcy5zaXpl
KCkgKyBkYXRhUmVjb3JkLkhTVFNDYWNoZUhvc3ROYW1lcy5zaXplKCkpOwogICAgICAgICAgICAg
ICAgIGZvciAoYXV0byYgaG9zdE5hbWUgOiBkYXRhUmVjb3JkLkhTVFNDYWNoZUhvc3ROYW1lcykK
LSAgICAgICAgICAgICAgICAgICAgSFNUU0NhY2hlSG9zdE5hbWVzLmFwcGVuZChob3N0TmFtZSk7
CisgICAgICAgICAgICAgICAgICAgIEhTVFNDYWNoZUhvc3ROYW1lcy51bmNoZWNrZWRBcHBlbmQo
aG9zdE5hbWUpOwogI2lmIEVOQUJMRShJTlRFTExJR0VOVF9UUkFDS0lOR19QUkVWRU5USU9OKQor
ICAgICAgICAgICAgICAgIHJlZ2lzdHJhYmxlRG9tYWlucy5yZXNlcnZlQ2FwYWNpdHkocmVnaXN0
cmFibGVEb21haW5zLnNpemUoKSArIGRhdGFSZWNvcmQucmVzb3VyY2VMb2FkU3RhdGlzdGljc1Jl
Z2lzdHJhYmxlRG9tYWlucy5zaXplKCkpOwogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgcmVn
aXN0cmFibGVEb21haW4gOiBkYXRhUmVjb3JkLnJlc291cmNlTG9hZFN0YXRpc3RpY3NSZWdpc3Ry
YWJsZURvbWFpbnMpCi0gICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhYmxlRG9tYWlucy5hcHBl
bmQocmVnaXN0cmFibGVEb21haW4pOworICAgICAgICAgICAgICAgICAgICByZWdpc3RyYWJsZURv
bWFpbnMudW5jaGVja2VkQXBwZW5kKHJlZ2lzdHJhYmxlRG9tYWluKTsKICNlbmRpZgogICAgICAg
ICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvVGV4dENo
ZWNrZXJJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvVGV4dENoZWNrZXJJT1Mu
bW0KaW5kZXggZmEzYmM1MGIyNGZhZjJlZTVmZWU3NDZkMmJlYzgwNGFhNGFmYjcyYy4uODU3NTlj
MWE0MWQ0MjI0YTdmZGZhYmQ5OTE1MWI2MDY4OWMwODA5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1RleHRDaGVja2VySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbQpAQCAtMzQsNiArMzQsNyBAQAogI2ltcG9y
dCA8d3RmL0hhc2hNYXAuaD4KICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2ltcG9y
dCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAj
aW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAt
MjQwLDEyICsyNDEsMTMgQEAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6
OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFNwZWxsRG9jdW1lbnRUYWcgc3AKICAgICAgICAgICAgICAg
ICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAgICAgICAgIHJlc3VsdC50eXBl
ID0gVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmc7CiAgICAgICAgICAgICAgICAgcmVzdWx0LnJh
bmdlID0gcmVzdWx0UmFuZ2U7Ci0gICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0
KTsKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAg
ICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZUdyYW1t
YXIgJiYgY2hlY2tpbmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKSkg
ewogICAgICAgICAgICAgICAgIFRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAg
ICAgICAgTlNBcnJheSAqZGV0YWlscyA9IFtpbmNvbWluZ1Jlc3VsdCBncmFtbWFyRGV0YWlsc107
CiAgICAgICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFy
OwogICAgICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJhbmdlOworICAgICAgICAg
ICAgICAgIHJlc3VsdC5kZXRhaWxzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGV0YWlscy5jb3Vu
dCk7CiAgICAgICAgICAgICAgICAgZm9yIChOU0RpY3Rpb25hcnkgKmluY29taW5nRGV0YWlsIGlu
IGRldGFpbHMpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGluY29taW5nRGV0YWlsKTsK
ICAgICAgICAgICAgICAgICAgICAgR3JhbW1hckRldGFpbCBkZXRhaWw7CkBAIC0yNjAsMTIgKzI2
MiwxMCBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0
T2ZQYXJhZ3JhcGgoU3BlbGxEb2N1bWVudFRhZyBzcAogICAgICAgICAgICAgICAgICAgICBkZXRh
aWwucmFuZ2UgPSBkZXRhaWxOU1JhbmdlOwogICAgICAgICAgICAgICAgICAgICBkZXRhaWwudXNl
ckRlc2NyaXB0aW9uID0gW2luY29taW5nRGV0YWlsIG9iamVjdEZvcktleTpAIk5TR3JhbW1hclVz
ZXJEZXNjcmlwdGlvbiJdOwogICAgICAgICAgICAgICAgICAgICBOU0FycmF5ICpndWVzc2VzID0g
W2luY29taW5nRGV0YWlsIG9iamVjdEZvcktleTpAIk5TR3JhbW1hckNvcnJlY3Rpb25zIl07Ci0g
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBmb3IgKE5TU3RyaW5nICpn
dWVzcyBpbiBndWVzc2VzKQotICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsLmd1ZXNzZXMu
YXBwZW5kKGd1ZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmRldGFpbHMuYXBwZW5k
KGRldGFpbCk7CisgICAgICAgICAgICAgICAgICAgIGRldGFpbC5ndWVzc2VzID0gbWFrZVZlY3Rv
cjxTdHJpbmc+KGd1ZXNzZXMpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuZGV0YWlscy51
bmNoZWNrZWRBcHBlbmQoZGV0YWlsKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVu
ZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFz
c2lzdGFudC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0FjdGlvblNoZWV0QXNz
aXN0YW50Lm1tCmluZGV4IGM5YWUxYTY2Nzc3MWIyNjEwOTU4NTRlYWU1OWUyODVhYjc1MmY2N2Iu
LjQ1ZGQyZTEzNGM0ZDg3OGY2NWIxNmY5ZGY0NGQ2MTQwMTM1OWZiYjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0YW50Lm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0YW50Lm1tCkBA
IC0yMDcsMTIgKzIwNywxMSBAQCAtIChDR1JlY3QpcHJlc2VudGF0aW9uUmVjdEZvckVsZW1lbnRV
c2luZ0Nsb3Nlc3RJbmRpY2F0ZWRSZWN0CiAKICAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHRvdWNo
TG9jYXRpb24gPSBfcG9zaXRpb25JbmZvcm1hdGlvbi0+cmVxdWVzdC5wb2ludDsKICAgICBXZWJD
b3JlOjpGbG9hdFBvaW50IGxpbmtFbGVtZW50TG9jYXRpb24gPSBpbmRpY2F0b3IudGV4dEJvdW5k
aW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcy5sb2NhdGlvbigpOwotICAgIFZlY3RvcjxXZWJD
b3JlOjpGbG9hdFJlY3Q+IGluZGljYXRlZFJlY3RzOwotICAgIGZvciAoYXV0byByZWN0IDogaW5k
aWNhdG9yLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMpIHsKKyAgICBhdXRvIGlu
ZGljYXRlZFJlY3RzID0gaW5kaWNhdG9yLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0
ZXMubWFwKFsmXShhdXRvIHJlY3QpIHsKICAgICAgICAgcmVjdC5pbmZsYXRlKDIpOwogICAgICAg
ICByZWN0Lm1vdmVCeShsaW5rRWxlbWVudExvY2F0aW9uKTsKLSAgICAgICAgaW5kaWNhdGVkUmVj
dHMuYXBwZW5kKHJlY3QpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIHJlY3Q7CisgICAgfSk7CiAK
ICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhdGggOiBXZWJDb3JlOjpQYXRoVXRpbGl0aWVzOjpwYXRo
c1dpdGhTaHJpbmtXcmFwcGVkUmVjdHMoaW5kaWNhdGVkUmVjdHMsIDApKSB7CiAgICAgICAgIGF1
dG8gYm91bmRpbmdSZWN0ID0gcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0KaW5kZXggMTZkNjgzOGU1NDhlMDQz
MmZiZDE4ZjhkNGQyYWRlMWMyYzEwOGY2ZS4uZWNlMmUzZTI0NTMxNWVlNzFhZDk3OTdmYTZjYzgw
YjQyOTMzMGQxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1RleHRD
aGVja2VyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tl
ck1hYy5tbQpAQCAtMzQ0LDEyICszNDQsMTMgQEAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4g
VGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFNwZWxsRG9jdW1lbnRUYWcgc3AKICAg
ICAgICAgICAgIFRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICByZXN1bHQu
dHlwZSA9IFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nOwogICAgICAgICAgICAgcmVzdWx0LnJh
bmdlID0gcmVzdWx0UmFuZ2U7Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOwor
ICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgfSBl
bHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZUdyYW1tYXIgJiYgY2hlY2tp
bmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKSkgewogICAgICAgICAg
ICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgIE5TQXJyYXkgKmRldGFp
bHMgPSBbaW5jb21pbmdSZXN1bHQgZ3JhbW1hckRldGFpbHNdOwogICAgICAgICAgICAgcmVzdWx0
LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyOwogICAgICAgICAgICAgcmVzdWx0LnJh
bmdlID0gcmVzdWx0UmFuZ2U7CisgICAgICAgICAgICByZXN1bHQuZGV0YWlscy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KGRldGFpbHMuY291bnQpOwogICAgICAgICAgICAgZm9yIChOU0RpY3Rpb25h
cnkgKmluY29taW5nRGV0YWlsIGluIGRldGFpbHMpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQo
aW5jb21pbmdEZXRhaWwpOwogICAgICAgICAgICAgICAgIEdyYW1tYXJEZXRhaWwgZGV0YWlsOwpA
QCAtMzYxLDkgKzM2Miw4IEBAIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2Vy
OjpjaGVja1RleHRPZlBhcmFncmFwaChTcGVsbERvY3VtZW50VGFnIHNwCiAgICAgICAgICAgICAg
ICAgZGV0YWlsLnJhbmdlID0gZGV0YWlsTlNSYW5nZTsKICAgICAgICAgICAgICAgICBkZXRhaWwu
dXNlckRlc2NyaXB0aW9uID0gW2luY29taW5nRGV0YWlsIG9iamVjdEZvcktleTpOU0dyYW1tYXJV
c2VyRGVzY3JpcHRpb25dOwogICAgICAgICAgICAgICAgIE5TQXJyYXkgKmd1ZXNzZXMgPSBbaW5j
b21pbmdEZXRhaWwgb2JqZWN0Rm9yS2V5Ok5TR3JhbW1hckNvcnJlY3Rpb25zXTsKLSAgICAgICAg
ICAgICAgICBmb3IgKE5TU3RyaW5nICpndWVzcyBpbiBndWVzc2VzKQotICAgICAgICAgICAgICAg
ICAgICBkZXRhaWwuZ3Vlc3Nlcy5hcHBlbmQoU3RyaW5nKGd1ZXNzKSk7Ci0gICAgICAgICAgICAg
ICAgcmVzdWx0LmRldGFpbHMuYXBwZW5kKGRldGFpbCk7CisgICAgICAgICAgICAgICAgZGV0YWls
Lmd1ZXNzZXMgPSBtYWtlVmVjdG9yPFN0cmluZz4oZ3Vlc3Nlcyk7CisgICAgICAgICAgICAgICAg
cmVzdWx0LmRldGFpbHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZGV0YWlsKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOwogICAgICAgICB9IGVs
c2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlTGluayAmJiBjaGVja2luZ1R5
cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkxpbmspKSB7CkBAIC0zNzEsMzEgKzM3MSwz
MSBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQ
YXJhZ3JhcGgoU3BlbGxEb2N1bWVudFRhZyBzcAogICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBU
ZXh0Q2hlY2tpbmdUeXBlOjpMaW5rOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0
UmFuZ2U7CiAgICAgICAgICAgICByZXN1bHQucmVwbGFjZW1lbnQgPSBbW2luY29taW5nUmVzdWx0
IFVSTF0gYWJzb2x1dGVTdHJpbmddOwotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0
KTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAg
IH0gZWxzZSBpZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVRdW90ZSAmJiBjaGVj
a2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlF1b3RlKSkgewogICAgICAgICAg
ICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgIHJlc3VsdC50eXBlID0g
VGV4dENoZWNraW5nVHlwZTo6UXVvdGU7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1
bHRSYW5nZTsKICAgICAgICAgICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IFtpbmNvbWluZ1Jlc3Vs
dCByZXBsYWNlbWVudFN0cmluZ107Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQp
OworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAg
fSBlbHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZURhc2ggJiYgY2hlY2tp
bmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpEYXNoKSkgewogICAgICAgICAgICAg
VGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgIHJlc3VsdC50eXBlID0gVGV4
dENoZWNraW5nVHlwZTo6RGFzaDsKICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJh
bmdlOwogICAgICAgICAgICAgcmVzdWx0LnJlcGxhY2VtZW50ID0gW2luY29taW5nUmVzdWx0IHJl
cGxhY2VtZW50U3RyaW5nXTsKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7Cisg
ICAgICAgICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICB9IGVs
c2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlUmVwbGFjZW1lbnQgJiYgY2hl
Y2tpbmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCkpIHsKICAg
ICAgICAgICAgIFRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICByZXN1bHQu
dHlwZSA9IFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50OwogICAgICAgICAgICAgcmVzdWx0
LnJhbmdlID0gcmVzdWx0UmFuZ2U7CiAgICAgICAgICAgICByZXN1bHQucmVwbGFjZW1lbnQgPSBb
aW5jb21pbmdSZXN1bHQgcmVwbGFjZW1lbnRTdHJpbmddOwotICAgICAgICAgICAgcmVzdWx0cy5h
cHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0
KSk7CiAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVD
b3JyZWN0aW9uICYmIGNoZWNraW5nVHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6Q29y
cmVjdGlvbikpIHsKICAgICAgICAgICAgIFRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAg
ICAgICAgICByZXN1bHQudHlwZSA9IFRleHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rpb247CiAgICAg
ICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5nZTsKICAgICAgICAgICAgIHJlc3VsdC5y
ZXBsYWNlbWVudCA9IFtpbmNvbWluZ1Jlc3VsdCByZXBsYWNlbWVudFN0cmluZ107Ci0gICAgICAg
ICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQo
V1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvci5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yLmNw
cAppbmRleCA3MzU3NmEyNDdjZTExNzUyNzU2NWZiMWQyNmI0Y2QwOWIyNDcyZTlmLi4xMjdhYzFl
NDU3NzE1YmY3ZGZiMGU5YzkzYTEwNDIwYjRmNWMzNTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yLmNw
cApAQCAtOTgsOSArOTgsOSBAQCB2b2lkIFdlYlBheW1lbnRDb29yZGluYXRvcjo6b3BlblBheW1l
bnRTZXR1cChjb25zdCBTdHJpbmcmIG1lcmNoYW50SWRlbnRpZmllciwgYwogCiBib29sIFdlYlBh
eW1lbnRDb29yZGluYXRvcjo6c2hvd1BheW1lbnRVSShjb25zdCBVUkwmIG9yaWdpbmF0aW5nVVJM
LCBjb25zdCBWZWN0b3I8VVJMPiYgbGlua0ljb25VUkxzLCBjb25zdCBXZWJDb3JlOjpBcHBsZVBh
eVNlc3Npb25QYXltZW50UmVxdWVzdCYgcGF5bWVudFJlcXVlc3QpCiB7Ci0gICAgVmVjdG9yPFN0
cmluZz4gbGlua0ljb25VUkxTdHJpbmdzOwotICAgIGZvciAoY29uc3QgYXV0byYgbGlua0ljb25V
UkwgOiBsaW5rSWNvblVSTHMpCi0gICAgICAgIGxpbmtJY29uVVJMU3RyaW5ncy5hcHBlbmQobGlu
a0ljb25VUkwuc3RyaW5nKCkpOworICAgIGF1dG8gbGlua0ljb25VUkxTdHJpbmdzID0gbGlua0lj
b25VUkxzLm1hcChbXShhdXRvJiBsaW5rSWNvblVSTCkgeworICAgICAgICByZXR1cm4gbGlua0lj
b25VUkwuc3RyaW5nKCk7CisgICAgfSk7CiAKICAgICBib29sIHJlc3VsdDsKICAgICBpZiAoIXNl
bmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTo6U2hvd1BheW1lbnRV
SShtX3dlYlBhZ2UuaWRlbnRpZmllcigpLCBtX3dlYlBhZ2Uud2ViUGFnZVByb3h5SWRlbnRpZmll
cigpLCBvcmlnaW5hdGluZ1VSTC5zdHJpbmcoKSwgbGlua0ljb25VUkxTdHJpbmdzLCBwYXltZW50
UmVxdWVzdCksIE1lc3NhZ2VzOjpXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTo6U2hvd1BheW1l
bnRVSTo6UmVwbHkocmVzdWx0KSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5LmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwCmlu
ZGV4IGIwZmU4MzU3MjIzYjMxMzNmYzRkYjJmYmFhZDhlNzM5ZjVlM2I5ZDYuLmY0NWNmYjQxOTEz
NmI3Y2YwOGUzYmZkNDk2YjJiNjk3YTNjOWVmZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9u
UHJveHkuY3BwCkBAIC04MDUsMTMgKzgwNSwxMiBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9u
UHJveHk6OnNldEZpbGVzRm9ySW5wdXRGaWxlVXBsb2FkKFdlYkNvcmU6OlBhZ2VJZGVudGlmaQog
ICAgIGF1dG8mIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQ+KCpjb3JlRWxlbWVudCk7CiAgICAgVmVjdG9yPFJlZjxXZWJDb3JlOjpGaWxlPj4gZmlsZU9i
amVjdHM7CiAgICAgaWYgKGlucHV0RWxlbWVudC5tdWx0aXBsZSgpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBmaWxlcyA9IGlucHV0RWxlbWVudC5maWxlcygpKSB7Ci0gICAgICAgICAgICBmb3IgKGF1
dG8mIGZpbGUgOiBmaWxlcy0+ZmlsZXMoKSkKLSAgICAgICAgICAgICAgICBmaWxlT2JqZWN0cy5h
cHBlbmQoZmlsZS5jb3B5UmVmKCkpOwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRvKiBmaWxl
cyA9IGlucHV0RWxlbWVudC5maWxlcygpKQorICAgICAgICAgICAgZmlsZU9iamVjdHMuYXBwZW5k
VmVjdG9yKGZpbGVzLT5maWxlcygpKTsKICAgICB9CisgICAgZmlsZU9iamVjdHMucmVzZXJ2ZUNh
cGFjaXR5KGZpbGVPYmplY3RzLnNpemUoKSArIGZpbGVuYW1lcy5zaXplKCkpOwogICAgIGZvciAo
Y29uc3QgYXV0byYgcGF0aCA6IGZpbGVuYW1lcykKLSAgICAgICAgZmlsZU9iamVjdHMuYXBwZW5k
KFdlYkNvcmU6OkZpbGU6OmNyZWF0ZSgmaW5wdXRFbGVtZW50LmRvY3VtZW50KCksIHBhdGgpKTsK
KyAgICAgICAgZmlsZU9iamVjdHMudW5jaGVja2VkQXBwZW5kKFdlYkNvcmU6OkZpbGU6OmNyZWF0
ZSgmaW5wdXRFbGVtZW50LmRvY3VtZW50KCksIHBhdGgpKTsKICAgICBpbnB1dEVsZW1lbnQuc2V0
RmlsZXMoV2ViQ29yZTo6RmlsZUxpc3Q6OmNyZWF0ZShXVEZNb3ZlKGZpbGVPYmplY3RzKSkpOwog
CiAgICAgY29tcGxldGlvbkhhbmRsZXIoc3RkOjpudWxsb3B0KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyLmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJN
YW5hZ2VyLmNwcAppbmRleCA3YzlkNDU2OWE0ZTUwYjA3MTNhNzdhOGI0YWMyNDBmYWU0NmRkZDFl
Li44MTNhZjI4NTk4M2NiODJjMzBmMjRlMjUzNzE1NWM3ZjBmM2I2MTI5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdl
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRp
YVBsYXllck1hbmFnZXIuY3BwCkBAIC0xNjAsOCArMTYwLDkgQEAgc3RkOjp1bmlxdWVfcHRyPE1l
ZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZT4gUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyOjpjcmVh
dGVSZW0KICAgICBwcm94eUNvbmZpZ3VyYXRpb24uaXNWaWRlbyA9IHBsYXllci0+aXNWaWRlb1Bs
YXllcigpOwogCiAjaWYgRU5BQkxFKEFWRl9DQVBUSU9OUykKLSAgICBmb3IgKGNvbnN0IGF1dG8m
IHRyYWNrIDogcGxheWVyLT5vdXRPZkJhbmRUcmFja1NvdXJjZXMoKSkKLSAgICAgICAgcHJveHlD
b25maWd1cmF0aW9uLm91dE9mQmFuZFRyYWNrRGF0YS5hcHBlbmQodHJhY2stPmRhdGEoKSk7Cisg
ICAgcHJveHlDb25maWd1cmF0aW9uLm91dE9mQmFuZFRyYWNrRGF0YSA9IHBsYXllci0+b3V0T2ZC
YW5kVHJhY2tTb3VyY2VzKCkubWFwKFtdKGF1dG8mIHRyYWNrKSB7CisgICAgICAgIHJldHVybiB0
cmFjay0+ZGF0YSgpOworICAgIH0pOwogI2VuZGlmCiAKICAgICBhdXRvIGRvY3VtZW50U2VjdXJp
dHlPcmlnaW4gPSBwbGF5ZXItPmRvY3VtZW50U2VjdXJpdHlPcmlnaW4oKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvU291cmNlQnVmZmVyUHJpdmF0ZVJl
bW90ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1NvdXJjZUJ1ZmZl
clByaXZhdGVSZW1vdGUuY3BwCmluZGV4IDk2NmZjOTNiNzdhZmFhM2U2MjA4ZDdhYmE1YWVkMmM3
YTk0Yzc0YjIuLjRlZjE2NDBhNDAxMDA2YTZiOGY2OWNjNTAxMTY0YThiZDE5MGViOTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvU291cmNlQnVmZmVyUHJp
dmF0ZVJlbW90ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9T
b3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlLmNwcApAQCAtMzM4LDE2ICszMzgsMTEgQEAgdm9pZCBT
b3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlOjp1cGRhdGVUcmFja0lkcyhWZWN0b3I8c3RkOjpwYWly
PEF0b21TdHJpbmcsIEF0b20KICAgICBpZiAoIW1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24pCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxzdGQ6OnBhaXI8VHJhY2tQcml2YXRlUmVtb3RlSWRl
bnRpZmllciwgVHJhY2tQcml2YXRlUmVtb3RlSWRlbnRpZmllcj4+IGlkZW50aWZpZXJQYWlyczsK
LQotICAgIGZvciAoYXV0byYgdHJhY2tJZFBhaXIgOiB0cmFja0lkUGFpcnMpIHsKKyAgICBhdXRv
IGlkZW50aWZpZXJQYWlycyA9IHRyYWNrSWRQYWlycy5tYXAoW3RoaXNdKGF1dG8mIHRyYWNrSWRQ
YWlyKSB7CiAgICAgICAgIEFTU0VSVChtX3ByZXZUcmFja0lkZW50aWZpZXJNYXAuY29udGFpbnMo
dHJhY2tJZFBhaXIuZmlyc3QpKTsKICAgICAgICAgQVNTRVJUKG1fdHJhY2tJZGVudGlmaWVyTWFw
LmNvbnRhaW5zKHRyYWNrSWRQYWlyLnNlY29uZCkpOwotCi0gICAgICAgIGF1dG8gb2xkSWRlbnRp
ZmllciA9IG1fcHJldlRyYWNrSWRlbnRpZmllck1hcC50YWtlKHRyYWNrSWRQYWlyLmZpcnN0KTsK
LSAgICAgICAgYXV0byBuZXdJZGVudGlmaWVyID0gbV90cmFja0lkZW50aWZpZXJNYXAuZ2V0KHRy
YWNrSWRQYWlyLnNlY29uZCk7Ci0gICAgICAgIGlkZW50aWZpZXJQYWlycy5hcHBlbmQoc3RkOjpt
YWtlX3BhaXIob2xkSWRlbnRpZmllciwgbmV3SWRlbnRpZmllcikpOwotICAgIH0KKyAgICAgICAg
cmV0dXJuIHN0ZDo6cGFpciB7IG1fcHJldlRyYWNrSWRlbnRpZmllck1hcC50YWtlKHRyYWNrSWRQ
YWlyLmZpcnN0KSwgbV90cmFja0lkZW50aWZpZXJNYXAuZ2V0KHRyYWNrSWRQYWlyLnNlY29uZCkg
fTsKKyAgICB9KTsKIAogICAgIG1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS5z
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVTb3VyY2VCdWZmZXJQcm94eTo6VXBkYXRlVHJhY2tJZHMoaWRl
bnRpZmllclBhaXJzKSwgbV9yZW1vdGVTb3VyY2VCdWZmZXJJZGVudGlmaWVyKTsKIH0KQEAgLTM4
MywyNyArMzc4LDMwIEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZTo6c291cmNlQnVm
ZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lCiAgICAgc2VnbWVudC5kdXJh
dGlvbiA9IHNlZ21lbnRJbmZvLmR1cmF0aW9uOwogCiAgICAgbV9wcmV2VHJhY2tJZGVudGlmaWVy
TWFwLnN3YXAobV90cmFja0lkZW50aWZpZXJNYXApOworICAgIHNlZ21lbnQuYXVkaW9UcmFja3Mu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzZWdtZW50SW5mby5hdWRpb1RyYWNrcy5zaXplKCkpOwog
ICAgIGZvciAoYXV0byYgYXVkaW9UcmFjayA6IHNlZ21lbnRJbmZvLmF1ZGlvVHJhY2tzKSB7CiAg
ICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudDo6
QXVkaW9UcmFja0luZm9ybWF0aW9uIGluZm87CiAgICAgICAgIGluZm8udHJhY2sgPSBtX21lZGlh
UGxheWVyUHJpdmF0ZS0+YXVkaW9UcmFja1ByaXZhdGVSZW1vdGUoYXVkaW9UcmFjay5pZGVudGlm
aWVyKTsKICAgICAgICAgaW5mby5kZXNjcmlwdGlvbiA9IFJlbW90ZU1lZGlhRGVzY3JpcHRpb246
OmNyZWF0ZShhdWRpb1RyYWNrLmRlc2NyaXB0aW9uKTsKLSAgICAgICAgc2VnbWVudC5hdWRpb1Ry
YWNrcy5hcHBlbmQoaW5mbyk7CisgICAgICAgIHNlZ21lbnQuYXVkaW9UcmFja3MudW5jaGVja2Vk
QXBwZW5kKGluZm8pOwogICAgICAgICBtX3RyYWNrSWRlbnRpZmllck1hcC5hZGQoaW5mby50cmFj
ay0+aWQoKSwgYXVkaW9UcmFjay5pZGVudGlmaWVyKTsKICAgICB9CiAKKyAgICBzZWdtZW50LnZp
ZGVvVHJhY2tzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2VnbWVudEluZm8udmlkZW9UcmFja3Mu
c2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIHZpZGVvVHJhY2sgOiBzZWdtZW50SW5mby52aWRlb1Ry
YWNrcykgewogICAgICAgICBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlv
blNlZ21lbnQ6OlZpZGVvVHJhY2tJbmZvcm1hdGlvbiBpbmZvOwogICAgICAgICBpbmZvLnRyYWNr
ID0gbV9tZWRpYVBsYXllclByaXZhdGUtPnZpZGVvVHJhY2tQcml2YXRlUmVtb3RlKHZpZGVvVHJh
Y2suaWRlbnRpZmllcik7CiAgICAgICAgIGluZm8uZGVzY3JpcHRpb24gPSBSZW1vdGVNZWRpYURl
c2NyaXB0aW9uOjpjcmVhdGUodmlkZW9UcmFjay5kZXNjcmlwdGlvbik7Ci0gICAgICAgIHNlZ21l
bnQudmlkZW9UcmFja3MuYXBwZW5kKGluZm8pOworICAgICAgICBzZWdtZW50LnZpZGVvVHJhY2tz
LnVuY2hlY2tlZEFwcGVuZChpbmZvKTsKICAgICAgICAgbV90cmFja0lkZW50aWZpZXJNYXAuYWRk
KGluZm8udHJhY2stPmlkKCksIHZpZGVvVHJhY2suaWRlbnRpZmllcik7CiAgICAgfQogCisgICAg
c2VnbWVudC50ZXh0VHJhY2tzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2VnbWVudEluZm8udGV4
dFRyYWNrcy5zaXplKCkpOwogICAgIGZvciAoYXV0byYgdGV4dFRyYWNrIDogc2VnbWVudEluZm8u
dGV4dFRyYWNrcykgewogICAgICAgICBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFs
aXphdGlvblNlZ21lbnQ6OlRleHRUcmFja0luZm9ybWF0aW9uIGluZm87CiAgICAgICAgIGluZm8u
dHJhY2sgPSBtX21lZGlhUGxheWVyUHJpdmF0ZS0+dGV4dFRyYWNrUHJpdmF0ZVJlbW90ZSh0ZXh0
VHJhY2suaWRlbnRpZmllcik7CiAgICAgICAgIGluZm8uZGVzY3JpcHRpb24gPSBSZW1vdGVNZWRp
YURlc2NyaXB0aW9uOjpjcmVhdGUodGV4dFRyYWNrLmRlc2NyaXB0aW9uKTsKLSAgICAgICAgc2Vn
bWVudC50ZXh0VHJhY2tzLmFwcGVuZChpbmZvKTsKKyAgICAgICAgc2VnbWVudC50ZXh0VHJhY2tz
LnVuY2hlY2tlZEFwcGVuZChpbmZvKTsKICAgICAgICAgbV90cmFja0lkZW50aWZpZXJNYXAuYWRk
KGluZm8udHJhY2stPmlkKCksIHRleHRUcmFjay5pZGVudGlmaWVyKTsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVj
cy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2Rl
Y3MuY3BwCmluZGV4IGQwNzBjMmI3OWRmNDBjYWNiNDE4ZjA2NzgyNjdlNGMzYjRhNTQ2MWMuLjFj
MjI3MzQzMjU0NWFiZjNjOTA2Yjg1ZGMxN2Q5Yjk5ZDRlMWY3YWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcApA
QCAtMzkyLDkgKzM5Miw5IEBAIExpYldlYlJUQ0NvZGVjczo6RW5jb2RlciogTGliV2ViUlRDQ29k
ZWNzOjpjcmVhdGVFbmNvZGVyKFR5cGUgdHlwZSwgY29uc3Qgc3RkOjptCiAgICAgZW5jb2Rlci0+
aWRlbnRpZmllciA9IFJUQ0VuY29kZXJJZGVudGlmaWVyOjpnZW5lcmF0ZVRocmVhZFNhZmUoKTsK
ICAgICBlbmNvZGVyLT5jb2RlY1R5cGUgPSB0b1dlYlJUQ0NvZGVjVHlwZSh0eXBlKTsKIAotICAg
IFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiBwYXJhbWV0ZXJzOwotICAgIGZvciAo
YXV0byYga2V5VmFsdWUgOiBmb3JtYXRQYXJhbWV0ZXJzKQotICAgICAgICBwYXJhbWV0ZXJzLmFw
cGVuZChzdGQ6Om1ha2VfcGFpcihTdHJpbmc6OmZyb21VVEY4KGtleVZhbHVlLmZpcnN0LmRhdGEo
KSwga2V5VmFsdWUuZmlyc3QubGVuZ3RoKCkpLCBTdHJpbmc6OmZyb21VVEY4KGtleVZhbHVlLnNl
Y29uZC5kYXRhKCksIGtleVZhbHVlLnNlY29uZC5sZW5ndGgoKSkpKTsKKyAgICBhdXRvIHBhcmFt
ZXRlcnMgPSBXVEY6Om1hcChmb3JtYXRQYXJhbWV0ZXJzLCBbXShhdXRvJiBlbnRyeSkgeworICAg
ICAgICByZXR1cm4gc3RkOjpwYWlyIHsgU3RyaW5nOjpmcm9tVVRGOChlbnRyeS5maXJzdC5kYXRh
KCksIGVudHJ5LmZpcnN0Lmxlbmd0aCgpKSwgU3RyaW5nOjpmcm9tVVRGOChlbnRyeS5zZWNvbmQu
ZGF0YSgpLCBlbnRyeS5zZWNvbmQubGVuZ3RoKCkpIH07CisgICAgfSk7CiAKICAgICBlbnN1cmVH
UFVQcm9jZXNzQ29ubmVjdGlvbkFuZERpc3BhdGNoVG9UaHJlYWQoW3RoaXMsIGVuY29kZXIgPSBX
VEZNb3ZlKGVuY29kZXIpLCB0eXBlLCBwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKV0o
KSBtdXRhYmxlIHsKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJs
YXkuY3BwCmluZGV4IGQ4NTQyYTJiMTBiMWIzZTE1MzYxNDE1NDExNWVmN2VjZWM0NGViODguLjZm
OGY3NDUzNTkyNDUzZTBlNjE4Njc2MTI0NGUwYjc3OTIyMWRlNzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVy
bGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAKQEAgLTE5NywxMSArMTk3LDEzIEBAIHByaXZhdGU6
CiAgICAgICAgIGF1dG8gd2tOYW1lcyA9IG1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5j
b3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKHRvQVBJKCZwYWdlT3ZlcmxheSksIHBhcmFt
ZXJpemVkTmFtZXMsIG1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5iYXNlLmNsaWVudElu
Zm8pOwogCiAgICAgICAgIHNpemVfdCBjb3VudCA9IFdLQXJyYXlHZXRTaXplKHdrTmFtZXMpOwor
ICAgICAgICBuYW1lcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNvdW50KTsKICAgICAgICAgZm9y
IChzaXplX3QgayA9IDA7IGsgPCBjb3VudDsgaysrKSB7CiAgICAgICAgICAgICBXS1R5cGVSZWYg
aXRlbSA9IFdLQXJyYXlHZXRJdGVtQXRJbmRleCh3a05hbWVzLCBrKTsKICAgICAgICAgICAgIGlm
IChXZWJLaXQ6OnRvSW1wbChpdGVtKS0+dHlwZSgpID09IEFQSTo6U3RyaW5nOjpBUElUeXBlKQot
ICAgICAgICAgICAgICAgIG5hbWVzLmFwcGVuZChXZWJLaXQ6OnRvV1RGU3RyaW5nKHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihpdGVtKSkpOworICAgICAgICAgICAgICAgIG5hbWVzLnVuY2hlY2tl
ZEFwcGVuZChXZWJLaXQ6OnRvV1RGU3RyaW5nKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihpdGVt
KSkpOwogICAgICAgICB9CisgICAgICAgIG5hbWVzLnNocmlua1RvRml0KCk7CiAKICAgICAgICAg
cmV0dXJuIG5hbWVzOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9TZXNzaW9uU3RhdGVDb252ZXJzaW9uLmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9TZXNzaW9uU3RhdGVDb252ZXJzaW9uLmNwcApp
bmRleCBjOGYyNDhhNjQ3NjU3NmEyOTJjNzVkNWZhYTY4ZjVhYzYzYTQ3NWM4Li41NjdkNDc1MWJl
ZTgzYTNiM2Y0ZjZlMGZhMjM3N2JkMDA2MzUwYTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvU2Vzc2lvblN0YXRlQ29udmVyc2lvbi5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1Nlc3Npb25TdGF0ZUNv
bnZlcnNpb24uY3BwCkBAIC05OSwxMCArOTksOSBAQCBzdGF0aWMgRnJhbWVTdGF0ZSB0b0ZyYW1l
U3RhdGUoY29uc3QgSGlzdG9yeUl0ZW0mIGhpc3RvcnlJdGVtKQogICAgIGZyYW1lU3RhdGUub2Jz
Y3VyZWRJbnNldHMgPSBoaXN0b3J5SXRlbS5vYnNjdXJlZEluc2V0cygpOwogI2VuZGlmCiAKLSAg
ICBmb3IgKGF1dG8mIGNoaWxkSGlzdG9yeUl0ZW0gOiBoaXN0b3J5SXRlbS5jaGlsZHJlbigpKSB7
Ci0gICAgICAgIEZyYW1lU3RhdGUgY2hpbGRGcmFtZVN0YXRlID0gdG9GcmFtZVN0YXRlKGNoaWxk
SGlzdG9yeUl0ZW0pOwotICAgICAgICBmcmFtZVN0YXRlLmNoaWxkcmVuLmFwcGVuZChXVEZNb3Zl
KGNoaWxkRnJhbWVTdGF0ZSkpOwotICAgIH0KKyAgICBmcmFtZVN0YXRlLmNoaWxkcmVuID0gaGlz
dG9yeUl0ZW0uY2hpbGRyZW4oKS5tYXAoW10oYXV0byYgY2hpbGRIaXN0b3J5SXRlbSkgeworICAg
ICAgICByZXR1cm4gdG9GcmFtZVN0YXRlKGNoaWxkSGlzdG9yeUl0ZW0pOworICAgIH0pOwogCiAg
ICAgcmV0dXJuIGZyYW1lU3RhdGU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRGV2aWNlT3Jp
ZW50YXRpb25VcGRhdGVQcm92aWRlci5jcHAKaW5kZXggZjlhZjlhYjkzZjdlMDEyODc3MzY1MGMx
ZDI0OTVhZGRlMzlmZDQzNS4uMWQxMWY0MjNjMTc4OGQ1OTdmZjI1NzhlZTYwZDljYjYxNmEwZGQz
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3Zp
ZGVyLmNwcApAQCAtODMsMTEgKzgzLDcgQEAgdm9pZCBXZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0
ZVByb3ZpZGVyOjpzdG9wVXBkYXRpbmdEZXZpY2VNb3Rpb24oV2ViQ29yZTo6TW90aW8KIAogdm9p
ZCBXZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyOjpkZXZpY2VPcmllbnRhdGlvbkNo
YW5nZWQoZG91YmxlIGFscGhhLCBkb3VibGUgYmV0YSwgZG91YmxlIGdhbW1hLCBkb3VibGUgY29t
cGFzc0hlYWRpbmcsIGRvdWJsZSBjb21wYXNzQWNjdXJhY3kpCiB7Ci0gICAgVmVjdG9yPFdlYWtQ
dHI8V2ViQ29yZTo6TW90aW9uTWFuYWdlckNsaWVudD4+IGNsaWVudHM7Ci0gICAgZm9yIChhdXRv
JiBjbGllbnQgOiBtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50cykKLSAgICAgICAgY2xpZW50cy5h
cHBlbmQoY2xpZW50KTsKLQotICAgIGZvciAoYXV0byYgY2xpZW50IDogY2xpZW50cykgeworICAg
IGZvciAoYXV0byYgY2xpZW50IDogY29weVRvVmVjdG9yT2Y8V2Vha1B0cjxXZWJDb3JlOjpNb3Rp
b25NYW5hZ2VyQ2xpZW50Pj4obV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudHMpKSB7CiAgICAgICAg
IGlmIChjbGllbnQpCiAgICAgICAgICAgICBjbGllbnQtPm9yaWVudGF0aW9uQ2hhbmdlZChhbHBo
YSwgYmV0YSwgZ2FtbWEsIGNvbXBhc3NIZWFkaW5nLCBjb21wYXNzQWNjdXJhY3kpOwogICAgIH0K
QEAgLTk1LDExICs5MSw3IEBAIHZvaWQgV2ViRGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRl
cjo6ZGV2aWNlT3JpZW50YXRpb25DaGFuZ2VkKGRvdWJsZSBhbHBoYSwKIAogdm9pZCBXZWJEZXZp
Y2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyOjpkZXZpY2VNb3Rpb25DaGFuZ2VkKGRvdWJsZSB4
QWNjZWxlcmF0aW9uLCBkb3VibGUgeUFjY2VsZXJhdGlvbiwgZG91YmxlIHpBY2NlbGVyYXRpb24s
IGRvdWJsZSB4QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwgZG91YmxlIHlBY2NlbGVyYXRp
b25JbmNsdWRpbmdHcmF2aXR5LCBkb3VibGUgekFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHks
IHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB4Um90YXRpb25SYXRlLCBzdGQ6Om9wdGlvbmFsPGRvdWJs
ZT4geVJvdGF0aW9uUmF0ZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHpSb3RhdGlvblJhdGUpCiB7
Ci0gICAgVmVjdG9yPFdlYWtQdHI8V2ViQ29yZTo6TW90aW9uTWFuYWdlckNsaWVudD4+IGNsaWVu
dHM7Ci0gICAgZm9yIChhdXRvJiBjbGllbnQgOiBtX2RldmljZU1vdGlvbkNsaWVudHMpCi0gICAg
ICAgIGNsaWVudHMuYXBwZW5kKGNsaWVudCk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBjbGllbnQg
OiBjbGllbnRzKSB7CisgICAgZm9yIChhdXRvJiBjbGllbnQgOiBjb3B5VG9WZWN0b3JPZjxXZWFr
UHRyPFdlYkNvcmU6Ok1vdGlvbk1hbmFnZXJDbGllbnQ+PihtX2RldmljZU1vdGlvbkNsaWVudHMp
KSB7CiAgICAgICAgIGlmIChjbGllbnQpCiAgICAgICAgICAgICBjbGllbnQtPm1vdGlvbkNoYW5n
ZWQoeEFjY2VsZXJhdGlvbiwgeUFjY2VsZXJhdGlvbiwgekFjY2VsZXJhdGlvbiwgeEFjY2VsZXJh
dGlvbkluY2x1ZGluZ0dyYXZpdHksIHlBY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5LCAgekFj
Y2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHksIHhSb3RhdGlvblJhdGUsIHlSb3RhdGlvblJhdGUs
IHpSb3RhdGlvblJhdGUpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmNw
cAppbmRleCBkZmRkYTE3Njk5MzYwMDQ0N2EwYzkzY2M4NDYwZjVlNjhiMmMyNDgxLi4zMThmN2Mz
ZDI5MzMyYzAyYWQyY2UzMGQ5MGU3Y2ZlNmY1NWMzMjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9h
cmRPdmVycmlkZXMuY3BwCkBAIC03MSwxOCArNzEsMTMgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkT3Zl
cnJpZGVzOjpyZW1vdmVPdmVycmlkZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25z
dAogCiBWZWN0b3I8U3RyaW5nPiBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpvdmVycmlkZGVuVHlw
ZXMoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiBy
ZXN1bHQ7Ci0KICAgICBhdXRvIGl0ID0gbV9vdmVycmlkZXNNYXAuZmluZChwYXN0ZWJvYXJkTmFt
ZSk7CiAgICAgaWYgKGl0ID09IG1fb3ZlcnJpZGVzTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgQVNTRVJUKGl0LT52YWx1ZSk7CiAK
LSAgICBmb3IgKFN0cmluZyYgdHlwZSA6IGl0LT52YWx1ZS0+a2V5cygpKQotICAgICAgICByZXN1
bHQuYXBwZW5kKHR5cGUpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gY29weVRv
VmVjdG9yKGl0LT52YWx1ZS0+a2V5cygpKTsKIH0KIAogc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQ
YXN0ZWJvYXJkSXRlbUluZm8+IFdlYlBhc3RlYm9hcmRPdmVycmlkZXM6Om92ZXJyaWRkZW5JbmZv
KGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViU3BlZWNoU3ludGhlc2lzQ2xpZW50LmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJTcGVlY2hTeW50aGVz
aXNDbGllbnQuY3BwCmluZGV4IGM0ZDBkY2MwM2Q1ZGE2YTA0ODNlZGY1NmQxZTQzOTUyN2JjOTVm
ODguLmM1N2U3ODA5YjJlZTE2NmRkNmY2ODhiZTIyYTg1OWM3ZGFkZGE4ZmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJTcGVlY2hTeW50aGVz
aXNDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJTcGVlY2hTeW50aGVzaXNDbGllbnQuY3BwCkBAIC00Miw5ICs0Miw5IEBAIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8V2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZT4+JiBXZWJT
cGVlY2hTeW50aGVzaXNDCiAgICAgVmVjdG9yPFdlYlNwZWVjaFN5bnRoZXNpc1ZvaWNlPiB2b2lj
ZUxpc3Q7CiAgICAgbV9wYWdlLnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNwZWVj
aFN5bnRoZXNpc1ZvaWNlTGlzdCgpLCB2b2ljZUxpc3QpOwogCi0gICAgbV92b2ljZXMuY2xlYXIo
KTsKLSAgICBmb3IgKGF1dG8mIHZvaWNlIDogdm9pY2VMaXN0KQotICAgICAgICBtX3ZvaWNlcy5h
cHBlbmQoV2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZTo6Y3JlYXRlKHZvaWNl
LnZvaWNlVVJJLCB2b2ljZS5uYW1lLCB2b2ljZS5sYW5nLCB2b2ljZS5sb2NhbFNlcnZpY2UsIHZv
aWNlLmRlZmF1bHRMYW5nKSk7CisgICAgbV92b2ljZXMgPSB2b2ljZUxpc3QubWFwKFtdKGF1dG8m
IHZvaWNlKSAtPiBSZWZQdHI8V2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZT4g
eworICAgICAgICByZXR1cm4gV2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZTo6
Y3JlYXRlKHZvaWNlLnZvaWNlVVJJLCB2b2ljZS5uYW1lLCB2b2ljZS5sYW5nLCB2b2ljZS5sb2Nh
bFNlcnZpY2UsIHZvaWNlLmRlZmF1bHRMYW5nKTsKKyAgICB9KTsKICAgICByZXR1cm4gbV92b2lj
ZXM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Zp
bmRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRD
b250cm9sbGVyLmNwcAppbmRleCBiNTEzNGQwZDJjNWQ3YzUyZjZmYWM5NjgwNDQxYWNjM2VlYmY2
NWZkLi4xZDY0M2I2YjQyODhkMDhlMDM4YzQ2MjVkMDU0OWRlNjhhZjJhYTc3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCkBA
IC0yNzIsMTAgKzI3Miw5IEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OmZpbmRTdHJpbmdNYXRjaGVz
KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBPcHRpb25TZXQ8RmluZE9wdGlvCiAgICAgYXV0byByZXN1
bHQgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPmZpbmRUZXh0TWF0Y2hlcyhzdHJpbmcsIGNvcmUo
b3B0aW9ucyksIG1heE1hdGNoQ291bnQpOwogICAgIG1fZmluZE1hdGNoZXMgPSBXVEZNb3ZlKHJl
c3VsdC5yYW5nZXMpOwogCi0gICAgVmVjdG9yPFZlY3RvcjxJbnRSZWN0Pj4gbWF0Y2hSZWN0czsK
LSAgICBmb3IgKGF1dG8mIHJhbmdlIDogbV9maW5kTWF0Y2hlcykKLSAgICAgICAgbWF0Y2hSZWN0
cy5hcHBlbmQoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cyhyYW5nZSkpOwotCisgICAg
YXV0byBtYXRjaFJlY3RzID0gbV9maW5kTWF0Y2hlcy5tYXAoW10oYXV0byYgcmFuZ2UpIHsKKyAg
ICAgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMocmFuZ2UpOworICAg
IH0pOwogICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaW5k
U3RyaW5nTWF0Y2hlcyhzdHJpbmcsIG1hdGNoUmVjdHMsIHJlc3VsdC5pbmRleEZvclNlbGVjdGlv
bikpOwogCiAgICAgaWYgKCFvcHRpb25zLmNvbnRhaW5zKEZpbmRPcHRpb25zOjpTaG93T3Zlcmxh
eSkgJiYgIW9wdGlvbnMuY29udGFpbnMoRmluZE9wdGlvbnM6OlNob3dGaW5kSW5kaWNhdG9yKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4
dFJhbmdlQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwCmluZGV4IDc0ODAyYzQ3ODc1NWZmZTYxYjkz
MDkyY2JjYTZkMGFjN2NjYzljODMuLjJjOWI0NTdkYmNhMDdhNmViMTI2ODlhNzhmMGRkNWIyOTE0
YTIxY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZv
dW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcApAQCAtMjQ4LDExICsyNDgs
MTAgQEAgdm9pZCBXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmRyYXdSZWN0KFdlYkNvcmU6
OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6R3JhcGgKICAgICAgICAgYXV0byB0ZXh0Qm91bmRpbmdS
ZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gbV90ZXh0SW5kaWNhdG9yLT50ZXh0Qm91bmRpbmdS
ZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCk7CiAgICAgICAgIGF1dG8gdGV4dFJlY3RzSW5Cb3Vu
ZGluZ1JlY3RDb29yZGluYXRlcyA9IG1fdGV4dEluZGljYXRvci0+dGV4dFJlY3RzSW5Cb3VuZGlu
Z1JlY3RDb29yZGluYXRlcygpOwogCi0gICAgICAgIFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+
IHRleHRSZWN0c0luUm9vdFZpZXdDb29yZGluYXRlczsKLSAgICAgICAgZm9yIChhdXRvIHJlY3Qg
OiB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKSB7CisgICAgICAgIGF1dG8gdGV4
dFJlY3RzSW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29y
ZGluYXRlcy5tYXAoWyZdKGF1dG8gcmVjdCkgewogICAgICAgICAgICAgcmVjdC5tb3ZlQnkodGV4
dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcy5sb2NhdGlvbigpKTsKLSAgICAgICAg
ICAgIHRleHRSZWN0c0luUm9vdFZpZXdDb29yZGluYXRlcy5hcHBlbmQocmVjdCk7Ci0gICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiByZWN0OworICAgICAgICB9KTsKIAogICAgICAgICBhdXRv
IHBhdGhzID0gV2ViQ29yZTo6UGF0aFV0aWxpdGllczo6cGF0aHNXaXRoU2hyaW5rV3JhcHBlZFJl
Y3RzKHRleHRSZWN0c0luUm9vdFZpZXdDb29yZGluYXRlcywgaW5kaWNhdG9yUmFkaXVzKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCAxMWFh
NjQ0ZmM1MDMzODg3MmI4MDlmNDBhZGNiMzFmNTI1NTY3YjZkLi4yZDYyOWYzNWEyM2JlODAyZjY2
YTgxNWFkZmI4ZDVjMTgzMjRlODU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcApAQCAtNzgzMywxNCArNzgzMywxNiBAQCBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkmIFdlYlBhZ2U6OmVuc3VyZVJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgp
CiBWZWN0b3I8UmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiBXZWJQYWdlOjpjb25zdW1lU2FuZGJv
eEV4dGVuc2lvbnMoVmVjdG9yPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4mJiBzYW5kYm94RXh0
ZW5zaW9ucykKIHsKICAgICBWZWN0b3I8UmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiBkcmFnU2Fu
ZGJveEV4dGVuc2lvbnM7CisgICAgZHJhZ1NhbmRib3hFeHRlbnNpb25zLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoc2FuZGJveEV4dGVuc2lvbnMuc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIHNhbmRi
b3hFeHRlbnNpb24gOiBzYW5kYm94RXh0ZW5zaW9ucykgewogICAgICAgICBhdXRvIGV4dGVuc2lv
biA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZShXVEZNb3ZlKHNhbmRib3hFeHRlbnNpb24pKTsK
ICAgICAgICAgaWYgKCFleHRlbnNpb24pCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
Ym9vbCBvayA9IGV4dGVuc2lvbi0+Y29uc3VtZSgpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKG9r
LCBvayk7Ci0gICAgICAgIGRyYWdTYW5kYm94RXh0ZW5zaW9ucy5hcHBlbmQoV1RGTW92ZShleHRl
bnNpb24pKTsKKyAgICAgICAgZHJhZ1NhbmRib3hFeHRlbnNpb25zLnVuY2hlY2tlZEFwcGVuZChX
VEZNb3ZlKGV4dGVuc2lvbikpOwogICAgIH0KKyAgICBkcmFnU2FuZGJveEV4dGVuc2lvbnMuc2hy
aW5rVG9GaXQoKTsKICAgICByZXR1cm4gZHJhZ1NhbmRib3hFeHRlbnNpb25zOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5t
bSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCmlu
ZGV4IDlkYzAwZGEyNzcwYzE5Mzk4OTFhMzAwZjIzMzc0OTZhOWM4ZTcwMWQuLmJkMzY3MjA3NWI3
NTc2OGM4NDE0Nzc4ZmM2NjVmNWQ3NWI0ZTI0YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC03NTQsMTEgKzc1NCw4IEBA
IHZvaWQgV2ViUGFnZTo6aGFuZGxlU2VsZWN0aW9uU2VydmljZUNsaWNrKEZyYW1lU2VsZWN0aW9u
JiBzZWxlY3Rpb24sIGNvbnN0IFZlY3RvCiAKICAgICBOU0RhdGEgKnNlbGVjdGlvbkRhdGEgPSBb
YXR0cmlidXRlZFNlbGVjdGlvbiBSVEZERnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIFthdHRyaWJ1
dGVkU2VsZWN0aW9uIGxlbmd0aF0pIGRvY3VtZW50QXR0cmlidXRlczpAeyB9XTsKIAotICAgIFZl
Y3Rvcjx1aW50OF90PiBzZWxlY3Rpb25EYXRhVmVjdG9yOwotICAgIHNlbGVjdGlvbkRhdGFWZWN0
b3IuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNlbGVjdGlvbkRhdGEu
Ynl0ZXMpLCBzZWxlY3Rpb25EYXRhLmxlbmd0aCk7Ci0KICAgICBmbHVzaFBlbmRpbmdFZGl0b3JT
dGF0ZVVwZGF0ZSgpOwotICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2hvd0NvbnRl
eHRNZW51KENvbnRleHRNZW51Q29udGV4dERhdGEocG9pbnQsIHNlbGVjdGlvbkRhdGFWZWN0b3Is
IHBob25lTnVtYmVycywgc2VsZWN0aW9uLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkp
LCBVc2VyRGF0YSgpKSk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93Q29u
dGV4dE1lbnUoQ29udGV4dE1lbnVDb250ZXh0RGF0YShwb2ludCwgVmVjdG9yIHsgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc2VsZWN0aW9uRGF0YS5ieXRlcyksIHNlbGVjdGlvbkRh
dGEubGVuZ3RoIH0sIHBob25lTnVtYmVycywgc2VsZWN0aW9uLnNlbGVjdGlvbigpLmlzQ29udGVu
dEVkaXRhYmxlKCkpLCBVc2VyRGF0YSgpKSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6aGFuZGxlSW1h
Z2VTZXJ2aWNlQ2xpY2soY29uc3QgSW50UG9pbnQmIHBvaW50LCBJbWFnZSYgaW1hZ2UsIEhUTUxJ
bWFnZUVsZW1lbnQmIGVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5j
cHAKaW5kZXggNzk5NjEzZDM3NzQyMzYzYmZiZGNkOTUyOTc5OTYyMjA2ZjAyMjhhOC4uODk5MGVk
ZDc2Y2FiOTZjMmRlY2QzYjk2MDU0Y2ZmNjI5NWJiMGNmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmNwcApAQCAtMTQ1Miw4ICsxNDUyLDEwIEBAIHZvaWQgV2ViUHJvY2Vz
czo6ZmV0Y2hXZWJzaXRlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB3ZWJzaXRlRGF0
YVR5cGVzLCBDCiB7CiAgICAgV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGE7CiAgICAgaWYgKHdlYnNp
dGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpNZW1vcnlDYWNoZSkpIHsKLSAg
ICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkub3JpZ2lu
c1dpdGhDYWNoZShzZXNzaW9uSUQoKSkpCi0gICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVz
LmFwcGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4tPmRhdGEoKSwgV2Vic2l0ZURhdGFU
eXBlOjpNZW1vcnlDYWNoZSwgMCB9KTsKKyAgICAgICAgYXV0byBvcmlnaW5zID0gTWVtb3J5Q2Fj
aGU6OnNpbmdsZXRvbigpLm9yaWdpbnNXaXRoQ2FjaGUoc2Vzc2lvbklEKCkpOworICAgICAgICB3
ZWJzaXRlRGF0YS5lbnRyaWVzID0gV1RGOjptYXAob3JpZ2lucywgW10oYXV0byYgb3JpZ2luKSB7
CisgICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLT5kYXRhKCks
IFdlYnNpdGVEYXRhVHlwZTo6TWVtb3J5Q2FjaGUsIDAgfTsKKyAgICAgICAgfSk7CiAgICAgfQog
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUod2Vic2l0ZURhdGEpKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452613</attachid>
            <date>2022-02-18 18:41:33 -0800</date>
            <delta_ts>2022-02-19 12:31:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236852-20220218184133.patch</filename>
            <type>text/plain</type>
            <size>162032</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDM5OWU1MDY5NDYzM2NiYmY1OTIzNWNm
OTJlZmJiNjc2MTkxYWMyOGIuLjVlNjk4NjA4YzllYjEyMWExMzU2MmM4MzJjYzRhNjAyZTU3NmI3
YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjItMDItMTggIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGV2ZW4gbW9yZSBjYWxs
IHNpdGVzIGNvbnN0cnVjdGluZyB2ZWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuY3BwOgorICAgICAgICAoV1RGOjpD
b25jdXJyZW50V29ya1F1ZXVlOjphcHBseSk6CisgICAgICAgICogd3RmL2NmL0xhbmd1YWdlQ0Yu
Y3BwOgorICAgICAgICAoV1RGOjpwbGF0Zm9ybVVzZXJQcmVmZXJyZWRMYW5ndWFnZXMpOgorCiAy
MDIyLTAyLTE4ICBSb2JlcnQgSmVubmVyICA8SmVubmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBV
bnJldmlld2VkLCByZXZlcnRpbmcgcjI5MDE0OS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1NDRlYjFjM2ZhMDRi
MWY3MTM2YzZjNDFhYmQ2ZmVjNjZkYzlhOTkwLi5jYzEyZmZmZWMwYzY0OTFmMmNhZjg4NjVkODIy
YWZkMDViYmY1MGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTY2IEBACisyMDIyLTAyLTE4ICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4gdXAgLyBvcHRp
bWl6ZSBldmVuIG1vcmUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9ycworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2ODUyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2FwcGxlcGF5
L1BheW1lbnRDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXltZW50Q29vcmRp
bmF0b3I6OmJlZ2luUGF5bWVudFNlc3Npb24pOgorICAgICAgICAqIE1vZHVsZXMvYXBwbGVwYXkv
Y29jb2EvUGF5bWVudE1ldGhvZENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydCk6
CisgICAgICAgICogTW9kdWxlcy9jYWNoZS9ET01DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpET01DYWNoZTo6YmF0Y2hQdXRPcGVyYXRpb24pOgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBh
ZC9HYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWQ6OkdhbWVwYWQpOgorICAg
ICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHYW1lcGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkRGlzY29ubmVjdGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdhbWVwYWRNYW5hZ2VyOjptYWtlR2FtZXBhZFZpc2libGUpOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlOjpvYmplY3RTdG9yZU5hbWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCS2V5RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6aXNEZWxldGVkVmFs
dWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QktleURhdGFIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6Omhhc2gg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzIGNv
bnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmVOYW1lcyBjb25zdCk6
CisgICAgICAgICogTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0OjpzaG93TWVkaWFDb250cm9sc0Nv
bnRleHRNZW51KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlOjphY3RpdmVSYW5nZXMgY29uc3QpOgor
ICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmg6CisgICAgICAgIChXZWJD
b3JlOjpEZWNvZGVPcmRlclNhbXBsZU1hcDo6c2l6ZSBjb25zdCk6CisgICAgICAgICogTW9kdWxl
cy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0Lmg6CisgICAgICAgICogTW9kdWxlcy9zcGVl
Y2gvU3BlZWNoU3ludGhlc2lzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNp
czo6Z2V0Vm9pY2VzKToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hS
ZWNvZ25pemVyVGFzay5tbToKKyAgICAgICAgKC1bV2ViU3BlZWNoUmVjb2duaXplclRhc2tJbXBs
IGNhbGxiYWNrV2l0aFRyYW5zY3JpcHRpb25zOmlzRmluYWw6XSk6CisgICAgICAgICogTW9kdWxl
cy9zcGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2tNb2NrLm1tOgorICAgICAgICAo
LVtXZWJTcGVlY2hSZWNvZ25pemVyVGFza01vY2sgYXVkaW9TYW1wbGVzQXZhaWxhYmxlOl0pOgor
ICAgICAgICAqIGFuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpibGVuZEZ1bmMpOgorICAgICAgICAqIGFuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5l
c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaW1lbGluZXNDb250
cm9sbGVyOjp1cGRhdGVBbmltYXRpb25zQW5kU2VuZEV2ZW50cyk6CisgICAgICAgICogYW5pbWF0
aW9uL0tleWZyYW1lRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByb2Nlc3NQcm9wZXJ0
eUluZGV4ZWRLZXlmcmFtZXMpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRF
eHRlbnNpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRl
bnRFeHRlbnNpb246OkNvbnRlbnRFeHRlbnNpb24pOgorICAgICAgICAqIGNzcy9DU1NWYWx1ZUxp
c3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlTGlzdDo6c2l6ZSBjb25zdCk6CisgICAg
ICAgICogY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmhvaXN0Q2hpbGRyZW5XaXRoT3BlcmF0b3IpOgorICAg
ICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXJJbXBsOjpjb25zdW1lQ29udGFpbmVyUnVsZSk6CisgICAgICAgICogZG9tL0RPTVN0
cmluZ0xpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVN0cmluZ0xpc3Q6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpET01TdHJpbmdMaXN0OjphcHBlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NU3RyaW5nTGlzdDo6RE9NU3RyaW5nTGlzdCk6CisgICAgICAgICogZG9tL0V2ZW50UGF0
aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFBhdGg6OkV2ZW50UGF0aCk6CisgICAgICAg
ICogZG9tL0Z1bGxzY3JlZW5NYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZ1bGxzY3Jl
ZW5NYW5hZ2VyOjpjYW5jZWxGdWxsc2NyZWVuKToKKyAgICAgICAgKiBkb20vTG9hZGFibGVTY3Jp
cHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGFibGVTY3JpcHQ6Om5vdGlmeUNsaWVudEZp
bmlzaGVkKToKKyAgICAgICAgKiBkb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmFkaW9CdXR0b25Hcm91cDo6bWVtYmVycyBjb25zdCk6CisgICAgICAgICogaHRt
bC9EaXJlY3RvcnlGaWxlTGlzdENyZWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9GaWxl
TGlzdCk6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2F2ZUxhc3RTZWxlY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4
KToKKyAgICAgICAgKiBodG1sL0ltYWdlQml0bWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQml0bWFwOjpkZXRhY2hCaXRtYXBzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgICogaHRtbC9wYXJzZXIv
SFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZXRhQ2hh
cnNldFBhcnNlcjo6cHJvY2Vzc01ldGEpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVl
QnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6Omluc2VydFBo
b25lTnVtYmVyTGluayk6CisgICAgICAgICogaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHREb2N1bWVudFBhcnNlcjo6aW5zZXJ0RmFrZVBy
ZUVsZW1lbnQpOgorICAgICAgICAqIGxvYWRlci9Db250ZW50RmlsdGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRGaWx0ZXI6OmNyZWF0ZSk6CisgICAgICAgICogbG9hZGVyL2FwcGNh
Y2hlL0FwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpwYXJzZUFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdCk6CisgICAgICAgICogcGFnZS9SZXNpemVP
YnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNpemVPYnNlcnZlcjo6ZGVsaXZlck9i
c2VydmF0aW9ucyk6CisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmluaXRpYWxpemVJbmRpY2F0b3IpOgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRl
bnRTZWN1cml0eVBvbGljeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVN1YlJlc291cmNl
SW50ZWdyaXR5SW50b0RpZ2VzdHMpOgorICAgICAgICAqIHBsYXRmb3JtL0ZpbGVDaG9vc2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpG
aWxlQ2hvb3Nlcjo6Y2hvb3NlTWVkaWFGaWxlcyk6CisgICAgICAgICogcGxhdGZvcm0vU2hhcmVk
QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmFw
cGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vVGhyZWFkU2FmZURhdGFCdWZmZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OmFkZCk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9EU1BLZXJu
ZWxQcm9jZXNzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EU1BLZXJuZWxQcm9jZXNz
b3I6OmluaXRpYWxpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvUmVzYW1wbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUmVzYW1wbGVyOjpBdWRpb1Jlc2FtcGxlcik6
CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0TnVtYmVyT2ZD
aGFubmVscyk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vTXVsdGlDaGFubmVsUmVzYW1wbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok11bHRpQ2hhbm5lbFJlc2FtcGxlcjo6TXVsdGlDaGFu
bmVsUmVzYW1wbGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25N
b2RlbE1lZGlhRWxlbWVudC5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkL21hYy9EdWFsc2hvY2szSElER2FtZXBhZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEdWFsc2hvY2szSElER2FtZXBhZDo6RHVhbHNob2NrM0hJREdhbWVw
YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWQvbWFjL0xvZ2l0ZWNoR2FtZXBhZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMb2dpdGVjaEdhbWVwYWQ6OkxvZ2l0ZWNoR2FtZXBhZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ2FtZXBhZC9tYWMvU3RhZGlhSElER2FtZXBhZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdGFkaWFISURHYW1lcGFkOjpTdGFkaWFISURHYW1lcGFkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI6OmFkZFJlcGFpbnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhVdGlsaXRp
ZXM6OnBhdGhzV2l0aFNocmlua1dyYXBwZWRSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRo
VXRpbGl0aWVzOjpwYXRoV2l0aFNocmlua1dyYXBwZWRSZWN0c0Zvck91dGxpbmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZTo6YnVmZmVyZWRTYW1wbGVzRm9yVHJhY2tJZCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3Ry
ZWFtaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVGYWlyUGxheVN0cmVhbWlu
Zzo6ZXh0cmFjdEtleUlEc1NrZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFWRldyYXBwZXI6OnNldFJlcXVlc3RGb3JLZXkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1p
bmdBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBs
YXlTdHJlYW1pbmdBVkZPYmpDOjp1cGRhdGVLZXlTdGF0dXNlcyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVyQVZGT2JqQy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlckFWRk9iakM6OmZyYW1lSW5mb3MgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZl
clBhcnNlckFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJB
VkZPYmpDOjpkaWRQYXJzZVN0cmVhbURhdGFBc0Fzc2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW06CisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjp2YXJpYXRpb25BeGVzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6
OndyaXRlU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZVZp
ZGVvQ2FwdHVyZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZVZpZGVvQ2Fw
dHVyZVNvdXJjZTo6c2V0U3VwcG9ydGVkUHJlc2V0cyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3Ry
eUltcGw6OnJlZ2lzdGVyQmxvYlVSTCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVnaXN0cnlJ
bXBsOjp3cml0ZUJsb2JzVG9UZW1wb3JhcnlGaWxlc0ZvckluZGV4ZWREQik6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveE1vZGVsT2JqZWN0OjpkcmF3Qm94U2lkZUZyb21QYXRoKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyQmFja2luZzo6Y29ubmVjdENsaXBwaW5nU3RhY2tMYXllcnMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjphZGp1c3RPdmVyZmxvd1Njcm9sbGJhckNvbnRhaW5lckxheWVycyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6cGFpbnRBdHRhY2htZW50VGl0bGVCYWNrZ3JvdW5kKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTVkdT
dHJva2VQYWludGluZ1Jlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRD
aHVuay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1bms6OlNWR1RleHRDaHVuayk6
CisgICAgICAgICogc3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlBhZ2VSdWxlQ29sbGVjdG9yOjptYXRjaFBhZ2VSdWxlcyk6CisgICAgICAgICog
c3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVT
ZXRCdWlsZGVyOjpNZWRpYVF1ZXJ5Q29sbGVjdG9yOjpwb3ApOgorICAgICAgICAqIHN0eWxlL1N0
eWxlQnVpbGRlckNvbnZlcnRlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRDb250YWluZXJOYW1lKToKKwogMjAyMi0wMi0xOCAgSiBQYXNjb2Ug
IDxqX3Bhc2NvZUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkF1dGhuXSBTdXBwb3J0IGZvciBj
b25kaXRpb25hbCBtZWRpYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYWIwMzJhMDA4MmViZjUzZDc3Y2FmZjY3
YmQ1MzBmOGRhZjlkNjUwYy4uY2ZkNWRiY2Q1ZDI3ZjQ0ZTczY2U2ZGMyOTY3Zjg1ZDk1ZTcxNWI3
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5OCBAQAorMjAyMi0wMi0xOCAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIC8gb3B0aW1pemUgZXZlbiBtb3Jl
IGNhbGwgc2l0ZXMgY29uc3RydWN0aW5nIHZlY3RvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjg1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBs
YXllclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTWVkaWFQbGF5ZXJQcm94eTo6
b3V0T2ZCYW5kVHJhY2tTb3VyY2VzKToKKyAgICAgICAgKiBHUFVQcm9jZXNzL21lZGlhL1JlbW90
ZVNvdXJjZUJ1ZmZlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlU291cmNlQnVm
ZmVyUHJveHk6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdt
ZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlU291cmNlQnVmZmVyUHJveHk6OnVwZGF0ZVRy
YWNrSWRzKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKToKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OmZldGNo
RGlza0NhY2hlRW50cmllcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTm90aWZpY2F0aW9u
cy9OZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtOb3RpZmljYXRpb25NYW5hZ2VyOjpnZXRPcmlnaW5zV2l0aFB1c2hBbmROb3RpZmljYXRpb25Q
ZXJtaXNzaW9ucyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdl
TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjphbGxTdG9yYWdl
QXJlYUlkZW50aWZpZXJzIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9y
YWdlL1RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OlRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6b3JpZ2lucyBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OlRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6c3RvcmFnZUFyZWFJZGVu
dGlmaWVycyBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9y
YWdlRW5naW5lQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hl
OjpmaW5pc2hPcGVuaW5nKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6
a2V5cyBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9y
YWdlQXJlYS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpTUUxpdGVT
dG9yYWdlQXJlYSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmg6Cisg
ICAgICAgICogU2hhcmVkL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OnNob3dQYXltZW50
VUkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbi5jcHA6CisgICAgICAg
IChBUEk6Ok5hdmlnYXRpb246Ok5hdmlnYXRpb24pOgorICAgICAgICAoQVBJOjptX2NsaWVudE5h
dmlnYXRpb25BY3Rpdml0eSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dLU2hhcmVTaGVl
dC5tbToKKyAgICAgICAgKGFwcGVuZEZpbGVzQXNTaGFyZWFibGVVUkxzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW06CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6cmVzdG9yZUFwcEhpZ2hsaWdodHNBbmRTY3JvbGxUb0luZGV4KToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpGcmFt
ZUxvYWRTdGF0ZTo6ZGlkRmluaXNoTG9hZCk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
UHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpwYXJhbWV0ZXJz
IGNvbnN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGlj
YXRvck1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpBdXRoZW50aWNhdG9yTWFuYWdlcjo6
c3RhcnREaXNjb3ZlcnkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3Qu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OnJlbW92ZUFsbEl0ZW1z
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0OjpjbGVhcik6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w6OnJlbW92ZVByb2Nlc3NGcm9tT3JpZ2luQ2FjaGVTZXQpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzUHJveHk6OnByb2Nlc3NEaWRUZXJtaW5hdGVPckZhaWxlZFRvTGF1bmNoKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5KToKKyAgICAgICAgKFdl
YktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YSk6CisgICAgICAgICogVUlQcm9jZXNz
L2lvcy9UZXh0Q2hlY2tlcklPUy5tbToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNo
ZWNrVGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hl
ZXRBc3Npc3RhbnQubW06CisgICAgICAgICgtW1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQgcHJlc2Vu
dGF0aW9uUmVjdEZvckVsZW1lbnRVc2luZ0Nsb3Nlc3RJbmRpY2F0ZWRSZWN0XSk6CisgICAgICAg
ICogVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6VGV4
dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0Fw
cGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
eW1lbnRDb29yZGluYXRvcjo6c2hvd1BheW1lbnRVSSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9B
dXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpzZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZCk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2Vy
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyOjpjcmVhdGVS
ZW1vdGVNZWRpYVBsYXllcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvU291cmNl
QnVmZmVyUHJpdmF0ZVJlbW90ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNvdXJjZUJ1ZmZlclBy
aXZhdGVSZW1vdGU6OnVwZGF0ZVRyYWNrSWRzKToKKyAgICAgICAgKFdlYktpdDo6U291cmNlQnVm
ZmVyUHJpdmF0ZVJlbW90ZTo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0aWFsaXph
dGlvblNlZ21lbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVEND
b2RlY3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpMaWJXZWJSVENDb2RlY3M6OmNyZWF0ZUVuY29k
ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQ
YWdlT3ZlcmxheS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9TZXNz
aW9uU3RhdGVDb252ZXJzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6dG9GcmFtZVN0YXRlKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRldmljZU9yaWVudGF0aW9u
VXBkYXRlUHJvdmlkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZpY2VPcmllbnRhdGlv
blVwZGF0ZVByb3ZpZGVyOjpkZXZpY2VPcmllbnRhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyOjpkZXZpY2VNb3Rpb25DaGFu
Z2VkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRP
dmVycmlkZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpv
dmVycmlkZGVuVHlwZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
U3BlZWNoU3ludGhlc2lzQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoU3lu
dGhlc2lzQ2xpZW50Ojp2b2ljZUxpc3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9G
aW5kQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjpmaW5k
U3RyaW5nTWF0Y2hlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4
dFJhbmdlQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZvdW5kVGV4dFJhbmdl
Q29udHJvbGxlcjo6ZHJhd1JlY3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y29uc3VtZVNhbmRib3hFeHRlbnNp
b25zKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzczo6ZmV0Y2hXZWJzaXRlRGF0YSk6CisKIDIwMjItMDItMTggIEogUGFzY29lICA8al9w
YXNjb2VAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJBdXRobl0gU3VwcG9ydCBmb3IgY29uZGl0
aW9uYWwgbWVkaWF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3Bw
IGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcAppbmRleCA5ZTEwNmUzOTRkM2Y0NGQyYzI1
ZmMzY2ExNTM1NDBlNTIwNGNiMzViLi44NjQwNmYzODg0MzcxNGNiMjU1YzM0ZWFlM2Y5MTgxZGFi
YTU4ZTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAKQEAgLTEwNSw3ICsxMDUsNyBAQCB2b2lkIENvbmN1
cnJlbnRXb3JrUXVldWU6OmFwcGx5KHNpemVfdCBpdGVyYXRpb25zLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoc2l6ZV90IGluZAogCiAgICAgICAgICAgICBtX3dvcmtlcnMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eSh0aHJlYWRDb3VudCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dGhyZWFkQ291bnQ7ICsraSkgewotICAgICAgICAgICAgICAgIG1fd29ya2Vycy5hcHBlbmQoVGhy
ZWFkOjpjcmVhdGUoIlRocmVhZFBvb2wgV29ya2VyIiwgW3RoaXNdIHsKKyAgICAgICAgICAgICAg
ICBtX3dvcmtlcnMudW5jaGVja2VkQXBwZW5kKFRocmVhZDo6Y3JlYXRlKCJUaHJlYWRQb29sIFdv
cmtlciIsIFt0aGlzXSB7CiAgICAgICAgICAgICAgICAgICAgIHRocmVhZEJvZHkoKTsKICAgICAg
ICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9jZi9MYW5ndWFnZUNGLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2NmL0xhbmd1YWdlQ0YuY3BwCmlu
ZGV4IGJiYzFlZjZmNGVmZTAzMDU5Y2U1NTEzMWUwOGMxMDMzMjI0ODhlNTYuLmMwNGM1NWJjNjAz
ZDI4MWQwY2EzODkyMGViYThjNzllNWU2OTI5ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L2NmL0xhbmd1YWdlQ0YuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2NmL0xhbmd1YWdlQ0YuY3Bw
CkBAIC0xMDIsOSArMTAyLDEwIEBAIFZlY3RvcjxTdHJpbmc+IHBsYXRmb3JtVXNlclByZWZlcnJl
ZExhbmd1YWdlcyhTaG91bGRNaW5pbWl6ZUxhbmd1YWdlcyBzaG91bGRNaW5pCiAgICAgICAgIHJl
dHVybiB7ICJlbiJfcyB9OwogCiAgICAgVmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzOworICAgIGxh
bmd1YWdlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBsYXRmb3JtTGFuZ3VhZ2VzQ291bnQpOwog
ICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IHBsYXRmb3JtTGFuZ3VhZ2VzQ291bnQ7IGkrKykg
ewogICAgICAgICBhdXRvIHBsYXRmb3JtTGFuZ3VhZ2UgPSBzdGF0aWNfY2FzdDxDRlN0cmluZ1Jl
Zj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChwbGF0Zm9ybUxhbmd1YWdlcy5nZXQoKSwgaSkpOwot
ICAgICAgICBsYW5ndWFnZXMuYXBwZW5kKGh0dHBTdHlsZUxhbmd1YWdlQ29kZShwbGF0Zm9ybUxh
bmd1YWdlLCBzaG91bGRNaW5pbWl6ZUxhbmd1YWdlcykpOworICAgICAgICBsYW5ndWFnZXMudW5j
aGVja2VkQXBwZW5kKGh0dHBTdHlsZUxhbmd1YWdlQ29kZShwbGF0Zm9ybUxhbmd1YWdlLCBzaG91
bGRNaW5pbWl6ZUxhbmd1YWdlcykpOwogICAgIH0KIAogICAgIExPR19XSVRIX1NUUkVBTShMYW5n
dWFnZSwgc3RyZWFtIDw8ICJBZnRlciBwYXNzaW5nIHRocm91Z2ggaHR0cFN0eWxlTGFuZ3VhZ2VD
b2RlOiAiIDw8IGxhbmd1YWdlcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2FwcGxlcGF5L1BheW1lbnRDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2FwcGxlcGF5L1BheW1lbnRDb29yZGluYXRvci5jcHAKaW5kZXggMWEzMjdhOTRiMGI3MWQ0ZWM3
NWVhY2M4ZDRhZDc4YTkxYjlmZjY4NS4uNGE5NDMyMjQ5ZDUyZDUxZDE0N2I4NmU1NzA4ZDUxODg4
YmE2NGY1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXlt
ZW50Q29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkv
UGF5bWVudENvb3JkaW5hdG9yLmNwcApAQCAtMTAxLDExICsxMDEsMTAgQEAgYm9vbCBQYXltZW50
Q29vcmRpbmF0b3I6OmJlZ2luUGF5bWVudFNlc3Npb24oRG9jdW1lbnQmIGRvY3VtZW50LCBQYXlt
ZW50U2Vzc2lvbiYKIHsKICAgICBBU1NFUlQoIW1fYWN0aXZlU2Vzc2lvbik7CiAKLSAgICBWZWN0
b3I8VVJMPiBsaW5rSWNvblVSTHM7Ci0gICAgZm9yIChhdXRvJiBpY29uIDogTGlua0ljb25Db2xs
ZWN0b3IgeyBkb2N1bWVudCB9Lmljb25zT2ZUeXBlcyh7IExpbmtJY29uVHlwZTo6VG91Y2hJY29u
LCBMaW5rSWNvblR5cGU6OlRvdWNoUHJlY29tcG9zZWRJY29uIH0pKQotICAgICAgICBsaW5rSWNv
blVSTHMuYXBwZW5kKGljb24udXJsKTsKLQotICAgIGF1dG8gc2hvd1BheW1lbnRVSSA9IG1fY2xp
ZW50LnNob3dQYXltZW50VUkoZG9jdW1lbnQudXJsKCksIGxpbmtJY29uVVJMcywgcGF5bWVudFJl
cXVlc3QpOworICAgIGF1dG8gbGlua0ljb25VUkxzID0gTGlua0ljb25Db2xsZWN0b3IgeyBkb2N1
bWVudCB9Lmljb25zT2ZUeXBlcyh7IExpbmtJY29uVHlwZTo6VG91Y2hJY29uLCBMaW5rSWNvblR5
cGU6OlRvdWNoUHJlY29tcG9zZWRJY29uIH0pLm1hcChbXShhdXRvJiBpY29uKSB7CisgICAgICAg
IHJldHVybiBpY29uLnVybDsKKyAgICB9KTsKKyAgICBhdXRvIHNob3dQYXltZW50VUkgPSBtX2Ns
aWVudC5zaG93UGF5bWVudFVJKGRvY3VtZW50LnVybCgpLCBXVEZNb3ZlKGxpbmtJY29uVVJMcyks
IHBheW1lbnRSZXF1ZXN0KTsKICAgICBQQVlNRU5UX0NPT1JESU5BVE9SX1JFTEVBU0VfTE9HKCJi
ZWdpblBheW1lbnRTZXNzaW9uKCkgLT4gJWQiLCBzaG93UGF5bWVudFVJKTsKICAgICBpZiAoIXNo
b3dQYXltZW50VUkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvY29jb2EvUGF5bWVudE1ldGhvZENvY29hLm1tIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29jb2EubW0K
aW5kZXggNzY1M2RlNTRhZjUzOWYyNTYxZjQyMjM2ZDMwZWM2MWFiNTgwM2RkNS4uMzc1ZTUzZDZk
NGZkZGM4ODhmMzJlMDRlMjgzYTdkYjA0MTEzZDA2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9hcHBsZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29jb2EubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29jb2EubW0K
QEAgLTEwMSwxMSArMTAxLDggQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8QXBwbGVQYXlQYXltZW50
TWV0aG9kOjpUeXBlPiBjb252ZXJ0KFBLUGF5bWVudE1ldGhvZFR5cGUgcGEKICNpZiBIQVZFKFBB
U1NLSVRfUEFZTUVOVF9NRVRIT0RfQklMTElOR19BRERSRVNTKQogc3RhdGljIHZvaWQgY29udmVy
dChDTkxhYmVsZWRWYWx1ZTxDTlBvc3RhbEFkZHJlc3MqPiAqcG9zdGFsQWRkcmVzcywgQXBwbGVQ
YXlQYXltZW50Q29udGFjdCAmcmVzdWx0KQogewotICAgIFZlY3RvcjxTdHJpbmc+IGFkZHJlc3NM
aW5lOwotICAgIGlmIChOU1N0cmluZyAqc3RyZWV0ID0gcG9zdGFsQWRkcmVzcy52YWx1ZS5zdHJl
ZXQpIHsKLSAgICAgICAgYWRkcmVzc0xpbmUuYXBwZW5kKHN0cmVldCk7Ci0gICAgICAgIHJlc3Vs
dC5hZGRyZXNzTGluZXMgPSBXVEZNb3ZlKGFkZHJlc3NMaW5lKTsKLSAgICB9CisgICAgaWYgKE5T
U3RyaW5nICpzdHJlZXQgPSBwb3N0YWxBZGRyZXNzLnZhbHVlLnN0cmVldCkKKyAgICAgICAgcmVz
dWx0LmFkZHJlc3NMaW5lcyA9IFZlY3RvciB7IFN0cmluZyB7IHN0cmVldCB9IH07CiAgICAgcmVz
dWx0LnN1YkxvY2FsaXR5ID0gcG9zdGFsQWRkcmVzcy52YWx1ZS5zdWJMb2NhbGl0eTsKICAgICBy
ZXN1bHQubG9jYWxpdHkgPSBwb3N0YWxBZGRyZXNzLnZhbHVlLmNpdHk7CiAgICAgcmVzdWx0LnN1
YkFkbWluaXN0cmF0aXZlQXJlYSA9IHBvc3RhbEFkZHJlc3MudmFsdWUuc3ViQWRtaW5pc3RyYXRp
dmVBcmVhOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNo
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlLmNwcAppbmRleCA0
OWYzOThhYWZlZjM3Y2Q1ZThmOGViMjQ0ZDRlMTFmMzlmMmE4Y2QzLi4yZDQ2ZDFjZGJjNzE3ZjNj
OTI5OWVmYTg2M2E1NDkyNjM4M2FmNWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2NhY2hlL0RPTUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hl
L0RPTUNhY2hlLmNwcApAQCAtNTE1LDEwICs1MTUsOCBAQCBSZWNvcmQgRE9NQ2FjaGU6OnRvQ29u
bmVjdGlvblJlY29yZChjb25zdCBGZXRjaFJlcXVlc3QmIHJlcXVlc3QsIEZldGNoUmVzcG9uc2Um
CiAKIHZvaWQgRE9NQ2FjaGU6OmJhdGNoUHV0T3BlcmF0aW9uKGNvbnN0IEZldGNoUmVxdWVzdCYg
cmVxdWVzdCwgRmV0Y2hSZXNwb25zZSYgcmVzcG9uc2UsIERPTUNhY2hlRW5naW5lOjpSZXNwb25z
ZUJvZHkmJiByZXNwb25zZUJvZHksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRXhjZXB0aW9uT3I8
dm9pZD4mJik+JiYgY2FsbGJhY2spCiB7Ci0gICAgVmVjdG9yPFJlY29yZD4gcmVjb3JkczsKLSAg
ICByZWNvcmRzLmFwcGVuZCh0b0Nvbm5lY3Rpb25SZWNvcmQocmVxdWVzdCwgcmVzcG9uc2UsIFdU
Rk1vdmUocmVzcG9uc2VCb2R5KSkpOwotCi0gICAgYmF0Y2hQdXRPcGVyYXRpb24oV1RGTW92ZShy
ZWNvcmRzKSwgV1RGTW92ZShjYWxsYmFjaykpOworICAgIGF1dG8gcmVjb3JkID0gdG9Db25uZWN0
aW9uUmVjb3JkKHJlcXVlc3QsIHJlc3BvbnNlLCBXVEZNb3ZlKHJlc3BvbnNlQm9keSkpOworICAg
IGJhdGNoUHV0T3BlcmF0aW9uKHsgV1RGTW92ZShyZWNvcmQpIH0sIFdURk1vdmUoY2FsbGJhY2sp
KTsKIH0KIAogdm9pZCBET01DYWNoZTo6YmF0Y2hQdXRPcGVyYXRpb24oVmVjdG9yPFJlY29yZD4m
JiByZWNvcmRzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEV4Y2VwdGlvbk9yPHZvaWQ+JiYpPiYm
IGNhbGxiYWNrKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dh
bWVwYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuY3BwCmlu
ZGV4IDY5NjllMGI1MDNhODdkZDAzODVlMTgzOTA4ODQ2NzBmZWEwNGMyNjcuLjU4M2Y5Yzg1NTU2
NzE3OGNjZTcyY2FkNDQ3OTI0Y2Y4YmMzYzRlNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2dhbWVwYWQvR2FtZXBhZC5jcHAKQEAgLTQzLDggKzQzLDkgQEAgR2FtZXBhZDo6R2FtZXBhZChj
b25zdCBQbGF0Zm9ybUdhbWVwYWQmIHBsYXRmb3JtR2FtZXBhZCkKICAgICAsIG1fYXhlcyhwbGF0
Zm9ybUdhbWVwYWQuYXhpc1ZhbHVlcygpLnNpemUoKSwgMC4wKQogewogICAgIHVuc2lnbmVkIGJ1
dHRvbkNvdW50ID0gcGxhdGZvcm1HYW1lcGFkLmJ1dHRvblZhbHVlcygpLnNpemUoKTsKKyAgICBt
X2J1dHRvbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShidXR0b25Db3VudCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGJ1dHRvbkNvdW50OyArK2kpCi0gICAgICAgIG1fYnV0dG9ucy5h
cHBlbmQoR2FtZXBhZEJ1dHRvbjo6Y3JlYXRlKCkpOworICAgICAgICBtX2J1dHRvbnMudW5jaGVj
a2VkQXBwZW5kKEdhbWVwYWRCdXR0b246OmNyZWF0ZSgpKTsKIH0KIAogR2FtZXBhZDo6fkdhbWVw
YWQoKSA9IGRlZmF1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVw
YWQvR2FtZXBhZE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dh
bWVwYWRNYW5hZ2VyLmNwcAppbmRleCBjYzM3NDg1OGNmZWExYjI0NGMwNGJkNDFiMjk5NDhkMjlh
ZWEzMDMwLi41NDNmZTQ4OTE2N2U3Y2UxM2Q0OTc2OGZjN2UxNWYzNGQwODIzNmU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZE1hbmFnZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAKQEAg
LTc5LDE0ICs3OSwxMCBAQCB2b2lkIEdhbWVwYWRNYW5hZ2VyOjpwbGF0Zm9ybUdhbWVwYWRDb25u
ZWN0ZWQoUGxhdGZvcm1HYW1lcGFkJiBwbGF0Zm9ybUdhbWVwYWQsCiAKIHZvaWQgR2FtZXBhZE1h
bmFnZXI6OnBsYXRmb3JtR2FtZXBhZERpc2Nvbm5lY3RlZChQbGF0Zm9ybUdhbWVwYWQmIHBsYXRm
b3JtR2FtZXBhZCkKIHsKLSAgICBWZWN0b3I8V2Vha1B0cjxET01XaW5kb3c+PiB3ZWFrV2luZG93
czsKLSAgICBmb3IgKGF1dG8qIGRvbVdpbmRvdyA6IG1fZG9tV2luZG93cykKLSAgICAgICAgd2Vh
a1dpbmRvd3MuYXBwZW5kKCpkb21XaW5kb3cpOwotCiAgICAgSGFzaFNldDxOYXZpZ2F0b3JHYW1l
cGFkKj4gbm90aWZpZWROYXZpZ2F0b3JzOwogCiAgICAgLy8gSGFuZGxlIHRoZSBkaXNjb25uZWN0
IGZvciBhbGwgRE9NV2luZG93cyB3aXRoIGV2ZW50IGxpc3RlbmVycyBhbmQgdGhlaXIgTmF2aWdh
dG9ycy4KLSAgICBmb3IgKGF1dG8mIHdpbmRvdyA6IHdlYWtXaW5kb3dzKSB7CisgICAgZm9yIChh
dXRvJiB3aW5kb3cgOiBjb3B5VG9WZWN0b3JPZjxXZWFrUHRyPERPTVdpbmRvdz4+KG1fZG9tV2lu
ZG93cykpIHsKICAgICAgICAgLy8gRXZlbnQgZGlzcGF0Y2ggbWlnaHQgaGF2ZSBtYWRlIHRoaXMg
d2luZG93IGdvIGF3YXkuCiAgICAgICAgIGlmICghd2luZG93KQogICAgICAgICAgICAgY29udGlu
dWU7CkBAIC0xNDMsMTEgKzEzOSw3IEBAIHZvaWQgR2FtZXBhZE1hbmFnZXI6Om1ha2VHYW1lcGFk
VmlzaWJsZShQbGF0Zm9ybUdhbWVwYWQmIHBsYXRmb3JtR2FtZXBhZCwgSGFzaFNlCiAgICAgZm9y
IChhdXRvKiBuYXZpZ2F0b3IgOiBuYXZpZ2F0b3JTZXQpCiAgICAgICAgIG5hdmlnYXRvci0+Z2Ft
ZXBhZENvbm5lY3RlZChwbGF0Zm9ybUdhbWVwYWQpOwogCi0gICAgVmVjdG9yPFdlYWtQdHI8RE9N
V2luZG93Pj4gd2Vha1dpbmRvd3M7Ci0gICAgZm9yIChhdXRvKiBkb21XaW5kb3cgOiBtX2RvbVdp
bmRvd3MpCi0gICAgICAgIHdlYWtXaW5kb3dzLmFwcGVuZCgqZG9tV2luZG93KTsKLQotICAgIGZv
ciAoYXV0byYgd2luZG93IDogd2Vha1dpbmRvd3MpIHsKKyAgICBmb3IgKGF1dG8mIHdpbmRvdyA6
IGNvcHlUb1ZlY3Rvck9mPFdlYWtQdHI8RE9NV2luZG93Pj4obV9kb21XaW5kb3dzKSkgewogICAg
ICAgICAvLyBFdmVudCBkaXNwYXRjaCBtaWdodCBoYXZlIG1hZGUgdGhpcyB3aW5kb3cgZ28gYXdh
eS4KICAgICAgICAgaWYgKCF3aW5kb3cpCiAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAppbmRleCA3YWE2
MzJiN2VjMDQ3YmU0NjA4YjUxYTA5NGVhMWE0ZTU3YTI2MjliLi4wYmU4YmQxMTZlYzIzNjEyM2M3
MTUzMmQ3ZWUzNmM1NmU5OTY1NDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCkBAIC0xMDIsOSArMTAyLDcgQEAgUmVmPERPTVN0cmlu
Z0xpc3Q+IElEQkRhdGFiYXNlOjpvYmplY3RTdG9yZU5hbWVzKCkgY29uc3QKIHsKICAgICBBU1NF
UlQoY2FuQ3VycmVudFRocmVhZEFjY2Vzc1RocmVhZExvY2FsRGF0YShvcmlnaW5UaHJlYWQoKSkp
OwogCi0gICAgYXV0byBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7
Ci0gICAgZm9yIChhdXRvJiBuYW1lIDogbV9pbmZvLm9iamVjdFN0b3JlTmFtZXMoKSkKLSAgICAg
ICAgb2JqZWN0U3RvcmVOYW1lcy0+YXBwZW5kKG5hbWUpOworICAgIGF1dG8gb2JqZWN0U3RvcmVO
YW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZShtX2luZm8ub2JqZWN0U3RvcmVOYW1lcygpKTsK
ICAgICBvYmplY3RTdG9yZU5hbWVzLT5zb3J0KCk7CiAgICAgcmV0dXJuIG9iamVjdFN0b3JlTmFt
ZXM7CiB9CkBAIC0xNzUsMTkgKzE3MywxNiBAQCBFeGNlcHRpb25PcjxSZWY8SURCVHJhbnNhY3Rp
b24+PiBJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24oU3RyaW5nT3JWZWN0b3JPZlN0cmluZwogICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJGYWlsZWQgdG8gZXhl
Y3V0ZSAndHJhbnNhY3Rpb24nIG9uICdJREJEYXRhYmFzZSc6IFRoZSBkYXRhYmFzZSBjb25uZWN0
aW9uIGlzIGNsb3NpbmcuIl9zIH07CiAKICAgICBWZWN0b3I8U3RyaW5nPiBvYmplY3RTdG9yZXM7
Ci0gICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPFN0cmluZz4+KHN0b3JlTmFt
ZXMpKQorICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+PihzdG9y
ZU5hbWVzKSkgewogICAgICAgICBvYmplY3RTdG9yZXMgPSBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rv
cjxTdHJpbmc+PihzdG9yZU5hbWVzKSk7Ci0gICAgZWxzZQorICAgICAgICAvLyBJdCBpcyB2YWxp
ZCBmb3IgamF2YXNjcmlwdCB0byBwYXNzIGluIGEgbGlzdCBvZiBvYmplY3Qgc3RvcmUgbmFtZXMg
d2l0aCB0aGUgc2FtZSBuYW1lIGxpc3RlZCB0d2ljZSwKKyAgICAgICAgLy8gc28gd2UgbmVlZCB0
byBwdXQgdGhlbSBhbGwgaW4gYSBzZXQgdG8gZ2V0IGEgdW5pcXVlIGxpc3QuCisgICAgICAgIEhh
c2hTZXQ8U3RyaW5nPiBvYmplY3RTdG9yZVNldDsKKyAgICAgICAgb2JqZWN0U3RvcmVTZXQuYWRk
KG9iamVjdFN0b3Jlcy5iZWdpbigpLCBvYmplY3RTdG9yZXMuZW5kKCkpOworICAgICAgICBvYmpl
Y3RTdG9yZXMgPSBjb3B5VG9WZWN0b3Iob2JqZWN0U3RvcmVTZXQpOworICAgIH0gZWxzZQogICAg
ICAgICBvYmplY3RTdG9yZXMuYXBwZW5kKFdURk1vdmUoc3RkOjpnZXQ8U3RyaW5nPihzdG9yZU5h
bWVzKSkpOwogCi0gICAgLy8gSXQgaXMgdmFsaWQgZm9yIGphdmFzY3JpcHQgdG8gcGFzcyBpbiBh
IGxpc3Qgb2Ygb2JqZWN0IHN0b3JlIG5hbWVzIHdpdGggdGhlIHNhbWUgbmFtZSBsaXN0ZWQgdHdp
Y2UsCi0gICAgLy8gc28gd2UgbmVlZCB0byBwdXQgdGhlbSBhbGwgaW4gYSBzZXQgdG8gZ2V0IGEg
dW5pcXVlIGxpc3QuCi0gICAgSGFzaFNldDxTdHJpbmc+IG9iamVjdFN0b3JlU2V0OwotICAgIGZv
ciAoYXV0byYgb2JqZWN0U3RvcmUgOiBvYmplY3RTdG9yZXMpCi0gICAgICAgIG9iamVjdFN0b3Jl
U2V0LmFkZChvYmplY3RTdG9yZSk7Ci0KLSAgICBvYmplY3RTdG9yZXMgPSBjb3B5VG9WZWN0b3Io
b2JqZWN0U3RvcmVTZXQpOwotCiAgICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZU5hbWUgOiBvYmpl
Y3RTdG9yZXMpIHsKICAgICAgICAgaWYgKG1faW5mby5oYXNPYmplY3RTdG9yZShvYmplY3RTdG9y
ZU5hbWUpKQogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJLZXlEYXRhLmgKaW5kZXggNGI5Nzg1MzY5ZDE5MGE2YjE5NjkxZDEzN2Fl
MTU2N2U1YzM3OTVkOS4uOWY4YzMzNWY4NTMzZWZjNDA4YWQyZjljZjY3YjAxYjJlNjdiNjA3MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaApAQCAt
MjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSA8dmFyaWFudD4K
KyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZFNldC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIApAQCAtMTE3LDQxICsxMTgsNiBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKICAgICB9CiAKLSAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gaGFzaENvZGVz
OwotICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3R5cGUp
KTsKLSAgICAgICAgaGFzaENvZGVzLmFwcGVuZChtX2lzTnVsbCA/IDEgOiAwKTsKLSAgICAgICAg
aGFzaENvZGVzLmFwcGVuZChtX2lzRGVsZXRlZFZhbHVlID8gMSA6IDApOwotICAgICAgICBzd2l0
Y2ggKG1fdHlwZSkgewotICAgICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6SW52YWxpZDoK
LSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6Ok1heDoKLSAgICAgICAgY2FzZSBJbmRl
eGVkREI6OktleVR5cGU6Ok1pbjoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElu
ZGV4ZWREQjo6S2V5VHlwZTo6TnVtYmVyOgotICAgICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlw
ZTo6RGF0ZToKLSAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoU3RyaW5nSGFzaGVyOjpoYXNo
TWVtb3J5PHNpemVvZihkb3VibGUpPigmc3RkOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKSkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpTdHJpbmc6
Ci0gICAgICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKFN0cmluZ0hhc2g6Omhhc2goc3RkOjpnZXQ8
U3RyaW5nPihtX3ZhbHVlKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5k
ZXhlZERCOjpLZXlUeXBlOjpCaW5hcnk6IHsKLSAgICAgICAgICAgIGF1dG8qIGRhdGEgPSBzdGQ6
OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSkuZGF0YSgpOwotICAgICAgICAgICAg
aWYgKCFkYXRhKQotICAgICAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoMCk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaGFzaENvZGVzLmFwcGVuZChTdHJpbmdIYXNoZXI6
Omhhc2hNZW1vcnkoZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpBcnJheToK
LSAgICAgICAgICAgIGZvciAoYXV0byYga2V5IDogc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+
PihtX3ZhbHVlKSkKLSAgICAgICAgICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKGtleS5oYXNoKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gU3RyaW5n
SGFzaGVyOjpoYXNoTWVtb3J5KGhhc2hDb2Rlcy5kYXRhKCksIGhhc2hDb2Rlcy5zaXplKCkgKiBz
aXplb2YodW5zaWduZWQpKTsKLSAgICB9Ci0KICAgICBTdHJpbmcgc3RyaW5nKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gSW5kZXhlZERCOjpLZXlUeXBlOjpTdHJpbmcp
OwpAQCAtMTg0LDYgKzE1MCw4IEBAIHB1YmxpYzoKIAogICAgIHNpemVfdCBzaXplKCkgY29uc3Q7
CiAKKyAgICBib29sIGlzRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9pc0RlbGV0ZWRW
YWx1ZTsgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBzdHJ1Y3QgSURCS2V5RGF0YUhhc2hUcmFp
dHM7CiAKQEAgLTE5Niw4ICsxNjQsMzYgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnZhcmlhbnQ8VmVj
dG9yPElEQktleURhdGE+LCBTdHJpbmcsIGRvdWJsZSwgVGhyZWFkU2FmZURhdGFCdWZmZXI+IG1f
dmFsdWU7CiB9OwogCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IElEQktl
eURhdGEmIGtleURhdGEpCit7CisgICAgYWRkKGhhc2hlciwga2V5RGF0YS50eXBlKCkpOworICAg
IGFkZChoYXNoZXIsIGtleURhdGEuaXNOdWxsKCkpOworICAgIGFkZChoYXNoZXIsIGtleURhdGEu
aXNEZWxldGVkVmFsdWUoKSk7CisgICAgc3dpdGNoIChrZXlEYXRhLnR5cGUoKSkgeworICAgIGNh
c2UgSW5kZXhlZERCOjpLZXlUeXBlOjpJbnZhbGlkOgorICAgIGNhc2UgSW5kZXhlZERCOjpLZXlU
eXBlOjpNYXg6CisgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6Ok1pbjoKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6Ok51bWJlcjoKKyAgICAgICAgYWRkKGhh
c2hlciwga2V5RGF0YS5udW1iZXIoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW5kZXhl
ZERCOjpLZXlUeXBlOjpEYXRlOgorICAgICAgICBhZGQoaGFzaGVyLCBrZXlEYXRhLmRhdGUoKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpTdHJpbmc6Cisg
ICAgICAgIGFkZChoYXNoZXIsIGtleURhdGEuc3RyaW5nKCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6QmluYXJ5OgorICAgICAgICBhZGQoaGFzaGVyLCBr
ZXlEYXRhLmJpbmFyeSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbmRleGVkREI6Oktl
eVR5cGU6OkFycmF5OgorICAgICAgICBhZGQoaGFzaGVyLCBrZXlEYXRhLmFycmF5KCkpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKIHN0cnVjdCBJREJLZXlEYXRhSGFzaCB7Ci0gICAgc3Rh
dGljIHVuc2lnbmVkIGhhc2goY29uc3QgSURCS2V5RGF0YSYgYSkgeyByZXR1cm4gYS5oYXNoKCk7
IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBJREJLZXlEYXRhJiBhKSB7IHJldHVy
biBjb21wdXRlSGFzaChhKTsgfQogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IElEQktleURh
dGEmIGEsIGNvbnN0IElEQktleURhdGEmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQogICAgIHN0YXRp
YyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUu
Y3BwCmluZGV4IDE0MzUxNDBhNWNiNGExYTFkNDA3YTJkYjI5ZDE1YmRmMmQ1MmMwYjYuLmNlNjNj
NmE1NmIxNGQ1YmUwMzIyNTczNzI1MzIyYjgyZjBkZGRkMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTEyNiwxNCAr
MTI2LDExIEBAIFJlZjxET01TdHJpbmdMaXN0PiBJREJPYmplY3RTdG9yZTo6aW5kZXhOYW1lcygp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKGNhbkN1cnJlbnRUaHJlYWRBY2Nlc3NUaHJlYWRMb2NhbERh
dGEobV90cmFuc2FjdGlvbi5kYXRhYmFzZSgpLm9yaWdpblRocmVhZCgpKSk7CiAKLSAgICBhdXRv
IGluZGV4TmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKLQotICAgIGlmICghbV9kZWxl
dGVkKSB7Ci0gICAgICAgIGZvciAoYXV0byYgbmFtZSA6IG1faW5mby5pbmRleE5hbWVzKCkpCi0g
ICAgICAgICAgICBpbmRleE5hbWVzLT5hcHBlbmQobmFtZSk7Ci0gICAgICAgIGluZGV4TmFtZXMt
PnNvcnQoKTsKLSAgICB9CisgICAgaWYgKG1fZGVsZXRlZCkKKyAgICAgICAgcmV0dXJuIERPTVN0
cmluZ0xpc3Q6OmNyZWF0ZSgpOwogCisgICAgYXV0byBpbmRleE5hbWVzID0gRE9NU3RyaW5nTGlz
dDo6Y3JlYXRlKG1faW5mby5pbmRleE5hbWVzKCkpOworICAgIGluZGV4TmFtZXMtPnNvcnQoKTsK
ICAgICByZXR1cm4gaW5kZXhOYW1lczsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCmluZGV4IDZjMTEyMWI3MzEwZjczN2Y3
Yjk1YmVjZWU4NDU0ZTZhYzUwZGYyYjYuLjFiNGM4Yjk3MWJlNjczM2VmMzU2YjA5YWRkOWIzMjBi
ZTQ2OTVlNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbi5jcHAKQEAgLTEyMSwxMiArMTIxLDggQEAgUmVmPERPTVN0cmluZ0xpc3Q+
IElEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZU5hbWVzKCkgY29uc3QKIHsKICAgICBBU1NFUlQo
Y2FuQ3VycmVudFRocmVhZEFjY2Vzc1RocmVhZExvY2FsRGF0YShtX2RhdGFiYXNlLT5vcmlnaW5U
aHJlYWQoKSkpOwogCi0gICAgY29uc3QgVmVjdG9yPFN0cmluZz4gbmFtZXMgPSBpc1ZlcnNpb25D
aGFuZ2UoKSA/IG1fZGF0YWJhc2UtPmluZm8oKS5vYmplY3RTdG9yZU5hbWVzKCkgOiBtX2luZm8u
b2JqZWN0U3RvcmVzKCk7Ci0KLSAgICBSZWY8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1l
cyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwotICAgIGZvciAoYXV0byYgbmFtZSA6IG5hbWVz
KQotICAgICAgICBvYmplY3RTdG9yZU5hbWVzLT5hcHBlbmQobmFtZSk7Ci0KKyAgICBWZWN0b3I8
U3RyaW5nPiBuYW1lcyA9IGlzVmVyc2lvbkNoYW5nZSgpID8gbV9kYXRhYmFzZS0+aW5mbygpLm9i
amVjdFN0b3JlTmFtZXMoKSA6IG1faW5mby5vYmplY3RTdG9yZXMoKTsKKyAgICBhdXRvIG9iamVj
dFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoV1RGTW92ZShuYW1lcykpOwogICAg
IG9iamVjdFN0b3JlTmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gb2JqZWN0U3RvcmVOYW1lczsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRp
YUNvbnRyb2xzSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMv
TWVkaWFDb250cm9sc0hvc3QuY3BwCmluZGV4IDE5YTA2OWUyM2IzOWRiYjRhNzA2NWQ4ZGU3OGQ3
ZWU0OTNjNjk4MTguLmI4MjVlYzgwMDUxNDgwMjhlMmIwN2IxOWRjNzgzOTJhNDNhOGNiYTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRy
b2xzSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01l
ZGlhQ29udHJvbHNIb3N0LmNwcApAQCAtNTU1LDExICs1NTUsMTAgQEAgYm9vbCBNZWRpYUNvbnRy
b2xzSG9zdDo6c2hvd01lZGlhQ29udHJvbHNDb250ZXh0TWVudShIVE1MRWxlbWVudCYgdGFyZ2V0
LCBTdHJpbmcKIAogICAgIGlmIChvcHRpb25zSlNPTk9iamVjdC0+Z2V0Qm9vbGVhbigiaW5jbHVk
ZUxhbmd1YWdlcyJfcykudmFsdWVfb3IoZmFsc2UpKSB7CiAgICAgICAgIGlmIChhdXRvKiBhdWRp
b1RyYWNrcyA9IG1lZGlhRWxlbWVudC5hdWRpb1RyYWNrcygpOyBhdWRpb1RyYWNrcyAmJiBhdWRp
b1RyYWNrcy0+bGVuZ3RoKCkgPiAxKSB7Ci0gICAgICAgICAgICBWZWN0b3I8TWVudUl0ZW0+IGxh
bmd1YWdlTWVudUl0ZW1zOwotCiAgICAgICAgICAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMg
PSBwYWdlLT5ncm91cCgpLmVuc3VyZUNhcHRpb25QcmVmZXJlbmNlcygpOwotICAgICAgICAgICAg
Zm9yIChhdXRvJiBhdWRpb1RyYWNrIDogY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlz
dEZvck1lbnUoYXVkaW9UcmFja3MpKQotICAgICAgICAgICAgICAgIGxhbmd1YWdlTWVudUl0ZW1z
LmFwcGVuZChjcmVhdGVNZW51SXRlbShhdWRpb1RyYWNrLCBjYXB0aW9uUHJlZmVyZW5jZXMuZGlz
cGxheU5hbWVGb3JUcmFjayhhdWRpb1RyYWNrLmdldCgpKSwgYXVkaW9UcmFjay0+ZW5hYmxlZCgp
KSk7CisgICAgICAgICAgICBhdXRvIGxhbmd1YWdlTWVudUl0ZW1zID0gY2FwdGlvblByZWZlcmVu
Y2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUoYXVkaW9UcmFja3MpLm1hcChbJl0oYXV0byYgYXVk
aW9UcmFjaykgeworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVNZW51SXRlbShhdWRpb1Ry
YWNrLCBjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFjayhhdWRpb1RyYWNrLmdl
dCgpKSwgYXVkaW9UcmFjay0+ZW5hYmxlZCgpKTsKKyAgICAgICAgICAgIH0pOwogCiAgICAgICAg
ICAgICBpZiAoIWxhbmd1YWdlTWVudUl0ZW1zLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBp
dGVtcy5hcHBlbmQoY3JlYXRlU3VibWVudShXRUJfVUlfU1RSSU5HX0tFWSgiTGFuZ3VhZ2VzIiwg
Ikxhbmd1YWdlcyAoTWVkaWEgQ29udHJvbHMgTWVudSkiLCAiTGFuZ3VhZ2VzIG1lZGlhIGNvbnRy
b2xzIGNvbnRleHQgbWVudSB0aXRsZSIpLCAiZ2xvYmUiX3MsIFdURk1vdmUobGFuZ3VhZ2VNZW51
SXRlbXMpKSk7CkBAIC01NjgsMTUgKzU2NywxMyBAQCBib29sIE1lZGlhQ29udHJvbHNIb3N0Ojpz
aG93TWVkaWFDb250cm9sc0NvbnRleHRNZW51KEhUTUxFbGVtZW50JiB0YXJnZXQsIFN0cmluZwog
CiAgICAgaWYgKG9wdGlvbnNKU09OT2JqZWN0LT5nZXRCb29sZWFuKCJpbmNsdWRlU3VidGl0bGVz
Il9zKS52YWx1ZV9vcihmYWxzZSkpIHsKICAgICAgICAgaWYgKGF1dG8qIHRleHRUcmFja3MgPSBt
ZWRpYUVsZW1lbnQudGV4dFRyYWNrcygpOyB0ZXh0VHJhY2tzICYmIHRleHRUcmFja3MtPmxlbmd0
aCgpKSB7Ci0gICAgICAgICAgICBWZWN0b3I8TWVudUl0ZW0+IHN1YnRpdGxlTWVudUl0ZW1zOwot
CiAgICAgICAgICAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBwYWdlLT5ncm91cCgpLmVu
c3VyZUNhcHRpb25QcmVmZXJlbmNlcygpOwogICAgICAgICAgICAgYXV0byBzb3J0ZWRUZXh0VHJh
Y2tzID0gY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUodGV4dFRyYWNr
cywgeyBUZXh0VHJhY2s6OktpbmQ6OlN1YnRpdGxlcywgVGV4dFRyYWNrOjpLaW5kOjpDYXB0aW9u
cywgVGV4dFRyYWNrOjpLaW5kOjpEZXNjcmlwdGlvbnMgfSk7CiAgICAgICAgICAgICBib29sIGFs
bFRyYWNrc0Rpc2FibGVkID0gbm90Rm91bmQgPT0gc29ydGVkVGV4dFRyYWNrcy5maW5kSWYoW10g
KGNvbnN0IGF1dG8mIHRleHRUcmFjaykgewogICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0VHJh
Y2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmc7CiAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgIGJvb2wgdXNlc0F1dG9tYXRpY1RyYWNrID0gY2FwdGlvblByZWZlcmVuY2Vz
LmNhcHRpb25EaXNwbGF5TW9kZSgpID09IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OkF1dG9tYXRp
YyAmJiBhbGxUcmFja3NEaXNhYmxlZDsKLSAgICAgICAgICAgIGZvciAoYXV0byYgdGV4dFRyYWNr
IDogc29ydGVkVGV4dFRyYWNrcykgeworICAgICAgICAgICAgYXV0byBzdWJ0aXRsZU1lbnVJdGVt
cyA9IHNvcnRlZFRleHRUcmFja3MubWFwKFsmXShhdXRvJiB0ZXh0VHJhY2spIHsKICAgICAgICAg
ICAgICAgICBib29sIGNoZWNrZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAoYWxsVHJh
Y2tzRGlzYWJsZWQgJiYgdGV4dFRyYWNrID09ICZUZXh0VHJhY2s6OmNhcHRpb25NZW51T2ZmSXRl
bSgpICYmIChjYXB0aW9uUHJlZmVyZW5jZXMuY2FwdGlvbkRpc3BsYXlNb2RlKCkgPT0gQ2FwdGlv
blVzZXJQcmVmZXJlbmNlczo6Rm9yY2VkT25seSB8fCBjYXB0aW9uUHJlZmVyZW5jZXMuY2FwdGlv
bkRpc3BsYXlNb2RlKCkgPT0gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6TWFudWFsKSkKICAgICAg
ICAgICAgICAgICAgICAgY2hlY2tlZCA9IHRydWU7CkBAIC01ODQsOCArNTgxLDggQEAgYm9vbCBN
ZWRpYUNvbnRyb2xzSG9zdDo6c2hvd01lZGlhQ29udHJvbHNDb250ZXh0TWVudShIVE1MRWxlbWVu
dCYgdGFyZ2V0LCBTdHJpbmcKICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoIXVzZXNBdXRvbWF0aWNUcmFjayAmJiB0ZXh0VHJhY2st
Pm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmcpCiAgICAgICAgICAgICAgICAgICAg
IGNoZWNrZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHN1YnRpdGxlTWVudUl0ZW1zLmFwcGVu
ZChjcmVhdGVNZW51SXRlbSh0ZXh0VHJhY2ssIGNhcHRpb25QcmVmZXJlbmNlcy5kaXNwbGF5TmFt
ZUZvclRyYWNrKHRleHRUcmFjay5nZXQoKSksIGNoZWNrZWQpKTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTWVudUl0ZW0odGV4dFRyYWNrLCBjYXB0aW9uUHJl
ZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFjayh0ZXh0VHJhY2suZ2V0KCkpLCBjaGVja2VkKTsK
KyAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICBpZiAoIXN1YnRpdGxlTWVudUl0ZW1zLmlz
RW1wdHkoKSkKICAgICAgICAgICAgICAgICBpdGVtcy5hcHBlbmQoY3JlYXRlU3VibWVudShXRUJf
VUlfU1RSSU5HX0tFWSgiU3VidGl0bGVzIiwgIlN1YnRpdGxlcyAoTWVkaWEgQ29udHJvbHMgTWVu
dSkiLCAiU3VidGl0bGVzIG1lZGlhIGNvbnRyb2xzIGNvbnRleHQgbWVudSB0aXRsZSIpLCAiY2Fw
dGlvbnMuYnViYmxlIl9zLCBXVEZNb3ZlKHN1YnRpdGxlTWVudUl0ZW1zKSkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcAppbmRleCA5
MTI3NDdmNDA2YzI5NTk0OTk3M2I1YmIxMzQ5ZGJjYTY3NDFjMTM1Li5hMmU2NThhOTJmOTk3ZDdm
NGI0M2UxNzAzZjRhMGUwOTQ5MTdiMGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcApAQCAtMTA1MSwxMCArMTA1MSw5IEBAIHZv
aWQgTWVkaWFTb3VyY2U6Om9uUmVhZHlTdGF0ZUNoYW5nZShSZWFkeVN0YXRlIG9sZFN0YXRlLCBS
ZWFkeVN0YXRlIG5ld1N0YXRlKQogCiBWZWN0b3I8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVNv
dXJjZTo6YWN0aXZlUmFuZ2VzKCkgY29uc3QKIHsKLSAgICBWZWN0b3I8UGxhdGZvcm1UaW1lUmFu
Z2VzPiBhY3RpdmVSYW5nZXM7Ci0gICAgZm9yIChhdXRvJiBzb3VyY2VCdWZmZXIgOiAqbV9hY3Rp
dmVTb3VyY2VCdWZmZXJzKQotICAgICAgICBhY3RpdmVSYW5nZXMuYXBwZW5kKHNvdXJjZUJ1ZmZl
ci0+YnVmZmVyZWRJbnRlcm5hbCgpLnJhbmdlcygpKTsKLSAgICByZXR1cm4gYWN0aXZlUmFuZ2Vz
OworICAgIHJldHVybiBXVEY6Om1hcCgqbV9hY3RpdmVTb3VyY2VCdWZmZXJzLCBbXShhdXRvJiBz
b3VyY2VCdWZmZXIpIHsKKyAgICAgICAgcmV0dXJuIHNvdXJjZUJ1ZmZlci0+YnVmZmVyZWRJbnRl
cm5hbCgpLnJhbmdlcygpOworICAgIH0pOwogfQogCiBFeGNlcHRpb25PcjxSZWY8U291cmNlQnVm
ZmVyUHJpdmF0ZT4+IE1lZGlhU291cmNlOjpjcmVhdGVTb3VyY2VCdWZmZXJQcml2YXRlKGNvbnN0
IENvbnRlbnRUeXBlJiBpbmNvbWluZ1R5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1hcC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXNvdXJjZS9TYW1wbGVNYXAuaAppbmRleCBlYWY0OTMxNTk3ZDI2ODUyM2M2NjdiZDljZGNj
NGNlYTY1NDMzNjk1Li5hZjFlMTA0NTgxNzg3ZjE1ZjZmMWYzODViMjU3MjQ0NGQ4ODU5NWZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1hcC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmgKQEAg
LTkxLDYgKzkxLDcgQEAgcHVibGljOgogICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVzLnJiZWdpbigpOyB9CiAgICAgcmV2ZXJzZV9pdGVy
YXRvciByZW5kKCkgeyByZXR1cm4gbV9zYW1wbGVzLnJlbmQoKTsgfQogICAgIGNvbnN0X3JldmVy
c2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5yZW5kKCk7IH0KKyAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5zaXplKCk7IH0KIAogICAg
IFdFQkNPUkVfRVhQT1JUIGl0ZXJhdG9yIGZpbmRTYW1wbGVXaXRoRGVjb2RlS2V5KGNvbnN0IEtl
eVR5cGUmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBpdGVyYXRvciBmaW5kU2FtcGxlQWZ0ZXJEZWNv
ZGVLZXkoY29uc3QgS2V5VHlwZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaAppbmRleCBmYzZlMDczYWI5MGU3NmQxODE1
Zjg4OTZiNmY2NjA5NmRmMmZkZGQ1Li40MzZiZjAxN2JjODFhY2ZiOTRmNWU4NWI5MGY5MWNmNDVi
YmViZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1Nv
dXJjZUJ1ZmZlckxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNl
L1NvdXJjZUJ1ZmZlckxpc3QuaApAQCAtNDgsNiArNDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB+U291cmNlQnVmZmVyTGlzdCgpOwogCiAgICAgdW5zaWduZWQgbG9uZyBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CisKICAgICBTb3VyY2VCdWZmZXIqIGl0ZW0odW5z
aWduZWQgbG9uZyBpbmRleCkgY29uc3QgeyByZXR1cm4gKGluZGV4IDwgbV9saXN0LnNpemUoKSkg
PyBtX2xpc3RbaW5kZXhdLmdldCgpIDogbnVsbHB0cjsgfQogCiAgICAgdm9pZCBhZGQoUmVmPFNv
dXJjZUJ1ZmZlcj4mJik7CkBAIC01OCw2ICs1OSw5IEBAIHB1YmxpYzoKIAogICAgIFZlY3RvcjxS
ZWZQdHI8U291cmNlQnVmZmVyPj46Oml0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9saXN0LmJl
Z2luKCk7IH0KICAgICBWZWN0b3I8UmVmUHRyPFNvdXJjZUJ1ZmZlcj4+OjppdGVyYXRvciBlbmQo
KSB7IHJldHVybiBtX2xpc3QuZW5kKCk7IH0KKyAgICBWZWN0b3I8UmVmUHRyPFNvdXJjZUJ1ZmZl
cj4+Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5iZWdpbigp
OyB9CisgICAgVmVjdG9yPFJlZlB0cjxTb3VyY2VCdWZmZXI+Pjo6Y29uc3RfaXRlcmF0b3IgZW5k
KCkgY29uc3QgeyByZXR1cm4gbV9saXN0LmVuZCgpOyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25z
dCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CiAKICAgICAvLyBFdmVudFRhcmdldCBpbnRlcmZh
Y2UKICAgICBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIFNvdXJjZUJ1ZmZlckxpc3RFdmVudFRhcmdldEludGVyZmFjZVR5cGU7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRo
ZXNpcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMu
Y3BwCmluZGV4IGVhZjNhMmUxZTc5OGE0ODFmNzY4YjMzYzVmZDI5ZDNjN2NiYWIzYWUuLjgyYzFh
M2EwYzA3MjU1YzFlODBkYTYxZDU5MGJhOWM5NDFjYzA2OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzLmNwcApAQCAtOTMsOSArOTMsMTAg
QEAgY29uc3QgVmVjdG9yPFJlZjxTcGVlY2hTeW50aGVzaXNWb2ljZT4+JiBTcGVlY2hTeW50aGVz
aXM6OmdldFZvaWNlcygpCiAgICAgICAgIHJldHVybiBtX3ZvaWNlTGlzdDsKIAogICAgIC8vIElm
IHRoZSB2b2ljZUxpc3QgaXMgZW1wdHksIHRoYXQncyB0aGUgY3VlIHRvIGdldCB0aGUgdm9pY2Vz
IGZyb20gdGhlIHBsYXRmb3JtIGFnYWluLgotICAgIGZvciAoYXV0byYgdm9pY2UgOiBtX3NwZWVj
aFN5bnRoZXNpc0NsaWVudCA/IG1fc3BlZWNoU3ludGhlc2lzQ2xpZW50LT52b2ljZUxpc3QoKSA6
IGVuc3VyZVBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIoKS52b2ljZUxpc3QoKSkKLSAgICAgICAg
bV92b2ljZUxpc3QuYXBwZW5kKFNwZWVjaFN5bnRoZXNpc1ZvaWNlOjpjcmVhdGUoKnZvaWNlKSk7
Ci0KKyAgICBhdXRvJiB2b2ljZUxpc3QgPSBtX3NwZWVjaFN5bnRoZXNpc0NsaWVudCA/IG1fc3Bl
ZWNoU3ludGhlc2lzQ2xpZW50LT52b2ljZUxpc3QoKSA6IGVuc3VyZVBsYXRmb3JtU3BlZWNoU3lu
dGhlc2l6ZXIoKS52b2ljZUxpc3QoKTsKKyAgICBtX3ZvaWNlTGlzdCA9IHZvaWNlTGlzdC5tYXAo
W10oYXV0byYgdm9pY2UpIHsKKyAgICAgICAgcmV0dXJuIFNwZWVjaFN5bnRoZXNpc1ZvaWNlOjpj
cmVhdGUoKnZvaWNlKTsKKyAgICB9KTsKICAgICByZXR1cm4gbV92b2ljZUxpc3Q7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVjaFJl
Y29nbml6ZXJUYXNrLm1tIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvY29jb2EvV2Vi
U3BlZWNoUmVjb2duaXplclRhc2subW0KaW5kZXggZjFiOTY5NTgwNTdkMmZlNjA0NGQyYzdiMjU5
ZGI2YzVjZWI0NGVmZS4uYTVlODVhZjgyOWJjMGRkZGVmNjJjNjFhNGY2YzlmMmNmMmFkNmNmNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvY29jb2EvV2ViU3BlZWNo
UmVjb2duaXplclRhc2subW0KKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvY29j
b2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2subW0KQEAgLTEyOCw5ICsxMjgsOCBAQCAtICh2b2lk
KWNhbGxiYWNrV2l0aFRyYW5zY3JpcHRpb25zOihOU0FycmF5PFNGVHJhbnNjcmlwdGlvbiAqPiAq
KXRyYW5zY3JpcHRpb25zCiAgICAgICAgIGlmIChhbHRlcm5hdGl2ZXMuc2l6ZSgpID09IF9tYXhB
bHRlcm5hdGl2ZXMpCiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgVmVjdG9yPFNwZWVj
aFJlY29nbml0aW9uUmVzdWx0RGF0YT4gZGF0YXM7Ci0gICAgZGF0YXMuYXBwZW5kKFNwZWVjaFJl
Y29nbml0aW9uUmVzdWx0RGF0YSB7IFdURk1vdmUoYWx0ZXJuYXRpdmVzKSwgYm9vbChpc0ZpbmFs
KSB9KTsKLSAgICBfZGVsZWdhdGVDYWxsYmFjayhTcGVlY2hSZWNvZ25pdGlvblVwZGF0ZTo6Y3Jl
YXRlUmVzdWx0KF9pZGVudGlmaWVyLCBXVEZNb3ZlKGRhdGFzKSkpOworICAgIFNwZWVjaFJlY29n
bml0aW9uUmVzdWx0RGF0YSBkYXRhIHsgV1RGTW92ZShhbHRlcm5hdGl2ZXMpLCAhIWlzRmluYWwg
fTsKKyAgICBfZGVsZWdhdGVDYWxsYmFjayhTcGVlY2hSZWNvZ25pdGlvblVwZGF0ZTo6Y3JlYXRl
UmVzdWx0KF9pZGVudGlmaWVyLCB7IFdURk1vdmUoZGF0YSkgfSkpOwogfQogCiAtICh2b2lkKWF1
ZGlvU2FtcGxlc0F2YWlsYWJsZTooQ01TYW1wbGVCdWZmZXJSZWYpc2FtcGxlQnVmZmVyCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNv
Z25pemVyVGFza01vY2subW0gYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9jb2NvYS9X
ZWJTcGVlY2hSZWNvZ25pemVyVGFza01vY2subW0KaW5kZXggYmM1YzYyMTliNWRhZGMzYjFjZGM1
OTBkNjVjODk3YjcyNTBiMWUyMS4uOTYzZmI0N2M0Yzg1YWEwNjA1YTJkYWJjNzE5ZTU2NzRjMjYw
YWJmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvY29jb2EvV2Vi
U3BlZWNoUmVjb2duaXplclRhc2tNb2NrLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
c3BlZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrTW9jay5tbQpAQCAtNjMsMTEgKzYz
LDkgQEAgLSAodm9pZClhdWRpb1NhbXBsZXNBdmFpbGFibGU6KENNU2FtcGxlQnVmZmVyUmVmKXNh
bXBsZUJ1ZmZlcgogICAgIH0KIAogICAgIC8vIEZha2Ugc29tZSByZWNvZ25pdGlvbiByZXN1bHRz
LgotICAgIFZlY3RvcjxTcGVlY2hSZWNvZ25pdGlvbkFsdGVybmF0aXZlRGF0YT4gYWx0ZXJuYXRp
dmVzOwotICAgIGFsdGVybmF0aXZlcy5hcHBlbmQoU3BlZWNoUmVjb2duaXRpb25BbHRlcm5hdGl2
ZURhdGEgeyAiVGVzdCIsIDEuMCB9KTsKLSAgICBWZWN0b3I8U3BlZWNoUmVjb2duaXRpb25SZXN1
bHREYXRhPiBkYXRhczsKLSAgICBkYXRhcy5hcHBlbmQoU3BlZWNoUmVjb2duaXRpb25SZXN1bHRE
YXRhIHsgV1RGTW92ZShhbHRlcm5hdGl2ZXMpLCB0cnVlICB9KTsKLSAgICBfZGVsZWdhdGVDYWxs
YmFjayhTcGVlY2hSZWNvZ25pdGlvblVwZGF0ZTo6Y3JlYXRlUmVzdWx0KF9pZGVudGlmaWVyLCBX
VEZNb3ZlKGRhdGFzKSkpOworICAgIFNwZWVjaFJlY29nbml0aW9uQWx0ZXJuYXRpdmVEYXRhIGFs
dGVybmF0aXZlIHsgIlRlc3QiLCAxLjAgfTsKKyAgICBTcGVlY2hSZWNvZ25pdGlvblJlc3VsdERh
dGEgZGF0YSB7IHsgV1RGTW92ZShhbHRlcm5hdGl2ZSkgfSwgdHJ1ZSB9OworICAgIF9kZWxlZ2F0
ZUNhbGxiYWNrKFNwZWVjaFJlY29nbml0aW9uVXBkYXRlOjpjcmVhdGVSZXN1bHQoX2lkZW50aWZp
ZXIsIHsgV1RGTW92ZShkYXRhKSB9KSk7CiAKICAgICBpZiAoIV9kb011bHRpcGxlUmVjb2duaXRp
b25zKQogICAgICAgICBbc2VsZiBhYm9ydF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
bmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0
aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAppbmRleCBlMzU5YTA0M2IyZTNjZjM5ZjljMjZi
YzU5ZTk4ZjEwNWUxMzJjMTA1Li44YmNlNjY3MDY2YTNmNzc2ZjBlYWJhOTY2YjgxYTc0NmE5NzVl
MzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmlt
YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1h
dGlvbi5jcHAKQEAgLTE2NCwxMCArMTY0LDggQEAgc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVy
YXRpb25zIGJsZW5kRnVuYyhjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBjb24KICAg
ICBpZiAoY29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24gPT0gQ29tcG9zaXRlT3BlcmF0aW9uOjpB
ZGQpIHsKICAgICAgICAgQVNTRVJUKGNvbnRleHQucHJvZ3Jlc3MgPT0gMS4wKTsKICAgICAgICAg
VHJhbnNmb3JtT3BlcmF0aW9ucyByZXN1bHRPcGVyYXRpb25zOwotICAgICAgICBmb3IgKGF1dG8g
b3BlcmF0aW9uIDogZnJvbS5vcGVyYXRpb25zKCkpCi0gICAgICAgICAgICByZXN1bHRPcGVyYXRp
b25zLm9wZXJhdGlvbnMoKS5hcHBlbmQob3BlcmF0aW9uKTsKLSAgICAgICAgZm9yIChhdXRvIG9w
ZXJhdGlvbiA6IHRvLm9wZXJhdGlvbnMoKSkKLSAgICAgICAgICAgIHJlc3VsdE9wZXJhdGlvbnMu
b3BlcmF0aW9ucygpLmFwcGVuZChvcGVyYXRpb24pOworICAgICAgICByZXN1bHRPcGVyYXRpb25z
Lm9wZXJhdGlvbnMoKS5hcHBlbmRWZWN0b3IoZnJvbS5vcGVyYXRpb25zKCkpOworICAgICAgICBy
ZXN1bHRPcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmRWZWN0b3IodG8ub3BlcmF0aW9ucygp
KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdE9wZXJhdGlvbnM7CiAgICAgfQogICAgIGF1dG8gYm94
U2l6ZSA9IGlzPFJlbmRlckJveD4oY29udGV4dC5jbGllbnQtPnJlbmRlcmVyKCkpID8gZG93bmNh
c3Q8UmVuZGVyQm94PigqY29udGV4dC5jbGllbnQtPnJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3Qo
KS5zaXplKCkgOiBMYXlvdXRTaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmlt
YXRpb24vRG9jdW1lbnRUaW1lbGluZXNDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXIuY3BwCmluZGV4IGI1ZmQyYWVmMTAw
MDEyZGE5YzRiZGIyMWU3YWQwNDFhMzY2NDE2YmYuLjcwOTQ1M2JjNjYyNTJmOTU5ODI0YmE5NGVj
YTdhMzMwMDhjOWNhM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1
bWVudFRpbWVsaW5lc0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9Eb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXIuY3BwCkBAIC05OCw5ICs5OCw3IEBAIHZvaWQg
RG9jdW1lbnRUaW1lbGluZXNDb250cm9sbGVyOjp1cGRhdGVBbmltYXRpb25zQW5kU2VuZEV2ZW50
cyhSZWR1Y2VkUmVzb2x1dGlvCiAgICAgQVNTRVJUKCFtX3RpbWVsaW5lcy5oYXNOdWxsUmVmZXJl
bmNlcygpKTsKIAogICAgIC8vIFdlIG5lZWQgdG8gY29weSBtX3RpbWVsaW5lcyBiZWZvcmUgaXRl
cmF0aW5nIG92ZXIgaXRzIG1lbWJlcnMgc2luY2UgdGhlIHN0ZXBzIGluIHRoaXMgcHJvY2VkdXJl
IG1heSBtdXRhdGUgbV90aW1lbGluZXMuCi0gICAgVmVjdG9yPFJlZjxEb2N1bWVudFRpbWVsaW5l
Pj4gcHJvdGVjdGVkVGltZWxpbmVzOwotICAgIGZvciAoYXV0byYgdGltZWxpbmUgOiBtX3RpbWVs
aW5lcykKLSAgICAgICAgcHJvdGVjdGVkVGltZWxpbmVzLmFwcGVuZCh0aW1lbGluZSk7CisgICAg
YXV0byBwcm90ZWN0ZWRUaW1lbGluZXMgPSBjb3B5VG9WZWN0b3JPZjxSZWY8RG9jdW1lbnRUaW1l
bGluZT4+KG1fdGltZWxpbmVzKTsKIAogICAgIC8vIFdlIG5lZWQgdG8gZnJlZXplIHRoZSBjdXJy
ZW50IHRpbWUgZXZlbiBpZiBubyBhbmltYXRpb24gaXMgcnVubmluZy4KICAgICAvLyBkb2N1bWVu
dC50aW1lbGluZS5jdXJyZW50VGltZSBtYXkgYmUgY2FsbGVkIGZyb20gYSByQUYgY2FsbGJhY2sg
YW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcAppbmRleCA3
N2QxZTYwZmEzMjgzMWIxMzI2YzNiMzA4NDM1Nzc3MjYwNzM5OWY1Li5jZmU0MzJlN2RlYmUxYmVk
MTU1NTY1ZDgxMmE4ZWJlODA3ZjYwMmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmlt
YXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9L
ZXlmcmFtZUVmZmVjdC5jcHAKQEAgLTM3NSw4ICszNzUsNyBAQCBzdGF0aWMgaW5saW5lIEV4Y2Vw
dGlvbk9yPHZvaWQ+IHByb2Nlc3NQcm9wZXJ0eUluZGV4ZWRLZXlmcmFtZXMoSlNHbG9iYWxPYmpl
Y3QmCiAgICAgICAgIGNvbXB1dGVNaXNzaW5nS2V5ZnJhbWVPZmZzZXRzKHByb3BlcnR5S2V5ZnJh
bWVzKTsKIAogICAgICAgICAvLyA3LiBBZGQga2V5ZnJhbWVzIGluIHByb3BlcnR5IGtleWZyYW1l
cyB0byBwcm9jZXNzZWQga2V5ZnJhbWVzLgotICAgICAgICBmb3IgKGF1dG8mIGtleWZyYW1lIDog
cHJvcGVydHlLZXlmcmFtZXMpCi0gICAgICAgICAgICBwYXJzZWRLZXlmcmFtZXMuYXBwZW5kKFdU
Rk1vdmUoa2V5ZnJhbWUpKTsKKyAgICAgICAgcGFyc2VkS2V5ZnJhbWVzLmFwcGVuZFZlY3Rvcihw
cm9wZXJ0eUtleWZyYW1lcyk7CiAgICAgfQogCiAgICAgLy8gMy4gU29ydCBwcm9jZXNzZWQga2V5
ZnJhbWVzIGJ5IHRoZSBjb21wdXRlZCBrZXlmcmFtZSBvZmZzZXQgb2YgZWFjaCBrZXlmcmFtZSBp
biBpbmNyZWFzaW5nIG9yZGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uLmNwcAppbmRleCA1MzQ5ZWYzOGZlNjkwNjRkZDQ1M2Zk
NjhkN2RjNmE4ZWU3NzNkOWVjLi5jMDVjZDg5NDE1ZmY0MTIwNGUzYzNjOGM3NzNmNDhkMTEzNjNj
MDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50
RXh0ZW5zaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250
ZW50RXh0ZW5zaW9uLmNwcApAQCAtNDYsOCArNDYsNyBAQCBDb250ZW50RXh0ZW5zaW9uOjpDb250
ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgUmVmPENvbXBpbGVkQ29udGVu
dAogICAgICwgbV9leHRlbnNpb25CYXNlVVJMKFdURk1vdmUoZXh0ZW5zaW9uQmFzZVVSTCkpCiB7
CiAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlciBpbnRlcnByZXRlcihtX2NvbXBpbGVkRXh0ZW5z
aW9uLT51cmxGaWx0ZXJzQnl0ZWNvZGUoKSk7Ci0gICAgZm9yICh1aW50NjRfdCBhY3Rpb24gOiBp
bnRlcnByZXRlci5hY3Rpb25zTWF0Y2hpbmdFdmVyeXRoaW5nKCkpCi0gICAgICAgIG1fdW5pdmVy
c2FsQWN0aW9ucy5hcHBlbmQoYWN0aW9uKTsKKyAgICBtX3VuaXZlcnNhbEFjdGlvbnMgPSBjb3B5
VG9WZWN0b3IoaW50ZXJwcmV0ZXIuYWN0aW9uc01hdGNoaW5nRXZlcnl0aGluZygpKTsKIAogICAg
IGlmIChzaG91bGRDb21waWxlQ1NTID09IFNob3VsZENvbXBpbGVDU1M6OlllcykKICAgICAgICAg
Y29tcGlsZUdsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVl
TGlzdC5oCmluZGV4IGJiMTI3M2E1ZmQzZWU4ZTY4ODBiYTc2N2FmOTI5MTdlYmRkYTc0OGYuLmY5
YTc2MDYwNDA4OWIwY2UyZjY5Zjg3Njg2NTRmMTI2ODIzN2E2N2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
VmFsdWVMaXN0LmgKQEAgLTU4LDYgKzU4LDcgQEAgcHVibGljOgogICAgIGNvbnN0X2l0ZXJhdG9y
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CiAgICAgaXRlcmF0b3IgYmVn
aW4oKSB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9CiAgICAgaXRlcmF0b3IgZW5kKCkgeyBy
ZXR1cm4gbV92YWx1ZXMuZW5kKCk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzLnNpemUoKTsgfQogCiAgICAgdm9pZCBhcHBlbmQoUmVmPENTU1ZhbHVlPiYmKTsK
ICAgICB2b2lkIHByZXBlbmQoUmVmPENTU1ZhbHVlPiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmNwcAppbmRleCA2YWI1Y2I2NzRkNDE1M2Q4
MjI1MmYyNTg3ZWU0NmZjZjVhYWM4YzRhLi43OWYyYTg4MjYwY2VhZWYwZDU4MDE1NzY2MTM5YzA3
NTc2NjdjMDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3Bl
cmF0aW9uTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJh
dGlvbk5vZGUuY3BwCkBAIC02MjAsMTQgKzYyMCwxMSBAQCB2b2lkIENTU0NhbGNPcGVyYXRpb25O
b2RlOjpob2lzdENoaWxkcmVuV2l0aE9wZXJhdG9yKENhbGNPcGVyYXRvciBvcCkKIAogICAgIFZl
Y3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gbmV3Q2hpbGRyZW47CiAgICAgZm9yIChh
dXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pIHsKLSAgICAgICAgaWYgKGlzPENTU0NhbGNPcGVyYXRp
b25Ob2RlPihjaGlsZCkgJiYgZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdl
dCgpKS5jYWxjT3BlcmF0b3IoKSA9PSBvcCkgewotICAgICAgICAgICAgYXV0byYgY2hpbGRyZW4g
PSBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpLmNoaWxkcmVuKCk7
Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNoaWxkVG9Nb3ZlIDogY2hpbGRyZW4pCi0gICAgICAg
ICAgICAgICAgbmV3Q2hpbGRyZW4uYXBwZW5kKFdURk1vdmUoY2hpbGRUb01vdmUpKTsKLSAgICAg
ICAgfSBlbHNlCisgICAgICAgIGlmIChpczxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQpICYm
IGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZC5nZXQoKSkuY2FsY09wZXJhdG9y
KCkgPT0gb3ApCisgICAgICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmRWZWN0b3IoZG93bmNhc3Q8
Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKS5jaGlsZHJlbigpKTsKKyAgICAgICAg
ZWxzZQogICAgICAgICAgICAgbmV3Q2hpbGRyZW4uYXBwZW5kKFdURk1vdmUoY2hpbGQpKTsKICAg
ICB9Ci0gICAgCiAgICAgbmV3Q2hpbGRyZW4uc2hyaW5rVG9GaXQoKTsKICAgICBtX2NoaWxkcmVu
ID0gV1RGTW92ZShuZXdDaGlsZHJlbik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRE9NU3RyaW5nTGlzdC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTVN0cmluZ0xpc3QuaApp
bmRleCA2OWNiMmQ3ZjkzMmUwMGEyNjVlMDhkOGZmM2IxY2I1MGMxMjc3Y2U1Li4yODczY2ZjZmNi
ZWMzZDg2Y2YyNzUyODZhN2JkOTIyMjc3NzY1YzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRE9NU3RyaW5nTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdM
aXN0LmgKQEAgLTQwLDkgKzQwLDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRE9NU3RyaW5nTGlzdCk7CiAgICAgfQogCisgICAgc3RhdGljIFJlZjxET01TdHJpbmdM
aXN0PiBjcmVhdGUoVmVjdG9yPFN0cmluZz4mJiBzdHJpbmdzKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRE9NU3RyaW5nTGlzdChXVEZNb3ZlKHN0cmluZ3MpKSk7CisgICAg
fQorCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmdzLmlzRW1wdHko
KTsgfQogICAgIHZvaWQgY2xlYXIoKSB7IG1fc3RyaW5ncy5jbGVhcigpOyB9CiAgICAgdm9pZCBh
cHBlbmQoY29uc3QgU3RyaW5nJiBzdHJpbmcpIHsgbV9zdHJpbmdzLmFwcGVuZChzdHJpbmcpOyB9
CisgICAgdm9pZCBhcHBlbmQoU3RyaW5nJiYgc3RyaW5nKSB7IG1fc3RyaW5ncy5hcHBlbmQoV1RG
TW92ZShzdHJpbmcpKTsgfQogICAgIHZvaWQgc29ydCgpOwogCiAgICAgLy8gSW1wbGVtZW50cyB0
aGUgSURMLgpAQCAtNTMsNyArNTksMTAgQEAgcHVibGljOgogICAgIG9wZXJhdG9yIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JigpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nczsgfQogCiBwcml2YXRlOgot
ICAgIERPTVN0cmluZ0xpc3QoKSB7IH0KKyAgICBET01TdHJpbmdMaXN0KCkgPSBkZWZhdWx0Owor
ICAgIGV4cGxpY2l0IERPTVN0cmluZ0xpc3QoVmVjdG9yPFN0cmluZz4mJiBzdHJpbmdzKQorICAg
ICAgICA6IG1fc3RyaW5ncyhXVEZNb3ZlKHN0cmluZ3MpKQorICAgIHsgfQogCiAgICAgVmVjdG9y
PFN0cmluZz4gbV9zdHJpbmdzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudFBhdGguY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAKaW5kZXggNDZm
YjY0NWUwNTMzNzU4MWY5ZmEzNDUyMzAzYTJmZTM4MGY0NmMwNi4uZWNiY2MwMGYzNmYwNzZlMzIw
YjZhZDE2YWQxZDlhMGJmMDM4ZTI3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50UGF0aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAKQEAgLTI3
NCwxMSArMjc0LDExIEBAIFZlY3RvcjxFdmVudFRhcmdldCo+IEV2ZW50UGF0aDo6Y29tcHV0ZVBh
dGhVbmNsb3NlZFRvVGFyZ2V0KGNvbnN0IEV2ZW50VGFyZ2V0JiB0CiAKIEV2ZW50UGF0aDo6RXZl
bnRQYXRoKGNvbnN0IFZlY3RvcjxFdmVudFRhcmdldCo+JiB0YXJnZXRzKQogewotICAgIGZvciAo
YXV0byogdGFyZ2V0IDogdGFyZ2V0cykgeworICAgIG1fcGF0aCA9IHRhcmdldHMubWFwKFsmXShh
dXRvKiB0YXJnZXQpIHsKICAgICAgICAgQVNTRVJUKHRhcmdldCk7CiAgICAgICAgIEFTU0VSVCgh
aXM8Tm9kZT4odGFyZ2V0KSk7Ci0gICAgICAgIG1fcGF0aC5hcHBlbmQoRXZlbnRDb250ZXh0IHsg
RXZlbnRDb250ZXh0OjpUeXBlOjpOb3JtYWwsIG51bGxwdHIsIHRhcmdldCwgKnRhcmdldHMuYmVn
aW4oKSwgMCB9KTsKLSAgICB9CisgICAgICAgIHJldHVybiBFdmVudENvbnRleHQgeyBFdmVudENv
bnRleHQ6OlR5cGU6Ok5vcm1hbCwgbnVsbHB0ciwgdGFyZ2V0LCAqdGFyZ2V0cy5iZWdpbigpLCAw
IH07CisgICAgfSk7CiB9CiAKIHN0YXRpYyBOb2RlKiBtb3ZlT3V0T2ZBbGxTaGFkb3dSb290cyhO
b2RlJiBzdGFydGluZ05vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRnVsbHNj
cmVlbk1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0Z1bGxzY3JlZW5NYW5hZ2VyLmNw
cAppbmRleCBlY2U0OGU0MjY3OTcwOTVkYTcwOWEwNGRhNjg2YTRmZTBiYzI5MjhjLi44ZTFiMjZj
YWYwNDE4MDM5MDc5MDhiZDc2ZWYxMjliODhmZjI1ZTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRnVsbHNjcmVlbk1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9G
dWxsc2NyZWVuTWFuYWdlci5jcHAKQEAgLTI2NSw5ICsyNjUsOCBAQCB2b2lkIEZ1bGxzY3JlZW5N
YW5hZ2VyOjpjYW5jZWxGdWxsc2NyZWVuKCkKIAogICAgIC8vIFRvIGFjaGlldmUgdGhhdCBhaW0s
IHJlbW92ZSBhbGwgdGhlIGVsZW1lbnRzIGZyb20gdGhlIHRvcCBkb2N1bWVudCdzIHN0YWNrIGV4
Y2VwdCBmb3IgdGhlIGZpcnN0IGJlZm9yZQogICAgIC8vIGNhbGxpbmcgd2Via2l0RXhpdEZ1bGxz
Y3JlZW4oKToKLSAgICBWZWN0b3I8UmVmUHRyPEVsZW1lbnQ+PiByZXBsYWNlbWVudEZ1bGxzY3Jl
ZW5FbGVtZW50U3RhY2s7Ci0gICAgcmVwbGFjZW1lbnRGdWxsc2NyZWVuRWxlbWVudFN0YWNrLmFw
cGVuZCh0b3BEb2N1bWVudC5mdWxsc2NyZWVuTWFuYWdlcigpLmZ1bGxzY3JlZW5FbGVtZW50KCkp
OwotICAgIHRvcERvY3VtZW50LmZ1bGxzY3JlZW5NYW5hZ2VyKCkubV9mdWxsc2NyZWVuRWxlbWVu
dFN0YWNrLnN3YXAocmVwbGFjZW1lbnRGdWxsc2NyZWVuRWxlbWVudFN0YWNrKTsKKyAgICBSZWZQ
dHIgZnVsbHNjcmVuRWxlbWVudCA9IHRvcERvY3VtZW50LmZ1bGxzY3JlZW5NYW5hZ2VyKCkuZnVs
bHNjcmVlbkVsZW1lbnQoKTsKKyAgICB0b3BEb2N1bWVudC5mdWxsc2NyZWVuTWFuYWdlcigpLm1f
ZnVsbHNjcmVlbkVsZW1lbnRTdGFjayA9IFZlY3RvciB7IFdURk1vdmUoZnVsbHNjcmVuRWxlbWVu
dCkgfTsKIAogICAgIHRvcERvY3VtZW50LmZ1bGxzY3JlZW5NYW5hZ2VyKCkuZXhpdEZ1bGxzY3Jl
ZW4oKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJsZVNjcmlwdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTG9hZGFibGVTY3JpcHQuY3BwCmluZGV4IDFiZGRlMWVi
NWQ2YTA3ZjExNzM4OWI5OWM3NWVjYjAxYjYwZjg4MDkuLjQxZjQzY2U2Njg1MDMwZWQ5ZDM5ZGYw
NWI5ZmM5MjNiMTIzOTVkZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJs
ZVNjcmlwdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0xvYWRhYmxlU2NyaXB0LmNwcApA
QCAtNTEsMTIgKzUxLDggQEAgdm9pZCBMb2FkYWJsZVNjcmlwdDo6cmVtb3ZlQ2xpZW50KExvYWRh
YmxlU2NyaXB0Q2xpZW50JiBjbGllbnQpCiAKIHZvaWQgTG9hZGFibGVTY3JpcHQ6Om5vdGlmeUNs
aWVudEZpbmlzaGVkKCkKIHsKLSAgICBSZWZQdHI8TG9hZGFibGVTY3JpcHQ+IHByb3RlY3RlZFRo
aXModGhpcyk7Ci0KLSAgICBWZWN0b3I8TG9hZGFibGVTY3JpcHRDbGllbnQqPiB2ZWN0b3I7Ci0g
ICAgZm9yIChhdXRvJiBwYWlyIDogbV9jbGllbnRzKQotICAgICAgICB2ZWN0b3IuYXBwZW5kKHBh
aXIua2V5KTsKLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IHZlY3RvcikKKyAgICBSZWYgcHJvdGVj
dGVkVGhpcyB7ICp0aGlzIH07CisgICAgZm9yIChhdXRvJiBjbGllbnQgOiBjb3B5VG9WZWN0b3Io
bV9jbGllbnRzLnZhbHVlcygpKSkKICAgICAgICAgY2xpZW50LT5ub3RpZnlGaW5pc2hlZCgqdGhp
cyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vw
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwCmluZGV4IDUw
ZjQ2MzBmODllYzg5NWRmMWNlNWFiOGVkNTgxODliN2FmYmY2NjIuLjEyMjYzZTI1NmVlNTZhNDUy
YzMyMjgxMjVjYWRkNWYxNzBmNDVmMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9S
YWRpb0J1dHRvbkdyb3Vwcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9u
R3JvdXBzLmNwcApAQCAtNTksOSArNTksNyBAQCBpbmxpbmUgYm9vbCBSYWRpb0J1dHRvbkdyb3Vw
Ojppc1ZhbGlkKCkgY29uc3QKIAogVmVjdG9yPFJlZjxIVE1MSW5wdXRFbGVtZW50Pj4gUmFkaW9C
dXR0b25Hcm91cDo6bWVtYmVycygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFJlZjxIVE1MSW5wdXRF
bGVtZW50Pj4gc29ydGVkTWVtYmVyczsKLSAgICBmb3IgKGF1dG8mIG1lbWJlciA6IG1fbWVtYmVy
cykKLSAgICAgICAgc29ydGVkTWVtYmVycy5hcHBlbmQobWVtYmVyKTsKKyAgICBhdXRvIHNvcnRl
ZE1lbWJlcnMgPSBjb3B5VG9WZWN0b3JPZjxSZWY8SFRNTElucHV0RWxlbWVudD4+KG1fbWVtYmVy
cyk7CiAgICAgc3RkOjpzb3J0KHNvcnRlZE1lbWJlcnMuYmVnaW4oKSwgc29ydGVkTWVtYmVycy5l
bmQoKSwgW10oYXV0byYgYSwgYXV0byYgYikgewogICAgICAgICByZXR1cm4gaXNfbHQodHJlZU9y
ZGVyPENvbXBvc2VkVHJlZT4oYSwgYikpOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9EaXJlY3RvcnlGaWxlTGlzdENyZWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9EaXJlY3RvcnlGaWxlTGlzdENyZWF0b3IuY3BwCmluZGV4IDlkM2RhMTg1M2MzYTYzMjBm
ZWIzMTk3NTE2MmU0MzVhZTkzZmZkZDEuLjk4NWY3YTYyZjBjMWYzOTc1NTgyZWIzZjliOTg5NzUx
NTYxNTY2NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGlyZWN0b3J5RmlsZUxp
c3RDcmVhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RpcmVjdG9yeUZpbGVMaXN0
Q3JlYXRvci5jcHAKQEAgLTg2LDEzICs4NiwxMSBAQCBzdGF0aWMgVmVjdG9yPEZpbGVJbmZvcm1h
dGlvbj4gZ2F0aGVyRmlsZUluZm9ybWF0aW9uKGNvbnN0IFZlY3RvcjxGaWxlQ2hvb3NlckZpbAog
c3RhdGljIFJlZjxGaWxlTGlzdD4gdG9GaWxlTGlzdChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IFZlY3RvcjxGaWxlSW5mb3JtYXRpb24+JiBmaWxlcykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotICAgIFZlY3RvcjxSZWY8RmlsZT4+IGZpbGVPYmplY3RzOwotICAgIGZvciAoYXV0
byYgZmlsZSA6IGZpbGVzKSB7CisgICAgYXV0byBmaWxlT2JqZWN0cyA9IGZpbGVzLm1hcChbZG9j
dW1lbnRdKGF1dG8mIGZpbGUpIHsKICAgICAgICAgaWYgKGZpbGUucmVsYXRpdmVQYXRoLmlzTnVs
bCgpKQotICAgICAgICAgICAgZmlsZU9iamVjdHMuYXBwZW5kKEZpbGU6OmNyZWF0ZShkb2N1bWVu
dCwgZmlsZS5wYXRoLCB7IH0sIGZpbGUuZGlzcGxheU5hbWUpKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgZmlsZU9iamVjdHMuYXBwZW5kKEZpbGU6OmNyZWF0ZVdpdGhSZWxhdGl2ZVBhdGgo
ZG9jdW1lbnQsIGZpbGUucGF0aCwgZmlsZS5yZWxhdGl2ZVBhdGgpKTsKLSAgICB9CisgICAgICAg
ICAgICByZXR1cm4gRmlsZTo6Y3JlYXRlKGRvY3VtZW50LCBmaWxlLnBhdGgsIHsgfSwgZmlsZS5k
aXNwbGF5TmFtZSk7CisgICAgICAgIHJldHVybiBGaWxlOjpjcmVhdGVXaXRoUmVsYXRpdmVQYXRo
KGRvY3VtZW50LCBmaWxlLnBhdGgsIGZpbGUucmVsYXRpdmVQYXRoKTsKKyAgICB9KTsKICAgICBy
ZXR1cm4gRmlsZUxpc3Q6OmNyZWF0ZShXVEZNb3ZlKGZpbGVPYmplY3RzKSk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKaW5kZXggYzRiMDg0ZDJkZTcxZmQz
MTlmZThjMDY5YjQ1ZmY3ZmNjY2VkZTVlYy4uNzJhZmUwNGUwN2Y4OWM4YzI0YWYzZjhiOGNhZDM4
Y2UyOTZhOGQwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAK
QEAgLTYzNCw5ICs2MzQsOSBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzYXZlTGFzdFNlbGVj
dGlvbigpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2xhc3RPbkNoYW5nZVNlbGVj
dGlvbi5jbGVhcigpOwotICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGxpc3RJdGVtcygpKQotICAg
ICAgICBtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbi5hcHBlbmQoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+
KCplbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVj
dGVkKCkpOworICAgIG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uID0gbGlzdEl0ZW1zKCkubWFwKFtd
KGF1dG8mIGVsZW1lbnQpIHsKKyAgICAgICAgcmV0dXJuIGlzPEhUTUxPcHRpb25FbGVtZW50Pigq
ZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5zZWxlY3Rl
ZCgpOworICAgIH0pOwogfQogCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVTZWxl
Y3Rpb25BbmNob3JJbmRleChpbnQgaW5kZXgpCkBAIC02NDUsMTAgKzY0NSw5IEBAIHZvaWQgSFRN
TFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KGludCBpbmRleCkK
IAogICAgIC8vIENhY2hlIHRoZSBzZWxlY3Rpb24gc3RhdGUgc28gd2UgY2FuIHJlc3RvcmUgdGhl
IG9sZCBzZWxlY3Rpb24gYXMgdGhlIG5ldwogICAgIC8vIHNlbGVjdGlvbiBwaXZvdHMgYXJvdW5k
IHRoaXMgYW5jaG9yIGluZGV4LgotICAgIG1fY2FjaGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rpb24u
Y2xlYXIoKTsKLQotICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGxpc3RJdGVtcygpKQotICAgICAg
ICBtX2NhY2hlZFN0YXRlRm9yQWN0aXZlU2VsZWN0aW9uLmFwcGVuZChpczxIVE1MT3B0aW9uRWxl
bWVudD4oKmVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCku
c2VsZWN0ZWQoKSk7CisgICAgbV9jYWNoZWRTdGF0ZUZvckFjdGl2ZVNlbGVjdGlvbiA9IGxpc3RJ
dGVtcygpLm1hcChbXShhdXRvJiBlbGVtZW50KSB7CisgICAgICAgIHJldHVybiBpczxIVE1MT3B0
aW9uRWxlbWVudD4oKmVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxl
bWVudCkuc2VsZWN0ZWQoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6
c2V0QWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgoaW50IGluZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdl
Qml0bWFwLmNwcAppbmRleCAwNWIyNzM3OWYyZDkyMTk0NDg5MzJjNDZhYjMzYjJlZjAzMWFmYzZh
Li41OWJmYzZlMGYxZTU5MDQzZGNjNWJiZGEyZDIyYWFlMzY1YTYxMzE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0ltYWdlQml0bWFwLmNwcApAQCAtMTEyLDEwICsxMTIsOSBAQCB2b2lkIEltYWdlQml0bWFw
OjpjcmVhdGVQcm9taXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQsCiAKIFZlY3RvcjxzdGQ6Om9wdGlvbmFsPEltYWdlQml0bWFwQmFja2luZz4+IEltYWdl
Qml0bWFwOjpkZXRhY2hCaXRtYXBzKFZlY3RvcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiYmIGJpdG1h
cHMpCiB7Ci0gICAgVmVjdG9yPHN0ZDo6b3B0aW9uYWw8SW1hZ2VCaXRtYXBCYWNraW5nPj4gYnVm
ZmVyczsKLSAgICBmb3IgKGF1dG8mIGJpdG1hcCA6IGJpdG1hcHMpCi0gICAgICAgIGJ1ZmZlcnMu
YXBwZW5kKGJpdG1hcC0+dGFrZUltYWdlQml0bWFwQmFja2luZygpKTsKLSAgICByZXR1cm4gYnVm
ZmVyczsKKyAgICByZXR1cm4gV1RGOjptYXAoV1RGTW92ZShiaXRtYXBzKSwgW10oYXV0byYmIGJp
dG1hcCkgeworICAgICAgICByZXR1cm4gYml0bWFwLT50YWtlSW1hZ2VCaXRtYXBCYWNraW5nKCk7
CisgICAgfSk7CiB9CiAKIHZvaWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgSW1hZ2VCaXRtYXA6OlNvdXJj
ZSYmIHNvdXJjZSwgSW1hZ2VCaXRtYXBPcHRpb25zJiYgb3B0aW9ucywgaW50IHN4LCBpbnQgc3ks
IGludCBzdywgaW50IHNoLCBJbWFnZUJpdG1hcDo6UHJvbWlzZSYmIHByb21pc2UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuY3BwCmluZGV4IDYxMTQ2MDI3N2Y2Njc5YTQ5MWUwZjk4MzE3Nzk3MzAwN2ViYmRkYzYuLmY3
MzM2NGYzODYwYzI2YjkzNjYxOGM0ZjdlMWExNzgyNWU4ZDUwMTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3Bw
CkBAIC0zMDIxLDkgKzMwMjEsOCBAQCBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxSZWZQdHI8V2ViR0xT
aGFkZXI+Pj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0YWNoZQogICAgIH07CiAg
ICAgVmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+IHNoYWRlck9iamVjdHM7CiAgICAgZm9yIChh
dXRvIHNoYWRlclR5cGUgOiBzaGFkZXJUeXBlcykgewotICAgICAgICBSZWZQdHI8V2ViR0xTaGFk
ZXI+IHNoYWRlciA9IHByb2dyYW0uZ2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVyVHlwZSk7Ci0gICAg
ICAgIGlmIChzaGFkZXIpCi0gICAgICAgICAgICBzaGFkZXJPYmplY3RzLmFwcGVuZChzaGFkZXIp
OworICAgICAgICBpZiAoUmVmUHRyIHNoYWRlciA9IHByb2dyYW0uZ2V0QXR0YWNoZWRTaGFkZXIo
c2hhZGVyVHlwZSkpCisgICAgICAgICAgICBzaGFkZXJPYmplY3RzLmFwcGVuZChXVEZNb3ZlKHNo
YWRlcikpOwogICAgIH0KICAgICByZXR1cm4gc2hhZGVyT2JqZWN0czsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCmluZGV4
IDhhY2I2OGFmNDU1MWEzOGI3OTljNzEzYWE3NWRjMGY3OTE5MDA0YmUuLjBhNWVkNzhmNDU4Zjk5
YjZiYzdmYzM3MWRmOTRjZmU5MjVhNGQ0ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcApAQCAtODUsMTIgKzg1LDExIEBA
IHN0YXRpYyBTdHJpbmdWaWV3IGV4dHJhY3RDaGFyc2V0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAK
IGJvb2wgSFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpwcm9jZXNzTWV0YShIVE1MVG9rZW4mIHRva2Vu
KQogewotICAgIEF0dHJpYnV0ZUxpc3QgYXR0cmlidXRlczsKLSAgICBmb3IgKGF1dG8mIGF0dHJp
YnV0ZSA6IHRva2VuLmF0dHJpYnV0ZXMoKSkgeworICAgIGF1dG8gYXR0cmlidXRlcyA9IHRva2Vu
LmF0dHJpYnV0ZXMoKS5tYXAoW10oYXV0byYgYXR0cmlidXRlKSB7CiAgICAgICAgIFN0cmluZyBh
dHRyaWJ1dGVOYW1lID0gU3RyaW5nSW1wbDo6Y3JlYXRlOEJpdElmUG9zc2libGUoYXR0cmlidXRl
Lm5hbWUpOwogICAgICAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUgPSBTdHJpbmdJbXBsOjpjcmVh
dGU4Qml0SWZQb3NzaWJsZShhdHRyaWJ1dGUudmFsdWUpOwotICAgICAgICBhdHRyaWJ1dGVzLmFw
cGVuZChzdGQ6Om1ha2VfcGFpcihhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVWYWx1ZSkpOwotICAg
IH0KKyAgICAgICAgcmV0dXJuIHN0ZDo6cGFpciB7IFdURk1vdmUoYXR0cmlidXRlTmFtZSksIFdU
Rk1vdmUoYXR0cmlidXRlVmFsdWUpIH07CisgICAgfSk7CiAKICAgICBtX2VuY29kaW5nID0gZW5j
b2RpbmdGcm9tTWV0YUF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CiAgICAgcmV0dXJuIG1fZW5jb2Rp
bmcuaXNWYWxpZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TFRyZWVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVp
bGRlci5jcHAKaW5kZXggNmI3MWJlZjgxYTdlMjg0NzFlZWZkN2M1MzE1MmE4YTBhODJkMmRiNS4u
YTFmMTY3Y2IwODNjOTk4NDM2MTgzNDExODAyOWYyODVlNDFjMDAwNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCkBAIC0yMjAwLDExICsyMjAw
LDEwIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2hhcmFjdGVyKEF0b21IVE1MVG9r
ZW4mJiB0b2tlbikKIC8vIEZyb20gdGhlIHN0cmluZyA0MDg5OTYxMDEwLCBjcmVhdGVzIGEgbGlu
ayBvZiB0aGUgZm9ybSA8YSBocmVmPSJ0ZWw6NDA4OTk2MTAxMCI+NDA4OTk2MTAxMDwvYT4gYW5k
IGluc2VydHMgaXQuCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6aW5zZXJ0UGhvbmVOdW1iZXJMaW5r
KGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIFZlY3RvcjxBdHRyaWJ1dGU+IGF0dHJpYnV0
ZXM7Ci0gICAgYXR0cmlidXRlcy5hcHBlbmQoQXR0cmlidXRlKEhUTUxOYW1lczo6aHJlZkF0dHIs
IG1ha2VTdHJpbmcoInRlbDoiX3MsIHN0cmluZykpKTsKKyAgICBBdHRyaWJ1dGUgYXR0cmlidXRl
KEhUTUxOYW1lczo6aHJlZkF0dHIsIG1ha2VTdHJpbmcoInRlbDoiX3MsIHN0cmluZykpOwogCiAg
ICAgY29uc3QgQXRvbVN0cmluZyYgYVRhZ0xvY2FsTmFtZSA9IGFUYWctPmxvY2FsTmFtZSgpOwot
ICAgIEF0b21IVE1MVG9rZW4gYVN0YXJ0VG9rZW4oSFRNTFRva2VuOjpTdGFydFRhZywgYVRhZ0xv
Y2FsTmFtZSwgV1RGTW92ZShhdHRyaWJ1dGVzKSk7CisgICAgQXRvbUhUTUxUb2tlbiBhU3RhcnRU
b2tlbihIVE1MVG9rZW46OlN0YXJ0VGFnLCBhVGFnTG9jYWxOYW1lLCB7IFdURk1vdmUoYXR0cmli
dXRlKSB9KTsKICAgICBBdG9tSFRNTFRva2VuIGFFbmRUb2tlbihIVE1MVG9rZW46OkVuZFRhZywg
YVRhZ0xvY2FsTmFtZSk7CiAKICAgICBwcm9jZXNzU3RhcnRUYWcoV1RGTW92ZShhU3RhcnRUb2tl
bikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50
UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNl
ci5jcHAKaW5kZXggNGRhOTU5ZjQwZmU5ZWEzMzc0N2NkMjM4OGNlYjc5ZjZkNzJkYjdlZC4uNDcw
NmYyNmU4NDQwOWVlODEzY2QxM2JjNWY0ZTBhY2NmNjc0YTg2NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwCkBAIC01MSw5ICs1MSw4
IEBAIHZvaWQgVGV4dERvY3VtZW50UGFyc2VyOjppbnNlcnRGYWtlUHJlRWxlbWVudCgpCiAgICAg
Ly8gV2UgY3JlYXRlIGEgZmFrZSB0b2tlbiBhbmQgZ2l2ZSBpdCB0byB0aGUgdHJlZSBidWlsZGVy
IHJhdGhlciB0aGFuCiAgICAgLy8gc2VuZGluZyBmYWtlIGJ5dGVzIHRocm91Z2ggdGhlIGZyb250
LWVuZCBvZiB0aGUgcGFyc2VyIHRvIGF2b2lkCiAgICAgLy8gZGlzdHJ1YmluZyB0aGUgbGluZS9j
b2x1bW4gbnVtYmVyIGNhbGN1bGF0aW9ucy4KLSAgICBWZWN0b3I8QXR0cmlidXRlPiBhdHRyaWJ1
dGVzOwotICAgIGF0dHJpYnV0ZXMuYXBwZW5kKEF0dHJpYnV0ZShzdHlsZUF0dHIsICJ3b3JkLXdy
YXA6IGJyZWFrLXdvcmQ7IHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsiKSk7Ci0gICAgQXRvbUhUTUxU
b2tlbiBmYWtlUHJlKEhUTUxUb2tlbjo6U3RhcnRUYWcsIHByZVRhZy0+bG9jYWxOYW1lKCksIFdU
Rk1vdmUoYXR0cmlidXRlcykpOworICAgIEF0dHJpYnV0ZSBhdHRyaWJ1dGUoc3R5bGVBdHRyLCAi
d29yZC13cmFwOiBicmVhay13b3JkOyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7Iik7CisgICAgQXRv
bUhUTUxUb2tlbiBmYWtlUHJlKEhUTUxUb2tlbjo6U3RhcnRUYWcsIHByZVRhZy0+bG9jYWxOYW1l
KCksIHsgV1RGTW92ZShhdHRyaWJ1dGUpIH0pOwogICAgIHRyZWVCdWlsZGVyKCkuY29uc3RydWN0
VHJlZShXVEZNb3ZlKGZha2VQcmUpKTsKIAogICAgIC8vIE5vcm1hbGx5IHdlIHdvdWxkIHNraXAg
dGhlIGZpcnN0IFxuIGFmdGVyIGEgPHByZT4gZWxlbWVudCwgYnV0IHdlIGRvbid0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29udGVudEZpbHRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvQ29udGVudEZpbHRlci5jcHAKaW5kZXggMjg5ZjMyYTYzNzBkM2NkYzk1OGQ2
MzZlNTg3MGNmNzYzZTEzNzM1Zi4uZmQ5ZTk1YWQwN2ExM2VlZTdhMTJhYjcwNWJlNTcwMWYzMjNj
OTg5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0NvbnRlbnRGaWx0ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Db250ZW50RmlsdGVyLmNwcApAQCAtNjcsMTEg
KzY3LDkgQEAgVmVjdG9yPENvbnRlbnRGaWx0ZXI6OlR5cGU+JiBDb250ZW50RmlsdGVyOjp0eXBl
cygpCiAKIHN0ZDo6dW5pcXVlX3B0cjxDb250ZW50RmlsdGVyPiBDb250ZW50RmlsdGVyOjpjcmVh
dGUoQ29udGVudEZpbHRlckNsaWVudCYgY2xpZW50KQogewotICAgIENvbnRhaW5lciBmaWx0ZXJz
OwotICAgIGZvciAoYXV0byYgdHlwZSA6IHR5cGVzKCkpIHsKLSAgICAgICAgYXV0byBmaWx0ZXIg
PSB0eXBlLmNyZWF0ZSgpOwotICAgICAgICBmaWx0ZXJzLmFwcGVuZChXVEZNb3ZlKGZpbHRlcikp
OwotICAgIH0KKyAgICBhdXRvIGZpbHRlcnMgPSB0eXBlcygpLm1hcChbXShhdXRvJiB0eXBlKSB7
CisgICAgICAgIHJldHVybiB0eXBlLmNyZWF0ZSgpOworICAgIH0pOwogCiAgICAgaWYgKGZpbHRl
cnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVNYW5p
ZmVzdFBhcnNlci5jcHAKaW5kZXggYjg3ZGQ4MzUwNjA3YzI0YmUyNTZlMzQ0MWJlZDJkMzc2N2Uw
OTU1Mi4uNGExMTQ0MjVlMTE2ZDJjNDJkMTkwMzkyM2VkZjg4NjM4M2Q4ZjA2NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVNYW5pZmVz
dFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVNYW5pZmVzdFBhcnNlci5jcHAKQEAgLTE4MCw3ICsxODAsNyBAQCBzdGQ6Om9wdGlv
bmFsPEFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdD4gcGFyc2VBcHBsaWNhdGlvbkNhY2hlTWFuaWZl
c3QoY29uc3QgVVJMJgogICAgICAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZSh1cmwucHJvdG9jb2woKSwgbWFuaWZlc3RVUkwucHJvdG9jb2woKSkpCiAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgbWFuaWZlc3Qub25saW5lQWxsb3dl
ZFVSTHMuYXBwZW5kKHVybCk7CisgICAgICAgICAgICAgICAgbWFuaWZlc3Qub25saW5lQWxsb3dl
ZFVSTHMuYXBwZW5kKFdURk1vdmUodXJsKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUmVzaXplT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZl
ci5jcHAKaW5kZXggOTNkYTFhNDU2MDRlNDUyYTc3NTkzZTE4ZDFmNDczMzYzNDk5NDM2Ny4uNGZm
ZDY5ZDAzNDQxMDliNDdhZmI1ZTUxOTdhYTNmZGZkNDk3ZGVkNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9SZXNpemVPYnNlcnZlci5jcHAKQEAgLTEyNSwxMSArMTI1LDEwIEBAIHNpemVfdCBSZXNpemVP
YnNlcnZlcjo6Z2F0aGVyT2JzZXJ2YXRpb25zKHNpemVfdCBkZWVwZXJUaGFuKQogCiB2b2lkIFJl
c2l6ZU9ic2VydmVyOjpkZWxpdmVyT2JzZXJ2YXRpb25zKCkKIHsKLSAgICBWZWN0b3I8UmVmPFJl
c2l6ZU9ic2VydmVyRW50cnk+PiBlbnRyaWVzOwotICAgIGZvciAoY29uc3QgYXV0byYgb2JzZXJ2
YXRpb24gOiBtX2FjdGl2ZU9ic2VydmF0aW9ucykgeworICAgIGF1dG8gZW50cmllcyA9IG1fYWN0
aXZlT2JzZXJ2YXRpb25zLm1hcChbXShhdXRvJiBvYnNlcnZhdGlvbikgewogICAgICAgICBBU1NF
UlQob2JzZXJ2YXRpb24tPnRhcmdldCgpKTsKLSAgICAgICAgZW50cmllcy5hcHBlbmQoUmVzaXpl
T2JzZXJ2ZXJFbnRyeTo6Y3JlYXRlKG9ic2VydmF0aW9uLT50YXJnZXQoKSwgb2JzZXJ2YXRpb24t
PmNvbXB1dGVDb250ZW50UmVjdCgpLCBvYnNlcnZhdGlvbi0+Ym9yZGVyQm94U2l6ZSgpLCBvYnNl
cnZhdGlvbi0+Y29udGVudEJveFNpemUoKSkpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIFJlc2l6
ZU9ic2VydmVyRW50cnk6OmNyZWF0ZShvYnNlcnZhdGlvbi0+dGFyZ2V0KCksIG9ic2VydmF0aW9u
LT5jb21wdXRlQ29udGVudFJlY3QoKSwgb2JzZXJ2YXRpb24tPmJvcmRlckJveFNpemUoKSwgb2Jz
ZXJ2YXRpb24tPmNvbnRlbnRCb3hTaXplKCkpOworICAgIH0pOwogICAgIG1fYWN0aXZlT2JzZXJ2
YXRpb25zLmNsZWFyKCk7CiAgICAgYXV0byBhY3RpdmVPYnNlcnZhdGlvblRhcmdldHMgPSBzdGQ6
OmV4Y2hhbmdlKG1fYWN0aXZlT2JzZXJ2YXRpb25UYXJnZXRzLCB7IH0pOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9UZXh0SW5kaWNhdG9yLmNwcAppbmRleCAzODdkNTE5YWU1MTcyZDY4MGE1YjI4ODQzYmJl
OGZmOTk2YzZiMzM1Li4wOTliOTFkNTE1MjQ1NWFlNzc3ZTVmZjI1NmIxNTcyNjkwNDMzZWQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKQEAgLTM2MSwxNyArMzYxLDE2IEBA
IHN0YXRpYyBib29sIGluaXRpYWxpemVJbmRpY2F0b3IoVGV4dEluZGljYXRvckRhdGEmIGRhdGEs
IEZyYW1lJiBmcmFtZSwgY29uc3QgU2ltCiAgICAgICAgIHRleHRCb3VuZGluZ1JlY3RJblJvb3RW
aWV3Q29vcmRpbmF0ZXMudW5pdGUodGV4dFJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMpOwogICAg
IH0KIAotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRp
bmF0ZXM7Ci0gICAgZm9yIChhdXRvIHJlY3QgOiB0ZXh0UmVjdHNJblJvb3RWaWV3Q29vcmRpbmF0
ZXMpIHsKKyAgICBhdXRvIHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMgPSB0ZXh0
UmVjdHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMubWFwKFsmXShhdXRvIHJlY3QpIHsKICAgICAgICAg
cmVjdC5tb3ZlQnkoLXRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMubG9jYXRp
b24oKSk7Ci0gICAgICAgIHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMuYXBwZW5k
KHJlY3QpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIHJlY3Q7CisgICAgfSk7CiAKICAgICAvLyBT
dG9yZSB0aGUgc2VsZWN0aW9uIHJlY3QgaW4gd2luZG93IGNvb3JkaW5hdGVzLCB0byBiZSB1c2Vk
IHN1YnNlcXVlbnRseQogICAgIC8vIHRvIGRldGVybWluZSBpZiB0aGUgaW5kaWNhdG9yIGFuZCBz
ZWxlY3Rpb24gc3RpbGwgcHJlY2lzZWx5IG92ZXJsYXAuCiAgICAgZGF0YS5zZWxlY3Rpb25SZWN0
SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gZnJhbWUudmlldygpLT5jb250ZW50c1RvUm9vdFZpZXco
ZW5jbG9zaW5nSW50UmVjdChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25Cb3VuZHMoRnJhbWVT
ZWxlY3Rpb246OkNsaXBUb1Zpc2libGVDb250ZW50OjpObykpKTsKLSAgICBkYXRhLnRleHRCb3Vu
ZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmll
d0Nvb3JkaW5hdGVzOwotICAgIGRhdGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRl
cyA9IHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXM7CisgICAgZGF0YS50ZXh0Qm91
bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gV1RGTW92ZSh0ZXh0Qm91bmRpbmdSZWN0
SW5Sb290Vmlld0Nvb3JkaW5hdGVzKTsKKyAgICBkYXRhLnRleHRSZWN0c0luQm91bmRpbmdSZWN0
Q29vcmRpbmF0ZXMgPSBXVEZNb3ZlKHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMp
OwogCiAgICAgcmV0dXJuIHRha2VTbmFwc2hvdHMoZGF0YSwgZnJhbWUsIGVuY2xvc2luZ0ludFJl
Y3QodGV4dEJvdW5kaW5nUmVjdEluRG9jdW1lbnRDb29yZGluYXRlcyksIGNsaXBwZWRUZXh0UmVj
dHNJbkRvY3VtZW50Q29vcmRpbmF0ZXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Y3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKaW5kZXggNTJmNjIwMTIyYjg1Yzc1MDNlN2Rh
NmE2ODM1YmYzNzU2MTQ5NjdmNC4uOGEyYmE0Y2ZmYTI2ZGNjYmJkMWU3NWVlNTAxMTNhODY2YmU1
YTJmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5
UG9saWN5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQ
b2xpY3kuY3BwCkBAIC0zNDMsMTggKzM0MywxMiBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGlj
eTo6YWxsUG9saWNpZXNBbGxvdyhWaW9sYXRlZERpcmVjdGl2ZUNhbGxiYWNrJiYgY2FsbGJhYwog
c3RhdGljIFZlY3RvcjxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlU3ViUmVzb3Vy
Y2VJbnRlZ3JpdHlJbnRvRGlnZXN0cyhjb25zdCBTdHJpbmcmIHN1YlJlc291cmNlSW50ZWdyaXR5
KQogewogICAgIGF1dG8gZW5jb2RlZERpZ2VzdHMgPSBwYXJzZUludGVncml0eU1ldGFkYXRhKHN1
YlJlc291cmNlSW50ZWdyaXR5KTsKLSAgICBWZWN0b3I8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGln
ZXN0PiBkZWNvZGVkRGlnZXN0czsKLQotICAgIGlmICghZW5jb2RlZERpZ2VzdHMuaGFzX3ZhbHVl
KCkpCisgICAgaWYgKCFlbmNvZGVkRGlnZXN0cykKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAg
IGZvciAoY29uc3QgYXV0byYgZW5jb2RlZERpZ2VzdCA6IGVuY29kZWREaWdlc3RzLnZhbHVlKCkp
IHsKLSAgICAgICAgYXV0byBkZWNvZGVkRGlnZXN0ID0gZGVjb2RlRW5jb2RlZFJlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdChlbmNvZGVkRGlnZXN0KTsKLSAgICAgICAgaWYgKGRlY29kZWREaWdl
c3QuaGFzX3ZhbHVlKCkpCi0gICAgICAgICAgICBkZWNvZGVkRGlnZXN0cy5hcHBlbmQoZGVjb2Rl
ZERpZ2VzdC52YWx1ZSgpKTsKLSAgICAgICAgfQotCi0gICAgcmV0dXJuIGRlY29kZWREaWdlc3Rz
OworICAgIHJldHVybiBXVEY6OmNvbXBhY3RNYXAoKmVuY29kZWREaWdlc3RzLCBbXShhdXRvJiBl
bmNvZGVkRGlnZXN0KSB7CisgICAgICAgIHJldHVybiBkZWNvZGVFbmNvZGVkUmVzb3VyY2VDcnlw
dG9ncmFwaGljRGlnZXN0KGVuY29kZWREaWdlc3QpOworICAgIH0pOwogfQogCiBzdGF0aWMgVmVj
dG9yPENvbnRlbnRTZWN1cml0eVBvbGljeUhhc2g+IGdlbmVyYXRlSGFzaGVzRm9yQ29udGVudChj
b25zdCBTdHJpbmdWaWV3IGNvbnRlbnQsIE9wdGlvblNldDxDb250ZW50U2VjdXJpdHlQb2xpY3lI
YXNoQWxnb3JpdGhtPiBhbGdvcml0aG1zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vRmlsZUNob29zZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29z
ZXIuY3BwCmluZGV4IDhlNGVjZTcwNTNhZThlOThlZmVjY2ZlNzY1MmY4NmNkMjk3NDA0MDQuLjc4
NDI4YzRhYmQzMWU5OWIxMGFhZTQ4ZmJlY2MyYTViOGQ5ZjU4ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHAKQEAgLTUzLDkgKzUzLDcgQEAgdm9pZCBGaWxlQ2hvb3Nl
cjo6aW52YWxpZGF0ZSgpCiAKIHZvaWQgRmlsZUNob29zZXI6OmNob29zZUZpbGUoY29uc3QgU3Ry
aW5nJiBmaWxlbmFtZSkKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXM7Ci0gICAgZmls
ZW5hbWVzLmFwcGVuZChmaWxlbmFtZSk7Ci0gICAgY2hvb3NlRmlsZXMoZmlsZW5hbWVzKTsKKyAg
ICBjaG9vc2VGaWxlcyh7IGZpbGVuYW1lIH0pOwogfQogCiB2b2lkIEZpbGVDaG9vc2VyOjpjaG9v
c2VGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcmVwbGFjZW1lbnROYW1lcykKQEAgLTY4LDkgKzY2LDEwIEBAIHZvaWQgRmlsZUNob29z
ZXI6OmNob29zZUZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIGNvbnN0IFZl
Y3RvcjxTdHJpCiAgICAgICAgIHJldHVybjsKIAogICAgIFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJ
bmZvPiBmaWxlczsKKyAgICBmaWxlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZpbGVuYW1lcy5z
aXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gZmlsZW5hbWVzLnNpemUoKTsg
aSA8IHNpemU7ICsraSkKLSAgICAgICAgZmlsZXMuYXBwZW5kKHsgZmlsZW5hbWVzW2ldLCBpIDwg
cmVwbGFjZW1lbnROYW1lcy5zaXplKCkgPyByZXBsYWNlbWVudE5hbWVzW2ldIDogbnVsbFN0cmlu
ZygpLCB7IH0gfSk7Ci0gICAgbV9jbGllbnQtPmZpbGVzQ2hvc2VuKGZpbGVzKTsKKyAgICAgICAg
ZmlsZXMudW5jaGVja2VkQXBwZW5kKHsgZmlsZW5hbWVzW2ldLCBpIDwgcmVwbGFjZW1lbnROYW1l
cy5zaXplKCkgPyByZXBsYWNlbWVudE5hbWVzW2ldIDogbnVsbFN0cmluZygpLCB7IH0gfSk7Cisg
ICAgbV9jbGllbnQtPmZpbGVzQ2hvc2VuKFdURk1vdmUoZmlsZXMpKTsKIH0KIAogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCkBAIC04NiwxOSArODUsMTkgQEAgdm9pZCBGaWxlQ2hvb3Nlcjo6Y2hv
b3NlTWVkaWFGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBjb25zdCBTdHJp
bmcKICAgICBpZiAoIW1fY2xpZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8Rmls
ZUNob29zZXJGaWxlSW5mbz4gZmlsZXM7Ci0gICAgZm9yIChhdXRvJiBmaWxlbmFtZSA6IGZpbGVu
YW1lcykKLSAgICAgICAgZmlsZXMuYXBwZW5kKHsgZmlsZW5hbWUsIHsgfSwgeyB9IH0pOwotICAg
IG1fY2xpZW50LT5maWxlc0Nob3NlbihmaWxlcywgZGlzcGxheVN0cmluZywgaWNvbik7CisgICAg
YXV0byBmaWxlcyA9IGZpbGVuYW1lcy5tYXAoW10oYXV0byYgZmlsZW5hbWUpIHsKKyAgICAgICAg
cmV0dXJuIEZpbGVDaG9vc2VyRmlsZUluZm8geyBmaWxlbmFtZSwgeyB9LCB7IH0gfTsKKyAgICB9
KTsKKyAgICBtX2NsaWVudC0+ZmlsZXNDaG9zZW4oV1RGTW92ZShmaWxlcyksIGRpc3BsYXlTdHJp
bmcsIGljb24pOwogfQogCiAjZW5kaWYKIAogdm9pZCBGaWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZXMo
Y29uc3QgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+JiBmaWxlcykKIHsKLSAgICBWZWN0b3I8
U3RyaW5nPiBwYXRoczsKLSAgICBmb3IgKGF1dG8mIGZpbGUgOiBmaWxlcykKLSAgICAgICAgcGF0
aHMuYXBwZW5kKGZpbGUucGF0aCk7CisgICAgYXV0byBwYXRocyA9IGZpbGVzLm1hcChbXShhdXRv
JiBmaWxlKSB7CisgICAgICAgIHJldHVybiBmaWxlLnBhdGg7CisgICAgfSk7CiAKICAgICAvLyBG
SVhNRTogVGhpcyBpcyBpbmVsZWdhbnQuIFdlIHNob3VsZCBub3QgYmUgbG9va2luZyBhdCBzZXR0
aW5ncyBoZXJlLgogICAgIGlmIChtX3NldHRpbmdzLnNlbGVjdGVkRmlsZXMgPT0gcGF0aHMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAppbmRleCBkMDlmMTA1MmEwZjMx
ZWU5NzA2MTEwMTNiMzkzNWZiNTMwOTU1MDk2Li5mODdiNmE0ZjYzYjI2YTIxODgyMDZlOTM4YWE1
ODU3OTdhYjM5NWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRC
dWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAK
QEAgLTIwNiw5ICsyMDYsNyBAQCB2b2lkIEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmFwcGVuZChj
b25zdCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyJiBkYXRhKQogdm9pZCBGcmFnbWVudGVkU2hhcmVk
QnVmZmVyOjphcHBlbmQoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCkKIHsKICAg
ICBBU1NFUlQoIW1fY29udGlndW91cyk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvcjsKLSAg
ICB2ZWN0b3IuYXBwZW5kKGRhdGEsIGxlbmd0aCk7Ci0gICAgbV9zZWdtZW50cy5hcHBlbmQoeyBt
X3NpemUsIERhdGFTZWdtZW50OjpjcmVhdGUoV1RGTW92ZSh2ZWN0b3IpKSB9KTsKKyAgICBtX3Nl
Z21lbnRzLmFwcGVuZCh7IG1fc2l6ZSwgRGF0YVNlZ21lbnQ6OmNyZWF0ZShWZWN0b3IgeyBkYXRh
LCBsZW5ndGggfSkgfSk7CiAgICAgbV9zaXplICs9IGxlbmd0aDsKICAgICBBU1NFUlQoaW50ZXJu
YWxseUNvbnNpc3RlbnQoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9UaHJlYWRTYWZlRGF0YUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFk
U2FmZURhdGFCdWZmZXIuaAppbmRleCBkMzk3ZDIyN2RmYzUzNGFkMGNmNTg3MDJiZTFjYTU4MDI0
OTlhMGJiLi42NjI3ZmViY2I3ZjRlMWRhZDgxMTFlMTRhOTEyMTQ0ODgxNjZhOTcyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRTYWZlRGF0YUJ1ZmZlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZFNhZmVEYXRhQnVmZmVyLmgKQEAgLTI1LDYg
KzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5j
bHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCkBAIC0xNDMsNCArMTQ0LDE1IEBAIGJvb2wgVGhyZWFkU2FmZURhdGFCdWZmZXI6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgcmVzdWx0CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKK2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgVGhy
ZWFkU2FmZURhdGFCdWZmZXImIGJ1ZmZlcikKK3sKKyAgICBhdXRvKiBkYXRhID0gYnVmZmVyLmRh
dGEoKTsKKyAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAgYWRkKGhhc2hlciwgdHJ1ZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgYWRkKGhhc2hlciwgZmFsc2UpOworICAgIGFkZChoYXNo
ZXIsICpkYXRhKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuY3Bw
CmluZGV4IDFjZjM5Y2FjZjMwMjQ1MDhlOGQxMmU4NjQ1YzUwODY3NzIxOTQzNWIuLmQ4YzM0ZmEz
NzY5NTA3MjUyNTQ3NDE4ZmU1ZTg0NGZmZTJjMzA4N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHAKQEAg
LTU2LDggKzU2LDkgQEAgdm9pZCBBdWRpb0RTUEtlcm5lbFByb2Nlc3Nvcjo6aW5pdGlhbGl6ZSgp
CiAgICAgICAgIERpc2FibGVNYWxsb2NSZXN0cmljdGlvbnNGb3JDdXJyZW50VGhyZWFkU2NvcGUg
ZGlzYWJsZU1hbGxvY1Jlc3RyaWN0aW9uczsKIAogICAgICAgICAvLyBDcmVhdGUgcHJvY2Vzc2lu
ZyBrZXJuZWxzLCBvbmUgcGVyIGNoYW5uZWwuCisgICAgICAgIG1fa2VybmVscy5yZXNlcnZlQ2Fw
YWNpdHkobV9rZXJuZWxzLmNhcGFjaXR5KCkgKyBudW1iZXJPZkNoYW5uZWxzKCkpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVscygpOyArK2kpCi0gICAg
ICAgICAgICBtX2tlcm5lbHMuYXBwZW5kKGNyZWF0ZUtlcm5lbCgpKTsKKyAgICAgICAgICAgIG1f
a2VybmVscy51bmNoZWNrZWRBcHBlbmQoY3JlYXRlS2VybmVsKCkpOwogICAgIH0KICAgICBtX2lu
aXRpYWxpemVkID0gdHJ1ZTsKICAgICBtX2hhc0p1c3RSZXNldCA9IHRydWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1Jlc2FtcGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1Jlc2FtcGxlci5jcHAKaW5kZXggZGU1MDhj
YzZlZjRhNWIwMWJkNGViMjI0NzQ1YjdlZjI4Mjg0MGY4ZS4uNzQ2OWNlNGRlM2YzYzE4ODg5Mjhm
NTQ5N2QxMmNlNTZkYjZlNmQyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vQXVkaW9SZXNhbXBsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL0F1ZGlvUmVzYW1wbGVyLmNwcApAQCAtNDIsOCArNDIsOSBAQCBBdWRpb1Jlc2FtcGxlcjo6
QXVkaW9SZXNhbXBsZXIoKQogCiBBdWRpb1Jlc2FtcGxlcjo6QXVkaW9SZXNhbXBsZXIodW5zaWdu
ZWQgbnVtYmVyT2ZDaGFubmVscykKIHsKKyAgICBtX2tlcm5lbHMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShudW1iZXJPZkNoYW5uZWxzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
YmVyT2ZDaGFubmVsczsgKytpKQotICAgICAgICBtX2tlcm5lbHMuYXBwZW5kKG1ha2VVbmlxdWU8
QXVkaW9SZXNhbXBsZXJLZXJuZWw+KHRoaXMpKTsKKyAgICAgICAgbV9rZXJuZWxzLnVuY2hlY2tl
ZEFwcGVuZChtYWtlVW5pcXVlPEF1ZGlvUmVzYW1wbGVyS2VybmVsPih0aGlzKSk7CiAKICAgICBt
X3NvdXJjZUJ1cyA9IEF1ZGlvQnVzOjpjcmVhdGUobnVtYmVyT2ZDaGFubmVscywgMCwgZmFsc2Up
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3ND
b21wcmVzc29yS2VybmVsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFt
aWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAKaW5kZXggOWYzMTgxY2ZiYjQwMjI3Nzc5OTYyM2I5YmZk
ZGNkZDQ5NTljMDBiMC4uYzFjN2E1Nzc1YWZmZDUxMzkyNWI1N2RkYjE1Njc2Yzc4NTlhNzllOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVz
c29yS2VybmVsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWlj
c0NvbXByZXNzb3JLZXJuZWwuY3BwCkBAIC02MCw5ICs2MCwxMCBAQCB2b2lkIER5bmFtaWNzQ29t
cHJlc3Nvcktlcm5lbDo6c2V0TnVtYmVyT2ZDaGFubmVscyh1bnNpZ25lZCBudW1iZXJPZkNoYW5u
ZWxzKQogICAgIGlmIChtX3ByZURlbGF5QnVmZmVycy5zaXplKCkgPT0gbnVtYmVyT2ZDaGFubmVs
cykKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcmVEZWxheUJ1ZmZlcnMuY2xlYXIoKTsKKyAg
ICBtX3ByZURlbGF5QnVmZmVycy5zaHJpbmsoMCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkKICAgICAgICAgbV9wcmVEZWxheUJ1ZmZlcnMuYXBw
ZW5kKG1ha2VVbmlxdWU8QXVkaW9GbG9hdEFycmF5PihNYXhQcmVEZWxheUZyYW1lcykpOworICAg
IG1fcHJlRGVsYXlCdWZmZXJzLnNocmlua1RvRml0KCk7CiB9CiAKIHZvaWQgRHluYW1pY3NDb21w
cmVzc29yS2VybmVsOjpzZXRQcmVEZWxheVRpbWUoZmxvYXQgcHJlRGVsYXlUaW1lKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTXVsdGlDaGFubmVsUmVzYW1wbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL011bHRpQ2hhbm5lbFJlc2FtcGxl
ci5jcHAKaW5kZXggYjk2NmZhMDZjZDMwZWIzNGRmNzFmY2ZiZGU3YzE2NTgyMzExMTIxZi4uMTcw
MjNiNjQyNjFiZGZkMzc1ZWUwOWZlMjk2YjNiZGE4ODI3ZjJlOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTXVsdGlDaGFubmVsUmVzYW1wbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NdWx0aUNoYW5uZWxSZXNhbXBsZXIuY3BwCkBA
IC01Myw4ICs1Myw5IEBAIE11bHRpQ2hhbm5lbFJlc2FtcGxlcjo6TXVsdGlDaGFubmVsUmVzYW1w
bGVyKGRvdWJsZSBzY2FsZUZhY3RvciwgdW5zaWduZWQgbnVtYmVyCiAgICAgfQogCiAgICAgLy8g
Q3JlYXRlIGVhY2ggY2hhbm5lbCdzIHJlc2FtcGxlci4KKyAgICBtX2tlcm5lbHMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShudW1iZXJPZkNoYW5uZWxzKTsKICAgICBmb3IgKHVuc2lnbmVkIGNoYW5u
ZWxJbmRleCA9IDA7IGNoYW5uZWxJbmRleCA8IG51bWJlck9mQ2hhbm5lbHM7ICsrY2hhbm5lbElu
ZGV4KQotICAgICAgICBtX2tlcm5lbHMuYXBwZW5kKG1ha2VVbmlxdWU8U2luY1Jlc2FtcGxlcj4o
c2NhbGVGYWN0b3IsIHJlcXVlc3RGcmFtZXMsIHN0ZDo6YmluZCgmTXVsdGlDaGFubmVsUmVzYW1w
bGVyOjpwcm92aWRlSW5wdXRGb3JDaGFubmVsLCB0aGlzLCBzdGQ6OnBsYWNlaG9sZGVyczo6XzEs
IHN0ZDo6cGxhY2Vob2xkZXJzOjpfMiwgY2hhbm5lbEluZGV4KSkpOworICAgICAgICBtX2tlcm5l
bHMudW5jaGVja2VkQXBwZW5kKG1ha2VVbmlxdWU8U2luY1Jlc2FtcGxlcj4oc2NhbGVGYWN0b3Is
IHJlcXVlc3RGcmFtZXMsIHN0ZDo6YmluZCgmTXVsdGlDaGFubmVsUmVzYW1wbGVyOjpwcm92aWRl
SW5wdXRGb3JDaGFubmVsLCB0aGlzLCBzdGQ6OnBsYWNlaG9sZGVyczo6XzEsIHN0ZDo6cGxhY2Vo
b2xkZXJzOjpfMiwgY2hhbm5lbEluZGV4KSkpOwogfQogCiBNdWx0aUNoYW5uZWxSZXNhbXBsZXI6
On5NdWx0aUNoYW5uZWxSZXNhbXBsZXIoKSA9IGRlZmF1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50Lm1tCmluZGV4IDA1ZWEyMTExZWI1ZDQ1M2NiMjhkOGU3N2VmM2NiZjVmMzU2NzE5
ODkuLmZhMzBhZmRlM2IxZTFlMzZlODYxYWVjYmQ5ZmJlOGM3ZjA5MDM1NmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFF
bGVtZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tCkBAIC01MzQsMTQgKzUzNCwxMiBAQCBWZWN0b3I8TWVk
aWFTZWxlY3Rpb25PcHRpb24+IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsZWdp
YmxlTWVkaWFTZWxlYwogICAgIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gbGVnaWJsZU9w
dGlvbnM7CiAKICAgICBpZiAoIW1fbWVkaWFFbGVtZW50IHx8ICFtX21lZGlhRWxlbWVudC0+ZG9j
dW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJldHVybiBsZWdpYmxlT3B0aW9uczsKKyAgICAgICAg
cmV0dXJuIHsgfTsKIAogICAgIGF1dG8mIGNhcHRpb25QcmVmZXJlbmNlcyA9IG1fbWVkaWFFbGVt
ZW50LT5kb2N1bWVudCgpLnBhZ2UoKS0+Z3JvdXAoKS5lbnN1cmVDYXB0aW9uUHJlZmVyZW5jZXMo
KTsKLQotICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX2xlZ2libGVUcmFja3NGb3JNZW51KQotICAg
ICAgICBsZWdpYmxlT3B0aW9ucy5hcHBlbmQoY2FwdGlvblByZWZlcmVuY2VzLm1lZGlhU2VsZWN0
aW9uT3B0aW9uRm9yVHJhY2sodHJhY2suZ2V0KCkpKTsKLQotICAgIHJldHVybiBsZWdpYmxlT3B0
aW9uczsKKyAgICByZXR1cm4gbV9sZWdpYmxlVHJhY2tzRm9yTWVudS5tYXAoWyZdKGF1dG8mIHRy
YWNrKSB7CisgICAgICAgIHJldHVybiBjYXB0aW9uUHJlZmVyZW5jZXMubWVkaWFTZWxlY3Rpb25P
cHRpb25Gb3JUcmFjayh0cmFjay5nZXQoKSk7CisgICAgfSk7CiB9CiAKIHVpbnQ2NF90IFBsYXli
YWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL0R1
YWxzaG9jazNISURHYW1lcGFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQv
bWFjL0R1YWxzaG9jazNISURHYW1lcGFkLmNwcAppbmRleCA2YzQwZThiODg5Mjg3M2ZmMDcyMDYx
OGNmZTgzOTY0YzgwZWMzNDFlLi5jMGY1MTgxYmM0NGIxYmRjZWJhNjliOGNiNmEzNGE5ZWExMjdk
ZjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9EdWFs
c2hvY2szSElER2FtZXBhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBh
ZC9tYWMvRHVhbHNob2NrM0hJREdhbWVwYWQuY3BwCkBAIC00MywxMiArNDMsMTAgQEAgRHVhbHNo
b2NrM0hJREdhbWVwYWQ6OkR1YWxzaG9jazNISURHYW1lcGFkKEhJRERldmljZSYmIGRldmljZSwg
dW5zaWduZWQgaW5kZXgpCiAKICAgICBtX21hcHBpbmcgPSBzdGFuZGFyZEdhbWVwYWRNYXBwaW5n
U3RyaW5nKCk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mU3RhbmRhcmRH
YW1lcGFkQnV0dG9uc1dpdGhIb21lQnV0dG9uOyArK2kpCi0gICAgICAgIG1fYnV0dG9uVmFsdWVz
LmFwcGVuZCgwLjApOworICAgIG1fYnV0dG9uVmFsdWVzID0gVmVjdG9yKG51bWJlck9mU3RhbmRh
cmRHYW1lcGFkQnV0dG9uc1dpdGhIb21lQnV0dG9uLCBTaGFyZWRHYW1lcGFkVmFsdWUgeyAwLjAg
fSk7CiAKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF4aXNDb3VudCA9IDQ7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBheGlzQ291bnQ7ICsraSkKLSAgICAgICAgbV9heGlzVmFsdWVzLmFw
cGVuZCgwLjApOworICAgIGNvbnN0ZXhwciBzaXplX3QgYXhpc0NvdW50ID0gNDsKKyAgICBtX2F4
aXNWYWx1ZXMgPSBWZWN0b3IoYXhpc0NvdW50LCBTaGFyZWRHYW1lcGFkVmFsdWUgeyAwLjAgfSk7
CiAKICAgICBhdXRvIGlucHV0RWxlbWVudHMgPSBoaWREZXZpY2UoKS51bmlxdWVJbnB1dEVsZW1l
bnRzSW5EZXZpY2VUcmVlT3JkZXIoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ2FtZXBhZC9tYWMvTG9naXRlY2hHYW1lcGFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dhbWVwYWQvbWFjL0xvZ2l0ZWNoR2FtZXBhZC5jcHAKaW5kZXggNjcxNDNmYjk5NWJh
MmMzZTY4ZGQyMTFkMTY1YmU2MjBjZWY3ODllZi4uNzgwZDRhM2Y5ZWEyNTNiYmQ3ZTcyYzRmYmZj
ZDA1ZmVlMDMyMWE4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBh
ZC9tYWMvTG9naXRlY2hHYW1lcGFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
YW1lcGFkL21hYy9Mb2dpdGVjaEdhbWVwYWQuY3BwCkBAIC00MywxMiArNDMsMTAgQEAgTG9naXRl
Y2hHYW1lcGFkOjpMb2dpdGVjaEdhbWVwYWQoSElERGV2aWNlJiYgZGV2aWNlLCB1bnNpZ25lZCBp
bmRleCkKIAogICAgIG1fbWFwcGluZyA9IHN0YW5kYXJkR2FtZXBhZE1hcHBpbmdTdHJpbmcoKTsK
IAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZTdGFuZGFyZEdhbWVwYWRCdXR0
b25zV2l0aG91dEhvbWVCdXR0b247ICsraSkKLSAgICAgICAgbV9idXR0b25WYWx1ZXMuYXBwZW5k
KDAuMCk7CisgICAgbV9idXR0b25WYWx1ZXMgPSBWZWN0b3IobnVtYmVyT2ZTdGFuZGFyZEdhbWVw
YWRCdXR0b25zV2l0aG91dEhvbWVCdXR0b24sIFNoYXJlZEdhbWVwYWRWYWx1ZSB7IDAuMCB9KTsK
IAotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYXhpc0NvdW50ID0gNDsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGF4aXNDb3VudDsgKytpKQotICAgICAgICBtX2F4aXNWYWx1ZXMuYXBwZW5k
KDAuMCk7CisgICAgY29uc3RleHByIHNpemVfdCBheGlzQ291bnQgPSA0OworICAgIG1fYXhpc1Zh
bHVlcyA9IFZlY3RvcihheGlzQ291bnQsIFNoYXJlZEdhbWVwYWRWYWx1ZSB7IDAuMCB9KTsKIAog
ICAgIGF1dG8gaW5wdXRFbGVtZW50cyA9IGhpZERldmljZSgpLnVuaXF1ZUlucHV0RWxlbWVudHNJ
bkRldmljZVRyZWVPcmRlcigpOwogCkBAIC01OSwxMSArNTcsMTIgQEAgTG9naXRlY2hHYW1lcGFk
OjpMb2dpdGVjaEdhbWVwYWQoSElERGV2aWNlJiYgZGV2aWNlLCB1bnNpZ25lZCBpbmRleCkKICAg
ICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBpbnB1dEVsZW1lbnRzKSB7CiAgICAgICAgIHN3aXRjaCAo
ZWxlbWVudC5mdWxsVXNhZ2UoKSkgewogICAgICAgICBjYXNlIGhpZEhhdHN3aXRjaEZ1bGxVc2Fn
ZTogewotICAgICAgICAgICAgVmVjdG9yPFNoYXJlZEdhbWVwYWRWYWx1ZT4gaGF0c3dpdGNoVmFs
dWVzOwotICAgICAgICAgICAgaGF0c3dpdGNoVmFsdWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1so
c2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlclRvcF0pOwotICAgICAgICAgICAg
aGF0c3dpdGNoVmFsdWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0
b25Sb2xlOjpMZWZ0Q2x1c3RlclJpZ2h0XSk7Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMu
YXBwZW5kKG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVz
dGVyQm90dG9tXSk7Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9u
VmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyTGVmdF0pOworICAg
ICAgICAgICAgYXV0byBoYXRzd2l0Y2hWYWx1ZXMgPSBWZWN0b3I8U2hhcmVkR2FtZXBhZFZhbHVl
Pjo6ZnJvbSgKKyAgICAgICAgICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRC
dXR0b25Sb2xlOjpMZWZ0Q2x1c3RlclRvcF0sCisgICAgICAgICAgICAgICAgbV9idXR0b25WYWx1
ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJSaWdodF0sCisgICAgICAg
ICAgICAgICAgbV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENs
dXN0ZXJCb3R0b21dLAorICAgICAgICAgICAgICAgIG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2Ft
ZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyTGVmdF0KKyAgICAgICAgICAgICk7CiAKICAgICAg
ICAgICAgIG1fZWxlbWVudE1hcC5zZXQoZWxlbWVudC5jb29raWUoKSwgbWFrZVVuaXF1ZTxISURH
YW1lcGFkSGF0c3dpdGNoPihlbGVtZW50LCBXVEZNb3ZlKGhhdHN3aXRjaFZhbHVlcykpKTsKICAg
ICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2Ft
ZXBhZC9tYWMvU3RhZGlhSElER2FtZXBhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
YW1lcGFkL21hYy9TdGFkaWFISURHYW1lcGFkLmNwcAppbmRleCAwYTk0ZTU2MjMzYTIwNDQ2NDFm
MTAwZjA1NjQ0ZDU3NWFkYmM5ZTczLi4zNzUyMTM0NDY0Yzc4NTY3Y2I2YmUxOGYwMGVhNTdmODlh
YjdiZDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9T
dGFkaWFISURHYW1lcGFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFk
L21hYy9TdGFkaWFISURHYW1lcGFkLmNwcApAQCAtNDEsMTIgKzQxLDEwIEBAIFN0YWRpYUhJREdh
bWVwYWQ6OlN0YWRpYUhJREdhbWVwYWQoSElERGV2aWNlJiYgZGV2aWNlLCB1bnNpZ25lZCBpbmRl
eCkKIAogICAgIG1fbWFwcGluZyA9IHN0YW5kYXJkR2FtZXBhZE1hcHBpbmdTdHJpbmcoKTsKIAot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTk7ICsraSkKLSAgICAgICAgbV9idXR0b25WYWx1
ZXMuYXBwZW5kKDAuMCk7CisgICAgbV9idXR0b25WYWx1ZXMgPSBWZWN0b3IoMTksIFNoYXJlZEdh
bWVwYWRWYWx1ZSB7IDAuMCB9KTsKIAotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYXhpc0NvdW50
ID0gNDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF4aXNDb3VudDsgKytpKQotICAgICAg
ICBtX2F4aXNWYWx1ZXMuYXBwZW5kKDAuMCk7CisgICAgY29uc3RleHByIHNpemVfdCBheGlzQ291
bnQgPSA0OworICAgIG1fYXhpc1ZhbHVlcyA9IFZlY3RvcihheGlzQ291bnQsIFNoYXJlZEdhbWVw
YWRWYWx1ZSB7IDAuMCB9KTsKIAogICAgIGF1dG8gaW5wdXRFbGVtZW50cyA9IGhpZERldmljZSgp
LnVuaXF1ZUlucHV0RWxlbWVudHNJbkRldmljZVRyZWVPcmRlcigpOwogCkBAIC03MCwxMSArNjgs
MTIgQEAgU3RhZGlhSElER2FtZXBhZDo6U3RhZGlhSElER2FtZXBhZChISUREZXZpY2UmJiBkZXZp
Y2UsIHVuc2lnbmVkIGluZGV4KQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBo
aWRIYXRzd2l0Y2hGdWxsVXNhZ2U6IHsKLSAgICAgICAgICAgIFZlY3RvcjxTaGFyZWRHYW1lcGFk
VmFsdWU+IGhhdHN3aXRjaFZhbHVlczsKLSAgICAgICAgICAgIGhhdHN3aXRjaFZhbHVlcy5hcHBl
bmQobV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJU
b3BdKTsKLSAgICAgICAgICAgIGhhdHN3aXRjaFZhbHVlcy5hcHBlbmQobV9idXR0b25WYWx1ZXNb
KHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJSaWdodF0pOwotICAgICAgICAg
ICAgaGF0c3dpdGNoVmFsdWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRC
dXR0b25Sb2xlOjpMZWZ0Q2x1c3RlckJvdHRvbV0pOwotICAgICAgICAgICAgaGF0c3dpdGNoVmFs
dWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0
Q2x1c3RlckxlZnRdKTsKKyAgICAgICAgICAgIGF1dG8gaGF0c3dpdGNoVmFsdWVzID0gVmVjdG9y
PFNoYXJlZEdhbWVwYWRWYWx1ZT46OmZyb20oCisgICAgICAgICAgICAgICAgbV9idXR0b25WYWx1
ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJUb3BdLAorICAgICAgICAg
ICAgICAgIG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVz
dGVyUmlnaHRdLAorICAgICAgICAgICAgICAgIG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBh
ZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyQm90dG9tXSwKKyAgICAgICAgICAgICAgICBtX2J1dHRv
blZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlckxlZnRdCisgICAg
ICAgICAgICApOwogCiAgICAgICAgICAgICBtX2VsZW1lbnRNYXAuc2V0KGVsZW1lbnQuY29va2ll
KCksIG1ha2VVbmlxdWU8SElER2FtZXBhZEhhdHN3aXRjaD4oZWxlbWVudCwgV1RGTW92ZShoYXRz
d2l0Y2hWYWx1ZXMpKSk7CiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKaW5kZXggMWZlZTI5YWU1Zjcx
OWM0ZTU1NGEyYzdlNzBjYjcwZjAxZjliMjAwMi4uNzI0ZmIxN2MzM2Y0YmNhNDY4ODljODNiYzU1
ODQ4ZmQ3MjcwYzMyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NMYXllci5jcHAKQEAgLTc2MywxMSArNzYzLDkgQEAgdm9pZCBHcmFwaGljc0xh
eWVyOjphZGRSZXBhaW50UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlcGFpbnRSZWN0KQogICAgIEZs
b2F0UmVjdCBsYXJnZXN0UmVwYWludFJlY3QoRmxvYXRQb2ludCgpLCBtX3NpemUpOwogICAgIGxh
cmdlc3RSZXBhaW50UmVjdC5pbnRlcnNlY3QocmVwYWludFJlY3QpOwogICAgIFJlcGFpbnRNYXA6
Oml0ZXJhdG9yIHJlcGFpbnRJdCA9IHJlcGFpbnRSZWN0TWFwKCkuZmluZCh0aGlzKTsKLSAgICBp
ZiAocmVwYWludEl0ID09IHJlcGFpbnRSZWN0TWFwKCkuZW5kKCkpIHsKLSAgICAgICAgVmVjdG9y
PEZsb2F0UmVjdD4gcmVwYWludFJlY3RzOwotICAgICAgICByZXBhaW50UmVjdHMuYXBwZW5kKGxh
cmdlc3RSZXBhaW50UmVjdCk7Ci0gICAgICAgIHJlcGFpbnRSZWN0TWFwKCkuc2V0KHRoaXMsIHJl
cGFpbnRSZWN0cyk7Ci0gICAgfSBlbHNlIHsKKyAgICBpZiAocmVwYWludEl0ID09IHJlcGFpbnRS
ZWN0TWFwKCkuZW5kKCkpCisgICAgICAgIHJlcGFpbnRSZWN0TWFwKCkuc2V0KHRoaXMsIFZlY3Rv
ciB7IFdURk1vdmUobGFyZ2VzdFJlcGFpbnRSZWN0KSB9KTsKKyAgICBlbHNlIHsKICAgICAgICAg
VmVjdG9yPEZsb2F0UmVjdD4mIHJlcGFpbnRSZWN0cyA9IHJlcGFpbnRJdC0+dmFsdWU7CiAgICAg
ICAgIHJlcGFpbnRSZWN0cy5hcHBlbmQobGFyZ2VzdFJlcGFpbnRSZWN0KTsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuY3BwCmlu
ZGV4IGI5Nzk5YTRkMTA2MWVkMjBhMWI1MGVkNTA2ODY1MWM1ZmVhNDY2YTQuLjc3ZGM5ODM1ZDU2
MTJmNjY4MTcyNGY3Yjc2Y2JhMTAzOTZjN2MzODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuY3BwCkBAIC0yOTAsMTcgKzI5MCwxNCBA
QCBzdGF0aWMgVmVjdG9yPEZsb2F0UG9pbnRHcmFwaDo6UG9seWdvbj4gcG9seWdvbnNGb3JSZWN0
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JgogCiBWZWN0b3I8UGF0aD4gUGF0aFV0aWxpdGllczo6
cGF0aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0
cywgZmxvYXQgcmFkaXVzKQogewotICAgIFZlY3RvcjxQYXRoPiBwYXRoczsKLQogICAgIGlmIChy
ZWN0cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBwYXRoczsKKyAgICAgICAgcmV0dXJuIHsg
fTsKIAogICAgIGlmIChyZWN0cy5zaXplKCkgPiAyMCkgewogICAgICAgICBQYXRoIHBhdGg7CiAg
ICAgICAgIGZvciAoY29uc3QgYXV0byYgcmVjdCA6IHJlY3RzKQogICAgICAgICAgICAgcGF0aC5h
ZGRSb3VuZGVkUmVjdChyZWN0LCBGbG9hdFNpemUocmFkaXVzLCByYWRpdXMpKTsKLSAgICAgICAg
cGF0aHMuYXBwZW5kKHBhdGgpOwotICAgICAgICByZXR1cm4gcGF0aHM7CisgICAgICAgIHJldHVy
biB7IFdURk1vdmUocGF0aCkgfTsKICAgICB9CiAKICAgICBGbG9hdFBvaW50R3JhcGggZ3JhcGg7
CkBAIC0zMDksMTAgKzMwNiwxMCBAQCBWZWN0b3I8UGF0aD4gUGF0aFV0aWxpdGllczo6cGF0aHNX
aXRoU2hyaW5rV3JhcHBlZFJlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JgogICAgICAgICBQ
YXRoIHBhdGg7CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgcmVjdCA6IHJlY3RzKQogICAgICAg
ICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0LCBGbG9hdFNpemUocmFkaXVzLCByYWRpdXMp
KTsKLSAgICAgICAgcGF0aHMuYXBwZW5kKHBhdGgpOwotICAgICAgICByZXR1cm4gcGF0aHM7Cisg
ICAgICAgIHJldHVybiB7IFdURk1vdmUocGF0aCkgfTsKICAgICB9CiAKKyAgICBWZWN0b3I8UGF0
aD4gcGF0aHM7CiAgICAgZm9yIChhdXRvJiBwb2x5IDogcG9seXMpIHsKICAgICAgICAgUGF0aCBw
YXRoOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9seS5zaXplKCk7ICsraSkg
ewpAQCAtMzQ0LDcgKzM0MSw3IEBAIFZlY3RvcjxQYXRoPiBQYXRoVXRpbGl0aWVzOjpwYXRoc1dp
dGhTaHJpbmtXcmFwcGVkUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mCiAgICAgICAgICAg
ICBwYXRoLmFkZEFyY1RvKCpmcm9tRWRnZS5zZWNvbmQsICp0b0VkZ2UuZmlyc3QgKyB0b09mZnNl
dCwgY2xhbXBlZFJhZGl1cyk7CiAgICAgICAgIH0KICAgICAgICAgcGF0aC5jbG9zZVN1YnBhdGgo
KTsKLSAgICAgICAgcGF0aHMuYXBwZW5kKHBhdGgpOworICAgICAgICBwYXRocy5hcHBlbmQoV1RG
TW92ZShwYXRoKSk7CiAgICAgfQogICAgIHJldHVybiBwYXRoczsKIH0KQEAgLTU0MywxMyArNTQw
LDE0IEBAIFBhdGggUGF0aFV0aWxpdGllczo6cGF0aFdpdGhTaHJpbmtXcmFwcGVkUmVjdHNGb3JP
dXRsaW5lKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+CiAgICAgYm90dG9tTGVmdFJhZGl1cyA9IGZp
cnN0TGluZVJhZGlpLmJvdHRvbUxlZnQoKTsKICAgICB0b3BSaWdodFJhZGl1cyA9IGxhc3RMaW5l
UmFkaWkudG9wUmlnaHQoKTsKICAgICBib3R0b21SaWdodFJhZGl1cyA9IGxhc3RMaW5lUmFkaWku
Ym90dG9tUmlnaHQoKTsKLSAgICBWZWN0b3I8RmxvYXRQb2ludD4gY29ybmVyczsKICAgICAvLyBw
aHlzaWNhbCB0b3BMZWZ0L3RvcFJpZ2h0L2JvdHRvbVJpZ2h0L2JvdHRvbUxlZnQKICAgICBhdXRv
IGlzSG9yaXpvbnRhbCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsKLSAg
ICBjb3JuZXJzLmFwcGVuZChmaXJzdExpbmVSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotICAgIGNv
cm5lcnMuYXBwZW5kKGlzSG9yaXpvbnRhbCA/IGxhc3RMaW5lUmVjdC5tYXhYTWluWUNvcm5lcigp
IDogZmlyc3RMaW5lUmVjdC5tYXhYTWluWUNvcm5lcigpKTsKLSAgICBjb3JuZXJzLmFwcGVuZChs
YXN0TGluZVJlY3QubWF4WE1heFlDb3JuZXIoKSk7Ci0gICAgY29ybmVycy5hcHBlbmQoaXNIb3Jp
em9udGFsID8gZmlyc3RMaW5lUmVjdC5taW5YTWF4WUNvcm5lcigpIDogbGFzdExpbmVSZWN0Lm1p
blhNYXhZQ29ybmVyKCkpOworICAgIGF1dG8gY29ybmVycyA9IFZlY3RvcjxGbG9hdFBvaW50Pjo6
ZnJvbSgKKyAgICAgICAgZmlyc3RMaW5lUmVjdC5taW5YTWluWUNvcm5lcigpLAorICAgICAgICBp
c0hvcml6b250YWwgPyBsYXN0TGluZVJlY3QubWF4WE1pbllDb3JuZXIoKSA6IGZpcnN0TGluZVJl
Y3QubWF4WE1pbllDb3JuZXIoKSwKKyAgICAgICAgbGFzdExpbmVSZWN0Lm1heFhNYXhZQ29ybmVy
KCksCisgICAgICAgIGlzSG9yaXpvbnRhbCA/IGZpcnN0TGluZVJlY3QubWluWE1heFlDb3JuZXIo
KSA6IGxhc3RMaW5lUmVjdC5taW5YTWF4WUNvcm5lcigpCisgICAgKTsKIAogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBwb2x5LnNpemUoKTsgKytpKSB7CiAgICAgICAgIGF1dG8gbW92ZU9y
QWRkTGluZVRvID0gW2ksICZwYXRoXSAoY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclBy
aXZhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVy
UHJpdmF0ZS5jcHAKaW5kZXggNTQ5OWYzN2E3ZjM2NDZiZDVmMzk1YTQ4YjA5ZDk0MTFkNGM5YjY2
NC4uMDRjYmU0ZDI3ZjE5MGI3YjI3YjljYTdlOThhOWM0NzE3M2QyZjg5YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0
ZS5jcHAKQEAgLTIxNiwxMCArMjE2LDkgQEAgdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlOjpidWZm
ZXJlZFNhbXBsZXNGb3JUcmFja0lkKGNvbnN0IEF0b21TdHJpbmcmIHRyYWNrSWQsIEMKICAgICBp
ZiAoIXRyYWNrQnVmZmVyKQogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogCi0gICAg
VmVjdG9yPFN0cmluZz4gc2FtcGxlRGVzY3JpcHRpb25zOwotICAgIGZvciAoYXV0byYgcGFpciA6
IHRyYWNrQnVmZmVyLT5zYW1wbGVzLmRlY29kZU9yZGVyKCkpCi0gICAgICAgIHNhbXBsZURlc2Ny
aXB0aW9ucy5hcHBlbmQodG9TdHJpbmcoKnBhaXIuc2Vjb25kKSk7Ci0KKyAgICBhdXRvIHNhbXBs
ZURlc2NyaXB0aW9ucyA9IFdURjo6bWFwKHRyYWNrQnVmZmVyLT5zYW1wbGVzLmRlY29kZU9yZGVy
KCksIFtdKGF1dG8mIGVudHJ5KSB7CisgICAgICAgIHJldHVybiB0b1N0cmluZygqZW50cnkuc2Vj
b25kKTsKKyAgICB9KTsKICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHNhbXBsZURlc2Ny
aXB0aW9ucykpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNw
cAppbmRleCA4YjA0ZjliZTk2YzM2ZTBhMjYyMTgwYTI1ZWEzNzQ1OTYyYjNkN2Q1Li5jNTQ2MTQ2
MjNiODdlYzA4OTYxZjFkNDQyMGY5NjAxZjE2YTZhYjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9D
RE1GYWlyUGxheVN0cmVhbWluZy5jcHAKQEAgLTIwMSw5ICsyMDEsNyBAQCBSZWZQdHI8RnJhZ21l
bnRlZFNoYXJlZEJ1ZmZlcj4gQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpzYW5pdGl6ZVNr
ZChjb25zdCBGcgogc3RkOjpvcHRpb25hbDxWZWN0b3I8UmVmPEZyYWdtZW50ZWRTaGFyZWRCdWZm
ZXI+Pj4gQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpleHRyYWN0S2V5SURzU2tkKGNvbnN0
IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXImIGJ1ZmZlcikKIHsKICAgICAvLyBJbiB0aGUgJ3NrZCcg
c2NoZW1lLCB0aGUgaW5pdCBkYXRhIGlzIHRoZSBrZXkgSUQuCi0gICAgVmVjdG9yPFJlZjxGcmFn
bWVudGVkU2hhcmVkQnVmZmVyPj4ga2V5SURzOwotICAgIGtleUlEcy5hcHBlbmQoYnVmZmVyLmNv
cHkoKSk7Ci0gICAgcmV0dXJuIGtleUlEczsKKyAgICByZXR1cm4gVmVjdG9yIHsgYnVmZmVyLmNv
cHkoKSB9OwogfQogCiBzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhv
b2RIYXNoU2V0PEF0b21TdHJpbmc+JiB2YWxpZEluaXREYXRhVHlwZXMoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5z
dGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5n
QVZGT2JqQy5tbQppbmRleCBkNjM2MTJmYWEwNTM3MGEwMzk3M2ExZTJkNTZjMTg2OGEyZjk5MTYw
Li45NjI1ZmE5NTAzZTdiZWJjNzE5ZmM0YjM3YTYzYzM4ZDc0NTAzMDhhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0
YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFt
aW5nQVZGT2JqQy5tbQpAQCAtMTQ5NCw3ICsxNDk0LDcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Np
b25GYWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnVwZGF0ZUtleVN0YXR1c2VzKHN0ZDo6b3B0aW9u
YWwKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fa2V5U3RhdHVzZXMuc3dhcChrZXlTdGF0dXNl
cyk7CisgICAgbV9rZXlTdGF0dXNlcyA9IFdURk1vdmUoa2V5U3RhdHVzZXMpOwogCiAgICAgbV9p
bnN0YW5jZS0+c2Vzc2lvbktleVN0YXR1c2VzQ2hhbmdlZCgqdGhpcyk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9JbWFn
ZURlY29kZXJBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVyQVZGT2JqQy5tbQppbmRleCA1NjNhZjE5MjRkOWFm
MzU5ZTkzMGVmNjRiYWUzMjNmYzA0MWRlODdhLi5hZDdmNDUxMDFjMDZhMTg4OGMwMDhmYWVkNGE5
MTkwNTYxMzgyOTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVjb2RlckFW
Rk9iakMubW0KQEAgLTUzNSwxMyArNTM1LDEwIEBAIFZlY3RvcjxJbWFnZURlY29kZXI6OkZyYW1l
SW5mbz4gSW1hZ2VEZWNvZGVyQVZGT2JqQzo6ZnJhbWVJbmZvcygpIGNvbnN0CiAgICAgaWYgKG1f
c2FtcGxlRGF0YS5lbXB0eSgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgVmVjdG9yPElt
YWdlRGVjb2Rlcjo6RnJhbWVJbmZvPiBpbmZvczsKLSAgICBmb3IgKGF1dG8mIHNhbXBsZSA6IG1f
c2FtcGxlRGF0YS5wcmVzZW50YXRpb25PcmRlcigpKSB7CisgICAgcmV0dXJuIFdURjo6bWFwKG1f
c2FtcGxlRGF0YS5wcmVzZW50YXRpb25PcmRlcigpLCBbXShhdXRvJiBzYW1wbGUpIHsKICAgICAg
ICAgYXV0byogaW1hZ2VTYW1wbGUgPSAoSW1hZ2VEZWNvZGVyQVZGT2JqQ1NhbXBsZSopc2FtcGxl
LnNlY29uZC5nZXQoKTsKLSAgICAgICAgaW5mb3MuYXBwZW5kKHsgaW1hZ2VTYW1wbGUtPmhhc0Fs
cGhhKCksIFNlY29uZHMoaW1hZ2VTYW1wbGUtPmR1cmF0aW9uKCkudG9Eb3VibGUoKSl9KTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gaW5mb3M7CisgICAgICAgIHJldHVybiBJbWFnZURlY29kZXI6OkZy
YW1lSW5mbyB7IGltYWdlU2FtcGxlLT5oYXNBbHBoYSgpLCBTZWNvbmRzKGltYWdlU2FtcGxlLT5k
dXJhdGlvbigpLnRvRG91YmxlKCkpIH07CisgICAgfSk7CiB9CiAKIGJvb2wgSW1hZ2VEZWNvZGVy
QVZGT2JqQzo6ZnJhbWVBbGxvd1N1YnNhbXBsaW5nQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9Tb3VyY2VCdWZmZXJQYXJzZXJBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUGFyc2VyQVZGT2Jq
Qy5tbQppbmRleCBhYTE1ODQwNGIxMGU0NDRhZjZlNWVkZGM4ZGFkNmJhOTZlZDVjYjIyLi5lNjFi
MTQ3ZjYzYzVmNDU3Mjc1ZjYwNTAzZTM3YThiNTJkMThlM2EzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQ
YXJzZXJBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclBhcnNlckFWRk9iakMubW0KQEAgLTI5NywxNiAr
Mjk3LDE0IEBAIHZvaWQgU291cmNlQnVmZmVyUGFyc2VyQVZGT2JqQzo6ZGlkUGFyc2VTdHJlYW1E
YXRhQXNBc3NldChBVkFzc2V0KiBhc3NldCkKIAogICAgICAgICAgICAgaWYgKFt0cmFjayBoYXNN
ZWRpYUNoYXJhY3RlcmlzdGljOkFWTWVkaWFDaGFyYWN0ZXJpc3RpY1Zpc3VhbF0pIHsKICAgICAg
ICAgICAgICAgICBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21l
bnQ6OlZpZGVvVHJhY2tJbmZvcm1hdGlvbiBpbmZvOwotICAgICAgICAgICAgICAgIGF1dG8gdmlk
ZW9UcmFjayA9IFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjcmVhdGUodHJh
Y2spOwotICAgICAgICAgICAgICAgIGluZm8udHJhY2sgPSB2aWRlb1RyYWNrLmNvcHlSZWYoKTsK
KyAgICAgICAgICAgICAgICBpbmZvLnRyYWNrID0gVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakM6OmNyZWF0ZSh0cmFjayk7CiAgICAgICAgICAgICAgICAgaW5mby5kZXNjcmlwdGlv
biA9IE1lZGlhRGVzY3JpcHRpb25BVkZPYmpDOjpjcmVhdGUodHJhY2spOwotICAgICAgICAgICAg
ICAgIHNlZ21lbnQudmlkZW9UcmFja3MuYXBwZW5kKGluZm8pOworICAgICAgICAgICAgICAgIHNl
Z21lbnQudmlkZW9UcmFja3MuYXBwZW5kKFdURk1vdmUoaW5mbykpOwogICAgICAgICAgICAgfSBl
bHNlIGlmIChbdHJhY2sgaGFzTWVkaWFDaGFyYWN0ZXJpc3RpYzpBVk1lZGlhQ2hhcmFjdGVyaXN0
aWNBdWRpYmxlXSkgewogICAgICAgICAgICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6
OkluaXRpYWxpemF0aW9uU2VnbWVudDo6QXVkaW9UcmFja0luZm9ybWF0aW9uIGluZm87Ci0gICAg
ICAgICAgICAgICAgYXV0byBhdWRpb1RyYWNrID0gQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakM6OmNyZWF0ZSh0cmFjayk7Ci0gICAgICAgICAgICAgICAgaW5mby50cmFjayA9IGF1
ZGlvVHJhY2suY29weVJlZigpOworICAgICAgICAgICAgICAgIGluZm8udHJhY2sgPSBBdWRpb1Ry
YWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6Y3JlYXRlKHRyYWNrKTsKICAgICAgICAgICAg
ICAgICBpbmZvLmRlc2NyaXB0aW9uID0gTWVkaWFEZXNjcmlwdGlvbkFWRk9iakM6OmNyZWF0ZSh0
cmFjayk7Ci0gICAgICAgICAgICAgICAgc2VnbWVudC5hdWRpb1RyYWNrcy5hcHBlbmQoaW5mbyk7
CisgICAgICAgICAgICAgICAgc2VnbWVudC5hdWRpb1RyYWNrcy5hcHBlbmQoV1RGTW92ZShpbmZv
KSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIEZJWE1FKDEyNTE2MSkgICAgOiBB
ZGQgVGV4dFRyYWNrIHN1cHBvcnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQppbmRleCA4
NTQyMWUzZGU3MDljZTE1OWM0OTRiNDBmYjhkMWFkMjM1OTNjM2JiLi45Nzk1YjZlYzU1N2U1NGUy
MjFjOGI0NmRkNzI0OTAwNjI0ZGI2YjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1t
CkBAIC02OCwxMSArNjgsMTEgQEAgVmVjdG9yPEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRWYXJpYXRp
b25BeGlzPiBGb250UGxhdGZvcm1EYXRhOjp2YXJpYXRpb25BeGVzKFNob3UKICAgICBpZiAoIXBs
YXRmb3JtRm9udCkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAKLSAgICBWZWN0b3I8Rm9udFZh
cmlhdGlvbkF4aXM+IHJlc3VsdHM7Ci0gICAgZm9yIChhdXRvJiBbdGFnLCB2YWx1ZXNdIDogZGVm
YXVsdFZhcmlhdGlvblZhbHVlcyhwbGF0Zm9ybUZvbnQsIHNob3VsZExvY2FsaXplQXhpc05hbWVz
KSkKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQoRm9udFBsYXRmb3JtRGF0YTo6Rm9udFZhcmlhdGlv
bkF4aXModmFsdWVzLmF4aXNOYW1lLCBTdHJpbmcodGFnLmRhdGEoKSwgdGFnLnNpemUoKSksIHZh
bHVlcy5kZWZhdWx0VmFsdWUsIHZhbHVlcy5taW5pbXVtVmFsdWUsIHZhbHVlcy5tYXhpbXVtVmFs
dWUpKTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0czsKKyAgICBhdXRvIG1hcCA9IGRlZmF1bHRW
YXJpYXRpb25WYWx1ZXMocGxhdGZvcm1Gb250LCBzaG91bGRMb2NhbGl6ZUF4aXNOYW1lcyk7Cisg
ICAgcmV0dXJuIFdURjo6bWFwKG1hcCwgW10oYXV0byYgZW50cnkpIHsKKyAgICAgICAgYXV0byYg
W3RhZywgdmFsdWVzXSA9IGVudHJ5OworICAgICAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YTo6
Rm9udFZhcmlhdGlvbkF4aXMgeyB2YWx1ZXMuYXhpc05hbWUsIFN0cmluZyh0YWcuZGF0YSgpLCB0
YWcuc2l6ZSgpKSwgdmFsdWVzLmRlZmF1bHRWYWx1ZSwgdmFsdWVzLm1pbmltdW1WYWx1ZSwgdmFs
dWVzLm1heGltdW1WYWx1ZSB9OworICAgIH0pOwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KaW5kZXggYmE4ZWExZWI0NDhhOTIxZTMwZDNhZTZh
OWM3N2U4ODIzM2FiYzUzYi4uYTJjMjUwYWEyYmVmOGRlOTY0YmFmMDkyNDBkNWUwZWM0MTUwZWY4
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KQEAg
LTcwMiwxMCArNzAyLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KICAg
ICAgICAgTlNVUkwgKnVybCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOmNvY29hRGF0YV07CiAgICAg
ICAgIGlmIChbdXJsIGlzRmlsZVVSTF0pCiAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
VmVjdG9yPFN0cmluZz4gdHlwZXM7Ci0gICAgICAgIHR5cGVzLmFwcGVuZChjb2NvYVR5cGUpOwot
ICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFR5
cGVzKHR5cGVzLCBtX3Bhc3RlYm9hcmROYW1lLCBjb250ZXh0KCkpOworICAgICAgICBwbGF0Zm9y
bVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFR5cGVzKHsgY29jb2FUeXBl
IH0sIG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQoKSk7CiAgICAgICAgIG1fY2hhbmdlQ291bnQg
PSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFN0cmluZ0Zv
clR5cGUoY29jb2FEYXRhLCBjb2NvYVR5cGUsIG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQoKSk7
CiAKICAgICAgICAgcmV0dXJuOwpAQCAtNzE0LDkgKzcxMSw3IEBAIEFMTE9XX0RFUFJFQ0FURURf
REVDTEFSQVRJT05TX0VORAogCiAgICAgaWYgKCFjb2NvYVR5cGUuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIC8vIGV2ZXJ5dGhpbmcgZWxzZSB3ZSBrbm93IG9mIGdvZXMgb24gdGhlIHBib2FyZCBhcyBh
IHN0cmluZwotICAgICAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKLSAgICAgICAgdHlwZXMuYXBw
ZW5kKGNvY29hVHlwZSk7Ci0gICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJk
U3RyYXRlZ3koKS0+YWRkVHlwZXModHlwZXMsIG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQoKSk7
CisgICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+YWRk
VHlwZXMoeyBjb2NvYVR5cGUgfSwgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKTsKICAgICAg
ICAgbV9jaGFuZ2VDb3VudCA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRl
Z3koKS0+c2V0U3RyaW5nRm9yVHlwZShjb2NvYURhdGEsIGNvY29hVHlwZSwgbV9wYXN0ZWJvYXJk
TmFtZSwgY29udGV4dCgpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZVZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZVZpZGVvQ2FwdHVyZVNvdXJj
ZS5jcHAKaW5kZXggM2UzZjQxYTFjNTgwN2U2Y2QzNTlkZTNkZjI2YWU3MmQ1NTFjZDU4Mi4uNzdk
MzI2NjU2ZDVjYmM1YWVmY2Q0MTdhMTdhODdhNDZmNzEyMjdiZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVWaWRlb0NhcHR1cmVTb3VyY2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lVmlk
ZW9DYXB0dXJlU291cmNlLmNwcApAQCAtNzUsMTEgKzc1LDkgQEAgVmVjdG9yPFZpZGVvUHJlc2V0
RGF0YT4gUmVhbHRpbWVWaWRlb0NhcHR1cmVTb3VyY2U6OnByZXNldHNEYXRhKCkKIAogdm9pZCBS
ZWFsdGltZVZpZGVvQ2FwdHVyZVNvdXJjZTo6c2V0U3VwcG9ydGVkUHJlc2V0cyhWZWN0b3I8Vmlk
ZW9QcmVzZXREYXRhPiYmIHByZXNldERhdGEpCiB7Ci0gICAgVmVjdG9yPFJlZjxWaWRlb1ByZXNl
dD4+IHByZXNldHM7Ci0KLSAgICBmb3IgKGF1dG8mIGRhdGEgOiBwcmVzZXREYXRhKQotICAgICAg
ICBwcmVzZXRzLmFwcGVuZChWaWRlb1ByZXNldDo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpKTsKLQor
ICAgIGF1dG8gcHJlc2V0cyA9IFdURjo6bWFwKFdURk1vdmUocHJlc2V0RGF0YSksIFtdKGF1dG8m
JiBkYXRhKSB7CisgICAgICAgIHJldHVybiBWaWRlb1ByZXNldDo6Y3JlYXRlKFdURk1vdmUoZGF0
YSkpOworICAgIH0pOwogICAgIHNldFN1cHBvcnRlZFByZXNldHMoV1RGTW92ZShwcmVzZXRzKSk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJl
Z2lzdHJ5SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdp
c3RyeUltcGwuY3BwCmluZGV4IDY3YTc2Mjk1ZDg1ZjM5MWM4M2IyNDAwZTZkMWZlNTc5Y2NkZWQ4
OGYuLjYyMzYzNmFjMmFiZDY4Mzg0MTRkYzhmMWY5MjZjZWQ1YzQ3Y2NhMmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcApA
QCAtMTQxLDEwICsxNDEsOCBAQCB2b2lkIEJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVS
TChjb25zdCBVUkwmIHVybCwgVmVjdG9yPEJsb2JQYXJ0PiYmIGJsb2JQYQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBCbG9iUGFydDo6VHlwZTo6QmxvYjogewot
ICAgICAgICAgICAgaWYgKGF1dG8gYmxvYiA9IG1fYmxvYnMuZ2V0KHBhcnQudXJsKCkuc3RyaW5n
KCkpKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0gOiBi
bG9iLT5pdGVtcygpKQotICAgICAgICAgICAgICAgICAgICBibG9iRGF0YS0+bV9pdGVtcy5hcHBl
bmQoaXRlbSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXV0byBibG9iID0gbV9i
bG9icy5nZXQocGFydC51cmwoKS5zdHJpbmcoKSkpCisgICAgICAgICAgICAgICAgYmxvYkRhdGEt
Pm1faXRlbXMuYXBwZW5kVmVjdG9yKGJsb2ItPml0ZW1zKCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzI4LDcgKzMyNiw3IEBAIHZvaWQgQmxvYlJlZ2lz
dHJ5SW1wbDo6d3JpdGVCbG9ic1RvVGVtcG9yYXJ5RmlsZXNGb3JJbmRleGVkREIoY29uc3QgVmVj
dG9yPFN0cmluCiAgICAgICAgICAgICAgICAgZmlsZVBhdGhzLmNsZWFyKCk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaWxlUGF0aHMuYXBwZW5k
KHRlbXBGaWxlUGF0aC5pc29sYXRlZENvcHkoKSk7CisgICAgICAgICAgICBmaWxlUGF0aHMuYXBw
ZW5kKFdURk1vdmUodGVtcEZpbGVQYXRoKS5pc29sYXRlZENvcHkoKSk7CiAgICAgICAgIH0KIAog
ICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpLCBmaWxlUGF0aHMgPSBXVEZNb3ZlKGZpbGVQYXRocyldICgpIG11dGFi
bGUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHAKaW5kZXggODUzMGUzMzU1ZjJkNmI4ZDdmZmI2ZWRmODNkNjA4YmNhNGI5ZjU1NS4uOWFi
OTk4ZTQxY2IwOGNmMGI2ZjkwZjEwZjEzYzRiODQ1N2VjOTM5ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC0yMDg2LDEwICsy
MDg2LDggQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6ZHJhd0JveFNpZGVGcm9tUGF0aChH
cmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwKICAgICAgICAgICAgICAgICBnYXBMZW5n
dGggKz0gKGRhc2hMZW5ndGggIC8gbnVtYmVyT2ZHYXBzKTsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgRGFzaEFycmF5IGxpbmVEYXNoOwotICAgICAgICAgICAgbGluZURhc2guYXBwZW5k
KGRhc2hMZW5ndGgpOwotICAgICAgICAgICAgbGluZURhc2guYXBwZW5kKGdhcExlbmd0aCk7Ci0g
ICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0TGluZURhc2gobGluZURhc2gsIGRhc2hMZW5n
dGgpOworICAgICAgICAgICAgYXV0byBsaW5lRGFzaCA9IERhc2hBcnJheTo6ZnJvbShkYXNoTGVu
Z3RoLCBnYXBMZW5ndGgpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldExpbmVEYXNo
KFdURk1vdmUobGluZURhc2gpLCBkYXNoTGVuZ3RoKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgLy8gRklYTUU6IHN0cm9raW5nIHRoZSBib3JkZXIgcGF0aCBjYXVzZXMgaXNzdWVzIHdp
dGggdGlnaHQgY29ybmVyczoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5jcHAKaW5kZXggM2FhMGY4NWVhOGRmNzQ4NzNmYWRhMmNhYzZhZGNmNDZmMDE4
MjcyOS4uZjZlZWMyNmJiNGE4NTIwOTdjN2VlNDk0MjcxMmM0MGU2ODFkMGIxOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTE5NTYs
OSArMTk1Niw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpjb25uZWN0Q2xpcHBpbmdTdGFj
a0xheWVycyhMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjayYKICAgICBhdXRvJiBjbGlwcGluZ0Vu
dHJ5U3RhY2sgPSBjbGlwcGluZ1N0YWNrLnN0YWNrKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGNsaXBwaW5nRW50cnlTdGFjay5zaXplKCkgLSAxOyArK2kpIHsKICAgICAgICAgYXV0
byYgZW50cnkgPSBjbGlwcGluZ0VudHJ5U3RhY2suYXQoaSk7Ci0gICAgICAgIFZlY3RvcjxSZWY8
R3JhcGhpY3NMYXllcj4+IGNoaWxkcmVuOwotICAgICAgICBjaGlsZHJlbi5hcHBlbmQoKmNsaXBw
aW5nRW50cnlTdGFjay5hdChpICsgMSkuY2xpcHBpbmdMYXllcik7Ci0gICAgICAgIGVudHJ5LmNs
aXBwaW5nTGF5ZXItPnNldENoaWxkcmVuKFdURk1vdmUoY2hpbGRyZW4pKTsKKyAgICAgICAgZW50
cnkuY2xpcHBpbmdMYXllci0+c2V0Q2hpbGRyZW4oeyBSZWYgeyAqY2xpcHBpbmdFbnRyeVN0YWNr
LmF0KGkgKyAxKS5jbGlwcGluZ0xheWVyIH0gfSk7CiAgICAgfQogCiAgICAgY2xpcHBpbmdFbnRy
eVN0YWNrLmxhc3QoKS5jbGlwcGluZ0xheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRl
eCAwYmUwMzlhMGYyM2Q1N2ZmN2Y1N2Q5OTA5YjY1Mzc1YTAyNDI0M2I0Li4yM2Q3MzcxMzRjYThl
YWExNjA1ZDBjNDc3YWNlNjI4M2Y4NDYyMWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtMTQ5MSw5ICsxNDkxLDcgQEAg
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkanVzdE92ZXJmbG93U2Nyb2xsYmFyQ29udGFp
bmVyTGF5ZXJzKFJlbmRlckxheWVyJgogICAgICAgICAgICAgb3ZlcmZsb3dCYWNraW5nLT5lbnN1
cmVPdmVyZmxvd0NvbnRyb2xzSG9zdExheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrKCZzdGFja2lu
Z0NvbnRleHRMYXllcik7CiAKICAgICAgICAgaWYgKGF1dG8qIG92ZXJmbG93Q29udHJvbHNBbmNl
c3RvckNsaXBwaW5nU3RhY2sgPSBvdmVyZmxvd0JhY2tpbmctPm92ZXJmbG93Q29udHJvbHNIb3N0
TGF5ZXJBbmNlc3RvckNsaXBwaW5nU3RhY2soKSkgewotICAgICAgICAgICAgVmVjdG9yPFJlZjxH
cmFwaGljc0xheWVyPj4gY2hpbGRyZW47Ci0gICAgICAgICAgICBjaGlsZHJlbi5hcHBlbmQoKm92
ZXJmbG93Q29udGFpbmVyTGF5ZXIpOwotICAgICAgICAgICAgb3ZlcmZsb3dDb250cm9sc0FuY2Vz
dG9yQ2xpcHBpbmdTdGFjay0+bGFzdENsaXBwaW5nTGF5ZXIoKS0+c2V0Q2hpbGRyZW4oV1RGTW92
ZShjaGlsZHJlbikpOworICAgICAgICAgICAgb3ZlcmZsb3dDb250cm9sc0FuY2VzdG9yQ2xpcHBp
bmdTdGFjay0+bGFzdENsaXBwaW5nTGF5ZXIoKS0+c2V0Q2hpbGRyZW4oeyBSZWYgeyAqb3ZlcmZs
b3dDb250YWluZXJMYXllciB9IH0pOwogICAgICAgICAgICAgb3ZlcmZsb3dDb250YWluZXJMYXll
ciA9IG92ZXJmbG93Q29udHJvbHNBbmNlc3RvckNsaXBwaW5nU3RhY2stPmZpcnN0Q2xpcHBpbmdM
YXllcigpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5tbQppbmRleCA5ZTEwOGY4YjRmZjI2MTc5Njg5NjRmYTEzNzAxNTE5YmJjMjQ1MmM0Li44
NzY2N2RlMmRlZDI5NWQ5MzU4MDJiMzM4OTJhMGMzMjFjN2UzMmVjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCkBAIC0yNzMxLDEwICsyNzMxLDkgQEAgc3Rh
dGljIHZvaWQgcGFpbnRBdHRhY2htZW50VGl0bGVCYWNrZ3JvdW5kKGNvbnN0IFJlbmRlckF0dGFj
aG1lbnQmIGF0dGFjaG1lbnQsIEcKICAgICBpZiAobGF5b3V0LmxpbmVzLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPEZsb2F0UmVjdD4gYmFja2dyb3VuZFJlY3RzOwot
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXlvdXQubGluZXMuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIGJhY2tncm91bmRSZWN0cy5hcHBlbmQobGF5b3V0LmxpbmVzW2ldLmJhY2tncm91bmRS
ZWN0KTsKKyAgICBhdXRvIGJhY2tncm91bmRSZWN0cyA9IGxheW91dC5saW5lcy5tYXAoW10oYXV0
byYgbGluZSkgeworICAgICAgICByZXR1cm4gbGluZS5iYWNrZ3JvdW5kUmVjdDsKKyAgICB9KTsK
IAogICAgIENvbG9yIGJhY2tncm91bmRDb2xvcjsKICAgICBpZiAoYXR0YWNobWVudC5mcmFtZSgp
LnNlbGVjdGlvbigpLmlzRm9jdXNlZEFuZEFjdGl2ZSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCBmZTU1OWJk
NzBiMWQwY2Y0YjFjNWE1YjFjOTBhMjk2MzVlOGIyNzMxLi45Mjc2YjkzYzczMTI2MWMxZjJmZmJl
YzQ5ZjFlY2NlNzNjYTFiYjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTE5NywxMSArMTk3LDkgQEAgc3RhdGlj
IHZvaWQgd3JpdGVTVkdTdHJva2VQYWludGluZ1Jlc291cmNlKFRleHRTdHJlYW0mIHRzLCBjb25z
dCBSZW5kZXJFbGVtZW50JgogICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dCgmc2hh
cGUpOwogICAgIGRvdWJsZSBkYXNoT2Zmc2V0ID0gbGVuZ3RoQ29udGV4dC52YWx1ZUZvckxlbmd0
aChzdmdTdHlsZS5zdHJva2VEYXNoT2Zmc2V0KCkpOwogICAgIGRvdWJsZSBzdHJva2VXaWR0aCA9
IGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3R5bGUuc3Ryb2tlV2lkdGgoKSk7Ci0gICAg
Y29uc3QgYXV0byYgZGFzaGVzID0gc3ZnU3R5bGUuc3Ryb2tlRGFzaEFycmF5KCk7Ci0KLSAgICBE
YXNoQXJyYXkgZGFzaEFycmF5OwotICAgIGZvciAoYXV0byYgbGVuZ3RoIDogZGFzaGVzKQotICAg
ICAgICBkYXNoQXJyYXkuYXBwZW5kKGxlbmd0aC52YWx1ZShsZW5ndGhDb250ZXh0KSk7CisgICAg
YXV0byBkYXNoQXJyYXkgPSBzdmdTdHlsZS5zdHJva2VEYXNoQXJyYXkoKS5tYXAoWyZdKGF1dG8m
IGxlbmd0aCkgLT4gRGFzaEFycmF5RWxlbWVudCB7CisgICAgICAgIHJldHVybiBsZW5ndGgudmFs
dWUobGVuZ3RoQ29udGV4dCk7CisgICAgfSk7CiAKICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywg
Im9wYWNpdHkiLCBzdmdTdHlsZS5zdHJva2VPcGFjaXR5KCksIDEuMGYpOwogICAgIHdyaXRlSWZO
b3REZWZhdWx0KHRzLCAic3Ryb2tlIHdpZHRoIiwgc3Ryb2tlV2lkdGgsIDEuMCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5jcHAKaW5kZXggYTYzZWI4MGE3
NzlkNzc2OGRhNDc3MmJiMGQ2YWZlMTllMzUyMWJiZC4uODQ4MTM2YzhhNTM4YzZlYzhlY2MxNmQ1
YmYwMWJmZGUyZGRiMzkxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0Q2h1bmsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dENodW5rLmNwcApAQCAtNzAsOCArNzAsNyBAQCBTVkdUZXh0Q2h1bms6OlNWR1RleHRDaHVu
ayhjb25zdCBWZWN0b3I8U1ZHSW5saW5lVGV4dEJveCo+JiBsaW5lTGF5b3V0Qm94ZXMsIHVucwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gZmlyc3Q7IGkgPCBsaW1p
dDsgKytpKQotICAgICAgICBtX2JveGVzLmFwcGVuZChsaW5lTGF5b3V0Qm94ZXNbaV0pOworICAg
IG1fYm94ZXMuYXBwZW5kKCZsaW5lTGF5b3V0Qm94ZXNbZmlyc3RdLCBsaW1pdCAtIGZpcnN0KTsK
IH0KIAogdW5zaWduZWQgU1ZHVGV4dENodW5rOjp0b3RhbENoYXJhY3RlcnMoKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwCmluZGV4IDIyOTlmOGM2Mzc5
YjUwOTQ5MmExYTFmZmE1MjMwNmExYWExNjg5YjQuLmUzZGMzZWZiYzI5YjYzZDc1MjE0OWRhY2Ix
MTMxZmZhNTJhY2M5NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxl
Q29sbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9QYWdlUnVsZUNvbGxlY3Rv
ci5jcHAKQEAgLTg0LDggKzg0LDkgQEAgdm9pZCBQYWdlUnVsZUNvbGxlY3Rvcjo6bWF0Y2hQYWdl
UnVsZXMoUnVsZVNldCogcnVsZXMsIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0YKIAogICAgIHN0
ZDo6c3RhYmxlX3NvcnQobWF0Y2hlZFBhZ2VSdWxlcy5iZWdpbigpLCBtYXRjaGVkUGFnZVJ1bGVz
LmVuZCgpLCBjb21wYXJlUGFnZVJ1bGVzKTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtYXRjaGVkUGFnZVJ1bGVzLnNpemUoKTsgaSsrKQotICAgICAgICBtX3Jlc3VsdC5hdXRob3JE
ZWNsYXJhdGlvbnMuYXBwZW5kKHsgJm1hdGNoZWRQYWdlUnVsZXNbaV0tPnByb3BlcnRpZXMoKSB9
KTsKKyAgICBtX3Jlc3VsdC5hdXRob3JEZWNsYXJhdGlvbnMucmVzZXJ2ZUNhcGFjaXR5KG1fcmVz
dWx0LmF1dGhvckRlY2xhcmF0aW9ucy5zaXplKCkgKyBtYXRjaGVkUGFnZVJ1bGVzLnNpemUoKSk7
CisgICAgZm9yIChhdXRvKiBwYWdlUnVsZSA6IG1hdGNoZWRQYWdlUnVsZXMpCisgICAgICAgIG1f
cmVzdWx0LmF1dGhvckRlY2xhcmF0aW9ucy51bmNoZWNrZWRBcHBlbmQoeyAmcGFnZVJ1bGUtPnBy
b3BlcnRpZXMoKSB9KTsKIH0KIAogc3RhdGljIGJvb2wgY2hlY2tQYWdlU2VsZWN0b3JDb21wb25l
bnRzKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgYm9vbCBpc0xlZnRQYWdlLCBib29sIGlz
Rmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVs
ZVNldEJ1aWxkZXIuY3BwCmluZGV4IDU3NTE4NTkxOTdiMjI2ZmMyNDRhZjZiYzMyMDVmYWQyNmUw
MTcwMTkuLmNmMTY1MjIxY2Q1M2EzYzVhNzdjNmQ5ODA4NDMyMWMxM2YyMjIzOGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9SdWxlU2V0QnVpbGRlci5jcHAKQEAgLTM3OCw4ICszNzgsOSBAQCB2b2lk
IFJ1bGVTZXRCdWlsZGVyOjpNZWRpYVF1ZXJ5Q29sbGVjdG9yOjpwb3AoY29uc3QgTWVkaWFRdWVy
eVNldCogc2V0KQogCiAgICAgaWYgKCFkeW5hbWljQ29udGV4dFN0YWNrLmxhc3QoKS5hZmZlY3Rl
ZFJ1bGVQb3NpdGlvbnMuaXNFbXB0eSgpIHx8ICFjb2xsZWN0RHluYW1pYykgewogICAgICAgICBS
dWxlU2V0OjpEeW5hbWljTWVkaWFRdWVyeVJ1bGVzIHJ1bGVzOworICAgICAgICBydWxlcy5tZWRp
YVF1ZXJ5U2V0cy5yZXNlcnZlQ2FwYWNpdHkocnVsZXMubWVkaWFRdWVyeVNldHMuc2l6ZSgpICsg
ZHluYW1pY0NvbnRleHRTdGFjay5zaXplKCkpOwogICAgICAgICBmb3IgKGF1dG8mIGNvbnRleHQg
OiBkeW5hbWljQ29udGV4dFN0YWNrKQotICAgICAgICAgICAgcnVsZXMubWVkaWFRdWVyeVNldHMu
YXBwZW5kKGNvbnRleHQuc2V0LmdldCgpKTsKKyAgICAgICAgICAgIHJ1bGVzLm1lZGlhUXVlcnlT
ZXRzLnVuY2hlY2tlZEFwcGVuZChjb250ZXh0LnNldC5nZXQoKSk7CiAKICAgICAgICAgaWYgKGNv
bGxlY3REeW5hbWljKSB7CiAgICAgICAgICAgICBydWxlcy5hZmZlY3RlZFJ1bGVQb3NpdGlvbnMu
YXBwZW5kVmVjdG9yKGR5bmFtaWNDb250ZXh0U3RhY2subGFzdCgpLmFmZmVjdGVkUnVsZVBvc2l0
aW9ucyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDb252
ZXJ0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCmlu
ZGV4IDJmODM0ZGY2N2Q4MGNiMTNkZDRjOTE1NTFiYWQxMmRiMWIyM2EyNDkuLjc0NjRmODRkOGJm
NmIyYjJhMzMxMjNkNTkyYmUyOTJmMTRjYzI4ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCkBAIC0xNjk3LDEzICsxNjk3LDEyIEBAIGlubGluZSBW
ZWN0b3I8QXRvbVN0cmluZz4gQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENvbnRhaW5lck5hbWUo
QnVpbGRlclN0YXRlJiwKICAgICAgICAgQVNTRVJUKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Pih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSk7CiAgICAgICAgIHJldHVybiB7IH07
CiAgICAgfQorICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpCisgICAgICAgIHJldHVy
biB7IH07CiAKLSAgICBWZWN0b3I8QXRvbVN0cmluZz4gcmVzdWx0OwotICAgIGlmIChpczxDU1NW
YWx1ZUxpc3Q+KHZhbHVlKSkgewotICAgICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBkb3duY2FzdDxD
U1NWYWx1ZUxpc3Q+KHZhbHVlKSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0uZ2V0KCkpLnN0cmluZ1ZhbHVlKCkpOwotICAgIH0KLSAg
ICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBXVEY6Om1hcChkb3duY2FzdDxDU1NWYWx1ZUxp
c3Q+KHZhbHVlKSwgW10oYXV0byYgaXRlbSkgLT4gQXRvbVN0cmluZyB7CisgICAgICAgIHJldHVy
biBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oaXRlbS5nZXQoKSkuc3RyaW5nVmFsdWUoKTsK
KyAgICB9KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21l
ZGlhL1JlbW90ZU1lZGlhUGxheWVyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L21lZGlhL1JlbW90ZU1lZGlhUGxheWVyUHJveHkuY3BwCmluZGV4IDBlZjgzNDJkZDI2OGVlNjhj
MzA0NzYyZGEwNThiYTRmYmNiYzZlM2MuLjk0OWZmMzIwNTU1MGI0OGI3Y2M3OWU0NTA1MTZhNDA0
MDJhNGEzOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1v
dGVNZWRpYVBsYXllclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVk
aWEvUmVtb3RlTWVkaWFQbGF5ZXJQcm94eS5jcHAKQEAgLTgwNSwxMSArODA1LDkgQEAgYm9vbCBS
ZW1vdGVNZWRpYVBsYXllclByb3h5Ojpkb2VzSGF2ZUF0dHJpYnV0ZShjb25zdCBBdG9tU3RyaW5n
JiwgQXRvbVN0cmluZyopIGMKICNpZiBFTkFCTEUoQVZGX0NBUFRJT05TKQogVmVjdG9yPFJlZlB0
cjxQbGF0Zm9ybVRleHRUcmFjaz4+IFJlbW90ZU1lZGlhUGxheWVyUHJveHk6Om91dE9mQmFuZFRy
YWNrU291cmNlcygpCiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxQbGF0Zm9ybVRleHRUcmFjaz4+IHNv
dXJjZXM7Ci0gICAgZm9yIChhdXRvJiBkYXRhIDogbV9jb25maWd1cmF0aW9uLm91dE9mQmFuZFRy
YWNrRGF0YSkKLSAgICAgICAgc291cmNlcy5hcHBlbmQoUGxhdGZvcm1UZXh0VHJhY2s6OmNyZWF0
ZShXVEZNb3ZlKGRhdGEpKSk7Ci0gICAgCi0gICAgcmV0dXJuIHNvdXJjZXM7CisgICAgcmV0dXJu
IFdURjo6bWFwKG1fY29uZmlndXJhdGlvbi5vdXRPZkJhbmRUcmFja0RhdGEsIFtdKGF1dG8mIGRh
dGEpIC0+IFJlZlB0cjxQbGF0Zm9ybVRleHRUcmFjaz4geworICAgICAgICByZXR1cm4gUGxhdGZv
cm1UZXh0VHJhY2s6OmNyZWF0ZShXVEZNb3ZlKGRhdGEpKTsKKyAgICB9KTsKIH0KIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlU291cmNl
QnVmZmVyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZVNv
dXJjZUJ1ZmZlclByb3h5LmNwcAppbmRleCAyNzkxNjVkZTY2YWFmZTAyNDY4MWUxNjFhMDM1YzRh
MTA5NTRlNmUxLi5iYmQzMGQ4ZTcxYzE5NDI3MWVhMDNiYWEyMmUzNTA2ZGJiMjA1MDg1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlU291cmNlQnVmZmVy
UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVTb3Vy
Y2VCdWZmZXJQcm94eS5jcHAKQEAgLTc1LDkgKzc1LDEwIEBAIHZvaWQgUmVtb3RlU291cmNlQnVm
ZmVyUHJveHk6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdt
ZW50CiAKICAgICBJbml0aWFsaXphdGlvblNlZ21lbnRJbmZvIHNlZ21lbnRJbmZvOwogICAgIHNl
Z21lbnRJbmZvLmR1cmF0aW9uID0gc2VnbWVudC5kdXJhdGlvbjsKKyAgICBzZWdtZW50SW5mby5h
dWRpb1RyYWNrcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNlZ21lbnQuYXVkaW9UcmFja3Muc2l6
ZSgpKTsKICAgICBmb3IgKGF1dG8mIGF1ZGlvVHJhY2tJbmZvIDogc2VnbWVudC5hdWRpb1RyYWNr
cykgewogICAgICAgICBhdXRvIGlkZW50aWZpZXIgPSBtX3JlbW90ZU1lZGlhUGxheWVyUHJveHkt
PmFkZFJlbW90ZUF1ZGlvVHJhY2tQcm94eSgqYXVkaW9UcmFja0luZm8udHJhY2spOwotICAgICAg
ICBzZWdtZW50SW5mby5hdWRpb1RyYWNrcy5hcHBlbmQoeyBNZWRpYURlc2NyaXB0aW9uSW5mbygq
YXVkaW9UcmFja0luZm8uZGVzY3JpcHRpb24pLCBpZGVudGlmaWVyIH0pOworICAgICAgICBzZWdt
ZW50SW5mby5hdWRpb1RyYWNrcy51bmNoZWNrZWRBcHBlbmQoeyBNZWRpYURlc2NyaXB0aW9uSW5m
bygqYXVkaW9UcmFja0luZm8uZGVzY3JpcHRpb24pLCBpZGVudGlmaWVyIH0pOwogCiAgICAgICAg
IEFTU0VSVCghbV90cmFja0lkcy5jb250YWlucyhpZGVudGlmaWVyKSk7CiAgICAgICAgIEFTU0VS
VCghbV9tZWRpYURlc2NyaXB0aW9ucy5jb250YWlucyhpZGVudGlmaWVyKSk7CkBAIC04NSw5ICs4
NiwxMCBAQCB2b2lkIFJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5Ojpzb3VyY2VCdWZmZXJQcml2YXRl
RGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudAogICAgICAgICBtX21lZGlhRGVzY3JpcHRp
b25zLmFkZChpZGVudGlmaWVyLCAqYXVkaW9UcmFja0luZm8uZGVzY3JpcHRpb24pOwogICAgIH0K
IAorICAgIHNlZ21lbnRJbmZvLnZpZGVvVHJhY2tzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2Vn
bWVudC52aWRlb1RyYWNrcy5zaXplKCkpOwogICAgIGZvciAoYXV0byYgdmlkZW9UcmFja0luZm8g
OiBzZWdtZW50LnZpZGVvVHJhY2tzKSB7CiAgICAgICAgIGF1dG8gaWRlbnRpZmllciA9IG1fcmVt
b3RlTWVkaWFQbGF5ZXJQcm94eS0+YWRkUmVtb3RlVmlkZW9UcmFja1Byb3h5KCp2aWRlb1RyYWNr
SW5mby50cmFjayk7Ci0gICAgICAgIHNlZ21lbnRJbmZvLnZpZGVvVHJhY2tzLmFwcGVuZCh7IE1l
ZGlhRGVzY3JpcHRpb25JbmZvKCp2aWRlb1RyYWNrSW5mby5kZXNjcmlwdGlvbiksIGlkZW50aWZp
ZXIgfSk7CisgICAgICAgIHNlZ21lbnRJbmZvLnZpZGVvVHJhY2tzLnVuY2hlY2tlZEFwcGVuZCh7
IE1lZGlhRGVzY3JpcHRpb25JbmZvKCp2aWRlb1RyYWNrSW5mby5kZXNjcmlwdGlvbiksIGlkZW50
aWZpZXIgfSk7CiAKICAgICAgICAgQVNTRVJUKCFtX3RyYWNrSWRzLmNvbnRhaW5zKGlkZW50aWZp
ZXIpKTsKICAgICAgICAgQVNTRVJUKCFtX21lZGlhRGVzY3JpcHRpb25zLmNvbnRhaW5zKGlkZW50
aWZpZXIpKTsKQEAgLTk1LDkgKzk3LDEwIEBAIHZvaWQgUmVtb3RlU291cmNlQnVmZmVyUHJveHk6
OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50CiAgICAg
ICAgIG1fbWVkaWFEZXNjcmlwdGlvbnMuYWRkKGlkZW50aWZpZXIsICp2aWRlb1RyYWNrSW5mby5k
ZXNjcmlwdGlvbik7CiAgICAgfQogCisgICAgc2VnbWVudEluZm8udGV4dFRyYWNrcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KHNlZ21lbnQudGV4dFRyYWNrcy5zaXplKCkpOwogICAgIGZvciAoYXV0
byYgdGV4dFRyYWNrSW5mbyA6IHNlZ21lbnQudGV4dFRyYWNrcykgewogICAgICAgICBhdXRvIGlk
ZW50aWZpZXIgPSBtX3JlbW90ZU1lZGlhUGxheWVyUHJveHktPmFkZFJlbW90ZVRleHRUcmFja1By
b3h5KCp0ZXh0VHJhY2tJbmZvLnRyYWNrKTsKLSAgICAgICAgc2VnbWVudEluZm8udGV4dFRyYWNr
cy5hcHBlbmQoeyBNZWRpYURlc2NyaXB0aW9uSW5mbygqdGV4dFRyYWNrSW5mby5kZXNjcmlwdGlv
biksIGlkZW50aWZpZXIgfSk7CisgICAgICAgIHNlZ21lbnRJbmZvLnRleHRUcmFja3MudW5jaGVj
a2VkQXBwZW5kKHsgTWVkaWFEZXNjcmlwdGlvbkluZm8oKnRleHRUcmFja0luZm8uZGVzY3JpcHRp
b24pLCBpZGVudGlmaWVyIH0pOwogCiAgICAgICAgIEFTU0VSVCghbV90cmFja0lkcy5jb250YWlu
cyhpZGVudGlmaWVyKSk7CiAgICAgICAgIEFTU0VSVCghbV9tZWRpYURlc2NyaXB0aW9ucy5jb250
YWlucyhpZGVudGlmaWVyKSk7CkBAIC0zMzgsMTYgKzM0MSwxMSBAQCB2b2lkIFJlbW90ZVNvdXJj
ZUJ1ZmZlclByb3h5OjpzZWVrVG9UaW1lKGNvbnN0IE1lZGlhVGltZSYgbWVkaWFUaW1lKQogCiB2
b2lkIFJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5Ojp1cGRhdGVUcmFja0lkcyhWZWN0b3I8c3RkOjpw
YWlyPFRyYWNrUHJpdmF0ZVJlbW90ZUlkZW50aWZpZXIsIFRyYWNrUHJpdmF0ZVJlbW90ZUlkZW50
aWZpZXI+PiYmIGlkZW50aWZpZXJQYWlycykKIHsKLSAgICBWZWN0b3I8c3RkOjpwYWlyPEF0b21T
dHJpbmcsIEF0b21TdHJpbmc+PiB0cmFja0lkUGFpcnM7Ci0KLSAgICBmb3IgKGF1dG8mIGlkZW50
aWZpZXJQYWlyIDogaWRlbnRpZmllclBhaXJzKSB7CisgICAgYXV0byB0cmFja0lkUGFpcnMgPSBp
ZGVudGlmaWVyUGFpcnMubWFwKFsmXShhdXRvJiBpZGVudGlmaWVyUGFpcikgewogICAgICAgICBB
U1NFUlQobV90cmFja0lkcy5jb250YWlucyhpZGVudGlmaWVyUGFpci5maXJzdCkpOwogICAgICAg
ICBBU1NFUlQobV90cmFja0lkcy5jb250YWlucyhpZGVudGlmaWVyUGFpci5zZWNvbmQpKTsKLQot
ICAgICAgICBhdXRvIG9sZElkID0gbV90cmFja0lkcy50YWtlKGlkZW50aWZpZXJQYWlyLmZpcnN0
KTsKLSAgICAgICAgYXV0byBuZXdJZCA9IG1fdHJhY2tJZHMuZ2V0KGlkZW50aWZpZXJQYWlyLnNl
Y29uZCk7Ci0gICAgICAgIHRyYWNrSWRQYWlycy5hcHBlbmQoc3RkOjptYWtlX3BhaXIob2xkSWQs
IG5ld0lkKSk7Ci0gICAgfQorICAgICAgICByZXR1cm4gc3RkOjpwYWlyIHsgbV90cmFja0lkcy50
YWtlKGlkZW50aWZpZXJQYWlyLmZpcnN0KSwgbV90cmFja0lkcy5nZXQoaWRlbnRpZmllclBhaXIu
c2Vjb25kKSB9OworICAgIH0pOwogCiAgICAgaWYgKCF0cmFja0lkUGFpcnMuaXNFbXB0eSgpKQog
ICAgICAgICBtX3NvdXJjZUJ1ZmZlclByaXZhdGUtPnVwZGF0ZVRyYWNrSWRzKFdURk1vdmUodHJh
Y2tJZFBhaXJzKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Ns
YXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwCmluZGV4IDcwYjVhZmRhNTI2ZTk5MDliOTYyZDcxMjEzZDg1YjYwYjUzNzE4MWQuLmU4
NzZlYzM3NzcxZmY0MDBjYWE4MzRjZWZhZTk1NjI1NGNjM2ZkOTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmll
ci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCkBAIC04NTMsOSArODUzLDcgQEAg
dm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVz
dGluZyhjb25zdCBSZWdpc3RyYWJsZUQKIAogICAgICAgICAgICAgc3RhdGlzdGljLnN1YmZyYW1l
VW5kZXJUb3BGcmFtZURvbWFpbnMgPSBXVEZNb3ZlKHRvcEZyYW1lRG9tYWlucyk7CiAKLSAgICAg
ICAgICAgIFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBzdGF0aXN0aWNzOwotICAgICAg
ICAgICAgc3RhdGlzdGljcy5hcHBlbmQoV1RGTW92ZShzdGF0aXN0aWMpKTsKLSAgICAgICAgICAg
IG1fc3RhdGlzdGljc1N0b3JlLT5tZXJnZVN0YXRpc3RpY3MoV1RGTW92ZShzdGF0aXN0aWNzKSk7
CisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+bWVyZ2VTdGF0aXN0aWNzKFZlY3RvcjxS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzPjo6ZnJvbShXVEZNb3ZlKHN0YXRpc3RpYykpKTsKICAgICAg
ICAgfQogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHAKaW5kZXggZjRmOGE0YzRmNGFmOTZhZjY4OTQyYzVjNmM5ODkyZmY3ZTE5OTNmMS4uNGE4
YjBlZGEwOWJmMDU4OThhM2I4YjIyYzkwOGI0N2IyOGViOWM4MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTEzODAsMTAgKzEzODAs
OSBAQCBzdGF0aWMgdm9pZCBmZXRjaERpc2tDYWNoZUVudHJpZXMoTmV0d29ya0NhY2hlOjpDYWNo
ZSogY2FjaGUsIFBBTDo6U2Vzc2lvbklEIHNlcwogICAgIEhhc2hNYXA8U2VjdXJpdHlPcmlnaW5E
YXRhLCB1aW50NjRfdD4gb3JpZ2luc0FuZFNpemVzOwogICAgIGNhY2hlLT50cmF2ZXJzZShbZmV0
Y2hPcHRpb25zLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
LCBvcmlnaW5zQW5kU2l6ZXMgPSBXVEZNb3ZlKG9yaWdpbnNBbmRTaXplcyldKGF1dG8qIHRyYXZl
cnNhbEVudHJ5KSBtdXRhYmxlIHsKICAgICAgICAgaWYgKCF0cmF2ZXJzYWxFbnRyeSkgewotICAg
ICAgICAgICAgVmVjdG9yPFdlYnNpdGVEYXRhOjpFbnRyeT4gZW50cmllczsKLQotICAgICAgICAg
ICAgZm9yIChhdXRvJiBvcmlnaW5BbmRTaXplIDogb3JpZ2luc0FuZFNpemVzKQotICAgICAgICAg
ICAgICAgIGVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbkFuZFNpemUu
a2V5LCBXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSwgb3JpZ2luQW5kU2l6ZS52YWx1ZSB9KTsK
KyAgICAgICAgICAgIGF1dG8gZW50cmllcyA9IFdURjo6bWFwKG9yaWdpbnNBbmRTaXplcywgW10o
YXV0byYgb3JpZ2luQW5kU2l6ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0
YTo6RW50cnkgeyBvcmlnaW5BbmRTaXplLmtleSwgV2Vic2l0ZURhdGFUeXBlOjpEaXNrQ2FjaGUs
IG9yaWdpbkFuZFNpemUudmFsdWUgfTsKKyAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICBS
dW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlciksIGVudHJpZXMgPSBXVEZNb3ZlKGVudHJpZXMpXSAoKSBtdXRhYmxlIHsK
ICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihlbnRyaWVzKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTm90aWZpY2F0aW9ucy9OZXR3b3JrTm90aWZp
Y2F0aW9uTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05vdGlmaWNh
dGlvbnMvTmV0d29ya05vdGlmaWNhdGlvbk1hbmFnZXIuY3BwCmluZGV4IGYwMGEyMTkzYWEyYjEz
OTgwMmIzNjZhNGYxMjFjNzZlZGZmODhmMDMuLmM1MTJmMmNiMzI1NDA0NTRiMDZkZjczMjVhMzFi
MmEzY2UxZDBjNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTm90
aWZpY2F0aW9ucy9OZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05ldHdvcmtOb3RpZmljYXRpb25NYW5h
Z2VyLmNwcApAQCAtODIsOSArODIsOSBAQCB2b2lkIE5ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2Vy
OjpkZWxldGVQdXNoQW5kTm90aWZpY2F0aW9uUmVnaXN0cmF0aW9uKGNvbnN0IFNlYwogdm9pZCBO
ZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlcjo6Z2V0T3JpZ2luc1dpdGhQdXNoQW5kTm90aWZpY2F0
aW9uUGVybWlzc2lvbnMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0b3I8U2VjdXJp
dHlPcmlnaW5EYXRhPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+IHJlcGx5SGFuZGxlciA9IFtjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoVmVjdG9yPFN0cmluZz4gb3Jp
Z2luU3RyaW5ncykgbXV0YWJsZSB7Ci0gICAgICAgIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+
IG9yaWdpbnM7Ci0gICAgICAgIGZvciAoYXV0byYgb3JpZ2luU3RyaW5nIDogb3JpZ2luU3RyaW5n
cykKLSAgICAgICAgICAgIG9yaWdpbnMuYXBwZW5kKFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbVVS
TCh7IHsgfSwgb3JpZ2luU3RyaW5nIH0pKTsKKyAgICAgICAgYXV0byBvcmlnaW5zID0gb3JpZ2lu
U3RyaW5ncy5tYXAoW10oYXV0byYgb3JpZ2luU3RyaW5nKSB7CisgICAgICAgICAgICByZXR1cm4g
U2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tVVJMKHsgeyB9LCBvcmlnaW5TdHJpbmcgfSk7CisgICAg
ICAgIH0pOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKG9yaWdpbnMpKTsKICAg
ICB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3Jh
Z2UvU3RvcmFnZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAppbmRleCBjYjkwMWI2YzU4YjE4NTlhZThiZTJhZDlk
YTkwMDJkODIyYjgwNjEyLi43ZTJkMzc3YTFiZjg2MmQ4YTE2OTVlZDk1YmIwNWFlY2M0M2RjZDFk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3Rv
cmFnZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKQEAgLTI5NSwyMCArMjk1LDE0IEBAIFZlY3RvcjxTdG9y
YWdlQXJlYUlkZW50aWZpZXI+IFN0b3JhZ2VNYW5hZ2VyOjphbGxTdG9yYWdlQXJlYUlkZW50aWZp
ZXJzKCkgY29uc3QKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIFZlY3Rv
cjxTdG9yYWdlQXJlYUlkZW50aWZpZXI+IGlkZW50aWZpZXJzOwotICAgIGZvciAoY29uc3QgYXV0
byYgbG9jYWxTdG9yYWdlTmFtZXNwYWNlIDogbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVl
cygpKSB7Ci0gICAgICAgIGZvciAoYXV0byBrZXkgOiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPnN0
b3JhZ2VBcmVhSWRlbnRpZmllcnMoKSkKLSAgICAgICAgICAgIGlkZW50aWZpZXJzLmFwcGVuZChr
ZXkpOwotICAgIH0KKyAgICBmb3IgKGNvbnN0IGF1dG8mIGxvY2FsU3RvcmFnZU5hbWVzcGFjZSA6
IG1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkKKyAgICAgICAgaWRlbnRpZmllcnMu
YXBwZW5kVmVjdG9yKGxvY2FsU3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZUFyZWFJZGVudGlmaWVy
cygpKTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgdHJhc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3Bh
Y2UgOiBtX3RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpIHsKLSAgICAg
ICAgZm9yIChhdXRvIGtleSA6IHRyYXNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdl
QXJlYUlkZW50aWZpZXJzKCkpCi0gICAgICAgICAgICBpZGVudGlmaWVycy5hcHBlbmQoa2V5KTsK
LSAgICB9CisgICAgZm9yIChjb25zdCBhdXRvJiB0cmFzaWVudExvY2FsU3RvcmFnZU5hbWVzcGFj
ZSA6IG1fdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkKKyAgICAgICAg
aWRlbnRpZmllcnMuYXBwZW5kVmVjdG9yKHRyYXNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5z
dG9yYWdlQXJlYUlkZW50aWZpZXJzKCkpOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBzZXNzaW9u
U3RvcmFnZU5hbWVzcGFjZSA6IG1fc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKSB7
Ci0gICAgICAgIGZvciAoYXV0byBrZXkgOiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFn
ZUFyZWFJZGVudGlmaWVycygpKQotICAgICAgICAgICAgaWRlbnRpZmllcnMuYXBwZW5kKGtleSk7
Ci0gICAgfQorICAgIGZvciAoY29uc3QgYXV0byYgc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UgOiBt
X3Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkKKyAgICAgICAgaWRlbnRpZmllcnMu
YXBwZW5kVmVjdG9yKHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlQXJlYUlkZW50aWZp
ZXJzKCkpOwogCiAgICAgcmV0dXJuIGlkZW50aWZpZXJzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1RyYW5zaWVudExvY2FsU3RvcmFnZU5h
bWVzcGFjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvVHJh
bnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcAppbmRleCBlZWVjNTUwZWVmNjNhZTU5YTFl
YWIzYWE4YTQ5N2EzMmMxMDUwNjI0Li5mYjk4ZWQzOTQ4MDkxNjA2ODcxNzI2YWUwODZkNTFmMTUx
MmQ0NDA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3Jh
Z2UvVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNl
LmNwcApAQCAtNTUsMTQgKzU1LDExIEBAIFN0b3JhZ2VBcmVhJiBUcmFuc2llbnRMb2NhbFN0b3Jh
Z2VOYW1lc3BhY2U6OmdldE9yQ3JlYXRlU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnCiBWZWN0b3I8
U2VjdXJpdHlPcmlnaW5EYXRhPiBUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6Om9yaWdp
bnMoKSBjb25zdAogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIFZlY3Rv
cjxTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnM7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIHN0
b3JhZ2VBcmVhIDogbV9zdG9yYWdlQXJlYU1hcC52YWx1ZXMoKSkgewotICAgICAgICBpZiAoIXN0
b3JhZ2VBcmVhLT5pdGVtcygpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG9yaWdpbnMuYXBwZW5k
KHN0b3JhZ2VBcmVhLT5zZWN1cml0eU9yaWdpbigpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gb3Jp
Z2luczsKKyAgICByZXR1cm4gV1RGOjpjb21wYWN0TWFwKG1fc3RvcmFnZUFyZWFNYXAsIFtdKGF1
dG8mIGVudHJ5KSAtPiBzdGQ6Om9wdGlvbmFsPFNlY3VyaXR5T3JpZ2luRGF0YT4geworICAgICAg
ICBpZiAoZW50cnkudmFsdWUtPml0ZW1zKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlLT5zZWN1cml0eU9yaWdp
bigpOworICAgIH0pOwogfQogCiB2b2lkIFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6
Y2xlYXJTdG9yYWdlQXJlYXNNYXRjaGluZ09yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEm
IHNlY3VyaXR5T3JpZ2luKQpAQCAtODIsMTAgKzc5LDkgQEAgdm9pZCBUcmFuc2llbnRMb2NhbFN0
b3JhZ2VOYW1lc3BhY2U6OmNsZWFyQWxsU3RvcmFnZUFyZWFzKCkKIAogVmVjdG9yPFN0b3JhZ2VB
cmVhSWRlbnRpZmllcj4gVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpzdG9yYWdlQXJl
YUlkZW50aWZpZXJzKCkgY29uc3QKIHsKLSAgICBWZWN0b3I8U3RvcmFnZUFyZWFJZGVudGlmaWVy
PiBpZGVudGlmaWVyczsKLSAgICBmb3IgKGF1dG8mIHN0b3JhZ2VBcmVhIDogbV9zdG9yYWdlQXJl
YU1hcC52YWx1ZXMoKSkKLSAgICAgICAgaWRlbnRpZmllcnMuYXBwZW5kKHN0b3JhZ2VBcmVhLT5p
ZGVudGlmaWVyKCkpOwotICAgIHJldHVybiBpZGVudGlmaWVyczsKKyAgICByZXR1cm4gV1RGOjpt
YXAobV9zdG9yYWdlQXJlYU1hcCwgW10oYXV0byYgZW50cnkpIHsKKyAgICAgICAgcmV0dXJuIGVu
dHJ5LnZhbHVlLT5pZGVudGlmaWVyKCk7CisgICAgfSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNo
ZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcAppbmRleCBkYTljYjhhNWRjYzBlZDdmOWY0
YzJlM2QyZjI3Njg5NGEwMWVkMTc0Li4zZTFhZTMxMzAyOGFkMDAzY2Q1NWY4MWU0NmU1Y2FlMGJm
MWVhZGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0Nh
Y2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcApAQCAtMjA5LDggKzIwOSw5IEBA
IHZvaWQgQ2FjaGU6OmZpbmlzaE9wZW5pbmcoQ29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2ss
IHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYKIHsKICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxSZWNvcmRJbmZvcm1hdGlvbj4+IHJlY29yZHM7CiAgICAgZm9yIChhdXRvJiB2YWx1ZSA6
IG1fcmVjb3Jkcy52YWx1ZXMoKSkgeworICAgICAgICByZWNvcmRzLnJlc2VydmVDYXBhY2l0eShy
ZWNvcmRzLnNpemUoKSArIHZhbHVlLnNpemUoKSk7CiAgICAgICAgIGZvciAoYXV0byYgcmVjb3Jk
IDogdmFsdWUpCi0gICAgICAgICAgICByZWNvcmRzLmFwcGVuZChyZWNvcmQpOworICAgICAgICAg
ICAgcmVjb3Jkcy51bmNoZWNrZWRBcHBlbmQocmVjb3JkKTsKICAgICB9CiAgICAgc3RkOjpzb3J0
KHJlY29yZHMuYmVnaW4oKSwgcmVjb3Jkcy5lbmQoKSwgWyZdKGNvbnN0IGF1dG8mIGEsIGNvbnN0
IGF1dG8mIGIpIHsKICAgICAgICAgcmV0dXJuIGEuZ2V0KCkuaW5zZXJ0aW9uVGltZSA8IGIuZ2V0
KCkuaW5zZXJ0aW9uVGltZTsKQEAgLTY4Miw4ICs2ODMsOSBAQCBWZWN0b3I8S2V5PiBDYWNoZTo6
a2V5cygpIGNvbnN0CiB7CiAgICAgVmVjdG9yPEtleT4ga2V5czsKICAgICBmb3IgKGF1dG8mIHJl
Y29yZHMgOiBtX3JlY29yZHMudmFsdWVzKCkpIHsKKyAgICAgICAga2V5cy5yZXNlcnZlQ2FwYWNp
dHkoa2V5cy5zaXplKCkgKyByZWNvcmRzLnNpemUoKSk7CiAgICAgICAgIGZvciAoYXV0byYgcmVj
b3JkIDogcmVjb3JkcykKLSAgICAgICAgICAgIGtleXMuYXBwZW5kKHJlY29yZC5rZXkpOworICAg
ICAgICAgICAga2V5cy51bmNoZWNrZWRBcHBlbmQocmVjb3JkLmtleSk7CiAgICAgfQogICAgIHJl
dHVybiBrZXlzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
dG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHAKaW5kZXggNDA5YTMzODhhMGI4ZWNmOWFi
NzEwNDliNzI5ZmRlMzkyN2M0OGViNS4uNDEzNjk0NGI1ZmY4NWVmMjNmY2VlNDdlZWQ4MzJmMWVk
MGI2MDQ3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdl
L1NRTGl0ZVN0b3JhZ2VBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuY3BwCkBAIC02OSw4ICs2OSw5IEBAIFNRTGl0ZVN0
b3JhZ2VBcmVhOjpTUUxpdGVTdG9yYWdlQXJlYSh1bnNpZ25lZCBxdW90YSwgY29uc3QgV2ViQ29y
ZTo6Q2xpZW50T3JpZ2luCiB7CiAgICAgQVNTRVJUKCFpc01haW5SdW5Mb29wKCkpOwogCisgICAg
bV9jYWNoZWRTdGF0ZW1lbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc3RhdGljX2Nhc3Q8c2l6
ZV90PihTdGF0ZW1lbnRUeXBlOjpJbnZhbGlkKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzdGF0aWNfY2FzdDxzaXplX3Q+KFN0YXRlbWVudFR5cGU6OkludmFsaWQpOyArK2kpCi0gICAg
ICAgIG1fY2FjaGVkU3RhdGVtZW50cy5hcHBlbmQobnVsbHB0cik7CisgICAgICAgIG1fY2FjaGVk
U3RhdGVtZW50cy51bmNoZWNrZWRBcHBlbmQobnVsbHB0cik7CiB9CiAKIHZvaWQgU1FMaXRlU3Rv
cmFnZUFyZWE6OmNsb3NlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FwcGxl
UGF5L1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5LmNwcAppbmRleCAwNGE2OTY4MTc4
YTZmNzU5NGMyODBlZjczMTgxOThjYjYzMmI5MjMwLi5iY2NjMDU1MDc3MTc3OTc2NjhmOWM5ZGNm
MTAzMTA5MTExYjk4YWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BcHBsZVBh
eS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkuY3BwCkBAIC05Myw5ICs5Myw5
IEBAIHZvaWQgV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OnNob3dQYXltZW50VUkoV2ViQ29y
ZTo6UGFnZUlkZW50aWZpZXIgZGVzdGluYXRpCiAKICAgICBVUkwgb3JpZ2luYXRpbmdVUkwoVVJM
KCksIG9yaWdpbmF0aW5nVVJMU3RyaW5nKTsKIAotICAgIFZlY3RvcjxVUkw+IGxpbmtJY29uVVJM
czsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGxpbmtJY29uVVJMU3RyaW5nIDogbGlua0ljb25VUkxT
dHJpbmdzKQotICAgICAgICBsaW5rSWNvblVSTHMuYXBwZW5kKFVSTChVUkwoKSwgbGlua0ljb25V
UkxTdHJpbmcpKTsKKyAgICBhdXRvIGxpbmtJY29uVVJMcyA9IGxpbmtJY29uVVJMU3RyaW5ncy5t
YXAoW10oYXV0byYgbGlua0ljb25VUkxTdHJpbmcpIHsKKyAgICAgICAgcmV0dXJuIFVSTChVUkwo
KSwgbGlua0ljb25VUkxTdHJpbmcpOworICAgIH0pOwogCiAgICAgcGxhdGZvcm1TaG93UGF5bWVu
dFVJKHdlYlBhZ2VQcm94eUlELCBvcmlnaW5hdGluZ1VSTCwgbGlua0ljb25VUkxzLCBwYXltZW50
UmVxdWVzdCwgW3RoaXMsIHdlYWtUaGlzID0gV2Vha1B0ciB7ICp0aGlzIH1dKGJvb2wgcmVzdWx0
KSB7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJTmF2aWdhdGlvbi5jcHAKaW5kZXggODg0NjZjNDllZDBkZTE4ZTIwMzJjYWEwYTA0NjQ4
MzllYTc0NTEwMS4uNGE4ODkwMzllOTRhNjJmYTU5MmYxOTU3Zjc2ZDg1OWU3OWM5ZmM2ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uLmNwcApAQCAtNjIs
MTAgKzYyLDEwIEBAIE5hdmlnYXRpb246Ok5hdmlnYXRpb24oV2ViTmF2aWdhdGlvblN0YXRlJiBz
dGF0ZSwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVxCiAgICAgOiBtX25hdmlnYXRpb25J
RChzdGF0ZS5nZW5lcmF0ZU5hdmlnYXRpb25JRCgpKQogICAgICwgbV9vcmlnaW5hbFJlcXVlc3Qo
V1RGTW92ZShyZXF1ZXN0KSkKICAgICAsIG1fY3VycmVudFJlcXVlc3QobV9vcmlnaW5hbFJlcXVl
c3QpCisgICAgLCBtX3JlZGlyZWN0Q2hhaW4geyBtX29yaWdpbmFsUmVxdWVzdC51cmwoKSB9CiAg
ICAgLCBtX2Zyb21JdGVtKGZyb21JdGVtKQogICAgICwgbV9jbGllbnROYXZpZ2F0aW9uQWN0aXZp
dHkobmF2aWdhdGlvbkFjdGl2aXR5VGltZW91dCkKIHsKLSAgICBtX3JlZGlyZWN0Q2hhaW4uYXBw
ZW5kKG1fb3JpZ2luYWxSZXF1ZXN0LnVybCgpKTsKIH0KIAogTmF2aWdhdGlvbjo6TmF2aWdhdGlv
bihXZWJOYXZpZ2F0aW9uU3RhdGUmIHN0YXRlLCBXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiB0YXJn
ZXRJdGVtLCBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBmcm9tSXRlbSwgRnJhbWVMb2FkVHlwZSBi
YWNrRm9yd2FyZEZyYW1lTG9hZFR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9XS1NoYXJlU2hlZXQubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9XS1NoYXJlU2hlZXQubW0KaW5kZXggNTU0YWI4MDY0MjdlY2I5Y2U4MzBhY2E5N2ZjN2RkY2Rj
OTg1M2UxNS4uZTM4OGEzYzM3ZDBmNjk2NWQ3NjkxZjI3YjE3ODBhOTEzZjA0ZWUyNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tTaGFyZVNoZWV0Lm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2hhcmVTaGVldC5tbQpAQCAtMTAwLDkg
KzEwMCw5IEBAIHN0YXRpYyB2b2lkIGFwcGVuZEZpbGVzQXNTaGFyZWFibGVVUkxzKFJldGFpblB0
cjxOU011dGFibGVBcnJheT4mJiBzaGFyZURhdGFBcnJhCiAgICAgICAgIFN0cmluZyBmaWxlTmFt
ZTsKICAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gZmlsZURhdGE7CiAgICAgfTsKLSAgICBWZWN0
b3I8RmlsZVdyaXRlVGFzaz4gZmlsZVdyaXRlVGFza3M7Ci0gICAgZm9yIChhdXRvJiBmaWxlIDog
ZmlsZXMpCi0gICAgICAgIGZpbGVXcml0ZVRhc2tzLmFwcGVuZCh7IGZpbGUuZmlsZU5hbWUuaXNv
bGF0ZWRDb3B5KCksIGZpbGUuZmlsZURhdGEtPmNyZWF0ZU5TRGF0YSgpIH0pOworICAgIGF1dG8g
ZmlsZVdyaXRlVGFza3MgPSBmaWxlcy5tYXAoW10oYXV0byYgZmlsZSkgeworICAgICAgICByZXR1
cm4gRmlsZVdyaXRlVGFzayB7IGZpbGUuZmlsZU5hbWUuaXNvbGF0ZWRDb3B5KCksIGZpbGUuZmls
ZURhdGEtPmNyZWF0ZU5TRGF0YSgpIH07CisgICAgfSk7CiAKICAgICBhdXRvIHF1ZXVlID0gV29y
a1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBsZS5XZWJLaXQuV0tTaGFyZVNoZWV0LlNoYXJlYWJsZUZp
bGVXcml0ZXIiKTsKICAgICBxdWV1ZS0+ZGlzcGF0Y2goW3NoYXJlRGF0YUFycmF5ID0gV1RGTW92
ZShzaGFyZURhdGFBcnJheSksIGZpbGVXcml0ZVRhc2tzID0gV1RGTW92ZShmaWxlV3JpdGVUYXNr
cyksIHRlbXBvcmFyeURpcmVjdG9yeSA9IHJldGFpblB0cih0ZW1wb3JhcnlEaXJlY3RvcnkpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5
Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2Nv
YS5tbQppbmRleCBmMWMzNzA2YjA5ZmY5ZTEyODIxZDdkYTNhMjI1YjcwYmE0NmRjZTM2Li41NmEx
NGQ4YmYzNmVkNDRkYWRiZjFlNGM0ODQwYTVlMDY0MTRiOGU3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQpAQCAtNjY2LDE0ICs2
NjYsMTIgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlc3RvcmVBcHBIaWdobGlnaHRzQW5kU2Nyb2xs
VG9JbmRleChjb25zdCBWZWN0b3I8UmVmPFNoYXJlZE0KICAgICBpZiAoIWhhc1J1bm5pbmdQcm9j
ZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxTaGFyZWRNZW1vcnk6OklQQ0hh
bmRsZT4gbWVtb3J5SGFuZGxlczsKLQotICAgIGZvciAoYXV0byBoaWdobGlnaHQgOiBoaWdobGln
aHRzKSB7CisgICAgYXV0byBtZW1vcnlIYW5kbGVzID0gV1RGOjpjb21wYWN0TWFwKGhpZ2hsaWdo
dHMsIFtdKGF1dG8mIGhpZ2hsaWdodCkgLT4gc3RkOjpvcHRpb25hbDxTaGFyZWRNZW1vcnk6OklQ
Q0hhbmRsZT4gewogICAgICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7Ci0gICAgICAg
IGhpZ2hsaWdodC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9u
OjpSZWFkT25seSk7Ci0KLSAgICAgICAgbWVtb3J5SGFuZGxlcy5hcHBlbmQoU2hhcmVkTWVtb3J5
OjpJUENIYW5kbGUgeyBXVEZNb3ZlKGhhbmRsZSksIGhpZ2hsaWdodC0+c2l6ZSgpIH0pOwotICAg
IH0KKyAgICAgICAgaWYgKCFoaWdobGlnaHQtPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1l
bW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICAgICAgcmV0dXJuIFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIHsgV1RGTW92ZSho
YW5kbGUpLCBoaWdobGlnaHQtPnNpemUoKSB9OworICAgIH0pOwogICAgIAogICAgIHNldFVwSGln
aGxpZ2h0c09ic2VydmVyKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0ZyYW1lTG9hZFN0YXRlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0ZyYW1lTG9hZFN0
YXRlLmNwcAppbmRleCBjNjFiZWQ4MWQwOTI4NDYzMmJmMjk2NWVkMmM5OWIwYzZmZTQwMWEzLi42
OWU1M2Q3YmViODZjZTZiNDA2ZjNjZGI4MzkyYWI3MmEzZmZjODI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9GcmFtZUxvYWRTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwCkBAIC05MCwxMSArOTAsOCBAQCB2b2lkIEZy
YW1lTG9hZFN0YXRlOjpkaWRGaW5pc2hMb2FkKCkKIAogICAgIG1fc3RhdGUgPSBTdGF0ZTo6Rmlu
aXNoZWQ7CiAKLSAgICBWZWN0b3I8T2JzZXJ2ZXIqPiBvYnNlcnZlcnNDb3B5OwotICAgIGZvciAo
YXV0byYgb2JzZXJ2ZXIgOiBtX29ic2VydmVycykKLSAgICAgICAgb2JzZXJ2ZXJzQ29weS5hcHBl
bmQoJm9ic2VydmVyKTsKLSAgICBmb3IgKGF1dG8qIG9ic2VydmVyIDogb2JzZXJ2ZXJzQ29weSkK
LSAgICAgICAgb2JzZXJ2ZXItPmRpZEZpbmlzaExvYWQoKTsKKyAgICBmb3IgKGF1dG8mIG9ic2Vy
dmVyIDogY29weVRvVmVjdG9yT2Y8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxPYnNlcnZlcj4+KG1f
b2JzZXJ2ZXJzKSkKKyAgICAgICAgb2JzZXJ2ZXIuZ2V0KCkuZGlkRmluaXNoTG9hZCgpOwogfQog
CiB2b2lkIEZyYW1lTG9hZFN0YXRlOjpkaWRGYWlsTG9hZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAppbmRleCA4
MzFiMjFhNWYwM2ZhNDZhYjg0MDgwMWE5NDkxOTY3MzlkYTA2N2ViLi45MjJhMGRiOGFlZTZlMDA0
YTYzYzUyMzAwODBlNWM2Y2Y3ZjYxMzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKQEAgLTE4Myw4ICsxODMs
OCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05l
d1Byb2Nlc3MoKQogICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsID0g
Y29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9S
ZWdpc3RlckFzTG9jYWwoKSk7CiAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFz
Tm9BY2Nlc3MgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigp
LnNjaGVtZXNUb1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsKICAgICBwYXJhbWV0ZXJzLmNhY2hlTW9k
ZWwgPSBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgpOwotICAg
IGZvciAoYXV0byYgc2NoZW1lIDogV2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9t
UHJvdG9jb2xIYW5kbGVycygpKQotICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3Rl
cmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOworICAgIHBhcmFtZXRlcnMudXJs
U2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMgPSBXZWJQcm9jZXNzUG9vbDo6dXJs
U2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCk7CisKICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQogICAgIGlmIChTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSA9IFdlYlByb2Nl
c3NQb29sOjpjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7ICFjb29raWVTdG9yYWdlRGlyZWN0b3J5
LmlzRW1wdHkoKSkgewogICAgICAgICBpZiAoYXV0byBoYW5kbGUgPSBTYW5kYm94RXh0ZW5zaW9u
OjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29va2llU3RvcmFnZURpcmVjdG9y
eSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJV
c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9V
c2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAKaW5kZXggZmEyNTRj
MmRhZGMwNjMwMjhkZmQ1MDRkMjg5MGE4OTJhZWRhZmIwOC4uNWJiZTczOTYyMDUyN2E4MjdjZDU3
ZjE2OWFmMmYwYzBjNTk2YTcwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
VXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclBy
b3h5LmNwcApAQCAtMTE3LDExICsxMTcsMTEgQEAgVXNlckNvbnRlbnRDb250cm9sbGVyUGFyYW1l
dGVycyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cGFyYW1ldGVycygpIGNvbnMKICAg
ICBwYXJhbWV0ZXJzLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyKCk7CiAgICAgCiAgICAgQVNTRVJU
KHBhcmFtZXRlcnMudXNlckNvbnRlbnRXb3JsZHMuaXNFbXB0eSgpKTsKLSAgICBmb3IgKGNvbnN0
IGF1dG8mIGlkZW50aWZpZXIgOiBtX2Fzc29jaWF0ZWRDb250ZW50V29ybGRzKSB7CisgICAgcGFy
YW1ldGVycy51c2VyQ29udGVudFdvcmxkcyA9IFdURjo6bWFwKG1fYXNzb2NpYXRlZENvbnRlbnRX
b3JsZHMsIFtdKGF1dG8mIGlkZW50aWZpZXIpIHsKICAgICAgICAgYXV0byogd29ybGQgPSBBUEk6
OkNvbnRlbnRXb3JsZDo6d29ybGRGb3JJZGVudGlmaWVyKGlkZW50aWZpZXIpOwogICAgICAgICBS
RUxFQVNFX0FTU0VSVCh3b3JsZCk7Ci0gICAgICAgIHBhcmFtZXRlcnMudXNlckNvbnRlbnRXb3Js
ZHMuYXBwZW5kKHdvcmxkLT53b3JsZERhdGEoKSk7Ci0gICAgfQorICAgICAgICByZXR1cm4gd29y
bGQtPndvcmxkRGF0YSgpOworICAgIH0pOwogCiAgICAgZm9yIChhdXRvIHVzZXJTY3JpcHQgOiBt
X3VzZXJTY3JpcHRzLT5lbGVtZW50c09mVHlwZTxBUEk6OlVzZXJTY3JpcHQ+KCkpCiAgICAgICAg
IHBhcmFtZXRlcnMudXNlclNjcmlwdHMuYXBwZW5kKHsgdXNlclNjcmlwdC0+aWRlbnRpZmllcigp
LCB1c2VyU2NyaXB0LT5jb250ZW50V29ybGQoKS5pZGVudGlmaWVyKCksIHVzZXJTY3JpcHQtPnVz
ZXJTY3JpcHQoKSB9KTsKQEAgLTEyOSw4ICsxMjksOSBAQCBVc2VyQ29udGVudENvbnRyb2xsZXJQ
YXJhbWV0ZXJzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpwYXJhbWV0ZXJzKCkgY29u
cwogICAgIGZvciAoYXV0byB1c2VyU3R5bGVTaGVldCA6IG1fdXNlclN0eWxlU2hlZXRzLT5lbGVt
ZW50c09mVHlwZTxBUEk6OlVzZXJTdHlsZVNoZWV0PigpKQogICAgICAgICBwYXJhbWV0ZXJzLnVz
ZXJTdHlsZVNoZWV0cy5hcHBlbmQoeyB1c2VyU3R5bGVTaGVldC0+aWRlbnRpZmllcigpLCB1c2Vy
U3R5bGVTaGVldC0+Y29udGVudFdvcmxkKCkuaWRlbnRpZmllcigpLCB1c2VyU3R5bGVTaGVldC0+
dXNlclN0eWxlU2hlZXQoKSB9KTsKIAotICAgIGZvciAoYXV0byYgaGFuZGxlciA6IG1fc2NyaXB0
TWVzc2FnZUhhbmRsZXJzLnZhbHVlcygpKQotICAgICAgICBwYXJhbWV0ZXJzLm1lc3NhZ2VIYW5k
bGVycy5hcHBlbmQoeyBoYW5kbGVyLT5pZGVudGlmaWVyKCksIGhhbmRsZXItPndvcmxkKCkuaWRl
bnRpZmllcigpLCBoYW5kbGVyLT5uYW1lKCkgfSk7CisgICAgcGFyYW1ldGVycy5tZXNzYWdlSGFu
ZGxlcnMgPSBXVEY6Om1hcChtX3NjcmlwdE1lc3NhZ2VIYW5kbGVycywgW10oYXV0byBlbnRyeSkg
eworICAgICAgICByZXR1cm4gV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXJEYXRhIHsgZW50cnkudmFs
dWUtPmlkZW50aWZpZXIoKSwgZW50cnkudmFsdWUtPndvcmxkKCkuaWRlbnRpZmllcigpLCBlbnRy
eS52YWx1ZS0+bmFtZSgpIH07CisgICAgfSk7CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKQogICAgIHBhcmFtZXRlcnMuY29udGVudFJ1bGVMaXN0cyA9IGNvbnRlbnRSdWxlTGlzdERh
dGEoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0
aW9uL0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkF1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmNwcAppbmRleCA5MzQ4MGVkNWNi
MzlhNjFjYmNmNjczNTFlMGE4ODBlYTA5ZmU0NDc2Li42NTcyZjUzOTU5OGVmNDFkZDEwMzA1YWNl
ZWM4ZjE4N2Q4ZDUyNTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJB
dXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRvck1hbmFnZXIuY3BwCkBA
IC00MTYsMTEgKzQxNiwxMSBAQCB2b2lkIEF1dGhlbnRpY2F0b3JNYW5hZ2VyOjpzdGFydERpc2Nv
dmVyeShjb25zdCBUcmFuc3BvcnRTZXQmIHRyYW5zcG9ydHMpCiB7CiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKICAgICBBU1NFUlQobV9zZXJ2aWNlcy5pc0VtcHR5KCkgJiYgdHJhbnNw
b3J0cy5zaXplKCkgPD0gbWF4VHJhbnNwb3J0TnVtYmVyKTsKLSAgICBmb3IgKGF1dG8mIHRyYW5z
cG9ydCA6IHRyYW5zcG9ydHMpIHsKKyAgICBtX3NlcnZpY2VzID0gV1RGOjptYXAodHJhbnNwb3J0
cywgW3RoaXNdKGF1dG8mIHRyYW5zcG9ydCkgewogICAgICAgICBhdXRvIHNlcnZpY2UgPSBjcmVh
dGVTZXJ2aWNlKHRyYW5zcG9ydCwgKnRoaXMpOwogICAgICAgICBzZXJ2aWNlLT5zdGFydERpc2Nv
dmVyeSgpOwotICAgICAgICBtX3NlcnZpY2VzLmFwcGVuZChXVEZNb3ZlKHNlcnZpY2UpKTsKLSAg
ICB9CisgICAgICAgIHJldHVybiBzZXJ2aWNlOworICAgIH0pOwogfQogCiB2b2lkIEF1dGhlbnRp
Y2F0b3JNYW5hZ2VyOjppbml0VGltZU91dFRpbWVyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwCmluZGV4IGM3NDM0M2U2NWI4ODlmNzg2OWRjOGNj
YTM0MDUxYjhiMjY1NDAyYjYuLmRlYzllODM5MjIzNjhmZTYxNTVlMDNkNjlhM2YzN2Q5ZGJmMDE3
NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlz
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmNw
cApAQCAtMzQwLDE2ICszNDAsMTEgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3Q6OnJlbW92ZUFs
bEl0ZW1zKCkKIAogICAgIExPRyhCYWNrRm9yd2FyZCwgIihCYWNrL0ZvcndhcmQpIFdlYkJhY2tG
b3J3YXJkTGlzdCAlcCByZW1vdmVBbGxJdGVtcyAoaGFzICV6dSBvZiB0aGVtKSIsIHRoaXMsIG1f
ZW50cmllcy5zaXplKCkpOwogCi0gICAgVmVjdG9yPFJlZjxXZWJCYWNrRm9yd2FyZExpc3RJdGVt
Pj4gcmVtb3ZlZEl0ZW1zOwotCi0gICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fZW50cmllcykgewor
ICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2VudHJpZXMpCiAgICAgICAgIGRpZFJlbW92ZUl0ZW0o
ZW50cnkpOwotICAgICAgICByZW1vdmVkSXRlbXMuYXBwZW5kKFdURk1vdmUoZW50cnkpKTsKLSAg
ICB9CiAKLSAgICBtX2VudHJpZXMuY2xlYXIoKTsKICAgICBtX2N1cnJlbnRJbmRleCA9IHN0ZDo6
bnVsbG9wdDsKLSAgICBtX3BhZ2UtPmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdChudWxscHRyLCBX
VEZNb3ZlKHJlbW92ZWRJdGVtcykpOworICAgIG1fcGFnZS0+ZGlkQ2hhbmdlQmFja0ZvcndhcmRM
aXN0KG51bGxwdHIsIHN0ZDo6ZXhjaGFuZ2UobV9lbnRyaWVzLCB7IH0pKTsKIH0KIAogdm9pZCBX
ZWJCYWNrRm9yd2FyZExpc3Q6OmNsZWFyKCkKQEAgLTM2MywyMSArMzU4LDE3IEBAIHZvaWQgV2Vi
QmFja0ZvcndhcmRMaXN0OjpjbGVhcigpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxX
ZWJCYWNrRm9yd2FyZExpc3RJdGVtPiBjdXJyZW50SXRlbSA9IHRoaXMtPmN1cnJlbnRJdGVtKCk7
Ci0gICAgVmVjdG9yPFJlZjxXZWJCYWNrRm9yd2FyZExpc3RJdGVtPj4gcmVtb3ZlZEl0ZW1zOwog
CiAgICAgaWYgKCFjdXJyZW50SXRlbSkgewogICAgICAgICAvLyBXZSBzaG91bGQgb25seSBldmVy
IGhhdmUgbm8gY3VycmVudCBpdGVtIGlmIHdlIGFsc28gaGF2ZSBubyBjdXJyZW50IGl0ZW0gaW5k
ZXguCiAgICAgICAgIEFTU0VSVCghbV9jdXJyZW50SW5kZXgpOwogCiAgICAgICAgIC8vIEJ1dCBq
dXN0IGluIGNhc2UgaXQgZG9lcyBoYXBwZW4gaW4gcHJhY3RpY2Ugd2Ugc2hvdWxkIGdldCBiYWNr
IGludG8gYSBjb25zaXN0ZW50IHN0YXRlIG5vdy4KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIGRpZFJlbW92ZUl0ZW0obV9lbnRyaWVzW2ld
KTsKLSAgICAgICAgICAgIHJlbW92ZWRJdGVtcy5hcHBlbmQoV1RGTW92ZShtX2VudHJpZXNbaV0p
KTsKLSAgICAgICAgfQorICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9lbnRyaWVzKQorICAg
ICAgICAgICAgZGlkUmVtb3ZlSXRlbShlbnRyeSk7CiAKLSAgICAgICAgbV9lbnRyaWVzLmNsZWFy
KCk7CiAgICAgICAgIG1fY3VycmVudEluZGV4ID0gc3RkOjpudWxsb3B0OwotICAgICAgICBtX3Bh
Z2UtPmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdChudWxscHRyLCBXVEZNb3ZlKHJlbW92ZWRJdGVt
cykpOworICAgICAgICBtX3BhZ2UtPmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdChudWxscHRyLCBz
dGQ6OmV4Y2hhbmdlKG1fZW50cmllcywgeyB9KSk7CiAKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTM4Nyw2ICszNzgsNyBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6Y2xlYXIoKQogICAg
ICAgICAgICAgZGlkUmVtb3ZlSXRlbShtX2VudHJpZXNbaV0pOwogICAgIH0KIAorICAgIFZlY3Rv
cjxSZWY8V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4+IHJlbW92ZWRJdGVtczsKICAgICByZW1vdmVk
SXRlbXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplIC0gMSk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgaWYgKG1fY3VycmVudEluZGV4ICYmIGkg
IT0gKm1fY3VycmVudEluZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bv
b2wuY3BwCmluZGV4IGZhMTc0MmNmMzJkYTk5NTI3MzIzZGZjN2M4YmYwYTc5MDYzMDQxZmUuLjYx
YmQzMGEzNjQxNDczYzVkYjJjNTc0MzBlOTNjYjdlMjY2M2FkODkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKQEAgLTg0OSwxMCArODQ5LDkgQEAgdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBw
cm9jZXNzLCBXZWJzaXRlRGEKICAgICAgICAgICAgIHBhcmFtZXRlcnMuaW5qZWN0ZWRCdW5kbGVQ
YXRoRXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaGFuZGxlKTsKICAgICB9CiAKLSAgICBmb3Ig
KGF1dG8mIHBhdGggOiBtX3Jlc29sdmVkUGF0aHMuYWRkaXRpb25hbFdlYlByb2Nlc3NTYW5kYm94
RXh0ZW5zaW9uUGF0aHMpIHsKLSAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0gIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZVdpdGhvdXRSZXNvbHZpbmdQYXRoKHBhdGgsIFNhbmRib3hFeHRl
bnNpb246OlR5cGU6OlJlYWRPbmx5KSkKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuYWRkaXRpb25h
bFNhbmRib3hFeHRlbnNpb25IYW5kbGVzLmFwcGVuZChXVEZNb3ZlKCpoYW5kbGUpKTsKLSAgICB9
CisgICAgcGFyYW1ldGVycy5hZGRpdGlvbmFsU2FuZGJveEV4dGVuc2lvbkhhbmRsZXMgPSBXVEY6
OmNvbXBhY3RNYXAobV9yZXNvbHZlZFBhdGhzLmFkZGl0aW9uYWxXZWJQcm9jZXNzU2FuZGJveEV4
dGVuc2lvblBhdGhzLCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVXaXRob3V0UmVzb2x2aW5nUGF0aChwYXRoLCBTYW5kYm94RXh0
ZW5zaW9uOjpUeXBlOjpSZWFkT25seSk7CisgICAgfSk7CiAKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQogICAgIHNldEphdmFTY3JpcHRDb25maWd1cmF0aW9uRmlsZUVuYWJsZWRGcm9tRGVmYXVs
dHMoKTsKQEAgLTE4NzAsMTQgKzE4NjksOSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZW1vdmVQ
cm9jZXNzRnJvbU9yaWdpbkNhY2hlU2V0KFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKICAgICBM
T0coUHJvY2Vzc1N3YXBwaW5nLCAiKFByb2Nlc3NTd2FwcGluZykgUmVtb3ZpbmcgcHJvY2VzcyB3
aXRoIHBpZCAlaSBmcm9tIHRoZSBvcmlnaW4gY2FjaGUgc2V0IiwgcHJvY2Vzcy5wcm9jZXNzSWRl
bnRpZmllcigpKTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSB2ZXJ5IGluZWZmaWNpZW50
IGFzIHRoZSBudW1iZXIgb2YgcmVtZW1iZXJlZCBvcmlnaW5zIGFuZCBwcm9jZXNzZXMgZ3Jvd3MK
LSAgICBWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IHJlZ2lzdHJhYmxlRG9tYWlu
c1RvUmVtb3ZlOwotICAgIGZvciAoYXV0byBlbnRyeSA6IG1fc3dhcHBlZFByb2Nlc3Nlc1BlclJl
Z2lzdHJhYmxlRG9tYWluKSB7Ci0gICAgICAgIGlmIChlbnRyeS52YWx1ZSA9PSAmcHJvY2VzcykK
LSAgICAgICAgICAgIHJlZ2lzdHJhYmxlRG9tYWluc1RvUmVtb3ZlLmFwcGVuZChlbnRyeS5rZXkp
OwotICAgIH0KLQotICAgIGZvciAoYXV0byYgcmVnaXN0cmFibGVEb21haW4gOiByZWdpc3RyYWJs
ZURvbWFpbnNUb1JlbW92ZSkKLSAgICAgICAgbV9zd2FwcGVkUHJvY2Vzc2VzUGVyUmVnaXN0cmFi
bGVEb21haW4ucmVtb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKTsKKyAgICBtX3N3YXBwZWRQcm9jZXNz
ZXNQZXJSZWdpc3RyYWJsZURvbWFpbi5yZW1vdmVJZihbJl0oYXV0byYgZW50cnkpIHsKKyAgICAg
ICAgcmV0dXJuIGVudHJ5LnZhbHVlID09ICZwcm9jZXNzOworICAgIH0pOwogfQogCiB2b2lkIFdl
YlByb2Nlc3NQb29sOjpwcm9jZXNzRm9yTmF2aWdhdGlvbihXZWJQYWdlUHJveHkmIHBhZ2UsIGNv
bnN0IEFQSTo6TmF2aWdhdGlvbiYgbmF2aWdhdGlvbiwgUmVmPFdlYlByb2Nlc3NQcm94eT4mJiBz
b3VyY2VQcm9jZXNzLCBjb25zdCBVUkwmIHNvdXJjZVVSTCwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRC
eUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBXZWJQcm9jZXNzUHJveHk6OkNh
cHRpdmVQb3J0YWxNb2RlIGNhcHRpdmVQb3J0YWxNb2RlLCBjb25zdCBGcmFtZUluZm9EYXRhJiBm
cmFtZUluZm8sIFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmIGRhdGFTdG9yZSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmLCBTdXNwZW5kZWRQYWdlUHJveHkqLCBj
b25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCmluZGV4IGIxMjg2MGRmNTEwYmM0ZTNkZmJiN2UzZmM5
MjBiNWQwNDJiODQzMjEuLjM2OGEzOTU4N2RhMzNkZTY0YzFiODlkMGU2MzhkMzhiODhkN2ExN2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApAQCAtOTM2
LDggKzkzNiw5IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojpwcm9jZXNzRGlkVGVybWluYXRlT3JG
YWlsZWRUb0xhdW5jaChQcm9jZXNzVGVybWluYXRpb25SZWFzCiAKICAgICAvLyBUaGVyZSBpcyBh
IG5lc3RlZCB0cmFuc2FjdGlvbiBpbiBXZWJQYWdlUHJveHk6OnJlc2V0U3RhdGVBZnRlclByb2Nl
c3NFeGl0ZWQoKSB0aGF0IHdlIGRvbid0IHdhbnQgdG8gY29tbWl0IGJlZm9yZSB0aGUgY2xpZW50
IGNhbGwgYmVsb3cgKGRpc3BhdGNoUHJvY2Vzc0RpZFRlcm1pbmF0ZSkuCiAgICAgVmVjdG9yPFBh
Z2VMb2FkU3RhdGU6OlRyYW5zYWN0aW9uPiBwYWdlTG9hZFN0YXRlVHJhbnNhY3Rpb25zOworICAg
IHBhZ2VMb2FkU3RhdGVUcmFuc2FjdGlvbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwYWdlcy5z
aXplKCkpOwogICAgIGZvciAoYXV0byYgcGFnZSA6IHBhZ2VzKSB7Ci0gICAgICAgIHBhZ2VMb2Fk
U3RhdGVUcmFuc2FjdGlvbnMuYXBwZW5kKHBhZ2UtPnBhZ2VMb2FkU3RhdGUoKS50cmFuc2FjdGlv
bigpKTsKKyAgICAgICAgcGFnZUxvYWRTdGF0ZVRyYW5zYWN0aW9ucy51bmNoZWNrZWRBcHBlbmQo
cGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnRyYW5zYWN0aW9uKCkpOwogICAgICAgICBwYWdlLT5yZXNl
dFN0YXRlQWZ0ZXJQcm9jZXNzVGVybWluYXRpb24ocmVhc29uKTsKICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUu
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9y
ZS5jcHAKaW5kZXggYjM2ZDlhNzRiOWExNzVhMDgxNmI3YTJlMTRmMTM5ZGI1ZWY1NmU2ZC4uZGZh
N2IyYTRjNzU5OTkyYmJjMjViYTZhYjllY2JiMGIyODJjNDQ3OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAK
QEAgLTQzMSw4ICs0MzEsMTAgQEAgcHJpdmF0ZToKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5z
KFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlKSkgewogICAgICAgICBtX3F1ZXVlLT5kaXNwYXRj
aChbbWVkaWFDYWNoZURpcmVjdG9yeSA9IG1fY29uZmlndXJhdGlvbi0+bWVkaWFDYWNoZURpcmVj
dG9yeSgpLmlzb2xhdGVkQ29weSgpLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKICAgICAgICAgICAg
IFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhOwotICAgICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4g
OiBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpvcmlnaW5zSW5NZWRpYUNhY2hlKG1lZGlhQ2Fj
aGVEaXJlY3RvcnkpKQotICAgICAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5k
KFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpEaXNrQ2FjaGUs
IDAgfSk7CisgICAgICAgICAgICBhdXRvIG9yaWdpbnMgPSBXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50OjpvcmlnaW5zSW5NZWRpYUNhY2hlKG1lZGlhQ2FjaGVEaXJlY3RvcnkpOworICAgICAgICAg
ICAgd2Vic2l0ZURhdGEuZW50cmllcyA9IFdURjo6bWFwKG9yaWdpbnMsIFtdKGF1dG8mIG9yaWdp
bikgeworICAgICAgICAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4s
IFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlLCAwIH07CisgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkV2Vic2l0ZURhdGEoV1RGTW92ZSh3ZWJzaXRl
RGF0YSkpOwogICAgICAgICB9KTsKICAgICB9CkBAIC00NjksOCArNDcxLDkgQEAgcHJpdmF0ZToK
ICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RGV2aWNlSWRIYXNo
U2FsdCkpIHsKICAgICAgICAgbV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS0+Z2V0RGV2aWNlSWRI
YXNoU2FsdE9yaWdpbnMoW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byYmIG9yaWdpbnMpIHsKICAg
ICAgICAgICAgIFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhOwotICAgICAgICAgICAgd2hpbGUgKCFv
cmlnaW5zLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzLmFw
cGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW5zLnRha2VBbnkoKSwgV2Vic2l0ZURhdGFU
eXBlOjpEZXZpY2VJZEhhc2hTYWx0LCAwIH0pOworICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50
cmllcyA9IFdURjo6bWFwKG9yaWdpbnMsIFtdKGF1dG8mIG9yaWdpbikgeworICAgICAgICAgICAg
ICAgIHJldHVybiBXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6
RGV2aWNlSWRIYXNoU2FsdCwgMCB9OworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBjYWxs
YmFja0FnZ3JlZ2F0b3ItPmFkZFdlYnNpdGVEYXRhKFdURk1vdmUod2Vic2l0ZURhdGEpKTsKICAg
ICAgICAgfSk7CiAgICAgfQpAQCAtNDc5LDEwICs0ODIsMTEgQEAgcHJpdmF0ZToKICAgICAgICAg
bV9xdWV1ZS0+ZGlzcGF0Y2goW2ZldGNoT3B0aW9ucywgYXBwbGljYXRpb25DYWNoZURpcmVjdG9y
eSA9IG1fY29uZmlndXJhdGlvbi0+YXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSgpLmlzb2xhdGVk
Q29weSgpLCBhcHBsaWNhdGlvbkNhY2hlRmxhdEZpbGVTdWJkaXJlY3RvcnlOYW1lID0gbV9jb25m
aWd1cmF0aW9uLT5hcHBsaWNhdGlvbkNhY2hlRmxhdEZpbGVTdWJkaXJlY3RvcnlOYW1lKCkuaXNv
bGF0ZWRDb3B5KCksIGNhbGxiYWNrQWdncmVnYXRvcl0gewogICAgICAgICAgICAgYXV0byBzdG9y
YWdlID0gV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNyZWF0ZShhcHBsaWNhdGlv
bkNhY2hlRGlyZWN0b3J5LCBhcHBsaWNhdGlvbkNhY2hlRmxhdEZpbGVTdWJkaXJlY3RvcnlOYW1l
KTsKICAgICAgICAgICAgIFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhOwotICAgICAgICAgICAgZm9y
IChhdXRvJiBvcmlnaW4gOiBzdG9yYWdlLT5vcmlnaW5zV2l0aENhY2hlKCkpIHsKKyAgICAgICAg
ICAgIGF1dG8gb3JpZ2lucyA9IHN0b3JhZ2UtPm9yaWdpbnNXaXRoQ2FjaGUoKTsKKyAgICAgICAg
ICAgIHdlYnNpdGVEYXRhLmVudHJpZXMgPSBXVEY6Om1hcChvcmlnaW5zLCBbJl0oYXV0byYgb3Jp
Z2luKSB7CiAgICAgICAgICAgICAgICAgdWludDY0X3Qgc2l6ZSA9IGZldGNoT3B0aW9ucy5jb250
YWlucyhXZWJzaXRlRGF0YUZldGNoT3B0aW9uOjpDb21wdXRlU2l6ZXMpID8gc3RvcmFnZS0+ZGlz
a1VzYWdlRm9yT3JpZ2luKG9yaWdpbikgOiAwOwotICAgICAgICAgICAgICAgIHdlYnNpdGVEYXRh
LmVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFU
eXBlOjpPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZSwgc2l6ZSB9KTsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLCBXZWJz
aXRlRGF0YVR5cGU6Ok9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlLCBzaXplIH07CisgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkV2Vic2l0ZURhdGEo
V1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICB9KTsKICAgICB9CkBAIC00OTAsOCArNDk0
LDkgQEAgcHJpdmF0ZToKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlw
ZTo6V2ViU1FMRGF0YWJhc2VzKSAmJiBpc1BlcnNpc3RlbnQoKSkgewogICAgICAgICBtX3F1ZXVl
LT5kaXNwYXRjaChbd2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24tPndl
YlNRTERhdGFiYXNlRGlyZWN0b3J5KCkuaXNvbGF0ZWRDb3B5KCksIGNhbGxiYWNrQWdncmVnYXRv
cl0oKSB7CiAgICAgICAgICAgICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsKLSAgICAgICAgICAg
IGZvciAoYXV0byYgb3JpZ2luIDogV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyV2l0
aERhdGFiYXNlUGF0aCh3ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSktPm9yaWdpbnMoKSkKLSAgICAg
ICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6RW50cnkg
eyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6V2ViU1FMRGF0YWJhc2VzLCAwIH0pOworICAgICAg
ICAgICAgd2Vic2l0ZURhdGEuZW50cmllcyA9IFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJh
Y2tlcldpdGhEYXRhYmFzZVBhdGgod2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkpLT5vcmlnaW5zKCku
bWFwKFtdKGF1dG8mIG9yaWdpbikgeworICAgICAgICAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0
YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6V2ViU1FMRGF0YWJhc2VzLCAwIH07
CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkV2Vi
c2l0ZURhdGEoV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICB9KTsKICAgICB9CkBAIC00
OTksOCArNTA0LDkgQEAgcHJpdmF0ZToKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNp
dGVEYXRhVHlwZTo6TWVkaWFLZXlzKSAmJiBpc1BlcnNpc3RlbnQoKSkgewogICAgICAgICBtX3F1
ZXVlLT5kaXNwYXRjaChbbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSA9IG1fY29uZmlndXJhdGlv
bi0+bWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSgpLmlzb2xhdGVkQ29weSgpLCBjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsKICAgICAgICAgICAgIFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhOwotICAgICAg
ICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBtZWRpYUtleU9yaWdpbnMobWVkaWFLZXlzU3RvcmFn
ZURpcmVjdG9yeSkpCi0gICAgICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmQo
V2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6Ok1lZGlhS2V5cywg
MCB9KTsKKyAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMgPSBtZWRpYUtleU9yaWdpbnMo
bWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSkubWFwKFtdKGF1dG8mIG9yaWdpbikgeworICAgICAg
ICAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRh
VHlwZTo6TWVkaWFLZXlzLCAwIH07CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGNhbGxi
YWNrQWdncmVnYXRvci0+YWRkV2Vic2l0ZURhdGEoV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAg
ICAgICB9KTsKICAgICB9CkBAIC02NjcsOCArNjczLDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgY29uc3Qg
VmUKICAgICBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zOwogCiAg
ICAgZm9yIChjb25zdCBhdXRvJiBkYXRhUmVjb3JkIDogZGF0YVJlY29yZHMpIHsKKyAgICAgICAg
b3JpZ2lucy5yZXNlcnZlQ2FwYWNpdHkob3JpZ2lucy5zaXplKCkgKyBkYXRhUmVjb3JkLm9yaWdp
bnMuc2l6ZSgpKTsKICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBkYXRhUmVjb3JkLm9yaWdp
bnMpCi0gICAgICAgICAgICBvcmlnaW5zLmFwcGVuZChvcmlnaW4pOworICAgICAgICAgICAgb3Jp
Z2lucy51bmNoZWNrZWRBcHBlbmQob3JpZ2luKTsKICAgICB9CiAKICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IFJlbW92YWxDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZSgqdGhpcywgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwpAQCAtNzA3LDEzICs3MTQsMTYgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFU
eXBlcywgY29uc3QgVmUKICAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IEhTVFNDYWNoZUhvc3RO
YW1lczsKICAgICAgICAgICAgIFZlY3RvcjxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gcmVn
aXN0cmFibGVEb21haW5zOwogICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBkYXRhUmVjb3Jk
IDogZGF0YVJlY29yZHMpIHsKKyAgICAgICAgICAgICAgICBjb29raWVIb3N0TmFtZXMucmVzZXJ2
ZUNhcGFjaXR5KGNvb2tpZUhvc3ROYW1lcy5zaXplKCkgKyBkYXRhUmVjb3JkLmNvb2tpZUhvc3RO
YW1lcy5zaXplKCkpOwogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgaG9zdE5hbWUgOiBkYXRh
UmVjb3JkLmNvb2tpZUhvc3ROYW1lcykKLSAgICAgICAgICAgICAgICAgICAgY29va2llSG9zdE5h
bWVzLmFwcGVuZChob3N0TmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGNvb2tpZUhvc3ROYW1l
cy51bmNoZWNrZWRBcHBlbmQoaG9zdE5hbWUpOworICAgICAgICAgICAgICAgIEhTVFNDYWNoZUhv
c3ROYW1lcy5yZXNlcnZlQ2FwYWNpdHkoSFNUU0NhY2hlSG9zdE5hbWVzLnNpemUoKSArIGRhdGFS
ZWNvcmQuSFNUU0NhY2hlSG9zdE5hbWVzLnNpemUoKSk7CiAgICAgICAgICAgICAgICAgZm9yIChh
dXRvJiBob3N0TmFtZSA6IGRhdGFSZWNvcmQuSFNUU0NhY2hlSG9zdE5hbWVzKQotICAgICAgICAg
ICAgICAgICAgICBIU1RTQ2FjaGVIb3N0TmFtZXMuYXBwZW5kKGhvc3ROYW1lKTsKKyAgICAgICAg
ICAgICAgICAgICAgSFNUU0NhY2hlSG9zdE5hbWVzLnVuY2hlY2tlZEFwcGVuZChob3N0TmFtZSk7
CiAjaWYgRU5BQkxFKElOVEVMTElHRU5UX1RSQUNLSU5HX1BSRVZFTlRJT04pCisgICAgICAgICAg
ICAgICAgcmVnaXN0cmFibGVEb21haW5zLnJlc2VydmVDYXBhY2l0eShyZWdpc3RyYWJsZURvbWFp
bnMuc2l6ZSgpICsgZGF0YVJlY29yZC5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUmVnaXN0cmFibGVE
b21haW5zLnNpemUoKSk7CiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiByZWdpc3RyYWJsZURv
bWFpbiA6IGRhdGFSZWNvcmQucmVzb3VyY2VMb2FkU3RhdGlzdGljc1JlZ2lzdHJhYmxlRG9tYWlu
cykKLSAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmFibGVEb21haW5zLmFwcGVuZChyZWdpc3Ry
YWJsZURvbWFpbik7CisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhYmxlRG9tYWlucy51bmNo
ZWNrZWRBcHBlbmQocmVnaXN0cmFibGVEb21haW4pOwogI2VuZGlmCiAgICAgICAgICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbQppbmRleCBm
YTNiYzUwYjI0ZmFmMmVlNWZlZTc0NmQyYmVjODA0YWE0YWZiNzJjLi44NTc1OWMxYTQxZDQyMjRh
N2ZkZmFiZDk5MTUxYjYwNjg5YzA4MDlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvVGV4dENoZWNrZXJJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1RleHRDaGVja2VySU9TLm1tCkBAIC0zNCw2ICszNCw3IEBACiAjaW1wb3J0IDx3dGYvSGFz
aE1hcC5oPgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3dGYvUmV0
YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0
Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0yNDAsMTIgKzI0
MSwxMyBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0
T2ZQYXJhZ3JhcGgoU3BlbGxEb2N1bWVudFRhZyBzcAogICAgICAgICAgICAgICAgIFRleHRDaGVj
a2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hl
Y2tpbmdUeXBlOjpTcGVsbGluZzsKICAgICAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1
bHRSYW5nZTsKLSAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAgICAg
ICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICB9
IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiBjaGVj
a2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpKSB7CiAgICAgICAg
ICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgICAgICBOU0Fy
cmF5ICpkZXRhaWxzID0gW2luY29taW5nUmVzdWx0IGdyYW1tYXJEZXRhaWxzXTsKICAgICAgICAg
ICAgICAgICByZXN1bHQudHlwZSA9IFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXI7CiAgICAgICAg
ICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFuZ2U7CisgICAgICAgICAgICAgICAgcmVz
dWx0LmRldGFpbHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkZXRhaWxzLmNvdW50KTsKICAgICAg
ICAgICAgICAgICBmb3IgKE5TRGljdGlvbmFyeSAqaW5jb21pbmdEZXRhaWwgaW4gZGV0YWlscykg
ewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaW5jb21pbmdEZXRhaWwpOwogICAgICAgICAg
ICAgICAgICAgICBHcmFtbWFyRGV0YWlsIGRldGFpbDsKQEAgLTI2MCwxMiArMjYyLDEwIEBAIFZl
Y3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFw
aChTcGVsbERvY3VtZW50VGFnIHNwCiAgICAgICAgICAgICAgICAgICAgIGRldGFpbC5yYW5nZSA9
IGRldGFpbE5TUmFuZ2U7CiAgICAgICAgICAgICAgICAgICAgIGRldGFpbC51c2VyRGVzY3JpcHRp
b24gPSBbaW5jb21pbmdEZXRhaWwgb2JqZWN0Rm9yS2V5OkAiTlNHcmFtbWFyVXNlckRlc2NyaXB0
aW9uIl07CiAgICAgICAgICAgICAgICAgICAgIE5TQXJyYXkgKmd1ZXNzZXMgPSBbaW5jb21pbmdE
ZXRhaWwgb2JqZWN0Rm9yS2V5OkAiTlNHcmFtbWFyQ29ycmVjdGlvbnMiXTsKLSAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGZvciAoTlNTdHJpbmcgKmd1ZXNzIGluIGd1
ZXNzZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWwuZ3Vlc3Nlcy5hcHBlbmQoZ3Vl
c3MpOwotICAgICAgICAgICAgICAgICAgICByZXN1bHQuZGV0YWlscy5hcHBlbmQoZGV0YWlsKTsK
KyAgICAgICAgICAgICAgICAgICAgZGV0YWlsLmd1ZXNzZXMgPSBtYWtlVmVjdG9yPFN0cmluZz4o
Z3Vlc3Nlcyk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5kZXRhaWxzLnVuY2hlY2tlZEFw
cGVuZChkZXRhaWwpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXN1bHRz
LmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKFdURk1vdmUo
cmVzdWx0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0YW50Lm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0K
aW5kZXggYzlhZTFhNjY3NzcxYjI2MTA5NTg1NGVhZTU5ZTI4NWFiNzUyZjY3Yi4uNDVkZDJlMTM0
YzRkODc4ZjY1YjE2ZjlkZjQ0ZDYxNDAxMzU5ZmJiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0KKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0KQEAgLTIwNywxMiAr
MjA3LDExIEBAIC0gKENHUmVjdClwcmVzZW50YXRpb25SZWN0Rm9yRWxlbWVudFVzaW5nQ2xvc2Vz
dEluZGljYXRlZFJlY3QKIAogICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgdG91Y2hMb2NhdGlvbiA9
IF9wb3NpdGlvbkluZm9ybWF0aW9uLT5yZXF1ZXN0LnBvaW50OwogICAgIFdlYkNvcmU6OkZsb2F0
UG9pbnQgbGlua0VsZW1lbnRMb2NhdGlvbiA9IGluZGljYXRvci50ZXh0Qm91bmRpbmdSZWN0SW5S
b290Vmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCk7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OkZsb2F0
UmVjdD4gaW5kaWNhdGVkUmVjdHM7Ci0gICAgZm9yIChhdXRvIHJlY3QgOiBpbmRpY2F0b3IudGV4
dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcykgeworICAgIGF1dG8gaW5kaWNhdGVkUmVj
dHMgPSBpbmRpY2F0b3IudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcy5tYXAoWyZd
KGF1dG8gcmVjdCkgewogICAgICAgICByZWN0LmluZmxhdGUoMik7CiAgICAgICAgIHJlY3QubW92
ZUJ5KGxpbmtFbGVtZW50TG9jYXRpb24pOwotICAgICAgICBpbmRpY2F0ZWRSZWN0cy5hcHBlbmQo
cmVjdCk7Ci0gICAgfQorICAgICAgICByZXR1cm4gcmVjdDsKKyAgICB9KTsKIAogICAgIGZvciAo
Y29uc3QgYXV0byYgcGF0aCA6IFdlYkNvcmU6OlBhdGhVdGlsaXRpZXM6OnBhdGhzV2l0aFNocmlu
a1dyYXBwZWRSZWN0cyhpbmRpY2F0ZWRSZWN0cywgMCkpIHsKICAgICAgICAgYXV0byBib3VuZGlu
Z1JlY3QgPSBwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbQppbmRleCAxNmQ2ODM4ZTU0OGUwNDMyZmJkMThmOGQ0
ZDJhZGUxYzJjMTA4ZjZlLi5lY2UyZTNlMjQ1MzE1ZWU3MWFkOTc5N2ZhNmNjODBiNDI5MzMwZDEx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMu
bW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFjLm1tCkBA
IC0zNDQsMTIgKzM0NCwxMyBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tl
cjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3BlbGxEb2N1bWVudFRhZyBzcAogICAgICAgICAgICAg
VGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgIHJlc3VsdC50eXBlID0gVGV4
dENoZWNraW5nVHlwZTo6U3BlbGxpbmc7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1
bHRSYW5nZTsKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAg
ICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICB9IGVsc2UgaWYgKHJl
c3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiBjaGVja2luZ1R5cGVzLmNv
bnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpKSB7CiAgICAgICAgICAgICBUZXh0Q2hl
Y2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAgICAgTlNBcnJheSAqZGV0YWlscyA9IFtpbmNv
bWluZ1Jlc3VsdCBncmFtbWFyRGV0YWlsc107CiAgICAgICAgICAgICByZXN1bHQudHlwZSA9IFRl
eHRDaGVja2luZ1R5cGU6OkdyYW1tYXI7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1
bHRSYW5nZTsKKyAgICAgICAgICAgIHJlc3VsdC5kZXRhaWxzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoZGV0YWlscy5jb3VudCk7CiAgICAgICAgICAgICBmb3IgKE5TRGljdGlvbmFyeSAqaW5jb21p
bmdEZXRhaWwgaW4gZGV0YWlscykgewogICAgICAgICAgICAgICAgIEFTU0VSVChpbmNvbWluZ0Rl
dGFpbCk7CiAgICAgICAgICAgICAgICAgR3JhbW1hckRldGFpbCBkZXRhaWw7CkBAIC0zNjEsOSAr
MzYyLDggQEAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4
dE9mUGFyYWdyYXBoKFNwZWxsRG9jdW1lbnRUYWcgc3AKICAgICAgICAgICAgICAgICBkZXRhaWwu
cmFuZ2UgPSBkZXRhaWxOU1JhbmdlOwogICAgICAgICAgICAgICAgIGRldGFpbC51c2VyRGVzY3Jp
cHRpb24gPSBbaW5jb21pbmdEZXRhaWwgb2JqZWN0Rm9yS2V5Ok5TR3JhbW1hclVzZXJEZXNjcmlw
dGlvbl07CiAgICAgICAgICAgICAgICAgTlNBcnJheSAqZ3Vlc3NlcyA9IFtpbmNvbWluZ0RldGFp
bCBvYmplY3RGb3JLZXk6TlNHcmFtbWFyQ29ycmVjdGlvbnNdOwotICAgICAgICAgICAgICAgIGZv
ciAoTlNTdHJpbmcgKmd1ZXNzIGluIGd1ZXNzZXMpCi0gICAgICAgICAgICAgICAgICAgIGRldGFp
bC5ndWVzc2VzLmFwcGVuZChTdHJpbmcoZ3Vlc3MpKTsKLSAgICAgICAgICAgICAgICByZXN1bHQu
ZGV0YWlscy5hcHBlbmQoZGV0YWlsKTsKKyAgICAgICAgICAgICAgICBkZXRhaWwuZ3Vlc3NlcyA9
IG1ha2VWZWN0b3I8U3RyaW5nPihndWVzc2VzKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuZGV0
YWlscy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShkZXRhaWwpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7CiAgICAgICAgIH0gZWxzZSBpZiAocmVz
dWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVMaW5rICYmIGNoZWNraW5nVHlwZXMuY29udGFp
bnMoVGV4dENoZWNraW5nVHlwZTo6TGluaykpIHsKQEAgLTM3MSwzMSArMzcxLDMxIEBAIFZlY3Rv
cjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChT
cGVsbERvY3VtZW50VGFnIHNwCiAgICAgICAgICAgICByZXN1bHQudHlwZSA9IFRleHRDaGVja2lu
Z1R5cGU6Okxpbms7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5nZTsKICAg
ICAgICAgICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IFtbaW5jb21pbmdSZXN1bHQgVVJMXSBhYnNv
bHV0ZVN0cmluZ107Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAgICAg
ICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgfSBlbHNlIGlm
IChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZVF1b3RlICYmIGNoZWNraW5nVHlwZXMu
Y29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6UXVvdGUpKSB7CiAgICAgICAgICAgICBUZXh0Q2hl
Y2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tp
bmdUeXBlOjpRdW90ZTsKICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJhbmdlOwog
ICAgICAgICAgICAgcmVzdWx0LnJlcGxhY2VtZW50ID0gW2luY29taW5nUmVzdWx0IHJlcGxhY2Vt
ZW50U3RyaW5nXTsKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAg
ICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICB9IGVsc2UgaWYg
KHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlRGFzaCAmJiBjaGVja2luZ1R5cGVzLmNv
bnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkRhc2gpKSB7CiAgICAgICAgICAgICBUZXh0Q2hlY2tp
bmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdU
eXBlOjpEYXNoOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFuZ2U7CiAgICAg
ICAgICAgICByZXN1bHQucmVwbGFjZW1lbnQgPSBbaW5jb21pbmdSZXN1bHQgcmVwbGFjZW1lbnRT
dHJpbmddOwotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAg
IHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgIH0gZWxzZSBpZiAocmVz
dWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVSZXBsYWNlbWVudCAmJiBjaGVja2luZ1R5cGVz
LmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50KSkgewogICAgICAgICAgICAg
VGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgIHJlc3VsdC50eXBlID0gVGV4
dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQ7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSBy
ZXN1bHRSYW5nZTsKICAgICAgICAgICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IFtpbmNvbWluZ1Jl
c3VsdCByZXBsYWNlbWVudFN0cmluZ107Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1
bHQpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAg
ICAgfSBlbHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb24g
JiYgY2hlY2tpbmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpDb3JyZWN0aW9uKSkg
ewogICAgICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgIHJl
c3VsdC50eXBlID0gVGV4dENoZWNraW5nVHlwZTo6Q29ycmVjdGlvbjsKICAgICAgICAgICAgIHJl
c3VsdC5yYW5nZSA9IHJlc3VsdFJhbmdlOwogICAgICAgICAgICAgcmVzdWx0LnJlcGxhY2VtZW50
ID0gW2luY29taW5nUmVzdWx0IHJlcGxhY2VtZW50U3RyaW5nXTsKLSAgICAgICAgICAgIHJlc3Vs
dHMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJl
c3VsdCkpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3IuY3BwCmluZGV4IDcz
NTc2YTI0N2NlMTE3NTI3NTY1ZmIxZDI2YjRjZDA5YjI0NzJlOWYuLjEyN2FjMWU0NTc3MTViZjdk
ZmIwZTljOTNhMTA0MjBiNGY1YzM1NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3IuY3BwCkBAIC05OCw5
ICs5OCw5IEBAIHZvaWQgV2ViUGF5bWVudENvb3JkaW5hdG9yOjpvcGVuUGF5bWVudFNldHVwKGNv
bnN0IFN0cmluZyYgbWVyY2hhbnRJZGVudGlmaWVyLCBjCiAKIGJvb2wgV2ViUGF5bWVudENvb3Jk
aW5hdG9yOjpzaG93UGF5bWVudFVJKGNvbnN0IFVSTCYgb3JpZ2luYXRpbmdVUkwsIGNvbnN0IFZl
Y3RvcjxVUkw+JiBsaW5rSWNvblVSTHMsIGNvbnN0IFdlYkNvcmU6OkFwcGxlUGF5U2Vzc2lvblBh
eW1lbnRSZXF1ZXN0JiBwYXltZW50UmVxdWVzdCkKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiBsaW5r
SWNvblVSTFN0cmluZ3M7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBsaW5rSWNvblVSTCA6IGxpbmtJ
Y29uVVJMcykKLSAgICAgICAgbGlua0ljb25VUkxTdHJpbmdzLmFwcGVuZChsaW5rSWNvblVSTC5z
dHJpbmcoKSk7CisgICAgYXV0byBsaW5rSWNvblVSTFN0cmluZ3MgPSBsaW5rSWNvblVSTHMubWFw
KFtdKGF1dG8mIGxpbmtJY29uVVJMKSB7CisgICAgICAgIHJldHVybiBsaW5rSWNvblVSTC5zdHJp
bmcoKTsKKyAgICB9KTsKIAogICAgIGJvb2wgcmVzdWx0OwogICAgIGlmICghc2VuZFN5bmMoTWVz
c2FnZXM6OldlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpTaG93UGF5bWVudFVJKG1fd2ViUGFn
ZS5pZGVudGlmaWVyKCksIG1fd2ViUGFnZS53ZWJQYWdlUHJveHlJZGVudGlmaWVyKCksIG9yaWdp
bmF0aW5nVVJMLnN0cmluZygpLCBsaW5rSWNvblVSTFN0cmluZ3MsIHBheW1lbnRSZXF1ZXN0KSwg
TWVzc2FnZXM6OldlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpTaG93UGF5bWVudFVJOjpSZXBs
eShyZXN1bHQpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9BdXRvbWF0
aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5jcHAKaW5kZXggYjBmZTgz
NTcyMjNiMzEzM2ZjNGRiMmZiYWFkOGU3MzlmNWUzYjlkNi4uZjQ1Y2ZiNDE5MTM2YjdjZjA4ZTNi
ZmQ0OTZiMmI2OTdhM2M5ZWZlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5jcHAK
QEAgLTgwNSwxMyArODA1LDEyIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6c2V0
RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWQoV2ViQ29yZTo6UGFnZUlkZW50aWZpCiAgICAgYXV0byYg
aW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudD4oKmNvcmVF
bGVtZW50KTsKICAgICBWZWN0b3I8UmVmPFdlYkNvcmU6OkZpbGU+PiBmaWxlT2JqZWN0czsKICAg
ICBpZiAoaW5wdXRFbGVtZW50Lm11bHRpcGxlKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIGZpbGVz
ID0gaW5wdXRFbGVtZW50LmZpbGVzKCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgZmlsZSA6
IGZpbGVzLT5maWxlcygpKQotICAgICAgICAgICAgICAgIGZpbGVPYmplY3RzLmFwcGVuZChmaWxl
LmNvcHlSZWYoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8qIGZpbGVzID0gaW5wdXRF
bGVtZW50LmZpbGVzKCkpCisgICAgICAgICAgICBmaWxlT2JqZWN0cy5hcHBlbmRWZWN0b3IoZmls
ZXMtPmZpbGVzKCkpOwogICAgIH0KKyAgICBmaWxlT2JqZWN0cy5yZXNlcnZlQ2FwYWNpdHkoZmls
ZU9iamVjdHMuc2l6ZSgpICsgZmlsZW5hbWVzLnNpemUoKSk7CiAgICAgZm9yIChjb25zdCBhdXRv
JiBwYXRoIDogZmlsZW5hbWVzKQotICAgICAgICBmaWxlT2JqZWN0cy5hcHBlbmQoV2ViQ29yZTo6
RmlsZTo6Y3JlYXRlKCZpbnB1dEVsZW1lbnQuZG9jdW1lbnQoKSwgcGF0aCkpOworICAgICAgICBm
aWxlT2JqZWN0cy51bmNoZWNrZWRBcHBlbmQoV2ViQ29yZTo6RmlsZTo6Y3JlYXRlKCZpbnB1dEVs
ZW1lbnQuZG9jdW1lbnQoKSwgcGF0aCkpOwogICAgIGlucHV0RWxlbWVudC5zZXRGaWxlcyhXZWJD
b3JlOjpGaWxlTGlzdDo6Y3JlYXRlKFdURk1vdmUoZmlsZU9iamVjdHMpKSk7CiAKICAgICBjb21w
bGV0aW9uSGFuZGxlcihzdGQ6Om51bGxvcHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIuY3BwIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIuY3Bw
CmluZGV4IDdjOWQ0NTY5YTRlNTBiMDcxM2E3N2E4YjRhYzI0MGZhZTQ2ZGRkMWUuLjgxM2FmMjg1
OTgzY2I4MmMzMGYyNGUyNTM3MTU1YzdmMGYzYjYxMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFu
YWdlci5jcHAKQEAgLTE2MCw4ICsxNjAsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFQbGF5ZXJQ
cml2YXRlSW50ZXJmYWNlPiBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXI6OmNyZWF0ZVJlbQogICAg
IHByb3h5Q29uZmlndXJhdGlvbi5pc1ZpZGVvID0gcGxheWVyLT5pc1ZpZGVvUGxheWVyKCk7CiAK
ICNpZiBFTkFCTEUoQVZGX0NBUFRJT05TKQotICAgIGZvciAoY29uc3QgYXV0byYgdHJhY2sgOiBw
bGF5ZXItPm91dE9mQmFuZFRyYWNrU291cmNlcygpKQotICAgICAgICBwcm94eUNvbmZpZ3VyYXRp
b24ub3V0T2ZCYW5kVHJhY2tEYXRhLmFwcGVuZCh0cmFjay0+ZGF0YSgpKTsKKyAgICBwcm94eUNv
bmZpZ3VyYXRpb24ub3V0T2ZCYW5kVHJhY2tEYXRhID0gcGxheWVyLT5vdXRPZkJhbmRUcmFja1Nv
dXJjZXMoKS5tYXAoW10oYXV0byYgdHJhY2spIHsKKyAgICAgICAgcmV0dXJuIHRyYWNrLT5kYXRh
KCk7CisgICAgfSk7CiAjZW5kaWYKIAogICAgIGF1dG8gZG9jdW1lbnRTZWN1cml0eU9yaWdpbiA9
IHBsYXllci0+ZG9jdW1lbnRTZWN1cml0eU9yaWdpbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9Tb3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlLmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvU291cmNlQnVmZmVyUHJpdmF0ZVJl
bW90ZS5jcHAKaW5kZXggOTY2ZmM5M2I3N2FmYWEzZTYyMDhkN2FiYTVhZWQyYzdhOTRjNzRiMi4u
NGVmMTY0MGE0MDEwMDZhNmI4ZjY5Y2M1MDExNjRhOGJkMTkwZWI5MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9Tb3VyY2VCdWZmZXJQcml2YXRlUmVtb3Rl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1NvdXJjZUJ1ZmZl
clByaXZhdGVSZW1vdGUuY3BwCkBAIC0zMzgsMTYgKzMzOCwxMSBAQCB2b2lkIFNvdXJjZUJ1ZmZl
clByaXZhdGVSZW1vdGU6OnVwZGF0ZVRyYWNrSWRzKFZlY3RvcjxzdGQ6OnBhaXI8QXRvbVN0cmlu
ZywgQXRvbQogICAgIGlmICghbV9ncHVQcm9jZXNzQ29ubmVjdGlvbikKICAgICAgICAgcmV0dXJu
OwogCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjxUcmFja1ByaXZhdGVSZW1vdGVJZGVudGlmaWVyLCBU
cmFja1ByaXZhdGVSZW1vdGVJZGVudGlmaWVyPj4gaWRlbnRpZmllclBhaXJzOwotCi0gICAgZm9y
IChhdXRvJiB0cmFja0lkUGFpciA6IHRyYWNrSWRQYWlycykgeworICAgIGF1dG8gaWRlbnRpZmll
clBhaXJzID0gdHJhY2tJZFBhaXJzLm1hcChbdGhpc10oYXV0byYgdHJhY2tJZFBhaXIpIHsKICAg
ICAgICAgQVNTRVJUKG1fcHJldlRyYWNrSWRlbnRpZmllck1hcC5jb250YWlucyh0cmFja0lkUGFp
ci5maXJzdCkpOwogICAgICAgICBBU1NFUlQobV90cmFja0lkZW50aWZpZXJNYXAuY29udGFpbnMo
dHJhY2tJZFBhaXIuc2Vjb25kKSk7Ci0KLSAgICAgICAgYXV0byBvbGRJZGVudGlmaWVyID0gbV9w
cmV2VHJhY2tJZGVudGlmaWVyTWFwLnRha2UodHJhY2tJZFBhaXIuZmlyc3QpOwotICAgICAgICBh
dXRvIG5ld0lkZW50aWZpZXIgPSBtX3RyYWNrSWRlbnRpZmllck1hcC5nZXQodHJhY2tJZFBhaXIu
c2Vjb25kKTsKLSAgICAgICAgaWRlbnRpZmllclBhaXJzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihv
bGRJZGVudGlmaWVyLCBuZXdJZGVudGlmaWVyKSk7Ci0gICAgfQorICAgICAgICByZXR1cm4gc3Rk
OjpwYWlyIHsgbV9wcmV2VHJhY2tJZGVudGlmaWVyTWFwLnRha2UodHJhY2tJZFBhaXIuZmlyc3Qp
LCBtX3RyYWNrSWRlbnRpZmllck1hcC5nZXQodHJhY2tJZFBhaXIuc2Vjb25kKSB9OworICAgIH0p
OwogCiAgICAgbV9ncHVQcm9jZXNzQ29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLnNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5OjpVcGRhdGVUcmFja0lkcyhpZGVudGlmaWVyUGFp
cnMpLCBtX3JlbW90ZVNvdXJjZUJ1ZmZlcklkZW50aWZpZXIpOwogfQpAQCAtMzgzLDI3ICszNzgs
MzAgQEAgdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlOjpzb3VyY2VCdWZmZXJQcml2YXRl
RGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWUKICAgICBzZWdtZW50LmR1cmF0aW9uID0gc2Vn
bWVudEluZm8uZHVyYXRpb247CiAKICAgICBtX3ByZXZUcmFja0lkZW50aWZpZXJNYXAuc3dhcCht
X3RyYWNrSWRlbnRpZmllck1hcCk7CisgICAgc2VnbWVudC5hdWRpb1RyYWNrcy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHNlZ21lbnRJbmZvLmF1ZGlvVHJhY2tzLnNpemUoKSk7CiAgICAgZm9yIChh
dXRvJiBhdWRpb1RyYWNrIDogc2VnbWVudEluZm8uYXVkaW9UcmFja3MpIHsKICAgICAgICAgU291
cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25TZWdtZW50OjpBdWRpb1RyYWNr
SW5mb3JtYXRpb24gaW5mbzsKICAgICAgICAgaW5mby50cmFjayA9IG1fbWVkaWFQbGF5ZXJQcml2
YXRlLT5hdWRpb1RyYWNrUHJpdmF0ZVJlbW90ZShhdWRpb1RyYWNrLmlkZW50aWZpZXIpOwogICAg
ICAgICBpbmZvLmRlc2NyaXB0aW9uID0gUmVtb3RlTWVkaWFEZXNjcmlwdGlvbjo6Y3JlYXRlKGF1
ZGlvVHJhY2suZGVzY3JpcHRpb24pOwotICAgICAgICBzZWdtZW50LmF1ZGlvVHJhY2tzLmFwcGVu
ZChpbmZvKTsKKyAgICAgICAgc2VnbWVudC5hdWRpb1RyYWNrcy51bmNoZWNrZWRBcHBlbmQoaW5m
byk7CiAgICAgICAgIG1fdHJhY2tJZGVudGlmaWVyTWFwLmFkZChpbmZvLnRyYWNrLT5pZCgpLCBh
dWRpb1RyYWNrLmlkZW50aWZpZXIpOwogICAgIH0KIAorICAgIHNlZ21lbnQudmlkZW9UcmFja3Mu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzZWdtZW50SW5mby52aWRlb1RyYWNrcy5zaXplKCkpOwog
ICAgIGZvciAoYXV0byYgdmlkZW9UcmFjayA6IHNlZ21lbnRJbmZvLnZpZGVvVHJhY2tzKSB7CiAg
ICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudDo6
VmlkZW9UcmFja0luZm9ybWF0aW9uIGluZm87CiAgICAgICAgIGluZm8udHJhY2sgPSBtX21lZGlh
UGxheWVyUHJpdmF0ZS0+dmlkZW9UcmFja1ByaXZhdGVSZW1vdGUodmlkZW9UcmFjay5pZGVudGlm
aWVyKTsKICAgICAgICAgaW5mby5kZXNjcmlwdGlvbiA9IFJlbW90ZU1lZGlhRGVzY3JpcHRpb246
OmNyZWF0ZSh2aWRlb1RyYWNrLmRlc2NyaXB0aW9uKTsKLSAgICAgICAgc2VnbWVudC52aWRlb1Ry
YWNrcy5hcHBlbmQoaW5mbyk7CisgICAgICAgIHNlZ21lbnQudmlkZW9UcmFja3MudW5jaGVja2Vk
QXBwZW5kKGluZm8pOwogICAgICAgICBtX3RyYWNrSWRlbnRpZmllck1hcC5hZGQoaW5mby50cmFj
ay0+aWQoKSwgdmlkZW9UcmFjay5pZGVudGlmaWVyKTsKICAgICB9CiAKKyAgICBzZWdtZW50LnRl
eHRUcmFja3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzZWdtZW50SW5mby50ZXh0VHJhY2tzLnNp
emUoKSk7CiAgICAgZm9yIChhdXRvJiB0ZXh0VHJhY2sgOiBzZWdtZW50SW5mby50ZXh0VHJhY2tz
KSB7CiAgICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2Vn
bWVudDo6VGV4dFRyYWNrSW5mb3JtYXRpb24gaW5mbzsKICAgICAgICAgaW5mby50cmFjayA9IG1f
bWVkaWFQbGF5ZXJQcml2YXRlLT50ZXh0VHJhY2tQcml2YXRlUmVtb3RlKHRleHRUcmFjay5pZGVu
dGlmaWVyKTsKICAgICAgICAgaW5mby5kZXNjcmlwdGlvbiA9IFJlbW90ZU1lZGlhRGVzY3JpcHRp
b246OmNyZWF0ZSh0ZXh0VHJhY2suZGVzY3JpcHRpb24pOwotICAgICAgICBzZWdtZW50LnRleHRU
cmFja3MuYXBwZW5kKGluZm8pOworICAgICAgICBzZWdtZW50LnRleHRUcmFja3MudW5jaGVja2Vk
QXBwZW5kKGluZm8pOwogICAgICAgICBtX3RyYWNrSWRlbnRpZmllck1hcC5hZGQoaW5mby50cmFj
ay0+aWQoKSwgdGV4dFRyYWNrLmlkZW50aWZpZXIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAKaW5k
ZXggZDA3MGMyYjc5ZGY0MGNhY2I0MThmMDY3ODI2N2U0YzNiNGE1NDYxYy4uMWMyMjczNDMyNTQ1
YWJmM2M5MDZiODVkYzE3ZDliOTlkNGUxZjdhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwCkBAIC0zOTIsOSAr
MzkyLDkgQEAgTGliV2ViUlRDQ29kZWNzOjpFbmNvZGVyKiBMaWJXZWJSVENDb2RlY3M6OmNyZWF0
ZUVuY29kZXIoVHlwZSB0eXBlLCBjb25zdCBzdGQ6Om0KICAgICBlbmNvZGVyLT5pZGVudGlmaWVy
ID0gUlRDRW5jb2RlcklkZW50aWZpZXI6OmdlbmVyYXRlVGhyZWFkU2FmZSgpOwogICAgIGVuY29k
ZXItPmNvZGVjVHlwZSA9IHRvV2ViUlRDQ29kZWNUeXBlKHR5cGUpOwogCi0gICAgVmVjdG9yPHN0
ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IHBhcmFtZXRlcnM7Ci0gICAgZm9yIChhdXRvJiBrZXlW
YWx1ZSA6IGZvcm1hdFBhcmFtZXRlcnMpCi0gICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKHN0ZDo6
bWFrZV9wYWlyKFN0cmluZzo6ZnJvbVVURjgoa2V5VmFsdWUuZmlyc3QuZGF0YSgpLCBrZXlWYWx1
ZS5maXJzdC5sZW5ndGgoKSksIFN0cmluZzo6ZnJvbVVURjgoa2V5VmFsdWUuc2Vjb25kLmRhdGEo
KSwga2V5VmFsdWUuc2Vjb25kLmxlbmd0aCgpKSkpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IFdU
Rjo6bWFwKGZvcm1hdFBhcmFtZXRlcnMsIFtdKGF1dG8mIGVudHJ5KSB7CisgICAgICAgIHJldHVy
biBzdGQ6OnBhaXIgeyBTdHJpbmc6OmZyb21VVEY4KGVudHJ5LmZpcnN0LmRhdGEoKSwgZW50cnku
Zmlyc3QubGVuZ3RoKCkpLCBTdHJpbmc6OmZyb21VVEY4KGVudHJ5LnNlY29uZC5kYXRhKCksIGVu
dHJ5LnNlY29uZC5sZW5ndGgoKSkgfTsKKyAgICB9KTsKIAogICAgIGVuc3VyZUdQVVByb2Nlc3ND
b25uZWN0aW9uQW5kRGlzcGF0Y2hUb1RocmVhZChbdGhpcywgZW5jb2RlciA9IFdURk1vdmUoZW5j
b2RlciksIHR5cGUsIHBhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpXSgpIG11dGFibGUg
ewogICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAKaW5k
ZXggZDg1NDJhMmIxMGIxYjNlMTUzNjE0MTU0MTE1ZWY3ZWNlYzQ0ZWI4OC4uNmY4Zjc0NTM1OTI0
NTNlMGU2MTg2NzYxMjQ0ZTBiNzc5MjIxZGU3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRs
ZVBhZ2VPdmVybGF5LmNwcApAQCAtMTk3LDExICsxOTcsMTMgQEAgcHJpdmF0ZToKICAgICAgICAg
YXV0byB3a05hbWVzID0gbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmNvcHlBY2Nlc3Np
YmlsaXR5QXR0cmlidXRlTmFtZXModG9BUEkoJnBhZ2VPdmVybGF5KSwgcGFyYW1lcml6ZWROYW1l
cywgbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmJhc2UuY2xpZW50SW5mbyk7CiAKICAg
ICAgICAgc2l6ZV90IGNvdW50ID0gV0tBcnJheUdldFNpemUod2tOYW1lcyk7CisgICAgICAgIG5h
bWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY291bnQpOwogICAgICAgICBmb3IgKHNpemVfdCBr
ID0gMDsgayA8IGNvdW50OyBrKyspIHsKICAgICAgICAgICAgIFdLVHlwZVJlZiBpdGVtID0gV0tB
cnJheUdldEl0ZW1BdEluZGV4KHdrTmFtZXMsIGspOwogICAgICAgICAgICAgaWYgKFdlYktpdDo6
dG9JbXBsKGl0ZW0pLT50eXBlKCkgPT0gQVBJOjpTdHJpbmc6OkFQSVR5cGUpCi0gICAgICAgICAg
ICAgICAgbmFtZXMuYXBwZW5kKFdlYktpdDo6dG9XVEZTdHJpbmcoc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KGl0ZW0pKSk7CisgICAgICAgICAgICAgICAgbmFtZXMudW5jaGVja2VkQXBwZW5kKFdl
YktpdDo6dG9XVEZTdHJpbmcoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KGl0ZW0pKSk7CiAgICAg
ICAgIH0KKyAgICAgICAgbmFtZXMuc2hyaW5rVG9GaXQoKTsKIAogICAgICAgICByZXR1cm4gbmFt
ZXM7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1Nlc3Npb25TdGF0ZUNvbnZlcnNpb24uY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1Nlc3Npb25TdGF0ZUNvbnZlcnNpb24uY3BwCmluZGV4IGM4ZjI0
OGE2NDc2NTc2YTI5MmM3NWQ1ZmFhNjhmNWFjNjNhNDc1YzguLjU2N2Q0NzUxYmVlODNhM2IzZjRm
NmUwZmEyMzc3YmQwMDYzNTBhMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9TZXNzaW9uU3RhdGVDb252ZXJzaW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvU2Vzc2lvblN0YXRlQ29udmVyc2lvbi5j
cHAKQEAgLTk5LDEwICs5OSw5IEBAIHN0YXRpYyBGcmFtZVN0YXRlIHRvRnJhbWVTdGF0ZShjb25z
dCBIaXN0b3J5SXRlbSYgaGlzdG9yeUl0ZW0pCiAgICAgZnJhbWVTdGF0ZS5vYnNjdXJlZEluc2V0
cyA9IGhpc3RvcnlJdGVtLm9ic2N1cmVkSW5zZXRzKCk7CiAjZW5kaWYKIAotICAgIGZvciAoYXV0
byYgY2hpbGRIaXN0b3J5SXRlbSA6IGhpc3RvcnlJdGVtLmNoaWxkcmVuKCkpIHsKLSAgICAgICAg
RnJhbWVTdGF0ZSBjaGlsZEZyYW1lU3RhdGUgPSB0b0ZyYW1lU3RhdGUoY2hpbGRIaXN0b3J5SXRl
bSk7Ci0gICAgICAgIGZyYW1lU3RhdGUuY2hpbGRyZW4uYXBwZW5kKFdURk1vdmUoY2hpbGRGcmFt
ZVN0YXRlKSk7Ci0gICAgfQorICAgIGZyYW1lU3RhdGUuY2hpbGRyZW4gPSBoaXN0b3J5SXRlbS5j
aGlsZHJlbigpLm1hcChbXShhdXRvJiBjaGlsZEhpc3RvcnlJdGVtKSB7CisgICAgICAgIHJldHVy
biB0b0ZyYW1lU3RhdGUoY2hpbGRIaXN0b3J5SXRlbSk7CisgICAgfSk7CiAKICAgICByZXR1cm4g
ZnJhbWVTdGF0ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEZXZpY2VPcmllbnRhdGlvblVw
ZGF0ZVByb3ZpZGVyLmNwcAppbmRleCBmOWFmOWFiOTNmN2UwMTI4NzczNjUwYzFkMjQ5NWFkZGUz
OWZkNDM1Li4xZDExZjQyM2MxNzg4ZDU5N2ZmMjU3OGVlNjBkOWNiNjE2YTBkZDM4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRGV2aWNlT3Jp
ZW50YXRpb25VcGRhdGVQcm92aWRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXIuY3BwCkBA
IC04MywxMSArODMsNyBAQCB2b2lkIFdlYkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXI6
OnN0b3BVcGRhdGluZ0RldmljZU1vdGlvbihXZWJDb3JlOjpNb3RpbwogCiB2b2lkIFdlYkRldmlj
ZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXI6OmRldmljZU9yaWVudGF0aW9uQ2hhbmdlZChkb3Vi
bGUgYWxwaGEsIGRvdWJsZSBiZXRhLCBkb3VibGUgZ2FtbWEsIGRvdWJsZSBjb21wYXNzSGVhZGlu
ZywgZG91YmxlIGNvbXBhc3NBY2N1cmFjeSkKIHsKLSAgICBWZWN0b3I8V2Vha1B0cjxXZWJDb3Jl
OjpNb3Rpb25NYW5hZ2VyQ2xpZW50Pj4gY2xpZW50czsKLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6
IG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRzKQotICAgICAgICBjbGllbnRzLmFwcGVuZChjbGll
bnQpOwotCi0gICAgZm9yIChhdXRvJiBjbGllbnQgOiBjbGllbnRzKSB7CisgICAgZm9yIChhdXRv
JiBjbGllbnQgOiBjb3B5VG9WZWN0b3JPZjxXZWFrUHRyPFdlYkNvcmU6Ok1vdGlvbk1hbmFnZXJD
bGllbnQ+PihtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50cykpIHsKICAgICAgICAgaWYgKGNsaWVu
dCkKICAgICAgICAgICAgIGNsaWVudC0+b3JpZW50YXRpb25DaGFuZ2VkKGFscGhhLCBiZXRhLCBn
YW1tYSwgY29tcGFzc0hlYWRpbmcsIGNvbXBhc3NBY2N1cmFjeSk7CiAgICAgfQpAQCAtOTUsMTEg
KzkxLDcgQEAgdm9pZCBXZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyOjpkZXZpY2VP
cmllbnRhdGlvbkNoYW5nZWQoZG91YmxlIGFscGhhLAogCiB2b2lkIFdlYkRldmljZU9yaWVudGF0
aW9uVXBkYXRlUHJvdmlkZXI6OmRldmljZU1vdGlvbkNoYW5nZWQoZG91YmxlIHhBY2NlbGVyYXRp
b24sIGRvdWJsZSB5QWNjZWxlcmF0aW9uLCBkb3VibGUgekFjY2VsZXJhdGlvbiwgZG91YmxlIHhB
Y2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5LCBkb3VibGUgeUFjY2VsZXJhdGlvbkluY2x1ZGlu
Z0dyYXZpdHksIGRvdWJsZSB6QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwgc3RkOjpvcHRp
b25hbDxkb3VibGU+IHhSb3RhdGlvblJhdGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB5Um90YXRp
b25SYXRlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gelJvdGF0aW9uUmF0ZSkKIHsKLSAgICBWZWN0
b3I8V2Vha1B0cjxXZWJDb3JlOjpNb3Rpb25NYW5hZ2VyQ2xpZW50Pj4gY2xpZW50czsKLSAgICBm
b3IgKGF1dG8mIGNsaWVudCA6IG1fZGV2aWNlTW90aW9uQ2xpZW50cykKLSAgICAgICAgY2xpZW50
cy5hcHBlbmQoY2xpZW50KTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IGNsaWVudHMp
IHsKKyAgICBmb3IgKGF1dG8mIGNsaWVudCA6IGNvcHlUb1ZlY3Rvck9mPFdlYWtQdHI8V2ViQ29y
ZTo6TW90aW9uTWFuYWdlckNsaWVudD4+KG1fZGV2aWNlTW90aW9uQ2xpZW50cykpIHsKICAgICAg
ICAgaWYgKGNsaWVudCkKICAgICAgICAgICAgIGNsaWVudC0+bW90aW9uQ2hhbmdlZCh4QWNjZWxl
cmF0aW9uLCB5QWNjZWxlcmF0aW9uLCB6QWNjZWxlcmF0aW9uLCB4QWNjZWxlcmF0aW9uSW5jbHVk
aW5nR3Jhdml0eSwgeUFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHksICB6QWNjZWxlcmF0aW9u
SW5jbHVkaW5nR3Jhdml0eSwgeFJvdGF0aW9uUmF0ZSwgeVJvdGF0aW9uUmF0ZSwgelJvdGF0aW9u
UmF0ZSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuY3BwCmluZGV4IGRm
ZGRhMTc2OTkzNjAwNDQ3YTBjOTNjYzg0NjBmNWU2OGIyYzI0ODEuLjMxOGY3YzNkMjkzMzJjMDJh
ZDJjZTMwZDkwZTdjZmU2ZjU1YzMyMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGFzdGVib2FyZE92ZXJyaWRl
cy5jcHAKQEAgLTcxLDE4ICs3MSwxMyBAQCB2b2lkIFdlYlBhc3RlYm9hcmRPdmVycmlkZXM6OnJl
bW92ZU92ZXJyaWRlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0CiAKIFZlY3Rv
cjxTdHJpbmc+IFdlYlBhc3RlYm9hcmRPdmVycmlkZXM6Om92ZXJyaWRkZW5UeXBlcyhjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewotICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKLQog
ICAgIGF1dG8gaXQgPSBtX292ZXJyaWRlc01hcC5maW5kKHBhc3RlYm9hcmROYW1lKTsKICAgICBp
ZiAoaXQgPT0gbV9vdmVycmlkZXNNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIHJldHVybiB7IH07CiAKICAgICBBU1NFUlQoaXQtPnZhbHVlKTsKIAotICAgIGZvciAo
U3RyaW5nJiB0eXBlIDogaXQtPnZhbHVlLT5rZXlzKCkpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQo
dHlwZSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBjb3B5VG9WZWN0b3IoaXQt
PnZhbHVlLT5rZXlzKCkpOwogfQogCiBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBhc3RlYm9hcmRJ
dGVtSW5mbz4gV2ViUGFzdGVib2FyZE92ZXJyaWRlczo6b3ZlcnJpZGRlbkluZm8oY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJTcGVlY2hTeW50aGVzaXNDbGllbnQuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlNwZWVjaFN5bnRoZXNpc0NsaWVudC5j
cHAKaW5kZXggYzRkMGRjYzAzZDVkYTZhMDQ4M2VkZjU2ZDFlNDM5NTI3YmM5NWY4OC4uYzU3ZTc4
MDliMmVlMTY2ZGQ2ZjY4OGJlMjJhODU5YzdkYWRkYThmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlNwZWVjaFN5bnRoZXNpc0NsaWVudC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlNwZWVj
aFN5bnRoZXNpc0NsaWVudC5jcHAKQEAgLTQyLDkgKzQyLDkgQEAgY29uc3QgVmVjdG9yPFJlZlB0
cjxXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlPj4mIFdlYlNwZWVjaFN5bnRo
ZXNpc0MKICAgICBWZWN0b3I8V2ViU3BlZWNoU3ludGhlc2lzVm9pY2U+IHZvaWNlTGlzdDsKICAg
ICBtX3BhZ2Uuc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U3BlZWNoU3ludGhlc2lz
Vm9pY2VMaXN0KCksIHZvaWNlTGlzdCk7CiAKLSAgICBtX3ZvaWNlcy5jbGVhcigpOwotICAgIGZv
ciAoYXV0byYgdm9pY2UgOiB2b2ljZUxpc3QpCi0gICAgICAgIG1fdm9pY2VzLmFwcGVuZChXZWJD
b3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlOjpjcmVhdGUodm9pY2Uudm9pY2VVUkks
IHZvaWNlLm5hbWUsIHZvaWNlLmxhbmcsIHZvaWNlLmxvY2FsU2VydmljZSwgdm9pY2UuZGVmYXVs
dExhbmcpKTsKKyAgICBtX3ZvaWNlcyA9IHZvaWNlTGlzdC5tYXAoW10oYXV0byYgdm9pY2UpIC0+
IFJlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlPiB7CisgICAgICAg
IHJldHVybiBXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlOjpjcmVhdGUodm9p
Y2Uudm9pY2VVUkksIHZvaWNlLm5hbWUsIHZvaWNlLmxhbmcsIHZvaWNlLmxvY2FsU2VydmljZSwg
dm9pY2UuZGVmYXVsdExhbmcpOworICAgIH0pOwogICAgIHJldHVybiBtX3ZvaWNlczsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xs
ZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIu
Y3BwCmluZGV4IGI1MTM0ZDBkMmM1ZDdjNTJmNmZhYzk2ODA0NDFhY2MzZWViZjY1ZmQuLjFkNjQz
YjZiNDI4OGQwOGUwMzhjNDYyNWQwNTQ5ZGU2OGFmMmFhNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKQEAgLTI3MiwxMCAr
MjcyLDkgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6ZmluZFN0cmluZ01hdGNoZXMoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIE9wdGlvblNldDxGaW5kT3B0aW8KICAgICBhdXRvIHJlc3VsdCA9IG1fd2Vi
UGFnZS0+Y29yZVBhZ2UoKS0+ZmluZFRleHRNYXRjaGVzKHN0cmluZywgY29yZShvcHRpb25zKSwg
bWF4TWF0Y2hDb3VudCk7CiAgICAgbV9maW5kTWF0Y2hlcyA9IFdURk1vdmUocmVzdWx0LnJhbmdl
cyk7CiAKLSAgICBWZWN0b3I8VmVjdG9yPEludFJlY3Q+PiBtYXRjaFJlY3RzOwotICAgIGZvciAo
YXV0byYgcmFuZ2UgOiBtX2ZpbmRNYXRjaGVzKQotICAgICAgICBtYXRjaFJlY3RzLmFwcGVuZChS
ZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKHJhbmdlKSk7Ci0KKyAgICBhdXRvIG1hdGNo
UmVjdHMgPSBtX2ZpbmRNYXRjaGVzLm1hcChbXShhdXRvJiByYW5nZSkgeworICAgICAgICByZXR1
cm4gUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cyhyYW5nZSk7CisgICAgfSk7CiAgICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmRTdHJpbmdNYXRj
aGVzKHN0cmluZywgbWF0Y2hSZWN0cywgcmVzdWx0LmluZGV4Rm9yU2VsZWN0aW9uKSk7CiAKICAg
ICBpZiAoIW9wdGlvbnMuY29udGFpbnMoRmluZE9wdGlvbnM6OlNob3dPdmVybGF5KSAmJiAhb3B0
aW9ucy5jb250YWlucyhGaW5kT3B0aW9uczo6U2hvd0ZpbmRJbmRpY2F0b3IpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250
cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4
dFJhbmdlQ29udHJvbGxlci5jcHAKaW5kZXggNzQ4MDJjNDc4NzU1ZmZlNjFiOTMwOTJjYmNhNmQw
YWM3Y2NjOWM4My4uMmM5YjQ1N2RiY2EwN2E2ZWIxMjY4OWE3OGYwZGQ1YjI5MTRhMjFjYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFu
Z2VDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwCkBAIC0yNDgsMTEgKzI0OCwxMCBAQCB2b2lk
IFdlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6ZHJhd1JlY3QoV2ViQ29yZTo6UGFnZU92ZXJs
YXkmLCBXZWJDb3JlOjpHcmFwaAogICAgICAgICBhdXRvIHRleHRCb3VuZGluZ1JlY3RJblJvb3RW
aWV3Q29vcmRpbmF0ZXMgPSBtX3RleHRJbmRpY2F0b3ItPnRleHRCb3VuZGluZ1JlY3RJblJvb3RW
aWV3Q29vcmRpbmF0ZXMoKTsKICAgICAgICAgYXV0byB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENv
b3JkaW5hdGVzID0gbV90ZXh0SW5kaWNhdG9yLT50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3Jk
aW5hdGVzKCk7CiAKLSAgICAgICAgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4gdGV4dFJlY3Rz
SW5Sb290Vmlld0Nvb3JkaW5hdGVzOwotICAgICAgICBmb3IgKGF1dG8gcmVjdCA6IHRleHRSZWN0
c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMpIHsKKyAgICAgICAgYXV0byB0ZXh0UmVjdHNJblJv
b3RWaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzLm1h
cChbJl0oYXV0byByZWN0KSB7CiAgICAgICAgICAgICByZWN0Lm1vdmVCeSh0ZXh0Qm91bmRpbmdS
ZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCkpOwotICAgICAgICAgICAgdGV4dFJl
Y3RzSW5Sb290Vmlld0Nvb3JkaW5hdGVzLmFwcGVuZChyZWN0KTsKLSAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIHJlY3Q7CisgICAgICAgIH0pOwogCiAgICAgICAgIGF1dG8gcGF0aHMgPSBX
ZWJDb3JlOjpQYXRoVXRpbGl0aWVzOjpwYXRoc1dpdGhTaHJpbmtXcmFwcGVkUmVjdHModGV4dFJl
Y3RzSW5Sb290Vmlld0Nvb3JkaW5hdGVzLCBpbmRpY2F0b3JSYWRpdXMpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDExYWE2NDRmYzUwMzM4
ODcyYjgwOWY0MGFkY2IzMWY1MjU1NjdiNmQuLjJkNjI5ZjM1YTIzYmU4MDJmNjZhODE1YWRmYjhk
NWMxODMyNGU4NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCkBAIC03ODMzLDE0ICs3ODMzLDE2IEBAIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eSYgV2ViUGFnZTo6ZW5zdXJlUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KCkKIFZlY3RvcjxS
ZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+IFdlYlBhZ2U6OmNvbnN1bWVTYW5kYm94RXh0ZW5zaW9u
cyhWZWN0b3I8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiYmIHNhbmRib3hFeHRlbnNpb25zKQog
ewogICAgIFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+IGRyYWdTYW5kYm94RXh0ZW5z
aW9uczsKKyAgICBkcmFnU2FuZGJveEV4dGVuc2lvbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShz
YW5kYm94RXh0ZW5zaW9ucy5zaXplKCkpOwogICAgIGZvciAoYXV0byYgc2FuZGJveEV4dGVuc2lv
biA6IHNhbmRib3hFeHRlbnNpb25zKSB7CiAgICAgICAgIGF1dG8gZXh0ZW5zaW9uID0gU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlKFdURk1vdmUoc2FuZGJveEV4dGVuc2lvbikpOwogICAgICAgICBp
ZiAoIWV4dGVuc2lvbikKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBib29sIG9rID0g
ZXh0ZW5zaW9uLT5jb25zdW1lKCk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKLSAg
ICAgICAgZHJhZ1NhbmRib3hFeHRlbnNpb25zLmFwcGVuZChXVEZNb3ZlKGV4dGVuc2lvbikpOwor
ICAgICAgICBkcmFnU2FuZGJveEV4dGVuc2lvbnMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZXh0
ZW5zaW9uKSk7CiAgICAgfQorICAgIGRyYWdTYW5kYm94RXh0ZW5zaW9ucy5zaHJpbmtUb0ZpdCgp
OwogICAgIHJldHVybiBkcmFnU2FuZGJveEV4dGVuc2lvbnM7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggOWRjMDBk
YTI3NzBjMTkzOTg5MWEzMDBmMjMzNzQ5NmE5YzhlNzAxZC4uYmQzNjcyMDc1Yjc1NzY4Yzg0MTQ3
NzhmYzY2NWY1ZDc1YjRlMjRhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTc1NCwxMSArNzU0LDggQEAgdm9pZCBXZWJQ
YWdlOjpoYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2soRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlv
biwgY29uc3QgVmVjdG8KIAogICAgIE5TRGF0YSAqc2VsZWN0aW9uRGF0YSA9IFthdHRyaWJ1dGVk
U2VsZWN0aW9uIFJURkRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW2F0dHJpYnV0ZWRTZWxlY3Rp
b24gbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVzOkB7IH1dOwogCi0gICAgVmVjdG9yPHVpbnQ4
X3Q+IHNlbGVjdGlvbkRhdGFWZWN0b3I7Ci0gICAgc2VsZWN0aW9uRGF0YVZlY3Rvci5hcHBlbmQo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc2VsZWN0aW9uRGF0YS5ieXRlcyksIHNl
bGVjdGlvbkRhdGEubGVuZ3RoKTsKLQogICAgIGZsdXNoUGVuZGluZ0VkaXRvclN0YXRlVXBkYXRl
KCk7Ci0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93Q29udGV4dE1lbnUoQ29u
dGV4dE1lbnVDb250ZXh0RGF0YShwb2ludCwgc2VsZWN0aW9uRGF0YVZlY3RvciwgcGhvbmVOdW1i
ZXJzLCBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSksIFVzZXJEYXRh
KCkpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3dDb250ZXh0TWVudShD
b250ZXh0TWVudUNvbnRleHREYXRhKHBvaW50LCBWZWN0b3IgeyByZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPihzZWxlY3Rpb25EYXRhLmJ5dGVzKSwgc2VsZWN0aW9uRGF0YS5sZW5ndGgg
fSwgcGhvbmVOdW1iZXJzLCBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUo
KSksIFVzZXJEYXRhKCkpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpoYW5kbGVJbWFnZVNlcnZpY2VD
bGljayhjb25zdCBJbnRQb2ludCYgcG9pbnQsIEltYWdlJiBpbWFnZSwgSFRNTEltYWdlRWxlbWVu
dCYgZWxlbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9j
ZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAppbmRleCA3
OTk2MTNkMzc3NDIzNjNiZmJkY2Q5NTI5Nzk5NjIyMDZmMDIyOGE4Li44OTkwZWRkNzZjYWI5NmMy
ZGVjZDNiOTYwNTRjZmY2Mjk1YmIwY2Y1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuY3BwCkBAIC0xNDUyLDggKzE0NTIsMTAgQEAgdm9pZCBXZWJQcm9jZXNzOjpmZXRjaFdl
YnNpdGVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHdlYnNpdGVEYXRhVHlwZXMsIEMK
IHsKICAgICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsKICAgICBpZiAod2Vic2l0ZURhdGFUeXBl
cy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6Ok1lbW9yeUNhY2hlKSkgewotICAgICAgICBmb3Ig
KGF1dG8mIG9yaWdpbiA6IE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5vcmlnaW5zV2l0aENhY2hl
KHNlc3Npb25JRCgpKSkKLSAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKFdl
YnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbi0+ZGF0YSgpLCBXZWJzaXRlRGF0YVR5cGU6Ok1lbW9y
eUNhY2hlLCAwIH0pOworICAgICAgICBhdXRvIG9yaWdpbnMgPSBNZW1vcnlDYWNoZTo6c2luZ2xl
dG9uKCkub3JpZ2luc1dpdGhDYWNoZShzZXNzaW9uSUQoKSk7CisgICAgICAgIHdlYnNpdGVEYXRh
LmVudHJpZXMgPSBXVEY6Om1hcChvcmlnaW5zLCBbXShhdXRvJiBvcmlnaW4pIHsKKyAgICAgICAg
ICAgIHJldHVybiBXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4tPmRhdGEoKSwgV2Vic2l0ZURh
dGFUeXBlOjpNZW1vcnlDYWNoZSwgMCB9OworICAgICAgICB9KTsKICAgICB9CiAgICAgY29tcGxl
dGlvbkhhbmRsZXIoV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452649</attachid>
            <date>2022-02-19 12:31:59 -0800</date>
            <delta_ts>2022-02-19 17:08:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236852-20220219123158.patch</filename>
            <type>text/plain</type>
            <size>162142</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMjExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDBiOGQ4YTE1ZWQxZjg3MDc2NDI2ZWUz
OTRhMGMwMzAyOGYzMGEwZTUuLjkzYzY0ZGM2ZTcwMjYyNzY4MGQ2MjIwZmI4ZjU2NzBmYjFjNDYw
MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjItMDItMTggIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGV2ZW4gbW9yZSBjYWxs
IHNpdGVzIGNvbnN0cnVjdGluZyB2ZWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuY3BwOgorICAgICAgICAoV1RGOjpD
b25jdXJyZW50V29ya1F1ZXVlOjphcHBseSk6CisgICAgICAgICogd3RmL2NmL0xhbmd1YWdlQ0Yu
Y3BwOgorICAgICAgICAoV1RGOjpwbGF0Zm9ybVVzZXJQcmVmZXJyZWRMYW5ndWFnZXMpOgorCiAy
MDIyLTAyLTE4ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBb
aU9TXSBTYWZhcmkgY2FuIHNvbWV0aW1lcyBoYW5nIHdoaWxlIHByaW50aW5nIGR1ZSB0byBzeW5j
IElQQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IGIwYjJlZGQyMDExYzhmZmE4MjVkZTk1MmFkOGZmZGY1MThjNjU1
ZGYuLjIyZmM5ZGExMjFlNmZmNmY4NzJlZWFiYTFkYmM5N2ZhZDBkMzMyZWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNjYgQEAKKzIwMjItMDItMTggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGV2ZW4gbW9yZSBjYWxsIHNpdGVz
IGNvbnN0cnVjdGluZyB2ZWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzY4NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIE1vZHVsZXMvYXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBheW1lbnRDb29yZGluYXRvcjo6YmVnaW5QYXltZW50U2Vzc2lv
bik6CisgICAgICAgICogTW9kdWxlcy9hcHBsZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29jb2Eu
bW06CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0KToKKyAgICAgICAgKiBNb2R1bGVzL2NhY2hl
L0RPTUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUNhY2hlOjpiYXRjaFB1dE9wZXJh
dGlvbik6CisgICAgICAgICogTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R2FtZXBhZDo6R2FtZXBhZCk6CisgICAgICAgICogTW9kdWxlcy9nYW1lcGFkL0dh
bWVwYWRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRNYW5hZ2VyOjpwbGF0
Zm9ybUdhbWVwYWREaXNjb25uZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZE1hbmFn
ZXI6Om1ha2VHYW1lcGFkVmlzaWJsZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6Om9iamVjdFN0b3Jl
TmFtZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OnRyYW5zYWN0aW9u
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmg6CisgICAgICAgIChX
ZWJDb3JlOjpJREJLZXlEYXRhOjppc0RlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YUhhc2g6Omhhc2gpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6aGFzaCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uOjpvYmplY3RTdG9yZU5hbWVzIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlh
Y29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFD
b250cm9sc0hvc3Q6OnNob3dNZWRpYUNvbnRyb2xzQ29udGV4dE1lbnUpOgorICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTb3VyY2U6OmFjdGl2ZVJhbmdlcyBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNv
dXJjZS9TYW1wbGVNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRlY29kZU9yZGVyU2FtcGxlTWFw
OjpzaXplIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZl
ckxpc3QuaDoKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzOjpnZXRWb2ljZXMpOgorICAgICAgICAq
IE1vZHVsZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrLm1tOgorICAgICAg
ICAoLVtXZWJTcGVlY2hSZWNvZ25pemVyVGFza0ltcGwgY2FsbGJhY2tXaXRoVHJhbnNjcmlwdGlv
bnM6aXNGaW5hbDpdKToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hS
ZWNvZ25pemVyVGFza01vY2subW06CisgICAgICAgICgtW1dlYlNwZWVjaFJlY29nbml6ZXJUYXNr
TW9jayBhdWRpb1NhbXBsZXNBdmFpbGFibGU6XSk6CisgICAgICAgICogYW5pbWF0aW9uL0NTU1By
b3BlcnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRnVuYyk6CisgICAg
ICAgICogYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmVzQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXI6OnVwZGF0ZUFuaW1hdGlvbnNB
bmRTZW5kRXZlbnRzKToKKyAgICAgICAgKiBhbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cHJvY2Vzc1Byb3BlcnR5SW5kZXhlZEtleWZyYW1lcyk6CisgICAg
ICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbjo6Q29udGVudEV4dGVu
c2lvbik6CisgICAgICAgICogY3NzL0NTU1ZhbHVlTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTVmFsdWVMaXN0OjpzaXplIGNvbnN0KToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjT3Bl
cmF0aW9uTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6
aG9pc3RDaGlsZHJlbldpdGhPcGVyYXRvcik6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJz
ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlckltcGw6OmNvbnN1bWVDb250
YWluZXJSdWxlKToKKyAgICAgICAgKiBkb20vRE9NU3RyaW5nTGlzdC5oOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NU3RyaW5nTGlzdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVN0cmlu
Z0xpc3Q6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpET01TdHJpbmdMaXN0OjpET01TdHJp
bmdMaXN0KToKKyAgICAgICAgKiBkb20vRXZlbnRQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50UGF0aDo6RXZlbnRQYXRoKToKKyAgICAgICAgKiBkb20vRnVsbHNjcmVlbk1hbmFnZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RnVsbHNjcmVlbk1hbmFnZXI6OmNhbmNlbEZ1bGxzY3Jl
ZW4pOgorICAgICAgICAqIGRvbS9Mb2FkYWJsZVNjcmlwdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMb2FkYWJsZVNjcmlwdDo6bm90aWZ5Q2xpZW50RmluaXNoZWQpOgorICAgICAgICAqIGRvbS9S
YWRpb0J1dHRvbkdyb3Vwcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYWRpb0J1dHRvbkdyb3Vw
OjptZW1iZXJzIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0RpcmVjdG9yeUZpbGVMaXN0Q3JlYXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0ZpbGVMaXN0KToKKyAgICAgICAgKiBodG1sL0hU
TUxTZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
OjpzYXZlTGFzdFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVu
dDo6c2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgpOgorICAgICAgICAqIGh0bWwvSW1hZ2VC
aXRtYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OmRldGFjaEJpdG1hcHMp
OgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0YWNoZWRT
aGFkZXJzKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpwcm9jZXNzTWV0YSk6
CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6aW5zZXJ0UGhvbmVOdW1iZXJMaW5rKToKKyAgICAgICAg
KiBodG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dERvY3VtZW50UGFyc2VyOjppbnNlcnRGYWtlUHJlRWxlbWVudCk6CisgICAgICAgICogbG9h
ZGVyL0NvbnRlbnRGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEZpbHRlcjo6
Y3JlYXRlKToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZU1hbmlm
ZXN0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQXBwbGljYXRpb25DYWNoZU1h
bmlmZXN0KToKKyAgICAgICAgKiBwYWdlL1Jlc2l6ZU9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlc2l6ZU9ic2VydmVyOjpkZWxpdmVyT2JzZXJ2YXRpb25zKToKKyAgICAgICAgKiBw
YWdlL1RleHRJbmRpY2F0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZUluZGlj
YXRvcik6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlU3ViUmVzb3VyY2VJbnRlZ3JpdHlJbnRvRGlnZXN0cyk6Cisg
ICAgICAgICogcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rmls
ZUNob29zZXI6OmNob29zZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUNob29zZXI6OmNo
b29zZUZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjaG9vc2VNZWRpYUZp
bGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9UaHJlYWRTYWZlRGF0YUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0RTUEtlcm5lbFByb2Nlc3Nvcjo6aW5pdGlhbGl6ZSk6CisgICAgICAg
ICogcGxhdGZvcm0vYXVkaW8vQXVkaW9SZXNhbXBsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9SZXNhbXBsZXI6OkF1ZGlvUmVzYW1wbGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRp
by9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1p
Y3NDb21wcmVzc29yS2VybmVsOjpzZXROdW1iZXJPZkNoYW5uZWxzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9NdWx0aUNoYW5uZWxSZXNhbXBsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TXVsdGlDaGFubmVsUmVzYW1wbGVyOjpNdWx0aUNoYW5uZWxSZXNhbXBsZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWQv
bWFjL0R1YWxzaG9jazNISURHYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkR1YWxzaG9j
azNISURHYW1lcGFkOjpEdWFsc2hvY2szSElER2FtZXBhZCk6CisgICAgICAgICogcGxhdGZvcm0v
Z2FtZXBhZC9tYWMvTG9naXRlY2hHYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvZ2l0
ZWNoR2FtZXBhZDo6TG9naXRlY2hHYW1lcGFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFk
L21hYy9TdGFkaWFISURHYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0YWRpYUhJREdh
bWVwYWQ6OlN0YWRpYUhJREdhbWVwYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6YWRkUmVw
YWludFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGF0aFV0aWxpdGllczo6cGF0aHNXaXRoU2hyaW5rV3JhcHBl
ZFJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhVdGlsaXRpZXM6OnBhdGhXaXRoU2hyaW5r
V3JhcHBlZFJlY3RzRm9yT3V0bGluZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU291
cmNlQnVmZmVyUHJpdmF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2
YXRlOjpidWZmZXJlZFNhbXBsZXNGb3JUcmFja0lkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpleHRyYWN0S2V5SURzU2tkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVZGV3JhcHBlcjo6c2V0
UmVxdWVzdEZvcktleSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW06CisgICAgICAgIChX
ZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnVwZGF0
ZUtleVN0YXR1c2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyQVZGT2JqQzo6ZnJhbWVJbmZvcyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUGFyc2VyQVZGT2JqQy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlckFWRk9iakM6OmRpZFBhcnNlU3RyZWFtRGF0
YUFzQXNzZXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9y
bURhdGFDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnZhcmlh
dGlvbkF4ZXMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVTdHJpbmcpOgorICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlOjpzZXRTdXBwb3J0ZWRQ
cmVzZXRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMKToK
KyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3RyeUltcGw6OndyaXRlQmxvYnNUb1RlbXBvcmFy
eUZpbGVzRm9ySW5kZXhlZERCKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmRyYXdC
b3hTaWRlRnJvbVBhdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpjb25uZWN0Q2xpcHBp
bmdTdGFja0xheWVycyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkanVzdE92
ZXJmbG93U2Nyb2xsYmFyQ29udGFpbmVyTGF5ZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpwYWludEF0dGFjaG1lbnRUaXRsZUJh
Y2tncm91bmQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVNWR1N0cm9rZVBhaW50aW5nUmVzb3VyY2UpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RleHRDaHVuazo6U1ZHVGV4dENodW5rKToKKyAgICAgICAgKiBzdHlsZS9QYWdlUnVs
ZUNvbGxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UGFnZVJ1bGVDb2xsZWN0
b3I6Om1hdGNoUGFnZVJ1bGVzKToKKyAgICAgICAgKiBzdHlsZS9SdWxlU2V0QnVpbGRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldEJ1aWxkZXI6Ok1lZGlhUXVlcnlDb2xs
ZWN0b3I6OnBvcCk6CisgICAgICAgICogc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENvbnRhaW5l
ck5hbWUpOgorCiAyMDIyLTAyLTE5ICBBbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbTEZDXVtJRkNdIEFkZCBzdXBwb3J0IGZvciBpZGVvZ3JhcGhpYyBiYXNlbGluZSB3
aXRoIGZvbnQgZmFsbGJhY2sKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMTVjMDFlYzg0MGFmYjZhNWQxNDMyYzliN2M2
NTAzYTI3MDJiNWFkMS4uZTYwNDllZDQ5N2FlMTQxNmFlNjMyNjA0MmM1ZmUzMjU5MGFkNmYyNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw5OCBAQAorMjAyMi0wMi0xOCAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIC8gb3B0aW1pemUgZXZlbiBtb3JlIGNh
bGwgc2l0ZXMgY29uc3RydWN0aW5nIHZlY3RvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjg1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXll
clByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTWVkaWFQbGF5ZXJQcm94eTo6b3V0
T2ZCYW5kVHJhY2tTb3VyY2VzKToKKyAgICAgICAgKiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZVNv
dXJjZUJ1ZmZlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlU291cmNlQnVmZmVy
UHJveHk6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlU291cmNlQnVmZmVyUHJveHk6OnVwZGF0ZVRyYWNr
SWRzKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OmZldGNoRGlz
a0NhY2hlRW50cmllcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTm90aWZpY2F0aW9ucy9O
ZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtO
b3RpZmljYXRpb25NYW5hZ2VyOjpnZXRPcmlnaW5zV2l0aFB1c2hBbmROb3RpZmljYXRpb25QZXJt
aXNzaW9ucyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFu
YWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjphbGxTdG9yYWdlQXJl
YUlkZW50aWZpZXJzIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdl
L1RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRy
YW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6b3JpZ2lucyBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6c3RvcmFnZUFyZWFJZGVudGlm
aWVycyBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdl
RW5naW5lQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpm
aW5pc2hPcGVuaW5nKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6a2V5
cyBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdl
QXJlYS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpTUUxpdGVTdG9y
YWdlQXJlYSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmg6CisgICAg
ICAgICogU2hhcmVkL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OnNob3dQYXltZW50VUkp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbi5jcHA6CisgICAgICAgIChB
UEk6Ok5hdmlnYXRpb246Ok5hdmlnYXRpb24pOgorICAgICAgICAoQVBJOjptX2NsaWVudE5hdmln
YXRpb25BY3Rpdml0eSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dLU2hhcmVTaGVldC5t
bToKKyAgICAgICAgKGFwcGVuZEZpbGVzQXNTaGFyZWFibGVVUkxzKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6cmVzdG9yZUFwcEhpZ2hsaWdodHNBbmRTY3JvbGxUb0luZGV4KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxv
YWRTdGF0ZTo6ZGlkRmluaXNoTG9hZCk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0
d29ya1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpwYXJhbWV0ZXJzIGNv
bnN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRv
ck1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpBdXRoZW50aWNhdG9yTWFuYWdlcjo6c3Rh
cnREaXNjb3ZlcnkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OnJlbW92ZUFsbEl0ZW1zKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0OjpjbGVhcik6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnJlbW92ZVByb2Nlc3NGcm9tT3JpZ2luQ2FjaGVTZXQpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UHJveHk6OnByb2Nlc3NEaWRUZXJtaW5hdGVPckZhaWxlZFRvTGF1bmNoKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5KToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YSk6CisgICAgICAgICogVUlQcm9jZXNzL2lv
cy9UZXh0Q2hlY2tlcklPUy5tbToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNr
VGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRB
c3Npc3RhbnQubW06CisgICAgICAgICgtW1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQgcHJlc2VudGF0
aW9uUmVjdEZvckVsZW1lbnRVc2luZ0Nsb3Nlc3RJbmRpY2F0ZWRSZWN0XSk6CisgICAgICAgICog
VUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6VGV4dENo
ZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0FwcGxl
UGF5L1dlYlBheW1lbnRDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBheW1l
bnRDb29yZGluYXRvcjo6c2hvd1BheW1lbnRVSSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9BdXRv
bWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpzZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZCk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyOjpjcmVhdGVSZW1v
dGVNZWRpYVBsYXllcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvU291cmNlQnVm
ZmVyUHJpdmF0ZVJlbW90ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNvdXJjZUJ1ZmZlclByaXZh
dGVSZW1vdGU6OnVwZGF0ZVRyYWNrSWRzKToKKyAgICAgICAgKFdlYktpdDo6U291cmNlQnVmZmVy
UHJpdmF0ZVJlbW90ZTo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0aWFsaXphdGlv
blNlZ21lbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2Rl
Y3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpMaWJXZWJSVENDb2RlY3M6OmNyZWF0ZUVuY29kZXIp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdl
T3ZlcmxheS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9TZXNzaW9u
U3RhdGVDb252ZXJzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6dG9GcmFtZVN0YXRlKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRldmljZU9yaWVudGF0aW9uVXBk
YXRlUHJvdmlkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZpY2VPcmllbnRhdGlvblVw
ZGF0ZVByb3ZpZGVyOjpkZXZpY2VPcmllbnRhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyOjpkZXZpY2VNb3Rpb25DaGFuZ2Vk
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVy
cmlkZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpvdmVy
cmlkZGVuVHlwZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViU3Bl
ZWNoU3ludGhlc2lzQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoU3ludGhl
c2lzQ2xpZW50Ojp2b2ljZUxpc3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5k
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjpmaW5kU3Ry
aW5nTWF0Y2hlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJh
bmdlQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZvdW5kVGV4dFJhbmdlQ29u
dHJvbGxlcjo6ZHJhd1JlY3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y29uc3VtZVNhbmRib3hFeHRlbnNpb25z
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OmhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzczo6ZmV0Y2hXZWJzaXRlRGF0YSk6CisKIDIwMjItMDItMTkgIFdlbnNvbiBIc2llaCAgPHdl
bnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY09TXSBIb3ZlcmluZyBvdmVyICJD
b3B5IENyb3BwZWQgSW1hZ2UiIGNvbnRleHQgbWVudSBpdGVtIHNob3VsZCByZXZlYWwgdGhlIGNy
b3BwZWQgaW1hZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAgYi9T
b3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwCmluZGV4IDllMTA2ZTM5NGQzZjQ0ZDJjMjVmYzNj
YTE1MzU0MGU1MjA0Y2IzNWIuLjg2NDA2ZjM4ODQzNzE0Y2IyNTVjMzRlYWUzZjkxODFkYWJhNThl
MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAKKysrIGIvU291cmNl
L1dURi93dGYvV29ya1F1ZXVlLmNwcApAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgQ29uY3VycmVu
dFdvcmtRdWV1ZTo6YXBwbHkoc2l6ZV90IGl0ZXJhdGlvbnMsIFdURjo6RnVuY3Rpb248dm9pZChz
aXplX3QgaW5kCiAKICAgICAgICAgICAgIG1fd29ya2Vycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KHRocmVhZENvdW50KTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aHJl
YWRDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgbV93b3JrZXJzLmFwcGVuZChUaHJlYWQ6
OmNyZWF0ZSgiVGhyZWFkUG9vbCBXb3JrZXIiLCBbdGhpc10geworICAgICAgICAgICAgICAgIG1f
d29ya2Vycy51bmNoZWNrZWRBcHBlbmQoVGhyZWFkOjpjcmVhdGUoIlRocmVhZFBvb2wgV29ya2Vy
IiwgW3RoaXNdIHsKICAgICAgICAgICAgICAgICAgICAgdGhyZWFkQm9keSgpOwogICAgICAgICAg
ICAgICAgIH0pKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2Nm
L0xhbmd1YWdlQ0YuY3BwIGIvU291cmNlL1dURi93dGYvY2YvTGFuZ3VhZ2VDRi5jcHAKaW5kZXgg
YmJjMWVmNmY0ZWZlMDMwNTljZTU1MTMxZTA4YzEwMzMyMjQ4OGU1Ni4uYzA0YzU1YmM2MDNkMjgx
ZDBjYTM4OTIwZWJhOGM3OWU1ZTY5Mjk4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvY2Yv
TGFuZ3VhZ2VDRi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvY2YvTGFuZ3VhZ2VDRi5jcHAKQEAg
LTEwMiw5ICsxMDIsMTAgQEAgVmVjdG9yPFN0cmluZz4gcGxhdGZvcm1Vc2VyUHJlZmVycmVkTGFu
Z3VhZ2VzKFNob3VsZE1pbmltaXplTGFuZ3VhZ2VzIHNob3VsZE1pbmkKICAgICAgICAgcmV0dXJu
IHsgImVuIl9zIH07CiAKICAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXM7CisgICAgbGFuZ3Vh
Z2VzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGxhdGZvcm1MYW5ndWFnZXNDb3VudCk7CiAgICAg
Zm9yIChDRkluZGV4IGkgPSAwOyBpIDwgcGxhdGZvcm1MYW5ndWFnZXNDb3VudDsgaSsrKSB7CiAg
ICAgICAgIGF1dG8gcGxhdGZvcm1MYW5ndWFnZSA9IHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPihD
RkFycmF5R2V0VmFsdWVBdEluZGV4KHBsYXRmb3JtTGFuZ3VhZ2VzLmdldCgpLCBpKSk7Ci0gICAg
ICAgIGxhbmd1YWdlcy5hcHBlbmQoaHR0cFN0eWxlTGFuZ3VhZ2VDb2RlKHBsYXRmb3JtTGFuZ3Vh
Z2UsIHNob3VsZE1pbmltaXplTGFuZ3VhZ2VzKSk7CisgICAgICAgIGxhbmd1YWdlcy51bmNoZWNr
ZWRBcHBlbmQoaHR0cFN0eWxlTGFuZ3VhZ2VDb2RlKHBsYXRmb3JtTGFuZ3VhZ2UsIHNob3VsZE1p
bmltaXplTGFuZ3VhZ2VzKSk7CiAgICAgfQogCiAgICAgTE9HX1dJVEhfU1RSRUFNKExhbmd1YWdl
LCBzdHJlYW0gPDwgIkFmdGVyIHBhc3NpbmcgdGhyb3VnaCBodHRwU3R5bGVMYW5ndWFnZUNvZGU6
ICIgPDwgbGFuZ3VhZ2VzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBw
bGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBw
bGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNwcAppbmRleCAxYTMyN2E5NGIwYjcxZDRlYzc1ZWFj
YzhkNGFkNzhhOTFiOWZmNjg1Li40YTk0MzIyNDlkNTJkNTFkMTQ3Yjg2ZTU3MDhkNTE4ODhiYTY0
ZjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRD
b29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXlt
ZW50Q29vcmRpbmF0b3IuY3BwCkBAIC0xMDEsMTEgKzEwMSwxMCBAQCBib29sIFBheW1lbnRDb29y
ZGluYXRvcjo6YmVnaW5QYXltZW50U2Vzc2lvbihEb2N1bWVudCYgZG9jdW1lbnQsIFBheW1lbnRT
ZXNzaW9uJgogewogICAgIEFTU0VSVCghbV9hY3RpdmVTZXNzaW9uKTsKIAotICAgIFZlY3RvcjxV
Ukw+IGxpbmtJY29uVVJMczsKLSAgICBmb3IgKGF1dG8mIGljb24gOiBMaW5rSWNvbkNvbGxlY3Rv
ciB7IGRvY3VtZW50IH0uaWNvbnNPZlR5cGVzKHsgTGlua0ljb25UeXBlOjpUb3VjaEljb24sIExp
bmtJY29uVHlwZTo6VG91Y2hQcmVjb21wb3NlZEljb24gfSkpCi0gICAgICAgIGxpbmtJY29uVVJM
cy5hcHBlbmQoaWNvbi51cmwpOwotCi0gICAgYXV0byBzaG93UGF5bWVudFVJID0gbV9jbGllbnQu
c2hvd1BheW1lbnRVSShkb2N1bWVudC51cmwoKSwgbGlua0ljb25VUkxzLCBwYXltZW50UmVxdWVz
dCk7CisgICAgYXV0byBsaW5rSWNvblVSTHMgPSBMaW5rSWNvbkNvbGxlY3RvciB7IGRvY3VtZW50
IH0uaWNvbnNPZlR5cGVzKHsgTGlua0ljb25UeXBlOjpUb3VjaEljb24sIExpbmtJY29uVHlwZTo6
VG91Y2hQcmVjb21wb3NlZEljb24gfSkubWFwKFtdKGF1dG8mIGljb24pIHsKKyAgICAgICAgcmV0
dXJuIGljb24udXJsOworICAgIH0pOworICAgIGF1dG8gc2hvd1BheW1lbnRVSSA9IG1fY2xpZW50
LnNob3dQYXltZW50VUkoZG9jdW1lbnQudXJsKCksIFdURk1vdmUobGlua0ljb25VUkxzKSwgcGF5
bWVudFJlcXVlc3QpOwogICAgIFBBWU1FTlRfQ09PUkRJTkFUT1JfUkVMRUFTRV9MT0coImJlZ2lu
UGF5bWVudFNlc3Npb24oKSAtPiAlZCIsIHNob3dQYXltZW50VUkpOwogICAgIGlmICghc2hvd1Bh
eW1lbnRVSSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9hcHBsZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29jb2EubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L2NvY29hL1BheW1lbnRNZXRob2RDb2NvYS5tbQppbmRl
eCA3NjUzZGU1NGFmNTM5ZjI1NjFmNDIyMzZkMzBlYzYxYWI1ODAzZGQ1Li4zNzVlNTNkNmQ0ZmRk
Yzg4OGYzMmUwNGUyODNhN2RiMDQxMTNkMDYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2FwcGxlcGF5L2NvY29hL1BheW1lbnRNZXRob2RDb2NvYS5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L2NvY29hL1BheW1lbnRNZXRob2RDb2NvYS5tbQpAQCAt
MTAxLDExICsxMDEsOCBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxBcHBsZVBheVBheW1lbnRNZXRo
b2Q6OlR5cGU+IGNvbnZlcnQoUEtQYXltZW50TWV0aG9kVHlwZSBwYQogI2lmIEhBVkUoUEFTU0tJ
VF9QQVlNRU5UX01FVEhPRF9CSUxMSU5HX0FERFJFU1MpCiBzdGF0aWMgdm9pZCBjb252ZXJ0KENO
TGFiZWxlZFZhbHVlPENOUG9zdGFsQWRkcmVzcyo+ICpwb3N0YWxBZGRyZXNzLCBBcHBsZVBheVBh
eW1lbnRDb250YWN0ICZyZXN1bHQpCiB7Ci0gICAgVmVjdG9yPFN0cmluZz4gYWRkcmVzc0xpbmU7
Ci0gICAgaWYgKE5TU3RyaW5nICpzdHJlZXQgPSBwb3N0YWxBZGRyZXNzLnZhbHVlLnN0cmVldCkg
ewotICAgICAgICBhZGRyZXNzTGluZS5hcHBlbmQoc3RyZWV0KTsKLSAgICAgICAgcmVzdWx0LmFk
ZHJlc3NMaW5lcyA9IFdURk1vdmUoYWRkcmVzc0xpbmUpOwotICAgIH0KKyAgICBpZiAoTlNTdHJp
bmcgKnN0cmVldCA9IHBvc3RhbEFkZHJlc3MudmFsdWUuc3RyZWV0KQorICAgICAgICByZXN1bHQu
YWRkcmVzc0xpbmVzID0gVmVjdG9yIHsgU3RyaW5nIHsgc3RyZWV0IH0gfTsKICAgICByZXN1bHQu
c3ViTG9jYWxpdHkgPSBwb3N0YWxBZGRyZXNzLnZhbHVlLnN1YkxvY2FsaXR5OwogICAgIHJlc3Vs
dC5sb2NhbGl0eSA9IHBvc3RhbEFkZHJlc3MudmFsdWUuY2l0eTsKICAgICByZXN1bHQuc3ViQWRt
aW5pc3RyYXRpdmVBcmVhID0gcG9zdGFsQWRkcmVzcy52YWx1ZS5zdWJBZG1pbmlzdHJhdGl2ZUFy
ZWE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGUuY3BwCmluZGV4IDQ5ZjM5
OGFhZmVmMzdjZDVlOGY4ZWIyNDRkNGUxMWYzOWYyYThjZDMuLjJkNDZkMWNkYmM3MTdmM2M5Mjk5
ZWZhODYzYTU0OTI2MzgzYWY1ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
Y2FjaGUvRE9NQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9N
Q2FjaGUuY3BwCkBAIC01MTUsMTAgKzUxNSw4IEBAIFJlY29yZCBET01DYWNoZTo6dG9Db25uZWN0
aW9uUmVjb3JkKGNvbnN0IEZldGNoUmVxdWVzdCYgcmVxdWVzdCwgRmV0Y2hSZXNwb25zZSYKIAog
dm9pZCBET01DYWNoZTo6YmF0Y2hQdXRPcGVyYXRpb24oY29uc3QgRmV0Y2hSZXF1ZXN0JiByZXF1
ZXN0LCBGZXRjaFJlc3BvbnNlJiByZXNwb25zZSwgRE9NQ2FjaGVFbmdpbmU6OlJlc3BvbnNlQm9k
eSYmIHJlc3BvbnNlQm9keSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChFeGNlcHRpb25Pcjx2b2lk
PiYmKT4mJiBjYWxsYmFjaykKIHsKLSAgICBWZWN0b3I8UmVjb3JkPiByZWNvcmRzOwotICAgIHJl
Y29yZHMuYXBwZW5kKHRvQ29ubmVjdGlvblJlY29yZChyZXF1ZXN0LCByZXNwb25zZSwgV1RGTW92
ZShyZXNwb25zZUJvZHkpKSk7Ci0KLSAgICBiYXRjaFB1dE9wZXJhdGlvbihXVEZNb3ZlKHJlY29y
ZHMpLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgYXV0byByZWNvcmQgPSB0b0Nvbm5lY3Rpb25S
ZWNvcmQocmVxdWVzdCwgcmVzcG9uc2UsIFdURk1vdmUocmVzcG9uc2VCb2R5KSk7CisgICAgYmF0
Y2hQdXRPcGVyYXRpb24oeyBXVEZNb3ZlKHJlY29yZCkgfSwgV1RGTW92ZShjYWxsYmFjaykpOwog
fQogCiB2b2lkIERPTUNhY2hlOjpiYXRjaFB1dE9wZXJhdGlvbihWZWN0b3I8UmVjb3JkPiYmIHJl
Y29yZHMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRXhjZXB0aW9uT3I8dm9pZD4mJik+JiYgY2Fs
bGJhY2spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBh
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5jcHAKaW5kZXgg
Njk2OWUwYjUwM2E4N2RkMDM4NWUxODM5MDg4NDY3MGZlYTA0YzI2Ny4uNTgzZjljODU1NTY3MTc4
Y2NlNzJjYWQ0NDc5MjRjZjhiYzNjNGU1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9nYW1lcGFkL0dhbWVwYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2Ft
ZXBhZC9HYW1lcGFkLmNwcApAQCAtNDMsOCArNDMsOSBAQCBHYW1lcGFkOjpHYW1lcGFkKGNvbnN0
IFBsYXRmb3JtR2FtZXBhZCYgcGxhdGZvcm1HYW1lcGFkKQogICAgICwgbV9heGVzKHBsYXRmb3Jt
R2FtZXBhZC5heGlzVmFsdWVzKCkuc2l6ZSgpLCAwLjApCiB7CiAgICAgdW5zaWduZWQgYnV0dG9u
Q291bnQgPSBwbGF0Zm9ybUdhbWVwYWQuYnV0dG9uVmFsdWVzKCkuc2l6ZSgpOworICAgIG1fYnV0
dG9ucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGJ1dHRvbkNvdW50KTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYnV0dG9uQ291bnQ7ICsraSkKLSAgICAgICAgbV9idXR0b25zLmFwcGVu
ZChHYW1lcGFkQnV0dG9uOjpjcmVhdGUoKSk7CisgICAgICAgIG1fYnV0dG9ucy51bmNoZWNrZWRB
cHBlbmQoR2FtZXBhZEJ1dHRvbjo6Y3JlYXRlKCkpOwogfQogCiBHYW1lcGFkOjp+R2FtZXBhZCgp
ID0gZGVmYXVsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9H
YW1lcGFkTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBh
ZE1hbmFnZXIuY3BwCmluZGV4IGNjMzc0ODU4Y2ZlYTFiMjQ0YzA0YmQ0MWIyOTk0OGQyOWFlYTMw
MzAuLjU0M2ZlNDg5MTY3ZTdjZTEzZDQ5NzY4ZmM3ZTE1ZjM0ZDA4MjM2ZTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmNwcApAQCAtNzks
MTQgKzc5LDEwIEBAIHZvaWQgR2FtZXBhZE1hbmFnZXI6OnBsYXRmb3JtR2FtZXBhZENvbm5lY3Rl
ZChQbGF0Zm9ybUdhbWVwYWQmIHBsYXRmb3JtR2FtZXBhZCwKIAogdm9pZCBHYW1lcGFkTWFuYWdl
cjo6cGxhdGZvcm1HYW1lcGFkRGlzY29ubmVjdGVkKFBsYXRmb3JtR2FtZXBhZCYgcGxhdGZvcm1H
YW1lcGFkKQogewotICAgIFZlY3RvcjxXZWFrUHRyPERPTVdpbmRvdz4+IHdlYWtXaW5kb3dzOwot
ICAgIGZvciAoYXV0byogZG9tV2luZG93IDogbV9kb21XaW5kb3dzKQotICAgICAgICB3ZWFrV2lu
ZG93cy5hcHBlbmQoKmRvbVdpbmRvdyk7Ci0KICAgICBIYXNoU2V0PE5hdmlnYXRvckdhbWVwYWQq
PiBub3RpZmllZE5hdmlnYXRvcnM7CiAKICAgICAvLyBIYW5kbGUgdGhlIGRpc2Nvbm5lY3QgZm9y
IGFsbCBET01XaW5kb3dzIHdpdGggZXZlbnQgbGlzdGVuZXJzIGFuZCB0aGVpciBOYXZpZ2F0b3Jz
LgotICAgIGZvciAoYXV0byYgd2luZG93IDogd2Vha1dpbmRvd3MpIHsKKyAgICBmb3IgKGF1dG8m
IHdpbmRvdyA6IGNvcHlUb1ZlY3Rvck9mPFdlYWtQdHI8RE9NV2luZG93Pj4obV9kb21XaW5kb3dz
KSkgewogICAgICAgICAvLyBFdmVudCBkaXNwYXRjaCBtaWdodCBoYXZlIG1hZGUgdGhpcyB3aW5k
b3cgZ28gYXdheS4KICAgICAgICAgaWYgKCF3aW5kb3cpCiAgICAgICAgICAgICBjb250aW51ZTsK
QEAgLTE0MywxMSArMTM5LDcgQEAgdm9pZCBHYW1lcGFkTWFuYWdlcjo6bWFrZUdhbWVwYWRWaXNp
YmxlKFBsYXRmb3JtR2FtZXBhZCYgcGxhdGZvcm1HYW1lcGFkLCBIYXNoU2UKICAgICBmb3IgKGF1
dG8qIG5hdmlnYXRvciA6IG5hdmlnYXRvclNldCkKICAgICAgICAgbmF2aWdhdG9yLT5nYW1lcGFk
Q29ubmVjdGVkKHBsYXRmb3JtR2FtZXBhZCk7CiAKLSAgICBWZWN0b3I8V2Vha1B0cjxET01XaW5k
b3c+PiB3ZWFrV2luZG93czsKLSAgICBmb3IgKGF1dG8qIGRvbVdpbmRvdyA6IG1fZG9tV2luZG93
cykKLSAgICAgICAgd2Vha1dpbmRvd3MuYXBwZW5kKCpkb21XaW5kb3cpOwotCi0gICAgZm9yIChh
dXRvJiB3aW5kb3cgOiB3ZWFrV2luZG93cykgeworICAgIGZvciAoYXV0byYgd2luZG93IDogY29w
eVRvVmVjdG9yT2Y8V2Vha1B0cjxET01XaW5kb3c+PihtX2RvbVdpbmRvd3MpKSB7CiAgICAgICAg
IC8vIEV2ZW50IGRpc3BhdGNoIG1pZ2h0IGhhdmUgbWFkZSB0aGlzIHdpbmRvdyBnbyBhd2F5Lgog
ICAgICAgICBpZiAoIXdpbmRvdykKICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCmluZGV4IDdhYTYzMmI3
ZWMwNDdiZTQ2MDhiNTFhMDk0ZWExYTRlNTdhMjYyOWIuLjBiZThiZDExNmVjMjM2MTIzYzcxNTMy
ZDdlZTM2YzU2ZTk5NjU0OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZS5jcHAKQEAgLTEwMiw5ICsxMDIsNyBAQCBSZWY8RE9NU3RyaW5nTGlz
dD4gSURCRGF0YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMoKSBjb25zdAogewogICAgIEFTU0VSVChj
YW5DdXJyZW50VGhyZWFkQWNjZXNzVGhyZWFkTG9jYWxEYXRhKG9yaWdpblRocmVhZCgpKSk7CiAK
LSAgICBhdXRvIG9iamVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKLSAg
ICBmb3IgKGF1dG8mIG5hbWUgOiBtX2luZm8ub2JqZWN0U3RvcmVOYW1lcygpKQotICAgICAgICBv
YmplY3RTdG9yZU5hbWVzLT5hcHBlbmQobmFtZSk7CisgICAgYXV0byBvYmplY3RTdG9yZU5hbWVz
ID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKG1faW5mby5vYmplY3RTdG9yZU5hbWVzKCkpOwogICAg
IG9iamVjdFN0b3JlTmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gb2JqZWN0U3RvcmVOYW1lczsK
IH0KQEAgLTE3NSwxOSArMTczLDE2IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJUcmFuc2FjdGlvbj4+
IElEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbihTdHJpbmdPclZlY3Rvck9mU3RyaW5nCiAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0byBleGVjdXRl
ICd0cmFuc2FjdGlvbicgb24gJ0lEQkRhdGFiYXNlJzogVGhlIGRhdGFiYXNlIGNvbm5lY3Rpb24g
aXMgY2xvc2luZy4iX3MgfTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IG9iamVjdFN0b3JlczsKLSAg
ICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oc3RvcmVOYW1lcykp
CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPFN0cmluZz4+KHN0b3JlTmFt
ZXMpKSB7CiAgICAgICAgIG9iamVjdFN0b3JlcyA9IFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPFN0
cmluZz4+KHN0b3JlTmFtZXMpKTsKLSAgICBlbHNlCisgICAgICAgIC8vIEl0IGlzIHZhbGlkIGZv
ciBqYXZhc2NyaXB0IHRvIHBhc3MgaW4gYSBsaXN0IG9mIG9iamVjdCBzdG9yZSBuYW1lcyB3aXRo
IHRoZSBzYW1lIG5hbWUgbGlzdGVkIHR3aWNlLAorICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIHB1
dCB0aGVtIGFsbCBpbiBhIHNldCB0byBnZXQgYSB1bmlxdWUgbGlzdC4KKyAgICAgICAgSGFzaFNl
dDxTdHJpbmc+IG9iamVjdFN0b3JlU2V0OworICAgICAgICBvYmplY3RTdG9yZVNldC5hZGQob2Jq
ZWN0U3RvcmVzLmJlZ2luKCksIG9iamVjdFN0b3Jlcy5lbmQoKSk7CisgICAgICAgIG9iamVjdFN0
b3JlcyA9IGNvcHlUb1ZlY3RvcihvYmplY3RTdG9yZVNldCk7CisgICAgfSBlbHNlCiAgICAgICAg
IG9iamVjdFN0b3Jlcy5hcHBlbmQoV1RGTW92ZShzdGQ6OmdldDxTdHJpbmc+KHN0b3JlTmFtZXMp
KSk7CiAKLSAgICAvLyBJdCBpcyB2YWxpZCBmb3IgamF2YXNjcmlwdCB0byBwYXNzIGluIGEgbGlz
dCBvZiBvYmplY3Qgc3RvcmUgbmFtZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGxpc3RlZCB0d2ljZSwK
LSAgICAvLyBzbyB3ZSBuZWVkIHRvIHB1dCB0aGVtIGFsbCBpbiBhIHNldCB0byBnZXQgYSB1bmlx
dWUgbGlzdC4KLSAgICBIYXNoU2V0PFN0cmluZz4gb2JqZWN0U3RvcmVTZXQ7Ci0gICAgZm9yIChh
dXRvJiBvYmplY3RTdG9yZSA6IG9iamVjdFN0b3JlcykKLSAgICAgICAgb2JqZWN0U3RvcmVTZXQu
YWRkKG9iamVjdFN0b3JlKTsKLQotICAgIG9iamVjdFN0b3JlcyA9IGNvcHlUb1ZlY3RvcihvYmpl
Y3RTdG9yZVNldCk7Ci0KICAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlTmFtZSA6IG9iamVjdFN0
b3JlcykgewogICAgICAgICBpZiAobV9pbmZvLmhhc09iamVjdFN0b3JlKG9iamVjdFN0b3JlTmFt
ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleURhdGEuaAppbmRleCA0Yjk3ODUzNjlkMTkwYTZiMTk2OTFkMTM3YWUxNTY3
ZTVjMzc5NWQ5Li45ZjhjMzM1Zjg1MzNlZmM0MDhhZDJmOWNmNjdiMDFiMmU2N2I2MDczIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5oCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRlIDx2YXJpYW50PgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvU3RkU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCkBAIC0xMTcsNDEgKzExOCw2IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGhh
c2goKSBjb25zdAotICAgIHsKLSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBoYXNoQ29kZXM7Ci0g
ICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdHlwZSkpOwot
ICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKG1faXNOdWxsID8gMSA6IDApOwotICAgICAgICBoYXNo
Q29kZXMuYXBwZW5kKG1faXNEZWxldGVkVmFsdWUgPyAxIDogMCk7Ci0gICAgICAgIHN3aXRjaCAo
bV90eXBlKSB7Ci0gICAgICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpJbnZhbGlkOgotICAg
ICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TWF4OgotICAgICAgICBjYXNlIEluZGV4ZWRE
Qjo6S2V5VHlwZTo6TWluOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5kZXhl
ZERCOjpLZXlUeXBlOjpOdW1iZXI6Ci0gICAgICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpE
YXRlOgotICAgICAgICAgICAgaGFzaENvZGVzLmFwcGVuZChTdHJpbmdIYXNoZXI6Omhhc2hNZW1v
cnk8c2l6ZW9mKGRvdWJsZSk+KCZzdGQ6OmdldDxkb3VibGU+KG1fdmFsdWUpKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OlN0cmluZzoKLSAg
ICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoU3RyaW5nSGFzaDo6aGFzaChzdGQ6OmdldDxTdHJp
bmc+KG1fdmFsdWUpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbmRleGVk
REI6OktleVR5cGU6OkJpbmFyeTogewotICAgICAgICAgICAgYXV0byogZGF0YSA9IHN0ZDo6Z2V0
PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKS5kYXRhKCk7Ci0gICAgICAgICAgICBpZiAo
IWRhdGEpCi0gICAgICAgICAgICAgICAgaGFzaENvZGVzLmFwcGVuZCgwKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKFN0cmluZ0hhc2hlcjo6aGFz
aE1lbW9yeShkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OkFycmF5OgotICAg
ICAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1f
dmFsdWUpKQotICAgICAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoa2V5Lmhhc2goKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBTdHJpbmdIYXNo
ZXI6Omhhc2hNZW1vcnkoaGFzaENvZGVzLmRhdGEoKSwgaGFzaENvZGVzLnNpemUoKSAqIHNpemVv
Zih1bnNpZ25lZCkpOwotICAgIH0KLQogICAgIFN0cmluZyBzdHJpbmcoKSBjb25zdAogICAgIHsK
ICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBJbmRleGVkREI6OktleVR5cGU6OlN0cmluZyk7CkBA
IC0xODQsNiArMTUwLDggQEAgcHVibGljOgogCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdDsKIAor
ICAgIGJvb2wgaXNEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2lzRGVsZXRlZFZhbHVl
OyB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIHN0cnVjdCBJREJLZXlEYXRhSGFzaFRyYWl0czsK
IApAQCAtMTk2LDggKzE2NCwzNiBAQCBwcml2YXRlOgogICAgIHN0ZDo6dmFyaWFudDxWZWN0b3I8
SURCS2V5RGF0YT4sIFN0cmluZywgZG91YmxlLCBUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4gbV92YWx1
ZTsKIH07CiAKK2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgSURCS2V5RGF0
YSYga2V5RGF0YSkKK3sKKyAgICBhZGQoaGFzaGVyLCBrZXlEYXRhLnR5cGUoKSk7CisgICAgYWRk
KGhhc2hlciwga2V5RGF0YS5pc051bGwoKSk7CisgICAgYWRkKGhhc2hlciwga2V5RGF0YS5pc0Rl
bGV0ZWRWYWx1ZSgpKTsKKyAgICBzd2l0Y2ggKGtleURhdGEudHlwZSgpKSB7CisgICAgY2FzZSBJ
bmRleGVkREI6OktleVR5cGU6OkludmFsaWQ6CisgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6
Ok1heDoKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TWluOgorICAgICAgICBicmVhazsK
KyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TnVtYmVyOgorICAgICAgICBhZGQoaGFzaGVy
LCBrZXlEYXRhLm51bWJlcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbmRleGVkREI6
OktleVR5cGU6OkRhdGU6CisgICAgICAgIGFkZChoYXNoZXIsIGtleURhdGEuZGF0ZSgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OlN0cmluZzoKKyAgICAg
ICAgYWRkKGhhc2hlciwga2V5RGF0YS5zdHJpbmcoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgSW5kZXhlZERCOjpLZXlUeXBlOjpCaW5hcnk6CisgICAgICAgIGFkZChoYXNoZXIsIGtleURh
dGEuYmluYXJ5KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlw
ZTo6QXJyYXk6CisgICAgICAgIGFkZChoYXNoZXIsIGtleURhdGEuYXJyYXkoKSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKwogc3RydWN0IElEQktleURhdGFIYXNoIHsKLSAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBJREJLZXlEYXRhJiBhKSB7IHJldHVybiBhLmhhc2goKTsgfQor
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IElEQktleURhdGEmIGEpIHsgcmV0dXJuIGNv
bXB1dGVIYXNoKGEpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgSURCS2V5RGF0YSYg
YSwgY29uc3QgSURCS2V5RGF0YSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CiAgICAgc3RhdGljIGNv
bnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAK
aW5kZXggMTQzNTE0MGE1Y2I0YTFhMWQ0MDdhMmRiMjlkMTViZGYyZDUyYzBiNi4uY2U2M2M2YTU2
YjE0ZDViZTAzMjI1NzM3MjUzMjJiODJmMGRkZGQwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcApAQCAtMTI2LDE0ICsxMjYs
MTEgQEAgUmVmPERPTVN0cmluZ0xpc3Q+IElEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzKCkgY29u
c3QKIHsKICAgICBBU1NFUlQoY2FuQ3VycmVudFRocmVhZEFjY2Vzc1RocmVhZExvY2FsRGF0YSht
X3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkpKTsKIAotICAgIGF1dG8gaW5k
ZXhOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwotCi0gICAgaWYgKCFtX2RlbGV0ZWQp
IHsKLSAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogbV9pbmZvLmluZGV4TmFtZXMoKSkKLSAgICAg
ICAgICAgIGluZGV4TmFtZXMtPmFwcGVuZChuYW1lKTsKLSAgICAgICAgaW5kZXhOYW1lcy0+c29y
dCgpOwotICAgIH0KKyAgICBpZiAobV9kZWxldGVkKQorICAgICAgICByZXR1cm4gRE9NU3RyaW5n
TGlzdDo6Y3JlYXRlKCk7CiAKKyAgICBhdXRvIGluZGV4TmFtZXMgPSBET01TdHJpbmdMaXN0Ojpj
cmVhdGUobV9pbmZvLmluZGV4TmFtZXMoKSk7CisgICAgaW5kZXhOYW1lcy0+c29ydCgpOwogICAg
IHJldHVybiBpbmRleE5hbWVzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggNmMxMTIxYjczMTBmNzM3ZjdiOTVi
ZWNlZTg0NTRlNmFjNTBkZjJiNi4uMWI0YzhiOTcxYmU2NzMzZWYzNTZiMDlhZGQ5YjMyMGJlNDY5
NWU3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uLmNwcApAQCAtMTIxLDEyICsxMjEsOCBAQCBSZWY8RE9NU3RyaW5nTGlzdD4gSURC
VHJhbnNhY3Rpb246Om9iamVjdFN0b3JlTmFtZXMoKSBjb25zdAogewogICAgIEFTU0VSVChjYW5D
dXJyZW50VGhyZWFkQWNjZXNzVGhyZWFkTG9jYWxEYXRhKG1fZGF0YWJhc2UtPm9yaWdpblRocmVh
ZCgpKSk7CiAKLSAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiBuYW1lcyA9IGlzVmVyc2lvbkNoYW5n
ZSgpID8gbV9kYXRhYmFzZS0+aW5mbygpLm9iamVjdFN0b3JlTmFtZXMoKSA6IG1faW5mby5vYmpl
Y3RTdG9yZXMoKTsKLQotICAgIFJlZjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0g
RE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0gICAgZm9yIChhdXRvJiBuYW1lIDogbmFtZXMpCi0g
ICAgICAgIG9iamVjdFN0b3JlTmFtZXMtPmFwcGVuZChuYW1lKTsKLQorICAgIFZlY3RvcjxTdHJp
bmc+IG5hbWVzID0gaXNWZXJzaW9uQ2hhbmdlKCkgPyBtX2RhdGFiYXNlLT5pbmZvKCkub2JqZWN0
U3RvcmVOYW1lcygpIDogbV9pbmZvLm9iamVjdFN0b3JlcygpOworICAgIGF1dG8gb2JqZWN0U3Rv
cmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZShXVEZNb3ZlKG5hbWVzKSk7CiAgICAgb2Jq
ZWN0U3RvcmVOYW1lcy0+c29ydCgpOwogICAgIHJldHVybiBvYmplY3RTdG9yZU5hbWVzOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29u
dHJvbHNIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRp
YUNvbnRyb2xzSG9zdC5jcHAKaW5kZXggMTlhMDY5ZTIzYjM5ZGJiNGE3MDY1ZDhkZTc4ZDdlZTQ5
M2M2OTgxOC4uYjgyNWVjODAwNTE0ODAyOGUyYjA3YjE5ZGM3ODM5MmE0M2E4Y2JhNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNI
b3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFD
b250cm9sc0hvc3QuY3BwCkBAIC01NTUsMTEgKzU1NSwxMCBAQCBib29sIE1lZGlhQ29udHJvbHNI
b3N0OjpzaG93TWVkaWFDb250cm9sc0NvbnRleHRNZW51KEhUTUxFbGVtZW50JiB0YXJnZXQsIFN0
cmluZwogCiAgICAgaWYgKG9wdGlvbnNKU09OT2JqZWN0LT5nZXRCb29sZWFuKCJpbmNsdWRlTGFu
Z3VhZ2VzIl9zKS52YWx1ZV9vcihmYWxzZSkpIHsKICAgICAgICAgaWYgKGF1dG8qIGF1ZGlvVHJh
Y2tzID0gbWVkaWFFbGVtZW50LmF1ZGlvVHJhY2tzKCk7IGF1ZGlvVHJhY2tzICYmIGF1ZGlvVHJh
Y2tzLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgICAgIFZlY3RvcjxNZW51SXRlbT4gbGFuZ3Vh
Z2VNZW51SXRlbXM7Ci0KICAgICAgICAgICAgIGF1dG8mIGNhcHRpb25QcmVmZXJlbmNlcyA9IHBh
Z2UtPmdyb3VwKCkuZW5zdXJlQ2FwdGlvblByZWZlcmVuY2VzKCk7Ci0gICAgICAgICAgICBmb3Ig
KGF1dG8mIGF1ZGlvVHJhY2sgOiBjYXB0aW9uUHJlZmVyZW5jZXMuc29ydGVkVHJhY2tMaXN0Rm9y
TWVudShhdWRpb1RyYWNrcykpCi0gICAgICAgICAgICAgICAgbGFuZ3VhZ2VNZW51SXRlbXMuYXBw
ZW5kKGNyZWF0ZU1lbnVJdGVtKGF1ZGlvVHJhY2ssIGNhcHRpb25QcmVmZXJlbmNlcy5kaXNwbGF5
TmFtZUZvclRyYWNrKGF1ZGlvVHJhY2suZ2V0KCkpLCBhdWRpb1RyYWNrLT5lbmFibGVkKCkpKTsK
KyAgICAgICAgICAgIGF1dG8gbGFuZ3VhZ2VNZW51SXRlbXMgPSBjYXB0aW9uUHJlZmVyZW5jZXMu
c29ydGVkVHJhY2tMaXN0Rm9yTWVudShhdWRpb1RyYWNrcykubWFwKFsmXShhdXRvJiBhdWRpb1Ry
YWNrKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZU1lbnVJdGVtKGF1ZGlvVHJhY2ss
IGNhcHRpb25QcmVmZXJlbmNlcy5kaXNwbGF5TmFtZUZvclRyYWNrKGF1ZGlvVHJhY2suZ2V0KCkp
LCBhdWRpb1RyYWNrLT5lbmFibGVkKCkpOworICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAg
IGlmICghbGFuZ3VhZ2VNZW51SXRlbXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGl0ZW1z
LmFwcGVuZChjcmVhdGVTdWJtZW51KFdFQl9VSV9TVFJJTkdfS0VZKCJMYW5ndWFnZXMiLCAiTGFu
Z3VhZ2VzIChNZWRpYSBDb250cm9scyBNZW51KSIsICJMYW5ndWFnZXMgbWVkaWEgY29udHJvbHMg
Y29udGV4dCBtZW51IHRpdGxlIiksICJnbG9iZSJfcywgV1RGTW92ZShsYW5ndWFnZU1lbnVJdGVt
cykpKTsKQEAgLTU2OCwxNSArNTY3LDEzIEBAIGJvb2wgTWVkaWFDb250cm9sc0hvc3Q6OnNob3dN
ZWRpYUNvbnRyb2xzQ29udGV4dE1lbnUoSFRNTEVsZW1lbnQmIHRhcmdldCwgU3RyaW5nCiAKICAg
ICBpZiAob3B0aW9uc0pTT05PYmplY3QtPmdldEJvb2xlYW4oImluY2x1ZGVTdWJ0aXRsZXMiX3Mp
LnZhbHVlX29yKGZhbHNlKSkgewogICAgICAgICBpZiAoYXV0byogdGV4dFRyYWNrcyA9IG1lZGlh
RWxlbWVudC50ZXh0VHJhY2tzKCk7IHRleHRUcmFja3MgJiYgdGV4dFRyYWNrcy0+bGVuZ3RoKCkp
IHsKLSAgICAgICAgICAgIFZlY3RvcjxNZW51SXRlbT4gc3VidGl0bGVNZW51SXRlbXM7Ci0KICAg
ICAgICAgICAgIGF1dG8mIGNhcHRpb25QcmVmZXJlbmNlcyA9IHBhZ2UtPmdyb3VwKCkuZW5zdXJl
Q2FwdGlvblByZWZlcmVuY2VzKCk7CiAgICAgICAgICAgICBhdXRvIHNvcnRlZFRleHRUcmFja3Mg
PSBjYXB0aW9uUHJlZmVyZW5jZXMuc29ydGVkVHJhY2tMaXN0Rm9yTWVudSh0ZXh0VHJhY2tzLCB7
IFRleHRUcmFjazo6S2luZDo6U3VidGl0bGVzLCBUZXh0VHJhY2s6OktpbmQ6OkNhcHRpb25zLCBU
ZXh0VHJhY2s6OktpbmQ6OkRlc2NyaXB0aW9ucyB9KTsKICAgICAgICAgICAgIGJvb2wgYWxsVHJh
Y2tzRGlzYWJsZWQgPSBub3RGb3VuZCA9PSBzb3J0ZWRUZXh0VHJhY2tzLmZpbmRJZihbXSAoY29u
c3QgYXV0byYgdGV4dFRyYWNrKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHRUcmFjay0+
bW9kZSgpID09IFRleHRUcmFjazo6TW9kZTo6U2hvd2luZzsKICAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICAgYm9vbCB1c2VzQXV0b21hdGljVHJhY2sgPSBjYXB0aW9uUHJlZmVyZW5jZXMuY2Fw
dGlvbkRpc3BsYXlNb2RlKCkgPT0gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6QXV0b21hdGljICYm
IGFsbFRyYWNrc0Rpc2FibGVkOwotICAgICAgICAgICAgZm9yIChhdXRvJiB0ZXh0VHJhY2sgOiBz
b3J0ZWRUZXh0VHJhY2tzKSB7CisgICAgICAgICAgICBhdXRvIHN1YnRpdGxlTWVudUl0ZW1zID0g
c29ydGVkVGV4dFRyYWNrcy5tYXAoWyZdKGF1dG8mIHRleHRUcmFjaykgewogICAgICAgICAgICAg
ICAgIGJvb2wgY2hlY2tlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGlmIChhbGxUcmFja3NE
aXNhYmxlZCAmJiB0ZXh0VHJhY2sgPT0gJlRleHRUcmFjazo6Y2FwdGlvbk1lbnVPZmZJdGVtKCkg
JiYgKGNhcHRpb25QcmVmZXJlbmNlcy5jYXB0aW9uRGlzcGxheU1vZGUoKSA9PSBDYXB0aW9uVXNl
clByZWZlcmVuY2VzOjpGb3JjZWRPbmx5IHx8IGNhcHRpb25QcmVmZXJlbmNlcy5jYXB0aW9uRGlz
cGxheU1vZGUoKSA9PSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpNYW51YWwpKQogICAgICAgICAg
ICAgICAgICAgICBjaGVja2VkID0gdHJ1ZTsKQEAgLTU4NCw4ICs1ODEsOCBAQCBib29sIE1lZGlh
Q29udHJvbHNIb3N0OjpzaG93TWVkaWFDb250cm9sc0NvbnRleHRNZW51KEhUTUxFbGVtZW50JiB0
YXJnZXQsIFN0cmluZwogICAgICAgICAgICAgICAgICAgICBjaGVja2VkID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICBlbHNlIGlmICghdXNlc0F1dG9tYXRpY1RyYWNrICYmIHRleHRUcmFjay0+bW9k
ZSgpID09IFRleHRUcmFjazo6TW9kZTo6U2hvd2luZykKICAgICAgICAgICAgICAgICAgICAgY2hl
Y2tlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgc3VidGl0bGVNZW51SXRlbXMuYXBwZW5kKGNy
ZWF0ZU1lbnVJdGVtKHRleHRUcmFjaywgY2FwdGlvblByZWZlcmVuY2VzLmRpc3BsYXlOYW1lRm9y
VHJhY2sodGV4dFRyYWNrLmdldCgpKSwgY2hlY2tlZCkpOwotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHJldHVybiBjcmVhdGVNZW51SXRlbSh0ZXh0VHJhY2ssIGNhcHRpb25QcmVmZXJl
bmNlcy5kaXNwbGF5TmFtZUZvclRyYWNrKHRleHRUcmFjay5nZXQoKSksIGNoZWNrZWQpOworICAg
ICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIGlmICghc3VidGl0bGVNZW51SXRlbXMuaXNFbXB0
eSgpKQogICAgICAgICAgICAgICAgIGl0ZW1zLmFwcGVuZChjcmVhdGVTdWJtZW51KFdFQl9VSV9T
VFJJTkdfS0VZKCJTdWJ0aXRsZXMiLCAiU3VidGl0bGVzIChNZWRpYSBDb250cm9scyBNZW51KSIs
ICJTdWJ0aXRsZXMgbWVkaWEgY29udHJvbHMgY29udGV4dCBtZW51IHRpdGxlIiksICJjYXB0aW9u
cy5idWJibGUiX3MsIFdURk1vdmUoc3VidGl0bGVNZW51SXRlbXMpKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCmluZGV4IDkxMjc0
N2Y0MDZjMjk1OTQ5OTczYjViYjEzNDlkYmNhNjc0MWMxMzUuLmEyZTY1OGE5MmY5OTdkN2Y0YjQz
ZTE3MDNmNGEwZTA5NDkxN2IwZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCkBAIC0xMDUxLDEwICsxMDUxLDkgQEAgdm9pZCBN
ZWRpYVNvdXJjZTo6b25SZWFkeVN0YXRlQ2hhbmdlKFJlYWR5U3RhdGUgb2xkU3RhdGUsIFJlYWR5
U3RhdGUgbmV3U3RhdGUpCiAKIFZlY3RvcjxQbGF0Zm9ybVRpbWVSYW5nZXM+IE1lZGlhU291cmNl
OjphY3RpdmVSYW5nZXMoKSBjb25zdAogewotICAgIFZlY3RvcjxQbGF0Zm9ybVRpbWVSYW5nZXM+
IGFjdGl2ZVJhbmdlczsKLSAgICBmb3IgKGF1dG8mIHNvdXJjZUJ1ZmZlciA6ICptX2FjdGl2ZVNv
dXJjZUJ1ZmZlcnMpCi0gICAgICAgIGFjdGl2ZVJhbmdlcy5hcHBlbmQoc291cmNlQnVmZmVyLT5i
dWZmZXJlZEludGVybmFsKCkucmFuZ2VzKCkpOwotICAgIHJldHVybiBhY3RpdmVSYW5nZXM7Cisg
ICAgcmV0dXJuIFdURjo6bWFwKCptX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMsIFtdKGF1dG8mIHNvdXJj
ZUJ1ZmZlcikgeworICAgICAgICByZXR1cm4gc291cmNlQnVmZmVyLT5idWZmZXJlZEludGVybmFs
KCkucmFuZ2VzKCk7CisgICAgfSk7CiB9CiAKIEV4Y2VwdGlvbk9yPFJlZjxTb3VyY2VCdWZmZXJQ
cml2YXRlPj4gTWVkaWFTb3VyY2U6OmNyZWF0ZVNvdXJjZUJ1ZmZlclByaXZhdGUoY29uc3QgQ29u
dGVudFR5cGUmIGluY29taW5nVHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c291cmNlL1NhbXBsZU1hcC5oCmluZGV4IGVhZjQ5MzE1OTdkMjY4NTIzYzY2N2JkOWNkY2M0Y2Vh
NjU0MzM2OTUuLmFmMWUxMDQ1ODE3ODdmMTVmNmYxZjM4NWIyNTcyNDQ0ZDg4NTk1ZmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9TYW1wbGVNYXAuaApAQCAtOTEs
NiArOTEsNyBAQCBwdWJsaWM6CiAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBj
b25zdCB7IHJldHVybiBtX3NhbXBsZXMucmJlZ2luKCk7IH0KICAgICByZXZlcnNlX2l0ZXJhdG9y
IHJlbmQoKSB7IHJldHVybiBtX3NhbXBsZXMucmVuZCgpOyB9CiAgICAgY29uc3RfcmV2ZXJzZV9p
dGVyYXRvciByZW5kKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVzLnJlbmQoKTsgfQorICAgIHNp
emVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVzLnNpemUoKTsgfQogCiAgICAgV0VC
Q09SRV9FWFBPUlQgaXRlcmF0b3IgZmluZFNhbXBsZVdpdGhEZWNvZGVLZXkoY29uc3QgS2V5VHlw
ZSYpOwogICAgIFdFQkNPUkVfRVhQT1JUIGl0ZXJhdG9yIGZpbmRTYW1wbGVBZnRlckRlY29kZUtl
eShjb25zdCBLZXlUeXBlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzb3VyY2UvU291cmNlQnVmZmVyTGlzdC5oCmluZGV4IGZjNmUwNzNhYjkwZTc2ZDE4MTVmODg5
NmI2ZjY2MDk2ZGYyZmRkZDUuLjQzNmJmMDE3YmM4MWFjZmI5NGY1ZTg1YjkwZjkxY2Y0NWJiZWJk
M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNl
QnVmZmVyTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291
cmNlQnVmZmVyTGlzdC5oCkBAIC00OCw2ICs0OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5T
b3VyY2VCdWZmZXJMaXN0KCk7CiAKICAgICB1bnNpZ25lZCBsb25nIGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KKwogICAgIFNvdXJjZUJ1ZmZlciogaXRlbSh1bnNpZ25l
ZCBsb25nIGluZGV4KSBjb25zdCB7IHJldHVybiAoaW5kZXggPCBtX2xpc3Quc2l6ZSgpKSA/IG1f
bGlzdFtpbmRleF0uZ2V0KCkgOiBudWxscHRyOyB9CiAKICAgICB2b2lkIGFkZChSZWY8U291cmNl
QnVmZmVyPiYmKTsKQEAgLTU4LDYgKzU5LDkgQEAgcHVibGljOgogCiAgICAgVmVjdG9yPFJlZlB0
cjxTb3VyY2VCdWZmZXI+Pjo6aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX2xpc3QuYmVnaW4o
KTsgfQogICAgIFZlY3RvcjxSZWZQdHI8U291cmNlQnVmZmVyPj46Oml0ZXJhdG9yIGVuZCgpIHsg
cmV0dXJuIG1fbGlzdC5lbmQoKTsgfQorICAgIFZlY3RvcjxSZWZQdHI8U291cmNlQnVmZmVyPj46
OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LmJlZ2luKCk7IH0K
KyAgICBWZWN0b3I8UmVmUHRyPFNvdXJjZUJ1ZmZlcj4+Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBj
b25zdCB7IHJldHVybiBtX2xpc3QuZW5kKCk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KIAogICAgIC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQog
ICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gU291cmNlQnVmZmVyTGlzdEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5jcHAK
aW5kZXggZWFmM2EyZTFlNzk4YTQ4MWY3NjhiMzNjNWZkMjlkM2M3Y2JhYjNhZS4uODJjMWEzYTBj
MDcyNTVjMWU4MGRhNjFkNTkwYmE5Yzk0MWNjMDY5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuY3BwCkBAIC05Myw5ICs5MywxMCBAQCBj
b25zdCBWZWN0b3I8UmVmPFNwZWVjaFN5bnRoZXNpc1ZvaWNlPj4mIFNwZWVjaFN5bnRoZXNpczo6
Z2V0Vm9pY2VzKCkKICAgICAgICAgcmV0dXJuIG1fdm9pY2VMaXN0OwogCiAgICAgLy8gSWYgdGhl
IHZvaWNlTGlzdCBpcyBlbXB0eSwgdGhhdCdzIHRoZSBjdWUgdG8gZ2V0IHRoZSB2b2ljZXMgZnJv
bSB0aGUgcGxhdGZvcm0gYWdhaW4uCi0gICAgZm9yIChhdXRvJiB2b2ljZSA6IG1fc3BlZWNoU3lu
dGhlc2lzQ2xpZW50ID8gbV9zcGVlY2hTeW50aGVzaXNDbGllbnQtPnZvaWNlTGlzdCgpIDogZW5z
dXJlUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcigpLnZvaWNlTGlzdCgpKQotICAgICAgICBtX3Zv
aWNlTGlzdC5hcHBlbmQoU3BlZWNoU3ludGhlc2lzVm9pY2U6OmNyZWF0ZSgqdm9pY2UpKTsKLQor
ICAgIGF1dG8mIHZvaWNlTGlzdCA9IG1fc3BlZWNoU3ludGhlc2lzQ2xpZW50ID8gbV9zcGVlY2hT
eW50aGVzaXNDbGllbnQtPnZvaWNlTGlzdCgpIDogZW5zdXJlUGxhdGZvcm1TcGVlY2hTeW50aGVz
aXplcigpLnZvaWNlTGlzdCgpOworICAgIG1fdm9pY2VMaXN0ID0gdm9pY2VMaXN0Lm1hcChbXShh
dXRvJiB2b2ljZSkgeworICAgICAgICByZXR1cm4gU3BlZWNoU3ludGhlc2lzVm9pY2U6OmNyZWF0
ZSgqdm9pY2UpOworICAgIH0pOwogICAgIHJldHVybiBtX3ZvaWNlTGlzdDsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2du
aXplclRhc2subW0gYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVl
Y2hSZWNvZ25pemVyVGFzay5tbQppbmRleCBmMWI5Njk1ODA1N2QyZmU2MDQ0ZDJjN2IyNTlkYjZj
NWNlYjQ0ZWZlLi5hNWU4NWFmODI5YmMwZGRkZWY2MmM2MWE0ZjZjOWYyY2YyYWQ2Y2Y0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNv
Z25pemVyVGFzay5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9jb2NvYS9X
ZWJTcGVlY2hSZWNvZ25pemVyVGFzay5tbQpAQCAtMTI4LDkgKzEyOCw4IEBAIC0gKHZvaWQpY2Fs
bGJhY2tXaXRoVHJhbnNjcmlwdGlvbnM6KE5TQXJyYXk8U0ZUcmFuc2NyaXB0aW9uICo+ICopdHJh
bnNjcmlwdGlvbnMKICAgICAgICAgaWYgKGFsdGVybmF0aXZlcy5zaXplKCkgPT0gX21heEFsdGVy
bmF0aXZlcykKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBWZWN0b3I8U3BlZWNoUmVj
b2duaXRpb25SZXN1bHREYXRhPiBkYXRhczsKLSAgICBkYXRhcy5hcHBlbmQoU3BlZWNoUmVjb2du
aXRpb25SZXN1bHREYXRhIHsgV1RGTW92ZShhbHRlcm5hdGl2ZXMpLCBib29sKGlzRmluYWwpIH0p
OwotICAgIF9kZWxlZ2F0ZUNhbGxiYWNrKFNwZWVjaFJlY29nbml0aW9uVXBkYXRlOjpjcmVhdGVS
ZXN1bHQoX2lkZW50aWZpZXIsIFdURk1vdmUoZGF0YXMpKSk7CisgICAgU3BlZWNoUmVjb2duaXRp
b25SZXN1bHREYXRhIGRhdGEgeyBXVEZNb3ZlKGFsdGVybmF0aXZlcyksICEhaXNGaW5hbCB9Owor
ICAgIF9kZWxlZ2F0ZUNhbGxiYWNrKFNwZWVjaFJlY29nbml0aW9uVXBkYXRlOjpjcmVhdGVSZXN1
bHQoX2lkZW50aWZpZXIsIHsgV1RGTW92ZShkYXRhKSB9KSk7CiB9CiAKIC0gKHZvaWQpYXVkaW9T
YW1wbGVzQXZhaWxhYmxlOihDTVNhbXBsZUJ1ZmZlclJlZilzYW1wbGVCdWZmZXIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6
ZXJUYXNrTW9jay5tbSBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL2NvY29hL1dlYlNw
ZWVjaFJlY29nbml6ZXJUYXNrTW9jay5tbQppbmRleCBiYzVjNjIxOWI1ZGFkYzNiMWNkYzU5MGQ2
NWM4OTdiNzI1MGIxZTIxLi45NjNmYjQ3YzRjODVhYTA2MDVhMmRhYmM3MTllNTY3NGMyNjBhYmY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVl
Y2hSZWNvZ25pemVyVGFza01vY2subW0KKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVl
Y2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2tNb2NrLm1tCkBAIC02MywxMSArNjMsOSBA
QCAtICh2b2lkKWF1ZGlvU2FtcGxlc0F2YWlsYWJsZTooQ01TYW1wbGVCdWZmZXJSZWYpc2FtcGxl
QnVmZmVyCiAgICAgfQogCiAgICAgLy8gRmFrZSBzb21lIHJlY29nbml0aW9uIHJlc3VsdHMuCi0g
ICAgVmVjdG9yPFNwZWVjaFJlY29nbml0aW9uQWx0ZXJuYXRpdmVEYXRhPiBhbHRlcm5hdGl2ZXM7
Ci0gICAgYWx0ZXJuYXRpdmVzLmFwcGVuZChTcGVlY2hSZWNvZ25pdGlvbkFsdGVybmF0aXZlRGF0
YSB7ICJUZXN0IiwgMS4wIH0pOwotICAgIFZlY3RvcjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdERh
dGE+IGRhdGFzOwotICAgIGRhdGFzLmFwcGVuZChTcGVlY2hSZWNvZ25pdGlvblJlc3VsdERhdGEg
eyBXVEZNb3ZlKGFsdGVybmF0aXZlcyksIHRydWUgIH0pOwotICAgIF9kZWxlZ2F0ZUNhbGxiYWNr
KFNwZWVjaFJlY29nbml0aW9uVXBkYXRlOjpjcmVhdGVSZXN1bHQoX2lkZW50aWZpZXIsIFdURk1v
dmUoZGF0YXMpKSk7CisgICAgU3BlZWNoUmVjb2duaXRpb25BbHRlcm5hdGl2ZURhdGEgYWx0ZXJu
YXRpdmUgeyAiVGVzdCIsIDEuMCB9OworICAgIFNwZWVjaFJlY29nbml0aW9uUmVzdWx0RGF0YSBk
YXRhIHsgeyBXVEZNb3ZlKGFsdGVybmF0aXZlKSB9LCB0cnVlIH07CisgICAgX2RlbGVnYXRlQ2Fs
bGJhY2soU3BlZWNoUmVjb2duaXRpb25VcGRhdGU6OmNyZWF0ZVJlc3VsdChfaWRlbnRpZmllciwg
eyBXVEZNb3ZlKGRhdGEpIH0pKTsKIAogICAgIGlmICghX2RvTXVsdGlwbGVSZWNvZ25pdGlvbnMp
CiAgICAgICAgIFtzZWxmIGFib3J0XTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1h
dGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24v
Q1NTUHJvcGVydHlBbmltYXRpb24uY3BwCmluZGV4IGUzNTlhMDQzYjJlM2NmMzlmOWMyNmJjNTll
OThmMTA1ZTEzMmMxMDUuLjhiY2U2NjcwNjZhM2Y3NzZmMGVhYmE5NjZiODFhNzQ2YTk3NWUzMjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9u
LmNwcApAQCAtMTY0LDEwICsxNjQsOCBAQCBzdGF0aWMgaW5saW5lIFRyYW5zZm9ybU9wZXJhdGlv
bnMgYmxlbmRGdW5jKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGNvbgogICAgIGlm
IChjb250ZXh0LmNvbXBvc2l0ZU9wZXJhdGlvbiA9PSBDb21wb3NpdGVPcGVyYXRpb246OkFkZCkg
ewogICAgICAgICBBU1NFUlQoY29udGV4dC5wcm9ncmVzcyA9PSAxLjApOwogICAgICAgICBUcmFu
c2Zvcm1PcGVyYXRpb25zIHJlc3VsdE9wZXJhdGlvbnM7Ci0gICAgICAgIGZvciAoYXV0byBvcGVy
YXRpb24gOiBmcm9tLm9wZXJhdGlvbnMoKSkKLSAgICAgICAgICAgIHJlc3VsdE9wZXJhdGlvbnMu
b3BlcmF0aW9ucygpLmFwcGVuZChvcGVyYXRpb24pOwotICAgICAgICBmb3IgKGF1dG8gb3BlcmF0
aW9uIDogdG8ub3BlcmF0aW9ucygpKQotICAgICAgICAgICAgcmVzdWx0T3BlcmF0aW9ucy5vcGVy
YXRpb25zKCkuYXBwZW5kKG9wZXJhdGlvbik7CisgICAgICAgIHJlc3VsdE9wZXJhdGlvbnMub3Bl
cmF0aW9ucygpLmFwcGVuZFZlY3Rvcihmcm9tLm9wZXJhdGlvbnMoKSk7CisgICAgICAgIHJlc3Vs
dE9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZFZlY3Rvcih0by5vcGVyYXRpb25zKCkpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0T3BlcmF0aW9uczsKICAgICB9CiAgICAgYXV0byBib3hTaXpl
ID0gaXM8UmVuZGVyQm94Pihjb250ZXh0LmNsaWVudC0+cmVuZGVyZXIoKSkgPyBkb3duY2FzdDxS
ZW5kZXJCb3g+KCpjb250ZXh0LmNsaWVudC0+cmVuZGVyZXIoKSkuYm9yZGVyQm94UmVjdCgpLnNp
emUoKSA6IExheW91dFNpemUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9Eb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0
aW9uL0RvY3VtZW50VGltZWxpbmVzQ29udHJvbGxlci5jcHAKaW5kZXggYjVmZDJhZWYxMDAwMTJk
YTljNGJkYjIxZTdhZDA0MWEzNjY0MTZiZi4uNzA5NDUzYmM2NjI1MmY5NTk4MjRiYTk0ZWNhN2Ez
MzAwOGM5Y2EzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50
VGltZWxpbmVzQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0Rv
Y3VtZW50VGltZWxpbmVzQ29udHJvbGxlci5jcHAKQEAgLTk4LDkgKzk4LDcgQEAgdm9pZCBEb2N1
bWVudFRpbWVsaW5lc0NvbnRyb2xsZXI6OnVwZGF0ZUFuaW1hdGlvbnNBbmRTZW5kRXZlbnRzKFJl
ZHVjZWRSZXNvbHV0aW8KICAgICBBU1NFUlQoIW1fdGltZWxpbmVzLmhhc051bGxSZWZlcmVuY2Vz
KCkpOwogCiAgICAgLy8gV2UgbmVlZCB0byBjb3B5IG1fdGltZWxpbmVzIGJlZm9yZSBpdGVyYXRp
bmcgb3ZlciBpdHMgbWVtYmVycyBzaW5jZSB0aGUgc3RlcHMgaW4gdGhpcyBwcm9jZWR1cmUgbWF5
IG11dGF0ZSBtX3RpbWVsaW5lcy4KLSAgICBWZWN0b3I8UmVmPERvY3VtZW50VGltZWxpbmU+PiBw
cm90ZWN0ZWRUaW1lbGluZXM7Ci0gICAgZm9yIChhdXRvJiB0aW1lbGluZSA6IG1fdGltZWxpbmVz
KQotICAgICAgICBwcm90ZWN0ZWRUaW1lbGluZXMuYXBwZW5kKHRpbWVsaW5lKTsKKyAgICBhdXRv
IHByb3RlY3RlZFRpbWVsaW5lcyA9IGNvcHlUb1ZlY3Rvck9mPFJlZjxEb2N1bWVudFRpbWVsaW5l
Pj4obV90aW1lbGluZXMpOwogCiAgICAgLy8gV2UgbmVlZCB0byBmcmVlemUgdGhlIGN1cnJlbnQg
dGltZSBldmVuIGlmIG5vIGFuaW1hdGlvbiBpcyBydW5uaW5nLgogICAgIC8vIGRvY3VtZW50LnRp
bWVsaW5lLmN1cnJlbnRUaW1lIG1heSBiZSBjYWxsZWQgZnJvbSBhIHJBRiBjYWxsYmFjayBhbmQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwCmluZGV4IDQ0NDRj
Y2QwODdhZTQ4MDQ4MGM1ODlmZjRkNjg4ZTNmYzdjMWEyNmEuLjNkMDkxZWVlNTM4NzQ0MjAzZjcz
OGI4NmMwNzY3NjU3ZjRlY2YwOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9LZXlmcmFtZUVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZy
YW1lRWZmZWN0LmNwcApAQCAtMzc1LDggKzM3NSw3IEBAIHN0YXRpYyBpbmxpbmUgRXhjZXB0aW9u
T3I8dm9pZD4gcHJvY2Vzc1Byb3BlcnR5SW5kZXhlZEtleWZyYW1lcyhKU0dsb2JhbE9iamVjdCYK
ICAgICAgICAgY29tcHV0ZU1pc3NpbmdLZXlmcmFtZU9mZnNldHMocHJvcGVydHlLZXlmcmFtZXMp
OwogCiAgICAgICAgIC8vIDcuIEFkZCBrZXlmcmFtZXMgaW4gcHJvcGVydHkga2V5ZnJhbWVzIHRv
IHByb2Nlc3NlZCBrZXlmcmFtZXMuCi0gICAgICAgIGZvciAoYXV0byYga2V5ZnJhbWUgOiBwcm9w
ZXJ0eUtleWZyYW1lcykKLSAgICAgICAgICAgIHBhcnNlZEtleWZyYW1lcy5hcHBlbmQoV1RGTW92
ZShrZXlmcmFtZSkpOworICAgICAgICBwYXJzZWRLZXlmcmFtZXMuYXBwZW5kVmVjdG9yKHByb3Bl
cnR5S2V5ZnJhbWVzKTsKICAgICB9CiAKICAgICAvLyAzLiBTb3J0IHByb2Nlc3NlZCBrZXlmcmFt
ZXMgYnkgdGhlIGNvbXB1dGVkIGtleWZyYW1lIG9mZnNldCBvZiBlYWNoIGtleWZyYW1lIGluIGlu
Y3JlYXNpbmcgb3JkZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0NvbnRlbnRFeHRlbnNpb24uY3BwCmluZGV4IDUzNDllZjM4ZmU2OTA2NGRkNDUzZmQ2OGQ3
ZGM2YThlZTc3M2Q5ZWMuLmMwNWNkODk0MTVmZjQxMjA0ZTNjM2M4Yzc3M2Y0OGQxMTM2M2MwOTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRl
bnNpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRF
eHRlbnNpb24uY3BwCkBAIC00Niw4ICs0Niw3IEBAIENvbnRlbnRFeHRlbnNpb246OkNvbnRlbnRF
eHRlbnNpb24oY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZWY8Q29tcGlsZWRDb250ZW50CiAg
ICAgLCBtX2V4dGVuc2lvbkJhc2VVUkwoV1RGTW92ZShleHRlbnNpb25CYXNlVVJMKSkKIHsKICAg
ICBERkFCeXRlY29kZUludGVycHJldGVyIGludGVycHJldGVyKG1fY29tcGlsZWRFeHRlbnNpb24t
PnVybEZpbHRlcnNCeXRlY29kZSgpKTsKLSAgICBmb3IgKHVpbnQ2NF90IGFjdGlvbiA6IGludGVy
cHJldGVyLmFjdGlvbnNNYXRjaGluZ0V2ZXJ5dGhpbmcoKSkKLSAgICAgICAgbV91bml2ZXJzYWxB
Y3Rpb25zLmFwcGVuZChhY3Rpb24pOworICAgIG1fdW5pdmVyc2FsQWN0aW9ucyA9IGNvcHlUb1Zl
Y3RvcihpbnRlcnByZXRlci5hY3Rpb25zTWF0Y2hpbmdFdmVyeXRoaW5nKCkpOwogCiAgICAgaWYg
KHNob3VsZENvbXBpbGVDU1MgPT0gU2hvdWxkQ29tcGlsZUNTUzo6WWVzKQogICAgICAgICBjb21w
aWxlR2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTVmFsdWVMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0
LmgKaW5kZXggYmIxMjczYTVmZDNlZThlNjg4MGJhNzY3YWY5MjkxN2ViZGRhNzQ4Zi4uZjlhNzYw
NjA0MDg5YjBjZTJmNjlmODc2ODY1NGYxMjY4MjM3YTY3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1
ZUxpc3QuaApAQCAtNTgsNiArNTgsNyBAQCBwdWJsaWM6CiAgICAgY29uc3RfaXRlcmF0b3IgZW5k
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuZW5kKCk7IH0KICAgICBpdGVyYXRvciBiZWdpbigp
IHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KICAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVy
biBtX3ZhbHVlcy5lbmQoKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZXMuc2l6ZSgpOyB9CiAKICAgICB2b2lkIGFwcGVuZChSZWY8Q1NTVmFsdWU+JiYpOwogICAg
IHZvaWQgcHJlcGVuZChSZWY8Q1NTVmFsdWU+JiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwCmluZGV4IDZhYjVjYjY3NGQ0MTUzZDgyMjUy
ZjI1ODdlZTQ2ZmNmNWFhYzhjNGEuLjc5ZjJhODgyNjBjZWFlZjBkNTgwMTU3NjYxMzljMDc1NzY2
N2MwMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRp
b25Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9u
Tm9kZS5jcHAKQEAgLTYyMCwxNCArNjIwLDExIEBAIHZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6
OmhvaXN0Q2hpbGRyZW5XaXRoT3BlcmF0b3IoQ2FsY09wZXJhdG9yIG9wKQogCiAgICAgVmVjdG9y
PFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBuZXdDaGlsZHJlbjsKICAgICBmb3IgKGF1dG8m
IGNoaWxkIDogbV9jaGlsZHJlbikgewotICAgICAgICBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5v
ZGU+KGNoaWxkKSAmJiBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkp
LmNhbGNPcGVyYXRvcigpID09IG9wKSB7Ci0gICAgICAgICAgICBhdXRvJiBjaGlsZHJlbiA9IGRv
d25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZC5nZXQoKSkuY2hpbGRyZW4oKTsKLSAg
ICAgICAgICAgIGZvciAoYXV0byYgY2hpbGRUb01vdmUgOiBjaGlsZHJlbikKLSAgICAgICAgICAg
ICAgICBuZXdDaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShjaGlsZFRvTW92ZSkpOwotICAgICAgICB9
IGVsc2UKKyAgICAgICAgaWYgKGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZCkgJiYgZG93
bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKS5jYWxjT3BlcmF0b3IoKSA9
PSBvcCkKKyAgICAgICAgICAgIG5ld0NoaWxkcmVuLmFwcGVuZFZlY3Rvcihkb3duY2FzdDxDU1ND
YWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpLmNoaWxkcmVuKCkpOworICAgICAgICBlbHNl
CiAgICAgICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShjaGlsZCkpOwogICAgIH0K
LSAgICAKICAgICBuZXdDaGlsZHJlbi5zaHJpbmtUb0ZpdCgpOwogICAgIG1fY2hpbGRyZW4gPSBX
VEZNb3ZlKG5ld0NoaWxkcmVuKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
T01TdHJpbmdMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NU3RyaW5nTGlzdC5oCmluZGV4
IDY5Y2IyZDdmOTMyZTAwYTI2NWUwOGQ4ZmYzYjFjYjUwYzEyNzdjZTUuLjI4NzNjZmNmY2JlYzNk
ODZjZjI3NTI4NmE3YmQ5MjIyNzc3NjVjMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9ET01TdHJpbmdMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTVN0cmluZ0xpc3Qu
aApAQCAtNDAsOSArNDAsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBET01TdHJpbmdMaXN0KTsKICAgICB9CiAKKyAgICBzdGF0aWMgUmVmPERPTVN0cmluZ0xpc3Q+
IGNyZWF0ZShWZWN0b3I8U3RyaW5nPiYmIHN0cmluZ3MpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBET01TdHJpbmdMaXN0KFdURk1vdmUoc3RyaW5ncykpKTsKKyAgICB9CisK
ICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZ3MuaXNFbXB0eSgpOyB9
CiAgICAgdm9pZCBjbGVhcigpIHsgbV9zdHJpbmdzLmNsZWFyKCk7IH0KICAgICB2b2lkIGFwcGVu
ZChjb25zdCBTdHJpbmcmIHN0cmluZykgeyBtX3N0cmluZ3MuYXBwZW5kKHN0cmluZyk7IH0KKyAg
ICB2b2lkIGFwcGVuZChTdHJpbmcmJiBzdHJpbmcpIHsgbV9zdHJpbmdzLmFwcGVuZChXVEZNb3Zl
KHN0cmluZykpOyB9CiAgICAgdm9pZCBzb3J0KCk7CiAKICAgICAvLyBJbXBsZW1lbnRzIHRoZSBJ
REwuCkBAIC01Myw3ICs1OSwxMCBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgY29uc3QgVmVjdG9y
PFN0cmluZz4mKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmdzOyB9CiAKIHByaXZhdGU6Ci0gICAg
RE9NU3RyaW5nTGlzdCgpIHsgfQorICAgIERPTVN0cmluZ0xpc3QoKSA9IGRlZmF1bHQ7CisgICAg
ZXhwbGljaXQgRE9NU3RyaW5nTGlzdChWZWN0b3I8U3RyaW5nPiYmIHN0cmluZ3MpCisgICAgICAg
IDogbV9zdHJpbmdzKFdURk1vdmUoc3RyaW5ncykpCisgICAgeyB9CiAKICAgICBWZWN0b3I8U3Ry
aW5nPiBtX3N0cmluZ3M7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
UGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRQYXRoLmNwcAppbmRleCA0NmZiNjQ1
ZTA1MzM3NTgxZjlmYTM0NTIzMDNhMmZlMzgwZjQ2YzA2Li5lY2JjYzAwZjM2ZjA3NmUzMjBiNmFk
MTZhZDFkOWEwYmYwMzhlMjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRQ
YXRoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRQYXRoLmNwcApAQCAtMjc0LDEx
ICsyNzQsMTEgQEAgVmVjdG9yPEV2ZW50VGFyZ2V0Kj4gRXZlbnRQYXRoOjpjb21wdXRlUGF0aFVu
Y2xvc2VkVG9UYXJnZXQoY29uc3QgRXZlbnRUYXJnZXQmIHQKIAogRXZlbnRQYXRoOjpFdmVudFBh
dGgoY29uc3QgVmVjdG9yPEV2ZW50VGFyZ2V0Kj4mIHRhcmdldHMpCiB7Ci0gICAgZm9yIChhdXRv
KiB0YXJnZXQgOiB0YXJnZXRzKSB7CisgICAgbV9wYXRoID0gdGFyZ2V0cy5tYXAoWyZdKGF1dG8q
IHRhcmdldCkgewogICAgICAgICBBU1NFUlQodGFyZ2V0KTsKICAgICAgICAgQVNTRVJUKCFpczxO
b2RlPih0YXJnZXQpKTsKLSAgICAgICAgbV9wYXRoLmFwcGVuZChFdmVudENvbnRleHQgeyBFdmVu
dENvbnRleHQ6OlR5cGU6Ok5vcm1hbCwgbnVsbHB0ciwgdGFyZ2V0LCAqdGFyZ2V0cy5iZWdpbigp
LCAwIH0pOwotICAgIH0KKyAgICAgICAgcmV0dXJuIEV2ZW50Q29udGV4dCB7IEV2ZW50Q29udGV4
dDo6VHlwZTo6Tm9ybWFsLCBudWxscHRyLCB0YXJnZXQsICp0YXJnZXRzLmJlZ2luKCksIDAgfTsK
KyAgICB9KTsKIH0KIAogc3RhdGljIE5vZGUqIG1vdmVPdXRPZkFsbFNoYWRvd1Jvb3RzKE5vZGUm
IHN0YXJ0aW5nTm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9GdWxsc2NyZWVu
TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRnVsbHNjcmVlbk1hbmFnZXIuY3BwCmlu
ZGV4IGVjZTQ4ZTQyNjc5NzA5NWRhNzA5YTA0ZGE2ODZhNGZlMGJjMjkyOGMuLjhlMWIyNmNhZjA0
MTgwMzkwNzkwOGJkNzZlZjEyOWI4OGZmMjVlNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9GdWxsc2NyZWVuTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Z1bGxz
Y3JlZW5NYW5hZ2VyLmNwcApAQCAtMjY1LDkgKzI2NSw4IEBAIHZvaWQgRnVsbHNjcmVlbk1hbmFn
ZXI6OmNhbmNlbEZ1bGxzY3JlZW4oKQogCiAgICAgLy8gVG8gYWNoaWV2ZSB0aGF0IGFpbSwgcmVt
b3ZlIGFsbCB0aGUgZWxlbWVudHMgZnJvbSB0aGUgdG9wIGRvY3VtZW50J3Mgc3RhY2sgZXhjZXB0
IGZvciB0aGUgZmlyc3QgYmVmb3JlCiAgICAgLy8gY2FsbGluZyB3ZWJraXRFeGl0RnVsbHNjcmVl
bigpOgotICAgIFZlY3RvcjxSZWZQdHI8RWxlbWVudD4+IHJlcGxhY2VtZW50RnVsbHNjcmVlbkVs
ZW1lbnRTdGFjazsKLSAgICByZXBsYWNlbWVudEZ1bGxzY3JlZW5FbGVtZW50U3RhY2suYXBwZW5k
KHRvcERvY3VtZW50LmZ1bGxzY3JlZW5NYW5hZ2VyKCkuZnVsbHNjcmVlbkVsZW1lbnQoKSk7Ci0g
ICAgdG9wRG9jdW1lbnQuZnVsbHNjcmVlbk1hbmFnZXIoKS5tX2Z1bGxzY3JlZW5FbGVtZW50U3Rh
Y2suc3dhcChyZXBsYWNlbWVudEZ1bGxzY3JlZW5FbGVtZW50U3RhY2spOworICAgIFJlZlB0ciBm
dWxsc2NyZW5FbGVtZW50ID0gdG9wRG9jdW1lbnQuZnVsbHNjcmVlbk1hbmFnZXIoKS5mdWxsc2Ny
ZWVuRWxlbWVudCgpOworICAgIHRvcERvY3VtZW50LmZ1bGxzY3JlZW5NYW5hZ2VyKCkubV9mdWxs
c2NyZWVuRWxlbWVudFN0YWNrID0gVmVjdG9yIHsgV1RGTW92ZShmdWxsc2NyZW5FbGVtZW50KSB9
OwogCiAgICAgdG9wRG9jdW1lbnQuZnVsbHNjcmVlbk1hbmFnZXIoKS5leGl0RnVsbHNjcmVlbigp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0xvYWRhYmxlU2NyaXB0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJsZVNjcmlwdC5jcHAKaW5kZXggMWJkZGUxZWI1ZDZh
MDdmMTE3Mzg5Yjk5Yzc1ZWNiMDFiNjBmODgwOS4uNDFmNDNjZTY2ODUwMzBlZDlkMzlkZjA1Yjlm
YzkyM2IxMjM5NWRlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0xvYWRhYmxlU2Ny
aXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTG9hZGFibGVTY3JpcHQuY3BwCkBAIC01
MSwxMiArNTEsOCBAQCB2b2lkIExvYWRhYmxlU2NyaXB0OjpyZW1vdmVDbGllbnQoTG9hZGFibGVT
Y3JpcHRDbGllbnQmIGNsaWVudCkKIAogdm9pZCBMb2FkYWJsZVNjcmlwdDo6bm90aWZ5Q2xpZW50
RmluaXNoZWQoKQogewotICAgIFJlZlB0cjxMb2FkYWJsZVNjcmlwdD4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKLQotICAgIFZlY3RvcjxMb2FkYWJsZVNjcmlwdENsaWVudCo+IHZlY3RvcjsKLSAgICBm
b3IgKGF1dG8mIHBhaXIgOiBtX2NsaWVudHMpCi0gICAgICAgIHZlY3Rvci5hcHBlbmQocGFpci5r
ZXkpOwotICAgIGZvciAoYXV0byYgY2xpZW50IDogdmVjdG9yKQorICAgIFJlZiBwcm90ZWN0ZWRU
aGlzIHsgKnRoaXMgfTsKKyAgICBmb3IgKGF1dG8mIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2Ns
aWVudHMudmFsdWVzKCkpKQogICAgICAgICBjbGllbnQtPm5vdGlmeUZpbmlzaGVkKCp0aGlzKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5jcHAKaW5kZXggNTBmNDYz
MGY4OWVjODk1ZGYxY2U1YWI4ZWQ1ODE4OWI3YWZiZjY2Mi4uMTIyNjNlMjU2ZWU1NmE0NTJjMzIy
ODEyNWNhZGQ1ZjE3MGY0NWYwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlv
QnV0dG9uR3JvdXBzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91
cHMuY3BwCkBAIC01OSw5ICs1OSw3IEBAIGlubGluZSBib29sIFJhZGlvQnV0dG9uR3JvdXA6Omlz
VmFsaWQoKSBjb25zdAogCiBWZWN0b3I8UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PiBSYWRpb0J1dHRv
bkdyb3VwOjptZW1iZXJzKCkgY29uc3QKIHsKLSAgICBWZWN0b3I8UmVmPEhUTUxJbnB1dEVsZW1l
bnQ+PiBzb3J0ZWRNZW1iZXJzOwotICAgIGZvciAoYXV0byYgbWVtYmVyIDogbV9tZW1iZXJzKQot
ICAgICAgICBzb3J0ZWRNZW1iZXJzLmFwcGVuZChtZW1iZXIpOworICAgIGF1dG8gc29ydGVkTWVt
YmVycyA9IGNvcHlUb1ZlY3Rvck9mPFJlZjxIVE1MSW5wdXRFbGVtZW50Pj4obV9tZW1iZXJzKTsK
ICAgICBzdGQ6OnNvcnQoc29ydGVkTWVtYmVycy5iZWdpbigpLCBzb3J0ZWRNZW1iZXJzLmVuZCgp
LCBbXShhdXRvJiBhLCBhdXRvJiBiKSB7CiAgICAgICAgIHJldHVybiBpc19sdCh0cmVlT3JkZXI8
Q29tcG9zZWRUcmVlPihhLCBiKSk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0RpcmVjdG9yeUZpbGVMaXN0Q3JlYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0RpcmVjdG9yeUZpbGVMaXN0Q3JlYXRvci5jcHAKaW5kZXggOWQzZGExODUzYzNhNjMyMGZlYjMx
OTc1MTYyZTQzNWFlOTNmZmRkMS4uOTg1ZjdhNjJmMGMxZjM5NzU1ODJlYjNmOWI5ODk3NTE1NjE1
NjY3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9EaXJlY3RvcnlGaWxlTGlzdENy
ZWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGlyZWN0b3J5RmlsZUxpc3RDcmVh
dG9yLmNwcApAQCAtODYsMTMgKzg2LDExIEBAIHN0YXRpYyBWZWN0b3I8RmlsZUluZm9ybWF0aW9u
PiBnYXRoZXJGaWxlSW5mb3JtYXRpb24oY29uc3QgVmVjdG9yPEZpbGVDaG9vc2VyRmlsCiBzdGF0
aWMgUmVmPEZpbGVMaXN0PiB0b0ZpbGVMaXN0KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgVmVj
dG9yPEZpbGVJbmZvcm1hdGlvbj4mIGZpbGVzKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0gICAgVmVjdG9yPFJlZjxGaWxlPj4gZmlsZU9iamVjdHM7Ci0gICAgZm9yIChhdXRvJiBm
aWxlIDogZmlsZXMpIHsKKyAgICBhdXRvIGZpbGVPYmplY3RzID0gZmlsZXMubWFwKFtkb2N1bWVu
dF0oYXV0byYgZmlsZSkgewogICAgICAgICBpZiAoZmlsZS5yZWxhdGl2ZVBhdGguaXNOdWxsKCkp
Ci0gICAgICAgICAgICBmaWxlT2JqZWN0cy5hcHBlbmQoRmlsZTo6Y3JlYXRlKGRvY3VtZW50LCBm
aWxlLnBhdGgsIHsgfSwgZmlsZS5kaXNwbGF5TmFtZSkpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBmaWxlT2JqZWN0cy5hcHBlbmQoRmlsZTo6Y3JlYXRlV2l0aFJlbGF0aXZlUGF0aChkb2N1
bWVudCwgZmlsZS5wYXRoLCBmaWxlLnJlbGF0aXZlUGF0aCkpOwotICAgIH0KKyAgICAgICAgICAg
IHJldHVybiBGaWxlOjpjcmVhdGUoZG9jdW1lbnQsIGZpbGUucGF0aCwgeyB9LCBmaWxlLmRpc3Bs
YXlOYW1lKTsKKyAgICAgICAgcmV0dXJuIEZpbGU6OmNyZWF0ZVdpdGhSZWxhdGl2ZVBhdGgoZG9j
dW1lbnQsIGZpbGUucGF0aCwgZmlsZS5yZWxhdGl2ZVBhdGgpOworICAgIH0pOwogICAgIHJldHVy
biBGaWxlTGlzdDo6Y3JlYXRlKFdURk1vdmUoZmlsZU9iamVjdHMpKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAppbmRleCBjNGIwODRkMmRlNzFmZDMxOWZl
OGMwNjliNDVmZjdmY2NjZWRlNWVjLi43MmFmZTA0ZTA3Zjg5YzhjMjRhZjNmOGI4Y2FkMzhjZTI5
NmE4ZDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcApAQCAt
NjM0LDkgKzYzNCw5IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNhdmVMYXN0U2VsZWN0aW9u
KCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9u
LmNsZWFyKCk7Ci0gICAgZm9yIChhdXRvJiBlbGVtZW50IDogbGlzdEl0ZW1zKCkpCi0gICAgICAg
IG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uLmFwcGVuZChpczxIVE1MT3B0aW9uRWxlbWVudD4oKmVs
ZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQo
KSk7CisgICAgbV9sYXN0T25DaGFuZ2VTZWxlY3Rpb24gPSBsaXN0SXRlbXMoKS5tYXAoW10oYXV0
byYgZWxlbWVudCkgeworICAgICAgICByZXR1cm4gaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVt
ZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCk7
CisgICAgfSk7CiB9CiAKIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2ZVNlbGVjdGlv
bkFuY2hvckluZGV4KGludCBpbmRleCkKQEAgLTY0NSwxMCArNjQ1LDkgQEAgdm9pZCBIVE1MU2Vs
ZWN0RWxlbWVudDo6c2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgoaW50IGluZGV4KQogCiAg
ICAgLy8gQ2FjaGUgdGhlIHNlbGVjdGlvbiBzdGF0ZSBzbyB3ZSBjYW4gcmVzdG9yZSB0aGUgb2xk
IHNlbGVjdGlvbiBhcyB0aGUgbmV3CiAgICAgLy8gc2VsZWN0aW9uIHBpdm90cyBhcm91bmQgdGhp
cyBhbmNob3IgaW5kZXguCi0gICAgbV9jYWNoZWRTdGF0ZUZvckFjdGl2ZVNlbGVjdGlvbi5jbGVh
cigpOwotCi0gICAgZm9yIChhdXRvJiBlbGVtZW50IDogbGlzdEl0ZW1zKCkpCi0gICAgICAgIG1f
Y2FjaGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rpb24uYXBwZW5kKGlzPEhUTUxPcHRpb25FbGVtZW50
PigqZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5zZWxl
Y3RlZCgpKTsKKyAgICBtX2NhY2hlZFN0YXRlRm9yQWN0aXZlU2VsZWN0aW9uID0gbGlzdEl0ZW1z
KCkubWFwKFtdKGF1dG8mIGVsZW1lbnQpIHsKKyAgICAgICAgcmV0dXJuIGlzPEhUTUxPcHRpb25F
bGVtZW50PigqZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50
KS5zZWxlY3RlZCgpOworICAgIH0pOwogfQogCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRB
Y3RpdmVTZWxlY3Rpb25FbmRJbmRleChpbnQgaW5kZXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0ltYWdlQml0bWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRt
YXAuY3BwCmluZGV4IDA1YjI3Mzc5ZjJkOTIxOTQ0ODkzMmM0NmFiMzNiMmVmMDMxYWZjNmEuLjU5
YmZjNmUwZjFlNTkwNDNkY2M1YmJkYTJkMjJhYWUzNjVhNjEzMTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SW1hZ2VCaXRtYXAuY3BwCkBAIC0xMTIsMTAgKzExMiw5IEBAIHZvaWQgSW1hZ2VCaXRtYXA6OmNy
ZWF0ZVByb21pc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCwKIAogVmVjdG9yPHN0ZDo6b3B0aW9uYWw8SW1hZ2VCaXRtYXBCYWNraW5nPj4gSW1hZ2VCaXRt
YXA6OmRldGFjaEJpdG1hcHMoVmVjdG9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+JiYgYml0bWFwcykK
IHsKLSAgICBWZWN0b3I8c3RkOjpvcHRpb25hbDxJbWFnZUJpdG1hcEJhY2tpbmc+PiBidWZmZXJz
OwotICAgIGZvciAoYXV0byYgYml0bWFwIDogYml0bWFwcykKLSAgICAgICAgYnVmZmVycy5hcHBl
bmQoYml0bWFwLT50YWtlSW1hZ2VCaXRtYXBCYWNraW5nKCkpOwotICAgIHJldHVybiBidWZmZXJz
OworICAgIHJldHVybiBXVEY6Om1hcChXVEZNb3ZlKGJpdG1hcHMpLCBbXShhdXRvJiYgYml0bWFw
KSB7CisgICAgICAgIHJldHVybiBiaXRtYXAtPnRha2VJbWFnZUJpdG1hcEJhY2tpbmcoKTsKKyAg
ICB9KTsKIH0KIAogdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBJbWFnZUJpdG1hcDo6U291cmNlJiYg
c291cmNlLCBJbWFnZUJpdG1hcE9wdGlvbnMmJiBvcHRpb25zLCBpbnQgc3gsIGludCBzeSwgaW50
IHN3LCBpbnQgc2gsIEltYWdlQml0bWFwOjpQcm9taXNlJiYgcHJvbWlzZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5j
cHAKaW5kZXggNjExNDYwMjc3ZjY2NzlhNDkxZTBmOTgzMTc3OTczMDA3ZWJiZGRjNi4uZjczMzY0
ZjM4NjBjMjZiOTM2NjE4YzRmN2UxYTE3ODI1ZThkNTAxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKQEAg
LTMwMjEsOSArMzAyMSw4IEBAIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRl
cj4+PiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRBdHRhY2hlCiAgICAgfTsKICAgICBW
ZWN0b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4gc2hhZGVyT2JqZWN0czsKICAgICBmb3IgKGF1dG8g
c2hhZGVyVHlwZSA6IHNoYWRlclR5cGVzKSB7Ci0gICAgICAgIFJlZlB0cjxXZWJHTFNoYWRlcj4g
c2hhZGVyID0gcHJvZ3JhbS5nZXRBdHRhY2hlZFNoYWRlcihzaGFkZXJUeXBlKTsKLSAgICAgICAg
aWYgKHNoYWRlcikKLSAgICAgICAgICAgIHNoYWRlck9iamVjdHMuYXBwZW5kKHNoYWRlcik7Cisg
ICAgICAgIGlmIChSZWZQdHIgc2hhZGVyID0gcHJvZ3JhbS5nZXRBdHRhY2hlZFNoYWRlcihzaGFk
ZXJUeXBlKSkKKyAgICAgICAgICAgIHNoYWRlck9iamVjdHMuYXBwZW5kKFdURk1vdmUoc2hhZGVy
KSk7CiAgICAgfQogICAgIHJldHVybiBzaGFkZXJPYmplY3RzOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAKaW5kZXggOGFj
YjY4YWY0NTUxYTM4Yjc5OWM3MTNhYTc1ZGMwZjc5MTkwMDRiZS4uMGE1ZWQ3OGY0NThmOTliNmJj
N2ZjMzcxZGY5NGNmZTkyNWE0ZDQ4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCkBAIC04NSwxMiArODUsMTEgQEAgc3Rh
dGljIFN0cmluZ1ZpZXcgZXh0cmFjdENoYXJzZXQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIAogYm9v
bCBIVE1MTWV0YUNoYXJzZXRQYXJzZXI6OnByb2Nlc3NNZXRhKEhUTUxUb2tlbiYgdG9rZW4pCiB7
Ci0gICAgQXR0cmlidXRlTGlzdCBhdHRyaWJ1dGVzOwotICAgIGZvciAoYXV0byYgYXR0cmlidXRl
IDogdG9rZW4uYXR0cmlidXRlcygpKSB7CisgICAgYXV0byBhdHRyaWJ1dGVzID0gdG9rZW4uYXR0
cmlidXRlcygpLm1hcChbXShhdXRvJiBhdHRyaWJ1dGUpIHsKICAgICAgICAgU3RyaW5nIGF0dHJp
YnV0ZU5hbWUgPSBTdHJpbmdJbXBsOjpjcmVhdGU4Qml0SWZQb3NzaWJsZShhdHRyaWJ1dGUubmFt
ZSk7CiAgICAgICAgIFN0cmluZyBhdHRyaWJ1dGVWYWx1ZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZThC
aXRJZlBvc3NpYmxlKGF0dHJpYnV0ZS52YWx1ZSk7Ci0gICAgICAgIGF0dHJpYnV0ZXMuYXBwZW5k
KHN0ZDo6bWFrZV9wYWlyKGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVZhbHVlKSk7Ci0gICAgfQor
ICAgICAgICByZXR1cm4gc3RkOjpwYWlyIHsgV1RGTW92ZShhdHRyaWJ1dGVOYW1lKSwgV1RGTW92
ZShhdHRyaWJ1dGVWYWx1ZSkgfTsKKyAgICB9KTsKIAogICAgIG1fZW5jb2RpbmcgPSBlbmNvZGlu
Z0Zyb21NZXRhQXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKICAgICByZXR1cm4gbV9lbmNvZGluZy5p
c1ZhbGlkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJl
ZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVy
LmNwcAppbmRleCA2YjcxYmVmODFhN2UyODQ3MWVlZmQ3YzUzMTUyYThhMGE4MmQyZGI1Li5hMWYx
NjdjYjA4M2M5OTg0MzYxODM0MTE4MDI5ZjI4NWU0MWMwMDA1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKQEAgLTIyMDAsMTEgKzIyMDAsMTAg
QEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDaGFyYWN0ZXIoQXRvbUhUTUxUb2tlbiYm
IHRva2VuKQogLy8gRnJvbSB0aGUgc3RyaW5nIDQwODk5NjEwMTAsIGNyZWF0ZXMgYSBsaW5rIG9m
IHRoZSBmb3JtIDxhIGhyZWY9InRlbDo0MDg5OTYxMDEwIj40MDg5OTYxMDEwPC9hPiBhbmQgaW5z
ZXJ0cyBpdC4KIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjppbnNlcnRQaG9uZU51bWJlckxpbmsoY29u
c3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgVmVjdG9yPEF0dHJpYnV0ZT4gYXR0cmlidXRlczsK
LSAgICBhdHRyaWJ1dGVzLmFwcGVuZChBdHRyaWJ1dGUoSFRNTE5hbWVzOjpocmVmQXR0ciwgbWFr
ZVN0cmluZygidGVsOiJfcywgc3RyaW5nKSkpOworICAgIEF0dHJpYnV0ZSBhdHRyaWJ1dGUoSFRN
TE5hbWVzOjpocmVmQXR0ciwgbWFrZVN0cmluZygidGVsOiJfcywgc3RyaW5nKSk7CiAKICAgICBj
b25zdCBBdG9tU3RyaW5nJiBhVGFnTG9jYWxOYW1lID0gYVRhZy0+bG9jYWxOYW1lKCk7Ci0gICAg
QXRvbUhUTUxUb2tlbiBhU3RhcnRUb2tlbihIVE1MVG9rZW46OlN0YXJ0VGFnLCBhVGFnTG9jYWxO
YW1lLCBXVEZNb3ZlKGF0dHJpYnV0ZXMpKTsKKyAgICBBdG9tSFRNTFRva2VuIGFTdGFydFRva2Vu
KEhUTUxUb2tlbjo6U3RhcnRUYWcsIGFUYWdMb2NhbE5hbWUsIHsgV1RGTW92ZShhdHRyaWJ1dGUp
IH0pOwogICAgIEF0b21IVE1MVG9rZW4gYUVuZFRva2VuKEhUTUxUb2tlbjo6RW5kVGFnLCBhVGFn
TG9jYWxOYW1lKTsKIAogICAgIHByb2Nlc3NTdGFydFRhZyhXVEZNb3ZlKGFTdGFydFRva2VuKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJz
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNw
cAppbmRleCA0ZGE5NTlmNDBmZTllYTMzNzQ3Y2QyMzg4Y2ViNzlmNmQ3MmRiN2VkLi40NzA2ZjI2
ZTg0NDA5ZWU4MTNjZDEzYmM1ZjRlMGFjY2Y2NzRhODY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNlci5jcHAKQEAgLTUxLDkgKzUxLDggQEAg
dm9pZCBUZXh0RG9jdW1lbnRQYXJzZXI6Omluc2VydEZha2VQcmVFbGVtZW50KCkKICAgICAvLyBX
ZSBjcmVhdGUgYSBmYWtlIHRva2VuIGFuZCBnaXZlIGl0IHRvIHRoZSB0cmVlIGJ1aWxkZXIgcmF0
aGVyIHRoYW4KICAgICAvLyBzZW5kaW5nIGZha2UgYnl0ZXMgdGhyb3VnaCB0aGUgZnJvbnQtZW5k
IG9mIHRoZSBwYXJzZXIgdG8gYXZvaWQKICAgICAvLyBkaXN0cnViaW5nIHRoZSBsaW5lL2NvbHVt
biBudW1iZXIgY2FsY3VsYXRpb25zLgotICAgIFZlY3RvcjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZXM7
Ci0gICAgYXR0cmlidXRlcy5hcHBlbmQoQXR0cmlidXRlKHN0eWxlQXR0ciwgIndvcmQtd3JhcDog
YnJlYWstd29yZDsgd2hpdGUtc3BhY2U6IHByZS13cmFwOyIpKTsKLSAgICBBdG9tSFRNTFRva2Vu
IGZha2VQcmUoSFRNTFRva2VuOjpTdGFydFRhZywgcHJlVGFnLT5sb2NhbE5hbWUoKSwgV1RGTW92
ZShhdHRyaWJ1dGVzKSk7CisgICAgQXR0cmlidXRlIGF0dHJpYnV0ZShzdHlsZUF0dHIsICJ3b3Jk
LXdyYXA6IGJyZWFrLXdvcmQ7IHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsiKTsKKyAgICBBdG9tSFRN
TFRva2VuIGZha2VQcmUoSFRNTFRva2VuOjpTdGFydFRhZywgcHJlVGFnLT5sb2NhbE5hbWUoKSwg
eyBXVEZNb3ZlKGF0dHJpYnV0ZSkgfSk7CiAgICAgdHJlZUJ1aWxkZXIoKS5jb25zdHJ1Y3RUcmVl
KFdURk1vdmUoZmFrZVByZSkpOwogCiAgICAgLy8gTm9ybWFsbHkgd2Ugd291bGQgc2tpcCB0aGUg
Zmlyc3QgXG4gYWZ0ZXIgYSA8cHJlPiBlbGVtZW50LCBidXQgd2UgZG9uJ3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Db250ZW50RmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Db250ZW50RmlsdGVyLmNwcAppbmRleCA0MTllMzJmMzk4MmY2NzJhZjY2MzBmYTVl
MGM2MjVjNWNiN2IyMjNmLi40ZTM1NDQ1NGFhYmEzNGU0ZmJlYTQxNWQ0MWZmOGU5MmJmNDQxNDVh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29udGVudEZpbHRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0NvbnRlbnRGaWx0ZXIuY3BwCkBAIC02NywxMSArNjcs
OSBAQCBWZWN0b3I8Q29udGVudEZpbHRlcjo6VHlwZT4mIENvbnRlbnRGaWx0ZXI6OnR5cGVzKCkK
IAogc3RkOjp1bmlxdWVfcHRyPENvbnRlbnRGaWx0ZXI+IENvbnRlbnRGaWx0ZXI6OmNyZWF0ZShD
b250ZW50RmlsdGVyQ2xpZW50JiBjbGllbnQpCiB7Ci0gICAgQ29udGFpbmVyIGZpbHRlcnM7Ci0g
ICAgZm9yIChhdXRvJiB0eXBlIDogdHlwZXMoKSkgewotICAgICAgICBhdXRvIGZpbHRlciA9IHR5
cGUuY3JlYXRlKCk7Ci0gICAgICAgIGZpbHRlcnMuYXBwZW5kKFdURk1vdmUoZmlsdGVyKSk7Ci0g
ICAgfQorICAgIGF1dG8gZmlsdGVycyA9IHR5cGVzKCkubWFwKFtdKGF1dG8mIHR5cGUpIHsKKyAg
ICAgICAgcmV0dXJuIHR5cGUuY3JlYXRlKCk7CisgICAgfSk7CiAKICAgICBpZiAoZmlsdGVycy5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFBhcnNlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0
UGFyc2VyLmNwcAppbmRleCBiODdkZDgzNTA2MDdjMjRiZTI1NmUzNDQxYmVkMmQzNzY3ZTA5NTUy
Li40YTExNDQyNWUxMTZkMmM0MmQxOTAzOTIzZWRmODg2MzgzZDhmMDY0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0UGFy
c2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25D
YWNoZU1hbmlmZXN0UGFyc2VyLmNwcApAQCAtMTgwLDcgKzE4MCw3IEBAIHN0ZDo6b3B0aW9uYWw8
QXBwbGljYXRpb25DYWNoZU1hbmlmZXN0PiBwYXJzZUFwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdChj
b25zdCBVUkwmCiAgICAgICAgICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHVy
bC5wcm90b2NvbCgpLCBtYW5pZmVzdFVSTC5wcm90b2NvbCgpKSkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKLSAgICAgICAgICAgICAgICBtYW5pZmVzdC5vbmxpbmVBbGxvd2VkVVJM
cy5hcHBlbmQodXJsKTsKKyAgICAgICAgICAgICAgICBtYW5pZmVzdC5vbmxpbmVBbGxvd2VkVVJM
cy5hcHBlbmQoV1RGTW92ZSh1cmwpKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9S
ZXNpemVPYnNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6ZU9ic2VydmVyLmNw
cAppbmRleCA5M2RhMWE0NTYwNGU0NTJhNzc1OTNlMThkMWY0NzMzNjM0OTk0MzY3Li40ZmZkNjlk
MDM0NDEwOWI0N2FmYjVlNTE5N2FhM2ZkZmQ0OTdkZWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1Jlc2l6ZU9ic2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jl
c2l6ZU9ic2VydmVyLmNwcApAQCAtMTI1LDExICsxMjUsMTAgQEAgc2l6ZV90IFJlc2l6ZU9ic2Vy
dmVyOjpnYXRoZXJPYnNlcnZhdGlvbnMoc2l6ZV90IGRlZXBlclRoYW4pCiAKIHZvaWQgUmVzaXpl
T2JzZXJ2ZXI6OmRlbGl2ZXJPYnNlcnZhdGlvbnMoKQogewotICAgIFZlY3RvcjxSZWY8UmVzaXpl
T2JzZXJ2ZXJFbnRyeT4+IGVudHJpZXM7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBvYnNlcnZhdGlv
biA6IG1fYWN0aXZlT2JzZXJ2YXRpb25zKSB7CisgICAgYXV0byBlbnRyaWVzID0gbV9hY3RpdmVP
YnNlcnZhdGlvbnMubWFwKFtdKGF1dG8mIG9ic2VydmF0aW9uKSB7CiAgICAgICAgIEFTU0VSVChv
YnNlcnZhdGlvbi0+dGFyZ2V0KCkpOwotICAgICAgICBlbnRyaWVzLmFwcGVuZChSZXNpemVPYnNl
cnZlckVudHJ5OjpjcmVhdGUob2JzZXJ2YXRpb24tPnRhcmdldCgpLCBvYnNlcnZhdGlvbi0+Y29t
cHV0ZUNvbnRlbnRSZWN0KCksIG9ic2VydmF0aW9uLT5ib3JkZXJCb3hTaXplKCksIG9ic2VydmF0
aW9uLT5jb250ZW50Qm94U2l6ZSgpKSk7Ci0gICAgfQorICAgICAgICByZXR1cm4gUmVzaXplT2Jz
ZXJ2ZXJFbnRyeTo6Y3JlYXRlKG9ic2VydmF0aW9uLT50YXJnZXQoKSwgb2JzZXJ2YXRpb24tPmNv
bXB1dGVDb250ZW50UmVjdCgpLCBvYnNlcnZhdGlvbi0+Ym9yZGVyQm94U2l6ZSgpLCBvYnNlcnZh
dGlvbi0+Y29udGVudEJveFNpemUoKSk7CisgICAgfSk7CiAgICAgbV9hY3RpdmVPYnNlcnZhdGlv
bnMuY2xlYXIoKTsKICAgICBhdXRvIGFjdGl2ZU9ic2VydmF0aW9uVGFyZ2V0cyA9IHN0ZDo6ZXhj
aGFuZ2UobV9hY3RpdmVPYnNlcnZhdGlvblRhcmdldHMsIHsgfSk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1RleHRJbmRpY2F0b3IuY3BwCmluZGV4IDM4N2Q1MTlhZTUxNzJkNjgwYTViMjg4NDNiYmU4ZmY5
OTZjNmIzMzUuLjA5OWI5MWQ1MTUyNDU1YWU3NzdlNWZmMjU2YjE1NzI2OTA0MzNlZDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcApAQCAtMzYxLDE3ICszNjEsMTYgQEAgc3Rh
dGljIGJvb2wgaW5pdGlhbGl6ZUluZGljYXRvcihUZXh0SW5kaWNhdG9yRGF0YSYgZGF0YSwgRnJh
bWUmIGZyYW1lLCBjb25zdCBTaW0KICAgICAgICAgdGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdD
b29yZGluYXRlcy51bml0ZSh0ZXh0UmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyk7CiAgICAgfQog
Ci0gICAgVmVjdG9yPEZsb2F0UmVjdD4gdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRl
czsKLSAgICBmb3IgKGF1dG8gcmVjdCA6IHRleHRSZWN0c0luUm9vdFZpZXdDb29yZGluYXRlcykg
eworICAgIGF1dG8gdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcyA9IHRleHRSZWN0
c0luUm9vdFZpZXdDb29yZGluYXRlcy5tYXAoWyZdKGF1dG8gcmVjdCkgewogICAgICAgICByZWN0
Lm1vdmVCeSgtdGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcy5sb2NhdGlvbigp
KTsKLSAgICAgICAgdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcy5hcHBlbmQocmVj
dCk7Ci0gICAgfQorICAgICAgICByZXR1cm4gcmVjdDsKKyAgICB9KTsKIAogICAgIC8vIFN0b3Jl
IHRoZSBzZWxlY3Rpb24gcmVjdCBpbiB3aW5kb3cgY29vcmRpbmF0ZXMsIHRvIGJlIHVzZWQgc3Vi
c2VxdWVudGx5CiAgICAgLy8gdG8gZGV0ZXJtaW5lIGlmIHRoZSBpbmRpY2F0b3IgYW5kIHNlbGVj
dGlvbiBzdGlsbCBwcmVjaXNlbHkgb3ZlcmxhcC4KICAgICBkYXRhLnNlbGVjdGlvblJlY3RJblJv
b3RWaWV3Q29vcmRpbmF0ZXMgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhlbmNs
b3NpbmdJbnRSZWN0KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbkJvdW5kcyhGcmFtZVNlbGVj
dGlvbjo6Q2xpcFRvVmlzaWJsZUNvbnRlbnQ6Ok5vKSkpOwotICAgIGRhdGEudGV4dEJvdW5kaW5n
UmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9IHRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29v
cmRpbmF0ZXM7Ci0gICAgZGF0YS50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzID0g
dGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlczsKKyAgICBkYXRhLnRleHRCb3VuZGlu
Z1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBXVEZNb3ZlKHRleHRCb3VuZGluZ1JlY3RJblJv
b3RWaWV3Q29vcmRpbmF0ZXMpOworICAgIGRhdGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29y
ZGluYXRlcyA9IFdURk1vdmUodGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcyk7CiAK
ICAgICByZXR1cm4gdGFrZVNuYXBzaG90cyhkYXRhLCBmcmFtZSwgZW5jbG9zaW5nSW50UmVjdCh0
ZXh0Qm91bmRpbmdSZWN0SW5Eb2N1bWVudENvb3JkaW5hdGVzKSwgY2xpcHBlZFRleHRSZWN0c0lu
RG9jdW1lbnRDb29yZGluYXRlcyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jc3Av
Q29udGVudFNlY3VyaXR5UG9saWN5LmNwcAppbmRleCA1MmY2MjAxMjJiODVjNzUwM2U3ZGE2YTY4
MzViZjM3NTYxNDk2N2Y0Li44YTJiYTRjZmZhMjZkY2NiYmQxZTc1ZWU1MDExM2E4NjZiZTVhMmZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xp
Y3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGlj
eS5jcHAKQEAgLTM0MywxOCArMzQzLDEyIEBAIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5Ojph
bGxQb2xpY2llc0FsbG93KFZpb2xhdGVkRGlyZWN0aXZlQ2FsbGJhY2smJiBjYWxsYmFjCiBzdGF0
aWMgVmVjdG9yPFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VTdWJSZXNvdXJjZUlu
dGVncml0eUludG9EaWdlc3RzKGNvbnN0IFN0cmluZyYgc3ViUmVzb3VyY2VJbnRlZ3JpdHkpCiB7
CiAgICAgYXV0byBlbmNvZGVkRGlnZXN0cyA9IHBhcnNlSW50ZWdyaXR5TWV0YWRhdGEoc3ViUmVz
b3VyY2VJbnRlZ3JpdHkpOwotICAgIFZlY3RvcjxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+
IGRlY29kZWREaWdlc3RzOwotCi0gICAgaWYgKCFlbmNvZGVkRGlnZXN0cy5oYXNfdmFsdWUoKSkK
KyAgICBpZiAoIWVuY29kZWREaWdlc3RzKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgZm9y
IChjb25zdCBhdXRvJiBlbmNvZGVkRGlnZXN0IDogZW5jb2RlZERpZ2VzdHMudmFsdWUoKSkgewot
ICAgICAgICBhdXRvIGRlY29kZWREaWdlc3QgPSBkZWNvZGVFbmNvZGVkUmVzb3VyY2VDcnlwdG9n
cmFwaGljRGlnZXN0KGVuY29kZWREaWdlc3QpOwotICAgICAgICBpZiAoZGVjb2RlZERpZ2VzdC5o
YXNfdmFsdWUoKSkKLSAgICAgICAgICAgIGRlY29kZWREaWdlc3RzLmFwcGVuZChkZWNvZGVkRGln
ZXN0LnZhbHVlKCkpOwotICAgICAgICB9Ci0KLSAgICByZXR1cm4gZGVjb2RlZERpZ2VzdHM7Cisg
ICAgcmV0dXJuIFdURjo6Y29tcGFjdE1hcCgqZW5jb2RlZERpZ2VzdHMsIFtdKGF1dG8mIGVuY29k
ZWREaWdlc3QpIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUVuY29kZWRSZXNvdXJjZUNyeXB0b2dy
YXBoaWNEaWdlc3QoZW5jb2RlZERpZ2VzdCk7CisgICAgfSk7CiB9CiAKIHN0YXRpYyBWZWN0b3I8
Q29udGVudFNlY3VyaXR5UG9saWN5SGFzaD4gZ2VuZXJhdGVIYXNoZXNGb3JDb250ZW50KGNvbnN0
IFN0cmluZ1ZpZXcgY29udGVudCwgT3B0aW9uU2V0PENvbnRlbnRTZWN1cml0eVBvbGljeUhhc2hB
bGdvcml0aG0+IGFsZ29yaXRobXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9GaWxlQ2hvb3Nlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5j
cHAKaW5kZXggOGU0ZWNlNzA1M2FlOGU5OGVmZWNjZmU3NjUyZjg2Y2QyOTc0MDQwNC4uNzg0Mjhj
NGFiZDMxZTk5YjEwYWFlNDhmYmVjYzJhNWI4ZDlmNThmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0ZpbGVDaG9vc2VyLmNwcApAQCAtNTMsOSArNTMsNyBAQCB2b2lkIEZpbGVDaG9vc2VyOjpp
bnZhbGlkYXRlKCkKIAogdm9pZCBGaWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZShjb25zdCBTdHJpbmcm
IGZpbGVuYW1lKQogewotICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVuYW1lczsKLSAgICBmaWxlbmFt
ZXMuYXBwZW5kKGZpbGVuYW1lKTsKLSAgICBjaG9vc2VGaWxlcyhmaWxlbmFtZXMpOworICAgIGNo
b29zZUZpbGVzKHsgZmlsZW5hbWUgfSk7CiB9CiAKIHZvaWQgRmlsZUNob29zZXI6OmNob29zZUZp
bGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiByZXBsYWNlbWVudE5hbWVzKQpAQCAtNjgsOSArNjYsMTAgQEAgdm9pZCBGaWxlQ2hvb3Nlcjo6
Y2hvb3NlRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywgY29uc3QgVmVjdG9y
PFN0cmkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+
IGZpbGVzOworICAgIGZpbGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZmlsZW5hbWVzLnNpemUo
KSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBmaWxlbmFtZXMuc2l6ZSgpOyBpIDwg
c2l6ZTsgKytpKQotICAgICAgICBmaWxlcy5hcHBlbmQoeyBmaWxlbmFtZXNbaV0sIGkgPCByZXBs
YWNlbWVudE5hbWVzLnNpemUoKSA/IHJlcGxhY2VtZW50TmFtZXNbaV0gOiBudWxsU3RyaW5nKCks
IHsgfSB9KTsKLSAgICBtX2NsaWVudC0+ZmlsZXNDaG9zZW4oZmlsZXMpOworICAgICAgICBmaWxl
cy51bmNoZWNrZWRBcHBlbmQoeyBmaWxlbmFtZXNbaV0sIGkgPCByZXBsYWNlbWVudE5hbWVzLnNp
emUoKSA/IHJlcGxhY2VtZW50TmFtZXNbaV0gOiBudWxsU3RyaW5nKCksIHsgfSB9KTsKKyAgICBt
X2NsaWVudC0+ZmlsZXNDaG9zZW4oV1RGTW92ZShmaWxlcykpOwogfQogCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKQEAgLTg2LDE5ICs4NSwxOSBAQCB2b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VN
ZWRpYUZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIGNvbnN0IFN0cmluZwog
ICAgIGlmICghbV9jbGllbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxGaWxlQ2hv
b3NlckZpbGVJbmZvPiBmaWxlczsKLSAgICBmb3IgKGF1dG8mIGZpbGVuYW1lIDogZmlsZW5hbWVz
KQotICAgICAgICBmaWxlcy5hcHBlbmQoeyBmaWxlbmFtZSwgeyB9LCB7IH0gfSk7Ci0gICAgbV9j
bGllbnQtPmZpbGVzQ2hvc2VuKGZpbGVzLCBkaXNwbGF5U3RyaW5nLCBpY29uKTsKKyAgICBhdXRv
IGZpbGVzID0gZmlsZW5hbWVzLm1hcChbXShhdXRvJiBmaWxlbmFtZSkgeworICAgICAgICByZXR1
cm4gRmlsZUNob29zZXJGaWxlSW5mbyB7IGZpbGVuYW1lLCB7IH0sIHsgfSB9OworICAgIH0pOwor
ICAgIG1fY2xpZW50LT5maWxlc0Nob3NlbihXVEZNb3ZlKGZpbGVzKSwgZGlzcGxheVN0cmluZywg
aWNvbik7CiB9CiAKICNlbmRpZgogCiB2b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlcyhjb25z
dCBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4mIGZpbGVzKQogewotICAgIFZlY3RvcjxTdHJp
bmc+IHBhdGhzOwotICAgIGZvciAoYXV0byYgZmlsZSA6IGZpbGVzKQotICAgICAgICBwYXRocy5h
cHBlbmQoZmlsZS5wYXRoKTsKKyAgICBhdXRvIHBhdGhzID0gZmlsZXMubWFwKFtdKGF1dG8mIGZp
bGUpIHsKKyAgICAgICAgcmV0dXJuIGZpbGUucGF0aDsKKyAgICB9KTsKIAogICAgIC8vIEZJWE1F
OiBUaGlzIGlzIGluZWxlZ2FudC4gV2Ugc2hvdWxkIG5vdCBiZSBsb29raW5nIGF0IHNldHRpbmdz
IGhlcmUuCiAgICAgaWYgKG1fc2V0dGluZ3Muc2VsZWN0ZWRGaWxlcyA9PSBwYXRocykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCmluZGV4IGQwOWYxMDUyYTBmMzFlZTk3
MDYxMTAxM2IzOTM1ZmI1MzA5NTUwOTYuLmY4N2I2YTRmNjNiMjZhMjE4ODIwNmU5MzhhYTU4NTc5
N2FiMzk1ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcApAQCAt
MjA2LDkgKzIwNiw3IEBAIHZvaWQgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKGNvbnN0
IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXImIGRhdGEpCiB2b2lkIEZyYWdtZW50ZWRTaGFyZWRCdWZm
ZXI6OmFwcGVuZChjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKQogewogICAgIEFT
U0VSVCghbV9jb250aWd1b3VzKTsKLSAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yOwotICAgIHZl
Y3Rvci5hcHBlbmQoZGF0YSwgbGVuZ3RoKTsKLSAgICBtX3NlZ21lbnRzLmFwcGVuZCh7IG1fc2l6
ZSwgRGF0YVNlZ21lbnQ6OmNyZWF0ZShXVEZNb3ZlKHZlY3RvcikpIH0pOworICAgIG1fc2VnbWVu
dHMuYXBwZW5kKHsgbV9zaXplLCBEYXRhU2VnbWVudDo6Y3JlYXRlKFZlY3RvciB7IGRhdGEsIGxl
bmd0aCB9KSB9KTsKICAgICBtX3NpemUgKz0gbGVuZ3RoOwogICAgIEFTU0VSVChpbnRlcm5hbGx5
Q29uc2lzdGVudCgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Ro
cmVhZFNhZmVEYXRhQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRTYWZl
RGF0YUJ1ZmZlci5oCmluZGV4IGQzOTdkMjI3ZGZjNTM0YWQwY2Y1ODcwMmJlMWNhNTgwMjQ5OWEw
YmIuLjY2MjdmZWJjYjdmNGUxZGFkODExMWUxNGE5MTIxNDQ4ODE2NmE5NzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZFNhZmVEYXRhQnVmZmVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkU2FmZURhdGFCdWZmZXIuaApAQCAtMjUsNiArMjUs
NyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRl
IDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
QEAgLTE0Myw0ICsxNDQsMTUgQEAgYm9vbCBUaHJlYWRTYWZlRGF0YUJ1ZmZlcjo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIsIFRocmVhZFNhZmVEYXRhQnVmZmVyJiByZXN1bHQKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBUaHJlYWRT
YWZlRGF0YUJ1ZmZlciYgYnVmZmVyKQoreworICAgIGF1dG8qIGRhdGEgPSBidWZmZXIuZGF0YSgp
OworICAgIGlmICghZGF0YSkgeworICAgICAgICBhZGQoaGFzaGVyLCB0cnVlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBhZGQoaGFzaGVyLCBmYWxzZSk7CisgICAgYWRkKGhhc2hlciwg
KmRhdGEpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHAKaW5k
ZXggMWNmMzljYWNmMzAyNDUwOGU4ZDEyZTg2NDVjNTA4Njc3MjE5NDM1Yi4uZDhjMzRmYTM3Njk1
MDcyNTI1NDc0MThmZTVlODQ0ZmZlMmMzMDg3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmNwcApAQCAtNTYs
OCArNTYsOSBAQCB2b2lkIEF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yOjppbml0aWFsaXplKCkKICAg
ICAgICAgRGlzYWJsZU1hbGxvY1Jlc3RyaWN0aW9uc0ZvckN1cnJlbnRUaHJlYWRTY29wZSBkaXNh
YmxlTWFsbG9jUmVzdHJpY3Rpb25zOwogCiAgICAgICAgIC8vIENyZWF0ZSBwcm9jZXNzaW5nIGtl
cm5lbHMsIG9uZSBwZXIgY2hhbm5lbC4KKyAgICAgICAgbV9rZXJuZWxzLnJlc2VydmVDYXBhY2l0
eShtX2tlcm5lbHMuY2FwYWNpdHkoKSArIG51bWJlck9mQ2hhbm5lbHMoKSk7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzKCk7ICsraSkKLSAgICAgICAg
ICAgIG1fa2VybmVscy5hcHBlbmQoY3JlYXRlS2VybmVsKCkpOworICAgICAgICAgICAgbV9rZXJu
ZWxzLnVuY2hlY2tlZEFwcGVuZChjcmVhdGVLZXJuZWwoKSk7CiAgICAgfQogICAgIG1faW5pdGlh
bGl6ZWQgPSB0cnVlOwogICAgIG1faGFzSnVzdFJlc2V0ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUmVzYW1wbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUmVzYW1wbGVyLmNwcAppbmRleCBkZTUwOGNjNmVm
NGE1YjAxYmQ0ZWIyMjQ3NDViN2VmMjgyODQwZjhlLi43NDY5Y2U0ZGUzZjNjMTg4ODkyOGY1NDk3
ZDEyY2U1NmRiNmU2ZDJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9BdWRpb1Jlc2FtcGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
QXVkaW9SZXNhbXBsZXIuY3BwCkBAIC00Miw4ICs0Miw5IEBAIEF1ZGlvUmVzYW1wbGVyOjpBdWRp
b1Jlc2FtcGxlcigpCiAKIEF1ZGlvUmVzYW1wbGVyOjpBdWRpb1Jlc2FtcGxlcih1bnNpZ25lZCBu
dW1iZXJPZkNoYW5uZWxzKQogeworICAgIG1fa2VybmVscy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KG51bWJlck9mQ2hhbm5lbHMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJP
ZkNoYW5uZWxzOyArK2kpCi0gICAgICAgIG1fa2VybmVscy5hcHBlbmQobWFrZVVuaXF1ZTxBdWRp
b1Jlc2FtcGxlcktlcm5lbD4odGhpcykpOworICAgICAgICBtX2tlcm5lbHMudW5jaGVja2VkQXBw
ZW5kKG1ha2VVbmlxdWU8QXVkaW9SZXNhbXBsZXJLZXJuZWw+KHRoaXMpKTsKIAogICAgIG1fc291
cmNlQnVzID0gQXVkaW9CdXM6OmNyZWF0ZShudW1iZXJPZkNoYW5uZWxzLCAwLCBmYWxzZSk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXBy
ZXNzb3JLZXJuZWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3ND
b21wcmVzc29yS2VybmVsLmNwcAppbmRleCA5ZjMxODFjZmJiNDAyMjc3Nzk5NjIzYjliZmRkY2Rk
NDk1OWMwMGIwLi5jMWM3YTU3NzVhZmZkNTEzOTI1YjU3ZGRiMTU2NzZjNzg1OWE3OWU4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JL
ZXJuZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29t
cHJlc3Nvcktlcm5lbC5jcHAKQEAgLTYwLDkgKzYwLDEwIEBAIHZvaWQgRHluYW1pY3NDb21wcmVz
c29yS2VybmVsOjpzZXROdW1iZXJPZkNoYW5uZWxzKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMp
CiAgICAgaWYgKG1fcHJlRGVsYXlCdWZmZXJzLnNpemUoKSA9PSBudW1iZXJPZkNoYW5uZWxzKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX3ByZURlbGF5QnVmZmVycy5jbGVhcigpOworICAgIG1f
cHJlRGVsYXlCdWZmZXJzLnNocmluaygwKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtYmVyT2ZDaGFubmVsczsgKytpKQogICAgICAgICBtX3ByZURlbGF5QnVmZmVycy5hcHBlbmQo
bWFrZVVuaXF1ZTxBdWRpb0Zsb2F0QXJyYXk+KE1heFByZURlbGF5RnJhbWVzKSk7CisgICAgbV9w
cmVEZWxheUJ1ZmZlcnMuc2hyaW5rVG9GaXQoKTsKIH0KIAogdm9pZCBEeW5hbWljc0NvbXByZXNz
b3JLZXJuZWw6OnNldFByZURlbGF5VGltZShmbG9hdCBwcmVEZWxheVRpbWUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NdWx0aUNoYW5uZWxSZXNhbXBsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTXVsdGlDaGFubmVsUmVzYW1wbGVyLmNw
cAppbmRleCBiOTY2ZmEwNmNkMzBlYjM0ZGY3MWZjZmJkZTdjMTY1ODIzMTExMjFmLi4xNzAyM2I2
NDI2MWJkZmQzNzVlZTA5ZmUyOTZiM2JkYTg4MjdmMmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9NdWx0aUNoYW5uZWxSZXNhbXBsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL011bHRpQ2hhbm5lbFJlc2FtcGxlci5jcHAKQEAgLTUz
LDggKzUzLDkgQEAgTXVsdGlDaGFubmVsUmVzYW1wbGVyOjpNdWx0aUNoYW5uZWxSZXNhbXBsZXIo
ZG91YmxlIHNjYWxlRmFjdG9yLCB1bnNpZ25lZCBudW1iZXIKICAgICB9CiAKICAgICAvLyBDcmVh
dGUgZWFjaCBjaGFubmVsJ3MgcmVzYW1wbGVyLgorICAgIG1fa2VybmVscy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KG51bWJlck9mQ2hhbm5lbHMpOwogICAgIGZvciAodW5zaWduZWQgY2hhbm5lbElu
ZGV4ID0gMDsgY2hhbm5lbEluZGV4IDwgbnVtYmVyT2ZDaGFubmVsczsgKytjaGFubmVsSW5kZXgp
Ci0gICAgICAgIG1fa2VybmVscy5hcHBlbmQobWFrZVVuaXF1ZTxTaW5jUmVzYW1wbGVyPihzY2Fs
ZUZhY3RvciwgcmVxdWVzdEZyYW1lcywgc3RkOjpiaW5kKCZNdWx0aUNoYW5uZWxSZXNhbXBsZXI6
OnByb3ZpZGVJbnB1dEZvckNoYW5uZWwsIHRoaXMsIHN0ZDo6cGxhY2Vob2xkZXJzOjpfMSwgc3Rk
OjpwbGFjZWhvbGRlcnM6Ol8yLCBjaGFubmVsSW5kZXgpKSk7CisgICAgICAgIG1fa2VybmVscy51
bmNoZWNrZWRBcHBlbmQobWFrZVVuaXF1ZTxTaW5jUmVzYW1wbGVyPihzY2FsZUZhY3RvciwgcmVx
dWVzdEZyYW1lcywgc3RkOjpiaW5kKCZNdWx0aUNoYW5uZWxSZXNhbXBsZXI6OnByb3ZpZGVJbnB1
dEZvckNoYW5uZWwsIHRoaXMsIHN0ZDo6cGxhY2Vob2xkZXJzOjpfMSwgc3RkOjpwbGFjZWhvbGRl
cnM6Ol8yLCBjaGFubmVsSW5kZXgpKSk7CiB9CiAKIE11bHRpQ2hhbm5lbFJlc2FtcGxlcjo6fk11
bHRpQ2hhbm5lbFJlc2FtcGxlcigpID0gZGVmYXVsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVs
ZW1lbnQubW0KaW5kZXggMDVlYTIxMTFlYjVkNDUzY2IyOGQ4ZTc3ZWYzY2JmNWYzNTY3MTk4OS4u
ZmEzMGFmZGUzYjFlMWUzNmU4NjFhZWNiZDlmYmU4YzdmMDkwMzU2ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1l
bnQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9u
TW9kZWxNZWRpYUVsZW1lbnQubW0KQEAgLTUzNCwxNCArNTM0LDEyIEBAIFZlY3RvcjxNZWRpYVNl
bGVjdGlvbk9wdGlvbj4gUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVN
ZWRpYVNlbGVjCiAgICAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBsZWdpYmxlT3B0aW9u
czsKIAogICAgIGlmICghbV9tZWRpYUVsZW1lbnQgfHwgIW1fbWVkaWFFbGVtZW50LT5kb2N1bWVu
dCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGxlZ2libGVPcHRpb25zOworICAgICAgICByZXR1
cm4geyB9OwogCiAgICAgYXV0byYgY2FwdGlvblByZWZlcmVuY2VzID0gbV9tZWRpYUVsZW1lbnQt
PmRvY3VtZW50KCkucGFnZSgpLT5ncm91cCgpLmVuc3VyZUNhcHRpb25QcmVmZXJlbmNlcygpOwot
Ci0gICAgZm9yIChhdXRvJiB0cmFjayA6IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUpCi0gICAgICAg
IGxlZ2libGVPcHRpb25zLmFwcGVuZChjYXB0aW9uUHJlZmVyZW5jZXMubWVkaWFTZWxlY3Rpb25P
cHRpb25Gb3JUcmFjayh0cmFjay5nZXQoKSkpOwotCi0gICAgcmV0dXJuIGxlZ2libGVPcHRpb25z
OworICAgIHJldHVybiBtX2xlZ2libGVUcmFja3NGb3JNZW51Lm1hcChbJl0oYXV0byYgdHJhY2sp
IHsKKyAgICAgICAgcmV0dXJuIGNhcHRpb25QcmVmZXJlbmNlcy5tZWRpYVNlbGVjdGlvbk9wdGlv
bkZvclRyYWNrKHRyYWNrLmdldCgpKTsKKyAgICB9KTsKIH0KIAogdWludDY0X3QgUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRpYVNlbGVjdGVkSW5kZXgoKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvRHVhbHNo
b2NrM0hJREdhbWVwYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMv
RHVhbHNob2NrM0hJREdhbWVwYWQuY3BwCmluZGV4IDZjNDBlOGI4ODkyODczZmYwNzIwNjE4Y2Zl
ODM5NjRjODBlYzM0MWUuLmMwZjUxODFiYzQ0YjFiZGNlYmE2OWI4Y2I2YTM0YTllYTEyN2RmNjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL0R1YWxzaG9j
azNISURHYW1lcGFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21h
Yy9EdWFsc2hvY2szSElER2FtZXBhZC5jcHAKQEAgLTQzLDEyICs0MywxMCBAQCBEdWFsc2hvY2sz
SElER2FtZXBhZDo6RHVhbHNob2NrM0hJREdhbWVwYWQoSElERGV2aWNlJiYgZGV2aWNlLCB1bnNp
Z25lZCBpbmRleCkKIAogICAgIG1fbWFwcGluZyA9IHN0YW5kYXJkR2FtZXBhZE1hcHBpbmdTdHJp
bmcoKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZTdGFuZGFyZEdhbWVw
YWRCdXR0b25zV2l0aEhvbWVCdXR0b247ICsraSkKLSAgICAgICAgbV9idXR0b25WYWx1ZXMuYXBw
ZW5kKDAuMCk7CisgICAgbV9idXR0b25WYWx1ZXMgPSBWZWN0b3IobnVtYmVyT2ZTdGFuZGFyZEdh
bWVwYWRCdXR0b25zV2l0aEhvbWVCdXR0b24sIFNoYXJlZEdhbWVwYWRWYWx1ZSB7IDAuMCB9KTsK
IAotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYXhpc0NvdW50ID0gNDsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGF4aXNDb3VudDsgKytpKQotICAgICAgICBtX2F4aXNWYWx1ZXMuYXBwZW5k
KDAuMCk7CisgICAgY29uc3RleHByIHNpemVfdCBheGlzQ291bnQgPSA0OworICAgIG1fYXhpc1Zh
bHVlcyA9IFZlY3RvcihheGlzQ291bnQsIFNoYXJlZEdhbWVwYWRWYWx1ZSB7IDAuMCB9KTsKIAog
ICAgIGF1dG8gaW5wdXRFbGVtZW50cyA9IGhpZERldmljZSgpLnVuaXF1ZUlucHV0RWxlbWVudHNJ
bkRldmljZVRyZWVPcmRlcigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9nYW1lcGFkL21hYy9Mb2dpdGVjaEdhbWVwYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ2FtZXBhZC9tYWMvTG9naXRlY2hHYW1lcGFkLmNwcAppbmRleCA2NzE0M2ZiOTk1YmEyYzNl
NjhkZDIxMWQxNjViZTYyMGNlZjc4OWVmLi43ODBkNGEzZjllYTI1M2JiZDdlNzJjNGZiZmNkMDVm
ZWUwMzIxYThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21h
Yy9Mb2dpdGVjaEdhbWVwYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVw
YWQvbWFjL0xvZ2l0ZWNoR2FtZXBhZC5jcHAKQEAgLTQzLDEyICs0MywxMCBAQCBMb2dpdGVjaEdh
bWVwYWQ6OkxvZ2l0ZWNoR2FtZXBhZChISUREZXZpY2UmJiBkZXZpY2UsIHVuc2lnbmVkIGluZGV4
KQogCiAgICAgbV9tYXBwaW5nID0gc3RhbmRhcmRHYW1lcGFkTWFwcGluZ1N0cmluZygpOwogCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlN0YW5kYXJkR2FtZXBhZEJ1dHRvbnNX
aXRob3V0SG9tZUJ1dHRvbjsgKytpKQotICAgICAgICBtX2J1dHRvblZhbHVlcy5hcHBlbmQoMC4w
KTsKKyAgICBtX2J1dHRvblZhbHVlcyA9IFZlY3RvcihudW1iZXJPZlN0YW5kYXJkR2FtZXBhZEJ1
dHRvbnNXaXRob3V0SG9tZUJ1dHRvbiwgU2hhcmVkR2FtZXBhZFZhbHVlIHsgMC4wIH0pOwogCi0g
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBheGlzQ291bnQgPSA0OwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYXhpc0NvdW50OyArK2kpCi0gICAgICAgIG1fYXhpc1ZhbHVlcy5hcHBlbmQoMC4w
KTsKKyAgICBjb25zdGV4cHIgc2l6ZV90IGF4aXNDb3VudCA9IDQ7CisgICAgbV9heGlzVmFsdWVz
ID0gVmVjdG9yKGF4aXNDb3VudCwgU2hhcmVkR2FtZXBhZFZhbHVlIHsgMC4wIH0pOwogCiAgICAg
YXV0byBpbnB1dEVsZW1lbnRzID0gaGlkRGV2aWNlKCkudW5pcXVlSW5wdXRFbGVtZW50c0luRGV2
aWNlVHJlZU9yZGVyKCk7CiAKQEAgLTU5LDExICs1NywxMiBAQCBMb2dpdGVjaEdhbWVwYWQ6Okxv
Z2l0ZWNoR2FtZXBhZChISUREZXZpY2UmJiBkZXZpY2UsIHVuc2lnbmVkIGluZGV4KQogICAgIGZv
ciAoYXV0byYgZWxlbWVudCA6IGlucHV0RWxlbWVudHMpIHsKICAgICAgICAgc3dpdGNoIChlbGVt
ZW50LmZ1bGxVc2FnZSgpKSB7CiAgICAgICAgIGNhc2UgaGlkSGF0c3dpdGNoRnVsbFVzYWdlOiB7
Ci0gICAgICAgICAgICBWZWN0b3I8U2hhcmVkR2FtZXBhZFZhbHVlPiBoYXRzd2l0Y2hWYWx1ZXM7
Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFsdWVzWyhzaXpl
X3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyVG9wXSk7Ci0gICAgICAgICAgICBoYXRz
d2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJv
bGU6OkxlZnRDbHVzdGVyUmlnaHRdKTsKLSAgICAgICAgICAgIGhhdHN3aXRjaFZhbHVlcy5hcHBl
bmQobV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJC
b3R0b21dKTsKLSAgICAgICAgICAgIGhhdHN3aXRjaFZhbHVlcy5hcHBlbmQobV9idXR0b25WYWx1
ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJMZWZ0XSk7CisgICAgICAg
ICAgICBhdXRvIGhhdHN3aXRjaFZhbHVlcyA9IFZlY3RvcjxTaGFyZWRHYW1lcGFkVmFsdWU+Ojpm
cm9tKAorICAgICAgICAgICAgICAgIG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRv
blJvbGU6OkxlZnRDbHVzdGVyVG9wXSwKKyAgICAgICAgICAgICAgICBtX2J1dHRvblZhbHVlc1so
c2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlclJpZ2h0XSwKKyAgICAgICAgICAg
ICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3Rl
ckJvdHRvbV0sCisgICAgICAgICAgICAgICAgbV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFk
QnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJMZWZ0XQorICAgICAgICAgICAgKTsKIAogICAgICAgICAg
ICAgbV9lbGVtZW50TWFwLnNldChlbGVtZW50LmNvb2tpZSgpLCBtYWtlVW5pcXVlPEhJREdhbWVw
YWRIYXRzd2l0Y2g+KGVsZW1lbnQsIFdURk1vdmUoaGF0c3dpdGNoVmFsdWVzKSkpOwogICAgICAg
ICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFk
L21hYy9TdGFkaWFISURHYW1lcGFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVw
YWQvbWFjL1N0YWRpYUhJREdhbWVwYWQuY3BwCmluZGV4IDBhOTRlNTYyMzNhMjA0NDY0MWYxMDBm
MDU2NDRkNTc1YWRiYzllNzMuLjM3NTIxMzQ0NjRjNzg1NjdjYjZiZTE4ZjAwZWE1N2Y4OWFiN2Jk
MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL1N0YWRp
YUhJREdhbWVwYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFj
L1N0YWRpYUhJREdhbWVwYWQuY3BwCkBAIC00MSwxMiArNDEsMTAgQEAgU3RhZGlhSElER2FtZXBh
ZDo6U3RhZGlhSElER2FtZXBhZChISUREZXZpY2UmJiBkZXZpY2UsIHVuc2lnbmVkIGluZGV4KQog
CiAgICAgbV9tYXBwaW5nID0gc3RhbmRhcmRHYW1lcGFkTWFwcGluZ1N0cmluZygpOwogCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCAxOTsgKytpKQotICAgICAgICBtX2J1dHRvblZhbHVlcy5h
cHBlbmQoMC4wKTsKKyAgICBtX2J1dHRvblZhbHVlcyA9IFZlY3RvcigxOSwgU2hhcmVkR2FtZXBh
ZFZhbHVlIHsgMC4wIH0pOwogCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBheGlzQ291bnQgPSA0
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXhpc0NvdW50OyArK2kpCi0gICAgICAgIG1f
YXhpc1ZhbHVlcy5hcHBlbmQoMC4wKTsKKyAgICBjb25zdGV4cHIgc2l6ZV90IGF4aXNDb3VudCA9
IDQ7CisgICAgbV9heGlzVmFsdWVzID0gVmVjdG9yKGF4aXNDb3VudCwgU2hhcmVkR2FtZXBhZFZh
bHVlIHsgMC4wIH0pOwogCiAgICAgYXV0byBpbnB1dEVsZW1lbnRzID0gaGlkRGV2aWNlKCkudW5p
cXVlSW5wdXRFbGVtZW50c0luRGV2aWNlVHJlZU9yZGVyKCk7CiAKQEAgLTcwLDExICs2OCwxMiBA
QCBTdGFkaWFISURHYW1lcGFkOjpTdGFkaWFISURHYW1lcGFkKEhJRERldmljZSYmIGRldmljZSwg
dW5zaWduZWQgaW5kZXgpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIGhpZEhh
dHN3aXRjaEZ1bGxVc2FnZTogewotICAgICAgICAgICAgVmVjdG9yPFNoYXJlZEdhbWVwYWRWYWx1
ZT4gaGF0c3dpdGNoVmFsdWVzOwotICAgICAgICAgICAgaGF0c3dpdGNoVmFsdWVzLmFwcGVuZCht
X2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlclRvcF0p
OwotICAgICAgICAgICAgaGF0c3dpdGNoVmFsdWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1soc2l6
ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlclJpZ2h0XSk7Ci0gICAgICAgICAgICBo
YXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRv
blJvbGU6OkxlZnRDbHVzdGVyQm90dG9tXSk7Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMu
YXBwZW5kKG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVz
dGVyTGVmdF0pOworICAgICAgICAgICAgYXV0byBoYXRzd2l0Y2hWYWx1ZXMgPSBWZWN0b3I8U2hh
cmVkR2FtZXBhZFZhbHVlPjo6ZnJvbSgKKyAgICAgICAgICAgICAgICBtX2J1dHRvblZhbHVlc1so
c2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlclRvcF0sCisgICAgICAgICAgICAg
ICAgbV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJS
aWdodF0sCisgICAgICAgICAgICAgICAgbV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0
dG9uUm9sZTo6TGVmdENsdXN0ZXJCb3R0b21dLAorICAgICAgICAgICAgICAgIG1fYnV0dG9uVmFs
dWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyTGVmdF0KKyAgICAgICAg
ICAgICk7CiAKICAgICAgICAgICAgIG1fZWxlbWVudE1hcC5zZXQoZWxlbWVudC5jb29raWUoKSwg
bWFrZVVuaXF1ZTxISURHYW1lcGFkSGF0c3dpdGNoPihlbGVtZW50LCBXVEZNb3ZlKGhhdHN3aXRj
aFZhbHVlcykpKTsKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAppbmRleCAxZmVlMjlhZTVmNzE5YzRl
NTU0YTJjN2U3MGNiNzBmMDFmOWIyMDAyLi43MjRmYjE3YzMzZjRiY2E0Njg4OWM4M2JjNTU4NDhm
ZDcyNzBjMzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyLmNwcApAQCAtNzYzLDExICs3NjMsOSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXI6
OmFkZFJlcGFpbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVwYWludFJlY3QpCiAgICAgRmxvYXRS
ZWN0IGxhcmdlc3RSZXBhaW50UmVjdChGbG9hdFBvaW50KCksIG1fc2l6ZSk7CiAgICAgbGFyZ2Vz
dFJlcGFpbnRSZWN0LmludGVyc2VjdChyZXBhaW50UmVjdCk7CiAgICAgUmVwYWludE1hcDo6aXRl
cmF0b3IgcmVwYWludEl0ID0gcmVwYWludFJlY3RNYXAoKS5maW5kKHRoaXMpOwotICAgIGlmIChy
ZXBhaW50SXQgPT0gcmVwYWludFJlY3RNYXAoKS5lbmQoKSkgewotICAgICAgICBWZWN0b3I8Rmxv
YXRSZWN0PiByZXBhaW50UmVjdHM7Ci0gICAgICAgIHJlcGFpbnRSZWN0cy5hcHBlbmQobGFyZ2Vz
dFJlcGFpbnRSZWN0KTsKLSAgICAgICAgcmVwYWludFJlY3RNYXAoKS5zZXQodGhpcywgcmVwYWlu
dFJlY3RzKTsKLSAgICB9IGVsc2UgeworICAgIGlmIChyZXBhaW50SXQgPT0gcmVwYWludFJlY3RN
YXAoKS5lbmQoKSkKKyAgICAgICAgcmVwYWludFJlY3RNYXAoKS5zZXQodGhpcywgVmVjdG9yIHsg
V1RGTW92ZShsYXJnZXN0UmVwYWludFJlY3QpIH0pOworICAgIGVsc2UgewogICAgICAgICBWZWN0
b3I8RmxvYXRSZWN0PiYgcmVwYWludFJlY3RzID0gcmVwYWludEl0LT52YWx1ZTsKICAgICAgICAg
cmVwYWludFJlY3RzLmFwcGVuZChsYXJnZXN0UmVwYWludFJlY3QpOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5jcHAKaW5kZXgg
Yjk3OTlhNGQxMDYxZWQyMGExYjUwZWQ1MDY4NjUxYzVmZWE0NjZhNC4uNzdkYzk4MzVkNTYxMmY2
NjgxNzI0ZjdiNzZjYmExMDM5NmM3YzM4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5jcHAKQEAgLTI5MCwxNyArMjkwLDE0IEBAIHN0
YXRpYyBWZWN0b3I8RmxvYXRQb2ludEdyYXBoOjpQb2x5Z29uPiBwb2x5Z29uc0ZvclJlY3QoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mCiAKIFZlY3RvcjxQYXRoPiBQYXRoVXRpbGl0aWVzOjpwYXRo
c1dpdGhTaHJpbmtXcmFwcGVkUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBm
bG9hdCByYWRpdXMpCiB7Ci0gICAgVmVjdG9yPFBhdGg+IHBhdGhzOwotCiAgICAgaWYgKHJlY3Rz
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHBhdGhzOworICAgICAgICByZXR1cm4geyB9Owog
CiAgICAgaWYgKHJlY3RzLnNpemUoKSA+IDIwKSB7CiAgICAgICAgIFBhdGggcGF0aDsKICAgICAg
ICAgZm9yIChjb25zdCBhdXRvJiByZWN0IDogcmVjdHMpCiAgICAgICAgICAgICBwYXRoLmFkZFJv
dW5kZWRSZWN0KHJlY3QsIEZsb2F0U2l6ZShyYWRpdXMsIHJhZGl1cykpOwotICAgICAgICBwYXRo
cy5hcHBlbmQocGF0aCk7Ci0gICAgICAgIHJldHVybiBwYXRoczsKKyAgICAgICAgcmV0dXJuIHsg
V1RGTW92ZShwYXRoKSB9OwogICAgIH0KIAogICAgIEZsb2F0UG9pbnRHcmFwaCBncmFwaDsKQEAg
LTMwOSwxMCArMzA2LDEwIEBAIFZlY3RvcjxQYXRoPiBQYXRoVXRpbGl0aWVzOjpwYXRoc1dpdGhT
aHJpbmtXcmFwcGVkUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mCiAgICAgICAgIFBhdGgg
cGF0aDsKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiByZWN0IDogcmVjdHMpCiAgICAgICAgICAg
ICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QsIEZsb2F0U2l6ZShyYWRpdXMsIHJhZGl1cykpOwot
ICAgICAgICBwYXRocy5hcHBlbmQocGF0aCk7Ci0gICAgICAgIHJldHVybiBwYXRoczsKKyAgICAg
ICAgcmV0dXJuIHsgV1RGTW92ZShwYXRoKSB9OwogICAgIH0KIAorICAgIFZlY3RvcjxQYXRoPiBw
YXRoczsKICAgICBmb3IgKGF1dG8mIHBvbHkgOiBwb2x5cykgewogICAgICAgICBQYXRoIHBhdGg7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwb2x5LnNpemUoKTsgKytpKSB7CkBA
IC0zNDQsNyArMzQxLDcgQEAgVmVjdG9yPFBhdGg+IFBhdGhVdGlsaXRpZXM6OnBhdGhzV2l0aFNo
cmlua1dyYXBwZWRSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYKICAgICAgICAgICAgIHBh
dGguYWRkQXJjVG8oKmZyb21FZGdlLnNlY29uZCwgKnRvRWRnZS5maXJzdCArIHRvT2Zmc2V0LCBj
bGFtcGVkUmFkaXVzKTsKICAgICAgICAgfQogICAgICAgICBwYXRoLmNsb3NlU3VicGF0aCgpOwot
ICAgICAgICBwYXRocy5hcHBlbmQocGF0aCk7CisgICAgICAgIHBhdGhzLmFwcGVuZChXVEZNb3Zl
KHBhdGgpKTsKICAgICB9CiAgICAgcmV0dXJuIHBhdGhzOwogfQpAQCAtNTQzLDEzICs1NDAsMTQg
QEAgUGF0aCBQYXRoVXRpbGl0aWVzOjpwYXRoV2l0aFNocmlua1dyYXBwZWRSZWN0c0Zvck91dGxp
bmUoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4KICAgICBib3R0b21MZWZ0UmFkaXVzID0gZmlyc3RM
aW5lUmFkaWkuYm90dG9tTGVmdCgpOwogICAgIHRvcFJpZ2h0UmFkaXVzID0gbGFzdExpbmVSYWRp
aS50b3BSaWdodCgpOwogICAgIGJvdHRvbVJpZ2h0UmFkaXVzID0gbGFzdExpbmVSYWRpaS5ib3R0
b21SaWdodCgpOwotICAgIFZlY3RvcjxGbG9hdFBvaW50PiBjb3JuZXJzOwogICAgIC8vIHBoeXNp
Y2FsIHRvcExlZnQvdG9wUmlnaHQvYm90dG9tUmlnaHQvYm90dG9tTGVmdAogICAgIGF1dG8gaXNI
b3Jpem9udGFsID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpOwotICAgIGNv
cm5lcnMuYXBwZW5kKGZpcnN0TGluZVJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci0gICAgY29ybmVy
cy5hcHBlbmQoaXNIb3Jpem9udGFsID8gbGFzdExpbmVSZWN0Lm1heFhNaW5ZQ29ybmVyKCkgOiBm
aXJzdExpbmVSZWN0Lm1heFhNaW5ZQ29ybmVyKCkpOwotICAgIGNvcm5lcnMuYXBwZW5kKGxhc3RM
aW5lUmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKLSAgICBjb3JuZXJzLmFwcGVuZChpc0hvcml6b250
YWwgPyBmaXJzdExpbmVSZWN0Lm1pblhNYXhZQ29ybmVyKCkgOiBsYXN0TGluZVJlY3QubWluWE1h
eFlDb3JuZXIoKSk7CisgICAgYXV0byBjb3JuZXJzID0gVmVjdG9yPEZsb2F0UG9pbnQ+Ojpmcm9t
KAorICAgICAgICBmaXJzdExpbmVSZWN0Lm1pblhNaW5ZQ29ybmVyKCksCisgICAgICAgIGlzSG9y
aXpvbnRhbCA/IGxhc3RMaW5lUmVjdC5tYXhYTWluWUNvcm5lcigpIDogZmlyc3RMaW5lUmVjdC5t
YXhYTWluWUNvcm5lcigpLAorICAgICAgICBsYXN0TGluZVJlY3QubWF4WE1heFlDb3JuZXIoKSwK
KyAgICAgICAgaXNIb3Jpem9udGFsID8gZmlyc3RMaW5lUmVjdC5taW5YTWF4WUNvcm5lcigpIDog
bGFzdExpbmVSZWN0Lm1pblhNYXhZQ29ybmVyKCkKKyAgICApOwogCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHBvbHkuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgYXV0byBtb3ZlT3JBZGRM
aW5lVG8gPSBbaSwgJnBhdGhdIChjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2
YXRlLmNwcAppbmRleCA1NDk5ZjM3YTdmMzY0NmJkNWYzOTVhNDhiMDlkOTQxMWQ0YzliNjY0Li4w
NGNiZTRkMjdmMTkwYjdiMjdiOWNhN2U5OGE5YzQ3MTczZDJmODliIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNw
cApAQCAtMjE2LDEwICsyMTYsOSBAQCB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGU6OmJ1ZmZlcmVk
U2FtcGxlc0ZvclRyYWNrSWQoY29uc3QgQXRvbVN0cmluZyYgdHJhY2tJZCwgQwogICAgIGlmICgh
dHJhY2tCdWZmZXIpCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAKLSAgICBWZWN0
b3I8U3RyaW5nPiBzYW1wbGVEZXNjcmlwdGlvbnM7Ci0gICAgZm9yIChhdXRvJiBwYWlyIDogdHJh
Y2tCdWZmZXItPnNhbXBsZXMuZGVjb2RlT3JkZXIoKSkKLSAgICAgICAgc2FtcGxlRGVzY3JpcHRp
b25zLmFwcGVuZCh0b1N0cmluZygqcGFpci5zZWNvbmQpKTsKLQorICAgIGF1dG8gc2FtcGxlRGVz
Y3JpcHRpb25zID0gV1RGOjptYXAodHJhY2tCdWZmZXItPnNhbXBsZXMuZGVjb2RlT3JkZXIoKSwg
W10oYXV0byYgZW50cnkpIHsKKyAgICAgICAgcmV0dXJuIHRvU3RyaW5nKCplbnRyeS5zZWNvbmQp
OworICAgIH0pOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoc2FtcGxlRGVzY3JpcHRp
b25zKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCmlu
ZGV4IDhiMDRmOWJlOTZjMzZlMGEyNjIxODBhMjVlYTM3NDU5NjJiM2Q3ZDUuLmM1NDYxNDYyM2I4
N2VjMDg5NjFmMWQ0NDIwZjk2MDFmMTZhNmFiNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZh
aXJQbGF5U3RyZWFtaW5nLmNwcApAQCAtMjAxLDkgKzIwMSw3IEBAIFJlZlB0cjxGcmFnbWVudGVk
U2hhcmVkQnVmZmVyPiBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OnNhbml0aXplU2tkKGNv
bnN0IEZyCiBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxSZWY8RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4+
PiBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OmV4dHJhY3RLZXlJRHNTa2QoY29uc3QgRnJh
Z21lbnRlZFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogewogICAgIC8vIEluIHRoZSAnc2tkJyBzY2hl
bWUsIHRoZSBpbml0IGRhdGEgaXMgdGhlIGtleSBJRC4KLSAgICBWZWN0b3I8UmVmPEZyYWdtZW50
ZWRTaGFyZWRCdWZmZXI+PiBrZXlJRHM7Ci0gICAga2V5SURzLmFwcGVuZChidWZmZXIuY29weSgp
KTsKLSAgICByZXR1cm4ga2V5SURzOworICAgIHJldHVybiBWZWN0b3IgeyBidWZmZXIuY29weSgp
IH07CiB9CiAKIHN0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hTZXQ8QXRvbVN0cmluZz4mIHZhbGlkSW5pdERhdGFUeXBlcygpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5j
ZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZP
YmpDLm1tCmluZGV4IGQ2MzYxMmZhYTA1MzcwYTAzOTczYTFlMmQ1NmMxODY4YTJmOTkxNjAuLjk2
MjVmYTk1MDNlN2JlYmM3MTlmYzRiMzdhNjNjMzhkNzQ1MDMwOGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNl
RmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdB
VkZPYmpDLm1tCkBAIC0xNDk0LDcgKzE0OTQsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZh
aXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6dXBkYXRlS2V5U3RhdHVzZXMoc3RkOjpvcHRpb25hbAog
ICAgICAgICB9CiAgICAgfQogCi0gICAgbV9rZXlTdGF0dXNlcy5zd2FwKGtleVN0YXR1c2VzKTsK
KyAgICBtX2tleVN0YXR1c2VzID0gV1RGTW92ZShrZXlTdGF0dXNlcyk7CiAKICAgICBtX2luc3Rh
bmNlLT5zZXNzaW9uS2V5U3RhdHVzZXNDaGFuZ2VkKCp0aGlzKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVj
b2RlckFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1tCmluZGV4IDU2M2FmMTkyNGQ5YWYzNTll
OTMwZWY2NGJhZTMyM2ZjMDQxZGU4N2EuLmFkN2Y0NTEwMWMwNmExODg4YzAwOGZhZWQ0YTkxOTA1
NjEzODI5M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVjb2RlckFWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVyQVZGT2Jq
Qy5tbQpAQCAtNTM1LDEzICs1MzUsMTAgQEAgVmVjdG9yPEltYWdlRGVjb2Rlcjo6RnJhbWVJbmZv
PiBJbWFnZURlY29kZXJBVkZPYmpDOjpmcmFtZUluZm9zKCkgY29uc3QKICAgICBpZiAobV9zYW1w
bGVEYXRhLmVtcHR5KCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBWZWN0b3I8SW1hZ2VE
ZWNvZGVyOjpGcmFtZUluZm8+IGluZm9zOwotICAgIGZvciAoYXV0byYgc2FtcGxlIDogbV9zYW1w
bGVEYXRhLnByZXNlbnRhdGlvbk9yZGVyKCkpIHsKKyAgICByZXR1cm4gV1RGOjptYXAobV9zYW1w
bGVEYXRhLnByZXNlbnRhdGlvbk9yZGVyKCksIFtdKGF1dG8mIHNhbXBsZSkgewogICAgICAgICBh
dXRvKiBpbWFnZVNhbXBsZSA9IChJbWFnZURlY29kZXJBVkZPYmpDU2FtcGxlKilzYW1wbGUuc2Vj
b25kLmdldCgpOwotICAgICAgICBpbmZvcy5hcHBlbmQoeyBpbWFnZVNhbXBsZS0+aGFzQWxwaGEo
KSwgU2Vjb25kcyhpbWFnZVNhbXBsZS0+ZHVyYXRpb24oKS50b0RvdWJsZSgpKX0pOwotICAgIH0K
LQotICAgIHJldHVybiBpbmZvczsKKyAgICAgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6RnJhbWVJ
bmZvIHsgaW1hZ2VTYW1wbGUtPmhhc0FscGhhKCksIFNlY29uZHMoaW1hZ2VTYW1wbGUtPmR1cmF0
aW9uKCkudG9Eb3VibGUoKSkgfTsKKyAgICB9KTsKIH0KIAogYm9vbCBJbWFnZURlY29kZXJBVkZP
YmpDOjpmcmFtZUFsbG93U3Vic2FtcGxpbmdBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL1NvdXJjZUJ1ZmZlclBhcnNlckFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQYXJzZXJBVkZPYmpDLm1t
CmluZGV4IGFhMTU4NDA0YjEwZTQ0NGFmNmU1ZWRkYzhkYWQ2YmE5NmVkNWNiMjIuLmU2MWIxNDdm
NjNjNWY0NTcyNzVmNjA1MDNlMzdhOGI1MmQxOGUzYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclBhcnNl
ckFWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvU291cmNlQnVmZmVyUGFyc2VyQVZGT2JqQy5tbQpAQCAtMjk3LDE2ICsyOTcs
MTQgQEAgdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJBVkZPYmpDOjpkaWRQYXJzZVN0cmVhbURhdGFB
c0Fzc2V0KEFWQXNzZXQqIGFzc2V0KQogCiAgICAgICAgICAgICBpZiAoW3RyYWNrIGhhc01lZGlh
Q2hhcmFjdGVyaXN0aWM6QVZNZWRpYUNoYXJhY3RlcmlzdGljVmlzdWFsXSkgewogICAgICAgICAg
ICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudDo6
VmlkZW9UcmFja0luZm9ybWF0aW9uIGluZm87Ci0gICAgICAgICAgICAgICAgYXV0byB2aWRlb1Ry
YWNrID0gVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmNyZWF0ZSh0cmFjayk7
Ci0gICAgICAgICAgICAgICAgaW5mby50cmFjayA9IHZpZGVvVHJhY2suY29weVJlZigpOworICAg
ICAgICAgICAgICAgIGluZm8udHJhY2sgPSBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQzo6Y3JlYXRlKHRyYWNrKTsKICAgICAgICAgICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0g
TWVkaWFEZXNjcmlwdGlvbkFWRk9iakM6OmNyZWF0ZSh0cmFjayk7Ci0gICAgICAgICAgICAgICAg
c2VnbWVudC52aWRlb1RyYWNrcy5hcHBlbmQoaW5mbyk7CisgICAgICAgICAgICAgICAgc2VnbWVu
dC52aWRlb1RyYWNrcy5hcHBlbmQoV1RGTW92ZShpbmZvKSk7CiAgICAgICAgICAgICB9IGVsc2Ug
aWYgKFt0cmFjayBoYXNNZWRpYUNoYXJhY3RlcmlzdGljOkFWTWVkaWFDaGFyYWN0ZXJpc3RpY0F1
ZGlibGVdKSB7CiAgICAgICAgICAgICAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5p
dGlhbGl6YXRpb25TZWdtZW50OjpBdWRpb1RyYWNrSW5mb3JtYXRpb24gaW5mbzsKLSAgICAgICAg
ICAgICAgICBhdXRvIGF1ZGlvVHJhY2sgPSBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQzo6Y3JlYXRlKHRyYWNrKTsKLSAgICAgICAgICAgICAgICBpbmZvLnRyYWNrID0gYXVkaW9U
cmFjay5jb3B5UmVmKCk7CisgICAgICAgICAgICAgICAgaW5mby50cmFjayA9IEF1ZGlvVHJhY2tQ
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjcmVhdGUodHJhY2spOwogICAgICAgICAgICAgICAg
IGluZm8uZGVzY3JpcHRpb24gPSBNZWRpYURlc2NyaXB0aW9uQVZGT2JqQzo6Y3JlYXRlKHRyYWNr
KTsKLSAgICAgICAgICAgICAgICBzZWdtZW50LmF1ZGlvVHJhY2tzLmFwcGVuZChpbmZvKTsKKyAg
ICAgICAgICAgICAgICBzZWdtZW50LmF1ZGlvVHJhY2tzLmFwcGVuZChXVEZNb3ZlKGluZm8pKTsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gRklYTUUoMTI1MTYxKSAgICA6IEFkZCBU
ZXh0VHJhY2sgc3VwcG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCmluZGV4IDg1NDIx
ZTNkZTcwOWNlMTU5YzQ5NGI0MGZiOGQxYWQyMzU5M2MzYmIuLjk3OTViNmVjNTU3ZTU0ZTIyMWM4
YjQ2ZGQ3MjQ5MDA2MjRkYjZiNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KQEAg
LTY4LDExICs2OCwxMSBAQCBWZWN0b3I8Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFZhcmlhdGlvbkF4
aXM+IEZvbnRQbGF0Zm9ybURhdGE6OnZhcmlhdGlvbkF4ZXMoU2hvdQogICAgIGlmICghcGxhdGZv
cm1Gb250KQogICAgICAgICByZXR1cm4geyB9OwogICAgIAotICAgIFZlY3RvcjxGb250VmFyaWF0
aW9uQXhpcz4gcmVzdWx0czsKLSAgICBmb3IgKGF1dG8mIFt0YWcsIHZhbHVlc10gOiBkZWZhdWx0
VmFyaWF0aW9uVmFsdWVzKHBsYXRmb3JtRm9udCwgc2hvdWxkTG9jYWxpemVBeGlzTmFtZXMpKQot
ICAgICAgICByZXN1bHRzLmFwcGVuZChGb250UGxhdGZvcm1EYXRhOjpGb250VmFyaWF0aW9uQXhp
cyh2YWx1ZXMuYXhpc05hbWUsIFN0cmluZyh0YWcuZGF0YSgpLCB0YWcuc2l6ZSgpKSwgdmFsdWVz
LmRlZmF1bHRWYWx1ZSwgdmFsdWVzLm1pbmltdW1WYWx1ZSwgdmFsdWVzLm1heGltdW1WYWx1ZSkp
OwotICAgIAotICAgIHJldHVybiByZXN1bHRzOworICAgIGF1dG8gbWFwID0gZGVmYXVsdFZhcmlh
dGlvblZhbHVlcyhwbGF0Zm9ybUZvbnQsIHNob3VsZExvY2FsaXplQXhpc05hbWVzKTsKKyAgICBy
ZXR1cm4gV1RGOjptYXAobWFwLCBbXShhdXRvJiBlbnRyeSkgeworICAgICAgICBhdXRvJiBbdGFn
LCB2YWx1ZXNdID0gZW50cnk7CisgICAgICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhOjpGb250
VmFyaWF0aW9uQXhpcyB7IHZhbHVlcy5heGlzTmFtZSwgU3RyaW5nKHRhZy5kYXRhKCksIHRhZy5z
aXplKCkpLCB2YWx1ZXMuZGVmYXVsdFZhbHVlLCB2YWx1ZXMubWluaW11bVZhbHVlLCB2YWx1ZXMu
bWF4aW11bVZhbHVlIH07CisgICAgfSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvUGFzdGVib2FyZE1hYy5tbQppbmRleCBiYThlYTFlYjQ0OGE5MjFlMzBkM2FlNmE5Yzc3
ZTg4MjMzYWJjNTNiLi5hMmMyNTBhYTJiZWY4ZGU5NjRiYWYwOTI0MGQ1ZTBlYzQxNTBlZjg0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQpAQCAtNzAy
LDEwICs3MDIsNyBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgogICAgICAg
ICBOU1VSTCAqdXJsID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6Y29jb2FEYXRhXTsKICAgICAgICAg
aWYgKFt1cmwgaXNGaWxlVVJMXSkKICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBWZWN0
b3I8U3RyaW5nPiB0eXBlczsKLSAgICAgICAgdHlwZXMuYXBwZW5kKGNvY29hVHlwZSk7Ci0gICAg
ICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0VHlwZXMo
dHlwZXMsIG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQoKSk7CisgICAgICAgIHBsYXRmb3JtU3Ry
YXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0VHlwZXMoeyBjb2NvYVR5cGUgfSwg
bV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKTsKICAgICAgICAgbV9jaGFuZ2VDb3VudCA9IHBs
YXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0U3RyaW5nRm9yVHlw
ZShjb2NvYURhdGEsIGNvY29hVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKTsKIAog
ICAgICAgICByZXR1cm47CkBAIC03MTQsOSArNzExLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfRU5ECiAKICAgICBpZiAoIWNvY29hVHlwZS5pc0VtcHR5KCkpIHsKICAgICAgICAg
Ly8gZXZlcnl0aGluZyBlbHNlIHdlIGtub3cgb2YgZ29lcyBvbiB0aGUgcGJvYXJkIGFzIGEgc3Ry
aW5nCi0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwotICAgICAgICB0eXBlcy5hcHBlbmQo
Y29jb2FUeXBlKTsKLSAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJh
dGVneSgpLT5hZGRUeXBlcyh0eXBlcywgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKTsKKyAg
ICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5hZGRUeXBl
cyh7IGNvY29hVHlwZSB9LCBtX3Bhc3RlYm9hcmROYW1lLCBjb250ZXh0KCkpOwogICAgICAgICBt
X2NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgp
LT5zZXRTdHJpbmdGb3JUeXBlKGNvY29hRGF0YSwgY29jb2FUeXBlLCBtX3Bhc3RlYm9hcmROYW1l
LCBjb250ZXh0KCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlLmNw
cAppbmRleCAzZTNmNDFhMWM1ODA3ZTZjZDM1OWRlM2RmMjZhZTcyZDU1MWNkNTgyLi43N2QzMjY2
NTZkNWNiYzVhZWZjZDQxN2ExN2E4N2E0NmY3MTIyN2JlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZVZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVWaWRlb0Nh
cHR1cmVTb3VyY2UuY3BwCkBAIC03NSwxMSArNzUsOSBAQCBWZWN0b3I8VmlkZW9QcmVzZXREYXRh
PiBSZWFsdGltZVZpZGVvQ2FwdHVyZVNvdXJjZTo6cHJlc2V0c0RhdGEoKQogCiB2b2lkIFJlYWx0
aW1lVmlkZW9DYXB0dXJlU291cmNlOjpzZXRTdXBwb3J0ZWRQcmVzZXRzKFZlY3RvcjxWaWRlb1By
ZXNldERhdGE+JiYgcHJlc2V0RGF0YSkKIHsKLSAgICBWZWN0b3I8UmVmPFZpZGVvUHJlc2V0Pj4g
cHJlc2V0czsKLQotICAgIGZvciAoYXV0byYgZGF0YSA6IHByZXNldERhdGEpCi0gICAgICAgIHBy
ZXNldHMuYXBwZW5kKFZpZGVvUHJlc2V0OjpjcmVhdGUoV1RGTW92ZShkYXRhKSkpOwotCisgICAg
YXV0byBwcmVzZXRzID0gV1RGOjptYXAoV1RGTW92ZShwcmVzZXREYXRhKSwgW10oYXV0byYmIGRh
dGEpIHsKKyAgICAgICAgcmV0dXJuIFZpZGVvUHJlc2V0OjpjcmVhdGUoV1RGTW92ZShkYXRhKSk7
CisgICAgfSk7CiAgICAgc2V0U3VwcG9ydGVkUHJlc2V0cyhXVEZNb3ZlKHByZXNldHMpKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0
cnlJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5
SW1wbC5jcHAKaW5kZXggNjdhNzYyOTVkODVmMzkxYzgzYjI0MDBlNmQxZmU1NzljY2RlZDg4Zi4u
NjIzNjM2YWMyYWJkNjgzODQxNGRjOGYxZjkyNmNlZDVjNDdjY2EyYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCkBAIC0x
NDEsMTAgKzE0MSw4IEBAIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMKGNv
bnN0IFVSTCYgdXJsLCBWZWN0b3I8QmxvYlBhcnQ+JiYgYmxvYlBhCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIEJsb2JQYXJ0OjpUeXBlOjpCbG9iOiB7Ci0gICAg
ICAgICAgICBpZiAoYXV0byBibG9iID0gbV9ibG9icy5nZXQocGFydC51cmwoKS5zdHJpbmcoKSkp
IHsKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSA6IGJsb2It
Pml0ZW1zKCkpCi0gICAgICAgICAgICAgICAgICAgIGJsb2JEYXRhLT5tX2l0ZW1zLmFwcGVuZChp
dGVtKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhdXRvIGJsb2IgPSBtX2Jsb2Jz
LmdldChwYXJ0LnVybCgpLnN0cmluZygpKSkKKyAgICAgICAgICAgICAgICBibG9iRGF0YS0+bV9p
dGVtcy5hcHBlbmRWZWN0b3IoYmxvYi0+aXRlbXMoKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICB9CkBAIC0zMjgsNyArMzI2LDcgQEAgdm9pZCBCbG9iUmVnaXN0cnlJ
bXBsOjp3cml0ZUJsb2JzVG9UZW1wb3JhcnlGaWxlc0ZvckluZGV4ZWREQihjb25zdCBWZWN0b3I8
U3RyaW4KICAgICAgICAgICAgICAgICBmaWxlUGF0aHMuY2xlYXIoKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbGVQYXRocy5hcHBlbmQodGVt
cEZpbGVQYXRoLmlzb2xhdGVkQ29weSgpKTsKKyAgICAgICAgICAgIGZpbGVQYXRocy5hcHBlbmQo
V1RGTW92ZSh0ZW1wRmlsZVBhdGgpLmlzb2xhdGVkQ29weSgpKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGNhbGxPbk1haW5UaHJlYWQoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlciksIGZpbGVQYXRocyA9IFdURk1vdmUoZmlsZVBhdGhzKV0gKCkgbXV0YWJsZSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNw
cAppbmRleCA4NTMwZTMzNTVmMmQ2YjhkN2ZmYjZlZGY4M2Q2MDhiY2E0YjlmNTU1Li45YWI5OThl
NDFjYjA4Y2YwYjZmOTBmMTBmMTNjNGI4NDU3ZWM5MzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTIwODYsMTAgKzIwODYs
OCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpkcmF3Qm94U2lkZUZyb21QYXRoKEdyYXBo
aWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LAogICAgICAgICAgICAgICAgIGdhcExlbmd0aCAr
PSAoZGFzaExlbmd0aCAgLyBudW1iZXJPZkdhcHMpOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBEYXNoQXJyYXkgbGluZURhc2g7Ci0gICAgICAgICAgICBsaW5lRGFzaC5hcHBlbmQoZGFz
aExlbmd0aCk7Ci0gICAgICAgICAgICBsaW5lRGFzaC5hcHBlbmQoZ2FwTGVuZ3RoKTsKLSAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRMaW5lRGFzaChsaW5lRGFzaCwgZGFzaExlbmd0aCk7
CisgICAgICAgICAgICBhdXRvIGxpbmVEYXNoID0gRGFzaEFycmF5Ojpmcm9tKGRhc2hMZW5ndGgs
IGdhcExlbmd0aCk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0TGluZURhc2goV1RG
TW92ZShsaW5lRGFzaCksIGRhc2hMZW5ndGgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICAvLyBGSVhNRTogc3Ryb2tpbmcgdGhlIGJvcmRlciBwYXRoIGNhdXNlcyBpc3N1ZXMgd2l0aCB0
aWdodCBjb3JuZXJzOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmNwcAppbmRleCBkYThkZjJlOTIzYjM1NDZlMGYzZDRjNWIzMDVlZmU2NTQwN2U3ODYx
Li40MjVjNjljMzE0MWJmNzRmYTU3MmRmMjBiYjhhMGU0MDU3N2FiODE4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtMTk1Niw5ICsx
OTU2LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbm5lY3RDbGlwcGluZ1N0YWNrTGF5
ZXJzKExheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrJgogICAgIGF1dG8mIGNsaXBwaW5nRW50cnlT
dGFjayA9IGNsaXBwaW5nU3RhY2suc3RhY2soKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgY2xpcHBpbmdFbnRyeVN0YWNrLnNpemUoKSAtIDE7ICsraSkgewogICAgICAgICBhdXRvJiBl
bnRyeSA9IGNsaXBwaW5nRW50cnlTdGFjay5hdChpKTsKLSAgICAgICAgVmVjdG9yPFJlZjxHcmFw
aGljc0xheWVyPj4gY2hpbGRyZW47Ci0gICAgICAgIGNoaWxkcmVuLmFwcGVuZCgqY2xpcHBpbmdF
bnRyeVN0YWNrLmF0KGkgKyAxKS5jbGlwcGluZ0xheWVyKTsKLSAgICAgICAgZW50cnkuY2xpcHBp
bmdMYXllci0+c2V0Q2hpbGRyZW4oV1RGTW92ZShjaGlsZHJlbikpOworICAgICAgICBlbnRyeS5j
bGlwcGluZ0xheWVyLT5zZXRDaGlsZHJlbih7IFJlZiB7ICpjbGlwcGluZ0VudHJ5U3RhY2suYXQo
aSArIDEpLmNsaXBwaW5nTGF5ZXIgfSB9KTsKICAgICB9CiAKICAgICBjbGlwcGluZ0VudHJ5U3Rh
Y2subGFzdCgpLmNsaXBwaW5nTGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCmluZGV4IDBi
ZTAzOWEwZjIzZDU3ZmY3ZjU3ZDk5MDliNjUzNzVhMDI0MjQzYjQuLjIzZDczNzEzNGNhOGVhYTE2
MDVkMGM0NzdhY2U2MjgzZjg0NjIxYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBAIC0xNDkxLDkgKzE0OTEsNyBAQCB2b2lk
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRqdXN0T3ZlcmZsb3dTY3JvbGxiYXJDb250YWluZXJM
YXllcnMoUmVuZGVyTGF5ZXImCiAgICAgICAgICAgICBvdmVyZmxvd0JhY2tpbmctPmVuc3VyZU92
ZXJmbG93Q29udHJvbHNIb3N0TGF5ZXJBbmNlc3RvckNsaXBwaW5nU3RhY2soJnN0YWNraW5nQ29u
dGV4dExheWVyKTsKIAogICAgICAgICBpZiAoYXV0byogb3ZlcmZsb3dDb250cm9sc0FuY2VzdG9y
Q2xpcHBpbmdTdGFjayA9IG92ZXJmbG93QmFja2luZy0+b3ZlcmZsb3dDb250cm9sc0hvc3RMYXll
ckFuY2VzdG9yQ2xpcHBpbmdTdGFjaygpKSB7Ci0gICAgICAgICAgICBWZWN0b3I8UmVmPEdyYXBo
aWNzTGF5ZXI+PiBjaGlsZHJlbjsKLSAgICAgICAgICAgIGNoaWxkcmVuLmFwcGVuZCgqb3ZlcmZs
b3dDb250YWluZXJMYXllcik7Ci0gICAgICAgICAgICBvdmVyZmxvd0NvbnRyb2xzQW5jZXN0b3JD
bGlwcGluZ1N0YWNrLT5sYXN0Q2xpcHBpbmdMYXllcigpLT5zZXRDaGlsZHJlbihXVEZNb3ZlKGNo
aWxkcmVuKSk7CisgICAgICAgICAgICBvdmVyZmxvd0NvbnRyb2xzQW5jZXN0b3JDbGlwcGluZ1N0
YWNrLT5sYXN0Q2xpcHBpbmdMYXllcigpLT5zZXRDaGlsZHJlbih7IFJlZiB7ICpvdmVyZmxvd0Nv
bnRhaW5lckxheWVyIH0gfSk7CiAgICAgICAgICAgICBvdmVyZmxvd0NvbnRhaW5lckxheWVyID0g
b3ZlcmZsb3dDb250cm9sc0FuY2VzdG9yQ2xpcHBpbmdTdGFjay0+Zmlyc3RDbGlwcGluZ0xheWVy
KCk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFj
Lm1tCmluZGV4IDllMTA4ZjhiNGZmMjYxNzk2ODk2NGZhMTM3MDE1MTliYmMyNDUyYzQuLjg3NjY3
ZGUyZGVkMjk1ZDkzNTgwMmIzMzg5MmEwYzMyMWM3ZTMyZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTI3MzEsMTAgKzI3MzEsOSBAQCBzdGF0aWMg
dm9pZCBwYWludEF0dGFjaG1lbnRUaXRsZUJhY2tncm91bmQoY29uc3QgUmVuZGVyQXR0YWNobWVu
dCYgYXR0YWNobWVudCwgRwogICAgIGlmIChsYXlvdXQubGluZXMuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBWZWN0b3I8RmxvYXRSZWN0PiBiYWNrZ3JvdW5kUmVjdHM7Ci0KLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheW91dC5saW5lcy5zaXplKCk7ICsraSkKLSAgICAg
ICAgYmFja2dyb3VuZFJlY3RzLmFwcGVuZChsYXlvdXQubGluZXNbaV0uYmFja2dyb3VuZFJlY3Qp
OworICAgIGF1dG8gYmFja2dyb3VuZFJlY3RzID0gbGF5b3V0LmxpbmVzLm1hcChbXShhdXRvJiBs
aW5lKSB7CisgICAgICAgIHJldHVybiBsaW5lLmJhY2tncm91bmRSZWN0OworICAgIH0pOwogCiAg
ICAgQ29sb3IgYmFja2dyb3VuZENvbG9yOwogICAgIGlmIChhdHRhY2htZW50LmZyYW1lKCkuc2Vs
ZWN0aW9uKCkuaXNGb2N1c2VkQW5kQWN0aXZlKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IGZlNTU5YmQ3MGIx
ZDBjZjRiMWM1YTViMWM5MGEyOTYzNWU4YjI3MzEuLjkyNzZiOTNjNzMxMjYxYzFmMmZmYmVjNDlm
MWVjY2U3M2NhMWJiNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtMTk3LDExICsxOTcsOSBAQCBzdGF0aWMgdm9p
ZCB3cml0ZVNWR1N0cm9rZVBhaW50aW5nUmVzb3VyY2UoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJl
bmRlckVsZW1lbnQmCiAgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5ndGhDb250ZXh0KCZzaGFwZSk7
CiAgICAgZG91YmxlIGRhc2hPZmZzZXQgPSBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN2
Z1N0eWxlLnN0cm9rZURhc2hPZmZzZXQoKSk7CiAgICAgZG91YmxlIHN0cm9rZVdpZHRoID0gbGVu
Z3RoQ29udGV4dC52YWx1ZUZvckxlbmd0aChzdHlsZS5zdHJva2VXaWR0aCgpKTsKLSAgICBjb25z
dCBhdXRvJiBkYXNoZXMgPSBzdmdTdHlsZS5zdHJva2VEYXNoQXJyYXkoKTsKLQotICAgIERhc2hB
cnJheSBkYXNoQXJyYXk7Ci0gICAgZm9yIChhdXRvJiBsZW5ndGggOiBkYXNoZXMpCi0gICAgICAg
IGRhc2hBcnJheS5hcHBlbmQobGVuZ3RoLnZhbHVlKGxlbmd0aENvbnRleHQpKTsKKyAgICBhdXRv
IGRhc2hBcnJheSA9IHN2Z1N0eWxlLnN0cm9rZURhc2hBcnJheSgpLm1hcChbJl0oYXV0byYgbGVu
Z3RoKSAtPiBEYXNoQXJyYXlFbGVtZW50IHsKKyAgICAgICAgcmV0dXJuIGxlbmd0aC52YWx1ZShs
ZW5ndGhDb250ZXh0KTsKKyAgICB9KTsKIAogICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAib3Bh
Y2l0eSIsIHN2Z1N0eWxlLnN0cm9rZU9wYWNpdHkoKSwgMS4wZik7CiAgICAgd3JpdGVJZk5vdERl
ZmF1bHQodHMsICJzdHJva2Ugd2lkdGgiLCBzdHJva2VXaWR0aCwgMS4wKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcAppbmRleCBhNjNlYjgwYTc3OWQ3
NzY4ZGE0NzcyYmIwZDZhZmUxOWUzNTIxYmJkLi44NDgxMzZjOGE1MzhjNmVjOGVjYzE2ZDViZjAx
YmZkZTJkZGIzOTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRDaHVuay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
Q2h1bmsuY3BwCkBAIC03MCw4ICs3MCw3IEBAIFNWR1RleHRDaHVuazo6U1ZHVGV4dENodW5rKGNv
bnN0IFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGxpbmVMYXlvdXRCb3hlcywgdW5zCiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBmaXJzdDsgaSA8IGxpbWl0OyAr
K2kpCi0gICAgICAgIG1fYm94ZXMuYXBwZW5kKGxpbmVMYXlvdXRCb3hlc1tpXSk7CisgICAgbV9i
b3hlcy5hcHBlbmQoJmxpbmVMYXlvdXRCb3hlc1tmaXJzdF0sIGxpbWl0IC0gZmlyc3QpOwogfQog
CiB1bnNpZ25lZCBTVkdUZXh0Q2h1bms6OnRvdGFsQ2hhcmFjdGVycygpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5jcHAKaW5kZXggMjI5OWY4YzYzNzliNTA5
NDkyYTFhMWZmYTUyMzA2YTFhYTE2ODliNC4uZTNkYzNlZmJjMjliNjNkNzUyMTQ5ZGFjYjExMzFm
ZmE1MmFjYzk0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUGFnZVJ1bGVDb2xs
ZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29sbGVjdG9yLmNw
cApAQCAtODQsOCArODQsOSBAQCB2b2lkIFBhZ2VSdWxlQ29sbGVjdG9yOjptYXRjaFBhZ2VSdWxl
cyhSdWxlU2V0KiBydWxlcywgYm9vbCBpc0xlZnRQYWdlLCBib29sIGlzRgogCiAgICAgc3RkOjpz
dGFibGVfc29ydChtYXRjaGVkUGFnZVJ1bGVzLmJlZ2luKCksIG1hdGNoZWRQYWdlUnVsZXMuZW5k
KCksIGNvbXBhcmVQYWdlUnVsZXMpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1h
dGNoZWRQYWdlUnVsZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIG1fcmVzdWx0LmF1dGhvckRlY2xh
cmF0aW9ucy5hcHBlbmQoeyAmbWF0Y2hlZFBhZ2VSdWxlc1tpXS0+cHJvcGVydGllcygpIH0pOwor
ICAgIG1fcmVzdWx0LmF1dGhvckRlY2xhcmF0aW9ucy5yZXNlcnZlQ2FwYWNpdHkobV9yZXN1bHQu
YXV0aG9yRGVjbGFyYXRpb25zLnNpemUoKSArIG1hdGNoZWRQYWdlUnVsZXMuc2l6ZSgpKTsKKyAg
ICBmb3IgKGF1dG8qIHBhZ2VSdWxlIDogbWF0Y2hlZFBhZ2VSdWxlcykKKyAgICAgICAgbV9yZXN1
bHQuYXV0aG9yRGVjbGFyYXRpb25zLnVuY2hlY2tlZEFwcGVuZCh7ICZwYWdlUnVsZS0+cHJvcGVy
dGllcygpIH0pOwogfQogCiBzdGF0aWMgYm9vbCBjaGVja1BhZ2VTZWxlY3RvckNvbXBvbmVudHMo
Y29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJz
dFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9SdWxlU2V0QnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0
QnVpbGRlci5jcHAKaW5kZXggNTc1MTg1OTE5N2IyMjZmYzI0NGFmNmJjMzIwNWZhZDI2ZTAxNzAx
OS4uY2YxNjUyMjFjZDUzYTNjNWE3N2M2ZDk4MDg0MzIxYzEzZjIyMjM4ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcApAQCAtMzc4LDggKzM3OCw5IEBAIHZvaWQgUnVs
ZVNldEJ1aWxkZXI6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OnBvcChjb25zdCBNZWRpYVF1ZXJ5U2V0
KiBzZXQpCiAKICAgICBpZiAoIWR5bmFtaWNDb250ZXh0U3RhY2subGFzdCgpLmFmZmVjdGVkUnVs
ZVBvc2l0aW9ucy5pc0VtcHR5KCkgfHwgIWNvbGxlY3REeW5hbWljKSB7CiAgICAgICAgIFJ1bGVT
ZXQ6OkR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMgcnVsZXM7CisgICAgICAgIHJ1bGVzLm1lZGlhUXVl
cnlTZXRzLnJlc2VydmVDYXBhY2l0eShydWxlcy5tZWRpYVF1ZXJ5U2V0cy5zaXplKCkgKyBkeW5h
bWljQ29udGV4dFN0YWNrLnNpemUoKSk7CiAgICAgICAgIGZvciAoYXV0byYgY29udGV4dCA6IGR5
bmFtaWNDb250ZXh0U3RhY2spCi0gICAgICAgICAgICBydWxlcy5tZWRpYVF1ZXJ5U2V0cy5hcHBl
bmQoY29udGV4dC5zZXQuZ2V0KCkpOworICAgICAgICAgICAgcnVsZXMubWVkaWFRdWVyeVNldHMu
dW5jaGVja2VkQXBwZW5kKGNvbnRleHQuc2V0LmdldCgpKTsKIAogICAgICAgICBpZiAoY29sbGVj
dER5bmFtaWMpIHsKICAgICAgICAgICAgIHJ1bGVzLmFmZmVjdGVkUnVsZVBvc2l0aW9ucy5hcHBl
bmRWZWN0b3IoZHluYW1pY0NvbnRleHRTdGFjay5sYXN0KCkuYWZmZWN0ZWRSdWxlUG9zaXRpb25z
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRl
ci5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgKaW5kZXgg
MmY4MzRkZjY3ZDgwY2IxM2RkNGM5MTU1MWJhZDEyZGIxYjIzYTI0OS4uNzQ2NGY4NGQ4YmY2YjJi
MmEzMzEyM2Q1OTJiZTI5MmYxNGNjMjhkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVCdWlsZGVyQ29udmVydGVyLmgKQEAgLTE2OTcsMTMgKzE2OTcsMTIgQEAgaW5saW5lIFZlY3Rv
cjxBdG9tU3RyaW5nPiBCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Q29udGFpbmVyTmFtZShCdWls
ZGVyU3RhdGUmLAogICAgICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZh
bHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICB9CisgICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHsg
fTsKIAotICAgIFZlY3RvcjxBdG9tU3RyaW5nPiByZXN1bHQ7Ci0gICAgaWYgKGlzPENTU1ZhbHVl
TGlzdD4odmFsdWUpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgaXRlbSA6IGRvd25jYXN0PENTU1Zh
bHVlTGlzdD4odmFsdWUpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4oaXRlbS5nZXQoKSkuc3RyaW5nVmFsdWUoKSk7Ci0gICAgfQotICAgIHJl
dHVybiByZXN1bHQ7CisgICAgcmV0dXJuIFdURjo6bWFwKGRvd25jYXN0PENTU1ZhbHVlTGlzdD4o
dmFsdWUpLCBbXShhdXRvJiBpdGVtKSAtPiBBdG9tU3RyaW5nIHsKKyAgICAgICAgcmV0dXJuIGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihpdGVtLmdldCgpKS5zdHJpbmdWYWx1ZSgpOworICAg
IH0pOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEv
UmVtb3RlTWVkaWFQbGF5ZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVk
aWEvUmVtb3RlTWVkaWFQbGF5ZXJQcm94eS5jcHAKaW5kZXggMGVmODM0MmRkMjY4ZWU2OGMzMDQ3
NjJkYTA1OGJhNGZiY2JjNmUzYy4uOTQ5ZmYzMjA1NTUwYjQ4YjdjYzc5ZTQ1MDUxNmE0MDQwMmE0
YTM5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1l
ZGlhUGxheWVyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9S
ZW1vdGVNZWRpYVBsYXllclByb3h5LmNwcApAQCAtODA1LDExICs4MDUsOSBAQCBib29sIFJlbW90
ZU1lZGlhUGxheWVyUHJveHk6OmRvZXNIYXZlQXR0cmlidXRlKGNvbnN0IEF0b21TdHJpbmcmLCBB
dG9tU3RyaW5nKikgYwogI2lmIEVOQUJMRShBVkZfQ0FQVElPTlMpCiBWZWN0b3I8UmVmUHRyPFBs
YXRmb3JtVGV4dFRyYWNrPj4gUmVtb3RlTWVkaWFQbGF5ZXJQcm94eTo6b3V0T2ZCYW5kVHJhY2tT
b3VyY2VzKCkKIHsKLSAgICBWZWN0b3I8UmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNrPj4gc291cmNl
czsKLSAgICBmb3IgKGF1dG8mIGRhdGEgOiBtX2NvbmZpZ3VyYXRpb24ub3V0T2ZCYW5kVHJhY2tE
YXRhKQotICAgICAgICBzb3VyY2VzLmFwcGVuZChQbGF0Zm9ybVRleHRUcmFjazo6Y3JlYXRlKFdU
Rk1vdmUoZGF0YSkpKTsKLSAgICAKLSAgICByZXR1cm4gc291cmNlczsKKyAgICByZXR1cm4gV1RG
OjptYXAobV9jb25maWd1cmF0aW9uLm91dE9mQmFuZFRyYWNrRGF0YSwgW10oYXV0byYgZGF0YSkg
LT4gUmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNrPiB7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVRl
eHRUcmFjazo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpOworICAgIH0pOwogfQogCiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVTb3VyY2VCdWZm
ZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlU291cmNl
QnVmZmVyUHJveHkuY3BwCmluZGV4IDI3OTE2NWRlNjZhYWZlMDI0NjgxZTE2MWEwMzVjNGExMDk1
NGU2ZTEuLmJiZDMwZDhlNzFjMTk0MjcxZWEwM2JhYTIyZTM1MDZkYmIyMDUwODUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVTb3VyY2VCdWZmZXJQcm94
eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZVNvdXJjZUJ1
ZmZlclByb3h5LmNwcApAQCAtNzUsOSArNzUsMTAgQEAgdm9pZCBSZW1vdGVTb3VyY2VCdWZmZXJQ
cm94eTo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQK
IAogICAgIEluaXRpYWxpemF0aW9uU2VnbWVudEluZm8gc2VnbWVudEluZm87CiAgICAgc2VnbWVu
dEluZm8uZHVyYXRpb24gPSBzZWdtZW50LmR1cmF0aW9uOworICAgIHNlZ21lbnRJbmZvLmF1ZGlv
VHJhY2tzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2VnbWVudC5hdWRpb1RyYWNrcy5zaXplKCkp
OwogICAgIGZvciAoYXV0byYgYXVkaW9UcmFja0luZm8gOiBzZWdtZW50LmF1ZGlvVHJhY2tzKSB7
CiAgICAgICAgIGF1dG8gaWRlbnRpZmllciA9IG1fcmVtb3RlTWVkaWFQbGF5ZXJQcm94eS0+YWRk
UmVtb3RlQXVkaW9UcmFja1Byb3h5KCphdWRpb1RyYWNrSW5mby50cmFjayk7Ci0gICAgICAgIHNl
Z21lbnRJbmZvLmF1ZGlvVHJhY2tzLmFwcGVuZCh7IE1lZGlhRGVzY3JpcHRpb25JbmZvKCphdWRp
b1RyYWNrSW5mby5kZXNjcmlwdGlvbiksIGlkZW50aWZpZXIgfSk7CisgICAgICAgIHNlZ21lbnRJ
bmZvLmF1ZGlvVHJhY2tzLnVuY2hlY2tlZEFwcGVuZCh7IE1lZGlhRGVzY3JpcHRpb25JbmZvKCph
dWRpb1RyYWNrSW5mby5kZXNjcmlwdGlvbiksIGlkZW50aWZpZXIgfSk7CiAKICAgICAgICAgQVNT
RVJUKCFtX3RyYWNrSWRzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKICAgICAgICAgQVNTRVJUKCFt
X21lZGlhRGVzY3JpcHRpb25zLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKQEAgLTg1LDkgKzg2LDEw
IEBAIHZvaWQgUmVtb3RlU291cmNlQnVmZmVyUHJveHk6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRS
ZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50CiAgICAgICAgIG1fbWVkaWFEZXNjcmlwdGlvbnMu
YWRkKGlkZW50aWZpZXIsICphdWRpb1RyYWNrSW5mby5kZXNjcmlwdGlvbik7CiAgICAgfQogCisg
ICAgc2VnbWVudEluZm8udmlkZW9UcmFja3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzZWdtZW50
LnZpZGVvVHJhY2tzLnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiB2aWRlb1RyYWNrSW5mbyA6IHNl
Z21lbnQudmlkZW9UcmFja3MpIHsKICAgICAgICAgYXV0byBpZGVudGlmaWVyID0gbV9yZW1vdGVN
ZWRpYVBsYXllclByb3h5LT5hZGRSZW1vdGVWaWRlb1RyYWNrUHJveHkoKnZpZGVvVHJhY2tJbmZv
LnRyYWNrKTsKLSAgICAgICAgc2VnbWVudEluZm8udmlkZW9UcmFja3MuYXBwZW5kKHsgTWVkaWFE
ZXNjcmlwdGlvbkluZm8oKnZpZGVvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwgaWRlbnRpZmllciB9
KTsKKyAgICAgICAgc2VnbWVudEluZm8udmlkZW9UcmFja3MudW5jaGVja2VkQXBwZW5kKHsgTWVk
aWFEZXNjcmlwdGlvbkluZm8oKnZpZGVvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwgaWRlbnRpZmll
ciB9KTsKIAogICAgICAgICBBU1NFUlQoIW1fdHJhY2tJZHMuY29udGFpbnMoaWRlbnRpZmllcikp
OwogICAgICAgICBBU1NFUlQoIW1fbWVkaWFEZXNjcmlwdGlvbnMuY29udGFpbnMoaWRlbnRpZmll
cikpOwpAQCAtOTUsOSArOTcsMTAgQEAgdm9pZCBSZW1vdGVTb3VyY2VCdWZmZXJQcm94eTo6c291
cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQKICAgICAgICAg
bV9tZWRpYURlc2NyaXB0aW9ucy5hZGQoaWRlbnRpZmllciwgKnZpZGVvVHJhY2tJbmZvLmRlc2Ny
aXB0aW9uKTsKICAgICB9CiAKKyAgICBzZWdtZW50SW5mby50ZXh0VHJhY2tzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoc2VnbWVudC50ZXh0VHJhY2tzLnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiB0
ZXh0VHJhY2tJbmZvIDogc2VnbWVudC50ZXh0VHJhY2tzKSB7CiAgICAgICAgIGF1dG8gaWRlbnRp
ZmllciA9IG1fcmVtb3RlTWVkaWFQbGF5ZXJQcm94eS0+YWRkUmVtb3RlVGV4dFRyYWNrUHJveHko
KnRleHRUcmFja0luZm8udHJhY2spOwotICAgICAgICBzZWdtZW50SW5mby50ZXh0VHJhY2tzLmFw
cGVuZCh7IE1lZGlhRGVzY3JpcHRpb25JbmZvKCp0ZXh0VHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwg
aWRlbnRpZmllciB9KTsKKyAgICAgICAgc2VnbWVudEluZm8udGV4dFRyYWNrcy51bmNoZWNrZWRB
cHBlbmQoeyBNZWRpYURlc2NyaXB0aW9uSW5mbygqdGV4dFRyYWNrSW5mby5kZXNjcmlwdGlvbiks
IGlkZW50aWZpZXIgfSk7CiAKICAgICAgICAgQVNTRVJUKCFtX3RyYWNrSWRzLmNvbnRhaW5zKGlk
ZW50aWZpZXIpKTsKICAgICAgICAgQVNTRVJUKCFtX21lZGlhRGVzY3JpcHRpb25zLmNvbnRhaW5z
KGlkZW50aWZpZXIpKTsKQEAgLTMzOCwxNiArMzQxLDExIEBAIHZvaWQgUmVtb3RlU291cmNlQnVm
ZmVyUHJveHk6OnNlZWtUb1RpbWUoY29uc3QgTWVkaWFUaW1lJiBtZWRpYVRpbWUpCiAKIHZvaWQg
UmVtb3RlU291cmNlQnVmZmVyUHJveHk6OnVwZGF0ZVRyYWNrSWRzKFZlY3RvcjxzdGQ6OnBhaXI8
VHJhY2tQcml2YXRlUmVtb3RlSWRlbnRpZmllciwgVHJhY2tQcml2YXRlUmVtb3RlSWRlbnRpZmll
cj4+JiYgaWRlbnRpZmllclBhaXJzKQogewotICAgIFZlY3RvcjxzdGQ6OnBhaXI8QXRvbVN0cmlu
ZywgQXRvbVN0cmluZz4+IHRyYWNrSWRQYWlyczsKLQotICAgIGZvciAoYXV0byYgaWRlbnRpZmll
clBhaXIgOiBpZGVudGlmaWVyUGFpcnMpIHsKKyAgICBhdXRvIHRyYWNrSWRQYWlycyA9IGlkZW50
aWZpZXJQYWlycy5tYXAoWyZdKGF1dG8mIGlkZW50aWZpZXJQYWlyKSB7CiAgICAgICAgIEFTU0VS
VChtX3RyYWNrSWRzLmNvbnRhaW5zKGlkZW50aWZpZXJQYWlyLmZpcnN0KSk7CiAgICAgICAgIEFT
U0VSVChtX3RyYWNrSWRzLmNvbnRhaW5zKGlkZW50aWZpZXJQYWlyLnNlY29uZCkpOwotCi0gICAg
ICAgIGF1dG8gb2xkSWQgPSBtX3RyYWNrSWRzLnRha2UoaWRlbnRpZmllclBhaXIuZmlyc3QpOwot
ICAgICAgICBhdXRvIG5ld0lkID0gbV90cmFja0lkcy5nZXQoaWRlbnRpZmllclBhaXIuc2Vjb25k
KTsKLSAgICAgICAgdHJhY2tJZFBhaXJzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihvbGRJZCwgbmV3
SWQpKTsKLSAgICB9CisgICAgICAgIHJldHVybiBzdGQ6OnBhaXIgeyBtX3RyYWNrSWRzLnRha2Uo
aWRlbnRpZmllclBhaXIuZmlyc3QpLCBtX3RyYWNrSWRzLmdldChpZGVudGlmaWVyUGFpci5zZWNv
bmQpIH07CisgICAgfSk7CiAKICAgICBpZiAoIXRyYWNrSWRQYWlycy5pc0VtcHR5KCkpCiAgICAg
ICAgIG1fc291cmNlQnVmZmVyUHJpdmF0ZS0+dXBkYXRlVHJhY2tJZHMoV1RGTW92ZSh0cmFja0lk
UGFpcnMpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5j
cHAKaW5kZXggNzBiNWFmZGE1MjZlOTkwOWI5NjJkNzEyMTNkODViNjBiNTM3MTgxZC4uZTg3NmVj
Mzc3NzFmZjQwMGNhYTgzNGNlZmFlOTU2MjU0Y2MzZmQ5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKQEAgLTg1Myw5ICs4NTMsNyBAQCB2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5n
KGNvbnN0IFJlZ2lzdHJhYmxlRAogCiAgICAgICAgICAgICBzdGF0aXN0aWMuc3ViZnJhbWVVbmRl
clRvcEZyYW1lRG9tYWlucyA9IFdURk1vdmUodG9wRnJhbWVEb21haW5zKTsKIAotICAgICAgICAg
ICAgVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+IHN0YXRpc3RpY3M7Ci0gICAgICAgICAg
ICBzdGF0aXN0aWNzLmFwcGVuZChXVEZNb3ZlKHN0YXRpc3RpYykpOwotICAgICAgICAgICAgbV9z
dGF0aXN0aWNzU3RvcmUtPm1lcmdlU3RhdGlzdGljcyhXVEZNb3ZlKHN0YXRpc3RpY3MpKTsKKyAg
ICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5tZXJnZVN0YXRpc3RpY3MoVmVjdG9yPFJlc291
cmNlTG9hZFN0YXRpc3RpY3M+Ojpmcm9tKFdURk1vdmUoc3RhdGlzdGljKSkpOwogICAgICAgICB9
CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNw
cAppbmRleCBmNGY4YTRjNGY0YWY5NmFmNjg5NDJjNWM2Yzk4OTJmZjdlMTk5M2YxLi40YThiMGVk
YTA5YmYwNTg5OGEzYjhiMjJjOTA4YjQ3YjI4ZWI5YzgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMTM4MCwxMCArMTM4MCw5IEBA
IHN0YXRpYyB2b2lkIGZldGNoRGlza0NhY2hlRW50cmllcyhOZXR3b3JrQ2FjaGU6OkNhY2hlKiBj
YWNoZSwgUEFMOjpTZXNzaW9uSUQgc2VzCiAgICAgSGFzaE1hcDxTZWN1cml0eU9yaWdpbkRhdGEs
IHVpbnQ2NF90PiBvcmlnaW5zQW5kU2l6ZXM7CiAgICAgY2FjaGUtPnRyYXZlcnNlKFtmZXRjaE9w
dGlvbnMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG9y
aWdpbnNBbmRTaXplcyA9IFdURk1vdmUob3JpZ2luc0FuZFNpemVzKV0oYXV0byogdHJhdmVyc2Fs
RW50cnkpIG11dGFibGUgewogICAgICAgICBpZiAoIXRyYXZlcnNhbEVudHJ5KSB7Ci0gICAgICAg
ICAgICBWZWN0b3I8V2Vic2l0ZURhdGE6OkVudHJ5PiBlbnRyaWVzOwotCi0gICAgICAgICAgICBm
b3IgKGF1dG8mIG9yaWdpbkFuZFNpemUgOiBvcmlnaW5zQW5kU2l6ZXMpCi0gICAgICAgICAgICAg
ICAgZW50cmllcy5hcHBlbmQoV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luQW5kU2l6ZS5rZXks
IFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlLCBvcmlnaW5BbmRTaXplLnZhbHVlIH0pOworICAg
ICAgICAgICAgYXV0byBlbnRyaWVzID0gV1RGOjptYXAob3JpZ2luc0FuZFNpemVzLCBbXShhdXRv
JiBvcmlnaW5BbmRTaXplKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhOjpF
bnRyeSB7IG9yaWdpbkFuZFNpemUua2V5LCBXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSwgb3Jp
Z2luQW5kU2l6ZS52YWx1ZSB9OworICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIFJ1bkxv
b3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSwgZW50cmllcyA9IFdURk1vdmUoZW50cmllcyldICgpIG11dGFibGUgewogICAg
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGVudHJpZXMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05ldHdvcmtOb3RpZmljYXRp
b25NYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTm90aWZpY2F0aW9u
cy9OZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlci5jcHAKaW5kZXggZjAwYTIxOTNhYTJiMTM5ODAy
YjM2NmE0ZjEyMWM3NmVkZmY4OGYwMy4uYzUxMmYyY2IzMjU0MDQ1NGIwNmRmNzMyNWEzMWIyYTNj
ZTFkMGM2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Ob3RpZmlj
YXRpb25zL05ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05vdGlmaWNhdGlvbnMvTmV0d29ya05vdGlmaWNhdGlvbk1hbmFnZXIu
Y3BwCkBAIC04Miw5ICs4Miw5IEBAIHZvaWQgTmV0d29ya05vdGlmaWNhdGlvbk1hbmFnZXI6OmRl
bGV0ZVB1c2hBbmROb3RpZmljYXRpb25SZWdpc3RyYXRpb24oY29uc3QgU2VjCiB2b2lkIE5ldHdv
cmtOb3RpZmljYXRpb25NYW5hZ2VyOjpnZXRPcmlnaW5zV2l0aFB1c2hBbmROb3RpZmljYXRpb25Q
ZXJtaXNzaW9ucyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxTZWN1cml0eU9y
aWdpbkRhdGE+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4gcmVwbHlIYW5kbGVyID0gW2NvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChWZWN0b3I8U3RyaW5nPiBvcmlnaW5T
dHJpbmdzKSBtdXRhYmxlIHsKLSAgICAgICAgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4gb3Jp
Z2luczsKLSAgICAgICAgZm9yIChhdXRvJiBvcmlnaW5TdHJpbmcgOiBvcmlnaW5TdHJpbmdzKQot
ICAgICAgICAgICAgb3JpZ2lucy5hcHBlbmQoU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tVVJMKHsg
eyB9LCBvcmlnaW5TdHJpbmcgfSkpOworICAgICAgICBhdXRvIG9yaWdpbnMgPSBvcmlnaW5TdHJp
bmdzLm1hcChbXShhdXRvJiBvcmlnaW5TdHJpbmcpIHsKKyAgICAgICAgICAgIHJldHVybiBTZWN1
cml0eU9yaWdpbkRhdGE6OmZyb21VUkwoeyB7IH0sIG9yaWdpblN0cmluZyB9KTsKKyAgICAgICAg
fSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUob3JpZ2lucykpOwogICAgIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9T
dG9yYWdlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3Jh
Z2UvU3RvcmFnZU1hbmFnZXIuY3BwCmluZGV4IGNiOTAxYjZjNThiMTg1OWFlOGJlMmFkOWRhOTAw
MmQ4MjJiODA2MTIuLjdlMmQzNzdhMWJmODYyZDhhMTY5NWVkOTViYjA1YWVjYzQzZGNkMWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdl
TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdl
L1N0b3JhZ2VNYW5hZ2VyLmNwcApAQCAtMjk1LDIwICsyOTUsMTQgQEAgVmVjdG9yPFN0b3JhZ2VB
cmVhSWRlbnRpZmllcj4gU3RvcmFnZU1hbmFnZXI6OmFsbFN0b3JhZ2VBcmVhSWRlbnRpZmllcnMo
KSBjb25zdAogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgVmVjdG9yPFN0
b3JhZ2VBcmVhSWRlbnRpZmllcj4gaWRlbnRpZmllcnM7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBs
b2NhbFN0b3JhZ2VOYW1lc3BhY2UgOiBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkp
IHsKLSAgICAgICAgZm9yIChhdXRvIGtleSA6IGxvY2FsU3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFn
ZUFyZWFJZGVudGlmaWVycygpKQotICAgICAgICAgICAgaWRlbnRpZmllcnMuYXBwZW5kKGtleSk7
Ci0gICAgfQorICAgIGZvciAoY29uc3QgYXV0byYgbG9jYWxTdG9yYWdlTmFtZXNwYWNlIDogbV9s
b2NhbFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQorICAgICAgICBpZGVudGlmaWVycy5hcHBl
bmRWZWN0b3IobG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlQXJlYUlkZW50aWZpZXJzKCkp
OwogCi0gICAgZm9yIChjb25zdCBhdXRvJiB0cmFzaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSA6
IG1fdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkgewotICAgICAgICBm
b3IgKGF1dG8ga2V5IDogdHJhc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VBcmVh
SWRlbnRpZmllcnMoKSkKLSAgICAgICAgICAgIGlkZW50aWZpZXJzLmFwcGVuZChrZXkpOwotICAg
IH0KKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYXNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlIDog
bV90cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQorICAgICAgICBpZGVu
dGlmaWVycy5hcHBlbmRWZWN0b3IodHJhc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPnN0b3Jh
Z2VBcmVhSWRlbnRpZmllcnMoKSk7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHNlc3Npb25TdG9y
YWdlTmFtZXNwYWNlIDogbV9zZXNzaW9uU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpIHsKLSAg
ICAgICAgZm9yIChhdXRvIGtleSA6IHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlQXJl
YUlkZW50aWZpZXJzKCkpCi0gICAgICAgICAgICBpZGVudGlmaWVycy5hcHBlbmQoa2V5KTsKLSAg
ICB9CisgICAgZm9yIChjb25zdCBhdXRvJiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSA6IG1fc2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQorICAgICAgICBpZGVudGlmaWVycy5hcHBl
bmRWZWN0b3Ioc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VBcmVhSWRlbnRpZmllcnMo
KSk7CiAKICAgICByZXR1cm4gaWRlbnRpZmllcnM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNw
YWNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9UcmFuc2ll
bnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuY3BwCmluZGV4IGVlZWM1NTBlZWY2M2FlNTlhMWVhYjNh
YThhNDk3YTMyYzEwNTA2MjQuLmZiOThlZDM5NDgwOTE2MDY4NzE3MjZhZTA4NmQ1MWYxNTEyZDQ0
MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9U
cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9UcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuY3Bw
CkBAIC01NSwxNCArNTUsMTEgQEAgU3RvcmFnZUFyZWEmIFRyYW5zaWVudExvY2FsU3RvcmFnZU5h
bWVzcGFjZTo6Z2V0T3JDcmVhdGVTdG9yYWdlQXJlYShTZWN1cml0eU9yaWcKIFZlY3RvcjxTZWN1
cml0eU9yaWdpbkRhdGE+IFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6b3JpZ2lucygp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgVmVjdG9yPFNl
Y3VyaXR5T3JpZ2luRGF0YT4gb3JpZ2luczsKLQotICAgIGZvciAoY29uc3QgYXV0byYgc3RvcmFn
ZUFyZWEgOiBtX3N0b3JhZ2VBcmVhTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmICghc3RvcmFn
ZUFyZWEtPml0ZW1zKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgb3JpZ2lucy5hcHBlbmQoc3Rv
cmFnZUFyZWEtPnNlY3VyaXR5T3JpZ2luKCkpOwotICAgIH0KLQotICAgIHJldHVybiBvcmlnaW5z
OworICAgIHJldHVybiBXVEY6OmNvbXBhY3RNYXAobV9zdG9yYWdlQXJlYU1hcCwgW10oYXV0byYg
ZW50cnkpIC0+IHN0ZDo6b3B0aW9uYWw8U2VjdXJpdHlPcmlnaW5EYXRhPiB7CisgICAgICAgIGlm
IChlbnRyeS52YWx1ZS0+aXRlbXMoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgICAgICByZXR1cm4gZW50cnkudmFsdWUtPnNlY3VyaXR5T3JpZ2luKCk7
CisgICAgfSk7CiB9CiAKIHZvaWQgVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpjbGVh
clN0b3JhZ2VBcmVhc01hdGNoaW5nT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgc2Vj
dXJpdHlPcmlnaW4pCkBAIC04MiwxMCArNzksOSBAQCB2b2lkIFRyYW5zaWVudExvY2FsU3RvcmFn
ZU5hbWVzcGFjZTo6Y2xlYXJBbGxTdG9yYWdlQXJlYXMoKQogCiBWZWN0b3I8U3RvcmFnZUFyZWFJ
ZGVudGlmaWVyPiBUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OnN0b3JhZ2VBcmVhSWRl
bnRpZmllcnMoKSBjb25zdAogewotICAgIFZlY3RvcjxTdG9yYWdlQXJlYUlkZW50aWZpZXI+IGlk
ZW50aWZpZXJzOwotICAgIGZvciAoYXV0byYgc3RvcmFnZUFyZWEgOiBtX3N0b3JhZ2VBcmVhTWFw
LnZhbHVlcygpKQotICAgICAgICBpZGVudGlmaWVycy5hcHBlbmQoc3RvcmFnZUFyZWEtPmlkZW50
aWZpZXIoKSk7Ci0gICAgcmV0dXJuIGlkZW50aWZpZXJzOworICAgIHJldHVybiBXVEY6Om1hcCht
X3N0b3JhZ2VBcmVhTWFwLCBbXShhdXRvJiBlbnRyeSkgeworICAgICAgICByZXR1cm4gZW50cnku
dmFsdWUtPmlkZW50aWZpZXIoKTsKKyAgICB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3Rv
cmFnZUVuZ2luZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
Q2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCmluZGV4IGRhOWNiOGE1ZGNjMGVkN2Y5ZjRjMmUz
ZDJmMjc2ODk0YTAxZWQxNzQuLjNlMWFlMzEzMDI4YWQwMDNjZDU1ZjgxZTQ2ZTVjYWUwYmYxZWFk
ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVT
dG9yYWdlRW5naW5lQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwCkBAIC0yMDksOCArMjA5LDkgQEAgdm9p
ZCBDYWNoZTo6ZmluaXNoT3BlbmluZyhDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaywgc3Rk
OjpvcHRpb25hbDxFcnJvcj4mJgogewogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PFJlY29yZEluZm9ybWF0aW9uPj4gcmVjb3JkczsKICAgICBmb3IgKGF1dG8mIHZhbHVlIDogbV9y
ZWNvcmRzLnZhbHVlcygpKSB7CisgICAgICAgIHJlY29yZHMucmVzZXJ2ZUNhcGFjaXR5KHJlY29y
ZHMuc2l6ZSgpICsgdmFsdWUuc2l6ZSgpKTsKICAgICAgICAgZm9yIChhdXRvJiByZWNvcmQgOiB2
YWx1ZSkKLSAgICAgICAgICAgIHJlY29yZHMuYXBwZW5kKHJlY29yZCk7CisgICAgICAgICAgICBy
ZWNvcmRzLnVuY2hlY2tlZEFwcGVuZChyZWNvcmQpOwogICAgIH0KICAgICBzdGQ6OnNvcnQocmVj
b3Jkcy5iZWdpbigpLCByZWNvcmRzLmVuZCgpLCBbJl0oY29uc3QgYXV0byYgYSwgY29uc3QgYXV0
byYgYikgewogICAgICAgICByZXR1cm4gYS5nZXQoKS5pbnNlcnRpb25UaW1lIDwgYi5nZXQoKS5p
bnNlcnRpb25UaW1lOwpAQCAtNjgyLDggKzY4Myw5IEBAIFZlY3RvcjxLZXk+IENhY2hlOjprZXlz
KCkgY29uc3QKIHsKICAgICBWZWN0b3I8S2V5PiBrZXlzOwogICAgIGZvciAoYXV0byYgcmVjb3Jk
cyA6IG1fcmVjb3Jkcy52YWx1ZXMoKSkgeworICAgICAgICBrZXlzLnJlc2VydmVDYXBhY2l0eShr
ZXlzLnNpemUoKSArIHJlY29yZHMuc2l6ZSgpKTsKICAgICAgICAgZm9yIChhdXRvJiByZWNvcmQg
OiByZWNvcmRzKQotICAgICAgICAgICAga2V5cy5hcHBlbmQocmVjb3JkLmtleSk7CisgICAgICAg
ICAgICBrZXlzLnVuY2hlY2tlZEFwcGVuZChyZWNvcmQua2V5KTsKICAgICB9CiAgICAgcmV0dXJu
IGtleXM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3Jh
Z2UvU1FMaXRlU3RvcmFnZUFyZWEuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
dG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmNwcAppbmRleCA0MDlhMzM4OGEwYjhlY2Y5YWI3MTA0
OWI3MjlmZGUzOTI3YzQ4ZWI1Li40MTM2OTQ0YjVmZjg1ZWYyM2ZjZWU0N2VlZDgzMmYxZWQwYjYw
NDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FM
aXRlU3RvcmFnZUFyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHAKQEAgLTY5LDggKzY5LDkgQEAgU1FMaXRlU3RvcmFn
ZUFyZWE6OlNRTGl0ZVN0b3JhZ2VBcmVhKHVuc2lnbmVkIHF1b3RhLCBjb25zdCBXZWJDb3JlOjpD
bGllbnRPcmlnaW4KIHsKICAgICBBU1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7CiAKKyAgICBtX2Nh
Y2hlZFN0YXRlbWVudHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzdGF0aWNfY2FzdDxzaXplX3Q+
KFN0YXRlbWVudFR5cGU6OkludmFsaWQpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0
YXRpY19jYXN0PHNpemVfdD4oU3RhdGVtZW50VHlwZTo6SW52YWxpZCk7ICsraSkKLSAgICAgICAg
bV9jYWNoZWRTdGF0ZW1lbnRzLmFwcGVuZChudWxscHRyKTsKKyAgICAgICAgbV9jYWNoZWRTdGF0
ZW1lbnRzLnVuY2hlY2tlZEFwcGVuZChudWxscHRyKTsKIH0KIAogdm9pZCBTUUxpdGVTdG9yYWdl
QXJlYTo6Y2xvc2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQXBwbGVQYXkv
V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQXBw
bGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkuY3BwCmluZGV4IDA0YTY5NjgxNzhhNmY3
NTk0YzI4MGVmNzMxODE5OGNiNjMyYjkyMzAuLmJjY2MwNTUwNzcxNzc5NzY2OGY5YzlkY2YxMDMx
MDkxMTFiOThhZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FwcGxlUGF5L1dl
YlBheW1lbnRDb29yZGluYXRvclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9B
cHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS5jcHAKQEAgLTkzLDkgKzkzLDkgQEAg
dm9pZCBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTo6c2hvd1BheW1lbnRVSShXZWJDb3JlOjpQ
YWdlSWRlbnRpZmllciBkZXN0aW5hdGkKIAogICAgIFVSTCBvcmlnaW5hdGluZ1VSTChVUkwoKSwg
b3JpZ2luYXRpbmdVUkxTdHJpbmcpOwogCi0gICAgVmVjdG9yPFVSTD4gbGlua0ljb25VUkxzOwot
ICAgIGZvciAoY29uc3QgYXV0byYgbGlua0ljb25VUkxTdHJpbmcgOiBsaW5rSWNvblVSTFN0cmlu
Z3MpCi0gICAgICAgIGxpbmtJY29uVVJMcy5hcHBlbmQoVVJMKFVSTCgpLCBsaW5rSWNvblVSTFN0
cmluZykpOworICAgIGF1dG8gbGlua0ljb25VUkxzID0gbGlua0ljb25VUkxTdHJpbmdzLm1hcChb
XShhdXRvJiBsaW5rSWNvblVSTFN0cmluZykgeworICAgICAgICByZXR1cm4gVVJMKFVSTCgpLCBs
aW5rSWNvblVSTFN0cmluZyk7CisgICAgfSk7CiAKICAgICBwbGF0Zm9ybVNob3dQYXltZW50VUko
d2ViUGFnZVByb3h5SUQsIG9yaWdpbmF0aW5nVVJMLCBsaW5rSWNvblVSTHMsIHBheW1lbnRSZXF1
ZXN0LCBbdGhpcywgd2Vha1RoaXMgPSBXZWFrUHRyIHsgKnRoaXMgfV0oYm9vbCByZXN1bHQpIHsK
ICAgICAgICAgaWYgKCF3ZWFrVGhpcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElOYXZpZ2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9B
UElOYXZpZ2F0aW9uLmNwcAppbmRleCA4ODQ2NmM0OWVkMGRlMThlMjAzMmNhYTBhMDQ2NDgzOWVh
NzQ1MTAxLi40YTg4OTAzOWU5NGE2MmZhNTkyZjE5NTdmNzZkODU5ZTc5YzlmYzZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb24uY3BwCkBAIC02MiwxMCAr
NjIsMTAgQEAgTmF2aWdhdGlvbjo6TmF2aWdhdGlvbihXZWJOYXZpZ2F0aW9uU3RhdGUmIHN0YXRl
LCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiByZXEKICAgICA6IG1fbmF2aWdhdGlvbklEKHN0
YXRlLmdlbmVyYXRlTmF2aWdhdGlvbklEKCkpCiAgICAgLCBtX29yaWdpbmFsUmVxdWVzdChXVEZN
b3ZlKHJlcXVlc3QpKQogICAgICwgbV9jdXJyZW50UmVxdWVzdChtX29yaWdpbmFsUmVxdWVzdCkK
KyAgICAsIG1fcmVkaXJlY3RDaGFpbiB7IG1fb3JpZ2luYWxSZXF1ZXN0LnVybCgpIH0KICAgICAs
IG1fZnJvbUl0ZW0oZnJvbUl0ZW0pCiAgICAgLCBtX2NsaWVudE5hdmlnYXRpb25BY3Rpdml0eShu
YXZpZ2F0aW9uQWN0aXZpdHlUaW1lb3V0KQogewotICAgIG1fcmVkaXJlY3RDaGFpbi5hcHBlbmQo
bV9vcmlnaW5hbFJlcXVlc3QudXJsKCkpOwogfQogCiBOYXZpZ2F0aW9uOjpOYXZpZ2F0aW9uKFdl
Yk5hdmlnYXRpb25TdGF0ZSYgc3RhdGUsIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIHRhcmdldEl0
ZW0sIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIGZyb21JdGVtLCBGcmFtZUxvYWRUeXBlIGJhY2tG
b3J3YXJkRnJhbWVMb2FkVHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1dLU2hhcmVTaGVldC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dL
U2hhcmVTaGVldC5tbQppbmRleCA1NTRhYjgwNjQyN2VjYjljZTgzMGFjYTk3ZmM3ZGRjZGM5ODUz
ZTE1Li5lMzg4YTNjMzdkMGY2OTY1ZDc2OTFmMjdiMTc4MGE5MTNmMDRlZTI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NoYXJlU2hlZXQubW0KKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tTaGFyZVNoZWV0Lm1tCkBAIC0xMDAsOSArMTAw
LDkgQEAgc3RhdGljIHZvaWQgYXBwZW5kRmlsZXNBc1NoYXJlYWJsZVVSTHMoUmV0YWluUHRyPE5T
TXV0YWJsZUFycmF5PiYmIHNoYXJlRGF0YUFycmEKICAgICAgICAgU3RyaW5nIGZpbGVOYW1lOwog
ICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBmaWxlRGF0YTsKICAgICB9OwotICAgIFZlY3RvcjxG
aWxlV3JpdGVUYXNrPiBmaWxlV3JpdGVUYXNrczsKLSAgICBmb3IgKGF1dG8mIGZpbGUgOiBmaWxl
cykKLSAgICAgICAgZmlsZVdyaXRlVGFza3MuYXBwZW5kKHsgZmlsZS5maWxlTmFtZS5pc29sYXRl
ZENvcHkoKSwgZmlsZS5maWxlRGF0YS0+Y3JlYXRlTlNEYXRhKCkgfSk7CisgICAgYXV0byBmaWxl
V3JpdGVUYXNrcyA9IGZpbGVzLm1hcChbXShhdXRvJiBmaWxlKSB7CisgICAgICAgIHJldHVybiBG
aWxlV3JpdGVUYXNrIHsgZmlsZS5maWxlTmFtZS5pc29sYXRlZENvcHkoKSwgZmlsZS5maWxlRGF0
YS0+Y3JlYXRlTlNEYXRhKCkgfTsKKyAgICB9KTsKIAogICAgIGF1dG8gcXVldWUgPSBXb3JrUXVl
dWU6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5XS1NoYXJlU2hlZXQuU2hhcmVhYmxlRmlsZVdy
aXRlciIpOwogICAgIHF1ZXVlLT5kaXNwYXRjaChbc2hhcmVEYXRhQXJyYXkgPSBXVEZNb3ZlKHNo
YXJlRGF0YUFycmF5KSwgZmlsZVdyaXRlVGFza3MgPSBXVEZNb3ZlKGZpbGVXcml0ZVRhc2tzKSwg
dGVtcG9yYXJ5RGlyZWN0b3J5ID0gcmV0YWluUHRyKHRlbXBvcmFyeURpcmVjdG9yeSksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2Nv
YS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1t
CmluZGV4IGYxYzM3MDZiMDlmZjllMTI4MjFkN2RhM2EyMjViNzBiYTQ2ZGNlMzYuLjU2YTE0ZDhi
ZjM2ZWQ0NGRhZGJmMWU0YzQ4NDBhNWUwNjQxNGI4ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCkBAIC02NjYsMTQgKzY2Niwx
MiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVzdG9yZUFwcEhpZ2hsaWdodHNBbmRTY3JvbGxUb0lu
ZGV4KGNvbnN0IFZlY3RvcjxSZWY8U2hhcmVkTQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3Mo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxl
PiBtZW1vcnlIYW5kbGVzOwotCi0gICAgZm9yIChhdXRvIGhpZ2hsaWdodCA6IGhpZ2hsaWdodHMp
IHsKKyAgICBhdXRvIG1lbW9yeUhhbmRsZXMgPSBXVEY6OmNvbXBhY3RNYXAoaGlnaGxpZ2h0cywg
W10oYXV0byYgaGlnaGxpZ2h0KSAtPiBzdGQ6Om9wdGlvbmFsPFNoYXJlZE1lbW9yeTo6SVBDSGFu
ZGxlPiB7CiAgICAgICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgaGln
aGxpZ2h0LT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJl
YWRPbmx5KTsKLQotICAgICAgICBtZW1vcnlIYW5kbGVzLmFwcGVuZChTaGFyZWRNZW1vcnk6OklQ
Q0hhbmRsZSB7IFdURk1vdmUoaGFuZGxlKSwgaGlnaGxpZ2h0LT5zaXplKCkgfSk7Ci0gICAgfQor
ICAgICAgICBpZiAoIWhpZ2hsaWdodC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5
OjpQcm90ZWN0aW9uOjpSZWFkT25seSkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworICAgICAgICByZXR1cm4gU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgeyBXVEZNb3ZlKGhhbmRs
ZSksIGhpZ2hsaWdodC0+c2l6ZSgpIH07CisgICAgfSk7CiAgICAgCiAgICAgc2V0VXBIaWdobGln
aHRzT2JzZXJ2ZXIoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRnJh
bWVMb2FkU3RhdGUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUu
Y3BwCmluZGV4IGM2MWJlZDgxZDA5Mjg0NjMyYmYyOTY1ZWQyYzk5YjBjNmZlNDAxYTMuLjY5ZTUz
ZDdiZWI4NmNlNmI0MDZmM2NkYjgzOTJhYjcyYTNmZmM4MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0ZyYW1lTG9hZFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9GcmFtZUxvYWRTdGF0ZS5jcHAKQEAgLTkwLDExICs5MCw4IEBAIHZvaWQgRnJhbWVM
b2FkU3RhdGU6OmRpZEZpbmlzaExvYWQoKQogCiAgICAgbV9zdGF0ZSA9IFN0YXRlOjpGaW5pc2hl
ZDsKIAotICAgIFZlY3RvcjxPYnNlcnZlcio+IG9ic2VydmVyc0NvcHk7Ci0gICAgZm9yIChhdXRv
JiBvYnNlcnZlciA6IG1fb2JzZXJ2ZXJzKQotICAgICAgICBvYnNlcnZlcnNDb3B5LmFwcGVuZCgm
b2JzZXJ2ZXIpOwotICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlcnNDb3B5KQotICAg
ICAgICBvYnNlcnZlci0+ZGlkRmluaXNoTG9hZCgpOworICAgIGZvciAoYXV0byYgb2JzZXJ2ZXIg
OiBjb3B5VG9WZWN0b3JPZjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPE9ic2VydmVyPj4obV9vYnNl
cnZlcnMpKQorICAgICAgICBvYnNlcnZlci5nZXQoKS5kaWRGaW5pc2hMb2FkKCk7CiB9CiAKIHZv
aWQgRnJhbWVMb2FkU3RhdGU6OmRpZEZhaWxMb2FkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCmluZGV4IDM3NDA4
MTkzYjBiNzY4MjNjMDQ1ODFiNGI0ZTkwNmRkNDQwOWE3YWIuLmUzODAxNmYxZGViNzM3MzJkNWE4
NWRjMWQ0NmQxM2RmMzVhNjkxZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcApAQCAtMTg0LDggKzE4NCw4IEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJv
Y2VzcygpCiAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5
VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lz
dGVyQXNMb2NhbCgpKTsKICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0Fj
Y2VzcyA9IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2No
ZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNzKCkpOwogICAgIHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9
IExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7Ci0gICAgZm9y
IChhdXRvJiBzY2hlbWUgOiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90
b2NvbEhhbmRsZXJzKCkpCi0gICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRG
b3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVtZSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hl
bWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scyA9IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hl
bWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKTsKKwogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCiAgICAgaWYgKFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bv
b2w6OmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKTsgIWNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNF
bXB0eSgpKSB7CiAgICAgICAgIGlmIChhdXRvIGhhbmRsZSA9IFNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0b3J5KSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJD
b250ZW50Q29udHJvbGxlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJD
b250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcAppbmRleCBmYTI1NGMyZGFk
YzA2MzAyOGRmZDUwNGQyODkwYTg5MmFlZGFmYjA4Li41YmJlNzM5NjIwNTI3YTgyN2NkNTdmMTY5
YWYyZjBjMGM1OTZhNzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2Vy
Q29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHku
Y3BwCkBAIC0xMTcsMTEgKzExNywxMSBAQCBVc2VyQ29udGVudENvbnRyb2xsZXJQYXJhbWV0ZXJz
IFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpwYXJhbWV0ZXJzKCkgY29ucwogICAgIHBh
cmFtZXRlcnMuaWRlbnRpZmllciA9IGlkZW50aWZpZXIoKTsKICAgICAKICAgICBBU1NFUlQocGFy
YW1ldGVycy51c2VyQ29udGVudFdvcmxkcy5pc0VtcHR5KCkpOwotICAgIGZvciAoY29uc3QgYXV0
byYgaWRlbnRpZmllciA6IG1fYXNzb2NpYXRlZENvbnRlbnRXb3JsZHMpIHsKKyAgICBwYXJhbWV0
ZXJzLnVzZXJDb250ZW50V29ybGRzID0gV1RGOjptYXAobV9hc3NvY2lhdGVkQ29udGVudFdvcmxk
cywgW10oYXV0byYgaWRlbnRpZmllcikgewogICAgICAgICBhdXRvKiB3b3JsZCA9IEFQSTo6Q29u
dGVudFdvcmxkOjp3b3JsZEZvcklkZW50aWZpZXIoaWRlbnRpZmllcik7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHdvcmxkKTsKLSAgICAgICAgcGFyYW1ldGVycy51c2VyQ29udGVudFdvcmxkcy5h
cHBlbmQod29ybGQtPndvcmxkRGF0YSgpKTsKLSAgICB9CisgICAgICAgIHJldHVybiB3b3JsZC0+
d29ybGREYXRhKCk7CisgICAgfSk7CiAKICAgICBmb3IgKGF1dG8gdXNlclNjcmlwdCA6IG1fdXNl
clNjcmlwdHMtPmVsZW1lbnRzT2ZUeXBlPEFQSTo6VXNlclNjcmlwdD4oKSkKICAgICAgICAgcGFy
YW1ldGVycy51c2VyU2NyaXB0cy5hcHBlbmQoeyB1c2VyU2NyaXB0LT5pZGVudGlmaWVyKCksIHVz
ZXJTY3JpcHQtPmNvbnRlbnRXb3JsZCgpLmlkZW50aWZpZXIoKSwgdXNlclNjcmlwdC0+dXNlclNj
cmlwdCgpIH0pOwpAQCAtMTI5LDggKzEyOSw5IEBAIFVzZXJDb250ZW50Q29udHJvbGxlclBhcmFt
ZXRlcnMgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnBhcmFtZXRlcnMoKSBjb25zCiAg
ICAgZm9yIChhdXRvIHVzZXJTdHlsZVNoZWV0IDogbV91c2VyU3R5bGVTaGVldHMtPmVsZW1lbnRz
T2ZUeXBlPEFQSTo6VXNlclN0eWxlU2hlZXQ+KCkpCiAgICAgICAgIHBhcmFtZXRlcnMudXNlclN0
eWxlU2hlZXRzLmFwcGVuZCh7IHVzZXJTdHlsZVNoZWV0LT5pZGVudGlmaWVyKCksIHVzZXJTdHls
ZVNoZWV0LT5jb250ZW50V29ybGQoKS5pZGVudGlmaWVyKCksIHVzZXJTdHlsZVNoZWV0LT51c2Vy
U3R5bGVTaGVldCgpIH0pOwogCi0gICAgZm9yIChhdXRvJiBoYW5kbGVyIDogbV9zY3JpcHRNZXNz
YWdlSGFuZGxlcnMudmFsdWVzKCkpCi0gICAgICAgIHBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXJz
LmFwcGVuZCh7IGhhbmRsZXItPmlkZW50aWZpZXIoKSwgaGFuZGxlci0+d29ybGQoKS5pZGVudGlm
aWVyKCksIGhhbmRsZXItPm5hbWUoKSB9KTsKKyAgICBwYXJhbWV0ZXJzLm1lc3NhZ2VIYW5kbGVy
cyA9IFdURjo6bWFwKG1fc2NyaXB0TWVzc2FnZUhhbmRsZXJzLCBbXShhdXRvIGVudHJ5KSB7Cisg
ICAgICAgIHJldHVybiBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlckRhdGEgeyBlbnRyeS52YWx1ZS0+
aWRlbnRpZmllcigpLCBlbnRyeS52YWx1ZS0+d29ybGQoKS5pZGVudGlmaWVyKCksIGVudHJ5LnZh
bHVlLT5uYW1lKCkgfTsKKyAgICB9KTsKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMp
CiAgICAgcGFyYW1ldGVycy5jb250ZW50UnVsZUxpc3RzID0gY29udGVudFJ1bGVMaXN0RGF0YSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24v
QXV0aGVudGljYXRvck1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0
aGVudGljYXRpb24vQXV0aGVudGljYXRvck1hbmFnZXIuY3BwCmluZGV4IDkzNDgwZWQ1Y2IzOWE2
MWNiY2Y2NzM1MWUwYTg4MGVhMDlmZTQ0NzYuLjY1NzJmNTM5NTk4ZWY0MWRkMTAzMDVhY2VlYzhm
MTg3ZDhkNTI1MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhl
bnRpY2F0aW9uL0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHAKQEAgLTQx
NiwxMSArNDE2LDExIEBAIHZvaWQgQXV0aGVudGljYXRvck1hbmFnZXI6OnN0YXJ0RGlzY292ZXJ5
KGNvbnN0IFRyYW5zcG9ydFNldCYgdHJhbnNwb3J0cykKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwogICAgIEFTU0VSVChtX3NlcnZpY2VzLmlzRW1wdHkoKSAmJiB0cmFuc3BvcnRz
LnNpemUoKSA8PSBtYXhUcmFuc3BvcnROdW1iZXIpOwotICAgIGZvciAoYXV0byYgdHJhbnNwb3J0
IDogdHJhbnNwb3J0cykgeworICAgIG1fc2VydmljZXMgPSBXVEY6Om1hcCh0cmFuc3BvcnRzLCBb
dGhpc10oYXV0byYgdHJhbnNwb3J0KSB7CiAgICAgICAgIGF1dG8gc2VydmljZSA9IGNyZWF0ZVNl
cnZpY2UodHJhbnNwb3J0LCAqdGhpcyk7CiAgICAgICAgIHNlcnZpY2UtPnN0YXJ0RGlzY292ZXJ5
KCk7Ci0gICAgICAgIG1fc2VydmljZXMuYXBwZW5kKFdURk1vdmUoc2VydmljZSkpOwotICAgIH0K
KyAgICAgICAgcmV0dXJuIHNlcnZpY2U7CisgICAgfSk7CiB9CiAKIHZvaWQgQXV0aGVudGljYXRv
ck1hbmFnZXI6OmluaXRUaW1lT3V0VGltZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAKaW5kZXggYzc0MzQzZTY1Yjg4OWY3ODY5ZGM4Y2NhMzQw
NTFiOGIyNjU0MDJiNi4uZGVjOWU4MzkyMjM2OGZlNjE1NWUwM2Q2OWEzZjM3ZDlkYmYwMTc3OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwCkBA
IC0zNDAsMTYgKzM0MCwxMSBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6cmVtb3ZlQWxsSXRl
bXMoKQogCiAgICAgTE9HKEJhY2tGb3J3YXJkLCAiKEJhY2svRm9yd2FyZCkgV2ViQmFja0Zvcndh
cmRMaXN0ICVwIHJlbW92ZUFsbEl0ZW1zIChoYXMgJXp1IG9mIHRoZW0pIiwgdGhpcywgbV9lbnRy
aWVzLnNpemUoKSk7CiAKLSAgICBWZWN0b3I8UmVmPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiBy
ZW1vdmVkSXRlbXM7Ci0KLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9lbnRyaWVzKSB7CisgICAg
Zm9yIChhdXRvJiBlbnRyeSA6IG1fZW50cmllcykKICAgICAgICAgZGlkUmVtb3ZlSXRlbShlbnRy
eSk7Ci0gICAgICAgIHJlbW92ZWRJdGVtcy5hcHBlbmQoV1RGTW92ZShlbnRyeSkpOwotICAgIH0K
IAotICAgIG1fZW50cmllcy5jbGVhcigpOwogICAgIG1fY3VycmVudEluZGV4ID0gc3RkOjpudWxs
b3B0OwotICAgIG1fcGFnZS0+ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KG51bGxwdHIsIFdURk1v
dmUocmVtb3ZlZEl0ZW1zKSk7CisgICAgbV9wYWdlLT5kaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3Qo
bnVsbHB0ciwgc3RkOjpleGNoYW5nZShtX2VudHJpZXMsIHsgfSkpOwogfQogCiB2b2lkIFdlYkJh
Y2tGb3J3YXJkTGlzdDo6Y2xlYXIoKQpAQCAtMzYzLDIxICszNTgsMTcgQEAgdm9pZCBXZWJCYWNr
Rm9yd2FyZExpc3Q6OmNsZWFyKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPFdlYkJh
Y2tGb3J3YXJkTGlzdEl0ZW0+IGN1cnJlbnRJdGVtID0gdGhpcy0+Y3VycmVudEl0ZW0oKTsKLSAg
ICBWZWN0b3I8UmVmPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiByZW1vdmVkSXRlbXM7CiAKICAg
ICBpZiAoIWN1cnJlbnRJdGVtKSB7CiAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGV2ZXIgaGF2
ZSBubyBjdXJyZW50IGl0ZW0gaWYgd2UgYWxzbyBoYXZlIG5vIGN1cnJlbnQgaXRlbSBpbmRleC4K
ICAgICAgICAgQVNTRVJUKCFtX2N1cnJlbnRJbmRleCk7CiAKICAgICAgICAgLy8gQnV0IGp1c3Qg
aW4gY2FzZSBpdCBkb2VzIGhhcHBlbiBpbiBwcmFjdGljZSB3ZSBzaG91bGQgZ2V0IGJhY2sgaW50
byBhIGNvbnNpc3RlbnQgc3RhdGUgbm93LgotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewotICAgICAgICAgICAgZGlkUmVtb3ZlSXRlbShtX2VudHJpZXNbaV0pOwot
ICAgICAgICAgICAgcmVtb3ZlZEl0ZW1zLmFwcGVuZChXVEZNb3ZlKG1fZW50cmllc1tpXSkpOwot
ICAgICAgICB9CisgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2VudHJpZXMpCisgICAgICAg
ICAgICBkaWRSZW1vdmVJdGVtKGVudHJ5KTsKIAotICAgICAgICBtX2VudHJpZXMuY2xlYXIoKTsK
ICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIG1fcGFnZS0+
ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KG51bGxwdHIsIFdURk1vdmUocmVtb3ZlZEl0ZW1zKSk7
CisgICAgICAgIG1fcGFnZS0+ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KG51bGxwdHIsIHN0ZDo6
ZXhjaGFuZ2UobV9lbnRyaWVzLCB7IH0pKTsKIAogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
Mzg3LDYgKzM3OCw3IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjpjbGVhcigpCiAgICAgICAg
ICAgICBkaWRSZW1vdmVJdGVtKG1fZW50cmllc1tpXSk7CiAgICAgfQogCisgICAgVmVjdG9yPFJl
ZjxXZWJCYWNrRm9yd2FyZExpc3RJdGVtPj4gcmVtb3ZlZEl0ZW1zOwogICAgIHJlbW92ZWRJdGVt
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUgLSAxKTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggJiYgaSAhPSAq
bV9jdXJyZW50SW5kZXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5j
cHAKaW5kZXggZmExNzQyY2YzMmRhOTk1MjczMjNkZmM3YzhiZjBhNzkwNjMwNDFmZS4uNjFiZDMw
YTM2NDE0NzNjNWRiMmM1NzQzMGU5M2NiN2UyNjYzYWQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtODQ5LDEwICs4NDksOSBAQCB2b2lkIFdlYlBy
b2Nlc3NQb29sOjppbml0aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nl
c3MsIFdlYnNpdGVEYQogICAgICAgICAgICAgcGFyYW1ldGVycy5pbmplY3RlZEJ1bmRsZVBhdGhF
eHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKCpoYW5kbGUpOwogICAgIH0KIAotICAgIGZvciAoYXV0
byYgcGF0aCA6IG1fcmVzb2x2ZWRQYXRocy5hZGRpdGlvbmFsV2ViUHJvY2Vzc1NhbmRib3hFeHRl
bnNpb25QYXRocykgewotICAgICAgICBpZiAoYXV0byBoYW5kbGUgPSAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlV2l0aG91dFJlc29sdmluZ1BhdGgocGF0aCwgU2FuZGJveEV4dGVuc2lv
bjo6VHlwZTo6UmVhZE9ubHkpKQotICAgICAgICAgICAgcGFyYW1ldGVycy5hZGRpdGlvbmFsU2Fu
ZGJveEV4dGVuc2lvbkhhbmRsZXMuYXBwZW5kKFdURk1vdmUoKmhhbmRsZSkpOwotICAgIH0KKyAg
ICBwYXJhbWV0ZXJzLmFkZGl0aW9uYWxTYW5kYm94RXh0ZW5zaW9uSGFuZGxlcyA9IFdURjo6Y29t
cGFjdE1hcChtX3Jlc29sdmVkUGF0aHMuYWRkaXRpb25hbFdlYlByb2Nlc3NTYW5kYm94RXh0ZW5z
aW9uUGF0aHMsIFtdKGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZVdpdGhvdXRSZXNvbHZpbmdQYXRoKHBhdGgsIFNhbmRib3hFeHRlbnNp
b246OlR5cGU6OlJlYWRPbmx5KTsKKyAgICB9KTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CiAgICAgc2V0SmF2YVNjcmlwdENvbmZpZ3VyYXRpb25GaWxlRW5hYmxlZEZyb21EZWZhdWx0cygp
OwpAQCAtMTg3MCwxNCArMTg2OSw5IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZVByb2Nl
c3NGcm9tT3JpZ2luQ2FjaGVTZXQoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQogICAgIExPRyhQ
cm9jZXNzU3dhcHBpbmcsICIoUHJvY2Vzc1N3YXBwaW5nKSBSZW1vdmluZyBwcm9jZXNzIHdpdGgg
cGlkICVpIGZyb20gdGhlIG9yaWdpbiBjYWNoZSBzZXQiLCBwcm9jZXNzLnByb2Nlc3NJZGVudGlm
aWVyKCkpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIHZlcnkgaW5lZmZpY2llbnQgYXMg
dGhlIG51bWJlciBvZiByZW1lbWJlcmVkIG9yaWdpbnMgYW5kIHByb2Nlc3NlcyBncm93cwotICAg
IFZlY3RvcjxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gcmVnaXN0cmFibGVEb21haW5zVG9S
ZW1vdmU7Ci0gICAgZm9yIChhdXRvIGVudHJ5IDogbV9zd2FwcGVkUHJvY2Vzc2VzUGVyUmVnaXN0
cmFibGVEb21haW4pIHsKLSAgICAgICAgaWYgKGVudHJ5LnZhbHVlID09ICZwcm9jZXNzKQotICAg
ICAgICAgICAgcmVnaXN0cmFibGVEb21haW5zVG9SZW1vdmUuYXBwZW5kKGVudHJ5LmtleSk7Ci0g
ICAgfQotCi0gICAgZm9yIChhdXRvJiByZWdpc3RyYWJsZURvbWFpbiA6IHJlZ2lzdHJhYmxlRG9t
YWluc1RvUmVtb3ZlKQotICAgICAgICBtX3N3YXBwZWRQcm9jZXNzZXNQZXJSZWdpc3RyYWJsZURv
bWFpbi5yZW1vdmUocmVnaXN0cmFibGVEb21haW4pOworICAgIG1fc3dhcHBlZFByb2Nlc3Nlc1Bl
clJlZ2lzdHJhYmxlRG9tYWluLnJlbW92ZUlmKFsmXShhdXRvJiBlbnRyeSkgeworICAgICAgICBy
ZXR1cm4gZW50cnkudmFsdWUgPT0gJnByb2Nlc3M7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnByb2Nlc3NGb3JOYXZpZ2F0aW9uKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3Qg
QVBJOjpOYXZpZ2F0aW9uJiBuYXZpZ2F0aW9uLCBSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmIHNvdXJj
ZVByb2Nlc3MsIGNvbnN0IFVSTCYgc291cmNlVVJMLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xp
ZW50IHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFdlYlByb2Nlc3NQcm94eTo6Q2FwdGl2
ZVBvcnRhbE1vZGUgY2FwdGl2ZVBvcnRhbE1vZGUsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1l
SW5mbywgUmVmPFdlYnNpdGVEYXRhU3RvcmU+JiYgZGF0YVN0b3JlLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFJlZjxXZWJQcm9jZXNzUHJveHk+JiYsIFN1c3BlbmRlZFBhZ2VQcm94eSosIGNvbnN0
IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQcm94eS5jcHAKaW5kZXggYjEyODYwZGY1MTBiYzRlM2RmYmI3ZTNmYzkyMGI1
ZDA0MmI4NDMyMS4uMzY4YTM5NTg3ZGEzM2RlNjRjMWI4OWQwZTYzOGQzOGI4OGQ3YTE3YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCkBAIC05MzYsOCAr
OTM2LDkgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnByb2Nlc3NEaWRUZXJtaW5hdGVPckZhaWxl
ZFRvTGF1bmNoKFByb2Nlc3NUZXJtaW5hdGlvblJlYXMKIAogICAgIC8vIFRoZXJlIGlzIGEgbmVz
dGVkIHRyYW5zYWN0aW9uIGluIFdlYlBhZ2VQcm94eTo6cmVzZXRTdGF0ZUFmdGVyUHJvY2Vzc0V4
aXRlZCgpIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBjb21taXQgYmVmb3JlIHRoZSBjbGllbnQgY2Fs
bCBiZWxvdyAoZGlzcGF0Y2hQcm9jZXNzRGlkVGVybWluYXRlKS4KICAgICBWZWN0b3I8UGFnZUxv
YWRTdGF0ZTo6VHJhbnNhY3Rpb24+IHBhZ2VMb2FkU3RhdGVUcmFuc2FjdGlvbnM7CisgICAgcGFn
ZUxvYWRTdGF0ZVRyYW5zYWN0aW9ucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBhZ2VzLnNpemUo
KSk7CiAgICAgZm9yIChhdXRvJiBwYWdlIDogcGFnZXMpIHsKLSAgICAgICAgcGFnZUxvYWRTdGF0
ZVRyYW5zYWN0aW9ucy5hcHBlbmQocGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnRyYW5zYWN0aW9uKCkp
OworICAgICAgICBwYWdlTG9hZFN0YXRlVHJhbnNhY3Rpb25zLnVuY2hlY2tlZEFwcGVuZChwYWdl
LT5wYWdlTG9hZFN0YXRlKCkudHJhbnNhY3Rpb24oKSk7CiAgICAgICAgIHBhZ2UtPnJlc2V0U3Rh
dGVBZnRlclByb2Nlc3NUZXJtaW5hdGlvbihyZWFzb24pOwogICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNw
cAppbmRleCBiMzZkOWE3NGI5YTE3NWEwODE2YjdhMmUxNGYxMzlkYjVlZjU2ZTZkLi5kZmE3YjJh
NGM3NTk5OTJiYmMyNWJhNmFiOWVjYmIwYjI4MmM0NDc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAt
NDMxLDggKzQzMSwxMCBAQCBwcml2YXRlOgogICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vi
c2l0ZURhdGFUeXBlOjpEaXNrQ2FjaGUpKSB7CiAgICAgICAgIG1fcXVldWUtPmRpc3BhdGNoKFtt
ZWRpYUNhY2hlRGlyZWN0b3J5ID0gbV9jb25maWd1cmF0aW9uLT5tZWRpYUNhY2hlRGlyZWN0b3J5
KCkuaXNvbGF0ZWRDb3B5KCksIGNhbGxiYWNrQWdncmVnYXRvcl0gewogICAgICAgICAgICAgV2Vi
c2l0ZURhdGEgd2Vic2l0ZURhdGE7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Om9yaWdpbnNJbk1lZGlhQ2FjaGUobWVkaWFDYWNoZURp
cmVjdG9yeSkpCi0gICAgICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmQoV2Vi
c2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSwgMCB9
KTsKKyAgICAgICAgICAgIGF1dG8gb3JpZ2lucyA9IFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
Om9yaWdpbnNJbk1lZGlhQ2FjaGUobWVkaWFDYWNoZURpcmVjdG9yeSk7CisgICAgICAgICAgICB3
ZWJzaXRlRGF0YS5lbnRyaWVzID0gV1RGOjptYXAob3JpZ2lucywgW10oYXV0byYgb3JpZ2luKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vi
c2l0ZURhdGFUeXBlOjpEaXNrQ2FjaGUsIDAgfTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRXZWJzaXRlRGF0YShXVEZNb3ZlKHdlYnNpdGVEYXRh
KSk7CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTQ2OSw4ICs0NzEsOSBAQCBwcml2YXRlOgogICAg
IGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0
KSkgewogICAgICAgICBtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdlLT5nZXREZXZpY2VJZEhhc2hT
YWx0T3JpZ2lucyhbY2FsbGJhY2tBZ2dyZWdhdG9yXShhdXRvJiYgb3JpZ2lucykgewogICAgICAg
ICAgICAgV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGE7Ci0gICAgICAgICAgICB3aGlsZSAoIW9yaWdp
bnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5k
KFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbnMudGFrZUFueSgpLCBXZWJzaXRlRGF0YVR5cGU6
OkRldmljZUlkSGFzaFNhbHQsIDAgfSk7CisgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVz
ID0gV1RGOjptYXAob3JpZ2lucywgW10oYXV0byYgb3JpZ2luKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpEZXZp
Y2VJZEhhc2hTYWx0LCAwIH07CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGNhbGxiYWNr
QWdncmVnYXRvci0+YWRkV2Vic2l0ZURhdGEoV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAg
ICB9KTsKICAgICB9CkBAIC00NzksMTAgKzQ4MiwxMSBAQCBwcml2YXRlOgogICAgICAgICBtX3F1
ZXVlLT5kaXNwYXRjaChbZmV0Y2hPcHRpb25zLCBhcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5ID0g
bV9jb25maWd1cmF0aW9uLT5hcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KCkuaXNvbGF0ZWRDb3B5
KCksIGFwcGxpY2F0aW9uQ2FjaGVGbGF0RmlsZVN1YmRpcmVjdG9yeU5hbWUgPSBtX2NvbmZpZ3Vy
YXRpb24tPmFwcGxpY2F0aW9uQ2FjaGVGbGF0RmlsZVN1YmRpcmVjdG9yeU5hbWUoKS5pc29sYXRl
ZENvcHkoKSwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7CiAgICAgICAgICAgICBhdXRvIHN0b3JhZ2Ug
PSBXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y3JlYXRlKGFwcGxpY2F0aW9uQ2Fj
aGVEaXJlY3RvcnksIGFwcGxpY2F0aW9uQ2FjaGVGbGF0RmlsZVN1YmRpcmVjdG9yeU5hbWUpOwog
ICAgICAgICAgICAgV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGE7Ci0gICAgICAgICAgICBmb3IgKGF1
dG8mIG9yaWdpbiA6IHN0b3JhZ2UtPm9yaWdpbnNXaXRoQ2FjaGUoKSkgeworICAgICAgICAgICAg
YXV0byBvcmlnaW5zID0gc3RvcmFnZS0+b3JpZ2luc1dpdGhDYWNoZSgpOworICAgICAgICAgICAg
d2Vic2l0ZURhdGEuZW50cmllcyA9IFdURjo6bWFwKG9yaWdpbnMsIFsmXShhdXRvJiBvcmlnaW4p
IHsKICAgICAgICAgICAgICAgICB1aW50NjRfdCBzaXplID0gZmV0Y2hPcHRpb25zLmNvbnRhaW5z
KFdlYnNpdGVEYXRhRmV0Y2hPcHRpb246OkNvbXB1dGVTaXplcykgPyBzdG9yYWdlLT5kaXNrVXNh
Z2VGb3JPcmlnaW4ob3JpZ2luKSA6IDA7Ci0gICAgICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50
cmllcy5hcHBlbmQoV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6
Ok9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlLCBzaXplIH0pOwotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVE
YXRhVHlwZTo6T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGUsIHNpemUgfTsKKyAgICAgICAgICAg
IH0pOwogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRXZWJzaXRlRGF0YShXVEZN
b3ZlKHdlYnNpdGVEYXRhKSk7CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTQ5MCw4ICs0OTQsOSBA
QCBwcml2YXRlOgogICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpX
ZWJTUUxEYXRhYmFzZXMpICYmIGlzUGVyc2lzdGVudCgpKSB7CiAgICAgICAgIG1fcXVldWUtPmRp
c3BhdGNoKFt3ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSA9IG1fY29uZmlndXJhdGlvbi0+d2ViU1FM
RGF0YWJhc2VEaXJlY3RvcnkoKS5pc29sYXRlZENvcHkoKSwgY2FsbGJhY2tBZ2dyZWdhdG9yXSgp
IHsKICAgICAgICAgICAgIFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhOwotICAgICAgICAgICAgZm9y
IChhdXRvJiBvcmlnaW4gOiBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXJXaXRoRGF0
YWJhc2VQYXRoKHdlYlNRTERhdGFiYXNlRGlyZWN0b3J5KS0+b3JpZ2lucygpKQotICAgICAgICAg
ICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9y
aWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpXZWJTUUxEYXRhYmFzZXMsIDAgfSk7CisgICAgICAgICAg
ICB3ZWJzaXRlRGF0YS5lbnRyaWVzID0gV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2Vy
V2l0aERhdGFiYXNlUGF0aCh3ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSktPm9yaWdpbnMoKS5tYXAo
W10oYXV0byYgb3JpZ2luKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhOjpF
bnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpXZWJTUUxEYXRhYmFzZXMsIDAgfTsKKyAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRXZWJzaXRl
RGF0YShXVEZNb3ZlKHdlYnNpdGVEYXRhKSk7CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTQ5OSw4
ICs1MDQsOSBAQCBwcml2YXRlOgogICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURh
dGFUeXBlOjpNZWRpYUtleXMpICYmIGlzUGVyc2lzdGVudCgpKSB7CiAgICAgICAgIG1fcXVldWUt
PmRpc3BhdGNoKFttZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5ID0gbV9jb25maWd1cmF0aW9uLT5t
ZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KCkuaXNvbGF0ZWRDb3B5KCksIGNhbGxiYWNrQWdncmVn
YXRvcl0gewogICAgICAgICAgICAgV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGE7Ci0gICAgICAgICAg
ICBmb3IgKGF1dG8mIG9yaWdpbiA6IG1lZGlhS2V5T3JpZ2lucyhtZWRpYUtleXNTdG9yYWdlRGly
ZWN0b3J5KSkKLSAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZChXZWJz
aXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6TWVkaWFLZXlzLCAwIH0p
OworICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcyA9IG1lZGlhS2V5T3JpZ2lucyhtZWRp
YUtleXNTdG9yYWdlRGlyZWN0b3J5KS5tYXAoW10oYXV0byYgb3JpZ2luKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBl
OjpNZWRpYUtleXMsIDAgfTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgY2FsbGJhY2tB
Z2dyZWdhdG9yLT5hZGRXZWJzaXRlRGF0YShXVEZNb3ZlKHdlYnNpdGVEYXRhKSk7CiAgICAgICAg
IH0pOwogICAgIH0KQEAgLTY2Nyw4ICs2NzMsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJl
bW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQog
ICAgIFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnM7CiAKICAgICBm
b3IgKGNvbnN0IGF1dG8mIGRhdGFSZWNvcmQgOiBkYXRhUmVjb3JkcykgeworICAgICAgICBvcmln
aW5zLnJlc2VydmVDYXBhY2l0eShvcmlnaW5zLnNpemUoKSArIGRhdGFSZWNvcmQub3JpZ2lucy5z
aXplKCkpOwogICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IGRhdGFSZWNvcmQub3JpZ2lucykK
LSAgICAgICAgICAgIG9yaWdpbnMuYXBwZW5kKG9yaWdpbik7CisgICAgICAgICAgICBvcmlnaW5z
LnVuY2hlY2tlZEFwcGVuZChvcmlnaW4pOwogICAgIH0KIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gUmVtb3ZhbENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CkBAIC03MDcsMTMgKzcxNCwxNiBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVz
LCBjb25zdCBWZQogICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gSFNUU0NhY2hlSG9zdE5hbWVz
OwogICAgICAgICAgICAgVmVjdG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiByZWdpc3Ry
YWJsZURvbWFpbnM7CiAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGRhdGFSZWNvcmQgOiBk
YXRhUmVjb3JkcykgeworICAgICAgICAgICAgICAgIGNvb2tpZUhvc3ROYW1lcy5yZXNlcnZlQ2Fw
YWNpdHkoY29va2llSG9zdE5hbWVzLnNpemUoKSArIGRhdGFSZWNvcmQuY29va2llSG9zdE5hbWVz
LnNpemUoKSk7CiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBob3N0TmFtZSA6IGRhdGFSZWNv
cmQuY29va2llSG9zdE5hbWVzKQotICAgICAgICAgICAgICAgICAgICBjb29raWVIb3N0TmFtZXMu
YXBwZW5kKGhvc3ROYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgY29va2llSG9zdE5hbWVzLnVu
Y2hlY2tlZEFwcGVuZChob3N0TmFtZSk7CisgICAgICAgICAgICAgICAgSFNUU0NhY2hlSG9zdE5h
bWVzLnJlc2VydmVDYXBhY2l0eShIU1RTQ2FjaGVIb3N0TmFtZXMuc2l6ZSgpICsgZGF0YVJlY29y
ZC5IU1RTQ2FjaGVIb3N0TmFtZXMuc2l6ZSgpKTsKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8m
IGhvc3ROYW1lIDogZGF0YVJlY29yZC5IU1RTQ2FjaGVIb3N0TmFtZXMpCi0gICAgICAgICAgICAg
ICAgICAgIEhTVFNDYWNoZUhvc3ROYW1lcy5hcHBlbmQoaG9zdE5hbWUpOworICAgICAgICAgICAg
ICAgICAgICBIU1RTQ2FjaGVIb3N0TmFtZXMudW5jaGVja2VkQXBwZW5kKGhvc3ROYW1lKTsKICNp
ZiBFTkFCTEUoSU5URUxMSUdFTlRfVFJBQ0tJTkdfUFJFVkVOVElPTikKKyAgICAgICAgICAgICAg
ICByZWdpc3RyYWJsZURvbWFpbnMucmVzZXJ2ZUNhcGFjaXR5KHJlZ2lzdHJhYmxlRG9tYWlucy5z
aXplKCkgKyBkYXRhUmVjb3JkLnJlc291cmNlTG9hZFN0YXRpc3RpY3NSZWdpc3RyYWJsZURvbWFp
bnMuc2l6ZSgpKTsKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHJlZ2lzdHJhYmxlRG9tYWlu
IDogZGF0YVJlY29yZC5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUmVnaXN0cmFibGVEb21haW5zKQot
ICAgICAgICAgICAgICAgICAgICByZWdpc3RyYWJsZURvbWFpbnMuYXBwZW5kKHJlZ2lzdHJhYmxl
RG9tYWluKTsKKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmFibGVEb21haW5zLnVuY2hlY2tl
ZEFwcGVuZChyZWdpc3RyYWJsZURvbWFpbik7CiAjZW5kaWYKICAgICAgICAgICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1RleHRDaGVja2VySU9TLm1tIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1RleHRDaGVja2VySU9TLm1tCmluZGV4IGZhM2Jj
NTBiMjRmYWYyZWU1ZmVlNzQ2ZDJiZWM4MDRhYTRhZmI3MmMuLjg1NzU5YzFhNDFkNDIyNGE3ZmRm
YWJkOTkxNTFiNjA2ODljMDgwOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9UZXh0Q2hlY2tlcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
VGV4dENoZWNrZXJJT1MubW0KQEAgLTM0LDYgKzM0LDcgQEAKICNpbXBvcnQgPHd0Zi9IYXNoTWFw
Lmg+CiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5Q
dHIuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3Rl
eHQvU3RyaW5nVmlldy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTI0MCwxMiArMjQxLDEz
IEBAIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBh
cmFncmFwaChTcGVsbERvY3VtZW50VGFnIHNwCiAgICAgICAgICAgICAgICAgVGV4dENoZWNraW5n
UmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgICAgICByZXN1bHQudHlwZSA9IFRleHRDaGVja2lu
Z1R5cGU6OlNwZWxsaW5nOwogICAgICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJh
bmdlOwotICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAg
ICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIH0gZWxz
ZSBpZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVHcmFtbWFyICYmIGNoZWNraW5n
VHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcikpIHsKICAgICAgICAgICAg
ICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAgICAgICAgIE5TQXJyYXkg
KmRldGFpbHMgPSBbaW5jb21pbmdSZXN1bHQgZ3JhbW1hckRldGFpbHNdOwogICAgICAgICAgICAg
ICAgIHJlc3VsdC50eXBlID0gVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcjsKICAgICAgICAgICAg
ICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5nZTsKKyAgICAgICAgICAgICAgICByZXN1bHQu
ZGV0YWlscy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRldGFpbHMuY291bnQpOwogICAgICAgICAg
ICAgICAgIGZvciAoTlNEaWN0aW9uYXJ5ICppbmNvbWluZ0RldGFpbCBpbiBkZXRhaWxzKSB7CiAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChpbmNvbWluZ0RldGFpbCk7CiAgICAgICAgICAgICAg
ICAgICAgIEdyYW1tYXJEZXRhaWwgZGV0YWlsOwpAQCAtMjYwLDEyICsyNjIsMTAgQEAgVmVjdG9y
PFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFNw
ZWxsRG9jdW1lbnRUYWcgc3AKICAgICAgICAgICAgICAgICAgICAgZGV0YWlsLnJhbmdlID0gZGV0
YWlsTlNSYW5nZTsKICAgICAgICAgICAgICAgICAgICAgZGV0YWlsLnVzZXJEZXNjcmlwdGlvbiA9
IFtpbmNvbWluZ0RldGFpbCBvYmplY3RGb3JLZXk6QCJOU0dyYW1tYXJVc2VyRGVzY3JpcHRpb24i
XTsKICAgICAgICAgICAgICAgICAgICAgTlNBcnJheSAqZ3Vlc3NlcyA9IFtpbmNvbWluZ0RldGFp
bCBvYmplY3RGb3JLZXk6QCJOU0dyYW1tYXJDb3JyZWN0aW9ucyJdOwotICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChOU1N0cmluZyAqZ3Vlc3MgaW4gZ3Vlc3Nl
cykKLSAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbC5ndWVzc2VzLmFwcGVuZChndWVzcyk7
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5kZXRhaWxzLmFwcGVuZChkZXRhaWwpOworICAg
ICAgICAgICAgICAgICAgICBkZXRhaWwuZ3Vlc3NlcyA9IG1ha2VWZWN0b3I8U3RyaW5nPihndWVz
c2VzKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmRldGFpbHMudW5jaGVja2VkQXBwZW5k
KGRldGFpbCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBw
ZW5kKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1
bHQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFzc2lzdGFudC5tbQppbmRl
eCBjOWFlMWE2Njc3NzFiMjYxMDk1ODU0ZWFlNTllMjg1YWI3NTJmNjdiLi40NWRkMmUxMzRjNGQ4
NzhmNjViMTZmOWRmNDRkNjE0MDEzNTlmYmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFzc2lzdGFudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFzc2lzdGFudC5tbQpAQCAtMjA3LDEyICsyMDcs
MTEgQEAgLSAoQ0dSZWN0KXByZXNlbnRhdGlvblJlY3RGb3JFbGVtZW50VXNpbmdDbG9zZXN0SW5k
aWNhdGVkUmVjdAogCiAgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0b3VjaExvY2F0aW9uID0gX3Bv
c2l0aW9uSW5mb3JtYXRpb24tPnJlcXVlc3QucG9pbnQ7CiAgICAgV2ViQ29yZTo6RmxvYXRQb2lu
dCBsaW5rRWxlbWVudExvY2F0aW9uID0gaW5kaWNhdG9yLnRleHRCb3VuZGluZ1JlY3RJblJvb3RW
aWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0
PiBpbmRpY2F0ZWRSZWN0czsKLSAgICBmb3IgKGF1dG8gcmVjdCA6IGluZGljYXRvci50ZXh0UmVj
dHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKSB7CisgICAgYXV0byBpbmRpY2F0ZWRSZWN0cyA9
IGluZGljYXRvci50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzLm1hcChbJl0oYXV0
byByZWN0KSB7CiAgICAgICAgIHJlY3QuaW5mbGF0ZSgyKTsKICAgICAgICAgcmVjdC5tb3ZlQnko
bGlua0VsZW1lbnRMb2NhdGlvbik7Ci0gICAgICAgIGluZGljYXRlZFJlY3RzLmFwcGVuZChyZWN0
KTsKLSAgICB9CisgICAgICAgIHJldHVybiByZWN0OworICAgIH0pOwogCiAgICAgZm9yIChjb25z
dCBhdXRvJiBwYXRoIDogV2ViQ29yZTo6UGF0aFV0aWxpdGllczo6cGF0aHNXaXRoU2hyaW5rV3Jh
cHBlZFJlY3RzKGluZGljYXRlZFJlY3RzLCAwKSkgewogICAgICAgICBhdXRvIGJvdW5kaW5nUmVj
dCA9IHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1RleHRDaGVja2VyTWFjLm1tCmluZGV4IDE2ZDY4MzhlNTQ4ZTA0MzJmYmQxOGY4ZDRkMmFk
ZTFjMmMxMDhmNmUuLmVjZTJlM2UyNDUzMTVlZTcxYWQ5Nzk3ZmE2Y2M4MGI0MjkzMzBkMTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0KQEAgLTM0
NCwxMiArMzQ0LDEzIEBAIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpj
aGVja1RleHRPZlBhcmFncmFwaChTcGVsbERvY3VtZW50VGFnIHNwCiAgICAgICAgICAgICBUZXh0
Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hl
Y2tpbmdUeXBlOjpTcGVsbGluZzsKICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJh
bmdlOwotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgIHJl
c3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0
VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVHcmFtbWFyICYmIGNoZWNraW5nVHlwZXMuY29udGFp
bnMoVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcikpIHsKICAgICAgICAgICAgIFRleHRDaGVja2lu
Z1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICBOU0FycmF5ICpkZXRhaWxzID0gW2luY29taW5n
UmVzdWx0IGdyYW1tYXJEZXRhaWxzXTsKICAgICAgICAgICAgIHJlc3VsdC50eXBlID0gVGV4dENo
ZWNraW5nVHlwZTo6R3JhbW1hcjsKICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJh
bmdlOworICAgICAgICAgICAgcmVzdWx0LmRldGFpbHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShk
ZXRhaWxzLmNvdW50KTsKICAgICAgICAgICAgIGZvciAoTlNEaWN0aW9uYXJ5ICppbmNvbWluZ0Rl
dGFpbCBpbiBkZXRhaWxzKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGluY29taW5nRGV0YWls
KTsKICAgICAgICAgICAgICAgICBHcmFtbWFyRGV0YWlsIGRldGFpbDsKQEAgLTM2MSw5ICszNjIs
OCBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQ
YXJhZ3JhcGgoU3BlbGxEb2N1bWVudFRhZyBzcAogICAgICAgICAgICAgICAgIGRldGFpbC5yYW5n
ZSA9IGRldGFpbE5TUmFuZ2U7CiAgICAgICAgICAgICAgICAgZGV0YWlsLnVzZXJEZXNjcmlwdGlv
biA9IFtpbmNvbWluZ0RldGFpbCBvYmplY3RGb3JLZXk6TlNHcmFtbWFyVXNlckRlc2NyaXB0aW9u
XTsKICAgICAgICAgICAgICAgICBOU0FycmF5ICpndWVzc2VzID0gW2luY29taW5nRGV0YWlsIG9i
amVjdEZvcktleTpOU0dyYW1tYXJDb3JyZWN0aW9uc107Ci0gICAgICAgICAgICAgICAgZm9yIChO
U1N0cmluZyAqZ3Vlc3MgaW4gZ3Vlc3NlcykKLSAgICAgICAgICAgICAgICAgICAgZGV0YWlsLmd1
ZXNzZXMuYXBwZW5kKFN0cmluZyhndWVzcykpOwotICAgICAgICAgICAgICAgIHJlc3VsdC5kZXRh
aWxzLmFwcGVuZChkZXRhaWwpOworICAgICAgICAgICAgICAgIGRldGFpbC5ndWVzc2VzID0gbWFr
ZVZlY3RvcjxTdHJpbmc+KGd1ZXNzZXMpOworICAgICAgICAgICAgICAgIHJlc3VsdC5kZXRhaWxz
LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGRldGFpbCkpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRU
eXBlID09IE5TVGV4dENoZWNraW5nVHlwZUxpbmsgJiYgY2hlY2tpbmdUeXBlcy5jb250YWlucyhU
ZXh0Q2hlY2tpbmdUeXBlOjpMaW5rKSkgewpAQCAtMzcxLDMxICszNzEsMzEgQEAgVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFNwZWxs
RG9jdW1lbnRUYWcgc3AKICAgICAgICAgICAgIHJlc3VsdC50eXBlID0gVGV4dENoZWNraW5nVHlw
ZTo6TGluazsKICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJhbmdlOwogICAgICAg
ICAgICAgcmVzdWx0LnJlcGxhY2VtZW50ID0gW1tpbmNvbWluZ1Jlc3VsdCBVUkxdIGFic29sdXRl
U3RyaW5nXTsKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAg
ICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICB9IGVsc2UgaWYgKHJl
c3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlUXVvdGUgJiYgY2hlY2tpbmdUeXBlcy5jb250
YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpRdW90ZSkpIHsKICAgICAgICAgICAgIFRleHRDaGVja2lu
Z1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICByZXN1bHQudHlwZSA9IFRleHRDaGVja2luZ1R5
cGU6OlF1b3RlOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFuZ2U7CiAgICAg
ICAgICAgICByZXN1bHQucmVwbGFjZW1lbnQgPSBbaW5jb21pbmdSZXN1bHQgcmVwbGFjZW1lbnRT
dHJpbmddOwotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAg
IHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgIH0gZWxzZSBpZiAocmVz
dWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVEYXNoICYmIGNoZWNraW5nVHlwZXMuY29udGFp
bnMoVGV4dENoZWNraW5nVHlwZTo6RGFzaCkpIHsKICAgICAgICAgICAgIFRleHRDaGVja2luZ1Jl
c3VsdCByZXN1bHQ7CiAgICAgICAgICAgICByZXN1bHQudHlwZSA9IFRleHRDaGVja2luZ1R5cGU6
OkRhc2g7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5nZTsKICAgICAgICAg
ICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IFtpbmNvbWluZ1Jlc3VsdCByZXBsYWNlbWVudFN0cmlu
Z107Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgcmVz
dWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRU
eXBlID09IE5TVGV4dENoZWNraW5nVHlwZVJlcGxhY2VtZW50ICYmIGNoZWNraW5nVHlwZXMuY29u
dGFpbnMoVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQpKSB7CiAgICAgICAgICAgICBUZXh0
Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hl
Y2tpbmdUeXBlOjpSZXBsYWNlbWVudDsKICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3Vs
dFJhbmdlOwogICAgICAgICAgICAgcmVzdWx0LnJlcGxhY2VtZW50ID0gW2luY29taW5nUmVzdWx0
IHJlcGxhY2VtZW50U3RyaW5nXTsKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7
CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICB9
IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbiAmJiBj
aGVja2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rpb24pKSB7CiAg
ICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAgICAgcmVzdWx0
LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpDb3JyZWN0aW9uOwogICAgICAgICAgICAgcmVzdWx0
LnJhbmdlID0gcmVzdWx0UmFuZ2U7CiAgICAgICAgICAgICByZXN1bHQucmVwbGFjZW1lbnQgPSBb
aW5jb21pbmdSZXN1bHQgcmVwbGFjZW1lbnRTdHJpbmddOwotICAgICAgICAgICAgcmVzdWx0cy5h
cHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0
KSk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvci5jcHAKaW5kZXggNzM1NzZh
MjQ3Y2UxMTc1Mjc1NjVmYjFkMjZiNGNkMDliMjQ3MmU5Zi4uMTI3YWMxZTQ1NzcxNWJmN2RmYjBl
OWM5M2ExMDQyMGI0ZjVjMzU3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvci5jcHAKQEAgLTk4LDkgKzk4
LDkgQEAgdm9pZCBXZWJQYXltZW50Q29vcmRpbmF0b3I6Om9wZW5QYXltZW50U2V0dXAoY29uc3Qg
U3RyaW5nJiBtZXJjaGFudElkZW50aWZpZXIsIGMKIAogYm9vbCBXZWJQYXltZW50Q29vcmRpbmF0
b3I6OnNob3dQYXltZW50VUkoY29uc3QgVVJMJiBvcmlnaW5hdGluZ1VSTCwgY29uc3QgVmVjdG9y
PFVSTD4mIGxpbmtJY29uVVJMcywgY29uc3QgV2ViQ29yZTo6QXBwbGVQYXlTZXNzaW9uUGF5bWVu
dFJlcXVlc3QmIHBheW1lbnRSZXF1ZXN0KQogewotICAgIFZlY3RvcjxTdHJpbmc+IGxpbmtJY29u
VVJMU3RyaW5nczsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGxpbmtJY29uVVJMIDogbGlua0ljb25V
UkxzKQotICAgICAgICBsaW5rSWNvblVSTFN0cmluZ3MuYXBwZW5kKGxpbmtJY29uVVJMLnN0cmlu
ZygpKTsKKyAgICBhdXRvIGxpbmtJY29uVVJMU3RyaW5ncyA9IGxpbmtJY29uVVJMcy5tYXAoW10o
YXV0byYgbGlua0ljb25VUkwpIHsKKyAgICAgICAgcmV0dXJuIGxpbmtJY29uVVJMLnN0cmluZygp
OworICAgIH0pOwogCiAgICAgYm9vbCByZXN1bHQ7CiAgICAgaWYgKCFzZW5kU3luYyhNZXNzYWdl
czo6V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OlNob3dQYXltZW50VUkobV93ZWJQYWdlLmlk
ZW50aWZpZXIoKSwgbV93ZWJQYWdlLndlYlBhZ2VQcm94eUlkZW50aWZpZXIoKSwgb3JpZ2luYXRp
bmdVUkwuc3RyaW5nKCksIGxpbmtJY29uVVJMU3RyaW5ncywgcGF5bWVudFJlcXVlc3QpLCBNZXNz
YWdlczo6V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OlNob3dQYXltZW50VUk6OlJlcGx5KHJl
c3VsdCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0F1dG9tYXRpb24v
V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
QXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5LmNwcAppbmRleCBiMGZlODM1NzIy
M2IzMTMzZmM0ZGIyZmJhYWQ4ZTczOWY1ZTNiOWQ2Li5mNDVjZmI0MTkxMzZiN2NmMDhlM2JmZDQ5
NmIyYjY5N2EzYzllZmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5LmNwcApAQCAt
ODA1LDEzICs4MDUsMTIgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpzZXRGaWxl
c0ZvcklucHV0RmlsZVVwbG9hZChXZWJDb3JlOjpQYWdlSWRlbnRpZmkKICAgICBhdXRvJiBpbnB1
dEVsZW1lbnQgPSBkb3duY2FzdDxXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50PigqY29yZUVsZW1l
bnQpOwogICAgIFZlY3RvcjxSZWY8V2ViQ29yZTo6RmlsZT4+IGZpbGVPYmplY3RzOwogICAgIGlm
IChpbnB1dEVsZW1lbnQubXVsdGlwbGUoKSkgewotICAgICAgICBpZiAoYXV0byogZmlsZXMgPSBp
bnB1dEVsZW1lbnQuZmlsZXMoKSkgewotICAgICAgICAgICAgZm9yIChhdXRvJiBmaWxlIDogZmls
ZXMtPmZpbGVzKCkpCi0gICAgICAgICAgICAgICAgZmlsZU9iamVjdHMuYXBwZW5kKGZpbGUuY29w
eVJlZigpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoYXV0byogZmlsZXMgPSBpbnB1dEVsZW1l
bnQuZmlsZXMoKSkKKyAgICAgICAgICAgIGZpbGVPYmplY3RzLmFwcGVuZFZlY3RvcihmaWxlcy0+
ZmlsZXMoKSk7CiAgICAgfQorICAgIGZpbGVPYmplY3RzLnJlc2VydmVDYXBhY2l0eShmaWxlT2Jq
ZWN0cy5zaXplKCkgKyBmaWxlbmFtZXMuc2l6ZSgpKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHBh
dGggOiBmaWxlbmFtZXMpCi0gICAgICAgIGZpbGVPYmplY3RzLmFwcGVuZChXZWJDb3JlOjpGaWxl
OjpjcmVhdGUoJmlucHV0RWxlbWVudC5kb2N1bWVudCgpLCBwYXRoKSk7CisgICAgICAgIGZpbGVP
YmplY3RzLnVuY2hlY2tlZEFwcGVuZChXZWJDb3JlOjpGaWxlOjpjcmVhdGUoJmlucHV0RWxlbWVu
dC5kb2N1bWVudCgpLCBwYXRoKSk7CiAgICAgaW5wdXRFbGVtZW50LnNldEZpbGVzKFdlYkNvcmU6
OkZpbGVMaXN0OjpjcmVhdGUoV1RGTW92ZShmaWxlT2JqZWN0cykpKTsKIAogICAgIGNvbXBsZXRp
b25IYW5kbGVyKHN0ZDo6bnVsbG9wdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlci5jcHAKaW5k
ZXggN2M5ZDQ1NjlhNGU1MGIwNzEzYTc3YThiNGFjMjQwZmFlNDZkZGQxZS4uODEzYWYyODU5ODNj
YjgyYzMwZjI0ZTI1MzcxNTVjN2YwZjNiNjEyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2Vy
LmNwcApAQCAtMTYwLDggKzE2MCw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVBsYXllclByaXZh
dGVJbnRlcmZhY2U+IFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlcjo6Y3JlYXRlUmVtCiAgICAgcHJv
eHlDb25maWd1cmF0aW9uLmlzVmlkZW8gPSBwbGF5ZXItPmlzVmlkZW9QbGF5ZXIoKTsKIAogI2lm
IEVOQUJMRShBVkZfQ0FQVElPTlMpCi0gICAgZm9yIChjb25zdCBhdXRvJiB0cmFjayA6IHBsYXll
ci0+b3V0T2ZCYW5kVHJhY2tTb3VyY2VzKCkpCi0gICAgICAgIHByb3h5Q29uZmlndXJhdGlvbi5v
dXRPZkJhbmRUcmFja0RhdGEuYXBwZW5kKHRyYWNrLT5kYXRhKCkpOworICAgIHByb3h5Q29uZmln
dXJhdGlvbi5vdXRPZkJhbmRUcmFja0RhdGEgPSBwbGF5ZXItPm91dE9mQmFuZFRyYWNrU291cmNl
cygpLm1hcChbXShhdXRvJiB0cmFjaykgeworICAgICAgICByZXR1cm4gdHJhY2stPmRhdGEoKTsK
KyAgICB9KTsKICNlbmRpZgogCiAgICAgYXV0byBkb2N1bWVudFNlY3VyaXR5T3JpZ2luID0gcGxh
eWVyLT5kb2N1bWVudFNlY3VyaXR5T3JpZ2luKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL21lZGlhL1NvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGUuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9Tb3VyY2VCdWZmZXJQcml2YXRlUmVtb3Rl
LmNwcAppbmRleCA5NjZmYzkzYjc3YWZhYTNlNjIwOGQ3YWJhNWFlZDJjN2E5NGM3NGIyLi40ZWYx
NjQwYTQwMTAwNmE2YjhmNjljYzUwMTE2NGE4YmQxOTBlYjkxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1NvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvU291cmNlQnVmZmVyUHJp
dmF0ZVJlbW90ZS5jcHAKQEAgLTMzOCwxNiArMzM4LDExIEBAIHZvaWQgU291cmNlQnVmZmVyUHJp
dmF0ZVJlbW90ZTo6dXBkYXRlVHJhY2tJZHMoVmVjdG9yPHN0ZDo6cGFpcjxBdG9tU3RyaW5nLCBB
dG9tCiAgICAgaWYgKCFtX2dwdVByb2Nlc3NDb25uZWN0aW9uKQogICAgICAgICByZXR1cm47CiAK
LSAgICBWZWN0b3I8c3RkOjpwYWlyPFRyYWNrUHJpdmF0ZVJlbW90ZUlkZW50aWZpZXIsIFRyYWNr
UHJpdmF0ZVJlbW90ZUlkZW50aWZpZXI+PiBpZGVudGlmaWVyUGFpcnM7Ci0KLSAgICBmb3IgKGF1
dG8mIHRyYWNrSWRQYWlyIDogdHJhY2tJZFBhaXJzKSB7CisgICAgYXV0byBpZGVudGlmaWVyUGFp
cnMgPSB0cmFja0lkUGFpcnMubWFwKFt0aGlzXShhdXRvJiB0cmFja0lkUGFpcikgewogICAgICAg
ICBBU1NFUlQobV9wcmV2VHJhY2tJZGVudGlmaWVyTWFwLmNvbnRhaW5zKHRyYWNrSWRQYWlyLmZp
cnN0KSk7CiAgICAgICAgIEFTU0VSVChtX3RyYWNrSWRlbnRpZmllck1hcC5jb250YWlucyh0cmFj
a0lkUGFpci5zZWNvbmQpKTsKLQotICAgICAgICBhdXRvIG9sZElkZW50aWZpZXIgPSBtX3ByZXZU
cmFja0lkZW50aWZpZXJNYXAudGFrZSh0cmFja0lkUGFpci5maXJzdCk7Ci0gICAgICAgIGF1dG8g
bmV3SWRlbnRpZmllciA9IG1fdHJhY2tJZGVudGlmaWVyTWFwLmdldCh0cmFja0lkUGFpci5zZWNv
bmQpOwotICAgICAgICBpZGVudGlmaWVyUGFpcnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG9sZElk
ZW50aWZpZXIsIG5ld0lkZW50aWZpZXIpKTsKLSAgICB9CisgICAgICAgIHJldHVybiBzdGQ6OnBh
aXIgeyBtX3ByZXZUcmFja0lkZW50aWZpZXJNYXAudGFrZSh0cmFja0lkUGFpci5maXJzdCksIG1f
dHJhY2tJZGVudGlmaWVyTWFwLmdldCh0cmFja0lkUGFpci5zZWNvbmQpIH07CisgICAgfSk7CiAK
ICAgICBtX2dwdVByb2Nlc3NDb25uZWN0aW9uLT5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6
UmVtb3RlU291cmNlQnVmZmVyUHJveHk6OlVwZGF0ZVRyYWNrSWRzKGlkZW50aWZpZXJQYWlycyks
IG1fcmVtb3RlU291cmNlQnVmZmVySWRlbnRpZmllcik7CiB9CkBAIC0zODMsMjcgKzM3OCwzMCBA
QCB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGU6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRS
ZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZQogICAgIHNlZ21lbnQuZHVyYXRpb24gPSBzZWdtZW50
SW5mby5kdXJhdGlvbjsKIAogICAgIG1fcHJldlRyYWNrSWRlbnRpZmllck1hcC5zd2FwKG1fdHJh
Y2tJZGVudGlmaWVyTWFwKTsKKyAgICBzZWdtZW50LmF1ZGlvVHJhY2tzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoc2VnbWVudEluZm8uYXVkaW9UcmFja3Muc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8m
IGF1ZGlvVHJhY2sgOiBzZWdtZW50SW5mby5hdWRpb1RyYWNrcykgewogICAgICAgICBTb3VyY2VC
dWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQ6OkF1ZGlvVHJhY2tJbmZv
cm1hdGlvbiBpbmZvOwogICAgICAgICBpbmZvLnRyYWNrID0gbV9tZWRpYVBsYXllclByaXZhdGUt
PmF1ZGlvVHJhY2tQcml2YXRlUmVtb3RlKGF1ZGlvVHJhY2suaWRlbnRpZmllcik7CiAgICAgICAg
IGluZm8uZGVzY3JpcHRpb24gPSBSZW1vdGVNZWRpYURlc2NyaXB0aW9uOjpjcmVhdGUoYXVkaW9U
cmFjay5kZXNjcmlwdGlvbik7Ci0gICAgICAgIHNlZ21lbnQuYXVkaW9UcmFja3MuYXBwZW5kKGlu
Zm8pOworICAgICAgICBzZWdtZW50LmF1ZGlvVHJhY2tzLnVuY2hlY2tlZEFwcGVuZChpbmZvKTsK
ICAgICAgICAgbV90cmFja0lkZW50aWZpZXJNYXAuYWRkKGluZm8udHJhY2stPmlkKCksIGF1ZGlv
VHJhY2suaWRlbnRpZmllcik7CiAgICAgfQogCisgICAgc2VnbWVudC52aWRlb1RyYWNrcy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KHNlZ21lbnRJbmZvLnZpZGVvVHJhY2tzLnNpemUoKSk7CiAgICAg
Zm9yIChhdXRvJiB2aWRlb1RyYWNrIDogc2VnbWVudEluZm8udmlkZW9UcmFja3MpIHsKICAgICAg
ICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25TZWdtZW50OjpWaWRl
b1RyYWNrSW5mb3JtYXRpb24gaW5mbzsKICAgICAgICAgaW5mby50cmFjayA9IG1fbWVkaWFQbGF5
ZXJQcml2YXRlLT52aWRlb1RyYWNrUHJpdmF0ZVJlbW90ZSh2aWRlb1RyYWNrLmlkZW50aWZpZXIp
OwogICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0gUmVtb3RlTWVkaWFEZXNjcmlwdGlvbjo6Y3Jl
YXRlKHZpZGVvVHJhY2suZGVzY3JpcHRpb24pOwotICAgICAgICBzZWdtZW50LnZpZGVvVHJhY2tz
LmFwcGVuZChpbmZvKTsKKyAgICAgICAgc2VnbWVudC52aWRlb1RyYWNrcy51bmNoZWNrZWRBcHBl
bmQoaW5mbyk7CiAgICAgICAgIG1fdHJhY2tJZGVudGlmaWVyTWFwLmFkZChpbmZvLnRyYWNrLT5p
ZCgpLCB2aWRlb1RyYWNrLmlkZW50aWZpZXIpOwogICAgIH0KIAorICAgIHNlZ21lbnQudGV4dFRy
YWNrcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNlZ21lbnRJbmZvLnRleHRUcmFja3Muc2l6ZSgp
KTsKICAgICBmb3IgKGF1dG8mIHRleHRUcmFjayA6IHNlZ21lbnRJbmZvLnRleHRUcmFja3MpIHsK
ICAgICAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25TZWdtZW50
OjpUZXh0VHJhY2tJbmZvcm1hdGlvbiBpbmZvOwogICAgICAgICBpbmZvLnRyYWNrID0gbV9tZWRp
YVBsYXllclByaXZhdGUtPnRleHRUcmFja1ByaXZhdGVSZW1vdGUodGV4dFRyYWNrLmlkZW50aWZp
ZXIpOwogICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0gUmVtb3RlTWVkaWFEZXNjcmlwdGlvbjo6
Y3JlYXRlKHRleHRUcmFjay5kZXNjcmlwdGlvbik7Ci0gICAgICAgIHNlZ21lbnQudGV4dFRyYWNr
cy5hcHBlbmQoaW5mbyk7CisgICAgICAgIHNlZ21lbnQudGV4dFRyYWNrcy51bmNoZWNrZWRBcHBl
bmQoaW5mbyk7CiAgICAgICAgIG1fdHJhY2tJZGVudGlmaWVyTWFwLmFkZChpbmZvLnRyYWNrLT5p
ZCgpLCB0ZXh0VHJhY2suaWRlbnRpZmllcik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcAppbmRleCBk
MDcwYzJiNzlkZjQwY2FjYjQxOGYwNjc4MjY3ZTRjM2I0YTU0NjFjLi4xYzIyNzM0MzI1NDVhYmYz
YzkwNmI4NWRjMTdkOWI5OWQ0ZTFmN2FkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAKQEAgLTM5Miw5ICszOTIs
OSBAQCBMaWJXZWJSVENDb2RlY3M6OkVuY29kZXIqIExpYldlYlJUQ0NvZGVjczo6Y3JlYXRlRW5j
b2RlcihUeXBlIHR5cGUsIGNvbnN0IHN0ZDo6bQogICAgIGVuY29kZXItPmlkZW50aWZpZXIgPSBS
VENFbmNvZGVySWRlbnRpZmllcjo6Z2VuZXJhdGVUaHJlYWRTYWZlKCk7CiAgICAgZW5jb2Rlci0+
Y29kZWNUeXBlID0gdG9XZWJSVENDb2RlY1R5cGUodHlwZSk7CiAKLSAgICBWZWN0b3I8c3RkOjpw
YWlyPFN0cmluZywgU3RyaW5nPj4gcGFyYW1ldGVyczsKLSAgICBmb3IgKGF1dG8mIGtleVZhbHVl
IDogZm9ybWF0UGFyYW1ldGVycykKLSAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoc3RkOjptYWtl
X3BhaXIoU3RyaW5nOjpmcm9tVVRGOChrZXlWYWx1ZS5maXJzdC5kYXRhKCksIGtleVZhbHVlLmZp
cnN0Lmxlbmd0aCgpKSwgU3RyaW5nOjpmcm9tVVRGOChrZXlWYWx1ZS5zZWNvbmQuZGF0YSgpLCBr
ZXlWYWx1ZS5zZWNvbmQubGVuZ3RoKCkpKSk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gV1RGOjpt
YXAoZm9ybWF0UGFyYW1ldGVycywgW10oYXV0byYgZW50cnkpIHsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6cGFpciB7IFN0cmluZzo6ZnJvbVVURjgoZW50cnkuZmlyc3QuZGF0YSgpLCBlbnRyeS5maXJz
dC5sZW5ndGgoKSksIFN0cmluZzo6ZnJvbVVURjgoZW50cnkuc2Vjb25kLmRhdGEoKSwgZW50cnku
c2Vjb25kLmxlbmd0aCgpKSB9OworICAgIH0pOwogCiAgICAgZW5zdXJlR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb25BbmREaXNwYXRjaFRvVGhyZWFkKFt0aGlzLCBlbmNvZGVyID0gV1RGTW92ZShlbmNvZGVy
KSwgdHlwZSwgcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyldKCkgbXV0YWJsZSB7CiAg
ICAgICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcAppbmRleCBk
ODU0MmEyYjEwYjFiM2UxNTM2MTQxNTQxMTVlZjdlY2VjNDRlYjg4Li42ZjhmNzQ1MzU5MjQ1M2Uw
ZTYxODY3NjEyNDRlMGI3NzkyMjFkZTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFn
ZU92ZXJsYXkuY3BwCkBAIC0xOTcsMTEgKzE5NywxMyBAQCBwcml2YXRlOgogICAgICAgICBhdXRv
IHdrTmFtZXMgPSBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuY29weUFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVOYW1lcyh0b0FQSSgmcGFnZU92ZXJsYXkpLCBwYXJhbWVyaXplZE5hbWVzLCBt
X2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuYmFzZS5jbGllbnRJbmZvKTsKIAogICAgICAg
ICBzaXplX3QgY291bnQgPSBXS0FycmF5R2V0U2l6ZSh3a05hbWVzKTsKKyAgICAgICAgbmFtZXMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjb3VudCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGsgPSAw
OyBrIDwgY291bnQ7IGsrKykgewogICAgICAgICAgICAgV0tUeXBlUmVmIGl0ZW0gPSBXS0FycmF5
R2V0SXRlbUF0SW5kZXgod2tOYW1lcywgayk7CiAgICAgICAgICAgICBpZiAoV2ViS2l0Ojp0b0lt
cGwoaXRlbSktPnR5cGUoKSA9PSBBUEk6OlN0cmluZzo6QVBJVHlwZSkKLSAgICAgICAgICAgICAg
ICBuYW1lcy5hcHBlbmQoV2ViS2l0Ojp0b1dURlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4oaXRlbSkpKTsKKyAgICAgICAgICAgICAgICBuYW1lcy51bmNoZWNrZWRBcHBlbmQoV2ViS2l0
Ojp0b1dURlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oaXRlbSkpKTsKICAgICAgICAg
fQorICAgICAgICBuYW1lcy5zaHJpbmtUb0ZpdCgpOwogCiAgICAgICAgIHJldHVybiBuYW1lczsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvU2Vzc2lvblN0YXRlQ29udmVyc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvU2Vzc2lvblN0YXRlQ29udmVyc2lvbi5jcHAKaW5kZXggYzhmMjQ4YTY0
NzY1NzZhMjkyYzc1ZDVmYWE2OGY1YWM2M2E0NzVjOC4uNTY3ZDQ3NTFiZWU4M2EzYjNmNGY2ZTBm
YTIzNzdiZDAwNjM1MGEyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1Nlc3Npb25TdGF0ZUNvbnZlcnNpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9TZXNzaW9uU3RhdGVDb252ZXJzaW9uLmNwcApA
QCAtOTksMTAgKzk5LDkgQEAgc3RhdGljIEZyYW1lU3RhdGUgdG9GcmFtZVN0YXRlKGNvbnN0IEhp
c3RvcnlJdGVtJiBoaXN0b3J5SXRlbSkKICAgICBmcmFtZVN0YXRlLm9ic2N1cmVkSW5zZXRzID0g
aGlzdG9yeUl0ZW0ub2JzY3VyZWRJbnNldHMoKTsKICNlbmRpZgogCi0gICAgZm9yIChhdXRvJiBj
aGlsZEhpc3RvcnlJdGVtIDogaGlzdG9yeUl0ZW0uY2hpbGRyZW4oKSkgewotICAgICAgICBGcmFt
ZVN0YXRlIGNoaWxkRnJhbWVTdGF0ZSA9IHRvRnJhbWVTdGF0ZShjaGlsZEhpc3RvcnlJdGVtKTsK
LSAgICAgICAgZnJhbWVTdGF0ZS5jaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShjaGlsZEZyYW1lU3Rh
dGUpKTsKLSAgICB9CisgICAgZnJhbWVTdGF0ZS5jaGlsZHJlbiA9IGhpc3RvcnlJdGVtLmNoaWxk
cmVuKCkubWFwKFtdKGF1dG8mIGNoaWxkSGlzdG9yeUl0ZW0pIHsKKyAgICAgICAgcmV0dXJuIHRv
RnJhbWVTdGF0ZShjaGlsZEhpc3RvcnlJdGVtKTsKKyAgICB9KTsKIAogICAgIHJldHVybiBmcmFt
ZVN0YXRlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXIuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRldmljZU9yaWVudGF0aW9uVXBkYXRl
UHJvdmlkZXIuY3BwCmluZGV4IGY5YWY5YWI5M2Y3ZTAxMjg3NzM2NTBjMWQyNDk1YWRkZTM5ZmQ0
MzUuLjFkMTFmNDIzYzE3ODhkNTk3ZmYyNTc4ZWU2MGQ5Y2I2MTZhMGRkMzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEZXZpY2VPcmllbnRh
dGlvblVwZGF0ZVByb3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlci5jcHAKQEAgLTgz
LDExICs4Myw3IEBAIHZvaWQgV2ViRGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlcjo6c3Rv
cFVwZGF0aW5nRGV2aWNlTW90aW9uKFdlYkNvcmU6Ok1vdGlvCiAKIHZvaWQgV2ViRGV2aWNlT3Jp
ZW50YXRpb25VcGRhdGVQcm92aWRlcjo6ZGV2aWNlT3JpZW50YXRpb25DaGFuZ2VkKGRvdWJsZSBh
bHBoYSwgZG91YmxlIGJldGEsIGRvdWJsZSBnYW1tYSwgZG91YmxlIGNvbXBhc3NIZWFkaW5nLCBk
b3VibGUgY29tcGFzc0FjY3VyYWN5KQogewotICAgIFZlY3RvcjxXZWFrUHRyPFdlYkNvcmU6Ok1v
dGlvbk1hbmFnZXJDbGllbnQ+PiBjbGllbnRzOwotICAgIGZvciAoYXV0byYgY2xpZW50IDogbV9k
ZXZpY2VPcmllbnRhdGlvbkNsaWVudHMpCi0gICAgICAgIGNsaWVudHMuYXBwZW5kKGNsaWVudCk7
Ci0KLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IGNsaWVudHMpIHsKKyAgICBmb3IgKGF1dG8mIGNs
aWVudCA6IGNvcHlUb1ZlY3Rvck9mPFdlYWtQdHI8V2ViQ29yZTo6TW90aW9uTWFuYWdlckNsaWVu
dD4+KG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRzKSkgewogICAgICAgICBpZiAoY2xpZW50KQog
ICAgICAgICAgICAgY2xpZW50LT5vcmllbnRhdGlvbkNoYW5nZWQoYWxwaGEsIGJldGEsIGdhbW1h
LCBjb21wYXNzSGVhZGluZywgY29tcGFzc0FjY3VyYWN5KTsKICAgICB9CkBAIC05NSwxMSArOTEs
NyBAQCB2b2lkIFdlYkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXI6OmRldmljZU9yaWVu
dGF0aW9uQ2hhbmdlZChkb3VibGUgYWxwaGEsCiAKIHZvaWQgV2ViRGV2aWNlT3JpZW50YXRpb25V
cGRhdGVQcm92aWRlcjo6ZGV2aWNlTW90aW9uQ2hhbmdlZChkb3VibGUgeEFjY2VsZXJhdGlvbiwg
ZG91YmxlIHlBY2NlbGVyYXRpb24sIGRvdWJsZSB6QWNjZWxlcmF0aW9uLCBkb3VibGUgeEFjY2Vs
ZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHksIGRvdWJsZSB5QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jh
dml0eSwgZG91YmxlIHpBY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5LCBzdGQ6Om9wdGlvbmFs
PGRvdWJsZT4geFJvdGF0aW9uUmF0ZSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHlSb3RhdGlvblJh
dGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB6Um90YXRpb25SYXRlKQogewotICAgIFZlY3RvcjxX
ZWFrUHRyPFdlYkNvcmU6Ok1vdGlvbk1hbmFnZXJDbGllbnQ+PiBjbGllbnRzOwotICAgIGZvciAo
YXV0byYgY2xpZW50IDogbV9kZXZpY2VNb3Rpb25DbGllbnRzKQotICAgICAgICBjbGllbnRzLmFw
cGVuZChjbGllbnQpOwotICAgIAotICAgIGZvciAoYXV0byYgY2xpZW50IDogY2xpZW50cykgewor
ICAgIGZvciAoYXV0byYgY2xpZW50IDogY29weVRvVmVjdG9yT2Y8V2Vha1B0cjxXZWJDb3JlOjpN
b3Rpb25NYW5hZ2VyQ2xpZW50Pj4obV9kZXZpY2VNb3Rpb25DbGllbnRzKSkgewogICAgICAgICBp
ZiAoY2xpZW50KQogICAgICAgICAgICAgY2xpZW50LT5tb3Rpb25DaGFuZ2VkKHhBY2NlbGVyYXRp
b24sIHlBY2NlbGVyYXRpb24sIHpBY2NlbGVyYXRpb24sIHhBY2NlbGVyYXRpb25JbmNsdWRpbmdH
cmF2aXR5LCB5QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwgIHpBY2NlbGVyYXRpb25JbmNs
dWRpbmdHcmF2aXR5LCB4Um90YXRpb25SYXRlLCB5Um90YXRpb25SYXRlLCB6Um90YXRpb25SYXRl
KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5jcHAKaW5kZXggZGZkZGEx
NzY5OTM2MDA0NDdhMGM5M2NjODQ2MGY1ZTY4YjJjMjQ4MS4uMzE4ZjdjM2QyOTMzMmMwMmFkMmNl
MzBkOTBlN2NmZTZmNTVjMzIxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmNw
cApAQCAtNzEsMTggKzcxLDEzIEBAIHZvaWQgV2ViUGFzdGVib2FyZE92ZXJyaWRlczo6cmVtb3Zl
T3ZlcnJpZGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QKIAogVmVjdG9yPFN0
cmluZz4gV2ViUGFzdGVib2FyZE92ZXJyaWRlczo6b3ZlcnJpZGRlblR5cGVzKGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUpCiB7Ci0gICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OwotCiAgICAg
YXV0byBpdCA9IG1fb3ZlcnJpZGVzTWFwLmZpbmQocGFzdGVib2FyZE5hbWUpOwogICAgIGlmIChp
dCA9PSBtX292ZXJyaWRlc01hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKIAogICAgIEFTU0VSVChpdC0+dmFsdWUpOwogCi0gICAgZm9yIChTdHJp
bmcmIHR5cGUgOiBpdC0+dmFsdWUtPmtleXMoKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCh0eXBl
KTsKLQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGNvcHlUb1ZlY3RvcihpdC0+dmFs
dWUtPmtleXMoKSk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UGFzdGVib2FyZEl0ZW1J
bmZvPiBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpvdmVycmlkZGVuSW5mbyhjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYlNwZWVjaFN5bnRoZXNpc0NsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViU3BlZWNoU3ludGhlc2lzQ2xpZW50LmNwcApp
bmRleCBjNGQwZGNjMDNkNWRhNmEwNDgzZWRmNTZkMWU0Mzk1MjdiYzk1Zjg4Li5jNTdlNzgwOWIy
ZWUxNjZkZDZmNjg4YmUyMmE4NTljN2RhZGRhOGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViU3BlZWNoU3ludGhlc2lzQ2xpZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViU3BlZWNoU3lu
dGhlc2lzQ2xpZW50LmNwcApAQCAtNDIsOSArNDIsOSBAQCBjb25zdCBWZWN0b3I8UmVmUHRyPFdl
YkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2U+PiYgV2ViU3BlZWNoU3ludGhlc2lz
QwogICAgIFZlY3RvcjxXZWJTcGVlY2hTeW50aGVzaXNWb2ljZT4gdm9pY2VMaXN0OwogICAgIG1f
cGFnZS5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTcGVlY2hTeW50aGVzaXNWb2lj
ZUxpc3QoKSwgdm9pY2VMaXN0KTsKIAotICAgIG1fdm9pY2VzLmNsZWFyKCk7Ci0gICAgZm9yIChh
dXRvJiB2b2ljZSA6IHZvaWNlTGlzdCkKLSAgICAgICAgbV92b2ljZXMuYXBwZW5kKFdlYkNvcmU6
OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2U6OmNyZWF0ZSh2b2ljZS52b2ljZVVSSSwgdm9p
Y2UubmFtZSwgdm9pY2UubGFuZywgdm9pY2UubG9jYWxTZXJ2aWNlLCB2b2ljZS5kZWZhdWx0TGFu
ZykpOworICAgIG1fdm9pY2VzID0gdm9pY2VMaXN0Lm1hcChbXShhdXRvJiB2b2ljZSkgLT4gUmVm
UHRyPFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2U+IHsKKyAgICAgICAgcmV0
dXJuIFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2U6OmNyZWF0ZSh2b2ljZS52
b2ljZVVSSSwgdm9pY2UubmFtZSwgdm9pY2UubGFuZywgdm9pY2UubG9jYWxTZXJ2aWNlLCB2b2lj
ZS5kZWZhdWx0TGFuZyk7CisgICAgfSk7CiAgICAgcmV0dXJuIG1fdm9pY2VzOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAK
aW5kZXggYjUxMzRkMGQyYzVkN2M1MmY2ZmFjOTY4MDQ0MWFjYzNlZWJmNjVmZC4uMWQ2NDNiNmI0
Mjg4ZDA4ZTAzOGM0NjI1ZDA1NDlkZTY4YWYyYWE3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcApAQCAtMjcyLDEwICsyNzIs
OSBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpmaW5kU3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcm
IHN0cmluZywgT3B0aW9uU2V0PEZpbmRPcHRpbwogICAgIGF1dG8gcmVzdWx0ID0gbV93ZWJQYWdl
LT5jb3JlUGFnZSgpLT5maW5kVGV4dE1hdGNoZXMoc3RyaW5nLCBjb3JlKG9wdGlvbnMpLCBtYXhN
YXRjaENvdW50KTsKICAgICBtX2ZpbmRNYXRjaGVzID0gV1RGTW92ZShyZXN1bHQucmFuZ2VzKTsK
IAotICAgIFZlY3RvcjxWZWN0b3I8SW50UmVjdD4+IG1hdGNoUmVjdHM7Ci0gICAgZm9yIChhdXRv
JiByYW5nZSA6IG1fZmluZE1hdGNoZXMpCi0gICAgICAgIG1hdGNoUmVjdHMuYXBwZW5kKFJlbmRl
ck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMocmFuZ2UpKTsKLQorICAgIGF1dG8gbWF0Y2hSZWN0
cyA9IG1fZmluZE1hdGNoZXMubWFwKFtdKGF1dG8mIHJhbmdlKSB7CisgICAgICAgIHJldHVybiBS
ZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKHJhbmdlKTsKKyAgICB9KTsKICAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmluZFN0cmluZ01hdGNoZXMo
c3RyaW5nLCBtYXRjaFJlY3RzLCByZXN1bHQuaW5kZXhGb3JTZWxlY3Rpb24pKTsKIAogICAgIGlm
ICghb3B0aW9ucy5jb250YWlucyhGaW5kT3B0aW9uczo6U2hvd092ZXJsYXkpICYmICFvcHRpb25z
LmNvbnRhaW5zKEZpbmRPcHRpb25zOjpTaG93RmluZEluZGljYXRvcikpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xs
ZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFu
Z2VDb250cm9sbGVyLmNwcAppbmRleCA3NDgwMmM0Nzg3NTVmZmU2MWI5MzA5MmNiY2E2ZDBhYzdj
Y2M5YzgzLi4yYzliNDU3ZGJjYTA3YTZlYjEyNjg5YTc4ZjBkZDViMjkxNGEyMWNjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZv
dW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAKQEAgLTI0OCwxMSArMjQ4LDEwIEBAIHZvaWQgV2Vi
Rm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpkcmF3UmVjdChXZWJDb3JlOjpQYWdlT3ZlcmxheSYs
IFdlYkNvcmU6OkdyYXBoCiAgICAgICAgIGF1dG8gdGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdD
b29yZGluYXRlcyA9IG1fdGV4dEluZGljYXRvci0+dGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdD
b29yZGluYXRlcygpOwogICAgICAgICBhdXRvIHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRp
bmF0ZXMgPSBtX3RleHRJbmRpY2F0b3ItPnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0
ZXMoKTsKIAotICAgICAgICBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiB0ZXh0UmVjdHNJblJv
b3RWaWV3Q29vcmRpbmF0ZXM7Ci0gICAgICAgIGZvciAoYXV0byByZWN0IDogdGV4dFJlY3RzSW5C
b3VuZGluZ1JlY3RDb29yZGluYXRlcykgeworICAgICAgICBhdXRvIHRleHRSZWN0c0luUm9vdFZp
ZXdDb29yZGluYXRlcyA9IHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMubWFwKFsm
XShhdXRvIHJlY3QpIHsKICAgICAgICAgICAgIHJlY3QubW92ZUJ5KHRleHRCb3VuZGluZ1JlY3RJ
blJvb3RWaWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKSk7Ci0gICAgICAgICAgICB0ZXh0UmVjdHNJ
blJvb3RWaWV3Q29vcmRpbmF0ZXMuYXBwZW5kKHJlY3QpOwotICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gcmVjdDsKKyAgICAgICAgfSk7CiAKICAgICAgICAgYXV0byBwYXRocyA9IFdlYkNv
cmU6OlBhdGhVdGlsaXRpZXM6OnBhdGhzV2l0aFNocmlua1dyYXBwZWRSZWN0cyh0ZXh0UmVjdHNJ
blJvb3RWaWV3Q29vcmRpbmF0ZXMsIGluZGljYXRvclJhZGl1cyk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggNzMxZTAwMzgyYjA2MjgxMTQw
YzNiZjI3NmJjNDJjYmQyZWFjNWNjYS4uYmYwODg0YjU0MTU0YzFhZWU3ZTJhN2Y3MmE0ODcyMTY0
MGRlZjRkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAKQEAgLTc4NjAsMTQgKzc4NjAsMTYgQEAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5JiBX
ZWJQYWdlOjplbnN1cmVSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKQogVmVjdG9yPFJlZlB0
cjxTYW5kYm94RXh0ZW5zaW9uPj4gV2ViUGFnZTo6Y29uc3VtZVNhbmRib3hFeHRlbnNpb25zKFZl
Y3RvcjxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+JiYgc2FuZGJveEV4dGVuc2lvbnMpCiB7CiAg
ICAgVmVjdG9yPFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPj4gZHJhZ1NhbmRib3hFeHRlbnNpb25z
OworICAgIGRyYWdTYW5kYm94RXh0ZW5zaW9ucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNhbmRi
b3hFeHRlbnNpb25zLnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiBzYW5kYm94RXh0ZW5zaW9uIDog
c2FuZGJveEV4dGVuc2lvbnMpIHsKICAgICAgICAgYXV0byBleHRlbnNpb24gPSBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGUoV1RGTW92ZShzYW5kYm94RXh0ZW5zaW9uKSk7CiAgICAgICAgIGlmICgh
ZXh0ZW5zaW9uKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGJvb2wgb2sgPSBleHRl
bnNpb24tPmNvbnN1bWUoKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOwotICAgICAg
ICBkcmFnU2FuZGJveEV4dGVuc2lvbnMuYXBwZW5kKFdURk1vdmUoZXh0ZW5zaW9uKSk7CisgICAg
ICAgIGRyYWdTYW5kYm94RXh0ZW5zaW9ucy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShleHRlbnNp
b24pKTsKICAgICB9CisgICAgZHJhZ1NhbmRib3hFeHRlbnNpb25zLnNocmlua1RvRml0KCk7CiAg
ICAgcmV0dXJuIGRyYWdTYW5kYm94RXh0ZW5zaW9uczsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRleCA5ZGMwMGRhMjc3
MGMxOTM5ODkxYTMwMGYyMzM3NDk2YTljOGU3MDFkLi5iZDM2NzIwNzViNzU3NjhjODQxNDc3OGZj
NjY1ZjVkNzViNGUyNGFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvV2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtNzU0LDExICs3NTQsOCBAQCB2b2lkIFdlYlBhZ2U6
OmhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayhGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBj
b25zdCBWZWN0bwogCiAgICAgTlNEYXRhICpzZWxlY3Rpb25EYXRhID0gW2F0dHJpYnV0ZWRTZWxl
Y3Rpb24gUlRGREZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbYXR0cmlidXRlZFNlbGVjdGlvbiBs
ZW5ndGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6QHsgfV07CiAKLSAgICBWZWN0b3I8dWludDhfdD4g
c2VsZWN0aW9uRGF0YVZlY3RvcjsKLSAgICBzZWxlY3Rpb25EYXRhVmVjdG9yLmFwcGVuZChyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzZWxlY3Rpb25EYXRhLmJ5dGVzKSwgc2VsZWN0
aW9uRGF0YS5sZW5ndGgpOwotCiAgICAgZmx1c2hQZW5kaW5nRWRpdG9yU3RhdGVVcGRhdGUoKTsK
LSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3dDb250ZXh0TWVudShDb250ZXh0
TWVudUNvbnRleHREYXRhKHBvaW50LCBzZWxlY3Rpb25EYXRhVmVjdG9yLCBwaG9uZU51bWJlcnMs
IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSwgVXNlckRhdGEoKSkp
OworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2hvd0NvbnRleHRNZW51KENvbnRl
eHRNZW51Q29udGV4dERhdGEocG9pbnQsIFZlY3RvciB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KHNlbGVjdGlvbkRhdGEuYnl0ZXMpLCBzZWxlY3Rpb25EYXRhLmxlbmd0aCB9LCBw
aG9uZU51bWJlcnMsIHNlbGVjdGlvbi5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSwg
VXNlckRhdGEoKSkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmhhbmRsZUltYWdlU2VydmljZUNsaWNr
KGNvbnN0IEludFBvaW50JiBwb2ludCwgSW1hZ2UmIGltYWdlLCBIVE1MSW1hZ2VFbGVtZW50JiBl
bGVtZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3Mu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCmluZGV4IDc5OTYx
M2QzNzc0MjM2M2JmYmRjZDk1Mjk3OTk2MjIwNmYwMjI4YTguLjg5OTBlZGQ3NmNhYjk2YzJkZWNk
M2I5NjA1NGNmZjYyOTViYjBjZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5jcHAKQEAgLTE0NTIsOCArMTQ1MiwxMCBAQCB2b2lkIFdlYlByb2Nlc3M6OmZldGNoV2Vic2l0
ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gd2Vic2l0ZURhdGFUeXBlcywgQwogewog
ICAgIFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhOwogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNv
bnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TWVtb3J5Q2FjaGUpKSB7Ci0gICAgICAgIGZvciAoYXV0
byYgb3JpZ2luIDogTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpLm9yaWdpbnNXaXRoQ2FjaGUoc2Vz
c2lvbklEKCkpKQotICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmQoV2Vic2l0
ZURhdGE6OkVudHJ5IHsgb3JpZ2luLT5kYXRhKCksIFdlYnNpdGVEYXRhVHlwZTo6TWVtb3J5Q2Fj
aGUsIDAgfSk7CisgICAgICAgIGF1dG8gb3JpZ2lucyA9IE1lbW9yeUNhY2hlOjpzaW5nbGV0b24o
KS5vcmlnaW5zV2l0aENhY2hlKHNlc3Npb25JRCgpKTsKKyAgICAgICAgd2Vic2l0ZURhdGEuZW50
cmllcyA9IFdURjo6bWFwKG9yaWdpbnMsIFtdKGF1dG8mIG9yaWdpbikgeworICAgICAgICAgICAg
cmV0dXJuIFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbi0+ZGF0YSgpLCBXZWJzaXRlRGF0YVR5
cGU6Ok1lbW9yeUNhY2hlLCAwIH07CisgICAgICAgIH0pOwogICAgIH0KICAgICBjb21wbGV0aW9u
SGFuZGxlcihXVEZNb3ZlKHdlYnNpdGVEYXRhKSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452664</attachid>
            <date>2022-02-19 17:09:03 -0800</date>
            <delta_ts>2022-02-20 09:46:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236852-20220219170902.patch</filename>
            <type>text/plain</type>
            <size>163998</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMjE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDBiOGQ4YTE1ZWQxZjg3MDc2NDI2ZWUz
OTRhMGMwMzAyOGYzMGEwZTUuLjkzYzY0ZGM2ZTcwMjYyNzY4MGQ2MjIwZmI4ZjU2NzBmYjFjNDYw
MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjItMDItMTggIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGV2ZW4gbW9yZSBjYWxs
IHNpdGVzIGNvbnN0cnVjdGluZyB2ZWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuY3BwOgorICAgICAgICAoV1RGOjpD
b25jdXJyZW50V29ya1F1ZXVlOjphcHBseSk6CisgICAgICAgICogd3RmL2NmL0xhbmd1YWdlQ0Yu
Y3BwOgorICAgICAgICAoV1RGOjpwbGF0Zm9ybVVzZXJQcmVmZXJyZWRMYW5ndWFnZXMpOgorCiAy
MDIyLTAyLTE4ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBb
aU9TXSBTYWZhcmkgY2FuIHNvbWV0aW1lcyBoYW5nIHdoaWxlIHByaW50aW5nIGR1ZSB0byBzeW5j
IElQQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IGIwYjJlZGQyMDExYzhmZmE4MjVkZTk1MmFkOGZmZGY1MThjNjU1
ZGYuLjIyZmM5ZGExMjFlNmZmNmY4NzJlZWFiYTFkYmM5N2ZhZDBkMzMyZWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNjYgQEAKKzIwMjItMDItMTggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGV2ZW4gbW9yZSBjYWxsIHNpdGVz
IGNvbnN0cnVjdGluZyB2ZWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzY4NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIE1vZHVsZXMvYXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBheW1lbnRDb29yZGluYXRvcjo6YmVnaW5QYXltZW50U2Vzc2lv
bik6CisgICAgICAgICogTW9kdWxlcy9hcHBsZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29jb2Eu
bW06CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0KToKKyAgICAgICAgKiBNb2R1bGVzL2NhY2hl
L0RPTUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUNhY2hlOjpiYXRjaFB1dE9wZXJh
dGlvbik6CisgICAgICAgICogTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R2FtZXBhZDo6R2FtZXBhZCk6CisgICAgICAgICogTW9kdWxlcy9nYW1lcGFkL0dh
bWVwYWRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRNYW5hZ2VyOjpwbGF0
Zm9ybUdhbWVwYWREaXNjb25uZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZE1hbmFn
ZXI6Om1ha2VHYW1lcGFkVmlzaWJsZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6Om9iamVjdFN0b3Jl
TmFtZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OnRyYW5zYWN0aW9u
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmg6CisgICAgICAgIChX
ZWJDb3JlOjpJREJLZXlEYXRhOjppc0RlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YUhhc2g6Omhhc2gpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6aGFzaCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uOjpvYmplY3RTdG9yZU5hbWVzIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlh
Y29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFD
b250cm9sc0hvc3Q6OnNob3dNZWRpYUNvbnRyb2xzQ29udGV4dE1lbnUpOgorICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTb3VyY2U6OmFjdGl2ZVJhbmdlcyBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNv
dXJjZS9TYW1wbGVNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRlY29kZU9yZGVyU2FtcGxlTWFw
OjpzaXplIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZl
ckxpc3QuaDoKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzOjpnZXRWb2ljZXMpOgorICAgICAgICAq
IE1vZHVsZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrLm1tOgorICAgICAg
ICAoLVtXZWJTcGVlY2hSZWNvZ25pemVyVGFza0ltcGwgY2FsbGJhY2tXaXRoVHJhbnNjcmlwdGlv
bnM6aXNGaW5hbDpdKToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hS
ZWNvZ25pemVyVGFza01vY2subW06CisgICAgICAgICgtW1dlYlNwZWVjaFJlY29nbml6ZXJUYXNr
TW9jayBhdWRpb1NhbXBsZXNBdmFpbGFibGU6XSk6CisgICAgICAgICogYW5pbWF0aW9uL0NTU1By
b3BlcnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRnVuYyk6CisgICAg
ICAgICogYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmVzQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXI6OnVwZGF0ZUFuaW1hdGlvbnNB
bmRTZW5kRXZlbnRzKToKKyAgICAgICAgKiBhbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cHJvY2Vzc1Byb3BlcnR5SW5kZXhlZEtleWZyYW1lcyk6CisgICAg
ICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbjo6Q29udGVudEV4dGVu
c2lvbik6CisgICAgICAgICogY3NzL0NTU1ZhbHVlTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTVmFsdWVMaXN0OjpzaXplIGNvbnN0KToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjT3Bl
cmF0aW9uTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6
aG9pc3RDaGlsZHJlbldpdGhPcGVyYXRvcik6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJz
ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlckltcGw6OmNvbnN1bWVDb250
YWluZXJSdWxlKToKKyAgICAgICAgKiBkb20vRE9NU3RyaW5nTGlzdC5oOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NU3RyaW5nTGlzdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVN0cmlu
Z0xpc3Q6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpET01TdHJpbmdMaXN0OjpET01TdHJp
bmdMaXN0KToKKyAgICAgICAgKiBkb20vRXZlbnRQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50UGF0aDo6RXZlbnRQYXRoKToKKyAgICAgICAgKiBkb20vRnVsbHNjcmVlbk1hbmFnZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RnVsbHNjcmVlbk1hbmFnZXI6OmNhbmNlbEZ1bGxzY3Jl
ZW4pOgorICAgICAgICAqIGRvbS9Mb2FkYWJsZVNjcmlwdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMb2FkYWJsZVNjcmlwdDo6bm90aWZ5Q2xpZW50RmluaXNoZWQpOgorICAgICAgICAqIGRvbS9S
YWRpb0J1dHRvbkdyb3Vwcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYWRpb0J1dHRvbkdyb3Vw
OjptZW1iZXJzIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0RpcmVjdG9yeUZpbGVMaXN0Q3JlYXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0ZpbGVMaXN0KToKKyAgICAgICAgKiBodG1sL0hU
TUxTZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
OjpzYXZlTGFzdFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVu
dDo6c2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgpOgorICAgICAgICAqIGh0bWwvSW1hZ2VC
aXRtYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OmRldGFjaEJpdG1hcHMp
OgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0YWNoZWRT
aGFkZXJzKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpwcm9jZXNzTWV0YSk6
CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6aW5zZXJ0UGhvbmVOdW1iZXJMaW5rKToKKyAgICAgICAg
KiBodG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dERvY3VtZW50UGFyc2VyOjppbnNlcnRGYWtlUHJlRWxlbWVudCk6CisgICAgICAgICogbG9h
ZGVyL0NvbnRlbnRGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEZpbHRlcjo6
Y3JlYXRlKToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZU1hbmlm
ZXN0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQXBwbGljYXRpb25DYWNoZU1h
bmlmZXN0KToKKyAgICAgICAgKiBwYWdlL1Jlc2l6ZU9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlc2l6ZU9ic2VydmVyOjpkZWxpdmVyT2JzZXJ2YXRpb25zKToKKyAgICAgICAgKiBw
YWdlL1RleHRJbmRpY2F0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZUluZGlj
YXRvcik6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlU3ViUmVzb3VyY2VJbnRlZ3JpdHlJbnRvRGlnZXN0cyk6Cisg
ICAgICAgICogcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rmls
ZUNob29zZXI6OmNob29zZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUNob29zZXI6OmNo
b29zZUZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjaG9vc2VNZWRpYUZp
bGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9UaHJlYWRTYWZlRGF0YUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0RTUEtlcm5lbFByb2Nlc3Nvcjo6aW5pdGlhbGl6ZSk6CisgICAgICAg
ICogcGxhdGZvcm0vYXVkaW8vQXVkaW9SZXNhbXBsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9SZXNhbXBsZXI6OkF1ZGlvUmVzYW1wbGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRp
by9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1p
Y3NDb21wcmVzc29yS2VybmVsOjpzZXROdW1iZXJPZkNoYW5uZWxzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9NdWx0aUNoYW5uZWxSZXNhbXBsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TXVsdGlDaGFubmVsUmVzYW1wbGVyOjpNdWx0aUNoYW5uZWxSZXNhbXBsZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWQv
bWFjL0R1YWxzaG9jazNISURHYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkR1YWxzaG9j
azNISURHYW1lcGFkOjpEdWFsc2hvY2szSElER2FtZXBhZCk6CisgICAgICAgICogcGxhdGZvcm0v
Z2FtZXBhZC9tYWMvTG9naXRlY2hHYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvZ2l0
ZWNoR2FtZXBhZDo6TG9naXRlY2hHYW1lcGFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFk
L21hYy9TdGFkaWFISURHYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0YWRpYUhJREdh
bWVwYWQ6OlN0YWRpYUhJREdhbWVwYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6YWRkUmVw
YWludFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGF0aFV0aWxpdGllczo6cGF0aHNXaXRoU2hyaW5rV3JhcHBl
ZFJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhVdGlsaXRpZXM6OnBhdGhXaXRoU2hyaW5r
V3JhcHBlZFJlY3RzRm9yT3V0bGluZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU291
cmNlQnVmZmVyUHJpdmF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2
YXRlOjpidWZmZXJlZFNhbXBsZXNGb3JUcmFja0lkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpleHRyYWN0S2V5SURzU2tkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVZGV3JhcHBlcjo6c2V0
UmVxdWVzdEZvcktleSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW06CisgICAgICAgIChX
ZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnVwZGF0
ZUtleVN0YXR1c2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyQVZGT2JqQzo6ZnJhbWVJbmZvcyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUGFyc2VyQVZGT2JqQy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlckFWRk9iakM6OmRpZFBhcnNlU3RyZWFtRGF0
YUFzQXNzZXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9y
bURhdGFDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnZhcmlh
dGlvbkF4ZXMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVTdHJpbmcpOgorICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlOjpzZXRTdXBwb3J0ZWRQ
cmVzZXRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMKToK
KyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3RyeUltcGw6OndyaXRlQmxvYnNUb1RlbXBvcmFy
eUZpbGVzRm9ySW5kZXhlZERCKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmRyYXdC
b3hTaWRlRnJvbVBhdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpjb25uZWN0Q2xpcHBp
bmdTdGFja0xheWVycyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkanVzdE92
ZXJmbG93U2Nyb2xsYmFyQ29udGFpbmVyTGF5ZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpwYWludEF0dGFjaG1lbnRUaXRsZUJh
Y2tncm91bmQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVNWR1N0cm9rZVBhaW50aW5nUmVzb3VyY2UpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RleHRDaHVuazo6U1ZHVGV4dENodW5rKToKKyAgICAgICAgKiBzdHlsZS9QYWdlUnVs
ZUNvbGxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UGFnZVJ1bGVDb2xsZWN0
b3I6Om1hdGNoUGFnZVJ1bGVzKToKKyAgICAgICAgKiBzdHlsZS9SdWxlU2V0QnVpbGRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldEJ1aWxkZXI6Ok1lZGlhUXVlcnlDb2xs
ZWN0b3I6OnBvcCk6CisgICAgICAgICogc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENvbnRhaW5l
ck5hbWUpOgorCiAyMDIyLTAyLTE5ICBBbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbTEZDXVtJRkNdIEFkZCBzdXBwb3J0IGZvciBpZGVvZ3JhcGhpYyBiYXNlbGluZSB3
aXRoIGZvbnQgZmFsbGJhY2sKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNTI1MTVkNDU4MzVmNTk4MmM2NGYxYjMyZDRi
NTRlMjBmZjE4ZjM5NS4uOTg1NWVkNWI1Y2JlZjliZGViOWY0YmE3ZDRiNjIwYjZhMTYxMDBkYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw5OCBAQAorMjAyMi0wMi0xOCAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIC8gb3B0aW1pemUgZXZlbiBtb3JlIGNh
bGwgc2l0ZXMgY29uc3RydWN0aW5nIHZlY3RvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjg1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXll
clByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTWVkaWFQbGF5ZXJQcm94eTo6b3V0
T2ZCYW5kVHJhY2tTb3VyY2VzKToKKyAgICAgICAgKiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZVNv
dXJjZUJ1ZmZlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlU291cmNlQnVmZmVy
UHJveHk6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlU291cmNlQnVmZmVyUHJveHk6OnVwZGF0ZVRyYWNr
SWRzKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OmZldGNoRGlz
a0NhY2hlRW50cmllcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTm90aWZpY2F0aW9ucy9O
ZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtO
b3RpZmljYXRpb25NYW5hZ2VyOjpnZXRPcmlnaW5zV2l0aFB1c2hBbmROb3RpZmljYXRpb25QZXJt
aXNzaW9ucyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFu
YWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjphbGxTdG9yYWdlQXJl
YUlkZW50aWZpZXJzIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdl
L1RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRy
YW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6b3JpZ2lucyBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6c3RvcmFnZUFyZWFJZGVudGlm
aWVycyBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdl
RW5naW5lQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpm
aW5pc2hPcGVuaW5nKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6a2V5
cyBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdl
QXJlYS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpTUUxpdGVTdG9y
YWdlQXJlYSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmg6CisgICAg
ICAgICogU2hhcmVkL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OnNob3dQYXltZW50VUkp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbi5jcHA6CisgICAgICAgIChB
UEk6Ok5hdmlnYXRpb246Ok5hdmlnYXRpb24pOgorICAgICAgICAoQVBJOjptX2NsaWVudE5hdmln
YXRpb25BY3Rpdml0eSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dLU2hhcmVTaGVldC5t
bToKKyAgICAgICAgKGFwcGVuZEZpbGVzQXNTaGFyZWFibGVVUkxzKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6cmVzdG9yZUFwcEhpZ2hsaWdodHNBbmRTY3JvbGxUb0luZGV4KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxv
YWRTdGF0ZTo6ZGlkRmluaXNoTG9hZCk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0
d29ya1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJv
eHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpwYXJhbWV0ZXJzIGNv
bnN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRv
ck1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpBdXRoZW50aWNhdG9yTWFuYWdlcjo6c3Rh
cnREaXNjb3ZlcnkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OnJlbW92ZUFsbEl0ZW1zKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0OjpjbGVhcik6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnJlbW92ZVByb2Nlc3NGcm9tT3JpZ2luQ2FjaGVTZXQpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UHJveHk6OnByb2Nlc3NEaWRUZXJtaW5hdGVPckZhaWxlZFRvTGF1bmNoKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5KToKKyAgICAgICAgKFdlYktp
dDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YSk6CisgICAgICAgICogVUlQcm9jZXNzL2lv
cy9UZXh0Q2hlY2tlcklPUy5tbToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNr
VGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRB
c3Npc3RhbnQubW06CisgICAgICAgICgtW1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQgcHJlc2VudGF0
aW9uUmVjdEZvckVsZW1lbnRVc2luZ0Nsb3Nlc3RJbmRpY2F0ZWRSZWN0XSk6CisgICAgICAgICog
VUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6VGV4dENo
ZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0FwcGxl
UGF5L1dlYlBheW1lbnRDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBheW1l
bnRDb29yZGluYXRvcjo6c2hvd1BheW1lbnRVSSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9BdXRv
bWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpzZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZCk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyOjpjcmVhdGVSZW1v
dGVNZWRpYVBsYXllcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvU291cmNlQnVm
ZmVyUHJpdmF0ZVJlbW90ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNvdXJjZUJ1ZmZlclByaXZh
dGVSZW1vdGU6OnVwZGF0ZVRyYWNrSWRzKToKKyAgICAgICAgKFdlYktpdDo6U291cmNlQnVmZmVy
UHJpdmF0ZVJlbW90ZTo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0aWFsaXphdGlv
blNlZ21lbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2Rl
Y3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpMaWJXZWJSVENDb2RlY3M6OmNyZWF0ZUVuY29kZXIp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdl
T3ZlcmxheS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9TZXNzaW9u
U3RhdGVDb252ZXJzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6dG9GcmFtZVN0YXRlKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRldmljZU9yaWVudGF0aW9uVXBk
YXRlUHJvdmlkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZpY2VPcmllbnRhdGlvblVw
ZGF0ZVByb3ZpZGVyOjpkZXZpY2VPcmllbnRhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyOjpkZXZpY2VNb3Rpb25DaGFuZ2Vk
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVy
cmlkZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpvdmVy
cmlkZGVuVHlwZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViU3Bl
ZWNoU3ludGhlc2lzQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoU3ludGhl
c2lzQ2xpZW50Ojp2b2ljZUxpc3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5k
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjpmaW5kU3Ry
aW5nTWF0Y2hlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJh
bmdlQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZvdW5kVGV4dFJhbmdlQ29u
dHJvbGxlcjo6ZHJhd1JlY3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y29uc3VtZVNhbmRib3hFeHRlbnNpb25z
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OmhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzczo6ZmV0Y2hXZWJzaXRlRGF0YSk6CisKIDIwMjItMDItMTkgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI5MDE5Ni4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi9Xb3JrUXVldWUuY3BwCmluZGV4IDllMTA2ZTM5NGQzZjQ0ZDJjMjVmYzNjYTE1MzU0MGU1MjA0
Y2IzNWIuLjg2NDA2ZjM4ODQzNzE0Y2IyNTVjMzRlYWUzZjkxODFkYWJhNThlMzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvV29y
a1F1ZXVlLmNwcApAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgQ29uY3VycmVudFdvcmtRdWV1ZTo6
YXBwbHkoc2l6ZV90IGl0ZXJhdGlvbnMsIFdURjo6RnVuY3Rpb248dm9pZChzaXplX3QgaW5kCiAK
ICAgICAgICAgICAgIG1fd29ya2Vycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHRocmVhZENvdW50
KTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aHJlYWRDb3VudDsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgbV93b3JrZXJzLmFwcGVuZChUaHJlYWQ6OmNyZWF0ZSgiVGhy
ZWFkUG9vbCBXb3JrZXIiLCBbdGhpc10geworICAgICAgICAgICAgICAgIG1fd29ya2Vycy51bmNo
ZWNrZWRBcHBlbmQoVGhyZWFkOjpjcmVhdGUoIlRocmVhZFBvb2wgV29ya2VyIiwgW3RoaXNdIHsK
ICAgICAgICAgICAgICAgICAgICAgdGhyZWFkQm9keSgpOwogICAgICAgICAgICAgICAgIH0pKTsK
ICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2NmL0xhbmd1YWdlQ0Yu
Y3BwIGIvU291cmNlL1dURi93dGYvY2YvTGFuZ3VhZ2VDRi5jcHAKaW5kZXggYmJjMWVmNmY0ZWZl
MDMwNTljZTU1MTMxZTA4YzEwMzMyMjQ4OGU1Ni4uYzA0YzU1YmM2MDNkMjgxZDBjYTM4OTIwZWJh
OGM3OWU1ZTY5Mjk4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvY2YvTGFuZ3VhZ2VDRi5j
cHAKKysrIGIvU291cmNlL1dURi93dGYvY2YvTGFuZ3VhZ2VDRi5jcHAKQEAgLTEwMiw5ICsxMDIs
MTAgQEAgVmVjdG9yPFN0cmluZz4gcGxhdGZvcm1Vc2VyUHJlZmVycmVkTGFuZ3VhZ2VzKFNob3Vs
ZE1pbmltaXplTGFuZ3VhZ2VzIHNob3VsZE1pbmkKICAgICAgICAgcmV0dXJuIHsgImVuIl9zIH07
CiAKICAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXM7CisgICAgbGFuZ3VhZ2VzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkocGxhdGZvcm1MYW5ndWFnZXNDb3VudCk7CiAgICAgZm9yIChDRkluZGV4
IGkgPSAwOyBpIDwgcGxhdGZvcm1MYW5ndWFnZXNDb3VudDsgaSsrKSB7CiAgICAgICAgIGF1dG8g
cGxhdGZvcm1MYW5ndWFnZSA9IHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPihDRkFycmF5R2V0VmFs
dWVBdEluZGV4KHBsYXRmb3JtTGFuZ3VhZ2VzLmdldCgpLCBpKSk7Ci0gICAgICAgIGxhbmd1YWdl
cy5hcHBlbmQoaHR0cFN0eWxlTGFuZ3VhZ2VDb2RlKHBsYXRmb3JtTGFuZ3VhZ2UsIHNob3VsZE1p
bmltaXplTGFuZ3VhZ2VzKSk7CisgICAgICAgIGxhbmd1YWdlcy51bmNoZWNrZWRBcHBlbmQoaHR0
cFN0eWxlTGFuZ3VhZ2VDb2RlKHBsYXRmb3JtTGFuZ3VhZ2UsIHNob3VsZE1pbmltaXplTGFuZ3Vh
Z2VzKSk7CiAgICAgfQogCiAgICAgTE9HX1dJVEhfU1RSRUFNKExhbmd1YWdlLCBzdHJlYW0gPDwg
IkFmdGVyIHBhc3NpbmcgdGhyb3VnaCBodHRwU3R5bGVMYW5ndWFnZUNvZGU6ICIgPDwgbGFuZ3Vh
Z2VzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvUGF5bWVu
dENvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvUGF5bWVu
dENvb3JkaW5hdG9yLmNwcAppbmRleCAxYTMyN2E5NGIwYjcxZDRlYzc1ZWFjYzhkNGFkNzhhOTFi
OWZmNjg1Li40YTk0MzIyNDlkNTJkNTFkMTQ3Yjg2ZTU3MDhkNTE4ODhiYTY0ZjU2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29yZGluYXRvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXltZW50Q29vcmRpbmF0
b3IuY3BwCkBAIC0xMDEsMTEgKzEwMSwxMCBAQCBib29sIFBheW1lbnRDb29yZGluYXRvcjo6YmVn
aW5QYXltZW50U2Vzc2lvbihEb2N1bWVudCYgZG9jdW1lbnQsIFBheW1lbnRTZXNzaW9uJgogewog
ICAgIEFTU0VSVCghbV9hY3RpdmVTZXNzaW9uKTsKIAotICAgIFZlY3RvcjxVUkw+IGxpbmtJY29u
VVJMczsKLSAgICBmb3IgKGF1dG8mIGljb24gOiBMaW5rSWNvbkNvbGxlY3RvciB7IGRvY3VtZW50
IH0uaWNvbnNPZlR5cGVzKHsgTGlua0ljb25UeXBlOjpUb3VjaEljb24sIExpbmtJY29uVHlwZTo6
VG91Y2hQcmVjb21wb3NlZEljb24gfSkpCi0gICAgICAgIGxpbmtJY29uVVJMcy5hcHBlbmQoaWNv
bi51cmwpOwotCi0gICAgYXV0byBzaG93UGF5bWVudFVJID0gbV9jbGllbnQuc2hvd1BheW1lbnRV
SShkb2N1bWVudC51cmwoKSwgbGlua0ljb25VUkxzLCBwYXltZW50UmVxdWVzdCk7CisgICAgYXV0
byBsaW5rSWNvblVSTHMgPSBMaW5rSWNvbkNvbGxlY3RvciB7IGRvY3VtZW50IH0uaWNvbnNPZlR5
cGVzKHsgTGlua0ljb25UeXBlOjpUb3VjaEljb24sIExpbmtJY29uVHlwZTo6VG91Y2hQcmVjb21w
b3NlZEljb24gfSkubWFwKFtdKGF1dG8mIGljb24pIHsKKyAgICAgICAgcmV0dXJuIGljb24udXJs
OworICAgIH0pOworICAgIGF1dG8gc2hvd1BheW1lbnRVSSA9IG1fY2xpZW50LnNob3dQYXltZW50
VUkoZG9jdW1lbnQudXJsKCksIFdURk1vdmUobGlua0ljb25VUkxzKSwgcGF5bWVudFJlcXVlc3Qp
OwogICAgIFBBWU1FTlRfQ09PUkRJTkFUT1JfUkVMRUFTRV9MT0coImJlZ2luUGF5bWVudFNlc3Np
b24oKSAtPiAlZCIsIHNob3dQYXltZW50VUkpOwogICAgIGlmICghc2hvd1BheW1lbnRVSSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9h
cHBsZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2FwcGxlcGF5L2NvY29hL1BheW1lbnRNZXRob2RDb2NvYS5tbQppbmRleCA3NjUzZGU1NGFm
NTM5ZjI1NjFmNDIyMzZkMzBlYzYxYWI1ODAzZGQ1Li4zNzVlNTNkNmQ0ZmRkYzg4OGYzMmUwNGUy
ODNhN2RiMDQxMTNkMDYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxl
cGF5L2NvY29hL1BheW1lbnRNZXRob2RDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2FwcGxlcGF5L2NvY29hL1BheW1lbnRNZXRob2RDb2NvYS5tbQpAQCAtMTAxLDExICsxMDEs
OCBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxBcHBsZVBheVBheW1lbnRNZXRob2Q6OlR5cGU+IGNv
bnZlcnQoUEtQYXltZW50TWV0aG9kVHlwZSBwYQogI2lmIEhBVkUoUEFTU0tJVF9QQVlNRU5UX01F
VEhPRF9CSUxMSU5HX0FERFJFU1MpCiBzdGF0aWMgdm9pZCBjb252ZXJ0KENOTGFiZWxlZFZhbHVl
PENOUG9zdGFsQWRkcmVzcyo+ICpwb3N0YWxBZGRyZXNzLCBBcHBsZVBheVBheW1lbnRDb250YWN0
ICZyZXN1bHQpCiB7Ci0gICAgVmVjdG9yPFN0cmluZz4gYWRkcmVzc0xpbmU7Ci0gICAgaWYgKE5T
U3RyaW5nICpzdHJlZXQgPSBwb3N0YWxBZGRyZXNzLnZhbHVlLnN0cmVldCkgewotICAgICAgICBh
ZGRyZXNzTGluZS5hcHBlbmQoc3RyZWV0KTsKLSAgICAgICAgcmVzdWx0LmFkZHJlc3NMaW5lcyA9
IFdURk1vdmUoYWRkcmVzc0xpbmUpOwotICAgIH0KKyAgICBpZiAoTlNTdHJpbmcgKnN0cmVldCA9
IHBvc3RhbEFkZHJlc3MudmFsdWUuc3RyZWV0KQorICAgICAgICByZXN1bHQuYWRkcmVzc0xpbmVz
ID0gVmVjdG9yIHsgU3RyaW5nIHsgc3RyZWV0IH0gfTsKICAgICByZXN1bHQuc3ViTG9jYWxpdHkg
PSBwb3N0YWxBZGRyZXNzLnZhbHVlLnN1YkxvY2FsaXR5OwogICAgIHJlc3VsdC5sb2NhbGl0eSA9
IHBvc3RhbEFkZHJlc3MudmFsdWUuY2l0eTsKICAgICByZXN1bHQuc3ViQWRtaW5pc3RyYXRpdmVB
cmVhID0gcG9zdGFsQWRkcmVzcy52YWx1ZS5zdWJBZG1pbmlzdHJhdGl2ZUFyZWE7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGUuY3BwCmluZGV4IDQ5ZjM5OGFhZmVmMzdjZDVl
OGY4ZWIyNDRkNGUxMWYzOWYyYThjZDMuLjJkNDZkMWNkYmM3MTdmM2M5Mjk5ZWZhODYzYTU0OTI2
MzgzYWY1ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2Fj
aGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGUuY3BwCkBA
IC01MTUsMTAgKzUxNSw4IEBAIFJlY29yZCBET01DYWNoZTo6dG9Db25uZWN0aW9uUmVjb3JkKGNv
bnN0IEZldGNoUmVxdWVzdCYgcmVxdWVzdCwgRmV0Y2hSZXNwb25zZSYKIAogdm9pZCBET01DYWNo
ZTo6YmF0Y2hQdXRPcGVyYXRpb24oY29uc3QgRmV0Y2hSZXF1ZXN0JiByZXF1ZXN0LCBGZXRjaFJl
c3BvbnNlJiByZXNwb25zZSwgRE9NQ2FjaGVFbmdpbmU6OlJlc3BvbnNlQm9keSYmIHJlc3BvbnNl
Qm9keSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChFeGNlcHRpb25Pcjx2b2lkPiYmKT4mJiBjYWxs
YmFjaykKIHsKLSAgICBWZWN0b3I8UmVjb3JkPiByZWNvcmRzOwotICAgIHJlY29yZHMuYXBwZW5k
KHRvQ29ubmVjdGlvblJlY29yZChyZXF1ZXN0LCByZXNwb25zZSwgV1RGTW92ZShyZXNwb25zZUJv
ZHkpKSk7Ci0KLSAgICBiYXRjaFB1dE9wZXJhdGlvbihXVEZNb3ZlKHJlY29yZHMpLCBXVEZNb3Zl
KGNhbGxiYWNrKSk7CisgICAgYXV0byByZWNvcmQgPSB0b0Nvbm5lY3Rpb25SZWNvcmQocmVxdWVz
dCwgcmVzcG9uc2UsIFdURk1vdmUocmVzcG9uc2VCb2R5KSk7CisgICAgYmF0Y2hQdXRPcGVyYXRp
b24oeyBXVEZNb3ZlKHJlY29yZCkgfSwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCiB2b2lkIERP
TUNhY2hlOjpiYXRjaFB1dE9wZXJhdGlvbihWZWN0b3I8UmVjb3JkPiYmIHJlY29yZHMsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoRXhjZXB0aW9uT3I8dm9pZD4mJik+JiYgY2FsbGJhY2spCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5jcHAKaW5kZXggNjk2OWUwYjUwM2E4
N2RkMDM4NWUxODM5MDg4NDY3MGZlYTA0YzI2Ny4uNTgzZjljODU1NTY3MTc4Y2NlNzJjYWQ0NDc5
MjRjZjhiYzNjNGU1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFk
L0dhbWVwYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFk
LmNwcApAQCAtNDMsOCArNDMsOSBAQCBHYW1lcGFkOjpHYW1lcGFkKGNvbnN0IFBsYXRmb3JtR2Ft
ZXBhZCYgcGxhdGZvcm1HYW1lcGFkKQogICAgICwgbV9heGVzKHBsYXRmb3JtR2FtZXBhZC5heGlz
VmFsdWVzKCkuc2l6ZSgpLCAwLjApCiB7CiAgICAgdW5zaWduZWQgYnV0dG9uQ291bnQgPSBwbGF0
Zm9ybUdhbWVwYWQuYnV0dG9uVmFsdWVzKCkuc2l6ZSgpOworICAgIG1fYnV0dG9ucy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KGJ1dHRvbkNvdW50KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYnV0dG9uQ291bnQ7ICsraSkKLSAgICAgICAgbV9idXR0b25zLmFwcGVuZChHYW1lcGFkQnV0
dG9uOjpjcmVhdGUoKSk7CisgICAgICAgIG1fYnV0dG9ucy51bmNoZWNrZWRBcHBlbmQoR2FtZXBh
ZEJ1dHRvbjo6Y3JlYXRlKCkpOwogfQogCiBHYW1lcGFkOjp+R2FtZXBhZCgpID0gZGVmYXVsdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZE1hbmFnZXIuY3Bw
CmluZGV4IGNjMzc0ODU4Y2ZlYTFiMjQ0YzA0YmQ0MWIyOTk0OGQyOWFlYTMwMzAuLjU0M2ZlNDg5
MTY3ZTdjZTEzZDQ5NzY4ZmM3ZTE1ZjM0ZDA4MjM2ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmNwcApAQCAtNzksMTQgKzc5LDEwIEBA
IHZvaWQgR2FtZXBhZE1hbmFnZXI6OnBsYXRmb3JtR2FtZXBhZENvbm5lY3RlZChQbGF0Zm9ybUdh
bWVwYWQmIHBsYXRmb3JtR2FtZXBhZCwKIAogdm9pZCBHYW1lcGFkTWFuYWdlcjo6cGxhdGZvcm1H
YW1lcGFkRGlzY29ubmVjdGVkKFBsYXRmb3JtR2FtZXBhZCYgcGxhdGZvcm1HYW1lcGFkKQogewot
ICAgIFZlY3RvcjxXZWFrUHRyPERPTVdpbmRvdz4+IHdlYWtXaW5kb3dzOwotICAgIGZvciAoYXV0
byogZG9tV2luZG93IDogbV9kb21XaW5kb3dzKQotICAgICAgICB3ZWFrV2luZG93cy5hcHBlbmQo
KmRvbVdpbmRvdyk7Ci0KICAgICBIYXNoU2V0PE5hdmlnYXRvckdhbWVwYWQqPiBub3RpZmllZE5h
dmlnYXRvcnM7CiAKICAgICAvLyBIYW5kbGUgdGhlIGRpc2Nvbm5lY3QgZm9yIGFsbCBET01XaW5k
b3dzIHdpdGggZXZlbnQgbGlzdGVuZXJzIGFuZCB0aGVpciBOYXZpZ2F0b3JzLgotICAgIGZvciAo
YXV0byYgd2luZG93IDogd2Vha1dpbmRvd3MpIHsKKyAgICBmb3IgKGF1dG8mIHdpbmRvdyA6IGNv
cHlUb1ZlY3Rvck9mPFdlYWtQdHI8RE9NV2luZG93Pj4obV9kb21XaW5kb3dzKSkgewogICAgICAg
ICAvLyBFdmVudCBkaXNwYXRjaCBtaWdodCBoYXZlIG1hZGUgdGhpcyB3aW5kb3cgZ28gYXdheS4K
ICAgICAgICAgaWYgKCF3aW5kb3cpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE0MywxMSAr
MTM5LDcgQEAgdm9pZCBHYW1lcGFkTWFuYWdlcjo6bWFrZUdhbWVwYWRWaXNpYmxlKFBsYXRmb3Jt
R2FtZXBhZCYgcGxhdGZvcm1HYW1lcGFkLCBIYXNoU2UKICAgICBmb3IgKGF1dG8qIG5hdmlnYXRv
ciA6IG5hdmlnYXRvclNldCkKICAgICAgICAgbmF2aWdhdG9yLT5nYW1lcGFkQ29ubmVjdGVkKHBs
YXRmb3JtR2FtZXBhZCk7CiAKLSAgICBWZWN0b3I8V2Vha1B0cjxET01XaW5kb3c+PiB3ZWFrV2lu
ZG93czsKLSAgICBmb3IgKGF1dG8qIGRvbVdpbmRvdyA6IG1fZG9tV2luZG93cykKLSAgICAgICAg
d2Vha1dpbmRvd3MuYXBwZW5kKCpkb21XaW5kb3cpOwotCi0gICAgZm9yIChhdXRvJiB3aW5kb3cg
OiB3ZWFrV2luZG93cykgeworICAgIGZvciAoYXV0byYgd2luZG93IDogY29weVRvVmVjdG9yT2Y8
V2Vha1B0cjxET01XaW5kb3c+PihtX2RvbVdpbmRvd3MpKSB7CiAgICAgICAgIC8vIEV2ZW50IGRp
c3BhdGNoIG1pZ2h0IGhhdmUgbWFkZSB0aGlzIHdpbmRvdyBnbyBhd2F5LgogICAgICAgICBpZiAo
IXdpbmRvdykKICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCmluZGV4IDdhYTYzMmI3ZWMwNDdiZTQ2MDhi
NTFhMDk0ZWExYTRlNTdhMjYyOWIuLjBiZThiZDExNmVjMjM2MTIzYzcxNTMyZDdlZTM2YzU2ZTk5
NjU0OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZS5jcHAKQEAgLTEwMiw5ICsxMDIsNyBAQCBSZWY8RE9NU3RyaW5nTGlzdD4gSURCRGF0YWJh
c2U6Om9iamVjdFN0b3JlTmFtZXMoKSBjb25zdAogewogICAgIEFTU0VSVChjYW5DdXJyZW50VGhy
ZWFkQWNjZXNzVGhyZWFkTG9jYWxEYXRhKG9yaWdpblRocmVhZCgpKSk7CiAKLSAgICBhdXRvIG9i
amVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKLSAgICBmb3IgKGF1dG8m
IG5hbWUgOiBtX2luZm8ub2JqZWN0U3RvcmVOYW1lcygpKQotICAgICAgICBvYmplY3RTdG9yZU5h
bWVzLT5hcHBlbmQobmFtZSk7CisgICAgYXV0byBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5n
TGlzdDo6Y3JlYXRlKG1faW5mby5vYmplY3RTdG9yZU5hbWVzKCkpOwogICAgIG9iamVjdFN0b3Jl
TmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gb2JqZWN0U3RvcmVOYW1lczsKIH0KQEAgLTE3NSwx
OSArMTczLDE2IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJUcmFuc2FjdGlvbj4+IElEQkRhdGFiYXNl
Ojp0cmFuc2FjdGlvbihTdHJpbmdPclZlY3Rvck9mU3RyaW5nCiAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0byBleGVjdXRlICd0cmFuc2FjdGlv
bicgb24gJ0lEQkRhdGFiYXNlJzogVGhlIGRhdGFiYXNlIGNvbm5lY3Rpb24gaXMgY2xvc2luZy4i
X3MgfTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IG9iamVjdFN0b3JlczsKLSAgICBpZiAoc3RkOjpo
b2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oc3RvcmVOYW1lcykpCisgICAgaWYgKHN0
ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPFN0cmluZz4+KHN0b3JlTmFtZXMpKSB7CiAgICAg
ICAgIG9iamVjdFN0b3JlcyA9IFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPFN0cmluZz4+KHN0b3Jl
TmFtZXMpKTsKLSAgICBlbHNlCisgICAgICAgIC8vIEl0IGlzIHZhbGlkIGZvciBqYXZhc2NyaXB0
IHRvIHBhc3MgaW4gYSBsaXN0IG9mIG9iamVjdCBzdG9yZSBuYW1lcyB3aXRoIHRoZSBzYW1lIG5h
bWUgbGlzdGVkIHR3aWNlLAorICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIHB1dCB0aGVtIGFsbCBp
biBhIHNldCB0byBnZXQgYSB1bmlxdWUgbGlzdC4KKyAgICAgICAgSGFzaFNldDxTdHJpbmc+IG9i
amVjdFN0b3JlU2V0OworICAgICAgICBvYmplY3RTdG9yZVNldC5hZGQob2JqZWN0U3RvcmVzLmJl
Z2luKCksIG9iamVjdFN0b3Jlcy5lbmQoKSk7CisgICAgICAgIG9iamVjdFN0b3JlcyA9IGNvcHlU
b1ZlY3RvcihvYmplY3RTdG9yZVNldCk7CisgICAgfSBlbHNlCiAgICAgICAgIG9iamVjdFN0b3Jl
cy5hcHBlbmQoV1RGTW92ZShzdGQ6OmdldDxTdHJpbmc+KHN0b3JlTmFtZXMpKSk7CiAKLSAgICAv
LyBJdCBpcyB2YWxpZCBmb3IgamF2YXNjcmlwdCB0byBwYXNzIGluIGEgbGlzdCBvZiBvYmplY3Qg
c3RvcmUgbmFtZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGxpc3RlZCB0d2ljZSwKLSAgICAvLyBzbyB3
ZSBuZWVkIHRvIHB1dCB0aGVtIGFsbCBpbiBhIHNldCB0byBnZXQgYSB1bmlxdWUgbGlzdC4KLSAg
ICBIYXNoU2V0PFN0cmluZz4gb2JqZWN0U3RvcmVTZXQ7Ci0gICAgZm9yIChhdXRvJiBvYmplY3RT
dG9yZSA6IG9iamVjdFN0b3JlcykKLSAgICAgICAgb2JqZWN0U3RvcmVTZXQuYWRkKG9iamVjdFN0
b3JlKTsKLQotICAgIG9iamVjdFN0b3JlcyA9IGNvcHlUb1ZlY3RvcihvYmplY3RTdG9yZVNldCk7
Ci0KICAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlTmFtZSA6IG9iamVjdFN0b3JlcykgewogICAg
ICAgICBpZiAobV9pbmZvLmhhc09iamVjdFN0b3JlKG9iamVjdFN0b3JlTmFtZSkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQktleURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktl
eURhdGEuaAppbmRleCA0Yjk3ODUzNjlkMTkwYTZiMTk2OTFkMTM3YWUxNTY3ZTVjMzc5NWQ5Li4w
MmY3MzM0MDNmM2FkMzM0ZmYyNzk1MDM3ZmFlN2Y2NTVhNjdhNzQwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5oCkBAIC0yNyw2ICsyNyw3IEBACiAK
ICNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRlIDx2YXJpYW50PgorI2luY2x1ZGUgPHd0Zi9I
YXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvU3RkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgogCkBAIC0xMTcsNDEgKzExOCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
ICEoKnRoaXMgPT0gb3RoZXIpOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAot
ICAgIHsKLSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBoYXNoQ29kZXM7Ci0gICAgICAgIGhhc2hD
b2Rlcy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdHlwZSkpOwotICAgICAgICBoYXNo
Q29kZXMuYXBwZW5kKG1faXNOdWxsID8gMSA6IDApOwotICAgICAgICBoYXNoQ29kZXMuYXBwZW5k
KG1faXNEZWxldGVkVmFsdWUgPyAxIDogMCk7Ci0gICAgICAgIHN3aXRjaCAobV90eXBlKSB7Ci0g
ICAgICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpJbnZhbGlkOgotICAgICAgICBjYXNlIElu
ZGV4ZWREQjo6S2V5VHlwZTo6TWF4OgotICAgICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6
TWluOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBl
OjpOdW1iZXI6Ci0gICAgICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpEYXRlOgotICAgICAg
ICAgICAgaGFzaENvZGVzLmFwcGVuZChTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnk8c2l6ZW9mKGRv
dWJsZSk+KCZzdGQ6OmdldDxkb3VibGU+KG1fdmFsdWUpKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OlN0cmluZzoKLSAgICAgICAgICAgIGhh
c2hDb2Rlcy5hcHBlbmQoU3RyaW5nSGFzaDo6aGFzaChzdGQ6OmdldDxTdHJpbmc+KG1fdmFsdWUp
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6
OkJpbmFyeTogewotICAgICAgICAgICAgYXV0byogZGF0YSA9IHN0ZDo6Z2V0PFRocmVhZFNhZmVE
YXRhQnVmZmVyPihtX3ZhbHVlKS5kYXRhKCk7Ci0gICAgICAgICAgICBpZiAoIWRhdGEpCi0gICAg
ICAgICAgICAgICAgaGFzaENvZGVzLmFwcGVuZCgwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShkYXRh
LT5kYXRhKCksIGRhdGEtPnNpemUoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OkFycmF5OgotICAgICAgICAgICAgZm9y
IChhdXRvJiBrZXkgOiBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpKQotICAg
ICAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoa2V5Lmhhc2goKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1v
cnkoaGFzaENvZGVzLmRhdGEoKSwgaGFzaENvZGVzLnNpemUoKSAqIHNpemVvZih1bnNpZ25lZCkp
OwotICAgIH0KLQogICAgIFN0cmluZyBzdHJpbmcoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNT
RVJUKG1fdHlwZSA9PSBJbmRleGVkREI6OktleVR5cGU6OlN0cmluZyk7CkBAIC0xOTYsOCArMTYy
LDM1IEBAIHByaXZhdGU6CiAgICAgc3RkOjp2YXJpYW50PFZlY3RvcjxJREJLZXlEYXRhPiwgU3Ry
aW5nLCBkb3VibGUsIFRocmVhZFNhZmVEYXRhQnVmZmVyPiBtX3ZhbHVlOwogfTsKIAoraW5saW5l
IHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhKQorewor
ICAgIGFkZChoYXNoZXIsIGtleURhdGEudHlwZSgpKTsKKyAgICBhZGQoaGFzaGVyLCBrZXlEYXRh
LmlzTnVsbCgpKTsKKyAgICBzd2l0Y2ggKGtleURhdGEudHlwZSgpKSB7CisgICAgY2FzZSBJbmRl
eGVkREI6OktleVR5cGU6OkludmFsaWQ6CisgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6Ok1h
eDoKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TWluOgorICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TnVtYmVyOgorICAgICAgICBhZGQoaGFzaGVyLCBr
ZXlEYXRhLm51bWJlcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbmRleGVkREI6Oktl
eVR5cGU6OkRhdGU6CisgICAgICAgIGFkZChoYXNoZXIsIGtleURhdGEuZGF0ZSgpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OlN0cmluZzoKKyAgICAgICAg
YWRkKGhhc2hlciwga2V5RGF0YS5zdHJpbmcoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SW5kZXhlZERCOjpLZXlUeXBlOjpCaW5hcnk6CisgICAgICAgIGFkZChoYXNoZXIsIGtleURhdGEu
YmluYXJ5KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6
QXJyYXk6CisgICAgICAgIGFkZChoYXNoZXIsIGtleURhdGEuYXJyYXkoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKwogc3RydWN0IElEQktleURhdGFIYXNoIHsKLSAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBJREJLZXlEYXRhJiBhKSB7IHJldHVybiBhLmhhc2goKTsgfQorICAg
IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IElEQktleURhdGEmIGEpIHsgcmV0dXJuIGNvbXB1
dGVIYXNoKGEpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgSURCS2V5RGF0YSYgYSwg
Y29uc3QgSURCS2V5RGF0YSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CiAgICAgc3RhdGljIGNvbnN0
IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKaW5k
ZXggMTQzNTE0MGE1Y2I0YTFhMWQ0MDdhMmRiMjlkMTViZGYyZDUyYzBiNi4uY2U2M2M2YTU2YjE0
ZDViZTAzMjI1NzM3MjUzMjJiODJmMGRkZGQwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcApAQCAtMTI2LDE0ICsxMjYsMTEg
QEAgUmVmPERPTVN0cmluZ0xpc3Q+IElEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzKCkgY29uc3QK
IHsKICAgICBBU1NFUlQoY2FuQ3VycmVudFRocmVhZEFjY2Vzc1RocmVhZExvY2FsRGF0YShtX3Ry
YW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkpKTsKIAotICAgIGF1dG8gaW5kZXhO
YW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwotCi0gICAgaWYgKCFtX2RlbGV0ZWQpIHsK
LSAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogbV9pbmZvLmluZGV4TmFtZXMoKSkKLSAgICAgICAg
ICAgIGluZGV4TmFtZXMtPmFwcGVuZChuYW1lKTsKLSAgICAgICAgaW5kZXhOYW1lcy0+c29ydCgp
OwotICAgIH0KKyAgICBpZiAobV9kZWxldGVkKQorICAgICAgICByZXR1cm4gRE9NU3RyaW5nTGlz
dDo6Y3JlYXRlKCk7CiAKKyAgICBhdXRvIGluZGV4TmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVh
dGUobV9pbmZvLmluZGV4TmFtZXMoKSk7CisgICAgaW5kZXhOYW1lcy0+c29ydCgpOwogICAgIHJl
dHVybiBpbmRleE5hbWVzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggNmMxMTIxYjczMTBmNzM3ZjdiOTViZWNl
ZTg0NTRlNmFjNTBkZjJiNi4uY2U4NjdiMWI3ZTZkNmYxNTQ5ZWNkNzI2MTI3ZGNjNzY5OTVhOWQw
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uLmNwcApAQCAtMTIxLDEyICsxMjEsOCBAQCBSZWY8RE9NU3RyaW5nTGlzdD4gSURCVHJh
bnNhY3Rpb246Om9iamVjdFN0b3JlTmFtZXMoKSBjb25zdAogewogICAgIEFTU0VSVChjYW5DdXJy
ZW50VGhyZWFkQWNjZXNzVGhyZWFkTG9jYWxEYXRhKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgp
KSk7CiAKLSAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiBuYW1lcyA9IGlzVmVyc2lvbkNoYW5nZSgp
ID8gbV9kYXRhYmFzZS0+aW5mbygpLm9iamVjdFN0b3JlTmFtZXMoKSA6IG1faW5mby5vYmplY3RT
dG9yZXMoKTsKLQotICAgIFJlZjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0gRE9N
U3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0gICAgZm9yIChhdXRvJiBuYW1lIDogbmFtZXMpCi0gICAg
ICAgIG9iamVjdFN0b3JlTmFtZXMtPmFwcGVuZChuYW1lKTsKLQorICAgIGF1dG8gbmFtZXMgPSBp
c1ZlcnNpb25DaGFuZ2UoKSA/IG1fZGF0YWJhc2UtPmluZm8oKS5vYmplY3RTdG9yZU5hbWVzKCkg
OiBtX2luZm8ub2JqZWN0U3RvcmVzKCk7CisgICAgYXV0byBvYmplY3RTdG9yZU5hbWVzID0gRE9N
U3RyaW5nTGlzdDo6Y3JlYXRlKFdURk1vdmUobmFtZXMpKTsKICAgICBvYmplY3RTdG9yZU5hbWVz
LT5zb3J0KCk7CiAgICAgcmV0dXJuIG9iamVjdFN0b3JlTmFtZXM7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0
LmNwcAppbmRleCAxOWEwNjllMjNiMzlkYmI0YTcwNjVkOGRlNzhkN2VlNDkzYzY5ODE4Li5iODI1
ZWM4MDA1MTQ4MDI4ZTJiMDdiMTlkYzc4MzkyYTQzYThjYmE1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5j
cHAKQEAgLTU1NSwxMSArNTU1LDEwIEBAIGJvb2wgTWVkaWFDb250cm9sc0hvc3Q6OnNob3dNZWRp
YUNvbnRyb2xzQ29udGV4dE1lbnUoSFRNTEVsZW1lbnQmIHRhcmdldCwgU3RyaW5nCiAKICAgICBp
ZiAob3B0aW9uc0pTT05PYmplY3QtPmdldEJvb2xlYW4oImluY2x1ZGVMYW5ndWFnZXMiX3MpLnZh
bHVlX29yKGZhbHNlKSkgewogICAgICAgICBpZiAoYXV0byogYXVkaW9UcmFja3MgPSBtZWRpYUVs
ZW1lbnQuYXVkaW9UcmFja3MoKTsgYXVkaW9UcmFja3MgJiYgYXVkaW9UcmFja3MtPmxlbmd0aCgp
ID4gMSkgewotICAgICAgICAgICAgVmVjdG9yPE1lbnVJdGVtPiBsYW5ndWFnZU1lbnVJdGVtczsK
LQogICAgICAgICAgICAgYXV0byYgY2FwdGlvblByZWZlcmVuY2VzID0gcGFnZS0+Z3JvdXAoKS5l
bnN1cmVDYXB0aW9uUHJlZmVyZW5jZXMoKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgYXVkaW9U
cmFjayA6IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KGF1ZGlvVHJh
Y2tzKSkKLSAgICAgICAgICAgICAgICBsYW5ndWFnZU1lbnVJdGVtcy5hcHBlbmQoY3JlYXRlTWVu
dUl0ZW0oYXVkaW9UcmFjaywgY2FwdGlvblByZWZlcmVuY2VzLmRpc3BsYXlOYW1lRm9yVHJhY2so
YXVkaW9UcmFjay5nZXQoKSksIGF1ZGlvVHJhY2stPmVuYWJsZWQoKSkpOworICAgICAgICAgICAg
YXV0byBsYW5ndWFnZU1lbnVJdGVtcyA9IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xp
c3RGb3JNZW51KGF1ZGlvVHJhY2tzKS5tYXAoWyZdKGF1dG8mIGF1ZGlvVHJhY2spIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gY3JlYXRlTWVudUl0ZW0oYXVkaW9UcmFjaywgY2FwdGlvblByZWZl
cmVuY2VzLmRpc3BsYXlOYW1lRm9yVHJhY2soYXVkaW9UcmFjay5nZXQoKSksIGF1ZGlvVHJhY2st
PmVuYWJsZWQoKSk7CisgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgaWYgKCFsYW5ndWFn
ZU1lbnVJdGVtcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgaXRlbXMuYXBwZW5kKGNyZWF0
ZVN1Ym1lbnUoV0VCX1VJX1NUUklOR19LRVkoIkxhbmd1YWdlcyIsICJMYW5ndWFnZXMgKE1lZGlh
IENvbnRyb2xzIE1lbnUpIiwgIkxhbmd1YWdlcyBtZWRpYSBjb250cm9scyBjb250ZXh0IG1lbnUg
dGl0bGUiKSwgImdsb2JlIl9zLCBXVEZNb3ZlKGxhbmd1YWdlTWVudUl0ZW1zKSkpOwpAQCAtNTY4
LDE1ICs1NjcsMTMgQEAgYm9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6c2hvd01lZGlhQ29udHJvbHND
b250ZXh0TWVudShIVE1MRWxlbWVudCYgdGFyZ2V0LCBTdHJpbmcKIAogICAgIGlmIChvcHRpb25z
SlNPTk9iamVjdC0+Z2V0Qm9vbGVhbigiaW5jbHVkZVN1YnRpdGxlcyJfcykudmFsdWVfb3IoZmFs
c2UpKSB7CiAgICAgICAgIGlmIChhdXRvKiB0ZXh0VHJhY2tzID0gbWVkaWFFbGVtZW50LnRleHRU
cmFja3MoKTsgdGV4dFRyYWNrcyAmJiB0ZXh0VHJhY2tzLT5sZW5ndGgoKSkgewotICAgICAgICAg
ICAgVmVjdG9yPE1lbnVJdGVtPiBzdWJ0aXRsZU1lbnVJdGVtczsKLQogICAgICAgICAgICAgYXV0
byYgY2FwdGlvblByZWZlcmVuY2VzID0gcGFnZS0+Z3JvdXAoKS5lbnN1cmVDYXB0aW9uUHJlZmVy
ZW5jZXMoKTsKICAgICAgICAgICAgIGF1dG8gc29ydGVkVGV4dFRyYWNrcyA9IGNhcHRpb25QcmVm
ZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KHRleHRUcmFja3MsIHsgVGV4dFRyYWNrOjpL
aW5kOjpTdWJ0aXRsZXMsIFRleHRUcmFjazo6S2luZDo6Q2FwdGlvbnMsIFRleHRUcmFjazo6S2lu
ZDo6RGVzY3JpcHRpb25zIH0pOwogICAgICAgICAgICAgYm9vbCBhbGxUcmFja3NEaXNhYmxlZCA9
IG5vdEZvdW5kID09IHNvcnRlZFRleHRUcmFja3MuZmluZElmKFtdIChjb25zdCBhdXRvJiB0ZXh0
VHJhY2spIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dFRyYWNrLT5tb2RlKCkgPT0gVGV4
dFRyYWNrOjpNb2RlOjpTaG93aW5nOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBib29s
IHVzZXNBdXRvbWF0aWNUcmFjayA9IGNhcHRpb25QcmVmZXJlbmNlcy5jYXB0aW9uRGlzcGxheU1v
ZGUoKSA9PSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpBdXRvbWF0aWMgJiYgYWxsVHJhY2tzRGlz
YWJsZWQ7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHRleHRUcmFjayA6IHNvcnRlZFRleHRUcmFj
a3MpIHsKKyAgICAgICAgICAgIGF1dG8gc3VidGl0bGVNZW51SXRlbXMgPSBzb3J0ZWRUZXh0VHJh
Y2tzLm1hcChbJl0oYXV0byYgdGV4dFRyYWNrKSB7CiAgICAgICAgICAgICAgICAgYm9vbCBjaGVj
a2VkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYgKGFsbFRyYWNrc0Rpc2FibGVkICYmIHRl
eHRUcmFjayA9PSAmVGV4dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0oKSAmJiAoY2FwdGlvblBy
ZWZlcmVuY2VzLmNhcHRpb25EaXNwbGF5TW9kZSgpID09IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6
OkZvcmNlZE9ubHkgfHwgY2FwdGlvblByZWZlcmVuY2VzLmNhcHRpb25EaXNwbGF5TW9kZSgpID09
IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6Ok1hbnVhbCkpCiAgICAgICAgICAgICAgICAgICAgIGNo
ZWNrZWQgPSB0cnVlOwpAQCAtNTg0LDggKzU4MSw4IEBAIGJvb2wgTWVkaWFDb250cm9sc0hvc3Q6
OnNob3dNZWRpYUNvbnRyb2xzQ29udGV4dE1lbnUoSFRNTEVsZW1lbnQmIHRhcmdldCwgU3RyaW5n
CiAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGVs
c2UgaWYgKCF1c2VzQXV0b21hdGljVHJhY2sgJiYgdGV4dFRyYWNrLT5tb2RlKCkgPT0gVGV4dFRy
YWNrOjpNb2RlOjpTaG93aW5nKQogICAgICAgICAgICAgICAgICAgICBjaGVja2VkID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICBzdWJ0aXRsZU1lbnVJdGVtcy5hcHBlbmQoY3JlYXRlTWVudUl0ZW0o
dGV4dFRyYWNrLCBjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFjayh0ZXh0VHJh
Y2suZ2V0KCkpLCBjaGVja2VkKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0
dXJuIGNyZWF0ZU1lbnVJdGVtKHRleHRUcmFjaywgY2FwdGlvblByZWZlcmVuY2VzLmRpc3BsYXlO
YW1lRm9yVHJhY2sodGV4dFRyYWNrLmdldCgpKSwgY2hlY2tlZCk7CisgICAgICAgICAgICB9KTsK
IAogICAgICAgICAgICAgaWYgKCFzdWJ0aXRsZU1lbnVJdGVtcy5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICAgICAgaXRlbXMuYXBwZW5kKGNyZWF0ZVN1Ym1lbnUoV0VCX1VJX1NUUklOR19LRVkoIlN1
YnRpdGxlcyIsICJTdWJ0aXRsZXMgKE1lZGlhIENvbnRyb2xzIE1lbnUpIiwgIlN1YnRpdGxlcyBt
ZWRpYSBjb250cm9scyBjb250ZXh0IG1lbnUgdGl0bGUiKSwgImNhcHRpb25zLmJ1YmJsZSJfcywg
V1RGTW92ZShzdWJ0aXRsZU1lbnVJdGVtcykpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKaW5kZXggOTEyNzQ3ZjQwNmMyOTU5NDk5
NzNiNWJiMTM0OWRiY2E2NzQxYzEzNS4uYTJlNjU4YTkyZjk5N2Q3ZjRiNDNlMTcwM2Y0YTBlMDk0
OTE3YjBlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9N
ZWRpYVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9N
ZWRpYVNvdXJjZS5jcHAKQEAgLTEwNTEsMTAgKzEwNTEsOSBAQCB2b2lkIE1lZGlhU291cmNlOjpv
blJlYWR5U3RhdGVDaGFuZ2UoUmVhZHlTdGF0ZSBvbGRTdGF0ZSwgUmVhZHlTdGF0ZSBuZXdTdGF0
ZSkKIAogVmVjdG9yPFBsYXRmb3JtVGltZVJhbmdlcz4gTWVkaWFTb3VyY2U6OmFjdGl2ZVJhbmdl
cygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFBsYXRmb3JtVGltZVJhbmdlcz4gYWN0aXZlUmFuZ2Vz
OwotICAgIGZvciAoYXV0byYgc291cmNlQnVmZmVyIDogKm1fYWN0aXZlU291cmNlQnVmZmVycykK
LSAgICAgICAgYWN0aXZlUmFuZ2VzLmFwcGVuZChzb3VyY2VCdWZmZXItPmJ1ZmZlcmVkSW50ZXJu
YWwoKS5yYW5nZXMoKSk7Ci0gICAgcmV0dXJuIGFjdGl2ZVJhbmdlczsKKyAgICByZXR1cm4gV1RG
OjptYXAoKm1fYWN0aXZlU291cmNlQnVmZmVycywgW10oYXV0byYgc291cmNlQnVmZmVyKSB7Cisg
ICAgICAgIHJldHVybiBzb3VyY2VCdWZmZXItPmJ1ZmZlcmVkSW50ZXJuYWwoKS5yYW5nZXMoKTsK
KyAgICB9KTsKIH0KIAogRXhjZXB0aW9uT3I8UmVmPFNvdXJjZUJ1ZmZlclByaXZhdGU+PiBNZWRp
YVNvdXJjZTo6Y3JlYXRlU291cmNlQnVmZmVyUHJpdmF0ZShjb25zdCBDb250ZW50VHlwZSYgaW5j
b21pbmdUeXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJj
ZS9TYW1wbGVNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxl
TWFwLmgKaW5kZXggZWFmNDkzMTU5N2QyNjg1MjNjNjY3YmQ5Y2RjYzRjZWE2NTQzMzY5NS4uYWYx
ZTEwNDU4MTc4N2YxNWY2ZjFmMzg1YjI1NzI0NDRkODg1OTVmYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9TYW1wbGVNYXAuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1hcC5oCkBAIC05MSw2ICs5MSw3IEBAIHB1
YmxpYzoKICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IG1fc2FtcGxlcy5yYmVnaW4oKTsgfQogICAgIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0
dXJuIG1fc2FtcGxlcy5yZW5kKCk7IH0KICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQo
KSBjb25zdCB7IHJldHVybiBtX3NhbXBsZXMucmVuZCgpOyB9CisgICAgc2l6ZV90IHNpemUoKSBj
b25zdCB7IHJldHVybiBtX3NhbXBsZXMuc2l6ZSgpOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCBp
dGVyYXRvciBmaW5kU2FtcGxlV2l0aERlY29kZUtleShjb25zdCBLZXlUeXBlJik7CiAgICAgV0VC
Q09SRV9FWFBPUlQgaXRlcmF0b3IgZmluZFNhbXBsZUFmdGVyRGVjb2RlS2V5KGNvbnN0IEtleVR5
cGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291
cmNlQnVmZmVyTGlzdC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3Vy
Y2VCdWZmZXJMaXN0LmgKaW5kZXggZmM2ZTA3M2FiOTBlNzZkMTgxNWY4ODk2YjZmNjYwOTZkZjJm
ZGRkNS4uYmQ2ZTNiNzdjOWQ3NDMwZmVhMjE2ZThhZWFmOGQxMzNiYzI2N2MxZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0
LmgKQEAgLTQ3LDggKzQ3LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWY8U291cmNlQnVmZmVy
TGlzdD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKICAgICB2aXJ0dWFsIH5Tb3Vy
Y2VCdWZmZXJMaXN0KCk7CiAKLSAgICB1bnNpZ25lZCBsb25nIGxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGlzdC5zaXplKCk7IH0KLSAgICBTb3VyY2VCdWZmZXIqIGl0ZW0odW5zaWduZWQgbG9u
ZyBpbmRleCkgY29uc3QgeyByZXR1cm4gKGluZGV4IDwgbV9saXN0LnNpemUoKSkgPyBtX2xpc3Rb
aW5kZXhdLmdldCgpIDogbnVsbHB0cjsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KKworICAgIFNvdXJjZUJ1ZmZlciogaXRlbSh1bnNpZ25l
ZCBpbmRleCkgY29uc3QgeyByZXR1cm4gKGluZGV4IDwgbV9saXN0LnNpemUoKSkgPyBtX2xpc3Rb
aW5kZXhdLmdldCgpIDogbnVsbHB0cjsgfQogCiAgICAgdm9pZCBhZGQoUmVmPFNvdXJjZUJ1ZmZl
cj4mJik7CiAgICAgdm9pZCByZW1vdmUoU291cmNlQnVmZmVyJik7CkBAIC01OCw2ICs1OSw5IEBA
IHB1YmxpYzoKIAogICAgIFZlY3RvcjxSZWZQdHI8U291cmNlQnVmZmVyPj46Oml0ZXJhdG9yIGJl
Z2luKCkgeyByZXR1cm4gbV9saXN0LmJlZ2luKCk7IH0KICAgICBWZWN0b3I8UmVmUHRyPFNvdXJj
ZUJ1ZmZlcj4+OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX2xpc3QuZW5kKCk7IH0KKyAgICBW
ZWN0b3I8UmVmUHRyPFNvdXJjZUJ1ZmZlcj4+Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fbGlzdC5iZWdpbigpOyB9CisgICAgVmVjdG9yPFJlZlB0cjxTb3VyY2VCdWZm
ZXI+Pjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LmVuZCgpOyB9
CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CiAKICAg
ICAvLyBFdmVudFRhcmdldCBpbnRlcmZhY2UKICAgICBFdmVudFRhcmdldEludGVyZmFjZSBldmVu
dFRhcmdldEludGVyZmFjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFNvdXJjZUJ1ZmZlckxpc3RF
dmVudFRhcmdldEludGVyZmFjZVR5cGU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuY3BwCmluZGV4IGVhZjNhMmUxZTc5OGE0ODFmNzY4YjMz
YzVmZDI5ZDNjN2NiYWIzYWUuLjgyYzFhM2EwYzA3MjU1YzFlODBkYTYxZDU5MGJhOWM5NDFjYzA2
OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRo
ZXNpcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhl
c2lzLmNwcApAQCAtOTMsOSArOTMsMTAgQEAgY29uc3QgVmVjdG9yPFJlZjxTcGVlY2hTeW50aGVz
aXNWb2ljZT4+JiBTcGVlY2hTeW50aGVzaXM6OmdldFZvaWNlcygpCiAgICAgICAgIHJldHVybiBt
X3ZvaWNlTGlzdDsKIAogICAgIC8vIElmIHRoZSB2b2ljZUxpc3QgaXMgZW1wdHksIHRoYXQncyB0
aGUgY3VlIHRvIGdldCB0aGUgdm9pY2VzIGZyb20gdGhlIHBsYXRmb3JtIGFnYWluLgotICAgIGZv
ciAoYXV0byYgdm9pY2UgOiBtX3NwZWVjaFN5bnRoZXNpc0NsaWVudCA/IG1fc3BlZWNoU3ludGhl
c2lzQ2xpZW50LT52b2ljZUxpc3QoKSA6IGVuc3VyZVBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIo
KS52b2ljZUxpc3QoKSkKLSAgICAgICAgbV92b2ljZUxpc3QuYXBwZW5kKFNwZWVjaFN5bnRoZXNp
c1ZvaWNlOjpjcmVhdGUoKnZvaWNlKSk7Ci0KKyAgICBhdXRvJiB2b2ljZUxpc3QgPSBtX3NwZWVj
aFN5bnRoZXNpc0NsaWVudCA/IG1fc3BlZWNoU3ludGhlc2lzQ2xpZW50LT52b2ljZUxpc3QoKSA6
IGVuc3VyZVBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIoKS52b2ljZUxpc3QoKTsKKyAgICBtX3Zv
aWNlTGlzdCA9IHZvaWNlTGlzdC5tYXAoW10oYXV0byYgdm9pY2UpIHsKKyAgICAgICAgcmV0dXJu
IFNwZWVjaFN5bnRoZXNpc1ZvaWNlOjpjcmVhdGUoKnZvaWNlKTsKKyAgICB9KTsKICAgICByZXR1
cm4gbV92b2ljZUxpc3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
c3BlZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrLm1tIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9zcGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2subW0KaW5kZXggZjFi
OTY5NTgwNTdkMmZlNjA0NGQyYzdiMjU5ZGI2YzVjZWI0NGVmZS4uYTVlODVhZjgyOWJjMGRkZGVm
NjJjNjFhNGY2YzlmMmNmMmFkNmNmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9zcGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2subW0KKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zcGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2subW0KQEAg
LTEyOCw5ICsxMjgsOCBAQCAtICh2b2lkKWNhbGxiYWNrV2l0aFRyYW5zY3JpcHRpb25zOihOU0Fy
cmF5PFNGVHJhbnNjcmlwdGlvbiAqPiAqKXRyYW5zY3JpcHRpb25zCiAgICAgICAgIGlmIChhbHRl
cm5hdGl2ZXMuc2l6ZSgpID09IF9tYXhBbHRlcm5hdGl2ZXMpCiAgICAgICAgICAgICBicmVhazsK
ICAgICB9Ci0gICAgVmVjdG9yPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0RGF0YT4gZGF0YXM7Ci0g
ICAgZGF0YXMuYXBwZW5kKFNwZWVjaFJlY29nbml0aW9uUmVzdWx0RGF0YSB7IFdURk1vdmUoYWx0
ZXJuYXRpdmVzKSwgYm9vbChpc0ZpbmFsKSB9KTsKLSAgICBfZGVsZWdhdGVDYWxsYmFjayhTcGVl
Y2hSZWNvZ25pdGlvblVwZGF0ZTo6Y3JlYXRlUmVzdWx0KF9pZGVudGlmaWVyLCBXVEZNb3ZlKGRh
dGFzKSkpOworICAgIFNwZWVjaFJlY29nbml0aW9uUmVzdWx0RGF0YSBkYXRhIHsgV1RGTW92ZShh
bHRlcm5hdGl2ZXMpLCAhIWlzRmluYWwgfTsKKyAgICBfZGVsZWdhdGVDYWxsYmFjayhTcGVlY2hS
ZWNvZ25pdGlvblVwZGF0ZTo6Y3JlYXRlUmVzdWx0KF9pZGVudGlmaWVyLCB7IFdURk1vdmUoZGF0
YSkgfSkpOwogfQogCiAtICh2b2lkKWF1ZGlvU2FtcGxlc0F2YWlsYWJsZTooQ01TYW1wbGVCdWZm
ZXJSZWYpc2FtcGxlQnVmZmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Nw
ZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFza01vY2subW0gYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFza01vY2subW0KaW5k
ZXggYmM1YzYyMTliNWRhZGMzYjFjZGM1OTBkNjVjODk3YjcyNTBiMWUyMS4uOTYzZmI0N2M0Yzg1
YWEwNjA1YTJkYWJjNzE5ZTU2NzRjMjYwYWJmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9zcGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2tNb2NrLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6ZXJU
YXNrTW9jay5tbQpAQCAtNjMsMTEgKzYzLDkgQEAgLSAodm9pZClhdWRpb1NhbXBsZXNBdmFpbGFi
bGU6KENNU2FtcGxlQnVmZmVyUmVmKXNhbXBsZUJ1ZmZlcgogICAgIH0KIAogICAgIC8vIEZha2Ug
c29tZSByZWNvZ25pdGlvbiByZXN1bHRzLgotICAgIFZlY3RvcjxTcGVlY2hSZWNvZ25pdGlvbkFs
dGVybmF0aXZlRGF0YT4gYWx0ZXJuYXRpdmVzOwotICAgIGFsdGVybmF0aXZlcy5hcHBlbmQoU3Bl
ZWNoUmVjb2duaXRpb25BbHRlcm5hdGl2ZURhdGEgeyAiVGVzdCIsIDEuMCB9KTsKLSAgICBWZWN0
b3I8U3BlZWNoUmVjb2duaXRpb25SZXN1bHREYXRhPiBkYXRhczsKLSAgICBkYXRhcy5hcHBlbmQo
U3BlZWNoUmVjb2duaXRpb25SZXN1bHREYXRhIHsgV1RGTW92ZShhbHRlcm5hdGl2ZXMpLCB0cnVl
ICB9KTsKLSAgICBfZGVsZWdhdGVDYWxsYmFjayhTcGVlY2hSZWNvZ25pdGlvblVwZGF0ZTo6Y3Jl
YXRlUmVzdWx0KF9pZGVudGlmaWVyLCBXVEZNb3ZlKGRhdGFzKSkpOworICAgIFNwZWVjaFJlY29n
bml0aW9uQWx0ZXJuYXRpdmVEYXRhIGFsdGVybmF0aXZlIHsgIlRlc3QiLCAxLjAgfTsKKyAgICBT
cGVlY2hSZWNvZ25pdGlvblJlc3VsdERhdGEgZGF0YSB7IHsgV1RGTW92ZShhbHRlcm5hdGl2ZSkg
fSwgdHJ1ZSB9OworICAgIF9kZWxlZ2F0ZUNhbGxiYWNrKFNwZWVjaFJlY29nbml0aW9uVXBkYXRl
OjpjcmVhdGVSZXN1bHQoX2lkZW50aWZpZXIsIHsgV1RGTW92ZShkYXRhKSB9KSk7CiAKICAgICBp
ZiAoIV9kb011bHRpcGxlUmVjb2duaXRpb25zKQogICAgICAgICBbc2VsZiBhYm9ydF07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAppbmRl
eCBlMzU5YTA0M2IyZTNjZjM5ZjljMjZiYzU5ZTk4ZjEwNWUxMzJjMTA1Li44YmNlNjY3MDY2YTNm
Nzc2ZjBlYWJhOTY2YjgxYTc0NmE5NzVlMzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
bmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKQEAgLTE2NCwxMCArMTY0LDggQEAgc3Rh
dGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kRnVuYyhjb25zdCBUcmFuc2Zvcm1P
cGVyYXRpb25zJiBmcm9tLCBjb24KICAgICBpZiAoY29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24g
PT0gQ29tcG9zaXRlT3BlcmF0aW9uOjpBZGQpIHsKICAgICAgICAgQVNTRVJUKGNvbnRleHQucHJv
Z3Jlc3MgPT0gMS4wKTsKICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyByZXN1bHRPcGVyYXRp
b25zOwotICAgICAgICBmb3IgKGF1dG8gb3BlcmF0aW9uIDogZnJvbS5vcGVyYXRpb25zKCkpCi0g
ICAgICAgICAgICByZXN1bHRPcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQob3BlcmF0aW9u
KTsKLSAgICAgICAgZm9yIChhdXRvIG9wZXJhdGlvbiA6IHRvLm9wZXJhdGlvbnMoKSkKLSAgICAg
ICAgICAgIHJlc3VsdE9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChvcGVyYXRpb24pOwor
ICAgICAgICByZXN1bHRPcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmRWZWN0b3IoZnJvbS5v
cGVyYXRpb25zKCkpOworICAgICAgICByZXN1bHRPcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBl
bmRWZWN0b3IodG8ub3BlcmF0aW9ucygpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdE9wZXJhdGlv
bnM7CiAgICAgfQogICAgIGF1dG8gYm94U2l6ZSA9IGlzPFJlbmRlckJveD4oY29udGV4dC5jbGll
bnQtPnJlbmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PigqY29udGV4dC5jbGllbnQtPnJl
bmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKS5zaXplKCkgOiBMYXlvdXRTaXplKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vRG9jdW1lbnRUaW1lbGluZXNDb250cm9sbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xs
ZXIuY3BwCmluZGV4IGI1ZmQyYWVmMTAwMDEyZGE5YzRiZGIyMWU3YWQwNDFhMzY2NDE2YmYuLjcw
OTQ1M2JjNjYyNTJmOTU5ODI0YmE5NGVjYTdhMzMwMDhjOWNhM2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXIuY3Bw
CkBAIC05OCw5ICs5OCw3IEBAIHZvaWQgRG9jdW1lbnRUaW1lbGluZXNDb250cm9sbGVyOjp1cGRh
dGVBbmltYXRpb25zQW5kU2VuZEV2ZW50cyhSZWR1Y2VkUmVzb2x1dGlvCiAgICAgQVNTRVJUKCFt
X3RpbWVsaW5lcy5oYXNOdWxsUmVmZXJlbmNlcygpKTsKIAogICAgIC8vIFdlIG5lZWQgdG8gY29w
eSBtX3RpbWVsaW5lcyBiZWZvcmUgaXRlcmF0aW5nIG92ZXIgaXRzIG1lbWJlcnMgc2luY2UgdGhl
IHN0ZXBzIGluIHRoaXMgcHJvY2VkdXJlIG1heSBtdXRhdGUgbV90aW1lbGluZXMuCi0gICAgVmVj
dG9yPFJlZjxEb2N1bWVudFRpbWVsaW5lPj4gcHJvdGVjdGVkVGltZWxpbmVzOwotICAgIGZvciAo
YXV0byYgdGltZWxpbmUgOiBtX3RpbWVsaW5lcykKLSAgICAgICAgcHJvdGVjdGVkVGltZWxpbmVz
LmFwcGVuZCh0aW1lbGluZSk7CisgICAgYXV0byBwcm90ZWN0ZWRUaW1lbGluZXMgPSBjb3B5VG9W
ZWN0b3JPZjxSZWY8RG9jdW1lbnRUaW1lbGluZT4+KG1fdGltZWxpbmVzKTsKIAogICAgIC8vIFdl
IG5lZWQgdG8gZnJlZXplIHRoZSBjdXJyZW50IHRpbWUgZXZlbiBpZiBubyBhbmltYXRpb24gaXMg
cnVubmluZy4KICAgICAvLyBkb2N1bWVudC50aW1lbGluZS5jdXJyZW50VGltZSBtYXkgYmUgY2Fs
bGVkIGZyb20gYSByQUYgY2FsbGJhY2sgYW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
bmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tl
eWZyYW1lRWZmZWN0LmNwcAppbmRleCA0NDQ0Y2NkMDg3YWU0ODA0ODBjNTg5ZmY0ZDY4OGUzZmM3
YzFhMjZhLi4zZDA5MWVlZTUzODc0NDIwM2Y3MzhiODZjMDc2NzY1N2Y0ZWNmMDhkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAKQEAgLTM3NSw4ICszNzUs
NyBAQCBzdGF0aWMgaW5saW5lIEV4Y2VwdGlvbk9yPHZvaWQ+IHByb2Nlc3NQcm9wZXJ0eUluZGV4
ZWRLZXlmcmFtZXMoSlNHbG9iYWxPYmplY3QmCiAgICAgICAgIGNvbXB1dGVNaXNzaW5nS2V5ZnJh
bWVPZmZzZXRzKHByb3BlcnR5S2V5ZnJhbWVzKTsKIAogICAgICAgICAvLyA3LiBBZGQga2V5ZnJh
bWVzIGluIHByb3BlcnR5IGtleWZyYW1lcyB0byBwcm9jZXNzZWQga2V5ZnJhbWVzLgotICAgICAg
ICBmb3IgKGF1dG8mIGtleWZyYW1lIDogcHJvcGVydHlLZXlmcmFtZXMpCi0gICAgICAgICAgICBw
YXJzZWRLZXlmcmFtZXMuYXBwZW5kKFdURk1vdmUoa2V5ZnJhbWUpKTsKKyAgICAgICAgcGFyc2Vk
S2V5ZnJhbWVzLmFwcGVuZFZlY3Rvcihwcm9wZXJ0eUtleWZyYW1lcyk7CiAgICAgfQogCiAgICAg
Ly8gMy4gU29ydCBwcm9jZXNzZWQga2V5ZnJhbWVzIGJ5IHRoZSBjb21wdXRlZCBrZXlmcmFtZSBv
ZmZzZXQgb2YgZWFjaCBrZXlmcmFtZSBpbiBpbmNyZWFzaW5nIG9yZGVyLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uLmNwcAppbmRl
eCA1MzQ5ZWYzOGZlNjkwNjRkZDQ1M2ZkNjhkN2RjNmE4ZWU3NzNkOWVjLi5jMDVjZDg5NDE1ZmY0
MTIwNGUzYzNjOGM3NzNmNDhkMTEzNjNjMDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uLmNwcApAQCAtNDYsOCArNDYsNyBA
QCBDb250ZW50RXh0ZW5zaW9uOjpDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgaWRlbnRp
ZmllciwgUmVmPENvbXBpbGVkQ29udGVudAogICAgICwgbV9leHRlbnNpb25CYXNlVVJMKFdURk1v
dmUoZXh0ZW5zaW9uQmFzZVVSTCkpCiB7CiAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlciBpbnRl
cnByZXRlcihtX2NvbXBpbGVkRXh0ZW5zaW9uLT51cmxGaWx0ZXJzQnl0ZWNvZGUoKSk7Ci0gICAg
Zm9yICh1aW50NjRfdCBhY3Rpb24gOiBpbnRlcnByZXRlci5hY3Rpb25zTWF0Y2hpbmdFdmVyeXRo
aW5nKCkpCi0gICAgICAgIG1fdW5pdmVyc2FsQWN0aW9ucy5hcHBlbmQoYWN0aW9uKTsKKyAgICBt
X3VuaXZlcnNhbEFjdGlvbnMgPSBjb3B5VG9WZWN0b3IoaW50ZXJwcmV0ZXIuYWN0aW9uc01hdGNo
aW5nRXZlcnl0aGluZygpKTsKIAogICAgIGlmIChzaG91bGRDb21waWxlQ1NTID09IFNob3VsZENv
bXBpbGVDU1M6OlllcykKICAgICAgICAgY29tcGlsZUdsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVl
dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oCmluZGV4IGJiMTI3M2E1ZmQzZWU4ZTY4ODBi
YTc2N2FmOTI5MTdlYmRkYTc0OGYuLmY5YTc2MDYwNDA4OWIwY2UyZjY5Zjg3Njg2NTRmMTI2ODIz
N2E2N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgKQEAgLTU4LDYgKzU4LDcgQEAgcHVi
bGljOgogICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmVu
ZCgpOyB9CiAgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9
CiAgICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV92YWx1ZXMuZW5kKCk7IH0KKyAgICBzaXpl
X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQogCiAgICAgdm9pZCBh
cHBlbmQoUmVmPENTU1ZhbHVlPiYmKTsKICAgICB2b2lkIHByZXBlbmQoUmVmPENTU1ZhbHVlPiYm
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25O
b2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmNw
cAppbmRleCA2YWI1Y2I2NzRkNDE1M2Q4MjI1MmYyNTg3ZWU0NmZjZjVhYWM4YzRhLi43OWYyYTg4
MjYwY2VhZWYwZDU4MDE1NzY2MTM5YzA3NTc2NjdjMDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwCkBAIC02MjAsMTQgKzYyMCwxMSBA
QCB2b2lkIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpob2lzdENoaWxkcmVuV2l0aE9wZXJhdG9yKENh
bGNPcGVyYXRvciBvcCkKIAogICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4g
bmV3Q2hpbGRyZW47CiAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pIHsKLSAgICAg
ICAgaWYgKGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZCkgJiYgZG93bmNhc3Q8Q1NTQ2Fs
Y09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKS5jYWxjT3BlcmF0b3IoKSA9PSBvcCkgewotICAg
ICAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4o
Y2hpbGQuZ2V0KCkpLmNoaWxkcmVuKCk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNoaWxkVG9N
b3ZlIDogY2hpbGRyZW4pCi0gICAgICAgICAgICAgICAgbmV3Q2hpbGRyZW4uYXBwZW5kKFdURk1v
dmUoY2hpbGRUb01vdmUpKTsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIGlmIChpczxDU1NDYWxj
T3BlcmF0aW9uTm9kZT4oY2hpbGQpICYmIGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihj
aGlsZC5nZXQoKSkuY2FsY09wZXJhdG9yKCkgPT0gb3ApCisgICAgICAgICAgICBuZXdDaGlsZHJl
bi5hcHBlbmRWZWN0b3IoZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgp
KS5jaGlsZHJlbigpKTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgbmV3Q2hpbGRyZW4uYXBw
ZW5kKFdURk1vdmUoY2hpbGQpKTsKICAgICB9Ci0gICAgCiAgICAgbmV3Q2hpbGRyZW4uc2hyaW5r
VG9GaXQoKTsKICAgICBtX2NoaWxkcmVuID0gV1RGTW92ZShuZXdDaGlsZHJlbik7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NU3RyaW5nTGlzdC5oIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RPTVN0cmluZ0xpc3QuaAppbmRleCA2OWNiMmQ3ZjkzMmUwMGEyNjVlMDhkOGZmM2Ix
Y2I1MGMxMjc3Y2U1Li4zMTcyYjMzNmY1YjUyNDVlNzEwNWI5MDVmNzU2NzRmYzE3N2MxMDVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NU3RyaW5nTGlzdC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdMaXN0LmgKQEAgLTQwLDkgKzQwLDE0IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRE9NU3RyaW5nTGlzdCk7CiAgICAgfQogCisg
ICAgc3RhdGljIFJlZjxET01TdHJpbmdMaXN0PiBjcmVhdGUoVmVjdG9yPFN0cmluZz4mJiBzdHJp
bmdzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRE9NU3RyaW5nTGlzdChX
VEZNb3ZlKHN0cmluZ3MpKSk7CisgICAgfQorCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJpbmdzLmlzRW1wdHkoKTsgfQogICAgIHZvaWQgY2xlYXIoKSB7IG1fc3RyaW5n
cy5jbGVhcigpOyB9Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBzdHJpbmcpIHsgbV9z
dHJpbmdzLmFwcGVuZChzdHJpbmcpOyB9CisgICAgdm9pZCBhcHBlbmQoU3RyaW5nJiYgc3RyaW5n
KSB7IG1fc3RyaW5ncy5hcHBlbmQoV1RGTW92ZShzdHJpbmcpKTsgfQogICAgIHZvaWQgc29ydCgp
OwogCiAgICAgLy8gSW1wbGVtZW50cyB0aGUgSURMLgpAQCAtNTMsNyArNTgsMTAgQEAgcHVibGlj
OgogICAgIG9wZXJhdG9yIGNvbnN0IFZlY3RvcjxTdHJpbmc+JigpIGNvbnN0IHsgcmV0dXJuIG1f
c3RyaW5nczsgfQogCiBwcml2YXRlOgotICAgIERPTVN0cmluZ0xpc3QoKSB7IH0KKyAgICBET01T
dHJpbmdMaXN0KCkgPSBkZWZhdWx0OworICAgIGV4cGxpY2l0IERPTVN0cmluZ0xpc3QoVmVjdG9y
PFN0cmluZz4mJiBzdHJpbmdzKQorICAgICAgICA6IG1fc3RyaW5ncyhXVEZNb3ZlKHN0cmluZ3Mp
KQorICAgIHsgfQogCiAgICAgVmVjdG9yPFN0cmluZz4gbV9zdHJpbmdzOwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFBhdGguY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50UGF0aC5jcHAKaW5kZXggNDZmYjY0NWUwNTMzNzU4MWY5ZmEzNDUyMzAzYTJmZTM4MGY0
NmMwNi4uZWNiY2MwMGYzNmYwNzZlMzIwYjZhZDE2YWQxZDlhMGJmMDM4ZTI3OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50UGF0aC5jcHAKQEAgLTI3NCwxMSArMjc0LDExIEBAIFZlY3RvcjxFdmVudFRhcmdl
dCo+IEV2ZW50UGF0aDo6Y29tcHV0ZVBhdGhVbmNsb3NlZFRvVGFyZ2V0KGNvbnN0IEV2ZW50VGFy
Z2V0JiB0CiAKIEV2ZW50UGF0aDo6RXZlbnRQYXRoKGNvbnN0IFZlY3RvcjxFdmVudFRhcmdldCo+
JiB0YXJnZXRzKQogewotICAgIGZvciAoYXV0byogdGFyZ2V0IDogdGFyZ2V0cykgeworICAgIG1f
cGF0aCA9IHRhcmdldHMubWFwKFsmXShhdXRvKiB0YXJnZXQpIHsKICAgICAgICAgQVNTRVJUKHRh
cmdldCk7CiAgICAgICAgIEFTU0VSVCghaXM8Tm9kZT4odGFyZ2V0KSk7Ci0gICAgICAgIG1fcGF0
aC5hcHBlbmQoRXZlbnRDb250ZXh0IHsgRXZlbnRDb250ZXh0OjpUeXBlOjpOb3JtYWwsIG51bGxw
dHIsIHRhcmdldCwgKnRhcmdldHMuYmVnaW4oKSwgMCB9KTsKLSAgICB9CisgICAgICAgIHJldHVy
biBFdmVudENvbnRleHQgeyBFdmVudENvbnRleHQ6OlR5cGU6Ok5vcm1hbCwgbnVsbHB0ciwgdGFy
Z2V0LCAqdGFyZ2V0cy5iZWdpbigpLCAwIH07CisgICAgfSk7CiB9CiAKIHN0YXRpYyBOb2RlKiBt
b3ZlT3V0T2ZBbGxTaGFkb3dSb290cyhOb2RlJiBzdGFydGluZ05vZGUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRnVsbHNjcmVlbk1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0Z1bGxzY3JlZW5NYW5hZ2VyLmNwcAppbmRleCBlY2U0OGU0MjY3OTcwOTVkYTcwOWEwNGRh
Njg2YTRmZTBiYzI5MjhjLi4wZTliYjk0NDFjMzdkZjUzZDQ3MTgzOGNjYzFhYWRjYjYzNzc4YmVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRnVsbHNjcmVlbk1hbmFnZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9GdWxsc2NyZWVuTWFuYWdlci5jcHAKQEAgLTI2NSw5ICsy
NjUsOCBAQCB2b2lkIEZ1bGxzY3JlZW5NYW5hZ2VyOjpjYW5jZWxGdWxsc2NyZWVuKCkKIAogICAg
IC8vIFRvIGFjaGlldmUgdGhhdCBhaW0sIHJlbW92ZSBhbGwgdGhlIGVsZW1lbnRzIGZyb20gdGhl
IHRvcCBkb2N1bWVudCdzIHN0YWNrIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IGJlZm9yZQogICAgIC8v
IGNhbGxpbmcgd2Via2l0RXhpdEZ1bGxzY3JlZW4oKToKLSAgICBWZWN0b3I8UmVmUHRyPEVsZW1l
bnQ+PiByZXBsYWNlbWVudEZ1bGxzY3JlZW5FbGVtZW50U3RhY2s7Ci0gICAgcmVwbGFjZW1lbnRG
dWxsc2NyZWVuRWxlbWVudFN0YWNrLmFwcGVuZCh0b3BEb2N1bWVudC5mdWxsc2NyZWVuTWFuYWdl
cigpLmZ1bGxzY3JlZW5FbGVtZW50KCkpOwotICAgIHRvcERvY3VtZW50LmZ1bGxzY3JlZW5NYW5h
Z2VyKCkubV9mdWxsc2NyZWVuRWxlbWVudFN0YWNrLnN3YXAocmVwbGFjZW1lbnRGdWxsc2NyZWVu
RWxlbWVudFN0YWNrKTsKKyAgICBSZWZQdHIgZnVsbHNjcmVuRWxlbWVudCA9IHRvcERvY3VtZW50
LmZ1bGxzY3JlZW5NYW5hZ2VyKCkuZnVsbHNjcmVlbkVsZW1lbnQoKTsKKyAgICB0b3BEb2N1bWVu
dC5mdWxsc2NyZWVuTWFuYWdlcigpLm1fZnVsbHNjcmVlbkVsZW1lbnRTdGFjayA9IHsgV1RGTW92
ZShmdWxsc2NyZW5FbGVtZW50KSB9OwogCiAgICAgdG9wRG9jdW1lbnQuZnVsbHNjcmVlbk1hbmFn
ZXIoKS5leGl0RnVsbHNjcmVlbigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0xvYWRhYmxlU2NyaXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJsZVNjcmlwdC5j
cHAKaW5kZXggMWJkZGUxZWI1ZDZhMDdmMTE3Mzg5Yjk5Yzc1ZWNiMDFiNjBmODgwOS4uNDFmNDNj
ZTY2ODUwMzBlZDlkMzlkZjA1YjlmYzkyM2IxMjM5NWRlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0xvYWRhYmxlU2NyaXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTG9h
ZGFibGVTY3JpcHQuY3BwCkBAIC01MSwxMiArNTEsOCBAQCB2b2lkIExvYWRhYmxlU2NyaXB0Ojpy
ZW1vdmVDbGllbnQoTG9hZGFibGVTY3JpcHRDbGllbnQmIGNsaWVudCkKIAogdm9pZCBMb2FkYWJs
ZVNjcmlwdDo6bm90aWZ5Q2xpZW50RmluaXNoZWQoKQogewotICAgIFJlZlB0cjxMb2FkYWJsZVNj
cmlwdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLQotICAgIFZlY3RvcjxMb2FkYWJsZVNjcmlwdENs
aWVudCo+IHZlY3RvcjsKLSAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX2NsaWVudHMpCi0gICAgICAg
IHZlY3Rvci5hcHBlbmQocGFpci5rZXkpOwotICAgIGZvciAoYXV0byYgY2xpZW50IDogdmVjdG9y
KQorICAgIFJlZiBwcm90ZWN0ZWRUaGlzIHsgKnRoaXMgfTsKKyAgICBmb3IgKGF1dG8mIGNsaWVu
dCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMudmFsdWVzKCkpKQogICAgICAgICBjbGllbnQtPm5v
dGlmeUZpbmlzaGVkKCp0aGlzKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L1JhZGlvQnV0dG9uR3JvdXBzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdy
b3Vwcy5jcHAKaW5kZXggNTBmNDYzMGY4OWVjODk1ZGYxY2U1YWI4ZWQ1ODE4OWI3YWZiZjY2Mi4u
MTIyNjNlMjU2ZWU1NmE0NTJjMzIyODEyNWNhZGQ1ZjE3MGY0NWYwZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwCkBAIC01OSw5ICs1OSw3IEBAIGlubGluZSBib29s
IFJhZGlvQnV0dG9uR3JvdXA6OmlzVmFsaWQoKSBjb25zdAogCiBWZWN0b3I8UmVmPEhUTUxJbnB1
dEVsZW1lbnQ+PiBSYWRpb0J1dHRvbkdyb3VwOjptZW1iZXJzKCkgY29uc3QKIHsKLSAgICBWZWN0
b3I8UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PiBzb3J0ZWRNZW1iZXJzOwotICAgIGZvciAoYXV0byYg
bWVtYmVyIDogbV9tZW1iZXJzKQotICAgICAgICBzb3J0ZWRNZW1iZXJzLmFwcGVuZChtZW1iZXIp
OworICAgIGF1dG8gc29ydGVkTWVtYmVycyA9IGNvcHlUb1ZlY3Rvck9mPFJlZjxIVE1MSW5wdXRF
bGVtZW50Pj4obV9tZW1iZXJzKTsKICAgICBzdGQ6OnNvcnQoc29ydGVkTWVtYmVycy5iZWdpbigp
LCBzb3J0ZWRNZW1iZXJzLmVuZCgpLCBbXShhdXRvJiBhLCBhdXRvJiBiKSB7CiAgICAgICAgIHJl
dHVybiBpc19sdCh0cmVlT3JkZXI8Q29tcG9zZWRUcmVlPihhLCBiKSk7CiAgICAgfSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0RpcmVjdG9yeUZpbGVMaXN0Q3JlYXRvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RpcmVjdG9yeUZpbGVMaXN0Q3JlYXRvci5jcHAKaW5kZXgg
OWQzZGExODUzYzNhNjMyMGZlYjMxOTc1MTYyZTQzNWFlOTNmZmRkMS4uOTg1ZjdhNjJmMGMxZjM5
NzU1ODJlYjNmOWI5ODk3NTE1NjE1NjY3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9EaXJlY3RvcnlGaWxlTGlzdENyZWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
RGlyZWN0b3J5RmlsZUxpc3RDcmVhdG9yLmNwcApAQCAtODYsMTMgKzg2LDExIEBAIHN0YXRpYyBW
ZWN0b3I8RmlsZUluZm9ybWF0aW9uPiBnYXRoZXJGaWxlSW5mb3JtYXRpb24oY29uc3QgVmVjdG9y
PEZpbGVDaG9vc2VyRmlsCiBzdGF0aWMgUmVmPEZpbGVMaXN0PiB0b0ZpbGVMaXN0KERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgVmVjdG9yPEZpbGVJbmZvcm1hdGlvbj4mIGZpbGVzKQogewogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgVmVjdG9yPFJlZjxGaWxlPj4gZmlsZU9iamVj
dHM7Ci0gICAgZm9yIChhdXRvJiBmaWxlIDogZmlsZXMpIHsKKyAgICBhdXRvIGZpbGVPYmplY3Rz
ID0gZmlsZXMubWFwKFtkb2N1bWVudF0oYXV0byYgZmlsZSkgewogICAgICAgICBpZiAoZmlsZS5y
ZWxhdGl2ZVBhdGguaXNOdWxsKCkpCi0gICAgICAgICAgICBmaWxlT2JqZWN0cy5hcHBlbmQoRmls
ZTo6Y3JlYXRlKGRvY3VtZW50LCBmaWxlLnBhdGgsIHsgfSwgZmlsZS5kaXNwbGF5TmFtZSkpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBmaWxlT2JqZWN0cy5hcHBlbmQoRmlsZTo6Y3JlYXRl
V2l0aFJlbGF0aXZlUGF0aChkb2N1bWVudCwgZmlsZS5wYXRoLCBmaWxlLnJlbGF0aXZlUGF0aCkp
OwotICAgIH0KKyAgICAgICAgICAgIHJldHVybiBGaWxlOjpjcmVhdGUoZG9jdW1lbnQsIGZpbGUu
cGF0aCwgeyB9LCBmaWxlLmRpc3BsYXlOYW1lKTsKKyAgICAgICAgcmV0dXJuIEZpbGU6OmNyZWF0
ZVdpdGhSZWxhdGl2ZVBhdGgoZG9jdW1lbnQsIGZpbGUucGF0aCwgZmlsZS5yZWxhdGl2ZVBhdGgp
OworICAgIH0pOwogICAgIHJldHVybiBGaWxlTGlzdDo6Y3JlYXRlKFdURk1vdmUoZmlsZU9iamVj
dHMpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAppbmRl
eCBjNGIwODRkMmRlNzFmZDMxOWZlOGMwNjliNDVmZjdmY2NjZWRlNWVjLi43MmFmZTA0ZTA3Zjg5
YzhjMjRhZjNmOGI4Y2FkMzhjZTI5NmE4ZDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxT
ZWxlY3RFbGVtZW50LmNwcApAQCAtNjM0LDkgKzYzNCw5IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1l
bnQ6OnNhdmVMYXN0U2VsZWN0aW9uKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1f
bGFzdE9uQ2hhbmdlU2VsZWN0aW9uLmNsZWFyKCk7Ci0gICAgZm9yIChhdXRvJiBlbGVtZW50IDog
bGlzdEl0ZW1zKCkpCi0gICAgICAgIG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uLmFwcGVuZChpczxI
VE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50
PigqZWxlbWVudCkuc2VsZWN0ZWQoKSk7CisgICAgbV9sYXN0T25DaGFuZ2VTZWxlY3Rpb24gPSBs
aXN0SXRlbXMoKS5tYXAoW10oYXV0byYgZWxlbWVudCkgeworICAgICAgICByZXR1cm4gaXM8SFRN
TE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4o
KmVsZW1lbnQpLnNlbGVjdGVkKCk7CisgICAgfSk7CiB9CiAKIHZvaWQgSFRNTFNlbGVjdEVsZW1l
bnQ6OnNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KGludCBpbmRleCkKQEAgLTY0NSwxMCAr
NjQ1LDkgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9y
SW5kZXgoaW50IGluZGV4KQogCiAgICAgLy8gQ2FjaGUgdGhlIHNlbGVjdGlvbiBzdGF0ZSBzbyB3
ZSBjYW4gcmVzdG9yZSB0aGUgb2xkIHNlbGVjdGlvbiBhcyB0aGUgbmV3CiAgICAgLy8gc2VsZWN0
aW9uIHBpdm90cyBhcm91bmQgdGhpcyBhbmNob3IgaW5kZXguCi0gICAgbV9jYWNoZWRTdGF0ZUZv
ckFjdGl2ZVNlbGVjdGlvbi5jbGVhcigpOwotCi0gICAgZm9yIChhdXRvJiBlbGVtZW50IDogbGlz
dEl0ZW1zKCkpCi0gICAgICAgIG1fY2FjaGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rpb24uYXBwZW5k
KGlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnQ+KCplbGVtZW50KS5zZWxlY3RlZCgpKTsKKyAgICBtX2NhY2hlZFN0YXRlRm9yQWN0aXZl
U2VsZWN0aW9uID0gbGlzdEl0ZW1zKCkubWFwKFtdKGF1dG8mIGVsZW1lbnQpIHsKKyAgICAgICAg
cmV0dXJuIGlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9w
dGlvbkVsZW1lbnQ+KCplbGVtZW50KS5zZWxlY3RlZCgpOworICAgIH0pOwogfQogCiB2b2lkIEhU
TUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3Rpb25FbmRJbmRleChpbnQgaW5kZXgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCmluZGV4IDA1YjI3Mzc5ZjJkOTIxOTQ0ODkzMmM0
NmFiMzNiMmVmMDMxYWZjNmEuLjU5YmZjNmUwZjFlNTkwNDNkY2M1YmJkYTJkMjJhYWUzNjVhNjEz
MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCkBAIC0xMTIsMTAgKzExMiw5IEBA
IHZvaWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCwKIAogVmVjdG9yPHN0ZDo6b3B0aW9uYWw8SW1hZ2VCaXRt
YXBCYWNraW5nPj4gSW1hZ2VCaXRtYXA6OmRldGFjaEJpdG1hcHMoVmVjdG9yPFJlZlB0cjxJbWFn
ZUJpdG1hcD4+JiYgYml0bWFwcykKIHsKLSAgICBWZWN0b3I8c3RkOjpvcHRpb25hbDxJbWFnZUJp
dG1hcEJhY2tpbmc+PiBidWZmZXJzOwotICAgIGZvciAoYXV0byYgYml0bWFwIDogYml0bWFwcykK
LSAgICAgICAgYnVmZmVycy5hcHBlbmQoYml0bWFwLT50YWtlSW1hZ2VCaXRtYXBCYWNraW5nKCkp
OwotICAgIHJldHVybiBidWZmZXJzOworICAgIHJldHVybiBXVEY6Om1hcChXVEZNb3ZlKGJpdG1h
cHMpLCBbXShhdXRvJiYgYml0bWFwKSB7CisgICAgICAgIHJldHVybiBiaXRtYXAtPnRha2VJbWFn
ZUJpdG1hcEJhY2tpbmcoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRl
UHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBJ
bWFnZUJpdG1hcDo6U291cmNlJiYgc291cmNlLCBJbWFnZUJpdG1hcE9wdGlvbnMmJiBvcHRpb25z
LCBpbnQgc3gsIGludCBzeSwgaW50IHN3LCBpbnQgc2gsIEltYWdlQml0bWFwOjpQcm9taXNlJiYg
cHJvbWlzZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKaW5kZXggNjExNDYwMjc3ZjY2NzlhNDkxZTBmOTgzMTc3
OTczMDA3ZWJiZGRjNi4uZjczMzY0ZjM4NjBjMjZiOTM2NjE4YzRmN2UxYTE3ODI1ZThkNTAxMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5jcHAKQEAgLTMwMjEsOSArMzAyMSw4IEBAIHN0ZDo6b3B0aW9uYWw8VmVj
dG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+PiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRB
dHRhY2hlCiAgICAgfTsKICAgICBWZWN0b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4gc2hhZGVyT2Jq
ZWN0czsKICAgICBmb3IgKGF1dG8gc2hhZGVyVHlwZSA6IHNoYWRlclR5cGVzKSB7Ci0gICAgICAg
IFJlZlB0cjxXZWJHTFNoYWRlcj4gc2hhZGVyID0gcHJvZ3JhbS5nZXRBdHRhY2hlZFNoYWRlcihz
aGFkZXJUeXBlKTsKLSAgICAgICAgaWYgKHNoYWRlcikKLSAgICAgICAgICAgIHNoYWRlck9iamVj
dHMuYXBwZW5kKHNoYWRlcik7CisgICAgICAgIGlmIChSZWZQdHIgc2hhZGVyID0gcHJvZ3JhbS5n
ZXRBdHRhY2hlZFNoYWRlcihzaGFkZXJUeXBlKSkKKyAgICAgICAgICAgIHNoYWRlck9iamVjdHMu
YXBwZW5kKFdURk1vdmUoc2hhZGVyKSk7CiAgICAgfQogICAgIHJldHVybiBzaGFkZXJPYmplY3Rz
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFy
c2V0UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNl
dFBhcnNlci5jcHAKaW5kZXggOGFjYjY4YWY0NTUxYTM4Yjc5OWM3MTNhYTc1ZGMwZjc5MTkwMDRi
ZS4uMGE1ZWQ3OGY0NThmOTliNmJjN2ZjMzcxZGY5NGNmZTkyNWE0ZDQ4MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCkBA
IC04NSwxMiArODUsMTEgQEAgc3RhdGljIFN0cmluZ1ZpZXcgZXh0cmFjdENoYXJzZXQoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKIAogYm9vbCBIVE1MTWV0YUNoYXJzZXRQYXJzZXI6OnByb2Nlc3NNZXRh
KEhUTUxUb2tlbiYgdG9rZW4pCiB7Ci0gICAgQXR0cmlidXRlTGlzdCBhdHRyaWJ1dGVzOwotICAg
IGZvciAoYXV0byYgYXR0cmlidXRlIDogdG9rZW4uYXR0cmlidXRlcygpKSB7CisgICAgYXV0byBh
dHRyaWJ1dGVzID0gdG9rZW4uYXR0cmlidXRlcygpLm1hcChbXShhdXRvJiBhdHRyaWJ1dGUpIHsK
ICAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUgPSBTdHJpbmdJbXBsOjpjcmVhdGU4Qml0SWZQ
b3NzaWJsZShhdHRyaWJ1dGUubmFtZSk7CiAgICAgICAgIFN0cmluZyBhdHRyaWJ1dGVWYWx1ZSA9
IFN0cmluZ0ltcGw6OmNyZWF0ZThCaXRJZlBvc3NpYmxlKGF0dHJpYnV0ZS52YWx1ZSk7Ci0gICAg
ICAgIGF0dHJpYnV0ZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGF0dHJpYnV0ZU5hbWUsIGF0dHJp
YnV0ZVZhbHVlKSk7Ci0gICAgfQorICAgICAgICByZXR1cm4gc3RkOjpwYWlyIHsgV1RGTW92ZShh
dHRyaWJ1dGVOYW1lKSwgV1RGTW92ZShhdHRyaWJ1dGVWYWx1ZSkgfTsKKyAgICB9KTsKIAogICAg
IG1fZW5jb2RpbmcgPSBlbmNvZGluZ0Zyb21NZXRhQXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKICAg
ICByZXR1cm4gbV9lbmNvZGluZy5pc1ZhbGlkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAppbmRleCA2YjcxYmVmODFhN2UyODQ3MWVlZmQ3YzUz
MTUyYThhMGE4MmQyZGI1Li5hMWYxNjdjYjA4M2M5OTg0MzYxODM0MTE4MDI5ZjI4NWU0MWMwMDA1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAK
QEAgLTIyMDAsMTEgKzIyMDAsMTAgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDaGFy
YWN0ZXIoQXRvbUhUTUxUb2tlbiYmIHRva2VuKQogLy8gRnJvbSB0aGUgc3RyaW5nIDQwODk5NjEw
MTAsIGNyZWF0ZXMgYSBsaW5rIG9mIHRoZSBmb3JtIDxhIGhyZWY9InRlbDo0MDg5OTYxMDEwIj40
MDg5OTYxMDEwPC9hPiBhbmQgaW5zZXJ0cyBpdC4KIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjppbnNl
cnRQaG9uZU51bWJlckxpbmsoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgVmVjdG9yPEF0
dHJpYnV0ZT4gYXR0cmlidXRlczsKLSAgICBhdHRyaWJ1dGVzLmFwcGVuZChBdHRyaWJ1dGUoSFRN
TE5hbWVzOjpocmVmQXR0ciwgbWFrZVN0cmluZygidGVsOiJfcywgc3RyaW5nKSkpOworICAgIEF0
dHJpYnV0ZSBhdHRyaWJ1dGUoSFRNTE5hbWVzOjpocmVmQXR0ciwgbWFrZVN0cmluZygidGVsOiJf
cywgc3RyaW5nKSk7CiAKICAgICBjb25zdCBBdG9tU3RyaW5nJiBhVGFnTG9jYWxOYW1lID0gYVRh
Zy0+bG9jYWxOYW1lKCk7Ci0gICAgQXRvbUhUTUxUb2tlbiBhU3RhcnRUb2tlbihIVE1MVG9rZW46
OlN0YXJ0VGFnLCBhVGFnTG9jYWxOYW1lLCBXVEZNb3ZlKGF0dHJpYnV0ZXMpKTsKKyAgICBBdG9t
SFRNTFRva2VuIGFTdGFydFRva2VuKEhUTUxUb2tlbjo6U3RhcnRUYWcsIGFUYWdMb2NhbE5hbWUs
IHsgV1RGTW92ZShhdHRyaWJ1dGUpIH0pOwogICAgIEF0b21IVE1MVG9rZW4gYUVuZFRva2VuKEhU
TUxUb2tlbjo6RW5kVGFnLCBhVGFnTG9jYWxOYW1lKTsKIAogICAgIHByb2Nlc3NTdGFydFRhZyhX
VEZNb3ZlKGFTdGFydFRva2VuKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
VGV4dERvY3VtZW50UGFyc2VyLmNwcAppbmRleCA0ZGE5NTlmNDBmZTllYTMzNzQ3Y2QyMzg4Y2Vi
NzlmNmQ3MmRiN2VkLi40NzA2ZjI2ZTg0NDA5ZWU4MTNjZDEzYmM1ZjRlMGFjY2Y2NzRhODY3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNlci5j
cHAKQEAgLTUxLDkgKzUxLDggQEAgdm9pZCBUZXh0RG9jdW1lbnRQYXJzZXI6Omluc2VydEZha2VQ
cmVFbGVtZW50KCkKICAgICAvLyBXZSBjcmVhdGUgYSBmYWtlIHRva2VuIGFuZCBnaXZlIGl0IHRv
IHRoZSB0cmVlIGJ1aWxkZXIgcmF0aGVyIHRoYW4KICAgICAvLyBzZW5kaW5nIGZha2UgYnl0ZXMg
dGhyb3VnaCB0aGUgZnJvbnQtZW5kIG9mIHRoZSBwYXJzZXIgdG8gYXZvaWQKICAgICAvLyBkaXN0
cnViaW5nIHRoZSBsaW5lL2NvbHVtbiBudW1iZXIgY2FsY3VsYXRpb25zLgotICAgIFZlY3RvcjxB
dHRyaWJ1dGU+IGF0dHJpYnV0ZXM7Ci0gICAgYXR0cmlidXRlcy5hcHBlbmQoQXR0cmlidXRlKHN0
eWxlQXR0ciwgIndvcmQtd3JhcDogYnJlYWstd29yZDsgd2hpdGUtc3BhY2U6IHByZS13cmFwOyIp
KTsKLSAgICBBdG9tSFRNTFRva2VuIGZha2VQcmUoSFRNTFRva2VuOjpTdGFydFRhZywgcHJlVGFn
LT5sb2NhbE5hbWUoKSwgV1RGTW92ZShhdHRyaWJ1dGVzKSk7CisgICAgQXR0cmlidXRlIGF0dHJp
YnV0ZShzdHlsZUF0dHIsICJ3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IHdoaXRlLXNwYWNlOiBwcmUt
d3JhcDsiKTsKKyAgICBBdG9tSFRNTFRva2VuIGZha2VQcmUoSFRNTFRva2VuOjpTdGFydFRhZywg
cHJlVGFnLT5sb2NhbE5hbWUoKSwgeyBXVEZNb3ZlKGF0dHJpYnV0ZSkgfSk7CiAgICAgdHJlZUJ1
aWxkZXIoKS5jb25zdHJ1Y3RUcmVlKFdURk1vdmUoZmFrZVByZSkpOwogCiAgICAgLy8gTm9ybWFs
bHkgd2Ugd291bGQgc2tpcCB0aGUgZmlyc3QgXG4gYWZ0ZXIgYSA8cHJlPiBlbGVtZW50LCBidXQg
d2UgZG9uJ3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Db250ZW50RmlsdGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Db250ZW50RmlsdGVyLmNwcAppbmRleCA0MTll
MzJmMzk4MmY2NzJhZjY2MzBmYTVlMGM2MjVjNWNiN2IyMjNmLi40ZTM1NDQ1NGFhYmEzNGU0ZmJl
YTQxNWQ0MWZmOGU5MmJmNDQxNDVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Q29udGVudEZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0NvbnRlbnRGaWx0
ZXIuY3BwCkBAIC02NywxMSArNjcsOSBAQCBWZWN0b3I8Q29udGVudEZpbHRlcjo6VHlwZT4mIENv
bnRlbnRGaWx0ZXI6OnR5cGVzKCkKIAogc3RkOjp1bmlxdWVfcHRyPENvbnRlbnRGaWx0ZXI+IENv
bnRlbnRGaWx0ZXI6OmNyZWF0ZShDb250ZW50RmlsdGVyQ2xpZW50JiBjbGllbnQpCiB7Ci0gICAg
Q29udGFpbmVyIGZpbHRlcnM7Ci0gICAgZm9yIChhdXRvJiB0eXBlIDogdHlwZXMoKSkgewotICAg
ICAgICBhdXRvIGZpbHRlciA9IHR5cGUuY3JlYXRlKCk7Ci0gICAgICAgIGZpbHRlcnMuYXBwZW5k
KFdURk1vdmUoZmlsdGVyKSk7Ci0gICAgfQorICAgIGF1dG8gZmlsdGVycyA9IHR5cGVzKCkubWFw
KFtdKGF1dG8mIHR5cGUpIHsKKyAgICAgICAgcmV0dXJuIHR5cGUuY3JlYXRlKCk7CisgICAgfSk7
CiAKICAgICBpZiAoZmlsdGVycy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVNYW5pZmVzdFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZU1hbmlmZXN0UGFyc2VyLmNwcAppbmRleCBiODdkZDgzNTA2MDdjMjRiZTI1
NmUzNDQxYmVkMmQzNzY3ZTA5NTUyLi40YTExNDQyNWUxMTZkMmM0MmQxOTAzOTIzZWRmODg2Mzgz
ZDhmMDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGlj
YXRpb25DYWNoZU1hbmlmZXN0UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0UGFyc2VyLmNwcApAQCAtMTgwLDcgKzE4
MCw3IEBAIHN0ZDo6b3B0aW9uYWw8QXBwbGljYXRpb25DYWNoZU1hbmlmZXN0PiBwYXJzZUFwcGxp
Y2F0aW9uQ2FjaGVNYW5pZmVzdChjb25zdCBVUkwmCiAgICAgICAgICAgICAgICAgaWYgKCFlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKHVybC5wcm90b2NvbCgpLCBtYW5pZmVzdFVSTC5wcm90b2NvbCgp
KSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgICAgICBtYW5p
ZmVzdC5vbmxpbmVBbGxvd2VkVVJMcy5hcHBlbmQodXJsKTsKKyAgICAgICAgICAgICAgICBtYW5p
ZmVzdC5vbmxpbmVBbGxvd2VkVVJMcy5hcHBlbmQoV1RGTW92ZSh1cmwpKTsKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1Jlc2l6ZU9ic2VydmVyLmNwcAppbmRleCA5M2RhMWE0NTYwNGU0NTJhNzc1OTNlMThkMWY0
NzMzNjM0OTk0MzY3Li40ZmZkNjlkMDM0NDEwOWI0N2FmYjVlNTE5N2FhM2ZkZmQ0OTdkZWQ2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6ZU9ic2VydmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6ZU9ic2VydmVyLmNwcApAQCAtMTI1LDExICsxMjUsMTAg
QEAgc2l6ZV90IFJlc2l6ZU9ic2VydmVyOjpnYXRoZXJPYnNlcnZhdGlvbnMoc2l6ZV90IGRlZXBl
clRoYW4pCiAKIHZvaWQgUmVzaXplT2JzZXJ2ZXI6OmRlbGl2ZXJPYnNlcnZhdGlvbnMoKQogewot
ICAgIFZlY3RvcjxSZWY8UmVzaXplT2JzZXJ2ZXJFbnRyeT4+IGVudHJpZXM7Ci0gICAgZm9yIChj
b25zdCBhdXRvJiBvYnNlcnZhdGlvbiA6IG1fYWN0aXZlT2JzZXJ2YXRpb25zKSB7CisgICAgYXV0
byBlbnRyaWVzID0gbV9hY3RpdmVPYnNlcnZhdGlvbnMubWFwKFtdKGF1dG8mIG9ic2VydmF0aW9u
KSB7CiAgICAgICAgIEFTU0VSVChvYnNlcnZhdGlvbi0+dGFyZ2V0KCkpOwotICAgICAgICBlbnRy
aWVzLmFwcGVuZChSZXNpemVPYnNlcnZlckVudHJ5OjpjcmVhdGUob2JzZXJ2YXRpb24tPnRhcmdl
dCgpLCBvYnNlcnZhdGlvbi0+Y29tcHV0ZUNvbnRlbnRSZWN0KCksIG9ic2VydmF0aW9uLT5ib3Jk
ZXJCb3hTaXplKCksIG9ic2VydmF0aW9uLT5jb250ZW50Qm94U2l6ZSgpKSk7Ci0gICAgfQorICAg
ICAgICByZXR1cm4gUmVzaXplT2JzZXJ2ZXJFbnRyeTo6Y3JlYXRlKG9ic2VydmF0aW9uLT50YXJn
ZXQoKSwgb2JzZXJ2YXRpb24tPmNvbXB1dGVDb250ZW50UmVjdCgpLCBvYnNlcnZhdGlvbi0+Ym9y
ZGVyQm94U2l6ZSgpLCBvYnNlcnZhdGlvbi0+Y29udGVudEJveFNpemUoKSk7CisgICAgfSk7CiAg
ICAgbV9hY3RpdmVPYnNlcnZhdGlvbnMuY2xlYXIoKTsKICAgICBhdXRvIGFjdGl2ZU9ic2VydmF0
aW9uVGFyZ2V0cyA9IHN0ZDo6ZXhjaGFuZ2UobV9hY3RpdmVPYnNlcnZhdGlvblRhcmdldHMsIHsg
fSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCmluZGV4IDM4N2Q1MTlhZTUx
NzJkNjgwYTViMjg4NDNiYmU4ZmY5OTZjNmIzMzUuLmNhNWZiZTYzY2NmNmNkYjk4YWY4NWVkNTky
OWExMzAzOGQ2OWJmYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGlj
YXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcApAQCAt
MzYxLDE3ICszNjEsMTYgQEAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZUluZGljYXRvcihUZXh0SW5k
aWNhdG9yRGF0YSYgZGF0YSwgRnJhbWUmIGZyYW1lLCBjb25zdCBTaW0KICAgICAgICAgdGV4dEJv
dW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcy51bml0ZSh0ZXh0UmVjdEluUm9vdFZpZXdD
b29yZGluYXRlcyk7CiAgICAgfQogCi0gICAgVmVjdG9yPEZsb2F0UmVjdD4gdGV4dFJlY3RzSW5C
b3VuZGluZ1JlY3RDb29yZGluYXRlczsKLSAgICBmb3IgKGF1dG8gcmVjdCA6IHRleHRSZWN0c0lu
Um9vdFZpZXdDb29yZGluYXRlcykgeworICAgIGF1dG8gdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RD
b29yZGluYXRlcyA9IHRleHRSZWN0c0luUm9vdFZpZXdDb29yZGluYXRlcy5tYXAoWyZdKGF1dG8g
cmVjdCkgewogICAgICAgICByZWN0Lm1vdmVCeSgtdGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdD
b29yZGluYXRlcy5sb2NhdGlvbigpKTsKLSAgICAgICAgdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RD
b29yZGluYXRlcy5hcHBlbmQocmVjdCk7Ci0gICAgfQorICAgICAgICByZXR1cm4gcmVjdDsKKyAg
ICB9KTsKIAogICAgIC8vIFN0b3JlIHRoZSBzZWxlY3Rpb24gcmVjdCBpbiB3aW5kb3cgY29vcmRp
bmF0ZXMsIHRvIGJlIHVzZWQgc3Vic2VxdWVudGx5CiAgICAgLy8gdG8gZGV0ZXJtaW5lIGlmIHRo
ZSBpbmRpY2F0b3IgYW5kIHNlbGVjdGlvbiBzdGlsbCBwcmVjaXNlbHkgb3ZlcmxhcC4KICAgICBk
YXRhLnNlbGVjdGlvblJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBmcmFtZS52aWV3KCktPmNv
bnRlbnRzVG9Sb290VmlldyhlbmNsb3NpbmdJbnRSZWN0KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbkJvdW5kcyhGcmFtZVNlbGVjdGlvbjo6Q2xpcFRvVmlzaWJsZUNvbnRlbnQ6Ok5vKSkpOwog
ICAgIGRhdGEudGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9IHRleHRCb3Vu
ZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXM7Ci0gICAgZGF0YS50ZXh0UmVjdHNJbkJvdW5k
aW5nUmVjdENvb3JkaW5hdGVzID0gdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlczsK
KyAgICBkYXRhLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMgPSBXVEZNb3ZlKHRl
eHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMpOwogCiAgICAgcmV0dXJuIHRha2VTbmFw
c2hvdHMoZGF0YSwgZnJhbWUsIGVuY2xvc2luZ0ludFJlY3QodGV4dEJvdW5kaW5nUmVjdEluRG9j
dW1lbnRDb29yZGluYXRlcyksIGNsaXBwZWRUZXh0UmVjdHNJbkRvY3VtZW50Q29vcmRpbmF0ZXMp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5
UG9saWN5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGlj
eS5jcHAKaW5kZXggNTJmNjIwMTIyYjg1Yzc1MDNlN2RhNmE2ODM1YmYzNzU2MTQ5NjdmNC4uOGEy
YmE0Y2ZmYTI2ZGNjYmJkMWU3NWVlNTAxMTNhODY2YmU1YTJmYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCkBAIC0zNDMsMTggKzM0
MywxMiBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsUG9saWNpZXNBbGxvdyhWaW9s
YXRlZERpcmVjdGl2ZUNhbGxiYWNrJiYgY2FsbGJhYwogc3RhdGljIFZlY3RvcjxSZXNvdXJjZUNy
eXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlU3ViUmVzb3VyY2VJbnRlZ3JpdHlJbnRvRGlnZXN0cyhj
b25zdCBTdHJpbmcmIHN1YlJlc291cmNlSW50ZWdyaXR5KQogewogICAgIGF1dG8gZW5jb2RlZERp
Z2VzdHMgPSBwYXJzZUludGVncml0eU1ldGFkYXRhKHN1YlJlc291cmNlSW50ZWdyaXR5KTsKLSAg
ICBWZWN0b3I8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBkZWNvZGVkRGlnZXN0czsKLQot
ICAgIGlmICghZW5jb2RlZERpZ2VzdHMuaGFzX3ZhbHVlKCkpCisgICAgaWYgKCFlbmNvZGVkRGln
ZXN0cykKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgZW5jb2Rl
ZERpZ2VzdCA6IGVuY29kZWREaWdlc3RzLnZhbHVlKCkpIHsKLSAgICAgICAgYXV0byBkZWNvZGVk
RGlnZXN0ID0gZGVjb2RlRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChlbmNvZGVk
RGlnZXN0KTsKLSAgICAgICAgaWYgKGRlY29kZWREaWdlc3QuaGFzX3ZhbHVlKCkpCi0gICAgICAg
ICAgICBkZWNvZGVkRGlnZXN0cy5hcHBlbmQoZGVjb2RlZERpZ2VzdC52YWx1ZSgpKTsKLSAgICAg
ICAgfQotCi0gICAgcmV0dXJuIGRlY29kZWREaWdlc3RzOworICAgIHJldHVybiBXVEY6OmNvbXBh
Y3RNYXAoKmVuY29kZWREaWdlc3RzLCBbXShhdXRvJiBlbmNvZGVkRGlnZXN0KSB7CisgICAgICAg
IHJldHVybiBkZWNvZGVFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0KGVuY29kZWRE
aWdlc3QpOworICAgIH0pOwogfQogCiBzdGF0aWMgVmVjdG9yPENvbnRlbnRTZWN1cml0eVBvbGlj
eUhhc2g+IGdlbmVyYXRlSGFzaGVzRm9yQ29udGVudChjb25zdCBTdHJpbmdWaWV3IGNvbnRlbnQs
IE9wdGlvblNldDxDb250ZW50U2VjdXJpdHlQb2xpY3lIYXNoQWxnb3JpdGhtPiBhbGdvcml0aG1z
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwCmluZGV4IDhlNGVjZTcwNTNh
ZThlOThlZmVjY2ZlNzY1MmY4NmNkMjk3NDA0MDQuLjc4NDI4YzRhYmQzMWU5OWIxMGFhZTQ4ZmJl
Y2MyYTViOGQ5ZjU4ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVD
aG9vc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHAK
QEAgLTUzLDkgKzUzLDcgQEAgdm9pZCBGaWxlQ2hvb3Nlcjo6aW52YWxpZGF0ZSgpCiAKIHZvaWQg
RmlsZUNob29zZXI6OmNob29zZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKIHsKLSAgICBW
ZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXM7Ci0gICAgZmlsZW5hbWVzLmFwcGVuZChmaWxlbmFtZSk7
Ci0gICAgY2hvb3NlRmlsZXMoZmlsZW5hbWVzKTsKKyAgICBjaG9vc2VGaWxlcyh7IGZpbGVuYW1l
IH0pOwogfQogCiB2b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlcyhjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgZmlsZW5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVwbGFjZW1lbnROYW1lcykK
QEAgLTY4LDkgKzY2LDEwIEBAIHZvaWQgRmlsZUNob29zZXI6OmNob29zZUZpbGVzKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJbmZvPiBmaWxlczsKKyAgICBmaWxlcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZpbGVuYW1lcy5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwLCBzaXplID0gZmlsZW5hbWVzLnNpemUoKTsgaSA8IHNpemU7ICsraSkKLSAgICAgICAg
ZmlsZXMuYXBwZW5kKHsgZmlsZW5hbWVzW2ldLCBpIDwgcmVwbGFjZW1lbnROYW1lcy5zaXplKCkg
PyByZXBsYWNlbWVudE5hbWVzW2ldIDogbnVsbFN0cmluZygpLCB7IH0gfSk7Ci0gICAgbV9jbGll
bnQtPmZpbGVzQ2hvc2VuKGZpbGVzKTsKKyAgICAgICAgZmlsZXMudW5jaGVja2VkQXBwZW5kKHsg
ZmlsZW5hbWVzW2ldLCBpIDwgcmVwbGFjZW1lbnROYW1lcy5zaXplKCkgPyByZXBsYWNlbWVudE5h
bWVzW2ldIDogbnVsbFN0cmluZygpLCB7IH0gfSk7CisgICAgbV9jbGllbnQtPmZpbGVzQ2hvc2Vu
KFdURk1vdmUoZmlsZXMpKTsKIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC04Niwx
OSArODUsMTkgQEAgdm9pZCBGaWxlQ2hvb3Nlcjo6Y2hvb3NlTWVkaWFGaWxlcyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBjb25zdCBTdHJpbmcKICAgICBpZiAoIW1fY2xpZW50KQog
ICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4gZmlsZXM7
Ci0gICAgZm9yIChhdXRvJiBmaWxlbmFtZSA6IGZpbGVuYW1lcykKLSAgICAgICAgZmlsZXMuYXBw
ZW5kKHsgZmlsZW5hbWUsIHsgfSwgeyB9IH0pOwotICAgIG1fY2xpZW50LT5maWxlc0Nob3Nlbihm
aWxlcywgZGlzcGxheVN0cmluZywgaWNvbik7CisgICAgYXV0byBmaWxlcyA9IGZpbGVuYW1lcy5t
YXAoW10oYXV0byYgZmlsZW5hbWUpIHsKKyAgICAgICAgcmV0dXJuIEZpbGVDaG9vc2VyRmlsZUlu
Zm8geyBmaWxlbmFtZSwgeyB9LCB7IH0gfTsKKyAgICB9KTsKKyAgICBtX2NsaWVudC0+ZmlsZXND
aG9zZW4oV1RGTW92ZShmaWxlcyksIGRpc3BsYXlTdHJpbmcsIGljb24pOwogfQogCiAjZW5kaWYK
IAogdm9pZCBGaWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZXMoY29uc3QgVmVjdG9yPEZpbGVDaG9vc2Vy
RmlsZUluZm8+JiBmaWxlcykKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiBwYXRoczsKLSAgICBmb3Ig
KGF1dG8mIGZpbGUgOiBmaWxlcykKLSAgICAgICAgcGF0aHMuYXBwZW5kKGZpbGUucGF0aCk7Cisg
ICAgYXV0byBwYXRocyA9IGZpbGVzLm1hcChbXShhdXRvJiBmaWxlKSB7CisgICAgICAgIHJldHVy
biBmaWxlLnBhdGg7CisgICAgfSk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyBpbmVsZWdhbnQu
IFdlIHNob3VsZCBub3QgYmUgbG9va2luZyBhdCBzZXR0aW5ncyBoZXJlLgogICAgIGlmIChtX3Nl
dHRpbmdzLnNlbGVjdGVkRmlsZXMgPT0gcGF0aHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hh
cmVkQnVmZmVyLmNwcAppbmRleCBkMDlmMTA1MmEwZjMxZWU5NzA2MTEwMTNiMzkzNWZiNTMwOTU1
MDk2Li5mODdiNmE0ZjYzYjI2YTIxODgyMDZlOTM4YWE1ODU3OTdhYjM5NWU0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKQEAgLTIwNiw5ICsyMDYsNyBAQCB2b2lk
IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25zdCBGcmFnbWVudGVkU2hhcmVkQnVm
ZmVyJiBkYXRhKQogdm9pZCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyOjphcHBlbmQoY29uc3QgdWlu
dDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBBU1NFUlQoIW1fY29udGlndW91cyk7
Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvcjsKLSAgICB2ZWN0b3IuYXBwZW5kKGRhdGEsIGxl
bmd0aCk7Ci0gICAgbV9zZWdtZW50cy5hcHBlbmQoeyBtX3NpemUsIERhdGFTZWdtZW50OjpjcmVh
dGUoV1RGTW92ZSh2ZWN0b3IpKSB9KTsKKyAgICBtX3NlZ21lbnRzLmFwcGVuZCh7IG1fc2l6ZSwg
RGF0YVNlZ21lbnQ6OmNyZWF0ZShWZWN0b3IgeyBkYXRhLCBsZW5ndGggfSkgfSk7CiAgICAgbV9z
aXplICs9IGxlbmd0aDsKICAgICBBU1NFUlQoaW50ZXJuYWxseUNvbnNpc3RlbnQoKSk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRTYWZlRGF0YUJ1ZmZlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkU2FmZURhdGFCdWZmZXIuaAppbmRleCBk
Mzk3ZDIyN2RmYzUzNGFkMGNmNTg3MDJiZTFjYTU4MDI0OTlhMGJiLi42NjI3ZmViY2I3ZjRlMWRh
ZDgxMTFlMTRhOTEyMTQ0ODgxNjZhOTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9UaHJlYWRTYWZlRGF0YUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1RocmVhZFNhZmVEYXRhQnVmZmVyLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNl
CiAKKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZD
b3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0xNDMsNCArMTQ0LDE1IEBA
IGJvb2wgVGhyZWFkU2FmZURhdGFCdWZmZXI6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBUaHJl
YWRTYWZlRGF0YUJ1ZmZlciYgcmVzdWx0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2lubGluZSB2
b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIGJ1ZmZl
cikKK3sKKyAgICBhdXRvKiBkYXRhID0gYnVmZmVyLmRhdGEoKTsKKyAgICBpZiAoIWRhdGEpIHsK
KyAgICAgICAgYWRkKGhhc2hlciwgdHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
YWRkKGhhc2hlciwgZmFsc2UpOworICAgIGFkZChoYXNoZXIsICpkYXRhKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuY3BwCmluZGV4IDFjZjM5Y2FjZjMwMjQ1MDhl
OGQxMmU4NjQ1YzUwODY3NzIxOTQzNWIuLmQ4YzM0ZmEzNzY5NTA3MjUyNTQ3NDE4ZmU1ZTg0NGZm
ZTJjMzA4N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlv
RFNQS2VybmVsUHJvY2Vzc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHAKQEAgLTU2LDggKzU2LDkgQEAgdm9pZCBBdWRp
b0RTUEtlcm5lbFByb2Nlc3Nvcjo6aW5pdGlhbGl6ZSgpCiAgICAgICAgIERpc2FibGVNYWxsb2NS
ZXN0cmljdGlvbnNGb3JDdXJyZW50VGhyZWFkU2NvcGUgZGlzYWJsZU1hbGxvY1Jlc3RyaWN0aW9u
czsKIAogICAgICAgICAvLyBDcmVhdGUgcHJvY2Vzc2luZyBrZXJuZWxzLCBvbmUgcGVyIGNoYW5u
ZWwuCisgICAgICAgIG1fa2VybmVscy5yZXNlcnZlQ2FwYWNpdHkobV9rZXJuZWxzLmNhcGFjaXR5
KCkgKyBudW1iZXJPZkNoYW5uZWxzKCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtYmVyT2ZDaGFubmVscygpOyArK2kpCi0gICAgICAgICAgICBtX2tlcm5lbHMuYXBwZW5k
KGNyZWF0ZUtlcm5lbCgpKTsKKyAgICAgICAgICAgIG1fa2VybmVscy51bmNoZWNrZWRBcHBlbmQo
Y3JlYXRlS2VybmVsKCkpOwogICAgIH0KICAgICBtX2luaXRpYWxpemVkID0gdHJ1ZTsKICAgICBt
X2hhc0p1c3RSZXNldCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9BdWRpb1Jlc2FtcGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9BdWRpb1Jlc2FtcGxlci5jcHAKaW5kZXggZGU1MDhjYzZlZjRhNWIwMWJkNGViMjI0NzQ1Yjdl
ZjI4Mjg0MGY4ZS4uNzQ2OWNlNGRlM2YzYzE4ODg5MjhmNTQ5N2QxMmNlNTZkYjZlNmQyZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9SZXNhbXBsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUmVzYW1wbGVyLmNwcApA
QCAtNDIsOCArNDIsOSBAQCBBdWRpb1Jlc2FtcGxlcjo6QXVkaW9SZXNhbXBsZXIoKQogCiBBdWRp
b1Jlc2FtcGxlcjo6QXVkaW9SZXNhbXBsZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscykKIHsK
KyAgICBtX2tlcm5lbHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkNoYW5uZWxzKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKQotICAg
ICAgICBtX2tlcm5lbHMuYXBwZW5kKG1ha2VVbmlxdWU8QXVkaW9SZXNhbXBsZXJLZXJuZWw+KHRo
aXMpKTsKKyAgICAgICAgbV9rZXJuZWxzLnVuY2hlY2tlZEFwcGVuZChtYWtlVW5pcXVlPEF1ZGlv
UmVzYW1wbGVyS2VybmVsPih0aGlzKSk7CiAKICAgICBtX3NvdXJjZUJ1cyA9IEF1ZGlvQnVzOjpj
cmVhdGUobnVtYmVyT2ZDaGFubmVscywgMCwgZmFsc2UpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAK
aW5kZXggOWYzMTgxY2ZiYjQwMjI3Nzc5OTYyM2I5YmZkZGNkZDQ5NTljMDBiMC4uNTAzMmVlYTdh
NzJiMjNkZTJhMjAyYmMxNTM2MDM1Y2JhZWQwMTYwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwCkBA
IC02MSw4ICs2MSw5IEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpzZXROdW1iZXJP
ZkNoYW5uZWxzKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIG1fcHJlRGVsYXlCdWZmZXJzLmNsZWFyKCk7CisgICAgbV9wcmVEZWxheUJ1ZmZlcnMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkNoYW5uZWxzKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKQotICAgICAgICBtX3ByZURlbGF5QnVm
ZmVycy5hcHBlbmQobWFrZVVuaXF1ZTxBdWRpb0Zsb2F0QXJyYXk+KE1heFByZURlbGF5RnJhbWVz
KSk7CisgICAgICAgIG1fcHJlRGVsYXlCdWZmZXJzLnVuY2hlY2tlZEFwcGVuZChtYWtlVW5pcXVl
PEF1ZGlvRmxvYXRBcnJheT4oTWF4UHJlRGVsYXlGcmFtZXMpKTsKIH0KIAogdm9pZCBEeW5hbWlj
c0NvbXByZXNzb3JLZXJuZWw6OnNldFByZURlbGF5VGltZShmbG9hdCBwcmVEZWxheVRpbWUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NdWx0aUNoYW5uZWxSZXNh
bXBsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTXVsdGlDaGFubmVsUmVz
YW1wbGVyLmNwcAppbmRleCBiOTY2ZmEwNmNkMzBlYjM0ZGY3MWZjZmJkZTdjMTY1ODIzMTExMjFm
Li4xNzAyM2I2NDI2MWJkZmQzNzVlZTA5ZmUyOTZiM2JkYTg4MjdmMmU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NdWx0aUNoYW5uZWxSZXNhbXBsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL011bHRpQ2hhbm5lbFJlc2FtcGxlci5j
cHAKQEAgLTUzLDggKzUzLDkgQEAgTXVsdGlDaGFubmVsUmVzYW1wbGVyOjpNdWx0aUNoYW5uZWxS
ZXNhbXBsZXIoZG91YmxlIHNjYWxlRmFjdG9yLCB1bnNpZ25lZCBudW1iZXIKICAgICB9CiAKICAg
ICAvLyBDcmVhdGUgZWFjaCBjaGFubmVsJ3MgcmVzYW1wbGVyLgorICAgIG1fa2VybmVscy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG51bWJlck9mQ2hhbm5lbHMpOwogICAgIGZvciAodW5zaWduZWQg
Y2hhbm5lbEluZGV4ID0gMDsgY2hhbm5lbEluZGV4IDwgbnVtYmVyT2ZDaGFubmVsczsgKytjaGFu
bmVsSW5kZXgpCi0gICAgICAgIG1fa2VybmVscy5hcHBlbmQobWFrZVVuaXF1ZTxTaW5jUmVzYW1w
bGVyPihzY2FsZUZhY3RvciwgcmVxdWVzdEZyYW1lcywgc3RkOjpiaW5kKCZNdWx0aUNoYW5uZWxS
ZXNhbXBsZXI6OnByb3ZpZGVJbnB1dEZvckNoYW5uZWwsIHRoaXMsIHN0ZDo6cGxhY2Vob2xkZXJz
OjpfMSwgc3RkOjpwbGFjZWhvbGRlcnM6Ol8yLCBjaGFubmVsSW5kZXgpKSk7CisgICAgICAgIG1f
a2VybmVscy51bmNoZWNrZWRBcHBlbmQobWFrZVVuaXF1ZTxTaW5jUmVzYW1wbGVyPihzY2FsZUZh
Y3RvciwgcmVxdWVzdEZyYW1lcywgc3RkOjpiaW5kKCZNdWx0aUNoYW5uZWxSZXNhbXBsZXI6OnBy
b3ZpZGVJbnB1dEZvckNoYW5uZWwsIHRoaXMsIHN0ZDo6cGxhY2Vob2xkZXJzOjpfMSwgc3RkOjpw
bGFjZWhvbGRlcnM6Ol8yLCBjaGFubmVsSW5kZXgpKSk7CiB9CiAKIE11bHRpQ2hhbm5lbFJlc2Ft
cGxlcjo6fk11bHRpQ2hhbm5lbFJlc2FtcGxlcigpID0gZGVmYXVsdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9k
ZWxNZWRpYUVsZW1lbnQubW0KaW5kZXggMDVlYTIxMTFlYjVkNDUzY2IyOGQ4ZTc3ZWYzY2JmNWYz
NTY3MTk4OS4uZmEzMGFmZGUzYjFlMWUzNmU4NjFhZWNiZDlmYmU4YzdmMDkwMzU2ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0KQEAgLTUzNCwxNCArNTM0LDEyIEBAIFZlY3Rv
cjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6
OmxlZ2libGVNZWRpYVNlbGVjCiAgICAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBsZWdp
YmxlT3B0aW9uczsKIAogICAgIGlmICghbV9tZWRpYUVsZW1lbnQgfHwgIW1fbWVkaWFFbGVtZW50
LT5kb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGxlZ2libGVPcHRpb25zOworICAg
ICAgICByZXR1cm4geyB9OwogCiAgICAgYXV0byYgY2FwdGlvblByZWZlcmVuY2VzID0gbV9tZWRp
YUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT5ncm91cCgpLmVuc3VyZUNhcHRpb25QcmVmZXJl
bmNlcygpOwotCi0gICAgZm9yIChhdXRvJiB0cmFjayA6IG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUp
Ci0gICAgICAgIGxlZ2libGVPcHRpb25zLmFwcGVuZChjYXB0aW9uUHJlZmVyZW5jZXMubWVkaWFT
ZWxlY3Rpb25PcHRpb25Gb3JUcmFjayh0cmFjay5nZXQoKSkpOwotCi0gICAgcmV0dXJuIGxlZ2li
bGVPcHRpb25zOworICAgIHJldHVybiBtX2xlZ2libGVUcmFja3NGb3JNZW51Lm1hcChbJl0oYXV0
byYgdHJhY2spIHsKKyAgICAgICAgcmV0dXJuIGNhcHRpb25QcmVmZXJlbmNlcy5tZWRpYVNlbGVj
dGlvbk9wdGlvbkZvclRyYWNrKHRyYWNrLmdldCgpKTsKKyAgICB9KTsKIH0KIAogdWludDY0X3Qg
UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRpYVNlbGVjdGVkSW5k
ZXgoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9t
YWMvRHVhbHNob2NrM0hJREdhbWVwYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2Ft
ZXBhZC9tYWMvRHVhbHNob2NrM0hJREdhbWVwYWQuY3BwCmluZGV4IDZjNDBlOGI4ODkyODczZmYw
NzIwNjE4Y2ZlODM5NjRjODBlYzM0MWUuLmMwZjUxODFiYzQ0YjFiZGNlYmE2OWI4Y2I2YTM0YTll
YTEyN2RmNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFj
L0R1YWxzaG9jazNISURHYW1lcGFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
YW1lcGFkL21hYy9EdWFsc2hvY2szSElER2FtZXBhZC5jcHAKQEAgLTQzLDEyICs0MywxMCBAQCBE
dWFsc2hvY2szSElER2FtZXBhZDo6RHVhbHNob2NrM0hJREdhbWVwYWQoSElERGV2aWNlJiYgZGV2
aWNlLCB1bnNpZ25lZCBpbmRleCkKIAogICAgIG1fbWFwcGluZyA9IHN0YW5kYXJkR2FtZXBhZE1h
cHBpbmdTdHJpbmcoKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZTdGFu
ZGFyZEdhbWVwYWRCdXR0b25zV2l0aEhvbWVCdXR0b247ICsraSkKLSAgICAgICAgbV9idXR0b25W
YWx1ZXMuYXBwZW5kKDAuMCk7CisgICAgbV9idXR0b25WYWx1ZXMgPSBWZWN0b3IobnVtYmVyT2ZT
dGFuZGFyZEdhbWVwYWRCdXR0b25zV2l0aEhvbWVCdXR0b24sIFNoYXJlZEdhbWVwYWRWYWx1ZSB7
IDAuMCB9KTsKIAotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYXhpc0NvdW50ID0gNDsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGF4aXNDb3VudDsgKytpKQotICAgICAgICBtX2F4aXNWYWx1
ZXMuYXBwZW5kKDAuMCk7CisgICAgY29uc3RleHByIHNpemVfdCBheGlzQ291bnQgPSA0OworICAg
IG1fYXhpc1ZhbHVlcyA9IFZlY3RvcihheGlzQ291bnQsIFNoYXJlZEdhbWVwYWRWYWx1ZSB7IDAu
MCB9KTsKIAogICAgIGF1dG8gaW5wdXRFbGVtZW50cyA9IGhpZERldmljZSgpLnVuaXF1ZUlucHV0
RWxlbWVudHNJbkRldmljZVRyZWVPcmRlcigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9Mb2dpdGVjaEdhbWVwYWQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvTG9naXRlY2hHYW1lcGFkLmNwcAppbmRleCA2NzE0M2Zi
OTk1YmEyYzNlNjhkZDIxMWQxNjViZTYyMGNlZjc4OWVmLi5mZTRjZWRjNTFkNjM5ZmI3YjFhZTk5
MzNlNWMyNjk2YzM5NzhhOGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
YW1lcGFkL21hYy9Mb2dpdGVjaEdhbWVwYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dhbWVwYWQvbWFjL0xvZ2l0ZWNoR2FtZXBhZC5jcHAKQEAgLTQzLDEyICs0MywxMCBAQCBM
b2dpdGVjaEdhbWVwYWQ6OkxvZ2l0ZWNoR2FtZXBhZChISUREZXZpY2UmJiBkZXZpY2UsIHVuc2ln
bmVkIGluZGV4KQogCiAgICAgbV9tYXBwaW5nID0gc3RhbmRhcmRHYW1lcGFkTWFwcGluZ1N0cmlu
ZygpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlN0YW5kYXJkR2FtZXBh
ZEJ1dHRvbnNXaXRob3V0SG9tZUJ1dHRvbjsgKytpKQotICAgICAgICBtX2J1dHRvblZhbHVlcy5h
cHBlbmQoMC4wKTsKKyAgICBtX2J1dHRvblZhbHVlcyA9IFZlY3RvcihudW1iZXJPZlN0YW5kYXJk
R2FtZXBhZEJ1dHRvbnNXaXRob3V0SG9tZUJ1dHRvbiwgU2hhcmVkR2FtZXBhZFZhbHVlIHsgMC4w
IH0pOwogCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBheGlzQ291bnQgPSA0OwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYXhpc0NvdW50OyArK2kpCi0gICAgICAgIG1fYXhpc1ZhbHVlcy5h
cHBlbmQoMC4wKTsKKyAgICBjb25zdGV4cHIgc2l6ZV90IGF4aXNDb3VudCA9IDQ7CisgICAgbV9h
eGlzVmFsdWVzID0gVmVjdG9yKGF4aXNDb3VudCwgU2hhcmVkR2FtZXBhZFZhbHVlIHsgMC4wIH0p
OwogCiAgICAgYXV0byBpbnB1dEVsZW1lbnRzID0gaGlkRGV2aWNlKCkudW5pcXVlSW5wdXRFbGVt
ZW50c0luRGV2aWNlVHJlZU9yZGVyKCk7CiAKQEAgLTU5LDExICs1NywxMiBAQCBMb2dpdGVjaEdh
bWVwYWQ6OkxvZ2l0ZWNoR2FtZXBhZChISUREZXZpY2UmJiBkZXZpY2UsIHVuc2lnbmVkIGluZGV4
KQogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGlucHV0RWxlbWVudHMpIHsKICAgICAgICAgc3dp
dGNoIChlbGVtZW50LmZ1bGxVc2FnZSgpKSB7CiAgICAgICAgIGNhc2UgaGlkSGF0c3dpdGNoRnVs
bFVzYWdlOiB7Ci0gICAgICAgICAgICBWZWN0b3I8U2hhcmVkR2FtZXBhZFZhbHVlPiBoYXRzd2l0
Y2hWYWx1ZXM7Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFs
dWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyVG9wXSk7Ci0gICAgICAg
ICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBh
ZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyUmlnaHRdKTsKLSAgICAgICAgICAgIGhhdHN3aXRjaFZh
bHVlcy5hcHBlbmQobV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVm
dENsdXN0ZXJCb3R0b21dKTsKLSAgICAgICAgICAgIGhhdHN3aXRjaFZhbHVlcy5hcHBlbmQobV9i
dXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJMZWZ0XSk7
CisgICAgICAgICAgICBhdXRvIGhhdHN3aXRjaFZhbHVlcyA9IFZlY3RvciB7CisgICAgICAgICAg
ICAgICAgbV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0
ZXJUb3BdLAorICAgICAgICAgICAgICAgIG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1
dHRvblJvbGU6OkxlZnRDbHVzdGVyUmlnaHRdLAorICAgICAgICAgICAgICAgIG1fYnV0dG9uVmFs
dWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyQm90dG9tXSwKKyAgICAg
ICAgICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0
Q2x1c3RlckxlZnRdCisgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICBtX2VsZW1lbnRNYXAu
c2V0KGVsZW1lbnQuY29va2llKCksIG1ha2VVbmlxdWU8SElER2FtZXBhZEhhdHN3aXRjaD4oZWxl
bWVudCwgV1RGTW92ZShoYXRzd2l0Y2hWYWx1ZXMpKSk7CiAgICAgICAgICAgICBicmVhazsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL1N0YWRpYUhJREdh
bWVwYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvU3RhZGlhSElE
R2FtZXBhZC5jcHAKaW5kZXggMGE5NGU1NjIzM2EyMDQ0NjQxZjEwMGYwNTY0NGQ1NzVhZGJjOWU3
My4uNDIxNTkyN2M0OTRjM2VlZTZjMTI1MGFiNTU2NDFmYTcyYTIyMDY5NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvU3RhZGlhSElER2FtZXBhZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvU3RhZGlhSElER2FtZXBh
ZC5jcHAKQEAgLTQxLDEyICs0MSwxMCBAQCBTdGFkaWFISURHYW1lcGFkOjpTdGFkaWFISURHYW1l
cGFkKEhJRERldmljZSYmIGRldmljZSwgdW5zaWduZWQgaW5kZXgpCiAKICAgICBtX21hcHBpbmcg
PSBzdGFuZGFyZEdhbWVwYWRNYXBwaW5nU3RyaW5nKCk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IDE5OyArK2kpCi0gICAgICAgIG1fYnV0dG9uVmFsdWVzLmFwcGVuZCgwLjApOworICAg
IG1fYnV0dG9uVmFsdWVzID0gVmVjdG9yKDE5LCBTaGFyZWRHYW1lcGFkVmFsdWUgeyAwLjAgfSk7
CiAKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF4aXNDb3VudCA9IDQ7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBheGlzQ291bnQ7ICsraSkKLSAgICAgICAgbV9heGlzVmFsdWVzLmFwcGVu
ZCgwLjApOworICAgIGNvbnN0ZXhwciBzaXplX3QgYXhpc0NvdW50ID0gNDsKKyAgICBtX2F4aXNW
YWx1ZXMgPSBWZWN0b3IoYXhpc0NvdW50LCBTaGFyZWRHYW1lcGFkVmFsdWUgeyAwLjAgfSk7CiAK
ICAgICBhdXRvIGlucHV0RWxlbWVudHMgPSBoaWREZXZpY2UoKS51bmlxdWVJbnB1dEVsZW1lbnRz
SW5EZXZpY2VUcmVlT3JkZXIoKTsKIApAQCAtNzAsMTEgKzY4LDEyIEBAIFN0YWRpYUhJREdhbWVw
YWQ6OlN0YWRpYUhJREdhbWVwYWQoSElERGV2aWNlJiYgZGV2aWNlLCB1bnNpZ25lZCBpbmRleCkK
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgaGlkSGF0c3dpdGNoRnVsbFVzYWdl
OiB7Ci0gICAgICAgICAgICBWZWN0b3I8U2hhcmVkR2FtZXBhZFZhbHVlPiBoYXRzd2l0Y2hWYWx1
ZXM7Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFsdWVzWyhz
aXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyVG9wXSk7Ci0gICAgICAgICAgICBo
YXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRv
blJvbGU6OkxlZnRDbHVzdGVyUmlnaHRdKTsKLSAgICAgICAgICAgIGhhdHN3aXRjaFZhbHVlcy5h
cHBlbmQobV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0
ZXJCb3R0b21dKTsKLSAgICAgICAgICAgIGhhdHN3aXRjaFZhbHVlcy5hcHBlbmQobV9idXR0b25W
YWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJMZWZ0XSk7CisgICAg
ICAgICAgICBhdXRvIGhhdHN3aXRjaFZhbHVlcyA9IFZlY3RvciB7CisgICAgICAgICAgICAgICAg
bV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJUb3Bd
LAorICAgICAgICAgICAgICAgIG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJv
bGU6OkxlZnRDbHVzdGVyUmlnaHRdLAorICAgICAgICAgICAgICAgIG1fYnV0dG9uVmFsdWVzWyhz
aXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyQm90dG9tXSwKKyAgICAgICAgICAg
ICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3Rl
ckxlZnRdCisgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICBtX2VsZW1lbnRNYXAuc2V0KGVs
ZW1lbnQuY29va2llKCksIG1ha2VVbmlxdWU8SElER2FtZXBhZEhhdHN3aXRjaD4oZWxlbWVudCwg
V1RGTW92ZShoYXRzd2l0Y2hWYWx1ZXMpKSk7CiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKaW5kZXgg
MWZlZTI5YWU1ZjcxOWM0ZTU1NGEyYzdlNzBjYjcwZjAxZjliMjAwMi4uNzI0ZmIxN2MzM2Y0YmNh
NDY4ODljODNiYzU1ODQ4ZmQ3MjcwYzMyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKQEAgLTc2MywxMSArNzYzLDkgQEAgdm9p
ZCBHcmFwaGljc0xheWVyOjphZGRSZXBhaW50UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlcGFpbnRS
ZWN0KQogICAgIEZsb2F0UmVjdCBsYXJnZXN0UmVwYWludFJlY3QoRmxvYXRQb2ludCgpLCBtX3Np
emUpOwogICAgIGxhcmdlc3RSZXBhaW50UmVjdC5pbnRlcnNlY3QocmVwYWludFJlY3QpOwogICAg
IFJlcGFpbnRNYXA6Oml0ZXJhdG9yIHJlcGFpbnRJdCA9IHJlcGFpbnRSZWN0TWFwKCkuZmluZCh0
aGlzKTsKLSAgICBpZiAocmVwYWludEl0ID09IHJlcGFpbnRSZWN0TWFwKCkuZW5kKCkpIHsKLSAg
ICAgICAgVmVjdG9yPEZsb2F0UmVjdD4gcmVwYWludFJlY3RzOwotICAgICAgICByZXBhaW50UmVj
dHMuYXBwZW5kKGxhcmdlc3RSZXBhaW50UmVjdCk7Ci0gICAgICAgIHJlcGFpbnRSZWN0TWFwKCku
c2V0KHRoaXMsIHJlcGFpbnRSZWN0cyk7Ci0gICAgfSBlbHNlIHsKKyAgICBpZiAocmVwYWludEl0
ID09IHJlcGFpbnRSZWN0TWFwKCkuZW5kKCkpCisgICAgICAgIHJlcGFpbnRSZWN0TWFwKCkuc2V0
KHRoaXMsIFZlY3RvciB7IFdURk1vdmUobGFyZ2VzdFJlcGFpbnRSZWN0KSB9KTsKKyAgICBlbHNl
IHsKICAgICAgICAgVmVjdG9yPEZsb2F0UmVjdD4mIHJlcGFpbnRSZWN0cyA9IHJlcGFpbnRJdC0+
dmFsdWU7CiAgICAgICAgIHJlcGFpbnRSZWN0cy5hcHBlbmQobGFyZ2VzdFJlcGFpbnRSZWN0KTsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRo
VXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGls
aXRpZXMuY3BwCmluZGV4IGI5Nzk5YTRkMTA2MWVkMjBhMWI1MGVkNTA2ODY1MWM1ZmVhNDY2YTQu
LjFkMDA0ZmMxMTRhY2I3MTViMTA1MjU5MDMzNmIwNmZjZWMzMDMwNTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuY3BwCkBAIC0yOTAs
MTcgKzI5MCwxNCBAQCBzdGF0aWMgVmVjdG9yPEZsb2F0UG9pbnRHcmFwaDo6UG9seWdvbj4gcG9s
eWdvbnNGb3JSZWN0KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JgogCiBWZWN0b3I8UGF0aD4gUGF0
aFV0aWxpdGllczo6cGF0aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3RzKGNvbnN0IFZlY3RvcjxGbG9h
dFJlY3Q+JiByZWN0cywgZmxvYXQgcmFkaXVzKQogewotICAgIFZlY3RvcjxQYXRoPiBwYXRoczsK
LQogICAgIGlmIChyZWN0cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBwYXRoczsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKIAogICAgIGlmIChyZWN0cy5zaXplKCkgPiAyMCkgewogICAgICAgICBQ
YXRoIHBhdGg7CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgcmVjdCA6IHJlY3RzKQogICAgICAg
ICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0LCBGbG9hdFNpemUocmFkaXVzLCByYWRpdXMp
KTsKLSAgICAgICAgcGF0aHMuYXBwZW5kKHBhdGgpOwotICAgICAgICByZXR1cm4gcGF0aHM7Cisg
ICAgICAgIHJldHVybiB7IFdURk1vdmUocGF0aCkgfTsKICAgICB9CiAKICAgICBGbG9hdFBvaW50
R3JhcGggZ3JhcGg7CkBAIC0zMDksMTAgKzMwNiwxMSBAQCBWZWN0b3I8UGF0aD4gUGF0aFV0aWxp
dGllczo6cGF0aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JgogICAgICAgICBQYXRoIHBhdGg7CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgcmVjdCA6IHJl
Y3RzKQogICAgICAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0LCBGbG9hdFNpemUocmFk
aXVzLCByYWRpdXMpKTsKLSAgICAgICAgcGF0aHMuYXBwZW5kKHBhdGgpOwotICAgICAgICByZXR1
cm4gcGF0aHM7CisgICAgICAgIHJldHVybiB7IFdURk1vdmUocGF0aCkgfTsKICAgICB9CiAKKyAg
ICBWZWN0b3I8UGF0aD4gcGF0aHM7CisgICAgcGF0aHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShw
b2x5cy5zaXplKCkpOwogICAgIGZvciAoYXV0byYgcG9seSA6IHBvbHlzKSB7CiAgICAgICAgIFBh
dGggcGF0aDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvbHkuc2l6ZSgpOyAr
K2kpIHsKQEAgLTM0NCw3ICszNDIsNyBAQCBWZWN0b3I8UGF0aD4gUGF0aFV0aWxpdGllczo6cGF0
aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JgogICAgICAg
ICAgICAgcGF0aC5hZGRBcmNUbygqZnJvbUVkZ2Uuc2Vjb25kLCAqdG9FZGdlLmZpcnN0ICsgdG9P
ZmZzZXQsIGNsYW1wZWRSYWRpdXMpOwogICAgICAgICB9CiAgICAgICAgIHBhdGguY2xvc2VTdWJw
YXRoKCk7Ci0gICAgICAgIHBhdGhzLmFwcGVuZChwYXRoKTsKKyAgICAgICAgcGF0aHMudW5jaGVj
a2VkQXBwZW5kKFdURk1vdmUocGF0aCkpOwogICAgIH0KICAgICByZXR1cm4gcGF0aHM7CiB9CkBA
IC01NDMsMTMgKzU0MSwxNCBAQCBQYXRoIFBhdGhVdGlsaXRpZXM6OnBhdGhXaXRoU2hyaW5rV3Jh
cHBlZFJlY3RzRm9yT3V0bGluZShjb25zdCBWZWN0b3I8RmxvYXRSZWN0PgogICAgIGJvdHRvbUxl
ZnRSYWRpdXMgPSBmaXJzdExpbmVSYWRpaS5ib3R0b21MZWZ0KCk7CiAgICAgdG9wUmlnaHRSYWRp
dXMgPSBsYXN0TGluZVJhZGlpLnRvcFJpZ2h0KCk7CiAgICAgYm90dG9tUmlnaHRSYWRpdXMgPSBs
YXN0TGluZVJhZGlpLmJvdHRvbVJpZ2h0KCk7Ci0gICAgVmVjdG9yPEZsb2F0UG9pbnQ+IGNvcm5l
cnM7CiAgICAgLy8gcGh5c2ljYWwgdG9wTGVmdC90b3BSaWdodC9ib3R0b21SaWdodC9ib3R0b21M
ZWZ0CiAgICAgYXV0byBpc0hvcml6b250YWwgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSh3cml0
aW5nTW9kZSk7Ci0gICAgY29ybmVycy5hcHBlbmQoZmlyc3RMaW5lUmVjdC5taW5YTWluWUNvcm5l
cigpKTsKLSAgICBjb3JuZXJzLmFwcGVuZChpc0hvcml6b250YWwgPyBsYXN0TGluZVJlY3QubWF4
WE1pbllDb3JuZXIoKSA6IGZpcnN0TGluZVJlY3QubWF4WE1pbllDb3JuZXIoKSk7Ci0gICAgY29y
bmVycy5hcHBlbmQobGFzdExpbmVSZWN0Lm1heFhNYXhZQ29ybmVyKCkpOwotICAgIGNvcm5lcnMu
YXBwZW5kKGlzSG9yaXpvbnRhbCA/IGZpcnN0TGluZVJlY3QubWluWE1heFlDb3JuZXIoKSA6IGxh
c3RMaW5lUmVjdC5taW5YTWF4WUNvcm5lcigpKTsKKyAgICBhdXRvIGNvcm5lcnMgPSBWZWN0b3I8
RmxvYXRQb2ludD46OmZyb20oCisgICAgICAgIGZpcnN0TGluZVJlY3QubWluWE1pbllDb3JuZXIo
KSwKKyAgICAgICAgaXNIb3Jpem9udGFsID8gbGFzdExpbmVSZWN0Lm1heFhNaW5ZQ29ybmVyKCkg
OiBmaXJzdExpbmVSZWN0Lm1heFhNaW5ZQ29ybmVyKCksCisgICAgICAgIGxhc3RMaW5lUmVjdC5t
YXhYTWF4WUNvcm5lcigpLAorICAgICAgICBpc0hvcml6b250YWwgPyBmaXJzdExpbmVSZWN0Lm1p
blhNYXhZQ29ybmVyKCkgOiBsYXN0TGluZVJlY3QubWluWE1heFlDb3JuZXIoKQorICAgICk7CiAK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9seS5zaXplKCk7ICsraSkgewogICAgICAg
ICBhdXRvIG1vdmVPckFkZExpbmVUbyA9IFtpLCAmcGF0aF0gKGNvbnN0IEZsb2F0UG9pbnQmIHN0
YXJ0UG9pbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
b3VyY2VCdWZmZXJQcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwCmluZGV4IDU0OTlmMzdhN2YzNjQ2YmQ1ZjM5NWE0OGIw
OWQ5NDExZDRjOWI2NjQuLjA0Y2JlNGQyN2YxOTBiN2IyN2I5Y2E3ZTk4YTljNDcxNzNkMmY4OWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZl
clByaXZhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJj
ZUJ1ZmZlclByaXZhdGUuY3BwCkBAIC0yMTYsMTAgKzIxNiw5IEBAIHZvaWQgU291cmNlQnVmZmVy
UHJpdmF0ZTo6YnVmZmVyZWRTYW1wbGVzRm9yVHJhY2tJZChjb25zdCBBdG9tU3RyaW5nJiB0cmFj
a0lkLCBDCiAgICAgaWYgKCF0cmFja0J1ZmZlcikKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
eyB9KTsKIAotICAgIFZlY3RvcjxTdHJpbmc+IHNhbXBsZURlc2NyaXB0aW9uczsKLSAgICBmb3Ig
KGF1dG8mIHBhaXIgOiB0cmFja0J1ZmZlci0+c2FtcGxlcy5kZWNvZGVPcmRlcigpKQotICAgICAg
ICBzYW1wbGVEZXNjcmlwdGlvbnMuYXBwZW5kKHRvU3RyaW5nKCpwYWlyLnNlY29uZCkpOwotCisg
ICAgYXV0byBzYW1wbGVEZXNjcmlwdGlvbnMgPSBXVEY6Om1hcCh0cmFja0J1ZmZlci0+c2FtcGxl
cy5kZWNvZGVPcmRlcigpLCBbXShhdXRvJiBlbnRyeSkgeworICAgICAgICByZXR1cm4gdG9TdHJp
bmcoKmVudHJ5LnNlY29uZCk7CisgICAgfSk7CiAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92
ZShzYW1wbGVEZXNjcmlwdGlvbnMpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxh
eVN0cmVhbWluZy5jcHAKaW5kZXggOGIwNGY5YmU5NmMzNmUwYTI2MjE4MGEyNWVhMzc0NTk2MmIz
ZDdkNS4uYzU0NjE0NjIzYjg3ZWMwODk2MWYxZDQ0MjBmOTYwMWYxNmE2YWI0ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQ
bGF5U3RyZWFtaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCkBAIC0yMDEsOSArMjAxLDcgQEAg
UmVmUHRyPEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWlu
Zzo6c2FuaXRpemVTa2QoY29uc3QgRnIKIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFJlZjxGcmFnbWVu
dGVkU2hhcmVkQnVmZmVyPj4+IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6ZXh0cmFjdEtl
eUlEc1NrZChjb25zdCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyJiBidWZmZXIpCiB7CiAgICAgLy8g
SW4gdGhlICdza2QnIHNjaGVtZSwgdGhlIGluaXQgZGF0YSBpcyB0aGUga2V5IElELgotICAgIFZl
Y3RvcjxSZWY8RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4+IGtleUlEczsKLSAgICBrZXlJRHMuYXBw
ZW5kKGJ1ZmZlci5jb3B5KCkpOwotICAgIHJldHVybiBrZXlJRHM7CisgICAgcmV0dXJuIFZlY3Rv
ciB7IGJ1ZmZlci5jb3B5KCkgfTsKIH0KIAogc3RhdGljIGNvbnN0IE1lbW9yeUNvbXBhY3RMb29r
dXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiYgdmFsaWRJbml0RGF0YVR5cGVzKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWly
UGxheVN0cmVhbWluZ0FWRk9iakMubW0KaW5kZXggZDYzNjEyZmFhMDUzNzBhMDM5NzNhMWUyZDU2
YzE4NjhhMmY5OTE2MC4uOTYyNWZhOTUwM2U3YmViYzcxOWZjNGIzN2E2M2MzOGQ3NDUwMzA4YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VG
YWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0KQEAgLTE0OTQsNyArMTQ5NCw3IEBAIHZvaWQgQ0RN
SW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjp1cGRhdGVLZXlTdGF0dXNl
cyhzdGQ6Om9wdGlvbmFsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX2tleVN0YXR1c2VzLnN3
YXAoa2V5U3RhdHVzZXMpOworICAgIG1fa2V5U3RhdHVzZXMgPSBXVEZNb3ZlKGtleVN0YXR1c2Vz
KTsKIAogICAgIG1faW5zdGFuY2UtPnNlc3Npb25LZXlTdGF0dXNlc0NoYW5nZWQoKnRoaXMpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvSW1hZ2VEZWNvZGVyQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVjb2RlckFWRk9iakMubW0KaW5kZXgg
NTYzYWYxOTI0ZDlhZjM1OWU5MzBlZjY0YmFlMzIzZmMwNDFkZTg3YS4uYWQ3ZjQ1MTAxYzA2YTE4
ODhjMDA4ZmFlZDRhOTE5MDU2MTM4MjkzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVyQVZGT2JqQy5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9J
bWFnZURlY29kZXJBVkZPYmpDLm1tCkBAIC01MzUsMTMgKzUzNSwxMCBAQCBWZWN0b3I8SW1hZ2VE
ZWNvZGVyOjpGcmFtZUluZm8+IEltYWdlRGVjb2RlckFWRk9iakM6OmZyYW1lSW5mb3MoKSBjb25z
dAogICAgIGlmIChtX3NhbXBsZURhdGEuZW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAot
ICAgIFZlY3RvcjxJbWFnZURlY29kZXI6OkZyYW1lSW5mbz4gaW5mb3M7Ci0gICAgZm9yIChhdXRv
JiBzYW1wbGUgOiBtX3NhbXBsZURhdGEucHJlc2VudGF0aW9uT3JkZXIoKSkgeworICAgIHJldHVy
biBXVEY6Om1hcChtX3NhbXBsZURhdGEucHJlc2VudGF0aW9uT3JkZXIoKSwgW10oYXV0byYgc2Ft
cGxlKSB7CiAgICAgICAgIGF1dG8qIGltYWdlU2FtcGxlID0gKEltYWdlRGVjb2RlckFWRk9iakNT
YW1wbGUqKXNhbXBsZS5zZWNvbmQuZ2V0KCk7Ci0gICAgICAgIGluZm9zLmFwcGVuZCh7IGltYWdl
U2FtcGxlLT5oYXNBbHBoYSgpLCBTZWNvbmRzKGltYWdlU2FtcGxlLT5kdXJhdGlvbigpLnRvRG91
YmxlKCkpfSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGluZm9zOworICAgICAgICByZXR1cm4gSW1h
Z2VEZWNvZGVyOjpGcmFtZUluZm8geyBpbWFnZVNhbXBsZS0+aGFzQWxwaGEoKSwgU2Vjb25kcyhp
bWFnZVNhbXBsZS0+ZHVyYXRpb24oKS50b0RvdWJsZSgpKSB9OworICAgIH0pOwogfQogCiBib29s
IEltYWdlRGVjb2RlckFWRk9iakM6OmZyYW1lQWxsb3dTdWJzYW1wbGluZ0F0SW5kZXgoc2l6ZV90
IGluZGV4KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUGFyc2VyQVZGT2JqQy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZl
clBhcnNlckFWRk9iakMubW0KaW5kZXggYWExNTg0MDRiMTBlNDQ0YWY2ZTVlZGRjOGRhZDZiYTk2
ZWQ1Y2IyMi4uZTYxYjE0N2Y2M2M1ZjQ1NzI3NWY2MDUwM2UzN2E4YjUyZDE4ZTNhMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
U291cmNlQnVmZmVyUGFyc2VyQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQYXJzZXJBVkZPYmpDLm1t
CkBAIC0yOTcsMTYgKzI5NywxNCBAQCB2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlckFWRk9iakM6OmRp
ZFBhcnNlU3RyZWFtRGF0YUFzQXNzZXQoQVZBc3NldCogYXNzZXQpCiAKICAgICAgICAgICAgIGlm
IChbdHJhY2sgaGFzTWVkaWFDaGFyYWN0ZXJpc3RpYzpBVk1lZGlhQ2hhcmFjdGVyaXN0aWNWaXN1
YWxdKSB7CiAgICAgICAgICAgICAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlh
bGl6YXRpb25TZWdtZW50OjpWaWRlb1RyYWNrSW5mb3JtYXRpb24gaW5mbzsKLSAgICAgICAgICAg
ICAgICBhdXRvIHZpZGVvVHJhY2sgPSBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
Qzo6Y3JlYXRlKHRyYWNrKTsKLSAgICAgICAgICAgICAgICBpbmZvLnRyYWNrID0gdmlkZW9UcmFj
ay5jb3B5UmVmKCk7CisgICAgICAgICAgICAgICAgaW5mby50cmFjayA9IFZpZGVvVHJhY2tQcml2
YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjcmVhdGUodHJhY2spOwogICAgICAgICAgICAgICAgIGlu
Zm8uZGVzY3JpcHRpb24gPSBNZWRpYURlc2NyaXB0aW9uQVZGT2JqQzo6Y3JlYXRlKHRyYWNrKTsK
LSAgICAgICAgICAgICAgICBzZWdtZW50LnZpZGVvVHJhY2tzLmFwcGVuZChpbmZvKTsKKyAgICAg
ICAgICAgICAgICBzZWdtZW50LnZpZGVvVHJhY2tzLmFwcGVuZChXVEZNb3ZlKGluZm8pKTsKICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoW3RyYWNrIGhhc01lZGlhQ2hhcmFjdGVyaXN0aWM6QVZNZWRp
YUNoYXJhY3RlcmlzdGljQXVkaWJsZV0pIHsKICAgICAgICAgICAgICAgICBTb3VyY2VCdWZmZXJQ
cml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQ6OkF1ZGlvVHJhY2tJbmZvcm1hdGlv
biBpbmZvOwotICAgICAgICAgICAgICAgIGF1dG8gYXVkaW9UcmFjayA9IEF1ZGlvVHJhY2tQcml2
YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjcmVhdGUodHJhY2spOwotICAgICAgICAgICAgICAgIGlu
Zm8udHJhY2sgPSBhdWRpb1RyYWNrLmNvcHlSZWYoKTsKKyAgICAgICAgICAgICAgICBpbmZvLnRy
YWNrID0gQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmNyZWF0ZSh0cmFjayk7
CiAgICAgICAgICAgICAgICAgaW5mby5kZXNjcmlwdGlvbiA9IE1lZGlhRGVzY3JpcHRpb25BVkZP
YmpDOjpjcmVhdGUodHJhY2spOwotICAgICAgICAgICAgICAgIHNlZ21lbnQuYXVkaW9UcmFja3Mu
YXBwZW5kKGluZm8pOworICAgICAgICAgICAgICAgIHNlZ21lbnQuYXVkaW9UcmFja3MuYXBwZW5k
KFdURk1vdmUoaW5mbykpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBGSVhNRSgx
MjUxNjEpICAgIDogQWRkIFRleHRUcmFjayBzdXBwb3J0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29j
b2EubW0KaW5kZXggODU0MjFlM2RlNzA5Y2UxNTljNDk0YjQwZmI4ZDFhZDIzNTkzYzNiYi4uY2Iy
ZDBiZTg5NzA0NmI3ZmY5ZjMyNzZjOTc2NzlhZmI0ZjAxMmFiMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9y
bURhdGFDb2NvYS5tbQpAQCAtNjgsMTEgKzY4LDEwIEBAIFZlY3RvcjxGb250UGxhdGZvcm1EYXRh
OjpGb250VmFyaWF0aW9uQXhpcz4gRm9udFBsYXRmb3JtRGF0YTo6dmFyaWF0aW9uQXhlcyhTaG91
CiAgICAgaWYgKCFwbGF0Zm9ybUZvbnQpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgCi0gICAg
VmVjdG9yPEZvbnRWYXJpYXRpb25BeGlzPiByZXN1bHRzOwotICAgIGZvciAoYXV0byYgW3RhZywg
dmFsdWVzXSA6IGRlZmF1bHRWYXJpYXRpb25WYWx1ZXMocGxhdGZvcm1Gb250LCBzaG91bGRMb2Nh
bGl6ZUF4aXNOYW1lcykpCi0gICAgICAgIHJlc3VsdHMuYXBwZW5kKEZvbnRQbGF0Zm9ybURhdGE6
OkZvbnRWYXJpYXRpb25BeGlzKHZhbHVlcy5heGlzTmFtZSwgU3RyaW5nKHRhZy5kYXRhKCksIHRh
Zy5zaXplKCkpLCB2YWx1ZXMuZGVmYXVsdFZhbHVlLCB2YWx1ZXMubWluaW11bVZhbHVlLCB2YWx1
ZXMubWF4aW11bVZhbHVlKSk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdHM7CisgICAgcmV0dXJu
IFdURjo6bWFwKGRlZmF1bHRWYXJpYXRpb25WYWx1ZXMocGxhdGZvcm1Gb250LCBzaG91bGRMb2Nh
bGl6ZUF4aXNOYW1lcyksIFtdKGF1dG8mJiBlbnRyeSkgeworICAgICAgICBhdXRvJiBbdGFnLCB2
YWx1ZXNdID0gZW50cnk7CisgICAgICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhOjpGb250VmFy
aWF0aW9uQXhpcyB7IHZhbHVlcy5heGlzTmFtZSwgU3RyaW5nKHRhZy5kYXRhKCksIHRhZy5zaXpl
KCkpLCB2YWx1ZXMuZGVmYXVsdFZhbHVlLCB2YWx1ZXMubWluaW11bVZhbHVlLCB2YWx1ZXMubWF4
aW11bVZhbHVlIH07CisgICAgfSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvUGFzdGVib2FyZE1hYy5tbQppbmRleCBiYThlYTFlYjQ0OGE5MjFlMzBkM2FlNmE5Yzc3ZTg4
MjMzYWJjNTNiLi5hMmMyNTBhYTJiZWY4ZGU5NjRiYWYwOTI0MGQ1ZTBlYzQxNTBlZjg0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQpAQCAtNzAyLDEw
ICs3MDIsNyBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgogICAgICAgICBO
U1VSTCAqdXJsID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6Y29jb2FEYXRhXTsKICAgICAgICAgaWYg
KFt1cmwgaXNGaWxlVVJMXSkKICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBWZWN0b3I8
U3RyaW5nPiB0eXBlczsKLSAgICAgICAgdHlwZXMuYXBwZW5kKGNvY29hVHlwZSk7Ci0gICAgICAg
IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0VHlwZXModHlw
ZXMsIG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQoKSk7CisgICAgICAgIHBsYXRmb3JtU3RyYXRl
Z2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0VHlwZXMoeyBjb2NvYVR5cGUgfSwgbV9w
YXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKTsKICAgICAgICAgbV9jaGFuZ2VDb3VudCA9IHBsYXRm
b3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0U3RyaW5nRm9yVHlwZShj
b2NvYURhdGEsIGNvY29hVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKTsKIAogICAg
ICAgICByZXR1cm47CkBAIC03MTQsOSArNzExLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJB
VElPTlNfRU5ECiAKICAgICBpZiAoIWNvY29hVHlwZS5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8g
ZXZlcnl0aGluZyBlbHNlIHdlIGtub3cgb2YgZ29lcyBvbiB0aGUgcGJvYXJkIGFzIGEgc3RyaW5n
Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwotICAgICAgICB0eXBlcy5hcHBlbmQoY29j
b2FUeXBlKTsKLSAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVn
eSgpLT5hZGRUeXBlcyh0eXBlcywgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKTsKKyAgICAg
ICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5hZGRUeXBlcyh7
IGNvY29hVHlwZSB9LCBtX3Bhc3RlYm9hcmROYW1lLCBjb250ZXh0KCkpOwogICAgICAgICBtX2No
YW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5z
ZXRTdHJpbmdGb3JUeXBlKGNvY29hRGF0YSwgY29jb2FUeXBlLCBtX3Bhc3RlYm9hcmROYW1lLCBj
b250ZXh0KCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL1JlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlLmNwcApp
bmRleCAzZTNmNDFhMWM1ODA3ZTZjZDM1OWRlM2RmMjZhZTcyZDU1MWNkNTgyLi43N2QzMjY2NTZk
NWNiYzVhZWZjZDQxN2ExN2E4N2E0NmY3MTIyN2JlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZVZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVWaWRlb0NhcHR1
cmVTb3VyY2UuY3BwCkBAIC03NSwxMSArNzUsOSBAQCBWZWN0b3I8VmlkZW9QcmVzZXREYXRhPiBS
ZWFsdGltZVZpZGVvQ2FwdHVyZVNvdXJjZTo6cHJlc2V0c0RhdGEoKQogCiB2b2lkIFJlYWx0aW1l
VmlkZW9DYXB0dXJlU291cmNlOjpzZXRTdXBwb3J0ZWRQcmVzZXRzKFZlY3RvcjxWaWRlb1ByZXNl
dERhdGE+JiYgcHJlc2V0RGF0YSkKIHsKLSAgICBWZWN0b3I8UmVmPFZpZGVvUHJlc2V0Pj4gcHJl
c2V0czsKLQotICAgIGZvciAoYXV0byYgZGF0YSA6IHByZXNldERhdGEpCi0gICAgICAgIHByZXNl
dHMuYXBwZW5kKFZpZGVvUHJlc2V0OjpjcmVhdGUoV1RGTW92ZShkYXRhKSkpOwotCisgICAgYXV0
byBwcmVzZXRzID0gV1RGOjptYXAoV1RGTW92ZShwcmVzZXREYXRhKSwgW10oYXV0byYmIGRhdGEp
IHsKKyAgICAgICAgcmV0dXJuIFZpZGVvUHJlc2V0OjpjcmVhdGUoV1RGTW92ZShkYXRhKSk7Cisg
ICAgfSk7CiAgICAgc2V0U3VwcG9ydGVkUHJlc2V0cyhXVEZNb3ZlKHByZXNldHMpKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1w
bC5jcHAKaW5kZXggNjdhNzYyOTVkODVmMzkxYzgzYjI0MDBlNmQxZmU1NzljY2RlZDg4Zi4uNjIz
NjM2YWMyYWJkNjgzODQxNGRjOGYxZjkyNmNlZDVjNDdjY2EyYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCkBAIC0xNDEs
MTAgKzE0MSw4IEBAIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0
IFVSTCYgdXJsLCBWZWN0b3I8QmxvYlBhcnQ+JiYgYmxvYlBhCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIEJsb2JQYXJ0OjpUeXBlOjpCbG9iOiB7Ci0gICAgICAg
ICAgICBpZiAoYXV0byBibG9iID0gbV9ibG9icy5nZXQocGFydC51cmwoKS5zdHJpbmcoKSkpIHsK
LSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSA6IGJsb2ItPml0
ZW1zKCkpCi0gICAgICAgICAgICAgICAgICAgIGJsb2JEYXRhLT5tX2l0ZW1zLmFwcGVuZChpdGVt
KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhdXRvIGJsb2IgPSBtX2Jsb2JzLmdl
dChwYXJ0LnVybCgpLnN0cmluZygpKSkKKyAgICAgICAgICAgICAgICBibG9iRGF0YS0+bV9pdGVt
cy5hcHBlbmRWZWN0b3IoYmxvYi0+aXRlbXMoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICB9CkBAIC0zMjgsNyArMzI2LDcgQEAgdm9pZCBCbG9iUmVnaXN0cnlJbXBs
Ojp3cml0ZUJsb2JzVG9UZW1wb3JhcnlGaWxlc0ZvckluZGV4ZWREQihjb25zdCBWZWN0b3I8U3Ry
aW4KICAgICAgICAgICAgICAgICBmaWxlUGF0aHMuY2xlYXIoKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbGVQYXRocy5hcHBlbmQodGVtcEZp
bGVQYXRoLmlzb2xhdGVkQ29weSgpKTsKKyAgICAgICAgICAgIGZpbGVQYXRocy5hcHBlbmQoV1RG
TW92ZSh0ZW1wRmlsZVBhdGgpLmlzb2xhdGVkQ29weSgpKTsKICAgICAgICAgfQogCiAgICAgICAg
IGNhbGxPbk1haW5UaHJlYWQoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlciksIGZpbGVQYXRocyA9IFdURk1vdmUoZmlsZVBhdGhzKV0gKCkgbXV0YWJsZSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApp
bmRleCA4NTMwZTMzNTVmMmQ2YjhkN2ZmYjZlZGY4M2Q2MDhiY2E0YjlmNTU1Li45YWI5OThlNDFj
YjA4Y2YwYjZmOTBmMTBmMTNjNGI4NDU3ZWM5MzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTIwODYsMTAgKzIwODYsOCBA
QCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpkcmF3Qm94U2lkZUZyb21QYXRoKEdyYXBoaWNz
Q29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LAogICAgICAgICAgICAgICAgIGdhcExlbmd0aCArPSAo
ZGFzaExlbmd0aCAgLyBudW1iZXJPZkdhcHMpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBEYXNoQXJyYXkgbGluZURhc2g7Ci0gICAgICAgICAgICBsaW5lRGFzaC5hcHBlbmQoZGFzaExl
bmd0aCk7Ci0gICAgICAgICAgICBsaW5lRGFzaC5hcHBlbmQoZ2FwTGVuZ3RoKTsKLSAgICAgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC5zZXRMaW5lRGFzaChsaW5lRGFzaCwgZGFzaExlbmd0aCk7Cisg
ICAgICAgICAgICBhdXRvIGxpbmVEYXNoID0gRGFzaEFycmF5Ojpmcm9tKGRhc2hMZW5ndGgsIGdh
cExlbmd0aCk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0TGluZURhc2goV1RGTW92
ZShsaW5lRGFzaCksIGRhc2hMZW5ndGgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAv
LyBGSVhNRTogc3Ryb2tpbmcgdGhlIGJvcmRlciBwYXRoIGNhdXNlcyBpc3N1ZXMgd2l0aCB0aWdo
dCBjb3JuZXJzOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcAppbmRleCBkYThkZjJlOTIzYjM1NDZlMGYzZDRjNWIzMDVlZmU2NTQwN2U3ODYxLi40
MjVjNjljMzE0MWJmNzRmYTU3MmRmMjBiYjhhMGU0MDU3N2FiODE4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtMTk1Niw5ICsxOTU2
LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbm5lY3RDbGlwcGluZ1N0YWNrTGF5ZXJz
KExheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrJgogICAgIGF1dG8mIGNsaXBwaW5nRW50cnlTdGFj
ayA9IGNsaXBwaW5nU3RhY2suc3RhY2soKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Y2xpcHBpbmdFbnRyeVN0YWNrLnNpemUoKSAtIDE7ICsraSkgewogICAgICAgICBhdXRvJiBlbnRy
eSA9IGNsaXBwaW5nRW50cnlTdGFjay5hdChpKTsKLSAgICAgICAgVmVjdG9yPFJlZjxHcmFwaGlj
c0xheWVyPj4gY2hpbGRyZW47Ci0gICAgICAgIGNoaWxkcmVuLmFwcGVuZCgqY2xpcHBpbmdFbnRy
eVN0YWNrLmF0KGkgKyAxKS5jbGlwcGluZ0xheWVyKTsKLSAgICAgICAgZW50cnkuY2xpcHBpbmdM
YXllci0+c2V0Q2hpbGRyZW4oV1RGTW92ZShjaGlsZHJlbikpOworICAgICAgICBlbnRyeS5jbGlw
cGluZ0xheWVyLT5zZXRDaGlsZHJlbih7IFJlZiB7ICpjbGlwcGluZ0VudHJ5U3RhY2suYXQoaSAr
IDEpLmNsaXBwaW5nTGF5ZXIgfSB9KTsKICAgICB9CiAKICAgICBjbGlwcGluZ0VudHJ5U3RhY2su
bGFzdCgpLmNsaXBwaW5nTGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCmluZGV4IDBiZTAz
OWEwZjIzZDU3ZmY3ZjU3ZDk5MDliNjUzNzVhMDI0MjQzYjQuLjIzZDczNzEzNGNhOGVhYTE2MDVk
MGM0NzdhY2U2MjgzZjg0NjIxYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBAIC0xNDkxLDkgKzE0OTEsNyBAQCB2b2lkIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6YWRqdXN0T3ZlcmZsb3dTY3JvbGxiYXJDb250YWluZXJMYXll
cnMoUmVuZGVyTGF5ZXImCiAgICAgICAgICAgICBvdmVyZmxvd0JhY2tpbmctPmVuc3VyZU92ZXJm
bG93Q29udHJvbHNIb3N0TGF5ZXJBbmNlc3RvckNsaXBwaW5nU3RhY2soJnN0YWNraW5nQ29udGV4
dExheWVyKTsKIAogICAgICAgICBpZiAoYXV0byogb3ZlcmZsb3dDb250cm9sc0FuY2VzdG9yQ2xp
cHBpbmdTdGFjayA9IG92ZXJmbG93QmFja2luZy0+b3ZlcmZsb3dDb250cm9sc0hvc3RMYXllckFu
Y2VzdG9yQ2xpcHBpbmdTdGFjaygpKSB7Ci0gICAgICAgICAgICBWZWN0b3I8UmVmPEdyYXBoaWNz
TGF5ZXI+PiBjaGlsZHJlbjsKLSAgICAgICAgICAgIGNoaWxkcmVuLmFwcGVuZCgqb3ZlcmZsb3dD
b250YWluZXJMYXllcik7Ci0gICAgICAgICAgICBvdmVyZmxvd0NvbnRyb2xzQW5jZXN0b3JDbGlw
cGluZ1N0YWNrLT5sYXN0Q2xpcHBpbmdMYXllcigpLT5zZXRDaGlsZHJlbihXVEZNb3ZlKGNoaWxk
cmVuKSk7CisgICAgICAgICAgICBvdmVyZmxvd0NvbnRyb2xzQW5jZXN0b3JDbGlwcGluZ1N0YWNr
LT5sYXN0Q2xpcHBpbmdMYXllcigpLT5zZXRDaGlsZHJlbih7IFJlZiB7ICpvdmVyZmxvd0NvbnRh
aW5lckxheWVyIH0gfSk7CiAgICAgICAgICAgICBvdmVyZmxvd0NvbnRhaW5lckxheWVyID0gb3Zl
cmZsb3dDb250cm9sc0FuY2VzdG9yQ2xpcHBpbmdTdGFjay0+Zmlyc3RDbGlwcGluZ0xheWVyKCk7
CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1t
CmluZGV4IDllMTA4ZjhiNGZmMjYxNzk2ODk2NGZhMTM3MDE1MTliYmMyNDUyYzQuLjg3NjY3ZGUy
ZGVkMjk1ZDkzNTgwMmIzMzg5MmEwYzMyMWM3ZTMyZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTI3MzEsMTAgKzI3MzEsOSBAQCBzdGF0aWMgdm9p
ZCBwYWludEF0dGFjaG1lbnRUaXRsZUJhY2tncm91bmQoY29uc3QgUmVuZGVyQXR0YWNobWVudCYg
YXR0YWNobWVudCwgRwogICAgIGlmIChsYXlvdXQubGluZXMuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBWZWN0b3I8RmxvYXRSZWN0PiBiYWNrZ3JvdW5kUmVjdHM7Ci0KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxheW91dC5saW5lcy5zaXplKCk7ICsraSkKLSAgICAgICAg
YmFja2dyb3VuZFJlY3RzLmFwcGVuZChsYXlvdXQubGluZXNbaV0uYmFja2dyb3VuZFJlY3QpOwor
ICAgIGF1dG8gYmFja2dyb3VuZFJlY3RzID0gbGF5b3V0LmxpbmVzLm1hcChbXShhdXRvJiBsaW5l
KSB7CisgICAgICAgIHJldHVybiBsaW5lLmJhY2tncm91bmRSZWN0OworICAgIH0pOwogCiAgICAg
Q29sb3IgYmFja2dyb3VuZENvbG9yOwogICAgIGlmIChhdHRhY2htZW50LmZyYW1lKCkuc2VsZWN0
aW9uKCkuaXNGb2N1c2VkQW5kQWN0aXZlKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IGZlNTU5YmQ3MGIxZDBj
ZjRiMWM1YTViMWM5MGEyOTYzNWU4YjI3MzEuLjkyNzZiOTNjNzMxMjYxYzFmMmZmYmVjNDlmMWVj
Y2U3M2NhMWJiNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtMTk3LDExICsxOTcsOSBAQCBzdGF0aWMgdm9pZCB3
cml0ZVNWR1N0cm9rZVBhaW50aW5nUmVzb3VyY2UoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRl
ckVsZW1lbnQmCiAgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5ndGhDb250ZXh0KCZzaGFwZSk7CiAg
ICAgZG91YmxlIGRhc2hPZmZzZXQgPSBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN2Z1N0
eWxlLnN0cm9rZURhc2hPZmZzZXQoKSk7CiAgICAgZG91YmxlIHN0cm9rZVdpZHRoID0gbGVuZ3Ro
Q29udGV4dC52YWx1ZUZvckxlbmd0aChzdHlsZS5zdHJva2VXaWR0aCgpKTsKLSAgICBjb25zdCBh
dXRvJiBkYXNoZXMgPSBzdmdTdHlsZS5zdHJva2VEYXNoQXJyYXkoKTsKLQotICAgIERhc2hBcnJh
eSBkYXNoQXJyYXk7Ci0gICAgZm9yIChhdXRvJiBsZW5ndGggOiBkYXNoZXMpCi0gICAgICAgIGRh
c2hBcnJheS5hcHBlbmQobGVuZ3RoLnZhbHVlKGxlbmd0aENvbnRleHQpKTsKKyAgICBhdXRvIGRh
c2hBcnJheSA9IHN2Z1N0eWxlLnN0cm9rZURhc2hBcnJheSgpLm1hcChbJl0oYXV0byYgbGVuZ3Ro
KSAtPiBEYXNoQXJyYXlFbGVtZW50IHsKKyAgICAgICAgcmV0dXJuIGxlbmd0aC52YWx1ZShsZW5n
dGhDb250ZXh0KTsKKyAgICB9KTsKIAogICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAib3BhY2l0
eSIsIHN2Z1N0eWxlLnN0cm9rZU9wYWNpdHkoKSwgMS4wZik7CiAgICAgd3JpdGVJZk5vdERlZmF1
bHQodHMsICJzdHJva2Ugd2lkdGgiLCBzdHJva2VXaWR0aCwgMS4wKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcAppbmRleCBhNjNlYjgwYTc3OWQ3NzY4
ZGE0NzcyYmIwZDZhZmUxOWUzNTIxYmJkLi44NDgxMzZjOGE1MzhjNmVjOGVjYzE2ZDViZjAxYmZk
ZTJkZGIzOTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRDaHVuay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1
bmsuY3BwCkBAIC03MCw4ICs3MCw3IEBAIFNWR1RleHRDaHVuazo6U1ZHVGV4dENodW5rKGNvbnN0
IFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGxpbmVMYXlvdXRCb3hlcywgdW5zCiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBmaXJzdDsgaSA8IGxpbWl0OyArK2kp
Ci0gICAgICAgIG1fYm94ZXMuYXBwZW5kKGxpbmVMYXlvdXRCb3hlc1tpXSk7CisgICAgbV9ib3hl
cy5hcHBlbmQoJmxpbmVMYXlvdXRCb3hlc1tmaXJzdF0sIGxpbWl0IC0gZmlyc3QpOwogfQogCiB1
bnNpZ25lZCBTVkdUZXh0Q2h1bms6OnRvdGFsQ2hhcmFjdGVycygpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5jcHAKaW5kZXggMjI5OWY4YzYzNzliNTA5NDky
YTFhMWZmYTUyMzA2YTFhYTE2ODliNC4uZTNkYzNlZmJjMjliNjNkNzUyMTQ5ZGFjYjExMzFmZmE1
MmFjYzk0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUGFnZVJ1bGVDb2xsZWN0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29sbGVjdG9yLmNwcApA
QCAtODQsOCArODQsOSBAQCB2b2lkIFBhZ2VSdWxlQ29sbGVjdG9yOjptYXRjaFBhZ2VSdWxlcyhS
dWxlU2V0KiBydWxlcywgYm9vbCBpc0xlZnRQYWdlLCBib29sIGlzRgogCiAgICAgc3RkOjpzdGFi
bGVfc29ydChtYXRjaGVkUGFnZVJ1bGVzLmJlZ2luKCksIG1hdGNoZWRQYWdlUnVsZXMuZW5kKCks
IGNvbXBhcmVQYWdlUnVsZXMpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hdGNo
ZWRQYWdlUnVsZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIG1fcmVzdWx0LmF1dGhvckRlY2xhcmF0
aW9ucy5hcHBlbmQoeyAmbWF0Y2hlZFBhZ2VSdWxlc1tpXS0+cHJvcGVydGllcygpIH0pOworICAg
IG1fcmVzdWx0LmF1dGhvckRlY2xhcmF0aW9ucy5yZXNlcnZlQ2FwYWNpdHkobV9yZXN1bHQuYXV0
aG9yRGVjbGFyYXRpb25zLnNpemUoKSArIG1hdGNoZWRQYWdlUnVsZXMuc2l6ZSgpKTsKKyAgICBm
b3IgKGF1dG8qIHBhZ2VSdWxlIDogbWF0Y2hlZFBhZ2VSdWxlcykKKyAgICAgICAgbV9yZXN1bHQu
YXV0aG9yRGVjbGFyYXRpb25zLnVuY2hlY2tlZEFwcGVuZCh7ICZwYWdlUnVsZS0+cHJvcGVydGll
cygpIH0pOwogfQogCiBzdGF0aWMgYm9vbCBjaGVja1BhZ2VTZWxlY3RvckNvbXBvbmVudHMoY29u
c3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBh
Z2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9SdWxlU2V0QnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0QnVp
bGRlci5jcHAKaW5kZXggNTc1MTg1OTE5N2IyMjZmYzI0NGFmNmJjMzIwNWZhZDI2ZTAxNzAxOS4u
Y2YxNjUyMjFjZDUzYTNjNWE3N2M2ZDk4MDg0MzIxYzEzZjIyMjM4ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcApAQCAtMzc4LDggKzM3OCw5IEBAIHZvaWQgUnVsZVNl
dEJ1aWxkZXI6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OnBvcChjb25zdCBNZWRpYVF1ZXJ5U2V0KiBz
ZXQpCiAKICAgICBpZiAoIWR5bmFtaWNDb250ZXh0U3RhY2subGFzdCgpLmFmZmVjdGVkUnVsZVBv
c2l0aW9ucy5pc0VtcHR5KCkgfHwgIWNvbGxlY3REeW5hbWljKSB7CiAgICAgICAgIFJ1bGVTZXQ6
OkR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMgcnVsZXM7CisgICAgICAgIHJ1bGVzLm1lZGlhUXVlcnlT
ZXRzLnJlc2VydmVDYXBhY2l0eShydWxlcy5tZWRpYVF1ZXJ5U2V0cy5zaXplKCkgKyBkeW5hbWlj
Q29udGV4dFN0YWNrLnNpemUoKSk7CiAgICAgICAgIGZvciAoYXV0byYgY29udGV4dCA6IGR5bmFt
aWNDb250ZXh0U3RhY2spCi0gICAgICAgICAgICBydWxlcy5tZWRpYVF1ZXJ5U2V0cy5hcHBlbmQo
Y29udGV4dC5zZXQuZ2V0KCkpOworICAgICAgICAgICAgcnVsZXMubWVkaWFRdWVyeVNldHMudW5j
aGVja2VkQXBwZW5kKGNvbnRleHQuc2V0LmdldCgpKTsKIAogICAgICAgICBpZiAoY29sbGVjdER5
bmFtaWMpIHsKICAgICAgICAgICAgIHJ1bGVzLmFmZmVjdGVkUnVsZVBvc2l0aW9ucy5hcHBlbmRW
ZWN0b3IoZHluYW1pY0NvbnRleHRTdGFjay5sYXN0KCkuYWZmZWN0ZWRSdWxlUG9zaXRpb25zKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRlci5o
IGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgKaW5kZXggMmY4
MzRkZjY3ZDgwY2IxM2RkNGM5MTU1MWJhZDEyZGIxYjIzYTI0OS4uNzQ2NGY4NGQ4YmY2YjJiMmEz
MzEyM2Q1OTJiZTI5MmYxNGNjMjhkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVCdWlsZGVyQ29udmVydGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVC
dWlsZGVyQ29udmVydGVyLmgKQEAgLTE2OTcsMTMgKzE2OTcsMTIgQEAgaW5saW5lIFZlY3RvcjxB
dG9tU3RyaW5nPiBCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Q29udGFpbmVyTmFtZShCdWlsZGVy
U3RhdGUmLAogICAgICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVl
KS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9
CisgICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgIFZlY3RvcjxBdG9tU3RyaW5nPiByZXN1bHQ7Ci0gICAgaWYgKGlzPENTU1ZhbHVlTGlz
dD4odmFsdWUpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgaXRlbSA6IGRvd25jYXN0PENTU1ZhbHVl
TGlzdD4odmFsdWUpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oaXRlbS5nZXQoKSkuc3RyaW5nVmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVy
biByZXN1bHQ7CisgICAgcmV0dXJuIFdURjo6bWFwKGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFs
dWUpLCBbXShhdXRvJiBpdGVtKSAtPiBBdG9tU3RyaW5nIHsKKyAgICAgICAgcmV0dXJuIGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPihpdGVtLmdldCgpKS5zdHJpbmdWYWx1ZSgpOworICAgIH0p
OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVt
b3RlTWVkaWFQbGF5ZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEv
UmVtb3RlTWVkaWFQbGF5ZXJQcm94eS5jcHAKaW5kZXggMGVmODM0MmRkMjY4ZWU2OGMzMDQ3NjJk
YTA1OGJhNGZiY2JjNmUzYy4uOTQ5ZmYzMjA1NTUwYjQ4YjdjYzc5ZTQ1MDUxNmE0MDQwMmE0YTM5
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlh
UGxheWVyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1v
dGVNZWRpYVBsYXllclByb3h5LmNwcApAQCAtODA1LDExICs4MDUsOSBAQCBib29sIFJlbW90ZU1l
ZGlhUGxheWVyUHJveHk6OmRvZXNIYXZlQXR0cmlidXRlKGNvbnN0IEF0b21TdHJpbmcmLCBBdG9t
U3RyaW5nKikgYwogI2lmIEVOQUJMRShBVkZfQ0FQVElPTlMpCiBWZWN0b3I8UmVmUHRyPFBsYXRm
b3JtVGV4dFRyYWNrPj4gUmVtb3RlTWVkaWFQbGF5ZXJQcm94eTo6b3V0T2ZCYW5kVHJhY2tTb3Vy
Y2VzKCkKIHsKLSAgICBWZWN0b3I8UmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNrPj4gc291cmNlczsK
LSAgICBmb3IgKGF1dG8mIGRhdGEgOiBtX2NvbmZpZ3VyYXRpb24ub3V0T2ZCYW5kVHJhY2tEYXRh
KQotICAgICAgICBzb3VyY2VzLmFwcGVuZChQbGF0Zm9ybVRleHRUcmFjazo6Y3JlYXRlKFdURk1v
dmUoZGF0YSkpKTsKLSAgICAKLSAgICByZXR1cm4gc291cmNlczsKKyAgICByZXR1cm4gV1RGOjpt
YXAobV9jb25maWd1cmF0aW9uLm91dE9mQmFuZFRyYWNrRGF0YSwgW10oYXV0byYgZGF0YSkgLT4g
UmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNrPiB7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVRleHRU
cmFjazo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpOworICAgIH0pOwogfQogCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVTb3VyY2VCdWZmZXJQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlU291cmNlQnVm
ZmVyUHJveHkuY3BwCmluZGV4IDI3OTE2NWRlNjZhYWZlMDI0NjgxZTE2MWEwMzVjNGExMDk1NGU2
ZTEuLmJjOGQwMTYyMmRjOWYxMTQxZTg1OWYyNDYyZjM2Mjg4NzhiMmI1ZDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVTb3VyY2VCdWZmZXJQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZVNvdXJjZUJ1ZmZl
clByb3h5LmNwcApAQCAtNzUsMzUgKzc1LDMzIEBAIHZvaWQgUmVtb3RlU291cmNlQnVmZmVyUHJv
eHk6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50CiAK
ICAgICBJbml0aWFsaXphdGlvblNlZ21lbnRJbmZvIHNlZ21lbnRJbmZvOwogICAgIHNlZ21lbnRJ
bmZvLmR1cmF0aW9uID0gc2VnbWVudC5kdXJhdGlvbjsKLSAgICBmb3IgKGF1dG8mIGF1ZGlvVHJh
Y2tJbmZvIDogc2VnbWVudC5hdWRpb1RyYWNrcykgewotICAgICAgICBhdXRvIGlkZW50aWZpZXIg
PSBtX3JlbW90ZU1lZGlhUGxheWVyUHJveHktPmFkZFJlbW90ZUF1ZGlvVHJhY2tQcm94eSgqYXVk
aW9UcmFja0luZm8udHJhY2spOwotICAgICAgICBzZWdtZW50SW5mby5hdWRpb1RyYWNrcy5hcHBl
bmQoeyBNZWRpYURlc2NyaXB0aW9uSW5mbygqYXVkaW9UcmFja0luZm8uZGVzY3JpcHRpb24pLCBp
ZGVudGlmaWVyIH0pOwogCisgICAgc2VnbWVudEluZm8uYXVkaW9UcmFja3MgPSBzZWdtZW50LmF1
ZGlvVHJhY2tzLm1hcChbJl0oYXV0byYgYXVkaW9UcmFja0luZm8pIHsKKyAgICAgICAgYXV0byBp
ZGVudGlmaWVyID0gbV9yZW1vdGVNZWRpYVBsYXllclByb3h5LT5hZGRSZW1vdGVBdWRpb1RyYWNr
UHJveHkoKmF1ZGlvVHJhY2tJbmZvLnRyYWNrKTsKICAgICAgICAgQVNTRVJUKCFtX3RyYWNrSWRz
LmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKICAgICAgICAgQVNTRVJUKCFtX21lZGlhRGVzY3JpcHRp
b25zLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKICAgICAgICAgbV90cmFja0lkcy5hZGQoaWRlbnRp
ZmllciwgYXVkaW9UcmFja0luZm8udHJhY2stPmlkKCkpOwogICAgICAgICBtX21lZGlhRGVzY3Jp
cHRpb25zLmFkZChpZGVudGlmaWVyLCAqYXVkaW9UcmFja0luZm8uZGVzY3JpcHRpb24pOwotICAg
IH0KKyAgICAgICAgcmV0dXJuIEluaXRpYWxpemF0aW9uU2VnbWVudEluZm86OlRyYWNrSW5mb3Jt
YXRpb24geyBNZWRpYURlc2NyaXB0aW9uSW5mbygqYXVkaW9UcmFja0luZm8uZGVzY3JpcHRpb24p
LCBpZGVudGlmaWVyIH07CisgICAgfSk7CiAKLSAgICBmb3IgKGF1dG8mIHZpZGVvVHJhY2tJbmZv
IDogc2VnbWVudC52aWRlb1RyYWNrcykgeworICAgIHNlZ21lbnRJbmZvLnZpZGVvVHJhY2tzID0g
c2VnbWVudC52aWRlb1RyYWNrcy5tYXAoWyZdKGF1dG8mIHZpZGVvVHJhY2tJbmZvKSB7CiAgICAg
ICAgIGF1dG8gaWRlbnRpZmllciA9IG1fcmVtb3RlTWVkaWFQbGF5ZXJQcm94eS0+YWRkUmVtb3Rl
VmlkZW9UcmFja1Byb3h5KCp2aWRlb1RyYWNrSW5mby50cmFjayk7Ci0gICAgICAgIHNlZ21lbnRJ
bmZvLnZpZGVvVHJhY2tzLmFwcGVuZCh7IE1lZGlhRGVzY3JpcHRpb25JbmZvKCp2aWRlb1RyYWNr
SW5mby5kZXNjcmlwdGlvbiksIGlkZW50aWZpZXIgfSk7Ci0KICAgICAgICAgQVNTRVJUKCFtX3Ry
YWNrSWRzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKICAgICAgICAgQVNTRVJUKCFtX21lZGlhRGVz
Y3JpcHRpb25zLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKICAgICAgICAgbV90cmFja0lkcy5hZGQo
aWRlbnRpZmllciwgdmlkZW9UcmFja0luZm8udHJhY2stPmlkKCkpOwogICAgICAgICBtX21lZGlh
RGVzY3JpcHRpb25zLmFkZChpZGVudGlmaWVyLCAqdmlkZW9UcmFja0luZm8uZGVzY3JpcHRpb24p
OwotICAgIH0KKyAgICAgICAgcmV0dXJuIEluaXRpYWxpemF0aW9uU2VnbWVudEluZm86OlRyYWNr
SW5mb3JtYXRpb24geyBNZWRpYURlc2NyaXB0aW9uSW5mbygqdmlkZW9UcmFja0luZm8uZGVzY3Jp
cHRpb24pLCBpZGVudGlmaWVyIH07CisgICAgfSk7CiAKLSAgICBmb3IgKGF1dG8mIHRleHRUcmFj
a0luZm8gOiBzZWdtZW50LnRleHRUcmFja3MpIHsKKyAgICBzZWdtZW50SW5mby50ZXh0VHJhY2tz
ID0gc2VnbWVudC50ZXh0VHJhY2tzLm1hcChbJl0oYXV0byYgdGV4dFRyYWNrSW5mbykgewogICAg
ICAgICBhdXRvIGlkZW50aWZpZXIgPSBtX3JlbW90ZU1lZGlhUGxheWVyUHJveHktPmFkZFJlbW90
ZVRleHRUcmFja1Byb3h5KCp0ZXh0VHJhY2tJbmZvLnRyYWNrKTsKLSAgICAgICAgc2VnbWVudElu
Zm8udGV4dFRyYWNrcy5hcHBlbmQoeyBNZWRpYURlc2NyaXB0aW9uSW5mbygqdGV4dFRyYWNrSW5m
by5kZXNjcmlwdGlvbiksIGlkZW50aWZpZXIgfSk7Ci0KICAgICAgICAgQVNTRVJUKCFtX3RyYWNr
SWRzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKICAgICAgICAgQVNTRVJUKCFtX21lZGlhRGVzY3Jp
cHRpb25zLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKICAgICAgICAgbV90cmFja0lkcy5hZGQoaWRl
bnRpZmllciwgdGV4dFRyYWNrSW5mby50cmFjay0+aWQoKSk7CiAgICAgICAgIG1fbWVkaWFEZXNj
cmlwdGlvbnMuYWRkKGlkZW50aWZpZXIsICp0ZXh0VHJhY2tJbmZvLmRlc2NyaXB0aW9uKTsKLSAg
ICB9CisgICAgICAgIHJldHVybiBJbml0aWFsaXphdGlvblNlZ21lbnRJbmZvOjpUcmFja0luZm9y
bWF0aW9uIHsgTWVkaWFEZXNjcmlwdGlvbkluZm8oKnRleHRUcmFja0luZm8uZGVzY3JpcHRpb24p
LCBpZGVudGlmaWVyIH07CisgICAgfSk7CiAKICAgICBpZiAoIW1fY29ubmVjdGlvblRvV2ViUHJv
Y2VzcykgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtMzM4LDE2ICszMzYsMTEg
QEAgdm9pZCBSZW1vdGVTb3VyY2VCdWZmZXJQcm94eTo6c2Vla1RvVGltZShjb25zdCBNZWRpYVRp
bWUmIG1lZGlhVGltZSkKIAogdm9pZCBSZW1vdGVTb3VyY2VCdWZmZXJQcm94eTo6dXBkYXRlVHJh
Y2tJZHMoVmVjdG9yPHN0ZDo6cGFpcjxUcmFja1ByaXZhdGVSZW1vdGVJZGVudGlmaWVyLCBUcmFj
a1ByaXZhdGVSZW1vdGVJZGVudGlmaWVyPj4mJiBpZGVudGlmaWVyUGFpcnMpCiB7Ci0gICAgVmVj
dG9yPHN0ZDo6cGFpcjxBdG9tU3RyaW5nLCBBdG9tU3RyaW5nPj4gdHJhY2tJZFBhaXJzOwotCi0g
ICAgZm9yIChhdXRvJiBpZGVudGlmaWVyUGFpciA6IGlkZW50aWZpZXJQYWlycykgeworICAgIGF1
dG8gdHJhY2tJZFBhaXJzID0gaWRlbnRpZmllclBhaXJzLm1hcChbJl0oYXV0byYgaWRlbnRpZmll
clBhaXIpIHsKICAgICAgICAgQVNTRVJUKG1fdHJhY2tJZHMuY29udGFpbnMoaWRlbnRpZmllclBh
aXIuZmlyc3QpKTsKICAgICAgICAgQVNTRVJUKG1fdHJhY2tJZHMuY29udGFpbnMoaWRlbnRpZmll
clBhaXIuc2Vjb25kKSk7Ci0KLSAgICAgICAgYXV0byBvbGRJZCA9IG1fdHJhY2tJZHMudGFrZShp
ZGVudGlmaWVyUGFpci5maXJzdCk7Ci0gICAgICAgIGF1dG8gbmV3SWQgPSBtX3RyYWNrSWRzLmdl
dChpZGVudGlmaWVyUGFpci5zZWNvbmQpOwotICAgICAgICB0cmFja0lkUGFpcnMuYXBwZW5kKHN0
ZDo6bWFrZV9wYWlyKG9sZElkLCBuZXdJZCkpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIHN0ZDo6
cGFpciB7IG1fdHJhY2tJZHMudGFrZShpZGVudGlmaWVyUGFpci5maXJzdCksIG1fdHJhY2tJZHMu
Z2V0KGlkZW50aWZpZXJQYWlyLnNlY29uZCkgfTsKKyAgICB9KTsKIAogICAgIGlmICghdHJhY2tJ
ZFBhaXJzLmlzRW1wdHkoKSkKICAgICAgICAgbV9zb3VyY2VCdWZmZXJQcml2YXRlLT51cGRhdGVU
cmFja0lkcyhXVEZNb3ZlKHRyYWNrSWRQYWlycykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAppbmRleCA3MGI1YWZkYTUyNmU5OTA5Yjk2MmQ3MTIx
M2Q4NWI2MGI1MzcxODFkLi5lODc2ZWMzNzc3MWZmNDAwY2FhODM0Y2VmYWU5NTYyNTRjYzNmZDkz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcApA
QCAtODUzLDkgKzg1Myw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpt
ZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgUmVnaXN0cmFibGVECiAKICAgICAgICAgICAg
IHN0YXRpc3RpYy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zID0gV1RGTW92ZSh0b3BGcmFt
ZURvbWFpbnMpOwogCi0gICAgICAgICAgICBWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4g
c3RhdGlzdGljczsKLSAgICAgICAgICAgIHN0YXRpc3RpY3MuYXBwZW5kKFdURk1vdmUoc3RhdGlz
dGljKSk7Ci0gICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+bWVyZ2VTdGF0aXN0aWNzKFdU
Rk1vdmUoc3RhdGlzdGljcykpOworICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPm1lcmdl
U3RhdGlzdGljcyhWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz46OmZyb20oV1RGTW92ZShz
dGF0aXN0aWMpKSk7CiAgICAgICAgIH0KICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IGY0ZjhhNGM0ZjRhZjk2YWY2ODk0MmM1YzZj
OTg5MmZmN2UxOTkzZjEuLjRhOGIwZWRhMDliZjA1ODk4YTNiOGIyMmM5MDhiNDdiMjhlYjljODEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3Bw
CkBAIC0xMzgwLDEwICsxMzgwLDkgQEAgc3RhdGljIHZvaWQgZmV0Y2hEaXNrQ2FjaGVFbnRyaWVz
KE5ldHdvcmtDYWNoZTo6Q2FjaGUqIGNhY2hlLCBQQUw6OlNlc3Npb25JRCBzZXMKICAgICBIYXNo
TWFwPFNlY3VyaXR5T3JpZ2luRGF0YSwgdWludDY0X3Q+IG9yaWdpbnNBbmRTaXplczsKICAgICBj
YWNoZS0+dHJhdmVyc2UoW2ZldGNoT3B0aW9ucywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSwgb3JpZ2luc0FuZFNpemVzID0gV1RGTW92ZShvcmlnaW5zQW5k
U2l6ZXMpXShhdXRvKiB0cmF2ZXJzYWxFbnRyeSkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghdHJh
dmVyc2FsRW50cnkpIHsKLSAgICAgICAgICAgIFZlY3RvcjxXZWJzaXRlRGF0YTo6RW50cnk+IGVu
dHJpZXM7Ci0KLSAgICAgICAgICAgIGZvciAoYXV0byYgb3JpZ2luQW5kU2l6ZSA6IG9yaWdpbnNB
bmRTaXplcykKLSAgICAgICAgICAgICAgICBlbnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6RW50
cnkgeyBvcmlnaW5BbmRTaXplLmtleSwgV2Vic2l0ZURhdGFUeXBlOjpEaXNrQ2FjaGUsIG9yaWdp
bkFuZFNpemUudmFsdWUgfSk7CisgICAgICAgICAgICBhdXRvIGVudHJpZXMgPSBXVEY6Om1hcChv
cmlnaW5zQW5kU2l6ZXMsIFtdKGF1dG8mIG9yaWdpbkFuZFNpemUpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luQW5kU2l6ZS5rZXksIFdlYnNpdGVE
YXRhVHlwZTo6RGlza0NhY2hlLCBvcmlnaW5BbmRTaXplLnZhbHVlIH07CisgICAgICAgICAgICB9
KTsKIAogICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBlbnRyaWVzID0gV1RGTW92ZShlbnRy
aWVzKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZW50
cmllcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05vdGlmaWNh
dGlvbnMvTmV0d29ya05vdGlmaWNhdGlvbk1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2VyLmNwcApp
bmRleCBmMDBhMjE5M2FhMmIxMzk4MDJiMzY2YTRmMTIxYzc2ZWRmZjg4ZjAzLi5jNTEyZjJjYjMy
NTQwNDU0YjA2ZGY3MzI1YTMxYjJhM2NlMWQwYzY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05vdGlmaWNhdGlvbnMvTmV0d29ya05vdGlmaWNhdGlvbk1hbmFnZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTm90aWZpY2F0aW9ucy9OZXR3
b3JrTm90aWZpY2F0aW9uTWFuYWdlci5jcHAKQEAgLTgyLDkgKzgyLDkgQEAgdm9pZCBOZXR3b3Jr
Tm90aWZpY2F0aW9uTWFuYWdlcjo6ZGVsZXRlUHVzaEFuZE5vdGlmaWNhdGlvblJlZ2lzdHJhdGlv
bihjb25zdCBTZWMKIHZvaWQgTmV0d29ya05vdGlmaWNhdGlvbk1hbmFnZXI6OmdldE9yaWdpbnNX
aXRoUHVzaEFuZE5vdGlmaWNhdGlvblBlcm1pc3Npb25zKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Y29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiByZXBseUhh
bmRsZXIgPSBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0g
KFZlY3RvcjxTdHJpbmc+IG9yaWdpblN0cmluZ3MpIG11dGFibGUgewotICAgICAgICBWZWN0b3I8
U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zOwotICAgICAgICBmb3IgKGF1dG8mIG9yaWdpblN0
cmluZyA6IG9yaWdpblN0cmluZ3MpCi0gICAgICAgICAgICBvcmlnaW5zLmFwcGVuZChTZWN1cml0
eU9yaWdpbkRhdGE6OmZyb21VUkwoeyB7IH0sIG9yaWdpblN0cmluZyB9KSk7CisgICAgICAgIGF1
dG8gb3JpZ2lucyA9IG9yaWdpblN0cmluZ3MubWFwKFtdKGF1dG8mIG9yaWdpblN0cmluZykgewor
ICAgICAgICAgICAgcmV0dXJuIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbVVSTCh7IHsgfSwgb3Jp
Z2luU3RyaW5nIH0pOworICAgICAgICB9KTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RG
TW92ZShvcmlnaW5zKSk7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKaW5kZXggY2I5MDFi
NmM1OGIxODU5YWU4YmUyYWQ5ZGE5MDAyZDgyMmI4MDYxMi4uYzFiOTg2Y2Y5ZjY2MTI0MWYxMDNh
NzgwNmM4MzY2ZGU4YmM0MzYzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCkBAIC0yOTUsMjAgKzI5
NSwxNCBAQCBWZWN0b3I8U3RvcmFnZUFyZWFJZGVudGlmaWVyPiBTdG9yYWdlTWFuYWdlcjo6YWxs
U3RvcmFnZUFyZWFJZGVudGlmaWVycygpIGNvbnN0CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CiAKICAgICBWZWN0b3I8U3RvcmFnZUFyZWFJZGVudGlmaWVyPiBpZGVudGlmaWVyczsK
LSAgICBmb3IgKGNvbnN0IGF1dG8mIGxvY2FsU3RvcmFnZU5hbWVzcGFjZSA6IG1fbG9jYWxTdG9y
YWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8ga2V5IDogbG9jYWxT
dG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlQXJlYUlkZW50aWZpZXJzKCkpCi0gICAgICAgICAgICBp
ZGVudGlmaWVycy5hcHBlbmQoa2V5KTsKLSAgICB9CisgICAgZm9yIChhdXRvJiBsb2NhbFN0b3Jh
Z2VOYW1lc3BhY2UgOiBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpCisgICAgICAg
IGlkZW50aWZpZXJzLmFwcGVuZFZlY3Rvcihsb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VB
cmVhSWRlbnRpZmllcnMoKSk7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYXNpZW50TG9jYWxT
dG9yYWdlTmFtZXNwYWNlIDogbV90cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVl
cygpKSB7Ci0gICAgICAgIGZvciAoYXV0byBrZXkgOiB0cmFzaWVudExvY2FsU3RvcmFnZU5hbWVz
cGFjZS0+c3RvcmFnZUFyZWFJZGVudGlmaWVycygpKQotICAgICAgICAgICAgaWRlbnRpZmllcnMu
YXBwZW5kKGtleSk7Ci0gICAgfQorICAgIGZvciAoYXV0byYgdHJhc2llbnRMb2NhbFN0b3JhZ2VO
YW1lc3BhY2UgOiBtX3RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpCisg
ICAgICAgIGlkZW50aWZpZXJzLmFwcGVuZFZlY3Rvcih0cmFzaWVudExvY2FsU3RvcmFnZU5hbWVz
cGFjZS0+c3RvcmFnZUFyZWFJZGVudGlmaWVycygpKTsKIAotICAgIGZvciAoY29uc3QgYXV0byYg
c2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UgOiBtX3Nlc3Npb25TdG9yYWdlTmFtZXNwYWNlcy52YWx1
ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8ga2V5IDogc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2Ut
PnN0b3JhZ2VBcmVhSWRlbnRpZmllcnMoKSkKLSAgICAgICAgICAgIGlkZW50aWZpZXJzLmFwcGVu
ZChrZXkpOwotICAgIH0KKyAgICBmb3IgKGF1dG8mIHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlIDog
bV9zZXNzaW9uU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpCisgICAgICAgIGlkZW50aWZpZXJz
LmFwcGVuZFZlY3RvcihzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZUFyZWFJZGVudGlm
aWVycygpKTsKIAogICAgIHJldHVybiBpZGVudGlmaWVyczsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9UcmFuc2llbnRMb2NhbFN0b3JhZ2VO
YW1lc3BhY2UuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1Ry
YW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHAKaW5kZXggZWVlYzU1MGVlZjYzYWU1OWEx
ZWFiM2FhOGE0OTdhMzJjMTA1MDYyNC4uZmI5OGVkMzk0ODA5MTYwNjg3MTcyNmFlMDg2ZDUxZjE1
MTJkNDQwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9y
YWdlL1RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFj
ZS5jcHAKQEAgLTU1LDE0ICs1NSwxMSBAQCBTdG9yYWdlQXJlYSYgVHJhbnNpZW50TG9jYWxTdG9y
YWdlTmFtZXNwYWNlOjpnZXRPckNyZWF0ZVN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZwogVmVjdG9y
PFNlY3VyaXR5T3JpZ2luRGF0YT4gVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpvcmln
aW5zKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBWZWN0
b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBz
dG9yYWdlQXJlYSA6IG1fc3RvcmFnZUFyZWFNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKCFz
dG9yYWdlQXJlYS0+aXRlbXMoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBvcmlnaW5zLmFwcGVu
ZChzdG9yYWdlQXJlYS0+c2VjdXJpdHlPcmlnaW4oKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG9y
aWdpbnM7CisgICAgcmV0dXJuIFdURjo6Y29tcGFjdE1hcChtX3N0b3JhZ2VBcmVhTWFwLCBbXShh
dXRvJiBlbnRyeSkgLT4gc3RkOjpvcHRpb25hbDxTZWN1cml0eU9yaWdpbkRhdGE+IHsKKyAgICAg
ICAgaWYgKGVudHJ5LnZhbHVlLT5pdGVtcygpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBlbnRyeS52YWx1ZS0+c2VjdXJpdHlPcmln
aW4oKTsKKyAgICB9KTsKIH0KIAogdm9pZCBUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6
OmNsZWFyU3RvcmFnZUFyZWFzTWF0Y2hpbmdPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRh
JiBzZWN1cml0eU9yaWdpbikKQEAgLTgyLDEwICs3OSw5IEBAIHZvaWQgVHJhbnNpZW50TG9jYWxT
dG9yYWdlTmFtZXNwYWNlOjpjbGVhckFsbFN0b3JhZ2VBcmVhcygpCiAKIFZlY3RvcjxTdG9yYWdl
QXJlYUlkZW50aWZpZXI+IFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6c3RvcmFnZUFy
ZWFJZGVudGlmaWVycygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFN0b3JhZ2VBcmVhSWRlbnRpZmll
cj4gaWRlbnRpZmllcnM7Ci0gICAgZm9yIChhdXRvJiBzdG9yYWdlQXJlYSA6IG1fc3RvcmFnZUFy
ZWFNYXAudmFsdWVzKCkpCi0gICAgICAgIGlkZW50aWZpZXJzLmFwcGVuZChzdG9yYWdlQXJlYS0+
aWRlbnRpZmllcigpKTsKLSAgICByZXR1cm4gaWRlbnRpZmllcnM7CisgICAgcmV0dXJuIFdURjo6
bWFwKG1fc3RvcmFnZUFyZWFNYXAsIFtdKGF1dG8mIGVudHJ5KSB7CisgICAgICAgIHJldHVybiBl
bnRyeS52YWx1ZS0+aWRlbnRpZmllcigpOworICAgIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2Fj
aGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAKaW5kZXggZGE5Y2I4YTVkY2MwZWQ3Zjlm
NGMyZTNkMmYyNzY4OTRhMDFlZDE3NC4uM2UxYWUzMTMwMjhhZDAwM2NkNTVmODFlNDZlNWNhZTBi
ZjFlYWRlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9D
YWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHAKQEAgLTIwOSw4ICsyMDksOSBA
QCB2b2lkIENhY2hlOjpmaW5pc2hPcGVuaW5nKENvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNr
LCBzdGQ6Om9wdGlvbmFsPEVycm9yPiYmCiB7CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8UmVjb3JkSW5mb3JtYXRpb24+PiByZWNvcmRzOwogICAgIGZvciAoYXV0byYgdmFsdWUg
OiBtX3JlY29yZHMudmFsdWVzKCkpIHsKKyAgICAgICAgcmVjb3Jkcy5yZXNlcnZlQ2FwYWNpdHko
cmVjb3Jkcy5zaXplKCkgKyB2YWx1ZS5zaXplKCkpOwogICAgICAgICBmb3IgKGF1dG8mIHJlY29y
ZCA6IHZhbHVlKQotICAgICAgICAgICAgcmVjb3Jkcy5hcHBlbmQocmVjb3JkKTsKKyAgICAgICAg
ICAgIHJlY29yZHMudW5jaGVja2VkQXBwZW5kKHJlY29yZCk7CiAgICAgfQogICAgIHN0ZDo6c29y
dChyZWNvcmRzLmJlZ2luKCksIHJlY29yZHMuZW5kKCksIFsmXShjb25zdCBhdXRvJiBhLCBjb25z
dCBhdXRvJiBiKSB7CiAgICAgICAgIHJldHVybiBhLmdldCgpLmluc2VydGlvblRpbWUgPCBiLmdl
dCgpLmluc2VydGlvblRpbWU7CkBAIC02ODIsOCArNjgzLDkgQEAgVmVjdG9yPEtleT4gQ2FjaGU6
OmtleXMoKSBjb25zdAogewogICAgIFZlY3RvcjxLZXk+IGtleXM7CiAgICAgZm9yIChhdXRvJiBy
ZWNvcmRzIDogbV9yZWNvcmRzLnZhbHVlcygpKSB7CisgICAgICAgIGtleXMucmVzZXJ2ZUNhcGFj
aXR5KGtleXMuc2l6ZSgpICsgcmVjb3Jkcy5zaXplKCkpOwogICAgICAgICBmb3IgKGF1dG8mIHJl
Y29yZCA6IHJlY29yZHMpCi0gICAgICAgICAgICBrZXlzLmFwcGVuZChyZWNvcmQua2V5KTsKKyAg
ICAgICAgICAgIGtleXMudW5jaGVja2VkQXBwZW5kKHJlY29yZC5rZXkpOwogICAgIH0KICAgICBy
ZXR1cm4ga2V5czsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
c3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuY3BwCmluZGV4IDQwOWEzMzg4YTBiOGVjZjlh
YjcxMDQ5YjcyOWZkZTM5MjdjNDhlYjUuLjQxMzY5NDRiNWZmODVlZjIzZmNlZTQ3ZWVkODMyZjFl
ZDBiNjA0N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFn
ZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmNwcApAQCAtNjksOCArNjksOSBAQCBTUUxpdGVT
dG9yYWdlQXJlYTo6U1FMaXRlU3RvcmFnZUFyZWEodW5zaWduZWQgcXVvdGEsIGNvbnN0IFdlYkNv
cmU6OkNsaWVudE9yaWdpbgogewogICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsKIAorICAg
IG1fY2FjaGVkU3RhdGVtZW50cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHN0YXRpY19jYXN0PHNp
emVfdD4oU3RhdGVtZW50VHlwZTo6SW52YWxpZCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihTdGF0ZW1lbnRUeXBlOjpJbnZhbGlkKTsgKytpKQotICAg
ICAgICBtX2NhY2hlZFN0YXRlbWVudHMuYXBwZW5kKG51bGxwdHIpOworICAgICAgICBtX2NhY2hl
ZFN0YXRlbWVudHMudW5jaGVja2VkQXBwZW5kKG51bGxwdHIpOwogfQogCiB2b2lkIFNRTGl0ZVN0
b3JhZ2VBcmVhOjpjbG9zZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BcHBs
ZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS5jcHAKaW5kZXggMDRhNjk2ODE3
OGE2Zjc1OTRjMjgwZWY3MzE4MTk4Y2I2MzJiOTIzMC4uYmNjYzA1NTA3NzE3Nzk3NjY4ZjljOWRj
ZjEwMzEwOTExMWI5OGFlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQXBwbGVQ
YXkvV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5LmNwcApAQCAtOTMsOSArOTMs
OSBAQCB2b2lkIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpzaG93UGF5bWVudFVJKFdlYkNv
cmU6OlBhZ2VJZGVudGlmaWVyIGRlc3RpbmF0aQogCiAgICAgVVJMIG9yaWdpbmF0aW5nVVJMKFVS
TCgpLCBvcmlnaW5hdGluZ1VSTFN0cmluZyk7CiAKLSAgICBWZWN0b3I8VVJMPiBsaW5rSWNvblVS
THM7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBsaW5rSWNvblVSTFN0cmluZyA6IGxpbmtJY29uVVJM
U3RyaW5ncykKLSAgICAgICAgbGlua0ljb25VUkxzLmFwcGVuZChVUkwoVVJMKCksIGxpbmtJY29u
VVJMU3RyaW5nKSk7CisgICAgYXV0byBsaW5rSWNvblVSTHMgPSBsaW5rSWNvblVSTFN0cmluZ3Mu
bWFwKFtdKGF1dG8mIGxpbmtJY29uVVJMU3RyaW5nKSB7CisgICAgICAgIHJldHVybiBVUkwoVVJM
KCksIGxpbmtJY29uVVJMU3RyaW5nKTsKKyAgICB9KTsKIAogICAgIHBsYXRmb3JtU2hvd1BheW1l
bnRVSSh3ZWJQYWdlUHJveHlJRCwgb3JpZ2luYXRpbmdVUkwsIGxpbmtJY29uVVJMcywgcGF5bWVu
dFJlcXVlc3QsIFt0aGlzLCB3ZWFrVGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9XShib29sIHJlc3Vs
dCkgewogICAgICAgICBpZiAoIXdlYWtUaGlzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb24uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSU5hdmlnYXRpb24uY3BwCmluZGV4IDg4NDY2YzQ5ZWQwZGUxOGUyMDMyY2FhMGEwNDY0
ODM5ZWE3NDUxMDEuLjRhODg5MDM5ZTk0YTYyZmE1OTJmMTk1N2Y3NmQ4NTllNzljOWZjNmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbi5jcHAKQEAgLTYy
LDEwICs2MiwxMCBAQCBOYXZpZ2F0aW9uOjpOYXZpZ2F0aW9uKFdlYk5hdmlnYXRpb25TdGF0ZSYg
c3RhdGUsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJlcQogICAgIDogbV9uYXZpZ2F0aW9u
SUQoc3RhdGUuZ2VuZXJhdGVOYXZpZ2F0aW9uSUQoKSkKICAgICAsIG1fb3JpZ2luYWxSZXF1ZXN0
KFdURk1vdmUocmVxdWVzdCkpCiAgICAgLCBtX2N1cnJlbnRSZXF1ZXN0KG1fb3JpZ2luYWxSZXF1
ZXN0KQorICAgICwgbV9yZWRpcmVjdENoYWluIHsgbV9vcmlnaW5hbFJlcXVlc3QudXJsKCkgfQog
ICAgICwgbV9mcm9tSXRlbShmcm9tSXRlbSkKICAgICAsIG1fY2xpZW50TmF2aWdhdGlvbkFjdGl2
aXR5KG5hdmlnYXRpb25BY3Rpdml0eVRpbWVvdXQpCiB7Ci0gICAgbV9yZWRpcmVjdENoYWluLmFw
cGVuZChtX29yaWdpbmFsUmVxdWVzdC51cmwoKSk7CiB9CiAKIE5hdmlnYXRpb246Ok5hdmlnYXRp
b24oV2ViTmF2aWdhdGlvblN0YXRlJiBzdGF0ZSwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgdGFy
Z2V0SXRlbSwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogZnJvbUl0ZW0sIEZyYW1lTG9hZFR5cGUg
YmFja0ZvcndhcmRGcmFtZUxvYWRUeXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV0tTaGFyZVNoZWV0Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvV0tTaGFyZVNoZWV0Lm1tCmluZGV4IDU1NGFiODA2NDI3ZWNiOWNlODMwYWNhOTdmYzdkZGNk
Yzk4NTNlMTUuLmUzODhhM2MzN2QwZjY5NjVkNzY5MWYyN2IxNzgwYTkxM2YwNGVlMjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2hhcmVTaGVldC5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NoYXJlU2hlZXQubW0KQEAgLTEwMCw5
ICsxMDAsOSBAQCBzdGF0aWMgdm9pZCBhcHBlbmRGaWxlc0FzU2hhcmVhYmxlVVJMcyhSZXRhaW5Q
dHI8TlNNdXRhYmxlQXJyYXk+JiYgc2hhcmVEYXRhQXJyYQogICAgICAgICBTdHJpbmcgZmlsZU5h
bWU7CiAgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGZpbGVEYXRhOwogICAgIH07Ci0gICAgVmVj
dG9yPEZpbGVXcml0ZVRhc2s+IGZpbGVXcml0ZVRhc2tzOwotICAgIGZvciAoYXV0byYgZmlsZSA6
IGZpbGVzKQotICAgICAgICBmaWxlV3JpdGVUYXNrcy5hcHBlbmQoeyBmaWxlLmZpbGVOYW1lLmlz
b2xhdGVkQ29weSgpLCBmaWxlLmZpbGVEYXRhLT5jcmVhdGVOU0RhdGEoKSB9KTsKKyAgICBhdXRv
IGZpbGVXcml0ZVRhc2tzID0gZmlsZXMubWFwKFtdKGF1dG8mIGZpbGUpIHsKKyAgICAgICAgcmV0
dXJuIEZpbGVXcml0ZVRhc2sgeyBmaWxlLmZpbGVOYW1lLmlzb2xhdGVkQ29weSgpLCBmaWxlLmZp
bGVEYXRhLT5jcmVhdGVOU0RhdGEoKSB9OworICAgIH0pOwogCiAgICAgYXV0byBxdWV1ZSA9IFdv
cmtRdWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LldLU2hhcmVTaGVldC5TaGFyZWFibGVG
aWxlV3JpdGVyIik7CiAgICAgcXVldWUtPmRpc3BhdGNoKFtzaGFyZURhdGFBcnJheSA9IFdURk1v
dmUoc2hhcmVEYXRhQXJyYXkpLCBmaWxlV3JpdGVUYXNrcyA9IFdURk1vdmUoZmlsZVdyaXRlVGFz
a3MpLCB0ZW1wb3JhcnlEaXJlY3RvcnkgPSByZXRhaW5QdHIodGVtcG9yYXJ5RGlyZWN0b3J5KSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxl
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94
eUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29j
b2EubW0KaW5kZXggZjFjMzcwNmIwOWZmOWUxMjgyMWQ3ZGEzYTIyNWI3MGJhNDZkY2UzNi4uNTZh
MTRkOGJmMzZlZDQ0ZGFkYmYxZTRjNDg0MGE1ZTA2NDE0YjhlNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KQEAgLTY2NiwxNCAr
NjY2LDEyIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZXN0b3JlQXBwSGlnaGxpZ2h0c0FuZFNjcm9s
bFRvSW5kZXgoY29uc3QgVmVjdG9yPFJlZjxTaGFyZWRNCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJv
Y2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8U2hhcmVkTWVtb3J5OjpJUENI
YW5kbGU+IG1lbW9yeUhhbmRsZXM7Ci0KLSAgICBmb3IgKGF1dG8gaGlnaGxpZ2h0IDogaGlnaGxp
Z2h0cykgeworICAgIGF1dG8gbWVtb3J5SGFuZGxlcyA9IFdURjo6Y29tcGFjdE1hcChoaWdobGln
aHRzLCBbXShhdXRvJiBoaWdobGlnaHQpIC0+IHN0ZDo6b3B0aW9uYWw8U2hhcmVkTWVtb3J5OjpJ
UENIYW5kbGU+IHsKICAgICAgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwotICAgICAg
ICBoaWdobGlnaHQtPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlv
bjo6UmVhZE9ubHkpOwotCi0gICAgICAgIG1lbW9yeUhhbmRsZXMuYXBwZW5kKFNoYXJlZE1lbW9y
eTo6SVBDSGFuZGxlIHsgV1RGTW92ZShoYW5kbGUpLCBoaWdobGlnaHQtPnNpemUoKSB9KTsKLSAg
ICB9CisgICAgICAgIGlmICghaGlnaGxpZ2h0LT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRN
ZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgICAgIHJldHVybiBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSB7IFdURk1vdmUo
aGFuZGxlKSwgaGlnaGxpZ2h0LT5zaXplKCkgfTsKKyAgICB9KTsKICAgICAKICAgICBzZXRVcEhp
Z2hsaWdodHNPYnNlcnZlcigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9GcmFtZUxvYWRTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9GcmFtZUxvYWRT
dGF0ZS5jcHAKaW5kZXggYzYxYmVkODFkMDkyODQ2MzJiZjI5NjVlZDJjOTliMGM2ZmU0MDFhMy4u
NjllNTNkN2JlYjg2Y2U2YjQwNmYzY2RiODM5MmFiNzJhM2ZmYzgyNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0ZyYW1lTG9hZFN0YXRlLmNwcApAQCAtOTAsMTEgKzkwLDggQEAgdm9pZCBG
cmFtZUxvYWRTdGF0ZTo6ZGlkRmluaXNoTG9hZCgpCiAKICAgICBtX3N0YXRlID0gU3RhdGU6OkZp
bmlzaGVkOwogCi0gICAgVmVjdG9yPE9ic2VydmVyKj4gb2JzZXJ2ZXJzQ29weTsKLSAgICBmb3Ig
KGF1dG8mIG9ic2VydmVyIDogbV9vYnNlcnZlcnMpCi0gICAgICAgIG9ic2VydmVyc0NvcHkuYXBw
ZW5kKCZvYnNlcnZlcik7Ci0gICAgZm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVyc0NvcHkp
Ci0gICAgICAgIG9ic2VydmVyLT5kaWRGaW5pc2hMb2FkKCk7CisgICAgZm9yIChhdXRvJiBvYnNl
cnZlciA6IGNvcHlUb1ZlY3Rvck9mPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8T2JzZXJ2ZXI+Piht
X29ic2VydmVycykpCisgICAgICAgIG9ic2VydmVyLmdldCgpLmRpZEZpbmlzaExvYWQoKTsKIH0K
IAogdm9pZCBGcmFtZUxvYWRTdGF0ZTo6ZGlkRmFpbExvYWQoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5kZXgg
Mzc0MDgxOTNiMGI3NjgyM2MwNDU4MWI0YjRlOTA2ZGQ0NDA5YTdhYi4uZTM4MDE2ZjFkZWI3Mzcz
MmQ1YTg1ZGMxZDQ2ZDEzZGYzNWE2OTFlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBAIC0xODQsOCArMTg0
LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9O
ZXdQcm9jZXNzKCkKICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbCA9
IGNvcHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1Rv
UmVnaXN0ZXJBc0xvY2FsKCkpOwogICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRB
c05vQWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24o
KS5zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3MoKSk7CiAgICAgcGFyYW1ldGVycy5jYWNoZU1v
ZGVsID0gTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLmNhY2hlTW9kZWwoKTsKLSAg
ICBmb3IgKGF1dG8mIHNjaGVtZSA6IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3Rv
bVByb3RvY29sSGFuZGxlcnMoKSkKLSAgICAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0
ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBlbmQoc2NoZW1lKTsKKyAgICBwYXJhbWV0ZXJzLnVy
bFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzID0gV2ViUHJvY2Vzc1Bvb2w6OnVy
bFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOworCiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICBpZiAoU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9j
ZXNzUG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOyAhY29va2llU3RvcmFnZURpcmVjdG9y
eS5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0gU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VEaXJlY3Rv
cnkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
VXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCmluZGV4IGZhMjU0
YzJkYWRjMDYzMDI4ZGZkNTA0ZDI4OTBhODkyYWVkYWZiMDguLjViYmU3Mzk2MjA1MjdhODI3Y2Q1
N2YxNjlhZjJmMGMwYzU5NmE3MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQ
cm94eS5jcHAKQEAgLTExNywxMSArMTE3LDExIEBAIFVzZXJDb250ZW50Q29udHJvbGxlclBhcmFt
ZXRlcnMgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnBhcmFtZXRlcnMoKSBjb25zCiAg
ICAgcGFyYW1ldGVycy5pZGVudGlmaWVyID0gaWRlbnRpZmllcigpOwogICAgIAogICAgIEFTU0VS
VChwYXJhbWV0ZXJzLnVzZXJDb250ZW50V29ybGRzLmlzRW1wdHkoKSk7Ci0gICAgZm9yIChjb25z
dCBhdXRvJiBpZGVudGlmaWVyIDogbV9hc3NvY2lhdGVkQ29udGVudFdvcmxkcykgeworICAgIHBh
cmFtZXRlcnMudXNlckNvbnRlbnRXb3JsZHMgPSBXVEY6Om1hcChtX2Fzc29jaWF0ZWRDb250ZW50
V29ybGRzLCBbXShhdXRvJiBpZGVudGlmaWVyKSB7CiAgICAgICAgIGF1dG8qIHdvcmxkID0gQVBJ
OjpDb250ZW50V29ybGQ6OndvcmxkRm9ySWRlbnRpZmllcihpZGVudGlmaWVyKTsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQod29ybGQpOwotICAgICAgICBwYXJhbWV0ZXJzLnVzZXJDb250ZW50V29y
bGRzLmFwcGVuZCh3b3JsZC0+d29ybGREYXRhKCkpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIHdv
cmxkLT53b3JsZERhdGEoKTsKKyAgICB9KTsKIAogICAgIGZvciAoYXV0byB1c2VyU2NyaXB0IDog
bV91c2VyU2NyaXB0cy0+ZWxlbWVudHNPZlR5cGU8QVBJOjpVc2VyU2NyaXB0PigpKQogICAgICAg
ICBwYXJhbWV0ZXJzLnVzZXJTY3JpcHRzLmFwcGVuZCh7IHVzZXJTY3JpcHQtPmlkZW50aWZpZXIo
KSwgdXNlclNjcmlwdC0+Y29udGVudFdvcmxkKCkuaWRlbnRpZmllcigpLCB1c2VyU2NyaXB0LT51
c2VyU2NyaXB0KCkgfSk7CkBAIC0xMjksOCArMTI5LDkgQEAgVXNlckNvbnRlbnRDb250cm9sbGVy
UGFyYW1ldGVycyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cGFyYW1ldGVycygpIGNv
bnMKICAgICBmb3IgKGF1dG8gdXNlclN0eWxlU2hlZXQgOiBtX3VzZXJTdHlsZVNoZWV0cy0+ZWxl
bWVudHNPZlR5cGU8QVBJOjpVc2VyU3R5bGVTaGVldD4oKSkKICAgICAgICAgcGFyYW1ldGVycy51
c2VyU3R5bGVTaGVldHMuYXBwZW5kKHsgdXNlclN0eWxlU2hlZXQtPmlkZW50aWZpZXIoKSwgdXNl
clN0eWxlU2hlZXQtPmNvbnRlbnRXb3JsZCgpLmlkZW50aWZpZXIoKSwgdXNlclN0eWxlU2hlZXQt
PnVzZXJTdHlsZVNoZWV0KCkgfSk7CiAKLSAgICBmb3IgKGF1dG8mIGhhbmRsZXIgOiBtX3Njcmlw
dE1lc3NhZ2VIYW5kbGVycy52YWx1ZXMoKSkKLSAgICAgICAgcGFyYW1ldGVycy5tZXNzYWdlSGFu
ZGxlcnMuYXBwZW5kKHsgaGFuZGxlci0+aWRlbnRpZmllcigpLCBoYW5kbGVyLT53b3JsZCgpLmlk
ZW50aWZpZXIoKSwgaGFuZGxlci0+bmFtZSgpIH0pOworICAgIHBhcmFtZXRlcnMubWVzc2FnZUhh
bmRsZXJzID0gV1RGOjptYXAobV9zY3JpcHRNZXNzYWdlSGFuZGxlcnMsIFtdKGF1dG8gZW50cnkp
IHsKKyAgICAgICAgcmV0dXJuIFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyRGF0YSB7IGVudHJ5LnZh
bHVlLT5pZGVudGlmaWVyKCksIGVudHJ5LnZhbHVlLT53b3JsZCgpLmlkZW50aWZpZXIoKSwgZW50
cnkudmFsdWUtPm5hbWUoKSB9OworICAgIH0pOwogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5T
SU9OUykKICAgICBwYXJhbWV0ZXJzLmNvbnRlbnRSdWxlTGlzdHMgPSBjb250ZW50UnVsZUxpc3RE
YXRhKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNh
dGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJBdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHAKaW5kZXggOTM0ODBlZDVj
YjM5YTYxY2JjZjY3MzUxZTBhODgwZWEwOWZlNDQ3Ni4uNjU3MmY1Mzk1OThlZjQxZGQxMDMwNWFj
ZWVjOGYxODdkOGQ1MjUyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
QXV0aGVudGljYXRpb24vQXV0aGVudGljYXRvck1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmNwcApA
QCAtNDE2LDExICs0MTYsMTEgQEAgdm9pZCBBdXRoZW50aWNhdG9yTWFuYWdlcjo6c3RhcnREaXNj
b3ZlcnkoY29uc3QgVHJhbnNwb3J0U2V0JiB0cmFuc3BvcnRzKQogewogICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CiAgICAgQVNTRVJUKG1fc2VydmljZXMuaXNFbXB0eSgpICYmIHRyYW5z
cG9ydHMuc2l6ZSgpIDw9IG1heFRyYW5zcG9ydE51bWJlcik7Ci0gICAgZm9yIChhdXRvJiB0cmFu
c3BvcnQgOiB0cmFuc3BvcnRzKSB7CisgICAgbV9zZXJ2aWNlcyA9IFdURjo6bWFwKHRyYW5zcG9y
dHMsIFt0aGlzXShhdXRvJiB0cmFuc3BvcnQpIHsKICAgICAgICAgYXV0byBzZXJ2aWNlID0gY3Jl
YXRlU2VydmljZSh0cmFuc3BvcnQsICp0aGlzKTsKICAgICAgICAgc2VydmljZS0+c3RhcnREaXNj
b3ZlcnkoKTsKLSAgICAgICAgbV9zZXJ2aWNlcy5hcHBlbmQoV1RGTW92ZShzZXJ2aWNlKSk7Ci0g
ICAgfQorICAgICAgICByZXR1cm4gc2VydmljZTsKKyAgICB9KTsKIH0KIAogdm9pZCBBdXRoZW50
aWNhdG9yTWFuYWdlcjo6aW5pdFRpbWVPdXRUaW1lcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmNwcAppbmRleCBjNzQzNDNlNjViODg5Zjc4NjlkYzhj
Y2EzNDA1MWI4YjI2NTQwMmI2Li5kZWM5ZTgzOTIyMzY4ZmU2MTU1ZTAzZDY5YTNmMzdkOWRiZjAx
Nzc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExp
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5j
cHAKQEAgLTM0MCwxNiArMzQwLDExIEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjpyZW1vdmVB
bGxJdGVtcygpCiAKICAgICBMT0coQmFja0ZvcndhcmQsICIoQmFjay9Gb3J3YXJkKSBXZWJCYWNr
Rm9yd2FyZExpc3QgJXAgcmVtb3ZlQWxsSXRlbXMgKGhhcyAlenUgb2YgdGhlbSkiLCB0aGlzLCBt
X2VudHJpZXMuc2l6ZSgpKTsKIAotICAgIFZlY3RvcjxSZWY8V2ViQmFja0ZvcndhcmRMaXN0SXRl
bT4+IHJlbW92ZWRJdGVtczsKLQotICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2VudHJpZXMpIHsK
KyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9lbnRyaWVzKQogICAgICAgICBkaWRSZW1vdmVJdGVt
KGVudHJ5KTsKLSAgICAgICAgcmVtb3ZlZEl0ZW1zLmFwcGVuZChXVEZNb3ZlKGVudHJ5KSk7Ci0g
ICAgfQogCi0gICAgbV9lbnRyaWVzLmNsZWFyKCk7CiAgICAgbV9jdXJyZW50SW5kZXggPSBzdGQ6
Om51bGxvcHQ7Ci0gICAgbV9wYWdlLT5kaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QobnVsbHB0ciwg
V1RGTW92ZShyZW1vdmVkSXRlbXMpKTsKKyAgICBtX3BhZ2UtPmRpZENoYW5nZUJhY2tGb3J3YXJk
TGlzdChudWxscHRyLCBzdGQ6OmV4Y2hhbmdlKG1fZW50cmllcywgeyB9KSk7CiB9CiAKIHZvaWQg
V2ViQmFja0ZvcndhcmRMaXN0OjpjbGVhcigpCkBAIC0zNjMsMjEgKzM1OCwxNyBAQCB2b2lkIFdl
YkJhY2tGb3J3YXJkTGlzdDo6Y2xlYXIoKQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8
V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4gY3VycmVudEl0ZW0gPSB0aGlzLT5jdXJyZW50SXRlbSgp
OwotICAgIFZlY3RvcjxSZWY8V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4+IHJlbW92ZWRJdGVtczsK
IAogICAgIGlmICghY3VycmVudEl0ZW0pIHsKICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZXZl
ciBoYXZlIG5vIGN1cnJlbnQgaXRlbSBpZiB3ZSBhbHNvIGhhdmUgbm8gY3VycmVudCBpdGVtIGlu
ZGV4LgogICAgICAgICBBU1NFUlQoIW1fY3VycmVudEluZGV4KTsKIAogICAgICAgICAvLyBCdXQg
anVzdCBpbiBjYXNlIGl0IGRvZXMgaGFwcGVuIGluIHByYWN0aWNlIHdlIHNob3VsZCBnZXQgYmFj
ayBpbnRvIGEgY29uc2lzdGVudCBzdGF0ZSBub3cuCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBkaWRSZW1vdmVJdGVtKG1fZW50cmllc1tp
XSk7Ci0gICAgICAgICAgICByZW1vdmVkSXRlbXMuYXBwZW5kKFdURk1vdmUobV9lbnRyaWVzW2ld
KSk7Ci0gICAgICAgIH0KKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fZW50cmllcykKKyAg
ICAgICAgICAgIGRpZFJlbW92ZUl0ZW0oZW50cnkpOwogCi0gICAgICAgIG1fZW50cmllcy5jbGVh
cigpOwogICAgICAgICBtX2N1cnJlbnRJbmRleCA9IHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgbV9w
YWdlLT5kaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QobnVsbHB0ciwgV1RGTW92ZShyZW1vdmVkSXRl
bXMpKTsKKyAgICAgICAgbV9wYWdlLT5kaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QobnVsbHB0ciwg
c3RkOjpleGNoYW5nZShtX2VudHJpZXMsIHsgfSkpOwogCiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0zODcsNiArMzc4LDcgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3Q6OmNsZWFyKCkKICAg
ICAgICAgICAgIGRpZFJlbW92ZUl0ZW0obV9lbnRyaWVzW2ldKTsKICAgICB9CiAKKyAgICBWZWN0
b3I8UmVmPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiByZW1vdmVkSXRlbXM7CiAgICAgcmVtb3Zl
ZEl0ZW1zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSAtIDEpOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCAmJiBp
ICE9ICptX2N1cnJlbnRJbmRleCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
b29sLmNwcAppbmRleCBmYTE3NDJjZjMyZGE5OTUyNzMyM2RmYzdjOGJmMGE3OTA2MzA0MWZlLi42
MWJkMzBhMzY0MTQ3M2M1ZGIyYzU3NDMwZTkzY2I3ZTI2NjNhZDg5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCkBAIC04NDksMTAgKzg0OSw5IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYg
cHJvY2VzcywgV2Vic2l0ZURhCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmluamVjdGVkQnVuZGxl
UGF0aEV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmhhbmRsZSk7CiAgICAgfQogCi0gICAgZm9y
IChhdXRvJiBwYXRoIDogbV9yZXNvbHZlZFBhdGhzLmFkZGl0aW9uYWxXZWJQcm9jZXNzU2FuZGJv
eEV4dGVuc2lvblBhdGhzKSB7Ci0gICAgICAgIGlmIChhdXRvIGhhbmRsZSA9ICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVXaXRob3V0UmVzb2x2aW5nUGF0aChwYXRoLCBTYW5kYm94RXh0
ZW5zaW9uOjpUeXBlOjpSZWFkT25seSkpCi0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFkZGl0aW9u
YWxTYW5kYm94RXh0ZW5zaW9uSGFuZGxlcy5hcHBlbmQoV1RGTW92ZSgqaGFuZGxlKSk7Ci0gICAg
fQorICAgIHBhcmFtZXRlcnMuYWRkaXRpb25hbFNhbmRib3hFeHRlbnNpb25IYW5kbGVzID0gV1RG
Ojpjb21wYWN0TWFwKG1fcmVzb2x2ZWRQYXRocy5hZGRpdGlvbmFsV2ViUHJvY2Vzc1NhbmRib3hF
eHRlbnNpb25QYXRocywgW10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlV2l0aG91dFJlc29sdmluZ1BhdGgocGF0aCwgU2FuZGJveEV4
dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHkpOworICAgIH0pOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICBzZXRKYXZhU2NyaXB0Q29uZmlndXJhdGlvbkZpbGVFbmFibGVkRnJvbURlZmF1
bHRzKCk7CkBAIC0xODcwLDE0ICsxODY5LDkgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVtb3Zl
UHJvY2Vzc0Zyb21PcmlnaW5DYWNoZVNldChXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiAgICAg
TE9HKFByb2Nlc3NTd2FwcGluZywgIihQcm9jZXNzU3dhcHBpbmcpIFJlbW92aW5nIHByb2Nlc3Mg
d2l0aCBwaWQgJWkgZnJvbSB0aGUgb3JpZ2luIGNhY2hlIHNldCIsIHByb2Nlc3MucHJvY2Vzc0lk
ZW50aWZpZXIoKSk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgdmVyeSBpbmVmZmljaWVu
dCBhcyB0aGUgbnVtYmVyIG9mIHJlbWVtYmVyZWQgb3JpZ2lucyBhbmQgcHJvY2Vzc2VzIGdyb3dz
Ci0gICAgVmVjdG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiByZWdpc3RyYWJsZURvbWFp
bnNUb1JlbW92ZTsKLSAgICBmb3IgKGF1dG8gZW50cnkgOiBtX3N3YXBwZWRQcm9jZXNzZXNQZXJS
ZWdpc3RyYWJsZURvbWFpbikgewotICAgICAgICBpZiAoZW50cnkudmFsdWUgPT0gJnByb2Nlc3Mp
Ci0gICAgICAgICAgICByZWdpc3RyYWJsZURvbWFpbnNUb1JlbW92ZS5hcHBlbmQoZW50cnkua2V5
KTsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIHJlZ2lzdHJhYmxlRG9tYWluIDogcmVnaXN0cmFi
bGVEb21haW5zVG9SZW1vdmUpCi0gICAgICAgIG1fc3dhcHBlZFByb2Nlc3Nlc1BlclJlZ2lzdHJh
YmxlRG9tYWluLnJlbW92ZShyZWdpc3RyYWJsZURvbWFpbik7CisgICAgbV9zd2FwcGVkUHJvY2Vz
c2VzUGVyUmVnaXN0cmFibGVEb21haW4ucmVtb3ZlSWYoWyZdKGF1dG8mIGVudHJ5KSB7CisgICAg
ICAgIHJldHVybiBlbnRyeS52YWx1ZSA9PSAmcHJvY2VzczsKKyAgICB9KTsKIH0KIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc0Zvck5hdmlnYXRpb24oV2ViUGFnZVByb3h5JiBwYWdlLCBj
b25zdCBBUEk6Ok5hdmlnYXRpb24mIG5hdmlnYXRpb24sIFJlZjxXZWJQcm9jZXNzUHJveHk+JiYg
c291cmNlUHJvY2VzcywgY29uc3QgVVJMJiBzb3VyY2VVUkwsIFByb2Nlc3NTd2FwUmVxdWVzdGVk
QnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgV2ViUHJvY2Vzc1Byb3h5OjpD
YXB0aXZlUG9ydGFsTW9kZSBjYXB0aXZlUG9ydGFsTW9kZSwgY29uc3QgRnJhbWVJbmZvRGF0YSYg
ZnJhbWVJbmZvLCBSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJiBkYXRhU3RvcmUsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoUmVmPFdlYlByb2Nlc3NQcm94eT4mJiwgU3VzcGVuZGVkUGFnZVByb3h5Kiwg
Y29uc3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAppbmRleCBiMTI4NjBkZjUxMGJjNGUzZGZiYjdlM2Zj
OTIwYjVkMDQyYjg0MzIxLi4zNjhhMzk1ODdkYTMzZGU2NGMxYjg5ZDBlNjM4ZDM4Yjg4ZDdhMTdi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKQEAgLTkz
Niw4ICs5MzYsOSBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6cHJvY2Vzc0RpZFRlcm1pbmF0ZU9y
RmFpbGVkVG9MYXVuY2goUHJvY2Vzc1Rlcm1pbmF0aW9uUmVhcwogCiAgICAgLy8gVGhlcmUgaXMg
YSBuZXN0ZWQgdHJhbnNhY3Rpb24gaW4gV2ViUGFnZVByb3h5OjpyZXNldFN0YXRlQWZ0ZXJQcm9j
ZXNzRXhpdGVkKCkgdGhhdCB3ZSBkb24ndCB3YW50IHRvIGNvbW1pdCBiZWZvcmUgdGhlIGNsaWVu
dCBjYWxsIGJlbG93IChkaXNwYXRjaFByb2Nlc3NEaWRUZXJtaW5hdGUpLgogICAgIFZlY3RvcjxQ
YWdlTG9hZFN0YXRlOjpUcmFuc2FjdGlvbj4gcGFnZUxvYWRTdGF0ZVRyYW5zYWN0aW9uczsKKyAg
ICBwYWdlTG9hZFN0YXRlVHJhbnNhY3Rpb25zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGFnZXMu
c2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIHBhZ2UgOiBwYWdlcykgewotICAgICAgICBwYWdlTG9h
ZFN0YXRlVHJhbnNhY3Rpb25zLmFwcGVuZChwYWdlLT5wYWdlTG9hZFN0YXRlKCkudHJhbnNhY3Rp
b24oKSk7CisgICAgICAgIHBhZ2VMb2FkU3RhdGVUcmFuc2FjdGlvbnMudW5jaGVja2VkQXBwZW5k
KHBhZ2UtPnBhZ2VMb2FkU3RhdGUoKS50cmFuc2FjdGlvbigpKTsKICAgICAgICAgcGFnZS0+cmVz
ZXRTdGF0ZUFmdGVyUHJvY2Vzc1Rlcm1pbmF0aW9uKHJlYXNvbik7CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3Jl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3Rv
cmUuY3BwCmluZGV4IGIzNmQ5YTc0YjlhMTc1YTA4MTZiN2EyZTE0ZjEzOWRiNWVmNTZlNmQuLmRm
YTdiMmE0Yzc1OTk5MmJiYzI1YmE2YWI5ZWNiYjBiMjgyYzQ0NzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3Bw
CkBAIC00MzEsOCArNDMxLDEwIEBAIHByaXZhdGU6CiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlu
cyhXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSkpIHsKICAgICAgICAgbV9xdWV1ZS0+ZGlzcGF0
Y2goW21lZGlhQ2FjaGVEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24tPm1lZGlhQ2FjaGVEaXJl
Y3RvcnkoKS5pc29sYXRlZENvcHkoKSwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7CiAgICAgICAgICAg
ICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgb3JpZ2lu
IDogV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6b3JpZ2luc0luTWVkaWFDYWNoZShtZWRpYUNh
Y2hlRGlyZWN0b3J5KSkKLSAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVu
ZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hl
LCAwIH0pOworICAgICAgICAgICAgYXV0byBvcmlnaW5zID0gV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudDo6b3JpZ2luc0luTWVkaWFDYWNoZShtZWRpYUNhY2hlRGlyZWN0b3J5KTsKKyAgICAgICAg
ICAgIHdlYnNpdGVEYXRhLmVudHJpZXMgPSBXVEY6Om1hcChvcmlnaW5zLCBbXShhdXRvJiBvcmln
aW4pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2lu
LCBXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSwgMCB9OworICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFdlYnNpdGVEYXRhKFdURk1vdmUod2Vic2l0
ZURhdGEpKTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtNDY5LDggKzQ3MSw5IEBAIHByaXZhdGU6
CiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRldmljZUlkSGFz
aFNhbHQpKSB7CiAgICAgICAgIG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UtPmdldERldmljZUlk
SGFzaFNhbHRPcmlnaW5zKFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1dG8mJiBvcmlnaW5zKSB7CiAg
ICAgICAgICAgICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsKLSAgICAgICAgICAgIHdoaWxlICgh
b3JpZ2lucy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcy5h
cHBlbmQoV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2lucy50YWtlQW55KCksIFdlYnNpdGVEYXRh
VHlwZTo6RGV2aWNlSWRIYXNoU2FsdCwgMCB9KTsKKyAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVu
dHJpZXMgPSBXVEY6Om1hcChvcmlnaW5zLCBbXShhdXRvJiBvcmlnaW4pIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6
OkRldmljZUlkSGFzaFNhbHQsIDAgfTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgY2Fs
bGJhY2tBZ2dyZWdhdG9yLT5hZGRXZWJzaXRlRGF0YShXVEZNb3ZlKHdlYnNpdGVEYXRhKSk7CiAg
ICAgICAgIH0pOwogICAgIH0KQEAgLTQ3OSwxMCArNDgyLDExIEBAIHByaXZhdGU6CiAgICAgICAg
IG1fcXVldWUtPmRpc3BhdGNoKFtmZXRjaE9wdGlvbnMsIGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3Rv
cnkgPSBtX2NvbmZpZ3VyYXRpb24tPmFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkoKS5pc29sYXRl
ZENvcHkoKSwgYXBwbGljYXRpb25DYWNoZUZsYXRGaWxlU3ViZGlyZWN0b3J5TmFtZSA9IG1fY29u
ZmlndXJhdGlvbi0+YXBwbGljYXRpb25DYWNoZUZsYXRGaWxlU3ViZGlyZWN0b3J5TmFtZSgpLmlz
b2xhdGVkQ29weSgpLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKICAgICAgICAgICAgIGF1dG8gc3Rv
cmFnZSA9IFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjcmVhdGUoYXBwbGljYXRp
b25DYWNoZURpcmVjdG9yeSwgYXBwbGljYXRpb25DYWNoZUZsYXRGaWxlU3ViZGlyZWN0b3J5TmFt
ZSk7CiAgICAgICAgICAgICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsKLSAgICAgICAgICAgIGZv
ciAoYXV0byYgb3JpZ2luIDogc3RvcmFnZS0+b3JpZ2luc1dpdGhDYWNoZSgpKSB7CisgICAgICAg
ICAgICBhdXRvIG9yaWdpbnMgPSBzdG9yYWdlLT5vcmlnaW5zV2l0aENhY2hlKCk7CisgICAgICAg
ICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzID0gV1RGOjptYXAob3JpZ2lucywgWyZdKGF1dG8mIG9y
aWdpbikgewogICAgICAgICAgICAgICAgIHVpbnQ2NF90IHNpemUgPSBmZXRjaE9wdGlvbnMuY29u
dGFpbnMoV2Vic2l0ZURhdGFGZXRjaE9wdGlvbjo6Q29tcHV0ZVNpemVzKSA/IHN0b3JhZ2UtPmRp
c2tVc2FnZUZvck9yaWdpbihvcmlnaW4pIDogMDsKLSAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0
YS5lbnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRh
VHlwZTo6T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGUsIHNpemUgfSk7Ci0gICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vi
c2l0ZURhdGFUeXBlOjpPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZSwgc2l6ZSB9OworICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFdlYnNpdGVEYXRh
KFdURk1vdmUod2Vic2l0ZURhdGEpKTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtNDkwLDggKzQ5
NCw5IEBAIHByaXZhdGU6CiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5
cGU6OldlYlNRTERhdGFiYXNlcykgJiYgaXNQZXJzaXN0ZW50KCkpIHsKICAgICAgICAgbV9xdWV1
ZS0+ZGlzcGF0Y2goW3dlYlNRTERhdGFiYXNlRGlyZWN0b3J5ID0gbV9jb25maWd1cmF0aW9uLT53
ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSgpLmlzb2xhdGVkQ29weSgpLCBjYWxsYmFja0FnZ3JlZ2F0
b3JdKCkgewogICAgICAgICAgICAgV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGE7Ci0gICAgICAgICAg
ICBmb3IgKGF1dG8mIG9yaWdpbiA6IFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcldp
dGhEYXRhYmFzZVBhdGgod2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkpLT5vcmlnaW5zKCkpCi0gICAg
ICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmQoV2Vic2l0ZURhdGE6OkVudHJ5
IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6OldlYlNRTERhdGFiYXNlcywgMCB9KTsKKyAgICAg
ICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMgPSBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRy
YWNrZXJXaXRoRGF0YWJhc2VQYXRoKHdlYlNRTERhdGFiYXNlRGlyZWN0b3J5KS0+b3JpZ2lucygp
Lm1hcChbXShhdXRvJiBvcmlnaW4pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURh
dGE6OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6OldlYlNRTERhdGFiYXNlcywgMCB9
OworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFdl
YnNpdGVEYXRhKFdURk1vdmUod2Vic2l0ZURhdGEpKTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAt
NDk5LDggKzUwNCw5IEBAIHByaXZhdGU6CiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJz
aXRlRGF0YVR5cGU6Ok1lZGlhS2V5cykgJiYgaXNQZXJzaXN0ZW50KCkpIHsKICAgICAgICAgbV9x
dWV1ZS0+ZGlzcGF0Y2goW21lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRp
b24tPm1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoKS5pc29sYXRlZENvcHkoKSwgY2FsbGJhY2tB
Z2dyZWdhdG9yXSB7CiAgICAgICAgICAgICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsKLSAgICAg
ICAgICAgIGZvciAoYXV0byYgb3JpZ2luIDogbWVkaWFLZXlPcmlnaW5zKG1lZGlhS2V5c1N0b3Jh
Z2VEaXJlY3RvcnkpKQotICAgICAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5k
KFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpNZWRpYUtleXMs
IDAgfSk7CisgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzID0gbWVkaWFLZXlPcmlnaW5z
KG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkpLm1hcChbXShhdXRvJiBvcmlnaW4pIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0
YVR5cGU6Ok1lZGlhS2V5cywgMCB9OworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBjYWxs
YmFja0FnZ3JlZ2F0b3ItPmFkZFdlYnNpdGVEYXRhKFdURk1vdmUod2Vic2l0ZURhdGEpKTsKICAg
ICAgICAgfSk7CiAgICAgfQpAQCAtNjY3LDggKzY3Myw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9y
ZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0
IFZlCiAgICAgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gb3JpZ2luczsKIAog
ICAgIGZvciAoY29uc3QgYXV0byYgZGF0YVJlY29yZCA6IGRhdGFSZWNvcmRzKSB7CisgICAgICAg
IG9yaWdpbnMucmVzZXJ2ZUNhcGFjaXR5KG9yaWdpbnMuc2l6ZSgpICsgZGF0YVJlY29yZC5vcmln
aW5zLnNpemUoKSk7CiAgICAgICAgIGZvciAoYXV0byYgb3JpZ2luIDogZGF0YVJlY29yZC5vcmln
aW5zKQotICAgICAgICAgICAgb3JpZ2lucy5hcHBlbmQob3JpZ2luKTsKKyAgICAgICAgICAgIG9y
aWdpbnMudW5jaGVja2VkQXBwZW5kKG9yaWdpbik7CiAgICAgfQogCiAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBSZW1vdmFsQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoKnRoaXMsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTcwNywxMyArNzE0LDE2IEBAIHZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRh
VHlwZXMsIGNvbnN0IFZlCiAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBIU1RTQ2FjaGVIb3N0
TmFtZXM7CiAgICAgICAgICAgICBWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IHJl
Z2lzdHJhYmxlRG9tYWluczsKICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgZGF0YVJlY29y
ZCA6IGRhdGFSZWNvcmRzKSB7CisgICAgICAgICAgICAgICAgY29va2llSG9zdE5hbWVzLnJlc2Vy
dmVDYXBhY2l0eShjb29raWVIb3N0TmFtZXMuc2l6ZSgpICsgZGF0YVJlY29yZC5jb29raWVIb3N0
TmFtZXMuc2l6ZSgpKTsKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGhvc3ROYW1lIDogZGF0
YVJlY29yZC5jb29raWVIb3N0TmFtZXMpCi0gICAgICAgICAgICAgICAgICAgIGNvb2tpZUhvc3RO
YW1lcy5hcHBlbmQoaG9zdE5hbWUpOworICAgICAgICAgICAgICAgICAgICBjb29raWVIb3N0TmFt
ZXMudW5jaGVja2VkQXBwZW5kKGhvc3ROYW1lKTsKKyAgICAgICAgICAgICAgICBIU1RTQ2FjaGVI
b3N0TmFtZXMucmVzZXJ2ZUNhcGFjaXR5KEhTVFNDYWNoZUhvc3ROYW1lcy5zaXplKCkgKyBkYXRh
UmVjb3JkLkhTVFNDYWNoZUhvc3ROYW1lcy5zaXplKCkpOwogICAgICAgICAgICAgICAgIGZvciAo
YXV0byYgaG9zdE5hbWUgOiBkYXRhUmVjb3JkLkhTVFNDYWNoZUhvc3ROYW1lcykKLSAgICAgICAg
ICAgICAgICAgICAgSFNUU0NhY2hlSG9zdE5hbWVzLmFwcGVuZChob3N0TmFtZSk7CisgICAgICAg
ICAgICAgICAgICAgIEhTVFNDYWNoZUhvc3ROYW1lcy51bmNoZWNrZWRBcHBlbmQoaG9zdE5hbWUp
OwogI2lmIEVOQUJMRShJTlRFTExJR0VOVF9UUkFDS0lOR19QUkVWRU5USU9OKQorICAgICAgICAg
ICAgICAgIHJlZ2lzdHJhYmxlRG9tYWlucy5yZXNlcnZlQ2FwYWNpdHkocmVnaXN0cmFibGVEb21h
aW5zLnNpemUoKSArIGRhdGFSZWNvcmQucmVzb3VyY2VMb2FkU3RhdGlzdGljc1JlZ2lzdHJhYmxl
RG9tYWlucy5zaXplKCkpOwogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgcmVnaXN0cmFibGVE
b21haW4gOiBkYXRhUmVjb3JkLnJlc291cmNlTG9hZFN0YXRpc3RpY3NSZWdpc3RyYWJsZURvbWFp
bnMpCi0gICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhYmxlRG9tYWlucy5hcHBlbmQocmVnaXN0
cmFibGVEb21haW4pOworICAgICAgICAgICAgICAgICAgICByZWdpc3RyYWJsZURvbWFpbnMudW5j
aGVja2VkQXBwZW5kKHJlZ2lzdHJhYmxlRG9tYWluKTsKICNlbmRpZgogICAgICAgICAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvVGV4dENoZWNrZXJJT1Mu
bW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvVGV4dENoZWNrZXJJT1MubW0KaW5kZXgg
ZmEzYmM1MGIyNGZhZjJlZTVmZWU3NDZkMmJlYzgwNGFhNGFmYjcyYy4uYzJkYjEyODBkN2I1MjM0
ODBlNGM2YjIxYjFmZWZmZmE2NmYyNmUzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1RleHRDaGVja2VySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9UZXh0Q2hlY2tlcklPUy5tbQpAQCAtMzQsNiArMzQsNyBAQAogI2ltcG9ydCA8d3RmL0hh
c2hNYXAuaD4KICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2ltcG9ydCA8d3RmL1Jl
dGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3
dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMjQwLDEyICsy
NDEsMTMgQEAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4
dE9mUGFyYWdyYXBoKFNwZWxsRG9jdW1lbnRUYWcgc3AKICAgICAgICAgICAgICAgICBUZXh0Q2hl
Y2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAgICAgICAgIHJlc3VsdC50eXBlID0gVGV4dENo
ZWNraW5nVHlwZTo6U3BlbGxpbmc7CiAgICAgICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVz
dWx0UmFuZ2U7Ci0gICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKKyAgICAg
ICAgICAgICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAg
fSBlbHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZUdyYW1tYXIgJiYgY2hl
Y2tpbmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKSkgewogICAgICAg
ICAgICAgICAgIFRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICAgICAgTlNB
cnJheSAqZGV0YWlscyA9IFtpbmNvbWluZ1Jlc3VsdCBncmFtbWFyRGV0YWlsc107CiAgICAgICAg
ICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyOwogICAgICAg
ICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJhbmdlOworICAgICAgICAgICAgICAgIHJl
c3VsdC5kZXRhaWxzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGV0YWlscy5jb3VudCk7CiAgICAg
ICAgICAgICAgICAgZm9yIChOU0RpY3Rpb25hcnkgKmluY29taW5nRGV0YWlsIGluIGRldGFpbHMp
IHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGluY29taW5nRGV0YWlsKTsKICAgICAgICAg
ICAgICAgICAgICAgR3JhbW1hckRldGFpbCBkZXRhaWw7CkBAIC0yNTksMTMgKzI2MSwxMCBAQCBW
ZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgoU3BlbGxEb2N1bWVudFRhZyBzcAogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgZGV0YWlsLnJhbmdlID0gZGV0YWlsTlNSYW5nZTsKICAgICAgICAgICAgICAgICAg
ICAgZGV0YWlsLnVzZXJEZXNjcmlwdGlvbiA9IFtpbmNvbWluZ0RldGFpbCBvYmplY3RGb3JLZXk6
QCJOU0dyYW1tYXJVc2VyRGVzY3JpcHRpb24iXTsKLSAgICAgICAgICAgICAgICAgICAgTlNBcnJh
eSAqZ3Vlc3NlcyA9IFtpbmNvbWluZ0RldGFpbCBvYmplY3RGb3JLZXk6QCJOU0dyYW1tYXJDb3Jy
ZWN0aW9ucyJdOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgZm9y
IChOU1N0cmluZyAqZ3Vlc3MgaW4gZ3Vlc3NlcykKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
dGFpbC5ndWVzc2VzLmFwcGVuZChndWVzcyk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5k
ZXRhaWxzLmFwcGVuZChkZXRhaWwpOworICAgICAgICAgICAgICAgICAgICBkZXRhaWwuZ3Vlc3Nl
cyA9IG1ha2VWZWN0b3I8U3RyaW5nPihbaW5jb21pbmdEZXRhaWwgb2JqZWN0Rm9yS2V5OkAiTlNH
cmFtbWFyQ29ycmVjdGlvbnMiXSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5kZXRhaWxz
LnVuY2hlY2tlZEFwcGVuZChkZXRhaWwpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBw
ZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVs
c2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0FjdGlvblNoZWV0
QXNzaXN0YW50Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRB
c3Npc3RhbnQubW0KaW5kZXggYzlhZTFhNjY3NzcxYjI2MTA5NTg1NGVhZTU5ZTI4NWFiNzUyZjY3
Yi4uNDVkZDJlMTM0YzRkODc4ZjY1YjE2ZjlkZjQ0ZDYxNDAxMzU5ZmJiOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0KKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0K
QEAgLTIwNywxMiArMjA3LDExIEBAIC0gKENHUmVjdClwcmVzZW50YXRpb25SZWN0Rm9yRWxlbWVu
dFVzaW5nQ2xvc2VzdEluZGljYXRlZFJlY3QKIAogICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgdG91
Y2hMb2NhdGlvbiA9IF9wb3NpdGlvbkluZm9ybWF0aW9uLT5yZXF1ZXN0LnBvaW50OwogICAgIFdl
YkNvcmU6OkZsb2F0UG9pbnQgbGlua0VsZW1lbnRMb2NhdGlvbiA9IGluZGljYXRvci50ZXh0Qm91
bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCk7Ci0gICAgVmVjdG9yPFdl
YkNvcmU6OkZsb2F0UmVjdD4gaW5kaWNhdGVkUmVjdHM7Ci0gICAgZm9yIChhdXRvIHJlY3QgOiBp
bmRpY2F0b3IudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcykgeworICAgIGF1dG8g
aW5kaWNhdGVkUmVjdHMgPSBpbmRpY2F0b3IudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGlu
YXRlcy5tYXAoWyZdKGF1dG8gcmVjdCkgewogICAgICAgICByZWN0LmluZmxhdGUoMik7CiAgICAg
ICAgIHJlY3QubW92ZUJ5KGxpbmtFbGVtZW50TG9jYXRpb24pOwotICAgICAgICBpbmRpY2F0ZWRS
ZWN0cy5hcHBlbmQocmVjdCk7Ci0gICAgfQorICAgICAgICByZXR1cm4gcmVjdDsKKyAgICB9KTsK
IAogICAgIGZvciAoY29uc3QgYXV0byYgcGF0aCA6IFdlYkNvcmU6OlBhdGhVdGlsaXRpZXM6OnBh
dGhzV2l0aFNocmlua1dyYXBwZWRSZWN0cyhpbmRpY2F0ZWRSZWN0cywgMCkpIHsKICAgICAgICAg
YXV0byBib3VuZGluZ1JlY3QgPSBwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbQppbmRleCAxNmQ2ODM4ZTU0OGUw
NDMyZmJkMThmOGQ0ZDJhZGUxYzJjMTA4ZjZlLi5lY2UyZTNlMjQ1MzE1ZWU3MWFkOTc5N2ZhNmNj
ODBiNDI5MzMwZDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvVGV4
dENoZWNrZXJNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1RleHRDaGVj
a2VyTWFjLm1tCkBAIC0zNDQsMTIgKzM0NCwxMyBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0
PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3BlbGxEb2N1bWVudFRhZyBzcAog
ICAgICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgIHJlc3Vs
dC50eXBlID0gVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmc7CiAgICAgICAgICAgICByZXN1bHQu
cmFuZ2UgPSByZXN1bHRSYW5nZTsKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7
CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICB9
IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiBjaGVj
a2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpKSB7CiAgICAgICAg
ICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAgICAgTlNBcnJheSAqZGV0
YWlscyA9IFtpbmNvbWluZ1Jlc3VsdCBncmFtbWFyRGV0YWlsc107CiAgICAgICAgICAgICByZXN1
bHQudHlwZSA9IFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXI7CiAgICAgICAgICAgICByZXN1bHQu
cmFuZ2UgPSByZXN1bHRSYW5nZTsKKyAgICAgICAgICAgIHJlc3VsdC5kZXRhaWxzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoZGV0YWlscy5jb3VudCk7CiAgICAgICAgICAgICBmb3IgKE5TRGljdGlv
bmFyeSAqaW5jb21pbmdEZXRhaWwgaW4gZGV0YWlscykgewogICAgICAgICAgICAgICAgIEFTU0VS
VChpbmNvbWluZ0RldGFpbCk7CiAgICAgICAgICAgICAgICAgR3JhbW1hckRldGFpbCBkZXRhaWw7
CkBAIC0zNjEsOSArMzYyLDggQEAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNr
ZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFNwZWxsRG9jdW1lbnRUYWcgc3AKICAgICAgICAgICAg
ICAgICBkZXRhaWwucmFuZ2UgPSBkZXRhaWxOU1JhbmdlOwogICAgICAgICAgICAgICAgIGRldGFp
bC51c2VyRGVzY3JpcHRpb24gPSBbaW5jb21pbmdEZXRhaWwgb2JqZWN0Rm9yS2V5Ok5TR3JhbW1h
clVzZXJEZXNjcmlwdGlvbl07CiAgICAgICAgICAgICAgICAgTlNBcnJheSAqZ3Vlc3NlcyA9IFtp
bmNvbWluZ0RldGFpbCBvYmplY3RGb3JLZXk6TlNHcmFtbWFyQ29ycmVjdGlvbnNdOwotICAgICAg
ICAgICAgICAgIGZvciAoTlNTdHJpbmcgKmd1ZXNzIGluIGd1ZXNzZXMpCi0gICAgICAgICAgICAg
ICAgICAgIGRldGFpbC5ndWVzc2VzLmFwcGVuZChTdHJpbmcoZ3Vlc3MpKTsKLSAgICAgICAgICAg
ICAgICByZXN1bHQuZGV0YWlscy5hcHBlbmQoZGV0YWlsKTsKKyAgICAgICAgICAgICAgICBkZXRh
aWwuZ3Vlc3NlcyA9IG1ha2VWZWN0b3I8U3RyaW5nPihndWVzc2VzKTsKKyAgICAgICAgICAgICAg
ICByZXN1bHQuZGV0YWlscy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShkZXRhaWwpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7CiAgICAgICAgIH0g
ZWxzZSBpZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVMaW5rICYmIGNoZWNraW5n
VHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6TGluaykpIHsKQEAgLTM3MSwzMSArMzcx
LDMxIEBAIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRP
ZlBhcmFncmFwaChTcGVsbERvY3VtZW50VGFnIHNwCiAgICAgICAgICAgICByZXN1bHQudHlwZSA9
IFRleHRDaGVja2luZ1R5cGU6Okxpbms7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1
bHRSYW5nZTsKICAgICAgICAgICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IFtbaW5jb21pbmdSZXN1
bHQgVVJMXSBhYnNvbHV0ZVN0cmluZ107Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1
bHQpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAg
ICAgfSBlbHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZVF1b3RlICYmIGNo
ZWNraW5nVHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6UXVvdGUpKSB7CiAgICAgICAg
ICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAgICAgcmVzdWx0LnR5cGUg
PSBUZXh0Q2hlY2tpbmdUeXBlOjpRdW90ZTsKICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJl
c3VsdFJhbmdlOwogICAgICAgICAgICAgcmVzdWx0LnJlcGxhY2VtZW50ID0gW2luY29taW5nUmVz
dWx0IHJlcGxhY2VtZW50U3RyaW5nXTsKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3Vs
dCk7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAg
ICB9IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlRGFzaCAmJiBjaGVj
a2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkRhc2gpKSB7CiAgICAgICAgICAg
ICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBU
ZXh0Q2hlY2tpbmdUeXBlOjpEYXNoOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0
UmFuZ2U7CiAgICAgICAgICAgICByZXN1bHQucmVwbGFjZW1lbnQgPSBbaW5jb21pbmdSZXN1bHQg
cmVwbGFjZW1lbnRTdHJpbmddOwotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsK
KyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgIH0g
ZWxzZSBpZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVSZXBsYWNlbWVudCAmJiBj
aGVja2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50KSkgewog
ICAgICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgIHJlc3Vs
dC50eXBlID0gVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQ7CiAgICAgICAgICAgICByZXN1
bHQucmFuZ2UgPSByZXN1bHRSYW5nZTsKICAgICAgICAgICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9
IFtpbmNvbWluZ1Jlc3VsdCByZXBsYWNlbWVudFN0cmluZ107Ci0gICAgICAgICAgICByZXN1bHRz
LmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1
bHQpKTsKICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlw
ZUNvcnJlY3Rpb24gJiYgY2hlY2tpbmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpD
b3JyZWN0aW9uKSkgewogICAgICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAg
ICAgICAgICAgIHJlc3VsdC50eXBlID0gVGV4dENoZWNraW5nVHlwZTo6Q29ycmVjdGlvbjsKICAg
ICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJhbmdlOwogICAgICAgICAgICAgcmVzdWx0
LnJlcGxhY2VtZW50ID0gW2luY29taW5nUmVzdWx0IHJlcGxhY2VtZW50U3RyaW5nXTsKLSAgICAg
ICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVu
ZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yLmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3Iu
Y3BwCmluZGV4IDczNTc2YTI0N2NlMTE3NTI3NTY1ZmIxZDI2YjRjZDA5YjI0NzJlOWYuLjEyN2Fj
MWU0NTc3MTViZjdkZmIwZTljOTNhMTA0MjBiNGY1YzM1NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3Iu
Y3BwCkBAIC05OCw5ICs5OCw5IEBAIHZvaWQgV2ViUGF5bWVudENvb3JkaW5hdG9yOjpvcGVuUGF5
bWVudFNldHVwKGNvbnN0IFN0cmluZyYgbWVyY2hhbnRJZGVudGlmaWVyLCBjCiAKIGJvb2wgV2Vi
UGF5bWVudENvb3JkaW5hdG9yOjpzaG93UGF5bWVudFVJKGNvbnN0IFVSTCYgb3JpZ2luYXRpbmdV
UkwsIGNvbnN0IFZlY3RvcjxVUkw+JiBsaW5rSWNvblVSTHMsIGNvbnN0IFdlYkNvcmU6OkFwcGxl
UGF5U2Vzc2lvblBheW1lbnRSZXF1ZXN0JiBwYXltZW50UmVxdWVzdCkKIHsKLSAgICBWZWN0b3I8
U3RyaW5nPiBsaW5rSWNvblVSTFN0cmluZ3M7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBsaW5rSWNv
blVSTCA6IGxpbmtJY29uVVJMcykKLSAgICAgICAgbGlua0ljb25VUkxTdHJpbmdzLmFwcGVuZChs
aW5rSWNvblVSTC5zdHJpbmcoKSk7CisgICAgYXV0byBsaW5rSWNvblVSTFN0cmluZ3MgPSBsaW5r
SWNvblVSTHMubWFwKFtdKGF1dG8mIGxpbmtJY29uVVJMKSB7CisgICAgICAgIHJldHVybiBsaW5r
SWNvblVSTC5zdHJpbmcoKTsKKyAgICB9KTsKIAogICAgIGJvb2wgcmVzdWx0OwogICAgIGlmICgh
c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpTaG93UGF5bWVu
dFVJKG1fd2ViUGFnZS5pZGVudGlmaWVyKCksIG1fd2ViUGFnZS53ZWJQYWdlUHJveHlJZGVudGlm
aWVyKCksIG9yaWdpbmF0aW5nVVJMLnN0cmluZygpLCBsaW5rSWNvblVSTFN0cmluZ3MsIHBheW1l
bnRSZXF1ZXN0KSwgTWVzc2FnZXM6OldlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpTaG93UGF5
bWVudFVJOjpSZXBseShyZXN1bHQpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5jcHAK
aW5kZXggYjBmZTgzNTcyMjNiMzEzM2ZjNGRiMmZiYWFkOGU3MzlmNWUzYjlkNi4uZjQ1Y2ZiNDE5
MTM2YjdjZjA4ZTNiZmQ0OTZiMmI2OTdhM2M5ZWZlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Np
b25Qcm94eS5jcHAKQEAgLTgwNSwxMyArODA1LDEyIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Np
b25Qcm94eTo6c2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWQoV2ViQ29yZTo6UGFnZUlkZW50aWZp
CiAgICAgYXV0byYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8V2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudD4oKmNvcmVFbGVtZW50KTsKICAgICBWZWN0b3I8UmVmPFdlYkNvcmU6OkZpbGU+PiBmaWxl
T2JqZWN0czsKICAgICBpZiAoaW5wdXRFbGVtZW50Lm11bHRpcGxlKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIGZpbGVzID0gaW5wdXRFbGVtZW50LmZpbGVzKCkpIHsKLSAgICAgICAgICAgIGZvciAo
YXV0byYgZmlsZSA6IGZpbGVzLT5maWxlcygpKQotICAgICAgICAgICAgICAgIGZpbGVPYmplY3Rz
LmFwcGVuZChmaWxlLmNvcHlSZWYoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8qIGZp
bGVzID0gaW5wdXRFbGVtZW50LmZpbGVzKCkpCisgICAgICAgICAgICBmaWxlT2JqZWN0cy5hcHBl
bmRWZWN0b3IoZmlsZXMtPmZpbGVzKCkpOwogICAgIH0KKyAgICBmaWxlT2JqZWN0cy5yZXNlcnZl
Q2FwYWNpdHkoZmlsZU9iamVjdHMuc2l6ZSgpICsgZmlsZW5hbWVzLnNpemUoKSk7CiAgICAgZm9y
IChjb25zdCBhdXRvJiBwYXRoIDogZmlsZW5hbWVzKQotICAgICAgICBmaWxlT2JqZWN0cy5hcHBl
bmQoV2ViQ29yZTo6RmlsZTo6Y3JlYXRlKCZpbnB1dEVsZW1lbnQuZG9jdW1lbnQoKSwgcGF0aCkp
OworICAgICAgICBmaWxlT2JqZWN0cy51bmNoZWNrZWRBcHBlbmQoV2ViQ29yZTo6RmlsZTo6Y3Jl
YXRlKCZpbnB1dEVsZW1lbnQuZG9jdW1lbnQoKSwgcGF0aCkpOwogICAgIGlucHV0RWxlbWVudC5z
ZXRGaWxlcyhXZWJDb3JlOjpGaWxlTGlzdDo6Y3JlYXRlKFdURk1vdmUoZmlsZU9iamVjdHMpKSk7
CiAKICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGQ6Om51bGxvcHQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXll
ck1hbmFnZXIuY3BwCmluZGV4IDdjOWQ0NTY5YTRlNTBiMDcxM2E3N2E4YjRhYzI0MGZhZTQ2ZGRk
MWUuLjgxM2FmMjg1OTgzY2I4MmMzMGYyNGUyNTM3MTU1YzdmMGYzYjYxMjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5h
Z2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1l
ZGlhUGxheWVyTWFuYWdlci5jcHAKQEAgLTE2MCw4ICsxNjAsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8
TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlPiBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXI6OmNy
ZWF0ZVJlbQogICAgIHByb3h5Q29uZmlndXJhdGlvbi5pc1ZpZGVvID0gcGxheWVyLT5pc1ZpZGVv
UGxheWVyKCk7CiAKICNpZiBFTkFCTEUoQVZGX0NBUFRJT05TKQotICAgIGZvciAoY29uc3QgYXV0
byYgdHJhY2sgOiBwbGF5ZXItPm91dE9mQmFuZFRyYWNrU291cmNlcygpKQotICAgICAgICBwcm94
eUNvbmZpZ3VyYXRpb24ub3V0T2ZCYW5kVHJhY2tEYXRhLmFwcGVuZCh0cmFjay0+ZGF0YSgpKTsK
KyAgICBwcm94eUNvbmZpZ3VyYXRpb24ub3V0T2ZCYW5kVHJhY2tEYXRhID0gcGxheWVyLT5vdXRP
ZkJhbmRUcmFja1NvdXJjZXMoKS5tYXAoW10oYXV0byYgdHJhY2spIHsKKyAgICAgICAgcmV0dXJu
IHRyYWNrLT5kYXRhKCk7CisgICAgfSk7CiAjZW5kaWYKIAogICAgIGF1dG8gZG9jdW1lbnRTZWN1
cml0eU9yaWdpbiA9IHBsYXllci0+ZG9jdW1lbnRTZWN1cml0eU9yaWdpbigpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9Tb3VyY2VCdWZmZXJQcml2YXRl
UmVtb3RlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvU291cmNlQnVm
ZmVyUHJpdmF0ZVJlbW90ZS5jcHAKaW5kZXggOTY2ZmM5M2I3N2FmYWEzZTYyMDhkN2FiYTVhZWQy
YzdhOTRjNzRiMi4uNGVmMTY0MGE0MDEwMDZhNmI4ZjY5Y2M1MDExNjRhOGJkMTkwZWI5MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9Tb3VyY2VCdWZmZXJQ
cml2YXRlUmVtb3RlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlh
L1NvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGUuY3BwCkBAIC0zMzgsMTYgKzMzOCwxMSBAQCB2b2lk
IFNvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGU6OnVwZGF0ZVRyYWNrSWRzKFZlY3RvcjxzdGQ6OnBh
aXI8QXRvbVN0cmluZywgQXRvbQogICAgIGlmICghbV9ncHVQcm9jZXNzQ29ubmVjdGlvbikKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjxUcmFja1ByaXZhdGVSZW1vdGVJ
ZGVudGlmaWVyLCBUcmFja1ByaXZhdGVSZW1vdGVJZGVudGlmaWVyPj4gaWRlbnRpZmllclBhaXJz
OwotCi0gICAgZm9yIChhdXRvJiB0cmFja0lkUGFpciA6IHRyYWNrSWRQYWlycykgeworICAgIGF1
dG8gaWRlbnRpZmllclBhaXJzID0gdHJhY2tJZFBhaXJzLm1hcChbdGhpc10oYXV0byYgdHJhY2tJ
ZFBhaXIpIHsKICAgICAgICAgQVNTRVJUKG1fcHJldlRyYWNrSWRlbnRpZmllck1hcC5jb250YWlu
cyh0cmFja0lkUGFpci5maXJzdCkpOwogICAgICAgICBBU1NFUlQobV90cmFja0lkZW50aWZpZXJN
YXAuY29udGFpbnModHJhY2tJZFBhaXIuc2Vjb25kKSk7Ci0KLSAgICAgICAgYXV0byBvbGRJZGVu
dGlmaWVyID0gbV9wcmV2VHJhY2tJZGVudGlmaWVyTWFwLnRha2UodHJhY2tJZFBhaXIuZmlyc3Qp
OwotICAgICAgICBhdXRvIG5ld0lkZW50aWZpZXIgPSBtX3RyYWNrSWRlbnRpZmllck1hcC5nZXQo
dHJhY2tJZFBhaXIuc2Vjb25kKTsKLSAgICAgICAgaWRlbnRpZmllclBhaXJzLmFwcGVuZChzdGQ6
Om1ha2VfcGFpcihvbGRJZGVudGlmaWVyLCBuZXdJZGVudGlmaWVyKSk7Ci0gICAgfQorICAgICAg
ICByZXR1cm4gc3RkOjpwYWlyIHsgbV9wcmV2VHJhY2tJZGVudGlmaWVyTWFwLnRha2UodHJhY2tJ
ZFBhaXIuZmlyc3QpLCBtX3RyYWNrSWRlbnRpZmllck1hcC5nZXQodHJhY2tJZFBhaXIuc2Vjb25k
KSB9OworICAgIH0pOwogCiAgICAgbV9ncHVQcm9jZXNzQ29ubmVjdGlvbi0+Y29ubmVjdGlvbigp
LnNlbmQoTWVzc2FnZXM6OlJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5OjpVcGRhdGVUcmFja0lkcyhp
ZGVudGlmaWVyUGFpcnMpLCBtX3JlbW90ZVNvdXJjZUJ1ZmZlcklkZW50aWZpZXIpOwogfQpAQCAt
MzgzLDI3ICszNzgsMzAgQEAgdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlOjpzb3VyY2VC
dWZmZXJQcml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWUKICAgICBzZWdtZW50LmR1
cmF0aW9uID0gc2VnbWVudEluZm8uZHVyYXRpb247CiAKICAgICBtX3ByZXZUcmFja0lkZW50aWZp
ZXJNYXAuc3dhcChtX3RyYWNrSWRlbnRpZmllck1hcCk7CisgICAgc2VnbWVudC5hdWRpb1RyYWNr
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNlZ21lbnRJbmZvLmF1ZGlvVHJhY2tzLnNpemUoKSk7
CiAgICAgZm9yIChhdXRvJiBhdWRpb1RyYWNrIDogc2VnbWVudEluZm8uYXVkaW9UcmFja3MpIHsK
ICAgICAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25TZWdtZW50
OjpBdWRpb1RyYWNrSW5mb3JtYXRpb24gaW5mbzsKICAgICAgICAgaW5mby50cmFjayA9IG1fbWVk
aWFQbGF5ZXJQcml2YXRlLT5hdWRpb1RyYWNrUHJpdmF0ZVJlbW90ZShhdWRpb1RyYWNrLmlkZW50
aWZpZXIpOwogICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0gUmVtb3RlTWVkaWFEZXNjcmlwdGlv
bjo6Y3JlYXRlKGF1ZGlvVHJhY2suZGVzY3JpcHRpb24pOwotICAgICAgICBzZWdtZW50LmF1ZGlv
VHJhY2tzLmFwcGVuZChpbmZvKTsKKyAgICAgICAgc2VnbWVudC5hdWRpb1RyYWNrcy51bmNoZWNr
ZWRBcHBlbmQoaW5mbyk7CiAgICAgICAgIG1fdHJhY2tJZGVudGlmaWVyTWFwLmFkZChpbmZvLnRy
YWNrLT5pZCgpLCBhdWRpb1RyYWNrLmlkZW50aWZpZXIpOwogICAgIH0KIAorICAgIHNlZ21lbnQu
dmlkZW9UcmFja3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzZWdtZW50SW5mby52aWRlb1RyYWNr
cy5zaXplKCkpOwogICAgIGZvciAoYXV0byYgdmlkZW9UcmFjayA6IHNlZ21lbnRJbmZvLnZpZGVv
VHJhY2tzKSB7CiAgICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0
aW9uU2VnbWVudDo6VmlkZW9UcmFja0luZm9ybWF0aW9uIGluZm87CiAgICAgICAgIGluZm8udHJh
Y2sgPSBtX21lZGlhUGxheWVyUHJpdmF0ZS0+dmlkZW9UcmFja1ByaXZhdGVSZW1vdGUodmlkZW9U
cmFjay5pZGVudGlmaWVyKTsKICAgICAgICAgaW5mby5kZXNjcmlwdGlvbiA9IFJlbW90ZU1lZGlh
RGVzY3JpcHRpb246OmNyZWF0ZSh2aWRlb1RyYWNrLmRlc2NyaXB0aW9uKTsKLSAgICAgICAgc2Vn
bWVudC52aWRlb1RyYWNrcy5hcHBlbmQoaW5mbyk7CisgICAgICAgIHNlZ21lbnQudmlkZW9UcmFj
a3MudW5jaGVja2VkQXBwZW5kKGluZm8pOwogICAgICAgICBtX3RyYWNrSWRlbnRpZmllck1hcC5h
ZGQoaW5mby50cmFjay0+aWQoKSwgdmlkZW9UcmFjay5pZGVudGlmaWVyKTsKICAgICB9CiAKKyAg
ICBzZWdtZW50LnRleHRUcmFja3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzZWdtZW50SW5mby50
ZXh0VHJhY2tzLnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiB0ZXh0VHJhY2sgOiBzZWdtZW50SW5m
by50ZXh0VHJhY2tzKSB7CiAgICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRp
YWxpemF0aW9uU2VnbWVudDo6VGV4dFRyYWNrSW5mb3JtYXRpb24gaW5mbzsKICAgICAgICAgaW5m
by50cmFjayA9IG1fbWVkaWFQbGF5ZXJQcml2YXRlLT50ZXh0VHJhY2tQcml2YXRlUmVtb3RlKHRl
eHRUcmFjay5pZGVudGlmaWVyKTsKICAgICAgICAgaW5mby5kZXNjcmlwdGlvbiA9IFJlbW90ZU1l
ZGlhRGVzY3JpcHRpb246OmNyZWF0ZSh0ZXh0VHJhY2suZGVzY3JpcHRpb24pOwotICAgICAgICBz
ZWdtZW50LnRleHRUcmFja3MuYXBwZW5kKGluZm8pOworICAgICAgICBzZWdtZW50LnRleHRUcmFj
a3MudW5jaGVja2VkQXBwZW5kKGluZm8pOwogICAgICAgICBtX3RyYWNrSWRlbnRpZmllck1hcC5h
ZGQoaW5mby50cmFjay0+aWQoKSwgdGV4dFRyYWNrLmlkZW50aWZpZXIpOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29k
ZWNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0Nv
ZGVjcy5jcHAKaW5kZXggZDA3MGMyYjc5ZGY0MGNhY2I0MThmMDY3ODI2N2U0YzNiNGE1NDYxYy4u
MWMyMjczNDMyNTQ1YWJmM2M5MDZiODVkYzE3ZDliOTlkNGUxZjdhZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3Bw
CkBAIC0zOTIsOSArMzkyLDkgQEAgTGliV2ViUlRDQ29kZWNzOjpFbmNvZGVyKiBMaWJXZWJSVEND
b2RlY3M6OmNyZWF0ZUVuY29kZXIoVHlwZSB0eXBlLCBjb25zdCBzdGQ6Om0KICAgICBlbmNvZGVy
LT5pZGVudGlmaWVyID0gUlRDRW5jb2RlcklkZW50aWZpZXI6OmdlbmVyYXRlVGhyZWFkU2FmZSgp
OwogICAgIGVuY29kZXItPmNvZGVjVHlwZSA9IHRvV2ViUlRDQ29kZWNUeXBlKHR5cGUpOwogCi0g
ICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IHBhcmFtZXRlcnM7Ci0gICAgZm9y
IChhdXRvJiBrZXlWYWx1ZSA6IGZvcm1hdFBhcmFtZXRlcnMpCi0gICAgICAgIHBhcmFtZXRlcnMu
YXBwZW5kKHN0ZDo6bWFrZV9wYWlyKFN0cmluZzo6ZnJvbVVURjgoa2V5VmFsdWUuZmlyc3QuZGF0
YSgpLCBrZXlWYWx1ZS5maXJzdC5sZW5ndGgoKSksIFN0cmluZzo6ZnJvbVVURjgoa2V5VmFsdWUu
c2Vjb25kLmRhdGEoKSwga2V5VmFsdWUuc2Vjb25kLmxlbmd0aCgpKSkpOworICAgIGF1dG8gcGFy
YW1ldGVycyA9IFdURjo6bWFwKGZvcm1hdFBhcmFtZXRlcnMsIFtdKGF1dG8mIGVudHJ5KSB7Cisg
ICAgICAgIHJldHVybiBzdGQ6OnBhaXIgeyBTdHJpbmc6OmZyb21VVEY4KGVudHJ5LmZpcnN0LmRh
dGEoKSwgZW50cnkuZmlyc3QubGVuZ3RoKCkpLCBTdHJpbmc6OmZyb21VVEY4KGVudHJ5LnNlY29u
ZC5kYXRhKCksIGVudHJ5LnNlY29uZC5sZW5ndGgoKSkgfTsKKyAgICB9KTsKIAogICAgIGVuc3Vy
ZUdQVVByb2Nlc3NDb25uZWN0aW9uQW5kRGlzcGF0Y2hUb1RocmVhZChbdGhpcywgZW5jb2RlciA9
IFdURk1vdmUoZW5jb2RlciksIHR5cGUsIHBhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMp
XSgpIG11dGFibGUgewogICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3Zl
cmxheS5jcHAKaW5kZXggZDg1NDJhMmIxMGIxYjNlMTUzNjE0MTU0MTE1ZWY3ZWNlYzQ0ZWI4OC4u
NmY4Zjc0NTM1OTI0NTNlMGU2MTg2NzYxMjQ0ZTBiNzc5MjIxZGU3OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92
ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcApAQCAtMTk3LDExICsxOTcsMTMgQEAgcHJpdmF0
ZToKICAgICAgICAgYXV0byB3a05hbWVzID0gbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgp
LmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXModG9BUEkoJnBhZ2VPdmVybGF5KSwgcGFy
YW1lcml6ZWROYW1lcywgbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmJhc2UuY2xpZW50
SW5mbyk7CiAKICAgICAgICAgc2l6ZV90IGNvdW50ID0gV0tBcnJheUdldFNpemUod2tOYW1lcyk7
CisgICAgICAgIG5hbWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY291bnQpOwogICAgICAgICBm
b3IgKHNpemVfdCBrID0gMDsgayA8IGNvdW50OyBrKyspIHsKICAgICAgICAgICAgIFdLVHlwZVJl
ZiBpdGVtID0gV0tBcnJheUdldEl0ZW1BdEluZGV4KHdrTmFtZXMsIGspOwogICAgICAgICAgICAg
aWYgKFdlYktpdDo6dG9JbXBsKGl0ZW0pLT50eXBlKCkgPT0gQVBJOjpTdHJpbmc6OkFQSVR5cGUp
Ci0gICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKFdlYktpdDo6dG9XVEZTdHJpbmcoc3RhdGlj
X2Nhc3Q8V0tTdHJpbmdSZWY+KGl0ZW0pKSk7CisgICAgICAgICAgICAgICAgbmFtZXMudW5jaGVj
a2VkQXBwZW5kKFdlYktpdDo6dG9XVEZTdHJpbmcoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KGl0
ZW0pKSk7CiAgICAgICAgIH0KKyAgICAgICAgbmFtZXMuc2hyaW5rVG9GaXQoKTsKIAogICAgICAg
ICByZXR1cm4gbmFtZXM7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1Nlc3Npb25TdGF0ZUNvbnZlcnNpb24uY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1Nlc3Npb25TdGF0ZUNvbnZlcnNpb24uY3Bw
CmluZGV4IGM4ZjI0OGE2NDc2NTc2YTI5MmM3NWQ1ZmFhNjhmNWFjNjNhNDc1YzguLjU2N2Q0NzUx
YmVlODNhM2IzZjRmNmUwZmEyMzc3YmQwMDYzNTBhMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9TZXNzaW9uU3RhdGVDb252ZXJzaW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvU2Vzc2lvblN0YXRl
Q29udmVyc2lvbi5jcHAKQEAgLTk5LDEwICs5OSw5IEBAIHN0YXRpYyBGcmFtZVN0YXRlIHRvRnJh
bWVTdGF0ZShjb25zdCBIaXN0b3J5SXRlbSYgaGlzdG9yeUl0ZW0pCiAgICAgZnJhbWVTdGF0ZS5v
YnNjdXJlZEluc2V0cyA9IGhpc3RvcnlJdGVtLm9ic2N1cmVkSW5zZXRzKCk7CiAjZW5kaWYKIAot
ICAgIGZvciAoYXV0byYgY2hpbGRIaXN0b3J5SXRlbSA6IGhpc3RvcnlJdGVtLmNoaWxkcmVuKCkp
IHsKLSAgICAgICAgRnJhbWVTdGF0ZSBjaGlsZEZyYW1lU3RhdGUgPSB0b0ZyYW1lU3RhdGUoY2hp
bGRIaXN0b3J5SXRlbSk7Ci0gICAgICAgIGZyYW1lU3RhdGUuY2hpbGRyZW4uYXBwZW5kKFdURk1v
dmUoY2hpbGRGcmFtZVN0YXRlKSk7Ci0gICAgfQorICAgIGZyYW1lU3RhdGUuY2hpbGRyZW4gPSBo
aXN0b3J5SXRlbS5jaGlsZHJlbigpLm1hcChbXShhdXRvJiBjaGlsZEhpc3RvcnlJdGVtKSB7Cisg
ICAgICAgIHJldHVybiB0b0ZyYW1lU3RhdGUoY2hpbGRIaXN0b3J5SXRlbSk7CisgICAgfSk7CiAK
ICAgICByZXR1cm4gZnJhbWVTdGF0ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVy
LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEZXZpY2VP
cmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyLmNwcAppbmRleCBmOWFmOWFiOTNmN2UwMTI4NzczNjUw
YzFkMjQ5NWFkZGUzOWZkNDM1Li4xZDExZjQyM2MxNzg4ZDU5N2ZmMjU3OGVlNjBkOWNiNjE2YTBk
ZDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlci5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJv
dmlkZXIuY3BwCkBAIC04MywxMSArODMsNyBAQCB2b2lkIFdlYkRldmljZU9yaWVudGF0aW9uVXBk
YXRlUHJvdmlkZXI6OnN0b3BVcGRhdGluZ0RldmljZU1vdGlvbihXZWJDb3JlOjpNb3RpbwogCiB2
b2lkIFdlYkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXI6OmRldmljZU9yaWVudGF0aW9u
Q2hhbmdlZChkb3VibGUgYWxwaGEsIGRvdWJsZSBiZXRhLCBkb3VibGUgZ2FtbWEsIGRvdWJsZSBj
b21wYXNzSGVhZGluZywgZG91YmxlIGNvbXBhc3NBY2N1cmFjeSkKIHsKLSAgICBWZWN0b3I8V2Vh
a1B0cjxXZWJDb3JlOjpNb3Rpb25NYW5hZ2VyQ2xpZW50Pj4gY2xpZW50czsKLSAgICBmb3IgKGF1
dG8mIGNsaWVudCA6IG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRzKQotICAgICAgICBjbGllbnRz
LmFwcGVuZChjbGllbnQpOwotCi0gICAgZm9yIChhdXRvJiBjbGllbnQgOiBjbGllbnRzKSB7Cisg
ICAgZm9yIChhdXRvJiBjbGllbnQgOiBjb3B5VG9WZWN0b3JPZjxXZWFrUHRyPFdlYkNvcmU6Ok1v
dGlvbk1hbmFnZXJDbGllbnQ+PihtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50cykpIHsKICAgICAg
ICAgaWYgKGNsaWVudCkKICAgICAgICAgICAgIGNsaWVudC0+b3JpZW50YXRpb25DaGFuZ2VkKGFs
cGhhLCBiZXRhLCBnYW1tYSwgY29tcGFzc0hlYWRpbmcsIGNvbXBhc3NBY2N1cmFjeSk7CiAgICAg
fQpAQCAtOTUsMTEgKzkxLDcgQEAgdm9pZCBXZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3Zp
ZGVyOjpkZXZpY2VPcmllbnRhdGlvbkNoYW5nZWQoZG91YmxlIGFscGhhLAogCiB2b2lkIFdlYkRl
dmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXI6OmRldmljZU1vdGlvbkNoYW5nZWQoZG91Ymxl
IHhBY2NlbGVyYXRpb24sIGRvdWJsZSB5QWNjZWxlcmF0aW9uLCBkb3VibGUgekFjY2VsZXJhdGlv
biwgZG91YmxlIHhBY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5LCBkb3VibGUgeUFjY2VsZXJh
dGlvbkluY2x1ZGluZ0dyYXZpdHksIGRvdWJsZSB6QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0
eSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHhSb3RhdGlvblJhdGUsIHN0ZDo6b3B0aW9uYWw8ZG91
YmxlPiB5Um90YXRpb25SYXRlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gelJvdGF0aW9uUmF0ZSkK
IHsKLSAgICBWZWN0b3I8V2Vha1B0cjxXZWJDb3JlOjpNb3Rpb25NYW5hZ2VyQ2xpZW50Pj4gY2xp
ZW50czsKLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IG1fZGV2aWNlTW90aW9uQ2xpZW50cykKLSAg
ICAgICAgY2xpZW50cy5hcHBlbmQoY2xpZW50KTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIGNsaWVu
dCA6IGNsaWVudHMpIHsKKyAgICBmb3IgKGF1dG8mIGNsaWVudCA6IGNvcHlUb1ZlY3Rvck9mPFdl
YWtQdHI8V2ViQ29yZTo6TW90aW9uTWFuYWdlckNsaWVudD4+KG1fZGV2aWNlTW90aW9uQ2xpZW50
cykpIHsKICAgICAgICAgaWYgKGNsaWVudCkKICAgICAgICAgICAgIGNsaWVudC0+bW90aW9uQ2hh
bmdlZCh4QWNjZWxlcmF0aW9uLCB5QWNjZWxlcmF0aW9uLCB6QWNjZWxlcmF0aW9uLCB4QWNjZWxl
cmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwgeUFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHksICB6
QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwgeFJvdGF0aW9uUmF0ZSwgeVJvdGF0aW9uUmF0
ZSwgelJvdGF0aW9uUmF0ZSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuY3BwIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMu
Y3BwCmluZGV4IGRmZGRhMTc2OTkzNjAwNDQ3YTBjOTNjYzg0NjBmNWU2OGIyYzI0ODEuLjMxOGY3
YzNkMjkzMzJjMDJhZDJjZTMwZDkwZTdjZmU2ZjU1YzMyMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGFzdGVi
b2FyZE92ZXJyaWRlcy5jcHAKQEAgLTcxLDE4ICs3MSwxMyBAQCB2b2lkIFdlYlBhc3RlYm9hcmRP
dmVycmlkZXM6OnJlbW92ZU92ZXJyaWRlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNv
bnN0CiAKIFZlY3RvcjxTdHJpbmc+IFdlYlBhc3RlYm9hcmRPdmVycmlkZXM6Om92ZXJyaWRkZW5U
eXBlcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewotICAgIFZlY3RvcjxTdHJpbmc+
IHJlc3VsdDsKLQogICAgIGF1dG8gaXQgPSBtX292ZXJyaWRlc01hcC5maW5kKHBhc3RlYm9hcmRO
YW1lKTsKICAgICBpZiAoaXQgPT0gbV9vdmVycmlkZXNNYXAuZW5kKCkpCi0gICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBBU1NFUlQoaXQtPnZhbHVlKTsK
IAotICAgIGZvciAoU3RyaW5nJiB0eXBlIDogaXQtPnZhbHVlLT5rZXlzKCkpCi0gICAgICAgIHJl
c3VsdC5hcHBlbmQodHlwZSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBjb3B5
VG9WZWN0b3IoaXQtPnZhbHVlLT5rZXlzKCkpOwogfQogCiBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6
OlBhc3RlYm9hcmRJdGVtSW5mbz4gV2ViUGFzdGVib2FyZE92ZXJyaWRlczo6b3ZlcnJpZGRlbklu
Zm8oY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJTcGVlY2hTeW50aGVzaXNDbGllbnQuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlNwZWVjaFN5bnRo
ZXNpc0NsaWVudC5jcHAKaW5kZXggYzRkMGRjYzAzZDVkYTZhMDQ4M2VkZjU2ZDFlNDM5NTI3YmM5
NWY4OC4uYzU3ZTc4MDliMmVlMTY2ZGQ2ZjY4OGJlMjJhODU5YzdkYWRkYThmYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlNwZWVjaFN5bnRo
ZXNpc0NsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYlNwZWVjaFN5bnRoZXNpc0NsaWVudC5jcHAKQEAgLTQyLDkgKzQyLDkgQEAgY29uc3Qg
VmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlPj4mIFdl
YlNwZWVjaFN5bnRoZXNpc0MKICAgICBWZWN0b3I8V2ViU3BlZWNoU3ludGhlc2lzVm9pY2U+IHZv
aWNlTGlzdDsKICAgICBtX3BhZ2Uuc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U3Bl
ZWNoU3ludGhlc2lzVm9pY2VMaXN0KCksIHZvaWNlTGlzdCk7CiAKLSAgICBtX3ZvaWNlcy5jbGVh
cigpOwotICAgIGZvciAoYXV0byYgdm9pY2UgOiB2b2ljZUxpc3QpCi0gICAgICAgIG1fdm9pY2Vz
LmFwcGVuZChXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlOjpjcmVhdGUodm9p
Y2Uudm9pY2VVUkksIHZvaWNlLm5hbWUsIHZvaWNlLmxhbmcsIHZvaWNlLmxvY2FsU2VydmljZSwg
dm9pY2UuZGVmYXVsdExhbmcpKTsKKyAgICBtX3ZvaWNlcyA9IHZvaWNlTGlzdC5tYXAoW10oYXV0
byYgdm9pY2UpIC0+IFJlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNl
PiB7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNl
OjpjcmVhdGUodm9pY2Uudm9pY2VVUkksIHZvaWNlLm5hbWUsIHZvaWNlLmxhbmcsIHZvaWNlLmxv
Y2FsU2VydmljZSwgdm9pY2UuZGVmYXVsdExhbmcpOworICAgIH0pOwogICAgIHJldHVybiBtX3Zv
aWNlczsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
RmluZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmlu
ZENvbnRyb2xsZXIuY3BwCmluZGV4IGI1MTM0ZDBkMmM1ZDdjNTJmNmZhYzk2ODA0NDFhY2MzZWVi
ZjY1ZmQuLjFkNjQzYjZiNDI4OGQwOGUwMzhjNDYyNWQwNTQ5ZGU2OGFmMmFhNzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAK
QEAgLTI3MiwxMCArMjcyLDkgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6ZmluZFN0cmluZ01hdGNo
ZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcsIE9wdGlvblNldDxGaW5kT3B0aW8KICAgICBhdXRvIHJl
c3VsdCA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+ZmluZFRleHRNYXRjaGVzKHN0cmluZywgY29y
ZShvcHRpb25zKSwgbWF4TWF0Y2hDb3VudCk7CiAgICAgbV9maW5kTWF0Y2hlcyA9IFdURk1vdmUo
cmVzdWx0LnJhbmdlcyk7CiAKLSAgICBWZWN0b3I8VmVjdG9yPEludFJlY3Q+PiBtYXRjaFJlY3Rz
OwotICAgIGZvciAoYXV0byYgcmFuZ2UgOiBtX2ZpbmRNYXRjaGVzKQotICAgICAgICBtYXRjaFJl
Y3RzLmFwcGVuZChSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKHJhbmdlKSk7Ci0KKyAg
ICBhdXRvIG1hdGNoUmVjdHMgPSBtX2ZpbmRNYXRjaGVzLm1hcChbXShhdXRvJiByYW5nZSkgewor
ICAgICAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cyhyYW5nZSk7Cisg
ICAgfSk7CiAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZp
bmRTdHJpbmdNYXRjaGVzKHN0cmluZywgbWF0Y2hSZWN0cywgcmVzdWx0LmluZGV4Rm9yU2VsZWN0
aW9uKSk7CiAKICAgICBpZiAoIW9wdGlvbnMuY29udGFpbnMoRmluZE9wdGlvbnM6OlNob3dPdmVy
bGF5KSAmJiAhb3B0aW9ucy5jb250YWlucyhGaW5kT3B0aW9uczo6U2hvd0ZpbmRJbmRpY2F0b3Ip
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRU
ZXh0UmFuZ2VDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAKaW5kZXggNzQ4MDJjNDc4NzU1ZmZlNjFi
OTMwOTJjYmNhNmQwYWM3Y2NjOWM4My4uMmM5YjQ1N2RiY2EwN2E2ZWIxMjY4OWE3OGYwZGQ1YjI5
MTRhMjFjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
Rm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwCkBAIC0yNDgsMTEgKzI0
OCwxMCBAQCB2b2lkIFdlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6ZHJhd1JlY3QoV2ViQ29y
ZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaAogICAgICAgICBhdXRvIHRleHRCb3VuZGlu
Z1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBtX3RleHRJbmRpY2F0b3ItPnRleHRCb3VuZGlu
Z1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMoKTsKICAgICAgICAgYXV0byB0ZXh0UmVjdHNJbkJv
dW5kaW5nUmVjdENvb3JkaW5hdGVzID0gbV90ZXh0SW5kaWNhdG9yLT50ZXh0UmVjdHNJbkJvdW5k
aW5nUmVjdENvb3JkaW5hdGVzKCk7CiAKLSAgICAgICAgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVj
dD4gdGV4dFJlY3RzSW5Sb290Vmlld0Nvb3JkaW5hdGVzOwotICAgICAgICBmb3IgKGF1dG8gcmVj
dCA6IHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMpIHsKKyAgICAgICAgYXV0byB0
ZXh0UmVjdHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENv
b3JkaW5hdGVzLm1hcChbJl0oYXV0byByZWN0KSB7CiAgICAgICAgICAgICByZWN0Lm1vdmVCeSh0
ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCkpOwotICAgICAg
ICAgICAgdGV4dFJlY3RzSW5Sb290Vmlld0Nvb3JkaW5hdGVzLmFwcGVuZChyZWN0KTsKLSAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlY3Q7CisgICAgICAgIH0pOwogCiAgICAgICAgIGF1
dG8gcGF0aHMgPSBXZWJDb3JlOjpQYXRoVXRpbGl0aWVzOjpwYXRoc1dpdGhTaHJpbmtXcmFwcGVk
UmVjdHModGV4dFJlY3RzSW5Sb290Vmlld0Nvb3JkaW5hdGVzLCBpbmRpY2F0b3JSYWRpdXMpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDcz
MWUwMDM4MmIwNjI4MTE0MGMzYmYyNzZiYzQyY2JkMmVhYzVjY2EuLjZhMDE0ZmQ3N2YwMWJmZmRh
OGUwMDI4MTNmNjM4ZTE4ODdmNzg4OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0zMDMxLDcgKzMwMzEsNyBAQCB2b2lkIFdlYlBhZ2U6Om1v
dXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VFdmVudCwgc3RkOjpvcHRpb25hbDxW
ZWN0b3I8UwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVmVjdG9yPFJlZlB0cjxTYW5k
Ym94RXh0ZW5zaW9uPj4gbW91c2VFdmVudFNhbmRib3hFeHRlbnNpb25zOworICAgIFZlY3RvcjxS
ZWY8U2FuZGJveEV4dGVuc2lvbj4+IG1vdXNlRXZlbnRTYW5kYm94RXh0ZW5zaW9uczsKICAgICBp
ZiAoc2FuZGJveEV4dGVuc2lvbnMpCiAgICAgICAgIG1vdXNlRXZlbnRTYW5kYm94RXh0ZW5zaW9u
cyA9IGNvbnN1bWVTYW5kYm94RXh0ZW5zaW9ucyhXVEZNb3ZlKCpzYW5kYm94RXh0ZW5zaW9ucykp
OwogCkBAIC03ODU3LDIxICs3ODU3LDE5IEBAIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSYg
V2ViUGFnZTo6ZW5zdXJlUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KCkKIH0KICNlbmRpZgog
Ci1WZWN0b3I8UmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiBXZWJQYWdlOjpjb25zdW1lU2FuZGJv
eEV4dGVuc2lvbnMoVmVjdG9yPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4mJiBzYW5kYm94RXh0
ZW5zaW9ucykKK1ZlY3RvcjxSZWY8U2FuZGJveEV4dGVuc2lvbj4+IFdlYlBhZ2U6OmNvbnN1bWVT
YW5kYm94RXh0ZW5zaW9ucyhWZWN0b3I8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiYmIHNhbmRi
b3hFeHRlbnNpb25zKQogewotICAgIFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+IGRy
YWdTYW5kYm94RXh0ZW5zaW9uczsKLSAgICBmb3IgKGF1dG8mIHNhbmRib3hFeHRlbnNpb24gOiBz
YW5kYm94RXh0ZW5zaW9ucykgeworICAgIHJldHVybiBXVEY6OmNvbXBhY3RNYXAoV1RGTW92ZShz
YW5kYm94RXh0ZW5zaW9ucyksIFtdKGF1dG8mJiBzYW5kYm94RXh0ZW5zaW9uKSAtPiBSZWZQdHI8
U2FuZGJveEV4dGVuc2lvbj4gewogICAgICAgICBhdXRvIGV4dGVuc2lvbiA9IFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZShXVEZNb3ZlKHNhbmRib3hFeHRlbnNpb24pKTsKICAgICAgICAgaWYgKCFl
eHRlbnNpb24pCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICBib29sIG9rID0gZXh0ZW5zaW9uLT5jb25zdW1lKCk7CiAgICAgICAgIEFT
U0VSVF9VTlVTRUQob2ssIG9rKTsKLSAgICAgICAgZHJhZ1NhbmRib3hFeHRlbnNpb25zLmFwcGVu
ZChXVEZNb3ZlKGV4dGVuc2lvbikpOwotICAgIH0KLSAgICByZXR1cm4gZHJhZ1NhbmRib3hFeHRl
bnNpb25zOworICAgICAgICByZXR1cm4gZXh0ZW5zaW9uOworICAgIH0pOwogfQogCi12b2lkIFdl
YlBhZ2U6OnJldm9rZVNhbmRib3hFeHRlbnNpb25zKFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVu
c2lvbj4+JiBzYW5kYm94RXh0ZW5zaW9ucykKK3ZvaWQgV2ViUGFnZTo6cmV2b2tlU2FuZGJveEV4
dGVuc2lvbnMoVmVjdG9yPFJlZjxTYW5kYm94RXh0ZW5zaW9uPj4mIHNhbmRib3hFeHRlbnNpb25z
KQogewogICAgIGZvciAoYXV0byYgc2FuZGJveEV4dGVuc2lvbiA6IHNhbmRib3hFeHRlbnNpb25z
KQogICAgICAgICBzYW5kYm94RXh0ZW5zaW9uLT5yZXZva2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCA2OWRlMTRhYTk4MzQzODhhNDA1MjQ3N2Mz
NjE4MWQ3ZDVhMmY3Y2NmLi42NTRiOGM5YzYwMDJkMGVkOWIyYzYyY2UwYzMxZWE5YmZkYjBiZWY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC0xOTY5
LDggKzE5NjksOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBwbGF0Zm9ybURpZFNjYWxlUGFnZSgp
OwogCi0gICAgVmVjdG9yPFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPj4gY29uc3VtZVNhbmRib3hF
eHRlbnNpb25zKFZlY3RvcjxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+JiYpOwotICAgIHZvaWQg
cmV2b2tlU2FuZGJveEV4dGVuc2lvbnMoVmVjdG9yPFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPj4m
IHNhbmRib3hFeHRlbnNpb25zKTsKKyAgICBWZWN0b3I8UmVmPFNhbmRib3hFeHRlbnNpb24+PiBj
b25zdW1lU2FuZGJveEV4dGVuc2lvbnMoVmVjdG9yPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4m
Jik7CisgICAgdm9pZCByZXZva2VTYW5kYm94RXh0ZW5zaW9ucyhWZWN0b3I8UmVmPFNhbmRib3hF
eHRlbnNpb24+PiYgc2FuZGJveEV4dGVuc2lvbnMpOwogCiAgICAgdm9pZCBzZXRTZWxlY3Rpb25S
YW5nZShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSwg
Ym9vbCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9XZWJQYWdlTWFjLm1tCmluZGV4IDlkYzAwZGEyNzcwYzE5Mzk4OTFhMzAwZjIzMzc0OTZhOWM4
ZTcwMWQuLmJkMzY3MjA3NWI3NTc2OGM4NDE0Nzc4ZmM2NjVmNWQ3NWI0ZTI0YWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBA
IC03NTQsMTEgKzc1NCw4IEBAIHZvaWQgV2ViUGFnZTo6aGFuZGxlU2VsZWN0aW9uU2VydmljZUNs
aWNrKEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGNvbnN0IFZlY3RvCiAKICAgICBOU0RhdGEg
KnNlbGVjdGlvbkRhdGEgPSBbYXR0cmlidXRlZFNlbGVjdGlvbiBSVEZERnJvbVJhbmdlOk5TTWFr
ZVJhbmdlKDAsIFthdHRyaWJ1dGVkU2VsZWN0aW9uIGxlbmd0aF0pIGRvY3VtZW50QXR0cmlidXRl
czpAeyB9XTsKIAotICAgIFZlY3Rvcjx1aW50OF90PiBzZWxlY3Rpb25EYXRhVmVjdG9yOwotICAg
IHNlbGVjdGlvbkRhdGFWZWN0b3IuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KHNlbGVjdGlvbkRhdGEuYnl0ZXMpLCBzZWxlY3Rpb25EYXRhLmxlbmd0aCk7Ci0KICAgICBm
bHVzaFBlbmRpbmdFZGl0b3JTdGF0ZVVwZGF0ZSgpOwotICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6U2hvd0NvbnRleHRNZW51KENvbnRleHRNZW51Q29udGV4dERhdGEocG9pbnQsIHNl
bGVjdGlvbkRhdGFWZWN0b3IsIHBob25lTnVtYmVycywgc2VsZWN0aW9uLnNlbGVjdGlvbigpLmlz
Q29udGVudEVkaXRhYmxlKCkpLCBVc2VyRGF0YSgpKSk7CisgICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpTaG93Q29udGV4dE1lbnUoQ29udGV4dE1lbnVDb250ZXh0RGF0YShwb2ludCwg
VmVjdG9yIHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc2VsZWN0aW9uRGF0YS5i
eXRlcyksIHNlbGVjdGlvbkRhdGEubGVuZ3RoIH0sIHBob25lTnVtYmVycywgc2VsZWN0aW9uLnNl
bGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpLCBVc2VyRGF0YSgpKSk7CiB9CiAKIHZvaWQg
V2ViUGFnZTo6aGFuZGxlSW1hZ2VTZXJ2aWNlQ2xpY2soY29uc3QgSW50UG9pbnQmIHBvaW50LCBJ
bWFnZSYgaW1hZ2UsIEhUTUxJbWFnZUVsZW1lbnQmIGVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUHJvY2Vzcy5jcHAKaW5kZXggNzk5NjEzZDM3NzQyMzYzYmZiZGNkOTUyOTc5OTYy
MjA2ZjAyMjhhOC4uODk5MGVkZDc2Y2FiOTZjMmRlY2QzYjk2MDU0Y2ZmNjI5NWJiMGNmNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcApAQCAtMTQ1Miw4ICsxNDUyLDEw
IEBAIHZvaWQgV2ViUHJvY2Vzczo6ZmV0Y2hXZWJzaXRlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiB3ZWJzaXRlRGF0YVR5cGVzLCBDCiB7CiAgICAgV2Vic2l0ZURhdGEgd2Vic2l0ZURh
dGE7CiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpN
ZW1vcnlDYWNoZSkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBNZW1vcnlDYWNoZTo6
c2luZ2xldG9uKCkub3JpZ2luc1dpdGhDYWNoZShzZXNzaW9uSUQoKSkpCi0gICAgICAgICAgICB3
ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4tPmRh
dGEoKSwgV2Vic2l0ZURhdGFUeXBlOjpNZW1vcnlDYWNoZSwgMCB9KTsKKyAgICAgICAgYXV0byBv
cmlnaW5zID0gTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpLm9yaWdpbnNXaXRoQ2FjaGUoc2Vzc2lv
bklEKCkpOworICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzID0gV1RGOjptYXAob3JpZ2lucywg
W10oYXV0byYgb3JpZ2luKSB7CisgICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGE6OkVudHJ5
IHsgb3JpZ2luLT5kYXRhKCksIFdlYnNpdGVEYXRhVHlwZTo6TWVtb3J5Q2FjaGUsIDAgfTsKKyAg
ICAgICAgfSk7CiAgICAgfQogICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUod2Vic2l0ZURh
dGEpKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452695</attachid>
            <date>2022-02-20 09:46:53 -0800</date>
            <delta_ts>2022-02-20 11:32:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236852-20220220094652.patch</filename>
            <type>text/plain</type>
            <size>163633</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDBiOGQ4YTE1ZWQxZjg3MDc2NDI2ZWUz
OTRhMGMwMzAyOGYzMGEwZTUuLjkzYzY0ZGM2ZTcwMjYyNzY4MGQ2MjIwZmI4ZjU2NzBmYjFjNDYw
MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjItMDItMTggIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGV2ZW4gbW9yZSBjYWxs
IHNpdGVzIGNvbnN0cnVjdGluZyB2ZWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuY3BwOgorICAgICAgICAoV1RGOjpD
b25jdXJyZW50V29ya1F1ZXVlOjphcHBseSk6CisgICAgICAgICogd3RmL2NmL0xhbmd1YWdlQ0Yu
Y3BwOgorICAgICAgICAoV1RGOjpwbGF0Zm9ybVVzZXJQcmVmZXJyZWRMYW5ndWFnZXMpOgorCiAy
MDIyLTAyLTE4ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBb
aU9TXSBTYWZhcmkgY2FuIHNvbWV0aW1lcyBoYW5nIHdoaWxlIHByaW50aW5nIGR1ZSB0byBzeW5j
IElQQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IGJjZWQyYjI2MmQxM2NkZmZiODRiNjJkNGE1ZTk3MmYyNjU3YzYx
MDAuLjE3NTA2N2M5YTI3MWI4MjUyYTJmMWRkNjY4M2NlYWI3NGFlNDZhZGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNjYgQEAKKzIwMjItMDItMTggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGV2ZW4gbW9yZSBjYWxsIHNpdGVz
IGNvbnN0cnVjdGluZyB2ZWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzY4NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIE1vZHVsZXMvYXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBheW1lbnRDb29yZGluYXRvcjo6YmVnaW5QYXltZW50U2Vzc2lv
bik6CisgICAgICAgICogTW9kdWxlcy9hcHBsZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29jb2Eu
bW06CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0KToKKyAgICAgICAgKiBNb2R1bGVzL2NhY2hl
L0RPTUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUNhY2hlOjpiYXRjaFB1dE9wZXJh
dGlvbik6CisgICAgICAgICogTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R2FtZXBhZDo6R2FtZXBhZCk6CisgICAgICAgICogTW9kdWxlcy9nYW1lcGFkL0dh
bWVwYWRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRNYW5hZ2VyOjpwbGF0
Zm9ybUdhbWVwYWREaXNjb25uZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZE1hbmFn
ZXI6Om1ha2VHYW1lcGFkVmlzaWJsZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6Om9iamVjdFN0b3Jl
TmFtZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OnRyYW5zYWN0aW9u
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmg6CisgICAgICAgIChX
ZWJDb3JlOjpJREJLZXlEYXRhOjppc0RlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YUhhc2g6Omhhc2gpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6aGFzaCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uOjpvYmplY3RTdG9yZU5hbWVzIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlh
Y29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFD
b250cm9sc0hvc3Q6OnNob3dNZWRpYUNvbnRyb2xzQ29udGV4dE1lbnUpOgorICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTb3VyY2U6OmFjdGl2ZVJhbmdlcyBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNv
dXJjZS9TYW1wbGVNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRlY29kZU9yZGVyU2FtcGxlTWFw
OjpzaXplIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZl
ckxpc3QuaDoKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzOjpnZXRWb2ljZXMpOgorICAgICAgICAq
IE1vZHVsZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrLm1tOgorICAgICAg
ICAoLVtXZWJTcGVlY2hSZWNvZ25pemVyVGFza0ltcGwgY2FsbGJhY2tXaXRoVHJhbnNjcmlwdGlv
bnM6aXNGaW5hbDpdKToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hS
ZWNvZ25pemVyVGFza01vY2subW06CisgICAgICAgICgtW1dlYlNwZWVjaFJlY29nbml6ZXJUYXNr
TW9jayBhdWRpb1NhbXBsZXNBdmFpbGFibGU6XSk6CisgICAgICAgICogYW5pbWF0aW9uL0NTU1By
b3BlcnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRnVuYyk6CisgICAg
ICAgICogYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmVzQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXI6OnVwZGF0ZUFuaW1hdGlvbnNB
bmRTZW5kRXZlbnRzKToKKyAgICAgICAgKiBhbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cHJvY2Vzc1Byb3BlcnR5SW5kZXhlZEtleWZyYW1lcyk6CisgICAg
ICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbjo6Q29udGVudEV4dGVu
c2lvbik6CisgICAgICAgICogY3NzL0NTU1ZhbHVlTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTVmFsdWVMaXN0OjpzaXplIGNvbnN0KToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjT3Bl
cmF0aW9uTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6
aG9pc3RDaGlsZHJlbldpdGhPcGVyYXRvcik6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJz
ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlckltcGw6OmNvbnN1bWVDb250
YWluZXJSdWxlKToKKyAgICAgICAgKiBkb20vRE9NU3RyaW5nTGlzdC5oOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NU3RyaW5nTGlzdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVN0cmlu
Z0xpc3Q6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpET01TdHJpbmdMaXN0OjpET01TdHJp
bmdMaXN0KToKKyAgICAgICAgKiBkb20vRXZlbnRQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50UGF0aDo6RXZlbnRQYXRoKToKKyAgICAgICAgKiBkb20vRnVsbHNjcmVlbk1hbmFnZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RnVsbHNjcmVlbk1hbmFnZXI6OmNhbmNlbEZ1bGxzY3Jl
ZW4pOgorICAgICAgICAqIGRvbS9Mb2FkYWJsZVNjcmlwdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMb2FkYWJsZVNjcmlwdDo6bm90aWZ5Q2xpZW50RmluaXNoZWQpOgorICAgICAgICAqIGRvbS9S
YWRpb0J1dHRvbkdyb3Vwcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYWRpb0J1dHRvbkdyb3Vw
OjptZW1iZXJzIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0RpcmVjdG9yeUZpbGVMaXN0Q3JlYXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0ZpbGVMaXN0KToKKyAgICAgICAgKiBodG1sL0hU
TUxTZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
OjpzYXZlTGFzdFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVu
dDo6c2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgpOgorICAgICAgICAqIGh0bWwvSW1hZ2VC
aXRtYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OmRldGFjaEJpdG1hcHMp
OgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0YWNoZWRT
aGFkZXJzKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpwcm9jZXNzTWV0YSk6
CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6aW5zZXJ0UGhvbmVOdW1iZXJMaW5rKToKKyAgICAgICAg
KiBodG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dERvY3VtZW50UGFyc2VyOjppbnNlcnRGYWtlUHJlRWxlbWVudCk6CisgICAgICAgICogbG9h
ZGVyL0NvbnRlbnRGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEZpbHRlcjo6
Y3JlYXRlKToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZU1hbmlm
ZXN0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQXBwbGljYXRpb25DYWNoZU1h
bmlmZXN0KToKKyAgICAgICAgKiBwYWdlL1Jlc2l6ZU9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlc2l6ZU9ic2VydmVyOjpkZWxpdmVyT2JzZXJ2YXRpb25zKToKKyAgICAgICAgKiBw
YWdlL1RleHRJbmRpY2F0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZUluZGlj
YXRvcik6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlU3ViUmVzb3VyY2VJbnRlZ3JpdHlJbnRvRGlnZXN0cyk6Cisg
ICAgICAgICogcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rmls
ZUNob29zZXI6OmNob29zZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUNob29zZXI6OmNo
b29zZUZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjaG9vc2VNZWRpYUZp
bGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9UaHJlYWRTYWZlRGF0YUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0RTUEtlcm5lbFByb2Nlc3Nvcjo6aW5pdGlhbGl6ZSk6CisgICAgICAg
ICogcGxhdGZvcm0vYXVkaW8vQXVkaW9SZXNhbXBsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9SZXNhbXBsZXI6OkF1ZGlvUmVzYW1wbGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRp
by9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1p
Y3NDb21wcmVzc29yS2VybmVsOjpzZXROdW1iZXJPZkNoYW5uZWxzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9NdWx0aUNoYW5uZWxSZXNhbXBsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TXVsdGlDaGFubmVsUmVzYW1wbGVyOjpNdWx0aUNoYW5uZWxSZXNhbXBsZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWQv
bWFjL0R1YWxzaG9jazNISURHYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkR1YWxzaG9j
azNISURHYW1lcGFkOjpEdWFsc2hvY2szSElER2FtZXBhZCk6CisgICAgICAgICogcGxhdGZvcm0v
Z2FtZXBhZC9tYWMvTG9naXRlY2hHYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvZ2l0
ZWNoR2FtZXBhZDo6TG9naXRlY2hHYW1lcGFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFk
L21hYy9TdGFkaWFISURHYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0YWRpYUhJREdh
bWVwYWQ6OlN0YWRpYUhJREdhbWVwYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6YWRkUmVw
YWludFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGF0aFV0aWxpdGllczo6cGF0aHNXaXRoU2hyaW5rV3JhcHBl
ZFJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhVdGlsaXRpZXM6OnBhdGhXaXRoU2hyaW5r
V3JhcHBlZFJlY3RzRm9yT3V0bGluZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU291
cmNlQnVmZmVyUHJpdmF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2
YXRlOjpidWZmZXJlZFNhbXBsZXNGb3JUcmFja0lkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpleHRyYWN0S2V5SURzU2tkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVZGV3JhcHBlcjo6c2V0
UmVxdWVzdEZvcktleSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW06CisgICAgICAgIChX
ZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnVwZGF0
ZUtleVN0YXR1c2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyQVZGT2JqQzo6ZnJhbWVJbmZvcyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUGFyc2VyQVZGT2JqQy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlckFWRk9iakM6OmRpZFBhcnNlU3RyZWFtRGF0
YUFzQXNzZXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9y
bURhdGFDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnZhcmlh
dGlvbkF4ZXMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVTdHJpbmcpOgorICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlOjpzZXRTdXBwb3J0ZWRQ
cmVzZXRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMKToK
KyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3RyeUltcGw6OndyaXRlQmxvYnNUb1RlbXBvcmFy
eUZpbGVzRm9ySW5kZXhlZERCKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmRyYXdC
b3hTaWRlRnJvbVBhdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpjb25uZWN0Q2xpcHBp
bmdTdGFja0xheWVycyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkanVzdE92
ZXJmbG93U2Nyb2xsYmFyQ29udGFpbmVyTGF5ZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpwYWludEF0dGFjaG1lbnRUaXRsZUJh
Y2tncm91bmQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVNWR1N0cm9rZVBhaW50aW5nUmVzb3VyY2UpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RleHRDaHVuazo6U1ZHVGV4dENodW5rKToKKyAgICAgICAgKiBzdHlsZS9QYWdlUnVs
ZUNvbGxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UGFnZVJ1bGVDb2xsZWN0
b3I6Om1hdGNoUGFnZVJ1bGVzKToKKyAgICAgICAgKiBzdHlsZS9SdWxlU2V0QnVpbGRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldEJ1aWxkZXI6Ok1lZGlhUXVlcnlDb2xs
ZWN0b3I6OnBvcCk6CisgICAgICAgICogc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENvbnRhaW5l
ck5hbWUpOgorCiAyMDIyLTAyLTE5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbUmUtbGFuZGluZ10gUHJvdmlkZSBhIFdlYkNvcmUgc3Vic3BhY2VJbXBsRm9yIHRl
bXBsYXRlIHRvIG1ha2UgY29kZSBtb3JlIHJlYWRhYmxlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBjYzRiZmE1NGFh
NzMxMmRmZDliZDcwZTRjNzJlZTEzYzI1OTI1NWJhLi42MmJhMmIzNmYyMzYwZWIxYjA0NGRiYTRi
ZTY5NTM2Y2VjZWFkNmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDIyLTAyLTE4ICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4gdXAgLyBvcHRp
bWl6ZSBldmVuIG1vcmUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9ycworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2ODUyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL21lZGlh
L1JlbW90ZU1lZGlhUGxheWVyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVNZWRp
YVBsYXllclByb3h5OjpvdXRPZkJhbmRUcmFja1NvdXJjZXMpOgorICAgICAgICAqIEdQVVByb2Nl
c3MvbWVkaWEvUmVtb3RlU291cmNlQnVmZmVyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVTb3VyY2VCdWZmZXJQcm94eTo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0
aWFsaXphdGlvblNlZ21lbnQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVTb3VyY2VCdWZmZXJQ
cm94eTo6dXBkYXRlVHJhY2tJZHMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZp
ZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3Rpbmcp
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6ZmV0Y2hEaXNrQ2FjaGVFbnRyaWVzKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9Ob3RpZmljYXRpb25zL05ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya05vdGlmaWNhdGlvbk1hbmFnZXI6OmdldE9yaWdpbnNXaXRoUHVzaEFu
ZE5vdGlmaWNhdGlvblBlcm1pc3Npb25zKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFn
ZXI6OmFsbFN0b3JhZ2VBcmVhSWRlbnRpZmllcnMgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6VHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpvcmlnaW5zIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6VHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpz
dG9yYWdlQXJlYUlkZW50aWZpZXJzIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNhY2hl
U3RvcmFnZTo6Q2FjaGU6OmZpbmlzaE9wZW5pbmcpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0
b3JhZ2U6OkNhY2hlOjprZXlzIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9y
YWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFn
ZUFyZWE6OlNRTGl0ZVN0b3JhZ2VBcmVhKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQXJndW1l
bnRDb2RlcnMuaDoKKyAgICAgICAgKiBTaGFyZWQvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5h
dG9yUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94
eTo6c2hvd1BheW1lbnRVSSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9u
LmNwcDoKKyAgICAgICAgKEFQSTo6TmF2aWdhdGlvbjo6TmF2aWdhdGlvbik6CisgICAgICAgIChB
UEk6Om1fY2xpZW50TmF2aWdhdGlvbkFjdGl2aXR5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvV0tTaGFyZVNoZWV0Lm1tOgorICAgICAgICAoYXBwZW5kRmlsZXNBc1NoYXJlYWJsZVVSTHMp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXN0b3JlQXBwSGlnaGxpZ2h0c0FuZFNjcm9sbFRv
SW5kZXgpOgorICAgICAgICAqIFVJUHJvY2Vzcy9GcmFtZUxvYWRTdGF0ZS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkZyYW1lTG9hZFN0YXRlOjpkaWRGaW5pc2hMb2FkKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2Vzcyk6
CisgICAgICAgICogVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHk6OnBhcmFtZXRlcnMgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNh
dGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkF1dGhlbnRp
Y2F0b3JNYW5hZ2VyOjpzdGFydERpc2NvdmVyeSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkJh
Y2tGb3J3YXJkTGlzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6
cmVtb3ZlQWxsSXRlbXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmNs
ZWFyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVtb3ZlUHJvY2Vzc0Zyb21PcmlnaW5DYWNoZVNl
dCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6cHJvY2Vzc0RpZFRlcm1pbmF0ZU9yRmFpbGVkVG9MYXVu
Y2gpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvaW9zL1RleHRDaGVja2VySU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpU
ZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAqIFVJUHJvY2Vzcy9p
b3MvV0tBY3Rpb25TaGVldEFzc2lzdGFudC5tbToKKyAgICAgICAgKC1bV0tBY3Rpb25TaGVldEFz
c2lzdGFudCBwcmVzZW50YXRpb25SZWN0Rm9yRWxlbWVudFVzaW5nQ2xvc2VzdEluZGljYXRlZFJl
Y3RdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFjLm1tOgorICAgICAg
ICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUGF5bWVudENvb3JkaW5hdG9yOjpzaG93UGF5bWVudFVJKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OnNldEZpbGVzRm9ySW5w
dXRGaWxlVXBsb2FkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRp
YVBsYXllck1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVNZWRpYVBsYXllck1h
bmFnZXI6OmNyZWF0ZVJlbW90ZU1lZGlhUGxheWVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQ
VS9tZWRpYS9Tb3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
U291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZTo6dXBkYXRlVHJhY2tJZHMpOgorICAgICAgICAoV2Vi
S2l0OjpTb3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlOjpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVj
ZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvd2Vi
cnRjL0xpYldlYlJUQ0NvZGVjcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxpYldlYlJUQ0NvZGVj
czo6Y3JlYXRlRW5jb2Rlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1Nlc3Npb25TdGF0ZUNvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2ViS2l0Ojp0
b0ZyYW1lU3RhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRGV2
aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkRl
dmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXI6OmRldmljZU9yaWVudGF0aW9uQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXI6OmRl
dmljZU1vdGlvbkNoYW5nZWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViUGFzdGVib2FyZE92ZXJyaWRlcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9h
cmRPdmVycmlkZXM6Om92ZXJyaWRkZW5UeXBlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJTcGVlY2hTeW50aGVzaXNDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJTcGVlY2hTeW50aGVzaXNDbGllbnQ6OnZvaWNlTGlzdCk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RmluZENv
bnRyb2xsZXI6OmZpbmRTdHJpbmdNYXRjaGVzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
Rm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpkcmF3UmVjdCk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjb25zdW1l
U2FuZGJveEV4dGVuc2lvbnMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aGFuZGxlU2VsZWN0aW9uU2Vy
dmljZUNsaWNrKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpmZXRjaFdlYnNpdGVEYXRhKToKKwogMjAyMi0wMi0xOSAg
VGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBtYWNDYXRh
bHlzdDogV0tXZWJWaWV3IGNyYXNoZXMgd2hlbmV2ZXIgdGhlIHZpZXcgZnJhbWUgY2hhbmdlcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L1dvcmtRdWV1ZS5jcHAKaW5kZXggOWUxMDZlMzk0ZDNmNDRkMmMyNWZjM2NhMTUzNTQwZTUyMDRj
YjM1Yi4uODY0MDZmMzg4NDM3MTRjYjI1NWMzNGVhZTNmOTE4MWRhYmE1OGUzOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Xb3Jr
UXVldWUuY3BwCkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBDb25jdXJyZW50V29ya1F1ZXVlOjph
cHBseShzaXplX3QgaXRlcmF0aW9ucywgV1RGOjpGdW5jdGlvbjx2b2lkKHNpemVfdCBpbmQKIAog
ICAgICAgICAgICAgbV93b3JrZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodGhyZWFkQ291bnQp
OwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRocmVhZENvdW50OyArK2kp
IHsKLSAgICAgICAgICAgICAgICBtX3dvcmtlcnMuYXBwZW5kKFRocmVhZDo6Y3JlYXRlKCJUaHJl
YWRQb29sIFdvcmtlciIsIFt0aGlzXSB7CisgICAgICAgICAgICAgICAgbV93b3JrZXJzLnVuY2hl
Y2tlZEFwcGVuZChUaHJlYWQ6OmNyZWF0ZSgiVGhyZWFkUG9vbCBXb3JrZXIiLCBbdGhpc10gewog
ICAgICAgICAgICAgICAgICAgICB0aHJlYWRCb2R5KCk7CiAgICAgICAgICAgICAgICAgfSkpOwog
ICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvY2YvTGFuZ3VhZ2VDRi5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi9jZi9MYW5ndWFnZUNGLmNwcAppbmRleCBiYmMxZWY2ZjRlZmUw
MzA1OWNlNTUxMzFlMDhjMTAzMzIyNDg4ZTU2Li5jMDRjNTViYzYwM2QyODFkMGNhMzg5MjBlYmE4
Yzc5ZTVlNjkyOTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9jZi9MYW5ndWFnZUNGLmNw
cAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9jZi9MYW5ndWFnZUNGLmNwcApAQCAtMTAyLDkgKzEwMiwx
MCBAQCBWZWN0b3I8U3RyaW5nPiBwbGF0Zm9ybVVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoU2hvdWxk
TWluaW1pemVMYW5ndWFnZXMgc2hvdWxkTWluaQogICAgICAgICByZXR1cm4geyAiZW4iX3MgfTsK
IAogICAgIFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlczsKKyAgICBsYW5ndWFnZXMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShwbGF0Zm9ybUxhbmd1YWdlc0NvdW50KTsKICAgICBmb3IgKENGSW5kZXgg
aSA9IDA7IGkgPCBwbGF0Zm9ybUxhbmd1YWdlc0NvdW50OyBpKyspIHsKICAgICAgICAgYXV0byBw
bGF0Zm9ybUxhbmd1YWdlID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGQXJyYXlHZXRWYWx1
ZUF0SW5kZXgocGxhdGZvcm1MYW5ndWFnZXMuZ2V0KCksIGkpKTsKLSAgICAgICAgbGFuZ3VhZ2Vz
LmFwcGVuZChodHRwU3R5bGVMYW5ndWFnZUNvZGUocGxhdGZvcm1MYW5ndWFnZSwgc2hvdWxkTWlu
aW1pemVMYW5ndWFnZXMpKTsKKyAgICAgICAgbGFuZ3VhZ2VzLnVuY2hlY2tlZEFwcGVuZChodHRw
U3R5bGVMYW5ndWFnZUNvZGUocGxhdGZvcm1MYW5ndWFnZSwgc2hvdWxkTWluaW1pemVMYW5ndWFn
ZXMpKTsKICAgICB9CiAKICAgICBMT0dfV0lUSF9TVFJFQU0oTGFuZ3VhZ2UsIHN0cmVhbSA8PCAi
QWZ0ZXIgcGFzc2luZyB0aHJvdWdoIGh0dHBTdHlsZUxhbmd1YWdlQ29kZTogIiA8PCBsYW5ndWFn
ZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXltZW50
Q29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXltZW50
Q29vcmRpbmF0b3IuY3BwCmluZGV4IDFhMzI3YTk0YjBiNzFkNGVjNzVlYWNjOGQ0YWQ3OGE5MWI5
ZmY2ODUuLjRhOTQzMjI0OWQ1MmQ1MWQxNDdiODZlNTcwOGQ1MTg4OGJhNjRmNTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29yZGluYXRv
ci5jcHAKQEAgLTEwMSwxMSArMTAxLDEwIEBAIGJvb2wgUGF5bWVudENvb3JkaW5hdG9yOjpiZWdp
blBheW1lbnRTZXNzaW9uKERvY3VtZW50JiBkb2N1bWVudCwgUGF5bWVudFNlc3Npb24mCiB7CiAg
ICAgQVNTRVJUKCFtX2FjdGl2ZVNlc3Npb24pOwogCi0gICAgVmVjdG9yPFVSTD4gbGlua0ljb25V
UkxzOwotICAgIGZvciAoYXV0byYgaWNvbiA6IExpbmtJY29uQ29sbGVjdG9yIHsgZG9jdW1lbnQg
fS5pY29uc09mVHlwZXMoeyBMaW5rSWNvblR5cGU6OlRvdWNoSWNvbiwgTGlua0ljb25UeXBlOjpU
b3VjaFByZWNvbXBvc2VkSWNvbiB9KSkKLSAgICAgICAgbGlua0ljb25VUkxzLmFwcGVuZChpY29u
LnVybCk7Ci0KLSAgICBhdXRvIHNob3dQYXltZW50VUkgPSBtX2NsaWVudC5zaG93UGF5bWVudFVJ
KGRvY3VtZW50LnVybCgpLCBsaW5rSWNvblVSTHMsIHBheW1lbnRSZXF1ZXN0KTsKKyAgICBhdXRv
IGxpbmtJY29uVVJMcyA9IExpbmtJY29uQ29sbGVjdG9yIHsgZG9jdW1lbnQgfS5pY29uc09mVHlw
ZXMoeyBMaW5rSWNvblR5cGU6OlRvdWNoSWNvbiwgTGlua0ljb25UeXBlOjpUb3VjaFByZWNvbXBv
c2VkSWNvbiB9KS5tYXAoW10oYXV0byYgaWNvbikgeworICAgICAgICByZXR1cm4gaWNvbi51cmw7
CisgICAgfSk7CisgICAgYXV0byBzaG93UGF5bWVudFVJID0gbV9jbGllbnQuc2hvd1BheW1lbnRV
SShkb2N1bWVudC51cmwoKSwgV1RGTW92ZShsaW5rSWNvblVSTHMpLCBwYXltZW50UmVxdWVzdCk7
CiAgICAgUEFZTUVOVF9DT09SRElOQVRPUl9SRUxFQVNFX0xPRygiYmVnaW5QYXltZW50U2Vzc2lv
bigpIC0+ICVkIiwgc2hvd1BheW1lbnRVSSk7CiAgICAgaWYgKCFzaG93UGF5bWVudFVJKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Fw
cGxlcGF5L2NvY29hL1BheW1lbnRNZXRob2RDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvYXBwbGVwYXkvY29jb2EvUGF5bWVudE1ldGhvZENvY29hLm1tCmluZGV4IDc2NTNkZTU0YWY1
MzlmMjU2MWY0MjIzNmQzMGVjNjFhYjU4MDNkZDUuLjM3NWU1M2Q2ZDRmZGRjODg4ZjMyZTA0ZTI4
M2E3ZGIwNDExM2QwNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVw
YXkvY29jb2EvUGF5bWVudE1ldGhvZENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvYXBwbGVwYXkvY29jb2EvUGF5bWVudE1ldGhvZENvY29hLm1tCkBAIC0xMDEsMTEgKzEwMSw4
IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFwcGxlUGF5UGF5bWVudE1ldGhvZDo6VHlwZT4gY29u
dmVydChQS1BheW1lbnRNZXRob2RUeXBlIHBhCiAjaWYgSEFWRShQQVNTS0lUX1BBWU1FTlRfTUVU
SE9EX0JJTExJTkdfQUREUkVTUykKIHN0YXRpYyB2b2lkIGNvbnZlcnQoQ05MYWJlbGVkVmFsdWU8
Q05Qb3N0YWxBZGRyZXNzKj4gKnBvc3RhbEFkZHJlc3MsIEFwcGxlUGF5UGF5bWVudENvbnRhY3Qg
JnJlc3VsdCkKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiBhZGRyZXNzTGluZTsKLSAgICBpZiAoTlNT
dHJpbmcgKnN0cmVldCA9IHBvc3RhbEFkZHJlc3MudmFsdWUuc3RyZWV0KSB7Ci0gICAgICAgIGFk
ZHJlc3NMaW5lLmFwcGVuZChzdHJlZXQpOwotICAgICAgICByZXN1bHQuYWRkcmVzc0xpbmVzID0g
V1RGTW92ZShhZGRyZXNzTGluZSk7Ci0gICAgfQorICAgIGlmIChOU1N0cmluZyAqc3RyZWV0ID0g
cG9zdGFsQWRkcmVzcy52YWx1ZS5zdHJlZXQpCisgICAgICAgIHJlc3VsdC5hZGRyZXNzTGluZXMg
PSBWZWN0b3IgeyBTdHJpbmcgeyBzdHJlZXQgfSB9OwogICAgIHJlc3VsdC5zdWJMb2NhbGl0eSA9
IHBvc3RhbEFkZHJlc3MudmFsdWUuc3ViTG9jYWxpdHk7CiAgICAgcmVzdWx0LmxvY2FsaXR5ID0g
cG9zdGFsQWRkcmVzcy52YWx1ZS5jaXR5OwogICAgIHJlc3VsdC5zdWJBZG1pbmlzdHJhdGl2ZUFy
ZWEgPSBwb3N0YWxBZGRyZXNzLnZhbHVlLnN1YkFkbWluaXN0cmF0aXZlQXJlYTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNoZS5jcHAKaW5kZXggNDlmMzk4YWFmZWYzN2NkNWU4
ZjhlYjI0NGQ0ZTExZjM5ZjJhOGNkMy4uMmQ0NmQxY2RiYzcxN2YzYzkyOTllZmE4NjNhNTQ5MjYz
ODNhZjVkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNo
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNoZS5jcHAKQEAg
LTUxNSwxMCArNTE1LDggQEAgUmVjb3JkIERPTUNhY2hlOjp0b0Nvbm5lY3Rpb25SZWNvcmQoY29u
c3QgRmV0Y2hSZXF1ZXN0JiByZXF1ZXN0LCBGZXRjaFJlc3BvbnNlJgogCiB2b2lkIERPTUNhY2hl
OjpiYXRjaFB1dE9wZXJhdGlvbihjb25zdCBGZXRjaFJlcXVlc3QmIHJlcXVlc3QsIEZldGNoUmVz
cG9uc2UmIHJlc3BvbnNlLCBET01DYWNoZUVuZ2luZTo6UmVzcG9uc2VCb2R5JiYgcmVzcG9uc2VC
b2R5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEV4Y2VwdGlvbk9yPHZvaWQ+JiYpPiYmIGNhbGxi
YWNrKQogewotICAgIFZlY3RvcjxSZWNvcmQ+IHJlY29yZHM7Ci0gICAgcmVjb3Jkcy5hcHBlbmQo
dG9Db25uZWN0aW9uUmVjb3JkKHJlcXVlc3QsIHJlc3BvbnNlLCBXVEZNb3ZlKHJlc3BvbnNlQm9k
eSkpKTsKLQotICAgIGJhdGNoUHV0T3BlcmF0aW9uKFdURk1vdmUocmVjb3JkcyksIFdURk1vdmUo
Y2FsbGJhY2spKTsKKyAgICBhdXRvIHJlY29yZCA9IHRvQ29ubmVjdGlvblJlY29yZChyZXF1ZXN0
LCByZXNwb25zZSwgV1RGTW92ZShyZXNwb25zZUJvZHkpKTsKKyAgICBiYXRjaFB1dE9wZXJhdGlv
bih7IFdURk1vdmUocmVjb3JkKSB9LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQgRE9N
Q2FjaGU6OmJhdGNoUHV0T3BlcmF0aW9uKFZlY3RvcjxSZWNvcmQ+JiYgcmVjb3JkcywgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChFeGNlcHRpb25Pcjx2b2lkPiYmKT4mJiBjYWxsYmFjaykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmNwcAppbmRleCA2OTY5ZTBiNTAzYTg3
ZGQwMzg1ZTE4MzkwODg0NjcwZmVhMDRjMjY3Li41ODNmOWM4NTU1NjcxNzhjY2U3MmNhZDQ0Nzky
NGNmOGJjM2M0ZTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQv
R2FtZXBhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQu
Y3BwCkBAIC00Myw4ICs0Myw5IEBAIEdhbWVwYWQ6OkdhbWVwYWQoY29uc3QgUGxhdGZvcm1HYW1l
cGFkJiBwbGF0Zm9ybUdhbWVwYWQpCiAgICAgLCBtX2F4ZXMocGxhdGZvcm1HYW1lcGFkLmF4aXNW
YWx1ZXMoKS5zaXplKCksIDAuMCkKIHsKICAgICB1bnNpZ25lZCBidXR0b25Db3VudCA9IHBsYXRm
b3JtR2FtZXBhZC5idXR0b25WYWx1ZXMoKS5zaXplKCk7CisgICAgbV9idXR0b25zLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoYnV0dG9uQ291bnQpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBidXR0b25Db3VudDsgKytpKQotICAgICAgICBtX2J1dHRvbnMuYXBwZW5kKEdhbWVwYWRCdXR0
b246OmNyZWF0ZSgpKTsKKyAgICAgICAgbV9idXR0b25zLnVuY2hlY2tlZEFwcGVuZChHYW1lcGFk
QnV0dG9uOjpjcmVhdGUoKSk7CiB9CiAKIEdhbWVwYWQ6On5HYW1lcGFkKCkgPSBkZWZhdWx0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAK
aW5kZXggY2MzNzQ4NThjZmVhMWIyNDRjMDRiZDQxYjI5OTQ4ZDI5YWVhMzAzMC4uNTQzZmU0ODkx
NjdlN2NlMTNkNDk3NjhmYzdlMTVmMzRkMDgyMzZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZE1hbmFnZXIuY3BwCkBAIC03OSwxNCArNzksMTAgQEAg
dm9pZCBHYW1lcGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkQ29ubmVjdGVkKFBsYXRmb3JtR2Ft
ZXBhZCYgcGxhdGZvcm1HYW1lcGFkLAogCiB2b2lkIEdhbWVwYWRNYW5hZ2VyOjpwbGF0Zm9ybUdh
bWVwYWREaXNjb25uZWN0ZWQoUGxhdGZvcm1HYW1lcGFkJiBwbGF0Zm9ybUdhbWVwYWQpCiB7Ci0g
ICAgVmVjdG9yPFdlYWtQdHI8RE9NV2luZG93Pj4gd2Vha1dpbmRvd3M7Ci0gICAgZm9yIChhdXRv
KiBkb21XaW5kb3cgOiBtX2RvbVdpbmRvd3MpCi0gICAgICAgIHdlYWtXaW5kb3dzLmFwcGVuZCgq
ZG9tV2luZG93KTsKLQogICAgIEhhc2hTZXQ8TmF2aWdhdG9yR2FtZXBhZCo+IG5vdGlmaWVkTmF2
aWdhdG9yczsKIAogICAgIC8vIEhhbmRsZSB0aGUgZGlzY29ubmVjdCBmb3IgYWxsIERPTVdpbmRv
d3Mgd2l0aCBldmVudCBsaXN0ZW5lcnMgYW5kIHRoZWlyIE5hdmlnYXRvcnMuCi0gICAgZm9yIChh
dXRvJiB3aW5kb3cgOiB3ZWFrV2luZG93cykgeworICAgIGZvciAoYXV0byYgd2luZG93IDogY29w
eVRvVmVjdG9yT2Y8V2Vha1B0cjxET01XaW5kb3c+PihtX2RvbVdpbmRvd3MpKSB7CiAgICAgICAg
IC8vIEV2ZW50IGRpc3BhdGNoIG1pZ2h0IGhhdmUgbWFkZSB0aGlzIHdpbmRvdyBnbyBhd2F5Lgog
ICAgICAgICBpZiAoIXdpbmRvdykKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTQzLDExICsx
MzksNyBAQCB2b2lkIEdhbWVwYWRNYW5hZ2VyOjptYWtlR2FtZXBhZFZpc2libGUoUGxhdGZvcm1H
YW1lcGFkJiBwbGF0Zm9ybUdhbWVwYWQsIEhhc2hTZQogICAgIGZvciAoYXV0byogbmF2aWdhdG9y
IDogbmF2aWdhdG9yU2V0KQogICAgICAgICBuYXZpZ2F0b3ItPmdhbWVwYWRDb25uZWN0ZWQocGxh
dGZvcm1HYW1lcGFkKTsKIAotICAgIFZlY3RvcjxXZWFrUHRyPERPTVdpbmRvdz4+IHdlYWtXaW5k
b3dzOwotICAgIGZvciAoYXV0byogZG9tV2luZG93IDogbV9kb21XaW5kb3dzKQotICAgICAgICB3
ZWFrV2luZG93cy5hcHBlbmQoKmRvbVdpbmRvdyk7Ci0KLSAgICBmb3IgKGF1dG8mIHdpbmRvdyA6
IHdlYWtXaW5kb3dzKSB7CisgICAgZm9yIChhdXRvJiB3aW5kb3cgOiBjb3B5VG9WZWN0b3JPZjxX
ZWFrUHRyPERPTVdpbmRvdz4+KG1fZG9tV2luZG93cykpIHsKICAgICAgICAgLy8gRXZlbnQgZGlz
cGF0Y2ggbWlnaHQgaGF2ZSBtYWRlIHRoaXMgd2luZG93IGdvIGF3YXkuCiAgICAgICAgIGlmICgh
d2luZG93KQogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKaW5kZXggN2FhNjMyYjdlYzA0N2JlNDYwOGI1
MWEwOTRlYTFhNGU1N2EyNjI5Yi4uMGJlOGJkMTE2ZWMyMzYxMjNjNzE1MzJkN2VlMzZjNTZlOTk2
NTQ5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlLmNwcApAQCAtMTAyLDkgKzEwMiw3IEBAIFJlZjxET01TdHJpbmdMaXN0PiBJREJEYXRhYmFz
ZTo6b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNhbkN1cnJlbnRUaHJl
YWRBY2Nlc3NUaHJlYWRMb2NhbERhdGEob3JpZ2luVGhyZWFkKCkpKTsKIAotICAgIGF1dG8gb2Jq
ZWN0U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwotICAgIGZvciAoYXV0byYg
bmFtZSA6IG1faW5mby5vYmplY3RTdG9yZU5hbWVzKCkpCi0gICAgICAgIG9iamVjdFN0b3JlTmFt
ZXMtPmFwcGVuZChuYW1lKTsKKyAgICBhdXRvIG9iamVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdM
aXN0OjpjcmVhdGUobV9pbmZvLm9iamVjdFN0b3JlTmFtZXMoKSk7CiAgICAgb2JqZWN0U3RvcmVO
YW1lcy0+c29ydCgpOwogICAgIHJldHVybiBvYmplY3RTdG9yZU5hbWVzOwogfQpAQCAtMTc1LDE5
ICsxNzMsMTYgQEAgRXhjZXB0aW9uT3I8UmVmPElEQlRyYW5zYWN0aW9uPj4gSURCRGF0YWJhc2U6
OnRyYW5zYWN0aW9uKFN0cmluZ09yVmVjdG9yT2ZTdHJpbmcKICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiRmFpbGVkIHRvIGV4ZWN1dGUgJ3RyYW5zYWN0aW9u
JyBvbiAnSURCRGF0YWJhc2UnOiBUaGUgZGF0YWJhc2UgY29ubmVjdGlvbiBpcyBjbG9zaW5nLiJf
cyB9OwogCiAgICAgVmVjdG9yPFN0cmluZz4gb2JqZWN0U3RvcmVzOwotICAgIGlmIChzdGQ6Omhv
bGRzX2FsdGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+PihzdG9yZU5hbWVzKSkKKyAgICBpZiAoc3Rk
Ojpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oc3RvcmVOYW1lcykpIHsKICAgICAg
ICAgb2JqZWN0U3RvcmVzID0gV1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8U3RyaW5nPj4oc3RvcmVO
YW1lcykpOwotICAgIGVsc2UKKyAgICAgICAgLy8gSXQgaXMgdmFsaWQgZm9yIGphdmFzY3JpcHQg
dG8gcGFzcyBpbiBhIGxpc3Qgb2Ygb2JqZWN0IHN0b3JlIG5hbWVzIHdpdGggdGhlIHNhbWUgbmFt
ZSBsaXN0ZWQgdHdpY2UsCisgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gcHV0IHRoZW0gYWxsIGlu
IGEgc2V0IHRvIGdldCBhIHVuaXF1ZSBsaXN0LgorICAgICAgICBIYXNoU2V0PFN0cmluZz4gb2Jq
ZWN0U3RvcmVTZXQ7CisgICAgICAgIG9iamVjdFN0b3JlU2V0LmFkZChvYmplY3RTdG9yZXMuYmVn
aW4oKSwgb2JqZWN0U3RvcmVzLmVuZCgpKTsKKyAgICAgICAgb2JqZWN0U3RvcmVzID0gY29weVRv
VmVjdG9yKG9iamVjdFN0b3JlU2V0KTsKKyAgICB9IGVsc2UKICAgICAgICAgb2JqZWN0U3RvcmVz
LmFwcGVuZChXVEZNb3ZlKHN0ZDo6Z2V0PFN0cmluZz4oc3RvcmVOYW1lcykpKTsKIAotICAgIC8v
IEl0IGlzIHZhbGlkIGZvciBqYXZhc2NyaXB0IHRvIHBhc3MgaW4gYSBsaXN0IG9mIG9iamVjdCBz
dG9yZSBuYW1lcyB3aXRoIHRoZSBzYW1lIG5hbWUgbGlzdGVkIHR3aWNlLAotICAgIC8vIHNvIHdl
IG5lZWQgdG8gcHV0IHRoZW0gYWxsIGluIGEgc2V0IHRvIGdldCBhIHVuaXF1ZSBsaXN0LgotICAg
IEhhc2hTZXQ8U3RyaW5nPiBvYmplY3RTdG9yZVNldDsKLSAgICBmb3IgKGF1dG8mIG9iamVjdFN0
b3JlIDogb2JqZWN0U3RvcmVzKQotICAgICAgICBvYmplY3RTdG9yZVNldC5hZGQob2JqZWN0U3Rv
cmUpOwotCi0gICAgb2JqZWN0U3RvcmVzID0gY29weVRvVmVjdG9yKG9iamVjdFN0b3JlU2V0KTsK
LQogICAgIGZvciAoYXV0byYgb2JqZWN0U3RvcmVOYW1lIDogb2JqZWN0U3RvcmVzKSB7CiAgICAg
ICAgIGlmIChtX2luZm8uaGFzT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVOYW1lKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5
RGF0YS5oCmluZGV4IDRiOTc4NTM2OWQxOTBhNmIxOTY5MWQxMzdhZTE1NjdlNWMzNzk1ZDkuLjAy
ZjczMzQwM2YzYWQzMzRmZjI3OTUwMzdmYWU3ZjY1NWE2N2E3NDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAog
I2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgPHZhcmlhbnQ+CisjaW5jbHVkZSA8d3RmL0hh
c2hlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRTZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdIYXNoLmg+CiAKQEAgLTExNyw0MSArMTE4LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlcik7CiAgICAgfQogCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Ci0g
ICAgewotICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IGhhc2hDb2RlczsKLSAgICAgICAgaGFzaENv
ZGVzLmFwcGVuZChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV90eXBlKSk7Ci0gICAgICAgIGhhc2hD
b2Rlcy5hcHBlbmQobV9pc051bGwgPyAxIDogMCk7Ci0gICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQo
bV9pc0RlbGV0ZWRWYWx1ZSA/IDEgOiAwKTsKLSAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKLSAg
ICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OkludmFsaWQ6Ci0gICAgICAgIGNhc2UgSW5k
ZXhlZERCOjpLZXlUeXBlOjpNYXg6Ci0gICAgICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpN
aW46Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6
Ok51bWJlcjoKLSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OkRhdGU6Ci0gICAgICAg
ICAgICBoYXNoQ29kZXMuYXBwZW5kKFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoZG91
YmxlKT4oJnN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1ZSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6U3RyaW5nOgotICAgICAgICAgICAgaGFz
aENvZGVzLmFwcGVuZChTdHJpbmdIYXNoOjpoYXNoKHN0ZDo6Z2V0PFN0cmluZz4obV92YWx1ZSkp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6
QmluYXJ5OiB7Ci0gICAgICAgICAgICBhdXRvKiBkYXRhID0gc3RkOjpnZXQ8VGhyZWFkU2FmZURh
dGFCdWZmZXI+KG1fdmFsdWUpLmRhdGEoKTsKLSAgICAgICAgICAgIGlmICghZGF0YSkKLSAgICAg
ICAgICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKDApOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KGRhdGEt
PmRhdGEoKSwgZGF0YS0+c2l6ZSgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6QXJyYXk6Ci0gICAgICAgICAgICBmb3Ig
KGF1dG8mIGtleSA6IHN0ZDo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSkpCi0gICAg
ICAgICAgICAgICAgaGFzaENvZGVzLmFwcGVuZChrZXkuaGFzaCgpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9y
eShoYXNoQ29kZXMuZGF0YSgpLCBoYXNoQ29kZXMuc2l6ZSgpICogc2l6ZW9mKHVuc2lnbmVkKSk7
Ci0gICAgfQotCiAgICAgU3RyaW5nIHN0cmluZygpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NF
UlQobV90eXBlID09IEluZGV4ZWREQjo6S2V5VHlwZTo6U3RyaW5nKTsKQEAgLTE5Niw4ICsxNjIs
MzUgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnZhcmlhbnQ8VmVjdG9yPElEQktleURhdGE+LCBTdHJp
bmcsIGRvdWJsZSwgVGhyZWFkU2FmZURhdGFCdWZmZXI+IG1fdmFsdWU7CiB9OwogCitpbmxpbmUg
dm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEpCit7Cisg
ICAgYWRkKGhhc2hlciwga2V5RGF0YS50eXBlKCkpOworICAgIGFkZChoYXNoZXIsIGtleURhdGEu
aXNOdWxsKCkpOworICAgIHN3aXRjaCAoa2V5RGF0YS50eXBlKCkpIHsKKyAgICBjYXNlIEluZGV4
ZWREQjo6S2V5VHlwZTo6SW52YWxpZDoKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TWF4
OgorICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpNaW46CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpOdW1iZXI6CisgICAgICAgIGFkZChoYXNoZXIsIGtl
eURhdGEubnVtYmVyKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5
VHlwZTo6RGF0ZToKKyAgICAgICAgYWRkKGhhc2hlciwga2V5RGF0YS5kYXRlKCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6U3RyaW5nOgorICAgICAgICBh
ZGQoaGFzaGVyLCBrZXlEYXRhLnN0cmluZygpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJ
bmRleGVkREI6OktleVR5cGU6OkJpbmFyeToKKyAgICAgICAgYWRkKGhhc2hlciwga2V5RGF0YS5i
aW5hcnkoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpB
cnJheToKKyAgICAgICAgYWRkKGhhc2hlciwga2V5RGF0YS5hcnJheSgpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCiBzdHJ1Y3QgSURCS2V5RGF0YUhhc2ggewotICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IElEQktleURhdGEmIGEpIHsgcmV0dXJuIGEuaGFzaCgpOyB9CisgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgSURCS2V5RGF0YSYgYSkgeyByZXR1cm4gY29tcHV0
ZUhhc2goYSk7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBJREJLZXlEYXRhJiBhLCBj
b25zdCBJREJLZXlEYXRhJiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAppbmRl
eCAxNDM1MTQwYTVjYjRhMWExZDQwN2EyZGIyOWQxNWJkZjJkNTJjMGI2Li5jZTYzYzZhNTZiMTRk
NWJlMDMyMjU3MzcyNTMyMmI4MmYwZGRkZDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCkBAIC0xMjYsMTQgKzEyNiwxMSBA
QCBSZWY8RE9NU3RyaW5nTGlzdD4gSURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMoKSBjb25zdAog
ewogICAgIEFTU0VSVChjYW5DdXJyZW50VGhyZWFkQWNjZXNzVGhyZWFkTG9jYWxEYXRhKG1fdHJh
bnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSkpOwogCi0gICAgYXV0byBpbmRleE5h
bWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0KLSAgICBpZiAoIW1fZGVsZXRlZCkgewot
ICAgICAgICBmb3IgKGF1dG8mIG5hbWUgOiBtX2luZm8uaW5kZXhOYW1lcygpKQotICAgICAgICAg
ICAgaW5kZXhOYW1lcy0+YXBwZW5kKG5hbWUpOwotICAgICAgICBpbmRleE5hbWVzLT5zb3J0KCk7
Ci0gICAgfQorICAgIGlmIChtX2RlbGV0ZWQpCisgICAgICAgIHJldHVybiBET01TdHJpbmdMaXN0
OjpjcmVhdGUoKTsKIAorICAgIGF1dG8gaW5kZXhOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0
ZShtX2luZm8uaW5kZXhOYW1lcygpKTsKKyAgICBpbmRleE5hbWVzLT5zb3J0KCk7CiAgICAgcmV0
dXJuIGluZGV4TmFtZXM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAppbmRleCA2YzExMjFiNzMxMGY3MzdmN2I5NWJlY2Vl
ODQ1NGU2YWM1MGRmMmI2Li5jZTg2N2IxYjdlNmQ2ZjE1NDllY2Q3MjYxMjdkY2M3Njk5NWE5ZDA2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb24uY3BwCkBAIC0xMjEsMTIgKzEyMSw4IEBAIFJlZjxET01TdHJpbmdMaXN0PiBJREJUcmFu
c2FjdGlvbjo6b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNhbkN1cnJl
bnRUaHJlYWRBY2Nlc3NUaHJlYWRMb2NhbERhdGEobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkp
KTsKIAotICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+IG5hbWVzID0gaXNWZXJzaW9uQ2hhbmdlKCkg
PyBtX2RhdGFiYXNlLT5pbmZvKCkub2JqZWN0U3RvcmVOYW1lcygpIDogbV9pbmZvLm9iamVjdFN0
b3JlcygpOwotCi0gICAgUmVmPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMgPSBET01T
dHJpbmdMaXN0OjpjcmVhdGUoKTsKLSAgICBmb3IgKGF1dG8mIG5hbWUgOiBuYW1lcykKLSAgICAg
ICAgb2JqZWN0U3RvcmVOYW1lcy0+YXBwZW5kKG5hbWUpOwotCisgICAgYXV0byBuYW1lcyA9IGlz
VmVyc2lvbkNoYW5nZSgpID8gbV9kYXRhYmFzZS0+aW5mbygpLm9iamVjdFN0b3JlTmFtZXMoKSA6
IG1faW5mby5vYmplY3RTdG9yZXMoKTsKKyAgICBhdXRvIG9iamVjdFN0b3JlTmFtZXMgPSBET01T
dHJpbmdMaXN0OjpjcmVhdGUoV1RGTW92ZShuYW1lcykpOwogICAgIG9iamVjdFN0b3JlTmFtZXMt
PnNvcnQoKTsKICAgICByZXR1cm4gb2JqZWN0U3RvcmVOYW1lczsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3Qu
Y3BwCmluZGV4IDE5YTA2OWUyM2IzOWRiYjRhNzA2NWQ4ZGU3OGQ3ZWU0OTNjNjk4MTguLmI4MjVl
YzgwMDUxNDgwMjhlMmIwN2IxOWRjNzgzOTJhNDNhOGNiYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNw
cApAQCAtNTU1LDExICs1NTUsMTAgQEAgYm9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6c2hvd01lZGlh
Q29udHJvbHNDb250ZXh0TWVudShIVE1MRWxlbWVudCYgdGFyZ2V0LCBTdHJpbmcKIAogICAgIGlm
IChvcHRpb25zSlNPTk9iamVjdC0+Z2V0Qm9vbGVhbigiaW5jbHVkZUxhbmd1YWdlcyJfcykudmFs
dWVfb3IoZmFsc2UpKSB7CiAgICAgICAgIGlmIChhdXRvKiBhdWRpb1RyYWNrcyA9IG1lZGlhRWxl
bWVudC5hdWRpb1RyYWNrcygpOyBhdWRpb1RyYWNrcyAmJiBhdWRpb1RyYWNrcy0+bGVuZ3RoKCkg
PiAxKSB7Ci0gICAgICAgICAgICBWZWN0b3I8TWVudUl0ZW0+IGxhbmd1YWdlTWVudUl0ZW1zOwot
CiAgICAgICAgICAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBwYWdlLT5ncm91cCgpLmVu
c3VyZUNhcHRpb25QcmVmZXJlbmNlcygpOwotICAgICAgICAgICAgZm9yIChhdXRvJiBhdWRpb1Ry
YWNrIDogY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUoYXVkaW9UcmFj
a3MpKQotICAgICAgICAgICAgICAgIGxhbmd1YWdlTWVudUl0ZW1zLmFwcGVuZChjcmVhdGVNZW51
SXRlbShhdWRpb1RyYWNrLCBjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFjayhh
dWRpb1RyYWNrLmdldCgpKSwgYXVkaW9UcmFjay0+ZW5hYmxlZCgpKSk7CisgICAgICAgICAgICBh
dXRvIGxhbmd1YWdlTWVudUl0ZW1zID0gY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlz
dEZvck1lbnUoYXVkaW9UcmFja3MpLm1hcChbJl0oYXV0byYgYXVkaW9UcmFjaykgeworICAgICAg
ICAgICAgICAgIHJldHVybiBjcmVhdGVNZW51SXRlbShhdWRpb1RyYWNrLCBjYXB0aW9uUHJlZmVy
ZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFjayhhdWRpb1RyYWNrLmdldCgpKSwgYXVkaW9UcmFjay0+
ZW5hYmxlZCgpKTsKKyAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICBpZiAoIWxhbmd1YWdl
TWVudUl0ZW1zLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBpdGVtcy5hcHBlbmQoY3JlYXRl
U3VibWVudShXRUJfVUlfU1RSSU5HX0tFWSgiTGFuZ3VhZ2VzIiwgIkxhbmd1YWdlcyAoTWVkaWEg
Q29udHJvbHMgTWVudSkiLCAiTGFuZ3VhZ2VzIG1lZGlhIGNvbnRyb2xzIGNvbnRleHQgbWVudSB0
aXRsZSIpLCAiZ2xvYmUiX3MsIFdURk1vdmUobGFuZ3VhZ2VNZW51SXRlbXMpKSk7CkBAIC01Njgs
MTUgKzU2NywxMyBAQCBib29sIE1lZGlhQ29udHJvbHNIb3N0OjpzaG93TWVkaWFDb250cm9sc0Nv
bnRleHRNZW51KEhUTUxFbGVtZW50JiB0YXJnZXQsIFN0cmluZwogCiAgICAgaWYgKG9wdGlvbnNK
U09OT2JqZWN0LT5nZXRCb29sZWFuKCJpbmNsdWRlU3VidGl0bGVzIl9zKS52YWx1ZV9vcihmYWxz
ZSkpIHsKICAgICAgICAgaWYgKGF1dG8qIHRleHRUcmFja3MgPSBtZWRpYUVsZW1lbnQudGV4dFRy
YWNrcygpOyB0ZXh0VHJhY2tzICYmIHRleHRUcmFja3MtPmxlbmd0aCgpKSB7Ci0gICAgICAgICAg
ICBWZWN0b3I8TWVudUl0ZW0+IHN1YnRpdGxlTWVudUl0ZW1zOwotCiAgICAgICAgICAgICBhdXRv
JiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBwYWdlLT5ncm91cCgpLmVuc3VyZUNhcHRpb25QcmVmZXJl
bmNlcygpOwogICAgICAgICAgICAgYXV0byBzb3J0ZWRUZXh0VHJhY2tzID0gY2FwdGlvblByZWZl
cmVuY2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUodGV4dFRyYWNrcywgeyBUZXh0VHJhY2s6Oktp
bmQ6OlN1YnRpdGxlcywgVGV4dFRyYWNrOjpLaW5kOjpDYXB0aW9ucywgVGV4dFRyYWNrOjpLaW5k
OjpEZXNjcmlwdGlvbnMgfSk7CiAgICAgICAgICAgICBib29sIGFsbFRyYWNrc0Rpc2FibGVkID0g
bm90Rm91bmQgPT0gc29ydGVkVGV4dFRyYWNrcy5maW5kSWYoW10gKGNvbnN0IGF1dG8mIHRleHRU
cmFjaykgewogICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0VHJhY2stPm1vZGUoKSA9PSBUZXh0
VHJhY2s6Ok1vZGU6OlNob3dpbmc7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGJvb2wg
dXNlc0F1dG9tYXRpY1RyYWNrID0gY2FwdGlvblByZWZlcmVuY2VzLmNhcHRpb25EaXNwbGF5TW9k
ZSgpID09IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OkF1dG9tYXRpYyAmJiBhbGxUcmFja3NEaXNh
YmxlZDsKLSAgICAgICAgICAgIGZvciAoYXV0byYgdGV4dFRyYWNrIDogc29ydGVkVGV4dFRyYWNr
cykgeworICAgICAgICAgICAgYXV0byBzdWJ0aXRsZU1lbnVJdGVtcyA9IHNvcnRlZFRleHRUcmFj
a3MubWFwKFsmXShhdXRvJiB0ZXh0VHJhY2spIHsKICAgICAgICAgICAgICAgICBib29sIGNoZWNr
ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAoYWxsVHJhY2tzRGlzYWJsZWQgJiYgdGV4
dFRyYWNrID09ICZUZXh0VHJhY2s6OmNhcHRpb25NZW51T2ZmSXRlbSgpICYmIChjYXB0aW9uUHJl
ZmVyZW5jZXMuY2FwdGlvbkRpc3BsYXlNb2RlKCkgPT0gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6
Rm9yY2VkT25seSB8fCBjYXB0aW9uUHJlZmVyZW5jZXMuY2FwdGlvbkRpc3BsYXlNb2RlKCkgPT0g
Q2FwdGlvblVzZXJQcmVmZXJlbmNlczo6TWFudWFsKSkKICAgICAgICAgICAgICAgICAgICAgY2hl
Y2tlZCA9IHRydWU7CkBAIC01ODQsOCArNTgxLDggQEAgYm9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6
c2hvd01lZGlhQ29udHJvbHNDb250ZXh0TWVudShIVE1MRWxlbWVudCYgdGFyZ2V0LCBTdHJpbmcK
ICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoIXVzZXNBdXRvbWF0aWNUcmFjayAmJiB0ZXh0VHJhY2stPm1vZGUoKSA9PSBUZXh0VHJh
Y2s6Ok1vZGU6OlNob3dpbmcpCiAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIHN1YnRpdGxlTWVudUl0ZW1zLmFwcGVuZChjcmVhdGVNZW51SXRlbSh0
ZXh0VHJhY2ssIGNhcHRpb25QcmVmZXJlbmNlcy5kaXNwbGF5TmFtZUZvclRyYWNrKHRleHRUcmFj
ay5nZXQoKSksIGNoZWNrZWQpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1
cm4gY3JlYXRlTWVudUl0ZW0odGV4dFRyYWNrLCBjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5h
bWVGb3JUcmFjayh0ZXh0VHJhY2suZ2V0KCkpLCBjaGVja2VkKTsKKyAgICAgICAgICAgIH0pOwog
CiAgICAgICAgICAgICBpZiAoIXN1YnRpdGxlTWVudUl0ZW1zLmlzRW1wdHkoKSkKICAgICAgICAg
ICAgICAgICBpdGVtcy5hcHBlbmQoY3JlYXRlU3VibWVudShXRUJfVUlfU1RSSU5HX0tFWSgiU3Vi
dGl0bGVzIiwgIlN1YnRpdGxlcyAoTWVkaWEgQ29udHJvbHMgTWVudSkiLCAiU3VidGl0bGVzIG1l
ZGlhIGNvbnRyb2xzIGNvbnRleHQgbWVudSB0aXRsZSIpLCAiY2FwdGlvbnMuYnViYmxlIl9zLCBX
VEZNb3ZlKHN1YnRpdGxlTWVudUl0ZW1zKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcAppbmRleCA5MTI3NDdmNDA2YzI5NTk0OTk3
M2I1YmIxMzQ5ZGJjYTY3NDFjMTM1Li5hMmU2NThhOTJmOTk3ZDdmNGI0M2UxNzAzZjRhMGUwOTQ5
MTdiMGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01l
ZGlhU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01l
ZGlhU291cmNlLmNwcApAQCAtMTA1MSwxMCArMTA1MSw5IEBAIHZvaWQgTWVkaWFTb3VyY2U6Om9u
UmVhZHlTdGF0ZUNoYW5nZShSZWFkeVN0YXRlIG9sZFN0YXRlLCBSZWFkeVN0YXRlIG5ld1N0YXRl
KQogCiBWZWN0b3I8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVNvdXJjZTo6YWN0aXZlUmFuZ2Vz
KCkgY29uc3QKIHsKLSAgICBWZWN0b3I8UGxhdGZvcm1UaW1lUmFuZ2VzPiBhY3RpdmVSYW5nZXM7
Ci0gICAgZm9yIChhdXRvJiBzb3VyY2VCdWZmZXIgOiAqbV9hY3RpdmVTb3VyY2VCdWZmZXJzKQot
ICAgICAgICBhY3RpdmVSYW5nZXMuYXBwZW5kKHNvdXJjZUJ1ZmZlci0+YnVmZmVyZWRJbnRlcm5h
bCgpLnJhbmdlcygpKTsKLSAgICByZXR1cm4gYWN0aXZlUmFuZ2VzOworICAgIHJldHVybiBXVEY6
Om1hcCgqbV9hY3RpdmVTb3VyY2VCdWZmZXJzLCBbXShhdXRvJiBzb3VyY2VCdWZmZXIpIHsKKyAg
ICAgICAgcmV0dXJuIHNvdXJjZUJ1ZmZlci0+YnVmZmVyZWRJbnRlcm5hbCgpLnJhbmdlcygpOwor
ICAgIH0pOwogfQogCiBFeGNlcHRpb25PcjxSZWY8U291cmNlQnVmZmVyUHJpdmF0ZT4+IE1lZGlh
U291cmNlOjpjcmVhdGVTb3VyY2VCdWZmZXJQcml2YXRlKGNvbnN0IENvbnRlbnRUeXBlJiBpbmNv
bWluZ1R5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNl
L1NhbXBsZU1hcC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9TYW1wbGVN
YXAuaAppbmRleCBlYWY0OTMxNTk3ZDI2ODUyM2M2NjdiZDljZGNjNGNlYTY1NDMzNjk1Li5hZjFl
MTA0NTgxNzg3ZjE1ZjZmMWYzODViMjU3MjQ0NGQ4ODU5NWZhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1hcC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmgKQEAgLTkxLDYgKzkxLDcgQEAgcHVi
bGljOgogICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4g
bV9zYW1wbGVzLnJiZWdpbigpOyB9CiAgICAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1
cm4gbV9zYW1wbGVzLnJlbmQoKTsgfQogICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5yZW5kKCk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5zaXplKCk7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIGl0
ZXJhdG9yIGZpbmRTYW1wbGVXaXRoRGVjb2RlS2V5KGNvbnN0IEtleVR5cGUmKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBpdGVyYXRvciBmaW5kU2FtcGxlQWZ0ZXJEZWNvZGVLZXkoY29uc3QgS2V5VHlw
ZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3Vy
Y2VCdWZmZXJMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJj
ZUJ1ZmZlckxpc3QuaAppbmRleCBmYzZlMDczYWI5MGU3NmQxODE1Zjg4OTZiNmY2NjA5NmRmMmZk
ZGQ1Li5iZDZlM2I3N2M5ZDc0MzBmZWEyMTZlOGFlYWY4ZDEzM2JjMjY3YzFlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3Qu
aApAQCAtNDcsOCArNDcsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxTb3VyY2VCdWZmZXJM
aXN0PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogICAgIHZpcnR1YWwgflNvdXJj
ZUJ1ZmZlckxpc3QoKTsKIAotICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9saXN0LnNpemUoKTsgfQotICAgIFNvdXJjZUJ1ZmZlciogaXRlbSh1bnNpZ25lZCBsb25n
IGluZGV4KSBjb25zdCB7IHJldHVybiAoaW5kZXggPCBtX2xpc3Quc2l6ZSgpKSA/IG1fbGlzdFtp
bmRleF0uZ2V0KCkgOiBudWxscHRyOyB9CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gbV9saXN0LnNpemUoKTsgfQorCisgICAgU291cmNlQnVmZmVyKiBpdGVtKHVuc2lnbmVk
IGluZGV4KSBjb25zdCB7IHJldHVybiAoaW5kZXggPCBtX2xpc3Quc2l6ZSgpKSA/IG1fbGlzdFtp
bmRleF0uZ2V0KCkgOiBudWxscHRyOyB9CiAKICAgICB2b2lkIGFkZChSZWY8U291cmNlQnVmZmVy
PiYmKTsKICAgICB2b2lkIHJlbW92ZShTb3VyY2VCdWZmZXImKTsKQEAgLTU4LDYgKzU5LDkgQEAg
cHVibGljOgogCiAgICAgVmVjdG9yPFJlZlB0cjxTb3VyY2VCdWZmZXI+Pjo6aXRlcmF0b3IgYmVn
aW4oKSB7IHJldHVybiBtX2xpc3QuYmVnaW4oKTsgfQogICAgIFZlY3RvcjxSZWZQdHI8U291cmNl
QnVmZmVyPj46Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fbGlzdC5lbmQoKTsgfQorICAgIFZl
Y3RvcjxSZWZQdHI8U291cmNlQnVmZmVyPj46OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Qg
eyByZXR1cm4gbV9saXN0LmJlZ2luKCk7IH0KKyAgICBWZWN0b3I8UmVmUHRyPFNvdXJjZUJ1ZmZl
cj4+Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2xpc3QuZW5kKCk7IH0K
KyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KIAogICAg
IC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQogICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50
VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gU291cmNlQnVmZmVyTGlzdEV2
ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
c3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5jcHAKaW5kZXggZWFmM2EyZTFlNzk4YTQ4MWY3NjhiMzNj
NWZkMjlkM2M3Y2JhYjNhZS4uODJjMWEzYTBjMDcyNTVjMWU4MGRhNjFkNTkwYmE5Yzk0MWNjMDY5
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhl
c2lzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVz
aXMuY3BwCkBAIC05Myw5ICs5MywxMCBAQCBjb25zdCBWZWN0b3I8UmVmPFNwZWVjaFN5bnRoZXNp
c1ZvaWNlPj4mIFNwZWVjaFN5bnRoZXNpczo6Z2V0Vm9pY2VzKCkKICAgICAgICAgcmV0dXJuIG1f
dm9pY2VMaXN0OwogCiAgICAgLy8gSWYgdGhlIHZvaWNlTGlzdCBpcyBlbXB0eSwgdGhhdCdzIHRo
ZSBjdWUgdG8gZ2V0IHRoZSB2b2ljZXMgZnJvbSB0aGUgcGxhdGZvcm0gYWdhaW4uCi0gICAgZm9y
IChhdXRvJiB2b2ljZSA6IG1fc3BlZWNoU3ludGhlc2lzQ2xpZW50ID8gbV9zcGVlY2hTeW50aGVz
aXNDbGllbnQtPnZvaWNlTGlzdCgpIDogZW5zdXJlUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcigp
LnZvaWNlTGlzdCgpKQotICAgICAgICBtX3ZvaWNlTGlzdC5hcHBlbmQoU3BlZWNoU3ludGhlc2lz
Vm9pY2U6OmNyZWF0ZSgqdm9pY2UpKTsKLQorICAgIGF1dG8mIHZvaWNlTGlzdCA9IG1fc3BlZWNo
U3ludGhlc2lzQ2xpZW50ID8gbV9zcGVlY2hTeW50aGVzaXNDbGllbnQtPnZvaWNlTGlzdCgpIDog
ZW5zdXJlUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcigpLnZvaWNlTGlzdCgpOworICAgIG1fdm9p
Y2VMaXN0ID0gdm9pY2VMaXN0Lm1hcChbXShhdXRvJiB2b2ljZSkgeworICAgICAgICByZXR1cm4g
U3BlZWNoU3ludGhlc2lzVm9pY2U6OmNyZWF0ZSgqdm9pY2UpOworICAgIH0pOwogICAgIHJldHVy
biBtX3ZvaWNlTGlzdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9z
cGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2subW0gYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFzay5tbQppbmRleCBmMWI5
Njk1ODA1N2QyZmU2MDQ0ZDJjN2IyNTlkYjZjNWNlYjQ0ZWZlLi5hNWU4NWFmODI5YmMwZGRkZWY2
MmM2MWE0ZjZjOWYyY2YyYWQ2Y2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFzay5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFzay5tbQpAQCAt
MTI4LDkgKzEyOCw4IEBAIC0gKHZvaWQpY2FsbGJhY2tXaXRoVHJhbnNjcmlwdGlvbnM6KE5TQXJy
YXk8U0ZUcmFuc2NyaXB0aW9uICo+ICopdHJhbnNjcmlwdGlvbnMKICAgICAgICAgaWYgKGFsdGVy
bmF0aXZlcy5zaXplKCkgPT0gX21heEFsdGVybmF0aXZlcykKICAgICAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICBWZWN0b3I8U3BlZWNoUmVjb2duaXRpb25SZXN1bHREYXRhPiBkYXRhczsKLSAg
ICBkYXRhcy5hcHBlbmQoU3BlZWNoUmVjb2duaXRpb25SZXN1bHREYXRhIHsgV1RGTW92ZShhbHRl
cm5hdGl2ZXMpLCBib29sKGlzRmluYWwpIH0pOwotICAgIF9kZWxlZ2F0ZUNhbGxiYWNrKFNwZWVj
aFJlY29nbml0aW9uVXBkYXRlOjpjcmVhdGVSZXN1bHQoX2lkZW50aWZpZXIsIFdURk1vdmUoZGF0
YXMpKSk7CisgICAgU3BlZWNoUmVjb2duaXRpb25SZXN1bHREYXRhIGRhdGEgeyBXVEZNb3ZlKGFs
dGVybmF0aXZlcyksICEhaXNGaW5hbCB9OworICAgIF9kZWxlZ2F0ZUNhbGxiYWNrKFNwZWVjaFJl
Y29nbml0aW9uVXBkYXRlOjpjcmVhdGVSZXN1bHQoX2lkZW50aWZpZXIsIHsgV1RGTW92ZShkYXRh
KSB9KSk7CiB9CiAKIC0gKHZvaWQpYXVkaW9TYW1wbGVzQXZhaWxhYmxlOihDTVNhbXBsZUJ1ZmZl
clJlZilzYW1wbGVCdWZmZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3Bl
ZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrTW9jay5tbSBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrTW9jay5tbQppbmRl
eCBiYzVjNjIxOWI1ZGFkYzNiMWNkYzU5MGQ2NWM4OTdiNzI1MGIxZTIxLi45NjNmYjQ3YzRjODVh
YTA2MDVhMmRhYmM3MTllNTY3NGMyNjBhYmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFza01vY2subW0KKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRh
c2tNb2NrLm1tCkBAIC02MywxMSArNjMsOSBAQCAtICh2b2lkKWF1ZGlvU2FtcGxlc0F2YWlsYWJs
ZTooQ01TYW1wbGVCdWZmZXJSZWYpc2FtcGxlQnVmZmVyCiAgICAgfQogCiAgICAgLy8gRmFrZSBz
b21lIHJlY29nbml0aW9uIHJlc3VsdHMuCi0gICAgVmVjdG9yPFNwZWVjaFJlY29nbml0aW9uQWx0
ZXJuYXRpdmVEYXRhPiBhbHRlcm5hdGl2ZXM7Ci0gICAgYWx0ZXJuYXRpdmVzLmFwcGVuZChTcGVl
Y2hSZWNvZ25pdGlvbkFsdGVybmF0aXZlRGF0YSB7ICJUZXN0IiwgMS4wIH0pOwotICAgIFZlY3Rv
cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdERhdGE+IGRhdGFzOwotICAgIGRhdGFzLmFwcGVuZChT
cGVlY2hSZWNvZ25pdGlvblJlc3VsdERhdGEgeyBXVEZNb3ZlKGFsdGVybmF0aXZlcyksIHRydWUg
IH0pOwotICAgIF9kZWxlZ2F0ZUNhbGxiYWNrKFNwZWVjaFJlY29nbml0aW9uVXBkYXRlOjpjcmVh
dGVSZXN1bHQoX2lkZW50aWZpZXIsIFdURk1vdmUoZGF0YXMpKSk7CisgICAgU3BlZWNoUmVjb2du
aXRpb25BbHRlcm5hdGl2ZURhdGEgYWx0ZXJuYXRpdmUgeyAiVGVzdCIsIDEuMCB9OworICAgIFNw
ZWVjaFJlY29nbml0aW9uUmVzdWx0RGF0YSBkYXRhIHsgeyBXVEZNb3ZlKGFsdGVybmF0aXZlKSB9
LCB0cnVlIH07CisgICAgX2RlbGVnYXRlQ2FsbGJhY2soU3BlZWNoUmVjb2duaXRpb25VcGRhdGU6
OmNyZWF0ZVJlc3VsdChfaWRlbnRpZmllciwgeyBXVEZNb3ZlKGRhdGEpIH0pKTsKIAogICAgIGlm
ICghX2RvTXVsdGlwbGVSZWNvZ25pdGlvbnMpCiAgICAgICAgIFtzZWxmIGFib3J0XTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCmluZGV4
IGUzNTlhMDQzYjJlM2NmMzlmOWMyNmJjNTllOThmMTA1ZTEzMmMxMDUuLjhiY2U2NjcwNjZhM2Y3
NzZmMGVhYmE5NjZiODFhNzQ2YTk3NWUzMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYW5p
bWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcApAQCAtMTY0LDEwICsxNjQsOCBAQCBzdGF0
aWMgaW5saW5lIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRGdW5jKGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbnMmIGZyb20sIGNvbgogICAgIGlmIChjb250ZXh0LmNvbXBvc2l0ZU9wZXJhdGlvbiA9
PSBDb21wb3NpdGVPcGVyYXRpb246OkFkZCkgewogICAgICAgICBBU1NFUlQoY29udGV4dC5wcm9n
cmVzcyA9PSAxLjApOwogICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIHJlc3VsdE9wZXJhdGlv
bnM7Ci0gICAgICAgIGZvciAoYXV0byBvcGVyYXRpb24gOiBmcm9tLm9wZXJhdGlvbnMoKSkKLSAg
ICAgICAgICAgIHJlc3VsdE9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChvcGVyYXRpb24p
OwotICAgICAgICBmb3IgKGF1dG8gb3BlcmF0aW9uIDogdG8ub3BlcmF0aW9ucygpKQotICAgICAg
ICAgICAgcmVzdWx0T3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKG9wZXJhdGlvbik7Cisg
ICAgICAgIHJlc3VsdE9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZFZlY3Rvcihmcm9tLm9w
ZXJhdGlvbnMoKSk7CisgICAgICAgIHJlc3VsdE9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVu
ZFZlY3Rvcih0by5vcGVyYXRpb25zKCkpOwogICAgICAgICByZXR1cm4gcmVzdWx0T3BlcmF0aW9u
czsKICAgICB9CiAgICAgYXV0byBib3hTaXplID0gaXM8UmVuZGVyQm94Pihjb250ZXh0LmNsaWVu
dC0+cmVuZGVyZXIoKSkgPyBkb3duY2FzdDxSZW5kZXJCb3g+KCpjb250ZXh0LmNsaWVudC0+cmVu
ZGVyZXIoKSkuYm9yZGVyQm94UmVjdCgpLnNpemUoKSA6IExheW91dFNpemUoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmVzQ29udHJvbGxl
ci5jcHAKaW5kZXggYjVmZDJhZWYxMDAwMTJkYTljNGJkYjIxZTdhZDA0MWEzNjY0MTZiZi4uNzA5
NDUzYmM2NjI1MmY5NTk4MjRiYTk0ZWNhN2EzMzAwOGM5Y2EzYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmVzQ29udHJvbGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmVzQ29udHJvbGxlci5jcHAK
QEAgLTk4LDkgKzk4LDcgQEAgdm9pZCBEb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXI6OnVwZGF0
ZUFuaW1hdGlvbnNBbmRTZW5kRXZlbnRzKFJlZHVjZWRSZXNvbHV0aW8KICAgICBBU1NFUlQoIW1f
dGltZWxpbmVzLmhhc051bGxSZWZlcmVuY2VzKCkpOwogCiAgICAgLy8gV2UgbmVlZCB0byBjb3B5
IG1fdGltZWxpbmVzIGJlZm9yZSBpdGVyYXRpbmcgb3ZlciBpdHMgbWVtYmVycyBzaW5jZSB0aGUg
c3RlcHMgaW4gdGhpcyBwcm9jZWR1cmUgbWF5IG11dGF0ZSBtX3RpbWVsaW5lcy4KLSAgICBWZWN0
b3I8UmVmPERvY3VtZW50VGltZWxpbmU+PiBwcm90ZWN0ZWRUaW1lbGluZXM7Ci0gICAgZm9yIChh
dXRvJiB0aW1lbGluZSA6IG1fdGltZWxpbmVzKQotICAgICAgICBwcm90ZWN0ZWRUaW1lbGluZXMu
YXBwZW5kKHRpbWVsaW5lKTsKKyAgICBhdXRvIHByb3RlY3RlZFRpbWVsaW5lcyA9IGNvcHlUb1Zl
Y3Rvck9mPFJlZjxEb2N1bWVudFRpbWVsaW5lPj4obV90aW1lbGluZXMpOwogCiAgICAgLy8gV2Ug
bmVlZCB0byBmcmVlemUgdGhlIGN1cnJlbnQgdGltZSBldmVuIGlmIG5vIGFuaW1hdGlvbiBpcyBy
dW5uaW5nLgogICAgIC8vIGRvY3VtZW50LnRpbWVsaW5lLmN1cnJlbnRUaW1lIG1heSBiZSBjYWxs
ZWQgZnJvbSBhIHJBRiBjYWxsYmFjayBhbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5
ZnJhbWVFZmZlY3QuY3BwCmluZGV4IDQ0NDRjY2QwODdhZTQ4MDQ4MGM1ODlmZjRkNjg4ZTNmYzdj
MWEyNmEuLjNkMDkxZWVlNTM4NzQ0MjAzZjczOGI4NmMwNzY3NjU3ZjRlY2YwOGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcApAQCAtMzc1LDggKzM3NSw3
IEBAIHN0YXRpYyBpbmxpbmUgRXhjZXB0aW9uT3I8dm9pZD4gcHJvY2Vzc1Byb3BlcnR5SW5kZXhl
ZEtleWZyYW1lcyhKU0dsb2JhbE9iamVjdCYKICAgICAgICAgY29tcHV0ZU1pc3NpbmdLZXlmcmFt
ZU9mZnNldHMocHJvcGVydHlLZXlmcmFtZXMpOwogCiAgICAgICAgIC8vIDcuIEFkZCBrZXlmcmFt
ZXMgaW4gcHJvcGVydHkga2V5ZnJhbWVzIHRvIHByb2Nlc3NlZCBrZXlmcmFtZXMuCi0gICAgICAg
IGZvciAoYXV0byYga2V5ZnJhbWUgOiBwcm9wZXJ0eUtleWZyYW1lcykKLSAgICAgICAgICAgIHBh
cnNlZEtleWZyYW1lcy5hcHBlbmQoV1RGTW92ZShrZXlmcmFtZSkpOworICAgICAgICBwYXJzZWRL
ZXlmcmFtZXMuYXBwZW5kVmVjdG9yKHByb3BlcnR5S2V5ZnJhbWVzKTsKICAgICB9CiAKICAgICAv
LyAzLiBTb3J0IHByb2Nlc3NlZCBrZXlmcmFtZXMgYnkgdGhlIGNvbXB1dGVkIGtleWZyYW1lIG9m
ZnNldCBvZiBlYWNoIGtleWZyYW1lIGluIGluY3JlYXNpbmcgb3JkZXIuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uY3BwCmluZGV4
IDUzNDllZjM4ZmU2OTA2NGRkNDUzZmQ2OGQ3ZGM2YThlZTc3M2Q5ZWMuLmMwNWNkODk0MTVmZjQx
MjA0ZTNjM2M4Yzc3M2Y0OGQxMTM2M2MwOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uY3BwCkBAIC00Niw4ICs0Niw3IEBA
IENvbnRlbnRFeHRlbnNpb246OkNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBpZGVudGlm
aWVyLCBSZWY8Q29tcGlsZWRDb250ZW50CiAgICAgLCBtX2V4dGVuc2lvbkJhc2VVUkwoV1RGTW92
ZShleHRlbnNpb25CYXNlVVJMKSkKIHsKICAgICBERkFCeXRlY29kZUludGVycHJldGVyIGludGVy
cHJldGVyKG1fY29tcGlsZWRFeHRlbnNpb24tPnVybEZpbHRlcnNCeXRlY29kZSgpKTsKLSAgICBm
b3IgKHVpbnQ2NF90IGFjdGlvbiA6IGludGVycHJldGVyLmFjdGlvbnNNYXRjaGluZ0V2ZXJ5dGhp
bmcoKSkKLSAgICAgICAgbV91bml2ZXJzYWxBY3Rpb25zLmFwcGVuZChhY3Rpb24pOworICAgIG1f
dW5pdmVyc2FsQWN0aW9ucyA9IGNvcHlUb1ZlY3RvcihpbnRlcnByZXRlci5hY3Rpb25zTWF0Y2hp
bmdFdmVyeXRoaW5nKCkpOwogCiAgICAgaWYgKHNob3VsZENvbXBpbGVDU1MgPT0gU2hvdWxkQ29t
cGlsZUNTUzo6WWVzKQogICAgICAgICBjb21waWxlR2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgKaW5kZXggYmIxMjczYTVmZDNlZThlNjg4MGJh
NzY3YWY5MjkxN2ViZGRhNzQ4Zi4uZjlhNzYwNjA0MDg5YjBjZTJmNjlmODc2ODY1NGYxMjY4MjM3
YTY3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaApAQCAtNTgsNiArNTgsNyBAQCBwdWJs
aWM6CiAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuZW5k
KCk7IH0KICAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0K
ICAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorICAgIHNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpOyB9CiAKICAgICB2b2lkIGFw
cGVuZChSZWY8Q1NTVmFsdWU+JiYpOwogICAgIHZvaWQgcHJlcGVuZChSZWY8Q1NTVmFsdWU+JiYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5v
ZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3Bw
CmluZGV4IDZhYjVjYjY3NGQ0MTUzZDgyMjUyZjI1ODdlZTQ2ZmNmNWFhYzhjNGEuLjc5ZjJhODgy
NjBjZWFlZjBkNTgwMTU3NjYxMzljMDc1NzY2N2MwMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAKQEAgLTYyMCwxNCArNjIwLDExIEBA
IHZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmhvaXN0Q2hpbGRyZW5XaXRoT3BlcmF0b3IoQ2Fs
Y09wZXJhdG9yIG9wKQogCiAgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBu
ZXdDaGlsZHJlbjsKICAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikgewotICAgICAg
ICBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkKSAmJiBkb3duY2FzdDxDU1NDYWxj
T3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpLmNhbGNPcGVyYXRvcigpID09IG9wKSB7Ci0gICAg
ICAgICAgICBhdXRvJiBjaGlsZHJlbiA9IGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihj
aGlsZC5nZXQoKSkuY2hpbGRyZW4oKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY2hpbGRUb01v
dmUgOiBjaGlsZHJlbikKLSAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmQoV1RGTW92
ZShjaGlsZFRvTW92ZSkpOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgaWYgKGlzPENTU0NhbGNP
cGVyYXRpb25Ob2RlPihjaGlsZCkgJiYgZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNo
aWxkLmdldCgpKS5jYWxjT3BlcmF0b3IoKSA9PSBvcCkKKyAgICAgICAgICAgIG5ld0NoaWxkcmVu
LmFwcGVuZFZlY3Rvcihkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkp
LmNoaWxkcmVuKCkpOworICAgICAgICBlbHNlCiAgICAgICAgICAgICBuZXdDaGlsZHJlbi5hcHBl
bmQoV1RGTW92ZShjaGlsZCkpOwogICAgIH0KLSAgICAKICAgICBuZXdDaGlsZHJlbi5zaHJpbmtU
b0ZpdCgpOwogICAgIG1fY2hpbGRyZW4gPSBXVEZNb3ZlKG5ld0NoaWxkcmVuKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdMaXN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRE9NU3RyaW5nTGlzdC5oCmluZGV4IDY5Y2IyZDdmOTMyZTAwYTI2NWUwOGQ4ZmYzYjFj
YjUwYzEyNzdjZTUuLjMxNzJiMzM2ZjViNTI0NWU3MTA1YjkwNWY3NTY3NGZjMTc3YzEwNWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdMaXN0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RPTVN0cmluZ0xpc3QuaApAQCAtNDAsOSArNDAsMTQgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBET01TdHJpbmdMaXN0KTsKICAgICB9CiAKKyAg
ICBzdGF0aWMgUmVmPERPTVN0cmluZ0xpc3Q+IGNyZWF0ZShWZWN0b3I8U3RyaW5nPiYmIHN0cmlu
Z3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBET01TdHJpbmdMaXN0KFdU
Rk1vdmUoc3RyaW5ncykpKTsKKyAgICB9CisKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiBtX3N0cmluZ3MuaXNFbXB0eSgpOyB9CiAgICAgdm9pZCBjbGVhcigpIHsgbV9zdHJpbmdz
LmNsZWFyKCk7IH0KLSAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIHN0cmluZykgeyBtX3N0
cmluZ3MuYXBwZW5kKHN0cmluZyk7IH0KKyAgICB2b2lkIGFwcGVuZChTdHJpbmcmJiBzdHJpbmcp
IHsgbV9zdHJpbmdzLmFwcGVuZChXVEZNb3ZlKHN0cmluZykpOyB9CiAgICAgdm9pZCBzb3J0KCk7
CiAKICAgICAvLyBJbXBsZW1lbnRzIHRoZSBJREwuCkBAIC01Myw3ICs1OCwxMCBAQCBwdWJsaWM6
CiAgICAgb3BlcmF0b3IgY29uc3QgVmVjdG9yPFN0cmluZz4mKCkgY29uc3QgeyByZXR1cm4gbV9z
dHJpbmdzOyB9CiAKIHByaXZhdGU6Ci0gICAgRE9NU3RyaW5nTGlzdCgpIHsgfQorICAgIERPTVN0
cmluZ0xpc3QoKSA9IGRlZmF1bHQ7CisgICAgZXhwbGljaXQgRE9NU3RyaW5nTGlzdChWZWN0b3I8
U3RyaW5nPiYmIHN0cmluZ3MpCisgICAgICAgIDogbV9zdHJpbmdzKFdURk1vdmUoc3RyaW5ncykp
CisgICAgeyB9CiAKICAgICBWZWN0b3I8U3RyaW5nPiBtX3N0cmluZ3M7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnRQYXRoLmNwcAppbmRleCA0NmZiNjQ1ZTA1MzM3NTgxZjlmYTM0NTIzMDNhMmZlMzgwZjQ2
YzA2Li5lY2JjYzAwZjM2ZjA3NmUzMjBiNmFkMTZhZDFkOWEwYmYwMzhlMjc4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRQYXRoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnRQYXRoLmNwcApAQCAtMjc0LDExICsyNzQsMTEgQEAgVmVjdG9yPEV2ZW50VGFyZ2V0
Kj4gRXZlbnRQYXRoOjpjb21wdXRlUGF0aFVuY2xvc2VkVG9UYXJnZXQoY29uc3QgRXZlbnRUYXJn
ZXQmIHQKIAogRXZlbnRQYXRoOjpFdmVudFBhdGgoY29uc3QgVmVjdG9yPEV2ZW50VGFyZ2V0Kj4m
IHRhcmdldHMpCiB7Ci0gICAgZm9yIChhdXRvKiB0YXJnZXQgOiB0YXJnZXRzKSB7CisgICAgbV9w
YXRoID0gdGFyZ2V0cy5tYXAoWyZdKGF1dG8qIHRhcmdldCkgewogICAgICAgICBBU1NFUlQodGFy
Z2V0KTsKICAgICAgICAgQVNTRVJUKCFpczxOb2RlPih0YXJnZXQpKTsKLSAgICAgICAgbV9wYXRo
LmFwcGVuZChFdmVudENvbnRleHQgeyBFdmVudENvbnRleHQ6OlR5cGU6Ok5vcm1hbCwgbnVsbHB0
ciwgdGFyZ2V0LCAqdGFyZ2V0cy5iZWdpbigpLCAwIH0pOwotICAgIH0KKyAgICAgICAgcmV0dXJu
IEV2ZW50Q29udGV4dCB7IEV2ZW50Q29udGV4dDo6VHlwZTo6Tm9ybWFsLCBudWxscHRyLCB0YXJn
ZXQsICp0YXJnZXRzLmJlZ2luKCksIDAgfTsKKyAgICB9KTsKIH0KIAogc3RhdGljIE5vZGUqIG1v
dmVPdXRPZkFsbFNoYWRvd1Jvb3RzKE5vZGUmIHN0YXJ0aW5nTm9kZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9GdWxsc2NyZWVuTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRnVsbHNjcmVlbk1hbmFnZXIuY3BwCmluZGV4IGVjZTQ4ZTQyNjc5NzA5NWRhNzA5YTA0ZGE2
ODZhNGZlMGJjMjkyOGMuLjBlOWJiOTQ0MWMzN2RmNTNkNDcxODM4Y2NjMWFhZGNiNjM3NzhiZWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9GdWxsc2NyZWVuTWFuYWdlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0Z1bGxzY3JlZW5NYW5hZ2VyLmNwcApAQCAtMjY1LDkgKzI2
NSw4IEBAIHZvaWQgRnVsbHNjcmVlbk1hbmFnZXI6OmNhbmNlbEZ1bGxzY3JlZW4oKQogCiAgICAg
Ly8gVG8gYWNoaWV2ZSB0aGF0IGFpbSwgcmVtb3ZlIGFsbCB0aGUgZWxlbWVudHMgZnJvbSB0aGUg
dG9wIGRvY3VtZW50J3Mgc3RhY2sgZXhjZXB0IGZvciB0aGUgZmlyc3QgYmVmb3JlCiAgICAgLy8g
Y2FsbGluZyB3ZWJraXRFeGl0RnVsbHNjcmVlbigpOgotICAgIFZlY3RvcjxSZWZQdHI8RWxlbWVu
dD4+IHJlcGxhY2VtZW50RnVsbHNjcmVlbkVsZW1lbnRTdGFjazsKLSAgICByZXBsYWNlbWVudEZ1
bGxzY3JlZW5FbGVtZW50U3RhY2suYXBwZW5kKHRvcERvY3VtZW50LmZ1bGxzY3JlZW5NYW5hZ2Vy
KCkuZnVsbHNjcmVlbkVsZW1lbnQoKSk7Ci0gICAgdG9wRG9jdW1lbnQuZnVsbHNjcmVlbk1hbmFn
ZXIoKS5tX2Z1bGxzY3JlZW5FbGVtZW50U3RhY2suc3dhcChyZXBsYWNlbWVudEZ1bGxzY3JlZW5F
bGVtZW50U3RhY2spOworICAgIFJlZlB0ciBmdWxsc2NyZW5FbGVtZW50ID0gdG9wRG9jdW1lbnQu
ZnVsbHNjcmVlbk1hbmFnZXIoKS5mdWxsc2NyZWVuRWxlbWVudCgpOworICAgIHRvcERvY3VtZW50
LmZ1bGxzY3JlZW5NYW5hZ2VyKCkubV9mdWxsc2NyZWVuRWxlbWVudFN0YWNrID0geyBXVEZNb3Zl
KGZ1bGxzY3JlbkVsZW1lbnQpIH07CiAKICAgICB0b3BEb2N1bWVudC5mdWxsc2NyZWVuTWFuYWdl
cigpLmV4aXRGdWxsc2NyZWVuKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
TG9hZGFibGVTY3JpcHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0xvYWRhYmxlU2NyaXB0LmNw
cAppbmRleCAxYmRkZTFlYjVkNmEwN2YxMTczODliOTljNzVlY2IwMWI2MGY4ODA5Li40MWY0M2Nl
NjY4NTAzMGVkOWQzOWRmMDViOWZjOTIzYjEyMzk1ZGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTG9hZGFibGVTY3JpcHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2Fk
YWJsZVNjcmlwdC5jcHAKQEAgLTUxLDEyICs1MSw4IEBAIHZvaWQgTG9hZGFibGVTY3JpcHQ6OnJl
bW92ZUNsaWVudChMb2FkYWJsZVNjcmlwdENsaWVudCYgY2xpZW50KQogCiB2b2lkIExvYWRhYmxl
U2NyaXB0Ojpub3RpZnlDbGllbnRGaW5pc2hlZCgpCiB7Ci0gICAgUmVmUHRyPExvYWRhYmxlU2Ny
aXB0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotCi0gICAgVmVjdG9yPExvYWRhYmxlU2NyaXB0Q2xp
ZW50Kj4gdmVjdG9yOwotICAgIGZvciAoYXV0byYgcGFpciA6IG1fY2xpZW50cykKLSAgICAgICAg
dmVjdG9yLmFwcGVuZChwYWlyLmtleSk7Ci0gICAgZm9yIChhdXRvJiBjbGllbnQgOiB2ZWN0b3Ip
CisgICAgUmVmIHByb3RlY3RlZFRoaXMgeyAqdGhpcyB9OworICAgIGZvciAoYXV0byYgY2xpZW50
IDogY29weVRvVmVjdG9yKG1fY2xpZW50cy52YWx1ZXMoKSkpCiAgICAgICAgIGNsaWVudC0+bm90
aWZ5RmluaXNoZWQoKnRoaXMpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
UmFkaW9CdXR0b25Hcm91cHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9uR3Jv
dXBzLmNwcAppbmRleCA1MGY0NjMwZjg5ZWM4OTVkZjFjZTVhYjhlZDU4MTg5YjdhZmJmNjYyLi4x
MjI2M2UyNTZlZTU2YTQ1MmMzMjI4MTI1Y2FkZDVmMTcwZjQ1ZjBmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5jcHAKQEAgLTU5LDkgKzU5LDcgQEAgaW5saW5lIGJvb2wg
UmFkaW9CdXR0b25Hcm91cDo6aXNWYWxpZCgpIGNvbnN0CiAKIFZlY3RvcjxSZWY8SFRNTElucHV0
RWxlbWVudD4+IFJhZGlvQnV0dG9uR3JvdXA6Om1lbWJlcnMoKSBjb25zdAogewotICAgIFZlY3Rv
cjxSZWY8SFRNTElucHV0RWxlbWVudD4+IHNvcnRlZE1lbWJlcnM7Ci0gICAgZm9yIChhdXRvJiBt
ZW1iZXIgOiBtX21lbWJlcnMpCi0gICAgICAgIHNvcnRlZE1lbWJlcnMuYXBwZW5kKG1lbWJlcik7
CisgICAgYXV0byBzb3J0ZWRNZW1iZXJzID0gY29weVRvVmVjdG9yT2Y8UmVmPEhUTUxJbnB1dEVs
ZW1lbnQ+PihtX21lbWJlcnMpOwogICAgIHN0ZDo6c29ydChzb3J0ZWRNZW1iZXJzLmJlZ2luKCks
IHNvcnRlZE1lbWJlcnMuZW5kKCksIFtdKGF1dG8mIGEsIGF1dG8mIGIpIHsKICAgICAgICAgcmV0
dXJuIGlzX2x0KHRyZWVPcmRlcjxDb21wb3NlZFRyZWU+KGEsIGIpKTsKICAgICB9KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGlyZWN0b3J5RmlsZUxpc3RDcmVhdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvRGlyZWN0b3J5RmlsZUxpc3RDcmVhdG9yLmNwcAppbmRleCA5
ZDNkYTE4NTNjM2E2MzIwZmViMzE5NzUxNjJlNDM1YWU5M2ZmZGQxLi45ODVmN2E2MmYwYzFmMzk3
NTU4MmViM2Y5Yjk4OTc1MTU2MTU2Njc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0RpcmVjdG9yeUZpbGVMaXN0Q3JlYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9E
aXJlY3RvcnlGaWxlTGlzdENyZWF0b3IuY3BwCkBAIC04NiwxMyArODYsMTEgQEAgc3RhdGljIFZl
Y3RvcjxGaWxlSW5mb3JtYXRpb24+IGdhdGhlckZpbGVJbmZvcm1hdGlvbihjb25zdCBWZWN0b3I8
RmlsZUNob29zZXJGaWwKIHN0YXRpYyBSZWY8RmlsZUxpc3Q+IHRvRmlsZUxpc3QoRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zdCBWZWN0b3I8RmlsZUluZm9ybWF0aW9uPiYgZmlsZXMpCiB7CiAgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBWZWN0b3I8UmVmPEZpbGU+PiBmaWxlT2JqZWN0
czsKLSAgICBmb3IgKGF1dG8mIGZpbGUgOiBmaWxlcykgeworICAgIGF1dG8gZmlsZU9iamVjdHMg
PSBmaWxlcy5tYXAoW2RvY3VtZW50XShhdXRvJiBmaWxlKSB7CiAgICAgICAgIGlmIChmaWxlLnJl
bGF0aXZlUGF0aC5pc051bGwoKSkKLSAgICAgICAgICAgIGZpbGVPYmplY3RzLmFwcGVuZChGaWxl
OjpjcmVhdGUoZG9jdW1lbnQsIGZpbGUucGF0aCwgeyB9LCBmaWxlLmRpc3BsYXlOYW1lKSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZpbGVPYmplY3RzLmFwcGVuZChGaWxlOjpjcmVhdGVX
aXRoUmVsYXRpdmVQYXRoKGRvY3VtZW50LCBmaWxlLnBhdGgsIGZpbGUucmVsYXRpdmVQYXRoKSk7
Ci0gICAgfQorICAgICAgICAgICAgcmV0dXJuIEZpbGU6OmNyZWF0ZShkb2N1bWVudCwgZmlsZS5w
YXRoLCB7IH0sIGZpbGUuZGlzcGxheU5hbWUpOworICAgICAgICByZXR1cm4gRmlsZTo6Y3JlYXRl
V2l0aFJlbGF0aXZlUGF0aChkb2N1bWVudCwgZmlsZS5wYXRoLCBmaWxlLnJlbGF0aXZlUGF0aCk7
CisgICAgfSk7CiAgICAgcmV0dXJuIEZpbGVMaXN0OjpjcmVhdGUoV1RGTW92ZShmaWxlT2JqZWN0
cykpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCmluZGV4
IGM0YjA4NGQyZGU3MWZkMzE5ZmU4YzA2OWI0NWZmN2ZjY2NlZGU1ZWMuLjcyYWZlMDRlMDdmODlj
OGMyNGFmM2Y4YjhjYWQzOGNlMjk2YThkMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNl
bGVjdEVsZW1lbnQuY3BwCkBAIC02MzQsOSArNjM0LDkgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6c2F2ZUxhc3RTZWxlY3Rpb24oKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9s
YXN0T25DaGFuZ2VTZWxlY3Rpb24uY2xlYXIoKTsKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBs
aXN0SXRlbXMoKSkKLSAgICAgICAgbV9sYXN0T25DaGFuZ2VTZWxlY3Rpb24uYXBwZW5kKGlzPEhU
TUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+
KCplbGVtZW50KS5zZWxlY3RlZCgpKTsKKyAgICBtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbiA9IGxp
c3RJdGVtcygpLm1hcChbXShhdXRvJiBlbGVtZW50KSB7CisgICAgICAgIHJldHVybiBpczxIVE1M
T3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50Pigq
ZWxlbWVudCkuc2VsZWN0ZWQoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6c2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgoaW50IGluZGV4KQpAQCAtNjQ1LDEwICs2
NDUsOSBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJ
bmRleChpbnQgaW5kZXgpCiAKICAgICAvLyBDYWNoZSB0aGUgc2VsZWN0aW9uIHN0YXRlIHNvIHdl
IGNhbiByZXN0b3JlIHRoZSBvbGQgc2VsZWN0aW9uIGFzIHRoZSBuZXcKICAgICAvLyBzZWxlY3Rp
b24gcGl2b3RzIGFyb3VuZCB0aGlzIGFuY2hvciBpbmRleC4KLSAgICBtX2NhY2hlZFN0YXRlRm9y
QWN0aXZlU2VsZWN0aW9uLmNsZWFyKCk7Ci0KLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBsaXN0
SXRlbXMoKSkKLSAgICAgICAgbV9jYWNoZWRTdGF0ZUZvckFjdGl2ZVNlbGVjdGlvbi5hcHBlbmQo
aXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxl
bWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCkpOworICAgIG1fY2FjaGVkU3RhdGVGb3JBY3RpdmVT
ZWxlY3Rpb24gPSBsaXN0SXRlbXMoKS5tYXAoW10oYXV0byYgZWxlbWVudCkgeworICAgICAgICBy
ZXR1cm4gaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0
aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCk7CisgICAgfSk7CiB9CiAKIHZvaWQgSFRN
TFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KGludCBpbmRleCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKaW5kZXggMDViMjczNzlmMmQ5MjE5NDQ4OTMyYzQ2
YWIzM2IyZWYwMzFhZmM2YS4uNTliZmM2ZTBmMWU1OTA0M2RjYzViYmRhMmQyMmFhZTM2NWE2MTMx
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKQEAgLTExMiwxMCArMTEyLDkgQEAg
dm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0LAogCiBWZWN0b3I8c3RkOjpvcHRpb25hbDxJbWFnZUJpdG1h
cEJhY2tpbmc+PiBJbWFnZUJpdG1hcDo6ZGV0YWNoQml0bWFwcyhWZWN0b3I8UmVmUHRyPEltYWdl
Qml0bWFwPj4mJiBiaXRtYXBzKQogewotICAgIFZlY3RvcjxzdGQ6Om9wdGlvbmFsPEltYWdlQml0
bWFwQmFja2luZz4+IGJ1ZmZlcnM7Ci0gICAgZm9yIChhdXRvJiBiaXRtYXAgOiBiaXRtYXBzKQot
ICAgICAgICBidWZmZXJzLmFwcGVuZChiaXRtYXAtPnRha2VJbWFnZUJpdG1hcEJhY2tpbmcoKSk7
Ci0gICAgcmV0dXJuIGJ1ZmZlcnM7CisgICAgcmV0dXJuIFdURjo6bWFwKFdURk1vdmUoYml0bWFw
cyksIFtdKGF1dG8mJiBiaXRtYXApIHsKKyAgICAgICAgcmV0dXJuIGJpdG1hcC0+dGFrZUltYWdl
Qml0bWFwQmFja2luZygpOworICAgIH0pOwogfQogCiB2b2lkIEltYWdlQml0bWFwOjpjcmVhdGVQ
cm9taXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIElt
YWdlQml0bWFwOjpTb3VyY2UmJiBzb3VyY2UsIEltYWdlQml0bWFwT3B0aW9ucyYmIG9wdGlvbnMs
IGludCBzeCwgaW50IHN5LCBpbnQgc3csIGludCBzaCwgSW1hZ2VCaXRtYXA6OlByb21pc2UmJiBw
cm9taXNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmNwcAppbmRleCA2MTE0NjAyNzdmNjY3OWE0OTFlMGY5ODMxNzc5
NzMwMDdlYmJkZGM2Li5mNzMzNjRmMzg2MGMyNmI5MzY2MThjNGY3ZTFhMTc4MjVlOGQ1MDEwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcApAQCAtMzAyMSw5ICszMDIxLDggQEAgc3RkOjpvcHRpb25hbDxWZWN0
b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEF0
dGFjaGUKICAgICB9OwogICAgIFZlY3RvcjxSZWZQdHI8V2ViR0xTaGFkZXI+PiBzaGFkZXJPYmpl
Y3RzOwogICAgIGZvciAoYXV0byBzaGFkZXJUeXBlIDogc2hhZGVyVHlwZXMpIHsKLSAgICAgICAg
UmVmUHRyPFdlYkdMU2hhZGVyPiBzaGFkZXIgPSBwcm9ncmFtLmdldEF0dGFjaGVkU2hhZGVyKHNo
YWRlclR5cGUpOwotICAgICAgICBpZiAoc2hhZGVyKQotICAgICAgICAgICAgc2hhZGVyT2JqZWN0
cy5hcHBlbmQoc2hhZGVyKTsKKyAgICAgICAgaWYgKFJlZlB0ciBzaGFkZXIgPSBwcm9ncmFtLmdl
dEF0dGFjaGVkU2hhZGVyKHNoYWRlclR5cGUpKQorICAgICAgICAgICAgc2hhZGVyT2JqZWN0cy5h
cHBlbmQoV1RGTW92ZShzaGFkZXIpKTsKICAgICB9CiAgICAgcmV0dXJuIHNoYWRlck9iamVjdHM7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJz
ZXRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0
UGFyc2VyLmNwcAppbmRleCA4YWNiNjhhZjQ1NTFhMzhiNzk5YzcxM2FhNzVkYzBmNzkxOTAwNGJl
Li4wYTVlZDc4ZjQ1OGY5OWI2YmM3ZmMzNzFkZjk0Y2ZlOTI1YTRkNDgwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAKQEAg
LTg1LDEyICs4NSwxMSBAQCBzdGF0aWMgU3RyaW5nVmlldyBleHRyYWN0Q2hhcnNldChjb25zdCBT
dHJpbmcmIHZhbHVlKQogCiBib29sIEhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6cHJvY2Vzc01ldGEo
SFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBBdHRyaWJ1dGVMaXN0IGF0dHJpYnV0ZXM7Ci0gICAg
Zm9yIChhdXRvJiBhdHRyaWJ1dGUgOiB0b2tlbi5hdHRyaWJ1dGVzKCkpIHsKKyAgICBhdXRvIGF0
dHJpYnV0ZXMgPSB0b2tlbi5hdHRyaWJ1dGVzKCkubWFwKFtdKGF1dG8mIGF0dHJpYnV0ZSkgewog
ICAgICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZThCaXRJZlBv
c3NpYmxlKGF0dHJpYnV0ZS5uYW1lKTsKICAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0g
U3RyaW5nSW1wbDo6Y3JlYXRlOEJpdElmUG9zc2libGUoYXR0cmlidXRlLnZhbHVlKTsKLSAgICAg
ICAgYXR0cmlidXRlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoYXR0cmlidXRlTmFtZSwgYXR0cmli
dXRlVmFsdWUpKTsKLSAgICB9CisgICAgICAgIHJldHVybiBzdGQ6OnBhaXIgeyBXVEZNb3ZlKGF0
dHJpYnV0ZU5hbWUpLCBXVEZNb3ZlKGF0dHJpYnV0ZVZhbHVlKSB9OworICAgIH0pOwogCiAgICAg
bV9lbmNvZGluZyA9IGVuY29kaW5nRnJvbU1ldGFBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwogICAg
IHJldHVybiBtX2VuY29kaW5nLmlzVmFsaWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IDZiNzFiZWY4MWE3ZTI4NDcxZWVmZDdjNTMx
NTJhOGEwYTgyZDJkYjUuLmExZjE2N2NiMDgzYzk5ODQzNjE4MzQxMTgwMjlmMjg1ZTQxYzAwMDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcApA
QCAtMjIwMCwxMSArMjIwMCwxMCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NoYXJh
Y3RlcihBdG9tSFRNTFRva2VuJiYgdG9rZW4pCiAvLyBGcm9tIHRoZSBzdHJpbmcgNDA4OTk2MTAx
MCwgY3JlYXRlcyBhIGxpbmsgb2YgdGhlIGZvcm0gPGEgaHJlZj0idGVsOjQwODk5NjEwMTAiPjQw
ODk5NjEwMTA8L2E+IGFuZCBpbnNlcnRzIGl0Lgogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6Omluc2Vy
dFBob25lTnVtYmVyTGluayhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBWZWN0b3I8QXR0
cmlidXRlPiBhdHRyaWJ1dGVzOwotICAgIGF0dHJpYnV0ZXMuYXBwZW5kKEF0dHJpYnV0ZShIVE1M
TmFtZXM6OmhyZWZBdHRyLCBtYWtlU3RyaW5nKCJ0ZWw6Il9zLCBzdHJpbmcpKSk7CisgICAgQXR0
cmlidXRlIGF0dHJpYnV0ZShIVE1MTmFtZXM6OmhyZWZBdHRyLCBtYWtlU3RyaW5nKCJ0ZWw6Il9z
LCBzdHJpbmcpKTsKIAogICAgIGNvbnN0IEF0b21TdHJpbmcmIGFUYWdMb2NhbE5hbWUgPSBhVGFn
LT5sb2NhbE5hbWUoKTsKLSAgICBBdG9tSFRNTFRva2VuIGFTdGFydFRva2VuKEhUTUxUb2tlbjo6
U3RhcnRUYWcsIGFUYWdMb2NhbE5hbWUsIFdURk1vdmUoYXR0cmlidXRlcykpOworICAgIEF0b21I
VE1MVG9rZW4gYVN0YXJ0VG9rZW4oSFRNTFRva2VuOjpTdGFydFRhZywgYVRhZ0xvY2FsTmFtZSwg
eyBXVEZNb3ZlKGF0dHJpYnV0ZSkgfSk7CiAgICAgQXRvbUhUTUxUb2tlbiBhRW5kVG9rZW4oSFRN
TFRva2VuOjpFbmRUYWcsIGFUYWdMb2NhbE5hbWUpOwogCiAgICAgcHJvY2Vzc1N0YXJ0VGFnKFdU
Rk1vdmUoYVN0YXJ0VG9rZW4pKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL1RleHREb2N1bWVudFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9U
ZXh0RG9jdW1lbnRQYXJzZXIuY3BwCmluZGV4IDRkYTk1OWY0MGZlOWVhMzM3NDdjZDIzODhjZWI3
OWY2ZDcyZGI3ZWQuLjQ3MDZmMjZlODQ0MDllZTgxM2NkMTNiYzVmNGUwYWNjZjY3NGE4NjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNw
cApAQCAtNTEsOSArNTEsOCBAQCB2b2lkIFRleHREb2N1bWVudFBhcnNlcjo6aW5zZXJ0RmFrZVBy
ZUVsZW1lbnQoKQogICAgIC8vIFdlIGNyZWF0ZSBhIGZha2UgdG9rZW4gYW5kIGdpdmUgaXQgdG8g
dGhlIHRyZWUgYnVpbGRlciByYXRoZXIgdGhhbgogICAgIC8vIHNlbmRpbmcgZmFrZSBieXRlcyB0
aHJvdWdoIHRoZSBmcm9udC1lbmQgb2YgdGhlIHBhcnNlciB0byBhdm9pZAogICAgIC8vIGRpc3Ry
dWJpbmcgdGhlIGxpbmUvY29sdW1uIG51bWJlciBjYWxjdWxhdGlvbnMuCi0gICAgVmVjdG9yPEF0
dHJpYnV0ZT4gYXR0cmlidXRlczsKLSAgICBhdHRyaWJ1dGVzLmFwcGVuZChBdHRyaWJ1dGUoc3R5
bGVBdHRyLCAid29yZC13cmFwOiBicmVhay13b3JkOyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7Iikp
OwotICAgIEF0b21IVE1MVG9rZW4gZmFrZVByZShIVE1MVG9rZW46OlN0YXJ0VGFnLCBwcmVUYWct
PmxvY2FsTmFtZSgpLCBXVEZNb3ZlKGF0dHJpYnV0ZXMpKTsKKyAgICBBdHRyaWJ1dGUgYXR0cmli
dXRlKHN0eWxlQXR0ciwgIndvcmQtd3JhcDogYnJlYWstd29yZDsgd2hpdGUtc3BhY2U6IHByZS13
cmFwOyIpOworICAgIEF0b21IVE1MVG9rZW4gZmFrZVByZShIVE1MVG9rZW46OlN0YXJ0VGFnLCBw
cmVUYWctPmxvY2FsTmFtZSgpLCB7IFdURk1vdmUoYXR0cmlidXRlKSB9KTsKICAgICB0cmVlQnVp
bGRlcigpLmNvbnN0cnVjdFRyZWUoV1RGTW92ZShmYWtlUHJlKSk7CiAKICAgICAvLyBOb3JtYWxs
eSB3ZSB3b3VsZCBza2lwIHRoZSBmaXJzdCBcbiBhZnRlciBhIDxwcmU+IGVsZW1lbnQsIGJ1dCB3
ZSBkb24ndApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0NvbnRlbnRGaWx0ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0NvbnRlbnRGaWx0ZXIuY3BwCmluZGV4IDQxOWUz
MmYzOTgyZjY3MmFmNjYzMGZhNWUwYzYyNWM1Y2I3YjIyM2YuLjRlMzU0NDU0YWFiYTM0ZTRmYmVh
NDE1ZDQxZmY4ZTkyYmY0NDE0NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9D
b250ZW50RmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29udGVudEZpbHRl
ci5jcHAKQEAgLTY3LDExICs2Nyw5IEBAIFZlY3RvcjxDb250ZW50RmlsdGVyOjpUeXBlPiYgQ29u
dGVudEZpbHRlcjo6dHlwZXMoKQogCiBzdGQ6OnVuaXF1ZV9wdHI8Q29udGVudEZpbHRlcj4gQ29u
dGVudEZpbHRlcjo6Y3JlYXRlKENvbnRlbnRGaWx0ZXJDbGllbnQmIGNsaWVudCkKIHsKLSAgICBD
b250YWluZXIgZmlsdGVyczsKLSAgICBmb3IgKGF1dG8mIHR5cGUgOiB0eXBlcygpKSB7Ci0gICAg
ICAgIGF1dG8gZmlsdGVyID0gdHlwZS5jcmVhdGUoKTsKLSAgICAgICAgZmlsdGVycy5hcHBlbmQo
V1RGTW92ZShmaWx0ZXIpKTsKLSAgICB9CisgICAgYXV0byBmaWx0ZXJzID0gdHlwZXMoKS5tYXAo
W10oYXV0byYgdHlwZSkgeworICAgICAgICByZXR1cm4gdHlwZS5jcmVhdGUoKTsKKyAgICB9KTsK
IAogICAgIGlmIChmaWx0ZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZU1hbmlmZXN0UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuY3BwCmluZGV4IGI4N2RkODM1MDYwN2MyNGJlMjU2
ZTM0NDFiZWQyZDM3NjdlMDk1NTIuLjRhMTE0NDI1ZTExNmQyYzQyZDE5MDM5MjNlZGY4ODYzODNk
OGYwNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuY3BwCkBAIC0xODAsNyArMTgw
LDcgQEAgc3RkOjpvcHRpb25hbDxBcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3Q+IHBhcnNlQXBwbGlj
YXRpb25DYWNoZU1hbmlmZXN0KGNvbnN0IFVSTCYKICAgICAgICAgICAgICAgICBpZiAoIWVxdWFs
SWdub3JpbmdBU0NJSUNhc2UodXJsLnByb3RvY29sKCksIG1hbmlmZXN0VVJMLnByb3RvY29sKCkp
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgICAgIG1hbmlm
ZXN0Lm9ubGluZUFsbG93ZWRVUkxzLmFwcGVuZCh1cmwpOworICAgICAgICAgICAgICAgIG1hbmlm
ZXN0Lm9ubGluZUFsbG93ZWRVUkxzLmFwcGVuZChXVEZNb3ZlKHVybCkpOwogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6ZU9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUmVzaXplT2JzZXJ2ZXIuY3BwCmluZGV4IDkzZGExYTQ1NjA0ZTQ1MmE3NzU5M2UxOGQxZjQ3
MzM2MzQ5OTQzNjcuLjRmZmQ2OWQwMzQ0MTA5YjQ3YWZiNWU1MTk3YWEzZmRmZDQ5N2RlZDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuY3BwCkBAIC0xMjUsMTEgKzEyNSwxMCBA
QCBzaXplX3QgUmVzaXplT2JzZXJ2ZXI6OmdhdGhlck9ic2VydmF0aW9ucyhzaXplX3QgZGVlcGVy
VGhhbikKIAogdm9pZCBSZXNpemVPYnNlcnZlcjo6ZGVsaXZlck9ic2VydmF0aW9ucygpCiB7Ci0g
ICAgVmVjdG9yPFJlZjxSZXNpemVPYnNlcnZlckVudHJ5Pj4gZW50cmllczsKLSAgICBmb3IgKGNv
bnN0IGF1dG8mIG9ic2VydmF0aW9uIDogbV9hY3RpdmVPYnNlcnZhdGlvbnMpIHsKKyAgICBhdXRv
IGVudHJpZXMgPSBtX2FjdGl2ZU9ic2VydmF0aW9ucy5tYXAoW10oYXV0byYgb2JzZXJ2YXRpb24p
IHsKICAgICAgICAgQVNTRVJUKG9ic2VydmF0aW9uLT50YXJnZXQoKSk7Ci0gICAgICAgIGVudHJp
ZXMuYXBwZW5kKFJlc2l6ZU9ic2VydmVyRW50cnk6OmNyZWF0ZShvYnNlcnZhdGlvbi0+dGFyZ2V0
KCksIG9ic2VydmF0aW9uLT5jb21wdXRlQ29udGVudFJlY3QoKSwgb2JzZXJ2YXRpb24tPmJvcmRl
ckJveFNpemUoKSwgb2JzZXJ2YXRpb24tPmNvbnRlbnRCb3hTaXplKCkpKTsKLSAgICB9CisgICAg
ICAgIHJldHVybiBSZXNpemVPYnNlcnZlckVudHJ5OjpjcmVhdGUob2JzZXJ2YXRpb24tPnRhcmdl
dCgpLCBvYnNlcnZhdGlvbi0+Y29tcHV0ZUNvbnRlbnRSZWN0KCksIG9ic2VydmF0aW9uLT5ib3Jk
ZXJCb3hTaXplKCksIG9ic2VydmF0aW9uLT5jb250ZW50Qm94U2l6ZSgpKTsKKyAgICB9KTsKICAg
ICBtX2FjdGl2ZU9ic2VydmF0aW9ucy5jbGVhcigpOwogICAgIGF1dG8gYWN0aXZlT2JzZXJ2YXRp
b25UYXJnZXRzID0gc3RkOjpleGNoYW5nZShtX2FjdGl2ZU9ic2VydmF0aW9uVGFyZ2V0cywgeyB9
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKaW5kZXggMzg3ZDUxOWFlNTE3
MmQ2ODBhNWIyODg0M2JiZThmZjk5NmM2YjMzNS4uY2E1ZmJlNjNjY2Y2Y2RiOThhZjg1ZWQ1OTI5
YTEzMDM4ZDY5YmZjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNh
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCkBAIC0z
NjEsMTcgKzM2MSwxNiBAQCBzdGF0aWMgYm9vbCBpbml0aWFsaXplSW5kaWNhdG9yKFRleHRJbmRp
Y2F0b3JEYXRhJiBkYXRhLCBGcmFtZSYgZnJhbWUsIGNvbnN0IFNpbQogICAgICAgICB0ZXh0Qm91
bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLnVuaXRlKHRleHRSZWN0SW5Sb290Vmlld0Nv
b3JkaW5hdGVzKTsKICAgICB9CiAKLSAgICBWZWN0b3I8RmxvYXRSZWN0PiB0ZXh0UmVjdHNJbkJv
dW5kaW5nUmVjdENvb3JkaW5hdGVzOwotICAgIGZvciAoYXV0byByZWN0IDogdGV4dFJlY3RzSW5S
b290Vmlld0Nvb3JkaW5hdGVzKSB7CisgICAgYXV0byB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENv
b3JkaW5hdGVzID0gdGV4dFJlY3RzSW5Sb290Vmlld0Nvb3JkaW5hdGVzLm1hcChbJl0oYXV0byBy
ZWN0KSB7CiAgICAgICAgIHJlY3QubW92ZUJ5KC10ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nv
b3JkaW5hdGVzLmxvY2F0aW9uKCkpOwotICAgICAgICB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENv
b3JkaW5hdGVzLmFwcGVuZChyZWN0KTsKLSAgICB9CisgICAgICAgIHJldHVybiByZWN0OworICAg
IH0pOwogCiAgICAgLy8gU3RvcmUgdGhlIHNlbGVjdGlvbiByZWN0IGluIHdpbmRvdyBjb29yZGlu
YXRlcywgdG8gYmUgdXNlZCBzdWJzZXF1ZW50bHkKICAgICAvLyB0byBkZXRlcm1pbmUgaWYgdGhl
IGluZGljYXRvciBhbmQgc2VsZWN0aW9uIHN0aWxsIHByZWNpc2VseSBvdmVybGFwLgogICAgIGRh
dGEuc2VsZWN0aW9uUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9IGZyYW1lLnZpZXcoKS0+Y29u
dGVudHNUb1Jvb3RWaWV3KGVuY2xvc2luZ0ludFJlY3QoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uQm91bmRzKEZyYW1lU2VsZWN0aW9uOjpDbGlwVG9WaXNpYmxlQ29udGVudDo6Tm8pKSk7CiAg
ICAgZGF0YS50ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gdGV4dEJvdW5k
aW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlczsKLSAgICBkYXRhLnRleHRSZWN0c0luQm91bmRp
bmdSZWN0Q29vcmRpbmF0ZXMgPSB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzOwor
ICAgIGRhdGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcyA9IFdURk1vdmUodGV4
dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcyk7CiAKICAgICByZXR1cm4gdGFrZVNuYXBz
aG90cyhkYXRhLCBmcmFtZSwgZW5jbG9zaW5nSW50UmVjdCh0ZXh0Qm91bmRpbmdSZWN0SW5Eb2N1
bWVudENvb3JkaW5hdGVzKSwgY2xpcHBlZFRleHRSZWN0c0luRG9jdW1lbnRDb29yZGluYXRlcyk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQ
b2xpY3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5
LmNwcAppbmRleCA1MmY2MjAxMjJiODVjNzUwM2U3ZGE2YTY4MzViZjM3NTYxNDk2N2Y0Li44YTJi
YTRjZmZhMjZkY2NiYmQxZTc1ZWU1MDExM2E4NjZiZTVhMmZhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKQEAgLTM0MywxOCArMzQz
LDEyIEBAIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjphbGxQb2xpY2llc0FsbG93KFZpb2xh
dGVkRGlyZWN0aXZlQ2FsbGJhY2smJiBjYWxsYmFjCiBzdGF0aWMgVmVjdG9yPFJlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VTdWJSZXNvdXJjZUludGVncml0eUludG9EaWdlc3RzKGNv
bnN0IFN0cmluZyYgc3ViUmVzb3VyY2VJbnRlZ3JpdHkpCiB7CiAgICAgYXV0byBlbmNvZGVkRGln
ZXN0cyA9IHBhcnNlSW50ZWdyaXR5TWV0YWRhdGEoc3ViUmVzb3VyY2VJbnRlZ3JpdHkpOwotICAg
IFZlY3RvcjxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IGRlY29kZWREaWdlc3RzOwotCi0g
ICAgaWYgKCFlbmNvZGVkRGlnZXN0cy5oYXNfdmFsdWUoKSkKKyAgICBpZiAoIWVuY29kZWREaWdl
c3RzKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBlbmNvZGVk
RGlnZXN0IDogZW5jb2RlZERpZ2VzdHMudmFsdWUoKSkgewotICAgICAgICBhdXRvIGRlY29kZWRE
aWdlc3QgPSBkZWNvZGVFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0KGVuY29kZWRE
aWdlc3QpOwotICAgICAgICBpZiAoZGVjb2RlZERpZ2VzdC5oYXNfdmFsdWUoKSkKLSAgICAgICAg
ICAgIGRlY29kZWREaWdlc3RzLmFwcGVuZChkZWNvZGVkRGlnZXN0LnZhbHVlKCkpOwotICAgICAg
ICB9Ci0KLSAgICByZXR1cm4gZGVjb2RlZERpZ2VzdHM7CisgICAgcmV0dXJuIFdURjo6Y29tcGFj
dE1hcCgqZW5jb2RlZERpZ2VzdHMsIFtdKGF1dG8mIGVuY29kZWREaWdlc3QpIHsKKyAgICAgICAg
cmV0dXJuIGRlY29kZUVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QoZW5jb2RlZERp
Z2VzdCk7CisgICAgfSk7CiB9CiAKIHN0YXRpYyBWZWN0b3I8Q29udGVudFNlY3VyaXR5UG9saWN5
SGFzaD4gZ2VuZXJhdGVIYXNoZXNGb3JDb250ZW50KGNvbnN0IFN0cmluZ1ZpZXcgY29udGVudCwg
T3B0aW9uU2V0PENvbnRlbnRTZWN1cml0eVBvbGljeUhhc2hBbGdvcml0aG0+IGFsZ29yaXRobXMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHAKaW5kZXggOGU0ZWNlNzA1M2Fl
OGU5OGVmZWNjZmU3NjUyZjg2Y2QyOTc0MDQwNC4uNzg0MjhjNGFiZDMxZTk5YjEwYWFlNDhmYmVj
YzJhNWI4ZDlmNThmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNo
b29zZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmNwcApA
QCAtNTMsOSArNTMsNyBAQCB2b2lkIEZpbGVDaG9vc2VyOjppbnZhbGlkYXRlKCkKIAogdm9pZCBG
aWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQogewotICAgIFZl
Y3RvcjxTdHJpbmc+IGZpbGVuYW1lczsKLSAgICBmaWxlbmFtZXMuYXBwZW5kKGZpbGVuYW1lKTsK
LSAgICBjaG9vc2VGaWxlcyhmaWxlbmFtZXMpOworICAgIGNob29zZUZpbGVzKHsgZmlsZW5hbWUg
fSk7CiB9CiAKIHZvaWQgRmlsZUNob29zZXI6OmNob29zZUZpbGVzKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBmaWxlbmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXBsYWNlbWVudE5hbWVzKQpA
QCAtNjgsOSArNjYsMTAgQEAgdm9pZCBGaWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZXMoY29uc3QgVmVj
dG9yPFN0cmluZz4mIGZpbGVuYW1lcywgY29uc3QgVmVjdG9yPFN0cmkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+IGZpbGVzOworICAgIGZpbGVzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoZmlsZW5hbWVzLnNpemUoKSk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDAsIHNpemUgPSBmaWxlbmFtZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBm
aWxlcy5hcHBlbmQoeyBmaWxlbmFtZXNbaV0sIGkgPCByZXBsYWNlbWVudE5hbWVzLnNpemUoKSA/
IHJlcGxhY2VtZW50TmFtZXNbaV0gOiBudWxsU3RyaW5nKCksIHsgfSB9KTsKLSAgICBtX2NsaWVu
dC0+ZmlsZXNDaG9zZW4oZmlsZXMpOworICAgICAgICBmaWxlcy51bmNoZWNrZWRBcHBlbmQoeyBm
aWxlbmFtZXNbaV0sIGkgPCByZXBsYWNlbWVudE5hbWVzLnNpemUoKSA/IHJlcGxhY2VtZW50TmFt
ZXNbaV0gOiBudWxsU3RyaW5nKCksIHsgfSB9KTsKKyAgICBtX2NsaWVudC0+ZmlsZXNDaG9zZW4o
V1RGTW92ZShmaWxlcykpOwogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTg2LDE5
ICs4NSwxOSBAQCB2b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VNZWRpYUZpbGVzKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBmaWxlbmFtZXMsIGNvbnN0IFN0cmluZwogICAgIGlmICghbV9jbGllbnQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJbmZvPiBmaWxlczsK
LSAgICBmb3IgKGF1dG8mIGZpbGVuYW1lIDogZmlsZW5hbWVzKQotICAgICAgICBmaWxlcy5hcHBl
bmQoeyBmaWxlbmFtZSwgeyB9LCB7IH0gfSk7Ci0gICAgbV9jbGllbnQtPmZpbGVzQ2hvc2VuKGZp
bGVzLCBkaXNwbGF5U3RyaW5nLCBpY29uKTsKKyAgICBhdXRvIGZpbGVzID0gZmlsZW5hbWVzLm1h
cChbXShhdXRvJiBmaWxlbmFtZSkgeworICAgICAgICByZXR1cm4gRmlsZUNob29zZXJGaWxlSW5m
byB7IGZpbGVuYW1lLCB7IH0sIHsgfSB9OworICAgIH0pOworICAgIG1fY2xpZW50LT5maWxlc0No
b3NlbihXVEZNb3ZlKGZpbGVzKSwgZGlzcGxheVN0cmluZywgaWNvbik7CiB9CiAKICNlbmRpZgog
CiB2b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlcyhjb25zdCBWZWN0b3I8RmlsZUNob29zZXJG
aWxlSW5mbz4mIGZpbGVzKQogewotICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhzOwotICAgIGZvciAo
YXV0byYgZmlsZSA6IGZpbGVzKQotICAgICAgICBwYXRocy5hcHBlbmQoZmlsZS5wYXRoKTsKKyAg
ICBhdXRvIHBhdGhzID0gZmlsZXMubWFwKFtdKGF1dG8mIGZpbGUpIHsKKyAgICAgICAgcmV0dXJu
IGZpbGUucGF0aDsKKyAgICB9KTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGluZWxlZ2FudC4g
V2Ugc2hvdWxkIG5vdCBiZSBsb29raW5nIGF0IHNldHRpbmdzIGhlcmUuCiAgICAgaWYgKG1fc2V0
dGluZ3Muc2VsZWN0ZWRGaWxlcyA9PSBwYXRocykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFy
ZWRCdWZmZXIuY3BwCmluZGV4IGQwOWYxMDUyYTBmMzFlZTk3MDYxMTAxM2IzOTM1ZmI1MzA5NTUw
OTYuLmY4N2I2YTRmNjNiMjZhMjE4ODIwNmU5MzhhYTU4NTc5N2FiMzk1ZTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcApAQCAtMjA2LDkgKzIwNiw3IEBAIHZvaWQg
RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKGNvbnN0IEZyYWdtZW50ZWRTaGFyZWRCdWZm
ZXImIGRhdGEpCiB2b2lkIEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25zdCB1aW50
OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKQogewogICAgIEFTU0VSVCghbV9jb250aWd1b3VzKTsK
LSAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yOwotICAgIHZlY3Rvci5hcHBlbmQoZGF0YSwgbGVu
Z3RoKTsKLSAgICBtX3NlZ21lbnRzLmFwcGVuZCh7IG1fc2l6ZSwgRGF0YVNlZ21lbnQ6OmNyZWF0
ZShXVEZNb3ZlKHZlY3RvcikpIH0pOworICAgIG1fc2VnbWVudHMuYXBwZW5kKHsgbV9zaXplLCBE
YXRhU2VnbWVudDo6Y3JlYXRlKFZlY3RvciB7IGRhdGEsIGxlbmd0aCB9KSB9KTsKICAgICBtX3Np
emUgKz0gbGVuZ3RoOwogICAgIEFTU0VSVChpbnRlcm5hbGx5Q29uc2lzdGVudCgpKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZFNhZmVEYXRhQnVmZmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRTYWZlRGF0YUJ1ZmZlci5oCmluZGV4IGQz
OTdkMjI3ZGZjNTM0YWQwY2Y1ODcwMmJlMWNhNTgwMjQ5OWEwYmIuLjY2MjdmZWJjYjdmNGUxZGFk
ODExMWUxNGE5MTIxNDQ4ODE2NmE5NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1RocmVhZFNhZmVEYXRhQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
VGhyZWFkU2FmZURhdGFCdWZmZXIuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UK
IAorI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNv
dW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTE0Myw0ICsxNDQsMTUgQEAg
Ym9vbCBUaHJlYWRTYWZlRGF0YUJ1ZmZlcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFRocmVh
ZFNhZmVEYXRhQnVmZmVyJiByZXN1bHQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAoraW5saW5lIHZv
aWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgYnVmZmVy
KQoreworICAgIGF1dG8qIGRhdGEgPSBidWZmZXIuZGF0YSgpOworICAgIGlmICghZGF0YSkgewor
ICAgICAgICBhZGQoaGFzaGVyLCB0cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBh
ZGQoaGFzaGVyLCBmYWxzZSk7CisgICAgYWRkKGhhc2hlciwgKmRhdGEpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHAKaW5kZXggMWNmMzljYWNmMzAyNDUwOGU4
ZDEyZTg2NDVjNTA4Njc3MjE5NDM1Yi4uYmZlMThlMjlkMjZlYzg5YTNmNDAyZDcxODMxMzgyMDE2
MjNlNTE3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9E
U1BLZXJuZWxQcm9jZXNzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0F1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmNwcApAQCAtNTYsOCArNTYsOSBAQCB2b2lkIEF1ZGlv
RFNQS2VybmVsUHJvY2Vzc29yOjppbml0aWFsaXplKCkKICAgICAgICAgRGlzYWJsZU1hbGxvY1Jl
c3RyaWN0aW9uc0ZvckN1cnJlbnRUaHJlYWRTY29wZSBkaXNhYmxlTWFsbG9jUmVzdHJpY3Rpb25z
OwogCiAgICAgICAgIC8vIENyZWF0ZSBwcm9jZXNzaW5nIGtlcm5lbHMsIG9uZSBwZXIgY2hhbm5l
bC4KKyAgICAgICAgbV9rZXJuZWxzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZDaGFu
bmVscygpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5l
bHMoKTsgKytpKQotICAgICAgICAgICAgbV9rZXJuZWxzLmFwcGVuZChjcmVhdGVLZXJuZWwoKSk7
CisgICAgICAgICAgICBtX2tlcm5lbHMudW5jaGVja2VkQXBwZW5kKGNyZWF0ZUtlcm5lbCgpKTsK
ICAgICB9CiAgICAgbV9pbml0aWFsaXplZCA9IHRydWU7CiAgICAgbV9oYXNKdXN0UmVzZXQgPSB0
cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9SZXNh
bXBsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9SZXNhbXBsZXIu
Y3BwCmluZGV4IGRlNTA4Y2M2ZWY0YTViMDFiZDRlYjIyNDc0NWI3ZWYyODI4NDBmOGUuLjc0Njlj
ZTRkZTNmM2MxODg4OTI4ZjU0OTdkMTJjZTU2ZGI2ZTZkMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUmVzYW1wbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1Jlc2FtcGxlci5jcHAKQEAgLTQyLDggKzQyLDkgQEAg
QXVkaW9SZXNhbXBsZXI6OkF1ZGlvUmVzYW1wbGVyKCkKIAogQXVkaW9SZXNhbXBsZXI6OkF1ZGlv
UmVzYW1wbGVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMpCiB7CisgICAgbV9rZXJuZWxzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZDaGFubmVscyk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkKLSAgICAgICAgbV9rZXJuZWxzLmFw
cGVuZChtYWtlVW5pcXVlPEF1ZGlvUmVzYW1wbGVyS2VybmVsPih0aGlzKSk7CisgICAgICAgIG1f
a2VybmVscy51bmNoZWNrZWRBcHBlbmQobWFrZVVuaXF1ZTxBdWRpb1Jlc2FtcGxlcktlcm5lbD4o
dGhpcykpOwogCiAgICAgbV9zb3VyY2VCdXMgPSBBdWRpb0J1czo6Y3JlYXRlKG51bWJlck9mQ2hh
bm5lbHMsIDAsIGZhbHNlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwCmluZGV4IDlmMzE4MWNmYmI0
MDIyNzc3OTk2MjNiOWJmZGRjZGQ0OTU5YzAwYjAuLjUwMzJlZWE3YTcyYjIzZGUyYTIwMmJjMTUz
NjAzNWNiYWVkMDE2MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcApAQCAtNjEsOCArNjEsOSBAQCB2
b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0TnVtYmVyT2ZDaGFubmVscyh1bnNpZ25l
ZCBudW1iZXJPZkNoYW5uZWxzKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3ByZURlbGF5QnVm
ZmVycy5jbGVhcigpOworICAgIG1fcHJlRGVsYXlCdWZmZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkobnVtYmVyT2ZDaGFubmVscyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJl
ck9mQ2hhbm5lbHM7ICsraSkKLSAgICAgICAgbV9wcmVEZWxheUJ1ZmZlcnMuYXBwZW5kKG1ha2VV
bmlxdWU8QXVkaW9GbG9hdEFycmF5PihNYXhQcmVEZWxheUZyYW1lcykpOworICAgICAgICBtX3By
ZURlbGF5QnVmZmVycy51bmNoZWNrZWRBcHBlbmQobWFrZVVuaXF1ZTxBdWRpb0Zsb2F0QXJyYXk+
KE1heFByZURlbGF5RnJhbWVzKSk7CiB9CiAKIHZvaWQgRHluYW1pY3NDb21wcmVzc29yS2VybmVs
OjpzZXRQcmVEZWxheVRpbWUoZmxvYXQgcHJlRGVsYXlUaW1lKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTXVsdGlDaGFubmVsUmVzYW1wbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL011bHRpQ2hhbm5lbFJlc2FtcGxlci5jcHAKaW5kZXgg
Yjk2NmZhMDZjZDMwZWIzNGRmNzFmY2ZiZGU3YzE2NTgyMzExMTIxZi4uMTcwMjNiNjQyNjFiZGZk
Mzc1ZWUwOWZlMjk2YjNiZGE4ODI3ZjJlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vTXVsdGlDaGFubmVsUmVzYW1wbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9NdWx0aUNoYW5uZWxSZXNhbXBsZXIuY3BwCkBAIC01Myw4ICs1Myw5
IEBAIE11bHRpQ2hhbm5lbFJlc2FtcGxlcjo6TXVsdGlDaGFubmVsUmVzYW1wbGVyKGRvdWJsZSBz
Y2FsZUZhY3RvciwgdW5zaWduZWQgbnVtYmVyCiAgICAgfQogCiAgICAgLy8gQ3JlYXRlIGVhY2gg
Y2hhbm5lbCdzIHJlc2FtcGxlci4KKyAgICBtX2tlcm5lbHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShudW1iZXJPZkNoYW5uZWxzKTsKICAgICBmb3IgKHVuc2lnbmVkIGNoYW5uZWxJbmRleCA9IDA7
IGNoYW5uZWxJbmRleCA8IG51bWJlck9mQ2hhbm5lbHM7ICsrY2hhbm5lbEluZGV4KQotICAgICAg
ICBtX2tlcm5lbHMuYXBwZW5kKG1ha2VVbmlxdWU8U2luY1Jlc2FtcGxlcj4oc2NhbGVGYWN0b3Is
IHJlcXVlc3RGcmFtZXMsIHN0ZDo6YmluZCgmTXVsdGlDaGFubmVsUmVzYW1wbGVyOjpwcm92aWRl
SW5wdXRGb3JDaGFubmVsLCB0aGlzLCBzdGQ6OnBsYWNlaG9sZGVyczo6XzEsIHN0ZDo6cGxhY2Vo
b2xkZXJzOjpfMiwgY2hhbm5lbEluZGV4KSkpOworICAgICAgICBtX2tlcm5lbHMudW5jaGVja2Vk
QXBwZW5kKG1ha2VVbmlxdWU8U2luY1Jlc2FtcGxlcj4oc2NhbGVGYWN0b3IsIHJlcXVlc3RGcmFt
ZXMsIHN0ZDo6YmluZCgmTXVsdGlDaGFubmVsUmVzYW1wbGVyOjpwcm92aWRlSW5wdXRGb3JDaGFu
bmVsLCB0aGlzLCBzdGQ6OnBsYWNlaG9sZGVyczo6XzEsIHN0ZDo6cGxhY2Vob2xkZXJzOjpfMiwg
Y2hhbm5lbEluZGV4KSkpOwogfQogCiBNdWx0aUNoYW5uZWxSZXNhbXBsZXI6On5NdWx0aUNoYW5u
ZWxSZXNhbXBsZXIoKSA9IGRlZmF1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1t
CmluZGV4IDA1ZWEyMTExZWI1ZDQ1M2NiMjhkOGU3N2VmM2NiZjVmMzU2NzE5ODkuLmZhMzBhZmRl
M2IxZTFlMzZlODYxYWVjYmQ5ZmJlOGM3ZjA5MDM1NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50Lm1tCkBAIC01MzQsMTQgKzUzNCwxMiBAQCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25P
cHRpb24+IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxl
YwogICAgIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gbGVnaWJsZU9wdGlvbnM7CiAKICAg
ICBpZiAoIW1fbWVkaWFFbGVtZW50IHx8ICFtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdl
KCkpCi0gICAgICAgIHJldHVybiBsZWdpYmxlT3B0aW9uczsKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAogICAgIGF1dG8mIGNhcHRpb25QcmVmZXJlbmNlcyA9IG1fbWVkaWFFbGVtZW50LT5kb2N1bWVu
dCgpLnBhZ2UoKS0+Z3JvdXAoKS5lbnN1cmVDYXB0aW9uUHJlZmVyZW5jZXMoKTsKLQotICAgIGZv
ciAoYXV0byYgdHJhY2sgOiBtX2xlZ2libGVUcmFja3NGb3JNZW51KQotICAgICAgICBsZWdpYmxl
T3B0aW9ucy5hcHBlbmQoY2FwdGlvblByZWZlcmVuY2VzLm1lZGlhU2VsZWN0aW9uT3B0aW9uRm9y
VHJhY2sodHJhY2suZ2V0KCkpKTsKLQotICAgIHJldHVybiBsZWdpYmxlT3B0aW9uczsKKyAgICBy
ZXR1cm4gbV9sZWdpYmxlVHJhY2tzRm9yTWVudS5tYXAoWyZdKGF1dG8mIHRyYWNrKSB7CisgICAg
ICAgIHJldHVybiBjYXB0aW9uUHJlZmVyZW5jZXMubWVkaWFTZWxlY3Rpb25PcHRpb25Gb3JUcmFj
ayh0cmFjay5nZXQoKSk7CisgICAgfSk7CiB9CiAKIHVpbnQ2NF90IFBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL0R1YWxzaG9jazNISURH
YW1lcGFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL0R1YWxzaG9j
azNISURHYW1lcGFkLmNwcAppbmRleCA2YzQwZThiODg5Mjg3M2ZmMDcyMDYxOGNmZTgzOTY0Yzgw
ZWMzNDFlLi5jMGY1MTgxYmM0NGIxYmRjZWJhNjliOGNiNmEzNGE5ZWExMjdkZjY1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9EdWFsc2hvY2szSElER2Ft
ZXBhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvRHVhbHNo
b2NrM0hJREdhbWVwYWQuY3BwCkBAIC00MywxMiArNDMsMTAgQEAgRHVhbHNob2NrM0hJREdhbWVw
YWQ6OkR1YWxzaG9jazNISURHYW1lcGFkKEhJRERldmljZSYmIGRldmljZSwgdW5zaWduZWQgaW5k
ZXgpCiAKICAgICBtX21hcHBpbmcgPSBzdGFuZGFyZEdhbWVwYWRNYXBwaW5nU3RyaW5nKCk7CiAK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mU3RhbmRhcmRHYW1lcGFkQnV0dG9u
c1dpdGhIb21lQnV0dG9uOyArK2kpCi0gICAgICAgIG1fYnV0dG9uVmFsdWVzLmFwcGVuZCgwLjAp
OworICAgIG1fYnV0dG9uVmFsdWVzID0gVmVjdG9yKG51bWJlck9mU3RhbmRhcmRHYW1lcGFkQnV0
dG9uc1dpdGhIb21lQnV0dG9uLCBTaGFyZWRHYW1lcGFkVmFsdWUgeyAwLjAgfSk7CiAKLSAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGF4aXNDb3VudCA9IDQ7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBheGlzQ291bnQ7ICsraSkKLSAgICAgICAgbV9heGlzVmFsdWVzLmFwcGVuZCgwLjApOwor
ICAgIGNvbnN0ZXhwciBzaXplX3QgYXhpc0NvdW50ID0gNDsKKyAgICBtX2F4aXNWYWx1ZXMgPSBW
ZWN0b3IoYXhpc0NvdW50LCBTaGFyZWRHYW1lcGFkVmFsdWUgeyAwLjAgfSk7CiAKICAgICBhdXRv
IGlucHV0RWxlbWVudHMgPSBoaWREZXZpY2UoKS51bmlxdWVJbnB1dEVsZW1lbnRzSW5EZXZpY2VU
cmVlT3JkZXIoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBh
ZC9tYWMvTG9naXRlY2hHYW1lcGFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVw
YWQvbWFjL0xvZ2l0ZWNoR2FtZXBhZC5jcHAKaW5kZXggNjcxNDNmYjk5NWJhMmMzZTY4ZGQyMTFk
MTY1YmU2MjBjZWY3ODllZi4uZmU0Y2VkYzUxZDYzOWZiN2IxYWU5OTMzZTVjMjY5NmMzOTc4YThl
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvTG9naXRl
Y2hHYW1lcGFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9M
b2dpdGVjaEdhbWVwYWQuY3BwCkBAIC00MywxMiArNDMsMTAgQEAgTG9naXRlY2hHYW1lcGFkOjpM
b2dpdGVjaEdhbWVwYWQoSElERGV2aWNlJiYgZGV2aWNlLCB1bnNpZ25lZCBpbmRleCkKIAogICAg
IG1fbWFwcGluZyA9IHN0YW5kYXJkR2FtZXBhZE1hcHBpbmdTdHJpbmcoKTsKIAotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZTdGFuZGFyZEdhbWVwYWRCdXR0b25zV2l0aG91dEhv
bWVCdXR0b247ICsraSkKLSAgICAgICAgbV9idXR0b25WYWx1ZXMuYXBwZW5kKDAuMCk7CisgICAg
bV9idXR0b25WYWx1ZXMgPSBWZWN0b3IobnVtYmVyT2ZTdGFuZGFyZEdhbWVwYWRCdXR0b25zV2l0
aG91dEhvbWVCdXR0b24sIFNoYXJlZEdhbWVwYWRWYWx1ZSB7IDAuMCB9KTsKIAotICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgYXhpc0NvdW50ID0gNDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGF4aXNDb3VudDsgKytpKQotICAgICAgICBtX2F4aXNWYWx1ZXMuYXBwZW5kKDAuMCk7CisgICAg
Y29uc3RleHByIHNpemVfdCBheGlzQ291bnQgPSA0OworICAgIG1fYXhpc1ZhbHVlcyA9IFZlY3Rv
cihheGlzQ291bnQsIFNoYXJlZEdhbWVwYWRWYWx1ZSB7IDAuMCB9KTsKIAogICAgIGF1dG8gaW5w
dXRFbGVtZW50cyA9IGhpZERldmljZSgpLnVuaXF1ZUlucHV0RWxlbWVudHNJbkRldmljZVRyZWVP
cmRlcigpOwogCkBAIC01OSwxMSArNTcsMTIgQEAgTG9naXRlY2hHYW1lcGFkOjpMb2dpdGVjaEdh
bWVwYWQoSElERGV2aWNlJiYgZGV2aWNlLCB1bnNpZ25lZCBpbmRleCkKICAgICBmb3IgKGF1dG8m
IGVsZW1lbnQgOiBpbnB1dEVsZW1lbnRzKSB7CiAgICAgICAgIHN3aXRjaCAoZWxlbWVudC5mdWxs
VXNhZ2UoKSkgewogICAgICAgICBjYXNlIGhpZEhhdHN3aXRjaEZ1bGxVc2FnZTogewotICAgICAg
ICAgICAgVmVjdG9yPFNoYXJlZEdhbWVwYWRWYWx1ZT4gaGF0c3dpdGNoVmFsdWVzOwotICAgICAg
ICAgICAgaGF0c3dpdGNoVmFsdWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVw
YWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlclRvcF0pOwotICAgICAgICAgICAgaGF0c3dpdGNoVmFs
dWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0
Q2x1c3RlclJpZ2h0XSk7Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0
dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyQm90dG9tXSk7
Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFsdWVzWyhzaXpl
X3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyTGVmdF0pOworICAgICAgICAgICAgYXV0
byBoYXRzd2l0Y2hWYWx1ZXMgPSBWZWN0b3IgeworICAgICAgICAgICAgICAgIG1fYnV0dG9uVmFs
dWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyVG9wXSwKKyAgICAgICAg
ICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1
c3RlclJpZ2h0XSwKKyAgICAgICAgICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVw
YWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlckJvdHRvbV0sCisgICAgICAgICAgICAgICAgbV9idXR0
b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJMZWZ0XQorICAg
ICAgICAgICAgfTsKIAogICAgICAgICAgICAgbV9lbGVtZW50TWFwLnNldChlbGVtZW50LmNvb2tp
ZSgpLCBtYWtlVW5pcXVlPEhJREdhbWVwYWRIYXRzd2l0Y2g+KGVsZW1lbnQsIFdURk1vdmUoaGF0
c3dpdGNoVmFsdWVzKSkpOwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9TdGFkaWFISURHYW1lcGFkLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL1N0YWRpYUhJREdhbWVwYWQuY3BwCmluZGV4
IDBhOTRlNTYyMzNhMjA0NDY0MWYxMDBmMDU2NDRkNTc1YWRiYzllNzMuLjQyMTU5MjdjNDk0YzNl
ZWU2YzEyNTBhYjU1NjQxZmE3MmEyMjA2OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dhbWVwYWQvbWFjL1N0YWRpYUhJREdhbWVwYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL1N0YWRpYUhJREdhbWVwYWQuY3BwCkBAIC00MSwxMiAr
NDEsMTAgQEAgU3RhZGlhSElER2FtZXBhZDo6U3RhZGlhSElER2FtZXBhZChISUREZXZpY2UmJiBk
ZXZpY2UsIHVuc2lnbmVkIGluZGV4KQogCiAgICAgbV9tYXBwaW5nID0gc3RhbmRhcmRHYW1lcGFk
TWFwcGluZ1N0cmluZygpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxOTsgKytpKQot
ICAgICAgICBtX2J1dHRvblZhbHVlcy5hcHBlbmQoMC4wKTsKKyAgICBtX2J1dHRvblZhbHVlcyA9
IFZlY3RvcigxOSwgU2hhcmVkR2FtZXBhZFZhbHVlIHsgMC4wIH0pOwogCi0gICAgc3RhdGljIGNv
bnN0IHNpemVfdCBheGlzQ291bnQgPSA0OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXhp
c0NvdW50OyArK2kpCi0gICAgICAgIG1fYXhpc1ZhbHVlcy5hcHBlbmQoMC4wKTsKKyAgICBjb25z
dGV4cHIgc2l6ZV90IGF4aXNDb3VudCA9IDQ7CisgICAgbV9heGlzVmFsdWVzID0gVmVjdG9yKGF4
aXNDb3VudCwgU2hhcmVkR2FtZXBhZFZhbHVlIHsgMC4wIH0pOwogCiAgICAgYXV0byBpbnB1dEVs
ZW1lbnRzID0gaGlkRGV2aWNlKCkudW5pcXVlSW5wdXRFbGVtZW50c0luRGV2aWNlVHJlZU9yZGVy
KCk7CiAKQEAgLTcwLDExICs2OCwxMiBAQCBTdGFkaWFISURHYW1lcGFkOjpTdGFkaWFISURHYW1l
cGFkKEhJRERldmljZSYmIGRldmljZSwgdW5zaWduZWQgaW5kZXgpCiAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICBjYXNlIGhpZEhhdHN3aXRjaEZ1bGxVc2FnZTogewotICAgICAgICAgICAg
VmVjdG9yPFNoYXJlZEdhbWVwYWRWYWx1ZT4gaGF0c3dpdGNoVmFsdWVzOwotICAgICAgICAgICAg
aGF0c3dpdGNoVmFsdWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0
b25Sb2xlOjpMZWZ0Q2x1c3RlclRvcF0pOwotICAgICAgICAgICAgaGF0c3dpdGNoVmFsdWVzLmFw
cGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3Rl
clJpZ2h0XSk7Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFs
dWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyQm90dG9tXSk7Ci0gICAg
ICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2Ft
ZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyTGVmdF0pOworICAgICAgICAgICAgYXV0byBoYXRz
d2l0Y2hWYWx1ZXMgPSBWZWN0b3IgeworICAgICAgICAgICAgICAgIG1fYnV0dG9uVmFsdWVzWyhz
aXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyVG9wXSwKKyAgICAgICAgICAgICAg
ICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlclJp
Z2h0XSwKKyAgICAgICAgICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0
b25Sb2xlOjpMZWZ0Q2x1c3RlckJvdHRvbV0sCisgICAgICAgICAgICAgICAgbV9idXR0b25WYWx1
ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJMZWZ0XQorICAgICAgICAg
ICAgfTsKIAogICAgICAgICAgICAgbV9lbGVtZW50TWFwLnNldChlbGVtZW50LmNvb2tpZSgpLCBt
YWtlVW5pcXVlPEhJREdhbWVwYWRIYXRzd2l0Y2g+KGVsZW1lbnQsIFdURk1vdmUoaGF0c3dpdGNo
VmFsdWVzKSkpOwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IDFmZWUyOWFlNWY3MTljNGU1
NTRhMmM3ZTcwY2I3MGYwMWY5YjIwMDIuLjcyNGZiMTdjMzNmNGJjYTQ2ODg5YzgzYmM1NTg0OGZk
NzI3MGMzMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuY3BwCkBAIC03NjMsMTEgKzc2Myw5IEBAIHZvaWQgR3JhcGhpY3NMYXllcjo6
YWRkUmVwYWludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZXBhaW50UmVjdCkKICAgICBGbG9hdFJl
Y3QgbGFyZ2VzdFJlcGFpbnRSZWN0KEZsb2F0UG9pbnQoKSwgbV9zaXplKTsKICAgICBsYXJnZXN0
UmVwYWludFJlY3QuaW50ZXJzZWN0KHJlcGFpbnRSZWN0KTsKICAgICBSZXBhaW50TWFwOjppdGVy
YXRvciByZXBhaW50SXQgPSByZXBhaW50UmVjdE1hcCgpLmZpbmQodGhpcyk7Ci0gICAgaWYgKHJl
cGFpbnRJdCA9PSByZXBhaW50UmVjdE1hcCgpLmVuZCgpKSB7Ci0gICAgICAgIFZlY3RvcjxGbG9h
dFJlY3Q+IHJlcGFpbnRSZWN0czsKLSAgICAgICAgcmVwYWludFJlY3RzLmFwcGVuZChsYXJnZXN0
UmVwYWludFJlY3QpOwotICAgICAgICByZXBhaW50UmVjdE1hcCgpLnNldCh0aGlzLCByZXBhaW50
UmVjdHMpOwotICAgIH0gZWxzZSB7CisgICAgaWYgKHJlcGFpbnRJdCA9PSByZXBhaW50UmVjdE1h
cCgpLmVuZCgpKQorICAgICAgICByZXBhaW50UmVjdE1hcCgpLnNldCh0aGlzLCBWZWN0b3IgeyBX
VEZNb3ZlKGxhcmdlc3RSZXBhaW50UmVjdCkgfSk7CisgICAgZWxzZSB7CiAgICAgICAgIFZlY3Rv
cjxGbG9hdFJlY3Q+JiByZXBhaW50UmVjdHMgPSByZXBhaW50SXQtPnZhbHVlOwogICAgICAgICBy
ZXBhaW50UmVjdHMuYXBwZW5kKGxhcmdlc3RSZXBhaW50UmVjdCk7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcAppbmRleCBi
OTc5OWE0ZDEwNjFlZDIwYTFiNTBlZDUwNjg2NTFjNWZlYTQ2NmE0Li4xZDAwNGZjMTE0YWNiNzE1
YjEwNTI1OTAzMzZiMDZmY2VjMzAzMDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcApAQCAtMjkwLDE3ICsyOTAsMTQgQEAgc3Rh
dGljIFZlY3RvcjxGbG9hdFBvaW50R3JhcGg6OlBvbHlnb24+IHBvbHlnb25zRm9yUmVjdChjb25z
dCBWZWN0b3I8RmxvYXRSZWN0PiYKIAogVmVjdG9yPFBhdGg+IFBhdGhVdGlsaXRpZXM6OnBhdGhz
V2l0aFNocmlua1dyYXBwZWRSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZs
b2F0IHJhZGl1cykKIHsKLSAgICBWZWN0b3I8UGF0aD4gcGF0aHM7Ci0KICAgICBpZiAocmVjdHMu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gcGF0aHM7CisgICAgICAgIHJldHVybiB7IH07CiAK
ICAgICBpZiAocmVjdHMuc2l6ZSgpID4gMjApIHsKICAgICAgICAgUGF0aCBwYXRoOwogICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiByZWN0cykKICAgICAgICAgICAgIHBhdGguYWRkUm91
bmRlZFJlY3QocmVjdCwgRmxvYXRTaXplKHJhZGl1cywgcmFkaXVzKSk7Ci0gICAgICAgIHBhdGhz
LmFwcGVuZChwYXRoKTsKLSAgICAgICAgcmV0dXJuIHBhdGhzOworICAgICAgICByZXR1cm4geyBX
VEZNb3ZlKHBhdGgpIH07CiAgICAgfQogCiAgICAgRmxvYXRQb2ludEdyYXBoIGdyYXBoOwpAQCAt
MzA5LDEwICszMDYsMTEgQEAgVmVjdG9yPFBhdGg+IFBhdGhVdGlsaXRpZXM6OnBhdGhzV2l0aFNo
cmlua1dyYXBwZWRSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYKICAgICAgICAgUGF0aCBw
YXRoOwogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiByZWN0cykKICAgICAgICAgICAg
IHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCwgRmxvYXRTaXplKHJhZGl1cywgcmFkaXVzKSk7Ci0g
ICAgICAgIHBhdGhzLmFwcGVuZChwYXRoKTsKLSAgICAgICAgcmV0dXJuIHBhdGhzOworICAgICAg
ICByZXR1cm4geyBXVEZNb3ZlKHBhdGgpIH07CiAgICAgfQogCisgICAgVmVjdG9yPFBhdGg+IHBh
dGhzOworICAgIHBhdGhzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocG9seXMuc2l6ZSgpKTsKICAg
ICBmb3IgKGF1dG8mIHBvbHkgOiBwb2x5cykgewogICAgICAgICBQYXRoIHBhdGg7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwb2x5LnNpemUoKTsgKytpKSB7CkBAIC0zNDQsNyAr
MzQyLDcgQEAgVmVjdG9yPFBhdGg+IFBhdGhVdGlsaXRpZXM6OnBhdGhzV2l0aFNocmlua1dyYXBw
ZWRSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYKICAgICAgICAgICAgIHBhdGguYWRkQXJj
VG8oKmZyb21FZGdlLnNlY29uZCwgKnRvRWRnZS5maXJzdCArIHRvT2Zmc2V0LCBjbGFtcGVkUmFk
aXVzKTsKICAgICAgICAgfQogICAgICAgICBwYXRoLmNsb3NlU3VicGF0aCgpOwotICAgICAgICBw
YXRocy5hcHBlbmQocGF0aCk7CisgICAgICAgIHBhdGhzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3Zl
KHBhdGgpKTsKICAgICB9CiAgICAgcmV0dXJuIHBhdGhzOwogfQpAQCAtNTQzLDEzICs1NDEsMTQg
QEAgUGF0aCBQYXRoVXRpbGl0aWVzOjpwYXRoV2l0aFNocmlua1dyYXBwZWRSZWN0c0Zvck91dGxp
bmUoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4KICAgICBib3R0b21MZWZ0UmFkaXVzID0gZmlyc3RM
aW5lUmFkaWkuYm90dG9tTGVmdCgpOwogICAgIHRvcFJpZ2h0UmFkaXVzID0gbGFzdExpbmVSYWRp
aS50b3BSaWdodCgpOwogICAgIGJvdHRvbVJpZ2h0UmFkaXVzID0gbGFzdExpbmVSYWRpaS5ib3R0
b21SaWdodCgpOwotICAgIFZlY3RvcjxGbG9hdFBvaW50PiBjb3JuZXJzOwogICAgIC8vIHBoeXNp
Y2FsIHRvcExlZnQvdG9wUmlnaHQvYm90dG9tUmlnaHQvYm90dG9tTGVmdAogICAgIGF1dG8gaXNI
b3Jpem9udGFsID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpOwotICAgIGNv
cm5lcnMuYXBwZW5kKGZpcnN0TGluZVJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci0gICAgY29ybmVy
cy5hcHBlbmQoaXNIb3Jpem9udGFsID8gbGFzdExpbmVSZWN0Lm1heFhNaW5ZQ29ybmVyKCkgOiBm
aXJzdExpbmVSZWN0Lm1heFhNaW5ZQ29ybmVyKCkpOwotICAgIGNvcm5lcnMuYXBwZW5kKGxhc3RM
aW5lUmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKLSAgICBjb3JuZXJzLmFwcGVuZChpc0hvcml6b250
YWwgPyBmaXJzdExpbmVSZWN0Lm1pblhNYXhZQ29ybmVyKCkgOiBsYXN0TGluZVJlY3QubWluWE1h
eFlDb3JuZXIoKSk7CisgICAgYXV0byBjb3JuZXJzID0gVmVjdG9yPEZsb2F0UG9pbnQ+Ojpmcm9t
KAorICAgICAgICBmaXJzdExpbmVSZWN0Lm1pblhNaW5ZQ29ybmVyKCksCisgICAgICAgIGlzSG9y
aXpvbnRhbCA/IGxhc3RMaW5lUmVjdC5tYXhYTWluWUNvcm5lcigpIDogZmlyc3RMaW5lUmVjdC5t
YXhYTWluWUNvcm5lcigpLAorICAgICAgICBsYXN0TGluZVJlY3QubWF4WE1heFlDb3JuZXIoKSwK
KyAgICAgICAgaXNIb3Jpem9udGFsID8gZmlyc3RMaW5lUmVjdC5taW5YTWF4WUNvcm5lcigpIDog
bGFzdExpbmVSZWN0Lm1pblhNYXhZQ29ybmVyKCkKKyAgICApOwogCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHBvbHkuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgYXV0byBtb3ZlT3JBZGRM
aW5lVG8gPSBbaSwgJnBhdGhdIChjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2
YXRlLmNwcAppbmRleCA1NDk5ZjM3YTdmMzY0NmJkNWYzOTVhNDhiMDlkOTQxMWQ0YzliNjY0Li4w
NGNiZTRkMjdmMTkwYjdiMjdiOWNhN2U5OGE5YzQ3MTczZDJmODliIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNw
cApAQCAtMjE2LDEwICsyMTYsOSBAQCB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGU6OmJ1ZmZlcmVk
U2FtcGxlc0ZvclRyYWNrSWQoY29uc3QgQXRvbVN0cmluZyYgdHJhY2tJZCwgQwogICAgIGlmICgh
dHJhY2tCdWZmZXIpCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAKLSAgICBWZWN0
b3I8U3RyaW5nPiBzYW1wbGVEZXNjcmlwdGlvbnM7Ci0gICAgZm9yIChhdXRvJiBwYWlyIDogdHJh
Y2tCdWZmZXItPnNhbXBsZXMuZGVjb2RlT3JkZXIoKSkKLSAgICAgICAgc2FtcGxlRGVzY3JpcHRp
b25zLmFwcGVuZCh0b1N0cmluZygqcGFpci5zZWNvbmQpKTsKLQorICAgIGF1dG8gc2FtcGxlRGVz
Y3JpcHRpb25zID0gV1RGOjptYXAodHJhY2tCdWZmZXItPnNhbXBsZXMuZGVjb2RlT3JkZXIoKSwg
W10oYXV0byYgZW50cnkpIHsKKyAgICAgICAgcmV0dXJuIHRvU3RyaW5nKCplbnRyeS5zZWNvbmQp
OworICAgIH0pOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoc2FtcGxlRGVzY3JpcHRp
b25zKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCmlu
ZGV4IDhiMDRmOWJlOTZjMzZlMGEyNjIxODBhMjVlYTM3NDU5NjJiM2Q3ZDUuLmM1NDYxNDYyM2I4
N2VjMDg5NjFmMWQ0NDIwZjk2MDFmMTZhNmFiNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZh
aXJQbGF5U3RyZWFtaW5nLmNwcApAQCAtMjAxLDkgKzIwMSw3IEBAIFJlZlB0cjxGcmFnbWVudGVk
U2hhcmVkQnVmZmVyPiBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OnNhbml0aXplU2tkKGNv
bnN0IEZyCiBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxSZWY8RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4+
PiBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OmV4dHJhY3RLZXlJRHNTa2QoY29uc3QgRnJh
Z21lbnRlZFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogewogICAgIC8vIEluIHRoZSAnc2tkJyBzY2hl
bWUsIHRoZSBpbml0IGRhdGEgaXMgdGhlIGtleSBJRC4KLSAgICBWZWN0b3I8UmVmPEZyYWdtZW50
ZWRTaGFyZWRCdWZmZXI+PiBrZXlJRHM7Ci0gICAga2V5SURzLmFwcGVuZChidWZmZXIuY29weSgp
KTsKLSAgICByZXR1cm4ga2V5SURzOworICAgIHJldHVybiBWZWN0b3IgeyBidWZmZXIuY29weSgp
IH07CiB9CiAKIHN0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hTZXQ8QXRvbVN0cmluZz4mIHZhbGlkSW5pdERhdGFUeXBlcygpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5j
ZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZP
YmpDLm1tCmluZGV4IGQ2MzYxMmZhYTA1MzcwYTAzOTczYTFlMmQ1NmMxODY4YTJmOTkxNjAuLjk2
MjVmYTk1MDNlN2JlYmM3MTlmYzRiMzdhNjNjMzhkNzQ1MDMwOGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNl
RmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdB
VkZPYmpDLm1tCkBAIC0xNDk0LDcgKzE0OTQsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZh
aXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6dXBkYXRlS2V5U3RhdHVzZXMoc3RkOjpvcHRpb25hbAog
ICAgICAgICB9CiAgICAgfQogCi0gICAgbV9rZXlTdGF0dXNlcy5zd2FwKGtleVN0YXR1c2VzKTsK
KyAgICBtX2tleVN0YXR1c2VzID0gV1RGTW92ZShrZXlTdGF0dXNlcyk7CiAKICAgICBtX2luc3Rh
bmNlLT5zZXNzaW9uS2V5U3RhdHVzZXNDaGFuZ2VkKCp0aGlzKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVj
b2RlckFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1tCmluZGV4IDU2M2FmMTkyNGQ5YWYzNTll
OTMwZWY2NGJhZTMyM2ZjMDQxZGU4N2EuLmFkN2Y0NTEwMWMwNmExODg4YzAwOGZhZWQ0YTkxOTA1
NjEzODI5M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVjb2RlckFWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVyQVZGT2Jq
Qy5tbQpAQCAtNTM1LDEzICs1MzUsMTAgQEAgVmVjdG9yPEltYWdlRGVjb2Rlcjo6RnJhbWVJbmZv
PiBJbWFnZURlY29kZXJBVkZPYmpDOjpmcmFtZUluZm9zKCkgY29uc3QKICAgICBpZiAobV9zYW1w
bGVEYXRhLmVtcHR5KCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBWZWN0b3I8SW1hZ2VE
ZWNvZGVyOjpGcmFtZUluZm8+IGluZm9zOwotICAgIGZvciAoYXV0byYgc2FtcGxlIDogbV9zYW1w
bGVEYXRhLnByZXNlbnRhdGlvbk9yZGVyKCkpIHsKKyAgICByZXR1cm4gV1RGOjptYXAobV9zYW1w
bGVEYXRhLnByZXNlbnRhdGlvbk9yZGVyKCksIFtdKGF1dG8mIHNhbXBsZSkgewogICAgICAgICBh
dXRvKiBpbWFnZVNhbXBsZSA9IChJbWFnZURlY29kZXJBVkZPYmpDU2FtcGxlKilzYW1wbGUuc2Vj
b25kLmdldCgpOwotICAgICAgICBpbmZvcy5hcHBlbmQoeyBpbWFnZVNhbXBsZS0+aGFzQWxwaGEo
KSwgU2Vjb25kcyhpbWFnZVNhbXBsZS0+ZHVyYXRpb24oKS50b0RvdWJsZSgpKX0pOwotICAgIH0K
LQotICAgIHJldHVybiBpbmZvczsKKyAgICAgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6RnJhbWVJ
bmZvIHsgaW1hZ2VTYW1wbGUtPmhhc0FscGhhKCksIFNlY29uZHMoaW1hZ2VTYW1wbGUtPmR1cmF0
aW9uKCkudG9Eb3VibGUoKSkgfTsKKyAgICB9KTsKIH0KIAogYm9vbCBJbWFnZURlY29kZXJBVkZP
YmpDOjpmcmFtZUFsbG93U3Vic2FtcGxpbmdBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL1NvdXJjZUJ1ZmZlclBhcnNlckFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQYXJzZXJBVkZPYmpDLm1t
CmluZGV4IGFhMTU4NDA0YjEwZTQ0NGFmNmU1ZWRkYzhkYWQ2YmE5NmVkNWNiMjIuLmU2MWIxNDdm
NjNjNWY0NTcyNzVmNjA1MDNlMzdhOGI1MmQxOGUzYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclBhcnNl
ckFWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvU291cmNlQnVmZmVyUGFyc2VyQVZGT2JqQy5tbQpAQCAtMjk3LDE2ICsyOTcs
MTQgQEAgdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJBVkZPYmpDOjpkaWRQYXJzZVN0cmVhbURhdGFB
c0Fzc2V0KEFWQXNzZXQqIGFzc2V0KQogCiAgICAgICAgICAgICBpZiAoW3RyYWNrIGhhc01lZGlh
Q2hhcmFjdGVyaXN0aWM6QVZNZWRpYUNoYXJhY3RlcmlzdGljVmlzdWFsXSkgewogICAgICAgICAg
ICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudDo6
VmlkZW9UcmFja0luZm9ybWF0aW9uIGluZm87Ci0gICAgICAgICAgICAgICAgYXV0byB2aWRlb1Ry
YWNrID0gVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmNyZWF0ZSh0cmFjayk7
Ci0gICAgICAgICAgICAgICAgaW5mby50cmFjayA9IHZpZGVvVHJhY2suY29weVJlZigpOworICAg
ICAgICAgICAgICAgIGluZm8udHJhY2sgPSBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQzo6Y3JlYXRlKHRyYWNrKTsKICAgICAgICAgICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0g
TWVkaWFEZXNjcmlwdGlvbkFWRk9iakM6OmNyZWF0ZSh0cmFjayk7Ci0gICAgICAgICAgICAgICAg
c2VnbWVudC52aWRlb1RyYWNrcy5hcHBlbmQoaW5mbyk7CisgICAgICAgICAgICAgICAgc2VnbWVu
dC52aWRlb1RyYWNrcy5hcHBlbmQoV1RGTW92ZShpbmZvKSk7CiAgICAgICAgICAgICB9IGVsc2Ug
aWYgKFt0cmFjayBoYXNNZWRpYUNoYXJhY3RlcmlzdGljOkFWTWVkaWFDaGFyYWN0ZXJpc3RpY0F1
ZGlibGVdKSB7CiAgICAgICAgICAgICAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5p
dGlhbGl6YXRpb25TZWdtZW50OjpBdWRpb1RyYWNrSW5mb3JtYXRpb24gaW5mbzsKLSAgICAgICAg
ICAgICAgICBhdXRvIGF1ZGlvVHJhY2sgPSBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQzo6Y3JlYXRlKHRyYWNrKTsKLSAgICAgICAgICAgICAgICBpbmZvLnRyYWNrID0gYXVkaW9U
cmFjay5jb3B5UmVmKCk7CisgICAgICAgICAgICAgICAgaW5mby50cmFjayA9IEF1ZGlvVHJhY2tQ
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjcmVhdGUodHJhY2spOwogICAgICAgICAgICAgICAg
IGluZm8uZGVzY3JpcHRpb24gPSBNZWRpYURlc2NyaXB0aW9uQVZGT2JqQzo6Y3JlYXRlKHRyYWNr
KTsKLSAgICAgICAgICAgICAgICBzZWdtZW50LmF1ZGlvVHJhY2tzLmFwcGVuZChpbmZvKTsKKyAg
ICAgICAgICAgICAgICBzZWdtZW50LmF1ZGlvVHJhY2tzLmFwcGVuZChXVEZNb3ZlKGluZm8pKTsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gRklYTUUoMTI1MTYxKSAgICA6IEFkZCBU
ZXh0VHJhY2sgc3VwcG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCmluZGV4IDg1NDIx
ZTNkZTcwOWNlMTU5YzQ5NGI0MGZiOGQxYWQyMzU5M2MzYmIuLmNiMmQwYmU4OTcwNDZiN2ZmOWYz
Mjc2Yzk3Njc5YWZiNGYwMTJhYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KQEAg
LTY4LDExICs2OCwxMCBAQCBWZWN0b3I8Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFZhcmlhdGlvbkF4
aXM+IEZvbnRQbGF0Zm9ybURhdGE6OnZhcmlhdGlvbkF4ZXMoU2hvdQogICAgIGlmICghcGxhdGZv
cm1Gb250KQogICAgICAgICByZXR1cm4geyB9OwogICAgIAotICAgIFZlY3RvcjxGb250VmFyaWF0
aW9uQXhpcz4gcmVzdWx0czsKLSAgICBmb3IgKGF1dG8mIFt0YWcsIHZhbHVlc10gOiBkZWZhdWx0
VmFyaWF0aW9uVmFsdWVzKHBsYXRmb3JtRm9udCwgc2hvdWxkTG9jYWxpemVBeGlzTmFtZXMpKQot
ICAgICAgICByZXN1bHRzLmFwcGVuZChGb250UGxhdGZvcm1EYXRhOjpGb250VmFyaWF0aW9uQXhp
cyh2YWx1ZXMuYXhpc05hbWUsIFN0cmluZyh0YWcuZGF0YSgpLCB0YWcuc2l6ZSgpKSwgdmFsdWVz
LmRlZmF1bHRWYWx1ZSwgdmFsdWVzLm1pbmltdW1WYWx1ZSwgdmFsdWVzLm1heGltdW1WYWx1ZSkp
OwotICAgIAotICAgIHJldHVybiByZXN1bHRzOworICAgIHJldHVybiBXVEY6Om1hcChkZWZhdWx0
VmFyaWF0aW9uVmFsdWVzKHBsYXRmb3JtRm9udCwgc2hvdWxkTG9jYWxpemVBeGlzTmFtZXMpLCBb
XShhdXRvJiYgZW50cnkpIHsKKyAgICAgICAgYXV0byYgW3RhZywgdmFsdWVzXSA9IGVudHJ5Owor
ICAgICAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YTo6Rm9udFZhcmlhdGlvbkF4aXMgeyB2YWx1
ZXMuYXhpc05hbWUsIFN0cmluZyh0YWcuZGF0YSgpLCB0YWcuc2l6ZSgpKSwgdmFsdWVzLmRlZmF1
bHRWYWx1ZSwgdmFsdWVzLm1pbmltdW1WYWx1ZSwgdmFsdWVzLm1heGltdW1WYWx1ZSB9OworICAg
IH0pOwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0
ZWJvYXJkTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMu
bW0KaW5kZXggYmE4ZWExZWI0NDhhOTIxZTMwZDNhZTZhOWM3N2U4ODIzM2FiYzUzYi4uYTJjMjUw
YWEyYmVmOGRlOTY0YmFmMDkyNDBkNWUwZWM0MTUwZWY4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KQEAgLTcwMiwxMCArNzAyLDcgQEAgQUxMT1df
REVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KICAgICAgICAgTlNVUkwgKnVybCA9IFtOU1VS
TCBVUkxXaXRoU3RyaW5nOmNvY29hRGF0YV07CiAgICAgICAgIGlmIChbdXJsIGlzRmlsZVVSTF0p
CiAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7Ci0g
ICAgICAgIHR5cGVzLmFwcGVuZChjb2NvYVR5cGUpOwotICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdp
ZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFR5cGVzKHR5cGVzLCBtX3Bhc3RlYm9hcmRO
YW1lLCBjb250ZXh0KCkpOworICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2Fy
ZFN0cmF0ZWd5KCktPnNldFR5cGVzKHsgY29jb2FUeXBlIH0sIG1fcGFzdGVib2FyZE5hbWUsIGNv
bnRleHQoKSk7CiAgICAgICAgIG1fY2hhbmdlQ291bnQgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+
cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFN0cmluZ0ZvclR5cGUoY29jb2FEYXRhLCBjb2NvYVR5
cGUsIG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQoKSk7CiAKICAgICAgICAgcmV0dXJuOwpAQCAt
NzE0LDkgKzcxMSw3IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogCiAgICAg
aWYgKCFjb2NvYVR5cGUuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIGV2ZXJ5dGhpbmcgZWxzZSB3
ZSBrbm93IG9mIGdvZXMgb24gdGhlIHBib2FyZCBhcyBhIHN0cmluZwotICAgICAgICBWZWN0b3I8
U3RyaW5nPiB0eXBlczsKLSAgICAgICAgdHlwZXMuYXBwZW5kKGNvY29hVHlwZSk7Ci0gICAgICAg
IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+YWRkVHlwZXModHlw
ZXMsIG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQoKSk7CisgICAgICAgIHBsYXRmb3JtU3RyYXRl
Z2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+YWRkVHlwZXMoeyBjb2NvYVR5cGUgfSwgbV9w
YXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKTsKICAgICAgICAgbV9jaGFuZ2VDb3VudCA9IHBsYXRm
b3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0U3RyaW5nRm9yVHlwZShj
b2NvYURhdGEsIGNvY29hVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKTsKICAgICB9
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFs
dGltZVZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9SZWFsdGltZVZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAKaW5kZXggM2UzZjQxYTFjNTgw
N2U2Y2QzNTlkZTNkZjI2YWU3MmQ1NTFjZDU4Mi4uNzdkMzI2NjU2ZDVjYmM1YWVmY2Q0MTdhMTdh
ODdhNDZmNzEyMjdiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vUmVhbHRpbWVWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlLmNwcApAQCAt
NzUsMTEgKzc1LDkgQEAgVmVjdG9yPFZpZGVvUHJlc2V0RGF0YT4gUmVhbHRpbWVWaWRlb0NhcHR1
cmVTb3VyY2U6OnByZXNldHNEYXRhKCkKIAogdm9pZCBSZWFsdGltZVZpZGVvQ2FwdHVyZVNvdXJj
ZTo6c2V0U3VwcG9ydGVkUHJlc2V0cyhWZWN0b3I8VmlkZW9QcmVzZXREYXRhPiYmIHByZXNldERh
dGEpCiB7Ci0gICAgVmVjdG9yPFJlZjxWaWRlb1ByZXNldD4+IHByZXNldHM7Ci0KLSAgICBmb3Ig
KGF1dG8mIGRhdGEgOiBwcmVzZXREYXRhKQotICAgICAgICBwcmVzZXRzLmFwcGVuZChWaWRlb1By
ZXNldDo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpKTsKLQorICAgIGF1dG8gcHJlc2V0cyA9IFdURjo6
bWFwKFdURk1vdmUocHJlc2V0RGF0YSksIFtdKGF1dG8mJiBkYXRhKSB7CisgICAgICAgIHJldHVy
biBWaWRlb1ByZXNldDo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpOworICAgIH0pOwogICAgIHNldFN1
cHBvcnRlZFByZXNldHMoV1RGTW92ZShwcmVzZXRzKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCmluZGV4IDY3YTc2
Mjk1ZDg1ZjM5MWM4M2IyNDAwZTZkMWZlNTc5Y2NkZWQ4OGYuLjYyMzYzNmFjMmFiZDY4Mzg0MTRk
YzhmMWY5MjZjZWQ1YzQ3Y2NhMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcApAQCAtMTQxLDEwICsxNDEsOCBAQCB2b2lk
IEJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmIHVybCwgVmVjdG9y
PEJsb2JQYXJ0PiYmIGJsb2JQYQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBCbG9iUGFydDo6VHlwZTo6QmxvYjogewotICAgICAgICAgICAgaWYgKGF1dG8gYmxv
YiA9IG1fYmxvYnMuZ2V0KHBhcnQudXJsKCkuc3RyaW5nKCkpKSB7Ci0gICAgICAgICAgICAgICAg
Zm9yIChjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0gOiBibG9iLT5pdGVtcygpKQotICAgICAgICAg
ICAgICAgICAgICBibG9iRGF0YS0+bV9pdGVtcy5hcHBlbmQoaXRlbSk7Ci0gICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoYXV0byBibG9iID0gbV9ibG9icy5nZXQocGFydC51cmwoKS5zdHJp
bmcoKSkpCisgICAgICAgICAgICAgICAgYmxvYkRhdGEtPm1faXRlbXMuYXBwZW5kVmVjdG9yKGJs
b2ItPml0ZW1zKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtMzI4LDcgKzMyNiw3IEBAIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6d3JpdGVCbG9ic1RvVGVt
cG9yYXJ5RmlsZXNGb3JJbmRleGVkREIoY29uc3QgVmVjdG9yPFN0cmluCiAgICAgICAgICAgICAg
ICAgZmlsZVBhdGhzLmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBmaWxlUGF0aHMuYXBwZW5kKHRlbXBGaWxlUGF0aC5pc29sYXRlZENv
cHkoKSk7CisgICAgICAgICAgICBmaWxlUGF0aHMuYXBwZW5kKFdURk1vdmUodGVtcEZpbGVQYXRo
KS5pc29sYXRlZENvcHkoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYWxsT25NYWluVGhyZWFk
KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBmaWxlUGF0
aHMgPSBXVEZNb3ZlKGZpbGVQYXRocyldICgpIG11dGFibGUgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggODUzMGUzMzU1ZjJk
NmI4ZDdmZmI2ZWRmODNkNjA4YmNhNGI5ZjU1NS4uOWFiOTk4ZTQxY2IwOGNmMGI2ZjkwZjEwZjEz
YzRiODQ1N2VjOTM5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuY3BwCkBAIC0yMDg2LDEwICsyMDg2LDggQEAgdm9pZCBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6ZHJhd0JveFNpZGVGcm9tUGF0aChHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNz
Q29udGV4dCwKICAgICAgICAgICAgICAgICBnYXBMZW5ndGggKz0gKGRhc2hMZW5ndGggIC8gbnVt
YmVyT2ZHYXBzKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgRGFzaEFycmF5IGxpbmVE
YXNoOwotICAgICAgICAgICAgbGluZURhc2guYXBwZW5kKGRhc2hMZW5ndGgpOwotICAgICAgICAg
ICAgbGluZURhc2guYXBwZW5kKGdhcExlbmd0aCk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQuc2V0TGluZURhc2gobGluZURhc2gsIGRhc2hMZW5ndGgpOworICAgICAgICAgICAgYXV0byBs
aW5lRGFzaCA9IERhc2hBcnJheTo6ZnJvbShkYXNoTGVuZ3RoLCBnYXBMZW5ndGgpOworICAgICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldExpbmVEYXNoKFdURk1vdmUobGluZURhc2gpLCBkYXNo
TGVuZ3RoKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IHN0cm9raW5n
IHRoZSBib3JkZXIgcGF0aCBjYXVzZXMgaXNzdWVzIHdpdGggdGlnaHQgY29ybmVyczoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggZGE4
ZGYyZTkyM2IzNTQ2ZTBmM2Q0YzViMzA1ZWZlNjU0MDdlNzg2MS4uNDI1YzY5YzMxNDFiZjc0ZmE1
NzJkZjIwYmI4YTBlNDA1NzdhYjgxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTE5NTYsOSArMTk1Niw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXJCYWNraW5nOjpjb25uZWN0Q2xpcHBpbmdTdGFja0xheWVycyhMYXllckFuY2VzdG9yQ2xp
cHBpbmdTdGFjayYKICAgICBhdXRvJiBjbGlwcGluZ0VudHJ5U3RhY2sgPSBjbGlwcGluZ1N0YWNr
LnN0YWNrKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNsaXBwaW5nRW50cnlTdGFj
ay5zaXplKCkgLSAxOyArK2kpIHsKICAgICAgICAgYXV0byYgZW50cnkgPSBjbGlwcGluZ0VudHJ5
U3RhY2suYXQoaSk7Ci0gICAgICAgIFZlY3RvcjxSZWY8R3JhcGhpY3NMYXllcj4+IGNoaWxkcmVu
OwotICAgICAgICBjaGlsZHJlbi5hcHBlbmQoKmNsaXBwaW5nRW50cnlTdGFjay5hdChpICsgMSku
Y2xpcHBpbmdMYXllcik7Ci0gICAgICAgIGVudHJ5LmNsaXBwaW5nTGF5ZXItPnNldENoaWxkcmVu
KFdURk1vdmUoY2hpbGRyZW4pKTsKKyAgICAgICAgZW50cnkuY2xpcHBpbmdMYXllci0+c2V0Q2hp
bGRyZW4oeyBSZWYgeyAqY2xpcHBpbmdFbnRyeVN0YWNrLmF0KGkgKyAxKS5jbGlwcGluZ0xheWVy
IH0gfSk7CiAgICAgfQogCiAgICAgY2xpcHBpbmdFbnRyeVN0YWNrLmxhc3QoKS5jbGlwcGluZ0xh
eWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCAwYmUwMzlhMGYyM2Q1N2ZmN2Y1N2Q5
OTA5YjY1Mzc1YTAyNDI0M2I0Li4yM2Q3MzcxMzRjYThlYWExNjA1ZDBjNDc3YWNlNjI4M2Y4NDYy
MWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcApAQCAtMTQ5MSw5ICsxNDkxLDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmFkanVzdE92ZXJmbG93U2Nyb2xsYmFyQ29udGFpbmVyTGF5ZXJzKFJlbmRlckxheWVyJgog
ICAgICAgICAgICAgb3ZlcmZsb3dCYWNraW5nLT5lbnN1cmVPdmVyZmxvd0NvbnRyb2xzSG9zdExh
eWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrKCZzdGFja2luZ0NvbnRleHRMYXllcik7CiAKICAgICAg
ICAgaWYgKGF1dG8qIG92ZXJmbG93Q29udHJvbHNBbmNlc3RvckNsaXBwaW5nU3RhY2sgPSBvdmVy
Zmxvd0JhY2tpbmctPm92ZXJmbG93Q29udHJvbHNIb3N0TGF5ZXJBbmNlc3RvckNsaXBwaW5nU3Rh
Y2soKSkgewotICAgICAgICAgICAgVmVjdG9yPFJlZjxHcmFwaGljc0xheWVyPj4gY2hpbGRyZW47
Ci0gICAgICAgICAgICBjaGlsZHJlbi5hcHBlbmQoKm92ZXJmbG93Q29udGFpbmVyTGF5ZXIpOwot
ICAgICAgICAgICAgb3ZlcmZsb3dDb250cm9sc0FuY2VzdG9yQ2xpcHBpbmdTdGFjay0+bGFzdENs
aXBwaW5nTGF5ZXIoKS0+c2V0Q2hpbGRyZW4oV1RGTW92ZShjaGlsZHJlbikpOworICAgICAgICAg
ICAgb3ZlcmZsb3dDb250cm9sc0FuY2VzdG9yQ2xpcHBpbmdTdGFjay0+bGFzdENsaXBwaW5nTGF5
ZXIoKS0+c2V0Q2hpbGRyZW4oeyBSZWYgeyAqb3ZlcmZsb3dDb250YWluZXJMYXllciB9IH0pOwog
ICAgICAgICAgICAgb3ZlcmZsb3dDb250YWluZXJMYXllciA9IG92ZXJmbG93Q29udHJvbHNBbmNl
c3RvckNsaXBwaW5nU3RhY2stPmZpcnN0Q2xpcHBpbmdMYXllcigpOwogICAgICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCA5ZTEwOGY4YjRm
ZjI2MTc5Njg5NjRmYTEzNzAxNTE5YmJjMjQ1MmM0Li44NzY2N2RlMmRlZDI5NWQ5MzU4MDJiMzM4
OTJhMGMzMjFjN2UzMmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
TWFjLm1tCkBAIC0yNzMxLDEwICsyNzMxLDkgQEAgc3RhdGljIHZvaWQgcGFpbnRBdHRhY2htZW50
VGl0bGVCYWNrZ3JvdW5kKGNvbnN0IFJlbmRlckF0dGFjaG1lbnQmIGF0dGFjaG1lbnQsIEcKICAg
ICBpZiAobGF5b3V0LmxpbmVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVj
dG9yPEZsb2F0UmVjdD4gYmFja2dyb3VuZFJlY3RzOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsYXlvdXQubGluZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGJhY2tncm91bmRSZWN0cy5h
cHBlbmQobGF5b3V0LmxpbmVzW2ldLmJhY2tncm91bmRSZWN0KTsKKyAgICBhdXRvIGJhY2tncm91
bmRSZWN0cyA9IGxheW91dC5saW5lcy5tYXAoW10oYXV0byYgbGluZSkgeworICAgICAgICByZXR1
cm4gbGluZS5iYWNrZ3JvdW5kUmVjdDsKKyAgICB9KTsKIAogICAgIENvbG9yIGJhY2tncm91bmRD
b2xvcjsKICAgICBpZiAoYXR0YWNobWVudC5mcmFtZSgpLnNlbGVjdGlvbigpLmlzRm9jdXNlZEFu
ZEFjdGl2ZSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCBmZTU1OWJkNzBiMWQwY2Y0YjFjNWE1YjFjOTBhMjk2
MzVlOGIyNzMxLi45Mjc2YjkzYzczMTI2MWMxZjJmZmJlYzQ5ZjFlY2NlNzNjYTFiYjVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4
dC5jcHAKQEAgLTE5NywxMSArMTk3LDkgQEAgc3RhdGljIHZvaWQgd3JpdGVTVkdTdHJva2VQYWlu
dGluZ1Jlc291cmNlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJFbGVtZW50JgogICAgIFNW
R0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dCgmc2hhcGUpOwogICAgIGRvdWJsZSBkYXNoT2Zm
c2V0ID0gbGVuZ3RoQ29udGV4dC52YWx1ZUZvckxlbmd0aChzdmdTdHlsZS5zdHJva2VEYXNoT2Zm
c2V0KCkpOwogICAgIGRvdWJsZSBzdHJva2VXaWR0aCA9IGxlbmd0aENvbnRleHQudmFsdWVGb3JM
ZW5ndGgoc3R5bGUuc3Ryb2tlV2lkdGgoKSk7Ci0gICAgY29uc3QgYXV0byYgZGFzaGVzID0gc3Zn
U3R5bGUuc3Ryb2tlRGFzaEFycmF5KCk7Ci0KLSAgICBEYXNoQXJyYXkgZGFzaEFycmF5OwotICAg
IGZvciAoYXV0byYgbGVuZ3RoIDogZGFzaGVzKQotICAgICAgICBkYXNoQXJyYXkuYXBwZW5kKGxl
bmd0aC52YWx1ZShsZW5ndGhDb250ZXh0KSk7CisgICAgYXV0byBkYXNoQXJyYXkgPSBzdmdTdHls
ZS5zdHJva2VEYXNoQXJyYXkoKS5tYXAoWyZdKGF1dG8mIGxlbmd0aCkgLT4gRGFzaEFycmF5RWxl
bWVudCB7CisgICAgICAgIHJldHVybiBsZW5ndGgudmFsdWUobGVuZ3RoQ29udGV4dCk7CisgICAg
fSk7CiAKICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgIm9wYWNpdHkiLCBzdmdTdHlsZS5zdHJv
a2VPcGFjaXR5KCksIDEuMGYpOwogICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAic3Ryb2tlIHdp
ZHRoIiwgc3Ryb2tlV2lkdGgsIDEuMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1RleHRDaHVuay5jcHAKaW5kZXggYTYzZWI4MGE3NzlkNzc2OGRhNDc3MmJiMGQ2YWZlMTll
MzUyMWJiZC4uODQ4MTM2YzhhNTM4YzZlYzhlY2MxNmQ1YmYwMWJmZGUyZGRiMzkxOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcApAQCAtNzAsOCAr
NzAsNyBAQCBTVkdUZXh0Q2h1bms6OlNWR1RleHRDaHVuayhjb25zdCBWZWN0b3I8U1ZHSW5saW5l
VGV4dEJveCo+JiBsaW5lTGF5b3V0Qm94ZXMsIHVucwogICAgICAgICB9CiAgICAgfQogCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gZmlyc3Q7IGkgPCBsaW1pdDsgKytpKQotICAgICAgICBtX2JveGVz
LmFwcGVuZChsaW5lTGF5b3V0Qm94ZXNbaV0pOworICAgIG1fYm94ZXMuYXBwZW5kKCZsaW5lTGF5
b3V0Qm94ZXNbZmlyc3RdLCBsaW1pdCAtIGZpcnN0KTsKIH0KIAogdW5zaWduZWQgU1ZHVGV4dENo
dW5rOjp0b3RhbENoYXJhY3RlcnMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUGFnZVJ1
bGVDb2xsZWN0b3IuY3BwCmluZGV4IDIyOTlmOGM2Mzc5YjUwOTQ5MmExYTFmZmE1MjMwNmExYWEx
Njg5YjQuLmUzZGMzZWZiYzI5YjYzZDc1MjE0OWRhY2IxMTMxZmZhNTJhY2M5NDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29sbGVjdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5jcHAKQEAgLTg0LDggKzg0LDkgQEAg
dm9pZCBQYWdlUnVsZUNvbGxlY3Rvcjo6bWF0Y2hQYWdlUnVsZXMoUnVsZVNldCogcnVsZXMsIGJv
b2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0YKIAogICAgIHN0ZDo6c3RhYmxlX3NvcnQobWF0Y2hlZFBh
Z2VSdWxlcy5iZWdpbigpLCBtYXRjaGVkUGFnZVJ1bGVzLmVuZCgpLCBjb21wYXJlUGFnZVJ1bGVz
KTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXRjaGVkUGFnZVJ1bGVzLnNpemUo
KTsgaSsrKQotICAgICAgICBtX3Jlc3VsdC5hdXRob3JEZWNsYXJhdGlvbnMuYXBwZW5kKHsgJm1h
dGNoZWRQYWdlUnVsZXNbaV0tPnByb3BlcnRpZXMoKSB9KTsKKyAgICBtX3Jlc3VsdC5hdXRob3JE
ZWNsYXJhdGlvbnMucmVzZXJ2ZUNhcGFjaXR5KG1fcmVzdWx0LmF1dGhvckRlY2xhcmF0aW9ucy5z
aXplKCkgKyBtYXRjaGVkUGFnZVJ1bGVzLnNpemUoKSk7CisgICAgZm9yIChhdXRvKiBwYWdlUnVs
ZSA6IG1hdGNoZWRQYWdlUnVsZXMpCisgICAgICAgIG1fcmVzdWx0LmF1dGhvckRlY2xhcmF0aW9u
cy51bmNoZWNrZWRBcHBlbmQoeyAmcGFnZVJ1bGUtPnByb3BlcnRpZXMoKSB9KTsKIH0KIAogc3Rh
dGljIGJvb2wgY2hlY2tQYWdlU2VsZWN0b3JDb21wb25lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiBz
ZWxlY3RvciwgYm9vbCBpc0xlZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcm
IHBhZ2VOYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwCmluZGV4IDU3
NTE4NTkxOTdiMjI2ZmMyNDRhZjZiYzMyMDVmYWQyNmUwMTcwMTkuLmNmMTY1MjIxY2Q1M2EzYzVh
NzdjNmQ5ODA4NDMyMWMxM2YyMjIzOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1J1bGVTZXRCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0QnVp
bGRlci5jcHAKQEAgLTM3OCw4ICszNzgsOSBAQCB2b2lkIFJ1bGVTZXRCdWlsZGVyOjpNZWRpYVF1
ZXJ5Q29sbGVjdG9yOjpwb3AoY29uc3QgTWVkaWFRdWVyeVNldCogc2V0KQogCiAgICAgaWYgKCFk
eW5hbWljQ29udGV4dFN0YWNrLmxhc3QoKS5hZmZlY3RlZFJ1bGVQb3NpdGlvbnMuaXNFbXB0eSgp
IHx8ICFjb2xsZWN0RHluYW1pYykgewogICAgICAgICBSdWxlU2V0OjpEeW5hbWljTWVkaWFRdWVy
eVJ1bGVzIHJ1bGVzOworICAgICAgICBydWxlcy5tZWRpYVF1ZXJ5U2V0cy5yZXNlcnZlQ2FwYWNp
dHkocnVsZXMubWVkaWFRdWVyeVNldHMuc2l6ZSgpICsgZHluYW1pY0NvbnRleHRTdGFjay5zaXpl
KCkpOwogICAgICAgICBmb3IgKGF1dG8mIGNvbnRleHQgOiBkeW5hbWljQ29udGV4dFN0YWNrKQot
ICAgICAgICAgICAgcnVsZXMubWVkaWFRdWVyeVNldHMuYXBwZW5kKGNvbnRleHQuc2V0LmdldCgp
KTsKKyAgICAgICAgICAgIHJ1bGVzLm1lZGlhUXVlcnlTZXRzLnVuY2hlY2tlZEFwcGVuZChjb250
ZXh0LnNldC5nZXQoKSk7CiAKICAgICAgICAgaWYgKGNvbGxlY3REeW5hbWljKSB7CiAgICAgICAg
ICAgICBydWxlcy5hZmZlY3RlZFJ1bGVQb3NpdGlvbnMuYXBwZW5kVmVjdG9yKGR5bmFtaWNDb250
ZXh0U3RhY2subGFzdCgpLmFmZmVjdGVkUnVsZVBvc2l0aW9ucyk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCmluZGV4IDJmODM0ZGY2N2Q4MGNiMTNkZDRj
OTE1NTFiYWQxMmRiMWIyM2EyNDkuLjc0NjRmODRkOGJmNmIyYjJhMzMxMjNkNTkyYmUyOTJmMTRj
YzI4ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckNvbnZl
cnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRlci5o
CkBAIC0xNjk3LDEzICsxNjk3LDEyIEBAIGlubGluZSBWZWN0b3I8QXRvbVN0cmluZz4gQnVpbGRl
ckNvbnZlcnRlcjo6Y29udmVydENvbnRhaW5lck5hbWUoQnVpbGRlclN0YXRlJiwKICAgICAgICAg
QVNTRVJUKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENT
U1ZhbHVlTm9uZSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQorICAgIGlmICghaXM8Q1NT
VmFsdWVMaXN0Pih2YWx1ZSkpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBWZWN0b3I8QXRv
bVN0cmluZz4gcmVzdWx0OwotICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgewotICAg
ICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkKLSAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0u
Z2V0KCkpLnN0cmluZ1ZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJl
dHVybiBXVEY6Om1hcChkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSwgW10oYXV0byYgaXRl
bSkgLT4gQXRvbVN0cmluZyB7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oaXRlbS5nZXQoKSkuc3RyaW5nVmFsdWUoKTsKKyAgICB9KTsKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyUHJv
eHkuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVy
UHJveHkuY3BwCmluZGV4IDBlZjgzNDJkZDI2OGVlNjhjMzA0NzYyZGEwNThiYTRmYmNiYzZlM2Mu
Ljk0OWZmMzIwNTU1MGI0OGI3Y2M3OWU0NTA1MTZhNDA0MDJhNGEzOTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllclByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJQcm94
eS5jcHAKQEAgLTgwNSwxMSArODA1LDkgQEAgYm9vbCBSZW1vdGVNZWRpYVBsYXllclByb3h5Ojpk
b2VzSGF2ZUF0dHJpYnV0ZShjb25zdCBBdG9tU3RyaW5nJiwgQXRvbVN0cmluZyopIGMKICNpZiBF
TkFCTEUoQVZGX0NBUFRJT05TKQogVmVjdG9yPFJlZlB0cjxQbGF0Zm9ybVRleHRUcmFjaz4+IFJl
bW90ZU1lZGlhUGxheWVyUHJveHk6Om91dE9mQmFuZFRyYWNrU291cmNlcygpCiB7Ci0gICAgVmVj
dG9yPFJlZlB0cjxQbGF0Zm9ybVRleHRUcmFjaz4+IHNvdXJjZXM7Ci0gICAgZm9yIChhdXRvJiBk
YXRhIDogbV9jb25maWd1cmF0aW9uLm91dE9mQmFuZFRyYWNrRGF0YSkKLSAgICAgICAgc291cmNl
cy5hcHBlbmQoUGxhdGZvcm1UZXh0VHJhY2s6OmNyZWF0ZShXVEZNb3ZlKGRhdGEpKSk7Ci0gICAg
Ci0gICAgcmV0dXJuIHNvdXJjZXM7CisgICAgcmV0dXJuIFdURjo6bWFwKG1fY29uZmlndXJhdGlv
bi5vdXRPZkJhbmRUcmFja0RhdGEsIFtdKGF1dG8mIGRhdGEpIC0+IFJlZlB0cjxQbGF0Zm9ybVRl
eHRUcmFjaz4geworICAgICAgICByZXR1cm4gUGxhdGZvcm1UZXh0VHJhY2s6OmNyZWF0ZShXVEZN
b3ZlKGRhdGEpKTsKKyAgICB9KTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlU291cmNlQnVmZmVyUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZVNvdXJjZUJ1ZmZlclByb3h5LmNwcAppbmRl
eCAyNzkxNjVkZTY2YWFmZTAyNDY4MWUxNjFhMDM1YzRhMTA5NTRlNmUxLi5iYzhkMDE2MjJkYzlm
MTE0MWU4NTlmMjQ2MmYzNjI4ODc4YjJiNWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvbWVkaWEvUmVtb3RlU291cmNlQnVmZmVyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVTb3VyY2VCdWZmZXJQcm94eS5jcHAKQEAgLTc1
LDM1ICs3NSwzMyBAQCB2b2lkIFJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5Ojpzb3VyY2VCdWZmZXJQ
cml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudAogCiAgICAgSW5pdGlhbGl6YXRp
b25TZWdtZW50SW5mbyBzZWdtZW50SW5mbzsKICAgICBzZWdtZW50SW5mby5kdXJhdGlvbiA9IHNl
Z21lbnQuZHVyYXRpb247Ci0gICAgZm9yIChhdXRvJiBhdWRpb1RyYWNrSW5mbyA6IHNlZ21lbnQu
YXVkaW9UcmFja3MpIHsKLSAgICAgICAgYXV0byBpZGVudGlmaWVyID0gbV9yZW1vdGVNZWRpYVBs
YXllclByb3h5LT5hZGRSZW1vdGVBdWRpb1RyYWNrUHJveHkoKmF1ZGlvVHJhY2tJbmZvLnRyYWNr
KTsKLSAgICAgICAgc2VnbWVudEluZm8uYXVkaW9UcmFja3MuYXBwZW5kKHsgTWVkaWFEZXNjcmlw
dGlvbkluZm8oKmF1ZGlvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwgaWRlbnRpZmllciB9KTsKIAor
ICAgIHNlZ21lbnRJbmZvLmF1ZGlvVHJhY2tzID0gc2VnbWVudC5hdWRpb1RyYWNrcy5tYXAoWyZd
KGF1dG8mIGF1ZGlvVHJhY2tJbmZvKSB7CisgICAgICAgIGF1dG8gaWRlbnRpZmllciA9IG1fcmVt
b3RlTWVkaWFQbGF5ZXJQcm94eS0+YWRkUmVtb3RlQXVkaW9UcmFja1Byb3h5KCphdWRpb1RyYWNr
SW5mby50cmFjayk7CiAgICAgICAgIEFTU0VSVCghbV90cmFja0lkcy5jb250YWlucyhpZGVudGlm
aWVyKSk7CiAgICAgICAgIEFTU0VSVCghbV9tZWRpYURlc2NyaXB0aW9ucy5jb250YWlucyhpZGVu
dGlmaWVyKSk7CiAgICAgICAgIG1fdHJhY2tJZHMuYWRkKGlkZW50aWZpZXIsIGF1ZGlvVHJhY2tJ
bmZvLnRyYWNrLT5pZCgpKTsKICAgICAgICAgbV9tZWRpYURlc2NyaXB0aW9ucy5hZGQoaWRlbnRp
ZmllciwgKmF1ZGlvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKTsKLSAgICB9CisgICAgICAgIHJldHVy
biBJbml0aWFsaXphdGlvblNlZ21lbnRJbmZvOjpUcmFja0luZm9ybWF0aW9uIHsgTWVkaWFEZXNj
cmlwdGlvbkluZm8oKmF1ZGlvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwgaWRlbnRpZmllciB9Owor
ICAgIH0pOwogCi0gICAgZm9yIChhdXRvJiB2aWRlb1RyYWNrSW5mbyA6IHNlZ21lbnQudmlkZW9U
cmFja3MpIHsKKyAgICBzZWdtZW50SW5mby52aWRlb1RyYWNrcyA9IHNlZ21lbnQudmlkZW9UcmFj
a3MubWFwKFsmXShhdXRvJiB2aWRlb1RyYWNrSW5mbykgewogICAgICAgICBhdXRvIGlkZW50aWZp
ZXIgPSBtX3JlbW90ZU1lZGlhUGxheWVyUHJveHktPmFkZFJlbW90ZVZpZGVvVHJhY2tQcm94eSgq
dmlkZW9UcmFja0luZm8udHJhY2spOwotICAgICAgICBzZWdtZW50SW5mby52aWRlb1RyYWNrcy5h
cHBlbmQoeyBNZWRpYURlc2NyaXB0aW9uSW5mbygqdmlkZW9UcmFja0luZm8uZGVzY3JpcHRpb24p
LCBpZGVudGlmaWVyIH0pOwotCiAgICAgICAgIEFTU0VSVCghbV90cmFja0lkcy5jb250YWlucyhp
ZGVudGlmaWVyKSk7CiAgICAgICAgIEFTU0VSVCghbV9tZWRpYURlc2NyaXB0aW9ucy5jb250YWlu
cyhpZGVudGlmaWVyKSk7CiAgICAgICAgIG1fdHJhY2tJZHMuYWRkKGlkZW50aWZpZXIsIHZpZGVv
VHJhY2tJbmZvLnRyYWNrLT5pZCgpKTsKICAgICAgICAgbV9tZWRpYURlc2NyaXB0aW9ucy5hZGQo
aWRlbnRpZmllciwgKnZpZGVvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKTsKLSAgICB9CisgICAgICAg
IHJldHVybiBJbml0aWFsaXphdGlvblNlZ21lbnRJbmZvOjpUcmFja0luZm9ybWF0aW9uIHsgTWVk
aWFEZXNjcmlwdGlvbkluZm8oKnZpZGVvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwgaWRlbnRpZmll
ciB9OworICAgIH0pOwogCi0gICAgZm9yIChhdXRvJiB0ZXh0VHJhY2tJbmZvIDogc2VnbWVudC50
ZXh0VHJhY2tzKSB7CisgICAgc2VnbWVudEluZm8udGV4dFRyYWNrcyA9IHNlZ21lbnQudGV4dFRy
YWNrcy5tYXAoWyZdKGF1dG8mIHRleHRUcmFja0luZm8pIHsKICAgICAgICAgYXV0byBpZGVudGlm
aWVyID0gbV9yZW1vdGVNZWRpYVBsYXllclByb3h5LT5hZGRSZW1vdGVUZXh0VHJhY2tQcm94eSgq
dGV4dFRyYWNrSW5mby50cmFjayk7Ci0gICAgICAgIHNlZ21lbnRJbmZvLnRleHRUcmFja3MuYXBw
ZW5kKHsgTWVkaWFEZXNjcmlwdGlvbkluZm8oKnRleHRUcmFja0luZm8uZGVzY3JpcHRpb24pLCBp
ZGVudGlmaWVyIH0pOwotCiAgICAgICAgIEFTU0VSVCghbV90cmFja0lkcy5jb250YWlucyhpZGVu
dGlmaWVyKSk7CiAgICAgICAgIEFTU0VSVCghbV9tZWRpYURlc2NyaXB0aW9ucy5jb250YWlucyhp
ZGVudGlmaWVyKSk7CiAgICAgICAgIG1fdHJhY2tJZHMuYWRkKGlkZW50aWZpZXIsIHRleHRUcmFj
a0luZm8udHJhY2stPmlkKCkpOwogICAgICAgICBtX21lZGlhRGVzY3JpcHRpb25zLmFkZChpZGVu
dGlmaWVyLCAqdGV4dFRyYWNrSW5mby5kZXNjcmlwdGlvbik7Ci0gICAgfQorICAgICAgICByZXR1
cm4gSW5pdGlhbGl6YXRpb25TZWdtZW50SW5mbzo6VHJhY2tJbmZvcm1hdGlvbiB7IE1lZGlhRGVz
Y3JpcHRpb25JbmZvKCp0ZXh0VHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwgaWRlbnRpZmllciB9Owor
ICAgIH0pOwogCiAgICAgaWYgKCFtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpIHsKICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTMzOCwxNiArMzM2LDExIEBAIHZvaWQgUmVtb3RlU291
cmNlQnVmZmVyUHJveHk6OnNlZWtUb1RpbWUoY29uc3QgTWVkaWFUaW1lJiBtZWRpYVRpbWUpCiAK
IHZvaWQgUmVtb3RlU291cmNlQnVmZmVyUHJveHk6OnVwZGF0ZVRyYWNrSWRzKFZlY3RvcjxzdGQ6
OnBhaXI8VHJhY2tQcml2YXRlUmVtb3RlSWRlbnRpZmllciwgVHJhY2tQcml2YXRlUmVtb3RlSWRl
bnRpZmllcj4+JiYgaWRlbnRpZmllclBhaXJzKQogewotICAgIFZlY3RvcjxzdGQ6OnBhaXI8QXRv
bVN0cmluZywgQXRvbVN0cmluZz4+IHRyYWNrSWRQYWlyczsKLQotICAgIGZvciAoYXV0byYgaWRl
bnRpZmllclBhaXIgOiBpZGVudGlmaWVyUGFpcnMpIHsKKyAgICBhdXRvIHRyYWNrSWRQYWlycyA9
IGlkZW50aWZpZXJQYWlycy5tYXAoWyZdKGF1dG8mIGlkZW50aWZpZXJQYWlyKSB7CiAgICAgICAg
IEFTU0VSVChtX3RyYWNrSWRzLmNvbnRhaW5zKGlkZW50aWZpZXJQYWlyLmZpcnN0KSk7CiAgICAg
ICAgIEFTU0VSVChtX3RyYWNrSWRzLmNvbnRhaW5zKGlkZW50aWZpZXJQYWlyLnNlY29uZCkpOwot
Ci0gICAgICAgIGF1dG8gb2xkSWQgPSBtX3RyYWNrSWRzLnRha2UoaWRlbnRpZmllclBhaXIuZmly
c3QpOwotICAgICAgICBhdXRvIG5ld0lkID0gbV90cmFja0lkcy5nZXQoaWRlbnRpZmllclBhaXIu
c2Vjb25kKTsKLSAgICAgICAgdHJhY2tJZFBhaXJzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihvbGRJ
ZCwgbmV3SWQpKTsKLSAgICB9CisgICAgICAgIHJldHVybiBzdGQ6OnBhaXIgeyBtX3RyYWNrSWRz
LnRha2UoaWRlbnRpZmllclBhaXIuZmlyc3QpLCBtX3RyYWNrSWRzLmdldChpZGVudGlmaWVyUGFp
ci5zZWNvbmQpIH07CisgICAgfSk7CiAKICAgICBpZiAoIXRyYWNrSWRQYWlycy5pc0VtcHR5KCkp
CiAgICAgICAgIG1fc291cmNlQnVmZmVyUHJpdmF0ZS0+dXBkYXRlVHJhY2tJZHMoV1RGTW92ZSh0
cmFja0lkUGFpcnMpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5jcHAKaW5kZXggNzBiNWFmZGE1MjZlOTkwOWI5NjJkNzEyMTNkODViNjBiNTM3MTgxZC4u
ZTg3NmVjMzc3NzFmZjQwMGNhYTgzNGNlZmFlOTU2MjU0Y2MzZmQ5MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKQEAgLTg1Myw5ICs4NTMsNyBA
QCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JU
ZXN0aW5nKGNvbnN0IFJlZ2lzdHJhYmxlRAogCiAgICAgICAgICAgICBzdGF0aXN0aWMuc3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWlucyA9IFdURk1vdmUodG9wRnJhbWVEb21haW5zKTsKIAotICAg
ICAgICAgICAgVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+IHN0YXRpc3RpY3M7Ci0gICAg
ICAgICAgICBzdGF0aXN0aWNzLmFwcGVuZChXVEZNb3ZlKHN0YXRpc3RpYykpOwotICAgICAgICAg
ICAgbV9zdGF0aXN0aWNzU3RvcmUtPm1lcmdlU3RhdGlzdGljcyhXVEZNb3ZlKHN0YXRpc3RpY3Mp
KTsKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5tZXJnZVN0YXRpc3RpY3MoVmVjdG9y
PFJlc291cmNlTG9hZFN0YXRpc3RpY3M+Ojpmcm9tKFdURk1vdmUoc3RhdGlzdGljKSkpOwogICAg
ICAgICB9CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmNwcAppbmRleCBmNGY4YTRjNGY0YWY5NmFmNjg5NDJjNWM2Yzk4OTJmZjdlMTk5M2YxLi40
YThiMGVkYTA5YmYwNTg5OGEzYjhiMjJjOTA4YjQ3YjI4ZWI5YzgxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMTM4MCwxMCArMTM4
MCw5IEBAIHN0YXRpYyB2b2lkIGZldGNoRGlza0NhY2hlRW50cmllcyhOZXR3b3JrQ2FjaGU6OkNh
Y2hlKiBjYWNoZSwgUEFMOjpTZXNzaW9uSUQgc2VzCiAgICAgSGFzaE1hcDxTZWN1cml0eU9yaWdp
bkRhdGEsIHVpbnQ2NF90PiBvcmlnaW5zQW5kU2l6ZXM7CiAgICAgY2FjaGUtPnRyYXZlcnNlKFtm
ZXRjaE9wdGlvbnMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
ciksIG9yaWdpbnNBbmRTaXplcyA9IFdURk1vdmUob3JpZ2luc0FuZFNpemVzKV0oYXV0byogdHJh
dmVyc2FsRW50cnkpIG11dGFibGUgewogICAgICAgICBpZiAoIXRyYXZlcnNhbEVudHJ5KSB7Ci0g
ICAgICAgICAgICBWZWN0b3I8V2Vic2l0ZURhdGE6OkVudHJ5PiBlbnRyaWVzOwotCi0gICAgICAg
ICAgICBmb3IgKGF1dG8mIG9yaWdpbkFuZFNpemUgOiBvcmlnaW5zQW5kU2l6ZXMpCi0gICAgICAg
ICAgICAgICAgZW50cmllcy5hcHBlbmQoV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luQW5kU2l6
ZS5rZXksIFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlLCBvcmlnaW5BbmRTaXplLnZhbHVlIH0p
OworICAgICAgICAgICAgYXV0byBlbnRyaWVzID0gV1RGOjptYXAob3JpZ2luc0FuZFNpemVzLCBb
XShhdXRvJiBvcmlnaW5BbmRTaXplKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYnNpdGVE
YXRhOjpFbnRyeSB7IG9yaWdpbkFuZFNpemUua2V5LCBXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNo
ZSwgb3JpZ2luQW5kU2l6ZS52YWx1ZSB9OworICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgZW50cmllcyA9IFdURk1vdmUoZW50cmllcyldICgpIG11dGFibGUg
ewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGVudHJpZXMpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05ldHdvcmtOb3Rp
ZmljYXRpb25NYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTm90aWZp
Y2F0aW9ucy9OZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlci5jcHAKaW5kZXggZjAwYTIxOTNhYTJi
MTM5ODAyYjM2NmE0ZjEyMWM3NmVkZmY4OGYwMy4uYzUxMmYyY2IzMjU0MDQ1NGIwNmRmNzMyNWEz
MWIyYTNjZTFkMGM2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
b3RpZmljYXRpb25zL05ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05vdGlmaWNhdGlvbnMvTmV0d29ya05vdGlmaWNhdGlvbk1h
bmFnZXIuY3BwCkBAIC04Miw5ICs4Miw5IEBAIHZvaWQgTmV0d29ya05vdGlmaWNhdGlvbk1hbmFn
ZXI6OmRlbGV0ZVB1c2hBbmROb3RpZmljYXRpb25SZWdpc3RyYXRpb24oY29uc3QgU2VjCiB2b2lk
IE5ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2VyOjpnZXRPcmlnaW5zV2l0aFB1c2hBbmROb3RpZmlj
YXRpb25QZXJtaXNzaW9ucyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxTZWN1
cml0eU9yaWdpbkRhdGE+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4gcmVwbHlIYW5kbGVyID0gW2NvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChWZWN0b3I8U3RyaW5nPiBv
cmlnaW5TdHJpbmdzKSBtdXRhYmxlIHsKLSAgICAgICAgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0
YT4gb3JpZ2luczsKLSAgICAgICAgZm9yIChhdXRvJiBvcmlnaW5TdHJpbmcgOiBvcmlnaW5TdHJp
bmdzKQotICAgICAgICAgICAgb3JpZ2lucy5hcHBlbmQoU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9t
VVJMKHsgeyB9LCBvcmlnaW5TdHJpbmcgfSkpOworICAgICAgICBhdXRvIG9yaWdpbnMgPSBvcmln
aW5TdHJpbmdzLm1hcChbXShhdXRvJiBvcmlnaW5TdHJpbmcpIHsKKyAgICAgICAgICAgIHJldHVy
biBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21VUkwoeyB7IH0sIG9yaWdpblN0cmluZyB9KTsKKyAg
ICAgICAgfSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUob3JpZ2lucykpOwog
ICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dl
YlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCmluZGV4IGNiOTAxYjZjNThiMTg1OWFlOGJlMmFk
OWRhOTAwMmQ4MjJiODA2MTIuLmMxYjk4NmNmOWY2NjEyNDFmMTAzYTc4MDZjODM2NmRlOGJjNDM2
M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9T
dG9yYWdlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcApAQCAtMjk1LDIwICsyOTUsMTQgQEAgVmVjdG9yPFN0
b3JhZ2VBcmVhSWRlbnRpZmllcj4gU3RvcmFnZU1hbmFnZXI6OmFsbFN0b3JhZ2VBcmVhSWRlbnRp
ZmllcnMoKSBjb25zdAogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgVmVj
dG9yPFN0b3JhZ2VBcmVhSWRlbnRpZmllcj4gaWRlbnRpZmllcnM7Ci0gICAgZm9yIChjb25zdCBh
dXRvJiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UgOiBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZXMudmFs
dWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvIGtleSA6IGxvY2FsU3RvcmFnZU5hbWVzcGFjZS0+
c3RvcmFnZUFyZWFJZGVudGlmaWVycygpKQotICAgICAgICAgICAgaWRlbnRpZmllcnMuYXBwZW5k
KGtleSk7Ci0gICAgfQorICAgIGZvciAoYXV0byYgbG9jYWxTdG9yYWdlTmFtZXNwYWNlIDogbV9s
b2NhbFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQorICAgICAgICBpZGVudGlmaWVycy5hcHBl
bmRWZWN0b3IobG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlQXJlYUlkZW50aWZpZXJzKCkp
OwogCi0gICAgZm9yIChjb25zdCBhdXRvJiB0cmFzaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSA6
IG1fdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkgewotICAgICAgICBm
b3IgKGF1dG8ga2V5IDogdHJhc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VBcmVh
SWRlbnRpZmllcnMoKSkKLSAgICAgICAgICAgIGlkZW50aWZpZXJzLmFwcGVuZChrZXkpOwotICAg
IH0KKyAgICBmb3IgKGF1dG8mIHRyYXNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlIDogbV90cmFu
c2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQorICAgICAgICBpZGVudGlmaWVy
cy5hcHBlbmRWZWN0b3IodHJhc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VBcmVh
SWRlbnRpZmllcnMoKSk7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHNlc3Npb25TdG9yYWdlTmFt
ZXNwYWNlIDogbV9zZXNzaW9uU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpIHsKLSAgICAgICAg
Zm9yIChhdXRvIGtleSA6IHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlQXJlYUlkZW50
aWZpZXJzKCkpCi0gICAgICAgICAgICBpZGVudGlmaWVycy5hcHBlbmQoa2V5KTsKLSAgICB9Cisg
ICAgZm9yIChhdXRvJiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSA6IG1fc2Vzc2lvblN0b3JhZ2VO
YW1lc3BhY2VzLnZhbHVlcygpKQorICAgICAgICBpZGVudGlmaWVycy5hcHBlbmRWZWN0b3Ioc2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VBcmVhSWRlbnRpZmllcnMoKSk7CiAKICAgICBy
ZXR1cm4gaWRlbnRpZmllcnM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9UcmFuc2llbnRMb2NhbFN0b3Jh
Z2VOYW1lc3BhY2UuY3BwCmluZGV4IGVlZWM1NTBlZWY2M2FlNTlhMWVhYjNhYThhNDk3YTMyYzEw
NTA2MjQuLmZiOThlZDM5NDgwOTE2MDY4NzE3MjZhZTA4NmQ1MWYxNTEyZDQ0MDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9UcmFuc2llbnRMb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
V2ViU3RvcmFnZS9UcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuY3BwCkBAIC01NSwxNCAr
NTUsMTEgQEAgU3RvcmFnZUFyZWEmIFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6Z2V0
T3JDcmVhdGVTdG9yYWdlQXJlYShTZWN1cml0eU9yaWcKIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRh
dGE+IFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6b3JpZ2lucygpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgVmVjdG9yPFNlY3VyaXR5T3JpZ2lu
RGF0YT4gb3JpZ2luczsKLQotICAgIGZvciAoY29uc3QgYXV0byYgc3RvcmFnZUFyZWEgOiBtX3N0
b3JhZ2VBcmVhTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmICghc3RvcmFnZUFyZWEtPml0ZW1z
KCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgb3JpZ2lucy5hcHBlbmQoc3RvcmFnZUFyZWEtPnNl
Y3VyaXR5T3JpZ2luKCkpOwotICAgIH0KLQotICAgIHJldHVybiBvcmlnaW5zOworICAgIHJldHVy
biBXVEY6OmNvbXBhY3RNYXAobV9zdG9yYWdlQXJlYU1hcCwgW10oYXV0byYgZW50cnkpIC0+IHN0
ZDo6b3B0aW9uYWw8U2VjdXJpdHlPcmlnaW5EYXRhPiB7CisgICAgICAgIGlmIChlbnRyeS52YWx1
ZS0+aXRlbXMoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgICAgICByZXR1cm4gZW50cnkudmFsdWUtPnNlY3VyaXR5T3JpZ2luKCk7CisgICAgfSk7CiB9
CiAKIHZvaWQgVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpjbGVhclN0b3JhZ2VBcmVh
c01hdGNoaW5nT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgc2VjdXJpdHlPcmlnaW4p
CkBAIC04MiwxMCArNzksOSBAQCB2b2lkIFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6
Y2xlYXJBbGxTdG9yYWdlQXJlYXMoKQogCiBWZWN0b3I8U3RvcmFnZUFyZWFJZGVudGlmaWVyPiBU
cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OnN0b3JhZ2VBcmVhSWRlbnRpZmllcnMoKSBj
b25zdAogewotICAgIFZlY3RvcjxTdG9yYWdlQXJlYUlkZW50aWZpZXI+IGlkZW50aWZpZXJzOwot
ICAgIGZvciAoYXV0byYgc3RvcmFnZUFyZWEgOiBtX3N0b3JhZ2VBcmVhTWFwLnZhbHVlcygpKQot
ICAgICAgICBpZGVudGlmaWVycy5hcHBlbmQoc3RvcmFnZUFyZWEtPmlkZW50aWZpZXIoKSk7Ci0g
ICAgcmV0dXJuIGlkZW50aWZpZXJzOworICAgIHJldHVybiBXVEY6Om1hcChtX3N0b3JhZ2VBcmVh
TWFwLCBbXShhdXRvJiBlbnRyeSkgeworICAgICAgICByZXR1cm4gZW50cnkudmFsdWUtPmlkZW50
aWZpZXIoKTsKKyAgICB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNh
Y2hlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdl
RW5naW5lQ2FjaGUuY3BwCmluZGV4IGRhOWNiOGE1ZGNjMGVkN2Y5ZjRjMmUzZDJmMjc2ODk0YTAx
ZWQxNzQuLjNlMWFlMzEzMDI4YWQwMDNjZDU1ZjgxZTQ2ZTVjYWUwYmYxZWFkZWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVT
dG9yYWdlRW5naW5lQ2FjaGUuY3BwCkBAIC0yMDksOCArMjA5LDkgQEAgdm9pZCBDYWNoZTo6Zmlu
aXNoT3BlbmluZyhDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaywgc3RkOjpvcHRpb25hbDxF
cnJvcj4mJgogewogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlY29yZEluZm9y
bWF0aW9uPj4gcmVjb3JkczsKICAgICBmb3IgKGF1dG8mIHZhbHVlIDogbV9yZWNvcmRzLnZhbHVl
cygpKSB7CisgICAgICAgIHJlY29yZHMucmVzZXJ2ZUNhcGFjaXR5KHJlY29yZHMuc2l6ZSgpICsg
dmFsdWUuc2l6ZSgpKTsKICAgICAgICAgZm9yIChhdXRvJiByZWNvcmQgOiB2YWx1ZSkKLSAgICAg
ICAgICAgIHJlY29yZHMuYXBwZW5kKHJlY29yZCk7CisgICAgICAgICAgICByZWNvcmRzLnVuY2hl
Y2tlZEFwcGVuZChyZWNvcmQpOwogICAgIH0KICAgICBzdGQ6OnNvcnQocmVjb3Jkcy5iZWdpbigp
LCByZWNvcmRzLmVuZCgpLCBbJl0oY29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYgYikgewogICAg
ICAgICByZXR1cm4gYS5nZXQoKS5pbnNlcnRpb25UaW1lIDwgYi5nZXQoKS5pbnNlcnRpb25UaW1l
OwpAQCAtNjgyLDggKzY4Myw5IEBAIFZlY3RvcjxLZXk+IENhY2hlOjprZXlzKCkgY29uc3QKIHsK
ICAgICBWZWN0b3I8S2V5PiBrZXlzOwogICAgIGZvciAoYXV0byYgcmVjb3JkcyA6IG1fcmVjb3Jk
cy52YWx1ZXMoKSkgeworICAgICAgICBrZXlzLnJlc2VydmVDYXBhY2l0eShrZXlzLnNpemUoKSAr
IHJlY29yZHMuc2l6ZSgpKTsKICAgICAgICAgZm9yIChhdXRvJiByZWNvcmQgOiByZWNvcmRzKQot
ICAgICAgICAgICAga2V5cy5hcHBlbmQocmVjb3JkLmtleSk7CisgICAgICAgICAgICBrZXlzLnVu
Y2hlY2tlZEFwcGVuZChyZWNvcmQua2V5KTsKICAgICB9CiAgICAgcmV0dXJuIGtleXM7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3Rv
cmFnZUFyZWEuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0
ZVN0b3JhZ2VBcmVhLmNwcAppbmRleCA0MDlhMzM4OGEwYjhlY2Y5YWI3MTA0OWI3MjlmZGUzOTI3
YzQ4ZWI1Li40MTM2OTQ0YjVmZjg1ZWYyM2ZjZWU0N2VlZDgzMmYxZWQwYjYwNDdlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFy
ZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVT
dG9yYWdlQXJlYS5jcHAKQEAgLTY5LDggKzY5LDkgQEAgU1FMaXRlU3RvcmFnZUFyZWE6OlNRTGl0
ZVN0b3JhZ2VBcmVhKHVuc2lnbmVkIHF1b3RhLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4K
IHsKICAgICBBU1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7CiAKKyAgICBtX2NhY2hlZFN0YXRlbWVu
dHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzdGF0aWNfY2FzdDxzaXplX3Q+KFN0YXRlbWVudFR5
cGU6OkludmFsaWQpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHNp
emVfdD4oU3RhdGVtZW50VHlwZTo6SW52YWxpZCk7ICsraSkKLSAgICAgICAgbV9jYWNoZWRTdGF0
ZW1lbnRzLmFwcGVuZChudWxscHRyKTsKKyAgICAgICAgbV9jYWNoZWRTdGF0ZW1lbnRzLnVuY2hl
Y2tlZEFwcGVuZChudWxscHRyKTsKIH0KIAogdm9pZCBTUUxpdGVTdG9yYWdlQXJlYTo6Y2xvc2Uo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQXBwbGVQYXkvV2ViUGF5bWVudENv
b3JkaW5hdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQXBwbGVQYXkvV2ViUGF5
bWVudENvb3JkaW5hdG9yUHJveHkuY3BwCmluZGV4IDA0YTY5NjgxNzhhNmY3NTk0YzI4MGVmNzMx
ODE5OGNiNjMyYjkyMzAuLmJjY2MwNTUwNzcxNzc5NzY2OGY5YzlkY2YxMDMxMDkxMTFiOThhZWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FwcGxlUGF5L1dlYlBheW1lbnRDb29y
ZGluYXRvclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BcHBsZVBheS9XZWJQ
YXltZW50Q29vcmRpbmF0b3JQcm94eS5jcHAKQEAgLTkzLDkgKzkzLDkgQEAgdm9pZCBXZWJQYXlt
ZW50Q29vcmRpbmF0b3JQcm94eTo6c2hvd1BheW1lbnRVSShXZWJDb3JlOjpQYWdlSWRlbnRpZmll
ciBkZXN0aW5hdGkKIAogICAgIFVSTCBvcmlnaW5hdGluZ1VSTChVUkwoKSwgb3JpZ2luYXRpbmdV
UkxTdHJpbmcpOwogCi0gICAgVmVjdG9yPFVSTD4gbGlua0ljb25VUkxzOwotICAgIGZvciAoY29u
c3QgYXV0byYgbGlua0ljb25VUkxTdHJpbmcgOiBsaW5rSWNvblVSTFN0cmluZ3MpCi0gICAgICAg
IGxpbmtJY29uVVJMcy5hcHBlbmQoVVJMKFVSTCgpLCBsaW5rSWNvblVSTFN0cmluZykpOworICAg
IGF1dG8gbGlua0ljb25VUkxzID0gbGlua0ljb25VUkxTdHJpbmdzLm1hcChbXShhdXRvJiBsaW5r
SWNvblVSTFN0cmluZykgeworICAgICAgICByZXR1cm4gVVJMKFVSTCgpLCBsaW5rSWNvblVSTFN0
cmluZyk7CisgICAgfSk7CiAKICAgICBwbGF0Zm9ybVNob3dQYXltZW50VUkod2ViUGFnZVByb3h5
SUQsIG9yaWdpbmF0aW5nVVJMLCBsaW5rSWNvblVSTHMsIHBheW1lbnRSZXF1ZXN0LCBbdGhpcywg
d2Vha1RoaXMgPSBXZWFrUHRyIHsgKnRoaXMgfV0oYm9vbCByZXN1bHQpIHsKICAgICAgICAgaWYg
KCF3ZWFrVGhpcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElO
YXZpZ2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9u
LmNwcAppbmRleCA4ODQ2NmM0OWVkMGRlMThlMjAzMmNhYTBhMDQ2NDgzOWVhNzQ1MTAxLi40YTg4
OTAzOWU5NGE2MmZhNTkyZjE5NTdmNzZkODU5ZTc5YzlmYzZkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb24uY3BwCkBAIC02MiwxMCArNjIsMTAgQEAgTmF2
aWdhdGlvbjo6TmF2aWdhdGlvbihXZWJOYXZpZ2F0aW9uU3RhdGUmIHN0YXRlLCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmJiByZXEKICAgICA6IG1fbmF2aWdhdGlvbklEKHN0YXRlLmdlbmVyYXRl
TmF2aWdhdGlvbklEKCkpCiAgICAgLCBtX29yaWdpbmFsUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3Qp
KQogICAgICwgbV9jdXJyZW50UmVxdWVzdChtX29yaWdpbmFsUmVxdWVzdCkKKyAgICAsIG1fcmVk
aXJlY3RDaGFpbiB7IG1fb3JpZ2luYWxSZXF1ZXN0LnVybCgpIH0KICAgICAsIG1fZnJvbUl0ZW0o
ZnJvbUl0ZW0pCiAgICAgLCBtX2NsaWVudE5hdmlnYXRpb25BY3Rpdml0eShuYXZpZ2F0aW9uQWN0
aXZpdHlUaW1lb3V0KQogewotICAgIG1fcmVkaXJlY3RDaGFpbi5hcHBlbmQobV9vcmlnaW5hbFJl
cXVlc3QudXJsKCkpOwogfQogCiBOYXZpZ2F0aW9uOjpOYXZpZ2F0aW9uKFdlYk5hdmlnYXRpb25T
dGF0ZSYgc3RhdGUsIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIHRhcmdldEl0ZW0sIFdlYkJhY2tG
b3J3YXJkTGlzdEl0ZW0qIGZyb21JdGVtLCBGcmFtZUxvYWRUeXBlIGJhY2tGb3J3YXJkRnJhbWVM
b2FkVHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2hh
cmVTaGVldC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2hhcmVTaGVldC5t
bQppbmRleCA1NTRhYjgwNjQyN2VjYjljZTgzMGFjYTk3ZmM3ZGRjZGM5ODUzZTE1Li5lMzg4YTNj
MzdkMGY2OTY1ZDc2OTFmMjdiMTc4MGE5MTNmMDRlZTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NoYXJlU2hlZXQubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV0tTaGFyZVNoZWV0Lm1tCkBAIC0xMDAsOSArMTAwLDkgQEAgc3RhdGlj
IHZvaWQgYXBwZW5kRmlsZXNBc1NoYXJlYWJsZVVSTHMoUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5
PiYmIHNoYXJlRGF0YUFycmEKICAgICAgICAgU3RyaW5nIGZpbGVOYW1lOwogICAgICAgICBSZXRh
aW5QdHI8TlNEYXRhPiBmaWxlRGF0YTsKICAgICB9OwotICAgIFZlY3RvcjxGaWxlV3JpdGVUYXNr
PiBmaWxlV3JpdGVUYXNrczsKLSAgICBmb3IgKGF1dG8mIGZpbGUgOiBmaWxlcykKLSAgICAgICAg
ZmlsZVdyaXRlVGFza3MuYXBwZW5kKHsgZmlsZS5maWxlTmFtZS5pc29sYXRlZENvcHkoKSwgZmls
ZS5maWxlRGF0YS0+Y3JlYXRlTlNEYXRhKCkgfSk7CisgICAgYXV0byBmaWxlV3JpdGVUYXNrcyA9
IGZpbGVzLm1hcChbXShhdXRvJiBmaWxlKSB7CisgICAgICAgIHJldHVybiBGaWxlV3JpdGVUYXNr
IHsgZmlsZS5maWxlTmFtZS5pc29sYXRlZENvcHkoKSwgZmlsZS5maWxlRGF0YS0+Y3JlYXRlTlNE
YXRhKCkgfTsKKyAgICB9KTsKIAogICAgIGF1dG8gcXVldWUgPSBXb3JrUXVldWU6OmNyZWF0ZSgi
Y29tLmFwcGxlLldlYktpdC5XS1NoYXJlU2hlZXQuU2hhcmVhYmxlRmlsZVdyaXRlciIpOwogICAg
IHF1ZXVlLT5kaXNwYXRjaChbc2hhcmVEYXRhQXJyYXkgPSBXVEZNb3ZlKHNoYXJlRGF0YUFycmF5
KSwgZmlsZVdyaXRlVGFza3MgPSBXVEZNb3ZlKGZpbGVXcml0ZVRhc2tzKSwgdGVtcG9yYXJ5RGly
ZWN0b3J5ID0gcmV0YWluUHRyKHRlbXBvcmFyeURpcmVjdG9yeSksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCmluZGV4IGYxYzM3
MDZiMDlmZjllMTI4MjFkN2RhM2EyMjViNzBiYTQ2ZGNlMzYuLjU2YTE0ZDhiZjM2ZWQ0NGRhZGJm
MWU0YzQ4NDBhNWUwNjQxNGI4ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCkBAIC02NjYsMTQgKzY2NiwxMiBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6cmVzdG9yZUFwcEhpZ2hsaWdodHNBbmRTY3JvbGxUb0luZGV4KGNvbnN0IFZl
Y3RvcjxSZWY8U2hhcmVkTQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgVmVjdG9yPFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlPiBtZW1vcnlIYW5k
bGVzOwotCi0gICAgZm9yIChhdXRvIGhpZ2hsaWdodCA6IGhpZ2hsaWdodHMpIHsKKyAgICBhdXRv
IG1lbW9yeUhhbmRsZXMgPSBXVEY6OmNvbXBhY3RNYXAoaGlnaGxpZ2h0cywgW10oYXV0byYgaGln
aGxpZ2h0KSAtPiBzdGQ6Om9wdGlvbmFsPFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlPiB7CiAgICAg
ICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgaGlnaGxpZ2h0LT5jcmVh
dGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKLQot
ICAgICAgICBtZW1vcnlIYW5kbGVzLmFwcGVuZChTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSB7IFdU
Rk1vdmUoaGFuZGxlKSwgaGlnaGxpZ2h0LT5zaXplKCkgfSk7Ci0gICAgfQorICAgICAgICBpZiAo
IWhpZ2hsaWdodC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9u
OjpSZWFkT25seSkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICBy
ZXR1cm4gU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgeyBXVEZNb3ZlKGhhbmRsZSksIGhpZ2hsaWdo
dC0+c2l6ZSgpIH07CisgICAgfSk7CiAgICAgCiAgICAgc2V0VXBIaWdobGlnaHRzT2JzZXJ2ZXIo
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUu
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwCmluZGV4IGM2
MWJlZDgxZDA5Mjg0NjMyYmYyOTY1ZWQyYzk5YjBjNmZlNDAxYTMuLjY5ZTUzZDdiZWI4NmNlNmI0
MDZmM2NkYjgzOTJhYjcyYTNmZmM4MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0ZyYW1lTG9hZFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9GcmFt
ZUxvYWRTdGF0ZS5jcHAKQEAgLTkwLDExICs5MCw4IEBAIHZvaWQgRnJhbWVMb2FkU3RhdGU6OmRp
ZEZpbmlzaExvYWQoKQogCiAgICAgbV9zdGF0ZSA9IFN0YXRlOjpGaW5pc2hlZDsKIAotICAgIFZl
Y3RvcjxPYnNlcnZlcio+IG9ic2VydmVyc0NvcHk7Ci0gICAgZm9yIChhdXRvJiBvYnNlcnZlciA6
IG1fb2JzZXJ2ZXJzKQotICAgICAgICBvYnNlcnZlcnNDb3B5LmFwcGVuZCgmb2JzZXJ2ZXIpOwot
ICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlcnNDb3B5KQotICAgICAgICBvYnNlcnZl
ci0+ZGlkRmluaXNoTG9hZCgpOworICAgIGZvciAoYXV0byYgb2JzZXJ2ZXIgOiBjb3B5VG9WZWN0
b3JPZjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPE9ic2VydmVyPj4obV9vYnNlcnZlcnMpKQorICAg
ICAgICBvYnNlcnZlci5nZXQoKS5kaWRGaW5pc2hMb2FkKCk7CiB9CiAKIHZvaWQgRnJhbWVMb2Fk
U3RhdGU6OmRpZEZhaWxMb2FkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCmluZGV4IDM3NDA4MTkzYjBiNzY4MjNj
MDQ1ODFiNGI0ZTkwNmRkNDQwOWE3YWIuLmUzODAxNmYxZGViNzM3MzJkNWE4NWRjMWQ0NmQxM2Rm
MzVhNjkxZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0
d29ya1Byb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcApAQCAtMTg0LDggKzE4NCw4IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpCiAgICAg
cGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVn
YWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgp
KTsKICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlU
b1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0
ZXJBc05vQWNjZXNzKCkpOwogICAgIHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2Jh
bFNldHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7Ci0gICAgZm9yIChhdXRvJiBzY2hl
bWUgOiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJz
KCkpCi0gICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90
b2NvbHMuYXBwZW5kKHNjaGVtZSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJl
ZEZvckN1c3RvbVByb3RvY29scyA9IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3Rv
bVByb3RvY29sSGFuZGxlcnMoKTsKKwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYg
KFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OmNvb2tpZVN0
b3JhZ2VEaXJlY3RvcnkoKTsgIWNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIGlmIChhdXRvIGhhbmRsZSA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZv
clJlYWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0b3J5KSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJv
bGxlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcAppbmRleCBmYTI1NGMyZGFkYzA2MzAyOGRmZDUw
NGQyODkwYTg5MmFlZGFmYjA4Li41YmJlNzM5NjIwNTI3YTgyN2NkNTdmMTY5YWYyZjBjMGM1OTZh
NzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJV
c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCkBAIC0xMTcs
MTEgKzExNywxMSBAQCBVc2VyQ29udGVudENvbnRyb2xsZXJQYXJhbWV0ZXJzIFdlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5OjpwYXJhbWV0ZXJzKCkgY29ucwogICAgIHBhcmFtZXRlcnMuaWRl
bnRpZmllciA9IGlkZW50aWZpZXIoKTsKICAgICAKICAgICBBU1NFUlQocGFyYW1ldGVycy51c2Vy
Q29udGVudFdvcmxkcy5pc0VtcHR5KCkpOwotICAgIGZvciAoY29uc3QgYXV0byYgaWRlbnRpZmll
ciA6IG1fYXNzb2NpYXRlZENvbnRlbnRXb3JsZHMpIHsKKyAgICBwYXJhbWV0ZXJzLnVzZXJDb250
ZW50V29ybGRzID0gV1RGOjptYXAobV9hc3NvY2lhdGVkQ29udGVudFdvcmxkcywgW10oYXV0byYg
aWRlbnRpZmllcikgewogICAgICAgICBhdXRvKiB3b3JsZCA9IEFQSTo6Q29udGVudFdvcmxkOjp3
b3JsZEZvcklkZW50aWZpZXIoaWRlbnRpZmllcik7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHdv
cmxkKTsKLSAgICAgICAgcGFyYW1ldGVycy51c2VyQ29udGVudFdvcmxkcy5hcHBlbmQod29ybGQt
PndvcmxkRGF0YSgpKTsKLSAgICB9CisgICAgICAgIHJldHVybiB3b3JsZC0+d29ybGREYXRhKCk7
CisgICAgfSk7CiAKICAgICBmb3IgKGF1dG8gdXNlclNjcmlwdCA6IG1fdXNlclNjcmlwdHMtPmVs
ZW1lbnRzT2ZUeXBlPEFQSTo6VXNlclNjcmlwdD4oKSkKICAgICAgICAgcGFyYW1ldGVycy51c2Vy
U2NyaXB0cy5hcHBlbmQoeyB1c2VyU2NyaXB0LT5pZGVudGlmaWVyKCksIHVzZXJTY3JpcHQtPmNv
bnRlbnRXb3JsZCgpLmlkZW50aWZpZXIoKSwgdXNlclNjcmlwdC0+dXNlclNjcmlwdCgpIH0pOwpA
QCAtMTI5LDggKzEyOSw5IEBAIFVzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnMgV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnBhcmFtZXRlcnMoKSBjb25zCiAgICAgZm9yIChhdXRv
IHVzZXJTdHlsZVNoZWV0IDogbV91c2VyU3R5bGVTaGVldHMtPmVsZW1lbnRzT2ZUeXBlPEFQSTo6
VXNlclN0eWxlU2hlZXQ+KCkpCiAgICAgICAgIHBhcmFtZXRlcnMudXNlclN0eWxlU2hlZXRzLmFw
cGVuZCh7IHVzZXJTdHlsZVNoZWV0LT5pZGVudGlmaWVyKCksIHVzZXJTdHlsZVNoZWV0LT5jb250
ZW50V29ybGQoKS5pZGVudGlmaWVyKCksIHVzZXJTdHlsZVNoZWV0LT51c2VyU3R5bGVTaGVldCgp
IH0pOwogCi0gICAgZm9yIChhdXRvJiBoYW5kbGVyIDogbV9zY3JpcHRNZXNzYWdlSGFuZGxlcnMu
dmFsdWVzKCkpCi0gICAgICAgIHBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXJzLmFwcGVuZCh7IGhh
bmRsZXItPmlkZW50aWZpZXIoKSwgaGFuZGxlci0+d29ybGQoKS5pZGVudGlmaWVyKCksIGhhbmRs
ZXItPm5hbWUoKSB9KTsKKyAgICBwYXJhbWV0ZXJzLm1lc3NhZ2VIYW5kbGVycyA9IFdURjo6bWFw
KG1fc2NyaXB0TWVzc2FnZUhhbmRsZXJzLCBbXShhdXRvIGVudHJ5KSB7CisgICAgICAgIHJldHVy
biBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlckRhdGEgeyBlbnRyeS52YWx1ZS0+aWRlbnRpZmllcigp
LCBlbnRyeS52YWx1ZS0+d29ybGQoKS5pZGVudGlmaWVyKCksIGVudHJ5LnZhbHVlLT5uYW1lKCkg
fTsKKyAgICB9KTsKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgcGFyYW1l
dGVycy5jb250ZW50UnVsZUxpc3RzID0gY29udGVudFJ1bGVMaXN0RGF0YSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRv
ck1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24v
QXV0aGVudGljYXRvck1hbmFnZXIuY3BwCmluZGV4IDkzNDgwZWQ1Y2IzOWE2MWNiY2Y2NzM1MWUw
YTg4MGVhMDlmZTQ0NzYuLjY1NzJmNTM5NTk4ZWY0MWRkMTAzMDVhY2VlYzhmMTg3ZDhkNTI1MjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0F1
dGhlbnRpY2F0b3JNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJB
dXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHAKQEAgLTQxNiwxMSArNDE2LDEx
IEBAIHZvaWQgQXV0aGVudGljYXRvck1hbmFnZXI6OnN0YXJ0RGlzY292ZXJ5KGNvbnN0IFRyYW5z
cG9ydFNldCYgdHJhbnNwb3J0cykKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwog
ICAgIEFTU0VSVChtX3NlcnZpY2VzLmlzRW1wdHkoKSAmJiB0cmFuc3BvcnRzLnNpemUoKSA8PSBt
YXhUcmFuc3BvcnROdW1iZXIpOwotICAgIGZvciAoYXV0byYgdHJhbnNwb3J0IDogdHJhbnNwb3J0
cykgeworICAgIG1fc2VydmljZXMgPSBXVEY6Om1hcCh0cmFuc3BvcnRzLCBbdGhpc10oYXV0byYg
dHJhbnNwb3J0KSB7CiAgICAgICAgIGF1dG8gc2VydmljZSA9IGNyZWF0ZVNlcnZpY2UodHJhbnNw
b3J0LCAqdGhpcyk7CiAgICAgICAgIHNlcnZpY2UtPnN0YXJ0RGlzY292ZXJ5KCk7Ci0gICAgICAg
IG1fc2VydmljZXMuYXBwZW5kKFdURk1vdmUoc2VydmljZSkpOwotICAgIH0KKyAgICAgICAgcmV0
dXJuIHNlcnZpY2U7CisgICAgfSk7CiB9CiAKIHZvaWQgQXV0aGVudGljYXRvck1hbmFnZXI6Omlu
aXRUaW1lT3V0VGltZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
QmFja0ZvcndhcmRMaXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkJhY2tGb3J3
YXJkTGlzdC5jcHAKaW5kZXggYzc0MzQzZTY1Yjg4OWY3ODY5ZGM4Y2NhMzQwNTFiOGIyNjU0MDJi
Ni4uZGVjOWU4MzkyMjM2OGZlNjE1NWUwM2Q2OWEzZjM3ZDlkYmYwMTc3OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwCkBAIC0zNDAsMTYgKzM0
MCwxMSBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6cmVtb3ZlQWxsSXRlbXMoKQogCiAgICAg
TE9HKEJhY2tGb3J3YXJkLCAiKEJhY2svRm9yd2FyZCkgV2ViQmFja0ZvcndhcmRMaXN0ICVwIHJl
bW92ZUFsbEl0ZW1zIChoYXMgJXp1IG9mIHRoZW0pIiwgdGhpcywgbV9lbnRyaWVzLnNpemUoKSk7
CiAKLSAgICBWZWN0b3I8UmVmPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiByZW1vdmVkSXRlbXM7
Ci0KLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9lbnRyaWVzKSB7CisgICAgZm9yIChhdXRvJiBl
bnRyeSA6IG1fZW50cmllcykKICAgICAgICAgZGlkUmVtb3ZlSXRlbShlbnRyeSk7Ci0gICAgICAg
IHJlbW92ZWRJdGVtcy5hcHBlbmQoV1RGTW92ZShlbnRyeSkpOwotICAgIH0KIAotICAgIG1fZW50
cmllcy5jbGVhcigpOwogICAgIG1fY3VycmVudEluZGV4ID0gc3RkOjpudWxsb3B0OwotICAgIG1f
cGFnZS0+ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KG51bGxwdHIsIFdURk1vdmUocmVtb3ZlZEl0
ZW1zKSk7CisgICAgbV9wYWdlLT5kaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QobnVsbHB0ciwgc3Rk
OjpleGNoYW5nZShtX2VudHJpZXMsIHsgfSkpOwogfQogCiB2b2lkIFdlYkJhY2tGb3J3YXJkTGlz
dDo6Y2xlYXIoKQpAQCAtMzYzLDIxICszNTgsMTcgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3Q6
OmNsZWFyKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPFdlYkJhY2tGb3J3YXJkTGlz
dEl0ZW0+IGN1cnJlbnRJdGVtID0gdGhpcy0+Y3VycmVudEl0ZW0oKTsKLSAgICBWZWN0b3I8UmVm
PFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiByZW1vdmVkSXRlbXM7CiAKICAgICBpZiAoIWN1cnJl
bnRJdGVtKSB7CiAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGV2ZXIgaGF2ZSBubyBjdXJyZW50
IGl0ZW0gaWYgd2UgYWxzbyBoYXZlIG5vIGN1cnJlbnQgaXRlbSBpbmRleC4KICAgICAgICAgQVNT
RVJUKCFtX2N1cnJlbnRJbmRleCk7CiAKICAgICAgICAgLy8gQnV0IGp1c3QgaW4gY2FzZSBpdCBk
b2VzIGhhcHBlbiBpbiBwcmFjdGljZSB3ZSBzaG91bGQgZ2V0IGJhY2sgaW50byBhIGNvbnNpc3Rl
bnQgc3RhdGUgbm93LgotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkg
ewotICAgICAgICAgICAgZGlkUmVtb3ZlSXRlbShtX2VudHJpZXNbaV0pOwotICAgICAgICAgICAg
cmVtb3ZlZEl0ZW1zLmFwcGVuZChXVEZNb3ZlKG1fZW50cmllc1tpXSkpOwotICAgICAgICB9Cisg
ICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2VudHJpZXMpCisgICAgICAgICAgICBkaWRSZW1v
dmVJdGVtKGVudHJ5KTsKIAotICAgICAgICBtX2VudHJpZXMuY2xlYXIoKTsKICAgICAgICAgbV9j
dXJyZW50SW5kZXggPSBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIG1fcGFnZS0+ZGlkQ2hhbmdlQmFj
a0ZvcndhcmRMaXN0KG51bGxwdHIsIFdURk1vdmUocmVtb3ZlZEl0ZW1zKSk7CisgICAgICAgIG1f
cGFnZS0+ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KG51bGxwdHIsIHN0ZDo6ZXhjaGFuZ2UobV9l
bnRyaWVzLCB7IH0pKTsKIAogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzg3LDYgKzM3OCw3
IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjpjbGVhcigpCiAgICAgICAgICAgICBkaWRSZW1v
dmVJdGVtKG1fZW50cmllc1tpXSk7CiAgICAgfQogCisgICAgVmVjdG9yPFJlZjxXZWJCYWNrRm9y
d2FyZExpc3RJdGVtPj4gcmVtb3ZlZEl0ZW1zOwogICAgIHJlbW92ZWRJdGVtcy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHNpemUgLSAxKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewogICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggJiYgaSAhPSAqbV9jdXJyZW50SW5k
ZXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKaW5kZXggZmEx
NzQyY2YzMmRhOTk1MjczMjNkZmM3YzhiZjBhNzkwNjMwNDFmZS4uNjFiZDMwYTM2NDE0NzNjNWRi
MmM1NzQzMGU5M2NiN2UyNjYzYWQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQb29sLmNwcApAQCAtODQ5LDEwICs4NDksOSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpp
bml0aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MsIFdlYnNpdGVE
YQogICAgICAgICAgICAgcGFyYW1ldGVycy5pbmplY3RlZEJ1bmRsZVBhdGhFeHRlbnNpb25IYW5k
bGUgPSBXVEZNb3ZlKCpoYW5kbGUpOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcGF0aCA6IG1f
cmVzb2x2ZWRQYXRocy5hZGRpdGlvbmFsV2ViUHJvY2Vzc1NhbmRib3hFeHRlbnNpb25QYXRocykg
ewotICAgICAgICBpZiAoYXV0byBoYW5kbGUgPSAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFu
ZGxlV2l0aG91dFJlc29sdmluZ1BhdGgocGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVh
ZE9ubHkpKQotICAgICAgICAgICAgcGFyYW1ldGVycy5hZGRpdGlvbmFsU2FuZGJveEV4dGVuc2lv
bkhhbmRsZXMuYXBwZW5kKFdURk1vdmUoKmhhbmRsZSkpOwotICAgIH0KKyAgICBwYXJhbWV0ZXJz
LmFkZGl0aW9uYWxTYW5kYm94RXh0ZW5zaW9uSGFuZGxlcyA9IFdURjo6Y29tcGFjdE1hcChtX3Jl
c29sdmVkUGF0aHMuYWRkaXRpb25hbFdlYlByb2Nlc3NTYW5kYm94RXh0ZW5zaW9uUGF0aHMsIFtd
KGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhh
bmRsZVdpdGhvdXRSZXNvbHZpbmdQYXRoKHBhdGgsIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJl
YWRPbmx5KTsKKyAgICB9KTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgc2V0SmF2
YVNjcmlwdENvbmZpZ3VyYXRpb25GaWxlRW5hYmxlZEZyb21EZWZhdWx0cygpOwpAQCAtMTg3MCwx
NCArMTg2OSw5IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZVByb2Nlc3NGcm9tT3JpZ2lu
Q2FjaGVTZXQoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQogICAgIExPRyhQcm9jZXNzU3dhcHBp
bmcsICIoUHJvY2Vzc1N3YXBwaW5nKSBSZW1vdmluZyBwcm9jZXNzIHdpdGggcGlkICVpIGZyb20g
dGhlIG9yaWdpbiBjYWNoZSBzZXQiLCBwcm9jZXNzLnByb2Nlc3NJZGVudGlmaWVyKCkpOwogCiAg
ICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIHZlcnkgaW5lZmZpY2llbnQgYXMgdGhlIG51bWJlciBv
ZiByZW1lbWJlcmVkIG9yaWdpbnMgYW5kIHByb2Nlc3NlcyBncm93cwotICAgIFZlY3RvcjxXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gcmVnaXN0cmFibGVEb21haW5zVG9SZW1vdmU7Ci0gICAg
Zm9yIChhdXRvIGVudHJ5IDogbV9zd2FwcGVkUHJvY2Vzc2VzUGVyUmVnaXN0cmFibGVEb21haW4p
IHsKLSAgICAgICAgaWYgKGVudHJ5LnZhbHVlID09ICZwcm9jZXNzKQotICAgICAgICAgICAgcmVn
aXN0cmFibGVEb21haW5zVG9SZW1vdmUuYXBwZW5kKGVudHJ5LmtleSk7Ci0gICAgfQotCi0gICAg
Zm9yIChhdXRvJiByZWdpc3RyYWJsZURvbWFpbiA6IHJlZ2lzdHJhYmxlRG9tYWluc1RvUmVtb3Zl
KQotICAgICAgICBtX3N3YXBwZWRQcm9jZXNzZXNQZXJSZWdpc3RyYWJsZURvbWFpbi5yZW1vdmUo
cmVnaXN0cmFibGVEb21haW4pOworICAgIG1fc3dhcHBlZFByb2Nlc3Nlc1BlclJlZ2lzdHJhYmxl
RG9tYWluLnJlbW92ZUlmKFsmXShhdXRvJiBlbnRyeSkgeworICAgICAgICByZXR1cm4gZW50cnku
dmFsdWUgPT0gJnByb2Nlc3M7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBy
b2Nlc3NGb3JOYXZpZ2F0aW9uKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgQVBJOjpOYXZpZ2F0
aW9uJiBuYXZpZ2F0aW9uLCBSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmIHNvdXJjZVByb2Nlc3MsIGNv
bnN0IFVSTCYgc291cmNlVVJMLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nlc3NT
d2FwUmVxdWVzdGVkQnlDbGllbnQsIFdlYlByb2Nlc3NQcm94eTo6Q2FwdGl2ZVBvcnRhbE1vZGUg
Y2FwdGl2ZVBvcnRhbE1vZGUsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgUmVmPFdl
YnNpdGVEYXRhU3RvcmU+JiYgZGF0YVN0b3JlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZjxX
ZWJQcm9jZXNzUHJveHk+JiYsIFN1c3BlbmRlZFBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
cm94eS5jcHAKaW5kZXggYjEyODYwZGY1MTBiYzRlM2RmYmI3ZTNmYzkyMGI1ZDA0MmI4NDMyMS4u
MzY4YTM5NTg3ZGEzM2RlNjRjMWI4OWQwZTYzOGQzOGI4OGQ3YTE3YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCkBAIC05MzYsOCArOTM2LDkgQEAgdm9p
ZCBXZWJQcm9jZXNzUHJveHk6OnByb2Nlc3NEaWRUZXJtaW5hdGVPckZhaWxlZFRvTGF1bmNoKFBy
b2Nlc3NUZXJtaW5hdGlvblJlYXMKIAogICAgIC8vIFRoZXJlIGlzIGEgbmVzdGVkIHRyYW5zYWN0
aW9uIGluIFdlYlBhZ2VQcm94eTo6cmVzZXRTdGF0ZUFmdGVyUHJvY2Vzc0V4aXRlZCgpIHRoYXQg
d2UgZG9uJ3Qgd2FudCB0byBjb21taXQgYmVmb3JlIHRoZSBjbGllbnQgY2FsbCBiZWxvdyAoZGlz
cGF0Y2hQcm9jZXNzRGlkVGVybWluYXRlKS4KICAgICBWZWN0b3I8UGFnZUxvYWRTdGF0ZTo6VHJh
bnNhY3Rpb24+IHBhZ2VMb2FkU3RhdGVUcmFuc2FjdGlvbnM7CisgICAgcGFnZUxvYWRTdGF0ZVRy
YW5zYWN0aW9ucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBhZ2VzLnNpemUoKSk7CiAgICAgZm9y
IChhdXRvJiBwYWdlIDogcGFnZXMpIHsKLSAgICAgICAgcGFnZUxvYWRTdGF0ZVRyYW5zYWN0aW9u
cy5hcHBlbmQocGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnRyYW5zYWN0aW9uKCkpOworICAgICAgICBw
YWdlTG9hZFN0YXRlVHJhbnNhY3Rpb25zLnVuY2hlY2tlZEFwcGVuZChwYWdlLT5wYWdlTG9hZFN0
YXRlKCkudHJhbnNhY3Rpb24oKSk7CiAgICAgICAgIHBhZ2UtPnJlc2V0U3RhdGVBZnRlclByb2Nl
c3NUZXJtaW5hdGlvbihyZWFzb24pOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCBiMzZk
OWE3NGI5YTE3NWEwODE2YjdhMmUxNGYxMzlkYjVlZjU2ZTZkLi5lOWUwMjBlYWQzMDk5ODVmZDY0
OTkxODFmYzY4MmYwNjU4NWMxNjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtNDMxLDggKzQzMSwx
MCBAQCBwcml2YXRlOgogICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBl
OjpEaXNrQ2FjaGUpKSB7CiAgICAgICAgIG1fcXVldWUtPmRpc3BhdGNoKFttZWRpYUNhY2hlRGly
ZWN0b3J5ID0gbV9jb25maWd1cmF0aW9uLT5tZWRpYUNhY2hlRGlyZWN0b3J5KCkuaXNvbGF0ZWRD
b3B5KCksIGNhbGxiYWNrQWdncmVnYXRvcl0gewogICAgICAgICAgICAgV2Vic2l0ZURhdGEgd2Vi
c2l0ZURhdGE7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQ6Om9yaWdpbnNJbk1lZGlhQ2FjaGUobWVkaWFDYWNoZURpcmVjdG9yeSkpCi0g
ICAgICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmQoV2Vic2l0ZURhdGE6OkVu
dHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSwgMCB9KTsKKyAgICAgICAg
ICAgIGF1dG8gb3JpZ2lucyA9IFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Om9yaWdpbnNJbk1l
ZGlhQ2FjaGUobWVkaWFDYWNoZURpcmVjdG9yeSk7CisgICAgICAgICAgICB3ZWJzaXRlRGF0YS5l
bnRyaWVzID0gV1RGOjptYXAob3JpZ2lucywgW10oYXV0byYgb3JpZ2luKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBl
OjpEaXNrQ2FjaGUsIDAgfTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgY2FsbGJhY2tB
Z2dyZWdhdG9yLT5hZGRXZWJzaXRlRGF0YShXVEZNb3ZlKHdlYnNpdGVEYXRhKSk7CiAgICAgICAg
IH0pOwogICAgIH0KQEAgLTQ2OSw4ICs0NzEsOSBAQCBwcml2YXRlOgogICAgIGlmIChkYXRhVHlw
ZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0KSkgewogICAgICAg
ICBtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdlLT5nZXREZXZpY2VJZEhhc2hTYWx0T3JpZ2lucyhb
Y2FsbGJhY2tBZ2dyZWdhdG9yXShhdXRvJiYgb3JpZ2lucykgewogICAgICAgICAgICAgV2Vic2l0
ZURhdGEgd2Vic2l0ZURhdGE7Ci0gICAgICAgICAgICB3aGlsZSAoIW9yaWdpbnMuaXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRh
OjpFbnRyeSB7IG9yaWdpbnMudGFrZUFueSgpLCBXZWJzaXRlRGF0YVR5cGU6OkRldmljZUlkSGFz
aFNhbHQsIDAgfSk7CisgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzID0gV1RGOjptYXAo
b3JpZ2lucywgW10oYXV0byYgb3JpZ2luKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYnNp
dGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0
LCAwIH07CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+
YWRkV2Vic2l0ZURhdGEoV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICB9KTsKICAgICB9
CkBAIC00NzksMTAgKzQ4MiwxMSBAQCBwcml2YXRlOgogICAgICAgICBtX3F1ZXVlLT5kaXNwYXRj
aChbZmV0Y2hPcHRpb25zLCBhcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5ID0gbV9jb25maWd1cmF0
aW9uLT5hcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KCkuaXNvbGF0ZWRDb3B5KCksIGFwcGxpY2F0
aW9uQ2FjaGVGbGF0RmlsZVN1YmRpcmVjdG9yeU5hbWUgPSBtX2NvbmZpZ3VyYXRpb24tPmFwcGxp
Y2F0aW9uQ2FjaGVGbGF0RmlsZVN1YmRpcmVjdG9yeU5hbWUoKS5pc29sYXRlZENvcHkoKSwgY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7CiAgICAgICAgICAgICBhdXRvIHN0b3JhZ2UgPSBXZWJDb3JlOjpB
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y3JlYXRlKGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3Rvcnks
IGFwcGxpY2F0aW9uQ2FjaGVGbGF0RmlsZVN1YmRpcmVjdG9yeU5hbWUpOwogICAgICAgICAgICAg
V2Vic2l0ZURhdGEgd2Vic2l0ZURhdGE7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6
IHN0b3JhZ2UtPm9yaWdpbnNXaXRoQ2FjaGUoKSkgeworICAgICAgICAgICAgYXV0byBvcmlnaW5z
ID0gc3RvcmFnZS0+b3JpZ2luc1dpdGhDYWNoZSgpOworICAgICAgICAgICAgd2Vic2l0ZURhdGEu
ZW50cmllcyA9IFdURjo6bWFwKG9yaWdpbnMsIFsmXShhdXRvJiBvcmlnaW4pIHsKICAgICAgICAg
ICAgICAgICB1aW50NjRfdCBzaXplID0gZmV0Y2hPcHRpb25zLmNvbnRhaW5zKFdlYnNpdGVEYXRh
RmV0Y2hPcHRpb246OkNvbXB1dGVTaXplcykgPyBzdG9yYWdlLT5kaXNrVXNhZ2VGb3JPcmlnaW4o
b3JpZ2luKSA6IDA7Ci0gICAgICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmQo
V2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6Ok9mZmxpbmVXZWJB
cHBsaWNhdGlvbkNhY2hlLCBzaXplIH0pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJldHVybiBXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6T2Zm
bGluZVdlYkFwcGxpY2F0aW9uQ2FjaGUsIHNpemUgfTsKKyAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRXZWJzaXRlRGF0YShXVEZNb3ZlKHdlYnNpdGVE
YXRhKSk7CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTQ5MCw4ICs0OTQsOSBAQCBwcml2YXRlOgog
ICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpXZWJTUUxEYXRhYmFz
ZXMpICYmIGlzUGVyc2lzdGVudCgpKSB7CiAgICAgICAgIG1fcXVldWUtPmRpc3BhdGNoKFt3ZWJT
UUxEYXRhYmFzZURpcmVjdG9yeSA9IG1fY29uZmlndXJhdGlvbi0+d2ViU1FMRGF0YWJhc2VEaXJl
Y3RvcnkoKS5pc29sYXRlZENvcHkoKSwgY2FsbGJhY2tBZ2dyZWdhdG9yXSgpIHsKICAgICAgICAg
ICAgIFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhOwotICAgICAgICAgICAgZm9yIChhdXRvJiBvcmln
aW4gOiBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXJXaXRoRGF0YWJhc2VQYXRoKHdl
YlNRTERhdGFiYXNlRGlyZWN0b3J5KS0+b3JpZ2lucygpKQotICAgICAgICAgICAgICAgIHdlYnNp
dGVEYXRhLmVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0
ZURhdGFUeXBlOjpXZWJTUUxEYXRhYmFzZXMsIDAgfSk7CisgICAgICAgICAgICB3ZWJzaXRlRGF0
YS5lbnRyaWVzID0gV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyV2l0aERhdGFiYXNl
UGF0aCh3ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSktPm9yaWdpbnMoKS5tYXAoW10oYXV0byYgb3Jp
Z2luKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdp
biwgV2Vic2l0ZURhdGFUeXBlOjpXZWJTUUxEYXRhYmFzZXMsIDAgfTsKKyAgICAgICAgICAgIH0p
OwogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRXZWJzaXRlRGF0YShXVEZNb3Zl
KHdlYnNpdGVEYXRhKSk7CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTQ5OSw4ICs1MDQsOSBAQCBw
cml2YXRlOgogICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpNZWRp
YUtleXMpICYmIGlzUGVyc2lzdGVudCgpKSB7CiAgICAgICAgIG1fcXVldWUtPmRpc3BhdGNoKFtt
ZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5ID0gbV9jb25maWd1cmF0aW9uLT5tZWRpYUtleXNTdG9y
YWdlRGlyZWN0b3J5KCkuaXNvbGF0ZWRDb3B5KCksIGNhbGxiYWNrQWdncmVnYXRvcl0gewogICAg
ICAgICAgICAgV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGE7Ci0gICAgICAgICAgICBmb3IgKGF1dG8m
IG9yaWdpbiA6IG1lZGlhS2V5T3JpZ2lucyhtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KSkKLSAg
ICAgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6RW50
cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6TWVkaWFLZXlzLCAwIH0pOworICAgICAgICAg
ICAgd2Vic2l0ZURhdGEuZW50cmllcyA9IG1lZGlhS2V5T3JpZ2lucyhtZWRpYUtleXNTdG9yYWdl
RGlyZWN0b3J5KS5tYXAoW10oYXV0byYgb3JpZ2luKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpNZWRpYUtleXMs
IDAgfTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5h
ZGRXZWJzaXRlRGF0YShXVEZNb3ZlKHdlYnNpdGVEYXRhKSk7CiAgICAgICAgIH0pOwogICAgIH0K
QEAgLTY2OCw3ICs2NzQsNyBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0
aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQogCiAgICAgZm9yIChj
b25zdCBhdXRvJiBkYXRhUmVjb3JkIDogZGF0YVJlY29yZHMpIHsKICAgICAgICAgZm9yIChhdXRv
JiBvcmlnaW4gOiBkYXRhUmVjb3JkLm9yaWdpbnMpCi0gICAgICAgICAgICBvcmlnaW5zLmFwcGVu
ZChvcmlnaW4pOworICAgICAgICAgICAgb3JpZ2lucy51bmNoZWNrZWRBcHBlbmQob3JpZ2luKTsK
ICAgICB9CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IFJlbW92YWxDYWxsYmFja0Fn
Z3JlZ2F0b3I6OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwpAQCAt
NzA4LDEyICs3MTQsMTMgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlv
blNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgY29uc3QgVmUKICAgICAgICAgICAgIFZl
Y3RvcjxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gcmVnaXN0cmFibGVEb21haW5zOwogICAg
ICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBkYXRhUmVjb3JkIDogZGF0YVJlY29yZHMpIHsKICAg
ICAgICAgICAgICAgICBmb3IgKGF1dG8mIGhvc3ROYW1lIDogZGF0YVJlY29yZC5jb29raWVIb3N0
TmFtZXMpCi0gICAgICAgICAgICAgICAgICAgIGNvb2tpZUhvc3ROYW1lcy5hcHBlbmQoaG9zdE5h
bWUpOworICAgICAgICAgICAgICAgICAgICBjb29raWVIb3N0TmFtZXMudW5jaGVja2VkQXBwZW5k
KGhvc3ROYW1lKTsKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGhvc3ROYW1lIDogZGF0YVJl
Y29yZC5IU1RTQ2FjaGVIb3N0TmFtZXMpCi0gICAgICAgICAgICAgICAgICAgIEhTVFNDYWNoZUhv
c3ROYW1lcy5hcHBlbmQoaG9zdE5hbWUpOworICAgICAgICAgICAgICAgICAgICBIU1RTQ2FjaGVI
b3N0TmFtZXMudW5jaGVja2VkQXBwZW5kKGhvc3ROYW1lKTsKICNpZiBFTkFCTEUoSU5URUxMSUdF
TlRfVFJBQ0tJTkdfUFJFVkVOVElPTikKKyAgICAgICAgICAgICAgICByZWdpc3RyYWJsZURvbWFp
bnMucmVzZXJ2ZUNhcGFjaXR5KHJlZ2lzdHJhYmxlRG9tYWlucy5zaXplKCkgKyBkYXRhUmVjb3Jk
LnJlc291cmNlTG9hZFN0YXRpc3RpY3NSZWdpc3RyYWJsZURvbWFpbnMuc2l6ZSgpKTsKICAgICAg
ICAgICAgICAgICBmb3IgKGF1dG8mIHJlZ2lzdHJhYmxlRG9tYWluIDogZGF0YVJlY29yZC5yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUmVnaXN0cmFibGVEb21haW5zKQotICAgICAgICAgICAgICAgICAg
ICByZWdpc3RyYWJsZURvbWFpbnMuYXBwZW5kKHJlZ2lzdHJhYmxlRG9tYWluKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmVnaXN0cmFibGVEb21haW5zLnVuY2hlY2tlZEFwcGVuZChyZWdpc3RyYWJs
ZURvbWFpbik7CiAjZW5kaWYKICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1RleHRDaGVja2VySU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1RleHRDaGVja2VySU9TLm1tCmluZGV4IGZhM2JjNTBiMjRmYWYyZWU1ZmVlNzQ2
ZDJiZWM4MDRhYTRhZmI3MmMuLmMyZGIxMjgwZDdiNTIzNDgwZTRjNmIyMWIxZmVmZmZhNjZmMjZl
M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklP
Uy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvVGV4dENoZWNrZXJJT1MubW0K
QEAgLTM0LDYgKzM0LDcgQEAKICNpbXBvcnQgPHd0Zi9IYXNoTWFwLmg+CiAjaW1wb3J0IDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0
Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTI0MCwxMiArMjQxLDEzIEBAIFZlY3RvcjxUZXh0Q2hl
Y2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChTcGVsbERvY3Vt
ZW50VGFnIHNwCiAgICAgICAgICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAg
ICAgICAgICAgICAgICByZXN1bHQudHlwZSA9IFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nOwog
ICAgICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJhbmdlOwotICAgICAgICAgICAg
ICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBl
bmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0VHlwZSA9
PSBOU1RleHRDaGVja2luZ1R5cGVHcmFtbWFyICYmIGNoZWNraW5nVHlwZXMuY29udGFpbnMoVGV4
dENoZWNraW5nVHlwZTo6R3JhbW1hcikpIHsKICAgICAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdS
ZXN1bHQgcmVzdWx0OwogICAgICAgICAgICAgICAgIE5TQXJyYXkgKmRldGFpbHMgPSBbaW5jb21p
bmdSZXN1bHQgZ3JhbW1hckRldGFpbHNdOwogICAgICAgICAgICAgICAgIHJlc3VsdC50eXBlID0g
VGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcjsKICAgICAgICAgICAgICAgICByZXN1bHQucmFuZ2Ug
PSByZXN1bHRSYW5nZTsKKyAgICAgICAgICAgICAgICByZXN1bHQuZGV0YWlscy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KGRldGFpbHMuY291bnQpOwogICAgICAgICAgICAgICAgIGZvciAoTlNEaWN0
aW9uYXJ5ICppbmNvbWluZ0RldGFpbCBpbiBkZXRhaWxzKSB7CiAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChpbmNvbWluZ0RldGFpbCk7CiAgICAgICAgICAgICAgICAgICAgIEdyYW1tYXJEZXRh
aWwgZGV0YWlsOwpAQCAtMjU5LDEzICsyNjEsMTAgQEAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3Vs
dD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFNwZWxsRG9jdW1lbnRUYWcgc3AK
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGRldGFpbC5yYW5nZSA9
IGRldGFpbE5TUmFuZ2U7CiAgICAgICAgICAgICAgICAgICAgIGRldGFpbC51c2VyRGVzY3JpcHRp
b24gPSBbaW5jb21pbmdEZXRhaWwgb2JqZWN0Rm9yS2V5OkAiTlNHcmFtbWFyVXNlckRlc2NyaXB0
aW9uIl07Ci0gICAgICAgICAgICAgICAgICAgIE5TQXJyYXkgKmd1ZXNzZXMgPSBbaW5jb21pbmdE
ZXRhaWwgb2JqZWN0Rm9yS2V5OkAiTlNHcmFtbWFyQ29ycmVjdGlvbnMiXTsKLSAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGZvciAoTlNTdHJpbmcgKmd1ZXNzIGluIGd1
ZXNzZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWwuZ3Vlc3Nlcy5hcHBlbmQoZ3Vl
c3MpOwotICAgICAgICAgICAgICAgICAgICByZXN1bHQuZGV0YWlscy5hcHBlbmQoZGV0YWlsKTsK
KyAgICAgICAgICAgICAgICAgICAgZGV0YWlsLmd1ZXNzZXMgPSBtYWtlVmVjdG9yPFN0cmluZz4o
W2luY29taW5nRGV0YWlsIG9iamVjdEZvcktleTpAIk5TR3JhbW1hckNvcnJlY3Rpb25zIl0pOwor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQuZGV0YWlscy51bmNoZWNrZWRBcHBlbmQoZGV0YWls
KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVz
dWx0KTsKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFzc2lzdGFudC5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0YW50Lm1tCmluZGV4IGM5YWUx
YTY2Nzc3MWIyNjEwOTU4NTRlYWU1OWUyODVhYjc1MmY2N2IuLjQ1ZGQyZTEzNGM0ZDg3OGY2NWIx
NmY5ZGY0NGQ2MTQwMTM1OWZiYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0YW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0YW50Lm1tCkBAIC0yMDcsMTIgKzIwNywxMSBAQCAt
IChDR1JlY3QpcHJlc2VudGF0aW9uUmVjdEZvckVsZW1lbnRVc2luZ0Nsb3Nlc3RJbmRpY2F0ZWRS
ZWN0CiAKICAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHRvdWNoTG9jYXRpb24gPSBfcG9zaXRpb25J
bmZvcm1hdGlvbi0+cmVxdWVzdC5wb2ludDsKICAgICBXZWJDb3JlOjpGbG9hdFBvaW50IGxpbmtF
bGVtZW50TG9jYXRpb24gPSBpbmRpY2F0b3IudGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29y
ZGluYXRlcy5sb2NhdGlvbigpOwotICAgIFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IGluZGlj
YXRlZFJlY3RzOwotICAgIGZvciAoYXV0byByZWN0IDogaW5kaWNhdG9yLnRleHRSZWN0c0luQm91
bmRpbmdSZWN0Q29vcmRpbmF0ZXMpIHsKKyAgICBhdXRvIGluZGljYXRlZFJlY3RzID0gaW5kaWNh
dG9yLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMubWFwKFsmXShhdXRvIHJlY3Qp
IHsKICAgICAgICAgcmVjdC5pbmZsYXRlKDIpOwogICAgICAgICByZWN0Lm1vdmVCeShsaW5rRWxl
bWVudExvY2F0aW9uKTsKLSAgICAgICAgaW5kaWNhdGVkUmVjdHMuYXBwZW5kKHJlY3QpOwotICAg
IH0KKyAgICAgICAgcmV0dXJuIHJlY3Q7CisgICAgfSk7CiAKICAgICBmb3IgKGNvbnN0IGF1dG8m
IHBhdGggOiBXZWJDb3JlOjpQYXRoVXRpbGl0aWVzOjpwYXRoc1dpdGhTaHJpbmtXcmFwcGVkUmVj
dHMoaW5kaWNhdGVkUmVjdHMsIDApKSB7CiAgICAgICAgIGF1dG8gYm91bmRpbmdSZWN0ID0gcGF0
aC5mYXN0Qm91bmRpbmdSZWN0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvVGV4dENoZWNrZXJNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvVGV4
dENoZWNrZXJNYWMubW0KaW5kZXggMTZkNjgzOGU1NDhlMDQzMmZiZDE4ZjhkNGQyYWRlMWMyYzEw
OGY2ZS4uZWNlMmUzZTI0NTMxNWVlNzFhZDk3OTdmYTZjYzgwYjQyOTMzMGQxMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbQpAQCAtMzQ0LDEyICsz
NDQsMTMgQEAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4
dE9mUGFyYWdyYXBoKFNwZWxsRG9jdW1lbnRUYWcgc3AKICAgICAgICAgICAgIFRleHRDaGVja2lu
Z1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICByZXN1bHQudHlwZSA9IFRleHRDaGVja2luZ1R5
cGU6OlNwZWxsaW5nOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFuZ2U7Ci0g
ICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgcmVzdWx0cy5h
cHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRUeXBlID09
IE5TVGV4dENoZWNraW5nVHlwZUdyYW1tYXIgJiYgY2hlY2tpbmdUeXBlcy5jb250YWlucyhUZXh0
Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKSkgewogICAgICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0
IHJlc3VsdDsKICAgICAgICAgICAgIE5TQXJyYXkgKmRldGFpbHMgPSBbaW5jb21pbmdSZXN1bHQg
Z3JhbW1hckRldGFpbHNdOwogICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdU
eXBlOjpHcmFtbWFyOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFuZ2U7Cisg
ICAgICAgICAgICByZXN1bHQuZGV0YWlscy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRldGFpbHMu
Y291bnQpOwogICAgICAgICAgICAgZm9yIChOU0RpY3Rpb25hcnkgKmluY29taW5nRGV0YWlsIGlu
IGRldGFpbHMpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoaW5jb21pbmdEZXRhaWwpOwogICAg
ICAgICAgICAgICAgIEdyYW1tYXJEZXRhaWwgZGV0YWlsOwpAQCAtMzYxLDkgKzM2Miw4IEBAIFZl
Y3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFw
aChTcGVsbERvY3VtZW50VGFnIHNwCiAgICAgICAgICAgICAgICAgZGV0YWlsLnJhbmdlID0gZGV0
YWlsTlNSYW5nZTsKICAgICAgICAgICAgICAgICBkZXRhaWwudXNlckRlc2NyaXB0aW9uID0gW2lu
Y29taW5nRGV0YWlsIG9iamVjdEZvcktleTpOU0dyYW1tYXJVc2VyRGVzY3JpcHRpb25dOwogICAg
ICAgICAgICAgICAgIE5TQXJyYXkgKmd1ZXNzZXMgPSBbaW5jb21pbmdEZXRhaWwgb2JqZWN0Rm9y
S2V5Ok5TR3JhbW1hckNvcnJlY3Rpb25zXTsKLSAgICAgICAgICAgICAgICBmb3IgKE5TU3RyaW5n
ICpndWVzcyBpbiBndWVzc2VzKQotICAgICAgICAgICAgICAgICAgICBkZXRhaWwuZ3Vlc3Nlcy5h
cHBlbmQoU3RyaW5nKGd1ZXNzKSk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmRldGFpbHMuYXBw
ZW5kKGRldGFpbCk7CisgICAgICAgICAgICAgICAgZGV0YWlsLmd1ZXNzZXMgPSBtYWtlVmVjdG9y
PFN0cmluZz4oZ3Vlc3Nlcyk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmRldGFpbHMudW5jaGVj
a2VkQXBwZW5kKFdURk1vdmUoZGV0YWlsKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBy
ZXN1bHRzLmFwcGVuZChyZXN1bHQpOwogICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0g
TlNUZXh0Q2hlY2tpbmdUeXBlTGluayAmJiBjaGVja2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVj
a2luZ1R5cGU6OkxpbmspKSB7CkBAIC0zNzEsMzEgKzM3MSwzMSBAQCBWZWN0b3I8VGV4dENoZWNr
aW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3BlbGxEb2N1bWVu
dFRhZyBzcAogICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpMaW5r
OwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFuZ2U7CiAgICAgICAgICAgICBy
ZXN1bHQucmVwbGFjZW1lbnQgPSBbW2luY29taW5nUmVzdWx0IFVSTF0gYWJzb2x1dGVTdHJpbmdd
OwotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3Vs
dHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0VHlw
ZSA9PSBOU1RleHRDaGVja2luZ1R5cGVRdW90ZSAmJiBjaGVja2luZ1R5cGVzLmNvbnRhaW5zKFRl
eHRDaGVja2luZ1R5cGU6OlF1b3RlKSkgewogICAgICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0
IHJlc3VsdDsKICAgICAgICAgICAgIHJlc3VsdC50eXBlID0gVGV4dENoZWNraW5nVHlwZTo6UXVv
dGU7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5nZTsKICAgICAgICAgICAg
IHJlc3VsdC5yZXBsYWNlbWVudCA9IFtpbmNvbWluZ1Jlc3VsdCByZXBsYWNlbWVudFN0cmluZ107
Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgcmVzdWx0
cy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRUeXBl
ID09IE5TVGV4dENoZWNraW5nVHlwZURhc2ggJiYgY2hlY2tpbmdUeXBlcy5jb250YWlucyhUZXh0
Q2hlY2tpbmdUeXBlOjpEYXNoKSkgewogICAgICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJl
c3VsdDsKICAgICAgICAgICAgIHJlc3VsdC50eXBlID0gVGV4dENoZWNraW5nVHlwZTo6RGFzaDsK
ICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJhbmdlOwogICAgICAgICAgICAgcmVz
dWx0LnJlcGxhY2VtZW50ID0gW2luY29taW5nUmVzdWx0IHJlcGxhY2VtZW50U3RyaW5nXTsKLSAg
ICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICByZXN1bHRzLmFw
cGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0g
TlNUZXh0Q2hlY2tpbmdUeXBlUmVwbGFjZW1lbnQgJiYgY2hlY2tpbmdUeXBlcy5jb250YWlucyhU
ZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCkpIHsKICAgICAgICAgICAgIFRleHRDaGVja2lu
Z1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICByZXN1bHQudHlwZSA9IFRleHRDaGVja2luZ1R5
cGU6OlJlcGxhY2VtZW50OwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFuZ2U7
CiAgICAgICAgICAgICByZXN1bHQucmVwbGFjZW1lbnQgPSBbaW5jb21pbmdSZXN1bHQgcmVwbGFj
ZW1lbnRTdHJpbmddOwotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKKyAgICAg
ICAgICAgIHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgIH0gZWxzZSBp
ZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uICYmIGNoZWNraW5n
VHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6Q29ycmVjdGlvbikpIHsKICAgICAgICAg
ICAgIFRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICByZXN1bHQudHlwZSA9
IFRleHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rpb247CiAgICAgICAgICAgICByZXN1bHQucmFuZ2Ug
PSByZXN1bHRSYW5nZTsKICAgICAgICAgICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IFtpbmNvbWlu
Z1Jlc3VsdCByZXBsYWNlbWVudFN0cmluZ107Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChy
ZXN1bHQpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAg
ICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0Fw
cGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yLmNwcAppbmRleCA3MzU3NmEyNDdjZTEx
NzUyNzU2NWZiMWQyNmI0Y2QwOWIyNDcyZTlmLi4xMjdhYzFlNDU3NzE1YmY3ZGZiMGU5YzkzYTEw
NDIwYjRmNWMzNTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvQXBwbGVQ
YXkvV2ViUGF5bWVudENvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yLmNwcApAQCAtOTgsOSArOTgsOSBAQCB2
b2lkIFdlYlBheW1lbnRDb29yZGluYXRvcjo6b3BlblBheW1lbnRTZXR1cChjb25zdCBTdHJpbmcm
IG1lcmNoYW50SWRlbnRpZmllciwgYwogCiBib29sIFdlYlBheW1lbnRDb29yZGluYXRvcjo6c2hv
d1BheW1lbnRVSShjb25zdCBVUkwmIG9yaWdpbmF0aW5nVVJMLCBjb25zdCBWZWN0b3I8VVJMPiYg
bGlua0ljb25VUkxzLCBjb25zdCBXZWJDb3JlOjpBcHBsZVBheVNlc3Npb25QYXltZW50UmVxdWVz
dCYgcGF5bWVudFJlcXVlc3QpCiB7Ci0gICAgVmVjdG9yPFN0cmluZz4gbGlua0ljb25VUkxTdHJp
bmdzOwotICAgIGZvciAoY29uc3QgYXV0byYgbGlua0ljb25VUkwgOiBsaW5rSWNvblVSTHMpCi0g
ICAgICAgIGxpbmtJY29uVVJMU3RyaW5ncy5hcHBlbmQobGlua0ljb25VUkwuc3RyaW5nKCkpOwor
ICAgIGF1dG8gbGlua0ljb25VUkxTdHJpbmdzID0gbGlua0ljb25VUkxzLm1hcChbXShhdXRvJiBs
aW5rSWNvblVSTCkgeworICAgICAgICByZXR1cm4gbGlua0ljb25VUkwuc3RyaW5nKCk7CisgICAg
fSk7CiAKICAgICBib29sIHJlc3VsdDsKICAgICBpZiAoIXNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQ
YXltZW50Q29vcmRpbmF0b3JQcm94eTo6U2hvd1BheW1lbnRVSShtX3dlYlBhZ2UuaWRlbnRpZmll
cigpLCBtX3dlYlBhZ2Uud2ViUGFnZVByb3h5SWRlbnRpZmllcigpLCBvcmlnaW5hdGluZ1VSTC5z
dHJpbmcoKSwgbGlua0ljb25VUkxTdHJpbmdzLCBwYXltZW50UmVxdWVzdCksIE1lc3NhZ2VzOjpX
ZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTo6U2hvd1BheW1lbnRVSTo6UmVwbHkocmVzdWx0KSkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRv
bWF0aW9uU2Vzc2lvblByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9BdXRvbWF0
aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwCmluZGV4IGIwZmU4MzU3MjIzYjMxMzNm
YzRkYjJmYmFhZDhlNzM5ZjVlM2I5ZDYuLmY0NWNmYjQxOTEzNmI3Y2YwOGUzYmZkNDk2YjJiNjk3
YTNjOWVmZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9BdXRvbWF0aW9u
L1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwCkBAIC04MDUsMTMg
KzgwNSwxMiBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OnNldEZpbGVzRm9ySW5w
dXRGaWxlVXBsb2FkKFdlYkNvcmU6OlBhZ2VJZGVudGlmaQogICAgIGF1dG8mIGlucHV0RWxlbWVu
dCA9IGRvd25jYXN0PFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ+KCpjb3JlRWxlbWVudCk7CiAg
ICAgVmVjdG9yPFJlZjxXZWJDb3JlOjpGaWxlPj4gZmlsZU9iamVjdHM7CiAgICAgaWYgKGlucHV0
RWxlbWVudC5tdWx0aXBsZSgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBmaWxlcyA9IGlucHV0RWxl
bWVudC5maWxlcygpKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGZpbGUgOiBmaWxlcy0+Zmls
ZXMoKSkKLSAgICAgICAgICAgICAgICBmaWxlT2JqZWN0cy5hcHBlbmQoZmlsZS5jb3B5UmVmKCkp
OwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRvKiBmaWxlcyA9IGlucHV0RWxlbWVudC5maWxl
cygpKQorICAgICAgICAgICAgZmlsZU9iamVjdHMuYXBwZW5kVmVjdG9yKGZpbGVzLT5maWxlcygp
KTsKICAgICB9CisgICAgZmlsZU9iamVjdHMucmVzZXJ2ZUNhcGFjaXR5KGZpbGVPYmplY3RzLnNp
emUoKSArIGZpbGVuYW1lcy5zaXplKCkpOwogICAgIGZvciAoY29uc3QgYXV0byYgcGF0aCA6IGZp
bGVuYW1lcykKLSAgICAgICAgZmlsZU9iamVjdHMuYXBwZW5kKFdlYkNvcmU6OkZpbGU6OmNyZWF0
ZSgmaW5wdXRFbGVtZW50LmRvY3VtZW50KCksIHBhdGgpKTsKKyAgICAgICAgZmlsZU9iamVjdHMu
dW5jaGVja2VkQXBwZW5kKFdlYkNvcmU6OkZpbGU6OmNyZWF0ZSgmaW5wdXRFbGVtZW50LmRvY3Vt
ZW50KCksIHBhdGgpKTsKICAgICBpbnB1dEVsZW1lbnQuc2V0RmlsZXMoV2ViQ29yZTo6RmlsZUxp
c3Q6OmNyZWF0ZShXVEZNb3ZlKGZpbGVPYmplY3RzKSkpOwogCiAgICAgY29tcGxldGlvbkhhbmRs
ZXIoc3RkOjpudWxsb3B0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyLmNwcAppbmRleCA3Yzlk
NDU2OWE0ZTUwYjA3MTNhNzdhOGI0YWMyNDBmYWU0NmRkZDFlLi44MTNhZjI4NTk4M2NiODJjMzBm
MjRlMjUzNzE1NWM3ZjBmM2I2MTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIuY3BwCkBA
IC0xNjAsOCArMTYwLDkgQEAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhUGxheWVyUHJpdmF0ZUludGVy
ZmFjZT4gUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyOjpjcmVhdGVSZW0KICAgICBwcm94eUNvbmZp
Z3VyYXRpb24uaXNWaWRlbyA9IHBsYXllci0+aXNWaWRlb1BsYXllcigpOwogCiAjaWYgRU5BQkxF
KEFWRl9DQVBUSU9OUykKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYWNrIDogcGxheWVyLT5vdXRP
ZkJhbmRUcmFja1NvdXJjZXMoKSkKLSAgICAgICAgcHJveHlDb25maWd1cmF0aW9uLm91dE9mQmFu
ZFRyYWNrRGF0YS5hcHBlbmQodHJhY2stPmRhdGEoKSk7CisgICAgcHJveHlDb25maWd1cmF0aW9u
Lm91dE9mQmFuZFRyYWNrRGF0YSA9IHBsYXllci0+b3V0T2ZCYW5kVHJhY2tTb3VyY2VzKCkubWFw
KFtdKGF1dG8mIHRyYWNrKSB7CisgICAgICAgIHJldHVybiB0cmFjay0+ZGF0YSgpOworICAgIH0p
OwogI2VuZGlmCiAKICAgICBhdXRvIGRvY3VtZW50U2VjdXJpdHlPcmlnaW4gPSBwbGF5ZXItPmRv
Y3VtZW50U2VjdXJpdHlPcmlnaW4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvbWVkaWEvU291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1NvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGUuY3BwCmlu
ZGV4IDk2NmZjOTNiNzdhZmFhM2U2MjA4ZDdhYmE1YWVkMmM3YTk0Yzc0YjIuLjRlZjE2NDBhNDAx
MDA2YTZiOGY2OWNjNTAxMTY0YThiZDE5MGViOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvbWVkaWEvU291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9Tb3VyY2VCdWZmZXJQcml2YXRlUmVt
b3RlLmNwcApAQCAtMzM4LDE2ICszMzgsMTEgQEAgdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlUmVt
b3RlOjp1cGRhdGVUcmFja0lkcyhWZWN0b3I8c3RkOjpwYWlyPEF0b21TdHJpbmcsIEF0b20KICAg
ICBpZiAoIW1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIFZl
Y3RvcjxzdGQ6OnBhaXI8VHJhY2tQcml2YXRlUmVtb3RlSWRlbnRpZmllciwgVHJhY2tQcml2YXRl
UmVtb3RlSWRlbnRpZmllcj4+IGlkZW50aWZpZXJQYWlyczsKLQotICAgIGZvciAoYXV0byYgdHJh
Y2tJZFBhaXIgOiB0cmFja0lkUGFpcnMpIHsKKyAgICBhdXRvIGlkZW50aWZpZXJQYWlycyA9IHRy
YWNrSWRQYWlycy5tYXAoW3RoaXNdKGF1dG8mIHRyYWNrSWRQYWlyKSB7CiAgICAgICAgIEFTU0VS
VChtX3ByZXZUcmFja0lkZW50aWZpZXJNYXAuY29udGFpbnModHJhY2tJZFBhaXIuZmlyc3QpKTsK
ICAgICAgICAgQVNTRVJUKG1fdHJhY2tJZGVudGlmaWVyTWFwLmNvbnRhaW5zKHRyYWNrSWRQYWly
LnNlY29uZCkpOwotCi0gICAgICAgIGF1dG8gb2xkSWRlbnRpZmllciA9IG1fcHJldlRyYWNrSWRl
bnRpZmllck1hcC50YWtlKHRyYWNrSWRQYWlyLmZpcnN0KTsKLSAgICAgICAgYXV0byBuZXdJZGVu
dGlmaWVyID0gbV90cmFja0lkZW50aWZpZXJNYXAuZ2V0KHRyYWNrSWRQYWlyLnNlY29uZCk7Ci0g
ICAgICAgIGlkZW50aWZpZXJQYWlycy5hcHBlbmQoc3RkOjptYWtlX3BhaXIob2xkSWRlbnRpZmll
ciwgbmV3SWRlbnRpZmllcikpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIHN0ZDo6cGFpciB7IG1f
cHJldlRyYWNrSWRlbnRpZmllck1hcC50YWtlKHRyYWNrSWRQYWlyLmZpcnN0KSwgbV90cmFja0lk
ZW50aWZpZXJNYXAuZ2V0KHRyYWNrSWRQYWlyLnNlY29uZCkgfTsKKyAgICB9KTsKIAogICAgIG1f
Z3B1UHJvY2Vzc0Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVT
b3VyY2VCdWZmZXJQcm94eTo6VXBkYXRlVHJhY2tJZHMoaWRlbnRpZmllclBhaXJzKSwgbV9yZW1v
dGVTb3VyY2VCdWZmZXJJZGVudGlmaWVyKTsKIH0KQEAgLTM4MywyNyArMzc4LDMwIEBAIHZvaWQg
U291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZTo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJ
bml0aWFsaXphdGlvblNlZ21lCiAgICAgc2VnbWVudC5kdXJhdGlvbiA9IHNlZ21lbnRJbmZvLmR1
cmF0aW9uOwogCiAgICAgbV9wcmV2VHJhY2tJZGVudGlmaWVyTWFwLnN3YXAobV90cmFja0lkZW50
aWZpZXJNYXApOworICAgIHNlZ21lbnQuYXVkaW9UcmFja3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShzZWdtZW50SW5mby5hdWRpb1RyYWNrcy5zaXplKCkpOwogICAgIGZvciAoYXV0byYgYXVkaW9U
cmFjayA6IHNlZ21lbnRJbmZvLmF1ZGlvVHJhY2tzKSB7CiAgICAgICAgIFNvdXJjZUJ1ZmZlclBy
aXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudDo6QXVkaW9UcmFja0luZm9ybWF0aW9u
IGluZm87CiAgICAgICAgIGluZm8udHJhY2sgPSBtX21lZGlhUGxheWVyUHJpdmF0ZS0+YXVkaW9U
cmFja1ByaXZhdGVSZW1vdGUoYXVkaW9UcmFjay5pZGVudGlmaWVyKTsKICAgICAgICAgaW5mby5k
ZXNjcmlwdGlvbiA9IFJlbW90ZU1lZGlhRGVzY3JpcHRpb246OmNyZWF0ZShhdWRpb1RyYWNrLmRl
c2NyaXB0aW9uKTsKLSAgICAgICAgc2VnbWVudC5hdWRpb1RyYWNrcy5hcHBlbmQoaW5mbyk7Cisg
ICAgICAgIHNlZ21lbnQuYXVkaW9UcmFja3MudW5jaGVja2VkQXBwZW5kKGluZm8pOwogICAgICAg
ICBtX3RyYWNrSWRlbnRpZmllck1hcC5hZGQoaW5mby50cmFjay0+aWQoKSwgYXVkaW9UcmFjay5p
ZGVudGlmaWVyKTsKICAgICB9CiAKKyAgICBzZWdtZW50LnZpZGVvVHJhY2tzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoc2VnbWVudEluZm8udmlkZW9UcmFja3Muc2l6ZSgpKTsKICAgICBmb3IgKGF1
dG8mIHZpZGVvVHJhY2sgOiBzZWdtZW50SW5mby52aWRlb1RyYWNrcykgewogICAgICAgICBTb3Vy
Y2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQ6OlZpZGVvVHJhY2tJ
bmZvcm1hdGlvbiBpbmZvOwogICAgICAgICBpbmZvLnRyYWNrID0gbV9tZWRpYVBsYXllclByaXZh
dGUtPnZpZGVvVHJhY2tQcml2YXRlUmVtb3RlKHZpZGVvVHJhY2suaWRlbnRpZmllcik7CiAgICAg
ICAgIGluZm8uZGVzY3JpcHRpb24gPSBSZW1vdGVNZWRpYURlc2NyaXB0aW9uOjpjcmVhdGUodmlk
ZW9UcmFjay5kZXNjcmlwdGlvbik7Ci0gICAgICAgIHNlZ21lbnQudmlkZW9UcmFja3MuYXBwZW5k
KGluZm8pOworICAgICAgICBzZWdtZW50LnZpZGVvVHJhY2tzLnVuY2hlY2tlZEFwcGVuZChpbmZv
KTsKICAgICAgICAgbV90cmFja0lkZW50aWZpZXJNYXAuYWRkKGluZm8udHJhY2stPmlkKCksIHZp
ZGVvVHJhY2suaWRlbnRpZmllcik7CiAgICAgfQogCisgICAgc2VnbWVudC50ZXh0VHJhY2tzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoc2VnbWVudEluZm8udGV4dFRyYWNrcy5zaXplKCkpOwogICAg
IGZvciAoYXV0byYgdGV4dFRyYWNrIDogc2VnbWVudEluZm8udGV4dFRyYWNrcykgewogICAgICAg
ICBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQ6OlRleHRU
cmFja0luZm9ybWF0aW9uIGluZm87CiAgICAgICAgIGluZm8udHJhY2sgPSBtX21lZGlhUGxheWVy
UHJpdmF0ZS0+dGV4dFRyYWNrUHJpdmF0ZVJlbW90ZSh0ZXh0VHJhY2suaWRlbnRpZmllcik7CiAg
ICAgICAgIGluZm8uZGVzY3JpcHRpb24gPSBSZW1vdGVNZWRpYURlc2NyaXB0aW9uOjpjcmVhdGUo
dGV4dFRyYWNrLmRlc2NyaXB0aW9uKTsKLSAgICAgICAgc2VnbWVudC50ZXh0VHJhY2tzLmFwcGVu
ZChpbmZvKTsKKyAgICAgICAgc2VnbWVudC50ZXh0VHJhY2tzLnVuY2hlY2tlZEFwcGVuZChpbmZv
KTsKICAgICAgICAgbV90cmFja0lkZW50aWZpZXJNYXAuYWRkKGluZm8udHJhY2stPmlkKCksIHRl
eHRUcmFjay5pZGVudGlmaWVyKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwCmluZGV4IGQwNzBjMmI3
OWRmNDBjYWNiNDE4ZjA2NzgyNjdlNGMzYjRhNTQ2MWMuLjFjMjI3MzQzMjU0NWFiZjNjOTA2Yjg1
ZGMxN2Q5Yjk5ZDRlMWY3YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcApAQCAtMzkyLDkgKzM5Miw5IEBAIExp
YldlYlJUQ0NvZGVjczo6RW5jb2RlciogTGliV2ViUlRDQ29kZWNzOjpjcmVhdGVFbmNvZGVyKFR5
cGUgdHlwZSwgY29uc3Qgc3RkOjptCiAgICAgZW5jb2Rlci0+aWRlbnRpZmllciA9IFJUQ0VuY29k
ZXJJZGVudGlmaWVyOjpnZW5lcmF0ZVRocmVhZFNhZmUoKTsKICAgICBlbmNvZGVyLT5jb2RlY1R5
cGUgPSB0b1dlYlJUQ0NvZGVjVHlwZSh0eXBlKTsKIAotICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3Ry
aW5nLCBTdHJpbmc+PiBwYXJhbWV0ZXJzOwotICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiBmb3Jt
YXRQYXJhbWV0ZXJzKQotICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihT
dHJpbmc6OmZyb21VVEY4KGtleVZhbHVlLmZpcnN0LmRhdGEoKSwga2V5VmFsdWUuZmlyc3QubGVu
Z3RoKCkpLCBTdHJpbmc6OmZyb21VVEY4KGtleVZhbHVlLnNlY29uZC5kYXRhKCksIGtleVZhbHVl
LnNlY29uZC5sZW5ndGgoKSkpKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBXVEY6Om1hcChmb3Jt
YXRQYXJhbWV0ZXJzLCBbXShhdXRvJiBlbnRyeSkgeworICAgICAgICByZXR1cm4gc3RkOjpwYWly
IHsgU3RyaW5nOjpmcm9tVVRGOChlbnRyeS5maXJzdC5kYXRhKCksIGVudHJ5LmZpcnN0Lmxlbmd0
aCgpKSwgU3RyaW5nOjpmcm9tVVRGOChlbnRyeS5zZWNvbmQuZGF0YSgpLCBlbnRyeS5zZWNvbmQu
bGVuZ3RoKCkpIH07CisgICAgfSk7CiAKICAgICBlbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbkFu
ZERpc3BhdGNoVG9UaHJlYWQoW3RoaXMsIGVuY29kZXIgPSBXVEZNb3ZlKGVuY29kZXIpLCB0eXBl
LCBwYXJhbWV0ZXJzID0gV1RGTW92ZShwYXJhbWV0ZXJzKV0oKSBtdXRhYmxlIHsKICAgICAgICAg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwCmluZGV4IGQ4NTQyYTJi
MTBiMWIzZTE1MzYxNDE1NDExNWVmN2VjZWM0NGViODguLjZmOGY3NDUzNTkyNDUzZTBlNjE4Njc2
MTI0NGUwYjc3OTIyMWRlNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3Zlcmxh
eS5jcHAKQEAgLTE5NywxMSArMTk3LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIGF1dG8gd2tOYW1l
cyA9IG1fYWNjZXNzaWJpbGl0eUNsaWVudC5jbGllbnQoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZU5hbWVzKHRvQVBJKCZwYWdlT3ZlcmxheSksIHBhcmFtZXJpemVkTmFtZXMsIG1fYWNjZXNz
aWJpbGl0eUNsaWVudC5jbGllbnQoKS5iYXNlLmNsaWVudEluZm8pOwogCiAgICAgICAgIHNpemVf
dCBjb3VudCA9IFdLQXJyYXlHZXRTaXplKHdrTmFtZXMpOworICAgICAgICBuYW1lcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KGNvdW50KTsKICAgICAgICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBj
b3VudDsgaysrKSB7CiAgICAgICAgICAgICBXS1R5cGVSZWYgaXRlbSA9IFdLQXJyYXlHZXRJdGVt
QXRJbmRleCh3a05hbWVzLCBrKTsKICAgICAgICAgICAgIGlmIChXZWJLaXQ6OnRvSW1wbChpdGVt
KS0+dHlwZSgpID09IEFQSTo6U3RyaW5nOjpBUElUeXBlKQotICAgICAgICAgICAgICAgIG5hbWVz
LmFwcGVuZChXZWJLaXQ6OnRvV1RGU3RyaW5nKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihpdGVt
KSkpOworICAgICAgICAgICAgICAgIG5hbWVzLnVuY2hlY2tlZEFwcGVuZChXZWJLaXQ6OnRvV1RG
U3RyaW5nKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihpdGVtKSkpOwogICAgICAgICB9CisgICAg
ICAgIG5hbWVzLnNocmlua1RvRml0KCk7CiAKICAgICAgICAgcmV0dXJuIG5hbWVzOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9TZXNz
aW9uU3RhdGVDb252ZXJzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9TZXNzaW9uU3RhdGVDb252ZXJzaW9uLmNwcAppbmRleCBjOGYyNDhhNjQ3NjU3NmEy
OTJjNzVkNWZhYTY4ZjVhYzYzYTQ3NWM4Li41NjdkNDc1MWJlZTgzYTNiM2Y0ZjZlMGZhMjM3N2Jk
MDA2MzUwYTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvU2Vzc2lvblN0YXRlQ29udmVyc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1Nlc3Npb25TdGF0ZUNvbnZlcnNpb24uY3BwCkBAIC05OSwx
MCArOTksOSBAQCBzdGF0aWMgRnJhbWVTdGF0ZSB0b0ZyYW1lU3RhdGUoY29uc3QgSGlzdG9yeUl0
ZW0mIGhpc3RvcnlJdGVtKQogICAgIGZyYW1lU3RhdGUub2JzY3VyZWRJbnNldHMgPSBoaXN0b3J5
SXRlbS5vYnNjdXJlZEluc2V0cygpOwogI2VuZGlmCiAKLSAgICBmb3IgKGF1dG8mIGNoaWxkSGlz
dG9yeUl0ZW0gOiBoaXN0b3J5SXRlbS5jaGlsZHJlbigpKSB7Ci0gICAgICAgIEZyYW1lU3RhdGUg
Y2hpbGRGcmFtZVN0YXRlID0gdG9GcmFtZVN0YXRlKGNoaWxkSGlzdG9yeUl0ZW0pOwotICAgICAg
ICBmcmFtZVN0YXRlLmNoaWxkcmVuLmFwcGVuZChXVEZNb3ZlKGNoaWxkRnJhbWVTdGF0ZSkpOwot
ICAgIH0KKyAgICBmcmFtZVN0YXRlLmNoaWxkcmVuID0gaGlzdG9yeUl0ZW0uY2hpbGRyZW4oKS5t
YXAoW10oYXV0byYgY2hpbGRIaXN0b3J5SXRlbSkgeworICAgICAgICByZXR1cm4gdG9GcmFtZVN0
YXRlKGNoaWxkSGlzdG9yeUl0ZW0pOworICAgIH0pOwogCiAgICAgcmV0dXJuIGZyYW1lU3RhdGU7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRl
ci5jcHAKaW5kZXggZjlhZjlhYjkzZjdlMDEyODc3MzY1MGMxZDI0OTVhZGRlMzlmZDQzNS4uMWQx
MWY0MjNjMTc4OGQ1OTdmZjI1NzhlZTYwZDljYjYxNmEwZGQzOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRldmljZU9yaWVudGF0aW9uVXBk
YXRlUHJvdmlkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyLmNwcApAQCAtODMsMTEgKzgz
LDcgQEAgdm9pZCBXZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyOjpzdG9wVXBkYXRp
bmdEZXZpY2VNb3Rpb24oV2ViQ29yZTo6TW90aW8KIAogdm9pZCBXZWJEZXZpY2VPcmllbnRhdGlv
blVwZGF0ZVByb3ZpZGVyOjpkZXZpY2VPcmllbnRhdGlvbkNoYW5nZWQoZG91YmxlIGFscGhhLCBk
b3VibGUgYmV0YSwgZG91YmxlIGdhbW1hLCBkb3VibGUgY29tcGFzc0hlYWRpbmcsIGRvdWJsZSBj
b21wYXNzQWNjdXJhY3kpCiB7Ci0gICAgVmVjdG9yPFdlYWtQdHI8V2ViQ29yZTo6TW90aW9uTWFu
YWdlckNsaWVudD4+IGNsaWVudHM7Ci0gICAgZm9yIChhdXRvJiBjbGllbnQgOiBtX2RldmljZU9y
aWVudGF0aW9uQ2xpZW50cykKLSAgICAgICAgY2xpZW50cy5hcHBlbmQoY2xpZW50KTsKLQotICAg
IGZvciAoYXV0byYgY2xpZW50IDogY2xpZW50cykgeworICAgIGZvciAoYXV0byYgY2xpZW50IDog
Y29weVRvVmVjdG9yT2Y8V2Vha1B0cjxXZWJDb3JlOjpNb3Rpb25NYW5hZ2VyQ2xpZW50Pj4obV9k
ZXZpY2VPcmllbnRhdGlvbkNsaWVudHMpKSB7CiAgICAgICAgIGlmIChjbGllbnQpCiAgICAgICAg
ICAgICBjbGllbnQtPm9yaWVudGF0aW9uQ2hhbmdlZChhbHBoYSwgYmV0YSwgZ2FtbWEsIGNvbXBh
c3NIZWFkaW5nLCBjb21wYXNzQWNjdXJhY3kpOwogICAgIH0KQEAgLTk1LDExICs5MSw3IEBAIHZv
aWQgV2ViRGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlcjo6ZGV2aWNlT3JpZW50YXRpb25D
aGFuZ2VkKGRvdWJsZSBhbHBoYSwKIAogdm9pZCBXZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVBy
b3ZpZGVyOjpkZXZpY2VNb3Rpb25DaGFuZ2VkKGRvdWJsZSB4QWNjZWxlcmF0aW9uLCBkb3VibGUg
eUFjY2VsZXJhdGlvbiwgZG91YmxlIHpBY2NlbGVyYXRpb24sIGRvdWJsZSB4QWNjZWxlcmF0aW9u
SW5jbHVkaW5nR3Jhdml0eSwgZG91YmxlIHlBY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5LCBk
b3VibGUgekFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHksIHN0ZDo6b3B0aW9uYWw8ZG91Ymxl
PiB4Um90YXRpb25SYXRlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4geVJvdGF0aW9uUmF0ZSwgc3Rk
OjpvcHRpb25hbDxkb3VibGU+IHpSb3RhdGlvblJhdGUpCiB7Ci0gICAgVmVjdG9yPFdlYWtQdHI8
V2ViQ29yZTo6TW90aW9uTWFuYWdlckNsaWVudD4+IGNsaWVudHM7Ci0gICAgZm9yIChhdXRvJiBj
bGllbnQgOiBtX2RldmljZU1vdGlvbkNsaWVudHMpCi0gICAgICAgIGNsaWVudHMuYXBwZW5kKGNs
aWVudCk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBjbGllbnQgOiBjbGllbnRzKSB7CisgICAgZm9y
IChhdXRvJiBjbGllbnQgOiBjb3B5VG9WZWN0b3JPZjxXZWFrUHRyPFdlYkNvcmU6Ok1vdGlvbk1h
bmFnZXJDbGllbnQ+PihtX2RldmljZU1vdGlvbkNsaWVudHMpKSB7CiAgICAgICAgIGlmIChjbGll
bnQpCiAgICAgICAgICAgICBjbGllbnQtPm1vdGlvbkNoYW5nZWQoeEFjY2VsZXJhdGlvbiwgeUFj
Y2VsZXJhdGlvbiwgekFjY2VsZXJhdGlvbiwgeEFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHks
IHlBY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5LCAgekFjY2VsZXJhdGlvbkluY2x1ZGluZ0dy
YXZpdHksIHhSb3RhdGlvblJhdGUsIHlSb3RhdGlvblJhdGUsIHpSb3RhdGlvblJhdGUpOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmNwcAppbmRleCBkZmRkYTE3Njk5MzYw
MDQ0N2EwYzkzY2M4NDYwZjVlNjhiMmMyNDgxLi4zMThmN2MzZDI5MzMyYzAyYWQyY2UzMGQ5MGU3
Y2ZlNmY1NWMzMjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuY3BwCkBAIC03
MSwxOCArNzEsMTMgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpyZW1vdmVPdmVycmlk
ZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdAogCiBWZWN0b3I8U3RyaW5nPiBX
ZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpvdmVycmlkZGVuVHlwZXMoY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkTmFtZSkKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHQ7Ci0KICAgICBhdXRvIGl0
ID0gbV9vdmVycmlkZXNNYXAuZmluZChwYXN0ZWJvYXJkTmFtZSk7CiAgICAgaWYgKGl0ID09IG1f
b3ZlcnJpZGVzTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1
cm4geyB9OwogCiAgICAgQVNTRVJUKGl0LT52YWx1ZSk7CiAKLSAgICBmb3IgKFN0cmluZyYgdHlw
ZSA6IGl0LT52YWx1ZS0+a2V5cygpKQotICAgICAgICByZXN1bHQuYXBwZW5kKHR5cGUpOwotCi0g
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gY29weVRvVmVjdG9yKGl0LT52YWx1ZS0+a2V5
cygpKTsKIH0KIAogc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQYXN0ZWJvYXJkSXRlbUluZm8+IFdl
YlBhc3RlYm9hcmRPdmVycmlkZXM6Om92ZXJyaWRkZW5JbmZvKGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZE5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViU3BlZWNoU3ludGhlc2lzQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJTcGVlY2hTeW50aGVzaXNDbGllbnQuY3BwCmluZGV4IGM0
ZDBkY2MwM2Q1ZGE2YTA0ODNlZGY1NmQxZTQzOTUyN2JjOTVmODguLmM1N2U3ODA5YjJlZTE2NmRk
NmY2ODhiZTIyYTg1OWM3ZGFkZGE4ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJTcGVlY2hTeW50aGVzaXNDbGllbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJTcGVlY2hTeW50aGVzaXND
bGllbnQuY3BwCkBAIC00Miw5ICs0Miw5IEBAIGNvbnN0IFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6
UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZT4+JiBXZWJTcGVlY2hTeW50aGVzaXNDCiAgICAg
VmVjdG9yPFdlYlNwZWVjaFN5bnRoZXNpc1ZvaWNlPiB2b2ljZUxpc3Q7CiAgICAgbV9wYWdlLnNl
bmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNwZWVjaFN5bnRoZXNpc1ZvaWNlTGlzdCgp
LCB2b2ljZUxpc3QpOwogCi0gICAgbV92b2ljZXMuY2xlYXIoKTsKLSAgICBmb3IgKGF1dG8mIHZv
aWNlIDogdm9pY2VMaXN0KQotICAgICAgICBtX3ZvaWNlcy5hcHBlbmQoV2ViQ29yZTo6UGxhdGZv
cm1TcGVlY2hTeW50aGVzaXNWb2ljZTo6Y3JlYXRlKHZvaWNlLnZvaWNlVVJJLCB2b2ljZS5uYW1l
LCB2b2ljZS5sYW5nLCB2b2ljZS5sb2NhbFNlcnZpY2UsIHZvaWNlLmRlZmF1bHRMYW5nKSk7Cisg
ICAgbV92b2ljZXMgPSB2b2ljZUxpc3QubWFwKFtdKGF1dG8mIHZvaWNlKSAtPiBSZWZQdHI8V2Vi
Q29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZT4geworICAgICAgICByZXR1cm4gV2Vi
Q29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZTo6Y3JlYXRlKHZvaWNlLnZvaWNlVVJJ
LCB2b2ljZS5uYW1lLCB2b2ljZS5sYW5nLCB2b2ljZS5sb2NhbFNlcnZpY2UsIHZvaWNlLmRlZmF1
bHRMYW5nKTsKKyAgICB9KTsKICAgICByZXR1cm4gbV92b2ljZXM7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRleCBi
NTEzNGQwZDJjNWQ3YzUyZjZmYWM5NjgwNDQxYWNjM2VlYmY2NWZkLi4xZDY0M2I2YjQyODhkMDhl
MDM4YzQ2MjVkMDU0OWRlNjhhZjJhYTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCkBAIC0yNzIsMTAgKzI3Miw5IEBAIHZv
aWQgRmluZENvbnRyb2xsZXI6OmZpbmRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmluZyYgc3RyaW5n
LCBPcHRpb25TZXQ8RmluZE9wdGlvCiAgICAgYXV0byByZXN1bHQgPSBtX3dlYlBhZ2UtPmNvcmVQ
YWdlKCktPmZpbmRUZXh0TWF0Y2hlcyhzdHJpbmcsIGNvcmUob3B0aW9ucyksIG1heE1hdGNoQ291
bnQpOwogICAgIG1fZmluZE1hdGNoZXMgPSBXVEZNb3ZlKHJlc3VsdC5yYW5nZXMpOwogCi0gICAg
VmVjdG9yPFZlY3RvcjxJbnRSZWN0Pj4gbWF0Y2hSZWN0czsKLSAgICBmb3IgKGF1dG8mIHJhbmdl
IDogbV9maW5kTWF0Y2hlcykKLSAgICAgICAgbWF0Y2hSZWN0cy5hcHBlbmQoUmVuZGVyT2JqZWN0
OjphYnNvbHV0ZVRleHRSZWN0cyhyYW5nZSkpOwotCisgICAgYXV0byBtYXRjaFJlY3RzID0gbV9m
aW5kTWF0Y2hlcy5tYXAoW10oYXV0byYgcmFuZ2UpIHsKKyAgICAgICAgcmV0dXJuIFJlbmRlck9i
amVjdDo6YWJzb2x1dGVUZXh0UmVjdHMocmFuZ2UpOworICAgIH0pOwogICAgIG1fd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaW5kU3RyaW5nTWF0Y2hlcyhzdHJpbmcs
IG1hdGNoUmVjdHMsIHJlc3VsdC5pbmRleEZvclNlbGVjdGlvbikpOwogCiAgICAgaWYgKCFvcHRp
b25zLmNvbnRhaW5zKEZpbmRPcHRpb25zOjpTaG93T3ZlcmxheSkgJiYgIW9wdGlvbnMuY29udGFp
bnMoRmluZE9wdGlvbnM6OlNob3dGaW5kSW5kaWNhdG9yKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRy
b2xsZXIuY3BwCmluZGV4IDc0ODAyYzQ3ODc1NWZmZTYxYjkzMDkyY2JjYTZkMGFjN2NjYzljODMu
LjJjOWI0NTdkYmNhMDdhNmViMTI2ODlhNzhmMGRkNWIyOTE0YTIxY2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0
UmFuZ2VDb250cm9sbGVyLmNwcApAQCAtMjQ4LDExICsyNDgsMTAgQEAgdm9pZCBXZWJGb3VuZFRl
eHRSYW5nZUNvbnRyb2xsZXI6OmRyYXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29y
ZTo6R3JhcGgKICAgICAgICAgYXV0byB0ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5h
dGVzID0gbV90ZXh0SW5kaWNhdG9yLT50ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5h
dGVzKCk7CiAgICAgICAgIGF1dG8gdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcyA9
IG1fdGV4dEluZGljYXRvci0+dGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcygpOwog
Ci0gICAgICAgIFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IHRleHRSZWN0c0luUm9vdFZpZXdD
b29yZGluYXRlczsKLSAgICAgICAgZm9yIChhdXRvIHJlY3QgOiB0ZXh0UmVjdHNJbkJvdW5kaW5n
UmVjdENvb3JkaW5hdGVzKSB7CisgICAgICAgIGF1dG8gdGV4dFJlY3RzSW5Sb290Vmlld0Nvb3Jk
aW5hdGVzID0gdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcy5tYXAoWyZdKGF1dG8g
cmVjdCkgewogICAgICAgICAgICAgcmVjdC5tb3ZlQnkodGV4dEJvdW5kaW5nUmVjdEluUm9vdFZp
ZXdDb29yZGluYXRlcy5sb2NhdGlvbigpKTsKLSAgICAgICAgICAgIHRleHRSZWN0c0luUm9vdFZp
ZXdDb29yZGluYXRlcy5hcHBlbmQocmVjdCk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biByZWN0OworICAgICAgICB9KTsKIAogICAgICAgICBhdXRvIHBhdGhzID0gV2ViQ29yZTo6UGF0
aFV0aWxpdGllczo6cGF0aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3RzKHRleHRSZWN0c0luUm9vdFZp
ZXdDb29yZGluYXRlcywgaW5kaWNhdG9yUmFkaXVzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA3MzFlMDAzODJiMDYyODExNDBjM2JmMjc2
YmM0MmNiZDJlYWM1Y2NhLi42YTAxNGZkNzdmMDFiZmZkYThlMDAyODEzZjYzOGUxODg3Zjc4ODk2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAt
MzAzMSw3ICszMDMxLDcgQEAgdm9pZCBXZWJQYWdlOjptb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNl
RXZlbnQmIG1vdXNlRXZlbnQsIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFMKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+IG1vdXNlRXZl
bnRTYW5kYm94RXh0ZW5zaW9uczsKKyAgICBWZWN0b3I8UmVmPFNhbmRib3hFeHRlbnNpb24+PiBt
b3VzZUV2ZW50U2FuZGJveEV4dGVuc2lvbnM7CiAgICAgaWYgKHNhbmRib3hFeHRlbnNpb25zKQog
ICAgICAgICBtb3VzZUV2ZW50U2FuZGJveEV4dGVuc2lvbnMgPSBjb25zdW1lU2FuZGJveEV4dGVu
c2lvbnMoV1RGTW92ZSgqc2FuZGJveEV4dGVuc2lvbnMpKTsKIApAQCAtNzg1NywyMSArNzg1Nywx
OSBAQCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkmIFdlYlBhZ2U6OmVuc3VyZVJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eSgpCiB9CiAjZW5kaWYKIAotVmVjdG9yPFJlZlB0cjxTYW5kYm94
RXh0ZW5zaW9uPj4gV2ViUGFnZTo6Y29uc3VtZVNhbmRib3hFeHRlbnNpb25zKFZlY3RvcjxTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGU+JiYgc2FuZGJveEV4dGVuc2lvbnMpCitWZWN0b3I8UmVmPFNh
bmRib3hFeHRlbnNpb24+PiBXZWJQYWdlOjpjb25zdW1lU2FuZGJveEV4dGVuc2lvbnMoVmVjdG9y
PFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4mJiBzYW5kYm94RXh0ZW5zaW9ucykKIHsKLSAgICBW
ZWN0b3I8UmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiBkcmFnU2FuZGJveEV4dGVuc2lvbnM7Ci0g
ICAgZm9yIChhdXRvJiBzYW5kYm94RXh0ZW5zaW9uIDogc2FuZGJveEV4dGVuc2lvbnMpIHsKKyAg
ICByZXR1cm4gV1RGOjpjb21wYWN0TWFwKFdURk1vdmUoc2FuZGJveEV4dGVuc2lvbnMpLCBbXShh
dXRvJiYgc2FuZGJveEV4dGVuc2lvbikgLT4gUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+IHsKICAg
ICAgICAgYXV0byBleHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUoV1RGTW92ZShz
YW5kYm94RXh0ZW5zaW9uKSk7CiAgICAgICAgIGlmICghZXh0ZW5zaW9uKQotICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgYm9vbCBvayA9
IGV4dGVuc2lvbi0+Y29uc3VtZSgpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7Ci0g
ICAgICAgIGRyYWdTYW5kYm94RXh0ZW5zaW9ucy5hcHBlbmQoV1RGTW92ZShleHRlbnNpb24pKTsK
LSAgICB9Ci0gICAgcmV0dXJuIGRyYWdTYW5kYm94RXh0ZW5zaW9uczsKKyAgICAgICAgcmV0dXJu
IGV4dGVuc2lvbjsKKyAgICB9KTsKIH0KIAotdm9pZCBXZWJQYWdlOjpyZXZva2VTYW5kYm94RXh0
ZW5zaW9ucyhWZWN0b3I8UmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiYgc2FuZGJveEV4dGVuc2lv
bnMpCit2b2lkIFdlYlBhZ2U6OnJldm9rZVNhbmRib3hFeHRlbnNpb25zKFZlY3RvcjxSZWY8U2Fu
ZGJveEV4dGVuc2lvbj4+JiBzYW5kYm94RXh0ZW5zaW9ucykKIHsKICAgICBmb3IgKGF1dG8mIHNh
bmRib3hFeHRlbnNpb24gOiBzYW5kYm94RXh0ZW5zaW9ucykKICAgICAgICAgc2FuZGJveEV4dGVu
c2lvbi0+cmV2b2tlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmgKaW5kZXggNjlkZTE0YWE5ODM0Mzg4YTQwNTI0NzdjMzYxODFkN2Q1YTJmN2NjZi4uNjU0Yjhj
OWM2MDAyZDBlZDliMmM2MmNlMGMzMWVhOWJmZGIwYmVmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtMTk2OSw4ICsxOTY5LDggQEAgcHJpdmF0ZToK
IAogICAgIHZvaWQgcGxhdGZvcm1EaWRTY2FsZVBhZ2UoKTsKIAotICAgIFZlY3RvcjxSZWZQdHI8
U2FuZGJveEV4dGVuc2lvbj4+IGNvbnN1bWVTYW5kYm94RXh0ZW5zaW9ucyhWZWN0b3I8U2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlPiYmKTsKLSAgICB2b2lkIHJldm9rZVNhbmRib3hFeHRlbnNpb25z
KFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+JiBzYW5kYm94RXh0ZW5zaW9ucyk7Cisg
ICAgVmVjdG9yPFJlZjxTYW5kYm94RXh0ZW5zaW9uPj4gY29uc3VtZVNhbmRib3hFeHRlbnNpb25z
KFZlY3RvcjxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+JiYpOworICAgIHZvaWQgcmV2b2tlU2Fu
ZGJveEV4dGVuc2lvbnMoVmVjdG9yPFJlZjxTYW5kYm94RXh0ZW5zaW9uPj4mIHNhbmRib3hFeHRl
bnNpb25zKTsKIAogICAgIHZvaWQgc2V0U2VsZWN0aW9uUmFuZ2UoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmLCBXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHksIGJvb2wpOwogICAgIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRleCA5
ZGMwMGRhMjc3MGMxOTM5ODkxYTMwMGYyMzM3NDk2YTljOGU3MDFkLi5iZDM2NzIwNzViNzU3Njhj
ODQxNDc3OGZjNjY1ZjVkNzViNGUyNGFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtNzU0LDExICs3NTQsOCBAQCB2b2lk
IFdlYlBhZ2U6OmhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayhGcmFtZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uLCBjb25zdCBWZWN0bwogCiAgICAgTlNEYXRhICpzZWxlY3Rpb25EYXRhID0gW2F0dHJp
YnV0ZWRTZWxlY3Rpb24gUlRGREZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbYXR0cmlidXRlZFNl
bGVjdGlvbiBsZW5ndGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6QHsgfV07CiAKLSAgICBWZWN0b3I8
dWludDhfdD4gc2VsZWN0aW9uRGF0YVZlY3RvcjsKLSAgICBzZWxlY3Rpb25EYXRhVmVjdG9yLmFw
cGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzZWxlY3Rpb25EYXRhLmJ5dGVz
KSwgc2VsZWN0aW9uRGF0YS5sZW5ndGgpOwotCiAgICAgZmx1c2hQZW5kaW5nRWRpdG9yU3RhdGVV
cGRhdGUoKTsKLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3dDb250ZXh0TWVu
dShDb250ZXh0TWVudUNvbnRleHREYXRhKHBvaW50LCBzZWxlY3Rpb25EYXRhVmVjdG9yLCBwaG9u
ZU51bWJlcnMsIHNlbGVjdGlvbi5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSwgVXNl
ckRhdGEoKSkpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2hvd0NvbnRleHRN
ZW51KENvbnRleHRNZW51Q29udGV4dERhdGEocG9pbnQsIFZlY3RvciB7IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KHNlbGVjdGlvbkRhdGEuYnl0ZXMpLCBzZWxlY3Rpb25EYXRhLmxl
bmd0aCB9LCBwaG9uZU51bWJlcnMsIHNlbGVjdGlvbi5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0
YWJsZSgpKSwgVXNlckRhdGEoKSkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmhhbmRsZUltYWdlU2Vy
dmljZUNsaWNrKGNvbnN0IEludFBvaW50JiBwb2ludCwgSW1hZ2UmIGltYWdlLCBIVE1MSW1hZ2VF
bGVtZW50JiBlbGVtZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCmlu
ZGV4IDc5OTYxM2QzNzc0MjM2M2JmYmRjZDk1Mjk3OTk2MjIwNmYwMjI4YTguLjg5OTBlZGQ3NmNh
Yjk2YzJkZWNkM2I5NjA1NGNmZjYyOTViYjBjZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5jcHAKQEAgLTE0NTIsOCArMTQ1MiwxMCBAQCB2b2lkIFdlYlByb2Nlc3M6OmZl
dGNoV2Vic2l0ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gd2Vic2l0ZURhdGFUeXBl
cywgQwogewogICAgIFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhOwogICAgIGlmICh3ZWJzaXRlRGF0
YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TWVtb3J5Q2FjaGUpKSB7Ci0gICAgICAg
IGZvciAoYXV0byYgb3JpZ2luIDogTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpLm9yaWdpbnNXaXRo
Q2FjaGUoc2Vzc2lvbklEKCkpKQotICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcy5hcHBl
bmQoV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLT5kYXRhKCksIFdlYnNpdGVEYXRhVHlwZTo6
TWVtb3J5Q2FjaGUsIDAgfSk7CisgICAgICAgIGF1dG8gb3JpZ2lucyA9IE1lbW9yeUNhY2hlOjpz
aW5nbGV0b24oKS5vcmlnaW5zV2l0aENhY2hlKHNlc3Npb25JRCgpKTsKKyAgICAgICAgd2Vic2l0
ZURhdGEuZW50cmllcyA9IFdURjo6bWFwKG9yaWdpbnMsIFtdKGF1dG8mIG9yaWdpbikgeworICAg
ICAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbi0+ZGF0YSgpLCBXZWJz
aXRlRGF0YVR5cGU6Ok1lbW9yeUNhY2hlLCAwIH07CisgICAgICAgIH0pOwogICAgIH0KICAgICBj
b21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHdlYnNpdGVEYXRhKSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452697</attachid>
            <date>2022-02-20 11:32:28 -0800</date>
            <delta_ts>2022-02-20 23:07:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236852-20220220113225.patch</filename>
            <type>text/plain</type>
            <size>162857</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDBiOGQ4YTE1ZWQxZjg3MDc2NDI2ZWUz
OTRhMGMwMzAyOGYzMGEwZTUuLjkzYzY0ZGM2ZTcwMjYyNzY4MGQ2MjIwZmI4ZjU2NzBmYjFjNDYw
MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjItMDItMTggIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGV2ZW4gbW9yZSBjYWxs
IHNpdGVzIGNvbnN0cnVjdGluZyB2ZWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuY3BwOgorICAgICAgICAoV1RGOjpD
b25jdXJyZW50V29ya1F1ZXVlOjphcHBseSk6CisgICAgICAgICogd3RmL2NmL0xhbmd1YWdlQ0Yu
Y3BwOgorICAgICAgICAoV1RGOjpwbGF0Zm9ybVVzZXJQcmVmZXJyZWRMYW5ndWFnZXMpOgorCiAy
MDIyLTAyLTE4ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBb
aU9TXSBTYWZhcmkgY2FuIHNvbWV0aW1lcyBoYW5nIHdoaWxlIHByaW50aW5nIGR1ZSB0byBzeW5j
IElQQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IGJjZWQyYjI2MmQxM2NkZmZiODRiNjJkNGE1ZTk3MmYyNjU3YzYx
MDAuLjE3NTA2N2M5YTI3MWI4MjUyYTJmMWRkNjY4M2NlYWI3NGFlNDZhZGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNjYgQEAKKzIwMjItMDItMTggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGV2ZW4gbW9yZSBjYWxsIHNpdGVz
IGNvbnN0cnVjdGluZyB2ZWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzY4NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIE1vZHVsZXMvYXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBheW1lbnRDb29yZGluYXRvcjo6YmVnaW5QYXltZW50U2Vzc2lv
bik6CisgICAgICAgICogTW9kdWxlcy9hcHBsZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29jb2Eu
bW06CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0KToKKyAgICAgICAgKiBNb2R1bGVzL2NhY2hl
L0RPTUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUNhY2hlOjpiYXRjaFB1dE9wZXJh
dGlvbik6CisgICAgICAgICogTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R2FtZXBhZDo6R2FtZXBhZCk6CisgICAgICAgICogTW9kdWxlcy9nYW1lcGFkL0dh
bWVwYWRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRNYW5hZ2VyOjpwbGF0
Zm9ybUdhbWVwYWREaXNjb25uZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZE1hbmFn
ZXI6Om1ha2VHYW1lcGFkVmlzaWJsZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6Om9iamVjdFN0b3Jl
TmFtZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OnRyYW5zYWN0aW9u
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmg6CisgICAgICAgIChX
ZWJDb3JlOjpJREJLZXlEYXRhOjppc0RlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YUhhc2g6Omhhc2gpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6aGFzaCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uOjpvYmplY3RTdG9yZU5hbWVzIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlh
Y29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFD
b250cm9sc0hvc3Q6OnNob3dNZWRpYUNvbnRyb2xzQ29udGV4dE1lbnUpOgorICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTb3VyY2U6OmFjdGl2ZVJhbmdlcyBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNv
dXJjZS9TYW1wbGVNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRlY29kZU9yZGVyU2FtcGxlTWFw
OjpzaXplIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZl
ckxpc3QuaDoKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzOjpnZXRWb2ljZXMpOgorICAgICAgICAq
IE1vZHVsZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrLm1tOgorICAgICAg
ICAoLVtXZWJTcGVlY2hSZWNvZ25pemVyVGFza0ltcGwgY2FsbGJhY2tXaXRoVHJhbnNjcmlwdGlv
bnM6aXNGaW5hbDpdKToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hS
ZWNvZ25pemVyVGFza01vY2subW06CisgICAgICAgICgtW1dlYlNwZWVjaFJlY29nbml6ZXJUYXNr
TW9jayBhdWRpb1NhbXBsZXNBdmFpbGFibGU6XSk6CisgICAgICAgICogYW5pbWF0aW9uL0NTU1By
b3BlcnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRnVuYyk6CisgICAg
ICAgICogYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmVzQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXI6OnVwZGF0ZUFuaW1hdGlvbnNB
bmRTZW5kRXZlbnRzKToKKyAgICAgICAgKiBhbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cHJvY2Vzc1Byb3BlcnR5SW5kZXhlZEtleWZyYW1lcyk6CisgICAg
ICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbjo6Q29udGVudEV4dGVu
c2lvbik6CisgICAgICAgICogY3NzL0NTU1ZhbHVlTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTVmFsdWVMaXN0OjpzaXplIGNvbnN0KToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjT3Bl
cmF0aW9uTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6
aG9pc3RDaGlsZHJlbldpdGhPcGVyYXRvcik6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJz
ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlckltcGw6OmNvbnN1bWVDb250
YWluZXJSdWxlKToKKyAgICAgICAgKiBkb20vRE9NU3RyaW5nTGlzdC5oOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NU3RyaW5nTGlzdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVN0cmlu
Z0xpc3Q6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpET01TdHJpbmdMaXN0OjpET01TdHJp
bmdMaXN0KToKKyAgICAgICAgKiBkb20vRXZlbnRQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50UGF0aDo6RXZlbnRQYXRoKToKKyAgICAgICAgKiBkb20vRnVsbHNjcmVlbk1hbmFnZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RnVsbHNjcmVlbk1hbmFnZXI6OmNhbmNlbEZ1bGxzY3Jl
ZW4pOgorICAgICAgICAqIGRvbS9Mb2FkYWJsZVNjcmlwdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMb2FkYWJsZVNjcmlwdDo6bm90aWZ5Q2xpZW50RmluaXNoZWQpOgorICAgICAgICAqIGRvbS9S
YWRpb0J1dHRvbkdyb3Vwcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYWRpb0J1dHRvbkdyb3Vw
OjptZW1iZXJzIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0RpcmVjdG9yeUZpbGVMaXN0Q3JlYXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0ZpbGVMaXN0KToKKyAgICAgICAgKiBodG1sL0hU
TUxTZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
OjpzYXZlTGFzdFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVu
dDo6c2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgpOgorICAgICAgICAqIGh0bWwvSW1hZ2VC
aXRtYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OmRldGFjaEJpdG1hcHMp
OgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0YWNoZWRT
aGFkZXJzKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpwcm9jZXNzTWV0YSk6
CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6aW5zZXJ0UGhvbmVOdW1iZXJMaW5rKToKKyAgICAgICAg
KiBodG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dERvY3VtZW50UGFyc2VyOjppbnNlcnRGYWtlUHJlRWxlbWVudCk6CisgICAgICAgICogbG9h
ZGVyL0NvbnRlbnRGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEZpbHRlcjo6
Y3JlYXRlKToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZU1hbmlm
ZXN0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQXBwbGljYXRpb25DYWNoZU1h
bmlmZXN0KToKKyAgICAgICAgKiBwYWdlL1Jlc2l6ZU9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlc2l6ZU9ic2VydmVyOjpkZWxpdmVyT2JzZXJ2YXRpb25zKToKKyAgICAgICAgKiBw
YWdlL1RleHRJbmRpY2F0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZUluZGlj
YXRvcik6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlU3ViUmVzb3VyY2VJbnRlZ3JpdHlJbnRvRGlnZXN0cyk6Cisg
ICAgICAgICogcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rmls
ZUNob29zZXI6OmNob29zZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUNob29zZXI6OmNo
b29zZUZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjaG9vc2VNZWRpYUZp
bGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9UaHJlYWRTYWZlRGF0YUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0RTUEtlcm5lbFByb2Nlc3Nvcjo6aW5pdGlhbGl6ZSk6CisgICAgICAg
ICogcGxhdGZvcm0vYXVkaW8vQXVkaW9SZXNhbXBsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9SZXNhbXBsZXI6OkF1ZGlvUmVzYW1wbGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRp
by9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1p
Y3NDb21wcmVzc29yS2VybmVsOjpzZXROdW1iZXJPZkNoYW5uZWxzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9NdWx0aUNoYW5uZWxSZXNhbXBsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TXVsdGlDaGFubmVsUmVzYW1wbGVyOjpNdWx0aUNoYW5uZWxSZXNhbXBsZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWQv
bWFjL0R1YWxzaG9jazNISURHYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkR1YWxzaG9j
azNISURHYW1lcGFkOjpEdWFsc2hvY2szSElER2FtZXBhZCk6CisgICAgICAgICogcGxhdGZvcm0v
Z2FtZXBhZC9tYWMvTG9naXRlY2hHYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvZ2l0
ZWNoR2FtZXBhZDo6TG9naXRlY2hHYW1lcGFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFk
L21hYy9TdGFkaWFISURHYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0YWRpYUhJREdh
bWVwYWQ6OlN0YWRpYUhJREdhbWVwYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6YWRkUmVw
YWludFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGF0aFV0aWxpdGllczo6cGF0aHNXaXRoU2hyaW5rV3JhcHBl
ZFJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhVdGlsaXRpZXM6OnBhdGhXaXRoU2hyaW5r
V3JhcHBlZFJlY3RzRm9yT3V0bGluZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU291
cmNlQnVmZmVyUHJpdmF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2
YXRlOjpidWZmZXJlZFNhbXBsZXNGb3JUcmFja0lkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpleHRyYWN0S2V5SURzU2tkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVZGV3JhcHBlcjo6c2V0
UmVxdWVzdEZvcktleSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW06CisgICAgICAgIChX
ZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnVwZGF0
ZUtleVN0YXR1c2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyQVZGT2JqQzo6ZnJhbWVJbmZvcyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUGFyc2VyQVZGT2JqQy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlckFWRk9iakM6OmRpZFBhcnNlU3RyZWFtRGF0
YUFzQXNzZXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9y
bURhdGFDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnZhcmlh
dGlvbkF4ZXMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVTdHJpbmcpOgorICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlOjpzZXRTdXBwb3J0ZWRQ
cmVzZXRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMKToK
KyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3RyeUltcGw6OndyaXRlQmxvYnNUb1RlbXBvcmFy
eUZpbGVzRm9ySW5kZXhlZERCKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmRyYXdC
b3hTaWRlRnJvbVBhdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpjb25uZWN0Q2xpcHBp
bmdTdGFja0xheWVycyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkanVzdE92
ZXJmbG93U2Nyb2xsYmFyQ29udGFpbmVyTGF5ZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpwYWludEF0dGFjaG1lbnRUaXRsZUJh
Y2tncm91bmQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVNWR1N0cm9rZVBhaW50aW5nUmVzb3VyY2UpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RleHRDaHVuazo6U1ZHVGV4dENodW5rKToKKyAgICAgICAgKiBzdHlsZS9QYWdlUnVs
ZUNvbGxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UGFnZVJ1bGVDb2xsZWN0
b3I6Om1hdGNoUGFnZVJ1bGVzKToKKyAgICAgICAgKiBzdHlsZS9SdWxlU2V0QnVpbGRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldEJ1aWxkZXI6Ok1lZGlhUXVlcnlDb2xs
ZWN0b3I6OnBvcCk6CisgICAgICAgICogc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENvbnRhaW5l
ck5hbWUpOgorCiAyMDIyLTAyLTE5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbUmUtbGFuZGluZ10gUHJvdmlkZSBhIFdlYkNvcmUgc3Vic3BhY2VJbXBsRm9yIHRl
bXBsYXRlIHRvIG1ha2UgY29kZSBtb3JlIHJlYWRhYmxlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBjYzRiZmE1NGFh
NzMxMmRmZDliZDcwZTRjNzJlZTEzYzI1OTI1NWJhLi42MmJhMmIzNmYyMzYwZWIxYjA0NGRiYTRi
ZTY5NTM2Y2VjZWFkNmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDIyLTAyLTE4ICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4gdXAgLyBvcHRp
bWl6ZSBldmVuIG1vcmUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9ycworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2ODUyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL21lZGlh
L1JlbW90ZU1lZGlhUGxheWVyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVNZWRp
YVBsYXllclByb3h5OjpvdXRPZkJhbmRUcmFja1NvdXJjZXMpOgorICAgICAgICAqIEdQVVByb2Nl
c3MvbWVkaWEvUmVtb3RlU291cmNlQnVmZmVyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVTb3VyY2VCdWZmZXJQcm94eTo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0
aWFsaXphdGlvblNlZ21lbnQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVTb3VyY2VCdWZmZXJQ
cm94eTo6dXBkYXRlVHJhY2tJZHMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZp
ZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3Rpbmcp
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6ZmV0Y2hEaXNrQ2FjaGVFbnRyaWVzKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9Ob3RpZmljYXRpb25zL05ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya05vdGlmaWNhdGlvbk1hbmFnZXI6OmdldE9yaWdpbnNXaXRoUHVzaEFu
ZE5vdGlmaWNhdGlvblBlcm1pc3Npb25zKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFn
ZXI6OmFsbFN0b3JhZ2VBcmVhSWRlbnRpZmllcnMgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6VHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpvcmlnaW5zIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6VHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpz
dG9yYWdlQXJlYUlkZW50aWZpZXJzIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNhY2hl
U3RvcmFnZTo6Q2FjaGU6OmZpbmlzaE9wZW5pbmcpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0
b3JhZ2U6OkNhY2hlOjprZXlzIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9y
YWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFn
ZUFyZWE6OlNRTGl0ZVN0b3JhZ2VBcmVhKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQXJndW1l
bnRDb2RlcnMuaDoKKyAgICAgICAgKiBTaGFyZWQvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5h
dG9yUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94
eTo6c2hvd1BheW1lbnRVSSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9u
LmNwcDoKKyAgICAgICAgKEFQSTo6TmF2aWdhdGlvbjo6TmF2aWdhdGlvbik6CisgICAgICAgIChB
UEk6Om1fY2xpZW50TmF2aWdhdGlvbkFjdGl2aXR5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvV0tTaGFyZVNoZWV0Lm1tOgorICAgICAgICAoYXBwZW5kRmlsZXNBc1NoYXJlYWJsZVVSTHMp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXN0b3JlQXBwSGlnaGxpZ2h0c0FuZFNjcm9sbFRv
SW5kZXgpOgorICAgICAgICAqIFVJUHJvY2Vzcy9GcmFtZUxvYWRTdGF0ZS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkZyYW1lTG9hZFN0YXRlOjpkaWRGaW5pc2hMb2FkKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2Vzcyk6
CisgICAgICAgICogVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHk6OnBhcmFtZXRlcnMgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNh
dGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkF1dGhlbnRp
Y2F0b3JNYW5hZ2VyOjpzdGFydERpc2NvdmVyeSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkJh
Y2tGb3J3YXJkTGlzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6
cmVtb3ZlQWxsSXRlbXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmNs
ZWFyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVtb3ZlUHJvY2Vzc0Zyb21PcmlnaW5DYWNoZVNl
dCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6cHJvY2Vzc0RpZFRlcm1pbmF0ZU9yRmFpbGVkVG9MYXVu
Y2gpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvaW9zL1RleHRDaGVja2VySU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpU
ZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAqIFVJUHJvY2Vzcy9p
b3MvV0tBY3Rpb25TaGVldEFzc2lzdGFudC5tbToKKyAgICAgICAgKC1bV0tBY3Rpb25TaGVldEFz
c2lzdGFudCBwcmVzZW50YXRpb25SZWN0Rm9yRWxlbWVudFVzaW5nQ2xvc2VzdEluZGljYXRlZFJl
Y3RdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFjLm1tOgorICAgICAg
ICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUGF5bWVudENvb3JkaW5hdG9yOjpzaG93UGF5bWVudFVJKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OnNldEZpbGVzRm9ySW5w
dXRGaWxlVXBsb2FkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRp
YVBsYXllck1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVNZWRpYVBsYXllck1h
bmFnZXI6OmNyZWF0ZVJlbW90ZU1lZGlhUGxheWVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQ
VS9tZWRpYS9Tb3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
U291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZTo6dXBkYXRlVHJhY2tJZHMpOgorICAgICAgICAoV2Vi
S2l0OjpTb3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlOjpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVj
ZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvd2Vi
cnRjL0xpYldlYlJUQ0NvZGVjcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxpYldlYlJUQ0NvZGVj
czo6Y3JlYXRlRW5jb2Rlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1Nlc3Npb25TdGF0ZUNvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2ViS2l0Ojp0
b0ZyYW1lU3RhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRGV2
aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkRl
dmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXI6OmRldmljZU9yaWVudGF0aW9uQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXI6OmRl
dmljZU1vdGlvbkNoYW5nZWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViUGFzdGVib2FyZE92ZXJyaWRlcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9h
cmRPdmVycmlkZXM6Om92ZXJyaWRkZW5UeXBlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJTcGVlY2hTeW50aGVzaXNDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJTcGVlY2hTeW50aGVzaXNDbGllbnQ6OnZvaWNlTGlzdCk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RmluZENv
bnRyb2xsZXI6OmZpbmRTdHJpbmdNYXRjaGVzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
Rm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpkcmF3UmVjdCk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjb25zdW1l
U2FuZGJveEV4dGVuc2lvbnMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aGFuZGxlU2VsZWN0aW9uU2Vy
dmljZUNsaWNrKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpmZXRjaFdlYnNpdGVEYXRhKToKKwogMjAyMi0wMi0xOSAg
VGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBtYWNDYXRh
bHlzdDogV0tXZWJWaWV3IGNyYXNoZXMgd2hlbmV2ZXIgdGhlIHZpZXcgZnJhbWUgY2hhbmdlcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L1dvcmtRdWV1ZS5jcHAKaW5kZXggOWUxMDZlMzk0ZDNmNDRkMmMyNWZjM2NhMTUzNTQwZTUyMDRj
YjM1Yi4uODY0MDZmMzg4NDM3MTRjYjI1NWMzNGVhZTNmOTE4MWRhYmE1OGUzOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Xb3Jr
UXVldWUuY3BwCkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBDb25jdXJyZW50V29ya1F1ZXVlOjph
cHBseShzaXplX3QgaXRlcmF0aW9ucywgV1RGOjpGdW5jdGlvbjx2b2lkKHNpemVfdCBpbmQKIAog
ICAgICAgICAgICAgbV93b3JrZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodGhyZWFkQ291bnQp
OwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRocmVhZENvdW50OyArK2kp
IHsKLSAgICAgICAgICAgICAgICBtX3dvcmtlcnMuYXBwZW5kKFRocmVhZDo6Y3JlYXRlKCJUaHJl
YWRQb29sIFdvcmtlciIsIFt0aGlzXSB7CisgICAgICAgICAgICAgICAgbV93b3JrZXJzLnVuY2hl
Y2tlZEFwcGVuZChUaHJlYWQ6OmNyZWF0ZSgiVGhyZWFkUG9vbCBXb3JrZXIiLCBbdGhpc10gewog
ICAgICAgICAgICAgICAgICAgICB0aHJlYWRCb2R5KCk7CiAgICAgICAgICAgICAgICAgfSkpOwog
ICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvY2YvTGFuZ3VhZ2VDRi5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi9jZi9MYW5ndWFnZUNGLmNwcAppbmRleCBiYmMxZWY2ZjRlZmUw
MzA1OWNlNTUxMzFlMDhjMTAzMzIyNDg4ZTU2Li5jMDRjNTViYzYwM2QyODFkMGNhMzg5MjBlYmE4
Yzc5ZTVlNjkyOTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9jZi9MYW5ndWFnZUNGLmNw
cAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9jZi9MYW5ndWFnZUNGLmNwcApAQCAtMTAyLDkgKzEwMiwx
MCBAQCBWZWN0b3I8U3RyaW5nPiBwbGF0Zm9ybVVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoU2hvdWxk
TWluaW1pemVMYW5ndWFnZXMgc2hvdWxkTWluaQogICAgICAgICByZXR1cm4geyAiZW4iX3MgfTsK
IAogICAgIFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlczsKKyAgICBsYW5ndWFnZXMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShwbGF0Zm9ybUxhbmd1YWdlc0NvdW50KTsKICAgICBmb3IgKENGSW5kZXgg
aSA9IDA7IGkgPCBwbGF0Zm9ybUxhbmd1YWdlc0NvdW50OyBpKyspIHsKICAgICAgICAgYXV0byBw
bGF0Zm9ybUxhbmd1YWdlID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGQXJyYXlHZXRWYWx1
ZUF0SW5kZXgocGxhdGZvcm1MYW5ndWFnZXMuZ2V0KCksIGkpKTsKLSAgICAgICAgbGFuZ3VhZ2Vz
LmFwcGVuZChodHRwU3R5bGVMYW5ndWFnZUNvZGUocGxhdGZvcm1MYW5ndWFnZSwgc2hvdWxkTWlu
aW1pemVMYW5ndWFnZXMpKTsKKyAgICAgICAgbGFuZ3VhZ2VzLnVuY2hlY2tlZEFwcGVuZChodHRw
U3R5bGVMYW5ndWFnZUNvZGUocGxhdGZvcm1MYW5ndWFnZSwgc2hvdWxkTWluaW1pemVMYW5ndWFn
ZXMpKTsKICAgICB9CiAKICAgICBMT0dfV0lUSF9TVFJFQU0oTGFuZ3VhZ2UsIHN0cmVhbSA8PCAi
QWZ0ZXIgcGFzc2luZyB0aHJvdWdoIGh0dHBTdHlsZUxhbmd1YWdlQ29kZTogIiA8PCBsYW5ndWFn
ZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXltZW50
Q29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXltZW50
Q29vcmRpbmF0b3IuY3BwCmluZGV4IDFhMzI3YTk0YjBiNzFkNGVjNzVlYWNjOGQ0YWQ3OGE5MWI5
ZmY2ODUuLjRhOTQzMjI0OWQ1MmQ1MWQxNDdiODZlNTcwOGQ1MTg4OGJhNjRmNTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29yZGluYXRv
ci5jcHAKQEAgLTEwMSwxMSArMTAxLDEwIEBAIGJvb2wgUGF5bWVudENvb3JkaW5hdG9yOjpiZWdp
blBheW1lbnRTZXNzaW9uKERvY3VtZW50JiBkb2N1bWVudCwgUGF5bWVudFNlc3Npb24mCiB7CiAg
ICAgQVNTRVJUKCFtX2FjdGl2ZVNlc3Npb24pOwogCi0gICAgVmVjdG9yPFVSTD4gbGlua0ljb25V
UkxzOwotICAgIGZvciAoYXV0byYgaWNvbiA6IExpbmtJY29uQ29sbGVjdG9yIHsgZG9jdW1lbnQg
fS5pY29uc09mVHlwZXMoeyBMaW5rSWNvblR5cGU6OlRvdWNoSWNvbiwgTGlua0ljb25UeXBlOjpU
b3VjaFByZWNvbXBvc2VkSWNvbiB9KSkKLSAgICAgICAgbGlua0ljb25VUkxzLmFwcGVuZChpY29u
LnVybCk7Ci0KLSAgICBhdXRvIHNob3dQYXltZW50VUkgPSBtX2NsaWVudC5zaG93UGF5bWVudFVJ
KGRvY3VtZW50LnVybCgpLCBsaW5rSWNvblVSTHMsIHBheW1lbnRSZXF1ZXN0KTsKKyAgICBhdXRv
IGxpbmtJY29uVVJMcyA9IExpbmtJY29uQ29sbGVjdG9yIHsgZG9jdW1lbnQgfS5pY29uc09mVHlw
ZXMoeyBMaW5rSWNvblR5cGU6OlRvdWNoSWNvbiwgTGlua0ljb25UeXBlOjpUb3VjaFByZWNvbXBv
c2VkSWNvbiB9KS5tYXAoW10oYXV0byYgaWNvbikgeworICAgICAgICByZXR1cm4gaWNvbi51cmw7
CisgICAgfSk7CisgICAgYXV0byBzaG93UGF5bWVudFVJID0gbV9jbGllbnQuc2hvd1BheW1lbnRV
SShkb2N1bWVudC51cmwoKSwgV1RGTW92ZShsaW5rSWNvblVSTHMpLCBwYXltZW50UmVxdWVzdCk7
CiAgICAgUEFZTUVOVF9DT09SRElOQVRPUl9SRUxFQVNFX0xPRygiYmVnaW5QYXltZW50U2Vzc2lv
bigpIC0+ICVkIiwgc2hvd1BheW1lbnRVSSk7CiAgICAgaWYgKCFzaG93UGF5bWVudFVJKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Fw
cGxlcGF5L2NvY29hL1BheW1lbnRNZXRob2RDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvYXBwbGVwYXkvY29jb2EvUGF5bWVudE1ldGhvZENvY29hLm1tCmluZGV4IDc2NTNkZTU0YWY1
MzlmMjU2MWY0MjIzNmQzMGVjNjFhYjU4MDNkZDUuLjM3NWU1M2Q2ZDRmZGRjODg4ZjMyZTA0ZTI4
M2E3ZGIwNDExM2QwNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVw
YXkvY29jb2EvUGF5bWVudE1ldGhvZENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvYXBwbGVwYXkvY29jb2EvUGF5bWVudE1ldGhvZENvY29hLm1tCkBAIC0xMDEsMTEgKzEwMSw4
IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFwcGxlUGF5UGF5bWVudE1ldGhvZDo6VHlwZT4gY29u
dmVydChQS1BheW1lbnRNZXRob2RUeXBlIHBhCiAjaWYgSEFWRShQQVNTS0lUX1BBWU1FTlRfTUVU
SE9EX0JJTExJTkdfQUREUkVTUykKIHN0YXRpYyB2b2lkIGNvbnZlcnQoQ05MYWJlbGVkVmFsdWU8
Q05Qb3N0YWxBZGRyZXNzKj4gKnBvc3RhbEFkZHJlc3MsIEFwcGxlUGF5UGF5bWVudENvbnRhY3Qg
JnJlc3VsdCkKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiBhZGRyZXNzTGluZTsKLSAgICBpZiAoTlNT
dHJpbmcgKnN0cmVldCA9IHBvc3RhbEFkZHJlc3MudmFsdWUuc3RyZWV0KSB7Ci0gICAgICAgIGFk
ZHJlc3NMaW5lLmFwcGVuZChzdHJlZXQpOwotICAgICAgICByZXN1bHQuYWRkcmVzc0xpbmVzID0g
V1RGTW92ZShhZGRyZXNzTGluZSk7Ci0gICAgfQorICAgIGlmIChOU1N0cmluZyAqc3RyZWV0ID0g
cG9zdGFsQWRkcmVzcy52YWx1ZS5zdHJlZXQpCisgICAgICAgIHJlc3VsdC5hZGRyZXNzTGluZXMg
PSBWZWN0b3IgeyBTdHJpbmcgeyBzdHJlZXQgfSB9OwogICAgIHJlc3VsdC5zdWJMb2NhbGl0eSA9
IHBvc3RhbEFkZHJlc3MudmFsdWUuc3ViTG9jYWxpdHk7CiAgICAgcmVzdWx0LmxvY2FsaXR5ID0g
cG9zdGFsQWRkcmVzcy52YWx1ZS5jaXR5OwogICAgIHJlc3VsdC5zdWJBZG1pbmlzdHJhdGl2ZUFy
ZWEgPSBwb3N0YWxBZGRyZXNzLnZhbHVlLnN1YkFkbWluaXN0cmF0aXZlQXJlYTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNoZS5jcHAKaW5kZXggNDlmMzk4YWFmZWYzN2NkNWU4
ZjhlYjI0NGQ0ZTExZjM5ZjJhOGNkMy4uMmQ0NmQxY2RiYzcxN2YzYzkyOTllZmE4NjNhNTQ5MjYz
ODNhZjVkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNo
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNoZS5jcHAKQEAg
LTUxNSwxMCArNTE1LDggQEAgUmVjb3JkIERPTUNhY2hlOjp0b0Nvbm5lY3Rpb25SZWNvcmQoY29u
c3QgRmV0Y2hSZXF1ZXN0JiByZXF1ZXN0LCBGZXRjaFJlc3BvbnNlJgogCiB2b2lkIERPTUNhY2hl
OjpiYXRjaFB1dE9wZXJhdGlvbihjb25zdCBGZXRjaFJlcXVlc3QmIHJlcXVlc3QsIEZldGNoUmVz
cG9uc2UmIHJlc3BvbnNlLCBET01DYWNoZUVuZ2luZTo6UmVzcG9uc2VCb2R5JiYgcmVzcG9uc2VC
b2R5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEV4Y2VwdGlvbk9yPHZvaWQ+JiYpPiYmIGNhbGxi
YWNrKQogewotICAgIFZlY3RvcjxSZWNvcmQ+IHJlY29yZHM7Ci0gICAgcmVjb3Jkcy5hcHBlbmQo
dG9Db25uZWN0aW9uUmVjb3JkKHJlcXVlc3QsIHJlc3BvbnNlLCBXVEZNb3ZlKHJlc3BvbnNlQm9k
eSkpKTsKLQotICAgIGJhdGNoUHV0T3BlcmF0aW9uKFdURk1vdmUocmVjb3JkcyksIFdURk1vdmUo
Y2FsbGJhY2spKTsKKyAgICBhdXRvIHJlY29yZCA9IHRvQ29ubmVjdGlvblJlY29yZChyZXF1ZXN0
LCByZXNwb25zZSwgV1RGTW92ZShyZXNwb25zZUJvZHkpKTsKKyAgICBiYXRjaFB1dE9wZXJhdGlv
bih7IFdURk1vdmUocmVjb3JkKSB9LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQgRE9N
Q2FjaGU6OmJhdGNoUHV0T3BlcmF0aW9uKFZlY3RvcjxSZWNvcmQ+JiYgcmVjb3JkcywgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChFeGNlcHRpb25Pcjx2b2lkPiYmKT4mJiBjYWxsYmFjaykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmNwcAppbmRleCA2OTY5ZTBiNTAzYTg3
ZGQwMzg1ZTE4MzkwODg0NjcwZmVhMDRjMjY3Li41ODNmOWM4NTU1NjcxNzhjY2U3MmNhZDQ0Nzky
NGNmOGJjM2M0ZTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQv
R2FtZXBhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQu
Y3BwCkBAIC00Myw4ICs0Myw5IEBAIEdhbWVwYWQ6OkdhbWVwYWQoY29uc3QgUGxhdGZvcm1HYW1l
cGFkJiBwbGF0Zm9ybUdhbWVwYWQpCiAgICAgLCBtX2F4ZXMocGxhdGZvcm1HYW1lcGFkLmF4aXNW
YWx1ZXMoKS5zaXplKCksIDAuMCkKIHsKICAgICB1bnNpZ25lZCBidXR0b25Db3VudCA9IHBsYXRm
b3JtR2FtZXBhZC5idXR0b25WYWx1ZXMoKS5zaXplKCk7CisgICAgbV9idXR0b25zLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoYnV0dG9uQ291bnQpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBidXR0b25Db3VudDsgKytpKQotICAgICAgICBtX2J1dHRvbnMuYXBwZW5kKEdhbWVwYWRCdXR0
b246OmNyZWF0ZSgpKTsKKyAgICAgICAgbV9idXR0b25zLnVuY2hlY2tlZEFwcGVuZChHYW1lcGFk
QnV0dG9uOjpjcmVhdGUoKSk7CiB9CiAKIEdhbWVwYWQ6On5HYW1lcGFkKCkgPSBkZWZhdWx0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAK
aW5kZXggY2MzNzQ4NThjZmVhMWIyNDRjMDRiZDQxYjI5OTQ4ZDI5YWVhMzAzMC4uNTQzZmU0ODkx
NjdlN2NlMTNkNDk3NjhmYzdlMTVmMzRkMDgyMzZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZE1hbmFnZXIuY3BwCkBAIC03OSwxNCArNzksMTAgQEAg
dm9pZCBHYW1lcGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkQ29ubmVjdGVkKFBsYXRmb3JtR2Ft
ZXBhZCYgcGxhdGZvcm1HYW1lcGFkLAogCiB2b2lkIEdhbWVwYWRNYW5hZ2VyOjpwbGF0Zm9ybUdh
bWVwYWREaXNjb25uZWN0ZWQoUGxhdGZvcm1HYW1lcGFkJiBwbGF0Zm9ybUdhbWVwYWQpCiB7Ci0g
ICAgVmVjdG9yPFdlYWtQdHI8RE9NV2luZG93Pj4gd2Vha1dpbmRvd3M7Ci0gICAgZm9yIChhdXRv
KiBkb21XaW5kb3cgOiBtX2RvbVdpbmRvd3MpCi0gICAgICAgIHdlYWtXaW5kb3dzLmFwcGVuZCgq
ZG9tV2luZG93KTsKLQogICAgIEhhc2hTZXQ8TmF2aWdhdG9yR2FtZXBhZCo+IG5vdGlmaWVkTmF2
aWdhdG9yczsKIAogICAgIC8vIEhhbmRsZSB0aGUgZGlzY29ubmVjdCBmb3IgYWxsIERPTVdpbmRv
d3Mgd2l0aCBldmVudCBsaXN0ZW5lcnMgYW5kIHRoZWlyIE5hdmlnYXRvcnMuCi0gICAgZm9yIChh
dXRvJiB3aW5kb3cgOiB3ZWFrV2luZG93cykgeworICAgIGZvciAoYXV0byYgd2luZG93IDogY29w
eVRvVmVjdG9yT2Y8V2Vha1B0cjxET01XaW5kb3c+PihtX2RvbVdpbmRvd3MpKSB7CiAgICAgICAg
IC8vIEV2ZW50IGRpc3BhdGNoIG1pZ2h0IGhhdmUgbWFkZSB0aGlzIHdpbmRvdyBnbyBhd2F5Lgog
ICAgICAgICBpZiAoIXdpbmRvdykKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTQzLDExICsx
MzksNyBAQCB2b2lkIEdhbWVwYWRNYW5hZ2VyOjptYWtlR2FtZXBhZFZpc2libGUoUGxhdGZvcm1H
YW1lcGFkJiBwbGF0Zm9ybUdhbWVwYWQsIEhhc2hTZQogICAgIGZvciAoYXV0byogbmF2aWdhdG9y
IDogbmF2aWdhdG9yU2V0KQogICAgICAgICBuYXZpZ2F0b3ItPmdhbWVwYWRDb25uZWN0ZWQocGxh
dGZvcm1HYW1lcGFkKTsKIAotICAgIFZlY3RvcjxXZWFrUHRyPERPTVdpbmRvdz4+IHdlYWtXaW5k
b3dzOwotICAgIGZvciAoYXV0byogZG9tV2luZG93IDogbV9kb21XaW5kb3dzKQotICAgICAgICB3
ZWFrV2luZG93cy5hcHBlbmQoKmRvbVdpbmRvdyk7Ci0KLSAgICBmb3IgKGF1dG8mIHdpbmRvdyA6
IHdlYWtXaW5kb3dzKSB7CisgICAgZm9yIChhdXRvJiB3aW5kb3cgOiBjb3B5VG9WZWN0b3JPZjxX
ZWFrUHRyPERPTVdpbmRvdz4+KG1fZG9tV2luZG93cykpIHsKICAgICAgICAgLy8gRXZlbnQgZGlz
cGF0Y2ggbWlnaHQgaGF2ZSBtYWRlIHRoaXMgd2luZG93IGdvIGF3YXkuCiAgICAgICAgIGlmICgh
d2luZG93KQogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKaW5kZXggN2FhNjMyYjdlYzA0N2JlNDYwOGI1
MWEwOTRlYTFhNGU1N2EyNjI5Yi4uMGJlOGJkMTE2ZWMyMzYxMjNjNzE1MzJkN2VlMzZjNTZlOTk2
NTQ5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlLmNwcApAQCAtMTAyLDkgKzEwMiw3IEBAIFJlZjxET01TdHJpbmdMaXN0PiBJREJEYXRhYmFz
ZTo6b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNhbkN1cnJlbnRUaHJl
YWRBY2Nlc3NUaHJlYWRMb2NhbERhdGEob3JpZ2luVGhyZWFkKCkpKTsKIAotICAgIGF1dG8gb2Jq
ZWN0U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwotICAgIGZvciAoYXV0byYg
bmFtZSA6IG1faW5mby5vYmplY3RTdG9yZU5hbWVzKCkpCi0gICAgICAgIG9iamVjdFN0b3JlTmFt
ZXMtPmFwcGVuZChuYW1lKTsKKyAgICBhdXRvIG9iamVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdM
aXN0OjpjcmVhdGUobV9pbmZvLm9iamVjdFN0b3JlTmFtZXMoKSk7CiAgICAgb2JqZWN0U3RvcmVO
YW1lcy0+c29ydCgpOwogICAgIHJldHVybiBvYmplY3RTdG9yZU5hbWVzOwogfQpAQCAtMTc1LDE5
ICsxNzMsMTYgQEAgRXhjZXB0aW9uT3I8UmVmPElEQlRyYW5zYWN0aW9uPj4gSURCRGF0YWJhc2U6
OnRyYW5zYWN0aW9uKFN0cmluZ09yVmVjdG9yT2ZTdHJpbmcKICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiRmFpbGVkIHRvIGV4ZWN1dGUgJ3RyYW5zYWN0aW9u
JyBvbiAnSURCRGF0YWJhc2UnOiBUaGUgZGF0YWJhc2UgY29ubmVjdGlvbiBpcyBjbG9zaW5nLiJf
cyB9OwogCiAgICAgVmVjdG9yPFN0cmluZz4gb2JqZWN0U3RvcmVzOwotICAgIGlmIChzdGQ6Omhv
bGRzX2FsdGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+PihzdG9yZU5hbWVzKSkKKyAgICBpZiAoc3Rk
Ojpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oc3RvcmVOYW1lcykpIHsKICAgICAg
ICAgb2JqZWN0U3RvcmVzID0gV1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8U3RyaW5nPj4oc3RvcmVO
YW1lcykpOwotICAgIGVsc2UKKyAgICAgICAgLy8gSXQgaXMgdmFsaWQgZm9yIGphdmFzY3JpcHQg
dG8gcGFzcyBpbiBhIGxpc3Qgb2Ygb2JqZWN0IHN0b3JlIG5hbWVzIHdpdGggdGhlIHNhbWUgbmFt
ZSBsaXN0ZWQgdHdpY2UsCisgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gcHV0IHRoZW0gYWxsIGlu
IGEgc2V0IHRvIGdldCBhIHVuaXF1ZSBsaXN0LgorICAgICAgICBIYXNoU2V0PFN0cmluZz4gb2Jq
ZWN0U3RvcmVTZXQ7CisgICAgICAgIG9iamVjdFN0b3JlU2V0LmFkZChvYmplY3RTdG9yZXMuYmVn
aW4oKSwgb2JqZWN0U3RvcmVzLmVuZCgpKTsKKyAgICAgICAgb2JqZWN0U3RvcmVzID0gY29weVRv
VmVjdG9yKG9iamVjdFN0b3JlU2V0KTsKKyAgICB9IGVsc2UKICAgICAgICAgb2JqZWN0U3RvcmVz
LmFwcGVuZChXVEZNb3ZlKHN0ZDo6Z2V0PFN0cmluZz4oc3RvcmVOYW1lcykpKTsKIAotICAgIC8v
IEl0IGlzIHZhbGlkIGZvciBqYXZhc2NyaXB0IHRvIHBhc3MgaW4gYSBsaXN0IG9mIG9iamVjdCBz
dG9yZSBuYW1lcyB3aXRoIHRoZSBzYW1lIG5hbWUgbGlzdGVkIHR3aWNlLAotICAgIC8vIHNvIHdl
IG5lZWQgdG8gcHV0IHRoZW0gYWxsIGluIGEgc2V0IHRvIGdldCBhIHVuaXF1ZSBsaXN0LgotICAg
IEhhc2hTZXQ8U3RyaW5nPiBvYmplY3RTdG9yZVNldDsKLSAgICBmb3IgKGF1dG8mIG9iamVjdFN0
b3JlIDogb2JqZWN0U3RvcmVzKQotICAgICAgICBvYmplY3RTdG9yZVNldC5hZGQob2JqZWN0U3Rv
cmUpOwotCi0gICAgb2JqZWN0U3RvcmVzID0gY29weVRvVmVjdG9yKG9iamVjdFN0b3JlU2V0KTsK
LQogICAgIGZvciAoYXV0byYgb2JqZWN0U3RvcmVOYW1lIDogb2JqZWN0U3RvcmVzKSB7CiAgICAg
ICAgIGlmIChtX2luZm8uaGFzT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVOYW1lKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5
RGF0YS5oCmluZGV4IDRiOTc4NTM2OWQxOTBhNmIxOTY5MWQxMzdhZTE1NjdlNWMzNzk1ZDkuLjAy
ZjczMzQwM2YzYWQzMzRmZjI3OTUwMzdmYWU3ZjY1NWE2N2E3NDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAog
I2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgPHZhcmlhbnQ+CisjaW5jbHVkZSA8d3RmL0hh
c2hlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRTZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdIYXNoLmg+CiAKQEAgLTExNyw0MSArMTE4LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlcik7CiAgICAgfQogCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Ci0g
ICAgewotICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IGhhc2hDb2RlczsKLSAgICAgICAgaGFzaENv
ZGVzLmFwcGVuZChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV90eXBlKSk7Ci0gICAgICAgIGhhc2hD
b2Rlcy5hcHBlbmQobV9pc051bGwgPyAxIDogMCk7Ci0gICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQo
bV9pc0RlbGV0ZWRWYWx1ZSA/IDEgOiAwKTsKLSAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKLSAg
ICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OkludmFsaWQ6Ci0gICAgICAgIGNhc2UgSW5k
ZXhlZERCOjpLZXlUeXBlOjpNYXg6Ci0gICAgICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpN
aW46Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6
Ok51bWJlcjoKLSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OkRhdGU6Ci0gICAgICAg
ICAgICBoYXNoQ29kZXMuYXBwZW5kKFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoZG91
YmxlKT4oJnN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1ZSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6U3RyaW5nOgotICAgICAgICAgICAgaGFz
aENvZGVzLmFwcGVuZChTdHJpbmdIYXNoOjpoYXNoKHN0ZDo6Z2V0PFN0cmluZz4obV92YWx1ZSkp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6
QmluYXJ5OiB7Ci0gICAgICAgICAgICBhdXRvKiBkYXRhID0gc3RkOjpnZXQ8VGhyZWFkU2FmZURh
dGFCdWZmZXI+KG1fdmFsdWUpLmRhdGEoKTsKLSAgICAgICAgICAgIGlmICghZGF0YSkKLSAgICAg
ICAgICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKDApOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KGRhdGEt
PmRhdGEoKSwgZGF0YS0+c2l6ZSgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6QXJyYXk6Ci0gICAgICAgICAgICBmb3Ig
KGF1dG8mIGtleSA6IHN0ZDo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSkpCi0gICAg
ICAgICAgICAgICAgaGFzaENvZGVzLmFwcGVuZChrZXkuaGFzaCgpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9y
eShoYXNoQ29kZXMuZGF0YSgpLCBoYXNoQ29kZXMuc2l6ZSgpICogc2l6ZW9mKHVuc2lnbmVkKSk7
Ci0gICAgfQotCiAgICAgU3RyaW5nIHN0cmluZygpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NF
UlQobV90eXBlID09IEluZGV4ZWREQjo6S2V5VHlwZTo6U3RyaW5nKTsKQEAgLTE5Niw4ICsxNjIs
MzUgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnZhcmlhbnQ8VmVjdG9yPElEQktleURhdGE+LCBTdHJp
bmcsIGRvdWJsZSwgVGhyZWFkU2FmZURhdGFCdWZmZXI+IG1fdmFsdWU7CiB9OwogCitpbmxpbmUg
dm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEpCit7Cisg
ICAgYWRkKGhhc2hlciwga2V5RGF0YS50eXBlKCkpOworICAgIGFkZChoYXNoZXIsIGtleURhdGEu
aXNOdWxsKCkpOworICAgIHN3aXRjaCAoa2V5RGF0YS50eXBlKCkpIHsKKyAgICBjYXNlIEluZGV4
ZWREQjo6S2V5VHlwZTo6SW52YWxpZDoKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TWF4
OgorICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpNaW46CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpOdW1iZXI6CisgICAgICAgIGFkZChoYXNoZXIsIGtl
eURhdGEubnVtYmVyKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5
VHlwZTo6RGF0ZToKKyAgICAgICAgYWRkKGhhc2hlciwga2V5RGF0YS5kYXRlKCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6U3RyaW5nOgorICAgICAgICBh
ZGQoaGFzaGVyLCBrZXlEYXRhLnN0cmluZygpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJ
bmRleGVkREI6OktleVR5cGU6OkJpbmFyeToKKyAgICAgICAgYWRkKGhhc2hlciwga2V5RGF0YS5i
aW5hcnkoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpB
cnJheToKKyAgICAgICAgYWRkKGhhc2hlciwga2V5RGF0YS5hcnJheSgpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCiBzdHJ1Y3QgSURCS2V5RGF0YUhhc2ggewotICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IElEQktleURhdGEmIGEpIHsgcmV0dXJuIGEuaGFzaCgpOyB9CisgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgSURCS2V5RGF0YSYgYSkgeyByZXR1cm4gY29tcHV0
ZUhhc2goYSk7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBJREJLZXlEYXRhJiBhLCBj
b25zdCBJREJLZXlEYXRhJiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAppbmRl
eCAxNDM1MTQwYTVjYjRhMWExZDQwN2EyZGIyOWQxNWJkZjJkNTJjMGI2Li5jZTYzYzZhNTZiMTRk
NWJlMDMyMjU3MzcyNTMyMmI4MmYwZGRkZDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCkBAIC0xMjYsMTQgKzEyNiwxMSBA
QCBSZWY8RE9NU3RyaW5nTGlzdD4gSURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMoKSBjb25zdAog
ewogICAgIEFTU0VSVChjYW5DdXJyZW50VGhyZWFkQWNjZXNzVGhyZWFkTG9jYWxEYXRhKG1fdHJh
bnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSkpOwogCi0gICAgYXV0byBpbmRleE5h
bWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0KLSAgICBpZiAoIW1fZGVsZXRlZCkgewot
ICAgICAgICBmb3IgKGF1dG8mIG5hbWUgOiBtX2luZm8uaW5kZXhOYW1lcygpKQotICAgICAgICAg
ICAgaW5kZXhOYW1lcy0+YXBwZW5kKG5hbWUpOwotICAgICAgICBpbmRleE5hbWVzLT5zb3J0KCk7
Ci0gICAgfQorICAgIGlmIChtX2RlbGV0ZWQpCisgICAgICAgIHJldHVybiBET01TdHJpbmdMaXN0
OjpjcmVhdGUoKTsKIAorICAgIGF1dG8gaW5kZXhOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0
ZShtX2luZm8uaW5kZXhOYW1lcygpKTsKKyAgICBpbmRleE5hbWVzLT5zb3J0KCk7CiAgICAgcmV0
dXJuIGluZGV4TmFtZXM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAppbmRleCA2YzExMjFiNzMxMGY3MzdmN2I5NWJlY2Vl
ODQ1NGU2YWM1MGRmMmI2Li5jZTg2N2IxYjdlNmQ2ZjE1NDllY2Q3MjYxMjdkY2M3Njk5NWE5ZDA2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb24uY3BwCkBAIC0xMjEsMTIgKzEyMSw4IEBAIFJlZjxET01TdHJpbmdMaXN0PiBJREJUcmFu
c2FjdGlvbjo6b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNhbkN1cnJl
bnRUaHJlYWRBY2Nlc3NUaHJlYWRMb2NhbERhdGEobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkp
KTsKIAotICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+IG5hbWVzID0gaXNWZXJzaW9uQ2hhbmdlKCkg
PyBtX2RhdGFiYXNlLT5pbmZvKCkub2JqZWN0U3RvcmVOYW1lcygpIDogbV9pbmZvLm9iamVjdFN0
b3JlcygpOwotCi0gICAgUmVmPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMgPSBET01T
dHJpbmdMaXN0OjpjcmVhdGUoKTsKLSAgICBmb3IgKGF1dG8mIG5hbWUgOiBuYW1lcykKLSAgICAg
ICAgb2JqZWN0U3RvcmVOYW1lcy0+YXBwZW5kKG5hbWUpOwotCisgICAgYXV0byBuYW1lcyA9IGlz
VmVyc2lvbkNoYW5nZSgpID8gbV9kYXRhYmFzZS0+aW5mbygpLm9iamVjdFN0b3JlTmFtZXMoKSA6
IG1faW5mby5vYmplY3RTdG9yZXMoKTsKKyAgICBhdXRvIG9iamVjdFN0b3JlTmFtZXMgPSBET01T
dHJpbmdMaXN0OjpjcmVhdGUoV1RGTW92ZShuYW1lcykpOwogICAgIG9iamVjdFN0b3JlTmFtZXMt
PnNvcnQoKTsKICAgICByZXR1cm4gb2JqZWN0U3RvcmVOYW1lczsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3Qu
Y3BwCmluZGV4IDE5YTA2OWUyM2IzOWRiYjRhNzA2NWQ4ZGU3OGQ3ZWU0OTNjNjk4MTguLmI4MjVl
YzgwMDUxNDgwMjhlMmIwN2IxOWRjNzgzOTJhNDNhOGNiYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNw
cApAQCAtNTU1LDExICs1NTUsMTAgQEAgYm9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6c2hvd01lZGlh
Q29udHJvbHNDb250ZXh0TWVudShIVE1MRWxlbWVudCYgdGFyZ2V0LCBTdHJpbmcKIAogICAgIGlm
IChvcHRpb25zSlNPTk9iamVjdC0+Z2V0Qm9vbGVhbigiaW5jbHVkZUxhbmd1YWdlcyJfcykudmFs
dWVfb3IoZmFsc2UpKSB7CiAgICAgICAgIGlmIChhdXRvKiBhdWRpb1RyYWNrcyA9IG1lZGlhRWxl
bWVudC5hdWRpb1RyYWNrcygpOyBhdWRpb1RyYWNrcyAmJiBhdWRpb1RyYWNrcy0+bGVuZ3RoKCkg
PiAxKSB7Ci0gICAgICAgICAgICBWZWN0b3I8TWVudUl0ZW0+IGxhbmd1YWdlTWVudUl0ZW1zOwot
CiAgICAgICAgICAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBwYWdlLT5ncm91cCgpLmVu
c3VyZUNhcHRpb25QcmVmZXJlbmNlcygpOwotICAgICAgICAgICAgZm9yIChhdXRvJiBhdWRpb1Ry
YWNrIDogY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUoYXVkaW9UcmFj
a3MpKQotICAgICAgICAgICAgICAgIGxhbmd1YWdlTWVudUl0ZW1zLmFwcGVuZChjcmVhdGVNZW51
SXRlbShhdWRpb1RyYWNrLCBjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFjayhh
dWRpb1RyYWNrLmdldCgpKSwgYXVkaW9UcmFjay0+ZW5hYmxlZCgpKSk7CisgICAgICAgICAgICBh
dXRvIGxhbmd1YWdlTWVudUl0ZW1zID0gY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlz
dEZvck1lbnUoYXVkaW9UcmFja3MpLm1hcChbJl0oYXV0byYgYXVkaW9UcmFjaykgeworICAgICAg
ICAgICAgICAgIHJldHVybiBjcmVhdGVNZW51SXRlbShhdWRpb1RyYWNrLCBjYXB0aW9uUHJlZmVy
ZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFjayhhdWRpb1RyYWNrLmdldCgpKSwgYXVkaW9UcmFjay0+
ZW5hYmxlZCgpKTsKKyAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICBpZiAoIWxhbmd1YWdl
TWVudUl0ZW1zLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBpdGVtcy5hcHBlbmQoY3JlYXRl
U3VibWVudShXRUJfVUlfU1RSSU5HX0tFWSgiTGFuZ3VhZ2VzIiwgIkxhbmd1YWdlcyAoTWVkaWEg
Q29udHJvbHMgTWVudSkiLCAiTGFuZ3VhZ2VzIG1lZGlhIGNvbnRyb2xzIGNvbnRleHQgbWVudSB0
aXRsZSIpLCAiZ2xvYmUiX3MsIFdURk1vdmUobGFuZ3VhZ2VNZW51SXRlbXMpKSk7CkBAIC01Njgs
MTUgKzU2NywxMyBAQCBib29sIE1lZGlhQ29udHJvbHNIb3N0OjpzaG93TWVkaWFDb250cm9sc0Nv
bnRleHRNZW51KEhUTUxFbGVtZW50JiB0YXJnZXQsIFN0cmluZwogCiAgICAgaWYgKG9wdGlvbnNK
U09OT2JqZWN0LT5nZXRCb29sZWFuKCJpbmNsdWRlU3VidGl0bGVzIl9zKS52YWx1ZV9vcihmYWxz
ZSkpIHsKICAgICAgICAgaWYgKGF1dG8qIHRleHRUcmFja3MgPSBtZWRpYUVsZW1lbnQudGV4dFRy
YWNrcygpOyB0ZXh0VHJhY2tzICYmIHRleHRUcmFja3MtPmxlbmd0aCgpKSB7Ci0gICAgICAgICAg
ICBWZWN0b3I8TWVudUl0ZW0+IHN1YnRpdGxlTWVudUl0ZW1zOwotCiAgICAgICAgICAgICBhdXRv
JiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBwYWdlLT5ncm91cCgpLmVuc3VyZUNhcHRpb25QcmVmZXJl
bmNlcygpOwogICAgICAgICAgICAgYXV0byBzb3J0ZWRUZXh0VHJhY2tzID0gY2FwdGlvblByZWZl
cmVuY2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUodGV4dFRyYWNrcywgeyBUZXh0VHJhY2s6Oktp
bmQ6OlN1YnRpdGxlcywgVGV4dFRyYWNrOjpLaW5kOjpDYXB0aW9ucywgVGV4dFRyYWNrOjpLaW5k
OjpEZXNjcmlwdGlvbnMgfSk7CiAgICAgICAgICAgICBib29sIGFsbFRyYWNrc0Rpc2FibGVkID0g
bm90Rm91bmQgPT0gc29ydGVkVGV4dFRyYWNrcy5maW5kSWYoW10gKGNvbnN0IGF1dG8mIHRleHRU
cmFjaykgewogICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0VHJhY2stPm1vZGUoKSA9PSBUZXh0
VHJhY2s6Ok1vZGU6OlNob3dpbmc7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGJvb2wg
dXNlc0F1dG9tYXRpY1RyYWNrID0gY2FwdGlvblByZWZlcmVuY2VzLmNhcHRpb25EaXNwbGF5TW9k
ZSgpID09IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OkF1dG9tYXRpYyAmJiBhbGxUcmFja3NEaXNh
YmxlZDsKLSAgICAgICAgICAgIGZvciAoYXV0byYgdGV4dFRyYWNrIDogc29ydGVkVGV4dFRyYWNr
cykgeworICAgICAgICAgICAgYXV0byBzdWJ0aXRsZU1lbnVJdGVtcyA9IHNvcnRlZFRleHRUcmFj
a3MubWFwKFsmXShhdXRvJiB0ZXh0VHJhY2spIHsKICAgICAgICAgICAgICAgICBib29sIGNoZWNr
ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAoYWxsVHJhY2tzRGlzYWJsZWQgJiYgdGV4
dFRyYWNrID09ICZUZXh0VHJhY2s6OmNhcHRpb25NZW51T2ZmSXRlbSgpICYmIChjYXB0aW9uUHJl
ZmVyZW5jZXMuY2FwdGlvbkRpc3BsYXlNb2RlKCkgPT0gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6
Rm9yY2VkT25seSB8fCBjYXB0aW9uUHJlZmVyZW5jZXMuY2FwdGlvbkRpc3BsYXlNb2RlKCkgPT0g
Q2FwdGlvblVzZXJQcmVmZXJlbmNlczo6TWFudWFsKSkKICAgICAgICAgICAgICAgICAgICAgY2hl
Y2tlZCA9IHRydWU7CkBAIC01ODQsOCArNTgxLDggQEAgYm9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6
c2hvd01lZGlhQ29udHJvbHNDb250ZXh0TWVudShIVE1MRWxlbWVudCYgdGFyZ2V0LCBTdHJpbmcK
ICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoIXVzZXNBdXRvbWF0aWNUcmFjayAmJiB0ZXh0VHJhY2stPm1vZGUoKSA9PSBUZXh0VHJh
Y2s6Ok1vZGU6OlNob3dpbmcpCiAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIHN1YnRpdGxlTWVudUl0ZW1zLmFwcGVuZChjcmVhdGVNZW51SXRlbSh0
ZXh0VHJhY2ssIGNhcHRpb25QcmVmZXJlbmNlcy5kaXNwbGF5TmFtZUZvclRyYWNrKHRleHRUcmFj
ay5nZXQoKSksIGNoZWNrZWQpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1
cm4gY3JlYXRlTWVudUl0ZW0odGV4dFRyYWNrLCBjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5h
bWVGb3JUcmFjayh0ZXh0VHJhY2suZ2V0KCkpLCBjaGVja2VkKTsKKyAgICAgICAgICAgIH0pOwog
CiAgICAgICAgICAgICBpZiAoIXN1YnRpdGxlTWVudUl0ZW1zLmlzRW1wdHkoKSkKICAgICAgICAg
ICAgICAgICBpdGVtcy5hcHBlbmQoY3JlYXRlU3VibWVudShXRUJfVUlfU1RSSU5HX0tFWSgiU3Vi
dGl0bGVzIiwgIlN1YnRpdGxlcyAoTWVkaWEgQ29udHJvbHMgTWVudSkiLCAiU3VidGl0bGVzIG1l
ZGlhIGNvbnRyb2xzIGNvbnRleHQgbWVudSB0aXRsZSIpLCAiY2FwdGlvbnMuYnViYmxlIl9zLCBX
VEZNb3ZlKHN1YnRpdGxlTWVudUl0ZW1zKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcAppbmRleCA5MTI3NDdmNDA2YzI5NTk0OTk3
M2I1YmIxMzQ5ZGJjYTY3NDFjMTM1Li5hMmU2NThhOTJmOTk3ZDdmNGI0M2UxNzAzZjRhMGUwOTQ5
MTdiMGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01l
ZGlhU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01l
ZGlhU291cmNlLmNwcApAQCAtMTA1MSwxMCArMTA1MSw5IEBAIHZvaWQgTWVkaWFTb3VyY2U6Om9u
UmVhZHlTdGF0ZUNoYW5nZShSZWFkeVN0YXRlIG9sZFN0YXRlLCBSZWFkeVN0YXRlIG5ld1N0YXRl
KQogCiBWZWN0b3I8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVNvdXJjZTo6YWN0aXZlUmFuZ2Vz
KCkgY29uc3QKIHsKLSAgICBWZWN0b3I8UGxhdGZvcm1UaW1lUmFuZ2VzPiBhY3RpdmVSYW5nZXM7
Ci0gICAgZm9yIChhdXRvJiBzb3VyY2VCdWZmZXIgOiAqbV9hY3RpdmVTb3VyY2VCdWZmZXJzKQot
ICAgICAgICBhY3RpdmVSYW5nZXMuYXBwZW5kKHNvdXJjZUJ1ZmZlci0+YnVmZmVyZWRJbnRlcm5h
bCgpLnJhbmdlcygpKTsKLSAgICByZXR1cm4gYWN0aXZlUmFuZ2VzOworICAgIHJldHVybiBXVEY6
Om1hcCgqbV9hY3RpdmVTb3VyY2VCdWZmZXJzLCBbXShhdXRvJiBzb3VyY2VCdWZmZXIpIHsKKyAg
ICAgICAgcmV0dXJuIHNvdXJjZUJ1ZmZlci0+YnVmZmVyZWRJbnRlcm5hbCgpLnJhbmdlcygpOwor
ICAgIH0pOwogfQogCiBFeGNlcHRpb25PcjxSZWY8U291cmNlQnVmZmVyUHJpdmF0ZT4+IE1lZGlh
U291cmNlOjpjcmVhdGVTb3VyY2VCdWZmZXJQcml2YXRlKGNvbnN0IENvbnRlbnRUeXBlJiBpbmNv
bWluZ1R5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNl
L1NhbXBsZU1hcC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9TYW1wbGVN
YXAuaAppbmRleCBlYWY0OTMxNTk3ZDI2ODUyM2M2NjdiZDljZGNjNGNlYTY1NDMzNjk1Li5hZjFl
MTA0NTgxNzg3ZjE1ZjZmMWYzODViMjU3MjQ0NGQ4ODU5NWZhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1hcC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmgKQEAgLTkxLDYgKzkxLDcgQEAgcHVi
bGljOgogICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4g
bV9zYW1wbGVzLnJiZWdpbigpOyB9CiAgICAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1
cm4gbV9zYW1wbGVzLnJlbmQoKTsgfQogICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5yZW5kKCk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5zaXplKCk7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIGl0
ZXJhdG9yIGZpbmRTYW1wbGVXaXRoRGVjb2RlS2V5KGNvbnN0IEtleVR5cGUmKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBpdGVyYXRvciBmaW5kU2FtcGxlQWZ0ZXJEZWNvZGVLZXkoY29uc3QgS2V5VHlw
ZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3Vy
Y2VCdWZmZXJMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJj
ZUJ1ZmZlckxpc3QuaAppbmRleCBmYzZlMDczYWI5MGU3NmQxODE1Zjg4OTZiNmY2NjA5NmRmMmZk
ZGQ1Li5iZDZlM2I3N2M5ZDc0MzBmZWEyMTZlOGFlYWY4ZDEzM2JjMjY3YzFlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3Qu
aApAQCAtNDcsOCArNDcsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxTb3VyY2VCdWZmZXJM
aXN0PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogICAgIHZpcnR1YWwgflNvdXJj
ZUJ1ZmZlckxpc3QoKTsKIAotICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9saXN0LnNpemUoKTsgfQotICAgIFNvdXJjZUJ1ZmZlciogaXRlbSh1bnNpZ25lZCBsb25n
IGluZGV4KSBjb25zdCB7IHJldHVybiAoaW5kZXggPCBtX2xpc3Quc2l6ZSgpKSA/IG1fbGlzdFtp
bmRleF0uZ2V0KCkgOiBudWxscHRyOyB9CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gbV9saXN0LnNpemUoKTsgfQorCisgICAgU291cmNlQnVmZmVyKiBpdGVtKHVuc2lnbmVk
IGluZGV4KSBjb25zdCB7IHJldHVybiAoaW5kZXggPCBtX2xpc3Quc2l6ZSgpKSA/IG1fbGlzdFtp
bmRleF0uZ2V0KCkgOiBudWxscHRyOyB9CiAKICAgICB2b2lkIGFkZChSZWY8U291cmNlQnVmZmVy
PiYmKTsKICAgICB2b2lkIHJlbW92ZShTb3VyY2VCdWZmZXImKTsKQEAgLTU4LDYgKzU5LDkgQEAg
cHVibGljOgogCiAgICAgVmVjdG9yPFJlZlB0cjxTb3VyY2VCdWZmZXI+Pjo6aXRlcmF0b3IgYmVn
aW4oKSB7IHJldHVybiBtX2xpc3QuYmVnaW4oKTsgfQogICAgIFZlY3RvcjxSZWZQdHI8U291cmNl
QnVmZmVyPj46Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fbGlzdC5lbmQoKTsgfQorICAgIFZl
Y3RvcjxSZWZQdHI8U291cmNlQnVmZmVyPj46OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Qg
eyByZXR1cm4gbV9saXN0LmJlZ2luKCk7IH0KKyAgICBWZWN0b3I8UmVmUHRyPFNvdXJjZUJ1ZmZl
cj4+Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2xpc3QuZW5kKCk7IH0K
KyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KIAogICAg
IC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQogICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50
VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gU291cmNlQnVmZmVyTGlzdEV2
ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
c3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5jcHAKaW5kZXggZWFmM2EyZTFlNzk4YTQ4MWY3NjhiMzNj
NWZkMjlkM2M3Y2JhYjNhZS4uODJjMWEzYTBjMDcyNTVjMWU4MGRhNjFkNTkwYmE5Yzk0MWNjMDY5
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhl
c2lzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVz
aXMuY3BwCkBAIC05Myw5ICs5MywxMCBAQCBjb25zdCBWZWN0b3I8UmVmPFNwZWVjaFN5bnRoZXNp
c1ZvaWNlPj4mIFNwZWVjaFN5bnRoZXNpczo6Z2V0Vm9pY2VzKCkKICAgICAgICAgcmV0dXJuIG1f
dm9pY2VMaXN0OwogCiAgICAgLy8gSWYgdGhlIHZvaWNlTGlzdCBpcyBlbXB0eSwgdGhhdCdzIHRo
ZSBjdWUgdG8gZ2V0IHRoZSB2b2ljZXMgZnJvbSB0aGUgcGxhdGZvcm0gYWdhaW4uCi0gICAgZm9y
IChhdXRvJiB2b2ljZSA6IG1fc3BlZWNoU3ludGhlc2lzQ2xpZW50ID8gbV9zcGVlY2hTeW50aGVz
aXNDbGllbnQtPnZvaWNlTGlzdCgpIDogZW5zdXJlUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcigp
LnZvaWNlTGlzdCgpKQotICAgICAgICBtX3ZvaWNlTGlzdC5hcHBlbmQoU3BlZWNoU3ludGhlc2lz
Vm9pY2U6OmNyZWF0ZSgqdm9pY2UpKTsKLQorICAgIGF1dG8mIHZvaWNlTGlzdCA9IG1fc3BlZWNo
U3ludGhlc2lzQ2xpZW50ID8gbV9zcGVlY2hTeW50aGVzaXNDbGllbnQtPnZvaWNlTGlzdCgpIDog
ZW5zdXJlUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcigpLnZvaWNlTGlzdCgpOworICAgIG1fdm9p
Y2VMaXN0ID0gdm9pY2VMaXN0Lm1hcChbXShhdXRvJiB2b2ljZSkgeworICAgICAgICByZXR1cm4g
U3BlZWNoU3ludGhlc2lzVm9pY2U6OmNyZWF0ZSgqdm9pY2UpOworICAgIH0pOwogICAgIHJldHVy
biBtX3ZvaWNlTGlzdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9z
cGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2subW0gYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFzay5tbQppbmRleCBmMWI5
Njk1ODA1N2QyZmU2MDQ0ZDJjN2IyNTlkYjZjNWNlYjQ0ZWZlLi5hNWU4NWFmODI5YmMwZGRkZWY2
MmM2MWE0ZjZjOWYyY2YyYWQ2Y2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFzay5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFzay5tbQpAQCAt
MTI4LDkgKzEyOCw4IEBAIC0gKHZvaWQpY2FsbGJhY2tXaXRoVHJhbnNjcmlwdGlvbnM6KE5TQXJy
YXk8U0ZUcmFuc2NyaXB0aW9uICo+ICopdHJhbnNjcmlwdGlvbnMKICAgICAgICAgaWYgKGFsdGVy
bmF0aXZlcy5zaXplKCkgPT0gX21heEFsdGVybmF0aXZlcykKICAgICAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICBWZWN0b3I8U3BlZWNoUmVjb2duaXRpb25SZXN1bHREYXRhPiBkYXRhczsKLSAg
ICBkYXRhcy5hcHBlbmQoU3BlZWNoUmVjb2duaXRpb25SZXN1bHREYXRhIHsgV1RGTW92ZShhbHRl
cm5hdGl2ZXMpLCBib29sKGlzRmluYWwpIH0pOwotICAgIF9kZWxlZ2F0ZUNhbGxiYWNrKFNwZWVj
aFJlY29nbml0aW9uVXBkYXRlOjpjcmVhdGVSZXN1bHQoX2lkZW50aWZpZXIsIFdURk1vdmUoZGF0
YXMpKSk7CisgICAgU3BlZWNoUmVjb2duaXRpb25SZXN1bHREYXRhIGRhdGEgeyBXVEZNb3ZlKGFs
dGVybmF0aXZlcyksICEhaXNGaW5hbCB9OworICAgIF9kZWxlZ2F0ZUNhbGxiYWNrKFNwZWVjaFJl
Y29nbml0aW9uVXBkYXRlOjpjcmVhdGVSZXN1bHQoX2lkZW50aWZpZXIsIHsgV1RGTW92ZShkYXRh
KSB9KSk7CiB9CiAKIC0gKHZvaWQpYXVkaW9TYW1wbGVzQXZhaWxhYmxlOihDTVNhbXBsZUJ1ZmZl
clJlZilzYW1wbGVCdWZmZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3Bl
ZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrTW9jay5tbSBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrTW9jay5tbQppbmRl
eCBiYzVjNjIxOWI1ZGFkYzNiMWNkYzU5MGQ2NWM4OTdiNzI1MGIxZTIxLi45NjNmYjQ3YzRjODVh
YTA2MDVhMmRhYmM3MTllNTY3NGMyNjBhYmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFza01vY2subW0KKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRh
c2tNb2NrLm1tCkBAIC02MywxMSArNjMsOSBAQCAtICh2b2lkKWF1ZGlvU2FtcGxlc0F2YWlsYWJs
ZTooQ01TYW1wbGVCdWZmZXJSZWYpc2FtcGxlQnVmZmVyCiAgICAgfQogCiAgICAgLy8gRmFrZSBz
b21lIHJlY29nbml0aW9uIHJlc3VsdHMuCi0gICAgVmVjdG9yPFNwZWVjaFJlY29nbml0aW9uQWx0
ZXJuYXRpdmVEYXRhPiBhbHRlcm5hdGl2ZXM7Ci0gICAgYWx0ZXJuYXRpdmVzLmFwcGVuZChTcGVl
Y2hSZWNvZ25pdGlvbkFsdGVybmF0aXZlRGF0YSB7ICJUZXN0IiwgMS4wIH0pOwotICAgIFZlY3Rv
cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdERhdGE+IGRhdGFzOwotICAgIGRhdGFzLmFwcGVuZChT
cGVlY2hSZWNvZ25pdGlvblJlc3VsdERhdGEgeyBXVEZNb3ZlKGFsdGVybmF0aXZlcyksIHRydWUg
IH0pOwotICAgIF9kZWxlZ2F0ZUNhbGxiYWNrKFNwZWVjaFJlY29nbml0aW9uVXBkYXRlOjpjcmVh
dGVSZXN1bHQoX2lkZW50aWZpZXIsIFdURk1vdmUoZGF0YXMpKSk7CisgICAgU3BlZWNoUmVjb2du
aXRpb25BbHRlcm5hdGl2ZURhdGEgYWx0ZXJuYXRpdmUgeyAiVGVzdCIsIDEuMCB9OworICAgIFNw
ZWVjaFJlY29nbml0aW9uUmVzdWx0RGF0YSBkYXRhIHsgeyBXVEZNb3ZlKGFsdGVybmF0aXZlKSB9
LCB0cnVlIH07CisgICAgX2RlbGVnYXRlQ2FsbGJhY2soU3BlZWNoUmVjb2duaXRpb25VcGRhdGU6
OmNyZWF0ZVJlc3VsdChfaWRlbnRpZmllciwgeyBXVEZNb3ZlKGRhdGEpIH0pKTsKIAogICAgIGlm
ICghX2RvTXVsdGlwbGVSZWNvZ25pdGlvbnMpCiAgICAgICAgIFtzZWxmIGFib3J0XTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCmluZGV4
IGUzNTlhMDQzYjJlM2NmMzlmOWMyNmJjNTllOThmMTA1ZTEzMmMxMDUuLjhiY2U2NjcwNjZhM2Y3
NzZmMGVhYmE5NjZiODFhNzQ2YTk3NWUzMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYW5p
bWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcApAQCAtMTY0LDEwICsxNjQsOCBAQCBzdGF0
aWMgaW5saW5lIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRGdW5jKGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbnMmIGZyb20sIGNvbgogICAgIGlmIChjb250ZXh0LmNvbXBvc2l0ZU9wZXJhdGlvbiA9
PSBDb21wb3NpdGVPcGVyYXRpb246OkFkZCkgewogICAgICAgICBBU1NFUlQoY29udGV4dC5wcm9n
cmVzcyA9PSAxLjApOwogICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIHJlc3VsdE9wZXJhdGlv
bnM7Ci0gICAgICAgIGZvciAoYXV0byBvcGVyYXRpb24gOiBmcm9tLm9wZXJhdGlvbnMoKSkKLSAg
ICAgICAgICAgIHJlc3VsdE9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChvcGVyYXRpb24p
OwotICAgICAgICBmb3IgKGF1dG8gb3BlcmF0aW9uIDogdG8ub3BlcmF0aW9ucygpKQotICAgICAg
ICAgICAgcmVzdWx0T3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKG9wZXJhdGlvbik7Cisg
ICAgICAgIHJlc3VsdE9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZFZlY3Rvcihmcm9tLm9w
ZXJhdGlvbnMoKSk7CisgICAgICAgIHJlc3VsdE9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVu
ZFZlY3Rvcih0by5vcGVyYXRpb25zKCkpOwogICAgICAgICByZXR1cm4gcmVzdWx0T3BlcmF0aW9u
czsKICAgICB9CiAgICAgYXV0byBib3hTaXplID0gaXM8UmVuZGVyQm94Pihjb250ZXh0LmNsaWVu
dC0+cmVuZGVyZXIoKSkgPyBkb3duY2FzdDxSZW5kZXJCb3g+KCpjb250ZXh0LmNsaWVudC0+cmVu
ZGVyZXIoKSkuYm9yZGVyQm94UmVjdCgpLnNpemUoKSA6IExheW91dFNpemUoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmVzQ29udHJvbGxl
ci5jcHAKaW5kZXggYjVmZDJhZWYxMDAwMTJkYTljNGJkYjIxZTdhZDA0MWEzNjY0MTZiZi4uNzA5
NDUzYmM2NjI1MmY5NTk4MjRiYTk0ZWNhN2EzMzAwOGM5Y2EzYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmVzQ29udHJvbGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmVzQ29udHJvbGxlci5jcHAK
QEAgLTk4LDkgKzk4LDcgQEAgdm9pZCBEb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXI6OnVwZGF0
ZUFuaW1hdGlvbnNBbmRTZW5kRXZlbnRzKFJlZHVjZWRSZXNvbHV0aW8KICAgICBBU1NFUlQoIW1f
dGltZWxpbmVzLmhhc051bGxSZWZlcmVuY2VzKCkpOwogCiAgICAgLy8gV2UgbmVlZCB0byBjb3B5
IG1fdGltZWxpbmVzIGJlZm9yZSBpdGVyYXRpbmcgb3ZlciBpdHMgbWVtYmVycyBzaW5jZSB0aGUg
c3RlcHMgaW4gdGhpcyBwcm9jZWR1cmUgbWF5IG11dGF0ZSBtX3RpbWVsaW5lcy4KLSAgICBWZWN0
b3I8UmVmPERvY3VtZW50VGltZWxpbmU+PiBwcm90ZWN0ZWRUaW1lbGluZXM7Ci0gICAgZm9yIChh
dXRvJiB0aW1lbGluZSA6IG1fdGltZWxpbmVzKQotICAgICAgICBwcm90ZWN0ZWRUaW1lbGluZXMu
YXBwZW5kKHRpbWVsaW5lKTsKKyAgICBhdXRvIHByb3RlY3RlZFRpbWVsaW5lcyA9IGNvcHlUb1Zl
Y3Rvck9mPFJlZjxEb2N1bWVudFRpbWVsaW5lPj4obV90aW1lbGluZXMpOwogCiAgICAgLy8gV2Ug
bmVlZCB0byBmcmVlemUgdGhlIGN1cnJlbnQgdGltZSBldmVuIGlmIG5vIGFuaW1hdGlvbiBpcyBy
dW5uaW5nLgogICAgIC8vIGRvY3VtZW50LnRpbWVsaW5lLmN1cnJlbnRUaW1lIG1heSBiZSBjYWxs
ZWQgZnJvbSBhIHJBRiBjYWxsYmFjayBhbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5
ZnJhbWVFZmZlY3QuY3BwCmluZGV4IDQ0NDRjY2QwODdhZTQ4MDQ4MGM1ODlmZjRkNjg4ZTNmYzdj
MWEyNmEuLjNkMDkxZWVlNTM4NzQ0MjAzZjczOGI4NmMwNzY3NjU3ZjRlY2YwOGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcApAQCAtMzc1LDggKzM3NSw3
IEBAIHN0YXRpYyBpbmxpbmUgRXhjZXB0aW9uT3I8dm9pZD4gcHJvY2Vzc1Byb3BlcnR5SW5kZXhl
ZEtleWZyYW1lcyhKU0dsb2JhbE9iamVjdCYKICAgICAgICAgY29tcHV0ZU1pc3NpbmdLZXlmcmFt
ZU9mZnNldHMocHJvcGVydHlLZXlmcmFtZXMpOwogCiAgICAgICAgIC8vIDcuIEFkZCBrZXlmcmFt
ZXMgaW4gcHJvcGVydHkga2V5ZnJhbWVzIHRvIHByb2Nlc3NlZCBrZXlmcmFtZXMuCi0gICAgICAg
IGZvciAoYXV0byYga2V5ZnJhbWUgOiBwcm9wZXJ0eUtleWZyYW1lcykKLSAgICAgICAgICAgIHBh
cnNlZEtleWZyYW1lcy5hcHBlbmQoV1RGTW92ZShrZXlmcmFtZSkpOworICAgICAgICBwYXJzZWRL
ZXlmcmFtZXMuYXBwZW5kVmVjdG9yKHByb3BlcnR5S2V5ZnJhbWVzKTsKICAgICB9CiAKICAgICAv
LyAzLiBTb3J0IHByb2Nlc3NlZCBrZXlmcmFtZXMgYnkgdGhlIGNvbXB1dGVkIGtleWZyYW1lIG9m
ZnNldCBvZiBlYWNoIGtleWZyYW1lIGluIGluY3JlYXNpbmcgb3JkZXIuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uY3BwCmluZGV4
IDUzNDllZjM4ZmU2OTA2NGRkNDUzZmQ2OGQ3ZGM2YThlZTc3M2Q5ZWMuLmMwNWNkODk0MTVmZjQx
MjA0ZTNjM2M4Yzc3M2Y0OGQxMTM2M2MwOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uY3BwCkBAIC00Niw4ICs0Niw3IEBA
IENvbnRlbnRFeHRlbnNpb246OkNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBpZGVudGlm
aWVyLCBSZWY8Q29tcGlsZWRDb250ZW50CiAgICAgLCBtX2V4dGVuc2lvbkJhc2VVUkwoV1RGTW92
ZShleHRlbnNpb25CYXNlVVJMKSkKIHsKICAgICBERkFCeXRlY29kZUludGVycHJldGVyIGludGVy
cHJldGVyKG1fY29tcGlsZWRFeHRlbnNpb24tPnVybEZpbHRlcnNCeXRlY29kZSgpKTsKLSAgICBm
b3IgKHVpbnQ2NF90IGFjdGlvbiA6IGludGVycHJldGVyLmFjdGlvbnNNYXRjaGluZ0V2ZXJ5dGhp
bmcoKSkKLSAgICAgICAgbV91bml2ZXJzYWxBY3Rpb25zLmFwcGVuZChhY3Rpb24pOworICAgIG1f
dW5pdmVyc2FsQWN0aW9ucyA9IGNvcHlUb1ZlY3RvcihpbnRlcnByZXRlci5hY3Rpb25zTWF0Y2hp
bmdFdmVyeXRoaW5nKCkpOwogCiAgICAgaWYgKHNob3VsZENvbXBpbGVDU1MgPT0gU2hvdWxkQ29t
cGlsZUNTUzo6WWVzKQogICAgICAgICBjb21waWxlR2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgKaW5kZXggYmIxMjczYTVmZDNlZThlNjg4MGJh
NzY3YWY5MjkxN2ViZGRhNzQ4Zi4uZjlhNzYwNjA0MDg5YjBjZTJmNjlmODc2ODY1NGYxMjY4MjM3
YTY3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaApAQCAtNTgsNiArNTgsNyBAQCBwdWJs
aWM6CiAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuZW5k
KCk7IH0KICAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0K
ICAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorICAgIHNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpOyB9CiAKICAgICB2b2lkIGFw
cGVuZChSZWY8Q1NTVmFsdWU+JiYpOwogICAgIHZvaWQgcHJlcGVuZChSZWY8Q1NTVmFsdWU+JiYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5v
ZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3Bw
CmluZGV4IDZhYjVjYjY3NGQ0MTUzZDgyMjUyZjI1ODdlZTQ2ZmNmNWFhYzhjNGEuLjc5ZjJhODgy
NjBjZWFlZjBkNTgwMTU3NjYxMzljMDc1NzY2N2MwMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAKQEAgLTYyMCwxNCArNjIwLDExIEBA
IHZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmhvaXN0Q2hpbGRyZW5XaXRoT3BlcmF0b3IoQ2Fs
Y09wZXJhdG9yIG9wKQogCiAgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBu
ZXdDaGlsZHJlbjsKICAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikgewotICAgICAg
ICBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkKSAmJiBkb3duY2FzdDxDU1NDYWxj
T3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpLmNhbGNPcGVyYXRvcigpID09IG9wKSB7Ci0gICAg
ICAgICAgICBhdXRvJiBjaGlsZHJlbiA9IGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihj
aGlsZC5nZXQoKSkuY2hpbGRyZW4oKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY2hpbGRUb01v
dmUgOiBjaGlsZHJlbikKLSAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmQoV1RGTW92
ZShjaGlsZFRvTW92ZSkpOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgaWYgKGlzPENTU0NhbGNP
cGVyYXRpb25Ob2RlPihjaGlsZCkgJiYgZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNo
aWxkLmdldCgpKS5jYWxjT3BlcmF0b3IoKSA9PSBvcCkKKyAgICAgICAgICAgIG5ld0NoaWxkcmVu
LmFwcGVuZFZlY3Rvcihkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkp
LmNoaWxkcmVuKCkpOworICAgICAgICBlbHNlCiAgICAgICAgICAgICBuZXdDaGlsZHJlbi5hcHBl
bmQoV1RGTW92ZShjaGlsZCkpOwogICAgIH0KLSAgICAKICAgICBuZXdDaGlsZHJlbi5zaHJpbmtU
b0ZpdCgpOwogICAgIG1fY2hpbGRyZW4gPSBXVEZNb3ZlKG5ld0NoaWxkcmVuKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdMaXN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRE9NU3RyaW5nTGlzdC5oCmluZGV4IDY5Y2IyZDdmOTMyZTAwYTI2NWUwOGQ4ZmYzYjFj
YjUwYzEyNzdjZTUuLjMxNzJiMzM2ZjViNTI0NWU3MTA1YjkwNWY3NTY3NGZjMTc3YzEwNWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdMaXN0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RPTVN0cmluZ0xpc3QuaApAQCAtNDAsOSArNDAsMTQgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBET01TdHJpbmdMaXN0KTsKICAgICB9CiAKKyAg
ICBzdGF0aWMgUmVmPERPTVN0cmluZ0xpc3Q+IGNyZWF0ZShWZWN0b3I8U3RyaW5nPiYmIHN0cmlu
Z3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBET01TdHJpbmdMaXN0KFdU
Rk1vdmUoc3RyaW5ncykpKTsKKyAgICB9CisKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiBtX3N0cmluZ3MuaXNFbXB0eSgpOyB9CiAgICAgdm9pZCBjbGVhcigpIHsgbV9zdHJpbmdz
LmNsZWFyKCk7IH0KLSAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIHN0cmluZykgeyBtX3N0
cmluZ3MuYXBwZW5kKHN0cmluZyk7IH0KKyAgICB2b2lkIGFwcGVuZChTdHJpbmcmJiBzdHJpbmcp
IHsgbV9zdHJpbmdzLmFwcGVuZChXVEZNb3ZlKHN0cmluZykpOyB9CiAgICAgdm9pZCBzb3J0KCk7
CiAKICAgICAvLyBJbXBsZW1lbnRzIHRoZSBJREwuCkBAIC01Myw3ICs1OCwxMCBAQCBwdWJsaWM6
CiAgICAgb3BlcmF0b3IgY29uc3QgVmVjdG9yPFN0cmluZz4mKCkgY29uc3QgeyByZXR1cm4gbV9z
dHJpbmdzOyB9CiAKIHByaXZhdGU6Ci0gICAgRE9NU3RyaW5nTGlzdCgpIHsgfQorICAgIERPTVN0
cmluZ0xpc3QoKSA9IGRlZmF1bHQ7CisgICAgZXhwbGljaXQgRE9NU3RyaW5nTGlzdChWZWN0b3I8
U3RyaW5nPiYmIHN0cmluZ3MpCisgICAgICAgIDogbV9zdHJpbmdzKFdURk1vdmUoc3RyaW5ncykp
CisgICAgeyB9CiAKICAgICBWZWN0b3I8U3RyaW5nPiBtX3N0cmluZ3M7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnRQYXRoLmNwcAppbmRleCA0NmZiNjQ1ZTA1MzM3NTgxZjlmYTM0NTIzMDNhMmZlMzgwZjQ2
YzA2Li5lY2JjYzAwZjM2ZjA3NmUzMjBiNmFkMTZhZDFkOWEwYmYwMzhlMjc4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRQYXRoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnRQYXRoLmNwcApAQCAtMjc0LDExICsyNzQsMTEgQEAgVmVjdG9yPEV2ZW50VGFyZ2V0
Kj4gRXZlbnRQYXRoOjpjb21wdXRlUGF0aFVuY2xvc2VkVG9UYXJnZXQoY29uc3QgRXZlbnRUYXJn
ZXQmIHQKIAogRXZlbnRQYXRoOjpFdmVudFBhdGgoY29uc3QgVmVjdG9yPEV2ZW50VGFyZ2V0Kj4m
IHRhcmdldHMpCiB7Ci0gICAgZm9yIChhdXRvKiB0YXJnZXQgOiB0YXJnZXRzKSB7CisgICAgbV9w
YXRoID0gdGFyZ2V0cy5tYXAoWyZdKGF1dG8qIHRhcmdldCkgewogICAgICAgICBBU1NFUlQodGFy
Z2V0KTsKICAgICAgICAgQVNTRVJUKCFpczxOb2RlPih0YXJnZXQpKTsKLSAgICAgICAgbV9wYXRo
LmFwcGVuZChFdmVudENvbnRleHQgeyBFdmVudENvbnRleHQ6OlR5cGU6Ok5vcm1hbCwgbnVsbHB0
ciwgdGFyZ2V0LCAqdGFyZ2V0cy5iZWdpbigpLCAwIH0pOwotICAgIH0KKyAgICAgICAgcmV0dXJu
IEV2ZW50Q29udGV4dCB7IEV2ZW50Q29udGV4dDo6VHlwZTo6Tm9ybWFsLCBudWxscHRyLCB0YXJn
ZXQsICp0YXJnZXRzLmJlZ2luKCksIDAgfTsKKyAgICB9KTsKIH0KIAogc3RhdGljIE5vZGUqIG1v
dmVPdXRPZkFsbFNoYWRvd1Jvb3RzKE5vZGUmIHN0YXJ0aW5nTm9kZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9GdWxsc2NyZWVuTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRnVsbHNjcmVlbk1hbmFnZXIuY3BwCmluZGV4IGVjZTQ4ZTQyNjc5NzA5NWRhNzA5YTA0ZGE2
ODZhNGZlMGJjMjkyOGMuLjBlOWJiOTQ0MWMzN2RmNTNkNDcxODM4Y2NjMWFhZGNiNjM3NzhiZWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9GdWxsc2NyZWVuTWFuYWdlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0Z1bGxzY3JlZW5NYW5hZ2VyLmNwcApAQCAtMjY1LDkgKzI2
NSw4IEBAIHZvaWQgRnVsbHNjcmVlbk1hbmFnZXI6OmNhbmNlbEZ1bGxzY3JlZW4oKQogCiAgICAg
Ly8gVG8gYWNoaWV2ZSB0aGF0IGFpbSwgcmVtb3ZlIGFsbCB0aGUgZWxlbWVudHMgZnJvbSB0aGUg
dG9wIGRvY3VtZW50J3Mgc3RhY2sgZXhjZXB0IGZvciB0aGUgZmlyc3QgYmVmb3JlCiAgICAgLy8g
Y2FsbGluZyB3ZWJraXRFeGl0RnVsbHNjcmVlbigpOgotICAgIFZlY3RvcjxSZWZQdHI8RWxlbWVu
dD4+IHJlcGxhY2VtZW50RnVsbHNjcmVlbkVsZW1lbnRTdGFjazsKLSAgICByZXBsYWNlbWVudEZ1
bGxzY3JlZW5FbGVtZW50U3RhY2suYXBwZW5kKHRvcERvY3VtZW50LmZ1bGxzY3JlZW5NYW5hZ2Vy
KCkuZnVsbHNjcmVlbkVsZW1lbnQoKSk7Ci0gICAgdG9wRG9jdW1lbnQuZnVsbHNjcmVlbk1hbmFn
ZXIoKS5tX2Z1bGxzY3JlZW5FbGVtZW50U3RhY2suc3dhcChyZXBsYWNlbWVudEZ1bGxzY3JlZW5F
bGVtZW50U3RhY2spOworICAgIFJlZlB0ciBmdWxsc2NyZW5FbGVtZW50ID0gdG9wRG9jdW1lbnQu
ZnVsbHNjcmVlbk1hbmFnZXIoKS5mdWxsc2NyZWVuRWxlbWVudCgpOworICAgIHRvcERvY3VtZW50
LmZ1bGxzY3JlZW5NYW5hZ2VyKCkubV9mdWxsc2NyZWVuRWxlbWVudFN0YWNrID0geyBXVEZNb3Zl
KGZ1bGxzY3JlbkVsZW1lbnQpIH07CiAKICAgICB0b3BEb2N1bWVudC5mdWxsc2NyZWVuTWFuYWdl
cigpLmV4aXRGdWxsc2NyZWVuKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
TG9hZGFibGVTY3JpcHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0xvYWRhYmxlU2NyaXB0LmNw
cAppbmRleCAxYmRkZTFlYjVkNmEwN2YxMTczODliOTljNzVlY2IwMWI2MGY4ODA5Li40MWY0M2Nl
NjY4NTAzMGVkOWQzOWRmMDViOWZjOTIzYjEyMzk1ZGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTG9hZGFibGVTY3JpcHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2Fk
YWJsZVNjcmlwdC5jcHAKQEAgLTUxLDEyICs1MSw4IEBAIHZvaWQgTG9hZGFibGVTY3JpcHQ6OnJl
bW92ZUNsaWVudChMb2FkYWJsZVNjcmlwdENsaWVudCYgY2xpZW50KQogCiB2b2lkIExvYWRhYmxl
U2NyaXB0Ojpub3RpZnlDbGllbnRGaW5pc2hlZCgpCiB7Ci0gICAgUmVmUHRyPExvYWRhYmxlU2Ny
aXB0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotCi0gICAgVmVjdG9yPExvYWRhYmxlU2NyaXB0Q2xp
ZW50Kj4gdmVjdG9yOwotICAgIGZvciAoYXV0byYgcGFpciA6IG1fY2xpZW50cykKLSAgICAgICAg
dmVjdG9yLmFwcGVuZChwYWlyLmtleSk7Ci0gICAgZm9yIChhdXRvJiBjbGllbnQgOiB2ZWN0b3Ip
CisgICAgUmVmIHByb3RlY3RlZFRoaXMgeyAqdGhpcyB9OworICAgIGZvciAoYXV0byYgY2xpZW50
IDogY29weVRvVmVjdG9yKG1fY2xpZW50cy52YWx1ZXMoKSkpCiAgICAgICAgIGNsaWVudC0+bm90
aWZ5RmluaXNoZWQoKnRoaXMpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
UmFkaW9CdXR0b25Hcm91cHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9uR3Jv
dXBzLmNwcAppbmRleCA1MGY0NjMwZjg5ZWM4OTVkZjFjZTVhYjhlZDU4MTg5YjdhZmJmNjYyLi4x
MjI2M2UyNTZlZTU2YTQ1MmMzMjI4MTI1Y2FkZDVmMTcwZjQ1ZjBmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5jcHAKQEAgLTU5LDkgKzU5LDcgQEAgaW5saW5lIGJvb2wg
UmFkaW9CdXR0b25Hcm91cDo6aXNWYWxpZCgpIGNvbnN0CiAKIFZlY3RvcjxSZWY8SFRNTElucHV0
RWxlbWVudD4+IFJhZGlvQnV0dG9uR3JvdXA6Om1lbWJlcnMoKSBjb25zdAogewotICAgIFZlY3Rv
cjxSZWY8SFRNTElucHV0RWxlbWVudD4+IHNvcnRlZE1lbWJlcnM7Ci0gICAgZm9yIChhdXRvJiBt
ZW1iZXIgOiBtX21lbWJlcnMpCi0gICAgICAgIHNvcnRlZE1lbWJlcnMuYXBwZW5kKG1lbWJlcik7
CisgICAgYXV0byBzb3J0ZWRNZW1iZXJzID0gY29weVRvVmVjdG9yT2Y8UmVmPEhUTUxJbnB1dEVs
ZW1lbnQ+PihtX21lbWJlcnMpOwogICAgIHN0ZDo6c29ydChzb3J0ZWRNZW1iZXJzLmJlZ2luKCks
IHNvcnRlZE1lbWJlcnMuZW5kKCksIFtdKGF1dG8mIGEsIGF1dG8mIGIpIHsKICAgICAgICAgcmV0
dXJuIGlzX2x0KHRyZWVPcmRlcjxDb21wb3NlZFRyZWU+KGEsIGIpKTsKICAgICB9KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGlyZWN0b3J5RmlsZUxpc3RDcmVhdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvRGlyZWN0b3J5RmlsZUxpc3RDcmVhdG9yLmNwcAppbmRleCA5
ZDNkYTE4NTNjM2E2MzIwZmViMzE5NzUxNjJlNDM1YWU5M2ZmZGQxLi45ODVmN2E2MmYwYzFmMzk3
NTU4MmViM2Y5Yjk4OTc1MTU2MTU2Njc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0RpcmVjdG9yeUZpbGVMaXN0Q3JlYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9E
aXJlY3RvcnlGaWxlTGlzdENyZWF0b3IuY3BwCkBAIC04NiwxMyArODYsMTEgQEAgc3RhdGljIFZl
Y3RvcjxGaWxlSW5mb3JtYXRpb24+IGdhdGhlckZpbGVJbmZvcm1hdGlvbihjb25zdCBWZWN0b3I8
RmlsZUNob29zZXJGaWwKIHN0YXRpYyBSZWY8RmlsZUxpc3Q+IHRvRmlsZUxpc3QoRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zdCBWZWN0b3I8RmlsZUluZm9ybWF0aW9uPiYgZmlsZXMpCiB7CiAgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBWZWN0b3I8UmVmPEZpbGU+PiBmaWxlT2JqZWN0
czsKLSAgICBmb3IgKGF1dG8mIGZpbGUgOiBmaWxlcykgeworICAgIGF1dG8gZmlsZU9iamVjdHMg
PSBmaWxlcy5tYXAoW2RvY3VtZW50XShhdXRvJiBmaWxlKSB7CiAgICAgICAgIGlmIChmaWxlLnJl
bGF0aXZlUGF0aC5pc051bGwoKSkKLSAgICAgICAgICAgIGZpbGVPYmplY3RzLmFwcGVuZChGaWxl
OjpjcmVhdGUoZG9jdW1lbnQsIGZpbGUucGF0aCwgeyB9LCBmaWxlLmRpc3BsYXlOYW1lKSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZpbGVPYmplY3RzLmFwcGVuZChGaWxlOjpjcmVhdGVX
aXRoUmVsYXRpdmVQYXRoKGRvY3VtZW50LCBmaWxlLnBhdGgsIGZpbGUucmVsYXRpdmVQYXRoKSk7
Ci0gICAgfQorICAgICAgICAgICAgcmV0dXJuIEZpbGU6OmNyZWF0ZShkb2N1bWVudCwgZmlsZS5w
YXRoLCB7IH0sIGZpbGUuZGlzcGxheU5hbWUpOworICAgICAgICByZXR1cm4gRmlsZTo6Y3JlYXRl
V2l0aFJlbGF0aXZlUGF0aChkb2N1bWVudCwgZmlsZS5wYXRoLCBmaWxlLnJlbGF0aXZlUGF0aCk7
CisgICAgfSk7CiAgICAgcmV0dXJuIEZpbGVMaXN0OjpjcmVhdGUoV1RGTW92ZShmaWxlT2JqZWN0
cykpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCmluZGV4
IGM0YjA4NGQyZGU3MWZkMzE5ZmU4YzA2OWI0NWZmN2ZjY2NlZGU1ZWMuLjcyYWZlMDRlMDdmODlj
OGMyNGFmM2Y4YjhjYWQzOGNlMjk2YThkMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNl
bGVjdEVsZW1lbnQuY3BwCkBAIC02MzQsOSArNjM0LDkgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6c2F2ZUxhc3RTZWxlY3Rpb24oKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9s
YXN0T25DaGFuZ2VTZWxlY3Rpb24uY2xlYXIoKTsKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBs
aXN0SXRlbXMoKSkKLSAgICAgICAgbV9sYXN0T25DaGFuZ2VTZWxlY3Rpb24uYXBwZW5kKGlzPEhU
TUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+
KCplbGVtZW50KS5zZWxlY3RlZCgpKTsKKyAgICBtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbiA9IGxp
c3RJdGVtcygpLm1hcChbXShhdXRvJiBlbGVtZW50KSB7CisgICAgICAgIHJldHVybiBpczxIVE1M
T3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50Pigq
ZWxlbWVudCkuc2VsZWN0ZWQoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6c2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgoaW50IGluZGV4KQpAQCAtNjQ1LDEwICs2
NDUsOSBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJ
bmRleChpbnQgaW5kZXgpCiAKICAgICAvLyBDYWNoZSB0aGUgc2VsZWN0aW9uIHN0YXRlIHNvIHdl
IGNhbiByZXN0b3JlIHRoZSBvbGQgc2VsZWN0aW9uIGFzIHRoZSBuZXcKICAgICAvLyBzZWxlY3Rp
b24gcGl2b3RzIGFyb3VuZCB0aGlzIGFuY2hvciBpbmRleC4KLSAgICBtX2NhY2hlZFN0YXRlRm9y
QWN0aXZlU2VsZWN0aW9uLmNsZWFyKCk7Ci0KLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBsaXN0
SXRlbXMoKSkKLSAgICAgICAgbV9jYWNoZWRTdGF0ZUZvckFjdGl2ZVNlbGVjdGlvbi5hcHBlbmQo
aXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxl
bWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCkpOworICAgIG1fY2FjaGVkU3RhdGVGb3JBY3RpdmVT
ZWxlY3Rpb24gPSBsaXN0SXRlbXMoKS5tYXAoW10oYXV0byYgZWxlbWVudCkgeworICAgICAgICBy
ZXR1cm4gaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0
aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCk7CisgICAgfSk7CiB9CiAKIHZvaWQgSFRN
TFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KGludCBpbmRleCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKaW5kZXggMDViMjczNzlmMmQ5MjE5NDQ4OTMyYzQ2
YWIzM2IyZWYwMzFhZmM2YS4uNTliZmM2ZTBmMWU1OTA0M2RjYzViYmRhMmQyMmFhZTM2NWE2MTMx
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKQEAgLTExMiwxMCArMTEyLDkgQEAg
dm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0LAogCiBWZWN0b3I8c3RkOjpvcHRpb25hbDxJbWFnZUJpdG1h
cEJhY2tpbmc+PiBJbWFnZUJpdG1hcDo6ZGV0YWNoQml0bWFwcyhWZWN0b3I8UmVmUHRyPEltYWdl
Qml0bWFwPj4mJiBiaXRtYXBzKQogewotICAgIFZlY3RvcjxzdGQ6Om9wdGlvbmFsPEltYWdlQml0
bWFwQmFja2luZz4+IGJ1ZmZlcnM7Ci0gICAgZm9yIChhdXRvJiBiaXRtYXAgOiBiaXRtYXBzKQot
ICAgICAgICBidWZmZXJzLmFwcGVuZChiaXRtYXAtPnRha2VJbWFnZUJpdG1hcEJhY2tpbmcoKSk7
Ci0gICAgcmV0dXJuIGJ1ZmZlcnM7CisgICAgcmV0dXJuIFdURjo6bWFwKFdURk1vdmUoYml0bWFw
cyksIFtdKGF1dG8mJiBiaXRtYXApIHsKKyAgICAgICAgcmV0dXJuIGJpdG1hcC0+dGFrZUltYWdl
Qml0bWFwQmFja2luZygpOworICAgIH0pOwogfQogCiB2b2lkIEltYWdlQml0bWFwOjpjcmVhdGVQ
cm9taXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIElt
YWdlQml0bWFwOjpTb3VyY2UmJiBzb3VyY2UsIEltYWdlQml0bWFwT3B0aW9ucyYmIG9wdGlvbnMs
IGludCBzeCwgaW50IHN5LCBpbnQgc3csIGludCBzaCwgSW1hZ2VCaXRtYXA6OlByb21pc2UmJiBw
cm9taXNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmNwcAppbmRleCA2MTE0NjAyNzdmNjY3OWE0OTFlMGY5ODMxNzc5
NzMwMDdlYmJkZGM2Li5mNzMzNjRmMzg2MGMyNmI5MzY2MThjNGY3ZTFhMTc4MjVlOGQ1MDEwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcApAQCAtMzAyMSw5ICszMDIxLDggQEAgc3RkOjpvcHRpb25hbDxWZWN0
b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEF0
dGFjaGUKICAgICB9OwogICAgIFZlY3RvcjxSZWZQdHI8V2ViR0xTaGFkZXI+PiBzaGFkZXJPYmpl
Y3RzOwogICAgIGZvciAoYXV0byBzaGFkZXJUeXBlIDogc2hhZGVyVHlwZXMpIHsKLSAgICAgICAg
UmVmUHRyPFdlYkdMU2hhZGVyPiBzaGFkZXIgPSBwcm9ncmFtLmdldEF0dGFjaGVkU2hhZGVyKHNo
YWRlclR5cGUpOwotICAgICAgICBpZiAoc2hhZGVyKQotICAgICAgICAgICAgc2hhZGVyT2JqZWN0
cy5hcHBlbmQoc2hhZGVyKTsKKyAgICAgICAgaWYgKFJlZlB0ciBzaGFkZXIgPSBwcm9ncmFtLmdl
dEF0dGFjaGVkU2hhZGVyKHNoYWRlclR5cGUpKQorICAgICAgICAgICAgc2hhZGVyT2JqZWN0cy5h
cHBlbmQoV1RGTW92ZShzaGFkZXIpKTsKICAgICB9CiAgICAgcmV0dXJuIHNoYWRlck9iamVjdHM7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJz
ZXRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0
UGFyc2VyLmNwcAppbmRleCA4YWNiNjhhZjQ1NTFhMzhiNzk5YzcxM2FhNzVkYzBmNzkxOTAwNGJl
Li4wYTVlZDc4ZjQ1OGY5OWI2YmM3ZmMzNzFkZjk0Y2ZlOTI1YTRkNDgwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAKQEAg
LTg1LDEyICs4NSwxMSBAQCBzdGF0aWMgU3RyaW5nVmlldyBleHRyYWN0Q2hhcnNldChjb25zdCBT
dHJpbmcmIHZhbHVlKQogCiBib29sIEhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6cHJvY2Vzc01ldGEo
SFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBBdHRyaWJ1dGVMaXN0IGF0dHJpYnV0ZXM7Ci0gICAg
Zm9yIChhdXRvJiBhdHRyaWJ1dGUgOiB0b2tlbi5hdHRyaWJ1dGVzKCkpIHsKKyAgICBhdXRvIGF0
dHJpYnV0ZXMgPSB0b2tlbi5hdHRyaWJ1dGVzKCkubWFwKFtdKGF1dG8mIGF0dHJpYnV0ZSkgewog
ICAgICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZThCaXRJZlBv
c3NpYmxlKGF0dHJpYnV0ZS5uYW1lKTsKICAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0g
U3RyaW5nSW1wbDo6Y3JlYXRlOEJpdElmUG9zc2libGUoYXR0cmlidXRlLnZhbHVlKTsKLSAgICAg
ICAgYXR0cmlidXRlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoYXR0cmlidXRlTmFtZSwgYXR0cmli
dXRlVmFsdWUpKTsKLSAgICB9CisgICAgICAgIHJldHVybiBzdGQ6OnBhaXIgeyBXVEZNb3ZlKGF0
dHJpYnV0ZU5hbWUpLCBXVEZNb3ZlKGF0dHJpYnV0ZVZhbHVlKSB9OworICAgIH0pOwogCiAgICAg
bV9lbmNvZGluZyA9IGVuY29kaW5nRnJvbU1ldGFBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwogICAg
IHJldHVybiBtX2VuY29kaW5nLmlzVmFsaWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IDZiNzFiZWY4MWE3ZTI4NDcxZWVmZDdjNTMx
NTJhOGEwYTgyZDJkYjUuLmExZjE2N2NiMDgzYzk5ODQzNjE4MzQxMTgwMjlmMjg1ZTQxYzAwMDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcApA
QCAtMjIwMCwxMSArMjIwMCwxMCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NoYXJh
Y3RlcihBdG9tSFRNTFRva2VuJiYgdG9rZW4pCiAvLyBGcm9tIHRoZSBzdHJpbmcgNDA4OTk2MTAx
MCwgY3JlYXRlcyBhIGxpbmsgb2YgdGhlIGZvcm0gPGEgaHJlZj0idGVsOjQwODk5NjEwMTAiPjQw
ODk5NjEwMTA8L2E+IGFuZCBpbnNlcnRzIGl0Lgogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6Omluc2Vy
dFBob25lTnVtYmVyTGluayhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBWZWN0b3I8QXR0
cmlidXRlPiBhdHRyaWJ1dGVzOwotICAgIGF0dHJpYnV0ZXMuYXBwZW5kKEF0dHJpYnV0ZShIVE1M
TmFtZXM6OmhyZWZBdHRyLCBtYWtlU3RyaW5nKCJ0ZWw6Il9zLCBzdHJpbmcpKSk7CisgICAgQXR0
cmlidXRlIGF0dHJpYnV0ZShIVE1MTmFtZXM6OmhyZWZBdHRyLCBtYWtlU3RyaW5nKCJ0ZWw6Il9z
LCBzdHJpbmcpKTsKIAogICAgIGNvbnN0IEF0b21TdHJpbmcmIGFUYWdMb2NhbE5hbWUgPSBhVGFn
LT5sb2NhbE5hbWUoKTsKLSAgICBBdG9tSFRNTFRva2VuIGFTdGFydFRva2VuKEhUTUxUb2tlbjo6
U3RhcnRUYWcsIGFUYWdMb2NhbE5hbWUsIFdURk1vdmUoYXR0cmlidXRlcykpOworICAgIEF0b21I
VE1MVG9rZW4gYVN0YXJ0VG9rZW4oSFRNTFRva2VuOjpTdGFydFRhZywgYVRhZ0xvY2FsTmFtZSwg
eyBXVEZNb3ZlKGF0dHJpYnV0ZSkgfSk7CiAgICAgQXRvbUhUTUxUb2tlbiBhRW5kVG9rZW4oSFRN
TFRva2VuOjpFbmRUYWcsIGFUYWdMb2NhbE5hbWUpOwogCiAgICAgcHJvY2Vzc1N0YXJ0VGFnKFdU
Rk1vdmUoYVN0YXJ0VG9rZW4pKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL1RleHREb2N1bWVudFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9U
ZXh0RG9jdW1lbnRQYXJzZXIuY3BwCmluZGV4IDRkYTk1OWY0MGZlOWVhMzM3NDdjZDIzODhjZWI3
OWY2ZDcyZGI3ZWQuLjQ3MDZmMjZlODQ0MDllZTgxM2NkMTNiYzVmNGUwYWNjZjY3NGE4NjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNw
cApAQCAtNTEsOSArNTEsOCBAQCB2b2lkIFRleHREb2N1bWVudFBhcnNlcjo6aW5zZXJ0RmFrZVBy
ZUVsZW1lbnQoKQogICAgIC8vIFdlIGNyZWF0ZSBhIGZha2UgdG9rZW4gYW5kIGdpdmUgaXQgdG8g
dGhlIHRyZWUgYnVpbGRlciByYXRoZXIgdGhhbgogICAgIC8vIHNlbmRpbmcgZmFrZSBieXRlcyB0
aHJvdWdoIHRoZSBmcm9udC1lbmQgb2YgdGhlIHBhcnNlciB0byBhdm9pZAogICAgIC8vIGRpc3Ry
dWJpbmcgdGhlIGxpbmUvY29sdW1uIG51bWJlciBjYWxjdWxhdGlvbnMuCi0gICAgVmVjdG9yPEF0
dHJpYnV0ZT4gYXR0cmlidXRlczsKLSAgICBhdHRyaWJ1dGVzLmFwcGVuZChBdHRyaWJ1dGUoc3R5
bGVBdHRyLCAid29yZC13cmFwOiBicmVhay13b3JkOyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7Iikp
OwotICAgIEF0b21IVE1MVG9rZW4gZmFrZVByZShIVE1MVG9rZW46OlN0YXJ0VGFnLCBwcmVUYWct
PmxvY2FsTmFtZSgpLCBXVEZNb3ZlKGF0dHJpYnV0ZXMpKTsKKyAgICBBdHRyaWJ1dGUgYXR0cmli
dXRlKHN0eWxlQXR0ciwgIndvcmQtd3JhcDogYnJlYWstd29yZDsgd2hpdGUtc3BhY2U6IHByZS13
cmFwOyIpOworICAgIEF0b21IVE1MVG9rZW4gZmFrZVByZShIVE1MVG9rZW46OlN0YXJ0VGFnLCBw
cmVUYWctPmxvY2FsTmFtZSgpLCB7IFdURk1vdmUoYXR0cmlidXRlKSB9KTsKICAgICB0cmVlQnVp
bGRlcigpLmNvbnN0cnVjdFRyZWUoV1RGTW92ZShmYWtlUHJlKSk7CiAKICAgICAvLyBOb3JtYWxs
eSB3ZSB3b3VsZCBza2lwIHRoZSBmaXJzdCBcbiBhZnRlciBhIDxwcmU+IGVsZW1lbnQsIGJ1dCB3
ZSBkb24ndApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0NvbnRlbnRGaWx0ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0NvbnRlbnRGaWx0ZXIuY3BwCmluZGV4IDQxOWUz
MmYzOTgyZjY3MmFmNjYzMGZhNWUwYzYyNWM1Y2I3YjIyM2YuLjRlMzU0NDU0YWFiYTM0ZTRmYmVh
NDE1ZDQxZmY4ZTkyYmY0NDE0NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9D
b250ZW50RmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29udGVudEZpbHRl
ci5jcHAKQEAgLTY3LDExICs2Nyw5IEBAIFZlY3RvcjxDb250ZW50RmlsdGVyOjpUeXBlPiYgQ29u
dGVudEZpbHRlcjo6dHlwZXMoKQogCiBzdGQ6OnVuaXF1ZV9wdHI8Q29udGVudEZpbHRlcj4gQ29u
dGVudEZpbHRlcjo6Y3JlYXRlKENvbnRlbnRGaWx0ZXJDbGllbnQmIGNsaWVudCkKIHsKLSAgICBD
b250YWluZXIgZmlsdGVyczsKLSAgICBmb3IgKGF1dG8mIHR5cGUgOiB0eXBlcygpKSB7Ci0gICAg
ICAgIGF1dG8gZmlsdGVyID0gdHlwZS5jcmVhdGUoKTsKLSAgICAgICAgZmlsdGVycy5hcHBlbmQo
V1RGTW92ZShmaWx0ZXIpKTsKLSAgICB9CisgICAgYXV0byBmaWx0ZXJzID0gdHlwZXMoKS5tYXAo
W10oYXV0byYgdHlwZSkgeworICAgICAgICByZXR1cm4gdHlwZS5jcmVhdGUoKTsKKyAgICB9KTsK
IAogICAgIGlmIChmaWx0ZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZU1hbmlmZXN0UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuY3BwCmluZGV4IGI4N2RkODM1MDYwN2MyNGJlMjU2
ZTM0NDFiZWQyZDM3NjdlMDk1NTIuLjRhMTE0NDI1ZTExNmQyYzQyZDE5MDM5MjNlZGY4ODYzODNk
OGYwNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuY3BwCkBAIC0xODAsNyArMTgw
LDcgQEAgc3RkOjpvcHRpb25hbDxBcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3Q+IHBhcnNlQXBwbGlj
YXRpb25DYWNoZU1hbmlmZXN0KGNvbnN0IFVSTCYKICAgICAgICAgICAgICAgICBpZiAoIWVxdWFs
SWdub3JpbmdBU0NJSUNhc2UodXJsLnByb3RvY29sKCksIG1hbmlmZXN0VVJMLnByb3RvY29sKCkp
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgICAgIG1hbmlm
ZXN0Lm9ubGluZUFsbG93ZWRVUkxzLmFwcGVuZCh1cmwpOworICAgICAgICAgICAgICAgIG1hbmlm
ZXN0Lm9ubGluZUFsbG93ZWRVUkxzLmFwcGVuZChXVEZNb3ZlKHVybCkpOwogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6ZU9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUmVzaXplT2JzZXJ2ZXIuY3BwCmluZGV4IDkzZGExYTQ1NjA0ZTQ1MmE3NzU5M2UxOGQxZjQ3
MzM2MzQ5OTQzNjcuLjRmZmQ2OWQwMzQ0MTA5YjQ3YWZiNWU1MTk3YWEzZmRmZDQ5N2RlZDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuY3BwCkBAIC0xMjUsMTEgKzEyNSwxMCBA
QCBzaXplX3QgUmVzaXplT2JzZXJ2ZXI6OmdhdGhlck9ic2VydmF0aW9ucyhzaXplX3QgZGVlcGVy
VGhhbikKIAogdm9pZCBSZXNpemVPYnNlcnZlcjo6ZGVsaXZlck9ic2VydmF0aW9ucygpCiB7Ci0g
ICAgVmVjdG9yPFJlZjxSZXNpemVPYnNlcnZlckVudHJ5Pj4gZW50cmllczsKLSAgICBmb3IgKGNv
bnN0IGF1dG8mIG9ic2VydmF0aW9uIDogbV9hY3RpdmVPYnNlcnZhdGlvbnMpIHsKKyAgICBhdXRv
IGVudHJpZXMgPSBtX2FjdGl2ZU9ic2VydmF0aW9ucy5tYXAoW10oYXV0byYgb2JzZXJ2YXRpb24p
IHsKICAgICAgICAgQVNTRVJUKG9ic2VydmF0aW9uLT50YXJnZXQoKSk7Ci0gICAgICAgIGVudHJp
ZXMuYXBwZW5kKFJlc2l6ZU9ic2VydmVyRW50cnk6OmNyZWF0ZShvYnNlcnZhdGlvbi0+dGFyZ2V0
KCksIG9ic2VydmF0aW9uLT5jb21wdXRlQ29udGVudFJlY3QoKSwgb2JzZXJ2YXRpb24tPmJvcmRl
ckJveFNpemUoKSwgb2JzZXJ2YXRpb24tPmNvbnRlbnRCb3hTaXplKCkpKTsKLSAgICB9CisgICAg
ICAgIHJldHVybiBSZXNpemVPYnNlcnZlckVudHJ5OjpjcmVhdGUob2JzZXJ2YXRpb24tPnRhcmdl
dCgpLCBvYnNlcnZhdGlvbi0+Y29tcHV0ZUNvbnRlbnRSZWN0KCksIG9ic2VydmF0aW9uLT5ib3Jk
ZXJCb3hTaXplKCksIG9ic2VydmF0aW9uLT5jb250ZW50Qm94U2l6ZSgpKTsKKyAgICB9KTsKICAg
ICBtX2FjdGl2ZU9ic2VydmF0aW9ucy5jbGVhcigpOwogICAgIGF1dG8gYWN0aXZlT2JzZXJ2YXRp
b25UYXJnZXRzID0gc3RkOjpleGNoYW5nZShtX2FjdGl2ZU9ic2VydmF0aW9uVGFyZ2V0cywgeyB9
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKaW5kZXggMzg3ZDUxOWFlNTE3
MmQ2ODBhNWIyODg0M2JiZThmZjk5NmM2YjMzNS4uY2E1ZmJlNjNjY2Y2Y2RiOThhZjg1ZWQ1OTI5
YTEzMDM4ZDY5YmZjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNh
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCkBAIC0z
NjEsMTcgKzM2MSwxNiBAQCBzdGF0aWMgYm9vbCBpbml0aWFsaXplSW5kaWNhdG9yKFRleHRJbmRp
Y2F0b3JEYXRhJiBkYXRhLCBGcmFtZSYgZnJhbWUsIGNvbnN0IFNpbQogICAgICAgICB0ZXh0Qm91
bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLnVuaXRlKHRleHRSZWN0SW5Sb290Vmlld0Nv
b3JkaW5hdGVzKTsKICAgICB9CiAKLSAgICBWZWN0b3I8RmxvYXRSZWN0PiB0ZXh0UmVjdHNJbkJv
dW5kaW5nUmVjdENvb3JkaW5hdGVzOwotICAgIGZvciAoYXV0byByZWN0IDogdGV4dFJlY3RzSW5S
b290Vmlld0Nvb3JkaW5hdGVzKSB7CisgICAgYXV0byB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENv
b3JkaW5hdGVzID0gdGV4dFJlY3RzSW5Sb290Vmlld0Nvb3JkaW5hdGVzLm1hcChbJl0oYXV0byBy
ZWN0KSB7CiAgICAgICAgIHJlY3QubW92ZUJ5KC10ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nv
b3JkaW5hdGVzLmxvY2F0aW9uKCkpOwotICAgICAgICB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENv
b3JkaW5hdGVzLmFwcGVuZChyZWN0KTsKLSAgICB9CisgICAgICAgIHJldHVybiByZWN0OworICAg
IH0pOwogCiAgICAgLy8gU3RvcmUgdGhlIHNlbGVjdGlvbiByZWN0IGluIHdpbmRvdyBjb29yZGlu
YXRlcywgdG8gYmUgdXNlZCBzdWJzZXF1ZW50bHkKICAgICAvLyB0byBkZXRlcm1pbmUgaWYgdGhl
IGluZGljYXRvciBhbmQgc2VsZWN0aW9uIHN0aWxsIHByZWNpc2VseSBvdmVybGFwLgogICAgIGRh
dGEuc2VsZWN0aW9uUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9IGZyYW1lLnZpZXcoKS0+Y29u
dGVudHNUb1Jvb3RWaWV3KGVuY2xvc2luZ0ludFJlY3QoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uQm91bmRzKEZyYW1lU2VsZWN0aW9uOjpDbGlwVG9WaXNpYmxlQ29udGVudDo6Tm8pKSk7CiAg
ICAgZGF0YS50ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gdGV4dEJvdW5k
aW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlczsKLSAgICBkYXRhLnRleHRSZWN0c0luQm91bmRp
bmdSZWN0Q29vcmRpbmF0ZXMgPSB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzOwor
ICAgIGRhdGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcyA9IFdURk1vdmUodGV4
dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcyk7CiAKICAgICByZXR1cm4gdGFrZVNuYXBz
aG90cyhkYXRhLCBmcmFtZSwgZW5jbG9zaW5nSW50UmVjdCh0ZXh0Qm91bmRpbmdSZWN0SW5Eb2N1
bWVudENvb3JkaW5hdGVzKSwgY2xpcHBlZFRleHRSZWN0c0luRG9jdW1lbnRDb29yZGluYXRlcyk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQ
b2xpY3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5
LmNwcAppbmRleCA1MmY2MjAxMjJiODVjNzUwM2U3ZGE2YTY4MzViZjM3NTYxNDk2N2Y0Li44YTJi
YTRjZmZhMjZkY2NiYmQxZTc1ZWU1MDExM2E4NjZiZTVhMmZhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKQEAgLTM0MywxOCArMzQz
LDEyIEBAIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjphbGxQb2xpY2llc0FsbG93KFZpb2xh
dGVkRGlyZWN0aXZlQ2FsbGJhY2smJiBjYWxsYmFjCiBzdGF0aWMgVmVjdG9yPFJlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VTdWJSZXNvdXJjZUludGVncml0eUludG9EaWdlc3RzKGNv
bnN0IFN0cmluZyYgc3ViUmVzb3VyY2VJbnRlZ3JpdHkpCiB7CiAgICAgYXV0byBlbmNvZGVkRGln
ZXN0cyA9IHBhcnNlSW50ZWdyaXR5TWV0YWRhdGEoc3ViUmVzb3VyY2VJbnRlZ3JpdHkpOwotICAg
IFZlY3RvcjxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IGRlY29kZWREaWdlc3RzOwotCi0g
ICAgaWYgKCFlbmNvZGVkRGlnZXN0cy5oYXNfdmFsdWUoKSkKKyAgICBpZiAoIWVuY29kZWREaWdl
c3RzKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBlbmNvZGVk
RGlnZXN0IDogZW5jb2RlZERpZ2VzdHMudmFsdWUoKSkgewotICAgICAgICBhdXRvIGRlY29kZWRE
aWdlc3QgPSBkZWNvZGVFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0KGVuY29kZWRE
aWdlc3QpOwotICAgICAgICBpZiAoZGVjb2RlZERpZ2VzdC5oYXNfdmFsdWUoKSkKLSAgICAgICAg
ICAgIGRlY29kZWREaWdlc3RzLmFwcGVuZChkZWNvZGVkRGlnZXN0LnZhbHVlKCkpOwotICAgICAg
ICB9Ci0KLSAgICByZXR1cm4gZGVjb2RlZERpZ2VzdHM7CisgICAgcmV0dXJuIFdURjo6Y29tcGFj
dE1hcCgqZW5jb2RlZERpZ2VzdHMsIFtdKGF1dG8mIGVuY29kZWREaWdlc3QpIHsKKyAgICAgICAg
cmV0dXJuIGRlY29kZUVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QoZW5jb2RlZERp
Z2VzdCk7CisgICAgfSk7CiB9CiAKIHN0YXRpYyBWZWN0b3I8Q29udGVudFNlY3VyaXR5UG9saWN5
SGFzaD4gZ2VuZXJhdGVIYXNoZXNGb3JDb250ZW50KGNvbnN0IFN0cmluZ1ZpZXcgY29udGVudCwg
T3B0aW9uU2V0PENvbnRlbnRTZWN1cml0eVBvbGljeUhhc2hBbGdvcml0aG0+IGFsZ29yaXRobXMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHAKaW5kZXggOGU0ZWNlNzA1M2Fl
OGU5OGVmZWNjZmU3NjUyZjg2Y2QyOTc0MDQwNC4uNzg0MjhjNGFiZDMxZTk5YjEwYWFlNDhmYmVj
YzJhNWI4ZDlmNThmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNo
b29zZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmNwcApA
QCAtNTMsOSArNTMsNyBAQCB2b2lkIEZpbGVDaG9vc2VyOjppbnZhbGlkYXRlKCkKIAogdm9pZCBG
aWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQogewotICAgIFZl
Y3RvcjxTdHJpbmc+IGZpbGVuYW1lczsKLSAgICBmaWxlbmFtZXMuYXBwZW5kKGZpbGVuYW1lKTsK
LSAgICBjaG9vc2VGaWxlcyhmaWxlbmFtZXMpOworICAgIGNob29zZUZpbGVzKHsgZmlsZW5hbWUg
fSk7CiB9CiAKIHZvaWQgRmlsZUNob29zZXI6OmNob29zZUZpbGVzKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBmaWxlbmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXBsYWNlbWVudE5hbWVzKQpA
QCAtNjgsOSArNjYsMTAgQEAgdm9pZCBGaWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZXMoY29uc3QgVmVj
dG9yPFN0cmluZz4mIGZpbGVuYW1lcywgY29uc3QgVmVjdG9yPFN0cmkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+IGZpbGVzOworICAgIGZpbGVzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoZmlsZW5hbWVzLnNpemUoKSk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDAsIHNpemUgPSBmaWxlbmFtZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBm
aWxlcy5hcHBlbmQoeyBmaWxlbmFtZXNbaV0sIGkgPCByZXBsYWNlbWVudE5hbWVzLnNpemUoKSA/
IHJlcGxhY2VtZW50TmFtZXNbaV0gOiBudWxsU3RyaW5nKCksIHsgfSB9KTsKLSAgICBtX2NsaWVu
dC0+ZmlsZXNDaG9zZW4oZmlsZXMpOworICAgICAgICBmaWxlcy51bmNoZWNrZWRBcHBlbmQoeyBm
aWxlbmFtZXNbaV0sIGkgPCByZXBsYWNlbWVudE5hbWVzLnNpemUoKSA/IHJlcGxhY2VtZW50TmFt
ZXNbaV0gOiBudWxsU3RyaW5nKCksIHsgfSB9KTsKKyAgICBtX2NsaWVudC0+ZmlsZXNDaG9zZW4o
V1RGTW92ZShmaWxlcykpOwogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTg2LDE5
ICs4NSwxOSBAQCB2b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VNZWRpYUZpbGVzKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBmaWxlbmFtZXMsIGNvbnN0IFN0cmluZwogICAgIGlmICghbV9jbGllbnQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJbmZvPiBmaWxlczsK
LSAgICBmb3IgKGF1dG8mIGZpbGVuYW1lIDogZmlsZW5hbWVzKQotICAgICAgICBmaWxlcy5hcHBl
bmQoeyBmaWxlbmFtZSwgeyB9LCB7IH0gfSk7Ci0gICAgbV9jbGllbnQtPmZpbGVzQ2hvc2VuKGZp
bGVzLCBkaXNwbGF5U3RyaW5nLCBpY29uKTsKKyAgICBhdXRvIGZpbGVzID0gZmlsZW5hbWVzLm1h
cChbXShhdXRvJiBmaWxlbmFtZSkgeworICAgICAgICByZXR1cm4gRmlsZUNob29zZXJGaWxlSW5m
byB7IGZpbGVuYW1lLCB7IH0sIHsgfSB9OworICAgIH0pOworICAgIG1fY2xpZW50LT5maWxlc0No
b3NlbihXVEZNb3ZlKGZpbGVzKSwgZGlzcGxheVN0cmluZywgaWNvbik7CiB9CiAKICNlbmRpZgog
CiB2b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlcyhjb25zdCBWZWN0b3I8RmlsZUNob29zZXJG
aWxlSW5mbz4mIGZpbGVzKQogewotICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhzOwotICAgIGZvciAo
YXV0byYgZmlsZSA6IGZpbGVzKQotICAgICAgICBwYXRocy5hcHBlbmQoZmlsZS5wYXRoKTsKKyAg
ICBhdXRvIHBhdGhzID0gZmlsZXMubWFwKFtdKGF1dG8mIGZpbGUpIHsKKyAgICAgICAgcmV0dXJu
IGZpbGUucGF0aDsKKyAgICB9KTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGluZWxlZ2FudC4g
V2Ugc2hvdWxkIG5vdCBiZSBsb29raW5nIGF0IHNldHRpbmdzIGhlcmUuCiAgICAgaWYgKG1fc2V0
dGluZ3Muc2VsZWN0ZWRGaWxlcyA9PSBwYXRocykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFy
ZWRCdWZmZXIuY3BwCmluZGV4IGQwOWYxMDUyYTBmMzFlZTk3MDYxMTAxM2IzOTM1ZmI1MzA5NTUw
OTYuLmY4N2I2YTRmNjNiMjZhMjE4ODIwNmU5MzhhYTU4NTc5N2FiMzk1ZTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcApAQCAtMjA2LDkgKzIwNiw3IEBAIHZvaWQg
RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKGNvbnN0IEZyYWdtZW50ZWRTaGFyZWRCdWZm
ZXImIGRhdGEpCiB2b2lkIEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25zdCB1aW50
OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKQogewogICAgIEFTU0VSVCghbV9jb250aWd1b3VzKTsK
LSAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yOwotICAgIHZlY3Rvci5hcHBlbmQoZGF0YSwgbGVu
Z3RoKTsKLSAgICBtX3NlZ21lbnRzLmFwcGVuZCh7IG1fc2l6ZSwgRGF0YVNlZ21lbnQ6OmNyZWF0
ZShXVEZNb3ZlKHZlY3RvcikpIH0pOworICAgIG1fc2VnbWVudHMuYXBwZW5kKHsgbV9zaXplLCBE
YXRhU2VnbWVudDo6Y3JlYXRlKFZlY3RvciB7IGRhdGEsIGxlbmd0aCB9KSB9KTsKICAgICBtX3Np
emUgKz0gbGVuZ3RoOwogICAgIEFTU0VSVChpbnRlcm5hbGx5Q29uc2lzdGVudCgpKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZFNhZmVEYXRhQnVmZmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRTYWZlRGF0YUJ1ZmZlci5oCmluZGV4IGQz
OTdkMjI3ZGZjNTM0YWQwY2Y1ODcwMmJlMWNhNTgwMjQ5OWEwYmIuLjY2MjdmZWJjYjdmNGUxZGFk
ODExMWUxNGE5MTIxNDQ4ODE2NmE5NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1RocmVhZFNhZmVEYXRhQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
VGhyZWFkU2FmZURhdGFCdWZmZXIuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UK
IAorI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNv
dW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTE0Myw0ICsxNDQsMTUgQEAg
Ym9vbCBUaHJlYWRTYWZlRGF0YUJ1ZmZlcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFRocmVh
ZFNhZmVEYXRhQnVmZmVyJiByZXN1bHQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAoraW5saW5lIHZv
aWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgYnVmZmVy
KQoreworICAgIGF1dG8qIGRhdGEgPSBidWZmZXIuZGF0YSgpOworICAgIGlmICghZGF0YSkgewor
ICAgICAgICBhZGQoaGFzaGVyLCB0cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBh
ZGQoaGFzaGVyLCBmYWxzZSk7CisgICAgYWRkKGhhc2hlciwgKmRhdGEpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHAKaW5kZXggMWNmMzljYWNmMzAyNDUwOGU4
ZDEyZTg2NDVjNTA4Njc3MjE5NDM1Yi4uYmZlMThlMjlkMjZlYzg5YTNmNDAyZDcxODMxMzgyMDE2
MjNlNTE3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9E
U1BLZXJuZWxQcm9jZXNzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0F1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmNwcApAQCAtNTYsOCArNTYsOSBAQCB2b2lkIEF1ZGlv
RFNQS2VybmVsUHJvY2Vzc29yOjppbml0aWFsaXplKCkKICAgICAgICAgRGlzYWJsZU1hbGxvY1Jl
c3RyaWN0aW9uc0ZvckN1cnJlbnRUaHJlYWRTY29wZSBkaXNhYmxlTWFsbG9jUmVzdHJpY3Rpb25z
OwogCiAgICAgICAgIC8vIENyZWF0ZSBwcm9jZXNzaW5nIGtlcm5lbHMsIG9uZSBwZXIgY2hhbm5l
bC4KKyAgICAgICAgbV9rZXJuZWxzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZDaGFu
bmVscygpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5l
bHMoKTsgKytpKQotICAgICAgICAgICAgbV9rZXJuZWxzLmFwcGVuZChjcmVhdGVLZXJuZWwoKSk7
CisgICAgICAgICAgICBtX2tlcm5lbHMudW5jaGVja2VkQXBwZW5kKGNyZWF0ZUtlcm5lbCgpKTsK
ICAgICB9CiAgICAgbV9pbml0aWFsaXplZCA9IHRydWU7CiAgICAgbV9oYXNKdXN0UmVzZXQgPSB0
cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9SZXNh
bXBsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9SZXNhbXBsZXIu
Y3BwCmluZGV4IGRlNTA4Y2M2ZWY0YTViMDFiZDRlYjIyNDc0NWI3ZWYyODI4NDBmOGUuLjc0Njlj
ZTRkZTNmM2MxODg4OTI4ZjU0OTdkMTJjZTU2ZGI2ZTZkMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUmVzYW1wbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1Jlc2FtcGxlci5jcHAKQEAgLTQyLDggKzQyLDkgQEAg
QXVkaW9SZXNhbXBsZXI6OkF1ZGlvUmVzYW1wbGVyKCkKIAogQXVkaW9SZXNhbXBsZXI6OkF1ZGlv
UmVzYW1wbGVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMpCiB7CisgICAgbV9rZXJuZWxzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZDaGFubmVscyk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkKLSAgICAgICAgbV9rZXJuZWxzLmFw
cGVuZChtYWtlVW5pcXVlPEF1ZGlvUmVzYW1wbGVyS2VybmVsPih0aGlzKSk7CisgICAgICAgIG1f
a2VybmVscy51bmNoZWNrZWRBcHBlbmQobWFrZVVuaXF1ZTxBdWRpb1Jlc2FtcGxlcktlcm5lbD4o
dGhpcykpOwogCiAgICAgbV9zb3VyY2VCdXMgPSBBdWRpb0J1czo6Y3JlYXRlKG51bWJlck9mQ2hh
bm5lbHMsIDAsIGZhbHNlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwCmluZGV4IDlmMzE4MWNmYmI0
MDIyNzc3OTk2MjNiOWJmZGRjZGQ0OTU5YzAwYjAuLjUwMzJlZWE3YTcyYjIzZGUyYTIwMmJjMTUz
NjAzNWNiYWVkMDE2MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcApAQCAtNjEsOCArNjEsOSBAQCB2
b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0TnVtYmVyT2ZDaGFubmVscyh1bnNpZ25l
ZCBudW1iZXJPZkNoYW5uZWxzKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3ByZURlbGF5QnVm
ZmVycy5jbGVhcigpOworICAgIG1fcHJlRGVsYXlCdWZmZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkobnVtYmVyT2ZDaGFubmVscyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJl
ck9mQ2hhbm5lbHM7ICsraSkKLSAgICAgICAgbV9wcmVEZWxheUJ1ZmZlcnMuYXBwZW5kKG1ha2VV
bmlxdWU8QXVkaW9GbG9hdEFycmF5PihNYXhQcmVEZWxheUZyYW1lcykpOworICAgICAgICBtX3By
ZURlbGF5QnVmZmVycy51bmNoZWNrZWRBcHBlbmQobWFrZVVuaXF1ZTxBdWRpb0Zsb2F0QXJyYXk+
KE1heFByZURlbGF5RnJhbWVzKSk7CiB9CiAKIHZvaWQgRHluYW1pY3NDb21wcmVzc29yS2VybmVs
OjpzZXRQcmVEZWxheVRpbWUoZmxvYXQgcHJlRGVsYXlUaW1lKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTXVsdGlDaGFubmVsUmVzYW1wbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL011bHRpQ2hhbm5lbFJlc2FtcGxlci5jcHAKaW5kZXgg
Yjk2NmZhMDZjZDMwZWIzNGRmNzFmY2ZiZGU3YzE2NTgyMzExMTIxZi4uMTcwMjNiNjQyNjFiZGZk
Mzc1ZWUwOWZlMjk2YjNiZGE4ODI3ZjJlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vTXVsdGlDaGFubmVsUmVzYW1wbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9NdWx0aUNoYW5uZWxSZXNhbXBsZXIuY3BwCkBAIC01Myw4ICs1Myw5
IEBAIE11bHRpQ2hhbm5lbFJlc2FtcGxlcjo6TXVsdGlDaGFubmVsUmVzYW1wbGVyKGRvdWJsZSBz
Y2FsZUZhY3RvciwgdW5zaWduZWQgbnVtYmVyCiAgICAgfQogCiAgICAgLy8gQ3JlYXRlIGVhY2gg
Y2hhbm5lbCdzIHJlc2FtcGxlci4KKyAgICBtX2tlcm5lbHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShudW1iZXJPZkNoYW5uZWxzKTsKICAgICBmb3IgKHVuc2lnbmVkIGNoYW5uZWxJbmRleCA9IDA7
IGNoYW5uZWxJbmRleCA8IG51bWJlck9mQ2hhbm5lbHM7ICsrY2hhbm5lbEluZGV4KQotICAgICAg
ICBtX2tlcm5lbHMuYXBwZW5kKG1ha2VVbmlxdWU8U2luY1Jlc2FtcGxlcj4oc2NhbGVGYWN0b3Is
IHJlcXVlc3RGcmFtZXMsIHN0ZDo6YmluZCgmTXVsdGlDaGFubmVsUmVzYW1wbGVyOjpwcm92aWRl
SW5wdXRGb3JDaGFubmVsLCB0aGlzLCBzdGQ6OnBsYWNlaG9sZGVyczo6XzEsIHN0ZDo6cGxhY2Vo
b2xkZXJzOjpfMiwgY2hhbm5lbEluZGV4KSkpOworICAgICAgICBtX2tlcm5lbHMudW5jaGVja2Vk
QXBwZW5kKG1ha2VVbmlxdWU8U2luY1Jlc2FtcGxlcj4oc2NhbGVGYWN0b3IsIHJlcXVlc3RGcmFt
ZXMsIHN0ZDo6YmluZCgmTXVsdGlDaGFubmVsUmVzYW1wbGVyOjpwcm92aWRlSW5wdXRGb3JDaGFu
bmVsLCB0aGlzLCBzdGQ6OnBsYWNlaG9sZGVyczo6XzEsIHN0ZDo6cGxhY2Vob2xkZXJzOjpfMiwg
Y2hhbm5lbEluZGV4KSkpOwogfQogCiBNdWx0aUNoYW5uZWxSZXNhbXBsZXI6On5NdWx0aUNoYW5u
ZWxSZXNhbXBsZXIoKSA9IGRlZmF1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1t
CmluZGV4IDA1ZWEyMTExZWI1ZDQ1M2NiMjhkOGU3N2VmM2NiZjVmMzU2NzE5ODkuLmZhMzBhZmRl
M2IxZTFlMzZlODYxYWVjYmQ5ZmJlOGM3ZjA5MDM1NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50Lm1tCkBAIC01MzQsMTQgKzUzNCwxMiBAQCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25P
cHRpb24+IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxl
YwogICAgIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gbGVnaWJsZU9wdGlvbnM7CiAKICAg
ICBpZiAoIW1fbWVkaWFFbGVtZW50IHx8ICFtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdl
KCkpCi0gICAgICAgIHJldHVybiBsZWdpYmxlT3B0aW9uczsKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAogICAgIGF1dG8mIGNhcHRpb25QcmVmZXJlbmNlcyA9IG1fbWVkaWFFbGVtZW50LT5kb2N1bWVu
dCgpLnBhZ2UoKS0+Z3JvdXAoKS5lbnN1cmVDYXB0aW9uUHJlZmVyZW5jZXMoKTsKLQotICAgIGZv
ciAoYXV0byYgdHJhY2sgOiBtX2xlZ2libGVUcmFja3NGb3JNZW51KQotICAgICAgICBsZWdpYmxl
T3B0aW9ucy5hcHBlbmQoY2FwdGlvblByZWZlcmVuY2VzLm1lZGlhU2VsZWN0aW9uT3B0aW9uRm9y
VHJhY2sodHJhY2suZ2V0KCkpKTsKLQotICAgIHJldHVybiBsZWdpYmxlT3B0aW9uczsKKyAgICBy
ZXR1cm4gbV9sZWdpYmxlVHJhY2tzRm9yTWVudS5tYXAoWyZdKGF1dG8mIHRyYWNrKSB7CisgICAg
ICAgIHJldHVybiBjYXB0aW9uUHJlZmVyZW5jZXMubWVkaWFTZWxlY3Rpb25PcHRpb25Gb3JUcmFj
ayh0cmFjay5nZXQoKSk7CisgICAgfSk7CiB9CiAKIHVpbnQ2NF90IFBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL0R1YWxzaG9jazNISURH
YW1lcGFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL0R1YWxzaG9j
azNISURHYW1lcGFkLmNwcAppbmRleCA2YzQwZThiODg5Mjg3M2ZmMDcyMDYxOGNmZTgzOTY0Yzgw
ZWMzNDFlLi5jMGY1MTgxYmM0NGIxYmRjZWJhNjliOGNiNmEzNGE5ZWExMjdkZjY1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9EdWFsc2hvY2szSElER2Ft
ZXBhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvRHVhbHNo
b2NrM0hJREdhbWVwYWQuY3BwCkBAIC00MywxMiArNDMsMTAgQEAgRHVhbHNob2NrM0hJREdhbWVw
YWQ6OkR1YWxzaG9jazNISURHYW1lcGFkKEhJRERldmljZSYmIGRldmljZSwgdW5zaWduZWQgaW5k
ZXgpCiAKICAgICBtX21hcHBpbmcgPSBzdGFuZGFyZEdhbWVwYWRNYXBwaW5nU3RyaW5nKCk7CiAK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mU3RhbmRhcmRHYW1lcGFkQnV0dG9u
c1dpdGhIb21lQnV0dG9uOyArK2kpCi0gICAgICAgIG1fYnV0dG9uVmFsdWVzLmFwcGVuZCgwLjAp
OworICAgIG1fYnV0dG9uVmFsdWVzID0gVmVjdG9yKG51bWJlck9mU3RhbmRhcmRHYW1lcGFkQnV0
dG9uc1dpdGhIb21lQnV0dG9uLCBTaGFyZWRHYW1lcGFkVmFsdWUgeyAwLjAgfSk7CiAKLSAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGF4aXNDb3VudCA9IDQ7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBheGlzQ291bnQ7ICsraSkKLSAgICAgICAgbV9heGlzVmFsdWVzLmFwcGVuZCgwLjApOwor
ICAgIGNvbnN0ZXhwciBzaXplX3QgYXhpc0NvdW50ID0gNDsKKyAgICBtX2F4aXNWYWx1ZXMgPSBW
ZWN0b3IoYXhpc0NvdW50LCBTaGFyZWRHYW1lcGFkVmFsdWUgeyAwLjAgfSk7CiAKICAgICBhdXRv
IGlucHV0RWxlbWVudHMgPSBoaWREZXZpY2UoKS51bmlxdWVJbnB1dEVsZW1lbnRzSW5EZXZpY2VU
cmVlT3JkZXIoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBh
ZC9tYWMvTG9naXRlY2hHYW1lcGFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVw
YWQvbWFjL0xvZ2l0ZWNoR2FtZXBhZC5jcHAKaW5kZXggNjcxNDNmYjk5NWJhMmMzZTY4ZGQyMTFk
MTY1YmU2MjBjZWY3ODllZi4uZmU0Y2VkYzUxZDYzOWZiN2IxYWU5OTMzZTVjMjY5NmMzOTc4YThl
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvTG9naXRl
Y2hHYW1lcGFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9M
b2dpdGVjaEdhbWVwYWQuY3BwCkBAIC00MywxMiArNDMsMTAgQEAgTG9naXRlY2hHYW1lcGFkOjpM
b2dpdGVjaEdhbWVwYWQoSElERGV2aWNlJiYgZGV2aWNlLCB1bnNpZ25lZCBpbmRleCkKIAogICAg
IG1fbWFwcGluZyA9IHN0YW5kYXJkR2FtZXBhZE1hcHBpbmdTdHJpbmcoKTsKIAotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZTdGFuZGFyZEdhbWVwYWRCdXR0b25zV2l0aG91dEhv
bWVCdXR0b247ICsraSkKLSAgICAgICAgbV9idXR0b25WYWx1ZXMuYXBwZW5kKDAuMCk7CisgICAg
bV9idXR0b25WYWx1ZXMgPSBWZWN0b3IobnVtYmVyT2ZTdGFuZGFyZEdhbWVwYWRCdXR0b25zV2l0
aG91dEhvbWVCdXR0b24sIFNoYXJlZEdhbWVwYWRWYWx1ZSB7IDAuMCB9KTsKIAotICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgYXhpc0NvdW50ID0gNDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGF4aXNDb3VudDsgKytpKQotICAgICAgICBtX2F4aXNWYWx1ZXMuYXBwZW5kKDAuMCk7CisgICAg
Y29uc3RleHByIHNpemVfdCBheGlzQ291bnQgPSA0OworICAgIG1fYXhpc1ZhbHVlcyA9IFZlY3Rv
cihheGlzQ291bnQsIFNoYXJlZEdhbWVwYWRWYWx1ZSB7IDAuMCB9KTsKIAogICAgIGF1dG8gaW5w
dXRFbGVtZW50cyA9IGhpZERldmljZSgpLnVuaXF1ZUlucHV0RWxlbWVudHNJbkRldmljZVRyZWVP
cmRlcigpOwogCkBAIC01OSwxMSArNTcsMTIgQEAgTG9naXRlY2hHYW1lcGFkOjpMb2dpdGVjaEdh
bWVwYWQoSElERGV2aWNlJiYgZGV2aWNlLCB1bnNpZ25lZCBpbmRleCkKICAgICBmb3IgKGF1dG8m
IGVsZW1lbnQgOiBpbnB1dEVsZW1lbnRzKSB7CiAgICAgICAgIHN3aXRjaCAoZWxlbWVudC5mdWxs
VXNhZ2UoKSkgewogICAgICAgICBjYXNlIGhpZEhhdHN3aXRjaEZ1bGxVc2FnZTogewotICAgICAg
ICAgICAgVmVjdG9yPFNoYXJlZEdhbWVwYWRWYWx1ZT4gaGF0c3dpdGNoVmFsdWVzOwotICAgICAg
ICAgICAgaGF0c3dpdGNoVmFsdWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVw
YWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlclRvcF0pOwotICAgICAgICAgICAgaGF0c3dpdGNoVmFs
dWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0
Q2x1c3RlclJpZ2h0XSk7Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0
dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyQm90dG9tXSk7
Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFsdWVzWyhzaXpl
X3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyTGVmdF0pOworICAgICAgICAgICAgYXV0
byBoYXRzd2l0Y2hWYWx1ZXMgPSBWZWN0b3IgeworICAgICAgICAgICAgICAgIG1fYnV0dG9uVmFs
dWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyVG9wXSwKKyAgICAgICAg
ICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1
c3RlclJpZ2h0XSwKKyAgICAgICAgICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVw
YWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlckJvdHRvbV0sCisgICAgICAgICAgICAgICAgbV9idXR0
b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJMZWZ0XQorICAg
ICAgICAgICAgfTsKIAogICAgICAgICAgICAgbV9lbGVtZW50TWFwLnNldChlbGVtZW50LmNvb2tp
ZSgpLCBtYWtlVW5pcXVlPEhJREdhbWVwYWRIYXRzd2l0Y2g+KGVsZW1lbnQsIFdURk1vdmUoaGF0
c3dpdGNoVmFsdWVzKSkpOwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9TdGFkaWFISURHYW1lcGFkLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL1N0YWRpYUhJREdhbWVwYWQuY3BwCmluZGV4
IDBhOTRlNTYyMzNhMjA0NDY0MWYxMDBmMDU2NDRkNTc1YWRiYzllNzMuLjQyMTU5MjdjNDk0YzNl
ZWU2YzEyNTBhYjU1NjQxZmE3MmEyMjA2OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dhbWVwYWQvbWFjL1N0YWRpYUhJREdhbWVwYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL1N0YWRpYUhJREdhbWVwYWQuY3BwCkBAIC00MSwxMiAr
NDEsMTAgQEAgU3RhZGlhSElER2FtZXBhZDo6U3RhZGlhSElER2FtZXBhZChISUREZXZpY2UmJiBk
ZXZpY2UsIHVuc2lnbmVkIGluZGV4KQogCiAgICAgbV9tYXBwaW5nID0gc3RhbmRhcmRHYW1lcGFk
TWFwcGluZ1N0cmluZygpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxOTsgKytpKQot
ICAgICAgICBtX2J1dHRvblZhbHVlcy5hcHBlbmQoMC4wKTsKKyAgICBtX2J1dHRvblZhbHVlcyA9
IFZlY3RvcigxOSwgU2hhcmVkR2FtZXBhZFZhbHVlIHsgMC4wIH0pOwogCi0gICAgc3RhdGljIGNv
bnN0IHNpemVfdCBheGlzQ291bnQgPSA0OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXhp
c0NvdW50OyArK2kpCi0gICAgICAgIG1fYXhpc1ZhbHVlcy5hcHBlbmQoMC4wKTsKKyAgICBjb25z
dGV4cHIgc2l6ZV90IGF4aXNDb3VudCA9IDQ7CisgICAgbV9heGlzVmFsdWVzID0gVmVjdG9yKGF4
aXNDb3VudCwgU2hhcmVkR2FtZXBhZFZhbHVlIHsgMC4wIH0pOwogCiAgICAgYXV0byBpbnB1dEVs
ZW1lbnRzID0gaGlkRGV2aWNlKCkudW5pcXVlSW5wdXRFbGVtZW50c0luRGV2aWNlVHJlZU9yZGVy
KCk7CiAKQEAgLTcwLDExICs2OCwxMiBAQCBTdGFkaWFISURHYW1lcGFkOjpTdGFkaWFISURHYW1l
cGFkKEhJRERldmljZSYmIGRldmljZSwgdW5zaWduZWQgaW5kZXgpCiAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICBjYXNlIGhpZEhhdHN3aXRjaEZ1bGxVc2FnZTogewotICAgICAgICAgICAg
VmVjdG9yPFNoYXJlZEdhbWVwYWRWYWx1ZT4gaGF0c3dpdGNoVmFsdWVzOwotICAgICAgICAgICAg
aGF0c3dpdGNoVmFsdWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0
b25Sb2xlOjpMZWZ0Q2x1c3RlclRvcF0pOwotICAgICAgICAgICAgaGF0c3dpdGNoVmFsdWVzLmFw
cGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3Rl
clJpZ2h0XSk7Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFs
dWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyQm90dG9tXSk7Ci0gICAg
ICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2Ft
ZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyTGVmdF0pOworICAgICAgICAgICAgYXV0byBoYXRz
d2l0Y2hWYWx1ZXMgPSBWZWN0b3IgeworICAgICAgICAgICAgICAgIG1fYnV0dG9uVmFsdWVzWyhz
aXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyVG9wXSwKKyAgICAgICAgICAgICAg
ICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlclJp
Z2h0XSwKKyAgICAgICAgICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0
b25Sb2xlOjpMZWZ0Q2x1c3RlckJvdHRvbV0sCisgICAgICAgICAgICAgICAgbV9idXR0b25WYWx1
ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJMZWZ0XQorICAgICAgICAg
ICAgfTsKIAogICAgICAgICAgICAgbV9lbGVtZW50TWFwLnNldChlbGVtZW50LmNvb2tpZSgpLCBt
YWtlVW5pcXVlPEhJREdhbWVwYWRIYXRzd2l0Y2g+KGVsZW1lbnQsIFdURk1vdmUoaGF0c3dpdGNo
VmFsdWVzKSkpOwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IDFmZWUyOWFlNWY3MTljNGU1
NTRhMmM3ZTcwY2I3MGYwMWY5YjIwMDIuLjcyNGZiMTdjMzNmNGJjYTQ2ODg5YzgzYmM1NTg0OGZk
NzI3MGMzMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuY3BwCkBAIC03NjMsMTEgKzc2Myw5IEBAIHZvaWQgR3JhcGhpY3NMYXllcjo6
YWRkUmVwYWludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZXBhaW50UmVjdCkKICAgICBGbG9hdFJl
Y3QgbGFyZ2VzdFJlcGFpbnRSZWN0KEZsb2F0UG9pbnQoKSwgbV9zaXplKTsKICAgICBsYXJnZXN0
UmVwYWludFJlY3QuaW50ZXJzZWN0KHJlcGFpbnRSZWN0KTsKICAgICBSZXBhaW50TWFwOjppdGVy
YXRvciByZXBhaW50SXQgPSByZXBhaW50UmVjdE1hcCgpLmZpbmQodGhpcyk7Ci0gICAgaWYgKHJl
cGFpbnRJdCA9PSByZXBhaW50UmVjdE1hcCgpLmVuZCgpKSB7Ci0gICAgICAgIFZlY3RvcjxGbG9h
dFJlY3Q+IHJlcGFpbnRSZWN0czsKLSAgICAgICAgcmVwYWludFJlY3RzLmFwcGVuZChsYXJnZXN0
UmVwYWludFJlY3QpOwotICAgICAgICByZXBhaW50UmVjdE1hcCgpLnNldCh0aGlzLCByZXBhaW50
UmVjdHMpOwotICAgIH0gZWxzZSB7CisgICAgaWYgKHJlcGFpbnRJdCA9PSByZXBhaW50UmVjdE1h
cCgpLmVuZCgpKQorICAgICAgICByZXBhaW50UmVjdE1hcCgpLnNldCh0aGlzLCBWZWN0b3IgeyBX
VEZNb3ZlKGxhcmdlc3RSZXBhaW50UmVjdCkgfSk7CisgICAgZWxzZSB7CiAgICAgICAgIFZlY3Rv
cjxGbG9hdFJlY3Q+JiByZXBhaW50UmVjdHMgPSByZXBhaW50SXQtPnZhbHVlOwogICAgICAgICBy
ZXBhaW50UmVjdHMuYXBwZW5kKGxhcmdlc3RSZXBhaW50UmVjdCk7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcAppbmRleCBi
OTc5OWE0ZDEwNjFlZDIwYTFiNTBlZDUwNjg2NTFjNWZlYTQ2NmE0Li4xZDAwNGZjMTE0YWNiNzE1
YjEwNTI1OTAzMzZiMDZmY2VjMzAzMDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcApAQCAtMjkwLDE3ICsyOTAsMTQgQEAgc3Rh
dGljIFZlY3RvcjxGbG9hdFBvaW50R3JhcGg6OlBvbHlnb24+IHBvbHlnb25zRm9yUmVjdChjb25z
dCBWZWN0b3I8RmxvYXRSZWN0PiYKIAogVmVjdG9yPFBhdGg+IFBhdGhVdGlsaXRpZXM6OnBhdGhz
V2l0aFNocmlua1dyYXBwZWRSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZs
b2F0IHJhZGl1cykKIHsKLSAgICBWZWN0b3I8UGF0aD4gcGF0aHM7Ci0KICAgICBpZiAocmVjdHMu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gcGF0aHM7CisgICAgICAgIHJldHVybiB7IH07CiAK
ICAgICBpZiAocmVjdHMuc2l6ZSgpID4gMjApIHsKICAgICAgICAgUGF0aCBwYXRoOwogICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiByZWN0cykKICAgICAgICAgICAgIHBhdGguYWRkUm91
bmRlZFJlY3QocmVjdCwgRmxvYXRTaXplKHJhZGl1cywgcmFkaXVzKSk7Ci0gICAgICAgIHBhdGhz
LmFwcGVuZChwYXRoKTsKLSAgICAgICAgcmV0dXJuIHBhdGhzOworICAgICAgICByZXR1cm4geyBX
VEZNb3ZlKHBhdGgpIH07CiAgICAgfQogCiAgICAgRmxvYXRQb2ludEdyYXBoIGdyYXBoOwpAQCAt
MzA5LDEwICszMDYsMTEgQEAgVmVjdG9yPFBhdGg+IFBhdGhVdGlsaXRpZXM6OnBhdGhzV2l0aFNo
cmlua1dyYXBwZWRSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYKICAgICAgICAgUGF0aCBw
YXRoOwogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiByZWN0cykKICAgICAgICAgICAg
IHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCwgRmxvYXRTaXplKHJhZGl1cywgcmFkaXVzKSk7Ci0g
ICAgICAgIHBhdGhzLmFwcGVuZChwYXRoKTsKLSAgICAgICAgcmV0dXJuIHBhdGhzOworICAgICAg
ICByZXR1cm4geyBXVEZNb3ZlKHBhdGgpIH07CiAgICAgfQogCisgICAgVmVjdG9yPFBhdGg+IHBh
dGhzOworICAgIHBhdGhzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocG9seXMuc2l6ZSgpKTsKICAg
ICBmb3IgKGF1dG8mIHBvbHkgOiBwb2x5cykgewogICAgICAgICBQYXRoIHBhdGg7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwb2x5LnNpemUoKTsgKytpKSB7CkBAIC0zNDQsNyAr
MzQyLDcgQEAgVmVjdG9yPFBhdGg+IFBhdGhVdGlsaXRpZXM6OnBhdGhzV2l0aFNocmlua1dyYXBw
ZWRSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYKICAgICAgICAgICAgIHBhdGguYWRkQXJj
VG8oKmZyb21FZGdlLnNlY29uZCwgKnRvRWRnZS5maXJzdCArIHRvT2Zmc2V0LCBjbGFtcGVkUmFk
aXVzKTsKICAgICAgICAgfQogICAgICAgICBwYXRoLmNsb3NlU3VicGF0aCgpOwotICAgICAgICBw
YXRocy5hcHBlbmQocGF0aCk7CisgICAgICAgIHBhdGhzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3Zl
KHBhdGgpKTsKICAgICB9CiAgICAgcmV0dXJuIHBhdGhzOwogfQpAQCAtNTQzLDEzICs1NDEsMTQg
QEAgUGF0aCBQYXRoVXRpbGl0aWVzOjpwYXRoV2l0aFNocmlua1dyYXBwZWRSZWN0c0Zvck91dGxp
bmUoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4KICAgICBib3R0b21MZWZ0UmFkaXVzID0gZmlyc3RM
aW5lUmFkaWkuYm90dG9tTGVmdCgpOwogICAgIHRvcFJpZ2h0UmFkaXVzID0gbGFzdExpbmVSYWRp
aS50b3BSaWdodCgpOwogICAgIGJvdHRvbVJpZ2h0UmFkaXVzID0gbGFzdExpbmVSYWRpaS5ib3R0
b21SaWdodCgpOwotICAgIFZlY3RvcjxGbG9hdFBvaW50PiBjb3JuZXJzOwogICAgIC8vIHBoeXNp
Y2FsIHRvcExlZnQvdG9wUmlnaHQvYm90dG9tUmlnaHQvYm90dG9tTGVmdAogICAgIGF1dG8gaXNI
b3Jpem9udGFsID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpOwotICAgIGNv
cm5lcnMuYXBwZW5kKGZpcnN0TGluZVJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci0gICAgY29ybmVy
cy5hcHBlbmQoaXNIb3Jpem9udGFsID8gbGFzdExpbmVSZWN0Lm1heFhNaW5ZQ29ybmVyKCkgOiBm
aXJzdExpbmVSZWN0Lm1heFhNaW5ZQ29ybmVyKCkpOwotICAgIGNvcm5lcnMuYXBwZW5kKGxhc3RM
aW5lUmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKLSAgICBjb3JuZXJzLmFwcGVuZChpc0hvcml6b250
YWwgPyBmaXJzdExpbmVSZWN0Lm1pblhNYXhZQ29ybmVyKCkgOiBsYXN0TGluZVJlY3QubWluWE1h
eFlDb3JuZXIoKSk7CisgICAgYXV0byBjb3JuZXJzID0gVmVjdG9yPEZsb2F0UG9pbnQ+Ojpmcm9t
KAorICAgICAgICBmaXJzdExpbmVSZWN0Lm1pblhNaW5ZQ29ybmVyKCksCisgICAgICAgIGlzSG9y
aXpvbnRhbCA/IGxhc3RMaW5lUmVjdC5tYXhYTWluWUNvcm5lcigpIDogZmlyc3RMaW5lUmVjdC5t
YXhYTWluWUNvcm5lcigpLAorICAgICAgICBsYXN0TGluZVJlY3QubWF4WE1heFlDb3JuZXIoKSwK
KyAgICAgICAgaXNIb3Jpem9udGFsID8gZmlyc3RMaW5lUmVjdC5taW5YTWF4WUNvcm5lcigpIDog
bGFzdExpbmVSZWN0Lm1pblhNYXhZQ29ybmVyKCkKKyAgICApOwogCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHBvbHkuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgYXV0byBtb3ZlT3JBZGRM
aW5lVG8gPSBbaSwgJnBhdGhdIChjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2
YXRlLmNwcAppbmRleCA1NDk5ZjM3YTdmMzY0NmJkNWYzOTVhNDhiMDlkOTQxMWQ0YzliNjY0Li4w
NGNiZTRkMjdmMTkwYjdiMjdiOWNhN2U5OGE5YzQ3MTczZDJmODliIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNw
cApAQCAtMjE2LDEwICsyMTYsOSBAQCB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGU6OmJ1ZmZlcmVk
U2FtcGxlc0ZvclRyYWNrSWQoY29uc3QgQXRvbVN0cmluZyYgdHJhY2tJZCwgQwogICAgIGlmICgh
dHJhY2tCdWZmZXIpCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAKLSAgICBWZWN0
b3I8U3RyaW5nPiBzYW1wbGVEZXNjcmlwdGlvbnM7Ci0gICAgZm9yIChhdXRvJiBwYWlyIDogdHJh
Y2tCdWZmZXItPnNhbXBsZXMuZGVjb2RlT3JkZXIoKSkKLSAgICAgICAgc2FtcGxlRGVzY3JpcHRp
b25zLmFwcGVuZCh0b1N0cmluZygqcGFpci5zZWNvbmQpKTsKLQorICAgIGF1dG8gc2FtcGxlRGVz
Y3JpcHRpb25zID0gV1RGOjptYXAodHJhY2tCdWZmZXItPnNhbXBsZXMuZGVjb2RlT3JkZXIoKSwg
W10oYXV0byYgZW50cnkpIHsKKyAgICAgICAgcmV0dXJuIHRvU3RyaW5nKCplbnRyeS5zZWNvbmQp
OworICAgIH0pOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoc2FtcGxlRGVzY3JpcHRp
b25zKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCmlu
ZGV4IDhiMDRmOWJlOTZjMzZlMGEyNjIxODBhMjVlYTM3NDU5NjJiM2Q3ZDUuLmM1NDYxNDYyM2I4
N2VjMDg5NjFmMWQ0NDIwZjk2MDFmMTZhNmFiNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZh
aXJQbGF5U3RyZWFtaW5nLmNwcApAQCAtMjAxLDkgKzIwMSw3IEBAIFJlZlB0cjxGcmFnbWVudGVk
U2hhcmVkQnVmZmVyPiBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OnNhbml0aXplU2tkKGNv
bnN0IEZyCiBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxSZWY8RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4+
PiBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OmV4dHJhY3RLZXlJRHNTa2QoY29uc3QgRnJh
Z21lbnRlZFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogewogICAgIC8vIEluIHRoZSAnc2tkJyBzY2hl
bWUsIHRoZSBpbml0IGRhdGEgaXMgdGhlIGtleSBJRC4KLSAgICBWZWN0b3I8UmVmPEZyYWdtZW50
ZWRTaGFyZWRCdWZmZXI+PiBrZXlJRHM7Ci0gICAga2V5SURzLmFwcGVuZChidWZmZXIuY29weSgp
KTsKLSAgICByZXR1cm4ga2V5SURzOworICAgIHJldHVybiBWZWN0b3IgeyBidWZmZXIuY29weSgp
IH07CiB9CiAKIHN0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hTZXQ8QXRvbVN0cmluZz4mIHZhbGlkSW5pdERhdGFUeXBlcygpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5j
ZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZP
YmpDLm1tCmluZGV4IGQ2MzYxMmZhYTA1MzcwYTAzOTczYTFlMmQ1NmMxODY4YTJmOTkxNjAuLjk2
MjVmYTk1MDNlN2JlYmM3MTlmYzRiMzdhNjNjMzhkNzQ1MDMwOGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNl
RmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdB
VkZPYmpDLm1tCkBAIC0xNDk0LDcgKzE0OTQsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZh
aXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6dXBkYXRlS2V5U3RhdHVzZXMoc3RkOjpvcHRpb25hbAog
ICAgICAgICB9CiAgICAgfQogCi0gICAgbV9rZXlTdGF0dXNlcy5zd2FwKGtleVN0YXR1c2VzKTsK
KyAgICBtX2tleVN0YXR1c2VzID0gV1RGTW92ZShrZXlTdGF0dXNlcyk7CiAKICAgICBtX2luc3Rh
bmNlLT5zZXNzaW9uS2V5U3RhdHVzZXNDaGFuZ2VkKCp0aGlzKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVj
b2RlckFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1tCmluZGV4IDU2M2FmMTkyNGQ5YWYzNTll
OTMwZWY2NGJhZTMyM2ZjMDQxZGU4N2EuLmFkN2Y0NTEwMWMwNmExODg4YzAwOGZhZWQ0YTkxOTA1
NjEzODI5M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVjb2RlckFWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVyQVZGT2Jq
Qy5tbQpAQCAtNTM1LDEzICs1MzUsMTAgQEAgVmVjdG9yPEltYWdlRGVjb2Rlcjo6RnJhbWVJbmZv
PiBJbWFnZURlY29kZXJBVkZPYmpDOjpmcmFtZUluZm9zKCkgY29uc3QKICAgICBpZiAobV9zYW1w
bGVEYXRhLmVtcHR5KCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBWZWN0b3I8SW1hZ2VE
ZWNvZGVyOjpGcmFtZUluZm8+IGluZm9zOwotICAgIGZvciAoYXV0byYgc2FtcGxlIDogbV9zYW1w
bGVEYXRhLnByZXNlbnRhdGlvbk9yZGVyKCkpIHsKKyAgICByZXR1cm4gV1RGOjptYXAobV9zYW1w
bGVEYXRhLnByZXNlbnRhdGlvbk9yZGVyKCksIFtdKGF1dG8mIHNhbXBsZSkgewogICAgICAgICBh
dXRvKiBpbWFnZVNhbXBsZSA9IChJbWFnZURlY29kZXJBVkZPYmpDU2FtcGxlKilzYW1wbGUuc2Vj
b25kLmdldCgpOwotICAgICAgICBpbmZvcy5hcHBlbmQoeyBpbWFnZVNhbXBsZS0+aGFzQWxwaGEo
KSwgU2Vjb25kcyhpbWFnZVNhbXBsZS0+ZHVyYXRpb24oKS50b0RvdWJsZSgpKX0pOwotICAgIH0K
LQotICAgIHJldHVybiBpbmZvczsKKyAgICAgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6RnJhbWVJ
bmZvIHsgaW1hZ2VTYW1wbGUtPmhhc0FscGhhKCksIFNlY29uZHMoaW1hZ2VTYW1wbGUtPmR1cmF0
aW9uKCkudG9Eb3VibGUoKSkgfTsKKyAgICB9KTsKIH0KIAogYm9vbCBJbWFnZURlY29kZXJBVkZP
YmpDOjpmcmFtZUFsbG93U3Vic2FtcGxpbmdBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL1NvdXJjZUJ1ZmZlclBhcnNlckFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQYXJzZXJBVkZPYmpDLm1t
CmluZGV4IGFhMTU4NDA0YjEwZTQ0NGFmNmU1ZWRkYzhkYWQ2YmE5NmVkNWNiMjIuLmU2MWIxNDdm
NjNjNWY0NTcyNzVmNjA1MDNlMzdhOGI1MmQxOGUzYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclBhcnNl
ckFWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvU291cmNlQnVmZmVyUGFyc2VyQVZGT2JqQy5tbQpAQCAtMjk3LDE2ICsyOTcs
MTQgQEAgdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJBVkZPYmpDOjpkaWRQYXJzZVN0cmVhbURhdGFB
c0Fzc2V0KEFWQXNzZXQqIGFzc2V0KQogCiAgICAgICAgICAgICBpZiAoW3RyYWNrIGhhc01lZGlh
Q2hhcmFjdGVyaXN0aWM6QVZNZWRpYUNoYXJhY3RlcmlzdGljVmlzdWFsXSkgewogICAgICAgICAg
ICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudDo6
VmlkZW9UcmFja0luZm9ybWF0aW9uIGluZm87Ci0gICAgICAgICAgICAgICAgYXV0byB2aWRlb1Ry
YWNrID0gVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmNyZWF0ZSh0cmFjayk7
Ci0gICAgICAgICAgICAgICAgaW5mby50cmFjayA9IHZpZGVvVHJhY2suY29weVJlZigpOworICAg
ICAgICAgICAgICAgIGluZm8udHJhY2sgPSBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQzo6Y3JlYXRlKHRyYWNrKTsKICAgICAgICAgICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0g
TWVkaWFEZXNjcmlwdGlvbkFWRk9iakM6OmNyZWF0ZSh0cmFjayk7Ci0gICAgICAgICAgICAgICAg
c2VnbWVudC52aWRlb1RyYWNrcy5hcHBlbmQoaW5mbyk7CisgICAgICAgICAgICAgICAgc2VnbWVu
dC52aWRlb1RyYWNrcy5hcHBlbmQoV1RGTW92ZShpbmZvKSk7CiAgICAgICAgICAgICB9IGVsc2Ug
aWYgKFt0cmFjayBoYXNNZWRpYUNoYXJhY3RlcmlzdGljOkFWTWVkaWFDaGFyYWN0ZXJpc3RpY0F1
ZGlibGVdKSB7CiAgICAgICAgICAgICAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5p
dGlhbGl6YXRpb25TZWdtZW50OjpBdWRpb1RyYWNrSW5mb3JtYXRpb24gaW5mbzsKLSAgICAgICAg
ICAgICAgICBhdXRvIGF1ZGlvVHJhY2sgPSBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQzo6Y3JlYXRlKHRyYWNrKTsKLSAgICAgICAgICAgICAgICBpbmZvLnRyYWNrID0gYXVkaW9U
cmFjay5jb3B5UmVmKCk7CisgICAgICAgICAgICAgICAgaW5mby50cmFjayA9IEF1ZGlvVHJhY2tQ
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjcmVhdGUodHJhY2spOwogICAgICAgICAgICAgICAg
IGluZm8uZGVzY3JpcHRpb24gPSBNZWRpYURlc2NyaXB0aW9uQVZGT2JqQzo6Y3JlYXRlKHRyYWNr
KTsKLSAgICAgICAgICAgICAgICBzZWdtZW50LmF1ZGlvVHJhY2tzLmFwcGVuZChpbmZvKTsKKyAg
ICAgICAgICAgICAgICBzZWdtZW50LmF1ZGlvVHJhY2tzLmFwcGVuZChXVEZNb3ZlKGluZm8pKTsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gRklYTUUoMTI1MTYxKSAgICA6IEFkZCBU
ZXh0VHJhY2sgc3VwcG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCmluZGV4IDg1NDIx
ZTNkZTcwOWNlMTU5YzQ5NGI0MGZiOGQxYWQyMzU5M2MzYmIuLmNiMmQwYmU4OTcwNDZiN2ZmOWYz
Mjc2Yzk3Njc5YWZiNGYwMTJhYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KQEAg
LTY4LDExICs2OCwxMCBAQCBWZWN0b3I8Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFZhcmlhdGlvbkF4
aXM+IEZvbnRQbGF0Zm9ybURhdGE6OnZhcmlhdGlvbkF4ZXMoU2hvdQogICAgIGlmICghcGxhdGZv
cm1Gb250KQogICAgICAgICByZXR1cm4geyB9OwogICAgIAotICAgIFZlY3RvcjxGb250VmFyaWF0
aW9uQXhpcz4gcmVzdWx0czsKLSAgICBmb3IgKGF1dG8mIFt0YWcsIHZhbHVlc10gOiBkZWZhdWx0
VmFyaWF0aW9uVmFsdWVzKHBsYXRmb3JtRm9udCwgc2hvdWxkTG9jYWxpemVBeGlzTmFtZXMpKQot
ICAgICAgICByZXN1bHRzLmFwcGVuZChGb250UGxhdGZvcm1EYXRhOjpGb250VmFyaWF0aW9uQXhp
cyh2YWx1ZXMuYXhpc05hbWUsIFN0cmluZyh0YWcuZGF0YSgpLCB0YWcuc2l6ZSgpKSwgdmFsdWVz
LmRlZmF1bHRWYWx1ZSwgdmFsdWVzLm1pbmltdW1WYWx1ZSwgdmFsdWVzLm1heGltdW1WYWx1ZSkp
OwotICAgIAotICAgIHJldHVybiByZXN1bHRzOworICAgIHJldHVybiBXVEY6Om1hcChkZWZhdWx0
VmFyaWF0aW9uVmFsdWVzKHBsYXRmb3JtRm9udCwgc2hvdWxkTG9jYWxpemVBeGlzTmFtZXMpLCBb
XShhdXRvJiYgZW50cnkpIHsKKyAgICAgICAgYXV0byYgW3RhZywgdmFsdWVzXSA9IGVudHJ5Owor
ICAgICAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YTo6Rm9udFZhcmlhdGlvbkF4aXMgeyB2YWx1
ZXMuYXhpc05hbWUsIFN0cmluZyh0YWcuZGF0YSgpLCB0YWcuc2l6ZSgpKSwgdmFsdWVzLmRlZmF1
bHRWYWx1ZSwgdmFsdWVzLm1pbmltdW1WYWx1ZSwgdmFsdWVzLm1heGltdW1WYWx1ZSB9OworICAg
IH0pOwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0
ZWJvYXJkTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMu
bW0KaW5kZXggYmE4ZWExZWI0NDhhOTIxZTMwZDNhZTZhOWM3N2U4ODIzM2FiYzUzYi4uYTJjMjUw
YWEyYmVmOGRlOTY0YmFmMDkyNDBkNWUwZWM0MTUwZWY4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KQEAgLTcwMiwxMCArNzAyLDcgQEAgQUxMT1df
REVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KICAgICAgICAgTlNVUkwgKnVybCA9IFtOU1VS
TCBVUkxXaXRoU3RyaW5nOmNvY29hRGF0YV07CiAgICAgICAgIGlmIChbdXJsIGlzRmlsZVVSTF0p
CiAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7Ci0g
ICAgICAgIHR5cGVzLmFwcGVuZChjb2NvYVR5cGUpOwotICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdp
ZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFR5cGVzKHR5cGVzLCBtX3Bhc3RlYm9hcmRO
YW1lLCBjb250ZXh0KCkpOworICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2Fy
ZFN0cmF0ZWd5KCktPnNldFR5cGVzKHsgY29jb2FUeXBlIH0sIG1fcGFzdGVib2FyZE5hbWUsIGNv
bnRleHQoKSk7CiAgICAgICAgIG1fY2hhbmdlQ291bnQgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+
cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFN0cmluZ0ZvclR5cGUoY29jb2FEYXRhLCBjb2NvYVR5
cGUsIG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQoKSk7CiAKICAgICAgICAgcmV0dXJuOwpAQCAt
NzE0LDkgKzcxMSw3IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogCiAgICAg
aWYgKCFjb2NvYVR5cGUuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIGV2ZXJ5dGhpbmcgZWxzZSB3
ZSBrbm93IG9mIGdvZXMgb24gdGhlIHBib2FyZCBhcyBhIHN0cmluZwotICAgICAgICBWZWN0b3I8
U3RyaW5nPiB0eXBlczsKLSAgICAgICAgdHlwZXMuYXBwZW5kKGNvY29hVHlwZSk7Ci0gICAgICAg
IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+YWRkVHlwZXModHlw
ZXMsIG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQoKSk7CisgICAgICAgIHBsYXRmb3JtU3RyYXRl
Z2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+YWRkVHlwZXMoeyBjb2NvYVR5cGUgfSwgbV9w
YXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKTsKICAgICAgICAgbV9jaGFuZ2VDb3VudCA9IHBsYXRm
b3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0U3RyaW5nRm9yVHlwZShj
b2NvYURhdGEsIGNvY29hVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKTsKICAgICB9
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFs
dGltZVZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9SZWFsdGltZVZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAKaW5kZXggM2UzZjQxYTFjNTgw
N2U2Y2QzNTlkZTNkZjI2YWU3MmQ1NTFjZDU4Mi4uNzdkMzI2NjU2ZDVjYmM1YWVmY2Q0MTdhMTdh
ODdhNDZmNzEyMjdiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vUmVhbHRpbWVWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlLmNwcApAQCAt
NzUsMTEgKzc1LDkgQEAgVmVjdG9yPFZpZGVvUHJlc2V0RGF0YT4gUmVhbHRpbWVWaWRlb0NhcHR1
cmVTb3VyY2U6OnByZXNldHNEYXRhKCkKIAogdm9pZCBSZWFsdGltZVZpZGVvQ2FwdHVyZVNvdXJj
ZTo6c2V0U3VwcG9ydGVkUHJlc2V0cyhWZWN0b3I8VmlkZW9QcmVzZXREYXRhPiYmIHByZXNldERh
dGEpCiB7Ci0gICAgVmVjdG9yPFJlZjxWaWRlb1ByZXNldD4+IHByZXNldHM7Ci0KLSAgICBmb3Ig
KGF1dG8mIGRhdGEgOiBwcmVzZXREYXRhKQotICAgICAgICBwcmVzZXRzLmFwcGVuZChWaWRlb1By
ZXNldDo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpKTsKLQorICAgIGF1dG8gcHJlc2V0cyA9IFdURjo6
bWFwKFdURk1vdmUocHJlc2V0RGF0YSksIFtdKGF1dG8mJiBkYXRhKSB7CisgICAgICAgIHJldHVy
biBWaWRlb1ByZXNldDo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpOworICAgIH0pOwogICAgIHNldFN1
cHBvcnRlZFByZXNldHMoV1RGTW92ZShwcmVzZXRzKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCmluZGV4IDY3YTc2
Mjk1ZDg1ZjM5MWM4M2IyNDAwZTZkMWZlNTc5Y2NkZWQ4OGYuLjYyMzYzNmFjMmFiZDY4Mzg0MTRk
YzhmMWY5MjZjZWQ1YzQ3Y2NhMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcApAQCAtMTQxLDEwICsxNDEsOCBAQCB2b2lk
IEJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmIHVybCwgVmVjdG9y
PEJsb2JQYXJ0PiYmIGJsb2JQYQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBCbG9iUGFydDo6VHlwZTo6QmxvYjogewotICAgICAgICAgICAgaWYgKGF1dG8gYmxv
YiA9IG1fYmxvYnMuZ2V0KHBhcnQudXJsKCkuc3RyaW5nKCkpKSB7Ci0gICAgICAgICAgICAgICAg
Zm9yIChjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0gOiBibG9iLT5pdGVtcygpKQotICAgICAgICAg
ICAgICAgICAgICBibG9iRGF0YS0+bV9pdGVtcy5hcHBlbmQoaXRlbSk7Ci0gICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoYXV0byBibG9iID0gbV9ibG9icy5nZXQocGFydC51cmwoKS5zdHJp
bmcoKSkpCisgICAgICAgICAgICAgICAgYmxvYkRhdGEtPm1faXRlbXMuYXBwZW5kVmVjdG9yKGJs
b2ItPml0ZW1zKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtMzI4LDcgKzMyNiw3IEBAIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6d3JpdGVCbG9ic1RvVGVt
cG9yYXJ5RmlsZXNGb3JJbmRleGVkREIoY29uc3QgVmVjdG9yPFN0cmluCiAgICAgICAgICAgICAg
ICAgZmlsZVBhdGhzLmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBmaWxlUGF0aHMuYXBwZW5kKHRlbXBGaWxlUGF0aC5pc29sYXRlZENv
cHkoKSk7CisgICAgICAgICAgICBmaWxlUGF0aHMuYXBwZW5kKFdURk1vdmUodGVtcEZpbGVQYXRo
KS5pc29sYXRlZENvcHkoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYWxsT25NYWluVGhyZWFk
KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBmaWxlUGF0
aHMgPSBXVEZNb3ZlKGZpbGVQYXRocyldICgpIG11dGFibGUgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggODUzMGUzMzU1ZjJk
NmI4ZDdmZmI2ZWRmODNkNjA4YmNhNGI5ZjU1NS4uOWFiOTk4ZTQxY2IwOGNmMGI2ZjkwZjEwZjEz
YzRiODQ1N2VjOTM5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuY3BwCkBAIC0yMDg2LDEwICsyMDg2LDggQEAgdm9pZCBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6ZHJhd0JveFNpZGVGcm9tUGF0aChHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNz
Q29udGV4dCwKICAgICAgICAgICAgICAgICBnYXBMZW5ndGggKz0gKGRhc2hMZW5ndGggIC8gbnVt
YmVyT2ZHYXBzKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgRGFzaEFycmF5IGxpbmVE
YXNoOwotICAgICAgICAgICAgbGluZURhc2guYXBwZW5kKGRhc2hMZW5ndGgpOwotICAgICAgICAg
ICAgbGluZURhc2guYXBwZW5kKGdhcExlbmd0aCk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQuc2V0TGluZURhc2gobGluZURhc2gsIGRhc2hMZW5ndGgpOworICAgICAgICAgICAgYXV0byBs
aW5lRGFzaCA9IERhc2hBcnJheTo6ZnJvbShkYXNoTGVuZ3RoLCBnYXBMZW5ndGgpOworICAgICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldExpbmVEYXNoKFdURk1vdmUobGluZURhc2gpLCBkYXNo
TGVuZ3RoKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IHN0cm9raW5n
IHRoZSBib3JkZXIgcGF0aCBjYXVzZXMgaXNzdWVzIHdpdGggdGlnaHQgY29ybmVyczoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggZGE4
ZGYyZTkyM2IzNTQ2ZTBmM2Q0YzViMzA1ZWZlNjU0MDdlNzg2MS4uNDI1YzY5YzMxNDFiZjc0ZmE1
NzJkZjIwYmI4YTBlNDA1NzdhYjgxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTE5NTYsOSArMTk1Niw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXJCYWNraW5nOjpjb25uZWN0Q2xpcHBpbmdTdGFja0xheWVycyhMYXllckFuY2VzdG9yQ2xp
cHBpbmdTdGFjayYKICAgICBhdXRvJiBjbGlwcGluZ0VudHJ5U3RhY2sgPSBjbGlwcGluZ1N0YWNr
LnN0YWNrKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNsaXBwaW5nRW50cnlTdGFj
ay5zaXplKCkgLSAxOyArK2kpIHsKICAgICAgICAgYXV0byYgZW50cnkgPSBjbGlwcGluZ0VudHJ5
U3RhY2suYXQoaSk7Ci0gICAgICAgIFZlY3RvcjxSZWY8R3JhcGhpY3NMYXllcj4+IGNoaWxkcmVu
OwotICAgICAgICBjaGlsZHJlbi5hcHBlbmQoKmNsaXBwaW5nRW50cnlTdGFjay5hdChpICsgMSku
Y2xpcHBpbmdMYXllcik7Ci0gICAgICAgIGVudHJ5LmNsaXBwaW5nTGF5ZXItPnNldENoaWxkcmVu
KFdURk1vdmUoY2hpbGRyZW4pKTsKKyAgICAgICAgZW50cnkuY2xpcHBpbmdMYXllci0+c2V0Q2hp
bGRyZW4oeyBSZWYgeyAqY2xpcHBpbmdFbnRyeVN0YWNrLmF0KGkgKyAxKS5jbGlwcGluZ0xheWVy
IH0gfSk7CiAgICAgfQogCiAgICAgY2xpcHBpbmdFbnRyeVN0YWNrLmxhc3QoKS5jbGlwcGluZ0xh
eWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCAwYmUwMzlhMGYyM2Q1N2ZmN2Y1N2Q5
OTA5YjY1Mzc1YTAyNDI0M2I0Li4yM2Q3MzcxMzRjYThlYWExNjA1ZDBjNDc3YWNlNjI4M2Y4NDYy
MWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcApAQCAtMTQ5MSw5ICsxNDkxLDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmFkanVzdE92ZXJmbG93U2Nyb2xsYmFyQ29udGFpbmVyTGF5ZXJzKFJlbmRlckxheWVyJgog
ICAgICAgICAgICAgb3ZlcmZsb3dCYWNraW5nLT5lbnN1cmVPdmVyZmxvd0NvbnRyb2xzSG9zdExh
eWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrKCZzdGFja2luZ0NvbnRleHRMYXllcik7CiAKICAgICAg
ICAgaWYgKGF1dG8qIG92ZXJmbG93Q29udHJvbHNBbmNlc3RvckNsaXBwaW5nU3RhY2sgPSBvdmVy
Zmxvd0JhY2tpbmctPm92ZXJmbG93Q29udHJvbHNIb3N0TGF5ZXJBbmNlc3RvckNsaXBwaW5nU3Rh
Y2soKSkgewotICAgICAgICAgICAgVmVjdG9yPFJlZjxHcmFwaGljc0xheWVyPj4gY2hpbGRyZW47
Ci0gICAgICAgICAgICBjaGlsZHJlbi5hcHBlbmQoKm92ZXJmbG93Q29udGFpbmVyTGF5ZXIpOwot
ICAgICAgICAgICAgb3ZlcmZsb3dDb250cm9sc0FuY2VzdG9yQ2xpcHBpbmdTdGFjay0+bGFzdENs
aXBwaW5nTGF5ZXIoKS0+c2V0Q2hpbGRyZW4oV1RGTW92ZShjaGlsZHJlbikpOworICAgICAgICAg
ICAgb3ZlcmZsb3dDb250cm9sc0FuY2VzdG9yQ2xpcHBpbmdTdGFjay0+bGFzdENsaXBwaW5nTGF5
ZXIoKS0+c2V0Q2hpbGRyZW4oeyBSZWYgeyAqb3ZlcmZsb3dDb250YWluZXJMYXllciB9IH0pOwog
ICAgICAgICAgICAgb3ZlcmZsb3dDb250YWluZXJMYXllciA9IG92ZXJmbG93Q29udHJvbHNBbmNl
c3RvckNsaXBwaW5nU3RhY2stPmZpcnN0Q2xpcHBpbmdMYXllcigpOwogICAgICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCA5ZTEwOGY4YjRm
ZjI2MTc5Njg5NjRmYTEzNzAxNTE5YmJjMjQ1MmM0Li44NzY2N2RlMmRlZDI5NWQ5MzU4MDJiMzM4
OTJhMGMzMjFjN2UzMmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
TWFjLm1tCkBAIC0yNzMxLDEwICsyNzMxLDkgQEAgc3RhdGljIHZvaWQgcGFpbnRBdHRhY2htZW50
VGl0bGVCYWNrZ3JvdW5kKGNvbnN0IFJlbmRlckF0dGFjaG1lbnQmIGF0dGFjaG1lbnQsIEcKICAg
ICBpZiAobGF5b3V0LmxpbmVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVj
dG9yPEZsb2F0UmVjdD4gYmFja2dyb3VuZFJlY3RzOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsYXlvdXQubGluZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGJhY2tncm91bmRSZWN0cy5h
cHBlbmQobGF5b3V0LmxpbmVzW2ldLmJhY2tncm91bmRSZWN0KTsKKyAgICBhdXRvIGJhY2tncm91
bmRSZWN0cyA9IGxheW91dC5saW5lcy5tYXAoW10oYXV0byYgbGluZSkgeworICAgICAgICByZXR1
cm4gbGluZS5iYWNrZ3JvdW5kUmVjdDsKKyAgICB9KTsKIAogICAgIENvbG9yIGJhY2tncm91bmRD
b2xvcjsKICAgICBpZiAoYXR0YWNobWVudC5mcmFtZSgpLnNlbGVjdGlvbigpLmlzRm9jdXNlZEFu
ZEFjdGl2ZSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCBmZTU1OWJkNzBiMWQwY2Y0YjFjNWE1YjFjOTBhMjk2
MzVlOGIyNzMxLi45Mjc2YjkzYzczMTI2MWMxZjJmZmJlYzQ5ZjFlY2NlNzNjYTFiYjVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4
dC5jcHAKQEAgLTE5NywxMSArMTk3LDkgQEAgc3RhdGljIHZvaWQgd3JpdGVTVkdTdHJva2VQYWlu
dGluZ1Jlc291cmNlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJFbGVtZW50JgogICAgIFNW
R0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dCgmc2hhcGUpOwogICAgIGRvdWJsZSBkYXNoT2Zm
c2V0ID0gbGVuZ3RoQ29udGV4dC52YWx1ZUZvckxlbmd0aChzdmdTdHlsZS5zdHJva2VEYXNoT2Zm
c2V0KCkpOwogICAgIGRvdWJsZSBzdHJva2VXaWR0aCA9IGxlbmd0aENvbnRleHQudmFsdWVGb3JM
ZW5ndGgoc3R5bGUuc3Ryb2tlV2lkdGgoKSk7Ci0gICAgY29uc3QgYXV0byYgZGFzaGVzID0gc3Zn
U3R5bGUuc3Ryb2tlRGFzaEFycmF5KCk7Ci0KLSAgICBEYXNoQXJyYXkgZGFzaEFycmF5OwotICAg
IGZvciAoYXV0byYgbGVuZ3RoIDogZGFzaGVzKQotICAgICAgICBkYXNoQXJyYXkuYXBwZW5kKGxl
bmd0aC52YWx1ZShsZW5ndGhDb250ZXh0KSk7CisgICAgYXV0byBkYXNoQXJyYXkgPSBzdmdTdHls
ZS5zdHJva2VEYXNoQXJyYXkoKS5tYXAoWyZdKGF1dG8mIGxlbmd0aCkgLT4gRGFzaEFycmF5RWxl
bWVudCB7CisgICAgICAgIHJldHVybiBsZW5ndGgudmFsdWUobGVuZ3RoQ29udGV4dCk7CisgICAg
fSk7CiAKICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgIm9wYWNpdHkiLCBzdmdTdHlsZS5zdHJv
a2VPcGFjaXR5KCksIDEuMGYpOwogICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAic3Ryb2tlIHdp
ZHRoIiwgc3Ryb2tlV2lkdGgsIDEuMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1RleHRDaHVuay5jcHAKaW5kZXggYTYzZWI4MGE3NzlkNzc2OGRhNDc3MmJiMGQ2YWZlMTll
MzUyMWJiZC4uODQ4MTM2YzhhNTM4YzZlYzhlY2MxNmQ1YmYwMWJmZGUyZGRiMzkxOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcApAQCAtNzAsOCAr
NzAsNyBAQCBTVkdUZXh0Q2h1bms6OlNWR1RleHRDaHVuayhjb25zdCBWZWN0b3I8U1ZHSW5saW5l
VGV4dEJveCo+JiBsaW5lTGF5b3V0Qm94ZXMsIHVucwogICAgICAgICB9CiAgICAgfQogCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gZmlyc3Q7IGkgPCBsaW1pdDsgKytpKQotICAgICAgICBtX2JveGVz
LmFwcGVuZChsaW5lTGF5b3V0Qm94ZXNbaV0pOworICAgIG1fYm94ZXMuYXBwZW5kKCZsaW5lTGF5
b3V0Qm94ZXNbZmlyc3RdLCBsaW1pdCAtIGZpcnN0KTsKIH0KIAogdW5zaWduZWQgU1ZHVGV4dENo
dW5rOjp0b3RhbENoYXJhY3RlcnMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUGFnZVJ1
bGVDb2xsZWN0b3IuY3BwCmluZGV4IDIyOTlmOGM2Mzc5YjUwOTQ5MmExYTFmZmE1MjMwNmExYWEx
Njg5YjQuLmUzZGMzZWZiYzI5YjYzZDc1MjE0OWRhY2IxMTMxZmZhNTJhY2M5NDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29sbGVjdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5jcHAKQEAgLTg0LDggKzg0LDkgQEAg
dm9pZCBQYWdlUnVsZUNvbGxlY3Rvcjo6bWF0Y2hQYWdlUnVsZXMoUnVsZVNldCogcnVsZXMsIGJv
b2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0YKIAogICAgIHN0ZDo6c3RhYmxlX3NvcnQobWF0Y2hlZFBh
Z2VSdWxlcy5iZWdpbigpLCBtYXRjaGVkUGFnZVJ1bGVzLmVuZCgpLCBjb21wYXJlUGFnZVJ1bGVz
KTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXRjaGVkUGFnZVJ1bGVzLnNpemUo
KTsgaSsrKQotICAgICAgICBtX3Jlc3VsdC5hdXRob3JEZWNsYXJhdGlvbnMuYXBwZW5kKHsgJm1h
dGNoZWRQYWdlUnVsZXNbaV0tPnByb3BlcnRpZXMoKSB9KTsKKyAgICBtX3Jlc3VsdC5hdXRob3JE
ZWNsYXJhdGlvbnMucmVzZXJ2ZUNhcGFjaXR5KG1fcmVzdWx0LmF1dGhvckRlY2xhcmF0aW9ucy5z
aXplKCkgKyBtYXRjaGVkUGFnZVJ1bGVzLnNpemUoKSk7CisgICAgZm9yIChhdXRvKiBwYWdlUnVs
ZSA6IG1hdGNoZWRQYWdlUnVsZXMpCisgICAgICAgIG1fcmVzdWx0LmF1dGhvckRlY2xhcmF0aW9u
cy51bmNoZWNrZWRBcHBlbmQoeyAmcGFnZVJ1bGUtPnByb3BlcnRpZXMoKSB9KTsKIH0KIAogc3Rh
dGljIGJvb2wgY2hlY2tQYWdlU2VsZWN0b3JDb21wb25lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiBz
ZWxlY3RvciwgYm9vbCBpc0xlZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcm
IHBhZ2VOYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwCmluZGV4IDU3
NTE4NTkxOTdiMjI2ZmMyNDRhZjZiYzMyMDVmYWQyNmUwMTcwMTkuLmNmMTY1MjIxY2Q1M2EzYzVh
NzdjNmQ5ODA4NDMyMWMxM2YyMjIzOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1J1bGVTZXRCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0QnVp
bGRlci5jcHAKQEAgLTM3OCw4ICszNzgsOSBAQCB2b2lkIFJ1bGVTZXRCdWlsZGVyOjpNZWRpYVF1
ZXJ5Q29sbGVjdG9yOjpwb3AoY29uc3QgTWVkaWFRdWVyeVNldCogc2V0KQogCiAgICAgaWYgKCFk
eW5hbWljQ29udGV4dFN0YWNrLmxhc3QoKS5hZmZlY3RlZFJ1bGVQb3NpdGlvbnMuaXNFbXB0eSgp
IHx8ICFjb2xsZWN0RHluYW1pYykgewogICAgICAgICBSdWxlU2V0OjpEeW5hbWljTWVkaWFRdWVy
eVJ1bGVzIHJ1bGVzOworICAgICAgICBydWxlcy5tZWRpYVF1ZXJ5U2V0cy5yZXNlcnZlQ2FwYWNp
dHkocnVsZXMubWVkaWFRdWVyeVNldHMuc2l6ZSgpICsgZHluYW1pY0NvbnRleHRTdGFjay5zaXpl
KCkpOwogICAgICAgICBmb3IgKGF1dG8mIGNvbnRleHQgOiBkeW5hbWljQ29udGV4dFN0YWNrKQot
ICAgICAgICAgICAgcnVsZXMubWVkaWFRdWVyeVNldHMuYXBwZW5kKGNvbnRleHQuc2V0LmdldCgp
KTsKKyAgICAgICAgICAgIHJ1bGVzLm1lZGlhUXVlcnlTZXRzLnVuY2hlY2tlZEFwcGVuZChjb250
ZXh0LnNldC5nZXQoKSk7CiAKICAgICAgICAgaWYgKGNvbGxlY3REeW5hbWljKSB7CiAgICAgICAg
ICAgICBydWxlcy5hZmZlY3RlZFJ1bGVQb3NpdGlvbnMuYXBwZW5kVmVjdG9yKGR5bmFtaWNDb250
ZXh0U3RhY2subGFzdCgpLmFmZmVjdGVkUnVsZVBvc2l0aW9ucyk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCmluZGV4IDJmODM0ZGY2N2Q4MGNiMTNkZDRj
OTE1NTFiYWQxMmRiMWIyM2EyNDkuLjc0NjRmODRkOGJmNmIyYjJhMzMxMjNkNTkyYmUyOTJmMTRj
YzI4ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckNvbnZl
cnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRlci5o
CkBAIC0xNjk3LDEzICsxNjk3LDEyIEBAIGlubGluZSBWZWN0b3I8QXRvbVN0cmluZz4gQnVpbGRl
ckNvbnZlcnRlcjo6Y29udmVydENvbnRhaW5lck5hbWUoQnVpbGRlclN0YXRlJiwKICAgICAgICAg
QVNTRVJUKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENT
U1ZhbHVlTm9uZSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQorICAgIGlmICghaXM8Q1NT
VmFsdWVMaXN0Pih2YWx1ZSkpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBWZWN0b3I8QXRv
bVN0cmluZz4gcmVzdWx0OwotICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgewotICAg
ICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkKLSAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0u
Z2V0KCkpLnN0cmluZ1ZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJl
dHVybiBXVEY6Om1hcChkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSwgW10oYXV0byYgaXRl
bSkgLT4gQXRvbVN0cmluZyB7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oaXRlbS5nZXQoKSkuc3RyaW5nVmFsdWUoKTsKKyAgICB9KTsKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyUHJv
eHkuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVy
UHJveHkuY3BwCmluZGV4IDBlZjgzNDJkZDI2OGVlNjhjMzA0NzYyZGEwNThiYTRmYmNiYzZlM2Mu
Ljk0OWZmMzIwNTU1MGI0OGI3Y2M3OWU0NTA1MTZhNDA0MDJhNGEzOTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllclByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJQcm94
eS5jcHAKQEAgLTgwNSwxMSArODA1LDkgQEAgYm9vbCBSZW1vdGVNZWRpYVBsYXllclByb3h5Ojpk
b2VzSGF2ZUF0dHJpYnV0ZShjb25zdCBBdG9tU3RyaW5nJiwgQXRvbVN0cmluZyopIGMKICNpZiBF
TkFCTEUoQVZGX0NBUFRJT05TKQogVmVjdG9yPFJlZlB0cjxQbGF0Zm9ybVRleHRUcmFjaz4+IFJl
bW90ZU1lZGlhUGxheWVyUHJveHk6Om91dE9mQmFuZFRyYWNrU291cmNlcygpCiB7Ci0gICAgVmVj
dG9yPFJlZlB0cjxQbGF0Zm9ybVRleHRUcmFjaz4+IHNvdXJjZXM7Ci0gICAgZm9yIChhdXRvJiBk
YXRhIDogbV9jb25maWd1cmF0aW9uLm91dE9mQmFuZFRyYWNrRGF0YSkKLSAgICAgICAgc291cmNl
cy5hcHBlbmQoUGxhdGZvcm1UZXh0VHJhY2s6OmNyZWF0ZShXVEZNb3ZlKGRhdGEpKSk7Ci0gICAg
Ci0gICAgcmV0dXJuIHNvdXJjZXM7CisgICAgcmV0dXJuIFdURjo6bWFwKG1fY29uZmlndXJhdGlv
bi5vdXRPZkJhbmRUcmFja0RhdGEsIFtdKGF1dG8mIGRhdGEpIC0+IFJlZlB0cjxQbGF0Zm9ybVRl
eHRUcmFjaz4geworICAgICAgICByZXR1cm4gUGxhdGZvcm1UZXh0VHJhY2s6OmNyZWF0ZShXVEZN
b3ZlKGRhdGEpKTsKKyAgICB9KTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlU291cmNlQnVmZmVyUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZVNvdXJjZUJ1ZmZlclByb3h5LmNwcAppbmRl
eCAyNzkxNjVkZTY2YWFmZTAyNDY4MWUxNjFhMDM1YzRhMTA5NTRlNmUxLi5iYzhkMDE2MjJkYzlm
MTE0MWU4NTlmMjQ2MmYzNjI4ODc4YjJiNWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvbWVkaWEvUmVtb3RlU291cmNlQnVmZmVyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVTb3VyY2VCdWZmZXJQcm94eS5jcHAKQEAgLTc1
LDM1ICs3NSwzMyBAQCB2b2lkIFJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5Ojpzb3VyY2VCdWZmZXJQ
cml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudAogCiAgICAgSW5pdGlhbGl6YXRp
b25TZWdtZW50SW5mbyBzZWdtZW50SW5mbzsKICAgICBzZWdtZW50SW5mby5kdXJhdGlvbiA9IHNl
Z21lbnQuZHVyYXRpb247Ci0gICAgZm9yIChhdXRvJiBhdWRpb1RyYWNrSW5mbyA6IHNlZ21lbnQu
YXVkaW9UcmFja3MpIHsKLSAgICAgICAgYXV0byBpZGVudGlmaWVyID0gbV9yZW1vdGVNZWRpYVBs
YXllclByb3h5LT5hZGRSZW1vdGVBdWRpb1RyYWNrUHJveHkoKmF1ZGlvVHJhY2tJbmZvLnRyYWNr
KTsKLSAgICAgICAgc2VnbWVudEluZm8uYXVkaW9UcmFja3MuYXBwZW5kKHsgTWVkaWFEZXNjcmlw
dGlvbkluZm8oKmF1ZGlvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwgaWRlbnRpZmllciB9KTsKIAor
ICAgIHNlZ21lbnRJbmZvLmF1ZGlvVHJhY2tzID0gc2VnbWVudC5hdWRpb1RyYWNrcy5tYXAoWyZd
KGF1dG8mIGF1ZGlvVHJhY2tJbmZvKSB7CisgICAgICAgIGF1dG8gaWRlbnRpZmllciA9IG1fcmVt
b3RlTWVkaWFQbGF5ZXJQcm94eS0+YWRkUmVtb3RlQXVkaW9UcmFja1Byb3h5KCphdWRpb1RyYWNr
SW5mby50cmFjayk7CiAgICAgICAgIEFTU0VSVCghbV90cmFja0lkcy5jb250YWlucyhpZGVudGlm
aWVyKSk7CiAgICAgICAgIEFTU0VSVCghbV9tZWRpYURlc2NyaXB0aW9ucy5jb250YWlucyhpZGVu
dGlmaWVyKSk7CiAgICAgICAgIG1fdHJhY2tJZHMuYWRkKGlkZW50aWZpZXIsIGF1ZGlvVHJhY2tJ
bmZvLnRyYWNrLT5pZCgpKTsKICAgICAgICAgbV9tZWRpYURlc2NyaXB0aW9ucy5hZGQoaWRlbnRp
ZmllciwgKmF1ZGlvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKTsKLSAgICB9CisgICAgICAgIHJldHVy
biBJbml0aWFsaXphdGlvblNlZ21lbnRJbmZvOjpUcmFja0luZm9ybWF0aW9uIHsgTWVkaWFEZXNj
cmlwdGlvbkluZm8oKmF1ZGlvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwgaWRlbnRpZmllciB9Owor
ICAgIH0pOwogCi0gICAgZm9yIChhdXRvJiB2aWRlb1RyYWNrSW5mbyA6IHNlZ21lbnQudmlkZW9U
cmFja3MpIHsKKyAgICBzZWdtZW50SW5mby52aWRlb1RyYWNrcyA9IHNlZ21lbnQudmlkZW9UcmFj
a3MubWFwKFsmXShhdXRvJiB2aWRlb1RyYWNrSW5mbykgewogICAgICAgICBhdXRvIGlkZW50aWZp
ZXIgPSBtX3JlbW90ZU1lZGlhUGxheWVyUHJveHktPmFkZFJlbW90ZVZpZGVvVHJhY2tQcm94eSgq
dmlkZW9UcmFja0luZm8udHJhY2spOwotICAgICAgICBzZWdtZW50SW5mby52aWRlb1RyYWNrcy5h
cHBlbmQoeyBNZWRpYURlc2NyaXB0aW9uSW5mbygqdmlkZW9UcmFja0luZm8uZGVzY3JpcHRpb24p
LCBpZGVudGlmaWVyIH0pOwotCiAgICAgICAgIEFTU0VSVCghbV90cmFja0lkcy5jb250YWlucyhp
ZGVudGlmaWVyKSk7CiAgICAgICAgIEFTU0VSVCghbV9tZWRpYURlc2NyaXB0aW9ucy5jb250YWlu
cyhpZGVudGlmaWVyKSk7CiAgICAgICAgIG1fdHJhY2tJZHMuYWRkKGlkZW50aWZpZXIsIHZpZGVv
VHJhY2tJbmZvLnRyYWNrLT5pZCgpKTsKICAgICAgICAgbV9tZWRpYURlc2NyaXB0aW9ucy5hZGQo
aWRlbnRpZmllciwgKnZpZGVvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKTsKLSAgICB9CisgICAgICAg
IHJldHVybiBJbml0aWFsaXphdGlvblNlZ21lbnRJbmZvOjpUcmFja0luZm9ybWF0aW9uIHsgTWVk
aWFEZXNjcmlwdGlvbkluZm8oKnZpZGVvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwgaWRlbnRpZmll
ciB9OworICAgIH0pOwogCi0gICAgZm9yIChhdXRvJiB0ZXh0VHJhY2tJbmZvIDogc2VnbWVudC50
ZXh0VHJhY2tzKSB7CisgICAgc2VnbWVudEluZm8udGV4dFRyYWNrcyA9IHNlZ21lbnQudGV4dFRy
YWNrcy5tYXAoWyZdKGF1dG8mIHRleHRUcmFja0luZm8pIHsKICAgICAgICAgYXV0byBpZGVudGlm
aWVyID0gbV9yZW1vdGVNZWRpYVBsYXllclByb3h5LT5hZGRSZW1vdGVUZXh0VHJhY2tQcm94eSgq
dGV4dFRyYWNrSW5mby50cmFjayk7Ci0gICAgICAgIHNlZ21lbnRJbmZvLnRleHRUcmFja3MuYXBw
ZW5kKHsgTWVkaWFEZXNjcmlwdGlvbkluZm8oKnRleHRUcmFja0luZm8uZGVzY3JpcHRpb24pLCBp
ZGVudGlmaWVyIH0pOwotCiAgICAgICAgIEFTU0VSVCghbV90cmFja0lkcy5jb250YWlucyhpZGVu
dGlmaWVyKSk7CiAgICAgICAgIEFTU0VSVCghbV9tZWRpYURlc2NyaXB0aW9ucy5jb250YWlucyhp
ZGVudGlmaWVyKSk7CiAgICAgICAgIG1fdHJhY2tJZHMuYWRkKGlkZW50aWZpZXIsIHRleHRUcmFj
a0luZm8udHJhY2stPmlkKCkpOwogICAgICAgICBtX21lZGlhRGVzY3JpcHRpb25zLmFkZChpZGVu
dGlmaWVyLCAqdGV4dFRyYWNrSW5mby5kZXNjcmlwdGlvbik7Ci0gICAgfQorICAgICAgICByZXR1
cm4gSW5pdGlhbGl6YXRpb25TZWdtZW50SW5mbzo6VHJhY2tJbmZvcm1hdGlvbiB7IE1lZGlhRGVz
Y3JpcHRpb25JbmZvKCp0ZXh0VHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwgaWRlbnRpZmllciB9Owor
ICAgIH0pOwogCiAgICAgaWYgKCFtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpIHsKICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTMzOCwxNiArMzM2LDExIEBAIHZvaWQgUmVtb3RlU291
cmNlQnVmZmVyUHJveHk6OnNlZWtUb1RpbWUoY29uc3QgTWVkaWFUaW1lJiBtZWRpYVRpbWUpCiAK
IHZvaWQgUmVtb3RlU291cmNlQnVmZmVyUHJveHk6OnVwZGF0ZVRyYWNrSWRzKFZlY3RvcjxzdGQ6
OnBhaXI8VHJhY2tQcml2YXRlUmVtb3RlSWRlbnRpZmllciwgVHJhY2tQcml2YXRlUmVtb3RlSWRl
bnRpZmllcj4+JiYgaWRlbnRpZmllclBhaXJzKQogewotICAgIFZlY3RvcjxzdGQ6OnBhaXI8QXRv
bVN0cmluZywgQXRvbVN0cmluZz4+IHRyYWNrSWRQYWlyczsKLQotICAgIGZvciAoYXV0byYgaWRl
bnRpZmllclBhaXIgOiBpZGVudGlmaWVyUGFpcnMpIHsKKyAgICBhdXRvIHRyYWNrSWRQYWlycyA9
IGlkZW50aWZpZXJQYWlycy5tYXAoWyZdKGF1dG8mIGlkZW50aWZpZXJQYWlyKSB7CiAgICAgICAg
IEFTU0VSVChtX3RyYWNrSWRzLmNvbnRhaW5zKGlkZW50aWZpZXJQYWlyLmZpcnN0KSk7CiAgICAg
ICAgIEFTU0VSVChtX3RyYWNrSWRzLmNvbnRhaW5zKGlkZW50aWZpZXJQYWlyLnNlY29uZCkpOwot
Ci0gICAgICAgIGF1dG8gb2xkSWQgPSBtX3RyYWNrSWRzLnRha2UoaWRlbnRpZmllclBhaXIuZmly
c3QpOwotICAgICAgICBhdXRvIG5ld0lkID0gbV90cmFja0lkcy5nZXQoaWRlbnRpZmllclBhaXIu
c2Vjb25kKTsKLSAgICAgICAgdHJhY2tJZFBhaXJzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihvbGRJ
ZCwgbmV3SWQpKTsKLSAgICB9CisgICAgICAgIHJldHVybiBzdGQ6OnBhaXIgeyBtX3RyYWNrSWRz
LnRha2UoaWRlbnRpZmllclBhaXIuZmlyc3QpLCBtX3RyYWNrSWRzLmdldChpZGVudGlmaWVyUGFp
ci5zZWNvbmQpIH07CisgICAgfSk7CiAKICAgICBpZiAoIXRyYWNrSWRQYWlycy5pc0VtcHR5KCkp
CiAgICAgICAgIG1fc291cmNlQnVmZmVyUHJpdmF0ZS0+dXBkYXRlVHJhY2tJZHMoV1RGTW92ZSh0
cmFja0lkUGFpcnMpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5jcHAKaW5kZXggNzBiNWFmZGE1MjZlOTkwOWI5NjJkNzEyMTNkODViNjBiNTM3MTgxZC4u
ZTg3NmVjMzc3NzFmZjQwMGNhYTgzNGNlZmFlOTU2MjU0Y2MzZmQ5MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKQEAgLTg1Myw5ICs4NTMsNyBA
QCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JU
ZXN0aW5nKGNvbnN0IFJlZ2lzdHJhYmxlRAogCiAgICAgICAgICAgICBzdGF0aXN0aWMuc3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWlucyA9IFdURk1vdmUodG9wRnJhbWVEb21haW5zKTsKIAotICAg
ICAgICAgICAgVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+IHN0YXRpc3RpY3M7Ci0gICAg
ICAgICAgICBzdGF0aXN0aWNzLmFwcGVuZChXVEZNb3ZlKHN0YXRpc3RpYykpOwotICAgICAgICAg
ICAgbV9zdGF0aXN0aWNzU3RvcmUtPm1lcmdlU3RhdGlzdGljcyhXVEZNb3ZlKHN0YXRpc3RpY3Mp
KTsKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5tZXJnZVN0YXRpc3RpY3MoVmVjdG9y
PFJlc291cmNlTG9hZFN0YXRpc3RpY3M+Ojpmcm9tKFdURk1vdmUoc3RhdGlzdGljKSkpOwogICAg
ICAgICB9CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmNwcAppbmRleCBmNGY4YTRjNGY0YWY5NmFmNjg5NDJjNWM2Yzk4OTJmZjdlMTk5M2YxLi40
YThiMGVkYTA5YmYwNTg5OGEzYjhiMjJjOTA4YjQ3YjI4ZWI5YzgxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMTM4MCwxMCArMTM4
MCw5IEBAIHN0YXRpYyB2b2lkIGZldGNoRGlza0NhY2hlRW50cmllcyhOZXR3b3JrQ2FjaGU6OkNh
Y2hlKiBjYWNoZSwgUEFMOjpTZXNzaW9uSUQgc2VzCiAgICAgSGFzaE1hcDxTZWN1cml0eU9yaWdp
bkRhdGEsIHVpbnQ2NF90PiBvcmlnaW5zQW5kU2l6ZXM7CiAgICAgY2FjaGUtPnRyYXZlcnNlKFtm
ZXRjaE9wdGlvbnMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
ciksIG9yaWdpbnNBbmRTaXplcyA9IFdURk1vdmUob3JpZ2luc0FuZFNpemVzKV0oYXV0byogdHJh
dmVyc2FsRW50cnkpIG11dGFibGUgewogICAgICAgICBpZiAoIXRyYXZlcnNhbEVudHJ5KSB7Ci0g
ICAgICAgICAgICBWZWN0b3I8V2Vic2l0ZURhdGE6OkVudHJ5PiBlbnRyaWVzOwotCi0gICAgICAg
ICAgICBmb3IgKGF1dG8mIG9yaWdpbkFuZFNpemUgOiBvcmlnaW5zQW5kU2l6ZXMpCi0gICAgICAg
ICAgICAgICAgZW50cmllcy5hcHBlbmQoV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luQW5kU2l6
ZS5rZXksIFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlLCBvcmlnaW5BbmRTaXplLnZhbHVlIH0p
OworICAgICAgICAgICAgYXV0byBlbnRyaWVzID0gV1RGOjptYXAob3JpZ2luc0FuZFNpemVzLCBb
XShhdXRvJiBvcmlnaW5BbmRTaXplKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYnNpdGVE
YXRhOjpFbnRyeSB7IG9yaWdpbkFuZFNpemUua2V5LCBXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNo
ZSwgb3JpZ2luQW5kU2l6ZS52YWx1ZSB9OworICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgZW50cmllcyA9IFdURk1vdmUoZW50cmllcyldICgpIG11dGFibGUg
ewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGVudHJpZXMpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05ldHdvcmtOb3Rp
ZmljYXRpb25NYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTm90aWZp
Y2F0aW9ucy9OZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlci5jcHAKaW5kZXggZjAwYTIxOTNhYTJi
MTM5ODAyYjM2NmE0ZjEyMWM3NmVkZmY4OGYwMy4uYzUxMmYyY2IzMjU0MDQ1NGIwNmRmNzMyNWEz
MWIyYTNjZTFkMGM2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
b3RpZmljYXRpb25zL05ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05vdGlmaWNhdGlvbnMvTmV0d29ya05vdGlmaWNhdGlvbk1h
bmFnZXIuY3BwCkBAIC04Miw5ICs4Miw5IEBAIHZvaWQgTmV0d29ya05vdGlmaWNhdGlvbk1hbmFn
ZXI6OmRlbGV0ZVB1c2hBbmROb3RpZmljYXRpb25SZWdpc3RyYXRpb24oY29uc3QgU2VjCiB2b2lk
IE5ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2VyOjpnZXRPcmlnaW5zV2l0aFB1c2hBbmROb3RpZmlj
YXRpb25QZXJtaXNzaW9ucyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxTZWN1
cml0eU9yaWdpbkRhdGE+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4gcmVwbHlIYW5kbGVyID0gW2NvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChWZWN0b3I8U3RyaW5nPiBv
cmlnaW5TdHJpbmdzKSBtdXRhYmxlIHsKLSAgICAgICAgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0
YT4gb3JpZ2luczsKLSAgICAgICAgZm9yIChhdXRvJiBvcmlnaW5TdHJpbmcgOiBvcmlnaW5TdHJp
bmdzKQotICAgICAgICAgICAgb3JpZ2lucy5hcHBlbmQoU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9t
VVJMKHsgeyB9LCBvcmlnaW5TdHJpbmcgfSkpOworICAgICAgICBhdXRvIG9yaWdpbnMgPSBvcmln
aW5TdHJpbmdzLm1hcChbXShhdXRvJiBvcmlnaW5TdHJpbmcpIHsKKyAgICAgICAgICAgIHJldHVy
biBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21VUkwoeyB7IH0sIG9yaWdpblN0cmluZyB9KTsKKyAg
ICAgICAgfSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUob3JpZ2lucykpOwog
ICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dl
YlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCmluZGV4IGNiOTAxYjZjNThiMTg1OWFlOGJlMmFk
OWRhOTAwMmQ4MjJiODA2MTIuLmMxYjk4NmNmOWY2NjEyNDFmMTAzYTc4MDZjODM2NmRlOGJjNDM2
M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9T
dG9yYWdlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcApAQCAtMjk1LDIwICsyOTUsMTQgQEAgVmVjdG9yPFN0
b3JhZ2VBcmVhSWRlbnRpZmllcj4gU3RvcmFnZU1hbmFnZXI6OmFsbFN0b3JhZ2VBcmVhSWRlbnRp
ZmllcnMoKSBjb25zdAogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgVmVj
dG9yPFN0b3JhZ2VBcmVhSWRlbnRpZmllcj4gaWRlbnRpZmllcnM7Ci0gICAgZm9yIChjb25zdCBh
dXRvJiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UgOiBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZXMudmFs
dWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvIGtleSA6IGxvY2FsU3RvcmFnZU5hbWVzcGFjZS0+
c3RvcmFnZUFyZWFJZGVudGlmaWVycygpKQotICAgICAgICAgICAgaWRlbnRpZmllcnMuYXBwZW5k
KGtleSk7Ci0gICAgfQorICAgIGZvciAoYXV0byYgbG9jYWxTdG9yYWdlTmFtZXNwYWNlIDogbV9s
b2NhbFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQorICAgICAgICBpZGVudGlmaWVycy5hcHBl
bmRWZWN0b3IobG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlQXJlYUlkZW50aWZpZXJzKCkp
OwogCi0gICAgZm9yIChjb25zdCBhdXRvJiB0cmFzaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSA6
IG1fdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkgewotICAgICAgICBm
b3IgKGF1dG8ga2V5IDogdHJhc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VBcmVh
SWRlbnRpZmllcnMoKSkKLSAgICAgICAgICAgIGlkZW50aWZpZXJzLmFwcGVuZChrZXkpOwotICAg
IH0KKyAgICBmb3IgKGF1dG8mIHRyYXNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlIDogbV90cmFu
c2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQorICAgICAgICBpZGVudGlmaWVy
cy5hcHBlbmRWZWN0b3IodHJhc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VBcmVh
SWRlbnRpZmllcnMoKSk7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHNlc3Npb25TdG9yYWdlTmFt
ZXNwYWNlIDogbV9zZXNzaW9uU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpIHsKLSAgICAgICAg
Zm9yIChhdXRvIGtleSA6IHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlQXJlYUlkZW50
aWZpZXJzKCkpCi0gICAgICAgICAgICBpZGVudGlmaWVycy5hcHBlbmQoa2V5KTsKLSAgICB9Cisg
ICAgZm9yIChhdXRvJiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSA6IG1fc2Vzc2lvblN0b3JhZ2VO
YW1lc3BhY2VzLnZhbHVlcygpKQorICAgICAgICBpZGVudGlmaWVycy5hcHBlbmRWZWN0b3Ioc2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VBcmVhSWRlbnRpZmllcnMoKSk7CiAKICAgICBy
ZXR1cm4gaWRlbnRpZmllcnM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9UcmFuc2llbnRMb2NhbFN0b3Jh
Z2VOYW1lc3BhY2UuY3BwCmluZGV4IGVlZWM1NTBlZWY2M2FlNTlhMWVhYjNhYThhNDk3YTMyYzEw
NTA2MjQuLmZiOThlZDM5NDgwOTE2MDY4NzE3MjZhZTA4NmQ1MWYxNTEyZDQ0MDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9UcmFuc2llbnRMb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
V2ViU3RvcmFnZS9UcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuY3BwCkBAIC01NSwxNCAr
NTUsMTEgQEAgU3RvcmFnZUFyZWEmIFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6Z2V0
T3JDcmVhdGVTdG9yYWdlQXJlYShTZWN1cml0eU9yaWcKIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRh
dGE+IFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6b3JpZ2lucygpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgVmVjdG9yPFNlY3VyaXR5T3JpZ2lu
RGF0YT4gb3JpZ2luczsKLQotICAgIGZvciAoY29uc3QgYXV0byYgc3RvcmFnZUFyZWEgOiBtX3N0
b3JhZ2VBcmVhTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmICghc3RvcmFnZUFyZWEtPml0ZW1z
KCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgb3JpZ2lucy5hcHBlbmQoc3RvcmFnZUFyZWEtPnNl
Y3VyaXR5T3JpZ2luKCkpOwotICAgIH0KLQotICAgIHJldHVybiBvcmlnaW5zOworICAgIHJldHVy
biBXVEY6OmNvbXBhY3RNYXAobV9zdG9yYWdlQXJlYU1hcCwgW10oYXV0byYgZW50cnkpIC0+IHN0
ZDo6b3B0aW9uYWw8U2VjdXJpdHlPcmlnaW5EYXRhPiB7CisgICAgICAgIGlmIChlbnRyeS52YWx1
ZS0+aXRlbXMoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgICAgICByZXR1cm4gZW50cnkudmFsdWUtPnNlY3VyaXR5T3JpZ2luKCk7CisgICAgfSk7CiB9
CiAKIHZvaWQgVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpjbGVhclN0b3JhZ2VBcmVh
c01hdGNoaW5nT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgc2VjdXJpdHlPcmlnaW4p
CkBAIC04MiwxMCArNzksOSBAQCB2b2lkIFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6
Y2xlYXJBbGxTdG9yYWdlQXJlYXMoKQogCiBWZWN0b3I8U3RvcmFnZUFyZWFJZGVudGlmaWVyPiBU
cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OnN0b3JhZ2VBcmVhSWRlbnRpZmllcnMoKSBj
b25zdAogewotICAgIFZlY3RvcjxTdG9yYWdlQXJlYUlkZW50aWZpZXI+IGlkZW50aWZpZXJzOwot
ICAgIGZvciAoYXV0byYgc3RvcmFnZUFyZWEgOiBtX3N0b3JhZ2VBcmVhTWFwLnZhbHVlcygpKQot
ICAgICAgICBpZGVudGlmaWVycy5hcHBlbmQoc3RvcmFnZUFyZWEtPmlkZW50aWZpZXIoKSk7Ci0g
ICAgcmV0dXJuIGlkZW50aWZpZXJzOworICAgIHJldHVybiBXVEY6Om1hcChtX3N0b3JhZ2VBcmVh
TWFwLCBbXShhdXRvJiBlbnRyeSkgeworICAgICAgICByZXR1cm4gZW50cnkudmFsdWUtPmlkZW50
aWZpZXIoKTsKKyAgICB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNh
Y2hlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdl
RW5naW5lQ2FjaGUuY3BwCmluZGV4IGRhOWNiOGE1ZGNjMGVkN2Y5ZjRjMmUzZDJmMjc2ODk0YTAx
ZWQxNzQuLjNlMWFlMzEzMDI4YWQwMDNjZDU1ZjgxZTQ2ZTVjYWUwYmYxZWFkZWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVT
dG9yYWdlRW5naW5lQ2FjaGUuY3BwCkBAIC0yMDksOCArMjA5LDkgQEAgdm9pZCBDYWNoZTo6Zmlu
aXNoT3BlbmluZyhDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaywgc3RkOjpvcHRpb25hbDxF
cnJvcj4mJgogewogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlY29yZEluZm9y
bWF0aW9uPj4gcmVjb3JkczsKICAgICBmb3IgKGF1dG8mIHZhbHVlIDogbV9yZWNvcmRzLnZhbHVl
cygpKSB7CisgICAgICAgIHJlY29yZHMucmVzZXJ2ZUNhcGFjaXR5KHJlY29yZHMuc2l6ZSgpICsg
dmFsdWUuc2l6ZSgpKTsKICAgICAgICAgZm9yIChhdXRvJiByZWNvcmQgOiB2YWx1ZSkKLSAgICAg
ICAgICAgIHJlY29yZHMuYXBwZW5kKHJlY29yZCk7CisgICAgICAgICAgICByZWNvcmRzLnVuY2hl
Y2tlZEFwcGVuZChyZWNvcmQpOwogICAgIH0KICAgICBzdGQ6OnNvcnQocmVjb3Jkcy5iZWdpbigp
LCByZWNvcmRzLmVuZCgpLCBbJl0oY29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYgYikgewogICAg
ICAgICByZXR1cm4gYS5nZXQoKS5pbnNlcnRpb25UaW1lIDwgYi5nZXQoKS5pbnNlcnRpb25UaW1l
OwpAQCAtNjgyLDggKzY4Myw5IEBAIFZlY3RvcjxLZXk+IENhY2hlOjprZXlzKCkgY29uc3QKIHsK
ICAgICBWZWN0b3I8S2V5PiBrZXlzOwogICAgIGZvciAoYXV0byYgcmVjb3JkcyA6IG1fcmVjb3Jk
cy52YWx1ZXMoKSkgeworICAgICAgICBrZXlzLnJlc2VydmVDYXBhY2l0eShrZXlzLnNpemUoKSAr
IHJlY29yZHMuc2l6ZSgpKTsKICAgICAgICAgZm9yIChhdXRvJiByZWNvcmQgOiByZWNvcmRzKQot
ICAgICAgICAgICAga2V5cy5hcHBlbmQocmVjb3JkLmtleSk7CisgICAgICAgICAgICBrZXlzLnVu
Y2hlY2tlZEFwcGVuZChyZWNvcmQua2V5KTsKICAgICB9CiAgICAgcmV0dXJuIGtleXM7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3Rv
cmFnZUFyZWEuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0
ZVN0b3JhZ2VBcmVhLmNwcAppbmRleCA0MDlhMzM4OGEwYjhlY2Y5YWI3MTA0OWI3MjlmZGUzOTI3
YzQ4ZWI1Li40MTM2OTQ0YjVmZjg1ZWYyM2ZjZWU0N2VlZDgzMmYxZWQwYjYwNDdlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFy
ZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVT
dG9yYWdlQXJlYS5jcHAKQEAgLTY5LDggKzY5LDkgQEAgU1FMaXRlU3RvcmFnZUFyZWE6OlNRTGl0
ZVN0b3JhZ2VBcmVhKHVuc2lnbmVkIHF1b3RhLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4K
IHsKICAgICBBU1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7CiAKKyAgICBtX2NhY2hlZFN0YXRlbWVu
dHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzdGF0aWNfY2FzdDxzaXplX3Q+KFN0YXRlbWVudFR5
cGU6OkludmFsaWQpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHNp
emVfdD4oU3RhdGVtZW50VHlwZTo6SW52YWxpZCk7ICsraSkKLSAgICAgICAgbV9jYWNoZWRTdGF0
ZW1lbnRzLmFwcGVuZChudWxscHRyKTsKKyAgICAgICAgbV9jYWNoZWRTdGF0ZW1lbnRzLnVuY2hl
Y2tlZEFwcGVuZChudWxscHRyKTsKIH0KIAogdm9pZCBTUUxpdGVTdG9yYWdlQXJlYTo6Y2xvc2Uo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQXBwbGVQYXkvV2ViUGF5bWVudENv
b3JkaW5hdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQXBwbGVQYXkvV2ViUGF5
bWVudENvb3JkaW5hdG9yUHJveHkuY3BwCmluZGV4IDA0YTY5NjgxNzhhNmY3NTk0YzI4MGVmNzMx
ODE5OGNiNjMyYjkyMzAuLmJjY2MwNTUwNzcxNzc5NzY2OGY5YzlkY2YxMDMxMDkxMTFiOThhZWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FwcGxlUGF5L1dlYlBheW1lbnRDb29y
ZGluYXRvclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BcHBsZVBheS9XZWJQ
YXltZW50Q29vcmRpbmF0b3JQcm94eS5jcHAKQEAgLTkzLDkgKzkzLDkgQEAgdm9pZCBXZWJQYXlt
ZW50Q29vcmRpbmF0b3JQcm94eTo6c2hvd1BheW1lbnRVSShXZWJDb3JlOjpQYWdlSWRlbnRpZmll
ciBkZXN0aW5hdGkKIAogICAgIFVSTCBvcmlnaW5hdGluZ1VSTChVUkwoKSwgb3JpZ2luYXRpbmdV
UkxTdHJpbmcpOwogCi0gICAgVmVjdG9yPFVSTD4gbGlua0ljb25VUkxzOwotICAgIGZvciAoY29u
c3QgYXV0byYgbGlua0ljb25VUkxTdHJpbmcgOiBsaW5rSWNvblVSTFN0cmluZ3MpCi0gICAgICAg
IGxpbmtJY29uVVJMcy5hcHBlbmQoVVJMKFVSTCgpLCBsaW5rSWNvblVSTFN0cmluZykpOworICAg
IGF1dG8gbGlua0ljb25VUkxzID0gbGlua0ljb25VUkxTdHJpbmdzLm1hcChbXShhdXRvJiBsaW5r
SWNvblVSTFN0cmluZykgeworICAgICAgICByZXR1cm4gVVJMKFVSTCgpLCBsaW5rSWNvblVSTFN0
cmluZyk7CisgICAgfSk7CiAKICAgICBwbGF0Zm9ybVNob3dQYXltZW50VUkod2ViUGFnZVByb3h5
SUQsIG9yaWdpbmF0aW5nVVJMLCBsaW5rSWNvblVSTHMsIHBheW1lbnRSZXF1ZXN0LCBbdGhpcywg
d2Vha1RoaXMgPSBXZWFrUHRyIHsgKnRoaXMgfV0oYm9vbCByZXN1bHQpIHsKICAgICAgICAgaWYg
KCF3ZWFrVGhpcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElO
YXZpZ2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9u
LmNwcAppbmRleCA4ODQ2NmM0OWVkMGRlMThlMjAzMmNhYTBhMDQ2NDgzOWVhNzQ1MTAxLi40YTg4
OTAzOWU5NGE2MmZhNTkyZjE5NTdmNzZkODU5ZTc5YzlmYzZkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb24uY3BwCkBAIC02MiwxMCArNjIsMTAgQEAgTmF2
aWdhdGlvbjo6TmF2aWdhdGlvbihXZWJOYXZpZ2F0aW9uU3RhdGUmIHN0YXRlLCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmJiByZXEKICAgICA6IG1fbmF2aWdhdGlvbklEKHN0YXRlLmdlbmVyYXRl
TmF2aWdhdGlvbklEKCkpCiAgICAgLCBtX29yaWdpbmFsUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3Qp
KQogICAgICwgbV9jdXJyZW50UmVxdWVzdChtX29yaWdpbmFsUmVxdWVzdCkKKyAgICAsIG1fcmVk
aXJlY3RDaGFpbiB7IG1fb3JpZ2luYWxSZXF1ZXN0LnVybCgpIH0KICAgICAsIG1fZnJvbUl0ZW0o
ZnJvbUl0ZW0pCiAgICAgLCBtX2NsaWVudE5hdmlnYXRpb25BY3Rpdml0eShuYXZpZ2F0aW9uQWN0
aXZpdHlUaW1lb3V0KQogewotICAgIG1fcmVkaXJlY3RDaGFpbi5hcHBlbmQobV9vcmlnaW5hbFJl
cXVlc3QudXJsKCkpOwogfQogCiBOYXZpZ2F0aW9uOjpOYXZpZ2F0aW9uKFdlYk5hdmlnYXRpb25T
dGF0ZSYgc3RhdGUsIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIHRhcmdldEl0ZW0sIFdlYkJhY2tG
b3J3YXJkTGlzdEl0ZW0qIGZyb21JdGVtLCBGcmFtZUxvYWRUeXBlIGJhY2tGb3J3YXJkRnJhbWVM
b2FkVHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2hh
cmVTaGVldC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2hhcmVTaGVldC5t
bQppbmRleCA1NTRhYjgwNjQyN2VjYjljZTgzMGFjYTk3ZmM3ZGRjZGM5ODUzZTE1Li5lMzg4YTNj
MzdkMGY2OTY1ZDc2OTFmMjdiMTc4MGE5MTNmMDRlZTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NoYXJlU2hlZXQubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV0tTaGFyZVNoZWV0Lm1tCkBAIC0xMDAsOSArMTAwLDkgQEAgc3RhdGlj
IHZvaWQgYXBwZW5kRmlsZXNBc1NoYXJlYWJsZVVSTHMoUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5
PiYmIHNoYXJlRGF0YUFycmEKICAgICAgICAgU3RyaW5nIGZpbGVOYW1lOwogICAgICAgICBSZXRh
aW5QdHI8TlNEYXRhPiBmaWxlRGF0YTsKICAgICB9OwotICAgIFZlY3RvcjxGaWxlV3JpdGVUYXNr
PiBmaWxlV3JpdGVUYXNrczsKLSAgICBmb3IgKGF1dG8mIGZpbGUgOiBmaWxlcykKLSAgICAgICAg
ZmlsZVdyaXRlVGFza3MuYXBwZW5kKHsgZmlsZS5maWxlTmFtZS5pc29sYXRlZENvcHkoKSwgZmls
ZS5maWxlRGF0YS0+Y3JlYXRlTlNEYXRhKCkgfSk7CisgICAgYXV0byBmaWxlV3JpdGVUYXNrcyA9
IGZpbGVzLm1hcChbXShhdXRvJiBmaWxlKSB7CisgICAgICAgIHJldHVybiBGaWxlV3JpdGVUYXNr
IHsgZmlsZS5maWxlTmFtZS5pc29sYXRlZENvcHkoKSwgZmlsZS5maWxlRGF0YS0+Y3JlYXRlTlNE
YXRhKCkgfTsKKyAgICB9KTsKIAogICAgIGF1dG8gcXVldWUgPSBXb3JrUXVldWU6OmNyZWF0ZSgi
Y29tLmFwcGxlLldlYktpdC5XS1NoYXJlU2hlZXQuU2hhcmVhYmxlRmlsZVdyaXRlciIpOwogICAg
IHF1ZXVlLT5kaXNwYXRjaChbc2hhcmVEYXRhQXJyYXkgPSBXVEZNb3ZlKHNoYXJlRGF0YUFycmF5
KSwgZmlsZVdyaXRlVGFza3MgPSBXVEZNb3ZlKGZpbGVXcml0ZVRhc2tzKSwgdGVtcG9yYXJ5RGly
ZWN0b3J5ID0gcmV0YWluUHRyKHRlbXBvcmFyeURpcmVjdG9yeSksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCmluZGV4IGYxYzM3
MDZiMDlmZjllMTI4MjFkN2RhM2EyMjViNzBiYTQ2ZGNlMzYuLjU2YTE0ZDhiZjM2ZWQ0NGRhZGJm
MWU0YzQ4NDBhNWUwNjQxNGI4ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCkBAIC02NjYsMTQgKzY2NiwxMiBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6cmVzdG9yZUFwcEhpZ2hsaWdodHNBbmRTY3JvbGxUb0luZGV4KGNvbnN0IFZl
Y3RvcjxSZWY8U2hhcmVkTQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgVmVjdG9yPFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlPiBtZW1vcnlIYW5k
bGVzOwotCi0gICAgZm9yIChhdXRvIGhpZ2hsaWdodCA6IGhpZ2hsaWdodHMpIHsKKyAgICBhdXRv
IG1lbW9yeUhhbmRsZXMgPSBXVEY6OmNvbXBhY3RNYXAoaGlnaGxpZ2h0cywgW10oYXV0byYgaGln
aGxpZ2h0KSAtPiBzdGQ6Om9wdGlvbmFsPFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlPiB7CiAgICAg
ICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgaGlnaGxpZ2h0LT5jcmVh
dGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKLQot
ICAgICAgICBtZW1vcnlIYW5kbGVzLmFwcGVuZChTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSB7IFdU
Rk1vdmUoaGFuZGxlKSwgaGlnaGxpZ2h0LT5zaXplKCkgfSk7Ci0gICAgfQorICAgICAgICBpZiAo
IWhpZ2hsaWdodC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9u
OjpSZWFkT25seSkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICBy
ZXR1cm4gU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgeyBXVEZNb3ZlKGhhbmRsZSksIGhpZ2hsaWdo
dC0+c2l6ZSgpIH07CisgICAgfSk7CiAgICAgCiAgICAgc2V0VXBIaWdobGlnaHRzT2JzZXJ2ZXIo
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUu
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwCmluZGV4IGM2
MWJlZDgxZDA5Mjg0NjMyYmYyOTY1ZWQyYzk5YjBjNmZlNDAxYTMuLjY5ZTUzZDdiZWI4NmNlNmI0
MDZmM2NkYjgzOTJhYjcyYTNmZmM4MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0ZyYW1lTG9hZFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9GcmFt
ZUxvYWRTdGF0ZS5jcHAKQEAgLTkwLDExICs5MCw4IEBAIHZvaWQgRnJhbWVMb2FkU3RhdGU6OmRp
ZEZpbmlzaExvYWQoKQogCiAgICAgbV9zdGF0ZSA9IFN0YXRlOjpGaW5pc2hlZDsKIAotICAgIFZl
Y3RvcjxPYnNlcnZlcio+IG9ic2VydmVyc0NvcHk7Ci0gICAgZm9yIChhdXRvJiBvYnNlcnZlciA6
IG1fb2JzZXJ2ZXJzKQotICAgICAgICBvYnNlcnZlcnNDb3B5LmFwcGVuZCgmb2JzZXJ2ZXIpOwot
ICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlcnNDb3B5KQotICAgICAgICBvYnNlcnZl
ci0+ZGlkRmluaXNoTG9hZCgpOworICAgIGZvciAoYXV0byYgb2JzZXJ2ZXIgOiBjb3B5VG9WZWN0
b3JPZjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPE9ic2VydmVyPj4obV9vYnNlcnZlcnMpKQorICAg
ICAgICBvYnNlcnZlci5nZXQoKS5kaWRGaW5pc2hMb2FkKCk7CiB9CiAKIHZvaWQgRnJhbWVMb2Fk
U3RhdGU6OmRpZEZhaWxMb2FkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCmluZGV4IDM3NDA4MTkzYjBiNzY4MjNj
MDQ1ODFiNGI0ZTkwNmRkNDQwOWE3YWIuLmUzODAxNmYxZGViNzM3MzJkNWE4NWRjMWQ0NmQxM2Rm
MzVhNjkxZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0
d29ya1Byb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcApAQCAtMTg0LDggKzE4NCw4IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpCiAgICAg
cGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVn
YWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgp
KTsKICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlU
b1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0
ZXJBc05vQWNjZXNzKCkpOwogICAgIHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2Jh
bFNldHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7Ci0gICAgZm9yIChhdXRvJiBzY2hl
bWUgOiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJz
KCkpCi0gICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90
b2NvbHMuYXBwZW5kKHNjaGVtZSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJl
ZEZvckN1c3RvbVByb3RvY29scyA9IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3Rv
bVByb3RvY29sSGFuZGxlcnMoKTsKKwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYg
KFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OmNvb2tpZVN0
b3JhZ2VEaXJlY3RvcnkoKTsgIWNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIGlmIChhdXRvIGhhbmRsZSA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZv
clJlYWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0b3J5KSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJv
bGxlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcAppbmRleCBmYTI1NGMyZGFkYzA2MzAyOGRmZDUw
NGQyODkwYTg5MmFlZGFmYjA4Li41YmJlNzM5NjIwNTI3YTgyN2NkNTdmMTY5YWYyZjBjMGM1OTZh
NzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJV
c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCkBAIC0xMTcs
MTEgKzExNywxMSBAQCBVc2VyQ29udGVudENvbnRyb2xsZXJQYXJhbWV0ZXJzIFdlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5OjpwYXJhbWV0ZXJzKCkgY29ucwogICAgIHBhcmFtZXRlcnMuaWRl
bnRpZmllciA9IGlkZW50aWZpZXIoKTsKICAgICAKICAgICBBU1NFUlQocGFyYW1ldGVycy51c2Vy
Q29udGVudFdvcmxkcy5pc0VtcHR5KCkpOwotICAgIGZvciAoY29uc3QgYXV0byYgaWRlbnRpZmll
ciA6IG1fYXNzb2NpYXRlZENvbnRlbnRXb3JsZHMpIHsKKyAgICBwYXJhbWV0ZXJzLnVzZXJDb250
ZW50V29ybGRzID0gV1RGOjptYXAobV9hc3NvY2lhdGVkQ29udGVudFdvcmxkcywgW10oYXV0byYg
aWRlbnRpZmllcikgewogICAgICAgICBhdXRvKiB3b3JsZCA9IEFQSTo6Q29udGVudFdvcmxkOjp3
b3JsZEZvcklkZW50aWZpZXIoaWRlbnRpZmllcik7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHdv
cmxkKTsKLSAgICAgICAgcGFyYW1ldGVycy51c2VyQ29udGVudFdvcmxkcy5hcHBlbmQod29ybGQt
PndvcmxkRGF0YSgpKTsKLSAgICB9CisgICAgICAgIHJldHVybiB3b3JsZC0+d29ybGREYXRhKCk7
CisgICAgfSk7CiAKICAgICBmb3IgKGF1dG8gdXNlclNjcmlwdCA6IG1fdXNlclNjcmlwdHMtPmVs
ZW1lbnRzT2ZUeXBlPEFQSTo6VXNlclNjcmlwdD4oKSkKICAgICAgICAgcGFyYW1ldGVycy51c2Vy
U2NyaXB0cy5hcHBlbmQoeyB1c2VyU2NyaXB0LT5pZGVudGlmaWVyKCksIHVzZXJTY3JpcHQtPmNv
bnRlbnRXb3JsZCgpLmlkZW50aWZpZXIoKSwgdXNlclNjcmlwdC0+dXNlclNjcmlwdCgpIH0pOwpA
QCAtMTI5LDggKzEyOSw5IEBAIFVzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnMgV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnBhcmFtZXRlcnMoKSBjb25zCiAgICAgZm9yIChhdXRv
IHVzZXJTdHlsZVNoZWV0IDogbV91c2VyU3R5bGVTaGVldHMtPmVsZW1lbnRzT2ZUeXBlPEFQSTo6
VXNlclN0eWxlU2hlZXQ+KCkpCiAgICAgICAgIHBhcmFtZXRlcnMudXNlclN0eWxlU2hlZXRzLmFw
cGVuZCh7IHVzZXJTdHlsZVNoZWV0LT5pZGVudGlmaWVyKCksIHVzZXJTdHlsZVNoZWV0LT5jb250
ZW50V29ybGQoKS5pZGVudGlmaWVyKCksIHVzZXJTdHlsZVNoZWV0LT51c2VyU3R5bGVTaGVldCgp
IH0pOwogCi0gICAgZm9yIChhdXRvJiBoYW5kbGVyIDogbV9zY3JpcHRNZXNzYWdlSGFuZGxlcnMu
dmFsdWVzKCkpCi0gICAgICAgIHBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXJzLmFwcGVuZCh7IGhh
bmRsZXItPmlkZW50aWZpZXIoKSwgaGFuZGxlci0+d29ybGQoKS5pZGVudGlmaWVyKCksIGhhbmRs
ZXItPm5hbWUoKSB9KTsKKyAgICBwYXJhbWV0ZXJzLm1lc3NhZ2VIYW5kbGVycyA9IFdURjo6bWFw
KG1fc2NyaXB0TWVzc2FnZUhhbmRsZXJzLCBbXShhdXRvIGVudHJ5KSB7CisgICAgICAgIHJldHVy
biBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlckRhdGEgeyBlbnRyeS52YWx1ZS0+aWRlbnRpZmllcigp
LCBlbnRyeS52YWx1ZS0+d29ybGQoKS5pZGVudGlmaWVyKCksIGVudHJ5LnZhbHVlLT5uYW1lKCkg
fTsKKyAgICB9KTsKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgcGFyYW1l
dGVycy5jb250ZW50UnVsZUxpc3RzID0gY29udGVudFJ1bGVMaXN0RGF0YSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRv
ck1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24v
QXV0aGVudGljYXRvck1hbmFnZXIuY3BwCmluZGV4IDkzNDgwZWQ1Y2IzOWE2MWNiY2Y2NzM1MWUw
YTg4MGVhMDlmZTQ0NzYuLjY1NzJmNTM5NTk4ZWY0MWRkMTAzMDVhY2VlYzhmMTg3ZDhkNTI1MjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0F1
dGhlbnRpY2F0b3JNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJB
dXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHAKQEAgLTQxNiwxMSArNDE2LDEx
IEBAIHZvaWQgQXV0aGVudGljYXRvck1hbmFnZXI6OnN0YXJ0RGlzY292ZXJ5KGNvbnN0IFRyYW5z
cG9ydFNldCYgdHJhbnNwb3J0cykKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwog
ICAgIEFTU0VSVChtX3NlcnZpY2VzLmlzRW1wdHkoKSAmJiB0cmFuc3BvcnRzLnNpemUoKSA8PSBt
YXhUcmFuc3BvcnROdW1iZXIpOwotICAgIGZvciAoYXV0byYgdHJhbnNwb3J0IDogdHJhbnNwb3J0
cykgeworICAgIG1fc2VydmljZXMgPSBXVEY6Om1hcCh0cmFuc3BvcnRzLCBbdGhpc10oYXV0byYg
dHJhbnNwb3J0KSB7CiAgICAgICAgIGF1dG8gc2VydmljZSA9IGNyZWF0ZVNlcnZpY2UodHJhbnNw
b3J0LCAqdGhpcyk7CiAgICAgICAgIHNlcnZpY2UtPnN0YXJ0RGlzY292ZXJ5KCk7Ci0gICAgICAg
IG1fc2VydmljZXMuYXBwZW5kKFdURk1vdmUoc2VydmljZSkpOwotICAgIH0KKyAgICAgICAgcmV0
dXJuIHNlcnZpY2U7CisgICAgfSk7CiB9CiAKIHZvaWQgQXV0aGVudGljYXRvck1hbmFnZXI6Omlu
aXRUaW1lT3V0VGltZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
QmFja0ZvcndhcmRMaXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkJhY2tGb3J3
YXJkTGlzdC5jcHAKaW5kZXggYzc0MzQzZTY1Yjg4OWY3ODY5ZGM4Y2NhMzQwNTFiOGIyNjU0MDJi
Ni4uZGVjOWU4MzkyMjM2OGZlNjE1NWUwM2Q2OWEzZjM3ZDlkYmYwMTc3OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwCkBAIC0zNDAsMTYgKzM0
MCwxMSBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6cmVtb3ZlQWxsSXRlbXMoKQogCiAgICAg
TE9HKEJhY2tGb3J3YXJkLCAiKEJhY2svRm9yd2FyZCkgV2ViQmFja0ZvcndhcmRMaXN0ICVwIHJl
bW92ZUFsbEl0ZW1zIChoYXMgJXp1IG9mIHRoZW0pIiwgdGhpcywgbV9lbnRyaWVzLnNpemUoKSk7
CiAKLSAgICBWZWN0b3I8UmVmPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiByZW1vdmVkSXRlbXM7
Ci0KLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9lbnRyaWVzKSB7CisgICAgZm9yIChhdXRvJiBl
bnRyeSA6IG1fZW50cmllcykKICAgICAgICAgZGlkUmVtb3ZlSXRlbShlbnRyeSk7Ci0gICAgICAg
IHJlbW92ZWRJdGVtcy5hcHBlbmQoV1RGTW92ZShlbnRyeSkpOwotICAgIH0KIAotICAgIG1fZW50
cmllcy5jbGVhcigpOwogICAgIG1fY3VycmVudEluZGV4ID0gc3RkOjpudWxsb3B0OwotICAgIG1f
cGFnZS0+ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KG51bGxwdHIsIFdURk1vdmUocmVtb3ZlZEl0
ZW1zKSk7CisgICAgbV9wYWdlLT5kaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QobnVsbHB0ciwgc3Rk
OjpleGNoYW5nZShtX2VudHJpZXMsIHsgfSkpOwogfQogCiB2b2lkIFdlYkJhY2tGb3J3YXJkTGlz
dDo6Y2xlYXIoKQpAQCAtMzYzLDIxICszNTgsMTcgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3Q6
OmNsZWFyKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPFdlYkJhY2tGb3J3YXJkTGlz
dEl0ZW0+IGN1cnJlbnRJdGVtID0gdGhpcy0+Y3VycmVudEl0ZW0oKTsKLSAgICBWZWN0b3I8UmVm
PFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiByZW1vdmVkSXRlbXM7CiAKICAgICBpZiAoIWN1cnJl
bnRJdGVtKSB7CiAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGV2ZXIgaGF2ZSBubyBjdXJyZW50
IGl0ZW0gaWYgd2UgYWxzbyBoYXZlIG5vIGN1cnJlbnQgaXRlbSBpbmRleC4KICAgICAgICAgQVNT
RVJUKCFtX2N1cnJlbnRJbmRleCk7CiAKICAgICAgICAgLy8gQnV0IGp1c3QgaW4gY2FzZSBpdCBk
b2VzIGhhcHBlbiBpbiBwcmFjdGljZSB3ZSBzaG91bGQgZ2V0IGJhY2sgaW50byBhIGNvbnNpc3Rl
bnQgc3RhdGUgbm93LgotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkg
ewotICAgICAgICAgICAgZGlkUmVtb3ZlSXRlbShtX2VudHJpZXNbaV0pOwotICAgICAgICAgICAg
cmVtb3ZlZEl0ZW1zLmFwcGVuZChXVEZNb3ZlKG1fZW50cmllc1tpXSkpOwotICAgICAgICB9Cisg
ICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2VudHJpZXMpCisgICAgICAgICAgICBkaWRSZW1v
dmVJdGVtKGVudHJ5KTsKIAotICAgICAgICBtX2VudHJpZXMuY2xlYXIoKTsKICAgICAgICAgbV9j
dXJyZW50SW5kZXggPSBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIG1fcGFnZS0+ZGlkQ2hhbmdlQmFj
a0ZvcndhcmRMaXN0KG51bGxwdHIsIFdURk1vdmUocmVtb3ZlZEl0ZW1zKSk7CisgICAgICAgIG1f
cGFnZS0+ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KG51bGxwdHIsIHN0ZDo6ZXhjaGFuZ2UobV9l
bnRyaWVzLCB7IH0pKTsKIAogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzg3LDYgKzM3OCw3
IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjpjbGVhcigpCiAgICAgICAgICAgICBkaWRSZW1v
dmVJdGVtKG1fZW50cmllc1tpXSk7CiAgICAgfQogCisgICAgVmVjdG9yPFJlZjxXZWJCYWNrRm9y
d2FyZExpc3RJdGVtPj4gcmVtb3ZlZEl0ZW1zOwogICAgIHJlbW92ZWRJdGVtcy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHNpemUgLSAxKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewogICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggJiYgaSAhPSAqbV9jdXJyZW50SW5k
ZXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKaW5kZXggZmEx
NzQyY2YzMmRhOTk1MjczMjNkZmM3YzhiZjBhNzkwNjMwNDFmZS4uNjFiZDMwYTM2NDE0NzNjNWRi
MmM1NzQzMGU5M2NiN2UyNjYzYWQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQb29sLmNwcApAQCAtODQ5LDEwICs4NDksOSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpp
bml0aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MsIFdlYnNpdGVE
YQogICAgICAgICAgICAgcGFyYW1ldGVycy5pbmplY3RlZEJ1bmRsZVBhdGhFeHRlbnNpb25IYW5k
bGUgPSBXVEZNb3ZlKCpoYW5kbGUpOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcGF0aCA6IG1f
cmVzb2x2ZWRQYXRocy5hZGRpdGlvbmFsV2ViUHJvY2Vzc1NhbmRib3hFeHRlbnNpb25QYXRocykg
ewotICAgICAgICBpZiAoYXV0byBoYW5kbGUgPSAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFu
ZGxlV2l0aG91dFJlc29sdmluZ1BhdGgocGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVh
ZE9ubHkpKQotICAgICAgICAgICAgcGFyYW1ldGVycy5hZGRpdGlvbmFsU2FuZGJveEV4dGVuc2lv
bkhhbmRsZXMuYXBwZW5kKFdURk1vdmUoKmhhbmRsZSkpOwotICAgIH0KKyAgICBwYXJhbWV0ZXJz
LmFkZGl0aW9uYWxTYW5kYm94RXh0ZW5zaW9uSGFuZGxlcyA9IFdURjo6Y29tcGFjdE1hcChtX3Jl
c29sdmVkUGF0aHMuYWRkaXRpb25hbFdlYlByb2Nlc3NTYW5kYm94RXh0ZW5zaW9uUGF0aHMsIFtd
KGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhh
bmRsZVdpdGhvdXRSZXNvbHZpbmdQYXRoKHBhdGgsIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJl
YWRPbmx5KTsKKyAgICB9KTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgc2V0SmF2
YVNjcmlwdENvbmZpZ3VyYXRpb25GaWxlRW5hYmxlZEZyb21EZWZhdWx0cygpOwpAQCAtMTg3MCwx
NCArMTg2OSw5IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZVByb2Nlc3NGcm9tT3JpZ2lu
Q2FjaGVTZXQoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQogICAgIExPRyhQcm9jZXNzU3dhcHBp
bmcsICIoUHJvY2Vzc1N3YXBwaW5nKSBSZW1vdmluZyBwcm9jZXNzIHdpdGggcGlkICVpIGZyb20g
dGhlIG9yaWdpbiBjYWNoZSBzZXQiLCBwcm9jZXNzLnByb2Nlc3NJZGVudGlmaWVyKCkpOwogCiAg
ICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIHZlcnkgaW5lZmZpY2llbnQgYXMgdGhlIG51bWJlciBv
ZiByZW1lbWJlcmVkIG9yaWdpbnMgYW5kIHByb2Nlc3NlcyBncm93cwotICAgIFZlY3RvcjxXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gcmVnaXN0cmFibGVEb21haW5zVG9SZW1vdmU7Ci0gICAg
Zm9yIChhdXRvIGVudHJ5IDogbV9zd2FwcGVkUHJvY2Vzc2VzUGVyUmVnaXN0cmFibGVEb21haW4p
IHsKLSAgICAgICAgaWYgKGVudHJ5LnZhbHVlID09ICZwcm9jZXNzKQotICAgICAgICAgICAgcmVn
aXN0cmFibGVEb21haW5zVG9SZW1vdmUuYXBwZW5kKGVudHJ5LmtleSk7Ci0gICAgfQotCi0gICAg
Zm9yIChhdXRvJiByZWdpc3RyYWJsZURvbWFpbiA6IHJlZ2lzdHJhYmxlRG9tYWluc1RvUmVtb3Zl
KQotICAgICAgICBtX3N3YXBwZWRQcm9jZXNzZXNQZXJSZWdpc3RyYWJsZURvbWFpbi5yZW1vdmUo
cmVnaXN0cmFibGVEb21haW4pOworICAgIG1fc3dhcHBlZFByb2Nlc3Nlc1BlclJlZ2lzdHJhYmxl
RG9tYWluLnJlbW92ZUlmKFsmXShhdXRvJiBlbnRyeSkgeworICAgICAgICByZXR1cm4gZW50cnku
dmFsdWUgPT0gJnByb2Nlc3M7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBy
b2Nlc3NGb3JOYXZpZ2F0aW9uKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgQVBJOjpOYXZpZ2F0
aW9uJiBuYXZpZ2F0aW9uLCBSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmIHNvdXJjZVByb2Nlc3MsIGNv
bnN0IFVSTCYgc291cmNlVVJMLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nlc3NT
d2FwUmVxdWVzdGVkQnlDbGllbnQsIFdlYlByb2Nlc3NQcm94eTo6Q2FwdGl2ZVBvcnRhbE1vZGUg
Y2FwdGl2ZVBvcnRhbE1vZGUsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgUmVmPFdl
YnNpdGVEYXRhU3RvcmU+JiYgZGF0YVN0b3JlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZjxX
ZWJQcm9jZXNzUHJveHk+JiYsIFN1c3BlbmRlZFBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
cm94eS5jcHAKaW5kZXggYjEyODYwZGY1MTBiYzRlM2RmYmI3ZTNmYzkyMGI1ZDA0MmI4NDMyMS4u
MzY4YTM5NTg3ZGEzM2RlNjRjMWI4OWQwZTYzOGQzOGI4OGQ3YTE3YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCkBAIC05MzYsOCArOTM2LDkgQEAgdm9p
ZCBXZWJQcm9jZXNzUHJveHk6OnByb2Nlc3NEaWRUZXJtaW5hdGVPckZhaWxlZFRvTGF1bmNoKFBy
b2Nlc3NUZXJtaW5hdGlvblJlYXMKIAogICAgIC8vIFRoZXJlIGlzIGEgbmVzdGVkIHRyYW5zYWN0
aW9uIGluIFdlYlBhZ2VQcm94eTo6cmVzZXRTdGF0ZUFmdGVyUHJvY2Vzc0V4aXRlZCgpIHRoYXQg
d2UgZG9uJ3Qgd2FudCB0byBjb21taXQgYmVmb3JlIHRoZSBjbGllbnQgY2FsbCBiZWxvdyAoZGlz
cGF0Y2hQcm9jZXNzRGlkVGVybWluYXRlKS4KICAgICBWZWN0b3I8UGFnZUxvYWRTdGF0ZTo6VHJh
bnNhY3Rpb24+IHBhZ2VMb2FkU3RhdGVUcmFuc2FjdGlvbnM7CisgICAgcGFnZUxvYWRTdGF0ZVRy
YW5zYWN0aW9ucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBhZ2VzLnNpemUoKSk7CiAgICAgZm9y
IChhdXRvJiBwYWdlIDogcGFnZXMpIHsKLSAgICAgICAgcGFnZUxvYWRTdGF0ZVRyYW5zYWN0aW9u
cy5hcHBlbmQocGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnRyYW5zYWN0aW9uKCkpOworICAgICAgICBw
YWdlTG9hZFN0YXRlVHJhbnNhY3Rpb25zLnVuY2hlY2tlZEFwcGVuZChwYWdlLT5wYWdlTG9hZFN0
YXRlKCkudHJhbnNhY3Rpb24oKSk7CiAgICAgICAgIHBhZ2UtPnJlc2V0U3RhdGVBZnRlclByb2Nl
c3NUZXJtaW5hdGlvbihyZWFzb24pOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCBiMzZk
OWE3NGI5YTE3NWEwODE2YjdhMmUxNGYxMzlkYjVlZjU2ZTZkLi41ZWUxNWM1ZWZkYTZmNDkzOTI0
ZGQzN2QyYTAwYzIxMDEyNTkzYWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtNDMxLDggKzQzMSwx
MCBAQCBwcml2YXRlOgogICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBl
OjpEaXNrQ2FjaGUpKSB7CiAgICAgICAgIG1fcXVldWUtPmRpc3BhdGNoKFttZWRpYUNhY2hlRGly
ZWN0b3J5ID0gbV9jb25maWd1cmF0aW9uLT5tZWRpYUNhY2hlRGlyZWN0b3J5KCkuaXNvbGF0ZWRD
b3B5KCksIGNhbGxiYWNrQWdncmVnYXRvcl0gewogICAgICAgICAgICAgV2Vic2l0ZURhdGEgd2Vi
c2l0ZURhdGE7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQ6Om9yaWdpbnNJbk1lZGlhQ2FjaGUobWVkaWFDYWNoZURpcmVjdG9yeSkpCi0g
ICAgICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmQoV2Vic2l0ZURhdGE6OkVu
dHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSwgMCB9KTsKKyAgICAgICAg
ICAgIGF1dG8gb3JpZ2lucyA9IFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Om9yaWdpbnNJbk1l
ZGlhQ2FjaGUobWVkaWFDYWNoZURpcmVjdG9yeSk7CisgICAgICAgICAgICB3ZWJzaXRlRGF0YS5l
bnRyaWVzID0gV1RGOjptYXAob3JpZ2lucywgW10oYXV0byYgb3JpZ2luKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBl
OjpEaXNrQ2FjaGUsIDAgfTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgY2FsbGJhY2tB
Z2dyZWdhdG9yLT5hZGRXZWJzaXRlRGF0YShXVEZNb3ZlKHdlYnNpdGVEYXRhKSk7CiAgICAgICAg
IH0pOwogICAgIH0KQEAgLTQ2OSw4ICs0NzEsOSBAQCBwcml2YXRlOgogICAgIGlmIChkYXRhVHlw
ZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0KSkgewogICAgICAg
ICBtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdlLT5nZXREZXZpY2VJZEhhc2hTYWx0T3JpZ2lucyhb
Y2FsbGJhY2tBZ2dyZWdhdG9yXShhdXRvJiYgb3JpZ2lucykgewogICAgICAgICAgICAgV2Vic2l0
ZURhdGEgd2Vic2l0ZURhdGE7Ci0gICAgICAgICAgICB3aGlsZSAoIW9yaWdpbnMuaXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRh
OjpFbnRyeSB7IG9yaWdpbnMudGFrZUFueSgpLCBXZWJzaXRlRGF0YVR5cGU6OkRldmljZUlkSGFz
aFNhbHQsIDAgfSk7CisgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzID0gV1RGOjptYXAo
b3JpZ2lucywgW10oYXV0byYgb3JpZ2luKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYnNp
dGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0
LCAwIH07CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+
YWRkV2Vic2l0ZURhdGEoV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICB9KTsKICAgICB9
CkBAIC00NzksMTAgKzQ4MiwxMSBAQCBwcml2YXRlOgogICAgICAgICBtX3F1ZXVlLT5kaXNwYXRj
aChbZmV0Y2hPcHRpb25zLCBhcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5ID0gbV9jb25maWd1cmF0
aW9uLT5hcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KCkuaXNvbGF0ZWRDb3B5KCksIGFwcGxpY2F0
aW9uQ2FjaGVGbGF0RmlsZVN1YmRpcmVjdG9yeU5hbWUgPSBtX2NvbmZpZ3VyYXRpb24tPmFwcGxp
Y2F0aW9uQ2FjaGVGbGF0RmlsZVN1YmRpcmVjdG9yeU5hbWUoKS5pc29sYXRlZENvcHkoKSwgY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7CiAgICAgICAgICAgICBhdXRvIHN0b3JhZ2UgPSBXZWJDb3JlOjpB
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y3JlYXRlKGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3Rvcnks
IGFwcGxpY2F0aW9uQ2FjaGVGbGF0RmlsZVN1YmRpcmVjdG9yeU5hbWUpOwogICAgICAgICAgICAg
V2Vic2l0ZURhdGEgd2Vic2l0ZURhdGE7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6
IHN0b3JhZ2UtPm9yaWdpbnNXaXRoQ2FjaGUoKSkgeworICAgICAgICAgICAgYXV0byBvcmlnaW5z
ID0gc3RvcmFnZS0+b3JpZ2luc1dpdGhDYWNoZSgpOworICAgICAgICAgICAgd2Vic2l0ZURhdGEu
ZW50cmllcyA9IFdURjo6bWFwKG9yaWdpbnMsIFsmXShhdXRvJiBvcmlnaW4pIHsKICAgICAgICAg
ICAgICAgICB1aW50NjRfdCBzaXplID0gZmV0Y2hPcHRpb25zLmNvbnRhaW5zKFdlYnNpdGVEYXRh
RmV0Y2hPcHRpb246OkNvbXB1dGVTaXplcykgPyBzdG9yYWdlLT5kaXNrVXNhZ2VGb3JPcmlnaW4o
b3JpZ2luKSA6IDA7Ci0gICAgICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmQo
V2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6Ok9mZmxpbmVXZWJB
cHBsaWNhdGlvbkNhY2hlLCBzaXplIH0pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJldHVybiBXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6T2Zm
bGluZVdlYkFwcGxpY2F0aW9uQ2FjaGUsIHNpemUgfTsKKyAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRXZWJzaXRlRGF0YShXVEZNb3ZlKHdlYnNpdGVE
YXRhKSk7CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTQ5MCw4ICs0OTQsOSBAQCBwcml2YXRlOgog
ICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpXZWJTUUxEYXRhYmFz
ZXMpICYmIGlzUGVyc2lzdGVudCgpKSB7CiAgICAgICAgIG1fcXVldWUtPmRpc3BhdGNoKFt3ZWJT
UUxEYXRhYmFzZURpcmVjdG9yeSA9IG1fY29uZmlndXJhdGlvbi0+d2ViU1FMRGF0YWJhc2VEaXJl
Y3RvcnkoKS5pc29sYXRlZENvcHkoKSwgY2FsbGJhY2tBZ2dyZWdhdG9yXSgpIHsKICAgICAgICAg
ICAgIFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhOwotICAgICAgICAgICAgZm9yIChhdXRvJiBvcmln
aW4gOiBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXJXaXRoRGF0YWJhc2VQYXRoKHdl
YlNRTERhdGFiYXNlRGlyZWN0b3J5KS0+b3JpZ2lucygpKQotICAgICAgICAgICAgICAgIHdlYnNp
dGVEYXRhLmVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0
ZURhdGFUeXBlOjpXZWJTUUxEYXRhYmFzZXMsIDAgfSk7CisgICAgICAgICAgICB3ZWJzaXRlRGF0
YS5lbnRyaWVzID0gV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyV2l0aERhdGFiYXNl
UGF0aCh3ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSktPm9yaWdpbnMoKS5tYXAoW10oYXV0byYgb3Jp
Z2luKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdp
biwgV2Vic2l0ZURhdGFUeXBlOjpXZWJTUUxEYXRhYmFzZXMsIDAgfTsKKyAgICAgICAgICAgIH0p
OwogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRXZWJzaXRlRGF0YShXVEZNb3Zl
KHdlYnNpdGVEYXRhKSk7CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTQ5OSw4ICs1MDQsOSBAQCBw
cml2YXRlOgogICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpNZWRp
YUtleXMpICYmIGlzUGVyc2lzdGVudCgpKSB7CiAgICAgICAgIG1fcXVldWUtPmRpc3BhdGNoKFtt
ZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5ID0gbV9jb25maWd1cmF0aW9uLT5tZWRpYUtleXNTdG9y
YWdlRGlyZWN0b3J5KCkuaXNvbGF0ZWRDb3B5KCksIGNhbGxiYWNrQWdncmVnYXRvcl0gewogICAg
ICAgICAgICAgV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGE7Ci0gICAgICAgICAgICBmb3IgKGF1dG8m
IG9yaWdpbiA6IG1lZGlhS2V5T3JpZ2lucyhtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KSkKLSAg
ICAgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6RW50
cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6TWVkaWFLZXlzLCAwIH0pOworICAgICAgICAg
ICAgd2Vic2l0ZURhdGEuZW50cmllcyA9IG1lZGlhS2V5T3JpZ2lucyhtZWRpYUtleXNTdG9yYWdl
RGlyZWN0b3J5KS5tYXAoW10oYXV0byYgb3JpZ2luKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpNZWRpYUtleXMs
IDAgfTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5h
ZGRXZWJzaXRlRGF0YShXVEZNb3ZlKHdlYnNpdGVEYXRhKSk7CiAgICAgICAgIH0pOwogICAgIH0K
QEAgLTcxMiw4ICs3MTgsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0
aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQogICAgICAgICAgICAg
ICAgIGZvciAoYXV0byYgaG9zdE5hbWUgOiBkYXRhUmVjb3JkLkhTVFNDYWNoZUhvc3ROYW1lcykK
ICAgICAgICAgICAgICAgICAgICAgSFNUU0NhY2hlSG9zdE5hbWVzLmFwcGVuZChob3N0TmFtZSk7
CiAjaWYgRU5BQkxFKElOVEVMTElHRU5UX1RSQUNLSU5HX1BSRVZFTlRJT04pCisgICAgICAgICAg
ICAgICAgcmVnaXN0cmFibGVEb21haW5zLnJlc2VydmVDYXBhY2l0eShyZWdpc3RyYWJsZURvbWFp
bnMuc2l6ZSgpICsgZGF0YVJlY29yZC5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUmVnaXN0cmFibGVE
b21haW5zLnNpemUoKSk7CiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiByZWdpc3RyYWJsZURv
bWFpbiA6IGRhdGFSZWNvcmQucmVzb3VyY2VMb2FkU3RhdGlzdGljc1JlZ2lzdHJhYmxlRG9tYWlu
cykKLSAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmFibGVEb21haW5zLmFwcGVuZChyZWdpc3Ry
YWJsZURvbWFpbik7CisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhYmxlRG9tYWlucy51bmNo
ZWNrZWRBcHBlbmQocmVnaXN0cmFibGVEb21haW4pOwogI2VuZGlmCiAgICAgICAgICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbQppbmRleCBm
YTNiYzUwYjI0ZmFmMmVlNWZlZTc0NmQyYmVjODA0YWE0YWZiNzJjLi5jMmRiMTI4MGQ3YjUyMzQ4
MGU0YzZiMjFiMWZlZmZmYTY2ZjI2ZTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvVGV4dENoZWNrZXJJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1RleHRDaGVja2VySU9TLm1tCkBAIC0zNCw2ICszNCw3IEBACiAjaW1wb3J0IDx3dGYvSGFz
aE1hcC5oPgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3dGYvUmV0
YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0
Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0yNDAsMTIgKzI0
MSwxMyBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0
T2ZQYXJhZ3JhcGgoU3BlbGxEb2N1bWVudFRhZyBzcAogICAgICAgICAgICAgICAgIFRleHRDaGVj
a2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hl
Y2tpbmdUeXBlOjpTcGVsbGluZzsKICAgICAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1
bHRSYW5nZTsKLSAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAgICAg
ICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICB9
IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiBjaGVj
a2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpKSB7CiAgICAgICAg
ICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgICAgICBOU0Fy
cmF5ICpkZXRhaWxzID0gW2luY29taW5nUmVzdWx0IGdyYW1tYXJEZXRhaWxzXTsKICAgICAgICAg
ICAgICAgICByZXN1bHQudHlwZSA9IFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXI7CiAgICAgICAg
ICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFuZ2U7CisgICAgICAgICAgICAgICAgcmVz
dWx0LmRldGFpbHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkZXRhaWxzLmNvdW50KTsKICAgICAg
ICAgICAgICAgICBmb3IgKE5TRGljdGlvbmFyeSAqaW5jb21pbmdEZXRhaWwgaW4gZGV0YWlscykg
ewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaW5jb21pbmdEZXRhaWwpOwogICAgICAgICAg
ICAgICAgICAgICBHcmFtbWFyRGV0YWlsIGRldGFpbDsKQEAgLTI1OSwxMyArMjYxLDEwIEBAIFZl
Y3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFw
aChTcGVsbERvY3VtZW50VGFnIHNwCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICBkZXRhaWwucmFuZ2UgPSBkZXRhaWxOU1JhbmdlOwogICAgICAgICAgICAgICAgICAg
ICBkZXRhaWwudXNlckRlc2NyaXB0aW9uID0gW2luY29taW5nRGV0YWlsIG9iamVjdEZvcktleTpA
Ik5TR3JhbW1hclVzZXJEZXNjcmlwdGlvbiJdOwotICAgICAgICAgICAgICAgICAgICBOU0FycmF5
ICpndWVzc2VzID0gW2luY29taW5nRGV0YWlsIG9iamVjdEZvcktleTpAIk5TR3JhbW1hckNvcnJl
Y3Rpb25zIl07Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBmb3Ig
KE5TU3RyaW5nICpndWVzcyBpbiBndWVzc2VzKQotICAgICAgICAgICAgICAgICAgICAgICAgZGV0
YWlsLmd1ZXNzZXMuYXBwZW5kKGd1ZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmRl
dGFpbHMuYXBwZW5kKGRldGFpbCk7CisgICAgICAgICAgICAgICAgICAgIGRldGFpbC5ndWVzc2Vz
ID0gbWFrZVZlY3RvcjxTdHJpbmc+KFtpbmNvbWluZ0RldGFpbCBvYmplY3RGb3JLZXk6QCJOU0dy
YW1tYXJDb3JyZWN0aW9ucyJdKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmRldGFpbHMu
dW5jaGVja2VkQXBwZW5kKGRldGFpbCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBl
bmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxz
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRB
c3Npc3RhbnQubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFz
c2lzdGFudC5tbQppbmRleCBjOWFlMWE2Njc3NzFiMjYxMDk1ODU0ZWFlNTllMjg1YWI3NTJmNjdi
Li40NWRkMmUxMzRjNGQ4NzhmNjViMTZmOWRmNDRkNjE0MDEzNTlmYmI5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFzc2lzdGFudC5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFzc2lzdGFudC5tbQpA
QCAtMjA3LDEyICsyMDcsMTEgQEAgLSAoQ0dSZWN0KXByZXNlbnRhdGlvblJlY3RGb3JFbGVtZW50
VXNpbmdDbG9zZXN0SW5kaWNhdGVkUmVjdAogCiAgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0b3Vj
aExvY2F0aW9uID0gX3Bvc2l0aW9uSW5mb3JtYXRpb24tPnJlcXVlc3QucG9pbnQ7CiAgICAgV2Vi
Q29yZTo6RmxvYXRQb2ludCBsaW5rRWxlbWVudExvY2F0aW9uID0gaW5kaWNhdG9yLnRleHRCb3Vu
ZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKTsKLSAgICBWZWN0b3I8V2Vi
Q29yZTo6RmxvYXRSZWN0PiBpbmRpY2F0ZWRSZWN0czsKLSAgICBmb3IgKGF1dG8gcmVjdCA6IGlu
ZGljYXRvci50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKSB7CisgICAgYXV0byBp
bmRpY2F0ZWRSZWN0cyA9IGluZGljYXRvci50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5h
dGVzLm1hcChbJl0oYXV0byByZWN0KSB7CiAgICAgICAgIHJlY3QuaW5mbGF0ZSgyKTsKICAgICAg
ICAgcmVjdC5tb3ZlQnkobGlua0VsZW1lbnRMb2NhdGlvbik7Ci0gICAgICAgIGluZGljYXRlZFJl
Y3RzLmFwcGVuZChyZWN0KTsKLSAgICB9CisgICAgICAgIHJldHVybiByZWN0OworICAgIH0pOwog
CiAgICAgZm9yIChjb25zdCBhdXRvJiBwYXRoIDogV2ViQ29yZTo6UGF0aFV0aWxpdGllczo6cGF0
aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3RzKGluZGljYXRlZFJlY3RzLCAwKSkgewogICAgICAgICBh
dXRvIGJvdW5kaW5nUmVjdCA9IHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFjLm1tIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFjLm1tCmluZGV4IDE2ZDY4MzhlNTQ4ZTA0
MzJmYmQxOGY4ZDRkMmFkZTFjMmMxMDhmNmUuLmVjZTJlM2UyNDUzMTVlZTcxYWQ5Nzk3ZmE2Y2M4
MGI0MjkzMzBkMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9UZXh0
Q2hlY2tlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNr
ZXJNYWMubW0KQEAgLTM0NCwxMiArMzQ0LDEzIEBAIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+
IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChTcGVsbERvY3VtZW50VGFnIHNwCiAg
ICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAgICAgcmVzdWx0
LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZzsKICAgICAgICAgICAgIHJlc3VsdC5y
YW5nZSA9IHJlc3VsdFJhbmdlOwotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsK
KyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgIH0g
ZWxzZSBpZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVHcmFtbWFyICYmIGNoZWNr
aW5nVHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcikpIHsKICAgICAgICAg
ICAgIFRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICBOU0FycmF5ICpkZXRh
aWxzID0gW2luY29taW5nUmVzdWx0IGdyYW1tYXJEZXRhaWxzXTsKICAgICAgICAgICAgIHJlc3Vs
dC50eXBlID0gVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcjsKICAgICAgICAgICAgIHJlc3VsdC5y
YW5nZSA9IHJlc3VsdFJhbmdlOworICAgICAgICAgICAgcmVzdWx0LmRldGFpbHMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShkZXRhaWxzLmNvdW50KTsKICAgICAgICAgICAgIGZvciAoTlNEaWN0aW9u
YXJ5ICppbmNvbWluZ0RldGFpbCBpbiBkZXRhaWxzKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJU
KGluY29taW5nRGV0YWlsKTsKICAgICAgICAgICAgICAgICBHcmFtbWFyRGV0YWlsIGRldGFpbDsK
QEAgLTM2MSw5ICszNjIsOCBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tl
cjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3BlbGxEb2N1bWVudFRhZyBzcAogICAgICAgICAgICAg
ICAgIGRldGFpbC5yYW5nZSA9IGRldGFpbE5TUmFuZ2U7CiAgICAgICAgICAgICAgICAgZGV0YWls
LnVzZXJEZXNjcmlwdGlvbiA9IFtpbmNvbWluZ0RldGFpbCBvYmplY3RGb3JLZXk6TlNHcmFtbWFy
VXNlckRlc2NyaXB0aW9uXTsKICAgICAgICAgICAgICAgICBOU0FycmF5ICpndWVzc2VzID0gW2lu
Y29taW5nRGV0YWlsIG9iamVjdEZvcktleTpOU0dyYW1tYXJDb3JyZWN0aW9uc107Ci0gICAgICAg
ICAgICAgICAgZm9yIChOU1N0cmluZyAqZ3Vlc3MgaW4gZ3Vlc3NlcykKLSAgICAgICAgICAgICAg
ICAgICAgZGV0YWlsLmd1ZXNzZXMuYXBwZW5kKFN0cmluZyhndWVzcykpOwotICAgICAgICAgICAg
ICAgIHJlc3VsdC5kZXRhaWxzLmFwcGVuZChkZXRhaWwpOworICAgICAgICAgICAgICAgIGRldGFp
bC5ndWVzc2VzID0gbWFrZVZlY3RvcjxTdHJpbmc+KGd1ZXNzZXMpOworICAgICAgICAgICAgICAg
IHJlc3VsdC5kZXRhaWxzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGRldGFpbCkpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKICAgICAgICAgfSBl
bHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZUxpbmsgJiYgY2hlY2tpbmdU
eXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpMaW5rKSkgewpAQCAtMzcxLDMxICszNzEs
MzEgQEAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9m
UGFyYWdyYXBoKFNwZWxsRG9jdW1lbnRUYWcgc3AKICAgICAgICAgICAgIHJlc3VsdC50eXBlID0g
VGV4dENoZWNraW5nVHlwZTo6TGluazsKICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3Vs
dFJhbmdlOwogICAgICAgICAgICAgcmVzdWx0LnJlcGxhY2VtZW50ID0gW1tpbmNvbWluZ1Jlc3Vs
dCBVUkxdIGFic29sdXRlU3RyaW5nXTsKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3Vs
dCk7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAg
ICB9IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlUXVvdGUgJiYgY2hl
Y2tpbmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpRdW90ZSkpIHsKICAgICAgICAg
ICAgIFRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICByZXN1bHQudHlwZSA9
IFRleHRDaGVja2luZ1R5cGU6OlF1b3RlOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVz
dWx0UmFuZ2U7CiAgICAgICAgICAgICByZXN1bHQucmVwbGFjZW1lbnQgPSBbaW5jb21pbmdSZXN1
bHQgcmVwbGFjZW1lbnRTdHJpbmddOwotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0
KTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAg
IH0gZWxzZSBpZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVEYXNoICYmIGNoZWNr
aW5nVHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6RGFzaCkpIHsKICAgICAgICAgICAg
IFRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICByZXN1bHQudHlwZSA9IFRl
eHRDaGVja2luZ1R5cGU6OkRhc2g7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRS
YW5nZTsKICAgICAgICAgICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IFtpbmNvbWluZ1Jlc3VsdCBy
ZXBsYWNlbWVudFN0cmluZ107Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOwor
ICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgfSBl
bHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZVJlcGxhY2VtZW50ICYmIGNo
ZWNraW5nVHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQpKSB7CiAg
ICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAgICAgcmVzdWx0
LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudDsKICAgICAgICAgICAgIHJlc3Vs
dC5yYW5nZSA9IHJlc3VsdFJhbmdlOwogICAgICAgICAgICAgcmVzdWx0LnJlcGxhY2VtZW50ID0g
W2luY29taW5nUmVzdWx0IHJlcGxhY2VtZW50U3RyaW5nXTsKLSAgICAgICAgICAgIHJlc3VsdHMu
YXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3Vs
dCkpOwogICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBl
Q29ycmVjdGlvbiAmJiBjaGVja2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkNv
cnJlY3Rpb24pKSB7CiAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAg
ICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpDb3JyZWN0aW9uOwogICAg
ICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFuZ2U7CiAgICAgICAgICAgICByZXN1bHQu
cmVwbGFjZW1lbnQgPSBbaW5jb21pbmdSZXN1bHQgcmVwbGFjZW1lbnRTdHJpbmddOwotICAgICAg
ICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5k
KFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3IuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvci5j
cHAKaW5kZXggNzM1NzZhMjQ3Y2UxMTc1Mjc1NjVmYjFkMjZiNGNkMDliMjQ3MmU5Zi4uMTI3YWMx
ZTQ1NzcxNWJmN2RmYjBlOWM5M2ExMDQyMGI0ZjVjMzU3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvci5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvci5j
cHAKQEAgLTk4LDkgKzk4LDkgQEAgdm9pZCBXZWJQYXltZW50Q29vcmRpbmF0b3I6Om9wZW5QYXlt
ZW50U2V0dXAoY29uc3QgU3RyaW5nJiBtZXJjaGFudElkZW50aWZpZXIsIGMKIAogYm9vbCBXZWJQ
YXltZW50Q29vcmRpbmF0b3I6OnNob3dQYXltZW50VUkoY29uc3QgVVJMJiBvcmlnaW5hdGluZ1VS
TCwgY29uc3QgVmVjdG9yPFVSTD4mIGxpbmtJY29uVVJMcywgY29uc3QgV2ViQ29yZTo6QXBwbGVQ
YXlTZXNzaW9uUGF5bWVudFJlcXVlc3QmIHBheW1lbnRSZXF1ZXN0KQogewotICAgIFZlY3RvcjxT
dHJpbmc+IGxpbmtJY29uVVJMU3RyaW5nczsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGxpbmtJY29u
VVJMIDogbGlua0ljb25VUkxzKQotICAgICAgICBsaW5rSWNvblVSTFN0cmluZ3MuYXBwZW5kKGxp
bmtJY29uVVJMLnN0cmluZygpKTsKKyAgICBhdXRvIGxpbmtJY29uVVJMU3RyaW5ncyA9IGxpbmtJ
Y29uVVJMcy5tYXAoW10oYXV0byYgbGlua0ljb25VUkwpIHsKKyAgICAgICAgcmV0dXJuIGxpbmtJ
Y29uVVJMLnN0cmluZygpOworICAgIH0pOwogCiAgICAgYm9vbCByZXN1bHQ7CiAgICAgaWYgKCFz
ZW5kU3luYyhNZXNzYWdlczo6V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OlNob3dQYXltZW50
VUkobV93ZWJQYWdlLmlkZW50aWZpZXIoKSwgbV93ZWJQYWdlLndlYlBhZ2VQcm94eUlkZW50aWZp
ZXIoKSwgb3JpZ2luYXRpbmdVUkwuc3RyaW5nKCksIGxpbmtJY29uVVJMU3RyaW5ncywgcGF5bWVu
dFJlcXVlc3QpLCBNZXNzYWdlczo6V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OlNob3dQYXlt
ZW50VUk6OlJlcGx5KHJlc3VsdCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5LmNwcApp
bmRleCBiMGZlODM1NzIyM2IzMTMzZmM0ZGIyZmJhYWQ4ZTczOWY1ZTNiOWQ2Li5mNDVjZmI0MTkx
MzZiN2NmMDhlM2JmZDQ5NmIyYjY5N2EzYzllZmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lv
blByb3h5LmNwcApAQCAtODA1LDEzICs4MDUsMTIgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
blByb3h5OjpzZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZChXZWJDb3JlOjpQYWdlSWRlbnRpZmkK
ICAgICBhdXRvJiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxXZWJDb3JlOjpIVE1MSW5wdXRFbGVt
ZW50PigqY29yZUVsZW1lbnQpOwogICAgIFZlY3RvcjxSZWY8V2ViQ29yZTo6RmlsZT4+IGZpbGVP
YmplY3RzOwogICAgIGlmIChpbnB1dEVsZW1lbnQubXVsdGlwbGUoKSkgewotICAgICAgICBpZiAo
YXV0byogZmlsZXMgPSBpbnB1dEVsZW1lbnQuZmlsZXMoKSkgewotICAgICAgICAgICAgZm9yIChh
dXRvJiBmaWxlIDogZmlsZXMtPmZpbGVzKCkpCi0gICAgICAgICAgICAgICAgZmlsZU9iamVjdHMu
YXBwZW5kKGZpbGUuY29weVJlZigpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoYXV0byogZmls
ZXMgPSBpbnB1dEVsZW1lbnQuZmlsZXMoKSkKKyAgICAgICAgICAgIGZpbGVPYmplY3RzLmFwcGVu
ZFZlY3RvcihmaWxlcy0+ZmlsZXMoKSk7CiAgICAgfQorICAgIGZpbGVPYmplY3RzLnJlc2VydmVD
YXBhY2l0eShmaWxlT2JqZWN0cy5zaXplKCkgKyBmaWxlbmFtZXMuc2l6ZSgpKTsKICAgICBmb3Ig
KGNvbnN0IGF1dG8mIHBhdGggOiBmaWxlbmFtZXMpCi0gICAgICAgIGZpbGVPYmplY3RzLmFwcGVu
ZChXZWJDb3JlOjpGaWxlOjpjcmVhdGUoJmlucHV0RWxlbWVudC5kb2N1bWVudCgpLCBwYXRoKSk7
CisgICAgICAgIGZpbGVPYmplY3RzLnVuY2hlY2tlZEFwcGVuZChXZWJDb3JlOjpGaWxlOjpjcmVh
dGUoJmlucHV0RWxlbWVudC5kb2N1bWVudCgpLCBwYXRoKSk7CiAgICAgaW5wdXRFbGVtZW50LnNl
dEZpbGVzKFdlYkNvcmU6OkZpbGVMaXN0OjpjcmVhdGUoV1RGTW92ZShmaWxlT2JqZWN0cykpKTsK
IAogICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0ZDo6bnVsbG9wdCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVy
TWFuYWdlci5jcHAKaW5kZXggN2M5ZDQ1NjlhNGU1MGIwNzEzYTc3YThiNGFjMjQwZmFlNDZkZGQx
ZS4uODEzYWYyODU5ODNjYjgyYzMwZjI0ZTI1MzcxNTVjN2YwZjNiNjEyOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFn
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVk
aWFQbGF5ZXJNYW5hZ2VyLmNwcApAQCAtMTYwLDggKzE2MCw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxN
ZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U+IFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlcjo6Y3Jl
YXRlUmVtCiAgICAgcHJveHlDb25maWd1cmF0aW9uLmlzVmlkZW8gPSBwbGF5ZXItPmlzVmlkZW9Q
bGF5ZXIoKTsKIAogI2lmIEVOQUJMRShBVkZfQ0FQVElPTlMpCi0gICAgZm9yIChjb25zdCBhdXRv
JiB0cmFjayA6IHBsYXllci0+b3V0T2ZCYW5kVHJhY2tTb3VyY2VzKCkpCi0gICAgICAgIHByb3h5
Q29uZmlndXJhdGlvbi5vdXRPZkJhbmRUcmFja0RhdGEuYXBwZW5kKHRyYWNrLT5kYXRhKCkpOwor
ICAgIHByb3h5Q29uZmlndXJhdGlvbi5vdXRPZkJhbmRUcmFja0RhdGEgPSBwbGF5ZXItPm91dE9m
QmFuZFRyYWNrU291cmNlcygpLm1hcChbXShhdXRvJiB0cmFjaykgeworICAgICAgICByZXR1cm4g
dHJhY2stPmRhdGEoKTsKKyAgICB9KTsKICNlbmRpZgogCiAgICAgYXV0byBkb2N1bWVudFNlY3Vy
aXR5T3JpZ2luID0gcGxheWVyLT5kb2N1bWVudFNlY3VyaXR5T3JpZ2luKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1NvdXJjZUJ1ZmZlclByaXZhdGVS
ZW1vdGUuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9Tb3VyY2VCdWZm
ZXJQcml2YXRlUmVtb3RlLmNwcAppbmRleCA5NjZmYzkzYjc3YWZhYTNlNjIwOGQ3YWJhNWFlZDJj
N2E5NGM3NGIyLi40ZWYxNjQwYTQwMTAwNmE2YjhmNjljYzUwMTE2NGE4YmQxOTBlYjkxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1NvdXJjZUJ1ZmZlclBy
aXZhdGVSZW1vdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEv
U291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZS5jcHAKQEAgLTMzOCwxNiArMzM4LDExIEBAIHZvaWQg
U291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZTo6dXBkYXRlVHJhY2tJZHMoVmVjdG9yPHN0ZDo6cGFp
cjxBdG9tU3RyaW5nLCBBdG9tCiAgICAgaWYgKCFtX2dwdVByb2Nlc3NDb25uZWN0aW9uKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8c3RkOjpwYWlyPFRyYWNrUHJpdmF0ZVJlbW90ZUlk
ZW50aWZpZXIsIFRyYWNrUHJpdmF0ZVJlbW90ZUlkZW50aWZpZXI+PiBpZGVudGlmaWVyUGFpcnM7
Ci0KLSAgICBmb3IgKGF1dG8mIHRyYWNrSWRQYWlyIDogdHJhY2tJZFBhaXJzKSB7CisgICAgYXV0
byBpZGVudGlmaWVyUGFpcnMgPSB0cmFja0lkUGFpcnMubWFwKFt0aGlzXShhdXRvJiB0cmFja0lk
UGFpcikgewogICAgICAgICBBU1NFUlQobV9wcmV2VHJhY2tJZGVudGlmaWVyTWFwLmNvbnRhaW5z
KHRyYWNrSWRQYWlyLmZpcnN0KSk7CiAgICAgICAgIEFTU0VSVChtX3RyYWNrSWRlbnRpZmllck1h
cC5jb250YWlucyh0cmFja0lkUGFpci5zZWNvbmQpKTsKLQotICAgICAgICBhdXRvIG9sZElkZW50
aWZpZXIgPSBtX3ByZXZUcmFja0lkZW50aWZpZXJNYXAudGFrZSh0cmFja0lkUGFpci5maXJzdCk7
Ci0gICAgICAgIGF1dG8gbmV3SWRlbnRpZmllciA9IG1fdHJhY2tJZGVudGlmaWVyTWFwLmdldCh0
cmFja0lkUGFpci5zZWNvbmQpOwotICAgICAgICBpZGVudGlmaWVyUGFpcnMuYXBwZW5kKHN0ZDo6
bWFrZV9wYWlyKG9sZElkZW50aWZpZXIsIG5ld0lkZW50aWZpZXIpKTsKLSAgICB9CisgICAgICAg
IHJldHVybiBzdGQ6OnBhaXIgeyBtX3ByZXZUcmFja0lkZW50aWZpZXJNYXAudGFrZSh0cmFja0lk
UGFpci5maXJzdCksIG1fdHJhY2tJZGVudGlmaWVyTWFwLmdldCh0cmFja0lkUGFpci5zZWNvbmQp
IH07CisgICAgfSk7CiAKICAgICBtX2dwdVByb2Nlc3NDb25uZWN0aW9uLT5jb25uZWN0aW9uKCku
c2VuZChNZXNzYWdlczo6UmVtb3RlU291cmNlQnVmZmVyUHJveHk6OlVwZGF0ZVRyYWNrSWRzKGlk
ZW50aWZpZXJQYWlycyksIG1fcmVtb3RlU291cmNlQnVmZmVySWRlbnRpZmllcik7CiB9CkBAIC0z
ODMsMjcgKzM3OCwzMCBAQCB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGU6OnNvdXJjZUJ1
ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZQogICAgIHNlZ21lbnQuZHVy
YXRpb24gPSBzZWdtZW50SW5mby5kdXJhdGlvbjsKIAogICAgIG1fcHJldlRyYWNrSWRlbnRpZmll
ck1hcC5zd2FwKG1fdHJhY2tJZGVudGlmaWVyTWFwKTsKKyAgICBzZWdtZW50LmF1ZGlvVHJhY2tz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2VnbWVudEluZm8uYXVkaW9UcmFja3Muc2l6ZSgpKTsK
ICAgICBmb3IgKGF1dG8mIGF1ZGlvVHJhY2sgOiBzZWdtZW50SW5mby5hdWRpb1RyYWNrcykgewog
ICAgICAgICBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQ6
OkF1ZGlvVHJhY2tJbmZvcm1hdGlvbiBpbmZvOwogICAgICAgICBpbmZvLnRyYWNrID0gbV9tZWRp
YVBsYXllclByaXZhdGUtPmF1ZGlvVHJhY2tQcml2YXRlUmVtb3RlKGF1ZGlvVHJhY2suaWRlbnRp
Zmllcik7CiAgICAgICAgIGluZm8uZGVzY3JpcHRpb24gPSBSZW1vdGVNZWRpYURlc2NyaXB0aW9u
OjpjcmVhdGUoYXVkaW9UcmFjay5kZXNjcmlwdGlvbik7Ci0gICAgICAgIHNlZ21lbnQuYXVkaW9U
cmFja3MuYXBwZW5kKGluZm8pOworICAgICAgICBzZWdtZW50LmF1ZGlvVHJhY2tzLnVuY2hlY2tl
ZEFwcGVuZChpbmZvKTsKICAgICAgICAgbV90cmFja0lkZW50aWZpZXJNYXAuYWRkKGluZm8udHJh
Y2stPmlkKCksIGF1ZGlvVHJhY2suaWRlbnRpZmllcik7CiAgICAgfQogCisgICAgc2VnbWVudC52
aWRlb1RyYWNrcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNlZ21lbnRJbmZvLnZpZGVvVHJhY2tz
LnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiB2aWRlb1RyYWNrIDogc2VnbWVudEluZm8udmlkZW9U
cmFja3MpIHsKICAgICAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRp
b25TZWdtZW50OjpWaWRlb1RyYWNrSW5mb3JtYXRpb24gaW5mbzsKICAgICAgICAgaW5mby50cmFj
ayA9IG1fbWVkaWFQbGF5ZXJQcml2YXRlLT52aWRlb1RyYWNrUHJpdmF0ZVJlbW90ZSh2aWRlb1Ry
YWNrLmlkZW50aWZpZXIpOwogICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0gUmVtb3RlTWVkaWFE
ZXNjcmlwdGlvbjo6Y3JlYXRlKHZpZGVvVHJhY2suZGVzY3JpcHRpb24pOwotICAgICAgICBzZWdt
ZW50LnZpZGVvVHJhY2tzLmFwcGVuZChpbmZvKTsKKyAgICAgICAgc2VnbWVudC52aWRlb1RyYWNr
cy51bmNoZWNrZWRBcHBlbmQoaW5mbyk7CiAgICAgICAgIG1fdHJhY2tJZGVudGlmaWVyTWFwLmFk
ZChpbmZvLnRyYWNrLT5pZCgpLCB2aWRlb1RyYWNrLmlkZW50aWZpZXIpOwogICAgIH0KIAorICAg
IHNlZ21lbnQudGV4dFRyYWNrcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNlZ21lbnRJbmZvLnRl
eHRUcmFja3Muc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIHRleHRUcmFjayA6IHNlZ21lbnRJbmZv
LnRleHRUcmFja3MpIHsKICAgICAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlh
bGl6YXRpb25TZWdtZW50OjpUZXh0VHJhY2tJbmZvcm1hdGlvbiBpbmZvOwogICAgICAgICBpbmZv
LnRyYWNrID0gbV9tZWRpYVBsYXllclByaXZhdGUtPnRleHRUcmFja1ByaXZhdGVSZW1vdGUodGV4
dFRyYWNrLmlkZW50aWZpZXIpOwogICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0gUmVtb3RlTWVk
aWFEZXNjcmlwdGlvbjo6Y3JlYXRlKHRleHRUcmFjay5kZXNjcmlwdGlvbik7Ci0gICAgICAgIHNl
Z21lbnQudGV4dFRyYWNrcy5hcHBlbmQoaW5mbyk7CisgICAgICAgIHNlZ21lbnQudGV4dFRyYWNr
cy51bmNoZWNrZWRBcHBlbmQoaW5mbyk7CiAgICAgICAgIG1fdHJhY2tJZGVudGlmaWVyTWFwLmFk
ZChpbmZvLnRyYWNrLT5pZCgpLCB0ZXh0VHJhY2suaWRlbnRpZmllcik7CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2Rl
Y3MuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29k
ZWNzLmNwcAppbmRleCBkMDcwYzJiNzlkZjQwY2FjYjQxOGYwNjc4MjY3ZTRjM2I0YTU0NjFjLi4x
YzIyNzM0MzI1NDVhYmYzYzkwNmI4NWRjMTdkOWI5OWQ0ZTFmN2FkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAK
QEAgLTM5Miw5ICszOTIsOSBAQCBMaWJXZWJSVENDb2RlY3M6OkVuY29kZXIqIExpYldlYlJUQ0Nv
ZGVjczo6Y3JlYXRlRW5jb2RlcihUeXBlIHR5cGUsIGNvbnN0IHN0ZDo6bQogICAgIGVuY29kZXIt
PmlkZW50aWZpZXIgPSBSVENFbmNvZGVySWRlbnRpZmllcjo6Z2VuZXJhdGVUaHJlYWRTYWZlKCk7
CiAgICAgZW5jb2Rlci0+Y29kZWNUeXBlID0gdG9XZWJSVENDb2RlY1R5cGUodHlwZSk7CiAKLSAg
ICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gcGFyYW1ldGVyczsKLSAgICBmb3Ig
KGF1dG8mIGtleVZhbHVlIDogZm9ybWF0UGFyYW1ldGVycykKLSAgICAgICAgcGFyYW1ldGVycy5h
cHBlbmQoc3RkOjptYWtlX3BhaXIoU3RyaW5nOjpmcm9tVVRGOChrZXlWYWx1ZS5maXJzdC5kYXRh
KCksIGtleVZhbHVlLmZpcnN0Lmxlbmd0aCgpKSwgU3RyaW5nOjpmcm9tVVRGOChrZXlWYWx1ZS5z
ZWNvbmQuZGF0YSgpLCBrZXlWYWx1ZS5zZWNvbmQubGVuZ3RoKCkpKSk7CisgICAgYXV0byBwYXJh
bWV0ZXJzID0gV1RGOjptYXAoZm9ybWF0UGFyYW1ldGVycywgW10oYXV0byYgZW50cnkpIHsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6cGFpciB7IFN0cmluZzo6ZnJvbVVURjgoZW50cnkuZmlyc3QuZGF0
YSgpLCBlbnRyeS5maXJzdC5sZW5ndGgoKSksIFN0cmluZzo6ZnJvbVVURjgoZW50cnkuc2Vjb25k
LmRhdGEoKSwgZW50cnkuc2Vjb25kLmxlbmd0aCgpKSB9OworICAgIH0pOwogCiAgICAgZW5zdXJl
R1BVUHJvY2Vzc0Nvbm5lY3Rpb25BbmREaXNwYXRjaFRvVGhyZWFkKFt0aGlzLCBlbmNvZGVyID0g
V1RGTW92ZShlbmNvZGVyKSwgdHlwZSwgcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyld
KCkgbXV0YWJsZSB7CiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVy
bGF5LmNwcAppbmRleCBkODU0MmEyYjEwYjFiM2UxNTM2MTQxNTQxMTVlZjdlY2VjNDRlYjg4Li42
ZjhmNzQ1MzU5MjQ1M2UwZTYxODY3NjEyNDRlMGI3NzkyMjFkZTc5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3Zl
cmxheS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwCkBAIC0xOTcsMTEgKzE5NywxMyBAQCBwcml2YXRl
OgogICAgICAgICBhdXRvIHdrTmFtZXMgPSBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCku
Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyh0b0FQSSgmcGFnZU92ZXJsYXkpLCBwYXJh
bWVyaXplZE5hbWVzLCBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuYmFzZS5jbGllbnRJ
bmZvKTsKIAogICAgICAgICBzaXplX3QgY291bnQgPSBXS0FycmF5R2V0U2l6ZSh3a05hbWVzKTsK
KyAgICAgICAgbmFtZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjb3VudCk7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGsgPSAwOyBrIDwgY291bnQ7IGsrKykgewogICAgICAgICAgICAgV0tUeXBlUmVm
IGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgod2tOYW1lcywgayk7CiAgICAgICAgICAgICBp
ZiAoV2ViS2l0Ojp0b0ltcGwoaXRlbSktPnR5cGUoKSA9PSBBUEk6OlN0cmluZzo6QVBJVHlwZSkK
LSAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoV2ViS2l0Ojp0b1dURlN0cmluZyhzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4oaXRlbSkpKTsKKyAgICAgICAgICAgICAgICBuYW1lcy51bmNoZWNr
ZWRBcHBlbmQoV2ViS2l0Ojp0b1dURlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oaXRl
bSkpKTsKICAgICAgICAgfQorICAgICAgICBuYW1lcy5zaHJpbmtUb0ZpdCgpOwogCiAgICAgICAg
IHJldHVybiBuYW1lczsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvU2Vzc2lvblN0YXRlQ29udmVyc2lvbi5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvU2Vzc2lvblN0YXRlQ29udmVyc2lvbi5jcHAK
aW5kZXggYzhmMjQ4YTY0NzY1NzZhMjkyYzc1ZDVmYWE2OGY1YWM2M2E0NzVjOC4uNTY3ZDQ3NTFi
ZWU4M2EzYjNmNGY2ZTBmYTIzNzdiZDAwNjM1MGEyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1Nlc3Npb25TdGF0ZUNvbnZlcnNpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9TZXNzaW9uU3RhdGVD
b252ZXJzaW9uLmNwcApAQCAtOTksMTAgKzk5LDkgQEAgc3RhdGljIEZyYW1lU3RhdGUgdG9GcmFt
ZVN0YXRlKGNvbnN0IEhpc3RvcnlJdGVtJiBoaXN0b3J5SXRlbSkKICAgICBmcmFtZVN0YXRlLm9i
c2N1cmVkSW5zZXRzID0gaGlzdG9yeUl0ZW0ub2JzY3VyZWRJbnNldHMoKTsKICNlbmRpZgogCi0g
ICAgZm9yIChhdXRvJiBjaGlsZEhpc3RvcnlJdGVtIDogaGlzdG9yeUl0ZW0uY2hpbGRyZW4oKSkg
ewotICAgICAgICBGcmFtZVN0YXRlIGNoaWxkRnJhbWVTdGF0ZSA9IHRvRnJhbWVTdGF0ZShjaGls
ZEhpc3RvcnlJdGVtKTsKLSAgICAgICAgZnJhbWVTdGF0ZS5jaGlsZHJlbi5hcHBlbmQoV1RGTW92
ZShjaGlsZEZyYW1lU3RhdGUpKTsKLSAgICB9CisgICAgZnJhbWVTdGF0ZS5jaGlsZHJlbiA9IGhp
c3RvcnlJdGVtLmNoaWxkcmVuKCkubWFwKFtdKGF1dG8mIGNoaWxkSGlzdG9yeUl0ZW0pIHsKKyAg
ICAgICAgcmV0dXJuIHRvRnJhbWVTdGF0ZShjaGlsZEhpc3RvcnlJdGVtKTsKKyAgICB9KTsKIAog
ICAgIHJldHVybiBmcmFtZVN0YXRlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXIu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRldmljZU9y
aWVudGF0aW9uVXBkYXRlUHJvdmlkZXIuY3BwCmluZGV4IGY5YWY5YWI5M2Y3ZTAxMjg3NzM2NTBj
MWQyNDk1YWRkZTM5ZmQ0MzUuLjFkMTFmNDIzYzE3ODhkNTk3ZmYyNTc4ZWU2MGQ5Y2I2MTZhMGRk
MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92
aWRlci5jcHAKQEAgLTgzLDExICs4Myw3IEBAIHZvaWQgV2ViRGV2aWNlT3JpZW50YXRpb25VcGRh
dGVQcm92aWRlcjo6c3RvcFVwZGF0aW5nRGV2aWNlTW90aW9uKFdlYkNvcmU6Ok1vdGlvCiAKIHZv
aWQgV2ViRGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlcjo6ZGV2aWNlT3JpZW50YXRpb25D
aGFuZ2VkKGRvdWJsZSBhbHBoYSwgZG91YmxlIGJldGEsIGRvdWJsZSBnYW1tYSwgZG91YmxlIGNv
bXBhc3NIZWFkaW5nLCBkb3VibGUgY29tcGFzc0FjY3VyYWN5KQogewotICAgIFZlY3RvcjxXZWFr
UHRyPFdlYkNvcmU6Ok1vdGlvbk1hbmFnZXJDbGllbnQ+PiBjbGllbnRzOwotICAgIGZvciAoYXV0
byYgY2xpZW50IDogbV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudHMpCi0gICAgICAgIGNsaWVudHMu
YXBwZW5kKGNsaWVudCk7Ci0KLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IGNsaWVudHMpIHsKKyAg
ICBmb3IgKGF1dG8mIGNsaWVudCA6IGNvcHlUb1ZlY3Rvck9mPFdlYWtQdHI8V2ViQ29yZTo6TW90
aW9uTWFuYWdlckNsaWVudD4+KG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRzKSkgewogICAgICAg
ICBpZiAoY2xpZW50KQogICAgICAgICAgICAgY2xpZW50LT5vcmllbnRhdGlvbkNoYW5nZWQoYWxw
aGEsIGJldGEsIGdhbW1hLCBjb21wYXNzSGVhZGluZywgY29tcGFzc0FjY3VyYWN5KTsKICAgICB9
CkBAIC05NSwxMSArOTEsNyBAQCB2b2lkIFdlYkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlk
ZXI6OmRldmljZU9yaWVudGF0aW9uQ2hhbmdlZChkb3VibGUgYWxwaGEsCiAKIHZvaWQgV2ViRGV2
aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlcjo6ZGV2aWNlTW90aW9uQ2hhbmdlZChkb3VibGUg
eEFjY2VsZXJhdGlvbiwgZG91YmxlIHlBY2NlbGVyYXRpb24sIGRvdWJsZSB6QWNjZWxlcmF0aW9u
LCBkb3VibGUgeEFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHksIGRvdWJsZSB5QWNjZWxlcmF0
aW9uSW5jbHVkaW5nR3Jhdml0eSwgZG91YmxlIHpBY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5
LCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4geFJvdGF0aW9uUmF0ZSwgc3RkOjpvcHRpb25hbDxkb3Vi
bGU+IHlSb3RhdGlvblJhdGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB6Um90YXRpb25SYXRlKQog
ewotICAgIFZlY3RvcjxXZWFrUHRyPFdlYkNvcmU6Ok1vdGlvbk1hbmFnZXJDbGllbnQ+PiBjbGll
bnRzOwotICAgIGZvciAoYXV0byYgY2xpZW50IDogbV9kZXZpY2VNb3Rpb25DbGllbnRzKQotICAg
ICAgICBjbGllbnRzLmFwcGVuZChjbGllbnQpOwotICAgIAotICAgIGZvciAoYXV0byYgY2xpZW50
IDogY2xpZW50cykgeworICAgIGZvciAoYXV0byYgY2xpZW50IDogY29weVRvVmVjdG9yT2Y8V2Vh
a1B0cjxXZWJDb3JlOjpNb3Rpb25NYW5hZ2VyQ2xpZW50Pj4obV9kZXZpY2VNb3Rpb25DbGllbnRz
KSkgewogICAgICAgICBpZiAoY2xpZW50KQogICAgICAgICAgICAgY2xpZW50LT5tb3Rpb25DaGFu
Z2VkKHhBY2NlbGVyYXRpb24sIHlBY2NlbGVyYXRpb24sIHpBY2NlbGVyYXRpb24sIHhBY2NlbGVy
YXRpb25JbmNsdWRpbmdHcmF2aXR5LCB5QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwgIHpB
Y2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5LCB4Um90YXRpb25SYXRlLCB5Um90YXRpb25SYXRl
LCB6Um90YXRpb25SYXRlKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5j
cHAKaW5kZXggZGZkZGExNzY5OTM2MDA0NDdhMGM5M2NjODQ2MGY1ZTY4YjJjMjQ4MS4uMzE4Zjdj
M2QyOTMzMmMwMmFkMmNlMzBkOTBlN2NmZTZmNTVjMzIxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJv
YXJkT3ZlcnJpZGVzLmNwcApAQCAtNzEsMTggKzcxLDEzIEBAIHZvaWQgV2ViUGFzdGVib2FyZE92
ZXJyaWRlczo6cmVtb3ZlT3ZlcnJpZGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29u
c3QKIAogVmVjdG9yPFN0cmluZz4gV2ViUGFzdGVib2FyZE92ZXJyaWRlczo6b3ZlcnJpZGRlblR5
cGVzKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7Ci0gICAgVmVjdG9yPFN0cmluZz4g
cmVzdWx0OwotCiAgICAgYXV0byBpdCA9IG1fb3ZlcnJpZGVzTWFwLmZpbmQocGFzdGVib2FyZE5h
bWUpOwogICAgIGlmIChpdCA9PSBtX292ZXJyaWRlc01hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIEFTU0VSVChpdC0+dmFsdWUpOwog
Ci0gICAgZm9yIChTdHJpbmcmIHR5cGUgOiBpdC0+dmFsdWUtPmtleXMoKSkKLSAgICAgICAgcmVz
dWx0LmFwcGVuZCh0eXBlKTsKLQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGNvcHlU
b1ZlY3RvcihpdC0+dmFsdWUtPmtleXMoKSk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6
UGFzdGVib2FyZEl0ZW1JbmZvPiBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpvdmVycmlkZGVuSW5m
byhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlNwZWVjaFN5bnRoZXNpc0NsaWVudC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViU3BlZWNoU3ludGhl
c2lzQ2xpZW50LmNwcAppbmRleCBjNGQwZGNjMDNkNWRhNmEwNDgzZWRmNTZkMWU0Mzk1MjdiYzk1
Zjg4Li5jNTdlNzgwOWIyZWUxNjZkZDZmNjg4YmUyMmE4NTljN2RhZGRhOGZhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViU3BlZWNoU3ludGhl
c2lzQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViU3BlZWNoU3ludGhlc2lzQ2xpZW50LmNwcApAQCAtNDIsOSArNDIsOSBAQCBjb25zdCBW
ZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2U+PiYgV2Vi
U3BlZWNoU3ludGhlc2lzQwogICAgIFZlY3RvcjxXZWJTcGVlY2hTeW50aGVzaXNWb2ljZT4gdm9p
Y2VMaXN0OwogICAgIG1fcGFnZS5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTcGVl
Y2hTeW50aGVzaXNWb2ljZUxpc3QoKSwgdm9pY2VMaXN0KTsKIAotICAgIG1fdm9pY2VzLmNsZWFy
KCk7Ci0gICAgZm9yIChhdXRvJiB2b2ljZSA6IHZvaWNlTGlzdCkKLSAgICAgICAgbV92b2ljZXMu
YXBwZW5kKFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2U6OmNyZWF0ZSh2b2lj
ZS52b2ljZVVSSSwgdm9pY2UubmFtZSwgdm9pY2UubGFuZywgdm9pY2UubG9jYWxTZXJ2aWNlLCB2
b2ljZS5kZWZhdWx0TGFuZykpOworICAgIG1fdm9pY2VzID0gdm9pY2VMaXN0Lm1hcChbXShhdXRv
JiB2b2ljZSkgLT4gUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2U+
IHsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2U6
OmNyZWF0ZSh2b2ljZS52b2ljZVVSSSwgdm9pY2UubmFtZSwgdm9pY2UubGFuZywgdm9pY2UubG9j
YWxTZXJ2aWNlLCB2b2ljZS5kZWZhdWx0TGFuZyk7CisgICAgfSk7CiAgICAgcmV0dXJuIG1fdm9p
Y2VzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9G
aW5kQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5k
Q29udHJvbGxlci5jcHAKaW5kZXggYjUxMzRkMGQyYzVkN2M1MmY2ZmFjOTY4MDQ0MWFjYzNlZWJm
NjVmZC4uMWQ2NDNiNmI0Mjg4ZDA4ZTAzOGM0NjI1ZDA1NDlkZTY4YWYyYWE3NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcApA
QCAtMjcyLDEwICsyNzIsOSBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpmaW5kU3RyaW5nTWF0Y2hl
cyhjb25zdCBTdHJpbmcmIHN0cmluZywgT3B0aW9uU2V0PEZpbmRPcHRpbwogICAgIGF1dG8gcmVz
dWx0ID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5maW5kVGV4dE1hdGNoZXMoc3RyaW5nLCBjb3Jl
KG9wdGlvbnMpLCBtYXhNYXRjaENvdW50KTsKICAgICBtX2ZpbmRNYXRjaGVzID0gV1RGTW92ZShy
ZXN1bHQucmFuZ2VzKTsKIAotICAgIFZlY3RvcjxWZWN0b3I8SW50UmVjdD4+IG1hdGNoUmVjdHM7
Ci0gICAgZm9yIChhdXRvJiByYW5nZSA6IG1fZmluZE1hdGNoZXMpCi0gICAgICAgIG1hdGNoUmVj
dHMuYXBwZW5kKFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMocmFuZ2UpKTsKLQorICAg
IGF1dG8gbWF0Y2hSZWN0cyA9IG1fZmluZE1hdGNoZXMubWFwKFtdKGF1dG8mIHJhbmdlKSB7Cisg
ICAgICAgIHJldHVybiBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKHJhbmdlKTsKKyAg
ICB9KTsKICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmlu
ZFN0cmluZ01hdGNoZXMoc3RyaW5nLCBtYXRjaFJlY3RzLCByZXN1bHQuaW5kZXhGb3JTZWxlY3Rp
b24pKTsKIAogICAgIGlmICghb3B0aW9ucy5jb250YWlucyhGaW5kT3B0aW9uczo6U2hvd092ZXJs
YXkpICYmICFvcHRpb25zLmNvbnRhaW5zKEZpbmRPcHRpb25zOjpTaG93RmluZEluZGljYXRvcikp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRl
eHRSYW5nZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcAppbmRleCA3NDgwMmM0Nzg3NTVmZmU2MWI5
MzA5MmNiY2E2ZDBhYzdjY2M5YzgzLi4yYzliNDU3ZGJjYTA3YTZlYjEyNjg5YTc4ZjBkZDViMjkx
NGEyMWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJG
b3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAKQEAgLTI0OCwxMSArMjQ4
LDEwIEBAIHZvaWQgV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpkcmF3UmVjdChXZWJDb3Jl
OjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OkdyYXBoCiAgICAgICAgIGF1dG8gdGV4dEJvdW5kaW5n
UmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9IG1fdGV4dEluZGljYXRvci0+dGV4dEJvdW5kaW5n
UmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpOwogICAgICAgICBhdXRvIHRleHRSZWN0c0luQm91
bmRpbmdSZWN0Q29vcmRpbmF0ZXMgPSBtX3RleHRJbmRpY2F0b3ItPnRleHRSZWN0c0luQm91bmRp
bmdSZWN0Q29vcmRpbmF0ZXMoKTsKIAotICAgICAgICBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0
PiB0ZXh0UmVjdHNJblJvb3RWaWV3Q29vcmRpbmF0ZXM7Ci0gICAgICAgIGZvciAoYXV0byByZWN0
IDogdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcykgeworICAgICAgICBhdXRvIHRl
eHRSZWN0c0luUm9vdFZpZXdDb29yZGluYXRlcyA9IHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29v
cmRpbmF0ZXMubWFwKFsmXShhdXRvIHJlY3QpIHsKICAgICAgICAgICAgIHJlY3QubW92ZUJ5KHRl
eHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKSk7Ci0gICAgICAg
ICAgICB0ZXh0UmVjdHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMuYXBwZW5kKHJlY3QpOwotICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gcmVjdDsKKyAgICAgICAgfSk7CiAKICAgICAgICAgYXV0
byBwYXRocyA9IFdlYkNvcmU6OlBhdGhVdGlsaXRpZXM6OnBhdGhzV2l0aFNocmlua1dyYXBwZWRS
ZWN0cyh0ZXh0UmVjdHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMsIGluZGljYXRvclJhZGl1cyk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggNzMx
ZTAwMzgyYjA2MjgxMTQwYzNiZjI3NmJjNDJjYmQyZWFjNWNjYS4uNmEwMTRmZDc3ZjAxYmZmZGE4
ZTAwMjgxM2Y2MzhlMTg4N2Y3ODg5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTMwMzEsNyArMzAzMSw3IEBAIHZvaWQgV2ViUGFnZTo6bW91
c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBzdGQ6Om9wdGlvbmFsPFZl
Y3RvcjxTCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBWZWN0b3I8UmVmUHRyPFNhbmRi
b3hFeHRlbnNpb24+PiBtb3VzZUV2ZW50U2FuZGJveEV4dGVuc2lvbnM7CisgICAgVmVjdG9yPFJl
ZjxTYW5kYm94RXh0ZW5zaW9uPj4gbW91c2VFdmVudFNhbmRib3hFeHRlbnNpb25zOwogICAgIGlm
IChzYW5kYm94RXh0ZW5zaW9ucykKICAgICAgICAgbW91c2VFdmVudFNhbmRib3hFeHRlbnNpb25z
ID0gY29uc3VtZVNhbmRib3hFeHRlbnNpb25zKFdURk1vdmUoKnNhbmRib3hFeHRlbnNpb25zKSk7
CiAKQEAgLTc4NTcsMjEgKzc4NTcsMTkgQEAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5JiBX
ZWJQYWdlOjplbnN1cmVSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKQogfQogI2VuZGlmCiAK
LVZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+IFdlYlBhZ2U6OmNvbnN1bWVTYW5kYm94
RXh0ZW5zaW9ucyhWZWN0b3I8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiYmIHNhbmRib3hFeHRl
bnNpb25zKQorVmVjdG9yPFJlZjxTYW5kYm94RXh0ZW5zaW9uPj4gV2ViUGFnZTo6Y29uc3VtZVNh
bmRib3hFeHRlbnNpb25zKFZlY3RvcjxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+JiYgc2FuZGJv
eEV4dGVuc2lvbnMpCiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPj4gZHJh
Z1NhbmRib3hFeHRlbnNpb25zOwotICAgIGZvciAoYXV0byYgc2FuZGJveEV4dGVuc2lvbiA6IHNh
bmRib3hFeHRlbnNpb25zKSB7CisgICAgcmV0dXJuIFdURjo6Y29tcGFjdE1hcChXVEZNb3ZlKHNh
bmRib3hFeHRlbnNpb25zKSwgW10oYXV0byYmIHNhbmRib3hFeHRlbnNpb24pIC0+IFJlZlB0cjxT
YW5kYm94RXh0ZW5zaW9uPiB7CiAgICAgICAgIGF1dG8gZXh0ZW5zaW9uID0gU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlKFdURk1vdmUoc2FuZGJveEV4dGVuc2lvbikpOwogICAgICAgICBpZiAoIWV4
dGVuc2lvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgICAgIGJvb2wgb2sgPSBleHRlbnNpb24tPmNvbnN1bWUoKTsKICAgICAgICAgQVNT
RVJUX1VOVVNFRChvaywgb2spOwotICAgICAgICBkcmFnU2FuZGJveEV4dGVuc2lvbnMuYXBwZW5k
KFdURk1vdmUoZXh0ZW5zaW9uKSk7Ci0gICAgfQotICAgIHJldHVybiBkcmFnU2FuZGJveEV4dGVu
c2lvbnM7CisgICAgICAgIHJldHVybiBleHRlbnNpb247CisgICAgfSk7CiB9CiAKLXZvaWQgV2Vi
UGFnZTo6cmV2b2tlU2FuZGJveEV4dGVuc2lvbnMoVmVjdG9yPFJlZlB0cjxTYW5kYm94RXh0ZW5z
aW9uPj4mIHNhbmRib3hFeHRlbnNpb25zKQordm9pZCBXZWJQYWdlOjpyZXZva2VTYW5kYm94RXh0
ZW5zaW9ucyhWZWN0b3I8UmVmPFNhbmRib3hFeHRlbnNpb24+PiYgc2FuZGJveEV4dGVuc2lvbnMp
CiB7CiAgICAgZm9yIChhdXRvJiBzYW5kYm94RXh0ZW5zaW9uIDogc2FuZGJveEV4dGVuc2lvbnMp
CiAgICAgICAgIHNhbmRib3hFeHRlbnNpb24tPnJldm9rZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDY5ZGUxNGFhOTgzNDM4OGE0MDUyNDc3YzM2
MTgxZDdkNWEyZjdjY2YuLjY1NGI4YzljNjAwMmQwZWQ5YjJjNjJjZTBjMzFlYTliZmRiMGJlZjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTE5Njks
OCArMTk2OSw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHBsYXRmb3JtRGlkU2NhbGVQYWdlKCk7
CiAKLSAgICBWZWN0b3I8UmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiBjb25zdW1lU2FuZGJveEV4
dGVuc2lvbnMoVmVjdG9yPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4mJik7Ci0gICAgdm9pZCBy
ZXZva2VTYW5kYm94RXh0ZW5zaW9ucyhWZWN0b3I8UmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiYg
c2FuZGJveEV4dGVuc2lvbnMpOworICAgIFZlY3RvcjxSZWY8U2FuZGJveEV4dGVuc2lvbj4+IGNv
bnN1bWVTYW5kYm94RXh0ZW5zaW9ucyhWZWN0b3I8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiYm
KTsKKyAgICB2b2lkIHJldm9rZVNhbmRib3hFeHRlbnNpb25zKFZlY3RvcjxSZWY8U2FuZGJveEV4
dGVuc2lvbj4+JiBzYW5kYm94RXh0ZW5zaW9ucyk7CiAKICAgICB2b2lkIHNldFNlbGVjdGlvblJh
bmdlKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5LCBi
b29sKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1dlYlBhZ2VNYWMubW0KaW5kZXggOWRjMDBkYTI3NzBjMTkzOTg5MWEzMDBmMjMzNzQ5NmE5Yzhl
NzAxZC4uYmQzNjcyMDc1Yjc1NzY4Yzg0MTQ3NzhmYzY2NWY1ZDc1YjRlMjRhZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAg
LTc1NCwxMSArNzU0LDggQEAgdm9pZCBXZWJQYWdlOjpoYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xp
Y2soRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgY29uc3QgVmVjdG8KIAogICAgIE5TRGF0YSAq
c2VsZWN0aW9uRGF0YSA9IFthdHRyaWJ1dGVkU2VsZWN0aW9uIFJURkRGcm9tUmFuZ2U6TlNNYWtl
UmFuZ2UoMCwgW2F0dHJpYnV0ZWRTZWxlY3Rpb24gbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVz
OkB7IH1dOwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHNlbGVjdGlvbkRhdGFWZWN0b3I7Ci0gICAg
c2VsZWN0aW9uRGF0YVZlY3Rvci5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oc2VsZWN0aW9uRGF0YS5ieXRlcyksIHNlbGVjdGlvbkRhdGEubGVuZ3RoKTsKLQogICAgIGZs
dXNoUGVuZGluZ0VkaXRvclN0YXRlVXBkYXRlKCk7Ci0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpTaG93Q29udGV4dE1lbnUoQ29udGV4dE1lbnVDb250ZXh0RGF0YShwb2ludCwgc2Vs
ZWN0aW9uRGF0YVZlY3RvciwgcGhvbmVOdW1iZXJzLCBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuaXND
b250ZW50RWRpdGFibGUoKSksIFVzZXJEYXRhKCkpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OlNob3dDb250ZXh0TWVudShDb250ZXh0TWVudUNvbnRleHREYXRhKHBvaW50LCBW
ZWN0b3IgeyByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzZWxlY3Rpb25EYXRhLmJ5
dGVzKSwgc2VsZWN0aW9uRGF0YS5sZW5ndGggfSwgcGhvbmVOdW1iZXJzLCBzZWxlY3Rpb24uc2Vs
ZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSksIFVzZXJEYXRhKCkpKTsKIH0KIAogdm9pZCBX
ZWJQYWdlOjpoYW5kbGVJbWFnZVNlcnZpY2VDbGljayhjb25zdCBJbnRQb2ludCYgcG9pbnQsIElt
YWdlJiBpbWFnZSwgSFRNTEltYWdlRWxlbWVudCYgZWxlbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmNwcAppbmRleCA3OTk2MTNkMzc3NDIzNjNiZmJkY2Q5NTI5Nzk5NjIy
MDZmMDIyOGE4Li44OTkwZWRkNzZjYWI5NmMyZGVjZDNiOTYwNTRjZmY2Mjk1YmIwY2Y1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC0xNDUyLDggKzE0NTIsMTAg
QEAgdm9pZCBXZWJQcm9jZXNzOjpmZXRjaFdlYnNpdGVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0
YVR5cGU+IHdlYnNpdGVEYXRhVHlwZXMsIEMKIHsKICAgICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0
YTsKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6Ok1l
bW9yeUNhY2hlKSkgewotICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IE1lbW9yeUNhY2hlOjpz
aW5nbGV0b24oKS5vcmlnaW5zV2l0aENhY2hlKHNlc3Npb25JRCgpKSkKLSAgICAgICAgICAgIHdl
YnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbi0+ZGF0
YSgpLCBXZWJzaXRlRGF0YVR5cGU6Ok1lbW9yeUNhY2hlLCAwIH0pOworICAgICAgICBhdXRvIG9y
aWdpbnMgPSBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkub3JpZ2luc1dpdGhDYWNoZShzZXNzaW9u
SUQoKSk7CisgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMgPSBXVEY6Om1hcChvcmlnaW5zLCBb
XShhdXRvJiBvcmlnaW4pIHsKKyAgICAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0YTo6RW50cnkg
eyBvcmlnaW4tPmRhdGEoKSwgV2Vic2l0ZURhdGFUeXBlOjpNZW1vcnlDYWNoZSwgMCB9OworICAg
ICAgICB9KTsKICAgICB9CiAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZSh3ZWJzaXRlRGF0
YSkpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452711</attachid>
            <date>2022-02-20 23:07:31 -0800</date>
            <delta_ts>2022-02-22 07:18:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236852-20220220230730.patch</filename>
            <type>text/plain</type>
            <size>162866</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDBiOGQ4YTE1ZWQxZjg3MDc2NDI2ZWUz
OTRhMGMwMzAyOGYzMGEwZTUuLjkzYzY0ZGM2ZTcwMjYyNzY4MGQ2MjIwZmI4ZjU2NzBmYjFjNDYw
MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjItMDItMTggIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGV2ZW4gbW9yZSBjYWxs
IHNpdGVzIGNvbnN0cnVjdGluZyB2ZWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuY3BwOgorICAgICAgICAoV1RGOjpD
b25jdXJyZW50V29ya1F1ZXVlOjphcHBseSk6CisgICAgICAgICogd3RmL2NmL0xhbmd1YWdlQ0Yu
Y3BwOgorICAgICAgICAoV1RGOjpwbGF0Zm9ybVVzZXJQcmVmZXJyZWRMYW5ndWFnZXMpOgorCiAy
MDIyLTAyLTE4ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBb
aU9TXSBTYWZhcmkgY2FuIHNvbWV0aW1lcyBoYW5nIHdoaWxlIHByaW50aW5nIGR1ZSB0byBzeW5j
IElQQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IGJjZWQyYjI2MmQxM2NkZmZiODRiNjJkNGE1ZTk3MmYyNjU3YzYx
MDAuLjE3NTA2N2M5YTI3MWI4MjUyYTJmMWRkNjY4M2NlYWI3NGFlNDZhZGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNjYgQEAKKzIwMjItMDItMTggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGV2ZW4gbW9yZSBjYWxsIHNpdGVz
IGNvbnN0cnVjdGluZyB2ZWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzY4NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIE1vZHVsZXMvYXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBheW1lbnRDb29yZGluYXRvcjo6YmVnaW5QYXltZW50U2Vzc2lv
bik6CisgICAgICAgICogTW9kdWxlcy9hcHBsZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29jb2Eu
bW06CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0KToKKyAgICAgICAgKiBNb2R1bGVzL2NhY2hl
L0RPTUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUNhY2hlOjpiYXRjaFB1dE9wZXJh
dGlvbik6CisgICAgICAgICogTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R2FtZXBhZDo6R2FtZXBhZCk6CisgICAgICAgICogTW9kdWxlcy9nYW1lcGFkL0dh
bWVwYWRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRNYW5hZ2VyOjpwbGF0
Zm9ybUdhbWVwYWREaXNjb25uZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZE1hbmFn
ZXI6Om1ha2VHYW1lcGFkVmlzaWJsZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6Om9iamVjdFN0b3Jl
TmFtZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OnRyYW5zYWN0aW9u
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmg6CisgICAgICAgIChX
ZWJDb3JlOjpJREJLZXlEYXRhOjppc0RlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YUhhc2g6Omhhc2gpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6aGFzaCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uOjpvYmplY3RTdG9yZU5hbWVzIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlh
Y29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFD
b250cm9sc0hvc3Q6OnNob3dNZWRpYUNvbnRyb2xzQ29udGV4dE1lbnUpOgorICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTb3VyY2U6OmFjdGl2ZVJhbmdlcyBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNv
dXJjZS9TYW1wbGVNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRlY29kZU9yZGVyU2FtcGxlTWFw
OjpzaXplIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZl
ckxpc3QuaDoKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzOjpnZXRWb2ljZXMpOgorICAgICAgICAq
IE1vZHVsZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrLm1tOgorICAgICAg
ICAoLVtXZWJTcGVlY2hSZWNvZ25pemVyVGFza0ltcGwgY2FsbGJhY2tXaXRoVHJhbnNjcmlwdGlv
bnM6aXNGaW5hbDpdKToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hS
ZWNvZ25pemVyVGFza01vY2subW06CisgICAgICAgICgtW1dlYlNwZWVjaFJlY29nbml6ZXJUYXNr
TW9jayBhdWRpb1NhbXBsZXNBdmFpbGFibGU6XSk6CisgICAgICAgICogYW5pbWF0aW9uL0NTU1By
b3BlcnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kRnVuYyk6CisgICAg
ICAgICogYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmVzQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXI6OnVwZGF0ZUFuaW1hdGlvbnNB
bmRTZW5kRXZlbnRzKToKKyAgICAgICAgKiBhbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cHJvY2Vzc1Byb3BlcnR5SW5kZXhlZEtleWZyYW1lcyk6CisgICAg
ICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbjo6Q29udGVudEV4dGVu
c2lvbik6CisgICAgICAgICogY3NzL0NTU1ZhbHVlTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTVmFsdWVMaXN0OjpzaXplIGNvbnN0KToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjT3Bl
cmF0aW9uTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6
aG9pc3RDaGlsZHJlbldpdGhPcGVyYXRvcik6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJz
ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlckltcGw6OmNvbnN1bWVDb250
YWluZXJSdWxlKToKKyAgICAgICAgKiBkb20vRE9NU3RyaW5nTGlzdC5oOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NU3RyaW5nTGlzdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVN0cmlu
Z0xpc3Q6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpET01TdHJpbmdMaXN0OjpET01TdHJp
bmdMaXN0KToKKyAgICAgICAgKiBkb20vRXZlbnRQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50UGF0aDo6RXZlbnRQYXRoKToKKyAgICAgICAgKiBkb20vRnVsbHNjcmVlbk1hbmFnZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RnVsbHNjcmVlbk1hbmFnZXI6OmNhbmNlbEZ1bGxzY3Jl
ZW4pOgorICAgICAgICAqIGRvbS9Mb2FkYWJsZVNjcmlwdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMb2FkYWJsZVNjcmlwdDo6bm90aWZ5Q2xpZW50RmluaXNoZWQpOgorICAgICAgICAqIGRvbS9S
YWRpb0J1dHRvbkdyb3Vwcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYWRpb0J1dHRvbkdyb3Vw
OjptZW1iZXJzIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0RpcmVjdG9yeUZpbGVMaXN0Q3JlYXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0ZpbGVMaXN0KToKKyAgICAgICAgKiBodG1sL0hU
TUxTZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
OjpzYXZlTGFzdFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVu
dDo6c2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgpOgorICAgICAgICAqIGh0bWwvSW1hZ2VC
aXRtYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OmRldGFjaEJpdG1hcHMp
OgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0YWNoZWRT
aGFkZXJzKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpwcm9jZXNzTWV0YSk6
CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6aW5zZXJ0UGhvbmVOdW1iZXJMaW5rKToKKyAgICAgICAg
KiBodG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dERvY3VtZW50UGFyc2VyOjppbnNlcnRGYWtlUHJlRWxlbWVudCk6CisgICAgICAgICogbG9h
ZGVyL0NvbnRlbnRGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEZpbHRlcjo6
Y3JlYXRlKToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZU1hbmlm
ZXN0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQXBwbGljYXRpb25DYWNoZU1h
bmlmZXN0KToKKyAgICAgICAgKiBwYWdlL1Jlc2l6ZU9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlc2l6ZU9ic2VydmVyOjpkZWxpdmVyT2JzZXJ2YXRpb25zKToKKyAgICAgICAgKiBw
YWdlL1RleHRJbmRpY2F0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZUluZGlj
YXRvcik6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnBhcnNlU3ViUmVzb3VyY2VJbnRlZ3JpdHlJbnRvRGlnZXN0cyk6Cisg
ICAgICAgICogcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rmls
ZUNob29zZXI6OmNob29zZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUNob29zZXI6OmNo
b29zZUZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjaG9vc2VNZWRpYUZp
bGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9UaHJlYWRTYWZlRGF0YUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0RTUEtlcm5lbFByb2Nlc3Nvcjo6aW5pdGlhbGl6ZSk6CisgICAgICAg
ICogcGxhdGZvcm0vYXVkaW8vQXVkaW9SZXNhbXBsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9SZXNhbXBsZXI6OkF1ZGlvUmVzYW1wbGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRp
by9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1p
Y3NDb21wcmVzc29yS2VybmVsOjpzZXROdW1iZXJPZkNoYW5uZWxzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9NdWx0aUNoYW5uZWxSZXNhbXBsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TXVsdGlDaGFubmVsUmVzYW1wbGVyOjpNdWx0aUNoYW5uZWxSZXNhbXBsZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tOgorICAg
ICAgICAoV2ViQ29yZTo6UGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWQv
bWFjL0R1YWxzaG9jazNISURHYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkR1YWxzaG9j
azNISURHYW1lcGFkOjpEdWFsc2hvY2szSElER2FtZXBhZCk6CisgICAgICAgICogcGxhdGZvcm0v
Z2FtZXBhZC9tYWMvTG9naXRlY2hHYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxvZ2l0
ZWNoR2FtZXBhZDo6TG9naXRlY2hHYW1lcGFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFk
L21hYy9TdGFkaWFISURHYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0YWRpYUhJREdh
bWVwYWQ6OlN0YWRpYUhJREdhbWVwYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6YWRkUmVw
YWludFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGF0aFV0aWxpdGllczo6cGF0aHNXaXRoU2hyaW5rV3JhcHBl
ZFJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhVdGlsaXRpZXM6OnBhdGhXaXRoU2hyaW5r
V3JhcHBlZFJlY3RzRm9yT3V0bGluZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU291
cmNlQnVmZmVyUHJpdmF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2
YXRlOjpidWZmZXJlZFNhbXBsZXNGb3JUcmFja0lkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpleHRyYWN0S2V5SURzU2tkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVZGV3JhcHBlcjo6c2V0
UmVxdWVzdEZvcktleSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW06CisgICAgICAgIChX
ZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnVwZGF0
ZUtleVN0YXR1c2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyQVZGT2JqQzo6ZnJhbWVJbmZvcyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUGFyc2VyQVZGT2JqQy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlckFWRk9iakM6OmRpZFBhcnNlU3RyZWFtRGF0
YUFzQXNzZXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9y
bURhdGFDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnZhcmlh
dGlvbkF4ZXMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVTdHJpbmcpOgorICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlOjpzZXRTdXBwb3J0ZWRQ
cmVzZXRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMKToK
KyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3RyeUltcGw6OndyaXRlQmxvYnNUb1RlbXBvcmFy
eUZpbGVzRm9ySW5kZXhlZERCKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmRyYXdC
b3hTaWRlRnJvbVBhdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpjb25uZWN0Q2xpcHBp
bmdTdGFja0xheWVycyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkanVzdE92
ZXJmbG93U2Nyb2xsYmFyQ29udGFpbmVyTGF5ZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpwYWludEF0dGFjaG1lbnRUaXRsZUJh
Y2tncm91bmQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVNWR1N0cm9rZVBhaW50aW5nUmVzb3VyY2UpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RleHRDaHVuazo6U1ZHVGV4dENodW5rKToKKyAgICAgICAgKiBzdHlsZS9QYWdlUnVs
ZUNvbGxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UGFnZVJ1bGVDb2xsZWN0
b3I6Om1hdGNoUGFnZVJ1bGVzKToKKyAgICAgICAgKiBzdHlsZS9SdWxlU2V0QnVpbGRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldEJ1aWxkZXI6Ok1lZGlhUXVlcnlDb2xs
ZWN0b3I6OnBvcCk6CisgICAgICAgICogc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENvbnRhaW5l
ck5hbWUpOgorCiAyMDIyLTAyLTE5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbUmUtbGFuZGluZ10gUHJvdmlkZSBhIFdlYkNvcmUgc3Vic3BhY2VJbXBsRm9yIHRl
bXBsYXRlIHRvIG1ha2UgY29kZSBtb3JlIHJlYWRhYmxlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBjYzRiZmE1NGFh
NzMxMmRmZDliZDcwZTRjNzJlZTEzYzI1OTI1NWJhLi42MmJhMmIzNmYyMzYwZWIxYjA0NGRiYTRi
ZTY5NTM2Y2VjZWFkNmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDIyLTAyLTE4ICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4gdXAgLyBvcHRp
bWl6ZSBldmVuIG1vcmUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9ycworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2ODUyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL21lZGlh
L1JlbW90ZU1lZGlhUGxheWVyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVNZWRp
YVBsYXllclByb3h5OjpvdXRPZkJhbmRUcmFja1NvdXJjZXMpOgorICAgICAgICAqIEdQVVByb2Nl
c3MvbWVkaWEvUmVtb3RlU291cmNlQnVmZmVyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVTb3VyY2VCdWZmZXJQcm94eTo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0
aWFsaXphdGlvblNlZ21lbnQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVTb3VyY2VCdWZmZXJQ
cm94eTo6dXBkYXRlVHJhY2tJZHMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZp
ZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3Rpbmcp
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6ZmV0Y2hEaXNrQ2FjaGVFbnRyaWVzKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9Ob3RpZmljYXRpb25zL05ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2VyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya05vdGlmaWNhdGlvbk1hbmFnZXI6OmdldE9yaWdpbnNXaXRoUHVzaEFu
ZE5vdGlmaWNhdGlvblBlcm1pc3Npb25zKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U3RvcmFnZU1hbmFn
ZXI6OmFsbFN0b3JhZ2VBcmVhSWRlbnRpZmllcnMgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6VHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpvcmlnaW5zIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6VHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpz
dG9yYWdlQXJlYUlkZW50aWZpZXJzIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNhY2hl
U3RvcmFnZTo6Q2FjaGU6OmZpbmlzaE9wZW5pbmcpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0
b3JhZ2U6OkNhY2hlOjprZXlzIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zdG9y
YWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U1FMaXRlU3RvcmFn
ZUFyZWE6OlNRTGl0ZVN0b3JhZ2VBcmVhKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQXJndW1l
bnRDb2RlcnMuaDoKKyAgICAgICAgKiBTaGFyZWQvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5h
dG9yUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94
eTo6c2hvd1BheW1lbnRVSSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9u
LmNwcDoKKyAgICAgICAgKEFQSTo6TmF2aWdhdGlvbjo6TmF2aWdhdGlvbik6CisgICAgICAgIChB
UEk6Om1fY2xpZW50TmF2aWdhdGlvbkFjdGl2aXR5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvV0tTaGFyZVNoZWV0Lm1tOgorICAgICAgICAoYXBwZW5kRmlsZXNBc1NoYXJlYWJsZVVSTHMp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXN0b3JlQXBwSGlnaGxpZ2h0c0FuZFNjcm9sbFRv
SW5kZXgpOgorICAgICAgICAqIFVJUHJvY2Vzcy9GcmFtZUxvYWRTdGF0ZS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkZyYW1lTG9hZFN0YXRlOjpkaWRGaW5pc2hMb2FkKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2Vzcyk6
CisgICAgICAgICogVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJv
eHk6OnBhcmFtZXRlcnMgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNh
dGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkF1dGhlbnRp
Y2F0b3JNYW5hZ2VyOjpzdGFydERpc2NvdmVyeSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkJh
Y2tGb3J3YXJkTGlzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6
cmVtb3ZlQWxsSXRlbXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OmNs
ZWFyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cmVtb3ZlUHJvY2Vzc0Zyb21PcmlnaW5DYWNoZVNl
dCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6cHJvY2Vzc0RpZFRlcm1pbmF0ZU9yRmFpbGVkVG9MYXVu
Y2gpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhQW5kQXBwbHkp
OgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvaW9zL1RleHRDaGVja2VySU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpU
ZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAqIFVJUHJvY2Vzcy9p
b3MvV0tBY3Rpb25TaGVldEFzc2lzdGFudC5tbToKKyAgICAgICAgKC1bV0tBY3Rpb25TaGVldEFz
c2lzdGFudCBwcmVzZW50YXRpb25SZWN0Rm9yRWxlbWVudFVzaW5nQ2xvc2VzdEluZGljYXRlZFJl
Y3RdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFjLm1tOgorICAgICAg
ICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUGF5bWVudENvb3JkaW5hdG9yOjpzaG93UGF5bWVudFVJKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OnNldEZpbGVzRm9ySW5w
dXRGaWxlVXBsb2FkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRp
YVBsYXllck1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVNZWRpYVBsYXllck1h
bmFnZXI6OmNyZWF0ZVJlbW90ZU1lZGlhUGxheWVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQ
VS9tZWRpYS9Tb3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
U291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZTo6dXBkYXRlVHJhY2tJZHMpOgorICAgICAgICAoV2Vi
S2l0OjpTb3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlOjpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVj
ZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvd2Vi
cnRjL0xpYldlYlJUQ0NvZGVjcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxpYldlYlJUQ0NvZGVj
czo6Y3JlYXRlRW5jb2Rlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1Nlc3Npb25TdGF0ZUNvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2ViS2l0Ojp0
b0ZyYW1lU3RhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRGV2
aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkRl
dmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXI6OmRldmljZU9yaWVudGF0aW9uQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXI6OmRl
dmljZU1vdGlvbkNoYW5nZWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViUGFzdGVib2FyZE92ZXJyaWRlcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhc3RlYm9h
cmRPdmVycmlkZXM6Om92ZXJyaWRkZW5UeXBlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJTcGVlY2hTeW50aGVzaXNDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJTcGVlY2hTeW50aGVzaXNDbGllbnQ6OnZvaWNlTGlzdCk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RmluZENv
bnRyb2xsZXI6OmZpbmRTdHJpbmdNYXRjaGVzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
Rm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpkcmF3UmVjdCk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjb25zdW1l
U2FuZGJveEV4dGVuc2lvbnMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aGFuZGxlU2VsZWN0aW9uU2Vy
dmljZUNsaWNrKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpmZXRjaFdlYnNpdGVEYXRhKToKKwogMjAyMi0wMi0xOSAg
VGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBtYWNDYXRh
bHlzdDogV0tXZWJWaWV3IGNyYXNoZXMgd2hlbmV2ZXIgdGhlIHZpZXcgZnJhbWUgY2hhbmdlcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L1dvcmtRdWV1ZS5jcHAKaW5kZXggOWUxMDZlMzk0ZDNmNDRkMmMyNWZjM2NhMTUzNTQwZTUyMDRj
YjM1Yi4uODY0MDZmMzg4NDM3MTRjYjI1NWMzNGVhZTNmOTE4MWRhYmE1OGUzOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Xb3Jr
UXVldWUuY3BwCkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBDb25jdXJyZW50V29ya1F1ZXVlOjph
cHBseShzaXplX3QgaXRlcmF0aW9ucywgV1RGOjpGdW5jdGlvbjx2b2lkKHNpemVfdCBpbmQKIAog
ICAgICAgICAgICAgbV93b3JrZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodGhyZWFkQ291bnQp
OwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRocmVhZENvdW50OyArK2kp
IHsKLSAgICAgICAgICAgICAgICBtX3dvcmtlcnMuYXBwZW5kKFRocmVhZDo6Y3JlYXRlKCJUaHJl
YWRQb29sIFdvcmtlciIsIFt0aGlzXSB7CisgICAgICAgICAgICAgICAgbV93b3JrZXJzLnVuY2hl
Y2tlZEFwcGVuZChUaHJlYWQ6OmNyZWF0ZSgiVGhyZWFkUG9vbCBXb3JrZXIiLCBbdGhpc10gewog
ICAgICAgICAgICAgICAgICAgICB0aHJlYWRCb2R5KCk7CiAgICAgICAgICAgICAgICAgfSkpOwog
ICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvY2YvTGFuZ3VhZ2VDRi5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi9jZi9MYW5ndWFnZUNGLmNwcAppbmRleCBiYmMxZWY2ZjRlZmUw
MzA1OWNlNTUxMzFlMDhjMTAzMzIyNDg4ZTU2Li5jMDRjNTViYzYwM2QyODFkMGNhMzg5MjBlYmE4
Yzc5ZTVlNjkyOTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9jZi9MYW5ndWFnZUNGLmNw
cAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9jZi9MYW5ndWFnZUNGLmNwcApAQCAtMTAyLDkgKzEwMiwx
MCBAQCBWZWN0b3I8U3RyaW5nPiBwbGF0Zm9ybVVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoU2hvdWxk
TWluaW1pemVMYW5ndWFnZXMgc2hvdWxkTWluaQogICAgICAgICByZXR1cm4geyAiZW4iX3MgfTsK
IAogICAgIFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlczsKKyAgICBsYW5ndWFnZXMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShwbGF0Zm9ybUxhbmd1YWdlc0NvdW50KTsKICAgICBmb3IgKENGSW5kZXgg
aSA9IDA7IGkgPCBwbGF0Zm9ybUxhbmd1YWdlc0NvdW50OyBpKyspIHsKICAgICAgICAgYXV0byBw
bGF0Zm9ybUxhbmd1YWdlID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGQXJyYXlHZXRWYWx1
ZUF0SW5kZXgocGxhdGZvcm1MYW5ndWFnZXMuZ2V0KCksIGkpKTsKLSAgICAgICAgbGFuZ3VhZ2Vz
LmFwcGVuZChodHRwU3R5bGVMYW5ndWFnZUNvZGUocGxhdGZvcm1MYW5ndWFnZSwgc2hvdWxkTWlu
aW1pemVMYW5ndWFnZXMpKTsKKyAgICAgICAgbGFuZ3VhZ2VzLnVuY2hlY2tlZEFwcGVuZChodHRw
U3R5bGVMYW5ndWFnZUNvZGUocGxhdGZvcm1MYW5ndWFnZSwgc2hvdWxkTWluaW1pemVMYW5ndWFn
ZXMpKTsKICAgICB9CiAKICAgICBMT0dfV0lUSF9TVFJFQU0oTGFuZ3VhZ2UsIHN0cmVhbSA8PCAi
QWZ0ZXIgcGFzc2luZyB0aHJvdWdoIGh0dHBTdHlsZUxhbmd1YWdlQ29kZTogIiA8PCBsYW5ndWFn
ZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXltZW50
Q29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXltZW50
Q29vcmRpbmF0b3IuY3BwCmluZGV4IDFhMzI3YTk0YjBiNzFkNGVjNzVlYWNjOGQ0YWQ3OGE5MWI5
ZmY2ODUuLjRhOTQzMjI0OWQ1MmQ1MWQxNDdiODZlNTcwOGQ1MTg4OGJhNjRmNTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29yZGluYXRv
ci5jcHAKQEAgLTEwMSwxMSArMTAxLDEwIEBAIGJvb2wgUGF5bWVudENvb3JkaW5hdG9yOjpiZWdp
blBheW1lbnRTZXNzaW9uKERvY3VtZW50JiBkb2N1bWVudCwgUGF5bWVudFNlc3Npb24mCiB7CiAg
ICAgQVNTRVJUKCFtX2FjdGl2ZVNlc3Npb24pOwogCi0gICAgVmVjdG9yPFVSTD4gbGlua0ljb25V
UkxzOwotICAgIGZvciAoYXV0byYgaWNvbiA6IExpbmtJY29uQ29sbGVjdG9yIHsgZG9jdW1lbnQg
fS5pY29uc09mVHlwZXMoeyBMaW5rSWNvblR5cGU6OlRvdWNoSWNvbiwgTGlua0ljb25UeXBlOjpU
b3VjaFByZWNvbXBvc2VkSWNvbiB9KSkKLSAgICAgICAgbGlua0ljb25VUkxzLmFwcGVuZChpY29u
LnVybCk7Ci0KLSAgICBhdXRvIHNob3dQYXltZW50VUkgPSBtX2NsaWVudC5zaG93UGF5bWVudFVJ
KGRvY3VtZW50LnVybCgpLCBsaW5rSWNvblVSTHMsIHBheW1lbnRSZXF1ZXN0KTsKKyAgICBhdXRv
IGxpbmtJY29uVVJMcyA9IExpbmtJY29uQ29sbGVjdG9yIHsgZG9jdW1lbnQgfS5pY29uc09mVHlw
ZXMoeyBMaW5rSWNvblR5cGU6OlRvdWNoSWNvbiwgTGlua0ljb25UeXBlOjpUb3VjaFByZWNvbXBv
c2VkSWNvbiB9KS5tYXAoW10oYXV0byYgaWNvbikgeworICAgICAgICByZXR1cm4gaWNvbi51cmw7
CisgICAgfSk7CisgICAgYXV0byBzaG93UGF5bWVudFVJID0gbV9jbGllbnQuc2hvd1BheW1lbnRV
SShkb2N1bWVudC51cmwoKSwgV1RGTW92ZShsaW5rSWNvblVSTHMpLCBwYXltZW50UmVxdWVzdCk7
CiAgICAgUEFZTUVOVF9DT09SRElOQVRPUl9SRUxFQVNFX0xPRygiYmVnaW5QYXltZW50U2Vzc2lv
bigpIC0+ICVkIiwgc2hvd1BheW1lbnRVSSk7CiAgICAgaWYgKCFzaG93UGF5bWVudFVJKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Fw
cGxlcGF5L2NvY29hL1BheW1lbnRNZXRob2RDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvYXBwbGVwYXkvY29jb2EvUGF5bWVudE1ldGhvZENvY29hLm1tCmluZGV4IDc2NTNkZTU0YWY1
MzlmMjU2MWY0MjIzNmQzMGVjNjFhYjU4MDNkZDUuLjM3NWU1M2Q2ZDRmZGRjODg4ZjMyZTA0ZTI4
M2E3ZGIwNDExM2QwNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVw
YXkvY29jb2EvUGF5bWVudE1ldGhvZENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvYXBwbGVwYXkvY29jb2EvUGF5bWVudE1ldGhvZENvY29hLm1tCkBAIC0xMDEsMTEgKzEwMSw4
IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFwcGxlUGF5UGF5bWVudE1ldGhvZDo6VHlwZT4gY29u
dmVydChQS1BheW1lbnRNZXRob2RUeXBlIHBhCiAjaWYgSEFWRShQQVNTS0lUX1BBWU1FTlRfTUVU
SE9EX0JJTExJTkdfQUREUkVTUykKIHN0YXRpYyB2b2lkIGNvbnZlcnQoQ05MYWJlbGVkVmFsdWU8
Q05Qb3N0YWxBZGRyZXNzKj4gKnBvc3RhbEFkZHJlc3MsIEFwcGxlUGF5UGF5bWVudENvbnRhY3Qg
JnJlc3VsdCkKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiBhZGRyZXNzTGluZTsKLSAgICBpZiAoTlNT
dHJpbmcgKnN0cmVldCA9IHBvc3RhbEFkZHJlc3MudmFsdWUuc3RyZWV0KSB7Ci0gICAgICAgIGFk
ZHJlc3NMaW5lLmFwcGVuZChzdHJlZXQpOwotICAgICAgICByZXN1bHQuYWRkcmVzc0xpbmVzID0g
V1RGTW92ZShhZGRyZXNzTGluZSk7Ci0gICAgfQorICAgIGlmIChOU1N0cmluZyAqc3RyZWV0ID0g
cG9zdGFsQWRkcmVzcy52YWx1ZS5zdHJlZXQpCisgICAgICAgIHJlc3VsdC5hZGRyZXNzTGluZXMg
PSBWZWN0b3IgeyBTdHJpbmcgeyBzdHJlZXQgfSB9OwogICAgIHJlc3VsdC5zdWJMb2NhbGl0eSA9
IHBvc3RhbEFkZHJlc3MudmFsdWUuc3ViTG9jYWxpdHk7CiAgICAgcmVzdWx0LmxvY2FsaXR5ID0g
cG9zdGFsQWRkcmVzcy52YWx1ZS5jaXR5OwogICAgIHJlc3VsdC5zdWJBZG1pbmlzdHJhdGl2ZUFy
ZWEgPSBwb3N0YWxBZGRyZXNzLnZhbHVlLnN1YkFkbWluaXN0cmF0aXZlQXJlYTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNoZS5jcHAKaW5kZXggNDlmMzk4YWFmZWYzN2NkNWU4
ZjhlYjI0NGQ0ZTExZjM5ZjJhOGNkMy4uMmQ0NmQxY2RiYzcxN2YzYzkyOTllZmE4NjNhNTQ5MjYz
ODNhZjVkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNo
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNoZS5jcHAKQEAg
LTUxNSwxMCArNTE1LDggQEAgUmVjb3JkIERPTUNhY2hlOjp0b0Nvbm5lY3Rpb25SZWNvcmQoY29u
c3QgRmV0Y2hSZXF1ZXN0JiByZXF1ZXN0LCBGZXRjaFJlc3BvbnNlJgogCiB2b2lkIERPTUNhY2hl
OjpiYXRjaFB1dE9wZXJhdGlvbihjb25zdCBGZXRjaFJlcXVlc3QmIHJlcXVlc3QsIEZldGNoUmVz
cG9uc2UmIHJlc3BvbnNlLCBET01DYWNoZUVuZ2luZTo6UmVzcG9uc2VCb2R5JiYgcmVzcG9uc2VC
b2R5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEV4Y2VwdGlvbk9yPHZvaWQ+JiYpPiYmIGNhbGxi
YWNrKQogewotICAgIFZlY3RvcjxSZWNvcmQ+IHJlY29yZHM7Ci0gICAgcmVjb3Jkcy5hcHBlbmQo
dG9Db25uZWN0aW9uUmVjb3JkKHJlcXVlc3QsIHJlc3BvbnNlLCBXVEZNb3ZlKHJlc3BvbnNlQm9k
eSkpKTsKLQotICAgIGJhdGNoUHV0T3BlcmF0aW9uKFdURk1vdmUocmVjb3JkcyksIFdURk1vdmUo
Y2FsbGJhY2spKTsKKyAgICBhdXRvIHJlY29yZCA9IHRvQ29ubmVjdGlvblJlY29yZChyZXF1ZXN0
LCByZXNwb25zZSwgV1RGTW92ZShyZXNwb25zZUJvZHkpKTsKKyAgICBiYXRjaFB1dE9wZXJhdGlv
bih7IFdURk1vdmUocmVjb3JkKSB9LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQgRE9N
Q2FjaGU6OmJhdGNoUHV0T3BlcmF0aW9uKFZlY3RvcjxSZWNvcmQ+JiYgcmVjb3JkcywgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChFeGNlcHRpb25Pcjx2b2lkPiYmKT4mJiBjYWxsYmFjaykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmNwcAppbmRleCA2OTY5ZTBiNTAzYTg3
ZGQwMzg1ZTE4MzkwODg0NjcwZmVhMDRjMjY3Li41ODNmOWM4NTU1NjcxNzhjY2U3MmNhZDQ0Nzky
NGNmOGJjM2M0ZTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQv
R2FtZXBhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQu
Y3BwCkBAIC00Myw4ICs0Myw5IEBAIEdhbWVwYWQ6OkdhbWVwYWQoY29uc3QgUGxhdGZvcm1HYW1l
cGFkJiBwbGF0Zm9ybUdhbWVwYWQpCiAgICAgLCBtX2F4ZXMocGxhdGZvcm1HYW1lcGFkLmF4aXNW
YWx1ZXMoKS5zaXplKCksIDAuMCkKIHsKICAgICB1bnNpZ25lZCBidXR0b25Db3VudCA9IHBsYXRm
b3JtR2FtZXBhZC5idXR0b25WYWx1ZXMoKS5zaXplKCk7CisgICAgbV9idXR0b25zLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoYnV0dG9uQ291bnQpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBidXR0b25Db3VudDsgKytpKQotICAgICAgICBtX2J1dHRvbnMuYXBwZW5kKEdhbWVwYWRCdXR0
b246OmNyZWF0ZSgpKTsKKyAgICAgICAgbV9idXR0b25zLnVuY2hlY2tlZEFwcGVuZChHYW1lcGFk
QnV0dG9uOjpjcmVhdGUoKSk7CiB9CiAKIEdhbWVwYWQ6On5HYW1lcGFkKCkgPSBkZWZhdWx0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAK
aW5kZXggY2MzNzQ4NThjZmVhMWIyNDRjMDRiZDQxYjI5OTQ4ZDI5YWVhMzAzMC4uNTQzZmU0ODkx
NjdlN2NlMTNkNDk3NjhmYzdlMTVmMzRkMDgyMzZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZE1hbmFnZXIuY3BwCkBAIC03OSwxNCArNzksMTAgQEAg
dm9pZCBHYW1lcGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkQ29ubmVjdGVkKFBsYXRmb3JtR2Ft
ZXBhZCYgcGxhdGZvcm1HYW1lcGFkLAogCiB2b2lkIEdhbWVwYWRNYW5hZ2VyOjpwbGF0Zm9ybUdh
bWVwYWREaXNjb25uZWN0ZWQoUGxhdGZvcm1HYW1lcGFkJiBwbGF0Zm9ybUdhbWVwYWQpCiB7Ci0g
ICAgVmVjdG9yPFdlYWtQdHI8RE9NV2luZG93Pj4gd2Vha1dpbmRvd3M7Ci0gICAgZm9yIChhdXRv
KiBkb21XaW5kb3cgOiBtX2RvbVdpbmRvd3MpCi0gICAgICAgIHdlYWtXaW5kb3dzLmFwcGVuZCgq
ZG9tV2luZG93KTsKLQogICAgIEhhc2hTZXQ8TmF2aWdhdG9yR2FtZXBhZCo+IG5vdGlmaWVkTmF2
aWdhdG9yczsKIAogICAgIC8vIEhhbmRsZSB0aGUgZGlzY29ubmVjdCBmb3IgYWxsIERPTVdpbmRv
d3Mgd2l0aCBldmVudCBsaXN0ZW5lcnMgYW5kIHRoZWlyIE5hdmlnYXRvcnMuCi0gICAgZm9yIChh
dXRvJiB3aW5kb3cgOiB3ZWFrV2luZG93cykgeworICAgIGZvciAoYXV0byYgd2luZG93IDogY29w
eVRvVmVjdG9yT2Y8V2Vha1B0cjxET01XaW5kb3c+PihtX2RvbVdpbmRvd3MpKSB7CiAgICAgICAg
IC8vIEV2ZW50IGRpc3BhdGNoIG1pZ2h0IGhhdmUgbWFkZSB0aGlzIHdpbmRvdyBnbyBhd2F5Lgog
ICAgICAgICBpZiAoIXdpbmRvdykKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTQzLDExICsx
MzksNyBAQCB2b2lkIEdhbWVwYWRNYW5hZ2VyOjptYWtlR2FtZXBhZFZpc2libGUoUGxhdGZvcm1H
YW1lcGFkJiBwbGF0Zm9ybUdhbWVwYWQsIEhhc2hTZQogICAgIGZvciAoYXV0byogbmF2aWdhdG9y
IDogbmF2aWdhdG9yU2V0KQogICAgICAgICBuYXZpZ2F0b3ItPmdhbWVwYWRDb25uZWN0ZWQocGxh
dGZvcm1HYW1lcGFkKTsKIAotICAgIFZlY3RvcjxXZWFrUHRyPERPTVdpbmRvdz4+IHdlYWtXaW5k
b3dzOwotICAgIGZvciAoYXV0byogZG9tV2luZG93IDogbV9kb21XaW5kb3dzKQotICAgICAgICB3
ZWFrV2luZG93cy5hcHBlbmQoKmRvbVdpbmRvdyk7Ci0KLSAgICBmb3IgKGF1dG8mIHdpbmRvdyA6
IHdlYWtXaW5kb3dzKSB7CisgICAgZm9yIChhdXRvJiB3aW5kb3cgOiBjb3B5VG9WZWN0b3JPZjxX
ZWFrUHRyPERPTVdpbmRvdz4+KG1fZG9tV2luZG93cykpIHsKICAgICAgICAgLy8gRXZlbnQgZGlz
cGF0Y2ggbWlnaHQgaGF2ZSBtYWRlIHRoaXMgd2luZG93IGdvIGF3YXkuCiAgICAgICAgIGlmICgh
d2luZG93KQogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKaW5kZXggN2FhNjMyYjdlYzA0N2JlNDYwOGI1
MWEwOTRlYTFhNGU1N2EyNjI5Yi4uMGJlOGJkMTE2ZWMyMzYxMjNjNzE1MzJkN2VlMzZjNTZlOTk2
NTQ5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlLmNwcApAQCAtMTAyLDkgKzEwMiw3IEBAIFJlZjxET01TdHJpbmdMaXN0PiBJREJEYXRhYmFz
ZTo6b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNhbkN1cnJlbnRUaHJl
YWRBY2Nlc3NUaHJlYWRMb2NhbERhdGEob3JpZ2luVGhyZWFkKCkpKTsKIAotICAgIGF1dG8gb2Jq
ZWN0U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwotICAgIGZvciAoYXV0byYg
bmFtZSA6IG1faW5mby5vYmplY3RTdG9yZU5hbWVzKCkpCi0gICAgICAgIG9iamVjdFN0b3JlTmFt
ZXMtPmFwcGVuZChuYW1lKTsKKyAgICBhdXRvIG9iamVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdM
aXN0OjpjcmVhdGUobV9pbmZvLm9iamVjdFN0b3JlTmFtZXMoKSk7CiAgICAgb2JqZWN0U3RvcmVO
YW1lcy0+c29ydCgpOwogICAgIHJldHVybiBvYmplY3RTdG9yZU5hbWVzOwogfQpAQCAtMTc1LDE5
ICsxNzMsMTYgQEAgRXhjZXB0aW9uT3I8UmVmPElEQlRyYW5zYWN0aW9uPj4gSURCRGF0YWJhc2U6
OnRyYW5zYWN0aW9uKFN0cmluZ09yVmVjdG9yT2ZTdHJpbmcKICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiRmFpbGVkIHRvIGV4ZWN1dGUgJ3RyYW5zYWN0aW9u
JyBvbiAnSURCRGF0YWJhc2UnOiBUaGUgZGF0YWJhc2UgY29ubmVjdGlvbiBpcyBjbG9zaW5nLiJf
cyB9OwogCiAgICAgVmVjdG9yPFN0cmluZz4gb2JqZWN0U3RvcmVzOwotICAgIGlmIChzdGQ6Omhv
bGRzX2FsdGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+PihzdG9yZU5hbWVzKSkKKyAgICBpZiAoc3Rk
Ojpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oc3RvcmVOYW1lcykpIHsKICAgICAg
ICAgb2JqZWN0U3RvcmVzID0gV1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8U3RyaW5nPj4oc3RvcmVO
YW1lcykpOwotICAgIGVsc2UKKyAgICAgICAgLy8gSXQgaXMgdmFsaWQgZm9yIGphdmFzY3JpcHQg
dG8gcGFzcyBpbiBhIGxpc3Qgb2Ygb2JqZWN0IHN0b3JlIG5hbWVzIHdpdGggdGhlIHNhbWUgbmFt
ZSBsaXN0ZWQgdHdpY2UsCisgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gcHV0IHRoZW0gYWxsIGlu
IGEgc2V0IHRvIGdldCBhIHVuaXF1ZSBsaXN0LgorICAgICAgICBIYXNoU2V0PFN0cmluZz4gb2Jq
ZWN0U3RvcmVTZXQ7CisgICAgICAgIG9iamVjdFN0b3JlU2V0LmFkZChvYmplY3RTdG9yZXMuYmVn
aW4oKSwgb2JqZWN0U3RvcmVzLmVuZCgpKTsKKyAgICAgICAgb2JqZWN0U3RvcmVzID0gY29weVRv
VmVjdG9yKG9iamVjdFN0b3JlU2V0KTsKKyAgICB9IGVsc2UKICAgICAgICAgb2JqZWN0U3RvcmVz
LmFwcGVuZChXVEZNb3ZlKHN0ZDo6Z2V0PFN0cmluZz4oc3RvcmVOYW1lcykpKTsKIAotICAgIC8v
IEl0IGlzIHZhbGlkIGZvciBqYXZhc2NyaXB0IHRvIHBhc3MgaW4gYSBsaXN0IG9mIG9iamVjdCBz
dG9yZSBuYW1lcyB3aXRoIHRoZSBzYW1lIG5hbWUgbGlzdGVkIHR3aWNlLAotICAgIC8vIHNvIHdl
IG5lZWQgdG8gcHV0IHRoZW0gYWxsIGluIGEgc2V0IHRvIGdldCBhIHVuaXF1ZSBsaXN0LgotICAg
IEhhc2hTZXQ8U3RyaW5nPiBvYmplY3RTdG9yZVNldDsKLSAgICBmb3IgKGF1dG8mIG9iamVjdFN0
b3JlIDogb2JqZWN0U3RvcmVzKQotICAgICAgICBvYmplY3RTdG9yZVNldC5hZGQob2JqZWN0U3Rv
cmUpOwotCi0gICAgb2JqZWN0U3RvcmVzID0gY29weVRvVmVjdG9yKG9iamVjdFN0b3JlU2V0KTsK
LQogICAgIGZvciAoYXV0byYgb2JqZWN0U3RvcmVOYW1lIDogb2JqZWN0U3RvcmVzKSB7CiAgICAg
ICAgIGlmIChtX2luZm8uaGFzT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVOYW1lKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5
RGF0YS5oCmluZGV4IDRiOTc4NTM2OWQxOTBhNmIxOTY5MWQxMzdhZTE1NjdlNWMzNzk1ZDkuLjAy
ZjczMzQwM2YzYWQzMzRmZjI3OTUwMzdmYWU3ZjY1NWE2N2E3NDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAog
I2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgPHZhcmlhbnQ+CisjaW5jbHVkZSA8d3RmL0hh
c2hlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRTZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdIYXNoLmg+CiAKQEAgLTExNyw0MSArMTE4LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlcik7CiAgICAgfQogCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Ci0g
ICAgewotICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IGhhc2hDb2RlczsKLSAgICAgICAgaGFzaENv
ZGVzLmFwcGVuZChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV90eXBlKSk7Ci0gICAgICAgIGhhc2hD
b2Rlcy5hcHBlbmQobV9pc051bGwgPyAxIDogMCk7Ci0gICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQo
bV9pc0RlbGV0ZWRWYWx1ZSA/IDEgOiAwKTsKLSAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKLSAg
ICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OkludmFsaWQ6Ci0gICAgICAgIGNhc2UgSW5k
ZXhlZERCOjpLZXlUeXBlOjpNYXg6Ci0gICAgICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpN
aW46Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6
Ok51bWJlcjoKLSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OkRhdGU6Ci0gICAgICAg
ICAgICBoYXNoQ29kZXMuYXBwZW5kKFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoZG91
YmxlKT4oJnN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1ZSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6U3RyaW5nOgotICAgICAgICAgICAgaGFz
aENvZGVzLmFwcGVuZChTdHJpbmdIYXNoOjpoYXNoKHN0ZDo6Z2V0PFN0cmluZz4obV92YWx1ZSkp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6
QmluYXJ5OiB7Ci0gICAgICAgICAgICBhdXRvKiBkYXRhID0gc3RkOjpnZXQ8VGhyZWFkU2FmZURh
dGFCdWZmZXI+KG1fdmFsdWUpLmRhdGEoKTsKLSAgICAgICAgICAgIGlmICghZGF0YSkKLSAgICAg
ICAgICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKDApOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KGRhdGEt
PmRhdGEoKSwgZGF0YS0+c2l6ZSgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6QXJyYXk6Ci0gICAgICAgICAgICBmb3Ig
KGF1dG8mIGtleSA6IHN0ZDo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSkpCi0gICAg
ICAgICAgICAgICAgaGFzaENvZGVzLmFwcGVuZChrZXkuaGFzaCgpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9y
eShoYXNoQ29kZXMuZGF0YSgpLCBoYXNoQ29kZXMuc2l6ZSgpICogc2l6ZW9mKHVuc2lnbmVkKSk7
Ci0gICAgfQotCiAgICAgU3RyaW5nIHN0cmluZygpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NF
UlQobV90eXBlID09IEluZGV4ZWREQjo6S2V5VHlwZTo6U3RyaW5nKTsKQEAgLTE5Niw4ICsxNjIs
MzUgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnZhcmlhbnQ8VmVjdG9yPElEQktleURhdGE+LCBTdHJp
bmcsIGRvdWJsZSwgVGhyZWFkU2FmZURhdGFCdWZmZXI+IG1fdmFsdWU7CiB9OwogCitpbmxpbmUg
dm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEpCit7Cisg
ICAgYWRkKGhhc2hlciwga2V5RGF0YS50eXBlKCkpOworICAgIGFkZChoYXNoZXIsIGtleURhdGEu
aXNOdWxsKCkpOworICAgIHN3aXRjaCAoa2V5RGF0YS50eXBlKCkpIHsKKyAgICBjYXNlIEluZGV4
ZWREQjo6S2V5VHlwZTo6SW52YWxpZDoKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TWF4
OgorICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpNaW46CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpOdW1iZXI6CisgICAgICAgIGFkZChoYXNoZXIsIGtl
eURhdGEubnVtYmVyKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5
VHlwZTo6RGF0ZToKKyAgICAgICAgYWRkKGhhc2hlciwga2V5RGF0YS5kYXRlKCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6U3RyaW5nOgorICAgICAgICBh
ZGQoaGFzaGVyLCBrZXlEYXRhLnN0cmluZygpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJ
bmRleGVkREI6OktleVR5cGU6OkJpbmFyeToKKyAgICAgICAgYWRkKGhhc2hlciwga2V5RGF0YS5i
aW5hcnkoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpB
cnJheToKKyAgICAgICAgYWRkKGhhc2hlciwga2V5RGF0YS5hcnJheSgpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCiBzdHJ1Y3QgSURCS2V5RGF0YUhhc2ggewotICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IElEQktleURhdGEmIGEpIHsgcmV0dXJuIGEuaGFzaCgpOyB9CisgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgSURCS2V5RGF0YSYgYSkgeyByZXR1cm4gY29tcHV0
ZUhhc2goYSk7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBJREJLZXlEYXRhJiBhLCBj
b25zdCBJREJLZXlEYXRhJiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAppbmRl
eCAxNDM1MTQwYTVjYjRhMWExZDQwN2EyZGIyOWQxNWJkZjJkNTJjMGI2Li5jZTYzYzZhNTZiMTRk
NWJlMDMyMjU3MzcyNTMyMmI4MmYwZGRkZDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCkBAIC0xMjYsMTQgKzEyNiwxMSBA
QCBSZWY8RE9NU3RyaW5nTGlzdD4gSURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMoKSBjb25zdAog
ewogICAgIEFTU0VSVChjYW5DdXJyZW50VGhyZWFkQWNjZXNzVGhyZWFkTG9jYWxEYXRhKG1fdHJh
bnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSkpOwogCi0gICAgYXV0byBpbmRleE5h
bWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0KLSAgICBpZiAoIW1fZGVsZXRlZCkgewot
ICAgICAgICBmb3IgKGF1dG8mIG5hbWUgOiBtX2luZm8uaW5kZXhOYW1lcygpKQotICAgICAgICAg
ICAgaW5kZXhOYW1lcy0+YXBwZW5kKG5hbWUpOwotICAgICAgICBpbmRleE5hbWVzLT5zb3J0KCk7
Ci0gICAgfQorICAgIGlmIChtX2RlbGV0ZWQpCisgICAgICAgIHJldHVybiBET01TdHJpbmdMaXN0
OjpjcmVhdGUoKTsKIAorICAgIGF1dG8gaW5kZXhOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0
ZShtX2luZm8uaW5kZXhOYW1lcygpKTsKKyAgICBpbmRleE5hbWVzLT5zb3J0KCk7CiAgICAgcmV0
dXJuIGluZGV4TmFtZXM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAppbmRleCA2YzExMjFiNzMxMGY3MzdmN2I5NWJlY2Vl
ODQ1NGU2YWM1MGRmMmI2Li5jZTg2N2IxYjdlNmQ2ZjE1NDllY2Q3MjYxMjdkY2M3Njk5NWE5ZDA2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb24uY3BwCkBAIC0xMjEsMTIgKzEyMSw4IEBAIFJlZjxET01TdHJpbmdMaXN0PiBJREJUcmFu
c2FjdGlvbjo6b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNhbkN1cnJl
bnRUaHJlYWRBY2Nlc3NUaHJlYWRMb2NhbERhdGEobV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkKCkp
KTsKIAotICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+IG5hbWVzID0gaXNWZXJzaW9uQ2hhbmdlKCkg
PyBtX2RhdGFiYXNlLT5pbmZvKCkub2JqZWN0U3RvcmVOYW1lcygpIDogbV9pbmZvLm9iamVjdFN0
b3JlcygpOwotCi0gICAgUmVmPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMgPSBET01T
dHJpbmdMaXN0OjpjcmVhdGUoKTsKLSAgICBmb3IgKGF1dG8mIG5hbWUgOiBuYW1lcykKLSAgICAg
ICAgb2JqZWN0U3RvcmVOYW1lcy0+YXBwZW5kKG5hbWUpOwotCisgICAgYXV0byBuYW1lcyA9IGlz
VmVyc2lvbkNoYW5nZSgpID8gbV9kYXRhYmFzZS0+aW5mbygpLm9iamVjdFN0b3JlTmFtZXMoKSA6
IG1faW5mby5vYmplY3RTdG9yZXMoKTsKKyAgICBhdXRvIG9iamVjdFN0b3JlTmFtZXMgPSBET01T
dHJpbmdMaXN0OjpjcmVhdGUoV1RGTW92ZShuYW1lcykpOwogICAgIG9iamVjdFN0b3JlTmFtZXMt
PnNvcnQoKTsKICAgICByZXR1cm4gb2JqZWN0U3RvcmVOYW1lczsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3Qu
Y3BwCmluZGV4IDE5YTA2OWUyM2IzOWRiYjRhNzA2NWQ4ZGU3OGQ3ZWU0OTNjNjk4MTguLmI4MjVl
YzgwMDUxNDgwMjhlMmIwN2IxOWRjNzgzOTJhNDNhOGNiYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNw
cApAQCAtNTU1LDExICs1NTUsMTAgQEAgYm9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6c2hvd01lZGlh
Q29udHJvbHNDb250ZXh0TWVudShIVE1MRWxlbWVudCYgdGFyZ2V0LCBTdHJpbmcKIAogICAgIGlm
IChvcHRpb25zSlNPTk9iamVjdC0+Z2V0Qm9vbGVhbigiaW5jbHVkZUxhbmd1YWdlcyJfcykudmFs
dWVfb3IoZmFsc2UpKSB7CiAgICAgICAgIGlmIChhdXRvKiBhdWRpb1RyYWNrcyA9IG1lZGlhRWxl
bWVudC5hdWRpb1RyYWNrcygpOyBhdWRpb1RyYWNrcyAmJiBhdWRpb1RyYWNrcy0+bGVuZ3RoKCkg
PiAxKSB7Ci0gICAgICAgICAgICBWZWN0b3I8TWVudUl0ZW0+IGxhbmd1YWdlTWVudUl0ZW1zOwot
CiAgICAgICAgICAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBwYWdlLT5ncm91cCgpLmVu
c3VyZUNhcHRpb25QcmVmZXJlbmNlcygpOwotICAgICAgICAgICAgZm9yIChhdXRvJiBhdWRpb1Ry
YWNrIDogY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUoYXVkaW9UcmFj
a3MpKQotICAgICAgICAgICAgICAgIGxhbmd1YWdlTWVudUl0ZW1zLmFwcGVuZChjcmVhdGVNZW51
SXRlbShhdWRpb1RyYWNrLCBjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFjayhh
dWRpb1RyYWNrLmdldCgpKSwgYXVkaW9UcmFjay0+ZW5hYmxlZCgpKSk7CisgICAgICAgICAgICBh
dXRvIGxhbmd1YWdlTWVudUl0ZW1zID0gY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlz
dEZvck1lbnUoYXVkaW9UcmFja3MpLm1hcChbJl0oYXV0byYgYXVkaW9UcmFjaykgeworICAgICAg
ICAgICAgICAgIHJldHVybiBjcmVhdGVNZW51SXRlbShhdWRpb1RyYWNrLCBjYXB0aW9uUHJlZmVy
ZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFjayhhdWRpb1RyYWNrLmdldCgpKSwgYXVkaW9UcmFjay0+
ZW5hYmxlZCgpKTsKKyAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICBpZiAoIWxhbmd1YWdl
TWVudUl0ZW1zLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBpdGVtcy5hcHBlbmQoY3JlYXRl
U3VibWVudShXRUJfVUlfU1RSSU5HX0tFWSgiTGFuZ3VhZ2VzIiwgIkxhbmd1YWdlcyAoTWVkaWEg
Q29udHJvbHMgTWVudSkiLCAiTGFuZ3VhZ2VzIG1lZGlhIGNvbnRyb2xzIGNvbnRleHQgbWVudSB0
aXRsZSIpLCAiZ2xvYmUiX3MsIFdURk1vdmUobGFuZ3VhZ2VNZW51SXRlbXMpKSk7CkBAIC01Njgs
MTUgKzU2NywxMyBAQCBib29sIE1lZGlhQ29udHJvbHNIb3N0OjpzaG93TWVkaWFDb250cm9sc0Nv
bnRleHRNZW51KEhUTUxFbGVtZW50JiB0YXJnZXQsIFN0cmluZwogCiAgICAgaWYgKG9wdGlvbnNK
U09OT2JqZWN0LT5nZXRCb29sZWFuKCJpbmNsdWRlU3VidGl0bGVzIl9zKS52YWx1ZV9vcihmYWxz
ZSkpIHsKICAgICAgICAgaWYgKGF1dG8qIHRleHRUcmFja3MgPSBtZWRpYUVsZW1lbnQudGV4dFRy
YWNrcygpOyB0ZXh0VHJhY2tzICYmIHRleHRUcmFja3MtPmxlbmd0aCgpKSB7Ci0gICAgICAgICAg
ICBWZWN0b3I8TWVudUl0ZW0+IHN1YnRpdGxlTWVudUl0ZW1zOwotCiAgICAgICAgICAgICBhdXRv
JiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBwYWdlLT5ncm91cCgpLmVuc3VyZUNhcHRpb25QcmVmZXJl
bmNlcygpOwogICAgICAgICAgICAgYXV0byBzb3J0ZWRUZXh0VHJhY2tzID0gY2FwdGlvblByZWZl
cmVuY2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUodGV4dFRyYWNrcywgeyBUZXh0VHJhY2s6Oktp
bmQ6OlN1YnRpdGxlcywgVGV4dFRyYWNrOjpLaW5kOjpDYXB0aW9ucywgVGV4dFRyYWNrOjpLaW5k
OjpEZXNjcmlwdGlvbnMgfSk7CiAgICAgICAgICAgICBib29sIGFsbFRyYWNrc0Rpc2FibGVkID0g
bm90Rm91bmQgPT0gc29ydGVkVGV4dFRyYWNrcy5maW5kSWYoW10gKGNvbnN0IGF1dG8mIHRleHRU
cmFjaykgewogICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0VHJhY2stPm1vZGUoKSA9PSBUZXh0
VHJhY2s6Ok1vZGU6OlNob3dpbmc7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGJvb2wg
dXNlc0F1dG9tYXRpY1RyYWNrID0gY2FwdGlvblByZWZlcmVuY2VzLmNhcHRpb25EaXNwbGF5TW9k
ZSgpID09IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OkF1dG9tYXRpYyAmJiBhbGxUcmFja3NEaXNh
YmxlZDsKLSAgICAgICAgICAgIGZvciAoYXV0byYgdGV4dFRyYWNrIDogc29ydGVkVGV4dFRyYWNr
cykgeworICAgICAgICAgICAgYXV0byBzdWJ0aXRsZU1lbnVJdGVtcyA9IHNvcnRlZFRleHRUcmFj
a3MubWFwKFsmXShhdXRvJiB0ZXh0VHJhY2spIHsKICAgICAgICAgICAgICAgICBib29sIGNoZWNr
ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAoYWxsVHJhY2tzRGlzYWJsZWQgJiYgdGV4
dFRyYWNrID09ICZUZXh0VHJhY2s6OmNhcHRpb25NZW51T2ZmSXRlbSgpICYmIChjYXB0aW9uUHJl
ZmVyZW5jZXMuY2FwdGlvbkRpc3BsYXlNb2RlKCkgPT0gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6
Rm9yY2VkT25seSB8fCBjYXB0aW9uUHJlZmVyZW5jZXMuY2FwdGlvbkRpc3BsYXlNb2RlKCkgPT0g
Q2FwdGlvblVzZXJQcmVmZXJlbmNlczo6TWFudWFsKSkKICAgICAgICAgICAgICAgICAgICAgY2hl
Y2tlZCA9IHRydWU7CkBAIC01ODQsOCArNTgxLDggQEAgYm9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6
c2hvd01lZGlhQ29udHJvbHNDb250ZXh0TWVudShIVE1MRWxlbWVudCYgdGFyZ2V0LCBTdHJpbmcK
ICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoIXVzZXNBdXRvbWF0aWNUcmFjayAmJiB0ZXh0VHJhY2stPm1vZGUoKSA9PSBUZXh0VHJh
Y2s6Ok1vZGU6OlNob3dpbmcpCiAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIHN1YnRpdGxlTWVudUl0ZW1zLmFwcGVuZChjcmVhdGVNZW51SXRlbSh0
ZXh0VHJhY2ssIGNhcHRpb25QcmVmZXJlbmNlcy5kaXNwbGF5TmFtZUZvclRyYWNrKHRleHRUcmFj
ay5nZXQoKSksIGNoZWNrZWQpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1
cm4gY3JlYXRlTWVudUl0ZW0odGV4dFRyYWNrLCBjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5h
bWVGb3JUcmFjayh0ZXh0VHJhY2suZ2V0KCkpLCBjaGVja2VkKTsKKyAgICAgICAgICAgIH0pOwog
CiAgICAgICAgICAgICBpZiAoIXN1YnRpdGxlTWVudUl0ZW1zLmlzRW1wdHkoKSkKICAgICAgICAg
ICAgICAgICBpdGVtcy5hcHBlbmQoY3JlYXRlU3VibWVudShXRUJfVUlfU1RSSU5HX0tFWSgiU3Vi
dGl0bGVzIiwgIlN1YnRpdGxlcyAoTWVkaWEgQ29udHJvbHMgTWVudSkiLCAiU3VidGl0bGVzIG1l
ZGlhIGNvbnRyb2xzIGNvbnRleHQgbWVudSB0aXRsZSIpLCAiY2FwdGlvbnMuYnViYmxlIl9zLCBX
VEZNb3ZlKHN1YnRpdGxlTWVudUl0ZW1zKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcAppbmRleCA5MTI3NDdmNDA2YzI5NTk0OTk3
M2I1YmIxMzQ5ZGJjYTY3NDFjMTM1Li5hMmU2NThhOTJmOTk3ZDdmNGI0M2UxNzAzZjRhMGUwOTQ5
MTdiMGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01l
ZGlhU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01l
ZGlhU291cmNlLmNwcApAQCAtMTA1MSwxMCArMTA1MSw5IEBAIHZvaWQgTWVkaWFTb3VyY2U6Om9u
UmVhZHlTdGF0ZUNoYW5nZShSZWFkeVN0YXRlIG9sZFN0YXRlLCBSZWFkeVN0YXRlIG5ld1N0YXRl
KQogCiBWZWN0b3I8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVNvdXJjZTo6YWN0aXZlUmFuZ2Vz
KCkgY29uc3QKIHsKLSAgICBWZWN0b3I8UGxhdGZvcm1UaW1lUmFuZ2VzPiBhY3RpdmVSYW5nZXM7
Ci0gICAgZm9yIChhdXRvJiBzb3VyY2VCdWZmZXIgOiAqbV9hY3RpdmVTb3VyY2VCdWZmZXJzKQot
ICAgICAgICBhY3RpdmVSYW5nZXMuYXBwZW5kKHNvdXJjZUJ1ZmZlci0+YnVmZmVyZWRJbnRlcm5h
bCgpLnJhbmdlcygpKTsKLSAgICByZXR1cm4gYWN0aXZlUmFuZ2VzOworICAgIHJldHVybiBXVEY6
Om1hcCgqbV9hY3RpdmVTb3VyY2VCdWZmZXJzLCBbXShhdXRvJiBzb3VyY2VCdWZmZXIpIHsKKyAg
ICAgICAgcmV0dXJuIHNvdXJjZUJ1ZmZlci0+YnVmZmVyZWRJbnRlcm5hbCgpLnJhbmdlcygpOwor
ICAgIH0pOwogfQogCiBFeGNlcHRpb25PcjxSZWY8U291cmNlQnVmZmVyUHJpdmF0ZT4+IE1lZGlh
U291cmNlOjpjcmVhdGVTb3VyY2VCdWZmZXJQcml2YXRlKGNvbnN0IENvbnRlbnRUeXBlJiBpbmNv
bWluZ1R5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNl
L1NhbXBsZU1hcC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9TYW1wbGVN
YXAuaAppbmRleCBlYWY0OTMxNTk3ZDI2ODUyM2M2NjdiZDljZGNjNGNlYTY1NDMzNjk1Li5hZjFl
MTA0NTgxNzg3ZjE1ZjZmMWYzODViMjU3MjQ0NGQ4ODU5NWZhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1hcC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmgKQEAgLTkxLDYgKzkxLDcgQEAgcHVi
bGljOgogICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4g
bV9zYW1wbGVzLnJiZWdpbigpOyB9CiAgICAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1
cm4gbV9zYW1wbGVzLnJlbmQoKTsgfQogICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5yZW5kKCk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5zaXplKCk7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIGl0
ZXJhdG9yIGZpbmRTYW1wbGVXaXRoRGVjb2RlS2V5KGNvbnN0IEtleVR5cGUmKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBpdGVyYXRvciBmaW5kU2FtcGxlQWZ0ZXJEZWNvZGVLZXkoY29uc3QgS2V5VHlw
ZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3Vy
Y2VCdWZmZXJMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJj
ZUJ1ZmZlckxpc3QuaAppbmRleCBmYzZlMDczYWI5MGU3NmQxODE1Zjg4OTZiNmY2NjA5NmRmMmZk
ZGQ1Li5iZDZlM2I3N2M5ZDc0MzBmZWEyMTZlOGFlYWY4ZDEzM2JjMjY3YzFlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3Qu
aApAQCAtNDcsOCArNDcsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxTb3VyY2VCdWZmZXJM
aXN0PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogICAgIHZpcnR1YWwgflNvdXJj
ZUJ1ZmZlckxpc3QoKTsKIAotICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9saXN0LnNpemUoKTsgfQotICAgIFNvdXJjZUJ1ZmZlciogaXRlbSh1bnNpZ25lZCBsb25n
IGluZGV4KSBjb25zdCB7IHJldHVybiAoaW5kZXggPCBtX2xpc3Quc2l6ZSgpKSA/IG1fbGlzdFtp
bmRleF0uZ2V0KCkgOiBudWxscHRyOyB9CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gbV9saXN0LnNpemUoKTsgfQorCisgICAgU291cmNlQnVmZmVyKiBpdGVtKHVuc2lnbmVk
IGluZGV4KSBjb25zdCB7IHJldHVybiAoaW5kZXggPCBtX2xpc3Quc2l6ZSgpKSA/IG1fbGlzdFtp
bmRleF0uZ2V0KCkgOiBudWxscHRyOyB9CiAKICAgICB2b2lkIGFkZChSZWY8U291cmNlQnVmZmVy
PiYmKTsKICAgICB2b2lkIHJlbW92ZShTb3VyY2VCdWZmZXImKTsKQEAgLTU4LDYgKzU5LDkgQEAg
cHVibGljOgogCiAgICAgVmVjdG9yPFJlZlB0cjxTb3VyY2VCdWZmZXI+Pjo6aXRlcmF0b3IgYmVn
aW4oKSB7IHJldHVybiBtX2xpc3QuYmVnaW4oKTsgfQogICAgIFZlY3RvcjxSZWZQdHI8U291cmNl
QnVmZmVyPj46Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fbGlzdC5lbmQoKTsgfQorICAgIFZl
Y3RvcjxSZWZQdHI8U291cmNlQnVmZmVyPj46OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Qg
eyByZXR1cm4gbV9saXN0LmJlZ2luKCk7IH0KKyAgICBWZWN0b3I8UmVmUHRyPFNvdXJjZUJ1ZmZl
cj4+Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2xpc3QuZW5kKCk7IH0K
KyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KIAogICAg
IC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQogICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50
VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gU291cmNlQnVmZmVyTGlzdEV2
ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
c3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5jcHAKaW5kZXggZWFmM2EyZTFlNzk4YTQ4MWY3NjhiMzNj
NWZkMjlkM2M3Y2JhYjNhZS4uODJjMWEzYTBjMDcyNTVjMWU4MGRhNjFkNTkwYmE5Yzk0MWNjMDY5
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhl
c2lzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVz
aXMuY3BwCkBAIC05Myw5ICs5MywxMCBAQCBjb25zdCBWZWN0b3I8UmVmPFNwZWVjaFN5bnRoZXNp
c1ZvaWNlPj4mIFNwZWVjaFN5bnRoZXNpczo6Z2V0Vm9pY2VzKCkKICAgICAgICAgcmV0dXJuIG1f
dm9pY2VMaXN0OwogCiAgICAgLy8gSWYgdGhlIHZvaWNlTGlzdCBpcyBlbXB0eSwgdGhhdCdzIHRo
ZSBjdWUgdG8gZ2V0IHRoZSB2b2ljZXMgZnJvbSB0aGUgcGxhdGZvcm0gYWdhaW4uCi0gICAgZm9y
IChhdXRvJiB2b2ljZSA6IG1fc3BlZWNoU3ludGhlc2lzQ2xpZW50ID8gbV9zcGVlY2hTeW50aGVz
aXNDbGllbnQtPnZvaWNlTGlzdCgpIDogZW5zdXJlUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcigp
LnZvaWNlTGlzdCgpKQotICAgICAgICBtX3ZvaWNlTGlzdC5hcHBlbmQoU3BlZWNoU3ludGhlc2lz
Vm9pY2U6OmNyZWF0ZSgqdm9pY2UpKTsKLQorICAgIGF1dG8mIHZvaWNlTGlzdCA9IG1fc3BlZWNo
U3ludGhlc2lzQ2xpZW50ID8gbV9zcGVlY2hTeW50aGVzaXNDbGllbnQtPnZvaWNlTGlzdCgpIDog
ZW5zdXJlUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcigpLnZvaWNlTGlzdCgpOworICAgIG1fdm9p
Y2VMaXN0ID0gdm9pY2VMaXN0Lm1hcChbXShhdXRvJiB2b2ljZSkgeworICAgICAgICByZXR1cm4g
U3BlZWNoU3ludGhlc2lzVm9pY2U6OmNyZWF0ZSgqdm9pY2UpOworICAgIH0pOwogICAgIHJldHVy
biBtX3ZvaWNlTGlzdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9z
cGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2subW0gYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFzay5tbQppbmRleCBmMWI5
Njk1ODA1N2QyZmU2MDQ0ZDJjN2IyNTlkYjZjNWNlYjQ0ZWZlLi5hNWU4NWFmODI5YmMwZGRkZWY2
MmM2MWE0ZjZjOWYyY2YyYWQ2Y2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFzay5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFzay5tbQpAQCAt
MTI4LDkgKzEyOCw4IEBAIC0gKHZvaWQpY2FsbGJhY2tXaXRoVHJhbnNjcmlwdGlvbnM6KE5TQXJy
YXk8U0ZUcmFuc2NyaXB0aW9uICo+ICopdHJhbnNjcmlwdGlvbnMKICAgICAgICAgaWYgKGFsdGVy
bmF0aXZlcy5zaXplKCkgPT0gX21heEFsdGVybmF0aXZlcykKICAgICAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICBWZWN0b3I8U3BlZWNoUmVjb2duaXRpb25SZXN1bHREYXRhPiBkYXRhczsKLSAg
ICBkYXRhcy5hcHBlbmQoU3BlZWNoUmVjb2duaXRpb25SZXN1bHREYXRhIHsgV1RGTW92ZShhbHRl
cm5hdGl2ZXMpLCBib29sKGlzRmluYWwpIH0pOwotICAgIF9kZWxlZ2F0ZUNhbGxiYWNrKFNwZWVj
aFJlY29nbml0aW9uVXBkYXRlOjpjcmVhdGVSZXN1bHQoX2lkZW50aWZpZXIsIFdURk1vdmUoZGF0
YXMpKSk7CisgICAgU3BlZWNoUmVjb2duaXRpb25SZXN1bHREYXRhIGRhdGEgeyBXVEZNb3ZlKGFs
dGVybmF0aXZlcyksICEhaXNGaW5hbCB9OworICAgIF9kZWxlZ2F0ZUNhbGxiYWNrKFNwZWVjaFJl
Y29nbml0aW9uVXBkYXRlOjpjcmVhdGVSZXN1bHQoX2lkZW50aWZpZXIsIHsgV1RGTW92ZShkYXRh
KSB9KSk7CiB9CiAKIC0gKHZvaWQpYXVkaW9TYW1wbGVzQXZhaWxhYmxlOihDTVNhbXBsZUJ1ZmZl
clJlZilzYW1wbGVCdWZmZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3Bl
ZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrTW9jay5tbSBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrTW9jay5tbQppbmRl
eCBiYzVjNjIxOWI1ZGFkYzNiMWNkYzU5MGQ2NWM4OTdiNzI1MGIxZTIxLi45NjNmYjQ3YzRjODVh
YTA2MDVhMmRhYmM3MTllNTY3NGMyNjBhYmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFza01vY2subW0KKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRh
c2tNb2NrLm1tCkBAIC02MywxMSArNjMsOSBAQCAtICh2b2lkKWF1ZGlvU2FtcGxlc0F2YWlsYWJs
ZTooQ01TYW1wbGVCdWZmZXJSZWYpc2FtcGxlQnVmZmVyCiAgICAgfQogCiAgICAgLy8gRmFrZSBz
b21lIHJlY29nbml0aW9uIHJlc3VsdHMuCi0gICAgVmVjdG9yPFNwZWVjaFJlY29nbml0aW9uQWx0
ZXJuYXRpdmVEYXRhPiBhbHRlcm5hdGl2ZXM7Ci0gICAgYWx0ZXJuYXRpdmVzLmFwcGVuZChTcGVl
Y2hSZWNvZ25pdGlvbkFsdGVybmF0aXZlRGF0YSB7ICJUZXN0IiwgMS4wIH0pOwotICAgIFZlY3Rv
cjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdERhdGE+IGRhdGFzOwotICAgIGRhdGFzLmFwcGVuZChT
cGVlY2hSZWNvZ25pdGlvblJlc3VsdERhdGEgeyBXVEZNb3ZlKGFsdGVybmF0aXZlcyksIHRydWUg
IH0pOwotICAgIF9kZWxlZ2F0ZUNhbGxiYWNrKFNwZWVjaFJlY29nbml0aW9uVXBkYXRlOjpjcmVh
dGVSZXN1bHQoX2lkZW50aWZpZXIsIFdURk1vdmUoZGF0YXMpKSk7CisgICAgU3BlZWNoUmVjb2du
aXRpb25BbHRlcm5hdGl2ZURhdGEgYWx0ZXJuYXRpdmUgeyAiVGVzdCIsIDEuMCB9OworICAgIFNw
ZWVjaFJlY29nbml0aW9uUmVzdWx0RGF0YSBkYXRhIHsgeyBXVEZNb3ZlKGFsdGVybmF0aXZlKSB9
LCB0cnVlIH07CisgICAgX2RlbGVnYXRlQ2FsbGJhY2soU3BlZWNoUmVjb2duaXRpb25VcGRhdGU6
OmNyZWF0ZVJlc3VsdChfaWRlbnRpZmllciwgeyBXVEZNb3ZlKGRhdGEpIH0pKTsKIAogICAgIGlm
ICghX2RvTXVsdGlwbGVSZWNvZ25pdGlvbnMpCiAgICAgICAgIFtzZWxmIGFib3J0XTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCmluZGV4
IGUzNTlhMDQzYjJlM2NmMzlmOWMyNmJjNTllOThmMTA1ZTEzMmMxMDUuLjhiY2U2NjcwNjZhM2Y3
NzZmMGVhYmE5NjZiODFhNzQ2YTk3NWUzMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYW5p
bWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcApAQCAtMTY0LDEwICsxNjQsOCBAQCBzdGF0
aWMgaW5saW5lIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRGdW5jKGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbnMmIGZyb20sIGNvbgogICAgIGlmIChjb250ZXh0LmNvbXBvc2l0ZU9wZXJhdGlvbiA9
PSBDb21wb3NpdGVPcGVyYXRpb246OkFkZCkgewogICAgICAgICBBU1NFUlQoY29udGV4dC5wcm9n
cmVzcyA9PSAxLjApOwogICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIHJlc3VsdE9wZXJhdGlv
bnM7Ci0gICAgICAgIGZvciAoYXV0byBvcGVyYXRpb24gOiBmcm9tLm9wZXJhdGlvbnMoKSkKLSAg
ICAgICAgICAgIHJlc3VsdE9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChvcGVyYXRpb24p
OwotICAgICAgICBmb3IgKGF1dG8gb3BlcmF0aW9uIDogdG8ub3BlcmF0aW9ucygpKQotICAgICAg
ICAgICAgcmVzdWx0T3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKG9wZXJhdGlvbik7Cisg
ICAgICAgIHJlc3VsdE9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZFZlY3Rvcihmcm9tLm9w
ZXJhdGlvbnMoKSk7CisgICAgICAgIHJlc3VsdE9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVu
ZFZlY3Rvcih0by5vcGVyYXRpb25zKCkpOwogICAgICAgICByZXR1cm4gcmVzdWx0T3BlcmF0aW9u
czsKICAgICB9CiAgICAgYXV0byBib3hTaXplID0gaXM8UmVuZGVyQm94Pihjb250ZXh0LmNsaWVu
dC0+cmVuZGVyZXIoKSkgPyBkb3duY2FzdDxSZW5kZXJCb3g+KCpjb250ZXh0LmNsaWVudC0+cmVu
ZGVyZXIoKSkuYm9yZGVyQm94UmVjdCgpLnNpemUoKSA6IExheW91dFNpemUoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmVzQ29udHJvbGxl
ci5jcHAKaW5kZXggYjVmZDJhZWYxMDAwMTJkYTljNGJkYjIxZTdhZDA0MWEzNjY0MTZiZi4uNzA5
NDUzYmM2NjI1MmY5NTk4MjRiYTk0ZWNhN2EzMzAwOGM5Y2EzYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmVzQ29udHJvbGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmVzQ29udHJvbGxlci5jcHAK
QEAgLTk4LDkgKzk4LDcgQEAgdm9pZCBEb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXI6OnVwZGF0
ZUFuaW1hdGlvbnNBbmRTZW5kRXZlbnRzKFJlZHVjZWRSZXNvbHV0aW8KICAgICBBU1NFUlQoIW1f
dGltZWxpbmVzLmhhc051bGxSZWZlcmVuY2VzKCkpOwogCiAgICAgLy8gV2UgbmVlZCB0byBjb3B5
IG1fdGltZWxpbmVzIGJlZm9yZSBpdGVyYXRpbmcgb3ZlciBpdHMgbWVtYmVycyBzaW5jZSB0aGUg
c3RlcHMgaW4gdGhpcyBwcm9jZWR1cmUgbWF5IG11dGF0ZSBtX3RpbWVsaW5lcy4KLSAgICBWZWN0
b3I8UmVmPERvY3VtZW50VGltZWxpbmU+PiBwcm90ZWN0ZWRUaW1lbGluZXM7Ci0gICAgZm9yIChh
dXRvJiB0aW1lbGluZSA6IG1fdGltZWxpbmVzKQotICAgICAgICBwcm90ZWN0ZWRUaW1lbGluZXMu
YXBwZW5kKHRpbWVsaW5lKTsKKyAgICBhdXRvIHByb3RlY3RlZFRpbWVsaW5lcyA9IGNvcHlUb1Zl
Y3Rvck9mPFJlZjxEb2N1bWVudFRpbWVsaW5lPj4obV90aW1lbGluZXMpOwogCiAgICAgLy8gV2Ug
bmVlZCB0byBmcmVlemUgdGhlIGN1cnJlbnQgdGltZSBldmVuIGlmIG5vIGFuaW1hdGlvbiBpcyBy
dW5uaW5nLgogICAgIC8vIGRvY3VtZW50LnRpbWVsaW5lLmN1cnJlbnRUaW1lIG1heSBiZSBjYWxs
ZWQgZnJvbSBhIHJBRiBjYWxsYmFjayBhbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5
ZnJhbWVFZmZlY3QuY3BwCmluZGV4IDQ0NDRjY2QwODdhZTQ4MDQ4MGM1ODlmZjRkNjg4ZTNmYzdj
MWEyNmEuLjNkMDkxZWVlNTM4NzQ0MjAzZjczOGI4NmMwNzY3NjU3ZjRlY2YwOGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcApAQCAtMzc1LDggKzM3NSw3
IEBAIHN0YXRpYyBpbmxpbmUgRXhjZXB0aW9uT3I8dm9pZD4gcHJvY2Vzc1Byb3BlcnR5SW5kZXhl
ZEtleWZyYW1lcyhKU0dsb2JhbE9iamVjdCYKICAgICAgICAgY29tcHV0ZU1pc3NpbmdLZXlmcmFt
ZU9mZnNldHMocHJvcGVydHlLZXlmcmFtZXMpOwogCiAgICAgICAgIC8vIDcuIEFkZCBrZXlmcmFt
ZXMgaW4gcHJvcGVydHkga2V5ZnJhbWVzIHRvIHByb2Nlc3NlZCBrZXlmcmFtZXMuCi0gICAgICAg
IGZvciAoYXV0byYga2V5ZnJhbWUgOiBwcm9wZXJ0eUtleWZyYW1lcykKLSAgICAgICAgICAgIHBh
cnNlZEtleWZyYW1lcy5hcHBlbmQoV1RGTW92ZShrZXlmcmFtZSkpOworICAgICAgICBwYXJzZWRL
ZXlmcmFtZXMuYXBwZW5kVmVjdG9yKHByb3BlcnR5S2V5ZnJhbWVzKTsKICAgICB9CiAKICAgICAv
LyAzLiBTb3J0IHByb2Nlc3NlZCBrZXlmcmFtZXMgYnkgdGhlIGNvbXB1dGVkIGtleWZyYW1lIG9m
ZnNldCBvZiBlYWNoIGtleWZyYW1lIGluIGluY3JlYXNpbmcgb3JkZXIuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uY3BwCmluZGV4
IDUzNDllZjM4ZmU2OTA2NGRkNDUzZmQ2OGQ3ZGM2YThlZTc3M2Q5ZWMuLmMwNWNkODk0MTVmZjQx
MjA0ZTNjM2M4Yzc3M2Y0OGQxMTM2M2MwOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uY3BwCkBAIC00Niw4ICs0Niw3IEBA
IENvbnRlbnRFeHRlbnNpb246OkNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBpZGVudGlm
aWVyLCBSZWY8Q29tcGlsZWRDb250ZW50CiAgICAgLCBtX2V4dGVuc2lvbkJhc2VVUkwoV1RGTW92
ZShleHRlbnNpb25CYXNlVVJMKSkKIHsKICAgICBERkFCeXRlY29kZUludGVycHJldGVyIGludGVy
cHJldGVyKG1fY29tcGlsZWRFeHRlbnNpb24tPnVybEZpbHRlcnNCeXRlY29kZSgpKTsKLSAgICBm
b3IgKHVpbnQ2NF90IGFjdGlvbiA6IGludGVycHJldGVyLmFjdGlvbnNNYXRjaGluZ0V2ZXJ5dGhp
bmcoKSkKLSAgICAgICAgbV91bml2ZXJzYWxBY3Rpb25zLmFwcGVuZChhY3Rpb24pOworICAgIG1f
dW5pdmVyc2FsQWN0aW9ucyA9IGNvcHlUb1ZlY3RvcihpbnRlcnByZXRlci5hY3Rpb25zTWF0Y2hp
bmdFdmVyeXRoaW5nKCkpOwogCiAgICAgaWYgKHNob3VsZENvbXBpbGVDU1MgPT0gU2hvdWxkQ29t
cGlsZUNTUzo6WWVzKQogICAgICAgICBjb21waWxlR2xvYmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgKaW5kZXggYmIxMjczYTVmZDNlZThlNjg4MGJh
NzY3YWY5MjkxN2ViZGRhNzQ4Zi4uZjlhNzYwNjA0MDg5YjBjZTJmNjlmODc2ODY1NGYxMjY4MjM3
YTY3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaApAQCAtNTgsNiArNTgsNyBAQCBwdWJs
aWM6CiAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuZW5k
KCk7IH0KICAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0K
ICAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorICAgIHNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpOyB9CiAKICAgICB2b2lkIGFw
cGVuZChSZWY8Q1NTVmFsdWU+JiYpOwogICAgIHZvaWQgcHJlcGVuZChSZWY8Q1NTVmFsdWU+JiYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5v
ZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3Bw
CmluZGV4IDZhYjVjYjY3NGQ0MTUzZDgyMjUyZjI1ODdlZTQ2ZmNmNWFhYzhjNGEuLjc5ZjJhODgy
NjBjZWFlZjBkNTgwMTU3NjYxMzljMDc1NzY2N2MwMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAKQEAgLTYyMCwxNCArNjIwLDExIEBA
IHZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmhvaXN0Q2hpbGRyZW5XaXRoT3BlcmF0b3IoQ2Fs
Y09wZXJhdG9yIG9wKQogCiAgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBu
ZXdDaGlsZHJlbjsKICAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikgewotICAgICAg
ICBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkKSAmJiBkb3duY2FzdDxDU1NDYWxj
T3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpLmNhbGNPcGVyYXRvcigpID09IG9wKSB7Ci0gICAg
ICAgICAgICBhdXRvJiBjaGlsZHJlbiA9IGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihj
aGlsZC5nZXQoKSkuY2hpbGRyZW4oKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY2hpbGRUb01v
dmUgOiBjaGlsZHJlbikKLSAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmQoV1RGTW92
ZShjaGlsZFRvTW92ZSkpOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgaWYgKGlzPENTU0NhbGNP
cGVyYXRpb25Ob2RlPihjaGlsZCkgJiYgZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNo
aWxkLmdldCgpKS5jYWxjT3BlcmF0b3IoKSA9PSBvcCkKKyAgICAgICAgICAgIG5ld0NoaWxkcmVu
LmFwcGVuZFZlY3Rvcihkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkp
LmNoaWxkcmVuKCkpOworICAgICAgICBlbHNlCiAgICAgICAgICAgICBuZXdDaGlsZHJlbi5hcHBl
bmQoV1RGTW92ZShjaGlsZCkpOwogICAgIH0KLSAgICAKICAgICBuZXdDaGlsZHJlbi5zaHJpbmtU
b0ZpdCgpOwogICAgIG1fY2hpbGRyZW4gPSBXVEZNb3ZlKG5ld0NoaWxkcmVuKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdMaXN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRE9NU3RyaW5nTGlzdC5oCmluZGV4IDY5Y2IyZDdmOTMyZTAwYTI2NWUwOGQ4ZmYzYjFj
YjUwYzEyNzdjZTUuLjMxNzJiMzM2ZjViNTI0NWU3MTA1YjkwNWY3NTY3NGZjMTc3YzEwNWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdMaXN0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RPTVN0cmluZ0xpc3QuaApAQCAtNDAsOSArNDAsMTQgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBET01TdHJpbmdMaXN0KTsKICAgICB9CiAKKyAg
ICBzdGF0aWMgUmVmPERPTVN0cmluZ0xpc3Q+IGNyZWF0ZShWZWN0b3I8U3RyaW5nPiYmIHN0cmlu
Z3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBET01TdHJpbmdMaXN0KFdU
Rk1vdmUoc3RyaW5ncykpKTsKKyAgICB9CisKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiBtX3N0cmluZ3MuaXNFbXB0eSgpOyB9CiAgICAgdm9pZCBjbGVhcigpIHsgbV9zdHJpbmdz
LmNsZWFyKCk7IH0KLSAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIHN0cmluZykgeyBtX3N0
cmluZ3MuYXBwZW5kKHN0cmluZyk7IH0KKyAgICB2b2lkIGFwcGVuZChTdHJpbmcmJiBzdHJpbmcp
IHsgbV9zdHJpbmdzLmFwcGVuZChXVEZNb3ZlKHN0cmluZykpOyB9CiAgICAgdm9pZCBzb3J0KCk7
CiAKICAgICAvLyBJbXBsZW1lbnRzIHRoZSBJREwuCkBAIC01Myw3ICs1OCwxMCBAQCBwdWJsaWM6
CiAgICAgb3BlcmF0b3IgY29uc3QgVmVjdG9yPFN0cmluZz4mKCkgY29uc3QgeyByZXR1cm4gbV9z
dHJpbmdzOyB9CiAKIHByaXZhdGU6Ci0gICAgRE9NU3RyaW5nTGlzdCgpIHsgfQorICAgIERPTVN0
cmluZ0xpc3QoKSA9IGRlZmF1bHQ7CisgICAgZXhwbGljaXQgRE9NU3RyaW5nTGlzdChWZWN0b3I8
U3RyaW5nPiYmIHN0cmluZ3MpCisgICAgICAgIDogbV9zdHJpbmdzKFdURk1vdmUoc3RyaW5ncykp
CisgICAgeyB9CiAKICAgICBWZWN0b3I8U3RyaW5nPiBtX3N0cmluZ3M7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnRQYXRoLmNwcAppbmRleCA0NmZiNjQ1ZTA1MzM3NTgxZjlmYTM0NTIzMDNhMmZlMzgwZjQ2
YzA2Li5lY2JjYzAwZjM2ZjA3NmUzMjBiNmFkMTZhZDFkOWEwYmYwMzhlMjc4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRQYXRoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnRQYXRoLmNwcApAQCAtMjc0LDExICsyNzQsMTEgQEAgVmVjdG9yPEV2ZW50VGFyZ2V0
Kj4gRXZlbnRQYXRoOjpjb21wdXRlUGF0aFVuY2xvc2VkVG9UYXJnZXQoY29uc3QgRXZlbnRUYXJn
ZXQmIHQKIAogRXZlbnRQYXRoOjpFdmVudFBhdGgoY29uc3QgVmVjdG9yPEV2ZW50VGFyZ2V0Kj4m
IHRhcmdldHMpCiB7Ci0gICAgZm9yIChhdXRvKiB0YXJnZXQgOiB0YXJnZXRzKSB7CisgICAgbV9w
YXRoID0gdGFyZ2V0cy5tYXAoWyZdKGF1dG8qIHRhcmdldCkgewogICAgICAgICBBU1NFUlQodGFy
Z2V0KTsKICAgICAgICAgQVNTRVJUKCFpczxOb2RlPih0YXJnZXQpKTsKLSAgICAgICAgbV9wYXRo
LmFwcGVuZChFdmVudENvbnRleHQgeyBFdmVudENvbnRleHQ6OlR5cGU6Ok5vcm1hbCwgbnVsbHB0
ciwgdGFyZ2V0LCAqdGFyZ2V0cy5iZWdpbigpLCAwIH0pOwotICAgIH0KKyAgICAgICAgcmV0dXJu
IEV2ZW50Q29udGV4dCB7IEV2ZW50Q29udGV4dDo6VHlwZTo6Tm9ybWFsLCBudWxscHRyLCB0YXJn
ZXQsICp0YXJnZXRzLmJlZ2luKCksIDAgfTsKKyAgICB9KTsKIH0KIAogc3RhdGljIE5vZGUqIG1v
dmVPdXRPZkFsbFNoYWRvd1Jvb3RzKE5vZGUmIHN0YXJ0aW5nTm9kZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9GdWxsc2NyZWVuTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRnVsbHNjcmVlbk1hbmFnZXIuY3BwCmluZGV4IGVjZTQ4ZTQyNjc5NzA5NWRhNzA5YTA0ZGE2
ODZhNGZlMGJjMjkyOGMuLjBlOWJiOTQ0MWMzN2RmNTNkNDcxODM4Y2NjMWFhZGNiNjM3NzhiZWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9GdWxsc2NyZWVuTWFuYWdlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0Z1bGxzY3JlZW5NYW5hZ2VyLmNwcApAQCAtMjY1LDkgKzI2
NSw4IEBAIHZvaWQgRnVsbHNjcmVlbk1hbmFnZXI6OmNhbmNlbEZ1bGxzY3JlZW4oKQogCiAgICAg
Ly8gVG8gYWNoaWV2ZSB0aGF0IGFpbSwgcmVtb3ZlIGFsbCB0aGUgZWxlbWVudHMgZnJvbSB0aGUg
dG9wIGRvY3VtZW50J3Mgc3RhY2sgZXhjZXB0IGZvciB0aGUgZmlyc3QgYmVmb3JlCiAgICAgLy8g
Y2FsbGluZyB3ZWJraXRFeGl0RnVsbHNjcmVlbigpOgotICAgIFZlY3RvcjxSZWZQdHI8RWxlbWVu
dD4+IHJlcGxhY2VtZW50RnVsbHNjcmVlbkVsZW1lbnRTdGFjazsKLSAgICByZXBsYWNlbWVudEZ1
bGxzY3JlZW5FbGVtZW50U3RhY2suYXBwZW5kKHRvcERvY3VtZW50LmZ1bGxzY3JlZW5NYW5hZ2Vy
KCkuZnVsbHNjcmVlbkVsZW1lbnQoKSk7Ci0gICAgdG9wRG9jdW1lbnQuZnVsbHNjcmVlbk1hbmFn
ZXIoKS5tX2Z1bGxzY3JlZW5FbGVtZW50U3RhY2suc3dhcChyZXBsYWNlbWVudEZ1bGxzY3JlZW5F
bGVtZW50U3RhY2spOworICAgIFJlZlB0ciBmdWxsc2NyZW5FbGVtZW50ID0gdG9wRG9jdW1lbnQu
ZnVsbHNjcmVlbk1hbmFnZXIoKS5mdWxsc2NyZWVuRWxlbWVudCgpOworICAgIHRvcERvY3VtZW50
LmZ1bGxzY3JlZW5NYW5hZ2VyKCkubV9mdWxsc2NyZWVuRWxlbWVudFN0YWNrID0geyBXVEZNb3Zl
KGZ1bGxzY3JlbkVsZW1lbnQpIH07CiAKICAgICB0b3BEb2N1bWVudC5mdWxsc2NyZWVuTWFuYWdl
cigpLmV4aXRGdWxsc2NyZWVuKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
TG9hZGFibGVTY3JpcHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0xvYWRhYmxlU2NyaXB0LmNw
cAppbmRleCAxYmRkZTFlYjVkNmEwN2YxMTczODliOTljNzVlY2IwMWI2MGY4ODA5Li40MWY0M2Nl
NjY4NTAzMGVkOWQzOWRmMDViOWZjOTIzYjEyMzk1ZGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTG9hZGFibGVTY3JpcHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2Fk
YWJsZVNjcmlwdC5jcHAKQEAgLTUxLDEyICs1MSw4IEBAIHZvaWQgTG9hZGFibGVTY3JpcHQ6OnJl
bW92ZUNsaWVudChMb2FkYWJsZVNjcmlwdENsaWVudCYgY2xpZW50KQogCiB2b2lkIExvYWRhYmxl
U2NyaXB0Ojpub3RpZnlDbGllbnRGaW5pc2hlZCgpCiB7Ci0gICAgUmVmUHRyPExvYWRhYmxlU2Ny
aXB0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotCi0gICAgVmVjdG9yPExvYWRhYmxlU2NyaXB0Q2xp
ZW50Kj4gdmVjdG9yOwotICAgIGZvciAoYXV0byYgcGFpciA6IG1fY2xpZW50cykKLSAgICAgICAg
dmVjdG9yLmFwcGVuZChwYWlyLmtleSk7Ci0gICAgZm9yIChhdXRvJiBjbGllbnQgOiB2ZWN0b3Ip
CisgICAgUmVmIHByb3RlY3RlZFRoaXMgeyAqdGhpcyB9OworICAgIGZvciAoYXV0byYgY2xpZW50
IDogY29weVRvVmVjdG9yKG1fY2xpZW50cy52YWx1ZXMoKSkpCiAgICAgICAgIGNsaWVudC0+bm90
aWZ5RmluaXNoZWQoKnRoaXMpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
UmFkaW9CdXR0b25Hcm91cHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9uR3Jv
dXBzLmNwcAppbmRleCA1MGY0NjMwZjg5ZWM4OTVkZjFjZTVhYjhlZDU4MTg5YjdhZmJmNjYyLi4x
MjI2M2UyNTZlZTU2YTQ1MmMzMjI4MTI1Y2FkZDVmMTcwZjQ1ZjBmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5jcHAKQEAgLTU5LDkgKzU5LDcgQEAgaW5saW5lIGJvb2wg
UmFkaW9CdXR0b25Hcm91cDo6aXNWYWxpZCgpIGNvbnN0CiAKIFZlY3RvcjxSZWY8SFRNTElucHV0
RWxlbWVudD4+IFJhZGlvQnV0dG9uR3JvdXA6Om1lbWJlcnMoKSBjb25zdAogewotICAgIFZlY3Rv
cjxSZWY8SFRNTElucHV0RWxlbWVudD4+IHNvcnRlZE1lbWJlcnM7Ci0gICAgZm9yIChhdXRvJiBt
ZW1iZXIgOiBtX21lbWJlcnMpCi0gICAgICAgIHNvcnRlZE1lbWJlcnMuYXBwZW5kKG1lbWJlcik7
CisgICAgYXV0byBzb3J0ZWRNZW1iZXJzID0gY29weVRvVmVjdG9yT2Y8UmVmPEhUTUxJbnB1dEVs
ZW1lbnQ+PihtX21lbWJlcnMpOwogICAgIHN0ZDo6c29ydChzb3J0ZWRNZW1iZXJzLmJlZ2luKCks
IHNvcnRlZE1lbWJlcnMuZW5kKCksIFtdKGF1dG8mIGEsIGF1dG8mIGIpIHsKICAgICAgICAgcmV0
dXJuIGlzX2x0KHRyZWVPcmRlcjxDb21wb3NlZFRyZWU+KGEsIGIpKTsKICAgICB9KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGlyZWN0b3J5RmlsZUxpc3RDcmVhdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvRGlyZWN0b3J5RmlsZUxpc3RDcmVhdG9yLmNwcAppbmRleCA5
ZDNkYTE4NTNjM2E2MzIwZmViMzE5NzUxNjJlNDM1YWU5M2ZmZGQxLi45ODVmN2E2MmYwYzFmMzk3
NTU4MmViM2Y5Yjk4OTc1MTU2MTU2Njc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0RpcmVjdG9yeUZpbGVMaXN0Q3JlYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9E
aXJlY3RvcnlGaWxlTGlzdENyZWF0b3IuY3BwCkBAIC04NiwxMyArODYsMTEgQEAgc3RhdGljIFZl
Y3RvcjxGaWxlSW5mb3JtYXRpb24+IGdhdGhlckZpbGVJbmZvcm1hdGlvbihjb25zdCBWZWN0b3I8
RmlsZUNob29zZXJGaWwKIHN0YXRpYyBSZWY8RmlsZUxpc3Q+IHRvRmlsZUxpc3QoRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zdCBWZWN0b3I8RmlsZUluZm9ybWF0aW9uPiYgZmlsZXMpCiB7CiAgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBWZWN0b3I8UmVmPEZpbGU+PiBmaWxlT2JqZWN0
czsKLSAgICBmb3IgKGF1dG8mIGZpbGUgOiBmaWxlcykgeworICAgIGF1dG8gZmlsZU9iamVjdHMg
PSBmaWxlcy5tYXAoW2RvY3VtZW50XShhdXRvJiBmaWxlKSB7CiAgICAgICAgIGlmIChmaWxlLnJl
bGF0aXZlUGF0aC5pc051bGwoKSkKLSAgICAgICAgICAgIGZpbGVPYmplY3RzLmFwcGVuZChGaWxl
OjpjcmVhdGUoZG9jdW1lbnQsIGZpbGUucGF0aCwgeyB9LCBmaWxlLmRpc3BsYXlOYW1lKSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZpbGVPYmplY3RzLmFwcGVuZChGaWxlOjpjcmVhdGVX
aXRoUmVsYXRpdmVQYXRoKGRvY3VtZW50LCBmaWxlLnBhdGgsIGZpbGUucmVsYXRpdmVQYXRoKSk7
Ci0gICAgfQorICAgICAgICAgICAgcmV0dXJuIEZpbGU6OmNyZWF0ZShkb2N1bWVudCwgZmlsZS5w
YXRoLCB7IH0sIGZpbGUuZGlzcGxheU5hbWUpOworICAgICAgICByZXR1cm4gRmlsZTo6Y3JlYXRl
V2l0aFJlbGF0aXZlUGF0aChkb2N1bWVudCwgZmlsZS5wYXRoLCBmaWxlLnJlbGF0aXZlUGF0aCk7
CisgICAgfSk7CiAgICAgcmV0dXJuIEZpbGVMaXN0OjpjcmVhdGUoV1RGTW92ZShmaWxlT2JqZWN0
cykpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCmluZGV4
IGM0YjA4NGQyZGU3MWZkMzE5ZmU4YzA2OWI0NWZmN2ZjY2NlZGU1ZWMuLjcyYWZlMDRlMDdmODlj
OGMyNGFmM2Y4YjhjYWQzOGNlMjk2YThkMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNl
bGVjdEVsZW1lbnQuY3BwCkBAIC02MzQsOSArNjM0LDkgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6c2F2ZUxhc3RTZWxlY3Rpb24oKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9s
YXN0T25DaGFuZ2VTZWxlY3Rpb24uY2xlYXIoKTsKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBs
aXN0SXRlbXMoKSkKLSAgICAgICAgbV9sYXN0T25DaGFuZ2VTZWxlY3Rpb24uYXBwZW5kKGlzPEhU
TUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+
KCplbGVtZW50KS5zZWxlY3RlZCgpKTsKKyAgICBtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbiA9IGxp
c3RJdGVtcygpLm1hcChbXShhdXRvJiBlbGVtZW50KSB7CisgICAgICAgIHJldHVybiBpczxIVE1M
T3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50Pigq
ZWxlbWVudCkuc2VsZWN0ZWQoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6c2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgoaW50IGluZGV4KQpAQCAtNjQ1LDEwICs2
NDUsOSBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJ
bmRleChpbnQgaW5kZXgpCiAKICAgICAvLyBDYWNoZSB0aGUgc2VsZWN0aW9uIHN0YXRlIHNvIHdl
IGNhbiByZXN0b3JlIHRoZSBvbGQgc2VsZWN0aW9uIGFzIHRoZSBuZXcKICAgICAvLyBzZWxlY3Rp
b24gcGl2b3RzIGFyb3VuZCB0aGlzIGFuY2hvciBpbmRleC4KLSAgICBtX2NhY2hlZFN0YXRlRm9y
QWN0aXZlU2VsZWN0aW9uLmNsZWFyKCk7Ci0KLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBsaXN0
SXRlbXMoKSkKLSAgICAgICAgbV9jYWNoZWRTdGF0ZUZvckFjdGl2ZVNlbGVjdGlvbi5hcHBlbmQo
aXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxl
bWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCkpOworICAgIG1fY2FjaGVkU3RhdGVGb3JBY3RpdmVT
ZWxlY3Rpb24gPSBsaXN0SXRlbXMoKS5tYXAoW10oYXV0byYgZWxlbWVudCkgeworICAgICAgICBy
ZXR1cm4gaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0
aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCk7CisgICAgfSk7CiB9CiAKIHZvaWQgSFRN
TFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KGludCBpbmRleCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKaW5kZXggMDViMjczNzlmMmQ5MjE5NDQ4OTMyYzQ2
YWIzM2IyZWYwMzFhZmM2YS4uNTliZmM2ZTBmMWU1OTA0M2RjYzViYmRhMmQyMmFhZTM2NWE2MTMx
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKQEAgLTExMiwxMCArMTEyLDkgQEAg
dm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0LAogCiBWZWN0b3I8c3RkOjpvcHRpb25hbDxJbWFnZUJpdG1h
cEJhY2tpbmc+PiBJbWFnZUJpdG1hcDo6ZGV0YWNoQml0bWFwcyhWZWN0b3I8UmVmUHRyPEltYWdl
Qml0bWFwPj4mJiBiaXRtYXBzKQogewotICAgIFZlY3RvcjxzdGQ6Om9wdGlvbmFsPEltYWdlQml0
bWFwQmFja2luZz4+IGJ1ZmZlcnM7Ci0gICAgZm9yIChhdXRvJiBiaXRtYXAgOiBiaXRtYXBzKQot
ICAgICAgICBidWZmZXJzLmFwcGVuZChiaXRtYXAtPnRha2VJbWFnZUJpdG1hcEJhY2tpbmcoKSk7
Ci0gICAgcmV0dXJuIGJ1ZmZlcnM7CisgICAgcmV0dXJuIFdURjo6bWFwKFdURk1vdmUoYml0bWFw
cyksIFtdKGF1dG8mJiBiaXRtYXApIHsKKyAgICAgICAgcmV0dXJuIGJpdG1hcC0+dGFrZUltYWdl
Qml0bWFwQmFja2luZygpOworICAgIH0pOwogfQogCiB2b2lkIEltYWdlQml0bWFwOjpjcmVhdGVQ
cm9taXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIElt
YWdlQml0bWFwOjpTb3VyY2UmJiBzb3VyY2UsIEltYWdlQml0bWFwT3B0aW9ucyYmIG9wdGlvbnMs
IGludCBzeCwgaW50IHN5LCBpbnQgc3csIGludCBzaCwgSW1hZ2VCaXRtYXA6OlByb21pc2UmJiBw
cm9taXNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmNwcAppbmRleCA2MTE0NjAyNzdmNjY3OWE0OTFlMGY5ODMxNzc5
NzMwMDdlYmJkZGM2Li5mNzMzNjRmMzg2MGMyNmI5MzY2MThjNGY3ZTFhMTc4MjVlOGQ1MDEwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcApAQCAtMzAyMSw5ICszMDIxLDggQEAgc3RkOjpvcHRpb25hbDxWZWN0
b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEF0
dGFjaGUKICAgICB9OwogICAgIFZlY3RvcjxSZWZQdHI8V2ViR0xTaGFkZXI+PiBzaGFkZXJPYmpl
Y3RzOwogICAgIGZvciAoYXV0byBzaGFkZXJUeXBlIDogc2hhZGVyVHlwZXMpIHsKLSAgICAgICAg
UmVmUHRyPFdlYkdMU2hhZGVyPiBzaGFkZXIgPSBwcm9ncmFtLmdldEF0dGFjaGVkU2hhZGVyKHNo
YWRlclR5cGUpOwotICAgICAgICBpZiAoc2hhZGVyKQotICAgICAgICAgICAgc2hhZGVyT2JqZWN0
cy5hcHBlbmQoc2hhZGVyKTsKKyAgICAgICAgaWYgKFJlZlB0ciBzaGFkZXIgPSBwcm9ncmFtLmdl
dEF0dGFjaGVkU2hhZGVyKHNoYWRlclR5cGUpKQorICAgICAgICAgICAgc2hhZGVyT2JqZWN0cy5h
cHBlbmQoV1RGTW92ZShzaGFkZXIpKTsKICAgICB9CiAgICAgcmV0dXJuIHNoYWRlck9iamVjdHM7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJz
ZXRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0
UGFyc2VyLmNwcAppbmRleCA4YWNiNjhhZjQ1NTFhMzhiNzk5YzcxM2FhNzVkYzBmNzkxOTAwNGJl
Li4wYTVlZDc4ZjQ1OGY5OWI2YmM3ZmMzNzFkZjk0Y2ZlOTI1YTRkNDgwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAKQEAg
LTg1LDEyICs4NSwxMSBAQCBzdGF0aWMgU3RyaW5nVmlldyBleHRyYWN0Q2hhcnNldChjb25zdCBT
dHJpbmcmIHZhbHVlKQogCiBib29sIEhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6cHJvY2Vzc01ldGEo
SFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBBdHRyaWJ1dGVMaXN0IGF0dHJpYnV0ZXM7Ci0gICAg
Zm9yIChhdXRvJiBhdHRyaWJ1dGUgOiB0b2tlbi5hdHRyaWJ1dGVzKCkpIHsKKyAgICBhdXRvIGF0
dHJpYnV0ZXMgPSB0b2tlbi5hdHRyaWJ1dGVzKCkubWFwKFtdKGF1dG8mIGF0dHJpYnV0ZSkgewog
ICAgICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZThCaXRJZlBv
c3NpYmxlKGF0dHJpYnV0ZS5uYW1lKTsKICAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0g
U3RyaW5nSW1wbDo6Y3JlYXRlOEJpdElmUG9zc2libGUoYXR0cmlidXRlLnZhbHVlKTsKLSAgICAg
ICAgYXR0cmlidXRlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoYXR0cmlidXRlTmFtZSwgYXR0cmli
dXRlVmFsdWUpKTsKLSAgICB9CisgICAgICAgIHJldHVybiBzdGQ6OnBhaXIgeyBXVEZNb3ZlKGF0
dHJpYnV0ZU5hbWUpLCBXVEZNb3ZlKGF0dHJpYnV0ZVZhbHVlKSB9OworICAgIH0pOwogCiAgICAg
bV9lbmNvZGluZyA9IGVuY29kaW5nRnJvbU1ldGFBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwogICAg
IHJldHVybiBtX2VuY29kaW5nLmlzVmFsaWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IDZiNzFiZWY4MWE3ZTI4NDcxZWVmZDdjNTMx
NTJhOGEwYTgyZDJkYjUuLmExZjE2N2NiMDgzYzk5ODQzNjE4MzQxMTgwMjlmMjg1ZTQxYzAwMDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcApA
QCAtMjIwMCwxMSArMjIwMCwxMCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NoYXJh
Y3RlcihBdG9tSFRNTFRva2VuJiYgdG9rZW4pCiAvLyBGcm9tIHRoZSBzdHJpbmcgNDA4OTk2MTAx
MCwgY3JlYXRlcyBhIGxpbmsgb2YgdGhlIGZvcm0gPGEgaHJlZj0idGVsOjQwODk5NjEwMTAiPjQw
ODk5NjEwMTA8L2E+IGFuZCBpbnNlcnRzIGl0Lgogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6Omluc2Vy
dFBob25lTnVtYmVyTGluayhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBWZWN0b3I8QXR0
cmlidXRlPiBhdHRyaWJ1dGVzOwotICAgIGF0dHJpYnV0ZXMuYXBwZW5kKEF0dHJpYnV0ZShIVE1M
TmFtZXM6OmhyZWZBdHRyLCBtYWtlU3RyaW5nKCJ0ZWw6Il9zLCBzdHJpbmcpKSk7CisgICAgQXR0
cmlidXRlIGF0dHJpYnV0ZShIVE1MTmFtZXM6OmhyZWZBdHRyLCBtYWtlU3RyaW5nKCJ0ZWw6Il9z
LCBzdHJpbmcpKTsKIAogICAgIGNvbnN0IEF0b21TdHJpbmcmIGFUYWdMb2NhbE5hbWUgPSBhVGFn
LT5sb2NhbE5hbWUoKTsKLSAgICBBdG9tSFRNTFRva2VuIGFTdGFydFRva2VuKEhUTUxUb2tlbjo6
U3RhcnRUYWcsIGFUYWdMb2NhbE5hbWUsIFdURk1vdmUoYXR0cmlidXRlcykpOworICAgIEF0b21I
VE1MVG9rZW4gYVN0YXJ0VG9rZW4oSFRNTFRva2VuOjpTdGFydFRhZywgYVRhZ0xvY2FsTmFtZSwg
eyBXVEZNb3ZlKGF0dHJpYnV0ZSkgfSk7CiAgICAgQXRvbUhUTUxUb2tlbiBhRW5kVG9rZW4oSFRN
TFRva2VuOjpFbmRUYWcsIGFUYWdMb2NhbE5hbWUpOwogCiAgICAgcHJvY2Vzc1N0YXJ0VGFnKFdU
Rk1vdmUoYVN0YXJ0VG9rZW4pKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL1RleHREb2N1bWVudFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9U
ZXh0RG9jdW1lbnRQYXJzZXIuY3BwCmluZGV4IDRkYTk1OWY0MGZlOWVhMzM3NDdjZDIzODhjZWI3
OWY2ZDcyZGI3ZWQuLjQ3MDZmMjZlODQ0MDllZTgxM2NkMTNiYzVmNGUwYWNjZjY3NGE4NjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNw
cApAQCAtNTEsOSArNTEsOCBAQCB2b2lkIFRleHREb2N1bWVudFBhcnNlcjo6aW5zZXJ0RmFrZVBy
ZUVsZW1lbnQoKQogICAgIC8vIFdlIGNyZWF0ZSBhIGZha2UgdG9rZW4gYW5kIGdpdmUgaXQgdG8g
dGhlIHRyZWUgYnVpbGRlciByYXRoZXIgdGhhbgogICAgIC8vIHNlbmRpbmcgZmFrZSBieXRlcyB0
aHJvdWdoIHRoZSBmcm9udC1lbmQgb2YgdGhlIHBhcnNlciB0byBhdm9pZAogICAgIC8vIGRpc3Ry
dWJpbmcgdGhlIGxpbmUvY29sdW1uIG51bWJlciBjYWxjdWxhdGlvbnMuCi0gICAgVmVjdG9yPEF0
dHJpYnV0ZT4gYXR0cmlidXRlczsKLSAgICBhdHRyaWJ1dGVzLmFwcGVuZChBdHRyaWJ1dGUoc3R5
bGVBdHRyLCAid29yZC13cmFwOiBicmVhay13b3JkOyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7Iikp
OwotICAgIEF0b21IVE1MVG9rZW4gZmFrZVByZShIVE1MVG9rZW46OlN0YXJ0VGFnLCBwcmVUYWct
PmxvY2FsTmFtZSgpLCBXVEZNb3ZlKGF0dHJpYnV0ZXMpKTsKKyAgICBBdHRyaWJ1dGUgYXR0cmli
dXRlKHN0eWxlQXR0ciwgIndvcmQtd3JhcDogYnJlYWstd29yZDsgd2hpdGUtc3BhY2U6IHByZS13
cmFwOyIpOworICAgIEF0b21IVE1MVG9rZW4gZmFrZVByZShIVE1MVG9rZW46OlN0YXJ0VGFnLCBw
cmVUYWctPmxvY2FsTmFtZSgpLCB7IFdURk1vdmUoYXR0cmlidXRlKSB9KTsKICAgICB0cmVlQnVp
bGRlcigpLmNvbnN0cnVjdFRyZWUoV1RGTW92ZShmYWtlUHJlKSk7CiAKICAgICAvLyBOb3JtYWxs
eSB3ZSB3b3VsZCBza2lwIHRoZSBmaXJzdCBcbiBhZnRlciBhIDxwcmU+IGVsZW1lbnQsIGJ1dCB3
ZSBkb24ndApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0NvbnRlbnRGaWx0ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0NvbnRlbnRGaWx0ZXIuY3BwCmluZGV4IDQxOWUz
MmYzOTgyZjY3MmFmNjYzMGZhNWUwYzYyNWM1Y2I3YjIyM2YuLjRlMzU0NDU0YWFiYTM0ZTRmYmVh
NDE1ZDQxZmY4ZTkyYmY0NDE0NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9D
b250ZW50RmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29udGVudEZpbHRl
ci5jcHAKQEAgLTY3LDExICs2Nyw5IEBAIFZlY3RvcjxDb250ZW50RmlsdGVyOjpUeXBlPiYgQ29u
dGVudEZpbHRlcjo6dHlwZXMoKQogCiBzdGQ6OnVuaXF1ZV9wdHI8Q29udGVudEZpbHRlcj4gQ29u
dGVudEZpbHRlcjo6Y3JlYXRlKENvbnRlbnRGaWx0ZXJDbGllbnQmIGNsaWVudCkKIHsKLSAgICBD
b250YWluZXIgZmlsdGVyczsKLSAgICBmb3IgKGF1dG8mIHR5cGUgOiB0eXBlcygpKSB7Ci0gICAg
ICAgIGF1dG8gZmlsdGVyID0gdHlwZS5jcmVhdGUoKTsKLSAgICAgICAgZmlsdGVycy5hcHBlbmQo
V1RGTW92ZShmaWx0ZXIpKTsKLSAgICB9CisgICAgYXV0byBmaWx0ZXJzID0gdHlwZXMoKS5tYXAo
W10oYXV0byYgdHlwZSkgeworICAgICAgICByZXR1cm4gdHlwZS5jcmVhdGUoKTsKKyAgICB9KTsK
IAogICAgIGlmIChmaWx0ZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZU1hbmlmZXN0UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuY3BwCmluZGV4IGI4N2RkODM1MDYwN2MyNGJlMjU2
ZTM0NDFiZWQyZDM3NjdlMDk1NTIuLjRhMTE0NDI1ZTExNmQyYzQyZDE5MDM5MjNlZGY4ODYzODNk
OGYwNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuY3BwCkBAIC0xODAsNyArMTgw
LDcgQEAgc3RkOjpvcHRpb25hbDxBcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3Q+IHBhcnNlQXBwbGlj
YXRpb25DYWNoZU1hbmlmZXN0KGNvbnN0IFVSTCYKICAgICAgICAgICAgICAgICBpZiAoIWVxdWFs
SWdub3JpbmdBU0NJSUNhc2UodXJsLnByb3RvY29sKCksIG1hbmlmZXN0VVJMLnByb3RvY29sKCkp
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgICAgIG1hbmlm
ZXN0Lm9ubGluZUFsbG93ZWRVUkxzLmFwcGVuZCh1cmwpOworICAgICAgICAgICAgICAgIG1hbmlm
ZXN0Lm9ubGluZUFsbG93ZWRVUkxzLmFwcGVuZChXVEZNb3ZlKHVybCkpOwogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6ZU9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUmVzaXplT2JzZXJ2ZXIuY3BwCmluZGV4IDkzZGExYTQ1NjA0ZTQ1MmE3NzU5M2UxOGQxZjQ3
MzM2MzQ5OTQzNjcuLjRmZmQ2OWQwMzQ0MTA5YjQ3YWZiNWU1MTk3YWEzZmRmZDQ5N2RlZDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuY3BwCkBAIC0xMjUsMTEgKzEyNSwxMCBA
QCBzaXplX3QgUmVzaXplT2JzZXJ2ZXI6OmdhdGhlck9ic2VydmF0aW9ucyhzaXplX3QgZGVlcGVy
VGhhbikKIAogdm9pZCBSZXNpemVPYnNlcnZlcjo6ZGVsaXZlck9ic2VydmF0aW9ucygpCiB7Ci0g
ICAgVmVjdG9yPFJlZjxSZXNpemVPYnNlcnZlckVudHJ5Pj4gZW50cmllczsKLSAgICBmb3IgKGNv
bnN0IGF1dG8mIG9ic2VydmF0aW9uIDogbV9hY3RpdmVPYnNlcnZhdGlvbnMpIHsKKyAgICBhdXRv
IGVudHJpZXMgPSBtX2FjdGl2ZU9ic2VydmF0aW9ucy5tYXAoW10oYXV0byYgb2JzZXJ2YXRpb24p
IHsKICAgICAgICAgQVNTRVJUKG9ic2VydmF0aW9uLT50YXJnZXQoKSk7Ci0gICAgICAgIGVudHJp
ZXMuYXBwZW5kKFJlc2l6ZU9ic2VydmVyRW50cnk6OmNyZWF0ZShvYnNlcnZhdGlvbi0+dGFyZ2V0
KCksIG9ic2VydmF0aW9uLT5jb21wdXRlQ29udGVudFJlY3QoKSwgb2JzZXJ2YXRpb24tPmJvcmRl
ckJveFNpemUoKSwgb2JzZXJ2YXRpb24tPmNvbnRlbnRCb3hTaXplKCkpKTsKLSAgICB9CisgICAg
ICAgIHJldHVybiBSZXNpemVPYnNlcnZlckVudHJ5OjpjcmVhdGUob2JzZXJ2YXRpb24tPnRhcmdl
dCgpLCBvYnNlcnZhdGlvbi0+Y29tcHV0ZUNvbnRlbnRSZWN0KCksIG9ic2VydmF0aW9uLT5ib3Jk
ZXJCb3hTaXplKCksIG9ic2VydmF0aW9uLT5jb250ZW50Qm94U2l6ZSgpKTsKKyAgICB9KTsKICAg
ICBtX2FjdGl2ZU9ic2VydmF0aW9ucy5jbGVhcigpOwogICAgIGF1dG8gYWN0aXZlT2JzZXJ2YXRp
b25UYXJnZXRzID0gc3RkOjpleGNoYW5nZShtX2FjdGl2ZU9ic2VydmF0aW9uVGFyZ2V0cywgeyB9
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKaW5kZXggMzg3ZDUxOWFlNTE3
MmQ2ODBhNWIyODg0M2JiZThmZjk5NmM2YjMzNS4uY2E1ZmJlNjNjY2Y2Y2RiOThhZjg1ZWQ1OTI5
YTEzMDM4ZDY5YmZjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNh
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCkBAIC0z
NjEsMTcgKzM2MSwxNiBAQCBzdGF0aWMgYm9vbCBpbml0aWFsaXplSW5kaWNhdG9yKFRleHRJbmRp
Y2F0b3JEYXRhJiBkYXRhLCBGcmFtZSYgZnJhbWUsIGNvbnN0IFNpbQogICAgICAgICB0ZXh0Qm91
bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLnVuaXRlKHRleHRSZWN0SW5Sb290Vmlld0Nv
b3JkaW5hdGVzKTsKICAgICB9CiAKLSAgICBWZWN0b3I8RmxvYXRSZWN0PiB0ZXh0UmVjdHNJbkJv
dW5kaW5nUmVjdENvb3JkaW5hdGVzOwotICAgIGZvciAoYXV0byByZWN0IDogdGV4dFJlY3RzSW5S
b290Vmlld0Nvb3JkaW5hdGVzKSB7CisgICAgYXV0byB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENv
b3JkaW5hdGVzID0gdGV4dFJlY3RzSW5Sb290Vmlld0Nvb3JkaW5hdGVzLm1hcChbJl0oYXV0byBy
ZWN0KSB7CiAgICAgICAgIHJlY3QubW92ZUJ5KC10ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nv
b3JkaW5hdGVzLmxvY2F0aW9uKCkpOwotICAgICAgICB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENv
b3JkaW5hdGVzLmFwcGVuZChyZWN0KTsKLSAgICB9CisgICAgICAgIHJldHVybiByZWN0OworICAg
IH0pOwogCiAgICAgLy8gU3RvcmUgdGhlIHNlbGVjdGlvbiByZWN0IGluIHdpbmRvdyBjb29yZGlu
YXRlcywgdG8gYmUgdXNlZCBzdWJzZXF1ZW50bHkKICAgICAvLyB0byBkZXRlcm1pbmUgaWYgdGhl
IGluZGljYXRvciBhbmQgc2VsZWN0aW9uIHN0aWxsIHByZWNpc2VseSBvdmVybGFwLgogICAgIGRh
dGEuc2VsZWN0aW9uUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9IGZyYW1lLnZpZXcoKS0+Y29u
dGVudHNUb1Jvb3RWaWV3KGVuY2xvc2luZ0ludFJlY3QoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uQm91bmRzKEZyYW1lU2VsZWN0aW9uOjpDbGlwVG9WaXNpYmxlQ29udGVudDo6Tm8pKSk7CiAg
ICAgZGF0YS50ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gdGV4dEJvdW5k
aW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlczsKLSAgICBkYXRhLnRleHRSZWN0c0luQm91bmRp
bmdSZWN0Q29vcmRpbmF0ZXMgPSB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzOwor
ICAgIGRhdGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcyA9IFdURk1vdmUodGV4
dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcyk7CiAKICAgICByZXR1cm4gdGFrZVNuYXBz
aG90cyhkYXRhLCBmcmFtZSwgZW5jbG9zaW5nSW50UmVjdCh0ZXh0Qm91bmRpbmdSZWN0SW5Eb2N1
bWVudENvb3JkaW5hdGVzKSwgY2xpcHBlZFRleHRSZWN0c0luRG9jdW1lbnRDb29yZGluYXRlcyk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQ
b2xpY3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5
LmNwcAppbmRleCA1MmY2MjAxMjJiODVjNzUwM2U3ZGE2YTY4MzViZjM3NTYxNDk2N2Y0Li44YTJi
YTRjZmZhMjZkY2NiYmQxZTc1ZWU1MDExM2E4NjZiZTVhMmZhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKQEAgLTM0MywxOCArMzQz
LDEyIEBAIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjphbGxQb2xpY2llc0FsbG93KFZpb2xh
dGVkRGlyZWN0aXZlQ2FsbGJhY2smJiBjYWxsYmFjCiBzdGF0aWMgVmVjdG9yPFJlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VTdWJSZXNvdXJjZUludGVncml0eUludG9EaWdlc3RzKGNv
bnN0IFN0cmluZyYgc3ViUmVzb3VyY2VJbnRlZ3JpdHkpCiB7CiAgICAgYXV0byBlbmNvZGVkRGln
ZXN0cyA9IHBhcnNlSW50ZWdyaXR5TWV0YWRhdGEoc3ViUmVzb3VyY2VJbnRlZ3JpdHkpOwotICAg
IFZlY3RvcjxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IGRlY29kZWREaWdlc3RzOwotCi0g
ICAgaWYgKCFlbmNvZGVkRGlnZXN0cy5oYXNfdmFsdWUoKSkKKyAgICBpZiAoIWVuY29kZWREaWdl
c3RzKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBlbmNvZGVk
RGlnZXN0IDogZW5jb2RlZERpZ2VzdHMudmFsdWUoKSkgewotICAgICAgICBhdXRvIGRlY29kZWRE
aWdlc3QgPSBkZWNvZGVFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0KGVuY29kZWRE
aWdlc3QpOwotICAgICAgICBpZiAoZGVjb2RlZERpZ2VzdC5oYXNfdmFsdWUoKSkKLSAgICAgICAg
ICAgIGRlY29kZWREaWdlc3RzLmFwcGVuZChkZWNvZGVkRGlnZXN0LnZhbHVlKCkpOwotICAgICAg
ICB9Ci0KLSAgICByZXR1cm4gZGVjb2RlZERpZ2VzdHM7CisgICAgcmV0dXJuIFdURjo6Y29tcGFj
dE1hcCgqZW5jb2RlZERpZ2VzdHMsIFtdKGF1dG8mIGVuY29kZWREaWdlc3QpIHsKKyAgICAgICAg
cmV0dXJuIGRlY29kZUVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QoZW5jb2RlZERp
Z2VzdCk7CisgICAgfSk7CiB9CiAKIHN0YXRpYyBWZWN0b3I8Q29udGVudFNlY3VyaXR5UG9saWN5
SGFzaD4gZ2VuZXJhdGVIYXNoZXNGb3JDb250ZW50KGNvbnN0IFN0cmluZ1ZpZXcgY29udGVudCwg
T3B0aW9uU2V0PENvbnRlbnRTZWN1cml0eVBvbGljeUhhc2hBbGdvcml0aG0+IGFsZ29yaXRobXMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHAKaW5kZXggOGU0ZWNlNzA1M2Fl
OGU5OGVmZWNjZmU3NjUyZjg2Y2QyOTc0MDQwNC4uNzg0MjhjNGFiZDMxZTk5YjEwYWFlNDhmYmVj
YzJhNWI4ZDlmNThmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNo
b29zZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmNwcApA
QCAtNTMsOSArNTMsNyBAQCB2b2lkIEZpbGVDaG9vc2VyOjppbnZhbGlkYXRlKCkKIAogdm9pZCBG
aWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQogewotICAgIFZl
Y3RvcjxTdHJpbmc+IGZpbGVuYW1lczsKLSAgICBmaWxlbmFtZXMuYXBwZW5kKGZpbGVuYW1lKTsK
LSAgICBjaG9vc2VGaWxlcyhmaWxlbmFtZXMpOworICAgIGNob29zZUZpbGVzKHsgZmlsZW5hbWUg
fSk7CiB9CiAKIHZvaWQgRmlsZUNob29zZXI6OmNob29zZUZpbGVzKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBmaWxlbmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXBsYWNlbWVudE5hbWVzKQpA
QCAtNjgsOSArNjYsMTAgQEAgdm9pZCBGaWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZXMoY29uc3QgVmVj
dG9yPFN0cmluZz4mIGZpbGVuYW1lcywgY29uc3QgVmVjdG9yPFN0cmkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+IGZpbGVzOworICAgIGZpbGVzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoZmlsZW5hbWVzLnNpemUoKSk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDAsIHNpemUgPSBmaWxlbmFtZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBm
aWxlcy5hcHBlbmQoeyBmaWxlbmFtZXNbaV0sIGkgPCByZXBsYWNlbWVudE5hbWVzLnNpemUoKSA/
IHJlcGxhY2VtZW50TmFtZXNbaV0gOiBudWxsU3RyaW5nKCksIHsgfSB9KTsKLSAgICBtX2NsaWVu
dC0+ZmlsZXNDaG9zZW4oZmlsZXMpOworICAgICAgICBmaWxlcy51bmNoZWNrZWRBcHBlbmQoeyBm
aWxlbmFtZXNbaV0sIGkgPCByZXBsYWNlbWVudE5hbWVzLnNpemUoKSA/IHJlcGxhY2VtZW50TmFt
ZXNbaV0gOiBudWxsU3RyaW5nKCksIHsgfSB9KTsKKyAgICBtX2NsaWVudC0+ZmlsZXNDaG9zZW4o
V1RGTW92ZShmaWxlcykpOwogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTg2LDE5
ICs4NSwxOSBAQCB2b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VNZWRpYUZpbGVzKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBmaWxlbmFtZXMsIGNvbnN0IFN0cmluZwogICAgIGlmICghbV9jbGllbnQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJbmZvPiBmaWxlczsK
LSAgICBmb3IgKGF1dG8mIGZpbGVuYW1lIDogZmlsZW5hbWVzKQotICAgICAgICBmaWxlcy5hcHBl
bmQoeyBmaWxlbmFtZSwgeyB9LCB7IH0gfSk7Ci0gICAgbV9jbGllbnQtPmZpbGVzQ2hvc2VuKGZp
bGVzLCBkaXNwbGF5U3RyaW5nLCBpY29uKTsKKyAgICBhdXRvIGZpbGVzID0gZmlsZW5hbWVzLm1h
cChbXShhdXRvJiBmaWxlbmFtZSkgeworICAgICAgICByZXR1cm4gRmlsZUNob29zZXJGaWxlSW5m
byB7IGZpbGVuYW1lLCB7IH0sIHsgfSB9OworICAgIH0pOworICAgIG1fY2xpZW50LT5maWxlc0No
b3NlbihXVEZNb3ZlKGZpbGVzKSwgZGlzcGxheVN0cmluZywgaWNvbik7CiB9CiAKICNlbmRpZgog
CiB2b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlcyhjb25zdCBWZWN0b3I8RmlsZUNob29zZXJG
aWxlSW5mbz4mIGZpbGVzKQogewotICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhzOwotICAgIGZvciAo
YXV0byYgZmlsZSA6IGZpbGVzKQotICAgICAgICBwYXRocy5hcHBlbmQoZmlsZS5wYXRoKTsKKyAg
ICBhdXRvIHBhdGhzID0gZmlsZXMubWFwKFtdKGF1dG8mIGZpbGUpIHsKKyAgICAgICAgcmV0dXJu
IGZpbGUucGF0aDsKKyAgICB9KTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGluZWxlZ2FudC4g
V2Ugc2hvdWxkIG5vdCBiZSBsb29raW5nIGF0IHNldHRpbmdzIGhlcmUuCiAgICAgaWYgKG1fc2V0
dGluZ3Muc2VsZWN0ZWRGaWxlcyA9PSBwYXRocykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFy
ZWRCdWZmZXIuY3BwCmluZGV4IGQwOWYxMDUyYTBmMzFlZTk3MDYxMTAxM2IzOTM1ZmI1MzA5NTUw
OTYuLmY4N2I2YTRmNjNiMjZhMjE4ODIwNmU5MzhhYTU4NTc5N2FiMzk1ZTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcApAQCAtMjA2LDkgKzIwNiw3IEBAIHZvaWQg
RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKGNvbnN0IEZyYWdtZW50ZWRTaGFyZWRCdWZm
ZXImIGRhdGEpCiB2b2lkIEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25zdCB1aW50
OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKQogewogICAgIEFTU0VSVCghbV9jb250aWd1b3VzKTsK
LSAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yOwotICAgIHZlY3Rvci5hcHBlbmQoZGF0YSwgbGVu
Z3RoKTsKLSAgICBtX3NlZ21lbnRzLmFwcGVuZCh7IG1fc2l6ZSwgRGF0YVNlZ21lbnQ6OmNyZWF0
ZShXVEZNb3ZlKHZlY3RvcikpIH0pOworICAgIG1fc2VnbWVudHMuYXBwZW5kKHsgbV9zaXplLCBE
YXRhU2VnbWVudDo6Y3JlYXRlKFZlY3RvciB7IGRhdGEsIGxlbmd0aCB9KSB9KTsKICAgICBtX3Np
emUgKz0gbGVuZ3RoOwogICAgIEFTU0VSVChpbnRlcm5hbGx5Q29uc2lzdGVudCgpKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZFNhZmVEYXRhQnVmZmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRTYWZlRGF0YUJ1ZmZlci5oCmluZGV4IGQz
OTdkMjI3ZGZjNTM0YWQwY2Y1ODcwMmJlMWNhNTgwMjQ5OWEwYmIuLjY2MjdmZWJjYjdmNGUxZGFk
ODExMWUxNGE5MTIxNDQ4ODE2NmE5NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1RocmVhZFNhZmVEYXRhQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
VGhyZWFkU2FmZURhdGFCdWZmZXIuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UK
IAorI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNv
dW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTE0Myw0ICsxNDQsMTUgQEAg
Ym9vbCBUaHJlYWRTYWZlRGF0YUJ1ZmZlcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFRocmVh
ZFNhZmVEYXRhQnVmZmVyJiByZXN1bHQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAoraW5saW5lIHZv
aWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgYnVmZmVy
KQoreworICAgIGF1dG8qIGRhdGEgPSBidWZmZXIuZGF0YSgpOworICAgIGlmICghZGF0YSkgewor
ICAgICAgICBhZGQoaGFzaGVyLCB0cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBh
ZGQoaGFzaGVyLCBmYWxzZSk7CisgICAgYWRkKGhhc2hlciwgKmRhdGEpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHAKaW5kZXggMWNmMzljYWNmMzAyNDUwOGU4
ZDEyZTg2NDVjNTA4Njc3MjE5NDM1Yi4uYmZlMThlMjlkMjZlYzg5YTNmNDAyZDcxODMxMzgyMDE2
MjNlNTE3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9E
U1BLZXJuZWxQcm9jZXNzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0F1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmNwcApAQCAtNTYsOCArNTYsOSBAQCB2b2lkIEF1ZGlv
RFNQS2VybmVsUHJvY2Vzc29yOjppbml0aWFsaXplKCkKICAgICAgICAgRGlzYWJsZU1hbGxvY1Jl
c3RyaWN0aW9uc0ZvckN1cnJlbnRUaHJlYWRTY29wZSBkaXNhYmxlTWFsbG9jUmVzdHJpY3Rpb25z
OwogCiAgICAgICAgIC8vIENyZWF0ZSBwcm9jZXNzaW5nIGtlcm5lbHMsIG9uZSBwZXIgY2hhbm5l
bC4KKyAgICAgICAgbV9rZXJuZWxzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZDaGFu
bmVscygpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5l
bHMoKTsgKytpKQotICAgICAgICAgICAgbV9rZXJuZWxzLmFwcGVuZChjcmVhdGVLZXJuZWwoKSk7
CisgICAgICAgICAgICBtX2tlcm5lbHMudW5jaGVja2VkQXBwZW5kKGNyZWF0ZUtlcm5lbCgpKTsK
ICAgICB9CiAgICAgbV9pbml0aWFsaXplZCA9IHRydWU7CiAgICAgbV9oYXNKdXN0UmVzZXQgPSB0
cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9SZXNh
bXBsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9SZXNhbXBsZXIu
Y3BwCmluZGV4IGRlNTA4Y2M2ZWY0YTViMDFiZDRlYjIyNDc0NWI3ZWYyODI4NDBmOGUuLjc0Njlj
ZTRkZTNmM2MxODg4OTI4ZjU0OTdkMTJjZTU2ZGI2ZTZkMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUmVzYW1wbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1Jlc2FtcGxlci5jcHAKQEAgLTQyLDggKzQyLDkgQEAg
QXVkaW9SZXNhbXBsZXI6OkF1ZGlvUmVzYW1wbGVyKCkKIAogQXVkaW9SZXNhbXBsZXI6OkF1ZGlv
UmVzYW1wbGVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMpCiB7CisgICAgbV9rZXJuZWxzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZDaGFubmVscyk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkKLSAgICAgICAgbV9rZXJuZWxzLmFw
cGVuZChtYWtlVW5pcXVlPEF1ZGlvUmVzYW1wbGVyS2VybmVsPih0aGlzKSk7CisgICAgICAgIG1f
a2VybmVscy51bmNoZWNrZWRBcHBlbmQobWFrZVVuaXF1ZTxBdWRpb1Jlc2FtcGxlcktlcm5lbD4o
dGhpcykpOwogCiAgICAgbV9zb3VyY2VCdXMgPSBBdWRpb0J1czo6Y3JlYXRlKG51bWJlck9mQ2hh
bm5lbHMsIDAsIGZhbHNlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwCmluZGV4IDlmMzE4MWNmYmI0
MDIyNzc3OTk2MjNiOWJmZGRjZGQ0OTU5YzAwYjAuLjUwMzJlZWE3YTcyYjIzZGUyYTIwMmJjMTUz
NjAzNWNiYWVkMDE2MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcApAQCAtNjEsOCArNjEsOSBAQCB2
b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0TnVtYmVyT2ZDaGFubmVscyh1bnNpZ25l
ZCBudW1iZXJPZkNoYW5uZWxzKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3ByZURlbGF5QnVm
ZmVycy5jbGVhcigpOworICAgIG1fcHJlRGVsYXlCdWZmZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkobnVtYmVyT2ZDaGFubmVscyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJl
ck9mQ2hhbm5lbHM7ICsraSkKLSAgICAgICAgbV9wcmVEZWxheUJ1ZmZlcnMuYXBwZW5kKG1ha2VV
bmlxdWU8QXVkaW9GbG9hdEFycmF5PihNYXhQcmVEZWxheUZyYW1lcykpOworICAgICAgICBtX3By
ZURlbGF5QnVmZmVycy51bmNoZWNrZWRBcHBlbmQobWFrZVVuaXF1ZTxBdWRpb0Zsb2F0QXJyYXk+
KE1heFByZURlbGF5RnJhbWVzKSk7CiB9CiAKIHZvaWQgRHluYW1pY3NDb21wcmVzc29yS2VybmVs
OjpzZXRQcmVEZWxheVRpbWUoZmxvYXQgcHJlRGVsYXlUaW1lKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTXVsdGlDaGFubmVsUmVzYW1wbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL011bHRpQ2hhbm5lbFJlc2FtcGxlci5jcHAKaW5kZXgg
Yjk2NmZhMDZjZDMwZWIzNGRmNzFmY2ZiZGU3YzE2NTgyMzExMTIxZi4uMTcwMjNiNjQyNjFiZGZk
Mzc1ZWUwOWZlMjk2YjNiZGE4ODI3ZjJlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vTXVsdGlDaGFubmVsUmVzYW1wbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9NdWx0aUNoYW5uZWxSZXNhbXBsZXIuY3BwCkBAIC01Myw4ICs1Myw5
IEBAIE11bHRpQ2hhbm5lbFJlc2FtcGxlcjo6TXVsdGlDaGFubmVsUmVzYW1wbGVyKGRvdWJsZSBz
Y2FsZUZhY3RvciwgdW5zaWduZWQgbnVtYmVyCiAgICAgfQogCiAgICAgLy8gQ3JlYXRlIGVhY2gg
Y2hhbm5lbCdzIHJlc2FtcGxlci4KKyAgICBtX2tlcm5lbHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShudW1iZXJPZkNoYW5uZWxzKTsKICAgICBmb3IgKHVuc2lnbmVkIGNoYW5uZWxJbmRleCA9IDA7
IGNoYW5uZWxJbmRleCA8IG51bWJlck9mQ2hhbm5lbHM7ICsrY2hhbm5lbEluZGV4KQotICAgICAg
ICBtX2tlcm5lbHMuYXBwZW5kKG1ha2VVbmlxdWU8U2luY1Jlc2FtcGxlcj4oc2NhbGVGYWN0b3Is
IHJlcXVlc3RGcmFtZXMsIHN0ZDo6YmluZCgmTXVsdGlDaGFubmVsUmVzYW1wbGVyOjpwcm92aWRl
SW5wdXRGb3JDaGFubmVsLCB0aGlzLCBzdGQ6OnBsYWNlaG9sZGVyczo6XzEsIHN0ZDo6cGxhY2Vo
b2xkZXJzOjpfMiwgY2hhbm5lbEluZGV4KSkpOworICAgICAgICBtX2tlcm5lbHMudW5jaGVja2Vk
QXBwZW5kKG1ha2VVbmlxdWU8U2luY1Jlc2FtcGxlcj4oc2NhbGVGYWN0b3IsIHJlcXVlc3RGcmFt
ZXMsIHN0ZDo6YmluZCgmTXVsdGlDaGFubmVsUmVzYW1wbGVyOjpwcm92aWRlSW5wdXRGb3JDaGFu
bmVsLCB0aGlzLCBzdGQ6OnBsYWNlaG9sZGVyczo6XzEsIHN0ZDo6cGxhY2Vob2xkZXJzOjpfMiwg
Y2hhbm5lbEluZGV4KSkpOwogfQogCiBNdWx0aUNoYW5uZWxSZXNhbXBsZXI6On5NdWx0aUNoYW5u
ZWxSZXNhbXBsZXIoKSA9IGRlZmF1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1t
CmluZGV4IDA1ZWEyMTExZWI1ZDQ1M2NiMjhkOGU3N2VmM2NiZjVmMzU2NzE5ODkuLmZhMzBhZmRl
M2IxZTFlMzZlODYxYWVjYmQ5ZmJlOGM3ZjA5MDM1NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50Lm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVk
aWFFbGVtZW50Lm1tCkBAIC01MzQsMTQgKzUzNCwxMiBAQCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25P
cHRpb24+IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxl
YwogICAgIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gbGVnaWJsZU9wdGlvbnM7CiAKICAg
ICBpZiAoIW1fbWVkaWFFbGVtZW50IHx8ICFtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdl
KCkpCi0gICAgICAgIHJldHVybiBsZWdpYmxlT3B0aW9uczsKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAogICAgIGF1dG8mIGNhcHRpb25QcmVmZXJlbmNlcyA9IG1fbWVkaWFFbGVtZW50LT5kb2N1bWVu
dCgpLnBhZ2UoKS0+Z3JvdXAoKS5lbnN1cmVDYXB0aW9uUHJlZmVyZW5jZXMoKTsKLQotICAgIGZv
ciAoYXV0byYgdHJhY2sgOiBtX2xlZ2libGVUcmFja3NGb3JNZW51KQotICAgICAgICBsZWdpYmxl
T3B0aW9ucy5hcHBlbmQoY2FwdGlvblByZWZlcmVuY2VzLm1lZGlhU2VsZWN0aW9uT3B0aW9uRm9y
VHJhY2sodHJhY2suZ2V0KCkpKTsKLQotICAgIHJldHVybiBsZWdpYmxlT3B0aW9uczsKKyAgICBy
ZXR1cm4gbV9sZWdpYmxlVHJhY2tzRm9yTWVudS5tYXAoWyZdKGF1dG8mIHRyYWNrKSB7CisgICAg
ICAgIHJldHVybiBjYXB0aW9uUHJlZmVyZW5jZXMubWVkaWFTZWxlY3Rpb25PcHRpb25Gb3JUcmFj
ayh0cmFjay5nZXQoKSk7CisgICAgfSk7CiB9CiAKIHVpbnQ2NF90IFBsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL0R1YWxzaG9jazNISURH
YW1lcGFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL0R1YWxzaG9j
azNISURHYW1lcGFkLmNwcAppbmRleCA2YzQwZThiODg5Mjg3M2ZmMDcyMDYxOGNmZTgzOTY0Yzgw
ZWMzNDFlLi5jMGY1MTgxYmM0NGIxYmRjZWJhNjliOGNiNmEzNGE5ZWExMjdkZjY1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9EdWFsc2hvY2szSElER2Ft
ZXBhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvRHVhbHNo
b2NrM0hJREdhbWVwYWQuY3BwCkBAIC00MywxMiArNDMsMTAgQEAgRHVhbHNob2NrM0hJREdhbWVw
YWQ6OkR1YWxzaG9jazNISURHYW1lcGFkKEhJRERldmljZSYmIGRldmljZSwgdW5zaWduZWQgaW5k
ZXgpCiAKICAgICBtX21hcHBpbmcgPSBzdGFuZGFyZEdhbWVwYWRNYXBwaW5nU3RyaW5nKCk7CiAK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mU3RhbmRhcmRHYW1lcGFkQnV0dG9u
c1dpdGhIb21lQnV0dG9uOyArK2kpCi0gICAgICAgIG1fYnV0dG9uVmFsdWVzLmFwcGVuZCgwLjAp
OworICAgIG1fYnV0dG9uVmFsdWVzID0gVmVjdG9yKG51bWJlck9mU3RhbmRhcmRHYW1lcGFkQnV0
dG9uc1dpdGhIb21lQnV0dG9uLCBTaGFyZWRHYW1lcGFkVmFsdWUgeyAwLjAgfSk7CiAKLSAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGF4aXNDb3VudCA9IDQ7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBheGlzQ291bnQ7ICsraSkKLSAgICAgICAgbV9heGlzVmFsdWVzLmFwcGVuZCgwLjApOwor
ICAgIGNvbnN0ZXhwciBzaXplX3QgYXhpc0NvdW50ID0gNDsKKyAgICBtX2F4aXNWYWx1ZXMgPSBW
ZWN0b3IoYXhpc0NvdW50LCBTaGFyZWRHYW1lcGFkVmFsdWUgeyAwLjAgfSk7CiAKICAgICBhdXRv
IGlucHV0RWxlbWVudHMgPSBoaWREZXZpY2UoKS51bmlxdWVJbnB1dEVsZW1lbnRzSW5EZXZpY2VU
cmVlT3JkZXIoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBh
ZC9tYWMvTG9naXRlY2hHYW1lcGFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVw
YWQvbWFjL0xvZ2l0ZWNoR2FtZXBhZC5jcHAKaW5kZXggNjcxNDNmYjk5NWJhMmMzZTY4ZGQyMTFk
MTY1YmU2MjBjZWY3ODllZi4uZmU0Y2VkYzUxZDYzOWZiN2IxYWU5OTMzZTVjMjY5NmMzOTc4YThl
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvTG9naXRl
Y2hHYW1lcGFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9M
b2dpdGVjaEdhbWVwYWQuY3BwCkBAIC00MywxMiArNDMsMTAgQEAgTG9naXRlY2hHYW1lcGFkOjpM
b2dpdGVjaEdhbWVwYWQoSElERGV2aWNlJiYgZGV2aWNlLCB1bnNpZ25lZCBpbmRleCkKIAogICAg
IG1fbWFwcGluZyA9IHN0YW5kYXJkR2FtZXBhZE1hcHBpbmdTdHJpbmcoKTsKIAotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZTdGFuZGFyZEdhbWVwYWRCdXR0b25zV2l0aG91dEhv
bWVCdXR0b247ICsraSkKLSAgICAgICAgbV9idXR0b25WYWx1ZXMuYXBwZW5kKDAuMCk7CisgICAg
bV9idXR0b25WYWx1ZXMgPSBWZWN0b3IobnVtYmVyT2ZTdGFuZGFyZEdhbWVwYWRCdXR0b25zV2l0
aG91dEhvbWVCdXR0b24sIFNoYXJlZEdhbWVwYWRWYWx1ZSB7IDAuMCB9KTsKIAotICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgYXhpc0NvdW50ID0gNDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGF4aXNDb3VudDsgKytpKQotICAgICAgICBtX2F4aXNWYWx1ZXMuYXBwZW5kKDAuMCk7CisgICAg
Y29uc3RleHByIHNpemVfdCBheGlzQ291bnQgPSA0OworICAgIG1fYXhpc1ZhbHVlcyA9IFZlY3Rv
cihheGlzQ291bnQsIFNoYXJlZEdhbWVwYWRWYWx1ZSB7IDAuMCB9KTsKIAogICAgIGF1dG8gaW5w
dXRFbGVtZW50cyA9IGhpZERldmljZSgpLnVuaXF1ZUlucHV0RWxlbWVudHNJbkRldmljZVRyZWVP
cmRlcigpOwogCkBAIC01OSwxMSArNTcsMTIgQEAgTG9naXRlY2hHYW1lcGFkOjpMb2dpdGVjaEdh
bWVwYWQoSElERGV2aWNlJiYgZGV2aWNlLCB1bnNpZ25lZCBpbmRleCkKICAgICBmb3IgKGF1dG8m
IGVsZW1lbnQgOiBpbnB1dEVsZW1lbnRzKSB7CiAgICAgICAgIHN3aXRjaCAoZWxlbWVudC5mdWxs
VXNhZ2UoKSkgewogICAgICAgICBjYXNlIGhpZEhhdHN3aXRjaEZ1bGxVc2FnZTogewotICAgICAg
ICAgICAgVmVjdG9yPFNoYXJlZEdhbWVwYWRWYWx1ZT4gaGF0c3dpdGNoVmFsdWVzOwotICAgICAg
ICAgICAgaGF0c3dpdGNoVmFsdWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVw
YWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlclRvcF0pOwotICAgICAgICAgICAgaGF0c3dpdGNoVmFs
dWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0
Q2x1c3RlclJpZ2h0XSk7Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0
dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyQm90dG9tXSk7
Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFsdWVzWyhzaXpl
X3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyTGVmdF0pOworICAgICAgICAgICAgYXV0
byBoYXRzd2l0Y2hWYWx1ZXMgPSBWZWN0b3IgeworICAgICAgICAgICAgICAgIG1fYnV0dG9uVmFs
dWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyVG9wXSwKKyAgICAgICAg
ICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1
c3RlclJpZ2h0XSwKKyAgICAgICAgICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVw
YWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlckJvdHRvbV0sCisgICAgICAgICAgICAgICAgbV9idXR0
b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJMZWZ0XQorICAg
ICAgICAgICAgfTsKIAogICAgICAgICAgICAgbV9lbGVtZW50TWFwLnNldChlbGVtZW50LmNvb2tp
ZSgpLCBtYWtlVW5pcXVlPEhJREdhbWVwYWRIYXRzd2l0Y2g+KGVsZW1lbnQsIFdURk1vdmUoaGF0
c3dpdGNoVmFsdWVzKSkpOwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9TdGFkaWFISURHYW1lcGFkLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL1N0YWRpYUhJREdhbWVwYWQuY3BwCmluZGV4
IDBhOTRlNTYyMzNhMjA0NDY0MWYxMDBmMDU2NDRkNTc1YWRiYzllNzMuLjQyMTU5MjdjNDk0YzNl
ZWU2YzEyNTBhYjU1NjQxZmE3MmEyMjA2OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dhbWVwYWQvbWFjL1N0YWRpYUhJREdhbWVwYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL1N0YWRpYUhJREdhbWVwYWQuY3BwCkBAIC00MSwxMiAr
NDEsMTAgQEAgU3RhZGlhSElER2FtZXBhZDo6U3RhZGlhSElER2FtZXBhZChISUREZXZpY2UmJiBk
ZXZpY2UsIHVuc2lnbmVkIGluZGV4KQogCiAgICAgbV9tYXBwaW5nID0gc3RhbmRhcmRHYW1lcGFk
TWFwcGluZ1N0cmluZygpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxOTsgKytpKQot
ICAgICAgICBtX2J1dHRvblZhbHVlcy5hcHBlbmQoMC4wKTsKKyAgICBtX2J1dHRvblZhbHVlcyA9
IFZlY3RvcigxOSwgU2hhcmVkR2FtZXBhZFZhbHVlIHsgMC4wIH0pOwogCi0gICAgc3RhdGljIGNv
bnN0IHNpemVfdCBheGlzQ291bnQgPSA0OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXhp
c0NvdW50OyArK2kpCi0gICAgICAgIG1fYXhpc1ZhbHVlcy5hcHBlbmQoMC4wKTsKKyAgICBjb25z
dGV4cHIgc2l6ZV90IGF4aXNDb3VudCA9IDQ7CisgICAgbV9heGlzVmFsdWVzID0gVmVjdG9yKGF4
aXNDb3VudCwgU2hhcmVkR2FtZXBhZFZhbHVlIHsgMC4wIH0pOwogCiAgICAgYXV0byBpbnB1dEVs
ZW1lbnRzID0gaGlkRGV2aWNlKCkudW5pcXVlSW5wdXRFbGVtZW50c0luRGV2aWNlVHJlZU9yZGVy
KCk7CiAKQEAgLTcwLDExICs2OCwxMiBAQCBTdGFkaWFISURHYW1lcGFkOjpTdGFkaWFISURHYW1l
cGFkKEhJRERldmljZSYmIGRldmljZSwgdW5zaWduZWQgaW5kZXgpCiAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICBjYXNlIGhpZEhhdHN3aXRjaEZ1bGxVc2FnZTogewotICAgICAgICAgICAg
VmVjdG9yPFNoYXJlZEdhbWVwYWRWYWx1ZT4gaGF0c3dpdGNoVmFsdWVzOwotICAgICAgICAgICAg
aGF0c3dpdGNoVmFsdWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0
b25Sb2xlOjpMZWZ0Q2x1c3RlclRvcF0pOwotICAgICAgICAgICAgaGF0c3dpdGNoVmFsdWVzLmFw
cGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3Rl
clJpZ2h0XSk7Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFs
dWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyQm90dG9tXSk7Ci0gICAg
ICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2Ft
ZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyTGVmdF0pOworICAgICAgICAgICAgYXV0byBoYXRz
d2l0Y2hWYWx1ZXMgPSBWZWN0b3IgeworICAgICAgICAgICAgICAgIG1fYnV0dG9uVmFsdWVzWyhz
aXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyVG9wXSwKKyAgICAgICAgICAgICAg
ICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlclJp
Z2h0XSwKKyAgICAgICAgICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0
b25Sb2xlOjpMZWZ0Q2x1c3RlckJvdHRvbV0sCisgICAgICAgICAgICAgICAgbV9idXR0b25WYWx1
ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJMZWZ0XQorICAgICAgICAg
ICAgfTsKIAogICAgICAgICAgICAgbV9lbGVtZW50TWFwLnNldChlbGVtZW50LmNvb2tpZSgpLCBt
YWtlVW5pcXVlPEhJREdhbWVwYWRIYXRzd2l0Y2g+KGVsZW1lbnQsIFdURk1vdmUoaGF0c3dpdGNo
VmFsdWVzKSkpOwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IDFmZWUyOWFlNWY3MTljNGU1
NTRhMmM3ZTcwY2I3MGYwMWY5YjIwMDIuLjcyNGZiMTdjMzNmNGJjYTQ2ODg5YzgzYmM1NTg0OGZk
NzI3MGMzMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuY3BwCkBAIC03NjMsMTEgKzc2Myw5IEBAIHZvaWQgR3JhcGhpY3NMYXllcjo6
YWRkUmVwYWludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZXBhaW50UmVjdCkKICAgICBGbG9hdFJl
Y3QgbGFyZ2VzdFJlcGFpbnRSZWN0KEZsb2F0UG9pbnQoKSwgbV9zaXplKTsKICAgICBsYXJnZXN0
UmVwYWludFJlY3QuaW50ZXJzZWN0KHJlcGFpbnRSZWN0KTsKICAgICBSZXBhaW50TWFwOjppdGVy
YXRvciByZXBhaW50SXQgPSByZXBhaW50UmVjdE1hcCgpLmZpbmQodGhpcyk7Ci0gICAgaWYgKHJl
cGFpbnRJdCA9PSByZXBhaW50UmVjdE1hcCgpLmVuZCgpKSB7Ci0gICAgICAgIFZlY3RvcjxGbG9h
dFJlY3Q+IHJlcGFpbnRSZWN0czsKLSAgICAgICAgcmVwYWludFJlY3RzLmFwcGVuZChsYXJnZXN0
UmVwYWludFJlY3QpOwotICAgICAgICByZXBhaW50UmVjdE1hcCgpLnNldCh0aGlzLCByZXBhaW50
UmVjdHMpOwotICAgIH0gZWxzZSB7CisgICAgaWYgKHJlcGFpbnRJdCA9PSByZXBhaW50UmVjdE1h
cCgpLmVuZCgpKQorICAgICAgICByZXBhaW50UmVjdE1hcCgpLnNldCh0aGlzLCBWZWN0b3IgeyBX
VEZNb3ZlKGxhcmdlc3RSZXBhaW50UmVjdCkgfSk7CisgICAgZWxzZSB7CiAgICAgICAgIFZlY3Rv
cjxGbG9hdFJlY3Q+JiByZXBhaW50UmVjdHMgPSByZXBhaW50SXQtPnZhbHVlOwogICAgICAgICBy
ZXBhaW50UmVjdHMuYXBwZW5kKGxhcmdlc3RSZXBhaW50UmVjdCk7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcAppbmRleCBi
OTc5OWE0ZDEwNjFlZDIwYTFiNTBlZDUwNjg2NTFjNWZlYTQ2NmE0Li4xZDAwNGZjMTE0YWNiNzE1
YjEwNTI1OTAzMzZiMDZmY2VjMzAzMDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcApAQCAtMjkwLDE3ICsyOTAsMTQgQEAgc3Rh
dGljIFZlY3RvcjxGbG9hdFBvaW50R3JhcGg6OlBvbHlnb24+IHBvbHlnb25zRm9yUmVjdChjb25z
dCBWZWN0b3I8RmxvYXRSZWN0PiYKIAogVmVjdG9yPFBhdGg+IFBhdGhVdGlsaXRpZXM6OnBhdGhz
V2l0aFNocmlua1dyYXBwZWRSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZs
b2F0IHJhZGl1cykKIHsKLSAgICBWZWN0b3I8UGF0aD4gcGF0aHM7Ci0KICAgICBpZiAocmVjdHMu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gcGF0aHM7CisgICAgICAgIHJldHVybiB7IH07CiAK
ICAgICBpZiAocmVjdHMuc2l6ZSgpID4gMjApIHsKICAgICAgICAgUGF0aCBwYXRoOwogICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiByZWN0cykKICAgICAgICAgICAgIHBhdGguYWRkUm91
bmRlZFJlY3QocmVjdCwgRmxvYXRTaXplKHJhZGl1cywgcmFkaXVzKSk7Ci0gICAgICAgIHBhdGhz
LmFwcGVuZChwYXRoKTsKLSAgICAgICAgcmV0dXJuIHBhdGhzOworICAgICAgICByZXR1cm4geyBX
VEZNb3ZlKHBhdGgpIH07CiAgICAgfQogCiAgICAgRmxvYXRQb2ludEdyYXBoIGdyYXBoOwpAQCAt
MzA5LDEwICszMDYsMTEgQEAgVmVjdG9yPFBhdGg+IFBhdGhVdGlsaXRpZXM6OnBhdGhzV2l0aFNo
cmlua1dyYXBwZWRSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYKICAgICAgICAgUGF0aCBw
YXRoOwogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiByZWN0cykKICAgICAgICAgICAg
IHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCwgRmxvYXRTaXplKHJhZGl1cywgcmFkaXVzKSk7Ci0g
ICAgICAgIHBhdGhzLmFwcGVuZChwYXRoKTsKLSAgICAgICAgcmV0dXJuIHBhdGhzOworICAgICAg
ICByZXR1cm4geyBXVEZNb3ZlKHBhdGgpIH07CiAgICAgfQogCisgICAgVmVjdG9yPFBhdGg+IHBh
dGhzOworICAgIHBhdGhzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocG9seXMuc2l6ZSgpKTsKICAg
ICBmb3IgKGF1dG8mIHBvbHkgOiBwb2x5cykgewogICAgICAgICBQYXRoIHBhdGg7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwb2x5LnNpemUoKTsgKytpKSB7CkBAIC0zNDQsNyAr
MzQyLDcgQEAgVmVjdG9yPFBhdGg+IFBhdGhVdGlsaXRpZXM6OnBhdGhzV2l0aFNocmlua1dyYXBw
ZWRSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYKICAgICAgICAgICAgIHBhdGguYWRkQXJj
VG8oKmZyb21FZGdlLnNlY29uZCwgKnRvRWRnZS5maXJzdCArIHRvT2Zmc2V0LCBjbGFtcGVkUmFk
aXVzKTsKICAgICAgICAgfQogICAgICAgICBwYXRoLmNsb3NlU3VicGF0aCgpOwotICAgICAgICBw
YXRocy5hcHBlbmQocGF0aCk7CisgICAgICAgIHBhdGhzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3Zl
KHBhdGgpKTsKICAgICB9CiAgICAgcmV0dXJuIHBhdGhzOwogfQpAQCAtNTQzLDEzICs1NDEsMTQg
QEAgUGF0aCBQYXRoVXRpbGl0aWVzOjpwYXRoV2l0aFNocmlua1dyYXBwZWRSZWN0c0Zvck91dGxp
bmUoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4KICAgICBib3R0b21MZWZ0UmFkaXVzID0gZmlyc3RM
aW5lUmFkaWkuYm90dG9tTGVmdCgpOwogICAgIHRvcFJpZ2h0UmFkaXVzID0gbGFzdExpbmVSYWRp
aS50b3BSaWdodCgpOwogICAgIGJvdHRvbVJpZ2h0UmFkaXVzID0gbGFzdExpbmVSYWRpaS5ib3R0
b21SaWdodCgpOwotICAgIFZlY3RvcjxGbG9hdFBvaW50PiBjb3JuZXJzOwogICAgIC8vIHBoeXNp
Y2FsIHRvcExlZnQvdG9wUmlnaHQvYm90dG9tUmlnaHQvYm90dG9tTGVmdAogICAgIGF1dG8gaXNI
b3Jpem9udGFsID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpOwotICAgIGNv
cm5lcnMuYXBwZW5kKGZpcnN0TGluZVJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci0gICAgY29ybmVy
cy5hcHBlbmQoaXNIb3Jpem9udGFsID8gbGFzdExpbmVSZWN0Lm1heFhNaW5ZQ29ybmVyKCkgOiBm
aXJzdExpbmVSZWN0Lm1heFhNaW5ZQ29ybmVyKCkpOwotICAgIGNvcm5lcnMuYXBwZW5kKGxhc3RM
aW5lUmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKLSAgICBjb3JuZXJzLmFwcGVuZChpc0hvcml6b250
YWwgPyBmaXJzdExpbmVSZWN0Lm1pblhNYXhZQ29ybmVyKCkgOiBsYXN0TGluZVJlY3QubWluWE1h
eFlDb3JuZXIoKSk7CisgICAgYXV0byBjb3JuZXJzID0gVmVjdG9yPEZsb2F0UG9pbnQ+Ojpmcm9t
KAorICAgICAgICBmaXJzdExpbmVSZWN0Lm1pblhNaW5ZQ29ybmVyKCksCisgICAgICAgIGlzSG9y
aXpvbnRhbCA/IGxhc3RMaW5lUmVjdC5tYXhYTWluWUNvcm5lcigpIDogZmlyc3RMaW5lUmVjdC5t
YXhYTWluWUNvcm5lcigpLAorICAgICAgICBsYXN0TGluZVJlY3QubWF4WE1heFlDb3JuZXIoKSwK
KyAgICAgICAgaXNIb3Jpem9udGFsID8gZmlyc3RMaW5lUmVjdC5taW5YTWF4WUNvcm5lcigpIDog
bGFzdExpbmVSZWN0Lm1pblhNYXhZQ29ybmVyKCkKKyAgICApOwogCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHBvbHkuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgYXV0byBtb3ZlT3JBZGRM
aW5lVG8gPSBbaSwgJnBhdGhdIChjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2
YXRlLmNwcAppbmRleCA1NDk5ZjM3YTdmMzY0NmJkNWYzOTVhNDhiMDlkOTQxMWQ0YzliNjY0Li4w
NGNiZTRkMjdmMTkwYjdiMjdiOWNhN2U5OGE5YzQ3MTczZDJmODliIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNw
cApAQCAtMjE2LDEwICsyMTYsOSBAQCB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGU6OmJ1ZmZlcmVk
U2FtcGxlc0ZvclRyYWNrSWQoY29uc3QgQXRvbVN0cmluZyYgdHJhY2tJZCwgQwogICAgIGlmICgh
dHJhY2tCdWZmZXIpCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAKLSAgICBWZWN0
b3I8U3RyaW5nPiBzYW1wbGVEZXNjcmlwdGlvbnM7Ci0gICAgZm9yIChhdXRvJiBwYWlyIDogdHJh
Y2tCdWZmZXItPnNhbXBsZXMuZGVjb2RlT3JkZXIoKSkKLSAgICAgICAgc2FtcGxlRGVzY3JpcHRp
b25zLmFwcGVuZCh0b1N0cmluZygqcGFpci5zZWNvbmQpKTsKLQorICAgIGF1dG8gc2FtcGxlRGVz
Y3JpcHRpb25zID0gV1RGOjptYXAodHJhY2tCdWZmZXItPnNhbXBsZXMuZGVjb2RlT3JkZXIoKSwg
W10oYXV0byYgZW50cnkpIHsKKyAgICAgICAgcmV0dXJuIHRvU3RyaW5nKCplbnRyeS5zZWNvbmQp
OworICAgIH0pOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoc2FtcGxlRGVzY3JpcHRp
b25zKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCmlu
ZGV4IDhiMDRmOWJlOTZjMzZlMGEyNjIxODBhMjVlYTM3NDU5NjJiM2Q3ZDUuLmM1NDYxNDYyM2I4
N2VjMDg5NjFmMWQ0NDIwZjk2MDFmMTZhNmFiNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZh
aXJQbGF5U3RyZWFtaW5nLmNwcApAQCAtMjAxLDkgKzIwMSw3IEBAIFJlZlB0cjxGcmFnbWVudGVk
U2hhcmVkQnVmZmVyPiBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OnNhbml0aXplU2tkKGNv
bnN0IEZyCiBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxSZWY8RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4+
PiBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OmV4dHJhY3RLZXlJRHNTa2QoY29uc3QgRnJh
Z21lbnRlZFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogewogICAgIC8vIEluIHRoZSAnc2tkJyBzY2hl
bWUsIHRoZSBpbml0IGRhdGEgaXMgdGhlIGtleSBJRC4KLSAgICBWZWN0b3I8UmVmPEZyYWdtZW50
ZWRTaGFyZWRCdWZmZXI+PiBrZXlJRHM7Ci0gICAga2V5SURzLmFwcGVuZChidWZmZXIuY29weSgp
KTsKLSAgICByZXR1cm4ga2V5SURzOworICAgIHJldHVybiBWZWN0b3IgeyBidWZmZXIuY29weSgp
IH07CiB9CiAKIHN0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhh
c2hTZXQ8QXRvbVN0cmluZz4mIHZhbGlkSW5pdERhdGFUeXBlcygpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5j
ZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZP
YmpDLm1tCmluZGV4IGQ2MzYxMmZhYTA1MzcwYTAzOTczYTFlMmQ1NmMxODY4YTJmOTkxNjAuLjk2
MjVmYTk1MDNlN2JlYmM3MTlmYzRiMzdhNjNjMzhkNzQ1MDMwOGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNl
RmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdB
VkZPYmpDLm1tCkBAIC0xNDk0LDcgKzE0OTQsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZh
aXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6dXBkYXRlS2V5U3RhdHVzZXMoc3RkOjpvcHRpb25hbAog
ICAgICAgICB9CiAgICAgfQogCi0gICAgbV9rZXlTdGF0dXNlcy5zd2FwKGtleVN0YXR1c2VzKTsK
KyAgICBtX2tleVN0YXR1c2VzID0gV1RGTW92ZShrZXlTdGF0dXNlcyk7CiAKICAgICBtX2luc3Rh
bmNlLT5zZXNzaW9uS2V5U3RhdHVzZXNDaGFuZ2VkKCp0aGlzKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVj
b2RlckFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1tCmluZGV4IDU2M2FmMTkyNGQ5YWYzNTll
OTMwZWY2NGJhZTMyM2ZjMDQxZGU4N2EuLmFkN2Y0NTEwMWMwNmExODg4YzAwOGZhZWQ0YTkxOTA1
NjEzODI5M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVjb2RlckFWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVyQVZGT2Jq
Qy5tbQpAQCAtNTM1LDEzICs1MzUsMTAgQEAgVmVjdG9yPEltYWdlRGVjb2Rlcjo6RnJhbWVJbmZv
PiBJbWFnZURlY29kZXJBVkZPYmpDOjpmcmFtZUluZm9zKCkgY29uc3QKICAgICBpZiAobV9zYW1w
bGVEYXRhLmVtcHR5KCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBWZWN0b3I8SW1hZ2VE
ZWNvZGVyOjpGcmFtZUluZm8+IGluZm9zOwotICAgIGZvciAoYXV0byYgc2FtcGxlIDogbV9zYW1w
bGVEYXRhLnByZXNlbnRhdGlvbk9yZGVyKCkpIHsKKyAgICByZXR1cm4gV1RGOjptYXAobV9zYW1w
bGVEYXRhLnByZXNlbnRhdGlvbk9yZGVyKCksIFtdKGF1dG8mIHNhbXBsZSkgewogICAgICAgICBh
dXRvKiBpbWFnZVNhbXBsZSA9IChJbWFnZURlY29kZXJBVkZPYmpDU2FtcGxlKilzYW1wbGUuc2Vj
b25kLmdldCgpOwotICAgICAgICBpbmZvcy5hcHBlbmQoeyBpbWFnZVNhbXBsZS0+aGFzQWxwaGEo
KSwgU2Vjb25kcyhpbWFnZVNhbXBsZS0+ZHVyYXRpb24oKS50b0RvdWJsZSgpKX0pOwotICAgIH0K
LQotICAgIHJldHVybiBpbmZvczsKKyAgICAgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6RnJhbWVJ
bmZvIHsgaW1hZ2VTYW1wbGUtPmhhc0FscGhhKCksIFNlY29uZHMoaW1hZ2VTYW1wbGUtPmR1cmF0
aW9uKCkudG9Eb3VibGUoKSkgfTsKKyAgICB9KTsKIH0KIAogYm9vbCBJbWFnZURlY29kZXJBVkZP
YmpDOjpmcmFtZUFsbG93U3Vic2FtcGxpbmdBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL1NvdXJjZUJ1ZmZlclBhcnNlckFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQYXJzZXJBVkZPYmpDLm1t
CmluZGV4IGFhMTU4NDA0YjEwZTQ0NGFmNmU1ZWRkYzhkYWQ2YmE5NmVkNWNiMjIuLmU2MWIxNDdm
NjNjNWY0NTcyNzVmNjA1MDNlMzdhOGI1MmQxOGUzYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclBhcnNl
ckFWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvU291cmNlQnVmZmVyUGFyc2VyQVZGT2JqQy5tbQpAQCAtMjk3LDE2ICsyOTcs
MTQgQEAgdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJBVkZPYmpDOjpkaWRQYXJzZVN0cmVhbURhdGFB
c0Fzc2V0KEFWQXNzZXQqIGFzc2V0KQogCiAgICAgICAgICAgICBpZiAoW3RyYWNrIGhhc01lZGlh
Q2hhcmFjdGVyaXN0aWM6QVZNZWRpYUNoYXJhY3RlcmlzdGljVmlzdWFsXSkgewogICAgICAgICAg
ICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudDo6
VmlkZW9UcmFja0luZm9ybWF0aW9uIGluZm87Ci0gICAgICAgICAgICAgICAgYXV0byB2aWRlb1Ry
YWNrID0gVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmNyZWF0ZSh0cmFjayk7
Ci0gICAgICAgICAgICAgICAgaW5mby50cmFjayA9IHZpZGVvVHJhY2suY29weVJlZigpOworICAg
ICAgICAgICAgICAgIGluZm8udHJhY2sgPSBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQzo6Y3JlYXRlKHRyYWNrKTsKICAgICAgICAgICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0g
TWVkaWFEZXNjcmlwdGlvbkFWRk9iakM6OmNyZWF0ZSh0cmFjayk7Ci0gICAgICAgICAgICAgICAg
c2VnbWVudC52aWRlb1RyYWNrcy5hcHBlbmQoaW5mbyk7CisgICAgICAgICAgICAgICAgc2VnbWVu
dC52aWRlb1RyYWNrcy5hcHBlbmQoV1RGTW92ZShpbmZvKSk7CiAgICAgICAgICAgICB9IGVsc2Ug
aWYgKFt0cmFjayBoYXNNZWRpYUNoYXJhY3RlcmlzdGljOkFWTWVkaWFDaGFyYWN0ZXJpc3RpY0F1
ZGlibGVdKSB7CiAgICAgICAgICAgICAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5p
dGlhbGl6YXRpb25TZWdtZW50OjpBdWRpb1RyYWNrSW5mb3JtYXRpb24gaW5mbzsKLSAgICAgICAg
ICAgICAgICBhdXRvIGF1ZGlvVHJhY2sgPSBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQzo6Y3JlYXRlKHRyYWNrKTsKLSAgICAgICAgICAgICAgICBpbmZvLnRyYWNrID0gYXVkaW9U
cmFjay5jb3B5UmVmKCk7CisgICAgICAgICAgICAgICAgaW5mby50cmFjayA9IEF1ZGlvVHJhY2tQ
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjcmVhdGUodHJhY2spOwogICAgICAgICAgICAgICAg
IGluZm8uZGVzY3JpcHRpb24gPSBNZWRpYURlc2NyaXB0aW9uQVZGT2JqQzo6Y3JlYXRlKHRyYWNr
KTsKLSAgICAgICAgICAgICAgICBzZWdtZW50LmF1ZGlvVHJhY2tzLmFwcGVuZChpbmZvKTsKKyAg
ICAgICAgICAgICAgICBzZWdtZW50LmF1ZGlvVHJhY2tzLmFwcGVuZChXVEZNb3ZlKGluZm8pKTsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gRklYTUUoMTI1MTYxKSAgICA6IEFkZCBU
ZXh0VHJhY2sgc3VwcG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCmluZGV4IDg1NDIx
ZTNkZTcwOWNlMTU5YzQ5NGI0MGZiOGQxYWQyMzU5M2MzYmIuLmNiMmQwYmU4OTcwNDZiN2ZmOWYz
Mjc2Yzk3Njc5YWZiNGYwMTJhYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KQEAg
LTY4LDExICs2OCwxMCBAQCBWZWN0b3I8Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFZhcmlhdGlvbkF4
aXM+IEZvbnRQbGF0Zm9ybURhdGE6OnZhcmlhdGlvbkF4ZXMoU2hvdQogICAgIGlmICghcGxhdGZv
cm1Gb250KQogICAgICAgICByZXR1cm4geyB9OwogICAgIAotICAgIFZlY3RvcjxGb250VmFyaWF0
aW9uQXhpcz4gcmVzdWx0czsKLSAgICBmb3IgKGF1dG8mIFt0YWcsIHZhbHVlc10gOiBkZWZhdWx0
VmFyaWF0aW9uVmFsdWVzKHBsYXRmb3JtRm9udCwgc2hvdWxkTG9jYWxpemVBeGlzTmFtZXMpKQot
ICAgICAgICByZXN1bHRzLmFwcGVuZChGb250UGxhdGZvcm1EYXRhOjpGb250VmFyaWF0aW9uQXhp
cyh2YWx1ZXMuYXhpc05hbWUsIFN0cmluZyh0YWcuZGF0YSgpLCB0YWcuc2l6ZSgpKSwgdmFsdWVz
LmRlZmF1bHRWYWx1ZSwgdmFsdWVzLm1pbmltdW1WYWx1ZSwgdmFsdWVzLm1heGltdW1WYWx1ZSkp
OwotICAgIAotICAgIHJldHVybiByZXN1bHRzOworICAgIHJldHVybiBXVEY6Om1hcChkZWZhdWx0
VmFyaWF0aW9uVmFsdWVzKHBsYXRmb3JtRm9udCwgc2hvdWxkTG9jYWxpemVBeGlzTmFtZXMpLCBb
XShhdXRvJiYgZW50cnkpIHsKKyAgICAgICAgYXV0byYgW3RhZywgdmFsdWVzXSA9IGVudHJ5Owor
ICAgICAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YTo6Rm9udFZhcmlhdGlvbkF4aXMgeyB2YWx1
ZXMuYXhpc05hbWUsIFN0cmluZyh0YWcuZGF0YSgpLCB0YWcuc2l6ZSgpKSwgdmFsdWVzLmRlZmF1
bHRWYWx1ZSwgdmFsdWVzLm1pbmltdW1WYWx1ZSwgdmFsdWVzLm1heGltdW1WYWx1ZSB9OworICAg
IH0pOwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0
ZWJvYXJkTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMu
bW0KaW5kZXggYmE4ZWExZWI0NDhhOTIxZTMwZDNhZTZhOWM3N2U4ODIzM2FiYzUzYi4uYTJjMjUw
YWEyYmVmOGRlOTY0YmFmMDkyNDBkNWUwZWM0MTUwZWY4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KQEAgLTcwMiwxMCArNzAyLDcgQEAgQUxMT1df
REVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KICAgICAgICAgTlNVUkwgKnVybCA9IFtOU1VS
TCBVUkxXaXRoU3RyaW5nOmNvY29hRGF0YV07CiAgICAgICAgIGlmIChbdXJsIGlzRmlsZVVSTF0p
CiAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7Ci0g
ICAgICAgIHR5cGVzLmFwcGVuZChjb2NvYVR5cGUpOwotICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdp
ZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFR5cGVzKHR5cGVzLCBtX3Bhc3RlYm9hcmRO
YW1lLCBjb250ZXh0KCkpOworICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2Fy
ZFN0cmF0ZWd5KCktPnNldFR5cGVzKHsgY29jb2FUeXBlIH0sIG1fcGFzdGVib2FyZE5hbWUsIGNv
bnRleHQoKSk7CiAgICAgICAgIG1fY2hhbmdlQ291bnQgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+
cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFN0cmluZ0ZvclR5cGUoY29jb2FEYXRhLCBjb2NvYVR5
cGUsIG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQoKSk7CiAKICAgICAgICAgcmV0dXJuOwpAQCAt
NzE0LDkgKzcxMSw3IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogCiAgICAg
aWYgKCFjb2NvYVR5cGUuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIGV2ZXJ5dGhpbmcgZWxzZSB3
ZSBrbm93IG9mIGdvZXMgb24gdGhlIHBib2FyZCBhcyBhIHN0cmluZwotICAgICAgICBWZWN0b3I8
U3RyaW5nPiB0eXBlczsKLSAgICAgICAgdHlwZXMuYXBwZW5kKGNvY29hVHlwZSk7Ci0gICAgICAg
IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+YWRkVHlwZXModHlw
ZXMsIG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQoKSk7CisgICAgICAgIHBsYXRmb3JtU3RyYXRl
Z2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+YWRkVHlwZXMoeyBjb2NvYVR5cGUgfSwgbV9w
YXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKTsKICAgICAgICAgbV9jaGFuZ2VDb3VudCA9IHBsYXRm
b3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0U3RyaW5nRm9yVHlwZShj
b2NvYURhdGEsIGNvY29hVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKTsKICAgICB9
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFs
dGltZVZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9SZWFsdGltZVZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAKaW5kZXggM2UzZjQxYTFjNTgw
N2U2Y2QzNTlkZTNkZjI2YWU3MmQ1NTFjZDU4Mi4uNzdkMzI2NjU2ZDVjYmM1YWVmY2Q0MTdhMTdh
ODdhNDZmNzEyMjdiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vUmVhbHRpbWVWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlLmNwcApAQCAt
NzUsMTEgKzc1LDkgQEAgVmVjdG9yPFZpZGVvUHJlc2V0RGF0YT4gUmVhbHRpbWVWaWRlb0NhcHR1
cmVTb3VyY2U6OnByZXNldHNEYXRhKCkKIAogdm9pZCBSZWFsdGltZVZpZGVvQ2FwdHVyZVNvdXJj
ZTo6c2V0U3VwcG9ydGVkUHJlc2V0cyhWZWN0b3I8VmlkZW9QcmVzZXREYXRhPiYmIHByZXNldERh
dGEpCiB7Ci0gICAgVmVjdG9yPFJlZjxWaWRlb1ByZXNldD4+IHByZXNldHM7Ci0KLSAgICBmb3Ig
KGF1dG8mIGRhdGEgOiBwcmVzZXREYXRhKQotICAgICAgICBwcmVzZXRzLmFwcGVuZChWaWRlb1By
ZXNldDo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpKTsKLQorICAgIGF1dG8gcHJlc2V0cyA9IFdURjo6
bWFwKFdURk1vdmUocHJlc2V0RGF0YSksIFtdKGF1dG8mJiBkYXRhKSB7CisgICAgICAgIHJldHVy
biBWaWRlb1ByZXNldDo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpOworICAgIH0pOwogICAgIHNldFN1
cHBvcnRlZFByZXNldHMoV1RGTW92ZShwcmVzZXRzKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCmluZGV4IDY3YTc2
Mjk1ZDg1ZjM5MWM4M2IyNDAwZTZkMWZlNTc5Y2NkZWQ4OGYuLjYyMzYzNmFjMmFiZDY4Mzg0MTRk
YzhmMWY5MjZjZWQ1YzQ3Y2NhMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcApAQCAtMTQxLDEwICsxNDEsOCBAQCB2b2lk
IEJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmIHVybCwgVmVjdG9y
PEJsb2JQYXJ0PiYmIGJsb2JQYQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBCbG9iUGFydDo6VHlwZTo6QmxvYjogewotICAgICAgICAgICAgaWYgKGF1dG8gYmxv
YiA9IG1fYmxvYnMuZ2V0KHBhcnQudXJsKCkuc3RyaW5nKCkpKSB7Ci0gICAgICAgICAgICAgICAg
Zm9yIChjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0gOiBibG9iLT5pdGVtcygpKQotICAgICAgICAg
ICAgICAgICAgICBibG9iRGF0YS0+bV9pdGVtcy5hcHBlbmQoaXRlbSk7Ci0gICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoYXV0byBibG9iID0gbV9ibG9icy5nZXQocGFydC51cmwoKS5zdHJp
bmcoKSkpCisgICAgICAgICAgICAgICAgYmxvYkRhdGEtPm1faXRlbXMuYXBwZW5kVmVjdG9yKGJs
b2ItPml0ZW1zKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtMzI4LDcgKzMyNiw3IEBAIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6d3JpdGVCbG9ic1RvVGVt
cG9yYXJ5RmlsZXNGb3JJbmRleGVkREIoY29uc3QgVmVjdG9yPFN0cmluCiAgICAgICAgICAgICAg
ICAgZmlsZVBhdGhzLmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBmaWxlUGF0aHMuYXBwZW5kKHRlbXBGaWxlUGF0aC5pc29sYXRlZENv
cHkoKSk7CisgICAgICAgICAgICBmaWxlUGF0aHMuYXBwZW5kKFdURk1vdmUodGVtcEZpbGVQYXRo
KS5pc29sYXRlZENvcHkoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYWxsT25NYWluVGhyZWFk
KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBmaWxlUGF0
aHMgPSBXVEZNb3ZlKGZpbGVQYXRocyldICgpIG11dGFibGUgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggODUzMGUzMzU1ZjJk
NmI4ZDdmZmI2ZWRmODNkNjA4YmNhNGI5ZjU1NS4uOWFiOTk4ZTQxY2IwOGNmMGI2ZjkwZjEwZjEz
YzRiODQ1N2VjOTM5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuY3BwCkBAIC0yMDg2LDEwICsyMDg2LDggQEAgdm9pZCBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6ZHJhd0JveFNpZGVGcm9tUGF0aChHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNz
Q29udGV4dCwKICAgICAgICAgICAgICAgICBnYXBMZW5ndGggKz0gKGRhc2hMZW5ndGggIC8gbnVt
YmVyT2ZHYXBzKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgRGFzaEFycmF5IGxpbmVE
YXNoOwotICAgICAgICAgICAgbGluZURhc2guYXBwZW5kKGRhc2hMZW5ndGgpOwotICAgICAgICAg
ICAgbGluZURhc2guYXBwZW5kKGdhcExlbmd0aCk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQuc2V0TGluZURhc2gobGluZURhc2gsIGRhc2hMZW5ndGgpOworICAgICAgICAgICAgYXV0byBs
aW5lRGFzaCA9IERhc2hBcnJheTo6ZnJvbShkYXNoTGVuZ3RoLCBnYXBMZW5ndGgpOworICAgICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldExpbmVEYXNoKFdURk1vdmUobGluZURhc2gpLCBkYXNo
TGVuZ3RoKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IHN0cm9raW5n
IHRoZSBib3JkZXIgcGF0aCBjYXVzZXMgaXNzdWVzIHdpdGggdGlnaHQgY29ybmVyczoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggZGE4
ZGYyZTkyM2IzNTQ2ZTBmM2Q0YzViMzA1ZWZlNjU0MDdlNzg2MS4uNDI1YzY5YzMxNDFiZjc0ZmE1
NzJkZjIwYmI4YTBlNDA1NzdhYjgxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTE5NTYsOSArMTk1Niw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXJCYWNraW5nOjpjb25uZWN0Q2xpcHBpbmdTdGFja0xheWVycyhMYXllckFuY2VzdG9yQ2xp
cHBpbmdTdGFjayYKICAgICBhdXRvJiBjbGlwcGluZ0VudHJ5U3RhY2sgPSBjbGlwcGluZ1N0YWNr
LnN0YWNrKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNsaXBwaW5nRW50cnlTdGFj
ay5zaXplKCkgLSAxOyArK2kpIHsKICAgICAgICAgYXV0byYgZW50cnkgPSBjbGlwcGluZ0VudHJ5
U3RhY2suYXQoaSk7Ci0gICAgICAgIFZlY3RvcjxSZWY8R3JhcGhpY3NMYXllcj4+IGNoaWxkcmVu
OwotICAgICAgICBjaGlsZHJlbi5hcHBlbmQoKmNsaXBwaW5nRW50cnlTdGFjay5hdChpICsgMSku
Y2xpcHBpbmdMYXllcik7Ci0gICAgICAgIGVudHJ5LmNsaXBwaW5nTGF5ZXItPnNldENoaWxkcmVu
KFdURk1vdmUoY2hpbGRyZW4pKTsKKyAgICAgICAgZW50cnkuY2xpcHBpbmdMYXllci0+c2V0Q2hp
bGRyZW4oeyBSZWYgeyAqY2xpcHBpbmdFbnRyeVN0YWNrLmF0KGkgKyAxKS5jbGlwcGluZ0xheWVy
IH0gfSk7CiAgICAgfQogCiAgICAgY2xpcHBpbmdFbnRyeVN0YWNrLmxhc3QoKS5jbGlwcGluZ0xh
eWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCAwYmUwMzlhMGYyM2Q1N2ZmN2Y1N2Q5
OTA5YjY1Mzc1YTAyNDI0M2I0Li4yM2Q3MzcxMzRjYThlYWExNjA1ZDBjNDc3YWNlNjI4M2Y4NDYy
MWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcApAQCAtMTQ5MSw5ICsxNDkxLDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmFkanVzdE92ZXJmbG93U2Nyb2xsYmFyQ29udGFpbmVyTGF5ZXJzKFJlbmRlckxheWVyJgog
ICAgICAgICAgICAgb3ZlcmZsb3dCYWNraW5nLT5lbnN1cmVPdmVyZmxvd0NvbnRyb2xzSG9zdExh
eWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrKCZzdGFja2luZ0NvbnRleHRMYXllcik7CiAKICAgICAg
ICAgaWYgKGF1dG8qIG92ZXJmbG93Q29udHJvbHNBbmNlc3RvckNsaXBwaW5nU3RhY2sgPSBvdmVy
Zmxvd0JhY2tpbmctPm92ZXJmbG93Q29udHJvbHNIb3N0TGF5ZXJBbmNlc3RvckNsaXBwaW5nU3Rh
Y2soKSkgewotICAgICAgICAgICAgVmVjdG9yPFJlZjxHcmFwaGljc0xheWVyPj4gY2hpbGRyZW47
Ci0gICAgICAgICAgICBjaGlsZHJlbi5hcHBlbmQoKm92ZXJmbG93Q29udGFpbmVyTGF5ZXIpOwot
ICAgICAgICAgICAgb3ZlcmZsb3dDb250cm9sc0FuY2VzdG9yQ2xpcHBpbmdTdGFjay0+bGFzdENs
aXBwaW5nTGF5ZXIoKS0+c2V0Q2hpbGRyZW4oV1RGTW92ZShjaGlsZHJlbikpOworICAgICAgICAg
ICAgb3ZlcmZsb3dDb250cm9sc0FuY2VzdG9yQ2xpcHBpbmdTdGFjay0+bGFzdENsaXBwaW5nTGF5
ZXIoKS0+c2V0Q2hpbGRyZW4oeyBSZWYgeyAqb3ZlcmZsb3dDb250YWluZXJMYXllciB9IH0pOwog
ICAgICAgICAgICAgb3ZlcmZsb3dDb250YWluZXJMYXllciA9IG92ZXJmbG93Q29udHJvbHNBbmNl
c3RvckNsaXBwaW5nU3RhY2stPmZpcnN0Q2xpcHBpbmdMYXllcigpOwogICAgICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCA5ZTEwOGY4YjRm
ZjI2MTc5Njg5NjRmYTEzNzAxNTE5YmJjMjQ1MmM0Li44NzY2N2RlMmRlZDI5NWQ5MzU4MDJiMzM4
OTJhMGMzMjFjN2UzMmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
TWFjLm1tCkBAIC0yNzMxLDEwICsyNzMxLDkgQEAgc3RhdGljIHZvaWQgcGFpbnRBdHRhY2htZW50
VGl0bGVCYWNrZ3JvdW5kKGNvbnN0IFJlbmRlckF0dGFjaG1lbnQmIGF0dGFjaG1lbnQsIEcKICAg
ICBpZiAobGF5b3V0LmxpbmVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVj
dG9yPEZsb2F0UmVjdD4gYmFja2dyb3VuZFJlY3RzOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsYXlvdXQubGluZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGJhY2tncm91bmRSZWN0cy5h
cHBlbmQobGF5b3V0LmxpbmVzW2ldLmJhY2tncm91bmRSZWN0KTsKKyAgICBhdXRvIGJhY2tncm91
bmRSZWN0cyA9IGxheW91dC5saW5lcy5tYXAoW10oYXV0byYgbGluZSkgeworICAgICAgICByZXR1
cm4gbGluZS5iYWNrZ3JvdW5kUmVjdDsKKyAgICB9KTsKIAogICAgIENvbG9yIGJhY2tncm91bmRD
b2xvcjsKICAgICBpZiAoYXR0YWNobWVudC5mcmFtZSgpLnNlbGVjdGlvbigpLmlzRm9jdXNlZEFu
ZEFjdGl2ZSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCBmZTU1OWJkNzBiMWQwY2Y0YjFjNWE1YjFjOTBhMjk2
MzVlOGIyNzMxLi45Mjc2YjkzYzczMTI2MWMxZjJmZmJlYzQ5ZjFlY2NlNzNjYTFiYjVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4
dC5jcHAKQEAgLTE5NywxMSArMTk3LDkgQEAgc3RhdGljIHZvaWQgd3JpdGVTVkdTdHJva2VQYWlu
dGluZ1Jlc291cmNlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJFbGVtZW50JgogICAgIFNW
R0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dCgmc2hhcGUpOwogICAgIGRvdWJsZSBkYXNoT2Zm
c2V0ID0gbGVuZ3RoQ29udGV4dC52YWx1ZUZvckxlbmd0aChzdmdTdHlsZS5zdHJva2VEYXNoT2Zm
c2V0KCkpOwogICAgIGRvdWJsZSBzdHJva2VXaWR0aCA9IGxlbmd0aENvbnRleHQudmFsdWVGb3JM
ZW5ndGgoc3R5bGUuc3Ryb2tlV2lkdGgoKSk7Ci0gICAgY29uc3QgYXV0byYgZGFzaGVzID0gc3Zn
U3R5bGUuc3Ryb2tlRGFzaEFycmF5KCk7Ci0KLSAgICBEYXNoQXJyYXkgZGFzaEFycmF5OwotICAg
IGZvciAoYXV0byYgbGVuZ3RoIDogZGFzaGVzKQotICAgICAgICBkYXNoQXJyYXkuYXBwZW5kKGxl
bmd0aC52YWx1ZShsZW5ndGhDb250ZXh0KSk7CisgICAgYXV0byBkYXNoQXJyYXkgPSBzdmdTdHls
ZS5zdHJva2VEYXNoQXJyYXkoKS5tYXAoWyZdKGF1dG8mIGxlbmd0aCkgLT4gRGFzaEFycmF5RWxl
bWVudCB7CisgICAgICAgIHJldHVybiBsZW5ndGgudmFsdWUobGVuZ3RoQ29udGV4dCk7CisgICAg
fSk7CiAKICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgIm9wYWNpdHkiLCBzdmdTdHlsZS5zdHJv
a2VPcGFjaXR5KCksIDEuMGYpOwogICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAic3Ryb2tlIHdp
ZHRoIiwgc3Ryb2tlV2lkdGgsIDEuMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1RleHRDaHVuay5jcHAKaW5kZXggYTYzZWI4MGE3NzlkNzc2OGRhNDc3MmJiMGQ2YWZlMTll
MzUyMWJiZC4uODQ4MTM2YzhhNTM4YzZlYzhlY2MxNmQ1YmYwMWJmZGUyZGRiMzkxOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcApAQCAtNzAsOCAr
NzAsNyBAQCBTVkdUZXh0Q2h1bms6OlNWR1RleHRDaHVuayhjb25zdCBWZWN0b3I8U1ZHSW5saW5l
VGV4dEJveCo+JiBsaW5lTGF5b3V0Qm94ZXMsIHVucwogICAgICAgICB9CiAgICAgfQogCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gZmlyc3Q7IGkgPCBsaW1pdDsgKytpKQotICAgICAgICBtX2JveGVz
LmFwcGVuZChsaW5lTGF5b3V0Qm94ZXNbaV0pOworICAgIG1fYm94ZXMuYXBwZW5kKCZsaW5lTGF5
b3V0Qm94ZXNbZmlyc3RdLCBsaW1pdCAtIGZpcnN0KTsKIH0KIAogdW5zaWduZWQgU1ZHVGV4dENo
dW5rOjp0b3RhbENoYXJhY3RlcnMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUGFnZVJ1
bGVDb2xsZWN0b3IuY3BwCmluZGV4IDIyOTlmOGM2Mzc5YjUwOTQ5MmExYTFmZmE1MjMwNmExYWEx
Njg5YjQuLmUzZGMzZWZiYzI5YjYzZDc1MjE0OWRhY2IxMTMxZmZhNTJhY2M5NDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29sbGVjdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5jcHAKQEAgLTg0LDggKzg0LDkgQEAg
dm9pZCBQYWdlUnVsZUNvbGxlY3Rvcjo6bWF0Y2hQYWdlUnVsZXMoUnVsZVNldCogcnVsZXMsIGJv
b2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0YKIAogICAgIHN0ZDo6c3RhYmxlX3NvcnQobWF0Y2hlZFBh
Z2VSdWxlcy5iZWdpbigpLCBtYXRjaGVkUGFnZVJ1bGVzLmVuZCgpLCBjb21wYXJlUGFnZVJ1bGVz
KTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXRjaGVkUGFnZVJ1bGVzLnNpemUo
KTsgaSsrKQotICAgICAgICBtX3Jlc3VsdC5hdXRob3JEZWNsYXJhdGlvbnMuYXBwZW5kKHsgJm1h
dGNoZWRQYWdlUnVsZXNbaV0tPnByb3BlcnRpZXMoKSB9KTsKKyAgICBtX3Jlc3VsdC5hdXRob3JE
ZWNsYXJhdGlvbnMucmVzZXJ2ZUNhcGFjaXR5KG1fcmVzdWx0LmF1dGhvckRlY2xhcmF0aW9ucy5z
aXplKCkgKyBtYXRjaGVkUGFnZVJ1bGVzLnNpemUoKSk7CisgICAgZm9yIChhdXRvKiBwYWdlUnVs
ZSA6IG1hdGNoZWRQYWdlUnVsZXMpCisgICAgICAgIG1fcmVzdWx0LmF1dGhvckRlY2xhcmF0aW9u
cy51bmNoZWNrZWRBcHBlbmQoeyAmcGFnZVJ1bGUtPnByb3BlcnRpZXMoKSB9KTsKIH0KIAogc3Rh
dGljIGJvb2wgY2hlY2tQYWdlU2VsZWN0b3JDb21wb25lbnRzKGNvbnN0IENTU1NlbGVjdG9yKiBz
ZWxlY3RvciwgYm9vbCBpc0xlZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcm
IHBhZ2VOYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwCmluZGV4IDU3
NTE4NTkxOTdiMjI2ZmMyNDRhZjZiYzMyMDVmYWQyNmUwMTcwMTkuLmNmMTY1MjIxY2Q1M2EzYzVh
NzdjNmQ5ODA4NDMyMWMxM2YyMjIzOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1J1bGVTZXRCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0QnVp
bGRlci5jcHAKQEAgLTM3OCw4ICszNzgsOSBAQCB2b2lkIFJ1bGVTZXRCdWlsZGVyOjpNZWRpYVF1
ZXJ5Q29sbGVjdG9yOjpwb3AoY29uc3QgTWVkaWFRdWVyeVNldCogc2V0KQogCiAgICAgaWYgKCFk
eW5hbWljQ29udGV4dFN0YWNrLmxhc3QoKS5hZmZlY3RlZFJ1bGVQb3NpdGlvbnMuaXNFbXB0eSgp
IHx8ICFjb2xsZWN0RHluYW1pYykgewogICAgICAgICBSdWxlU2V0OjpEeW5hbWljTWVkaWFRdWVy
eVJ1bGVzIHJ1bGVzOworICAgICAgICBydWxlcy5tZWRpYVF1ZXJ5U2V0cy5yZXNlcnZlQ2FwYWNp
dHkocnVsZXMubWVkaWFRdWVyeVNldHMuc2l6ZSgpICsgZHluYW1pY0NvbnRleHRTdGFjay5zaXpl
KCkpOwogICAgICAgICBmb3IgKGF1dG8mIGNvbnRleHQgOiBkeW5hbWljQ29udGV4dFN0YWNrKQot
ICAgICAgICAgICAgcnVsZXMubWVkaWFRdWVyeVNldHMuYXBwZW5kKGNvbnRleHQuc2V0LmdldCgp
KTsKKyAgICAgICAgICAgIHJ1bGVzLm1lZGlhUXVlcnlTZXRzLnVuY2hlY2tlZEFwcGVuZChjb250
ZXh0LnNldC5nZXQoKSk7CiAKICAgICAgICAgaWYgKGNvbGxlY3REeW5hbWljKSB7CiAgICAgICAg
ICAgICBydWxlcy5hZmZlY3RlZFJ1bGVQb3NpdGlvbnMuYXBwZW5kVmVjdG9yKGR5bmFtaWNDb250
ZXh0U3RhY2subGFzdCgpLmFmZmVjdGVkUnVsZVBvc2l0aW9ucyk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCmluZGV4IDJmODM0ZGY2N2Q4MGNiMTNkZDRj
OTE1NTFiYWQxMmRiMWIyM2EyNDkuLjc0NjRmODRkOGJmNmIyYjJhMzMxMjNkNTkyYmUyOTJmMTRj
YzI4ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckNvbnZl
cnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRlci5o
CkBAIC0xNjk3LDEzICsxNjk3LDEyIEBAIGlubGluZSBWZWN0b3I8QXRvbVN0cmluZz4gQnVpbGRl
ckNvbnZlcnRlcjo6Y29udmVydENvbnRhaW5lck5hbWUoQnVpbGRlclN0YXRlJiwKICAgICAgICAg
QVNTRVJUKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENT
U1ZhbHVlTm9uZSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQorICAgIGlmICghaXM8Q1NT
VmFsdWVMaXN0Pih2YWx1ZSkpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBWZWN0b3I8QXRv
bVN0cmluZz4gcmVzdWx0OwotICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgewotICAg
ICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkKLSAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0u
Z2V0KCkpLnN0cmluZ1ZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJl
dHVybiBXVEY6Om1hcChkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSwgW10oYXV0byYgaXRl
bSkgLT4gQXRvbVN0cmluZyB7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oaXRlbS5nZXQoKSkuc3RyaW5nVmFsdWUoKTsKKyAgICB9KTsKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyUHJv
eHkuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVy
UHJveHkuY3BwCmluZGV4IDBlZjgzNDJkZDI2OGVlNjhjMzA0NzYyZGEwNThiYTRmYmNiYzZlM2Mu
Ljk0OWZmMzIwNTU1MGI0OGI3Y2M3OWU0NTA1MTZhNDA0MDJhNGEzOTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllclByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJQcm94
eS5jcHAKQEAgLTgwNSwxMSArODA1LDkgQEAgYm9vbCBSZW1vdGVNZWRpYVBsYXllclByb3h5Ojpk
b2VzSGF2ZUF0dHJpYnV0ZShjb25zdCBBdG9tU3RyaW5nJiwgQXRvbVN0cmluZyopIGMKICNpZiBF
TkFCTEUoQVZGX0NBUFRJT05TKQogVmVjdG9yPFJlZlB0cjxQbGF0Zm9ybVRleHRUcmFjaz4+IFJl
bW90ZU1lZGlhUGxheWVyUHJveHk6Om91dE9mQmFuZFRyYWNrU291cmNlcygpCiB7Ci0gICAgVmVj
dG9yPFJlZlB0cjxQbGF0Zm9ybVRleHRUcmFjaz4+IHNvdXJjZXM7Ci0gICAgZm9yIChhdXRvJiBk
YXRhIDogbV9jb25maWd1cmF0aW9uLm91dE9mQmFuZFRyYWNrRGF0YSkKLSAgICAgICAgc291cmNl
cy5hcHBlbmQoUGxhdGZvcm1UZXh0VHJhY2s6OmNyZWF0ZShXVEZNb3ZlKGRhdGEpKSk7Ci0gICAg
Ci0gICAgcmV0dXJuIHNvdXJjZXM7CisgICAgcmV0dXJuIFdURjo6bWFwKG1fY29uZmlndXJhdGlv
bi5vdXRPZkJhbmRUcmFja0RhdGEsIFtdKGF1dG8mIGRhdGEpIC0+IFJlZlB0cjxQbGF0Zm9ybVRl
eHRUcmFjaz4geworICAgICAgICByZXR1cm4gUGxhdGZvcm1UZXh0VHJhY2s6OmNyZWF0ZShXVEZN
b3ZlKGRhdGEpKTsKKyAgICB9KTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlU291cmNlQnVmZmVyUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZVNvdXJjZUJ1ZmZlclByb3h5LmNwcAppbmRl
eCAyNzkxNjVkZTY2YWFmZTAyNDY4MWUxNjFhMDM1YzRhMTA5NTRlNmUxLi5iYzhkMDE2MjJkYzlm
MTE0MWU4NTlmMjQ2MmYzNjI4ODc4YjJiNWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvbWVkaWEvUmVtb3RlU291cmNlQnVmZmVyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVTb3VyY2VCdWZmZXJQcm94eS5jcHAKQEAgLTc1
LDM1ICs3NSwzMyBAQCB2b2lkIFJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5Ojpzb3VyY2VCdWZmZXJQ
cml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudAogCiAgICAgSW5pdGlhbGl6YXRp
b25TZWdtZW50SW5mbyBzZWdtZW50SW5mbzsKICAgICBzZWdtZW50SW5mby5kdXJhdGlvbiA9IHNl
Z21lbnQuZHVyYXRpb247Ci0gICAgZm9yIChhdXRvJiBhdWRpb1RyYWNrSW5mbyA6IHNlZ21lbnQu
YXVkaW9UcmFja3MpIHsKLSAgICAgICAgYXV0byBpZGVudGlmaWVyID0gbV9yZW1vdGVNZWRpYVBs
YXllclByb3h5LT5hZGRSZW1vdGVBdWRpb1RyYWNrUHJveHkoKmF1ZGlvVHJhY2tJbmZvLnRyYWNr
KTsKLSAgICAgICAgc2VnbWVudEluZm8uYXVkaW9UcmFja3MuYXBwZW5kKHsgTWVkaWFEZXNjcmlw
dGlvbkluZm8oKmF1ZGlvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwgaWRlbnRpZmllciB9KTsKIAor
ICAgIHNlZ21lbnRJbmZvLmF1ZGlvVHJhY2tzID0gc2VnbWVudC5hdWRpb1RyYWNrcy5tYXAoWyZd
KGF1dG8mIGF1ZGlvVHJhY2tJbmZvKSB7CisgICAgICAgIGF1dG8gaWRlbnRpZmllciA9IG1fcmVt
b3RlTWVkaWFQbGF5ZXJQcm94eS0+YWRkUmVtb3RlQXVkaW9UcmFja1Byb3h5KCphdWRpb1RyYWNr
SW5mby50cmFjayk7CiAgICAgICAgIEFTU0VSVCghbV90cmFja0lkcy5jb250YWlucyhpZGVudGlm
aWVyKSk7CiAgICAgICAgIEFTU0VSVCghbV9tZWRpYURlc2NyaXB0aW9ucy5jb250YWlucyhpZGVu
dGlmaWVyKSk7CiAgICAgICAgIG1fdHJhY2tJZHMuYWRkKGlkZW50aWZpZXIsIGF1ZGlvVHJhY2tJ
bmZvLnRyYWNrLT5pZCgpKTsKICAgICAgICAgbV9tZWRpYURlc2NyaXB0aW9ucy5hZGQoaWRlbnRp
ZmllciwgKmF1ZGlvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKTsKLSAgICB9CisgICAgICAgIHJldHVy
biBJbml0aWFsaXphdGlvblNlZ21lbnRJbmZvOjpUcmFja0luZm9ybWF0aW9uIHsgTWVkaWFEZXNj
cmlwdGlvbkluZm8oKmF1ZGlvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwgaWRlbnRpZmllciB9Owor
ICAgIH0pOwogCi0gICAgZm9yIChhdXRvJiB2aWRlb1RyYWNrSW5mbyA6IHNlZ21lbnQudmlkZW9U
cmFja3MpIHsKKyAgICBzZWdtZW50SW5mby52aWRlb1RyYWNrcyA9IHNlZ21lbnQudmlkZW9UcmFj
a3MubWFwKFsmXShhdXRvJiB2aWRlb1RyYWNrSW5mbykgewogICAgICAgICBhdXRvIGlkZW50aWZp
ZXIgPSBtX3JlbW90ZU1lZGlhUGxheWVyUHJveHktPmFkZFJlbW90ZVZpZGVvVHJhY2tQcm94eSgq
dmlkZW9UcmFja0luZm8udHJhY2spOwotICAgICAgICBzZWdtZW50SW5mby52aWRlb1RyYWNrcy5h
cHBlbmQoeyBNZWRpYURlc2NyaXB0aW9uSW5mbygqdmlkZW9UcmFja0luZm8uZGVzY3JpcHRpb24p
LCBpZGVudGlmaWVyIH0pOwotCiAgICAgICAgIEFTU0VSVCghbV90cmFja0lkcy5jb250YWlucyhp
ZGVudGlmaWVyKSk7CiAgICAgICAgIEFTU0VSVCghbV9tZWRpYURlc2NyaXB0aW9ucy5jb250YWlu
cyhpZGVudGlmaWVyKSk7CiAgICAgICAgIG1fdHJhY2tJZHMuYWRkKGlkZW50aWZpZXIsIHZpZGVv
VHJhY2tJbmZvLnRyYWNrLT5pZCgpKTsKICAgICAgICAgbV9tZWRpYURlc2NyaXB0aW9ucy5hZGQo
aWRlbnRpZmllciwgKnZpZGVvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKTsKLSAgICB9CisgICAgICAg
IHJldHVybiBJbml0aWFsaXphdGlvblNlZ21lbnRJbmZvOjpUcmFja0luZm9ybWF0aW9uIHsgTWVk
aWFEZXNjcmlwdGlvbkluZm8oKnZpZGVvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwgaWRlbnRpZmll
ciB9OworICAgIH0pOwogCi0gICAgZm9yIChhdXRvJiB0ZXh0VHJhY2tJbmZvIDogc2VnbWVudC50
ZXh0VHJhY2tzKSB7CisgICAgc2VnbWVudEluZm8udGV4dFRyYWNrcyA9IHNlZ21lbnQudGV4dFRy
YWNrcy5tYXAoWyZdKGF1dG8mIHRleHRUcmFja0luZm8pIHsKICAgICAgICAgYXV0byBpZGVudGlm
aWVyID0gbV9yZW1vdGVNZWRpYVBsYXllclByb3h5LT5hZGRSZW1vdGVUZXh0VHJhY2tQcm94eSgq
dGV4dFRyYWNrSW5mby50cmFjayk7Ci0gICAgICAgIHNlZ21lbnRJbmZvLnRleHRUcmFja3MuYXBw
ZW5kKHsgTWVkaWFEZXNjcmlwdGlvbkluZm8oKnRleHRUcmFja0luZm8uZGVzY3JpcHRpb24pLCBp
ZGVudGlmaWVyIH0pOwotCiAgICAgICAgIEFTU0VSVCghbV90cmFja0lkcy5jb250YWlucyhpZGVu
dGlmaWVyKSk7CiAgICAgICAgIEFTU0VSVCghbV9tZWRpYURlc2NyaXB0aW9ucy5jb250YWlucyhp
ZGVudGlmaWVyKSk7CiAgICAgICAgIG1fdHJhY2tJZHMuYWRkKGlkZW50aWZpZXIsIHRleHRUcmFj
a0luZm8udHJhY2stPmlkKCkpOwogICAgICAgICBtX21lZGlhRGVzY3JpcHRpb25zLmFkZChpZGVu
dGlmaWVyLCAqdGV4dFRyYWNrSW5mby5kZXNjcmlwdGlvbik7Ci0gICAgfQorICAgICAgICByZXR1
cm4gSW5pdGlhbGl6YXRpb25TZWdtZW50SW5mbzo6VHJhY2tJbmZvcm1hdGlvbiB7IE1lZGlhRGVz
Y3JpcHRpb25JbmZvKCp0ZXh0VHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwgaWRlbnRpZmllciB9Owor
ICAgIH0pOwogCiAgICAgaWYgKCFtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpIHsKICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTMzOCwxNiArMzM2LDExIEBAIHZvaWQgUmVtb3RlU291
cmNlQnVmZmVyUHJveHk6OnNlZWtUb1RpbWUoY29uc3QgTWVkaWFUaW1lJiBtZWRpYVRpbWUpCiAK
IHZvaWQgUmVtb3RlU291cmNlQnVmZmVyUHJveHk6OnVwZGF0ZVRyYWNrSWRzKFZlY3RvcjxzdGQ6
OnBhaXI8VHJhY2tQcml2YXRlUmVtb3RlSWRlbnRpZmllciwgVHJhY2tQcml2YXRlUmVtb3RlSWRl
bnRpZmllcj4+JiYgaWRlbnRpZmllclBhaXJzKQogewotICAgIFZlY3RvcjxzdGQ6OnBhaXI8QXRv
bVN0cmluZywgQXRvbVN0cmluZz4+IHRyYWNrSWRQYWlyczsKLQotICAgIGZvciAoYXV0byYgaWRl
bnRpZmllclBhaXIgOiBpZGVudGlmaWVyUGFpcnMpIHsKKyAgICBhdXRvIHRyYWNrSWRQYWlycyA9
IGlkZW50aWZpZXJQYWlycy5tYXAoWyZdKGF1dG8mIGlkZW50aWZpZXJQYWlyKSB7CiAgICAgICAg
IEFTU0VSVChtX3RyYWNrSWRzLmNvbnRhaW5zKGlkZW50aWZpZXJQYWlyLmZpcnN0KSk7CiAgICAg
ICAgIEFTU0VSVChtX3RyYWNrSWRzLmNvbnRhaW5zKGlkZW50aWZpZXJQYWlyLnNlY29uZCkpOwot
Ci0gICAgICAgIGF1dG8gb2xkSWQgPSBtX3RyYWNrSWRzLnRha2UoaWRlbnRpZmllclBhaXIuZmly
c3QpOwotICAgICAgICBhdXRvIG5ld0lkID0gbV90cmFja0lkcy5nZXQoaWRlbnRpZmllclBhaXIu
c2Vjb25kKTsKLSAgICAgICAgdHJhY2tJZFBhaXJzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihvbGRJ
ZCwgbmV3SWQpKTsKLSAgICB9CisgICAgICAgIHJldHVybiBzdGQ6OnBhaXIgeyBtX3RyYWNrSWRz
LnRha2UoaWRlbnRpZmllclBhaXIuZmlyc3QpLCBtX3RyYWNrSWRzLmdldChpZGVudGlmaWVyUGFp
ci5zZWNvbmQpIH07CisgICAgfSk7CiAKICAgICBpZiAoIXRyYWNrSWRQYWlycy5pc0VtcHR5KCkp
CiAgICAgICAgIG1fc291cmNlQnVmZmVyUHJpdmF0ZS0+dXBkYXRlVHJhY2tJZHMoV1RGTW92ZSh0
cmFja0lkUGFpcnMpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5jcHAKaW5kZXggNzBiNWFmZGE1MjZlOTkwOWI5NjJkNzEyMTNkODViNjBiNTM3MTgxZC4u
ZTg3NmVjMzc3NzFmZjQwMGNhYTgzNGNlZmFlOTU2MjU0Y2MzZmQ5MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKQEAgLTg1Myw5ICs4NTMsNyBA
QCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JU
ZXN0aW5nKGNvbnN0IFJlZ2lzdHJhYmxlRAogCiAgICAgICAgICAgICBzdGF0aXN0aWMuc3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWlucyA9IFdURk1vdmUodG9wRnJhbWVEb21haW5zKTsKIAotICAg
ICAgICAgICAgVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+IHN0YXRpc3RpY3M7Ci0gICAg
ICAgICAgICBzdGF0aXN0aWNzLmFwcGVuZChXVEZNb3ZlKHN0YXRpc3RpYykpOwotICAgICAgICAg
ICAgbV9zdGF0aXN0aWNzU3RvcmUtPm1lcmdlU3RhdGlzdGljcyhXVEZNb3ZlKHN0YXRpc3RpY3Mp
KTsKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5tZXJnZVN0YXRpc3RpY3MoVmVjdG9y
PFJlc291cmNlTG9hZFN0YXRpc3RpY3M+Ojpmcm9tKFdURk1vdmUoc3RhdGlzdGljKSkpOwogICAg
ICAgICB9CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmNwcAppbmRleCBmNGY4YTRjNGY0YWY5NmFmNjg5NDJjNWM2Yzk4OTJmZjdlMTk5M2YxLi40
YThiMGVkYTA5YmYwNTg5OGEzYjhiMjJjOTA4YjQ3YjI4ZWI5YzgxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMTM4MCwxMCArMTM4
MCw5IEBAIHN0YXRpYyB2b2lkIGZldGNoRGlza0NhY2hlRW50cmllcyhOZXR3b3JrQ2FjaGU6OkNh
Y2hlKiBjYWNoZSwgUEFMOjpTZXNzaW9uSUQgc2VzCiAgICAgSGFzaE1hcDxTZWN1cml0eU9yaWdp
bkRhdGEsIHVpbnQ2NF90PiBvcmlnaW5zQW5kU2l6ZXM7CiAgICAgY2FjaGUtPnRyYXZlcnNlKFtm
ZXRjaE9wdGlvbnMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
ciksIG9yaWdpbnNBbmRTaXplcyA9IFdURk1vdmUob3JpZ2luc0FuZFNpemVzKV0oYXV0byogdHJh
dmVyc2FsRW50cnkpIG11dGFibGUgewogICAgICAgICBpZiAoIXRyYXZlcnNhbEVudHJ5KSB7Ci0g
ICAgICAgICAgICBWZWN0b3I8V2Vic2l0ZURhdGE6OkVudHJ5PiBlbnRyaWVzOwotCi0gICAgICAg
ICAgICBmb3IgKGF1dG8mIG9yaWdpbkFuZFNpemUgOiBvcmlnaW5zQW5kU2l6ZXMpCi0gICAgICAg
ICAgICAgICAgZW50cmllcy5hcHBlbmQoV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luQW5kU2l6
ZS5rZXksIFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlLCBvcmlnaW5BbmRTaXplLnZhbHVlIH0p
OworICAgICAgICAgICAgYXV0byBlbnRyaWVzID0gV1RGOjptYXAob3JpZ2luc0FuZFNpemVzLCBb
XShhdXRvJiBvcmlnaW5BbmRTaXplKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYnNpdGVE
YXRhOjpFbnRyeSB7IG9yaWdpbkFuZFNpemUua2V5LCBXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNo
ZSwgb3JpZ2luQW5kU2l6ZS52YWx1ZSB9OworICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgZW50cmllcyA9IFdURk1vdmUoZW50cmllcyldICgpIG11dGFibGUg
ewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGVudHJpZXMpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05ldHdvcmtOb3Rp
ZmljYXRpb25NYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTm90aWZp
Y2F0aW9ucy9OZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlci5jcHAKaW5kZXggZjAwYTIxOTNhYTJi
MTM5ODAyYjM2NmE0ZjEyMWM3NmVkZmY4OGYwMy4uYzUxMmYyY2IzMjU0MDQ1NGIwNmRmNzMyNWEz
MWIyYTNjZTFkMGM2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
b3RpZmljYXRpb25zL05ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05vdGlmaWNhdGlvbnMvTmV0d29ya05vdGlmaWNhdGlvbk1h
bmFnZXIuY3BwCkBAIC04Miw5ICs4Miw5IEBAIHZvaWQgTmV0d29ya05vdGlmaWNhdGlvbk1hbmFn
ZXI6OmRlbGV0ZVB1c2hBbmROb3RpZmljYXRpb25SZWdpc3RyYXRpb24oY29uc3QgU2VjCiB2b2lk
IE5ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2VyOjpnZXRPcmlnaW5zV2l0aFB1c2hBbmROb3RpZmlj
YXRpb25QZXJtaXNzaW9ucyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxTZWN1
cml0eU9yaWdpbkRhdGE+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4gcmVwbHlIYW5kbGVyID0gW2NvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChWZWN0b3I8U3RyaW5nPiBv
cmlnaW5TdHJpbmdzKSBtdXRhYmxlIHsKLSAgICAgICAgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0
YT4gb3JpZ2luczsKLSAgICAgICAgZm9yIChhdXRvJiBvcmlnaW5TdHJpbmcgOiBvcmlnaW5TdHJp
bmdzKQotICAgICAgICAgICAgb3JpZ2lucy5hcHBlbmQoU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9t
VVJMKHsgeyB9LCBvcmlnaW5TdHJpbmcgfSkpOworICAgICAgICBhdXRvIG9yaWdpbnMgPSBvcmln
aW5TdHJpbmdzLm1hcChbXShhdXRvJiBvcmlnaW5TdHJpbmcpIHsKKyAgICAgICAgICAgIHJldHVy
biBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21VUkwoeyB7IH0sIG9yaWdpblN0cmluZyB9KTsKKyAg
ICAgICAgfSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUob3JpZ2lucykpOwog
ICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dl
YlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCmluZGV4IGNiOTAxYjZjNThiMTg1OWFlOGJlMmFk
OWRhOTAwMmQ4MjJiODA2MTIuLmMxYjk4NmNmOWY2NjEyNDFmMTAzYTc4MDZjODM2NmRlOGJjNDM2
M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9T
dG9yYWdlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJT
dG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcApAQCAtMjk1LDIwICsyOTUsMTQgQEAgVmVjdG9yPFN0
b3JhZ2VBcmVhSWRlbnRpZmllcj4gU3RvcmFnZU1hbmFnZXI6OmFsbFN0b3JhZ2VBcmVhSWRlbnRp
ZmllcnMoKSBjb25zdAogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgVmVj
dG9yPFN0b3JhZ2VBcmVhSWRlbnRpZmllcj4gaWRlbnRpZmllcnM7Ci0gICAgZm9yIChjb25zdCBh
dXRvJiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UgOiBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZXMudmFs
dWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvIGtleSA6IGxvY2FsU3RvcmFnZU5hbWVzcGFjZS0+
c3RvcmFnZUFyZWFJZGVudGlmaWVycygpKQotICAgICAgICAgICAgaWRlbnRpZmllcnMuYXBwZW5k
KGtleSk7Ci0gICAgfQorICAgIGZvciAoYXV0byYgbG9jYWxTdG9yYWdlTmFtZXNwYWNlIDogbV9s
b2NhbFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQorICAgICAgICBpZGVudGlmaWVycy5hcHBl
bmRWZWN0b3IobG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlQXJlYUlkZW50aWZpZXJzKCkp
OwogCi0gICAgZm9yIChjb25zdCBhdXRvJiB0cmFzaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSA6
IG1fdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkgewotICAgICAgICBm
b3IgKGF1dG8ga2V5IDogdHJhc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VBcmVh
SWRlbnRpZmllcnMoKSkKLSAgICAgICAgICAgIGlkZW50aWZpZXJzLmFwcGVuZChrZXkpOwotICAg
IH0KKyAgICBmb3IgKGF1dG8mIHRyYXNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlIDogbV90cmFu
c2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQorICAgICAgICBpZGVudGlmaWVy
cy5hcHBlbmRWZWN0b3IodHJhc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VBcmVh
SWRlbnRpZmllcnMoKSk7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHNlc3Npb25TdG9yYWdlTmFt
ZXNwYWNlIDogbV9zZXNzaW9uU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpIHsKLSAgICAgICAg
Zm9yIChhdXRvIGtleSA6IHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlQXJlYUlkZW50
aWZpZXJzKCkpCi0gICAgICAgICAgICBpZGVudGlmaWVycy5hcHBlbmQoa2V5KTsKLSAgICB9Cisg
ICAgZm9yIChhdXRvJiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSA6IG1fc2Vzc2lvblN0b3JhZ2VO
YW1lc3BhY2VzLnZhbHVlcygpKQorICAgICAgICBpZGVudGlmaWVycy5hcHBlbmRWZWN0b3Ioc2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VBcmVhSWRlbnRpZmllcnMoKSk7CiAKICAgICBy
ZXR1cm4gaWRlbnRpZmllcnM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL1dlYlN0b3JhZ2UvVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9UcmFuc2llbnRMb2NhbFN0b3Jh
Z2VOYW1lc3BhY2UuY3BwCmluZGV4IGVlZWM1NTBlZWY2M2FlNTlhMWVhYjNhYThhNDk3YTMyYzEw
NTA2MjQuLmZiOThlZDM5NDgwOTE2MDY4NzE3MjZhZTA4NmQ1MWYxNTEyZDQ0MDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9UcmFuc2llbnRMb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
V2ViU3RvcmFnZS9UcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuY3BwCkBAIC01NSwxNCAr
NTUsMTEgQEAgU3RvcmFnZUFyZWEmIFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6Z2V0
T3JDcmVhdGVTdG9yYWdlQXJlYShTZWN1cml0eU9yaWcKIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRh
dGE+IFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6b3JpZ2lucygpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgVmVjdG9yPFNlY3VyaXR5T3JpZ2lu
RGF0YT4gb3JpZ2luczsKLQotICAgIGZvciAoY29uc3QgYXV0byYgc3RvcmFnZUFyZWEgOiBtX3N0
b3JhZ2VBcmVhTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmICghc3RvcmFnZUFyZWEtPml0ZW1z
KCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgb3JpZ2lucy5hcHBlbmQoc3RvcmFnZUFyZWEtPnNl
Y3VyaXR5T3JpZ2luKCkpOwotICAgIH0KLQotICAgIHJldHVybiBvcmlnaW5zOworICAgIHJldHVy
biBXVEY6OmNvbXBhY3RNYXAobV9zdG9yYWdlQXJlYU1hcCwgW10oYXV0byYgZW50cnkpIC0+IHN0
ZDo6b3B0aW9uYWw8U2VjdXJpdHlPcmlnaW5EYXRhPiB7CisgICAgICAgIGlmIChlbnRyeS52YWx1
ZS0+aXRlbXMoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgICAgICByZXR1cm4gZW50cnkudmFsdWUtPnNlY3VyaXR5T3JpZ2luKCk7CisgICAgfSk7CiB9
CiAKIHZvaWQgVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpjbGVhclN0b3JhZ2VBcmVh
c01hdGNoaW5nT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgc2VjdXJpdHlPcmlnaW4p
CkBAIC04MiwxMCArNzksOSBAQCB2b2lkIFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6
Y2xlYXJBbGxTdG9yYWdlQXJlYXMoKQogCiBWZWN0b3I8U3RvcmFnZUFyZWFJZGVudGlmaWVyPiBU
cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OnN0b3JhZ2VBcmVhSWRlbnRpZmllcnMoKSBj
b25zdAogewotICAgIFZlY3RvcjxTdG9yYWdlQXJlYUlkZW50aWZpZXI+IGlkZW50aWZpZXJzOwot
ICAgIGZvciAoYXV0byYgc3RvcmFnZUFyZWEgOiBtX3N0b3JhZ2VBcmVhTWFwLnZhbHVlcygpKQot
ICAgICAgICBpZGVudGlmaWVycy5hcHBlbmQoc3RvcmFnZUFyZWEtPmlkZW50aWZpZXIoKSk7Ci0g
ICAgcmV0dXJuIGlkZW50aWZpZXJzOworICAgIHJldHVybiBXVEY6Om1hcChtX3N0b3JhZ2VBcmVh
TWFwLCBbXShhdXRvJiBlbnRyeSkgeworICAgICAgICByZXR1cm4gZW50cnkudmFsdWUtPmlkZW50
aWZpZXIoKTsKKyAgICB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNh
Y2hlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdl
RW5naW5lQ2FjaGUuY3BwCmluZGV4IGRhOWNiOGE1ZGNjMGVkN2Y5ZjRjMmUzZDJmMjc2ODk0YTAx
ZWQxNzQuLjNlMWFlMzEzMDI4YWQwMDNjZDU1ZjgxZTQ2ZTVjYWUwYmYxZWFkZWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5l
Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVT
dG9yYWdlRW5naW5lQ2FjaGUuY3BwCkBAIC0yMDksOCArMjA5LDkgQEAgdm9pZCBDYWNoZTo6Zmlu
aXNoT3BlbmluZyhDb21wbGV0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaywgc3RkOjpvcHRpb25hbDxF
cnJvcj4mJgogewogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlY29yZEluZm9y
bWF0aW9uPj4gcmVjb3JkczsKICAgICBmb3IgKGF1dG8mIHZhbHVlIDogbV9yZWNvcmRzLnZhbHVl
cygpKSB7CisgICAgICAgIHJlY29yZHMucmVzZXJ2ZUNhcGFjaXR5KHJlY29yZHMuc2l6ZSgpICsg
dmFsdWUuc2l6ZSgpKTsKICAgICAgICAgZm9yIChhdXRvJiByZWNvcmQgOiB2YWx1ZSkKLSAgICAg
ICAgICAgIHJlY29yZHMuYXBwZW5kKHJlY29yZCk7CisgICAgICAgICAgICByZWNvcmRzLnVuY2hl
Y2tlZEFwcGVuZChyZWNvcmQpOwogICAgIH0KICAgICBzdGQ6OnNvcnQocmVjb3Jkcy5iZWdpbigp
LCByZWNvcmRzLmVuZCgpLCBbJl0oY29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYgYikgewogICAg
ICAgICByZXR1cm4gYS5nZXQoKS5pbnNlcnRpb25UaW1lIDwgYi5nZXQoKS5pbnNlcnRpb25UaW1l
OwpAQCAtNjgyLDggKzY4Myw5IEBAIFZlY3RvcjxLZXk+IENhY2hlOjprZXlzKCkgY29uc3QKIHsK
ICAgICBWZWN0b3I8S2V5PiBrZXlzOwogICAgIGZvciAoYXV0byYgcmVjb3JkcyA6IG1fcmVjb3Jk
cy52YWx1ZXMoKSkgeworICAgICAgICBrZXlzLnJlc2VydmVDYXBhY2l0eShrZXlzLnNpemUoKSAr
IHJlY29yZHMuc2l6ZSgpKTsKICAgICAgICAgZm9yIChhdXRvJiByZWNvcmQgOiByZWNvcmRzKQot
ICAgICAgICAgICAga2V5cy5hcHBlbmQocmVjb3JkLmtleSk7CisgICAgICAgICAgICBrZXlzLnVu
Y2hlY2tlZEFwcGVuZChyZWNvcmQua2V5KTsKICAgICB9CiAgICAgcmV0dXJuIGtleXM7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3Rv
cmFnZUFyZWEuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0
ZVN0b3JhZ2VBcmVhLmNwcAppbmRleCA0MDlhMzM4OGEwYjhlY2Y5YWI3MTA0OWI3MjlmZGUzOTI3
YzQ4ZWI1Li40MTM2OTQ0YjVmZjg1ZWYyM2ZjZWU0N2VlZDgzMmYxZWQwYjYwNDdlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFy
ZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVT
dG9yYWdlQXJlYS5jcHAKQEAgLTY5LDggKzY5LDkgQEAgU1FMaXRlU3RvcmFnZUFyZWE6OlNRTGl0
ZVN0b3JhZ2VBcmVhKHVuc2lnbmVkIHF1b3RhLCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4K
IHsKICAgICBBU1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7CiAKKyAgICBtX2NhY2hlZFN0YXRlbWVu
dHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzdGF0aWNfY2FzdDxzaXplX3Q+KFN0YXRlbWVudFR5
cGU6OkludmFsaWQpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHNp
emVfdD4oU3RhdGVtZW50VHlwZTo6SW52YWxpZCk7ICsraSkKLSAgICAgICAgbV9jYWNoZWRTdGF0
ZW1lbnRzLmFwcGVuZChudWxscHRyKTsKKyAgICAgICAgbV9jYWNoZWRTdGF0ZW1lbnRzLnVuY2hl
Y2tlZEFwcGVuZChudWxscHRyKTsKIH0KIAogdm9pZCBTUUxpdGVTdG9yYWdlQXJlYTo6Y2xvc2Uo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQXBwbGVQYXkvV2ViUGF5bWVudENv
b3JkaW5hdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQXBwbGVQYXkvV2ViUGF5
bWVudENvb3JkaW5hdG9yUHJveHkuY3BwCmluZGV4IDA0YTY5NjgxNzhhNmY3NTk0YzI4MGVmNzMx
ODE5OGNiNjMyYjkyMzAuLmJjY2MwNTUwNzcxNzc5NzY2OGY5YzlkY2YxMDMxMDkxMTFiOThhZWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FwcGxlUGF5L1dlYlBheW1lbnRDb29y
ZGluYXRvclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BcHBsZVBheS9XZWJQ
YXltZW50Q29vcmRpbmF0b3JQcm94eS5jcHAKQEAgLTkzLDkgKzkzLDkgQEAgdm9pZCBXZWJQYXlt
ZW50Q29vcmRpbmF0b3JQcm94eTo6c2hvd1BheW1lbnRVSShXZWJDb3JlOjpQYWdlSWRlbnRpZmll
ciBkZXN0aW5hdGkKIAogICAgIFVSTCBvcmlnaW5hdGluZ1VSTChVUkwoKSwgb3JpZ2luYXRpbmdV
UkxTdHJpbmcpOwogCi0gICAgVmVjdG9yPFVSTD4gbGlua0ljb25VUkxzOwotICAgIGZvciAoY29u
c3QgYXV0byYgbGlua0ljb25VUkxTdHJpbmcgOiBsaW5rSWNvblVSTFN0cmluZ3MpCi0gICAgICAg
IGxpbmtJY29uVVJMcy5hcHBlbmQoVVJMKFVSTCgpLCBsaW5rSWNvblVSTFN0cmluZykpOworICAg
IGF1dG8gbGlua0ljb25VUkxzID0gbGlua0ljb25VUkxTdHJpbmdzLm1hcChbXShhdXRvJiBsaW5r
SWNvblVSTFN0cmluZykgeworICAgICAgICByZXR1cm4gVVJMKFVSTCgpLCBsaW5rSWNvblVSTFN0
cmluZyk7CisgICAgfSk7CiAKICAgICBwbGF0Zm9ybVNob3dQYXltZW50VUkod2ViUGFnZVByb3h5
SUQsIG9yaWdpbmF0aW5nVVJMLCBsaW5rSWNvblVSTHMsIHBheW1lbnRSZXF1ZXN0LCBbdGhpcywg
d2Vha1RoaXMgPSBXZWFrUHRyIHsgKnRoaXMgfV0oYm9vbCByZXN1bHQpIHsKICAgICAgICAgaWYg
KCF3ZWFrVGhpcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElO
YXZpZ2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9u
LmNwcAppbmRleCA4ODQ2NmM0OWVkMGRlMThlMjAzMmNhYTBhMDQ2NDgzOWVhNzQ1MTAxLi40YTg4
OTAzOWU5NGE2MmZhNTkyZjE5NTdmNzZkODU5ZTc5YzlmYzZkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb24uY3BwCkBAIC02MiwxMCArNjIsMTAgQEAgTmF2
aWdhdGlvbjo6TmF2aWdhdGlvbihXZWJOYXZpZ2F0aW9uU3RhdGUmIHN0YXRlLCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmJiByZXEKICAgICA6IG1fbmF2aWdhdGlvbklEKHN0YXRlLmdlbmVyYXRl
TmF2aWdhdGlvbklEKCkpCiAgICAgLCBtX29yaWdpbmFsUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3Qp
KQogICAgICwgbV9jdXJyZW50UmVxdWVzdChtX29yaWdpbmFsUmVxdWVzdCkKKyAgICAsIG1fcmVk
aXJlY3RDaGFpbiB7IG1fb3JpZ2luYWxSZXF1ZXN0LnVybCgpIH0KICAgICAsIG1fZnJvbUl0ZW0o
ZnJvbUl0ZW0pCiAgICAgLCBtX2NsaWVudE5hdmlnYXRpb25BY3Rpdml0eShuYXZpZ2F0aW9uQWN0
aXZpdHlUaW1lb3V0KQogewotICAgIG1fcmVkaXJlY3RDaGFpbi5hcHBlbmQobV9vcmlnaW5hbFJl
cXVlc3QudXJsKCkpOwogfQogCiBOYXZpZ2F0aW9uOjpOYXZpZ2F0aW9uKFdlYk5hdmlnYXRpb25T
dGF0ZSYgc3RhdGUsIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIHRhcmdldEl0ZW0sIFdlYkJhY2tG
b3J3YXJkTGlzdEl0ZW0qIGZyb21JdGVtLCBGcmFtZUxvYWRUeXBlIGJhY2tGb3J3YXJkRnJhbWVM
b2FkVHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2hh
cmVTaGVldC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2hhcmVTaGVldC5t
bQppbmRleCA1NTRhYjgwNjQyN2VjYjljZTgzMGFjYTk3ZmM3ZGRjZGM5ODUzZTE1Li5lMzg4YTNj
MzdkMGY2OTY1ZDc2OTFmMjdiMTc4MGE5MTNmMDRlZTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NoYXJlU2hlZXQubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV0tTaGFyZVNoZWV0Lm1tCkBAIC0xMDAsOSArMTAwLDkgQEAgc3RhdGlj
IHZvaWQgYXBwZW5kRmlsZXNBc1NoYXJlYWJsZVVSTHMoUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5
PiYmIHNoYXJlRGF0YUFycmEKICAgICAgICAgU3RyaW5nIGZpbGVOYW1lOwogICAgICAgICBSZXRh
aW5QdHI8TlNEYXRhPiBmaWxlRGF0YTsKICAgICB9OwotICAgIFZlY3RvcjxGaWxlV3JpdGVUYXNr
PiBmaWxlV3JpdGVUYXNrczsKLSAgICBmb3IgKGF1dG8mIGZpbGUgOiBmaWxlcykKLSAgICAgICAg
ZmlsZVdyaXRlVGFza3MuYXBwZW5kKHsgZmlsZS5maWxlTmFtZS5pc29sYXRlZENvcHkoKSwgZmls
ZS5maWxlRGF0YS0+Y3JlYXRlTlNEYXRhKCkgfSk7CisgICAgYXV0byBmaWxlV3JpdGVUYXNrcyA9
IGZpbGVzLm1hcChbXShhdXRvJiBmaWxlKSB7CisgICAgICAgIHJldHVybiBGaWxlV3JpdGVUYXNr
IHsgZmlsZS5maWxlTmFtZS5pc29sYXRlZENvcHkoKSwgZmlsZS5maWxlRGF0YS0+Y3JlYXRlTlNE
YXRhKCkgfTsKKyAgICB9KTsKIAogICAgIGF1dG8gcXVldWUgPSBXb3JrUXVldWU6OmNyZWF0ZSgi
Y29tLmFwcGxlLldlYktpdC5XS1NoYXJlU2hlZXQuU2hhcmVhYmxlRmlsZVdyaXRlciIpOwogICAg
IHF1ZXVlLT5kaXNwYXRjaChbc2hhcmVEYXRhQXJyYXkgPSBXVEZNb3ZlKHNoYXJlRGF0YUFycmF5
KSwgZmlsZVdyaXRlVGFza3MgPSBXVEZNb3ZlKGZpbGVXcml0ZVRhc2tzKSwgdGVtcG9yYXJ5RGly
ZWN0b3J5ID0gcmV0YWluUHRyKHRlbXBvcmFyeURpcmVjdG9yeSksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCmluZGV4IGYxYzM3
MDZiMDlmZjllMTI4MjFkN2RhM2EyMjViNzBiYTQ2ZGNlMzYuLjU2YTE0ZDhiZjM2ZWQ0NGRhZGJm
MWU0YzQ4NDBhNWUwNjQxNGI4ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCkBAIC02NjYsMTQgKzY2NiwxMiBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6cmVzdG9yZUFwcEhpZ2hsaWdodHNBbmRTY3JvbGxUb0luZGV4KGNvbnN0IFZl
Y3RvcjxSZWY8U2hhcmVkTQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgVmVjdG9yPFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlPiBtZW1vcnlIYW5k
bGVzOwotCi0gICAgZm9yIChhdXRvIGhpZ2hsaWdodCA6IGhpZ2hsaWdodHMpIHsKKyAgICBhdXRv
IG1lbW9yeUhhbmRsZXMgPSBXVEY6OmNvbXBhY3RNYXAoaGlnaGxpZ2h0cywgW10oYXV0byYgaGln
aGxpZ2h0KSAtPiBzdGQ6Om9wdGlvbmFsPFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlPiB7CiAgICAg
ICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgaGlnaGxpZ2h0LT5jcmVh
dGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKLQot
ICAgICAgICBtZW1vcnlIYW5kbGVzLmFwcGVuZChTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSB7IFdU
Rk1vdmUoaGFuZGxlKSwgaGlnaGxpZ2h0LT5zaXplKCkgfSk7Ci0gICAgfQorICAgICAgICBpZiAo
IWhpZ2hsaWdodC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9u
OjpSZWFkT25seSkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICBy
ZXR1cm4gU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgeyBXVEZNb3ZlKGhhbmRsZSksIGhpZ2hsaWdo
dC0+c2l6ZSgpIH07CisgICAgfSk7CiAgICAgCiAgICAgc2V0VXBIaWdobGlnaHRzT2JzZXJ2ZXIo
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUu
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwCmluZGV4IGM2
MWJlZDgxZDA5Mjg0NjMyYmYyOTY1ZWQyYzk5YjBjNmZlNDAxYTMuLjY5ZTUzZDdiZWI4NmNlNmI0
MDZmM2NkYjgzOTJhYjcyYTNmZmM4MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0ZyYW1lTG9hZFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9GcmFt
ZUxvYWRTdGF0ZS5jcHAKQEAgLTkwLDExICs5MCw4IEBAIHZvaWQgRnJhbWVMb2FkU3RhdGU6OmRp
ZEZpbmlzaExvYWQoKQogCiAgICAgbV9zdGF0ZSA9IFN0YXRlOjpGaW5pc2hlZDsKIAotICAgIFZl
Y3RvcjxPYnNlcnZlcio+IG9ic2VydmVyc0NvcHk7Ci0gICAgZm9yIChhdXRvJiBvYnNlcnZlciA6
IG1fb2JzZXJ2ZXJzKQotICAgICAgICBvYnNlcnZlcnNDb3B5LmFwcGVuZCgmb2JzZXJ2ZXIpOwot
ICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlcnNDb3B5KQotICAgICAgICBvYnNlcnZl
ci0+ZGlkRmluaXNoTG9hZCgpOworICAgIGZvciAoYXV0byYgb2JzZXJ2ZXIgOiBjb3B5VG9WZWN0
b3JPZjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPE9ic2VydmVyPj4obV9vYnNlcnZlcnMpKQorICAg
ICAgICBvYnNlcnZlci5nZXQoKS5kaWRGaW5pc2hMb2FkKCk7CiB9CiAKIHZvaWQgRnJhbWVMb2Fk
U3RhdGU6OmRpZEZhaWxMb2FkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCmluZGV4IDM3NDA4MTkzYjBiNzY4MjNj
MDQ1ODFiNGI0ZTkwNmRkNDQwOWE3YWIuLmUzODAxNmYxZGViNzM3MzJkNWE4NWRjMWQ0NmQxM2Rm
MzVhNjkxZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0
d29ya1Byb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcApAQCAtMTg0LDggKzE4NCw4IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3NQcm94eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpCiAgICAg
cGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVn
YWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgp
KTsKICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlU
b1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0
ZXJBc05vQWNjZXNzKCkpOwogICAgIHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2Jh
bFNldHRpbmdzOjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7Ci0gICAgZm9yIChhdXRvJiBzY2hl
bWUgOiBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJz
KCkpCi0gICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90
b2NvbHMuYXBwZW5kKHNjaGVtZSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJl
ZEZvckN1c3RvbVByb3RvY29scyA9IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3Rv
bVByb3RvY29sSGFuZGxlcnMoKTsKKwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYg
KFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OmNvb2tpZVN0
b3JhZ2VEaXJlY3RvcnkoKTsgIWNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIGlmIChhdXRvIGhhbmRsZSA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZv
clJlYWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0b3J5KSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJv
bGxlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcAppbmRleCBmYTI1NGMyZGFkYzA2MzAyOGRmZDUw
NGQyODkwYTg5MmFlZGFmYjA4Li41YmJlNzM5NjIwNTI3YTgyN2NkNTdmMTY5YWYyZjBjMGM1OTZh
NzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJV
c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCkBAIC0xMTcs
MTEgKzExNywxMSBAQCBVc2VyQ29udGVudENvbnRyb2xsZXJQYXJhbWV0ZXJzIFdlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5OjpwYXJhbWV0ZXJzKCkgY29ucwogICAgIHBhcmFtZXRlcnMuaWRl
bnRpZmllciA9IGlkZW50aWZpZXIoKTsKICAgICAKICAgICBBU1NFUlQocGFyYW1ldGVycy51c2Vy
Q29udGVudFdvcmxkcy5pc0VtcHR5KCkpOwotICAgIGZvciAoY29uc3QgYXV0byYgaWRlbnRpZmll
ciA6IG1fYXNzb2NpYXRlZENvbnRlbnRXb3JsZHMpIHsKKyAgICBwYXJhbWV0ZXJzLnVzZXJDb250
ZW50V29ybGRzID0gV1RGOjptYXAobV9hc3NvY2lhdGVkQ29udGVudFdvcmxkcywgW10oYXV0byYg
aWRlbnRpZmllcikgewogICAgICAgICBhdXRvKiB3b3JsZCA9IEFQSTo6Q29udGVudFdvcmxkOjp3
b3JsZEZvcklkZW50aWZpZXIoaWRlbnRpZmllcik7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHdv
cmxkKTsKLSAgICAgICAgcGFyYW1ldGVycy51c2VyQ29udGVudFdvcmxkcy5hcHBlbmQod29ybGQt
PndvcmxkRGF0YSgpKTsKLSAgICB9CisgICAgICAgIHJldHVybiB3b3JsZC0+d29ybGREYXRhKCk7
CisgICAgfSk7CiAKICAgICBmb3IgKGF1dG8gdXNlclNjcmlwdCA6IG1fdXNlclNjcmlwdHMtPmVs
ZW1lbnRzT2ZUeXBlPEFQSTo6VXNlclNjcmlwdD4oKSkKICAgICAgICAgcGFyYW1ldGVycy51c2Vy
U2NyaXB0cy5hcHBlbmQoeyB1c2VyU2NyaXB0LT5pZGVudGlmaWVyKCksIHVzZXJTY3JpcHQtPmNv
bnRlbnRXb3JsZCgpLmlkZW50aWZpZXIoKSwgdXNlclNjcmlwdC0+dXNlclNjcmlwdCgpIH0pOwpA
QCAtMTI5LDggKzEyOSw5IEBAIFVzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnMgV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnBhcmFtZXRlcnMoKSBjb25zCiAgICAgZm9yIChhdXRv
IHVzZXJTdHlsZVNoZWV0IDogbV91c2VyU3R5bGVTaGVldHMtPmVsZW1lbnRzT2ZUeXBlPEFQSTo6
VXNlclN0eWxlU2hlZXQ+KCkpCiAgICAgICAgIHBhcmFtZXRlcnMudXNlclN0eWxlU2hlZXRzLmFw
cGVuZCh7IHVzZXJTdHlsZVNoZWV0LT5pZGVudGlmaWVyKCksIHVzZXJTdHlsZVNoZWV0LT5jb250
ZW50V29ybGQoKS5pZGVudGlmaWVyKCksIHVzZXJTdHlsZVNoZWV0LT51c2VyU3R5bGVTaGVldCgp
IH0pOwogCi0gICAgZm9yIChhdXRvJiBoYW5kbGVyIDogbV9zY3JpcHRNZXNzYWdlSGFuZGxlcnMu
dmFsdWVzKCkpCi0gICAgICAgIHBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXJzLmFwcGVuZCh7IGhh
bmRsZXItPmlkZW50aWZpZXIoKSwgaGFuZGxlci0+d29ybGQoKS5pZGVudGlmaWVyKCksIGhhbmRs
ZXItPm5hbWUoKSB9KTsKKyAgICBwYXJhbWV0ZXJzLm1lc3NhZ2VIYW5kbGVycyA9IFdURjo6bWFw
KG1fc2NyaXB0TWVzc2FnZUhhbmRsZXJzLCBbXShhdXRvIGVudHJ5KSB7CisgICAgICAgIHJldHVy
biBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlckRhdGEgeyBlbnRyeS52YWx1ZS0+aWRlbnRpZmllcigp
LCBlbnRyeS52YWx1ZS0+d29ybGQoKS5pZGVudGlmaWVyKCksIGVudHJ5LnZhbHVlLT5uYW1lKCkg
fTsKKyAgICB9KTsKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgcGFyYW1l
dGVycy5jb250ZW50UnVsZUxpc3RzID0gY29udGVudFJ1bGVMaXN0RGF0YSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRv
ck1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24v
QXV0aGVudGljYXRvck1hbmFnZXIuY3BwCmluZGV4IDkzNDgwZWQ1Y2IzOWE2MWNiY2Y2NzM1MWUw
YTg4MGVhMDlmZTQ0NzYuLjY1NzJmNTM5NTk4ZWY0MWRkMTAzMDVhY2VlYzhmMTg3ZDhkNTI1MjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0F1
dGhlbnRpY2F0b3JNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJB
dXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHAKQEAgLTQxNiwxMSArNDE2LDEx
IEBAIHZvaWQgQXV0aGVudGljYXRvck1hbmFnZXI6OnN0YXJ0RGlzY292ZXJ5KGNvbnN0IFRyYW5z
cG9ydFNldCYgdHJhbnNwb3J0cykKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwog
ICAgIEFTU0VSVChtX3NlcnZpY2VzLmlzRW1wdHkoKSAmJiB0cmFuc3BvcnRzLnNpemUoKSA8PSBt
YXhUcmFuc3BvcnROdW1iZXIpOwotICAgIGZvciAoYXV0byYgdHJhbnNwb3J0IDogdHJhbnNwb3J0
cykgeworICAgIG1fc2VydmljZXMgPSBXVEY6Om1hcCh0cmFuc3BvcnRzLCBbdGhpc10oYXV0byYg
dHJhbnNwb3J0KSB7CiAgICAgICAgIGF1dG8gc2VydmljZSA9IGNyZWF0ZVNlcnZpY2UodHJhbnNw
b3J0LCAqdGhpcyk7CiAgICAgICAgIHNlcnZpY2UtPnN0YXJ0RGlzY292ZXJ5KCk7Ci0gICAgICAg
IG1fc2VydmljZXMuYXBwZW5kKFdURk1vdmUoc2VydmljZSkpOwotICAgIH0KKyAgICAgICAgcmV0
dXJuIHNlcnZpY2U7CisgICAgfSk7CiB9CiAKIHZvaWQgQXV0aGVudGljYXRvck1hbmFnZXI6Omlu
aXRUaW1lT3V0VGltZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
QmFja0ZvcndhcmRMaXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkJhY2tGb3J3
YXJkTGlzdC5jcHAKaW5kZXggYzc0MzQzZTY1Yjg4OWY3ODY5ZGM4Y2NhMzQwNTFiOGIyNjU0MDJi
Ni4uZGVjOWU4MzkyMjM2OGZlNjE1NWUwM2Q2OWEzZjM3ZDlkYmYwMTc3OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwCkBAIC0zNDAsMTYgKzM0
MCwxMSBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6cmVtb3ZlQWxsSXRlbXMoKQogCiAgICAg
TE9HKEJhY2tGb3J3YXJkLCAiKEJhY2svRm9yd2FyZCkgV2ViQmFja0ZvcndhcmRMaXN0ICVwIHJl
bW92ZUFsbEl0ZW1zIChoYXMgJXp1IG9mIHRoZW0pIiwgdGhpcywgbV9lbnRyaWVzLnNpemUoKSk7
CiAKLSAgICBWZWN0b3I8UmVmPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiByZW1vdmVkSXRlbXM7
Ci0KLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9lbnRyaWVzKSB7CisgICAgZm9yIChhdXRvJiBl
bnRyeSA6IG1fZW50cmllcykKICAgICAgICAgZGlkUmVtb3ZlSXRlbShlbnRyeSk7Ci0gICAgICAg
IHJlbW92ZWRJdGVtcy5hcHBlbmQoV1RGTW92ZShlbnRyeSkpOwotICAgIH0KIAotICAgIG1fZW50
cmllcy5jbGVhcigpOwogICAgIG1fY3VycmVudEluZGV4ID0gc3RkOjpudWxsb3B0OwotICAgIG1f
cGFnZS0+ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KG51bGxwdHIsIFdURk1vdmUocmVtb3ZlZEl0
ZW1zKSk7CisgICAgbV9wYWdlLT5kaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QobnVsbHB0ciwgc3Rk
OjpleGNoYW5nZShtX2VudHJpZXMsIHsgfSkpOwogfQogCiB2b2lkIFdlYkJhY2tGb3J3YXJkTGlz
dDo6Y2xlYXIoKQpAQCAtMzYzLDIxICszNTgsMTcgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3Q6
OmNsZWFyKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPFdlYkJhY2tGb3J3YXJkTGlz
dEl0ZW0+IGN1cnJlbnRJdGVtID0gdGhpcy0+Y3VycmVudEl0ZW0oKTsKLSAgICBWZWN0b3I8UmVm
PFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiByZW1vdmVkSXRlbXM7CiAKICAgICBpZiAoIWN1cnJl
bnRJdGVtKSB7CiAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGV2ZXIgaGF2ZSBubyBjdXJyZW50
IGl0ZW0gaWYgd2UgYWxzbyBoYXZlIG5vIGN1cnJlbnQgaXRlbSBpbmRleC4KICAgICAgICAgQVNT
RVJUKCFtX2N1cnJlbnRJbmRleCk7CiAKICAgICAgICAgLy8gQnV0IGp1c3QgaW4gY2FzZSBpdCBk
b2VzIGhhcHBlbiBpbiBwcmFjdGljZSB3ZSBzaG91bGQgZ2V0IGJhY2sgaW50byBhIGNvbnNpc3Rl
bnQgc3RhdGUgbm93LgotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkg
ewotICAgICAgICAgICAgZGlkUmVtb3ZlSXRlbShtX2VudHJpZXNbaV0pOwotICAgICAgICAgICAg
cmVtb3ZlZEl0ZW1zLmFwcGVuZChXVEZNb3ZlKG1fZW50cmllc1tpXSkpOwotICAgICAgICB9Cisg
ICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2VudHJpZXMpCisgICAgICAgICAgICBkaWRSZW1v
dmVJdGVtKGVudHJ5KTsKIAotICAgICAgICBtX2VudHJpZXMuY2xlYXIoKTsKICAgICAgICAgbV9j
dXJyZW50SW5kZXggPSBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIG1fcGFnZS0+ZGlkQ2hhbmdlQmFj
a0ZvcndhcmRMaXN0KG51bGxwdHIsIFdURk1vdmUocmVtb3ZlZEl0ZW1zKSk7CisgICAgICAgIG1f
cGFnZS0+ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KG51bGxwdHIsIHN0ZDo6ZXhjaGFuZ2UobV9l
bnRyaWVzLCB7IH0pKTsKIAogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzg3LDYgKzM3OCw3
IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjpjbGVhcigpCiAgICAgICAgICAgICBkaWRSZW1v
dmVJdGVtKG1fZW50cmllc1tpXSk7CiAgICAgfQogCisgICAgVmVjdG9yPFJlZjxXZWJCYWNrRm9y
d2FyZExpc3RJdGVtPj4gcmVtb3ZlZEl0ZW1zOwogICAgIHJlbW92ZWRJdGVtcy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHNpemUgLSAxKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewogICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggJiYgaSAhPSAqbV9jdXJyZW50SW5k
ZXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKaW5kZXggZmEx
NzQyY2YzMmRhOTk1MjczMjNkZmM3YzhiZjBhNzkwNjMwNDFmZS4uNjFiZDMwYTM2NDE0NzNjNWRi
MmM1NzQzMGU5M2NiN2UyNjYzYWQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQb29sLmNwcApAQCAtODQ5LDEwICs4NDksOSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpp
bml0aWFsaXplTmV3V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MsIFdlYnNpdGVE
YQogICAgICAgICAgICAgcGFyYW1ldGVycy5pbmplY3RlZEJ1bmRsZVBhdGhFeHRlbnNpb25IYW5k
bGUgPSBXVEZNb3ZlKCpoYW5kbGUpOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcGF0aCA6IG1f
cmVzb2x2ZWRQYXRocy5hZGRpdGlvbmFsV2ViUHJvY2Vzc1NhbmRib3hFeHRlbnNpb25QYXRocykg
ewotICAgICAgICBpZiAoYXV0byBoYW5kbGUgPSAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFu
ZGxlV2l0aG91dFJlc29sdmluZ1BhdGgocGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVh
ZE9ubHkpKQotICAgICAgICAgICAgcGFyYW1ldGVycy5hZGRpdGlvbmFsU2FuZGJveEV4dGVuc2lv
bkhhbmRsZXMuYXBwZW5kKFdURk1vdmUoKmhhbmRsZSkpOwotICAgIH0KKyAgICBwYXJhbWV0ZXJz
LmFkZGl0aW9uYWxTYW5kYm94RXh0ZW5zaW9uSGFuZGxlcyA9IFdURjo6Y29tcGFjdE1hcChtX3Jl
c29sdmVkUGF0aHMuYWRkaXRpb25hbFdlYlByb2Nlc3NTYW5kYm94RXh0ZW5zaW9uUGF0aHMsIFtd
KGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0dXJuIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhh
bmRsZVdpdGhvdXRSZXNvbHZpbmdQYXRoKHBhdGgsIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJl
YWRPbmx5KTsKKyAgICB9KTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgc2V0SmF2
YVNjcmlwdENvbmZpZ3VyYXRpb25GaWxlRW5hYmxlZEZyb21EZWZhdWx0cygpOwpAQCAtMTg3MCwx
NCArMTg2OSw5IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZVByb2Nlc3NGcm9tT3JpZ2lu
Q2FjaGVTZXQoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQogICAgIExPRyhQcm9jZXNzU3dhcHBp
bmcsICIoUHJvY2Vzc1N3YXBwaW5nKSBSZW1vdmluZyBwcm9jZXNzIHdpdGggcGlkICVpIGZyb20g
dGhlIG9yaWdpbiBjYWNoZSBzZXQiLCBwcm9jZXNzLnByb2Nlc3NJZGVudGlmaWVyKCkpOwogCiAg
ICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIHZlcnkgaW5lZmZpY2llbnQgYXMgdGhlIG51bWJlciBv
ZiByZW1lbWJlcmVkIG9yaWdpbnMgYW5kIHByb2Nlc3NlcyBncm93cwotICAgIFZlY3RvcjxXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gcmVnaXN0cmFibGVEb21haW5zVG9SZW1vdmU7Ci0gICAg
Zm9yIChhdXRvIGVudHJ5IDogbV9zd2FwcGVkUHJvY2Vzc2VzUGVyUmVnaXN0cmFibGVEb21haW4p
IHsKLSAgICAgICAgaWYgKGVudHJ5LnZhbHVlID09ICZwcm9jZXNzKQotICAgICAgICAgICAgcmVn
aXN0cmFibGVEb21haW5zVG9SZW1vdmUuYXBwZW5kKGVudHJ5LmtleSk7Ci0gICAgfQotCi0gICAg
Zm9yIChhdXRvJiByZWdpc3RyYWJsZURvbWFpbiA6IHJlZ2lzdHJhYmxlRG9tYWluc1RvUmVtb3Zl
KQotICAgICAgICBtX3N3YXBwZWRQcm9jZXNzZXNQZXJSZWdpc3RyYWJsZURvbWFpbi5yZW1vdmUo
cmVnaXN0cmFibGVEb21haW4pOworICAgIG1fc3dhcHBlZFByb2Nlc3Nlc1BlclJlZ2lzdHJhYmxl
RG9tYWluLnJlbW92ZUlmKFsmXShhdXRvJiBlbnRyeSkgeworICAgICAgICByZXR1cm4gZW50cnku
dmFsdWUgPT0gJnByb2Nlc3M7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBy
b2Nlc3NGb3JOYXZpZ2F0aW9uKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgQVBJOjpOYXZpZ2F0
aW9uJiBuYXZpZ2F0aW9uLCBSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmIHNvdXJjZVByb2Nlc3MsIGNv
bnN0IFVSTCYgc291cmNlVVJMLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nlc3NT
d2FwUmVxdWVzdGVkQnlDbGllbnQsIFdlYlByb2Nlc3NQcm94eTo6Q2FwdGl2ZVBvcnRhbE1vZGUg
Y2FwdGl2ZVBvcnRhbE1vZGUsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgUmVmPFdl
YnNpdGVEYXRhU3RvcmU+JiYgZGF0YVN0b3JlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZjxX
ZWJQcm9jZXNzUHJveHk+JiYsIFN1c3BlbmRlZFBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
cm94eS5jcHAKaW5kZXggYjEyODYwZGY1MTBiYzRlM2RmYmI3ZTNmYzkyMGI1ZDA0MmI4NDMyMS4u
MzY4YTM5NTg3ZGEzM2RlNjRjMWI4OWQwZTYzOGQzOGI4OGQ3YTE3YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCkBAIC05MzYsOCArOTM2LDkgQEAgdm9p
ZCBXZWJQcm9jZXNzUHJveHk6OnByb2Nlc3NEaWRUZXJtaW5hdGVPckZhaWxlZFRvTGF1bmNoKFBy
b2Nlc3NUZXJtaW5hdGlvblJlYXMKIAogICAgIC8vIFRoZXJlIGlzIGEgbmVzdGVkIHRyYW5zYWN0
aW9uIGluIFdlYlBhZ2VQcm94eTo6cmVzZXRTdGF0ZUFmdGVyUHJvY2Vzc0V4aXRlZCgpIHRoYXQg
d2UgZG9uJ3Qgd2FudCB0byBjb21taXQgYmVmb3JlIHRoZSBjbGllbnQgY2FsbCBiZWxvdyAoZGlz
cGF0Y2hQcm9jZXNzRGlkVGVybWluYXRlKS4KICAgICBWZWN0b3I8UGFnZUxvYWRTdGF0ZTo6VHJh
bnNhY3Rpb24+IHBhZ2VMb2FkU3RhdGVUcmFuc2FjdGlvbnM7CisgICAgcGFnZUxvYWRTdGF0ZVRy
YW5zYWN0aW9ucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBhZ2VzLnNpemUoKSk7CiAgICAgZm9y
IChhdXRvJiBwYWdlIDogcGFnZXMpIHsKLSAgICAgICAgcGFnZUxvYWRTdGF0ZVRyYW5zYWN0aW9u
cy5hcHBlbmQocGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnRyYW5zYWN0aW9uKCkpOworICAgICAgICBw
YWdlTG9hZFN0YXRlVHJhbnNhY3Rpb25zLnVuY2hlY2tlZEFwcGVuZChwYWdlLT5wYWdlTG9hZFN0
YXRlKCkudHJhbnNhY3Rpb24oKSk7CiAgICAgICAgIHBhZ2UtPnJlc2V0U3RhdGVBZnRlclByb2Nl
c3NUZXJtaW5hdGlvbihyZWFzb24pOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCBiMzZk
OWE3NGI5YTE3NWEwODE2YjdhMmUxNGYxMzlkYjVlZjU2ZTZkLi41ZWUxNWM1ZWZkYTZmNDkzOTI0
ZGQzN2QyYTAwYzIxMDEyNTkzYWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtNDMxLDggKzQzMSwx
MCBAQCBwcml2YXRlOgogICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBl
OjpEaXNrQ2FjaGUpKSB7CiAgICAgICAgIG1fcXVldWUtPmRpc3BhdGNoKFttZWRpYUNhY2hlRGly
ZWN0b3J5ID0gbV9jb25maWd1cmF0aW9uLT5tZWRpYUNhY2hlRGlyZWN0b3J5KCkuaXNvbGF0ZWRD
b3B5KCksIGNhbGxiYWNrQWdncmVnYXRvcl0gewogICAgICAgICAgICAgV2Vic2l0ZURhdGEgd2Vi
c2l0ZURhdGE7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQ6Om9yaWdpbnNJbk1lZGlhQ2FjaGUobWVkaWFDYWNoZURpcmVjdG9yeSkpCi0g
ICAgICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmQoV2Vic2l0ZURhdGE6OkVu
dHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSwgMCB9KTsKKyAgICAgICAg
ICAgIGF1dG8gb3JpZ2lucyA9IFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Om9yaWdpbnNJbk1l
ZGlhQ2FjaGUobWVkaWFDYWNoZURpcmVjdG9yeSk7CisgICAgICAgICAgICB3ZWJzaXRlRGF0YS5l
bnRyaWVzID0gV1RGOjptYXAob3JpZ2lucywgW10oYXV0byYgb3JpZ2luKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBl
OjpEaXNrQ2FjaGUsIDAgfTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgY2FsbGJhY2tB
Z2dyZWdhdG9yLT5hZGRXZWJzaXRlRGF0YShXVEZNb3ZlKHdlYnNpdGVEYXRhKSk7CiAgICAgICAg
IH0pOwogICAgIH0KQEAgLTQ2OSw4ICs0NzEsOSBAQCBwcml2YXRlOgogICAgIGlmIChkYXRhVHlw
ZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0KSkgewogICAgICAg
ICBtX2RldmljZUlkSGFzaFNhbHRTdG9yYWdlLT5nZXREZXZpY2VJZEhhc2hTYWx0T3JpZ2lucyhb
Y2FsbGJhY2tBZ2dyZWdhdG9yXShhdXRvJiYgb3JpZ2lucykgewogICAgICAgICAgICAgV2Vic2l0
ZURhdGEgd2Vic2l0ZURhdGE7Ci0gICAgICAgICAgICB3aGlsZSAoIW9yaWdpbnMuaXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRh
OjpFbnRyeSB7IG9yaWdpbnMudGFrZUFueSgpLCBXZWJzaXRlRGF0YVR5cGU6OkRldmljZUlkSGFz
aFNhbHQsIDAgfSk7CisgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzID0gV1RGOjptYXAo
b3JpZ2lucywgW10oYXV0byYgb3JpZ2luKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYnNp
dGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0
LCAwIH07CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+
YWRkV2Vic2l0ZURhdGEoV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICB9KTsKICAgICB9
CkBAIC00NzksMTAgKzQ4MiwxMSBAQCBwcml2YXRlOgogICAgICAgICBtX3F1ZXVlLT5kaXNwYXRj
aChbZmV0Y2hPcHRpb25zLCBhcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5ID0gbV9jb25maWd1cmF0
aW9uLT5hcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KCkuaXNvbGF0ZWRDb3B5KCksIGFwcGxpY2F0
aW9uQ2FjaGVGbGF0RmlsZVN1YmRpcmVjdG9yeU5hbWUgPSBtX2NvbmZpZ3VyYXRpb24tPmFwcGxp
Y2F0aW9uQ2FjaGVGbGF0RmlsZVN1YmRpcmVjdG9yeU5hbWUoKS5pc29sYXRlZENvcHkoKSwgY2Fs
bGJhY2tBZ2dyZWdhdG9yXSB7CiAgICAgICAgICAgICBhdXRvIHN0b3JhZ2UgPSBXZWJDb3JlOjpB
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y3JlYXRlKGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3Rvcnks
IGFwcGxpY2F0aW9uQ2FjaGVGbGF0RmlsZVN1YmRpcmVjdG9yeU5hbWUpOwogICAgICAgICAgICAg
V2Vic2l0ZURhdGEgd2Vic2l0ZURhdGE7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6
IHN0b3JhZ2UtPm9yaWdpbnNXaXRoQ2FjaGUoKSkgeworICAgICAgICAgICAgYXV0byBvcmlnaW5z
ID0gc3RvcmFnZS0+b3JpZ2luc1dpdGhDYWNoZSgpOworICAgICAgICAgICAgd2Vic2l0ZURhdGEu
ZW50cmllcyA9IFdURjo6bWFwKG9yaWdpbnMsIFsmXShhdXRvJiBvcmlnaW4pIHsKICAgICAgICAg
ICAgICAgICB1aW50NjRfdCBzaXplID0gZmV0Y2hPcHRpb25zLmNvbnRhaW5zKFdlYnNpdGVEYXRh
RmV0Y2hPcHRpb246OkNvbXB1dGVTaXplcykgPyBzdG9yYWdlLT5kaXNrVXNhZ2VGb3JPcmlnaW4o
b3JpZ2luKSA6IDA7Ci0gICAgICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmQo
V2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6Ok9mZmxpbmVXZWJB
cHBsaWNhdGlvbkNhY2hlLCBzaXplIH0pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJldHVybiBXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6T2Zm
bGluZVdlYkFwcGxpY2F0aW9uQ2FjaGUsIHNpemUgfTsKKyAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRXZWJzaXRlRGF0YShXVEZNb3ZlKHdlYnNpdGVE
YXRhKSk7CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTQ5MCw4ICs0OTQsOSBAQCBwcml2YXRlOgog
ICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpXZWJTUUxEYXRhYmFz
ZXMpICYmIGlzUGVyc2lzdGVudCgpKSB7CiAgICAgICAgIG1fcXVldWUtPmRpc3BhdGNoKFt3ZWJT
UUxEYXRhYmFzZURpcmVjdG9yeSA9IG1fY29uZmlndXJhdGlvbi0+d2ViU1FMRGF0YWJhc2VEaXJl
Y3RvcnkoKS5pc29sYXRlZENvcHkoKSwgY2FsbGJhY2tBZ2dyZWdhdG9yXSgpIHsKICAgICAgICAg
ICAgIFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhOwotICAgICAgICAgICAgZm9yIChhdXRvJiBvcmln
aW4gOiBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXJXaXRoRGF0YWJhc2VQYXRoKHdl
YlNRTERhdGFiYXNlRGlyZWN0b3J5KS0+b3JpZ2lucygpKQotICAgICAgICAgICAgICAgIHdlYnNp
dGVEYXRhLmVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0
ZURhdGFUeXBlOjpXZWJTUUxEYXRhYmFzZXMsIDAgfSk7CisgICAgICAgICAgICB3ZWJzaXRlRGF0
YS5lbnRyaWVzID0gV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyV2l0aERhdGFiYXNl
UGF0aCh3ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSktPm9yaWdpbnMoKS5tYXAoW10oYXV0byYgb3Jp
Z2luKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdp
biwgV2Vic2l0ZURhdGFUeXBlOjpXZWJTUUxEYXRhYmFzZXMsIDAgfTsKKyAgICAgICAgICAgIH0p
OwogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRXZWJzaXRlRGF0YShXVEZNb3Zl
KHdlYnNpdGVEYXRhKSk7CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTQ5OSw4ICs1MDQsOSBAQCBw
cml2YXRlOgogICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpNZWRp
YUtleXMpICYmIGlzUGVyc2lzdGVudCgpKSB7CiAgICAgICAgIG1fcXVldWUtPmRpc3BhdGNoKFtt
ZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5ID0gbV9jb25maWd1cmF0aW9uLT5tZWRpYUtleXNTdG9y
YWdlRGlyZWN0b3J5KCkuaXNvbGF0ZWRDb3B5KCksIGNhbGxiYWNrQWdncmVnYXRvcl0gewogICAg
ICAgICAgICAgV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGE7Ci0gICAgICAgICAgICBmb3IgKGF1dG8m
IG9yaWdpbiA6IG1lZGlhS2V5T3JpZ2lucyhtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KSkKLSAg
ICAgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6RW50
cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6TWVkaWFLZXlzLCAwIH0pOworICAgICAgICAg
ICAgd2Vic2l0ZURhdGEuZW50cmllcyA9IG1lZGlhS2V5T3JpZ2lucyhtZWRpYUtleXNTdG9yYWdl
RGlyZWN0b3J5KS5tYXAoW10oYXV0byYgb3JpZ2luKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpNZWRpYUtleXMs
IDAgfTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5h
ZGRXZWJzaXRlRGF0YShXVEZNb3ZlKHdlYnNpdGVEYXRhKSk7CiAgICAgICAgIH0pOwogICAgIH0K
QEAgLTcxMiw4ICs3MTgsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0
aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQogICAgICAgICAgICAg
ICAgIGZvciAoYXV0byYgaG9zdE5hbWUgOiBkYXRhUmVjb3JkLkhTVFNDYWNoZUhvc3ROYW1lcykK
ICAgICAgICAgICAgICAgICAgICAgSFNUU0NhY2hlSG9zdE5hbWVzLmFwcGVuZChob3N0TmFtZSk7
CiAjaWYgRU5BQkxFKElOVEVMTElHRU5UX1RSQUNLSU5HX1BSRVZFTlRJT04pCisgICAgICAgICAg
ICAgICAgcmVnaXN0cmFibGVEb21haW5zLnJlc2VydmVDYXBhY2l0eShyZWdpc3RyYWJsZURvbWFp
bnMuc2l6ZSgpICsgZGF0YVJlY29yZC5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUmVnaXN0cmFibGVE
b21haW5zLnNpemUoKSk7CiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiByZWdpc3RyYWJsZURv
bWFpbiA6IGRhdGFSZWNvcmQucmVzb3VyY2VMb2FkU3RhdGlzdGljc1JlZ2lzdHJhYmxlRG9tYWlu
cykKLSAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmFibGVEb21haW5zLmFwcGVuZChyZWdpc3Ry
YWJsZURvbWFpbik7CisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhYmxlRG9tYWlucy51bmNo
ZWNrZWRBcHBlbmQocmVnaXN0cmFibGVEb21haW4pOwogI2VuZGlmCiAgICAgICAgICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbQppbmRleCBm
YTNiYzUwYjI0ZmFmMmVlNWZlZTc0NmQyYmVjODA0YWE0YWZiNzJjLi4wMWExNjdhNzhlMzdjZDNj
ZGY0YjE2Y2VlYjk4NWJmYTViNTVjNjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvVGV4dENoZWNrZXJJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1RleHRDaGVja2VySU9TLm1tCkBAIC0zNCw2ICszNCw3IEBACiAjaW1wb3J0IDx3dGYvSGFz
aE1hcC5oPgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3dGYvUmV0
YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0
Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0yNDAsMTIgKzI0
MSwxMyBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0
T2ZQYXJhZ3JhcGgoU3BlbGxEb2N1bWVudFRhZyBzcAogICAgICAgICAgICAgICAgIFRleHRDaGVj
a2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hl
Y2tpbmdUeXBlOjpTcGVsbGluZzsKICAgICAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1
bHRSYW5nZTsKLSAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAgICAg
ICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICB9
IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiBjaGVj
a2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpKSB7CiAgICAgICAg
ICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgICAgICBOU0Fy
cmF5ICpkZXRhaWxzID0gW2luY29taW5nUmVzdWx0IGdyYW1tYXJEZXRhaWxzXTsKICAgICAgICAg
ICAgICAgICByZXN1bHQudHlwZSA9IFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXI7CiAgICAgICAg
ICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFuZ2U7CisgICAgICAgICAgICAgICAgcmVz
dWx0LmRldGFpbHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkZXRhaWxzLmNvdW50KTsKICAgICAg
ICAgICAgICAgICBmb3IgKE5TRGljdGlvbmFyeSAqaW5jb21pbmdEZXRhaWwgaW4gZGV0YWlscykg
ewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaW5jb21pbmdEZXRhaWwpOwogICAgICAgICAg
ICAgICAgICAgICBHcmFtbWFyRGV0YWlsIGRldGFpbDsKQEAgLTI1OSwxMyArMjYxLDEwIEBAIFZl
Y3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFw
aChTcGVsbERvY3VtZW50VGFnIHNwCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICBkZXRhaWwucmFuZ2UgPSBkZXRhaWxOU1JhbmdlOwogICAgICAgICAgICAgICAgICAg
ICBkZXRhaWwudXNlckRlc2NyaXB0aW9uID0gW2luY29taW5nRGV0YWlsIG9iamVjdEZvcktleTpA
Ik5TR3JhbW1hclVzZXJEZXNjcmlwdGlvbiJdOwotICAgICAgICAgICAgICAgICAgICBOU0FycmF5
ICpndWVzc2VzID0gW2luY29taW5nRGV0YWlsIG9iamVjdEZvcktleTpAIk5TR3JhbW1hckNvcnJl
Y3Rpb25zIl07Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBmb3Ig
KE5TU3RyaW5nICpndWVzcyBpbiBndWVzc2VzKQotICAgICAgICAgICAgICAgICAgICAgICAgZGV0
YWlsLmd1ZXNzZXMuYXBwZW5kKGd1ZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmRl
dGFpbHMuYXBwZW5kKGRldGFpbCk7CisgICAgICAgICAgICAgICAgICAgIGRldGFpbC5ndWVzc2Vz
ID0gbWFrZVZlY3RvcjxTdHJpbmc+KFtpbmNvbWluZ0RldGFpbCBvYmplY3RGb3JLZXk6QCJOU0dy
YW1tYXJDb3JyZWN0aW9ucyJdKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmRldGFpbHMu
dW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZGV0YWlsKSk7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmVz
dWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0gZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQWN0
aW9uU2hlZXRBc3Npc3RhbnQubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tBY3Rp
b25TaGVldEFzc2lzdGFudC5tbQppbmRleCBjOWFlMWE2Njc3NzFiMjYxMDk1ODU0ZWFlNTllMjg1
YWI3NTJmNjdiLi40NWRkMmUxMzRjNGQ4NzhmNjViMTZmOWRmNDRkNjE0MDEzNTlmYmI5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFzc2lzdGFu
dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFzc2lz
dGFudC5tbQpAQCAtMjA3LDEyICsyMDcsMTEgQEAgLSAoQ0dSZWN0KXByZXNlbnRhdGlvblJlY3RG
b3JFbGVtZW50VXNpbmdDbG9zZXN0SW5kaWNhdGVkUmVjdAogCiAgICAgV2ViQ29yZTo6RmxvYXRQ
b2ludCB0b3VjaExvY2F0aW9uID0gX3Bvc2l0aW9uSW5mb3JtYXRpb24tPnJlcXVlc3QucG9pbnQ7
CiAgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBsaW5rRWxlbWVudExvY2F0aW9uID0gaW5kaWNhdG9y
LnRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKTsKLSAgICBW
ZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiBpbmRpY2F0ZWRSZWN0czsKLSAgICBmb3IgKGF1dG8g
cmVjdCA6IGluZGljYXRvci50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKSB7Cisg
ICAgYXV0byBpbmRpY2F0ZWRSZWN0cyA9IGluZGljYXRvci50ZXh0UmVjdHNJbkJvdW5kaW5nUmVj
dENvb3JkaW5hdGVzLm1hcChbJl0oYXV0byByZWN0KSB7CiAgICAgICAgIHJlY3QuaW5mbGF0ZSgy
KTsKICAgICAgICAgcmVjdC5tb3ZlQnkobGlua0VsZW1lbnRMb2NhdGlvbik7Ci0gICAgICAgIGlu
ZGljYXRlZFJlY3RzLmFwcGVuZChyZWN0KTsKLSAgICB9CisgICAgICAgIHJldHVybiByZWN0Owor
ICAgIH0pOwogCiAgICAgZm9yIChjb25zdCBhdXRvJiBwYXRoIDogV2ViQ29yZTo6UGF0aFV0aWxp
dGllczo6cGF0aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3RzKGluZGljYXRlZFJlY3RzLCAwKSkgewog
ICAgICAgICBhdXRvIGJvdW5kaW5nUmVjdCA9IHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFjLm1tIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFjLm1tCmluZGV4IDE2ZDY4
MzhlNTQ4ZTA0MzJmYmQxOGY4ZDRkMmFkZTFjMmMxMDhmNmUuLmVjZTJlM2UyNDUzMTVlZTcxYWQ5
Nzk3ZmE2Y2M4MGI0MjkzMzBkMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9UZXh0Q2hlY2tlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMv
VGV4dENoZWNrZXJNYWMubW0KQEAgLTM0NCwxMiArMzQ0LDEzIEBAIFZlY3RvcjxUZXh0Q2hlY2tp
bmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChTcGVsbERvY3VtZW50
VGFnIHNwCiAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAg
ICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZzsKICAgICAgICAgICAg
IHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJhbmdlOwotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQo
cmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAg
ICAgICAgIH0gZWxzZSBpZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVHcmFtbWFy
ICYmIGNoZWNraW5nVHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcikpIHsK
ICAgICAgICAgICAgIFRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICBOU0Fy
cmF5ICpkZXRhaWxzID0gW2luY29taW5nUmVzdWx0IGdyYW1tYXJEZXRhaWxzXTsKICAgICAgICAg
ICAgIHJlc3VsdC50eXBlID0gVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcjsKICAgICAgICAgICAg
IHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJhbmdlOworICAgICAgICAgICAgcmVzdWx0LmRldGFpbHMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkZXRhaWxzLmNvdW50KTsKICAgICAgICAgICAgIGZvciAo
TlNEaWN0aW9uYXJ5ICppbmNvbWluZ0RldGFpbCBpbiBkZXRhaWxzKSB7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKGluY29taW5nRGV0YWlsKTsKICAgICAgICAgICAgICAgICBHcmFtbWFyRGV0YWls
IGRldGFpbDsKQEAgLTM2MSw5ICszNjIsOCBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBU
ZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3BlbGxEb2N1bWVudFRhZyBzcAogICAg
ICAgICAgICAgICAgIGRldGFpbC5yYW5nZSA9IGRldGFpbE5TUmFuZ2U7CiAgICAgICAgICAgICAg
ICAgZGV0YWlsLnVzZXJEZXNjcmlwdGlvbiA9IFtpbmNvbWluZ0RldGFpbCBvYmplY3RGb3JLZXk6
TlNHcmFtbWFyVXNlckRlc2NyaXB0aW9uXTsKICAgICAgICAgICAgICAgICBOU0FycmF5ICpndWVz
c2VzID0gW2luY29taW5nRGV0YWlsIG9iamVjdEZvcktleTpOU0dyYW1tYXJDb3JyZWN0aW9uc107
Ci0gICAgICAgICAgICAgICAgZm9yIChOU1N0cmluZyAqZ3Vlc3MgaW4gZ3Vlc3NlcykKLSAgICAg
ICAgICAgICAgICAgICAgZGV0YWlsLmd1ZXNzZXMuYXBwZW5kKFN0cmluZyhndWVzcykpOwotICAg
ICAgICAgICAgICAgIHJlc3VsdC5kZXRhaWxzLmFwcGVuZChkZXRhaWwpOworICAgICAgICAgICAg
ICAgIGRldGFpbC5ndWVzc2VzID0gbWFrZVZlY3RvcjxTdHJpbmc+KGd1ZXNzZXMpOworICAgICAg
ICAgICAgICAgIHJlc3VsdC5kZXRhaWxzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGRldGFpbCkp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKICAg
ICAgICAgfSBlbHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZUxpbmsgJiYg
Y2hlY2tpbmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpMaW5rKSkgewpAQCAtMzcx
LDMxICszNzEsMzEgQEAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNo
ZWNrVGV4dE9mUGFyYWdyYXBoKFNwZWxsRG9jdW1lbnRUYWcgc3AKICAgICAgICAgICAgIHJlc3Vs
dC50eXBlID0gVGV4dENoZWNraW5nVHlwZTo6TGluazsKICAgICAgICAgICAgIHJlc3VsdC5yYW5n
ZSA9IHJlc3VsdFJhbmdlOwogICAgICAgICAgICAgcmVzdWx0LnJlcGxhY2VtZW50ID0gW1tpbmNv
bWluZ1Jlc3VsdCBVUkxdIGFic29sdXRlU3RyaW5nXTsKLSAgICAgICAgICAgIHJlc3VsdHMuYXBw
ZW5kKHJlc3VsdCk7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkp
OwogICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlUXVv
dGUgJiYgY2hlY2tpbmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpRdW90ZSkpIHsK
ICAgICAgICAgICAgIFRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICByZXN1
bHQudHlwZSA9IFRleHRDaGVja2luZ1R5cGU6OlF1b3RlOwogICAgICAgICAgICAgcmVzdWx0LnJh
bmdlID0gcmVzdWx0UmFuZ2U7CiAgICAgICAgICAgICByZXN1bHQucmVwbGFjZW1lbnQgPSBbaW5j
b21pbmdSZXN1bHQgcmVwbGFjZW1lbnRTdHJpbmddOwotICAgICAgICAgICAgcmVzdWx0cy5hcHBl
bmQocmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7
CiAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVEYXNo
ICYmIGNoZWNraW5nVHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6RGFzaCkpIHsKICAg
ICAgICAgICAgIFRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICByZXN1bHQu
dHlwZSA9IFRleHRDaGVja2luZ1R5cGU6OkRhc2g7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2Ug
PSByZXN1bHRSYW5nZTsKICAgICAgICAgICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IFtpbmNvbWlu
Z1Jlc3VsdCByZXBsYWNlbWVudFN0cmluZ107Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChy
ZXN1bHQpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAg
ICAgICAgfSBlbHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZVJlcGxhY2Vt
ZW50ICYmIGNoZWNraW5nVHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1l
bnQpKSB7CiAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAg
ICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudDsKICAgICAgICAg
ICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJhbmdlOwogICAgICAgICAgICAgcmVzdWx0LnJlcGxh
Y2VtZW50ID0gW2luY29taW5nUmVzdWx0IHJlcGxhY2VtZW50U3RyaW5nXTsKLSAgICAgICAgICAg
IHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChXVEZN
b3ZlKHJlc3VsdCkpOwogICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hl
Y2tpbmdUeXBlQ29ycmVjdGlvbiAmJiBjaGVja2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2lu
Z1R5cGU6OkNvcnJlY3Rpb24pKSB7CiAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVz
dWx0OwogICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpDb3JyZWN0
aW9uOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFuZ2U7CiAgICAgICAgICAg
ICByZXN1bHQucmVwbGFjZW1lbnQgPSBbaW5jb21pbmdSZXN1bHQgcmVwbGFjZW1lbnRTdHJpbmdd
OwotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3Vs
dHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0
b3IuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29y
ZGluYXRvci5jcHAKaW5kZXggNzM1NzZhMjQ3Y2UxMTc1Mjc1NjVmYjFkMjZiNGNkMDliMjQ3MmU5
Zi4uMTI3YWMxZTQ1NzcxNWJmN2RmYjBlOWM5M2ExMDQyMGI0ZjVjMzU3MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvci5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29y
ZGluYXRvci5jcHAKQEAgLTk4LDkgKzk4LDkgQEAgdm9pZCBXZWJQYXltZW50Q29vcmRpbmF0b3I6
Om9wZW5QYXltZW50U2V0dXAoY29uc3QgU3RyaW5nJiBtZXJjaGFudElkZW50aWZpZXIsIGMKIAog
Ym9vbCBXZWJQYXltZW50Q29vcmRpbmF0b3I6OnNob3dQYXltZW50VUkoY29uc3QgVVJMJiBvcmln
aW5hdGluZ1VSTCwgY29uc3QgVmVjdG9yPFVSTD4mIGxpbmtJY29uVVJMcywgY29uc3QgV2ViQ29y
ZTo6QXBwbGVQYXlTZXNzaW9uUGF5bWVudFJlcXVlc3QmIHBheW1lbnRSZXF1ZXN0KQogewotICAg
IFZlY3RvcjxTdHJpbmc+IGxpbmtJY29uVVJMU3RyaW5nczsKLSAgICBmb3IgKGNvbnN0IGF1dG8m
IGxpbmtJY29uVVJMIDogbGlua0ljb25VUkxzKQotICAgICAgICBsaW5rSWNvblVSTFN0cmluZ3Mu
YXBwZW5kKGxpbmtJY29uVVJMLnN0cmluZygpKTsKKyAgICBhdXRvIGxpbmtJY29uVVJMU3RyaW5n
cyA9IGxpbmtJY29uVVJMcy5tYXAoW10oYXV0byYgbGlua0ljb25VUkwpIHsKKyAgICAgICAgcmV0
dXJuIGxpbmtJY29uVVJMLnN0cmluZygpOworICAgIH0pOwogCiAgICAgYm9vbCByZXN1bHQ7CiAg
ICAgaWYgKCFzZW5kU3luYyhNZXNzYWdlczo6V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OlNo
b3dQYXltZW50VUkobV93ZWJQYWdlLmlkZW50aWZpZXIoKSwgbV93ZWJQYWdlLndlYlBhZ2VQcm94
eUlkZW50aWZpZXIoKSwgb3JpZ2luYXRpbmdVUkwuc3RyaW5nKCksIGxpbmtJY29uVVJMU3RyaW5n
cywgcGF5bWVudFJlcXVlc3QpLCBNZXNzYWdlczo6V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6
OlNob3dQYXltZW50VUk6OlJlcGx5KHJlc3VsdCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvblBy
b3h5LmNwcAppbmRleCBiMGZlODM1NzIyM2IzMTMzZmM0ZGIyZmJhYWQ4ZTczOWY1ZTNiOWQ2Li5m
NDVjZmI0MTkxMzZiN2NmMDhlM2JmZDQ5NmIyYjY5N2EzYzllZmUxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0
aW9uU2Vzc2lvblByb3h5LmNwcApAQCAtODA1LDEzICs4MDUsMTIgQEAgdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvblByb3h5OjpzZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZChXZWJDb3JlOjpQYWdl
SWRlbnRpZmkKICAgICBhdXRvJiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50PigqY29yZUVsZW1lbnQpOwogICAgIFZlY3RvcjxSZWY8V2ViQ29yZTo6Rmls
ZT4+IGZpbGVPYmplY3RzOwogICAgIGlmIChpbnB1dEVsZW1lbnQubXVsdGlwbGUoKSkgewotICAg
ICAgICBpZiAoYXV0byogZmlsZXMgPSBpbnB1dEVsZW1lbnQuZmlsZXMoKSkgewotICAgICAgICAg
ICAgZm9yIChhdXRvJiBmaWxlIDogZmlsZXMtPmZpbGVzKCkpCi0gICAgICAgICAgICAgICAgZmls
ZU9iamVjdHMuYXBwZW5kKGZpbGUuY29weVJlZigpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAo
YXV0byogZmlsZXMgPSBpbnB1dEVsZW1lbnQuZmlsZXMoKSkKKyAgICAgICAgICAgIGZpbGVPYmpl
Y3RzLmFwcGVuZFZlY3RvcihmaWxlcy0+ZmlsZXMoKSk7CiAgICAgfQorICAgIGZpbGVPYmplY3Rz
LnJlc2VydmVDYXBhY2l0eShmaWxlT2JqZWN0cy5zaXplKCkgKyBmaWxlbmFtZXMuc2l6ZSgpKTsK
ICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhdGggOiBmaWxlbmFtZXMpCi0gICAgICAgIGZpbGVPYmpl
Y3RzLmFwcGVuZChXZWJDb3JlOjpGaWxlOjpjcmVhdGUoJmlucHV0RWxlbWVudC5kb2N1bWVudCgp
LCBwYXRoKSk7CisgICAgICAgIGZpbGVPYmplY3RzLnVuY2hlY2tlZEFwcGVuZChXZWJDb3JlOjpG
aWxlOjpjcmVhdGUoJmlucHV0RWxlbWVudC5kb2N1bWVudCgpLCBwYXRoKSk7CiAgICAgaW5wdXRF
bGVtZW50LnNldEZpbGVzKFdlYkNvcmU6OkZpbGVMaXN0OjpjcmVhdGUoV1RGTW92ZShmaWxlT2Jq
ZWN0cykpKTsKIAogICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0ZDo6bnVsbG9wdCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVy
TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1l
ZGlhUGxheWVyTWFuYWdlci5jcHAKaW5kZXggN2M5ZDQ1NjlhNGU1MGIwNzEzYTc3YThiNGFjMjQw
ZmFlNDZkZGQxZS4uODEzYWYyODU5ODNjYjgyYzMwZjI0ZTI1MzcxNTVjN2YwZjNiNjEyOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBs
YXllck1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEv
UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyLmNwcApAQCAtMTYwLDggKzE2MCw5IEBAIHN0ZDo6dW5p
cXVlX3B0cjxNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U+IFJlbW90ZU1lZGlhUGxheWVyTWFu
YWdlcjo6Y3JlYXRlUmVtCiAgICAgcHJveHlDb25maWd1cmF0aW9uLmlzVmlkZW8gPSBwbGF5ZXIt
PmlzVmlkZW9QbGF5ZXIoKTsKIAogI2lmIEVOQUJMRShBVkZfQ0FQVElPTlMpCi0gICAgZm9yIChj
b25zdCBhdXRvJiB0cmFjayA6IHBsYXllci0+b3V0T2ZCYW5kVHJhY2tTb3VyY2VzKCkpCi0gICAg
ICAgIHByb3h5Q29uZmlndXJhdGlvbi5vdXRPZkJhbmRUcmFja0RhdGEuYXBwZW5kKHRyYWNrLT5k
YXRhKCkpOworICAgIHByb3h5Q29uZmlndXJhdGlvbi5vdXRPZkJhbmRUcmFja0RhdGEgPSBwbGF5
ZXItPm91dE9mQmFuZFRyYWNrU291cmNlcygpLm1hcChbXShhdXRvJiB0cmFjaykgeworICAgICAg
ICByZXR1cm4gdHJhY2stPmRhdGEoKTsKKyAgICB9KTsKICNlbmRpZgogCiAgICAgYXV0byBkb2N1
bWVudFNlY3VyaXR5T3JpZ2luID0gcGxheWVyLT5kb2N1bWVudFNlY3VyaXR5T3JpZ2luKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1NvdXJjZUJ1ZmZl
clByaXZhdGVSZW1vdGUuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9T
b3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlLmNwcAppbmRleCA5NjZmYzkzYjc3YWZhYTNlNjIwOGQ3
YWJhNWFlZDJjN2E5NGM3NGIyLi40ZWYxNjQwYTQwMTAwNmE2YjhmNjljYzUwMTE2NGE4YmQxOTBl
YjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1NvdXJj
ZUJ1ZmZlclByaXZhdGVSZW1vdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvbWVkaWEvU291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZS5jcHAKQEAgLTMzOCwxNiArMzM4LDEx
IEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZTo6dXBkYXRlVHJhY2tJZHMoVmVjdG9y
PHN0ZDo6cGFpcjxBdG9tU3RyaW5nLCBBdG9tCiAgICAgaWYgKCFtX2dwdVByb2Nlc3NDb25uZWN0
aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8c3RkOjpwYWlyPFRyYWNrUHJpdmF0
ZVJlbW90ZUlkZW50aWZpZXIsIFRyYWNrUHJpdmF0ZVJlbW90ZUlkZW50aWZpZXI+PiBpZGVudGlm
aWVyUGFpcnM7Ci0KLSAgICBmb3IgKGF1dG8mIHRyYWNrSWRQYWlyIDogdHJhY2tJZFBhaXJzKSB7
CisgICAgYXV0byBpZGVudGlmaWVyUGFpcnMgPSB0cmFja0lkUGFpcnMubWFwKFt0aGlzXShhdXRv
JiB0cmFja0lkUGFpcikgewogICAgICAgICBBU1NFUlQobV9wcmV2VHJhY2tJZGVudGlmaWVyTWFw
LmNvbnRhaW5zKHRyYWNrSWRQYWlyLmZpcnN0KSk7CiAgICAgICAgIEFTU0VSVChtX3RyYWNrSWRl
bnRpZmllck1hcC5jb250YWlucyh0cmFja0lkUGFpci5zZWNvbmQpKTsKLQotICAgICAgICBhdXRv
IG9sZElkZW50aWZpZXIgPSBtX3ByZXZUcmFja0lkZW50aWZpZXJNYXAudGFrZSh0cmFja0lkUGFp
ci5maXJzdCk7Ci0gICAgICAgIGF1dG8gbmV3SWRlbnRpZmllciA9IG1fdHJhY2tJZGVudGlmaWVy
TWFwLmdldCh0cmFja0lkUGFpci5zZWNvbmQpOwotICAgICAgICBpZGVudGlmaWVyUGFpcnMuYXBw
ZW5kKHN0ZDo6bWFrZV9wYWlyKG9sZElkZW50aWZpZXIsIG5ld0lkZW50aWZpZXIpKTsKLSAgICB9
CisgICAgICAgIHJldHVybiBzdGQ6OnBhaXIgeyBtX3ByZXZUcmFja0lkZW50aWZpZXJNYXAudGFr
ZSh0cmFja0lkUGFpci5maXJzdCksIG1fdHJhY2tJZGVudGlmaWVyTWFwLmdldCh0cmFja0lkUGFp
ci5zZWNvbmQpIH07CisgICAgfSk7CiAKICAgICBtX2dwdVByb2Nlc3NDb25uZWN0aW9uLT5jb25u
ZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6UmVtb3RlU291cmNlQnVmZmVyUHJveHk6OlVwZGF0ZVRy
YWNrSWRzKGlkZW50aWZpZXJQYWlycyksIG1fcmVtb3RlU291cmNlQnVmZmVySWRlbnRpZmllcik7
CiB9CkBAIC0zODMsMjcgKzM3OCwzMCBAQCB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGU6
OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZQogICAgIHNl
Z21lbnQuZHVyYXRpb24gPSBzZWdtZW50SW5mby5kdXJhdGlvbjsKIAogICAgIG1fcHJldlRyYWNr
SWRlbnRpZmllck1hcC5zd2FwKG1fdHJhY2tJZGVudGlmaWVyTWFwKTsKKyAgICBzZWdtZW50LmF1
ZGlvVHJhY2tzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2VnbWVudEluZm8uYXVkaW9UcmFja3Mu
c2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIGF1ZGlvVHJhY2sgOiBzZWdtZW50SW5mby5hdWRpb1Ry
YWNrcykgewogICAgICAgICBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlv
blNlZ21lbnQ6OkF1ZGlvVHJhY2tJbmZvcm1hdGlvbiBpbmZvOwogICAgICAgICBpbmZvLnRyYWNr
ID0gbV9tZWRpYVBsYXllclByaXZhdGUtPmF1ZGlvVHJhY2tQcml2YXRlUmVtb3RlKGF1ZGlvVHJh
Y2suaWRlbnRpZmllcik7CiAgICAgICAgIGluZm8uZGVzY3JpcHRpb24gPSBSZW1vdGVNZWRpYURl
c2NyaXB0aW9uOjpjcmVhdGUoYXVkaW9UcmFjay5kZXNjcmlwdGlvbik7Ci0gICAgICAgIHNlZ21l
bnQuYXVkaW9UcmFja3MuYXBwZW5kKGluZm8pOworICAgICAgICBzZWdtZW50LmF1ZGlvVHJhY2tz
LnVuY2hlY2tlZEFwcGVuZChpbmZvKTsKICAgICAgICAgbV90cmFja0lkZW50aWZpZXJNYXAuYWRk
KGluZm8udHJhY2stPmlkKCksIGF1ZGlvVHJhY2suaWRlbnRpZmllcik7CiAgICAgfQogCisgICAg
c2VnbWVudC52aWRlb1RyYWNrcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNlZ21lbnRJbmZvLnZp
ZGVvVHJhY2tzLnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiB2aWRlb1RyYWNrIDogc2VnbWVudElu
Zm8udmlkZW9UcmFja3MpIHsKICAgICAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5p
dGlhbGl6YXRpb25TZWdtZW50OjpWaWRlb1RyYWNrSW5mb3JtYXRpb24gaW5mbzsKICAgICAgICAg
aW5mby50cmFjayA9IG1fbWVkaWFQbGF5ZXJQcml2YXRlLT52aWRlb1RyYWNrUHJpdmF0ZVJlbW90
ZSh2aWRlb1RyYWNrLmlkZW50aWZpZXIpOwogICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0gUmVt
b3RlTWVkaWFEZXNjcmlwdGlvbjo6Y3JlYXRlKHZpZGVvVHJhY2suZGVzY3JpcHRpb24pOwotICAg
ICAgICBzZWdtZW50LnZpZGVvVHJhY2tzLmFwcGVuZChpbmZvKTsKKyAgICAgICAgc2VnbWVudC52
aWRlb1RyYWNrcy51bmNoZWNrZWRBcHBlbmQoaW5mbyk7CiAgICAgICAgIG1fdHJhY2tJZGVudGlm
aWVyTWFwLmFkZChpbmZvLnRyYWNrLT5pZCgpLCB2aWRlb1RyYWNrLmlkZW50aWZpZXIpOwogICAg
IH0KIAorICAgIHNlZ21lbnQudGV4dFRyYWNrcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNlZ21l
bnRJbmZvLnRleHRUcmFja3Muc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIHRleHRUcmFjayA6IHNl
Z21lbnRJbmZvLnRleHRUcmFja3MpIHsKICAgICAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVu
dDo6SW5pdGlhbGl6YXRpb25TZWdtZW50OjpUZXh0VHJhY2tJbmZvcm1hdGlvbiBpbmZvOwogICAg
ICAgICBpbmZvLnRyYWNrID0gbV9tZWRpYVBsYXllclByaXZhdGUtPnRleHRUcmFja1ByaXZhdGVS
ZW1vdGUodGV4dFRyYWNrLmlkZW50aWZpZXIpOwogICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0g
UmVtb3RlTWVkaWFEZXNjcmlwdGlvbjo6Y3JlYXRlKHRleHRUcmFjay5kZXNjcmlwdGlvbik7Ci0g
ICAgICAgIHNlZ21lbnQudGV4dFRyYWNrcy5hcHBlbmQoaW5mbyk7CisgICAgICAgIHNlZ21lbnQu
dGV4dFRyYWNrcy51bmNoZWNrZWRBcHBlbmQoaW5mbyk7CiAgICAgICAgIG1fdHJhY2tJZGVudGlm
aWVyTWFwLmFkZChpbmZvLnRyYWNrLT5pZCgpLCB0ZXh0VHJhY2suaWRlbnRpZmllcik7CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJX
ZWJSVENDb2RlY3MuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGli
V2ViUlRDQ29kZWNzLmNwcAppbmRleCBkMDcwYzJiNzlkZjQwY2FjYjQxOGYwNjc4MjY3ZTRjM2I0
YTU0NjFjLi4xYzIyNzM0MzI1NDVhYmYzYzkwNmI4NWRjMTdkOWI5OWQ0ZTFmN2FkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3Mu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0Nv
ZGVjcy5jcHAKQEAgLTM5Miw5ICszOTIsOSBAQCBMaWJXZWJSVENDb2RlY3M6OkVuY29kZXIqIExp
YldlYlJUQ0NvZGVjczo6Y3JlYXRlRW5jb2RlcihUeXBlIHR5cGUsIGNvbnN0IHN0ZDo6bQogICAg
IGVuY29kZXItPmlkZW50aWZpZXIgPSBSVENFbmNvZGVySWRlbnRpZmllcjo6Z2VuZXJhdGVUaHJl
YWRTYWZlKCk7CiAgICAgZW5jb2Rlci0+Y29kZWNUeXBlID0gdG9XZWJSVENDb2RlY1R5cGUodHlw
ZSk7CiAKLSAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gcGFyYW1ldGVyczsK
LSAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogZm9ybWF0UGFyYW1ldGVycykKLSAgICAgICAgcGFy
YW1ldGVycy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoU3RyaW5nOjpmcm9tVVRGOChrZXlWYWx1ZS5m
aXJzdC5kYXRhKCksIGtleVZhbHVlLmZpcnN0Lmxlbmd0aCgpKSwgU3RyaW5nOjpmcm9tVVRGOChr
ZXlWYWx1ZS5zZWNvbmQuZGF0YSgpLCBrZXlWYWx1ZS5zZWNvbmQubGVuZ3RoKCkpKSk7CisgICAg
YXV0byBwYXJhbWV0ZXJzID0gV1RGOjptYXAoZm9ybWF0UGFyYW1ldGVycywgW10oYXV0byYgZW50
cnkpIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6cGFpciB7IFN0cmluZzo6ZnJvbVVURjgoZW50cnku
Zmlyc3QuZGF0YSgpLCBlbnRyeS5maXJzdC5sZW5ndGgoKSksIFN0cmluZzo6ZnJvbVVURjgoZW50
cnkuc2Vjb25kLmRhdGEoKSwgZW50cnkuc2Vjb25kLmxlbmd0aCgpKSB9OworICAgIH0pOwogCiAg
ICAgZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb25BbmREaXNwYXRjaFRvVGhyZWFkKFt0aGlzLCBl
bmNvZGVyID0gV1RGTW92ZShlbmNvZGVyKSwgdHlwZSwgcGFyYW1ldGVycyA9IFdURk1vdmUocGFy
YW1ldGVycyldKCkgbXV0YWJsZSB7CiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRs
ZVBhZ2VPdmVybGF5LmNwcAppbmRleCBkODU0MmEyYjEwYjFiM2UxNTM2MTQxNTQxMTVlZjdlY2Vj
NDRlYjg4Li42ZjhmNzQ1MzU5MjQ1M2UwZTYxODY3NjEyNDRlMGI3NzkyMjFkZTc5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5k
bGVQYWdlT3ZlcmxheS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwCkBAIC0xOTcsMTEgKzE5NywxMyBA
QCBwcml2YXRlOgogICAgICAgICBhdXRvIHdrTmFtZXMgPSBtX2FjY2Vzc2liaWxpdHlDbGllbnQu
Y2xpZW50KCkuY29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyh0b0FQSSgmcGFnZU92ZXJs
YXkpLCBwYXJhbWVyaXplZE5hbWVzLCBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuYmFz
ZS5jbGllbnRJbmZvKTsKIAogICAgICAgICBzaXplX3QgY291bnQgPSBXS0FycmF5R2V0U2l6ZSh3
a05hbWVzKTsKKyAgICAgICAgbmFtZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjb3VudCk7CiAg
ICAgICAgIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgY291bnQ7IGsrKykgewogICAgICAgICAgICAg
V0tUeXBlUmVmIGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgod2tOYW1lcywgayk7CiAgICAg
ICAgICAgICBpZiAoV2ViS2l0Ojp0b0ltcGwoaXRlbSktPnR5cGUoKSA9PSBBUEk6OlN0cmluZzo6
QVBJVHlwZSkKLSAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoV2ViS2l0Ojp0b1dURlN0cmlu
ZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oaXRlbSkpKTsKKyAgICAgICAgICAgICAgICBuYW1l
cy51bmNoZWNrZWRBcHBlbmQoV2ViS2l0Ojp0b1dURlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4oaXRlbSkpKTsKICAgICAgICAgfQorICAgICAgICBuYW1lcy5zaHJpbmtUb0ZpdCgpOwog
CiAgICAgICAgIHJldHVybiBuYW1lczsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvU2Vzc2lvblN0YXRlQ29udmVyc2lvbi5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvU2Vzc2lvblN0YXRlQ29udmVy
c2lvbi5jcHAKaW5kZXggYzhmMjQ4YTY0NzY1NzZhMjkyYzc1ZDVmYWE2OGY1YWM2M2E0NzVjOC4u
NTY3ZDQ3NTFiZWU4M2EzYjNmNGY2ZTBmYTIzNzdiZDAwNjM1MGEyOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1Nlc3Npb25TdGF0ZUNvbnZlcnNp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9TZXNz
aW9uU3RhdGVDb252ZXJzaW9uLmNwcApAQCAtOTksMTAgKzk5LDkgQEAgc3RhdGljIEZyYW1lU3Rh
dGUgdG9GcmFtZVN0YXRlKGNvbnN0IEhpc3RvcnlJdGVtJiBoaXN0b3J5SXRlbSkKICAgICBmcmFt
ZVN0YXRlLm9ic2N1cmVkSW5zZXRzID0gaGlzdG9yeUl0ZW0ub2JzY3VyZWRJbnNldHMoKTsKICNl
bmRpZgogCi0gICAgZm9yIChhdXRvJiBjaGlsZEhpc3RvcnlJdGVtIDogaGlzdG9yeUl0ZW0uY2hp
bGRyZW4oKSkgewotICAgICAgICBGcmFtZVN0YXRlIGNoaWxkRnJhbWVTdGF0ZSA9IHRvRnJhbWVT
dGF0ZShjaGlsZEhpc3RvcnlJdGVtKTsKLSAgICAgICAgZnJhbWVTdGF0ZS5jaGlsZHJlbi5hcHBl
bmQoV1RGTW92ZShjaGlsZEZyYW1lU3RhdGUpKTsKLSAgICB9CisgICAgZnJhbWVTdGF0ZS5jaGls
ZHJlbiA9IGhpc3RvcnlJdGVtLmNoaWxkcmVuKCkubWFwKFtdKGF1dG8mIGNoaWxkSGlzdG9yeUl0
ZW0pIHsKKyAgICAgICAgcmV0dXJuIHRvRnJhbWVTdGF0ZShjaGlsZEhpc3RvcnlJdGVtKTsKKyAg
ICB9KTsKIAogICAgIHJldHVybiBmcmFtZVN0YXRlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRldmljZU9yaWVudGF0aW9uVXBkYXRl
UHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXIuY3BwCmluZGV4IGY5YWY5YWI5M2Y3ZTAx
Mjg3NzM2NTBjMWQyNDk1YWRkZTM5ZmQ0MzUuLjFkMTFmNDIzYzE3ODhkNTk3ZmYyNTc4ZWU2MGQ5
Y2I2MTZhMGRkMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRGV2aWNlT3JpZW50YXRpb25V
cGRhdGVQcm92aWRlci5jcHAKQEAgLTgzLDExICs4Myw3IEBAIHZvaWQgV2ViRGV2aWNlT3JpZW50
YXRpb25VcGRhdGVQcm92aWRlcjo6c3RvcFVwZGF0aW5nRGV2aWNlTW90aW9uKFdlYkNvcmU6Ok1v
dGlvCiAKIHZvaWQgV2ViRGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlcjo6ZGV2aWNlT3Jp
ZW50YXRpb25DaGFuZ2VkKGRvdWJsZSBhbHBoYSwgZG91YmxlIGJldGEsIGRvdWJsZSBnYW1tYSwg
ZG91YmxlIGNvbXBhc3NIZWFkaW5nLCBkb3VibGUgY29tcGFzc0FjY3VyYWN5KQogewotICAgIFZl
Y3RvcjxXZWFrUHRyPFdlYkNvcmU6Ok1vdGlvbk1hbmFnZXJDbGllbnQ+PiBjbGllbnRzOwotICAg
IGZvciAoYXV0byYgY2xpZW50IDogbV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudHMpCi0gICAgICAg
IGNsaWVudHMuYXBwZW5kKGNsaWVudCk7Ci0KLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IGNsaWVu
dHMpIHsKKyAgICBmb3IgKGF1dG8mIGNsaWVudCA6IGNvcHlUb1ZlY3Rvck9mPFdlYWtQdHI8V2Vi
Q29yZTo6TW90aW9uTWFuYWdlckNsaWVudD4+KG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRzKSkg
ewogICAgICAgICBpZiAoY2xpZW50KQogICAgICAgICAgICAgY2xpZW50LT5vcmllbnRhdGlvbkNo
YW5nZWQoYWxwaGEsIGJldGEsIGdhbW1hLCBjb21wYXNzSGVhZGluZywgY29tcGFzc0FjY3VyYWN5
KTsKICAgICB9CkBAIC05NSwxMSArOTEsNyBAQCB2b2lkIFdlYkRldmljZU9yaWVudGF0aW9uVXBk
YXRlUHJvdmlkZXI6OmRldmljZU9yaWVudGF0aW9uQ2hhbmdlZChkb3VibGUgYWxwaGEsCiAKIHZv
aWQgV2ViRGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlcjo6ZGV2aWNlTW90aW9uQ2hhbmdl
ZChkb3VibGUgeEFjY2VsZXJhdGlvbiwgZG91YmxlIHlBY2NlbGVyYXRpb24sIGRvdWJsZSB6QWNj
ZWxlcmF0aW9uLCBkb3VibGUgeEFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHksIGRvdWJsZSB5
QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwgZG91YmxlIHpBY2NlbGVyYXRpb25JbmNsdWRp
bmdHcmF2aXR5LCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4geFJvdGF0aW9uUmF0ZSwgc3RkOjpvcHRp
b25hbDxkb3VibGU+IHlSb3RhdGlvblJhdGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB6Um90YXRp
b25SYXRlKQogewotICAgIFZlY3RvcjxXZWFrUHRyPFdlYkNvcmU6Ok1vdGlvbk1hbmFnZXJDbGll
bnQ+PiBjbGllbnRzOwotICAgIGZvciAoYXV0byYgY2xpZW50IDogbV9kZXZpY2VNb3Rpb25DbGll
bnRzKQotICAgICAgICBjbGllbnRzLmFwcGVuZChjbGllbnQpOwotICAgIAotICAgIGZvciAoYXV0
byYgY2xpZW50IDogY2xpZW50cykgeworICAgIGZvciAoYXV0byYgY2xpZW50IDogY29weVRvVmVj
dG9yT2Y8V2Vha1B0cjxXZWJDb3JlOjpNb3Rpb25NYW5hZ2VyQ2xpZW50Pj4obV9kZXZpY2VNb3Rp
b25DbGllbnRzKSkgewogICAgICAgICBpZiAoY2xpZW50KQogICAgICAgICAgICAgY2xpZW50LT5t
b3Rpb25DaGFuZ2VkKHhBY2NlbGVyYXRpb24sIHlBY2NlbGVyYXRpb24sIHpBY2NlbGVyYXRpb24s
IHhBY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5LCB5QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jh
dml0eSwgIHpBY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5LCB4Um90YXRpb25SYXRlLCB5Um90
YXRpb25SYXRlLCB6Um90YXRpb25SYXRlKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGFzdGVib2FyZE92
ZXJyaWRlcy5jcHAKaW5kZXggZGZkZGExNzY5OTM2MDA0NDdhMGM5M2NjODQ2MGY1ZTY4YjJjMjQ4
MS4uMzE4ZjdjM2QyOTMzMmMwMmFkMmNlMzBkOTBlN2NmZTZmNTVjMzIxMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVy
cmlkZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmNwcApAQCAtNzEsMTggKzcxLDEzIEBAIHZvaWQgV2ViUGFz
dGVib2FyZE92ZXJyaWRlczo6cmVtb3ZlT3ZlcnJpZGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSwgY29uc3QKIAogVmVjdG9yPFN0cmluZz4gV2ViUGFzdGVib2FyZE92ZXJyaWRlczo6b3Zl
cnJpZGRlblR5cGVzKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7Ci0gICAgVmVjdG9y
PFN0cmluZz4gcmVzdWx0OwotCiAgICAgYXV0byBpdCA9IG1fb3ZlcnJpZGVzTWFwLmZpbmQocGFz
dGVib2FyZE5hbWUpOwogICAgIGlmIChpdCA9PSBtX292ZXJyaWRlc01hcC5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIEFTU0VSVChpdC0+
dmFsdWUpOwogCi0gICAgZm9yIChTdHJpbmcmIHR5cGUgOiBpdC0+dmFsdWUtPmtleXMoKSkKLSAg
ICAgICAgcmVzdWx0LmFwcGVuZCh0eXBlKTsKLQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0
dXJuIGNvcHlUb1ZlY3RvcihpdC0+dmFsdWUtPmtleXMoKSk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8
V2ViQ29yZTo6UGFzdGVib2FyZEl0ZW1JbmZvPiBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpvdmVy
cmlkZGVuSW5mbyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlNwZWVjaFN5bnRoZXNpc0Ns
aWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViU3Bl
ZWNoU3ludGhlc2lzQ2xpZW50LmNwcAppbmRleCBjNGQwZGNjMDNkNWRhNmEwNDgzZWRmNTZkMWU0
Mzk1MjdiYzk1Zjg4Li5jNTdlNzgwOWIyZWUxNjZkZDZmNjg4YmUyMmE4NTljN2RhZGRhOGZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViU3Bl
ZWNoU3ludGhlc2lzQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViU3BlZWNoU3ludGhlc2lzQ2xpZW50LmNwcApAQCAtNDIsOSArNDIsOSBA
QCBjb25zdCBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9p
Y2U+PiYgV2ViU3BlZWNoU3ludGhlc2lzQwogICAgIFZlY3RvcjxXZWJTcGVlY2hTeW50aGVzaXNW
b2ljZT4gdm9pY2VMaXN0OwogICAgIG1fcGFnZS5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpTcGVlY2hTeW50aGVzaXNWb2ljZUxpc3QoKSwgdm9pY2VMaXN0KTsKIAotICAgIG1fdm9p
Y2VzLmNsZWFyKCk7Ci0gICAgZm9yIChhdXRvJiB2b2ljZSA6IHZvaWNlTGlzdCkKLSAgICAgICAg
bV92b2ljZXMuYXBwZW5kKFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2U6OmNy
ZWF0ZSh2b2ljZS52b2ljZVVSSSwgdm9pY2UubmFtZSwgdm9pY2UubGFuZywgdm9pY2UubG9jYWxT
ZXJ2aWNlLCB2b2ljZS5kZWZhdWx0TGFuZykpOworICAgIG1fdm9pY2VzID0gdm9pY2VMaXN0Lm1h
cChbXShhdXRvJiB2b2ljZSkgLT4gUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhl
c2lzVm9pY2U+IHsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhl
c2lzVm9pY2U6OmNyZWF0ZSh2b2ljZS52b2ljZVVSSSwgdm9pY2UubmFtZSwgdm9pY2UubGFuZywg
dm9pY2UubG9jYWxTZXJ2aWNlLCB2b2ljZS5kZWZhdWx0TGFuZyk7CisgICAgfSk7CiAgICAgcmV0
dXJuIG1fdm9pY2VzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9GaW5kQ29udHJvbGxlci5jcHAKaW5kZXggYjUxMzRkMGQyYzVkN2M1MmY2ZmFjOTY4MDQ0
MWFjYzNlZWJmNjVmZC4uMWQ2NDNiNmI0Mjg4ZDA4ZTAzOGM0NjI1ZDA1NDlkZTY4YWYyYWE3NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9s
bGVyLmNwcApAQCAtMjcyLDEwICsyNzIsOSBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpmaW5kU3Ry
aW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmIHN0cmluZywgT3B0aW9uU2V0PEZpbmRPcHRpbwogICAg
IGF1dG8gcmVzdWx0ID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5maW5kVGV4dE1hdGNoZXMoc3Ry
aW5nLCBjb3JlKG9wdGlvbnMpLCBtYXhNYXRjaENvdW50KTsKICAgICBtX2ZpbmRNYXRjaGVzID0g
V1RGTW92ZShyZXN1bHQucmFuZ2VzKTsKIAotICAgIFZlY3RvcjxWZWN0b3I8SW50UmVjdD4+IG1h
dGNoUmVjdHM7Ci0gICAgZm9yIChhdXRvJiByYW5nZSA6IG1fZmluZE1hdGNoZXMpCi0gICAgICAg
IG1hdGNoUmVjdHMuYXBwZW5kKFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMocmFuZ2Up
KTsKLQorICAgIGF1dG8gbWF0Y2hSZWN0cyA9IG1fZmluZE1hdGNoZXMubWFwKFtdKGF1dG8mIHJh
bmdlKSB7CisgICAgICAgIHJldHVybiBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKHJh
bmdlKTsKKyAgICB9KTsKICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6RGlkRmluZFN0cmluZ01hdGNoZXMoc3RyaW5nLCBtYXRjaFJlY3RzLCByZXN1bHQuaW5kZXhG
b3JTZWxlY3Rpb24pKTsKIAogICAgIGlmICghb3B0aW9ucy5jb250YWlucyhGaW5kT3B0aW9uczo6
U2hvd092ZXJsYXkpICYmICFvcHRpb25zLmNvbnRhaW5zKEZpbmRPcHRpb25zOjpTaG93RmluZElu
ZGljYXRvcikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcAppbmRleCA3NDgwMmM0Nzg3
NTVmZmU2MWI5MzA5MmNiY2E2ZDBhYzdjY2M5YzgzLi4yYzliNDU3ZGJjYTA3YTZlYjEyNjg5YTc4
ZjBkZDViMjkxNGEyMWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAKQEAgLTI0
OCwxMSArMjQ4LDEwIEBAIHZvaWQgV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpkcmF3UmVj
dChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OkdyYXBoCiAgICAgICAgIGF1dG8gdGV4
dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9IG1fdGV4dEluZGljYXRvci0+dGV4
dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpOwogICAgICAgICBhdXRvIHRleHRS
ZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMgPSBtX3RleHRJbmRpY2F0b3ItPnRleHRSZWN0
c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMoKTsKIAotICAgICAgICBWZWN0b3I8V2ViQ29yZTo6
RmxvYXRSZWN0PiB0ZXh0UmVjdHNJblJvb3RWaWV3Q29vcmRpbmF0ZXM7Ci0gICAgICAgIGZvciAo
YXV0byByZWN0IDogdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcykgeworICAgICAg
ICBhdXRvIHRleHRSZWN0c0luUm9vdFZpZXdDb29yZGluYXRlcyA9IHRleHRSZWN0c0luQm91bmRp
bmdSZWN0Q29vcmRpbmF0ZXMubWFwKFsmXShhdXRvIHJlY3QpIHsKICAgICAgICAgICAgIHJlY3Qu
bW92ZUJ5KHRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKSk7
Ci0gICAgICAgICAgICB0ZXh0UmVjdHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMuYXBwZW5kKHJlY3Qp
OwotICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVjdDsKKyAgICAgICAgfSk7CiAKICAg
ICAgICAgYXV0byBwYXRocyA9IFdlYkNvcmU6OlBhdGhVdGlsaXRpZXM6OnBhdGhzV2l0aFNocmlu
a1dyYXBwZWRSZWN0cyh0ZXh0UmVjdHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMsIGluZGljYXRvclJh
ZGl1cyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAK
aW5kZXggNzMxZTAwMzgyYjA2MjgxMTQwYzNiZjI3NmJjNDJjYmQyZWFjNWNjYS4uNmEwMTRmZDc3
ZjAxYmZmZGE4ZTAwMjgxM2Y2MzhlMTg4N2Y3ODg5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTMwMzEsNyArMzAzMSw3IEBAIHZvaWQgV2Vi
UGFnZTo6bW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBzdGQ6Om9w
dGlvbmFsPFZlY3RvcjxTCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBWZWN0b3I8UmVm
UHRyPFNhbmRib3hFeHRlbnNpb24+PiBtb3VzZUV2ZW50U2FuZGJveEV4dGVuc2lvbnM7CisgICAg
VmVjdG9yPFJlZjxTYW5kYm94RXh0ZW5zaW9uPj4gbW91c2VFdmVudFNhbmRib3hFeHRlbnNpb25z
OwogICAgIGlmIChzYW5kYm94RXh0ZW5zaW9ucykKICAgICAgICAgbW91c2VFdmVudFNhbmRib3hF
eHRlbnNpb25zID0gY29uc3VtZVNhbmRib3hFeHRlbnNpb25zKFdURk1vdmUoKnNhbmRib3hFeHRl
bnNpb25zKSk7CiAKQEAgLTc4NTcsMjEgKzc4NTcsMTkgQEAgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5JiBXZWJQYWdlOjplbnN1cmVSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKQogfQog
I2VuZGlmCiAKLVZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+IFdlYlBhZ2U6OmNvbnN1
bWVTYW5kYm94RXh0ZW5zaW9ucyhWZWN0b3I8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiYmIHNh
bmRib3hFeHRlbnNpb25zKQorVmVjdG9yPFJlZjxTYW5kYm94RXh0ZW5zaW9uPj4gV2ViUGFnZTo6
Y29uc3VtZVNhbmRib3hFeHRlbnNpb25zKFZlY3RvcjxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+
JiYgc2FuZGJveEV4dGVuc2lvbnMpCiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxTYW5kYm94RXh0ZW5z
aW9uPj4gZHJhZ1NhbmRib3hFeHRlbnNpb25zOwotICAgIGZvciAoYXV0byYgc2FuZGJveEV4dGVu
c2lvbiA6IHNhbmRib3hFeHRlbnNpb25zKSB7CisgICAgcmV0dXJuIFdURjo6Y29tcGFjdE1hcChX
VEZNb3ZlKHNhbmRib3hFeHRlbnNpb25zKSwgW10oYXV0byYmIHNhbmRib3hFeHRlbnNpb24pIC0+
IFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiB7CiAgICAgICAgIGF1dG8gZXh0ZW5zaW9uID0gU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlKFdURk1vdmUoc2FuZGJveEV4dGVuc2lvbikpOwogICAgICAg
ICBpZiAoIWV4dGVuc2lvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgICAgIGJvb2wgb2sgPSBleHRlbnNpb24tPmNvbnN1bWUoKTsKICAg
ICAgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOwotICAgICAgICBkcmFnU2FuZGJveEV4dGVuc2lv
bnMuYXBwZW5kKFdURk1vdmUoZXh0ZW5zaW9uKSk7Ci0gICAgfQotICAgIHJldHVybiBkcmFnU2Fu
ZGJveEV4dGVuc2lvbnM7CisgICAgICAgIHJldHVybiBleHRlbnNpb247CisgICAgfSk7CiB9CiAK
LXZvaWQgV2ViUGFnZTo6cmV2b2tlU2FuZGJveEV4dGVuc2lvbnMoVmVjdG9yPFJlZlB0cjxTYW5k
Ym94RXh0ZW5zaW9uPj4mIHNhbmRib3hFeHRlbnNpb25zKQordm9pZCBXZWJQYWdlOjpyZXZva2VT
YW5kYm94RXh0ZW5zaW9ucyhWZWN0b3I8UmVmPFNhbmRib3hFeHRlbnNpb24+PiYgc2FuZGJveEV4
dGVuc2lvbnMpCiB7CiAgICAgZm9yIChhdXRvJiBzYW5kYm94RXh0ZW5zaW9uIDogc2FuZGJveEV4
dGVuc2lvbnMpCiAgICAgICAgIHNhbmRib3hFeHRlbnNpb24tPnJldm9rZSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDY5ZGUxNGFhOTgzNDM4OGE0
MDUyNDc3YzM2MTgxZDdkNWEyZjdjY2YuLjY1NGI4YzljNjAwMmQwZWQ5YjJjNjJjZTBjMzFlYTli
ZmRiMGJlZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgK
QEAgLTE5NjksOCArMTk2OSw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHBsYXRmb3JtRGlkU2Nh
bGVQYWdlKCk7CiAKLSAgICBWZWN0b3I8UmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiBjb25zdW1l
U2FuZGJveEV4dGVuc2lvbnMoVmVjdG9yPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4mJik7Ci0g
ICAgdm9pZCByZXZva2VTYW5kYm94RXh0ZW5zaW9ucyhWZWN0b3I8UmVmUHRyPFNhbmRib3hFeHRl
bnNpb24+PiYgc2FuZGJveEV4dGVuc2lvbnMpOworICAgIFZlY3RvcjxSZWY8U2FuZGJveEV4dGVu
c2lvbj4+IGNvbnN1bWVTYW5kYm94RXh0ZW5zaW9ucyhWZWN0b3I8U2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlPiYmKTsKKyAgICB2b2lkIHJldm9rZVNhbmRib3hFeHRlbnNpb25zKFZlY3RvcjxSZWY8
U2FuZGJveEV4dGVuc2lvbj4+JiBzYW5kYm94RXh0ZW5zaW9ucyk7CiAKICAgICB2b2lkIHNldFNl
bGVjdGlvblJhbmdlKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6VGV4dEdyYW51
bGFyaXR5LCBib29sKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggOWRjMDBkYTI3NzBjMTkzOTg5MWEzMDBmMjMz
NzQ5NmE5YzhlNzAxZC4uYmQzNjcyMDc1Yjc1NzY4Yzg0MTQ3NzhmYzY2NWY1ZDc1YjRlMjRhZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VN
YWMubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VN
YWMubW0KQEAgLTc1NCwxMSArNzU0LDggQEAgdm9pZCBXZWJQYWdlOjpoYW5kbGVTZWxlY3Rpb25T
ZXJ2aWNlQ2xpY2soRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgY29uc3QgVmVjdG8KIAogICAg
IE5TRGF0YSAqc2VsZWN0aW9uRGF0YSA9IFthdHRyaWJ1dGVkU2VsZWN0aW9uIFJURkRGcm9tUmFu
Z2U6TlNNYWtlUmFuZ2UoMCwgW2F0dHJpYnV0ZWRTZWxlY3Rpb24gbGVuZ3RoXSkgZG9jdW1lbnRB
dHRyaWJ1dGVzOkB7IH1dOwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHNlbGVjdGlvbkRhdGFWZWN0
b3I7Ci0gICAgc2VsZWN0aW9uRGF0YVZlY3Rvci5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4oc2VsZWN0aW9uRGF0YS5ieXRlcyksIHNlbGVjdGlvbkRhdGEubGVuZ3RoKTsK
LQogICAgIGZsdXNoUGVuZGluZ0VkaXRvclN0YXRlVXBkYXRlKCk7Ci0gICAgc2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpTaG93Q29udGV4dE1lbnUoQ29udGV4dE1lbnVDb250ZXh0RGF0YShw
b2ludCwgc2VsZWN0aW9uRGF0YVZlY3RvciwgcGhvbmVOdW1iZXJzLCBzZWxlY3Rpb24uc2VsZWN0
aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSksIFVzZXJEYXRhKCkpKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OlNob3dDb250ZXh0TWVudShDb250ZXh0TWVudUNvbnRleHREYXRh
KHBvaW50LCBWZWN0b3IgeyByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzZWxlY3Rp
b25EYXRhLmJ5dGVzKSwgc2VsZWN0aW9uRGF0YS5sZW5ndGggfSwgcGhvbmVOdW1iZXJzLCBzZWxl
Y3Rpb24uc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSksIFVzZXJEYXRhKCkpKTsKIH0K
IAogdm9pZCBXZWJQYWdlOjpoYW5kbGVJbWFnZVNlcnZpY2VDbGljayhjb25zdCBJbnRQb2ludCYg
cG9pbnQsIEltYWdlJiBpbWFnZSwgSFRNTEltYWdlRWxlbWVudCYgZWxlbWVudCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAppbmRleCA3OTk2MTNkMzc3NDIzNjNiZmJkY2Q5
NTI5Nzk5NjIyMDZmMDIyOGE4Li44OTkwZWRkNzZjYWI5NmMyZGVjZDNiOTYwNTRjZmY2Mjk1YmIw
Y2Y1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC0xNDUyLDgg
KzE0NTIsMTAgQEAgdm9pZCBXZWJQcm9jZXNzOjpmZXRjaFdlYnNpdGVEYXRhKE9wdGlvblNldDxX
ZWJzaXRlRGF0YVR5cGU+IHdlYnNpdGVEYXRhVHlwZXMsIEMKIHsKICAgICBXZWJzaXRlRGF0YSB3
ZWJzaXRlRGF0YTsKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0
YVR5cGU6Ok1lbW9yeUNhY2hlKSkgewotICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IE1lbW9y
eUNhY2hlOjpzaW5nbGV0b24oKS5vcmlnaW5zV2l0aENhY2hlKHNlc3Npb25JRCgpKSkKLSAgICAg
ICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9y
aWdpbi0+ZGF0YSgpLCBXZWJzaXRlRGF0YVR5cGU6Ok1lbW9yeUNhY2hlLCAwIH0pOworICAgICAg
ICBhdXRvIG9yaWdpbnMgPSBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkub3JpZ2luc1dpdGhDYWNo
ZShzZXNzaW9uSUQoKSk7CisgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMgPSBXVEY6Om1hcChv
cmlnaW5zLCBbXShhdXRvJiBvcmlnaW4pIHsKKyAgICAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0
YTo6RW50cnkgeyBvcmlnaW4tPmRhdGEoKSwgV2Vic2l0ZURhdGFUeXBlOjpNZW1vcnlDYWNoZSwg
MCB9OworICAgICAgICB9KTsKICAgICB9CiAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZSh3
ZWJzaXRlRGF0YSkpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452870</attachid>
            <date>2022-02-22 07:18:26 -0800</date>
            <delta_ts>2022-02-22 09:32:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236852-20220222071825.patch</filename>
            <type>text/plain</type>
            <size>162870</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMzAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDQ3ZjBkMjJlYmQ1MzAxNWI2MDgzNTU1
OWRmMDlhMjA0OWVlNDUyOGQuLjI4ZmVhMGJjY2E1MzAzOGY0ZWZiNzdmMmRlYWIyMWU2YjQ2MTBm
MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjItMDItMTggIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGV2ZW4gbW9yZSBjYWxs
IHNpdGVzIGNvbnN0cnVjdGluZyB2ZWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuY3BwOgorICAgICAgICAoV1RGOjpD
b25jdXJyZW50V29ya1F1ZXVlOjphcHBseSk6CisgICAgICAgICogd3RmL2NmL0xhbmd1YWdlQ0Yu
Y3BwOgorICAgICAgICAoV1RGOjpwbGF0Zm9ybVVzZXJQcmVmZXJyZWRMYW5ndWFnZXMpOgorCiAy
MDIyLTAyLTIyICBBc3VtdSBUYWtpa2F3YSAgPGFzdW11QGlnYWxpYS5jb20+CiAKICAgICAgICAg
SW5pdGlhbCBzdXBwb3J0IGZvciBXYXNtL0VTTS1pbnRlZ3JhdGlvbiBpbiB0aGUgV2ViQ29yZSBt
b2R1bGUgbG9hZGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmM3ZWI4YTRhYTc2YmVkNmNmMWI2MTRkMzk1MDg5
ZTkzOWY1NjRlZi4uZGYyZmI5MmViNTFkZjQyNTA2NTFjNTEwMjEyZjM0MmQxNzk0OWI4YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE2NiBAQAorMjAyMi0wMi0xOCAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIC8gb3B0aW1pemUgZXZlbiBtb3JlIGNh
bGwgc2l0ZXMgY29uc3RydWN0aW5nIHZlY3RvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjg1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy9hcHBsZXBheS9QYXltZW50Q29vcmRpbmF0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF5bWVudENvb3JkaW5hdG9yOjpiZWdpblBheW1l
bnRTZXNzaW9uKToKKyAgICAgICAgKiBNb2R1bGVzL2FwcGxlcGF5L2NvY29hL1BheW1lbnRNZXRo
b2RDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnQpOgorICAgICAgICAqIE1vZHVs
ZXMvY2FjaGUvRE9NQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NQ2FjaGU6OmJhdGNo
UHV0T3BlcmF0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHYW1lcGFkOjpHYW1lcGFkKToKKyAgICAgICAgKiBNb2R1bGVzL2dh
bWVwYWQvR2FtZXBhZE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZE1hbmFn
ZXI6OnBsYXRmb3JtR2FtZXBhZERpc2Nvbm5lY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1l
cGFkTWFuYWdlcjo6bWFrZUdhbWVwYWRWaXNpYmxlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6b2Jq
ZWN0U3RvcmVOYW1lcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6dHJh
bnNhY3Rpb24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OmlzRGVsZXRlZFZhbHVlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhSGFzaDo6aGFz
aCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjpoYXNoIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6aW5kZXhOYW1lcyBjb25zdCk6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlTmFtZXMgY29uc3QpOgorICAgICAgICAqIE1vZHVs
ZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYUNvbnRyb2xzSG9zdDo6c2hvd01lZGlhQ29udHJvbHNDb250ZXh0TWVudSk6CisgICAg
ICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVNvdXJjZTo6YWN0aXZlUmFuZ2VzIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVz
L21lZGlhc291cmNlL1NhbXBsZU1hcC5oOgorICAgICAgICAoV2ViQ29yZTo6RGVjb2RlT3JkZXJT
YW1wbGVNYXA6OnNpemUgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvU291
cmNlQnVmZmVyTGlzdC5oOgorICAgICAgICAqIE1vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNp
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXM6OmdldFZvaWNlcyk6Cisg
ICAgICAgICogTW9kdWxlcy9zcGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2subW06
CisgICAgICAgICgtW1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrSW1wbCBjYWxsYmFja1dpdGhUcmFu
c2NyaXB0aW9uczppc0ZpbmFsOl0pOgorICAgICAgICAqIE1vZHVsZXMvc3BlZWNoL2NvY29hL1dl
YlNwZWVjaFJlY29nbml6ZXJUYXNrTW9jay5tbToKKyAgICAgICAgKC1bV2ViU3BlZWNoUmVjb2du
aXplclRhc2tNb2NrIGF1ZGlvU2FtcGxlc0F2YWlsYWJsZTpdKToKKyAgICAgICAgKiBhbmltYXRp
b24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRGdW5j
KToKKyAgICAgICAgKiBhbmltYXRpb24vRG9jdW1lbnRUaW1lbGluZXNDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50VGltZWxpbmVzQ29udHJvbGxlcjo6dXBkYXRlQW5p
bWF0aW9uc0FuZFNlbmRFdmVudHMpOgorICAgICAgICAqIGFuaW1hdGlvbi9LZXlmcmFtZUVmZmVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcm9jZXNzUHJvcGVydHlJbmRleGVkS2V5ZnJhbWVz
KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uOjpDb250
ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgKiBjc3MvQ1NTVmFsdWVMaXN0Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NWYWx1ZUxpc3Q6OnNpemUgY29uc3QpOgorICAgICAgICAqIGNzcy9jYWxjL0NT
U0NhbGNPcGVyYXRpb25Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRp
b25Ob2RlOjpob2lzdENoaWxkcmVuV2l0aE9wZXJhdG9yKToKKyAgICAgICAgKiBjc3MvcGFyc2Vy
L0NTU1BhcnNlckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VySW1wbDo6Y29u
c3VtZUNvbnRhaW5lclJ1bGUpOgorICAgICAgICAqIGRvbS9ET01TdHJpbmdMaXN0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpET01TdHJpbmdMaXN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RE9NU3RyaW5nTGlzdDo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVN0cmluZ0xpc3Q6
OkRPTVN0cmluZ0xpc3QpOgorICAgICAgICAqIGRvbS9FdmVudFBhdGguY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRQYXRoOjpFdmVudFBhdGgpOgorICAgICAgICAqIGRvbS9GdWxsc2NyZWVu
TWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGdWxsc2NyZWVuTWFuYWdlcjo6Y2FuY2Vs
RnVsbHNjcmVlbik6CisgICAgICAgICogZG9tL0xvYWRhYmxlU2NyaXB0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxvYWRhYmxlU2NyaXB0Ojpub3RpZnlDbGllbnRGaW5pc2hlZCk6CisgICAgICAg
ICogZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJhZGlvQnV0
dG9uR3JvdXA6Om1lbWJlcnMgY29uc3QpOgorICAgICAgICAqIGh0bWwvRGlyZWN0b3J5RmlsZUxp
c3RDcmVhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvRmlsZUxpc3QpOgorICAgICAgICAq
IGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVj
dEVsZW1lbnQ6OnNhdmVMYXN0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxl
Y3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleCk6CisgICAgICAgICogaHRt
bC9JbWFnZUJpdG1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcDo6ZGV0YWNo
Qml0bWFwcyk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRB
dHRhY2hlZFNoYWRlcnMpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBh
cnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWV0YUNoYXJzZXRQYXJzZXI6OnByb2Nl
c3NNZXRhKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjppbnNlcnRQaG9uZU51bWJlckxpbmspOgor
ICAgICAgICAqIGh0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0RG9jdW1lbnRQYXJzZXI6Omluc2VydEZha2VQcmVFbGVtZW50KToKKyAgICAg
ICAgKiBsb2FkZXIvQ29udGVudEZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlTWFuaWZlc3RQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VBcHBsaWNhdGlv
bkNhY2hlTWFuaWZlc3QpOgorICAgICAgICAqIHBhZ2UvUmVzaXplT2JzZXJ2ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzaXplT2JzZXJ2ZXI6OmRlbGl2ZXJPYnNlcnZhdGlvbnMpOgorICAg
ICAgICAqIHBhZ2UvVGV4dEluZGljYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFs
aXplSW5kaWNhdG9yKToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3ku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VTdWJSZXNvdXJjZUludGVncml0eUludG9EaWdl
c3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGaWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlQ2hv
b3Nlcjo6Y2hvb3NlRmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUNob29zZXI6OmNob29z
ZU1lZGlhRmlsZXMpOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFnbWVudGVkU2hhcmVkQnVmZmVyOjphcHBlbmQpOgorICAgICAgICAq
IHBsYXRmb3JtL1RocmVhZFNhZmVEYXRhQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjphZGQp
OgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yOjppbml0aWFsaXplKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9BdWRpb1Jlc2FtcGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBdWRpb1Jlc2FtcGxlcjo6QXVkaW9SZXNhbXBsZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnNldE51bWJlck9mQ2hhbm5lbHMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2F1ZGlvL011bHRpQ2hhbm5lbFJlc2FtcGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpNdWx0aUNoYW5uZWxSZXNhbXBsZXI6Ok11bHRpQ2hhbm5lbFJlc2FtcGxlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQu
bW06CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6
bGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9ucyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z2FtZXBhZC9tYWMvRHVhbHNob2NrM0hJREdhbWVwYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RHVhbHNob2NrM0hJREdhbWVwYWQ6OkR1YWxzaG9jazNISURHYW1lcGFkKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9nYW1lcGFkL21hYy9Mb2dpdGVjaEdhbWVwYWQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TG9naXRlY2hHYW1lcGFkOjpMb2dpdGVjaEdhbWVwYWQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dhbWVwYWQvbWFjL1N0YWRpYUhJREdhbWVwYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3Rh
ZGlhSElER2FtZXBhZDo6U3RhZGlhSElER2FtZXBhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
OjphZGRSZXBhaW50UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxp
dGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXRoVXRpbGl0aWVzOjpwYXRoc1dpdGhTaHJp
bmtXcmFwcGVkUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aFV0aWxpdGllczo6cGF0aFdp
dGhTaHJpbmtXcmFwcGVkUmVjdHNGb3JPdXRsaW5lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclByaXZhdGU6OmJ1ZmZlcmVkU2FtcGxlc0ZvclRyYWNrSWQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OmV4dHJhY3RLZXlJRHNT
a2QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBVkZXcmFw
cGVyOjpzZXRSZXF1ZXN0Rm9yS2V5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2Jq
Qzo6dXBkYXRlS2V5U3RhdHVzZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0ltYWdlRGVjb2RlckFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kZXJBVkZPYmpDOjpmcmFtZUluZm9zIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQYXJzZXJBVkZPYmpDLm1t
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyQVZGT2JqQzo6ZGlkUGFyc2VT
dHJlYW1EYXRhQXNBc3NldCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dFBsYXRmb3JtRGF0YUNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0
YTo6dmFyaWF0aW9uQXhlcyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Bhc3RlYm9h
cmRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVN0cmluZyk6Cisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVWaWRlb0NhcHR1cmVTb3VyY2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVWaWRlb0NhcHR1cmVTb3VyY2U6OnNldFN1
cHBvcnRlZFByZXNldHMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVnaXN0cnlJbXBsOjpyZWdpc3RlckJs
b2JVUkwpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5SW1wbDo6d3JpdGVCbG9ic1Rv
VGVtcG9yYXJ5RmlsZXNGb3JJbmRleGVkREIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJC
b3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVj
dDo6ZHJhd0JveFNpZGVGcm9tUGF0aCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVy
QmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmNvbm5l
Y3RDbGlwcGluZ1N0YWNrTGF5ZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6
YWRqdXN0T3ZlcmZsb3dTY3JvbGxiYXJDb250YWluZXJMYXllcnMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50QXR0YWNobWVu
dFRpdGxlQmFja2dyb3VuZCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVl
QXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlU1ZHU3Ryb2tlUGFpbnRpbmdSZXNv
dXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHVGV4dENodW5rOjpTVkdUZXh0Q2h1bmspOgorICAgICAgICAqIHN0eWxl
L1BhZ2VSdWxlQ29sbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQYWdlUnVs
ZUNvbGxlY3Rvcjo6bWF0Y2hQYWdlUnVsZXMpOgorICAgICAgICAqIHN0eWxlL1J1bGVTZXRCdWls
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0QnVpbGRlcjo6TWVkaWFR
dWVyeUNvbGxlY3Rvcjo6cG9wKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZUJ1aWxkZXJDb252ZXJ0
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
Q29udGFpbmVyTmFtZSk6CisKIDIwMjItMDItMjIgIE1hcmNvcyBDYWNlcmVzICA8bWFyY29zQG1h
cmNvc2MuY29tPgogCiAgICAgICAgIFBlcm1pc3Npb24gQVBJOiBoYW5kbGUgbm9uLWZ1bGx5IGFj
dGl2ZSBkb2N1bWVudHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNzdiYmIxNWNmMWU2ZmMzN2Q0NDY1MGE3NzVmNmZm
NDJiMzZmZDEwMi4uZmE2YzJhNzZmN2JjZjZkY2Q1ZDEwZTM0MzNiMjIwZDM2YmVkN2I2YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw5OCBAQAorMjAyMi0wMi0xOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIC8gb3B0aW1pemUgZXZlbiBtb3JlIGNhbGwg
c2l0ZXMgY29uc3RydWN0aW5nIHZlY3RvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIzNjg1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllclBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTWVkaWFQbGF5ZXJQcm94eTo6b3V0T2ZC
YW5kVHJhY2tTb3VyY2VzKToKKyAgICAgICAgKiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZVNvdXJj
ZUJ1ZmZlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlU291cmNlQnVmZmVyUHJv
eHk6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50KToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlU291cmNlQnVmZmVyUHJveHk6OnVwZGF0ZVRyYWNrSWRz
KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OmZldGNoRGlza0Nh
Y2hlRW50cmllcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTm90aWZpY2F0aW9ucy9OZXR3
b3JrTm90aWZpY2F0aW9uTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtOb3Rp
ZmljYXRpb25NYW5hZ2VyOjpnZXRPcmlnaW5zV2l0aFB1c2hBbmROb3RpZmljYXRpb25QZXJtaXNz
aW9ucyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdl
ci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2VyOjphbGxTdG9yYWdlQXJlYUlk
ZW50aWZpZXJzIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1Ry
YW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRyYW5z
aWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6b3JpZ2lucyBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6OlRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6c3RvcmFnZUFyZWFJZGVudGlmaWVy
cyBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5n
aW5lQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OkNhY2hlOjpmaW5p
c2hPcGVuaW5nKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6a2V5cyBj
b25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJl
YS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VBcmVhOjpTUUxpdGVTdG9yYWdl
QXJlYSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmg6CisgICAgICAg
ICogU2hhcmVkL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OnNob3dQYXltZW50VUkpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbi5jcHA6CisgICAgICAgIChBUEk6
Ok5hdmlnYXRpb246Ok5hdmlnYXRpb24pOgorICAgICAgICAoQVBJOjptX2NsaWVudE5hdmlnYXRp
b25BY3Rpdml0eSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dLU2hhcmVTaGVldC5tbToK
KyAgICAgICAgKGFwcGVuZEZpbGVzQXNTaGFyZWFibGVVUkxzKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6cmVzdG9yZUFwcEhpZ2hsaWdodHNBbmRTY3JvbGxUb0luZGV4KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRT
dGF0ZTo6ZGlkRmluaXNoTG9hZCk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29y
a1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6
OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpwYXJhbWV0ZXJzIGNvbnN0
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRvck1h
bmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpBdXRoZW50aWNhdG9yTWFuYWdlcjo6c3RhcnRE
aXNjb3ZlcnkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OnJlbW92ZUFsbEl0ZW1zKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0OjpjbGVhcik6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c1Bvb2w6OnJlbW92ZVByb2Nlc3NGcm9tT3JpZ2luQ2FjaGVTZXQpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJv
eHk6OnByb2Nlc3NEaWRUZXJtaW5hdGVPckZhaWxlZFRvTGF1bmNoKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5KToKKyAgICAgICAgKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9U
ZXh0Q2hlY2tlcklPUy5tbToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNrVGV4
dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Np
c3RhbnQubW06CisgICAgICAgICgtW1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQgcHJlc2VudGF0aW9u
UmVjdEZvckVsZW1lbnRVc2luZ0Nsb3Nlc3RJbmRpY2F0ZWRSZWN0XSk6CisgICAgICAgICogVUlQ
cm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNr
ZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0FwcGxlUGF5
L1dlYlBheW1lbnRDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBheW1lbnRD
b29yZGluYXRvcjo6c2hvd1BheW1lbnRVSSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9BdXRvbWF0
aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJB
dXRvbWF0aW9uU2Vzc2lvblByb3h5OjpzZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZCk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyOjpjcmVhdGVSZW1vdGVN
ZWRpYVBsYXllcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvU291cmNlQnVmZmVy
UHJpdmF0ZVJlbW90ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNvdXJjZUJ1ZmZlclByaXZhdGVS
ZW1vdGU6OnVwZGF0ZVRyYWNrSWRzKToKKyAgICAgICAgKFdlYktpdDo6U291cmNlQnVmZmVyUHJp
dmF0ZVJlbW90ZTo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0aWFsaXphdGlvblNl
Z21lbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3Mu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpMaWJXZWJSVENDb2RlY3M6OmNyZWF0ZUVuY29kZXIpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3Zl
cmxheS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9TZXNzaW9uU3Rh
dGVDb252ZXJzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6dG9GcmFtZVN0YXRlKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRldmljZU9yaWVudGF0aW9uVXBkYXRl
UHJvdmlkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0
ZVByb3ZpZGVyOjpkZXZpY2VPcmllbnRhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyOjpkZXZpY2VNb3Rpb25DaGFuZ2VkKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlk
ZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpvdmVycmlk
ZGVuVHlwZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViU3BlZWNo
U3ludGhlc2lzQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU3BlZWNoU3ludGhlc2lz
Q2xpZW50Ojp2b2ljZUxpc3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29u
dHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjpmaW5kU3RyaW5n
TWF0Y2hlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdl
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZvdW5kVGV4dFJhbmdlQ29udHJv
bGxlcjo6ZHJhd1JlY3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y29uc3VtZVNhbmRib3hFeHRlbnNpb25zKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OmhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
czo6ZmV0Y2hXZWJzaXRlRGF0YSk6CisKIDIwMjItMDItMjIgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KIAogICAgICAgICBBdm9pZCBoYXZpbmcgdG8gaXRlcmF0ZSB0aGUgd2hvbGUg
ZnJhbWUgdHJlZShzKSBldmVyeSB0aW1lIHdlIG5lZWQgdG8gZGlzcGF0Y2ggc3RvcmFnZSBldmVu
dHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAgYi9Tb3VyY2UvV1RG
L3d0Zi9Xb3JrUXVldWUuY3BwCmluZGV4IDllMTA2ZTM5NGQzZjQ0ZDJjMjVmYzNjYTE1MzU0MGU1
MjA0Y2IzNWIuLjg2NDA2ZjM4ODQzNzE0Y2IyNTVjMzRlYWUzZjkxODFkYWJhNThlMzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
V29ya1F1ZXVlLmNwcApAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgQ29uY3VycmVudFdvcmtRdWV1
ZTo6YXBwbHkoc2l6ZV90IGl0ZXJhdGlvbnMsIFdURjo6RnVuY3Rpb248dm9pZChzaXplX3QgaW5k
CiAKICAgICAgICAgICAgIG1fd29ya2Vycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHRocmVhZENv
dW50KTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aHJlYWRDb3VudDsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgbV93b3JrZXJzLmFwcGVuZChUaHJlYWQ6OmNyZWF0ZSgi
VGhyZWFkUG9vbCBXb3JrZXIiLCBbdGhpc10geworICAgICAgICAgICAgICAgIG1fd29ya2Vycy51
bmNoZWNrZWRBcHBlbmQoVGhyZWFkOjpjcmVhdGUoIlRocmVhZFBvb2wgV29ya2VyIiwgW3RoaXNd
IHsKICAgICAgICAgICAgICAgICAgICAgdGhyZWFkQm9keSgpOwogICAgICAgICAgICAgICAgIH0p
KTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2NmL0xhbmd1YWdl
Q0YuY3BwIGIvU291cmNlL1dURi93dGYvY2YvTGFuZ3VhZ2VDRi5jcHAKaW5kZXggYmJjMWVmNmY0
ZWZlMDMwNTljZTU1MTMxZTA4YzEwMzMyMjQ4OGU1Ni4uYzA0YzU1YmM2MDNkMjgxZDBjYTM4OTIw
ZWJhOGM3OWU1ZTY5Mjk4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvY2YvTGFuZ3VhZ2VD
Ri5jcHAKKysrIGIvU291cmNlL1dURi93dGYvY2YvTGFuZ3VhZ2VDRi5jcHAKQEAgLTEwMiw5ICsx
MDIsMTAgQEAgVmVjdG9yPFN0cmluZz4gcGxhdGZvcm1Vc2VyUHJlZmVycmVkTGFuZ3VhZ2VzKFNo
b3VsZE1pbmltaXplTGFuZ3VhZ2VzIHNob3VsZE1pbmkKICAgICAgICAgcmV0dXJuIHsgImVuIl9z
IH07CiAKICAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXM7CisgICAgbGFuZ3VhZ2VzLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkocGxhdGZvcm1MYW5ndWFnZXNDb3VudCk7CiAgICAgZm9yIChDRklu
ZGV4IGkgPSAwOyBpIDwgcGxhdGZvcm1MYW5ndWFnZXNDb3VudDsgaSsrKSB7CiAgICAgICAgIGF1
dG8gcGxhdGZvcm1MYW5ndWFnZSA9IHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPihDRkFycmF5R2V0
VmFsdWVBdEluZGV4KHBsYXRmb3JtTGFuZ3VhZ2VzLmdldCgpLCBpKSk7Ci0gICAgICAgIGxhbmd1
YWdlcy5hcHBlbmQoaHR0cFN0eWxlTGFuZ3VhZ2VDb2RlKHBsYXRmb3JtTGFuZ3VhZ2UsIHNob3Vs
ZE1pbmltaXplTGFuZ3VhZ2VzKSk7CisgICAgICAgIGxhbmd1YWdlcy51bmNoZWNrZWRBcHBlbmQo
aHR0cFN0eWxlTGFuZ3VhZ2VDb2RlKHBsYXRmb3JtTGFuZ3VhZ2UsIHNob3VsZE1pbmltaXplTGFu
Z3VhZ2VzKSk7CiAgICAgfQogCiAgICAgTE9HX1dJVEhfU1RSRUFNKExhbmd1YWdlLCBzdHJlYW0g
PDwgIkFmdGVyIHBhc3NpbmcgdGhyb3VnaCBodHRwU3R5bGVMYW5ndWFnZUNvZGU6ICIgPDwgbGFu
Z3VhZ2VzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvUGF5
bWVudENvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvUGF5
bWVudENvb3JkaW5hdG9yLmNwcAppbmRleCAxYTMyN2E5NGIwYjcxZDRlYzc1ZWFjYzhkNGFkNzhh
OTFiOWZmNjg1Li40YTk0MzIyNDlkNTJkNTFkMTQ3Yjg2ZTU3MDhkNTE4ODhiYTY0ZjU2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29yZGluYXRv
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXltZW50Q29vcmRp
bmF0b3IuY3BwCkBAIC0xMDEsMTEgKzEwMSwxMCBAQCBib29sIFBheW1lbnRDb29yZGluYXRvcjo6
YmVnaW5QYXltZW50U2Vzc2lvbihEb2N1bWVudCYgZG9jdW1lbnQsIFBheW1lbnRTZXNzaW9uJgog
ewogICAgIEFTU0VSVCghbV9hY3RpdmVTZXNzaW9uKTsKIAotICAgIFZlY3RvcjxVUkw+IGxpbmtJ
Y29uVVJMczsKLSAgICBmb3IgKGF1dG8mIGljb24gOiBMaW5rSWNvbkNvbGxlY3RvciB7IGRvY3Vt
ZW50IH0uaWNvbnNPZlR5cGVzKHsgTGlua0ljb25UeXBlOjpUb3VjaEljb24sIExpbmtJY29uVHlw
ZTo6VG91Y2hQcmVjb21wb3NlZEljb24gfSkpCi0gICAgICAgIGxpbmtJY29uVVJMcy5hcHBlbmQo
aWNvbi51cmwpOwotCi0gICAgYXV0byBzaG93UGF5bWVudFVJID0gbV9jbGllbnQuc2hvd1BheW1l
bnRVSShkb2N1bWVudC51cmwoKSwgbGlua0ljb25VUkxzLCBwYXltZW50UmVxdWVzdCk7CisgICAg
YXV0byBsaW5rSWNvblVSTHMgPSBMaW5rSWNvbkNvbGxlY3RvciB7IGRvY3VtZW50IH0uaWNvbnNP
ZlR5cGVzKHsgTGlua0ljb25UeXBlOjpUb3VjaEljb24sIExpbmtJY29uVHlwZTo6VG91Y2hQcmVj
b21wb3NlZEljb24gfSkubWFwKFtdKGF1dG8mIGljb24pIHsKKyAgICAgICAgcmV0dXJuIGljb24u
dXJsOworICAgIH0pOworICAgIGF1dG8gc2hvd1BheW1lbnRVSSA9IG1fY2xpZW50LnNob3dQYXlt
ZW50VUkoZG9jdW1lbnQudXJsKCksIFdURk1vdmUobGlua0ljb25VUkxzKSwgcGF5bWVudFJlcXVl
c3QpOwogICAgIFBBWU1FTlRfQ09PUkRJTkFUT1JfUkVMRUFTRV9MT0coImJlZ2luUGF5bWVudFNl
c3Npb24oKSAtPiAlZCIsIHNob3dQYXltZW50VUkpOwogICAgIGlmICghc2hvd1BheW1lbnRVSSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9hcHBsZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2FwcGxlcGF5L2NvY29hL1BheW1lbnRNZXRob2RDb2NvYS5tbQppbmRleCA3NjUzZGU1
NGFmNTM5ZjI1NjFmNDIyMzZkMzBlYzYxYWI1ODAzZGQ1Li4zNzVlNTNkNmQ0ZmRkYzg4OGYzMmUw
NGUyODNhN2RiMDQxMTNkMDYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Fw
cGxlcGF5L2NvY29hL1BheW1lbnRNZXRob2RDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2FwcGxlcGF5L2NvY29hL1BheW1lbnRNZXRob2RDb2NvYS5tbQpAQCAtMTAxLDExICsx
MDEsOCBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxBcHBsZVBheVBheW1lbnRNZXRob2Q6OlR5cGU+
IGNvbnZlcnQoUEtQYXltZW50TWV0aG9kVHlwZSBwYQogI2lmIEhBVkUoUEFTU0tJVF9QQVlNRU5U
X01FVEhPRF9CSUxMSU5HX0FERFJFU1MpCiBzdGF0aWMgdm9pZCBjb252ZXJ0KENOTGFiZWxlZFZh
bHVlPENOUG9zdGFsQWRkcmVzcyo+ICpwb3N0YWxBZGRyZXNzLCBBcHBsZVBheVBheW1lbnRDb250
YWN0ICZyZXN1bHQpCiB7Ci0gICAgVmVjdG9yPFN0cmluZz4gYWRkcmVzc0xpbmU7Ci0gICAgaWYg
KE5TU3RyaW5nICpzdHJlZXQgPSBwb3N0YWxBZGRyZXNzLnZhbHVlLnN0cmVldCkgewotICAgICAg
ICBhZGRyZXNzTGluZS5hcHBlbmQoc3RyZWV0KTsKLSAgICAgICAgcmVzdWx0LmFkZHJlc3NMaW5l
cyA9IFdURk1vdmUoYWRkcmVzc0xpbmUpOwotICAgIH0KKyAgICBpZiAoTlNTdHJpbmcgKnN0cmVl
dCA9IHBvc3RhbEFkZHJlc3MudmFsdWUuc3RyZWV0KQorICAgICAgICByZXN1bHQuYWRkcmVzc0xp
bmVzID0gVmVjdG9yIHsgU3RyaW5nIHsgc3RyZWV0IH0gfTsKICAgICByZXN1bHQuc3ViTG9jYWxp
dHkgPSBwb3N0YWxBZGRyZXNzLnZhbHVlLnN1YkxvY2FsaXR5OwogICAgIHJlc3VsdC5sb2NhbGl0
eSA9IHBvc3RhbEFkZHJlc3MudmFsdWUuY2l0eTsKICAgICByZXN1bHQuc3ViQWRtaW5pc3RyYXRp
dmVBcmVhID0gcG9zdGFsQWRkcmVzcy52YWx1ZS5zdWJBZG1pbmlzdHJhdGl2ZUFyZWE7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGUuY3BwCmluZGV4IDQ5ZjM5OGFhZmVmMzdj
ZDVlOGY4ZWIyNDRkNGUxMWYzOWYyYThjZDMuLjJkNDZkMWNkYmM3MTdmM2M5Mjk5ZWZhODYzYTU0
OTI2MzgzYWY1ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9N
Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGUuY3Bw
CkBAIC01MTUsMTAgKzUxNSw4IEBAIFJlY29yZCBET01DYWNoZTo6dG9Db25uZWN0aW9uUmVjb3Jk
KGNvbnN0IEZldGNoUmVxdWVzdCYgcmVxdWVzdCwgRmV0Y2hSZXNwb25zZSYKIAogdm9pZCBET01D
YWNoZTo6YmF0Y2hQdXRPcGVyYXRpb24oY29uc3QgRmV0Y2hSZXF1ZXN0JiByZXF1ZXN0LCBGZXRj
aFJlc3BvbnNlJiByZXNwb25zZSwgRE9NQ2FjaGVFbmdpbmU6OlJlc3BvbnNlQm9keSYmIHJlc3Bv
bnNlQm9keSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChFeGNlcHRpb25Pcjx2b2lkPiYmKT4mJiBj
YWxsYmFjaykKIHsKLSAgICBWZWN0b3I8UmVjb3JkPiByZWNvcmRzOwotICAgIHJlY29yZHMuYXBw
ZW5kKHRvQ29ubmVjdGlvblJlY29yZChyZXF1ZXN0LCByZXNwb25zZSwgV1RGTW92ZShyZXNwb25z
ZUJvZHkpKSk7Ci0KLSAgICBiYXRjaFB1dE9wZXJhdGlvbihXVEZNb3ZlKHJlY29yZHMpLCBXVEZN
b3ZlKGNhbGxiYWNrKSk7CisgICAgYXV0byByZWNvcmQgPSB0b0Nvbm5lY3Rpb25SZWNvcmQocmVx
dWVzdCwgcmVzcG9uc2UsIFdURk1vdmUocmVzcG9uc2VCb2R5KSk7CisgICAgYmF0Y2hQdXRPcGVy
YXRpb24oeyBXVEZNb3ZlKHJlY29yZCkgfSwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCiB2b2lk
IERPTUNhY2hlOjpiYXRjaFB1dE9wZXJhdGlvbihWZWN0b3I8UmVjb3JkPiYmIHJlY29yZHMsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoRXhjZXB0aW9uT3I8dm9pZD4mJik+JiYgY2FsbGJhY2spCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5jcHAKaW5kZXggNjk2OWUwYjUw
M2E4N2RkMDM4NWUxODM5MDg4NDY3MGZlYTA0YzI2Ny4uNTgzZjljODU1NTY3MTc4Y2NlNzJjYWQ0
NDc5MjRjZjhiYzNjNGU1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1l
cGFkL0dhbWVwYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1l
cGFkLmNwcApAQCAtNDMsOCArNDMsOSBAQCBHYW1lcGFkOjpHYW1lcGFkKGNvbnN0IFBsYXRmb3Jt
R2FtZXBhZCYgcGxhdGZvcm1HYW1lcGFkKQogICAgICwgbV9heGVzKHBsYXRmb3JtR2FtZXBhZC5h
eGlzVmFsdWVzKCkuc2l6ZSgpLCAwLjApCiB7CiAgICAgdW5zaWduZWQgYnV0dG9uQ291bnQgPSBw
bGF0Zm9ybUdhbWVwYWQuYnV0dG9uVmFsdWVzKCkuc2l6ZSgpOworICAgIG1fYnV0dG9ucy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGJ1dHRvbkNvdW50KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgYnV0dG9uQ291bnQ7ICsraSkKLSAgICAgICAgbV9idXR0b25zLmFwcGVuZChHYW1lcGFk
QnV0dG9uOjpjcmVhdGUoKSk7CisgICAgICAgIG1fYnV0dG9ucy51bmNoZWNrZWRBcHBlbmQoR2Ft
ZXBhZEJ1dHRvbjo6Y3JlYXRlKCkpOwogfQogCiBHYW1lcGFkOjp+R2FtZXBhZCgpID0gZGVmYXVs
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFu
YWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZE1hbmFnZXIu
Y3BwCmluZGV4IGNjMzc0ODU4Y2ZlYTFiMjQ0YzA0YmQ0MWIyOTk0OGQyOWFlYTMwMzAuLjU0M2Zl
NDg5MTY3ZTdjZTEzZDQ5NzY4ZmM3ZTE1ZjM0ZDA4MjM2ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmNwcApAQCAtNzksMTQgKzc5LDEw
IEBAIHZvaWQgR2FtZXBhZE1hbmFnZXI6OnBsYXRmb3JtR2FtZXBhZENvbm5lY3RlZChQbGF0Zm9y
bUdhbWVwYWQmIHBsYXRmb3JtR2FtZXBhZCwKIAogdm9pZCBHYW1lcGFkTWFuYWdlcjo6cGxhdGZv
cm1HYW1lcGFkRGlzY29ubmVjdGVkKFBsYXRmb3JtR2FtZXBhZCYgcGxhdGZvcm1HYW1lcGFkKQog
ewotICAgIFZlY3RvcjxXZWFrUHRyPERPTVdpbmRvdz4+IHdlYWtXaW5kb3dzOwotICAgIGZvciAo
YXV0byogZG9tV2luZG93IDogbV9kb21XaW5kb3dzKQotICAgICAgICB3ZWFrV2luZG93cy5hcHBl
bmQoKmRvbVdpbmRvdyk7Ci0KICAgICBIYXNoU2V0PE5hdmlnYXRvckdhbWVwYWQqPiBub3RpZmll
ZE5hdmlnYXRvcnM7CiAKICAgICAvLyBIYW5kbGUgdGhlIGRpc2Nvbm5lY3QgZm9yIGFsbCBET01X
aW5kb3dzIHdpdGggZXZlbnQgbGlzdGVuZXJzIGFuZCB0aGVpciBOYXZpZ2F0b3JzLgotICAgIGZv
ciAoYXV0byYgd2luZG93IDogd2Vha1dpbmRvd3MpIHsKKyAgICBmb3IgKGF1dG8mIHdpbmRvdyA6
IGNvcHlUb1ZlY3Rvck9mPFdlYWtQdHI8RE9NV2luZG93Pj4obV9kb21XaW5kb3dzKSkgewogICAg
ICAgICAvLyBFdmVudCBkaXNwYXRjaCBtaWdodCBoYXZlIG1hZGUgdGhpcyB3aW5kb3cgZ28gYXdh
eS4KICAgICAgICAgaWYgKCF3aW5kb3cpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE0Mywx
MSArMTM5LDcgQEAgdm9pZCBHYW1lcGFkTWFuYWdlcjo6bWFrZUdhbWVwYWRWaXNpYmxlKFBsYXRm
b3JtR2FtZXBhZCYgcGxhdGZvcm1HYW1lcGFkLCBIYXNoU2UKICAgICBmb3IgKGF1dG8qIG5hdmln
YXRvciA6IG5hdmlnYXRvclNldCkKICAgICAgICAgbmF2aWdhdG9yLT5nYW1lcGFkQ29ubmVjdGVk
KHBsYXRmb3JtR2FtZXBhZCk7CiAKLSAgICBWZWN0b3I8V2Vha1B0cjxET01XaW5kb3c+PiB3ZWFr
V2luZG93czsKLSAgICBmb3IgKGF1dG8qIGRvbVdpbmRvdyA6IG1fZG9tV2luZG93cykKLSAgICAg
ICAgd2Vha1dpbmRvd3MuYXBwZW5kKCpkb21XaW5kb3cpOwotCi0gICAgZm9yIChhdXRvJiB3aW5k
b3cgOiB3ZWFrV2luZG93cykgeworICAgIGZvciAoYXV0byYgd2luZG93IDogY29weVRvVmVjdG9y
T2Y8V2Vha1B0cjxET01XaW5kb3c+PihtX2RvbVdpbmRvd3MpKSB7CiAgICAgICAgIC8vIEV2ZW50
IGRpc3BhdGNoIG1pZ2h0IGhhdmUgbWFkZSB0aGlzIHdpbmRvdyBnbyBhd2F5LgogICAgICAgICBp
ZiAoIXdpbmRvdykKICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCmluZGV4IDdhYTYzMmI3ZWMwNDdiZTQ2
MDhiNTFhMDk0ZWExYTRlNTdhMjYyOWIuLjBiZThiZDExNmVjMjM2MTIzYzcxNTMyZDdlZTM2YzU2
ZTk5NjU0OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZS5jcHAKQEAgLTEwMiw5ICsxMDIsNyBAQCBSZWY8RE9NU3RyaW5nTGlzdD4gSURCRGF0
YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMoKSBjb25zdAogewogICAgIEFTU0VSVChjYW5DdXJyZW50
VGhyZWFkQWNjZXNzVGhyZWFkTG9jYWxEYXRhKG9yaWdpblRocmVhZCgpKSk7CiAKLSAgICBhdXRv
IG9iamVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKLSAgICBmb3IgKGF1
dG8mIG5hbWUgOiBtX2luZm8ub2JqZWN0U3RvcmVOYW1lcygpKQotICAgICAgICBvYmplY3RTdG9y
ZU5hbWVzLT5hcHBlbmQobmFtZSk7CisgICAgYXV0byBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3Ry
aW5nTGlzdDo6Y3JlYXRlKG1faW5mby5vYmplY3RTdG9yZU5hbWVzKCkpOwogICAgIG9iamVjdFN0
b3JlTmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gb2JqZWN0U3RvcmVOYW1lczsKIH0KQEAgLTE3
NSwxOSArMTczLDE2IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJUcmFuc2FjdGlvbj4+IElEQkRhdGFi
YXNlOjp0cmFuc2FjdGlvbihTdHJpbmdPclZlY3Rvck9mU3RyaW5nCiAgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0byBleGVjdXRlICd0cmFuc2Fj
dGlvbicgb24gJ0lEQkRhdGFiYXNlJzogVGhlIGRhdGFiYXNlIGNvbm5lY3Rpb24gaXMgY2xvc2lu
Zy4iX3MgfTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IG9iamVjdFN0b3JlczsKLSAgICBpZiAoc3Rk
Ojpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oc3RvcmVOYW1lcykpCisgICAgaWYg
KHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPFN0cmluZz4+KHN0b3JlTmFtZXMpKSB7CiAg
ICAgICAgIG9iamVjdFN0b3JlcyA9IFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPFN0cmluZz4+KHN0
b3JlTmFtZXMpKTsKLSAgICBlbHNlCisgICAgICAgIC8vIEl0IGlzIHZhbGlkIGZvciBqYXZhc2Ny
aXB0IHRvIHBhc3MgaW4gYSBsaXN0IG9mIG9iamVjdCBzdG9yZSBuYW1lcyB3aXRoIHRoZSBzYW1l
IG5hbWUgbGlzdGVkIHR3aWNlLAorICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIHB1dCB0aGVtIGFs
bCBpbiBhIHNldCB0byBnZXQgYSB1bmlxdWUgbGlzdC4KKyAgICAgICAgSGFzaFNldDxTdHJpbmc+
IG9iamVjdFN0b3JlU2V0OworICAgICAgICBvYmplY3RTdG9yZVNldC5hZGQob2JqZWN0U3RvcmVz
LmJlZ2luKCksIG9iamVjdFN0b3Jlcy5lbmQoKSk7CisgICAgICAgIG9iamVjdFN0b3JlcyA9IGNv
cHlUb1ZlY3RvcihvYmplY3RTdG9yZVNldCk7CisgICAgfSBlbHNlCiAgICAgICAgIG9iamVjdFN0
b3Jlcy5hcHBlbmQoV1RGTW92ZShzdGQ6OmdldDxTdHJpbmc+KHN0b3JlTmFtZXMpKSk7CiAKLSAg
ICAvLyBJdCBpcyB2YWxpZCBmb3IgamF2YXNjcmlwdCB0byBwYXNzIGluIGEgbGlzdCBvZiBvYmpl
Y3Qgc3RvcmUgbmFtZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGxpc3RlZCB0d2ljZSwKLSAgICAvLyBz
byB3ZSBuZWVkIHRvIHB1dCB0aGVtIGFsbCBpbiBhIHNldCB0byBnZXQgYSB1bmlxdWUgbGlzdC4K
LSAgICBIYXNoU2V0PFN0cmluZz4gb2JqZWN0U3RvcmVTZXQ7Ci0gICAgZm9yIChhdXRvJiBvYmpl
Y3RTdG9yZSA6IG9iamVjdFN0b3JlcykKLSAgICAgICAgb2JqZWN0U3RvcmVTZXQuYWRkKG9iamVj
dFN0b3JlKTsKLQotICAgIG9iamVjdFN0b3JlcyA9IGNvcHlUb1ZlY3RvcihvYmplY3RTdG9yZVNl
dCk7Ci0KICAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlTmFtZSA6IG9iamVjdFN0b3Jlcykgewog
ICAgICAgICBpZiAobV9pbmZvLmhhc09iamVjdFN0b3JlKG9iamVjdFN0b3JlTmFtZSkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QktleURhdGEuaAppbmRleCA0Yjk3ODUzNjlkMTkwYTZiMTk2OTFkMTM3YWUxNTY3ZTVjMzc5NWQ5
Li4wMmY3MzM0MDNmM2FkMzM0ZmYyNzk1MDM3ZmFlN2Y2NTVhNjdhNzQwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5oCkBAIC0yNyw2ICsyNyw3IEBA
CiAKICNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRlIDx2YXJpYW50PgorI2luY2x1ZGUgPHd0
Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvU3RkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nSGFzaC5oPgogCkBAIC0xMTcsNDEgKzExOCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGhhc2goKSBjb25z
dAotICAgIHsKLSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBoYXNoQ29kZXM7Ci0gICAgICAgIGhh
c2hDb2Rlcy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdHlwZSkpOwotICAgICAgICBo
YXNoQ29kZXMuYXBwZW5kKG1faXNOdWxsID8gMSA6IDApOwotICAgICAgICBoYXNoQ29kZXMuYXBw
ZW5kKG1faXNEZWxldGVkVmFsdWUgPyAxIDogMCk7Ci0gICAgICAgIHN3aXRjaCAobV90eXBlKSB7
Ci0gICAgICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpJbnZhbGlkOgotICAgICAgICBjYXNl
IEluZGV4ZWREQjo6S2V5VHlwZTo6TWF4OgotICAgICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlw
ZTo6TWluOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5kZXhlZERCOjpLZXlU
eXBlOjpOdW1iZXI6Ci0gICAgICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpEYXRlOgotICAg
ICAgICAgICAgaGFzaENvZGVzLmFwcGVuZChTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnk8c2l6ZW9m
KGRvdWJsZSk+KCZzdGQ6OmdldDxkb3VibGU+KG1fdmFsdWUpKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OlN0cmluZzoKLSAgICAgICAgICAg
IGhhc2hDb2Rlcy5hcHBlbmQoU3RyaW5nSGFzaDo6aGFzaChzdGQ6OmdldDxTdHJpbmc+KG1fdmFs
dWUpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5
cGU6OkJpbmFyeTogewotICAgICAgICAgICAgYXV0byogZGF0YSA9IHN0ZDo6Z2V0PFRocmVhZFNh
ZmVEYXRhQnVmZmVyPihtX3ZhbHVlKS5kYXRhKCk7Ci0gICAgICAgICAgICBpZiAoIWRhdGEpCi0g
ICAgICAgICAgICAgICAgaGFzaENvZGVzLmFwcGVuZCgwKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShk
YXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OkFycmF5OgotICAgICAgICAgICAg
Zm9yIChhdXRvJiBrZXkgOiBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpKQot
ICAgICAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoa2V5Lmhhc2goKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hN
ZW1vcnkoaGFzaENvZGVzLmRhdGEoKSwgaGFzaENvZGVzLnNpemUoKSAqIHNpemVvZih1bnNpZ25l
ZCkpOwotICAgIH0KLQogICAgIFN0cmluZyBzdHJpbmcoKSBjb25zdAogICAgIHsKICAgICAgICAg
QVNTRVJUKG1fdHlwZSA9PSBJbmRleGVkREI6OktleVR5cGU6OlN0cmluZyk7CkBAIC0xOTYsOCAr
MTYyLDM1IEBAIHByaXZhdGU6CiAgICAgc3RkOjp2YXJpYW50PFZlY3RvcjxJREJLZXlEYXRhPiwg
U3RyaW5nLCBkb3VibGUsIFRocmVhZFNhZmVEYXRhQnVmZmVyPiBtX3ZhbHVlOwogfTsKIAoraW5s
aW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhKQor
eworICAgIGFkZChoYXNoZXIsIGtleURhdGEudHlwZSgpKTsKKyAgICBhZGQoaGFzaGVyLCBrZXlE
YXRhLmlzTnVsbCgpKTsKKyAgICBzd2l0Y2ggKGtleURhdGEudHlwZSgpKSB7CisgICAgY2FzZSBJ
bmRleGVkREI6OktleVR5cGU6OkludmFsaWQ6CisgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6
Ok1heDoKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TWluOgorICAgICAgICBicmVhazsK
KyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TnVtYmVyOgorICAgICAgICBhZGQoaGFzaGVy
LCBrZXlEYXRhLm51bWJlcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbmRleGVkREI6
OktleVR5cGU6OkRhdGU6CisgICAgICAgIGFkZChoYXNoZXIsIGtleURhdGEuZGF0ZSgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OlN0cmluZzoKKyAgICAg
ICAgYWRkKGhhc2hlciwga2V5RGF0YS5zdHJpbmcoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgSW5kZXhlZERCOjpLZXlUeXBlOjpCaW5hcnk6CisgICAgICAgIGFkZChoYXNoZXIsIGtleURh
dGEuYmluYXJ5KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlw
ZTo6QXJyYXk6CisgICAgICAgIGFkZChoYXNoZXIsIGtleURhdGEuYXJyYXkoKSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKwogc3RydWN0IElEQktleURhdGFIYXNoIHsKLSAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBJREJLZXlEYXRhJiBhKSB7IHJldHVybiBhLmhhc2goKTsgfQor
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IElEQktleURhdGEmIGEpIHsgcmV0dXJuIGNv
bXB1dGVIYXNoKGEpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgSURCS2V5RGF0YSYg
YSwgY29uc3QgSURCS2V5RGF0YSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CiAgICAgc3RhdGljIGNv
bnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAK
aW5kZXggMTQzNTE0MGE1Y2I0YTFhMWQ0MDdhMmRiMjlkMTViZGYyZDUyYzBiNi4uY2U2M2M2YTU2
YjE0ZDViZTAzMjI1NzM3MjUzMjJiODJmMGRkZGQwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcApAQCAtMTI2LDE0ICsxMjYs
MTEgQEAgUmVmPERPTVN0cmluZ0xpc3Q+IElEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzKCkgY29u
c3QKIHsKICAgICBBU1NFUlQoY2FuQ3VycmVudFRocmVhZEFjY2Vzc1RocmVhZExvY2FsRGF0YSht
X3RyYW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkpKTsKIAotICAgIGF1dG8gaW5k
ZXhOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwotCi0gICAgaWYgKCFtX2RlbGV0ZWQp
IHsKLSAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogbV9pbmZvLmluZGV4TmFtZXMoKSkKLSAgICAg
ICAgICAgIGluZGV4TmFtZXMtPmFwcGVuZChuYW1lKTsKLSAgICAgICAgaW5kZXhOYW1lcy0+c29y
dCgpOwotICAgIH0KKyAgICBpZiAobV9kZWxldGVkKQorICAgICAgICByZXR1cm4gRE9NU3RyaW5n
TGlzdDo6Y3JlYXRlKCk7CiAKKyAgICBhdXRvIGluZGV4TmFtZXMgPSBET01TdHJpbmdMaXN0Ojpj
cmVhdGUobV9pbmZvLmluZGV4TmFtZXMoKSk7CisgICAgaW5kZXhOYW1lcy0+c29ydCgpOwogICAg
IHJldHVybiBpbmRleE5hbWVzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggNmMxMTIxYjczMTBmNzM3ZjdiOTVi
ZWNlZTg0NTRlNmFjNTBkZjJiNi4uY2U4NjdiMWI3ZTZkNmYxNTQ5ZWNkNzI2MTI3ZGNjNzY5OTVh
OWQwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uLmNwcApAQCAtMTIxLDEyICsxMjEsOCBAQCBSZWY8RE9NU3RyaW5nTGlzdD4gSURC
VHJhbnNhY3Rpb246Om9iamVjdFN0b3JlTmFtZXMoKSBjb25zdAogewogICAgIEFTU0VSVChjYW5D
dXJyZW50VGhyZWFkQWNjZXNzVGhyZWFkTG9jYWxEYXRhKG1fZGF0YWJhc2UtPm9yaWdpblRocmVh
ZCgpKSk7CiAKLSAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiBuYW1lcyA9IGlzVmVyc2lvbkNoYW5n
ZSgpID8gbV9kYXRhYmFzZS0+aW5mbygpLm9iamVjdFN0b3JlTmFtZXMoKSA6IG1faW5mby5vYmpl
Y3RTdG9yZXMoKTsKLQotICAgIFJlZjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0g
RE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0gICAgZm9yIChhdXRvJiBuYW1lIDogbmFtZXMpCi0g
ICAgICAgIG9iamVjdFN0b3JlTmFtZXMtPmFwcGVuZChuYW1lKTsKLQorICAgIGF1dG8gbmFtZXMg
PSBpc1ZlcnNpb25DaGFuZ2UoKSA/IG1fZGF0YWJhc2UtPmluZm8oKS5vYmplY3RTdG9yZU5hbWVz
KCkgOiBtX2luZm8ub2JqZWN0U3RvcmVzKCk7CisgICAgYXV0byBvYmplY3RTdG9yZU5hbWVzID0g
RE9NU3RyaW5nTGlzdDo6Y3JlYXRlKFdURk1vdmUobmFtZXMpKTsKICAgICBvYmplY3RTdG9yZU5h
bWVzLT5zb3J0KCk7CiAgICAgcmV0dXJuIG9iamVjdFN0b3JlTmFtZXM7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNI
b3N0LmNwcAppbmRleCAxOWEwNjllMjNiMzlkYmI0YTcwNjVkOGRlNzhkN2VlNDkzYzY5ODE4Li5i
ODI1ZWM4MDA1MTQ4MDI4ZTJiMDdiMTlkYzc4MzkyYTQzYThjYmE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9z
dC5jcHAKQEAgLTU1NSwxMSArNTU1LDEwIEBAIGJvb2wgTWVkaWFDb250cm9sc0hvc3Q6OnNob3dN
ZWRpYUNvbnRyb2xzQ29udGV4dE1lbnUoSFRNTEVsZW1lbnQmIHRhcmdldCwgU3RyaW5nCiAKICAg
ICBpZiAob3B0aW9uc0pTT05PYmplY3QtPmdldEJvb2xlYW4oImluY2x1ZGVMYW5ndWFnZXMiX3Mp
LnZhbHVlX29yKGZhbHNlKSkgewogICAgICAgICBpZiAoYXV0byogYXVkaW9UcmFja3MgPSBtZWRp
YUVsZW1lbnQuYXVkaW9UcmFja3MoKTsgYXVkaW9UcmFja3MgJiYgYXVkaW9UcmFja3MtPmxlbmd0
aCgpID4gMSkgewotICAgICAgICAgICAgVmVjdG9yPE1lbnVJdGVtPiBsYW5ndWFnZU1lbnVJdGVt
czsKLQogICAgICAgICAgICAgYXV0byYgY2FwdGlvblByZWZlcmVuY2VzID0gcGFnZS0+Z3JvdXAo
KS5lbnN1cmVDYXB0aW9uUHJlZmVyZW5jZXMoKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgYXVk
aW9UcmFjayA6IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KGF1ZGlv
VHJhY2tzKSkKLSAgICAgICAgICAgICAgICBsYW5ndWFnZU1lbnVJdGVtcy5hcHBlbmQoY3JlYXRl
TWVudUl0ZW0oYXVkaW9UcmFjaywgY2FwdGlvblByZWZlcmVuY2VzLmRpc3BsYXlOYW1lRm9yVHJh
Y2soYXVkaW9UcmFjay5nZXQoKSksIGF1ZGlvVHJhY2stPmVuYWJsZWQoKSkpOworICAgICAgICAg
ICAgYXV0byBsYW5ndWFnZU1lbnVJdGVtcyA9IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFj
a0xpc3RGb3JNZW51KGF1ZGlvVHJhY2tzKS5tYXAoWyZdKGF1dG8mIGF1ZGlvVHJhY2spIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTWVudUl0ZW0oYXVkaW9UcmFjaywgY2FwdGlvblBy
ZWZlcmVuY2VzLmRpc3BsYXlOYW1lRm9yVHJhY2soYXVkaW9UcmFjay5nZXQoKSksIGF1ZGlvVHJh
Y2stPmVuYWJsZWQoKSk7CisgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgaWYgKCFsYW5n
dWFnZU1lbnVJdGVtcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgaXRlbXMuYXBwZW5kKGNy
ZWF0ZVN1Ym1lbnUoV0VCX1VJX1NUUklOR19LRVkoIkxhbmd1YWdlcyIsICJMYW5ndWFnZXMgKE1l
ZGlhIENvbnRyb2xzIE1lbnUpIiwgIkxhbmd1YWdlcyBtZWRpYSBjb250cm9scyBjb250ZXh0IG1l
bnUgdGl0bGUiKSwgImdsb2JlIl9zLCBXVEZNb3ZlKGxhbmd1YWdlTWVudUl0ZW1zKSkpOwpAQCAt
NTY4LDE1ICs1NjcsMTMgQEAgYm9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6c2hvd01lZGlhQ29udHJv
bHNDb250ZXh0TWVudShIVE1MRWxlbWVudCYgdGFyZ2V0LCBTdHJpbmcKIAogICAgIGlmIChvcHRp
b25zSlNPTk9iamVjdC0+Z2V0Qm9vbGVhbigiaW5jbHVkZVN1YnRpdGxlcyJfcykudmFsdWVfb3Io
ZmFsc2UpKSB7CiAgICAgICAgIGlmIChhdXRvKiB0ZXh0VHJhY2tzID0gbWVkaWFFbGVtZW50LnRl
eHRUcmFja3MoKTsgdGV4dFRyYWNrcyAmJiB0ZXh0VHJhY2tzLT5sZW5ndGgoKSkgewotICAgICAg
ICAgICAgVmVjdG9yPE1lbnVJdGVtPiBzdWJ0aXRsZU1lbnVJdGVtczsKLQogICAgICAgICAgICAg
YXV0byYgY2FwdGlvblByZWZlcmVuY2VzID0gcGFnZS0+Z3JvdXAoKS5lbnN1cmVDYXB0aW9uUHJl
ZmVyZW5jZXMoKTsKICAgICAgICAgICAgIGF1dG8gc29ydGVkVGV4dFRyYWNrcyA9IGNhcHRpb25Q
cmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KHRleHRUcmFja3MsIHsgVGV4dFRyYWNr
OjpLaW5kOjpTdWJ0aXRsZXMsIFRleHRUcmFjazo6S2luZDo6Q2FwdGlvbnMsIFRleHRUcmFjazo6
S2luZDo6RGVzY3JpcHRpb25zIH0pOwogICAgICAgICAgICAgYm9vbCBhbGxUcmFja3NEaXNhYmxl
ZCA9IG5vdEZvdW5kID09IHNvcnRlZFRleHRUcmFja3MuZmluZElmKFtdIChjb25zdCBhdXRvJiB0
ZXh0VHJhY2spIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dFRyYWNrLT5tb2RlKCkgPT0g
VGV4dFRyYWNrOjpNb2RlOjpTaG93aW5nOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBi
b29sIHVzZXNBdXRvbWF0aWNUcmFjayA9IGNhcHRpb25QcmVmZXJlbmNlcy5jYXB0aW9uRGlzcGxh
eU1vZGUoKSA9PSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpBdXRvbWF0aWMgJiYgYWxsVHJhY2tz
RGlzYWJsZWQ7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHRleHRUcmFjayA6IHNvcnRlZFRleHRU
cmFja3MpIHsKKyAgICAgICAgICAgIGF1dG8gc3VidGl0bGVNZW51SXRlbXMgPSBzb3J0ZWRUZXh0
VHJhY2tzLm1hcChbJl0oYXV0byYgdGV4dFRyYWNrKSB7CiAgICAgICAgICAgICAgICAgYm9vbCBj
aGVja2VkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYgKGFsbFRyYWNrc0Rpc2FibGVkICYm
IHRleHRUcmFjayA9PSAmVGV4dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0oKSAmJiAoY2FwdGlv
blByZWZlcmVuY2VzLmNhcHRpb25EaXNwbGF5TW9kZSgpID09IENhcHRpb25Vc2VyUHJlZmVyZW5j
ZXM6OkZvcmNlZE9ubHkgfHwgY2FwdGlvblByZWZlcmVuY2VzLmNhcHRpb25EaXNwbGF5TW9kZSgp
ID09IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6Ok1hbnVhbCkpCiAgICAgICAgICAgICAgICAgICAg
IGNoZWNrZWQgPSB0cnVlOwpAQCAtNTg0LDggKzU4MSw4IEBAIGJvb2wgTWVkaWFDb250cm9sc0hv
c3Q6OnNob3dNZWRpYUNvbnRyb2xzQ29udGV4dE1lbnUoSFRNTEVsZW1lbnQmIHRhcmdldCwgU3Ry
aW5nCiAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQgPSB0cnVlOwogICAgICAgICAgICAgICAg
IGVsc2UgaWYgKCF1c2VzQXV0b21hdGljVHJhY2sgJiYgdGV4dFRyYWNrLT5tb2RlKCkgPT0gVGV4
dFRyYWNrOjpNb2RlOjpTaG93aW5nKQogICAgICAgICAgICAgICAgICAgICBjaGVja2VkID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBzdWJ0aXRsZU1lbnVJdGVtcy5hcHBlbmQoY3JlYXRlTWVudUl0
ZW0odGV4dFRyYWNrLCBjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFjayh0ZXh0
VHJhY2suZ2V0KCkpLCBjaGVja2VkKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIGNyZWF0ZU1lbnVJdGVtKHRleHRUcmFjaywgY2FwdGlvblByZWZlcmVuY2VzLmRpc3Bs
YXlOYW1lRm9yVHJhY2sodGV4dFRyYWNrLmdldCgpKSwgY2hlY2tlZCk7CisgICAgICAgICAgICB9
KTsKIAogICAgICAgICAgICAgaWYgKCFzdWJ0aXRsZU1lbnVJdGVtcy5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICAgICAgaXRlbXMuYXBwZW5kKGNyZWF0ZVN1Ym1lbnUoV0VCX1VJX1NUUklOR19LRVko
IlN1YnRpdGxlcyIsICJTdWJ0aXRsZXMgKE1lZGlhIENvbnRyb2xzIE1lbnUpIiwgIlN1YnRpdGxl
cyBtZWRpYSBjb250cm9scyBjb250ZXh0IG1lbnUgdGl0bGUiKSwgImNhcHRpb25zLmJ1YmJsZSJf
cywgV1RGTW92ZShzdWJ0aXRsZU1lbnVJdGVtcykpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKaW5kZXggOTEyNzQ3ZjQwNmMyOTU5
NDk5NzNiNWJiMTM0OWRiY2E2NzQxYzEzNS4uYTJlNjU4YTkyZjk5N2Q3ZjRiNDNlMTcwM2Y0YTBl
MDk0OTE3YjBlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJj
ZS9NZWRpYVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJj
ZS9NZWRpYVNvdXJjZS5jcHAKQEAgLTEwNTEsMTAgKzEwNTEsOSBAQCB2b2lkIE1lZGlhU291cmNl
OjpvblJlYWR5U3RhdGVDaGFuZ2UoUmVhZHlTdGF0ZSBvbGRTdGF0ZSwgUmVhZHlTdGF0ZSBuZXdT
dGF0ZSkKIAogVmVjdG9yPFBsYXRmb3JtVGltZVJhbmdlcz4gTWVkaWFTb3VyY2U6OmFjdGl2ZVJh
bmdlcygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFBsYXRmb3JtVGltZVJhbmdlcz4gYWN0aXZlUmFu
Z2VzOwotICAgIGZvciAoYXV0byYgc291cmNlQnVmZmVyIDogKm1fYWN0aXZlU291cmNlQnVmZmVy
cykKLSAgICAgICAgYWN0aXZlUmFuZ2VzLmFwcGVuZChzb3VyY2VCdWZmZXItPmJ1ZmZlcmVkSW50
ZXJuYWwoKS5yYW5nZXMoKSk7Ci0gICAgcmV0dXJuIGFjdGl2ZVJhbmdlczsKKyAgICByZXR1cm4g
V1RGOjptYXAoKm1fYWN0aXZlU291cmNlQnVmZmVycywgW10oYXV0byYgc291cmNlQnVmZmVyKSB7
CisgICAgICAgIHJldHVybiBzb3VyY2VCdWZmZXItPmJ1ZmZlcmVkSW50ZXJuYWwoKS5yYW5nZXMo
KTsKKyAgICB9KTsKIH0KIAogRXhjZXB0aW9uT3I8UmVmPFNvdXJjZUJ1ZmZlclByaXZhdGU+PiBN
ZWRpYVNvdXJjZTo6Y3JlYXRlU291cmNlQnVmZmVyUHJpdmF0ZShjb25zdCBDb250ZW50VHlwZSYg
aW5jb21pbmdUeXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNv
dXJjZS9TYW1wbGVNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU2Ft
cGxlTWFwLmgKaW5kZXggZWFmNDkzMTU5N2QyNjg1MjNjNjY3YmQ5Y2RjYzRjZWE2NTQzMzY5NS4u
YWYxZTEwNDU4MTc4N2YxNWY2ZjFmMzg1YjI1NzI0NDRkODg1OTVmYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9TYW1wbGVNYXAuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1hcC5oCkBAIC05MSw2ICs5MSw3IEBA
IHB1YmxpYzoKICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIG1fc2FtcGxlcy5yYmVnaW4oKTsgfQogICAgIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsg
cmV0dXJuIG1fc2FtcGxlcy5yZW5kKCk7IH0KICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJl
bmQoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZXMucmVuZCgpOyB9CisgICAgc2l6ZV90IHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NhbXBsZXMuc2l6ZSgpOyB9CiAKICAgICBXRUJDT1JFX0VYUE9S
VCBpdGVyYXRvciBmaW5kU2FtcGxlV2l0aERlY29kZUtleShjb25zdCBLZXlUeXBlJik7CiAgICAg
V0VCQ09SRV9FWFBPUlQgaXRlcmF0b3IgZmluZFNhbXBsZUFmdGVyRGVjb2RlS2V5KGNvbnN0IEtl
eVR5cGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2Uv
U291cmNlQnVmZmVyTGlzdC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9T
b3VyY2VCdWZmZXJMaXN0LmgKaW5kZXggZmM2ZTA3M2FiOTBlNzZkMTgxNWY4ODk2YjZmNjYwOTZk
ZjJmZGRkNS4uYmQ2ZTNiNzdjOWQ3NDMwZmVhMjE2ZThhZWFmOGQxMzNiYzI2N2MxZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJM
aXN0LmgKQEAgLTQ3LDggKzQ3LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWY8U291cmNlQnVm
ZmVyTGlzdD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKICAgICB2aXJ0dWFsIH5T
b3VyY2VCdWZmZXJMaXN0KCk7CiAKLSAgICB1bnNpZ25lZCBsb25nIGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KLSAgICBTb3VyY2VCdWZmZXIqIGl0ZW0odW5zaWduZWQg
bG9uZyBpbmRleCkgY29uc3QgeyByZXR1cm4gKGluZGV4IDwgbV9saXN0LnNpemUoKSkgPyBtX2xp
c3RbaW5kZXhdLmdldCgpIDogbnVsbHB0cjsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KKworICAgIFNvdXJjZUJ1ZmZlciogaXRlbSh1bnNp
Z25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gKGluZGV4IDwgbV9saXN0LnNpemUoKSkgPyBtX2xp
c3RbaW5kZXhdLmdldCgpIDogbnVsbHB0cjsgfQogCiAgICAgdm9pZCBhZGQoUmVmPFNvdXJjZUJ1
ZmZlcj4mJik7CiAgICAgdm9pZCByZW1vdmUoU291cmNlQnVmZmVyJik7CkBAIC01OCw2ICs1OSw5
IEBAIHB1YmxpYzoKIAogICAgIFZlY3RvcjxSZWZQdHI8U291cmNlQnVmZmVyPj46Oml0ZXJhdG9y
IGJlZ2luKCkgeyByZXR1cm4gbV9saXN0LmJlZ2luKCk7IH0KICAgICBWZWN0b3I8UmVmUHRyPFNv
dXJjZUJ1ZmZlcj4+OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX2xpc3QuZW5kKCk7IH0KKyAg
ICBWZWN0b3I8UmVmUHRyPFNvdXJjZUJ1ZmZlcj4+Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIG1fbGlzdC5iZWdpbigpOyB9CisgICAgVmVjdG9yPFJlZlB0cjxTb3VyY2VC
dWZmZXI+Pjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LmVuZCgp
OyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CiAK
ICAgICAvLyBFdmVudFRhcmdldCBpbnRlcmZhY2UKICAgICBFdmVudFRhcmdldEludGVyZmFjZSBl
dmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFNvdXJjZUJ1ZmZlckxp
c3RFdmVudFRhcmdldEludGVyZmFjZVR5cGU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuY3BwCmluZGV4IGVhZjNhMmUxZTc5OGE0ODFmNzY4
YjMzYzVmZDI5ZDNjN2NiYWIzYWUuLjgyYzFhM2EwYzA3MjU1YzFlODBkYTYxZDU5MGJhOWM5NDFj
YzA2OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5
bnRoZXNpcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3lu
dGhlc2lzLmNwcApAQCAtOTMsOSArOTMsMTAgQEAgY29uc3QgVmVjdG9yPFJlZjxTcGVlY2hTeW50
aGVzaXNWb2ljZT4+JiBTcGVlY2hTeW50aGVzaXM6OmdldFZvaWNlcygpCiAgICAgICAgIHJldHVy
biBtX3ZvaWNlTGlzdDsKIAogICAgIC8vIElmIHRoZSB2b2ljZUxpc3QgaXMgZW1wdHksIHRoYXQn
cyB0aGUgY3VlIHRvIGdldCB0aGUgdm9pY2VzIGZyb20gdGhlIHBsYXRmb3JtIGFnYWluLgotICAg
IGZvciAoYXV0byYgdm9pY2UgOiBtX3NwZWVjaFN5bnRoZXNpc0NsaWVudCA/IG1fc3BlZWNoU3lu
dGhlc2lzQ2xpZW50LT52b2ljZUxpc3QoKSA6IGVuc3VyZVBsYXRmb3JtU3BlZWNoU3ludGhlc2l6
ZXIoKS52b2ljZUxpc3QoKSkKLSAgICAgICAgbV92b2ljZUxpc3QuYXBwZW5kKFNwZWVjaFN5bnRo
ZXNpc1ZvaWNlOjpjcmVhdGUoKnZvaWNlKSk7Ci0KKyAgICBhdXRvJiB2b2ljZUxpc3QgPSBtX3Nw
ZWVjaFN5bnRoZXNpc0NsaWVudCA/IG1fc3BlZWNoU3ludGhlc2lzQ2xpZW50LT52b2ljZUxpc3Qo
KSA6IGVuc3VyZVBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIoKS52b2ljZUxpc3QoKTsKKyAgICBt
X3ZvaWNlTGlzdCA9IHZvaWNlTGlzdC5tYXAoW10oYXV0byYgdm9pY2UpIHsKKyAgICAgICAgcmV0
dXJuIFNwZWVjaFN5bnRoZXNpc1ZvaWNlOjpjcmVhdGUoKnZvaWNlKTsKKyAgICB9KTsKICAgICBy
ZXR1cm4gbV92b2ljZUxpc3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrLm1tIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9zcGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2subW0KaW5kZXgg
ZjFiOTY5NTgwNTdkMmZlNjA0NGQyYzdiMjU5ZGI2YzVjZWI0NGVmZS4uYTVlODVhZjgyOWJjMGRk
ZGVmNjJjNjFhNGY2YzlmMmNmMmFkNmNmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9zcGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2subW0KKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2subW0K
QEAgLTEyOCw5ICsxMjgsOCBAQCAtICh2b2lkKWNhbGxiYWNrV2l0aFRyYW5zY3JpcHRpb25zOihO
U0FycmF5PFNGVHJhbnNjcmlwdGlvbiAqPiAqKXRyYW5zY3JpcHRpb25zCiAgICAgICAgIGlmIChh
bHRlcm5hdGl2ZXMuc2l6ZSgpID09IF9tYXhBbHRlcm5hdGl2ZXMpCiAgICAgICAgICAgICBicmVh
azsKICAgICB9Ci0gICAgVmVjdG9yPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0RGF0YT4gZGF0YXM7
Ci0gICAgZGF0YXMuYXBwZW5kKFNwZWVjaFJlY29nbml0aW9uUmVzdWx0RGF0YSB7IFdURk1vdmUo
YWx0ZXJuYXRpdmVzKSwgYm9vbChpc0ZpbmFsKSB9KTsKLSAgICBfZGVsZWdhdGVDYWxsYmFjayhT
cGVlY2hSZWNvZ25pdGlvblVwZGF0ZTo6Y3JlYXRlUmVzdWx0KF9pZGVudGlmaWVyLCBXVEZNb3Zl
KGRhdGFzKSkpOworICAgIFNwZWVjaFJlY29nbml0aW9uUmVzdWx0RGF0YSBkYXRhIHsgV1RGTW92
ZShhbHRlcm5hdGl2ZXMpLCAhIWlzRmluYWwgfTsKKyAgICBfZGVsZWdhdGVDYWxsYmFjayhTcGVl
Y2hSZWNvZ25pdGlvblVwZGF0ZTo6Y3JlYXRlUmVzdWx0KF9pZGVudGlmaWVyLCB7IFdURk1vdmUo
ZGF0YSkgfSkpOwogfQogCiAtICh2b2lkKWF1ZGlvU2FtcGxlc0F2YWlsYWJsZTooQ01TYW1wbGVC
dWZmZXJSZWYpc2FtcGxlQnVmZmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFza01vY2subW0gYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFza01vY2subW0K
aW5kZXggYmM1YzYyMTliNWRhZGMzYjFjZGM1OTBkNjVjODk3YjcyNTBiMWUyMS4uOTYzZmI0N2M0
Yzg1YWEwNjA1YTJkYWJjNzE5ZTU2NzRjMjYwYWJmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9zcGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2tNb2NrLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6
ZXJUYXNrTW9jay5tbQpAQCAtNjMsMTEgKzYzLDkgQEAgLSAodm9pZClhdWRpb1NhbXBsZXNBdmFp
bGFibGU6KENNU2FtcGxlQnVmZmVyUmVmKXNhbXBsZUJ1ZmZlcgogICAgIH0KIAogICAgIC8vIEZh
a2Ugc29tZSByZWNvZ25pdGlvbiByZXN1bHRzLgotICAgIFZlY3RvcjxTcGVlY2hSZWNvZ25pdGlv
bkFsdGVybmF0aXZlRGF0YT4gYWx0ZXJuYXRpdmVzOwotICAgIGFsdGVybmF0aXZlcy5hcHBlbmQo
U3BlZWNoUmVjb2duaXRpb25BbHRlcm5hdGl2ZURhdGEgeyAiVGVzdCIsIDEuMCB9KTsKLSAgICBW
ZWN0b3I8U3BlZWNoUmVjb2duaXRpb25SZXN1bHREYXRhPiBkYXRhczsKLSAgICBkYXRhcy5hcHBl
bmQoU3BlZWNoUmVjb2duaXRpb25SZXN1bHREYXRhIHsgV1RGTW92ZShhbHRlcm5hdGl2ZXMpLCB0
cnVlICB9KTsKLSAgICBfZGVsZWdhdGVDYWxsYmFjayhTcGVlY2hSZWNvZ25pdGlvblVwZGF0ZTo6
Y3JlYXRlUmVzdWx0KF9pZGVudGlmaWVyLCBXVEZNb3ZlKGRhdGFzKSkpOworICAgIFNwZWVjaFJl
Y29nbml0aW9uQWx0ZXJuYXRpdmVEYXRhIGFsdGVybmF0aXZlIHsgIlRlc3QiLCAxLjAgfTsKKyAg
ICBTcGVlY2hSZWNvZ25pdGlvblJlc3VsdERhdGEgZGF0YSB7IHsgV1RGTW92ZShhbHRlcm5hdGl2
ZSkgfSwgdHJ1ZSB9OworICAgIF9kZWxlZ2F0ZUNhbGxiYWNrKFNwZWVjaFJlY29nbml0aW9uVXBk
YXRlOjpjcmVhdGVSZXN1bHQoX2lkZW50aWZpZXIsIHsgV1RGTW92ZShkYXRhKSB9KSk7CiAKICAg
ICBpZiAoIV9kb011bHRpcGxlUmVjb2duaXRpb25zKQogICAgICAgICBbc2VsZiBhYm9ydF07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcApp
bmRleCBlMzU5YTA0M2IyZTNjZjM5ZjljMjZiYzU5ZTk4ZjEwNWUxMzJjMTA1Li44YmNlNjY3MDY2
YTNmNzc2ZjBlYWJhOTY2YjgxYTc0NmE5NzVlMzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKQEAgLTE2NCwxMCArMTY0LDggQEAg
c3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kRnVuYyhjb25zdCBUcmFuc2Zv
cm1PcGVyYXRpb25zJiBmcm9tLCBjb24KICAgICBpZiAoY29udGV4dC5jb21wb3NpdGVPcGVyYXRp
b24gPT0gQ29tcG9zaXRlT3BlcmF0aW9uOjpBZGQpIHsKICAgICAgICAgQVNTRVJUKGNvbnRleHQu
cHJvZ3Jlc3MgPT0gMS4wKTsKICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyByZXN1bHRPcGVy
YXRpb25zOwotICAgICAgICBmb3IgKGF1dG8gb3BlcmF0aW9uIDogZnJvbS5vcGVyYXRpb25zKCkp
Ci0gICAgICAgICAgICByZXN1bHRPcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQob3BlcmF0
aW9uKTsKLSAgICAgICAgZm9yIChhdXRvIG9wZXJhdGlvbiA6IHRvLm9wZXJhdGlvbnMoKSkKLSAg
ICAgICAgICAgIHJlc3VsdE9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChvcGVyYXRpb24p
OworICAgICAgICByZXN1bHRPcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmRWZWN0b3IoZnJv
bS5vcGVyYXRpb25zKCkpOworICAgICAgICByZXN1bHRPcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5h
cHBlbmRWZWN0b3IodG8ub3BlcmF0aW9ucygpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdE9wZXJh
dGlvbnM7CiAgICAgfQogICAgIGF1dG8gYm94U2l6ZSA9IGlzPFJlbmRlckJveD4oY29udGV4dC5j
bGllbnQtPnJlbmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PigqY29udGV4dC5jbGllbnQt
PnJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKS5zaXplKCkgOiBMYXlvdXRTaXplKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vRG9jdW1lbnRUaW1lbGluZXNDb250cm9s
bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lc0NvbnRy
b2xsZXIuY3BwCmluZGV4IGI1ZmQyYWVmMTAwMDEyZGE5YzRiZGIyMWU3YWQwNDFhMzY2NDE2YmYu
LjcwOTQ1M2JjNjYyNTJmOTU5ODI0YmE5NGVjYTdhMzMwMDhjOWNhM2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXIu
Y3BwCkBAIC05OCw5ICs5OCw3IEBAIHZvaWQgRG9jdW1lbnRUaW1lbGluZXNDb250cm9sbGVyOjp1
cGRhdGVBbmltYXRpb25zQW5kU2VuZEV2ZW50cyhSZWR1Y2VkUmVzb2x1dGlvCiAgICAgQVNTRVJU
KCFtX3RpbWVsaW5lcy5oYXNOdWxsUmVmZXJlbmNlcygpKTsKIAogICAgIC8vIFdlIG5lZWQgdG8g
Y29weSBtX3RpbWVsaW5lcyBiZWZvcmUgaXRlcmF0aW5nIG92ZXIgaXRzIG1lbWJlcnMgc2luY2Ug
dGhlIHN0ZXBzIGluIHRoaXMgcHJvY2VkdXJlIG1heSBtdXRhdGUgbV90aW1lbGluZXMuCi0gICAg
VmVjdG9yPFJlZjxEb2N1bWVudFRpbWVsaW5lPj4gcHJvdGVjdGVkVGltZWxpbmVzOwotICAgIGZv
ciAoYXV0byYgdGltZWxpbmUgOiBtX3RpbWVsaW5lcykKLSAgICAgICAgcHJvdGVjdGVkVGltZWxp
bmVzLmFwcGVuZCh0aW1lbGluZSk7CisgICAgYXV0byBwcm90ZWN0ZWRUaW1lbGluZXMgPSBjb3B5
VG9WZWN0b3JPZjxSZWY8RG9jdW1lbnRUaW1lbGluZT4+KG1fdGltZWxpbmVzKTsKIAogICAgIC8v
IFdlIG5lZWQgdG8gZnJlZXplIHRoZSBjdXJyZW50IHRpbWUgZXZlbiBpZiBubyBhbmltYXRpb24g
aXMgcnVubmluZy4KICAgICAvLyBkb2N1bWVudC50aW1lbGluZS5jdXJyZW50VGltZSBtYXkgYmUg
Y2FsbGVkIGZyb20gYSByQUYgY2FsbGJhY2sgYW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9u
L0tleWZyYW1lRWZmZWN0LmNwcAppbmRleCA0NDQ0Y2NkMDg3YWU0ODA0ODBjNTg5ZmY0ZDY4OGUz
ZmM3YzFhMjZhLi4zZDA5MWVlZTUzODc0NDIwM2Y3MzhiODZjMDc2NzY1N2Y0ZWNmMDhkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAKQEAgLTM3NSw4ICsz
NzUsNyBAQCBzdGF0aWMgaW5saW5lIEV4Y2VwdGlvbk9yPHZvaWQ+IHByb2Nlc3NQcm9wZXJ0eUlu
ZGV4ZWRLZXlmcmFtZXMoSlNHbG9iYWxPYmplY3QmCiAgICAgICAgIGNvbXB1dGVNaXNzaW5nS2V5
ZnJhbWVPZmZzZXRzKHByb3BlcnR5S2V5ZnJhbWVzKTsKIAogICAgICAgICAvLyA3LiBBZGQga2V5
ZnJhbWVzIGluIHByb3BlcnR5IGtleWZyYW1lcyB0byBwcm9jZXNzZWQga2V5ZnJhbWVzLgotICAg
ICAgICBmb3IgKGF1dG8mIGtleWZyYW1lIDogcHJvcGVydHlLZXlmcmFtZXMpCi0gICAgICAgICAg
ICBwYXJzZWRLZXlmcmFtZXMuYXBwZW5kKFdURk1vdmUoa2V5ZnJhbWUpKTsKKyAgICAgICAgcGFy
c2VkS2V5ZnJhbWVzLmFwcGVuZFZlY3Rvcihwcm9wZXJ0eUtleWZyYW1lcyk7CiAgICAgfQogCiAg
ICAgLy8gMy4gU29ydCBwcm9jZXNzZWQga2V5ZnJhbWVzIGJ5IHRoZSBjb21wdXRlZCBrZXlmcmFt
ZSBvZmZzZXQgb2YgZWFjaCBrZXlmcmFtZSBpbiBpbmNyZWFzaW5nIG9yZGVyLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uLmNwcApp
bmRleCA1MzQ5ZWYzOGZlNjkwNjRkZDQ1M2ZkNjhkN2RjNmE4ZWU3NzNkOWVjLi5jMDVjZDg5NDE1
ZmY0MTIwNGUzYzNjOGM3NzNmNDhkMTEzNjNjMDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uLmNwcApAQCAtNDYsOCArNDYs
NyBAQCBDb250ZW50RXh0ZW5zaW9uOjpDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgaWRl
bnRpZmllciwgUmVmPENvbXBpbGVkQ29udGVudAogICAgICwgbV9leHRlbnNpb25CYXNlVVJMKFdU
Rk1vdmUoZXh0ZW5zaW9uQmFzZVVSTCkpCiB7CiAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlciBp
bnRlcnByZXRlcihtX2NvbXBpbGVkRXh0ZW5zaW9uLT51cmxGaWx0ZXJzQnl0ZWNvZGUoKSk7Ci0g
ICAgZm9yICh1aW50NjRfdCBhY3Rpb24gOiBpbnRlcnByZXRlci5hY3Rpb25zTWF0Y2hpbmdFdmVy
eXRoaW5nKCkpCi0gICAgICAgIG1fdW5pdmVyc2FsQWN0aW9ucy5hcHBlbmQoYWN0aW9uKTsKKyAg
ICBtX3VuaXZlcnNhbEFjdGlvbnMgPSBjb3B5VG9WZWN0b3IoaW50ZXJwcmV0ZXIuYWN0aW9uc01h
dGNoaW5nRXZlcnl0aGluZygpKTsKIAogICAgIGlmIChzaG91bGRDb21waWxlQ1NTID09IFNob3Vs
ZENvbXBpbGVDU1M6OlllcykKICAgICAgICAgY29tcGlsZUdsb2JhbERpc3BsYXlOb25lU3R5bGVT
aGVldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oCmluZGV4IGJiMTI3M2E1ZmQzZWU4ZTY4
ODBiYTc2N2FmOTI5MTdlYmRkYTc0OGYuLmY5YTc2MDYwNDA4OWIwY2UyZjY5Zjg3Njg2NTRmMTI2
ODIzN2E2N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgKQEAgLTU4LDYgKzU4LDcgQEAg
cHVibGljOgogICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
LmVuZCgpOyB9CiAgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigp
OyB9CiAgICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV92YWx1ZXMuZW5kKCk7IH0KKyAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQogCiAgICAgdm9p
ZCBhcHBlbmQoUmVmPENTU1ZhbHVlPiYmKTsKICAgICB2b2lkIHByZXBlbmQoUmVmPENTU1ZhbHVl
PiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRp
b25Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2Rl
LmNwcAppbmRleCA2YWI1Y2I2NzRkNDE1M2Q4MjI1MmYyNTg3ZWU0NmZjZjVhYWM4YzRhLi43OWYy
YTg4MjYwY2VhZWYwZDU4MDE1NzY2MTM5YzA3NTc2NjdjMDBkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwCkBAIC02MjAsMTQgKzYyMCwx
MSBAQCB2b2lkIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpob2lzdENoaWxkcmVuV2l0aE9wZXJhdG9y
KENhbGNPcGVyYXRvciBvcCkKIAogICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
Pj4gbmV3Q2hpbGRyZW47CiAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pIHsKLSAg
ICAgICAgaWYgKGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZCkgJiYgZG93bmNhc3Q8Q1NT
Q2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKS5jYWxjT3BlcmF0b3IoKSA9PSBvcCkgewot
ICAgICAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9k
ZT4oY2hpbGQuZ2V0KCkpLmNoaWxkcmVuKCk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNoaWxk
VG9Nb3ZlIDogY2hpbGRyZW4pCi0gICAgICAgICAgICAgICAgbmV3Q2hpbGRyZW4uYXBwZW5kKFdU
Rk1vdmUoY2hpbGRUb01vdmUpKTsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIGlmIChpczxDU1ND
YWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQpICYmIGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2Rl
PihjaGlsZC5nZXQoKSkuY2FsY09wZXJhdG9yKCkgPT0gb3ApCisgICAgICAgICAgICBuZXdDaGls
ZHJlbi5hcHBlbmRWZWN0b3IoZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdl
dCgpKS5jaGlsZHJlbigpKTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgbmV3Q2hpbGRyZW4u
YXBwZW5kKFdURk1vdmUoY2hpbGQpKTsKICAgICB9Ci0gICAgCiAgICAgbmV3Q2hpbGRyZW4uc2hy
aW5rVG9GaXQoKTsKICAgICBtX2NoaWxkcmVuID0gV1RGTW92ZShuZXdDaGlsZHJlbik7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NU3RyaW5nTGlzdC5oIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RPTVN0cmluZ0xpc3QuaAppbmRleCA2OWNiMmQ3ZjkzMmUwMGEyNjVlMDhkOGZm
M2IxY2I1MGMxMjc3Y2U1Li4zMTcyYjMzNmY1YjUyNDVlNzEwNWI5MDVmNzU2NzRmYzE3N2MxMDVh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NU3RyaW5nTGlzdC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdMaXN0LmgKQEAgLTQwLDkgKzQwLDE0IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRE9NU3RyaW5nTGlzdCk7CiAgICAgfQog
CisgICAgc3RhdGljIFJlZjxET01TdHJpbmdMaXN0PiBjcmVhdGUoVmVjdG9yPFN0cmluZz4mJiBz
dHJpbmdzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRE9NU3RyaW5nTGlz
dChXVEZNb3ZlKHN0cmluZ3MpKSk7CisgICAgfQorCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJpbmdzLmlzRW1wdHkoKTsgfQogICAgIHZvaWQgY2xlYXIoKSB7IG1fc3Ry
aW5ncy5jbGVhcigpOyB9Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBzdHJpbmcpIHsg
bV9zdHJpbmdzLmFwcGVuZChzdHJpbmcpOyB9CisgICAgdm9pZCBhcHBlbmQoU3RyaW5nJiYgc3Ry
aW5nKSB7IG1fc3RyaW5ncy5hcHBlbmQoV1RGTW92ZShzdHJpbmcpKTsgfQogICAgIHZvaWQgc29y
dCgpOwogCiAgICAgLy8gSW1wbGVtZW50cyB0aGUgSURMLgpAQCAtNTMsNyArNTgsMTAgQEAgcHVi
bGljOgogICAgIG9wZXJhdG9yIGNvbnN0IFZlY3RvcjxTdHJpbmc+JigpIGNvbnN0IHsgcmV0dXJu
IG1fc3RyaW5nczsgfQogCiBwcml2YXRlOgotICAgIERPTVN0cmluZ0xpc3QoKSB7IH0KKyAgICBE
T01TdHJpbmdMaXN0KCkgPSBkZWZhdWx0OworICAgIGV4cGxpY2l0IERPTVN0cmluZ0xpc3QoVmVj
dG9yPFN0cmluZz4mJiBzdHJpbmdzKQorICAgICAgICA6IG1fc3RyaW5ncyhXVEZNb3ZlKHN0cmlu
Z3MpKQorICAgIHsgfQogCiAgICAgVmVjdG9yPFN0cmluZz4gbV9zdHJpbmdzOwogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFBhdGguY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0V2ZW50UGF0aC5jcHAKaW5kZXggNDZmYjY0NWUwNTMzNzU4MWY5ZmEzNDUyMzAzYTJmZTM4
MGY0NmMwNi4uZWNiY2MwMGYzNmYwNzZlMzIwYjZhZDE2YWQxZDlhMGJmMDM4ZTI3OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50UGF0aC5jcHAKQEAgLTI3NCwxMSArMjc0LDExIEBAIFZlY3RvcjxFdmVudFRh
cmdldCo+IEV2ZW50UGF0aDo6Y29tcHV0ZVBhdGhVbmNsb3NlZFRvVGFyZ2V0KGNvbnN0IEV2ZW50
VGFyZ2V0JiB0CiAKIEV2ZW50UGF0aDo6RXZlbnRQYXRoKGNvbnN0IFZlY3RvcjxFdmVudFRhcmdl
dCo+JiB0YXJnZXRzKQogewotICAgIGZvciAoYXV0byogdGFyZ2V0IDogdGFyZ2V0cykgeworICAg
IG1fcGF0aCA9IHRhcmdldHMubWFwKFsmXShhdXRvKiB0YXJnZXQpIHsKICAgICAgICAgQVNTRVJU
KHRhcmdldCk7CiAgICAgICAgIEFTU0VSVCghaXM8Tm9kZT4odGFyZ2V0KSk7Ci0gICAgICAgIG1f
cGF0aC5hcHBlbmQoRXZlbnRDb250ZXh0IHsgRXZlbnRDb250ZXh0OjpUeXBlOjpOb3JtYWwsIG51
bGxwdHIsIHRhcmdldCwgKnRhcmdldHMuYmVnaW4oKSwgMCB9KTsKLSAgICB9CisgICAgICAgIHJl
dHVybiBFdmVudENvbnRleHQgeyBFdmVudENvbnRleHQ6OlR5cGU6Ok5vcm1hbCwgbnVsbHB0ciwg
dGFyZ2V0LCAqdGFyZ2V0cy5iZWdpbigpLCAwIH07CisgICAgfSk7CiB9CiAKIHN0YXRpYyBOb2Rl
KiBtb3ZlT3V0T2ZBbGxTaGFkb3dSb290cyhOb2RlJiBzdGFydGluZ05vZGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRnVsbHNjcmVlbk1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0Z1bGxzY3JlZW5NYW5hZ2VyLmNwcAppbmRleCBlY2U0OGU0MjY3OTcwOTVkYTcwOWEw
NGRhNjg2YTRmZTBiYzI5MjhjLi4wZTliYjk0NDFjMzdkZjUzZDQ3MTgzOGNjYzFhYWRjYjYzNzc4
YmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRnVsbHNjcmVlbk1hbmFnZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9GdWxsc2NyZWVuTWFuYWdlci5jcHAKQEAgLTI2NSw5
ICsyNjUsOCBAQCB2b2lkIEZ1bGxzY3JlZW5NYW5hZ2VyOjpjYW5jZWxGdWxsc2NyZWVuKCkKIAog
ICAgIC8vIFRvIGFjaGlldmUgdGhhdCBhaW0sIHJlbW92ZSBhbGwgdGhlIGVsZW1lbnRzIGZyb20g
dGhlIHRvcCBkb2N1bWVudCdzIHN0YWNrIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IGJlZm9yZQogICAg
IC8vIGNhbGxpbmcgd2Via2l0RXhpdEZ1bGxzY3JlZW4oKToKLSAgICBWZWN0b3I8UmVmUHRyPEVs
ZW1lbnQ+PiByZXBsYWNlbWVudEZ1bGxzY3JlZW5FbGVtZW50U3RhY2s7Ci0gICAgcmVwbGFjZW1l
bnRGdWxsc2NyZWVuRWxlbWVudFN0YWNrLmFwcGVuZCh0b3BEb2N1bWVudC5mdWxsc2NyZWVuTWFu
YWdlcigpLmZ1bGxzY3JlZW5FbGVtZW50KCkpOwotICAgIHRvcERvY3VtZW50LmZ1bGxzY3JlZW5N
YW5hZ2VyKCkubV9mdWxsc2NyZWVuRWxlbWVudFN0YWNrLnN3YXAocmVwbGFjZW1lbnRGdWxsc2Ny
ZWVuRWxlbWVudFN0YWNrKTsKKyAgICBSZWZQdHIgZnVsbHNjcmVuRWxlbWVudCA9IHRvcERvY3Vt
ZW50LmZ1bGxzY3JlZW5NYW5hZ2VyKCkuZnVsbHNjcmVlbkVsZW1lbnQoKTsKKyAgICB0b3BEb2N1
bWVudC5mdWxsc2NyZWVuTWFuYWdlcigpLm1fZnVsbHNjcmVlbkVsZW1lbnRTdGFjayA9IHsgV1RG
TW92ZShmdWxsc2NyZW5FbGVtZW50KSB9OwogCiAgICAgdG9wRG9jdW1lbnQuZnVsbHNjcmVlbk1h
bmFnZXIoKS5leGl0RnVsbHNjcmVlbigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0xvYWRhYmxlU2NyaXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJsZVNjcmlw
dC5jcHAKaW5kZXggMWJkZGUxZWI1ZDZhMDdmMTE3Mzg5Yjk5Yzc1ZWNiMDFiNjBmODgwOS4uNDFm
NDNjZTY2ODUwMzBlZDlkMzlkZjA1YjlmYzkyM2IxMjM5NWRlZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0xvYWRhYmxlU2NyaXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
TG9hZGFibGVTY3JpcHQuY3BwCkBAIC01MSwxMiArNTEsOCBAQCB2b2lkIExvYWRhYmxlU2NyaXB0
OjpyZW1vdmVDbGllbnQoTG9hZGFibGVTY3JpcHRDbGllbnQmIGNsaWVudCkKIAogdm9pZCBMb2Fk
YWJsZVNjcmlwdDo6bm90aWZ5Q2xpZW50RmluaXNoZWQoKQogewotICAgIFJlZlB0cjxMb2FkYWJs
ZVNjcmlwdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLQotICAgIFZlY3RvcjxMb2FkYWJsZVNjcmlw
dENsaWVudCo+IHZlY3RvcjsKLSAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX2NsaWVudHMpCi0gICAg
ICAgIHZlY3Rvci5hcHBlbmQocGFpci5rZXkpOwotICAgIGZvciAoYXV0byYgY2xpZW50IDogdmVj
dG9yKQorICAgIFJlZiBwcm90ZWN0ZWRUaGlzIHsgKnRoaXMgfTsKKyAgICBmb3IgKGF1dG8mIGNs
aWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMudmFsdWVzKCkpKQogICAgICAgICBjbGllbnQt
Pm5vdGlmeUZpbmlzaGVkKCp0aGlzKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRv
bkdyb3Vwcy5jcHAKaW5kZXggNTBmNDYzMGY4OWVjODk1ZGYxY2U1YWI4ZWQ1ODE4OWI3YWZiZjY2
Mi4uMTIyNjNlMjU2ZWU1NmE0NTJjMzIyODEyNWNhZGQ1ZjE3MGY0NWYwZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwCkBAIC01OSw5ICs1OSw3IEBAIGlubGluZSBi
b29sIFJhZGlvQnV0dG9uR3JvdXA6OmlzVmFsaWQoKSBjb25zdAogCiBWZWN0b3I8UmVmPEhUTUxJ
bnB1dEVsZW1lbnQ+PiBSYWRpb0J1dHRvbkdyb3VwOjptZW1iZXJzKCkgY29uc3QKIHsKLSAgICBW
ZWN0b3I8UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PiBzb3J0ZWRNZW1iZXJzOwotICAgIGZvciAoYXV0
byYgbWVtYmVyIDogbV9tZW1iZXJzKQotICAgICAgICBzb3J0ZWRNZW1iZXJzLmFwcGVuZChtZW1i
ZXIpOworICAgIGF1dG8gc29ydGVkTWVtYmVycyA9IGNvcHlUb1ZlY3Rvck9mPFJlZjxIVE1MSW5w
dXRFbGVtZW50Pj4obV9tZW1iZXJzKTsKICAgICBzdGQ6OnNvcnQoc29ydGVkTWVtYmVycy5iZWdp
bigpLCBzb3J0ZWRNZW1iZXJzLmVuZCgpLCBbXShhdXRvJiBhLCBhdXRvJiBiKSB7CiAgICAgICAg
IHJldHVybiBpc19sdCh0cmVlT3JkZXI8Q29tcG9zZWRUcmVlPihhLCBiKSk7CiAgICAgfSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0RpcmVjdG9yeUZpbGVMaXN0Q3JlYXRvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RpcmVjdG9yeUZpbGVMaXN0Q3JlYXRvci5jcHAKaW5k
ZXggOWQzZGExODUzYzNhNjMyMGZlYjMxOTc1MTYyZTQzNWFlOTNmZmRkMS4uOTg1ZjdhNjJmMGMx
ZjM5NzU1ODJlYjNmOWI5ODk3NTE1NjE1NjY3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9EaXJlY3RvcnlGaWxlTGlzdENyZWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvRGlyZWN0b3J5RmlsZUxpc3RDcmVhdG9yLmNwcApAQCAtODYsMTMgKzg2LDExIEBAIHN0YXRp
YyBWZWN0b3I8RmlsZUluZm9ybWF0aW9uPiBnYXRoZXJGaWxlSW5mb3JtYXRpb24oY29uc3QgVmVj
dG9yPEZpbGVDaG9vc2VyRmlsCiBzdGF0aWMgUmVmPEZpbGVMaXN0PiB0b0ZpbGVMaXN0KERvY3Vt
ZW50KiBkb2N1bWVudCwgY29uc3QgVmVjdG9yPEZpbGVJbmZvcm1hdGlvbj4mIGZpbGVzKQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgVmVjdG9yPFJlZjxGaWxlPj4gZmlsZU9i
amVjdHM7Ci0gICAgZm9yIChhdXRvJiBmaWxlIDogZmlsZXMpIHsKKyAgICBhdXRvIGZpbGVPYmpl
Y3RzID0gZmlsZXMubWFwKFtkb2N1bWVudF0oYXV0byYgZmlsZSkgewogICAgICAgICBpZiAoZmls
ZS5yZWxhdGl2ZVBhdGguaXNOdWxsKCkpCi0gICAgICAgICAgICBmaWxlT2JqZWN0cy5hcHBlbmQo
RmlsZTo6Y3JlYXRlKGRvY3VtZW50LCBmaWxlLnBhdGgsIHsgfSwgZmlsZS5kaXNwbGF5TmFtZSkp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmaWxlT2JqZWN0cy5hcHBlbmQoRmlsZTo6Y3Jl
YXRlV2l0aFJlbGF0aXZlUGF0aChkb2N1bWVudCwgZmlsZS5wYXRoLCBmaWxlLnJlbGF0aXZlUGF0
aCkpOwotICAgIH0KKyAgICAgICAgICAgIHJldHVybiBGaWxlOjpjcmVhdGUoZG9jdW1lbnQsIGZp
bGUucGF0aCwgeyB9LCBmaWxlLmRpc3BsYXlOYW1lKTsKKyAgICAgICAgcmV0dXJuIEZpbGU6OmNy
ZWF0ZVdpdGhSZWxhdGl2ZVBhdGgoZG9jdW1lbnQsIGZpbGUucGF0aCwgZmlsZS5yZWxhdGl2ZVBh
dGgpOworICAgIH0pOwogICAgIHJldHVybiBGaWxlTGlzdDo6Y3JlYXRlKFdURk1vdmUoZmlsZU9i
amVjdHMpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcApp
bmRleCBjNGIwODRkMmRlNzFmZDMxOWZlOGMwNjliNDVmZjdmY2NjZWRlNWVjLi43MmFmZTA0ZTA3
Zjg5YzhjMjRhZjNmOGI4Y2FkMzhjZTI5NmE4ZDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTZWxlY3RFbGVtZW50LmNwcApAQCAtNjM0LDkgKzYzNCw5IEBAIHZvaWQgSFRNTFNlbGVjdEVs
ZW1lbnQ6OnNhdmVMYXN0U2VsZWN0aW9uKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uLmNsZWFyKCk7Ci0gICAgZm9yIChhdXRvJiBlbGVtZW50
IDogbGlzdEl0ZW1zKCkpCi0gICAgICAgIG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uLmFwcGVuZChp
czxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVt
ZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKSk7CisgICAgbV9sYXN0T25DaGFuZ2VTZWxlY3Rpb24g
PSBsaXN0SXRlbXMoKS5tYXAoW10oYXV0byYgZWxlbWVudCkgeworICAgICAgICByZXR1cm4gaXM8
SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVu
dD4oKmVsZW1lbnQpLnNlbGVjdGVkKCk7CisgICAgfSk7CiB9CiAKIHZvaWQgSFRNTFNlbGVjdEVs
ZW1lbnQ6OnNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KGludCBpbmRleCkKQEAgLTY0NSwx
MCArNjQ1LDkgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0QWN0aXZlU2VsZWN0aW9uQW5j
aG9ySW5kZXgoaW50IGluZGV4KQogCiAgICAgLy8gQ2FjaGUgdGhlIHNlbGVjdGlvbiBzdGF0ZSBz
byB3ZSBjYW4gcmVzdG9yZSB0aGUgb2xkIHNlbGVjdGlvbiBhcyB0aGUgbmV3CiAgICAgLy8gc2Vs
ZWN0aW9uIHBpdm90cyBhcm91bmQgdGhpcyBhbmNob3IgaW5kZXguCi0gICAgbV9jYWNoZWRTdGF0
ZUZvckFjdGl2ZVNlbGVjdGlvbi5jbGVhcigpOwotCi0gICAgZm9yIChhdXRvJiBlbGVtZW50IDog
bGlzdEl0ZW1zKCkpCi0gICAgICAgIG1fY2FjaGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rpb24uYXBw
ZW5kKGlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlv
bkVsZW1lbnQ+KCplbGVtZW50KS5zZWxlY3RlZCgpKTsKKyAgICBtX2NhY2hlZFN0YXRlRm9yQWN0
aXZlU2VsZWN0aW9uID0gbGlzdEl0ZW1zKCkubWFwKFtdKGF1dG8mIGVsZW1lbnQpIHsKKyAgICAg
ICAgcmV0dXJuIGlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRN
TE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5zZWxlY3RlZCgpOworICAgIH0pOwogfQogCiB2b2lk
IEhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3Rpb25FbmRJbmRleChpbnQgaW5kZXgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCmluZGV4IDA1YjI3Mzc5ZjJkOTIxOTQ0ODkz
MmM0NmFiMzNiMmVmMDMxYWZjNmEuLjU5YmZjNmUwZjFlNTkwNDNkY2M1YmJkYTJkMjJhYWUzNjVh
NjEzMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCkBAIC0xMTIsMTAgKzExMiw5
IEBAIHZvaWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwKIAogVmVjdG9yPHN0ZDo6b3B0aW9uYWw8SW1hZ2VC
aXRtYXBCYWNraW5nPj4gSW1hZ2VCaXRtYXA6OmRldGFjaEJpdG1hcHMoVmVjdG9yPFJlZlB0cjxJ
bWFnZUJpdG1hcD4+JiYgYml0bWFwcykKIHsKLSAgICBWZWN0b3I8c3RkOjpvcHRpb25hbDxJbWFn
ZUJpdG1hcEJhY2tpbmc+PiBidWZmZXJzOwotICAgIGZvciAoYXV0byYgYml0bWFwIDogYml0bWFw
cykKLSAgICAgICAgYnVmZmVycy5hcHBlbmQoYml0bWFwLT50YWtlSW1hZ2VCaXRtYXBCYWNraW5n
KCkpOwotICAgIHJldHVybiBidWZmZXJzOworICAgIHJldHVybiBXVEY6Om1hcChXVEZNb3ZlKGJp
dG1hcHMpLCBbXShhdXRvJiYgYml0bWFwKSB7CisgICAgICAgIHJldHVybiBiaXRtYXAtPnRha2VJ
bWFnZUJpdG1hcEJhY2tpbmcoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBJbWFnZUJpdG1hcDo6Y3Jl
YXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LCBJbWFnZUJpdG1hcDo6U291cmNlJiYgc291cmNlLCBJbWFnZUJpdG1hcE9wdGlvbnMmJiBvcHRp
b25zLCBpbnQgc3gsIGludCBzeSwgaW50IHN3LCBpbnQgc2gsIEltYWdlQml0bWFwOjpQcm9taXNl
JiYgcHJvbWlzZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKaW5kZXggNjExNDYwMjc3ZjY2NzlhNDkxZTBmOTgz
MTc3OTczMDA3ZWJiZGRjNi4uZjczMzY0ZjM4NjBjMjZiOTM2NjE4YzRmN2UxYTE3ODI1ZThkNTAx
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5jcHAKQEAgLTMwMjEsOSArMzAyMSw4IEBAIHN0ZDo6b3B0aW9uYWw8
VmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+PiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpn
ZXRBdHRhY2hlCiAgICAgfTsKICAgICBWZWN0b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4gc2hhZGVy
T2JqZWN0czsKICAgICBmb3IgKGF1dG8gc2hhZGVyVHlwZSA6IHNoYWRlclR5cGVzKSB7Ci0gICAg
ICAgIFJlZlB0cjxXZWJHTFNoYWRlcj4gc2hhZGVyID0gcHJvZ3JhbS5nZXRBdHRhY2hlZFNoYWRl
cihzaGFkZXJUeXBlKTsKLSAgICAgICAgaWYgKHNoYWRlcikKLSAgICAgICAgICAgIHNoYWRlck9i
amVjdHMuYXBwZW5kKHNoYWRlcik7CisgICAgICAgIGlmIChSZWZQdHIgc2hhZGVyID0gcHJvZ3Jh
bS5nZXRBdHRhY2hlZFNoYWRlcihzaGFkZXJUeXBlKSkKKyAgICAgICAgICAgIHNoYWRlck9iamVj
dHMuYXBwZW5kKFdURk1vdmUoc2hhZGVyKSk7CiAgICAgfQogICAgIHJldHVybiBzaGFkZXJPYmpl
Y3RzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFD
aGFyc2V0UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hh
cnNldFBhcnNlci5jcHAKaW5kZXggOGFjYjY4YWY0NTUxYTM4Yjc5OWM3MTNhYTc1ZGMwZjc5MTkw
MDRiZS4uMGE1ZWQ3OGY0NThmOTliNmJjN2ZjMzcxZGY5NGNmZTkyNWE0ZDQ4MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3Bw
CkBAIC04NSwxMiArODUsMTEgQEAgc3RhdGljIFN0cmluZ1ZpZXcgZXh0cmFjdENoYXJzZXQoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKIAogYm9vbCBIVE1MTWV0YUNoYXJzZXRQYXJzZXI6OnByb2Nlc3NN
ZXRhKEhUTUxUb2tlbiYgdG9rZW4pCiB7Ci0gICAgQXR0cmlidXRlTGlzdCBhdHRyaWJ1dGVzOwot
ICAgIGZvciAoYXV0byYgYXR0cmlidXRlIDogdG9rZW4uYXR0cmlidXRlcygpKSB7CisgICAgYXV0
byBhdHRyaWJ1dGVzID0gdG9rZW4uYXR0cmlidXRlcygpLm1hcChbXShhdXRvJiBhdHRyaWJ1dGUp
IHsKICAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUgPSBTdHJpbmdJbXBsOjpjcmVhdGU4Qml0
SWZQb3NzaWJsZShhdHRyaWJ1dGUubmFtZSk7CiAgICAgICAgIFN0cmluZyBhdHRyaWJ1dGVWYWx1
ZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZThCaXRJZlBvc3NpYmxlKGF0dHJpYnV0ZS52YWx1ZSk7Ci0g
ICAgICAgIGF0dHJpYnV0ZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGF0dHJpYnV0ZU5hbWUsIGF0
dHJpYnV0ZVZhbHVlKSk7Ci0gICAgfQorICAgICAgICByZXR1cm4gc3RkOjpwYWlyIHsgV1RGTW92
ZShhdHRyaWJ1dGVOYW1lKSwgV1RGTW92ZShhdHRyaWJ1dGVWYWx1ZSkgfTsKKyAgICB9KTsKIAog
ICAgIG1fZW5jb2RpbmcgPSBlbmNvZGluZ0Zyb21NZXRhQXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsK
ICAgICByZXR1cm4gbV9lbmNvZGluZy5pc1ZhbGlkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAppbmRleCA2YjcxYmVmODFhN2UyODQ3MWVlZmQ3
YzUzMTUyYThhMGE4MmQyZGI1Li5hMWYxNjdjYjA4M2M5OTg0MzYxODM0MTE4MDI5ZjI4NWU0MWMw
MDA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxk
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5j
cHAKQEAgLTIyMDAsMTEgKzIyMDAsMTAgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3ND
aGFyYWN0ZXIoQXRvbUhUTUxUb2tlbiYmIHRva2VuKQogLy8gRnJvbSB0aGUgc3RyaW5nIDQwODk5
NjEwMTAsIGNyZWF0ZXMgYSBsaW5rIG9mIHRoZSBmb3JtIDxhIGhyZWY9InRlbDo0MDg5OTYxMDEw
Ij40MDg5OTYxMDEwPC9hPiBhbmQgaW5zZXJ0cyBpdC4KIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpp
bnNlcnRQaG9uZU51bWJlckxpbmsoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgVmVjdG9y
PEF0dHJpYnV0ZT4gYXR0cmlidXRlczsKLSAgICBhdHRyaWJ1dGVzLmFwcGVuZChBdHRyaWJ1dGUo
SFRNTE5hbWVzOjpocmVmQXR0ciwgbWFrZVN0cmluZygidGVsOiJfcywgc3RyaW5nKSkpOworICAg
IEF0dHJpYnV0ZSBhdHRyaWJ1dGUoSFRNTE5hbWVzOjpocmVmQXR0ciwgbWFrZVN0cmluZygidGVs
OiJfcywgc3RyaW5nKSk7CiAKICAgICBjb25zdCBBdG9tU3RyaW5nJiBhVGFnTG9jYWxOYW1lID0g
YVRhZy0+bG9jYWxOYW1lKCk7Ci0gICAgQXRvbUhUTUxUb2tlbiBhU3RhcnRUb2tlbihIVE1MVG9r
ZW46OlN0YXJ0VGFnLCBhVGFnTG9jYWxOYW1lLCBXVEZNb3ZlKGF0dHJpYnV0ZXMpKTsKKyAgICBB
dG9tSFRNTFRva2VuIGFTdGFydFRva2VuKEhUTUxUb2tlbjo6U3RhcnRUYWcsIGFUYWdMb2NhbE5h
bWUsIHsgV1RGTW92ZShhdHRyaWJ1dGUpIH0pOwogICAgIEF0b21IVE1MVG9rZW4gYUVuZFRva2Vu
KEhUTUxUb2tlbjo6RW5kVGFnLCBhVGFnTG9jYWxOYW1lKTsKIAogICAgIHByb2Nlc3NTdGFydFRh
ZyhXVEZNb3ZlKGFTdGFydFRva2VuKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvVGV4dERvY3VtZW50UGFyc2VyLmNwcAppbmRleCA0ZGE5NTlmNDBmZTllYTMzNzQ3Y2QyMzg4
Y2ViNzlmNmQ3MmRiN2VkLi40NzA2ZjI2ZTg0NDA5ZWU4MTNjZDEzYmM1ZjRlMGFjY2Y2NzRhODY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJz
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNl
ci5jcHAKQEAgLTUxLDkgKzUxLDggQEAgdm9pZCBUZXh0RG9jdW1lbnRQYXJzZXI6Omluc2VydEZh
a2VQcmVFbGVtZW50KCkKICAgICAvLyBXZSBjcmVhdGUgYSBmYWtlIHRva2VuIGFuZCBnaXZlIGl0
IHRvIHRoZSB0cmVlIGJ1aWxkZXIgcmF0aGVyIHRoYW4KICAgICAvLyBzZW5kaW5nIGZha2UgYnl0
ZXMgdGhyb3VnaCB0aGUgZnJvbnQtZW5kIG9mIHRoZSBwYXJzZXIgdG8gYXZvaWQKICAgICAvLyBk
aXN0cnViaW5nIHRoZSBsaW5lL2NvbHVtbiBudW1iZXIgY2FsY3VsYXRpb25zLgotICAgIFZlY3Rv
cjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZXM7Ci0gICAgYXR0cmlidXRlcy5hcHBlbmQoQXR0cmlidXRl
KHN0eWxlQXR0ciwgIndvcmQtd3JhcDogYnJlYWstd29yZDsgd2hpdGUtc3BhY2U6IHByZS13cmFw
OyIpKTsKLSAgICBBdG9tSFRNTFRva2VuIGZha2VQcmUoSFRNTFRva2VuOjpTdGFydFRhZywgcHJl
VGFnLT5sb2NhbE5hbWUoKSwgV1RGTW92ZShhdHRyaWJ1dGVzKSk7CisgICAgQXR0cmlidXRlIGF0
dHJpYnV0ZShzdHlsZUF0dHIsICJ3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IHdoaXRlLXNwYWNlOiBw
cmUtd3JhcDsiKTsKKyAgICBBdG9tSFRNTFRva2VuIGZha2VQcmUoSFRNTFRva2VuOjpTdGFydFRh
ZywgcHJlVGFnLT5sb2NhbE5hbWUoKSwgeyBXVEZNb3ZlKGF0dHJpYnV0ZSkgfSk7CiAgICAgdHJl
ZUJ1aWxkZXIoKS5jb25zdHJ1Y3RUcmVlKFdURk1vdmUoZmFrZVByZSkpOwogCiAgICAgLy8gTm9y
bWFsbHkgd2Ugd291bGQgc2tpcCB0aGUgZmlyc3QgXG4gYWZ0ZXIgYSA8cHJlPiBlbGVtZW50LCBi
dXQgd2UgZG9uJ3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Db250ZW50Rmls
dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Db250ZW50RmlsdGVyLmNwcAppbmRleCA0
MTllMzJmMzk4MmY2NzJhZjY2MzBmYTVlMGM2MjVjNWNiN2IyMjNmLi40ZTM1NDQ1NGFhYmEzNGU0
ZmJlYTQxNWQ0MWZmOGU5MmJmNDQxNDVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvQ29udGVudEZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0NvbnRlbnRG
aWx0ZXIuY3BwCkBAIC02NywxMSArNjcsOSBAQCBWZWN0b3I8Q29udGVudEZpbHRlcjo6VHlwZT4m
IENvbnRlbnRGaWx0ZXI6OnR5cGVzKCkKIAogc3RkOjp1bmlxdWVfcHRyPENvbnRlbnRGaWx0ZXI+
IENvbnRlbnRGaWx0ZXI6OmNyZWF0ZShDb250ZW50RmlsdGVyQ2xpZW50JiBjbGllbnQpCiB7Ci0g
ICAgQ29udGFpbmVyIGZpbHRlcnM7Ci0gICAgZm9yIChhdXRvJiB0eXBlIDogdHlwZXMoKSkgewot
ICAgICAgICBhdXRvIGZpbHRlciA9IHR5cGUuY3JlYXRlKCk7Ci0gICAgICAgIGZpbHRlcnMuYXBw
ZW5kKFdURk1vdmUoZmlsdGVyKSk7Ci0gICAgfQorICAgIGF1dG8gZmlsdGVycyA9IHR5cGVzKCku
bWFwKFtdKGF1dG8mIHR5cGUpIHsKKyAgICAgICAgcmV0dXJuIHR5cGUuY3JlYXRlKCk7CisgICAg
fSk7CiAKICAgICBpZiAoZmlsdGVycy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGVNYW5pZmVzdFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZU1hbmlmZXN0UGFyc2VyLmNwcAppbmRleCBiODdkZDgzNTA2MDdjMjRi
ZTI1NmUzNDQxYmVkMmQzNzY3ZTA5NTUyLi40YTExNDQyNWUxMTZkMmM0MmQxOTAzOTIzZWRmODg2
MzgzZDhmMDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZU1hbmlmZXN0UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZU1hbmlmZXN0UGFyc2VyLmNwcApAQCAtMTgwLDcg
KzE4MCw3IEBAIHN0ZDo6b3B0aW9uYWw8QXBwbGljYXRpb25DYWNoZU1hbmlmZXN0PiBwYXJzZUFw
cGxpY2F0aW9uQ2FjaGVNYW5pZmVzdChjb25zdCBVUkwmCiAgICAgICAgICAgICAgICAgaWYgKCFl
cXVhbElnbm9yaW5nQVNDSUlDYXNlKHVybC5wcm90b2NvbCgpLCBtYW5pZmVzdFVSTC5wcm90b2Nv
bCgpKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgICAgICBt
YW5pZmVzdC5vbmxpbmVBbGxvd2VkVVJMcy5hcHBlbmQodXJsKTsKKyAgICAgICAgICAgICAgICBt
YW5pZmVzdC5vbmxpbmVBbGxvd2VkVVJMcy5hcHBlbmQoV1RGTW92ZSh1cmwpKTsKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1Jlc2l6ZU9ic2VydmVyLmNwcAppbmRleCA5M2RhMWE0NTYwNGU0NTJhNzc1OTNlMThk
MWY0NzMzNjM0OTk0MzY3Li40ZmZkNjlkMDM0NDEwOWI0N2FmYjVlNTE5N2FhM2ZkZmQ0OTdkZWQ2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6ZU9ic2VydmVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6ZU9ic2VydmVyLmNwcApAQCAtMTI1LDExICsxMjUs
MTAgQEAgc2l6ZV90IFJlc2l6ZU9ic2VydmVyOjpnYXRoZXJPYnNlcnZhdGlvbnMoc2l6ZV90IGRl
ZXBlclRoYW4pCiAKIHZvaWQgUmVzaXplT2JzZXJ2ZXI6OmRlbGl2ZXJPYnNlcnZhdGlvbnMoKQog
ewotICAgIFZlY3RvcjxSZWY8UmVzaXplT2JzZXJ2ZXJFbnRyeT4+IGVudHJpZXM7Ci0gICAgZm9y
IChjb25zdCBhdXRvJiBvYnNlcnZhdGlvbiA6IG1fYWN0aXZlT2JzZXJ2YXRpb25zKSB7CisgICAg
YXV0byBlbnRyaWVzID0gbV9hY3RpdmVPYnNlcnZhdGlvbnMubWFwKFtdKGF1dG8mIG9ic2VydmF0
aW9uKSB7CiAgICAgICAgIEFTU0VSVChvYnNlcnZhdGlvbi0+dGFyZ2V0KCkpOwotICAgICAgICBl
bnRyaWVzLmFwcGVuZChSZXNpemVPYnNlcnZlckVudHJ5OjpjcmVhdGUob2JzZXJ2YXRpb24tPnRh
cmdldCgpLCBvYnNlcnZhdGlvbi0+Y29tcHV0ZUNvbnRlbnRSZWN0KCksIG9ic2VydmF0aW9uLT5i
b3JkZXJCb3hTaXplKCksIG9ic2VydmF0aW9uLT5jb250ZW50Qm94U2l6ZSgpKSk7Ci0gICAgfQor
ICAgICAgICByZXR1cm4gUmVzaXplT2JzZXJ2ZXJFbnRyeTo6Y3JlYXRlKG9ic2VydmF0aW9uLT50
YXJnZXQoKSwgb2JzZXJ2YXRpb24tPmNvbXB1dGVDb250ZW50UmVjdCgpLCBvYnNlcnZhdGlvbi0+
Ym9yZGVyQm94U2l6ZSgpLCBvYnNlcnZhdGlvbi0+Y29udGVudEJveFNpemUoKSk7CisgICAgfSk7
CiAgICAgbV9hY3RpdmVPYnNlcnZhdGlvbnMuY2xlYXIoKTsKICAgICBhdXRvIGFjdGl2ZU9ic2Vy
dmF0aW9uVGFyZ2V0cyA9IHN0ZDo6ZXhjaGFuZ2UobV9hY3RpdmVPYnNlcnZhdGlvblRhcmdldHMs
IHsgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCmluZGV4IDM4N2Q1MTlh
ZTUxNzJkNjgwYTViMjg4NDNiYmU4ZmY5OTZjNmIzMzUuLmNhNWZiZTYzY2NmNmNkYjk4YWY4NWVk
NTkyOWExMzAzOGQ2OWJmYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dElu
ZGljYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcApA
QCAtMzYxLDE3ICszNjEsMTYgQEAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZUluZGljYXRvcihUZXh0
SW5kaWNhdG9yRGF0YSYgZGF0YSwgRnJhbWUmIGZyYW1lLCBjb25zdCBTaW0KICAgICAgICAgdGV4
dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcy51bml0ZSh0ZXh0UmVjdEluUm9vdFZp
ZXdDb29yZGluYXRlcyk7CiAgICAgfQogCi0gICAgVmVjdG9yPEZsb2F0UmVjdD4gdGV4dFJlY3Rz
SW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlczsKLSAgICBmb3IgKGF1dG8gcmVjdCA6IHRleHRSZWN0
c0luUm9vdFZpZXdDb29yZGluYXRlcykgeworICAgIGF1dG8gdGV4dFJlY3RzSW5Cb3VuZGluZ1Jl
Y3RDb29yZGluYXRlcyA9IHRleHRSZWN0c0luUm9vdFZpZXdDb29yZGluYXRlcy5tYXAoWyZdKGF1
dG8gcmVjdCkgewogICAgICAgICByZWN0Lm1vdmVCeSgtdGV4dEJvdW5kaW5nUmVjdEluUm9vdFZp
ZXdDb29yZGluYXRlcy5sb2NhdGlvbigpKTsKLSAgICAgICAgdGV4dFJlY3RzSW5Cb3VuZGluZ1Jl
Y3RDb29yZGluYXRlcy5hcHBlbmQocmVjdCk7Ci0gICAgfQorICAgICAgICByZXR1cm4gcmVjdDsK
KyAgICB9KTsKIAogICAgIC8vIFN0b3JlIHRoZSBzZWxlY3Rpb24gcmVjdCBpbiB3aW5kb3cgY29v
cmRpbmF0ZXMsIHRvIGJlIHVzZWQgc3Vic2VxdWVudGx5CiAgICAgLy8gdG8gZGV0ZXJtaW5lIGlm
IHRoZSBpbmRpY2F0b3IgYW5kIHNlbGVjdGlvbiBzdGlsbCBwcmVjaXNlbHkgb3ZlcmxhcC4KICAg
ICBkYXRhLnNlbGVjdGlvblJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBmcmFtZS52aWV3KCkt
PmNvbnRlbnRzVG9Sb290VmlldyhlbmNsb3NpbmdJbnRSZWN0KGZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbkJvdW5kcyhGcmFtZVNlbGVjdGlvbjo6Q2xpcFRvVmlzaWJsZUNvbnRlbnQ6Ok5vKSkp
OwogICAgIGRhdGEudGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9IHRleHRC
b3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXM7Ci0gICAgZGF0YS50ZXh0UmVjdHNJbkJv
dW5kaW5nUmVjdENvb3JkaW5hdGVzID0gdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRl
czsKKyAgICBkYXRhLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMgPSBXVEZNb3Zl
KHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMpOwogCiAgICAgcmV0dXJuIHRha2VT
bmFwc2hvdHMoZGF0YSwgZnJhbWUsIGVuY2xvc2luZ0ludFJlY3QodGV4dEJvdW5kaW5nUmVjdElu
RG9jdW1lbnRDb29yZGluYXRlcyksIGNsaXBwZWRUZXh0UmVjdHNJbkRvY3VtZW50Q29vcmRpbmF0
ZXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3Vy
aXR5UG9saWN5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBv
bGljeS5jcHAKaW5kZXggNTJmNjIwMTIyYjg1Yzc1MDNlN2RhNmE2ODM1YmYzNzU2MTQ5NjdmNC4u
OGEyYmE0Y2ZmYTI2ZGNjYmJkMWU3NWVlNTAxMTNhODY2YmU1YTJmYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCkBAIC0zNDMsMTgg
KzM0MywxMiBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsUG9saWNpZXNBbGxvdyhW
aW9sYXRlZERpcmVjdGl2ZUNhbGxiYWNrJiYgY2FsbGJhYwogc3RhdGljIFZlY3RvcjxSZXNvdXJj
ZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IHBhcnNlU3ViUmVzb3VyY2VJbnRlZ3JpdHlJbnRvRGlnZXN0
cyhjb25zdCBTdHJpbmcmIHN1YlJlc291cmNlSW50ZWdyaXR5KQogewogICAgIGF1dG8gZW5jb2Rl
ZERpZ2VzdHMgPSBwYXJzZUludGVncml0eU1ldGFkYXRhKHN1YlJlc291cmNlSW50ZWdyaXR5KTsK
LSAgICBWZWN0b3I8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBkZWNvZGVkRGlnZXN0czsK
LQotICAgIGlmICghZW5jb2RlZERpZ2VzdHMuaGFzX3ZhbHVlKCkpCisgICAgaWYgKCFlbmNvZGVk
RGlnZXN0cykKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgZW5j
b2RlZERpZ2VzdCA6IGVuY29kZWREaWdlc3RzLnZhbHVlKCkpIHsKLSAgICAgICAgYXV0byBkZWNv
ZGVkRGlnZXN0ID0gZGVjb2RlRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChlbmNv
ZGVkRGlnZXN0KTsKLSAgICAgICAgaWYgKGRlY29kZWREaWdlc3QuaGFzX3ZhbHVlKCkpCi0gICAg
ICAgICAgICBkZWNvZGVkRGlnZXN0cy5hcHBlbmQoZGVjb2RlZERpZ2VzdC52YWx1ZSgpKTsKLSAg
ICAgICAgfQotCi0gICAgcmV0dXJuIGRlY29kZWREaWdlc3RzOworICAgIHJldHVybiBXVEY6OmNv
bXBhY3RNYXAoKmVuY29kZWREaWdlc3RzLCBbXShhdXRvJiBlbmNvZGVkRGlnZXN0KSB7CisgICAg
ICAgIHJldHVybiBkZWNvZGVFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0KGVuY29k
ZWREaWdlc3QpOworICAgIH0pOwogfQogCiBzdGF0aWMgVmVjdG9yPENvbnRlbnRTZWN1cml0eVBv
bGljeUhhc2g+IGdlbmVyYXRlSGFzaGVzRm9yQ29udGVudChjb25zdCBTdHJpbmdWaWV3IGNvbnRl
bnQsIE9wdGlvblNldDxDb250ZW50U2VjdXJpdHlQb2xpY3lIYXNoQWxnb3JpdGhtPiBhbGdvcml0
aG1zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwCmluZGV4IDhlNGVjZTcw
NTNhZThlOThlZmVjY2ZlNzY1MmY4NmNkMjk3NDA0MDQuLjc4NDI4YzRhYmQzMWU5OWIxMGFhZTQ4
ZmJlY2MyYTViOGQ5ZjU4ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Zp
bGVDaG9vc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5j
cHAKQEAgLTUzLDkgKzUzLDcgQEAgdm9pZCBGaWxlQ2hvb3Nlcjo6aW52YWxpZGF0ZSgpCiAKIHZv
aWQgRmlsZUNob29zZXI6OmNob29zZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKIHsKLSAg
ICBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXM7Ci0gICAgZmlsZW5hbWVzLmFwcGVuZChmaWxlbmFt
ZSk7Ci0gICAgY2hvb3NlRmlsZXMoZmlsZW5hbWVzKTsKKyAgICBjaG9vc2VGaWxlcyh7IGZpbGVu
YW1lIH0pOwogfQogCiB2b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlcyhjb25zdCBWZWN0b3I8
U3RyaW5nPiYgZmlsZW5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVwbGFjZW1lbnROYW1l
cykKQEAgLTY4LDkgKzY2LDEwIEBAIHZvaWQgRmlsZUNob29zZXI6OmNob29zZUZpbGVzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJbmZvPiBmaWxlczsKKyAgICBmaWxl
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZpbGVuYW1lcy5zaXplKCkpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwLCBzaXplID0gZmlsZW5hbWVzLnNpemUoKTsgaSA8IHNpemU7ICsraSkKLSAgICAg
ICAgZmlsZXMuYXBwZW5kKHsgZmlsZW5hbWVzW2ldLCBpIDwgcmVwbGFjZW1lbnROYW1lcy5zaXpl
KCkgPyByZXBsYWNlbWVudE5hbWVzW2ldIDogbnVsbFN0cmluZygpLCB7IH0gfSk7Ci0gICAgbV9j
bGllbnQtPmZpbGVzQ2hvc2VuKGZpbGVzKTsKKyAgICAgICAgZmlsZXMudW5jaGVja2VkQXBwZW5k
KHsgZmlsZW5hbWVzW2ldLCBpIDwgcmVwbGFjZW1lbnROYW1lcy5zaXplKCkgPyByZXBsYWNlbWVu
dE5hbWVzW2ldIDogbnVsbFN0cmluZygpLCB7IH0gfSk7CisgICAgbV9jbGllbnQtPmZpbGVzQ2hv
c2VuKFdURk1vdmUoZmlsZXMpKTsKIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC04
NiwxOSArODUsMTkgQEAgdm9pZCBGaWxlQ2hvb3Nlcjo6Y2hvb3NlTWVkaWFGaWxlcyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBjb25zdCBTdHJpbmcKICAgICBpZiAoIW1fY2xpZW50
KQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4gZmls
ZXM7Ci0gICAgZm9yIChhdXRvJiBmaWxlbmFtZSA6IGZpbGVuYW1lcykKLSAgICAgICAgZmlsZXMu
YXBwZW5kKHsgZmlsZW5hbWUsIHsgfSwgeyB9IH0pOwotICAgIG1fY2xpZW50LT5maWxlc0Nob3Nl
bihmaWxlcywgZGlzcGxheVN0cmluZywgaWNvbik7CisgICAgYXV0byBmaWxlcyA9IGZpbGVuYW1l
cy5tYXAoW10oYXV0byYgZmlsZW5hbWUpIHsKKyAgICAgICAgcmV0dXJuIEZpbGVDaG9vc2VyRmls
ZUluZm8geyBmaWxlbmFtZSwgeyB9LCB7IH0gfTsKKyAgICB9KTsKKyAgICBtX2NsaWVudC0+Zmls
ZXNDaG9zZW4oV1RGTW92ZShmaWxlcyksIGRpc3BsYXlTdHJpbmcsIGljb24pOwogfQogCiAjZW5k
aWYKIAogdm9pZCBGaWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZXMoY29uc3QgVmVjdG9yPEZpbGVDaG9v
c2VyRmlsZUluZm8+JiBmaWxlcykKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiBwYXRoczsKLSAgICBm
b3IgKGF1dG8mIGZpbGUgOiBmaWxlcykKLSAgICAgICAgcGF0aHMuYXBwZW5kKGZpbGUucGF0aCk7
CisgICAgYXV0byBwYXRocyA9IGZpbGVzLm1hcChbXShhdXRvJiBmaWxlKSB7CisgICAgICAgIHJl
dHVybiBmaWxlLnBhdGg7CisgICAgfSk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyBpbmVsZWdh
bnQuIFdlIHNob3VsZCBub3QgYmUgbG9va2luZyBhdCBzZXR0aW5ncyBoZXJlLgogICAgIGlmICht
X3NldHRpbmdzLnNlbGVjdGVkRmlsZXMgPT0gcGF0aHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2hhcmVkQnVmZmVyLmNwcAppbmRleCBkMDlmMTA1MmEwZjMxZWU5NzA2MTEwMTNiMzkzNWZiNTMw
OTU1MDk2Li5mODdiNmE0ZjYzYjI2YTIxODgyMDZlOTM4YWE1ODU3OTdhYjM5NWU0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKQEAgLTIwNiw5ICsyMDYsNyBAQCB2
b2lkIEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25zdCBGcmFnbWVudGVkU2hhcmVk
QnVmZmVyJiBkYXRhKQogdm9pZCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyOjphcHBlbmQoY29uc3Qg
dWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBBU1NFUlQoIW1fY29udGlndW91
cyk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvcjsKLSAgICB2ZWN0b3IuYXBwZW5kKGRhdGEs
IGxlbmd0aCk7Ci0gICAgbV9zZWdtZW50cy5hcHBlbmQoeyBtX3NpemUsIERhdGFTZWdtZW50Ojpj
cmVhdGUoV1RGTW92ZSh2ZWN0b3IpKSB9KTsKKyAgICBtX3NlZ21lbnRzLmFwcGVuZCh7IG1fc2l6
ZSwgRGF0YVNlZ21lbnQ6OmNyZWF0ZShWZWN0b3IgeyBkYXRhLCBsZW5ndGggfSkgfSk7CiAgICAg
bV9zaXplICs9IGxlbmd0aDsKICAgICBBU1NFUlQoaW50ZXJuYWxseUNvbnNpc3RlbnQoKSk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRTYWZlRGF0YUJ1ZmZl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkU2FmZURhdGFCdWZmZXIuaAppbmRl
eCBkMzk3ZDIyN2RmYzUzNGFkMGNmNTg3MDJiZTFjYTU4MDI0OTlhMGJiLi42NjI3ZmViY2I3ZjRl
MWRhZDgxMTFlMTRhOTEyMTQ0ODgxNjZhOTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9UaHJlYWRTYWZlRGF0YUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1RocmVhZFNhZmVEYXRhQnVmZmVyLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBv
bmNlCiAKKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVS
ZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0xNDMsNCArMTQ0LDE1
IEBAIGJvb2wgVGhyZWFkU2FmZURhdGFCdWZmZXI6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBU
aHJlYWRTYWZlRGF0YUJ1ZmZlciYgcmVzdWx0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2lubGlu
ZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIGJ1
ZmZlcikKK3sKKyAgICBhdXRvKiBkYXRhID0gYnVmZmVyLmRhdGEoKTsKKyAgICBpZiAoIWRhdGEp
IHsKKyAgICAgICAgYWRkKGhhc2hlciwgdHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgYWRkKGhhc2hlciwgZmFsc2UpOworICAgIGFkZChoYXNoZXIsICpkYXRhKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuY3BwCmluZGV4IDFjZjM5Y2FjZjMwMjQ1
MDhlOGQxMmU4NjQ1YzUwODY3NzIxOTQzNWIuLmJmZTE4ZTI5ZDI2ZWM4OWEzZjQwMmQ3MTgzMTM4
MjAxNjIzZTUxNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1
ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHAKQEAgLTU2LDggKzU2LDkgQEAgdm9pZCBB
dWRpb0RTUEtlcm5lbFByb2Nlc3Nvcjo6aW5pdGlhbGl6ZSgpCiAgICAgICAgIERpc2FibGVNYWxs
b2NSZXN0cmljdGlvbnNGb3JDdXJyZW50VGhyZWFkU2NvcGUgZGlzYWJsZU1hbGxvY1Jlc3RyaWN0
aW9uczsKIAogICAgICAgICAvLyBDcmVhdGUgcHJvY2Vzc2luZyBrZXJuZWxzLCBvbmUgcGVyIGNo
YW5uZWwuCisgICAgICAgIG1fa2VybmVscy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bWJlck9m
Q2hhbm5lbHMoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNo
YW5uZWxzKCk7ICsraSkKLSAgICAgICAgICAgIG1fa2VybmVscy5hcHBlbmQoY3JlYXRlS2VybmVs
KCkpOworICAgICAgICAgICAgbV9rZXJuZWxzLnVuY2hlY2tlZEFwcGVuZChjcmVhdGVLZXJuZWwo
KSk7CiAgICAgfQogICAgIG1faW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgIG1faGFzSnVzdFJlc2V0
ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlv
UmVzYW1wbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUmVzYW1w
bGVyLmNwcAppbmRleCBkZTUwOGNjNmVmNGE1YjAxYmQ0ZWIyMjQ3NDViN2VmMjgyODQwZjhlLi43
NDY5Y2U0ZGUzZjNjMTg4ODkyOGY1NDk3ZDEyY2U1NmRiNmU2ZDJkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1Jlc2FtcGxlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9SZXNhbXBsZXIuY3BwCkBAIC00Miw4ICs0Miw5
IEBAIEF1ZGlvUmVzYW1wbGVyOjpBdWRpb1Jlc2FtcGxlcigpCiAKIEF1ZGlvUmVzYW1wbGVyOjpB
dWRpb1Jlc2FtcGxlcih1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKQogeworICAgIG1fa2VybmVs
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bWJlck9mQ2hhbm5lbHMpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyArK2kpCi0gICAgICAgIG1fa2VybmVs
cy5hcHBlbmQobWFrZVVuaXF1ZTxBdWRpb1Jlc2FtcGxlcktlcm5lbD4odGhpcykpOworICAgICAg
ICBtX2tlcm5lbHMudW5jaGVja2VkQXBwZW5kKG1ha2VVbmlxdWU8QXVkaW9SZXNhbXBsZXJLZXJu
ZWw+KHRoaXMpKTsKIAogICAgIG1fc291cmNlQnVzID0gQXVkaW9CdXM6OmNyZWF0ZShudW1iZXJP
ZkNoYW5uZWxzLCAwLCBmYWxzZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcAppbmRleCA5ZjMxODFj
ZmJiNDAyMjc3Nzk5NjIzYjliZmRkY2RkNDk1OWMwMGIwLi41MDMyZWVhN2E3MmIyM2RlMmEyMDJi
YzE1MzYwMzVjYmFlZDAxNjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAKQEAgLTYxLDggKzYxLDkg
QEAgdm9pZCBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnNldE51bWJlck9mQ2hhbm5lbHModW5z
aWduZWQgbnVtYmVyT2ZDaGFubmVscykKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9wcmVEZWxh
eUJ1ZmZlcnMuY2xlYXIoKTsKKyAgICBtX3ByZURlbGF5QnVmZmVycy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG51bWJlck9mQ2hhbm5lbHMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZkNoYW5uZWxzOyArK2kpCi0gICAgICAgIG1fcHJlRGVsYXlCdWZmZXJzLmFwcGVuZCht
YWtlVW5pcXVlPEF1ZGlvRmxvYXRBcnJheT4oTWF4UHJlRGVsYXlGcmFtZXMpKTsKKyAgICAgICAg
bV9wcmVEZWxheUJ1ZmZlcnMudW5jaGVja2VkQXBwZW5kKG1ha2VVbmlxdWU8QXVkaW9GbG9hdEFy
cmF5PihNYXhQcmVEZWxheUZyYW1lcykpOwogfQogCiB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktl
cm5lbDo6c2V0UHJlRGVsYXlUaW1lKGZsb2F0IHByZURlbGF5VGltZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL011bHRpQ2hhbm5lbFJlc2FtcGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NdWx0aUNoYW5uZWxSZXNhbXBsZXIuY3BwCmlu
ZGV4IGI5NjZmYTA2Y2QzMGViMzRkZjcxZmNmYmRlN2MxNjU4MjMxMTEyMWYuLjE3MDIzYjY0MjYx
YmRmZDM3NWVlMDlmZTI5NmIzYmRhODgyN2YyZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL011bHRpQ2hhbm5lbFJlc2FtcGxlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vTXVsdGlDaGFubmVsUmVzYW1wbGVyLmNwcApAQCAtNTMsOCAr
NTMsOSBAQCBNdWx0aUNoYW5uZWxSZXNhbXBsZXI6Ok11bHRpQ2hhbm5lbFJlc2FtcGxlcihkb3Vi
bGUgc2NhbGVGYWN0b3IsIHVuc2lnbmVkIG51bWJlcgogICAgIH0KIAogICAgIC8vIENyZWF0ZSBl
YWNoIGNoYW5uZWwncyByZXNhbXBsZXIuCisgICAgbV9rZXJuZWxzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobnVtYmVyT2ZDaGFubmVscyk7CiAgICAgZm9yICh1bnNpZ25lZCBjaGFubmVsSW5kZXgg
PSAwOyBjaGFubmVsSW5kZXggPCBudW1iZXJPZkNoYW5uZWxzOyArK2NoYW5uZWxJbmRleCkKLSAg
ICAgICAgbV9rZXJuZWxzLmFwcGVuZChtYWtlVW5pcXVlPFNpbmNSZXNhbXBsZXI+KHNjYWxlRmFj
dG9yLCByZXF1ZXN0RnJhbWVzLCBzdGQ6OmJpbmQoJk11bHRpQ2hhbm5lbFJlc2FtcGxlcjo6cHJv
dmlkZUlucHV0Rm9yQ2hhbm5lbCwgdGhpcywgc3RkOjpwbGFjZWhvbGRlcnM6Ol8xLCBzdGQ6OnBs
YWNlaG9sZGVyczo6XzIsIGNoYW5uZWxJbmRleCkpKTsKKyAgICAgICAgbV9rZXJuZWxzLnVuY2hl
Y2tlZEFwcGVuZChtYWtlVW5pcXVlPFNpbmNSZXNhbXBsZXI+KHNjYWxlRmFjdG9yLCByZXF1ZXN0
RnJhbWVzLCBzdGQ6OmJpbmQoJk11bHRpQ2hhbm5lbFJlc2FtcGxlcjo6cHJvdmlkZUlucHV0Rm9y
Q2hhbm5lbCwgdGhpcywgc3RkOjpwbGFjZWhvbGRlcnM6Ol8xLCBzdGQ6OnBsYWNlaG9sZGVyczo6
XzIsIGNoYW5uZWxJbmRleCkpKTsKIH0KIAogTXVsdGlDaGFubmVsUmVzYW1wbGVyOjp+TXVsdGlD
aGFubmVsUmVzYW1wbGVyKCkgPSBkZWZhdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dC5tbQppbmRleCAwNWVhMjExMWViNWQ0NTNjYjI4ZDhlNzdlZjNjYmY1ZjM1NjcxOTg5Li5mYTMw
YWZkZTNiMWUxZTM2ZTg2MWFlY2JkOWZiZThjN2YwOTAzNTZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2Rl
bE1lZGlhRWxlbWVudC5tbQpAQCAtNTM0LDE0ICs1MzQsMTIgQEAgVmVjdG9yPE1lZGlhU2VsZWN0
aW9uT3B0aW9uPiBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGVnaWJsZU1lZGlh
U2VsZWMKICAgICBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGxlZ2libGVPcHRpb25zOwog
CiAgICAgaWYgKCFtX21lZGlhRWxlbWVudCB8fCAhbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCku
cGFnZSgpKQotICAgICAgICByZXR1cm4gbGVnaWJsZU9wdGlvbnM7CisgICAgICAgIHJldHVybiB7
IH07CiAKICAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBtX21lZGlhRWxlbWVudC0+ZG9j
dW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuZW5zdXJlQ2FwdGlvblByZWZlcmVuY2VzKCk7Ci0KLSAg
ICBmb3IgKGF1dG8mIHRyYWNrIDogbV9sZWdpYmxlVHJhY2tzRm9yTWVudSkKLSAgICAgICAgbGVn
aWJsZU9wdGlvbnMuYXBwZW5kKGNhcHRpb25QcmVmZXJlbmNlcy5tZWRpYVNlbGVjdGlvbk9wdGlv
bkZvclRyYWNrKHRyYWNrLmdldCgpKSk7Ci0KLSAgICByZXR1cm4gbGVnaWJsZU9wdGlvbnM7Cisg
ICAgcmV0dXJuIG1fbGVnaWJsZVRyYWNrc0Zvck1lbnUubWFwKFsmXShhdXRvJiB0cmFjaykgewor
ICAgICAgICByZXR1cm4gY2FwdGlvblByZWZlcmVuY2VzLm1lZGlhU2VsZWN0aW9uT3B0aW9uRm9y
VHJhY2sodHJhY2suZ2V0KCkpOworICAgIH0pOwogfQogCiB1aW50NjRfdCBQbGF5YmFja1Nlc3Np
b25Nb2RlbE1lZGlhRWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9EdWFsc2hvY2sz
SElER2FtZXBhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9EdWFs
c2hvY2szSElER2FtZXBhZC5jcHAKaW5kZXggNmM0MGU4Yjg4OTI4NzNmZjA3MjA2MThjZmU4Mzk2
NGM4MGVjMzQxZS4uYzBmNTE4MWJjNDRiMWJkY2ViYTY5YjhjYjZhMzRhOWVhMTI3ZGY2NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvRHVhbHNob2NrM0hJ
REdhbWVwYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL0R1
YWxzaG9jazNISURHYW1lcGFkLmNwcApAQCAtNDMsMTIgKzQzLDEwIEBAIER1YWxzaG9jazNISURH
YW1lcGFkOjpEdWFsc2hvY2szSElER2FtZXBhZChISUREZXZpY2UmJiBkZXZpY2UsIHVuc2lnbmVk
IGluZGV4KQogCiAgICAgbV9tYXBwaW5nID0gc3RhbmRhcmRHYW1lcGFkTWFwcGluZ1N0cmluZygp
OwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlN0YW5kYXJkR2FtZXBhZEJ1
dHRvbnNXaXRoSG9tZUJ1dHRvbjsgKytpKQotICAgICAgICBtX2J1dHRvblZhbHVlcy5hcHBlbmQo
MC4wKTsKKyAgICBtX2J1dHRvblZhbHVlcyA9IFZlY3RvcihudW1iZXJPZlN0YW5kYXJkR2FtZXBh
ZEJ1dHRvbnNXaXRoSG9tZUJ1dHRvbiwgU2hhcmVkR2FtZXBhZFZhbHVlIHsgMC4wIH0pOwogCi0g
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBheGlzQ291bnQgPSA0OwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYXhpc0NvdW50OyArK2kpCi0gICAgICAgIG1fYXhpc1ZhbHVlcy5hcHBlbmQoMC4w
KTsKKyAgICBjb25zdGV4cHIgc2l6ZV90IGF4aXNDb3VudCA9IDQ7CisgICAgbV9heGlzVmFsdWVz
ID0gVmVjdG9yKGF4aXNDb3VudCwgU2hhcmVkR2FtZXBhZFZhbHVlIHsgMC4wIH0pOwogCiAgICAg
YXV0byBpbnB1dEVsZW1lbnRzID0gaGlkRGV2aWNlKCkudW5pcXVlSW5wdXRFbGVtZW50c0luRGV2
aWNlVHJlZU9yZGVyKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dh
bWVwYWQvbWFjL0xvZ2l0ZWNoR2FtZXBhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
YW1lcGFkL21hYy9Mb2dpdGVjaEdhbWVwYWQuY3BwCmluZGV4IDY3MTQzZmI5OTViYTJjM2U2OGRk
MjExZDE2NWJlNjIwY2VmNzg5ZWYuLmZlNGNlZGM1MWQ2MzlmYjdiMWFlOTkzM2U1YzI2OTZjMzk3
OGE4ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL0xv
Z2l0ZWNoR2FtZXBhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9t
YWMvTG9naXRlY2hHYW1lcGFkLmNwcApAQCAtNDMsMTIgKzQzLDEwIEBAIExvZ2l0ZWNoR2FtZXBh
ZDo6TG9naXRlY2hHYW1lcGFkKEhJRERldmljZSYmIGRldmljZSwgdW5zaWduZWQgaW5kZXgpCiAK
ICAgICBtX21hcHBpbmcgPSBzdGFuZGFyZEdhbWVwYWRNYXBwaW5nU3RyaW5nKCk7CiAKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mU3RhbmRhcmRHYW1lcGFkQnV0dG9uc1dpdGhv
dXRIb21lQnV0dG9uOyArK2kpCi0gICAgICAgIG1fYnV0dG9uVmFsdWVzLmFwcGVuZCgwLjApOwor
ICAgIG1fYnV0dG9uVmFsdWVzID0gVmVjdG9yKG51bWJlck9mU3RhbmRhcmRHYW1lcGFkQnV0dG9u
c1dpdGhvdXRIb21lQnV0dG9uLCBTaGFyZWRHYW1lcGFkVmFsdWUgeyAwLjAgfSk7CiAKLSAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGF4aXNDb3VudCA9IDQ7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBheGlzQ291bnQ7ICsraSkKLSAgICAgICAgbV9heGlzVmFsdWVzLmFwcGVuZCgwLjApOwor
ICAgIGNvbnN0ZXhwciBzaXplX3QgYXhpc0NvdW50ID0gNDsKKyAgICBtX2F4aXNWYWx1ZXMgPSBW
ZWN0b3IoYXhpc0NvdW50LCBTaGFyZWRHYW1lcGFkVmFsdWUgeyAwLjAgfSk7CiAKICAgICBhdXRv
IGlucHV0RWxlbWVudHMgPSBoaWREZXZpY2UoKS51bmlxdWVJbnB1dEVsZW1lbnRzSW5EZXZpY2VU
cmVlT3JkZXIoKTsKIApAQCAtNTksMTEgKzU3LDEyIEBAIExvZ2l0ZWNoR2FtZXBhZDo6TG9naXRl
Y2hHYW1lcGFkKEhJRERldmljZSYmIGRldmljZSwgdW5zaWduZWQgaW5kZXgpCiAgICAgZm9yIChh
dXRvJiBlbGVtZW50IDogaW5wdXRFbGVtZW50cykgewogICAgICAgICBzd2l0Y2ggKGVsZW1lbnQu
ZnVsbFVzYWdlKCkpIHsKICAgICAgICAgY2FzZSBoaWRIYXRzd2l0Y2hGdWxsVXNhZ2U6IHsKLSAg
ICAgICAgICAgIFZlY3RvcjxTaGFyZWRHYW1lcGFkVmFsdWU+IGhhdHN3aXRjaFZhbHVlczsKLSAg
ICAgICAgICAgIGhhdHN3aXRjaFZhbHVlcy5hcHBlbmQobV9idXR0b25WYWx1ZXNbKHNpemVfdClH
YW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJUb3BdKTsKLSAgICAgICAgICAgIGhhdHN3aXRj
aFZhbHVlcy5hcHBlbmQobV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6
TGVmdENsdXN0ZXJSaWdodF0pOwotICAgICAgICAgICAgaGF0c3dpdGNoVmFsdWVzLmFwcGVuZCht
X2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlckJvdHRv
bV0pOwotICAgICAgICAgICAgaGF0c3dpdGNoVmFsdWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1so
c2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlckxlZnRdKTsKKyAgICAgICAgICAg
IGF1dG8gaGF0c3dpdGNoVmFsdWVzID0gVmVjdG9yIHsKKyAgICAgICAgICAgICAgICBtX2J1dHRv
blZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlclRvcF0sCisgICAg
ICAgICAgICAgICAgbV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVm
dENsdXN0ZXJSaWdodF0sCisgICAgICAgICAgICAgICAgbV9idXR0b25WYWx1ZXNbKHNpemVfdClH
YW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJCb3R0b21dLAorICAgICAgICAgICAgICAgIG1f
YnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyTGVmdF0K
KyAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgIG1fZWxlbWVudE1hcC5zZXQoZWxlbWVudC5j
b29raWUoKSwgbWFrZVVuaXF1ZTxISURHYW1lcGFkSGF0c3dpdGNoPihlbGVtZW50LCBXVEZNb3Zl
KGhhdHN3aXRjaFZhbHVlcykpKTsKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvU3RhZGlhSElER2FtZXBhZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9TdGFkaWFISURHYW1lcGFkLmNwcApp
bmRleCAwYTk0ZTU2MjMzYTIwNDQ2NDFmMTAwZjA1NjQ0ZDU3NWFkYmM5ZTczLi40MjE1OTI3YzQ5
NGMzZWVlNmMxMjUwYWI1NTY0MWZhNzJhMjIwNjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9TdGFkaWFISURHYW1lcGFkLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9TdGFkaWFISURHYW1lcGFkLmNwcApAQCAtNDEs
MTIgKzQxLDEwIEBAIFN0YWRpYUhJREdhbWVwYWQ6OlN0YWRpYUhJREdhbWVwYWQoSElERGV2aWNl
JiYgZGV2aWNlLCB1bnNpZ25lZCBpbmRleCkKIAogICAgIG1fbWFwcGluZyA9IHN0YW5kYXJkR2Ft
ZXBhZE1hcHBpbmdTdHJpbmcoKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTk7ICsr
aSkKLSAgICAgICAgbV9idXR0b25WYWx1ZXMuYXBwZW5kKDAuMCk7CisgICAgbV9idXR0b25WYWx1
ZXMgPSBWZWN0b3IoMTksIFNoYXJlZEdhbWVwYWRWYWx1ZSB7IDAuMCB9KTsKIAotICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgYXhpc0NvdW50ID0gNDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGF4aXNDb3VudDsgKytpKQotICAgICAgICBtX2F4aXNWYWx1ZXMuYXBwZW5kKDAuMCk7CisgICAg
Y29uc3RleHByIHNpemVfdCBheGlzQ291bnQgPSA0OworICAgIG1fYXhpc1ZhbHVlcyA9IFZlY3Rv
cihheGlzQ291bnQsIFNoYXJlZEdhbWVwYWRWYWx1ZSB7IDAuMCB9KTsKIAogICAgIGF1dG8gaW5w
dXRFbGVtZW50cyA9IGhpZERldmljZSgpLnVuaXF1ZUlucHV0RWxlbWVudHNJbkRldmljZVRyZWVP
cmRlcigpOwogCkBAIC03MCwxMSArNjgsMTIgQEAgU3RhZGlhSElER2FtZXBhZDo6U3RhZGlhSElE
R2FtZXBhZChISUREZXZpY2UmJiBkZXZpY2UsIHVuc2lnbmVkIGluZGV4KQogICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgY2FzZSBoaWRIYXRzd2l0Y2hGdWxsVXNhZ2U6IHsKLSAgICAgICAg
ICAgIFZlY3RvcjxTaGFyZWRHYW1lcGFkVmFsdWU+IGhhdHN3aXRjaFZhbHVlczsKLSAgICAgICAg
ICAgIGhhdHN3aXRjaFZhbHVlcy5hcHBlbmQobV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFk
QnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJUb3BdKTsKLSAgICAgICAgICAgIGhhdHN3aXRjaFZhbHVl
cy5hcHBlbmQobV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENs
dXN0ZXJSaWdodF0pOwotICAgICAgICAgICAgaGF0c3dpdGNoVmFsdWVzLmFwcGVuZChtX2J1dHRv
blZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlckJvdHRvbV0pOwot
ICAgICAgICAgICAgaGF0c3dpdGNoVmFsdWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90
KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlckxlZnRdKTsKKyAgICAgICAgICAgIGF1dG8g
aGF0c3dpdGNoVmFsdWVzID0gVmVjdG9yIHsKKyAgICAgICAgICAgICAgICBtX2J1dHRvblZhbHVl
c1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlclRvcF0sCisgICAgICAgICAg
ICAgICAgbV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0
ZXJSaWdodF0sCisgICAgICAgICAgICAgICAgbV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFk
QnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJCb3R0b21dLAorICAgICAgICAgICAgICAgIG1fYnV0dG9u
VmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyTGVmdF0KKyAgICAg
ICAgICAgIH07CiAKICAgICAgICAgICAgIG1fZWxlbWVudE1hcC5zZXQoZWxlbWVudC5jb29raWUo
KSwgbWFrZVVuaXF1ZTxISURHYW1lcGFkSGF0c3dpdGNoPihlbGVtZW50LCBXVEZNb3ZlKGhhdHN3
aXRjaFZhbHVlcykpKTsKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAppbmRleCAxZmVlMjlhZTVmNzE5
YzRlNTU0YTJjN2U3MGNiNzBmMDFmOWIyMDAyLi43MjRmYjE3YzMzZjRiY2E0Njg4OWM4M2JjNTU4
NDhmZDcyNzBjMzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0xheWVyLmNwcApAQCAtNzYzLDExICs3NjMsOSBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXI6OmFkZFJlcGFpbnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVwYWludFJlY3QpCiAgICAgRmxv
YXRSZWN0IGxhcmdlc3RSZXBhaW50UmVjdChGbG9hdFBvaW50KCksIG1fc2l6ZSk7CiAgICAgbGFy
Z2VzdFJlcGFpbnRSZWN0LmludGVyc2VjdChyZXBhaW50UmVjdCk7CiAgICAgUmVwYWludE1hcDo6
aXRlcmF0b3IgcmVwYWludEl0ID0gcmVwYWludFJlY3RNYXAoKS5maW5kKHRoaXMpOwotICAgIGlm
IChyZXBhaW50SXQgPT0gcmVwYWludFJlY3RNYXAoKS5lbmQoKSkgewotICAgICAgICBWZWN0b3I8
RmxvYXRSZWN0PiByZXBhaW50UmVjdHM7Ci0gICAgICAgIHJlcGFpbnRSZWN0cy5hcHBlbmQobGFy
Z2VzdFJlcGFpbnRSZWN0KTsKLSAgICAgICAgcmVwYWludFJlY3RNYXAoKS5zZXQodGhpcywgcmVw
YWludFJlY3RzKTsKLSAgICB9IGVsc2UgeworICAgIGlmIChyZXBhaW50SXQgPT0gcmVwYWludFJl
Y3RNYXAoKS5lbmQoKSkKKyAgICAgICAgcmVwYWludFJlY3RNYXAoKS5zZXQodGhpcywgVmVjdG9y
IHsgV1RGTW92ZShsYXJnZXN0UmVwYWludFJlY3QpIH0pOworICAgIGVsc2UgewogICAgICAgICBW
ZWN0b3I8RmxvYXRSZWN0PiYgcmVwYWludFJlY3RzID0gcmVwYWludEl0LT52YWx1ZTsKICAgICAg
ICAgcmVwYWludFJlY3RzLmFwcGVuZChsYXJnZXN0UmVwYWludFJlY3QpOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5jcHAKaW5k
ZXggYjk3OTlhNGQxMDYxZWQyMGExYjUwZWQ1MDY4NjUxYzVmZWE0NjZhNC4uMWQwMDRmYzExNGFj
YjcxNWIxMDUyNTkwMzM2YjA2ZmNlYzMwMzA1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5jcHAKQEAgLTI5MCwxNyArMjkwLDE0IEBA
IHN0YXRpYyBWZWN0b3I8RmxvYXRQb2ludEdyYXBoOjpQb2x5Z29uPiBwb2x5Z29uc0ZvclJlY3Qo
Y29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mCiAKIFZlY3RvcjxQYXRoPiBQYXRoVXRpbGl0aWVzOjpw
YXRoc1dpdGhTaHJpbmtXcmFwcGVkUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3Rz
LCBmbG9hdCByYWRpdXMpCiB7Ci0gICAgVmVjdG9yPFBhdGg+IHBhdGhzOwotCiAgICAgaWYgKHJl
Y3RzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHBhdGhzOworICAgICAgICByZXR1cm4geyB9
OwogCiAgICAgaWYgKHJlY3RzLnNpemUoKSA+IDIwKSB7CiAgICAgICAgIFBhdGggcGF0aDsKICAg
ICAgICAgZm9yIChjb25zdCBhdXRvJiByZWN0IDogcmVjdHMpCiAgICAgICAgICAgICBwYXRoLmFk
ZFJvdW5kZWRSZWN0KHJlY3QsIEZsb2F0U2l6ZShyYWRpdXMsIHJhZGl1cykpOwotICAgICAgICBw
YXRocy5hcHBlbmQocGF0aCk7Ci0gICAgICAgIHJldHVybiBwYXRoczsKKyAgICAgICAgcmV0dXJu
IHsgV1RGTW92ZShwYXRoKSB9OwogICAgIH0KIAogICAgIEZsb2F0UG9pbnRHcmFwaCBncmFwaDsK
QEAgLTMwOSwxMCArMzA2LDExIEBAIFZlY3RvcjxQYXRoPiBQYXRoVXRpbGl0aWVzOjpwYXRoc1dp
dGhTaHJpbmtXcmFwcGVkUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mCiAgICAgICAgIFBh
dGggcGF0aDsKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiByZWN0IDogcmVjdHMpCiAgICAgICAg
ICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QsIEZsb2F0U2l6ZShyYWRpdXMsIHJhZGl1cykp
OwotICAgICAgICBwYXRocy5hcHBlbmQocGF0aCk7Ci0gICAgICAgIHJldHVybiBwYXRoczsKKyAg
ICAgICAgcmV0dXJuIHsgV1RGTW92ZShwYXRoKSB9OwogICAgIH0KIAorICAgIFZlY3RvcjxQYXRo
PiBwYXRoczsKKyAgICBwYXRocy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBvbHlzLnNpemUoKSk7
CiAgICAgZm9yIChhdXRvJiBwb2x5IDogcG9seXMpIHsKICAgICAgICAgUGF0aCBwYXRoOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9seS5zaXplKCk7ICsraSkgewpAQCAtMzQ0
LDcgKzM0Miw3IEBAIFZlY3RvcjxQYXRoPiBQYXRoVXRpbGl0aWVzOjpwYXRoc1dpdGhTaHJpbmtX
cmFwcGVkUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mCiAgICAgICAgICAgICBwYXRoLmFk
ZEFyY1RvKCpmcm9tRWRnZS5zZWNvbmQsICp0b0VkZ2UuZmlyc3QgKyB0b09mZnNldCwgY2xhbXBl
ZFJhZGl1cyk7CiAgICAgICAgIH0KICAgICAgICAgcGF0aC5jbG9zZVN1YnBhdGgoKTsKLSAgICAg
ICAgcGF0aHMuYXBwZW5kKHBhdGgpOworICAgICAgICBwYXRocy51bmNoZWNrZWRBcHBlbmQoV1RG
TW92ZShwYXRoKSk7CiAgICAgfQogICAgIHJldHVybiBwYXRoczsKIH0KQEAgLTU0MywxMyArNTQx
LDE0IEBAIFBhdGggUGF0aFV0aWxpdGllczo6cGF0aFdpdGhTaHJpbmtXcmFwcGVkUmVjdHNGb3JP
dXRsaW5lKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+CiAgICAgYm90dG9tTGVmdFJhZGl1cyA9IGZp
cnN0TGluZVJhZGlpLmJvdHRvbUxlZnQoKTsKICAgICB0b3BSaWdodFJhZGl1cyA9IGxhc3RMaW5l
UmFkaWkudG9wUmlnaHQoKTsKICAgICBib3R0b21SaWdodFJhZGl1cyA9IGxhc3RMaW5lUmFkaWku
Ym90dG9tUmlnaHQoKTsKLSAgICBWZWN0b3I8RmxvYXRQb2ludD4gY29ybmVyczsKICAgICAvLyBw
aHlzaWNhbCB0b3BMZWZ0L3RvcFJpZ2h0L2JvdHRvbVJpZ2h0L2JvdHRvbUxlZnQKICAgICBhdXRv
IGlzSG9yaXpvbnRhbCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsKLSAg
ICBjb3JuZXJzLmFwcGVuZChmaXJzdExpbmVSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotICAgIGNv
cm5lcnMuYXBwZW5kKGlzSG9yaXpvbnRhbCA/IGxhc3RMaW5lUmVjdC5tYXhYTWluWUNvcm5lcigp
IDogZmlyc3RMaW5lUmVjdC5tYXhYTWluWUNvcm5lcigpKTsKLSAgICBjb3JuZXJzLmFwcGVuZChs
YXN0TGluZVJlY3QubWF4WE1heFlDb3JuZXIoKSk7Ci0gICAgY29ybmVycy5hcHBlbmQoaXNIb3Jp
em9udGFsID8gZmlyc3RMaW5lUmVjdC5taW5YTWF4WUNvcm5lcigpIDogbGFzdExpbmVSZWN0Lm1p
blhNYXhZQ29ybmVyKCkpOworICAgIGF1dG8gY29ybmVycyA9IFZlY3RvcjxGbG9hdFBvaW50Pjo6
ZnJvbSgKKyAgICAgICAgZmlyc3RMaW5lUmVjdC5taW5YTWluWUNvcm5lcigpLAorICAgICAgICBp
c0hvcml6b250YWwgPyBsYXN0TGluZVJlY3QubWF4WE1pbllDb3JuZXIoKSA6IGZpcnN0TGluZVJl
Y3QubWF4WE1pbllDb3JuZXIoKSwKKyAgICAgICAgbGFzdExpbmVSZWN0Lm1heFhNYXhZQ29ybmVy
KCksCisgICAgICAgIGlzSG9yaXpvbnRhbCA/IGZpcnN0TGluZVJlY3QubWluWE1heFlDb3JuZXIo
KSA6IGxhc3RMaW5lUmVjdC5taW5YTWF4WUNvcm5lcigpCisgICAgKTsKIAogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBwb2x5LnNpemUoKTsgKytpKSB7CiAgICAgICAgIGF1dG8gbW92ZU9y
QWRkTGluZVRvID0gW2ksICZwYXRoXSAoY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclBy
aXZhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVy
UHJpdmF0ZS5jcHAKaW5kZXggNTQ5OWYzN2E3ZjM2NDZiZDVmMzk1YTQ4YjA5ZDk0MTFkNGM5YjY2
NC4uMDRjYmU0ZDI3ZjE5MGI3YjI3YjljYTdlOThhOWM0NzE3M2QyZjg5YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0
ZS5jcHAKQEAgLTIxNiwxMCArMjE2LDkgQEAgdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlOjpidWZm
ZXJlZFNhbXBsZXNGb3JUcmFja0lkKGNvbnN0IEF0b21TdHJpbmcmIHRyYWNrSWQsIEMKICAgICBp
ZiAoIXRyYWNrQnVmZmVyKQogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogCi0gICAg
VmVjdG9yPFN0cmluZz4gc2FtcGxlRGVzY3JpcHRpb25zOwotICAgIGZvciAoYXV0byYgcGFpciA6
IHRyYWNrQnVmZmVyLT5zYW1wbGVzLmRlY29kZU9yZGVyKCkpCi0gICAgICAgIHNhbXBsZURlc2Ny
aXB0aW9ucy5hcHBlbmQodG9TdHJpbmcoKnBhaXIuc2Vjb25kKSk7Ci0KKyAgICBhdXRvIHNhbXBs
ZURlc2NyaXB0aW9ucyA9IFdURjo6bWFwKHRyYWNrQnVmZmVyLT5zYW1wbGVzLmRlY29kZU9yZGVy
KCksIFtdKGF1dG8mIGVudHJ5KSB7CisgICAgICAgIHJldHVybiB0b1N0cmluZygqZW50cnkuc2Vj
b25kKTsKKyAgICB9KTsKICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHNhbXBsZURlc2Ny
aXB0aW9ucykpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNw
cAppbmRleCA4YjA0ZjliZTk2YzM2ZTBhMjYyMTgwYTI1ZWEzNzQ1OTYyYjNkN2Q1Li5jNTQ2MTQ2
MjNiODdlYzA4OTYxZjFkNDQyMGY5NjAxZjE2YTZhYjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9D
RE1GYWlyUGxheVN0cmVhbWluZy5jcHAKQEAgLTIwMSw5ICsyMDEsNyBAQCBSZWZQdHI8RnJhZ21l
bnRlZFNoYXJlZEJ1ZmZlcj4gQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpzYW5pdGl6ZVNr
ZChjb25zdCBGcgogc3RkOjpvcHRpb25hbDxWZWN0b3I8UmVmPEZyYWdtZW50ZWRTaGFyZWRCdWZm
ZXI+Pj4gQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpleHRyYWN0S2V5SURzU2tkKGNvbnN0
IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXImIGJ1ZmZlcikKIHsKICAgICAvLyBJbiB0aGUgJ3NrZCcg
c2NoZW1lLCB0aGUgaW5pdCBkYXRhIGlzIHRoZSBrZXkgSUQuCi0gICAgVmVjdG9yPFJlZjxGcmFn
bWVudGVkU2hhcmVkQnVmZmVyPj4ga2V5SURzOwotICAgIGtleUlEcy5hcHBlbmQoYnVmZmVyLmNv
cHkoKSk7Ci0gICAgcmV0dXJuIGtleUlEczsKKyAgICByZXR1cm4gVmVjdG9yIHsgYnVmZmVyLmNv
cHkoKSB9OwogfQogCiBzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhv
b2RIYXNoU2V0PEF0b21TdHJpbmc+JiB2YWxpZEluaXREYXRhVHlwZXMoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5z
dGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5n
QVZGT2JqQy5tbQppbmRleCBkNjM2MTJmYWEwNTM3MGEwMzk3M2ExZTJkNTZjMTg2OGEyZjk5MTYw
Li45NjI1ZmE5NTAzZTdiZWJjNzE5ZmM0YjM3YTYzYzM4ZDc0NTAzMDhhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0
YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFt
aW5nQVZGT2JqQy5tbQpAQCAtMTQ5NCw3ICsxNDk0LDcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Np
b25GYWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnVwZGF0ZUtleVN0YXR1c2VzKHN0ZDo6b3B0aW9u
YWwKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fa2V5U3RhdHVzZXMuc3dhcChrZXlTdGF0dXNl
cyk7CisgICAgbV9rZXlTdGF0dXNlcyA9IFdURk1vdmUoa2V5U3RhdHVzZXMpOwogCiAgICAgbV9p
bnN0YW5jZS0+c2Vzc2lvbktleVN0YXR1c2VzQ2hhbmdlZCgqdGhpcyk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9JbWFn
ZURlY29kZXJBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVyQVZGT2JqQy5tbQppbmRleCA1NjNhZjE5MjRkOWFm
MzU5ZTkzMGVmNjRiYWUzMjNmYzA0MWRlODdhLi5hZDdmNDUxMDFjMDZhMTg4OGMwMDhmYWVkNGE5
MTkwNTYxMzgyOTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVjb2RlckFW
Rk9iakMubW0KQEAgLTUzNSwxMyArNTM1LDEwIEBAIFZlY3RvcjxJbWFnZURlY29kZXI6OkZyYW1l
SW5mbz4gSW1hZ2VEZWNvZGVyQVZGT2JqQzo6ZnJhbWVJbmZvcygpIGNvbnN0CiAgICAgaWYgKG1f
c2FtcGxlRGF0YS5lbXB0eSgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgVmVjdG9yPElt
YWdlRGVjb2Rlcjo6RnJhbWVJbmZvPiBpbmZvczsKLSAgICBmb3IgKGF1dG8mIHNhbXBsZSA6IG1f
c2FtcGxlRGF0YS5wcmVzZW50YXRpb25PcmRlcigpKSB7CisgICAgcmV0dXJuIFdURjo6bWFwKG1f
c2FtcGxlRGF0YS5wcmVzZW50YXRpb25PcmRlcigpLCBbXShhdXRvJiBzYW1wbGUpIHsKICAgICAg
ICAgYXV0byogaW1hZ2VTYW1wbGUgPSAoSW1hZ2VEZWNvZGVyQVZGT2JqQ1NhbXBsZSopc2FtcGxl
LnNlY29uZC5nZXQoKTsKLSAgICAgICAgaW5mb3MuYXBwZW5kKHsgaW1hZ2VTYW1wbGUtPmhhc0Fs
cGhhKCksIFNlY29uZHMoaW1hZ2VTYW1wbGUtPmR1cmF0aW9uKCkudG9Eb3VibGUoKSl9KTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gaW5mb3M7CisgICAgICAgIHJldHVybiBJbWFnZURlY29kZXI6OkZy
YW1lSW5mbyB7IGltYWdlU2FtcGxlLT5oYXNBbHBoYSgpLCBTZWNvbmRzKGltYWdlU2FtcGxlLT5k
dXJhdGlvbigpLnRvRG91YmxlKCkpIH07CisgICAgfSk7CiB9CiAKIGJvb2wgSW1hZ2VEZWNvZGVy
QVZGT2JqQzo6ZnJhbWVBbGxvd1N1YnNhbXBsaW5nQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9Tb3VyY2VCdWZmZXJQYXJzZXJBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUGFyc2VyQVZGT2Jq
Qy5tbQppbmRleCBhYTE1ODQwNGIxMGU0NDRhZjZlNWVkZGM4ZGFkNmJhOTZlZDVjYjIyLi5lNjFi
MTQ3ZjYzYzVmNDU3Mjc1ZjYwNTAzZTM3YThiNTJkMThlM2EzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQ
YXJzZXJBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclBhcnNlckFWRk9iakMubW0KQEAgLTI5NywxNiAr
Mjk3LDE0IEBAIHZvaWQgU291cmNlQnVmZmVyUGFyc2VyQVZGT2JqQzo6ZGlkUGFyc2VTdHJlYW1E
YXRhQXNBc3NldChBVkFzc2V0KiBhc3NldCkKIAogICAgICAgICAgICAgaWYgKFt0cmFjayBoYXNN
ZWRpYUNoYXJhY3RlcmlzdGljOkFWTWVkaWFDaGFyYWN0ZXJpc3RpY1Zpc3VhbF0pIHsKICAgICAg
ICAgICAgICAgICBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21l
bnQ6OlZpZGVvVHJhY2tJbmZvcm1hdGlvbiBpbmZvOwotICAgICAgICAgICAgICAgIGF1dG8gdmlk
ZW9UcmFjayA9IFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjcmVhdGUodHJh
Y2spOwotICAgICAgICAgICAgICAgIGluZm8udHJhY2sgPSB2aWRlb1RyYWNrLmNvcHlSZWYoKTsK
KyAgICAgICAgICAgICAgICBpbmZvLnRyYWNrID0gVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakM6OmNyZWF0ZSh0cmFjayk7CiAgICAgICAgICAgICAgICAgaW5mby5kZXNjcmlwdGlv
biA9IE1lZGlhRGVzY3JpcHRpb25BVkZPYmpDOjpjcmVhdGUodHJhY2spOwotICAgICAgICAgICAg
ICAgIHNlZ21lbnQudmlkZW9UcmFja3MuYXBwZW5kKGluZm8pOworICAgICAgICAgICAgICAgIHNl
Z21lbnQudmlkZW9UcmFja3MuYXBwZW5kKFdURk1vdmUoaW5mbykpOwogICAgICAgICAgICAgfSBl
bHNlIGlmIChbdHJhY2sgaGFzTWVkaWFDaGFyYWN0ZXJpc3RpYzpBVk1lZGlhQ2hhcmFjdGVyaXN0
aWNBdWRpYmxlXSkgewogICAgICAgICAgICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6
OkluaXRpYWxpemF0aW9uU2VnbWVudDo6QXVkaW9UcmFja0luZm9ybWF0aW9uIGluZm87Ci0gICAg
ICAgICAgICAgICAgYXV0byBhdWRpb1RyYWNrID0gQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakM6OmNyZWF0ZSh0cmFjayk7Ci0gICAgICAgICAgICAgICAgaW5mby50cmFjayA9IGF1
ZGlvVHJhY2suY29weVJlZigpOworICAgICAgICAgICAgICAgIGluZm8udHJhY2sgPSBBdWRpb1Ry
YWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6Y3JlYXRlKHRyYWNrKTsKICAgICAgICAgICAg
ICAgICBpbmZvLmRlc2NyaXB0aW9uID0gTWVkaWFEZXNjcmlwdGlvbkFWRk9iakM6OmNyZWF0ZSh0
cmFjayk7Ci0gICAgICAgICAgICAgICAgc2VnbWVudC5hdWRpb1RyYWNrcy5hcHBlbmQoaW5mbyk7
CisgICAgICAgICAgICAgICAgc2VnbWVudC5hdWRpb1RyYWNrcy5hcHBlbmQoV1RGTW92ZShpbmZv
KSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIEZJWE1FKDEyNTE2MSkgICAgOiBB
ZGQgVGV4dFRyYWNrIHN1cHBvcnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQppbmRleCA4
NTQyMWUzZGU3MDljZTE1OWM0OTRiNDBmYjhkMWFkMjM1OTNjM2JiLi5jYjJkMGJlODk3MDQ2Yjdm
ZjlmMzI3NmM5NzY3OWFmYjRmMDEyYWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1t
CkBAIC02OCwxMSArNjgsMTAgQEAgVmVjdG9yPEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRWYXJpYXRp
b25BeGlzPiBGb250UGxhdGZvcm1EYXRhOjp2YXJpYXRpb25BeGVzKFNob3UKICAgICBpZiAoIXBs
YXRmb3JtRm9udCkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAKLSAgICBWZWN0b3I8Rm9udFZh
cmlhdGlvbkF4aXM+IHJlc3VsdHM7Ci0gICAgZm9yIChhdXRvJiBbdGFnLCB2YWx1ZXNdIDogZGVm
YXVsdFZhcmlhdGlvblZhbHVlcyhwbGF0Zm9ybUZvbnQsIHNob3VsZExvY2FsaXplQXhpc05hbWVz
KSkKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQoRm9udFBsYXRmb3JtRGF0YTo6Rm9udFZhcmlhdGlv
bkF4aXModmFsdWVzLmF4aXNOYW1lLCBTdHJpbmcodGFnLmRhdGEoKSwgdGFnLnNpemUoKSksIHZh
bHVlcy5kZWZhdWx0VmFsdWUsIHZhbHVlcy5taW5pbXVtVmFsdWUsIHZhbHVlcy5tYXhpbXVtVmFs
dWUpKTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0czsKKyAgICByZXR1cm4gV1RGOjptYXAoZGVm
YXVsdFZhcmlhdGlvblZhbHVlcyhwbGF0Zm9ybUZvbnQsIHNob3VsZExvY2FsaXplQXhpc05hbWVz
KSwgW10oYXV0byYmIGVudHJ5KSB7CisgICAgICAgIGF1dG8mIFt0YWcsIHZhbHVlc10gPSBlbnRy
eTsKKyAgICAgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRWYXJpYXRpb25BeGlzIHsg
dmFsdWVzLmF4aXNOYW1lLCBTdHJpbmcodGFnLmRhdGEoKSwgdGFnLnNpemUoKSksIHZhbHVlcy5k
ZWZhdWx0VmFsdWUsIHZhbHVlcy5taW5pbXVtVmFsdWUsIHZhbHVlcy5tYXhpbXVtVmFsdWUgfTsK
KyAgICB9KTsKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
UGFzdGVib2FyZE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJk
TWFjLm1tCmluZGV4IGJhOGVhMWViNDQ4YTkyMWUzMGQzYWU2YTljNzdlODgyMzNhYmM1M2IuLmEy
YzI1MGFhMmJlZjhkZTk2NGJhZjA5MjQwZDVlMGVjNDE1MGVmODQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCkBAIC03MDIsMTAgKzcwMiw3IEBAIEFM
TE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCiAgICAgICAgIE5TVVJMICp1cmwgPSBb
TlNVUkwgVVJMV2l0aFN0cmluZzpjb2NvYURhdGFdOwogICAgICAgICBpZiAoW3VybCBpc0ZpbGVV
UkxdKQogICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVz
OwotICAgICAgICB0eXBlcy5hcHBlbmQoY29jb2FUeXBlKTsKLSAgICAgICAgcGxhdGZvcm1TdHJh
dGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRUeXBlcyh0eXBlcywgbV9wYXN0ZWJv
YXJkTmFtZSwgY29udGV4dCgpKTsKKyAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3Rl
Ym9hcmRTdHJhdGVneSgpLT5zZXRUeXBlcyh7IGNvY29hVHlwZSB9LCBtX3Bhc3RlYm9hcmROYW1l
LCBjb250ZXh0KCkpOwogICAgICAgICBtX2NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVz
KCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRTdHJpbmdGb3JUeXBlKGNvY29hRGF0YSwgY29j
b2FUeXBlLCBtX3Bhc3RlYm9hcmROYW1lLCBjb250ZXh0KCkpOwogCiAgICAgICAgIHJldHVybjsK
QEAgLTcxNCw5ICs3MTEsNyBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIAog
ICAgIGlmICghY29jb2FUeXBlLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBldmVyeXRoaW5nIGVs
c2Ugd2Uga25vdyBvZiBnb2VzIG9uIHRoZSBwYm9hcmQgYXMgYSBzdHJpbmcKLSAgICAgICAgVmVj
dG9yPFN0cmluZz4gdHlwZXM7Ci0gICAgICAgIHR5cGVzLmFwcGVuZChjb2NvYVR5cGUpOwotICAg
ICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmFkZFR5cGVz
KHR5cGVzLCBtX3Bhc3RlYm9hcmROYW1lLCBjb250ZXh0KCkpOworICAgICAgICBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmFkZFR5cGVzKHsgY29jb2FUeXBlIH0s
IG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQoKSk7CiAgICAgICAgIG1fY2hhbmdlQ291bnQgPSBw
bGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFN0cmluZ0ZvclR5
cGUoY29jb2FEYXRhLCBjb2NvYVR5cGUsIG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQoKSk7CiAg
ICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
UmVhbHRpbWVWaWRlb0NhcHR1cmVTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vUmVhbHRpbWVWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCmluZGV4IDNlM2Y0MWEx
YzU4MDdlNmNkMzU5ZGUzZGYyNmFlNzJkNTUxY2Q1ODIuLjc3ZDMyNjY1NmQ1Y2JjNWFlZmNkNDE3
YTE3YTg3YTQ2ZjcxMjI3YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL1JlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZVZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAK
QEAgLTc1LDExICs3NSw5IEBAIFZlY3RvcjxWaWRlb1ByZXNldERhdGE+IFJlYWx0aW1lVmlkZW9D
YXB0dXJlU291cmNlOjpwcmVzZXRzRGF0YSgpCiAKIHZvaWQgUmVhbHRpbWVWaWRlb0NhcHR1cmVT
b3VyY2U6OnNldFN1cHBvcnRlZFByZXNldHMoVmVjdG9yPFZpZGVvUHJlc2V0RGF0YT4mJiBwcmVz
ZXREYXRhKQogewotICAgIFZlY3RvcjxSZWY8VmlkZW9QcmVzZXQ+PiBwcmVzZXRzOwotCi0gICAg
Zm9yIChhdXRvJiBkYXRhIDogcHJlc2V0RGF0YSkKLSAgICAgICAgcHJlc2V0cy5hcHBlbmQoVmlk
ZW9QcmVzZXQ6OmNyZWF0ZShXVEZNb3ZlKGRhdGEpKSk7Ci0KKyAgICBhdXRvIHByZXNldHMgPSBX
VEY6Om1hcChXVEZNb3ZlKHByZXNldERhdGEpLCBbXShhdXRvJiYgZGF0YSkgeworICAgICAgICBy
ZXR1cm4gVmlkZW9QcmVzZXQ6OmNyZWF0ZShXVEZNb3ZlKGRhdGEpKTsKKyAgICB9KTsKICAgICBz
ZXRTdXBwb3J0ZWRQcmVzZXRzKFdURk1vdmUocHJlc2V0cykpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcAppbmRleCA2
N2E3NjI5NWQ4NWYzOTFjODNiMjQwMGU2ZDFmZTU3OWNjZGVkODhmLi42MjM2MzZhYzJhYmQ2ODM4
NDE0ZGM4ZjFmOTI2Y2VkNWM0N2NjYTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKQEAgLTE0MSwxMCArMTQxLDggQEAg
dm9pZCBCbG9iUmVnaXN0cnlJbXBsOjpyZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiB1cmwsIFZl
Y3RvcjxCbG9iUGFydD4mJiBibG9iUGEKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgQmxvYlBhcnQ6OlR5cGU6OkJsb2I6IHsKLSAgICAgICAgICAgIGlmIChhdXRv
IGJsb2IgPSBtX2Jsb2JzLmdldChwYXJ0LnVybCgpLnN0cmluZygpKSkgewotICAgICAgICAgICAg
ICAgIGZvciAoY29uc3QgQmxvYkRhdGFJdGVtJiBpdGVtIDogYmxvYi0+aXRlbXMoKSkKLSAgICAg
ICAgICAgICAgICAgICAgYmxvYkRhdGEtPm1faXRlbXMuYXBwZW5kKGl0ZW0pOwotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKGF1dG8gYmxvYiA9IG1fYmxvYnMuZ2V0KHBhcnQudXJsKCku
c3RyaW5nKCkpKQorICAgICAgICAgICAgICAgIGJsb2JEYXRhLT5tX2l0ZW1zLmFwcGVuZFZlY3Rv
cihibG9iLT5pdGVtcygpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IH0KQEAgLTMyOCw3ICszMjYsNyBAQCB2b2lkIEJsb2JSZWdpc3RyeUltcGw6OndyaXRlQmxvYnNU
b1RlbXBvcmFyeUZpbGVzRm9ySW5kZXhlZERCKGNvbnN0IFZlY3RvcjxTdHJpbgogICAgICAgICAg
ICAgICAgIGZpbGVQYXRocy5jbGVhcigpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZmlsZVBhdGhzLmFwcGVuZCh0ZW1wRmlsZVBhdGguaXNvbGF0
ZWRDb3B5KCkpOworICAgICAgICAgICAgZmlsZVBhdGhzLmFwcGVuZChXVEZNb3ZlKHRlbXBGaWxl
UGF0aCkuaXNvbGF0ZWRDb3B5KCkpOwogICAgICAgICB9CiAKICAgICAgICAgY2FsbE9uTWFpblRo
cmVhZChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgZmls
ZVBhdGhzID0gV1RGTW92ZShmaWxlUGF0aHMpXSAoKSBtdXRhYmxlIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IDg1MzBlMzM1
NWYyZDZiOGQ3ZmZiNmVkZjgzZDYwOGJjYTRiOWY1NTUuLjlhYjk5OGU0MWNiMDhjZjBiNmY5MGYx
MGYxM2M0Yjg0NTdlYzkzOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtMjA4NiwxMCArMjA4Niw4IEBAIHZvaWQgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OmRyYXdCb3hTaWRlRnJvbVBhdGgoR3JhcGhpY3NDb250ZXh0JiBncmFw
aGljc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgZ2FwTGVuZ3RoICs9IChkYXNoTGVuZ3RoICAv
IG51bWJlck9mR2Fwcyk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIERhc2hBcnJheSBs
aW5lRGFzaDsKLSAgICAgICAgICAgIGxpbmVEYXNoLmFwcGVuZChkYXNoTGVuZ3RoKTsKLSAgICAg
ICAgICAgIGxpbmVEYXNoLmFwcGVuZChnYXBMZW5ndGgpOwotICAgICAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LnNldExpbmVEYXNoKGxpbmVEYXNoLCBkYXNoTGVuZ3RoKTsKKyAgICAgICAgICAgIGF1
dG8gbGluZURhc2ggPSBEYXNoQXJyYXk6OmZyb20oZGFzaExlbmd0aCwgZ2FwTGVuZ3RoKTsKKyAg
ICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRMaW5lRGFzaChXVEZNb3ZlKGxpbmVEYXNoKSwg
ZGFzaExlbmd0aCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBzdHJv
a2luZyB0aGUgYm9yZGVyIHBhdGggY2F1c2VzIGlzc3VlcyB3aXRoIHRpZ2h0IGNvcm5lcnM6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4
IGRhOGRmMmU5MjNiMzU0NmUwZjNkNGM1YjMwNWVmZTY1NDA3ZTc4NjEuLjQyNWM2OWMzMTQxYmY3
NGZhNTcyZGYyMGJiOGEwZTQwNTc3YWI4MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC0xOTU2LDkgKzE5NTYsNyBAQCB2b2lkIFJl
bmRlckxheWVyQmFja2luZzo6Y29ubmVjdENsaXBwaW5nU3RhY2tMYXllcnMoTGF5ZXJBbmNlc3Rv
ckNsaXBwaW5nU3RhY2smCiAgICAgYXV0byYgY2xpcHBpbmdFbnRyeVN0YWNrID0gY2xpcHBpbmdT
dGFjay5zdGFjaygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjbGlwcGluZ0VudHJ5
U3RhY2suc2l6ZSgpIC0gMTsgKytpKSB7CiAgICAgICAgIGF1dG8mIGVudHJ5ID0gY2xpcHBpbmdF
bnRyeVN0YWNrLmF0KGkpOwotICAgICAgICBWZWN0b3I8UmVmPEdyYXBoaWNzTGF5ZXI+PiBjaGls
ZHJlbjsKLSAgICAgICAgY2hpbGRyZW4uYXBwZW5kKCpjbGlwcGluZ0VudHJ5U3RhY2suYXQoaSAr
IDEpLmNsaXBwaW5nTGF5ZXIpOwotICAgICAgICBlbnRyeS5jbGlwcGluZ0xheWVyLT5zZXRDaGls
ZHJlbihXVEZNb3ZlKGNoaWxkcmVuKSk7CisgICAgICAgIGVudHJ5LmNsaXBwaW5nTGF5ZXItPnNl
dENoaWxkcmVuKHsgUmVmIHsgKmNsaXBwaW5nRW50cnlTdGFjay5hdChpICsgMSkuY2xpcHBpbmdM
YXllciB9IH0pOwogICAgIH0KIAogICAgIGNsaXBwaW5nRW50cnlTdGFjay5sYXN0KCkuY2xpcHBp
bmdMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXggNDA4N2EzNjhmOWZkN2ZkY2E5
ZTI4YTYzMjkyYzZjMmRlNzRjMmMzNi4uOTViMGY3MTM4NDViNWMxMzgzMWVkOTQxN2ZiZDI4ZWIz
ZjMwNjliNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5jcHAKQEAgLTE0OTEsOSArMTQ5MSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjphZGp1c3RPdmVyZmxvd1Njcm9sbGJhckNvbnRhaW5lckxheWVycyhSZW5kZXJMYXll
ciYKICAgICAgICAgICAgIG92ZXJmbG93QmFja2luZy0+ZW5zdXJlT3ZlcmZsb3dDb250cm9sc0hv
c3RMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjaygmc3RhY2tpbmdDb250ZXh0TGF5ZXIpOwogCiAg
ICAgICAgIGlmIChhdXRvKiBvdmVyZmxvd0NvbnRyb2xzQW5jZXN0b3JDbGlwcGluZ1N0YWNrID0g
b3ZlcmZsb3dCYWNraW5nLT5vdmVyZmxvd0NvbnRyb2xzSG9zdExheWVyQW5jZXN0b3JDbGlwcGlu
Z1N0YWNrKCkpIHsKLSAgICAgICAgICAgIFZlY3RvcjxSZWY8R3JhcGhpY3NMYXllcj4+IGNoaWxk
cmVuOwotICAgICAgICAgICAgY2hpbGRyZW4uYXBwZW5kKCpvdmVyZmxvd0NvbnRhaW5lckxheWVy
KTsKLSAgICAgICAgICAgIG92ZXJmbG93Q29udHJvbHNBbmNlc3RvckNsaXBwaW5nU3RhY2stPmxh
c3RDbGlwcGluZ0xheWVyKCktPnNldENoaWxkcmVuKFdURk1vdmUoY2hpbGRyZW4pKTsKKyAgICAg
ICAgICAgIG92ZXJmbG93Q29udHJvbHNBbmNlc3RvckNsaXBwaW5nU3RhY2stPmxhc3RDbGlwcGlu
Z0xheWVyKCktPnNldENoaWxkcmVuKHsgUmVmIHsgKm92ZXJmbG93Q29udGFpbmVyTGF5ZXIgfSB9
KTsKICAgICAgICAgICAgIG92ZXJmbG93Q29udGFpbmVyTGF5ZXIgPSBvdmVyZmxvd0NvbnRyb2xz
QW5jZXN0b3JDbGlwcGluZ1N0YWNrLT5maXJzdENsaXBwaW5nTGF5ZXIoKTsKICAgICAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KaW5kZXggOWUxMDhm
OGI0ZmYyNjE3OTY4OTY0ZmExMzcwMTUxOWJiYzI0NTJjNC4uODc2NjdkZTJkZWQyOTVkOTM1ODAy
YjMzODkyYTBjMzIxYzdlMzJlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZU1hYy5tbQpAQCAtMjczMSwxMCArMjczMSw5IEBAIHN0YXRpYyB2b2lkIHBhaW50QXR0YWNo
bWVudFRpdGxlQmFja2dyb3VuZChjb25zdCBSZW5kZXJBdHRhY2htZW50JiBhdHRhY2htZW50LCBH
CiAgICAgaWYgKGxheW91dC5saW5lcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFZlY3RvcjxGbG9hdFJlY3Q+IGJhY2tncm91bmRSZWN0czsKLQotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGF5b3V0LmxpbmVzLnNpemUoKTsgKytpKQotICAgICAgICBiYWNrZ3JvdW5kUmVj
dHMuYXBwZW5kKGxheW91dC5saW5lc1tpXS5iYWNrZ3JvdW5kUmVjdCk7CisgICAgYXV0byBiYWNr
Z3JvdW5kUmVjdHMgPSBsYXlvdXQubGluZXMubWFwKFtdKGF1dG8mIGxpbmUpIHsKKyAgICAgICAg
cmV0dXJuIGxpbmUuYmFja2dyb3VuZFJlY3Q7CisgICAgfSk7CiAKICAgICBDb2xvciBiYWNrZ3Jv
dW5kQ29sb3I7CiAgICAgaWYgKGF0dGFjaG1lbnQuZnJhbWUoKS5zZWxlY3Rpb24oKS5pc0ZvY3Vz
ZWRBbmRBY3RpdmUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggZmU1NTliZDcwYjFkMGNmNGIxYzVhNWIxYzkw
YTI5NjM1ZThiMjczMS4uOTI3NmI5M2M3MzEyNjFjMWYyZmZiZWM0OWYxZWNjZTczY2ExYmI1YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNU
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVB
c1RleHQuY3BwCkBAIC0xOTcsMTEgKzE5Nyw5IEBAIHN0YXRpYyB2b2lkIHdyaXRlU1ZHU3Ryb2tl
UGFpbnRpbmdSZXNvdXJjZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyRWxlbWVudCYKICAg
ICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0aENvbnRleHQoJnNoYXBlKTsKICAgICBkb3VibGUgZGFz
aE9mZnNldCA9IGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3ZnU3R5bGUuc3Ryb2tlRGFz
aE9mZnNldCgpKTsKICAgICBkb3VibGUgc3Ryb2tlV2lkdGggPSBsZW5ndGhDb250ZXh0LnZhbHVl
Rm9yTGVuZ3RoKHN0eWxlLnN0cm9rZVdpZHRoKCkpOwotICAgIGNvbnN0IGF1dG8mIGRhc2hlcyA9
IHN2Z1N0eWxlLnN0cm9rZURhc2hBcnJheSgpOwotCi0gICAgRGFzaEFycmF5IGRhc2hBcnJheTsK
LSAgICBmb3IgKGF1dG8mIGxlbmd0aCA6IGRhc2hlcykKLSAgICAgICAgZGFzaEFycmF5LmFwcGVu
ZChsZW5ndGgudmFsdWUobGVuZ3RoQ29udGV4dCkpOworICAgIGF1dG8gZGFzaEFycmF5ID0gc3Zn
U3R5bGUuc3Ryb2tlRGFzaEFycmF5KCkubWFwKFsmXShhdXRvJiBsZW5ndGgpIC0+IERhc2hBcnJh
eUVsZW1lbnQgeworICAgICAgICByZXR1cm4gbGVuZ3RoLnZhbHVlKGxlbmd0aENvbnRleHQpOwor
ICAgIH0pOwogCiAgICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJvcGFjaXR5Iiwgc3ZnU3R5bGUu
c3Ryb2tlT3BhY2l0eSgpLCAxLjBmKTsKICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgInN0cm9r
ZSB3aWR0aCIsIHN0cm9rZVdpZHRoLCAxLjApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0Q2h1bmsuY3BwCmluZGV4IGE2M2ViODBhNzc5ZDc3NjhkYTQ3NzJiYjBkNmFm
ZTE5ZTM1MjFiYmQuLjg0ODEzNmM4YTUzOGM2ZWM4ZWNjMTZkNWJmMDFiZmRlMmRkYjM5MTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5jcHAKQEAgLTcw
LDggKzcwLDcgQEAgU1ZHVGV4dENodW5rOjpTVkdUZXh0Q2h1bmsoY29uc3QgVmVjdG9yPFNWR0lu
bGluZVRleHRCb3gqPiYgbGluZUxheW91dEJveGVzLCB1bnMKICAgICAgICAgfQogICAgIH0KIAot
ICAgIGZvciAodW5zaWduZWQgaSA9IGZpcnN0OyBpIDwgbGltaXQ7ICsraSkKLSAgICAgICAgbV9i
b3hlcy5hcHBlbmQobGluZUxheW91dEJveGVzW2ldKTsKKyAgICBtX2JveGVzLmFwcGVuZCgmbGlu
ZUxheW91dEJveGVzW2ZpcnN0XSwgbGltaXQgLSBmaXJzdCk7CiB9CiAKIHVuc2lnbmVkIFNWR1Rl
eHRDaHVuazo6dG90YWxDaGFyYWN0ZXJzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1BhZ2VSdWxlQ29sbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Bh
Z2VSdWxlQ29sbGVjdG9yLmNwcAppbmRleCAyMjk5ZjhjNjM3OWI1MDk0OTJhMWExZmZhNTIzMDZh
MWFhMTY4OWI0Li5lM2RjM2VmYmMyOWI2M2Q3NTIxNDlkYWNiMTEzMWZmYTUyYWNjOTQxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwCkBAIC04NCw4ICs4NCw5
IEBAIHZvaWQgUGFnZVJ1bGVDb2xsZWN0b3I6Om1hdGNoUGFnZVJ1bGVzKFJ1bGVTZXQqIHJ1bGVz
LCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGCiAKICAgICBzdGQ6OnN0YWJsZV9zb3J0KG1hdGNo
ZWRQYWdlUnVsZXMuYmVnaW4oKSwgbWF0Y2hlZFBhZ2VSdWxlcy5lbmQoKSwgY29tcGFyZVBhZ2VS
dWxlcyk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hlZFBhZ2VSdWxlcy5z
aXplKCk7IGkrKykKLSAgICAgICAgbV9yZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zLmFwcGVuZCh7
ICZtYXRjaGVkUGFnZVJ1bGVzW2ldLT5wcm9wZXJ0aWVzKCkgfSk7CisgICAgbV9yZXN1bHQuYXV0
aG9yRGVjbGFyYXRpb25zLnJlc2VydmVDYXBhY2l0eShtX3Jlc3VsdC5hdXRob3JEZWNsYXJhdGlv
bnMuc2l6ZSgpICsgbWF0Y2hlZFBhZ2VSdWxlcy5zaXplKCkpOworICAgIGZvciAoYXV0byogcGFn
ZVJ1bGUgOiBtYXRjaGVkUGFnZVJ1bGVzKQorICAgICAgICBtX3Jlc3VsdC5hdXRob3JEZWNsYXJh
dGlvbnMudW5jaGVja2VkQXBwZW5kKHsgJnBhZ2VSdWxlLT5wcm9wZXJ0aWVzKCkgfSk7CiB9CiAK
IHN0YXRpYyBib29sIGNoZWNrUGFnZVNlbGVjdG9yQ29tcG9uZW50cyhjb25zdCBDU1NTZWxlY3Rv
ciogc2VsZWN0b3IsIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3Ry
aW5nJiBwYWdlTmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRC
dWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcAppbmRl
eCBjYjQ0MGFjOTY2MDUwMDFkODg5MzE3NGVlMzFlZDk4ZDVlMjJhN2NmLi4wNTFkYTFkZDhmYTE2
N2IxOWExMjBjN2IzZjlhZDg1MmNmOWYwYmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9SdWxlU2V0QnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNl
dEJ1aWxkZXIuY3BwCkBAIC0zNzgsOCArMzc4LDkgQEAgdm9pZCBSdWxlU2V0QnVpbGRlcjo6TWVk
aWFRdWVyeUNvbGxlY3Rvcjo6cG9wKGNvbnN0IE1lZGlhUXVlcnlTZXQqIHNldCkKIAogICAgIGlm
ICghZHluYW1pY0NvbnRleHRTdGFjay5sYXN0KCkuYWZmZWN0ZWRSdWxlUG9zaXRpb25zLmlzRW1w
dHkoKSB8fCAhY29sbGVjdER5bmFtaWMpIHsKICAgICAgICAgUnVsZVNldDo6RHluYW1pY01lZGlh
UXVlcnlSdWxlcyBydWxlczsKKyAgICAgICAgcnVsZXMubWVkaWFRdWVyeVNldHMucmVzZXJ2ZUNh
cGFjaXR5KHJ1bGVzLm1lZGlhUXVlcnlTZXRzLnNpemUoKSArIGR5bmFtaWNDb250ZXh0U3RhY2su
c2l6ZSgpKTsKICAgICAgICAgZm9yIChhdXRvJiBjb250ZXh0IDogZHluYW1pY0NvbnRleHRTdGFj
aykKLSAgICAgICAgICAgIHJ1bGVzLm1lZGlhUXVlcnlTZXRzLmFwcGVuZChjb250ZXh0LnNldC5n
ZXQoKSk7CisgICAgICAgICAgICBydWxlcy5tZWRpYVF1ZXJ5U2V0cy51bmNoZWNrZWRBcHBlbmQo
Y29udGV4dC5zZXQuZ2V0KCkpOwogCiAgICAgICAgIGlmIChjb2xsZWN0RHluYW1pYykgewogICAg
ICAgICAgICAgcnVsZXMuYWZmZWN0ZWRSdWxlUG9zaXRpb25zLmFwcGVuZFZlY3RvcihkeW5hbWlj
Q29udGV4dFN0YWNrLmxhc3QoKS5hZmZlY3RlZFJ1bGVQb3NpdGlvbnMpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaAppbmRleCAyZjgzNGRmNjdkODBjYjEz
ZGQ0YzkxNTUxYmFkMTJkYjFiMjNhMjQ5Li43NDY0Zjg0ZDhiZjZiMmIyYTMzMTIzZDU5MmJlMjky
ZjE0Y2MyOGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJD
b252ZXJ0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDb252ZXJ0
ZXIuaApAQCAtMTY5NywxMyArMTY5NywxMiBAQCBpbmxpbmUgVmVjdG9yPEF0b21TdHJpbmc+IEJ1
aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRDb250YWluZXJOYW1lKEJ1aWxkZXJTdGF0ZSYsCiAgICAg
ICAgIEFTU0VSVChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9
PSBDU1NWYWx1ZU5vbmUpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KKyAgICBpZiAoIWlz
PENTU1ZhbHVlTGlzdD4odmFsdWUpKQorICAgICAgICByZXR1cm4geyB9OwogCi0gICAgVmVjdG9y
PEF0b21TdHJpbmc+IHJlc3VsdDsKLSAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsK
LSAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkp
Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihp
dGVtLmdldCgpKS5zdHJpbmdWYWx1ZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICByZXR1cm4gV1RGOjptYXAoZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSksIFtdKGF1dG8m
IGl0ZW0pIC0+IEF0b21TdHJpbmcgeworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KGl0ZW0uZ2V0KCkpLnN0cmluZ1ZhbHVlKCk7CisgICAgfSk7CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXll
clByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBs
YXllclByb3h5LmNwcAppbmRleCAwZWY4MzQyZGQyNjhlZTY4YzMwNDc2MmRhMDU4YmE0ZmJjYmM2
ZTNjLi45NDlmZjMyMDU1NTBiNDhiN2NjNzllNDUwNTE2YTQwNDAyYTRhMzk5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVy
UHJveHkuY3BwCkBAIC04MDUsMTEgKzgwNSw5IEBAIGJvb2wgUmVtb3RlTWVkaWFQbGF5ZXJQcm94
eTo6ZG9lc0hhdmVBdHRyaWJ1dGUoY29uc3QgQXRvbVN0cmluZyYsIEF0b21TdHJpbmcqKSBjCiAj
aWYgRU5BQkxFKEFWRl9DQVBUSU9OUykKIFZlY3RvcjxSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2s+
PiBSZW1vdGVNZWRpYVBsYXllclByb3h5OjpvdXRPZkJhbmRUcmFja1NvdXJjZXMoKQogewotICAg
IFZlY3RvcjxSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2s+PiBzb3VyY2VzOwotICAgIGZvciAoYXV0
byYgZGF0YSA6IG1fY29uZmlndXJhdGlvbi5vdXRPZkJhbmRUcmFja0RhdGEpCi0gICAgICAgIHNv
dXJjZXMuYXBwZW5kKFBsYXRmb3JtVGV4dFRyYWNrOjpjcmVhdGUoV1RGTW92ZShkYXRhKSkpOwot
ICAgIAotICAgIHJldHVybiBzb3VyY2VzOworICAgIHJldHVybiBXVEY6Om1hcChtX2NvbmZpZ3Vy
YXRpb24ub3V0T2ZCYW5kVHJhY2tEYXRhLCBbXShhdXRvJiBkYXRhKSAtPiBSZWZQdHI8UGxhdGZv
cm1UZXh0VHJhY2s+IHsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVGV4dFRyYWNrOjpjcmVhdGUo
V1RGTW92ZShkYXRhKSk7CisgICAgfSk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZVNvdXJjZUJ1ZmZlclByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVTb3VyY2VCdWZmZXJQcm94eS5jcHAK
aW5kZXggMjc5MTY1ZGU2NmFhZmUwMjQ2ODFlMTYxYTAzNWM0YTEwOTU0ZTZlMS4uYmM4ZDAxNjIy
ZGM5ZjExNDFlODU5ZjI0NjJmMzYyODg3OGIyYjVkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZVNvdXJjZUJ1ZmZlclByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlU291cmNlQnVmZmVyUHJveHkuY3BwCkBA
IC03NSwzNSArNzUsMzMgQEAgdm9pZCBSZW1vdGVTb3VyY2VCdWZmZXJQcm94eTo6c291cmNlQnVm
ZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQKIAogICAgIEluaXRpYWxp
emF0aW9uU2VnbWVudEluZm8gc2VnbWVudEluZm87CiAgICAgc2VnbWVudEluZm8uZHVyYXRpb24g
PSBzZWdtZW50LmR1cmF0aW9uOwotICAgIGZvciAoYXV0byYgYXVkaW9UcmFja0luZm8gOiBzZWdt
ZW50LmF1ZGlvVHJhY2tzKSB7Ci0gICAgICAgIGF1dG8gaWRlbnRpZmllciA9IG1fcmVtb3RlTWVk
aWFQbGF5ZXJQcm94eS0+YWRkUmVtb3RlQXVkaW9UcmFja1Byb3h5KCphdWRpb1RyYWNrSW5mby50
cmFjayk7Ci0gICAgICAgIHNlZ21lbnRJbmZvLmF1ZGlvVHJhY2tzLmFwcGVuZCh7IE1lZGlhRGVz
Y3JpcHRpb25JbmZvKCphdWRpb1RyYWNrSW5mby5kZXNjcmlwdGlvbiksIGlkZW50aWZpZXIgfSk7
CiAKKyAgICBzZWdtZW50SW5mby5hdWRpb1RyYWNrcyA9IHNlZ21lbnQuYXVkaW9UcmFja3MubWFw
KFsmXShhdXRvJiBhdWRpb1RyYWNrSW5mbykgeworICAgICAgICBhdXRvIGlkZW50aWZpZXIgPSBt
X3JlbW90ZU1lZGlhUGxheWVyUHJveHktPmFkZFJlbW90ZUF1ZGlvVHJhY2tQcm94eSgqYXVkaW9U
cmFja0luZm8udHJhY2spOwogICAgICAgICBBU1NFUlQoIW1fdHJhY2tJZHMuY29udGFpbnMoaWRl
bnRpZmllcikpOwogICAgICAgICBBU1NFUlQoIW1fbWVkaWFEZXNjcmlwdGlvbnMuY29udGFpbnMo
aWRlbnRpZmllcikpOwogICAgICAgICBtX3RyYWNrSWRzLmFkZChpZGVudGlmaWVyLCBhdWRpb1Ry
YWNrSW5mby50cmFjay0+aWQoKSk7CiAgICAgICAgIG1fbWVkaWFEZXNjcmlwdGlvbnMuYWRkKGlk
ZW50aWZpZXIsICphdWRpb1RyYWNrSW5mby5kZXNjcmlwdGlvbik7Ci0gICAgfQorICAgICAgICBy
ZXR1cm4gSW5pdGlhbGl6YXRpb25TZWdtZW50SW5mbzo6VHJhY2tJbmZvcm1hdGlvbiB7IE1lZGlh
RGVzY3JpcHRpb25JbmZvKCphdWRpb1RyYWNrSW5mby5kZXNjcmlwdGlvbiksIGlkZW50aWZpZXIg
fTsKKyAgICB9KTsKIAotICAgIGZvciAoYXV0byYgdmlkZW9UcmFja0luZm8gOiBzZWdtZW50LnZp
ZGVvVHJhY2tzKSB7CisgICAgc2VnbWVudEluZm8udmlkZW9UcmFja3MgPSBzZWdtZW50LnZpZGVv
VHJhY2tzLm1hcChbJl0oYXV0byYgdmlkZW9UcmFja0luZm8pIHsKICAgICAgICAgYXV0byBpZGVu
dGlmaWVyID0gbV9yZW1vdGVNZWRpYVBsYXllclByb3h5LT5hZGRSZW1vdGVWaWRlb1RyYWNrUHJv
eHkoKnZpZGVvVHJhY2tJbmZvLnRyYWNrKTsKLSAgICAgICAgc2VnbWVudEluZm8udmlkZW9UcmFj
a3MuYXBwZW5kKHsgTWVkaWFEZXNjcmlwdGlvbkluZm8oKnZpZGVvVHJhY2tJbmZvLmRlc2NyaXB0
aW9uKSwgaWRlbnRpZmllciB9KTsKLQogICAgICAgICBBU1NFUlQoIW1fdHJhY2tJZHMuY29udGFp
bnMoaWRlbnRpZmllcikpOwogICAgICAgICBBU1NFUlQoIW1fbWVkaWFEZXNjcmlwdGlvbnMuY29u
dGFpbnMoaWRlbnRpZmllcikpOwogICAgICAgICBtX3RyYWNrSWRzLmFkZChpZGVudGlmaWVyLCB2
aWRlb1RyYWNrSW5mby50cmFjay0+aWQoKSk7CiAgICAgICAgIG1fbWVkaWFEZXNjcmlwdGlvbnMu
YWRkKGlkZW50aWZpZXIsICp2aWRlb1RyYWNrSW5mby5kZXNjcmlwdGlvbik7Ci0gICAgfQorICAg
ICAgICByZXR1cm4gSW5pdGlhbGl6YXRpb25TZWdtZW50SW5mbzo6VHJhY2tJbmZvcm1hdGlvbiB7
IE1lZGlhRGVzY3JpcHRpb25JbmZvKCp2aWRlb1RyYWNrSW5mby5kZXNjcmlwdGlvbiksIGlkZW50
aWZpZXIgfTsKKyAgICB9KTsKIAotICAgIGZvciAoYXV0byYgdGV4dFRyYWNrSW5mbyA6IHNlZ21l
bnQudGV4dFRyYWNrcykgeworICAgIHNlZ21lbnRJbmZvLnRleHRUcmFja3MgPSBzZWdtZW50LnRl
eHRUcmFja3MubWFwKFsmXShhdXRvJiB0ZXh0VHJhY2tJbmZvKSB7CiAgICAgICAgIGF1dG8gaWRl
bnRpZmllciA9IG1fcmVtb3RlTWVkaWFQbGF5ZXJQcm94eS0+YWRkUmVtb3RlVGV4dFRyYWNrUHJv
eHkoKnRleHRUcmFja0luZm8udHJhY2spOwotICAgICAgICBzZWdtZW50SW5mby50ZXh0VHJhY2tz
LmFwcGVuZCh7IE1lZGlhRGVzY3JpcHRpb25JbmZvKCp0ZXh0VHJhY2tJbmZvLmRlc2NyaXB0aW9u
KSwgaWRlbnRpZmllciB9KTsKLQogICAgICAgICBBU1NFUlQoIW1fdHJhY2tJZHMuY29udGFpbnMo
aWRlbnRpZmllcikpOwogICAgICAgICBBU1NFUlQoIW1fbWVkaWFEZXNjcmlwdGlvbnMuY29udGFp
bnMoaWRlbnRpZmllcikpOwogICAgICAgICBtX3RyYWNrSWRzLmFkZChpZGVudGlmaWVyLCB0ZXh0
VHJhY2tJbmZvLnRyYWNrLT5pZCgpKTsKICAgICAgICAgbV9tZWRpYURlc2NyaXB0aW9ucy5hZGQo
aWRlbnRpZmllciwgKnRleHRUcmFja0luZm8uZGVzY3JpcHRpb24pOwotICAgIH0KKyAgICAgICAg
cmV0dXJuIEluaXRpYWxpemF0aW9uU2VnbWVudEluZm86OlRyYWNrSW5mb3JtYXRpb24geyBNZWRp
YURlc2NyaXB0aW9uSW5mbygqdGV4dFRyYWNrSW5mby5kZXNjcmlwdGlvbiksIGlkZW50aWZpZXIg
fTsKKyAgICB9KTsKIAogICAgIGlmICghbV9jb25uZWN0aW9uVG9XZWJQcm9jZXNzKSB7CiAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC0zMzgsMTYgKzMzNiwxMSBAQCB2b2lkIFJlbW90
ZVNvdXJjZUJ1ZmZlclByb3h5OjpzZWVrVG9UaW1lKGNvbnN0IE1lZGlhVGltZSYgbWVkaWFUaW1l
KQogCiB2b2lkIFJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5Ojp1cGRhdGVUcmFja0lkcyhWZWN0b3I8
c3RkOjpwYWlyPFRyYWNrUHJpdmF0ZVJlbW90ZUlkZW50aWZpZXIsIFRyYWNrUHJpdmF0ZVJlbW90
ZUlkZW50aWZpZXI+PiYmIGlkZW50aWZpZXJQYWlycykKIHsKLSAgICBWZWN0b3I8c3RkOjpwYWly
PEF0b21TdHJpbmcsIEF0b21TdHJpbmc+PiB0cmFja0lkUGFpcnM7Ci0KLSAgICBmb3IgKGF1dG8m
IGlkZW50aWZpZXJQYWlyIDogaWRlbnRpZmllclBhaXJzKSB7CisgICAgYXV0byB0cmFja0lkUGFp
cnMgPSBpZGVudGlmaWVyUGFpcnMubWFwKFsmXShhdXRvJiBpZGVudGlmaWVyUGFpcikgewogICAg
ICAgICBBU1NFUlQobV90cmFja0lkcy5jb250YWlucyhpZGVudGlmaWVyUGFpci5maXJzdCkpOwog
ICAgICAgICBBU1NFUlQobV90cmFja0lkcy5jb250YWlucyhpZGVudGlmaWVyUGFpci5zZWNvbmQp
KTsKLQotICAgICAgICBhdXRvIG9sZElkID0gbV90cmFja0lkcy50YWtlKGlkZW50aWZpZXJQYWly
LmZpcnN0KTsKLSAgICAgICAgYXV0byBuZXdJZCA9IG1fdHJhY2tJZHMuZ2V0KGlkZW50aWZpZXJQ
YWlyLnNlY29uZCk7Ci0gICAgICAgIHRyYWNrSWRQYWlycy5hcHBlbmQoc3RkOjptYWtlX3BhaXIo
b2xkSWQsIG5ld0lkKSk7Ci0gICAgfQorICAgICAgICByZXR1cm4gc3RkOjpwYWlyIHsgbV90cmFj
a0lkcy50YWtlKGlkZW50aWZpZXJQYWlyLmZpcnN0KSwgbV90cmFja0lkcy5nZXQoaWRlbnRpZmll
clBhaXIuc2Vjb25kKSB9OworICAgIH0pOwogCiAgICAgaWYgKCF0cmFja0lkUGFpcnMuaXNFbXB0
eSgpKQogICAgICAgICBtX3NvdXJjZUJ1ZmZlclByaXZhdGUtPnVwZGF0ZVRyYWNrSWRzKFdURk1v
dmUodHJhY2tJZFBhaXJzKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuY3BwCmluZGV4IDcwYjVhZmRhNTI2ZTk5MDliOTYyZDcxMjEzZDg1YjYwYjUzNzE4
MWQuLmU4NzZlYzM3NzcxZmY0MDBjYWE4MzRjZWZhZTk1NjI1NGNjM2ZkOTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xh
c3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCkBAIC04NTMsOSArODUz
LDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1lcmdlU3RhdGlzdGlj
Rm9yVGVzdGluZyhjb25zdCBSZWdpc3RyYWJsZUQKIAogICAgICAgICAgICAgc3RhdGlzdGljLnN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgPSBXVEZNb3ZlKHRvcEZyYW1lRG9tYWlucyk7CiAK
LSAgICAgICAgICAgIFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBzdGF0aXN0aWNzOwot
ICAgICAgICAgICAgc3RhdGlzdGljcy5hcHBlbmQoV1RGTW92ZShzdGF0aXN0aWMpKTsKLSAgICAg
ICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5tZXJnZVN0YXRpc3RpY3MoV1RGTW92ZShzdGF0aXN0
aWNzKSk7CisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+bWVyZ2VTdGF0aXN0aWNzKFZl
Y3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPjo6ZnJvbShXVEZNb3ZlKHN0YXRpc3RpYykpKTsK
ICAgICAgICAgfQogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5jcHAKaW5kZXggZjRmOGE0YzRmNGFmOTZhZjY4OTQyYzVjNmM5ODkyZmY3ZTE5OTNm
MS4uNGE4YjBlZGEwOWJmMDU4OThhM2I4YjIyYzkwOGI0N2IyOGViOWM4MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTEzODAsMTAg
KzEzODAsOSBAQCBzdGF0aWMgdm9pZCBmZXRjaERpc2tDYWNoZUVudHJpZXMoTmV0d29ya0NhY2hl
OjpDYWNoZSogY2FjaGUsIFBBTDo6U2Vzc2lvbklEIHNlcwogICAgIEhhc2hNYXA8U2VjdXJpdHlP
cmlnaW5EYXRhLCB1aW50NjRfdD4gb3JpZ2luc0FuZFNpemVzOwogICAgIGNhY2hlLT50cmF2ZXJz
ZShbZmV0Y2hPcHRpb25zLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpLCBvcmlnaW5zQW5kU2l6ZXMgPSBXVEZNb3ZlKG9yaWdpbnNBbmRTaXplcyldKGF1dG8q
IHRyYXZlcnNhbEVudHJ5KSBtdXRhYmxlIHsKICAgICAgICAgaWYgKCF0cmF2ZXJzYWxFbnRyeSkg
ewotICAgICAgICAgICAgVmVjdG9yPFdlYnNpdGVEYXRhOjpFbnRyeT4gZW50cmllczsKLQotICAg
ICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW5BbmRTaXplIDogb3JpZ2luc0FuZFNpemVzKQotICAg
ICAgICAgICAgICAgIGVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbkFu
ZFNpemUua2V5LCBXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSwgb3JpZ2luQW5kU2l6ZS52YWx1
ZSB9KTsKKyAgICAgICAgICAgIGF1dG8gZW50cmllcyA9IFdURjo6bWFwKG9yaWdpbnNBbmRTaXpl
cywgW10oYXV0byYgb3JpZ2luQW5kU2l6ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBXZWJz
aXRlRGF0YTo6RW50cnkgeyBvcmlnaW5BbmRTaXplLmtleSwgV2Vic2l0ZURhdGFUeXBlOjpEaXNr
Q2FjaGUsIG9yaWdpbkFuZFNpemUudmFsdWUgfTsKKyAgICAgICAgICAgIH0pOwogCiAgICAgICAg
ICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlciksIGVudHJpZXMgPSBXVEZNb3ZlKGVudHJpZXMpXSAoKSBtdXRh
YmxlIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihlbnRyaWVzKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTm90aWZpY2F0aW9ucy9OZXR3b3Jr
Tm90aWZpY2F0aW9uTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05v
dGlmaWNhdGlvbnMvTmV0d29ya05vdGlmaWNhdGlvbk1hbmFnZXIuY3BwCmluZGV4IGYwMGEyMTkz
YWEyYjEzOTgwMmIzNjZhNGYxMjFjNzZlZGZmODhmMDMuLmM1MTJmMmNiMzI1NDA0NTRiMDZkZjcz
MjVhMzFiMmEzY2UxZDBjNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTm90aWZpY2F0aW9ucy9OZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlci5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05ldHdvcmtOb3RpZmljYXRp
b25NYW5hZ2VyLmNwcApAQCAtODIsOSArODIsOSBAQCB2b2lkIE5ldHdvcmtOb3RpZmljYXRpb25N
YW5hZ2VyOjpkZWxldGVQdXNoQW5kTm90aWZpY2F0aW9uUmVnaXN0cmF0aW9uKGNvbnN0IFNlYwog
dm9pZCBOZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlcjo6Z2V0T3JpZ2luc1dpdGhQdXNoQW5kTm90
aWZpY2F0aW9uUGVybWlzc2lvbnMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0b3I8
U2VjdXJpdHlPcmlnaW5EYXRhPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+IHJlcGx5SGFuZGxlciA9IFtjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoVmVjdG9yPFN0cmlu
Zz4gb3JpZ2luU3RyaW5ncykgbXV0YWJsZSB7Ci0gICAgICAgIFZlY3RvcjxTZWN1cml0eU9yaWdp
bkRhdGE+IG9yaWdpbnM7Ci0gICAgICAgIGZvciAoYXV0byYgb3JpZ2luU3RyaW5nIDogb3JpZ2lu
U3RyaW5ncykKLSAgICAgICAgICAgIG9yaWdpbnMuYXBwZW5kKFNlY3VyaXR5T3JpZ2luRGF0YTo6
ZnJvbVVSTCh7IHsgfSwgb3JpZ2luU3RyaW5nIH0pKTsKKyAgICAgICAgYXV0byBvcmlnaW5zID0g
b3JpZ2luU3RyaW5ncy5tYXAoW10oYXV0byYgb3JpZ2luU3RyaW5nKSB7CisgICAgICAgICAgICBy
ZXR1cm4gU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tVVJMKHsgeyB9LCBvcmlnaW5TdHJpbmcgfSk7
CisgICAgICAgIH0pOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKG9yaWdpbnMp
KTsKICAgICB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dl
YlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAppbmRleCBjYjkwMWI2YzU4YjE4NTlhZThi
ZTJhZDlkYTkwMDJkODIyYjgwNjEyLi5jMWI5ODZjZjlmNjYxMjQxZjEwM2E3ODA2YzgzNjZkZThi
YzQzNjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3Jh
Z2UvU3RvcmFnZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
V2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKQEAgLTI5NSwyMCArMjk1LDE0IEBAIFZlY3Rv
cjxTdG9yYWdlQXJlYUlkZW50aWZpZXI+IFN0b3JhZ2VNYW5hZ2VyOjphbGxTdG9yYWdlQXJlYUlk
ZW50aWZpZXJzKCkgY29uc3QKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAg
IFZlY3RvcjxTdG9yYWdlQXJlYUlkZW50aWZpZXI+IGlkZW50aWZpZXJzOwotICAgIGZvciAoY29u
c3QgYXV0byYgbG9jYWxTdG9yYWdlTmFtZXNwYWNlIDogbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2Vz
LnZhbHVlcygpKSB7Ci0gICAgICAgIGZvciAoYXV0byBrZXkgOiBsb2NhbFN0b3JhZ2VOYW1lc3Bh
Y2UtPnN0b3JhZ2VBcmVhSWRlbnRpZmllcnMoKSkKLSAgICAgICAgICAgIGlkZW50aWZpZXJzLmFw
cGVuZChrZXkpOwotICAgIH0KKyAgICBmb3IgKGF1dG8mIGxvY2FsU3RvcmFnZU5hbWVzcGFjZSA6
IG1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkKKyAgICAgICAgaWRlbnRpZmllcnMu
YXBwZW5kVmVjdG9yKGxvY2FsU3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZUFyZWFJZGVudGlmaWVy
cygpKTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgdHJhc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3Bh
Y2UgOiBtX3RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpIHsKLSAgICAg
ICAgZm9yIChhdXRvIGtleSA6IHRyYXNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdl
QXJlYUlkZW50aWZpZXJzKCkpCi0gICAgICAgICAgICBpZGVudGlmaWVycy5hcHBlbmQoa2V5KTsK
LSAgICB9CisgICAgZm9yIChhdXRvJiB0cmFzaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSA6IG1f
dHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkKKyAgICAgICAgaWRlbnRp
ZmllcnMuYXBwZW5kVmVjdG9yKHRyYXNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdl
QXJlYUlkZW50aWZpZXJzKCkpOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBzZXNzaW9uU3RvcmFn
ZU5hbWVzcGFjZSA6IG1fc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKSB7Ci0gICAg
ICAgIGZvciAoYXV0byBrZXkgOiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZUFyZWFJ
ZGVudGlmaWVycygpKQotICAgICAgICAgICAgaWRlbnRpZmllcnMuYXBwZW5kKGtleSk7Ci0gICAg
fQorICAgIGZvciAoYXV0byYgc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UgOiBtX3Nlc3Npb25TdG9y
YWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkKKyAgICAgICAgaWRlbnRpZmllcnMuYXBwZW5kVmVjdG9y
KHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlQXJlYUlkZW50aWZpZXJzKCkpOwogCiAg
ICAgcmV0dXJuIGlkZW50aWZpZXJzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvVHJhbnNpZW50TG9jYWxT
dG9yYWdlTmFtZXNwYWNlLmNwcAppbmRleCBlZWVjNTUwZWVmNjNhZTU5YTFlYWIzYWE4YTQ5N2Ez
MmMxMDUwNjI0Li5mYjk4ZWQzOTQ4MDkxNjA2ODcxNzI2YWUwODZkNTFmMTUxMmQ0NDA0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvVHJhbnNpZW50
TG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL1dlYlN0b3JhZ2UvVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcApAQCAtNTUs
MTQgKzU1LDExIEBAIFN0b3JhZ2VBcmVhJiBUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6
OmdldE9yQ3JlYXRlU3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnCiBWZWN0b3I8U2VjdXJpdHlPcmln
aW5EYXRhPiBUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6Om9yaWdpbnMoKSBjb25zdAog
ewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIFZlY3RvcjxTZWN1cml0eU9y
aWdpbkRhdGE+IG9yaWdpbnM7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIHN0b3JhZ2VBcmVhIDog
bV9zdG9yYWdlQXJlYU1hcC52YWx1ZXMoKSkgewotICAgICAgICBpZiAoIXN0b3JhZ2VBcmVhLT5p
dGVtcygpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG9yaWdpbnMuYXBwZW5kKHN0b3JhZ2VBcmVh
LT5zZWN1cml0eU9yaWdpbigpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gb3JpZ2luczsKKyAgICBy
ZXR1cm4gV1RGOjpjb21wYWN0TWFwKG1fc3RvcmFnZUFyZWFNYXAsIFtdKGF1dG8mIGVudHJ5KSAt
PiBzdGQ6Om9wdGlvbmFsPFNlY3VyaXR5T3JpZ2luRGF0YT4geworICAgICAgICBpZiAoZW50cnku
dmFsdWUtPml0ZW1zKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlLT5zZWN1cml0eU9yaWdpbigpOworICAgIH0p
OwogfQogCiB2b2lkIFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6Y2xlYXJTdG9yYWdl
QXJlYXNNYXRjaGluZ09yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIHNlY3VyaXR5T3Jp
Z2luKQpAQCAtODIsMTAgKzc5LDkgQEAgdm9pZCBUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3Bh
Y2U6OmNsZWFyQWxsU3RvcmFnZUFyZWFzKCkKIAogVmVjdG9yPFN0b3JhZ2VBcmVhSWRlbnRpZmll
cj4gVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpzdG9yYWdlQXJlYUlkZW50aWZpZXJz
KCkgY29uc3QKIHsKLSAgICBWZWN0b3I8U3RvcmFnZUFyZWFJZGVudGlmaWVyPiBpZGVudGlmaWVy
czsKLSAgICBmb3IgKGF1dG8mIHN0b3JhZ2VBcmVhIDogbV9zdG9yYWdlQXJlYU1hcC52YWx1ZXMo
KSkKLSAgICAgICAgaWRlbnRpZmllcnMuYXBwZW5kKHN0b3JhZ2VBcmVhLT5pZGVudGlmaWVyKCkp
OwotICAgIHJldHVybiBpZGVudGlmaWVyczsKKyAgICByZXR1cm4gV1RGOjptYXAobV9zdG9yYWdl
QXJlYU1hcCwgW10oYXV0byYgZW50cnkpIHsKKyAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlLT5p
ZGVudGlmaWVyKCk7CisgICAgfSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdp
bmVDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3Rv
cmFnZUVuZ2luZUNhY2hlLmNwcAppbmRleCBkYTljYjhhNWRjYzBlZDdmOWY0YzJlM2QyZjI3Njg5
NGEwMWVkMTc0Li4zZTFhZTMxMzAyOGFkMDAzY2Q1NWY4MWU0NmU1Y2FlMGJmMWVhZGViIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVu
Z2luZUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0Nh
Y2hlU3RvcmFnZUVuZ2luZUNhY2hlLmNwcApAQCAtMjA5LDggKzIwOSw5IEBAIHZvaWQgQ2FjaGU6
OmZpbmlzaE9wZW5pbmcoQ29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2ssIHN0ZDo6b3B0aW9u
YWw8RXJyb3I+JiYKIHsKICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZWNvcmRJ
bmZvcm1hdGlvbj4+IHJlY29yZHM7CiAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IG1fcmVjb3Jkcy52
YWx1ZXMoKSkgeworICAgICAgICByZWNvcmRzLnJlc2VydmVDYXBhY2l0eShyZWNvcmRzLnNpemUo
KSArIHZhbHVlLnNpemUoKSk7CiAgICAgICAgIGZvciAoYXV0byYgcmVjb3JkIDogdmFsdWUpCi0g
ICAgICAgICAgICByZWNvcmRzLmFwcGVuZChyZWNvcmQpOworICAgICAgICAgICAgcmVjb3Jkcy51
bmNoZWNrZWRBcHBlbmQocmVjb3JkKTsKICAgICB9CiAgICAgc3RkOjpzb3J0KHJlY29yZHMuYmVn
aW4oKSwgcmVjb3Jkcy5lbmQoKSwgWyZdKGNvbnN0IGF1dG8mIGEsIGNvbnN0IGF1dG8mIGIpIHsK
ICAgICAgICAgcmV0dXJuIGEuZ2V0KCkuaW5zZXJ0aW9uVGltZSA8IGIuZ2V0KCkuaW5zZXJ0aW9u
VGltZTsKQEAgLTY4Miw4ICs2ODMsOSBAQCBWZWN0b3I8S2V5PiBDYWNoZTo6a2V5cygpIGNvbnN0
CiB7CiAgICAgVmVjdG9yPEtleT4ga2V5czsKICAgICBmb3IgKGF1dG8mIHJlY29yZHMgOiBtX3Jl
Y29yZHMudmFsdWVzKCkpIHsKKyAgICAgICAga2V5cy5yZXNlcnZlQ2FwYWNpdHkoa2V5cy5zaXpl
KCkgKyByZWNvcmRzLnNpemUoKSk7CiAgICAgICAgIGZvciAoYXV0byYgcmVjb3JkIDogcmVjb3Jk
cykKLSAgICAgICAgICAgIGtleXMuYXBwZW5kKHJlY29yZC5rZXkpOworICAgICAgICAgICAga2V5
cy51bmNoZWNrZWRBcHBlbmQocmVjb3JkLmtleSk7CiAgICAgfQogICAgIHJldHVybiBrZXlzOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0
ZVN0b3JhZ2VBcmVhLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9T
UUxpdGVTdG9yYWdlQXJlYS5jcHAKaW5kZXggNDA5YTMzODhhMGI4ZWNmOWFiNzEwNDliNzI5ZmRl
MzkyN2M0OGViNS4uNDEzNjk0NGI1ZmY4NWVmMjNmY2VlNDdlZWQ4MzJmMWVkMGI2MDQ3ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3Jh
Z2VBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FM
aXRlU3RvcmFnZUFyZWEuY3BwCkBAIC02OSw4ICs2OSw5IEBAIFNRTGl0ZVN0b3JhZ2VBcmVhOjpT
UUxpdGVTdG9yYWdlQXJlYSh1bnNpZ25lZCBxdW90YSwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3Jp
Z2luCiB7CiAgICAgQVNTRVJUKCFpc01haW5SdW5Mb29wKCkpOwogCisgICAgbV9jYWNoZWRTdGF0
ZW1lbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc3RhdGljX2Nhc3Q8c2l6ZV90PihTdGF0ZW1l
bnRUeXBlOjpJbnZhbGlkKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0aWNfY2Fz
dDxzaXplX3Q+KFN0YXRlbWVudFR5cGU6OkludmFsaWQpOyArK2kpCi0gICAgICAgIG1fY2FjaGVk
U3RhdGVtZW50cy5hcHBlbmQobnVsbHB0cik7CisgICAgICAgIG1fY2FjaGVkU3RhdGVtZW50cy51
bmNoZWNrZWRBcHBlbmQobnVsbHB0cik7CiB9CiAKIHZvaWQgU1FMaXRlU3RvcmFnZUFyZWE6OmNs
b3NlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FwcGxlUGF5L1dlYlBheW1l
bnRDb29yZGluYXRvclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FwcGxlUGF5L1dl
YlBheW1lbnRDb29yZGluYXRvclByb3h5LmNwcAppbmRleCAwNGE2OTY4MTc4YTZmNzU5NGMyODBl
ZjczMTgxOThjYjYzMmI5MjMwLi5iY2NjMDU1MDc3MTc3OTc2NjhmOWM5ZGNmMTAzMTA5MTExYjk4
YWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BcHBsZVBheS9XZWJQYXltZW50
Q29vcmRpbmF0b3JQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQXBwbGVQYXkv
V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkuY3BwCkBAIC05Myw5ICs5Myw5IEBAIHZvaWQgV2Vi
UGF5bWVudENvb3JkaW5hdG9yUHJveHk6OnNob3dQYXltZW50VUkoV2ViQ29yZTo6UGFnZUlkZW50
aWZpZXIgZGVzdGluYXRpCiAKICAgICBVUkwgb3JpZ2luYXRpbmdVUkwoVVJMKCksIG9yaWdpbmF0
aW5nVVJMU3RyaW5nKTsKIAotICAgIFZlY3RvcjxVUkw+IGxpbmtJY29uVVJMczsKLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIGxpbmtJY29uVVJMU3RyaW5nIDogbGlua0ljb25VUkxTdHJpbmdzKQotICAg
ICAgICBsaW5rSWNvblVSTHMuYXBwZW5kKFVSTChVUkwoKSwgbGlua0ljb25VUkxTdHJpbmcpKTsK
KyAgICBhdXRvIGxpbmtJY29uVVJMcyA9IGxpbmtJY29uVVJMU3RyaW5ncy5tYXAoW10oYXV0byYg
bGlua0ljb25VUkxTdHJpbmcpIHsKKyAgICAgICAgcmV0dXJuIFVSTChVUkwoKSwgbGlua0ljb25V
UkxTdHJpbmcpOworICAgIH0pOwogCiAgICAgcGxhdGZvcm1TaG93UGF5bWVudFVJKHdlYlBhZ2VQ
cm94eUlELCBvcmlnaW5hdGluZ1VSTCwgbGlua0ljb25VUkxzLCBwYXltZW50UmVxdWVzdCwgW3Ro
aXMsIHdlYWtUaGlzID0gV2Vha1B0ciB7ICp0aGlzIH1dKGJvb2wgcmVzdWx0KSB7CiAgICAgICAg
IGlmICghd2Vha1RoaXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
QVBJTmF2aWdhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTmF2aWdh
dGlvbi5jcHAKaW5kZXggODg0NjZjNDllZDBkZTE4ZTIwMzJjYWEwYTA0NjQ4MzllYTc0NTEwMS4u
NGE4ODkwMzllOTRhNjJmYTU5MmYxOTU3Zjc2ZDg1OWU3OWM5ZmM2ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uLmNwcApAQCAtNjIsMTAgKzYyLDEwIEBA
IE5hdmlnYXRpb246Ok5hdmlnYXRpb24oV2ViTmF2aWdhdGlvblN0YXRlJiBzdGF0ZSwgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVxCiAgICAgOiBtX25hdmlnYXRpb25JRChzdGF0ZS5nZW5l
cmF0ZU5hdmlnYXRpb25JRCgpKQogICAgICwgbV9vcmlnaW5hbFJlcXVlc3QoV1RGTW92ZShyZXF1
ZXN0KSkKICAgICAsIG1fY3VycmVudFJlcXVlc3QobV9vcmlnaW5hbFJlcXVlc3QpCisgICAgLCBt
X3JlZGlyZWN0Q2hhaW4geyBtX29yaWdpbmFsUmVxdWVzdC51cmwoKSB9CiAgICAgLCBtX2Zyb21J
dGVtKGZyb21JdGVtKQogICAgICwgbV9jbGllbnROYXZpZ2F0aW9uQWN0aXZpdHkobmF2aWdhdGlv
bkFjdGl2aXR5VGltZW91dCkKIHsKLSAgICBtX3JlZGlyZWN0Q2hhaW4uYXBwZW5kKG1fb3JpZ2lu
YWxSZXF1ZXN0LnVybCgpKTsKIH0KIAogTmF2aWdhdGlvbjo6TmF2aWdhdGlvbihXZWJOYXZpZ2F0
aW9uU3RhdGUmIHN0YXRlLCBXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiB0YXJnZXRJdGVtLCBXZWJC
YWNrRm9yd2FyZExpc3RJdGVtKiBmcm9tSXRlbSwgRnJhbWVMb2FkVHlwZSBiYWNrRm9yd2FyZEZy
YW1lTG9hZFR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9X
S1NoYXJlU2hlZXQubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NoYXJlU2hl
ZXQubW0KaW5kZXggNTU0YWI4MDY0MjdlY2I5Y2U4MzBhY2E5N2ZjN2RkY2RjOTg1M2UxNS4uZTM4
OGEzYzM3ZDBmNjk2NWQ3NjkxZjI3YjE3ODBhOTEzZjA0ZWUyNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tTaGFyZVNoZWV0Lm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1dLU2hhcmVTaGVldC5tbQpAQCAtMTAwLDkgKzEwMCw5IEBAIHN0
YXRpYyB2b2lkIGFwcGVuZEZpbGVzQXNTaGFyZWFibGVVUkxzKFJldGFpblB0cjxOU011dGFibGVB
cnJheT4mJiBzaGFyZURhdGFBcnJhCiAgICAgICAgIFN0cmluZyBmaWxlTmFtZTsKICAgICAgICAg
UmV0YWluUHRyPE5TRGF0YT4gZmlsZURhdGE7CiAgICAgfTsKLSAgICBWZWN0b3I8RmlsZVdyaXRl
VGFzaz4gZmlsZVdyaXRlVGFza3M7Ci0gICAgZm9yIChhdXRvJiBmaWxlIDogZmlsZXMpCi0gICAg
ICAgIGZpbGVXcml0ZVRhc2tzLmFwcGVuZCh7IGZpbGUuZmlsZU5hbWUuaXNvbGF0ZWRDb3B5KCks
IGZpbGUuZmlsZURhdGEtPmNyZWF0ZU5TRGF0YSgpIH0pOworICAgIGF1dG8gZmlsZVdyaXRlVGFz
a3MgPSBmaWxlcy5tYXAoW10oYXV0byYgZmlsZSkgeworICAgICAgICByZXR1cm4gRmlsZVdyaXRl
VGFzayB7IGZpbGUuZmlsZU5hbWUuaXNvbGF0ZWRDb3B5KCksIGZpbGUuZmlsZURhdGEtPmNyZWF0
ZU5TRGF0YSgpIH07CisgICAgfSk7CiAKICAgICBhdXRvIHF1ZXVlID0gV29ya1F1ZXVlOjpjcmVh
dGUoImNvbS5hcHBsZS5XZWJLaXQuV0tTaGFyZVNoZWV0LlNoYXJlYWJsZUZpbGVXcml0ZXIiKTsK
ICAgICBxdWV1ZS0+ZGlzcGF0Y2goW3NoYXJlRGF0YUFycmF5ID0gV1RGTW92ZShzaGFyZURhdGFB
cnJheSksIGZpbGVXcml0ZVRhc2tzID0gV1RGTW92ZShmaWxlV3JpdGVUYXNrcyksIHRlbXBvcmFy
eURpcmVjdG9yeSA9IHJldGFpblB0cih0ZW1wb3JhcnlEaXJlY3RvcnkpLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQppbmRleCBm
MWMzNzA2YjA5ZmY5ZTEyODIxZDdkYTNhMjI1YjcwYmE0NmRjZTM2Li41NmExNGQ4YmYzNmVkNDRk
YWRiZjFlNGM0ODQwYTVlMDY0MTRiOGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQpAQCAtNjY2LDE0ICs2NjYsMTIgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OnJlc3RvcmVBcHBIaWdobGlnaHRzQW5kU2Nyb2xsVG9JbmRleChjb25z
dCBWZWN0b3I8UmVmPFNoYXJlZE0KICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZT4gbWVtb3J5
SGFuZGxlczsKLQotICAgIGZvciAoYXV0byBoaWdobGlnaHQgOiBoaWdobGlnaHRzKSB7CisgICAg
YXV0byBtZW1vcnlIYW5kbGVzID0gV1RGOjpjb21wYWN0TWFwKGhpZ2hsaWdodHMsIFtdKGF1dG8m
IGhpZ2hsaWdodCkgLT4gc3RkOjpvcHRpb25hbDxTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZT4gewog
ICAgICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7Ci0gICAgICAgIGhpZ2hsaWdodC0+
Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7
Ci0KLSAgICAgICAgbWVtb3J5SGFuZGxlcy5hcHBlbmQoU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUg
eyBXVEZNb3ZlKGhhbmRsZSksIGhpZ2hsaWdodC0+c2l6ZSgpIH0pOwotICAgIH0KKyAgICAgICAg
aWYgKCFoaWdobGlnaHQtPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVj
dGlvbjo6UmVhZE9ubHkpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAg
ICAgcmV0dXJuIFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIHsgV1RGTW92ZShoYW5kbGUpLCBoaWdo
bGlnaHQtPnNpemUoKSB9OworICAgIH0pOwogICAgIAogICAgIHNldFVwSGlnaGxpZ2h0c09ic2Vy
dmVyKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0ZyYW1lTG9hZFN0
YXRlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0ZyYW1lTG9hZFN0YXRlLmNwcAppbmRl
eCBjNjFiZWQ4MWQwOTI4NDYzMmJmMjk2NWVkMmM5OWIwYzZmZTQwMWEzLi42OWU1M2Q3YmViODZj
ZTZiNDA2ZjNjZGI4MzkyYWI3MmEzZmZjODI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9GcmFtZUxvYWRTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
RnJhbWVMb2FkU3RhdGUuY3BwCkBAIC05MCwxMSArOTAsOCBAQCB2b2lkIEZyYW1lTG9hZFN0YXRl
OjpkaWRGaW5pc2hMb2FkKCkKIAogICAgIG1fc3RhdGUgPSBTdGF0ZTo6RmluaXNoZWQ7CiAKLSAg
ICBWZWN0b3I8T2JzZXJ2ZXIqPiBvYnNlcnZlcnNDb3B5OwotICAgIGZvciAoYXV0byYgb2JzZXJ2
ZXIgOiBtX29ic2VydmVycykKLSAgICAgICAgb2JzZXJ2ZXJzQ29weS5hcHBlbmQoJm9ic2VydmVy
KTsKLSAgICBmb3IgKGF1dG8qIG9ic2VydmVyIDogb2JzZXJ2ZXJzQ29weSkKLSAgICAgICAgb2Jz
ZXJ2ZXItPmRpZEZpbmlzaExvYWQoKTsKKyAgICBmb3IgKGF1dG8mIG9ic2VydmVyIDogY29weVRv
VmVjdG9yT2Y8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxPYnNlcnZlcj4+KG1fb2JzZXJ2ZXJzKSkK
KyAgICAgICAgb2JzZXJ2ZXIuZ2V0KCkuZGlkRmluaXNoTG9hZCgpOwogfQogCiB2b2lkIEZyYW1l
TG9hZFN0YXRlOjpkaWRGYWlsTG9hZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAppbmRleCAzNzQwODE5M2IwYjc2
ODIzYzA0NTgxYjRiNGU5MDZkZDQ0MDlhN2FiLi5lMzgwMTZmMWRlYjczNzMyZDVhODVkYzFkNDZk
MTNkZjM1YTY5MWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKQEAgLTE4NCw4ICsxODQsOCBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MoKQog
ICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsID0gY29weVRvVmVjdG9y
KExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5zY2hlbWVzVG9SZWdpc3RlckFzTG9j
YWwoKSk7CiAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3MgPSBj
b3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1Jl
Z2lzdGVyQXNOb0FjY2VzcygpKTsKICAgICBwYXJhbWV0ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lH
bG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVNb2RlbCgpOwotICAgIGZvciAoYXV0byYg
c2NoZW1lIDogV2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5k
bGVycygpKQotICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9t
UHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lz
dGVyZWRGb3JDdXN0b21Qcm90b2NvbHMgPSBXZWJQcm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhD
dXN0b21Qcm90b2NvbEhhbmRsZXJzKCk7CisKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAg
IGlmIChTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9yeSA9IFdlYlByb2Nlc3NQb29sOjpjb29r
aWVTdG9yYWdlRGlyZWN0b3J5KCk7ICFjb29raWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkg
ewogICAgICAgICBpZiAoYXV0byBoYW5kbGUgPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29va2llU3RvcmFnZURpcmVjdG9yeSkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENv
bnRyb2xsZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9X
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAKaW5kZXggZmEyNTRjMmRhZGMwNjMwMjhk
ZmQ1MDRkMjg5MGE4OTJhZWRhZmIwOC4uNWJiZTczOTYyMDUyN2E4MjdjZDU3ZjE2OWFmMmYwYzBj
NTk2YTcwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlckNvbnRlbnQv
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcApAQCAt
MTE3LDExICsxMTcsMTEgQEAgVXNlckNvbnRlbnRDb250cm9sbGVyUGFyYW1ldGVycyBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eTo6cGFyYW1ldGVycygpIGNvbnMKICAgICBwYXJhbWV0ZXJz
LmlkZW50aWZpZXIgPSBpZGVudGlmaWVyKCk7CiAgICAgCiAgICAgQVNTRVJUKHBhcmFtZXRlcnMu
dXNlckNvbnRlbnRXb3JsZHMuaXNFbXB0eSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGlkZW50
aWZpZXIgOiBtX2Fzc29jaWF0ZWRDb250ZW50V29ybGRzKSB7CisgICAgcGFyYW1ldGVycy51c2Vy
Q29udGVudFdvcmxkcyA9IFdURjo6bWFwKG1fYXNzb2NpYXRlZENvbnRlbnRXb3JsZHMsIFtdKGF1
dG8mIGlkZW50aWZpZXIpIHsKICAgICAgICAgYXV0byogd29ybGQgPSBBUEk6OkNvbnRlbnRXb3Js
ZDo6d29ybGRGb3JJZGVudGlmaWVyKGlkZW50aWZpZXIpOwogICAgICAgICBSRUxFQVNFX0FTU0VS
VCh3b3JsZCk7Ci0gICAgICAgIHBhcmFtZXRlcnMudXNlckNvbnRlbnRXb3JsZHMuYXBwZW5kKHdv
cmxkLT53b3JsZERhdGEoKSk7Ci0gICAgfQorICAgICAgICByZXR1cm4gd29ybGQtPndvcmxkRGF0
YSgpOworICAgIH0pOwogCiAgICAgZm9yIChhdXRvIHVzZXJTY3JpcHQgOiBtX3VzZXJTY3JpcHRz
LT5lbGVtZW50c09mVHlwZTxBUEk6OlVzZXJTY3JpcHQ+KCkpCiAgICAgICAgIHBhcmFtZXRlcnMu
dXNlclNjcmlwdHMuYXBwZW5kKHsgdXNlclNjcmlwdC0+aWRlbnRpZmllcigpLCB1c2VyU2NyaXB0
LT5jb250ZW50V29ybGQoKS5pZGVudGlmaWVyKCksIHVzZXJTY3JpcHQtPnVzZXJTY3JpcHQoKSB9
KTsKQEAgLTEyOSw4ICsxMjksOSBAQCBVc2VyQ29udGVudENvbnRyb2xsZXJQYXJhbWV0ZXJzIFdl
YlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpwYXJhbWV0ZXJzKCkgY29ucwogICAgIGZvciAo
YXV0byB1c2VyU3R5bGVTaGVldCA6IG1fdXNlclN0eWxlU2hlZXRzLT5lbGVtZW50c09mVHlwZTxB
UEk6OlVzZXJTdHlsZVNoZWV0PigpKQogICAgICAgICBwYXJhbWV0ZXJzLnVzZXJTdHlsZVNoZWV0
cy5hcHBlbmQoeyB1c2VyU3R5bGVTaGVldC0+aWRlbnRpZmllcigpLCB1c2VyU3R5bGVTaGVldC0+
Y29udGVudFdvcmxkKCkuaWRlbnRpZmllcigpLCB1c2VyU3R5bGVTaGVldC0+dXNlclN0eWxlU2hl
ZXQoKSB9KTsKIAotICAgIGZvciAoYXV0byYgaGFuZGxlciA6IG1fc2NyaXB0TWVzc2FnZUhhbmRs
ZXJzLnZhbHVlcygpKQotICAgICAgICBwYXJhbWV0ZXJzLm1lc3NhZ2VIYW5kbGVycy5hcHBlbmQo
eyBoYW5kbGVyLT5pZGVudGlmaWVyKCksIGhhbmRsZXItPndvcmxkKCkuaWRlbnRpZmllcigpLCBo
YW5kbGVyLT5uYW1lKCkgfSk7CisgICAgcGFyYW1ldGVycy5tZXNzYWdlSGFuZGxlcnMgPSBXVEY6
Om1hcChtX3NjcmlwdE1lc3NhZ2VIYW5kbGVycywgW10oYXV0byBlbnRyeSkgeworICAgICAgICBy
ZXR1cm4gV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXJEYXRhIHsgZW50cnkudmFsdWUtPmlkZW50aWZp
ZXIoKSwgZW50cnkudmFsdWUtPndvcmxkKCkuaWRlbnRpZmllcigpLCBlbnRyeS52YWx1ZS0+bmFt
ZSgpIH07CisgICAgfSk7CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIHBh
cmFtZXRlcnMuY29udGVudFJ1bGVMaXN0cyA9IGNvbnRlbnRSdWxlTGlzdERhdGEoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0F1dGhlbnRp
Y2F0b3JNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0
aW9uL0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmNwcAppbmRleCA5MzQ4MGVkNWNiMzlhNjFjYmNmNjcz
NTFlMGE4ODBlYTA5ZmU0NDc2Li42NTcyZjUzOTU5OGVmNDFkZDEwMzA1YWNlZWM4ZjE4N2Q4ZDUy
NTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlv
bi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRvck1hbmFnZXIuY3BwCkBAIC00MTYsMTEgKzQx
NiwxMSBAQCB2b2lkIEF1dGhlbnRpY2F0b3JNYW5hZ2VyOjpzdGFydERpc2NvdmVyeShjb25zdCBU
cmFuc3BvcnRTZXQmIHRyYW5zcG9ydHMpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKICAgICBBU1NFUlQobV9zZXJ2aWNlcy5pc0VtcHR5KCkgJiYgdHJhbnNwb3J0cy5zaXplKCkg
PD0gbWF4VHJhbnNwb3J0TnVtYmVyKTsKLSAgICBmb3IgKGF1dG8mIHRyYW5zcG9ydCA6IHRyYW5z
cG9ydHMpIHsKKyAgICBtX3NlcnZpY2VzID0gV1RGOjptYXAodHJhbnNwb3J0cywgW3RoaXNdKGF1
dG8mIHRyYW5zcG9ydCkgewogICAgICAgICBhdXRvIHNlcnZpY2UgPSBjcmVhdGVTZXJ2aWNlKHRy
YW5zcG9ydCwgKnRoaXMpOwogICAgICAgICBzZXJ2aWNlLT5zdGFydERpc2NvdmVyeSgpOwotICAg
ICAgICBtX3NlcnZpY2VzLmFwcGVuZChXVEZNb3ZlKHNlcnZpY2UpKTsKLSAgICB9CisgICAgICAg
IHJldHVybiBzZXJ2aWNlOworICAgIH0pOwogfQogCiB2b2lkIEF1dGhlbnRpY2F0b3JNYW5hZ2Vy
Ojppbml0VGltZU91dFRpbWVyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJCYWNr
Rm9yd2FyZExpc3QuY3BwCmluZGV4IGM3NDM0M2U2NWI4ODlmNzg2OWRjOGNjYTM0MDUxYjhiMjY1
NDAyYjYuLmRlYzllODM5MjIzNjhmZTYxNTVlMDNkNjlhM2YzN2Q5ZGJmMDE3NzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmNwcApAQCAtMzQwLDE2
ICszNDAsMTEgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3Q6OnJlbW92ZUFsbEl0ZW1zKCkKIAog
ICAgIExPRyhCYWNrRm9yd2FyZCwgIihCYWNrL0ZvcndhcmQpIFdlYkJhY2tGb3J3YXJkTGlzdCAl
cCByZW1vdmVBbGxJdGVtcyAoaGFzICV6dSBvZiB0aGVtKSIsIHRoaXMsIG1fZW50cmllcy5zaXpl
KCkpOwogCi0gICAgVmVjdG9yPFJlZjxXZWJCYWNrRm9yd2FyZExpc3RJdGVtPj4gcmVtb3ZlZEl0
ZW1zOwotCi0gICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fZW50cmllcykgeworICAgIGZvciAoYXV0
byYgZW50cnkgOiBtX2VudHJpZXMpCiAgICAgICAgIGRpZFJlbW92ZUl0ZW0oZW50cnkpOwotICAg
ICAgICByZW1vdmVkSXRlbXMuYXBwZW5kKFdURk1vdmUoZW50cnkpKTsKLSAgICB9CiAKLSAgICBt
X2VudHJpZXMuY2xlYXIoKTsKICAgICBtX2N1cnJlbnRJbmRleCA9IHN0ZDo6bnVsbG9wdDsKLSAg
ICBtX3BhZ2UtPmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdChudWxscHRyLCBXVEZNb3ZlKHJlbW92
ZWRJdGVtcykpOworICAgIG1fcGFnZS0+ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KG51bGxwdHIs
IHN0ZDo6ZXhjaGFuZ2UobV9lbnRyaWVzLCB7IH0pKTsKIH0KIAogdm9pZCBXZWJCYWNrRm9yd2Fy
ZExpc3Q6OmNsZWFyKCkKQEAgLTM2MywyMSArMzU4LDE3IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRM
aXN0OjpjbGVhcigpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxXZWJCYWNrRm9yd2Fy
ZExpc3RJdGVtPiBjdXJyZW50SXRlbSA9IHRoaXMtPmN1cnJlbnRJdGVtKCk7Ci0gICAgVmVjdG9y
PFJlZjxXZWJCYWNrRm9yd2FyZExpc3RJdGVtPj4gcmVtb3ZlZEl0ZW1zOwogCiAgICAgaWYgKCFj
dXJyZW50SXRlbSkgewogICAgICAgICAvLyBXZSBzaG91bGQgb25seSBldmVyIGhhdmUgbm8gY3Vy
cmVudCBpdGVtIGlmIHdlIGFsc28gaGF2ZSBubyBjdXJyZW50IGl0ZW0gaW5kZXguCiAgICAgICAg
IEFTU0VSVCghbV9jdXJyZW50SW5kZXgpOwogCiAgICAgICAgIC8vIEJ1dCBqdXN0IGluIGNhc2Ug
aXQgZG9lcyBoYXBwZW4gaW4gcHJhY3RpY2Ugd2Ugc2hvdWxkIGdldCBiYWNrIGludG8gYSBjb25z
aXN0ZW50IHN0YXRlIG5vdy4KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyAr
K2kpIHsKLSAgICAgICAgICAgIGRpZFJlbW92ZUl0ZW0obV9lbnRyaWVzW2ldKTsKLSAgICAgICAg
ICAgIHJlbW92ZWRJdGVtcy5hcHBlbmQoV1RGTW92ZShtX2VudHJpZXNbaV0pKTsKLSAgICAgICAg
fQorICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9lbnRyaWVzKQorICAgICAgICAgICAgZGlk
UmVtb3ZlSXRlbShlbnRyeSk7CiAKLSAgICAgICAgbV9lbnRyaWVzLmNsZWFyKCk7CiAgICAgICAg
IG1fY3VycmVudEluZGV4ID0gc3RkOjpudWxsb3B0OwotICAgICAgICBtX3BhZ2UtPmRpZENoYW5n
ZUJhY2tGb3J3YXJkTGlzdChudWxscHRyLCBXVEZNb3ZlKHJlbW92ZWRJdGVtcykpOworICAgICAg
ICBtX3BhZ2UtPmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdChudWxscHRyLCBzdGQ6OmV4Y2hhbmdl
KG1fZW50cmllcywgeyB9KSk7CiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM4Nyw2ICsz
NzgsNyBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6Y2xlYXIoKQogICAgICAgICAgICAgZGlk
UmVtb3ZlSXRlbShtX2VudHJpZXNbaV0pOwogICAgIH0KIAorICAgIFZlY3RvcjxSZWY8V2ViQmFj
a0ZvcndhcmRMaXN0SXRlbT4+IHJlbW92ZWRJdGVtczsKICAgICByZW1vdmVkSXRlbXMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShzaXplIC0gMSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
aXplOyArK2kpIHsKICAgICAgICAgaWYgKG1fY3VycmVudEluZGV4ICYmIGkgIT0gKm1fY3VycmVu
dEluZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bv
b2wuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4
IGZhMTc0MmNmMzJkYTk5NTI3MzIzZGZjN2M4YmYwYTc5MDYzMDQxZmUuLjYxYmQzMGEzNjQxNDcz
YzVkYjJjNTc0MzBlOTNjYjdlMjY2M2FkODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHAKQEAgLTg0OSwxMCArODQ5LDkgQEAgdm9pZCBXZWJQcm9jZXNzUG9v
bDo6aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzLCBXZWJz
aXRlRGEKICAgICAgICAgICAgIHBhcmFtZXRlcnMuaW5qZWN0ZWRCdW5kbGVQYXRoRXh0ZW5zaW9u
SGFuZGxlID0gV1RGTW92ZSgqaGFuZGxlKTsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHBhdGgg
OiBtX3Jlc29sdmVkUGF0aHMuYWRkaXRpb25hbFdlYlByb2Nlc3NTYW5kYm94RXh0ZW5zaW9uUGF0
aHMpIHsKLSAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0gIFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZVdpdGhvdXRSZXNvbHZpbmdQYXRoKHBhdGgsIFNhbmRib3hFeHRlbnNpb246OlR5cGU6
OlJlYWRPbmx5KSkKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuYWRkaXRpb25hbFNhbmRib3hFeHRl
bnNpb25IYW5kbGVzLmFwcGVuZChXVEZNb3ZlKCpoYW5kbGUpKTsKLSAgICB9CisgICAgcGFyYW1l
dGVycy5hZGRpdGlvbmFsU2FuZGJveEV4dGVuc2lvbkhhbmRsZXMgPSBXVEY6OmNvbXBhY3RNYXAo
bV9yZXNvbHZlZFBhdGhzLmFkZGl0aW9uYWxXZWJQcm9jZXNzU2FuZGJveEV4dGVuc2lvblBhdGhz
LCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBTYW5kYm94RXh0ZW5zaW9uOjpjcmVh
dGVIYW5kbGVXaXRob3V0UmVzb2x2aW5nUGF0aChwYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBl
OjpSZWFkT25seSk7CisgICAgfSk7CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIHNl
dEphdmFTY3JpcHRDb25maWd1cmF0aW9uRmlsZUVuYWJsZWRGcm9tRGVmYXVsdHMoKTsKQEAgLTE4
NzAsMTQgKzE4NjksOSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpyZW1vdmVQcm9jZXNzRnJvbU9y
aWdpbkNhY2hlU2V0KFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykKICAgICBMT0coUHJvY2Vzc1N3
YXBwaW5nLCAiKFByb2Nlc3NTd2FwcGluZykgUmVtb3ZpbmcgcHJvY2VzcyB3aXRoIHBpZCAlaSBm
cm9tIHRoZSBvcmlnaW4gY2FjaGUgc2V0IiwgcHJvY2Vzcy5wcm9jZXNzSWRlbnRpZmllcigpKTsK
IAogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSB2ZXJ5IGluZWZmaWNpZW50IGFzIHRoZSBudW1i
ZXIgb2YgcmVtZW1iZXJlZCBvcmlnaW5zIGFuZCBwcm9jZXNzZXMgZ3Jvd3MKLSAgICBWZWN0b3I8
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IHJlZ2lzdHJhYmxlRG9tYWluc1RvUmVtb3ZlOwot
ICAgIGZvciAoYXV0byBlbnRyeSA6IG1fc3dhcHBlZFByb2Nlc3Nlc1BlclJlZ2lzdHJhYmxlRG9t
YWluKSB7Ci0gICAgICAgIGlmIChlbnRyeS52YWx1ZSA9PSAmcHJvY2VzcykKLSAgICAgICAgICAg
IHJlZ2lzdHJhYmxlRG9tYWluc1RvUmVtb3ZlLmFwcGVuZChlbnRyeS5rZXkpOwotICAgIH0KLQot
ICAgIGZvciAoYXV0byYgcmVnaXN0cmFibGVEb21haW4gOiByZWdpc3RyYWJsZURvbWFpbnNUb1Jl
bW92ZSkKLSAgICAgICAgbV9zd2FwcGVkUHJvY2Vzc2VzUGVyUmVnaXN0cmFibGVEb21haW4ucmVt
b3ZlKHJlZ2lzdHJhYmxlRG9tYWluKTsKKyAgICBtX3N3YXBwZWRQcm9jZXNzZXNQZXJSZWdpc3Ry
YWJsZURvbWFpbi5yZW1vdmVJZihbJl0oYXV0byYgZW50cnkpIHsKKyAgICAgICAgcmV0dXJuIGVu
dHJ5LnZhbHVlID09ICZwcm9jZXNzOworICAgIH0pOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29s
Ojpwcm9jZXNzRm9yTmF2aWdhdGlvbihXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IEFQSTo6TmF2
aWdhdGlvbiYgbmF2aWdhdGlvbiwgUmVmPFdlYlByb2Nlc3NQcm94eT4mJiBzb3VyY2VQcm9jZXNz
LCBjb25zdCBVUkwmIHNvdXJjZVVSTCwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCBwcm9j
ZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBXZWJQcm9jZXNzUHJveHk6OkNhcHRpdmVQb3J0YWxN
b2RlIGNhcHRpdmVQb3J0YWxNb2RlLCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIFJl
ZjxXZWJzaXRlRGF0YVN0b3JlPiYmIGRhdGFTdG9yZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChS
ZWY8V2ViUHJvY2Vzc1Byb3h5PiYmLCBTdXNwZW5kZWRQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcm
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUHJveHkuY3BwCmluZGV4IGIxMjg2MGRmNTEwYmM0ZTNkZmJiN2UzZmM5MjBiNWQwNDJiODQz
MjEuLjM2OGEzOTU4N2RhMzNkZTY0YzFiODlkMGU2MzhkMzhiODhkN2ExN2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApAQCAtOTM2LDggKzkzNiw5IEBA
IHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojpwcm9jZXNzRGlkVGVybWluYXRlT3JGYWlsZWRUb0xhdW5j
aChQcm9jZXNzVGVybWluYXRpb25SZWFzCiAKICAgICAvLyBUaGVyZSBpcyBhIG5lc3RlZCB0cmFu
c2FjdGlvbiBpbiBXZWJQYWdlUHJveHk6OnJlc2V0U3RhdGVBZnRlclByb2Nlc3NFeGl0ZWQoKSB0
aGF0IHdlIGRvbid0IHdhbnQgdG8gY29tbWl0IGJlZm9yZSB0aGUgY2xpZW50IGNhbGwgYmVsb3cg
KGRpc3BhdGNoUHJvY2Vzc0RpZFRlcm1pbmF0ZSkuCiAgICAgVmVjdG9yPFBhZ2VMb2FkU3RhdGU6
OlRyYW5zYWN0aW9uPiBwYWdlTG9hZFN0YXRlVHJhbnNhY3Rpb25zOworICAgIHBhZ2VMb2FkU3Rh
dGVUcmFuc2FjdGlvbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwYWdlcy5zaXplKCkpOwogICAg
IGZvciAoYXV0byYgcGFnZSA6IHBhZ2VzKSB7Ci0gICAgICAgIHBhZ2VMb2FkU3RhdGVUcmFuc2Fj
dGlvbnMuYXBwZW5kKHBhZ2UtPnBhZ2VMb2FkU3RhdGUoKS50cmFuc2FjdGlvbigpKTsKKyAgICAg
ICAgcGFnZUxvYWRTdGF0ZVRyYW5zYWN0aW9ucy51bmNoZWNrZWRBcHBlbmQocGFnZS0+cGFnZUxv
YWRTdGF0ZSgpLnRyYW5zYWN0aW9uKCkpOwogICAgICAgICBwYWdlLT5yZXNldFN0YXRlQWZ0ZXJQ
cm9jZXNzVGVybWluYXRpb24ocmVhc29uKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKaW5kZXgg
YjM2ZDlhNzRiOWExNzVhMDgxNmI3YTJlMTRmMTM5ZGI1ZWY1NmU2ZC4uNWVlMTVjNWVmZGE2ZjQ5
MzkyNGRkMzdkMmEwMGMyMTAxMjU5M2FiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTQzMSw4ICs0
MzEsMTAgQEAgcHJpdmF0ZToKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRh
VHlwZTo6RGlza0NhY2hlKSkgewogICAgICAgICBtX3F1ZXVlLT5kaXNwYXRjaChbbWVkaWFDYWNo
ZURpcmVjdG9yeSA9IG1fY29uZmlndXJhdGlvbi0+bWVkaWFDYWNoZURpcmVjdG9yeSgpLmlzb2xh
dGVkQ29weSgpLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKICAgICAgICAgICAgIFdlYnNpdGVEYXRh
IHdlYnNpdGVEYXRhOwotICAgICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50OjpvcmlnaW5zSW5NZWRpYUNhY2hlKG1lZGlhQ2FjaGVEaXJlY3Rvcnkp
KQotICAgICAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRh
OjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpEaXNrQ2FjaGUsIDAgfSk7CisgICAg
ICAgICAgICBhdXRvIG9yaWdpbnMgPSBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpvcmlnaW5z
SW5NZWRpYUNhY2hlKG1lZGlhQ2FjaGVEaXJlY3RvcnkpOworICAgICAgICAgICAgd2Vic2l0ZURh
dGEuZW50cmllcyA9IFdURjo6bWFwKG9yaWdpbnMsIFtdKGF1dG8mIG9yaWdpbikgeworICAgICAg
ICAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRh
VHlwZTo6RGlza0NhY2hlLCAwIH07CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGNhbGxi
YWNrQWdncmVnYXRvci0+YWRkV2Vic2l0ZURhdGEoV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAg
ICAgICB9KTsKICAgICB9CkBAIC00NjksOCArNDcxLDkgQEAgcHJpdmF0ZToKICAgICBpZiAoZGF0
YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RGV2aWNlSWRIYXNoU2FsdCkpIHsKICAg
ICAgICAgbV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS0+Z2V0RGV2aWNlSWRIYXNoU2FsdE9yaWdp
bnMoW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byYmIG9yaWdpbnMpIHsKICAgICAgICAgICAgIFdl
YnNpdGVEYXRhIHdlYnNpdGVEYXRhOwotICAgICAgICAgICAgd2hpbGUgKCFvcmlnaW5zLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZChXZWJzaXRl
RGF0YTo6RW50cnkgeyBvcmlnaW5zLnRha2VBbnkoKSwgV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJ
ZEhhc2hTYWx0LCAwIH0pOworICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcyA9IFdURjo6
bWFwKG9yaWdpbnMsIFtdKGF1dG8mIG9yaWdpbikgeworICAgICAgICAgICAgICAgIHJldHVybiBX
ZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6RGV2aWNlSWRIYXNo
U2FsdCwgMCB9OworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0
b3ItPmFkZFdlYnNpdGVEYXRhKFdURk1vdmUod2Vic2l0ZURhdGEpKTsKICAgICAgICAgfSk7CiAg
ICAgfQpAQCAtNDc5LDEwICs0ODIsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgbV9xdWV1ZS0+ZGlz
cGF0Y2goW2ZldGNoT3B0aW9ucywgYXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSA9IG1fY29uZmln
dXJhdGlvbi0+YXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSgpLmlzb2xhdGVkQ29weSgpLCBhcHBs
aWNhdGlvbkNhY2hlRmxhdEZpbGVTdWJkaXJlY3RvcnlOYW1lID0gbV9jb25maWd1cmF0aW9uLT5h
cHBsaWNhdGlvbkNhY2hlRmxhdEZpbGVTdWJkaXJlY3RvcnlOYW1lKCkuaXNvbGF0ZWRDb3B5KCks
IGNhbGxiYWNrQWdncmVnYXRvcl0gewogICAgICAgICAgICAgYXV0byBzdG9yYWdlID0gV2ViQ29y
ZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNyZWF0ZShhcHBsaWNhdGlvbkNhY2hlRGlyZWN0
b3J5LCBhcHBsaWNhdGlvbkNhY2hlRmxhdEZpbGVTdWJkaXJlY3RvcnlOYW1lKTsKICAgICAgICAg
ICAgIFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhOwotICAgICAgICAgICAgZm9yIChhdXRvJiBvcmln
aW4gOiBzdG9yYWdlLT5vcmlnaW5zV2l0aENhY2hlKCkpIHsKKyAgICAgICAgICAgIGF1dG8gb3Jp
Z2lucyA9IHN0b3JhZ2UtPm9yaWdpbnNXaXRoQ2FjaGUoKTsKKyAgICAgICAgICAgIHdlYnNpdGVE
YXRhLmVudHJpZXMgPSBXVEY6Om1hcChvcmlnaW5zLCBbJl0oYXV0byYgb3JpZ2luKSB7CiAgICAg
ICAgICAgICAgICAgdWludDY0X3Qgc2l6ZSA9IGZldGNoT3B0aW9ucy5jb250YWlucyhXZWJzaXRl
RGF0YUZldGNoT3B0aW9uOjpDb21wdXRlU2l6ZXMpID8gc3RvcmFnZS0+ZGlza1VzYWdlRm9yT3Jp
Z2luKG9yaWdpbikgOiAwOwotICAgICAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMuYXBw
ZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpPZmZsaW5l
V2ViQXBwbGljYXRpb25DYWNoZSwgc2l6ZSB9KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByZXR1cm4gV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6
Ok9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlLCBzaXplIH07CisgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkV2Vic2l0ZURhdGEoV1RGTW92ZSh3ZWJz
aXRlRGF0YSkpOwogICAgICAgICB9KTsKICAgICB9CkBAIC00OTAsOCArNDk0LDkgQEAgcHJpdmF0
ZToKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6V2ViU1FMRGF0
YWJhc2VzKSAmJiBpc1BlcnNpc3RlbnQoKSkgewogICAgICAgICBtX3F1ZXVlLT5kaXNwYXRjaChb
d2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24tPndlYlNRTERhdGFiYXNl
RGlyZWN0b3J5KCkuaXNvbGF0ZWRDb3B5KCksIGNhbGxiYWNrQWdncmVnYXRvcl0oKSB7CiAgICAg
ICAgICAgICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsKLSAgICAgICAgICAgIGZvciAoYXV0byYg
b3JpZ2luIDogV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyV2l0aERhdGFiYXNlUGF0
aCh3ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSktPm9yaWdpbnMoKSkKLSAgICAgICAgICAgICAgICB3
ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdl
YnNpdGVEYXRhVHlwZTo6V2ViU1FMRGF0YWJhc2VzLCAwIH0pOworICAgICAgICAgICAgd2Vic2l0
ZURhdGEuZW50cmllcyA9IFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcldpdGhEYXRh
YmFzZVBhdGgod2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkpLT5vcmlnaW5zKCkubWFwKFtdKGF1dG8m
IG9yaWdpbikgeworICAgICAgICAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0YTo6RW50cnkgeyBv
cmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6V2ViU1FMRGF0YWJhc2VzLCAwIH07CisgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkV2Vic2l0ZURhdGEoV1RG
TW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICB9KTsKICAgICB9CkBAIC00OTksOCArNTA0LDkg
QEAgcHJpdmF0ZToKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6
TWVkaWFLZXlzKSAmJiBpc1BlcnNpc3RlbnQoKSkgewogICAgICAgICBtX3F1ZXVlLT5kaXNwYXRj
aChbbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSA9IG1fY29uZmlndXJhdGlvbi0+bWVkaWFLZXlz
U3RvcmFnZURpcmVjdG9yeSgpLmlzb2xhdGVkQ29weSgpLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsK
ICAgICAgICAgICAgIFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhOwotICAgICAgICAgICAgZm9yIChh
dXRvJiBvcmlnaW4gOiBtZWRpYUtleU9yaWdpbnMobWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSkp
Ci0gICAgICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmQoV2Vic2l0ZURhdGE6
OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6Ok1lZGlhS2V5cywgMCB9KTsKKyAgICAg
ICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMgPSBtZWRpYUtleU9yaWdpbnMobWVkaWFLZXlzU3Rv
cmFnZURpcmVjdG9yeSkubWFwKFtdKGF1dG8mIG9yaWdpbikgeworICAgICAgICAgICAgICAgIHJl
dHVybiBXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6TWVkaWFL
ZXlzLCAwIH07CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRv
ci0+YWRkV2Vic2l0ZURhdGEoV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICB9KTsKICAg
ICB9CkBAIC03MTIsOCArNzE4LDkgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRh
KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgY29uc3QgVmUKICAgICAgICAg
ICAgICAgICBmb3IgKGF1dG8mIGhvc3ROYW1lIDogZGF0YVJlY29yZC5IU1RTQ2FjaGVIb3N0TmFt
ZXMpCiAgICAgICAgICAgICAgICAgICAgIEhTVFNDYWNoZUhvc3ROYW1lcy5hcHBlbmQoaG9zdE5h
bWUpOwogI2lmIEVOQUJMRShJTlRFTExJR0VOVF9UUkFDS0lOR19QUkVWRU5USU9OKQorICAgICAg
ICAgICAgICAgIHJlZ2lzdHJhYmxlRG9tYWlucy5yZXNlcnZlQ2FwYWNpdHkocmVnaXN0cmFibGVE
b21haW5zLnNpemUoKSArIGRhdGFSZWNvcmQucmVzb3VyY2VMb2FkU3RhdGlzdGljc1JlZ2lzdHJh
YmxlRG9tYWlucy5zaXplKCkpOwogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgcmVnaXN0cmFi
bGVEb21haW4gOiBkYXRhUmVjb3JkLnJlc291cmNlTG9hZFN0YXRpc3RpY3NSZWdpc3RyYWJsZURv
bWFpbnMpCi0gICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhYmxlRG9tYWlucy5hcHBlbmQocmVn
aXN0cmFibGVEb21haW4pOworICAgICAgICAgICAgICAgICAgICByZWdpc3RyYWJsZURvbWFpbnMu
dW5jaGVja2VkQXBwZW5kKHJlZ2lzdHJhYmxlRG9tYWluKTsKICNlbmRpZgogICAgICAgICAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvVGV4dENoZWNrZXJJ
T1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvVGV4dENoZWNrZXJJT1MubW0KaW5k
ZXggZmEzYmM1MGIyNGZhZjJlZTVmZWU3NDZkMmJlYzgwNGFhNGFmYjcyYy4uMDFhMTY3YTc4ZTM3
Y2QzY2RmNGIxNmNlZWI5ODViZmE1YjU1YzY2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1RleHRDaGVja2VySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbQpAQCAtMzQsNiArMzQsNyBAQAogI2ltcG9ydCA8d3Rm
L0hhc2hNYXAuaD4KICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2ltcG9ydCA8d3Rm
L1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0
IDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMjQwLDEy
ICsyNDEsMTMgQEAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNr
VGV4dE9mUGFyYWdyYXBoKFNwZWxsRG9jdW1lbnRUYWcgc3AKICAgICAgICAgICAgICAgICBUZXh0
Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAgICAgICAgIHJlc3VsdC50eXBlID0gVGV4
dENoZWNraW5nVHlwZTo6U3BlbGxpbmc7CiAgICAgICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0g
cmVzdWx0UmFuZ2U7Ci0gICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKKyAg
ICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAg
ICAgfSBlbHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZUdyYW1tYXIgJiYg
Y2hlY2tpbmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKSkgewogICAg
ICAgICAgICAgICAgIFRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICAgICAg
TlNBcnJheSAqZGV0YWlscyA9IFtpbmNvbWluZ1Jlc3VsdCBncmFtbWFyRGV0YWlsc107CiAgICAg
ICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyOwogICAg
ICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJhbmdlOworICAgICAgICAgICAgICAg
IHJlc3VsdC5kZXRhaWxzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGV0YWlscy5jb3VudCk7CiAg
ICAgICAgICAgICAgICAgZm9yIChOU0RpY3Rpb25hcnkgKmluY29taW5nRGV0YWlsIGluIGRldGFp
bHMpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGluY29taW5nRGV0YWlsKTsKICAgICAg
ICAgICAgICAgICAgICAgR3JhbW1hckRldGFpbCBkZXRhaWw7CkBAIC0yNTksMTMgKzI2MSwxMCBA
QCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoU3BlbGxEb2N1bWVudFRhZyBzcAogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgZGV0YWlsLnJhbmdlID0gZGV0YWlsTlNSYW5nZTsKICAgICAgICAgICAgICAg
ICAgICAgZGV0YWlsLnVzZXJEZXNjcmlwdGlvbiA9IFtpbmNvbWluZ0RldGFpbCBvYmplY3RGb3JL
ZXk6QCJOU0dyYW1tYXJVc2VyRGVzY3JpcHRpb24iXTsKLSAgICAgICAgICAgICAgICAgICAgTlNB
cnJheSAqZ3Vlc3NlcyA9IFtpbmNvbWluZ0RldGFpbCBvYmplY3RGb3JLZXk6QCJOU0dyYW1tYXJD
b3JyZWN0aW9ucyJdOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
Zm9yIChOU1N0cmluZyAqZ3Vlc3MgaW4gZ3Vlc3NlcykKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRldGFpbC5ndWVzc2VzLmFwcGVuZChndWVzcyk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC5kZXRhaWxzLmFwcGVuZChkZXRhaWwpOworICAgICAgICAgICAgICAgICAgICBkZXRhaWwuZ3Vl
c3NlcyA9IG1ha2VWZWN0b3I8U3RyaW5nPihbaW5jb21pbmdEZXRhaWwgb2JqZWN0Rm9yS2V5OkAi
TlNHcmFtbWFyQ29ycmVjdGlvbnMiXSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5kZXRh
aWxzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGRldGFpbCkpOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgICAg
IHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9IGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
S0FjdGlvblNoZWV0QXNzaXN0YW50Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dL
QWN0aW9uU2hlZXRBc3Npc3RhbnQubW0KaW5kZXggY2M0MmJmOWZhZDcxMzQ5ODMzNTBiMjc5NDMx
ZTY4Mzk2N2IyZTA4MS4uNGJmYTBjOTIwZTk5OTYyM2NlOTcwMTc4YWM3ZjVhZGUzMjdiYjIyZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Np
c3RhbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRB
c3Npc3RhbnQubW0KQEAgLTIwNywxMiArMjA3LDExIEBAIC0gKENHUmVjdClwcmVzZW50YXRpb25S
ZWN0Rm9yRWxlbWVudFVzaW5nQ2xvc2VzdEluZGljYXRlZFJlY3QKIAogICAgIFdlYkNvcmU6OkZs
b2F0UG9pbnQgdG91Y2hMb2NhdGlvbiA9IF9wb3NpdGlvbkluZm9ybWF0aW9uLT5yZXF1ZXN0LnBv
aW50OwogICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgbGlua0VsZW1lbnRMb2NhdGlvbiA9IGluZGlj
YXRvci50ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCk7Ci0g
ICAgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4gaW5kaWNhdGVkUmVjdHM7Ci0gICAgZm9yIChh
dXRvIHJlY3QgOiBpbmRpY2F0b3IudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcykg
eworICAgIGF1dG8gaW5kaWNhdGVkUmVjdHMgPSBpbmRpY2F0b3IudGV4dFJlY3RzSW5Cb3VuZGlu
Z1JlY3RDb29yZGluYXRlcy5tYXAoWyZdKGF1dG8gcmVjdCkgewogICAgICAgICByZWN0LmluZmxh
dGUoMik7CiAgICAgICAgIHJlY3QubW92ZUJ5KGxpbmtFbGVtZW50TG9jYXRpb24pOwotICAgICAg
ICBpbmRpY2F0ZWRSZWN0cy5hcHBlbmQocmVjdCk7Ci0gICAgfQorICAgICAgICByZXR1cm4gcmVj
dDsKKyAgICB9KTsKIAogICAgIGZvciAoY29uc3QgYXV0byYgcGF0aCA6IFdlYkNvcmU6OlBhdGhV
dGlsaXRpZXM6OnBhdGhzV2l0aFNocmlua1dyYXBwZWRSZWN0cyhpbmRpY2F0ZWRSZWN0cywgMCkp
IHsKICAgICAgICAgYXV0byBib3VuZGluZ1JlY3QgPSBwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbQppbmRleCAx
NmQ2ODM4ZTU0OGUwNDMyZmJkMThmOGQ0ZDJhZGUxYzJjMTA4ZjZlLi5lY2UyZTNlMjQ1MzE1ZWU3
MWFkOTc5N2ZhNmNjODBiNDI5MzMwZDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1RleHRDaGVja2VyTWFjLm1tCkBAIC0zNDQsMTIgKzM0NCwxMyBAQCBWZWN0b3I8VGV4dENo
ZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3BlbGxEb2N1
bWVudFRhZyBzcAogICAgICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAg
ICAgICAgIHJlc3VsdC50eXBlID0gVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmc7CiAgICAgICAg
ICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5nZTsKLSAgICAgICAgICAgIHJlc3VsdHMuYXBw
ZW5kKHJlc3VsdCk7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkp
OwogICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlR3Jh
bW1hciAmJiBjaGVja2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIp
KSB7CiAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAgICAg
TlNBcnJheSAqZGV0YWlscyA9IFtpbmNvbWluZ1Jlc3VsdCBncmFtbWFyRGV0YWlsc107CiAgICAg
ICAgICAgICByZXN1bHQudHlwZSA9IFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXI7CiAgICAgICAg
ICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5nZTsKKyAgICAgICAgICAgIHJlc3VsdC5kZXRh
aWxzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGV0YWlscy5jb3VudCk7CiAgICAgICAgICAgICBm
b3IgKE5TRGljdGlvbmFyeSAqaW5jb21pbmdEZXRhaWwgaW4gZGV0YWlscykgewogICAgICAgICAg
ICAgICAgIEFTU0VSVChpbmNvbWluZ0RldGFpbCk7CiAgICAgICAgICAgICAgICAgR3JhbW1hckRl
dGFpbCBkZXRhaWw7CkBAIC0zNjEsOSArMzYyLDggQEAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3Vs
dD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFNwZWxsRG9jdW1lbnRUYWcgc3AK
ICAgICAgICAgICAgICAgICBkZXRhaWwucmFuZ2UgPSBkZXRhaWxOU1JhbmdlOwogICAgICAgICAg
ICAgICAgIGRldGFpbC51c2VyRGVzY3JpcHRpb24gPSBbaW5jb21pbmdEZXRhaWwgb2JqZWN0Rm9y
S2V5Ok5TR3JhbW1hclVzZXJEZXNjcmlwdGlvbl07CiAgICAgICAgICAgICAgICAgTlNBcnJheSAq
Z3Vlc3NlcyA9IFtpbmNvbWluZ0RldGFpbCBvYmplY3RGb3JLZXk6TlNHcmFtbWFyQ29ycmVjdGlv
bnNdOwotICAgICAgICAgICAgICAgIGZvciAoTlNTdHJpbmcgKmd1ZXNzIGluIGd1ZXNzZXMpCi0g
ICAgICAgICAgICAgICAgICAgIGRldGFpbC5ndWVzc2VzLmFwcGVuZChTdHJpbmcoZ3Vlc3MpKTsK
LSAgICAgICAgICAgICAgICByZXN1bHQuZGV0YWlscy5hcHBlbmQoZGV0YWlsKTsKKyAgICAgICAg
ICAgICAgICBkZXRhaWwuZ3Vlc3NlcyA9IG1ha2VWZWN0b3I8U3RyaW5nPihndWVzc2VzKTsKKyAg
ICAgICAgICAgICAgICByZXN1bHQuZGV0YWlscy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShkZXRh
aWwpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7
CiAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVMaW5r
ICYmIGNoZWNraW5nVHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6TGluaykpIHsKQEAg
LTM3MSwzMSArMzcxLDMxIEBAIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2Vy
OjpjaGVja1RleHRPZlBhcmFncmFwaChTcGVsbERvY3VtZW50VGFnIHNwCiAgICAgICAgICAgICBy
ZXN1bHQudHlwZSA9IFRleHRDaGVja2luZ1R5cGU6Okxpbms7CiAgICAgICAgICAgICByZXN1bHQu
cmFuZ2UgPSByZXN1bHRSYW5nZTsKICAgICAgICAgICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IFtb
aW5jb21pbmdSZXN1bHQgVVJMXSBhYnNvbHV0ZVN0cmluZ107Ci0gICAgICAgICAgICByZXN1bHRz
LmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1
bHQpKTsKICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlw
ZVF1b3RlICYmIGNoZWNraW5nVHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6UXVvdGUp
KSB7CiAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAgICAg
cmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpRdW90ZTsKICAgICAgICAgICAgIHJlc3Vs
dC5yYW5nZSA9IHJlc3VsdFJhbmdlOwogICAgICAgICAgICAgcmVzdWx0LnJlcGxhY2VtZW50ID0g
W2luY29taW5nUmVzdWx0IHJlcGxhY2VtZW50U3RyaW5nXTsKLSAgICAgICAgICAgIHJlc3VsdHMu
YXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3Vs
dCkpOwogICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBl
RGFzaCAmJiBjaGVja2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkRhc2gpKSB7
CiAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAgICAgcmVz
dWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpEYXNoOwogICAgICAgICAgICAgcmVzdWx0LnJh
bmdlID0gcmVzdWx0UmFuZ2U7CiAgICAgICAgICAgICByZXN1bHQucmVwbGFjZW1lbnQgPSBbaW5j
b21pbmdSZXN1bHQgcmVwbGFjZW1lbnRTdHJpbmddOwotICAgICAgICAgICAgcmVzdWx0cy5hcHBl
bmQocmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7
CiAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVSZXBs
YWNlbWVudCAmJiBjaGVja2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OlJlcGxh
Y2VtZW50KSkgewogICAgICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAg
ICAgICAgIHJlc3VsdC50eXBlID0gVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQ7CiAgICAg
ICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5nZTsKICAgICAgICAgICAgIHJlc3VsdC5y
ZXBsYWNlbWVudCA9IFtpbmNvbWluZ1Jlc3VsdCByZXBsYWNlbWVudFN0cmluZ107Ci0gICAgICAg
ICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQo
V1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4
dENoZWNraW5nVHlwZUNvcnJlY3Rpb24gJiYgY2hlY2tpbmdUeXBlcy5jb250YWlucyhUZXh0Q2hl
Y2tpbmdUeXBlOjpDb3JyZWN0aW9uKSkgewogICAgICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0
IHJlc3VsdDsKICAgICAgICAgICAgIHJlc3VsdC50eXBlID0gVGV4dENoZWNraW5nVHlwZTo6Q29y
cmVjdGlvbjsKICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJhbmdlOwogICAgICAg
ICAgICAgcmVzdWx0LnJlcGxhY2VtZW50ID0gW2luY29taW5nUmVzdWx0IHJlcGxhY2VtZW50U3Ry
aW5nXTsKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICBy
ZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvQXBwbGVQYXkvV2ViUGF5bWVudENvb3Jk
aW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9BcHBsZVBheS9XZWJQYXltZW50
Q29vcmRpbmF0b3IuY3BwCmluZGV4IDczNTc2YTI0N2NlMTE3NTI3NTY1ZmIxZDI2YjRjZDA5YjI0
NzJlOWYuLjEyN2FjMWU0NTc3MTViZjdkZmIwZTljOTNhMTA0MjBiNGY1YzM1NzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9BcHBsZVBheS9XZWJQYXltZW50
Q29vcmRpbmF0b3IuY3BwCkBAIC05OCw5ICs5OCw5IEBAIHZvaWQgV2ViUGF5bWVudENvb3JkaW5h
dG9yOjpvcGVuUGF5bWVudFNldHVwKGNvbnN0IFN0cmluZyYgbWVyY2hhbnRJZGVudGlmaWVyLCBj
CiAKIGJvb2wgV2ViUGF5bWVudENvb3JkaW5hdG9yOjpzaG93UGF5bWVudFVJKGNvbnN0IFVSTCYg
b3JpZ2luYXRpbmdVUkwsIGNvbnN0IFZlY3RvcjxVUkw+JiBsaW5rSWNvblVSTHMsIGNvbnN0IFdl
YkNvcmU6OkFwcGxlUGF5U2Vzc2lvblBheW1lbnRSZXF1ZXN0JiBwYXltZW50UmVxdWVzdCkKIHsK
LSAgICBWZWN0b3I8U3RyaW5nPiBsaW5rSWNvblVSTFN0cmluZ3M7Ci0gICAgZm9yIChjb25zdCBh
dXRvJiBsaW5rSWNvblVSTCA6IGxpbmtJY29uVVJMcykKLSAgICAgICAgbGlua0ljb25VUkxTdHJp
bmdzLmFwcGVuZChsaW5rSWNvblVSTC5zdHJpbmcoKSk7CisgICAgYXV0byBsaW5rSWNvblVSTFN0
cmluZ3MgPSBsaW5rSWNvblVSTHMubWFwKFtdKGF1dG8mIGxpbmtJY29uVVJMKSB7CisgICAgICAg
IHJldHVybiBsaW5rSWNvblVSTC5zdHJpbmcoKTsKKyAgICB9KTsKIAogICAgIGJvb2wgcmVzdWx0
OwogICAgIGlmICghc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBheW1lbnRDb29yZGluYXRvclByb3h5
OjpTaG93UGF5bWVudFVJKG1fd2ViUGFnZS5pZGVudGlmaWVyKCksIG1fd2ViUGFnZS53ZWJQYWdl
UHJveHlJZGVudGlmaWVyKCksIG9yaWdpbmF0aW5nVVJMLnN0cmluZygpLCBsaW5rSWNvblVSTFN0
cmluZ3MsIHBheW1lbnRSZXF1ZXN0KSwgTWVzc2FnZXM6OldlYlBheW1lbnRDb29yZGluYXRvclBy
b3h5OjpTaG93UGF5bWVudFVJOjpSZXBseShyZXN1bHQpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Np
b25Qcm94eS5jcHAKaW5kZXggYjBmZTgzNTcyMjNiMzEzM2ZjNGRiMmZiYWFkOGU3MzlmNWUzYjlk
Ni4uZjQ1Y2ZiNDE5MTM2YjdjZjA4ZTNiZmQ0OTZiMmI2OTdhM2M5ZWZlMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Q
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0
b21hdGlvblNlc3Npb25Qcm94eS5jcHAKQEAgLTgwNSwxMyArODA1LDEyIEBAIHZvaWQgV2ViQXV0
b21hdGlvblNlc3Npb25Qcm94eTo6c2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWQoV2ViQ29yZTo6
UGFnZUlkZW50aWZpCiAgICAgYXV0byYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8V2ViQ29yZTo6
SFRNTElucHV0RWxlbWVudD4oKmNvcmVFbGVtZW50KTsKICAgICBWZWN0b3I8UmVmPFdlYkNvcmU6
OkZpbGU+PiBmaWxlT2JqZWN0czsKICAgICBpZiAoaW5wdXRFbGVtZW50Lm11bHRpcGxlKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIGZpbGVzID0gaW5wdXRFbGVtZW50LmZpbGVzKCkpIHsKLSAgICAg
ICAgICAgIGZvciAoYXV0byYgZmlsZSA6IGZpbGVzLT5maWxlcygpKQotICAgICAgICAgICAgICAg
IGZpbGVPYmplY3RzLmFwcGVuZChmaWxlLmNvcHlSZWYoKSk7Ci0gICAgICAgIH0KKyAgICAgICAg
aWYgKGF1dG8qIGZpbGVzID0gaW5wdXRFbGVtZW50LmZpbGVzKCkpCisgICAgICAgICAgICBmaWxl
T2JqZWN0cy5hcHBlbmRWZWN0b3IoZmlsZXMtPmZpbGVzKCkpOwogICAgIH0KKyAgICBmaWxlT2Jq
ZWN0cy5yZXNlcnZlQ2FwYWNpdHkoZmlsZU9iamVjdHMuc2l6ZSgpICsgZmlsZW5hbWVzLnNpemUo
KSk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBwYXRoIDogZmlsZW5hbWVzKQotICAgICAgICBmaWxl
T2JqZWN0cy5hcHBlbmQoV2ViQ29yZTo6RmlsZTo6Y3JlYXRlKCZpbnB1dEVsZW1lbnQuZG9jdW1l
bnQoKSwgcGF0aCkpOworICAgICAgICBmaWxlT2JqZWN0cy51bmNoZWNrZWRBcHBlbmQoV2ViQ29y
ZTo6RmlsZTo6Y3JlYXRlKCZpbnB1dEVsZW1lbnQuZG9jdW1lbnQoKSwgcGF0aCkpOwogICAgIGlu
cHV0RWxlbWVudC5zZXRGaWxlcyhXZWJDb3JlOjpGaWxlTGlzdDo6Y3JlYXRlKFdURk1vdmUoZmls
ZU9iamVjdHMpKSk7CiAKICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGQ6Om51bGxvcHQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBs
YXllck1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1v
dGVNZWRpYVBsYXllck1hbmFnZXIuY3BwCmluZGV4IDdjOWQ0NTY5YTRlNTBiMDcxM2E3N2E4YjRh
YzI0MGZhZTQ2ZGRkMWUuLjgxM2FmMjg1OTgzY2I4MmMzMGYyNGUyNTM3MTU1YzdmMGYzYjYxMjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVk
aWFQbGF5ZXJNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21l
ZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlci5jcHAKQEAgLTE2MCw4ICsxNjAsOSBAQCBzdGQ6
OnVuaXF1ZV9wdHI8TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlPiBSZW1vdGVNZWRpYVBsYXll
ck1hbmFnZXI6OmNyZWF0ZVJlbQogICAgIHByb3h5Q29uZmlndXJhdGlvbi5pc1ZpZGVvID0gcGxh
eWVyLT5pc1ZpZGVvUGxheWVyKCk7CiAKICNpZiBFTkFCTEUoQVZGX0NBUFRJT05TKQotICAgIGZv
ciAoY29uc3QgYXV0byYgdHJhY2sgOiBwbGF5ZXItPm91dE9mQmFuZFRyYWNrU291cmNlcygpKQot
ICAgICAgICBwcm94eUNvbmZpZ3VyYXRpb24ub3V0T2ZCYW5kVHJhY2tEYXRhLmFwcGVuZCh0cmFj
ay0+ZGF0YSgpKTsKKyAgICBwcm94eUNvbmZpZ3VyYXRpb24ub3V0T2ZCYW5kVHJhY2tEYXRhID0g
cGxheWVyLT5vdXRPZkJhbmRUcmFja1NvdXJjZXMoKS5tYXAoW10oYXV0byYgdHJhY2spIHsKKyAg
ICAgICAgcmV0dXJuIHRyYWNrLT5kYXRhKCk7CisgICAgfSk7CiAjZW5kaWYKIAogICAgIGF1dG8g
ZG9jdW1lbnRTZWN1cml0eU9yaWdpbiA9IHBsYXllci0+ZG9jdW1lbnRTZWN1cml0eU9yaWdpbigp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9Tb3VyY2VC
dWZmZXJQcml2YXRlUmVtb3RlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVk
aWEvU291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZS5jcHAKaW5kZXggOTY2ZmM5M2I3N2FmYWEzZTYy
MDhkN2FiYTVhZWQyYzdhOTRjNzRiMi4uNGVmMTY0MGE0MDEwMDZhNmI4ZjY5Y2M1MDExNjRhOGJk
MTkwZWI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9T
b3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL21lZGlhL1NvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGUuY3BwCkBAIC0zMzgsMTYgKzMz
OCwxMSBAQCB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGU6OnVwZGF0ZVRyYWNrSWRzKFZl
Y3RvcjxzdGQ6OnBhaXI8QXRvbVN0cmluZywgQXRvbQogICAgIGlmICghbV9ncHVQcm9jZXNzQ29u
bmVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjxUcmFja1By
aXZhdGVSZW1vdGVJZGVudGlmaWVyLCBUcmFja1ByaXZhdGVSZW1vdGVJZGVudGlmaWVyPj4gaWRl
bnRpZmllclBhaXJzOwotCi0gICAgZm9yIChhdXRvJiB0cmFja0lkUGFpciA6IHRyYWNrSWRQYWly
cykgeworICAgIGF1dG8gaWRlbnRpZmllclBhaXJzID0gdHJhY2tJZFBhaXJzLm1hcChbdGhpc10o
YXV0byYgdHJhY2tJZFBhaXIpIHsKICAgICAgICAgQVNTRVJUKG1fcHJldlRyYWNrSWRlbnRpZmll
ck1hcC5jb250YWlucyh0cmFja0lkUGFpci5maXJzdCkpOwogICAgICAgICBBU1NFUlQobV90cmFj
a0lkZW50aWZpZXJNYXAuY29udGFpbnModHJhY2tJZFBhaXIuc2Vjb25kKSk7Ci0KLSAgICAgICAg
YXV0byBvbGRJZGVudGlmaWVyID0gbV9wcmV2VHJhY2tJZGVudGlmaWVyTWFwLnRha2UodHJhY2tJ
ZFBhaXIuZmlyc3QpOwotICAgICAgICBhdXRvIG5ld0lkZW50aWZpZXIgPSBtX3RyYWNrSWRlbnRp
Zmllck1hcC5nZXQodHJhY2tJZFBhaXIuc2Vjb25kKTsKLSAgICAgICAgaWRlbnRpZmllclBhaXJz
LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihvbGRJZGVudGlmaWVyLCBuZXdJZGVudGlmaWVyKSk7Ci0g
ICAgfQorICAgICAgICByZXR1cm4gc3RkOjpwYWlyIHsgbV9wcmV2VHJhY2tJZGVudGlmaWVyTWFw
LnRha2UodHJhY2tJZFBhaXIuZmlyc3QpLCBtX3RyYWNrSWRlbnRpZmllck1hcC5nZXQodHJhY2tJ
ZFBhaXIuc2Vjb25kKSB9OworICAgIH0pOwogCiAgICAgbV9ncHVQcm9jZXNzQ29ubmVjdGlvbi0+
Y29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6OlJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5OjpVcGRh
dGVUcmFja0lkcyhpZGVudGlmaWVyUGFpcnMpLCBtX3JlbW90ZVNvdXJjZUJ1ZmZlcklkZW50aWZp
ZXIpOwogfQpAQCAtMzgzLDI3ICszNzgsMzAgQEAgdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlUmVt
b3RlOjpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWUKICAg
ICBzZWdtZW50LmR1cmF0aW9uID0gc2VnbWVudEluZm8uZHVyYXRpb247CiAKICAgICBtX3ByZXZU
cmFja0lkZW50aWZpZXJNYXAuc3dhcChtX3RyYWNrSWRlbnRpZmllck1hcCk7CisgICAgc2VnbWVu
dC5hdWRpb1RyYWNrcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNlZ21lbnRJbmZvLmF1ZGlvVHJh
Y2tzLnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiBhdWRpb1RyYWNrIDogc2VnbWVudEluZm8uYXVk
aW9UcmFja3MpIHsKICAgICAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6
YXRpb25TZWdtZW50OjpBdWRpb1RyYWNrSW5mb3JtYXRpb24gaW5mbzsKICAgICAgICAgaW5mby50
cmFjayA9IG1fbWVkaWFQbGF5ZXJQcml2YXRlLT5hdWRpb1RyYWNrUHJpdmF0ZVJlbW90ZShhdWRp
b1RyYWNrLmlkZW50aWZpZXIpOwogICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0gUmVtb3RlTWVk
aWFEZXNjcmlwdGlvbjo6Y3JlYXRlKGF1ZGlvVHJhY2suZGVzY3JpcHRpb24pOwotICAgICAgICBz
ZWdtZW50LmF1ZGlvVHJhY2tzLmFwcGVuZChpbmZvKTsKKyAgICAgICAgc2VnbWVudC5hdWRpb1Ry
YWNrcy51bmNoZWNrZWRBcHBlbmQoaW5mbyk7CiAgICAgICAgIG1fdHJhY2tJZGVudGlmaWVyTWFw
LmFkZChpbmZvLnRyYWNrLT5pZCgpLCBhdWRpb1RyYWNrLmlkZW50aWZpZXIpOwogICAgIH0KIAor
ICAgIHNlZ21lbnQudmlkZW9UcmFja3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzZWdtZW50SW5m
by52aWRlb1RyYWNrcy5zaXplKCkpOwogICAgIGZvciAoYXV0byYgdmlkZW9UcmFjayA6IHNlZ21l
bnRJbmZvLnZpZGVvVHJhY2tzKSB7CiAgICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6
OkluaXRpYWxpemF0aW9uU2VnbWVudDo6VmlkZW9UcmFja0luZm9ybWF0aW9uIGluZm87CiAgICAg
ICAgIGluZm8udHJhY2sgPSBtX21lZGlhUGxheWVyUHJpdmF0ZS0+dmlkZW9UcmFja1ByaXZhdGVS
ZW1vdGUodmlkZW9UcmFjay5pZGVudGlmaWVyKTsKICAgICAgICAgaW5mby5kZXNjcmlwdGlvbiA9
IFJlbW90ZU1lZGlhRGVzY3JpcHRpb246OmNyZWF0ZSh2aWRlb1RyYWNrLmRlc2NyaXB0aW9uKTsK
LSAgICAgICAgc2VnbWVudC52aWRlb1RyYWNrcy5hcHBlbmQoaW5mbyk7CisgICAgICAgIHNlZ21l
bnQudmlkZW9UcmFja3MudW5jaGVja2VkQXBwZW5kKGluZm8pOwogICAgICAgICBtX3RyYWNrSWRl
bnRpZmllck1hcC5hZGQoaW5mby50cmFjay0+aWQoKSwgdmlkZW9UcmFjay5pZGVudGlmaWVyKTsK
ICAgICB9CiAKKyAgICBzZWdtZW50LnRleHRUcmFja3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShz
ZWdtZW50SW5mby50ZXh0VHJhY2tzLnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiB0ZXh0VHJhY2sg
OiBzZWdtZW50SW5mby50ZXh0VHJhY2tzKSB7CiAgICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVD
bGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudDo6VGV4dFRyYWNrSW5mb3JtYXRpb24gaW5mbzsK
ICAgICAgICAgaW5mby50cmFjayA9IG1fbWVkaWFQbGF5ZXJQcml2YXRlLT50ZXh0VHJhY2tQcml2
YXRlUmVtb3RlKHRleHRUcmFjay5pZGVudGlmaWVyKTsKICAgICAgICAgaW5mby5kZXNjcmlwdGlv
biA9IFJlbW90ZU1lZGlhRGVzY3JpcHRpb246OmNyZWF0ZSh0ZXh0VHJhY2suZGVzY3JpcHRpb24p
OwotICAgICAgICBzZWdtZW50LnRleHRUcmFja3MuYXBwZW5kKGluZm8pOworICAgICAgICBzZWdt
ZW50LnRleHRUcmFja3MudW5jaGVja2VkQXBwZW5kKGluZm8pOwogICAgICAgICBtX3RyYWNrSWRl
bnRpZmllck1hcC5hZGQoaW5mby50cmFjay0+aWQoKSwgdGV4dFRyYWNrLmlkZW50aWZpZXIpOwog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMv
TGliV2ViUlRDQ29kZWNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRj
L0xpYldlYlJUQ0NvZGVjcy5jcHAKaW5kZXggZDA3MGMyYjc5ZGY0MGNhY2I0MThmMDY3ODI2N2U0
YzNiNGE1NDYxYy4uMWMyMjczNDMyNTQ1YWJmM2M5MDZiODVkYzE3ZDliOTlkNGUxZjdhZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29k
ZWNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJS
VENDb2RlY3MuY3BwCkBAIC0zOTIsOSArMzkyLDkgQEAgTGliV2ViUlRDQ29kZWNzOjpFbmNvZGVy
KiBMaWJXZWJSVENDb2RlY3M6OmNyZWF0ZUVuY29kZXIoVHlwZSB0eXBlLCBjb25zdCBzdGQ6Om0K
ICAgICBlbmNvZGVyLT5pZGVudGlmaWVyID0gUlRDRW5jb2RlcklkZW50aWZpZXI6OmdlbmVyYXRl
VGhyZWFkU2FmZSgpOwogICAgIGVuY29kZXItPmNvZGVjVHlwZSA9IHRvV2ViUlRDQ29kZWNUeXBl
KHR5cGUpOwogCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IHBhcmFtZXRl
cnM7Ci0gICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6IGZvcm1hdFBhcmFtZXRlcnMpCi0gICAgICAg
IHBhcmFtZXRlcnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKFN0cmluZzo6ZnJvbVVURjgoa2V5VmFs
dWUuZmlyc3QuZGF0YSgpLCBrZXlWYWx1ZS5maXJzdC5sZW5ndGgoKSksIFN0cmluZzo6ZnJvbVVU
Rjgoa2V5VmFsdWUuc2Vjb25kLmRhdGEoKSwga2V5VmFsdWUuc2Vjb25kLmxlbmd0aCgpKSkpOwor
ICAgIGF1dG8gcGFyYW1ldGVycyA9IFdURjo6bWFwKGZvcm1hdFBhcmFtZXRlcnMsIFtdKGF1dG8m
IGVudHJ5KSB7CisgICAgICAgIHJldHVybiBzdGQ6OnBhaXIgeyBTdHJpbmc6OmZyb21VVEY4KGVu
dHJ5LmZpcnN0LmRhdGEoKSwgZW50cnkuZmlyc3QubGVuZ3RoKCkpLCBTdHJpbmc6OmZyb21VVEY4
KGVudHJ5LnNlY29uZC5kYXRhKCksIGVudHJ5LnNlY29uZC5sZW5ndGgoKSkgfTsKKyAgICB9KTsK
IAogICAgIGVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uQW5kRGlzcGF0Y2hUb1RocmVhZChbdGhp
cywgZW5jb2RlciA9IFdURk1vdmUoZW5jb2RlciksIHR5cGUsIHBhcmFtZXRlcnMgPSBXVEZNb3Zl
KHBhcmFtZXRlcnMpXSgpIG11dGFibGUgewogICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3Zlcmxh
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tC
dW5kbGVQYWdlT3ZlcmxheS5jcHAKaW5kZXggZDg1NDJhMmIxMGIxYjNlMTUzNjE0MTU0MTE1ZWY3
ZWNlYzQ0ZWI4OC4uNmY4Zjc0NTM1OTI0NTNlMGU2MTg2NzYxMjQ0ZTBiNzc5MjIxZGU3OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dL
QnVuZGxlUGFnZU92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcApAQCAtMTk3LDExICsxOTcs
MTMgQEAgcHJpdmF0ZToKICAgICAgICAgYXV0byB3a05hbWVzID0gbV9hY2Nlc3NpYmlsaXR5Q2xp
ZW50LmNsaWVudCgpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXModG9BUEkoJnBhZ2VP
dmVybGF5KSwgcGFyYW1lcml6ZWROYW1lcywgbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgp
LmJhc2UuY2xpZW50SW5mbyk7CiAKICAgICAgICAgc2l6ZV90IGNvdW50ID0gV0tBcnJheUdldFNp
emUod2tOYW1lcyk7CisgICAgICAgIG5hbWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY291bnQp
OwogICAgICAgICBmb3IgKHNpemVfdCBrID0gMDsgayA8IGNvdW50OyBrKyspIHsKICAgICAgICAg
ICAgIFdLVHlwZVJlZiBpdGVtID0gV0tBcnJheUdldEl0ZW1BdEluZGV4KHdrTmFtZXMsIGspOwog
ICAgICAgICAgICAgaWYgKFdlYktpdDo6dG9JbXBsKGl0ZW0pLT50eXBlKCkgPT0gQVBJOjpTdHJp
bmc6OkFQSVR5cGUpCi0gICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKFdlYktpdDo6dG9XVEZT
dHJpbmcoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KGl0ZW0pKSk7CisgICAgICAgICAgICAgICAg
bmFtZXMudW5jaGVja2VkQXBwZW5kKFdlYktpdDo6dG9XVEZTdHJpbmcoc3RhdGljX2Nhc3Q8V0tT
dHJpbmdSZWY+KGl0ZW0pKSk7CiAgICAgICAgIH0KKyAgICAgICAgbmFtZXMuc2hyaW5rVG9GaXQo
KTsKIAogICAgICAgICByZXR1cm4gbmFtZXM7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1Nlc3Npb25TdGF0ZUNvbnZlcnNpb24uY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1Nlc3Npb25TdGF0ZUNv
bnZlcnNpb24uY3BwCmluZGV4IGM4ZjI0OGE2NDc2NTc2YTI5MmM3NWQ1ZmFhNjhmNWFjNjNhNDc1
YzguLjU2N2Q0NzUxYmVlODNhM2IzZjRmNmUwZmEyMzc3YmQwMDYzNTBhMjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9TZXNzaW9uU3RhdGVDb252
ZXJzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
U2Vzc2lvblN0YXRlQ29udmVyc2lvbi5jcHAKQEAgLTk5LDEwICs5OSw5IEBAIHN0YXRpYyBGcmFt
ZVN0YXRlIHRvRnJhbWVTdGF0ZShjb25zdCBIaXN0b3J5SXRlbSYgaGlzdG9yeUl0ZW0pCiAgICAg
ZnJhbWVTdGF0ZS5vYnNjdXJlZEluc2V0cyA9IGhpc3RvcnlJdGVtLm9ic2N1cmVkSW5zZXRzKCk7
CiAjZW5kaWYKIAotICAgIGZvciAoYXV0byYgY2hpbGRIaXN0b3J5SXRlbSA6IGhpc3RvcnlJdGVt
LmNoaWxkcmVuKCkpIHsKLSAgICAgICAgRnJhbWVTdGF0ZSBjaGlsZEZyYW1lU3RhdGUgPSB0b0Zy
YW1lU3RhdGUoY2hpbGRIaXN0b3J5SXRlbSk7Ci0gICAgICAgIGZyYW1lU3RhdGUuY2hpbGRyZW4u
YXBwZW5kKFdURk1vdmUoY2hpbGRGcmFtZVN0YXRlKSk7Ci0gICAgfQorICAgIGZyYW1lU3RhdGUu
Y2hpbGRyZW4gPSBoaXN0b3J5SXRlbS5jaGlsZHJlbigpLm1hcChbXShhdXRvJiBjaGlsZEhpc3Rv
cnlJdGVtKSB7CisgICAgICAgIHJldHVybiB0b0ZyYW1lU3RhdGUoY2hpbGRIaXN0b3J5SXRlbSk7
CisgICAgfSk7CiAKICAgICByZXR1cm4gZnJhbWVTdGF0ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEZXZpY2VPcmllbnRhdGlvblVw
ZGF0ZVByb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyLmNwcAppbmRleCBmOWFmOWFiOTNm
N2UwMTI4NzczNjUwYzFkMjQ5NWFkZGUzOWZkNDM1Li4xZDExZjQyM2MxNzg4ZDU5N2ZmMjU3OGVl
NjBkOWNiNjE2YTBkZDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRldmljZU9yaWVudGF0
aW9uVXBkYXRlUHJvdmlkZXIuY3BwCkBAIC04MywxMSArODMsNyBAQCB2b2lkIFdlYkRldmljZU9y
aWVudGF0aW9uVXBkYXRlUHJvdmlkZXI6OnN0b3BVcGRhdGluZ0RldmljZU1vdGlvbihXZWJDb3Jl
OjpNb3RpbwogCiB2b2lkIFdlYkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXI6OmRldmlj
ZU9yaWVudGF0aW9uQ2hhbmdlZChkb3VibGUgYWxwaGEsIGRvdWJsZSBiZXRhLCBkb3VibGUgZ2Ft
bWEsIGRvdWJsZSBjb21wYXNzSGVhZGluZywgZG91YmxlIGNvbXBhc3NBY2N1cmFjeSkKIHsKLSAg
ICBWZWN0b3I8V2Vha1B0cjxXZWJDb3JlOjpNb3Rpb25NYW5hZ2VyQ2xpZW50Pj4gY2xpZW50czsK
LSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRzKQotICAg
ICAgICBjbGllbnRzLmFwcGVuZChjbGllbnQpOwotCi0gICAgZm9yIChhdXRvJiBjbGllbnQgOiBj
bGllbnRzKSB7CisgICAgZm9yIChhdXRvJiBjbGllbnQgOiBjb3B5VG9WZWN0b3JPZjxXZWFrUHRy
PFdlYkNvcmU6Ok1vdGlvbk1hbmFnZXJDbGllbnQ+PihtX2RldmljZU9yaWVudGF0aW9uQ2xpZW50
cykpIHsKICAgICAgICAgaWYgKGNsaWVudCkKICAgICAgICAgICAgIGNsaWVudC0+b3JpZW50YXRp
b25DaGFuZ2VkKGFscGhhLCBiZXRhLCBnYW1tYSwgY29tcGFzc0hlYWRpbmcsIGNvbXBhc3NBY2N1
cmFjeSk7CiAgICAgfQpAQCAtOTUsMTEgKzkxLDcgQEAgdm9pZCBXZWJEZXZpY2VPcmllbnRhdGlv
blVwZGF0ZVByb3ZpZGVyOjpkZXZpY2VPcmllbnRhdGlvbkNoYW5nZWQoZG91YmxlIGFscGhhLAog
CiB2b2lkIFdlYkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXI6OmRldmljZU1vdGlvbkNo
YW5nZWQoZG91YmxlIHhBY2NlbGVyYXRpb24sIGRvdWJsZSB5QWNjZWxlcmF0aW9uLCBkb3VibGUg
ekFjY2VsZXJhdGlvbiwgZG91YmxlIHhBY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5LCBkb3Vi
bGUgeUFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHksIGRvdWJsZSB6QWNjZWxlcmF0aW9uSW5j
bHVkaW5nR3Jhdml0eSwgc3RkOjpvcHRpb25hbDxkb3VibGU+IHhSb3RhdGlvblJhdGUsIHN0ZDo6
b3B0aW9uYWw8ZG91YmxlPiB5Um90YXRpb25SYXRlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gelJv
dGF0aW9uUmF0ZSkKIHsKLSAgICBWZWN0b3I8V2Vha1B0cjxXZWJDb3JlOjpNb3Rpb25NYW5hZ2Vy
Q2xpZW50Pj4gY2xpZW50czsKLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IG1fZGV2aWNlTW90aW9u
Q2xpZW50cykKLSAgICAgICAgY2xpZW50cy5hcHBlbmQoY2xpZW50KTsKLSAgICAKLSAgICBmb3Ig
KGF1dG8mIGNsaWVudCA6IGNsaWVudHMpIHsKKyAgICBmb3IgKGF1dG8mIGNsaWVudCA6IGNvcHlU
b1ZlY3Rvck9mPFdlYWtQdHI8V2ViQ29yZTo6TW90aW9uTWFuYWdlckNsaWVudD4+KG1fZGV2aWNl
TW90aW9uQ2xpZW50cykpIHsKICAgICAgICAgaWYgKGNsaWVudCkKICAgICAgICAgICAgIGNsaWVu
dC0+bW90aW9uQ2hhbmdlZCh4QWNjZWxlcmF0aW9uLCB5QWNjZWxlcmF0aW9uLCB6QWNjZWxlcmF0
aW9uLCB4QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwgeUFjY2VsZXJhdGlvbkluY2x1ZGlu
Z0dyYXZpdHksICB6QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwgeFJvdGF0aW9uUmF0ZSwg
eVJvdGF0aW9uUmF0ZSwgelJvdGF0aW9uUmF0ZSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9h
cmRPdmVycmlkZXMuY3BwCmluZGV4IGRmZGRhMTc2OTkzNjAwNDQ3YTBjOTNjYzg0NjBmNWU2OGIy
YzI0ODEuLjMxOGY3YzNkMjkzMzJjMDJhZDJjZTMwZDkwZTdjZmU2ZjU1YzMyMTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJk
T3ZlcnJpZGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5jcHAKQEAgLTcxLDE4ICs3MSwxMyBAQCB2b2lkIFdl
YlBhc3RlYm9hcmRPdmVycmlkZXM6OnJlbW92ZU92ZXJyaWRlKGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZE5hbWUsIGNvbnN0CiAKIFZlY3RvcjxTdHJpbmc+IFdlYlBhc3RlYm9hcmRPdmVycmlkZXM6
Om92ZXJyaWRkZW5UeXBlcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewotICAgIFZl
Y3RvcjxTdHJpbmc+IHJlc3VsdDsKLQogICAgIGF1dG8gaXQgPSBtX292ZXJyaWRlc01hcC5maW5k
KHBhc3RlYm9hcmROYW1lKTsKICAgICBpZiAoaXQgPT0gbV9vdmVycmlkZXNNYXAuZW5kKCkpCi0g
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBBU1NFUlQo
aXQtPnZhbHVlKTsKIAotICAgIGZvciAoU3RyaW5nJiB0eXBlIDogaXQtPnZhbHVlLT5rZXlzKCkp
Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQodHlwZSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OworICAg
IHJldHVybiBjb3B5VG9WZWN0b3IoaXQtPnZhbHVlLT5rZXlzKCkpOwogfQogCiBzdGQ6Om9wdGlv
bmFsPFdlYkNvcmU6OlBhc3RlYm9hcmRJdGVtSW5mbz4gV2ViUGFzdGVib2FyZE92ZXJyaWRlczo6
b3ZlcnJpZGRlbkluZm8oY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJTcGVlY2hTeW50aGVz
aXNDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YlNwZWVjaFN5bnRoZXNpc0NsaWVudC5jcHAKaW5kZXggYzRkMGRjYzAzZDVkYTZhMDQ4M2VkZjU2
ZDFlNDM5NTI3YmM5NWY4OC4uYzU3ZTc4MDliMmVlMTY2ZGQ2ZjY4OGJlMjJhODU5YzdkYWRkYThm
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YlNwZWVjaFN5bnRoZXNpc0NsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYlNwZWVjaFN5bnRoZXNpc0NsaWVudC5jcHAKQEAgLTQyLDkgKzQy
LDkgQEAgY29uc3QgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNp
c1ZvaWNlPj4mIFdlYlNwZWVjaFN5bnRoZXNpc0MKICAgICBWZWN0b3I8V2ViU3BlZWNoU3ludGhl
c2lzVm9pY2U+IHZvaWNlTGlzdDsKICAgICBtX3BhZ2Uuc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6U3BlZWNoU3ludGhlc2lzVm9pY2VMaXN0KCksIHZvaWNlTGlzdCk7CiAKLSAgICBt
X3ZvaWNlcy5jbGVhcigpOwotICAgIGZvciAoYXV0byYgdm9pY2UgOiB2b2ljZUxpc3QpCi0gICAg
ICAgIG1fdm9pY2VzLmFwcGVuZChXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNl
OjpjcmVhdGUodm9pY2Uudm9pY2VVUkksIHZvaWNlLm5hbWUsIHZvaWNlLmxhbmcsIHZvaWNlLmxv
Y2FsU2VydmljZSwgdm9pY2UuZGVmYXVsdExhbmcpKTsKKyAgICBtX3ZvaWNlcyA9IHZvaWNlTGlz
dC5tYXAoW10oYXV0byYgdm9pY2UpIC0+IFJlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5
bnRoZXNpc1ZvaWNlPiB7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5
bnRoZXNpc1ZvaWNlOjpjcmVhdGUodm9pY2Uudm9pY2VVUkksIHZvaWNlLm5hbWUsIHZvaWNlLmxh
bmcsIHZvaWNlLmxvY2FsU2VydmljZSwgdm9pY2UuZGVmYXVsdExhbmcpOworICAgIH0pOwogICAg
IHJldHVybiBtX3ZvaWNlczsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCmluZGV4IGI1MTM0ZDBkMmM1ZDdjNTJmNmZhYzk2
ODA0NDFhY2MzZWViZjY1ZmQuLjFkNjQzYjZiNDI4OGQwOGUwMzhjNDYyNWQwNTQ5ZGU2OGFmMmFh
NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250
cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29u
dHJvbGxlci5jcHAKQEAgLTI3MiwxMCArMjcyLDkgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6Zmlu
ZFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcsIE9wdGlvblNldDxGaW5kT3B0aW8K
ICAgICBhdXRvIHJlc3VsdCA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+ZmluZFRleHRNYXRjaGVz
KHN0cmluZywgY29yZShvcHRpb25zKSwgbWF4TWF0Y2hDb3VudCk7CiAgICAgbV9maW5kTWF0Y2hl
cyA9IFdURk1vdmUocmVzdWx0LnJhbmdlcyk7CiAKLSAgICBWZWN0b3I8VmVjdG9yPEludFJlY3Q+
PiBtYXRjaFJlY3RzOwotICAgIGZvciAoYXV0byYgcmFuZ2UgOiBtX2ZpbmRNYXRjaGVzKQotICAg
ICAgICBtYXRjaFJlY3RzLmFwcGVuZChSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKHJh
bmdlKSk7Ci0KKyAgICBhdXRvIG1hdGNoUmVjdHMgPSBtX2ZpbmRNYXRjaGVzLm1hcChbXShhdXRv
JiByYW5nZSkgeworICAgICAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0
cyhyYW5nZSk7CisgICAgfSk7CiAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkRpZEZpbmRTdHJpbmdNYXRjaGVzKHN0cmluZywgbWF0Y2hSZWN0cywgcmVzdWx0Lmlu
ZGV4Rm9yU2VsZWN0aW9uKSk7CiAKICAgICBpZiAoIW9wdGlvbnMuY29udGFpbnMoRmluZE9wdGlv
bnM6OlNob3dPdmVybGF5KSAmJiAhb3B0aW9ucy5jb250YWlucyhGaW5kT3B0aW9uczo6U2hvd0Zp
bmRJbmRpY2F0b3IpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAKaW5kZXggNzQ4MDJj
NDc4NzU1ZmZlNjFiOTMwOTJjYmNhNmQwYWM3Y2NjOWM4My4uMmM5YjQ1N2RiY2EwN2E2ZWIxMjY4
OWE3OGYwZGQ1YjI5MTRhMjFjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwCkBA
IC0yNDgsMTEgKzI0OCwxMCBAQCB2b2lkIFdlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6ZHJh
d1JlY3QoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaAogICAgICAgICBhdXRv
IHRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBtX3RleHRJbmRpY2F0b3It
PnRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMoKTsKICAgICAgICAgYXV0byB0
ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzID0gbV90ZXh0SW5kaWNhdG9yLT50ZXh0
UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKCk7CiAKLSAgICAgICAgVmVjdG9yPFdlYkNv
cmU6OkZsb2F0UmVjdD4gdGV4dFJlY3RzSW5Sb290Vmlld0Nvb3JkaW5hdGVzOwotICAgICAgICBm
b3IgKGF1dG8gcmVjdCA6IHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMpIHsKKyAg
ICAgICAgYXV0byB0ZXh0UmVjdHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0UmVjdHNJbkJv
dW5kaW5nUmVjdENvb3JkaW5hdGVzLm1hcChbJl0oYXV0byByZWN0KSB7CiAgICAgICAgICAgICBy
ZWN0Lm1vdmVCeSh0ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9u
KCkpOwotICAgICAgICAgICAgdGV4dFJlY3RzSW5Sb290Vmlld0Nvb3JkaW5hdGVzLmFwcGVuZChy
ZWN0KTsKLSAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlY3Q7CisgICAgICAgIH0pOwog
CiAgICAgICAgIGF1dG8gcGF0aHMgPSBXZWJDb3JlOjpQYXRoVXRpbGl0aWVzOjpwYXRoc1dpdGhT
aHJpbmtXcmFwcGVkUmVjdHModGV4dFJlY3RzSW5Sb290Vmlld0Nvb3JkaW5hdGVzLCBpbmRpY2F0
b3JSYWRpdXMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCmluZGV4IDczMWUwMDM4MmIwNjI4MTE0MGMzYmYyNzZiYzQyY2JkMmVhYzVjY2EuLjZhMDE0
ZmQ3N2YwMWJmZmRhOGUwMDI4MTNmNjM4ZTE4ODdmNzg4OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0zMDMxLDcgKzMwMzEsNyBAQCB2b2lk
IFdlYlBhZ2U6Om1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgbW91c2VFdmVudCwgc3Rk
OjpvcHRpb25hbDxWZWN0b3I8UwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVmVjdG9y
PFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPj4gbW91c2VFdmVudFNhbmRib3hFeHRlbnNpb25zOwor
ICAgIFZlY3RvcjxSZWY8U2FuZGJveEV4dGVuc2lvbj4+IG1vdXNlRXZlbnRTYW5kYm94RXh0ZW5z
aW9uczsKICAgICBpZiAoc2FuZGJveEV4dGVuc2lvbnMpCiAgICAgICAgIG1vdXNlRXZlbnRTYW5k
Ym94RXh0ZW5zaW9ucyA9IGNvbnN1bWVTYW5kYm94RXh0ZW5zaW9ucyhXVEZNb3ZlKCpzYW5kYm94
RXh0ZW5zaW9ucykpOwogCkBAIC03ODU3LDIxICs3ODU3LDE5IEBAIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eSYgV2ViUGFnZTo6ZW5zdXJlUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KCkK
IH0KICNlbmRpZgogCi1WZWN0b3I8UmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiBXZWJQYWdlOjpj
b25zdW1lU2FuZGJveEV4dGVuc2lvbnMoVmVjdG9yPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4m
JiBzYW5kYm94RXh0ZW5zaW9ucykKK1ZlY3RvcjxSZWY8U2FuZGJveEV4dGVuc2lvbj4+IFdlYlBh
Z2U6OmNvbnN1bWVTYW5kYm94RXh0ZW5zaW9ucyhWZWN0b3I8U2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlPiYmIHNhbmRib3hFeHRlbnNpb25zKQogewotICAgIFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4
dGVuc2lvbj4+IGRyYWdTYW5kYm94RXh0ZW5zaW9uczsKLSAgICBmb3IgKGF1dG8mIHNhbmRib3hF
eHRlbnNpb24gOiBzYW5kYm94RXh0ZW5zaW9ucykgeworICAgIHJldHVybiBXVEY6OmNvbXBhY3RN
YXAoV1RGTW92ZShzYW5kYm94RXh0ZW5zaW9ucyksIFtdKGF1dG8mJiBzYW5kYm94RXh0ZW5zaW9u
KSAtPiBSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4gewogICAgICAgICBhdXRvIGV4dGVuc2lvbiA9
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZShXVEZNb3ZlKHNhbmRib3hFeHRlbnNpb24pKTsKICAg
ICAgICAgaWYgKCFleHRlbnNpb24pCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICBib29sIG9rID0gZXh0ZW5zaW9uLT5jb25zdW1lKCk7
CiAgICAgICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKLSAgICAgICAgZHJhZ1NhbmRib3hFeHRl
bnNpb25zLmFwcGVuZChXVEZNb3ZlKGV4dGVuc2lvbikpOwotICAgIH0KLSAgICByZXR1cm4gZHJh
Z1NhbmRib3hFeHRlbnNpb25zOworICAgICAgICByZXR1cm4gZXh0ZW5zaW9uOworICAgIH0pOwog
fQogCi12b2lkIFdlYlBhZ2U6OnJldm9rZVNhbmRib3hFeHRlbnNpb25zKFZlY3RvcjxSZWZQdHI8
U2FuZGJveEV4dGVuc2lvbj4+JiBzYW5kYm94RXh0ZW5zaW9ucykKK3ZvaWQgV2ViUGFnZTo6cmV2
b2tlU2FuZGJveEV4dGVuc2lvbnMoVmVjdG9yPFJlZjxTYW5kYm94RXh0ZW5zaW9uPj4mIHNhbmRi
b3hFeHRlbnNpb25zKQogewogICAgIGZvciAoYXV0byYgc2FuZGJveEV4dGVuc2lvbiA6IHNhbmRi
b3hFeHRlbnNpb25zKQogICAgICAgICBzYW5kYm94RXh0ZW5zaW9uLT5yZXZva2UoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCA2OWRlMTRhYTk4MzQz
ODhhNDA1MjQ3N2MzNjE4MWQ3ZDVhMmY3Y2NmLi42NTRiOGM5YzYwMDJkMGVkOWIyYzYyY2UwYzMx
ZWE5YmZkYjBiZWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oCkBAIC0xOTY5LDggKzE5NjksOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBwbGF0Zm9ybURp
ZFNjYWxlUGFnZSgpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPj4gY29u
c3VtZVNhbmRib3hFeHRlbnNpb25zKFZlY3RvcjxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+JiYp
OwotICAgIHZvaWQgcmV2b2tlU2FuZGJveEV4dGVuc2lvbnMoVmVjdG9yPFJlZlB0cjxTYW5kYm94
RXh0ZW5zaW9uPj4mIHNhbmRib3hFeHRlbnNpb25zKTsKKyAgICBWZWN0b3I8UmVmPFNhbmRib3hF
eHRlbnNpb24+PiBjb25zdW1lU2FuZGJveEV4dGVuc2lvbnMoVmVjdG9yPFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZT4mJik7CisgICAgdm9pZCByZXZva2VTYW5kYm94RXh0ZW5zaW9ucyhWZWN0b3I8
UmVmPFNhbmRib3hFeHRlbnNpb24+PiYgc2FuZGJveEV4dGVuc2lvbnMpOwogCiAgICAgdm9pZCBz
ZXRTZWxlY3Rpb25SYW5nZShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OlRleHRH
cmFudWxhcml0eSwgYm9vbCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCmluZGV4IDlkYzAwZGEyNzcwYzE5Mzk4OTFhMzAw
ZjIzMzc0OTZhOWM4ZTcwMWQuLmJkMzY3MjA3NWI3NTc2OGM4NDE0Nzc4ZmM2NjVmNWQ3NWI0ZTI0
YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQ
YWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQ
YWdlTWFjLm1tCkBAIC03NTQsMTEgKzc1NCw4IEBAIHZvaWQgV2ViUGFnZTo6aGFuZGxlU2VsZWN0
aW9uU2VydmljZUNsaWNrKEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGNvbnN0IFZlY3RvCiAK
ICAgICBOU0RhdGEgKnNlbGVjdGlvbkRhdGEgPSBbYXR0cmlidXRlZFNlbGVjdGlvbiBSVEZERnJv
bVJhbmdlOk5TTWFrZVJhbmdlKDAsIFthdHRyaWJ1dGVkU2VsZWN0aW9uIGxlbmd0aF0pIGRvY3Vt
ZW50QXR0cmlidXRlczpAeyB9XTsKIAotICAgIFZlY3Rvcjx1aW50OF90PiBzZWxlY3Rpb25EYXRh
VmVjdG9yOwotICAgIHNlbGVjdGlvbkRhdGFWZWN0b3IuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KHNlbGVjdGlvbkRhdGEuYnl0ZXMpLCBzZWxlY3Rpb25EYXRhLmxlbmd0
aCk7Ci0KICAgICBmbHVzaFBlbmRpbmdFZGl0b3JTdGF0ZVVwZGF0ZSgpOwotICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6U2hvd0NvbnRleHRNZW51KENvbnRleHRNZW51Q29udGV4dERh
dGEocG9pbnQsIHNlbGVjdGlvbkRhdGFWZWN0b3IsIHBob25lTnVtYmVycywgc2VsZWN0aW9uLnNl
bGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpLCBVc2VyRGF0YSgpKSk7CisgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93Q29udGV4dE1lbnUoQ29udGV4dE1lbnVDb250ZXh0
RGF0YShwb2ludCwgVmVjdG9yIHsgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc2Vs
ZWN0aW9uRGF0YS5ieXRlcyksIHNlbGVjdGlvbkRhdGEubGVuZ3RoIH0sIHBob25lTnVtYmVycywg
c2VsZWN0aW9uLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpLCBVc2VyRGF0YSgpKSk7
CiB9CiAKIHZvaWQgV2ViUGFnZTo6aGFuZGxlSW1hZ2VTZXJ2aWNlQ2xpY2soY29uc3QgSW50UG9p
bnQmIHBvaW50LCBJbWFnZSYgaW1hZ2UsIEhUTUxJbWFnZUVsZW1lbnQmIGVsZW1lbnQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKaW5kZXggNzk5NjEzZDM3NzQyMzYzYmZi
ZGNkOTUyOTc5OTYyMjA2ZjAyMjhhOC4uODk5MGVkZDc2Y2FiOTZjMmRlY2QzYjk2MDU0Y2ZmNjI5
NWJiMGNmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3Mu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcApAQCAtMTQ1
Miw4ICsxNDUyLDEwIEBAIHZvaWQgV2ViUHJvY2Vzczo6ZmV0Y2hXZWJzaXRlRGF0YShPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiB3ZWJzaXRlRGF0YVR5cGVzLCBDCiB7CiAgICAgV2Vic2l0ZURh
dGEgd2Vic2l0ZURhdGE7CiAgICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0
ZURhdGFUeXBlOjpNZW1vcnlDYWNoZSkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBN
ZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkub3JpZ2luc1dpdGhDYWNoZShzZXNzaW9uSUQoKSkpCi0g
ICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6RW50cnkg
eyBvcmlnaW4tPmRhdGEoKSwgV2Vic2l0ZURhdGFUeXBlOjpNZW1vcnlDYWNoZSwgMCB9KTsKKyAg
ICAgICAgYXV0byBvcmlnaW5zID0gTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpLm9yaWdpbnNXaXRo
Q2FjaGUoc2Vzc2lvbklEKCkpOworICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzID0gV1RGOjpt
YXAob3JpZ2lucywgW10oYXV0byYgb3JpZ2luKSB7CisgICAgICAgICAgICByZXR1cm4gV2Vic2l0
ZURhdGE6OkVudHJ5IHsgb3JpZ2luLT5kYXRhKCksIFdlYnNpdGVEYXRhVHlwZTo6TWVtb3J5Q2Fj
aGUsIDAgfTsKKyAgICAgICAgfSk7CiAgICAgfQogICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1v
dmUod2Vic2l0ZURhdGEpKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452878</attachid>
            <date>2022-02-22 09:32:48 -0800</date>
            <delta_ts>2022-02-22 09:58:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236852-20220222093247.patch</filename>
            <type>text/plain</type>
            <size>162267</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMzA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDRmMmVmNWZkODRlNjQ3YTAzY2Y2M2Uz
YWVkMTMxZTIxNzZkMDE4ODcuLjI4MzU4NTI2ZTQyMDExNTU1MWY5ZjM0ZmI5Y2VkZDgxZThhZjY3
OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjItMDItMTggIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGV2ZW4gbW9yZSBjYWxs
IHNpdGVzIGNvbnN0cnVjdGluZyB2ZWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4NTIKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlci4KKworICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuY3BwOgorICAgICAgICAoV1RGOjpDb25j
dXJyZW50V29ya1F1ZXVlOjphcHBseSk6CisgICAgICAgICogd3RmL2NmL0xhbmd1YWdlQ0YuY3Bw
OgorICAgICAgICAoV1RGOjpwbGF0Zm9ybVVzZXJQcmVmZXJyZWRMYW5ndWFnZXMpOgorCiAyMDIy
LTAyLTIyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBz
ZXJ2aWNlIHdvcmtlciBhbmQgcHVzaCBBUEkgcHJlZmVyZW5jZSBmcm9tIFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXMgdG8gU2V0dGluZ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5MjAwMzg2M2Q1MGUxMjkwNDFjYTE1
ZmYwZjZiNzExOWZjZmFiYTNiLi42YzZmNGY5OTM1YTExMmY0ODA0ZjE4ZjFhMWI4ZTY4OWEzZjli
MTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTY2IEBACisyMDIyLTAyLTE4ICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4gdXAgLyBvcHRpbWl6ZSBldmVu
IG1vcmUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9ycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2ODUyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgKiBNb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29y
ZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXltZW50Q29vcmRpbmF0b3I6OmJlZ2lu
UGF5bWVudFNlc3Npb24pOgorICAgICAgICAqIE1vZHVsZXMvYXBwbGVwYXkvY29jb2EvUGF5bWVu
dE1ldGhvZENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydCk6CisgICAgICAgICog
TW9kdWxlcy9jYWNoZS9ET01DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01DYWNoZTo6
YmF0Y2hQdXRPcGVyYXRpb24pOgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWQ6OkdhbWVwYWQpOgorICAgICAgICAqIE1vZHVs
ZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFk
TWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkRGlzY29ubmVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkdhbWVwYWRNYW5hZ2VyOjptYWtlR2FtZXBhZFZpc2libGUpOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
OjpvYmplY3RTdG9yZU5hbWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
Ojp0cmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5o
OgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6aXNEZWxldGVkVmFsdWUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGFIYXNo
OjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6Omhhc2ggY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzIGNvbnN0KToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmVOYW1lcyBjb25zdCk6CisgICAgICAgICog
TW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0OjpzaG93TWVkaWFDb250cm9sc0NvbnRleHRNZW51KToK
KyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU291cmNlOjphY3RpdmVSYW5nZXMgY29uc3QpOgorICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmg6CisgICAgICAgIChXZWJDb3JlOjpEZWNvZGVP
cmRlclNhbXBsZU1hcDo6c2l6ZSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJj
ZS9Tb3VyY2VCdWZmZXJMaXN0Lmg6CisgICAgICAgICogTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3lu
dGhlc2lzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpczo6Z2V0Vm9pY2Vz
KToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFz
ay5tbToKKyAgICAgICAgKC1bV2ViU3BlZWNoUmVjb2duaXplclRhc2tJbXBsIGNhbGxiYWNrV2l0
aFRyYW5zY3JpcHRpb25zOmlzRmluYWw6XSk6CisgICAgICAgICogTW9kdWxlcy9zcGVlY2gvY29j
b2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2tNb2NrLm1tOgorICAgICAgICAoLVtXZWJTcGVlY2hS
ZWNvZ25pemVyVGFza01vY2sgYXVkaW9TYW1wbGVzQXZhaWxhYmxlOl0pOgorICAgICAgICAqIGFu
aW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpibGVu
ZEZ1bmMpOgorICAgICAgICAqIGFuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaW1lbGluZXNDb250cm9sbGVyOjp1cGRh
dGVBbmltYXRpb25zQW5kU2VuZEV2ZW50cyk6CisgICAgICAgICogYW5pbWF0aW9uL0tleWZyYW1l
RWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByb2Nlc3NQcm9wZXJ0eUluZGV4ZWRLZXlm
cmFtZXMpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb246
OkNvbnRlbnRFeHRlbnNpb24pOgorICAgICAgICAqIGNzcy9DU1NWYWx1ZUxpc3QuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1ZhbHVlTGlzdDo6c2l6ZSBjb25zdCk6CisgICAgICAgICogY3NzL2Nh
bGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09w
ZXJhdGlvbk5vZGU6OmhvaXN0Q2hpbGRyZW5XaXRoT3BlcmF0b3IpOgorICAgICAgICAqIGNzcy9w
YXJzZXIvQ1NTUGFyc2VySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJJbXBs
Ojpjb25zdW1lQ29udGFpbmVyUnVsZSk6CisgICAgICAgICogZG9tL0RPTVN0cmluZ0xpc3QuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkRPTVN0cmluZ0xpc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpET01TdHJpbmdMaXN0OjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NU3RyaW5n
TGlzdDo6RE9NU3RyaW5nTGlzdCk6CisgICAgICAgICogZG9tL0V2ZW50UGF0aC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudFBhdGg6OkV2ZW50UGF0aCk6CisgICAgICAgICogZG9tL0Z1bGxz
Y3JlZW5NYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZ1bGxzY3JlZW5NYW5hZ2VyOjpj
YW5jZWxGdWxsc2NyZWVuKToKKyAgICAgICAgKiBkb20vTG9hZGFibGVTY3JpcHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TG9hZGFibGVTY3JpcHQ6Om5vdGlmeUNsaWVudEZpbmlzaGVkKToKKyAg
ICAgICAgKiBkb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFk
aW9CdXR0b25Hcm91cDo6bWVtYmVycyBjb25zdCk6CisgICAgICAgICogaHRtbC9EaXJlY3RvcnlG
aWxlTGlzdENyZWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9GaWxlTGlzdCk6CisgICAg
ICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
U2VsZWN0RWxlbWVudDo6c2F2ZUxhc3RTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KToKKyAgICAgICAg
KiBodG1sL0ltYWdlQml0bWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFwOjpk
ZXRhY2hCaXRtYXBzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFy
c2V0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6
cHJvY2Vzc01ldGEpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6Omluc2VydFBob25lTnVtYmVyTGlu
ayk6CisgICAgICAgICogaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHREb2N1bWVudFBhcnNlcjo6aW5zZXJ0RmFrZVByZUVsZW1lbnQpOgor
ICAgICAgICAqIGxvYWRlci9Db250ZW50RmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRGaWx0ZXI6OmNyZWF0ZSk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVNYW5pZmVzdFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUFwcGxp
Y2F0aW9uQ2FjaGVNYW5pZmVzdCk6CisgICAgICAgICogcGFnZS9SZXNpemVPYnNlcnZlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZXNpemVPYnNlcnZlcjo6ZGVsaXZlck9ic2VydmF0aW9ucyk6
CisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlu
aXRpYWxpemVJbmRpY2F0b3IpOgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBv
bGljeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVN1YlJlc291cmNlSW50ZWdyaXR5SW50
b0RpZ2VzdHMpOgorICAgICAgICAqIHBsYXRmb3JtL0ZpbGVDaG9vc2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bGVDaG9vc2VyOjpjaG9vc2VGaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlQ2hvb3Nlcjo6
Y2hvb3NlTWVkaWFGaWxlcyk6CisgICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmFwcGVuZCk6CisgICAg
ICAgICogcGxhdGZvcm0vVGhyZWFkU2FmZURhdGFCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OmFkZCk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EU1BLZXJuZWxQcm9jZXNzb3I6OmluaXRpYWxp
emUpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvUmVzYW1wbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvUmVzYW1wbGVyOjpBdWRpb1Jlc2FtcGxlcik6CisgICAgICAgICog
cGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0TnVtYmVyT2ZDaGFubmVscyk6Cisg
ICAgICAgICogcGxhdGZvcm0vYXVkaW8vTXVsdGlDaGFubmVsUmVzYW1wbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok11bHRpQ2hhbm5lbFJlc2FtcGxlcjo6TXVsdGlDaGFubmVsUmVzYW1wbGVy
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudC5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9nYW1lcGFkL21hYy9EdWFsc2hvY2szSElER2FtZXBhZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEdWFsc2hvY2szSElER2FtZXBhZDo6RHVhbHNob2NrM0hJREdhbWVwYWQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dhbWVwYWQvbWFjL0xvZ2l0ZWNoR2FtZXBhZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpMb2dpdGVjaEdhbWVwYWQ6OkxvZ2l0ZWNoR2FtZXBhZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ2FtZXBhZC9tYWMvU3RhZGlhSElER2FtZXBhZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdGFkaWFISURHYW1lcGFkOjpTdGFkaWFISURHYW1lcGFkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI6OmFkZFJlcGFpbnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRo
VXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhVdGlsaXRpZXM6OnBhdGhzV2l0
aFNocmlua1dyYXBwZWRSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoVXRpbGl0aWVzOjpw
YXRoV2l0aFNocmlua1dyYXBwZWRSZWN0c0Zvck91dGxpbmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlQnVmZmVyUHJpdmF0ZTo6YnVmZmVyZWRTYW1wbGVzRm9yVHJhY2tJZCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6ZXh0cmFjdEtl
eUlEc1NrZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFW
RldyYXBwZXI6OnNldFJlcXVlc3RGb3JLZXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1t
OgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdB
VkZPYmpDOjp1cGRhdGVLZXlTdGF0dXNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVyQVZGT2JqQy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2RlckFWRk9iakM6OmZyYW1lSW5mb3MgY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclBhcnNlckFWRk9i
akMubW06CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJBVkZPYmpDOjpkaWRQ
YXJzZVN0cmVhbURhdGFBc0Fzc2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZv
cm1EYXRhOjp2YXJpYXRpb25BeGVzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGFz
dGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlU3RyaW5n
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZVZpZGVvQ2FwdHVyZVNv
dXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZVZpZGVvQ2FwdHVyZVNvdXJjZTo6
c2V0U3VwcG9ydGVkUHJlc2V0cyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVn
aXN0cnlJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3RyeUltcGw6OnJlZ2lz
dGVyQmxvYlVSTCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVnaXN0cnlJbXBsOjp3cml0ZUJs
b2JzVG9UZW1wb3JhcnlGaWxlc0ZvckluZGV4ZWREQik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpkcmF3Qm94U2lkZUZyb21QYXRoKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6
Y29ubmVjdENsaXBwaW5nU3RhY2tMYXllcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjphZGp1c3RPdmVyZmxvd1Njcm9sbGJhckNvbnRhaW5lckxheWVycyk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRBdHRh
Y2htZW50VGl0bGVCYWNrZ3JvdW5kKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
clRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTVkdTdHJva2VQYWludGlu
Z1Jlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1bms6OlNWR1RleHRDaHVuayk6CisgICAgICAgICog
c3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlBh
Z2VSdWxlQ29sbGVjdG9yOjptYXRjaFBhZ2VSdWxlcyk6CisgICAgICAgICogc3R5bGUvUnVsZVNl
dEJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjpN
ZWRpYVF1ZXJ5Q29sbGVjdG9yOjpwb3ApOgorICAgICAgICAqIHN0eWxlL1N0eWxlQnVpbGRlckNv
bnZlcnRlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRDb250YWluZXJOYW1lKToKKwogMjAyMi0wMi0yMiAgQW5kcmVzIEdvbnphbGV6ICA8YW5k
cmVzZ18yMkBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGZvciBjcmFzaCBpbiBzZXZlcmFsIEFY
IExheW91dFRlc3RzIGluIGlzb2xhdGVkIHRyZWUgbW9kZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYzY2MGIwYjZh
Y2ViYWE1NmQ2OTg0NzIxZGUwZTYwY2NlYTQxMTEwZS4uZThkMGMyNzU3M2ZmNDQzMTU3YzQxY2Rh
MjQ0MTliNjA3OGZhYjUyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5OCBAQAorMjAyMi0wMi0xOCAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIC8gb3B0
aW1pemUgZXZlbiBtb3JlIGNhbGwgc2l0ZXMgY29uc3RydWN0aW5nIHZlY3RvcnMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjg1MgorCisgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9tZWRpYS9S
ZW1vdGVNZWRpYVBsYXllclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTWVkaWFQ
bGF5ZXJQcm94eTo6b3V0T2ZCYW5kVHJhY2tTb3VyY2VzKToKKyAgICAgICAgKiBHUFVQcm9jZXNz
L21lZGlhL1JlbW90ZVNvdXJjZUJ1ZmZlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlU291cmNlQnVmZmVyUHJveHk6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlh
bGl6YXRpb25TZWdtZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlU291cmNlQnVmZmVyUHJv
eHk6OnVwZGF0ZVRyYWNrSWRzKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVy
L1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWVyZ2VTdGF0aXN0aWNGb3JUZXN0aW5nKToK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OmZldGNoRGlza0NhY2hlRW50cmllcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Tm90aWZpY2F0aW9ucy9OZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2VyOjpnZXRPcmlnaW5zV2l0aFB1c2hBbmRO
b3RpZmljYXRpb25QZXJtaXNzaW9ucyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlN0b3JhZ2VNYW5hZ2Vy
OjphbGxTdG9yYWdlQXJlYUlkZW50aWZpZXJzIGNvbnN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9XZWJTdG9yYWdlL1RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OlRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6b3JpZ2lucyBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OlRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6c3Rv
cmFnZUFyZWFJZGVudGlmaWVycyBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0
b3JhZ2U6OkNhY2hlOjpmaW5pc2hPcGVuaW5nKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9y
YWdlOjpDYWNoZTo6a2V5cyBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc3RvcmFn
ZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNRTGl0ZVN0b3JhZ2VB
cmVhOjpTUUxpdGVTdG9yYWdlQXJlYSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50
Q29kZXJzLmg6CisgICAgICAgICogU2hhcmVkL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRv
clByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6
OnNob3dQYXltZW50VUkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbi5j
cHA6CisgICAgICAgIChBUEk6Ok5hdmlnYXRpb246Ok5hdmlnYXRpb24pOgorICAgICAgICAoQVBJ
OjptX2NsaWVudE5hdmlnYXRpb25BY3Rpdml0eSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29h
L1dLU2hhcmVTaGVldC5tbToKKyAgICAgICAgKGFwcGVuZEZpbGVzQXNTaGFyZWFibGVVUkxzKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW06CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVzdG9yZUFwcEhpZ2hsaWdodHNBbmRTY3JvbGxUb0lu
ZGV4KToKKyAgICAgICAgKiBVSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwOgorICAgICAgICAo
V2ViS2l0OjpGcmFtZUxvYWRTdGF0ZTo6ZGlkRmluaXNoTG9hZCk6CisgICAgICAgICogVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlvblBhcmFtZXRlcnNUb05ld1Byb2Nlc3MpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
OjpwYXJhbWV0ZXJzIGNvbnN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRp
b24vQXV0aGVudGljYXRvck1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpBdXRoZW50aWNh
dG9yTWFuYWdlcjo6c3RhcnREaXNjb3ZlcnkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJCYWNr
Rm9yd2FyZExpc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6OnJl
bW92ZUFsbEl0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0OjpjbGVh
cik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZVByb2Nlc3NGcm9tT3JpZ2luQ2FjaGVTZXQp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUHJveHk6OnByb2Nlc3NEaWRUZXJtaW5hdGVPckZhaWxlZFRvTGF1bmNo
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUFuZEFwcGx5KToK
KyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YSk6CisgICAgICAg
ICogVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbToKKyAgICAgICAgKFdlYktpdDo6VGV4
dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9z
L1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW06CisgICAgICAgICgtW1dLQWN0aW9uU2hlZXRBc3Np
c3RhbnQgcHJlc2VudGF0aW9uUmVjdEZvckVsZW1lbnRVc2luZ0Nsb3Nlc3RJbmRpY2F0ZWRSZWN0
XSk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbToKKyAgICAgICAg
KFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBheW1lbnRDb29yZGluYXRvcjo6c2hvd1BheW1lbnRVSSk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpzZXRGaWxlc0ZvcklucHV0
RmlsZVVwbG9hZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQ
bGF5ZXJNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5h
Z2VyOjpjcmVhdGVSZW1vdGVNZWRpYVBsYXllcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUv
bWVkaWEvU291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNv
dXJjZUJ1ZmZlclByaXZhdGVSZW1vdGU6OnVwZGF0ZVRyYWNrSWRzKToKKyAgICAgICAgKFdlYktp
dDo6U291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZTo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2Vp
dmVJbml0aWFsaXphdGlvblNlZ21lbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL3dlYnJ0
Yy9MaWJXZWJSVENDb2RlY3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpMaWJXZWJSVENDb2RlY3M6
OmNyZWF0ZUVuY29kZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9TZXNzaW9uU3RhdGVDb252ZXJzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6dG9G
cmFtZVN0YXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRldmlj
ZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZp
Y2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyOjpkZXZpY2VPcmllbnRhdGlvbkNoYW5nZWQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyOjpkZXZp
Y2VNb3Rpb25DaGFuZ2VkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YlBhc3RlYm9hcmRPdmVycmlkZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJk
T3ZlcnJpZGVzOjpvdmVycmlkZGVuVHlwZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViU3BlZWNoU3ludGhlc2lzQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViU3BlZWNoU3ludGhlc2lzQ2xpZW50Ojp2b2ljZUxpc3QpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250
cm9sbGVyOjpmaW5kU3RyaW5nTWF0Y2hlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZv
dW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6ZHJhd1JlY3QpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y29uc3VtZVNh
bmRib3hFeHRlbnNpb25zKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmhhbmRsZVNlbGVjdGlvblNlcnZp
Y2VDbGljayk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzczo6ZmV0Y2hXZWJzaXRlRGF0YSk6CisKIDIwMjItMDItMjIgIFlv
dWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIGh0dHAvd3B0L21lZGlh
cmVjb3JkZXIvbXV0ZS10cmFja3MuaHRtbCBmYWlscyB3aXRoIFdlYlJUQ1JlbW90ZVZpZGVvRnJh
bWVFbmFibGVkPXRydWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAg
Yi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwCmluZGV4IDllMTA2ZTM5NGQzZjQ0ZDJjMjVm
YzNjYTE1MzU0MGU1MjA0Y2IzNWIuLjg2NDA2ZjM4ODQzNzE0Y2IyNTVjMzRlYWUzZjkxODFkYWJh
NThlMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcApAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgQ29uY3Vy
cmVudFdvcmtRdWV1ZTo6YXBwbHkoc2l6ZV90IGl0ZXJhdGlvbnMsIFdURjo6RnVuY3Rpb248dm9p
ZChzaXplX3QgaW5kCiAKICAgICAgICAgICAgIG1fd29ya2Vycy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KHRocmVhZENvdW50KTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0
aHJlYWRDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgbV93b3JrZXJzLmFwcGVuZChUaHJl
YWQ6OmNyZWF0ZSgiVGhyZWFkUG9vbCBXb3JrZXIiLCBbdGhpc10geworICAgICAgICAgICAgICAg
IG1fd29ya2Vycy51bmNoZWNrZWRBcHBlbmQoVGhyZWFkOjpjcmVhdGUoIlRocmVhZFBvb2wgV29y
a2VyIiwgW3RoaXNdIHsKICAgICAgICAgICAgICAgICAgICAgdGhyZWFkQm9keSgpOwogICAgICAg
ICAgICAgICAgIH0pKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L2NmL0xhbmd1YWdlQ0YuY3BwIGIvU291cmNlL1dURi93dGYvY2YvTGFuZ3VhZ2VDRi5jcHAKaW5k
ZXggYmJjMWVmNmY0ZWZlMDMwNTljZTU1MTMxZTA4YzEwMzMyMjQ4OGU1Ni4uYzA0YzU1YmM2MDNk
MjgxZDBjYTM4OTIwZWJhOGM3OWU1ZTY5Mjk4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
Y2YvTGFuZ3VhZ2VDRi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvY2YvTGFuZ3VhZ2VDRi5jcHAK
QEAgLTEwMiw5ICsxMDIsMTAgQEAgVmVjdG9yPFN0cmluZz4gcGxhdGZvcm1Vc2VyUHJlZmVycmVk
TGFuZ3VhZ2VzKFNob3VsZE1pbmltaXplTGFuZ3VhZ2VzIHNob3VsZE1pbmkKICAgICAgICAgcmV0
dXJuIHsgImVuIl9zIH07CiAKICAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXM7CisgICAgbGFu
Z3VhZ2VzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGxhdGZvcm1MYW5ndWFnZXNDb3VudCk7CiAg
ICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgcGxhdGZvcm1MYW5ndWFnZXNDb3VudDsgaSsrKSB7
CiAgICAgICAgIGF1dG8gcGxhdGZvcm1MYW5ndWFnZSA9IHN0YXRpY19jYXN0PENGU3RyaW5nUmVm
PihDRkFycmF5R2V0VmFsdWVBdEluZGV4KHBsYXRmb3JtTGFuZ3VhZ2VzLmdldCgpLCBpKSk7Ci0g
ICAgICAgIGxhbmd1YWdlcy5hcHBlbmQoaHR0cFN0eWxlTGFuZ3VhZ2VDb2RlKHBsYXRmb3JtTGFu
Z3VhZ2UsIHNob3VsZE1pbmltaXplTGFuZ3VhZ2VzKSk7CisgICAgICAgIGxhbmd1YWdlcy51bmNo
ZWNrZWRBcHBlbmQoaHR0cFN0eWxlTGFuZ3VhZ2VDb2RlKHBsYXRmb3JtTGFuZ3VhZ2UsIHNob3Vs
ZE1pbmltaXplTGFuZ3VhZ2VzKSk7CiAgICAgfQogCiAgICAgTE9HX1dJVEhfU1RSRUFNKExhbmd1
YWdlLCBzdHJlYW0gPDwgIkFmdGVyIHBhc3NpbmcgdGhyb3VnaCBodHRwU3R5bGVMYW5ndWFnZUNv
ZGU6ICIgPDwgbGFuZ3VhZ2VzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
YXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
YXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNwcAppbmRleCAxYTMyN2E5NGIwYjcxZDRlYzc1
ZWFjYzhkNGFkNzhhOTFiOWZmNjg1Li40YTk0MzIyNDlkNTJkNTFkMTQ3Yjg2ZTU3MDhkNTE4ODhi
YTY0ZjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1l
bnRDb29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9Q
YXltZW50Q29vcmRpbmF0b3IuY3BwCkBAIC0xMDEsMTEgKzEwMSwxMCBAQCBib29sIFBheW1lbnRD
b29yZGluYXRvcjo6YmVnaW5QYXltZW50U2Vzc2lvbihEb2N1bWVudCYgZG9jdW1lbnQsIFBheW1l
bnRTZXNzaW9uJgogewogICAgIEFTU0VSVCghbV9hY3RpdmVTZXNzaW9uKTsKIAotICAgIFZlY3Rv
cjxVUkw+IGxpbmtJY29uVVJMczsKLSAgICBmb3IgKGF1dG8mIGljb24gOiBMaW5rSWNvbkNvbGxl
Y3RvciB7IGRvY3VtZW50IH0uaWNvbnNPZlR5cGVzKHsgTGlua0ljb25UeXBlOjpUb3VjaEljb24s
IExpbmtJY29uVHlwZTo6VG91Y2hQcmVjb21wb3NlZEljb24gfSkpCi0gICAgICAgIGxpbmtJY29u
VVJMcy5hcHBlbmQoaWNvbi51cmwpOwotCi0gICAgYXV0byBzaG93UGF5bWVudFVJID0gbV9jbGll
bnQuc2hvd1BheW1lbnRVSShkb2N1bWVudC51cmwoKSwgbGlua0ljb25VUkxzLCBwYXltZW50UmVx
dWVzdCk7CisgICAgYXV0byBsaW5rSWNvblVSTHMgPSBMaW5rSWNvbkNvbGxlY3RvciB7IGRvY3Vt
ZW50IH0uaWNvbnNPZlR5cGVzKHsgTGlua0ljb25UeXBlOjpUb3VjaEljb24sIExpbmtJY29uVHlw
ZTo6VG91Y2hQcmVjb21wb3NlZEljb24gfSkubWFwKFtdKGF1dG8mIGljb24pIHsKKyAgICAgICAg
cmV0dXJuIGljb24udXJsOworICAgIH0pOworICAgIGF1dG8gc2hvd1BheW1lbnRVSSA9IG1fY2xp
ZW50LnNob3dQYXltZW50VUkoZG9jdW1lbnQudXJsKCksIFdURk1vdmUobGlua0ljb25VUkxzKSwg
cGF5bWVudFJlcXVlc3QpOwogICAgIFBBWU1FTlRfQ09PUkRJTkFUT1JfUkVMRUFTRV9MT0coImJl
Z2luUGF5bWVudFNlc3Npb24oKSAtPiAlZCIsIHNob3dQYXltZW50VUkpOwogICAgIGlmICghc2hv
d1BheW1lbnRVSSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9hcHBsZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L2NvY29hL1BheW1lbnRNZXRob2RDb2NvYS5tbQpp
bmRleCA3NjUzZGU1NGFmNTM5ZjI1NjFmNDIyMzZkMzBlYzYxYWI1ODAzZGQ1Li4wNzYxNmJkYjM1
ZWUxNTQxNjQxYmM3YThmOWRhZGY0ZGE3YjY2Y2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2FwcGxlcGF5L2NvY29hL1BheW1lbnRNZXRob2RDb2NvYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L2NvY29hL1BheW1lbnRNZXRob2RDb2NvYS5tbQpA
QCAtMTAxLDExICsxMDEsOCBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxBcHBsZVBheVBheW1lbnRN
ZXRob2Q6OlR5cGU+IGNvbnZlcnQoUEtQYXltZW50TWV0aG9kVHlwZSBwYQogI2lmIEhBVkUoUEFT
U0tJVF9QQVlNRU5UX01FVEhPRF9CSUxMSU5HX0FERFJFU1MpCiBzdGF0aWMgdm9pZCBjb252ZXJ0
KENOTGFiZWxlZFZhbHVlPENOUG9zdGFsQWRkcmVzcyo+ICpwb3N0YWxBZGRyZXNzLCBBcHBsZVBh
eVBheW1lbnRDb250YWN0ICZyZXN1bHQpCiB7Ci0gICAgVmVjdG9yPFN0cmluZz4gYWRkcmVzc0xp
bmU7Ci0gICAgaWYgKE5TU3RyaW5nICpzdHJlZXQgPSBwb3N0YWxBZGRyZXNzLnZhbHVlLnN0cmVl
dCkgewotICAgICAgICBhZGRyZXNzTGluZS5hcHBlbmQoc3RyZWV0KTsKLSAgICAgICAgcmVzdWx0
LmFkZHJlc3NMaW5lcyA9IFdURk1vdmUoYWRkcmVzc0xpbmUpOwotICAgIH0KKyAgICBpZiAoTlNT
dHJpbmcgKnN0cmVldCA9IHBvc3RhbEFkZHJlc3MudmFsdWUuc3RyZWV0KQorICAgICAgICByZXN1
bHQuYWRkcmVzc0xpbmVzID0geyBTdHJpbmcgeyBzdHJlZXQgfSB9OwogICAgIHJlc3VsdC5zdWJM
b2NhbGl0eSA9IHBvc3RhbEFkZHJlc3MudmFsdWUuc3ViTG9jYWxpdHk7CiAgICAgcmVzdWx0Lmxv
Y2FsaXR5ID0gcG9zdGFsQWRkcmVzcy52YWx1ZS5jaXR5OwogICAgIHJlc3VsdC5zdWJBZG1pbmlz
dHJhdGl2ZUFyZWEgPSBwb3N0YWxBZGRyZXNzLnZhbHVlLnN1YkFkbWluaXN0cmF0aXZlQXJlYTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNoZS5jcHAKaW5kZXggNDlmMzk4YWFm
ZWYzN2NkNWU4ZjhlYjI0NGQ0ZTExZjM5ZjJhOGNkMy4uMmQ0NmQxY2RiYzcxN2YzYzkyOTllZmE4
NjNhNTQ5MjYzODNhZjVkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNo
ZS9ET01DYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNo
ZS5jcHAKQEAgLTUxNSwxMCArNTE1LDggQEAgUmVjb3JkIERPTUNhY2hlOjp0b0Nvbm5lY3Rpb25S
ZWNvcmQoY29uc3QgRmV0Y2hSZXF1ZXN0JiByZXF1ZXN0LCBGZXRjaFJlc3BvbnNlJgogCiB2b2lk
IERPTUNhY2hlOjpiYXRjaFB1dE9wZXJhdGlvbihjb25zdCBGZXRjaFJlcXVlc3QmIHJlcXVlc3Qs
IEZldGNoUmVzcG9uc2UmIHJlc3BvbnNlLCBET01DYWNoZUVuZ2luZTo6UmVzcG9uc2VCb2R5JiYg
cmVzcG9uc2VCb2R5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEV4Y2VwdGlvbk9yPHZvaWQ+JiYp
PiYmIGNhbGxiYWNrKQogewotICAgIFZlY3RvcjxSZWNvcmQ+IHJlY29yZHM7Ci0gICAgcmVjb3Jk
cy5hcHBlbmQodG9Db25uZWN0aW9uUmVjb3JkKHJlcXVlc3QsIHJlc3BvbnNlLCBXVEZNb3ZlKHJl
c3BvbnNlQm9keSkpKTsKLQotICAgIGJhdGNoUHV0T3BlcmF0aW9uKFdURk1vdmUocmVjb3Jkcyks
IFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICBhdXRvIHJlY29yZCA9IHRvQ29ubmVjdGlvblJlY29y
ZChyZXF1ZXN0LCByZXNwb25zZSwgV1RGTW92ZShyZXNwb25zZUJvZHkpKTsKKyAgICBiYXRjaFB1
dE9wZXJhdGlvbih7IFdURk1vdmUocmVjb3JkKSB9LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAK
IHZvaWQgRE9NQ2FjaGU6OmJhdGNoUHV0T3BlcmF0aW9uKFZlY3RvcjxSZWNvcmQ+JiYgcmVjb3Jk
cywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChFeGNlcHRpb25Pcjx2b2lkPiYmKT4mJiBjYWxsYmFj
aykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmNwcAppbmRleCA2OTY5
ZTBiNTAzYTg3ZGQwMzg1ZTE4MzkwODg0NjcwZmVhMDRjMjY3Li41ODNmOWM4NTU1NjcxNzhjY2U3
MmNhZDQ0NzkyNGNmOGJjM2M0ZTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2dhbWVwYWQvR2FtZXBhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFk
L0dhbWVwYWQuY3BwCkBAIC00Myw4ICs0Myw5IEBAIEdhbWVwYWQ6OkdhbWVwYWQoY29uc3QgUGxh
dGZvcm1HYW1lcGFkJiBwbGF0Zm9ybUdhbWVwYWQpCiAgICAgLCBtX2F4ZXMocGxhdGZvcm1HYW1l
cGFkLmF4aXNWYWx1ZXMoKS5zaXplKCksIDAuMCkKIHsKICAgICB1bnNpZ25lZCBidXR0b25Db3Vu
dCA9IHBsYXRmb3JtR2FtZXBhZC5idXR0b25WYWx1ZXMoKS5zaXplKCk7CisgICAgbV9idXR0b25z
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYnV0dG9uQ291bnQpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBidXR0b25Db3VudDsgKytpKQotICAgICAgICBtX2J1dHRvbnMuYXBwZW5kKEdh
bWVwYWRCdXR0b246OmNyZWF0ZSgpKTsKKyAgICAgICAgbV9idXR0b25zLnVuY2hlY2tlZEFwcGVu
ZChHYW1lcGFkQnV0dG9uOjpjcmVhdGUoKSk7CiB9CiAKIEdhbWVwYWQ6On5HYW1lcGFkKCkgPSBk
ZWZhdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVw
YWRNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFu
YWdlci5jcHAKaW5kZXggY2MzNzQ4NThjZmVhMWIyNDRjMDRiZDQxYjI5OTQ4ZDI5YWVhMzAzMC4u
NTQzZmU0ODkxNjdlN2NlMTNkNDk3NjhmYzdlMTVmMzRkMDgyMzZlOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZE1hbmFnZXIuY3BwCkBAIC03OSwxNCAr
NzksMTAgQEAgdm9pZCBHYW1lcGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkQ29ubmVjdGVkKFBs
YXRmb3JtR2FtZXBhZCYgcGxhdGZvcm1HYW1lcGFkLAogCiB2b2lkIEdhbWVwYWRNYW5hZ2VyOjpw
bGF0Zm9ybUdhbWVwYWREaXNjb25uZWN0ZWQoUGxhdGZvcm1HYW1lcGFkJiBwbGF0Zm9ybUdhbWVw
YWQpCiB7Ci0gICAgVmVjdG9yPFdlYWtQdHI8RE9NV2luZG93Pj4gd2Vha1dpbmRvd3M7Ci0gICAg
Zm9yIChhdXRvKiBkb21XaW5kb3cgOiBtX2RvbVdpbmRvd3MpCi0gICAgICAgIHdlYWtXaW5kb3dz
LmFwcGVuZCgqZG9tV2luZG93KTsKLQogICAgIEhhc2hTZXQ8TmF2aWdhdG9yR2FtZXBhZCo+IG5v
dGlmaWVkTmF2aWdhdG9yczsKIAogICAgIC8vIEhhbmRsZSB0aGUgZGlzY29ubmVjdCBmb3IgYWxs
IERPTVdpbmRvd3Mgd2l0aCBldmVudCBsaXN0ZW5lcnMgYW5kIHRoZWlyIE5hdmlnYXRvcnMuCi0g
ICAgZm9yIChhdXRvJiB3aW5kb3cgOiB3ZWFrV2luZG93cykgeworICAgIGZvciAoYXV0byYgd2lu
ZG93IDogY29weVRvVmVjdG9yT2Y8V2Vha1B0cjxET01XaW5kb3c+PihtX2RvbVdpbmRvd3MpKSB7
CiAgICAgICAgIC8vIEV2ZW50IGRpc3BhdGNoIG1pZ2h0IGhhdmUgbWFkZSB0aGlzIHdpbmRvdyBn
byBhd2F5LgogICAgICAgICBpZiAoIXdpbmRvdykKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAt
MTQzLDExICsxMzksNyBAQCB2b2lkIEdhbWVwYWRNYW5hZ2VyOjptYWtlR2FtZXBhZFZpc2libGUo
UGxhdGZvcm1HYW1lcGFkJiBwbGF0Zm9ybUdhbWVwYWQsIEhhc2hTZQogICAgIGZvciAoYXV0byog
bmF2aWdhdG9yIDogbmF2aWdhdG9yU2V0KQogICAgICAgICBuYXZpZ2F0b3ItPmdhbWVwYWRDb25u
ZWN0ZWQocGxhdGZvcm1HYW1lcGFkKTsKIAotICAgIFZlY3RvcjxXZWFrUHRyPERPTVdpbmRvdz4+
IHdlYWtXaW5kb3dzOwotICAgIGZvciAoYXV0byogZG9tV2luZG93IDogbV9kb21XaW5kb3dzKQot
ICAgICAgICB3ZWFrV2luZG93cy5hcHBlbmQoKmRvbVdpbmRvdyk7Ci0KLSAgICBmb3IgKGF1dG8m
IHdpbmRvdyA6IHdlYWtXaW5kb3dzKSB7CisgICAgZm9yIChhdXRvJiB3aW5kb3cgOiBjb3B5VG9W
ZWN0b3JPZjxXZWFrUHRyPERPTVdpbmRvdz4+KG1fZG9tV2luZG93cykpIHsKICAgICAgICAgLy8g
RXZlbnQgZGlzcGF0Y2ggbWlnaHQgaGF2ZSBtYWRlIHRoaXMgd2luZG93IGdvIGF3YXkuCiAgICAg
ICAgIGlmICghd2luZG93KQogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKaW5kZXggN2FhNjMyYjdlYzA0
N2JlNDYwOGI1MWEwOTRlYTFhNGU1N2EyNjI5Yi4uY2FhMjFmNGFmNTYzNmE2Y2Y2YzI3MTkxMjk4
NTZhY2RmNmQxNjhkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlLmNwcApAQCAtNDUsNiArNDUsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSURCRGF0YWJhc2UpOwogCitzdGF0aWMgVmVj
dG9yPFN0cmluZz4gc29ydEFuZFJlbW92ZUR1cGxpY2F0ZXMoVmVjdG9yPFN0cmluZz4mJiB2ZWN0
b3IpCit7CisgICAgc3RkOjpzb3J0KHZlY3Rvci5iZWdpbigpLCB2ZWN0b3IuZW5kKCksIFdURjo6
Y29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKTsKKyAgICByZW1vdmVSZXBlYXRlZEVsZW1lbnRzKHZl
Y3Rvcik7CisgICAgcmV0dXJuIFdURk1vdmUodmVjdG9yKTsKK30KKwogUmVmPElEQkRhdGFiYXNl
PiBJREJEYXRhYmFzZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElE
QkNsaWVudDo6SURCQ29ubmVjdGlvblByb3h5JiBjb25uZWN0aW9uUHJveHksIGNvbnN0IElEQlJl
c3VsdERhdGEmIHJlc3VsdERhdGEpCiB7CiAgICAgYXV0byBkYXRhYmFzZSA9IGFkb3B0UmVmKCpu
ZXcgSURCRGF0YWJhc2UoY29udGV4dCwgY29ubmVjdGlvblByb3h5LCByZXN1bHREYXRhKSk7CkBA
IC0xMDIsOSArMTA5LDcgQEAgUmVmPERPTVN0cmluZ0xpc3Q+IElEQkRhdGFiYXNlOjpvYmplY3RT
dG9yZU5hbWVzKCkgY29uc3QKIHsKICAgICBBU1NFUlQoY2FuQ3VycmVudFRocmVhZEFjY2Vzc1Ro
cmVhZExvY2FsRGF0YShvcmlnaW5UaHJlYWQoKSkpOwogCi0gICAgYXV0byBvYmplY3RTdG9yZU5h
bWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0gICAgZm9yIChhdXRvJiBuYW1lIDogbV9p
bmZvLm9iamVjdFN0b3JlTmFtZXMoKSkKLSAgICAgICAgb2JqZWN0U3RvcmVOYW1lcy0+YXBwZW5k
KG5hbWUpOworICAgIGF1dG8gb2JqZWN0U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0
ZShtX2luZm8ub2JqZWN0U3RvcmVOYW1lcygpKTsKICAgICBvYmplY3RTdG9yZU5hbWVzLT5zb3J0
KCk7CiAgICAgcmV0dXJuIG9iamVjdFN0b3JlTmFtZXM7CiB9CkBAIC0xNzUsMTggKzE4MCwxMiBA
QCBFeGNlcHRpb25PcjxSZWY8SURCVHJhbnNhY3Rpb24+PiBJREJEYXRhYmFzZTo6dHJhbnNhY3Rp
b24oU3RyaW5nT3JWZWN0b3JPZlN0cmluZwogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52
YWxpZFN0YXRlRXJyb3IsICJGYWlsZWQgdG8gZXhlY3V0ZSAndHJhbnNhY3Rpb24nIG9uICdJREJE
YXRhYmFzZSc6IFRoZSBkYXRhYmFzZSBjb25uZWN0aW9uIGlzIGNsb3NpbmcuIl9zIH07CiAKICAg
ICBWZWN0b3I8U3RyaW5nPiBvYmplY3RTdG9yZXM7Ci0gICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJu
YXRpdmU8VmVjdG9yPFN0cmluZz4+KHN0b3JlTmFtZXMpKQotICAgICAgICBvYmplY3RTdG9yZXMg
PSBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3RvcjxTdHJpbmc+PihzdG9yZU5hbWVzKSk7Ci0gICAgZWxz
ZQotICAgICAgICBvYmplY3RTdG9yZXMuYXBwZW5kKFdURk1vdmUoc3RkOjpnZXQ8U3RyaW5nPihz
dG9yZU5hbWVzKSkpOwotCi0gICAgLy8gSXQgaXMgdmFsaWQgZm9yIGphdmFzY3JpcHQgdG8gcGFz
cyBpbiBhIGxpc3Qgb2Ygb2JqZWN0IHN0b3JlIG5hbWVzIHdpdGggdGhlIHNhbWUgbmFtZSBsaXN0
ZWQgdHdpY2UsCi0gICAgLy8gc28gd2UgbmVlZCB0byBwdXQgdGhlbSBhbGwgaW4gYSBzZXQgdG8g
Z2V0IGEgdW5pcXVlIGxpc3QuCi0gICAgSGFzaFNldDxTdHJpbmc+IG9iamVjdFN0b3JlU2V0Owot
ICAgIGZvciAoYXV0byYgb2JqZWN0U3RvcmUgOiBvYmplY3RTdG9yZXMpCi0gICAgICAgIG9iamVj
dFN0b3JlU2V0LmFkZChvYmplY3RTdG9yZSk7Ci0KLSAgICBvYmplY3RTdG9yZXMgPSBjb3B5VG9W
ZWN0b3Iob2JqZWN0U3RvcmVTZXQpOworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFZl
Y3RvcjxTdHJpbmc+PihzdG9yZU5hbWVzKSkgeworICAgICAgICAvLyBJdCBpcyB2YWxpZCBmb3Ig
SmF2YVNjcmlwdCB0byBwYXNzIGluIGEgbGlzdCBvZiBvYmplY3Qgc3RvcmUgbmFtZXMgd2l0aCB0
aGUgc2FtZSBuYW1lIGxpc3RlZCB0d2ljZSwKKyAgICAgICAgLy8gc28gd2UgbmVlZCB0byBwdXQg
dGhlbSBhbGwgaW4gYSBzZXQgdG8gZ2V0IGEgdW5pcXVlIGxpc3QuCisgICAgICAgIG9iamVjdFN0
b3JlcyA9IHNvcnRBbmRSZW1vdmVEdXBsaWNhdGVzKFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPFN0
cmluZz4+KHN0b3JlTmFtZXMpKSk7CisgICAgfSBlbHNlCisgICAgICAgIG9iamVjdFN0b3JlcyA9
IHsgV1RGTW92ZShzdGQ6OmdldDxTdHJpbmc+KHN0b3JlTmFtZXMpKSB9OwogCiAgICAgZm9yIChh
dXRvJiBvYmplY3RTdG9yZU5hbWUgOiBvYmplY3RTdG9yZXMpIHsKICAgICAgICAgaWYgKG1faW5m
by5oYXNPYmplY3RTdG9yZShvYmplY3RTdG9yZU5hbWUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5oCmluZGV4IDRiOTc4NTM2OWQxOTBhNmIxOTY5MWQx
MzdhZTE1NjdlNWMzNzk1ZDkuLjAyZjczMzQwM2YzYWQzMzRmZjI3OTUwMzdmYWU3ZjY1NWE2N2E3
NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURh
dGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmgK
QEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgPHZhcmlh
bnQ+CisjaW5jbHVkZSA8d3RmL0hhc2hlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRTZXQuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKQEAgLTExNyw0MSArMTE4LDYgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CiAgICAgfQogCi0gICAgdW5z
aWduZWQgaGFzaCgpIGNvbnN0Ci0gICAgewotICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IGhhc2hD
b2RlczsKLSAgICAgICAgaGFzaENvZGVzLmFwcGVuZChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV90
eXBlKSk7Ci0gICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQobV9pc051bGwgPyAxIDogMCk7Ci0gICAg
ICAgIGhhc2hDb2Rlcy5hcHBlbmQobV9pc0RlbGV0ZWRWYWx1ZSA/IDEgOiAwKTsKLSAgICAgICAg
c3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OkludmFs
aWQ6Ci0gICAgICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpNYXg6Ci0gICAgICAgIGNhc2Ug
SW5kZXhlZERCOjpLZXlUeXBlOjpNaW46Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBJbmRleGVkREI6OktleVR5cGU6Ok51bWJlcjoKLSAgICAgICAgY2FzZSBJbmRleGVkREI6Oktl
eVR5cGU6OkRhdGU6Ci0gICAgICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKFN0cmluZ0hhc2hlcjo6
aGFzaE1lbW9yeTxzaXplb2YoZG91YmxlKT4oJnN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1ZSkpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6U3Ry
aW5nOgotICAgICAgICAgICAgaGFzaENvZGVzLmFwcGVuZChTdHJpbmdIYXNoOjpoYXNoKHN0ZDo6
Z2V0PFN0cmluZz4obV92YWx1ZSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEluZGV4ZWREQjo6S2V5VHlwZTo6QmluYXJ5OiB7Ci0gICAgICAgICAgICBhdXRvKiBkYXRhID0g
c3RkOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpLmRhdGEoKTsKLSAgICAgICAg
ICAgIGlmICghZGF0YSkKLSAgICAgICAgICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKDApOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoU3RyaW5nSGFz
aGVyOjpoYXNoTWVtb3J5KGRhdGEtPmRhdGEoKSwgZGF0YS0+c2l6ZSgpKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6QXJy
YXk6Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGtleSA6IHN0ZDo6Z2V0PFZlY3RvcjxJREJLZXlE
YXRhPj4obV92YWx1ZSkpCi0gICAgICAgICAgICAgICAgaGFzaENvZGVzLmFwcGVuZChrZXkuaGFz
aCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFN0
cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShoYXNoQ29kZXMuZGF0YSgpLCBoYXNoQ29kZXMuc2l6ZSgp
ICogc2l6ZW9mKHVuc2lnbmVkKSk7Ci0gICAgfQotCiAgICAgU3RyaW5nIHN0cmluZygpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IEluZGV4ZWREQjo6S2V5VHlwZTo6U3Ry
aW5nKTsKQEAgLTE5Niw4ICsxNjIsMzUgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnZhcmlhbnQ8VmVj
dG9yPElEQktleURhdGE+LCBTdHJpbmcsIGRvdWJsZSwgVGhyZWFkU2FmZURhdGFCdWZmZXI+IG1f
dmFsdWU7CiB9OwogCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IElEQktl
eURhdGEmIGtleURhdGEpCit7CisgICAgYWRkKGhhc2hlciwga2V5RGF0YS50eXBlKCkpOworICAg
IGFkZChoYXNoZXIsIGtleURhdGEuaXNOdWxsKCkpOworICAgIHN3aXRjaCAoa2V5RGF0YS50eXBl
KCkpIHsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6SW52YWxpZDoKKyAgICBjYXNlIElu
ZGV4ZWREQjo6S2V5VHlwZTo6TWF4OgorICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpNaW46
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpOdW1iZXI6Cisg
ICAgICAgIGFkZChoYXNoZXIsIGtleURhdGEubnVtYmVyKCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6RGF0ZToKKyAgICAgICAgYWRkKGhhc2hlciwga2V5
RGF0YS5kYXRlKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlw
ZTo6U3RyaW5nOgorICAgICAgICBhZGQoaGFzaGVyLCBrZXlEYXRhLnN0cmluZygpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OkJpbmFyeToKKyAgICAgICAg
YWRkKGhhc2hlciwga2V5RGF0YS5iaW5hcnkoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SW5kZXhlZERCOjpLZXlUeXBlOjpBcnJheToKKyAgICAgICAgYWRkKGhhc2hlciwga2V5RGF0YS5h
cnJheSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiBzdHJ1Y3QgSURCS2V5RGF0YUhh
c2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IElEQktleURhdGEmIGEpIHsgcmV0
dXJuIGEuaGFzaCgpOyB9CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgSURCS2V5RGF0
YSYgYSkgeyByZXR1cm4gY29tcHV0ZUhhc2goYSk7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBJREJLZXlEYXRhJiBhLCBjb25zdCBJREJLZXlEYXRhJiBiKSB7IHJldHVybiBhID09IGI7
IH0KICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9
IGZhbHNlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlLmNwcAppbmRleCAxNDM1MTQwYTVjYjRhMWExZDQwN2EyZGIyOWQxNWJkZjJk
NTJjMGI2Li5jZTYzYzZhNTZiMTRkNWJlMDMyMjU3MzcyNTMyMmI4MmYwZGRkZDA4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3Bw
CkBAIC0xMjYsMTQgKzEyNiwxMSBAQCBSZWY8RE9NU3RyaW5nTGlzdD4gSURCT2JqZWN0U3RvcmU6
OmluZGV4TmFtZXMoKSBjb25zdAogewogICAgIEFTU0VSVChjYW5DdXJyZW50VGhyZWFkQWNjZXNz
VGhyZWFkTG9jYWxEYXRhKG1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWQoKSkp
OwogCi0gICAgYXV0byBpbmRleE5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0KLSAg
ICBpZiAoIW1fZGVsZXRlZCkgewotICAgICAgICBmb3IgKGF1dG8mIG5hbWUgOiBtX2luZm8uaW5k
ZXhOYW1lcygpKQotICAgICAgICAgICAgaW5kZXhOYW1lcy0+YXBwZW5kKG5hbWUpOwotICAgICAg
ICBpbmRleE5hbWVzLT5zb3J0KCk7Ci0gICAgfQorICAgIGlmIChtX2RlbGV0ZWQpCisgICAgICAg
IHJldHVybiBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKIAorICAgIGF1dG8gaW5kZXhOYW1lcyA9
IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZShtX2luZm8uaW5kZXhOYW1lcygpKTsKKyAgICBpbmRleE5h
bWVzLT5zb3J0KCk7CiAgICAgcmV0dXJuIGluZGV4TmFtZXM7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAppbmRleCA2YzEx
MjFiNzMxMGY3MzdmN2I5NWJlY2VlODQ1NGU2YWM1MGRmMmI2Li5jZTg2N2IxYjdlNmQ2ZjE1NDll
Y2Q3MjYxMjdkY2M3Njk5NWE5ZDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCkBAIC0xMjEsMTIgKzEyMSw4IEBAIFJlZjxE
T01TdHJpbmdMaXN0PiBJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKGNhbkN1cnJlbnRUaHJlYWRBY2Nlc3NUaHJlYWRMb2NhbERhdGEobV9kYXRh
YmFzZS0+b3JpZ2luVGhyZWFkKCkpKTsKIAotICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+IG5hbWVz
ID0gaXNWZXJzaW9uQ2hhbmdlKCkgPyBtX2RhdGFiYXNlLT5pbmZvKCkub2JqZWN0U3RvcmVOYW1l
cygpIDogbV9pbmZvLm9iamVjdFN0b3JlcygpOwotCi0gICAgUmVmPERPTVN0cmluZ0xpc3Q+IG9i
amVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKLSAgICBmb3IgKGF1dG8m
IG5hbWUgOiBuYW1lcykKLSAgICAgICAgb2JqZWN0U3RvcmVOYW1lcy0+YXBwZW5kKG5hbWUpOwot
CisgICAgYXV0byBuYW1lcyA9IGlzVmVyc2lvbkNoYW5nZSgpID8gbV9kYXRhYmFzZS0+aW5mbygp
Lm9iamVjdFN0b3JlTmFtZXMoKSA6IG1faW5mby5vYmplY3RTdG9yZXMoKTsKKyAgICBhdXRvIG9i
amVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoV1RGTW92ZShuYW1lcykpOwog
ICAgIG9iamVjdFN0b3JlTmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gb2JqZWN0U3RvcmVOYW1l
czsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9N
ZWRpYUNvbnRyb2xzSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJv
bHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCmluZGV4IDE5YTA2OWUyM2IzOWRiYjRhNzA2NWQ4ZGU3
OGQ3ZWU0OTNjNjk4MTguLmI4MjVlYzgwMDUxNDgwMjhlMmIwN2IxOWRjNzgzOTJhNDNhOGNiYTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNv
bnRyb2xzSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xz
L01lZGlhQ29udHJvbHNIb3N0LmNwcApAQCAtNTU1LDExICs1NTUsMTAgQEAgYm9vbCBNZWRpYUNv
bnRyb2xzSG9zdDo6c2hvd01lZGlhQ29udHJvbHNDb250ZXh0TWVudShIVE1MRWxlbWVudCYgdGFy
Z2V0LCBTdHJpbmcKIAogICAgIGlmIChvcHRpb25zSlNPTk9iamVjdC0+Z2V0Qm9vbGVhbigiaW5j
bHVkZUxhbmd1YWdlcyJfcykudmFsdWVfb3IoZmFsc2UpKSB7CiAgICAgICAgIGlmIChhdXRvKiBh
dWRpb1RyYWNrcyA9IG1lZGlhRWxlbWVudC5hdWRpb1RyYWNrcygpOyBhdWRpb1RyYWNrcyAmJiBh
dWRpb1RyYWNrcy0+bGVuZ3RoKCkgPiAxKSB7Ci0gICAgICAgICAgICBWZWN0b3I8TWVudUl0ZW0+
IGxhbmd1YWdlTWVudUl0ZW1zOwotCiAgICAgICAgICAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5j
ZXMgPSBwYWdlLT5ncm91cCgpLmVuc3VyZUNhcHRpb25QcmVmZXJlbmNlcygpOwotICAgICAgICAg
ICAgZm9yIChhdXRvJiBhdWRpb1RyYWNrIDogY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNr
TGlzdEZvck1lbnUoYXVkaW9UcmFja3MpKQotICAgICAgICAgICAgICAgIGxhbmd1YWdlTWVudUl0
ZW1zLmFwcGVuZChjcmVhdGVNZW51SXRlbShhdWRpb1RyYWNrLCBjYXB0aW9uUHJlZmVyZW5jZXMu
ZGlzcGxheU5hbWVGb3JUcmFjayhhdWRpb1RyYWNrLmdldCgpKSwgYXVkaW9UcmFjay0+ZW5hYmxl
ZCgpKSk7CisgICAgICAgICAgICBhdXRvIGxhbmd1YWdlTWVudUl0ZW1zID0gY2FwdGlvblByZWZl
cmVuY2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUoYXVkaW9UcmFja3MpLm1hcChbJl0oYXV0byYg
YXVkaW9UcmFjaykgeworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVNZW51SXRlbShhdWRp
b1RyYWNrLCBjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFjayhhdWRpb1RyYWNr
LmdldCgpKSwgYXVkaW9UcmFjay0+ZW5hYmxlZCgpKTsKKyAgICAgICAgICAgIH0pOwogCiAgICAg
ICAgICAgICBpZiAoIWxhbmd1YWdlTWVudUl0ZW1zLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAg
ICBpdGVtcy5hcHBlbmQoY3JlYXRlU3VibWVudShXRUJfVUlfU1RSSU5HX0tFWSgiTGFuZ3VhZ2Vz
IiwgIkxhbmd1YWdlcyAoTWVkaWEgQ29udHJvbHMgTWVudSkiLCAiTGFuZ3VhZ2VzIG1lZGlhIGNv
bnRyb2xzIGNvbnRleHQgbWVudSB0aXRsZSIpLCAiZ2xvYmUiX3MsIFdURk1vdmUobGFuZ3VhZ2VN
ZW51SXRlbXMpKSk7CkBAIC01NjgsMTUgKzU2NywxMyBAQCBib29sIE1lZGlhQ29udHJvbHNIb3N0
OjpzaG93TWVkaWFDb250cm9sc0NvbnRleHRNZW51KEhUTUxFbGVtZW50JiB0YXJnZXQsIFN0cmlu
ZwogCiAgICAgaWYgKG9wdGlvbnNKU09OT2JqZWN0LT5nZXRCb29sZWFuKCJpbmNsdWRlU3VidGl0
bGVzIl9zKS52YWx1ZV9vcihmYWxzZSkpIHsKICAgICAgICAgaWYgKGF1dG8qIHRleHRUcmFja3Mg
PSBtZWRpYUVsZW1lbnQudGV4dFRyYWNrcygpOyB0ZXh0VHJhY2tzICYmIHRleHRUcmFja3MtPmxl
bmd0aCgpKSB7Ci0gICAgICAgICAgICBWZWN0b3I8TWVudUl0ZW0+IHN1YnRpdGxlTWVudUl0ZW1z
OwotCiAgICAgICAgICAgICBhdXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBwYWdlLT5ncm91cCgp
LmVuc3VyZUNhcHRpb25QcmVmZXJlbmNlcygpOwogICAgICAgICAgICAgYXV0byBzb3J0ZWRUZXh0
VHJhY2tzID0gY2FwdGlvblByZWZlcmVuY2VzLnNvcnRlZFRyYWNrTGlzdEZvck1lbnUodGV4dFRy
YWNrcywgeyBUZXh0VHJhY2s6OktpbmQ6OlN1YnRpdGxlcywgVGV4dFRyYWNrOjpLaW5kOjpDYXB0
aW9ucywgVGV4dFRyYWNrOjpLaW5kOjpEZXNjcmlwdGlvbnMgfSk7CiAgICAgICAgICAgICBib29s
IGFsbFRyYWNrc0Rpc2FibGVkID0gbm90Rm91bmQgPT0gc29ydGVkVGV4dFRyYWNrcy5maW5kSWYo
W10gKGNvbnN0IGF1dG8mIHRleHRUcmFjaykgewogICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0
VHJhY2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmc7CiAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgIGJvb2wgdXNlc0F1dG9tYXRpY1RyYWNrID0gY2FwdGlvblByZWZlcmVu
Y2VzLmNhcHRpb25EaXNwbGF5TW9kZSgpID09IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6OkF1dG9t
YXRpYyAmJiBhbGxUcmFja3NEaXNhYmxlZDsKLSAgICAgICAgICAgIGZvciAoYXV0byYgdGV4dFRy
YWNrIDogc29ydGVkVGV4dFRyYWNrcykgeworICAgICAgICAgICAgYXV0byBzdWJ0aXRsZU1lbnVJ
dGVtcyA9IHNvcnRlZFRleHRUcmFja3MubWFwKFsmXShhdXRvJiB0ZXh0VHJhY2spIHsKICAgICAg
ICAgICAgICAgICBib29sIGNoZWNrZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAoYWxs
VHJhY2tzRGlzYWJsZWQgJiYgdGV4dFRyYWNrID09ICZUZXh0VHJhY2s6OmNhcHRpb25NZW51T2Zm
SXRlbSgpICYmIChjYXB0aW9uUHJlZmVyZW5jZXMuY2FwdGlvbkRpc3BsYXlNb2RlKCkgPT0gQ2Fw
dGlvblVzZXJQcmVmZXJlbmNlczo6Rm9yY2VkT25seSB8fCBjYXB0aW9uUHJlZmVyZW5jZXMuY2Fw
dGlvbkRpc3BsYXlNb2RlKCkgPT0gQ2FwdGlvblVzZXJQcmVmZXJlbmNlczo6TWFudWFsKSkKICAg
ICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IHRydWU7CkBAIC01ODQsOCArNTgxLDggQEAgYm9v
bCBNZWRpYUNvbnRyb2xzSG9zdDo6c2hvd01lZGlhQ29udHJvbHNDb250ZXh0TWVudShIVE1MRWxl
bWVudCYgdGFyZ2V0LCBTdHJpbmcKICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXVzZXNBdXRvbWF0aWNUcmFjayAmJiB0ZXh0VHJh
Y2stPm1vZGUoKSA9PSBUZXh0VHJhY2s6Ok1vZGU6OlNob3dpbmcpCiAgICAgICAgICAgICAgICAg
ICAgIGNoZWNrZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHN1YnRpdGxlTWVudUl0ZW1zLmFw
cGVuZChjcmVhdGVNZW51SXRlbSh0ZXh0VHJhY2ssIGNhcHRpb25QcmVmZXJlbmNlcy5kaXNwbGF5
TmFtZUZvclRyYWNrKHRleHRUcmFjay5nZXQoKSksIGNoZWNrZWQpKTsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTWVudUl0ZW0odGV4dFRyYWNrLCBjYXB0aW9u
UHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFjayh0ZXh0VHJhY2suZ2V0KCkpLCBjaGVja2Vk
KTsKKyAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICBpZiAoIXN1YnRpdGxlTWVudUl0ZW1z
LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBpdGVtcy5hcHBlbmQoY3JlYXRlU3VibWVudShX
RUJfVUlfU1RSSU5HX0tFWSgiU3VidGl0bGVzIiwgIlN1YnRpdGxlcyAoTWVkaWEgQ29udHJvbHMg
TWVudSkiLCAiU3VidGl0bGVzIG1lZGlhIGNvbnRyb2xzIGNvbnRleHQgbWVudSB0aXRsZSIpLCAi
Y2FwdGlvbnMuYnViYmxlIl9zLCBXVEZNb3ZlKHN1YnRpdGxlTWVudUl0ZW1zKSkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcAppbmRl
eCA5MTI3NDdmNDA2YzI5NTk0OTk3M2I1YmIxMzQ5ZGJjYTY3NDFjMTM1Li5hMmU2NThhOTJmOTk3
ZDdmNGI0M2UxNzAzZjRhMGUwOTQ5MTdiMGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcApAQCAtMTA1MSwxMCArMTA1MSw5IEBA
IHZvaWQgTWVkaWFTb3VyY2U6Om9uUmVhZHlTdGF0ZUNoYW5nZShSZWFkeVN0YXRlIG9sZFN0YXRl
LCBSZWFkeVN0YXRlIG5ld1N0YXRlKQogCiBWZWN0b3I8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRp
YVNvdXJjZTo6YWN0aXZlUmFuZ2VzKCkgY29uc3QKIHsKLSAgICBWZWN0b3I8UGxhdGZvcm1UaW1l
UmFuZ2VzPiBhY3RpdmVSYW5nZXM7Ci0gICAgZm9yIChhdXRvJiBzb3VyY2VCdWZmZXIgOiAqbV9h
Y3RpdmVTb3VyY2VCdWZmZXJzKQotICAgICAgICBhY3RpdmVSYW5nZXMuYXBwZW5kKHNvdXJjZUJ1
ZmZlci0+YnVmZmVyZWRJbnRlcm5hbCgpLnJhbmdlcygpKTsKLSAgICByZXR1cm4gYWN0aXZlUmFu
Z2VzOworICAgIHJldHVybiBXVEY6Om1hcCgqbV9hY3RpdmVTb3VyY2VCdWZmZXJzLCBbXShhdXRv
JiBzb3VyY2VCdWZmZXIpIHsKKyAgICAgICAgcmV0dXJuIHNvdXJjZUJ1ZmZlci0+YnVmZmVyZWRJ
bnRlcm5hbCgpLnJhbmdlcygpOworICAgIH0pOwogfQogCiBFeGNlcHRpb25PcjxSZWY8U291cmNl
QnVmZmVyUHJpdmF0ZT4+IE1lZGlhU291cmNlOjpjcmVhdGVTb3VyY2VCdWZmZXJQcml2YXRlKGNv
bnN0IENvbnRlbnRUeXBlJiBpbmNvbWluZ1R5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1hcC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXNvdXJjZS9TYW1wbGVNYXAuaAppbmRleCBlYWY0OTMxNTk3ZDI2ODUyM2M2NjdiZDlj
ZGNjNGNlYTY1NDMzNjk1Li5hZjFlMTA0NTgxNzg3ZjE1ZjZmMWYzODViMjU3MjQ0NGQ4ODU5NWZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1h
cC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmgK
QEAgLTkxLDYgKzkxLDcgQEAgcHVibGljOgogICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJl
Z2luKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVzLnJiZWdpbigpOyB9CiAgICAgcmV2ZXJzZV9p
dGVyYXRvciByZW5kKCkgeyByZXR1cm4gbV9zYW1wbGVzLnJlbmQoKTsgfQogICAgIGNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5yZW5kKCk7IH0K
KyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5zaXplKCk7IH0KIAog
ICAgIFdFQkNPUkVfRVhQT1JUIGl0ZXJhdG9yIGZpbmRTYW1wbGVXaXRoRGVjb2RlS2V5KGNvbnN0
IEtleVR5cGUmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBpdGVyYXRvciBmaW5kU2FtcGxlQWZ0ZXJE
ZWNvZGVLZXkoY29uc3QgS2V5VHlwZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaAppbmRleCBmYzZlMDczYWI5MGU3NmQx
ODE1Zjg4OTZiNmY2NjA5NmRmMmZkZGQ1Li4zYTY4YjVlMGJhZGU0MzUxZjA2NzQ2N2M3MmFmMmRi
YmMyMWZkNWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNl
L1NvdXJjZUJ1ZmZlckxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291
cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaApAQCAtNDcsOCArNDcsOSBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIFJlZjxTb3VyY2VCdWZmZXJMaXN0PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCop
OwogICAgIHZpcnR1YWwgflNvdXJjZUJ1ZmZlckxpc3QoKTsKIAotICAgIHVuc2lnbmVkIGxvbmcg
bGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQotICAgIFNvdXJjZUJ1ZmZl
ciogaXRlbSh1bnNpZ25lZCBsb25nIGluZGV4KSBjb25zdCB7IHJldHVybiAoaW5kZXggPCBtX2xp
c3Quc2l6ZSgpKSA/IG1fbGlzdFtpbmRleF0uZ2V0KCkgOiBudWxscHRyOyB9CisgICAgdW5zaWdu
ZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQorCisgICAgU291cmNl
QnVmZmVyKiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiAoaW5kZXggPCBtX2xp
c3Quc2l6ZSgpKSA/IG1fbGlzdFtpbmRleF0uZ2V0KCkgOiBudWxscHRyOyB9CiAKICAgICB2b2lk
IGFkZChSZWY8U291cmNlQnVmZmVyPiYmKTsKICAgICB2b2lkIHJlbW92ZShTb3VyY2VCdWZmZXIm
KTsKQEAgLTU2LDggKzU3LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyKCk7CiAgICAgdm9p
ZCBzd2FwKFZlY3RvcjxSZWZQdHI8U291cmNlQnVmZmVyPj4mKTsKIAotICAgIFZlY3RvcjxSZWZQ
dHI8U291cmNlQnVmZmVyPj46Oml0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9saXN0LmJlZ2lu
KCk7IH0KLSAgICBWZWN0b3I8UmVmUHRyPFNvdXJjZUJ1ZmZlcj4+OjppdGVyYXRvciBlbmQoKSB7
IHJldHVybiBtX2xpc3QuZW5kKCk7IH0KKyAgICBhdXRvIGJlZ2luKCkgeyByZXR1cm4gbV9saXN0
LmJlZ2luKCk7IH0KKyAgICBhdXRvIGVuZCgpIHsgcmV0dXJuIG1fbGlzdC5lbmQoKTsgfQorICAg
IGF1dG8gYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2xpc3QuYmVnaW4oKTsgfQorICAgIGF1dG8g
ZW5kKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LmVuZCgpOyB9CisgICAgc2l6ZV90IHNpemUoKSBj
b25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CiAKICAgICAvLyBFdmVudFRhcmdldCBpbnRl
cmZhY2UKICAgICBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIFNvdXJjZUJ1ZmZlckxpc3RFdmVudFRhcmdldEludGVyZmFjZVR5
cGU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5
bnRoZXNpcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVz
aXMuY3BwCmluZGV4IGVhZjNhMmUxZTc5OGE0ODFmNzY4YjMzYzVmZDI5ZDNjN2NiYWIzYWUuLjgy
YzFhM2EwYzA3MjU1YzFlODBkYTYxZDU5MGJhOWM5NDFjYzA2OWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzLmNwcApAQCAtOTMsOSArOTMs
MTAgQEAgY29uc3QgVmVjdG9yPFJlZjxTcGVlY2hTeW50aGVzaXNWb2ljZT4+JiBTcGVlY2hTeW50
aGVzaXM6OmdldFZvaWNlcygpCiAgICAgICAgIHJldHVybiBtX3ZvaWNlTGlzdDsKIAogICAgIC8v
IElmIHRoZSB2b2ljZUxpc3QgaXMgZW1wdHksIHRoYXQncyB0aGUgY3VlIHRvIGdldCB0aGUgdm9p
Y2VzIGZyb20gdGhlIHBsYXRmb3JtIGFnYWluLgotICAgIGZvciAoYXV0byYgdm9pY2UgOiBtX3Nw
ZWVjaFN5bnRoZXNpc0NsaWVudCA/IG1fc3BlZWNoU3ludGhlc2lzQ2xpZW50LT52b2ljZUxpc3Qo
KSA6IGVuc3VyZVBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIoKS52b2ljZUxpc3QoKSkKLSAgICAg
ICAgbV92b2ljZUxpc3QuYXBwZW5kKFNwZWVjaFN5bnRoZXNpc1ZvaWNlOjpjcmVhdGUoKnZvaWNl
KSk7Ci0KKyAgICBhdXRvJiB2b2ljZUxpc3QgPSBtX3NwZWVjaFN5bnRoZXNpc0NsaWVudCA/IG1f
c3BlZWNoU3ludGhlc2lzQ2xpZW50LT52b2ljZUxpc3QoKSA6IGVuc3VyZVBsYXRmb3JtU3BlZWNo
U3ludGhlc2l6ZXIoKS52b2ljZUxpc3QoKTsKKyAgICBtX3ZvaWNlTGlzdCA9IHZvaWNlTGlzdC5t
YXAoW10oYXV0byYgdm9pY2UpIHsKKyAgICAgICAgcmV0dXJuIFNwZWVjaFN5bnRoZXNpc1ZvaWNl
OjpjcmVhdGUoKnZvaWNlKTsKKyAgICB9KTsKICAgICByZXR1cm4gbV92b2ljZUxpc3Q7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVj
aFJlY29nbml6ZXJUYXNrLm1tIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvY29jb2Ev
V2ViU3BlZWNoUmVjb2duaXplclRhc2subW0KaW5kZXggZjFiOTY5NTgwNTdkMmZlNjA0NGQyYzdi
MjU5ZGI2YzVjZWI0NGVmZS4uYjYyMjk5MDhlNzRhYzAyNzk5ZDc3NDJiMTQzMjlmZDMzZGM0NzZh
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvY29jb2EvV2ViU3Bl
ZWNoUmVjb2duaXplclRhc2subW0KKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gv
Y29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2subW0KQEAgLTEyOCw5ICsxMjgsNyBAQCAtICh2
b2lkKWNhbGxiYWNrV2l0aFRyYW5zY3JpcHRpb25zOihOU0FycmF5PFNGVHJhbnNjcmlwdGlvbiAq
PiAqKXRyYW5zY3JpcHRpb25zCiAgICAgICAgIGlmIChhbHRlcm5hdGl2ZXMuc2l6ZSgpID09IF9t
YXhBbHRlcm5hdGl2ZXMpCiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgVmVjdG9yPFNw
ZWVjaFJlY29nbml0aW9uUmVzdWx0RGF0YT4gZGF0YXM7Ci0gICAgZGF0YXMuYXBwZW5kKFNwZWVj
aFJlY29nbml0aW9uUmVzdWx0RGF0YSB7IFdURk1vdmUoYWx0ZXJuYXRpdmVzKSwgYm9vbChpc0Zp
bmFsKSB9KTsKLSAgICBfZGVsZWdhdGVDYWxsYmFjayhTcGVlY2hSZWNvZ25pdGlvblVwZGF0ZTo6
Y3JlYXRlUmVzdWx0KF9pZGVudGlmaWVyLCBXVEZNb3ZlKGRhdGFzKSkpOworICAgIF9kZWxlZ2F0
ZUNhbGxiYWNrKFNwZWVjaFJlY29nbml0aW9uVXBkYXRlOjpjcmVhdGVSZXN1bHQoX2lkZW50aWZp
ZXIsIHsgU3BlZWNoUmVjb2duaXRpb25SZXN1bHREYXRhIHsgV1RGTW92ZShhbHRlcm5hdGl2ZXMp
LCAhIWlzRmluYWwgfSB9KSk7CiB9CiAKIC0gKHZvaWQpYXVkaW9TYW1wbGVzQXZhaWxhYmxlOihD
TVNhbXBsZUJ1ZmZlclJlZilzYW1wbGVCdWZmZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrTW9jay5tbSBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6ZXJUYXNr
TW9jay5tbQppbmRleCBiYzVjNjIxOWI1ZGFkYzNiMWNkYzU5MGQ2NWM4OTdiNzI1MGIxZTIxLi5j
NzI3NTliNzY3YWE5NTg3ZDczN2VhNDAyOWEzMTY3ZjhjOTdmMmU4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFza01v
Y2subW0KKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvY29jb2EvV2ViU3BlZWNo
UmVjb2duaXplclRhc2tNb2NrLm1tCkBAIC02MywxMSArNjMsOCBAQCAtICh2b2lkKWF1ZGlvU2Ft
cGxlc0F2YWlsYWJsZTooQ01TYW1wbGVCdWZmZXJSZWYpc2FtcGxlQnVmZmVyCiAgICAgfQogCiAg
ICAgLy8gRmFrZSBzb21lIHJlY29nbml0aW9uIHJlc3VsdHMuCi0gICAgVmVjdG9yPFNwZWVjaFJl
Y29nbml0aW9uQWx0ZXJuYXRpdmVEYXRhPiBhbHRlcm5hdGl2ZXM7Ci0gICAgYWx0ZXJuYXRpdmVz
LmFwcGVuZChTcGVlY2hSZWNvZ25pdGlvbkFsdGVybmF0aXZlRGF0YSB7ICJUZXN0IiwgMS4wIH0p
OwotICAgIFZlY3RvcjxTcGVlY2hSZWNvZ25pdGlvblJlc3VsdERhdGE+IGRhdGFzOwotICAgIGRh
dGFzLmFwcGVuZChTcGVlY2hSZWNvZ25pdGlvblJlc3VsdERhdGEgeyBXVEZNb3ZlKGFsdGVybmF0
aXZlcyksIHRydWUgIH0pOwotICAgIF9kZWxlZ2F0ZUNhbGxiYWNrKFNwZWVjaFJlY29nbml0aW9u
VXBkYXRlOjpjcmVhdGVSZXN1bHQoX2lkZW50aWZpZXIsIFdURk1vdmUoZGF0YXMpKSk7CisgICAg
U3BlZWNoUmVjb2duaXRpb25BbHRlcm5hdGl2ZURhdGEgYWx0ZXJuYXRpdmUgeyAiVGVzdCIsIDEu
MCB9OworICAgIF9kZWxlZ2F0ZUNhbGxiYWNrKFNwZWVjaFJlY29nbml0aW9uVXBkYXRlOjpjcmVh
dGVSZXN1bHQoX2lkZW50aWZpZXIsIHsgU3BlZWNoUmVjb2duaXRpb25SZXN1bHREYXRhIHsgeyBX
VEZNb3ZlKGFsdGVybmF0aXZlKSB9LCB0cnVlIH0gfSkpOwogCiAgICAgaWYgKCFfZG9NdWx0aXBs
ZVJlY29nbml0aW9ucykKICAgICAgICAgW3NlbGYgYWJvcnRdOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKaW5kZXggZTM1OWEwNDNiMmUz
Y2YzOWY5YzI2YmM1OWU5OGYxMDVlMTMyYzEwNS4uOGJjZTY2NzA2NmEzZjc3NmYwZWFiYTk2NmI4
MWE3NDZhOTc1ZTMyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1By
b3BlcnR5QW5pbWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJv
cGVydHlBbmltYXRpb24uY3BwCkBAIC0xNjQsMTAgKzE2NCw4IEBAIHN0YXRpYyBpbmxpbmUgVHJh
bnNmb3JtT3BlcmF0aW9ucyBibGVuZEZ1bmMoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJv
bSwgY29uCiAgICAgaWYgKGNvbnRleHQuY29tcG9zaXRlT3BlcmF0aW9uID09IENvbXBvc2l0ZU9w
ZXJhdGlvbjo6QWRkKSB7CiAgICAgICAgIEFTU0VSVChjb250ZXh0LnByb2dyZXNzID09IDEuMCk7
CiAgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgcmVzdWx0T3BlcmF0aW9uczsKLSAgICAgICAg
Zm9yIChhdXRvIG9wZXJhdGlvbiA6IGZyb20ub3BlcmF0aW9ucygpKQotICAgICAgICAgICAgcmVz
dWx0T3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKG9wZXJhdGlvbik7Ci0gICAgICAgIGZv
ciAoYXV0byBvcGVyYXRpb24gOiB0by5vcGVyYXRpb25zKCkpCi0gICAgICAgICAgICByZXN1bHRP
cGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQob3BlcmF0aW9uKTsKKyAgICAgICAgcmVzdWx0
T3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kVmVjdG9yKGZyb20ub3BlcmF0aW9ucygpKTsK
KyAgICAgICAgcmVzdWx0T3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kVmVjdG9yKHRvLm9w
ZXJhdGlvbnMoKSk7CiAgICAgICAgIHJldHVybiByZXN1bHRPcGVyYXRpb25zOwogICAgIH0KICAg
ICBhdXRvIGJveFNpemUgPSBpczxSZW5kZXJCb3g+KGNvbnRleHQuY2xpZW50LT5yZW5kZXJlcigp
KSA/IGRvd25jYXN0PFJlbmRlckJveD4oKmNvbnRleHQuY2xpZW50LT5yZW5kZXJlcigpKS5ib3Jk
ZXJCb3hSZWN0KCkuc2l6ZSgpIDogTGF5b3V0U2l6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmVzQ29udHJvbGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9hbmltYXRpb24vRG9jdW1lbnRUaW1lbGluZXNDb250cm9sbGVyLmNwcAppbmRleCBi
NWZkMmFlZjEwMDAxMmRhOWM0YmRiMjFlN2FkMDQxYTM2NjQxNmJmLi43MDk0NTNiYzY2MjUyZjk1
OTgyNGJhOTRlY2E3YTMzMDA4YzljYTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmlt
YXRpb24vRG9jdW1lbnRUaW1lbGluZXNDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hbmltYXRpb24vRG9jdW1lbnRUaW1lbGluZXNDb250cm9sbGVyLmNwcApAQCAtOTgsOSArOTgs
NyBAQCB2b2lkIERvY3VtZW50VGltZWxpbmVzQ29udHJvbGxlcjo6dXBkYXRlQW5pbWF0aW9uc0Fu
ZFNlbmRFdmVudHMoUmVkdWNlZFJlc29sdXRpbwogICAgIEFTU0VSVCghbV90aW1lbGluZXMuaGFz
TnVsbFJlZmVyZW5jZXMoKSk7CiAKICAgICAvLyBXZSBuZWVkIHRvIGNvcHkgbV90aW1lbGluZXMg
YmVmb3JlIGl0ZXJhdGluZyBvdmVyIGl0cyBtZW1iZXJzIHNpbmNlIHRoZSBzdGVwcyBpbiB0aGlz
IHByb2NlZHVyZSBtYXkgbXV0YXRlIG1fdGltZWxpbmVzLgotICAgIFZlY3RvcjxSZWY8RG9jdW1l
bnRUaW1lbGluZT4+IHByb3RlY3RlZFRpbWVsaW5lczsKLSAgICBmb3IgKGF1dG8mIHRpbWVsaW5l
IDogbV90aW1lbGluZXMpCi0gICAgICAgIHByb3RlY3RlZFRpbWVsaW5lcy5hcHBlbmQodGltZWxp
bmUpOworICAgIGF1dG8gcHJvdGVjdGVkVGltZWxpbmVzID0gY29weVRvVmVjdG9yT2Y8UmVmPERv
Y3VtZW50VGltZWxpbmU+PihtX3RpbWVsaW5lcyk7CiAKICAgICAvLyBXZSBuZWVkIHRvIGZyZWV6
ZSB0aGUgY3VycmVudCB0aW1lIGV2ZW4gaWYgbm8gYW5pbWF0aW9uIGlzIHJ1bm5pbmcuCiAgICAg
Ly8gZG9jdW1lbnQudGltZWxpbmUuY3VycmVudFRpbWUgbWF5IGJlIGNhbGxlZCBmcm9tIGEgckFG
IGNhbGxiYWNrIGFuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZy
YW1lRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5j
cHAKaW5kZXggNDQ0NGNjZDA4N2FlNDgwNDgwYzU4OWZmNGQ2ODhlM2ZjN2MxYTI2YS4uM2QwOTFl
ZWU1Mzg3NDQyMDNmNzM4Yjg2YzA3Njc2NTdmNGVjZjA4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
bmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwCkBAIC0zNzUsOCArMzc1LDcgQEAgc3RhdGljIGlu
bGluZSBFeGNlcHRpb25Pcjx2b2lkPiBwcm9jZXNzUHJvcGVydHlJbmRleGVkS2V5ZnJhbWVzKEpT
R2xvYmFsT2JqZWN0JgogICAgICAgICBjb21wdXRlTWlzc2luZ0tleWZyYW1lT2Zmc2V0cyhwcm9w
ZXJ0eUtleWZyYW1lcyk7CiAKICAgICAgICAgLy8gNy4gQWRkIGtleWZyYW1lcyBpbiBwcm9wZXJ0
eSBrZXlmcmFtZXMgdG8gcHJvY2Vzc2VkIGtleWZyYW1lcy4KLSAgICAgICAgZm9yIChhdXRvJiBr
ZXlmcmFtZSA6IHByb3BlcnR5S2V5ZnJhbWVzKQotICAgICAgICAgICAgcGFyc2VkS2V5ZnJhbWVz
LmFwcGVuZChXVEZNb3ZlKGtleWZyYW1lKSk7CisgICAgICAgIHBhcnNlZEtleWZyYW1lcy5hcHBl
bmRWZWN0b3IocHJvcGVydHlLZXlmcmFtZXMpOwogICAgIH0KIAogICAgIC8vIDMuIFNvcnQgcHJv
Y2Vzc2VkIGtleWZyYW1lcyBieSB0aGUgY29tcHV0ZWQga2V5ZnJhbWUgb2Zmc2V0IG9mIGVhY2gg
a2V5ZnJhbWUgaW4gaW5jcmVhc2luZyBvcmRlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5jcHAKaW5kZXggNTM0OWVmMzhmZTY5
MDY0ZGQ0NTNmZDY4ZDdkYzZhOGVlNzczZDllYy4uYzA1Y2Q4OTQxNWZmNDEyMDRlM2MzYzhjNzcz
ZjQ4ZDExMzYzYzA5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvQ29udGVudEV4dGVuc2lvbi5jcHAKQEAgLTQ2LDggKzQ2LDcgQEAgQ29udGVudEV4dGVu
c2lvbjo6Q29udGVudEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFJlZjxDb21w
aWxlZENvbnRlbnQKICAgICAsIG1fZXh0ZW5zaW9uQmFzZVVSTChXVEZNb3ZlKGV4dGVuc2lvbkJh
c2VVUkwpKQogewogICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIgaW50ZXJwcmV0ZXIobV9jb21w
aWxlZEV4dGVuc2lvbi0+dXJsRmlsdGVyc0J5dGVjb2RlKCkpOwotICAgIGZvciAodWludDY0X3Qg
YWN0aW9uIDogaW50ZXJwcmV0ZXIuYWN0aW9uc01hdGNoaW5nRXZlcnl0aGluZygpKQotICAgICAg
ICBtX3VuaXZlcnNhbEFjdGlvbnMuYXBwZW5kKGFjdGlvbik7CisgICAgbV91bml2ZXJzYWxBY3Rp
b25zID0gY29weVRvVmVjdG9yKGludGVycHJldGVyLmFjdGlvbnNNYXRjaGluZ0V2ZXJ5dGhpbmco
KSk7CiAKICAgICBpZiAoc2hvdWxkQ29tcGlsZUNTUyA9PSBTaG91bGRDb21waWxlQ1NTOjpZZXMp
CiAgICAgICAgIGNvbXBpbGVHbG9iYWxEaXNwbGF5Tm9uZVN0eWxlU2hlZXQoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NWYWx1ZUxpc3QuaAppbmRleCBiYjEyNzNhNWZkM2VlOGU2ODgwYmE3NjdhZjkyOTE3ZWJk
ZGE3NDhmLi5mOWE3NjA2MDQwODliMGNlMmY2OWY4NzY4NjU0ZjEyNjgyMzdhNjdlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1ZhbHVlTGlzdC5oCkBAIC01OCw2ICs1OCw3IEBAIHB1YmxpYzoKICAgICBjb25z
dF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQogICAgIGl0
ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV92YWx1ZXMuYmVnaW4oKTsgfQogICAgIGl0ZXJhdG9y
IGVuZCgpIHsgcmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KIAogICAgIHZvaWQgYXBwZW5kKFJlZjxDU1NW
YWx1ZT4mJik7CiAgICAgdm9pZCBwcmVwZW5kKFJlZjxDU1NWYWx1ZT4mJik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAKaW5kZXggNmFiNWNi
Njc0ZDQxNTNkODIyNTJmMjU4N2VlNDZmY2Y1YWFjOGM0YS4uNzlmMmE4ODI2MGNlYWVmMGQ1ODAx
NTc2NjEzOWMwNzU3NjY3YzAwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMv
Q1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NT
U0NhbGNPcGVyYXRpb25Ob2RlLmNwcApAQCAtNjIwLDE0ICs2MjAsMTEgQEAgdm9pZCBDU1NDYWxj
T3BlcmF0aW9uTm9kZTo6aG9pc3RDaGlsZHJlbldpdGhPcGVyYXRvcihDYWxjT3BlcmF0b3Igb3Ap
CiAKICAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IG5ld0NoaWxkcmVuOwog
ICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKSB7Ci0gICAgICAgIGlmIChpczxDU1ND
YWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQpICYmIGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2Rl
PihjaGlsZC5nZXQoKSkuY2FsY09wZXJhdG9yKCkgPT0gb3ApIHsKLSAgICAgICAgICAgIGF1dG8m
IGNoaWxkcmVuID0gZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKS5j
aGlsZHJlbigpOwotICAgICAgICAgICAgZm9yIChhdXRvJiBjaGlsZFRvTW92ZSA6IGNoaWxkcmVu
KQotICAgICAgICAgICAgICAgIG5ld0NoaWxkcmVuLmFwcGVuZChXVEZNb3ZlKGNoaWxkVG9Nb3Zl
KSk7Ci0gICAgICAgIH0gZWxzZQorICAgICAgICBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+
KGNoaWxkKSAmJiBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpLmNh
bGNPcGVyYXRvcigpID09IG9wKQorICAgICAgICAgICAgbmV3Q2hpbGRyZW4uYXBwZW5kVmVjdG9y
KGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZC5nZXQoKSkuY2hpbGRyZW4oKSk7
CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIG5ld0NoaWxkcmVuLmFwcGVuZChXVEZNb3ZlKGNo
aWxkKSk7CiAgICAgfQotICAgIAogICAgIG5ld0NoaWxkcmVuLnNocmlua1RvRml0KCk7CiAgICAg
bV9jaGlsZHJlbiA9IFdURk1vdmUobmV3Q2hpbGRyZW4pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0RPTVN0cmluZ0xpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJp
bmdMaXN0LmgKaW5kZXggNjljYjJkN2Y5MzJlMDBhMjY1ZTA4ZDhmZjNiMWNiNTBjMTI3N2NlNS4u
MjhlYzZmNmQ2Njg0YWMwM2JlNTQxMzJiMGIzMzFkNmQ1MTllMzYxNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0RPTVN0cmluZ0xpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RE9NU3RyaW5nTGlzdC5oCkBAIC00MCw5ICs0MCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IERPTVN0cmluZ0xpc3QpOwogICAgIH0KIAorICAgIHN0YXRpYyBSZWY8
RE9NU3RyaW5nTGlzdD4gY3JlYXRlKFZlY3RvcjxTdHJpbmc+JiYgc3RyaW5ncykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERPTVN0cmluZ0xpc3QoV1RGTW92ZShzdHJpbmdz
KSkpOworICAgIH0KKwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5n
cy5pc0VtcHR5KCk7IH0KICAgICB2b2lkIGNsZWFyKCkgeyBtX3N0cmluZ3MuY2xlYXIoKTsgfQot
ICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYgc3RyaW5nKSB7IG1fc3RyaW5ncy5hcHBlbmQo
c3RyaW5nKTsgfQorICAgIHZvaWQgYXBwZW5kKFN0cmluZyYmIHN0cmluZykgeyBtX3N0cmluZ3Mu
YXBwZW5kKFdURk1vdmUoc3RyaW5nKSk7IH0KICAgICB2b2lkIHNvcnQoKTsKIAogICAgIC8vIElt
cGxlbWVudHMgdGhlIElETC4KQEAgLTUzLDcgKzU4LDExIEBAIHB1YmxpYzoKICAgICBvcGVyYXRv
ciBjb25zdCBWZWN0b3I8U3RyaW5nPiYoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZ3M7IH0KIAog
cHJpdmF0ZToKLSAgICBET01TdHJpbmdMaXN0KCkgeyB9CisgICAgRE9NU3RyaW5nTGlzdCgpID0g
ZGVmYXVsdDsKKyAgICBleHBsaWNpdCBET01TdHJpbmdMaXN0KFZlY3RvcjxTdHJpbmc+JiYgc3Ry
aW5ncykKKyAgICAgICAgOiBtX3N0cmluZ3MoV1RGTW92ZShzdHJpbmdzKSkKKyAgICB7CisgICAg
fQogCiAgICAgVmVjdG9yPFN0cmluZz4gbV9zdHJpbmdzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudFBhdGguY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0
aC5jcHAKaW5kZXggNDZmYjY0NWUwNTMzNzU4MWY5ZmEzNDUyMzAzYTJmZTM4MGY0NmMwNi4uZWNi
Y2MwMGYzNmYwNzZlMzIwYjZhZDE2YWQxZDlhMGJmMDM4ZTI3OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
UGF0aC5jcHAKQEAgLTI3NCwxMSArMjc0LDExIEBAIFZlY3RvcjxFdmVudFRhcmdldCo+IEV2ZW50
UGF0aDo6Y29tcHV0ZVBhdGhVbmNsb3NlZFRvVGFyZ2V0KGNvbnN0IEV2ZW50VGFyZ2V0JiB0CiAK
IEV2ZW50UGF0aDo6RXZlbnRQYXRoKGNvbnN0IFZlY3RvcjxFdmVudFRhcmdldCo+JiB0YXJnZXRz
KQogewotICAgIGZvciAoYXV0byogdGFyZ2V0IDogdGFyZ2V0cykgeworICAgIG1fcGF0aCA9IHRh
cmdldHMubWFwKFsmXShhdXRvKiB0YXJnZXQpIHsKICAgICAgICAgQVNTRVJUKHRhcmdldCk7CiAg
ICAgICAgIEFTU0VSVCghaXM8Tm9kZT4odGFyZ2V0KSk7Ci0gICAgICAgIG1fcGF0aC5hcHBlbmQo
RXZlbnRDb250ZXh0IHsgRXZlbnRDb250ZXh0OjpUeXBlOjpOb3JtYWwsIG51bGxwdHIsIHRhcmdl
dCwgKnRhcmdldHMuYmVnaW4oKSwgMCB9KTsKLSAgICB9CisgICAgICAgIHJldHVybiBFdmVudENv
bnRleHQgeyBFdmVudENvbnRleHQ6OlR5cGU6Ok5vcm1hbCwgbnVsbHB0ciwgdGFyZ2V0LCAqdGFy
Z2V0cy5iZWdpbigpLCAwIH07CisgICAgfSk7CiB9CiAKIHN0YXRpYyBOb2RlKiBtb3ZlT3V0T2ZB
bGxTaGFkb3dSb290cyhOb2RlJiBzdGFydGluZ05vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRnVsbHNjcmVlbk1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0Z1bGxz
Y3JlZW5NYW5hZ2VyLmNwcAppbmRleCBlY2U0OGU0MjY3OTcwOTVkYTcwOWEwNGRhNjg2YTRmZTBi
YzI5MjhjLi4wZTliYjk0NDFjMzdkZjUzZDQ3MTgzOGNjYzFhYWRjYjYzNzc4YmVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRnVsbHNjcmVlbk1hbmFnZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9GdWxsc2NyZWVuTWFuYWdlci5jcHAKQEAgLTI2NSw5ICsyNjUsOCBAQCB2
b2lkIEZ1bGxzY3JlZW5NYW5hZ2VyOjpjYW5jZWxGdWxsc2NyZWVuKCkKIAogICAgIC8vIFRvIGFj
aGlldmUgdGhhdCBhaW0sIHJlbW92ZSBhbGwgdGhlIGVsZW1lbnRzIGZyb20gdGhlIHRvcCBkb2N1
bWVudCdzIHN0YWNrIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IGJlZm9yZQogICAgIC8vIGNhbGxpbmcg
d2Via2l0RXhpdEZ1bGxzY3JlZW4oKToKLSAgICBWZWN0b3I8UmVmUHRyPEVsZW1lbnQ+PiByZXBs
YWNlbWVudEZ1bGxzY3JlZW5FbGVtZW50U3RhY2s7Ci0gICAgcmVwbGFjZW1lbnRGdWxsc2NyZWVu
RWxlbWVudFN0YWNrLmFwcGVuZCh0b3BEb2N1bWVudC5mdWxsc2NyZWVuTWFuYWdlcigpLmZ1bGxz
Y3JlZW5FbGVtZW50KCkpOwotICAgIHRvcERvY3VtZW50LmZ1bGxzY3JlZW5NYW5hZ2VyKCkubV9m
dWxsc2NyZWVuRWxlbWVudFN0YWNrLnN3YXAocmVwbGFjZW1lbnRGdWxsc2NyZWVuRWxlbWVudFN0
YWNrKTsKKyAgICBSZWZQdHIgZnVsbHNjcmVuRWxlbWVudCA9IHRvcERvY3VtZW50LmZ1bGxzY3Jl
ZW5NYW5hZ2VyKCkuZnVsbHNjcmVlbkVsZW1lbnQoKTsKKyAgICB0b3BEb2N1bWVudC5mdWxsc2Ny
ZWVuTWFuYWdlcigpLm1fZnVsbHNjcmVlbkVsZW1lbnRTdGFjayA9IHsgV1RGTW92ZShmdWxsc2Ny
ZW5FbGVtZW50KSB9OwogCiAgICAgdG9wRG9jdW1lbnQuZnVsbHNjcmVlbk1hbmFnZXIoKS5leGl0
RnVsbHNjcmVlbigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0xvYWRhYmxl
U2NyaXB0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJsZVNjcmlwdC5jcHAKaW5kZXgg
MWJkZGUxZWI1ZDZhMDdmMTE3Mzg5Yjk5Yzc1ZWNiMDFiNjBmODgwOS4uNDFmNDNjZTY2ODUwMzBl
ZDlkMzlkZjA1YjlmYzkyM2IxMjM5NWRlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0xvYWRhYmxlU2NyaXB0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTG9hZGFibGVTY3Jp
cHQuY3BwCkBAIC01MSwxMiArNTEsOCBAQCB2b2lkIExvYWRhYmxlU2NyaXB0OjpyZW1vdmVDbGll
bnQoTG9hZGFibGVTY3JpcHRDbGllbnQmIGNsaWVudCkKIAogdm9pZCBMb2FkYWJsZVNjcmlwdDo6
bm90aWZ5Q2xpZW50RmluaXNoZWQoKQogewotICAgIFJlZlB0cjxMb2FkYWJsZVNjcmlwdD4gcHJv
dGVjdGVkVGhpcyh0aGlzKTsKLQotICAgIFZlY3RvcjxMb2FkYWJsZVNjcmlwdENsaWVudCo+IHZl
Y3RvcjsKLSAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX2NsaWVudHMpCi0gICAgICAgIHZlY3Rvci5h
cHBlbmQocGFpci5rZXkpOwotICAgIGZvciAoYXV0byYgY2xpZW50IDogdmVjdG9yKQorICAgIFJl
ZiBwcm90ZWN0ZWRUaGlzIHsgKnRoaXMgfTsKKyAgICBmb3IgKGF1dG8mIGNsaWVudCA6IGNvcHlU
b1ZlY3RvcihtX2NsaWVudHMudmFsdWVzKCkpKQogICAgICAgICBjbGllbnQtPm5vdGlmeUZpbmlz
aGVkKCp0aGlzKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0
dG9uR3JvdXBzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5jcHAK
aW5kZXggNTBmNDYzMGY4OWVjODk1ZGYxY2U1YWI4ZWQ1ODE4OWI3YWZiZjY2Mi4uMTIyNjNlMjU2
ZWU1NmE0NTJjMzIyODEyNWNhZGQ1ZjE3MGY0NWYwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFk
aW9CdXR0b25Hcm91cHMuY3BwCkBAIC01OSw5ICs1OSw3IEBAIGlubGluZSBib29sIFJhZGlvQnV0
dG9uR3JvdXA6OmlzVmFsaWQoKSBjb25zdAogCiBWZWN0b3I8UmVmPEhUTUxJbnB1dEVsZW1lbnQ+
PiBSYWRpb0J1dHRvbkdyb3VwOjptZW1iZXJzKCkgY29uc3QKIHsKLSAgICBWZWN0b3I8UmVmPEhU
TUxJbnB1dEVsZW1lbnQ+PiBzb3J0ZWRNZW1iZXJzOwotICAgIGZvciAoYXV0byYgbWVtYmVyIDog
bV9tZW1iZXJzKQotICAgICAgICBzb3J0ZWRNZW1iZXJzLmFwcGVuZChtZW1iZXIpOworICAgIGF1
dG8gc29ydGVkTWVtYmVycyA9IGNvcHlUb1ZlY3Rvck9mPFJlZjxIVE1MSW5wdXRFbGVtZW50Pj4o
bV9tZW1iZXJzKTsKICAgICBzdGQ6OnNvcnQoc29ydGVkTWVtYmVycy5iZWdpbigpLCBzb3J0ZWRN
ZW1iZXJzLmVuZCgpLCBbXShhdXRvJiBhLCBhdXRvJiBiKSB7CiAgICAgICAgIHJldHVybiBpc19s
dCh0cmVlT3JkZXI8Q29tcG9zZWRUcmVlPihhLCBiKSk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0RpcmVjdG9yeUZpbGVMaXN0Q3JlYXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0RpcmVjdG9yeUZpbGVMaXN0Q3JlYXRvci5jcHAKaW5kZXggOWQzZGExODUz
YzNhNjMyMGZlYjMxOTc1MTYyZTQzNWFlOTNmZmRkMS4uOTg1ZjdhNjJmMGMxZjM5NzU1ODJlYjNm
OWI5ODk3NTE1NjE1NjY3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9EaXJlY3Rv
cnlGaWxlTGlzdENyZWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGlyZWN0b3J5
RmlsZUxpc3RDcmVhdG9yLmNwcApAQCAtODYsMTMgKzg2LDExIEBAIHN0YXRpYyBWZWN0b3I8Rmls
ZUluZm9ybWF0aW9uPiBnYXRoZXJGaWxlSW5mb3JtYXRpb24oY29uc3QgVmVjdG9yPEZpbGVDaG9v
c2VyRmlsCiBzdGF0aWMgUmVmPEZpbGVMaXN0PiB0b0ZpbGVMaXN0KERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgVmVjdG9yPEZpbGVJbmZvcm1hdGlvbj4mIGZpbGVzKQogewogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7Ci0gICAgVmVjdG9yPFJlZjxGaWxlPj4gZmlsZU9iamVjdHM7Ci0gICAg
Zm9yIChhdXRvJiBmaWxlIDogZmlsZXMpIHsKKyAgICBhdXRvIGZpbGVPYmplY3RzID0gZmlsZXMu
bWFwKFtkb2N1bWVudF0oYXV0byYgZmlsZSkgewogICAgICAgICBpZiAoZmlsZS5yZWxhdGl2ZVBh
dGguaXNOdWxsKCkpCi0gICAgICAgICAgICBmaWxlT2JqZWN0cy5hcHBlbmQoRmlsZTo6Y3JlYXRl
KGRvY3VtZW50LCBmaWxlLnBhdGgsIHsgfSwgZmlsZS5kaXNwbGF5TmFtZSkpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBmaWxlT2JqZWN0cy5hcHBlbmQoRmlsZTo6Y3JlYXRlV2l0aFJlbGF0
aXZlUGF0aChkb2N1bWVudCwgZmlsZS5wYXRoLCBmaWxlLnJlbGF0aXZlUGF0aCkpOwotICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBGaWxlOjpjcmVhdGUoZG9jdW1lbnQsIGZpbGUucGF0aCwgeyB9
LCBmaWxlLmRpc3BsYXlOYW1lKTsKKyAgICAgICAgcmV0dXJuIEZpbGU6OmNyZWF0ZVdpdGhSZWxh
dGl2ZVBhdGgoZG9jdW1lbnQsIGZpbGUucGF0aCwgZmlsZS5yZWxhdGl2ZVBhdGgpOworICAgIH0p
OwogICAgIHJldHVybiBGaWxlTGlzdDo6Y3JlYXRlKFdURk1vdmUoZmlsZU9iamVjdHMpKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAppbmRleCBjNGIwODRk
MmRlNzFmZDMxOWZlOGMwNjliNDVmZjdmY2NjZWRlNWVjLi43MmFmZTA0ZTA3Zjg5YzhjMjRhZjNm
OGI4Y2FkMzhjZTI5NmE4ZDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxT
ZWxlY3RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVt
ZW50LmNwcApAQCAtNjM0LDkgKzYzNCw5IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNhdmVM
YXN0U2VsZWN0aW9uKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fbGFzdE9uQ2hh
bmdlU2VsZWN0aW9uLmNsZWFyKCk7Ci0gICAgZm9yIChhdXRvJiBlbGVtZW50IDogbGlzdEl0ZW1z
KCkpCi0gICAgICAgIG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uLmFwcGVuZChpczxIVE1MT3B0aW9u
RWxlbWVudD4oKmVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVu
dCkuc2VsZWN0ZWQoKSk7CisgICAgbV9sYXN0T25DaGFuZ2VTZWxlY3Rpb24gPSBsaXN0SXRlbXMo
KS5tYXAoW10oYXV0byYgZWxlbWVudCkgeworICAgICAgICByZXR1cm4gaXM8SFRNTE9wdGlvbkVs
ZW1lbnQ+KCplbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQp
LnNlbGVjdGVkKCk7CisgICAgfSk7CiB9CiAKIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldEFj
dGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KGludCBpbmRleCkKQEAgLTY0NSwxMCArNjQ1LDkgQEAg
dm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgoaW50
IGluZGV4KQogCiAgICAgLy8gQ2FjaGUgdGhlIHNlbGVjdGlvbiBzdGF0ZSBzbyB3ZSBjYW4gcmVz
dG9yZSB0aGUgb2xkIHNlbGVjdGlvbiBhcyB0aGUgbmV3CiAgICAgLy8gc2VsZWN0aW9uIHBpdm90
cyBhcm91bmQgdGhpcyBhbmNob3IgaW5kZXguCi0gICAgbV9jYWNoZWRTdGF0ZUZvckFjdGl2ZVNl
bGVjdGlvbi5jbGVhcigpOwotCi0gICAgZm9yIChhdXRvJiBlbGVtZW50IDogbGlzdEl0ZW1zKCkp
Ci0gICAgICAgIG1fY2FjaGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rpb24uYXBwZW5kKGlzPEhUTUxP
cHRpb25FbGVtZW50PigqZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCpl
bGVtZW50KS5zZWxlY3RlZCgpKTsKKyAgICBtX2NhY2hlZFN0YXRlRm9yQWN0aXZlU2VsZWN0aW9u
ID0gbGlzdEl0ZW1zKCkubWFwKFtdKGF1dG8mIGVsZW1lbnQpIHsKKyAgICAgICAgcmV0dXJuIGlz
PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1l
bnQ+KCplbGVtZW50KS5zZWxlY3RlZCgpOworICAgIH0pOwogfQogCiB2b2lkIEhUTUxTZWxlY3RF
bGVtZW50OjpzZXRBY3RpdmVTZWxlY3Rpb25FbmRJbmRleChpbnQgaW5kZXgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSW1hZ2VCaXRtYXAuY3BwCmluZGV4IDA1YjI3Mzc5ZjJkOTIxOTQ0ODkzMmM0NmFiMzNiMmVm
MDMxYWZjNmEuLjU5YmZjNmUwZjFlNTkwNDNkY2M1YmJkYTJkMjJhYWUzNjVhNjEzMTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCkBAIC0xMTIsMTAgKzExMiw5IEBAIHZvaWQgSW1h
Z2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCwKIAogVmVjdG9yPHN0ZDo6b3B0aW9uYWw8SW1hZ2VCaXRtYXBCYWNraW5n
Pj4gSW1hZ2VCaXRtYXA6OmRldGFjaEJpdG1hcHMoVmVjdG9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+
JiYgYml0bWFwcykKIHsKLSAgICBWZWN0b3I8c3RkOjpvcHRpb25hbDxJbWFnZUJpdG1hcEJhY2tp
bmc+PiBidWZmZXJzOwotICAgIGZvciAoYXV0byYgYml0bWFwIDogYml0bWFwcykKLSAgICAgICAg
YnVmZmVycy5hcHBlbmQoYml0bWFwLT50YWtlSW1hZ2VCaXRtYXBCYWNraW5nKCkpOwotICAgIHJl
dHVybiBidWZmZXJzOworICAgIHJldHVybiBXVEY6Om1hcChXVEZNb3ZlKGJpdG1hcHMpLCBbXShh
dXRvJiYgYml0bWFwKSB7CisgICAgICAgIHJldHVybiBiaXRtYXAtPnRha2VJbWFnZUJpdG1hcEJh
Y2tpbmcoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBJbWFnZUJpdG1h
cDo6U291cmNlJiYgc291cmNlLCBJbWFnZUJpdG1hcE9wdGlvbnMmJiBvcHRpb25zLCBpbnQgc3gs
IGludCBzeSwgaW50IHN3LCBpbnQgc2gsIEltYWdlQml0bWFwOjpQcm9taXNlJiYgcHJvbWlzZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5jcHAKaW5kZXggNjExNDYwMjc3ZjY2NzlhNDkxZTBmOTgzMTc3OTczMDA3ZWJi
ZGRjNi4uZjczMzY0ZjM4NjBjMjZiOTM2NjE4YzRmN2UxYTE3ODI1ZThkNTAxMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5jcHAKQEAgLTMwMjEsOSArMzAyMSw4IEBAIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFJlZlB0
cjxXZWJHTFNoYWRlcj4+PiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRBdHRhY2hlCiAg
ICAgfTsKICAgICBWZWN0b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4gc2hhZGVyT2JqZWN0czsKICAg
ICBmb3IgKGF1dG8gc2hhZGVyVHlwZSA6IHNoYWRlclR5cGVzKSB7Ci0gICAgICAgIFJlZlB0cjxX
ZWJHTFNoYWRlcj4gc2hhZGVyID0gcHJvZ3JhbS5nZXRBdHRhY2hlZFNoYWRlcihzaGFkZXJUeXBl
KTsKLSAgICAgICAgaWYgKHNoYWRlcikKLSAgICAgICAgICAgIHNoYWRlck9iamVjdHMuYXBwZW5k
KHNoYWRlcik7CisgICAgICAgIGlmIChSZWZQdHIgc2hhZGVyID0gcHJvZ3JhbS5nZXRBdHRhY2hl
ZFNoYWRlcihzaGFkZXJUeXBlKSkKKyAgICAgICAgICAgIHNoYWRlck9iamVjdHMuYXBwZW5kKFdU
Rk1vdmUoc2hhZGVyKSk7CiAgICAgfQogICAgIHJldHVybiBzaGFkZXJPYmplY3RzOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5j
cHAKaW5kZXggOGFjYjY4YWY0NTUxYTM4Yjc5OWM3MTNhYTc1ZGMwZjc5MTkwMDRiZS4uMGE1ZWQ3
OGY0NThmOTliNmJjN2ZjMzcxZGY5NGNmZTkyNWE0ZDQ4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCkBAIC04NSwxMiAr
ODUsMTEgQEAgc3RhdGljIFN0cmluZ1ZpZXcgZXh0cmFjdENoYXJzZXQoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKIAogYm9vbCBIVE1MTWV0YUNoYXJzZXRQYXJzZXI6OnByb2Nlc3NNZXRhKEhUTUxUb2tl
biYgdG9rZW4pCiB7Ci0gICAgQXR0cmlidXRlTGlzdCBhdHRyaWJ1dGVzOwotICAgIGZvciAoYXV0
byYgYXR0cmlidXRlIDogdG9rZW4uYXR0cmlidXRlcygpKSB7CisgICAgYXV0byBhdHRyaWJ1dGVz
ID0gdG9rZW4uYXR0cmlidXRlcygpLm1hcChbXShhdXRvJiBhdHRyaWJ1dGUpIHsKICAgICAgICAg
U3RyaW5nIGF0dHJpYnV0ZU5hbWUgPSBTdHJpbmdJbXBsOjpjcmVhdGU4Qml0SWZQb3NzaWJsZShh
dHRyaWJ1dGUubmFtZSk7CiAgICAgICAgIFN0cmluZyBhdHRyaWJ1dGVWYWx1ZSA9IFN0cmluZ0lt
cGw6OmNyZWF0ZThCaXRJZlBvc3NpYmxlKGF0dHJpYnV0ZS52YWx1ZSk7Ci0gICAgICAgIGF0dHJp
YnV0ZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVZhbHVl
KSk7Ci0gICAgfQorICAgICAgICByZXR1cm4gc3RkOjpwYWlyIHsgV1RGTW92ZShhdHRyaWJ1dGVO
YW1lKSwgV1RGTW92ZShhdHRyaWJ1dGVWYWx1ZSkgfTsKKyAgICB9KTsKIAogICAgIG1fZW5jb2Rp
bmcgPSBlbmNvZGluZ0Zyb21NZXRhQXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKICAgICByZXR1cm4g
bV9lbmNvZGluZy5pc1ZhbGlkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TFRyZWVCdWlsZGVyLmNwcAppbmRleCA2YjcxYmVmODFhN2UyODQ3MWVlZmQ3YzUzMTUyYThhMGE4
MmQyZGI1Li5hMWYxNjdjYjA4M2M5OTg0MzYxODM0MTE4MDI5ZjI4NWU0MWMwMDA1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKQEAgLTIyMDAs
MTEgKzIyMDAsMTAgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDaGFyYWN0ZXIoQXRv
bUhUTUxUb2tlbiYmIHRva2VuKQogLy8gRnJvbSB0aGUgc3RyaW5nIDQwODk5NjEwMTAsIGNyZWF0
ZXMgYSBsaW5rIG9mIHRoZSBmb3JtIDxhIGhyZWY9InRlbDo0MDg5OTYxMDEwIj40MDg5OTYxMDEw
PC9hPiBhbmQgaW5zZXJ0cyBpdC4KIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjppbnNlcnRQaG9uZU51
bWJlckxpbmsoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgVmVjdG9yPEF0dHJpYnV0ZT4g
YXR0cmlidXRlczsKLSAgICBhdHRyaWJ1dGVzLmFwcGVuZChBdHRyaWJ1dGUoSFRNTE5hbWVzOjpo
cmVmQXR0ciwgbWFrZVN0cmluZygidGVsOiJfcywgc3RyaW5nKSkpOworICAgIEF0dHJpYnV0ZSBh
dHRyaWJ1dGUoSFRNTE5hbWVzOjpocmVmQXR0ciwgbWFrZVN0cmluZygidGVsOiJfcywgc3RyaW5n
KSk7CiAKICAgICBjb25zdCBBdG9tU3RyaW5nJiBhVGFnTG9jYWxOYW1lID0gYVRhZy0+bG9jYWxO
YW1lKCk7Ci0gICAgQXRvbUhUTUxUb2tlbiBhU3RhcnRUb2tlbihIVE1MVG9rZW46OlN0YXJ0VGFn
LCBhVGFnTG9jYWxOYW1lLCBXVEZNb3ZlKGF0dHJpYnV0ZXMpKTsKKyAgICBBdG9tSFRNTFRva2Vu
IGFTdGFydFRva2VuKEhUTUxUb2tlbjo6U3RhcnRUYWcsIGFUYWdMb2NhbE5hbWUsIHsgV1RGTW92
ZShhdHRyaWJ1dGUpIH0pOwogICAgIEF0b21IVE1MVG9rZW4gYUVuZFRva2VuKEhUTUxUb2tlbjo6
RW5kVGFnLCBhVGFnTG9jYWxOYW1lKTsKIAogICAgIHByb2Nlc3NTdGFydFRhZyhXVEZNb3ZlKGFT
dGFydFRva2VuKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9UZXh0
RG9jdW1lbnRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvVGV4dERvY3Vt
ZW50UGFyc2VyLmNwcAppbmRleCA0ZGE5NTlmNDBmZTllYTMzNzQ3Y2QyMzg4Y2ViNzlmNmQ3MmRi
N2VkLi40NzA2ZjI2ZTg0NDA5ZWU4MTNjZDEzYmM1ZjRlMGFjY2Y2NzRhODY3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNlci5jcHAKQEAgLTUx
LDkgKzUxLDggQEAgdm9pZCBUZXh0RG9jdW1lbnRQYXJzZXI6Omluc2VydEZha2VQcmVFbGVtZW50
KCkKICAgICAvLyBXZSBjcmVhdGUgYSBmYWtlIHRva2VuIGFuZCBnaXZlIGl0IHRvIHRoZSB0cmVl
IGJ1aWxkZXIgcmF0aGVyIHRoYW4KICAgICAvLyBzZW5kaW5nIGZha2UgYnl0ZXMgdGhyb3VnaCB0
aGUgZnJvbnQtZW5kIG9mIHRoZSBwYXJzZXIgdG8gYXZvaWQKICAgICAvLyBkaXN0cnViaW5nIHRo
ZSBsaW5lL2NvbHVtbiBudW1iZXIgY2FsY3VsYXRpb25zLgotICAgIFZlY3RvcjxBdHRyaWJ1dGU+
IGF0dHJpYnV0ZXM7Ci0gICAgYXR0cmlidXRlcy5hcHBlbmQoQXR0cmlidXRlKHN0eWxlQXR0ciwg
IndvcmQtd3JhcDogYnJlYWstd29yZDsgd2hpdGUtc3BhY2U6IHByZS13cmFwOyIpKTsKLSAgICBB
dG9tSFRNTFRva2VuIGZha2VQcmUoSFRNTFRva2VuOjpTdGFydFRhZywgcHJlVGFnLT5sb2NhbE5h
bWUoKSwgV1RGTW92ZShhdHRyaWJ1dGVzKSk7CisgICAgQXR0cmlidXRlIGF0dHJpYnV0ZShzdHls
ZUF0dHIsICJ3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsiKTsK
KyAgICBBdG9tSFRNTFRva2VuIGZha2VQcmUoSFRNTFRva2VuOjpTdGFydFRhZywgcHJlVGFnLT5s
b2NhbE5hbWUoKSwgeyBXVEZNb3ZlKGF0dHJpYnV0ZSkgfSk7CiAgICAgdHJlZUJ1aWxkZXIoKS5j
b25zdHJ1Y3RUcmVlKFdURk1vdmUoZmFrZVByZSkpOwogCiAgICAgLy8gTm9ybWFsbHkgd2Ugd291
bGQgc2tpcCB0aGUgZmlyc3QgXG4gYWZ0ZXIgYSA8cHJlPiBlbGVtZW50LCBidXQgd2UgZG9uJ3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Db250ZW50RmlsdGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9Db250ZW50RmlsdGVyLmNwcAppbmRleCA0MTllMzJmMzk4MmY2
NzJhZjY2MzBmYTVlMGM2MjVjNWNiN2IyMjNmLi40ZTM1NDQ1NGFhYmEzNGU0ZmJlYTQxNWQ0MWZm
OGU5MmJmNDQxNDVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29udGVudEZp
bHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0NvbnRlbnRGaWx0ZXIuY3BwCkBA
IC02NywxMSArNjcsOSBAQCBWZWN0b3I8Q29udGVudEZpbHRlcjo6VHlwZT4mIENvbnRlbnRGaWx0
ZXI6OnR5cGVzKCkKIAogc3RkOjp1bmlxdWVfcHRyPENvbnRlbnRGaWx0ZXI+IENvbnRlbnRGaWx0
ZXI6OmNyZWF0ZShDb250ZW50RmlsdGVyQ2xpZW50JiBjbGllbnQpCiB7Ci0gICAgQ29udGFpbmVy
IGZpbHRlcnM7Ci0gICAgZm9yIChhdXRvJiB0eXBlIDogdHlwZXMoKSkgewotICAgICAgICBhdXRv
IGZpbHRlciA9IHR5cGUuY3JlYXRlKCk7Ci0gICAgICAgIGZpbHRlcnMuYXBwZW5kKFdURk1vdmUo
ZmlsdGVyKSk7Ci0gICAgfQorICAgIGF1dG8gZmlsdGVycyA9IHR5cGVzKCkubWFwKFtdKGF1dG8m
IHR5cGUpIHsKKyAgICAgICAgcmV0dXJuIHR5cGUuY3JlYXRlKCk7CisgICAgfSk7CiAKICAgICBp
ZiAoZmlsdGVycy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVNYW5pZmVz
dFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25D
YWNoZU1hbmlmZXN0UGFyc2VyLmNwcAppbmRleCBiODdkZDgzNTA2MDdjMjRiZTI1NmUzNDQxYmVk
MmQzNzY3ZTA5NTUyLi40YTExNDQyNWUxMTZkMmM0MmQxOTAzOTIzZWRmODg2MzgzZDhmMDY0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZU1hbmlmZXN0UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUv
QXBwbGljYXRpb25DYWNoZU1hbmlmZXN0UGFyc2VyLmNwcApAQCAtMTgwLDcgKzE4MCw3IEBAIHN0
ZDo6b3B0aW9uYWw8QXBwbGljYXRpb25DYWNoZU1hbmlmZXN0PiBwYXJzZUFwcGxpY2F0aW9uQ2Fj
aGVNYW5pZmVzdChjb25zdCBVUkwmCiAgICAgICAgICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5n
QVNDSUlDYXNlKHVybC5wcm90b2NvbCgpLCBtYW5pZmVzdFVSTC5wcm90b2NvbCgpKSkKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgICAgICBtYW5pZmVzdC5vbmxp
bmVBbGxvd2VkVVJMcy5hcHBlbmQodXJsKTsKKyAgICAgICAgICAgICAgICBtYW5pZmVzdC5vbmxp
bmVBbGxvd2VkVVJMcy5hcHBlbmQoV1RGTW92ZSh1cmwpKTsKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9SZXNpemVPYnNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6
ZU9ic2VydmVyLmNwcAppbmRleCA5M2RhMWE0NTYwNGU0NTJhNzc1OTNlMThkMWY0NzMzNjM0OTk0
MzY3Li40ZmZkNjlkMDM0NDEwOWI0N2FmYjVlNTE5N2FhM2ZkZmQ0OTdkZWQ2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6ZU9ic2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1Jlc2l6ZU9ic2VydmVyLmNwcApAQCAtMTI1LDExICsxMjUsMTAgQEAgc2l6ZV90
IFJlc2l6ZU9ic2VydmVyOjpnYXRoZXJPYnNlcnZhdGlvbnMoc2l6ZV90IGRlZXBlclRoYW4pCiAK
IHZvaWQgUmVzaXplT2JzZXJ2ZXI6OmRlbGl2ZXJPYnNlcnZhdGlvbnMoKQogewotICAgIFZlY3Rv
cjxSZWY8UmVzaXplT2JzZXJ2ZXJFbnRyeT4+IGVudHJpZXM7Ci0gICAgZm9yIChjb25zdCBhdXRv
JiBvYnNlcnZhdGlvbiA6IG1fYWN0aXZlT2JzZXJ2YXRpb25zKSB7CisgICAgYXV0byBlbnRyaWVz
ID0gbV9hY3RpdmVPYnNlcnZhdGlvbnMubWFwKFtdKGF1dG8mIG9ic2VydmF0aW9uKSB7CiAgICAg
ICAgIEFTU0VSVChvYnNlcnZhdGlvbi0+dGFyZ2V0KCkpOwotICAgICAgICBlbnRyaWVzLmFwcGVu
ZChSZXNpemVPYnNlcnZlckVudHJ5OjpjcmVhdGUob2JzZXJ2YXRpb24tPnRhcmdldCgpLCBvYnNl
cnZhdGlvbi0+Y29tcHV0ZUNvbnRlbnRSZWN0KCksIG9ic2VydmF0aW9uLT5ib3JkZXJCb3hTaXpl
KCksIG9ic2VydmF0aW9uLT5jb250ZW50Qm94U2l6ZSgpKSk7Ci0gICAgfQorICAgICAgICByZXR1
cm4gUmVzaXplT2JzZXJ2ZXJFbnRyeTo6Y3JlYXRlKG9ic2VydmF0aW9uLT50YXJnZXQoKSwgb2Jz
ZXJ2YXRpb24tPmNvbXB1dGVDb250ZW50UmVjdCgpLCBvYnNlcnZhdGlvbi0+Ym9yZGVyQm94U2l6
ZSgpLCBvYnNlcnZhdGlvbi0+Y29udGVudEJveFNpemUoKSk7CisgICAgfSk7CiAgICAgbV9hY3Rp
dmVPYnNlcnZhdGlvbnMuY2xlYXIoKTsKICAgICBhdXRvIGFjdGl2ZU9ic2VydmF0aW9uVGFyZ2V0
cyA9IHN0ZDo6ZXhjaGFuZ2UobV9hY3RpdmVPYnNlcnZhdGlvblRhcmdldHMsIHsgfSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCmluZGV4IDM4N2Q1MTlhZTUxNzJkNjgwYTVi
Mjg4NDNiYmU4ZmY5OTZjNmIzMzUuLmNhNWZiZTYzY2NmNmNkYjk4YWY4NWVkNTkyOWExMzAzOGQ2
OWJmYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcApAQCAtMzYxLDE3ICsz
NjEsMTYgQEAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZUluZGljYXRvcihUZXh0SW5kaWNhdG9yRGF0
YSYgZGF0YSwgRnJhbWUmIGZyYW1lLCBjb25zdCBTaW0KICAgICAgICAgdGV4dEJvdW5kaW5nUmVj
dEluUm9vdFZpZXdDb29yZGluYXRlcy51bml0ZSh0ZXh0UmVjdEluUm9vdFZpZXdDb29yZGluYXRl
cyk7CiAgICAgfQogCi0gICAgVmVjdG9yPEZsb2F0UmVjdD4gdGV4dFJlY3RzSW5Cb3VuZGluZ1Jl
Y3RDb29yZGluYXRlczsKLSAgICBmb3IgKGF1dG8gcmVjdCA6IHRleHRSZWN0c0luUm9vdFZpZXdD
b29yZGluYXRlcykgeworICAgIGF1dG8gdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRl
cyA9IHRleHRSZWN0c0luUm9vdFZpZXdDb29yZGluYXRlcy5tYXAoWyZdKGF1dG8gcmVjdCkgewog
ICAgICAgICByZWN0Lm1vdmVCeSgtdGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRl
cy5sb2NhdGlvbigpKTsKLSAgICAgICAgdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRl
cy5hcHBlbmQocmVjdCk7Ci0gICAgfQorICAgICAgICByZXR1cm4gcmVjdDsKKyAgICB9KTsKIAog
ICAgIC8vIFN0b3JlIHRoZSBzZWxlY3Rpb24gcmVjdCBpbiB3aW5kb3cgY29vcmRpbmF0ZXMsIHRv
IGJlIHVzZWQgc3Vic2VxdWVudGx5CiAgICAgLy8gdG8gZGV0ZXJtaW5lIGlmIHRoZSBpbmRpY2F0
b3IgYW5kIHNlbGVjdGlvbiBzdGlsbCBwcmVjaXNlbHkgb3ZlcmxhcC4KICAgICBkYXRhLnNlbGVj
dGlvblJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9S
b290VmlldyhlbmNsb3NpbmdJbnRSZWN0KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbkJvdW5k
cyhGcmFtZVNlbGVjdGlvbjo6Q2xpcFRvVmlzaWJsZUNvbnRlbnQ6Ok5vKSkpOwogICAgIGRhdGEu
dGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9IHRleHRCb3VuZGluZ1JlY3RJ
blJvb3RWaWV3Q29vcmRpbmF0ZXM7Ci0gICAgZGF0YS50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENv
b3JkaW5hdGVzID0gdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlczsKKyAgICBkYXRh
LnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMgPSBXVEZNb3ZlKHRleHRSZWN0c0lu
Qm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMpOwogCiAgICAgcmV0dXJuIHRha2VTbmFwc2hvdHMoZGF0
YSwgZnJhbWUsIGVuY2xvc2luZ0ludFJlY3QodGV4dEJvdW5kaW5nUmVjdEluRG9jdW1lbnRDb29y
ZGluYXRlcyksIGNsaXBwZWRUZXh0UmVjdHNJbkRvY3VtZW50Q29vcmRpbmF0ZXMpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKaW5k
ZXggNTJmNjIwMTIyYjg1Yzc1MDNlN2RhNmE2ODM1YmYzNzU2MTQ5NjdmNC4uOGEyYmE0Y2ZmYTI2
ZGNjYmJkMWU3NWVlNTAxMTNhODY2YmU1YTJmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCkBAIC0zNDMsMTggKzM0MywxMiBAQCBi
b29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsUG9saWNpZXNBbGxvdyhWaW9sYXRlZERpcmVj
dGl2ZUNhbGxiYWNrJiYgY2FsbGJhYwogc3RhdGljIFZlY3RvcjxSZXNvdXJjZUNyeXB0b2dyYXBo
aWNEaWdlc3Q+IHBhcnNlU3ViUmVzb3VyY2VJbnRlZ3JpdHlJbnRvRGlnZXN0cyhjb25zdCBTdHJp
bmcmIHN1YlJlc291cmNlSW50ZWdyaXR5KQogewogICAgIGF1dG8gZW5jb2RlZERpZ2VzdHMgPSBw
YXJzZUludGVncml0eU1ldGFkYXRhKHN1YlJlc291cmNlSW50ZWdyaXR5KTsKLSAgICBWZWN0b3I8
UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBkZWNvZGVkRGlnZXN0czsKLQotICAgIGlmICgh
ZW5jb2RlZERpZ2VzdHMuaGFzX3ZhbHVlKCkpCisgICAgaWYgKCFlbmNvZGVkRGlnZXN0cykKICAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgZW5jb2RlZERpZ2VzdCA6
IGVuY29kZWREaWdlc3RzLnZhbHVlKCkpIHsKLSAgICAgICAgYXV0byBkZWNvZGVkRGlnZXN0ID0g
ZGVjb2RlRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdChlbmNvZGVkRGlnZXN0KTsK
LSAgICAgICAgaWYgKGRlY29kZWREaWdlc3QuaGFzX3ZhbHVlKCkpCi0gICAgICAgICAgICBkZWNv
ZGVkRGlnZXN0cy5hcHBlbmQoZGVjb2RlZERpZ2VzdC52YWx1ZSgpKTsKLSAgICAgICAgfQotCi0g
ICAgcmV0dXJuIGRlY29kZWREaWdlc3RzOworICAgIHJldHVybiBXVEY6OmNvbXBhY3RNYXAoKmVu
Y29kZWREaWdlc3RzLCBbXShhdXRvJiBlbmNvZGVkRGlnZXN0KSB7CisgICAgICAgIHJldHVybiBk
ZWNvZGVFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0KGVuY29kZWREaWdlc3QpOwor
ICAgIH0pOwogfQogCiBzdGF0aWMgVmVjdG9yPENvbnRlbnRTZWN1cml0eVBvbGljeUhhc2g+IGdl
bmVyYXRlSGFzaGVzRm9yQ29udGVudChjb25zdCBTdHJpbmdWaWV3IGNvbnRlbnQsIE9wdGlvblNl
dDxDb250ZW50U2VjdXJpdHlQb2xpY3lIYXNoQWxnb3JpdGhtPiBhbGdvcml0aG1zKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwCmluZGV4IDhlNGVjZTcwNTNhZThlOThlZmVj
Y2ZlNzY1MmY4NmNkMjk3NDA0MDQuLjc4NDI4YzRhYmQzMWU5OWIxMGFhZTQ4ZmJlY2MyYTViOGQ5
ZjU4ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHAKQEAgLTUzLDkg
KzUzLDcgQEAgdm9pZCBGaWxlQ2hvb3Nlcjo6aW52YWxpZGF0ZSgpCiAKIHZvaWQgRmlsZUNob29z
ZXI6OmNob29zZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKIHsKLSAgICBWZWN0b3I8U3Ry
aW5nPiBmaWxlbmFtZXM7Ci0gICAgZmlsZW5hbWVzLmFwcGVuZChmaWxlbmFtZSk7Ci0gICAgY2hv
b3NlRmlsZXMoZmlsZW5hbWVzKTsKKyAgICBjaG9vc2VGaWxlcyh7IGZpbGVuYW1lIH0pOwogfQog
CiB2b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmls
ZW5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVwbGFjZW1lbnROYW1lcykKQEAgLTY4LDkg
KzY2LDEwIEBAIHZvaWQgRmlsZUNob29zZXI6OmNob29zZUZpbGVzKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBmaWxlbmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpCiAgICAgICAgIHJldHVybjsKIAogICAg
IFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJbmZvPiBmaWxlczsKKyAgICBmaWxlcy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KGZpbGVuYW1lcy5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwLCBz
aXplID0gZmlsZW5hbWVzLnNpemUoKTsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgZmlsZXMuYXBw
ZW5kKHsgZmlsZW5hbWVzW2ldLCBpIDwgcmVwbGFjZW1lbnROYW1lcy5zaXplKCkgPyByZXBsYWNl
bWVudE5hbWVzW2ldIDogbnVsbFN0cmluZygpLCB7IH0gfSk7Ci0gICAgbV9jbGllbnQtPmZpbGVz
Q2hvc2VuKGZpbGVzKTsKKyAgICAgICAgZmlsZXMudW5jaGVja2VkQXBwZW5kKHsgZmlsZW5hbWVz
W2ldLCBpIDwgcmVwbGFjZW1lbnROYW1lcy5zaXplKCkgPyByZXBsYWNlbWVudE5hbWVzW2ldIDog
bnVsbFN0cmluZygpLCB7IH0gfSk7CisgICAgbV9jbGllbnQtPmZpbGVzQ2hvc2VuKFdURk1vdmUo
ZmlsZXMpKTsKIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC04NiwxOSArODUsMTkg
QEAgdm9pZCBGaWxlQ2hvb3Nlcjo6Y2hvb3NlTWVkaWFGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgZmlsZW5hbWVzLCBjb25zdCBTdHJpbmcKICAgICBpZiAoIW1fY2xpZW50KQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4gZmlsZXM7Ci0gICAgZm9y
IChhdXRvJiBmaWxlbmFtZSA6IGZpbGVuYW1lcykKLSAgICAgICAgZmlsZXMuYXBwZW5kKHsgZmls
ZW5hbWUsIHsgfSwgeyB9IH0pOwotICAgIG1fY2xpZW50LT5maWxlc0Nob3NlbihmaWxlcywgZGlz
cGxheVN0cmluZywgaWNvbik7CisgICAgYXV0byBmaWxlcyA9IGZpbGVuYW1lcy5tYXAoW10oYXV0
byYgZmlsZW5hbWUpIHsKKyAgICAgICAgcmV0dXJuIEZpbGVDaG9vc2VyRmlsZUluZm8geyBmaWxl
bmFtZSwgeyB9LCB7IH0gfTsKKyAgICB9KTsKKyAgICBtX2NsaWVudC0+ZmlsZXNDaG9zZW4oV1RG
TW92ZShmaWxlcyksIGRpc3BsYXlTdHJpbmcsIGljb24pOwogfQogCiAjZW5kaWYKIAogdm9pZCBG
aWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZXMoY29uc3QgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+
JiBmaWxlcykKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiBwYXRoczsKLSAgICBmb3IgKGF1dG8mIGZp
bGUgOiBmaWxlcykKLSAgICAgICAgcGF0aHMuYXBwZW5kKGZpbGUucGF0aCk7CisgICAgYXV0byBw
YXRocyA9IGZpbGVzLm1hcChbXShhdXRvJiBmaWxlKSB7CisgICAgICAgIHJldHVybiBmaWxlLnBh
dGg7CisgICAgfSk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyBpbmVsZWdhbnQuIFdlIHNob3Vs
ZCBub3QgYmUgbG9va2luZyBhdCBzZXR0aW5ncyBoZXJlLgogICAgIGlmIChtX3NldHRpbmdzLnNl
bGVjdGVkRmlsZXMgPT0gcGF0aHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TaGFyZWRCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmNwcAppbmRleCBkMDlmMTA1MmEwZjMxZWU5NzA2MTEwMTNiMzkzNWZiNTMwOTU1MDk2Li5mODdi
NmE0ZjYzYjI2YTIxODgyMDZlOTM4YWE1ODU3OTdhYjM5NWU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKQEAgLTIwNiw5ICsyMDYsNyBAQCB2b2lkIEZyYWdtZW50
ZWRTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25zdCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyJiBkYXRh
KQogdm9pZCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyOjphcHBlbmQoY29uc3QgdWludDhfdCogZGF0
YSwgc2l6ZV90IGxlbmd0aCkKIHsKICAgICBBU1NFUlQoIW1fY29udGlndW91cyk7Ci0gICAgVmVj
dG9yPHVpbnQ4X3Q+IHZlY3RvcjsKLSAgICB2ZWN0b3IuYXBwZW5kKGRhdGEsIGxlbmd0aCk7Ci0g
ICAgbV9zZWdtZW50cy5hcHBlbmQoeyBtX3NpemUsIERhdGFTZWdtZW50OjpjcmVhdGUoV1RGTW92
ZSh2ZWN0b3IpKSB9KTsKKyAgICBtX3NlZ21lbnRzLmFwcGVuZCh7IG1fc2l6ZSwgRGF0YVNlZ21l
bnQ6OmNyZWF0ZShWZWN0b3IgeyBkYXRhLCBsZW5ndGggfSkgfSk7CiAgICAgbV9zaXplICs9IGxl
bmd0aDsKICAgICBBU1NFUlQoaW50ZXJuYWxseUNvbnNpc3RlbnQoKSk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRTYWZlRGF0YUJ1ZmZlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkU2FmZURhdGFCdWZmZXIuaAppbmRleCBkMzk3ZDIyN2Rm
YzUzNGFkMGNmNTg3MDJiZTFjYTU4MDI0OTlhMGJiLi42NjI3ZmViY2I3ZjRlMWRhZDgxMTFlMTRh
OTEyMTQ0ODgxNjZhOTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJl
YWRTYWZlRGF0YUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZFNh
ZmVEYXRhQnVmZmVyLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNs
dWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0xNDMsNCArMTQ0LDE1IEBAIGJvb2wgVGhy
ZWFkU2FmZURhdGFCdWZmZXI6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBUaHJlYWRTYWZlRGF0
YUJ1ZmZlciYgcmVzdWx0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2lubGluZSB2b2lkIGFkZChI
YXNoZXImIGhhc2hlciwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIGJ1ZmZlcikKK3sKKyAg
ICBhdXRvKiBkYXRhID0gYnVmZmVyLmRhdGEoKTsKKyAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAg
YWRkKGhhc2hlciwgdHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYWRkKGhhc2hl
ciwgZmFsc2UpOworICAgIGFkZChoYXNoZXIsICpkYXRhKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9E
U1BLZXJuZWxQcm9jZXNzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVk
aW9EU1BLZXJuZWxQcm9jZXNzb3IuY3BwCmluZGV4IDFjZjM5Y2FjZjMwMjQ1MDhlOGQxMmU4NjQ1
YzUwODY3NzIxOTQzNWIuLmJmZTE4ZTI5ZDI2ZWM4OWEzZjQwMmQ3MTgzMTM4MjAxNjIzZTUxNzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVs
UHJvY2Vzc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0RT
UEtlcm5lbFByb2Nlc3Nvci5jcHAKQEAgLTU2LDggKzU2LDkgQEAgdm9pZCBBdWRpb0RTUEtlcm5l
bFByb2Nlc3Nvcjo6aW5pdGlhbGl6ZSgpCiAgICAgICAgIERpc2FibGVNYWxsb2NSZXN0cmljdGlv
bnNGb3JDdXJyZW50VGhyZWFkU2NvcGUgZGlzYWJsZU1hbGxvY1Jlc3RyaWN0aW9uczsKIAogICAg
ICAgICAvLyBDcmVhdGUgcHJvY2Vzc2luZyBrZXJuZWxzLCBvbmUgcGVyIGNoYW5uZWwuCisgICAg
ICAgIG1fa2VybmVscy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bWJlck9mQ2hhbm5lbHMoKSk7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzKCk7ICsr
aSkKLSAgICAgICAgICAgIG1fa2VybmVscy5hcHBlbmQoY3JlYXRlS2VybmVsKCkpOworICAgICAg
ICAgICAgbV9rZXJuZWxzLnVuY2hlY2tlZEFwcGVuZChjcmVhdGVLZXJuZWwoKSk7CiAgICAgfQog
ICAgIG1faW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgIG1faGFzSnVzdFJlc2V0ID0gdHJ1ZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUmVzYW1wbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUmVzYW1wbGVyLmNwcAppbmRl
eCBkZTUwOGNjNmVmNGE1YjAxYmQ0ZWIyMjQ3NDViN2VmMjgyODQwZjhlLi43NDY5Y2U0ZGUzZjNj
MTg4ODkyOGY1NDk3ZDEyY2U1NmRiNmU2ZDJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9BdWRpb1Jlc2FtcGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vQXVkaW9SZXNhbXBsZXIuY3BwCkBAIC00Miw4ICs0Miw5IEBAIEF1ZGlvUmVz
YW1wbGVyOjpBdWRpb1Jlc2FtcGxlcigpCiAKIEF1ZGlvUmVzYW1wbGVyOjpBdWRpb1Jlc2FtcGxl
cih1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKQogeworICAgIG1fa2VybmVscy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KG51bWJlck9mQ2hhbm5lbHMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1iZXJPZkNoYW5uZWxzOyArK2kpCi0gICAgICAgIG1fa2VybmVscy5hcHBlbmQobWFr
ZVVuaXF1ZTxBdWRpb1Jlc2FtcGxlcktlcm5lbD4odGhpcykpOworICAgICAgICBtX2tlcm5lbHMu
dW5jaGVja2VkQXBwZW5kKG1ha2VVbmlxdWU8QXVkaW9SZXNhbXBsZXJLZXJuZWw+KHRoaXMpKTsK
IAogICAgIG1fc291cmNlQnVzID0gQXVkaW9CdXM6OmNyZWF0ZShudW1iZXJPZkNoYW5uZWxzLCAw
LCBmYWxzZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9E
eW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcAppbmRleCA5ZjMxODFjZmJiNDAyMjc3Nzk5
NjIzYjliZmRkY2RkNDk1OWMwMGIwLi41MDMyZWVhN2E3MmIyM2RlMmEyMDJiYzE1MzYwMzVjYmFl
ZDAxNjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWlj
c0NvbXByZXNzb3JLZXJuZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAKQEAgLTYxLDggKzYxLDkgQEAgdm9pZCBEeW5h
bWljc0NvbXByZXNzb3JLZXJuZWw6OnNldE51bWJlck9mQ2hhbm5lbHModW5zaWduZWQgbnVtYmVy
T2ZDaGFubmVscykKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9wcmVEZWxheUJ1ZmZlcnMuY2xl
YXIoKTsKKyAgICBtX3ByZURlbGF5QnVmZmVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bWJl
ck9mQ2hhbm5lbHMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5u
ZWxzOyArK2kpCi0gICAgICAgIG1fcHJlRGVsYXlCdWZmZXJzLmFwcGVuZChtYWtlVW5pcXVlPEF1
ZGlvRmxvYXRBcnJheT4oTWF4UHJlRGVsYXlGcmFtZXMpKTsKKyAgICAgICAgbV9wcmVEZWxheUJ1
ZmZlcnMudW5jaGVja2VkQXBwZW5kKG1ha2VVbmlxdWU8QXVkaW9GbG9hdEFycmF5PihNYXhQcmVE
ZWxheUZyYW1lcykpOwogfQogCiB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0UHJl
RGVsYXlUaW1lKGZsb2F0IHByZURlbGF5VGltZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL011bHRpQ2hhbm5lbFJlc2FtcGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9NdWx0aUNoYW5uZWxSZXNhbXBsZXIuY3BwCmluZGV4IGI5NjZmYTA2
Y2QzMGViMzRkZjcxZmNmYmRlN2MxNjU4MjMxMTEyMWYuLjE3MDIzYjY0MjYxYmRmZDM3NWVlMDlm
ZTI5NmIzYmRhODgyN2YyZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL011bHRpQ2hhbm5lbFJlc2FtcGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vTXVsdGlDaGFubmVsUmVzYW1wbGVyLmNwcApAQCAtNTMsOCArNTMsOSBAQCBNdWx0
aUNoYW5uZWxSZXNhbXBsZXI6Ok11bHRpQ2hhbm5lbFJlc2FtcGxlcihkb3VibGUgc2NhbGVGYWN0
b3IsIHVuc2lnbmVkIG51bWJlcgogICAgIH0KIAogICAgIC8vIENyZWF0ZSBlYWNoIGNoYW5uZWwn
cyByZXNhbXBsZXIuCisgICAgbV9rZXJuZWxzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVy
T2ZDaGFubmVscyk7CiAgICAgZm9yICh1bnNpZ25lZCBjaGFubmVsSW5kZXggPSAwOyBjaGFubmVs
SW5kZXggPCBudW1iZXJPZkNoYW5uZWxzOyArK2NoYW5uZWxJbmRleCkKLSAgICAgICAgbV9rZXJu
ZWxzLmFwcGVuZChtYWtlVW5pcXVlPFNpbmNSZXNhbXBsZXI+KHNjYWxlRmFjdG9yLCByZXF1ZXN0
RnJhbWVzLCBzdGQ6OmJpbmQoJk11bHRpQ2hhbm5lbFJlc2FtcGxlcjo6cHJvdmlkZUlucHV0Rm9y
Q2hhbm5lbCwgdGhpcywgc3RkOjpwbGFjZWhvbGRlcnM6Ol8xLCBzdGQ6OnBsYWNlaG9sZGVyczo6
XzIsIGNoYW5uZWxJbmRleCkpKTsKKyAgICAgICAgbV9rZXJuZWxzLnVuY2hlY2tlZEFwcGVuZCht
YWtlVW5pcXVlPFNpbmNSZXNhbXBsZXI+KHNjYWxlRmFjdG9yLCByZXF1ZXN0RnJhbWVzLCBzdGQ6
OmJpbmQoJk11bHRpQ2hhbm5lbFJlc2FtcGxlcjo6cHJvdmlkZUlucHV0Rm9yQ2hhbm5lbCwgdGhp
cywgc3RkOjpwbGFjZWhvbGRlcnM6Ol8xLCBzdGQ6OnBsYWNlaG9sZGVyczo6XzIsIGNoYW5uZWxJ
bmRleCkpKTsKIH0KIAogTXVsdGlDaGFubmVsUmVzYW1wbGVyOjp+TXVsdGlDaGFubmVsUmVzYW1w
bGVyKCkgPSBkZWZhdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbQppbmRleCAw
NWVhMjExMWViNWQ0NTNjYjI4ZDhlNzdlZjNjYmY1ZjM1NjcxOTg5Li5mYTMwYWZkZTNiMWUxZTM2
ZTg2MWFlY2JkOWZiZThjN2YwOTAzNTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVu
dC5tbQpAQCAtNTM0LDE0ICs1MzQsMTIgQEAgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiBQ
bGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWMKICAgICBW
ZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+IGxlZ2libGVPcHRpb25zOwogCiAgICAgaWYgKCFt
X21lZGlhRWxlbWVudCB8fCAhbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpKQotICAg
ICAgICByZXR1cm4gbGVnaWJsZU9wdGlvbnM7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBh
dXRvJiBjYXB0aW9uUHJlZmVyZW5jZXMgPSBtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQoKS5wYWdl
KCktPmdyb3VwKCkuZW5zdXJlQ2FwdGlvblByZWZlcmVuY2VzKCk7Ci0KLSAgICBmb3IgKGF1dG8m
IHRyYWNrIDogbV9sZWdpYmxlVHJhY2tzRm9yTWVudSkKLSAgICAgICAgbGVnaWJsZU9wdGlvbnMu
YXBwZW5kKGNhcHRpb25QcmVmZXJlbmNlcy5tZWRpYVNlbGVjdGlvbk9wdGlvbkZvclRyYWNrKHRy
YWNrLmdldCgpKSk7Ci0KLSAgICByZXR1cm4gbGVnaWJsZU9wdGlvbnM7CisgICAgcmV0dXJuIG1f
bGVnaWJsZVRyYWNrc0Zvck1lbnUubWFwKFsmXShhdXRvJiB0cmFjaykgeworICAgICAgICByZXR1
cm4gY2FwdGlvblByZWZlcmVuY2VzLm1lZGlhU2VsZWN0aW9uT3B0aW9uRm9yVHJhY2sodHJhY2su
Z2V0KCkpOworICAgIH0pOwogfQogCiB1aW50NjRfdCBQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlh
RWxlbWVudDo6bGVnaWJsZU1lZGlhU2VsZWN0ZWRJbmRleCgpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9EdWFsc2hvY2szSElER2FtZXBhZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9EdWFsc2hvY2szSElER2Ft
ZXBhZC5jcHAKaW5kZXggNmM0MGU4Yjg4OTI4NzNmZjA3MjA2MThjZmU4Mzk2NGM4MGVjMzQxZS4u
YzBmNTE4MWJjNDRiMWJkY2ViYTY5YjhjYjZhMzRhOWVhMTI3ZGY2NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvRHVhbHNob2NrM0hJREdhbWVwYWQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL0R1YWxzaG9jazNISURH
YW1lcGFkLmNwcApAQCAtNDMsMTIgKzQzLDEwIEBAIER1YWxzaG9jazNISURHYW1lcGFkOjpEdWFs
c2hvY2szSElER2FtZXBhZChISUREZXZpY2UmJiBkZXZpY2UsIHVuc2lnbmVkIGluZGV4KQogCiAg
ICAgbV9tYXBwaW5nID0gc3RhbmRhcmRHYW1lcGFkTWFwcGluZ1N0cmluZygpOwogCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlN0YW5kYXJkR2FtZXBhZEJ1dHRvbnNXaXRoSG9t
ZUJ1dHRvbjsgKytpKQotICAgICAgICBtX2J1dHRvblZhbHVlcy5hcHBlbmQoMC4wKTsKKyAgICBt
X2J1dHRvblZhbHVlcyA9IFZlY3RvcihudW1iZXJPZlN0YW5kYXJkR2FtZXBhZEJ1dHRvbnNXaXRo
SG9tZUJ1dHRvbiwgU2hhcmVkR2FtZXBhZFZhbHVlIHsgMC4wIH0pOwogCi0gICAgc3RhdGljIGNv
bnN0IHNpemVfdCBheGlzQ291bnQgPSA0OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXhp
c0NvdW50OyArK2kpCi0gICAgICAgIG1fYXhpc1ZhbHVlcy5hcHBlbmQoMC4wKTsKKyAgICBjb25z
dGV4cHIgc2l6ZV90IGF4aXNDb3VudCA9IDQ7CisgICAgbV9heGlzVmFsdWVzID0gVmVjdG9yKGF4
aXNDb3VudCwgU2hhcmVkR2FtZXBhZFZhbHVlIHsgMC4wIH0pOwogCiAgICAgYXV0byBpbnB1dEVs
ZW1lbnRzID0gaGlkRGV2aWNlKCkudW5pcXVlSW5wdXRFbGVtZW50c0luRGV2aWNlVHJlZU9yZGVy
KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL0xv
Z2l0ZWNoR2FtZXBhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9M
b2dpdGVjaEdhbWVwYWQuY3BwCmluZGV4IDY3MTQzZmI5OTViYTJjM2U2OGRkMjExZDE2NWJlNjIw
Y2VmNzg5ZWYuLmZlNGNlZGM1MWQ2MzlmYjdiMWFlOTkzM2U1YzI2OTZjMzk3OGE4ZTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL0xvZ2l0ZWNoR2FtZXBh
ZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvTG9naXRlY2hH
YW1lcGFkLmNwcApAQCAtNDMsMTIgKzQzLDEwIEBAIExvZ2l0ZWNoR2FtZXBhZDo6TG9naXRlY2hH
YW1lcGFkKEhJRERldmljZSYmIGRldmljZSwgdW5zaWduZWQgaW5kZXgpCiAKICAgICBtX21hcHBp
bmcgPSBzdGFuZGFyZEdhbWVwYWRNYXBwaW5nU3RyaW5nKCk7CiAKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG51bWJlck9mU3RhbmRhcmRHYW1lcGFkQnV0dG9uc1dpdGhvdXRIb21lQnV0dG9u
OyArK2kpCi0gICAgICAgIG1fYnV0dG9uVmFsdWVzLmFwcGVuZCgwLjApOworICAgIG1fYnV0dG9u
VmFsdWVzID0gVmVjdG9yKG51bWJlck9mU3RhbmRhcmRHYW1lcGFkQnV0dG9uc1dpdGhvdXRIb21l
QnV0dG9uLCBTaGFyZWRHYW1lcGFkVmFsdWUgeyAwLjAgfSk7CiAKLSAgICBzdGF0aWMgY29uc3Qg
c2l6ZV90IGF4aXNDb3VudCA9IDQ7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBheGlzQ291
bnQ7ICsraSkKLSAgICAgICAgbV9heGlzVmFsdWVzLmFwcGVuZCgwLjApOworICAgIGNvbnN0ZXhw
ciBzaXplX3QgYXhpc0NvdW50ID0gNDsKKyAgICBtX2F4aXNWYWx1ZXMgPSBWZWN0b3IoYXhpc0Nv
dW50LCBTaGFyZWRHYW1lcGFkVmFsdWUgeyAwLjAgfSk7CiAKICAgICBhdXRvIGlucHV0RWxlbWVu
dHMgPSBoaWREZXZpY2UoKS51bmlxdWVJbnB1dEVsZW1lbnRzSW5EZXZpY2VUcmVlT3JkZXIoKTsK
IApAQCAtNTksMTEgKzU3LDEyIEBAIExvZ2l0ZWNoR2FtZXBhZDo6TG9naXRlY2hHYW1lcGFkKEhJ
RERldmljZSYmIGRldmljZSwgdW5zaWduZWQgaW5kZXgpCiAgICAgZm9yIChhdXRvJiBlbGVtZW50
IDogaW5wdXRFbGVtZW50cykgewogICAgICAgICBzd2l0Y2ggKGVsZW1lbnQuZnVsbFVzYWdlKCkp
IHsKICAgICAgICAgY2FzZSBoaWRIYXRzd2l0Y2hGdWxsVXNhZ2U6IHsKLSAgICAgICAgICAgIFZl
Y3RvcjxTaGFyZWRHYW1lcGFkVmFsdWU+IGhhdHN3aXRjaFZhbHVlczsKLSAgICAgICAgICAgIGhh
dHN3aXRjaFZhbHVlcy5hcHBlbmQobV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9u
Um9sZTo6TGVmdENsdXN0ZXJUb3BdKTsKLSAgICAgICAgICAgIGhhdHN3aXRjaFZhbHVlcy5hcHBl
bmQobV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJS
aWdodF0pOwotICAgICAgICAgICAgaGF0c3dpdGNoVmFsdWVzLmFwcGVuZChtX2J1dHRvblZhbHVl
c1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlckJvdHRvbV0pOwotICAgICAg
ICAgICAgaGF0c3dpdGNoVmFsdWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVw
YWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlckxlZnRdKTsKKyAgICAgICAgICAgIGF1dG8gaGF0c3dp
dGNoVmFsdWVzID0gVmVjdG9yIHsKKyAgICAgICAgICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6
ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlclRvcF0sCisgICAgICAgICAgICAgICAg
bV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJSaWdo
dF0sCisgICAgICAgICAgICAgICAgbV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9u
Um9sZTo6TGVmdENsdXN0ZXJCb3R0b21dLAorICAgICAgICAgICAgICAgIG1fYnV0dG9uVmFsdWVz
WyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyTGVmdF0KKyAgICAgICAgICAg
IH07CiAKICAgICAgICAgICAgIG1fZWxlbWVudE1hcC5zZXQoZWxlbWVudC5jb29raWUoKSwgbWFr
ZVVuaXF1ZTxISURHYW1lcGFkSGF0c3dpdGNoPihlbGVtZW50LCBXVEZNb3ZlKGhhdHN3aXRjaFZh
bHVlcykpKTsKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ2FtZXBhZC9tYWMvU3RhZGlhSElER2FtZXBhZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9TdGFkaWFISURHYW1lcGFkLmNwcAppbmRleCAwYTk0ZTU2
MjMzYTIwNDQ2NDFmMTAwZjA1NjQ0ZDU3NWFkYmM5ZTczLi40MjE1OTI3YzQ5NGMzZWVlNmMxMjUw
YWI1NTY0MWZhNzJhMjIwNjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
YW1lcGFkL21hYy9TdGFkaWFISURHYW1lcGFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9nYW1lcGFkL21hYy9TdGFkaWFISURHYW1lcGFkLmNwcApAQCAtNDEsMTIgKzQxLDEwIEBA
IFN0YWRpYUhJREdhbWVwYWQ6OlN0YWRpYUhJREdhbWVwYWQoSElERGV2aWNlJiYgZGV2aWNlLCB1
bnNpZ25lZCBpbmRleCkKIAogICAgIG1fbWFwcGluZyA9IHN0YW5kYXJkR2FtZXBhZE1hcHBpbmdT
dHJpbmcoKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTk7ICsraSkKLSAgICAgICAg
bV9idXR0b25WYWx1ZXMuYXBwZW5kKDAuMCk7CisgICAgbV9idXR0b25WYWx1ZXMgPSBWZWN0b3Io
MTksIFNoYXJlZEdhbWVwYWRWYWx1ZSB7IDAuMCB9KTsKIAotICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgYXhpc0NvdW50ID0gNDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF4aXNDb3VudDsg
KytpKQotICAgICAgICBtX2F4aXNWYWx1ZXMuYXBwZW5kKDAuMCk7CisgICAgY29uc3RleHByIHNp
emVfdCBheGlzQ291bnQgPSA0OworICAgIG1fYXhpc1ZhbHVlcyA9IFZlY3RvcihheGlzQ291bnQs
IFNoYXJlZEdhbWVwYWRWYWx1ZSB7IDAuMCB9KTsKIAogICAgIGF1dG8gaW5wdXRFbGVtZW50cyA9
IGhpZERldmljZSgpLnVuaXF1ZUlucHV0RWxlbWVudHNJbkRldmljZVRyZWVPcmRlcigpOwogCkBA
IC03MCwxMSArNjgsMTIgQEAgU3RhZGlhSElER2FtZXBhZDo6U3RhZGlhSElER2FtZXBhZChISURE
ZXZpY2UmJiBkZXZpY2UsIHVuc2lnbmVkIGluZGV4KQogICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgY2FzZSBoaWRIYXRzd2l0Y2hGdWxsVXNhZ2U6IHsKLSAgICAgICAgICAgIFZlY3RvcjxT
aGFyZWRHYW1lcGFkVmFsdWU+IGhhdHN3aXRjaFZhbHVlczsKLSAgICAgICAgICAgIGhhdHN3aXRj
aFZhbHVlcy5hcHBlbmQobV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6
TGVmdENsdXN0ZXJUb3BdKTsKLSAgICAgICAgICAgIGhhdHN3aXRjaFZhbHVlcy5hcHBlbmQobV9i
dXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJSaWdodF0p
OwotICAgICAgICAgICAgaGF0c3dpdGNoVmFsdWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1soc2l6
ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlckJvdHRvbV0pOwotICAgICAgICAgICAg
aGF0c3dpdGNoVmFsdWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0
b25Sb2xlOjpMZWZ0Q2x1c3RlckxlZnRdKTsKKyAgICAgICAgICAgIGF1dG8gaGF0c3dpdGNoVmFs
dWVzID0gVmVjdG9yIHsKKyAgICAgICAgICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdh
bWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlclRvcF0sCisgICAgICAgICAgICAgICAgbV9idXR0
b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJSaWdodF0sCisg
ICAgICAgICAgICAgICAgbV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6
TGVmdENsdXN0ZXJCb3R0b21dLAorICAgICAgICAgICAgICAgIG1fYnV0dG9uVmFsdWVzWyhzaXpl
X3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyTGVmdF0KKyAgICAgICAgICAgIH07CiAK
ICAgICAgICAgICAgIG1fZWxlbWVudE1hcC5zZXQoZWxlbWVudC5jb29raWUoKSwgbWFrZVVuaXF1
ZTxISURHYW1lcGFkSGF0c3dpdGNoPihlbGVtZW50LCBXVEZNb3ZlKGhhdHN3aXRjaFZhbHVlcykp
KTsKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAppbmRleCAxZmVlMjlhZTVmNzE5YzRlNTU0YTJjN2U3
MGNiNzBmMDFmOWIyMDAyLi43MjRmYjE3YzMzZjRiY2E0Njg4OWM4M2JjNTU4NDhmZDcyNzBjMzJm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xh
eWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xh
eWVyLmNwcApAQCAtNzYzLDExICs3NjMsOSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXI6OmFkZFJlcGFp
bnRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVwYWludFJlY3QpCiAgICAgRmxvYXRSZWN0IGxhcmdl
c3RSZXBhaW50UmVjdChGbG9hdFBvaW50KCksIG1fc2l6ZSk7CiAgICAgbGFyZ2VzdFJlcGFpbnRS
ZWN0LmludGVyc2VjdChyZXBhaW50UmVjdCk7CiAgICAgUmVwYWludE1hcDo6aXRlcmF0b3IgcmVw
YWludEl0ID0gcmVwYWludFJlY3RNYXAoKS5maW5kKHRoaXMpOwotICAgIGlmIChyZXBhaW50SXQg
PT0gcmVwYWludFJlY3RNYXAoKS5lbmQoKSkgewotICAgICAgICBWZWN0b3I8RmxvYXRSZWN0PiBy
ZXBhaW50UmVjdHM7Ci0gICAgICAgIHJlcGFpbnRSZWN0cy5hcHBlbmQobGFyZ2VzdFJlcGFpbnRS
ZWN0KTsKLSAgICAgICAgcmVwYWludFJlY3RNYXAoKS5zZXQodGhpcywgcmVwYWludFJlY3RzKTsK
LSAgICB9IGVsc2UgeworICAgIGlmIChyZXBhaW50SXQgPT0gcmVwYWludFJlY3RNYXAoKS5lbmQo
KSkKKyAgICAgICAgcmVwYWludFJlY3RNYXAoKS5zZXQodGhpcywgVmVjdG9yIHsgV1RGTW92ZShs
YXJnZXN0UmVwYWludFJlY3QpIH0pOworICAgIGVsc2UgewogICAgICAgICBWZWN0b3I8RmxvYXRS
ZWN0PiYgcmVwYWludFJlY3RzID0gcmVwYWludEl0LT52YWx1ZTsKICAgICAgICAgcmVwYWludFJl
Y3RzLmFwcGVuZChsYXJnZXN0UmVwYWludFJlY3QpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5jcHAKaW5kZXggYjk3OTlhNGQx
MDYxZWQyMGExYjUwZWQ1MDY4NjUxYzVmZWE0NjZhNC4uMWQwMDRmYzExNGFjYjcxNWIxMDUyNTkw
MzM2YjA2ZmNlYzMwMzA1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUGF0aFV0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUGF0aFV0aWxpdGllcy5jcHAKQEAgLTI5MCwxNyArMjkwLDE0IEBAIHN0YXRpYyBWZWN0
b3I8RmxvYXRQb2ludEdyYXBoOjpQb2x5Z29uPiBwb2x5Z29uc0ZvclJlY3QoY29uc3QgVmVjdG9y
PEZsb2F0UmVjdD4mCiAKIFZlY3RvcjxQYXRoPiBQYXRoVXRpbGl0aWVzOjpwYXRoc1dpdGhTaHJp
bmtXcmFwcGVkUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCByYWRp
dXMpCiB7Ci0gICAgVmVjdG9yPFBhdGg+IHBhdGhzOwotCiAgICAgaWYgKHJlY3RzLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIHBhdGhzOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgaWYg
KHJlY3RzLnNpemUoKSA+IDIwKSB7CiAgICAgICAgIFBhdGggcGF0aDsKICAgICAgICAgZm9yIChj
b25zdCBhdXRvJiByZWN0IDogcmVjdHMpCiAgICAgICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0
KHJlY3QsIEZsb2F0U2l6ZShyYWRpdXMsIHJhZGl1cykpOwotICAgICAgICBwYXRocy5hcHBlbmQo
cGF0aCk7Ci0gICAgICAgIHJldHVybiBwYXRoczsKKyAgICAgICAgcmV0dXJuIHsgV1RGTW92ZShw
YXRoKSB9OwogICAgIH0KIAogICAgIEZsb2F0UG9pbnRHcmFwaCBncmFwaDsKQEAgLTMwOSwxMCAr
MzA2LDExIEBAIFZlY3RvcjxQYXRoPiBQYXRoVXRpbGl0aWVzOjpwYXRoc1dpdGhTaHJpbmtXcmFw
cGVkUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mCiAgICAgICAgIFBhdGggcGF0aDsKICAg
ICAgICAgZm9yIChjb25zdCBhdXRvJiByZWN0IDogcmVjdHMpCiAgICAgICAgICAgICBwYXRoLmFk
ZFJvdW5kZWRSZWN0KHJlY3QsIEZsb2F0U2l6ZShyYWRpdXMsIHJhZGl1cykpOwotICAgICAgICBw
YXRocy5hcHBlbmQocGF0aCk7Ci0gICAgICAgIHJldHVybiBwYXRoczsKKyAgICAgICAgcmV0dXJu
IHsgV1RGTW92ZShwYXRoKSB9OwogICAgIH0KIAorICAgIFZlY3RvcjxQYXRoPiBwYXRoczsKKyAg
ICBwYXRocy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBvbHlzLnNpemUoKSk7CiAgICAgZm9yIChh
dXRvJiBwb2x5IDogcG9seXMpIHsKICAgICAgICAgUGF0aCBwYXRoOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcG9seS5zaXplKCk7ICsraSkgewpAQCAtMzQ0LDcgKzM0Miw3IEBA
IFZlY3RvcjxQYXRoPiBQYXRoVXRpbGl0aWVzOjpwYXRoc1dpdGhTaHJpbmtXcmFwcGVkUmVjdHMo
Y29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mCiAgICAgICAgICAgICBwYXRoLmFkZEFyY1RvKCpmcm9t
RWRnZS5zZWNvbmQsICp0b0VkZ2UuZmlyc3QgKyB0b09mZnNldCwgY2xhbXBlZFJhZGl1cyk7CiAg
ICAgICAgIH0KICAgICAgICAgcGF0aC5jbG9zZVN1YnBhdGgoKTsKLSAgICAgICAgcGF0aHMuYXBw
ZW5kKHBhdGgpOworICAgICAgICBwYXRocy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShwYXRoKSk7
CiAgICAgfQogICAgIHJldHVybiBwYXRoczsKIH0KQEAgLTU0MywxMyArNTQxLDE0IEBAIFBhdGgg
UGF0aFV0aWxpdGllczo6cGF0aFdpdGhTaHJpbmtXcmFwcGVkUmVjdHNGb3JPdXRsaW5lKGNvbnN0
IFZlY3RvcjxGbG9hdFJlY3Q+CiAgICAgYm90dG9tTGVmdFJhZGl1cyA9IGZpcnN0TGluZVJhZGlp
LmJvdHRvbUxlZnQoKTsKICAgICB0b3BSaWdodFJhZGl1cyA9IGxhc3RMaW5lUmFkaWkudG9wUmln
aHQoKTsKICAgICBib3R0b21SaWdodFJhZGl1cyA9IGxhc3RMaW5lUmFkaWkuYm90dG9tUmlnaHQo
KTsKLSAgICBWZWN0b3I8RmxvYXRQb2ludD4gY29ybmVyczsKICAgICAvLyBwaHlzaWNhbCB0b3BM
ZWZ0L3RvcFJpZ2h0L2JvdHRvbVJpZ2h0L2JvdHRvbUxlZnQKICAgICBhdXRvIGlzSG9yaXpvbnRh
bCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsKLSAgICBjb3JuZXJzLmFw
cGVuZChmaXJzdExpbmVSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotICAgIGNvcm5lcnMuYXBwZW5k
KGlzSG9yaXpvbnRhbCA/IGxhc3RMaW5lUmVjdC5tYXhYTWluWUNvcm5lcigpIDogZmlyc3RMaW5l
UmVjdC5tYXhYTWluWUNvcm5lcigpKTsKLSAgICBjb3JuZXJzLmFwcGVuZChsYXN0TGluZVJlY3Qu
bWF4WE1heFlDb3JuZXIoKSk7Ci0gICAgY29ybmVycy5hcHBlbmQoaXNIb3Jpem9udGFsID8gZmly
c3RMaW5lUmVjdC5taW5YTWF4WUNvcm5lcigpIDogbGFzdExpbmVSZWN0Lm1pblhNYXhZQ29ybmVy
KCkpOworICAgIGF1dG8gY29ybmVycyA9IFZlY3RvcjxGbG9hdFBvaW50Pjo6ZnJvbSgKKyAgICAg
ICAgZmlyc3RMaW5lUmVjdC5taW5YTWluWUNvcm5lcigpLAorICAgICAgICBpc0hvcml6b250YWwg
PyBsYXN0TGluZVJlY3QubWF4WE1pbllDb3JuZXIoKSA6IGZpcnN0TGluZVJlY3QubWF4WE1pbllD
b3JuZXIoKSwKKyAgICAgICAgbGFzdExpbmVSZWN0Lm1heFhNYXhZQ29ybmVyKCksCisgICAgICAg
IGlzSG9yaXpvbnRhbCA/IGZpcnN0TGluZVJlY3QubWluWE1heFlDb3JuZXIoKSA6IGxhc3RMaW5l
UmVjdC5taW5YTWF4WUNvcm5lcigpCisgICAgKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBwb2x5LnNpemUoKTsgKytpKSB7CiAgICAgICAgIGF1dG8gbW92ZU9yQWRkTGluZVRvID0g
W2ksICZwYXRoXSAoY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAK
aW5kZXggNTQ5OWYzN2E3ZjM2NDZiZDVmMzk1YTQ4YjA5ZDk0MTFkNGM5YjY2NC4uMDRjYmU0ZDI3
ZjE5MGI3YjI3YjljYTdlOThhOWM0NzE3M2QyZjg5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAKQEAgLTIx
NiwxMCArMjE2LDkgQEAgdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlOjpidWZmZXJlZFNhbXBsZXNG
b3JUcmFja0lkKGNvbnN0IEF0b21TdHJpbmcmIHRyYWNrSWQsIEMKICAgICBpZiAoIXRyYWNrQnVm
ZmVyKQogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogCi0gICAgVmVjdG9yPFN0cmlu
Zz4gc2FtcGxlRGVzY3JpcHRpb25zOwotICAgIGZvciAoYXV0byYgcGFpciA6IHRyYWNrQnVmZmVy
LT5zYW1wbGVzLmRlY29kZU9yZGVyKCkpCi0gICAgICAgIHNhbXBsZURlc2NyaXB0aW9ucy5hcHBl
bmQodG9TdHJpbmcoKnBhaXIuc2Vjb25kKSk7Ci0KKyAgICBhdXRvIHNhbXBsZURlc2NyaXB0aW9u
cyA9IFdURjo6bWFwKHRyYWNrQnVmZmVyLT5zYW1wbGVzLmRlY29kZU9yZGVyKCksIFtdKGF1dG8m
IGVudHJ5KSB7CisgICAgICAgIHJldHVybiB0b1N0cmluZygqZW50cnkuc2Vjb25kKTsKKyAgICB9
KTsKICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHNhbXBsZURlc2NyaXB0aW9ucykpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcAppbmRleCA4YjA0
ZjliZTk2YzM2ZTBhMjYyMTgwYTI1ZWEzNzQ1OTYyYjNkN2Q1Li5jNTQ2MTQ2MjNiODdlYzA4OTYx
ZjFkNDQyMGY5NjAxZjE2YTZhYjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0
cmVhbWluZy5jcHAKQEAgLTIwMSw5ICsyMDEsNyBAQCBSZWZQdHI8RnJhZ21lbnRlZFNoYXJlZEJ1
ZmZlcj4gQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpzYW5pdGl6ZVNrZChjb25zdCBGcgog
c3RkOjpvcHRpb25hbDxWZWN0b3I8UmVmPEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+Pj4gQ0RNUHJp
dmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpleHRyYWN0S2V5SURzU2tkKGNvbnN0IEZyYWdtZW50ZWRT
aGFyZWRCdWZmZXImIGJ1ZmZlcikKIHsKICAgICAvLyBJbiB0aGUgJ3NrZCcgc2NoZW1lLCB0aGUg
aW5pdCBkYXRhIGlzIHRoZSBrZXkgSUQuCi0gICAgVmVjdG9yPFJlZjxGcmFnbWVudGVkU2hhcmVk
QnVmZmVyPj4ga2V5SURzOwotICAgIGtleUlEcy5hcHBlbmQoYnVmZmVyLmNvcHkoKSk7Ci0gICAg
cmV0dXJuIGtleUlEczsKKyAgICByZXR1cm4gVmVjdG9yIHsgYnVmZmVyLmNvcHkoKSB9OwogfQog
CiBzdGF0aWMgY29uc3QgTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoU2V0PEF0
b21TdHJpbmc+JiB2YWxpZEluaXREYXRhVHlwZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxh
eVN0cmVhbWluZ0FWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQpp
bmRleCBkNjM2MTJmYWEwNTM3MGEwMzk3M2ExZTJkNTZjMTg2OGEyZjk5MTYwLi45NjI1ZmE5NTAz
ZTdiZWJjNzE5ZmM0YjM3YTYzYzM4ZDc0NTAzMDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5
U3RyZWFtaW5nQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5t
bQpAQCAtMTQ5NCw3ICsxNDk0LDcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0
cmVhbWluZ0FWRk9iakM6OnVwZGF0ZUtleVN0YXR1c2VzKHN0ZDo6b3B0aW9uYWwKICAgICAgICAg
fQogICAgIH0KIAotICAgIG1fa2V5U3RhdHVzZXMuc3dhcChrZXlTdGF0dXNlcyk7CisgICAgbV9r
ZXlTdGF0dXNlcyA9IFdURk1vdmUoa2V5U3RhdHVzZXMpOwogCiAgICAgbV9pbnN0YW5jZS0+c2Vz
c2lvbktleVN0YXR1c2VzQ2hhbmdlZCgqdGhpcyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9JbWFnZURlY29kZXJBVkZP
YmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvSW1hZ2VEZWNvZGVyQVZGT2JqQy5tbQppbmRleCA1NjNhZjE5MjRkOWFmMzU5ZTkzMGVmNjRi
YWUzMjNmYzA0MWRlODdhLi5hZDdmNDUxMDFjMDZhMTg4OGMwMDhmYWVkNGE5MTkwNTYxMzgyOTNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVjb2RlckFWRk9iakMubW0KQEAg
LTUzNSwxMyArNTM1LDEwIEBAIFZlY3RvcjxJbWFnZURlY29kZXI6OkZyYW1lSW5mbz4gSW1hZ2VE
ZWNvZGVyQVZGT2JqQzo6ZnJhbWVJbmZvcygpIGNvbnN0CiAgICAgaWYgKG1fc2FtcGxlRGF0YS5l
bXB0eSgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgVmVjdG9yPEltYWdlRGVjb2Rlcjo6
RnJhbWVJbmZvPiBpbmZvczsKLSAgICBmb3IgKGF1dG8mIHNhbXBsZSA6IG1fc2FtcGxlRGF0YS5w
cmVzZW50YXRpb25PcmRlcigpKSB7CisgICAgcmV0dXJuIFdURjo6bWFwKG1fc2FtcGxlRGF0YS5w
cmVzZW50YXRpb25PcmRlcigpLCBbXShhdXRvJiBzYW1wbGUpIHsKICAgICAgICAgYXV0byogaW1h
Z2VTYW1wbGUgPSAoSW1hZ2VEZWNvZGVyQVZGT2JqQ1NhbXBsZSopc2FtcGxlLnNlY29uZC5nZXQo
KTsKLSAgICAgICAgaW5mb3MuYXBwZW5kKHsgaW1hZ2VTYW1wbGUtPmhhc0FscGhhKCksIFNlY29u
ZHMoaW1hZ2VTYW1wbGUtPmR1cmF0aW9uKCkudG9Eb3VibGUoKSl9KTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gaW5mb3M7CisgICAgICAgIHJldHVybiBJbWFnZURlY29kZXI6OkZyYW1lSW5mbyB7IGlt
YWdlU2FtcGxlLT5oYXNBbHBoYSgpLCBTZWNvbmRzKGltYWdlU2FtcGxlLT5kdXJhdGlvbigpLnRv
RG91YmxlKCkpIH07CisgICAgfSk7CiB9CiAKIGJvb2wgSW1hZ2VEZWNvZGVyQVZGT2JqQzo6ZnJh
bWVBbGxvd1N1YnNhbXBsaW5nQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3Vy
Y2VCdWZmZXJQYXJzZXJBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUGFyc2VyQVZGT2JqQy5tbQppbmRleCBh
YTE1ODQwNGIxMGU0NDRhZjZlNWVkZGM4ZGFkNmJhOTZlZDVjYjIyLi5lNjFiMTQ3ZjYzYzVmNDU3
Mjc1ZjYwNTAzZTM3YThiNTJkMThlM2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQYXJzZXJBVkZPYmpD
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL1NvdXJjZUJ1ZmZlclBhcnNlckFWRk9iakMubW0KQEAgLTI5NywxNiArMjk3LDE0IEBAIHZv
aWQgU291cmNlQnVmZmVyUGFyc2VyQVZGT2JqQzo6ZGlkUGFyc2VTdHJlYW1EYXRhQXNBc3NldChB
VkFzc2V0KiBhc3NldCkKIAogICAgICAgICAgICAgaWYgKFt0cmFjayBoYXNNZWRpYUNoYXJhY3Rl
cmlzdGljOkFWTWVkaWFDaGFyYWN0ZXJpc3RpY1Zpc3VhbF0pIHsKICAgICAgICAgICAgICAgICBT
b3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQ6OlZpZGVvVHJh
Y2tJbmZvcm1hdGlvbiBpbmZvOwotICAgICAgICAgICAgICAgIGF1dG8gdmlkZW9UcmFjayA9IFZp
ZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjcmVhdGUodHJhY2spOwotICAgICAg
ICAgICAgICAgIGluZm8udHJhY2sgPSB2aWRlb1RyYWNrLmNvcHlSZWYoKTsKKyAgICAgICAgICAg
ICAgICBpbmZvLnRyYWNrID0gVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmNy
ZWF0ZSh0cmFjayk7CiAgICAgICAgICAgICAgICAgaW5mby5kZXNjcmlwdGlvbiA9IE1lZGlhRGVz
Y3JpcHRpb25BVkZPYmpDOjpjcmVhdGUodHJhY2spOwotICAgICAgICAgICAgICAgIHNlZ21lbnQu
dmlkZW9UcmFja3MuYXBwZW5kKGluZm8pOworICAgICAgICAgICAgICAgIHNlZ21lbnQudmlkZW9U
cmFja3MuYXBwZW5kKFdURk1vdmUoaW5mbykpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChbdHJh
Y2sgaGFzTWVkaWFDaGFyYWN0ZXJpc3RpYzpBVk1lZGlhQ2hhcmFjdGVyaXN0aWNBdWRpYmxlXSkg
ewogICAgICAgICAgICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0
aW9uU2VnbWVudDo6QXVkaW9UcmFja0luZm9ybWF0aW9uIGluZm87Ci0gICAgICAgICAgICAgICAg
YXV0byBhdWRpb1RyYWNrID0gQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmNy
ZWF0ZSh0cmFjayk7Ci0gICAgICAgICAgICAgICAgaW5mby50cmFjayA9IGF1ZGlvVHJhY2suY29w
eVJlZigpOworICAgICAgICAgICAgICAgIGluZm8udHJhY2sgPSBBdWRpb1RyYWNrUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQzo6Y3JlYXRlKHRyYWNrKTsKICAgICAgICAgICAgICAgICBpbmZvLmRl
c2NyaXB0aW9uID0gTWVkaWFEZXNjcmlwdGlvbkFWRk9iakM6OmNyZWF0ZSh0cmFjayk7Ci0gICAg
ICAgICAgICAgICAgc2VnbWVudC5hdWRpb1RyYWNrcy5hcHBlbmQoaW5mbyk7CisgICAgICAgICAg
ICAgICAgc2VnbWVudC5hdWRpb1RyYWNrcy5hcHBlbmQoV1RGTW92ZShpbmZvKSk7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIC8vIEZJWE1FKDEyNTE2MSkgICAgOiBBZGQgVGV4dFRyYWNr
IHN1cHBvcnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQppbmRleCA4NTQyMWUzZGU3MDlj
ZTE1OWM0OTRiNDBmYjhkMWFkMjM1OTNjM2JiLi5jYjJkMGJlODk3MDQ2YjdmZjlmMzI3NmM5NzY3
OWFmYjRmMDEyYWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCkBAIC02OCwxMSAr
NjgsMTAgQEAgVmVjdG9yPEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRWYXJpYXRpb25BeGlzPiBGb250
UGxhdGZvcm1EYXRhOjp2YXJpYXRpb25BeGVzKFNob3UKICAgICBpZiAoIXBsYXRmb3JtRm9udCkK
ICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAKLSAgICBWZWN0b3I8Rm9udFZhcmlhdGlvbkF4aXM+
IHJlc3VsdHM7Ci0gICAgZm9yIChhdXRvJiBbdGFnLCB2YWx1ZXNdIDogZGVmYXVsdFZhcmlhdGlv
blZhbHVlcyhwbGF0Zm9ybUZvbnQsIHNob3VsZExvY2FsaXplQXhpc05hbWVzKSkKLSAgICAgICAg
cmVzdWx0cy5hcHBlbmQoRm9udFBsYXRmb3JtRGF0YTo6Rm9udFZhcmlhdGlvbkF4aXModmFsdWVz
LmF4aXNOYW1lLCBTdHJpbmcodGFnLmRhdGEoKSwgdGFnLnNpemUoKSksIHZhbHVlcy5kZWZhdWx0
VmFsdWUsIHZhbHVlcy5taW5pbXVtVmFsdWUsIHZhbHVlcy5tYXhpbXVtVmFsdWUpKTsKLSAgICAK
LSAgICByZXR1cm4gcmVzdWx0czsKKyAgICByZXR1cm4gV1RGOjptYXAoZGVmYXVsdFZhcmlhdGlv
blZhbHVlcyhwbGF0Zm9ybUZvbnQsIHNob3VsZExvY2FsaXplQXhpc05hbWVzKSwgW10oYXV0byYm
IGVudHJ5KSB7CisgICAgICAgIGF1dG8mIFt0YWcsIHZhbHVlc10gPSBlbnRyeTsKKyAgICAgICAg
cmV0dXJuIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRWYXJpYXRpb25BeGlzIHsgdmFsdWVzLmF4aXNO
YW1lLCBTdHJpbmcodGFnLmRhdGEoKSwgdGFnLnNpemUoKSksIHZhbHVlcy5kZWZhdWx0VmFsdWUs
IHZhbHVlcy5taW5pbXVtVmFsdWUsIHZhbHVlcy5tYXhpbXVtVmFsdWUgfTsKKyAgICB9KTsKIH0K
IAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1h
Yy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCmluZGV4
IGJhOGVhMWViNDQ4YTkyMWUzMGQzYWU2YTljNzdlODgyMzNhYmM1M2IuLmEyYzI1MGFhMmJlZjhk
ZTk2NGJhZjA5MjQwZDVlMGVjNDE1MGVmODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9QYXN0ZWJvYXJkTWFjLm1tCkBAIC03MDIsMTAgKzcwMiw3IEBAIEFMTE9XX0RFUFJFQ0FU
RURfREVDTEFSQVRJT05TX0JFR0lOCiAgICAgICAgIE5TVVJMICp1cmwgPSBbTlNVUkwgVVJMV2l0
aFN0cmluZzpjb2NvYURhdGFdOwogICAgICAgICBpZiAoW3VybCBpc0ZpbGVVUkxdKQogICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwotICAgICAgICB0
eXBlcy5hcHBlbmQoY29jb2FUeXBlKTsKLSAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBh
c3RlYm9hcmRTdHJhdGVneSgpLT5zZXRUeXBlcyh0eXBlcywgbV9wYXN0ZWJvYXJkTmFtZSwgY29u
dGV4dCgpKTsKKyAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVn
eSgpLT5zZXRUeXBlcyh7IGNvY29hVHlwZSB9LCBtX3Bhc3RlYm9hcmROYW1lLCBjb250ZXh0KCkp
OwogICAgICAgICBtX2NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9h
cmRTdHJhdGVneSgpLT5zZXRTdHJpbmdGb3JUeXBlKGNvY29hRGF0YSwgY29jb2FUeXBlLCBtX3Bh
c3RlYm9hcmROYW1lLCBjb250ZXh0KCkpOwogCiAgICAgICAgIHJldHVybjsKQEAgLTcxNCw5ICs3
MTEsNyBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIAogICAgIGlmICghY29j
b2FUeXBlLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBldmVyeXRoaW5nIGVsc2Ugd2Uga25vdyBv
ZiBnb2VzIG9uIHRoZSBwYm9hcmQgYXMgYSBzdHJpbmcKLSAgICAgICAgVmVjdG9yPFN0cmluZz4g
dHlwZXM7Ci0gICAgICAgIHR5cGVzLmFwcGVuZChjb2NvYVR5cGUpOwotICAgICAgICBwbGF0Zm9y
bVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmFkZFR5cGVzKHR5cGVzLCBtX3Bh
c3RlYm9hcmROYW1lLCBjb250ZXh0KCkpOworICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+
cGFzdGVib2FyZFN0cmF0ZWd5KCktPmFkZFR5cGVzKHsgY29jb2FUeXBlIH0sIG1fcGFzdGVib2Fy
ZE5hbWUsIGNvbnRleHQoKSk7CiAgICAgICAgIG1fY2hhbmdlQ291bnQgPSBwbGF0Zm9ybVN0cmF0
ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFN0cmluZ0ZvclR5cGUoY29jb2FEYXRh
LCBjb2NvYVR5cGUsIG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQoKSk7CiAgICAgfQogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVWaWRl
b0NhcHR1cmVTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
UmVhbHRpbWVWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCmluZGV4IDNlM2Y0MWExYzU4MDdlNmNkMzU5
ZGUzZGYyNmFlNzJkNTUxY2Q1ODIuLjc3ZDMyNjY1NmQ1Y2JjNWFlZmNkNDE3YTE3YTg3YTQ2Zjcx
MjI3YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1Jl
YWx0aW1lVmlkZW9DYXB0dXJlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9SZWFsdGltZVZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAKQEAgLTc1LDExICs3
NSw5IEBAIFZlY3RvcjxWaWRlb1ByZXNldERhdGE+IFJlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNl
OjpwcmVzZXRzRGF0YSgpCiAKIHZvaWQgUmVhbHRpbWVWaWRlb0NhcHR1cmVTb3VyY2U6OnNldFN1
cHBvcnRlZFByZXNldHMoVmVjdG9yPFZpZGVvUHJlc2V0RGF0YT4mJiBwcmVzZXREYXRhKQogewot
ICAgIFZlY3RvcjxSZWY8VmlkZW9QcmVzZXQ+PiBwcmVzZXRzOwotCi0gICAgZm9yIChhdXRvJiBk
YXRhIDogcHJlc2V0RGF0YSkKLSAgICAgICAgcHJlc2V0cy5hcHBlbmQoVmlkZW9QcmVzZXQ6OmNy
ZWF0ZShXVEZNb3ZlKGRhdGEpKSk7Ci0KKyAgICBhdXRvIHByZXNldHMgPSBXVEY6Om1hcChXVEZN
b3ZlKHByZXNldERhdGEpLCBbXShhdXRvJiYgZGF0YSkgeworICAgICAgICByZXR1cm4gVmlkZW9Q
cmVzZXQ6OmNyZWF0ZShXVEZNb3ZlKGRhdGEpKTsKKyAgICB9KTsKICAgICBzZXRTdXBwb3J0ZWRQ
cmVzZXRzKFdURk1vdmUocHJlc2V0cykpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcAppbmRleCA2N2E3NjI5NWQ4NWYz
OTFjODNiMjQwMGU2ZDFmZTU3OWNjZGVkODhmLi42MjM2MzZhYzJhYmQ2ODM4NDE0ZGM4ZjFmOTI2
Y2VkNWM0N2NjYTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0Jsb2JSZWdpc3RyeUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKQEAgLTE0MSwxMCArMTQxLDggQEAgdm9pZCBCbG9iUmVn
aXN0cnlJbXBsOjpyZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiB1cmwsIFZlY3RvcjxCbG9iUGFy
dD4mJiBibG9iUGEKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
QmxvYlBhcnQ6OlR5cGU6OkJsb2I6IHsKLSAgICAgICAgICAgIGlmIChhdXRvIGJsb2IgPSBtX2Js
b2JzLmdldChwYXJ0LnVybCgpLnN0cmluZygpKSkgewotICAgICAgICAgICAgICAgIGZvciAoY29u
c3QgQmxvYkRhdGFJdGVtJiBpdGVtIDogYmxvYi0+aXRlbXMoKSkKLSAgICAgICAgICAgICAgICAg
ICAgYmxvYkRhdGEtPm1faXRlbXMuYXBwZW5kKGl0ZW0pOwotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGF1dG8gYmxvYiA9IG1fYmxvYnMuZ2V0KHBhcnQudXJsKCkuc3RyaW5nKCkpKQor
ICAgICAgICAgICAgICAgIGJsb2JEYXRhLT5tX2l0ZW1zLmFwcGVuZFZlY3RvcihibG9iLT5pdGVt
cygpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIH0KQEAgLTMyOCw3
ICszMjYsNyBAQCB2b2lkIEJsb2JSZWdpc3RyeUltcGw6OndyaXRlQmxvYnNUb1RlbXBvcmFyeUZp
bGVzRm9ySW5kZXhlZERCKGNvbnN0IFZlY3RvcjxTdHJpbgogICAgICAgICAgICAgICAgIGZpbGVQ
YXRocy5jbGVhcigpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZmlsZVBhdGhzLmFwcGVuZCh0ZW1wRmlsZVBhdGguaXNvbGF0ZWRDb3B5KCkpOwor
ICAgICAgICAgICAgZmlsZVBhdGhzLmFwcGVuZChXVEZNb3ZlKHRlbXBGaWxlUGF0aCkuaXNvbGF0
ZWRDb3B5KCkpOwogICAgICAgICB9CiAKICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgZmlsZVBhdGhzID0gV1RG
TW92ZShmaWxlUGF0aHMpXSAoKSBtdXRhYmxlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IDg1MzBlMzM1NWYyZDZiOGQ3ZmZi
NmVkZjgzZDYwOGJjYTRiOWY1NTUuLjlhYjk5OGU0MWNiMDhjZjBiNmY5MGYxMGYxM2M0Yjg0NTdl
YzkzOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2Rl
bE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcApAQCAtMjA4NiwxMCArMjA4Niw4IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OmRyYXdCb3hTaWRlRnJvbVBhdGgoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQs
CiAgICAgICAgICAgICAgICAgZ2FwTGVuZ3RoICs9IChkYXNoTGVuZ3RoICAvIG51bWJlck9mR2Fw
cyk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIERhc2hBcnJheSBsaW5lRGFzaDsKLSAg
ICAgICAgICAgIGxpbmVEYXNoLmFwcGVuZChkYXNoTGVuZ3RoKTsKLSAgICAgICAgICAgIGxpbmVE
YXNoLmFwcGVuZChnYXBMZW5ndGgpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldExp
bmVEYXNoKGxpbmVEYXNoLCBkYXNoTGVuZ3RoKTsKKyAgICAgICAgICAgIGF1dG8gbGluZURhc2gg
PSBEYXNoQXJyYXk6OmZyb20oZGFzaExlbmd0aCwgZ2FwTGVuZ3RoKTsKKyAgICAgICAgICAgIGdy
YXBoaWNzQ29udGV4dC5zZXRMaW5lRGFzaChXVEZNb3ZlKGxpbmVEYXNoKSwgZGFzaExlbmd0aCk7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBzdHJva2luZyB0aGUgYm9y
ZGVyIHBhdGggY2F1c2VzIGlzc3VlcyB3aXRoIHRpZ2h0IGNvcm5lcnM6CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IGRhOGRmMmU5MjNi
MzU0NmUwZjNkNGM1YjMwNWVmZTY1NDA3ZTc4NjEuLjQyNWM2OWMzMTQxYmY3NGZhNTcyZGYyMGJi
OGEwZTQwNTc3YWI4MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwCkBAIC0xOTU2LDkgKzE5NTYsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFj
a2luZzo6Y29ubmVjdENsaXBwaW5nU3RhY2tMYXllcnMoTGF5ZXJBbmNlc3RvckNsaXBwaW5nU3Rh
Y2smCiAgICAgYXV0byYgY2xpcHBpbmdFbnRyeVN0YWNrID0gY2xpcHBpbmdTdGFjay5zdGFjaygp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjbGlwcGluZ0VudHJ5U3RhY2suc2l6ZSgp
IC0gMTsgKytpKSB7CiAgICAgICAgIGF1dG8mIGVudHJ5ID0gY2xpcHBpbmdFbnRyeVN0YWNrLmF0
KGkpOwotICAgICAgICBWZWN0b3I8UmVmPEdyYXBoaWNzTGF5ZXI+PiBjaGlsZHJlbjsKLSAgICAg
ICAgY2hpbGRyZW4uYXBwZW5kKCpjbGlwcGluZ0VudHJ5U3RhY2suYXQoaSArIDEpLmNsaXBwaW5n
TGF5ZXIpOwotICAgICAgICBlbnRyeS5jbGlwcGluZ0xheWVyLT5zZXRDaGlsZHJlbihXVEZNb3Zl
KGNoaWxkcmVuKSk7CisgICAgICAgIGVudHJ5LmNsaXBwaW5nTGF5ZXItPnNldENoaWxkcmVuKHsg
UmVmIHsgKmNsaXBwaW5nRW50cnlTdGFjay5hdChpICsgMSkuY2xpcHBpbmdMYXllciB9IH0pOwog
ICAgIH0KIAogICAgIGNsaXBwaW5nRW50cnlTdGFjay5sYXN0KCkuY2xpcHBpbmdMYXllci0+cmVt
b3ZlQWxsQ2hpbGRyZW4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXggZDM5NTE1MGU0NjQyMTE1NTFkOGI4ZGY5NzZlYWFk
ZTZiN2Y0NzdmMS4uYjA0YjczYjQwMjFlOTMxYjAzN2U4NjRhZDhiY2MwMzQ1ZDJlNjQ4YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5j
cHAKQEAgLTE0OTEsOSArMTQ5MSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphZGp1
c3RPdmVyZmxvd1Njcm9sbGJhckNvbnRhaW5lckxheWVycyhSZW5kZXJMYXllciYKICAgICAgICAg
ICAgIG92ZXJmbG93QmFja2luZy0+ZW5zdXJlT3ZlcmZsb3dDb250cm9sc0hvc3RMYXllckFuY2Vz
dG9yQ2xpcHBpbmdTdGFjaygmc3RhY2tpbmdDb250ZXh0TGF5ZXIpOwogCiAgICAgICAgIGlmIChh
dXRvKiBvdmVyZmxvd0NvbnRyb2xzQW5jZXN0b3JDbGlwcGluZ1N0YWNrID0gb3ZlcmZsb3dCYWNr
aW5nLT5vdmVyZmxvd0NvbnRyb2xzSG9zdExheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrKCkpIHsK
LSAgICAgICAgICAgIFZlY3RvcjxSZWY8R3JhcGhpY3NMYXllcj4+IGNoaWxkcmVuOwotICAgICAg
ICAgICAgY2hpbGRyZW4uYXBwZW5kKCpvdmVyZmxvd0NvbnRhaW5lckxheWVyKTsKLSAgICAgICAg
ICAgIG92ZXJmbG93Q29udHJvbHNBbmNlc3RvckNsaXBwaW5nU3RhY2stPmxhc3RDbGlwcGluZ0xh
eWVyKCktPnNldENoaWxkcmVuKFdURk1vdmUoY2hpbGRyZW4pKTsKKyAgICAgICAgICAgIG92ZXJm
bG93Q29udHJvbHNBbmNlc3RvckNsaXBwaW5nU3RhY2stPmxhc3RDbGlwcGluZ0xheWVyKCktPnNl
dENoaWxkcmVuKHsgUmVmIHsgKm92ZXJmbG93Q29udGFpbmVyTGF5ZXIgfSB9KTsKICAgICAgICAg
ICAgIG92ZXJmbG93Q29udGFpbmVyTGF5ZXIgPSBvdmVyZmxvd0NvbnRyb2xzQW5jZXN0b3JDbGlw
cGluZ1N0YWNrLT5maXJzdENsaXBwaW5nTGF5ZXIoKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KaW5kZXggOWUxMDhmOGI0ZmYyNjE3OTY4
OTY0ZmExMzcwMTUxOWJiYzI0NTJjNC4uODc2NjdkZTJkZWQyOTVkOTM1ODAyYjMzODkyYTBjMzIx
YzdlMzJlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQpA
QCAtMjczMSwxMCArMjczMSw5IEBAIHN0YXRpYyB2b2lkIHBhaW50QXR0YWNobWVudFRpdGxlQmFj
a2dyb3VuZChjb25zdCBSZW5kZXJBdHRhY2htZW50JiBhdHRhY2htZW50LCBHCiAgICAgaWYgKGxh
eW91dC5saW5lcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxGbG9h
dFJlY3Q+IGJhY2tncm91bmRSZWN0czsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5
b3V0LmxpbmVzLnNpemUoKTsgKytpKQotICAgICAgICBiYWNrZ3JvdW5kUmVjdHMuYXBwZW5kKGxh
eW91dC5saW5lc1tpXS5iYWNrZ3JvdW5kUmVjdCk7CisgICAgYXV0byBiYWNrZ3JvdW5kUmVjdHMg
PSBsYXlvdXQubGluZXMubWFwKFtdKGF1dG8mIGxpbmUpIHsKKyAgICAgICAgcmV0dXJuIGxpbmUu
YmFja2dyb3VuZFJlY3Q7CisgICAgfSk7CiAKICAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3I7CiAg
ICAgaWYgKGF0dGFjaG1lbnQuZnJhbWUoKS5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUo
KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJU
cmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJl
ZUFzVGV4dC5jcHAKaW5kZXggZmU1NTliZDcwYjFkMGNmNGIxYzVhNWIxYzkwYTI5NjM1ZThiMjcz
MS4uOTI3NmI5M2M3MzEyNjFjMWYyZmZiZWM0OWYxZWNjZTczY2ExYmI1YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCkBA
IC0xOTcsMTEgKzE5Nyw5IEBAIHN0YXRpYyB2b2lkIHdyaXRlU1ZHU3Ryb2tlUGFpbnRpbmdSZXNv
dXJjZShUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyRWxlbWVudCYKICAgICBTVkdMZW5ndGhD
b250ZXh0IGxlbmd0aENvbnRleHQoJnNoYXBlKTsKICAgICBkb3VibGUgZGFzaE9mZnNldCA9IGxl
bmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3ZnU3R5bGUuc3Ryb2tlRGFzaE9mZnNldCgpKTsK
ICAgICBkb3VibGUgc3Ryb2tlV2lkdGggPSBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN0
eWxlLnN0cm9rZVdpZHRoKCkpOwotICAgIGNvbnN0IGF1dG8mIGRhc2hlcyA9IHN2Z1N0eWxlLnN0
cm9rZURhc2hBcnJheSgpOwotCi0gICAgRGFzaEFycmF5IGRhc2hBcnJheTsKLSAgICBmb3IgKGF1
dG8mIGxlbmd0aCA6IGRhc2hlcykKLSAgICAgICAgZGFzaEFycmF5LmFwcGVuZChsZW5ndGgudmFs
dWUobGVuZ3RoQ29udGV4dCkpOworICAgIGF1dG8gZGFzaEFycmF5ID0gc3ZnU3R5bGUuc3Ryb2tl
RGFzaEFycmF5KCkubWFwKFsmXShhdXRvJiBsZW5ndGgpIC0+IERhc2hBcnJheUVsZW1lbnQgewor
ICAgICAgICByZXR1cm4gbGVuZ3RoLnZhbHVlKGxlbmd0aENvbnRleHQpOworICAgIH0pOwogCiAg
ICAgd3JpdGVJZk5vdERlZmF1bHQodHMsICJvcGFjaXR5Iiwgc3ZnU3R5bGUuc3Ryb2tlT3BhY2l0
eSgpLCAxLjBmKTsKICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgInN0cm9rZSB3aWR0aCIsIHN0
cm9rZVdpZHRoLCAxLjApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0Q2h1bmsuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
Q2h1bmsuY3BwCmluZGV4IGE2M2ViODBhNzc5ZDc3NjhkYTQ3NzJiYjBkNmFmZTE5ZTM1MjFiYmQu
Ljg0ODEzNmM4YTUzOGM2ZWM4ZWNjMTZkNWJmMDFiZmRlMmRkYjM5MTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5jcHAKQEAgLTcwLDggKzcwLDcgQEAg
U1ZHVGV4dENodW5rOjpTVkdUZXh0Q2h1bmsoY29uc3QgVmVjdG9yPFNWR0lubGluZVRleHRCb3gq
PiYgbGluZUxheW91dEJveGVzLCB1bnMKICAgICAgICAgfQogICAgIH0KIAotICAgIGZvciAodW5z
aWduZWQgaSA9IGZpcnN0OyBpIDwgbGltaXQ7ICsraSkKLSAgICAgICAgbV9ib3hlcy5hcHBlbmQo
bGluZUxheW91dEJveGVzW2ldKTsKKyAgICBtX2JveGVzLmFwcGVuZCgmbGluZUxheW91dEJveGVz
W2ZpcnN0XSwgbGltaXQgLSBmaXJzdCk7CiB9CiAKIHVuc2lnbmVkIFNWR1RleHRDaHVuazo6dG90
YWxDaGFyYWN0ZXJzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Bh
Z2VSdWxlQ29sbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29sbGVj
dG9yLmNwcAppbmRleCAyMjk5ZjhjNjM3OWI1MDk0OTJhMWExZmZhNTIzMDZhMWFhMTY4OWI0Li5l
M2RjM2VmYmMyOWI2M2Q3NTIxNDlkYWNiMTEzMWZmYTUyYWNjOTQxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwCkBAIC04NCw4ICs4NCw5IEBAIHZvaWQgUGFn
ZVJ1bGVDb2xsZWN0b3I6Om1hdGNoUGFnZVJ1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBib29sIGlzTGVm
dFBhZ2UsIGJvb2wgaXNGCiAKICAgICBzdGQ6OnN0YWJsZV9zb3J0KG1hdGNoZWRQYWdlUnVsZXMu
YmVnaW4oKSwgbWF0Y2hlZFBhZ2VSdWxlcy5lbmQoKSwgY29tcGFyZVBhZ2VSdWxlcyk7CiAKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hlZFBhZ2VSdWxlcy5zaXplKCk7IGkrKykK
LSAgICAgICAgbV9yZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zLmFwcGVuZCh7ICZtYXRjaGVkUGFn
ZVJ1bGVzW2ldLT5wcm9wZXJ0aWVzKCkgfSk7CisgICAgbV9yZXN1bHQuYXV0aG9yRGVjbGFyYXRp
b25zLnJlc2VydmVDYXBhY2l0eShtX3Jlc3VsdC5hdXRob3JEZWNsYXJhdGlvbnMuc2l6ZSgpICsg
bWF0Y2hlZFBhZ2VSdWxlcy5zaXplKCkpOworICAgIGZvciAoYXV0byogcGFnZVJ1bGUgOiBtYXRj
aGVkUGFnZVJ1bGVzKQorICAgICAgICBtX3Jlc3VsdC5hdXRob3JEZWNsYXJhdGlvbnMudW5jaGVj
a2VkQXBwZW5kKHsgJnBhZ2VSdWxlLT5wcm9wZXJ0aWVzKCkgfSk7CiB9CiAKIHN0YXRpYyBib29s
IGNoZWNrUGFnZVNlbGVjdG9yQ29tcG9uZW50cyhjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3Is
IGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFt
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcAppbmRleCBjYjQ0MGFjOTY2
MDUwMDFkODg5MzE3NGVlMzFlZDk4ZDVlMjJhN2NmLi4wNTFkYTFkZDhmYTE2N2IxOWExMjBjN2Iz
ZjlhZDg1MmNmOWYwYmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0
QnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3Bw
CkBAIC0zNzgsOCArMzc4LDkgQEAgdm9pZCBSdWxlU2V0QnVpbGRlcjo6TWVkaWFRdWVyeUNvbGxl
Y3Rvcjo6cG9wKGNvbnN0IE1lZGlhUXVlcnlTZXQqIHNldCkKIAogICAgIGlmICghZHluYW1pY0Nv
bnRleHRTdGFjay5sYXN0KCkuYWZmZWN0ZWRSdWxlUG9zaXRpb25zLmlzRW1wdHkoKSB8fCAhY29s
bGVjdER5bmFtaWMpIHsKICAgICAgICAgUnVsZVNldDo6RHluYW1pY01lZGlhUXVlcnlSdWxlcyBy
dWxlczsKKyAgICAgICAgcnVsZXMubWVkaWFRdWVyeVNldHMucmVzZXJ2ZUNhcGFjaXR5KHJ1bGVz
Lm1lZGlhUXVlcnlTZXRzLnNpemUoKSArIGR5bmFtaWNDb250ZXh0U3RhY2suc2l6ZSgpKTsKICAg
ICAgICAgZm9yIChhdXRvJiBjb250ZXh0IDogZHluYW1pY0NvbnRleHRTdGFjaykKLSAgICAgICAg
ICAgIHJ1bGVzLm1lZGlhUXVlcnlTZXRzLmFwcGVuZChjb250ZXh0LnNldC5nZXQoKSk7CisgICAg
ICAgICAgICBydWxlcy5tZWRpYVF1ZXJ5U2V0cy51bmNoZWNrZWRBcHBlbmQoY29udGV4dC5zZXQu
Z2V0KCkpOwogCiAgICAgICAgIGlmIChjb2xsZWN0RHluYW1pYykgewogICAgICAgICAgICAgcnVs
ZXMuYWZmZWN0ZWRSdWxlUG9zaXRpb25zLmFwcGVuZFZlY3RvcihkeW5hbWljQ29udGV4dFN0YWNr
Lmxhc3QoKS5hZmZlY3RlZFJ1bGVQb3NpdGlvbnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9T
dHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaAppbmRleCAyZjgzNGRmNjdkODBjYjEzZGQ0YzkxNTUxYmFk
MTJkYjFiMjNhMjQ5Li43NDY0Zjg0ZDhiZjZiMmIyYTMzMTIzZDU5MmJlMjkyZjE0Y2MyOGRlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaApAQCAtMTY5
NywxMyArMTY5NywxMiBAQCBpbmxpbmUgVmVjdG9yPEF0b21TdHJpbmc+IEJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRDb250YWluZXJOYW1lKEJ1aWxkZXJTdGF0ZSYsCiAgICAgICAgIEFTU0VSVChk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5v
bmUpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KKyAgICBpZiAoIWlzPENTU1ZhbHVlTGlz
dD4odmFsdWUpKQorICAgICAgICByZXR1cm4geyB9OwogCi0gICAgVmVjdG9yPEF0b21TdHJpbmc+
IHJlc3VsdDsKLSAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsKLSAgICAgICAgZm9y
IChhdXRvJiBpdGVtIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpCi0gICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihpdGVtLmdldCgpKS5z
dHJpbmdWYWx1ZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gV1RG
OjptYXAoZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSksIFtdKGF1dG8mIGl0ZW0pIC0+IEF0
b21TdHJpbmcgeworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0
ZW0uZ2V0KCkpLnN0cmluZ1ZhbHVlKCk7CisgICAgfSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllclByb3h5LmNwcCBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllclByb3h5LmNw
cAppbmRleCAwZWY4MzQyZGQyNjhlZTY4YzMwNDc2MmRhMDU4YmE0ZmJjYmM2ZTNjLi45NDlmZjMy
MDU1NTBiNDhiN2NjNzllNDUwNTE2YTQwNDAyYTRhMzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJQcm94eS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyUHJveHkuY3BwCkBA
IC04MDUsMTEgKzgwNSw5IEBAIGJvb2wgUmVtb3RlTWVkaWFQbGF5ZXJQcm94eTo6ZG9lc0hhdmVB
dHRyaWJ1dGUoY29uc3QgQXRvbVN0cmluZyYsIEF0b21TdHJpbmcqKSBjCiAjaWYgRU5BQkxFKEFW
Rl9DQVBUSU9OUykKIFZlY3RvcjxSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2s+PiBSZW1vdGVNZWRp
YVBsYXllclByb3h5OjpvdXRPZkJhbmRUcmFja1NvdXJjZXMoKQogewotICAgIFZlY3RvcjxSZWZQ
dHI8UGxhdGZvcm1UZXh0VHJhY2s+PiBzb3VyY2VzOwotICAgIGZvciAoYXV0byYgZGF0YSA6IG1f
Y29uZmlndXJhdGlvbi5vdXRPZkJhbmRUcmFja0RhdGEpCi0gICAgICAgIHNvdXJjZXMuYXBwZW5k
KFBsYXRmb3JtVGV4dFRyYWNrOjpjcmVhdGUoV1RGTW92ZShkYXRhKSkpOwotICAgIAotICAgIHJl
dHVybiBzb3VyY2VzOworICAgIHJldHVybiBXVEY6Om1hcChtX2NvbmZpZ3VyYXRpb24ub3V0T2ZC
YW5kVHJhY2tEYXRhLCBbXShhdXRvJiBkYXRhKSAtPiBSZWZQdHI8UGxhdGZvcm1UZXh0VHJhY2s+
IHsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVGV4dFRyYWNrOjpjcmVhdGUoV1RGTW92ZShkYXRh
KSk7CisgICAgfSk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL21lZGlhL1JlbW90ZVNvdXJjZUJ1ZmZlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVTb3VyY2VCdWZmZXJQcm94eS5jcHAKaW5kZXggMjc5MTY1
ZGU2NmFhZmUwMjQ2ODFlMTYxYTAzNWM0YTEwOTU0ZTZlMS4uYmM4ZDAxNjIyZGM5ZjExNDFlODU5
ZjI0NjJmMzYyODg3OGIyYjVkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L21lZGlhL1JlbW90ZVNvdXJjZUJ1ZmZlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvbWVkaWEvUmVtb3RlU291cmNlQnVmZmVyUHJveHkuY3BwCkBAIC03NSwzNSArNzUs
MzMgQEAgdm9pZCBSZW1vdGVTb3VyY2VCdWZmZXJQcm94eTo6c291cmNlQnVmZmVyUHJpdmF0ZURp
ZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQKIAogICAgIEluaXRpYWxpemF0aW9uU2VnbWVu
dEluZm8gc2VnbWVudEluZm87CiAgICAgc2VnbWVudEluZm8uZHVyYXRpb24gPSBzZWdtZW50LmR1
cmF0aW9uOwotICAgIGZvciAoYXV0byYgYXVkaW9UcmFja0luZm8gOiBzZWdtZW50LmF1ZGlvVHJh
Y2tzKSB7Ci0gICAgICAgIGF1dG8gaWRlbnRpZmllciA9IG1fcmVtb3RlTWVkaWFQbGF5ZXJQcm94
eS0+YWRkUmVtb3RlQXVkaW9UcmFja1Byb3h5KCphdWRpb1RyYWNrSW5mby50cmFjayk7Ci0gICAg
ICAgIHNlZ21lbnRJbmZvLmF1ZGlvVHJhY2tzLmFwcGVuZCh7IE1lZGlhRGVzY3JpcHRpb25JbmZv
KCphdWRpb1RyYWNrSW5mby5kZXNjcmlwdGlvbiksIGlkZW50aWZpZXIgfSk7CiAKKyAgICBzZWdt
ZW50SW5mby5hdWRpb1RyYWNrcyA9IHNlZ21lbnQuYXVkaW9UcmFja3MubWFwKFsmXShhdXRvJiBh
dWRpb1RyYWNrSW5mbykgeworICAgICAgICBhdXRvIGlkZW50aWZpZXIgPSBtX3JlbW90ZU1lZGlh
UGxheWVyUHJveHktPmFkZFJlbW90ZUF1ZGlvVHJhY2tQcm94eSgqYXVkaW9UcmFja0luZm8udHJh
Y2spOwogICAgICAgICBBU1NFUlQoIW1fdHJhY2tJZHMuY29udGFpbnMoaWRlbnRpZmllcikpOwog
ICAgICAgICBBU1NFUlQoIW1fbWVkaWFEZXNjcmlwdGlvbnMuY29udGFpbnMoaWRlbnRpZmllcikp
OwogICAgICAgICBtX3RyYWNrSWRzLmFkZChpZGVudGlmaWVyLCBhdWRpb1RyYWNrSW5mby50cmFj
ay0+aWQoKSk7CiAgICAgICAgIG1fbWVkaWFEZXNjcmlwdGlvbnMuYWRkKGlkZW50aWZpZXIsICph
dWRpb1RyYWNrSW5mby5kZXNjcmlwdGlvbik7Ci0gICAgfQorICAgICAgICByZXR1cm4gSW5pdGlh
bGl6YXRpb25TZWdtZW50SW5mbzo6VHJhY2tJbmZvcm1hdGlvbiB7IE1lZGlhRGVzY3JpcHRpb25J
bmZvKCphdWRpb1RyYWNrSW5mby5kZXNjcmlwdGlvbiksIGlkZW50aWZpZXIgfTsKKyAgICB9KTsK
IAotICAgIGZvciAoYXV0byYgdmlkZW9UcmFja0luZm8gOiBzZWdtZW50LnZpZGVvVHJhY2tzKSB7
CisgICAgc2VnbWVudEluZm8udmlkZW9UcmFja3MgPSBzZWdtZW50LnZpZGVvVHJhY2tzLm1hcChb
Jl0oYXV0byYgdmlkZW9UcmFja0luZm8pIHsKICAgICAgICAgYXV0byBpZGVudGlmaWVyID0gbV9y
ZW1vdGVNZWRpYVBsYXllclByb3h5LT5hZGRSZW1vdGVWaWRlb1RyYWNrUHJveHkoKnZpZGVvVHJh
Y2tJbmZvLnRyYWNrKTsKLSAgICAgICAgc2VnbWVudEluZm8udmlkZW9UcmFja3MuYXBwZW5kKHsg
TWVkaWFEZXNjcmlwdGlvbkluZm8oKnZpZGVvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwgaWRlbnRp
ZmllciB9KTsKLQogICAgICAgICBBU1NFUlQoIW1fdHJhY2tJZHMuY29udGFpbnMoaWRlbnRpZmll
cikpOwogICAgICAgICBBU1NFUlQoIW1fbWVkaWFEZXNjcmlwdGlvbnMuY29udGFpbnMoaWRlbnRp
ZmllcikpOwogICAgICAgICBtX3RyYWNrSWRzLmFkZChpZGVudGlmaWVyLCB2aWRlb1RyYWNrSW5m
by50cmFjay0+aWQoKSk7CiAgICAgICAgIG1fbWVkaWFEZXNjcmlwdGlvbnMuYWRkKGlkZW50aWZp
ZXIsICp2aWRlb1RyYWNrSW5mby5kZXNjcmlwdGlvbik7Ci0gICAgfQorICAgICAgICByZXR1cm4g
SW5pdGlhbGl6YXRpb25TZWdtZW50SW5mbzo6VHJhY2tJbmZvcm1hdGlvbiB7IE1lZGlhRGVzY3Jp
cHRpb25JbmZvKCp2aWRlb1RyYWNrSW5mby5kZXNjcmlwdGlvbiksIGlkZW50aWZpZXIgfTsKKyAg
ICB9KTsKIAotICAgIGZvciAoYXV0byYgdGV4dFRyYWNrSW5mbyA6IHNlZ21lbnQudGV4dFRyYWNr
cykgeworICAgIHNlZ21lbnRJbmZvLnRleHRUcmFja3MgPSBzZWdtZW50LnRleHRUcmFja3MubWFw
KFsmXShhdXRvJiB0ZXh0VHJhY2tJbmZvKSB7CiAgICAgICAgIGF1dG8gaWRlbnRpZmllciA9IG1f
cmVtb3RlTWVkaWFQbGF5ZXJQcm94eS0+YWRkUmVtb3RlVGV4dFRyYWNrUHJveHkoKnRleHRUcmFj
a0luZm8udHJhY2spOwotICAgICAgICBzZWdtZW50SW5mby50ZXh0VHJhY2tzLmFwcGVuZCh7IE1l
ZGlhRGVzY3JpcHRpb25JbmZvKCp0ZXh0VHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwgaWRlbnRpZmll
ciB9KTsKLQogICAgICAgICBBU1NFUlQoIW1fdHJhY2tJZHMuY29udGFpbnMoaWRlbnRpZmllcikp
OwogICAgICAgICBBU1NFUlQoIW1fbWVkaWFEZXNjcmlwdGlvbnMuY29udGFpbnMoaWRlbnRpZmll
cikpOwogICAgICAgICBtX3RyYWNrSWRzLmFkZChpZGVudGlmaWVyLCB0ZXh0VHJhY2tJbmZvLnRy
YWNrLT5pZCgpKTsKICAgICAgICAgbV9tZWRpYURlc2NyaXB0aW9ucy5hZGQoaWRlbnRpZmllciwg
KnRleHRUcmFja0luZm8uZGVzY3JpcHRpb24pOwotICAgIH0KKyAgICAgICAgcmV0dXJuIEluaXRp
YWxpemF0aW9uU2VnbWVudEluZm86OlRyYWNrSW5mb3JtYXRpb24geyBNZWRpYURlc2NyaXB0aW9u
SW5mbygqdGV4dFRyYWNrSW5mby5kZXNjcmlwdGlvbiksIGlkZW50aWZpZXIgfTsKKyAgICB9KTsK
IAogICAgIGlmICghbV9jb25uZWN0aW9uVG9XZWJQcm9jZXNzKSB7CiAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7CkBAIC0zMzgsMTYgKzMzNiwxMSBAQCB2b2lkIFJlbW90ZVNvdXJjZUJ1ZmZl
clByb3h5OjpzZWVrVG9UaW1lKGNvbnN0IE1lZGlhVGltZSYgbWVkaWFUaW1lKQogCiB2b2lkIFJl
bW90ZVNvdXJjZUJ1ZmZlclByb3h5Ojp1cGRhdGVUcmFja0lkcyhWZWN0b3I8c3RkOjpwYWlyPFRy
YWNrUHJpdmF0ZVJlbW90ZUlkZW50aWZpZXIsIFRyYWNrUHJpdmF0ZVJlbW90ZUlkZW50aWZpZXI+
PiYmIGlkZW50aWZpZXJQYWlycykKIHsKLSAgICBWZWN0b3I8c3RkOjpwYWlyPEF0b21TdHJpbmcs
IEF0b21TdHJpbmc+PiB0cmFja0lkUGFpcnM7Ci0KLSAgICBmb3IgKGF1dG8mIGlkZW50aWZpZXJQ
YWlyIDogaWRlbnRpZmllclBhaXJzKSB7CisgICAgYXV0byB0cmFja0lkUGFpcnMgPSBpZGVudGlm
aWVyUGFpcnMubWFwKFsmXShhdXRvJiBpZGVudGlmaWVyUGFpcikgewogICAgICAgICBBU1NFUlQo
bV90cmFja0lkcy5jb250YWlucyhpZGVudGlmaWVyUGFpci5maXJzdCkpOwogICAgICAgICBBU1NF
UlQobV90cmFja0lkcy5jb250YWlucyhpZGVudGlmaWVyUGFpci5zZWNvbmQpKTsKLQotICAgICAg
ICBhdXRvIG9sZElkID0gbV90cmFja0lkcy50YWtlKGlkZW50aWZpZXJQYWlyLmZpcnN0KTsKLSAg
ICAgICAgYXV0byBuZXdJZCA9IG1fdHJhY2tJZHMuZ2V0KGlkZW50aWZpZXJQYWlyLnNlY29uZCk7
Ci0gICAgICAgIHRyYWNrSWRQYWlycy5hcHBlbmQoc3RkOjptYWtlX3BhaXIob2xkSWQsIG5ld0lk
KSk7Ci0gICAgfQorICAgICAgICByZXR1cm4gc3RkOjpwYWlyIHsgbV90cmFja0lkcy50YWtlKGlk
ZW50aWZpZXJQYWlyLmZpcnN0KSwgbV90cmFja0lkcy5nZXQoaWRlbnRpZmllclBhaXIuc2Vjb25k
KSB9OworICAgIH0pOwogCiAgICAgaWYgKCF0cmFja0lkUGFpcnMuaXNFbXB0eSgpKQogICAgICAg
ICBtX3NvdXJjZUJ1ZmZlclByaXZhdGUtPnVwZGF0ZVRyYWNrSWRzKFdURk1vdmUodHJhY2tJZFBh
aXJzKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZp
ZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3Bw
CmluZGV4IDcwYjVhZmRhNTI2ZTk5MDliOTYyZDcxMjEzZDg1YjYwYjUzNzE4MWQuLmU4NzZlYzM3
NzcxZmY0MDBjYWE4MzRjZWZhZTk1NjI1NGNjM2ZkOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCkBAIC04NTMsOSArODUzLDcgQEAgdm9pZCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyhj
b25zdCBSZWdpc3RyYWJsZUQKIAogICAgICAgICAgICAgc3RhdGlzdGljLnN1YmZyYW1lVW5kZXJU
b3BGcmFtZURvbWFpbnMgPSBXVEZNb3ZlKHRvcEZyYW1lRG9tYWlucyk7CiAKLSAgICAgICAgICAg
IFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBzdGF0aXN0aWNzOwotICAgICAgICAgICAg
c3RhdGlzdGljcy5hcHBlbmQoV1RGTW92ZShzdGF0aXN0aWMpKTsKLSAgICAgICAgICAgIG1fc3Rh
dGlzdGljc1N0b3JlLT5tZXJnZVN0YXRpc3RpY3MoV1RGTW92ZShzdGF0aXN0aWNzKSk7CisgICAg
ICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+bWVyZ2VTdGF0aXN0aWNzKFZlY3RvcjxSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzPjo6ZnJvbShXVEZNb3ZlKHN0YXRpc3RpYykpKTsKICAgICAgICAgfQog
ICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAK
aW5kZXggZjRmOGE0YzRmNGFmOTZhZjY4OTQyYzVjNmM5ODkyZmY3ZTE5OTNmMS4uNGE4YjBlZGEw
OWJmMDU4OThhM2I4YjIyYzkwOGI0N2IyOGViOWM4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTEzODAsMTAgKzEzODAsOSBAQCBz
dGF0aWMgdm9pZCBmZXRjaERpc2tDYWNoZUVudHJpZXMoTmV0d29ya0NhY2hlOjpDYWNoZSogY2Fj
aGUsIFBBTDo6U2Vzc2lvbklEIHNlcwogICAgIEhhc2hNYXA8U2VjdXJpdHlPcmlnaW5EYXRhLCB1
aW50NjRfdD4gb3JpZ2luc0FuZFNpemVzOwogICAgIGNhY2hlLT50cmF2ZXJzZShbZmV0Y2hPcHRp
b25zLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBvcmln
aW5zQW5kU2l6ZXMgPSBXVEZNb3ZlKG9yaWdpbnNBbmRTaXplcyldKGF1dG8qIHRyYXZlcnNhbEVu
dHJ5KSBtdXRhYmxlIHsKICAgICAgICAgaWYgKCF0cmF2ZXJzYWxFbnRyeSkgewotICAgICAgICAg
ICAgVmVjdG9yPFdlYnNpdGVEYXRhOjpFbnRyeT4gZW50cmllczsKLQotICAgICAgICAgICAgZm9y
IChhdXRvJiBvcmlnaW5BbmRTaXplIDogb3JpZ2luc0FuZFNpemVzKQotICAgICAgICAgICAgICAg
IGVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbkFuZFNpemUua2V5LCBX
ZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSwgb3JpZ2luQW5kU2l6ZS52YWx1ZSB9KTsKKyAgICAg
ICAgICAgIGF1dG8gZW50cmllcyA9IFdURjo6bWFwKG9yaWdpbnNBbmRTaXplcywgW10oYXV0byYg
b3JpZ2luQW5kU2l6ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0YTo6RW50
cnkgeyBvcmlnaW5BbmRTaXplLmtleSwgV2Vic2l0ZURhdGFUeXBlOjpEaXNrQ2FjaGUsIG9yaWdp
bkFuZFNpemUudmFsdWUgfTsKKyAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlciksIGVudHJpZXMgPSBXVEZNb3ZlKGVudHJpZXMpXSAoKSBtdXRhYmxlIHsKICAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihlbnRyaWVzKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTm90aWZpY2F0aW9ucy9OZXR3b3JrTm90aWZpY2F0aW9u
TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05vdGlmaWNhdGlvbnMv
TmV0d29ya05vdGlmaWNhdGlvbk1hbmFnZXIuY3BwCmluZGV4IGYwMGEyMTkzYWEyYjEzOTgwMmIz
NjZhNGYxMjFjNzZlZGZmODhmMDMuLmM1MTJmMmNiMzI1NDA0NTRiMDZkZjczMjVhMzFiMmEzY2Ux
ZDBjNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTm90aWZpY2F0
aW9ucy9OZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2VyLmNw
cApAQCAtODIsOSArODIsOSBAQCB2b2lkIE5ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2VyOjpkZWxl
dGVQdXNoQW5kTm90aWZpY2F0aW9uUmVnaXN0cmF0aW9uKGNvbnN0IFNlYwogdm9pZCBOZXR3b3Jr
Tm90aWZpY2F0aW9uTWFuYWdlcjo6Z2V0T3JpZ2luc1dpdGhQdXNoQW5kTm90aWZpY2F0aW9uUGVy
bWlzc2lvbnMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmln
aW5EYXRhPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVmVjdG9yPFN0cmluZz4mJik+IHJlcGx5SGFuZGxlciA9IFtjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoVmVjdG9yPFN0cmluZz4gb3JpZ2luU3Ry
aW5ncykgbXV0YWJsZSB7Ci0gICAgICAgIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdp
bnM7Ci0gICAgICAgIGZvciAoYXV0byYgb3JpZ2luU3RyaW5nIDogb3JpZ2luU3RyaW5ncykKLSAg
ICAgICAgICAgIG9yaWdpbnMuYXBwZW5kKFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbVVSTCh7IHsg
fSwgb3JpZ2luU3RyaW5nIH0pKTsKKyAgICAgICAgYXV0byBvcmlnaW5zID0gb3JpZ2luU3RyaW5n
cy5tYXAoW10oYXV0byYgb3JpZ2luU3RyaW5nKSB7CisgICAgICAgICAgICByZXR1cm4gU2VjdXJp
dHlPcmlnaW5EYXRhOjpmcm9tVVJMKHsgeyB9LCBvcmlnaW5TdHJpbmcgfSk7CisgICAgICAgIH0p
OwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKG9yaWdpbnMpKTsKICAgICB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3Rv
cmFnZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdl
L1N0b3JhZ2VNYW5hZ2VyLmNwcAppbmRleCBjYjkwMWI2YzU4YjE4NTlhZThiZTJhZDlkYTkwMDJk
ODIyYjgwNjEyLi5jMWI5ODZjZjlmNjYxMjQxZjEwM2E3ODA2YzgzNjZkZThiYzQzNjNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1h
bmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9T
dG9yYWdlTWFuYWdlci5jcHAKQEAgLTI5NSwyMCArMjk1LDE0IEBAIFZlY3RvcjxTdG9yYWdlQXJl
YUlkZW50aWZpZXI+IFN0b3JhZ2VNYW5hZ2VyOjphbGxTdG9yYWdlQXJlYUlkZW50aWZpZXJzKCkg
Y29uc3QKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIFZlY3RvcjxTdG9y
YWdlQXJlYUlkZW50aWZpZXI+IGlkZW50aWZpZXJzOwotICAgIGZvciAoY29uc3QgYXV0byYgbG9j
YWxTdG9yYWdlTmFtZXNwYWNlIDogbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKSB7
Ci0gICAgICAgIGZvciAoYXV0byBrZXkgOiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VB
cmVhSWRlbnRpZmllcnMoKSkKLSAgICAgICAgICAgIGlkZW50aWZpZXJzLmFwcGVuZChrZXkpOwot
ICAgIH0KKyAgICBmb3IgKGF1dG8mIGxvY2FsU3RvcmFnZU5hbWVzcGFjZSA6IG1fbG9jYWxTdG9y
YWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkKKyAgICAgICAgaWRlbnRpZmllcnMuYXBwZW5kVmVjdG9y
KGxvY2FsU3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZUFyZWFJZGVudGlmaWVycygpKTsKIAotICAg
IGZvciAoY29uc3QgYXV0byYgdHJhc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UgOiBtX3RyYW5z
aWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRv
IGtleSA6IHRyYXNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlQXJlYUlkZW50aWZp
ZXJzKCkpCi0gICAgICAgICAgICBpZGVudGlmaWVycy5hcHBlbmQoa2V5KTsKLSAgICB9CisgICAg
Zm9yIChhdXRvJiB0cmFzaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZSA6IG1fdHJhbnNpZW50TG9j
YWxTdG9yYWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkKKyAgICAgICAgaWRlbnRpZmllcnMuYXBwZW5k
VmVjdG9yKHRyYXNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlQXJlYUlkZW50aWZp
ZXJzKCkpOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSA6
IG1fc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKSB7Ci0gICAgICAgIGZvciAoYXV0
byBrZXkgOiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZUFyZWFJZGVudGlmaWVycygp
KQotICAgICAgICAgICAgaWRlbnRpZmllcnMuYXBwZW5kKGtleSk7Ci0gICAgfQorICAgIGZvciAo
YXV0byYgc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UgOiBtX3Nlc3Npb25TdG9yYWdlTmFtZXNwYWNl
cy52YWx1ZXMoKSkKKyAgICAgICAgaWRlbnRpZmllcnMuYXBwZW5kVmVjdG9yKHNlc3Npb25TdG9y
YWdlTmFtZXNwYWNlLT5zdG9yYWdlQXJlYUlkZW50aWZpZXJzKCkpOwogCiAgICAgcmV0dXJuIGlk
ZW50aWZpZXJzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9X
ZWJTdG9yYWdlL1RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNw
YWNlLmNwcAppbmRleCBlZWVjNTUwZWVmNjNhZTU5YTFlYWIzYWE4YTQ5N2EzMmMxMDUwNjI0Li5m
Yjk4ZWQzOTQ4MDkxNjA2ODcxNzI2YWUwODZkNTFmMTUxMmQ0NDA0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvVHJhbnNpZW50TG9jYWxTdG9yYWdl
TmFtZXNwYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3Jh
Z2UvVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNwcApAQCAtNTUsMTQgKzU1LDExIEBA
IFN0b3JhZ2VBcmVhJiBUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmdldE9yQ3JlYXRl
U3RvcmFnZUFyZWEoU2VjdXJpdHlPcmlnCiBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiBUcmFu
c2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6Om9yaWdpbnMoKSBjb25zdAogewogICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+IG9y
aWdpbnM7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIHN0b3JhZ2VBcmVhIDogbV9zdG9yYWdlQXJl
YU1hcC52YWx1ZXMoKSkgewotICAgICAgICBpZiAoIXN0b3JhZ2VBcmVhLT5pdGVtcygpLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIG9yaWdpbnMuYXBwZW5kKHN0b3JhZ2VBcmVhLT5zZWN1cml0eU9y
aWdpbigpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gb3JpZ2luczsKKyAgICByZXR1cm4gV1RGOjpj
b21wYWN0TWFwKG1fc3RvcmFnZUFyZWFNYXAsIFtdKGF1dG8mIGVudHJ5KSAtPiBzdGQ6Om9wdGlv
bmFsPFNlY3VyaXR5T3JpZ2luRGF0YT4geworICAgICAgICBpZiAoZW50cnkudmFsdWUtPml0ZW1z
KCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAg
cmV0dXJuIGVudHJ5LnZhbHVlLT5zZWN1cml0eU9yaWdpbigpOworICAgIH0pOwogfQogCiB2b2lk
IFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6Y2xlYXJTdG9yYWdlQXJlYXNNYXRjaGlu
Z09yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIHNlY3VyaXR5T3JpZ2luKQpAQCAtODIs
MTAgKzc5LDkgQEAgdm9pZCBUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OmNsZWFyQWxs
U3RvcmFnZUFyZWFzKCkKIAogVmVjdG9yPFN0b3JhZ2VBcmVhSWRlbnRpZmllcj4gVHJhbnNpZW50
TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpzdG9yYWdlQXJlYUlkZW50aWZpZXJzKCkgY29uc3QKIHsK
LSAgICBWZWN0b3I8U3RvcmFnZUFyZWFJZGVudGlmaWVyPiBpZGVudGlmaWVyczsKLSAgICBmb3Ig
KGF1dG8mIHN0b3JhZ2VBcmVhIDogbV9zdG9yYWdlQXJlYU1hcC52YWx1ZXMoKSkKLSAgICAgICAg
aWRlbnRpZmllcnMuYXBwZW5kKHN0b3JhZ2VBcmVhLT5pZGVudGlmaWVyKCkpOwotICAgIHJldHVy
biBpZGVudGlmaWVyczsKKyAgICByZXR1cm4gV1RGOjptYXAobV9zdG9yYWdlQXJlYU1hcCwgW10o
YXV0byYgZW50cnkpIHsKKyAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlLT5pZGVudGlmaWVyKCk7
CisgICAgfSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHAK
aW5kZXggNDA5YTMzODhhMGI4ZWNmOWFiNzEwNDliNzI5ZmRlMzkyN2M0OGViNS4uYjJmYWQxMzEx
MGQ1NzhmYTIyYzJiZWM3YTYyZWE0NjljOTExNTk3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuY3BwCkBA
IC02NiwxMSArNjYsOSBAQCBTUUxpdGVTdG9yYWdlQXJlYTo6U1FMaXRlU3RvcmFnZUFyZWEodW5z
aWduZWQgcXVvdGEsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbgogICAgIDogU3RvcmFnZUFy
ZWFCYXNlKHF1b3RhLCBvcmlnaW4pCiAgICAgLCBtX3BhdGgocGF0aCkKICAgICAsIG1fcXVldWUo
V1RGTW92ZSh3b3JrUXVldWUpKQorICAgICwgbV9jYWNoZWRTdGF0ZW1lbnRzKFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50Pj4oc3RhdGljX2Nhc3Q8c2l6ZV90
PihTdGF0ZW1lbnRUeXBlOjpJbnZhbGlkKSkpCiB7Ci0gICAgQVNTRVJUKCFpc01haW5SdW5Mb29w
KCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KFN0
YXRlbWVudFR5cGU6OkludmFsaWQpOyArK2kpCi0gICAgICAgIG1fY2FjaGVkU3RhdGVtZW50cy5h
cHBlbmQobnVsbHB0cik7CisgICAgQVNTRVJUKCFpc01haW5SdW5Mb29wKCkpOyAgCiB9CiAKIHZv
aWQgU1FMaXRlU3RvcmFnZUFyZWE6OmNsb3NlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5LmNwcAppbmRl
eCAwNGE2OTY4MTc4YTZmNzU5NGMyODBlZjczMTgxOThjYjYzMmI5MjMwLi5iY2NjMDU1MDc3MTc3
OTc2NjhmOWM5ZGNmMTAzMTA5MTExYjk4YWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkuY3BwCkBA
IC05Myw5ICs5Myw5IEBAIHZvaWQgV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OnNob3dQYXlt
ZW50VUkoV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgZGVzdGluYXRpCiAKICAgICBVUkwgb3JpZ2lu
YXRpbmdVUkwoVVJMKCksIG9yaWdpbmF0aW5nVVJMU3RyaW5nKTsKIAotICAgIFZlY3RvcjxVUkw+
IGxpbmtJY29uVVJMczsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGxpbmtJY29uVVJMU3RyaW5nIDog
bGlua0ljb25VUkxTdHJpbmdzKQotICAgICAgICBsaW5rSWNvblVSTHMuYXBwZW5kKFVSTChVUkwo
KSwgbGlua0ljb25VUkxTdHJpbmcpKTsKKyAgICBhdXRvIGxpbmtJY29uVVJMcyA9IGxpbmtJY29u
VVJMU3RyaW5ncy5tYXAoW10oYXV0byYgbGlua0ljb25VUkxTdHJpbmcpIHsKKyAgICAgICAgcmV0
dXJuIFVSTChVUkwoKSwgbGlua0ljb25VUkxTdHJpbmcpOworICAgIH0pOwogCiAgICAgcGxhdGZv
cm1TaG93UGF5bWVudFVJKHdlYlBhZ2VQcm94eUlELCBvcmlnaW5hdGluZ1VSTCwgbGlua0ljb25V
UkxzLCBwYXltZW50UmVxdWVzdCwgW3RoaXMsIHdlYWtUaGlzID0gV2Vha1B0ciB7ICp0aGlzIH1d
KGJvb2wgcmVzdWx0KSB7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbi5jcHAKaW5kZXggODg0NjZjNDllZDBkZTE4ZTIw
MzJjYWEwYTA0NjQ4MzllYTc0NTEwMS4uNGE4ODkwMzllOTRhNjJmYTU5MmYxOTU3Zjc2ZDg1OWU3
OWM5ZmM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSU5hdmln
YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9u
LmNwcApAQCAtNjIsMTAgKzYyLDEwIEBAIE5hdmlnYXRpb246Ok5hdmlnYXRpb24oV2ViTmF2aWdh
dGlvblN0YXRlJiBzdGF0ZSwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVxCiAgICAgOiBt
X25hdmlnYXRpb25JRChzdGF0ZS5nZW5lcmF0ZU5hdmlnYXRpb25JRCgpKQogICAgICwgbV9vcmln
aW5hbFJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSkKICAgICAsIG1fY3VycmVudFJlcXVlc3QobV9v
cmlnaW5hbFJlcXVlc3QpCisgICAgLCBtX3JlZGlyZWN0Q2hhaW4geyBtX29yaWdpbmFsUmVxdWVz
dC51cmwoKSB9CiAgICAgLCBtX2Zyb21JdGVtKGZyb21JdGVtKQogICAgICwgbV9jbGllbnROYXZp
Z2F0aW9uQWN0aXZpdHkobmF2aWdhdGlvbkFjdGl2aXR5VGltZW91dCkKIHsKLSAgICBtX3JlZGly
ZWN0Q2hhaW4uYXBwZW5kKG1fb3JpZ2luYWxSZXF1ZXN0LnVybCgpKTsKIH0KIAogTmF2aWdhdGlv
bjo6TmF2aWdhdGlvbihXZWJOYXZpZ2F0aW9uU3RhdGUmIHN0YXRlLCBXZWJCYWNrRm9yd2FyZExp
c3RJdGVtJiB0YXJnZXRJdGVtLCBXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBmcm9tSXRlbSwgRnJh
bWVMb2FkVHlwZSBiYWNrRm9yd2FyZEZyYW1lTG9hZFR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NoYXJlU2hlZXQubW0gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XS1NoYXJlU2hlZXQubW0KaW5kZXggNTU0YWI4MDY0MjdlY2I5Y2U4MzBh
Y2E5N2ZjN2RkY2RjOTg1M2UxNS4uZTM4OGEzYzM3ZDBmNjk2NWQ3NjkxZjI3YjE3ODBhOTEzZjA0
ZWUyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tTaGFyZVNo
ZWV0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2hhcmVTaGVldC5t
bQpAQCAtMTAwLDkgKzEwMCw5IEBAIHN0YXRpYyB2b2lkIGFwcGVuZEZpbGVzQXNTaGFyZWFibGVV
UkxzKFJldGFpblB0cjxOU011dGFibGVBcnJheT4mJiBzaGFyZURhdGFBcnJhCiAgICAgICAgIFN0
cmluZyBmaWxlTmFtZTsKICAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gZmlsZURhdGE7CiAgICAg
fTsKLSAgICBWZWN0b3I8RmlsZVdyaXRlVGFzaz4gZmlsZVdyaXRlVGFza3M7Ci0gICAgZm9yIChh
dXRvJiBmaWxlIDogZmlsZXMpCi0gICAgICAgIGZpbGVXcml0ZVRhc2tzLmFwcGVuZCh7IGZpbGUu
ZmlsZU5hbWUuaXNvbGF0ZWRDb3B5KCksIGZpbGUuZmlsZURhdGEtPmNyZWF0ZU5TRGF0YSgpIH0p
OworICAgIGF1dG8gZmlsZVdyaXRlVGFza3MgPSBmaWxlcy5tYXAoW10oYXV0byYgZmlsZSkgewor
ICAgICAgICByZXR1cm4gRmlsZVdyaXRlVGFzayB7IGZpbGUuZmlsZU5hbWUuaXNvbGF0ZWRDb3B5
KCksIGZpbGUuZmlsZURhdGEtPmNyZWF0ZU5TRGF0YSgpIH07CisgICAgfSk7CiAKICAgICBhdXRv
IHF1ZXVlID0gV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBsZS5XZWJLaXQuV0tTaGFyZVNoZWV0
LlNoYXJlYWJsZUZpbGVXcml0ZXIiKTsKICAgICBxdWV1ZS0+ZGlzcGF0Y2goW3NoYXJlRGF0YUFy
cmF5ID0gV1RGTW92ZShzaGFyZURhdGFBcnJheSksIGZpbGVXcml0ZVRhc2tzID0gV1RGTW92ZShm
aWxlV3JpdGVUYXNrcyksIHRlbXBvcmFyeURpcmVjdG9yeSA9IHJldGFpblB0cih0ZW1wb3JhcnlE
aXJlY3RvcnkpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSgpIG11dGFibGUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
V2ViUGFnZVByb3h5Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQ
YWdlUHJveHlDb2NvYS5tbQppbmRleCBmMWMzNzA2YjA5ZmY5ZTEyODIxZDdkYTNhMjI1YjcwYmE0
NmRjZTM2Li41NmExNGQ4YmYzNmVkNDRkYWRiZjFlNGM0ODQwYTVlMDY0MTRiOGU3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbQpA
QCAtNjY2LDE0ICs2NjYsMTIgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlc3RvcmVBcHBIaWdobGln
aHRzQW5kU2Nyb2xsVG9JbmRleChjb25zdCBWZWN0b3I8UmVmPFNoYXJlZE0KICAgICBpZiAoIWhh
c1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxTaGFyZWRN
ZW1vcnk6OklQQ0hhbmRsZT4gbWVtb3J5SGFuZGxlczsKLQotICAgIGZvciAoYXV0byBoaWdobGln
aHQgOiBoaWdobGlnaHRzKSB7CisgICAgYXV0byBtZW1vcnlIYW5kbGVzID0gV1RGOjpjb21wYWN0
TWFwKGhpZ2hsaWdodHMsIFtdKGF1dG8mIGhpZ2hsaWdodCkgLT4gc3RkOjpvcHRpb25hbDxTaGFy
ZWRNZW1vcnk6OklQQ0hhbmRsZT4gewogICAgICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5k
bGU7Ci0gICAgICAgIGhpZ2hsaWdodC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5
OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7Ci0KLSAgICAgICAgbWVtb3J5SGFuZGxlcy5hcHBlbmQo
U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgeyBXVEZNb3ZlKGhhbmRsZSksIGhpZ2hsaWdodC0+c2l6
ZSgpIH0pOwotICAgIH0KKyAgICAgICAgaWYgKCFoaWdobGlnaHQtPmNyZWF0ZUhhbmRsZShoYW5k
bGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpKQorICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxl
IHsgV1RGTW92ZShoYW5kbGUpLCBoaWdobGlnaHQtPnNpemUoKSB9OworICAgIH0pOwogICAgIAog
ICAgIHNldFVwSGlnaGxpZ2h0c09ic2VydmVyKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0ZyYW1lTG9hZFN0YXRlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0ZyYW1lTG9hZFN0YXRlLmNwcAppbmRleCBjNjFiZWQ4MWQwOTI4NDYzMmJmMjk2NWVkMmM5OWIw
YzZmZTQwMWEzLi42OWU1M2Q3YmViODZjZTZiNDA2ZjNjZGI4MzkyYWI3MmEzZmZjODI2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9GcmFtZUxvYWRTdGF0ZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwCkBAIC05MCwxMSArOTAs
OCBAQCB2b2lkIEZyYW1lTG9hZFN0YXRlOjpkaWRGaW5pc2hMb2FkKCkKIAogICAgIG1fc3RhdGUg
PSBTdGF0ZTo6RmluaXNoZWQ7CiAKLSAgICBWZWN0b3I8T2JzZXJ2ZXIqPiBvYnNlcnZlcnNDb3B5
OwotICAgIGZvciAoYXV0byYgb2JzZXJ2ZXIgOiBtX29ic2VydmVycykKLSAgICAgICAgb2JzZXJ2
ZXJzQ29weS5hcHBlbmQoJm9ic2VydmVyKTsKLSAgICBmb3IgKGF1dG8qIG9ic2VydmVyIDogb2Jz
ZXJ2ZXJzQ29weSkKLSAgICAgICAgb2JzZXJ2ZXItPmRpZEZpbmlzaExvYWQoKTsKKyAgICBmb3Ig
KGF1dG8mIG9ic2VydmVyIDogY29weVRvVmVjdG9yT2Y8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxP
YnNlcnZlcj4+KG1fb2JzZXJ2ZXJzKSkKKyAgICAgICAgb2JzZXJ2ZXIuZ2V0KCkuZGlkRmluaXNo
TG9hZCgpOwogfQogCiB2b2lkIEZyYW1lTG9hZFN0YXRlOjpkaWRGYWlsTG9hZCgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHku
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcAppbmRleCAzNzQwODE5M2IwYjc2ODIzYzA0NTgxYjRiNGU5MDZkZDQ0MDlhN2FiLi5lMzgw
MTZmMWRlYjczNzMyZDVhODVkYzFkNDZkMTNkZjM1YTY5MWVhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKQEAg
LTE4NCw4ICsxODQsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnNlbmRDcmVhdGlvblBh
cmFtZXRlcnNUb05ld1Byb2Nlc3MoKQogICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVy
ZWRBc0xvY2FsID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24o
KS5zY2hlbWVzVG9SZWdpc3RlckFzTG9jYWwoKSk7CiAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVz
UmVnaXN0ZXJlZEFzTm9BY2Nlc3MgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFsU2V0dGluZ3M6
OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNOb0FjY2VzcygpKTsKICAgICBwYXJhbWV0
ZXJzLmNhY2hlTW9kZWwgPSBMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuY2FjaGVN
b2RlbCgpOwotICAgIGZvciAoYXV0byYgc2NoZW1lIDogV2ViUHJvY2Vzc1Bvb2w6OnVybFNjaGVt
ZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpKQotICAgICAgICBwYXJhbWV0ZXJzLnVybFNj
aGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOworICAgIHBh
cmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMgPSBXZWJQcm9j
ZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCk7CisKICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmIChTdHJpbmcgY29va2llU3RvcmFnZURpcmVjdG9y
eSA9IFdlYlByb2Nlc3NQb29sOjpjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7ICFjb29raWVTdG9y
YWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkgewogICAgICAgICBpZiAoYXV0byBoYW5kbGUgPSBTYW5k
Ym94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29va2llU3Rv
cmFnZURpcmVjdG9yeSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2Vy
Q29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAK
aW5kZXggZmEyNTRjMmRhZGMwNjMwMjhkZmQ1MDRkMjg5MGE4OTJhZWRhZmIwOC4uNWJiZTczOTYy
MDUyN2E4MjdjZDU3ZjE2OWFmMmYwYzBjNTk2YTcwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50
Q29udHJvbGxlclByb3h5LmNwcApAQCAtMTE3LDExICsxMTcsMTEgQEAgVXNlckNvbnRlbnRDb250
cm9sbGVyUGFyYW1ldGVycyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cGFyYW1ldGVy
cygpIGNvbnMKICAgICBwYXJhbWV0ZXJzLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyKCk7CiAgICAg
CiAgICAgQVNTRVJUKHBhcmFtZXRlcnMudXNlckNvbnRlbnRXb3JsZHMuaXNFbXB0eSgpKTsKLSAg
ICBmb3IgKGNvbnN0IGF1dG8mIGlkZW50aWZpZXIgOiBtX2Fzc29jaWF0ZWRDb250ZW50V29ybGRz
KSB7CisgICAgcGFyYW1ldGVycy51c2VyQ29udGVudFdvcmxkcyA9IFdURjo6bWFwKG1fYXNzb2Np
YXRlZENvbnRlbnRXb3JsZHMsIFtdKGF1dG8mIGlkZW50aWZpZXIpIHsKICAgICAgICAgYXV0byog
d29ybGQgPSBBUEk6OkNvbnRlbnRXb3JsZDo6d29ybGRGb3JJZGVudGlmaWVyKGlkZW50aWZpZXIp
OwogICAgICAgICBSRUxFQVNFX0FTU0VSVCh3b3JsZCk7Ci0gICAgICAgIHBhcmFtZXRlcnMudXNl
ckNvbnRlbnRXb3JsZHMuYXBwZW5kKHdvcmxkLT53b3JsZERhdGEoKSk7Ci0gICAgfQorICAgICAg
ICByZXR1cm4gd29ybGQtPndvcmxkRGF0YSgpOworICAgIH0pOwogCiAgICAgZm9yIChhdXRvIHVz
ZXJTY3JpcHQgOiBtX3VzZXJTY3JpcHRzLT5lbGVtZW50c09mVHlwZTxBUEk6OlVzZXJTY3JpcHQ+
KCkpCiAgICAgICAgIHBhcmFtZXRlcnMudXNlclNjcmlwdHMuYXBwZW5kKHsgdXNlclNjcmlwdC0+
aWRlbnRpZmllcigpLCB1c2VyU2NyaXB0LT5jb250ZW50V29ybGQoKS5pZGVudGlmaWVyKCksIHVz
ZXJTY3JpcHQtPnVzZXJTY3JpcHQoKSB9KTsKQEAgLTEyOSw4ICsxMjksOSBAQCBVc2VyQ29udGVu
dENvbnRyb2xsZXJQYXJhbWV0ZXJzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpwYXJh
bWV0ZXJzKCkgY29ucwogICAgIGZvciAoYXV0byB1c2VyU3R5bGVTaGVldCA6IG1fdXNlclN0eWxl
U2hlZXRzLT5lbGVtZW50c09mVHlwZTxBUEk6OlVzZXJTdHlsZVNoZWV0PigpKQogICAgICAgICBw
YXJhbWV0ZXJzLnVzZXJTdHlsZVNoZWV0cy5hcHBlbmQoeyB1c2VyU3R5bGVTaGVldC0+aWRlbnRp
ZmllcigpLCB1c2VyU3R5bGVTaGVldC0+Y29udGVudFdvcmxkKCkuaWRlbnRpZmllcigpLCB1c2Vy
U3R5bGVTaGVldC0+dXNlclN0eWxlU2hlZXQoKSB9KTsKIAotICAgIGZvciAoYXV0byYgaGFuZGxl
ciA6IG1fc2NyaXB0TWVzc2FnZUhhbmRsZXJzLnZhbHVlcygpKQotICAgICAgICBwYXJhbWV0ZXJz
Lm1lc3NhZ2VIYW5kbGVycy5hcHBlbmQoeyBoYW5kbGVyLT5pZGVudGlmaWVyKCksIGhhbmRsZXIt
PndvcmxkKCkuaWRlbnRpZmllcigpLCBoYW5kbGVyLT5uYW1lKCkgfSk7CisgICAgcGFyYW1ldGVy
cy5tZXNzYWdlSGFuZGxlcnMgPSBXVEY6Om1hcChtX3NjcmlwdE1lc3NhZ2VIYW5kbGVycywgW10o
YXV0byBlbnRyeSkgeworICAgICAgICByZXR1cm4gV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXJEYXRh
IHsgZW50cnkudmFsdWUtPmlkZW50aWZpZXIoKSwgZW50cnkudmFsdWUtPndvcmxkKCkuaWRlbnRp
ZmllcigpLCBlbnRyeS52YWx1ZS0+bmFtZSgpIH07CisgICAgfSk7CiAKICNpZiBFTkFCTEUoQ09O
VEVOVF9FWFRFTlNJT05TKQogICAgIHBhcmFtZXRlcnMuY29udGVudFJ1bGVMaXN0cyA9IGNvbnRl
bnRSdWxlTGlzdERhdGEoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkF1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmNwcAppbmRl
eCA5MzQ4MGVkNWNiMzlhNjFjYmNmNjczNTFlMGE4ODBlYTA5ZmU0NDc2Li42NTcyZjUzOTU5OGVm
NDFkZDEwMzA1YWNlZWM4ZjE4N2Q4ZDUyNTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRvck1h
bmFnZXIuY3BwCkBAIC00MTYsMTEgKzQxNiwxMSBAQCB2b2lkIEF1dGhlbnRpY2F0b3JNYW5hZ2Vy
OjpzdGFydERpc2NvdmVyeShjb25zdCBUcmFuc3BvcnRTZXQmIHRyYW5zcG9ydHMpCiB7CiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBBU1NFUlQobV9zZXJ2aWNlcy5pc0VtcHR5
KCkgJiYgdHJhbnNwb3J0cy5zaXplKCkgPD0gbWF4VHJhbnNwb3J0TnVtYmVyKTsKLSAgICBmb3Ig
KGF1dG8mIHRyYW5zcG9ydCA6IHRyYW5zcG9ydHMpIHsKKyAgICBtX3NlcnZpY2VzID0gV1RGOjpt
YXAodHJhbnNwb3J0cywgW3RoaXNdKGF1dG8mIHRyYW5zcG9ydCkgewogICAgICAgICBhdXRvIHNl
cnZpY2UgPSBjcmVhdGVTZXJ2aWNlKHRyYW5zcG9ydCwgKnRoaXMpOwogICAgICAgICBzZXJ2aWNl
LT5zdGFydERpc2NvdmVyeSgpOwotICAgICAgICBtX3NlcnZpY2VzLmFwcGVuZChXVEZNb3ZlKHNl
cnZpY2UpKTsKLSAgICB9CisgICAgICAgIHJldHVybiBzZXJ2aWNlOworICAgIH0pOwogfQogCiB2
b2lkIEF1dGhlbnRpY2F0b3JNYW5hZ2VyOjppbml0VGltZU91dFRpbWVyKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwCmluZGV4IGM3NDM0M2U2NWI4
ODlmNzg2OWRjOGNjYTM0MDUxYjhiMjY1NDAyYjYuLmRlYzllODM5MjIzNjhmZTYxNTVlMDNkNjlh
M2YzN2Q5ZGJmMDE3NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkJh
Y2tGb3J3YXJkTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQmFja0Zv
cndhcmRMaXN0LmNwcApAQCAtMzQwLDE2ICszNDAsMTEgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExp
c3Q6OnJlbW92ZUFsbEl0ZW1zKCkKIAogICAgIExPRyhCYWNrRm9yd2FyZCwgIihCYWNrL0Zvcndh
cmQpIFdlYkJhY2tGb3J3YXJkTGlzdCAlcCByZW1vdmVBbGxJdGVtcyAoaGFzICV6dSBvZiB0aGVt
KSIsIHRoaXMsIG1fZW50cmllcy5zaXplKCkpOwogCi0gICAgVmVjdG9yPFJlZjxXZWJCYWNrRm9y
d2FyZExpc3RJdGVtPj4gcmVtb3ZlZEl0ZW1zOwotCi0gICAgZm9yIChhdXRvJiBlbnRyeSA6IG1f
ZW50cmllcykgeworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2VudHJpZXMpCiAgICAgICAgIGRp
ZFJlbW92ZUl0ZW0oZW50cnkpOwotICAgICAgICByZW1vdmVkSXRlbXMuYXBwZW5kKFdURk1vdmUo
ZW50cnkpKTsKLSAgICB9CiAKLSAgICBtX2VudHJpZXMuY2xlYXIoKTsKICAgICBtX2N1cnJlbnRJ
bmRleCA9IHN0ZDo6bnVsbG9wdDsKLSAgICBtX3BhZ2UtPmRpZENoYW5nZUJhY2tGb3J3YXJkTGlz
dChudWxscHRyLCBXVEZNb3ZlKHJlbW92ZWRJdGVtcykpOworICAgIG1fcGFnZS0+ZGlkQ2hhbmdl
QmFja0ZvcndhcmRMaXN0KG51bGxwdHIsIHN0ZDo6ZXhjaGFuZ2UobV9lbnRyaWVzLCB7IH0pKTsK
IH0KIAogdm9pZCBXZWJCYWNrRm9yd2FyZExpc3Q6OmNsZWFyKCkKQEAgLTM2MywyMSArMzU4LDE3
IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjpjbGVhcigpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIFJlZlB0cjxXZWJCYWNrRm9yd2FyZExpc3RJdGVtPiBjdXJyZW50SXRlbSA9IHRoaXMtPmN1
cnJlbnRJdGVtKCk7Ci0gICAgVmVjdG9yPFJlZjxXZWJCYWNrRm9yd2FyZExpc3RJdGVtPj4gcmVt
b3ZlZEl0ZW1zOwogCiAgICAgaWYgKCFjdXJyZW50SXRlbSkgewogICAgICAgICAvLyBXZSBzaG91
bGQgb25seSBldmVyIGhhdmUgbm8gY3VycmVudCBpdGVtIGlmIHdlIGFsc28gaGF2ZSBubyBjdXJy
ZW50IGl0ZW0gaW5kZXguCiAgICAgICAgIEFTU0VSVCghbV9jdXJyZW50SW5kZXgpOwogCiAgICAg
ICAgIC8vIEJ1dCBqdXN0IGluIGNhc2UgaXQgZG9lcyBoYXBwZW4gaW4gcHJhY3RpY2Ugd2Ugc2hv
dWxkIGdldCBiYWNrIGludG8gYSBjb25zaXN0ZW50IHN0YXRlIG5vdy4KLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIGRpZFJlbW92ZUl0ZW0o
bV9lbnRyaWVzW2ldKTsKLSAgICAgICAgICAgIHJlbW92ZWRJdGVtcy5hcHBlbmQoV1RGTW92ZSht
X2VudHJpZXNbaV0pKTsKLSAgICAgICAgfQorICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9l
bnRyaWVzKQorICAgICAgICAgICAgZGlkUmVtb3ZlSXRlbShlbnRyeSk7CiAKLSAgICAgICAgbV9l
bnRyaWVzLmNsZWFyKCk7CiAgICAgICAgIG1fY3VycmVudEluZGV4ID0gc3RkOjpudWxsb3B0Owot
ICAgICAgICBtX3BhZ2UtPmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdChudWxscHRyLCBXVEZNb3Zl
KHJlbW92ZWRJdGVtcykpOworICAgICAgICBtX3BhZ2UtPmRpZENoYW5nZUJhY2tGb3J3YXJkTGlz
dChudWxscHRyLCBzdGQ6OmV4Y2hhbmdlKG1fZW50cmllcywgeyB9KSk7CiAKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTM4Nyw2ICszNzgsNyBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6
Y2xlYXIoKQogICAgICAgICAgICAgZGlkUmVtb3ZlSXRlbShtX2VudHJpZXNbaV0pOwogICAgIH0K
IAorICAgIFZlY3RvcjxSZWY8V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4+IHJlbW92ZWRJdGVtczsK
ICAgICByZW1vdmVkSXRlbXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplIC0gMSk7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgaWYgKG1fY3VycmVu
dEluZGV4ICYmIGkgIT0gKm1fY3VycmVudEluZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IGZhMTc0MmNmMzJkYTk5NTI3MzIzZGZjN2M4YmYwYTc5
MDYzMDQxZmUuLjYxYmQzMGEzNjQxNDczYzVkYjJjNTc0MzBlOTNjYjdlMjY2M2FkODkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKQEAgLTg0OSwxMCArODQ5
LDkgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6aW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3MoV2ViUHJv
Y2Vzc1Byb3h5JiBwcm9jZXNzLCBXZWJzaXRlRGEKICAgICAgICAgICAgIHBhcmFtZXRlcnMuaW5q
ZWN0ZWRCdW5kbGVQYXRoRXh0ZW5zaW9uSGFuZGxlID0gV1RGTW92ZSgqaGFuZGxlKTsKICAgICB9
CiAKLSAgICBmb3IgKGF1dG8mIHBhdGggOiBtX3Jlc29sdmVkUGF0aHMuYWRkaXRpb25hbFdlYlBy
b2Nlc3NTYW5kYm94RXh0ZW5zaW9uUGF0aHMpIHsKLSAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0g
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZVdpdGhvdXRSZXNvbHZpbmdQYXRoKHBhdGgs
IFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5KSkKLSAgICAgICAgICAgIHBhcmFtZXRl
cnMuYWRkaXRpb25hbFNhbmRib3hFeHRlbnNpb25IYW5kbGVzLmFwcGVuZChXVEZNb3ZlKCpoYW5k
bGUpKTsKLSAgICB9CisgICAgcGFyYW1ldGVycy5hZGRpdGlvbmFsU2FuZGJveEV4dGVuc2lvbkhh
bmRsZXMgPSBXVEY6OmNvbXBhY3RNYXAobV9yZXNvbHZlZFBhdGhzLmFkZGl0aW9uYWxXZWJQcm9j
ZXNzU2FuZGJveEV4dGVuc2lvblBhdGhzLCBbXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVy
biBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVXaXRob3V0UmVzb2x2aW5nUGF0aChwYXRo
LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25seSk7CisgICAgfSk7CiAKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQogICAgIHNldEphdmFTY3JpcHRDb25maWd1cmF0aW9uRmlsZUVuYWJs
ZWRGcm9tRGVmYXVsdHMoKTsKQEAgLTE4NzAsMTQgKzE4NjksOSBAQCB2b2lkIFdlYlByb2Nlc3NQ
b29sOjpyZW1vdmVQcm9jZXNzRnJvbU9yaWdpbkNhY2hlU2V0KFdlYlByb2Nlc3NQcm94eSYgcHJv
Y2VzcykKICAgICBMT0coUHJvY2Vzc1N3YXBwaW5nLCAiKFByb2Nlc3NTd2FwcGluZykgUmVtb3Zp
bmcgcHJvY2VzcyB3aXRoIHBpZCAlaSBmcm9tIHRoZSBvcmlnaW4gY2FjaGUgc2V0IiwgcHJvY2Vz
cy5wcm9jZXNzSWRlbnRpZmllcigpKTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSB2ZXJ5
IGluZWZmaWNpZW50IGFzIHRoZSBudW1iZXIgb2YgcmVtZW1iZXJlZCBvcmlnaW5zIGFuZCBwcm9j
ZXNzZXMgZ3Jvd3MKLSAgICBWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IHJlZ2lz
dHJhYmxlRG9tYWluc1RvUmVtb3ZlOwotICAgIGZvciAoYXV0byBlbnRyeSA6IG1fc3dhcHBlZFBy
b2Nlc3Nlc1BlclJlZ2lzdHJhYmxlRG9tYWluKSB7Ci0gICAgICAgIGlmIChlbnRyeS52YWx1ZSA9
PSAmcHJvY2VzcykKLSAgICAgICAgICAgIHJlZ2lzdHJhYmxlRG9tYWluc1RvUmVtb3ZlLmFwcGVu
ZChlbnRyeS5rZXkpOwotICAgIH0KLQotICAgIGZvciAoYXV0byYgcmVnaXN0cmFibGVEb21haW4g
OiByZWdpc3RyYWJsZURvbWFpbnNUb1JlbW92ZSkKLSAgICAgICAgbV9zd2FwcGVkUHJvY2Vzc2Vz
UGVyUmVnaXN0cmFibGVEb21haW4ucmVtb3ZlKHJlZ2lzdHJhYmxlRG9tYWluKTsKKyAgICBtX3N3
YXBwZWRQcm9jZXNzZXNQZXJSZWdpc3RyYWJsZURvbWFpbi5yZW1vdmVJZihbJl0oYXV0byYgZW50
cnkpIHsKKyAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlID09ICZwcm9jZXNzOworICAgIH0pOwog
fQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzRm9yTmF2aWdhdGlvbihXZWJQYWdlUHJv
eHkmIHBhZ2UsIGNvbnN0IEFQSTo6TmF2aWdhdGlvbiYgbmF2aWdhdGlvbiwgUmVmPFdlYlByb2Nl
c3NQcm94eT4mJiBzb3VyY2VQcm9jZXNzLCBjb25zdCBVUkwmIHNvdXJjZVVSTCwgUHJvY2Vzc1N3
YXBSZXF1ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBXZWJQcm9j
ZXNzUHJveHk6OkNhcHRpdmVQb3J0YWxNb2RlIGNhcHRpdmVQb3J0YWxNb2RlLCBjb25zdCBGcmFt
ZUluZm9EYXRhJiBmcmFtZUluZm8sIFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmIGRhdGFTdG9yZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmLCBTdXNwZW5kZWRQ
YWdlUHJveHkqLCBjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCmluZGV4IGIxMjg2MGRmNTEwYmM0
ZTNkZmJiN2UzZmM5MjBiNWQwNDJiODQzMjEuLjM2OGEzOTU4N2RhMzNkZTY0YzFiODlkMGU2Mzhk
MzhiODhkN2ExN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5
LmNwcApAQCAtOTM2LDggKzkzNiw5IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojpwcm9jZXNzRGlk
VGVybWluYXRlT3JGYWlsZWRUb0xhdW5jaChQcm9jZXNzVGVybWluYXRpb25SZWFzCiAKICAgICAv
LyBUaGVyZSBpcyBhIG5lc3RlZCB0cmFuc2FjdGlvbiBpbiBXZWJQYWdlUHJveHk6OnJlc2V0U3Rh
dGVBZnRlclByb2Nlc3NFeGl0ZWQoKSB0aGF0IHdlIGRvbid0IHdhbnQgdG8gY29tbWl0IGJlZm9y
ZSB0aGUgY2xpZW50IGNhbGwgYmVsb3cgKGRpc3BhdGNoUHJvY2Vzc0RpZFRlcm1pbmF0ZSkuCiAg
ICAgVmVjdG9yPFBhZ2VMb2FkU3RhdGU6OlRyYW5zYWN0aW9uPiBwYWdlTG9hZFN0YXRlVHJhbnNh
Y3Rpb25zOworICAgIHBhZ2VMb2FkU3RhdGVUcmFuc2FjdGlvbnMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShwYWdlcy5zaXplKCkpOwogICAgIGZvciAoYXV0byYgcGFnZSA6IHBhZ2VzKSB7Ci0gICAg
ICAgIHBhZ2VMb2FkU3RhdGVUcmFuc2FjdGlvbnMuYXBwZW5kKHBhZ2UtPnBhZ2VMb2FkU3RhdGUo
KS50cmFuc2FjdGlvbigpKTsKKyAgICAgICAgcGFnZUxvYWRTdGF0ZVRyYW5zYWN0aW9ucy51bmNo
ZWNrZWRBcHBlbmQocGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnRyYW5zYWN0aW9uKCkpOwogICAgICAg
ICBwYWdlLT5yZXNldFN0YXRlQWZ0ZXJQcm9jZXNzVGVybWluYXRpb24ocmVhc29uKTsKICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vi
c2l0ZURhdGFTdG9yZS5jcHAKaW5kZXggYjM2ZDlhNzRiOWExNzVhMDgxNmI3YTJlMTRmMTM5ZGI1
ZWY1NmU2ZC4uNWVlMTVjNWVmZGE2ZjQ5MzkyNGRkMzdkMmEwMGMyMTAxMjU5M2FiNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9y
ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURh
dGFTdG9yZS5jcHAKQEAgLTQzMSw4ICs0MzEsMTAgQEAgcHJpdmF0ZToKICAgICBpZiAoZGF0YVR5
cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlKSkgewogICAgICAgICBtX3F1
ZXVlLT5kaXNwYXRjaChbbWVkaWFDYWNoZURpcmVjdG9yeSA9IG1fY29uZmlndXJhdGlvbi0+bWVk
aWFDYWNoZURpcmVjdG9yeSgpLmlzb2xhdGVkQ29weSgpLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsK
ICAgICAgICAgICAgIFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhOwotICAgICAgICAgICAgZm9yIChh
dXRvJiBvcmlnaW4gOiBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpvcmlnaW5zSW5NZWRpYUNh
Y2hlKG1lZGlhQ2FjaGVEaXJlY3RvcnkpKQotICAgICAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVu
dHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBl
OjpEaXNrQ2FjaGUsIDAgfSk7CisgICAgICAgICAgICBhdXRvIG9yaWdpbnMgPSBXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50OjpvcmlnaW5zSW5NZWRpYUNhY2hlKG1lZGlhQ2FjaGVEaXJlY3Rvcnkp
OworICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcyA9IFdURjo6bWFwKG9yaWdpbnMsIFtd
KGF1dG8mIG9yaWdpbikgeworICAgICAgICAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0YTo6RW50
cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlLCAwIH07CisgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkV2Vic2l0ZURhdGEoV1RG
TW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICB9KTsKICAgICB9CkBAIC00NjksOCArNDcxLDkg
QEAgcHJpdmF0ZToKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6
RGV2aWNlSWRIYXNoU2FsdCkpIHsKICAgICAgICAgbV9kZXZpY2VJZEhhc2hTYWx0U3RvcmFnZS0+
Z2V0RGV2aWNlSWRIYXNoU2FsdE9yaWdpbnMoW2NhbGxiYWNrQWdncmVnYXRvcl0oYXV0byYmIG9y
aWdpbnMpIHsKICAgICAgICAgICAgIFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhOwotICAgICAgICAg
ICAgd2hpbGUgKCFvcmlnaW5zLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0
YS5lbnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW5zLnRha2VBbnkoKSwg
V2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0LCAwIH0pOworICAgICAgICAgICAgd2Vi
c2l0ZURhdGEuZW50cmllcyA9IFdURjo6bWFwKG9yaWdpbnMsIFtdKGF1dG8mIG9yaWdpbikgewor
ICAgICAgICAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNp
dGVEYXRhVHlwZTo6RGV2aWNlSWRIYXNoU2FsdCwgMCB9OworICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFdlYnNpdGVEYXRhKFdURk1vdmUod2Vic2l0
ZURhdGEpKTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtNDc5LDEwICs0ODIsMTEgQEAgcHJpdmF0
ZToKICAgICAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW2ZldGNoT3B0aW9ucywgYXBwbGljYXRpb25D
YWNoZURpcmVjdG9yeSA9IG1fY29uZmlndXJhdGlvbi0+YXBwbGljYXRpb25DYWNoZURpcmVjdG9y
eSgpLmlzb2xhdGVkQ29weSgpLCBhcHBsaWNhdGlvbkNhY2hlRmxhdEZpbGVTdWJkaXJlY3RvcnlO
YW1lID0gbV9jb25maWd1cmF0aW9uLT5hcHBsaWNhdGlvbkNhY2hlRmxhdEZpbGVTdWJkaXJlY3Rv
cnlOYW1lKCkuaXNvbGF0ZWRDb3B5KCksIGNhbGxiYWNrQWdncmVnYXRvcl0gewogICAgICAgICAg
ICAgYXV0byBzdG9yYWdlID0gV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNyZWF0
ZShhcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5LCBhcHBsaWNhdGlvbkNhY2hlRmxhdEZpbGVTdWJk
aXJlY3RvcnlOYW1lKTsKICAgICAgICAgICAgIFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhOwotICAg
ICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBzdG9yYWdlLT5vcmlnaW5zV2l0aENhY2hlKCkp
IHsKKyAgICAgICAgICAgIGF1dG8gb3JpZ2lucyA9IHN0b3JhZ2UtPm9yaWdpbnNXaXRoQ2FjaGUo
KTsKKyAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMgPSBXVEY6Om1hcChvcmlnaW5zLCBb
Jl0oYXV0byYgb3JpZ2luKSB7CiAgICAgICAgICAgICAgICAgdWludDY0X3Qgc2l6ZSA9IGZldGNo
T3B0aW9ucy5jb250YWlucyhXZWJzaXRlRGF0YUZldGNoT3B0aW9uOjpDb21wdXRlU2l6ZXMpID8g
c3RvcmFnZS0+ZGlza1VzYWdlRm9yT3JpZ2luKG9yaWdpbikgOiAwOwotICAgICAgICAgICAgICAg
IHdlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwg
V2Vic2l0ZURhdGFUeXBlOjpPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZSwgc2l6ZSB9KTsKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGE6OkVudHJ5IHsg
b3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6Ok9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlLCBzaXpl
IH07CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRk
V2Vic2l0ZURhdGEoV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICB9KTsKICAgICB9CkBA
IC00OTAsOCArNDk0LDkgQEAgcHJpdmF0ZToKICAgICBpZiAoZGF0YVR5cGVzLmNvbnRhaW5zKFdl
YnNpdGVEYXRhVHlwZTo6V2ViU1FMRGF0YWJhc2VzKSAmJiBpc1BlcnNpc3RlbnQoKSkgewogICAg
ICAgICBtX3F1ZXVlLT5kaXNwYXRjaChbd2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkgPSBtX2NvbmZp
Z3VyYXRpb24tPndlYlNRTERhdGFiYXNlRGlyZWN0b3J5KCkuaXNvbGF0ZWRDb3B5KCksIGNhbGxi
YWNrQWdncmVnYXRvcl0oKSB7CiAgICAgICAgICAgICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsK
LSAgICAgICAgICAgIGZvciAoYXV0byYgb3JpZ2luIDogV2ViQ29yZTo6RGF0YWJhc2VUcmFja2Vy
Ojp0cmFja2VyV2l0aERhdGFiYXNlUGF0aCh3ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSktPm9yaWdp
bnMoKSkKLSAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZChXZWJzaXRl
RGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6V2ViU1FMRGF0YWJhc2VzLCAw
IH0pOworICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcyA9IFdlYkNvcmU6OkRhdGFiYXNl
VHJhY2tlcjo6dHJhY2tlcldpdGhEYXRhYmFzZVBhdGgod2ViU1FMRGF0YWJhc2VEaXJlY3Rvcnkp
LT5vcmlnaW5zKCkubWFwKFtdKGF1dG8mIG9yaWdpbikgeworICAgICAgICAgICAgICAgIHJldHVy
biBXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6V2ViU1FMRGF0
YWJhc2VzLCAwIH07CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVn
YXRvci0+YWRkV2Vic2l0ZURhdGEoV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICB9KTsK
ICAgICB9CkBAIC00OTksOCArNTA0LDkgQEAgcHJpdmF0ZToKICAgICBpZiAoZGF0YVR5cGVzLmNv
bnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6TWVkaWFLZXlzKSAmJiBpc1BlcnNpc3RlbnQoKSkgewog
ICAgICAgICBtX3F1ZXVlLT5kaXNwYXRjaChbbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSA9IG1f
Y29uZmlndXJhdGlvbi0+bWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSgpLmlzb2xhdGVkQ29weSgp
LCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKICAgICAgICAgICAgIFdlYnNpdGVEYXRhIHdlYnNpdGVE
YXRhOwotICAgICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBtZWRpYUtleU9yaWdpbnMobWVk
aWFLZXlzU3RvcmFnZURpcmVjdG9yeSkpCi0gICAgICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50
cmllcy5hcHBlbmQoV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6
Ok1lZGlhS2V5cywgMCB9KTsKKyAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMgPSBtZWRp
YUtleU9yaWdpbnMobWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSkubWFwKFtdKGF1dG8mIG9yaWdp
bikgeworICAgICAgICAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4s
IFdlYnNpdGVEYXRhVHlwZTo6TWVkaWFLZXlzLCAwIH07CisgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkV2Vic2l0ZURhdGEoV1RGTW92ZSh3ZWJzaXRl
RGF0YSkpOwogICAgICAgICB9KTsKICAgICB9CkBAIC03MTIsOCArNzE4LDkgQEAgdm9pZCBXZWJz
aXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFU
eXBlcywgY29uc3QgVmUKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGhvc3ROYW1lIDogZGF0
YVJlY29yZC5IU1RTQ2FjaGVIb3N0TmFtZXMpCiAgICAgICAgICAgICAgICAgICAgIEhTVFNDYWNo
ZUhvc3ROYW1lcy5hcHBlbmQoaG9zdE5hbWUpOwogI2lmIEVOQUJMRShJTlRFTExJR0VOVF9UUkFD
S0lOR19QUkVWRU5USU9OKQorICAgICAgICAgICAgICAgIHJlZ2lzdHJhYmxlRG9tYWlucy5yZXNl
cnZlQ2FwYWNpdHkocmVnaXN0cmFibGVEb21haW5zLnNpemUoKSArIGRhdGFSZWNvcmQucmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1JlZ2lzdHJhYmxlRG9tYWlucy5zaXplKCkpOwogICAgICAgICAgICAg
ICAgIGZvciAoYXV0byYgcmVnaXN0cmFibGVEb21haW4gOiBkYXRhUmVjb3JkLnJlc291cmNlTG9h
ZFN0YXRpc3RpY3NSZWdpc3RyYWJsZURvbWFpbnMpCi0gICAgICAgICAgICAgICAgICAgIHJlZ2lz
dHJhYmxlRG9tYWlucy5hcHBlbmQocmVnaXN0cmFibGVEb21haW4pOworICAgICAgICAgICAgICAg
ICAgICByZWdpc3RyYWJsZURvbWFpbnMudW5jaGVja2VkQXBwZW5kKHJlZ2lzdHJhYmxlRG9tYWlu
KTsKICNlbmRpZgogICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvVGV4dENoZWNrZXJJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvVGV4dENoZWNrZXJJT1MubW0KaW5kZXggZmEzYmM1MGIyNGZhZjJlZTVmZWU3NDZkMmJlYzgw
NGFhNGFmYjcyYy4uMDFhMTY3YTc4ZTM3Y2QzY2RmNGIxNmNlZWI5ODViZmE1YjU1YzY2YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1RleHRDaGVja2VySU9TLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbQpAQCAtMzQs
NiArMzQsNyBAQAogI2ltcG9ydCA8d3RmL0hhc2hNYXAuaD4KICNpbXBvcnQgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL2NvY29h
L1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewpAQCAtMjQwLDEyICsyNDEsMTMgQEAgVmVjdG9yPFRleHRDaGVja2luZ1Jl
c3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFNwZWxsRG9jdW1lbnRUYWcg
c3AKICAgICAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAg
ICAgICAgIHJlc3VsdC50eXBlID0gVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmc7CiAgICAgICAg
ICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFuZ2U7Ci0gICAgICAgICAgICAgICAgcmVz
dWx0cy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChXVEZN
b3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4
dENoZWNraW5nVHlwZUdyYW1tYXIgJiYgY2hlY2tpbmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tp
bmdUeXBlOjpHcmFtbWFyKSkgewogICAgICAgICAgICAgICAgIFRleHRDaGVja2luZ1Jlc3VsdCBy
ZXN1bHQ7CiAgICAgICAgICAgICAgICAgTlNBcnJheSAqZGV0YWlscyA9IFtpbmNvbWluZ1Jlc3Vs
dCBncmFtbWFyRGV0YWlsc107CiAgICAgICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hl
Y2tpbmdUeXBlOjpHcmFtbWFyOwogICAgICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3Vs
dFJhbmdlOworICAgICAgICAgICAgICAgIHJlc3VsdC5kZXRhaWxzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoZGV0YWlscy5jb3VudCk7CiAgICAgICAgICAgICAgICAgZm9yIChOU0RpY3Rpb25hcnkg
KmluY29taW5nRGV0YWlsIGluIGRldGFpbHMpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGluY29taW5nRGV0YWlsKTsKICAgICAgICAgICAgICAgICAgICAgR3JhbW1hckRldGFpbCBkZXRh
aWw7CkBAIC0yNTksMTMgKzI2MSwxMCBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0
Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3BlbGxEb2N1bWVudFRhZyBzcAogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgZGV0YWlsLnJhbmdlID0gZGV0YWls
TlNSYW5nZTsKICAgICAgICAgICAgICAgICAgICAgZGV0YWlsLnVzZXJEZXNjcmlwdGlvbiA9IFtp
bmNvbWluZ0RldGFpbCBvYmplY3RGb3JLZXk6QCJOU0dyYW1tYXJVc2VyRGVzY3JpcHRpb24iXTsK
LSAgICAgICAgICAgICAgICAgICAgTlNBcnJheSAqZ3Vlc3NlcyA9IFtpbmNvbWluZ0RldGFpbCBv
YmplY3RGb3JLZXk6QCJOU0dyYW1tYXJDb3JyZWN0aW9ucyJdOwotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChOU1N0cmluZyAqZ3Vlc3MgaW4gZ3Vlc3NlcykK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbC5ndWVzc2VzLmFwcGVuZChndWVzcyk7Ci0g
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC5kZXRhaWxzLmFwcGVuZChkZXRhaWwpOworICAgICAg
ICAgICAgICAgICAgICBkZXRhaWwuZ3Vlc3NlcyA9IG1ha2VWZWN0b3I8U3RyaW5nPihbaW5jb21p
bmdEZXRhaWwgb2JqZWN0Rm9yS2V5OkAiTlNHcmFtbWFyQ29ycmVjdGlvbnMiXSk7CisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC5kZXRhaWxzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGRldGFp
bCkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChy
ZXN1bHQpOworICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0YW50Lm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0KaW5kZXggY2M0
MmJmOWZhZDcxMzQ5ODMzNTBiMjc5NDMxZTY4Mzk2N2IyZTA4MS4uNGJmYTBjOTIwZTk5OTYyM2Nl
OTcwMTc4YWM3ZjVhZGUzMjdiYjIyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0KQEAgLTIwNywxMiArMjA3LDExIEBA
IC0gKENHUmVjdClwcmVzZW50YXRpb25SZWN0Rm9yRWxlbWVudFVzaW5nQ2xvc2VzdEluZGljYXRl
ZFJlY3QKIAogICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgdG91Y2hMb2NhdGlvbiA9IF9wb3NpdGlv
bkluZm9ybWF0aW9uLT5yZXF1ZXN0LnBvaW50OwogICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgbGlu
a0VsZW1lbnRMb2NhdGlvbiA9IGluZGljYXRvci50ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nv
b3JkaW5hdGVzLmxvY2F0aW9uKCk7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4gaW5k
aWNhdGVkUmVjdHM7Ci0gICAgZm9yIChhdXRvIHJlY3QgOiBpbmRpY2F0b3IudGV4dFJlY3RzSW5C
b3VuZGluZ1JlY3RDb29yZGluYXRlcykgeworICAgIGF1dG8gaW5kaWNhdGVkUmVjdHMgPSBpbmRp
Y2F0b3IudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcy5tYXAoWyZdKGF1dG8gcmVj
dCkgewogICAgICAgICByZWN0LmluZmxhdGUoMik7CiAgICAgICAgIHJlY3QubW92ZUJ5KGxpbmtF
bGVtZW50TG9jYXRpb24pOwotICAgICAgICBpbmRpY2F0ZWRSZWN0cy5hcHBlbmQocmVjdCk7Ci0g
ICAgfQorICAgICAgICByZXR1cm4gcmVjdDsKKyAgICB9KTsKIAogICAgIGZvciAoY29uc3QgYXV0
byYgcGF0aCA6IFdlYkNvcmU6OlBhdGhVdGlsaXRpZXM6OnBhdGhzV2l0aFNocmlua1dyYXBwZWRS
ZWN0cyhpbmRpY2F0ZWRSZWN0cywgMCkpIHsKICAgICAgICAgYXV0byBib3VuZGluZ1JlY3QgPSBw
YXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9U
ZXh0Q2hlY2tlck1hYy5tbQppbmRleCAxNmQ2ODM4ZTU0OGUwNDMyZmJkMThmOGQ0ZDJhZGUxYzJj
MTA4ZjZlLi5lY2UyZTNlMjQ1MzE1ZWU3MWFkOTc5N2ZhNmNjODBiNDI5MzMwZDExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0KKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFjLm1tCkBAIC0zNDQsMTIg
KzM0NCwxMyBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tU
ZXh0T2ZQYXJhZ3JhcGgoU3BlbGxEb2N1bWVudFRhZyBzcAogICAgICAgICAgICAgVGV4dENoZWNr
aW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgIHJlc3VsdC50eXBlID0gVGV4dENoZWNraW5n
VHlwZTo6U3BlbGxpbmc7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5nZTsK
LSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICByZXN1bHRz
LmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdFR5cGUg
PT0gTlNUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiBjaGVja2luZ1R5cGVzLmNvbnRhaW5zKFRl
eHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpKSB7CiAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1
bHQgcmVzdWx0OwogICAgICAgICAgICAgTlNBcnJheSAqZGV0YWlscyA9IFtpbmNvbWluZ1Jlc3Vs
dCBncmFtbWFyRGV0YWlsc107CiAgICAgICAgICAgICByZXN1bHQudHlwZSA9IFRleHRDaGVja2lu
Z1R5cGU6OkdyYW1tYXI7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5nZTsK
KyAgICAgICAgICAgIHJlc3VsdC5kZXRhaWxzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGV0YWls
cy5jb3VudCk7CiAgICAgICAgICAgICBmb3IgKE5TRGljdGlvbmFyeSAqaW5jb21pbmdEZXRhaWwg
aW4gZGV0YWlscykgewogICAgICAgICAgICAgICAgIEFTU0VSVChpbmNvbWluZ0RldGFpbCk7CiAg
ICAgICAgICAgICAgICAgR3JhbW1hckRldGFpbCBkZXRhaWw7CkBAIC0zNjEsOSArMzYyLDggQEAg
VmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdy
YXBoKFNwZWxsRG9jdW1lbnRUYWcgc3AKICAgICAgICAgICAgICAgICBkZXRhaWwucmFuZ2UgPSBk
ZXRhaWxOU1JhbmdlOwogICAgICAgICAgICAgICAgIGRldGFpbC51c2VyRGVzY3JpcHRpb24gPSBb
aW5jb21pbmdEZXRhaWwgb2JqZWN0Rm9yS2V5Ok5TR3JhbW1hclVzZXJEZXNjcmlwdGlvbl07CiAg
ICAgICAgICAgICAgICAgTlNBcnJheSAqZ3Vlc3NlcyA9IFtpbmNvbWluZ0RldGFpbCBvYmplY3RG
b3JLZXk6TlNHcmFtbWFyQ29ycmVjdGlvbnNdOwotICAgICAgICAgICAgICAgIGZvciAoTlNTdHJp
bmcgKmd1ZXNzIGluIGd1ZXNzZXMpCi0gICAgICAgICAgICAgICAgICAgIGRldGFpbC5ndWVzc2Vz
LmFwcGVuZChTdHJpbmcoZ3Vlc3MpKTsKLSAgICAgICAgICAgICAgICByZXN1bHQuZGV0YWlscy5h
cHBlbmQoZGV0YWlsKTsKKyAgICAgICAgICAgICAgICBkZXRhaWwuZ3Vlc3NlcyA9IG1ha2VWZWN0
b3I8U3RyaW5nPihndWVzc2VzKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuZGV0YWlscy51bmNo
ZWNrZWRBcHBlbmQoV1RGTW92ZShkZXRhaWwpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7CiAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0VHlwZSA9
PSBOU1RleHRDaGVja2luZ1R5cGVMaW5rICYmIGNoZWNraW5nVHlwZXMuY29udGFpbnMoVGV4dENo
ZWNraW5nVHlwZTo6TGluaykpIHsKQEAgLTM3MSwzMSArMzcxLDMxIEBAIFZlY3RvcjxUZXh0Q2hl
Y2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChTcGVsbERvY3Vt
ZW50VGFnIHNwCiAgICAgICAgICAgICByZXN1bHQudHlwZSA9IFRleHRDaGVja2luZ1R5cGU6Okxp
bms7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5nZTsKICAgICAgICAgICAg
IHJlc3VsdC5yZXBsYWNlbWVudCA9IFtbaW5jb21pbmdSZXN1bHQgVVJMXSBhYnNvbHV0ZVN0cmlu
Z107Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgcmVz
dWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRU
eXBlID09IE5TVGV4dENoZWNraW5nVHlwZVF1b3RlICYmIGNoZWNraW5nVHlwZXMuY29udGFpbnMo
VGV4dENoZWNraW5nVHlwZTo6UXVvdGUpKSB7CiAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1
bHQgcmVzdWx0OwogICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpR
dW90ZTsKICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJhbmdlOwogICAgICAgICAg
ICAgcmVzdWx0LnJlcGxhY2VtZW50ID0gW2luY29taW5nUmVzdWx0IHJlcGxhY2VtZW50U3RyaW5n
XTsKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICByZXN1
bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdFR5
cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlRGFzaCAmJiBjaGVja2luZ1R5cGVzLmNvbnRhaW5zKFRl
eHRDaGVja2luZ1R5cGU6OkRhc2gpKSB7CiAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQg
cmVzdWx0OwogICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpEYXNo
OwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFuZ2U7CiAgICAgICAgICAgICBy
ZXN1bHQucmVwbGFjZW1lbnQgPSBbaW5jb21pbmdSZXN1bHQgcmVwbGFjZW1lbnRTdHJpbmddOwot
ICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3VsdHMu
YXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0VHlwZSA9
PSBOU1RleHRDaGVja2luZ1R5cGVSZXBsYWNlbWVudCAmJiBjaGVja2luZ1R5cGVzLmNvbnRhaW5z
KFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50KSkgewogICAgICAgICAgICAgVGV4dENoZWNr
aW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgIHJlc3VsdC50eXBlID0gVGV4dENoZWNraW5n
VHlwZTo6UmVwbGFjZW1lbnQ7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5n
ZTsKICAgICAgICAgICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IFtpbmNvbWluZ1Jlc3VsdCByZXBs
YWNlbWVudFN0cmluZ107Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAg
ICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgfSBlbHNl
IGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb24gJiYgY2hlY2tp
bmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpDb3JyZWN0aW9uKSkgewogICAgICAg
ICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgIHJlc3VsdC50eXBl
ID0gVGV4dENoZWNraW5nVHlwZTo6Q29ycmVjdGlvbjsKICAgICAgICAgICAgIHJlc3VsdC5yYW5n
ZSA9IHJlc3VsdFJhbmdlOwogICAgICAgICAgICAgcmVzdWx0LnJlcGxhY2VtZW50ID0gW2luY29t
aW5nUmVzdWx0IHJlcGxhY2VtZW50U3RyaW5nXTsKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5k
KHJlc3VsdCk7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwog
ICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
QXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3IuY3BwCmluZGV4IDczNTc2YTI0N2Nl
MTE3NTI3NTY1ZmIxZDI2YjRjZDA5YjI0NzJlOWYuLjEyN2FjMWU0NTc3MTViZjdkZmIwZTljOTNh
MTA0MjBiNGY1YzM1NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9BcHBs
ZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3IuY3BwCkBAIC05OCw5ICs5OCw5IEBA
IHZvaWQgV2ViUGF5bWVudENvb3JkaW5hdG9yOjpvcGVuUGF5bWVudFNldHVwKGNvbnN0IFN0cmlu
ZyYgbWVyY2hhbnRJZGVudGlmaWVyLCBjCiAKIGJvb2wgV2ViUGF5bWVudENvb3JkaW5hdG9yOjpz
aG93UGF5bWVudFVJKGNvbnN0IFVSTCYgb3JpZ2luYXRpbmdVUkwsIGNvbnN0IFZlY3RvcjxVUkw+
JiBsaW5rSWNvblVSTHMsIGNvbnN0IFdlYkNvcmU6OkFwcGxlUGF5U2Vzc2lvblBheW1lbnRSZXF1
ZXN0JiBwYXltZW50UmVxdWVzdCkKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiBsaW5rSWNvblVSTFN0
cmluZ3M7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBsaW5rSWNvblVSTCA6IGxpbmtJY29uVVJMcykK
LSAgICAgICAgbGlua0ljb25VUkxTdHJpbmdzLmFwcGVuZChsaW5rSWNvblVSTC5zdHJpbmcoKSk7
CisgICAgYXV0byBsaW5rSWNvblVSTFN0cmluZ3MgPSBsaW5rSWNvblVSTHMubWFwKFtdKGF1dG8m
IGxpbmtJY29uVVJMKSB7CisgICAgICAgIHJldHVybiBsaW5rSWNvblVSTC5zdHJpbmcoKTsKKyAg
ICB9KTsKIAogICAgIGJvb2wgcmVzdWx0OwogICAgIGlmICghc2VuZFN5bmMoTWVzc2FnZXM6Oldl
YlBheW1lbnRDb29yZGluYXRvclByb3h5OjpTaG93UGF5bWVudFVJKG1fd2ViUGFnZS5pZGVudGlm
aWVyKCksIG1fd2ViUGFnZS53ZWJQYWdlUHJveHlJZGVudGlmaWVyKCksIG9yaWdpbmF0aW5nVVJM
LnN0cmluZygpLCBsaW5rSWNvblVSTFN0cmluZ3MsIHBheW1lbnRSZXF1ZXN0KSwgTWVzc2FnZXM6
OldlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpTaG93UGF5bWVudFVJOjpSZXBseShyZXN1bHQp
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1
dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0F1dG9t
YXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5jcHAKaW5kZXggYjBmZTgzNTcyMjNiMzEz
M2ZjNGRiMmZiYWFkOGU3MzlmNWUzYjlkNi4uZjQ1Y2ZiNDE5MTM2YjdjZjA4ZTNiZmQ0OTZiMmI2
OTdhM2M5ZWZlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5jcHAKQEAgLTgwNSwx
MyArODA1LDEyIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6c2V0RmlsZXNGb3JJ
bnB1dEZpbGVVcGxvYWQoV2ViQ29yZTo6UGFnZUlkZW50aWZpCiAgICAgYXV0byYgaW5wdXRFbGVt
ZW50ID0gZG93bmNhc3Q8V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudD4oKmNvcmVFbGVtZW50KTsK
ICAgICBWZWN0b3I8UmVmPFdlYkNvcmU6OkZpbGU+PiBmaWxlT2JqZWN0czsKICAgICBpZiAoaW5w
dXRFbGVtZW50Lm11bHRpcGxlKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIGZpbGVzID0gaW5wdXRF
bGVtZW50LmZpbGVzKCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgZmlsZSA6IGZpbGVzLT5m
aWxlcygpKQotICAgICAgICAgICAgICAgIGZpbGVPYmplY3RzLmFwcGVuZChmaWxlLmNvcHlSZWYo
KSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8qIGZpbGVzID0gaW5wdXRFbGVtZW50LmZp
bGVzKCkpCisgICAgICAgICAgICBmaWxlT2JqZWN0cy5hcHBlbmRWZWN0b3IoZmlsZXMtPmZpbGVz
KCkpOwogICAgIH0KKyAgICBmaWxlT2JqZWN0cy5yZXNlcnZlQ2FwYWNpdHkoZmlsZU9iamVjdHMu
c2l6ZSgpICsgZmlsZW5hbWVzLnNpemUoKSk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBwYXRoIDog
ZmlsZW5hbWVzKQotICAgICAgICBmaWxlT2JqZWN0cy5hcHBlbmQoV2ViQ29yZTo6RmlsZTo6Y3Jl
YXRlKCZpbnB1dEVsZW1lbnQuZG9jdW1lbnQoKSwgcGF0aCkpOworICAgICAgICBmaWxlT2JqZWN0
cy51bmNoZWNrZWRBcHBlbmQoV2ViQ29yZTo6RmlsZTo6Y3JlYXRlKCZpbnB1dEVsZW1lbnQuZG9j
dW1lbnQoKSwgcGF0aCkpOwogICAgIGlucHV0RWxlbWVudC5zZXRGaWxlcyhXZWJDb3JlOjpGaWxl
TGlzdDo6Y3JlYXRlKFdURk1vdmUoZmlsZU9iamVjdHMpKSk7CiAKICAgICBjb21wbGV0aW9uSGFu
ZGxlcihzdGQ6Om51bGxvcHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIuY3BwCmluZGV4IDdj
OWQ0NTY5YTRlNTBiMDcxM2E3N2E4YjRhYzI0MGZhZTQ2ZGRkMWUuLjgxM2FmMjg1OTgzY2I4MmMz
MGYyNGUyNTM3MTU1YzdmMGYzYjYxMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlci5jcHAK
QEAgLTE2MCw4ICsxNjAsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFQbGF5ZXJQcml2YXRlSW50
ZXJmYWNlPiBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXI6OmNyZWF0ZVJlbQogICAgIHByb3h5Q29u
ZmlndXJhdGlvbi5pc1ZpZGVvID0gcGxheWVyLT5pc1ZpZGVvUGxheWVyKCk7CiAKICNpZiBFTkFC
TEUoQVZGX0NBUFRJT05TKQotICAgIGZvciAoY29uc3QgYXV0byYgdHJhY2sgOiBwbGF5ZXItPm91
dE9mQmFuZFRyYWNrU291cmNlcygpKQotICAgICAgICBwcm94eUNvbmZpZ3VyYXRpb24ub3V0T2ZC
YW5kVHJhY2tEYXRhLmFwcGVuZCh0cmFjay0+ZGF0YSgpKTsKKyAgICBwcm94eUNvbmZpZ3VyYXRp
b24ub3V0T2ZCYW5kVHJhY2tEYXRhID0gcGxheWVyLT5vdXRPZkJhbmRUcmFja1NvdXJjZXMoKS5t
YXAoW10oYXV0byYgdHJhY2spIHsKKyAgICAgICAgcmV0dXJuIHRyYWNrLT5kYXRhKCk7CisgICAg
fSk7CiAjZW5kaWYKIAogICAgIGF1dG8gZG9jdW1lbnRTZWN1cml0eU9yaWdpbiA9IHBsYXllci0+
ZG9jdW1lbnRTZWN1cml0eU9yaWdpbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9tZWRpYS9Tb3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvU291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZS5jcHAK
aW5kZXggOTY2ZmM5M2I3N2FmYWEzZTYyMDhkN2FiYTVhZWQyYzdhOTRjNzRiMi4uNGVmMTY0MGE0
MDEwMDZhNmI4ZjY5Y2M1MDExNjRhOGJkMTkwZWI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9Tb3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1NvdXJjZUJ1ZmZlclByaXZhdGVS
ZW1vdGUuY3BwCkBAIC0zMzgsMTYgKzMzOCwxMSBAQCB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVS
ZW1vdGU6OnVwZGF0ZVRyYWNrSWRzKFZlY3RvcjxzdGQ6OnBhaXI8QXRvbVN0cmluZywgQXRvbQog
ICAgIGlmICghbV9ncHVQcm9jZXNzQ29ubmVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAg
VmVjdG9yPHN0ZDo6cGFpcjxUcmFja1ByaXZhdGVSZW1vdGVJZGVudGlmaWVyLCBUcmFja1ByaXZh
dGVSZW1vdGVJZGVudGlmaWVyPj4gaWRlbnRpZmllclBhaXJzOwotCi0gICAgZm9yIChhdXRvJiB0
cmFja0lkUGFpciA6IHRyYWNrSWRQYWlycykgeworICAgIGF1dG8gaWRlbnRpZmllclBhaXJzID0g
dHJhY2tJZFBhaXJzLm1hcChbdGhpc10oYXV0byYgdHJhY2tJZFBhaXIpIHsKICAgICAgICAgQVNT
RVJUKG1fcHJldlRyYWNrSWRlbnRpZmllck1hcC5jb250YWlucyh0cmFja0lkUGFpci5maXJzdCkp
OwogICAgICAgICBBU1NFUlQobV90cmFja0lkZW50aWZpZXJNYXAuY29udGFpbnModHJhY2tJZFBh
aXIuc2Vjb25kKSk7Ci0KLSAgICAgICAgYXV0byBvbGRJZGVudGlmaWVyID0gbV9wcmV2VHJhY2tJ
ZGVudGlmaWVyTWFwLnRha2UodHJhY2tJZFBhaXIuZmlyc3QpOwotICAgICAgICBhdXRvIG5ld0lk
ZW50aWZpZXIgPSBtX3RyYWNrSWRlbnRpZmllck1hcC5nZXQodHJhY2tJZFBhaXIuc2Vjb25kKTsK
LSAgICAgICAgaWRlbnRpZmllclBhaXJzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihvbGRJZGVudGlm
aWVyLCBuZXdJZGVudGlmaWVyKSk7Ci0gICAgfQorICAgICAgICByZXR1cm4gc3RkOjpwYWlyIHsg
bV9wcmV2VHJhY2tJZGVudGlmaWVyTWFwLnRha2UodHJhY2tJZFBhaXIuZmlyc3QpLCBtX3RyYWNr
SWRlbnRpZmllck1hcC5nZXQodHJhY2tJZFBhaXIuc2Vjb25kKSB9OworICAgIH0pOwogCiAgICAg
bV9ncHVQcm9jZXNzQ29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6OlJlbW90
ZVNvdXJjZUJ1ZmZlclByb3h5OjpVcGRhdGVUcmFja0lkcyhpZGVudGlmaWVyUGFpcnMpLCBtX3Jl
bW90ZVNvdXJjZUJ1ZmZlcklkZW50aWZpZXIpOwogfQpAQCAtMzgzLDI3ICszNzgsMzAgQEAgdm9p
ZCBTb3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlOjpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2
ZUluaXRpYWxpemF0aW9uU2VnbWUKICAgICBzZWdtZW50LmR1cmF0aW9uID0gc2VnbWVudEluZm8u
ZHVyYXRpb247CiAKICAgICBtX3ByZXZUcmFja0lkZW50aWZpZXJNYXAuc3dhcChtX3RyYWNrSWRl
bnRpZmllck1hcCk7CisgICAgc2VnbWVudC5hdWRpb1RyYWNrcy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KHNlZ21lbnRJbmZvLmF1ZGlvVHJhY2tzLnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiBhdWRp
b1RyYWNrIDogc2VnbWVudEluZm8uYXVkaW9UcmFja3MpIHsKICAgICAgICAgU291cmNlQnVmZmVy
UHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25TZWdtZW50OjpBdWRpb1RyYWNrSW5mb3JtYXRp
b24gaW5mbzsKICAgICAgICAgaW5mby50cmFjayA9IG1fbWVkaWFQbGF5ZXJQcml2YXRlLT5hdWRp
b1RyYWNrUHJpdmF0ZVJlbW90ZShhdWRpb1RyYWNrLmlkZW50aWZpZXIpOwogICAgICAgICBpbmZv
LmRlc2NyaXB0aW9uID0gUmVtb3RlTWVkaWFEZXNjcmlwdGlvbjo6Y3JlYXRlKGF1ZGlvVHJhY2su
ZGVzY3JpcHRpb24pOwotICAgICAgICBzZWdtZW50LmF1ZGlvVHJhY2tzLmFwcGVuZChpbmZvKTsK
KyAgICAgICAgc2VnbWVudC5hdWRpb1RyYWNrcy51bmNoZWNrZWRBcHBlbmQoaW5mbyk7CiAgICAg
ICAgIG1fdHJhY2tJZGVudGlmaWVyTWFwLmFkZChpbmZvLnRyYWNrLT5pZCgpLCBhdWRpb1RyYWNr
LmlkZW50aWZpZXIpOwogICAgIH0KIAorICAgIHNlZ21lbnQudmlkZW9UcmFja3MucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShzZWdtZW50SW5mby52aWRlb1RyYWNrcy5zaXplKCkpOwogICAgIGZvciAo
YXV0byYgdmlkZW9UcmFjayA6IHNlZ21lbnRJbmZvLnZpZGVvVHJhY2tzKSB7CiAgICAgICAgIFNv
dXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudDo6VmlkZW9UcmFj
a0luZm9ybWF0aW9uIGluZm87CiAgICAgICAgIGluZm8udHJhY2sgPSBtX21lZGlhUGxheWVyUHJp
dmF0ZS0+dmlkZW9UcmFja1ByaXZhdGVSZW1vdGUodmlkZW9UcmFjay5pZGVudGlmaWVyKTsKICAg
ICAgICAgaW5mby5kZXNjcmlwdGlvbiA9IFJlbW90ZU1lZGlhRGVzY3JpcHRpb246OmNyZWF0ZSh2
aWRlb1RyYWNrLmRlc2NyaXB0aW9uKTsKLSAgICAgICAgc2VnbWVudC52aWRlb1RyYWNrcy5hcHBl
bmQoaW5mbyk7CisgICAgICAgIHNlZ21lbnQudmlkZW9UcmFja3MudW5jaGVja2VkQXBwZW5kKGlu
Zm8pOwogICAgICAgICBtX3RyYWNrSWRlbnRpZmllck1hcC5hZGQoaW5mby50cmFjay0+aWQoKSwg
dmlkZW9UcmFjay5pZGVudGlmaWVyKTsKICAgICB9CiAKKyAgICBzZWdtZW50LnRleHRUcmFja3Mu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzZWdtZW50SW5mby50ZXh0VHJhY2tzLnNpemUoKSk7CiAg
ICAgZm9yIChhdXRvJiB0ZXh0VHJhY2sgOiBzZWdtZW50SW5mby50ZXh0VHJhY2tzKSB7CiAgICAg
ICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudDo6VGV4
dFRyYWNrSW5mb3JtYXRpb24gaW5mbzsKICAgICAgICAgaW5mby50cmFjayA9IG1fbWVkaWFQbGF5
ZXJQcml2YXRlLT50ZXh0VHJhY2tQcml2YXRlUmVtb3RlKHRleHRUcmFjay5pZGVudGlmaWVyKTsK
ICAgICAgICAgaW5mby5kZXNjcmlwdGlvbiA9IFJlbW90ZU1lZGlhRGVzY3JpcHRpb246OmNyZWF0
ZSh0ZXh0VHJhY2suZGVzY3JpcHRpb24pOwotICAgICAgICBzZWdtZW50LnRleHRUcmFja3MuYXBw
ZW5kKGluZm8pOworICAgICAgICBzZWdtZW50LnRleHRUcmFja3MudW5jaGVja2VkQXBwZW5kKGlu
Zm8pOwogICAgICAgICBtX3RyYWNrSWRlbnRpZmllck1hcC5hZGQoaW5mby50cmFjay0+aWQoKSwg
dGV4dFRyYWNrLmlkZW50aWZpZXIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAKaW5kZXggZDA3MGMy
Yjc5ZGY0MGNhY2I0MThmMDY3ODI2N2U0YzNiNGE1NDYxYy4uMWMyMjczNDMyNTQ1YWJmM2M5MDZi
ODVkYzE3ZDliOTlkNGUxZjdhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwCkBAIC0zOTIsOSArMzkyLDkgQEAg
TGliV2ViUlRDQ29kZWNzOjpFbmNvZGVyKiBMaWJXZWJSVENDb2RlY3M6OmNyZWF0ZUVuY29kZXIo
VHlwZSB0eXBlLCBjb25zdCBzdGQ6Om0KICAgICBlbmNvZGVyLT5pZGVudGlmaWVyID0gUlRDRW5j
b2RlcklkZW50aWZpZXI6OmdlbmVyYXRlVGhyZWFkU2FmZSgpOwogICAgIGVuY29kZXItPmNvZGVj
VHlwZSA9IHRvV2ViUlRDQ29kZWNUeXBlKHR5cGUpOwogCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjxT
dHJpbmcsIFN0cmluZz4+IHBhcmFtZXRlcnM7Ci0gICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6IGZv
cm1hdFBhcmFtZXRlcnMpCi0gICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KFN0cmluZzo6ZnJvbVVURjgoa2V5VmFsdWUuZmlyc3QuZGF0YSgpLCBrZXlWYWx1ZS5maXJzdC5s
ZW5ndGgoKSksIFN0cmluZzo6ZnJvbVVURjgoa2V5VmFsdWUuc2Vjb25kLmRhdGEoKSwga2V5VmFs
dWUuc2Vjb25kLmxlbmd0aCgpKSkpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IFdURjo6bWFwKGZv
cm1hdFBhcmFtZXRlcnMsIFtdKGF1dG8mIGVudHJ5KSB7CisgICAgICAgIHJldHVybiBzdGQ6OnBh
aXIgeyBTdHJpbmc6OmZyb21VVEY4KGVudHJ5LmZpcnN0LmRhdGEoKSwgZW50cnkuZmlyc3QubGVu
Z3RoKCkpLCBTdHJpbmc6OmZyb21VVEY4KGVudHJ5LnNlY29uZC5kYXRhKCksIGVudHJ5LnNlY29u
ZC5sZW5ndGgoKSkgfTsKKyAgICB9KTsKIAogICAgIGVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9u
QW5kRGlzcGF0Y2hUb1RocmVhZChbdGhpcywgZW5jb2RlciA9IFdURk1vdmUoZW5jb2RlciksIHR5
cGUsIHBhcmFtZXRlcnMgPSBXVEZNb3ZlKHBhcmFtZXRlcnMpXSgpIG11dGFibGUgewogICAgICAg
ICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAKaW5kZXggZDg1NDJh
MmIxMGIxYjNlMTUzNjE0MTU0MTE1ZWY3ZWNlYzQ0ZWI4OC4uNmY4Zjc0NTM1OTI0NTNlMGU2MTg2
NzYxMjQ0ZTBiNzc5MjIxZGU3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVy
bGF5LmNwcApAQCAtMTk3LDExICsxOTcsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgYXV0byB3a05h
bWVzID0gbV9hY2Nlc3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmNvcHlBY2Nlc3NpYmlsaXR5QXR0
cmlidXRlTmFtZXModG9BUEkoJnBhZ2VPdmVybGF5KSwgcGFyYW1lcml6ZWROYW1lcywgbV9hY2Nl
c3NpYmlsaXR5Q2xpZW50LmNsaWVudCgpLmJhc2UuY2xpZW50SW5mbyk7CiAKICAgICAgICAgc2l6
ZV90IGNvdW50ID0gV0tBcnJheUdldFNpemUod2tOYW1lcyk7CisgICAgICAgIG5hbWVzLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoY291bnQpOwogICAgICAgICBmb3IgKHNpemVfdCBrID0gMDsgayA8
IGNvdW50OyBrKyspIHsKICAgICAgICAgICAgIFdLVHlwZVJlZiBpdGVtID0gV0tBcnJheUdldEl0
ZW1BdEluZGV4KHdrTmFtZXMsIGspOwogICAgICAgICAgICAgaWYgKFdlYktpdDo6dG9JbXBsKGl0
ZW0pLT50eXBlKCkgPT0gQVBJOjpTdHJpbmc6OkFQSVR5cGUpCi0gICAgICAgICAgICAgICAgbmFt
ZXMuYXBwZW5kKFdlYktpdDo6dG9XVEZTdHJpbmcoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KGl0
ZW0pKSk7CisgICAgICAgICAgICAgICAgbmFtZXMudW5jaGVja2VkQXBwZW5kKFdlYktpdDo6dG9X
VEZTdHJpbmcoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KGl0ZW0pKSk7CiAgICAgICAgIH0KKyAg
ICAgICAgbmFtZXMuc2hyaW5rVG9GaXQoKTsKIAogICAgICAgICByZXR1cm4gbmFtZXM7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1Nl
c3Npb25TdGF0ZUNvbnZlcnNpb24uY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1Nlc3Npb25TdGF0ZUNvbnZlcnNpb24uY3BwCmluZGV4IGM4ZjI0OGE2NDc2NTc2
YTI5MmM3NWQ1ZmFhNjhmNWFjNjNhNDc1YzguLjU2N2Q0NzUxYmVlODNhM2IzZjRmNmUwZmEyMzc3
YmQwMDYzNTBhMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9TZXNzaW9uU3RhdGVDb252ZXJzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvU2Vzc2lvblN0YXRlQ29udmVyc2lvbi5jcHAKQEAgLTk5
LDEwICs5OSw5IEBAIHN0YXRpYyBGcmFtZVN0YXRlIHRvRnJhbWVTdGF0ZShjb25zdCBIaXN0b3J5
SXRlbSYgaGlzdG9yeUl0ZW0pCiAgICAgZnJhbWVTdGF0ZS5vYnNjdXJlZEluc2V0cyA9IGhpc3Rv
cnlJdGVtLm9ic2N1cmVkSW5zZXRzKCk7CiAjZW5kaWYKIAotICAgIGZvciAoYXV0byYgY2hpbGRI
aXN0b3J5SXRlbSA6IGhpc3RvcnlJdGVtLmNoaWxkcmVuKCkpIHsKLSAgICAgICAgRnJhbWVTdGF0
ZSBjaGlsZEZyYW1lU3RhdGUgPSB0b0ZyYW1lU3RhdGUoY2hpbGRIaXN0b3J5SXRlbSk7Ci0gICAg
ICAgIGZyYW1lU3RhdGUuY2hpbGRyZW4uYXBwZW5kKFdURk1vdmUoY2hpbGRGcmFtZVN0YXRlKSk7
Ci0gICAgfQorICAgIGZyYW1lU3RhdGUuY2hpbGRyZW4gPSBoaXN0b3J5SXRlbS5jaGlsZHJlbigp
Lm1hcChbXShhdXRvJiBjaGlsZEhpc3RvcnlJdGVtKSB7CisgICAgICAgIHJldHVybiB0b0ZyYW1l
U3RhdGUoY2hpbGRIaXN0b3J5SXRlbSk7CisgICAgfSk7CiAKICAgICByZXR1cm4gZnJhbWVTdGF0
ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3Zp
ZGVyLmNwcAppbmRleCBmOWFmOWFiOTNmN2UwMTI4NzczNjUwYzFkMjQ5NWFkZGUzOWZkNDM1Li4x
ZDExZjQyM2MxNzg4ZDU5N2ZmMjU3OGVlNjBkOWNiNjE2YTBkZDM4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRGV2aWNlT3JpZW50YXRpb25V
cGRhdGVQcm92aWRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXIuY3BwCkBAIC04MywxMSAr
ODMsNyBAQCB2b2lkIFdlYkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXI6OnN0b3BVcGRh
dGluZ0RldmljZU1vdGlvbihXZWJDb3JlOjpNb3RpbwogCiB2b2lkIFdlYkRldmljZU9yaWVudGF0
aW9uVXBkYXRlUHJvdmlkZXI6OmRldmljZU9yaWVudGF0aW9uQ2hhbmdlZChkb3VibGUgYWxwaGEs
IGRvdWJsZSBiZXRhLCBkb3VibGUgZ2FtbWEsIGRvdWJsZSBjb21wYXNzSGVhZGluZywgZG91Ymxl
IGNvbXBhc3NBY2N1cmFjeSkKIHsKLSAgICBWZWN0b3I8V2Vha1B0cjxXZWJDb3JlOjpNb3Rpb25N
YW5hZ2VyQ2xpZW50Pj4gY2xpZW50czsKLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IG1fZGV2aWNl
T3JpZW50YXRpb25DbGllbnRzKQotICAgICAgICBjbGllbnRzLmFwcGVuZChjbGllbnQpOwotCi0g
ICAgZm9yIChhdXRvJiBjbGllbnQgOiBjbGllbnRzKSB7CisgICAgZm9yIChhdXRvJiBjbGllbnQg
OiBjb3B5VG9WZWN0b3JPZjxXZWFrUHRyPFdlYkNvcmU6Ok1vdGlvbk1hbmFnZXJDbGllbnQ+Piht
X2RldmljZU9yaWVudGF0aW9uQ2xpZW50cykpIHsKICAgICAgICAgaWYgKGNsaWVudCkKICAgICAg
ICAgICAgIGNsaWVudC0+b3JpZW50YXRpb25DaGFuZ2VkKGFscGhhLCBiZXRhLCBnYW1tYSwgY29t
cGFzc0hlYWRpbmcsIGNvbXBhc3NBY2N1cmFjeSk7CiAgICAgfQpAQCAtOTUsMTEgKzkxLDcgQEAg
dm9pZCBXZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyOjpkZXZpY2VPcmllbnRhdGlv
bkNoYW5nZWQoZG91YmxlIGFscGhhLAogCiB2b2lkIFdlYkRldmljZU9yaWVudGF0aW9uVXBkYXRl
UHJvdmlkZXI6OmRldmljZU1vdGlvbkNoYW5nZWQoZG91YmxlIHhBY2NlbGVyYXRpb24sIGRvdWJs
ZSB5QWNjZWxlcmF0aW9uLCBkb3VibGUgekFjY2VsZXJhdGlvbiwgZG91YmxlIHhBY2NlbGVyYXRp
b25JbmNsdWRpbmdHcmF2aXR5LCBkb3VibGUgeUFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHks
IGRvdWJsZSB6QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwgc3RkOjpvcHRpb25hbDxkb3Vi
bGU+IHhSb3RhdGlvblJhdGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB5Um90YXRpb25SYXRlLCBz
dGQ6Om9wdGlvbmFsPGRvdWJsZT4gelJvdGF0aW9uUmF0ZSkKIHsKLSAgICBWZWN0b3I8V2Vha1B0
cjxXZWJDb3JlOjpNb3Rpb25NYW5hZ2VyQ2xpZW50Pj4gY2xpZW50czsKLSAgICBmb3IgKGF1dG8m
IGNsaWVudCA6IG1fZGV2aWNlTW90aW9uQ2xpZW50cykKLSAgICAgICAgY2xpZW50cy5hcHBlbmQo
Y2xpZW50KTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IGNsaWVudHMpIHsKKyAgICBm
b3IgKGF1dG8mIGNsaWVudCA6IGNvcHlUb1ZlY3Rvck9mPFdlYWtQdHI8V2ViQ29yZTo6TW90aW9u
TWFuYWdlckNsaWVudD4+KG1fZGV2aWNlTW90aW9uQ2xpZW50cykpIHsKICAgICAgICAgaWYgKGNs
aWVudCkKICAgICAgICAgICAgIGNsaWVudC0+bW90aW9uQ2hhbmdlZCh4QWNjZWxlcmF0aW9uLCB5
QWNjZWxlcmF0aW9uLCB6QWNjZWxlcmF0aW9uLCB4QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0
eSwgeUFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHksICB6QWNjZWxlcmF0aW9uSW5jbHVkaW5n
R3Jhdml0eSwgeFJvdGF0aW9uUmF0ZSwgeVJvdGF0aW9uUmF0ZSwgelJvdGF0aW9uUmF0ZSk7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuY3BwCmluZGV4IGRmZGRhMTc2OTkz
NjAwNDQ3YTBjOTNjYzg0NjBmNWU2OGIyYzI0ODEuLjMxOGY3YzNkMjkzMzJjMDJhZDJjZTMwZDkw
ZTdjZmU2ZjU1YzMyMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5jcHAKQEAg
LTcxLDE4ICs3MSwxMyBAQCB2b2lkIFdlYlBhc3RlYm9hcmRPdmVycmlkZXM6OnJlbW92ZU92ZXJy
aWRlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0CiAKIFZlY3RvcjxTdHJpbmc+
IFdlYlBhc3RlYm9hcmRPdmVycmlkZXM6Om92ZXJyaWRkZW5UeXBlcyhjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lKQogewotICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKLQogICAgIGF1dG8g
aXQgPSBtX292ZXJyaWRlc01hcC5maW5kKHBhc3RlYm9hcmROYW1lKTsKICAgICBpZiAoaXQgPT0g
bV9vdmVycmlkZXNNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJl
dHVybiB7IH07CiAKICAgICBBU1NFUlQoaXQtPnZhbHVlKTsKIAotICAgIGZvciAoU3RyaW5nJiB0
eXBlIDogaXQtPnZhbHVlLT5rZXlzKCkpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQodHlwZSk7Ci0K
LSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBjb3B5VG9WZWN0b3IoaXQtPnZhbHVlLT5r
ZXlzKCkpOwogfQogCiBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBhc3RlYm9hcmRJdGVtSW5mbz4g
V2ViUGFzdGVib2FyZE92ZXJyaWRlczo6b3ZlcnJpZGRlbkluZm8oY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkTmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJTcGVlY2hTeW50aGVzaXNDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlNwZWVjaFN5bnRoZXNpc0NsaWVudC5jcHAKaW5kZXgg
YzRkMGRjYzAzZDVkYTZhMDQ4M2VkZjU2ZDFlNDM5NTI3YmM5NWY4OC4uYzU3ZTc4MDliMmVlMTY2
ZGQ2ZjY4OGJlMjJhODU5YzdkYWRkYThmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlNwZWVjaFN5bnRoZXNpc0NsaWVudC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlNwZWVjaFN5bnRoZXNp
c0NsaWVudC5jcHAKQEAgLTQyLDkgKzQyLDkgQEAgY29uc3QgVmVjdG9yPFJlZlB0cjxXZWJDb3Jl
OjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlPj4mIFdlYlNwZWVjaFN5bnRoZXNpc0MKICAg
ICBWZWN0b3I8V2ViU3BlZWNoU3ludGhlc2lzVm9pY2U+IHZvaWNlTGlzdDsKICAgICBtX3BhZ2Uu
c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U3BlZWNoU3ludGhlc2lzVm9pY2VMaXN0
KCksIHZvaWNlTGlzdCk7CiAKLSAgICBtX3ZvaWNlcy5jbGVhcigpOwotICAgIGZvciAoYXV0byYg
dm9pY2UgOiB2b2ljZUxpc3QpCi0gICAgICAgIG1fdm9pY2VzLmFwcGVuZChXZWJDb3JlOjpQbGF0
Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlOjpjcmVhdGUodm9pY2Uudm9pY2VVUkksIHZvaWNlLm5h
bWUsIHZvaWNlLmxhbmcsIHZvaWNlLmxvY2FsU2VydmljZSwgdm9pY2UuZGVmYXVsdExhbmcpKTsK
KyAgICBtX3ZvaWNlcyA9IHZvaWNlTGlzdC5tYXAoW10oYXV0byYgdm9pY2UpIC0+IFJlZlB0cjxX
ZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlPiB7CisgICAgICAgIHJldHVybiBX
ZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlOjpjcmVhdGUodm9pY2Uudm9pY2VV
UkksIHZvaWNlLm5hbWUsIHZvaWNlLmxhbmcsIHZvaWNlLmxvY2FsU2VydmljZSwgdm9pY2UuZGVm
YXVsdExhbmcpOworICAgIH0pOwogICAgIHJldHVybiBtX3ZvaWNlczsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCmluZGV4
IGI1MTM0ZDBkMmM1ZDdjNTJmNmZhYzk2ODA0NDFhY2MzZWViZjY1ZmQuLjFkNjQzYjZiNDI4OGQw
OGUwMzhjNDYyNWQwNTQ5ZGU2OGFmMmFhNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKQEAgLTI3MiwxMCArMjcyLDkgQEAg
dm9pZCBGaW5kQ29udHJvbGxlcjo6ZmluZFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiBzdHJp
bmcsIE9wdGlvblNldDxGaW5kT3B0aW8KICAgICBhdXRvIHJlc3VsdCA9IG1fd2ViUGFnZS0+Y29y
ZVBhZ2UoKS0+ZmluZFRleHRNYXRjaGVzKHN0cmluZywgY29yZShvcHRpb25zKSwgbWF4TWF0Y2hD
b3VudCk7CiAgICAgbV9maW5kTWF0Y2hlcyA9IFdURk1vdmUocmVzdWx0LnJhbmdlcyk7CiAKLSAg
ICBWZWN0b3I8VmVjdG9yPEludFJlY3Q+PiBtYXRjaFJlY3RzOwotICAgIGZvciAoYXV0byYgcmFu
Z2UgOiBtX2ZpbmRNYXRjaGVzKQotICAgICAgICBtYXRjaFJlY3RzLmFwcGVuZChSZW5kZXJPYmpl
Y3Q6OmFic29sdXRlVGV4dFJlY3RzKHJhbmdlKSk7Ci0KKyAgICBhdXRvIG1hdGNoUmVjdHMgPSBt
X2ZpbmRNYXRjaGVzLm1hcChbXShhdXRvJiByYW5nZSkgeworICAgICAgICByZXR1cm4gUmVuZGVy
T2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cyhyYW5nZSk7CisgICAgfSk7CiAgICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmRTdHJpbmdNYXRjaGVzKHN0cmlu
ZywgbWF0Y2hSZWN0cywgcmVzdWx0LmluZGV4Rm9yU2VsZWN0aW9uKSk7CiAKICAgICBpZiAoIW9w
dGlvbnMuY29udGFpbnMoRmluZE9wdGlvbnM6OlNob3dPdmVybGF5KSAmJiAhb3B0aW9ucy5jb250
YWlucyhGaW5kT3B0aW9uczo6U2hvd0ZpbmRJbmRpY2F0b3IpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29u
dHJvbGxlci5jcHAKaW5kZXggNzQ4MDJjNDc4NzU1ZmZlNjFiOTMwOTJjYmNhNmQwYWM3Y2NjOWM4
My4uMmM5YjQ1N2RiY2EwN2E2ZWIxMjY4OWE3OGYwZGQ1YjI5MTRhMjFjYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRl
eHRSYW5nZUNvbnRyb2xsZXIuY3BwCkBAIC0yNDgsMTEgKzI0OCwxMCBAQCB2b2lkIFdlYkZvdW5k
VGV4dFJhbmdlQ29udHJvbGxlcjo6ZHJhd1JlY3QoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJD
b3JlOjpHcmFwaAogICAgICAgICBhdXRvIHRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRp
bmF0ZXMgPSBtX3RleHRJbmRpY2F0b3ItPnRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRp
bmF0ZXMoKTsKICAgICAgICAgYXV0byB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVz
ID0gbV90ZXh0SW5kaWNhdG9yLT50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKCk7
CiAKLSAgICAgICAgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4gdGV4dFJlY3RzSW5Sb290Vmll
d0Nvb3JkaW5hdGVzOwotICAgICAgICBmb3IgKGF1dG8gcmVjdCA6IHRleHRSZWN0c0luQm91bmRp
bmdSZWN0Q29vcmRpbmF0ZXMpIHsKKyAgICAgICAgYXV0byB0ZXh0UmVjdHNJblJvb3RWaWV3Q29v
cmRpbmF0ZXMgPSB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzLm1hcChbJl0oYXV0
byByZWN0KSB7CiAgICAgICAgICAgICByZWN0Lm1vdmVCeSh0ZXh0Qm91bmRpbmdSZWN0SW5Sb290
Vmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCkpOwotICAgICAgICAgICAgdGV4dFJlY3RzSW5Sb290
Vmlld0Nvb3JkaW5hdGVzLmFwcGVuZChyZWN0KTsKLSAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIHJlY3Q7CisgICAgICAgIH0pOwogCiAgICAgICAgIGF1dG8gcGF0aHMgPSBXZWJDb3JlOjpQ
YXRoVXRpbGl0aWVzOjpwYXRoc1dpdGhTaHJpbmtXcmFwcGVkUmVjdHModGV4dFJlY3RzSW5Sb290
Vmlld0Nvb3JkaW5hdGVzLCBpbmRpY2F0b3JSYWRpdXMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDhmZjkwNWRjZmFmYWYzMTcyNzgyMThl
OTE1ZmU0ODAwNDZkYzE2MTkuLmUyM2FkYmE5MTgxMjNhMTljZTQ4N2MxMGE2NWNlNmRmNGUxNTk0
MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBA
IC0zMDMxLDcgKzMwMzEsNyBAQCB2b2lkIFdlYlBhZ2U6Om1vdXNlRXZlbnQoY29uc3QgV2ViTW91
c2VFdmVudCYgbW91c2VFdmVudCwgc3RkOjpvcHRpb25hbDxWZWN0b3I8UwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgVmVjdG9yPFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPj4gbW91c2VF
dmVudFNhbmRib3hFeHRlbnNpb25zOworICAgIFZlY3RvcjxSZWY8U2FuZGJveEV4dGVuc2lvbj4+
IG1vdXNlRXZlbnRTYW5kYm94RXh0ZW5zaW9uczsKICAgICBpZiAoc2FuZGJveEV4dGVuc2lvbnMp
CiAgICAgICAgIG1vdXNlRXZlbnRTYW5kYm94RXh0ZW5zaW9ucyA9IGNvbnN1bWVTYW5kYm94RXh0
ZW5zaW9ucyhXVEZNb3ZlKCpzYW5kYm94RXh0ZW5zaW9ucykpOwogCkBAIC03ODU3LDIxICs3ODU3
LDE5IEBAIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSYgV2ViUGFnZTo6ZW5zdXJlUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5KCkKIH0KICNlbmRpZgogCi1WZWN0b3I8UmVmUHRyPFNhbmRi
b3hFeHRlbnNpb24+PiBXZWJQYWdlOjpjb25zdW1lU2FuZGJveEV4dGVuc2lvbnMoVmVjdG9yPFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZT4mJiBzYW5kYm94RXh0ZW5zaW9ucykKK1ZlY3RvcjxSZWY8
U2FuZGJveEV4dGVuc2lvbj4+IFdlYlBhZ2U6OmNvbnN1bWVTYW5kYm94RXh0ZW5zaW9ucyhWZWN0
b3I8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiYmIHNhbmRib3hFeHRlbnNpb25zKQogewotICAg
IFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+IGRyYWdTYW5kYm94RXh0ZW5zaW9uczsK
LSAgICBmb3IgKGF1dG8mIHNhbmRib3hFeHRlbnNpb24gOiBzYW5kYm94RXh0ZW5zaW9ucykgewor
ICAgIHJldHVybiBXVEY6OmNvbXBhY3RNYXAoV1RGTW92ZShzYW5kYm94RXh0ZW5zaW9ucyksIFtd
KGF1dG8mJiBzYW5kYm94RXh0ZW5zaW9uKSAtPiBSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4gewog
ICAgICAgICBhdXRvIGV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZShXVEZNb3Zl
KHNhbmRib3hFeHRlbnNpb24pKTsKICAgICAgICAgaWYgKCFleHRlbnNpb24pCi0gICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBib29sIG9r
ID0gZXh0ZW5zaW9uLT5jb25zdW1lKCk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsK
LSAgICAgICAgZHJhZ1NhbmRib3hFeHRlbnNpb25zLmFwcGVuZChXVEZNb3ZlKGV4dGVuc2lvbikp
OwotICAgIH0KLSAgICByZXR1cm4gZHJhZ1NhbmRib3hFeHRlbnNpb25zOworICAgICAgICByZXR1
cm4gZXh0ZW5zaW9uOworICAgIH0pOwogfQogCi12b2lkIFdlYlBhZ2U6OnJldm9rZVNhbmRib3hF
eHRlbnNpb25zKFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+JiBzYW5kYm94RXh0ZW5z
aW9ucykKK3ZvaWQgV2ViUGFnZTo6cmV2b2tlU2FuZGJveEV4dGVuc2lvbnMoVmVjdG9yPFJlZjxT
YW5kYm94RXh0ZW5zaW9uPj4mIHNhbmRib3hFeHRlbnNpb25zKQogewogICAgIGZvciAoYXV0byYg
c2FuZGJveEV4dGVuc2lvbiA6IHNhbmRib3hFeHRlbnNpb25zKQogICAgICAgICBzYW5kYm94RXh0
ZW5zaW9uLT5yZXZva2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuaAppbmRleCA2OWRlMTRhYTk4MzQzODhhNDA1MjQ3N2MzNjE4MWQ3ZDVhMmY3Y2NmLi42NTRi
OGM5YzYwMDJkMGVkOWIyYzYyY2UwYzMxZWE5YmZkYjBiZWY2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC0xOTY5LDggKzE5NjksOCBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCBwbGF0Zm9ybURpZFNjYWxlUGFnZSgpOwogCi0gICAgVmVjdG9yPFJlZlB0
cjxTYW5kYm94RXh0ZW5zaW9uPj4gY29uc3VtZVNhbmRib3hFeHRlbnNpb25zKFZlY3RvcjxTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGU+JiYpOwotICAgIHZvaWQgcmV2b2tlU2FuZGJveEV4dGVuc2lv
bnMoVmVjdG9yPFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPj4mIHNhbmRib3hFeHRlbnNpb25zKTsK
KyAgICBWZWN0b3I8UmVmPFNhbmRib3hFeHRlbnNpb24+PiBjb25zdW1lU2FuZGJveEV4dGVuc2lv
bnMoVmVjdG9yPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4mJik7CisgICAgdm9pZCByZXZva2VT
YW5kYm94RXh0ZW5zaW9ucyhWZWN0b3I8UmVmPFNhbmRib3hFeHRlbnNpb24+PiYgc2FuZGJveEV4
dGVuc2lvbnMpOwogCiAgICAgdm9pZCBzZXRTZWxlY3Rpb25SYW5nZShjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYsIFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSwgYm9vbCk7CiAgICAgCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbSBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCmluZGV4
IDlkYzAwZGEyNzcwYzE5Mzk4OTFhMzAwZjIzMzc0OTZhOWM4ZTcwMWQuLmJkMzY3MjA3NWI3NTc2
OGM4NDE0Nzc4ZmM2NjVmNWQ3NWI0ZTI0YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC03NTQsMTEgKzc1NCw4IEBAIHZv
aWQgV2ViUGFnZTo6aGFuZGxlU2VsZWN0aW9uU2VydmljZUNsaWNrKEZyYW1lU2VsZWN0aW9uJiBz
ZWxlY3Rpb24sIGNvbnN0IFZlY3RvCiAKICAgICBOU0RhdGEgKnNlbGVjdGlvbkRhdGEgPSBbYXR0
cmlidXRlZFNlbGVjdGlvbiBSVEZERnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIFthdHRyaWJ1dGVk
U2VsZWN0aW9uIGxlbmd0aF0pIGRvY3VtZW50QXR0cmlidXRlczpAeyB9XTsKIAotICAgIFZlY3Rv
cjx1aW50OF90PiBzZWxlY3Rpb25EYXRhVmVjdG9yOwotICAgIHNlbGVjdGlvbkRhdGFWZWN0b3Iu
YXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNlbGVjdGlvbkRhdGEuYnl0
ZXMpLCBzZWxlY3Rpb25EYXRhLmxlbmd0aCk7Ci0KICAgICBmbHVzaFBlbmRpbmdFZGl0b3JTdGF0
ZVVwZGF0ZSgpOwotICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2hvd0NvbnRleHRN
ZW51KENvbnRleHRNZW51Q29udGV4dERhdGEocG9pbnQsIHNlbGVjdGlvbkRhdGFWZWN0b3IsIHBo
b25lTnVtYmVycywgc2VsZWN0aW9uLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpLCBV
c2VyRGF0YSgpKSk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93Q29udGV4
dE1lbnUoQ29udGV4dE1lbnVDb250ZXh0RGF0YShwb2ludCwgVmVjdG9yIHsgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50OF90Kj4oc2VsZWN0aW9uRGF0YS5ieXRlcyksIHNlbGVjdGlvbkRhdGEu
bGVuZ3RoIH0sIHBob25lTnVtYmVycywgc2VsZWN0aW9uLnNlbGVjdGlvbigpLmlzQ29udGVudEVk
aXRhYmxlKCkpLCBVc2VyRGF0YSgpKSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6aGFuZGxlSW1hZ2VT
ZXJ2aWNlQ2xpY2soY29uc3QgSW50UG9pbnQmIHBvaW50LCBJbWFnZSYgaW1hZ2UsIEhUTUxJbWFn
ZUVsZW1lbnQmIGVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAK
aW5kZXggNzk5NjEzZDM3NzQyMzYzYmZiZGNkOTUyOTc5OTYyMjA2ZjAyMjhhOC4uODk5MGVkZDc2
Y2FiOTZjMmRlY2QzYjk2MDU0Y2ZmNjI5NWJiMGNmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLmNwcApAQCAtMTQ1Miw4ICsxNDUyLDEwIEBAIHZvaWQgV2ViUHJvY2Vzczo6
ZmV0Y2hXZWJzaXRlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB3ZWJzaXRlRGF0YVR5
cGVzLCBDCiB7CiAgICAgV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGE7CiAgICAgaWYgKHdlYnNpdGVE
YXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpNZW1vcnlDYWNoZSkpIHsKLSAgICAg
ICAgZm9yIChhdXRvJiBvcmlnaW4gOiBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkub3JpZ2luc1dp
dGhDYWNoZShzZXNzaW9uSUQoKSkpCi0gICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzLmFw
cGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4tPmRhdGEoKSwgV2Vic2l0ZURhdGFUeXBl
OjpNZW1vcnlDYWNoZSwgMCB9KTsKKyAgICAgICAgYXV0byBvcmlnaW5zID0gTWVtb3J5Q2FjaGU6
OnNpbmdsZXRvbigpLm9yaWdpbnNXaXRoQ2FjaGUoc2Vzc2lvbklEKCkpOworICAgICAgICB3ZWJz
aXRlRGF0YS5lbnRyaWVzID0gV1RGOjptYXAob3JpZ2lucywgW10oYXV0byYgb3JpZ2luKSB7Cisg
ICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLT5kYXRhKCksIFdl
YnNpdGVEYXRhVHlwZTo6TWVtb3J5Q2FjaGUsIDAgfTsKKyAgICAgICAgfSk7CiAgICAgfQogICAg
IGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUod2Vic2l0ZURhdGEpKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452881</attachid>
            <date>2022-02-22 09:58:53 -0800</date>
            <delta_ts>2022-02-22 10:22:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236852-20220222095852.patch</filename>
            <type>text/plain</type>
            <size>162196</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDRmMmVmNWZkODRlNjQ3YTAzY2Y2M2Uz
YWVkMTMxZTIxNzZkMDE4ODcuLjI4MzU4NTI2ZTQyMDExNTU1MWY5ZjM0ZmI5Y2VkZDgxZThhZjY3
OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjItMDItMTggIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGV2ZW4gbW9yZSBjYWxs
IHNpdGVzIGNvbnN0cnVjdGluZyB2ZWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4NTIKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlci4KKworICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuY3BwOgorICAgICAgICAoV1RGOjpDb25j
dXJyZW50V29ya1F1ZXVlOjphcHBseSk6CisgICAgICAgICogd3RmL2NmL0xhbmd1YWdlQ0YuY3Bw
OgorICAgICAgICAoV1RGOjpwbGF0Zm9ybVVzZXJQcmVmZXJyZWRMYW5ndWFnZXMpOgorCiAyMDIy
LTAyLTIyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBz
ZXJ2aWNlIHdvcmtlciBhbmQgcHVzaCBBUEkgcHJlZmVyZW5jZSBmcm9tIFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXMgdG8gU2V0dGluZ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhMWYxOTk2YTZhZWQyMTM3MzBkYzhk
OWEzNDMxYWNiZjU1YTEzODdiLi5kZGIzYzJjNzdlM2MwODgzYzUxZWM2YTdlNWJmNGFiMGVkYzEw
MjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTY2IEBACisyMDIyLTAyLTE4ICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4gdXAgLyBvcHRpbWl6ZSBldmVu
IG1vcmUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9ycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2ODUyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgKiBNb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29y
ZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXltZW50Q29vcmRpbmF0b3I6OmJlZ2lu
UGF5bWVudFNlc3Npb24pOgorICAgICAgICAqIE1vZHVsZXMvYXBwbGVwYXkvY29jb2EvUGF5bWVu
dE1ldGhvZENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydCk6CisgICAgICAgICog
TW9kdWxlcy9jYWNoZS9ET01DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01DYWNoZTo6
YmF0Y2hQdXRPcGVyYXRpb24pOgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWQ6OkdhbWVwYWQpOgorICAgICAgICAqIE1vZHVs
ZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFk
TWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkRGlzY29ubmVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkdhbWVwYWRNYW5hZ2VyOjptYWtlR2FtZXBhZFZpc2libGUpOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
OjpvYmplY3RTdG9yZU5hbWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
Ojp0cmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5o
OgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6aXNEZWxldGVkVmFsdWUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGFIYXNo
OjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6Omhhc2ggY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzIGNvbnN0KToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmVOYW1lcyBjb25zdCk6CisgICAgICAgICog
TW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0OjpzaG93TWVkaWFDb250cm9sc0NvbnRleHRNZW51KToK
KyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU291cmNlOjphY3RpdmVSYW5nZXMgY29uc3QpOgorICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmg6CisgICAgICAgIChXZWJDb3JlOjpEZWNvZGVP
cmRlclNhbXBsZU1hcDo6c2l6ZSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJj
ZS9Tb3VyY2VCdWZmZXJMaXN0Lmg6CisgICAgICAgICogTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3lu
dGhlc2lzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpczo6Z2V0Vm9pY2Vz
KToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFz
ay5tbToKKyAgICAgICAgKC1bV2ViU3BlZWNoUmVjb2duaXplclRhc2tJbXBsIGNhbGxiYWNrV2l0
aFRyYW5zY3JpcHRpb25zOmlzRmluYWw6XSk6CisgICAgICAgICogTW9kdWxlcy9zcGVlY2gvY29j
b2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2tNb2NrLm1tOgorICAgICAgICAoLVtXZWJTcGVlY2hS
ZWNvZ25pemVyVGFza01vY2sgYXVkaW9TYW1wbGVzQXZhaWxhYmxlOl0pOgorICAgICAgICAqIGFu
aW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpibGVu
ZEZ1bmMpOgorICAgICAgICAqIGFuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaW1lbGluZXNDb250cm9sbGVyOjp1cGRh
dGVBbmltYXRpb25zQW5kU2VuZEV2ZW50cyk6CisgICAgICAgICogYW5pbWF0aW9uL0tleWZyYW1l
RWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByb2Nlc3NQcm9wZXJ0eUluZGV4ZWRLZXlm
cmFtZXMpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb246
OkNvbnRlbnRFeHRlbnNpb24pOgorICAgICAgICAqIGNzcy9DU1NWYWx1ZUxpc3QuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1ZhbHVlTGlzdDo6c2l6ZSBjb25zdCk6CisgICAgICAgICogY3NzL2Nh
bGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09w
ZXJhdGlvbk5vZGU6OmhvaXN0Q2hpbGRyZW5XaXRoT3BlcmF0b3IpOgorICAgICAgICAqIGNzcy9w
YXJzZXIvQ1NTUGFyc2VySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJJbXBs
Ojpjb25zdW1lQ29udGFpbmVyUnVsZSk6CisgICAgICAgICogZG9tL0RPTVN0cmluZ0xpc3QuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkRPTVN0cmluZ0xpc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpET01TdHJpbmdMaXN0OjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NU3RyaW5n
TGlzdDo6RE9NU3RyaW5nTGlzdCk6CisgICAgICAgICogZG9tL0V2ZW50UGF0aC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudFBhdGg6OkV2ZW50UGF0aCk6CisgICAgICAgICogZG9tL0Z1bGxz
Y3JlZW5NYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZ1bGxzY3JlZW5NYW5hZ2VyOjpj
YW5jZWxGdWxsc2NyZWVuKToKKyAgICAgICAgKiBkb20vTG9hZGFibGVTY3JpcHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TG9hZGFibGVTY3JpcHQ6Om5vdGlmeUNsaWVudEZpbmlzaGVkKToKKyAg
ICAgICAgKiBkb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFk
aW9CdXR0b25Hcm91cDo6bWVtYmVycyBjb25zdCk6CisgICAgICAgICogaHRtbC9EaXJlY3RvcnlG
aWxlTGlzdENyZWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9GaWxlTGlzdCk6CisgICAg
ICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
U2VsZWN0RWxlbWVudDo6c2F2ZUxhc3RTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KToKKyAgICAgICAg
KiBodG1sL0ltYWdlQml0bWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFwOjpk
ZXRhY2hCaXRtYXBzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFy
c2V0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6
cHJvY2Vzc01ldGEpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6Omluc2VydFBob25lTnVtYmVyTGlu
ayk6CisgICAgICAgICogaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHREb2N1bWVudFBhcnNlcjo6aW5zZXJ0RmFrZVByZUVsZW1lbnQpOgor
ICAgICAgICAqIGxvYWRlci9Db250ZW50RmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRGaWx0ZXI6OmNyZWF0ZSk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVNYW5pZmVzdFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUFwcGxp
Y2F0aW9uQ2FjaGVNYW5pZmVzdCk6CisgICAgICAgICogcGFnZS9SZXNpemVPYnNlcnZlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZXNpemVPYnNlcnZlcjo6ZGVsaXZlck9ic2VydmF0aW9ucyk6
CisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlu
aXRpYWxpemVJbmRpY2F0b3IpOgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBv
bGljeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVN1YlJlc291cmNlSW50ZWdyaXR5SW50
b0RpZ2VzdHMpOgorICAgICAgICAqIHBsYXRmb3JtL0ZpbGVDaG9vc2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bGVDaG9vc2VyOjpjaG9vc2VGaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlQ2hvb3Nlcjo6
Y2hvb3NlTWVkaWFGaWxlcyk6CisgICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmFwcGVuZCk6CisgICAg
ICAgICogcGxhdGZvcm0vVGhyZWFkU2FmZURhdGFCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OmFkZCk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EU1BLZXJuZWxQcm9jZXNzb3I6OmluaXRpYWxp
emUpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvUmVzYW1wbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvUmVzYW1wbGVyOjpBdWRpb1Jlc2FtcGxlcik6CisgICAgICAgICog
cGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0TnVtYmVyT2ZDaGFubmVscyk6Cisg
ICAgICAgICogcGxhdGZvcm0vYXVkaW8vTXVsdGlDaGFubmVsUmVzYW1wbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok11bHRpQ2hhbm5lbFJlc2FtcGxlcjo6TXVsdGlDaGFubmVsUmVzYW1wbGVy
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudC5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9nYW1lcGFkL21hYy9EdWFsc2hvY2szSElER2FtZXBhZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEdWFsc2hvY2szSElER2FtZXBhZDo6RHVhbHNob2NrM0hJREdhbWVwYWQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dhbWVwYWQvbWFjL0xvZ2l0ZWNoR2FtZXBhZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpMb2dpdGVjaEdhbWVwYWQ6OkxvZ2l0ZWNoR2FtZXBhZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ2FtZXBhZC9tYWMvU3RhZGlhSElER2FtZXBhZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdGFkaWFISURHYW1lcGFkOjpTdGFkaWFISURHYW1lcGFkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI6OmFkZFJlcGFpbnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRo
VXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhVdGlsaXRpZXM6OnBhdGhzV2l0
aFNocmlua1dyYXBwZWRSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoVXRpbGl0aWVzOjpw
YXRoV2l0aFNocmlua1dyYXBwZWRSZWN0c0Zvck91dGxpbmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlQnVmZmVyUHJpdmF0ZTo6YnVmZmVyZWRTYW1wbGVzRm9yVHJhY2tJZCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6ZXh0cmFjdEtl
eUlEc1NrZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFW
RldyYXBwZXI6OnNldFJlcXVlc3RGb3JLZXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1t
OgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdB
VkZPYmpDOjp1cGRhdGVLZXlTdGF0dXNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVyQVZGT2JqQy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2RlckFWRk9iakM6OmZyYW1lSW5mb3MgY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclBhcnNlckFWRk9i
akMubW06CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJBVkZPYmpDOjpkaWRQ
YXJzZVN0cmVhbURhdGFBc0Fzc2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZv
cm1EYXRhOjp2YXJpYXRpb25BeGVzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGFz
dGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlU3RyaW5n
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZVZpZGVvQ2FwdHVyZVNv
dXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZVZpZGVvQ2FwdHVyZVNvdXJjZTo6
c2V0U3VwcG9ydGVkUHJlc2V0cyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVn
aXN0cnlJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3RyeUltcGw6OnJlZ2lz
dGVyQmxvYlVSTCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVnaXN0cnlJbXBsOjp3cml0ZUJs
b2JzVG9UZW1wb3JhcnlGaWxlc0ZvckluZGV4ZWREQik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpkcmF3Qm94U2lkZUZyb21QYXRoKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6
Y29ubmVjdENsaXBwaW5nU3RhY2tMYXllcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjphZGp1c3RPdmVyZmxvd1Njcm9sbGJhckNvbnRhaW5lckxheWVycyk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRBdHRh
Y2htZW50VGl0bGVCYWNrZ3JvdW5kKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
clRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTVkdTdHJva2VQYWludGlu
Z1Jlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1bms6OlNWR1RleHRDaHVuayk6CisgICAgICAgICog
c3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlBh
Z2VSdWxlQ29sbGVjdG9yOjptYXRjaFBhZ2VSdWxlcyk6CisgICAgICAgICogc3R5bGUvUnVsZVNl
dEJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjpN
ZWRpYVF1ZXJ5Q29sbGVjdG9yOjpwb3ApOgorICAgICAgICAqIHN0eWxlL1N0eWxlQnVpbGRlckNv
bnZlcnRlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRDb250YWluZXJOYW1lKToKKwogMjAyMi0wMi0yMiAgSmVyIE5vYmxlICA8amVyLm5vYmxl
QGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIFBhcnRpYWwgcm9sbG91dCBvZiByMjg5OTQ2
LCBicm9rZSBOZXRmbGl4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGM2NjBiMGI2YWNlYmFhNTZkNjk4NDcyMWRlMGU2
MGNjZWE0MTExMGUuLmU4ZDBjMjc1NzNmZjQ0MzE1N2M0MWNkYTI0NDE5YjYwNzhmYWI1MjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsOTggQEAKKzIwMjItMDItMTggIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGV2ZW4gbW9yZSBjYWxs
IHNpdGVzIGNvbnN0cnVjdGluZyB2ZWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4NTIKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlci4KKworICAgICAgICAqIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJQcm94
eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZU1lZGlhUGxheWVyUHJveHk6Om91dE9mQmFu
ZFRyYWNrU291cmNlcyk6CisgICAgICAgICogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVTb3VyY2VC
dWZmZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5
Ojpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5Ojp1cGRhdGVUcmFja0lkcyk6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpmZXRjaERpc2tDYWNo
ZUVudHJpZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05vdGlmaWNhdGlvbnMvTmV0d29y
a05vdGlmaWNhdGlvbk1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTm90aWZp
Y2F0aW9uTWFuYWdlcjo6Z2V0T3JpZ2luc1dpdGhQdXNoQW5kTm90aWZpY2F0aW9uUGVybWlzc2lv
bnMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6YWxsU3RvcmFnZUFyZWFJZGVu
dGlmaWVycyBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9UcmFu
c2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpUcmFuc2ll
bnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6Om9yaWdpbnMgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OnN0b3JhZ2VBcmVhSWRlbnRpZmllcnMg
Y29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZmluaXNo
T3BlbmluZyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OmtleXMgY29u
c3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6U1FMaXRlU3RvcmFnZUFy
ZWEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oOgorICAgICAgICAq
IFNoYXJlZC9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpzaG93UGF5bWVudFVJKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb24uY3BwOgorICAgICAgICAoQVBJOjpO
YXZpZ2F0aW9uOjpOYXZpZ2F0aW9uKToKKyAgICAgICAgKEFQSTo6bV9jbGllbnROYXZpZ2F0aW9u
QWN0aXZpdHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XS1NoYXJlU2hlZXQubW06Cisg
ICAgICAgIChhcHBlbmRGaWxlc0FzU2hhcmVhYmxlVVJMcyk6CisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnJlc3RvcmVBcHBIaWdobGlnaHRzQW5kU2Nyb2xsVG9JbmRleCk6CisgICAgICAgICogVUlQ
cm9jZXNzL0ZyYW1lTG9hZFN0YXRlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkU3Rh
dGU6OmRpZEZpbmlzaExvYWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
ZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
VXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cGFyYW1ldGVycyBjb25zdCk6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0b3JNYW5h
Z2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6QXV0aGVudGljYXRvck1hbmFnZXI6OnN0YXJ0RGlz
Y292ZXJ5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0OjpyZW1vdmVBbGxJdGVtcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6Y2xlYXIpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
Ojppbml0aWFsaXplTmV3V2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpyZW1vdmVQcm9jZXNzRnJvbU9yaWdpbkNhY2hlU2V0KToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5
Ojpwcm9jZXNzRGlkVGVybWluYXRlT3JGYWlsZWRUb0xhdW5jaCk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBseSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEpOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvVGV4
dENoZWNrZXJJT1MubW06CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja1RleHRP
ZlBhcmFncmFwaCk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0
YW50Lm1tOgorICAgICAgICAoLVtXS0FjdGlvblNoZWV0QXNzaXN0YW50IHByZXNlbnRhdGlvblJl
Y3RGb3JFbGVtZW50VXNpbmdDbG9zZXN0SW5kaWNhdGVkUmVjdF0pOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW06CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2Vy
OjpjaGVja1RleHRPZlBhcmFncmFwaCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9BcHBsZVBheS9X
ZWJQYXltZW50Q29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXltZW50Q29v
cmRpbmF0b3I6OnNob3dQYXltZW50VUkpOgorICAgICAgICAqIFdlYlByb2Nlc3MvQXV0b21hdGlv
bi9XZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0
b21hdGlvblNlc3Npb25Qcm94eTo6c2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWQpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlci5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlcjo6Y3JlYXRlUmVtb3RlTWVk
aWFQbGF5ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL21lZGlhL1NvdXJjZUJ1ZmZlclBy
aXZhdGVSZW1vdGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpTb3VyY2VCdWZmZXJQcml2YXRlUmVt
b3RlOjp1cGRhdGVUcmFja0lkcyk6CisgICAgICAgIChXZWJLaXQ6OlNvdXJjZUJ1ZmZlclByaXZh
dGVSZW1vdGU6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdt
ZW50KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TGliV2ViUlRDQ29kZWNzOjpjcmVhdGVFbmNvZGVyKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJs
YXkuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvU2Vzc2lvblN0YXRl
Q29udmVyc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OnRvRnJhbWVTdGF0ZSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVBy
b3ZpZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2aWNlT3JpZW50YXRpb25VcGRhdGVQ
cm92aWRlcjo6ZGV2aWNlT3JpZW50YXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlcjo6ZGV2aWNlTW90aW9uQ2hhbmdlZCk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVz
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZE92ZXJyaWRlczo6b3ZlcnJpZGRl
blR5cGVzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlNwZWVjaFN5
bnRoZXNpc0NsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFN5bnRoZXNpc0Ns
aWVudDo6dm9pY2VMaXN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpGaW5kQ29udHJvbGxlcjo6ZmluZFN0cmluZ01h
dGNoZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xs
ZXI6OmRyYXdSZWN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNvbnN1bWVTYW5kYm94RXh0ZW5zaW9ucyk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlOjpoYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2spOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6
OmZldGNoV2Vic2l0ZURhdGEpOgorCiAyMDIyLTAyLTIyICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5u
QGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwL3dwdC9tZWRpYXJlY29yZGVyL211dGUtdHJhY2tz
Lmh0bWwgZmFpbHMgd2l0aCBXZWJSVENSZW1vdGVWaWRlb0ZyYW1lRW5hYmxlZD10cnVlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwIGIvU291cmNlL1dURi93dGYvV29y
a1F1ZXVlLmNwcAppbmRleCA5ZTEwNmUzOTRkM2Y0NGQyYzI1ZmMzY2ExNTM1NDBlNTIwNGNiMzVi
Li44NjQwNmYzODg0MzcxNGNiMjU1YzM0ZWFlM2Y5MTgxZGFiYTU4ZTM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1
ZS5jcHAKQEAgLTEwNSw3ICsxMDUsNyBAQCB2b2lkIENvbmN1cnJlbnRXb3JrUXVldWU6OmFwcGx5
KHNpemVfdCBpdGVyYXRpb25zLCBXVEY6OkZ1bmN0aW9uPHZvaWQoc2l6ZV90IGluZAogCiAgICAg
ICAgICAgICBtX3dvcmtlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0aHJlYWRDb3VudCk7CiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhyZWFkQ291bnQ7ICsraSkgewot
ICAgICAgICAgICAgICAgIG1fd29ya2Vycy5hcHBlbmQoVGhyZWFkOjpjcmVhdGUoIlRocmVhZFBv
b2wgV29ya2VyIiwgW3RoaXNdIHsKKyAgICAgICAgICAgICAgICBtX3dvcmtlcnMudW5jaGVja2Vk
QXBwZW5kKFRocmVhZDo6Y3JlYXRlKCJUaHJlYWRQb29sIFdvcmtlciIsIFt0aGlzXSB7CiAgICAg
ICAgICAgICAgICAgICAgIHRocmVhZEJvZHkoKTsKICAgICAgICAgICAgICAgICB9KSk7CiAgICAg
ICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9jZi9MYW5ndWFnZUNGLmNwcCBi
L1NvdXJjZS9XVEYvd3RmL2NmL0xhbmd1YWdlQ0YuY3BwCmluZGV4IGJiYzFlZjZmNGVmZTAzMDU5
Y2U1NTEzMWUwOGMxMDMzMjI0ODhlNTYuLmMwNGM1NWJjNjAzZDI4MWQwY2EzODkyMGViYThjNzll
NWU2OTI5ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2NmL0xhbmd1YWdlQ0YuY3BwCisr
KyBiL1NvdXJjZS9XVEYvd3RmL2NmL0xhbmd1YWdlQ0YuY3BwCkBAIC0xMDIsOSArMTAyLDEwIEBA
IFZlY3RvcjxTdHJpbmc+IHBsYXRmb3JtVXNlclByZWZlcnJlZExhbmd1YWdlcyhTaG91bGRNaW5p
bWl6ZUxhbmd1YWdlcyBzaG91bGRNaW5pCiAgICAgICAgIHJldHVybiB7ICJlbiJfcyB9OwogCiAg
ICAgVmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzOworICAgIGxhbmd1YWdlcy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KHBsYXRmb3JtTGFuZ3VhZ2VzQ291bnQpOwogICAgIGZvciAoQ0ZJbmRleCBpID0g
MDsgaSA8IHBsYXRmb3JtTGFuZ3VhZ2VzQ291bnQ7IGkrKykgewogICAgICAgICBhdXRvIHBsYXRm
b3JtTGFuZ3VhZ2UgPSBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZBcnJheUdldFZhbHVlQXRJ
bmRleChwbGF0Zm9ybUxhbmd1YWdlcy5nZXQoKSwgaSkpOwotICAgICAgICBsYW5ndWFnZXMuYXBw
ZW5kKGh0dHBTdHlsZUxhbmd1YWdlQ29kZShwbGF0Zm9ybUxhbmd1YWdlLCBzaG91bGRNaW5pbWl6
ZUxhbmd1YWdlcykpOworICAgICAgICBsYW5ndWFnZXMudW5jaGVja2VkQXBwZW5kKGh0dHBTdHls
ZUxhbmd1YWdlQ29kZShwbGF0Zm9ybUxhbmd1YWdlLCBzaG91bGRNaW5pbWl6ZUxhbmd1YWdlcykp
OwogICAgIH0KIAogICAgIExPR19XSVRIX1NUUkVBTShMYW5ndWFnZSwgc3RyZWFtIDw8ICJBZnRl
ciBwYXNzaW5nIHRocm91Z2ggaHR0cFN0eWxlTGFuZ3VhZ2VDb2RlOiAiIDw8IGxhbmd1YWdlcyk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29y
ZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29y
ZGluYXRvci5jcHAKaW5kZXggMWEzMjdhOTRiMGI3MWQ0ZWM3NWVhY2M4ZDRhZDc4YTkxYjlmZjY4
NS4uNGE5NDMyMjQ5ZDUyZDUxZDE0N2I4NmU1NzA4ZDUxODg4YmE2NGY1NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXltZW50Q29vcmRpbmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNw
cApAQCAtMTAxLDExICsxMDEsMTAgQEAgYm9vbCBQYXltZW50Q29vcmRpbmF0b3I6OmJlZ2luUGF5
bWVudFNlc3Npb24oRG9jdW1lbnQmIGRvY3VtZW50LCBQYXltZW50U2Vzc2lvbiYKIHsKICAgICBB
U1NFUlQoIW1fYWN0aXZlU2Vzc2lvbik7CiAKLSAgICBWZWN0b3I8VVJMPiBsaW5rSWNvblVSTHM7
Ci0gICAgZm9yIChhdXRvJiBpY29uIDogTGlua0ljb25Db2xsZWN0b3IgeyBkb2N1bWVudCB9Lmlj
b25zT2ZUeXBlcyh7IExpbmtJY29uVHlwZTo6VG91Y2hJY29uLCBMaW5rSWNvblR5cGU6OlRvdWNo
UHJlY29tcG9zZWRJY29uIH0pKQotICAgICAgICBsaW5rSWNvblVSTHMuYXBwZW5kKGljb24udXJs
KTsKLQotICAgIGF1dG8gc2hvd1BheW1lbnRVSSA9IG1fY2xpZW50LnNob3dQYXltZW50VUkoZG9j
dW1lbnQudXJsKCksIGxpbmtJY29uVVJMcywgcGF5bWVudFJlcXVlc3QpOworICAgIGF1dG8gbGlu
a0ljb25VUkxzID0gTGlua0ljb25Db2xsZWN0b3IgeyBkb2N1bWVudCB9Lmljb25zT2ZUeXBlcyh7
IExpbmtJY29uVHlwZTo6VG91Y2hJY29uLCBMaW5rSWNvblR5cGU6OlRvdWNoUHJlY29tcG9zZWRJ
Y29uIH0pLm1hcChbXShhdXRvJiBpY29uKSB7CisgICAgICAgIHJldHVybiBpY29uLnVybDsKKyAg
ICB9KTsKKyAgICBhdXRvIHNob3dQYXltZW50VUkgPSBtX2NsaWVudC5zaG93UGF5bWVudFVJKGRv
Y3VtZW50LnVybCgpLCBXVEZNb3ZlKGxpbmtJY29uVVJMcyksIHBheW1lbnRSZXF1ZXN0KTsKICAg
ICBQQVlNRU5UX0NPT1JESU5BVE9SX1JFTEVBU0VfTE9HKCJiZWdpblBheW1lbnRTZXNzaW9uKCkg
LT4gJWQiLCBzaG93UGF5bWVudFVJKTsKICAgICBpZiAoIXNob3dQYXltZW50VUkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVw
YXkvY29jb2EvUGF5bWVudE1ldGhvZENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9h
cHBsZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29jb2EubW0KaW5kZXggNzY1M2RlNTRhZjUzOWYy
NTYxZjQyMjM2ZDMwZWM2MWFiNTgwM2RkNS4uMDc2MTZiZGIzNWVlMTU0MTY0MWJjN2E4ZjlkYWRm
NGRhN2I2NmNjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9j
b2NvYS9QYXltZW50TWV0aG9kQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9h
cHBsZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29jb2EubW0KQEAgLTEwMSwxMSArMTAxLDggQEAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8QXBwbGVQYXlQYXltZW50TWV0aG9kOjpUeXBlPiBjb252ZXJ0
KFBLUGF5bWVudE1ldGhvZFR5cGUgcGEKICNpZiBIQVZFKFBBU1NLSVRfUEFZTUVOVF9NRVRIT0Rf
QklMTElOR19BRERSRVNTKQogc3RhdGljIHZvaWQgY29udmVydChDTkxhYmVsZWRWYWx1ZTxDTlBv
c3RhbEFkZHJlc3MqPiAqcG9zdGFsQWRkcmVzcywgQXBwbGVQYXlQYXltZW50Q29udGFjdCAmcmVz
dWx0KQogewotICAgIFZlY3RvcjxTdHJpbmc+IGFkZHJlc3NMaW5lOwotICAgIGlmIChOU1N0cmlu
ZyAqc3RyZWV0ID0gcG9zdGFsQWRkcmVzcy52YWx1ZS5zdHJlZXQpIHsKLSAgICAgICAgYWRkcmVz
c0xpbmUuYXBwZW5kKHN0cmVldCk7Ci0gICAgICAgIHJlc3VsdC5hZGRyZXNzTGluZXMgPSBXVEZN
b3ZlKGFkZHJlc3NMaW5lKTsKLSAgICB9CisgICAgaWYgKE5TU3RyaW5nICpzdHJlZXQgPSBwb3N0
YWxBZGRyZXNzLnZhbHVlLnN0cmVldCkKKyAgICAgICAgcmVzdWx0LmFkZHJlc3NMaW5lcyA9IHsg
U3RyaW5nIHsgc3RyZWV0IH0gfTsKICAgICByZXN1bHQuc3ViTG9jYWxpdHkgPSBwb3N0YWxBZGRy
ZXNzLnZhbHVlLnN1YkxvY2FsaXR5OwogICAgIHJlc3VsdC5sb2NhbGl0eSA9IHBvc3RhbEFkZHJl
c3MudmFsdWUuY2l0eTsKICAgICByZXN1bHQuc3ViQWRtaW5pc3RyYXRpdmVBcmVhID0gcG9zdGFs
QWRkcmVzcy52YWx1ZS5zdWJBZG1pbmlzdHJhdGl2ZUFyZWE7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvY2FjaGUvRE9NQ2FjaGUuY3BwCmluZGV4IDQ5ZjM5OGFhZmVmMzdjZDVlOGY4ZWIyNDRkNGUx
MWYzOWYyYThjZDMuLjJkNDZkMWNkYmM3MTdmM2M5Mjk5ZWZhODYzYTU0OTI2MzgzYWY1ZGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGUuY3BwCkBAIC01MTUsMTAgKzUx
NSw4IEBAIFJlY29yZCBET01DYWNoZTo6dG9Db25uZWN0aW9uUmVjb3JkKGNvbnN0IEZldGNoUmVx
dWVzdCYgcmVxdWVzdCwgRmV0Y2hSZXNwb25zZSYKIAogdm9pZCBET01DYWNoZTo6YmF0Y2hQdXRP
cGVyYXRpb24oY29uc3QgRmV0Y2hSZXF1ZXN0JiByZXF1ZXN0LCBGZXRjaFJlc3BvbnNlJiByZXNw
b25zZSwgRE9NQ2FjaGVFbmdpbmU6OlJlc3BvbnNlQm9keSYmIHJlc3BvbnNlQm9keSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChFeGNlcHRpb25Pcjx2b2lkPiYmKT4mJiBjYWxsYmFjaykKIHsKLSAg
ICBWZWN0b3I8UmVjb3JkPiByZWNvcmRzOwotICAgIHJlY29yZHMuYXBwZW5kKHRvQ29ubmVjdGlv
blJlY29yZChyZXF1ZXN0LCByZXNwb25zZSwgV1RGTW92ZShyZXNwb25zZUJvZHkpKSk7Ci0KLSAg
ICBiYXRjaFB1dE9wZXJhdGlvbihXVEZNb3ZlKHJlY29yZHMpLCBXVEZNb3ZlKGNhbGxiYWNrKSk7
CisgICAgYXV0byByZWNvcmQgPSB0b0Nvbm5lY3Rpb25SZWNvcmQocmVxdWVzdCwgcmVzcG9uc2Us
IFdURk1vdmUocmVzcG9uc2VCb2R5KSk7CisgICAgYmF0Y2hQdXRPcGVyYXRpb24oeyBXVEZNb3Zl
KHJlY29yZCkgfSwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCiB2b2lkIERPTUNhY2hlOjpiYXRj
aFB1dE9wZXJhdGlvbihWZWN0b3I8UmVjb3JkPiYmIHJlY29yZHMsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoRXhjZXB0aW9uT3I8dm9pZD4mJik+JiYgY2FsbGJhY2spCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5jcHAKaW5kZXggNjk2OWUwYjUwM2E4N2RkMDM4NWUxODM5
MDg4NDY3MGZlYTA0YzI2Ny4uNTgzZjljODU1NTY3MTc4Y2NlNzJjYWQ0NDc5MjRjZjhiYzNjNGU1
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmNwcApAQCAtNDMs
OCArNDMsOSBAQCBHYW1lcGFkOjpHYW1lcGFkKGNvbnN0IFBsYXRmb3JtR2FtZXBhZCYgcGxhdGZv
cm1HYW1lcGFkKQogICAgICwgbV9heGVzKHBsYXRmb3JtR2FtZXBhZC5heGlzVmFsdWVzKCkuc2l6
ZSgpLCAwLjApCiB7CiAgICAgdW5zaWduZWQgYnV0dG9uQ291bnQgPSBwbGF0Zm9ybUdhbWVwYWQu
YnV0dG9uVmFsdWVzKCkuc2l6ZSgpOworICAgIG1fYnV0dG9ucy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGJ1dHRvbkNvdW50KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0dG9uQ291
bnQ7ICsraSkKLSAgICAgICAgbV9idXR0b25zLmFwcGVuZChHYW1lcGFkQnV0dG9uOjpjcmVhdGUo
KSk7CisgICAgICAgIG1fYnV0dG9ucy51bmNoZWNrZWRBcHBlbmQoR2FtZXBhZEJ1dHRvbjo6Y3Jl
YXRlKCkpOwogfQogCiBHYW1lcGFkOjp+R2FtZXBhZCgpID0gZGVmYXVsdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZE1hbmFnZXIuY3BwCmluZGV4IGNjMzc0
ODU4Y2ZlYTFiMjQ0YzA0YmQ0MWIyOTk0OGQyOWFlYTMwMzAuLjU0M2ZlNDg5MTY3ZTdjZTEzZDQ5
NzY4ZmM3ZTE1ZjM0ZDA4MjM2ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
Z2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9n
YW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmNwcApAQCAtNzksMTQgKzc5LDEwIEBAIHZvaWQgR2FtZXBh
ZE1hbmFnZXI6OnBsYXRmb3JtR2FtZXBhZENvbm5lY3RlZChQbGF0Zm9ybUdhbWVwYWQmIHBsYXRm
b3JtR2FtZXBhZCwKIAogdm9pZCBHYW1lcGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkRGlzY29u
bmVjdGVkKFBsYXRmb3JtR2FtZXBhZCYgcGxhdGZvcm1HYW1lcGFkKQogewotICAgIFZlY3RvcjxX
ZWFrUHRyPERPTVdpbmRvdz4+IHdlYWtXaW5kb3dzOwotICAgIGZvciAoYXV0byogZG9tV2luZG93
IDogbV9kb21XaW5kb3dzKQotICAgICAgICB3ZWFrV2luZG93cy5hcHBlbmQoKmRvbVdpbmRvdyk7
Ci0KICAgICBIYXNoU2V0PE5hdmlnYXRvckdhbWVwYWQqPiBub3RpZmllZE5hdmlnYXRvcnM7CiAK
ICAgICAvLyBIYW5kbGUgdGhlIGRpc2Nvbm5lY3QgZm9yIGFsbCBET01XaW5kb3dzIHdpdGggZXZl
bnQgbGlzdGVuZXJzIGFuZCB0aGVpciBOYXZpZ2F0b3JzLgotICAgIGZvciAoYXV0byYgd2luZG93
IDogd2Vha1dpbmRvd3MpIHsKKyAgICBmb3IgKGF1dG8mIHdpbmRvdyA6IGNvcHlUb1ZlY3Rvck9m
PFdlYWtQdHI8RE9NV2luZG93Pj4obV9kb21XaW5kb3dzKSkgewogICAgICAgICAvLyBFdmVudCBk
aXNwYXRjaCBtaWdodCBoYXZlIG1hZGUgdGhpcyB3aW5kb3cgZ28gYXdheS4KICAgICAgICAgaWYg
KCF3aW5kb3cpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE0MywxMSArMTM5LDcgQEAgdm9p
ZCBHYW1lcGFkTWFuYWdlcjo6bWFrZUdhbWVwYWRWaXNpYmxlKFBsYXRmb3JtR2FtZXBhZCYgcGxh
dGZvcm1HYW1lcGFkLCBIYXNoU2UKICAgICBmb3IgKGF1dG8qIG5hdmlnYXRvciA6IG5hdmlnYXRv
clNldCkKICAgICAgICAgbmF2aWdhdG9yLT5nYW1lcGFkQ29ubmVjdGVkKHBsYXRmb3JtR2FtZXBh
ZCk7CiAKLSAgICBWZWN0b3I8V2Vha1B0cjxET01XaW5kb3c+PiB3ZWFrV2luZG93czsKLSAgICBm
b3IgKGF1dG8qIGRvbVdpbmRvdyA6IG1fZG9tV2luZG93cykKLSAgICAgICAgd2Vha1dpbmRvd3Mu
YXBwZW5kKCpkb21XaW5kb3cpOwotCi0gICAgZm9yIChhdXRvJiB3aW5kb3cgOiB3ZWFrV2luZG93
cykgeworICAgIGZvciAoYXV0byYgd2luZG93IDogY29weVRvVmVjdG9yT2Y8V2Vha1B0cjxET01X
aW5kb3c+PihtX2RvbVdpbmRvd3MpKSB7CiAgICAgICAgIC8vIEV2ZW50IGRpc3BhdGNoIG1pZ2h0
IGhhdmUgbWFkZSB0aGlzIHdpbmRvdyBnbyBhd2F5LgogICAgICAgICBpZiAoIXdpbmRvdykKICAg
ICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2UuY3BwCmluZGV4IDdhYTYzMmI3ZWMwNDdiZTQ2MDhiNTFhMDk0ZWExYTRl
NTdhMjYyOWIuLmNhYTIxZjRhZjU2MzZhNmNmNmMyNzE5MTI5ODU2YWNkZjZkMTY4ZGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKQEAg
LTQ1LDYgKzQ1LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9D
QVRFRF9JTVBMKElEQkRhdGFiYXNlKTsKIAorc3RhdGljIFZlY3RvcjxTdHJpbmc+IHNvcnRBbmRS
ZW1vdmVEdXBsaWNhdGVzKFZlY3RvcjxTdHJpbmc+JiYgdmVjdG9yKQoreworICAgIHN0ZDo6c29y
dCh2ZWN0b3IuYmVnaW4oKSwgdmVjdG9yLmVuZCgpLCBXVEY6OmNvZGVQb2ludENvbXBhcmVMZXNz
VGhhbik7CisgICAgcmVtb3ZlUmVwZWF0ZWRFbGVtZW50cyh2ZWN0b3IpOworICAgIHJldHVybiBX
VEZNb3ZlKHZlY3Rvcik7Cit9CisKIFJlZjxJREJEYXRhYmFzZT4gSURCRGF0YWJhc2U6OmNyZWF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJDbGllbnQ6OklEQkNvbm5lY3Rp
b25Qcm94eSYgY29ubmVjdGlvblByb3h5LCBjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRh
KQogewogICAgIGF1dG8gZGF0YWJhc2UgPSBhZG9wdFJlZigqbmV3IElEQkRhdGFiYXNlKGNvbnRl
eHQsIGNvbm5lY3Rpb25Qcm94eSwgcmVzdWx0RGF0YSkpOwpAQCAtMTAyLDkgKzEwOSw3IEBAIFJl
ZjxET01TdHJpbmdMaXN0PiBJREJEYXRhYmFzZTo6b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKGNhbkN1cnJlbnRUaHJlYWRBY2Nlc3NUaHJlYWRMb2NhbERhdGEob3JpZ2lu
VGhyZWFkKCkpKTsKIAotICAgIGF1dG8gb2JqZWN0U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6
OmNyZWF0ZSgpOwotICAgIGZvciAoYXV0byYgbmFtZSA6IG1faW5mby5vYmplY3RTdG9yZU5hbWVz
KCkpCi0gICAgICAgIG9iamVjdFN0b3JlTmFtZXMtPmFwcGVuZChuYW1lKTsKKyAgICBhdXRvIG9i
amVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUobV9pbmZvLm9iamVjdFN0b3Jl
TmFtZXMoKSk7CiAgICAgb2JqZWN0U3RvcmVOYW1lcy0+c29ydCgpOwogICAgIHJldHVybiBvYmpl
Y3RTdG9yZU5hbWVzOwogfQpAQCAtMTc1LDE4ICsxODAsMTIgQEAgRXhjZXB0aW9uT3I8UmVmPElE
QlRyYW5zYWN0aW9uPj4gSURCRGF0YWJhc2U6OnRyYW5zYWN0aW9uKFN0cmluZ09yVmVjdG9yT2ZT
dHJpbmcKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiRmFp
bGVkIHRvIGV4ZWN1dGUgJ3RyYW5zYWN0aW9uJyBvbiAnSURCRGF0YWJhc2UnOiBUaGUgZGF0YWJh
c2UgY29ubmVjdGlvbiBpcyBjbG9zaW5nLiJfcyB9OwogCiAgICAgVmVjdG9yPFN0cmluZz4gb2Jq
ZWN0U3RvcmVzOwotICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+
PihzdG9yZU5hbWVzKSkKLSAgICAgICAgb2JqZWN0U3RvcmVzID0gV1RGTW92ZShzdGQ6OmdldDxW
ZWN0b3I8U3RyaW5nPj4oc3RvcmVOYW1lcykpOwotICAgIGVsc2UKLSAgICAgICAgb2JqZWN0U3Rv
cmVzLmFwcGVuZChXVEZNb3ZlKHN0ZDo6Z2V0PFN0cmluZz4oc3RvcmVOYW1lcykpKTsKLQotICAg
IC8vIEl0IGlzIHZhbGlkIGZvciBqYXZhc2NyaXB0IHRvIHBhc3MgaW4gYSBsaXN0IG9mIG9iamVj
dCBzdG9yZSBuYW1lcyB3aXRoIHRoZSBzYW1lIG5hbWUgbGlzdGVkIHR3aWNlLAotICAgIC8vIHNv
IHdlIG5lZWQgdG8gcHV0IHRoZW0gYWxsIGluIGEgc2V0IHRvIGdldCBhIHVuaXF1ZSBsaXN0Lgot
ICAgIEhhc2hTZXQ8U3RyaW5nPiBvYmplY3RTdG9yZVNldDsKLSAgICBmb3IgKGF1dG8mIG9iamVj
dFN0b3JlIDogb2JqZWN0U3RvcmVzKQotICAgICAgICBvYmplY3RTdG9yZVNldC5hZGQob2JqZWN0
U3RvcmUpOwotCi0gICAgb2JqZWN0U3RvcmVzID0gY29weVRvVmVjdG9yKG9iamVjdFN0b3JlU2V0
KTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oc3RvcmVO
YW1lcykpIHsKKyAgICAgICAgLy8gSXQgaXMgdmFsaWQgZm9yIEphdmFTY3JpcHQgdG8gcGFzcyBp
biBhIGxpc3Qgb2Ygb2JqZWN0IHN0b3JlIG5hbWVzIHdpdGggdGhlIHNhbWUgbmFtZSBsaXN0ZWQg
dHdpY2UsCisgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gcHV0IHRoZW0gYWxsIGluIGEgc2V0IHRv
IGdldCBhIHVuaXF1ZSBsaXN0LgorICAgICAgICBvYmplY3RTdG9yZXMgPSBzb3J0QW5kUmVtb3Zl
RHVwbGljYXRlcyhXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3RvcjxTdHJpbmc+PihzdG9yZU5hbWVzKSkp
OworICAgIH0gZWxzZQorICAgICAgICBvYmplY3RTdG9yZXMgPSB7IFdURk1vdmUoc3RkOjpnZXQ8
U3RyaW5nPihzdG9yZU5hbWVzKSkgfTsKIAogICAgIGZvciAoYXV0byYgb2JqZWN0U3RvcmVOYW1l
IDogb2JqZWN0U3RvcmVzKSB7CiAgICAgICAgIGlmIChtX2luZm8uaGFzT2JqZWN0U3RvcmUob2Jq
ZWN0U3RvcmVOYW1lKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQktleURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktl
eURhdGEuaAppbmRleCA0Yjk3ODUzNjlkMTkwYTZiMTk2OTFkMTM3YWUxNTY3ZTVjMzc5NWQ5Li4w
MmY3MzM0MDNmM2FkMzM0ZmYyNzk1MDM3ZmFlN2Y2NTVhNjdhNzQwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5oCkBAIC0yNyw2ICsyNyw3IEBACiAK
ICNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRlIDx2YXJpYW50PgorI2luY2x1ZGUgPHd0Zi9I
YXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvU3RkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgogCkBAIC0xMTcsNDEgKzExOCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
ICEoKnRoaXMgPT0gb3RoZXIpOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAot
ICAgIHsKLSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBoYXNoQ29kZXM7Ci0gICAgICAgIGhhc2hD
b2Rlcy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdHlwZSkpOwotICAgICAgICBoYXNo
Q29kZXMuYXBwZW5kKG1faXNOdWxsID8gMSA6IDApOwotICAgICAgICBoYXNoQ29kZXMuYXBwZW5k
KG1faXNEZWxldGVkVmFsdWUgPyAxIDogMCk7Ci0gICAgICAgIHN3aXRjaCAobV90eXBlKSB7Ci0g
ICAgICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpJbnZhbGlkOgotICAgICAgICBjYXNlIElu
ZGV4ZWREQjo6S2V5VHlwZTo6TWF4OgotICAgICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6
TWluOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBl
OjpOdW1iZXI6Ci0gICAgICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpEYXRlOgotICAgICAg
ICAgICAgaGFzaENvZGVzLmFwcGVuZChTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnk8c2l6ZW9mKGRv
dWJsZSk+KCZzdGQ6OmdldDxkb3VibGU+KG1fdmFsdWUpKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OlN0cmluZzoKLSAgICAgICAgICAgIGhh
c2hDb2Rlcy5hcHBlbmQoU3RyaW5nSGFzaDo6aGFzaChzdGQ6OmdldDxTdHJpbmc+KG1fdmFsdWUp
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6
OkJpbmFyeTogewotICAgICAgICAgICAgYXV0byogZGF0YSA9IHN0ZDo6Z2V0PFRocmVhZFNhZmVE
YXRhQnVmZmVyPihtX3ZhbHVlKS5kYXRhKCk7Ci0gICAgICAgICAgICBpZiAoIWRhdGEpCi0gICAg
ICAgICAgICAgICAgaGFzaENvZGVzLmFwcGVuZCgwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShkYXRh
LT5kYXRhKCksIGRhdGEtPnNpemUoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OkFycmF5OgotICAgICAgICAgICAgZm9y
IChhdXRvJiBrZXkgOiBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpKQotICAg
ICAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoa2V5Lmhhc2goKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1v
cnkoaGFzaENvZGVzLmRhdGEoKSwgaGFzaENvZGVzLnNpemUoKSAqIHNpemVvZih1bnNpZ25lZCkp
OwotICAgIH0KLQogICAgIFN0cmluZyBzdHJpbmcoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNT
RVJUKG1fdHlwZSA9PSBJbmRleGVkREI6OktleVR5cGU6OlN0cmluZyk7CkBAIC0xOTYsOCArMTYy
LDM1IEBAIHByaXZhdGU6CiAgICAgc3RkOjp2YXJpYW50PFZlY3RvcjxJREJLZXlEYXRhPiwgU3Ry
aW5nLCBkb3VibGUsIFRocmVhZFNhZmVEYXRhQnVmZmVyPiBtX3ZhbHVlOwogfTsKIAoraW5saW5l
IHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhKQorewor
ICAgIGFkZChoYXNoZXIsIGtleURhdGEudHlwZSgpKTsKKyAgICBhZGQoaGFzaGVyLCBrZXlEYXRh
LmlzTnVsbCgpKTsKKyAgICBzd2l0Y2ggKGtleURhdGEudHlwZSgpKSB7CisgICAgY2FzZSBJbmRl
eGVkREI6OktleVR5cGU6OkludmFsaWQ6CisgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6Ok1h
eDoKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TWluOgorICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TnVtYmVyOgorICAgICAgICBhZGQoaGFzaGVyLCBr
ZXlEYXRhLm51bWJlcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbmRleGVkREI6Oktl
eVR5cGU6OkRhdGU6CisgICAgICAgIGFkZChoYXNoZXIsIGtleURhdGEuZGF0ZSgpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OlN0cmluZzoKKyAgICAgICAg
YWRkKGhhc2hlciwga2V5RGF0YS5zdHJpbmcoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SW5kZXhlZERCOjpLZXlUeXBlOjpCaW5hcnk6CisgICAgICAgIGFkZChoYXNoZXIsIGtleURhdGEu
YmluYXJ5KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6
QXJyYXk6CisgICAgICAgIGFkZChoYXNoZXIsIGtleURhdGEuYXJyYXkoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKwogc3RydWN0IElEQktleURhdGFIYXNoIHsKLSAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBJREJLZXlEYXRhJiBhKSB7IHJldHVybiBhLmhhc2goKTsgfQorICAg
IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IElEQktleURhdGEmIGEpIHsgcmV0dXJuIGNvbXB1
dGVIYXNoKGEpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgSURCS2V5RGF0YSYgYSwg
Y29uc3QgSURCS2V5RGF0YSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CiAgICAgc3RhdGljIGNvbnN0
IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKaW5k
ZXggMTQzNTE0MGE1Y2I0YTFhMWQ0MDdhMmRiMjlkMTViZGYyZDUyYzBiNi4uY2U2M2M2YTU2YjE0
ZDViZTAzMjI1NzM3MjUzMjJiODJmMGRkZGQwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcApAQCAtMTI2LDE0ICsxMjYsMTEg
QEAgUmVmPERPTVN0cmluZ0xpc3Q+IElEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzKCkgY29uc3QK
IHsKICAgICBBU1NFUlQoY2FuQ3VycmVudFRocmVhZEFjY2Vzc1RocmVhZExvY2FsRGF0YShtX3Ry
YW5zYWN0aW9uLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkKCkpKTsKIAotICAgIGF1dG8gaW5kZXhO
YW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwotCi0gICAgaWYgKCFtX2RlbGV0ZWQpIHsK
LSAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogbV9pbmZvLmluZGV4TmFtZXMoKSkKLSAgICAgICAg
ICAgIGluZGV4TmFtZXMtPmFwcGVuZChuYW1lKTsKLSAgICAgICAgaW5kZXhOYW1lcy0+c29ydCgp
OwotICAgIH0KKyAgICBpZiAobV9kZWxldGVkKQorICAgICAgICByZXR1cm4gRE9NU3RyaW5nTGlz
dDo6Y3JlYXRlKCk7CiAKKyAgICBhdXRvIGluZGV4TmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVh
dGUobV9pbmZvLmluZGV4TmFtZXMoKSk7CisgICAgaW5kZXhOYW1lcy0+c29ydCgpOwogICAgIHJl
dHVybiBpbmRleE5hbWVzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggNmMxMTIxYjczMTBmNzM3ZjdiOTViZWNl
ZTg0NTRlNmFjNTBkZjJiNi4uY2U4NjdiMWI3ZTZkNmYxNTQ5ZWNkNzI2MTI3ZGNjNzY5OTVhOWQw
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uLmNwcApAQCAtMTIxLDEyICsxMjEsOCBAQCBSZWY8RE9NU3RyaW5nTGlzdD4gSURCVHJh
bnNhY3Rpb246Om9iamVjdFN0b3JlTmFtZXMoKSBjb25zdAogewogICAgIEFTU0VSVChjYW5DdXJy
ZW50VGhyZWFkQWNjZXNzVGhyZWFkTG9jYWxEYXRhKG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZCgp
KSk7CiAKLSAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiBuYW1lcyA9IGlzVmVyc2lvbkNoYW5nZSgp
ID8gbV9kYXRhYmFzZS0+aW5mbygpLm9iamVjdFN0b3JlTmFtZXMoKSA6IG1faW5mby5vYmplY3RT
dG9yZXMoKTsKLQotICAgIFJlZjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0gRE9N
U3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0gICAgZm9yIChhdXRvJiBuYW1lIDogbmFtZXMpCi0gICAg
ICAgIG9iamVjdFN0b3JlTmFtZXMtPmFwcGVuZChuYW1lKTsKLQorICAgIGF1dG8gbmFtZXMgPSBp
c1ZlcnNpb25DaGFuZ2UoKSA/IG1fZGF0YWJhc2UtPmluZm8oKS5vYmplY3RTdG9yZU5hbWVzKCkg
OiBtX2luZm8ub2JqZWN0U3RvcmVzKCk7CisgICAgYXV0byBvYmplY3RTdG9yZU5hbWVzID0gRE9N
U3RyaW5nTGlzdDo6Y3JlYXRlKFdURk1vdmUobmFtZXMpKTsKICAgICBvYmplY3RTdG9yZU5hbWVz
LT5zb3J0KCk7CiAgICAgcmV0dXJuIG9iamVjdFN0b3JlTmFtZXM7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0
LmNwcAppbmRleCAxOWEwNjllMjNiMzlkYmI0YTcwNjVkOGRlNzhkN2VlNDkzYzY5ODE4Li5iODI1
ZWM4MDA1MTQ4MDI4ZTJiMDdiMTlkYzc4MzkyYTQzYThjYmE1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5j
cHAKQEAgLTU1NSwxMSArNTU1LDEwIEBAIGJvb2wgTWVkaWFDb250cm9sc0hvc3Q6OnNob3dNZWRp
YUNvbnRyb2xzQ29udGV4dE1lbnUoSFRNTEVsZW1lbnQmIHRhcmdldCwgU3RyaW5nCiAKICAgICBp
ZiAob3B0aW9uc0pTT05PYmplY3QtPmdldEJvb2xlYW4oImluY2x1ZGVMYW5ndWFnZXMiX3MpLnZh
bHVlX29yKGZhbHNlKSkgewogICAgICAgICBpZiAoYXV0byogYXVkaW9UcmFja3MgPSBtZWRpYUVs
ZW1lbnQuYXVkaW9UcmFja3MoKTsgYXVkaW9UcmFja3MgJiYgYXVkaW9UcmFja3MtPmxlbmd0aCgp
ID4gMSkgewotICAgICAgICAgICAgVmVjdG9yPE1lbnVJdGVtPiBsYW5ndWFnZU1lbnVJdGVtczsK
LQogICAgICAgICAgICAgYXV0byYgY2FwdGlvblByZWZlcmVuY2VzID0gcGFnZS0+Z3JvdXAoKS5l
bnN1cmVDYXB0aW9uUHJlZmVyZW5jZXMoKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgYXVkaW9U
cmFjayA6IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KGF1ZGlvVHJh
Y2tzKSkKLSAgICAgICAgICAgICAgICBsYW5ndWFnZU1lbnVJdGVtcy5hcHBlbmQoY3JlYXRlTWVu
dUl0ZW0oYXVkaW9UcmFjaywgY2FwdGlvblByZWZlcmVuY2VzLmRpc3BsYXlOYW1lRm9yVHJhY2so
YXVkaW9UcmFjay5nZXQoKSksIGF1ZGlvVHJhY2stPmVuYWJsZWQoKSkpOworICAgICAgICAgICAg
YXV0byBsYW5ndWFnZU1lbnVJdGVtcyA9IGNhcHRpb25QcmVmZXJlbmNlcy5zb3J0ZWRUcmFja0xp
c3RGb3JNZW51KGF1ZGlvVHJhY2tzKS5tYXAoWyZdKGF1dG8mIGF1ZGlvVHJhY2spIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gY3JlYXRlTWVudUl0ZW0oYXVkaW9UcmFjaywgY2FwdGlvblByZWZl
cmVuY2VzLmRpc3BsYXlOYW1lRm9yVHJhY2soYXVkaW9UcmFjay5nZXQoKSksIGF1ZGlvVHJhY2st
PmVuYWJsZWQoKSk7CisgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgaWYgKCFsYW5ndWFn
ZU1lbnVJdGVtcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgaXRlbXMuYXBwZW5kKGNyZWF0
ZVN1Ym1lbnUoV0VCX1VJX1NUUklOR19LRVkoIkxhbmd1YWdlcyIsICJMYW5ndWFnZXMgKE1lZGlh
IENvbnRyb2xzIE1lbnUpIiwgIkxhbmd1YWdlcyBtZWRpYSBjb250cm9scyBjb250ZXh0IG1lbnUg
dGl0bGUiKSwgImdsb2JlIl9zLCBXVEZNb3ZlKGxhbmd1YWdlTWVudUl0ZW1zKSkpOwpAQCAtNTY4
LDE1ICs1NjcsMTMgQEAgYm9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6c2hvd01lZGlhQ29udHJvbHND
b250ZXh0TWVudShIVE1MRWxlbWVudCYgdGFyZ2V0LCBTdHJpbmcKIAogICAgIGlmIChvcHRpb25z
SlNPTk9iamVjdC0+Z2V0Qm9vbGVhbigiaW5jbHVkZVN1YnRpdGxlcyJfcykudmFsdWVfb3IoZmFs
c2UpKSB7CiAgICAgICAgIGlmIChhdXRvKiB0ZXh0VHJhY2tzID0gbWVkaWFFbGVtZW50LnRleHRU
cmFja3MoKTsgdGV4dFRyYWNrcyAmJiB0ZXh0VHJhY2tzLT5sZW5ndGgoKSkgewotICAgICAgICAg
ICAgVmVjdG9yPE1lbnVJdGVtPiBzdWJ0aXRsZU1lbnVJdGVtczsKLQogICAgICAgICAgICAgYXV0
byYgY2FwdGlvblByZWZlcmVuY2VzID0gcGFnZS0+Z3JvdXAoKS5lbnN1cmVDYXB0aW9uUHJlZmVy
ZW5jZXMoKTsKICAgICAgICAgICAgIGF1dG8gc29ydGVkVGV4dFRyYWNrcyA9IGNhcHRpb25QcmVm
ZXJlbmNlcy5zb3J0ZWRUcmFja0xpc3RGb3JNZW51KHRleHRUcmFja3MsIHsgVGV4dFRyYWNrOjpL
aW5kOjpTdWJ0aXRsZXMsIFRleHRUcmFjazo6S2luZDo6Q2FwdGlvbnMsIFRleHRUcmFjazo6S2lu
ZDo6RGVzY3JpcHRpb25zIH0pOwogICAgICAgICAgICAgYm9vbCBhbGxUcmFja3NEaXNhYmxlZCA9
IG5vdEZvdW5kID09IHNvcnRlZFRleHRUcmFja3MuZmluZElmKFtdIChjb25zdCBhdXRvJiB0ZXh0
VHJhY2spIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dFRyYWNrLT5tb2RlKCkgPT0gVGV4
dFRyYWNrOjpNb2RlOjpTaG93aW5nOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBib29s
IHVzZXNBdXRvbWF0aWNUcmFjayA9IGNhcHRpb25QcmVmZXJlbmNlcy5jYXB0aW9uRGlzcGxheU1v
ZGUoKSA9PSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpBdXRvbWF0aWMgJiYgYWxsVHJhY2tzRGlz
YWJsZWQ7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHRleHRUcmFjayA6IHNvcnRlZFRleHRUcmFj
a3MpIHsKKyAgICAgICAgICAgIGF1dG8gc3VidGl0bGVNZW51SXRlbXMgPSBzb3J0ZWRUZXh0VHJh
Y2tzLm1hcChbJl0oYXV0byYgdGV4dFRyYWNrKSB7CiAgICAgICAgICAgICAgICAgYm9vbCBjaGVj
a2VkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYgKGFsbFRyYWNrc0Rpc2FibGVkICYmIHRl
eHRUcmFjayA9PSAmVGV4dFRyYWNrOjpjYXB0aW9uTWVudU9mZkl0ZW0oKSAmJiAoY2FwdGlvblBy
ZWZlcmVuY2VzLmNhcHRpb25EaXNwbGF5TW9kZSgpID09IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6
OkZvcmNlZE9ubHkgfHwgY2FwdGlvblByZWZlcmVuY2VzLmNhcHRpb25EaXNwbGF5TW9kZSgpID09
IENhcHRpb25Vc2VyUHJlZmVyZW5jZXM6Ok1hbnVhbCkpCiAgICAgICAgICAgICAgICAgICAgIGNo
ZWNrZWQgPSB0cnVlOwpAQCAtNTg0LDggKzU4MSw4IEBAIGJvb2wgTWVkaWFDb250cm9sc0hvc3Q6
OnNob3dNZWRpYUNvbnRyb2xzQ29udGV4dE1lbnUoSFRNTEVsZW1lbnQmIHRhcmdldCwgU3RyaW5n
CiAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGVs
c2UgaWYgKCF1c2VzQXV0b21hdGljVHJhY2sgJiYgdGV4dFRyYWNrLT5tb2RlKCkgPT0gVGV4dFRy
YWNrOjpNb2RlOjpTaG93aW5nKQogICAgICAgICAgICAgICAgICAgICBjaGVja2VkID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICBzdWJ0aXRsZU1lbnVJdGVtcy5hcHBlbmQoY3JlYXRlTWVudUl0ZW0o
dGV4dFRyYWNrLCBjYXB0aW9uUHJlZmVyZW5jZXMuZGlzcGxheU5hbWVGb3JUcmFjayh0ZXh0VHJh
Y2suZ2V0KCkpLCBjaGVja2VkKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0
dXJuIGNyZWF0ZU1lbnVJdGVtKHRleHRUcmFjaywgY2FwdGlvblByZWZlcmVuY2VzLmRpc3BsYXlO
YW1lRm9yVHJhY2sodGV4dFRyYWNrLmdldCgpKSwgY2hlY2tlZCk7CisgICAgICAgICAgICB9KTsK
IAogICAgICAgICAgICAgaWYgKCFzdWJ0aXRsZU1lbnVJdGVtcy5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICAgICAgaXRlbXMuYXBwZW5kKGNyZWF0ZVN1Ym1lbnUoV0VCX1VJX1NUUklOR19LRVkoIlN1
YnRpdGxlcyIsICJTdWJ0aXRsZXMgKE1lZGlhIENvbnRyb2xzIE1lbnUpIiwgIlN1YnRpdGxlcyBt
ZWRpYSBjb250cm9scyBjb250ZXh0IG1lbnUgdGl0bGUiKSwgImNhcHRpb25zLmJ1YmJsZSJfcywg
V1RGTW92ZShzdWJ0aXRsZU1lbnVJdGVtcykpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKaW5kZXggOTEyNzQ3ZjQwNmMyOTU5NDk5
NzNiNWJiMTM0OWRiY2E2NzQxYzEzNS4uYTJlNjU4YTkyZjk5N2Q3ZjRiNDNlMTcwM2Y0YTBlMDk0
OTE3YjBlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9N
ZWRpYVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9N
ZWRpYVNvdXJjZS5jcHAKQEAgLTEwNTEsMTAgKzEwNTEsOSBAQCB2b2lkIE1lZGlhU291cmNlOjpv
blJlYWR5U3RhdGVDaGFuZ2UoUmVhZHlTdGF0ZSBvbGRTdGF0ZSwgUmVhZHlTdGF0ZSBuZXdTdGF0
ZSkKIAogVmVjdG9yPFBsYXRmb3JtVGltZVJhbmdlcz4gTWVkaWFTb3VyY2U6OmFjdGl2ZVJhbmdl
cygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFBsYXRmb3JtVGltZVJhbmdlcz4gYWN0aXZlUmFuZ2Vz
OwotICAgIGZvciAoYXV0byYgc291cmNlQnVmZmVyIDogKm1fYWN0aXZlU291cmNlQnVmZmVycykK
LSAgICAgICAgYWN0aXZlUmFuZ2VzLmFwcGVuZChzb3VyY2VCdWZmZXItPmJ1ZmZlcmVkSW50ZXJu
YWwoKS5yYW5nZXMoKSk7Ci0gICAgcmV0dXJuIGFjdGl2ZVJhbmdlczsKKyAgICByZXR1cm4gV1RG
OjptYXAoKm1fYWN0aXZlU291cmNlQnVmZmVycywgW10oYXV0byYgc291cmNlQnVmZmVyKSB7Cisg
ICAgICAgIHJldHVybiBzb3VyY2VCdWZmZXItPmJ1ZmZlcmVkSW50ZXJuYWwoKS5yYW5nZXMoKTsK
KyAgICB9KTsKIH0KIAogRXhjZXB0aW9uT3I8UmVmPFNvdXJjZUJ1ZmZlclByaXZhdGU+PiBNZWRp
YVNvdXJjZTo6Y3JlYXRlU291cmNlQnVmZmVyUHJpdmF0ZShjb25zdCBDb250ZW50VHlwZSYgaW5j
b21pbmdUeXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJj
ZS9TYW1wbGVNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxl
TWFwLmgKaW5kZXggZWFmNDkzMTU5N2QyNjg1MjNjNjY3YmQ5Y2RjYzRjZWE2NTQzMzY5NS4uYWYx
ZTEwNDU4MTc4N2YxNWY2ZjFmMzg1YjI1NzI0NDRkODg1OTVmYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9TYW1wbGVNYXAuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1hcC5oCkBAIC05MSw2ICs5MSw3IEBAIHB1
YmxpYzoKICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IG1fc2FtcGxlcy5yYmVnaW4oKTsgfQogICAgIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0
dXJuIG1fc2FtcGxlcy5yZW5kKCk7IH0KICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQo
KSBjb25zdCB7IHJldHVybiBtX3NhbXBsZXMucmVuZCgpOyB9CisgICAgc2l6ZV90IHNpemUoKSBj
b25zdCB7IHJldHVybiBtX3NhbXBsZXMuc2l6ZSgpOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCBp
dGVyYXRvciBmaW5kU2FtcGxlV2l0aERlY29kZUtleShjb25zdCBLZXlUeXBlJik7CiAgICAgV0VC
Q09SRV9FWFBPUlQgaXRlcmF0b3IgZmluZFNhbXBsZUFmdGVyRGVjb2RlS2V5KGNvbnN0IEtleVR5
cGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291
cmNlQnVmZmVyTGlzdC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3Vy
Y2VCdWZmZXJMaXN0LmgKaW5kZXggZmM2ZTA3M2FiOTBlNzZkMTgxNWY4ODk2YjZmNjYwOTZkZjJm
ZGRkNS4uM2E2OGI1ZTBiYWRlNDM1MWYwNjc0NjdjNzJhZjJkYmJjMjFmZDVjNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0
LmgKQEAgLTQ3LDggKzQ3LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWY8U291cmNlQnVmZmVy
TGlzdD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKICAgICB2aXJ0dWFsIH5Tb3Vy
Y2VCdWZmZXJMaXN0KCk7CiAKLSAgICB1bnNpZ25lZCBsb25nIGxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGlzdC5zaXplKCk7IH0KLSAgICBTb3VyY2VCdWZmZXIqIGl0ZW0odW5zaWduZWQgbG9u
ZyBpbmRleCkgY29uc3QgeyByZXR1cm4gKGluZGV4IDwgbV9saXN0LnNpemUoKSkgPyBtX2xpc3Rb
aW5kZXhdLmdldCgpIDogbnVsbHB0cjsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KKworICAgIFNvdXJjZUJ1ZmZlciogaXRlbSh1bnNpZ25l
ZCBpbmRleCkgY29uc3QgeyByZXR1cm4gKGluZGV4IDwgbV9saXN0LnNpemUoKSkgPyBtX2xpc3Rb
aW5kZXhdLmdldCgpIDogbnVsbHB0cjsgfQogCiAgICAgdm9pZCBhZGQoUmVmPFNvdXJjZUJ1ZmZl
cj4mJik7CiAgICAgdm9pZCByZW1vdmUoU291cmNlQnVmZmVyJik7CkBAIC01Niw4ICs1NywxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhcigpOwogICAgIHZvaWQgc3dhcChWZWN0b3I8UmVmUHRy
PFNvdXJjZUJ1ZmZlcj4+Jik7CiAKLSAgICBWZWN0b3I8UmVmUHRyPFNvdXJjZUJ1ZmZlcj4+Ojpp
dGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fbGlzdC5iZWdpbigpOyB9Ci0gICAgVmVjdG9yPFJl
ZlB0cjxTb3VyY2VCdWZmZXI+Pjo6aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9saXN0LmVuZCgp
OyB9CisgICAgYXV0byBiZWdpbigpIHsgcmV0dXJuIG1fbGlzdC5iZWdpbigpOyB9CisgICAgYXV0
byBlbmQoKSB7IHJldHVybiBtX2xpc3QuZW5kKCk7IH0KKyAgICBhdXRvIGJlZ2luKCkgY29uc3Qg
eyByZXR1cm4gbV9saXN0LmJlZ2luKCk7IH0KKyAgICBhdXRvIGVuZCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGlzdC5lbmQoKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0
LnNpemUoKTsgfQogCiAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCiAgICAgRXZlbnRUYXJn
ZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBT
b3VyY2VCdWZmZXJMaXN0RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzLmNwcAppbmRleCBlYWYzYTJl
MWU3OThhNDgxZjc2OGIzM2M1ZmQyOWQzYzdjYmFiM2FlLi44MmMxYTNhMGMwNzI1NWMxZTgwZGE2
MWQ1OTBiYTljOTQxY2MwNjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Nw
ZWVjaC9TcGVlY2hTeW50aGVzaXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3Bl
ZWNoL1NwZWVjaFN5bnRoZXNpcy5jcHAKQEAgLTkzLDkgKzkzLDEwIEBAIGNvbnN0IFZlY3RvcjxS
ZWY8U3BlZWNoU3ludGhlc2lzVm9pY2U+PiYgU3BlZWNoU3ludGhlc2lzOjpnZXRWb2ljZXMoKQog
ICAgICAgICByZXR1cm4gbV92b2ljZUxpc3Q7CiAKICAgICAvLyBJZiB0aGUgdm9pY2VMaXN0IGlz
IGVtcHR5LCB0aGF0J3MgdGhlIGN1ZSB0byBnZXQgdGhlIHZvaWNlcyBmcm9tIHRoZSBwbGF0Zm9y
bSBhZ2Fpbi4KLSAgICBmb3IgKGF1dG8mIHZvaWNlIDogbV9zcGVlY2hTeW50aGVzaXNDbGllbnQg
PyBtX3NwZWVjaFN5bnRoZXNpc0NsaWVudC0+dm9pY2VMaXN0KCkgOiBlbnN1cmVQbGF0Zm9ybVNw
ZWVjaFN5bnRoZXNpemVyKCkudm9pY2VMaXN0KCkpCi0gICAgICAgIG1fdm9pY2VMaXN0LmFwcGVu
ZChTcGVlY2hTeW50aGVzaXNWb2ljZTo6Y3JlYXRlKCp2b2ljZSkpOwotCisgICAgYXV0byYgdm9p
Y2VMaXN0ID0gbV9zcGVlY2hTeW50aGVzaXNDbGllbnQgPyBtX3NwZWVjaFN5bnRoZXNpc0NsaWVu
dC0+dm9pY2VMaXN0KCkgOiBlbnN1cmVQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyKCkudm9pY2VM
aXN0KCk7CisgICAgbV92b2ljZUxpc3QgPSB2b2ljZUxpc3QubWFwKFtdKGF1dG8mIHZvaWNlKSB7
CisgICAgICAgIHJldHVybiBTcGVlY2hTeW50aGVzaXNWb2ljZTo6Y3JlYXRlKCp2b2ljZSk7Cisg
ICAgfSk7CiAgICAgcmV0dXJuIG1fdm9pY2VMaXN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFzay5tbSBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6ZXJU
YXNrLm1tCmluZGV4IGYxYjk2OTU4MDU3ZDJmZTYwNDRkMmM3YjI1OWRiNmM1Y2ViNDRlZmUuLmI2
MjI5OTA4ZTc0YWMwMjc5OWQ3NzQyYjE0MzI5ZmQzM2RjNDc2YTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVjaFJlY29n
bml6ZXJUYXNrLm1tCkBAIC0xMjgsOSArMTI4LDcgQEAgLSAodm9pZCljYWxsYmFja1dpdGhUcmFu
c2NyaXB0aW9uczooTlNBcnJheTxTRlRyYW5zY3JpcHRpb24gKj4gKil0cmFuc2NyaXB0aW9ucwog
ICAgICAgICBpZiAoYWx0ZXJuYXRpdmVzLnNpemUoKSA9PSBfbWF4QWx0ZXJuYXRpdmVzKQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIFZlY3RvcjxTcGVlY2hSZWNvZ25pdGlvblJlc3Vs
dERhdGE+IGRhdGFzOwotICAgIGRhdGFzLmFwcGVuZChTcGVlY2hSZWNvZ25pdGlvblJlc3VsdERh
dGEgeyBXVEZNb3ZlKGFsdGVybmF0aXZlcyksIGJvb2woaXNGaW5hbCkgfSk7Ci0gICAgX2RlbGVn
YXRlQ2FsbGJhY2soU3BlZWNoUmVjb2duaXRpb25VcGRhdGU6OmNyZWF0ZVJlc3VsdChfaWRlbnRp
ZmllciwgV1RGTW92ZShkYXRhcykpKTsKKyAgICBfZGVsZWdhdGVDYWxsYmFjayhTcGVlY2hSZWNv
Z25pdGlvblVwZGF0ZTo6Y3JlYXRlUmVzdWx0KF9pZGVudGlmaWVyLCB7IFNwZWVjaFJlY29nbml0
aW9uUmVzdWx0RGF0YSB7IFdURk1vdmUoYWx0ZXJuYXRpdmVzKSwgISFpc0ZpbmFsIH0gfSkpOwog
fQogCiAtICh2b2lkKWF1ZGlvU2FtcGxlc0F2YWlsYWJsZTooQ01TYW1wbGVCdWZmZXJSZWYpc2Ft
cGxlQnVmZmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9jb2Nv
YS9XZWJTcGVlY2hSZWNvZ25pemVyVGFza01vY2subW0gYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFza01vY2subW0KaW5kZXggYmM1YzYy
MTliNWRhZGMzYjFjZGM1OTBkNjVjODk3YjcyNTBiMWUyMS4uYzcyNzU5Yjc2N2FhOTU4N2Q3Mzdl
YTQwMjlhMzE2N2Y4Yzk3ZjJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9z
cGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2tNb2NrLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVjaFJlY29nbml6ZXJUYXNrTW9jay5t
bQpAQCAtNjMsMTEgKzYzLDggQEAgLSAodm9pZClhdWRpb1NhbXBsZXNBdmFpbGFibGU6KENNU2Ft
cGxlQnVmZmVyUmVmKXNhbXBsZUJ1ZmZlcgogICAgIH0KIAogICAgIC8vIEZha2Ugc29tZSByZWNv
Z25pdGlvbiByZXN1bHRzLgotICAgIFZlY3RvcjxTcGVlY2hSZWNvZ25pdGlvbkFsdGVybmF0aXZl
RGF0YT4gYWx0ZXJuYXRpdmVzOwotICAgIGFsdGVybmF0aXZlcy5hcHBlbmQoU3BlZWNoUmVjb2du
aXRpb25BbHRlcm5hdGl2ZURhdGEgeyAiVGVzdCIsIDEuMCB9KTsKLSAgICBWZWN0b3I8U3BlZWNo
UmVjb2duaXRpb25SZXN1bHREYXRhPiBkYXRhczsKLSAgICBkYXRhcy5hcHBlbmQoU3BlZWNoUmVj
b2duaXRpb25SZXN1bHREYXRhIHsgV1RGTW92ZShhbHRlcm5hdGl2ZXMpLCB0cnVlICB9KTsKLSAg
ICBfZGVsZWdhdGVDYWxsYmFjayhTcGVlY2hSZWNvZ25pdGlvblVwZGF0ZTo6Y3JlYXRlUmVzdWx0
KF9pZGVudGlmaWVyLCBXVEZNb3ZlKGRhdGFzKSkpOworICAgIFNwZWVjaFJlY29nbml0aW9uQWx0
ZXJuYXRpdmVEYXRhIGFsdGVybmF0aXZlIHsgIlRlc3QiLCAxLjAgfTsKKyAgICBfZGVsZWdhdGVD
YWxsYmFjayhTcGVlY2hSZWNvZ25pdGlvblVwZGF0ZTo6Y3JlYXRlUmVzdWx0KF9pZGVudGlmaWVy
LCB7IFNwZWVjaFJlY29nbml0aW9uUmVzdWx0RGF0YSB7IHsgV1RGTW92ZShhbHRlcm5hdGl2ZSkg
fSwgdHJ1ZSB9IH0pKTsKIAogICAgIGlmICghX2RvTXVsdGlwbGVSZWNvZ25pdGlvbnMpCiAgICAg
ICAgIFtzZWxmIGFib3J0XTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9D
U1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJv
cGVydHlBbmltYXRpb24uY3BwCmluZGV4IGUzNTlhMDQzYjJlM2NmMzlmOWMyNmJjNTllOThmMTA1
ZTEzMmMxMDUuLjhiY2U2NjcwNjZhM2Y3NzZmMGVhYmE5NjZiODFhNzQ2YTk3NWUzMjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcApA
QCAtMTY0LDEwICsxNjQsOCBAQCBzdGF0aWMgaW5saW5lIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxl
bmRGdW5jKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGNvbgogICAgIGlmIChjb250
ZXh0LmNvbXBvc2l0ZU9wZXJhdGlvbiA9PSBDb21wb3NpdGVPcGVyYXRpb246OkFkZCkgewogICAg
ICAgICBBU1NFUlQoY29udGV4dC5wcm9ncmVzcyA9PSAxLjApOwogICAgICAgICBUcmFuc2Zvcm1P
cGVyYXRpb25zIHJlc3VsdE9wZXJhdGlvbnM7Ci0gICAgICAgIGZvciAoYXV0byBvcGVyYXRpb24g
OiBmcm9tLm9wZXJhdGlvbnMoKSkKLSAgICAgICAgICAgIHJlc3VsdE9wZXJhdGlvbnMub3BlcmF0
aW9ucygpLmFwcGVuZChvcGVyYXRpb24pOwotICAgICAgICBmb3IgKGF1dG8gb3BlcmF0aW9uIDog
dG8ub3BlcmF0aW9ucygpKQotICAgICAgICAgICAgcmVzdWx0T3BlcmF0aW9ucy5vcGVyYXRpb25z
KCkuYXBwZW5kKG9wZXJhdGlvbik7CisgICAgICAgIHJlc3VsdE9wZXJhdGlvbnMub3BlcmF0aW9u
cygpLmFwcGVuZFZlY3Rvcihmcm9tLm9wZXJhdGlvbnMoKSk7CisgICAgICAgIHJlc3VsdE9wZXJh
dGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZFZlY3Rvcih0by5vcGVyYXRpb25zKCkpOwogICAgICAg
ICByZXR1cm4gcmVzdWx0T3BlcmF0aW9uczsKICAgICB9CiAgICAgYXV0byBib3hTaXplID0gaXM8
UmVuZGVyQm94Pihjb250ZXh0LmNsaWVudC0+cmVuZGVyZXIoKSkgPyBkb3duY2FzdDxSZW5kZXJC
b3g+KCpjb250ZXh0LmNsaWVudC0+cmVuZGVyZXIoKSkuYm9yZGVyQm94UmVjdCgpLnNpemUoKSA6
IExheW91dFNpemUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1
bWVudFRpbWVsaW5lc0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0Rv
Y3VtZW50VGltZWxpbmVzQ29udHJvbGxlci5jcHAKaW5kZXggYjVmZDJhZWYxMDAwMTJkYTljNGJk
YjIxZTdhZDA0MWEzNjY0MTZiZi4uNzA5NDUzYmM2NjI1MmY5NTk4MjRiYTk0ZWNhN2EzMzAwOGM5
Y2EzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxp
bmVzQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50
VGltZWxpbmVzQ29udHJvbGxlci5jcHAKQEAgLTk4LDkgKzk4LDcgQEAgdm9pZCBEb2N1bWVudFRp
bWVsaW5lc0NvbnRyb2xsZXI6OnVwZGF0ZUFuaW1hdGlvbnNBbmRTZW5kRXZlbnRzKFJlZHVjZWRS
ZXNvbHV0aW8KICAgICBBU1NFUlQoIW1fdGltZWxpbmVzLmhhc051bGxSZWZlcmVuY2VzKCkpOwog
CiAgICAgLy8gV2UgbmVlZCB0byBjb3B5IG1fdGltZWxpbmVzIGJlZm9yZSBpdGVyYXRpbmcgb3Zl
ciBpdHMgbWVtYmVycyBzaW5jZSB0aGUgc3RlcHMgaW4gdGhpcyBwcm9jZWR1cmUgbWF5IG11dGF0
ZSBtX3RpbWVsaW5lcy4KLSAgICBWZWN0b3I8UmVmPERvY3VtZW50VGltZWxpbmU+PiBwcm90ZWN0
ZWRUaW1lbGluZXM7Ci0gICAgZm9yIChhdXRvJiB0aW1lbGluZSA6IG1fdGltZWxpbmVzKQotICAg
ICAgICBwcm90ZWN0ZWRUaW1lbGluZXMuYXBwZW5kKHRpbWVsaW5lKTsKKyAgICBhdXRvIHByb3Rl
Y3RlZFRpbWVsaW5lcyA9IGNvcHlUb1ZlY3Rvck9mPFJlZjxEb2N1bWVudFRpbWVsaW5lPj4obV90
aW1lbGluZXMpOwogCiAgICAgLy8gV2UgbmVlZCB0byBmcmVlemUgdGhlIGN1cnJlbnQgdGltZSBl
dmVuIGlmIG5vIGFuaW1hdGlvbiBpcyBydW5uaW5nLgogICAgIC8vIGRvY3VtZW50LnRpbWVsaW5l
LmN1cnJlbnRUaW1lIG1heSBiZSBjYWxsZWQgZnJvbSBhIHJBRiBjYWxsYmFjayBhbmQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwCmluZGV4IDQ0NDRjY2QwODdh
ZTQ4MDQ4MGM1ODlmZjRkNjg4ZTNmYzdjMWEyNmEuLjNkMDkxZWVlNTM4NzQ0MjAzZjczOGI4NmMw
NzY3NjU3ZjRlY2YwOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlm
cmFtZUVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZm
ZWN0LmNwcApAQCAtMzc1LDggKzM3NSw3IEBAIHN0YXRpYyBpbmxpbmUgRXhjZXB0aW9uT3I8dm9p
ZD4gcHJvY2Vzc1Byb3BlcnR5SW5kZXhlZEtleWZyYW1lcyhKU0dsb2JhbE9iamVjdCYKICAgICAg
ICAgY29tcHV0ZU1pc3NpbmdLZXlmcmFtZU9mZnNldHMocHJvcGVydHlLZXlmcmFtZXMpOwogCiAg
ICAgICAgIC8vIDcuIEFkZCBrZXlmcmFtZXMgaW4gcHJvcGVydHkga2V5ZnJhbWVzIHRvIHByb2Nl
c3NlZCBrZXlmcmFtZXMuCi0gICAgICAgIGZvciAoYXV0byYga2V5ZnJhbWUgOiBwcm9wZXJ0eUtl
eWZyYW1lcykKLSAgICAgICAgICAgIHBhcnNlZEtleWZyYW1lcy5hcHBlbmQoV1RGTW92ZShrZXlm
cmFtZSkpOworICAgICAgICBwYXJzZWRLZXlmcmFtZXMuYXBwZW5kVmVjdG9yKHByb3BlcnR5S2V5
ZnJhbWVzKTsKICAgICB9CiAKICAgICAvLyAzLiBTb3J0IHByb2Nlc3NlZCBrZXlmcmFtZXMgYnkg
dGhlIGNvbXB1dGVkIGtleWZyYW1lIG9mZnNldCBvZiBlYWNoIGtleWZyYW1lIGluIGluY3JlYXNp
bmcgb3JkZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0Nv
bnRlbnRFeHRlbnNpb24uY3BwCmluZGV4IDUzNDllZjM4ZmU2OTA2NGRkNDUzZmQ2OGQ3ZGM2YThl
ZTc3M2Q5ZWMuLmMwNWNkODk0MTVmZjQxMjA0ZTNjM2M4Yzc3M2Y0OGQxMTM2M2MwOTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNp
b24uY3BwCkBAIC00Niw4ICs0Niw3IEBAIENvbnRlbnRFeHRlbnNpb246OkNvbnRlbnRFeHRlbnNp
b24oY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBSZWY8Q29tcGlsZWRDb250ZW50CiAgICAgLCBt
X2V4dGVuc2lvbkJhc2VVUkwoV1RGTW92ZShleHRlbnNpb25CYXNlVVJMKSkKIHsKICAgICBERkFC
eXRlY29kZUludGVycHJldGVyIGludGVycHJldGVyKG1fY29tcGlsZWRFeHRlbnNpb24tPnVybEZp
bHRlcnNCeXRlY29kZSgpKTsKLSAgICBmb3IgKHVpbnQ2NF90IGFjdGlvbiA6IGludGVycHJldGVy
LmFjdGlvbnNNYXRjaGluZ0V2ZXJ5dGhpbmcoKSkKLSAgICAgICAgbV91bml2ZXJzYWxBY3Rpb25z
LmFwcGVuZChhY3Rpb24pOworICAgIG1fdW5pdmVyc2FsQWN0aW9ucyA9IGNvcHlUb1ZlY3Rvcihp
bnRlcnByZXRlci5hY3Rpb25zTWF0Y2hpbmdFdmVyeXRoaW5nKCkpOwogCiAgICAgaWYgKHNob3Vs
ZENvbXBpbGVDU1MgPT0gU2hvdWxkQ29tcGlsZUNTUzo6WWVzKQogICAgICAgICBjb21waWxlR2xv
YmFsRGlzcGxheU5vbmVTdHlsZVNoZWV0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVmFsdWVMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgKaW5k
ZXggYmIxMjczYTVmZDNlZThlNjg4MGJhNzY3YWY5MjkxN2ViZGRhNzQ4Zi4uZjlhNzYwNjA0MDg5
YjBjZTJmNjlmODc2ODY1NGYxMjY4MjM3YTY3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1ZhbHVlTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3Qu
aApAQCAtNTgsNiArNTgsNyBAQCBwdWJsaWM6CiAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZXMuZW5kKCk7IH0KICAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0
dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KICAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX3Zh
bHVlcy5lbmQoKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMu
c2l6ZSgpOyB9CiAKICAgICB2b2lkIGFwcGVuZChSZWY8Q1NTVmFsdWU+JiYpOwogICAgIHZvaWQg
cHJlcGVuZChSZWY8Q1NTVmFsdWU+JiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL2NhbGMv
Q1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwCmluZGV4IDZhYjVjYjY3NGQ0MTUzZDgyMjUyZjI1ODdl
ZTQ2ZmNmNWFhYzhjNGEuLjc5ZjJhODgyNjBjZWFlZjBkNTgwMTU3NjYxMzljMDc1NzY2N2MwMGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2Rl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5j
cHAKQEAgLTYyMCwxNCArNjIwLDExIEBAIHZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmhvaXN0
Q2hpbGRyZW5XaXRoT3BlcmF0b3IoQ2FsY09wZXJhdG9yIG9wKQogCiAgICAgVmVjdG9yPFJlZjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBuZXdDaGlsZHJlbjsKICAgICBmb3IgKGF1dG8mIGNoaWxk
IDogbV9jaGlsZHJlbikgewotICAgICAgICBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNo
aWxkKSAmJiBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpLmNhbGNP
cGVyYXRvcigpID09IG9wKSB7Ci0gICAgICAgICAgICBhdXRvJiBjaGlsZHJlbiA9IGRvd25jYXN0
PENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZC5nZXQoKSkuY2hpbGRyZW4oKTsKLSAgICAgICAg
ICAgIGZvciAoYXV0byYgY2hpbGRUb01vdmUgOiBjaGlsZHJlbikKLSAgICAgICAgICAgICAgICBu
ZXdDaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShjaGlsZFRvTW92ZSkpOwotICAgICAgICB9IGVsc2UK
KyAgICAgICAgaWYgKGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZCkgJiYgZG93bmNhc3Q8
Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKS5jYWxjT3BlcmF0b3IoKSA9PSBvcCkK
KyAgICAgICAgICAgIG5ld0NoaWxkcmVuLmFwcGVuZFZlY3Rvcihkb3duY2FzdDxDU1NDYWxjT3Bl
cmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpLmNoaWxkcmVuKCkpOworICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShjaGlsZCkpOwogICAgIH0KLSAgICAK
ICAgICBuZXdDaGlsZHJlbi5zaHJpbmtUb0ZpdCgpOwogICAgIG1fY2hpbGRyZW4gPSBXVEZNb3Zl
KG5ld0NoaWxkcmVuKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJp
bmdMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NU3RyaW5nTGlzdC5oCmluZGV4IDY5Y2Iy
ZDdmOTMyZTAwYTI2NWUwOGQ4ZmYzYjFjYjUwYzEyNzdjZTUuLjI4ZWM2ZjZkNjY4NGFjMDNiZTU0
MTMyYjBiMzMxZDZkNTE5ZTM2MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01T
dHJpbmdMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTVN0cmluZ0xpc3QuaApAQCAt
NDAsOSArNDAsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBET01T
dHJpbmdMaXN0KTsKICAgICB9CiAKKyAgICBzdGF0aWMgUmVmPERPTVN0cmluZ0xpc3Q+IGNyZWF0
ZShWZWN0b3I8U3RyaW5nPiYmIHN0cmluZ3MpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBET01TdHJpbmdMaXN0KFdURk1vdmUoc3RyaW5ncykpKTsKKyAgICB9CisKICAgICBi
b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZ3MuaXNFbXB0eSgpOyB9CiAgICAg
dm9pZCBjbGVhcigpIHsgbV9zdHJpbmdzLmNsZWFyKCk7IH0KLSAgICB2b2lkIGFwcGVuZChjb25z
dCBTdHJpbmcmIHN0cmluZykgeyBtX3N0cmluZ3MuYXBwZW5kKHN0cmluZyk7IH0KKyAgICB2b2lk
IGFwcGVuZChTdHJpbmcmJiBzdHJpbmcpIHsgbV9zdHJpbmdzLmFwcGVuZChXVEZNb3ZlKHN0cmlu
ZykpOyB9CiAgICAgdm9pZCBzb3J0KCk7CiAKICAgICAvLyBJbXBsZW1lbnRzIHRoZSBJREwuCkBA
IC01Myw3ICs1OCwxMSBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmdzOyB9CiAKIHByaXZhdGU6Ci0gICAgRE9NU3Ry
aW5nTGlzdCgpIHsgfQorICAgIERPTVN0cmluZ0xpc3QoKSA9IGRlZmF1bHQ7CisgICAgZXhwbGlj
aXQgRE9NU3RyaW5nTGlzdChWZWN0b3I8U3RyaW5nPiYmIHN0cmluZ3MpCisgICAgICAgIDogbV9z
dHJpbmdzKFdURk1vdmUoc3RyaW5ncykpCisgICAgeworICAgIH0KIAogICAgIFZlY3RvcjxTdHJp
bmc+IG1fc3RyaW5nczsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRQ
YXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFBhdGguY3BwCmluZGV4IDQ2ZmI2NDVl
MDUzMzc1ODFmOWZhMzQ1MjMwM2EyZmUzODBmNDZjMDYuLmVjYmNjMDBmMzZmMDc2ZTMyMGI2YWQx
NmFkMWQ5YTBiZjAzOGUyNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFBh
dGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFBhdGguY3BwCkBAIC0yNzQsMTEg
KzI3NCwxMSBAQCBWZWN0b3I8RXZlbnRUYXJnZXQqPiBFdmVudFBhdGg6OmNvbXB1dGVQYXRoVW5j
bG9zZWRUb1RhcmdldChjb25zdCBFdmVudFRhcmdldCYgdAogCiBFdmVudFBhdGg6OkV2ZW50UGF0
aChjb25zdCBWZWN0b3I8RXZlbnRUYXJnZXQqPiYgdGFyZ2V0cykKIHsKLSAgICBmb3IgKGF1dG8q
IHRhcmdldCA6IHRhcmdldHMpIHsKKyAgICBtX3BhdGggPSB0YXJnZXRzLm1hcChbJl0oYXV0byog
dGFyZ2V0KSB7CiAgICAgICAgIEFTU0VSVCh0YXJnZXQpOwogICAgICAgICBBU1NFUlQoIWlzPE5v
ZGU+KHRhcmdldCkpOwotICAgICAgICBtX3BhdGguYXBwZW5kKEV2ZW50Q29udGV4dCB7IEV2ZW50
Q29udGV4dDo6VHlwZTo6Tm9ybWFsLCBudWxscHRyLCB0YXJnZXQsICp0YXJnZXRzLmJlZ2luKCks
IDAgfSk7Ci0gICAgfQorICAgICAgICByZXR1cm4gRXZlbnRDb250ZXh0IHsgRXZlbnRDb250ZXh0
OjpUeXBlOjpOb3JtYWwsIG51bGxwdHIsIHRhcmdldCwgKnRhcmdldHMuYmVnaW4oKSwgMCB9Owor
ICAgIH0pOwogfQogCiBzdGF0aWMgTm9kZSogbW92ZU91dE9mQWxsU2hhZG93Um9vdHMoTm9kZSYg
c3RhcnRpbmdOb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Z1bGxzY3JlZW5N
YW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9GdWxsc2NyZWVuTWFuYWdlci5jcHAKaW5k
ZXggZWNlNDhlNDI2Nzk3MDk1ZGE3MDlhMDRkYTY4NmE0ZmUwYmMyOTI4Yy4uMGU5YmI5NDQxYzM3
ZGY1M2Q0NzE4MzhjY2MxYWFkY2I2Mzc3OGJlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0Z1bGxzY3JlZW5NYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRnVsbHNj
cmVlbk1hbmFnZXIuY3BwCkBAIC0yNjUsOSArMjY1LDggQEAgdm9pZCBGdWxsc2NyZWVuTWFuYWdl
cjo6Y2FuY2VsRnVsbHNjcmVlbigpCiAKICAgICAvLyBUbyBhY2hpZXZlIHRoYXQgYWltLCByZW1v
dmUgYWxsIHRoZSBlbGVtZW50cyBmcm9tIHRoZSB0b3AgZG9jdW1lbnQncyBzdGFjayBleGNlcHQg
Zm9yIHRoZSBmaXJzdCBiZWZvcmUKICAgICAvLyBjYWxsaW5nIHdlYmtpdEV4aXRGdWxsc2NyZWVu
KCk6Ci0gICAgVmVjdG9yPFJlZlB0cjxFbGVtZW50Pj4gcmVwbGFjZW1lbnRGdWxsc2NyZWVuRWxl
bWVudFN0YWNrOwotICAgIHJlcGxhY2VtZW50RnVsbHNjcmVlbkVsZW1lbnRTdGFjay5hcHBlbmQo
dG9wRG9jdW1lbnQuZnVsbHNjcmVlbk1hbmFnZXIoKS5mdWxsc2NyZWVuRWxlbWVudCgpKTsKLSAg
ICB0b3BEb2N1bWVudC5mdWxsc2NyZWVuTWFuYWdlcigpLm1fZnVsbHNjcmVlbkVsZW1lbnRTdGFj
ay5zd2FwKHJlcGxhY2VtZW50RnVsbHNjcmVlbkVsZW1lbnRTdGFjayk7CisgICAgUmVmUHRyIGZ1
bGxzY3JlbkVsZW1lbnQgPSB0b3BEb2N1bWVudC5mdWxsc2NyZWVuTWFuYWdlcigpLmZ1bGxzY3Jl
ZW5FbGVtZW50KCk7CisgICAgdG9wRG9jdW1lbnQuZnVsbHNjcmVlbk1hbmFnZXIoKS5tX2Z1bGxz
Y3JlZW5FbGVtZW50U3RhY2sgPSB7IFdURk1vdmUoZnVsbHNjcmVuRWxlbWVudCkgfTsKIAogICAg
IHRvcERvY3VtZW50LmZ1bGxzY3JlZW5NYW5hZ2VyKCkuZXhpdEZ1bGxzY3JlZW4oKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJsZVNjcmlwdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vTG9hZGFibGVTY3JpcHQuY3BwCmluZGV4IDFiZGRlMWViNWQ2YTA3ZjExNzM4
OWI5OWM3NWVjYjAxYjYwZjg4MDkuLjQxZjQzY2U2Njg1MDMwZWQ5ZDM5ZGYwNWI5ZmM5MjNiMTIz
OTVkZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Mb2FkYWJsZVNjcmlwdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0xvYWRhYmxlU2NyaXB0LmNwcApAQCAtNTEsMTIgKzUx
LDggQEAgdm9pZCBMb2FkYWJsZVNjcmlwdDo6cmVtb3ZlQ2xpZW50KExvYWRhYmxlU2NyaXB0Q2xp
ZW50JiBjbGllbnQpCiAKIHZvaWQgTG9hZGFibGVTY3JpcHQ6Om5vdGlmeUNsaWVudEZpbmlzaGVk
KCkKIHsKLSAgICBSZWZQdHI8TG9hZGFibGVTY3JpcHQ+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0K
LSAgICBWZWN0b3I8TG9hZGFibGVTY3JpcHRDbGllbnQqPiB2ZWN0b3I7Ci0gICAgZm9yIChhdXRv
JiBwYWlyIDogbV9jbGllbnRzKQotICAgICAgICB2ZWN0b3IuYXBwZW5kKHBhaXIua2V5KTsKLSAg
ICBmb3IgKGF1dG8mIGNsaWVudCA6IHZlY3RvcikKKyAgICBSZWYgcHJvdGVjdGVkVGhpcyB7ICp0
aGlzIH07CisgICAgZm9yIChhdXRvJiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzLnZh
bHVlcygpKSkKICAgICAgICAgY2xpZW50LT5ub3RpZnlGaW5pc2hlZCgqdGhpcyk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwCmluZGV4IDUwZjQ2MzBmODllYzg5
NWRmMWNlNWFiOGVkNTgxODliN2FmYmY2NjIuLjEyMjYzZTI1NmVlNTZhNDUyYzMyMjgxMjVjYWRk
NWYxNzBmNDVmMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdy
b3Vwcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0dG9uR3JvdXBzLmNwcApA
QCAtNTksOSArNTksNyBAQCBpbmxpbmUgYm9vbCBSYWRpb0J1dHRvbkdyb3VwOjppc1ZhbGlkKCkg
Y29uc3QKIAogVmVjdG9yPFJlZjxIVE1MSW5wdXRFbGVtZW50Pj4gUmFkaW9CdXR0b25Hcm91cDo6
bWVtYmVycygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFJlZjxIVE1MSW5wdXRFbGVtZW50Pj4gc29y
dGVkTWVtYmVyczsKLSAgICBmb3IgKGF1dG8mIG1lbWJlciA6IG1fbWVtYmVycykKLSAgICAgICAg
c29ydGVkTWVtYmVycy5hcHBlbmQobWVtYmVyKTsKKyAgICBhdXRvIHNvcnRlZE1lbWJlcnMgPSBj
b3B5VG9WZWN0b3JPZjxSZWY8SFRNTElucHV0RWxlbWVudD4+KG1fbWVtYmVycyk7CiAgICAgc3Rk
Ojpzb3J0KHNvcnRlZE1lbWJlcnMuYmVnaW4oKSwgc29ydGVkTWVtYmVycy5lbmQoKSwgW10oYXV0
byYgYSwgYXV0byYgYikgewogICAgICAgICByZXR1cm4gaXNfbHQodHJlZU9yZGVyPENvbXBvc2Vk
VHJlZT4oYSwgYikpOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9E
aXJlY3RvcnlGaWxlTGlzdENyZWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9EaXJlY3Rv
cnlGaWxlTGlzdENyZWF0b3IuY3BwCmluZGV4IDlkM2RhMTg1M2MzYTYzMjBmZWIzMTk3NTE2MmU0
MzVhZTkzZmZkZDEuLjk4NWY3YTYyZjBjMWYzOTc1NTgyZWIzZjliOTg5NzUxNTYxNTY2NzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGlyZWN0b3J5RmlsZUxpc3RDcmVhdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RpcmVjdG9yeUZpbGVMaXN0Q3JlYXRvci5jcHAK
QEAgLTg2LDEzICs4NiwxMSBAQCBzdGF0aWMgVmVjdG9yPEZpbGVJbmZvcm1hdGlvbj4gZ2F0aGVy
RmlsZUluZm9ybWF0aW9uKGNvbnN0IFZlY3RvcjxGaWxlQ2hvb3NlckZpbAogc3RhdGljIFJlZjxG
aWxlTGlzdD4gdG9GaWxlTGlzdChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFZlY3RvcjxGaWxl
SW5mb3JtYXRpb24+JiBmaWxlcykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAg
IFZlY3RvcjxSZWY8RmlsZT4+IGZpbGVPYmplY3RzOwotICAgIGZvciAoYXV0byYgZmlsZSA6IGZp
bGVzKSB7CisgICAgYXV0byBmaWxlT2JqZWN0cyA9IGZpbGVzLm1hcChbZG9jdW1lbnRdKGF1dG8m
IGZpbGUpIHsKICAgICAgICAgaWYgKGZpbGUucmVsYXRpdmVQYXRoLmlzTnVsbCgpKQotICAgICAg
ICAgICAgZmlsZU9iamVjdHMuYXBwZW5kKEZpbGU6OmNyZWF0ZShkb2N1bWVudCwgZmlsZS5wYXRo
LCB7IH0sIGZpbGUuZGlzcGxheU5hbWUpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZmls
ZU9iamVjdHMuYXBwZW5kKEZpbGU6OmNyZWF0ZVdpdGhSZWxhdGl2ZVBhdGgoZG9jdW1lbnQsIGZp
bGUucGF0aCwgZmlsZS5yZWxhdGl2ZVBhdGgpKTsKLSAgICB9CisgICAgICAgICAgICByZXR1cm4g
RmlsZTo6Y3JlYXRlKGRvY3VtZW50LCBmaWxlLnBhdGgsIHsgfSwgZmlsZS5kaXNwbGF5TmFtZSk7
CisgICAgICAgIHJldHVybiBGaWxlOjpjcmVhdGVXaXRoUmVsYXRpdmVQYXRoKGRvY3VtZW50LCBm
aWxlLnBhdGgsIGZpbGUucmVsYXRpdmVQYXRoKTsKKyAgICB9KTsKICAgICByZXR1cm4gRmlsZUxp
c3Q6OmNyZWF0ZShXVEZNb3ZlKGZpbGVPYmplY3RzKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKaW5kZXggYzRiMDg0ZDJkZTcxZmQzMTlmZThjMDY5YjQ1
ZmY3ZmNjY2VkZTVlYy4uNzJhZmUwNGUwN2Y4OWM4YzI0YWYzZjhiOGNhZDM4Y2UyOTZhOGQwMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKQEAgLTYzNCw5ICs2
MzQsOSBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzYXZlTGFzdFNlbGVjdGlvbigpCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2xhc3RPbkNoYW5nZVNlbGVjdGlvbi5jbGVhcigp
OwotICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGxpc3RJdGVtcygpKQotICAgICAgICBtX2xhc3RP
bkNoYW5nZVNlbGVjdGlvbi5hcHBlbmQoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSAm
JiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCkpOworICAg
IG1fbGFzdE9uQ2hhbmdlU2VsZWN0aW9uID0gbGlzdEl0ZW1zKCkubWFwKFtdKGF1dG8mIGVsZW1l
bnQpIHsKKyAgICAgICAgcmV0dXJuIGlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkgJiYg
ZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KS5zZWxlY3RlZCgpOworICAgIH0p
OwogfQogCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJ
bmRleChpbnQgaW5kZXgpCkBAIC02NDUsMTAgKzY0NSw5IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1l
bnQ6OnNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KGludCBpbmRleCkKIAogICAgIC8vIENh
Y2hlIHRoZSBzZWxlY3Rpb24gc3RhdGUgc28gd2UgY2FuIHJlc3RvcmUgdGhlIG9sZCBzZWxlY3Rp
b24gYXMgdGhlIG5ldwogICAgIC8vIHNlbGVjdGlvbiBwaXZvdHMgYXJvdW5kIHRoaXMgYW5jaG9y
IGluZGV4LgotICAgIG1fY2FjaGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rpb24uY2xlYXIoKTsKLQot
ICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGxpc3RJdGVtcygpKQotICAgICAgICBtX2NhY2hlZFN0
YXRlRm9yQWN0aXZlU2VsZWN0aW9uLmFwcGVuZChpczxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1l
bnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKSk7
CisgICAgbV9jYWNoZWRTdGF0ZUZvckFjdGl2ZVNlbGVjdGlvbiA9IGxpc3RJdGVtcygpLm1hcChb
XShhdXRvJiBlbGVtZW50KSB7CisgICAgICAgIHJldHVybiBpczxIVE1MT3B0aW9uRWxlbWVudD4o
KmVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0
ZWQoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0QWN0aXZlU2Vs
ZWN0aW9uRW5kSW5kZXgoaW50IGluZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9JbWFnZUJpdG1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcApp
bmRleCAwNWIyNzM3OWYyZDkyMTk0NDg5MzJjNDZhYjMzYjJlZjAzMWFmYzZhLi41OWJmYzZlMGYx
ZTU5MDQzZGNjNWJiZGEyZDIyYWFlMzY1YTYxMzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0ltYWdlQml0bWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0
bWFwLmNwcApAQCAtMTEyLDEwICsxMTIsOSBAQCB2b2lkIEltYWdlQml0bWFwOjpjcmVhdGVQcm9t
aXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsCiAKIFZl
Y3RvcjxzdGQ6Om9wdGlvbmFsPEltYWdlQml0bWFwQmFja2luZz4+IEltYWdlQml0bWFwOjpkZXRh
Y2hCaXRtYXBzKFZlY3RvcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiYmIGJpdG1hcHMpCiB7Ci0gICAg
VmVjdG9yPHN0ZDo6b3B0aW9uYWw8SW1hZ2VCaXRtYXBCYWNraW5nPj4gYnVmZmVyczsKLSAgICBm
b3IgKGF1dG8mIGJpdG1hcCA6IGJpdG1hcHMpCi0gICAgICAgIGJ1ZmZlcnMuYXBwZW5kKGJpdG1h
cC0+dGFrZUltYWdlQml0bWFwQmFja2luZygpKTsKLSAgICByZXR1cm4gYnVmZmVyczsKKyAgICBy
ZXR1cm4gV1RGOjptYXAoV1RGTW92ZShiaXRtYXBzKSwgW10oYXV0byYmIGJpdG1hcCkgeworICAg
ICAgICByZXR1cm4gYml0bWFwLT50YWtlSW1hZ2VCaXRtYXBCYWNraW5nKCk7CisgICAgfSk7CiB9
CiAKIHZvaWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgSW1hZ2VCaXRtYXA6OlNvdXJjZSYmIHNvdXJjZSwg
SW1hZ2VCaXRtYXBPcHRpb25zJiYgb3B0aW9ucywgaW50IHN4LCBpbnQgc3ksIGludCBzdywgaW50
IHNoLCBJbWFnZUJpdG1hcDo6UHJvbWlzZSYmIHByb21pc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCmluZGV4
IDYxMTQ2MDI3N2Y2Njc5YTQ5MWUwZjk4MzE3Nzk3MzAwN2ViYmRkYzYuLmY3MzM2NGYzODYwYzI2
YjkzNjYxOGM0ZjdlMWExNzgyNWU4ZDUwMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCkBAIC0zMDIxLDkg
KzMwMjEsOCBAQCBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxSZWZQdHI8V2ViR0xTaGFkZXI+Pj4gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0YWNoZQogICAgIH07CiAgICAgVmVjdG9yPFJl
ZlB0cjxXZWJHTFNoYWRlcj4+IHNoYWRlck9iamVjdHM7CiAgICAgZm9yIChhdXRvIHNoYWRlclR5
cGUgOiBzaGFkZXJUeXBlcykgewotICAgICAgICBSZWZQdHI8V2ViR0xTaGFkZXI+IHNoYWRlciA9
IHByb2dyYW0uZ2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVyVHlwZSk7Ci0gICAgICAgIGlmIChzaGFk
ZXIpCi0gICAgICAgICAgICBzaGFkZXJPYmplY3RzLmFwcGVuZChzaGFkZXIpOworICAgICAgICBp
ZiAoUmVmUHRyIHNoYWRlciA9IHByb2dyYW0uZ2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVyVHlwZSkp
CisgICAgICAgICAgICBzaGFkZXJPYmplY3RzLmFwcGVuZChXVEZNb3ZlKHNoYWRlcikpOwogICAg
IH0KICAgICByZXR1cm4gc2hhZGVyT2JqZWN0czsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCmluZGV4IDhhY2I2OGFmNDU1
MWEzOGI3OTljNzEzYWE3NWRjMGY3OTE5MDA0YmUuLjBhNWVkNzhmNDU4Zjk5YjZiYzdmYzM3MWRm
OTRjZmU5MjVhNGQ0ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxNZXRhQ2hhcnNldFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcApAQCAtODUsMTIgKzg1LDExIEBAIHN0YXRpYyBTdHJp
bmdWaWV3IGV4dHJhY3RDaGFyc2V0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAKIGJvb2wgSFRNTE1l
dGFDaGFyc2V0UGFyc2VyOjpwcm9jZXNzTWV0YShIVE1MVG9rZW4mIHRva2VuKQogewotICAgIEF0
dHJpYnV0ZUxpc3QgYXR0cmlidXRlczsKLSAgICBmb3IgKGF1dG8mIGF0dHJpYnV0ZSA6IHRva2Vu
LmF0dHJpYnV0ZXMoKSkgeworICAgIGF1dG8gYXR0cmlidXRlcyA9IHRva2VuLmF0dHJpYnV0ZXMo
KS5tYXAoW10oYXV0byYgYXR0cmlidXRlKSB7CiAgICAgICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1l
ID0gU3RyaW5nSW1wbDo6Y3JlYXRlOEJpdElmUG9zc2libGUoYXR0cmlidXRlLm5hbWUpOwogICAg
ICAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUgPSBTdHJpbmdJbXBsOjpjcmVhdGU4Qml0SWZQb3Nz
aWJsZShhdHRyaWJ1dGUudmFsdWUpOwotICAgICAgICBhdHRyaWJ1dGVzLmFwcGVuZChzdGQ6Om1h
a2VfcGFpcihhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVWYWx1ZSkpOwotICAgIH0KKyAgICAgICAg
cmV0dXJuIHN0ZDo6cGFpciB7IFdURk1vdmUoYXR0cmlidXRlTmFtZSksIFdURk1vdmUoYXR0cmli
dXRlVmFsdWUpIH07CisgICAgfSk7CiAKICAgICBtX2VuY29kaW5nID0gZW5jb2RpbmdGcm9tTWV0
YUF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CiAgICAgcmV0dXJuIG1fZW5jb2RpbmcuaXNWYWxpZCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKaW5k
ZXggNmI3MWJlZjgxYTdlMjg0NzFlZWZkN2M1MzE1MmE4YTBhODJkMmRiNS4uYTFmMTY3Y2IwODNj
OTk4NDM2MTgzNDExODAyOWYyODVlNDFjMDAwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCkBAIC0yMjAwLDExICsyMjAwLDEwIEBAIHZvaWQg
SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2hhcmFjdGVyKEF0b21IVE1MVG9rZW4mJiB0b2tlbikK
IC8vIEZyb20gdGhlIHN0cmluZyA0MDg5OTYxMDEwLCBjcmVhdGVzIGEgbGluayBvZiB0aGUgZm9y
bSA8YSBocmVmPSJ0ZWw6NDA4OTk2MTAxMCI+NDA4OTk2MTAxMDwvYT4gYW5kIGluc2VydHMgaXQu
CiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6aW5zZXJ0UGhvbmVOdW1iZXJMaW5rKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQogewotICAgIFZlY3RvcjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZXM7Ci0gICAgYXR0
cmlidXRlcy5hcHBlbmQoQXR0cmlidXRlKEhUTUxOYW1lczo6aHJlZkF0dHIsIG1ha2VTdHJpbmco
InRlbDoiX3MsIHN0cmluZykpKTsKKyAgICBBdHRyaWJ1dGUgYXR0cmlidXRlKEhUTUxOYW1lczo6
aHJlZkF0dHIsIG1ha2VTdHJpbmcoInRlbDoiX3MsIHN0cmluZykpOwogCiAgICAgY29uc3QgQXRv
bVN0cmluZyYgYVRhZ0xvY2FsTmFtZSA9IGFUYWctPmxvY2FsTmFtZSgpOwotICAgIEF0b21IVE1M
VG9rZW4gYVN0YXJ0VG9rZW4oSFRNTFRva2VuOjpTdGFydFRhZywgYVRhZ0xvY2FsTmFtZSwgV1RG
TW92ZShhdHRyaWJ1dGVzKSk7CisgICAgQXRvbUhUTUxUb2tlbiBhU3RhcnRUb2tlbihIVE1MVG9r
ZW46OlN0YXJ0VGFnLCBhVGFnTG9jYWxOYW1lLCB7IFdURk1vdmUoYXR0cmlidXRlKSB9KTsKICAg
ICBBdG9tSFRNTFRva2VuIGFFbmRUb2tlbihIVE1MVG9rZW46OkVuZFRhZywgYVRhZ0xvY2FsTmFt
ZSk7CiAKICAgICBwcm9jZXNzU3RhcnRUYWcoV1RGTW92ZShhU3RhcnRUb2tlbikpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNlci5jcHAKaW5kZXgg
NGRhOTU5ZjQwZmU5ZWEzMzc0N2NkMjM4OGNlYjc5ZjZkNzJkYjdlZC4uNDcwNmYyNmU4NDQwOWVl
ODEzY2QxM2JjNWY0ZTBhY2NmNjc0YTg2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwCkBAIC01MSw5ICs1MSw4IEBAIHZvaWQgVGV4
dERvY3VtZW50UGFyc2VyOjppbnNlcnRGYWtlUHJlRWxlbWVudCgpCiAgICAgLy8gV2UgY3JlYXRl
IGEgZmFrZSB0b2tlbiBhbmQgZ2l2ZSBpdCB0byB0aGUgdHJlZSBidWlsZGVyIHJhdGhlciB0aGFu
CiAgICAgLy8gc2VuZGluZyBmYWtlIGJ5dGVzIHRocm91Z2ggdGhlIGZyb250LWVuZCBvZiB0aGUg
cGFyc2VyIHRvIGF2b2lkCiAgICAgLy8gZGlzdHJ1YmluZyB0aGUgbGluZS9jb2x1bW4gbnVtYmVy
IGNhbGN1bGF0aW9ucy4KLSAgICBWZWN0b3I8QXR0cmlidXRlPiBhdHRyaWJ1dGVzOwotICAgIGF0
dHJpYnV0ZXMuYXBwZW5kKEF0dHJpYnV0ZShzdHlsZUF0dHIsICJ3b3JkLXdyYXA6IGJyZWFrLXdv
cmQ7IHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsiKSk7Ci0gICAgQXRvbUhUTUxUb2tlbiBmYWtlUHJl
KEhUTUxUb2tlbjo6U3RhcnRUYWcsIHByZVRhZy0+bG9jYWxOYW1lKCksIFdURk1vdmUoYXR0cmli
dXRlcykpOworICAgIEF0dHJpYnV0ZSBhdHRyaWJ1dGUoc3R5bGVBdHRyLCAid29yZC13cmFwOiBi
cmVhay13b3JkOyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7Iik7CisgICAgQXRvbUhUTUxUb2tlbiBm
YWtlUHJlKEhUTUxUb2tlbjo6U3RhcnRUYWcsIHByZVRhZy0+bG9jYWxOYW1lKCksIHsgV1RGTW92
ZShhdHRyaWJ1dGUpIH0pOwogICAgIHRyZWVCdWlsZGVyKCkuY29uc3RydWN0VHJlZShXVEZNb3Zl
KGZha2VQcmUpKTsKIAogICAgIC8vIE5vcm1hbGx5IHdlIHdvdWxkIHNraXAgdGhlIGZpcnN0IFxu
IGFmdGVyIGEgPHByZT4gZWxlbWVudCwgYnV0IHdlIGRvbid0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvQ29udGVudEZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Q29udGVudEZpbHRlci5jcHAKaW5kZXggNDE5ZTMyZjM5ODJmNjcyYWY2NjMwZmE1ZTBjNjI1YzVj
YjdiMjIzZi4uNGUzNTQ0NTRhYWJhMzRlNGZiZWE0MTVkNDFmZjhlOTJiZjQ0MTQ1YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0NvbnRlbnRGaWx0ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9Db250ZW50RmlsdGVyLmNwcApAQCAtNjcsMTEgKzY3LDkgQEAgVmVj
dG9yPENvbnRlbnRGaWx0ZXI6OlR5cGU+JiBDb250ZW50RmlsdGVyOjp0eXBlcygpCiAKIHN0ZDo6
dW5pcXVlX3B0cjxDb250ZW50RmlsdGVyPiBDb250ZW50RmlsdGVyOjpjcmVhdGUoQ29udGVudEZp
bHRlckNsaWVudCYgY2xpZW50KQogewotICAgIENvbnRhaW5lciBmaWx0ZXJzOwotICAgIGZvciAo
YXV0byYgdHlwZSA6IHR5cGVzKCkpIHsKLSAgICAgICAgYXV0byBmaWx0ZXIgPSB0eXBlLmNyZWF0
ZSgpOwotICAgICAgICBmaWx0ZXJzLmFwcGVuZChXVEZNb3ZlKGZpbHRlcikpOwotICAgIH0KKyAg
ICBhdXRvIGZpbHRlcnMgPSB0eXBlcygpLm1hcChbXShhdXRvJiB0eXBlKSB7CisgICAgICAgIHJl
dHVybiB0eXBlLmNyZWF0ZSgpOworICAgIH0pOwogCiAgICAgaWYgKGZpbHRlcnMuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFBhcnNlci5j
cHAKaW5kZXggYjg3ZGQ4MzUwNjA3YzI0YmUyNTZlMzQ0MWJlZDJkMzc2N2UwOTU1Mi4uNGExMTQ0
MjVlMTE2ZDJjNDJkMTkwMzkyM2VkZjg4NjM4M2Q4ZjA2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdFBhcnNlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVNYW5p
ZmVzdFBhcnNlci5jcHAKQEAgLTE4MCw3ICsxODAsNyBAQCBzdGQ6Om9wdGlvbmFsPEFwcGxpY2F0
aW9uQ2FjaGVNYW5pZmVzdD4gcGFyc2VBcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3QoY29uc3QgVVJM
JgogICAgICAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh1cmwucHJvdG9j
b2woKSwgbWFuaWZlc3RVUkwucHJvdG9jb2woKSkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgICAgICAgICAgbWFuaWZlc3Qub25saW5lQWxsb3dlZFVSTHMuYXBwZW5k
KHVybCk7CisgICAgICAgICAgICAgICAgbWFuaWZlc3Qub25saW5lQWxsb3dlZFVSTHMuYXBwZW5k
KFdURk1vdmUodXJsKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzaXplT2Jz
ZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNlcnZlci5jcHAKaW5kZXgg
OTNkYTFhNDU2MDRlNDUyYTc3NTkzZTE4ZDFmNDczMzYzNDk5NDM2Ny4uNGZmZDY5ZDAzNDQxMDli
NDdhZmI1ZTUxOTdhYTNmZGZkNDk3ZGVkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9SZXNpemVPYnNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SZXNpemVPYnNl
cnZlci5jcHAKQEAgLTEyNSwxMSArMTI1LDEwIEBAIHNpemVfdCBSZXNpemVPYnNlcnZlcjo6Z2F0
aGVyT2JzZXJ2YXRpb25zKHNpemVfdCBkZWVwZXJUaGFuKQogCiB2b2lkIFJlc2l6ZU9ic2VydmVy
OjpkZWxpdmVyT2JzZXJ2YXRpb25zKCkKIHsKLSAgICBWZWN0b3I8UmVmPFJlc2l6ZU9ic2VydmVy
RW50cnk+PiBlbnRyaWVzOwotICAgIGZvciAoY29uc3QgYXV0byYgb2JzZXJ2YXRpb24gOiBtX2Fj
dGl2ZU9ic2VydmF0aW9ucykgeworICAgIGF1dG8gZW50cmllcyA9IG1fYWN0aXZlT2JzZXJ2YXRp
b25zLm1hcChbXShhdXRvJiBvYnNlcnZhdGlvbikgewogICAgICAgICBBU1NFUlQob2JzZXJ2YXRp
b24tPnRhcmdldCgpKTsKLSAgICAgICAgZW50cmllcy5hcHBlbmQoUmVzaXplT2JzZXJ2ZXJFbnRy
eTo6Y3JlYXRlKG9ic2VydmF0aW9uLT50YXJnZXQoKSwgb2JzZXJ2YXRpb24tPmNvbXB1dGVDb250
ZW50UmVjdCgpLCBvYnNlcnZhdGlvbi0+Ym9yZGVyQm94U2l6ZSgpLCBvYnNlcnZhdGlvbi0+Y29u
dGVudEJveFNpemUoKSkpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIFJlc2l6ZU9ic2VydmVyRW50
cnk6OmNyZWF0ZShvYnNlcnZhdGlvbi0+dGFyZ2V0KCksIG9ic2VydmF0aW9uLT5jb21wdXRlQ29u
dGVudFJlY3QoKSwgb2JzZXJ2YXRpb24tPmJvcmRlckJveFNpemUoKSwgb2JzZXJ2YXRpb24tPmNv
bnRlbnRCb3hTaXplKCkpOworICAgIH0pOwogICAgIG1fYWN0aXZlT2JzZXJ2YXRpb25zLmNsZWFy
KCk7CiAgICAgYXV0byBhY3RpdmVPYnNlcnZhdGlvblRhcmdldHMgPSBzdGQ6OmV4Y2hhbmdlKG1f
YWN0aXZlT2JzZXJ2YXRpb25UYXJnZXRzLCB7IH0pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5k
aWNhdG9yLmNwcAppbmRleCAzODdkNTE5YWU1MTcyZDY4MGE1YjI4ODQzYmJlOGZmOTk2YzZiMzM1
Li5jYTVmYmU2M2NjZjZjZGI5OGFmODVlZDU5MjlhMTMwMzhkNjliZmM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvVGV4dEluZGljYXRvci5jcHAKQEAgLTM2MSwxNyArMzYxLDE2IEBAIHN0YXRpYyBib29s
IGluaXRpYWxpemVJbmRpY2F0b3IoVGV4dEluZGljYXRvckRhdGEmIGRhdGEsIEZyYW1lJiBmcmFt
ZSwgY29uc3QgU2ltCiAgICAgICAgIHRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0
ZXMudW5pdGUodGV4dFJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMpOwogICAgIH0KIAotICAgIFZl
Y3RvcjxGbG9hdFJlY3Q+IHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXM7Ci0gICAg
Zm9yIChhdXRvIHJlY3QgOiB0ZXh0UmVjdHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMpIHsKKyAgICBh
dXRvIHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMgPSB0ZXh0UmVjdHNJblJvb3RW
aWV3Q29vcmRpbmF0ZXMubWFwKFsmXShhdXRvIHJlY3QpIHsKICAgICAgICAgcmVjdC5tb3ZlQnko
LXRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKSk7Ci0gICAg
ICAgIHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMuYXBwZW5kKHJlY3QpOwotICAg
IH0KKyAgICAgICAgcmV0dXJuIHJlY3Q7CisgICAgfSk7CiAKICAgICAvLyBTdG9yZSB0aGUgc2Vs
ZWN0aW9uIHJlY3QgaW4gd2luZG93IGNvb3JkaW5hdGVzLCB0byBiZSB1c2VkIHN1YnNlcXVlbnRs
eQogICAgIC8vIHRvIGRldGVybWluZSBpZiB0aGUgaW5kaWNhdG9yIGFuZCBzZWxlY3Rpb24gc3Rp
bGwgcHJlY2lzZWx5IG92ZXJsYXAuCiAgICAgZGF0YS5zZWxlY3Rpb25SZWN0SW5Sb290Vmlld0Nv
b3JkaW5hdGVzID0gZnJhbWUudmlldygpLT5jb250ZW50c1RvUm9vdFZpZXcoZW5jbG9zaW5nSW50
UmVjdChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25Cb3VuZHMoRnJhbWVTZWxlY3Rpb246OkNs
aXBUb1Zpc2libGVDb250ZW50OjpObykpKTsKICAgICBkYXRhLnRleHRCb3VuZGluZ1JlY3RJblJv
b3RWaWV3Q29vcmRpbmF0ZXMgPSB0ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVz
OwotICAgIGRhdGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcyA9IHRleHRSZWN0
c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXM7CisgICAgZGF0YS50ZXh0UmVjdHNJbkJvdW5kaW5n
UmVjdENvb3JkaW5hdGVzID0gV1RGTW92ZSh0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5h
dGVzKTsKIAogICAgIHJldHVybiB0YWtlU25hcHNob3RzKGRhdGEsIGZyYW1lLCBlbmNsb3NpbmdJ
bnRSZWN0KHRleHRCb3VuZGluZ1JlY3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMpLCBjbGlwcGVkVGV4
dFJlY3RzSW5Eb2N1bWVudENvb3JkaW5hdGVzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCmluZGV4IDUyZjYyMDEyMmI4NWM3NTAz
ZTdkYTZhNjgzNWJmMzc1NjE0OTY3ZjQuLjhhMmJhNGNmZmEyNmRjY2JiZDFlNzVlZTUwMTEzYTg2
NmJlNWEyZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1
cml0eVBvbGljeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3Vy
aXR5UG9saWN5LmNwcApAQCAtMzQzLDE4ICszNDMsMTIgQEAgYm9vbCBDb250ZW50U2VjdXJpdHlQ
b2xpY3k6OmFsbFBvbGljaWVzQWxsb3coVmlvbGF0ZWREaXJlY3RpdmVDYWxsYmFjayYmIGNhbGxi
YWMKIHN0YXRpYyBWZWN0b3I8UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiBwYXJzZVN1YlJl
c291cmNlSW50ZWdyaXR5SW50b0RpZ2VzdHMoY29uc3QgU3RyaW5nJiBzdWJSZXNvdXJjZUludGVn
cml0eSkKIHsKICAgICBhdXRvIGVuY29kZWREaWdlc3RzID0gcGFyc2VJbnRlZ3JpdHlNZXRhZGF0
YShzdWJSZXNvdXJjZUludGVncml0eSk7Ci0gICAgVmVjdG9yPFJlc291cmNlQ3J5cHRvZ3JhcGhp
Y0RpZ2VzdD4gZGVjb2RlZERpZ2VzdHM7Ci0KLSAgICBpZiAoIWVuY29kZWREaWdlc3RzLmhhc192
YWx1ZSgpKQorICAgIGlmICghZW5jb2RlZERpZ2VzdHMpCiAgICAgICAgIHJldHVybiB7IH07CiAK
LSAgICBmb3IgKGNvbnN0IGF1dG8mIGVuY29kZWREaWdlc3QgOiBlbmNvZGVkRGlnZXN0cy52YWx1
ZSgpKSB7Ci0gICAgICAgIGF1dG8gZGVjb2RlZERpZ2VzdCA9IGRlY29kZUVuY29kZWRSZXNvdXJj
ZUNyeXB0b2dyYXBoaWNEaWdlc3QoZW5jb2RlZERpZ2VzdCk7Ci0gICAgICAgIGlmIChkZWNvZGVk
RGlnZXN0Lmhhc192YWx1ZSgpKQotICAgICAgICAgICAgZGVjb2RlZERpZ2VzdHMuYXBwZW5kKGRl
Y29kZWREaWdlc3QudmFsdWUoKSk7Ci0gICAgICAgIH0KLQotICAgIHJldHVybiBkZWNvZGVkRGln
ZXN0czsKKyAgICByZXR1cm4gV1RGOjpjb21wYWN0TWFwKCplbmNvZGVkRGlnZXN0cywgW10oYXV0
byYgZW5jb2RlZERpZ2VzdCkgeworICAgICAgICByZXR1cm4gZGVjb2RlRW5jb2RlZFJlc291cmNl
Q3J5cHRvZ3JhcGhpY0RpZ2VzdChlbmNvZGVkRGlnZXN0KTsKKyAgICB9KTsKIH0KIAogc3RhdGlj
IFZlY3RvcjxDb250ZW50U2VjdXJpdHlQb2xpY3lIYXNoPiBnZW5lcmF0ZUhhc2hlc0ZvckNvbnRl
bnQoY29uc3QgU3RyaW5nVmlldyBjb250ZW50LCBPcHRpb25TZXQ8Q29udGVudFNlY3VyaXR5UG9s
aWN5SGFzaEFsZ29yaXRobT4gYWxnb3JpdGhtcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVD
aG9vc2VyLmNwcAppbmRleCA4ZTRlY2U3MDUzYWU4ZTk4ZWZlY2NmZTc2NTJmODZjZDI5NzQwNDA0
Li43ODQyOGM0YWJkMzFlOTliMTBhYWU0OGZiZWNjMmE1YjhkOWY1OGZjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwCkBAIC01Myw5ICs1Myw3IEBAIHZvaWQgRmlsZUNo
b29zZXI6OmludmFsaWRhdGUoKQogCiB2b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlKGNvbnN0
IFN0cmluZyYgZmlsZW5hbWUpCiB7Ci0gICAgVmVjdG9yPFN0cmluZz4gZmlsZW5hbWVzOwotICAg
IGZpbGVuYW1lcy5hcHBlbmQoZmlsZW5hbWUpOwotICAgIGNob29zZUZpbGVzKGZpbGVuYW1lcyk7
CisgICAgY2hvb3NlRmlsZXMoeyBmaWxlbmFtZSB9KTsKIH0KIAogdm9pZCBGaWxlQ2hvb3Nlcjo6
Y2hvb3NlRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHJlcGxhY2VtZW50TmFtZXMpCkBAIC02OCw5ICs2NiwxMCBAQCB2b2lkIEZpbGVD
aG9vc2VyOjpjaG9vc2VGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBjb25z
dCBWZWN0b3I8U3RyaQogICAgICAgICByZXR1cm47CiAKICAgICBWZWN0b3I8RmlsZUNob29zZXJG
aWxlSW5mbz4gZmlsZXM7CisgICAgZmlsZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmaWxlbmFt
ZXMuc2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IGZpbGVuYW1lcy5zaXpl
KCk7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIGZpbGVzLmFwcGVuZCh7IGZpbGVuYW1lc1tpXSwg
aSA8IHJlcGxhY2VtZW50TmFtZXMuc2l6ZSgpID8gcmVwbGFjZW1lbnROYW1lc1tpXSA6IG51bGxT
dHJpbmcoKSwgeyB9IH0pOwotICAgIG1fY2xpZW50LT5maWxlc0Nob3NlbihmaWxlcyk7CisgICAg
ICAgIGZpbGVzLnVuY2hlY2tlZEFwcGVuZCh7IGZpbGVuYW1lc1tpXSwgaSA8IHJlcGxhY2VtZW50
TmFtZXMuc2l6ZSgpID8gcmVwbGFjZW1lbnROYW1lc1tpXSA6IG51bGxTdHJpbmcoKSwgeyB9IH0p
OworICAgIG1fY2xpZW50LT5maWxlc0Nob3NlbihXVEZNb3ZlKGZpbGVzKSk7CiB9CiAKICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQpAQCAtODYsMTkgKzg1LDE5IEBAIHZvaWQgRmlsZUNob29zZXI6
OmNob29zZU1lZGlhRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywgY29uc3Qg
U3RyaW5nCiAgICAgaWYgKCFtX2NsaWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9y
PEZpbGVDaG9vc2VyRmlsZUluZm8+IGZpbGVzOwotICAgIGZvciAoYXV0byYgZmlsZW5hbWUgOiBm
aWxlbmFtZXMpCi0gICAgICAgIGZpbGVzLmFwcGVuZCh7IGZpbGVuYW1lLCB7IH0sIHsgfSB9KTsK
LSAgICBtX2NsaWVudC0+ZmlsZXNDaG9zZW4oZmlsZXMsIGRpc3BsYXlTdHJpbmcsIGljb24pOwor
ICAgIGF1dG8gZmlsZXMgPSBmaWxlbmFtZXMubWFwKFtdKGF1dG8mIGZpbGVuYW1lKSB7CisgICAg
ICAgIHJldHVybiBGaWxlQ2hvb3NlckZpbGVJbmZvIHsgZmlsZW5hbWUsIHsgfSwgeyB9IH07Cisg
ICAgfSk7CisgICAgbV9jbGllbnQtPmZpbGVzQ2hvc2VuKFdURk1vdmUoZmlsZXMpLCBkaXNwbGF5
U3RyaW5nLCBpY29uKTsKIH0KIAogI2VuZGlmCiAKIHZvaWQgRmlsZUNob29zZXI6OmNob29zZUZp
bGVzKGNvbnN0IFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJbmZvPiYgZmlsZXMpCiB7Ci0gICAgVmVj
dG9yPFN0cmluZz4gcGF0aHM7Ci0gICAgZm9yIChhdXRvJiBmaWxlIDogZmlsZXMpCi0gICAgICAg
IHBhdGhzLmFwcGVuZChmaWxlLnBhdGgpOworICAgIGF1dG8gcGF0aHMgPSBmaWxlcy5tYXAoW10o
YXV0byYgZmlsZSkgeworICAgICAgICByZXR1cm4gZmlsZS5wYXRoOworICAgIH0pOwogCiAgICAg
Ly8gRklYTUU6IFRoaXMgaXMgaW5lbGVnYW50LiBXZSBzaG91bGQgbm90IGJlIGxvb2tpbmcgYXQg
c2V0dGluZ3MgaGVyZS4KICAgICBpZiAobV9zZXR0aW5ncy5zZWxlY3RlZEZpbGVzID09IHBhdGhz
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKaW5kZXggZDA5ZjEwNTJh
MGYzMWVlOTcwNjExMDEzYjM5MzVmYjUzMDk1NTA5Ni4uZjg3YjZhNGY2M2IyNmEyMTg4MjA2ZTkz
OGFhNTg1Nzk3YWIzOTVlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hh
cmVkQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIu
Y3BwCkBAIC0yMDYsOSArMjA2LDcgQEAgdm9pZCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyOjphcHBl
bmQoY29uc3QgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlciYgZGF0YSkKIHZvaWQgRnJhZ21lbnRlZFNo
YXJlZEJ1ZmZlcjo6YXBwZW5kKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgpCiB7
CiAgICAgQVNTRVJUKCFtX2NvbnRpZ3VvdXMpOwotICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3I7
Ci0gICAgdmVjdG9yLmFwcGVuZChkYXRhLCBsZW5ndGgpOwotICAgIG1fc2VnbWVudHMuYXBwZW5k
KHsgbV9zaXplLCBEYXRhU2VnbWVudDo6Y3JlYXRlKFdURk1vdmUodmVjdG9yKSkgfSk7CisgICAg
bV9zZWdtZW50cy5hcHBlbmQoeyBtX3NpemUsIERhdGFTZWdtZW50OjpjcmVhdGUoVmVjdG9yIHsg
ZGF0YSwgbGVuZ3RoIH0pIH0pOwogICAgIG1fc2l6ZSArPSBsZW5ndGg7CiAgICAgQVNTRVJUKGlu
dGVybmFsbHlDb25zaXN0ZW50KCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vVGhyZWFkU2FmZURhdGFCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Ro
cmVhZFNhZmVEYXRhQnVmZmVyLmgKaW5kZXggZDM5N2QyMjdkZmM1MzRhZDBjZjU4NzAyYmUxY2E1
ODAyNDk5YTBiYi4uNjYyN2ZlYmNiN2Y0ZTFkYWQ4MTExZTE0YTkxMjE0NDg4MTY2YTk3MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkU2FmZURhdGFCdWZmZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRTYWZlRGF0YUJ1ZmZlci5oCkBAIC0y
NSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8d3RmL0hhc2hlci5oPgog
I2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIApAQCAtMTQzLDQgKzE0NCwxNSBAQCBib29sIFRocmVhZFNhZmVEYXRhQnVmZmVyOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVGhyZWFkU2FmZURhdGFCdWZmZXImIHJlc3VsdAogICAg
IHJldHVybiB0cnVlOwogfQogCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0
IFRocmVhZFNhZmVEYXRhQnVmZmVyJiBidWZmZXIpCit7CisgICAgYXV0byogZGF0YSA9IGJ1ZmZl
ci5kYXRhKCk7CisgICAgaWYgKCFkYXRhKSB7CisgICAgICAgIGFkZChoYXNoZXIsIHRydWUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFkZChoYXNoZXIsIGZhbHNlKTsKKyAgICBhZGQo
aGFzaGVyLCAqZGF0YSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVsUHJvY2Vzc29y
LmNwcAppbmRleCAxY2YzOWNhY2YzMDI0NTA4ZThkMTJlODY0NWM1MDg2NzcyMTk0MzViLi5iZmUx
OGUyOWQyNmVjODlhM2Y0MDJkNzE4MzEzODIwMTYyM2U1MTc1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuY3Bw
CkBAIC01Niw4ICs1Niw5IEBAIHZvaWQgQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3I6OmluaXRpYWxp
emUoKQogICAgICAgICBEaXNhYmxlTWFsbG9jUmVzdHJpY3Rpb25zRm9yQ3VycmVudFRocmVhZFNj
b3BlIGRpc2FibGVNYWxsb2NSZXN0cmljdGlvbnM7CiAKICAgICAgICAgLy8gQ3JlYXRlIHByb2Nl
c3Npbmcga2VybmVscywgb25lIHBlciBjaGFubmVsLgorICAgICAgICBtX2tlcm5lbHMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkNoYW5uZWxzKCkpOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVscygpOyArK2kpCi0gICAgICAgICAgICBtX2tl
cm5lbHMuYXBwZW5kKGNyZWF0ZUtlcm5lbCgpKTsKKyAgICAgICAgICAgIG1fa2VybmVscy51bmNo
ZWNrZWRBcHBlbmQoY3JlYXRlS2VybmVsKCkpOwogICAgIH0KICAgICBtX2luaXRpYWxpemVkID0g
dHJ1ZTsKICAgICBtX2hhc0p1c3RSZXNldCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1Jlc2FtcGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9BdWRpb1Jlc2FtcGxlci5jcHAKaW5kZXggZGU1MDhjYzZlZjRhNWIwMWJk
NGViMjI0NzQ1YjdlZjI4Mjg0MGY4ZS4uNzQ2OWNlNGRlM2YzYzE4ODg5MjhmNTQ5N2QxMmNlNTZk
YjZlNmQyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9S
ZXNhbXBsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUmVz
YW1wbGVyLmNwcApAQCAtNDIsOCArNDIsOSBAQCBBdWRpb1Jlc2FtcGxlcjo6QXVkaW9SZXNhbXBs
ZXIoKQogCiBBdWRpb1Jlc2FtcGxlcjo6QXVkaW9SZXNhbXBsZXIodW5zaWduZWQgbnVtYmVyT2ZD
aGFubmVscykKIHsKKyAgICBtX2tlcm5lbHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJP
ZkNoYW5uZWxzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVs
czsgKytpKQotICAgICAgICBtX2tlcm5lbHMuYXBwZW5kKG1ha2VVbmlxdWU8QXVkaW9SZXNhbXBs
ZXJLZXJuZWw+KHRoaXMpKTsKKyAgICAgICAgbV9rZXJuZWxzLnVuY2hlY2tlZEFwcGVuZChtYWtl
VW5pcXVlPEF1ZGlvUmVzYW1wbGVyS2VybmVsPih0aGlzKSk7CiAKICAgICBtX3NvdXJjZUJ1cyA9
IEF1ZGlvQnVzOjpjcmVhdGUobnVtYmVyT2ZDaGFubmVscywgMCwgZmFsc2UpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2Vy
bmVsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nv
cktlcm5lbC5jcHAKaW5kZXggOWYzMTgxY2ZiYjQwMjI3Nzc5OTYyM2I5YmZkZGNkZDQ5NTljMDBi
MC4uNTAzMmVlYTdhNzJiMjNkZTJhMjAyYmMxNTM2MDM1Y2JhZWQwMTYwMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JL
ZXJuZWwuY3BwCkBAIC02MSw4ICs2MSw5IEBAIHZvaWQgRHluYW1pY3NDb21wcmVzc29yS2VybmVs
OjpzZXROdW1iZXJPZkNoYW5uZWxzKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMpCiAgICAgICAg
IHJldHVybjsKIAogICAgIG1fcHJlRGVsYXlCdWZmZXJzLmNsZWFyKCk7CisgICAgbV9wcmVEZWxh
eUJ1ZmZlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkNoYW5uZWxzKTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKQotICAgICAgICBt
X3ByZURlbGF5QnVmZmVycy5hcHBlbmQobWFrZVVuaXF1ZTxBdWRpb0Zsb2F0QXJyYXk+KE1heFBy
ZURlbGF5RnJhbWVzKSk7CisgICAgICAgIG1fcHJlRGVsYXlCdWZmZXJzLnVuY2hlY2tlZEFwcGVu
ZChtYWtlVW5pcXVlPEF1ZGlvRmxvYXRBcnJheT4oTWF4UHJlRGVsYXlGcmFtZXMpKTsKIH0KIAog
dm9pZCBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnNldFByZURlbGF5VGltZShmbG9hdCBwcmVE
ZWxheVRpbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NdWx0
aUNoYW5uZWxSZXNhbXBsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTXVs
dGlDaGFubmVsUmVzYW1wbGVyLmNwcAppbmRleCBiOTY2ZmEwNmNkMzBlYjM0ZGY3MWZjZmJkZTdj
MTY1ODIzMTExMjFmLi4xNzAyM2I2NDI2MWJkZmQzNzVlZTA5ZmUyOTZiM2JkYTg4MjdmMmU5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NdWx0aUNoYW5uZWxSZXNh
bXBsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL011bHRpQ2hhbm5l
bFJlc2FtcGxlci5jcHAKQEAgLTUzLDggKzUzLDkgQEAgTXVsdGlDaGFubmVsUmVzYW1wbGVyOjpN
dWx0aUNoYW5uZWxSZXNhbXBsZXIoZG91YmxlIHNjYWxlRmFjdG9yLCB1bnNpZ25lZCBudW1iZXIK
ICAgICB9CiAKICAgICAvLyBDcmVhdGUgZWFjaCBjaGFubmVsJ3MgcmVzYW1wbGVyLgorICAgIG1f
a2VybmVscy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bWJlck9mQ2hhbm5lbHMpOwogICAgIGZv
ciAodW5zaWduZWQgY2hhbm5lbEluZGV4ID0gMDsgY2hhbm5lbEluZGV4IDwgbnVtYmVyT2ZDaGFu
bmVsczsgKytjaGFubmVsSW5kZXgpCi0gICAgICAgIG1fa2VybmVscy5hcHBlbmQobWFrZVVuaXF1
ZTxTaW5jUmVzYW1wbGVyPihzY2FsZUZhY3RvciwgcmVxdWVzdEZyYW1lcywgc3RkOjpiaW5kKCZN
dWx0aUNoYW5uZWxSZXNhbXBsZXI6OnByb3ZpZGVJbnB1dEZvckNoYW5uZWwsIHRoaXMsIHN0ZDo6
cGxhY2Vob2xkZXJzOjpfMSwgc3RkOjpwbGFjZWhvbGRlcnM6Ol8yLCBjaGFubmVsSW5kZXgpKSk7
CisgICAgICAgIG1fa2VybmVscy51bmNoZWNrZWRBcHBlbmQobWFrZVVuaXF1ZTxTaW5jUmVzYW1w
bGVyPihzY2FsZUZhY3RvciwgcmVxdWVzdEZyYW1lcywgc3RkOjpiaW5kKCZNdWx0aUNoYW5uZWxS
ZXNhbXBsZXI6OnByb3ZpZGVJbnB1dEZvckNoYW5uZWwsIHRoaXMsIHN0ZDo6cGxhY2Vob2xkZXJz
OjpfMSwgc3RkOjpwbGFjZWhvbGRlcnM6Ol8yLCBjaGFubmVsSW5kZXgpKSk7CiB9CiAKIE11bHRp
Q2hhbm5lbFJlc2FtcGxlcjo6fk11bHRpQ2hhbm5lbFJlc2FtcGxlcigpID0gZGVmYXVsdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJh
Y2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0KaW5kZXggMDVlYTIxMTFlYjVkNDUzY2IyOGQ4
ZTc3ZWYzY2JmNWYzNTY3MTk4OS4uZmEzMGFmZGUzYjFlMWUzNmU4NjFhZWNiZDlmYmU4YzdmMDkw
MzU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGxheWJhY2tT
ZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y29jb2EvUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQubW0KQEAgLTUzNCwxNCArNTM0
LDEyIEBAIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gUGxheWJhY2tTZXNzaW9uTW9kZWxN
ZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRpYVNlbGVjCiAgICAgVmVjdG9yPE1lZGlhU2VsZWN0aW9u
T3B0aW9uPiBsZWdpYmxlT3B0aW9uczsKIAogICAgIGlmICghbV9tZWRpYUVsZW1lbnQgfHwgIW1f
bWVkaWFFbGVtZW50LT5kb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGxlZ2libGVP
cHRpb25zOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgYXV0byYgY2FwdGlvblByZWZlcmVu
Y2VzID0gbV9tZWRpYUVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgpLT5ncm91cCgpLmVuc3VyZUNh
cHRpb25QcmVmZXJlbmNlcygpOwotCi0gICAgZm9yIChhdXRvJiB0cmFjayA6IG1fbGVnaWJsZVRy
YWNrc0Zvck1lbnUpCi0gICAgICAgIGxlZ2libGVPcHRpb25zLmFwcGVuZChjYXB0aW9uUHJlZmVy
ZW5jZXMubWVkaWFTZWxlY3Rpb25PcHRpb25Gb3JUcmFjayh0cmFjay5nZXQoKSkpOwotCi0gICAg
cmV0dXJuIGxlZ2libGVPcHRpb25zOworICAgIHJldHVybiBtX2xlZ2libGVUcmFja3NGb3JNZW51
Lm1hcChbJl0oYXV0byYgdHJhY2spIHsKKyAgICAgICAgcmV0dXJuIGNhcHRpb25QcmVmZXJlbmNl
cy5tZWRpYVNlbGVjdGlvbk9wdGlvbkZvclRyYWNrKHRyYWNrLmdldCgpKTsKKyAgICB9KTsKIH0K
IAogdWludDY0X3QgUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQ6OmxlZ2libGVNZWRp
YVNlbGVjdGVkSW5kZXgoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ2FtZXBhZC9tYWMvRHVhbHNob2NrM0hJREdhbWVwYWQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ2FtZXBhZC9tYWMvRHVhbHNob2NrM0hJREdhbWVwYWQuY3BwCmluZGV4IDZjNDBl
OGI4ODkyODczZmYwNzIwNjE4Y2ZlODM5NjRjODBlYzM0MWUuLmMwZjUxODFiYzQ0YjFiZGNlYmE2
OWI4Y2I2YTM0YTllYTEyN2RmNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dhbWVwYWQvbWFjL0R1YWxzaG9jazNISURHYW1lcGFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9EdWFsc2hvY2szSElER2FtZXBhZC5jcHAKQEAgLTQzLDEy
ICs0MywxMCBAQCBEdWFsc2hvY2szSElER2FtZXBhZDo6RHVhbHNob2NrM0hJREdhbWVwYWQoSElE
RGV2aWNlJiYgZGV2aWNlLCB1bnNpZ25lZCBpbmRleCkKIAogICAgIG1fbWFwcGluZyA9IHN0YW5k
YXJkR2FtZXBhZE1hcHBpbmdTdHJpbmcoKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bnVtYmVyT2ZTdGFuZGFyZEdhbWVwYWRCdXR0b25zV2l0aEhvbWVCdXR0b247ICsraSkKLSAgICAg
ICAgbV9idXR0b25WYWx1ZXMuYXBwZW5kKDAuMCk7CisgICAgbV9idXR0b25WYWx1ZXMgPSBWZWN0
b3IobnVtYmVyT2ZTdGFuZGFyZEdhbWVwYWRCdXR0b25zV2l0aEhvbWVCdXR0b24sIFNoYXJlZEdh
bWVwYWRWYWx1ZSB7IDAuMCB9KTsKIAotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYXhpc0NvdW50
ID0gNDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF4aXNDb3VudDsgKytpKQotICAgICAg
ICBtX2F4aXNWYWx1ZXMuYXBwZW5kKDAuMCk7CisgICAgY29uc3RleHByIHNpemVfdCBheGlzQ291
bnQgPSA0OworICAgIG1fYXhpc1ZhbHVlcyA9IFZlY3RvcihheGlzQ291bnQsIFNoYXJlZEdhbWVw
YWRWYWx1ZSB7IDAuMCB9KTsKIAogICAgIGF1dG8gaW5wdXRFbGVtZW50cyA9IGhpZERldmljZSgp
LnVuaXF1ZUlucHV0RWxlbWVudHNJbkRldmljZVRyZWVPcmRlcigpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9Mb2dpdGVjaEdhbWVwYWQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvTG9naXRlY2hHYW1lcGFkLmNwcApp
bmRleCA2NzE0M2ZiOTk1YmEyYzNlNjhkZDIxMWQxNjViZTYyMGNlZjc4OWVmLi5mZTRjZWRjNTFk
NjM5ZmI3YjFhZTk5MzNlNWMyNjk2YzM5NzhhOGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9Mb2dpdGVjaEdhbWVwYWQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL0xvZ2l0ZWNoR2FtZXBhZC5jcHAKQEAgLTQzLDEy
ICs0MywxMCBAQCBMb2dpdGVjaEdhbWVwYWQ6OkxvZ2l0ZWNoR2FtZXBhZChISUREZXZpY2UmJiBk
ZXZpY2UsIHVuc2lnbmVkIGluZGV4KQogCiAgICAgbV9tYXBwaW5nID0gc3RhbmRhcmRHYW1lcGFk
TWFwcGluZ1N0cmluZygpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlN0
YW5kYXJkR2FtZXBhZEJ1dHRvbnNXaXRob3V0SG9tZUJ1dHRvbjsgKytpKQotICAgICAgICBtX2J1
dHRvblZhbHVlcy5hcHBlbmQoMC4wKTsKKyAgICBtX2J1dHRvblZhbHVlcyA9IFZlY3RvcihudW1i
ZXJPZlN0YW5kYXJkR2FtZXBhZEJ1dHRvbnNXaXRob3V0SG9tZUJ1dHRvbiwgU2hhcmVkR2FtZXBh
ZFZhbHVlIHsgMC4wIH0pOwogCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBheGlzQ291bnQgPSA0
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXhpc0NvdW50OyArK2kpCi0gICAgICAgIG1f
YXhpc1ZhbHVlcy5hcHBlbmQoMC4wKTsKKyAgICBjb25zdGV4cHIgc2l6ZV90IGF4aXNDb3VudCA9
IDQ7CisgICAgbV9heGlzVmFsdWVzID0gVmVjdG9yKGF4aXNDb3VudCwgU2hhcmVkR2FtZXBhZFZh
bHVlIHsgMC4wIH0pOwogCiAgICAgYXV0byBpbnB1dEVsZW1lbnRzID0gaGlkRGV2aWNlKCkudW5p
cXVlSW5wdXRFbGVtZW50c0luRGV2aWNlVHJlZU9yZGVyKCk7CiAKQEAgLTU5LDExICs1NywxMiBA
QCBMb2dpdGVjaEdhbWVwYWQ6OkxvZ2l0ZWNoR2FtZXBhZChISUREZXZpY2UmJiBkZXZpY2UsIHVu
c2lnbmVkIGluZGV4KQogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGlucHV0RWxlbWVudHMpIHsK
ICAgICAgICAgc3dpdGNoIChlbGVtZW50LmZ1bGxVc2FnZSgpKSB7CiAgICAgICAgIGNhc2UgaGlk
SGF0c3dpdGNoRnVsbFVzYWdlOiB7Ci0gICAgICAgICAgICBWZWN0b3I8U2hhcmVkR2FtZXBhZFZh
bHVlPiBoYXRzd2l0Y2hWYWx1ZXM7Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5k
KG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyVG9w
XSk7Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFsdWVzWyhz
aXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyUmlnaHRdKTsKLSAgICAgICAgICAg
IGhhdHN3aXRjaFZhbHVlcy5hcHBlbmQobV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0
dG9uUm9sZTo6TGVmdENsdXN0ZXJCb3R0b21dKTsKLSAgICAgICAgICAgIGhhdHN3aXRjaFZhbHVl
cy5hcHBlbmQobV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENs
dXN0ZXJMZWZ0XSk7CisgICAgICAgICAgICBhdXRvIGhhdHN3aXRjaFZhbHVlcyA9IFZlY3RvciB7
CisgICAgICAgICAgICAgICAgbV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9s
ZTo6TGVmdENsdXN0ZXJUb3BdLAorICAgICAgICAgICAgICAgIG1fYnV0dG9uVmFsdWVzWyhzaXpl
X3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyUmlnaHRdLAorICAgICAgICAgICAgICAg
IG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyQm90
dG9tXSwKKyAgICAgICAgICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0
b25Sb2xlOjpMZWZ0Q2x1c3RlckxlZnRdCisgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICBt
X2VsZW1lbnRNYXAuc2V0KGVsZW1lbnQuY29va2llKCksIG1ha2VVbmlxdWU8SElER2FtZXBhZEhh
dHN3aXRjaD4oZWxlbWVudCwgV1RGTW92ZShoYXRzd2l0Y2hWYWx1ZXMpKSk7CiAgICAgICAgICAg
ICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFj
L1N0YWRpYUhJREdhbWVwYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9t
YWMvU3RhZGlhSElER2FtZXBhZC5jcHAKaW5kZXggMGE5NGU1NjIzM2EyMDQ0NjQxZjEwMGYwNTY0
NGQ1NzVhZGJjOWU3My4uNDIxNTkyN2M0OTRjM2VlZTZjMTI1MGFiNTU2NDFmYTcyYTIyMDY5NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvU3RhZGlhSElE
R2FtZXBhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvU3Rh
ZGlhSElER2FtZXBhZC5jcHAKQEAgLTQxLDEyICs0MSwxMCBAQCBTdGFkaWFISURHYW1lcGFkOjpT
dGFkaWFISURHYW1lcGFkKEhJRERldmljZSYmIGRldmljZSwgdW5zaWduZWQgaW5kZXgpCiAKICAg
ICBtX21hcHBpbmcgPSBzdGFuZGFyZEdhbWVwYWRNYXBwaW5nU3RyaW5nKCk7CiAKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IDE5OyArK2kpCi0gICAgICAgIG1fYnV0dG9uVmFsdWVzLmFwcGVu
ZCgwLjApOworICAgIG1fYnV0dG9uVmFsdWVzID0gVmVjdG9yKDE5LCBTaGFyZWRHYW1lcGFkVmFs
dWUgeyAwLjAgfSk7CiAKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF4aXNDb3VudCA9IDQ7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBheGlzQ291bnQ7ICsraSkKLSAgICAgICAgbV9heGlz
VmFsdWVzLmFwcGVuZCgwLjApOworICAgIGNvbnN0ZXhwciBzaXplX3QgYXhpc0NvdW50ID0gNDsK
KyAgICBtX2F4aXNWYWx1ZXMgPSBWZWN0b3IoYXhpc0NvdW50LCBTaGFyZWRHYW1lcGFkVmFsdWUg
eyAwLjAgfSk7CiAKICAgICBhdXRvIGlucHV0RWxlbWVudHMgPSBoaWREZXZpY2UoKS51bmlxdWVJ
bnB1dEVsZW1lbnRzSW5EZXZpY2VUcmVlT3JkZXIoKTsKIApAQCAtNzAsMTEgKzY4LDEyIEBAIFN0
YWRpYUhJREdhbWVwYWQ6OlN0YWRpYUhJREdhbWVwYWQoSElERGV2aWNlJiYgZGV2aWNlLCB1bnNp
Z25lZCBpbmRleCkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgaGlkSGF0c3dp
dGNoRnVsbFVzYWdlOiB7Ci0gICAgICAgICAgICBWZWN0b3I8U2hhcmVkR2FtZXBhZFZhbHVlPiBo
YXRzd2l0Y2hWYWx1ZXM7Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0
dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyVG9wXSk7Ci0g
ICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFsdWVzWyhzaXplX3Qp
R2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyUmlnaHRdKTsKLSAgICAgICAgICAgIGhhdHN3
aXRjaFZhbHVlcy5hcHBlbmQobV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9s
ZTo6TGVmdENsdXN0ZXJCb3R0b21dKTsKLSAgICAgICAgICAgIGhhdHN3aXRjaFZhbHVlcy5hcHBl
bmQobV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJM
ZWZ0XSk7CisgICAgICAgICAgICBhdXRvIGhhdHN3aXRjaFZhbHVlcyA9IFZlY3RvciB7CisgICAg
ICAgICAgICAgICAgbV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVm
dENsdXN0ZXJUb3BdLAorICAgICAgICAgICAgICAgIG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2Ft
ZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyUmlnaHRdLAorICAgICAgICAgICAgICAgIG1fYnV0
dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyQm90dG9tXSwK
KyAgICAgICAgICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xl
OjpMZWZ0Q2x1c3RlckxlZnRdCisgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICBtX2VsZW1l
bnRNYXAuc2V0KGVsZW1lbnQuY29va2llKCksIG1ha2VVbmlxdWU8SElER2FtZXBhZEhhdHN3aXRj
aD4oZWxlbWVudCwgV1RGTW92ZShoYXRzd2l0Y2hWYWx1ZXMpKSk7CiAgICAgICAgICAgICBicmVh
azsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
TGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ci5jcHAKaW5kZXggMWZlZTI5YWU1ZjcxOWM0ZTU1NGEyYzdlNzBjYjcwZjAxZjliMjAwMi4uNzI0
ZmIxN2MzM2Y0YmNhNDY4ODljODNiYzU1ODQ4ZmQ3MjcwYzMyZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKQEAgLTc2MywxMSAr
NzYzLDkgQEAgdm9pZCBHcmFwaGljc0xheWVyOjphZGRSZXBhaW50UmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlcGFpbnRSZWN0KQogICAgIEZsb2F0UmVjdCBsYXJnZXN0UmVwYWludFJlY3QoRmxvYXRQ
b2ludCgpLCBtX3NpemUpOwogICAgIGxhcmdlc3RSZXBhaW50UmVjdC5pbnRlcnNlY3QocmVwYWlu
dFJlY3QpOwogICAgIFJlcGFpbnRNYXA6Oml0ZXJhdG9yIHJlcGFpbnRJdCA9IHJlcGFpbnRSZWN0
TWFwKCkuZmluZCh0aGlzKTsKLSAgICBpZiAocmVwYWludEl0ID09IHJlcGFpbnRSZWN0TWFwKCku
ZW5kKCkpIHsKLSAgICAgICAgVmVjdG9yPEZsb2F0UmVjdD4gcmVwYWludFJlY3RzOwotICAgICAg
ICByZXBhaW50UmVjdHMuYXBwZW5kKGxhcmdlc3RSZXBhaW50UmVjdCk7Ci0gICAgICAgIHJlcGFp
bnRSZWN0TWFwKCkuc2V0KHRoaXMsIHJlcGFpbnRSZWN0cyk7Ci0gICAgfSBlbHNlIHsKKyAgICBp
ZiAocmVwYWludEl0ID09IHJlcGFpbnRSZWN0TWFwKCkuZW5kKCkpCisgICAgICAgIHJlcGFpbnRS
ZWN0TWFwKCkuc2V0KHRoaXMsIFZlY3RvciB7IFdURk1vdmUobGFyZ2VzdFJlcGFpbnRSZWN0KSB9
KTsKKyAgICBlbHNlIHsKICAgICAgICAgVmVjdG9yPEZsb2F0UmVjdD4mIHJlcGFpbnRSZWN0cyA9
IHJlcGFpbnRJdC0+dmFsdWU7CiAgICAgICAgIHJlcGFpbnRSZWN0cy5hcHBlbmQobGFyZ2VzdFJl
cGFpbnRSZWN0KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BhdGhVdGlsaXRpZXMuY3BwCmluZGV4IGI5Nzk5YTRkMTA2MWVkMjBhMWI1MGVkNTA2ODY1
MWM1ZmVhNDY2YTQuLjFkMDA0ZmMxMTRhY2I3MTViMTA1MjU5MDMzNmIwNmZjZWMzMDMwNTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMu
Y3BwCkBAIC0yOTAsMTcgKzI5MCwxNCBAQCBzdGF0aWMgVmVjdG9yPEZsb2F0UG9pbnRHcmFwaDo6
UG9seWdvbj4gcG9seWdvbnNGb3JSZWN0KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JgogCiBWZWN0
b3I8UGF0aD4gUGF0aFV0aWxpdGllczo6cGF0aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3RzKGNvbnN0
IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgcmFkaXVzKQogewotICAgIFZlY3RvcjxQ
YXRoPiBwYXRoczsKLQogICAgIGlmIChyZWN0cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBw
YXRoczsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGlmIChyZWN0cy5zaXplKCkgPiAyMCkg
ewogICAgICAgICBQYXRoIHBhdGg7CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgcmVjdCA6IHJl
Y3RzKQogICAgICAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0LCBGbG9hdFNpemUocmFk
aXVzLCByYWRpdXMpKTsKLSAgICAgICAgcGF0aHMuYXBwZW5kKHBhdGgpOwotICAgICAgICByZXR1
cm4gcGF0aHM7CisgICAgICAgIHJldHVybiB7IFdURk1vdmUocGF0aCkgfTsKICAgICB9CiAKICAg
ICBGbG9hdFBvaW50R3JhcGggZ3JhcGg7CkBAIC0zMDksMTAgKzMwNiwxMSBAQCBWZWN0b3I8UGF0
aD4gUGF0aFV0aWxpdGllczo6cGF0aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3RzKGNvbnN0IFZlY3Rv
cjxGbG9hdFJlY3Q+JgogICAgICAgICBQYXRoIHBhdGg7CiAgICAgICAgIGZvciAoY29uc3QgYXV0
byYgcmVjdCA6IHJlY3RzKQogICAgICAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0LCBG
bG9hdFNpemUocmFkaXVzLCByYWRpdXMpKTsKLSAgICAgICAgcGF0aHMuYXBwZW5kKHBhdGgpOwot
ICAgICAgICByZXR1cm4gcGF0aHM7CisgICAgICAgIHJldHVybiB7IFdURk1vdmUocGF0aCkgfTsK
ICAgICB9CiAKKyAgICBWZWN0b3I8UGF0aD4gcGF0aHM7CisgICAgcGF0aHMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShwb2x5cy5zaXplKCkpOwogICAgIGZvciAoYXV0byYgcG9seSA6IHBvbHlzKSB7
CiAgICAgICAgIFBhdGggcGF0aDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBv
bHkuc2l6ZSgpOyArK2kpIHsKQEAgLTM0NCw3ICszNDIsNyBAQCBWZWN0b3I8UGF0aD4gUGF0aFV0
aWxpdGllczo6cGF0aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JgogICAgICAgICAgICAgcGF0aC5hZGRBcmNUbygqZnJvbUVkZ2Uuc2Vjb25kLCAqdG9FZGdl
LmZpcnN0ICsgdG9PZmZzZXQsIGNsYW1wZWRSYWRpdXMpOwogICAgICAgICB9CiAgICAgICAgIHBh
dGguY2xvc2VTdWJwYXRoKCk7Ci0gICAgICAgIHBhdGhzLmFwcGVuZChwYXRoKTsKKyAgICAgICAg
cGF0aHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUocGF0aCkpOwogICAgIH0KICAgICByZXR1cm4g
cGF0aHM7CiB9CkBAIC01NDMsMTMgKzU0MSwxNCBAQCBQYXRoIFBhdGhVdGlsaXRpZXM6OnBhdGhX
aXRoU2hyaW5rV3JhcHBlZFJlY3RzRm9yT3V0bGluZShjb25zdCBWZWN0b3I8RmxvYXRSZWN0Pgog
ICAgIGJvdHRvbUxlZnRSYWRpdXMgPSBmaXJzdExpbmVSYWRpaS5ib3R0b21MZWZ0KCk7CiAgICAg
dG9wUmlnaHRSYWRpdXMgPSBsYXN0TGluZVJhZGlpLnRvcFJpZ2h0KCk7CiAgICAgYm90dG9tUmln
aHRSYWRpdXMgPSBsYXN0TGluZVJhZGlpLmJvdHRvbVJpZ2h0KCk7Ci0gICAgVmVjdG9yPEZsb2F0
UG9pbnQ+IGNvcm5lcnM7CiAgICAgLy8gcGh5c2ljYWwgdG9wTGVmdC90b3BSaWdodC9ib3R0b21S
aWdodC9ib3R0b21MZWZ0CiAgICAgYXV0byBpc0hvcml6b250YWwgPSBpc0hvcml6b250YWxXcml0
aW5nTW9kZSh3cml0aW5nTW9kZSk7Ci0gICAgY29ybmVycy5hcHBlbmQoZmlyc3RMaW5lUmVjdC5t
aW5YTWluWUNvcm5lcigpKTsKLSAgICBjb3JuZXJzLmFwcGVuZChpc0hvcml6b250YWwgPyBsYXN0
TGluZVJlY3QubWF4WE1pbllDb3JuZXIoKSA6IGZpcnN0TGluZVJlY3QubWF4WE1pbllDb3JuZXIo
KSk7Ci0gICAgY29ybmVycy5hcHBlbmQobGFzdExpbmVSZWN0Lm1heFhNYXhZQ29ybmVyKCkpOwot
ICAgIGNvcm5lcnMuYXBwZW5kKGlzSG9yaXpvbnRhbCA/IGZpcnN0TGluZVJlY3QubWluWE1heFlD
b3JuZXIoKSA6IGxhc3RMaW5lUmVjdC5taW5YTWF4WUNvcm5lcigpKTsKKyAgICBhdXRvIGNvcm5l
cnMgPSBWZWN0b3I8RmxvYXRQb2ludD46OmZyb20oCisgICAgICAgIGZpcnN0TGluZVJlY3QubWlu
WE1pbllDb3JuZXIoKSwKKyAgICAgICAgaXNIb3Jpem9udGFsID8gbGFzdExpbmVSZWN0Lm1heFhN
aW5ZQ29ybmVyKCkgOiBmaXJzdExpbmVSZWN0Lm1heFhNaW5ZQ29ybmVyKCksCisgICAgICAgIGxh
c3RMaW5lUmVjdC5tYXhYTWF4WUNvcm5lcigpLAorICAgICAgICBpc0hvcml6b250YWwgPyBmaXJz
dExpbmVSZWN0Lm1pblhNYXhZQ29ybmVyKCkgOiBsYXN0TGluZVJlY3QubWluWE1heFlDb3JuZXIo
KQorICAgICk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9seS5zaXplKCk7ICsr
aSkgewogICAgICAgICBhdXRvIG1vdmVPckFkZExpbmVUbyA9IFtpLCAmcGF0aF0gKGNvbnN0IEZs
b2F0UG9pbnQmIHN0YXJ0UG9pbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwCmluZGV4IDU0OTlmMzdhN2YzNjQ2
YmQ1ZjM5NWE0OGIwOWQ5NDExZDRjOWI2NjQuLjA0Y2JlNGQyN2YxOTBiN2IyN2I5Y2E3ZTk4YTlj
NDcxNzNkMmY4OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwCkBAIC0yMTYsMTAgKzIxNiw5IEBAIHZvaWQg
U291cmNlQnVmZmVyUHJpdmF0ZTo6YnVmZmVyZWRTYW1wbGVzRm9yVHJhY2tJZChjb25zdCBBdG9t
U3RyaW5nJiB0cmFja0lkLCBDCiAgICAgaWYgKCF0cmFja0J1ZmZlcikKICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoeyB9KTsKIAotICAgIFZlY3RvcjxTdHJpbmc+IHNhbXBsZURlc2NyaXB0aW9u
czsKLSAgICBmb3IgKGF1dG8mIHBhaXIgOiB0cmFja0J1ZmZlci0+c2FtcGxlcy5kZWNvZGVPcmRl
cigpKQotICAgICAgICBzYW1wbGVEZXNjcmlwdGlvbnMuYXBwZW5kKHRvU3RyaW5nKCpwYWlyLnNl
Y29uZCkpOwotCisgICAgYXV0byBzYW1wbGVEZXNjcmlwdGlvbnMgPSBXVEY6Om1hcCh0cmFja0J1
ZmZlci0+c2FtcGxlcy5kZWNvZGVPcmRlcigpLCBbXShhdXRvJiBlbnRyeSkgeworICAgICAgICBy
ZXR1cm4gdG9TdHJpbmcoKmVudHJ5LnNlY29uZCk7CisgICAgfSk7CiAgICAgY29tcGxldGlvbkhh
bmRsZXIoV1RGTW92ZShzYW1wbGVEZXNjcmlwdGlvbnMpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3Ry
ZWFtaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAKaW5kZXggOGIwNGY5YmU5NmMzNmUwYTI2MjE4MGEy
NWVhMzc0NTk2MmIzZDdkNS4uYzU0NjE0NjIzYjg3ZWMwODk2MWYxZDQ0MjBmOTYwMWYxNmE2YWI0
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCkBAIC0yMDEs
OSArMjAxLDcgQEAgUmVmUHRyPEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+IENETVByaXZhdGVGYWly
UGxheVN0cmVhbWluZzo6c2FuaXRpemVTa2QoY29uc3QgRnIKIHN0ZDo6b3B0aW9uYWw8VmVjdG9y
PFJlZjxGcmFnbWVudGVkU2hhcmVkQnVmZmVyPj4+IENETVByaXZhdGVGYWlyUGxheVN0cmVhbWlu
Zzo6ZXh0cmFjdEtleUlEc1NrZChjb25zdCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyJiBidWZmZXIp
CiB7CiAgICAgLy8gSW4gdGhlICdza2QnIHNjaGVtZSwgdGhlIGluaXQgZGF0YSBpcyB0aGUga2V5
IElELgotICAgIFZlY3RvcjxSZWY8RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4+IGtleUlEczsKLSAg
ICBrZXlJRHMuYXBwZW5kKGJ1ZmZlci5jb3B5KCkpOwotICAgIHJldHVybiBrZXlJRHM7CisgICAg
cmV0dXJuIFZlY3RvciB7IGJ1ZmZlci5jb3B5KCkgfTsKIH0KIAogc3RhdGljIGNvbnN0IE1lbW9y
eUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaFNldDxBdG9tU3RyaW5nPiYgdmFsaWRJbml0
RGF0YVR5cGVzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RN
SW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0KaW5kZXggZDYzNjEyZmFhMDUzNzBh
MDM5NzNhMWUyZDU2YzE4NjhhMmY5OTE2MC4uOTYyNWZhOTUwM2U3YmViYzcxOWZjNGIzN2E2M2Mz
OGQ3NDUwMzA4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
Q0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0KQEAgLTE0OTQsNyArMTQ5NCw3
IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjp1cGRh
dGVLZXlTdGF0dXNlcyhzdGQ6Om9wdGlvbmFsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX2tl
eVN0YXR1c2VzLnN3YXAoa2V5U3RhdHVzZXMpOworICAgIG1fa2V5U3RhdHVzZXMgPSBXVEZNb3Zl
KGtleVN0YXR1c2VzKTsKIAogICAgIG1faW5zdGFuY2UtPnNlc3Npb25LZXlTdGF0dXNlc0NoYW5n
ZWQoKnRoaXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVyQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVjb2RlckFWRk9i
akMubW0KaW5kZXggNTYzYWYxOTI0ZDlhZjM1OWU5MzBlZjY0YmFlMzIzZmMwNDFkZTg3YS4uYWQ3
ZjQ1MTAxYzA2YTE4ODhjMDA4ZmFlZDRhOTE5MDU2MTM4MjkzYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVy
QVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1tCkBAIC01MzUsMTMgKzUzNSwxMCBAQCBW
ZWN0b3I8SW1hZ2VEZWNvZGVyOjpGcmFtZUluZm8+IEltYWdlRGVjb2RlckFWRk9iakM6OmZyYW1l
SW5mb3MoKSBjb25zdAogICAgIGlmIChtX3NhbXBsZURhdGEuZW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIHsgfTsKIAotICAgIFZlY3RvcjxJbWFnZURlY29kZXI6OkZyYW1lSW5mbz4gaW5mb3M7Ci0g
ICAgZm9yIChhdXRvJiBzYW1wbGUgOiBtX3NhbXBsZURhdGEucHJlc2VudGF0aW9uT3JkZXIoKSkg
eworICAgIHJldHVybiBXVEY6Om1hcChtX3NhbXBsZURhdGEucHJlc2VudGF0aW9uT3JkZXIoKSwg
W10oYXV0byYgc2FtcGxlKSB7CiAgICAgICAgIGF1dG8qIGltYWdlU2FtcGxlID0gKEltYWdlRGVj
b2RlckFWRk9iakNTYW1wbGUqKXNhbXBsZS5zZWNvbmQuZ2V0KCk7Ci0gICAgICAgIGluZm9zLmFw
cGVuZCh7IGltYWdlU2FtcGxlLT5oYXNBbHBoYSgpLCBTZWNvbmRzKGltYWdlU2FtcGxlLT5kdXJh
dGlvbigpLnRvRG91YmxlKCkpfSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGluZm9zOworICAgICAg
ICByZXR1cm4gSW1hZ2VEZWNvZGVyOjpGcmFtZUluZm8geyBpbWFnZVNhbXBsZS0+aGFzQWxwaGEo
KSwgU2Vjb25kcyhpbWFnZVNhbXBsZS0+ZHVyYXRpb24oKS50b0RvdWJsZSgpKSB9OworICAgIH0p
OwogfQogCiBib29sIEltYWdlRGVjb2RlckFWRk9iakM6OmZyYW1lQWxsb3dTdWJzYW1wbGluZ0F0
SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUGFyc2VyQVZGT2Jq
Qy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L1NvdXJjZUJ1ZmZlclBhcnNlckFWRk9iakMubW0KaW5kZXggYWExNTg0MDRiMTBlNDQ0YWY2ZTVl
ZGRjOGRhZDZiYTk2ZWQ1Y2IyMi4uZTYxYjE0N2Y2M2M1ZjQ1NzI3NWY2MDUwM2UzN2E4YjUyZDE4
ZTNhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvU291cmNlQnVmZmVyUGFyc2VyQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQYXJz
ZXJBVkZPYmpDLm1tCkBAIC0yOTcsMTYgKzI5NywxNCBAQCB2b2lkIFNvdXJjZUJ1ZmZlclBhcnNl
ckFWRk9iakM6OmRpZFBhcnNlU3RyZWFtRGF0YUFzQXNzZXQoQVZBc3NldCogYXNzZXQpCiAKICAg
ICAgICAgICAgIGlmIChbdHJhY2sgaGFzTWVkaWFDaGFyYWN0ZXJpc3RpYzpBVk1lZGlhQ2hhcmFj
dGVyaXN0aWNWaXN1YWxdKSB7CiAgICAgICAgICAgICAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNs
aWVudDo6SW5pdGlhbGl6YXRpb25TZWdtZW50OjpWaWRlb1RyYWNrSW5mb3JtYXRpb24gaW5mbzsK
LSAgICAgICAgICAgICAgICBhdXRvIHZpZGVvVHJhY2sgPSBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQzo6Y3JlYXRlKHRyYWNrKTsKLSAgICAgICAgICAgICAgICBpbmZvLnRyYWNr
ID0gdmlkZW9UcmFjay5jb3B5UmVmKCk7CisgICAgICAgICAgICAgICAgaW5mby50cmFjayA9IFZp
ZGVvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjcmVhdGUodHJhY2spOwogICAgICAg
ICAgICAgICAgIGluZm8uZGVzY3JpcHRpb24gPSBNZWRpYURlc2NyaXB0aW9uQVZGT2JqQzo6Y3Jl
YXRlKHRyYWNrKTsKLSAgICAgICAgICAgICAgICBzZWdtZW50LnZpZGVvVHJhY2tzLmFwcGVuZChp
bmZvKTsKKyAgICAgICAgICAgICAgICBzZWdtZW50LnZpZGVvVHJhY2tzLmFwcGVuZChXVEZNb3Zl
KGluZm8pKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoW3RyYWNrIGhhc01lZGlhQ2hhcmFjdGVy
aXN0aWM6QVZNZWRpYUNoYXJhY3RlcmlzdGljQXVkaWJsZV0pIHsKICAgICAgICAgICAgICAgICBT
b3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQ6OkF1ZGlvVHJh
Y2tJbmZvcm1hdGlvbiBpbmZvOwotICAgICAgICAgICAgICAgIGF1dG8gYXVkaW9UcmFjayA9IEF1
ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjcmVhdGUodHJhY2spOwotICAgICAg
ICAgICAgICAgIGluZm8udHJhY2sgPSBhdWRpb1RyYWNrLmNvcHlSZWYoKTsKKyAgICAgICAgICAg
ICAgICBpbmZvLnRyYWNrID0gQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmNy
ZWF0ZSh0cmFjayk7CiAgICAgICAgICAgICAgICAgaW5mby5kZXNjcmlwdGlvbiA9IE1lZGlhRGVz
Y3JpcHRpb25BVkZPYmpDOjpjcmVhdGUodHJhY2spOwotICAgICAgICAgICAgICAgIHNlZ21lbnQu
YXVkaW9UcmFja3MuYXBwZW5kKGluZm8pOworICAgICAgICAgICAgICAgIHNlZ21lbnQuYXVkaW9U
cmFja3MuYXBwZW5kKFdURk1vdmUoaW5mbykpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICAvLyBGSVhNRSgxMjUxNjEpICAgIDogQWRkIFRleHRUcmFjayBzdXBwb3J0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRh
Q29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxh
dGZvcm1EYXRhQ29jb2EubW0KaW5kZXggODU0MjFlM2RlNzA5Y2UxNTljNDk0YjQwZmI4ZDFhZDIz
NTkzYzNiYi4uY2IyZDBiZTg5NzA0NmI3ZmY5ZjMyNzZjOTc2NzlhZmI0ZjAxMmFiMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3Jt
RGF0YUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQpAQCAtNjgsMTEgKzY4LDEwIEBAIFZlY3RvcjxGb250
UGxhdGZvcm1EYXRhOjpGb250VmFyaWF0aW9uQXhpcz4gRm9udFBsYXRmb3JtRGF0YTo6dmFyaWF0
aW9uQXhlcyhTaG91CiAgICAgaWYgKCFwbGF0Zm9ybUZvbnQpCiAgICAgICAgIHJldHVybiB7IH07
CiAgICAgCi0gICAgVmVjdG9yPEZvbnRWYXJpYXRpb25BeGlzPiByZXN1bHRzOwotICAgIGZvciAo
YXV0byYgW3RhZywgdmFsdWVzXSA6IGRlZmF1bHRWYXJpYXRpb25WYWx1ZXMocGxhdGZvcm1Gb250
LCBzaG91bGRMb2NhbGl6ZUF4aXNOYW1lcykpCi0gICAgICAgIHJlc3VsdHMuYXBwZW5kKEZvbnRQ
bGF0Zm9ybURhdGE6OkZvbnRWYXJpYXRpb25BeGlzKHZhbHVlcy5heGlzTmFtZSwgU3RyaW5nKHRh
Zy5kYXRhKCksIHRhZy5zaXplKCkpLCB2YWx1ZXMuZGVmYXVsdFZhbHVlLCB2YWx1ZXMubWluaW11
bVZhbHVlLCB2YWx1ZXMubWF4aW11bVZhbHVlKSk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdHM7
CisgICAgcmV0dXJuIFdURjo6bWFwKGRlZmF1bHRWYXJpYXRpb25WYWx1ZXMocGxhdGZvcm1Gb250
LCBzaG91bGRMb2NhbGl6ZUF4aXNOYW1lcyksIFtdKGF1dG8mJiBlbnRyeSkgeworICAgICAgICBh
dXRvJiBbdGFnLCB2YWx1ZXNdID0gZW50cnk7CisgICAgICAgIHJldHVybiBGb250UGxhdGZvcm1E
YXRhOjpGb250VmFyaWF0aW9uQXhpcyB7IHZhbHVlcy5heGlzTmFtZSwgU3RyaW5nKHRhZy5kYXRh
KCksIHRhZy5zaXplKCkpLCB2YWx1ZXMuZGVmYXVsdFZhbHVlLCB2YWx1ZXMubWluaW11bVZhbHVl
LCB2YWx1ZXMubWF4aW11bVZhbHVlIH07CisgICAgfSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQppbmRleCBiYThlYTFlYjQ0OGE5MjFlMzBk
M2FlNmE5Yzc3ZTg4MjMzYWJjNTNiLi5hMmMyNTBhYTJiZWY4ZGU5NjRiYWYwOTI0MGQ1ZTBlYzQx
NTBlZjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2Fy
ZE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5t
bQpAQCAtNzAyLDEwICs3MDIsNyBAQCBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJ
TgogICAgICAgICBOU1VSTCAqdXJsID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6Y29jb2FEYXRhXTsK
ICAgICAgICAgaWYgKFt1cmwgaXNGaWxlVVJMXSkKICAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKLSAgICAgICAgdHlwZXMuYXBwZW5kKGNvY29hVHlw
ZSk7Ci0gICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+
c2V0VHlwZXModHlwZXMsIG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQoKSk7CisgICAgICAgIHBs
YXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0VHlwZXMoeyBjb2Nv
YVR5cGUgfSwgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKTsKICAgICAgICAgbV9jaGFuZ2VD
b3VudCA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0U3Ry
aW5nRm9yVHlwZShjb2NvYURhdGEsIGNvY29hVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4
dCgpKTsKIAogICAgICAgICByZXR1cm47CkBAIC03MTQsOSArNzExLDcgQEAgQUxMT1dfREVQUkVD
QVRFRF9ERUNMQVJBVElPTlNfRU5ECiAKICAgICBpZiAoIWNvY29hVHlwZS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgLy8gZXZlcnl0aGluZyBlbHNlIHdlIGtub3cgb2YgZ29lcyBvbiB0aGUgcGJvYXJk
IGFzIGEgc3RyaW5nCi0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwotICAgICAgICB0eXBl
cy5hcHBlbmQoY29jb2FUeXBlKTsKLSAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3Rl
Ym9hcmRTdHJhdGVneSgpLT5hZGRUeXBlcyh0eXBlcywgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4
dCgpKTsKKyAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgp
LT5hZGRUeXBlcyh7IGNvY29hVHlwZSB9LCBtX3Bhc3RlYm9hcmROYW1lLCBjb250ZXh0KCkpOwog
ICAgICAgICBtX2NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRT
dHJhdGVneSgpLT5zZXRTdHJpbmdGb3JUeXBlKGNvY29hRGF0YSwgY29jb2FUeXBlLCBtX3Bhc3Rl
Ym9hcmROYW1lLCBjb250ZXh0KCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lVmlkZW9DYXB0dXJl
U291cmNlLmNwcAppbmRleCAzZTNmNDFhMWM1ODA3ZTZjZDM1OWRlM2RmMjZhZTcyZDU1MWNkNTgy
Li43N2QzMjY2NTZkNWNiYzVhZWZjZDQxN2ExN2E4N2E0NmY3MTIyN2JlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZVZpZGVvQ2FwdHVyZVNv
dXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRp
bWVWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCkBAIC03NSwxMSArNzUsOSBAQCBWZWN0b3I8VmlkZW9Q
cmVzZXREYXRhPiBSZWFsdGltZVZpZGVvQ2FwdHVyZVNvdXJjZTo6cHJlc2V0c0RhdGEoKQogCiB2
b2lkIFJlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlOjpzZXRTdXBwb3J0ZWRQcmVzZXRzKFZlY3Rv
cjxWaWRlb1ByZXNldERhdGE+JiYgcHJlc2V0RGF0YSkKIHsKLSAgICBWZWN0b3I8UmVmPFZpZGVv
UHJlc2V0Pj4gcHJlc2V0czsKLQotICAgIGZvciAoYXV0byYgZGF0YSA6IHByZXNldERhdGEpCi0g
ICAgICAgIHByZXNldHMuYXBwZW5kKFZpZGVvUHJlc2V0OjpjcmVhdGUoV1RGTW92ZShkYXRhKSkp
OwotCisgICAgYXV0byBwcmVzZXRzID0gV1RGOjptYXAoV1RGTW92ZShwcmVzZXREYXRhKSwgW10o
YXV0byYmIGRhdGEpIHsKKyAgICAgICAgcmV0dXJuIFZpZGVvUHJlc2V0OjpjcmVhdGUoV1RGTW92
ZShkYXRhKSk7CisgICAgfSk7CiAgICAgc2V0U3VwcG9ydGVkUHJlc2V0cyhXVEZNb3ZlKHByZXNl
dHMpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9C
bG9iUmVnaXN0cnlJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxv
YlJlZ2lzdHJ5SW1wbC5jcHAKaW5kZXggNjdhNzYyOTVkODVmMzkxYzgzYjI0MDBlNmQxZmU1Nzlj
Y2RlZDg4Zi4uNjIzNjM2YWMyYWJkNjgzODQxNGRjOGYxZjkyNmNlZDVjNDdjY2EyYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwu
Y3BwCkBAIC0xNDEsMTAgKzE0MSw4IEBAIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJC
bG9iVVJMKGNvbnN0IFVSTCYgdXJsLCBWZWN0b3I8QmxvYlBhcnQ+JiYgYmxvYlBhCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEJsb2JQYXJ0OjpUeXBlOjpCbG9i
OiB7Ci0gICAgICAgICAgICBpZiAoYXV0byBibG9iID0gbV9ibG9icy5nZXQocGFydC51cmwoKS5z
dHJpbmcoKSkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRl
bSA6IGJsb2ItPml0ZW1zKCkpCi0gICAgICAgICAgICAgICAgICAgIGJsb2JEYXRhLT5tX2l0ZW1z
LmFwcGVuZChpdGVtKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhdXRvIGJsb2Ig
PSBtX2Jsb2JzLmdldChwYXJ0LnVybCgpLnN0cmluZygpKSkKKyAgICAgICAgICAgICAgICBibG9i
RGF0YS0+bV9pdGVtcy5hcHBlbmRWZWN0b3IoYmxvYi0+aXRlbXMoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICB9CkBAIC0zMjgsNyArMzI2LDcgQEAgdm9pZCBCbG9i
UmVnaXN0cnlJbXBsOjp3cml0ZUJsb2JzVG9UZW1wb3JhcnlGaWxlc0ZvckluZGV4ZWREQihjb25z
dCBWZWN0b3I8U3RyaW4KICAgICAgICAgICAgICAgICBmaWxlUGF0aHMuY2xlYXIoKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbGVQYXRocy5h
cHBlbmQodGVtcEZpbGVQYXRoLmlzb2xhdGVkQ29weSgpKTsKKyAgICAgICAgICAgIGZpbGVQYXRo
cy5hcHBlbmQoV1RGTW92ZSh0ZW1wRmlsZVBhdGgpLmlzb2xhdGVkQ29weSgpKTsKICAgICAgICAg
fQogCiAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlciksIGZpbGVQYXRocyA9IFdURk1vdmUoZmlsZVBhdGhzKV0gKCkg
bXV0YWJsZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcAppbmRleCA4NTMwZTMzNTVmMmQ2YjhkN2ZmYjZlZGY4M2Q2MDhiY2E0YjlmNTU1
Li45YWI5OThlNDFjYjA4Y2YwYjZmOTBmMTBmMTNjNGI4NDU3ZWM5MzlmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTIwODYs
MTAgKzIwODYsOCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpkcmF3Qm94U2lkZUZyb21Q
YXRoKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LAogICAgICAgICAgICAgICAgIGdh
cExlbmd0aCArPSAoZGFzaExlbmd0aCAgLyBudW1iZXJPZkdhcHMpOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBEYXNoQXJyYXkgbGluZURhc2g7Ci0gICAgICAgICAgICBsaW5lRGFzaC5h
cHBlbmQoZGFzaExlbmd0aCk7Ci0gICAgICAgICAgICBsaW5lRGFzaC5hcHBlbmQoZ2FwTGVuZ3Ro
KTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRMaW5lRGFzaChsaW5lRGFzaCwgZGFz
aExlbmd0aCk7CisgICAgICAgICAgICBhdXRvIGxpbmVEYXNoID0gRGFzaEFycmF5Ojpmcm9tKGRh
c2hMZW5ndGgsIGdhcExlbmd0aCk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0TGlu
ZURhc2goV1RGTW92ZShsaW5lRGFzaCksIGRhc2hMZW5ndGgpOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICAvLyBGSVhNRTogc3Ryb2tpbmcgdGhlIGJvcmRlciBwYXRoIGNhdXNlcyBpc3N1
ZXMgd2l0aCB0aWdodCBjb3JuZXJzOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCBkYThkZjJlOTIzYjM1NDZlMGYzZDRjNWIzMDVlZmU2
NTQwN2U3ODYxLi40MjVjNjljMzE0MWJmNzRmYTU3MmRmMjBiYjhhMGU0MDU3N2FiODE4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAt
MTk1Niw5ICsxOTU2LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbm5lY3RDbGlwcGlu
Z1N0YWNrTGF5ZXJzKExheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrJgogICAgIGF1dG8mIGNsaXBw
aW5nRW50cnlTdGFjayA9IGNsaXBwaW5nU3RhY2suc3RhY2soKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY2xpcHBpbmdFbnRyeVN0YWNrLnNpemUoKSAtIDE7ICsraSkgewogICAgICAg
ICBhdXRvJiBlbnRyeSA9IGNsaXBwaW5nRW50cnlTdGFjay5hdChpKTsKLSAgICAgICAgVmVjdG9y
PFJlZjxHcmFwaGljc0xheWVyPj4gY2hpbGRyZW47Ci0gICAgICAgIGNoaWxkcmVuLmFwcGVuZCgq
Y2xpcHBpbmdFbnRyeVN0YWNrLmF0KGkgKyAxKS5jbGlwcGluZ0xheWVyKTsKLSAgICAgICAgZW50
cnkuY2xpcHBpbmdMYXllci0+c2V0Q2hpbGRyZW4oV1RGTW92ZShjaGlsZHJlbikpOworICAgICAg
ICBlbnRyeS5jbGlwcGluZ0xheWVyLT5zZXRDaGlsZHJlbih7IFJlZiB7ICpjbGlwcGluZ0VudHJ5
U3RhY2suYXQoaSArIDEpLmNsaXBwaW5nTGF5ZXIgfSB9KTsKICAgICB9CiAKICAgICBjbGlwcGlu
Z0VudHJ5U3RhY2subGFzdCgpLmNsaXBwaW5nTGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
CmluZGV4IGQzOTUxNTBlNDY0MjExNTUxZDhiOGRmOTc2ZWFhZGU2YjdmNDc3ZjEuLmIwNGI3M2I0
MDIxZTkzMWIwMzdlODY0YWQ4YmNjMDM0NWQyZTY0OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBAIC0xNDkxLDkgKzE0OTEs
NyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRqdXN0T3ZlcmZsb3dTY3JvbGxiYXJD
b250YWluZXJMYXllcnMoUmVuZGVyTGF5ZXImCiAgICAgICAgICAgICBvdmVyZmxvd0JhY2tpbmct
PmVuc3VyZU92ZXJmbG93Q29udHJvbHNIb3N0TGF5ZXJBbmNlc3RvckNsaXBwaW5nU3RhY2soJnN0
YWNraW5nQ29udGV4dExheWVyKTsKIAogICAgICAgICBpZiAoYXV0byogb3ZlcmZsb3dDb250cm9s
c0FuY2VzdG9yQ2xpcHBpbmdTdGFjayA9IG92ZXJmbG93QmFja2luZy0+b3ZlcmZsb3dDb250cm9s
c0hvc3RMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjaygpKSB7Ci0gICAgICAgICAgICBWZWN0b3I8
UmVmPEdyYXBoaWNzTGF5ZXI+PiBjaGlsZHJlbjsKLSAgICAgICAgICAgIGNoaWxkcmVuLmFwcGVu
ZCgqb3ZlcmZsb3dDb250YWluZXJMYXllcik7Ci0gICAgICAgICAgICBvdmVyZmxvd0NvbnRyb2xz
QW5jZXN0b3JDbGlwcGluZ1N0YWNrLT5sYXN0Q2xpcHBpbmdMYXllcigpLT5zZXRDaGlsZHJlbihX
VEZNb3ZlKGNoaWxkcmVuKSk7CisgICAgICAgICAgICBvdmVyZmxvd0NvbnRyb2xzQW5jZXN0b3JD
bGlwcGluZ1N0YWNrLT5sYXN0Q2xpcHBpbmdMYXllcigpLT5zZXRDaGlsZHJlbih7IFJlZiB7ICpv
dmVyZmxvd0NvbnRhaW5lckxheWVyIH0gfSk7CiAgICAgICAgICAgICBvdmVyZmxvd0NvbnRhaW5l
ckxheWVyID0gb3ZlcmZsb3dDb250cm9sc0FuY2VzdG9yQ2xpcHBpbmdTdGFjay0+Zmlyc3RDbGlw
cGluZ0xheWVyKCk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tCmluZGV4IDllMTA4ZjhiNGZmMjYxNzk2ODk2NGZhMTM3MDE1MTliYmMyNDUy
YzQuLjg3NjY3ZGUyZGVkMjk1ZDkzNTgwMmIzMzg5MmEwYzMyMWM3ZTMyZWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTI3MzEsMTAgKzI3MzEsOSBA
QCBzdGF0aWMgdm9pZCBwYWludEF0dGFjaG1lbnRUaXRsZUJhY2tncm91bmQoY29uc3QgUmVuZGVy
QXR0YWNobWVudCYgYXR0YWNobWVudCwgRwogICAgIGlmIChsYXlvdXQubGluZXMuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8RmxvYXRSZWN0PiBiYWNrZ3JvdW5kUmVj
dHM7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheW91dC5saW5lcy5zaXplKCk7ICsr
aSkKLSAgICAgICAgYmFja2dyb3VuZFJlY3RzLmFwcGVuZChsYXlvdXQubGluZXNbaV0uYmFja2dy
b3VuZFJlY3QpOworICAgIGF1dG8gYmFja2dyb3VuZFJlY3RzID0gbGF5b3V0LmxpbmVzLm1hcChb
XShhdXRvJiBsaW5lKSB7CisgICAgICAgIHJldHVybiBsaW5lLmJhY2tncm91bmRSZWN0OworICAg
IH0pOwogCiAgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yOwogICAgIGlmIChhdHRhY2htZW50LmZy
YW1lKCkuc2VsZWN0aW9uKCkuaXNGb2N1c2VkQW5kQWN0aXZlKCkpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IGZl
NTU5YmQ3MGIxZDBjZjRiMWM1YTViMWM5MGEyOTYzNWU4YjI3MzEuLjkyNzZiOTNjNzMxMjYxYzFm
MmZmYmVjNDlmMWVjY2U3M2NhMWJiNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtMTk3LDExICsxOTcsOSBAQCBz
dGF0aWMgdm9pZCB3cml0ZVNWR1N0cm9rZVBhaW50aW5nUmVzb3VyY2UoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IFJlbmRlckVsZW1lbnQmCiAgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5ndGhDb250ZXh0
KCZzaGFwZSk7CiAgICAgZG91YmxlIGRhc2hPZmZzZXQgPSBsZW5ndGhDb250ZXh0LnZhbHVlRm9y
TGVuZ3RoKHN2Z1N0eWxlLnN0cm9rZURhc2hPZmZzZXQoKSk7CiAgICAgZG91YmxlIHN0cm9rZVdp
ZHRoID0gbGVuZ3RoQ29udGV4dC52YWx1ZUZvckxlbmd0aChzdHlsZS5zdHJva2VXaWR0aCgpKTsK
LSAgICBjb25zdCBhdXRvJiBkYXNoZXMgPSBzdmdTdHlsZS5zdHJva2VEYXNoQXJyYXkoKTsKLQot
ICAgIERhc2hBcnJheSBkYXNoQXJyYXk7Ci0gICAgZm9yIChhdXRvJiBsZW5ndGggOiBkYXNoZXMp
Ci0gICAgICAgIGRhc2hBcnJheS5hcHBlbmQobGVuZ3RoLnZhbHVlKGxlbmd0aENvbnRleHQpKTsK
KyAgICBhdXRvIGRhc2hBcnJheSA9IHN2Z1N0eWxlLnN0cm9rZURhc2hBcnJheSgpLm1hcChbJl0o
YXV0byYgbGVuZ3RoKSAtPiBEYXNoQXJyYXlFbGVtZW50IHsKKyAgICAgICAgcmV0dXJuIGxlbmd0
aC52YWx1ZShsZW5ndGhDb250ZXh0KTsKKyAgICB9KTsKIAogICAgIHdyaXRlSWZOb3REZWZhdWx0
KHRzLCAib3BhY2l0eSIsIHN2Z1N0eWxlLnN0cm9rZU9wYWNpdHkoKSwgMS4wZik7CiAgICAgd3Jp
dGVJZk5vdERlZmF1bHQodHMsICJzdHJva2Ugd2lkdGgiLCBzdHJva2VXaWR0aCwgMS4wKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcAppbmRleCBhNjNl
YjgwYTc3OWQ3NzY4ZGE0NzcyYmIwZDZhZmUxOWUzNTIxYmJkLi44NDgxMzZjOGE1MzhjNmVjOGVj
YzE2ZDViZjAxYmZkZTJkZGIzOTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRDaHVuay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0Q2h1bmsuY3BwCkBAIC03MCw4ICs3MCw3IEBAIFNWR1RleHRDaHVuazo6U1ZHVGV4
dENodW5rKGNvbnN0IFZlY3RvcjxTVkdJbmxpbmVUZXh0Qm94Kj4mIGxpbmVMYXlvdXRCb3hlcywg
dW5zCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBmaXJzdDsgaSA8
IGxpbWl0OyArK2kpCi0gICAgICAgIG1fYm94ZXMuYXBwZW5kKGxpbmVMYXlvdXRCb3hlc1tpXSk7
CisgICAgbV9ib3hlcy5hcHBlbmQoJmxpbmVMYXlvdXRCb3hlc1tmaXJzdF0sIGxpbWl0IC0gZmly
c3QpOwogfQogCiB1bnNpZ25lZCBTVkdUZXh0Q2h1bms6OnRvdGFsQ2hhcmFjdGVycygpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5jcHAKaW5kZXggMjI5OWY4
YzYzNzliNTA5NDkyYTFhMWZmYTUyMzA2YTFhYTE2ODliNC4uZTNkYzNlZmJjMjliNjNkNzUyMTQ5
ZGFjYjExMzFmZmE1MmFjYzk0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUGFn
ZVJ1bGVDb2xsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29s
bGVjdG9yLmNwcApAQCAtODQsOCArODQsOSBAQCB2b2lkIFBhZ2VSdWxlQ29sbGVjdG9yOjptYXRj
aFBhZ2VSdWxlcyhSdWxlU2V0KiBydWxlcywgYm9vbCBpc0xlZnRQYWdlLCBib29sIGlzRgogCiAg
ICAgc3RkOjpzdGFibGVfc29ydChtYXRjaGVkUGFnZVJ1bGVzLmJlZ2luKCksIG1hdGNoZWRQYWdl
UnVsZXMuZW5kKCksIGNvbXBhcmVQYWdlUnVsZXMpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1hdGNoZWRQYWdlUnVsZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIG1fcmVzdWx0LmF1
dGhvckRlY2xhcmF0aW9ucy5hcHBlbmQoeyAmbWF0Y2hlZFBhZ2VSdWxlc1tpXS0+cHJvcGVydGll
cygpIH0pOworICAgIG1fcmVzdWx0LmF1dGhvckRlY2xhcmF0aW9ucy5yZXNlcnZlQ2FwYWNpdHko
bV9yZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zLnNpemUoKSArIG1hdGNoZWRQYWdlUnVsZXMuc2l6
ZSgpKTsKKyAgICBmb3IgKGF1dG8qIHBhZ2VSdWxlIDogbWF0Y2hlZFBhZ2VSdWxlcykKKyAgICAg
ICAgbV9yZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zLnVuY2hlY2tlZEFwcGVuZCh7ICZwYWdlUnVs
ZS0+cHJvcGVydGllcygpIH0pOwogfQogCiBzdGF0aWMgYm9vbCBjaGVja1BhZ2VTZWxlY3RvckNv
bXBvbmVudHMoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBib29sIGlzTGVmdFBhZ2UsIGJv
b2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0QnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHls
ZS9SdWxlU2V0QnVpbGRlci5jcHAKaW5kZXggY2I0NDBhYzk2NjA1MDAxZDg4OTMxNzRlZTMxZWQ5
OGQ1ZTIyYTdjZi4uMDUxZGExZGQ4ZmExNjdiMTlhMTIwYzdiM2Y5YWQ4NTJjZjlmMGJhNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcApAQCAtMzc4LDggKzM3OCw5IEBA
IHZvaWQgUnVsZVNldEJ1aWxkZXI6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OnBvcChjb25zdCBNZWRp
YVF1ZXJ5U2V0KiBzZXQpCiAKICAgICBpZiAoIWR5bmFtaWNDb250ZXh0U3RhY2subGFzdCgpLmFm
ZmVjdGVkUnVsZVBvc2l0aW9ucy5pc0VtcHR5KCkgfHwgIWNvbGxlY3REeW5hbWljKSB7CiAgICAg
ICAgIFJ1bGVTZXQ6OkR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMgcnVsZXM7CisgICAgICAgIHJ1bGVz
Lm1lZGlhUXVlcnlTZXRzLnJlc2VydmVDYXBhY2l0eShydWxlcy5tZWRpYVF1ZXJ5U2V0cy5zaXpl
KCkgKyBkeW5hbWljQ29udGV4dFN0YWNrLnNpemUoKSk7CiAgICAgICAgIGZvciAoYXV0byYgY29u
dGV4dCA6IGR5bmFtaWNDb250ZXh0U3RhY2spCi0gICAgICAgICAgICBydWxlcy5tZWRpYVF1ZXJ5
U2V0cy5hcHBlbmQoY29udGV4dC5zZXQuZ2V0KCkpOworICAgICAgICAgICAgcnVsZXMubWVkaWFR
dWVyeVNldHMudW5jaGVja2VkQXBwZW5kKGNvbnRleHQuc2V0LmdldCgpKTsKIAogICAgICAgICBp
ZiAoY29sbGVjdER5bmFtaWMpIHsKICAgICAgICAgICAgIHJ1bGVzLmFmZmVjdGVkUnVsZVBvc2l0
aW9ucy5hcHBlbmRWZWN0b3IoZHluYW1pY0NvbnRleHRTdGFjay5sYXN0KCkuYWZmZWN0ZWRSdWxl
UG9zaXRpb25zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRl
ckNvbnZlcnRlci5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVy
LmgKaW5kZXggMmY4MzRkZjY3ZDgwY2IxM2RkNGM5MTU1MWJhZDEyZGIxYjIzYTI0OS4uNzQ2NGY4
NGQ4YmY2YjJiMmEzMzEyM2Q1OTJiZTI5MmYxNGNjMjhkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgKQEAgLTE2OTcsMTMgKzE2OTcsMTIgQEAgaW5s
aW5lIFZlY3RvcjxBdG9tU3RyaW5nPiBCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Q29udGFpbmVy
TmFtZShCdWlsZGVyU3RhdGUmLAogICAgICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKTsKICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CisgICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkKKyAgICAgICAg
cmV0dXJuIHsgfTsKIAotICAgIFZlY3RvcjxBdG9tU3RyaW5nPiByZXN1bHQ7Ci0gICAgaWYgKGlz
PENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgaXRlbSA6IGRvd25j
YXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oaXRlbS5nZXQoKSkuc3RyaW5nVmFsdWUoKSk7Ci0gICAg
fQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIFdURjo6bWFwKGRvd25jYXN0PENTU1Zh
bHVlTGlzdD4odmFsdWUpLCBbXShhdXRvJiBpdGVtKSAtPiBBdG9tU3RyaW5nIHsKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihpdGVtLmdldCgpKS5zdHJpbmdWYWx1
ZSgpOworICAgIH0pOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJQcm94eS5jcHAKaW5kZXggMGVmODM0MmRkMjY4
ZWU2OGMzMDQ3NjJkYTA1OGJhNGZiY2JjNmUzYy4uOTQ5ZmYzMjA1NTUwYjQ4YjdjYzc5ZTQ1MDUx
NmE0MDQwMmE0YTM5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlh
L1JlbW90ZU1lZGlhUGxheWVyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllclByb3h5LmNwcApAQCAtODA1LDExICs4MDUsOSBAQCBi
b29sIFJlbW90ZU1lZGlhUGxheWVyUHJveHk6OmRvZXNIYXZlQXR0cmlidXRlKGNvbnN0IEF0b21T
dHJpbmcmLCBBdG9tU3RyaW5nKikgYwogI2lmIEVOQUJMRShBVkZfQ0FQVElPTlMpCiBWZWN0b3I8
UmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNrPj4gUmVtb3RlTWVkaWFQbGF5ZXJQcm94eTo6b3V0T2ZC
YW5kVHJhY2tTb3VyY2VzKCkKIHsKLSAgICBWZWN0b3I8UmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNr
Pj4gc291cmNlczsKLSAgICBmb3IgKGF1dG8mIGRhdGEgOiBtX2NvbmZpZ3VyYXRpb24ub3V0T2ZC
YW5kVHJhY2tEYXRhKQotICAgICAgICBzb3VyY2VzLmFwcGVuZChQbGF0Zm9ybVRleHRUcmFjazo6
Y3JlYXRlKFdURk1vdmUoZGF0YSkpKTsKLSAgICAKLSAgICByZXR1cm4gc291cmNlczsKKyAgICBy
ZXR1cm4gV1RGOjptYXAobV9jb25maWd1cmF0aW9uLm91dE9mQmFuZFRyYWNrRGF0YSwgW10oYXV0
byYgZGF0YSkgLT4gUmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNrPiB7CisgICAgICAgIHJldHVybiBQ
bGF0Zm9ybVRleHRUcmFjazo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpOworICAgIH0pOwogfQogCiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVT
b3VyY2VCdWZmZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVt
b3RlU291cmNlQnVmZmVyUHJveHkuY3BwCmluZGV4IDI3OTE2NWRlNjZhYWZlMDI0NjgxZTE2MWEw
MzVjNGExMDk1NGU2ZTEuLmJjOGQwMTYyMmRjOWYxMTQxZTg1OWYyNDYyZjM2Mjg4NzhiMmI1ZDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVTb3VyY2VC
dWZmZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90
ZVNvdXJjZUJ1ZmZlclByb3h5LmNwcApAQCAtNzUsMzUgKzc1LDMzIEBAIHZvaWQgUmVtb3RlU291
cmNlQnVmZmVyUHJveHk6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6YXRp
b25TZWdtZW50CiAKICAgICBJbml0aWFsaXphdGlvblNlZ21lbnRJbmZvIHNlZ21lbnRJbmZvOwog
ICAgIHNlZ21lbnRJbmZvLmR1cmF0aW9uID0gc2VnbWVudC5kdXJhdGlvbjsKLSAgICBmb3IgKGF1
dG8mIGF1ZGlvVHJhY2tJbmZvIDogc2VnbWVudC5hdWRpb1RyYWNrcykgewotICAgICAgICBhdXRv
IGlkZW50aWZpZXIgPSBtX3JlbW90ZU1lZGlhUGxheWVyUHJveHktPmFkZFJlbW90ZUF1ZGlvVHJh
Y2tQcm94eSgqYXVkaW9UcmFja0luZm8udHJhY2spOwotICAgICAgICBzZWdtZW50SW5mby5hdWRp
b1RyYWNrcy5hcHBlbmQoeyBNZWRpYURlc2NyaXB0aW9uSW5mbygqYXVkaW9UcmFja0luZm8uZGVz
Y3JpcHRpb24pLCBpZGVudGlmaWVyIH0pOwogCisgICAgc2VnbWVudEluZm8uYXVkaW9UcmFja3Mg
PSBzZWdtZW50LmF1ZGlvVHJhY2tzLm1hcChbJl0oYXV0byYgYXVkaW9UcmFja0luZm8pIHsKKyAg
ICAgICAgYXV0byBpZGVudGlmaWVyID0gbV9yZW1vdGVNZWRpYVBsYXllclByb3h5LT5hZGRSZW1v
dGVBdWRpb1RyYWNrUHJveHkoKmF1ZGlvVHJhY2tJbmZvLnRyYWNrKTsKICAgICAgICAgQVNTRVJU
KCFtX3RyYWNrSWRzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKICAgICAgICAgQVNTRVJUKCFtX21l
ZGlhRGVzY3JpcHRpb25zLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKICAgICAgICAgbV90cmFja0lk
cy5hZGQoaWRlbnRpZmllciwgYXVkaW9UcmFja0luZm8udHJhY2stPmlkKCkpOwogICAgICAgICBt
X21lZGlhRGVzY3JpcHRpb25zLmFkZChpZGVudGlmaWVyLCAqYXVkaW9UcmFja0luZm8uZGVzY3Jp
cHRpb24pOwotICAgIH0KKyAgICAgICAgcmV0dXJuIEluaXRpYWxpemF0aW9uU2VnbWVudEluZm86
OlRyYWNrSW5mb3JtYXRpb24geyBNZWRpYURlc2NyaXB0aW9uSW5mbygqYXVkaW9UcmFja0luZm8u
ZGVzY3JpcHRpb24pLCBpZGVudGlmaWVyIH07CisgICAgfSk7CiAKLSAgICBmb3IgKGF1dG8mIHZp
ZGVvVHJhY2tJbmZvIDogc2VnbWVudC52aWRlb1RyYWNrcykgeworICAgIHNlZ21lbnRJbmZvLnZp
ZGVvVHJhY2tzID0gc2VnbWVudC52aWRlb1RyYWNrcy5tYXAoWyZdKGF1dG8mIHZpZGVvVHJhY2tJ
bmZvKSB7CiAgICAgICAgIGF1dG8gaWRlbnRpZmllciA9IG1fcmVtb3RlTWVkaWFQbGF5ZXJQcm94
eS0+YWRkUmVtb3RlVmlkZW9UcmFja1Byb3h5KCp2aWRlb1RyYWNrSW5mby50cmFjayk7Ci0gICAg
ICAgIHNlZ21lbnRJbmZvLnZpZGVvVHJhY2tzLmFwcGVuZCh7IE1lZGlhRGVzY3JpcHRpb25JbmZv
KCp2aWRlb1RyYWNrSW5mby5kZXNjcmlwdGlvbiksIGlkZW50aWZpZXIgfSk7Ci0KICAgICAgICAg
QVNTRVJUKCFtX3RyYWNrSWRzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKICAgICAgICAgQVNTRVJU
KCFtX21lZGlhRGVzY3JpcHRpb25zLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKICAgICAgICAgbV90
cmFja0lkcy5hZGQoaWRlbnRpZmllciwgdmlkZW9UcmFja0luZm8udHJhY2stPmlkKCkpOwogICAg
ICAgICBtX21lZGlhRGVzY3JpcHRpb25zLmFkZChpZGVudGlmaWVyLCAqdmlkZW9UcmFja0luZm8u
ZGVzY3JpcHRpb24pOwotICAgIH0KKyAgICAgICAgcmV0dXJuIEluaXRpYWxpemF0aW9uU2VnbWVu
dEluZm86OlRyYWNrSW5mb3JtYXRpb24geyBNZWRpYURlc2NyaXB0aW9uSW5mbygqdmlkZW9UcmFj
a0luZm8uZGVzY3JpcHRpb24pLCBpZGVudGlmaWVyIH07CisgICAgfSk7CiAKLSAgICBmb3IgKGF1
dG8mIHRleHRUcmFja0luZm8gOiBzZWdtZW50LnRleHRUcmFja3MpIHsKKyAgICBzZWdtZW50SW5m
by50ZXh0VHJhY2tzID0gc2VnbWVudC50ZXh0VHJhY2tzLm1hcChbJl0oYXV0byYgdGV4dFRyYWNr
SW5mbykgewogICAgICAgICBhdXRvIGlkZW50aWZpZXIgPSBtX3JlbW90ZU1lZGlhUGxheWVyUHJv
eHktPmFkZFJlbW90ZVRleHRUcmFja1Byb3h5KCp0ZXh0VHJhY2tJbmZvLnRyYWNrKTsKLSAgICAg
ICAgc2VnbWVudEluZm8udGV4dFRyYWNrcy5hcHBlbmQoeyBNZWRpYURlc2NyaXB0aW9uSW5mbygq
dGV4dFRyYWNrSW5mby5kZXNjcmlwdGlvbiksIGlkZW50aWZpZXIgfSk7Ci0KICAgICAgICAgQVNT
RVJUKCFtX3RyYWNrSWRzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKICAgICAgICAgQVNTRVJUKCFt
X21lZGlhRGVzY3JpcHRpb25zLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKICAgICAgICAgbV90cmFj
a0lkcy5hZGQoaWRlbnRpZmllciwgdGV4dFRyYWNrSW5mby50cmFjay0+aWQoKSk7CiAgICAgICAg
IG1fbWVkaWFEZXNjcmlwdGlvbnMuYWRkKGlkZW50aWZpZXIsICp0ZXh0VHJhY2tJbmZvLmRlc2Ny
aXB0aW9uKTsKLSAgICB9CisgICAgICAgIHJldHVybiBJbml0aWFsaXphdGlvblNlZ21lbnRJbmZv
OjpUcmFja0luZm9ybWF0aW9uIHsgTWVkaWFEZXNjcmlwdGlvbkluZm8oKnRleHRUcmFja0luZm8u
ZGVzY3JpcHRpb24pLCBpZGVudGlmaWVyIH07CisgICAgfSk7CiAKICAgICBpZiAoIW1fY29ubmVj
dGlvblRvV2ViUHJvY2VzcykgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtMzM4
LDE2ICszMzYsMTEgQEAgdm9pZCBSZW1vdGVTb3VyY2VCdWZmZXJQcm94eTo6c2Vla1RvVGltZShj
b25zdCBNZWRpYVRpbWUmIG1lZGlhVGltZSkKIAogdm9pZCBSZW1vdGVTb3VyY2VCdWZmZXJQcm94
eTo6dXBkYXRlVHJhY2tJZHMoVmVjdG9yPHN0ZDo6cGFpcjxUcmFja1ByaXZhdGVSZW1vdGVJZGVu
dGlmaWVyLCBUcmFja1ByaXZhdGVSZW1vdGVJZGVudGlmaWVyPj4mJiBpZGVudGlmaWVyUGFpcnMp
CiB7Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxBdG9tU3RyaW5nLCBBdG9tU3RyaW5nPj4gdHJhY2tJ
ZFBhaXJzOwotCi0gICAgZm9yIChhdXRvJiBpZGVudGlmaWVyUGFpciA6IGlkZW50aWZpZXJQYWly
cykgeworICAgIGF1dG8gdHJhY2tJZFBhaXJzID0gaWRlbnRpZmllclBhaXJzLm1hcChbJl0oYXV0
byYgaWRlbnRpZmllclBhaXIpIHsKICAgICAgICAgQVNTRVJUKG1fdHJhY2tJZHMuY29udGFpbnMo
aWRlbnRpZmllclBhaXIuZmlyc3QpKTsKICAgICAgICAgQVNTRVJUKG1fdHJhY2tJZHMuY29udGFp
bnMoaWRlbnRpZmllclBhaXIuc2Vjb25kKSk7Ci0KLSAgICAgICAgYXV0byBvbGRJZCA9IG1fdHJh
Y2tJZHMudGFrZShpZGVudGlmaWVyUGFpci5maXJzdCk7Ci0gICAgICAgIGF1dG8gbmV3SWQgPSBt
X3RyYWNrSWRzLmdldChpZGVudGlmaWVyUGFpci5zZWNvbmQpOwotICAgICAgICB0cmFja0lkUGFp
cnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG9sZElkLCBuZXdJZCkpOwotICAgIH0KKyAgICAgICAg
cmV0dXJuIHN0ZDo6cGFpciB7IG1fdHJhY2tJZHMudGFrZShpZGVudGlmaWVyUGFpci5maXJzdCks
IG1fdHJhY2tJZHMuZ2V0KGlkZW50aWZpZXJQYWlyLnNlY29uZCkgfTsKKyAgICB9KTsKIAogICAg
IGlmICghdHJhY2tJZFBhaXJzLmlzRW1wdHkoKSkKICAgICAgICAgbV9zb3VyY2VCdWZmZXJQcml2
YXRlLT51cGRhdGVUcmFja0lkcyhXVEZNb3ZlKHRyYWNrSWRQYWlycykpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZp
ZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAppbmRleCA3MGI1YWZkYTUyNmU5
OTA5Yjk2MmQ3MTIxM2Q4NWI2MGI1MzcxODFkLi5lODc2ZWMzNzc3MWZmNDAwY2FhODM0Y2VmYWU5
NTYyNTRjYzNmZDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Ns
YXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmNwcApAQCAtODUzLDkgKzg1Myw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjptZXJnZVN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgUmVnaXN0cmFibGVECiAK
ICAgICAgICAgICAgIHN0YXRpc3RpYy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zID0gV1RG
TW92ZSh0b3BGcmFtZURvbWFpbnMpOwogCi0gICAgICAgICAgICBWZWN0b3I8UmVzb3VyY2VMb2Fk
U3RhdGlzdGljcz4gc3RhdGlzdGljczsKLSAgICAgICAgICAgIHN0YXRpc3RpY3MuYXBwZW5kKFdU
Rk1vdmUoc3RhdGlzdGljKSk7Ci0gICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+bWVyZ2VT
dGF0aXN0aWNzKFdURk1vdmUoc3RhdGlzdGljcykpOworICAgICAgICAgICAgbV9zdGF0aXN0aWNz
U3RvcmUtPm1lcmdlU3RhdGlzdGljcyhWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz46OmZy
b20oV1RGTW92ZShzdGF0aXN0aWMpKSk7CiAgICAgICAgIH0KICAgICAgICAgcG9zdFRhc2tSZXBs
eShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IGY0ZjhhNGM0ZjRhZjk2
YWY2ODk0MmM1YzZjOTg5MmZmN2UxOTkzZjEuLjRhOGIwZWRhMDliZjA1ODk4YTNiOGIyMmM5MDhi
NDdiMjhlYjljODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuY3BwCkBAIC0xMzgwLDEwICsxMzgwLDkgQEAgc3RhdGljIHZvaWQgZmV0Y2hEaXNr
Q2FjaGVFbnRyaWVzKE5ldHdvcmtDYWNoZTo6Q2FjaGUqIGNhY2hlLCBQQUw6OlNlc3Npb25JRCBz
ZXMKICAgICBIYXNoTWFwPFNlY3VyaXR5T3JpZ2luRGF0YSwgdWludDY0X3Q+IG9yaWdpbnNBbmRT
aXplczsKICAgICBjYWNoZS0+dHJhdmVyc2UoW2ZldGNoT3B0aW9ucywgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgb3JpZ2luc0FuZFNpemVzID0gV1RGTW92
ZShvcmlnaW5zQW5kU2l6ZXMpXShhdXRvKiB0cmF2ZXJzYWxFbnRyeSkgbXV0YWJsZSB7CiAgICAg
ICAgIGlmICghdHJhdmVyc2FsRW50cnkpIHsKLSAgICAgICAgICAgIFZlY3RvcjxXZWJzaXRlRGF0
YTo6RW50cnk+IGVudHJpZXM7Ci0KLSAgICAgICAgICAgIGZvciAoYXV0byYgb3JpZ2luQW5kU2l6
ZSA6IG9yaWdpbnNBbmRTaXplcykKLSAgICAgICAgICAgICAgICBlbnRyaWVzLmFwcGVuZChXZWJz
aXRlRGF0YTo6RW50cnkgeyBvcmlnaW5BbmRTaXplLmtleSwgV2Vic2l0ZURhdGFUeXBlOjpEaXNr
Q2FjaGUsIG9yaWdpbkFuZFNpemUudmFsdWUgfSk7CisgICAgICAgICAgICBhdXRvIGVudHJpZXMg
PSBXVEY6Om1hcChvcmlnaW5zQW5kU2l6ZXMsIFtdKGF1dG8mIG9yaWdpbkFuZFNpemUpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luQW5kU2l6ZS5r
ZXksIFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlLCBvcmlnaW5BbmRTaXplLnZhbHVlIH07Cisg
ICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBlbnRyaWVzID0g
V1RGTW92ZShlbnRyaWVzKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoZW50cmllcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05vdGlmaWNhdGlvbnMvTmV0d29ya05vdGlmaWNhdGlvbk1hbmFnZXIuY3BwIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05ldHdvcmtOb3RpZmljYXRpb25N
YW5hZ2VyLmNwcAppbmRleCBmMDBhMjE5M2FhMmIxMzk4MDJiMzY2YTRmMTIxYzc2ZWRmZjg4ZjAz
Li5jNTEyZjJjYjMyNTQwNDU0YjA2ZGY3MzI1YTMxYjJhM2NlMWQwYzY5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05vdGlmaWNhdGlvbnMvTmV0d29ya05vdGlmaWNh
dGlvbk1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTm90aWZp
Y2F0aW9ucy9OZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlci5jcHAKQEAgLTgyLDkgKzgyLDkgQEAg
dm9pZCBOZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlcjo6ZGVsZXRlUHVzaEFuZE5vdGlmaWNhdGlv
blJlZ2lzdHJhdGlvbihjb25zdCBTZWMKIHZvaWQgTmV0d29ya05vdGlmaWNhdGlvbk1hbmFnZXI6
OmdldE9yaWdpbnNXaXRoUHVzaEFuZE5vdGlmaWNhdGlvblBlcm1pc3Npb25zKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+
JiYpPiByZXBseUhhbmRsZXIgPSBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0gKFZlY3RvcjxTdHJpbmc+IG9yaWdpblN0cmluZ3MpIG11dGFibGUgewotICAg
ICAgICBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zOwotICAgICAgICBmb3IgKGF1
dG8mIG9yaWdpblN0cmluZyA6IG9yaWdpblN0cmluZ3MpCi0gICAgICAgICAgICBvcmlnaW5zLmFw
cGVuZChTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21VUkwoeyB7IH0sIG9yaWdpblN0cmluZyB9KSk7
CisgICAgICAgIGF1dG8gb3JpZ2lucyA9IG9yaWdpblN0cmluZ3MubWFwKFtdKGF1dG8mIG9yaWdp
blN0cmluZykgeworICAgICAgICAgICAgcmV0dXJuIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbVVS
TCh7IHsgfSwgb3JpZ2luU3RyaW5nIH0pOworICAgICAgICB9KTsKICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoV1RGTW92ZShvcmlnaW5zKSk7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAK
aW5kZXggY2I5MDFiNmM1OGIxODU5YWU4YmUyYWQ5ZGE5MDAyZDgyMmI4MDYxMi4uYzFiOTg2Y2Y5
ZjY2MTI0MWYxMDNhNzgwNmM4MzY2ZGU4YmM0MzYzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCkBA
IC0yOTUsMjAgKzI5NSwxNCBAQCBWZWN0b3I8U3RvcmFnZUFyZWFJZGVudGlmaWVyPiBTdG9yYWdl
TWFuYWdlcjo6YWxsU3RvcmFnZUFyZWFJZGVudGlmaWVycygpIGNvbnN0CiAgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CiAKICAgICBWZWN0b3I8U3RvcmFnZUFyZWFJZGVudGlmaWVyPiBp
ZGVudGlmaWVyczsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGxvY2FsU3RvcmFnZU5hbWVzcGFjZSA6
IG1fbG9jYWxTdG9yYWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8g
a2V5IDogbG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlQXJlYUlkZW50aWZpZXJzKCkpCi0g
ICAgICAgICAgICBpZGVudGlmaWVycy5hcHBlbmQoa2V5KTsKLSAgICB9CisgICAgZm9yIChhdXRv
JiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UgOiBtX2xvY2FsU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVz
KCkpCisgICAgICAgIGlkZW50aWZpZXJzLmFwcGVuZFZlY3Rvcihsb2NhbFN0b3JhZ2VOYW1lc3Bh
Y2UtPnN0b3JhZ2VBcmVhSWRlbnRpZmllcnMoKSk7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHRy
YXNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlIDogbV90cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1l
c3BhY2VzLnZhbHVlcygpKSB7Ci0gICAgICAgIGZvciAoYXV0byBrZXkgOiB0cmFzaWVudExvY2Fs
U3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZUFyZWFJZGVudGlmaWVycygpKQotICAgICAgICAgICAg
aWRlbnRpZmllcnMuYXBwZW5kKGtleSk7Ci0gICAgfQorICAgIGZvciAoYXV0byYgdHJhc2llbnRM
b2NhbFN0b3JhZ2VOYW1lc3BhY2UgOiBtX3RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZXMu
dmFsdWVzKCkpCisgICAgICAgIGlkZW50aWZpZXJzLmFwcGVuZFZlY3Rvcih0cmFzaWVudExvY2Fs
U3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZUFyZWFJZGVudGlmaWVycygpKTsKIAotICAgIGZvciAo
Y29uc3QgYXV0byYgc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UgOiBtX3Nlc3Npb25TdG9yYWdlTmFt
ZXNwYWNlcy52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8ga2V5IDogc2Vzc2lvblN0b3Jh
Z2VOYW1lc3BhY2UtPnN0b3JhZ2VBcmVhSWRlbnRpZmllcnMoKSkKLSAgICAgICAgICAgIGlkZW50
aWZpZXJzLmFwcGVuZChrZXkpOwotICAgIH0KKyAgICBmb3IgKGF1dG8mIHNlc3Npb25TdG9yYWdl
TmFtZXNwYWNlIDogbV9zZXNzaW9uU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpCisgICAgICAg
IGlkZW50aWZpZXJzLmFwcGVuZFZlY3RvcihzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFn
ZUFyZWFJZGVudGlmaWVycygpKTsKIAogICAgIHJldHVybiBpZGVudGlmaWVyczsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9UcmFuc2llbnRM
b2NhbFN0b3JhZ2VOYW1lc3BhY2UuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9X
ZWJTdG9yYWdlL1RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHAKaW5kZXggZWVlYzU1
MGVlZjYzYWU1OWExZWFiM2FhOGE0OTdhMzJjMTA1MDYyNC4uZmI5OGVkMzk0ODA5MTYwNjg3MTcy
NmFlMDg2ZDUxZjE1MTJkNDQwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9XZWJTdG9yYWdlL1RyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTdG9yYWdlL1RyYW5zaWVudExvY2FsU3Rv
cmFnZU5hbWVzcGFjZS5jcHAKQEAgLTU1LDE0ICs1NSwxMSBAQCBTdG9yYWdlQXJlYSYgVHJhbnNp
ZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpnZXRPckNyZWF0ZVN0b3JhZ2VBcmVhKFNlY3VyaXR5
T3JpZwogVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4gVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFt
ZXNwYWNlOjpvcmlnaW5zKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKLSAgICBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zOwotCi0gICAgZm9yIChj
b25zdCBhdXRvJiBzdG9yYWdlQXJlYSA6IG1fc3RvcmFnZUFyZWFNYXAudmFsdWVzKCkpIHsKLSAg
ICAgICAgaWYgKCFzdG9yYWdlQXJlYS0+aXRlbXMoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBv
cmlnaW5zLmFwcGVuZChzdG9yYWdlQXJlYS0+c2VjdXJpdHlPcmlnaW4oKSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG9yaWdpbnM7CisgICAgcmV0dXJuIFdURjo6Y29tcGFjdE1hcChtX3N0b3JhZ2VB
cmVhTWFwLCBbXShhdXRvJiBlbnRyeSkgLT4gc3RkOjpvcHRpb25hbDxTZWN1cml0eU9yaWdpbkRh
dGE+IHsKKyAgICAgICAgaWYgKGVudHJ5LnZhbHVlLT5pdGVtcygpLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBlbnRyeS52YWx1ZS0+
c2VjdXJpdHlPcmlnaW4oKTsKKyAgICB9KTsKIH0KIAogdm9pZCBUcmFuc2llbnRMb2NhbFN0b3Jh
Z2VOYW1lc3BhY2U6OmNsZWFyU3RvcmFnZUFyZWFzTWF0Y2hpbmdPcmlnaW4oY29uc3QgU2VjdXJp
dHlPcmlnaW5EYXRhJiBzZWN1cml0eU9yaWdpbikKQEAgLTgyLDEwICs3OSw5IEBAIHZvaWQgVHJh
bnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpjbGVhckFsbFN0b3JhZ2VBcmVhcygpCiAKIFZl
Y3RvcjxTdG9yYWdlQXJlYUlkZW50aWZpZXI+IFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFj
ZTo6c3RvcmFnZUFyZWFJZGVudGlmaWVycygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFN0b3JhZ2VB
cmVhSWRlbnRpZmllcj4gaWRlbnRpZmllcnM7Ci0gICAgZm9yIChhdXRvJiBzdG9yYWdlQXJlYSA6
IG1fc3RvcmFnZUFyZWFNYXAudmFsdWVzKCkpCi0gICAgICAgIGlkZW50aWZpZXJzLmFwcGVuZChz
dG9yYWdlQXJlYS0+aWRlbnRpZmllcigpKTsKLSAgICByZXR1cm4gaWRlbnRpZmllcnM7CisgICAg
cmV0dXJuIFdURjo6bWFwKG1fc3RvcmFnZUFyZWFNYXAsIFtdKGF1dG8mIGVudHJ5KSB7CisgICAg
ICAgIHJldHVybiBlbnRyeS52YWx1ZS0+aWRlbnRpZmllcigpOworICAgIH0pOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3Mvc3RvcmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEuY3BwCmluZGV4IDQwOWEzMzg4YTBiOGVj
ZjlhYjcxMDQ5YjcyOWZkZTM5MjdjNDhlYjUuLjNkYjcxYzBkMjgzY2Q2OTdmNTUyYjg1NTdkMGE2
N2JhOGIyZTljMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3Rv
cmFnZS9TUUxpdGVTdG9yYWdlQXJlYS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9zdG9yYWdlL1NRTGl0ZVN0b3JhZ2VBcmVhLmNwcApAQCAtNjYsMTEgKzY2LDkgQEAgU1FM
aXRlU3RvcmFnZUFyZWE6OlNRTGl0ZVN0b3JhZ2VBcmVhKHVuc2lnbmVkIHF1b3RhLCBjb25zdCBX
ZWJDb3JlOjpDbGllbnRPcmlnaW4KICAgICA6IFN0b3JhZ2VBcmVhQmFzZShxdW90YSwgb3JpZ2lu
KQogICAgICwgbV9wYXRoKHBhdGgpCiAgICAgLCBtX3F1ZXVlKFdURk1vdmUod29ya1F1ZXVlKSkK
KyAgICAsIG1fY2FjaGVkU3RhdGVtZW50cyhzdGF0aWNfY2FzdDxzaXplX3Q+KFN0YXRlbWVudFR5
cGU6OkludmFsaWQpKQogewotICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsKLQotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihTdGF0ZW1lbnRUeXBlOjpJ
bnZhbGlkKTsgKytpKQotICAgICAgICBtX2NhY2hlZFN0YXRlbWVudHMuYXBwZW5kKG51bGxwdHIp
OworICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsgIAogfQogCiB2b2lkIFNRTGl0ZVN0b3Jh
Z2VBcmVhOjpjbG9zZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BcHBsZVBh
eS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9B
cHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS5jcHAKaW5kZXggMDRhNjk2ODE3OGE2
Zjc1OTRjMjgwZWY3MzE4MTk4Y2I2MzJiOTIzMC4uYmNjYzA1NTA3NzE3Nzk3NjY4ZjljOWRjZjEw
MzEwOTExMWI5OGFlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQXBwbGVQYXkv
V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5LmNwcApAQCAtOTMsOSArOTMsOSBA
QCB2b2lkIFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpzaG93UGF5bWVudFVJKFdlYkNvcmU6
OlBhZ2VJZGVudGlmaWVyIGRlc3RpbmF0aQogCiAgICAgVVJMIG9yaWdpbmF0aW5nVVJMKFVSTCgp
LCBvcmlnaW5hdGluZ1VSTFN0cmluZyk7CiAKLSAgICBWZWN0b3I8VVJMPiBsaW5rSWNvblVSTHM7
Ci0gICAgZm9yIChjb25zdCBhdXRvJiBsaW5rSWNvblVSTFN0cmluZyA6IGxpbmtJY29uVVJMU3Ry
aW5ncykKLSAgICAgICAgbGlua0ljb25VUkxzLmFwcGVuZChVUkwoVVJMKCksIGxpbmtJY29uVVJM
U3RyaW5nKSk7CisgICAgYXV0byBsaW5rSWNvblVSTHMgPSBsaW5rSWNvblVSTFN0cmluZ3MubWFw
KFtdKGF1dG8mIGxpbmtJY29uVVJMU3RyaW5nKSB7CisgICAgICAgIHJldHVybiBVUkwoVVJMKCks
IGxpbmtJY29uVVJMU3RyaW5nKTsKKyAgICB9KTsKIAogICAgIHBsYXRmb3JtU2hvd1BheW1lbnRV
SSh3ZWJQYWdlUHJveHlJRCwgb3JpZ2luYXRpbmdVUkwsIGxpbmtJY29uVVJMcywgcGF5bWVudFJl
cXVlc3QsIFt0aGlzLCB3ZWFrVGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9XShib29sIHJlc3VsdCkg
ewogICAgICAgICBpZiAoIXdlYWtUaGlzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSU5hdmlnYXRpb24uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0FQSU5hdmlnYXRpb24uY3BwCmluZGV4IDg4NDY2YzQ5ZWQwZGUxOGUyMDMyY2FhMGEwNDY0ODM5
ZWE3NDUxMDEuLjRhODg5MDM5ZTk0YTYyZmE1OTJmMTk1N2Y3NmQ4NTllNzljOWZjNmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbi5jcHAKQEAgLTYyLDEw
ICs2MiwxMCBAQCBOYXZpZ2F0aW9uOjpOYXZpZ2F0aW9uKFdlYk5hdmlnYXRpb25TdGF0ZSYgc3Rh
dGUsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJlcQogICAgIDogbV9uYXZpZ2F0aW9uSUQo
c3RhdGUuZ2VuZXJhdGVOYXZpZ2F0aW9uSUQoKSkKICAgICAsIG1fb3JpZ2luYWxSZXF1ZXN0KFdU
Rk1vdmUocmVxdWVzdCkpCiAgICAgLCBtX2N1cnJlbnRSZXF1ZXN0KG1fb3JpZ2luYWxSZXF1ZXN0
KQorICAgICwgbV9yZWRpcmVjdENoYWluIHsgbV9vcmlnaW5hbFJlcXVlc3QudXJsKCkgfQogICAg
ICwgbV9mcm9tSXRlbShmcm9tSXRlbSkKICAgICAsIG1fY2xpZW50TmF2aWdhdGlvbkFjdGl2aXR5
KG5hdmlnYXRpb25BY3Rpdml0eVRpbWVvdXQpCiB7Ci0gICAgbV9yZWRpcmVjdENoYWluLmFwcGVu
ZChtX29yaWdpbmFsUmVxdWVzdC51cmwoKSk7CiB9CiAKIE5hdmlnYXRpb246Ok5hdmlnYXRpb24o
V2ViTmF2aWdhdGlvblN0YXRlJiBzdGF0ZSwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgdGFyZ2V0
SXRlbSwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogZnJvbUl0ZW0sIEZyYW1lTG9hZFR5cGUgYmFj
a0ZvcndhcmRGcmFtZUxvYWRUeXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvV0tTaGFyZVNoZWV0Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
V0tTaGFyZVNoZWV0Lm1tCmluZGV4IDU1NGFiODA2NDI3ZWNiOWNlODMwYWNhOTdmYzdkZGNkYzk4
NTNlMTUuLmUzODhhM2MzN2QwZjY5NjVkNzY5MWYyN2IxNzgwYTkxM2YwNGVlMjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2hhcmVTaGVldC5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NoYXJlU2hlZXQubW0KQEAgLTEwMCw5ICsx
MDAsOSBAQCBzdGF0aWMgdm9pZCBhcHBlbmRGaWxlc0FzU2hhcmVhYmxlVVJMcyhSZXRhaW5QdHI8
TlNNdXRhYmxlQXJyYXk+JiYgc2hhcmVEYXRhQXJyYQogICAgICAgICBTdHJpbmcgZmlsZU5hbWU7
CiAgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGZpbGVEYXRhOwogICAgIH07Ci0gICAgVmVjdG9y
PEZpbGVXcml0ZVRhc2s+IGZpbGVXcml0ZVRhc2tzOwotICAgIGZvciAoYXV0byYgZmlsZSA6IGZp
bGVzKQotICAgICAgICBmaWxlV3JpdGVUYXNrcy5hcHBlbmQoeyBmaWxlLmZpbGVOYW1lLmlzb2xh
dGVkQ29weSgpLCBmaWxlLmZpbGVEYXRhLT5jcmVhdGVOU0RhdGEoKSB9KTsKKyAgICBhdXRvIGZp
bGVXcml0ZVRhc2tzID0gZmlsZXMubWFwKFtdKGF1dG8mIGZpbGUpIHsKKyAgICAgICAgcmV0dXJu
IEZpbGVXcml0ZVRhc2sgeyBmaWxlLmZpbGVOYW1lLmlzb2xhdGVkQ29weSgpLCBmaWxlLmZpbGVE
YXRhLT5jcmVhdGVOU0RhdGEoKSB9OworICAgIH0pOwogCiAgICAgYXV0byBxdWV1ZSA9IFdvcmtR
dWV1ZTo6Y3JlYXRlKCJjb20uYXBwbGUuV2ViS2l0LldLU2hhcmVTaGVldC5TaGFyZWFibGVGaWxl
V3JpdGVyIik7CiAgICAgcXVldWUtPmRpc3BhdGNoKFtzaGFyZURhdGFBcnJheSA9IFdURk1vdmUo
c2hhcmVEYXRhQXJyYXkpLCBmaWxlV3JpdGVUYXNrcyA9IFdURk1vdmUoZmlsZVdyaXRlVGFza3Mp
LCB0ZW1wb3JhcnlEaXJlY3RvcnkgPSByZXRhaW5QdHIodGVtcG9yYXJ5RGlyZWN0b3J5KSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNv
Y29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2Eu
bW0KaW5kZXggZjFjMzcwNmIwOWZmOWUxMjgyMWQ3ZGEzYTIyNWI3MGJhNDZkY2UzNi4uNTZhMTRk
OGJmMzZlZDQ0ZGFkYmYxZTRjNDg0MGE1ZTA2NDE0YjhlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUGFnZVByb3h5Q29jb2EubW0KQEAgLTY2NiwxNCArNjY2
LDEyIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZXN0b3JlQXBwSGlnaGxpZ2h0c0FuZFNjcm9sbFRv
SW5kZXgoY29uc3QgVmVjdG9yPFJlZjxTaGFyZWRNCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2Vz
cygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8U2hhcmVkTWVtb3J5OjpJUENIYW5k
bGU+IG1lbW9yeUhhbmRsZXM7Ci0KLSAgICBmb3IgKGF1dG8gaGlnaGxpZ2h0IDogaGlnaGxpZ2h0
cykgeworICAgIGF1dG8gbWVtb3J5SGFuZGxlcyA9IFdURjo6Y29tcGFjdE1hcChoaWdobGlnaHRz
LCBbXShhdXRvJiBoaWdobGlnaHQpIC0+IHN0ZDo6b3B0aW9uYWw8U2hhcmVkTWVtb3J5OjpJUENI
YW5kbGU+IHsKICAgICAgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwotICAgICAgICBo
aWdobGlnaHQtPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6
UmVhZE9ubHkpOwotCi0gICAgICAgIG1lbW9yeUhhbmRsZXMuYXBwZW5kKFNoYXJlZE1lbW9yeTo6
SVBDSGFuZGxlIHsgV1RGTW92ZShoYW5kbGUpLCBoaWdobGlnaHQtPnNpemUoKSB9KTsKLSAgICB9
CisgICAgICAgIGlmICghaGlnaGxpZ2h0LT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1v
cnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgICAgIHJldHVybiBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSB7IFdURk1vdmUoaGFu
ZGxlKSwgaGlnaGxpZ2h0LT5zaXplKCkgfTsKKyAgICB9KTsKICAgICAKICAgICBzZXRVcEhpZ2hs
aWdodHNPYnNlcnZlcigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9G
cmFtZUxvYWRTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9GcmFtZUxvYWRTdGF0
ZS5jcHAKaW5kZXggYzYxYmVkODFkMDkyODQ2MzJiZjI5NjVlZDJjOTliMGM2ZmU0MDFhMy4uNjll
NTNkN2JlYjg2Y2U2YjQwNmYzY2RiODM5MmFiNzJhM2ZmYzgyNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0ZyYW1lTG9hZFN0YXRlLmNwcApAQCAtOTAsMTEgKzkwLDggQEAgdm9pZCBGcmFt
ZUxvYWRTdGF0ZTo6ZGlkRmluaXNoTG9hZCgpCiAKICAgICBtX3N0YXRlID0gU3RhdGU6OkZpbmlz
aGVkOwogCi0gICAgVmVjdG9yPE9ic2VydmVyKj4gb2JzZXJ2ZXJzQ29weTsKLSAgICBmb3IgKGF1
dG8mIG9ic2VydmVyIDogbV9vYnNlcnZlcnMpCi0gICAgICAgIG9ic2VydmVyc0NvcHkuYXBwZW5k
KCZvYnNlcnZlcik7Ci0gICAgZm9yIChhdXRvKiBvYnNlcnZlciA6IG9ic2VydmVyc0NvcHkpCi0g
ICAgICAgIG9ic2VydmVyLT5kaWRGaW5pc2hMb2FkKCk7CisgICAgZm9yIChhdXRvJiBvYnNlcnZl
ciA6IGNvcHlUb1ZlY3Rvck9mPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8T2JzZXJ2ZXI+PihtX29i
c2VydmVycykpCisgICAgICAgIG9ic2VydmVyLmdldCgpLmRpZEZpbmlzaExvYWQoKTsKIH0KIAog
dm9pZCBGcmFtZUxvYWRTdGF0ZTo6ZGlkRmFpbExvYWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5kZXggMzc0
MDgxOTNiMGI3NjgyM2MwNDU4MWI0YjRlOTA2ZGQ0NDA5YTdhYi4uZTM4MDE2ZjFkZWI3MzczMmQ1
YTg1ZGMxZDQ2ZDEzZGYzNWE2OTFlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBAIC0xODQsOCArMTg0LDgg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQ
cm9jZXNzKCkKICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNMb2NhbCA9IGNv
cHlUb1ZlY3RvcihMZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVn
aXN0ZXJBc0xvY2FsKCkpOwogICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05v
QWNjZXNzID0gY29weVRvVmVjdG9yKExlZ2FjeUdsb2JhbFNldHRpbmdzOjpzaW5nbGV0b24oKS5z
Y2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3MoKSk7CiAgICAgcGFyYW1ldGVycy5jYWNoZU1vZGVs
ID0gTGVnYWN5R2xvYmFsU2V0dGluZ3M6OnNpbmdsZXRvbigpLmNhY2hlTW9kZWwoKTsKLSAgICBm
b3IgKGF1dG8mIHNjaGVtZSA6IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVBy
b3RvY29sSGFuZGxlcnMoKSkKLSAgICAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJl
ZEZvckN1c3RvbVByb3RvY29scy5hcHBlbmQoc2NoZW1lKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNj
aGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzID0gV2ViUHJvY2Vzc1Bvb2w6OnVybFNj
aGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpOworCiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICBpZiAoU3RyaW5nIGNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBXZWJQcm9jZXNz
UG9vbDo6Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOyAhY29va2llU3RvcmFnZURpcmVjdG9yeS5p
c0VtcHR5KCkpIHsKICAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0gU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnkp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNl
ckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCmluZGV4IGZhMjU0YzJk
YWRjMDYzMDI4ZGZkNTA0ZDI4OTBhODkyYWVkYWZiMDguLjViYmU3Mzk2MjA1MjdhODI3Y2Q1N2Yx
NjlhZjJmMGMwYzU5NmE3MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Vz
ZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94
eS5jcHAKQEAgLTExNywxMSArMTE3LDExIEBAIFVzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRl
cnMgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnBhcmFtZXRlcnMoKSBjb25zCiAgICAg
cGFyYW1ldGVycy5pZGVudGlmaWVyID0gaWRlbnRpZmllcigpOwogICAgIAogICAgIEFTU0VSVChw
YXJhbWV0ZXJzLnVzZXJDb250ZW50V29ybGRzLmlzRW1wdHkoKSk7Ci0gICAgZm9yIChjb25zdCBh
dXRvJiBpZGVudGlmaWVyIDogbV9hc3NvY2lhdGVkQ29udGVudFdvcmxkcykgeworICAgIHBhcmFt
ZXRlcnMudXNlckNvbnRlbnRXb3JsZHMgPSBXVEY6Om1hcChtX2Fzc29jaWF0ZWRDb250ZW50V29y
bGRzLCBbXShhdXRvJiBpZGVudGlmaWVyKSB7CiAgICAgICAgIGF1dG8qIHdvcmxkID0gQVBJOjpD
b250ZW50V29ybGQ6OndvcmxkRm9ySWRlbnRpZmllcihpZGVudGlmaWVyKTsKICAgICAgICAgUkVM
RUFTRV9BU1NFUlQod29ybGQpOwotICAgICAgICBwYXJhbWV0ZXJzLnVzZXJDb250ZW50V29ybGRz
LmFwcGVuZCh3b3JsZC0+d29ybGREYXRhKCkpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIHdvcmxk
LT53b3JsZERhdGEoKTsKKyAgICB9KTsKIAogICAgIGZvciAoYXV0byB1c2VyU2NyaXB0IDogbV91
c2VyU2NyaXB0cy0+ZWxlbWVudHNPZlR5cGU8QVBJOjpVc2VyU2NyaXB0PigpKQogICAgICAgICBw
YXJhbWV0ZXJzLnVzZXJTY3JpcHRzLmFwcGVuZCh7IHVzZXJTY3JpcHQtPmlkZW50aWZpZXIoKSwg
dXNlclNjcmlwdC0+Y29udGVudFdvcmxkKCkuaWRlbnRpZmllcigpLCB1c2VyU2NyaXB0LT51c2Vy
U2NyaXB0KCkgfSk7CkBAIC0xMjksOCArMTI5LDkgQEAgVXNlckNvbnRlbnRDb250cm9sbGVyUGFy
YW1ldGVycyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cGFyYW1ldGVycygpIGNvbnMK
ICAgICBmb3IgKGF1dG8gdXNlclN0eWxlU2hlZXQgOiBtX3VzZXJTdHlsZVNoZWV0cy0+ZWxlbWVu
dHNPZlR5cGU8QVBJOjpVc2VyU3R5bGVTaGVldD4oKSkKICAgICAgICAgcGFyYW1ldGVycy51c2Vy
U3R5bGVTaGVldHMuYXBwZW5kKHsgdXNlclN0eWxlU2hlZXQtPmlkZW50aWZpZXIoKSwgdXNlclN0
eWxlU2hlZXQtPmNvbnRlbnRXb3JsZCgpLmlkZW50aWZpZXIoKSwgdXNlclN0eWxlU2hlZXQtPnVz
ZXJTdHlsZVNoZWV0KCkgfSk7CiAKLSAgICBmb3IgKGF1dG8mIGhhbmRsZXIgOiBtX3NjcmlwdE1l
c3NhZ2VIYW5kbGVycy52YWx1ZXMoKSkKLSAgICAgICAgcGFyYW1ldGVycy5tZXNzYWdlSGFuZGxl
cnMuYXBwZW5kKHsgaGFuZGxlci0+aWRlbnRpZmllcigpLCBoYW5kbGVyLT53b3JsZCgpLmlkZW50
aWZpZXIoKSwgaGFuZGxlci0+bmFtZSgpIH0pOworICAgIHBhcmFtZXRlcnMubWVzc2FnZUhhbmRs
ZXJzID0gV1RGOjptYXAobV9zY3JpcHRNZXNzYWdlSGFuZGxlcnMsIFtdKGF1dG8gZW50cnkpIHsK
KyAgICAgICAgcmV0dXJuIFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyRGF0YSB7IGVudHJ5LnZhbHVl
LT5pZGVudGlmaWVyKCksIGVudHJ5LnZhbHVlLT53b3JsZCgpLmlkZW50aWZpZXIoKSwgZW50cnku
dmFsdWUtPm5hbWUoKSB9OworICAgIH0pOwogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykKICAgICBwYXJhbWV0ZXJzLmNvbnRlbnRSdWxlTGlzdHMgPSBjb250ZW50UnVsZUxpc3REYXRh
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlv
bi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJB
dXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHAKaW5kZXggOTM0ODBlZDVjYjM5
YTYxY2JjZjY3MzUxZTBhODgwZWEwOWZlNDQ3Ni4uNjU3MmY1Mzk1OThlZjQxZGQxMDMwNWFjZWVj
OGYxODdkOGQ1MjUyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0
aGVudGljYXRpb24vQXV0aGVudGljYXRvck1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0b3JNYW5hZ2VyLmNwcApAQCAt
NDE2LDExICs0MTYsMTEgQEAgdm9pZCBBdXRoZW50aWNhdG9yTWFuYWdlcjo6c3RhcnREaXNjb3Zl
cnkoY29uc3QgVHJhbnNwb3J0U2V0JiB0cmFuc3BvcnRzKQogewogICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7CiAgICAgQVNTRVJUKG1fc2VydmljZXMuaXNFbXB0eSgpICYmIHRyYW5zcG9y
dHMuc2l6ZSgpIDw9IG1heFRyYW5zcG9ydE51bWJlcik7Ci0gICAgZm9yIChhdXRvJiB0cmFuc3Bv
cnQgOiB0cmFuc3BvcnRzKSB7CisgICAgbV9zZXJ2aWNlcyA9IFdURjo6bWFwKHRyYW5zcG9ydHMs
IFt0aGlzXShhdXRvJiB0cmFuc3BvcnQpIHsKICAgICAgICAgYXV0byBzZXJ2aWNlID0gY3JlYXRl
U2VydmljZSh0cmFuc3BvcnQsICp0aGlzKTsKICAgICAgICAgc2VydmljZS0+c3RhcnREaXNjb3Zl
cnkoKTsKLSAgICAgICAgbV9zZXJ2aWNlcy5hcHBlbmQoV1RGTW92ZShzZXJ2aWNlKSk7Ci0gICAg
fQorICAgICAgICByZXR1cm4gc2VydmljZTsKKyAgICB9KTsKIH0KIAogdm9pZCBBdXRoZW50aWNh
dG9yTWFuYWdlcjo6aW5pdFRpbWVPdXRUaW1lcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViQmFja0ZvcndhcmRMaXN0LmNwcAppbmRleCBjNzQzNDNlNjViODg5Zjc4NjlkYzhjY2Ez
NDA1MWI4YjI2NTQwMmI2Li5kZWM5ZTgzOTIyMzY4ZmU2MTU1ZTAzZDY5YTNmMzdkOWRiZjAxNzc4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAK
QEAgLTM0MCwxNiArMzQwLDExIEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0OjpyZW1vdmVBbGxJ
dGVtcygpCiAKICAgICBMT0coQmFja0ZvcndhcmQsICIoQmFjay9Gb3J3YXJkKSBXZWJCYWNrRm9y
d2FyZExpc3QgJXAgcmVtb3ZlQWxsSXRlbXMgKGhhcyAlenUgb2YgdGhlbSkiLCB0aGlzLCBtX2Vu
dHJpZXMuc2l6ZSgpKTsKIAotICAgIFZlY3RvcjxSZWY8V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4+
IHJlbW92ZWRJdGVtczsKLQotICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2VudHJpZXMpIHsKKyAg
ICBmb3IgKGF1dG8mIGVudHJ5IDogbV9lbnRyaWVzKQogICAgICAgICBkaWRSZW1vdmVJdGVtKGVu
dHJ5KTsKLSAgICAgICAgcmVtb3ZlZEl0ZW1zLmFwcGVuZChXVEZNb3ZlKGVudHJ5KSk7Ci0gICAg
fQogCi0gICAgbV9lbnRyaWVzLmNsZWFyKCk7CiAgICAgbV9jdXJyZW50SW5kZXggPSBzdGQ6Om51
bGxvcHQ7Ci0gICAgbV9wYWdlLT5kaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QobnVsbHB0ciwgV1RG
TW92ZShyZW1vdmVkSXRlbXMpKTsKKyAgICBtX3BhZ2UtPmRpZENoYW5nZUJhY2tGb3J3YXJkTGlz
dChudWxscHRyLCBzdGQ6OmV4Y2hhbmdlKG1fZW50cmllcywgeyB9KSk7CiB9CiAKIHZvaWQgV2Vi
QmFja0ZvcndhcmRMaXN0OjpjbGVhcigpCkBAIC0zNjMsMjEgKzM1OCwxNyBAQCB2b2lkIFdlYkJh
Y2tGb3J3YXJkTGlzdDo6Y2xlYXIoKQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8V2Vi
QmFja0ZvcndhcmRMaXN0SXRlbT4gY3VycmVudEl0ZW0gPSB0aGlzLT5jdXJyZW50SXRlbSgpOwot
ICAgIFZlY3RvcjxSZWY8V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4+IHJlbW92ZWRJdGVtczsKIAog
ICAgIGlmICghY3VycmVudEl0ZW0pIHsKICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgZXZlciBo
YXZlIG5vIGN1cnJlbnQgaXRlbSBpZiB3ZSBhbHNvIGhhdmUgbm8gY3VycmVudCBpdGVtIGluZGV4
LgogICAgICAgICBBU1NFUlQoIW1fY3VycmVudEluZGV4KTsKIAogICAgICAgICAvLyBCdXQganVz
dCBpbiBjYXNlIGl0IGRvZXMgaGFwcGVuIGluIHByYWN0aWNlIHdlIHNob3VsZCBnZXQgYmFjayBp
bnRvIGEgY29uc2lzdGVudCBzdGF0ZSBub3cuCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBkaWRSZW1vdmVJdGVtKG1fZW50cmllc1tpXSk7
Ci0gICAgICAgICAgICByZW1vdmVkSXRlbXMuYXBwZW5kKFdURk1vdmUobV9lbnRyaWVzW2ldKSk7
Ci0gICAgICAgIH0KKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fZW50cmllcykKKyAgICAg
ICAgICAgIGRpZFJlbW92ZUl0ZW0oZW50cnkpOwogCi0gICAgICAgIG1fZW50cmllcy5jbGVhcigp
OwogICAgICAgICBtX2N1cnJlbnRJbmRleCA9IHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgbV9wYWdl
LT5kaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QobnVsbHB0ciwgV1RGTW92ZShyZW1vdmVkSXRlbXMp
KTsKKyAgICAgICAgbV9wYWdlLT5kaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QobnVsbHB0ciwgc3Rk
OjpleGNoYW5nZShtX2VudHJpZXMsIHsgfSkpOwogCiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC0zODcsNiArMzc4LDcgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3Q6OmNsZWFyKCkKICAgICAg
ICAgICAgIGRpZFJlbW92ZUl0ZW0obV9lbnRyaWVzW2ldKTsKICAgICB9CiAKKyAgICBWZWN0b3I8
UmVmPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiByZW1vdmVkSXRlbXM7CiAgICAgcmVtb3ZlZEl0
ZW1zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSAtIDEpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCAmJiBpICE9
ICptX2N1cnJlbnRJbmRleCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29s
LmNwcAppbmRleCBmYTE3NDJjZjMyZGE5OTUyNzMyM2RmYzdjOGJmMGE3OTA2MzA0MWZlLi42MWJk
MzBhMzY0MTQ3M2M1ZGIyYzU3NDMwZTkzY2I3ZTI2NjNhZDg5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCkBAIC04NDksMTAgKzg0OSw5IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSYgcHJv
Y2VzcywgV2Vic2l0ZURhCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmluamVjdGVkQnVuZGxlUGF0
aEV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmhhbmRsZSk7CiAgICAgfQogCi0gICAgZm9yIChh
dXRvJiBwYXRoIDogbV9yZXNvbHZlZFBhdGhzLmFkZGl0aW9uYWxXZWJQcm9jZXNzU2FuZGJveEV4
dGVuc2lvblBhdGhzKSB7Ci0gICAgICAgIGlmIChhdXRvIGhhbmRsZSA9ICBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGVIYW5kbGVXaXRob3V0UmVzb2x2aW5nUGF0aChwYXRoLCBTYW5kYm94RXh0ZW5z
aW9uOjpUeXBlOjpSZWFkT25seSkpCi0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFkZGl0aW9uYWxT
YW5kYm94RXh0ZW5zaW9uSGFuZGxlcy5hcHBlbmQoV1RGTW92ZSgqaGFuZGxlKSk7Ci0gICAgfQor
ICAgIHBhcmFtZXRlcnMuYWRkaXRpb25hbFNhbmRib3hFeHRlbnNpb25IYW5kbGVzID0gV1RGOjpj
b21wYWN0TWFwKG1fcmVzb2x2ZWRQYXRocy5hZGRpdGlvbmFsV2ViUHJvY2Vzc1NhbmRib3hFeHRl
bnNpb25QYXRocywgW10oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlSGFuZGxlV2l0aG91dFJlc29sdmluZ1BhdGgocGF0aCwgU2FuZGJveEV4dGVu
c2lvbjo6VHlwZTo6UmVhZE9ubHkpOworICAgIH0pOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKICAgICBzZXRKYXZhU2NyaXB0Q29uZmlndXJhdGlvbkZpbGVFbmFibGVkRnJvbURlZmF1bHRz
KCk7CkBAIC0xODcwLDE0ICsxODY5LDkgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVtb3ZlUHJv
Y2Vzc0Zyb21PcmlnaW5DYWNoZVNldChXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCiAgICAgTE9H
KFByb2Nlc3NTd2FwcGluZywgIihQcm9jZXNzU3dhcHBpbmcpIFJlbW92aW5nIHByb2Nlc3Mgd2l0
aCBwaWQgJWkgZnJvbSB0aGUgb3JpZ2luIGNhY2hlIHNldCIsIHByb2Nlc3MucHJvY2Vzc0lkZW50
aWZpZXIoKSk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgdmVyeSBpbmVmZmljaWVudCBh
cyB0aGUgbnVtYmVyIG9mIHJlbWVtYmVyZWQgb3JpZ2lucyBhbmQgcHJvY2Vzc2VzIGdyb3dzCi0g
ICAgVmVjdG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiByZWdpc3RyYWJsZURvbWFpbnNU
b1JlbW92ZTsKLSAgICBmb3IgKGF1dG8gZW50cnkgOiBtX3N3YXBwZWRQcm9jZXNzZXNQZXJSZWdp
c3RyYWJsZURvbWFpbikgewotICAgICAgICBpZiAoZW50cnkudmFsdWUgPT0gJnByb2Nlc3MpCi0g
ICAgICAgICAgICByZWdpc3RyYWJsZURvbWFpbnNUb1JlbW92ZS5hcHBlbmQoZW50cnkua2V5KTsK
LSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIHJlZ2lzdHJhYmxlRG9tYWluIDogcmVnaXN0cmFibGVE
b21haW5zVG9SZW1vdmUpCi0gICAgICAgIG1fc3dhcHBlZFByb2Nlc3Nlc1BlclJlZ2lzdHJhYmxl
RG9tYWluLnJlbW92ZShyZWdpc3RyYWJsZURvbWFpbik7CisgICAgbV9zd2FwcGVkUHJvY2Vzc2Vz
UGVyUmVnaXN0cmFibGVEb21haW4ucmVtb3ZlSWYoWyZdKGF1dG8mIGVudHJ5KSB7CisgICAgICAg
IHJldHVybiBlbnRyeS52YWx1ZSA9PSAmcHJvY2VzczsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6cHJvY2Vzc0Zvck5hdmlnYXRpb24oV2ViUGFnZVByb3h5JiBwYWdlLCBjb25z
dCBBUEk6Ok5hdmlnYXRpb24mIG5hdmlnYXRpb24sIFJlZjxXZWJQcm9jZXNzUHJveHk+JiYgc291
cmNlUHJvY2VzcywgY29uc3QgVVJMJiBzb3VyY2VVUkwsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlD
bGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgV2ViUHJvY2Vzc1Byb3h5OjpDYXB0
aXZlUG9ydGFsTW9kZSBjYXB0aXZlUG9ydGFsTW9kZSwgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJh
bWVJbmZvLCBSZWY8V2Vic2l0ZURhdGFTdG9yZT4mJiBkYXRhU3RvcmUsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoUmVmPFdlYlByb2Nlc3NQcm94eT4mJiwgU3VzcGVuZGVkUGFnZVByb3h5KiwgY29u
c3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAppbmRleCBiMTI4NjBkZjUxMGJjNGUzZGZiYjdlM2ZjOTIw
YjVkMDQyYjg0MzIxLi4zNjhhMzk1ODdkYTMzZGU2NGMxYjg5ZDBlNjM4ZDM4Yjg4ZDdhMTdiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKQEAgLTkzNiw4
ICs5MzYsOSBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6cHJvY2Vzc0RpZFRlcm1pbmF0ZU9yRmFp
bGVkVG9MYXVuY2goUHJvY2Vzc1Rlcm1pbmF0aW9uUmVhcwogCiAgICAgLy8gVGhlcmUgaXMgYSBu
ZXN0ZWQgdHJhbnNhY3Rpb24gaW4gV2ViUGFnZVByb3h5OjpyZXNldFN0YXRlQWZ0ZXJQcm9jZXNz
RXhpdGVkKCkgdGhhdCB3ZSBkb24ndCB3YW50IHRvIGNvbW1pdCBiZWZvcmUgdGhlIGNsaWVudCBj
YWxsIGJlbG93IChkaXNwYXRjaFByb2Nlc3NEaWRUZXJtaW5hdGUpLgogICAgIFZlY3RvcjxQYWdl
TG9hZFN0YXRlOjpUcmFuc2FjdGlvbj4gcGFnZUxvYWRTdGF0ZVRyYW5zYWN0aW9uczsKKyAgICBw
YWdlTG9hZFN0YXRlVHJhbnNhY3Rpb25zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGFnZXMuc2l6
ZSgpKTsKICAgICBmb3IgKGF1dG8mIHBhZ2UgOiBwYWdlcykgewotICAgICAgICBwYWdlTG9hZFN0
YXRlVHJhbnNhY3Rpb25zLmFwcGVuZChwYWdlLT5wYWdlTG9hZFN0YXRlKCkudHJhbnNhY3Rpb24o
KSk7CisgICAgICAgIHBhZ2VMb2FkU3RhdGVUcmFuc2FjdGlvbnMudW5jaGVja2VkQXBwZW5kKHBh
Z2UtPnBhZ2VMb2FkU3RhdGUoKS50cmFuc2FjdGlvbigpKTsKICAgICAgICAgcGFnZS0+cmVzZXRT
dGF0ZUFmdGVyUHJvY2Vzc1Rlcm1pbmF0aW9uKHJlYXNvbik7CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUu
Y3BwCmluZGV4IGIzNmQ5YTc0YjlhMTc1YTA4MTZiN2EyZTE0ZjEzOWRiNWVmNTZlNmQuLjVlZTE1
YzVlZmRhNmY0OTM5MjRkZDM3ZDJhMDBjMjEwMTI1OTNhYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBA
IC00MzEsOCArNDMxLDEwIEBAIHByaXZhdGU6CiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhX
ZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSkpIHsKICAgICAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2go
W21lZGlhQ2FjaGVEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24tPm1lZGlhQ2FjaGVEaXJlY3Rv
cnkoKS5pc29sYXRlZENvcHkoKSwgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7CiAgICAgICAgICAgICBX
ZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgb3JpZ2luIDog
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6b3JpZ2luc0luTWVkaWFDYWNoZShtZWRpYUNhY2hl
RGlyZWN0b3J5KSkKLSAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZChX
ZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlLCAw
IH0pOworICAgICAgICAgICAgYXV0byBvcmlnaW5zID0gV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dDo6b3JpZ2luc0luTWVkaWFDYWNoZShtZWRpYUNhY2hlRGlyZWN0b3J5KTsKKyAgICAgICAgICAg
IHdlYnNpdGVEYXRhLmVudHJpZXMgPSBXVEY6Om1hcChvcmlnaW5zLCBbXShhdXRvJiBvcmlnaW4p
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLCBX
ZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSwgMCB9OworICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFdlYnNpdGVEYXRhKFdURk1vdmUod2Vic2l0ZURh
dGEpKTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtNDY5LDggKzQ3MSw5IEBAIHByaXZhdGU6CiAg
ICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkRldmljZUlkSGFzaFNh
bHQpKSB7CiAgICAgICAgIG1fZGV2aWNlSWRIYXNoU2FsdFN0b3JhZ2UtPmdldERldmljZUlkSGFz
aFNhbHRPcmlnaW5zKFtjYWxsYmFja0FnZ3JlZ2F0b3JdKGF1dG8mJiBvcmlnaW5zKSB7CiAgICAg
ICAgICAgICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsKLSAgICAgICAgICAgIHdoaWxlICghb3Jp
Z2lucy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcy5hcHBl
bmQoV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2lucy50YWtlQW55KCksIFdlYnNpdGVEYXRhVHlw
ZTo6RGV2aWNlSWRIYXNoU2FsdCwgMCB9KTsKKyAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJp
ZXMgPSBXVEY6Om1hcChvcmlnaW5zLCBbXShhdXRvJiBvcmlnaW4pIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6OkRl
dmljZUlkSGFzaFNhbHQsIDAgfTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgY2FsbGJh
Y2tBZ2dyZWdhdG9yLT5hZGRXZWJzaXRlRGF0YShXVEZNb3ZlKHdlYnNpdGVEYXRhKSk7CiAgICAg
ICAgIH0pOwogICAgIH0KQEAgLTQ3OSwxMCArNDgyLDExIEBAIHByaXZhdGU6CiAgICAgICAgIG1f
cXVldWUtPmRpc3BhdGNoKFtmZXRjaE9wdGlvbnMsIGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3Rvcnkg
PSBtX2NvbmZpZ3VyYXRpb24tPmFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkoKS5pc29sYXRlZENv
cHkoKSwgYXBwbGljYXRpb25DYWNoZUZsYXRGaWxlU3ViZGlyZWN0b3J5TmFtZSA9IG1fY29uZmln
dXJhdGlvbi0+YXBwbGljYXRpb25DYWNoZUZsYXRGaWxlU3ViZGlyZWN0b3J5TmFtZSgpLmlzb2xh
dGVkQ29weSgpLCBjYWxsYmFja0FnZ3JlZ2F0b3JdIHsKICAgICAgICAgICAgIGF1dG8gc3RvcmFn
ZSA9IFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpjcmVhdGUoYXBwbGljYXRpb25D
YWNoZURpcmVjdG9yeSwgYXBwbGljYXRpb25DYWNoZUZsYXRGaWxlU3ViZGlyZWN0b3J5TmFtZSk7
CiAgICAgICAgICAgICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsKLSAgICAgICAgICAgIGZvciAo
YXV0byYgb3JpZ2luIDogc3RvcmFnZS0+b3JpZ2luc1dpdGhDYWNoZSgpKSB7CisgICAgICAgICAg
ICBhdXRvIG9yaWdpbnMgPSBzdG9yYWdlLT5vcmlnaW5zV2l0aENhY2hlKCk7CisgICAgICAgICAg
ICB3ZWJzaXRlRGF0YS5lbnRyaWVzID0gV1RGOjptYXAob3JpZ2lucywgWyZdKGF1dG8mIG9yaWdp
bikgewogICAgICAgICAgICAgICAgIHVpbnQ2NF90IHNpemUgPSBmZXRjaE9wdGlvbnMuY29udGFp
bnMoV2Vic2l0ZURhdGFGZXRjaE9wdGlvbjo6Q29tcHV0ZVNpemVzKSA/IHN0b3JhZ2UtPmRpc2tV
c2FnZUZvck9yaWdpbihvcmlnaW4pIDogMDsKLSAgICAgICAgICAgICAgICB3ZWJzaXRlRGF0YS5l
bnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlw
ZTo6T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGUsIHNpemUgfSk7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0
ZURhdGFUeXBlOjpPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZSwgc2l6ZSB9OworICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFdlYnNpdGVEYXRhKFdU
Rk1vdmUod2Vic2l0ZURhdGEpKTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtNDkwLDggKzQ5NCw5
IEBAIHByaXZhdGU6CiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6
OldlYlNRTERhdGFiYXNlcykgJiYgaXNQZXJzaXN0ZW50KCkpIHsKICAgICAgICAgbV9xdWV1ZS0+
ZGlzcGF0Y2goW3dlYlNRTERhdGFiYXNlRGlyZWN0b3J5ID0gbV9jb25maWd1cmF0aW9uLT53ZWJT
UUxEYXRhYmFzZURpcmVjdG9yeSgpLmlzb2xhdGVkQ29weSgpLCBjYWxsYmFja0FnZ3JlZ2F0b3Jd
KCkgewogICAgICAgICAgICAgV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGE7Ci0gICAgICAgICAgICBm
b3IgKGF1dG8mIG9yaWdpbiA6IFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcldpdGhE
YXRhYmFzZVBhdGgod2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkpLT5vcmlnaW5zKCkpCi0gICAgICAg
ICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmQoV2Vic2l0ZURhdGE6OkVudHJ5IHsg
b3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6OldlYlNRTERhdGFiYXNlcywgMCB9KTsKKyAgICAgICAg
ICAgIHdlYnNpdGVEYXRhLmVudHJpZXMgPSBXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNr
ZXJXaXRoRGF0YWJhc2VQYXRoKHdlYlNRTERhdGFiYXNlRGlyZWN0b3J5KS0+b3JpZ2lucygpLm1h
cChbXShhdXRvJiBvcmlnaW4pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGE6
OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6OldlYlNRTERhdGFiYXNlcywgMCB9Owor
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBjYWxsYmFja0FnZ3JlZ2F0b3ItPmFkZFdlYnNp
dGVEYXRhKFdURk1vdmUod2Vic2l0ZURhdGEpKTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtNDk5
LDggKzUwNCw5IEBAIHByaXZhdGU6CiAgICAgaWYgKGRhdGFUeXBlcy5jb250YWlucyhXZWJzaXRl
RGF0YVR5cGU6Ok1lZGlhS2V5cykgJiYgaXNQZXJzaXN0ZW50KCkpIHsKICAgICAgICAgbV9xdWV1
ZS0+ZGlzcGF0Y2goW21lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkgPSBtX2NvbmZpZ3VyYXRpb24t
Pm1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoKS5pc29sYXRlZENvcHkoKSwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7CiAgICAgICAgICAgICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0YTsKLSAgICAgICAg
ICAgIGZvciAoYXV0byYgb3JpZ2luIDogbWVkaWFLZXlPcmlnaW5zKG1lZGlhS2V5c1N0b3JhZ2VE
aXJlY3RvcnkpKQotICAgICAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKFdl
YnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpNZWRpYUtleXMsIDAg
fSk7CisgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzID0gbWVkaWFLZXlPcmlnaW5zKG1l
ZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkpLm1hcChbXShhdXRvJiBvcmlnaW4pIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5
cGU6Ok1lZGlhS2V5cywgMCB9OworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBjYWxsYmFj
a0FnZ3JlZ2F0b3ItPmFkZFdlYnNpdGVEYXRhKFdURk1vdmUod2Vic2l0ZURhdGEpKTsKICAgICAg
ICAgfSk7CiAgICAgfQpAQCAtNzEyLDggKzcxOCw5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
cmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIGNvbnN0IFZl
CiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBob3N0TmFtZSA6IGRhdGFSZWNvcmQuSFNUU0Nh
Y2hlSG9zdE5hbWVzKQogICAgICAgICAgICAgICAgICAgICBIU1RTQ2FjaGVIb3N0TmFtZXMuYXBw
ZW5kKGhvc3ROYW1lKTsKICNpZiBFTkFCTEUoSU5URUxMSUdFTlRfVFJBQ0tJTkdfUFJFVkVOVElP
TikKKyAgICAgICAgICAgICAgICByZWdpc3RyYWJsZURvbWFpbnMucmVzZXJ2ZUNhcGFjaXR5KHJl
Z2lzdHJhYmxlRG9tYWlucy5zaXplKCkgKyBkYXRhUmVjb3JkLnJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NSZWdpc3RyYWJsZURvbWFpbnMuc2l6ZSgpKTsKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8m
IHJlZ2lzdHJhYmxlRG9tYWluIDogZGF0YVJlY29yZC5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUmVn
aXN0cmFibGVEb21haW5zKQotICAgICAgICAgICAgICAgICAgICByZWdpc3RyYWJsZURvbWFpbnMu
YXBwZW5kKHJlZ2lzdHJhYmxlRG9tYWluKTsKKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmFi
bGVEb21haW5zLnVuY2hlY2tlZEFwcGVuZChyZWdpc3RyYWJsZURvbWFpbik7CiAjZW5kaWYKICAg
ICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1Rl
eHRDaGVja2VySU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1RleHRDaGVja2Vy
SU9TLm1tCmluZGV4IGZhM2JjNTBiMjRmYWYyZWU1ZmVlNzQ2ZDJiZWM4MDRhYTRhZmI3MmMuLjAx
YTE2N2E3OGUzN2NkM2NkZjRiMTZjZWViOTg1YmZhNWI1NWM2NmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvVGV4dENoZWNrZXJJT1MubW0KQEAgLTM0LDYgKzM0LDcgQEAKICNp
bXBvcnQgPHd0Zi9IYXNoTWFwLmg+CiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNp
bXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5o
PgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
QEAgLTI0MCwxMiArMjQxLDEzIEBAIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVj
a2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChTcGVsbERvY3VtZW50VGFnIHNwCiAgICAgICAgICAg
ICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgICAgICByZXN1bHQu
dHlwZSA9IFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nOwogICAgICAgICAgICAgICAgIHJlc3Vs
dC5yYW5nZSA9IHJlc3VsdFJhbmdlOwotICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJl
c3VsdCk7CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsK
ICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVH
cmFtbWFyICYmIGNoZWNraW5nVHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6R3JhbW1h
cikpIHsKICAgICAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAg
ICAgICAgICAgIE5TQXJyYXkgKmRldGFpbHMgPSBbaW5jb21pbmdSZXN1bHQgZ3JhbW1hckRldGFp
bHNdOwogICAgICAgICAgICAgICAgIHJlc3VsdC50eXBlID0gVGV4dENoZWNraW5nVHlwZTo6R3Jh
bW1hcjsKICAgICAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5nZTsKKyAgICAg
ICAgICAgICAgICByZXN1bHQuZGV0YWlscy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRldGFpbHMu
Y291bnQpOwogICAgICAgICAgICAgICAgIGZvciAoTlNEaWN0aW9uYXJ5ICppbmNvbWluZ0RldGFp
bCBpbiBkZXRhaWxzKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpbmNvbWluZ0RldGFp
bCk7CiAgICAgICAgICAgICAgICAgICAgIEdyYW1tYXJEZXRhaWwgZGV0YWlsOwpAQCAtMjU5LDEz
ICsyNjEsMTAgQEAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNr
VGV4dE9mUGFyYWdyYXBoKFNwZWxsRG9jdW1lbnRUYWcgc3AKICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgIGRldGFpbC5yYW5nZSA9IGRldGFpbE5TUmFuZ2U7CiAgICAg
ICAgICAgICAgICAgICAgIGRldGFpbC51c2VyRGVzY3JpcHRpb24gPSBbaW5jb21pbmdEZXRhaWwg
b2JqZWN0Rm9yS2V5OkAiTlNHcmFtbWFyVXNlckRlc2NyaXB0aW9uIl07Ci0gICAgICAgICAgICAg
ICAgICAgIE5TQXJyYXkgKmd1ZXNzZXMgPSBbaW5jb21pbmdEZXRhaWwgb2JqZWN0Rm9yS2V5OkAi
TlNHcmFtbWFyQ29ycmVjdGlvbnMiXTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIGZvciAoTlNTdHJpbmcgKmd1ZXNzIGluIGd1ZXNzZXMpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBkZXRhaWwuZ3Vlc3Nlcy5hcHBlbmQoZ3Vlc3MpOwotICAgICAgICAgICAgICAg
ICAgICByZXN1bHQuZGV0YWlscy5hcHBlbmQoZGV0YWlsKTsKKyAgICAgICAgICAgICAgICAgICAg
ZGV0YWlsLmd1ZXNzZXMgPSBtYWtlVmVjdG9yPFN0cmluZz4oW2luY29taW5nRGV0YWlsIG9iamVj
dEZvcktleTpAIk5TR3JhbW1hckNvcnJlY3Rpb25zIl0pOworICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQuZGV0YWlscy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShkZXRhaWwpKTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKKyAgICAg
ICAgICAgICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfSBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFzc2lzdGFudC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0YW50Lm1tCmluZGV4IGNjNDJiZjlmYWQ3MTM0OTgz
MzUwYjI3OTQzMWU2ODM5NjdiMmUwODEuLjRiZmEwYzkyMGU5OTk2MjNjZTk3MDE3OGFjN2Y1YWRl
MzI3YmIyMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0FjdGlv
blNoZWV0QXNzaXN0YW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Fj
dGlvblNoZWV0QXNzaXN0YW50Lm1tCkBAIC0yMDcsMTIgKzIwNywxMSBAQCAtIChDR1JlY3QpcHJl
c2VudGF0aW9uUmVjdEZvckVsZW1lbnRVc2luZ0Nsb3Nlc3RJbmRpY2F0ZWRSZWN0CiAKICAgICBX
ZWJDb3JlOjpGbG9hdFBvaW50IHRvdWNoTG9jYXRpb24gPSBfcG9zaXRpb25JbmZvcm1hdGlvbi0+
cmVxdWVzdC5wb2ludDsKICAgICBXZWJDb3JlOjpGbG9hdFBvaW50IGxpbmtFbGVtZW50TG9jYXRp
b24gPSBpbmRpY2F0b3IudGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcy5sb2Nh
dGlvbigpOwotICAgIFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IGluZGljYXRlZFJlY3RzOwot
ICAgIGZvciAoYXV0byByZWN0IDogaW5kaWNhdG9yLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29v
cmRpbmF0ZXMpIHsKKyAgICBhdXRvIGluZGljYXRlZFJlY3RzID0gaW5kaWNhdG9yLnRleHRSZWN0
c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMubWFwKFsmXShhdXRvIHJlY3QpIHsKICAgICAgICAg
cmVjdC5pbmZsYXRlKDIpOwogICAgICAgICByZWN0Lm1vdmVCeShsaW5rRWxlbWVudExvY2F0aW9u
KTsKLSAgICAgICAgaW5kaWNhdGVkUmVjdHMuYXBwZW5kKHJlY3QpOwotICAgIH0KKyAgICAgICAg
cmV0dXJuIHJlY3Q7CisgICAgfSk7CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhdGggOiBXZWJD
b3JlOjpQYXRoVXRpbGl0aWVzOjpwYXRoc1dpdGhTaHJpbmtXcmFwcGVkUmVjdHMoaW5kaWNhdGVk
UmVjdHMsIDApKSB7CiAgICAgICAgIGF1dG8gYm91bmRpbmdSZWN0ID0gcGF0aC5mYXN0Qm91bmRp
bmdSZWN0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvVGV4dENo
ZWNrZXJNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMu
bW0KaW5kZXggMTZkNjgzOGU1NDhlMDQzMmZiZDE4ZjhkNGQyYWRlMWMyYzEwOGY2ZS4uZWNlMmUz
ZTI0NTMxNWVlNzFhZDk3OTdmYTZjYzgwYjQyOTMzMGQxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbQpAQCAtMzQ0LDEyICszNDQsMTMgQEAgVmVj
dG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBo
KFNwZWxsRG9jdW1lbnRUYWcgc3AKICAgICAgICAgICAgIFRleHRDaGVja2luZ1Jlc3VsdCByZXN1
bHQ7CiAgICAgICAgICAgICByZXN1bHQudHlwZSA9IFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5n
OwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFuZ2U7Ci0gICAgICAgICAgICBy
ZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92
ZShyZXN1bHQpKTsKICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNr
aW5nVHlwZUdyYW1tYXIgJiYgY2hlY2tpbmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBl
OjpHcmFtbWFyKSkgewogICAgICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAg
ICAgICAgICAgIE5TQXJyYXkgKmRldGFpbHMgPSBbaW5jb21pbmdSZXN1bHQgZ3JhbW1hckRldGFp
bHNdOwogICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFy
OwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFuZ2U7CisgICAgICAgICAgICBy
ZXN1bHQuZGV0YWlscy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRldGFpbHMuY291bnQpOwogICAg
ICAgICAgICAgZm9yIChOU0RpY3Rpb25hcnkgKmluY29taW5nRGV0YWlsIGluIGRldGFpbHMpIHsK
ICAgICAgICAgICAgICAgICBBU1NFUlQoaW5jb21pbmdEZXRhaWwpOwogICAgICAgICAgICAgICAg
IEdyYW1tYXJEZXRhaWwgZGV0YWlsOwpAQCAtMzYxLDkgKzM2Miw4IEBAIFZlY3RvcjxUZXh0Q2hl
Y2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChTcGVsbERvY3Vt
ZW50VGFnIHNwCiAgICAgICAgICAgICAgICAgZGV0YWlsLnJhbmdlID0gZGV0YWlsTlNSYW5nZTsK
ICAgICAgICAgICAgICAgICBkZXRhaWwudXNlckRlc2NyaXB0aW9uID0gW2luY29taW5nRGV0YWls
IG9iamVjdEZvcktleTpOU0dyYW1tYXJVc2VyRGVzY3JpcHRpb25dOwogICAgICAgICAgICAgICAg
IE5TQXJyYXkgKmd1ZXNzZXMgPSBbaW5jb21pbmdEZXRhaWwgb2JqZWN0Rm9yS2V5Ok5TR3JhbW1h
ckNvcnJlY3Rpb25zXTsKLSAgICAgICAgICAgICAgICBmb3IgKE5TU3RyaW5nICpndWVzcyBpbiBn
dWVzc2VzKQotICAgICAgICAgICAgICAgICAgICBkZXRhaWwuZ3Vlc3Nlcy5hcHBlbmQoU3RyaW5n
KGd1ZXNzKSk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmRldGFpbHMuYXBwZW5kKGRldGFpbCk7
CisgICAgICAgICAgICAgICAgZGV0YWlsLmd1ZXNzZXMgPSBtYWtlVmVjdG9yPFN0cmluZz4oZ3Vl
c3Nlcyk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmRldGFpbHMudW5jaGVja2VkQXBwZW5kKFdU
Rk1vdmUoZGV0YWlsKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXN1bHRzLmFwcGVu
ZChyZXN1bHQpOwogICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tp
bmdUeXBlTGluayAmJiBjaGVja2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6Okxp
bmspKSB7CkBAIC0zNzEsMzEgKzM3MSwzMSBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBU
ZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3BlbGxEb2N1bWVudFRhZyBzcAogICAg
ICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpMaW5rOwogICAgICAgICAg
ICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFuZ2U7CiAgICAgICAgICAgICByZXN1bHQucmVwbGFj
ZW1lbnQgPSBbW2luY29taW5nUmVzdWx0IFVSTF0gYWJzb2x1dGVTdHJpbmddOwotICAgICAgICAg
ICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKFdU
Rk1vdmUocmVzdWx0KSk7CiAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0VHlwZSA9PSBOU1RleHRD
aGVja2luZ1R5cGVRdW90ZSAmJiBjaGVja2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5
cGU6OlF1b3RlKSkgewogICAgICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAg
ICAgICAgICAgIHJlc3VsdC50eXBlID0gVGV4dENoZWNraW5nVHlwZTo6UXVvdGU7CiAgICAgICAg
ICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5nZTsKICAgICAgICAgICAgIHJlc3VsdC5yZXBs
YWNlbWVudCA9IFtpbmNvbWluZ1Jlc3VsdCByZXBsYWNlbWVudFN0cmluZ107Ci0gICAgICAgICAg
ICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RG
TW92ZShyZXN1bHQpKTsKICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENo
ZWNraW5nVHlwZURhc2ggJiYgY2hlY2tpbmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBl
OjpEYXNoKSkgewogICAgICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAg
ICAgICAgIHJlc3VsdC50eXBlID0gVGV4dENoZWNraW5nVHlwZTo6RGFzaDsKICAgICAgICAgICAg
IHJlc3VsdC5yYW5nZSA9IHJlc3VsdFJhbmdlOwogICAgICAgICAgICAgcmVzdWx0LnJlcGxhY2Vt
ZW50ID0gW2luY29taW5nUmVzdWx0IHJlcGxhY2VtZW50U3RyaW5nXTsKLSAgICAgICAgICAgIHJl
c3VsdHMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3Zl
KHJlc3VsdCkpOwogICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tp
bmdUeXBlUmVwbGFjZW1lbnQgJiYgY2hlY2tpbmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdU
eXBlOjpSZXBsYWNlbWVudCkpIHsKICAgICAgICAgICAgIFRleHRDaGVja2luZ1Jlc3VsdCByZXN1
bHQ7CiAgICAgICAgICAgICByZXN1bHQudHlwZSA9IFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2Vt
ZW50OwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFuZ2U7CiAgICAgICAgICAg
ICByZXN1bHQucmVwbGFjZW1lbnQgPSBbaW5jb21pbmdSZXN1bHQgcmVwbGFjZW1lbnRTdHJpbmdd
OwotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3Vs
dHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0VHlw
ZSA9PSBOU1RleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uICYmIGNoZWNraW5nVHlwZXMuY29udGFp
bnMoVGV4dENoZWNraW5nVHlwZTo6Q29ycmVjdGlvbikpIHsKICAgICAgICAgICAgIFRleHRDaGVj
a2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICByZXN1bHQudHlwZSA9IFRleHRDaGVja2lu
Z1R5cGU6OkNvcnJlY3Rpb247CiAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5n
ZTsKICAgICAgICAgICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IFtpbmNvbWluZ1Jlc3VsdCByZXBs
YWNlbWVudFN0cmluZ107Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAg
ICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgfQogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0FwcGxlUGF5L1dlYlBh
eW1lbnRDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvQXBwbGVQYXkv
V2ViUGF5bWVudENvb3JkaW5hdG9yLmNwcAppbmRleCA3MzU3NmEyNDdjZTExNzUyNzU2NWZiMWQy
NmI0Y2QwOWIyNDcyZTlmLi4xMjdhYzFlNDU3NzE1YmY3ZGZiMGU5YzkzYTEwNDIwYjRmNWMzNTcx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvQXBwbGVQYXkvV2ViUGF5bWVu
dENvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvQXBwbGVQYXkv
V2ViUGF5bWVudENvb3JkaW5hdG9yLmNwcApAQCAtOTgsOSArOTgsOSBAQCB2b2lkIFdlYlBheW1l
bnRDb29yZGluYXRvcjo6b3BlblBheW1lbnRTZXR1cChjb25zdCBTdHJpbmcmIG1lcmNoYW50SWRl
bnRpZmllciwgYwogCiBib29sIFdlYlBheW1lbnRDb29yZGluYXRvcjo6c2hvd1BheW1lbnRVSShj
b25zdCBVUkwmIG9yaWdpbmF0aW5nVVJMLCBjb25zdCBWZWN0b3I8VVJMPiYgbGlua0ljb25VUkxz
LCBjb25zdCBXZWJDb3JlOjpBcHBsZVBheVNlc3Npb25QYXltZW50UmVxdWVzdCYgcGF5bWVudFJl
cXVlc3QpCiB7Ci0gICAgVmVjdG9yPFN0cmluZz4gbGlua0ljb25VUkxTdHJpbmdzOwotICAgIGZv
ciAoY29uc3QgYXV0byYgbGlua0ljb25VUkwgOiBsaW5rSWNvblVSTHMpCi0gICAgICAgIGxpbmtJ
Y29uVVJMU3RyaW5ncy5hcHBlbmQobGlua0ljb25VUkwuc3RyaW5nKCkpOworICAgIGF1dG8gbGlu
a0ljb25VUkxTdHJpbmdzID0gbGlua0ljb25VUkxzLm1hcChbXShhdXRvJiBsaW5rSWNvblVSTCkg
eworICAgICAgICByZXR1cm4gbGlua0ljb25VUkwuc3RyaW5nKCk7CisgICAgfSk7CiAKICAgICBi
b29sIHJlc3VsdDsKICAgICBpZiAoIXNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXltZW50Q29vcmRp
bmF0b3JQcm94eTo6U2hvd1BheW1lbnRVSShtX3dlYlBhZ2UuaWRlbnRpZmllcigpLCBtX3dlYlBh
Z2Uud2ViUGFnZVByb3h5SWRlbnRpZmllcigpLCBvcmlnaW5hdGluZ1VSTC5zdHJpbmcoKSwgbGlu
a0ljb25VUkxTdHJpbmdzLCBwYXltZW50UmVxdWVzdCksIE1lc3NhZ2VzOjpXZWJQYXltZW50Q29v
cmRpbmF0b3JQcm94eTo6U2hvd1BheW1lbnRVSTo6UmVwbHkocmVzdWx0KSkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lv
blByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9t
YXRpb25TZXNzaW9uUHJveHkuY3BwCmluZGV4IGIwZmU4MzU3MjIzYjMxMzNmYzRkYjJmYmFhZDhl
NzM5ZjVlM2I5ZDYuLmY0NWNmYjQxOTEzNmI3Y2YwOGUzYmZkNDk2YjJiNjk3YTNjOWVmZTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRp
b25TZXNzaW9uUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9BdXRvbWF0
aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwCkBAIC04MDUsMTMgKzgwNSwxMiBAQCB2
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OnNldEZpbGVzRm9ySW5wdXRGaWxlVXBsb2Fk
KFdlYkNvcmU6OlBhZ2VJZGVudGlmaQogICAgIGF1dG8mIGlucHV0RWxlbWVudCA9IGRvd25jYXN0
PFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ+KCpjb3JlRWxlbWVudCk7CiAgICAgVmVjdG9yPFJl
ZjxXZWJDb3JlOjpGaWxlPj4gZmlsZU9iamVjdHM7CiAgICAgaWYgKGlucHV0RWxlbWVudC5tdWx0
aXBsZSgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBmaWxlcyA9IGlucHV0RWxlbWVudC5maWxlcygp
KSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGZpbGUgOiBmaWxlcy0+ZmlsZXMoKSkKLSAgICAg
ICAgICAgICAgICBmaWxlT2JqZWN0cy5hcHBlbmQoZmlsZS5jb3B5UmVmKCkpOwotICAgICAgICB9
CisgICAgICAgIGlmIChhdXRvKiBmaWxlcyA9IGlucHV0RWxlbWVudC5maWxlcygpKQorICAgICAg
ICAgICAgZmlsZU9iamVjdHMuYXBwZW5kVmVjdG9yKGZpbGVzLT5maWxlcygpKTsKICAgICB9Cisg
ICAgZmlsZU9iamVjdHMucmVzZXJ2ZUNhcGFjaXR5KGZpbGVPYmplY3RzLnNpemUoKSArIGZpbGVu
YW1lcy5zaXplKCkpOwogICAgIGZvciAoY29uc3QgYXV0byYgcGF0aCA6IGZpbGVuYW1lcykKLSAg
ICAgICAgZmlsZU9iamVjdHMuYXBwZW5kKFdlYkNvcmU6OkZpbGU6OmNyZWF0ZSgmaW5wdXRFbGVt
ZW50LmRvY3VtZW50KCksIHBhdGgpKTsKKyAgICAgICAgZmlsZU9iamVjdHMudW5jaGVja2VkQXBw
ZW5kKFdlYkNvcmU6OkZpbGU6OmNyZWF0ZSgmaW5wdXRFbGVtZW50LmRvY3VtZW50KCksIHBhdGgp
KTsKICAgICBpbnB1dEVsZW1lbnQuc2V0RmlsZXMoV2ViQ29yZTo6RmlsZUxpc3Q6OmNyZWF0ZShX
VEZNb3ZlKGZpbGVPYmplY3RzKSkpOwogCiAgICAgY29tcGxldGlvbkhhbmRsZXIoc3RkOjpudWxs
b3B0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVt
b3RlTWVkaWFQbGF5ZXJNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
bWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyLmNwcAppbmRleCA3YzlkNDU2OWE0ZTUwYjA3
MTNhNzdhOGI0YWMyNDBmYWU0NmRkZDFlLi44MTNhZjI4NTk4M2NiODJjMzBmMjRlMjUzNzE1NWM3
ZjBmM2I2MTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlh
L1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIuY3BwCkBAIC0xNjAsOCArMTYw
LDkgQEAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZT4gUmVtb3Rl
TWVkaWFQbGF5ZXJNYW5hZ2VyOjpjcmVhdGVSZW0KICAgICBwcm94eUNvbmZpZ3VyYXRpb24uaXNW
aWRlbyA9IHBsYXllci0+aXNWaWRlb1BsYXllcigpOwogCiAjaWYgRU5BQkxFKEFWRl9DQVBUSU9O
UykKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYWNrIDogcGxheWVyLT5vdXRPZkJhbmRUcmFja1Nv
dXJjZXMoKSkKLSAgICAgICAgcHJveHlDb25maWd1cmF0aW9uLm91dE9mQmFuZFRyYWNrRGF0YS5h
cHBlbmQodHJhY2stPmRhdGEoKSk7CisgICAgcHJveHlDb25maWd1cmF0aW9uLm91dE9mQmFuZFRy
YWNrRGF0YSA9IHBsYXllci0+b3V0T2ZCYW5kVHJhY2tTb3VyY2VzKCkubWFwKFtdKGF1dG8mIHRy
YWNrKSB7CisgICAgICAgIHJldHVybiB0cmFjay0+ZGF0YSgpOworICAgIH0pOwogI2VuZGlmCiAK
ICAgICBhdXRvIGRvY3VtZW50U2VjdXJpdHlPcmlnaW4gPSBwbGF5ZXItPmRvY3VtZW50U2VjdXJp
dHlPcmlnaW4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVk
aWEvU291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL21lZGlhL1NvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGUuY3BwCmluZGV4IDk2NmZjOTNi
NzdhZmFhM2U2MjA4ZDdhYmE1YWVkMmM3YTk0Yzc0YjIuLjRlZjE2NDBhNDAxMDA2YTZiOGY2OWNj
NTAxMTY0YThiZDE5MGViOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvbWVkaWEvU291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9Tb3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlLmNwcApAQCAt
MzM4LDE2ICszMzgsMTEgQEAgdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlOjp1cGRhdGVU
cmFja0lkcyhWZWN0b3I8c3RkOjpwYWlyPEF0b21TdHJpbmcsIEF0b20KICAgICBpZiAoIW1fZ3B1
UHJvY2Vzc0Nvbm5lY3Rpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxzdGQ6OnBh
aXI8VHJhY2tQcml2YXRlUmVtb3RlSWRlbnRpZmllciwgVHJhY2tQcml2YXRlUmVtb3RlSWRlbnRp
Zmllcj4+IGlkZW50aWZpZXJQYWlyczsKLQotICAgIGZvciAoYXV0byYgdHJhY2tJZFBhaXIgOiB0
cmFja0lkUGFpcnMpIHsKKyAgICBhdXRvIGlkZW50aWZpZXJQYWlycyA9IHRyYWNrSWRQYWlycy5t
YXAoW3RoaXNdKGF1dG8mIHRyYWNrSWRQYWlyKSB7CiAgICAgICAgIEFTU0VSVChtX3ByZXZUcmFj
a0lkZW50aWZpZXJNYXAuY29udGFpbnModHJhY2tJZFBhaXIuZmlyc3QpKTsKICAgICAgICAgQVNT
RVJUKG1fdHJhY2tJZGVudGlmaWVyTWFwLmNvbnRhaW5zKHRyYWNrSWRQYWlyLnNlY29uZCkpOwot
Ci0gICAgICAgIGF1dG8gb2xkSWRlbnRpZmllciA9IG1fcHJldlRyYWNrSWRlbnRpZmllck1hcC50
YWtlKHRyYWNrSWRQYWlyLmZpcnN0KTsKLSAgICAgICAgYXV0byBuZXdJZGVudGlmaWVyID0gbV90
cmFja0lkZW50aWZpZXJNYXAuZ2V0KHRyYWNrSWRQYWlyLnNlY29uZCk7Ci0gICAgICAgIGlkZW50
aWZpZXJQYWlycy5hcHBlbmQoc3RkOjptYWtlX3BhaXIob2xkSWRlbnRpZmllciwgbmV3SWRlbnRp
ZmllcikpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIHN0ZDo6cGFpciB7IG1fcHJldlRyYWNrSWRl
bnRpZmllck1hcC50YWtlKHRyYWNrSWRQYWlyLmZpcnN0KSwgbV90cmFja0lkZW50aWZpZXJNYXAu
Z2V0KHRyYWNrSWRQYWlyLnNlY29uZCkgfTsKKyAgICB9KTsKIAogICAgIG1fZ3B1UHJvY2Vzc0Nv
bm5lY3Rpb24tPmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVTb3VyY2VCdWZmZXJQ
cm94eTo6VXBkYXRlVHJhY2tJZHMoaWRlbnRpZmllclBhaXJzKSwgbV9yZW1vdGVTb3VyY2VCdWZm
ZXJJZGVudGlmaWVyKTsKIH0KQEAgLTM4MywyNyArMzc4LDMwIEBAIHZvaWQgU291cmNlQnVmZmVy
UHJpdmF0ZVJlbW90ZTo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVJbml0aWFsaXphdGlv
blNlZ21lCiAgICAgc2VnbWVudC5kdXJhdGlvbiA9IHNlZ21lbnRJbmZvLmR1cmF0aW9uOwogCiAg
ICAgbV9wcmV2VHJhY2tJZGVudGlmaWVyTWFwLnN3YXAobV90cmFja0lkZW50aWZpZXJNYXApOwor
ICAgIHNlZ21lbnQuYXVkaW9UcmFja3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzZWdtZW50SW5m
by5hdWRpb1RyYWNrcy5zaXplKCkpOwogICAgIGZvciAoYXV0byYgYXVkaW9UcmFjayA6IHNlZ21l
bnRJbmZvLmF1ZGlvVHJhY2tzKSB7CiAgICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6
OkluaXRpYWxpemF0aW9uU2VnbWVudDo6QXVkaW9UcmFja0luZm9ybWF0aW9uIGluZm87CiAgICAg
ICAgIGluZm8udHJhY2sgPSBtX21lZGlhUGxheWVyUHJpdmF0ZS0+YXVkaW9UcmFja1ByaXZhdGVS
ZW1vdGUoYXVkaW9UcmFjay5pZGVudGlmaWVyKTsKICAgICAgICAgaW5mby5kZXNjcmlwdGlvbiA9
IFJlbW90ZU1lZGlhRGVzY3JpcHRpb246OmNyZWF0ZShhdWRpb1RyYWNrLmRlc2NyaXB0aW9uKTsK
LSAgICAgICAgc2VnbWVudC5hdWRpb1RyYWNrcy5hcHBlbmQoaW5mbyk7CisgICAgICAgIHNlZ21l
bnQuYXVkaW9UcmFja3MudW5jaGVja2VkQXBwZW5kKGluZm8pOwogICAgICAgICBtX3RyYWNrSWRl
bnRpZmllck1hcC5hZGQoaW5mby50cmFjay0+aWQoKSwgYXVkaW9UcmFjay5pZGVudGlmaWVyKTsK
ICAgICB9CiAKKyAgICBzZWdtZW50LnZpZGVvVHJhY2tzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
c2VnbWVudEluZm8udmlkZW9UcmFja3Muc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIHZpZGVvVHJh
Y2sgOiBzZWdtZW50SW5mby52aWRlb1RyYWNrcykgewogICAgICAgICBTb3VyY2VCdWZmZXJQcml2
YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQ6OlZpZGVvVHJhY2tJbmZvcm1hdGlvbiBp
bmZvOwogICAgICAgICBpbmZvLnRyYWNrID0gbV9tZWRpYVBsYXllclByaXZhdGUtPnZpZGVvVHJh
Y2tQcml2YXRlUmVtb3RlKHZpZGVvVHJhY2suaWRlbnRpZmllcik7CiAgICAgICAgIGluZm8uZGVz
Y3JpcHRpb24gPSBSZW1vdGVNZWRpYURlc2NyaXB0aW9uOjpjcmVhdGUodmlkZW9UcmFjay5kZXNj
cmlwdGlvbik7Ci0gICAgICAgIHNlZ21lbnQudmlkZW9UcmFja3MuYXBwZW5kKGluZm8pOworICAg
ICAgICBzZWdtZW50LnZpZGVvVHJhY2tzLnVuY2hlY2tlZEFwcGVuZChpbmZvKTsKICAgICAgICAg
bV90cmFja0lkZW50aWZpZXJNYXAuYWRkKGluZm8udHJhY2stPmlkKCksIHZpZGVvVHJhY2suaWRl
bnRpZmllcik7CiAgICAgfQogCisgICAgc2VnbWVudC50ZXh0VHJhY2tzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoc2VnbWVudEluZm8udGV4dFRyYWNrcy5zaXplKCkpOwogICAgIGZvciAoYXV0byYg
dGV4dFRyYWNrIDogc2VnbWVudEluZm8udGV4dFRyYWNrcykgewogICAgICAgICBTb3VyY2VCdWZm
ZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQ6OlRleHRUcmFja0luZm9ybWF0
aW9uIGluZm87CiAgICAgICAgIGluZm8udHJhY2sgPSBtX21lZGlhUGxheWVyUHJpdmF0ZS0+dGV4
dFRyYWNrUHJpdmF0ZVJlbW90ZSh0ZXh0VHJhY2suaWRlbnRpZmllcik7CiAgICAgICAgIGluZm8u
ZGVzY3JpcHRpb24gPSBSZW1vdGVNZWRpYURlc2NyaXB0aW9uOjpjcmVhdGUodGV4dFRyYWNrLmRl
c2NyaXB0aW9uKTsKLSAgICAgICAgc2VnbWVudC50ZXh0VHJhY2tzLmFwcGVuZChpbmZvKTsKKyAg
ICAgICAgc2VnbWVudC50ZXh0VHJhY2tzLnVuY2hlY2tlZEFwcGVuZChpbmZvKTsKICAgICAgICAg
bV90cmFja0lkZW50aWZpZXJNYXAuYWRkKGluZm8udHJhY2stPmlkKCksIHRleHRUcmFjay5pZGVu
dGlmaWVyKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwCmluZGV4IGQwNzBjMmI3OWRmNDBjYWNiNDE4
ZjA2NzgyNjdlNGMzYjRhNTQ2MWMuLjFjMjI3MzQzMjU0NWFiZjNjOTA2Yjg1ZGMxN2Q5Yjk5ZDRl
MWY3YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xp
YldlYlJUQ0NvZGVjcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJy
dGMvTGliV2ViUlRDQ29kZWNzLmNwcApAQCAtMzkyLDkgKzM5Miw5IEBAIExpYldlYlJUQ0NvZGVj
czo6RW5jb2RlciogTGliV2ViUlRDQ29kZWNzOjpjcmVhdGVFbmNvZGVyKFR5cGUgdHlwZSwgY29u
c3Qgc3RkOjptCiAgICAgZW5jb2Rlci0+aWRlbnRpZmllciA9IFJUQ0VuY29kZXJJZGVudGlmaWVy
OjpnZW5lcmF0ZVRocmVhZFNhZmUoKTsKICAgICBlbmNvZGVyLT5jb2RlY1R5cGUgPSB0b1dlYlJU
Q0NvZGVjVHlwZSh0eXBlKTsKIAotICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+
PiBwYXJhbWV0ZXJzOwotICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiBmb3JtYXRQYXJhbWV0ZXJz
KQotICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihTdHJpbmc6OmZyb21V
VEY4KGtleVZhbHVlLmZpcnN0LmRhdGEoKSwga2V5VmFsdWUuZmlyc3QubGVuZ3RoKCkpLCBTdHJp
bmc6OmZyb21VVEY4KGtleVZhbHVlLnNlY29uZC5kYXRhKCksIGtleVZhbHVlLnNlY29uZC5sZW5n
dGgoKSkpKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBXVEY6Om1hcChmb3JtYXRQYXJhbWV0ZXJz
LCBbXShhdXRvJiBlbnRyeSkgeworICAgICAgICByZXR1cm4gc3RkOjpwYWlyIHsgU3RyaW5nOjpm
cm9tVVRGOChlbnRyeS5maXJzdC5kYXRhKCksIGVudHJ5LmZpcnN0Lmxlbmd0aCgpKSwgU3RyaW5n
Ojpmcm9tVVRGOChlbnRyeS5zZWNvbmQuZGF0YSgpLCBlbnRyeS5zZWNvbmQubGVuZ3RoKCkpIH07
CisgICAgfSk7CiAKICAgICBlbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbkFuZERpc3BhdGNoVG9U
aHJlYWQoW3RoaXMsIGVuY29kZXIgPSBXVEZNb3ZlKGVuY29kZXIpLCB0eXBlLCBwYXJhbWV0ZXJz
ID0gV1RGTW92ZShwYXJhbWV0ZXJzKV0oKSBtdXRhYmxlIHsKICAgICAgICAgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxl
UGFnZU92ZXJsYXkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwCmluZGV4IGQ4NTQyYTJiMTBiMWIzZTE1MzYx
NDE1NDExNWVmN2VjZWM0NGViODguLjZmOGY3NDUzNTkyNDUzZTBlNjE4Njc2MTI0NGUwYjc3OTIy
MWRlNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAKQEAgLTE5
NywxMSArMTk3LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIGF1dG8gd2tOYW1lcyA9IG1fYWNjZXNz
aWJpbGl0eUNsaWVudC5jbGllbnQoKS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzKHRv
QVBJKCZwYWdlT3ZlcmxheSksIHBhcmFtZXJpemVkTmFtZXMsIG1fYWNjZXNzaWJpbGl0eUNsaWVu
dC5jbGllbnQoKS5iYXNlLmNsaWVudEluZm8pOwogCiAgICAgICAgIHNpemVfdCBjb3VudCA9IFdL
QXJyYXlHZXRTaXplKHdrTmFtZXMpOworICAgICAgICBuYW1lcy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGNvdW50KTsKICAgICAgICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBjb3VudDsgaysrKSB7
CiAgICAgICAgICAgICBXS1R5cGVSZWYgaXRlbSA9IFdLQXJyYXlHZXRJdGVtQXRJbmRleCh3a05h
bWVzLCBrKTsKICAgICAgICAgICAgIGlmIChXZWJLaXQ6OnRvSW1wbChpdGVtKS0+dHlwZSgpID09
IEFQSTo6U3RyaW5nOjpBUElUeXBlKQotICAgICAgICAgICAgICAgIG5hbWVzLmFwcGVuZChXZWJL
aXQ6OnRvV1RGU3RyaW5nKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihpdGVtKSkpOworICAgICAg
ICAgICAgICAgIG5hbWVzLnVuY2hlY2tlZEFwcGVuZChXZWJLaXQ6OnRvV1RGU3RyaW5nKHN0YXRp
Y19jYXN0PFdLU3RyaW5nUmVmPihpdGVtKSkpOwogICAgICAgICB9CisgICAgICAgIG5hbWVzLnNo
cmlua1RvRml0KCk7CiAKICAgICAgICAgcmV0dXJuIG5hbWVzOwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9TZXNzaW9uU3RhdGVDb252
ZXJzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9TZXNz
aW9uU3RhdGVDb252ZXJzaW9uLmNwcAppbmRleCBjOGYyNDhhNjQ3NjU3NmEyOTJjNzVkNWZhYTY4
ZjVhYzYzYTQ3NWM4Li41NjdkNDc1MWJlZTgzYTNiM2Y0ZjZlMGZhMjM3N2JkMDA2MzUwYTI5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvU2Vzc2lv
blN0YXRlQ29udmVyc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1Nlc3Npb25TdGF0ZUNvbnZlcnNpb24uY3BwCkBAIC05OSwxMCArOTksOSBAQCBz
dGF0aWMgRnJhbWVTdGF0ZSB0b0ZyYW1lU3RhdGUoY29uc3QgSGlzdG9yeUl0ZW0mIGhpc3RvcnlJ
dGVtKQogICAgIGZyYW1lU3RhdGUub2JzY3VyZWRJbnNldHMgPSBoaXN0b3J5SXRlbS5vYnNjdXJl
ZEluc2V0cygpOwogI2VuZGlmCiAKLSAgICBmb3IgKGF1dG8mIGNoaWxkSGlzdG9yeUl0ZW0gOiBo
aXN0b3J5SXRlbS5jaGlsZHJlbigpKSB7Ci0gICAgICAgIEZyYW1lU3RhdGUgY2hpbGRGcmFtZVN0
YXRlID0gdG9GcmFtZVN0YXRlKGNoaWxkSGlzdG9yeUl0ZW0pOwotICAgICAgICBmcmFtZVN0YXRl
LmNoaWxkcmVuLmFwcGVuZChXVEZNb3ZlKGNoaWxkRnJhbWVTdGF0ZSkpOwotICAgIH0KKyAgICBm
cmFtZVN0YXRlLmNoaWxkcmVuID0gaGlzdG9yeUl0ZW0uY2hpbGRyZW4oKS5tYXAoW10oYXV0byYg
Y2hpbGRIaXN0b3J5SXRlbSkgeworICAgICAgICByZXR1cm4gdG9GcmFtZVN0YXRlKGNoaWxkSGlz
dG9yeUl0ZW0pOworICAgIH0pOwogCiAgICAgcmV0dXJuIGZyYW1lU3RhdGU7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRGV2aWNlT3Jp
ZW50YXRpb25VcGRhdGVQcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlci5jcHAKaW5kZXgg
ZjlhZjlhYjkzZjdlMDEyODc3MzY1MGMxZDI0OTVhZGRlMzlmZDQzNS4uMWQxMWY0MjNjMTc4OGQ1
OTdmZjI1NzhlZTYwZDljYjYxNmEwZGQzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEZXZp
Y2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyLmNwcApAQCAtODMsMTEgKzgzLDcgQEAgdm9pZCBX
ZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyOjpzdG9wVXBkYXRpbmdEZXZpY2VNb3Rp
b24oV2ViQ29yZTo6TW90aW8KIAogdm9pZCBXZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3Zp
ZGVyOjpkZXZpY2VPcmllbnRhdGlvbkNoYW5nZWQoZG91YmxlIGFscGhhLCBkb3VibGUgYmV0YSwg
ZG91YmxlIGdhbW1hLCBkb3VibGUgY29tcGFzc0hlYWRpbmcsIGRvdWJsZSBjb21wYXNzQWNjdXJh
Y3kpCiB7Ci0gICAgVmVjdG9yPFdlYWtQdHI8V2ViQ29yZTo6TW90aW9uTWFuYWdlckNsaWVudD4+
IGNsaWVudHM7Ci0gICAgZm9yIChhdXRvJiBjbGllbnQgOiBtX2RldmljZU9yaWVudGF0aW9uQ2xp
ZW50cykKLSAgICAgICAgY2xpZW50cy5hcHBlbmQoY2xpZW50KTsKLQotICAgIGZvciAoYXV0byYg
Y2xpZW50IDogY2xpZW50cykgeworICAgIGZvciAoYXV0byYgY2xpZW50IDogY29weVRvVmVjdG9y
T2Y8V2Vha1B0cjxXZWJDb3JlOjpNb3Rpb25NYW5hZ2VyQ2xpZW50Pj4obV9kZXZpY2VPcmllbnRh
dGlvbkNsaWVudHMpKSB7CiAgICAgICAgIGlmIChjbGllbnQpCiAgICAgICAgICAgICBjbGllbnQt
Pm9yaWVudGF0aW9uQ2hhbmdlZChhbHBoYSwgYmV0YSwgZ2FtbWEsIGNvbXBhc3NIZWFkaW5nLCBj
b21wYXNzQWNjdXJhY3kpOwogICAgIH0KQEAgLTk1LDExICs5MSw3IEBAIHZvaWQgV2ViRGV2aWNl
T3JpZW50YXRpb25VcGRhdGVQcm92aWRlcjo6ZGV2aWNlT3JpZW50YXRpb25DaGFuZ2VkKGRvdWJs
ZSBhbHBoYSwKIAogdm9pZCBXZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyOjpkZXZp
Y2VNb3Rpb25DaGFuZ2VkKGRvdWJsZSB4QWNjZWxlcmF0aW9uLCBkb3VibGUgeUFjY2VsZXJhdGlv
biwgZG91YmxlIHpBY2NlbGVyYXRpb24sIGRvdWJsZSB4QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jh
dml0eSwgZG91YmxlIHlBY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5LCBkb3VibGUgekFjY2Vs
ZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHksIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB4Um90YXRpb25S
YXRlLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4geVJvdGF0aW9uUmF0ZSwgc3RkOjpvcHRpb25hbDxk
b3VibGU+IHpSb3RhdGlvblJhdGUpCiB7Ci0gICAgVmVjdG9yPFdlYWtQdHI8V2ViQ29yZTo6TW90
aW9uTWFuYWdlckNsaWVudD4+IGNsaWVudHM7Ci0gICAgZm9yIChhdXRvJiBjbGllbnQgOiBtX2Rl
dmljZU1vdGlvbkNsaWVudHMpCi0gICAgICAgIGNsaWVudHMuYXBwZW5kKGNsaWVudCk7Ci0gICAg
Ci0gICAgZm9yIChhdXRvJiBjbGllbnQgOiBjbGllbnRzKSB7CisgICAgZm9yIChhdXRvJiBjbGll
bnQgOiBjb3B5VG9WZWN0b3JPZjxXZWFrUHRyPFdlYkNvcmU6Ok1vdGlvbk1hbmFnZXJDbGllbnQ+
PihtX2RldmljZU1vdGlvbkNsaWVudHMpKSB7CiAgICAgICAgIGlmIChjbGllbnQpCiAgICAgICAg
ICAgICBjbGllbnQtPm1vdGlvbkNoYW5nZWQoeEFjY2VsZXJhdGlvbiwgeUFjY2VsZXJhdGlvbiwg
ekFjY2VsZXJhdGlvbiwgeEFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHksIHlBY2NlbGVyYXRp
b25JbmNsdWRpbmdHcmF2aXR5LCAgekFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHksIHhSb3Rh
dGlvblJhdGUsIHlSb3RhdGlvblJhdGUsIHpSb3RhdGlvblJhdGUpOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJk
T3ZlcnJpZGVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmNwcAppbmRleCBkZmRkYTE3Njk5MzYwMDQ0N2EwYzkzY2M4
NDYwZjVlNjhiMmMyNDgxLi4zMThmN2MzZDI5MzMyYzAyYWQyY2UzMGQ5MGU3Y2ZlNmY1NWMzMjEw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
UGFzdGVib2FyZE92ZXJyaWRlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuY3BwCkBAIC03MSwxOCArNzEsMTMg
QEAgdm9pZCBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpyZW1vdmVPdmVycmlkZShjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdAogCiBWZWN0b3I8U3RyaW5nPiBXZWJQYXN0ZWJvYXJk
T3ZlcnJpZGVzOjpvdmVycmlkZGVuVHlwZXMoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkK
IHsKLSAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHQ7Ci0KICAgICBhdXRvIGl0ID0gbV9vdmVycmlk
ZXNNYXAuZmluZChwYXN0ZWJvYXJkTmFtZSk7CiAgICAgaWYgKGl0ID09IG1fb3ZlcnJpZGVzTWFw
LmVuZCgpKQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4geyB9OwogCiAg
ICAgQVNTRVJUKGl0LT52YWx1ZSk7CiAKLSAgICBmb3IgKFN0cmluZyYgdHlwZSA6IGl0LT52YWx1
ZS0+a2V5cygpKQotICAgICAgICByZXN1bHQuYXBwZW5kKHR5cGUpOwotCi0gICAgcmV0dXJuIHJl
c3VsdDsKKyAgICByZXR1cm4gY29weVRvVmVjdG9yKGl0LT52YWx1ZS0+a2V5cygpKTsKIH0KIAog
c3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQYXN0ZWJvYXJkSXRlbUluZm8+IFdlYlBhc3RlYm9hcmRP
dmVycmlkZXM6Om92ZXJyaWRkZW5JbmZvKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViU3Bl
ZWNoU3ludGhlc2lzQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJTcGVlY2hTeW50aGVzaXNDbGllbnQuY3BwCmluZGV4IGM0ZDBkY2MwM2Q1ZGE2
YTA0ODNlZGY1NmQxZTQzOTUyN2JjOTVmODguLmM1N2U3ODA5YjJlZTE2NmRkNmY2ODhiZTIyYTg1
OWM3ZGFkZGE4ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJTcGVlY2hTeW50aGVzaXNDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJTcGVlY2hTeW50aGVzaXNDbGllbnQuY3BwCkBA
IC00Miw5ICs0Miw5IEBAIGNvbnN0IFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6UGxhdGZvcm1TcGVl
Y2hTeW50aGVzaXNWb2ljZT4+JiBXZWJTcGVlY2hTeW50aGVzaXNDCiAgICAgVmVjdG9yPFdlYlNw
ZWVjaFN5bnRoZXNpc1ZvaWNlPiB2b2ljZUxpc3Q7CiAgICAgbV9wYWdlLnNlbmRTeW5jKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OlNwZWVjaFN5bnRoZXNpc1ZvaWNlTGlzdCgpLCB2b2ljZUxpc3Qp
OwogCi0gICAgbV92b2ljZXMuY2xlYXIoKTsKLSAgICBmb3IgKGF1dG8mIHZvaWNlIDogdm9pY2VM
aXN0KQotICAgICAgICBtX3ZvaWNlcy5hcHBlbmQoV2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50
aGVzaXNWb2ljZTo6Y3JlYXRlKHZvaWNlLnZvaWNlVVJJLCB2b2ljZS5uYW1lLCB2b2ljZS5sYW5n
LCB2b2ljZS5sb2NhbFNlcnZpY2UsIHZvaWNlLmRlZmF1bHRMYW5nKSk7CisgICAgbV92b2ljZXMg
PSB2b2ljZUxpc3QubWFwKFtdKGF1dG8mIHZvaWNlKSAtPiBSZWZQdHI8V2ViQ29yZTo6UGxhdGZv
cm1TcGVlY2hTeW50aGVzaXNWb2ljZT4geworICAgICAgICByZXR1cm4gV2ViQ29yZTo6UGxhdGZv
cm1TcGVlY2hTeW50aGVzaXNWb2ljZTo6Y3JlYXRlKHZvaWNlLnZvaWNlVVJJLCB2b2ljZS5uYW1l
LCB2b2ljZS5sYW5nLCB2b2ljZS5sb2NhbFNlcnZpY2UsIHZvaWNlLmRlZmF1bHRMYW5nKTsKKyAg
ICB9KTsKICAgICByZXR1cm4gbV92b2ljZXM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRleCBiNTEzNGQwZDJjNWQ3
YzUyZjZmYWM5NjgwNDQxYWNjM2VlYmY2NWZkLi4xZDY0M2I2YjQyODhkMDhlMDM4YzQ2MjVkMDU0
OWRlNjhhZjJhYTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9GaW5kQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvRmluZENvbnRyb2xsZXIuY3BwCkBAIC0yNzIsMTAgKzI3Miw5IEBAIHZvaWQgRmluZENvbnRy
b2xsZXI6OmZpbmRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBPcHRpb25TZXQ8
RmluZE9wdGlvCiAgICAgYXV0byByZXN1bHQgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPmZpbmRU
ZXh0TWF0Y2hlcyhzdHJpbmcsIGNvcmUob3B0aW9ucyksIG1heE1hdGNoQ291bnQpOwogICAgIG1f
ZmluZE1hdGNoZXMgPSBXVEZNb3ZlKHJlc3VsdC5yYW5nZXMpOwogCi0gICAgVmVjdG9yPFZlY3Rv
cjxJbnRSZWN0Pj4gbWF0Y2hSZWN0czsKLSAgICBmb3IgKGF1dG8mIHJhbmdlIDogbV9maW5kTWF0
Y2hlcykKLSAgICAgICAgbWF0Y2hSZWN0cy5hcHBlbmQoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRl
eHRSZWN0cyhyYW5nZSkpOwotCisgICAgYXV0byBtYXRjaFJlY3RzID0gbV9maW5kTWF0Y2hlcy5t
YXAoW10oYXV0byYgcmFuZ2UpIHsKKyAgICAgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6YWJzb2x1
dGVUZXh0UmVjdHMocmFuZ2UpOworICAgIH0pOwogICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpEaWRGaW5kU3RyaW5nTWF0Y2hlcyhzdHJpbmcsIG1hdGNoUmVjdHMs
IHJlc3VsdC5pbmRleEZvclNlbGVjdGlvbikpOwogCiAgICAgaWYgKCFvcHRpb25zLmNvbnRhaW5z
KEZpbmRPcHRpb25zOjpTaG93T3ZlcmxheSkgJiYgIW9wdGlvbnMuY29udGFpbnMoRmluZE9wdGlv
bnM6OlNob3dGaW5kSW5kaWNhdG9yKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwCmlu
ZGV4IDc0ODAyYzQ3ODc1NWZmZTYxYjkzMDkyY2JjYTZkMGFjN2NjYzljODMuLjJjOWI0NTdkYmNh
MDdhNmViMTI2ODlhNzhmMGRkNWIyOTE0YTIxY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9s
bGVyLmNwcApAQCAtMjQ4LDExICsyNDgsMTAgQEAgdm9pZCBXZWJGb3VuZFRleHRSYW5nZUNvbnRy
b2xsZXI6OmRyYXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6R3JhcGgKICAg
ICAgICAgYXV0byB0ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gbV90ZXh0
SW5kaWNhdG9yLT50ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKCk7CiAgICAg
ICAgIGF1dG8gdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcyA9IG1fdGV4dEluZGlj
YXRvci0+dGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcygpOwogCi0gICAgICAgIFZl
Y3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IHRleHRSZWN0c0luUm9vdFZpZXdDb29yZGluYXRlczsK
LSAgICAgICAgZm9yIChhdXRvIHJlY3QgOiB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5h
dGVzKSB7CisgICAgICAgIGF1dG8gdGV4dFJlY3RzSW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gdGV4
dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcy5tYXAoWyZdKGF1dG8gcmVjdCkgewogICAg
ICAgICAgICAgcmVjdC5tb3ZlQnkodGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRl
cy5sb2NhdGlvbigpKTsKLSAgICAgICAgICAgIHRleHRSZWN0c0luUm9vdFZpZXdDb29yZGluYXRl
cy5hcHBlbmQocmVjdCk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZWN0OworICAg
ICAgICB9KTsKIAogICAgICAgICBhdXRvIHBhdGhzID0gV2ViQ29yZTo6UGF0aFV0aWxpdGllczo6
cGF0aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3RzKHRleHRSZWN0c0luUm9vdFZpZXdDb29yZGluYXRl
cywgaW5kaWNhdG9yUmFkaXVzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAppbmRleCA4ZmY5MDVkY2ZhZmFmMzE3Mjc4MjE4ZTkxNWZlNDgwMDQ2ZGMx
NjE5Li5lMjNhZGJhOTE4MTIzYTE5Y2U0ODdjMTBhNjVjZTZkZjRlMTU5NDJhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMzAzMSw3ICszMDMx
LDcgQEAgdm9pZCBXZWJQYWdlOjptb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIG1vdXNl
RXZlbnQsIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+IG1vdXNlRXZlbnRTYW5kYm94RXh0
ZW5zaW9uczsKKyAgICBWZWN0b3I8UmVmPFNhbmRib3hFeHRlbnNpb24+PiBtb3VzZUV2ZW50U2Fu
ZGJveEV4dGVuc2lvbnM7CiAgICAgaWYgKHNhbmRib3hFeHRlbnNpb25zKQogICAgICAgICBtb3Vz
ZUV2ZW50U2FuZGJveEV4dGVuc2lvbnMgPSBjb25zdW1lU2FuZGJveEV4dGVuc2lvbnMoV1RGTW92
ZSgqc2FuZGJveEV4dGVuc2lvbnMpKTsKIApAQCAtNzg1NywyMSArNzg1NywxOSBAQCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkmIFdlYlBhZ2U6OmVuc3VyZVJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eSgpCiB9CiAjZW5kaWYKIAotVmVjdG9yPFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPj4g
V2ViUGFnZTo6Y29uc3VtZVNhbmRib3hFeHRlbnNpb25zKFZlY3RvcjxTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGU+JiYgc2FuZGJveEV4dGVuc2lvbnMpCitWZWN0b3I8UmVmPFNhbmRib3hFeHRlbnNp
b24+PiBXZWJQYWdlOjpjb25zdW1lU2FuZGJveEV4dGVuc2lvbnMoVmVjdG9yPFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZT4mJiBzYW5kYm94RXh0ZW5zaW9ucykKIHsKLSAgICBWZWN0b3I8UmVmUHRy
PFNhbmRib3hFeHRlbnNpb24+PiBkcmFnU2FuZGJveEV4dGVuc2lvbnM7Ci0gICAgZm9yIChhdXRv
JiBzYW5kYm94RXh0ZW5zaW9uIDogc2FuZGJveEV4dGVuc2lvbnMpIHsKKyAgICByZXR1cm4gV1RG
Ojpjb21wYWN0TWFwKFdURk1vdmUoc2FuZGJveEV4dGVuc2lvbnMpLCBbXShhdXRvJiYgc2FuZGJv
eEV4dGVuc2lvbikgLT4gUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+IHsKICAgICAgICAgYXV0byBl
eHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUoV1RGTW92ZShzYW5kYm94RXh0ZW5z
aW9uKSk7CiAgICAgICAgIGlmICghZXh0ZW5zaW9uKQotICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgYm9vbCBvayA9IGV4dGVuc2lvbi0+
Y29uc3VtZSgpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7Ci0gICAgICAgIGRyYWdT
YW5kYm94RXh0ZW5zaW9ucy5hcHBlbmQoV1RGTW92ZShleHRlbnNpb24pKTsKLSAgICB9Ci0gICAg
cmV0dXJuIGRyYWdTYW5kYm94RXh0ZW5zaW9uczsKKyAgICAgICAgcmV0dXJuIGV4dGVuc2lvbjsK
KyAgICB9KTsKIH0KIAotdm9pZCBXZWJQYWdlOjpyZXZva2VTYW5kYm94RXh0ZW5zaW9ucyhWZWN0
b3I8UmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiYgc2FuZGJveEV4dGVuc2lvbnMpCit2b2lkIFdl
YlBhZ2U6OnJldm9rZVNhbmRib3hFeHRlbnNpb25zKFZlY3RvcjxSZWY8U2FuZGJveEV4dGVuc2lv
bj4+JiBzYW5kYm94RXh0ZW5zaW9ucykKIHsKICAgICBmb3IgKGF1dG8mIHNhbmRib3hFeHRlbnNp
b24gOiBzYW5kYm94RXh0ZW5zaW9ucykKICAgICAgICAgc2FuZGJveEV4dGVuc2lvbi0+cmV2b2tl
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggNjlk
ZTE0YWE5ODM0Mzg4YTQwNTI0NzdjMzYxODFkN2Q1YTJmN2NjZi4uNjU0YjhjOWM2MDAyZDBlZDli
MmM2MmNlMGMzMWVhOWJmZGIwYmVmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaApAQCAtMTk2OSw4ICsxOTY5LDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQg
cGxhdGZvcm1EaWRTY2FsZVBhZ2UoKTsKIAotICAgIFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVu
c2lvbj4+IGNvbnN1bWVTYW5kYm94RXh0ZW5zaW9ucyhWZWN0b3I8U2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlPiYmKTsKLSAgICB2b2lkIHJldm9rZVNhbmRib3hFeHRlbnNpb25zKFZlY3RvcjxSZWZQ
dHI8U2FuZGJveEV4dGVuc2lvbj4+JiBzYW5kYm94RXh0ZW5zaW9ucyk7CisgICAgVmVjdG9yPFJl
ZjxTYW5kYm94RXh0ZW5zaW9uPj4gY29uc3VtZVNhbmRib3hFeHRlbnNpb25zKFZlY3RvcjxTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGU+JiYpOworICAgIHZvaWQgcmV2b2tlU2FuZGJveEV4dGVuc2lv
bnMoVmVjdG9yPFJlZjxTYW5kYm94RXh0ZW5zaW9uPj4mIHNhbmRib3hFeHRlbnNpb25zKTsKIAog
ICAgIHZvaWQgc2V0U2VsZWN0aW9uUmFuZ2UoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBXZWJD
b3JlOjpUZXh0R3JhbnVsYXJpdHksIGJvb2wpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRleCA5ZGMwMGRhMjc3MGMx
OTM5ODkxYTMwMGYyMzM3NDk2YTljOGU3MDFkLi5iZDM2NzIwNzViNzU3NjhjODQxNDc3OGZjNjY1
ZjVkNzViNGUyNGFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvV2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtNzU0LDExICs3NTQsOCBAQCB2b2lkIFdlYlBhZ2U6Omhh
bmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayhGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBjb25z
dCBWZWN0bwogCiAgICAgTlNEYXRhICpzZWxlY3Rpb25EYXRhID0gW2F0dHJpYnV0ZWRTZWxlY3Rp
b24gUlRGREZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbYXR0cmlidXRlZFNlbGVjdGlvbiBsZW5n
dGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6QHsgfV07CiAKLSAgICBWZWN0b3I8dWludDhfdD4gc2Vs
ZWN0aW9uRGF0YVZlY3RvcjsKLSAgICBzZWxlY3Rpb25EYXRhVmVjdG9yLmFwcGVuZChyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzZWxlY3Rpb25EYXRhLmJ5dGVzKSwgc2VsZWN0aW9u
RGF0YS5sZW5ndGgpOwotCiAgICAgZmx1c2hQZW5kaW5nRWRpdG9yU3RhdGVVcGRhdGUoKTsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3dDb250ZXh0TWVudShDb250ZXh0TWVu
dUNvbnRleHREYXRhKHBvaW50LCBzZWxlY3Rpb25EYXRhVmVjdG9yLCBwaG9uZU51bWJlcnMsIHNl
bGVjdGlvbi5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSwgVXNlckRhdGEoKSkpOwor
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2hvd0NvbnRleHRNZW51KENvbnRleHRN
ZW51Q29udGV4dERhdGEocG9pbnQsIFZlY3RvciB7IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KHNlbGVjdGlvbkRhdGEuYnl0ZXMpLCBzZWxlY3Rpb25EYXRhLmxlbmd0aCB9LCBwaG9u
ZU51bWJlcnMsIHNlbGVjdGlvbi5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSwgVXNl
ckRhdGEoKSkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmhhbmRsZUltYWdlU2VydmljZUNsaWNrKGNv
bnN0IEludFBvaW50JiBwb2ludCwgSW1hZ2UmIGltYWdlLCBIVE1MSW1hZ2VFbGVtZW50JiBlbGVt
ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCmluZGV4IDc5OTYxM2Qz
Nzc0MjM2M2JmYmRjZDk1Mjk3OTk2MjIwNmYwMjI4YTguLjg5OTBlZGQ3NmNhYjk2YzJkZWNkM2I5
NjA1NGNmZjYyOTViYjBjZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5j
cHAKQEAgLTE0NTIsOCArMTQ1MiwxMCBAQCB2b2lkIFdlYlByb2Nlc3M6OmZldGNoV2Vic2l0ZURh
dGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gd2Vic2l0ZURhdGFUeXBlcywgQwogewogICAg
IFdlYnNpdGVEYXRhIHdlYnNpdGVEYXRhOwogICAgIGlmICh3ZWJzaXRlRGF0YVR5cGVzLmNvbnRh
aW5zKFdlYnNpdGVEYXRhVHlwZTo6TWVtb3J5Q2FjaGUpKSB7Ci0gICAgICAgIGZvciAoYXV0byYg
b3JpZ2luIDogTWVtb3J5Q2FjaGU6OnNpbmdsZXRvbigpLm9yaWdpbnNXaXRoQ2FjaGUoc2Vzc2lv
bklEKCkpKQotICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmQoV2Vic2l0ZURh
dGE6OkVudHJ5IHsgb3JpZ2luLT5kYXRhKCksIFdlYnNpdGVEYXRhVHlwZTo6TWVtb3J5Q2FjaGUs
IDAgfSk7CisgICAgICAgIGF1dG8gb3JpZ2lucyA9IE1lbW9yeUNhY2hlOjpzaW5nbGV0b24oKS5v
cmlnaW5zV2l0aENhY2hlKHNlc3Npb25JRCgpKTsKKyAgICAgICAgd2Vic2l0ZURhdGEuZW50cmll
cyA9IFdURjo6bWFwKG9yaWdpbnMsIFtdKGF1dG8mIG9yaWdpbikgeworICAgICAgICAgICAgcmV0
dXJuIFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbi0+ZGF0YSgpLCBXZWJzaXRlRGF0YVR5cGU6
Ok1lbW9yeUNhY2hlLCAwIH07CisgICAgICAgIH0pOwogICAgIH0KICAgICBjb21wbGV0aW9uSGFu
ZGxlcihXVEZNb3ZlKHdlYnNpdGVEYXRhKSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452884</attachid>
            <date>2022-02-22 10:22:38 -0800</date>
            <delta_ts>2022-02-22 12:50:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236852-20220222102237.patch</filename>
            <type>text/plain</type>
            <size>162173</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDRmMmVmNWZkODRlNjQ3YTAzY2Y2M2Uz
YWVkMTMxZTIxNzZkMDE4ODcuLjI4MzU4NTI2ZTQyMDExNTU1MWY5ZjM0ZmI5Y2VkZDgxZThhZjY3
OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjItMDItMTggIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGV2ZW4gbW9yZSBjYWxs
IHNpdGVzIGNvbnN0cnVjdGluZyB2ZWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4NTIKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlci4KKworICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuY3BwOgorICAgICAgICAoV1RGOjpDb25j
dXJyZW50V29ya1F1ZXVlOjphcHBseSk6CisgICAgICAgICogd3RmL2NmL0xhbmd1YWdlQ0YuY3Bw
OgorICAgICAgICAoV1RGOjpwbGF0Zm9ybVVzZXJQcmVmZXJyZWRMYW5ndWFnZXMpOgorCiAyMDIy
LTAyLTIyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBz
ZXJ2aWNlIHdvcmtlciBhbmQgcHVzaCBBUEkgcHJlZmVyZW5jZSBmcm9tIFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXMgdG8gU2V0dGluZ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhMWYxOTk2YTZhZWQyMTM3MzBkYzhk
OWEzNDMxYWNiZjU1YTEzODdiLi5kZGIzYzJjNzdlM2MwODgzYzUxZWM2YTdlNWJmNGFiMGVkYzEw
MjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTY2IEBACisyMDIyLTAyLTE4ICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4gdXAgLyBvcHRpbWl6ZSBldmVu
IG1vcmUgY2FsbCBzaXRlcyBjb25zdHJ1Y3RpbmcgdmVjdG9ycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2ODUyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgKiBNb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29y
ZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXltZW50Q29vcmRpbmF0b3I6OmJlZ2lu
UGF5bWVudFNlc3Npb24pOgorICAgICAgICAqIE1vZHVsZXMvYXBwbGVwYXkvY29jb2EvUGF5bWVu
dE1ldGhvZENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydCk6CisgICAgICAgICog
TW9kdWxlcy9jYWNoZS9ET01DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01DYWNoZTo6
YmF0Y2hQdXRPcGVyYXRpb24pOgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWQ6OkdhbWVwYWQpOgorICAgICAgICAqIE1vZHVs
ZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFk
TWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkRGlzY29ubmVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkdhbWVwYWRNYW5hZ2VyOjptYWtlR2FtZXBhZFZpc2libGUpOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
OjpvYmplY3RTdG9yZU5hbWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
Ojp0cmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5o
OgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6aXNEZWxldGVkVmFsdWUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGFIYXNo
OjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6Omhhc2ggY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzIGNvbnN0KToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmVOYW1lcyBjb25zdCk6CisgICAgICAgICog
TW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0OjpzaG93TWVkaWFDb250cm9sc0NvbnRleHRNZW51KToK
KyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU291cmNlOjphY3RpdmVSYW5nZXMgY29uc3QpOgorICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmg6CisgICAgICAgIChXZWJDb3JlOjpEZWNvZGVP
cmRlclNhbXBsZU1hcDo6c2l6ZSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJj
ZS9Tb3VyY2VCdWZmZXJMaXN0Lmg6CisgICAgICAgICogTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3lu
dGhlc2lzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpczo6Z2V0Vm9pY2Vz
KToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFz
ay5tbToKKyAgICAgICAgKC1bV2ViU3BlZWNoUmVjb2duaXplclRhc2tJbXBsIGNhbGxiYWNrV2l0
aFRyYW5zY3JpcHRpb25zOmlzRmluYWw6XSk6CisgICAgICAgICogTW9kdWxlcy9zcGVlY2gvY29j
b2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2tNb2NrLm1tOgorICAgICAgICAoLVtXZWJTcGVlY2hS
ZWNvZ25pemVyVGFza01vY2sgYXVkaW9TYW1wbGVzQXZhaWxhYmxlOl0pOgorICAgICAgICAqIGFu
aW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpibGVu
ZEZ1bmMpOgorICAgICAgICAqIGFuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaW1lbGluZXNDb250cm9sbGVyOjp1cGRh
dGVBbmltYXRpb25zQW5kU2VuZEV2ZW50cyk6CisgICAgICAgICogYW5pbWF0aW9uL0tleWZyYW1l
RWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByb2Nlc3NQcm9wZXJ0eUluZGV4ZWRLZXlm
cmFtZXMpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb246
OkNvbnRlbnRFeHRlbnNpb24pOgorICAgICAgICAqIGNzcy9DU1NWYWx1ZUxpc3QuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1ZhbHVlTGlzdDo6c2l6ZSBjb25zdCk6CisgICAgICAgICogY3NzL2Nh
bGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09w
ZXJhdGlvbk5vZGU6OmhvaXN0Q2hpbGRyZW5XaXRoT3BlcmF0b3IpOgorICAgICAgICAqIGNzcy9w
YXJzZXIvQ1NTUGFyc2VySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJJbXBs
Ojpjb25zdW1lQ29udGFpbmVyUnVsZSk6CisgICAgICAgICogZG9tL0RPTVN0cmluZ0xpc3QuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkRPTVN0cmluZ0xpc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpET01TdHJpbmdMaXN0OjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NU3RyaW5n
TGlzdDo6RE9NU3RyaW5nTGlzdCk6CisgICAgICAgICogZG9tL0V2ZW50UGF0aC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudFBhdGg6OkV2ZW50UGF0aCk6CisgICAgICAgICogZG9tL0Z1bGxz
Y3JlZW5NYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZ1bGxzY3JlZW5NYW5hZ2VyOjpj
YW5jZWxGdWxsc2NyZWVuKToKKyAgICAgICAgKiBkb20vTG9hZGFibGVTY3JpcHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TG9hZGFibGVTY3JpcHQ6Om5vdGlmeUNsaWVudEZpbmlzaGVkKToKKyAg
ICAgICAgKiBkb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFk
aW9CdXR0b25Hcm91cDo6bWVtYmVycyBjb25zdCk6CisgICAgICAgICogaHRtbC9EaXJlY3RvcnlG
aWxlTGlzdENyZWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9GaWxlTGlzdCk6CisgICAg
ICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
U2VsZWN0RWxlbWVudDo6c2F2ZUxhc3RTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KToKKyAgICAgICAg
KiBodG1sL0ltYWdlQml0bWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFwOjpk
ZXRhY2hCaXRtYXBzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFy
c2V0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6
cHJvY2Vzc01ldGEpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6Omluc2VydFBob25lTnVtYmVyTGlu
ayk6CisgICAgICAgICogaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHREb2N1bWVudFBhcnNlcjo6aW5zZXJ0RmFrZVByZUVsZW1lbnQpOgor
ICAgICAgICAqIGxvYWRlci9Db250ZW50RmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRGaWx0ZXI6OmNyZWF0ZSk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0
aW9uQ2FjaGVNYW5pZmVzdFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUFwcGxp
Y2F0aW9uQ2FjaGVNYW5pZmVzdCk6CisgICAgICAgICogcGFnZS9SZXNpemVPYnNlcnZlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZXNpemVPYnNlcnZlcjo6ZGVsaXZlck9ic2VydmF0aW9ucyk6
CisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlu
aXRpYWxpemVJbmRpY2F0b3IpOgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBv
bGljeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVN1YlJlc291cmNlSW50ZWdyaXR5SW50
b0RpZ2VzdHMpOgorICAgICAgICAqIHBsYXRmb3JtL0ZpbGVDaG9vc2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bGVDaG9vc2VyOjpjaG9vc2VGaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlQ2hvb3Nlcjo6
Y2hvb3NlTWVkaWFGaWxlcyk6CisgICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmFwcGVuZCk6CisgICAg
ICAgICogcGxhdGZvcm0vVGhyZWFkU2FmZURhdGFCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OmFkZCk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EU1BLZXJuZWxQcm9jZXNzb3I6OmluaXRpYWxp
emUpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvUmVzYW1wbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvUmVzYW1wbGVyOjpBdWRpb1Jlc2FtcGxlcik6CisgICAgICAgICog
cGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0TnVtYmVyT2ZDaGFubmVscyk6Cisg
ICAgICAgICogcGxhdGZvcm0vYXVkaW8vTXVsdGlDaGFubmVsUmVzYW1wbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok11bHRpQ2hhbm5lbFJlc2FtcGxlcjo6TXVsdGlDaGFubmVsUmVzYW1wbGVy
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxl
bWVudC5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9nYW1lcGFkL21hYy9EdWFsc2hvY2szSElER2FtZXBhZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEdWFsc2hvY2szSElER2FtZXBhZDo6RHVhbHNob2NrM0hJREdhbWVwYWQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dhbWVwYWQvbWFjL0xvZ2l0ZWNoR2FtZXBhZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpMb2dpdGVjaEdhbWVwYWQ6OkxvZ2l0ZWNoR2FtZXBhZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ2FtZXBhZC9tYWMvU3RhZGlhSElER2FtZXBhZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdGFkaWFISURHYW1lcGFkOjpTdGFkaWFISURHYW1lcGFkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI6OmFkZFJlcGFpbnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRo
VXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdGhVdGlsaXRpZXM6OnBhdGhzV2l0
aFNocmlua1dyYXBwZWRSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoVXRpbGl0aWVzOjpw
YXRoV2l0aFNocmlua1dyYXBwZWRSZWN0c0Zvck91dGxpbmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlQnVmZmVyUHJpdmF0ZTo6YnVmZmVyZWRTYW1wbGVzRm9yVHJhY2tJZCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6ZXh0cmFjdEtl
eUlEc1NrZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFW
RldyYXBwZXI6OnNldFJlcXVlc3RGb3JLZXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1t
OgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdB
VkZPYmpDOjp1cGRhdGVLZXlTdGF0dXNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVyQVZGT2JqQy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2RlckFWRk9iakM6OmZyYW1lSW5mb3MgY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclBhcnNlckFWRk9i
akMubW06CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJBVkZPYmpDOjpkaWRQ
YXJzZVN0cmVhbURhdGFBc0Fzc2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZv
cm1EYXRhOjp2YXJpYXRpb25BeGVzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGFz
dGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlU3RyaW5n
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZVZpZGVvQ2FwdHVyZVNv
dXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZVZpZGVvQ2FwdHVyZVNvdXJjZTo6
c2V0U3VwcG9ydGVkUHJlc2V0cyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVn
aXN0cnlJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JSZWdpc3RyeUltcGw6OnJlZ2lz
dGVyQmxvYlVSTCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVnaXN0cnlJbXBsOjp3cml0ZUJs
b2JzVG9UZW1wb3JhcnlGaWxlc0ZvckluZGV4ZWREQik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpkcmF3Qm94U2lkZUZyb21QYXRoKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6
Y29ubmVjdENsaXBwaW5nU3RhY2tMYXllcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjphZGp1c3RPdmVyZmxvd1Njcm9sbGJhckNvbnRhaW5lckxheWVycyk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRBdHRh
Y2htZW50VGl0bGVCYWNrZ3JvdW5kKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
clRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTVkdTdHJva2VQYWludGlu
Z1Jlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdUZXh0Q2h1bms6OlNWR1RleHRDaHVuayk6CisgICAgICAgICog
c3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlBh
Z2VSdWxlQ29sbGVjdG9yOjptYXRjaFBhZ2VSdWxlcyk6CisgICAgICAgICogc3R5bGUvUnVsZVNl
dEJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXRCdWlsZGVyOjpN
ZWRpYVF1ZXJ5Q29sbGVjdG9yOjpwb3ApOgorICAgICAgICAqIHN0eWxlL1N0eWxlQnVpbGRlckNv
bnZlcnRlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRDb250YWluZXJOYW1lKToKKwogMjAyMi0wMi0yMiAgSmVyIE5vYmxlICA8amVyLm5vYmxl
QGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIFBhcnRpYWwgcm9sbG91dCBvZiByMjg5OTQ2
LCBicm9rZSBOZXRmbGl4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGM2NjBiMGI2YWNlYmFhNTZkNjk4NDcyMWRlMGU2
MGNjZWE0MTExMGUuLmU4ZDBjMjc1NzNmZjQ0MzE1N2M0MWNkYTI0NDE5YjYwNzhmYWI1MjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsOTggQEAKKzIwMjItMDItMTggIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBDbGVhbiB1cCAvIG9wdGltaXplIGV2ZW4gbW9yZSBjYWxs
IHNpdGVzIGNvbnN0cnVjdGluZyB2ZWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY4NTIKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlci4KKworICAgICAgICAqIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJQcm94
eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZU1lZGlhUGxheWVyUHJveHk6Om91dE9mQmFu
ZFRyYWNrU291cmNlcyk6CisgICAgICAgICogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVTb3VyY2VC
dWZmZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5
Ojpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5Ojp1cGRhdGVUcmFja0lkcyk6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6Om1lcmdlU3RhdGlzdGljRm9yVGVzdGluZyk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpmZXRjaERpc2tDYWNo
ZUVudHJpZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05vdGlmaWNhdGlvbnMvTmV0d29y
a05vdGlmaWNhdGlvbk1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTm90aWZp
Y2F0aW9uTWFuYWdlcjo6Z2V0T3JpZ2luc1dpdGhQdXNoQW5kTm90aWZpY2F0aW9uUGVybWlzc2lv
bnMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpTdG9yYWdlTWFuYWdlcjo6YWxsU3RvcmFnZUFyZWFJZGVu
dGlmaWVycyBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9UcmFu
c2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpUcmFuc2ll
bnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6Om9yaWdpbnMgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OnN0b3JhZ2VBcmVhSWRlbnRpZmllcnMg
Y29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZTo6ZmluaXNo
T3BlbmluZyk6CisgICAgICAgIChXZWJLaXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGU6OmtleXMgY29u
c3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpTUUxpdGVTdG9yYWdlQXJlYTo6U1FMaXRlU3RvcmFnZUFy
ZWEpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oOgorICAgICAgICAq
IFNoYXJlZC9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpzaG93UGF5bWVudFVJKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb24uY3BwOgorICAgICAgICAoQVBJOjpO
YXZpZ2F0aW9uOjpOYXZpZ2F0aW9uKToKKyAgICAgICAgKEFQSTo6bV9jbGllbnROYXZpZ2F0aW9u
QWN0aXZpdHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XS1NoYXJlU2hlZXQubW06Cisg
ICAgICAgIChhcHBlbmRGaWxlc0FzU2hhcmVhYmxlVVJMcyk6CisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnJlc3RvcmVBcHBIaWdobGlnaHRzQW5kU2Nyb2xsVG9JbmRleCk6CisgICAgICAgICogVUlQ
cm9jZXNzL0ZyYW1lTG9hZFN0YXRlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkU3Rh
dGU6OmRpZEZpbmlzaExvYWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpz
ZW5kQ3JlYXRpb25QYXJhbWV0ZXJzVG9OZXdQcm9jZXNzKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
VXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6cGFyYW1ldGVycyBjb25zdCk6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0b3JNYW5h
Z2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6QXV0aGVudGljYXRvck1hbmFnZXI6OnN0YXJ0RGlz
Y292ZXJ5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0OjpyZW1vdmVBbGxJdGVtcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6Y2xlYXIpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29s
Ojppbml0aWFsaXplTmV3V2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpyZW1vdmVQcm9jZXNzRnJvbU9yaWdpbkNhY2hlU2V0KToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5
Ojpwcm9jZXNzRGlkVGVybWluYXRlT3JGYWlsZWRUb0xhdW5jaCk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFBbmRBcHBseSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEpOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvVGV4
dENoZWNrZXJJT1MubW06CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja1RleHRP
ZlBhcmFncmFwaCk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0FjdGlvblNoZWV0QXNzaXN0
YW50Lm1tOgorICAgICAgICAoLVtXS0FjdGlvblNoZWV0QXNzaXN0YW50IHByZXNlbnRhdGlvblJl
Y3RGb3JFbGVtZW50VXNpbmdDbG9zZXN0SW5kaWNhdGVkUmVjdF0pOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW06CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2Vy
OjpjaGVja1RleHRPZlBhcmFncmFwaCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9BcHBsZVBheS9X
ZWJQYXltZW50Q29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXltZW50Q29v
cmRpbmF0b3I6OnNob3dQYXltZW50VUkpOgorICAgICAgICAqIFdlYlByb2Nlc3MvQXV0b21hdGlv
bi9XZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0
b21hdGlvblNlc3Npb25Qcm94eTo6c2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWQpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlci5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlcjo6Y3JlYXRlUmVtb3RlTWVk
aWFQbGF5ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL21lZGlhL1NvdXJjZUJ1ZmZlclBy
aXZhdGVSZW1vdGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpTb3VyY2VCdWZmZXJQcml2YXRlUmVt
b3RlOjp1cGRhdGVUcmFja0lkcyk6CisgICAgICAgIChXZWJLaXQ6OlNvdXJjZUJ1ZmZlclByaXZh
dGVSZW1vdGU6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdt
ZW50KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TGliV2ViUlRDQ29kZWNzOjpjcmVhdGVFbmNvZGVyKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJs
YXkuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvU2Vzc2lvblN0YXRl
Q29udmVyc2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OnRvRnJhbWVTdGF0ZSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVBy
b3ZpZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2aWNlT3JpZW50YXRpb25VcGRhdGVQ
cm92aWRlcjo6ZGV2aWNlT3JpZW50YXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlcjo6ZGV2aWNlTW90aW9uQ2hhbmdlZCk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJvYXJkT3ZlcnJpZGVz
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVib2FyZE92ZXJyaWRlczo6b3ZlcnJpZGRl
blR5cGVzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlNwZWVjaFN5
bnRoZXNpc0NsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNwZWVjaFN5bnRoZXNpc0Ns
aWVudDo6dm9pY2VMaXN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpGaW5kQ29udHJvbGxlcjo6ZmluZFN0cmluZ01h
dGNoZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xs
ZXI6OmRyYXdSZWN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNvbnN1bWVTYW5kYm94RXh0ZW5zaW9ucyk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlOjpoYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2spOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6
OmZldGNoV2Vic2l0ZURhdGEpOgorCiAyMDIyLTAyLTIyICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5u
QGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwL3dwdC9tZWRpYXJlY29yZGVyL211dGUtdHJhY2tz
Lmh0bWwgZmFpbHMgd2l0aCBXZWJSVENSZW1vdGVWaWRlb0ZyYW1lRW5hYmxlZD10cnVlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwIGIvU291cmNlL1dURi93dGYvV29y
a1F1ZXVlLmNwcAppbmRleCA5ZTEwNmUzOTRkM2Y0NGQyYzI1ZmMzY2ExNTM1NDBlNTIwNGNiMzVi
Li44NjQwNmYzODg0MzcxNGNiMjU1YzM0ZWFlM2Y5MTgxZGFiYTU4ZTM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1dvcmtRdWV1
ZS5jcHAKQEAgLTEwNSw3ICsxMDUsNyBAQCB2b2lkIENvbmN1cnJlbnRXb3JrUXVldWU6OmFwcGx5
KHNpemVfdCBpdGVyYXRpb25zLCBXVEY6OkZ1bmN0aW9uPHZvaWQoc2l6ZV90IGluZAogCiAgICAg
ICAgICAgICBtX3dvcmtlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0aHJlYWRDb3VudCk7CiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhyZWFkQ291bnQ7ICsraSkgewot
ICAgICAgICAgICAgICAgIG1fd29ya2Vycy5hcHBlbmQoVGhyZWFkOjpjcmVhdGUoIlRocmVhZFBv
b2wgV29ya2VyIiwgW3RoaXNdIHsKKyAgICAgICAgICAgICAgICBtX3dvcmtlcnMudW5jaGVja2Vk
QXBwZW5kKFRocmVhZDo6Y3JlYXRlKCJUaHJlYWRQb29sIFdvcmtlciIsIFt0aGlzXSB7CiAgICAg
ICAgICAgICAgICAgICAgIHRocmVhZEJvZHkoKTsKICAgICAgICAgICAgICAgICB9KSk7CiAgICAg
ICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9jZi9MYW5ndWFnZUNGLmNwcCBi
L1NvdXJjZS9XVEYvd3RmL2NmL0xhbmd1YWdlQ0YuY3BwCmluZGV4IGJiYzFlZjZmNGVmZTAzMDU5
Y2U1NTEzMWUwOGMxMDMzMjI0ODhlNTYuLmMwNGM1NWJjNjAzZDI4MWQwY2EzODkyMGViYThjNzll
NWU2OTI5ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2NmL0xhbmd1YWdlQ0YuY3BwCisr
KyBiL1NvdXJjZS9XVEYvd3RmL2NmL0xhbmd1YWdlQ0YuY3BwCkBAIC0xMDIsOSArMTAyLDEwIEBA
IFZlY3RvcjxTdHJpbmc+IHBsYXRmb3JtVXNlclByZWZlcnJlZExhbmd1YWdlcyhTaG91bGRNaW5p
bWl6ZUxhbmd1YWdlcyBzaG91bGRNaW5pCiAgICAgICAgIHJldHVybiB7ICJlbiJfcyB9OwogCiAg
ICAgVmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzOworICAgIGxhbmd1YWdlcy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KHBsYXRmb3JtTGFuZ3VhZ2VzQ291bnQpOwogICAgIGZvciAoQ0ZJbmRleCBpID0g
MDsgaSA8IHBsYXRmb3JtTGFuZ3VhZ2VzQ291bnQ7IGkrKykgewogICAgICAgICBhdXRvIHBsYXRm
b3JtTGFuZ3VhZ2UgPSBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZBcnJheUdldFZhbHVlQXRJ
bmRleChwbGF0Zm9ybUxhbmd1YWdlcy5nZXQoKSwgaSkpOwotICAgICAgICBsYW5ndWFnZXMuYXBw
ZW5kKGh0dHBTdHlsZUxhbmd1YWdlQ29kZShwbGF0Zm9ybUxhbmd1YWdlLCBzaG91bGRNaW5pbWl6
ZUxhbmd1YWdlcykpOworICAgICAgICBsYW5ndWFnZXMudW5jaGVja2VkQXBwZW5kKGh0dHBTdHls
ZUxhbmd1YWdlQ29kZShwbGF0Zm9ybUxhbmd1YWdlLCBzaG91bGRNaW5pbWl6ZUxhbmd1YWdlcykp
OwogICAgIH0KIAogICAgIExPR19XSVRIX1NUUkVBTShMYW5ndWFnZSwgc3RyZWFtIDw8ICJBZnRl
ciBwYXNzaW5nIHRocm91Z2ggaHR0cFN0eWxlTGFuZ3VhZ2VDb2RlOiAiIDw8IGxhbmd1YWdlcyk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29y
ZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxlcGF5L1BheW1lbnRDb29y
ZGluYXRvci5jcHAKaW5kZXggMWEzMjdhOTRiMGI3MWQ0ZWM3NWVhY2M4ZDRhZDc4YTkxYjlmZjY4
NS4uNGE5NDMyMjQ5ZDUyZDUxZDE0N2I4NmU1NzA4ZDUxODg4YmE2NGY1NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9QYXltZW50Q29vcmRpbmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvUGF5bWVudENvb3JkaW5hdG9yLmNw
cApAQCAtMTAxLDExICsxMDEsMTAgQEAgYm9vbCBQYXltZW50Q29vcmRpbmF0b3I6OmJlZ2luUGF5
bWVudFNlc3Npb24oRG9jdW1lbnQmIGRvY3VtZW50LCBQYXltZW50U2Vzc2lvbiYKIHsKICAgICBB
U1NFUlQoIW1fYWN0aXZlU2Vzc2lvbik7CiAKLSAgICBWZWN0b3I8VVJMPiBsaW5rSWNvblVSTHM7
Ci0gICAgZm9yIChhdXRvJiBpY29uIDogTGlua0ljb25Db2xsZWN0b3IgeyBkb2N1bWVudCB9Lmlj
b25zT2ZUeXBlcyh7IExpbmtJY29uVHlwZTo6VG91Y2hJY29uLCBMaW5rSWNvblR5cGU6OlRvdWNo
UHJlY29tcG9zZWRJY29uIH0pKQotICAgICAgICBsaW5rSWNvblVSTHMuYXBwZW5kKGljb24udXJs
KTsKLQotICAgIGF1dG8gc2hvd1BheW1lbnRVSSA9IG1fY2xpZW50LnNob3dQYXltZW50VUkoZG9j
dW1lbnQudXJsKCksIGxpbmtJY29uVVJMcywgcGF5bWVudFJlcXVlc3QpOworICAgIGF1dG8gbGlu
a0ljb25VUkxzID0gTGlua0ljb25Db2xsZWN0b3IgeyBkb2N1bWVudCB9Lmljb25zT2ZUeXBlcyh7
IExpbmtJY29uVHlwZTo6VG91Y2hJY29uLCBMaW5rSWNvblR5cGU6OlRvdWNoUHJlY29tcG9zZWRJ
Y29uIH0pLm1hcChbXShhdXRvJiBpY29uKSB7CisgICAgICAgIHJldHVybiBpY29uLnVybDsKKyAg
ICB9KTsKKyAgICBhdXRvIHNob3dQYXltZW50VUkgPSBtX2NsaWVudC5zaG93UGF5bWVudFVJKGRv
Y3VtZW50LnVybCgpLCBXVEZNb3ZlKGxpbmtJY29uVVJMcyksIHBheW1lbnRSZXF1ZXN0KTsKICAg
ICBQQVlNRU5UX0NPT1JESU5BVE9SX1JFTEVBU0VfTE9HKCJiZWdpblBheW1lbnRTZXNzaW9uKCkg
LT4gJWQiLCBzaG93UGF5bWVudFVJKTsKICAgICBpZiAoIXNob3dQYXltZW50VUkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVw
YXkvY29jb2EvUGF5bWVudE1ldGhvZENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9h
cHBsZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29jb2EubW0KaW5kZXggNzY1M2RlNTRhZjUzOWYy
NTYxZjQyMjM2ZDMwZWM2MWFiNTgwM2RkNS4uMDc2MTZiZGIzNWVlMTU0MTY0MWJjN2E4ZjlkYWRm
NGRhN2I2NmNjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9j
b2NvYS9QYXltZW50TWV0aG9kQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9h
cHBsZXBheS9jb2NvYS9QYXltZW50TWV0aG9kQ29jb2EubW0KQEAgLTEwMSwxMSArMTAxLDggQEAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8QXBwbGVQYXlQYXltZW50TWV0aG9kOjpUeXBlPiBjb252ZXJ0
KFBLUGF5bWVudE1ldGhvZFR5cGUgcGEKICNpZiBIQVZFKFBBU1NLSVRfUEFZTUVOVF9NRVRIT0Rf
QklMTElOR19BRERSRVNTKQogc3RhdGljIHZvaWQgY29udmVydChDTkxhYmVsZWRWYWx1ZTxDTlBv
c3RhbEFkZHJlc3MqPiAqcG9zdGFsQWRkcmVzcywgQXBwbGVQYXlQYXltZW50Q29udGFjdCAmcmVz
dWx0KQogewotICAgIFZlY3RvcjxTdHJpbmc+IGFkZHJlc3NMaW5lOwotICAgIGlmIChOU1N0cmlu
ZyAqc3RyZWV0ID0gcG9zdGFsQWRkcmVzcy52YWx1ZS5zdHJlZXQpIHsKLSAgICAgICAgYWRkcmVz
c0xpbmUuYXBwZW5kKHN0cmVldCk7Ci0gICAgICAgIHJlc3VsdC5hZGRyZXNzTGluZXMgPSBXVEZN
b3ZlKGFkZHJlc3NMaW5lKTsKLSAgICB9CisgICAgaWYgKE5TU3RyaW5nICpzdHJlZXQgPSBwb3N0
YWxBZGRyZXNzLnZhbHVlLnN0cmVldCkKKyAgICAgICAgcmVzdWx0LmFkZHJlc3NMaW5lcyA9IHsg
U3RyaW5nIHsgc3RyZWV0IH0gfTsKICAgICByZXN1bHQuc3ViTG9jYWxpdHkgPSBwb3N0YWxBZGRy
ZXNzLnZhbHVlLnN1YkxvY2FsaXR5OwogICAgIHJlc3VsdC5sb2NhbGl0eSA9IHBvc3RhbEFkZHJl
c3MudmFsdWUuY2l0eTsKICAgICByZXN1bHQuc3ViQWRtaW5pc3RyYXRpdmVBcmVhID0gcG9zdGFs
QWRkcmVzcy52YWx1ZS5zdWJBZG1pbmlzdHJhdGl2ZUFyZWE7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvY2FjaGUvRE9NQ2FjaGUuY3BwCmluZGV4IDQ5ZjM5OGFhZmVmMzdjZDVlOGY4ZWIyNDRkNGUx
MWYzOWYyYThjZDMuLjJkNDZkMWNkYmM3MTdmM2M5Mjk5ZWZhODYzYTU0OTI2MzgzYWY1ZGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGUuY3BwCkBAIC01MTUsMTAgKzUx
NSw4IEBAIFJlY29yZCBET01DYWNoZTo6dG9Db25uZWN0aW9uUmVjb3JkKGNvbnN0IEZldGNoUmVx
dWVzdCYgcmVxdWVzdCwgRmV0Y2hSZXNwb25zZSYKIAogdm9pZCBET01DYWNoZTo6YmF0Y2hQdXRP
cGVyYXRpb24oY29uc3QgRmV0Y2hSZXF1ZXN0JiByZXF1ZXN0LCBGZXRjaFJlc3BvbnNlJiByZXNw
b25zZSwgRE9NQ2FjaGVFbmdpbmU6OlJlc3BvbnNlQm9keSYmIHJlc3BvbnNlQm9keSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChFeGNlcHRpb25Pcjx2b2lkPiYmKT4mJiBjYWxsYmFjaykKIHsKLSAg
ICBWZWN0b3I8UmVjb3JkPiByZWNvcmRzOwotICAgIHJlY29yZHMuYXBwZW5kKHRvQ29ubmVjdGlv
blJlY29yZChyZXF1ZXN0LCByZXNwb25zZSwgV1RGTW92ZShyZXNwb25zZUJvZHkpKSk7Ci0KLSAg
ICBiYXRjaFB1dE9wZXJhdGlvbihXVEZNb3ZlKHJlY29yZHMpLCBXVEZNb3ZlKGNhbGxiYWNrKSk7
CisgICAgYXV0byByZWNvcmQgPSB0b0Nvbm5lY3Rpb25SZWNvcmQocmVxdWVzdCwgcmVzcG9uc2Us
IFdURk1vdmUocmVzcG9uc2VCb2R5KSk7CisgICAgYmF0Y2hQdXRPcGVyYXRpb24oeyBXVEZNb3Zl
KHJlY29yZCkgfSwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCiB2b2lkIERPTUNhY2hlOjpiYXRj
aFB1dE9wZXJhdGlvbihWZWN0b3I8UmVjb3JkPiYmIHJlY29yZHMsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoRXhjZXB0aW9uT3I8dm9pZD4mJik+JiYgY2FsbGJhY2spCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5jcHAKaW5kZXggNjk2OWUwYjUwM2E4N2RkMDM4NWUxODM5
MDg4NDY3MGZlYTA0YzI2Ny4uNTgzZjljODU1NTY3MTc4Y2NlNzJjYWQ0NDc5MjRjZjhiYzNjNGU1
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmNwcApAQCAtNDMs
OCArNDMsOSBAQCBHYW1lcGFkOjpHYW1lcGFkKGNvbnN0IFBsYXRmb3JtR2FtZXBhZCYgcGxhdGZv
cm1HYW1lcGFkKQogICAgICwgbV9heGVzKHBsYXRmb3JtR2FtZXBhZC5heGlzVmFsdWVzKCkuc2l6
ZSgpLCAwLjApCiB7CiAgICAgdW5zaWduZWQgYnV0dG9uQ291bnQgPSBwbGF0Zm9ybUdhbWVwYWQu
YnV0dG9uVmFsdWVzKCkuc2l6ZSgpOworICAgIG1fYnV0dG9ucy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGJ1dHRvbkNvdW50KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnV0dG9uQ291
bnQ7ICsraSkKLSAgICAgICAgbV9idXR0b25zLmFwcGVuZChHYW1lcGFkQnV0dG9uOjpjcmVhdGUo
KSk7CisgICAgICAgIG1fYnV0dG9ucy51bmNoZWNrZWRBcHBlbmQoR2FtZXBhZEJ1dHRvbjo6Y3Jl
YXRlKCkpOwogfQogCiBHYW1lcGFkOjp+R2FtZXBhZCgpID0gZGVmYXVsdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZE1hbmFnZXIuY3BwCmluZGV4IGNjMzc0
ODU4Y2ZlYTFiMjQ0YzA0YmQ0MWIyOTk0OGQyOWFlYTMwMzAuLjU0M2ZlNDg5MTY3ZTdjZTEzZDQ5
NzY4ZmM3ZTE1ZjM0ZDA4MjM2ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
Z2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9n
YW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmNwcApAQCAtNzksMTQgKzc5LDEwIEBAIHZvaWQgR2FtZXBh
ZE1hbmFnZXI6OnBsYXRmb3JtR2FtZXBhZENvbm5lY3RlZChQbGF0Zm9ybUdhbWVwYWQmIHBsYXRm
b3JtR2FtZXBhZCwKIAogdm9pZCBHYW1lcGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkRGlzY29u
bmVjdGVkKFBsYXRmb3JtR2FtZXBhZCYgcGxhdGZvcm1HYW1lcGFkKQogewotICAgIFZlY3RvcjxX
ZWFrUHRyPERPTVdpbmRvdz4+IHdlYWtXaW5kb3dzOwotICAgIGZvciAoYXV0byogZG9tV2luZG93
IDogbV9kb21XaW5kb3dzKQotICAgICAgICB3ZWFrV2luZG93cy5hcHBlbmQoKmRvbVdpbmRvdyk7
Ci0KICAgICBIYXNoU2V0PE5hdmlnYXRvckdhbWVwYWQqPiBub3RpZmllZE5hdmlnYXRvcnM7CiAK
ICAgICAvLyBIYW5kbGUgdGhlIGRpc2Nvbm5lY3QgZm9yIGFsbCBET01XaW5kb3dzIHdpdGggZXZl
bnQgbGlzdGVuZXJzIGFuZCB0aGVpciBOYXZpZ2F0b3JzLgotICAgIGZvciAoYXV0byYgd2luZG93
IDogd2Vha1dpbmRvd3MpIHsKKyAgICBmb3IgKGF1dG8mIHdpbmRvdyA6IGNvcHlUb1ZlY3Rvck9m
PFdlYWtQdHI8RE9NV2luZG93Pj4obV9kb21XaW5kb3dzKSkgewogICAgICAgICAvLyBFdmVudCBk
aXNwYXRjaCBtaWdodCBoYXZlIG1hZGUgdGhpcyB3aW5kb3cgZ28gYXdheS4KICAgICAgICAgaWYg
KCF3aW5kb3cpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE0MywxMSArMTM5LDcgQEAgdm9p
ZCBHYW1lcGFkTWFuYWdlcjo6bWFrZUdhbWVwYWRWaXNpYmxlKFBsYXRmb3JtR2FtZXBhZCYgcGxh
dGZvcm1HYW1lcGFkLCBIYXNoU2UKICAgICBmb3IgKGF1dG8qIG5hdmlnYXRvciA6IG5hdmlnYXRv
clNldCkKICAgICAgICAgbmF2aWdhdG9yLT5nYW1lcGFkQ29ubmVjdGVkKHBsYXRmb3JtR2FtZXBh
ZCk7CiAKLSAgICBWZWN0b3I8V2Vha1B0cjxET01XaW5kb3c+PiB3ZWFrV2luZG93czsKLSAgICBm
b3IgKGF1dG8qIGRvbVdpbmRvdyA6IG1fZG9tV2luZG93cykKLSAgICAgICAgd2Vha1dpbmRvd3Mu
YXBwZW5kKCpkb21XaW5kb3cpOwotCi0gICAgZm9yIChhdXRvJiB3aW5kb3cgOiB3ZWFrV2luZG93
cykgeworICAgIGZvciAoYXV0byYgd2luZG93IDogY29weVRvVmVjdG9yT2Y8V2Vha1B0cjxET01X
aW5kb3c+PihtX2RvbVdpbmRvd3MpKSB7CiAgICAgICAgIC8vIEV2ZW50IGRpc3BhdGNoIG1pZ2h0
IGhhdmUgbWFkZSB0aGlzIHdpbmRvdyBnbyBhd2F5LgogICAgICAgICBpZiAoIXdpbmRvdykKICAg
ICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2UuY3BwCmluZGV4IDdhYTYzMmI3ZWMwNDdiZTQ2MDhiNTFhMDk0ZWExYTRl
NTdhMjYyOWIuLjU3NmFlOGYzNDYzYWU1ZjQ0ZDUzMTgwNTdlZjAzMzYxYzJiZTMwNDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKQEAg
LTQ1LDYgKzQ1LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9D
QVRFRF9JTVBMKElEQkRhdGFiYXNlKTsKIAorc3RhdGljIFZlY3RvcjxTdHJpbmc+IHNvcnRBbmRS
ZW1vdmVEdXBsaWNhdGVzKFZlY3RvcjxTdHJpbmc+JiYgdmVjdG9yKQoreworICAgIHN0ZDo6c29y
dCh2ZWN0b3IuYmVnaW4oKSwgdmVjdG9yLmVuZCgpLCBXVEY6OmNvZGVQb2ludENvbXBhcmVMZXNz
VGhhbik7CisgICAgcmVtb3ZlUmVwZWF0ZWRFbGVtZW50cyh2ZWN0b3IpOworICAgIHJldHVybiBX
VEZNb3ZlKHZlY3Rvcik7Cit9CisKIFJlZjxJREJEYXRhYmFzZT4gSURCRGF0YWJhc2U6OmNyZWF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJDbGllbnQ6OklEQkNvbm5lY3Rp
b25Qcm94eSYgY29ubmVjdGlvblByb3h5LCBjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRh
KQogewogICAgIGF1dG8gZGF0YWJhc2UgPSBhZG9wdFJlZigqbmV3IElEQkRhdGFiYXNlKGNvbnRl
eHQsIGNvbm5lY3Rpb25Qcm94eSwgcmVzdWx0RGF0YSkpOwpAQCAtMTAyLDkgKzEwOSw3IEBAIFJl
ZjxET01TdHJpbmdMaXN0PiBJREJEYXRhYmFzZTo6b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKGNhbkN1cnJlbnRUaHJlYWRBY2Nlc3NUaHJlYWRMb2NhbERhdGEob3JpZ2lu
VGhyZWFkKCkpKTsKIAotICAgIGF1dG8gb2JqZWN0U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6
OmNyZWF0ZSgpOwotICAgIGZvciAoYXV0byYgbmFtZSA6IG1faW5mby5vYmplY3RTdG9yZU5hbWVz
KCkpCi0gICAgICAgIG9iamVjdFN0b3JlTmFtZXMtPmFwcGVuZChuYW1lKTsKKyAgICBhdXRvIG9i
amVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUobV9pbmZvLm9iamVjdFN0b3Jl
TmFtZXMoKSk7CiAgICAgb2JqZWN0U3RvcmVOYW1lcy0+c29ydCgpOwogICAgIHJldHVybiBvYmpl
Y3RTdG9yZU5hbWVzOwogfQpAQCAtMTc1LDE4ICsxODAsMTIgQEAgRXhjZXB0aW9uT3I8UmVmPElE
QlRyYW5zYWN0aW9uPj4gSURCRGF0YWJhc2U6OnRyYW5zYWN0aW9uKFN0cmluZ09yVmVjdG9yT2ZT
dHJpbmcKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiRmFp
bGVkIHRvIGV4ZWN1dGUgJ3RyYW5zYWN0aW9uJyBvbiAnSURCRGF0YWJhc2UnOiBUaGUgZGF0YWJh
c2UgY29ubmVjdGlvbiBpcyBjbG9zaW5nLiJfcyB9OwogCiAgICAgVmVjdG9yPFN0cmluZz4gb2Jq
ZWN0U3RvcmVzOwotICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+
PihzdG9yZU5hbWVzKSkKLSAgICAgICAgb2JqZWN0U3RvcmVzID0gV1RGTW92ZShzdGQ6OmdldDxW
ZWN0b3I8U3RyaW5nPj4oc3RvcmVOYW1lcykpOwotICAgIGVsc2UKLSAgICAgICAgb2JqZWN0U3Rv
cmVzLmFwcGVuZChXVEZNb3ZlKHN0ZDo6Z2V0PFN0cmluZz4oc3RvcmVOYW1lcykpKTsKLQotICAg
IC8vIEl0IGlzIHZhbGlkIGZvciBqYXZhc2NyaXB0IHRvIHBhc3MgaW4gYSBsaXN0IG9mIG9iamVj
dCBzdG9yZSBuYW1lcyB3aXRoIHRoZSBzYW1lIG5hbWUgbGlzdGVkIHR3aWNlLAotICAgIC8vIHNv
IHdlIG5lZWQgdG8gcHV0IHRoZW0gYWxsIGluIGEgc2V0IHRvIGdldCBhIHVuaXF1ZSBsaXN0Lgot
ICAgIEhhc2hTZXQ8U3RyaW5nPiBvYmplY3RTdG9yZVNldDsKLSAgICBmb3IgKGF1dG8mIG9iamVj
dFN0b3JlIDogb2JqZWN0U3RvcmVzKQotICAgICAgICBvYmplY3RTdG9yZVNldC5hZGQob2JqZWN0
U3RvcmUpOwotCi0gICAgb2JqZWN0U3RvcmVzID0gY29weVRvVmVjdG9yKG9iamVjdFN0b3JlU2V0
KTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oc3RvcmVO
YW1lcykpIHsKKyAgICAgICAgLy8gSXQgaXMgdmFsaWQgZm9yIEphdmFTY3JpcHQgdG8gcGFzcyBp
biBhIGxpc3Qgb2Ygb2JqZWN0IHN0b3JlIG5hbWVzIHdpdGggdGhlIHNhbWUgbmFtZSBsaXN0ZWQg
dHdpY2UsCisgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gZHJvcCB0aGUgZHVwbGljYXRlcy4KKyAg
ICAgICAgb2JqZWN0U3RvcmVzID0gc29ydEFuZFJlbW92ZUR1cGxpY2F0ZXMoc3RkOjpnZXQ8VmVj
dG9yPFN0cmluZz4+KFdURk1vdmUoc3RvcmVOYW1lcykpKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
b2JqZWN0U3RvcmVzID0geyBzdGQ6OmdldDxTdHJpbmc+KFdURk1vdmUoc3RvcmVOYW1lcykpIH07
CiAKICAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlTmFtZSA6IG9iamVjdFN0b3JlcykgewogICAg
ICAgICBpZiAobV9pbmZvLmhhc09iamVjdFN0b3JlKG9iamVjdFN0b3JlTmFtZSkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmgKaW5kZXggNGI5Nzg1MzY5
ZDE5MGE2YjE5NjkxZDEzN2FlMTU2N2U1YzM3OTVkOS4uMDJmNzMzNDAzZjNhZDMzNGZmMjc5NTAz
N2ZhZTdmNjU1YTY3YTc0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCS2V5RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQktleURhdGEuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiSURCS2V5LmgiCiAj
aW5jbHVkZSA8dmFyaWFudD4KKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0ZFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIApAQCAtMTE3LDQx
ICsxMTgsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKICAg
ICB9CiAKLSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFZlY3Rvcjx1
bnNpZ25lZD4gaGFzaENvZGVzOwotICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKHN0YXRpY19jYXN0
PHVuc2lnbmVkPihtX3R5cGUpKTsKLSAgICAgICAgaGFzaENvZGVzLmFwcGVuZChtX2lzTnVsbCA/
IDEgOiAwKTsKLSAgICAgICAgaGFzaENvZGVzLmFwcGVuZChtX2lzRGVsZXRlZFZhbHVlID8gMSA6
IDApOwotICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgICAgICBjYXNlIEluZGV4ZWREQjo6
S2V5VHlwZTo6SW52YWxpZDoKLSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6Ok1heDoK
LSAgICAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6Ok1pbjoKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TnVtYmVyOgotICAgICAgICBjYXNl
IEluZGV4ZWREQjo6S2V5VHlwZTo6RGF0ZToKLSAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQo
U3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5PHNpemVvZihkb3VibGUpPigmc3RkOjpnZXQ8ZG91Ymxl
PihtX3ZhbHVlKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5kZXhlZERC
OjpLZXlUeXBlOjpTdHJpbmc6Ci0gICAgICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKFN0cmluZ0hh
c2g6Omhhc2goc3RkOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKSkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpCaW5hcnk6IHsKLSAgICAgICAgICAg
IGF1dG8qIGRhdGEgPSBzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSkuZGF0
YSgpOwotICAgICAgICAgICAgaWYgKCFkYXRhKQotICAgICAgICAgICAgICAgIGhhc2hDb2Rlcy5h
cHBlbmQoMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaGFzaENvZGVzLmFw
cGVuZChTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnkoZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgSW5kZXhlZERC
OjpLZXlUeXBlOjpBcnJheToKLSAgICAgICAgICAgIGZvciAoYXV0byYga2V5IDogc3RkOjpnZXQ8
VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKSkKLSAgICAgICAgICAgICAgICBoYXNoQ29kZXMu
YXBwZW5kKGtleS5oYXNoKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KGhhc2hDb2Rlcy5kYXRhKCksIGhh
c2hDb2Rlcy5zaXplKCkgKiBzaXplb2YodW5zaWduZWQpKTsKLSAgICB9Ci0KICAgICBTdHJpbmcg
c3RyaW5nKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gSW5kZXhlZERC
OjpLZXlUeXBlOjpTdHJpbmcpOwpAQCAtMTk2LDggKzE2MiwzNSBAQCBwcml2YXRlOgogICAgIHN0
ZDo6dmFyaWFudDxWZWN0b3I8SURCS2V5RGF0YT4sIFN0cmluZywgZG91YmxlLCBUaHJlYWRTYWZl
RGF0YUJ1ZmZlcj4gbV92YWx1ZTsKIH07CiAKK2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hl
ciwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSkKK3sKKyAgICBhZGQoaGFzaGVyLCBrZXlEYXRh
LnR5cGUoKSk7CisgICAgYWRkKGhhc2hlciwga2V5RGF0YS5pc051bGwoKSk7CisgICAgc3dpdGNo
IChrZXlEYXRhLnR5cGUoKSkgeworICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpJbnZhbGlk
OgorICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpNYXg6CisgICAgY2FzZSBJbmRleGVkREI6
OktleVR5cGU6Ok1pbjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbmRleGVkREI6OktleVR5
cGU6Ok51bWJlcjoKKyAgICAgICAgYWRkKGhhc2hlciwga2V5RGF0YS5udW1iZXIoKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpEYXRlOgorICAgICAgICBh
ZGQoaGFzaGVyLCBrZXlEYXRhLmRhdGUoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW5k
ZXhlZERCOjpLZXlUeXBlOjpTdHJpbmc6CisgICAgICAgIGFkZChoYXNoZXIsIGtleURhdGEuc3Ry
aW5nKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6Qmlu
YXJ5OgorICAgICAgICBhZGQoaGFzaGVyLCBrZXlEYXRhLmJpbmFyeSgpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6OkFycmF5OgorICAgICAgICBhZGQoaGFz
aGVyLCBrZXlEYXRhLmFycmF5KCkpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKIHN0cnVj
dCBJREJLZXlEYXRhSGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgSURCS2V5
RGF0YSYgYSkgeyByZXR1cm4gYS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChj
b25zdCBJREJLZXlEYXRhJiBhKSB7IHJldHVybiBjb21wdXRlSGFzaChhKTsgfQogICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IElEQktleURhdGEmIGEsIGNvbnN0IElEQktleURhdGEmIGIpIHsg
cmV0dXJuIGEgPT0gYjsgfQogICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0Vt
cHR5T3JEZWxldGVkID0gZmFsc2U7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IDE0MzUxNDBhNWNiNGExYTFkNDA3
YTJkYjI5ZDE1YmRmMmQ1MmMwYjYuLmNlNjNjNmE1NmIxNGQ1YmUwMzIyNTczNzI1MzIyYjgyZjBk
ZGRkMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5jcHAKQEAgLTEyNiwxNCArMTI2LDExIEBAIFJlZjxET01TdHJpbmdMaXN0PiBJ
REJPYmplY3RTdG9yZTo6aW5kZXhOYW1lcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNhbkN1cnJl
bnRUaHJlYWRBY2Nlc3NUaHJlYWRMb2NhbERhdGEobV90cmFuc2FjdGlvbi5kYXRhYmFzZSgpLm9y
aWdpblRocmVhZCgpKSk7CiAKLSAgICBhdXRvIGluZGV4TmFtZXMgPSBET01TdHJpbmdMaXN0Ojpj
cmVhdGUoKTsKLQotICAgIGlmICghbV9kZWxldGVkKSB7Ci0gICAgICAgIGZvciAoYXV0byYgbmFt
ZSA6IG1faW5mby5pbmRleE5hbWVzKCkpCi0gICAgICAgICAgICBpbmRleE5hbWVzLT5hcHBlbmQo
bmFtZSk7Ci0gICAgICAgIGluZGV4TmFtZXMtPnNvcnQoKTsKLSAgICB9CisgICAgaWYgKG1fZGVs
ZXRlZCkKKyAgICAgICAgcmV0dXJuIERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogCisgICAgYXV0
byBpbmRleE5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKG1faW5mby5pbmRleE5hbWVzKCkp
OworICAgIGluZGV4TmFtZXMtPnNvcnQoKTsKICAgICByZXR1cm4gaW5kZXhOYW1lczsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24u
Y3BwCmluZGV4IDZjMTEyMWI3MzEwZjczN2Y3Yjk1YmVjZWU4NDU0ZTZhYzUwZGYyYjYuLmNlODY3
YjFiN2U2ZDZmMTU0OWVjZDcyNjEyN2RjYzc2OTk1YTlkMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKQEAgLTEyMSwxMiAr
MTIxLDggQEAgUmVmPERPTVN0cmluZ0xpc3Q+IElEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZU5h
bWVzKCkgY29uc3QKIHsKICAgICBBU1NFUlQoY2FuQ3VycmVudFRocmVhZEFjY2Vzc1RocmVhZExv
Y2FsRGF0YShtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWQoKSkpOwogCi0gICAgY29uc3QgVmVjdG9y
PFN0cmluZz4gbmFtZXMgPSBpc1ZlcnNpb25DaGFuZ2UoKSA/IG1fZGF0YWJhc2UtPmluZm8oKS5v
YmplY3RTdG9yZU5hbWVzKCkgOiBtX2luZm8ub2JqZWN0U3RvcmVzKCk7Ci0KLSAgICBSZWY8RE9N
U3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwot
ICAgIGZvciAoYXV0byYgbmFtZSA6IG5hbWVzKQotICAgICAgICBvYmplY3RTdG9yZU5hbWVzLT5h
cHBlbmQobmFtZSk7Ci0KKyAgICBhdXRvIG5hbWVzID0gaXNWZXJzaW9uQ2hhbmdlKCkgPyBtX2Rh
dGFiYXNlLT5pbmZvKCkub2JqZWN0U3RvcmVOYW1lcygpIDogbV9pbmZvLm9iamVjdFN0b3Jlcygp
OworICAgIGF1dG8gb2JqZWN0U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZShXVEZN
b3ZlKG5hbWVzKSk7CiAgICAgb2JqZWN0U3RvcmVOYW1lcy0+c29ydCgpOwogICAgIHJldHVybiBv
YmplY3RTdG9yZU5hbWVzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAKaW5kZXggMTlhMDY5ZTIzYjM5
ZGJiNGE3MDY1ZDhkZTc4ZDdlZTQ5M2M2OTgxOC4uYjgyNWVjODAwNTE0ODAyOGUyYjA3YjE5ZGM3
ODM5MmE0M2E4Y2JhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNv
bnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCkBAIC01NTUsMTEgKzU1NSwxMCBA
QCBib29sIE1lZGlhQ29udHJvbHNIb3N0OjpzaG93TWVkaWFDb250cm9sc0NvbnRleHRNZW51KEhU
TUxFbGVtZW50JiB0YXJnZXQsIFN0cmluZwogCiAgICAgaWYgKG9wdGlvbnNKU09OT2JqZWN0LT5n
ZXRCb29sZWFuKCJpbmNsdWRlTGFuZ3VhZ2VzIl9zKS52YWx1ZV9vcihmYWxzZSkpIHsKICAgICAg
ICAgaWYgKGF1dG8qIGF1ZGlvVHJhY2tzID0gbWVkaWFFbGVtZW50LmF1ZGlvVHJhY2tzKCk7IGF1
ZGlvVHJhY2tzICYmIGF1ZGlvVHJhY2tzLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgICAgIFZl
Y3RvcjxNZW51SXRlbT4gbGFuZ3VhZ2VNZW51SXRlbXM7Ci0KICAgICAgICAgICAgIGF1dG8mIGNh
cHRpb25QcmVmZXJlbmNlcyA9IHBhZ2UtPmdyb3VwKCkuZW5zdXJlQ2FwdGlvblByZWZlcmVuY2Vz
KCk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGF1ZGlvVHJhY2sgOiBjYXB0aW9uUHJlZmVyZW5j
ZXMuc29ydGVkVHJhY2tMaXN0Rm9yTWVudShhdWRpb1RyYWNrcykpCi0gICAgICAgICAgICAgICAg
bGFuZ3VhZ2VNZW51SXRlbXMuYXBwZW5kKGNyZWF0ZU1lbnVJdGVtKGF1ZGlvVHJhY2ssIGNhcHRp
b25QcmVmZXJlbmNlcy5kaXNwbGF5TmFtZUZvclRyYWNrKGF1ZGlvVHJhY2suZ2V0KCkpLCBhdWRp
b1RyYWNrLT5lbmFibGVkKCkpKTsKKyAgICAgICAgICAgIGF1dG8gbGFuZ3VhZ2VNZW51SXRlbXMg
PSBjYXB0aW9uUHJlZmVyZW5jZXMuc29ydGVkVHJhY2tMaXN0Rm9yTWVudShhdWRpb1RyYWNrcyku
bWFwKFsmXShhdXRvJiBhdWRpb1RyYWNrKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0
ZU1lbnVJdGVtKGF1ZGlvVHJhY2ssIGNhcHRpb25QcmVmZXJlbmNlcy5kaXNwbGF5TmFtZUZvclRy
YWNrKGF1ZGlvVHJhY2suZ2V0KCkpLCBhdWRpb1RyYWNrLT5lbmFibGVkKCkpOworICAgICAgICAg
ICAgfSk7CiAKICAgICAgICAgICAgIGlmICghbGFuZ3VhZ2VNZW51SXRlbXMuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgICAgIGl0ZW1zLmFwcGVuZChjcmVhdGVTdWJtZW51KFdFQl9VSV9TVFJJTkdf
S0VZKCJMYW5ndWFnZXMiLCAiTGFuZ3VhZ2VzIChNZWRpYSBDb250cm9scyBNZW51KSIsICJMYW5n
dWFnZXMgbWVkaWEgY29udHJvbHMgY29udGV4dCBtZW51IHRpdGxlIiksICJnbG9iZSJfcywgV1RG
TW92ZShsYW5ndWFnZU1lbnVJdGVtcykpKTsKQEAgLTU2OCwxNSArNTY3LDEzIEBAIGJvb2wgTWVk
aWFDb250cm9sc0hvc3Q6OnNob3dNZWRpYUNvbnRyb2xzQ29udGV4dE1lbnUoSFRNTEVsZW1lbnQm
IHRhcmdldCwgU3RyaW5nCiAKICAgICBpZiAob3B0aW9uc0pTT05PYmplY3QtPmdldEJvb2xlYW4o
ImluY2x1ZGVTdWJ0aXRsZXMiX3MpLnZhbHVlX29yKGZhbHNlKSkgewogICAgICAgICBpZiAoYXV0
byogdGV4dFRyYWNrcyA9IG1lZGlhRWxlbWVudC50ZXh0VHJhY2tzKCk7IHRleHRUcmFja3MgJiYg
dGV4dFRyYWNrcy0+bGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIFZlY3RvcjxNZW51SXRlbT4gc3Vi
dGl0bGVNZW51SXRlbXM7Ci0KICAgICAgICAgICAgIGF1dG8mIGNhcHRpb25QcmVmZXJlbmNlcyA9
IHBhZ2UtPmdyb3VwKCkuZW5zdXJlQ2FwdGlvblByZWZlcmVuY2VzKCk7CiAgICAgICAgICAgICBh
dXRvIHNvcnRlZFRleHRUcmFja3MgPSBjYXB0aW9uUHJlZmVyZW5jZXMuc29ydGVkVHJhY2tMaXN0
Rm9yTWVudSh0ZXh0VHJhY2tzLCB7IFRleHRUcmFjazo6S2luZDo6U3VidGl0bGVzLCBUZXh0VHJh
Y2s6OktpbmQ6OkNhcHRpb25zLCBUZXh0VHJhY2s6OktpbmQ6OkRlc2NyaXB0aW9ucyB9KTsKICAg
ICAgICAgICAgIGJvb2wgYWxsVHJhY2tzRGlzYWJsZWQgPSBub3RGb3VuZCA9PSBzb3J0ZWRUZXh0
VHJhY2tzLmZpbmRJZihbXSAoY29uc3QgYXV0byYgdGV4dFRyYWNrKSB7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRleHRUcmFjay0+bW9kZSgpID09IFRleHRUcmFjazo6TW9kZTo6U2hvd2luZzsK
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgYm9vbCB1c2VzQXV0b21hdGljVHJhY2sgPSBj
YXB0aW9uUHJlZmVyZW5jZXMuY2FwdGlvbkRpc3BsYXlNb2RlKCkgPT0gQ2FwdGlvblVzZXJQcmVm
ZXJlbmNlczo6QXV0b21hdGljICYmIGFsbFRyYWNrc0Rpc2FibGVkOwotICAgICAgICAgICAgZm9y
IChhdXRvJiB0ZXh0VHJhY2sgOiBzb3J0ZWRUZXh0VHJhY2tzKSB7CisgICAgICAgICAgICBhdXRv
IHN1YnRpdGxlTWVudUl0ZW1zID0gc29ydGVkVGV4dFRyYWNrcy5tYXAoWyZdKGF1dG8mIHRleHRU
cmFjaykgewogICAgICAgICAgICAgICAgIGJvb2wgY2hlY2tlZCA9IGZhbHNlOwogICAgICAgICAg
ICAgICAgIGlmIChhbGxUcmFja3NEaXNhYmxlZCAmJiB0ZXh0VHJhY2sgPT0gJlRleHRUcmFjazo6
Y2FwdGlvbk1lbnVPZmZJdGVtKCkgJiYgKGNhcHRpb25QcmVmZXJlbmNlcy5jYXB0aW9uRGlzcGxh
eU1vZGUoKSA9PSBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpGb3JjZWRPbmx5IHx8IGNhcHRpb25Q
cmVmZXJlbmNlcy5jYXB0aW9uRGlzcGxheU1vZGUoKSA9PSBDYXB0aW9uVXNlclByZWZlcmVuY2Vz
OjpNYW51YWwpKQogICAgICAgICAgICAgICAgICAgICBjaGVja2VkID0gdHJ1ZTsKQEAgLTU4NCw4
ICs1ODEsOCBAQCBib29sIE1lZGlhQ29udHJvbHNIb3N0OjpzaG93TWVkaWFDb250cm9sc0NvbnRl
eHRNZW51KEhUTUxFbGVtZW50JiB0YXJnZXQsIFN0cmluZwogICAgICAgICAgICAgICAgICAgICBj
aGVja2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBlbHNlIGlmICghdXNlc0F1dG9tYXRpY1Ry
YWNrICYmIHRleHRUcmFjay0+bW9kZSgpID09IFRleHRUcmFjazo6TW9kZTo6U2hvd2luZykKICAg
ICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgc3VidGl0
bGVNZW51SXRlbXMuYXBwZW5kKGNyZWF0ZU1lbnVJdGVtKHRleHRUcmFjaywgY2FwdGlvblByZWZl
cmVuY2VzLmRpc3BsYXlOYW1lRm9yVHJhY2sodGV4dFRyYWNrLmdldCgpKSwgY2hlY2tlZCkpOwot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVNZW51SXRlbSh0ZXh0
VHJhY2ssIGNhcHRpb25QcmVmZXJlbmNlcy5kaXNwbGF5TmFtZUZvclRyYWNrKHRleHRUcmFjay5n
ZXQoKSksIGNoZWNrZWQpOworICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIGlmICghc3Vi
dGl0bGVNZW51SXRlbXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGl0ZW1zLmFwcGVuZChj
cmVhdGVTdWJtZW51KFdFQl9VSV9TVFJJTkdfS0VZKCJTdWJ0aXRsZXMiLCAiU3VidGl0bGVzIChN
ZWRpYSBDb250cm9scyBNZW51KSIsICJTdWJ0aXRsZXMgbWVkaWEgY29udHJvbHMgY29udGV4dCBt
ZW51IHRpdGxlIiksICJjYXB0aW9ucy5idWJibGUiX3MsIFdURk1vdmUoc3VidGl0bGVNZW51SXRl
bXMpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01l
ZGlhU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFT
b3VyY2UuY3BwCmluZGV4IDkxMjc0N2Y0MDZjMjk1OTQ5OTczYjViYjEzNDlkYmNhNjc0MWMxMzUu
LmEyZTY1OGE5MmY5OTdkN2Y0YjQzZTE3MDNmNGEwZTA5NDkxN2IwZTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCkBAIC0xMDUx
LDEwICsxMDUxLDkgQEAgdm9pZCBNZWRpYVNvdXJjZTo6b25SZWFkeVN0YXRlQ2hhbmdlKFJlYWR5
U3RhdGUgb2xkU3RhdGUsIFJlYWR5U3RhdGUgbmV3U3RhdGUpCiAKIFZlY3RvcjxQbGF0Zm9ybVRp
bWVSYW5nZXM+IE1lZGlhU291cmNlOjphY3RpdmVSYW5nZXMoKSBjb25zdAogewotICAgIFZlY3Rv
cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IGFjdGl2ZVJhbmdlczsKLSAgICBmb3IgKGF1dG8mIHNvdXJj
ZUJ1ZmZlciA6ICptX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMpCi0gICAgICAgIGFjdGl2ZVJhbmdlcy5h
cHBlbmQoc291cmNlQnVmZmVyLT5idWZmZXJlZEludGVybmFsKCkucmFuZ2VzKCkpOwotICAgIHJl
dHVybiBhY3RpdmVSYW5nZXM7CisgICAgcmV0dXJuIFdURjo6bWFwKCptX2FjdGl2ZVNvdXJjZUJ1
ZmZlcnMsIFtdKGF1dG8mIHNvdXJjZUJ1ZmZlcikgeworICAgICAgICByZXR1cm4gc291cmNlQnVm
ZmVyLT5idWZmZXJlZEludGVybmFsKCkucmFuZ2VzKCk7CisgICAgfSk7CiB9CiAKIEV4Y2VwdGlv
bk9yPFJlZjxTb3VyY2VCdWZmZXJQcml2YXRlPj4gTWVkaWFTb3VyY2U6OmNyZWF0ZVNvdXJjZUJ1
ZmZlclByaXZhdGUoY29uc3QgQ29udGVudFR5cGUmIGluY29taW5nVHlwZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1hcC5oCmluZGV4IGVhZjQ5MzE1OTdk
MjY4NTIzYzY2N2JkOWNkY2M0Y2VhNjU0MzM2OTUuLmFmMWUxMDQ1ODE3ODdmMTVmNmYxZjM4NWIy
NTcyNDQ0ZDg4NTk1ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
b3VyY2UvU2FtcGxlTWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJj
ZS9TYW1wbGVNYXAuaApAQCAtOTEsNiArOTEsNyBAQCBwdWJsaWM6CiAgICAgY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZXMucmJlZ2luKCk7IH0K
ICAgICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiBtX3NhbXBsZXMucmVuZCgpOyB9
CiAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyByZXR1cm4gbV9zYW1w
bGVzLnJlbmQoKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVz
LnNpemUoKTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgaXRlcmF0b3IgZmluZFNhbXBsZVdpdGhE
ZWNvZGVLZXkoY29uc3QgS2V5VHlwZSYpOwogICAgIFdFQkNPUkVfRVhQT1JUIGl0ZXJhdG9yIGZp
bmRTYW1wbGVBZnRlckRlY29kZUtleShjb25zdCBLZXlUeXBlJik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlckxpc3QuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyTGlzdC5oCmluZGV4IGZj
NmUwNzNhYjkwZTc2ZDE4MTVmODg5NmI2ZjY2MDk2ZGYyZmRkZDUuLjNhNjhiNWUwYmFkZTQzNTFm
MDY3NDY3YzcyYWYyZGJiYzIxZmQ1YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyTGlzdC5oCkBAIC00Nyw4ICs0Nyw5IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgUmVmPFNvdXJjZUJ1ZmZlckxpc3Q+IGNyZWF0ZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0Kik7CiAgICAgdmlydHVhbCB+U291cmNlQnVmZmVyTGlzdCgpOwogCi0gICAg
dW5zaWduZWQgbG9uZyBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9Ci0g
ICAgU291cmNlQnVmZmVyKiBpdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IChpbmRleCA8IG1fbGlzdC5zaXplKCkpID8gbV9saXN0W2luZGV4XS5nZXQoKSA6IG51bGxwdHI7
IH0KKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9
CisKKyAgICBTb3VyY2VCdWZmZXIqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IChpbmRleCA8IG1fbGlzdC5zaXplKCkpID8gbV9saXN0W2luZGV4XS5nZXQoKSA6IG51bGxwdHI7
IH0KIAogICAgIHZvaWQgYWRkKFJlZjxTb3VyY2VCdWZmZXI+JiYpOwogICAgIHZvaWQgcmVtb3Zl
KFNvdXJjZUJ1ZmZlciYpOwpAQCAtNTYsOCArNTcsMTEgQEAgcHVibGljOgogICAgIHZvaWQgY2xl
YXIoKTsKICAgICB2b2lkIHN3YXAoVmVjdG9yPFJlZlB0cjxTb3VyY2VCdWZmZXI+PiYpOwogCi0g
ICAgVmVjdG9yPFJlZlB0cjxTb3VyY2VCdWZmZXI+Pjo6aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVy
biBtX2xpc3QuYmVnaW4oKTsgfQotICAgIFZlY3RvcjxSZWZQdHI8U291cmNlQnVmZmVyPj46Oml0
ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fbGlzdC5lbmQoKTsgfQorICAgIGF1dG8gYmVnaW4oKSB7
IHJldHVybiBtX2xpc3QuYmVnaW4oKTsgfQorICAgIGF1dG8gZW5kKCkgeyByZXR1cm4gbV9saXN0
LmVuZCgpOyB9CisgICAgYXV0byBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5iZWdpbigp
OyB9CisgICAgYXV0byBlbmQoKSBjb25zdCB7IHJldHVybiBtX2xpc3QuZW5kKCk7IH0KKyAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KIAogICAgIC8vIEV2
ZW50VGFyZ2V0IGludGVyZmFjZQogICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0
SW50ZXJmYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gU291cmNlQnVmZmVyTGlzdEV2ZW50VGFy
Z2V0SW50ZXJmYWNlVHlwZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9z
cGVlY2gvU3BlZWNoU3ludGhlc2lzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNo
L1NwZWVjaFN5bnRoZXNpcy5jcHAKaW5kZXggZWFmM2EyZTFlNzk4YTQ4MWY3NjhiMzNjNWZkMjlk
M2M3Y2JhYjNhZS4uODJjMWEzYTBjMDcyNTVjMWU4MGRhNjFkNTkwYmE5Yzk0MWNjMDY5ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuY3Bw
CkBAIC05Myw5ICs5MywxMCBAQCBjb25zdCBWZWN0b3I8UmVmPFNwZWVjaFN5bnRoZXNpc1ZvaWNl
Pj4mIFNwZWVjaFN5bnRoZXNpczo6Z2V0Vm9pY2VzKCkKICAgICAgICAgcmV0dXJuIG1fdm9pY2VM
aXN0OwogCiAgICAgLy8gSWYgdGhlIHZvaWNlTGlzdCBpcyBlbXB0eSwgdGhhdCdzIHRoZSBjdWUg
dG8gZ2V0IHRoZSB2b2ljZXMgZnJvbSB0aGUgcGxhdGZvcm0gYWdhaW4uCi0gICAgZm9yIChhdXRv
JiB2b2ljZSA6IG1fc3BlZWNoU3ludGhlc2lzQ2xpZW50ID8gbV9zcGVlY2hTeW50aGVzaXNDbGll
bnQtPnZvaWNlTGlzdCgpIDogZW5zdXJlUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcigpLnZvaWNl
TGlzdCgpKQotICAgICAgICBtX3ZvaWNlTGlzdC5hcHBlbmQoU3BlZWNoU3ludGhlc2lzVm9pY2U6
OmNyZWF0ZSgqdm9pY2UpKTsKLQorICAgIGF1dG8mIHZvaWNlTGlzdCA9IG1fc3BlZWNoU3ludGhl
c2lzQ2xpZW50ID8gbV9zcGVlY2hTeW50aGVzaXNDbGllbnQtPnZvaWNlTGlzdCgpIDogZW5zdXJl
UGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcigpLnZvaWNlTGlzdCgpOworICAgIG1fdm9pY2VMaXN0
ID0gdm9pY2VMaXN0Lm1hcChbXShhdXRvJiB2b2ljZSkgeworICAgICAgICByZXR1cm4gU3BlZWNo
U3ludGhlc2lzVm9pY2U6OmNyZWF0ZSgqdm9pY2UpOworICAgIH0pOwogICAgIHJldHVybiBtX3Zv
aWNlTGlzdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gv
Y29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRhc2subW0gYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFzay5tbQppbmRleCBmMWI5Njk1ODA1
N2QyZmU2MDQ0ZDJjN2IyNTlkYjZjNWNlYjQ0ZWZlLi5iNjIyOTkwOGU3NGFjMDI3OTlkNzc0MmIx
NDMyOWZkMzNkYzQ3NmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVj
aC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFzay5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3NwZWVjaC9jb2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFzay5tbQpAQCAtMTI4LDkg
KzEyOCw3IEBAIC0gKHZvaWQpY2FsbGJhY2tXaXRoVHJhbnNjcmlwdGlvbnM6KE5TQXJyYXk8U0ZU
cmFuc2NyaXB0aW9uICo+ICopdHJhbnNjcmlwdGlvbnMKICAgICAgICAgaWYgKGFsdGVybmF0aXZl
cy5zaXplKCkgPT0gX21heEFsdGVybmF0aXZlcykKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0K
LSAgICBWZWN0b3I8U3BlZWNoUmVjb2duaXRpb25SZXN1bHREYXRhPiBkYXRhczsKLSAgICBkYXRh
cy5hcHBlbmQoU3BlZWNoUmVjb2duaXRpb25SZXN1bHREYXRhIHsgV1RGTW92ZShhbHRlcm5hdGl2
ZXMpLCBib29sKGlzRmluYWwpIH0pOwotICAgIF9kZWxlZ2F0ZUNhbGxiYWNrKFNwZWVjaFJlY29n
bml0aW9uVXBkYXRlOjpjcmVhdGVSZXN1bHQoX2lkZW50aWZpZXIsIFdURk1vdmUoZGF0YXMpKSk7
CisgICAgX2RlbGVnYXRlQ2FsbGJhY2soU3BlZWNoUmVjb2duaXRpb25VcGRhdGU6OmNyZWF0ZVJl
c3VsdChfaWRlbnRpZmllciwgeyBTcGVlY2hSZWNvZ25pdGlvblJlc3VsdERhdGEgeyBXVEZNb3Zl
KGFsdGVybmF0aXZlcyksICEhaXNGaW5hbCB9IH0pKTsKIH0KIAogLSAodm9pZClhdWRpb1NhbXBs
ZXNBdmFpbGFibGU6KENNU2FtcGxlQnVmZmVyUmVmKXNhbXBsZUJ1ZmZlcgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvY29jb2EvV2ViU3BlZWNoUmVjb2duaXplclRh
c2tNb2NrLm1tIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvY29jb2EvV2ViU3BlZWNo
UmVjb2duaXplclRhc2tNb2NrLm1tCmluZGV4IGJjNWM2MjE5YjVkYWRjM2IxY2RjNTkwZDY1Yzg5
N2I3MjUwYjFlMjEuLmM3Mjc1OWI3NjdhYTk1ODdkNzM3ZWE0MDI5YTMxNjdmOGM5N2YyZTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL2NvY29hL1dlYlNwZWVjaFJl
Y29nbml6ZXJUYXNrTW9jay5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9j
b2NvYS9XZWJTcGVlY2hSZWNvZ25pemVyVGFza01vY2subW0KQEAgLTYzLDExICs2Myw4IEBAIC0g
KHZvaWQpYXVkaW9TYW1wbGVzQXZhaWxhYmxlOihDTVNhbXBsZUJ1ZmZlclJlZilzYW1wbGVCdWZm
ZXIKICAgICB9CiAKICAgICAvLyBGYWtlIHNvbWUgcmVjb2duaXRpb24gcmVzdWx0cy4KLSAgICBW
ZWN0b3I8U3BlZWNoUmVjb2duaXRpb25BbHRlcm5hdGl2ZURhdGE+IGFsdGVybmF0aXZlczsKLSAg
ICBhbHRlcm5hdGl2ZXMuYXBwZW5kKFNwZWVjaFJlY29nbml0aW9uQWx0ZXJuYXRpdmVEYXRhIHsg
IlRlc3QiLCAxLjAgfSk7Ci0gICAgVmVjdG9yPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0RGF0YT4g
ZGF0YXM7Ci0gICAgZGF0YXMuYXBwZW5kKFNwZWVjaFJlY29nbml0aW9uUmVzdWx0RGF0YSB7IFdU
Rk1vdmUoYWx0ZXJuYXRpdmVzKSwgdHJ1ZSAgfSk7Ci0gICAgX2RlbGVnYXRlQ2FsbGJhY2soU3Bl
ZWNoUmVjb2duaXRpb25VcGRhdGU6OmNyZWF0ZVJlc3VsdChfaWRlbnRpZmllciwgV1RGTW92ZShk
YXRhcykpKTsKKyAgICBTcGVlY2hSZWNvZ25pdGlvbkFsdGVybmF0aXZlRGF0YSBhbHRlcm5hdGl2
ZSB7ICJUZXN0IiwgMS4wIH07CisgICAgX2RlbGVnYXRlQ2FsbGJhY2soU3BlZWNoUmVjb2duaXRp
b25VcGRhdGU6OmNyZWF0ZVJlc3VsdChfaWRlbnRpZmllciwgeyBTcGVlY2hSZWNvZ25pdGlvblJl
c3VsdERhdGEgeyB7IFdURk1vdmUoYWx0ZXJuYXRpdmUpIH0sIHRydWUgfSB9KSk7CiAKICAgICBp
ZiAoIV9kb011bHRpcGxlUmVjb2duaXRpb25zKQogICAgICAgICBbc2VsZiBhYm9ydF07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAppbmRl
eCBlMzU5YTA0M2IyZTNjZjM5ZjljMjZiYzU5ZTk4ZjEwNWUxMzJjMTA1Li44YmNlNjY3MDY2YTNm
Nzc2ZjBlYWJhOTY2YjgxYTc0NmE5NzVlMzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
bmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKQEAgLTE2NCwxMCArMTY0LDggQEAgc3Rh
dGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kRnVuYyhjb25zdCBUcmFuc2Zvcm1P
cGVyYXRpb25zJiBmcm9tLCBjb24KICAgICBpZiAoY29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24g
PT0gQ29tcG9zaXRlT3BlcmF0aW9uOjpBZGQpIHsKICAgICAgICAgQVNTRVJUKGNvbnRleHQucHJv
Z3Jlc3MgPT0gMS4wKTsKICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyByZXN1bHRPcGVyYXRp
b25zOwotICAgICAgICBmb3IgKGF1dG8gb3BlcmF0aW9uIDogZnJvbS5vcGVyYXRpb25zKCkpCi0g
ICAgICAgICAgICByZXN1bHRPcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQob3BlcmF0aW9u
KTsKLSAgICAgICAgZm9yIChhdXRvIG9wZXJhdGlvbiA6IHRvLm9wZXJhdGlvbnMoKSkKLSAgICAg
ICAgICAgIHJlc3VsdE9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChvcGVyYXRpb24pOwor
ICAgICAgICByZXN1bHRPcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmRWZWN0b3IoZnJvbS5v
cGVyYXRpb25zKCkpOworICAgICAgICByZXN1bHRPcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBl
bmRWZWN0b3IodG8ub3BlcmF0aW9ucygpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdE9wZXJhdGlv
bnM7CiAgICAgfQogICAgIGF1dG8gYm94U2l6ZSA9IGlzPFJlbmRlckJveD4oY29udGV4dC5jbGll
bnQtPnJlbmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PigqY29udGV4dC5jbGllbnQtPnJl
bmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKS5zaXplKCkgOiBMYXlvdXRTaXplKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vRG9jdW1lbnRUaW1lbGluZXNDb250cm9sbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xs
ZXIuY3BwCmluZGV4IGI1ZmQyYWVmMTAwMDEyZGE5YzRiZGIyMWU3YWQwNDFhMzY2NDE2YmYuLjcw
OTQ1M2JjNjYyNTJmOTU5ODI0YmE5NGVjYTdhMzMwMDhjOWNhM2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lc0NvbnRyb2xsZXIuY3Bw
CkBAIC05OCw5ICs5OCw3IEBAIHZvaWQgRG9jdW1lbnRUaW1lbGluZXNDb250cm9sbGVyOjp1cGRh
dGVBbmltYXRpb25zQW5kU2VuZEV2ZW50cyhSZWR1Y2VkUmVzb2x1dGlvCiAgICAgQVNTRVJUKCFt
X3RpbWVsaW5lcy5oYXNOdWxsUmVmZXJlbmNlcygpKTsKIAogICAgIC8vIFdlIG5lZWQgdG8gY29w
eSBtX3RpbWVsaW5lcyBiZWZvcmUgaXRlcmF0aW5nIG92ZXIgaXRzIG1lbWJlcnMgc2luY2UgdGhl
IHN0ZXBzIGluIHRoaXMgcHJvY2VkdXJlIG1heSBtdXRhdGUgbV90aW1lbGluZXMuCi0gICAgVmVj
dG9yPFJlZjxEb2N1bWVudFRpbWVsaW5lPj4gcHJvdGVjdGVkVGltZWxpbmVzOwotICAgIGZvciAo
YXV0byYgdGltZWxpbmUgOiBtX3RpbWVsaW5lcykKLSAgICAgICAgcHJvdGVjdGVkVGltZWxpbmVz
LmFwcGVuZCh0aW1lbGluZSk7CisgICAgYXV0byBwcm90ZWN0ZWRUaW1lbGluZXMgPSBjb3B5VG9W
ZWN0b3JPZjxSZWY8RG9jdW1lbnRUaW1lbGluZT4+KG1fdGltZWxpbmVzKTsKIAogICAgIC8vIFdl
IG5lZWQgdG8gZnJlZXplIHRoZSBjdXJyZW50IHRpbWUgZXZlbiBpZiBubyBhbmltYXRpb24gaXMg
cnVubmluZy4KICAgICAvLyBkb2N1bWVudC50aW1lbGluZS5jdXJyZW50VGltZSBtYXkgYmUgY2Fs
bGVkIGZyb20gYSByQUYgY2FsbGJhY2sgYW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
bmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tl
eWZyYW1lRWZmZWN0LmNwcAppbmRleCA0NDQ0Y2NkMDg3YWU0ODA0ODBjNTg5ZmY0ZDY4OGUzZmM3
YzFhMjZhLi4zZDA5MWVlZTUzODc0NDIwM2Y3MzhiODZjMDc2NzY1N2Y0ZWNmMDhkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAKQEAgLTM3NSw4ICszNzUs
NyBAQCBzdGF0aWMgaW5saW5lIEV4Y2VwdGlvbk9yPHZvaWQ+IHByb2Nlc3NQcm9wZXJ0eUluZGV4
ZWRLZXlmcmFtZXMoSlNHbG9iYWxPYmplY3QmCiAgICAgICAgIGNvbXB1dGVNaXNzaW5nS2V5ZnJh
bWVPZmZzZXRzKHByb3BlcnR5S2V5ZnJhbWVzKTsKIAogICAgICAgICAvLyA3LiBBZGQga2V5ZnJh
bWVzIGluIHByb3BlcnR5IGtleWZyYW1lcyB0byBwcm9jZXNzZWQga2V5ZnJhbWVzLgotICAgICAg
ICBmb3IgKGF1dG8mIGtleWZyYW1lIDogcHJvcGVydHlLZXlmcmFtZXMpCi0gICAgICAgICAgICBw
YXJzZWRLZXlmcmFtZXMuYXBwZW5kKFdURk1vdmUoa2V5ZnJhbWUpKTsKKyAgICAgICAgcGFyc2Vk
S2V5ZnJhbWVzLmFwcGVuZFZlY3Rvcihwcm9wZXJ0eUtleWZyYW1lcyk7CiAgICAgfQogCiAgICAg
Ly8gMy4gU29ydCBwcm9jZXNzZWQga2V5ZnJhbWVzIGJ5IHRoZSBjb21wdXRlZCBrZXlmcmFtZSBv
ZmZzZXQgb2YgZWFjaCBrZXlmcmFtZSBpbiBpbmNyZWFzaW5nIG9yZGVyLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uLmNwcAppbmRl
eCA1MzQ5ZWYzOGZlNjkwNjRkZDQ1M2ZkNjhkN2RjNmE4ZWU3NzNkOWVjLi5jMDVjZDg5NDE1ZmY0
MTIwNGUzYzNjOGM3NzNmNDhkMTEzNjNjMDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uLmNwcApAQCAtNDYsOCArNDYsNyBA
QCBDb250ZW50RXh0ZW5zaW9uOjpDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgaWRlbnRp
ZmllciwgUmVmPENvbXBpbGVkQ29udGVudAogICAgICwgbV9leHRlbnNpb25CYXNlVVJMKFdURk1v
dmUoZXh0ZW5zaW9uQmFzZVVSTCkpCiB7CiAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlciBpbnRl
cnByZXRlcihtX2NvbXBpbGVkRXh0ZW5zaW9uLT51cmxGaWx0ZXJzQnl0ZWNvZGUoKSk7Ci0gICAg
Zm9yICh1aW50NjRfdCBhY3Rpb24gOiBpbnRlcnByZXRlci5hY3Rpb25zTWF0Y2hpbmdFdmVyeXRo
aW5nKCkpCi0gICAgICAgIG1fdW5pdmVyc2FsQWN0aW9ucy5hcHBlbmQoYWN0aW9uKTsKKyAgICBt
X3VuaXZlcnNhbEFjdGlvbnMgPSBjb3B5VG9WZWN0b3IoaW50ZXJwcmV0ZXIuYWN0aW9uc01hdGNo
aW5nRXZlcnl0aGluZygpKTsKIAogICAgIGlmIChzaG91bGRDb21waWxlQ1NTID09IFNob3VsZENv
bXBpbGVDU1M6OlllcykKICAgICAgICAgY29tcGlsZUdsb2JhbERpc3BsYXlOb25lU3R5bGVTaGVl
dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oCmluZGV4IGJiMTI3M2E1ZmQzZWU4ZTY4ODBi
YTc2N2FmOTI5MTdlYmRkYTc0OGYuLmY5YTc2MDYwNDA4OWIwY2UyZjY5Zjg3Njg2NTRmMTI2ODIz
N2E2N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgKQEAgLTU4LDYgKzU4LDcgQEAgcHVi
bGljOgogICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmVu
ZCgpOyB9CiAgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9
CiAgICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV92YWx1ZXMuZW5kKCk7IH0KKyAgICBzaXpl
X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQogCiAgICAgdm9pZCBh
cHBlbmQoUmVmPENTU1ZhbHVlPiYmKTsKICAgICB2b2lkIHByZXBlbmQoUmVmPENTU1ZhbHVlPiYm
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25O
b2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmNw
cAppbmRleCA2YWI1Y2I2NzRkNDE1M2Q4MjI1MmYyNTg3ZWU0NmZjZjVhYWM4YzRhLi43OWYyYTg4
MjYwY2VhZWYwZDU4MDE1NzY2MTM5YzA3NTc2NjdjMDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwCkBAIC02MjAsMTQgKzYyMCwxMSBA
QCB2b2lkIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpob2lzdENoaWxkcmVuV2l0aE9wZXJhdG9yKENh
bGNPcGVyYXRvciBvcCkKIAogICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4g
bmV3Q2hpbGRyZW47CiAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pIHsKLSAgICAg
ICAgaWYgKGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZCkgJiYgZG93bmNhc3Q8Q1NTQ2Fs
Y09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKS5jYWxjT3BlcmF0b3IoKSA9PSBvcCkgewotICAg
ICAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4o
Y2hpbGQuZ2V0KCkpLmNoaWxkcmVuKCk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNoaWxkVG9N
b3ZlIDogY2hpbGRyZW4pCi0gICAgICAgICAgICAgICAgbmV3Q2hpbGRyZW4uYXBwZW5kKFdURk1v
dmUoY2hpbGRUb01vdmUpKTsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIGlmIChpczxDU1NDYWxj
T3BlcmF0aW9uTm9kZT4oY2hpbGQpICYmIGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihj
aGlsZC5nZXQoKSkuY2FsY09wZXJhdG9yKCkgPT0gb3ApCisgICAgICAgICAgICBuZXdDaGlsZHJl
bi5hcHBlbmRWZWN0b3IoZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgp
KS5jaGlsZHJlbigpKTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgbmV3Q2hpbGRyZW4uYXBw
ZW5kKFdURk1vdmUoY2hpbGQpKTsKICAgICB9Ci0gICAgCiAgICAgbmV3Q2hpbGRyZW4uc2hyaW5r
VG9GaXQoKTsKICAgICBtX2NoaWxkcmVuID0gV1RGTW92ZShuZXdDaGlsZHJlbik7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NU3RyaW5nTGlzdC5oIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RPTVN0cmluZ0xpc3QuaAppbmRleCA2OWNiMmQ3ZjkzMmUwMGEyNjVlMDhkOGZmM2Ix
Y2I1MGMxMjc3Y2U1Li4yOGVjNmY2ZDY2ODRhYzAzYmU1NDEzMmIwYjMzMWQ2ZDUxOWUzNjE3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NU3RyaW5nTGlzdC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdMaXN0LmgKQEAgLTQwLDkgKzQwLDE0IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRE9NU3RyaW5nTGlzdCk7CiAgICAgfQogCisg
ICAgc3RhdGljIFJlZjxET01TdHJpbmdMaXN0PiBjcmVhdGUoVmVjdG9yPFN0cmluZz4mJiBzdHJp
bmdzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRE9NU3RyaW5nTGlzdChX
VEZNb3ZlKHN0cmluZ3MpKSk7CisgICAgfQorCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJpbmdzLmlzRW1wdHkoKTsgfQogICAgIHZvaWQgY2xlYXIoKSB7IG1fc3RyaW5n
cy5jbGVhcigpOyB9Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBzdHJpbmcpIHsgbV9z
dHJpbmdzLmFwcGVuZChzdHJpbmcpOyB9CisgICAgdm9pZCBhcHBlbmQoU3RyaW5nJiYgc3RyaW5n
KSB7IG1fc3RyaW5ncy5hcHBlbmQoV1RGTW92ZShzdHJpbmcpKTsgfQogICAgIHZvaWQgc29ydCgp
OwogCiAgICAgLy8gSW1wbGVtZW50cyB0aGUgSURMLgpAQCAtNTMsNyArNTgsMTEgQEAgcHVibGlj
OgogICAgIG9wZXJhdG9yIGNvbnN0IFZlY3RvcjxTdHJpbmc+JigpIGNvbnN0IHsgcmV0dXJuIG1f
c3RyaW5nczsgfQogCiBwcml2YXRlOgotICAgIERPTVN0cmluZ0xpc3QoKSB7IH0KKyAgICBET01T
dHJpbmdMaXN0KCkgPSBkZWZhdWx0OworICAgIGV4cGxpY2l0IERPTVN0cmluZ0xpc3QoVmVjdG9y
PFN0cmluZz4mJiBzdHJpbmdzKQorICAgICAgICA6IG1fc3RyaW5ncyhXVEZNb3ZlKHN0cmluZ3Mp
KQorICAgIHsKKyAgICB9CiAKICAgICBWZWN0b3I8U3RyaW5nPiBtX3N0cmluZ3M7CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnRQYXRoLmNwcAppbmRleCA0NmZiNjQ1ZTA1MzM3NTgxZjlmYTM0NTIzMDNhMmZl
MzgwZjQ2YzA2Li5lY2JjYzAwZjM2ZjA3NmUzMjBiNmFkMTZhZDFkOWEwYmYwMzhlMjc4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRQYXRoLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRXZlbnRQYXRoLmNwcApAQCAtMjc0LDExICsyNzQsMTEgQEAgVmVjdG9yPEV2ZW50
VGFyZ2V0Kj4gRXZlbnRQYXRoOjpjb21wdXRlUGF0aFVuY2xvc2VkVG9UYXJnZXQoY29uc3QgRXZl
bnRUYXJnZXQmIHQKIAogRXZlbnRQYXRoOjpFdmVudFBhdGgoY29uc3QgVmVjdG9yPEV2ZW50VGFy
Z2V0Kj4mIHRhcmdldHMpCiB7Ci0gICAgZm9yIChhdXRvKiB0YXJnZXQgOiB0YXJnZXRzKSB7Cisg
ICAgbV9wYXRoID0gdGFyZ2V0cy5tYXAoWyZdKGF1dG8qIHRhcmdldCkgewogICAgICAgICBBU1NF
UlQodGFyZ2V0KTsKICAgICAgICAgQVNTRVJUKCFpczxOb2RlPih0YXJnZXQpKTsKLSAgICAgICAg
bV9wYXRoLmFwcGVuZChFdmVudENvbnRleHQgeyBFdmVudENvbnRleHQ6OlR5cGU6Ok5vcm1hbCwg
bnVsbHB0ciwgdGFyZ2V0LCAqdGFyZ2V0cy5iZWdpbigpLCAwIH0pOwotICAgIH0KKyAgICAgICAg
cmV0dXJuIEV2ZW50Q29udGV4dCB7IEV2ZW50Q29udGV4dDo6VHlwZTo6Tm9ybWFsLCBudWxscHRy
LCB0YXJnZXQsICp0YXJnZXRzLmJlZ2luKCksIDAgfTsKKyAgICB9KTsKIH0KIAogc3RhdGljIE5v
ZGUqIG1vdmVPdXRPZkFsbFNoYWRvd1Jvb3RzKE5vZGUmIHN0YXJ0aW5nTm9kZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9GdWxsc2NyZWVuTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRnVsbHNjcmVlbk1hbmFnZXIuY3BwCmluZGV4IGVjZTQ4ZTQyNjc5NzA5NWRhNzA5
YTA0ZGE2ODZhNGZlMGJjMjkyOGMuLjBlOWJiOTQ0MWMzN2RmNTNkNDcxODM4Y2NjMWFhZGNiNjM3
NzhiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9GdWxsc2NyZWVuTWFuYWdlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Z1bGxzY3JlZW5NYW5hZ2VyLmNwcApAQCAtMjY1
LDkgKzI2NSw4IEBAIHZvaWQgRnVsbHNjcmVlbk1hbmFnZXI6OmNhbmNlbEZ1bGxzY3JlZW4oKQog
CiAgICAgLy8gVG8gYWNoaWV2ZSB0aGF0IGFpbSwgcmVtb3ZlIGFsbCB0aGUgZWxlbWVudHMgZnJv
bSB0aGUgdG9wIGRvY3VtZW50J3Mgc3RhY2sgZXhjZXB0IGZvciB0aGUgZmlyc3QgYmVmb3JlCiAg
ICAgLy8gY2FsbGluZyB3ZWJraXRFeGl0RnVsbHNjcmVlbigpOgotICAgIFZlY3RvcjxSZWZQdHI8
RWxlbWVudD4+IHJlcGxhY2VtZW50RnVsbHNjcmVlbkVsZW1lbnRTdGFjazsKLSAgICByZXBsYWNl
bWVudEZ1bGxzY3JlZW5FbGVtZW50U3RhY2suYXBwZW5kKHRvcERvY3VtZW50LmZ1bGxzY3JlZW5N
YW5hZ2VyKCkuZnVsbHNjcmVlbkVsZW1lbnQoKSk7Ci0gICAgdG9wRG9jdW1lbnQuZnVsbHNjcmVl
bk1hbmFnZXIoKS5tX2Z1bGxzY3JlZW5FbGVtZW50U3RhY2suc3dhcChyZXBsYWNlbWVudEZ1bGxz
Y3JlZW5FbGVtZW50U3RhY2spOworICAgIFJlZlB0ciBmdWxsc2NyZW5FbGVtZW50ID0gdG9wRG9j
dW1lbnQuZnVsbHNjcmVlbk1hbmFnZXIoKS5mdWxsc2NyZWVuRWxlbWVudCgpOworICAgIHRvcERv
Y3VtZW50LmZ1bGxzY3JlZW5NYW5hZ2VyKCkubV9mdWxsc2NyZWVuRWxlbWVudFN0YWNrID0geyBX
VEZNb3ZlKGZ1bGxzY3JlbkVsZW1lbnQpIH07CiAKICAgICB0b3BEb2N1bWVudC5mdWxsc2NyZWVu
TWFuYWdlcigpLmV4aXRGdWxsc2NyZWVuKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTG9hZGFibGVTY3JpcHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0xvYWRhYmxlU2Ny
aXB0LmNwcAppbmRleCAxYmRkZTFlYjVkNmEwN2YxMTczODliOTljNzVlY2IwMWI2MGY4ODA5Li40
MWY0M2NlNjY4NTAzMGVkOWQzOWRmMDViOWZjOTIzYjEyMzk1ZGVmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTG9hZGFibGVTY3JpcHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Mb2FkYWJsZVNjcmlwdC5jcHAKQEAgLTUxLDEyICs1MSw4IEBAIHZvaWQgTG9hZGFibGVTY3Jp
cHQ6OnJlbW92ZUNsaWVudChMb2FkYWJsZVNjcmlwdENsaWVudCYgY2xpZW50KQogCiB2b2lkIExv
YWRhYmxlU2NyaXB0Ojpub3RpZnlDbGllbnRGaW5pc2hlZCgpCiB7Ci0gICAgUmVmUHRyPExvYWRh
YmxlU2NyaXB0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotCi0gICAgVmVjdG9yPExvYWRhYmxlU2Ny
aXB0Q2xpZW50Kj4gdmVjdG9yOwotICAgIGZvciAoYXV0byYgcGFpciA6IG1fY2xpZW50cykKLSAg
ICAgICAgdmVjdG9yLmFwcGVuZChwYWlyLmtleSk7Ci0gICAgZm9yIChhdXRvJiBjbGllbnQgOiB2
ZWN0b3IpCisgICAgUmVmIHByb3RlY3RlZFRoaXMgeyAqdGhpcyB9OworICAgIGZvciAoYXV0byYg
Y2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50cy52YWx1ZXMoKSkpCiAgICAgICAgIGNsaWVu
dC0+bm90aWZ5RmluaXNoZWQoKnRoaXMpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhZGlvQnV0
dG9uR3JvdXBzLmNwcAppbmRleCA1MGY0NjMwZjg5ZWM4OTVkZjFjZTVhYjhlZDU4MTg5YjdhZmJm
NjYyLi4xMjI2M2UyNTZlZTU2YTQ1MmMzMjI4MTI1Y2FkZDVmMTcwZjQ1ZjBmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFkaW9CdXR0b25Hcm91cHMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9SYWRpb0J1dHRvbkdyb3Vwcy5jcHAKQEAgLTU5LDkgKzU5LDcgQEAgaW5saW5l
IGJvb2wgUmFkaW9CdXR0b25Hcm91cDo6aXNWYWxpZCgpIGNvbnN0CiAKIFZlY3RvcjxSZWY8SFRN
TElucHV0RWxlbWVudD4+IFJhZGlvQnV0dG9uR3JvdXA6Om1lbWJlcnMoKSBjb25zdAogewotICAg
IFZlY3RvcjxSZWY8SFRNTElucHV0RWxlbWVudD4+IHNvcnRlZE1lbWJlcnM7Ci0gICAgZm9yIChh
dXRvJiBtZW1iZXIgOiBtX21lbWJlcnMpCi0gICAgICAgIHNvcnRlZE1lbWJlcnMuYXBwZW5kKG1l
bWJlcik7CisgICAgYXV0byBzb3J0ZWRNZW1iZXJzID0gY29weVRvVmVjdG9yT2Y8UmVmPEhUTUxJ
bnB1dEVsZW1lbnQ+PihtX21lbWJlcnMpOwogICAgIHN0ZDo6c29ydChzb3J0ZWRNZW1iZXJzLmJl
Z2luKCksIHNvcnRlZE1lbWJlcnMuZW5kKCksIFtdKGF1dG8mIGEsIGF1dG8mIGIpIHsKICAgICAg
ICAgcmV0dXJuIGlzX2x0KHRyZWVPcmRlcjxDb21wb3NlZFRyZWU+KGEsIGIpKTsKICAgICB9KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGlyZWN0b3J5RmlsZUxpc3RDcmVhdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRGlyZWN0b3J5RmlsZUxpc3RDcmVhdG9yLmNwcApp
bmRleCA5ZDNkYTE4NTNjM2E2MzIwZmViMzE5NzUxNjJlNDM1YWU5M2ZmZGQxLi45ODVmN2E2MmYw
YzFmMzk3NTU4MmViM2Y5Yjk4OTc1MTU2MTU2Njc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0RpcmVjdG9yeUZpbGVMaXN0Q3JlYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9EaXJlY3RvcnlGaWxlTGlzdENyZWF0b3IuY3BwCkBAIC04NiwxMyArODYsMTEgQEAgc3Rh
dGljIFZlY3RvcjxGaWxlSW5mb3JtYXRpb24+IGdhdGhlckZpbGVJbmZvcm1hdGlvbihjb25zdCBW
ZWN0b3I8RmlsZUNob29zZXJGaWwKIHN0YXRpYyBSZWY8RmlsZUxpc3Q+IHRvRmlsZUxpc3QoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBWZWN0b3I8RmlsZUluZm9ybWF0aW9uPiYgZmlsZXMpCiB7
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBWZWN0b3I8UmVmPEZpbGU+PiBmaWxl
T2JqZWN0czsKLSAgICBmb3IgKGF1dG8mIGZpbGUgOiBmaWxlcykgeworICAgIGF1dG8gZmlsZU9i
amVjdHMgPSBmaWxlcy5tYXAoW2RvY3VtZW50XShhdXRvJiBmaWxlKSB7CiAgICAgICAgIGlmIChm
aWxlLnJlbGF0aXZlUGF0aC5pc051bGwoKSkKLSAgICAgICAgICAgIGZpbGVPYmplY3RzLmFwcGVu
ZChGaWxlOjpjcmVhdGUoZG9jdW1lbnQsIGZpbGUucGF0aCwgeyB9LCBmaWxlLmRpc3BsYXlOYW1l
KSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZpbGVPYmplY3RzLmFwcGVuZChGaWxlOjpj
cmVhdGVXaXRoUmVsYXRpdmVQYXRoKGRvY3VtZW50LCBmaWxlLnBhdGgsIGZpbGUucmVsYXRpdmVQ
YXRoKSk7Ci0gICAgfQorICAgICAgICAgICAgcmV0dXJuIEZpbGU6OmNyZWF0ZShkb2N1bWVudCwg
ZmlsZS5wYXRoLCB7IH0sIGZpbGUuZGlzcGxheU5hbWUpOworICAgICAgICByZXR1cm4gRmlsZTo6
Y3JlYXRlV2l0aFJlbGF0aXZlUGF0aChkb2N1bWVudCwgZmlsZS5wYXRoLCBmaWxlLnJlbGF0aXZl
UGF0aCk7CisgICAgfSk7CiAgICAgcmV0dXJuIEZpbGVMaXN0OjpjcmVhdGUoV1RGTW92ZShmaWxl
T2JqZWN0cykpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxl
Y3RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3Bw
CmluZGV4IGM0YjA4NGQyZGU3MWZkMzE5ZmU4YzA2OWI0NWZmN2ZjY2NlZGU1ZWMuLjcyYWZlMDRl
MDdmODljOGMyNGFmM2Y4YjhjYWQzOGNlMjk2YThkMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFNlbGVjdEVsZW1lbnQuY3BwCkBAIC02MzQsOSArNjM0LDkgQEAgdm9pZCBIVE1MU2VsZWN0
RWxlbWVudDo6c2F2ZUxhc3RTZWxlY3Rpb24oKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgbV9sYXN0T25DaGFuZ2VTZWxlY3Rpb24uY2xlYXIoKTsKLSAgICBmb3IgKGF1dG8mIGVsZW1l
bnQgOiBsaXN0SXRlbXMoKSkKLSAgICAgICAgbV9sYXN0T25DaGFuZ2VTZWxlY3Rpb24uYXBwZW5k
KGlzPEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkgJiYgZG93bmNhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnQ+KCplbGVtZW50KS5zZWxlY3RlZCgpKTsKKyAgICBtX2xhc3RPbkNoYW5nZVNlbGVjdGlv
biA9IGxpc3RJdGVtcygpLm1hcChbXShhdXRvJiBlbGVtZW50KSB7CisgICAgICAgIHJldHVybiBp
czxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxPcHRpb25FbGVt
ZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBIVE1MU2VsZWN0
RWxlbWVudDo6c2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgoaW50IGluZGV4KQpAQCAtNjQ1
LDEwICs2NDUsOSBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3Rpb25B
bmNob3JJbmRleChpbnQgaW5kZXgpCiAKICAgICAvLyBDYWNoZSB0aGUgc2VsZWN0aW9uIHN0YXRl
IHNvIHdlIGNhbiByZXN0b3JlIHRoZSBvbGQgc2VsZWN0aW9uIGFzIHRoZSBuZXcKICAgICAvLyBz
ZWxlY3Rpb24gcGl2b3RzIGFyb3VuZCB0aGlzIGFuY2hvciBpbmRleC4KLSAgICBtX2NhY2hlZFN0
YXRlRm9yQWN0aXZlU2VsZWN0aW9uLmNsZWFyKCk7Ci0KLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQg
OiBsaXN0SXRlbXMoKSkKLSAgICAgICAgbV9jYWNoZWRTdGF0ZUZvckFjdGl2ZVNlbGVjdGlvbi5h
cHBlbmQoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0
aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCkpOworICAgIG1fY2FjaGVkU3RhdGVGb3JB
Y3RpdmVTZWxlY3Rpb24gPSBsaXN0SXRlbXMoKS5tYXAoW10oYXV0byYgZWxlbWVudCkgeworICAg
ICAgICByZXR1cm4gaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSAmJiBkb3duY2FzdDxI
VE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCk7CisgICAgfSk7CiB9CiAKIHZv
aWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KGludCBpbmRl
eCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKaW5kZXggMDViMjczNzlmMmQ5MjE5NDQ4
OTMyYzQ2YWIzM2IyZWYwMzFhZmM2YS4uNTliZmM2ZTBmMWU1OTA0M2RjYzViYmRhMmQyMmFhZTM2
NWE2MTMxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKQEAgLTExMiwxMCArMTEy
LDkgQEAgdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LAogCiBWZWN0b3I8c3RkOjpvcHRpb25hbDxJbWFn
ZUJpdG1hcEJhY2tpbmc+PiBJbWFnZUJpdG1hcDo6ZGV0YWNoQml0bWFwcyhWZWN0b3I8UmVmUHRy
PEltYWdlQml0bWFwPj4mJiBiaXRtYXBzKQogewotICAgIFZlY3RvcjxzdGQ6Om9wdGlvbmFsPElt
YWdlQml0bWFwQmFja2luZz4+IGJ1ZmZlcnM7Ci0gICAgZm9yIChhdXRvJiBiaXRtYXAgOiBiaXRt
YXBzKQotICAgICAgICBidWZmZXJzLmFwcGVuZChiaXRtYXAtPnRha2VJbWFnZUJpdG1hcEJhY2tp
bmcoKSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcnM7CisgICAgcmV0dXJuIFdURjo6bWFwKFdURk1vdmUo
Yml0bWFwcyksIFtdKGF1dG8mJiBiaXRtYXApIHsKKyAgICAgICAgcmV0dXJuIGJpdG1hcC0+dGFr
ZUltYWdlQml0bWFwQmFja2luZygpOworICAgIH0pOwogfQogCiB2b2lkIEltYWdlQml0bWFwOjpj
cmVhdGVQcm9taXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQsIEltYWdlQml0bWFwOjpTb3VyY2UmJiBzb3VyY2UsIEltYWdlQml0bWFwT3B0aW9ucyYmIG9w
dGlvbnMsIGludCBzeCwgaW50IHN5LCBpbnQgc3csIGludCBzaCwgSW1hZ2VCaXRtYXA6OlByb21p
c2UmJiBwcm9taXNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAppbmRleCA2MTE0NjAyNzdmNjY3OWE0OTFlMGY5
ODMxNzc5NzMwMDdlYmJkZGM2Li5mNzMzNjRmMzg2MGMyNmI5MzY2MThjNGY3ZTFhMTc4MjVlOGQ1
MDEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmNwcApAQCAtMzAyMSw5ICszMDIxLDggQEAgc3RkOjpvcHRpb25h
bDxWZWN0b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmdldEF0dGFjaGUKICAgICB9OwogICAgIFZlY3RvcjxSZWZQdHI8V2ViR0xTaGFkZXI+PiBzaGFk
ZXJPYmplY3RzOwogICAgIGZvciAoYXV0byBzaGFkZXJUeXBlIDogc2hhZGVyVHlwZXMpIHsKLSAg
ICAgICAgUmVmUHRyPFdlYkdMU2hhZGVyPiBzaGFkZXIgPSBwcm9ncmFtLmdldEF0dGFjaGVkU2hh
ZGVyKHNoYWRlclR5cGUpOwotICAgICAgICBpZiAoc2hhZGVyKQotICAgICAgICAgICAgc2hhZGVy
T2JqZWN0cy5hcHBlbmQoc2hhZGVyKTsKKyAgICAgICAgaWYgKFJlZlB0ciBzaGFkZXIgPSBwcm9n
cmFtLmdldEF0dGFjaGVkU2hhZGVyKHNoYWRlclR5cGUpKQorICAgICAgICAgICAgc2hhZGVyT2Jq
ZWN0cy5hcHBlbmQoV1RGTW92ZShzaGFkZXIpKTsKICAgICB9CiAgICAgcmV0dXJuIHNoYWRlck9i
amVjdHM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0
YUNoYXJzZXRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFD
aGFyc2V0UGFyc2VyLmNwcAppbmRleCA4YWNiNjhhZjQ1NTFhMzhiNzk5YzcxM2FhNzVkYzBmNzkx
OTAwNGJlLi4wYTVlZDc4ZjQ1OGY5OWI2YmM3ZmMzNzFkZjk0Y2ZlOTI1YTRkNDgwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5j
cHAKQEAgLTg1LDEyICs4NSwxMSBAQCBzdGF0aWMgU3RyaW5nVmlldyBleHRyYWN0Q2hhcnNldChj
b25zdCBTdHJpbmcmIHZhbHVlKQogCiBib29sIEhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6cHJvY2Vz
c01ldGEoSFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBBdHRyaWJ1dGVMaXN0IGF0dHJpYnV0ZXM7
Ci0gICAgZm9yIChhdXRvJiBhdHRyaWJ1dGUgOiB0b2tlbi5hdHRyaWJ1dGVzKCkpIHsKKyAgICBh
dXRvIGF0dHJpYnV0ZXMgPSB0b2tlbi5hdHRyaWJ1dGVzKCkubWFwKFtdKGF1dG8mIGF0dHJpYnV0
ZSkgewogICAgICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZThC
aXRJZlBvc3NpYmxlKGF0dHJpYnV0ZS5uYW1lKTsKICAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZVZh
bHVlID0gU3RyaW5nSW1wbDo6Y3JlYXRlOEJpdElmUG9zc2libGUoYXR0cmlidXRlLnZhbHVlKTsK
LSAgICAgICAgYXR0cmlidXRlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoYXR0cmlidXRlTmFtZSwg
YXR0cmlidXRlVmFsdWUpKTsKLSAgICB9CisgICAgICAgIHJldHVybiBzdGQ6OnBhaXIgeyBXVEZN
b3ZlKGF0dHJpYnV0ZU5hbWUpLCBXVEZNb3ZlKGF0dHJpYnV0ZVZhbHVlKSB9OworICAgIH0pOwog
CiAgICAgbV9lbmNvZGluZyA9IGVuY29kaW5nRnJvbU1ldGFBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMp
OwogICAgIHJldHVybiBtX2VuY29kaW5nLmlzVmFsaWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IDZiNzFiZWY4MWE3ZTI4NDcxZWVm
ZDdjNTMxNTJhOGEwYTgyZDJkYjUuLmExZjE2N2NiMDgzYzk5ODQzNjE4MzQxMTgwMjlmMjg1ZTQx
YzAwMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVp
bGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVy
LmNwcApAQCAtMjIwMCwxMSArMjIwMCwxMCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c0NoYXJhY3RlcihBdG9tSFRNTFRva2VuJiYgdG9rZW4pCiAvLyBGcm9tIHRoZSBzdHJpbmcgNDA4
OTk2MTAxMCwgY3JlYXRlcyBhIGxpbmsgb2YgdGhlIGZvcm0gPGEgaHJlZj0idGVsOjQwODk5NjEw
MTAiPjQwODk5NjEwMTA8L2E+IGFuZCBpbnNlcnRzIGl0Lgogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6
Omluc2VydFBob25lTnVtYmVyTGluayhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBWZWN0
b3I8QXR0cmlidXRlPiBhdHRyaWJ1dGVzOwotICAgIGF0dHJpYnV0ZXMuYXBwZW5kKEF0dHJpYnV0
ZShIVE1MTmFtZXM6OmhyZWZBdHRyLCBtYWtlU3RyaW5nKCJ0ZWw6Il9zLCBzdHJpbmcpKSk7Cisg
ICAgQXR0cmlidXRlIGF0dHJpYnV0ZShIVE1MTmFtZXM6OmhyZWZBdHRyLCBtYWtlU3RyaW5nKCJ0
ZWw6Il9zLCBzdHJpbmcpKTsKIAogICAgIGNvbnN0IEF0b21TdHJpbmcmIGFUYWdMb2NhbE5hbWUg
PSBhVGFnLT5sb2NhbE5hbWUoKTsKLSAgICBBdG9tSFRNTFRva2VuIGFTdGFydFRva2VuKEhUTUxU
b2tlbjo6U3RhcnRUYWcsIGFUYWdMb2NhbE5hbWUsIFdURk1vdmUoYXR0cmlidXRlcykpOworICAg
IEF0b21IVE1MVG9rZW4gYVN0YXJ0VG9rZW4oSFRNTFRva2VuOjpTdGFydFRhZywgYVRhZ0xvY2Fs
TmFtZSwgeyBXVEZNb3ZlKGF0dHJpYnV0ZSkgfSk7CiAgICAgQXRvbUhUTUxUb2tlbiBhRW5kVG9r
ZW4oSFRNTFRva2VuOjpFbmRUYWcsIGFUYWdMb2NhbE5hbWUpOwogCiAgICAgcHJvY2Vzc1N0YXJ0
VGFnKFdURk1vdmUoYVN0YXJ0VG9rZW4pKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwCmluZGV4IDRkYTk1OWY0MGZlOWVhMzM3NDdjZDIz
ODhjZWI3OWY2ZDcyZGI3ZWQuLjQ3MDZmMjZlODQ0MDllZTgxM2NkMTNiYzVmNGUwYWNjZjY3NGE4
NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBh
cnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFy
c2VyLmNwcApAQCAtNTEsOSArNTEsOCBAQCB2b2lkIFRleHREb2N1bWVudFBhcnNlcjo6aW5zZXJ0
RmFrZVByZUVsZW1lbnQoKQogICAgIC8vIFdlIGNyZWF0ZSBhIGZha2UgdG9rZW4gYW5kIGdpdmUg
aXQgdG8gdGhlIHRyZWUgYnVpbGRlciByYXRoZXIgdGhhbgogICAgIC8vIHNlbmRpbmcgZmFrZSBi
eXRlcyB0aHJvdWdoIHRoZSBmcm9udC1lbmQgb2YgdGhlIHBhcnNlciB0byBhdm9pZAogICAgIC8v
IGRpc3RydWJpbmcgdGhlIGxpbmUvY29sdW1uIG51bWJlciBjYWxjdWxhdGlvbnMuCi0gICAgVmVj
dG9yPEF0dHJpYnV0ZT4gYXR0cmlidXRlczsKLSAgICBhdHRyaWJ1dGVzLmFwcGVuZChBdHRyaWJ1
dGUoc3R5bGVBdHRyLCAid29yZC13cmFwOiBicmVhay13b3JkOyB3aGl0ZS1zcGFjZTogcHJlLXdy
YXA7IikpOwotICAgIEF0b21IVE1MVG9rZW4gZmFrZVByZShIVE1MVG9rZW46OlN0YXJ0VGFnLCBw
cmVUYWctPmxvY2FsTmFtZSgpLCBXVEZNb3ZlKGF0dHJpYnV0ZXMpKTsKKyAgICBBdHRyaWJ1dGUg
YXR0cmlidXRlKHN0eWxlQXR0ciwgIndvcmQtd3JhcDogYnJlYWstd29yZDsgd2hpdGUtc3BhY2U6
IHByZS13cmFwOyIpOworICAgIEF0b21IVE1MVG9rZW4gZmFrZVByZShIVE1MVG9rZW46OlN0YXJ0
VGFnLCBwcmVUYWctPmxvY2FsTmFtZSgpLCB7IFdURk1vdmUoYXR0cmlidXRlKSB9KTsKICAgICB0
cmVlQnVpbGRlcigpLmNvbnN0cnVjdFRyZWUoV1RGTW92ZShmYWtlUHJlKSk7CiAKICAgICAvLyBO
b3JtYWxseSB3ZSB3b3VsZCBza2lwIHRoZSBmaXJzdCBcbiBhZnRlciBhIDxwcmU+IGVsZW1lbnQs
IGJ1dCB3ZSBkb24ndApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0NvbnRlbnRG
aWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0NvbnRlbnRGaWx0ZXIuY3BwCmluZGV4
IDQxOWUzMmYzOTgyZjY3MmFmNjYzMGZhNWUwYzYyNWM1Y2I3YjIyM2YuLjRlMzU0NDU0YWFiYTM0
ZTRmYmVhNDE1ZDQxZmY4ZTkyYmY0NDE0NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9Db250ZW50RmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29udGVu
dEZpbHRlci5jcHAKQEAgLTY3LDExICs2Nyw5IEBAIFZlY3RvcjxDb250ZW50RmlsdGVyOjpUeXBl
PiYgQ29udGVudEZpbHRlcjo6dHlwZXMoKQogCiBzdGQ6OnVuaXF1ZV9wdHI8Q29udGVudEZpbHRl
cj4gQ29udGVudEZpbHRlcjo6Y3JlYXRlKENvbnRlbnRGaWx0ZXJDbGllbnQmIGNsaWVudCkKIHsK
LSAgICBDb250YWluZXIgZmlsdGVyczsKLSAgICBmb3IgKGF1dG8mIHR5cGUgOiB0eXBlcygpKSB7
Ci0gICAgICAgIGF1dG8gZmlsdGVyID0gdHlwZS5jcmVhdGUoKTsKLSAgICAgICAgZmlsdGVycy5h
cHBlbmQoV1RGTW92ZShmaWx0ZXIpKTsKLSAgICB9CisgICAgYXV0byBmaWx0ZXJzID0gdHlwZXMo
KS5tYXAoW10oYXV0byYgdHlwZSkgeworICAgICAgICByZXR1cm4gdHlwZS5jcmVhdGUoKTsKKyAg
ICB9KTsKIAogICAgIGlmIChmaWx0ZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZU1hbmlmZXN0UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuY3BwCmluZGV4IGI4N2RkODM1MDYwN2My
NGJlMjU2ZTM0NDFiZWQyZDM3NjdlMDk1NTIuLjRhMTE0NDI1ZTExNmQyYzQyZDE5MDM5MjNlZGY4
ODYzODNkOGYwNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9B
cHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3RQYXJzZXIuY3BwCkBAIC0xODAs
NyArMTgwLDcgQEAgc3RkOjpvcHRpb25hbDxBcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3Q+IHBhcnNl
QXBwbGljYXRpb25DYWNoZU1hbmlmZXN0KGNvbnN0IFVSTCYKICAgICAgICAgICAgICAgICBpZiAo
IWVxdWFsSWdub3JpbmdBU0NJSUNhc2UodXJsLnByb3RvY29sKCksIG1hbmlmZXN0VVJMLnByb3Rv
Y29sKCkpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgICAg
IG1hbmlmZXN0Lm9ubGluZUFsbG93ZWRVUkxzLmFwcGVuZCh1cmwpOworICAgICAgICAgICAgICAg
IG1hbmlmZXN0Lm9ubGluZUFsbG93ZWRVUkxzLmFwcGVuZChXVEZNb3ZlKHVybCkpOwogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Jlc2l6ZU9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuY3BwCmluZGV4IDkzZGExYTQ1NjA0ZTQ1MmE3NzU5M2Ux
OGQxZjQ3MzM2MzQ5OTQzNjcuLjRmZmQ2OWQwMzQ0MTA5YjQ3YWZiNWU1MTk3YWEzZmRmZDQ5N2Rl
ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUmVzaXplT2JzZXJ2ZXIuY3BwCkBAIC0xMjUsMTEgKzEy
NSwxMCBAQCBzaXplX3QgUmVzaXplT2JzZXJ2ZXI6OmdhdGhlck9ic2VydmF0aW9ucyhzaXplX3Qg
ZGVlcGVyVGhhbikKIAogdm9pZCBSZXNpemVPYnNlcnZlcjo6ZGVsaXZlck9ic2VydmF0aW9ucygp
CiB7Ci0gICAgVmVjdG9yPFJlZjxSZXNpemVPYnNlcnZlckVudHJ5Pj4gZW50cmllczsKLSAgICBm
b3IgKGNvbnN0IGF1dG8mIG9ic2VydmF0aW9uIDogbV9hY3RpdmVPYnNlcnZhdGlvbnMpIHsKKyAg
ICBhdXRvIGVudHJpZXMgPSBtX2FjdGl2ZU9ic2VydmF0aW9ucy5tYXAoW10oYXV0byYgb2JzZXJ2
YXRpb24pIHsKICAgICAgICAgQVNTRVJUKG9ic2VydmF0aW9uLT50YXJnZXQoKSk7Ci0gICAgICAg
IGVudHJpZXMuYXBwZW5kKFJlc2l6ZU9ic2VydmVyRW50cnk6OmNyZWF0ZShvYnNlcnZhdGlvbi0+
dGFyZ2V0KCksIG9ic2VydmF0aW9uLT5jb21wdXRlQ29udGVudFJlY3QoKSwgb2JzZXJ2YXRpb24t
PmJvcmRlckJveFNpemUoKSwgb2JzZXJ2YXRpb24tPmNvbnRlbnRCb3hTaXplKCkpKTsKLSAgICB9
CisgICAgICAgIHJldHVybiBSZXNpemVPYnNlcnZlckVudHJ5OjpjcmVhdGUob2JzZXJ2YXRpb24t
PnRhcmdldCgpLCBvYnNlcnZhdGlvbi0+Y29tcHV0ZUNvbnRlbnRSZWN0KCksIG9ic2VydmF0aW9u
LT5ib3JkZXJCb3hTaXplKCksIG9ic2VydmF0aW9uLT5jb250ZW50Qm94U2l6ZSgpKTsKKyAgICB9
KTsKICAgICBtX2FjdGl2ZU9ic2VydmF0aW9ucy5jbGVhcigpOwogICAgIGF1dG8gYWN0aXZlT2Jz
ZXJ2YXRpb25UYXJnZXRzID0gc3RkOjpleGNoYW5nZShtX2FjdGl2ZU9ic2VydmF0aW9uVGFyZ2V0
cywgeyB9KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKaW5kZXggMzg3ZDUx
OWFlNTE3MmQ2ODBhNWIyODg0M2JiZThmZjk5NmM2YjMzNS4uY2E1ZmJlNjNjY2Y2Y2RiOThhZjg1
ZWQ1OTI5YTEzMDM4ZDY5YmZjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0
SW5kaWNhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3Bw
CkBAIC0zNjEsMTcgKzM2MSwxNiBAQCBzdGF0aWMgYm9vbCBpbml0aWFsaXplSW5kaWNhdG9yKFRl
eHRJbmRpY2F0b3JEYXRhJiBkYXRhLCBGcmFtZSYgZnJhbWUsIGNvbnN0IFNpbQogICAgICAgICB0
ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLnVuaXRlKHRleHRSZWN0SW5Sb290
Vmlld0Nvb3JkaW5hdGVzKTsKICAgICB9CiAKLSAgICBWZWN0b3I8RmxvYXRSZWN0PiB0ZXh0UmVj
dHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzOwotICAgIGZvciAoYXV0byByZWN0IDogdGV4dFJl
Y3RzSW5Sb290Vmlld0Nvb3JkaW5hdGVzKSB7CisgICAgYXV0byB0ZXh0UmVjdHNJbkJvdW5kaW5n
UmVjdENvb3JkaW5hdGVzID0gdGV4dFJlY3RzSW5Sb290Vmlld0Nvb3JkaW5hdGVzLm1hcChbJl0o
YXV0byByZWN0KSB7CiAgICAgICAgIHJlY3QubW92ZUJ5KC10ZXh0Qm91bmRpbmdSZWN0SW5Sb290
Vmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCkpOwotICAgICAgICB0ZXh0UmVjdHNJbkJvdW5kaW5n
UmVjdENvb3JkaW5hdGVzLmFwcGVuZChyZWN0KTsKLSAgICB9CisgICAgICAgIHJldHVybiByZWN0
OworICAgIH0pOwogCiAgICAgLy8gU3RvcmUgdGhlIHNlbGVjdGlvbiByZWN0IGluIHdpbmRvdyBj
b29yZGluYXRlcywgdG8gYmUgdXNlZCBzdWJzZXF1ZW50bHkKICAgICAvLyB0byBkZXRlcm1pbmUg
aWYgdGhlIGluZGljYXRvciBhbmQgc2VsZWN0aW9uIHN0aWxsIHByZWNpc2VseSBvdmVybGFwLgog
ICAgIGRhdGEuc2VsZWN0aW9uUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9IGZyYW1lLnZpZXco
KS0+Y29udGVudHNUb1Jvb3RWaWV3KGVuY2xvc2luZ0ludFJlY3QoZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uQm91bmRzKEZyYW1lU2VsZWN0aW9uOjpDbGlwVG9WaXNpYmxlQ29udGVudDo6Tm8p
KSk7CiAgICAgZGF0YS50ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gdGV4
dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlczsKLSAgICBkYXRhLnRleHRSZWN0c0lu
Qm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMgPSB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5h
dGVzOworICAgIGRhdGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcyA9IFdURk1v
dmUodGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcyk7CiAKICAgICByZXR1cm4gdGFr
ZVNuYXBzaG90cyhkYXRhLCBmcmFtZSwgZW5jbG9zaW5nSW50UmVjdCh0ZXh0Qm91bmRpbmdSZWN0
SW5Eb2N1bWVudENvb3JkaW5hdGVzKSwgY2xpcHBlZFRleHRSZWN0c0luRG9jdW1lbnRDb29yZGlu
YXRlcyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2Vj
dXJpdHlQb2xpY3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5
UG9saWN5LmNwcAppbmRleCA1MmY2MjAxMjJiODVjNzUwM2U3ZGE2YTY4MzViZjM3NTYxNDk2N2Y0
Li44YTJiYTRjZmZhMjZkY2NiYmQxZTc1ZWU1MDExM2E4NjZiZTVhMmZhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKQEAgLTM0Mywx
OCArMzQzLDEyIEBAIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjphbGxQb2xpY2llc0FsbG93
KFZpb2xhdGVkRGlyZWN0aXZlQ2FsbGJhY2smJiBjYWxsYmFjCiBzdGF0aWMgVmVjdG9yPFJlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdD4gcGFyc2VTdWJSZXNvdXJjZUludGVncml0eUludG9EaWdl
c3RzKGNvbnN0IFN0cmluZyYgc3ViUmVzb3VyY2VJbnRlZ3JpdHkpCiB7CiAgICAgYXV0byBlbmNv
ZGVkRGlnZXN0cyA9IHBhcnNlSW50ZWdyaXR5TWV0YWRhdGEoc3ViUmVzb3VyY2VJbnRlZ3JpdHkp
OwotICAgIFZlY3RvcjxSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+IGRlY29kZWREaWdlc3Rz
OwotCi0gICAgaWYgKCFlbmNvZGVkRGlnZXN0cy5oYXNfdmFsdWUoKSkKKyAgICBpZiAoIWVuY29k
ZWREaWdlc3RzKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBl
bmNvZGVkRGlnZXN0IDogZW5jb2RlZERpZ2VzdHMudmFsdWUoKSkgewotICAgICAgICBhdXRvIGRl
Y29kZWREaWdlc3QgPSBkZWNvZGVFbmNvZGVkUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0KGVu
Y29kZWREaWdlc3QpOwotICAgICAgICBpZiAoZGVjb2RlZERpZ2VzdC5oYXNfdmFsdWUoKSkKLSAg
ICAgICAgICAgIGRlY29kZWREaWdlc3RzLmFwcGVuZChkZWNvZGVkRGlnZXN0LnZhbHVlKCkpOwot
ICAgICAgICB9Ci0KLSAgICByZXR1cm4gZGVjb2RlZERpZ2VzdHM7CisgICAgcmV0dXJuIFdURjo6
Y29tcGFjdE1hcCgqZW5jb2RlZERpZ2VzdHMsIFtdKGF1dG8mIGVuY29kZWREaWdlc3QpIHsKKyAg
ICAgICAgcmV0dXJuIGRlY29kZUVuY29kZWRSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QoZW5j
b2RlZERpZ2VzdCk7CisgICAgfSk7CiB9CiAKIHN0YXRpYyBWZWN0b3I8Q29udGVudFNlY3VyaXR5
UG9saWN5SGFzaD4gZ2VuZXJhdGVIYXNoZXNGb3JDb250ZW50KGNvbnN0IFN0cmluZ1ZpZXcgY29u
dGVudCwgT3B0aW9uU2V0PENvbnRlbnRTZWN1cml0eVBvbGljeUhhc2hBbGdvcml0aG0+IGFsZ29y
aXRobXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5jcHAKaW5kZXggOGU0ZWNl
NzA1M2FlOGU5OGVmZWNjZmU3NjUyZjg2Y2QyOTc0MDQwNC4uNzg0MjhjNGFiZDMxZTk5YjEwYWFl
NDhmYmVjYzJhNWI4ZDlmNThmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
RmlsZUNob29zZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2Vy
LmNwcApAQCAtNTMsOSArNTMsNyBAQCB2b2lkIEZpbGVDaG9vc2VyOjppbnZhbGlkYXRlKCkKIAog
dm9pZCBGaWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQogewot
ICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVuYW1lczsKLSAgICBmaWxlbmFtZXMuYXBwZW5kKGZpbGVu
YW1lKTsKLSAgICBjaG9vc2VGaWxlcyhmaWxlbmFtZXMpOworICAgIGNob29zZUZpbGVzKHsgZmls
ZW5hbWUgfSk7CiB9CiAKIHZvaWQgRmlsZUNob29zZXI6OmNob29zZUZpbGVzKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBmaWxlbmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXBsYWNlbWVudE5h
bWVzKQpAQCAtNjgsOSArNjYsMTAgQEAgdm9pZCBGaWxlQ2hvb3Nlcjo6Y2hvb3NlRmlsZXMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywgY29uc3QgVmVjdG9yPFN0cmkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+IGZpbGVzOworICAgIGZp
bGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZmlsZW5hbWVzLnNpemUoKSk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDAsIHNpemUgPSBmaWxlbmFtZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKQotICAg
ICAgICBmaWxlcy5hcHBlbmQoeyBmaWxlbmFtZXNbaV0sIGkgPCByZXBsYWNlbWVudE5hbWVzLnNp
emUoKSA/IHJlcGxhY2VtZW50TmFtZXNbaV0gOiBudWxsU3RyaW5nKCksIHsgfSB9KTsKLSAgICBt
X2NsaWVudC0+ZmlsZXNDaG9zZW4oZmlsZXMpOworICAgICAgICBmaWxlcy51bmNoZWNrZWRBcHBl
bmQoeyBmaWxlbmFtZXNbaV0sIGkgPCByZXBsYWNlbWVudE5hbWVzLnNpemUoKSA/IHJlcGxhY2Vt
ZW50TmFtZXNbaV0gOiBudWxsU3RyaW5nKCksIHsgfSB9KTsKKyAgICBtX2NsaWVudC0+ZmlsZXND
aG9zZW4oV1RGTW92ZShmaWxlcykpOwogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAg
LTg2LDE5ICs4NSwxOSBAQCB2b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VNZWRpYUZpbGVzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIGNvbnN0IFN0cmluZwogICAgIGlmICghbV9jbGll
bnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJbmZvPiBm
aWxlczsKLSAgICBmb3IgKGF1dG8mIGZpbGVuYW1lIDogZmlsZW5hbWVzKQotICAgICAgICBmaWxl
cy5hcHBlbmQoeyBmaWxlbmFtZSwgeyB9LCB7IH0gfSk7Ci0gICAgbV9jbGllbnQtPmZpbGVzQ2hv
c2VuKGZpbGVzLCBkaXNwbGF5U3RyaW5nLCBpY29uKTsKKyAgICBhdXRvIGZpbGVzID0gZmlsZW5h
bWVzLm1hcChbXShhdXRvJiBmaWxlbmFtZSkgeworICAgICAgICByZXR1cm4gRmlsZUNob29zZXJG
aWxlSW5mbyB7IGZpbGVuYW1lLCB7IH0sIHsgfSB9OworICAgIH0pOworICAgIG1fY2xpZW50LT5m
aWxlc0Nob3NlbihXVEZNb3ZlKGZpbGVzKSwgZGlzcGxheVN0cmluZywgaWNvbik7CiB9CiAKICNl
bmRpZgogCiB2b2lkIEZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlcyhjb25zdCBWZWN0b3I8RmlsZUNo
b29zZXJGaWxlSW5mbz4mIGZpbGVzKQogewotICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhzOwotICAg
IGZvciAoYXV0byYgZmlsZSA6IGZpbGVzKQotICAgICAgICBwYXRocy5hcHBlbmQoZmlsZS5wYXRo
KTsKKyAgICBhdXRvIHBhdGhzID0gZmlsZXMubWFwKFtdKGF1dG8mIGZpbGUpIHsKKyAgICAgICAg
cmV0dXJuIGZpbGUucGF0aDsKKyAgICB9KTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGluZWxl
Z2FudC4gV2Ugc2hvdWxkIG5vdCBiZSBsb29raW5nIGF0IHNldHRpbmdzIGhlcmUuCiAgICAgaWYg
KG1fc2V0dGluZ3Muc2VsZWN0ZWRGaWxlcyA9PSBwYXRocykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TaGFyZWRCdWZmZXIuY3BwCmluZGV4IGQwOWYxMDUyYTBmMzFlZTk3MDYxMTAxM2IzOTM1ZmI1
MzA5NTUwOTYuLmY4N2I2YTRmNjNiMjZhMjE4ODIwNmU5MzhhYTU4NTc5N2FiMzk1ZTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcApAQCAtMjA2LDkgKzIwNiw3IEBA
IHZvaWQgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKGNvbnN0IEZyYWdtZW50ZWRTaGFy
ZWRCdWZmZXImIGRhdGEpCiB2b2lkIEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmFwcGVuZChjb25z
dCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKQogewogICAgIEFTU0VSVCghbV9jb250aWd1
b3VzKTsKLSAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yOwotICAgIHZlY3Rvci5hcHBlbmQoZGF0
YSwgbGVuZ3RoKTsKLSAgICBtX3NlZ21lbnRzLmFwcGVuZCh7IG1fc2l6ZSwgRGF0YVNlZ21lbnQ6
OmNyZWF0ZShXVEZNb3ZlKHZlY3RvcikpIH0pOworICAgIG1fc2VnbWVudHMuYXBwZW5kKHsgbV9z
aXplLCBEYXRhU2VnbWVudDo6Y3JlYXRlKFZlY3RvciB7IGRhdGEsIGxlbmd0aCB9KSB9KTsKICAg
ICBtX3NpemUgKz0gbGVuZ3RoOwogICAgIEFTU0VSVChpbnRlcm5hbGx5Q29uc2lzdGVudCgpKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZFNhZmVEYXRhQnVm
ZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRTYWZlRGF0YUJ1ZmZlci5oCmlu
ZGV4IGQzOTdkMjI3ZGZjNTM0YWQwY2Y1ODcwMmJlMWNhNTgwMjQ5OWEwYmIuLjY2MjdmZWJjYjdm
NGUxZGFkODExMWUxNGE5MTIxNDQ4ODE2NmE5NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1RocmVhZFNhZmVEYXRhQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vVGhyZWFkU2FmZURhdGFCdWZmZXIuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21h
IG9uY2UKIAorI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTE0Myw0ICsxNDQs
MTUgQEAgYm9vbCBUaHJlYWRTYWZlRGF0YUJ1ZmZlcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IFRocmVhZFNhZmVEYXRhQnVmZmVyJiByZXN1bHQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAoraW5s
aW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYg
YnVmZmVyKQoreworICAgIGF1dG8qIGRhdGEgPSBidWZmZXIuZGF0YSgpOworICAgIGlmICghZGF0
YSkgeworICAgICAgICBhZGQoaGFzaGVyLCB0cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBhZGQoaGFzaGVyLCBmYWxzZSk7CisgICAgYWRkKGhhc2hlciwgKmRhdGEpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHAKaW5kZXggMWNmMzljYWNmMzAy
NDUwOGU4ZDEyZTg2NDVjNTA4Njc3MjE5NDM1Yi4uYmZlMThlMjlkMjZlYzg5YTNmNDAyZDcxODMx
MzgyMDE2MjNlNTE3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
QXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0F1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmNwcApAQCAtNTYsOCArNTYsOSBAQCB2b2lk
IEF1ZGlvRFNQS2VybmVsUHJvY2Vzc29yOjppbml0aWFsaXplKCkKICAgICAgICAgRGlzYWJsZU1h
bGxvY1Jlc3RyaWN0aW9uc0ZvckN1cnJlbnRUaHJlYWRTY29wZSBkaXNhYmxlTWFsbG9jUmVzdHJp
Y3Rpb25zOwogCiAgICAgICAgIC8vIENyZWF0ZSBwcm9jZXNzaW5nIGtlcm5lbHMsIG9uZSBwZXIg
Y2hhbm5lbC4KKyAgICAgICAgbV9rZXJuZWxzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVy
T2ZDaGFubmVscygpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9m
Q2hhbm5lbHMoKTsgKytpKQotICAgICAgICAgICAgbV9rZXJuZWxzLmFwcGVuZChjcmVhdGVLZXJu
ZWwoKSk7CisgICAgICAgICAgICBtX2tlcm5lbHMudW5jaGVja2VkQXBwZW5kKGNyZWF0ZUtlcm5l
bCgpKTsKICAgICB9CiAgICAgbV9pbml0aWFsaXplZCA9IHRydWU7CiAgICAgbV9oYXNKdXN0UmVz
ZXQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVk
aW9SZXNhbXBsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9SZXNh
bXBsZXIuY3BwCmluZGV4IGRlNTA4Y2M2ZWY0YTViMDFiZDRlYjIyNDc0NWI3ZWYyODI4NDBmOGUu
Ljc0NjljZTRkZTNmM2MxODg4OTI4ZjU0OTdkMTJjZTU2ZGI2ZTZkMmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvUmVzYW1wbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1Jlc2FtcGxlci5jcHAKQEAgLTQyLDggKzQy
LDkgQEAgQXVkaW9SZXNhbXBsZXI6OkF1ZGlvUmVzYW1wbGVyKCkKIAogQXVkaW9SZXNhbXBsZXI6
OkF1ZGlvUmVzYW1wbGVyKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMpCiB7CisgICAgbV9rZXJu
ZWxzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZDaGFubmVscyk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkKLSAgICAgICAgbV9rZXJu
ZWxzLmFwcGVuZChtYWtlVW5pcXVlPEF1ZGlvUmVzYW1wbGVyS2VybmVsPih0aGlzKSk7CisgICAg
ICAgIG1fa2VybmVscy51bmNoZWNrZWRBcHBlbmQobWFrZVVuaXF1ZTxBdWRpb1Jlc2FtcGxlcktl
cm5lbD4odGhpcykpOwogCiAgICAgbV9zb3VyY2VCdXMgPSBBdWRpb0J1czo6Y3JlYXRlKG51bWJl
ck9mQ2hhbm5lbHMsIDAsIGZhbHNlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwCmluZGV4IDlmMzE4
MWNmYmI0MDIyNzc3OTk2MjNiOWJmZGRjZGQ0OTU5YzAwYjAuLjUwMzJlZWE3YTcyYjIzZGUyYTIw
MmJjMTUzNjAzNWNiYWVkMDE2MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcApAQCAtNjEsOCArNjEs
OSBAQCB2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0TnVtYmVyT2ZDaGFubmVscyh1
bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3ByZURl
bGF5QnVmZmVycy5jbGVhcigpOworICAgIG1fcHJlRGVsYXlCdWZmZXJzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkobnVtYmVyT2ZDaGFubmVscyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG51bWJlck9mQ2hhbm5lbHM7ICsraSkKLSAgICAgICAgbV9wcmVEZWxheUJ1ZmZlcnMuYXBwZW5k
KG1ha2VVbmlxdWU8QXVkaW9GbG9hdEFycmF5PihNYXhQcmVEZWxheUZyYW1lcykpOworICAgICAg
ICBtX3ByZURlbGF5QnVmZmVycy51bmNoZWNrZWRBcHBlbmQobWFrZVVuaXF1ZTxBdWRpb0Zsb2F0
QXJyYXk+KE1heFByZURlbGF5RnJhbWVzKSk7CiB9CiAKIHZvaWQgRHluYW1pY3NDb21wcmVzc29y
S2VybmVsOjpzZXRQcmVEZWxheVRpbWUoZmxvYXQgcHJlRGVsYXlUaW1lKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTXVsdGlDaGFubmVsUmVzYW1wbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL011bHRpQ2hhbm5lbFJlc2FtcGxlci5jcHAK
aW5kZXggYjk2NmZhMDZjZDMwZWIzNGRmNzFmY2ZiZGU3YzE2NTgyMzExMTIxZi4uMTcwMjNiNjQy
NjFiZGZkMzc1ZWUwOWZlMjk2YjNiZGE4ODI3ZjJlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vTXVsdGlDaGFubmVsUmVzYW1wbGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NdWx0aUNoYW5uZWxSZXNhbXBsZXIuY3BwCkBAIC01Myw4
ICs1Myw5IEBAIE11bHRpQ2hhbm5lbFJlc2FtcGxlcjo6TXVsdGlDaGFubmVsUmVzYW1wbGVyKGRv
dWJsZSBzY2FsZUZhY3RvciwgdW5zaWduZWQgbnVtYmVyCiAgICAgfQogCiAgICAgLy8gQ3JlYXRl
IGVhY2ggY2hhbm5lbCdzIHJlc2FtcGxlci4KKyAgICBtX2tlcm5lbHMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShudW1iZXJPZkNoYW5uZWxzKTsKICAgICBmb3IgKHVuc2lnbmVkIGNoYW5uZWxJbmRl
eCA9IDA7IGNoYW5uZWxJbmRleCA8IG51bWJlck9mQ2hhbm5lbHM7ICsrY2hhbm5lbEluZGV4KQot
ICAgICAgICBtX2tlcm5lbHMuYXBwZW5kKG1ha2VVbmlxdWU8U2luY1Jlc2FtcGxlcj4oc2NhbGVG
YWN0b3IsIHJlcXVlc3RGcmFtZXMsIHN0ZDo6YmluZCgmTXVsdGlDaGFubmVsUmVzYW1wbGVyOjpw
cm92aWRlSW5wdXRGb3JDaGFubmVsLCB0aGlzLCBzdGQ6OnBsYWNlaG9sZGVyczo6XzEsIHN0ZDo6
cGxhY2Vob2xkZXJzOjpfMiwgY2hhbm5lbEluZGV4KSkpOworICAgICAgICBtX2tlcm5lbHMudW5j
aGVja2VkQXBwZW5kKG1ha2VVbmlxdWU8U2luY1Jlc2FtcGxlcj4oc2NhbGVGYWN0b3IsIHJlcXVl
c3RGcmFtZXMsIHN0ZDo6YmluZCgmTXVsdGlDaGFubmVsUmVzYW1wbGVyOjpwcm92aWRlSW5wdXRG
b3JDaGFubmVsLCB0aGlzLCBzdGQ6OnBsYWNlaG9sZGVyczo6XzEsIHN0ZDo6cGxhY2Vob2xkZXJz
OjpfMiwgY2hhbm5lbEluZGV4KSkpOwogfQogCiBNdWx0aUNoYW5uZWxSZXNhbXBsZXI6On5NdWx0
aUNoYW5uZWxSZXNhbXBsZXIoKSA9IGRlZmF1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jb2NvYS9QbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVt
ZW50Lm1tCmluZGV4IDA1ZWEyMTExZWI1ZDQ1M2NiMjhkOGU3N2VmM2NiZjVmMzU2NzE5ODkuLmZh
MzBhZmRlM2IxZTFlMzZlODYxYWVjYmQ5ZmJlOGM3ZjA5MDM1NmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1BsYXliYWNrU2Vzc2lvbk1v
ZGVsTWVkaWFFbGVtZW50Lm1tCkBAIC01MzQsMTQgKzUzNCwxMiBAQCBWZWN0b3I8TWVkaWFTZWxl
Y3Rpb25PcHRpb24+IFBsYXliYWNrU2Vzc2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVk
aWFTZWxlYwogICAgIFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4gbGVnaWJsZU9wdGlvbnM7
CiAKICAgICBpZiAoIW1fbWVkaWFFbGVtZW50IHx8ICFtX21lZGlhRWxlbWVudC0+ZG9jdW1lbnQo
KS5wYWdlKCkpCi0gICAgICAgIHJldHVybiBsZWdpYmxlT3B0aW9uczsKKyAgICAgICAgcmV0dXJu
IHsgfTsKIAogICAgIGF1dG8mIGNhcHRpb25QcmVmZXJlbmNlcyA9IG1fbWVkaWFFbGVtZW50LT5k
b2N1bWVudCgpLnBhZ2UoKS0+Z3JvdXAoKS5lbnN1cmVDYXB0aW9uUHJlZmVyZW5jZXMoKTsKLQot
ICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX2xlZ2libGVUcmFja3NGb3JNZW51KQotICAgICAgICBs
ZWdpYmxlT3B0aW9ucy5hcHBlbmQoY2FwdGlvblByZWZlcmVuY2VzLm1lZGlhU2VsZWN0aW9uT3B0
aW9uRm9yVHJhY2sodHJhY2suZ2V0KCkpKTsKLQotICAgIHJldHVybiBsZWdpYmxlT3B0aW9uczsK
KyAgICByZXR1cm4gbV9sZWdpYmxlVHJhY2tzRm9yTWVudS5tYXAoWyZdKGF1dG8mIHRyYWNrKSB7
CisgICAgICAgIHJldHVybiBjYXB0aW9uUHJlZmVyZW5jZXMubWVkaWFTZWxlY3Rpb25PcHRpb25G
b3JUcmFjayh0cmFjay5nZXQoKSk7CisgICAgfSk7CiB9CiAKIHVpbnQ2NF90IFBsYXliYWNrU2Vz
c2lvbk1vZGVsTWVkaWFFbGVtZW50OjpsZWdpYmxlTWVkaWFTZWxlY3RlZEluZGV4KCkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL0R1YWxzaG9j
azNISURHYW1lcGFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL0R1
YWxzaG9jazNISURHYW1lcGFkLmNwcAppbmRleCA2YzQwZThiODg5Mjg3M2ZmMDcyMDYxOGNmZTgz
OTY0YzgwZWMzNDFlLi5jMGY1MTgxYmM0NGIxYmRjZWJhNjliOGNiNmEzNGE5ZWExMjdkZjY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9EdWFsc2hvY2sz
SElER2FtZXBhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMv
RHVhbHNob2NrM0hJREdhbWVwYWQuY3BwCkBAIC00MywxMiArNDMsMTAgQEAgRHVhbHNob2NrM0hJ
REdhbWVwYWQ6OkR1YWxzaG9jazNISURHYW1lcGFkKEhJRERldmljZSYmIGRldmljZSwgdW5zaWdu
ZWQgaW5kZXgpCiAKICAgICBtX21hcHBpbmcgPSBzdGFuZGFyZEdhbWVwYWRNYXBwaW5nU3RyaW5n
KCk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mU3RhbmRhcmRHYW1lcGFk
QnV0dG9uc1dpdGhIb21lQnV0dG9uOyArK2kpCi0gICAgICAgIG1fYnV0dG9uVmFsdWVzLmFwcGVu
ZCgwLjApOworICAgIG1fYnV0dG9uVmFsdWVzID0gVmVjdG9yKG51bWJlck9mU3RhbmRhcmRHYW1l
cGFkQnV0dG9uc1dpdGhIb21lQnV0dG9uLCBTaGFyZWRHYW1lcGFkVmFsdWUgeyAwLjAgfSk7CiAK
LSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF4aXNDb3VudCA9IDQ7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBheGlzQ291bnQ7ICsraSkKLSAgICAgICAgbV9heGlzVmFsdWVzLmFwcGVuZCgw
LjApOworICAgIGNvbnN0ZXhwciBzaXplX3QgYXhpc0NvdW50ID0gNDsKKyAgICBtX2F4aXNWYWx1
ZXMgPSBWZWN0b3IoYXhpc0NvdW50LCBTaGFyZWRHYW1lcGFkVmFsdWUgeyAwLjAgfSk7CiAKICAg
ICBhdXRvIGlucHV0RWxlbWVudHMgPSBoaWREZXZpY2UoKS51bmlxdWVJbnB1dEVsZW1lbnRzSW5E
ZXZpY2VUcmVlT3JkZXIoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z2FtZXBhZC9tYWMvTG9naXRlY2hHYW1lcGFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dhbWVwYWQvbWFjL0xvZ2l0ZWNoR2FtZXBhZC5jcHAKaW5kZXggNjcxNDNmYjk5NWJhMmMzZTY4
ZGQyMTFkMTY1YmU2MjBjZWY3ODllZi4uZmU0Y2VkYzUxZDYzOWZiN2IxYWU5OTMzZTVjMjY5NmMz
OTc4YThlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMv
TG9naXRlY2hHYW1lcGFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFk
L21hYy9Mb2dpdGVjaEdhbWVwYWQuY3BwCkBAIC00MywxMiArNDMsMTAgQEAgTG9naXRlY2hHYW1l
cGFkOjpMb2dpdGVjaEdhbWVwYWQoSElERGV2aWNlJiYgZGV2aWNlLCB1bnNpZ25lZCBpbmRleCkK
IAogICAgIG1fbWFwcGluZyA9IHN0YW5kYXJkR2FtZXBhZE1hcHBpbmdTdHJpbmcoKTsKIAotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZTdGFuZGFyZEdhbWVwYWRCdXR0b25zV2l0
aG91dEhvbWVCdXR0b247ICsraSkKLSAgICAgICAgbV9idXR0b25WYWx1ZXMuYXBwZW5kKDAuMCk7
CisgICAgbV9idXR0b25WYWx1ZXMgPSBWZWN0b3IobnVtYmVyT2ZTdGFuZGFyZEdhbWVwYWRCdXR0
b25zV2l0aG91dEhvbWVCdXR0b24sIFNoYXJlZEdhbWVwYWRWYWx1ZSB7IDAuMCB9KTsKIAotICAg
IHN0YXRpYyBjb25zdCBzaXplX3QgYXhpc0NvdW50ID0gNDsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGF4aXNDb3VudDsgKytpKQotICAgICAgICBtX2F4aXNWYWx1ZXMuYXBwZW5kKDAuMCk7
CisgICAgY29uc3RleHByIHNpemVfdCBheGlzQ291bnQgPSA0OworICAgIG1fYXhpc1ZhbHVlcyA9
IFZlY3RvcihheGlzQ291bnQsIFNoYXJlZEdhbWVwYWRWYWx1ZSB7IDAuMCB9KTsKIAogICAgIGF1
dG8gaW5wdXRFbGVtZW50cyA9IGhpZERldmljZSgpLnVuaXF1ZUlucHV0RWxlbWVudHNJbkRldmlj
ZVRyZWVPcmRlcigpOwogCkBAIC01OSwxMSArNTcsMTIgQEAgTG9naXRlY2hHYW1lcGFkOjpMb2dp
dGVjaEdhbWVwYWQoSElERGV2aWNlJiYgZGV2aWNlLCB1bnNpZ25lZCBpbmRleCkKICAgICBmb3Ig
KGF1dG8mIGVsZW1lbnQgOiBpbnB1dEVsZW1lbnRzKSB7CiAgICAgICAgIHN3aXRjaCAoZWxlbWVu
dC5mdWxsVXNhZ2UoKSkgewogICAgICAgICBjYXNlIGhpZEhhdHN3aXRjaEZ1bGxVc2FnZTogewot
ICAgICAgICAgICAgVmVjdG9yPFNoYXJlZEdhbWVwYWRWYWx1ZT4gaGF0c3dpdGNoVmFsdWVzOwot
ICAgICAgICAgICAgaGF0c3dpdGNoVmFsdWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90
KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlclRvcF0pOwotICAgICAgICAgICAgaGF0c3dp
dGNoVmFsdWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xl
OjpMZWZ0Q2x1c3RlclJpZ2h0XSk7Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5k
KG1fYnV0dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyQm90
dG9tXSk7Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFsdWVz
WyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyTGVmdF0pOworICAgICAgICAg
ICAgYXV0byBoYXRzd2l0Y2hWYWx1ZXMgPSBWZWN0b3IgeworICAgICAgICAgICAgICAgIG1fYnV0
dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyVG9wXSwKKyAg
ICAgICAgICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpM
ZWZ0Q2x1c3RlclJpZ2h0XSwKKyAgICAgICAgICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90
KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlckJvdHRvbV0sCisgICAgICAgICAgICAgICAg
bV9idXR0b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJMZWZ0
XQorICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgbV9lbGVtZW50TWFwLnNldChlbGVtZW50
LmNvb2tpZSgpLCBtYWtlVW5pcXVlPEhJREdhbWVwYWRIYXRzd2l0Y2g+KGVsZW1lbnQsIFdURk1v
dmUoaGF0c3dpdGNoVmFsdWVzKSkpOwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9TdGFkaWFISURHYW1lcGFkLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL1N0YWRpYUhJREdhbWVwYWQuY3Bw
CmluZGV4IDBhOTRlNTYyMzNhMjA0NDY0MWYxMDBmMDU2NDRkNTc1YWRiYzllNzMuLjQyMTU5Mjdj
NDk0YzNlZWU2YzEyNTBhYjU1NjQxZmE3MmEyMjA2OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL1N0YWRpYUhJREdhbWVwYWQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL1N0YWRpYUhJREdhbWVwYWQuY3BwCkBAIC00
MSwxMiArNDEsMTAgQEAgU3RhZGlhSElER2FtZXBhZDo6U3RhZGlhSElER2FtZXBhZChISUREZXZp
Y2UmJiBkZXZpY2UsIHVuc2lnbmVkIGluZGV4KQogCiAgICAgbV9tYXBwaW5nID0gc3RhbmRhcmRH
YW1lcGFkTWFwcGluZ1N0cmluZygpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxOTsg
KytpKQotICAgICAgICBtX2J1dHRvblZhbHVlcy5hcHBlbmQoMC4wKTsKKyAgICBtX2J1dHRvblZh
bHVlcyA9IFZlY3RvcigxOSwgU2hhcmVkR2FtZXBhZFZhbHVlIHsgMC4wIH0pOwogCi0gICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBheGlzQ291bnQgPSA0OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYXhpc0NvdW50OyArK2kpCi0gICAgICAgIG1fYXhpc1ZhbHVlcy5hcHBlbmQoMC4wKTsKKyAg
ICBjb25zdGV4cHIgc2l6ZV90IGF4aXNDb3VudCA9IDQ7CisgICAgbV9heGlzVmFsdWVzID0gVmVj
dG9yKGF4aXNDb3VudCwgU2hhcmVkR2FtZXBhZFZhbHVlIHsgMC4wIH0pOwogCiAgICAgYXV0byBp
bnB1dEVsZW1lbnRzID0gaGlkRGV2aWNlKCkudW5pcXVlSW5wdXRFbGVtZW50c0luRGV2aWNlVHJl
ZU9yZGVyKCk7CiAKQEAgLTcwLDExICs2OCwxMiBAQCBTdGFkaWFISURHYW1lcGFkOjpTdGFkaWFI
SURHYW1lcGFkKEhJRERldmljZSYmIGRldmljZSwgdW5zaWduZWQgaW5kZXgpCiAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICBjYXNlIGhpZEhhdHN3aXRjaEZ1bGxVc2FnZTogewotICAgICAg
ICAgICAgVmVjdG9yPFNoYXJlZEdhbWVwYWRWYWx1ZT4gaGF0c3dpdGNoVmFsdWVzOwotICAgICAg
ICAgICAgaGF0c3dpdGNoVmFsdWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVw
YWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlclRvcF0pOwotICAgICAgICAgICAgaGF0c3dpdGNoVmFs
dWVzLmFwcGVuZChtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0
Q2x1c3RlclJpZ2h0XSk7Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0
dG9uVmFsdWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyQm90dG9tXSk7
Ci0gICAgICAgICAgICBoYXRzd2l0Y2hWYWx1ZXMuYXBwZW5kKG1fYnV0dG9uVmFsdWVzWyhzaXpl
X3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyTGVmdF0pOworICAgICAgICAgICAgYXV0
byBoYXRzd2l0Y2hWYWx1ZXMgPSBWZWN0b3IgeworICAgICAgICAgICAgICAgIG1fYnV0dG9uVmFs
dWVzWyhzaXplX3QpR2FtZXBhZEJ1dHRvblJvbGU6OkxlZnRDbHVzdGVyVG9wXSwKKyAgICAgICAg
ICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVwYWRCdXR0b25Sb2xlOjpMZWZ0Q2x1
c3RlclJpZ2h0XSwKKyAgICAgICAgICAgICAgICBtX2J1dHRvblZhbHVlc1soc2l6ZV90KUdhbWVw
YWRCdXR0b25Sb2xlOjpMZWZ0Q2x1c3RlckJvdHRvbV0sCisgICAgICAgICAgICAgICAgbV9idXR0
b25WYWx1ZXNbKHNpemVfdClHYW1lcGFkQnV0dG9uUm9sZTo6TGVmdENsdXN0ZXJMZWZ0XQorICAg
ICAgICAgICAgfTsKIAogICAgICAgICAgICAgbV9lbGVtZW50TWFwLnNldChlbGVtZW50LmNvb2tp
ZSgpLCBtYWtlVW5pcXVlPEhJREdhbWVwYWRIYXRzd2l0Y2g+KGVsZW1lbnQsIFdURk1vdmUoaGF0
c3dpdGNoVmFsdWVzKSkpOwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IDFmZWUyOWFlNWY3
MTljNGU1NTRhMmM3ZTcwY2I3MGYwMWY5YjIwMDIuLjcyNGZiMTdjMzNmNGJjYTQ2ODg5YzgzYmM1
NTg0OGZkNzI3MGMzMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzTGF5ZXIuY3BwCkBAIC03NjMsMTEgKzc2Myw5IEBAIHZvaWQgR3JhcGhpY3NM
YXllcjo6YWRkUmVwYWludFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZXBhaW50UmVjdCkKICAgICBG
bG9hdFJlY3QgbGFyZ2VzdFJlcGFpbnRSZWN0KEZsb2F0UG9pbnQoKSwgbV9zaXplKTsKICAgICBs
YXJnZXN0UmVwYWludFJlY3QuaW50ZXJzZWN0KHJlcGFpbnRSZWN0KTsKICAgICBSZXBhaW50TWFw
OjppdGVyYXRvciByZXBhaW50SXQgPSByZXBhaW50UmVjdE1hcCgpLmZpbmQodGhpcyk7Ci0gICAg
aWYgKHJlcGFpbnRJdCA9PSByZXBhaW50UmVjdE1hcCgpLmVuZCgpKSB7Ci0gICAgICAgIFZlY3Rv
cjxGbG9hdFJlY3Q+IHJlcGFpbnRSZWN0czsKLSAgICAgICAgcmVwYWludFJlY3RzLmFwcGVuZChs
YXJnZXN0UmVwYWludFJlY3QpOwotICAgICAgICByZXBhaW50UmVjdE1hcCgpLnNldCh0aGlzLCBy
ZXBhaW50UmVjdHMpOwotICAgIH0gZWxzZSB7CisgICAgaWYgKHJlcGFpbnRJdCA9PSByZXBhaW50
UmVjdE1hcCgpLmVuZCgpKQorICAgICAgICByZXBhaW50UmVjdE1hcCgpLnNldCh0aGlzLCBWZWN0
b3IgeyBXVEZNb3ZlKGxhcmdlc3RSZXBhaW50UmVjdCkgfSk7CisgICAgZWxzZSB7CiAgICAgICAg
IFZlY3RvcjxGbG9hdFJlY3Q+JiByZXBhaW50UmVjdHMgPSByZXBhaW50SXQtPnZhbHVlOwogICAg
ICAgICByZXBhaW50UmVjdHMuYXBwZW5kKGxhcmdlc3RSZXBhaW50UmVjdCk7CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcApp
bmRleCBiOTc5OWE0ZDEwNjFlZDIwYTFiNTBlZDUwNjg2NTFjNWZlYTQ2NmE0Li4xZDAwNGZjMTE0
YWNiNzE1YjEwNTI1OTAzMzZiMDZmY2VjMzAzMDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmNwcApAQCAtMjkwLDE3ICsyOTAsMTQg
QEAgc3RhdGljIFZlY3RvcjxGbG9hdFBvaW50R3JhcGg6OlBvbHlnb24+IHBvbHlnb25zRm9yUmVj
dChjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYKIAogVmVjdG9yPFBhdGg+IFBhdGhVdGlsaXRpZXM6
OnBhdGhzV2l0aFNocmlua1dyYXBwZWRSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVj
dHMsIGZsb2F0IHJhZGl1cykKIHsKLSAgICBWZWN0b3I8UGF0aD4gcGF0aHM7Ci0KICAgICBpZiAo
cmVjdHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gcGF0aHM7CisgICAgICAgIHJldHVybiB7
IH07CiAKICAgICBpZiAocmVjdHMuc2l6ZSgpID4gMjApIHsKICAgICAgICAgUGF0aCBwYXRoOwog
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiByZWN0cykKICAgICAgICAgICAgIHBhdGgu
YWRkUm91bmRlZFJlY3QocmVjdCwgRmxvYXRTaXplKHJhZGl1cywgcmFkaXVzKSk7Ci0gICAgICAg
IHBhdGhzLmFwcGVuZChwYXRoKTsKLSAgICAgICAgcmV0dXJuIHBhdGhzOworICAgICAgICByZXR1
cm4geyBXVEZNb3ZlKHBhdGgpIH07CiAgICAgfQogCiAgICAgRmxvYXRQb2ludEdyYXBoIGdyYXBo
OwpAQCAtMzA5LDEwICszMDYsMTEgQEAgVmVjdG9yPFBhdGg+IFBhdGhVdGlsaXRpZXM6OnBhdGhz
V2l0aFNocmlua1dyYXBwZWRSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYKICAgICAgICAg
UGF0aCBwYXRoOwogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiByZWN0cykKICAgICAg
ICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCwgRmxvYXRTaXplKHJhZGl1cywgcmFkaXVz
KSk7Ci0gICAgICAgIHBhdGhzLmFwcGVuZChwYXRoKTsKLSAgICAgICAgcmV0dXJuIHBhdGhzOwor
ICAgICAgICByZXR1cm4geyBXVEZNb3ZlKHBhdGgpIH07CiAgICAgfQogCisgICAgVmVjdG9yPFBh
dGg+IHBhdGhzOworICAgIHBhdGhzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocG9seXMuc2l6ZSgp
KTsKICAgICBmb3IgKGF1dG8mIHBvbHkgOiBwb2x5cykgewogICAgICAgICBQYXRoIHBhdGg7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwb2x5LnNpemUoKTsgKytpKSB7CkBAIC0z
NDQsNyArMzQyLDcgQEAgVmVjdG9yPFBhdGg+IFBhdGhVdGlsaXRpZXM6OnBhdGhzV2l0aFNocmlu
a1dyYXBwZWRSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYKICAgICAgICAgICAgIHBhdGgu
YWRkQXJjVG8oKmZyb21FZGdlLnNlY29uZCwgKnRvRWRnZS5maXJzdCArIHRvT2Zmc2V0LCBjbGFt
cGVkUmFkaXVzKTsKICAgICAgICAgfQogICAgICAgICBwYXRoLmNsb3NlU3VicGF0aCgpOwotICAg
ICAgICBwYXRocy5hcHBlbmQocGF0aCk7CisgICAgICAgIHBhdGhzLnVuY2hlY2tlZEFwcGVuZChX
VEZNb3ZlKHBhdGgpKTsKICAgICB9CiAgICAgcmV0dXJuIHBhdGhzOwogfQpAQCAtNTQzLDEzICs1
NDEsMTQgQEAgUGF0aCBQYXRoVXRpbGl0aWVzOjpwYXRoV2l0aFNocmlua1dyYXBwZWRSZWN0c0Zv
ck91dGxpbmUoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4KICAgICBib3R0b21MZWZ0UmFkaXVzID0g
Zmlyc3RMaW5lUmFkaWkuYm90dG9tTGVmdCgpOwogICAgIHRvcFJpZ2h0UmFkaXVzID0gbGFzdExp
bmVSYWRpaS50b3BSaWdodCgpOwogICAgIGJvdHRvbVJpZ2h0UmFkaXVzID0gbGFzdExpbmVSYWRp
aS5ib3R0b21SaWdodCgpOwotICAgIFZlY3RvcjxGbG9hdFBvaW50PiBjb3JuZXJzOwogICAgIC8v
IHBoeXNpY2FsIHRvcExlZnQvdG9wUmlnaHQvYm90dG9tUmlnaHQvYm90dG9tTGVmdAogICAgIGF1
dG8gaXNIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUod3JpdGluZ01vZGUpOwot
ICAgIGNvcm5lcnMuYXBwZW5kKGZpcnN0TGluZVJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci0gICAg
Y29ybmVycy5hcHBlbmQoaXNIb3Jpem9udGFsID8gbGFzdExpbmVSZWN0Lm1heFhNaW5ZQ29ybmVy
KCkgOiBmaXJzdExpbmVSZWN0Lm1heFhNaW5ZQ29ybmVyKCkpOwotICAgIGNvcm5lcnMuYXBwZW5k
KGxhc3RMaW5lUmVjdC5tYXhYTWF4WUNvcm5lcigpKTsKLSAgICBjb3JuZXJzLmFwcGVuZChpc0hv
cml6b250YWwgPyBmaXJzdExpbmVSZWN0Lm1pblhNYXhZQ29ybmVyKCkgOiBsYXN0TGluZVJlY3Qu
bWluWE1heFlDb3JuZXIoKSk7CisgICAgYXV0byBjb3JuZXJzID0gVmVjdG9yPEZsb2F0UG9pbnQ+
Ojpmcm9tKAorICAgICAgICBmaXJzdExpbmVSZWN0Lm1pblhNaW5ZQ29ybmVyKCksCisgICAgICAg
IGlzSG9yaXpvbnRhbCA/IGxhc3RMaW5lUmVjdC5tYXhYTWluWUNvcm5lcigpIDogZmlyc3RMaW5l
UmVjdC5tYXhYTWluWUNvcm5lcigpLAorICAgICAgICBsYXN0TGluZVJlY3QubWF4WE1heFlDb3Ju
ZXIoKSwKKyAgICAgICAgaXNIb3Jpem9udGFsID8gZmlyc3RMaW5lUmVjdC5taW5YTWF4WUNvcm5l
cigpIDogbGFzdExpbmVSZWN0Lm1pblhNYXhZQ29ybmVyKCkKKyAgICApOwogCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHBvbHkuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgYXV0byBtb3Zl
T3JBZGRMaW5lVG8gPSBbaSwgJnBhdGhdIChjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVy
UHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZm
ZXJQcml2YXRlLmNwcAppbmRleCA1NDk5ZjM3YTdmMzY0NmJkNWYzOTVhNDhiMDlkOTQxMWQ0Yzli
NjY0Li4wNGNiZTRkMjdmMTkwYjdiMjdiOWNhN2U5OGE5YzQ3MTczZDJmODliIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2
YXRlLmNwcApAQCAtMjE2LDEwICsyMTYsOSBAQCB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGU6OmJ1
ZmZlcmVkU2FtcGxlc0ZvclRyYWNrSWQoY29uc3QgQXRvbVN0cmluZyYgdHJhY2tJZCwgQwogICAg
IGlmICghdHJhY2tCdWZmZXIpCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAKLSAg
ICBWZWN0b3I8U3RyaW5nPiBzYW1wbGVEZXNjcmlwdGlvbnM7Ci0gICAgZm9yIChhdXRvJiBwYWly
IDogdHJhY2tCdWZmZXItPnNhbXBsZXMuZGVjb2RlT3JkZXIoKSkKLSAgICAgICAgc2FtcGxlRGVz
Y3JpcHRpb25zLmFwcGVuZCh0b1N0cmluZygqcGFpci5zZWNvbmQpKTsKLQorICAgIGF1dG8gc2Ft
cGxlRGVzY3JpcHRpb25zID0gV1RGOjptYXAodHJhY2tCdWZmZXItPnNhbXBsZXMuZGVjb2RlT3Jk
ZXIoKSwgW10oYXV0byYgZW50cnkpIHsKKyAgICAgICAgcmV0dXJuIHRvU3RyaW5nKCplbnRyeS5z
ZWNvbmQpOworICAgIH0pOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoc2FtcGxlRGVz
Y3JpcHRpb25zKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcu
Y3BwCmluZGV4IDhiMDRmOWJlOTZjMzZlMGEyNjIxODBhMjVlYTM3NDU5NjJiM2Q3ZDUuLmM1NDYx
NDYyM2I4N2VjMDg5NjFmMWQ0NDIwZjk2MDFmMTZhNmFiNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWlu
Zy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcApAQCAtMjAxLDkgKzIwMSw3IEBAIFJlZlB0cjxGcmFn
bWVudGVkU2hhcmVkQnVmZmVyPiBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OnNhbml0aXpl
U2tkKGNvbnN0IEZyCiBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxSZWY8RnJhZ21lbnRlZFNoYXJlZEJ1
ZmZlcj4+PiBDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OmV4dHJhY3RLZXlJRHNTa2QoY29u
c3QgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogewogICAgIC8vIEluIHRoZSAnc2tk
JyBzY2hlbWUsIHRoZSBpbml0IGRhdGEgaXMgdGhlIGtleSBJRC4KLSAgICBWZWN0b3I8UmVmPEZy
YWdtZW50ZWRTaGFyZWRCdWZmZXI+PiBrZXlJRHM7Ci0gICAga2V5SURzLmFwcGVuZChidWZmZXIu
Y29weSgpKTsKLSAgICByZXR1cm4ga2V5SURzOworICAgIHJldHVybiBWZWN0b3IgeyBidWZmZXIu
Y29weSgpIH07CiB9CiAKIHN0YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmlu
SG9vZEhhc2hTZXQ8QXRvbVN0cmluZz4mIHZhbGlkSW5pdERhdGFUeXBlcygpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1J
bnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1p
bmdBVkZPYmpDLm1tCmluZGV4IGQ2MzYxMmZhYTA1MzcwYTAzOTczYTFlMmQ1NmMxODY4YTJmOTkx
NjAuLjk2MjVmYTk1MDNlN2JlYmM3MTlmYzRiMzdhNjNjMzhkNzQ1MDMwOGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUlu
c3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJl
YW1pbmdBVkZPYmpDLm1tCkBAIC0xNDk0LDcgKzE0OTQsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vz
c2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6dXBkYXRlS2V5U3RhdHVzZXMoc3RkOjpvcHRp
b25hbAogICAgICAgICB9CiAgICAgfQogCi0gICAgbV9rZXlTdGF0dXNlcy5zd2FwKGtleVN0YXR1
c2VzKTsKKyAgICBtX2tleVN0YXR1c2VzID0gV1RGTW92ZShrZXlTdGF0dXNlcyk7CiAKICAgICBt
X2luc3RhbmNlLT5zZXNzaW9uS2V5U3RhdHVzZXNDaGFuZ2VkKCp0aGlzKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0lt
YWdlRGVjb2RlckFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1tCmluZGV4IDU2M2FmMTkyNGQ5
YWYzNTllOTMwZWY2NGJhZTMyM2ZjMDQxZGU4N2EuLmFkN2Y0NTEwMWMwNmExODg4YzAwOGZhZWQ0
YTkxOTA1NjEzODI5M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVjb2RlckFWRk9iakMubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVy
QVZGT2JqQy5tbQpAQCAtNTM1LDEzICs1MzUsMTAgQEAgVmVjdG9yPEltYWdlRGVjb2Rlcjo6RnJh
bWVJbmZvPiBJbWFnZURlY29kZXJBVkZPYmpDOjpmcmFtZUluZm9zKCkgY29uc3QKICAgICBpZiAo
bV9zYW1wbGVEYXRhLmVtcHR5KCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBWZWN0b3I8
SW1hZ2VEZWNvZGVyOjpGcmFtZUluZm8+IGluZm9zOwotICAgIGZvciAoYXV0byYgc2FtcGxlIDog
bV9zYW1wbGVEYXRhLnByZXNlbnRhdGlvbk9yZGVyKCkpIHsKKyAgICByZXR1cm4gV1RGOjptYXAo
bV9zYW1wbGVEYXRhLnByZXNlbnRhdGlvbk9yZGVyKCksIFtdKGF1dG8mIHNhbXBsZSkgewogICAg
ICAgICBhdXRvKiBpbWFnZVNhbXBsZSA9IChJbWFnZURlY29kZXJBVkZPYmpDU2FtcGxlKilzYW1w
bGUuc2Vjb25kLmdldCgpOwotICAgICAgICBpbmZvcy5hcHBlbmQoeyBpbWFnZVNhbXBsZS0+aGFz
QWxwaGEoKSwgU2Vjb25kcyhpbWFnZVNhbXBsZS0+ZHVyYXRpb24oKS50b0RvdWJsZSgpKX0pOwot
ICAgIH0KLQotICAgIHJldHVybiBpbmZvczsKKyAgICAgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6
RnJhbWVJbmZvIHsgaW1hZ2VTYW1wbGUtPmhhc0FscGhhKCksIFNlY29uZHMoaW1hZ2VTYW1wbGUt
PmR1cmF0aW9uKCkudG9Eb3VibGUoKSkgfTsKKyAgICB9KTsKIH0KIAogYm9vbCBJbWFnZURlY29k
ZXJBVkZPYmpDOjpmcmFtZUFsbG93U3Vic2FtcGxpbmdBdEluZGV4KHNpemVfdCBpbmRleCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclBhcnNlckFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQYXJzZXJBVkZP
YmpDLm1tCmluZGV4IGFhMTU4NDA0YjEwZTQ0NGFmNmU1ZWRkYzhkYWQ2YmE5NmVkNWNiMjIuLmU2
MWIxNDdmNjNjNWY0NTcyNzVmNjA1MDNlMzdhOGI1MmQxOGUzYTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZl
clBhcnNlckFWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUGFyc2VyQVZGT2JqQy5tbQpAQCAtMjk3LDE2
ICsyOTcsMTQgQEAgdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJBVkZPYmpDOjpkaWRQYXJzZVN0cmVh
bURhdGFBc0Fzc2V0KEFWQXNzZXQqIGFzc2V0KQogCiAgICAgICAgICAgICBpZiAoW3RyYWNrIGhh
c01lZGlhQ2hhcmFjdGVyaXN0aWM6QVZNZWRpYUNoYXJhY3RlcmlzdGljVmlzdWFsXSkgewogICAg
ICAgICAgICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2Vn
bWVudDo6VmlkZW9UcmFja0luZm9ybWF0aW9uIGluZm87Ci0gICAgICAgICAgICAgICAgYXV0byB2
aWRlb1RyYWNrID0gVmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmNyZWF0ZSh0
cmFjayk7Ci0gICAgICAgICAgICAgICAgaW5mby50cmFjayA9IHZpZGVvVHJhY2suY29weVJlZigp
OworICAgICAgICAgICAgICAgIGluZm8udHJhY2sgPSBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6Y3JlYXRlKHRyYWNrKTsKICAgICAgICAgICAgICAgICBpbmZvLmRlc2NyaXB0
aW9uID0gTWVkaWFEZXNjcmlwdGlvbkFWRk9iakM6OmNyZWF0ZSh0cmFjayk7Ci0gICAgICAgICAg
ICAgICAgc2VnbWVudC52aWRlb1RyYWNrcy5hcHBlbmQoaW5mbyk7CisgICAgICAgICAgICAgICAg
c2VnbWVudC52aWRlb1RyYWNrcy5hcHBlbmQoV1RGTW92ZShpbmZvKSk7CiAgICAgICAgICAgICB9
IGVsc2UgaWYgKFt0cmFjayBoYXNNZWRpYUNoYXJhY3RlcmlzdGljOkFWTWVkaWFDaGFyYWN0ZXJp
c3RpY0F1ZGlibGVdKSB7CiAgICAgICAgICAgICAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVu
dDo6SW5pdGlhbGl6YXRpb25TZWdtZW50OjpBdWRpb1RyYWNrSW5mb3JtYXRpb24gaW5mbzsKLSAg
ICAgICAgICAgICAgICBhdXRvIGF1ZGlvVHJhY2sgPSBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6Y3JlYXRlKHRyYWNrKTsKLSAgICAgICAgICAgICAgICBpbmZvLnRyYWNrID0g
YXVkaW9UcmFjay5jb3B5UmVmKCk7CisgICAgICAgICAgICAgICAgaW5mby50cmFjayA9IEF1ZGlv
VHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjcmVhdGUodHJhY2spOwogICAgICAgICAg
ICAgICAgIGluZm8uZGVzY3JpcHRpb24gPSBNZWRpYURlc2NyaXB0aW9uQVZGT2JqQzo6Y3JlYXRl
KHRyYWNrKTsKLSAgICAgICAgICAgICAgICBzZWdtZW50LmF1ZGlvVHJhY2tzLmFwcGVuZChpbmZv
KTsKKyAgICAgICAgICAgICAgICBzZWdtZW50LmF1ZGlvVHJhY2tzLmFwcGVuZChXVEZNb3ZlKGlu
Zm8pKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gRklYTUUoMTI1MTYxKSAgICA6
IEFkZCBUZXh0VHJhY2sgc3VwcG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCmluZGV4
IDg1NDIxZTNkZTcwOWNlMTU5YzQ5NGI0MGZiOGQxYWQyMzU5M2MzYmIuLmNiMmQwYmU4OTcwNDZi
N2ZmOWYzMjc2Yzk3Njc5YWZiNGYwMTJhYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2Eu
bW0KQEAgLTY4LDExICs2OCwxMCBAQCBWZWN0b3I8Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFZhcmlh
dGlvbkF4aXM+IEZvbnRQbGF0Zm9ybURhdGE6OnZhcmlhdGlvbkF4ZXMoU2hvdQogICAgIGlmICgh
cGxhdGZvcm1Gb250KQogICAgICAgICByZXR1cm4geyB9OwogICAgIAotICAgIFZlY3RvcjxGb250
VmFyaWF0aW9uQXhpcz4gcmVzdWx0czsKLSAgICBmb3IgKGF1dG8mIFt0YWcsIHZhbHVlc10gOiBk
ZWZhdWx0VmFyaWF0aW9uVmFsdWVzKHBsYXRmb3JtRm9udCwgc2hvdWxkTG9jYWxpemVBeGlzTmFt
ZXMpKQotICAgICAgICByZXN1bHRzLmFwcGVuZChGb250UGxhdGZvcm1EYXRhOjpGb250VmFyaWF0
aW9uQXhpcyh2YWx1ZXMuYXhpc05hbWUsIFN0cmluZyh0YWcuZGF0YSgpLCB0YWcuc2l6ZSgpKSwg
dmFsdWVzLmRlZmF1bHRWYWx1ZSwgdmFsdWVzLm1pbmltdW1WYWx1ZSwgdmFsdWVzLm1heGltdW1W
YWx1ZSkpOwotICAgIAotICAgIHJldHVybiByZXN1bHRzOworICAgIHJldHVybiBXVEY6Om1hcChk
ZWZhdWx0VmFyaWF0aW9uVmFsdWVzKHBsYXRmb3JtRm9udCwgc2hvdWxkTG9jYWxpemVBeGlzTmFt
ZXMpLCBbXShhdXRvJiYgZW50cnkpIHsKKyAgICAgICAgYXV0byYgW3RhZywgdmFsdWVzXSA9IGVu
dHJ5OworICAgICAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YTo6Rm9udFZhcmlhdGlvbkF4aXMg
eyB2YWx1ZXMuYXhpc05hbWUsIFN0cmluZyh0YWcuZGF0YSgpLCB0YWcuc2l6ZSgpKSwgdmFsdWVz
LmRlZmF1bHRWYWx1ZSwgdmFsdWVzLm1pbmltdW1WYWx1ZSwgdmFsdWVzLm1heGltdW1WYWx1ZSB9
OworICAgIH0pOwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9QYXN0ZWJvYXJkTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9h
cmRNYWMubW0KaW5kZXggYmE4ZWExZWI0NDhhOTIxZTMwZDNhZTZhOWM3N2U4ODIzM2FiYzUzYi4u
YTJjMjUwYWEyYmVmOGRlOTY0YmFmMDkyNDBkNWUwZWM0MTUwZWY4NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KQEAgLTcwMiwxMCArNzAyLDcgQEAg
QUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KICAgICAgICAgTlNVUkwgKnVybCA9
IFtOU1VSTCBVUkxXaXRoU3RyaW5nOmNvY29hRGF0YV07CiAgICAgICAgIGlmIChbdXJsIGlzRmls
ZVVSTF0pCiAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgVmVjdG9yPFN0cmluZz4gdHlw
ZXM7Ci0gICAgICAgIHR5cGVzLmFwcGVuZChjb2NvYVR5cGUpOwotICAgICAgICBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFR5cGVzKHR5cGVzLCBtX3Bhc3Rl
Ym9hcmROYW1lLCBjb250ZXh0KCkpOworICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFz
dGVib2FyZFN0cmF0ZWd5KCktPnNldFR5cGVzKHsgY29jb2FUeXBlIH0sIG1fcGFzdGVib2FyZE5h
bWUsIGNvbnRleHQoKSk7CiAgICAgICAgIG1fY2hhbmdlQ291bnQgPSBwbGF0Zm9ybVN0cmF0ZWdp
ZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFN0cmluZ0ZvclR5cGUoY29jb2FEYXRhLCBj
b2NvYVR5cGUsIG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQoKSk7CiAKICAgICAgICAgcmV0dXJu
OwpAQCAtNzE0LDkgKzcxMSw3IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAog
CiAgICAgaWYgKCFjb2NvYVR5cGUuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIGV2ZXJ5dGhpbmcg
ZWxzZSB3ZSBrbm93IG9mIGdvZXMgb24gdGhlIHBib2FyZCBhcyBhIHN0cmluZwotICAgICAgICBW
ZWN0b3I8U3RyaW5nPiB0eXBlczsKLSAgICAgICAgdHlwZXMuYXBwZW5kKGNvY29hVHlwZSk7Ci0g
ICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+YWRkVHlw
ZXModHlwZXMsIG1fcGFzdGVib2FyZE5hbWUsIGNvbnRleHQoKSk7CisgICAgICAgIHBsYXRmb3Jt
U3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+YWRkVHlwZXMoeyBjb2NvYVR5cGUg
fSwgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKTsKICAgICAgICAgbV9jaGFuZ2VDb3VudCA9
IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0U3RyaW5nRm9y
VHlwZShjb2NvYURhdGEsIGNvY29hVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSwgY29udGV4dCgpKTsK
ICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9SZWFsdGltZVZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9SZWFsdGltZVZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAKaW5kZXggM2UzZjQx
YTFjNTgwN2U2Y2QzNTlkZTNkZjI2YWU3MmQ1NTFjZDU4Mi4uNzdkMzI2NjU2ZDVjYmM1YWVmY2Q0
MTdhMTdhODdhNDZmNzEyMjdiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vUmVhbHRpbWVWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lVmlkZW9DYXB0dXJlU291cmNlLmNw
cApAQCAtNzUsMTEgKzc1LDkgQEAgVmVjdG9yPFZpZGVvUHJlc2V0RGF0YT4gUmVhbHRpbWVWaWRl
b0NhcHR1cmVTb3VyY2U6OnByZXNldHNEYXRhKCkKIAogdm9pZCBSZWFsdGltZVZpZGVvQ2FwdHVy
ZVNvdXJjZTo6c2V0U3VwcG9ydGVkUHJlc2V0cyhWZWN0b3I8VmlkZW9QcmVzZXREYXRhPiYmIHBy
ZXNldERhdGEpCiB7Ci0gICAgVmVjdG9yPFJlZjxWaWRlb1ByZXNldD4+IHByZXNldHM7Ci0KLSAg
ICBmb3IgKGF1dG8mIGRhdGEgOiBwcmVzZXREYXRhKQotICAgICAgICBwcmVzZXRzLmFwcGVuZChW
aWRlb1ByZXNldDo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpKTsKLQorICAgIGF1dG8gcHJlc2V0cyA9
IFdURjo6bWFwKFdURk1vdmUocHJlc2V0RGF0YSksIFtdKGF1dG8mJiBkYXRhKSB7CisgICAgICAg
IHJldHVybiBWaWRlb1ByZXNldDo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpOworICAgIH0pOwogICAg
IHNldFN1cHBvcnRlZFByZXNldHMoV1RGTW92ZShwcmVzZXRzKSk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCmluZGV4
IDY3YTc2Mjk1ZDg1ZjM5MWM4M2IyNDAwZTZkMWZlNTc5Y2NkZWQ4OGYuLjYyMzYzNmFjMmFiZDY4
Mzg0MTRkYzhmMWY5MjZjZWQ1YzQ3Y2NhMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcApAQCAtMTQxLDEwICsxNDEsOCBA
QCB2b2lkIEJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmIHVybCwg
VmVjdG9yPEJsb2JQYXJ0PiYmIGJsb2JQYQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBCbG9iUGFydDo6VHlwZTo6QmxvYjogewotICAgICAgICAgICAgaWYgKGF1
dG8gYmxvYiA9IG1fYmxvYnMuZ2V0KHBhcnQudXJsKCkuc3RyaW5nKCkpKSB7Ci0gICAgICAgICAg
ICAgICAgZm9yIChjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0gOiBibG9iLT5pdGVtcygpKQotICAg
ICAgICAgICAgICAgICAgICBibG9iRGF0YS0+bV9pdGVtcy5hcHBlbmQoaXRlbSk7Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoYXV0byBibG9iID0gbV9ibG9icy5nZXQocGFydC51cmwo
KS5zdHJpbmcoKSkpCisgICAgICAgICAgICAgICAgYmxvYkRhdGEtPm1faXRlbXMuYXBwZW5kVmVj
dG9yKGJsb2ItPml0ZW1zKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgfQpAQCAtMzI4LDcgKzMyNiw3IEBAIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6d3JpdGVCbG9i
c1RvVGVtcG9yYXJ5RmlsZXNGb3JJbmRleGVkREIoY29uc3QgVmVjdG9yPFN0cmluCiAgICAgICAg
ICAgICAgICAgZmlsZVBhdGhzLmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBmaWxlUGF0aHMuYXBwZW5kKHRlbXBGaWxlUGF0aC5pc29s
YXRlZENvcHkoKSk7CisgICAgICAgICAgICBmaWxlUGF0aHMuYXBwZW5kKFdURk1vdmUodGVtcEZp
bGVQYXRoKS5pc29sYXRlZENvcHkoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYWxsT25NYWlu
VGhyZWFkKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBm
aWxlUGF0aHMgPSBXVEZNb3ZlKGZpbGVQYXRocyldICgpIG11dGFibGUgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggODUzMGUz
MzU1ZjJkNmI4ZDdmZmI2ZWRmODNkNjA4YmNhNGI5ZjU1NS4uOWFiOTk4ZTQxY2IwOGNmMGI2Zjkw
ZjEwZjEzYzRiODQ1N2VjOTM5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC0yMDg2LDEwICsyMDg2LDggQEAgdm9pZCBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6ZHJhd0JveFNpZGVGcm9tUGF0aChHcmFwaGljc0NvbnRleHQmIGdy
YXBoaWNzQ29udGV4dCwKICAgICAgICAgICAgICAgICBnYXBMZW5ndGggKz0gKGRhc2hMZW5ndGgg
IC8gbnVtYmVyT2ZHYXBzKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgRGFzaEFycmF5
IGxpbmVEYXNoOwotICAgICAgICAgICAgbGluZURhc2guYXBwZW5kKGRhc2hMZW5ndGgpOwotICAg
ICAgICAgICAgbGluZURhc2guYXBwZW5kKGdhcExlbmd0aCk7Ci0gICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQuc2V0TGluZURhc2gobGluZURhc2gsIGRhc2hMZW5ndGgpOworICAgICAgICAgICAg
YXV0byBsaW5lRGFzaCA9IERhc2hBcnJheTo6ZnJvbShkYXNoTGVuZ3RoLCBnYXBMZW5ndGgpOwor
ICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldExpbmVEYXNoKFdURk1vdmUobGluZURhc2gp
LCBkYXNoTGVuZ3RoKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IHN0
cm9raW5nIHRoZSBib3JkZXIgcGF0aCBjYXVzZXMgaXNzdWVzIHdpdGggdGlnaHQgY29ybmVyczoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5k
ZXggZGE4ZGYyZTkyM2IzNTQ2ZTBmM2Q0YzViMzA1ZWZlNjU0MDdlNzg2MS4uNDI1YzY5YzMxNDFi
Zjc0ZmE1NzJkZjIwYmI4YTBlNDA1NzdhYjgxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTE5NTYsOSArMTk1Niw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXJCYWNraW5nOjpjb25uZWN0Q2xpcHBpbmdTdGFja0xheWVycyhMYXllckFuY2Vz
dG9yQ2xpcHBpbmdTdGFjayYKICAgICBhdXRvJiBjbGlwcGluZ0VudHJ5U3RhY2sgPSBjbGlwcGlu
Z1N0YWNrLnN0YWNrKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNsaXBwaW5nRW50
cnlTdGFjay5zaXplKCkgLSAxOyArK2kpIHsKICAgICAgICAgYXV0byYgZW50cnkgPSBjbGlwcGlu
Z0VudHJ5U3RhY2suYXQoaSk7Ci0gICAgICAgIFZlY3RvcjxSZWY8R3JhcGhpY3NMYXllcj4+IGNo
aWxkcmVuOwotICAgICAgICBjaGlsZHJlbi5hcHBlbmQoKmNsaXBwaW5nRW50cnlTdGFjay5hdChp
ICsgMSkuY2xpcHBpbmdMYXllcik7Ci0gICAgICAgIGVudHJ5LmNsaXBwaW5nTGF5ZXItPnNldENo
aWxkcmVuKFdURk1vdmUoY2hpbGRyZW4pKTsKKyAgICAgICAgZW50cnkuY2xpcHBpbmdMYXllci0+
c2V0Q2hpbGRyZW4oeyBSZWYgeyAqY2xpcHBpbmdFbnRyeVN0YWNrLmF0KGkgKyAxKS5jbGlwcGlu
Z0xheWVyIH0gfSk7CiAgICAgfQogCiAgICAgY2xpcHBpbmdFbnRyeVN0YWNrLmxhc3QoKS5jbGlw
cGluZ0xheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCBkMzk1MTUwZTQ2NDIxMTU1
MWQ4YjhkZjk3NmVhYWRlNmI3ZjQ3N2YxLi5iMDRiNzNiNDAyMWU5MzFiMDM3ZTg2NGFkOGJjYzAz
NDVkMmU2NDhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmNwcApAQCAtMTQ5MSw5ICsxNDkxLDcgQEAgdm9pZCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmFkanVzdE92ZXJmbG93U2Nyb2xsYmFyQ29udGFpbmVyTGF5ZXJzKFJlbmRlckxh
eWVyJgogICAgICAgICAgICAgb3ZlcmZsb3dCYWNraW5nLT5lbnN1cmVPdmVyZmxvd0NvbnRyb2xz
SG9zdExheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrKCZzdGFja2luZ0NvbnRleHRMYXllcik7CiAK
ICAgICAgICAgaWYgKGF1dG8qIG92ZXJmbG93Q29udHJvbHNBbmNlc3RvckNsaXBwaW5nU3RhY2sg
PSBvdmVyZmxvd0JhY2tpbmctPm92ZXJmbG93Q29udHJvbHNIb3N0TGF5ZXJBbmNlc3RvckNsaXBw
aW5nU3RhY2soKSkgewotICAgICAgICAgICAgVmVjdG9yPFJlZjxHcmFwaGljc0xheWVyPj4gY2hp
bGRyZW47Ci0gICAgICAgICAgICBjaGlsZHJlbi5hcHBlbmQoKm92ZXJmbG93Q29udGFpbmVyTGF5
ZXIpOwotICAgICAgICAgICAgb3ZlcmZsb3dDb250cm9sc0FuY2VzdG9yQ2xpcHBpbmdTdGFjay0+
bGFzdENsaXBwaW5nTGF5ZXIoKS0+c2V0Q2hpbGRyZW4oV1RGTW92ZShjaGlsZHJlbikpOworICAg
ICAgICAgICAgb3ZlcmZsb3dDb250cm9sc0FuY2VzdG9yQ2xpcHBpbmdTdGFjay0+bGFzdENsaXBw
aW5nTGF5ZXIoKS0+c2V0Q2hpbGRyZW4oeyBSZWYgeyAqb3ZlcmZsb3dDb250YWluZXJMYXllciB9
IH0pOwogICAgICAgICAgICAgb3ZlcmZsb3dDb250YWluZXJMYXllciA9IG92ZXJmbG93Q29udHJv
bHNBbmNlc3RvckNsaXBwaW5nU3RhY2stPmZpcnN0Q2xpcHBpbmdMYXllcigpOwogICAgICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5t
bSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCA5ZTEw
OGY4YjRmZjI2MTc5Njg5NjRmYTEzNzAxNTE5YmJjMjQ1MmM0Li44NzY2N2RlMmRlZDI5NWQ5MzU4
MDJiMzM4OTJhMGMzMjFjN2UzMmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tCkBAIC0yNzMxLDEwICsyNzMxLDkgQEAgc3RhdGljIHZvaWQgcGFpbnRBdHRh
Y2htZW50VGl0bGVCYWNrZ3JvdW5kKGNvbnN0IFJlbmRlckF0dGFjaG1lbnQmIGF0dGFjaG1lbnQs
IEcKICAgICBpZiAobGF5b3V0LmxpbmVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgVmVjdG9yPEZsb2F0UmVjdD4gYmFja2dyb3VuZFJlY3RzOwotCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsYXlvdXQubGluZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGJhY2tncm91bmRS
ZWN0cy5hcHBlbmQobGF5b3V0LmxpbmVzW2ldLmJhY2tncm91bmRSZWN0KTsKKyAgICBhdXRvIGJh
Y2tncm91bmRSZWN0cyA9IGxheW91dC5saW5lcy5tYXAoW10oYXV0byYgbGluZSkgeworICAgICAg
ICByZXR1cm4gbGluZS5iYWNrZ3JvdW5kUmVjdDsKKyAgICB9KTsKIAogICAgIENvbG9yIGJhY2tn
cm91bmRDb2xvcjsKICAgICBpZiAoYXR0YWNobWVudC5mcmFtZSgpLnNlbGVjdGlvbigpLmlzRm9j
dXNlZEFuZEFjdGl2ZSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCBmZTU1OWJkNzBiMWQwY2Y0YjFjNWE1YjFj
OTBhMjk2MzVlOGIyNzMxLi45Mjc2YjkzYzczMTI2MWMxZjJmZmJlYzQ5ZjFlY2NlNzNjYTFiYjVj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVB
c1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJl
ZUFzVGV4dC5jcHAKQEAgLTE5NywxMSArMTk3LDkgQEAgc3RhdGljIHZvaWQgd3JpdGVTVkdTdHJv
a2VQYWludGluZ1Jlc291cmNlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJFbGVtZW50Jgog
ICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dCgmc2hhcGUpOwogICAgIGRvdWJsZSBk
YXNoT2Zmc2V0ID0gbGVuZ3RoQ29udGV4dC52YWx1ZUZvckxlbmd0aChzdmdTdHlsZS5zdHJva2VE
YXNoT2Zmc2V0KCkpOwogICAgIGRvdWJsZSBzdHJva2VXaWR0aCA9IGxlbmd0aENvbnRleHQudmFs
dWVGb3JMZW5ndGgoc3R5bGUuc3Ryb2tlV2lkdGgoKSk7Ci0gICAgY29uc3QgYXV0byYgZGFzaGVz
ID0gc3ZnU3R5bGUuc3Ryb2tlRGFzaEFycmF5KCk7Ci0KLSAgICBEYXNoQXJyYXkgZGFzaEFycmF5
OwotICAgIGZvciAoYXV0byYgbGVuZ3RoIDogZGFzaGVzKQotICAgICAgICBkYXNoQXJyYXkuYXBw
ZW5kKGxlbmd0aC52YWx1ZShsZW5ndGhDb250ZXh0KSk7CisgICAgYXV0byBkYXNoQXJyYXkgPSBz
dmdTdHlsZS5zdHJva2VEYXNoQXJyYXkoKS5tYXAoWyZdKGF1dG8mIGxlbmd0aCkgLT4gRGFzaEFy
cmF5RWxlbWVudCB7CisgICAgICAgIHJldHVybiBsZW5ndGgudmFsdWUobGVuZ3RoQ29udGV4dCk7
CisgICAgfSk7CiAKICAgICB3cml0ZUlmTm90RGVmYXVsdCh0cywgIm9wYWNpdHkiLCBzdmdTdHls
ZS5zdHJva2VPcGFjaXR5KCksIDEuMGYpOwogICAgIHdyaXRlSWZOb3REZWZhdWx0KHRzLCAic3Ry
b2tlIHdpZHRoIiwgc3Ryb2tlV2lkdGgsIDEuMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRDaHVuay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRDaHVuay5jcHAKaW5kZXggYTYzZWI4MGE3NzlkNzc2OGRhNDc3MmJiMGQ2
YWZlMTllMzUyMWJiZC4uODQ4MTM2YzhhNTM4YzZlYzhlY2MxNmQ1YmYwMWJmZGUyZGRiMzkxOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0Q2h1bmsuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dENodW5rLmNwcApAQCAt
NzAsOCArNzAsNyBAQCBTVkdUZXh0Q2h1bms6OlNWR1RleHRDaHVuayhjb25zdCBWZWN0b3I8U1ZH
SW5saW5lVGV4dEJveCo+JiBsaW5lTGF5b3V0Qm94ZXMsIHVucwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gZmlyc3Q7IGkgPCBsaW1pdDsgKytpKQotICAgICAgICBt
X2JveGVzLmFwcGVuZChsaW5lTGF5b3V0Qm94ZXNbaV0pOworICAgIG1fYm94ZXMuYXBwZW5kKCZs
aW5lTGF5b3V0Qm94ZXNbZmlyc3RdLCBsaW1pdCAtIGZpcnN0KTsKIH0KIAogdW5zaWduZWQgU1ZH
VGV4dENodW5rOjp0b3RhbENoYXJhY3RlcnMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3R5bGUvUGFnZVJ1bGVDb2xsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUv
UGFnZVJ1bGVDb2xsZWN0b3IuY3BwCmluZGV4IDIyOTlmOGM2Mzc5YjUwOTQ5MmExYTFmZmE1MjMw
NmExYWExNjg5YjQuLmUzZGMzZWZiYzI5YjYzZDc1MjE0OWRhY2IxMTMxZmZhNTJhY2M5NDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1BhZ2VSdWxlQ29sbGVjdG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9QYWdlUnVsZUNvbGxlY3Rvci5jcHAKQEAgLTg0LDggKzg0
LDkgQEAgdm9pZCBQYWdlUnVsZUNvbGxlY3Rvcjo6bWF0Y2hQYWdlUnVsZXMoUnVsZVNldCogcnVs
ZXMsIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0YKIAogICAgIHN0ZDo6c3RhYmxlX3NvcnQobWF0
Y2hlZFBhZ2VSdWxlcy5iZWdpbigpLCBtYXRjaGVkUGFnZVJ1bGVzLmVuZCgpLCBjb21wYXJlUGFn
ZVJ1bGVzKTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXRjaGVkUGFnZVJ1bGVz
LnNpemUoKTsgaSsrKQotICAgICAgICBtX3Jlc3VsdC5hdXRob3JEZWNsYXJhdGlvbnMuYXBwZW5k
KHsgJm1hdGNoZWRQYWdlUnVsZXNbaV0tPnByb3BlcnRpZXMoKSB9KTsKKyAgICBtX3Jlc3VsdC5h
dXRob3JEZWNsYXJhdGlvbnMucmVzZXJ2ZUNhcGFjaXR5KG1fcmVzdWx0LmF1dGhvckRlY2xhcmF0
aW9ucy5zaXplKCkgKyBtYXRjaGVkUGFnZVJ1bGVzLnNpemUoKSk7CisgICAgZm9yIChhdXRvKiBw
YWdlUnVsZSA6IG1hdGNoZWRQYWdlUnVsZXMpCisgICAgICAgIG1fcmVzdWx0LmF1dGhvckRlY2xh
cmF0aW9ucy51bmNoZWNrZWRBcHBlbmQoeyAmcGFnZVJ1bGUtPnByb3BlcnRpZXMoKSB9KTsKIH0K
IAogc3RhdGljIGJvb2wgY2hlY2tQYWdlU2VsZWN0b3JDb21wb25lbnRzKGNvbnN0IENTU1NlbGVj
dG9yKiBzZWxlY3RvciwgYm9vbCBpc0xlZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBT
dHJpbmcmIHBhZ2VOYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNl
dEJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldEJ1aWxkZXIuY3BwCmlu
ZGV4IGNiNDQwYWM5NjYwNTAwMWQ4ODkzMTc0ZWUzMWVkOThkNWUyMmE3Y2YuLjA1MWRhMWRkOGZh
MTY3YjE5YTEyMGM3YjNmOWFkODUyY2Y5ZjBiYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1J1bGVTZXRCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxl
U2V0QnVpbGRlci5jcHAKQEAgLTM3OCw4ICszNzgsOSBAQCB2b2lkIFJ1bGVTZXRCdWlsZGVyOjpN
ZWRpYVF1ZXJ5Q29sbGVjdG9yOjpwb3AoY29uc3QgTWVkaWFRdWVyeVNldCogc2V0KQogCiAgICAg
aWYgKCFkeW5hbWljQ29udGV4dFN0YWNrLmxhc3QoKS5hZmZlY3RlZFJ1bGVQb3NpdGlvbnMuaXNF
bXB0eSgpIHx8ICFjb2xsZWN0RHluYW1pYykgewogICAgICAgICBSdWxlU2V0OjpEeW5hbWljTWVk
aWFRdWVyeVJ1bGVzIHJ1bGVzOworICAgICAgICBydWxlcy5tZWRpYVF1ZXJ5U2V0cy5yZXNlcnZl
Q2FwYWNpdHkocnVsZXMubWVkaWFRdWVyeVNldHMuc2l6ZSgpICsgZHluYW1pY0NvbnRleHRTdGFj
ay5zaXplKCkpOwogICAgICAgICBmb3IgKGF1dG8mIGNvbnRleHQgOiBkeW5hbWljQ29udGV4dFN0
YWNrKQotICAgICAgICAgICAgcnVsZXMubWVkaWFRdWVyeVNldHMuYXBwZW5kKGNvbnRleHQuc2V0
LmdldCgpKTsKKyAgICAgICAgICAgIHJ1bGVzLm1lZGlhUXVlcnlTZXRzLnVuY2hlY2tlZEFwcGVu
ZChjb250ZXh0LnNldC5nZXQoKSk7CiAKICAgICAgICAgaWYgKGNvbGxlY3REeW5hbWljKSB7CiAg
ICAgICAgICAgICBydWxlcy5hZmZlY3RlZFJ1bGVQb3NpdGlvbnMuYXBwZW5kVmVjdG9yKGR5bmFt
aWNDb250ZXh0U3RhY2subGFzdCgpLmFmZmVjdGVkUnVsZVBvc2l0aW9ucyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCmluZGV4IDJmODM0ZGY2N2Q4MGNi
MTNkZDRjOTE1NTFiYWQxMmRiMWIyM2EyNDkuLjc0NjRmODRkOGJmNmIyYjJhMzMxMjNkNTkyYmUy
OTJmMTRjYzI4ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRl
ckNvbnZlcnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckNvbnZl
cnRlci5oCkBAIC0xNjk3LDEzICsxNjk3LDEyIEBAIGlubGluZSBWZWN0b3I8QXRvbVN0cmluZz4g
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENvbnRhaW5lck5hbWUoQnVpbGRlclN0YXRlJiwKICAg
ICAgICAgQVNTRVJUKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgp
ID09IENTU1ZhbHVlTm9uZSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQorICAgIGlmICgh
aXM8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBWZWN0
b3I8QXRvbVN0cmluZz4gcmVzdWx0OwotICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkg
ewotICAgICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVl
KSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KGl0ZW0uZ2V0KCkpLnN0cmluZ1ZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIHJldHVybiBXVEY6Om1hcChkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSwgW10oYXV0
byYgaXRlbSkgLT4gQXRvbVN0cmluZyB7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oaXRlbS5nZXQoKSkuc3RyaW5nVmFsdWUoKTsKKyAgICB9KTsKIH0KIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxh
eWVyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlh
UGxheWVyUHJveHkuY3BwCmluZGV4IDBlZjgzNDJkZDI2OGVlNjhjMzA0NzYyZGEwNThiYTRmYmNi
YzZlM2MuLjk0OWZmMzIwNTU1MGI0OGI3Y2M3OWU0NTA1MTZhNDA0MDJhNGEzOTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllclByb3h5
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5
ZXJQcm94eS5jcHAKQEAgLTgwNSwxMSArODA1LDkgQEAgYm9vbCBSZW1vdGVNZWRpYVBsYXllclBy
b3h5Ojpkb2VzSGF2ZUF0dHJpYnV0ZShjb25zdCBBdG9tU3RyaW5nJiwgQXRvbVN0cmluZyopIGMK
ICNpZiBFTkFCTEUoQVZGX0NBUFRJT05TKQogVmVjdG9yPFJlZlB0cjxQbGF0Zm9ybVRleHRUcmFj
az4+IFJlbW90ZU1lZGlhUGxheWVyUHJveHk6Om91dE9mQmFuZFRyYWNrU291cmNlcygpCiB7Ci0g
ICAgVmVjdG9yPFJlZlB0cjxQbGF0Zm9ybVRleHRUcmFjaz4+IHNvdXJjZXM7Ci0gICAgZm9yIChh
dXRvJiBkYXRhIDogbV9jb25maWd1cmF0aW9uLm91dE9mQmFuZFRyYWNrRGF0YSkKLSAgICAgICAg
c291cmNlcy5hcHBlbmQoUGxhdGZvcm1UZXh0VHJhY2s6OmNyZWF0ZShXVEZNb3ZlKGRhdGEpKSk7
Ci0gICAgCi0gICAgcmV0dXJuIHNvdXJjZXM7CisgICAgcmV0dXJuIFdURjo6bWFwKG1fY29uZmln
dXJhdGlvbi5vdXRPZkJhbmRUcmFja0RhdGEsIFtdKGF1dG8mIGRhdGEpIC0+IFJlZlB0cjxQbGF0
Zm9ybVRleHRUcmFjaz4geworICAgICAgICByZXR1cm4gUGxhdGZvcm1UZXh0VHJhY2s6OmNyZWF0
ZShXVEZNb3ZlKGRhdGEpKTsKKyAgICB9KTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlU291cmNlQnVmZmVyUHJveHkuY3BwIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZVNvdXJjZUJ1ZmZlclByb3h5LmNw
cAppbmRleCAyNzkxNjVkZTY2YWFmZTAyNDY4MWUxNjFhMDM1YzRhMTA5NTRlNmUxLi5iYzhkMDE2
MjJkYzlmMTE0MWU4NTlmMjQ2MmYzNjI4ODc4YjJiNWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlU291cmNlQnVmZmVyUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVTb3VyY2VCdWZmZXJQcm94eS5jcHAK
QEAgLTc1LDM1ICs3NSwzMyBAQCB2b2lkIFJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5Ojpzb3VyY2VC
dWZmZXJQcml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudAogCiAgICAgSW5pdGlh
bGl6YXRpb25TZWdtZW50SW5mbyBzZWdtZW50SW5mbzsKICAgICBzZWdtZW50SW5mby5kdXJhdGlv
biA9IHNlZ21lbnQuZHVyYXRpb247Ci0gICAgZm9yIChhdXRvJiBhdWRpb1RyYWNrSW5mbyA6IHNl
Z21lbnQuYXVkaW9UcmFja3MpIHsKLSAgICAgICAgYXV0byBpZGVudGlmaWVyID0gbV9yZW1vdGVN
ZWRpYVBsYXllclByb3h5LT5hZGRSZW1vdGVBdWRpb1RyYWNrUHJveHkoKmF1ZGlvVHJhY2tJbmZv
LnRyYWNrKTsKLSAgICAgICAgc2VnbWVudEluZm8uYXVkaW9UcmFja3MuYXBwZW5kKHsgTWVkaWFE
ZXNjcmlwdGlvbkluZm8oKmF1ZGlvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwgaWRlbnRpZmllciB9
KTsKIAorICAgIHNlZ21lbnRJbmZvLmF1ZGlvVHJhY2tzID0gc2VnbWVudC5hdWRpb1RyYWNrcy5t
YXAoWyZdKGF1dG8mIGF1ZGlvVHJhY2tJbmZvKSB7CisgICAgICAgIGF1dG8gaWRlbnRpZmllciA9
IG1fcmVtb3RlTWVkaWFQbGF5ZXJQcm94eS0+YWRkUmVtb3RlQXVkaW9UcmFja1Byb3h5KCphdWRp
b1RyYWNrSW5mby50cmFjayk7CiAgICAgICAgIEFTU0VSVCghbV90cmFja0lkcy5jb250YWlucyhp
ZGVudGlmaWVyKSk7CiAgICAgICAgIEFTU0VSVCghbV9tZWRpYURlc2NyaXB0aW9ucy5jb250YWlu
cyhpZGVudGlmaWVyKSk7CiAgICAgICAgIG1fdHJhY2tJZHMuYWRkKGlkZW50aWZpZXIsIGF1ZGlv
VHJhY2tJbmZvLnRyYWNrLT5pZCgpKTsKICAgICAgICAgbV9tZWRpYURlc2NyaXB0aW9ucy5hZGQo
aWRlbnRpZmllciwgKmF1ZGlvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKTsKLSAgICB9CisgICAgICAg
IHJldHVybiBJbml0aWFsaXphdGlvblNlZ21lbnRJbmZvOjpUcmFja0luZm9ybWF0aW9uIHsgTWVk
aWFEZXNjcmlwdGlvbkluZm8oKmF1ZGlvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwgaWRlbnRpZmll
ciB9OworICAgIH0pOwogCi0gICAgZm9yIChhdXRvJiB2aWRlb1RyYWNrSW5mbyA6IHNlZ21lbnQu
dmlkZW9UcmFja3MpIHsKKyAgICBzZWdtZW50SW5mby52aWRlb1RyYWNrcyA9IHNlZ21lbnQudmlk
ZW9UcmFja3MubWFwKFsmXShhdXRvJiB2aWRlb1RyYWNrSW5mbykgewogICAgICAgICBhdXRvIGlk
ZW50aWZpZXIgPSBtX3JlbW90ZU1lZGlhUGxheWVyUHJveHktPmFkZFJlbW90ZVZpZGVvVHJhY2tQ
cm94eSgqdmlkZW9UcmFja0luZm8udHJhY2spOwotICAgICAgICBzZWdtZW50SW5mby52aWRlb1Ry
YWNrcy5hcHBlbmQoeyBNZWRpYURlc2NyaXB0aW9uSW5mbygqdmlkZW9UcmFja0luZm8uZGVzY3Jp
cHRpb24pLCBpZGVudGlmaWVyIH0pOwotCiAgICAgICAgIEFTU0VSVCghbV90cmFja0lkcy5jb250
YWlucyhpZGVudGlmaWVyKSk7CiAgICAgICAgIEFTU0VSVCghbV9tZWRpYURlc2NyaXB0aW9ucy5j
b250YWlucyhpZGVudGlmaWVyKSk7CiAgICAgICAgIG1fdHJhY2tJZHMuYWRkKGlkZW50aWZpZXIs
IHZpZGVvVHJhY2tJbmZvLnRyYWNrLT5pZCgpKTsKICAgICAgICAgbV9tZWRpYURlc2NyaXB0aW9u
cy5hZGQoaWRlbnRpZmllciwgKnZpZGVvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKTsKLSAgICB9Cisg
ICAgICAgIHJldHVybiBJbml0aWFsaXphdGlvblNlZ21lbnRJbmZvOjpUcmFja0luZm9ybWF0aW9u
IHsgTWVkaWFEZXNjcmlwdGlvbkluZm8oKnZpZGVvVHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwgaWRl
bnRpZmllciB9OworICAgIH0pOwogCi0gICAgZm9yIChhdXRvJiB0ZXh0VHJhY2tJbmZvIDogc2Vn
bWVudC50ZXh0VHJhY2tzKSB7CisgICAgc2VnbWVudEluZm8udGV4dFRyYWNrcyA9IHNlZ21lbnQu
dGV4dFRyYWNrcy5tYXAoWyZdKGF1dG8mIHRleHRUcmFja0luZm8pIHsKICAgICAgICAgYXV0byBp
ZGVudGlmaWVyID0gbV9yZW1vdGVNZWRpYVBsYXllclByb3h5LT5hZGRSZW1vdGVUZXh0VHJhY2tQ
cm94eSgqdGV4dFRyYWNrSW5mby50cmFjayk7Ci0gICAgICAgIHNlZ21lbnRJbmZvLnRleHRUcmFj
a3MuYXBwZW5kKHsgTWVkaWFEZXNjcmlwdGlvbkluZm8oKnRleHRUcmFja0luZm8uZGVzY3JpcHRp
b24pLCBpZGVudGlmaWVyIH0pOwotCiAgICAgICAgIEFTU0VSVCghbV90cmFja0lkcy5jb250YWlu
cyhpZGVudGlmaWVyKSk7CiAgICAgICAgIEFTU0VSVCghbV9tZWRpYURlc2NyaXB0aW9ucy5jb250
YWlucyhpZGVudGlmaWVyKSk7CiAgICAgICAgIG1fdHJhY2tJZHMuYWRkKGlkZW50aWZpZXIsIHRl
eHRUcmFja0luZm8udHJhY2stPmlkKCkpOwogICAgICAgICBtX21lZGlhRGVzY3JpcHRpb25zLmFk
ZChpZGVudGlmaWVyLCAqdGV4dFRyYWNrSW5mby5kZXNjcmlwdGlvbik7Ci0gICAgfQorICAgICAg
ICByZXR1cm4gSW5pdGlhbGl6YXRpb25TZWdtZW50SW5mbzo6VHJhY2tJbmZvcm1hdGlvbiB7IE1l
ZGlhRGVzY3JpcHRpb25JbmZvKCp0ZXh0VHJhY2tJbmZvLmRlc2NyaXB0aW9uKSwgaWRlbnRpZmll
ciB9OworICAgIH0pOwogCiAgICAgaWYgKCFtX2Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpIHsKICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTMzOCwxNiArMzM2LDExIEBAIHZvaWQgUmVt
b3RlU291cmNlQnVmZmVyUHJveHk6OnNlZWtUb1RpbWUoY29uc3QgTWVkaWFUaW1lJiBtZWRpYVRp
bWUpCiAKIHZvaWQgUmVtb3RlU291cmNlQnVmZmVyUHJveHk6OnVwZGF0ZVRyYWNrSWRzKFZlY3Rv
cjxzdGQ6OnBhaXI8VHJhY2tQcml2YXRlUmVtb3RlSWRlbnRpZmllciwgVHJhY2tQcml2YXRlUmVt
b3RlSWRlbnRpZmllcj4+JiYgaWRlbnRpZmllclBhaXJzKQogewotICAgIFZlY3RvcjxzdGQ6OnBh
aXI8QXRvbVN0cmluZywgQXRvbVN0cmluZz4+IHRyYWNrSWRQYWlyczsKLQotICAgIGZvciAoYXV0
byYgaWRlbnRpZmllclBhaXIgOiBpZGVudGlmaWVyUGFpcnMpIHsKKyAgICBhdXRvIHRyYWNrSWRQ
YWlycyA9IGlkZW50aWZpZXJQYWlycy5tYXAoWyZdKGF1dG8mIGlkZW50aWZpZXJQYWlyKSB7CiAg
ICAgICAgIEFTU0VSVChtX3RyYWNrSWRzLmNvbnRhaW5zKGlkZW50aWZpZXJQYWlyLmZpcnN0KSk7
CiAgICAgICAgIEFTU0VSVChtX3RyYWNrSWRzLmNvbnRhaW5zKGlkZW50aWZpZXJQYWlyLnNlY29u
ZCkpOwotCi0gICAgICAgIGF1dG8gb2xkSWQgPSBtX3RyYWNrSWRzLnRha2UoaWRlbnRpZmllclBh
aXIuZmlyc3QpOwotICAgICAgICBhdXRvIG5ld0lkID0gbV90cmFja0lkcy5nZXQoaWRlbnRpZmll
clBhaXIuc2Vjb25kKTsKLSAgICAgICAgdHJhY2tJZFBhaXJzLmFwcGVuZChzdGQ6Om1ha2VfcGFp
cihvbGRJZCwgbmV3SWQpKTsKLSAgICB9CisgICAgICAgIHJldHVybiBzdGQ6OnBhaXIgeyBtX3Ry
YWNrSWRzLnRha2UoaWRlbnRpZmllclBhaXIuZmlyc3QpLCBtX3RyYWNrSWRzLmdldChpZGVudGlm
aWVyUGFpci5zZWNvbmQpIH07CisgICAgfSk7CiAKICAgICBpZiAoIXRyYWNrSWRQYWlycy5pc0Vt
cHR5KCkpCiAgICAgICAgIG1fc291cmNlQnVmZmVyUHJpdmF0ZS0+dXBkYXRlVHJhY2tJZHMoV1RG
TW92ZSh0cmFja0lkUGFpcnMpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHAKaW5kZXggNzBiNWFmZGE1MjZlOTkwOWI5NjJkNzEyMTNkODViNjBiNTM3
MTgxZC4uZTg3NmVjMzc3NzFmZjQwMGNhYTgzNGNlZmFlOTU2MjU0Y2MzZmQ5MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9D
bGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKQEAgLTg1Myw5ICs4
NTMsNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWVyZ2VTdGF0aXN0
aWNGb3JUZXN0aW5nKGNvbnN0IFJlZ2lzdHJhYmxlRAogCiAgICAgICAgICAgICBzdGF0aXN0aWMu
c3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyA9IFdURk1vdmUodG9wRnJhbWVEb21haW5zKTsK
IAotICAgICAgICAgICAgVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+IHN0YXRpc3RpY3M7
Ci0gICAgICAgICAgICBzdGF0aXN0aWNzLmFwcGVuZChXVEZNb3ZlKHN0YXRpc3RpYykpOwotICAg
ICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPm1lcmdlU3RhdGlzdGljcyhXVEZNb3ZlKHN0YXRp
c3RpY3MpKTsKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5tZXJnZVN0YXRpc3RpY3Mo
VmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+Ojpmcm9tKFdURk1vdmUoc3RhdGlzdGljKSkp
OwogICAgICAgICB9CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmNwcAppbmRleCBmNGY4YTRjNGY0YWY5NmFmNjg5NDJjNWM2Yzk4OTJmZjdlMTk5
M2YxLi40YThiMGVkYTA5YmYwNTg5OGEzYjhiMjJjOTA4YjQ3YjI4ZWI5YzgxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMTM4MCwx
MCArMTM4MCw5IEBAIHN0YXRpYyB2b2lkIGZldGNoRGlza0NhY2hlRW50cmllcyhOZXR3b3JrQ2Fj
aGU6OkNhY2hlKiBjYWNoZSwgUEFMOjpTZXNzaW9uSUQgc2VzCiAgICAgSGFzaE1hcDxTZWN1cml0
eU9yaWdpbkRhdGEsIHVpbnQ2NF90PiBvcmlnaW5zQW5kU2l6ZXM7CiAgICAgY2FjaGUtPnRyYXZl
cnNlKFtmZXRjaE9wdGlvbnMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlciksIG9yaWdpbnNBbmRTaXplcyA9IFdURk1vdmUob3JpZ2luc0FuZFNpemVzKV0oYXV0
byogdHJhdmVyc2FsRW50cnkpIG11dGFibGUgewogICAgICAgICBpZiAoIXRyYXZlcnNhbEVudHJ5
KSB7Ci0gICAgICAgICAgICBWZWN0b3I8V2Vic2l0ZURhdGE6OkVudHJ5PiBlbnRyaWVzOwotCi0g
ICAgICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbkFuZFNpemUgOiBvcmlnaW5zQW5kU2l6ZXMpCi0g
ICAgICAgICAgICAgICAgZW50cmllcy5hcHBlbmQoV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3JpZ2lu
QW5kU2l6ZS5rZXksIFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlLCBvcmlnaW5BbmRTaXplLnZh
bHVlIH0pOworICAgICAgICAgICAgYXV0byBlbnRyaWVzID0gV1RGOjptYXAob3JpZ2luc0FuZFNp
emVzLCBbXShhdXRvJiBvcmlnaW5BbmRTaXplKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdl
YnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbkFuZFNpemUua2V5LCBXZWJzaXRlRGF0YVR5cGU6OkRp
c2tDYWNoZSwgb3JpZ2luQW5kU2l6ZS52YWx1ZSB9OworICAgICAgICAgICAgfSk7CiAKICAgICAg
ICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgZW50cmllcyA9IFdURk1vdmUoZW50cmllcyldICgpIG11
dGFibGUgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGVudHJpZXMpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05ldHdv
cmtOb3RpZmljYXRpb25NYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Tm90aWZpY2F0aW9ucy9OZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlci5jcHAKaW5kZXggZjAwYTIx
OTNhYTJiMTM5ODAyYjM2NmE0ZjEyMWM3NmVkZmY4OGYwMy4uYzUxMmYyY2IzMjU0MDQ1NGIwNmRm
NzMyNWEzMWIyYTNjZTFkMGM2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9Ob3RpZmljYXRpb25zL05ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05vdGlmaWNhdGlvbnMvTmV0d29ya05vdGlmaWNh
dGlvbk1hbmFnZXIuY3BwCkBAIC04Miw5ICs4Miw5IEBAIHZvaWQgTmV0d29ya05vdGlmaWNhdGlv
bk1hbmFnZXI6OmRlbGV0ZVB1c2hBbmROb3RpZmljYXRpb25SZWdpc3RyYXRpb24oY29uc3QgU2Vj
CiB2b2lkIE5ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2VyOjpnZXRPcmlnaW5zV2l0aFB1c2hBbmRO
b3RpZmljYXRpb25QZXJtaXNzaW9ucyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3Rv
cjxTZWN1cml0eU9yaWdpbkRhdGE+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4gcmVwbHlIYW5kbGVyID0gW2Nv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChWZWN0b3I8U3Ry
aW5nPiBvcmlnaW5TdHJpbmdzKSBtdXRhYmxlIHsKLSAgICAgICAgVmVjdG9yPFNlY3VyaXR5T3Jp
Z2luRGF0YT4gb3JpZ2luczsKLSAgICAgICAgZm9yIChhdXRvJiBvcmlnaW5TdHJpbmcgOiBvcmln
aW5TdHJpbmdzKQotICAgICAgICAgICAgb3JpZ2lucy5hcHBlbmQoU2VjdXJpdHlPcmlnaW5EYXRh
Ojpmcm9tVVJMKHsgeyB9LCBvcmlnaW5TdHJpbmcgfSkpOworICAgICAgICBhdXRvIG9yaWdpbnMg
PSBvcmlnaW5TdHJpbmdzLm1hcChbXShhdXRvJiBvcmlnaW5TdHJpbmcpIHsKKyAgICAgICAgICAg
IHJldHVybiBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21VUkwoeyB7IH0sIG9yaWdpblN0cmluZyB9
KTsKKyAgICAgICAgfSk7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUob3JpZ2lu
cykpOwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
V2ViU3RvcmFnZS9TdG9yYWdlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL1dlYlN0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuY3BwCmluZGV4IGNiOTAxYjZjNThiMTg1OWFl
OGJlMmFkOWRhOTAwMmQ4MjJiODA2MTIuLmMxYjk4NmNmOWY2NjEyNDFmMTAzYTc4MDZjODM2NmRl
OGJjNDM2M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3Rv
cmFnZS9TdG9yYWdlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9XZWJTdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmNwcApAQCAtMjk1LDIwICsyOTUsMTQgQEAgVmVj
dG9yPFN0b3JhZ2VBcmVhSWRlbnRpZmllcj4gU3RvcmFnZU1hbmFnZXI6OmFsbFN0b3JhZ2VBcmVh
SWRlbnRpZmllcnMoKSBjb25zdAogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAg
ICAgVmVjdG9yPFN0b3JhZ2VBcmVhSWRlbnRpZmllcj4gaWRlbnRpZmllcnM7Ci0gICAgZm9yIChj
b25zdCBhdXRvJiBsb2NhbFN0b3JhZ2VOYW1lc3BhY2UgOiBtX2xvY2FsU3RvcmFnZU5hbWVzcGFj
ZXMudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvIGtleSA6IGxvY2FsU3RvcmFnZU5hbWVz
cGFjZS0+c3RvcmFnZUFyZWFJZGVudGlmaWVycygpKQotICAgICAgICAgICAgaWRlbnRpZmllcnMu
YXBwZW5kKGtleSk7Ci0gICAgfQorICAgIGZvciAoYXV0byYgbG9jYWxTdG9yYWdlTmFtZXNwYWNl
IDogbV9sb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQorICAgICAgICBpZGVudGlmaWVy
cy5hcHBlbmRWZWN0b3IobG9jYWxTdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlQXJlYUlkZW50aWZp
ZXJzKCkpOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiB0cmFzaWVudExvY2FsU3RvcmFnZU5hbWVz
cGFjZSA6IG1fdHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlcy52YWx1ZXMoKSkgewotICAg
ICAgICBmb3IgKGF1dG8ga2V5IDogdHJhc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPnN0b3Jh
Z2VBcmVhSWRlbnRpZmllcnMoKSkKLSAgICAgICAgICAgIGlkZW50aWZpZXJzLmFwcGVuZChrZXkp
OwotICAgIH0KKyAgICBmb3IgKGF1dG8mIHRyYXNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlIDog
bV90cmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQorICAgICAgICBpZGVu
dGlmaWVycy5hcHBlbmRWZWN0b3IodHJhc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UtPnN0b3Jh
Z2VBcmVhSWRlbnRpZmllcnMoKSk7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHNlc3Npb25TdG9y
YWdlTmFtZXNwYWNlIDogbV9zZXNzaW9uU3RvcmFnZU5hbWVzcGFjZXMudmFsdWVzKCkpIHsKLSAg
ICAgICAgZm9yIChhdXRvIGtleSA6IHNlc3Npb25TdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlQXJl
YUlkZW50aWZpZXJzKCkpCi0gICAgICAgICAgICBpZGVudGlmaWVycy5hcHBlbmQoa2V5KTsKLSAg
ICB9CisgICAgZm9yIChhdXRvJiBzZXNzaW9uU3RvcmFnZU5hbWVzcGFjZSA6IG1fc2Vzc2lvblN0
b3JhZ2VOYW1lc3BhY2VzLnZhbHVlcygpKQorICAgICAgICBpZGVudGlmaWVycy5hcHBlbmRWZWN0
b3Ioc2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VBcmVhSWRlbnRpZmllcnMoKSk7CiAK
ICAgICByZXR1cm4gaWRlbnRpZmllcnM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL1dlYlN0b3JhZ2UvVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9UcmFuc2llbnRMb2Nh
bFN0b3JhZ2VOYW1lc3BhY2UuY3BwCmluZGV4IGVlZWM1NTBlZWY2M2FlNTlhMWVhYjNhYThhNDk3
YTMyYzEwNTA2MjQuLmZiOThlZDM5NDgwOTE2MDY4NzE3MjZhZTA4NmQ1MWYxNTEyZDQ0MDQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU3RvcmFnZS9UcmFuc2ll
bnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvV2ViU3RvcmFnZS9UcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2UuY3BwCkBAIC01
NSwxNCArNTUsMTEgQEAgU3RvcmFnZUFyZWEmIFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFj
ZTo6Z2V0T3JDcmVhdGVTdG9yYWdlQXJlYShTZWN1cml0eU9yaWcKIFZlY3RvcjxTZWN1cml0eU9y
aWdpbkRhdGE+IFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVzcGFjZTo6b3JpZ2lucygpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgVmVjdG9yPFNlY3VyaXR5
T3JpZ2luRGF0YT4gb3JpZ2luczsKLQotICAgIGZvciAoY29uc3QgYXV0byYgc3RvcmFnZUFyZWEg
OiBtX3N0b3JhZ2VBcmVhTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmICghc3RvcmFnZUFyZWEt
Pml0ZW1zKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgb3JpZ2lucy5hcHBlbmQoc3RvcmFnZUFy
ZWEtPnNlY3VyaXR5T3JpZ2luKCkpOwotICAgIH0KLQotICAgIHJldHVybiBvcmlnaW5zOworICAg
IHJldHVybiBXVEY6OmNvbXBhY3RNYXAobV9zdG9yYWdlQXJlYU1hcCwgW10oYXV0byYgZW50cnkp
IC0+IHN0ZDo6b3B0aW9uYWw8U2VjdXJpdHlPcmlnaW5EYXRhPiB7CisgICAgICAgIGlmIChlbnRy
eS52YWx1ZS0+aXRlbXMoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworICAgICAgICByZXR1cm4gZW50cnkudmFsdWUtPnNlY3VyaXR5T3JpZ2luKCk7CisgICAg
fSk7CiB9CiAKIHZvaWQgVHJhbnNpZW50TG9jYWxTdG9yYWdlTmFtZXNwYWNlOjpjbGVhclN0b3Jh
Z2VBcmVhc01hdGNoaW5nT3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgc2VjdXJpdHlP
cmlnaW4pCkBAIC04MiwxMCArNzksOSBAQCB2b2lkIFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVz
cGFjZTo6Y2xlYXJBbGxTdG9yYWdlQXJlYXMoKQogCiBWZWN0b3I8U3RvcmFnZUFyZWFJZGVudGlm
aWVyPiBUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3BhY2U6OnN0b3JhZ2VBcmVhSWRlbnRpZmll
cnMoKSBjb25zdAogewotICAgIFZlY3RvcjxTdG9yYWdlQXJlYUlkZW50aWZpZXI+IGlkZW50aWZp
ZXJzOwotICAgIGZvciAoYXV0byYgc3RvcmFnZUFyZWEgOiBtX3N0b3JhZ2VBcmVhTWFwLnZhbHVl
cygpKQotICAgICAgICBpZGVudGlmaWVycy5hcHBlbmQoc3RvcmFnZUFyZWEtPmlkZW50aWZpZXIo
KSk7Ci0gICAgcmV0dXJuIGlkZW50aWZpZXJzOworICAgIHJldHVybiBXVEY6Om1hcChtX3N0b3Jh
Z2VBcmVhTWFwLCBbXShhdXRvJiBlbnRyeSkgeworICAgICAgICByZXR1cm4gZW50cnkudmFsdWUt
PmlkZW50aWZpZXIoKTsKKyAgICB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFn
ZUFyZWEuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zdG9yYWdlL1NRTGl0ZVN0
b3JhZ2VBcmVhLmNwcAppbmRleCA0MDlhMzM4OGEwYjhlY2Y5YWI3MTA0OWI3MjlmZGUzOTI3YzQ4
ZWI1Li4zZGI3MWMwZDI4M2NkNjk3ZjU1MmI4NTU3ZDBhNjdiYThiMmU5YzMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3N0b3JhZ2UvU1FMaXRlU3RvcmFnZUFyZWEu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc3RvcmFnZS9TUUxpdGVTdG9y
YWdlQXJlYS5jcHAKQEAgLTY2LDExICs2Niw5IEBAIFNRTGl0ZVN0b3JhZ2VBcmVhOjpTUUxpdGVT
dG9yYWdlQXJlYSh1bnNpZ25lZCBxdW90YSwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luCiAg
ICAgOiBTdG9yYWdlQXJlYUJhc2UocXVvdGEsIG9yaWdpbikKICAgICAsIG1fcGF0aChwYXRoKQog
ICAgICwgbV9xdWV1ZShXVEZNb3ZlKHdvcmtRdWV1ZSkpCisgICAgLCBtX2NhY2hlZFN0YXRlbWVu
dHMoc3RhdGljX2Nhc3Q8c2l6ZV90PihTdGF0ZW1lbnRUeXBlOjpJbnZhbGlkKSkKIHsKLSAgICBB
U1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0
YXRpY19jYXN0PHNpemVfdD4oU3RhdGVtZW50VHlwZTo6SW52YWxpZCk7ICsraSkKLSAgICAgICAg
bV9jYWNoZWRTdGF0ZW1lbnRzLmFwcGVuZChudWxscHRyKTsKKyAgICBBU1NFUlQoIWlzTWFpblJ1
bkxvb3AoKSk7ICAKIH0KIAogdm9pZCBTUUxpdGVTdG9yYWdlQXJlYTo6Y2xvc2UoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQXBwbGVQYXkvV2ViUGF5bWVudENvb3JkaW5hdG9y
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQXBwbGVQYXkvV2ViUGF5bWVudENvb3Jk
aW5hdG9yUHJveHkuY3BwCmluZGV4IDA0YTY5NjgxNzhhNmY3NTk0YzI4MGVmNzMxODE5OGNiNjMy
YjkyMzAuLmJjY2MwNTUwNzcxNzc5NzY2OGY5YzlkY2YxMDMxMDkxMTFiOThhZWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvclBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BcHBsZVBheS9XZWJQYXltZW50Q29v
cmRpbmF0b3JQcm94eS5jcHAKQEAgLTkzLDkgKzkzLDkgQEAgdm9pZCBXZWJQYXltZW50Q29vcmRp
bmF0b3JQcm94eTo6c2hvd1BheW1lbnRVSShXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBkZXN0aW5h
dGkKIAogICAgIFVSTCBvcmlnaW5hdGluZ1VSTChVUkwoKSwgb3JpZ2luYXRpbmdVUkxTdHJpbmcp
OwogCi0gICAgVmVjdG9yPFVSTD4gbGlua0ljb25VUkxzOwotICAgIGZvciAoY29uc3QgYXV0byYg
bGlua0ljb25VUkxTdHJpbmcgOiBsaW5rSWNvblVSTFN0cmluZ3MpCi0gICAgICAgIGxpbmtJY29u
VVJMcy5hcHBlbmQoVVJMKFVSTCgpLCBsaW5rSWNvblVSTFN0cmluZykpOworICAgIGF1dG8gbGlu
a0ljb25VUkxzID0gbGlua0ljb25VUkxTdHJpbmdzLm1hcChbXShhdXRvJiBsaW5rSWNvblVSTFN0
cmluZykgeworICAgICAgICByZXR1cm4gVVJMKFVSTCgpLCBsaW5rSWNvblVSTFN0cmluZyk7Cisg
ICAgfSk7CiAKICAgICBwbGF0Zm9ybVNob3dQYXltZW50VUkod2ViUGFnZVByb3h5SUQsIG9yaWdp
bmF0aW5nVVJMLCBsaW5rSWNvblVSTHMsIHBheW1lbnRSZXF1ZXN0LCBbdGhpcywgd2Vha1RoaXMg
PSBXZWFrUHRyIHsgKnRoaXMgfV0oYm9vbCByZXN1bHQpIHsKICAgICAgICAgaWYgKCF3ZWFrVGhp
cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9u
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uLmNwcAppbmRl
eCA4ODQ2NmM0OWVkMGRlMThlMjAzMmNhYTBhMDQ2NDgzOWVhNzQ1MTAxLi40YTg4OTAzOWU5NGE2
MmZhNTkyZjE5NTdmNzZkODU5ZTc5YzlmYzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0FQSU5hdmlnYXRpb24uY3BwCkBAIC02MiwxMCArNjIsMTAgQEAgTmF2aWdhdGlvbjo6
TmF2aWdhdGlvbihXZWJOYXZpZ2F0aW9uU3RhdGUmIHN0YXRlLCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmJiByZXEKICAgICA6IG1fbmF2aWdhdGlvbklEKHN0YXRlLmdlbmVyYXRlTmF2aWdhdGlv
bklEKCkpCiAgICAgLCBtX29yaWdpbmFsUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKQogICAgICwg
bV9jdXJyZW50UmVxdWVzdChtX29yaWdpbmFsUmVxdWVzdCkKKyAgICAsIG1fcmVkaXJlY3RDaGFp
biB7IG1fb3JpZ2luYWxSZXF1ZXN0LnVybCgpIH0KICAgICAsIG1fZnJvbUl0ZW0oZnJvbUl0ZW0p
CiAgICAgLCBtX2NsaWVudE5hdmlnYXRpb25BY3Rpdml0eShuYXZpZ2F0aW9uQWN0aXZpdHlUaW1l
b3V0KQogewotICAgIG1fcmVkaXJlY3RDaGFpbi5hcHBlbmQobV9vcmlnaW5hbFJlcXVlc3QudXJs
KCkpOwogfQogCiBOYXZpZ2F0aW9uOjpOYXZpZ2F0aW9uKFdlYk5hdmlnYXRpb25TdGF0ZSYgc3Rh
dGUsIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIHRhcmdldEl0ZW0sIFdlYkJhY2tGb3J3YXJkTGlz
dEl0ZW0qIGZyb21JdGVtLCBGcmFtZUxvYWRUeXBlIGJhY2tGb3J3YXJkRnJhbWVMb2FkVHlwZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2hhcmVTaGVldC5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2hhcmVTaGVldC5tbQppbmRleCA1
NTRhYjgwNjQyN2VjYjljZTgzMGFjYTk3ZmM3ZGRjZGM5ODUzZTE1Li5lMzg4YTNjMzdkMGY2OTY1
ZDc2OTFmMjdiMTc4MGE5MTNmMDRlZTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9XS1NoYXJlU2hlZXQubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV0tTaGFyZVNoZWV0Lm1tCkBAIC0xMDAsOSArMTAwLDkgQEAgc3RhdGljIHZvaWQgYXBw
ZW5kRmlsZXNBc1NoYXJlYWJsZVVSTHMoUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiYmIHNoYXJl
RGF0YUFycmEKICAgICAgICAgU3RyaW5nIGZpbGVOYW1lOwogICAgICAgICBSZXRhaW5QdHI8TlNE
YXRhPiBmaWxlRGF0YTsKICAgICB9OwotICAgIFZlY3RvcjxGaWxlV3JpdGVUYXNrPiBmaWxlV3Jp
dGVUYXNrczsKLSAgICBmb3IgKGF1dG8mIGZpbGUgOiBmaWxlcykKLSAgICAgICAgZmlsZVdyaXRl
VGFza3MuYXBwZW5kKHsgZmlsZS5maWxlTmFtZS5pc29sYXRlZENvcHkoKSwgZmlsZS5maWxlRGF0
YS0+Y3JlYXRlTlNEYXRhKCkgfSk7CisgICAgYXV0byBmaWxlV3JpdGVUYXNrcyA9IGZpbGVzLm1h
cChbXShhdXRvJiBmaWxlKSB7CisgICAgICAgIHJldHVybiBGaWxlV3JpdGVUYXNrIHsgZmlsZS5m
aWxlTmFtZS5pc29sYXRlZENvcHkoKSwgZmlsZS5maWxlRGF0YS0+Y3JlYXRlTlNEYXRhKCkgfTsK
KyAgICB9KTsKIAogICAgIGF1dG8gcXVldWUgPSBXb3JrUXVldWU6OmNyZWF0ZSgiY29tLmFwcGxl
LldlYktpdC5XS1NoYXJlU2hlZXQuU2hhcmVhYmxlRmlsZVdyaXRlciIpOwogICAgIHF1ZXVlLT5k
aXNwYXRjaChbc2hhcmVEYXRhQXJyYXkgPSBXVEZNb3ZlKHNoYXJlRGF0YUFycmF5KSwgZmlsZVdy
aXRlVGFza3MgPSBXVEZNb3ZlKGZpbGVXcml0ZVRhc2tzKSwgdGVtcG9yYXJ5RGlyZWN0b3J5ID0g
cmV0YWluUHRyKHRlbXBvcmFyeURpcmVjdG9yeSksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQYWdlUHJveHlDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1dlYlBhZ2VQcm94eUNvY29hLm1tCmluZGV4IGYxYzM3MDZiMDlmZjll
MTI4MjFkN2RhM2EyMjViNzBiYTQ2ZGNlMzYuLjU2YTE0ZDhiZjM2ZWQ0NGRhZGJmMWU0YzQ4NDBh
NWUwNjQxNGI4ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dl
YlBhZ2VQcm94eUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dl
YlBhZ2VQcm94eUNvY29hLm1tCkBAIC02NjYsMTQgKzY2NiwxMiBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6cmVzdG9yZUFwcEhpZ2hsaWdodHNBbmRTY3JvbGxUb0luZGV4KGNvbnN0IFZlY3RvcjxSZWY8
U2hhcmVkTQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgVmVjdG9yPFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlPiBtZW1vcnlIYW5kbGVzOwotCi0g
ICAgZm9yIChhdXRvIGhpZ2hsaWdodCA6IGhpZ2hsaWdodHMpIHsKKyAgICBhdXRvIG1lbW9yeUhh
bmRsZXMgPSBXVEY6OmNvbXBhY3RNYXAoaGlnaGxpZ2h0cywgW10oYXV0byYgaGlnaGxpZ2h0KSAt
PiBzdGQ6Om9wdGlvbmFsPFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlPiB7CiAgICAgICAgIFNoYXJl
ZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgaGlnaGxpZ2h0LT5jcmVhdGVIYW5kbGUo
aGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKLQotICAgICAgICBt
ZW1vcnlIYW5kbGVzLmFwcGVuZChTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSB7IFdURk1vdmUoaGFu
ZGxlKSwgaGlnaGxpZ2h0LT5zaXplKCkgfSk7Ci0gICAgfQorICAgICAgICBpZiAoIWhpZ2hsaWdo
dC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25s
eSkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICByZXR1cm4gU2hh
cmVkTWVtb3J5OjpJUENIYW5kbGUgeyBXVEZNb3ZlKGhhbmRsZSksIGhpZ2hsaWdodC0+c2l6ZSgp
IH07CisgICAgfSk7CiAgICAgCiAgICAgc2V0VXBIaWdobGlnaHRzT2JzZXJ2ZXIoKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvRnJhbWVMb2FkU3RhdGUuY3BwCmluZGV4IGM2MWJlZDgxZDA5
Mjg0NjMyYmYyOTY1ZWQyYzk5YjBjNmZlNDAxYTMuLjY5ZTUzZDdiZWI4NmNlNmI0MDZmM2NkYjgz
OTJhYjcyYTNmZmM4MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0ZyYW1l
TG9hZFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9GcmFtZUxvYWRTdGF0
ZS5jcHAKQEAgLTkwLDExICs5MCw4IEBAIHZvaWQgRnJhbWVMb2FkU3RhdGU6OmRpZEZpbmlzaExv
YWQoKQogCiAgICAgbV9zdGF0ZSA9IFN0YXRlOjpGaW5pc2hlZDsKIAotICAgIFZlY3RvcjxPYnNl
cnZlcio+IG9ic2VydmVyc0NvcHk7Ci0gICAgZm9yIChhdXRvJiBvYnNlcnZlciA6IG1fb2JzZXJ2
ZXJzKQotICAgICAgICBvYnNlcnZlcnNDb3B5LmFwcGVuZCgmb2JzZXJ2ZXIpOwotICAgIGZvciAo
YXV0byogb2JzZXJ2ZXIgOiBvYnNlcnZlcnNDb3B5KQotICAgICAgICBvYnNlcnZlci0+ZGlkRmlu
aXNoTG9hZCgpOworICAgIGZvciAoYXV0byYgb2JzZXJ2ZXIgOiBjb3B5VG9WZWN0b3JPZjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPE9ic2VydmVyPj4obV9vYnNlcnZlcnMpKQorICAgICAgICBvYnNl
cnZlci5nZXQoKS5kaWRGaW5pc2hMb2FkKCk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkU3RhdGU6OmRp
ZEZhaWxMb2FkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCmluZGV4IDM3NDA4MTkzYjBiNzY4MjNjMDQ1ODFiNGI0
ZTkwNmRkNDQwOWE3YWIuLmUzODAxNmYxZGViNzM3MzJkNWE4NWRjMWQ0NmQxM2RmMzVhNjkxZWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3Jr
UHJvY2Vzc1Byb3h5LmNwcApAQCAtMTg0LDggKzE4NCw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6c2VuZENyZWF0aW9uUGFyYW1ldGVyc1RvTmV3UHJvY2VzcygpCiAgICAgcGFyYW1ldGVy
cy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBjb3B5VG9WZWN0b3IoTGVnYWN5R2xvYmFs
U2V0dGluZ3M6OnNpbmdsZXRvbigpLnNjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbCgpKTsKICAgICBw
YXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihM
ZWdhY3lHbG9iYWxTZXR0aW5nczo6c2luZ2xldG9uKCkuc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNj
ZXNzKCkpOwogICAgIHBhcmFtZXRlcnMuY2FjaGVNb2RlbCA9IExlZ2FjeUdsb2JhbFNldHRpbmdz
OjpzaW5nbGV0b24oKS5jYWNoZU1vZGVsKCk7Ci0gICAgZm9yIChhdXRvJiBzY2hlbWUgOiBXZWJQ
cm9jZXNzUG9vbDo6dXJsU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkpCi0gICAg
ICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBw
ZW5kKHNjaGVtZSk7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3Rv
bVByb3RvY29scyA9IFdlYlByb2Nlc3NQb29sOjp1cmxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29s
SGFuZGxlcnMoKTsKKwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKFN0cmluZyBj
b29raWVTdG9yYWdlRGlyZWN0b3J5ID0gV2ViUHJvY2Vzc1Bvb2w6OmNvb2tpZVN0b3JhZ2VEaXJl
Y3RvcnkoKTsgIWNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlm
IChhdXRvIGhhbmRsZSA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0
ZURpcmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0b3J5KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50
Q29udHJvbGxlclByb3h5LmNwcAppbmRleCBmYTI1NGMyZGFkYzA2MzAyOGRmZDUwNGQyODkwYTg5
MmFlZGFmYjA4Li41YmJlNzM5NjIwNTI3YTgyN2NkNTdmMTY5YWYyZjBjMGM1OTZhNzBlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlckNv
bnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCkBAIC0xMTcsMTEgKzExNywx
MSBAQCBVc2VyQ29udGVudENvbnRyb2xsZXJQYXJhbWV0ZXJzIFdlYlVzZXJDb250ZW50Q29udHJv
bGxlclByb3h5OjpwYXJhbWV0ZXJzKCkgY29ucwogICAgIHBhcmFtZXRlcnMuaWRlbnRpZmllciA9
IGlkZW50aWZpZXIoKTsKICAgICAKICAgICBBU1NFUlQocGFyYW1ldGVycy51c2VyQ29udGVudFdv
cmxkcy5pc0VtcHR5KCkpOwotICAgIGZvciAoY29uc3QgYXV0byYgaWRlbnRpZmllciA6IG1fYXNz
b2NpYXRlZENvbnRlbnRXb3JsZHMpIHsKKyAgICBwYXJhbWV0ZXJzLnVzZXJDb250ZW50V29ybGRz
ID0gV1RGOjptYXAobV9hc3NvY2lhdGVkQ29udGVudFdvcmxkcywgW10oYXV0byYgaWRlbnRpZmll
cikgewogICAgICAgICBhdXRvKiB3b3JsZCA9IEFQSTo6Q29udGVudFdvcmxkOjp3b3JsZEZvcklk
ZW50aWZpZXIoaWRlbnRpZmllcik7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHdvcmxkKTsKLSAg
ICAgICAgcGFyYW1ldGVycy51c2VyQ29udGVudFdvcmxkcy5hcHBlbmQod29ybGQtPndvcmxkRGF0
YSgpKTsKLSAgICB9CisgICAgICAgIHJldHVybiB3b3JsZC0+d29ybGREYXRhKCk7CisgICAgfSk7
CiAKICAgICBmb3IgKGF1dG8gdXNlclNjcmlwdCA6IG1fdXNlclNjcmlwdHMtPmVsZW1lbnRzT2ZU
eXBlPEFQSTo6VXNlclNjcmlwdD4oKSkKICAgICAgICAgcGFyYW1ldGVycy51c2VyU2NyaXB0cy5h
cHBlbmQoeyB1c2VyU2NyaXB0LT5pZGVudGlmaWVyKCksIHVzZXJTY3JpcHQtPmNvbnRlbnRXb3Js
ZCgpLmlkZW50aWZpZXIoKSwgdXNlclNjcmlwdC0+dXNlclNjcmlwdCgpIH0pOwpAQCAtMTI5LDgg
KzEyOSw5IEBAIFVzZXJDb250ZW50Q29udHJvbGxlclBhcmFtZXRlcnMgV2ViVXNlckNvbnRlbnRD
b250cm9sbGVyUHJveHk6OnBhcmFtZXRlcnMoKSBjb25zCiAgICAgZm9yIChhdXRvIHVzZXJTdHls
ZVNoZWV0IDogbV91c2VyU3R5bGVTaGVldHMtPmVsZW1lbnRzT2ZUeXBlPEFQSTo6VXNlclN0eWxl
U2hlZXQ+KCkpCiAgICAgICAgIHBhcmFtZXRlcnMudXNlclN0eWxlU2hlZXRzLmFwcGVuZCh7IHVz
ZXJTdHlsZVNoZWV0LT5pZGVudGlmaWVyKCksIHVzZXJTdHlsZVNoZWV0LT5jb250ZW50V29ybGQo
KS5pZGVudGlmaWVyKCksIHVzZXJTdHlsZVNoZWV0LT51c2VyU3R5bGVTaGVldCgpIH0pOwogCi0g
ICAgZm9yIChhdXRvJiBoYW5kbGVyIDogbV9zY3JpcHRNZXNzYWdlSGFuZGxlcnMudmFsdWVzKCkp
Ci0gICAgICAgIHBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXJzLmFwcGVuZCh7IGhhbmRsZXItPmlk
ZW50aWZpZXIoKSwgaGFuZGxlci0+d29ybGQoKS5pZGVudGlmaWVyKCksIGhhbmRsZXItPm5hbWUo
KSB9KTsKKyAgICBwYXJhbWV0ZXJzLm1lc3NhZ2VIYW5kbGVycyA9IFdURjo6bWFwKG1fc2NyaXB0
TWVzc2FnZUhhbmRsZXJzLCBbXShhdXRvIGVudHJ5KSB7CisgICAgICAgIHJldHVybiBXZWJTY3Jp
cHRNZXNzYWdlSGFuZGxlckRhdGEgeyBlbnRyeS52YWx1ZS0+aWRlbnRpZmllcigpLCBlbnRyeS52
YWx1ZS0+d29ybGQoKS5pZGVudGlmaWVyKCksIGVudHJ5LnZhbHVlLT5uYW1lKCkgfTsKKyAgICB9
KTsKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgcGFyYW1ldGVycy5jb250
ZW50UnVsZUxpc3RzID0gY29udGVudFJ1bGVMaXN0RGF0YSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRvck1hbmFnZXIu
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGlj
YXRvck1hbmFnZXIuY3BwCmluZGV4IDkzNDgwZWQ1Y2IzOWE2MWNiY2Y2NzM1MWUwYTg4MGVhMDlm
ZTQ0NzYuLjY1NzJmNTM5NTk4ZWY0MWRkMTAzMDVhY2VlYzhmMTg3ZDhkNTI1MjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0
b3JNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNh
dGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHAKQEAgLTQxNiwxMSArNDE2LDExIEBAIHZvaWQg
QXV0aGVudGljYXRvck1hbmFnZXI6OnN0YXJ0RGlzY292ZXJ5KGNvbnN0IFRyYW5zcG9ydFNldCYg
dHJhbnNwb3J0cykKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIEFTU0VS
VChtX3NlcnZpY2VzLmlzRW1wdHkoKSAmJiB0cmFuc3BvcnRzLnNpemUoKSA8PSBtYXhUcmFuc3Bv
cnROdW1iZXIpOwotICAgIGZvciAoYXV0byYgdHJhbnNwb3J0IDogdHJhbnNwb3J0cykgeworICAg
IG1fc2VydmljZXMgPSBXVEY6Om1hcCh0cmFuc3BvcnRzLCBbdGhpc10oYXV0byYgdHJhbnNwb3J0
KSB7CiAgICAgICAgIGF1dG8gc2VydmljZSA9IGNyZWF0ZVNlcnZpY2UodHJhbnNwb3J0LCAqdGhp
cyk7CiAgICAgICAgIHNlcnZpY2UtPnN0YXJ0RGlzY292ZXJ5KCk7Ci0gICAgICAgIG1fc2Vydmlj
ZXMuYXBwZW5kKFdURk1vdmUoc2VydmljZSkpOwotICAgIH0KKyAgICAgICAgcmV0dXJuIHNlcnZp
Y2U7CisgICAgfSk7CiB9CiAKIHZvaWQgQXV0aGVudGljYXRvck1hbmFnZXI6OmluaXRUaW1lT3V0
VGltZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViQmFja0Zvcndh
cmRMaXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5j
cHAKaW5kZXggYzc0MzQzZTY1Yjg4OWY3ODY5ZGM4Y2NhMzQwNTFiOGIyNjU0MDJiNi4uZGVjOWU4
MzkyMjM2OGZlNjE1NWUwM2Q2OWEzZjM3ZDlkYmYwMTc3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwCkBAIC0zNDAsMTYgKzM0MCwxMSBAQCB2
b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6cmVtb3ZlQWxsSXRlbXMoKQogCiAgICAgTE9HKEJhY2tG
b3J3YXJkLCAiKEJhY2svRm9yd2FyZCkgV2ViQmFja0ZvcndhcmRMaXN0ICVwIHJlbW92ZUFsbEl0
ZW1zIChoYXMgJXp1IG9mIHRoZW0pIiwgdGhpcywgbV9lbnRyaWVzLnNpemUoKSk7CiAKLSAgICBW
ZWN0b3I8UmVmPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiByZW1vdmVkSXRlbXM7Ci0KLSAgICBm
b3IgKGF1dG8mIGVudHJ5IDogbV9lbnRyaWVzKSB7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1f
ZW50cmllcykKICAgICAgICAgZGlkUmVtb3ZlSXRlbShlbnRyeSk7Ci0gICAgICAgIHJlbW92ZWRJ
dGVtcy5hcHBlbmQoV1RGTW92ZShlbnRyeSkpOwotICAgIH0KIAotICAgIG1fZW50cmllcy5jbGVh
cigpOwogICAgIG1fY3VycmVudEluZGV4ID0gc3RkOjpudWxsb3B0OwotICAgIG1fcGFnZS0+ZGlk
Q2hhbmdlQmFja0ZvcndhcmRMaXN0KG51bGxwdHIsIFdURk1vdmUocmVtb3ZlZEl0ZW1zKSk7Cisg
ICAgbV9wYWdlLT5kaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QobnVsbHB0ciwgc3RkOjpleGNoYW5n
ZShtX2VudHJpZXMsIHsgfSkpOwogfQogCiB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdDo6Y2xlYXIo
KQpAQCAtMzYzLDIxICszNTgsMTcgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3Q6OmNsZWFyKCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+IGN1
cnJlbnRJdGVtID0gdGhpcy0+Y3VycmVudEl0ZW0oKTsKLSAgICBWZWN0b3I8UmVmPFdlYkJhY2tG
b3J3YXJkTGlzdEl0ZW0+PiByZW1vdmVkSXRlbXM7CiAKICAgICBpZiAoIWN1cnJlbnRJdGVtKSB7
CiAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGV2ZXIgaGF2ZSBubyBjdXJyZW50IGl0ZW0gaWYg
d2UgYWxzbyBoYXZlIG5vIGN1cnJlbnQgaXRlbSBpbmRleC4KICAgICAgICAgQVNTRVJUKCFtX2N1
cnJlbnRJbmRleCk7CiAKICAgICAgICAgLy8gQnV0IGp1c3QgaW4gY2FzZSBpdCBkb2VzIGhhcHBl
biBpbiBwcmFjdGljZSB3ZSBzaG91bGQgZ2V0IGJhY2sgaW50byBhIGNvbnNpc3RlbnQgc3RhdGUg
bm93LgotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAg
ICAgICAgZGlkUmVtb3ZlSXRlbShtX2VudHJpZXNbaV0pOwotICAgICAgICAgICAgcmVtb3ZlZEl0
ZW1zLmFwcGVuZChXVEZNb3ZlKG1fZW50cmllc1tpXSkpOwotICAgICAgICB9CisgICAgICAgIGZv
ciAoYXV0byYgZW50cnkgOiBtX2VudHJpZXMpCisgICAgICAgICAgICBkaWRSZW1vdmVJdGVtKGVu
dHJ5KTsKIAotICAgICAgICBtX2VudHJpZXMuY2xlYXIoKTsKICAgICAgICAgbV9jdXJyZW50SW5k
ZXggPSBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIG1fcGFnZS0+ZGlkQ2hhbmdlQmFja0ZvcndhcmRM
aXN0KG51bGxwdHIsIFdURk1vdmUocmVtb3ZlZEl0ZW1zKSk7CisgICAgICAgIG1fcGFnZS0+ZGlk
Q2hhbmdlQmFja0ZvcndhcmRMaXN0KG51bGxwdHIsIHN0ZDo6ZXhjaGFuZ2UobV9lbnRyaWVzLCB7
IH0pKTsKIAogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzg3LDYgKzM3OCw3IEBAIHZvaWQg
V2ViQmFja0ZvcndhcmRMaXN0OjpjbGVhcigpCiAgICAgICAgICAgICBkaWRSZW1vdmVJdGVtKG1f
ZW50cmllc1tpXSk7CiAgICAgfQogCisgICAgVmVjdG9yPFJlZjxXZWJCYWNrRm9yd2FyZExpc3RJ
dGVtPj4gcmVtb3ZlZEl0ZW1zOwogICAgIHJlbW92ZWRJdGVtcy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KHNpemUgLSAxKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewog
ICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggJiYgaSAhPSAqbV9jdXJyZW50SW5kZXgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKaW5kZXggZmExNzQyY2YzMmRh
OTk1MjczMjNkZmM3YzhiZjBhNzkwNjMwNDFmZS4uNjFiZDMwYTM2NDE0NzNjNWRiMmM1NzQzMGU5
M2NiN2UyNjYzYWQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29s
LmNwcApAQCAtODQ5LDEwICs4NDksOSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjppbml0aWFsaXpl
TmV3V2ViUHJvY2VzcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MsIFdlYnNpdGVEYQogICAgICAg
ICAgICAgcGFyYW1ldGVycy5pbmplY3RlZEJ1bmRsZVBhdGhFeHRlbnNpb25IYW5kbGUgPSBXVEZN
b3ZlKCpoYW5kbGUpOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcGF0aCA6IG1fcmVzb2x2ZWRQ
YXRocy5hZGRpdGlvbmFsV2ViUHJvY2Vzc1NhbmRib3hFeHRlbnNpb25QYXRocykgewotICAgICAg
ICBpZiAoYXV0byBoYW5kbGUgPSAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlV2l0aG91
dFJlc29sdmluZ1BhdGgocGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHkpKQot
ICAgICAgICAgICAgcGFyYW1ldGVycy5hZGRpdGlvbmFsU2FuZGJveEV4dGVuc2lvbkhhbmRsZXMu
YXBwZW5kKFdURk1vdmUoKmhhbmRsZSkpOwotICAgIH0KKyAgICBwYXJhbWV0ZXJzLmFkZGl0aW9u
YWxTYW5kYm94RXh0ZW5zaW9uSGFuZGxlcyA9IFdURjo6Y29tcGFjdE1hcChtX3Jlc29sdmVkUGF0
aHMuYWRkaXRpb25hbFdlYlByb2Nlc3NTYW5kYm94RXh0ZW5zaW9uUGF0aHMsIFtdKGF1dG8mIHBh
dGgpIHsKKyAgICAgICAgcmV0dXJuIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZVdpdGhv
dXRSZXNvbHZpbmdQYXRoKHBhdGgsIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5KTsK
KyAgICB9KTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgc2V0SmF2YVNjcmlwdENv
bmZpZ3VyYXRpb25GaWxlRW5hYmxlZEZyb21EZWZhdWx0cygpOwpAQCAtMTg3MCwxNCArMTg2OSw5
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZVByb2Nlc3NGcm9tT3JpZ2luQ2FjaGVTZXQo
V2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQogICAgIExPRyhQcm9jZXNzU3dhcHBpbmcsICIoUHJv
Y2Vzc1N3YXBwaW5nKSBSZW1vdmluZyBwcm9jZXNzIHdpdGggcGlkICVpIGZyb20gdGhlIG9yaWdp
biBjYWNoZSBzZXQiLCBwcm9jZXNzLnByb2Nlc3NJZGVudGlmaWVyKCkpOwogCiAgICAgLy8gRklY
TUU6IFRoaXMgY2FuIGJlIHZlcnkgaW5lZmZpY2llbnQgYXMgdGhlIG51bWJlciBvZiByZW1lbWJl
cmVkIG9yaWdpbnMgYW5kIHByb2Nlc3NlcyBncm93cwotICAgIFZlY3RvcjxXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbj4gcmVnaXN0cmFibGVEb21haW5zVG9SZW1vdmU7Ci0gICAgZm9yIChhdXRv
IGVudHJ5IDogbV9zd2FwcGVkUHJvY2Vzc2VzUGVyUmVnaXN0cmFibGVEb21haW4pIHsKLSAgICAg
ICAgaWYgKGVudHJ5LnZhbHVlID09ICZwcm9jZXNzKQotICAgICAgICAgICAgcmVnaXN0cmFibGVE
b21haW5zVG9SZW1vdmUuYXBwZW5kKGVudHJ5LmtleSk7Ci0gICAgfQotCi0gICAgZm9yIChhdXRv
JiByZWdpc3RyYWJsZURvbWFpbiA6IHJlZ2lzdHJhYmxlRG9tYWluc1RvUmVtb3ZlKQotICAgICAg
ICBtX3N3YXBwZWRQcm9jZXNzZXNQZXJSZWdpc3RyYWJsZURvbWFpbi5yZW1vdmUocmVnaXN0cmFi
bGVEb21haW4pOworICAgIG1fc3dhcHBlZFByb2Nlc3Nlc1BlclJlZ2lzdHJhYmxlRG9tYWluLnJl
bW92ZUlmKFsmXShhdXRvJiBlbnRyeSkgeworICAgICAgICByZXR1cm4gZW50cnkudmFsdWUgPT0g
JnByb2Nlc3M7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NGb3JO
YXZpZ2F0aW9uKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgQVBJOjpOYXZpZ2F0aW9uJiBuYXZp
Z2F0aW9uLCBSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmIHNvdXJjZVByb2Nlc3MsIGNvbnN0IFVSTCYg
c291cmNlVVJMLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nlc3NTd2FwUmVxdWVz
dGVkQnlDbGllbnQsIFdlYlByb2Nlc3NQcm94eTo6Q2FwdGl2ZVBvcnRhbE1vZGUgY2FwdGl2ZVBv
cnRhbE1vZGUsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgUmVmPFdlYnNpdGVEYXRh
U3RvcmU+JiYgZGF0YVN0b3JlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZjxXZWJQcm9jZXNz
UHJveHk+JiYsIFN1c3BlbmRlZFBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAK
aW5kZXggYjEyODYwZGY1MTBiYzRlM2RmYmI3ZTNmYzkyMGI1ZDA0MmI4NDMyMS4uMzY4YTM5NTg3
ZGEzM2RlNjRjMWI4OWQwZTYzOGQzOGI4OGQ3YTE3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCkBAIC05MzYsOCArOTM2LDkgQEAgdm9pZCBXZWJQcm9j
ZXNzUHJveHk6OnByb2Nlc3NEaWRUZXJtaW5hdGVPckZhaWxlZFRvTGF1bmNoKFByb2Nlc3NUZXJt
aW5hdGlvblJlYXMKIAogICAgIC8vIFRoZXJlIGlzIGEgbmVzdGVkIHRyYW5zYWN0aW9uIGluIFdl
YlBhZ2VQcm94eTo6cmVzZXRTdGF0ZUFmdGVyUHJvY2Vzc0V4aXRlZCgpIHRoYXQgd2UgZG9uJ3Qg
d2FudCB0byBjb21taXQgYmVmb3JlIHRoZSBjbGllbnQgY2FsbCBiZWxvdyAoZGlzcGF0Y2hQcm9j
ZXNzRGlkVGVybWluYXRlKS4KICAgICBWZWN0b3I8UGFnZUxvYWRTdGF0ZTo6VHJhbnNhY3Rpb24+
IHBhZ2VMb2FkU3RhdGVUcmFuc2FjdGlvbnM7CisgICAgcGFnZUxvYWRTdGF0ZVRyYW5zYWN0aW9u
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBhZ2VzLnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiBw
YWdlIDogcGFnZXMpIHsKLSAgICAgICAgcGFnZUxvYWRTdGF0ZVRyYW5zYWN0aW9ucy5hcHBlbmQo
cGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnRyYW5zYWN0aW9uKCkpOworICAgICAgICBwYWdlTG9hZFN0
YXRlVHJhbnNhY3Rpb25zLnVuY2hlY2tlZEFwcGVuZChwYWdlLT5wYWdlTG9hZFN0YXRlKCkudHJh
bnNhY3Rpb24oKSk7CiAgICAgICAgIHBhZ2UtPnJlc2V0U3RhdGVBZnRlclByb2Nlc3NUZXJtaW5h
dGlvbihyZWFzb24pOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCBiMzZkOWE3NGI5YTE3
NWEwODE2YjdhMmUxNGYxMzlkYjVlZjU2ZTZkLi41ZWUxNWM1ZWZkYTZmNDkzOTI0ZGQzN2QyYTAw
YzIxMDEyNTkzYWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtNDMxLDggKzQzMSwxMCBAQCBwcml2
YXRlOgogICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpEaXNrQ2Fj
aGUpKSB7CiAgICAgICAgIG1fcXVldWUtPmRpc3BhdGNoKFttZWRpYUNhY2hlRGlyZWN0b3J5ID0g
bV9jb25maWd1cmF0aW9uLT5tZWRpYUNhY2hlRGlyZWN0b3J5KCkuaXNvbGF0ZWRDb3B5KCksIGNh
bGxiYWNrQWdncmVnYXRvcl0gewogICAgICAgICAgICAgV2Vic2l0ZURhdGEgd2Vic2l0ZURhdGE7
Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnQ6Om9yaWdpbnNJbk1lZGlhQ2FjaGUobWVkaWFDYWNoZURpcmVjdG9yeSkpCi0gICAgICAgICAg
ICAgICAgd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmQoV2Vic2l0ZURhdGE6OkVudHJ5IHsgb3Jp
Z2luLCBXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSwgMCB9KTsKKyAgICAgICAgICAgIGF1dG8g
b3JpZ2lucyA9IFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Om9yaWdpbnNJbk1lZGlhQ2FjaGUo
bWVkaWFDYWNoZURpcmVjdG9yeSk7CisgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzID0g
V1RGOjptYXAob3JpZ2lucywgW10oYXV0byYgb3JpZ2luKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpEaXNrQ2Fj
aGUsIDAgfTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9y
LT5hZGRXZWJzaXRlRGF0YShXVEZNb3ZlKHdlYnNpdGVEYXRhKSk7CiAgICAgICAgIH0pOwogICAg
IH0KQEAgLTQ2OSw4ICs0NzEsOSBAQCBwcml2YXRlOgogICAgIGlmIChkYXRhVHlwZXMuY29udGFp
bnMoV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0KSkgewogICAgICAgICBtX2Rldmlj
ZUlkSGFzaFNhbHRTdG9yYWdlLT5nZXREZXZpY2VJZEhhc2hTYWx0T3JpZ2lucyhbY2FsbGJhY2tB
Z2dyZWdhdG9yXShhdXRvJiYgb3JpZ2lucykgewogICAgICAgICAgICAgV2Vic2l0ZURhdGEgd2Vi
c2l0ZURhdGE7Ci0gICAgICAgICAgICB3aGlsZSAoIW9yaWdpbnMuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7
IG9yaWdpbnMudGFrZUFueSgpLCBXZWJzaXRlRGF0YVR5cGU6OkRldmljZUlkSGFzaFNhbHQsIDAg
fSk7CisgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzID0gV1RGOjptYXAob3JpZ2lucywg
W10oYXV0byYgb3JpZ2luKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhOjpF
bnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpEZXZpY2VJZEhhc2hTYWx0LCAwIH07Cisg
ICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkV2Vic2l0
ZURhdGEoV1RGTW92ZSh3ZWJzaXRlRGF0YSkpOwogICAgICAgICB9KTsKICAgICB9CkBAIC00Nzks
MTAgKzQ4MiwxMSBAQCBwcml2YXRlOgogICAgICAgICBtX3F1ZXVlLT5kaXNwYXRjaChbZmV0Y2hP
cHRpb25zLCBhcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5ID0gbV9jb25maWd1cmF0aW9uLT5hcHBs
aWNhdGlvbkNhY2hlRGlyZWN0b3J5KCkuaXNvbGF0ZWRDb3B5KCksIGFwcGxpY2F0aW9uQ2FjaGVG
bGF0RmlsZVN1YmRpcmVjdG9yeU5hbWUgPSBtX2NvbmZpZ3VyYXRpb24tPmFwcGxpY2F0aW9uQ2Fj
aGVGbGF0RmlsZVN1YmRpcmVjdG9yeU5hbWUoKS5pc29sYXRlZENvcHkoKSwgY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7CiAgICAgICAgICAgICBhdXRvIHN0b3JhZ2UgPSBXZWJDb3JlOjpBcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZTo6Y3JlYXRlKGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnksIGFwcGxpY2F0
aW9uQ2FjaGVGbGF0RmlsZVN1YmRpcmVjdG9yeU5hbWUpOwogICAgICAgICAgICAgV2Vic2l0ZURh
dGEgd2Vic2l0ZURhdGE7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IHN0b3JhZ2Ut
Pm9yaWdpbnNXaXRoQ2FjaGUoKSkgeworICAgICAgICAgICAgYXV0byBvcmlnaW5zID0gc3RvcmFn
ZS0+b3JpZ2luc1dpdGhDYWNoZSgpOworICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcyA9
IFdURjo6bWFwKG9yaWdpbnMsIFsmXShhdXRvJiBvcmlnaW4pIHsKICAgICAgICAgICAgICAgICB1
aW50NjRfdCBzaXplID0gZmV0Y2hPcHRpb25zLmNvbnRhaW5zKFdlYnNpdGVEYXRhRmV0Y2hPcHRp
b246OkNvbXB1dGVTaXplcykgPyBzdG9yYWdlLT5kaXNrVXNhZ2VGb3JPcmlnaW4ob3JpZ2luKSA6
IDA7Ci0gICAgICAgICAgICAgICAgd2Vic2l0ZURhdGEuZW50cmllcy5hcHBlbmQoV2Vic2l0ZURh
dGE6OkVudHJ5IHsgb3JpZ2luLCBXZWJzaXRlRGF0YVR5cGU6Ok9mZmxpbmVXZWJBcHBsaWNhdGlv
bkNhY2hlLCBzaXplIH0pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBX
ZWJzaXRlRGF0YTo6RW50cnkgeyBvcmlnaW4sIFdlYnNpdGVEYXRhVHlwZTo6T2ZmbGluZVdlYkFw
cGxpY2F0aW9uQ2FjaGUsIHNpemUgfTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgY2Fs
bGJhY2tBZ2dyZWdhdG9yLT5hZGRXZWJzaXRlRGF0YShXVEZNb3ZlKHdlYnNpdGVEYXRhKSk7CiAg
ICAgICAgIH0pOwogICAgIH0KQEAgLTQ5MCw4ICs0OTQsOSBAQCBwcml2YXRlOgogICAgIGlmIChk
YXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpXZWJTUUxEYXRhYmFzZXMpICYmIGlz
UGVyc2lzdGVudCgpKSB7CiAgICAgICAgIG1fcXVldWUtPmRpc3BhdGNoKFt3ZWJTUUxEYXRhYmFz
ZURpcmVjdG9yeSA9IG1fY29uZmlndXJhdGlvbi0+d2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkoKS5p
c29sYXRlZENvcHkoKSwgY2FsbGJhY2tBZ2dyZWdhdG9yXSgpIHsKICAgICAgICAgICAgIFdlYnNp
dGVEYXRhIHdlYnNpdGVEYXRhOwotICAgICAgICAgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBXZWJD
b3JlOjpEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXJXaXRoRGF0YWJhc2VQYXRoKHdlYlNRTERhdGFi
YXNlRGlyZWN0b3J5KS0+b3JpZ2lucygpKQotICAgICAgICAgICAgICAgIHdlYnNpdGVEYXRhLmVu
dHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBl
OjpXZWJTUUxEYXRhYmFzZXMsIDAgfSk7CisgICAgICAgICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVz
ID0gV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjp0cmFja2VyV2l0aERhdGFiYXNlUGF0aCh3ZWJT
UUxEYXRhYmFzZURpcmVjdG9yeSktPm9yaWdpbnMoKS5tYXAoW10oYXV0byYgb3JpZ2luKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0
ZURhdGFUeXBlOjpXZWJTUUxEYXRhYmFzZXMsIDAgfTsKKyAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRXZWJzaXRlRGF0YShXVEZNb3ZlKHdlYnNpdGVE
YXRhKSk7CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTQ5OSw4ICs1MDQsOSBAQCBwcml2YXRlOgog
ICAgIGlmIChkYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpNZWRpYUtleXMpICYm
IGlzUGVyc2lzdGVudCgpKSB7CiAgICAgICAgIG1fcXVldWUtPmRpc3BhdGNoKFttZWRpYUtleXNT
dG9yYWdlRGlyZWN0b3J5ID0gbV9jb25maWd1cmF0aW9uLT5tZWRpYUtleXNTdG9yYWdlRGlyZWN0
b3J5KCkuaXNvbGF0ZWRDb3B5KCksIGNhbGxiYWNrQWdncmVnYXRvcl0gewogICAgICAgICAgICAg
V2Vic2l0ZURhdGEgd2Vic2l0ZURhdGE7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6
IG1lZGlhS2V5T3JpZ2lucyhtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KSkKLSAgICAgICAgICAg
ICAgICB3ZWJzaXRlRGF0YS5lbnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBvcmln
aW4sIFdlYnNpdGVEYXRhVHlwZTo6TWVkaWFLZXlzLCAwIH0pOworICAgICAgICAgICAgd2Vic2l0
ZURhdGEuZW50cmllcyA9IG1lZGlhS2V5T3JpZ2lucyhtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5
KS5tYXAoW10oYXV0byYgb3JpZ2luKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYnNpdGVE
YXRhOjpFbnRyeSB7IG9yaWdpbiwgV2Vic2l0ZURhdGFUeXBlOjpNZWRpYUtleXMsIDAgfTsKKyAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRXZWJzaXRl
RGF0YShXVEZNb3ZlKHdlYnNpdGVEYXRhKSk7CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTcxMiw4
ICs3MTgsOSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBjb25zdCBWZQogICAgICAgICAgICAgICAgIGZvciAo
YXV0byYgaG9zdE5hbWUgOiBkYXRhUmVjb3JkLkhTVFNDYWNoZUhvc3ROYW1lcykKICAgICAgICAg
ICAgICAgICAgICAgSFNUU0NhY2hlSG9zdE5hbWVzLmFwcGVuZChob3N0TmFtZSk7CiAjaWYgRU5B
QkxFKElOVEVMTElHRU5UX1RSQUNLSU5HX1BSRVZFTlRJT04pCisgICAgICAgICAgICAgICAgcmVn
aXN0cmFibGVEb21haW5zLnJlc2VydmVDYXBhY2l0eShyZWdpc3RyYWJsZURvbWFpbnMuc2l6ZSgp
ICsgZGF0YVJlY29yZC5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUmVnaXN0cmFibGVEb21haW5zLnNp
emUoKSk7CiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiByZWdpc3RyYWJsZURvbWFpbiA6IGRh
dGFSZWNvcmQucmVzb3VyY2VMb2FkU3RhdGlzdGljc1JlZ2lzdHJhYmxlRG9tYWlucykKLSAgICAg
ICAgICAgICAgICAgICAgcmVnaXN0cmFibGVEb21haW5zLmFwcGVuZChyZWdpc3RyYWJsZURvbWFp
bik7CisgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhYmxlRG9tYWlucy51bmNoZWNrZWRBcHBl
bmQocmVnaXN0cmFibGVEb21haW4pOwogI2VuZGlmCiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbQppbmRleCBmYTNiYzUwYjI0
ZmFmMmVlNWZlZTc0NmQyYmVjODA0YWE0YWZiNzJjLi4wMWExNjdhNzhlMzdjZDNjZGY0YjE2Y2Vl
Yjk4NWJmYTViNTVjNjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
VGV4dENoZWNrZXJJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1RleHRD
aGVja2VySU9TLm1tCkBAIC0zNCw2ICszNCw3IEBACiAjaW1wb3J0IDx3dGYvSGFzaE1hcC5oPgog
I2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0
cmluZ1ZpZXcuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0yNDAsMTIgKzI0MSwxMyBAQCBW
ZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgoU3BlbGxEb2N1bWVudFRhZyBzcAogICAgICAgICAgICAgICAgIFRleHRDaGVja2luZ1Jlc3Vs
dCByZXN1bHQ7CiAgICAgICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBl
OjpTcGVsbGluZzsKICAgICAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRSYW5nZTsK
LSAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgICAg
IHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYg
KHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiBjaGVja2luZ1R5cGVz
LmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpKSB7CiAgICAgICAgICAgICAgICAg
VGV4dENoZWNraW5nUmVzdWx0IHJlc3VsdDsKICAgICAgICAgICAgICAgICBOU0FycmF5ICpkZXRh
aWxzID0gW2luY29taW5nUmVzdWx0IGdyYW1tYXJEZXRhaWxzXTsKICAgICAgICAgICAgICAgICBy
ZXN1bHQudHlwZSA9IFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXI7CiAgICAgICAgICAgICAgICAg
cmVzdWx0LnJhbmdlID0gcmVzdWx0UmFuZ2U7CisgICAgICAgICAgICAgICAgcmVzdWx0LmRldGFp
bHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkZXRhaWxzLmNvdW50KTsKICAgICAgICAgICAgICAg
ICBmb3IgKE5TRGljdGlvbmFyeSAqaW5jb21pbmdEZXRhaWwgaW4gZGV0YWlscykgewogICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoaW5jb21pbmdEZXRhaWwpOwogICAgICAgICAgICAgICAgICAg
ICBHcmFtbWFyRGV0YWlsIGRldGFpbDsKQEAgLTI1OSwxMyArMjYxLDEwIEBAIFZlY3RvcjxUZXh0
Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChTcGVsbERv
Y3VtZW50VGFnIHNwCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBk
ZXRhaWwucmFuZ2UgPSBkZXRhaWxOU1JhbmdlOwogICAgICAgICAgICAgICAgICAgICBkZXRhaWwu
dXNlckRlc2NyaXB0aW9uID0gW2luY29taW5nRGV0YWlsIG9iamVjdEZvcktleTpAIk5TR3JhbW1h
clVzZXJEZXNjcmlwdGlvbiJdOwotICAgICAgICAgICAgICAgICAgICBOU0FycmF5ICpndWVzc2Vz
ID0gW2luY29taW5nRGV0YWlsIG9iamVjdEZvcktleTpAIk5TR3JhbW1hckNvcnJlY3Rpb25zIl07
Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBmb3IgKE5TU3RyaW5n
ICpndWVzcyBpbiBndWVzc2VzKQotICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsLmd1ZXNz
ZXMuYXBwZW5kKGd1ZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmRldGFpbHMuYXBw
ZW5kKGRldGFpbCk7CisgICAgICAgICAgICAgICAgICAgIGRldGFpbC5ndWVzc2VzID0gbWFrZVZl
Y3RvcjxTdHJpbmc+KFtpbmNvbWluZ0RldGFpbCBvYmplY3RGb3JLZXk6QCJOU0dyYW1tYXJDb3Jy
ZWN0aW9ucyJdKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmRldGFpbHMudW5jaGVja2Vk
QXBwZW5kKFdURk1vdmUoZGV0YWlsKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBl
bmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxz
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRB
c3Npc3RhbnQubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFz
c2lzdGFudC5tbQppbmRleCBjYzQyYmY5ZmFkNzEzNDk4MzM1MGIyNzk0MzFlNjgzOTY3YjJlMDgx
Li40YmZhMGM5MjBlOTk5NjIzY2U5NzAxNzhhYzdmNWFkZTMyN2JiMjJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFzc2lzdGFudC5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldEFzc2lzdGFudC5tbQpA
QCAtMjA3LDEyICsyMDcsMTEgQEAgLSAoQ0dSZWN0KXByZXNlbnRhdGlvblJlY3RGb3JFbGVtZW50
VXNpbmdDbG9zZXN0SW5kaWNhdGVkUmVjdAogCiAgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB0b3Vj
aExvY2F0aW9uID0gX3Bvc2l0aW9uSW5mb3JtYXRpb24tPnJlcXVlc3QucG9pbnQ7CiAgICAgV2Vi
Q29yZTo6RmxvYXRQb2ludCBsaW5rRWxlbWVudExvY2F0aW9uID0gaW5kaWNhdG9yLnRleHRCb3Vu
ZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKTsKLSAgICBWZWN0b3I8V2Vi
Q29yZTo6RmxvYXRSZWN0PiBpbmRpY2F0ZWRSZWN0czsKLSAgICBmb3IgKGF1dG8gcmVjdCA6IGlu
ZGljYXRvci50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKSB7CisgICAgYXV0byBp
bmRpY2F0ZWRSZWN0cyA9IGluZGljYXRvci50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5h
dGVzLm1hcChbJl0oYXV0byByZWN0KSB7CiAgICAgICAgIHJlY3QuaW5mbGF0ZSgyKTsKICAgICAg
ICAgcmVjdC5tb3ZlQnkobGlua0VsZW1lbnRMb2NhdGlvbik7Ci0gICAgICAgIGluZGljYXRlZFJl
Y3RzLmFwcGVuZChyZWN0KTsKLSAgICB9CisgICAgICAgIHJldHVybiByZWN0OworICAgIH0pOwog
CiAgICAgZm9yIChjb25zdCBhdXRvJiBwYXRoIDogV2ViQ29yZTo6UGF0aFV0aWxpdGllczo6cGF0
aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3RzKGluZGljYXRlZFJlY3RzLCAwKSkgewogICAgICAgICBh
dXRvIGJvdW5kaW5nUmVjdCA9IHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFjLm1tIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFjLm1tCmluZGV4IDE2ZDY4MzhlNTQ4ZTA0
MzJmYmQxOGY4ZDRkMmFkZTFjMmMxMDhmNmUuLmVjZTJlM2UyNDUzMTVlZTcxYWQ5Nzk3ZmE2Y2M4
MGI0MjkzMzBkMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9UZXh0
Q2hlY2tlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNr
ZXJNYWMubW0KQEAgLTM0NCwxMiArMzQ0LDEzIEBAIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+
IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChTcGVsbERvY3VtZW50VGFnIHNwCiAg
ICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAgICAgcmVzdWx0
LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZzsKICAgICAgICAgICAgIHJlc3VsdC5y
YW5nZSA9IHJlc3VsdFJhbmdlOwotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsK
KyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgIH0g
ZWxzZSBpZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVHcmFtbWFyICYmIGNoZWNr
aW5nVHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcikpIHsKICAgICAgICAg
ICAgIFRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICBOU0FycmF5ICpkZXRh
aWxzID0gW2luY29taW5nUmVzdWx0IGdyYW1tYXJEZXRhaWxzXTsKICAgICAgICAgICAgIHJlc3Vs
dC50eXBlID0gVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcjsKICAgICAgICAgICAgIHJlc3VsdC5y
YW5nZSA9IHJlc3VsdFJhbmdlOworICAgICAgICAgICAgcmVzdWx0LmRldGFpbHMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShkZXRhaWxzLmNvdW50KTsKICAgICAgICAgICAgIGZvciAoTlNEaWN0aW9u
YXJ5ICppbmNvbWluZ0RldGFpbCBpbiBkZXRhaWxzKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJU
KGluY29taW5nRGV0YWlsKTsKICAgICAgICAgICAgICAgICBHcmFtbWFyRGV0YWlsIGRldGFpbDsK
QEAgLTM2MSw5ICszNjIsOCBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tl
cjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3BlbGxEb2N1bWVudFRhZyBzcAogICAgICAgICAgICAg
ICAgIGRldGFpbC5yYW5nZSA9IGRldGFpbE5TUmFuZ2U7CiAgICAgICAgICAgICAgICAgZGV0YWls
LnVzZXJEZXNjcmlwdGlvbiA9IFtpbmNvbWluZ0RldGFpbCBvYmplY3RGb3JLZXk6TlNHcmFtbWFy
VXNlckRlc2NyaXB0aW9uXTsKICAgICAgICAgICAgICAgICBOU0FycmF5ICpndWVzc2VzID0gW2lu
Y29taW5nRGV0YWlsIG9iamVjdEZvcktleTpOU0dyYW1tYXJDb3JyZWN0aW9uc107Ci0gICAgICAg
ICAgICAgICAgZm9yIChOU1N0cmluZyAqZ3Vlc3MgaW4gZ3Vlc3NlcykKLSAgICAgICAgICAgICAg
ICAgICAgZGV0YWlsLmd1ZXNzZXMuYXBwZW5kKFN0cmluZyhndWVzcykpOwotICAgICAgICAgICAg
ICAgIHJlc3VsdC5kZXRhaWxzLmFwcGVuZChkZXRhaWwpOworICAgICAgICAgICAgICAgIGRldGFp
bC5ndWVzc2VzID0gbWFrZVZlY3RvcjxTdHJpbmc+KGd1ZXNzZXMpOworICAgICAgICAgICAgICAg
IHJlc3VsdC5kZXRhaWxzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGRldGFpbCkpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKICAgICAgICAgfSBl
bHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZUxpbmsgJiYgY2hlY2tpbmdU
eXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpMaW5rKSkgewpAQCAtMzcxLDMxICszNzEs
MzEgQEAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9m
UGFyYWdyYXBoKFNwZWxsRG9jdW1lbnRUYWcgc3AKICAgICAgICAgICAgIHJlc3VsdC50eXBlID0g
VGV4dENoZWNraW5nVHlwZTo6TGluazsKICAgICAgICAgICAgIHJlc3VsdC5yYW5nZSA9IHJlc3Vs
dFJhbmdlOwogICAgICAgICAgICAgcmVzdWx0LnJlcGxhY2VtZW50ID0gW1tpbmNvbWluZ1Jlc3Vs
dCBVUkxdIGFic29sdXRlU3RyaW5nXTsKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3Vs
dCk7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAg
ICB9IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBlUXVvdGUgJiYgY2hl
Y2tpbmdUeXBlcy5jb250YWlucyhUZXh0Q2hlY2tpbmdUeXBlOjpRdW90ZSkpIHsKICAgICAgICAg
ICAgIFRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICByZXN1bHQudHlwZSA9
IFRleHRDaGVja2luZ1R5cGU6OlF1b3RlOwogICAgICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVz
dWx0UmFuZ2U7CiAgICAgICAgICAgICByZXN1bHQucmVwbGFjZW1lbnQgPSBbaW5jb21pbmdSZXN1
bHQgcmVwbGFjZW1lbnRTdHJpbmddOwotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0
KTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAg
IH0gZWxzZSBpZiAocmVzdWx0VHlwZSA9PSBOU1RleHRDaGVja2luZ1R5cGVEYXNoICYmIGNoZWNr
aW5nVHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6RGFzaCkpIHsKICAgICAgICAgICAg
IFRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7CiAgICAgICAgICAgICByZXN1bHQudHlwZSA9IFRl
eHRDaGVja2luZ1R5cGU6OkRhc2g7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2UgPSByZXN1bHRS
YW5nZTsKICAgICAgICAgICAgIHJlc3VsdC5yZXBsYWNlbWVudCA9IFtpbmNvbWluZ1Jlc3VsdCBy
ZXBsYWNlbWVudFN0cmluZ107Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyZXN1bHQpOwor
ICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgfSBl
bHNlIGlmIChyZXN1bHRUeXBlID09IE5TVGV4dENoZWNraW5nVHlwZVJlcGxhY2VtZW50ICYmIGNo
ZWNraW5nVHlwZXMuY29udGFpbnMoVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQpKSB7CiAg
ICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAgICAgICAgICAgcmVzdWx0
LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudDsKICAgICAgICAgICAgIHJlc3Vs
dC5yYW5nZSA9IHJlc3VsdFJhbmdlOwogICAgICAgICAgICAgcmVzdWx0LnJlcGxhY2VtZW50ID0g
W2luY29taW5nUmVzdWx0IHJlcGxhY2VtZW50U3RyaW5nXTsKLSAgICAgICAgICAgIHJlc3VsdHMu
YXBwZW5kKHJlc3VsdCk7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChXVEZNb3ZlKHJlc3Vs
dCkpOwogICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdFR5cGUgPT0gTlNUZXh0Q2hlY2tpbmdUeXBl
Q29ycmVjdGlvbiAmJiBjaGVja2luZ1R5cGVzLmNvbnRhaW5zKFRleHRDaGVja2luZ1R5cGU6OkNv
cnJlY3Rpb24pKSB7CiAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgcmVzdWx0OwogICAg
ICAgICAgICAgcmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlOjpDb3JyZWN0aW9uOwogICAg
ICAgICAgICAgcmVzdWx0LnJhbmdlID0gcmVzdWx0UmFuZ2U7CiAgICAgICAgICAgICByZXN1bHQu
cmVwbGFjZW1lbnQgPSBbaW5jb21pbmdSZXN1bHQgcmVwbGFjZW1lbnRTdHJpbmddOwotICAgICAg
ICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5k
KFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9BcHBsZVBheS9XZWJQYXltZW50Q29vcmRpbmF0b3IuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvci5j
cHAKaW5kZXggNzM1NzZhMjQ3Y2UxMTc1Mjc1NjVmYjFkMjZiNGNkMDliMjQ3MmU5Zi4uMTI3YWMx
ZTQ1NzcxNWJmN2RmYjBlOWM5M2ExMDQyMGI0ZjVjMzU3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvci5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0FwcGxlUGF5L1dlYlBheW1lbnRDb29yZGluYXRvci5j
cHAKQEAgLTk4LDkgKzk4LDkgQEAgdm9pZCBXZWJQYXltZW50Q29vcmRpbmF0b3I6Om9wZW5QYXlt
ZW50U2V0dXAoY29uc3QgU3RyaW5nJiBtZXJjaGFudElkZW50aWZpZXIsIGMKIAogYm9vbCBXZWJQ
YXltZW50Q29vcmRpbmF0b3I6OnNob3dQYXltZW50VUkoY29uc3QgVVJMJiBvcmlnaW5hdGluZ1VS
TCwgY29uc3QgVmVjdG9yPFVSTD4mIGxpbmtJY29uVVJMcywgY29uc3QgV2ViQ29yZTo6QXBwbGVQ
YXlTZXNzaW9uUGF5bWVudFJlcXVlc3QmIHBheW1lbnRSZXF1ZXN0KQogewotICAgIFZlY3RvcjxT
dHJpbmc+IGxpbmtJY29uVVJMU3RyaW5nczsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGxpbmtJY29u
VVJMIDogbGlua0ljb25VUkxzKQotICAgICAgICBsaW5rSWNvblVSTFN0cmluZ3MuYXBwZW5kKGxp
bmtJY29uVVJMLnN0cmluZygpKTsKKyAgICBhdXRvIGxpbmtJY29uVVJMU3RyaW5ncyA9IGxpbmtJ
Y29uVVJMcy5tYXAoW10oYXV0byYgbGlua0ljb25VUkwpIHsKKyAgICAgICAgcmV0dXJuIGxpbmtJ
Y29uVVJMLnN0cmluZygpOworICAgIH0pOwogCiAgICAgYm9vbCByZXN1bHQ7CiAgICAgaWYgKCFz
ZW5kU3luYyhNZXNzYWdlczo6V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OlNob3dQYXltZW50
VUkobV93ZWJQYWdlLmlkZW50aWZpZXIoKSwgbV93ZWJQYWdlLndlYlBhZ2VQcm94eUlkZW50aWZp
ZXIoKSwgb3JpZ2luYXRpbmdVUkwuc3RyaW5nKCksIGxpbmtJY29uVVJMU3RyaW5ncywgcGF5bWVu
dFJlcXVlc3QpLCBNZXNzYWdlczo6V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OlNob3dQYXlt
ZW50VUk6OlJlcGx5KHJlc3VsdCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5LmNwcApp
bmRleCBiMGZlODM1NzIyM2IzMTMzZmM0ZGIyZmJhYWQ4ZTczOWY1ZTNiOWQ2Li5mNDVjZmI0MTkx
MzZiN2NmMDhlM2JmZDQ5NmIyYjY5N2EzYzllZmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lv
blByb3h5LmNwcApAQCAtODA1LDEzICs4MDUsMTIgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
blByb3h5OjpzZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZChXZWJDb3JlOjpQYWdlSWRlbnRpZmkK
ICAgICBhdXRvJiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxXZWJDb3JlOjpIVE1MSW5wdXRFbGVt
ZW50PigqY29yZUVsZW1lbnQpOwogICAgIFZlY3RvcjxSZWY8V2ViQ29yZTo6RmlsZT4+IGZpbGVP
YmplY3RzOwogICAgIGlmIChpbnB1dEVsZW1lbnQubXVsdGlwbGUoKSkgewotICAgICAgICBpZiAo
YXV0byogZmlsZXMgPSBpbnB1dEVsZW1lbnQuZmlsZXMoKSkgewotICAgICAgICAgICAgZm9yIChh
dXRvJiBmaWxlIDogZmlsZXMtPmZpbGVzKCkpCi0gICAgICAgICAgICAgICAgZmlsZU9iamVjdHMu
YXBwZW5kKGZpbGUuY29weVJlZigpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoYXV0byogZmls
ZXMgPSBpbnB1dEVsZW1lbnQuZmlsZXMoKSkKKyAgICAgICAgICAgIGZpbGVPYmplY3RzLmFwcGVu
ZFZlY3RvcihmaWxlcy0+ZmlsZXMoKSk7CiAgICAgfQorICAgIGZpbGVPYmplY3RzLnJlc2VydmVD
YXBhY2l0eShmaWxlT2JqZWN0cy5zaXplKCkgKyBmaWxlbmFtZXMuc2l6ZSgpKTsKICAgICBmb3Ig
KGNvbnN0IGF1dG8mIHBhdGggOiBmaWxlbmFtZXMpCi0gICAgICAgIGZpbGVPYmplY3RzLmFwcGVu
ZChXZWJDb3JlOjpGaWxlOjpjcmVhdGUoJmlucHV0RWxlbWVudC5kb2N1bWVudCgpLCBwYXRoKSk7
CisgICAgICAgIGZpbGVPYmplY3RzLnVuY2hlY2tlZEFwcGVuZChXZWJDb3JlOjpGaWxlOjpjcmVh
dGUoJmlucHV0RWxlbWVudC5kb2N1bWVudCgpLCBwYXRoKSk7CiAgICAgaW5wdXRFbGVtZW50LnNl
dEZpbGVzKFdlYkNvcmU6OkZpbGVMaXN0OjpjcmVhdGUoV1RGTW92ZShmaWxlT2JqZWN0cykpKTsK
IAogICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0ZDo6bnVsbG9wdCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVy
TWFuYWdlci5jcHAKaW5kZXggN2M5ZDQ1NjlhNGU1MGIwNzEzYTc3YThiNGFjMjQwZmFlNDZkZGQx
ZS4uODEzYWYyODU5ODNjYjgyYzMwZjI0ZTI1MzcxNTVjN2YwZjNiNjEyOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFn
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVk
aWFQbGF5ZXJNYW5hZ2VyLmNwcApAQCAtMTYwLDggKzE2MCw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxN
ZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U+IFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlcjo6Y3Jl
YXRlUmVtCiAgICAgcHJveHlDb25maWd1cmF0aW9uLmlzVmlkZW8gPSBwbGF5ZXItPmlzVmlkZW9Q
bGF5ZXIoKTsKIAogI2lmIEVOQUJMRShBVkZfQ0FQVElPTlMpCi0gICAgZm9yIChjb25zdCBhdXRv
JiB0cmFjayA6IHBsYXllci0+b3V0T2ZCYW5kVHJhY2tTb3VyY2VzKCkpCi0gICAgICAgIHByb3h5
Q29uZmlndXJhdGlvbi5vdXRPZkJhbmRUcmFja0RhdGEuYXBwZW5kKHRyYWNrLT5kYXRhKCkpOwor
ICAgIHByb3h5Q29uZmlndXJhdGlvbi5vdXRPZkJhbmRUcmFja0RhdGEgPSBwbGF5ZXItPm91dE9m
QmFuZFRyYWNrU291cmNlcygpLm1hcChbXShhdXRvJiB0cmFjaykgeworICAgICAgICByZXR1cm4g
dHJhY2stPmRhdGEoKTsKKyAgICB9KTsKICNlbmRpZgogCiAgICAgYXV0byBkb2N1bWVudFNlY3Vy
aXR5T3JpZ2luID0gcGxheWVyLT5kb2N1bWVudFNlY3VyaXR5T3JpZ2luKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1NvdXJjZUJ1ZmZlclByaXZhdGVS
ZW1vdGUuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9Tb3VyY2VCdWZm
ZXJQcml2YXRlUmVtb3RlLmNwcAppbmRleCA5NjZmYzkzYjc3YWZhYTNlNjIwOGQ3YWJhNWFlZDJj
N2E5NGM3NGIyLi40ZWYxNjQwYTQwMTAwNmE2YjhmNjljYzUwMTE2NGE4YmQxOTBlYjkxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1NvdXJjZUJ1ZmZlclBy
aXZhdGVSZW1vdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEv
U291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZS5jcHAKQEAgLTMzOCwxNiArMzM4LDExIEBAIHZvaWQg
U291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZTo6dXBkYXRlVHJhY2tJZHMoVmVjdG9yPHN0ZDo6cGFp
cjxBdG9tU3RyaW5nLCBBdG9tCiAgICAgaWYgKCFtX2dwdVByb2Nlc3NDb25uZWN0aW9uKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8c3RkOjpwYWlyPFRyYWNrUHJpdmF0ZVJlbW90ZUlk
ZW50aWZpZXIsIFRyYWNrUHJpdmF0ZVJlbW90ZUlkZW50aWZpZXI+PiBpZGVudGlmaWVyUGFpcnM7
Ci0KLSAgICBmb3IgKGF1dG8mIHRyYWNrSWRQYWlyIDogdHJhY2tJZFBhaXJzKSB7CisgICAgYXV0
byBpZGVudGlmaWVyUGFpcnMgPSB0cmFja0lkUGFpcnMubWFwKFt0aGlzXShhdXRvJiB0cmFja0lk
UGFpcikgewogICAgICAgICBBU1NFUlQobV9wcmV2VHJhY2tJZGVudGlmaWVyTWFwLmNvbnRhaW5z
KHRyYWNrSWRQYWlyLmZpcnN0KSk7CiAgICAgICAgIEFTU0VSVChtX3RyYWNrSWRlbnRpZmllck1h
cC5jb250YWlucyh0cmFja0lkUGFpci5zZWNvbmQpKTsKLQotICAgICAgICBhdXRvIG9sZElkZW50
aWZpZXIgPSBtX3ByZXZUcmFja0lkZW50aWZpZXJNYXAudGFrZSh0cmFja0lkUGFpci5maXJzdCk7
Ci0gICAgICAgIGF1dG8gbmV3SWRlbnRpZmllciA9IG1fdHJhY2tJZGVudGlmaWVyTWFwLmdldCh0
cmFja0lkUGFpci5zZWNvbmQpOwotICAgICAgICBpZGVudGlmaWVyUGFpcnMuYXBwZW5kKHN0ZDo6
bWFrZV9wYWlyKG9sZElkZW50aWZpZXIsIG5ld0lkZW50aWZpZXIpKTsKLSAgICB9CisgICAgICAg
IHJldHVybiBzdGQ6OnBhaXIgeyBtX3ByZXZUcmFja0lkZW50aWZpZXJNYXAudGFrZSh0cmFja0lk
UGFpci5maXJzdCksIG1fdHJhY2tJZGVudGlmaWVyTWFwLmdldCh0cmFja0lkUGFpci5zZWNvbmQp
IH07CisgICAgfSk7CiAKICAgICBtX2dwdVByb2Nlc3NDb25uZWN0aW9uLT5jb25uZWN0aW9uKCku
c2VuZChNZXNzYWdlczo6UmVtb3RlU291cmNlQnVmZmVyUHJveHk6OlVwZGF0ZVRyYWNrSWRzKGlk
ZW50aWZpZXJQYWlycyksIG1fcmVtb3RlU291cmNlQnVmZmVySWRlbnRpZmllcik7CiB9CkBAIC0z
ODMsMjcgKzM3OCwzMCBAQCB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGU6OnNvdXJjZUJ1
ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZQogICAgIHNlZ21lbnQuZHVy
YXRpb24gPSBzZWdtZW50SW5mby5kdXJhdGlvbjsKIAogICAgIG1fcHJldlRyYWNrSWRlbnRpZmll
ck1hcC5zd2FwKG1fdHJhY2tJZGVudGlmaWVyTWFwKTsKKyAgICBzZWdtZW50LmF1ZGlvVHJhY2tz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2VnbWVudEluZm8uYXVkaW9UcmFja3Muc2l6ZSgpKTsK
ICAgICBmb3IgKGF1dG8mIGF1ZGlvVHJhY2sgOiBzZWdtZW50SW5mby5hdWRpb1RyYWNrcykgewog
ICAgICAgICBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQ6
OkF1ZGlvVHJhY2tJbmZvcm1hdGlvbiBpbmZvOwogICAgICAgICBpbmZvLnRyYWNrID0gbV9tZWRp
YVBsYXllclByaXZhdGUtPmF1ZGlvVHJhY2tQcml2YXRlUmVtb3RlKGF1ZGlvVHJhY2suaWRlbnRp
Zmllcik7CiAgICAgICAgIGluZm8uZGVzY3JpcHRpb24gPSBSZW1vdGVNZWRpYURlc2NyaXB0aW9u
OjpjcmVhdGUoYXVkaW9UcmFjay5kZXNjcmlwdGlvbik7Ci0gICAgICAgIHNlZ21lbnQuYXVkaW9U
cmFja3MuYXBwZW5kKGluZm8pOworICAgICAgICBzZWdtZW50LmF1ZGlvVHJhY2tzLnVuY2hlY2tl
ZEFwcGVuZChpbmZvKTsKICAgICAgICAgbV90cmFja0lkZW50aWZpZXJNYXAuYWRkKGluZm8udHJh
Y2stPmlkKCksIGF1ZGlvVHJhY2suaWRlbnRpZmllcik7CiAgICAgfQogCisgICAgc2VnbWVudC52
aWRlb1RyYWNrcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNlZ21lbnRJbmZvLnZpZGVvVHJhY2tz
LnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiB2aWRlb1RyYWNrIDogc2VnbWVudEluZm8udmlkZW9U
cmFja3MpIHsKICAgICAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRp
b25TZWdtZW50OjpWaWRlb1RyYWNrSW5mb3JtYXRpb24gaW5mbzsKICAgICAgICAgaW5mby50cmFj
ayA9IG1fbWVkaWFQbGF5ZXJQcml2YXRlLT52aWRlb1RyYWNrUHJpdmF0ZVJlbW90ZSh2aWRlb1Ry
YWNrLmlkZW50aWZpZXIpOwogICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0gUmVtb3RlTWVkaWFE
ZXNjcmlwdGlvbjo6Y3JlYXRlKHZpZGVvVHJhY2suZGVzY3JpcHRpb24pOwotICAgICAgICBzZWdt
ZW50LnZpZGVvVHJhY2tzLmFwcGVuZChpbmZvKTsKKyAgICAgICAgc2VnbWVudC52aWRlb1RyYWNr
cy51bmNoZWNrZWRBcHBlbmQoaW5mbyk7CiAgICAgICAgIG1fdHJhY2tJZGVudGlmaWVyTWFwLmFk
ZChpbmZvLnRyYWNrLT5pZCgpLCB2aWRlb1RyYWNrLmlkZW50aWZpZXIpOwogICAgIH0KIAorICAg
IHNlZ21lbnQudGV4dFRyYWNrcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNlZ21lbnRJbmZvLnRl
eHRUcmFja3Muc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIHRleHRUcmFjayA6IHNlZ21lbnRJbmZv
LnRleHRUcmFja3MpIHsKICAgICAgICAgU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlh
bGl6YXRpb25TZWdtZW50OjpUZXh0VHJhY2tJbmZvcm1hdGlvbiBpbmZvOwogICAgICAgICBpbmZv
LnRyYWNrID0gbV9tZWRpYVBsYXllclByaXZhdGUtPnRleHRUcmFja1ByaXZhdGVSZW1vdGUodGV4
dFRyYWNrLmlkZW50aWZpZXIpOwogICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0gUmVtb3RlTWVk
aWFEZXNjcmlwdGlvbjo6Y3JlYXRlKHRleHRUcmFjay5kZXNjcmlwdGlvbik7Ci0gICAgICAgIHNl
Z21lbnQudGV4dFRyYWNrcy5hcHBlbmQoaW5mbyk7CisgICAgICAgIHNlZ21lbnQudGV4dFRyYWNr
cy51bmNoZWNrZWRBcHBlbmQoaW5mbyk7CiAgICAgICAgIG1fdHJhY2tJZGVudGlmaWVyTWFwLmFk
ZChpbmZvLnRyYWNrLT5pZCgpLCB0ZXh0VHJhY2suaWRlbnRpZmllcik7CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2Rl
Y3MuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29k
ZWNzLmNwcAppbmRleCBkMDcwYzJiNzlkZjQwY2FjYjQxOGYwNjc4MjY3ZTRjM2I0YTU0NjFjLi4x
YzIyNzM0MzI1NDVhYmYzYzkwNmI4NWRjMTdkOWI5OWQ0ZTFmN2FkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAK
QEAgLTM5Miw5ICszOTIsOSBAQCBMaWJXZWJSVENDb2RlY3M6OkVuY29kZXIqIExpYldlYlJUQ0Nv
ZGVjczo6Y3JlYXRlRW5jb2RlcihUeXBlIHR5cGUsIGNvbnN0IHN0ZDo6bQogICAgIGVuY29kZXIt
PmlkZW50aWZpZXIgPSBSVENFbmNvZGVySWRlbnRpZmllcjo6Z2VuZXJhdGVUaHJlYWRTYWZlKCk7
CiAgICAgZW5jb2Rlci0+Y29kZWNUeXBlID0gdG9XZWJSVENDb2RlY1R5cGUodHlwZSk7CiAKLSAg
ICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gcGFyYW1ldGVyczsKLSAgICBmb3Ig
KGF1dG8mIGtleVZhbHVlIDogZm9ybWF0UGFyYW1ldGVycykKLSAgICAgICAgcGFyYW1ldGVycy5h
cHBlbmQoc3RkOjptYWtlX3BhaXIoU3RyaW5nOjpmcm9tVVRGOChrZXlWYWx1ZS5maXJzdC5kYXRh
KCksIGtleVZhbHVlLmZpcnN0Lmxlbmd0aCgpKSwgU3RyaW5nOjpmcm9tVVRGOChrZXlWYWx1ZS5z
ZWNvbmQuZGF0YSgpLCBrZXlWYWx1ZS5zZWNvbmQubGVuZ3RoKCkpKSk7CisgICAgYXV0byBwYXJh
bWV0ZXJzID0gV1RGOjptYXAoZm9ybWF0UGFyYW1ldGVycywgW10oYXV0byYgZW50cnkpIHsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6cGFpciB7IFN0cmluZzo6ZnJvbVVURjgoZW50cnkuZmlyc3QuZGF0
YSgpLCBlbnRyeS5maXJzdC5sZW5ndGgoKSksIFN0cmluZzo6ZnJvbVVURjgoZW50cnkuc2Vjb25k
LmRhdGEoKSwgZW50cnkuc2Vjb25kLmxlbmd0aCgpKSB9OworICAgIH0pOwogCiAgICAgZW5zdXJl
R1BVUHJvY2Vzc0Nvbm5lY3Rpb25BbmREaXNwYXRjaFRvVGhyZWFkKFt0aGlzLCBlbmNvZGVyID0g
V1RGTW92ZShlbmNvZGVyKSwgdHlwZSwgcGFyYW1ldGVycyA9IFdURk1vdmUocGFyYW1ldGVycyld
KCkgbXV0YWJsZSB7CiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVy
bGF5LmNwcAppbmRleCBkODU0MmEyYjEwYjFiM2UxNTM2MTQxNTQxMTVlZjdlY2VjNDRlYjg4Li42
ZjhmNzQ1MzU5MjQ1M2UwZTYxODY3NjEyNDRlMGI3NzkyMjFkZTc5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3Zl
cmxheS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwCkBAIC0xOTcsMTEgKzE5NywxMyBAQCBwcml2YXRl
OgogICAgICAgICBhdXRvIHdrTmFtZXMgPSBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCku
Y29weUFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcyh0b0FQSSgmcGFnZU92ZXJsYXkpLCBwYXJh
bWVyaXplZE5hbWVzLCBtX2FjY2Vzc2liaWxpdHlDbGllbnQuY2xpZW50KCkuYmFzZS5jbGllbnRJ
bmZvKTsKIAogICAgICAgICBzaXplX3QgY291bnQgPSBXS0FycmF5R2V0U2l6ZSh3a05hbWVzKTsK
KyAgICAgICAgbmFtZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjb3VudCk7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGsgPSAwOyBrIDwgY291bnQ7IGsrKykgewogICAgICAgICAgICAgV0tUeXBlUmVm
IGl0ZW0gPSBXS0FycmF5R2V0SXRlbUF0SW5kZXgod2tOYW1lcywgayk7CiAgICAgICAgICAgICBp
ZiAoV2ViS2l0Ojp0b0ltcGwoaXRlbSktPnR5cGUoKSA9PSBBUEk6OlN0cmluZzo6QVBJVHlwZSkK
LSAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoV2ViS2l0Ojp0b1dURlN0cmluZyhzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4oaXRlbSkpKTsKKyAgICAgICAgICAgICAgICBuYW1lcy51bmNoZWNr
ZWRBcHBlbmQoV2ViS2l0Ojp0b1dURlN0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oaXRl
bSkpKTsKICAgICAgICAgfQorICAgICAgICBuYW1lcy5zaHJpbmtUb0ZpdCgpOwogCiAgICAgICAg
IHJldHVybiBuYW1lczsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvU2Vzc2lvblN0YXRlQ29udmVyc2lvbi5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvU2Vzc2lvblN0YXRlQ29udmVyc2lvbi5jcHAK
aW5kZXggYzhmMjQ4YTY0NzY1NzZhMjkyYzc1ZDVmYWE2OGY1YWM2M2E0NzVjOC4uNTY3ZDQ3NTFi
ZWU4M2EzYjNmNGY2ZTBmYTIzNzdiZDAwNjM1MGEyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1Nlc3Npb25TdGF0ZUNvbnZlcnNpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9TZXNzaW9uU3RhdGVD
b252ZXJzaW9uLmNwcApAQCAtOTksMTAgKzk5LDkgQEAgc3RhdGljIEZyYW1lU3RhdGUgdG9GcmFt
ZVN0YXRlKGNvbnN0IEhpc3RvcnlJdGVtJiBoaXN0b3J5SXRlbSkKICAgICBmcmFtZVN0YXRlLm9i
c2N1cmVkSW5zZXRzID0gaGlzdG9yeUl0ZW0ub2JzY3VyZWRJbnNldHMoKTsKICNlbmRpZgogCi0g
ICAgZm9yIChhdXRvJiBjaGlsZEhpc3RvcnlJdGVtIDogaGlzdG9yeUl0ZW0uY2hpbGRyZW4oKSkg
ewotICAgICAgICBGcmFtZVN0YXRlIGNoaWxkRnJhbWVTdGF0ZSA9IHRvRnJhbWVTdGF0ZShjaGls
ZEhpc3RvcnlJdGVtKTsKLSAgICAgICAgZnJhbWVTdGF0ZS5jaGlsZHJlbi5hcHBlbmQoV1RGTW92
ZShjaGlsZEZyYW1lU3RhdGUpKTsKLSAgICB9CisgICAgZnJhbWVTdGF0ZS5jaGlsZHJlbiA9IGhp
c3RvcnlJdGVtLmNoaWxkcmVuKCkubWFwKFtdKGF1dG8mIGNoaWxkSGlzdG9yeUl0ZW0pIHsKKyAg
ICAgICAgcmV0dXJuIHRvRnJhbWVTdGF0ZShjaGlsZEhpc3RvcnlJdGVtKTsKKyAgICB9KTsKIAog
ICAgIHJldHVybiBmcmFtZVN0YXRlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlkZXIu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRldmljZU9y
aWVudGF0aW9uVXBkYXRlUHJvdmlkZXIuY3BwCmluZGV4IGY5YWY5YWI5M2Y3ZTAxMjg3NzM2NTBj
MWQyNDk1YWRkZTM5ZmQ0MzUuLjFkMTFmNDIzYzE3ODhkNTk3ZmYyNTc4ZWU2MGQ5Y2I2MTZhMGRk
MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJEZXZpY2VPcmllbnRhdGlvblVwZGF0ZVByb3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92
aWRlci5jcHAKQEAgLTgzLDExICs4Myw3IEBAIHZvaWQgV2ViRGV2aWNlT3JpZW50YXRpb25VcGRh
dGVQcm92aWRlcjo6c3RvcFVwZGF0aW5nRGV2aWNlTW90aW9uKFdlYkNvcmU6Ok1vdGlvCiAKIHZv
aWQgV2ViRGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlcjo6ZGV2aWNlT3JpZW50YXRpb25D
aGFuZ2VkKGRvdWJsZSBhbHBoYSwgZG91YmxlIGJldGEsIGRvdWJsZSBnYW1tYSwgZG91YmxlIGNv
bXBhc3NIZWFkaW5nLCBkb3VibGUgY29tcGFzc0FjY3VyYWN5KQogewotICAgIFZlY3RvcjxXZWFr
UHRyPFdlYkNvcmU6Ok1vdGlvbk1hbmFnZXJDbGllbnQ+PiBjbGllbnRzOwotICAgIGZvciAoYXV0
byYgY2xpZW50IDogbV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudHMpCi0gICAgICAgIGNsaWVudHMu
YXBwZW5kKGNsaWVudCk7Ci0KLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IGNsaWVudHMpIHsKKyAg
ICBmb3IgKGF1dG8mIGNsaWVudCA6IGNvcHlUb1ZlY3Rvck9mPFdlYWtQdHI8V2ViQ29yZTo6TW90
aW9uTWFuYWdlckNsaWVudD4+KG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRzKSkgewogICAgICAg
ICBpZiAoY2xpZW50KQogICAgICAgICAgICAgY2xpZW50LT5vcmllbnRhdGlvbkNoYW5nZWQoYWxw
aGEsIGJldGEsIGdhbW1hLCBjb21wYXNzSGVhZGluZywgY29tcGFzc0FjY3VyYWN5KTsKICAgICB9
CkBAIC05NSwxMSArOTEsNyBAQCB2b2lkIFdlYkRldmljZU9yaWVudGF0aW9uVXBkYXRlUHJvdmlk
ZXI6OmRldmljZU9yaWVudGF0aW9uQ2hhbmdlZChkb3VibGUgYWxwaGEsCiAKIHZvaWQgV2ViRGV2
aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRlcjo6ZGV2aWNlTW90aW9uQ2hhbmdlZChkb3VibGUg
eEFjY2VsZXJhdGlvbiwgZG91YmxlIHlBY2NlbGVyYXRpb24sIGRvdWJsZSB6QWNjZWxlcmF0aW9u
LCBkb3VibGUgeEFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHksIGRvdWJsZSB5QWNjZWxlcmF0
aW9uSW5jbHVkaW5nR3Jhdml0eSwgZG91YmxlIHpBY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5
LCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4geFJvdGF0aW9uUmF0ZSwgc3RkOjpvcHRpb25hbDxkb3Vi
bGU+IHlSb3RhdGlvblJhdGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB6Um90YXRpb25SYXRlKQog
ewotICAgIFZlY3RvcjxXZWFrUHRyPFdlYkNvcmU6Ok1vdGlvbk1hbmFnZXJDbGllbnQ+PiBjbGll
bnRzOwotICAgIGZvciAoYXV0byYgY2xpZW50IDogbV9kZXZpY2VNb3Rpb25DbGllbnRzKQotICAg
ICAgICBjbGllbnRzLmFwcGVuZChjbGllbnQpOwotICAgIAotICAgIGZvciAoYXV0byYgY2xpZW50
IDogY2xpZW50cykgeworICAgIGZvciAoYXV0byYgY2xpZW50IDogY29weVRvVmVjdG9yT2Y8V2Vh
a1B0cjxXZWJDb3JlOjpNb3Rpb25NYW5hZ2VyQ2xpZW50Pj4obV9kZXZpY2VNb3Rpb25DbGllbnRz
KSkgewogICAgICAgICBpZiAoY2xpZW50KQogICAgICAgICAgICAgY2xpZW50LT5tb3Rpb25DaGFu
Z2VkKHhBY2NlbGVyYXRpb24sIHlBY2NlbGVyYXRpb24sIHpBY2NlbGVyYXRpb24sIHhBY2NlbGVy
YXRpb25JbmNsdWRpbmdHcmF2aXR5LCB5QWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSwgIHpB
Y2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5LCB4Um90YXRpb25SYXRlLCB5Um90YXRpb25SYXRl
LCB6Um90YXRpb25SYXRlKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGFzdGVib2FyZE92ZXJyaWRlcy5j
cHAKaW5kZXggZGZkZGExNzY5OTM2MDA0NDdhMGM5M2NjODQ2MGY1ZTY4YjJjMjQ4MS4uMzE4Zjdj
M2QyOTMzMmMwMmFkMmNlMzBkOTBlN2NmZTZmNTVjMzIxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBhc3RlYm9hcmRPdmVycmlkZXMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQYXN0ZWJv
YXJkT3ZlcnJpZGVzLmNwcApAQCAtNzEsMTggKzcxLDEzIEBAIHZvaWQgV2ViUGFzdGVib2FyZE92
ZXJyaWRlczo6cmVtb3ZlT3ZlcnJpZGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29u
c3QKIAogVmVjdG9yPFN0cmluZz4gV2ViUGFzdGVib2FyZE92ZXJyaWRlczo6b3ZlcnJpZGRlblR5
cGVzKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7Ci0gICAgVmVjdG9yPFN0cmluZz4g
cmVzdWx0OwotCiAgICAgYXV0byBpdCA9IG1fb3ZlcnJpZGVzTWFwLmZpbmQocGFzdGVib2FyZE5h
bWUpOwogICAgIGlmIChpdCA9PSBtX292ZXJyaWRlc01hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIEFTU0VSVChpdC0+dmFsdWUpOwog
Ci0gICAgZm9yIChTdHJpbmcmIHR5cGUgOiBpdC0+dmFsdWUtPmtleXMoKSkKLSAgICAgICAgcmVz
dWx0LmFwcGVuZCh0eXBlKTsKLQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGNvcHlU
b1ZlY3RvcihpdC0+dmFsdWUtPmtleXMoKSk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6
UGFzdGVib2FyZEl0ZW1JbmZvPiBXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzOjpvdmVycmlkZGVuSW5m
byhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlNwZWVjaFN5bnRoZXNpc0NsaWVudC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViU3BlZWNoU3ludGhl
c2lzQ2xpZW50LmNwcAppbmRleCBjNGQwZGNjMDNkNWRhNmEwNDgzZWRmNTZkMWU0Mzk1MjdiYzk1
Zjg4Li5jNTdlNzgwOWIyZWUxNjZkZDZmNjg4YmUyMmE4NTljN2RhZGRhOGZhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViU3BlZWNoU3ludGhl
c2lzQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViU3BlZWNoU3ludGhlc2lzQ2xpZW50LmNwcApAQCAtNDIsOSArNDIsOSBAQCBjb25zdCBW
ZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2U+PiYgV2Vi
U3BlZWNoU3ludGhlc2lzQwogICAgIFZlY3RvcjxXZWJTcGVlY2hTeW50aGVzaXNWb2ljZT4gdm9p
Y2VMaXN0OwogICAgIG1fcGFnZS5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTcGVl
Y2hTeW50aGVzaXNWb2ljZUxpc3QoKSwgdm9pY2VMaXN0KTsKIAotICAgIG1fdm9pY2VzLmNsZWFy
KCk7Ci0gICAgZm9yIChhdXRvJiB2b2ljZSA6IHZvaWNlTGlzdCkKLSAgICAgICAgbV92b2ljZXMu
YXBwZW5kKFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2U6OmNyZWF0ZSh2b2lj
ZS52b2ljZVVSSSwgdm9pY2UubmFtZSwgdm9pY2UubGFuZywgdm9pY2UubG9jYWxTZXJ2aWNlLCB2
b2ljZS5kZWZhdWx0TGFuZykpOworICAgIG1fdm9pY2VzID0gdm9pY2VMaXN0Lm1hcChbXShhdXRv
JiB2b2ljZSkgLT4gUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2U+
IHsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2U6
OmNyZWF0ZSh2b2ljZS52b2ljZVVSSSwgdm9pY2UubmFtZSwgdm9pY2UubGFuZywgdm9pY2UubG9j
YWxTZXJ2aWNlLCB2b2ljZS5kZWZhdWx0TGFuZyk7CisgICAgfSk7CiAgICAgcmV0dXJuIG1fdm9p
Y2VzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9G
aW5kQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5k
Q29udHJvbGxlci5jcHAKaW5kZXggYjUxMzRkMGQyYzVkN2M1MmY2ZmFjOTY4MDQ0MWFjYzNlZWJm
NjVmZC4uMWQ2NDNiNmI0Mjg4ZDA4ZTAzOGM0NjI1ZDA1NDlkZTY4YWYyYWE3NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcApA
QCAtMjcyLDEwICsyNzIsOSBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpmaW5kU3RyaW5nTWF0Y2hl
cyhjb25zdCBTdHJpbmcmIHN0cmluZywgT3B0aW9uU2V0PEZpbmRPcHRpbwogICAgIGF1dG8gcmVz
dWx0ID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5maW5kVGV4dE1hdGNoZXMoc3RyaW5nLCBjb3Jl
KG9wdGlvbnMpLCBtYXhNYXRjaENvdW50KTsKICAgICBtX2ZpbmRNYXRjaGVzID0gV1RGTW92ZShy
ZXN1bHQucmFuZ2VzKTsKIAotICAgIFZlY3RvcjxWZWN0b3I8SW50UmVjdD4+IG1hdGNoUmVjdHM7
Ci0gICAgZm9yIChhdXRvJiByYW5nZSA6IG1fZmluZE1hdGNoZXMpCi0gICAgICAgIG1hdGNoUmVj
dHMuYXBwZW5kKFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMocmFuZ2UpKTsKLQorICAg
IGF1dG8gbWF0Y2hSZWN0cyA9IG1fZmluZE1hdGNoZXMubWFwKFtdKGF1dG8mIHJhbmdlKSB7Cisg
ICAgICAgIHJldHVybiBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKHJhbmdlKTsKKyAg
ICB9KTsKICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmlu
ZFN0cmluZ01hdGNoZXMoc3RyaW5nLCBtYXRjaFJlY3RzLCByZXN1bHQuaW5kZXhGb3JTZWxlY3Rp
b24pKTsKIAogICAgIGlmICghb3B0aW9ucy5jb250YWlucyhGaW5kT3B0aW9uczo6U2hvd092ZXJs
YXkpICYmICFvcHRpb25zLmNvbnRhaW5zKEZpbmRPcHRpb25zOjpTaG93RmluZEluZGljYXRvcikp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRl
eHRSYW5nZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcAppbmRleCA3NDgwMmM0Nzg3NTVmZmU2MWI5
MzA5MmNiY2E2ZDBhYzdjY2M5YzgzLi4yYzliNDU3ZGJjYTA3YTZlYjEyNjg5YTc4ZjBkZDViMjkx
NGEyMWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJG
b3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAKQEAgLTI0OCwxMSArMjQ4
LDEwIEBAIHZvaWQgV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpkcmF3UmVjdChXZWJDb3Jl
OjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OkdyYXBoCiAgICAgICAgIGF1dG8gdGV4dEJvdW5kaW5n
UmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9IG1fdGV4dEluZGljYXRvci0+dGV4dEJvdW5kaW5n
UmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpOwogICAgICAgICBhdXRvIHRleHRSZWN0c0luQm91
bmRpbmdSZWN0Q29vcmRpbmF0ZXMgPSBtX3RleHRJbmRpY2F0b3ItPnRleHRSZWN0c0luQm91bmRp
bmdSZWN0Q29vcmRpbmF0ZXMoKTsKIAotICAgICAgICBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0
PiB0ZXh0UmVjdHNJblJvb3RWaWV3Q29vcmRpbmF0ZXM7Ci0gICAgICAgIGZvciAoYXV0byByZWN0
IDogdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcykgeworICAgICAgICBhdXRvIHRl
eHRSZWN0c0luUm9vdFZpZXdDb29yZGluYXRlcyA9IHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29v
cmRpbmF0ZXMubWFwKFsmXShhdXRvIHJlY3QpIHsKICAgICAgICAgICAgIHJlY3QubW92ZUJ5KHRl
eHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKSk7Ci0gICAgICAg
ICAgICB0ZXh0UmVjdHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMuYXBwZW5kKHJlY3QpOwotICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gcmVjdDsKKyAgICAgICAgfSk7CiAKICAgICAgICAgYXV0
byBwYXRocyA9IFdlYkNvcmU6OlBhdGhVdGlsaXRpZXM6OnBhdGhzV2l0aFNocmlua1dyYXBwZWRS
ZWN0cyh0ZXh0UmVjdHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMsIGluZGljYXRvclJhZGl1cyk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggOGZm
OTA1ZGNmYWZhZjMxNzI3ODIxOGU5MTVmZTQ4MDA0NmRjMTYxOS4uZTIzYWRiYTkxODEyM2ExOWNl
NDg3YzEwYTY1Y2U2ZGY0ZTE1OTQyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTMwMzEsNyArMzAzMSw3IEBAIHZvaWQgV2ViUGFnZTo6bW91
c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBzdGQ6Om9wdGlvbmFsPFZl
Y3RvcjxTCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBWZWN0b3I8UmVmUHRyPFNhbmRi
b3hFeHRlbnNpb24+PiBtb3VzZUV2ZW50U2FuZGJveEV4dGVuc2lvbnM7CisgICAgVmVjdG9yPFJl
ZjxTYW5kYm94RXh0ZW5zaW9uPj4gbW91c2VFdmVudFNhbmRib3hFeHRlbnNpb25zOwogICAgIGlm
IChzYW5kYm94RXh0ZW5zaW9ucykKICAgICAgICAgbW91c2VFdmVudFNhbmRib3hFeHRlbnNpb25z
ID0gY29uc3VtZVNhbmRib3hFeHRlbnNpb25zKFdURk1vdmUoKnNhbmRib3hFeHRlbnNpb25zKSk7
CiAKQEAgLTc4NTcsMjEgKzc4NTcsMTkgQEAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5JiBX
ZWJQYWdlOjplbnN1cmVSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKQogfQogI2VuZGlmCiAK
LVZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+IFdlYlBhZ2U6OmNvbnN1bWVTYW5kYm94
RXh0ZW5zaW9ucyhWZWN0b3I8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiYmIHNhbmRib3hFeHRl
bnNpb25zKQorVmVjdG9yPFJlZjxTYW5kYm94RXh0ZW5zaW9uPj4gV2ViUGFnZTo6Y29uc3VtZVNh
bmRib3hFeHRlbnNpb25zKFZlY3RvcjxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+JiYgc2FuZGJv
eEV4dGVuc2lvbnMpCiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPj4gZHJh
Z1NhbmRib3hFeHRlbnNpb25zOwotICAgIGZvciAoYXV0byYgc2FuZGJveEV4dGVuc2lvbiA6IHNh
bmRib3hFeHRlbnNpb25zKSB7CisgICAgcmV0dXJuIFdURjo6Y29tcGFjdE1hcChXVEZNb3ZlKHNh
bmRib3hFeHRlbnNpb25zKSwgW10oYXV0byYmIHNhbmRib3hFeHRlbnNpb24pIC0+IFJlZlB0cjxT
YW5kYm94RXh0ZW5zaW9uPiB7CiAgICAgICAgIGF1dG8gZXh0ZW5zaW9uID0gU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlKFdURk1vdmUoc2FuZGJveEV4dGVuc2lvbikpOwogICAgICAgICBpZiAoIWV4
dGVuc2lvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgICAgIGJvb2wgb2sgPSBleHRlbnNpb24tPmNvbnN1bWUoKTsKICAgICAgICAgQVNT
RVJUX1VOVVNFRChvaywgb2spOwotICAgICAgICBkcmFnU2FuZGJveEV4dGVuc2lvbnMuYXBwZW5k
KFdURk1vdmUoZXh0ZW5zaW9uKSk7Ci0gICAgfQotICAgIHJldHVybiBkcmFnU2FuZGJveEV4dGVu
c2lvbnM7CisgICAgICAgIHJldHVybiBleHRlbnNpb247CisgICAgfSk7CiB9CiAKLXZvaWQgV2Vi
UGFnZTo6cmV2b2tlU2FuZGJveEV4dGVuc2lvbnMoVmVjdG9yPFJlZlB0cjxTYW5kYm94RXh0ZW5z
aW9uPj4mIHNhbmRib3hFeHRlbnNpb25zKQordm9pZCBXZWJQYWdlOjpyZXZva2VTYW5kYm94RXh0
ZW5zaW9ucyhWZWN0b3I8UmVmPFNhbmRib3hFeHRlbnNpb24+PiYgc2FuZGJveEV4dGVuc2lvbnMp
CiB7CiAgICAgZm9yIChhdXRvJiBzYW5kYm94RXh0ZW5zaW9uIDogc2FuZGJveEV4dGVuc2lvbnMp
CiAgICAgICAgIHNhbmRib3hFeHRlbnNpb24tPnJldm9rZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDY5ZGUxNGFhOTgzNDM4OGE0MDUyNDc3YzM2
MTgxZDdkNWEyZjdjY2YuLjY1NGI4YzljNjAwMmQwZWQ5YjJjNjJjZTBjMzFlYTliZmRiMGJlZjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTE5Njks
OCArMTk2OSw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHBsYXRmb3JtRGlkU2NhbGVQYWdlKCk7
CiAKLSAgICBWZWN0b3I8UmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiBjb25zdW1lU2FuZGJveEV4
dGVuc2lvbnMoVmVjdG9yPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4mJik7Ci0gICAgdm9pZCBy
ZXZva2VTYW5kYm94RXh0ZW5zaW9ucyhWZWN0b3I8UmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiYg
c2FuZGJveEV4dGVuc2lvbnMpOworICAgIFZlY3RvcjxSZWY8U2FuZGJveEV4dGVuc2lvbj4+IGNv
bnN1bWVTYW5kYm94RXh0ZW5zaW9ucyhWZWN0b3I8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlPiYm
KTsKKyAgICB2b2lkIHJldm9rZVNhbmRib3hFeHRlbnNpb25zKFZlY3RvcjxSZWY8U2FuZGJveEV4
dGVuc2lvbj4+JiBzYW5kYm94RXh0ZW5zaW9ucyk7CiAKICAgICB2b2lkIHNldFNlbGVjdGlvblJh
bmdlKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5LCBi
b29sKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1dlYlBhZ2VNYWMubW0KaW5kZXggOWRjMDBkYTI3NzBjMTkzOTg5MWEzMDBmMjMzNzQ5NmE5Yzhl
NzAxZC4uYmQzNjcyMDc1Yjc1NzY4Yzg0MTQ3NzhmYzY2NWY1ZDc1YjRlMjRhZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAg
LTc1NCwxMSArNzU0LDggQEAgdm9pZCBXZWJQYWdlOjpoYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xp
Y2soRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgY29uc3QgVmVjdG8KIAogICAgIE5TRGF0YSAq
c2VsZWN0aW9uRGF0YSA9IFthdHRyaWJ1dGVkU2VsZWN0aW9uIFJURkRGcm9tUmFuZ2U6TlNNYWtl
UmFuZ2UoMCwgW2F0dHJpYnV0ZWRTZWxlY3Rpb24gbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVz
OkB7IH1dOwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHNlbGVjdGlvbkRhdGFWZWN0b3I7Ci0gICAg
c2VsZWN0aW9uRGF0YVZlY3Rvci5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oc2VsZWN0aW9uRGF0YS5ieXRlcyksIHNlbGVjdGlvbkRhdGEubGVuZ3RoKTsKLQogICAgIGZs
dXNoUGVuZGluZ0VkaXRvclN0YXRlVXBkYXRlKCk7Ci0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpTaG93Q29udGV4dE1lbnUoQ29udGV4dE1lbnVDb250ZXh0RGF0YShwb2ludCwgc2Vs
ZWN0aW9uRGF0YVZlY3RvciwgcGhvbmVOdW1iZXJzLCBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuaXND
b250ZW50RWRpdGFibGUoKSksIFVzZXJEYXRhKCkpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OlNob3dDb250ZXh0TWVudShDb250ZXh0TWVudUNvbnRleHREYXRhKHBvaW50LCBW
ZWN0b3IgeyByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzZWxlY3Rpb25EYXRhLmJ5
dGVzKSwgc2VsZWN0aW9uRGF0YS5sZW5ndGggfSwgcGhvbmVOdW1iZXJzLCBzZWxlY3Rpb24uc2Vs
ZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSksIFVzZXJEYXRhKCkpKTsKIH0KIAogdm9pZCBX
ZWJQYWdlOjpoYW5kbGVJbWFnZVNlcnZpY2VDbGljayhjb25zdCBJbnRQb2ludCYgcG9pbnQsIElt
YWdlJiBpbWFnZSwgSFRNTEltYWdlRWxlbWVudCYgZWxlbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmNwcAppbmRleCA3OTk2MTNkMzc3NDIzNjNiZmJkY2Q5NTI5Nzk5NjIy
MDZmMDIyOGE4Li44OTkwZWRkNzZjYWI5NmMyZGVjZDNiOTYwNTRjZmY2Mjk1YmIwY2Y1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC0xNDUyLDggKzE0NTIsMTAg
QEAgdm9pZCBXZWJQcm9jZXNzOjpmZXRjaFdlYnNpdGVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0
YVR5cGU+IHdlYnNpdGVEYXRhVHlwZXMsIEMKIHsKICAgICBXZWJzaXRlRGF0YSB3ZWJzaXRlRGF0
YTsKICAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6Ok1l
bW9yeUNhY2hlKSkgewotICAgICAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IE1lbW9yeUNhY2hlOjpz
aW5nbGV0b24oKS5vcmlnaW5zV2l0aENhY2hlKHNlc3Npb25JRCgpKSkKLSAgICAgICAgICAgIHdl
YnNpdGVEYXRhLmVudHJpZXMuYXBwZW5kKFdlYnNpdGVEYXRhOjpFbnRyeSB7IG9yaWdpbi0+ZGF0
YSgpLCBXZWJzaXRlRGF0YVR5cGU6Ok1lbW9yeUNhY2hlLCAwIH0pOworICAgICAgICBhdXRvIG9y
aWdpbnMgPSBNZW1vcnlDYWNoZTo6c2luZ2xldG9uKCkub3JpZ2luc1dpdGhDYWNoZShzZXNzaW9u
SUQoKSk7CisgICAgICAgIHdlYnNpdGVEYXRhLmVudHJpZXMgPSBXVEY6Om1hcChvcmlnaW5zLCBb
XShhdXRvJiBvcmlnaW4pIHsKKyAgICAgICAgICAgIHJldHVybiBXZWJzaXRlRGF0YTo6RW50cnkg
eyBvcmlnaW4tPmRhdGEoKSwgV2Vic2l0ZURhdGFUeXBlOjpNZW1vcnlDYWNoZSwgMCB9OworICAg
ICAgICB9KTsKICAgICB9CiAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZSh3ZWJzaXRlRGF0
YSkpOwogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>