<?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>239356</bug_id>
          
          <creation_ts>2022-04-14 15:41:18 -0700</creation_ts>
          <short_desc>Leverage StringView in more places to avoid some String allocations</short_desc>
          <delta_ts>2022-04-15 21:46:15 -0700</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>
          
          
          <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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>benjamin</cc>
    
    <cc>calvaris</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>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>hta</cc>
    
    <cc>japhet</cc>
    
    <cc>jer.noble</cc>
    
    <cc>joepeck</cc>
    
    <cc>kangil.han</cc>
    
    <cc>keith_miller</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>mark.lam</cc>
    
    <cc>menard</cc>
    
    <cc>msaboff</cc>
    
    <cc>pangle</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>tommyw</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1861648</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-04-14 15:41:18 -0700</bug_when>
    <thetext>Leverage StringView in more places to avoid some String allocations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861652</commentid>
    <comment_count>1</comment_count>
      <attachid>457653</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-04-14 15:48:18 -0700</bug_when>
    <thetext>Created attachment 457653
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861940</commentid>
    <comment_count>2</comment_count>
      <attachid>457653</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-04-15 15:35:52 -0700</bug_when>
    <thetext>Comment on attachment 457653
Patch

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

&gt; Source/JavaScriptCore/inspector/ContentSearchUtilities.cpp:94
&gt; +            result.append(std::pair { lineNumber, line.toString() });

I guess we do need the explicit std::pair; I would omit it if we could.

&gt; Source/WebCore/Modules/fetch/FetchBodyConsumer.cpp:167
&gt; +                contentType = StringView(header).substring(contentTypeBegin + contentTypePrefixLength, contentTypeEnd - contentTypeBegin - contentTypePrefixLength).stripLeadingAndTrailingMatchedCharacters(isHTTPSpace).toString();

Is there a very-common case where the header string happens to have nothing that need to be trimmed, no &quot;\r\n&quot;, no spaces? I ask because that is the case will become *less* efficient, now copying the String.

I wish switching to StringView didn’t make the stripLeadingAndTrailingHTTPSpaces() function call *so* much longer stripLeadingAndTrailingMatchedCharacters(isHTTPSpace). On reflection, seems unnecessarily to have &quot;matched characters&quot; in that function name.

&gt; Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpTransceiverBackend.cpp:94
&gt; +    rtcCodec.name = StringView(codec.mimeType).substring(6).utf8().data();

Since we are setting a std::string here it would be better if CString knew how to convert to std::string without writing .data(), which makes the code look unnecessarily dangerous, although it’s actually correct and fine. Kind of annoying that we need both CString and std::string in WebKit. Longer term, I wonder how many unique great things CString has; maybe we can drop it and switch to std::string. It uses our faster malloc, but otherwise seems to have no significantly different features from std::string.

&gt; Source/WebCore/html/HTMLMapElement.cpp:103
&gt;          m_name = mapName;

WTFMove(mapName)

&gt; Source/WebCore/page/Location.cpp:202
&gt; +    if (!hash.isEmpty() &amp;&amp; hash[0] == &apos;#&apos;)

We have startsWith(UChar) function for cases like this.

&gt; Source/WebCore/page/UserContentURLPattern.h:37
&gt; +    UserContentURLPattern(StringView pattern)

Should we add explicit?

&gt; Source/WebCore/page/UserContentURLPattern.h:38
&gt;      : m_matchSubdomains(false)

Normally we indent.

&gt; Source/WebCore/platform/network/HTTPParsers.cpp:681
&gt;      // FIXME: The rest of this should use StringView.

Does this comment still make sense?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861946</commentid>
    <comment_count>3</comment_count>
      <attachid>457653</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-04-15 15:48:56 -0700</bug_when>
    <thetext>Comment on attachment 457653
Patch

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

&gt;&gt; Source/JavaScriptCore/inspector/ContentSearchUtilities.cpp:94
&gt;&gt; +            result.append(std::pair { lineNumber, line.toString() });
&gt; 
&gt; I guess we do need the explicit std::pair; I would omit it if we could.

You&apos;re probably right that we can. I&apos;ll try.

&gt;&gt; Source/WebCore/Modules/fetch/FetchBodyConsumer.cpp:167
&gt;&gt; +                contentType = StringView(header).substring(contentTypeBegin + contentTypePrefixLength, contentTypeEnd - contentTypeBegin - contentTypePrefixLength).stripLeadingAndTrailingMatchedCharacters(isHTTPSpace).toString();
&gt; 
&gt; Is there a very-common case where the header string happens to have nothing that need to be trimmed, no &quot;\r\n&quot;, no spaces? I ask because that is the case will become *less* efficient, now copying the String.
&gt; 
&gt; I wish switching to StringView didn’t make the stripLeadingAndTrailingHTTPSpaces() function call *so* much longer stripLeadingAndTrailingMatchedCharacters(isHTTPSpace). On reflection, seems unnecessarily to have &quot;matched characters&quot; in that function name.

I was careful about that and I don&apos;t think that&apos;s true?

Previous code had a |header| String, then was allocating a new temporary String (let&apos;s call it |tmp|), then passing |tmp| to stripLeadingAndTrailingHTTPSpaces(), which in the common case would return |tmp| (because this case is optimized). However, there was still one String allocation for |tmp|, even in this optimized &quot;common&quot; case.

With my code, we convert |header| to a StringView, do all operations on the StringView and then construct a String at the end. Still only one String allocation, and one String allocation is all cases, not just the &quot;common&quot; case.

The one case where the previous code could be more efficient is if both the subString() AND the stripLeadingAndTrailingHTTPSpaces() are NO-OPs. But given the logic in this function, I don&apos;t think it is common for the substring() to return the original String as-is.

Did I miss something?

&gt;&gt; Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpTransceiverBackend.cpp:94
&gt;&gt; +    rtcCodec.name = StringView(codec.mimeType).substring(6).utf8().data();
&gt; 
&gt; Since we are setting a std::string here it would be better if CString knew how to convert to std::string without writing .data(), which makes the code look unnecessarily dangerous, although it’s actually correct and fine. Kind of annoying that we need both CString and std::string in WebKit. Longer term, I wonder how many unique great things CString has; maybe we can drop it and switch to std::string. It uses our faster malloc, but otherwise seems to have no significantly different features from std::string.

The reason std::string is used here is because of libwebrtc here I believe.

I agree it&apos;d be nice if CString would know how to convert by itself though. Will look into that.

&gt;&gt; Source/WebCore/html/HTMLMapElement.cpp:103
&gt;&gt;          m_name = mapName;
&gt; 
&gt; WTFMove(mapName)

Indeed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861949</commentid>
    <comment_count>4</comment_count>
      <attachid>457653</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-04-15 15:58:21 -0700</bug_when>
    <thetext>Comment on attachment 457653
Patch

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

&gt;&gt;&gt; Source/WebCore/Modules/fetch/FetchBodyConsumer.cpp:167
&gt;&gt;&gt; +                contentType = StringView(header).substring(contentTypeBegin + contentTypePrefixLength, contentTypeEnd - contentTypeBegin - contentTypePrefixLength).stripLeadingAndTrailingMatchedCharacters(isHTTPSpace).toString();
&gt;&gt; 
&gt;&gt; Is there a very-common case where the header string happens to have nothing that need to be trimmed, no &quot;\r\n&quot;, no spaces? I ask because that is the case will become *less* efficient, now copying the String.
&gt;&gt; 
&gt;&gt; I wish switching to StringView didn’t make the stripLeadingAndTrailingHTTPSpaces() function call *so* much longer stripLeadingAndTrailingMatchedCharacters(isHTTPSpace). On reflection, seems unnecessarily to have &quot;matched characters&quot; in that function name.
&gt; 
&gt; I was careful about that and I don&apos;t think that&apos;s true?
&gt; 
&gt; Previous code had a |header| String, then was allocating a new temporary String (let&apos;s call it |tmp|), then passing |tmp| to stripLeadingAndTrailingHTTPSpaces(), which in the common case would return |tmp| (because this case is optimized). However, there was still one String allocation for |tmp|, even in this optimized &quot;common&quot; case.
&gt; 
&gt; With my code, we convert |header| to a StringView, do all operations on the StringView and then construct a String at the end. Still only one String allocation, and one String allocation is all cases, not just the &quot;common&quot; case.
&gt; 
&gt; The one case where the previous code could be more efficient is if both the subString() AND the stripLeadingAndTrailingHTTPSpaces() are NO-OPs. But given the logic in this function, I don&apos;t think it is common for the substring() to return the original String as-is.
&gt; 
&gt; Did I miss something?

I didn’t spot why it’s not common for substring to return the original header as-is; I had guessed there might be a common degenerate case. But I trust you on that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861952</commentid>
    <comment_count>5</comment_count>
      <attachid>457653</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-04-15 16:06:21 -0700</bug_when>
    <thetext>Comment on attachment 457653
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/Modules/fetch/FetchBodyConsumer.cpp:167
&gt;&gt;&gt;&gt; +                contentType = StringView(header).substring(contentTypeBegin + contentTypePrefixLength, contentTypeEnd - contentTypeBegin - contentTypePrefixLength).stripLeadingAndTrailingMatchedCharacters(isHTTPSpace).toString();
&gt;&gt;&gt; 
&gt;&gt;&gt; Is there a very-common case where the header string happens to have nothing that need to be trimmed, no &quot;\r\n&quot;, no spaces? I ask because that is the case will become *less* efficient, now copying the String.
&gt;&gt;&gt; 
&gt;&gt;&gt; I wish switching to StringView didn’t make the stripLeadingAndTrailingHTTPSpaces() function call *so* much longer stripLeadingAndTrailingMatchedCharacters(isHTTPSpace). On reflection, seems unnecessarily to have &quot;matched characters&quot; in that function name.
&gt;&gt; 
&gt;&gt; I was careful about that and I don&apos;t think that&apos;s true?
&gt;&gt; 
&gt;&gt; Previous code had a |header| String, then was allocating a new temporary String (let&apos;s call it |tmp|), then passing |tmp| to stripLeadingAndTrailingHTTPSpaces(), which in the common case would return |tmp| (because this case is optimized). However, there was still one String allocation for |tmp|, even in this optimized &quot;common&quot; case.
&gt;&gt; 
&gt;&gt; With my code, we convert |header| to a StringView, do all operations on the StringView and then construct a String at the end. Still only one String allocation, and one String allocation is all cases, not just the &quot;common&quot; case.
&gt;&gt; 
&gt;&gt; The one case where the previous code could be more efficient is if both the subString() AND the stripLeadingAndTrailingHTTPSpaces() are NO-OPs. But given the logic in this function, I don&apos;t think it is common for the substring() to return the original String as-is.
&gt;&gt; 
&gt;&gt; Did I miss something?
&gt; 
&gt; I didn’t spot why it’s not common for substring to return the original header as-is; I had guessed there might be a common degenerate case. But I trust you on that.

The header always starts with:
const char* contentTypeCharacters = &quot;Content-Type:&quot;;

The substring() is meant to get the part of the header line after the &quot;Content-Type:&quot;, thus the contentTypePrefixLength in the substring call. Only way substring() would return the same string is if `contentTypeBegin + contentTypePrefixLength` was 0 and `contentTypeEnd - contentTypeBegin - contentTypePrefixLength` was the length of the whole string (or greater).
contentTypeBegin + contentTypePrefixLength cannot be 0 because contentTypePrefixLength is a constant greater than 0 (13).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861958</commentid>
    <comment_count>6</comment_count>
      <attachid>457653</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-04-15 16:13:50 -0700</bug_when>
    <thetext>Comment on attachment 457653
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/Modules/fetch/FetchBodyConsumer.cpp:167
&gt;&gt;&gt;&gt;&gt; +                contentType = StringView(header).substring(contentTypeBegin + contentTypePrefixLength, contentTypeEnd - contentTypeBegin - contentTypePrefixLength).stripLeadingAndTrailingMatchedCharacters(isHTTPSpace).toString();
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Is there a very-common case where the header string happens to have nothing that need to be trimmed, no &quot;\r\n&quot;, no spaces? I ask because that is the case will become *less* efficient, now copying the String.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; I wish switching to StringView didn’t make the stripLeadingAndTrailingHTTPSpaces() function call *so* much longer stripLeadingAndTrailingMatchedCharacters(isHTTPSpace). On reflection, seems unnecessarily to have &quot;matched characters&quot; in that function name.
&gt;&gt;&gt; 
&gt;&gt;&gt; I was careful about that and I don&apos;t think that&apos;s true?
&gt;&gt;&gt; 
&gt;&gt;&gt; Previous code had a |header| String, then was allocating a new temporary String (let&apos;s call it |tmp|), then passing |tmp| to stripLeadingAndTrailingHTTPSpaces(), which in the common case would return |tmp| (because this case is optimized). However, there was still one String allocation for |tmp|, even in this optimized &quot;common&quot; case.
&gt;&gt;&gt; 
&gt;&gt;&gt; With my code, we convert |header| to a StringView, do all operations on the StringView and then construct a String at the end. Still only one String allocation, and one String allocation is all cases, not just the &quot;common&quot; case.
&gt;&gt;&gt; 
&gt;&gt;&gt; The one case where the previous code could be more efficient is if both the subString() AND the stripLeadingAndTrailingHTTPSpaces() are NO-OPs. But given the logic in this function, I don&apos;t think it is common for the substring() to return the original String as-is.
&gt;&gt;&gt; 
&gt;&gt;&gt; Did I miss something?
&gt;&gt; 
&gt;&gt; I didn’t spot why it’s not common for substring to return the original header as-is; I had guessed there might be a common degenerate case. But I trust you on that.
&gt; 
&gt; The header always starts with:
&gt; const char* contentTypeCharacters = &quot;Content-Type:&quot;;
&gt; 
&gt; The substring() is meant to get the part of the header line after the &quot;Content-Type:&quot;, thus the contentTypePrefixLength in the substring call. Only way substring() would return the same string is if `contentTypeBegin + contentTypePrefixLength` was 0 and `contentTypeEnd - contentTypeBegin - contentTypePrefixLength` was the length of the whole string (or greater).
&gt; contentTypeBegin + contentTypePrefixLength cannot be 0 because contentTypePrefixLength is a constant greater than 0 (13).

Got it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861960</commentid>
    <comment_count>7</comment_count>
      <attachid>457731</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-04-15 16:14:23 -0700</bug_when>
    <thetext>Created attachment 457731
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861976</commentid>
    <comment_count>8</comment_count>
      <attachid>457731</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-04-15 16:54:53 -0700</bug_when>
    <thetext>Comment on attachment 457731
Patch

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

&gt; Source/WTF/wtf/text/CString.h:75
&gt; +    std::string toStdString() const { return m_buffer ? std::string(m_buffer-&gt;data()) : std::string(); }

Why isn’t the function body just:

    { return data(); }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861978</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-04-15 16:57:57 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #8)
&gt; Comment on attachment 457731 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=457731&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/text/CString.h:75
&gt; &gt; +    std::string toStdString() const { return m_buffer ? std::string(m_buffer-&gt;data()) : std::string(); }
&gt; 
&gt; Why isn’t the function body just:
&gt; 
&gt;     { return data(); }

I wasn&apos;t sure it was OK to pass null to std::string(const char*).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861979</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-04-15 16:58:59 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #9)
&gt; (In reply to Darin Adler from comment #8)
&gt; &gt; Comment on attachment 457731 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=457731&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/text/CString.h:75
&gt; &gt; &gt; +    std::string toStdString() const { return m_buffer ? std::string(m_buffer-&gt;data()) : std::string(); }
&gt; &gt; 
&gt; &gt; Why isn’t the function body just:
&gt; &gt; 
&gt; &gt;     { return data(); }
&gt; 
&gt; I wasn&apos;t sure it was OK to pass null to std::string(const char*).

&quot;If s is a null pointer, if n == npos, or if the range specified by [first,last) is not valid, it causes undefined behavior.&quot;
from https://www.cplusplus.com/reference/string/string/string/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1861981</commentid>
    <comment_count>11</comment_count>
      <attachid>457731</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-04-15 17:01:22 -0700</bug_when>
    <thetext>Comment on attachment 457731
Patch

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

&gt;&gt;&gt;&gt; Source/WTF/wtf/text/CString.h:75
&gt;&gt;&gt;&gt; +    std::string toStdString() const { return m_buffer ? std::string(m_buffer-&gt;data()) : std::string(); }
&gt;&gt;&gt; 
&gt;&gt;&gt; Why isn’t the function body just:
&gt;&gt;&gt; 
&gt;&gt;&gt;     { return data(); }
&gt;&gt; 
&gt;&gt; I wasn&apos;t sure it was OK to pass null to std::string(const char*).
&gt; 
&gt; &quot;If s is a null pointer, if n == npos, or if the range specified by [first,last) is not valid, it causes undefined behavior.&quot;
&gt; from https://www.cplusplus.com/reference/string/string/string/

Oh, the old code had that problem, then! It was just passing .data() without checking for null. But maybe that one particular call site knew it could never be null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862024</commentid>
    <comment_count>12</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-04-15 21:45:50 -0700</bug_when>
    <thetext>Committed r292939 (249704@main): &lt;https://commits.webkit.org/249704@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 457731.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1862025</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-04-15 21:46:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/91842417&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457653</attachid>
            <date>2022-04-14 15:48:18 -0700</date>
            <delta_ts>2022-04-15 16:14:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-239356-20220414154818.patch</filename>
            <type>text/plain</type>
            <size>72181</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyODgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
OGYzNWM3NDdhN2E0MWEyMDlhYTI5NDVkM2IzZGRlZmExNGUyZTVkLi5jM2VhNjZjNzkxZWU0NjRl
MGMzMmZhZWRmMjljNzYxOTgyMWQ1ZWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNiBAQAorMjAyMi0wNC0xNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIExldmVyYWdlIFN0cmluZ1ZpZXcgaW4gbW9yZSBwbGFjZXMgdG8gYXZvaWQgc29t
ZSBTdHJpbmcgYWxsb2NhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzOTM1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlsaXRpZXMuY3BwOgorICAg
ICAgICAoSW5zcGVjdG9yOjpDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpnZXRSZWd1bGFyRXhwcmVz
c2lvbk1hdGNoZXNCeUxpbmVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6Q29udGVudFNlYXJjaFV0
aWxpdGllczo6ZmluZE1hZ2ljQ29tbWVudCk6CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25I
ZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6aW52YWxpZFBhcmFtZXRlckluU291cmNlQXBwZW5k
ZXIpOgorICAgICAgICAoSlNDOjppbnZhbGlkUGFyYW1ldGVySW5zdGFuY2VvZlNvdXJjZUFwcGVu
ZGVyKToKKyAgICAgICAgKiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHA6CisgICAgICAg
IChKU0M6OkludGxEYXRlVGltZUZvcm1hdDo6Zm9ybWF0VG9QYXJ0cyBjb25zdCk6CisgICAgICAg
IChKU0M6OkludGxEYXRlVGltZUZvcm1hdDo6Zm9ybWF0UmFuZ2VUb1BhcnRzKToKKyAgICAgICAg
KiBydW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bExpc3RGb3Jt
YXQ6OmZvcm1hdFRvUGFydHMgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE51bWJlckZv
cm1hdC5jcHA6CisgICAgICAgIChKU0M6OkludGxOdW1iZXJGb3JtYXQ6OmZvcm1hdFJhbmdlVG9Q
YXJ0c0ludGVybmFsKToKKyAgICAgICAgKiB0b29scy9GdW5jdGlvbk92ZXJyaWRlcy5jcHA6Cisg
ICAgICAgIChKU0M6OmluaXRpYWxpemVPdmVycmlkZUluZm8pOgorCiAyMDIyLTA0LTE0ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgRHJvcCBpbmVmZmljaWVudCBT
dHJpbmc6OmFwcGVuZCgpIG92ZXJsb2FkcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDdmMGE3ZDYwNmY1NTJmZTU5
NTY0MzhjNzdjYmVjMmMxNDk4MGMxZmMuLmQ5MWEwY2YzODljNTVmNjA2MzdiMjk1ZTIyNGM2ZDQ1
MTA0OTQ0MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5NiBAQAorMjAyMi0wNC0xNCAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIExldmVyYWdlIFN0cmluZ1ZpZXcg
aW4gbW9yZSBwbGFjZXMgdG8gYXZvaWQgc29tZSBTdHJpbmcgYWxsb2NhdGlvbnMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTM1NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy9mZXRjaC9G
ZXRjaEJvZHlDb25zdW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHlDb25zdW1l
cjo6cGFja2FnZUZvcm1EYXRhKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2xpYndl
YnJ0Yy9MaWJXZWJSVENSdHBUcmFuc2NlaXZlckJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6dG9SdHBDb2RlY0NhcGFiaWxpdHkpOgorICAgICAgICAqIE1vZHVsZXMvbW9kZWwtZWxlbWVu
dC9zY2VuZWtpdC9TY2VuZUtpdE1vZGVsTG9hZGVyLm1tOgorICAgICAgICAoV2ViQ29yZTo6bWlt
ZVR5cGVVdGlsaXppbmdGaWxlRXh0ZW5zaW9uT3ZlcnJpZGluZ0ZvckxvY2FsRmlsZXMpOgorICAg
ICAgICAqIE1vZHVsZXMvcGx1Z2lucy9QbHVnaW5SZXBsYWNlbWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6UmVwbGFjZW1lbnRQbHVnaW46OnN1cHBvcnRzRmlsZUV4dGVuc2lvbiBjb25zdCk6Cisg
ICAgICAgICogTW9kdWxlcy9wbHVnaW5zL1lvdVR1YmVQbHVnaW5SZXBsYWNlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQ6OnN1cHBvcnRzRmlsZUV4
dGVuc2lvbik6CisgICAgICAgICogTW9kdWxlcy9wbHVnaW5zL1lvdVR1YmVQbHVnaW5SZXBsYWNl
bWVudC5oOgorICAgICAgICAqIGFuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpLZXlmcmFtZUVmZmVjdDo6c2V0UHNldWRvRWxlbWVudCk6CisgICAgICAgICog
Y3NzL0NvbnRhaW5lclF1ZXJ5UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5l
clF1ZXJ5UGFyc2VyOjpjb25zdW1lUGxhaW5TaXplRmVhdHVyZSk6CisgICAgICAgICogY3NzL3Bh
cnNlci9DU1NTZWxlY3RvclBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lQU5Q
bHVzQik6CisgICAgICAgICogZG9tL1NlY3VyaXR5Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTZWN1cml0eUNvbnRleHQ6OnBhcnNlU2FuZGJveFBvbGljeSk6CisgICAgICAgICogZG9t
L1NlY3VyaXR5Q29udGV4dC5oOgorICAgICAgICAqIGZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdp
c3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0Jsb2JVUkxDb250YWluc051bGxPcmlnaW4p
OgorICAgICAgICAqIGh0bWwvRE9NVG9rZW5MaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRP
TVRva2VuTGlzdDo6dXBkYXRlVG9rZW5zRnJvbUF0dHJpYnV0ZVZhbHVlKToKKyAgICAgICAgKiBo
dG1sL0RPTVRva2VuTGlzdC5oOgorICAgICAgICAqIGh0bWwvSFRNTE1hcEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE1hcEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAg
ICAgKiBodG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBsdWdp
blJlcGxhY2VtZW50Rm9yVHlwZSk6CisgICAgICAgICogaHRtbC90cmFjay9XZWJWVFRQYXJzZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViVlRUUGFyc2VyOjpjaGVja0FuZENyZWF0ZVJlZ2lv
bik6CisgICAgICAgIChXZWJDb3JlOjpXZWJWVFRQYXJzZXI6OmNoZWNrQW5kU3RvcmVSZWdpb24p
OgorICAgICAgICAoV2ViQ29yZTo6V2ViVlRUUGFyc2VyOjpjaGVja1N0eWxlU2hlZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViVlRUUGFyc2VyOjpjaGVja0FuZFN0b3JlU3R5bGVTaGVldCk6Cisg
ICAgICAgICogaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SGFu
ZGxlcjo6b2JzZXJ2ZVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRIYW5k
bGVyOjpvYnNlcnZlQ29tbWVudCk6CisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9pbmxpbmUvSW5saW5lTGluZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
Ojp0b1N0cmluZyk6CisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUv
ZGlzcGxheS9JbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpJbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6OmFwcGVuZFRleHREaXNwbGF5
Qm94KToKKyAgICAgICAgKiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRJbmxpbmVUZXh0Qm94Lmg6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZVRleHRCb3g6OmNvbnRlbnQgY29uc3Qp
OgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6c3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OndyaXRlRGF0YVRvVW5pcXVl
RmlsZUluRGlyZWN0b3J5KToKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2UuaDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRTVkdGb250OjpnZXRTVkdGb250QnlJZCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRTVkdGb250OjptYXliZUluaXRpYWxpemVFeHRlcm5h
bFNWR0ZvbnRFbGVtZW50KToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5o
OgorICAgICAgICAqIHBhZ2UvTG9jYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9jYXRp
b246OnNldEhhc2gpOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQYWdlOjp1c2VyU3R5bGVTaGVldExvY2F0aW9uQ2hhbmdlZCk6CisgICAgICAgICogcGFnZS9V
c2VyQ29udGVudFVSTFBhdHRlcm4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRlbnRV
UkxQYXR0ZXJuOjpwYXJzZSk6CisgICAgICAgICogcGFnZS9Vc2VyQ29udGVudFVSTFBhdHRlcm4u
aDoKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50VVJMUGF0dGVybjo6VXNlckNvbnRlbnRV
UkxQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnR5cGVzRm9yQ29tbW9uRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1JTUVUeXBlUmVnaXN0cnk6Om1lZGlhTUlNRVR5cGVGb3JFeHRlbnNpb24pOgorICAgICAg
ICAqIHBsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jb2Nv
YS9EcmFnSW1hZ2VDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUlj
b25Gb3JDYWNoZWRJbWFnZUZpbGVuYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6bG9hZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpnZXRVbm1hbmds
ZWRJbmZvTG9nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0
VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQ3VlQXR0cmlidXRlcyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnBhcnNlU3RydWN0dXJlZEZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6cGFy
c2VSYW5nZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5oOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpyZXRyaWV2ZUtleVZhbHVlUGFpcnMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUGFy
c2VkQ29udGVudFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFyc2VkQ29udGVudFR5cGU6
OnNldENvbnRlbnRUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZENvbnRl
bnRUeXBlLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6dGV4dFJ1biBjb25zdCk6CisKIDIwMjIt
MDQtMTQgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBEcm9wIGlu
ZWZmaWNpZW50IFN0cmluZzo6YXBwZW5kKCkgb3ZlcmxvYWRzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDVlYzAyNmVi
ODlhZmNmNWRmMzc2Y2RlOWU2ZTY2NGUzMjMxZTU5MGUuLjU5NzAwNGEzMzhmNTA0ZDI4ZDUxNmVk
NTRkNDU3Nzk2Y2ZhNzE1NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjItMDQtMTQg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBMZXZlcmFnZSBTdHJp
bmdWaWV3IGluIG1vcmUgcGxhY2VzIHRvIGF2b2lkIHNvbWUgU3RyaW5nIGFsbG9jYXRpb25zCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzkzNTYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3Jt
L2NvY29hL0ltYWdlQW5hbHlzaXNVdGlsaXRpZXMubW06CisgICAgICAgIChXZWJLaXQ6Om1ha2VU
ZXh0UmVjb2duaXRpb25SZXN1bHQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9NZWRpYVBl
cm1pc3Npb25VdGlsaXRpZXMubW06CisgICAgICAgIChXZWJLaXQ6OnZpc2libGVEb21haW4pOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6UGx1Z2luVmlldzo6cGVyZm9ybUphdmFTY3JpcHRVUkxSZXF1ZXN0KToKKwogMjAyMi0w
NC0xNCAgQWRpdHlhIEtlZXJ0aGkgIDxha2VlcnRoaUBhcHBsZS5jb20+CiAKICAgICAgICAgW2lP
U10gQWRkIHN1cHBvcnQgZm9yIGZpbmQtYW5kLXJlcGxhY2Uga2V5Ym9hcmQgc2hvcnRjdXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCAwYzdjOGZhMzVmOGQ4YzcyNmZmNzMzY2M2MmVm
NTgxN2E0ZjAxZjU2Li5lZDNkZmI0NTQxZWQ0ZDFlNzgwYWQ1Mjc3OGJhOTlhMGY0NDdhNTc2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjItMDQtMTQg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBMZXZlcmFnZSBTdHJp
bmdWaWV3IGluIG1vcmUgcGxhY2VzIHRvIGF2b2lkIHNvbWUgU3RyaW5nIGFsbG9jYXRpb25zCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzkzNTYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1pc2MvV2Vi
VXNlckNvbnRlbnRVUkxQYXR0ZXJuLm1tOgorICAgICAgICAoLVtXZWJVc2VyQ29udGVudFVSTFBh
dHRlcm4gaW5pdFdpdGhQYXR0ZXJuU3RyaW5nOl0pOgorCiAyMDIyLTA0LTEzICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUmVwbGFjZSBjYWxscyB0byBzdWJzdHJp
bmcoMCwgeCkgd2l0aCB0aGUgbW9yZSBjb25jaXNlIGxlZnQoeCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxpdGllcy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlsaXRpZXMuY3Bw
CmluZGV4IDEyNTEwNDM4YjJmYzliNDY4NmE2YzU4N2M1YTg2ZDRlODNhMzkxNDUuLjlhYjk4OWU3
ZmM1NGZmY2Q5MWU5ZGI1YWI2OWZiYTk1M2I3MDliZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxpdGllcy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbGl0aWVzLmNwcApA
QCAtODcsMTEgKzg3LDExIEBAIHN0YXRpYyBWZWN0b3I8c3RkOjpwYWlyPHNpemVfdCwgU3RyaW5n
Pj4gZ2V0UmVndWxhckV4cHJlc3Npb25NYXRjaGVzQnlMaW5lcyhjb25zCiAKICAgICBmb3IgKHNp
emVfdCBsaW5lTnVtYmVyID0gMDsgbGluZU51bWJlciA8IHNpemU7ICsrbGluZU51bWJlcikgewog
ICAgICAgICBzaXplX3QgbmV4dFN0YXJ0ID0gZW5kaW5nc1tsaW5lTnVtYmVyXTsKLSAgICAgICAg
U3RyaW5nIGxpbmUgPSB0ZXh0LnN1YnN0cmluZyhzdGFydCwgbmV4dFN0YXJ0IC0gc3RhcnQpOwor
ICAgICAgICBhdXRvIGxpbmUgPSBTdHJpbmdWaWV3KHRleHQpLnN1YnN0cmluZyhzdGFydCwgbmV4
dFN0YXJ0IC0gc3RhcnQpOwogCiAgICAgICAgIGludCBtYXRjaExlbmd0aDsKICAgICAgICAgaWYg
KHJlZ2V4Lm1hdGNoKGxpbmUsIDAsICZtYXRjaExlbmd0aCkgIT0gLTEpCi0gICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKHN0ZDo6cGFpcjxzaXplX3QsIFN0cmluZz4obGluZU51bWJlciwgbGluZSkp
OworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6OnBhaXIgeyBsaW5lTnVtYmVyLCBsaW5l
LnRvU3RyaW5nKCkgfSk7CiAKICAgICAgICAgc3RhcnQgPSBuZXh0U3RhcnQ7CiAgICAgfQpAQCAt
MTc1LDcgKzE3NSw3IEBAIFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpHZW5lcmljVHlwZXM6
OlNlYXJjaE1hdGNoPj4gc2VhcmNoSW5UZXh0QnlMaW5lcyhjb25zCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotc3RhdGljIFN0cmluZyBmaW5kTWFnaWNDb21tZW50KGNvbnN0IFN0cmluZyYgY29u
dGVudCwgY29uc3QgU3RyaW5nJiBwYXR0ZXJuU3RyaW5nKQorc3RhdGljIFN0cmluZyBmaW5kTWFn
aWNDb21tZW50KGNvbnN0IFN0cmluZyYgY29udGVudCwgQVNDSUlMaXRlcmFsIHBhdHRlcm5TdHJp
bmcpCiB7CiAgICAgaWYgKGNvbnRlbnQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25I
ZWxwZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBl
cnMuY3BwCmluZGV4IDE2MWYzZTY5ZDQzYjg5ZDgzZjU3ZmM3ZmMxZjMxYzBkMjJhMDQ4ZWQuLjRk
NWU1NGIwYTA4NGQxMzlkNjM5YjVkZjM3MmQ2YjAyZTMwYzA3YTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCkBAIC0yMDgsNyAr
MjA4LDcgQEAgc3RhdGljIFN0cmluZyBpbnZhbGlkUGFyYW1ldGVySW5Tb3VyY2VBcHBlbmRlcihj
b25zdCBTdHJpbmcmIG9yaWdpbmFsTWVzc2FnZSwgU3QKICAgICAgICAgcmV0dXJuIG1ha2VTdHJp
bmcob3JpZ2luYWxNZXNzYWdlLCAiIChldmFsdWF0aW5nICciLCBzb3VyY2VUZXh0LCAiJykiKTsK
IAogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgaW5MZW5ndGggPSAyOwotICAgIFN0cmlu
ZyByaWdodEhhbmRTaWRlID0gc291cmNlVGV4dC5zdWJzdHJpbmcoaW5JbmRleCArIGluTGVuZ3Ro
KS50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkuc2ltcGxpZnlXaGl0ZVNwYWNlKCk7CisgICAgU3Ry
aW5nVmlldyByaWdodEhhbmRTaWRlID0gc291cmNlVGV4dC5zdWJzdHJpbmcoaW5JbmRleCArIGlu
TGVuZ3RoKS5zdHJpcExlYWRpbmdBbmRUcmFpbGluZ01hdGNoZWRDaGFyYWN0ZXJzKGlzU3BhY2VP
ck5ld2xpbmUpOwogICAgIHJldHVybiBtYWtlU3RyaW5nKHJpZ2h0SGFuZFNpZGUsICIgaXMgbm90
IGFuIE9iamVjdC4gKGV2YWx1YXRpbmcgJyIsIHNvdXJjZVRleHQsICInKSIpOwogfQogCkBAIC0y
MjcsNyArMjI3LDcgQEAgaW5saW5lIFN0cmluZyBpbnZhbGlkUGFyYW1ldGVySW5zdGFuY2VvZlNv
dXJjZUFwcGVuZGVyKGNvbnN0IFN0cmluZyYgY29udGVudCwgY28KICAgICAgICAgcmV0dXJuIG1h
a2VTdHJpbmcob3JpZ2luYWxNZXNzYWdlLCAiIChldmFsdWF0aW5nICciLCBzb3VyY2VUZXh0LCAi
JykiKTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgaW5zdGFuY2VvZkxlbmd0aCA9
IDEwOwotICAgIFN0cmluZyByaWdodEhhbmRTaWRlID0gc291cmNlVGV4dC5zdWJzdHJpbmcoaW5z
dGFuY2VvZkluZGV4ICsgaW5zdGFuY2VvZkxlbmd0aCkudG9TdHJpbmdXaXRob3V0Q29weWluZygp
LnNpbXBsaWZ5V2hpdGVTcGFjZSgpOworICAgIFN0cmluZ1ZpZXcgcmlnaHRIYW5kU2lkZSA9IHNv
dXJjZVRleHQuc3Vic3RyaW5nKGluc3RhbmNlb2ZJbmRleCArIGluc3RhbmNlb2ZMZW5ndGgpLnN0
cmlwTGVhZGluZ0FuZFRyYWlsaW5nTWF0Y2hlZENoYXJhY3RlcnMoaXNTcGFjZU9yTmV3bGluZSk7
CiAgICAgcmV0dXJuIG1ha2VTdHJpbmcocmlnaHRIYW5kU2lkZSwgY29udGVudCwgIi4gKGV2YWx1
YXRpbmcgJyIsIHNvdXJjZVRleHQsICInKSIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAppbmRleCAyYjI3Yzg4MjBm
YmM5MjJiOTM1NGU2ZTA3MGRmMjM5NDI4MGUxNTU3Li40N2NjODQ2YjQxMjA2N2UyNWZiOTE4MTIw
MGI2M2IxZjYxMzcyOTg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAKQEAgLTEzODEsNyArMTM4MSw3IEBAIEpTVmFsdWUg
SW50bERhdGVUaW1lRm9ybWF0Ojpmb3JtYXRUb1BhcnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGRvdWJsZSB2CiAgICAgaWYgKCFwYXJ0cykKICAgICAgICAgcmV0dXJuIHRocm93T3V0
T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKIAotICAgIGF1dG8gcmVzdWx0U3Ry
aW5nID0gU3RyaW5nKHJlc3VsdCk7CisgICAgU3RyaW5nVmlldyByZXN1bHRTdHJpbmdWaWV3KHJl
c3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkpOwogICAgIGF1dG8gbGl0ZXJhbFN0cmluZyA9IGpz
Tm9udHJpdmlhbFN0cmluZyh2bSwgImxpdGVyYWwiX3MpOwogCiAgICAgaW50MzJfdCByZXN1bHRM
ZW5ndGggPSByZXN1bHQuc2l6ZSgpOwpAQCAtMTM5NCw3ICsxMzk0LDcgQEAgSlNWYWx1ZSBJbnRs
RGF0ZVRpbWVGb3JtYXQ6OmZvcm1hdFRvUGFydHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgZG91YmxlIHYKICAgICAgICAgICAgIGJlZ2luSW5kZXggPSBlbmRJbmRleCA9IHJlc3VsdExl
bmd0aDsKIAogICAgICAgICBpZiAocHJldmlvdXNFbmRJbmRleCA8IGJlZ2luSW5kZXgpIHsKLSAg
ICAgICAgICAgIGF1dG8gdmFsdWUgPSBqc1N0cmluZyh2bSwgcmVzdWx0U3RyaW5nLnN1YnN0cmlu
ZyhwcmV2aW91c0VuZEluZGV4LCBiZWdpbkluZGV4IC0gcHJldmlvdXNFbmRJbmRleCkpOworICAg
ICAgICAgICAgYXV0byB2YWx1ZSA9IGpzU3RyaW5nKHZtLCByZXN1bHRTdHJpbmdWaWV3LnN1YnN0
cmluZyhwcmV2aW91c0VuZEluZGV4LCBiZWdpbkluZGV4IC0gcHJldmlvdXNFbmRJbmRleCkpOwog
ICAgICAgICAgICAgSlNPYmplY3QqIHBhcnQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxP
YmplY3QpOwogICAgICAgICAgICAgcGFydC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT50eXBlLCBsaXRlcmFsU3RyaW5nKTsKICAgICAgICAgICAgIHBhcnQtPnB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+dmFsdWUsIHZhbHVlKTsKQEAgLTE0MDcsNyArMTQwNyw3IEBAIEpT
VmFsdWUgSW50bERhdGVUaW1lRm9ybWF0Ojpmb3JtYXRUb1BhcnRzKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGRvdWJsZSB2CiAKICAgICAgICAgaWYgKGZpZWxkVHlwZSA+PSAwKSB7CiAg
ICAgICAgICAgICBhdXRvIHR5cGUgPSBqc05vbnRyaXZpYWxTdHJpbmcodm0sIHBhcnRUeXBlU3Ry
aW5nKFVEYXRlRm9ybWF0RmllbGQoZmllbGRUeXBlKSkpOwotICAgICAgICAgICAgYXV0byB2YWx1
ZSA9IGpzU3RyaW5nKHZtLCByZXN1bHRTdHJpbmcuc3Vic3RyaW5nKGJlZ2luSW5kZXgsIGVuZElu
ZGV4IC0gYmVnaW5JbmRleCkpOworICAgICAgICAgICAgYXV0byB2YWx1ZSA9IGpzU3RyaW5nKHZt
LCByZXN1bHRTdHJpbmdWaWV3LnN1YnN0cmluZyhiZWdpbkluZGV4LCBlbmRJbmRleCAtIGJlZ2lu
SW5kZXgpKTsKICAgICAgICAgICAgIEpTT2JqZWN0KiBwYXJ0ID0gY29uc3RydWN0RW1wdHlPYmpl
Y3QoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAgIHBhcnQtPnB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+dHlwZSwgdHlwZSk7CiAgICAgICAgICAgICBwYXJ0LT5wdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlLCB2YWx1ZSk7CkBAIC0xNzE2LDcgKzE3MTYsNyBAQCBK
U1ZhbHVlIEludGxEYXRlVGltZUZvcm1hdDo6Zm9ybWF0UmFuZ2VUb1BhcnRzKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGRvdQogICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCAiRmFpbGVkIHRvIGZvcm1hdCBkYXRlIGludGVydmFsIl9zKTsKICAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9Ci0gICAgU3RyaW5nIHJlc3VsdFN0cmluZyhmb3JtYXR0ZWRTdHJp
bmdQb2ludGVyLCBmb3JtYXR0ZWRTdHJpbmdMZW5ndGgpOworICAgIFN0cmluZ1ZpZXcgcmVzdWx0
U3RyaW5nVmlldyhmb3JtYXR0ZWRTdHJpbmdQb2ludGVyLCBmb3JtYXR0ZWRTdHJpbmdMZW5ndGgp
OwogCiAgICAgLy8gV2UgY2FyZSBtdWx0aXBsZSBjYXRlZ29yaWVzIChVRklFTERfQ0FURUdPUllf
REFURSBhbmQgVUZJRUxEX0NBVEVHT1JZX0RBVEVfSU5URVJWQUxfU1BBTikuCiAgICAgLy8gU28g
d2UgZG8gbm90IGNvbnN0cmFpbnQgaXRlcmF0b3IuCkBAIC0xNzQyLDcgKzE3NDIsNyBAQCBKU1Zh
bHVlIEludGxEYXRlVGltZUZvcm1hdDo6Zm9ybWF0UmFuZ2VUb1BhcnRzKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGRvdQogICAgICAgICAgICAgcmV0dXJuIHNoYXJlZFN0cmluZzsKICAg
ICAgICAgfTsKIAotICAgICAgICBhdXRvIHZhbHVlID0ganNTdHJpbmcodm0sIHJlc3VsdFN0cmlu
Zy5zdWJzdHJpbmcoYmVnaW5JbmRleCwgbGVuZ3RoKSk7CisgICAgICAgIGF1dG8gdmFsdWUgPSBq
c1N0cmluZyh2bSwgcmVzdWx0U3RyaW5nVmlldy5zdWJzdHJpbmcoYmVnaW5JbmRleCwgbGVuZ3Ro
KSk7CiAgICAgICAgIEpTT2JqZWN0KiBwYXJ0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFs
T2JqZWN0KTsKICAgICAgICAgcGFydC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT50
eXBlLCB0eXBlKTsKICAgICAgICAgcGFydC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT52YWx1ZSwgdmFsdWUpOwpAQCAtMTc1MCw3ICsxNzUwLDcgQEAgSlNWYWx1ZSBJbnRsRGF0ZVRp
bWVGb3JtYXQ6OmZvcm1hdFJhbmdlVG9QYXJ0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBkb3UKICAgICAgICAgcmV0dXJuIHBhcnQ7CiAgICAgfTsKIAotICAgIGludDMyX3QgcmVzdWx0
TGVuZ3RoID0gcmVzdWx0U3RyaW5nLmxlbmd0aCgpOworICAgIGludDMyX3QgcmVzdWx0TGVuZ3Ro
ID0gcmVzdWx0U3RyaW5nVmlldy5sZW5ndGgoKTsKICAgICBpbnQzMl90IHByZXZpb3VzRW5kSW5k
ZXggPSAwOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGJvb2wgbmV4dCA9IHVmbXR2YWxf
bmV4dFBvc2l0aW9uKGZvcm1hdHRlZFZhbHVlLCBpdGVyYXRvci5nZXQoKSwgJnN0YXR1cyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZvcm1hdC5jcHAKaW5k
ZXggZDNiZTYzZDRjZGMwM2Q2MDUxMjVmZWRiMTViZjg1YTg2MjU3OGY3Zi4uN2RmOTUwZDVmMzc4
ODIxNWRiOTllNTU4MDM0YzQxNTMxNmVjZmRkOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcApAQCAtMjY4LDcgKzI2OCw3IEBAIEpTVmFs
dWUgSW50bExpc3RGb3JtYXQ6OmZvcm1hdFRvUGFydHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBsaXN0CiAgICAgY29uc3QgVUNoYXIqIGZvcm1hdHRlZFN0cmluZ1BvaW50
ZXIgPSB1Zm10dmFsX2dldFN0cmluZyhmb3JtYXR0ZWRWYWx1ZSwgJmZvcm1hdHRlZFN0cmluZ0xl
bmd0aCwgJnN0YXR1cyk7CiAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQogICAgICAgICByZXR1
cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImZhaWxlZCB0byBmb3JtYXQg
bGlzdCBvZiBzdHJpbmdzIl9zKTsKLSAgICBTdHJpbmcgcmVzdWx0U3RyaW5nKGZvcm1hdHRlZFN0
cmluZ1BvaW50ZXIsIGZvcm1hdHRlZFN0cmluZ0xlbmd0aCk7CisgICAgU3RyaW5nVmlldyByZXN1
bHRTdHJpbmdWaWV3KGZvcm1hdHRlZFN0cmluZ1BvaW50ZXIsIGZvcm1hdHRlZFN0cmluZ0xlbmd0
aCk7CiAKICAgICBhdXRvIGl0ZXJhdG9yID0gc3RkOjp1bmlxdWVfcHRyPFVDb25zdHJhaW5lZEZp
ZWxkUG9zaXRpb24sIElDVURlbGV0ZXI8dWNmcG9zX2Nsb3NlPj4odWNmcG9zX29wZW4oJnN0YXR1
cykpOwogICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKQEAgLTI4OCw3ICsyODgsNyBAQCBKU1Zh
bHVlIEludGxMaXN0Rm9ybWF0Ojpmb3JtYXRUb1BhcnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgbGlzdAogICAgICAgICByZXR1cm4gcGFydDsKICAgICB9OwogCi0gICAg
aW50MzJfdCByZXN1bHRMZW5ndGggPSByZXN1bHRTdHJpbmcubGVuZ3RoKCk7CisgICAgaW50MzJf
dCByZXN1bHRMZW5ndGggPSByZXN1bHRTdHJpbmdWaWV3Lmxlbmd0aCgpOwogICAgIGludDMyX3Qg
cHJldmlvdXNFbmRJbmRleCA9IDA7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgYm9vbCBu
ZXh0ID0gdWZtdHZhbF9uZXh0UG9zaXRpb24oZm9ybWF0dGVkVmFsdWUsIGl0ZXJhdG9yLmdldCgp
LCAmc3RhdHVzKTsKQEAgLTMwNCwyMSArMzA0LDIxIEBAIEpTVmFsdWUgSW50bExpc3RGb3JtYXQ6
OmZvcm1hdFRvUGFydHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBsaXN0
CiAgICAgICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
ImZhaWxlZCB0byBmb3JtYXQgbGlzdCBvZiBzdHJpbmdzIl9zKTsKIAogICAgICAgICBpZiAocHJl
dmlvdXNFbmRJbmRleCA8IGJlZ2luSW5kZXgpIHsKLSAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBq
c1N0cmluZyh2bSwgcmVzdWx0U3RyaW5nLnN1YnN0cmluZyhwcmV2aW91c0VuZEluZGV4LCBiZWdp
bkluZGV4IC0gcHJldmlvdXNFbmRJbmRleCkpOworICAgICAgICAgICAgYXV0byB2YWx1ZSA9IGpz
U3RyaW5nKHZtLCByZXN1bHRTdHJpbmdWaWV3LnN1YnN0cmluZyhwcmV2aW91c0VuZEluZGV4LCBi
ZWdpbkluZGV4IC0gcHJldmlvdXNFbmRJbmRleCkpOwogICAgICAgICAgICAgSlNPYmplY3QqIHBh
cnQgPSBjcmVhdGVQYXJ0KGxpdGVyYWxTdHJpbmcsIHZhbHVlKTsKICAgICAgICAgICAgIHBhcnRz
LT5wdXNoKGdsb2JhbE9iamVjdCwgcGFydCk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogICAgICAgICB9CiAgICAgICAgIHByZXZpb3VzRW5kSW5kZXggPSBl
bmRJbmRleDsKIAotICAgICAgICBhdXRvIHZhbHVlID0ganNTdHJpbmcodm0sIHJlc3VsdFN0cmlu
Zy5zdWJzdHJpbmcoYmVnaW5JbmRleCwgZW5kSW5kZXggLSBiZWdpbkluZGV4KSk7CisgICAgICAg
IGF1dG8gdmFsdWUgPSBqc1N0cmluZyh2bSwgcmVzdWx0U3RyaW5nVmlldy5zdWJzdHJpbmcoYmVn
aW5JbmRleCwgZW5kSW5kZXggLSBiZWdpbkluZGV4KSk7CiAgICAgICAgIEpTT2JqZWN0KiBwYXJ0
ID0gY3JlYXRlUGFydChlbGVtZW50U3RyaW5nLCB2YWx1ZSk7CiAgICAgICAgIHBhcnRzLT5wdXNo
KGdsb2JhbE9iamVjdCwgcGFydCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CiAgICAgfQogCiAgICAgaWYgKHByZXZpb3VzRW5kSW5kZXggPCByZXN1bHRMZW5ndGgp
IHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IGpzU3RyaW5nKHZtLCByZXN1bHRTdHJpbmcuc3Vic3Ry
aW5nKHByZXZpb3VzRW5kSW5kZXgsIHJlc3VsdExlbmd0aCAtIHByZXZpb3VzRW5kSW5kZXgpKTsK
KyAgICAgICAgYXV0byB2YWx1ZSA9IGpzU3RyaW5nKHZtLCByZXN1bHRTdHJpbmdWaWV3LnN1YnN0
cmluZyhwcmV2aW91c0VuZEluZGV4LCByZXN1bHRMZW5ndGggLSBwcmV2aW91c0VuZEluZGV4KSk7
CiAgICAgICAgIEpTT2JqZWN0KiBwYXJ0ID0gY3JlYXRlUGFydChsaXRlcmFsU3RyaW5nLCB2YWx1
ZSk7CiAgICAgICAgIHBhcnRzLT5wdXNoKGdsb2JhbE9iamVjdCwgcGFydCk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCmluZGV4IDMyODBkYWMyZDc1ZGQ0ODM2
MGNmOGMzNDNiMmRkNThmMmI3ODkxNWIuLjkwNjRjOTlhYWJkZWNiNjI2YTQwNDM5MGVhZjQ5ZjQx
MjdhYzNlNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxO
dW1iZXJGb3JtYXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxO
dW1iZXJGb3JtYXQuY3BwCkBAIC0xMDMzLDcgKzEwMzMsNyBAQCB2b2lkIEludGxOdW1iZXJGb3Jt
YXQ6OmZvcm1hdFJhbmdlVG9QYXJ0c0ludGVybmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsCiAgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJGYWlsZWQg
dG8gZm9ybWF0IG51bWJlciByYW5nZSJfcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
U3RyaW5nIHJlc3VsdFN0cmluZyhmb3JtYXR0ZWRTdHJpbmdQb2ludGVyLCBmb3JtYXR0ZWRTdHJp
bmdMZW5ndGgpOworICAgIFN0cmluZ1ZpZXcgcmVzdWx0U3RyaW5nVmlldyhmb3JtYXR0ZWRTdHJp
bmdQb2ludGVyLCBmb3JtYXR0ZWRTdHJpbmdMZW5ndGgpOwogCiAgICAgLy8gV2UgY2FyZSBtdWx0
aXBsZSBjYXRlZ29yaWVzIChVRklFTERfQ0FURUdPUllfREFURSBhbmQgVUZJRUxEX0NBVEVHT1JZ
X0RBVEVfSU5URVJWQUxfU1BBTikuCiAgICAgLy8gU28gd2UgZG8gbm90IGNvbnN0cmFpbnQgaXRl
cmF0b3IuCkBAIC0xMTE4LDcgKzExMTgsNyBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmZvcm1h
dFJhbmdlVG9QYXJ0c0ludGVybmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAg
ICAgICAgICByZXR1cm4gc2hhcmVkU3RyaW5nOwogICAgICAgICB9OwogCi0gICAgICAgIGF1dG8g
dmFsdWUgPSBqc1N0cmluZyh2bSwgcmVzdWx0U3RyaW5nLnN1YnN0cmluZyhiZWdpbkluZGV4LCBs
ZW5ndGgpKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IGpzU3RyaW5nKHZtLCByZXN1bHRTdHJpbmdW
aWV3LnN1YnN0cmluZyhiZWdpbkluZGV4LCBsZW5ndGgpKTsKICAgICAgICAgSlNPYmplY3QqIHBh
cnQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxPYmplY3QpOwogICAgICAgICBwYXJ0LT5w
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnR5cGUsIHR5cGUpOwogICAgICAgICBwYXJ0
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlLCB2YWx1ZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvRnVuY3Rpb25PdmVycmlkZXMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0Z1bmN0aW9uT3ZlcnJpZGVzLmNwcAppbmRleCBi
ZTFmMjhmYTU0NGJmODg0MDAzN2ZlNDgxNDg1NTc4YjAyOGYzNmI5Li5iOWM5MzIxNTZlZTc3MmM2
MzZkNTAyMTIxNDM0NWM4NDVjNzVjYTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvdG9vbHMvRnVuY3Rpb25PdmVycmlkZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9GdW5jdGlvbk92ZXJyaWRlcy5jcHAKQEAgLTEzMyw5ICsxMzMsOSBAQCBzdGF0aWMg
dm9pZCBpbml0aWFsaXplT3ZlcnJpZGVJbmZvKGNvbnN0IFNvdXJjZUNvZGUmIG9yaWdDb2RlLCBj
b25zdCBTdHJpbmcmIG5ldwogICAgIHVuc2lnbmVkIG9yaWdGdW5jdGlvblN0YXJ0ID0gb3JpZ1By
b3ZpZGVyU3RyLnJldmVyc2VGaW5kKCJmdW5jdGlvbiIsIG9yaWdTdGFydCk7CiAgICAgdW5zaWdu
ZWQgb3JpZ0JyYWNlU3RhcnQgPSBvcmlnUHJvdmlkZXJTdHIuZmluZCgneycsIG9yaWdTdGFydCk7
CiAgICAgdW5zaWduZWQgaGVhZGVyTGVuZ3RoID0gb3JpZ0JyYWNlU3RhcnQgLSBvcmlnRnVuY3Rp
b25TdGFydDsKLSAgICBTdHJpbmcgb3JpZ0hlYWRlciA9IG9yaWdQcm92aWRlclN0ci5zdWJzdHJp
bmcob3JpZ0Z1bmN0aW9uU3RhcnQsIGhlYWRlckxlbmd0aCk7CisgICAgYXV0byBvcmlnSGVhZGVy
VmlldyA9IFN0cmluZ1ZpZXcob3JpZ1Byb3ZpZGVyU3RyKS5zdWJzdHJpbmcob3JpZ0Z1bmN0aW9u
U3RhcnQsIGhlYWRlckxlbmd0aCk7CiAKLSAgICBTdHJpbmcgbmV3UHJvdmlkZXJTdHJpbmcgPSBt
YWtlU3RyaW5nKG9yaWdIZWFkZXIsIG5ld0JvZHkpOworICAgIFN0cmluZyBuZXdQcm92aWRlclN0
cmluZyA9IG1ha2VTdHJpbmcob3JpZ0hlYWRlclZpZXcsIG5ld0JvZHkpOwogCiAgICAgYXV0byBv
dmVycmlkZGVuID0gIjxvdmVycmlkZGVuPiJfczsKICAgICBVUkwgdXJsKHsgfSwgb3ZlcnJpZGRl
bik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keUNv
bnN1bWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5Q29uc3Vt
ZXIuY3BwCmluZGV4IDAzZTAxODJkMzkyMTc4YWM2N2E0NmE1NTk0NzBmZjY1NzJkOTRlNzQuLjk1
MWExZTNkZmZjNzMzMGYxYmQ1ZDRlODU2YzIxNWFkZTdjOTY0NDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5Q29uc3VtZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5Q29uc3VtZXIuY3BwCkBAIC0xNjQsNyAr
MTY0LDcgQEAgUmVmUHRyPERPTUZvcm1EYXRhPiBGZXRjaEJvZHlDb25zdW1lcjo6cGFja2FnZUZv
cm1EYXRhKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGMKICAgICAgICAgICAgIHNpemVfdCBjb250
ZW50VHlwZUJlZ2luID0gaGVhZGVyLmZpbmQoY29udGVudFR5cGVDaGFyYWN0ZXJzKTsKICAgICAg
ICAgICAgIGlmIChjb250ZW50VHlwZUJlZ2luICE9IG5vdEZvdW5kKSB7CiAgICAgICAgICAgICAg
ICAgc2l6ZV90IGNvbnRlbnRUeXBlRW5kID0gaGVhZGVyLmZpbmQoIlxyXG4iLCBjb250ZW50VHlw
ZUJlZ2luKTsKLSAgICAgICAgICAgICAgICBjb250ZW50VHlwZSA9IHN0cmlwTGVhZGluZ0FuZFRy
YWlsaW5nSFRUUFNwYWNlcyhoZWFkZXIuc3Vic3RyaW5nKGNvbnRlbnRUeXBlQmVnaW4gKyBjb250
ZW50VHlwZVByZWZpeExlbmd0aCwgY29udGVudFR5cGVFbmQgLSBjb250ZW50VHlwZUJlZ2luIC0g
Y29udGVudFR5cGVQcmVmaXhMZW5ndGgpKTsKKyAgICAgICAgICAgICAgICBjb250ZW50VHlwZSA9
IFN0cmluZ1ZpZXcoaGVhZGVyKS5zdWJzdHJpbmcoY29udGVudFR5cGVCZWdpbiArIGNvbnRlbnRU
eXBlUHJlZml4TGVuZ3RoLCBjb250ZW50VHlwZUVuZCAtIGNvbnRlbnRUeXBlQmVnaW4gLSBjb250
ZW50VHlwZVByZWZpeExlbmd0aCkuc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdNYXRjaGVkQ2hhcmFj
dGVycyhpc0hUVFBTcGFjZSkudG9TdHJpbmcoKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgZm9ybS5hcHBlbmQobmFtZSwgRmlsZTo6Y3JlYXRlKGNvbnRleHQsIEJsb2I6OmNyZWF0ZShj
b250ZXh0LCBWZWN0b3IgeyBib2R5QmVnaW4sIGJvZHlMZW5ndGggfSwgQmxvYjo6bm9ybWFsaXpl
ZENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlKSkuZ2V0KCksIGZpbGVuYW1lKS5nZXQoKSwgZmlsZW5h
bWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3
ZWJydGMvTGliV2ViUlRDUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1J0cFRyYW5zY2VpdmVyQmFj
a2VuZC5jcHAKaW5kZXggOTQ5MzdmMDRkYjhjM2I0ZGQ1YmQ4MWY1NDNmZjEwMGY0ZjdmZWI0MC4u
MjcxYWI2M2NjOTI0NDZlMWU1MmVjNjVmYmNlMzRjZTFiMzc5NzM5YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDUnRwVHJh
bnNjZWl2ZXJCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENSdHBUcmFuc2NlaXZlckJhY2tlbmQuY3BwCkBAIC05MSw3
ICs5MSw3IEBAIHN0YXRpYyBpbmxpbmUgRXhjZXB0aW9uT3I8d2VicnRjOjpSdHBDb2RlY0NhcGFi
aWxpdHk+IHRvUnRwQ29kZWNDYXBhYmlsaXR5KGNvbnN0CiAgICAgZWxzZQogICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZE1vZGlmaWNhdGlvbkVycm9yLCAiUlRDUnRwQ29kZWNDYXBh
YmlsaXR5IGJhZCBtaW1lVHlwZSJfcyB9OwogCi0gICAgcnRjQ29kZWMubmFtZSA9IGNvZGVjLm1p
bWVUeXBlLnN1YnN0cmluZyg2KS51dGY4KCkuZGF0YSgpOworICAgIHJ0Y0NvZGVjLm5hbWUgPSBT
dHJpbmdWaWV3KGNvZGVjLm1pbWVUeXBlKS5zdWJzdHJpbmcoNikudXRmOCgpLmRhdGEoKTsKICAg
ICBydGNDb2RlYy5jbG9ja19yYXRlID0gY29kZWMuY2xvY2tSYXRlOwogICAgIGlmIChjb2RlYy5j
aGFubmVscykKICAgICAgICAgcnRjQ29kZWMubnVtX2NoYW5uZWxzID0gKmNvZGVjLmNoYW5uZWxz
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tb2RlbC1lbGVtZW50L3NjZW5l
a2l0L1NjZW5lS2l0TW9kZWxMb2FkZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21vZGVs
LWVsZW1lbnQvc2NlbmVraXQvU2NlbmVLaXRNb2RlbExvYWRlci5tbQppbmRleCAxYTliYjFkNWUy
NzNjZjBlNjk5NjNhNmQzOTUzNGFlZGZkY2NiZDY4Li40OTg5N2Y4NjcyMTY3Y2E1MjFiZGUyM2E5
ZjJhYzlkZDA2M2Q1MjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21vZGVs
LWVsZW1lbnQvc2NlbmVraXQvU2NlbmVLaXRNb2RlbExvYWRlci5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21vZGVsLWVsZW1lbnQvc2NlbmVraXQvU2NlbmVLaXRNb2RlbExvYWRlci5t
bQpAQCAtNzksNyArNzksNyBAQCBzdGF0aWMgU3RyaW5nIG1pbWVUeXBlVXRpbGl6aW5nRmlsZUV4
dGVuc2lvbk92ZXJyaWRpbmdGb3JMb2NhbEZpbGVzKGNvbnN0IE1vZGVsJgogICAgICAgICBpZiAo
cG9zaXRpb24gIT0gV1RGOjpub3RGb3VuZCkgewogICAgICAgICAgICAgYXV0byBleHRlbnNpb24g
PSBsYXN0UGF0aENvbXBvbmVudC5zdWJzdHJpbmcocG9zaXRpb24gKyAxKTsKIAotICAgICAgICAg
ICAgcmV0dXJuIE1JTUVUeXBlUmVnaXN0cnk6Om1lZGlhTUlNRVR5cGVGb3JFeHRlbnNpb24oZXh0
ZW5zaW9uLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgcmV0dXJuIE1JTUVUeXBlUmVnaXN0cnk6
Om1lZGlhTUlNRVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKICAgICAgICAgfQogICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1BsdWdpblJlcGxh
Y2VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUGx1Z2luUmVwbGFjZW1l
bnQuaAppbmRleCAyZjRhNDJmZTdhODRlMDcyNzdiZTM2NTBlNDI5Y2MxYTUwYTI5N2M3Li43YzAz
YmUyOTEzZjRkZGVjMmZhYmJmNWRjMDdjNWU1YmY0OTM2NDFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUGx1Z2luUmVwbGFjZW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUGx1Z2luUmVwbGFjZW1lbnQuaApAQCAtNTUsNyArNTUs
NyBAQCBwdWJsaWM6CiAKIHR5cGVkZWYgUmVmPFBsdWdpblJlcGxhY2VtZW50PiAoKkNyZWF0ZVBs
dWdpblJlcGxhY2VtZW50KShIVE1MUGx1Z0luRWxlbWVudCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOwogdHlwZWRl
ZiBib29sICgqUGx1Z2luUmVwbGFjZW1lbnRTdXBwb3J0c1R5cGUpKGNvbnN0IFN0cmluZyYpOwot
dHlwZWRlZiBib29sICgqUGx1Z2luUmVwbGFjZW1lbnRTdXBwb3J0c0ZpbGVFeHRlbnNpb24pKGNv
bnN0IFN0cmluZyYpOwordHlwZWRlZiBib29sICgqUGx1Z2luUmVwbGFjZW1lbnRTdXBwb3J0c0Zp
bGVFeHRlbnNpb24pKFN0cmluZ1ZpZXcpOwogdHlwZWRlZiBib29sICgqUGx1Z2luUmVwbGFjZW1l
bnRTdXBwb3J0c1VSTCkoY29uc3QgVVJMJik7CiB0eXBlZGVmIGJvb2wgKCpQbHVnaW5SZXBsYWNl
bWVudEVuYWJsZWRGb3JTZXR0aW5ncykoY29uc3QgU2V0dGluZ3MmKTsKIApAQCAtODEsNyArODEs
NyBAQCBwdWJsaWM6CiAKICAgICBSZWY8UGx1Z2luUmVwbGFjZW1lbnQ+IGNyZWF0ZShIVE1MUGx1
Z0luRWxlbWVudCYgZWxlbWVudCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykgY29uc3QgeyByZXR1cm4gbV9jb25zdHJ1
Y3RvcihlbGVtZW50LCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7IH0KICAgICBib29sIHN1cHBv
cnRzVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdCB7IHJldHVybiBtX3N1cHBvcnRz
VHlwZShtaW1lVHlwZSk7IH0KLSAgICBib29sIHN1cHBvcnRzRmlsZUV4dGVuc2lvbihjb25zdCBT
dHJpbmcmIGV4dGVuc2lvbikgY29uc3QgeyByZXR1cm4gbV9zdXBwb3J0c0ZpbGVFeHRlbnNpb24o
ZXh0ZW5zaW9uKTsgfQorICAgIGJvb2wgc3VwcG9ydHNGaWxlRXh0ZW5zaW9uKFN0cmluZ1ZpZXcg
ZXh0ZW5zaW9uKSBjb25zdCB7IHJldHVybiBtX3N1cHBvcnRzRmlsZUV4dGVuc2lvbihleHRlbnNp
b24pOyB9CiAgICAgYm9vbCBzdXBwb3J0c1VSTChjb25zdCBVUkwmIHVybCkgY29uc3QgeyByZXR1
cm4gbV9zdXBwb3J0c1VSTCh1cmwpOyB9CiAgICAgYm9vbCBpc0VuYWJsZWRCeVNldHRpbmdzKGNv
bnN0IFNldHRpbmdzJiBzZXR0aW5ncykgY29uc3QgeyByZXR1cm4gbV9pc0VuYWJsZWRCeVNldHRp
bmdzKHNldHRpbmdzKTsgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9w
bHVnaW5zL1lvdVR1YmVQbHVnaW5SZXBsYWNlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3BsdWdpbnMvWW91VHViZVBsdWdpblJlcGxhY2VtZW50LmNwcAppbmRleCBjYmFmNDZmMGVl
NWZlN2U0MDkwNWE0OTZkYWQ4N2U0ZTlmYTlhYTJjLi43ODA4NDE0YWIwNTQ0YjMzNDY4NjRkYjQw
OGYyNmQzN2I3NDhmMWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdp
bnMvWW91VHViZVBsdWdpblJlcGxhY2VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3BsdWdpbnMvWW91VHViZVBsdWdpblJlcGxhY2VtZW50LmNwcApAQCAtNTQsNyArNTQsNyBA
QCBib29sIFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudDo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKQogICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShtaW1lVHlwZSwgImFwcGxpY2F0aW9uL2Z1dHVyZXNwbGFzaCIpOwogfQogCi1ib29sIFlvdVR1
YmVQbHVnaW5SZXBsYWNlbWVudDo6c3VwcG9ydHNGaWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYg
ZXh0ZW5zaW9uKQorYm9vbCBZb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQ6OnN1cHBvcnRzRmlsZUV4
dGVuc2lvbihTdHJpbmdWaWV3IGV4dGVuc2lvbikKIHsKICAgICByZXR1cm4gZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UoZXh0ZW5zaW9uLCAic3BsIikgfHwgZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UoZXh0ZW5zaW9uLCAic3dmIik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3BsdWdpbnMvWW91VHViZVBsdWdpblJlcGxhY2VtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvWW91VHViZVBsdWdpblJlcGxhY2VtZW50LmgKaW5kZXgg
MTcyZmZhMmY1YzgzYjEwYmNjMTI4YjNlYzE3Njk2NjVkNTRkMTJkMC4uZTA0MjJmNGRhOTZhMzA0
NDBiNmRkOTIyYjAxOTVkNDczZTI3NzA3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9wbHVnaW5zL1lvdVR1YmVQbHVnaW5SZXBsYWNlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvcGx1Z2lucy9Zb3VUdWJlUGx1Z2luUmVwbGFjZW1lbnQuaApAQCAtNDUsNyAr
NDUsNyBAQCBwcml2YXRlOgogICAgIFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudChIVE1MUGx1Z0lu
RWxlbWVudCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOwogICAgIHN0YXRpYyBSZWY8UGx1Z2luUmVwbGFjZW1lbnQ+
IGNyZWF0ZShIVE1MUGx1Z0luRWxlbWVudCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5h
bWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOwogICAgIHN0YXRpYyBib29s
IHN1cHBvcnRzTUlNRVR5cGUoY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIGJvb2wgc3VwcG9y
dHNGaWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBib29sIHN1cHBvcnRz
RmlsZUV4dGVuc2lvbihTdHJpbmdWaWV3KTsKICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1VSTChj
b25zdCBVUkwmKTsKICAgICBzdGF0aWMgYm9vbCBpc0VuYWJsZWRCeVNldHRpbmdzKGNvbnN0IFNl
dHRpbmdzJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFt
ZUVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3Bw
CmluZGV4IDFmMzU4ZDY2NTc2YTMyOThkNGE4ZjFiYTM3NjcxOGQwMmU2ZDI0ZDUuLmYxODUxYjA5
N2VmMGU5ZmQ1NTViZjgxMjEyZTlmMTc2NGFhOWZmZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYW5p
bWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcApAQCAtMTE4NSw3ICsxMTg1LDcgQEAgRXhjZXB0aW9u
T3I8dm9pZD4gS2V5ZnJhbWVFZmZlY3Q6OnNldFBzZXVkb0VsZW1lbnQoY29uc3QgU3RyaW5nJiBw
c2V1ZG9FbGVtZW50KQogICAgICAgICBhdXRvIGlzTGVnYWN5ID0gcHNldWRvRWxlbWVudCA9PSAi
OmJlZm9yZSIgfHwgcHNldWRvRWxlbWVudCA9PSAiOmFmdGVyIiB8fCBwc2V1ZG9FbGVtZW50ID09
ICI6Zmlyc3QtbGV0dGVyIiB8fCBwc2V1ZG9FbGVtZW50ID09ICI6Zmlyc3QtbGluZSI7CiAgICAg
ICAgIGlmICghaXNMZWdhY3kgJiYgIXBzZXVkb0VsZW1lbnQuc3RhcnRzV2l0aCgiOjoiKSkKICAg
ICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OwotICAgICAgICBhdXRv
IHBzZXVkb1R5cGUgPSBDU1NTZWxlY3Rvcjo6cGFyc2VQc2V1ZG9FbGVtZW50VHlwZShwc2V1ZG9F
bGVtZW50LnN1YnN0cmluZyhpc0xlZ2FjeSA/IDEgOiAyKSk7CisgICAgICAgIGF1dG8gcHNldWRv
VHlwZSA9IENTU1NlbGVjdG9yOjpwYXJzZVBzZXVkb0VsZW1lbnRUeXBlKFN0cmluZ1ZpZXcocHNl
dWRvRWxlbWVudCkuc3Vic3RyaW5nKGlzTGVnYWN5ID8gMSA6IDIpKTsKICAgICAgICAgaWYgKHBz
ZXVkb1R5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRVbmtub3duIHx8IHBzZXVkb1R5
cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRXZWJLaXRDdXN0b20pCiAgICAgICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAgICAgICAgcHNldWRvSWQgPSBD
U1NTZWxlY3Rvcjo6cHNldWRvSWQocHNldWRvVHlwZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ29udGFpbmVyUXVlcnlQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0Nv
bnRhaW5lclF1ZXJ5UGFyc2VyLmNwcAppbmRleCA0YmNhZmMyMzIzYWU3N2U0MWM3ODU1ODZhOGYx
NTg1NzJjYmQ2OWU3Li5iZDQ5MzE3YzFlZWVlYjcxZWQ4YzlhZGE3MGRjOTgzNjQ1OWY1MDFmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ29udGFpbmVyUXVlcnlQYXJzZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Db250YWluZXJRdWVyeVBhcnNlci5jcHAKQEAgLTE4MSw5
ICsxODEsOSBAQCBzdGQ6Om9wdGlvbmFsPENROjpTaXplRmVhdHVyZT4gQ29udGFpbmVyUXVlcnlQ
YXJzZXI6OmNvbnN1bWVQbGFpblNpemVGZWF0dXJlKENTUwogICAgICAgICBpZiAobmFtZS5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICBpZiAobmFtZS5zdGFydHNX
aXRoKCJtaW4tIikpCi0gICAgICAgICAgICByZXR1cm4geyBuYW1lLnN1YnN0cmluZyg0KSwgQ1E6
OkNvbXBhcmlzb25PcGVyYXRvcjo6R3JlYXRlclRoYW5PckVxdWFsIH07CisgICAgICAgICAgICBy
ZXR1cm4geyBTdHJpbmdWaWV3KG5hbWUpLnN1YnN0cmluZyg0KS50b0F0b21TdHJpbmcoKSwgQ1E6
OkNvbXBhcmlzb25PcGVyYXRvcjo6R3JlYXRlclRoYW5PckVxdWFsIH07CiAgICAgICAgIGlmIChu
YW1lLnN0YXJ0c1dpdGgoIm1heC0iKSkKLSAgICAgICAgICAgIHJldHVybiB7IG5hbWUuc3Vic3Ry
aW5nKDQpLCBDUTo6Q29tcGFyaXNvbk9wZXJhdG9yOjpMZXNzVGhhbk9yRXF1YWwgfTsKKyAgICAg
ICAgICAgIHJldHVybiB7IFN0cmluZ1ZpZXcobmFtZSkuc3Vic3RyaW5nKDQpLnRvQXRvbVN0cmlu
ZygpLCBDUTo6Q29tcGFyaXNvbk9wZXJhdG9yOjpMZXNzVGhhbk9yRXF1YWwgfTsKIAogICAgICAg
ICByZXR1cm4geyBuYW1lLCBDUTo6Q29tcGFyaXNvbk9wZXJhdG9yOjpFcXVhbCB9OwogICAgIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1NlbGVjdG9yUGFyc2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTU2VsZWN0b3JQYXJzZXIuY3BwCmlu
ZGV4IDYzNWJlNzZkNzYxYjc2NjBkNzE4YTNmYTE1MmQ2MGRjNWY0MTNhNTQuLjMyZTMxNmRjNDEy
ZjNiNWMwN2QwOThiYTkyYTRkOGQ5OTk1ZjQ4NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTU2VsZWN0b3JQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTU2VsZWN0b3JQYXJzZXIuY3BwCkBAIC05MzIsMjEgKzkzMiwyMSBAQCBzdGF0
aWMgYm9vbCBjb25zdW1lQU5QbHVzQihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgc3RkOjpw
YWlyPGludCwgaW50PiYgcmVzdQogCiAgICAgLy8gVGhlICduJyB3aWxsIGVuZCB1cCBhcyBwYXJ0
IG9mIGFuIGlkZW50IG9yIGRpbWVuc2lvbi4gRm9yIGEgdmFsaWQgPGFuK2I+LAogICAgIC8vIHRo
aXMgd2lsbCBzdG9yZSBhIHN0cmluZyBvZiB0aGUgZm9ybSAnbicsICduLScsIG9yICduLTEyMycu
Ci0gICAgU3RyaW5nIG5TdHJpbmc7CisgICAgU3RyaW5nVmlldyBuU3RyaW5nOwogCiAgICAgaWYg
KHRva2VuLnR5cGUoKSA9PSBEZWxpbWl0ZXJUb2tlbiAmJiB0b2tlbi5kZWxpbWl0ZXIoKSA9PSAn
KycgJiYgcmFuZ2UucGVlaygpLnR5cGUoKSA9PSBJZGVudFRva2VuKSB7CiAgICAgICAgIHJlc3Vs
dC5maXJzdCA9IDE7Ci0gICAgICAgIG5TdHJpbmcgPSByYW5nZS5jb25zdW1lKCkudmFsdWUoKS50
b1N0cmluZygpOworICAgICAgICBuU3RyaW5nID0gcmFuZ2UuY29uc3VtZSgpLnZhbHVlKCk7CiAg
ICAgfSBlbHNlIGlmICh0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4gJiYgdG9rZW4ubnVt
ZXJpY1ZhbHVlVHlwZSgpID09IEludGVnZXJWYWx1ZVR5cGUpIHsKICAgICAgICAgcmVzdWx0LmZp
cnN0ID0gdG9rZW4ubnVtZXJpY1ZhbHVlKCk7Ci0gICAgICAgIG5TdHJpbmcgPSB0b2tlbi51bml0
U3RyaW5nKCkudG9TdHJpbmcoKTsKKyAgICAgICAgblN0cmluZyA9IHRva2VuLnVuaXRTdHJpbmco
KTsKICAgICB9IGVsc2UgaWYgKHRva2VuLnR5cGUoKSA9PSBJZGVudFRva2VuKSB7CiAgICAgICAg
IGlmICh0b2tlbi52YWx1ZSgpWzBdID09ICctJykgewogICAgICAgICAgICAgcmVzdWx0LmZpcnN0
ID0gLTE7Ci0gICAgICAgICAgICBuU3RyaW5nID0gdG9rZW4udmFsdWUoKS5zdWJzdHJpbmcoMSku
dG9TdHJpbmcoKTsKKyAgICAgICAgICAgIG5TdHJpbmcgPSB0b2tlbi52YWx1ZSgpLnN1YnN0cmlu
ZygxKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHJlc3VsdC5maXJzdCA9IDE7Ci0g
ICAgICAgICAgICBuU3RyaW5nID0gdG9rZW4udmFsdWUoKS50b1N0cmluZygpOworICAgICAgICAg
ICAgblN0cmluZyA9IHRva2VuLnZhbHVlKCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTk1OCw3
ICs5NTgsNyBAQCBzdGF0aWMgYm9vbCBjb25zdW1lQU5QbHVzQihDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgc3RkOjpwYWlyPGludCwgaW50PiYgcmVzdQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpZiAoblN0cmluZy5sZW5ndGgoKSA+IDIpIHsKLSAgICAgICAgYXV0byBwYXJzZWRO
dW1iZXIgPSBwYXJzZUludGVnZXI8aW50PihTdHJpbmdWaWV3IHsgblN0cmluZyB9LnN1YnN0cmlu
ZygxKSk7CisgICAgICAgIGF1dG8gcGFyc2VkTnVtYmVyID0gcGFyc2VJbnRlZ2VyPGludD4oblN0
cmluZy5zdWJzdHJpbmcoMSkpOwogICAgICAgICByZXN1bHQuc2Vjb25kID0gcGFyc2VkTnVtYmVy
LnZhbHVlX29yKDApOwogICAgICAgICByZXR1cm4gcGFyc2VkTnVtYmVyLmhhc192YWx1ZSgpOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWN1cml0eUNvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL1NlY3VyaXR5Q29udGV4dC5jcHAKaW5kZXggMWM2OTRlYjA0
NTk5ZjIxODdkZmM0YzA4MjUwOWUyYjhmMDJhODUxZi4uYTNkMjQ5ZmE5ZGE5ZjVjOTA0MzYzZjE0
OTdkMzNiODA3MzZiZWNkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NlY3VyaXR5
Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NlY3VyaXR5Q29udGV4dC5jcHAK
QEAgLTk1LDcgKzk1LDcgQEAgYm9vbCBTZWN1cml0eUNvbnRleHQ6OmlzU3VwcG9ydGVkU2FuZGJv
eFBvbGljeShTdHJpbmdWaWV3IHBvbGljeSkKIH0KIAogLy8gS2VlcCBTZWN1cml0eUNvbnRleHQ6
OmlzU3VwcG9ydGVkU2FuZGJveFBvbGljeSgpIGluIHN5bmMgd2hlbiB1cGRhdGluZyB0aGlzIGZ1
bmN0aW9uLgotU2FuZGJveEZsYWdzIFNlY3VyaXR5Q29udGV4dDo6cGFyc2VTYW5kYm94UG9saWN5
KGNvbnN0IFN0cmluZyYgcG9saWN5LCBTdHJpbmcmIGludmFsaWRUb2tlbnNFcnJvck1lc3NhZ2Up
CitTYW5kYm94RmxhZ3MgU2VjdXJpdHlDb250ZXh0OjpwYXJzZVNhbmRib3hQb2xpY3koU3RyaW5n
VmlldyBwb2xpY3ksIFN0cmluZyYgaW52YWxpZFRva2Vuc0Vycm9yTWVzc2FnZSkKIHsKICAgICAv
LyBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS90aGUtaWZyYW1lLWVsZW1lbnQuaHRtbCNhdHRy
LWlmcmFtZS1zYW5kYm94CiAgICAgLy8gUGFyc2UgdGhlIHVub3JkZXJlZCBzZXQgb2YgdW5pcXVl
IHNwYWNlLXNlcGFyYXRlZCB0b2tlbnMuCkBAIC0xMTQsNyArMTE0LDcgQEAgU2FuZGJveEZsYWdz
IFNlY3VyaXR5Q29udGV4dDo6cGFyc2VTYW5kYm94UG9saWN5KGNvbnN0IFN0cmluZyYgcG9saWN5
LCBTdHJpbmcmIGkKICAgICAgICAgICAgICsrZW5kOwogCiAgICAgICAgIC8vIFR1cm4gb2ZmIHRo
ZSBjb3JyZXNwb25kaW5nIHNhbmRib3ggZmxhZyBpZiBpdCdzIHNldCBhcyAiYWxsb3dlZCIuCi0g
ICAgICAgIFN0cmluZyBzYW5kYm94VG9rZW4gPSBwb2xpY3kuc3Vic3RyaW5nKHN0YXJ0LCBlbmQg
LSBzdGFydCk7CisgICAgICAgIGF1dG8gc2FuZGJveFRva2VuID0gcG9saWN5LnN1YnN0cmluZyhz
dGFydCwgZW5kIC0gc3RhcnQpOwogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2Uoc2FuZGJveFRva2VuLCAiYWxsb3ctc2FtZS1vcmlnaW4iKSkKICAgICAgICAgICAgIGZs
YWdzICY9IH5TYW5kYm94T3JpZ2luOwogICAgICAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShzYW5kYm94VG9rZW4sICJhbGxvdy1mb3JtcyIpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1NlY3VyaXR5Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvZG9t
L1NlY3VyaXR5Q29udGV4dC5oCmluZGV4IDM4MmZhZmRmOWNlNDUzYWU4NjU1NTRhNTBlMThjYzk3
YWU3NWY1MzguLmMxNzJiMjE3YTI4NTI5MjI2MDFmZDZkMjM3ZDAwMTM1MDc0OWQ5MjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWN1cml0eUNvbnRleHQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2VjdXJpdHlDb250ZXh0LmgKQEAgLTEwMCw3ICsxMDAsNyBAQCBwdWJsaWM6
CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBj
b25zdDsKIAotICAgIHN0YXRpYyBTYW5kYm94RmxhZ3MgcGFyc2VTYW5kYm94UG9saWN5KGNvbnN0
IFN0cmluZyYgcG9saWN5LCBTdHJpbmcmIGludmFsaWRUb2tlbnNFcnJvck1lc3NhZ2UpOworICAg
IHN0YXRpYyBTYW5kYm94RmxhZ3MgcGFyc2VTYW5kYm94UG9saWN5KFN0cmluZ1ZpZXcgcG9saWN5
LCBTdHJpbmcmIGludmFsaWRUb2tlbnNFcnJvck1lc3NhZ2UpOwogICAgIHN0YXRpYyBib29sIGlz
U3VwcG9ydGVkU2FuZGJveFBvbGljeShTdHJpbmdWaWV3KTsKIAogICAgIGVudW0gTWl4ZWRDb250
ZW50VHlwZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVC
bG9iUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJl
Z2lzdHJ5LmNwcAppbmRleCA2MmQxYjM0OGU0OWQ3YTYyYzlkNTBhMjdhYTY3OWMxNTYwMjcwYzk5
Li43Mjc0NjIyY2Q4N2NhZWMyMDA2ODRhZDRjMTMyOTEyMzQzYmY3MmNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAKQEAgLTk2LDcg
Kzk2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzQmxvYlVSTENvbnRhaW5zTnVsbE9yaWdpbihj
b25zdCBVUkwmIHVybCkKICAgICBBU1NFUlQodXJsLnByb3RvY29sSXNCbG9iKCkpOwogICAgIHVu
c2lnbmVkIHN0YXJ0SW5kZXggPSB1cmwucGF0aFN0YXJ0KCk7CiAgICAgdW5zaWduZWQgZW5kSW5k
ZXggPSB1cmwucGF0aEFmdGVyTGFzdFNsYXNoKCk7Ci0gICAgcmV0dXJuIHVybC5zdHJpbmcoKS5z
dWJzdHJpbmcoc3RhcnRJbmRleCwgZW5kSW5kZXggLSBzdGFydEluZGV4IC0gMSkgPT0gIm51bGwi
OworICAgIHJldHVybiBTdHJpbmdWaWV3KHVybC5zdHJpbmcoKSkuc3Vic3RyaW5nKHN0YXJ0SW5k
ZXgsIGVuZEluZGV4IC0gc3RhcnRJbmRleCAtIDEpID09ICJudWxsIjsKIH0KIAogdm9pZCBUaHJl
YWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwoU2VjdXJpdHlPcmlnaW4qIG9yaWdp
biwgUG9saWN5Q29udGFpbmVyJiYgcG9saWN5Q29udGFpbmVyLCBjb25zdCBVUkwmIHVybCwgY29u
c3QgVVJMJiBzcmNVUkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0RPTVRva2Vu
TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RPTVRva2VuTGlzdC5jcHAKaW5kZXggNDAz
OGI2OWJhMjA3MzkwOGI0Y2NlYzMzM2E4ZjcyZmFlNmMwZjEyOS4uZjYwZTYyNTE4NzZhMDYxZThl
ZjgyOWFlMTkxNTYzNTRmYTRhNGI3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9E
T01Ub2tlbkxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRE9NVG9rZW5MaXN0LmNw
cApAQCAtMjIwLDcgKzIyMCw3IEBAIHZvaWQgRE9NVG9rZW5MaXN0OjpzZXRWYWx1ZShjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgIG1fZWxlbWVudC5zZXRBdHRyaWJ1dGUobV9hdHRyaWJ1dGVOYW1l
LCB2YWx1ZSk7CiB9CiAKLXZvaWQgRE9NVG9rZW5MaXN0Ojp1cGRhdGVUb2tlbnNGcm9tQXR0cmli
dXRlVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgRE9NVG9rZW5MaXN0Ojp1cGRhdGVU
b2tlbnNGcm9tQXR0cmlidXRlVmFsdWUoU3RyaW5nVmlldyB2YWx1ZSkKIHsKICAgICAvLyBDbGVh
ciB0b2tlbnMgYnV0IG5vdCBjYXBhY2l0eS4KICAgICBtX3Rva2Vucy5zaHJpbmsoMCk7CkBAIC0y
MzYsMTAgKzIzNiwxMSBAQCB2b2lkIERPTVRva2VuTGlzdDo6dXBkYXRlVG9rZW5zRnJvbUF0dHJp
YnV0ZVZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgIHdoaWxlIChlbmQgPCB2YWx1
ZS5sZW5ndGgoKSAmJiAhaXNIVE1MU3BhY2UodmFsdWVbZW5kXSkpCiAgICAgICAgICAgICArK2Vu
ZDsKIAotICAgICAgICBBdG9tU3RyaW5nIHRva2VuID0gdmFsdWUuc3Vic3RyaW5nKHN0YXJ0LCBl
bmQgLSBzdGFydCk7Ci0gICAgICAgIGlmICghYWRkZWRUb2tlbnMuY29udGFpbnModG9rZW4pKSB7
CisgICAgICAgIGF1dG8gdG9rZW5WaWV3ID0gdmFsdWUuc3Vic3RyaW5nKHN0YXJ0LCBlbmQgLSBz
dGFydCk7CisgICAgICAgIGlmICghYWRkZWRUb2tlbnMuY29udGFpbnM8U3RyaW5nVmlld0hhc2hU
cmFuc2xhdG9yPih0b2tlblZpZXcpKSB7CisgICAgICAgICAgICBhdXRvIHRva2VuID0gdG9rZW5W
aWV3LnRvQXRvbVN0cmluZygpOwogICAgICAgICAgICAgbV90b2tlbnMuYXBwZW5kKHRva2VuKTsK
LSAgICAgICAgICAgIGFkZGVkVG9rZW5zLmFkZCh0b2tlbik7CisgICAgICAgICAgICBhZGRlZFRv
a2Vucy5hZGQoV1RGTW92ZSh0b2tlbikpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhcnQgPSBl
bmQgKyAxOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9ET01Ub2tlbkxpc3QuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvRE9NVG9rZW5MaXN0LmgKaW5kZXggYWJlNWYxNDM3ZjFjYzUy
Mjc1Mjg1YTU4MzRlN2U0YWJjYWFkNjg3Yi4uM2E4M2IxN2FiMWI3YmQ3NzdiOGQ3YjE4MjRhNzli
M2ExMjUzYzExNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9ET01Ub2tlbkxpc3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RPTVRva2VuTGlzdC5oCkBAIC01OSw3ICs1OSw3
IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSgp
IGNvbnN0OwogCiBwcml2YXRlOgotICAgIHZvaWQgdXBkYXRlVG9rZW5zRnJvbUF0dHJpYnV0ZVZh
bHVlKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgdXBkYXRlVG9rZW5zRnJvbUF0dHJpYnV0ZVZh
bHVlKFN0cmluZ1ZpZXcpOwogICAgIHZvaWQgdXBkYXRlQXNzb2NpYXRlZEF0dHJpYnV0ZUZyb21U
b2tlbnMoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxBdG9tU3RyaW5nPiYgdG9rZW5z
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCmluZGV4IGYwMDkxNDdlYTMz
YTc5MzAwYmVjNGE5NGYzYTZhMjk0MGE1NDJlZjEuLmEzNWMyYmM1NGU4NTY0ZDZhMzUwMDRjMTI1
MzRkMWU2NDVkMTlmOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCkBA
IC05OSw3ICs5OSw3IEBAIHZvaWQgSFRNTE1hcEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcmCiAgICAgICAgICAgICB0cmVl
U2NvcGUoKS5yZW1vdmVJbWFnZU1hcCgqdGhpcyk7CiAgICAgICAgIFN0cmluZyBtYXBOYW1lID0g
dmFsdWU7CiAgICAgICAgIGlmIChtYXBOYW1lWzBdID09ICcjJykKLSAgICAgICAgICAgIG1hcE5h
bWUgPSBtYXBOYW1lLnN1YnN0cmluZygxKTsKKyAgICAgICAgICAgIG1hcE5hbWUgPSBTdHJpbmdW
aWV3KG1hcE5hbWUpLnN1YnN0cmluZygxKS50b0F0b21TdHJpbmcoKTsKICAgICAgICAgbV9uYW1l
ID0gbWFwTmFtZTsKICAgICAgICAgaWYgKGlzQ29ubmVjdGVkKCkpCiAgICAgICAgICAgICB0cmVl
U2NvcGUoKS5hZGRJbWFnZU1hcCgqdGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJ
bkVsZW1lbnQuY3BwCmluZGV4IGI0OGQwYTU2ZDVlNTcwNGM3MTZlZGE1MmFlODU0Y2JlNTFhMWU3
ZWQuLjBmMTNmMDFhMGZmYmJmNzM4NjdjM2I4ZDk3YmY2OTMxNjQyMTcwNWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCkBAIC0zMDgsMTEgKzMwOCwxMSBAQCBz
dGF0aWMgUmVwbGFjZW1lbnRQbHVnaW4qIHBsdWdpblJlcGxhY2VtZW50Rm9yVHlwZShjb25zdCBV
UkwmIHVybCwgY29uc3QgU3RyaW5nJgogICAgIGlmIChyZXBsYWNlbWVudHMuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFN0cmluZyBleHRlbnNpb247CisgICAgU3Ry
aW5nVmlldyBleHRlbnNpb247CiAgICAgYXV0byBsYXN0UGF0aENvbXBvbmVudCA9IHVybC5sYXN0
UGF0aENvbXBvbmVudCgpOwogICAgIHNpemVfdCBkb3RPZmZzZXQgPSBsYXN0UGF0aENvbXBvbmVu
dC5yZXZlcnNlRmluZCgnLicpOwogICAgIGlmIChkb3RPZmZzZXQgIT0gbm90Rm91bmQpCi0gICAg
ICAgIGV4dGVuc2lvbiA9IGxhc3RQYXRoQ29tcG9uZW50LnN1YnN0cmluZyhkb3RPZmZzZXQgKyAx
KS50b1N0cmluZygpOworICAgICAgICBleHRlbnNpb24gPSBsYXN0UGF0aENvbXBvbmVudC5zdWJz
dHJpbmcoZG90T2Zmc2V0ICsgMSk7CiAKICAgICBTdHJpbmcgdHlwZSA9IG1pbWVUeXBlOwogICAg
IGlmICh0eXBlLmlzRW1wdHkoKSAmJiB1cmwucHJvdG9jb2xJc0RhdGEoKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmNwcAppbmRleCBhNjAzYzA4MWU5MGI0NmQ1MzRl
OTAzZWVlY2NhMDY0Zjc2M2U4Y2FkLi44ZmQxYzMzNWIwNjY3MDg1MTQ5OTNlY2M5ZDdiZTRjMGNl
ZTlmYjI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFBhcnNl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuY3BwCkBA
IC0zMTUsNyArMzE1LDcgQEAgV2ViVlRUUGFyc2VyOjpQYXJzZVN0YXRlIFdlYlZUVFBhcnNlcjo6
Y29sbGVjdFN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBsaW5lKQogICAgIHJldHVybiBTdHlsZTsK
IH0KIAotYm9vbCBXZWJWVFRQYXJzZXI6OmNoZWNrQW5kQ3JlYXRlUmVnaW9uKGNvbnN0IFN0cmlu
ZyYgbGluZSkKK2Jvb2wgV2ViVlRUUGFyc2VyOjpjaGVja0FuZENyZWF0ZVJlZ2lvbihTdHJpbmdW
aWV3IGxpbmUpCiB7CiAgICAgaWYgKG1fcHJldmlvdXNMaW5lLmNvbnRhaW5zKCItLT4iKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzI5LDcgKzMyOSw3IEBAIGJvb2wgV2ViVlRUUGFyc2Vy
OjpjaGVja0FuZENyZWF0ZVJlZ2lvbihjb25zdCBTdHJpbmcmIGxpbmUpCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1ib29sIFdlYlZUVFBhcnNlcjo6Y2hlY2tBbmRTdG9yZVJlZ2lvbihjb25zdCBT
dHJpbmcmIGxpbmUpCitib29sIFdlYlZUVFBhcnNlcjo6Y2hlY2tBbmRTdG9yZVJlZ2lvbihTdHJp
bmdWaWV3IGxpbmUpCiB7CiAgICAgaWYgKCFsaW5lLmlzRW1wdHkoKSAmJiAhbGluZS5jb250YWlu
cygiLS0+IikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM0NCw3ICszNDQsNyBAQCBib29s
IFdlYlZUVFBhcnNlcjo6Y2hlY2tBbmRTdG9yZVJlZ2lvbihjb25zdCBTdHJpbmcmIGxpbmUpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgV2ViVlRUUGFyc2VyOjpjaGVja1N0eWxlU2hlZXQo
Y29uc3QgU3RyaW5nJiBsaW5lKQorYm9vbCBXZWJWVFRQYXJzZXI6OmNoZWNrU3R5bGVTaGVldChT
dHJpbmdWaWV3IGxpbmUpCiB7CiAgICAgaWYgKG1fcHJldmlvdXNMaW5lLmNvbnRhaW5zKCItLT4i
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzU3LDcgKzM1Nyw3IEBAIGJvb2wgV2ViVlRU
UGFyc2VyOjpjaGVja1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBsaW5lKQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotYm9vbCBXZWJWVFRQYXJzZXI6OmNoZWNrQW5kU3RvcmVTdHlsZVNoZWV0KGNv
bnN0IFN0cmluZyYgbGluZSkKK2Jvb2wgV2ViVlRUUGFyc2VyOjpjaGVja0FuZFN0b3JlU3R5bGVT
aGVldChTdHJpbmdWaWV3IGxpbmUpCiB7CiAgICAgaWYgKCFsaW5lLmlzRW1wdHkoKSAmJiAhbGlu
ZS5jb250YWlucygiLS0+IikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1dlYlZUVFBhcnNlci5oCmluZGV4IDJmYjMwOTA1NDI0ZmNlOWZmMjM5MTNkYjNl
OTc0YzEyM2E0NDY2M2EuLjE2ZWFkY2I3N2U4Zjc1N2NiNGUzYjg5MGU1NmE4OGU2YjY1NGUyOWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuaApAQCAtMTcwLDEwICsx
NzAsMTAgQEAgcHJpdmF0ZToKICAgICBQYXJzZVN0YXRlIGNvbGxlY3RXZWJWVFRCbG9jayhjb25z
dCBTdHJpbmcmKTsKICAgICBQYXJzZVN0YXRlIGNoZWNrQW5kUmVjb3ZlckN1ZShjb25zdCBTdHJp
bmcmIGxpbmUpOwogICAgIFBhcnNlU3RhdGUgY29sbGVjdFN0eWxlU2hlZXQoY29uc3QgU3RyaW5n
Jik7Ci0gICAgYm9vbCBjaGVja0FuZENyZWF0ZVJlZ2lvbihjb25zdCBTdHJpbmcmIGxpbmUpOwot
ICAgIGJvb2wgY2hlY2tBbmRTdG9yZVJlZ2lvbihjb25zdCBTdHJpbmcmIGxpbmUpOwotICAgIGJv
b2wgY2hlY2tTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgbGluZSk7Ci0gICAgYm9vbCBjaGVja0Fu
ZFN0b3JlU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIGxpbmUpOworICAgIGJvb2wgY2hlY2tBbmRD
cmVhdGVSZWdpb24oU3RyaW5nVmlldyBsaW5lKTsKKyAgICBib29sIGNoZWNrQW5kU3RvcmVSZWdp
b24oU3RyaW5nVmlldyBsaW5lKTsKKyAgICBib29sIGNoZWNrU3R5bGVTaGVldChTdHJpbmdWaWV3
IGxpbmUpOworICAgIGJvb2wgY2hlY2tBbmRTdG9yZVN0eWxlU2hlZXQoU3RyaW5nVmlldyBsaW5l
KTsKIAogICAgIHZvaWQgY3JlYXRlTmV3Q3VlKCk7CiAgICAgdm9pZCByZXNldEN1ZVZhbHVlcygp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hl
ZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3Bw
CmluZGV4IDA5MDE2ZTVjNzExZDU2NTEzZTM1YzM4NGQ0ZGQzMDAyZGQzNDY3MmYuLmU4MDc5NjFl
NzZlZmIxOThmOTI3Njg1MGI4ODk1NTdhMWEyNjlhZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAgLTM1MiwxNCArMzUyLDE0IEBA
IHZvaWQgU3R5bGVTaGVldEhhbmRsZXI6Om9ic2VydmVQcm9wZXJ0eSh1bnNpZ25lZCBzdGFydE9m
ZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0CiAgICAgICAgICsrZW5kT2Zmc2V0OwogICAgIAogICAg
IEFTU0VSVChzdGFydE9mZnNldCA8IGVuZE9mZnNldCk7Ci0gICAgU3RyaW5nIHByb3BlcnR5U3Ry
aW5nID0gbV9wYXJzZWRUZXh0LnN1YnN0cmluZyhzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3Rh
cnRPZmZzZXQpLnN0cmlwV2hpdGVTcGFjZSgpOworICAgIFN0cmluZ1ZpZXcgcHJvcGVydHlTdHJp
bmcgPSBTdHJpbmdWaWV3KG1fcGFyc2VkVGV4dCkuc3Vic3RyaW5nKHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQgLSBzdGFydE9mZnNldCkuc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdNYXRjaGVkQ2hhcmFj
dGVycyhpc1NwYWNlT3JOZXdsaW5lKTsKICAgICBpZiAocHJvcGVydHlTdHJpbmcuZW5kc1dpdGgo
JzsnKSkKICAgICAgICAgcHJvcGVydHlTdHJpbmcgPSBwcm9wZXJ0eVN0cmluZy5sZWZ0KHByb3Bl
cnR5U3RyaW5nLmxlbmd0aCgpIC0gMSk7CiAgICAgc2l6ZV90IGNvbG9uSW5kZXggPSBwcm9wZXJ0
eVN0cmluZy5maW5kKCc6Jyk7CiAgICAgQVNTRVJUKGNvbG9uSW5kZXggIT0gbm90Rm91bmQpOwog
Ci0gICAgU3RyaW5nIG5hbWUgPSBwcm9wZXJ0eVN0cmluZy5sZWZ0KGNvbG9uSW5kZXgpLnN0cmlw
V2hpdGVTcGFjZSgpOwotICAgIFN0cmluZyB2YWx1ZSA9IHByb3BlcnR5U3RyaW5nLnN1YnN0cmlu
Zyhjb2xvbkluZGV4ICsgMSwgcHJvcGVydHlTdHJpbmcubGVuZ3RoKCkpLnN0cmlwV2hpdGVTcGFj
ZSgpOworICAgIFN0cmluZyBuYW1lID0gcHJvcGVydHlTdHJpbmcubGVmdChjb2xvbkluZGV4KS5z
dHJpcExlYWRpbmdBbmRUcmFpbGluZ01hdGNoZWRDaGFyYWN0ZXJzKGlzU3BhY2VPck5ld2xpbmUp
LnRvU3RyaW5nKCk7CisgICAgU3RyaW5nIHZhbHVlID0gcHJvcGVydHlTdHJpbmcuc3Vic3RyaW5n
KGNvbG9uSW5kZXggKyAxLCBwcm9wZXJ0eVN0cmluZy5sZW5ndGgoKSkuc3RyaXBMZWFkaW5nQW5k
VHJhaWxpbmdNYXRjaGVkQ2hhcmFjdGVycyhpc1NwYWNlT3JOZXdsaW5lKS50b1N0cmluZygpOwog
ICAgIAogICAgIC8vIEZJWE1FLU5FV1BBUlNFUjogVGhlIHByb3BlcnR5IHJhbmdlIGlzIHJlbGF0
aXZlIHRvIHRoZSBkZWNsYXJhdGlvbiBzdGFydCBvZmZzZXQsIGJ1dCBubwogICAgIC8vIGdvb2Qg
cmVhc29uIGZvciBpdCwgYW5kIGl0IGNvbXBsaWNhdGVzIGZpeFVucGFyc2VkUHJvcGVydGllcy4K
QEAgLTM3NiwxNyArMzc2LDE5IEBAIHZvaWQgU3R5bGVTaGVldEhhbmRsZXI6Om9ic2VydmVDb21t
ZW50KHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCiAgICAgCiAgICAg
Ly8gVGhlIGxleGVyIGlzIG5vdCBpbnNpZGUgYSBwcm9wZXJ0eSBBTkQgaXQgaXMgc2Nhbm5pbmcg
YSBkZWNsYXJhdGlvbi1hd2FyZQogICAgIC8vIHJ1bGUgYm9keS4KLSAgICBTdHJpbmcgY29tbWVu
dFRleHQgPSBtX3BhcnNlZFRleHQuc3Vic3RyaW5nKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBz
dGFydE9mZnNldCk7CisgICAgYXV0byBjb21tZW50VGV4dFZpZXcgPSBTdHJpbmdWaWV3KG1fcGFy
c2VkVGV4dCkuc3Vic3RyaW5nKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCk7
CiAgICAgCi0gICAgQVNTRVJUKGNvbW1lbnRUZXh0LnN0YXJ0c1dpdGgoIi8qIikpOwotICAgIGNv
bW1lbnRUZXh0ID0gY29tbWVudFRleHQuc3Vic3RyaW5nKDIpOworICAgIEFTU0VSVChjb21tZW50
VGV4dFZpZXcuc3RhcnRzV2l0aCgiLyoiKSk7CisgICAgY29tbWVudFRleHRWaWV3ID0gY29tbWVu
dFRleHRWaWV3LnN1YnN0cmluZygyKTsKICAgICAKICAgICAvLyBSZXF1aXJlIHdlbGwtZm9ybWVk
IGNvbW1lbnRzLgotICAgIGlmICghY29tbWVudFRleHQuZW5kc1dpdGgoIiovIikpCisgICAgaWYg
KCFjb21tZW50VGV4dFZpZXcuZW5kc1dpdGgoIiovIikpCiAgICAgICAgIHJldHVybjsKLSAgICBj
b21tZW50VGV4dCA9IGNvbW1lbnRUZXh0LmxlZnQoY29tbWVudFRleHQubGVuZ3RoKCkgLSAyKS5z
dHJpcFdoaXRlU3BhY2UoKTsKLSAgICBpZiAoY29tbWVudFRleHQuaXNFbXB0eSgpKQorICAgIGNv
bW1lbnRUZXh0VmlldyA9IGNvbW1lbnRUZXh0Vmlldy5sZWZ0KGNvbW1lbnRUZXh0Vmlldy5sZW5n
dGgoKSAtIDIpLnN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nTWF0Y2hlZENoYXJhY3RlcnMoaXNTcGFj
ZU9yTmV3bGluZSk7CisgICAgaWYgKGNvbW1lbnRUZXh0Vmlldy5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKKworICAgIGF1dG8gY29tbWVudFRleHQgPSBjb21tZW50VGV4dFZpZXcudG9TdHJp
bmcoKTsKICAgICAKICAgICAvLyBGSVhNRTogVXNlIHRoZSBhY3R1YWwgcnVsZSB0eXBlIHJhdGhl
ciB0aGFuIFNUWUxFX1JVTEU/CiAgICAgUnVsZVNvdXJjZURhdGFMaXN0IHNvdXJjZURhdGE7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGlu
ZS9JbmxpbmVMaW5lQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lQnVpbGRlci5jcHAKaW5kZXggMjdmNTRjMTQ1ZGUy
NjVmNDNkYjE3YzllNjU5MjkxODM4OWI3MWRkNy4uNzYyOTNjNzM1MTBmMzk0OWFhNGI1NDA5NDdj
NGRmMWMwNGM4NDYzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmVCdWlsZGVyLmNw
cApAQCAtNDksNyArNDksNyBAQCBzdGF0aWMgaW5saW5lIFN0cmluZ0J1aWxkZXIgdG9TdHJpbmco
Y29uc3QgTGluZTo6UnVuTGlzdCYgcnVucykKICAgICAgICAgaWYgKCFydW4uaXNUZXh0KCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYXV0byYgdGV4dENvbnRlbnQgPSBydW4udGV4
dENvbnRlbnQoKTsKLSAgICAgICAgbGluZUNvbnRlbnRCdWlsZGVyLmFwcGVuZChkb3duY2FzdDxJ
bmxpbmVUZXh0Qm94PihydW4ubGF5b3V0Qm94KCkpLmNvbnRlbnQoKS5zdWJzdHJpbmcodGV4dENv
bnRlbnQtPnN0YXJ0LCB0ZXh0Q29udGVudC0+bGVuZ3RoKSk7CisgICAgICAgIGxpbmVDb250ZW50
QnVpbGRlci5hcHBlbmQoU3RyaW5nVmlldyhkb3duY2FzdDxJbmxpbmVUZXh0Qm94PihydW4ubGF5
b3V0Qm94KCkpLmNvbnRlbnQoKSkuc3Vic3RyaW5nKHRleHRDb250ZW50LT5zdGFydCwgdGV4dENv
bnRlbnQtPmxlbmd0aCkpOwogICAgIH0KICAgICByZXR1cm4gbGluZUNvbnRlbnRCdWlsZGVyOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9p
bmxpbmUvZGlzcGxheS9JbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvZGlzcGxheS9JbmxpbmVEaXNw
bGF5Q29udGVudEJ1aWxkZXIuY3BwCmluZGV4IDE5NGZkN2FjMWFiOGUwMTEyOGMxZmNjZjA3YmM0
ODg5OGY4MGY5OWUuLmYxODg5ZjQ1ZmFlYWQ1MmNjOWM2M2UxMDBjN2E2ZDk4YTI3ZTA0ZDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5l
L2Rpc3BsYXkvSW5saW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9kaXNwbGF5L0lubGluZURpc3Bs
YXlDb250ZW50QnVpbGRlci5jcHAKQEAgLTE2MywxMCArMTYzLDEwIEBAIHZvaWQgSW5saW5lRGlz
cGxheUNvbnRlbnRCdWlsZGVyOjphcHBlbmRUZXh0RGlzcGxheUJveChjb25zdCBMaW5lOjpSdW4m
IGxpbmVSdW4sCiAKICAgICAgICAgcmV0dXJuIGlua092ZXJmbG93OwogICAgIH07Ci0gICAgYXV0
byBjb250ZW50ID0gZG93bmNhc3Q8SW5saW5lVGV4dEJveD4obGF5b3V0Qm94KS5jb250ZW50KCk7
Ci0gICAgYXV0byB0ZXh0ID0gbGluZVJ1bi50ZXh0Q29udGVudCgpOworICAgIGF1dG8mIGNvbnRl
bnQgPSBkb3duY2FzdDxJbmxpbmVUZXh0Qm94PihsYXlvdXRCb3gpLmNvbnRlbnQoKTsKKyAgICBh
dXRvJiB0ZXh0ID0gbGluZVJ1bi50ZXh0Q29udGVudCgpOwogICAgIGF1dG8gYWRqdXN0ZWRDb250
ZW50VG9SZW5kZXIgPSBbJl0gewotICAgICAgICByZXR1cm4gdGV4dC0+bmVlZHNIeXBoZW4gPyBt
YWtlU3RyaW5nKGNvbnRlbnQuc3Vic3RyaW5nKHRleHQtPnN0YXJ0LCB0ZXh0LT5sZW5ndGgpLCBz
dHlsZS5oeXBoZW5TdHJpbmcoKSkgOiBTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHRleHQtPm5l
ZWRzSHlwaGVuID8gbWFrZVN0cmluZyhTdHJpbmdWaWV3KGNvbnRlbnQpLnN1YnN0cmluZyh0ZXh0
LT5zdGFydCwgdGV4dC0+bGVuZ3RoKSwgc3R5bGUuaHlwaGVuU3RyaW5nKCkpIDogU3RyaW5nKCk7
CiAgICAgfTsKICAgICBib3hlcy5hcHBlbmQoeyBtX2xpbmVJbmRleAogICAgICAgICAsIGxpbmVS
dW4uaXNXb3JkU2VwYXJhdG9yKCkgPyBJbmxpbmVEaXNwbGF5OjpCb3g6OlR5cGU6OldvcmRTZXBh
cmF0b3IgOiBJbmxpbmVEaXNwbGF5OjpCb3g6OlR5cGU6OlRleHQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dElubGluZVRleHRCb3guaCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dElubGluZVRleHRCb3guaAppbmRleCAw
ZjA4OGZmYTRmMGI1ZDQ1M2FhNzVjMGMyODE4MWM3MTU0ZDNjZmRiLi5kNjZhYTM2M2FiMTRhNWIw
ZThjZjRjMTkwYjU5YmQ0YjRjYTIxMTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvbGF5b3V0dHJlZS9MYXlvdXRJbmxpbmVUZXh0Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2xheW91dHRyZWUvTGF5b3V0SW5saW5lVGV4dEJveC5oCkBAIC00MCw3ICs0MCw3IEBA
IHB1YmxpYzoKICAgICBJbmxpbmVUZXh0Qm94KFN0cmluZywgYm9vbCBjYW5Vc2VTaW1wbGlmaWVk
Q29udGVudE1lYXN1cmluZywgYm9vbCBjYW5Vc2VTaW1wbGVGb250Q29kZVBhdGgsIFJlbmRlclN0
eWxlJiYsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mJiBmaXJzdExpbmVTdHlsZSA9IG51
bGxwdHIpOwogICAgIHZpcnR1YWwgfklubGluZVRleHRCb3goKSA9IGRlZmF1bHQ7CiAKLSAgICBT
dHJpbmcgY29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudDsgfQorICAgIGNvbnN0IFN0
cmluZyYgY29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudDsgfQogICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCBub3QgYmUgYSBib3gncyBwcm9wZXJ0eS4KICAgICBib29sIGNhblVzZVNp
bXBsaWZpZWRDb250ZW50TWVhc3VyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9jYW5Vc2VTaW1wbGlm
aWVkQ29udGVudE1lYXN1cmluZzsgfQogICAgIGJvb2wgY2FuVXNlU2ltcGxlRm9udENvZGVQYXRo
KCkgY29uc3QgeyByZXR1cm4gbV9jYW5Vc2VTaW1wbGVGb250Q29kZVBhdGg7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2UuY3BwCmluZGV4IDUyMzAwYzZjNWI4MWQ2NTEyMjA1ZDhjM2YzMDZmNzBiNzA4ZmI2Mjgu
LjhiMDMyZmVhOTU1ZTE1Nzk4OTc2ZGMzMjg2MzhhOGU1Zjg2MzU5ZGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlLmNwcApAQCAtNzk4LDEyICs3OTgsMTIgQEAgYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZTo6c3RvcmUoQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSwgdW5zaWduZWQKICAg
ICAgICAgU3RyaW5nIGZsYXRGaWxlRGlyZWN0b3J5ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5k
aW5nQ29tcG9uZW50KG1fY2FjaGVEaXJlY3RvcnksIG1fZmxhdEZpbGVTdWJkaXJlY3RvcnlOYW1l
KTsKICAgICAgICAgRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVzKGZsYXRGaWxlRGlyZWN0
b3J5KTsKIAotICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uOworICAgICAgICBTdHJpbmdWaWV3IGV4
dGVuc2lvbjsKICAgICAgICAgCiAgICAgICAgIFN0cmluZyBmaWxlTmFtZSA9IHJlc291cmNlLT5y
ZXNwb25zZSgpLnN1Z2dlc3RlZEZpbGVuYW1lKCk7CiAgICAgICAgIHNpemVfdCBkb3RJbmRleCA9
IGZpbGVOYW1lLnJldmVyc2VGaW5kKCcuJyk7CiAgICAgICAgIGlmIChkb3RJbmRleCAhPSBub3RG
b3VuZCAmJiBkb3RJbmRleCA8IChmaWxlTmFtZS5sZW5ndGgoKSAtIDEpKQotICAgICAgICAgICAg
ZXh0ZW5zaW9uID0gZmlsZU5hbWUuc3Vic3RyaW5nKGRvdEluZGV4KTsKKyAgICAgICAgICAgIGV4
dGVuc2lvbiA9IFN0cmluZ1ZpZXcoZmlsZU5hbWUpLnN1YnN0cmluZyhkb3RJbmRleCk7CiAKICAg
ICAgICAgU3RyaW5nIHBhdGg7CiAgICAgICAgIGlmICghd3JpdGVEYXRhVG9VbmlxdWVGaWxlSW5E
aXJlY3RvcnkocmVzb3VyY2UtPmRhdGEoKSwgZmxhdEZpbGVEaXJlY3RvcnksIHBhdGgsIGV4dGVu
c2lvbikpCkBAIC0xMjcyLDEyICsxMjcyLDEyIEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OnNob3VsZFN0b3JlUmVzb3VyY2VBc0ZsYXRGaWxlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvCiAg
ICAgcmV0dXJuIHN0YXJ0c1dpdGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodHlwZSwgImF1ZGlv
LyIpIHx8IHN0YXJ0c1dpdGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodHlwZSwgInZpZGVvLyIp
OwogfQogICAgIAotYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6d3JpdGVEYXRhVG9Vbmlx
dWVGaWxlSW5EaXJlY3RvcnkoRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlciYgZGF0YSwgY29uc3QgU3Ry
aW5nJiBkaXJlY3RvcnksIFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWxlRXh0ZW5zaW9u
KQorYm9vbCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6d3JpdGVEYXRhVG9VbmlxdWVGaWxlSW5E
aXJlY3RvcnkoRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlciYgZGF0YSwgY29uc3QgU3RyaW5nJiBkaXJl
Y3RvcnksIFN0cmluZyYgcGF0aCwgU3RyaW5nVmlldyBmaWxlRXh0ZW5zaW9uKQogewogICAgIFN0
cmluZyBmdWxsUGF0aDsKICAgICAKICAgICBkbyB7Ci0gICAgICAgIHBhdGggPSBGaWxlU3lzdGVt
OjplbmNvZGVGb3JGaWxlTmFtZShjcmVhdGVWZXJzaW9uNFVVSURTdHJpbmcoKSkgKyBmaWxlRXh0
ZW5zaW9uOworICAgICAgICBwYXRoID0gbWFrZVN0cmluZyhGaWxlU3lzdGVtOjplbmNvZGVGb3JG
aWxlTmFtZShjcmVhdGVWZXJzaW9uNFVVSURTdHJpbmcoKSksIGZpbGVFeHRlbnNpb24pOwogICAg
ICAgICAvLyBHdWFyZCBhZ2FpbnN0IHRoZSBhYm92ZSBmdW5jdGlvbiBiZWluZyBjYWxsZWQgb24g
YSBwbGF0Zm9ybSB3aGljaCBkb2VzIG5vdCBpbXBsZW1lbnQKICAgICAgICAgLy8gY3JlYXRlVmVy
c2lvbjRVVUlEU3RyaW5nKCkuCiAgICAgICAgIEFTU0VSVCghcGF0aC5pc0VtcHR5KCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2UuaAppbmRleCA0MTAyYTE4MDhiNDU1NTdiNjQ1ZTM2ZTdlNjgxZmM0YzZkMjA3Y2Uy
Li4wYjNjYzFhYjY1YTBmZThlNGJmYWMyYTc4NDY0ZWI3NzYwMGVmMTBkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2UuaApAQCAtMTIyLDcgKzEyMiw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBlbnN1cmVPcmlnaW5S
ZWNvcmQoY29uc3QgU2VjdXJpdHlPcmlnaW4qKTsKICAgICBzdGF0aWMgYm9vbCBzaG91bGRTdG9y
ZVJlc291cmNlQXNGbGF0RmlsZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqKTsKICAgICB2b2lk
IGRlbGV0ZVRhYmxlcygpOwotICAgIGJvb2wgd3JpdGVEYXRhVG9VbmlxdWVGaWxlSW5EaXJlY3Rv
cnkoRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlciYsIGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5LCBTdHJp
bmcmIG91dEZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGZpbGVFeHRlbnNpb24pOworICAgIGJvb2wg
d3JpdGVEYXRhVG9VbmlxdWVGaWxlSW5EaXJlY3RvcnkoRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlciYs
IGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5LCBTdHJpbmcmIG91dEZpbGVuYW1lLCBTdHJpbmdWaWV3
IGZpbGVFeHRlbnNpb24pOwogCiAgICAgdm9pZCBsb2FkTWFuaWZlc3RIb3N0SGFzaGVzKCk7CiAg
ICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9u
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5jcHAKaW5k
ZXggMDhjYTQ3ZTEyZDQ0MDZmYTVjZjU5YmMwNTkxNWIzODRlMjk1YTk1NC4uZDE2NjkzMzMyNjI2
N2VmYjQ3YzdiMGQ3ODM5YTEwZGM3OWNjYzg5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFNWR0ZvbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRTVkdGb250LmNwcApAQCAtMTAzLDcgKzEwMyw3IEBAIGJvb2wgQ2FjaGVk
U1ZHRm9udDo6ZW5zdXJlQ3VzdG9tRm9udERhdGEoY29uc3QgQXRvbVN0cmluZyYgcmVtb3RlVVJJ
KQogICAgIHJldHVybiBtX2V4dGVybmFsU1ZHRG9jdW1lbnQgJiYgQ2FjaGVkRm9udDo6ZW5zdXJl
Q3VzdG9tRm9udERhdGEobV9jb252ZXJ0ZWRGb250LmdldCgpKTsKIH0KIAotU1ZHRm9udEVsZW1l
bnQqIENhY2hlZFNWR0ZvbnQ6OmdldFNWR0ZvbnRCeUlkKGNvbnN0IFN0cmluZyYgZm9udE5hbWUp
IGNvbnN0CitTVkdGb250RWxlbWVudCogQ2FjaGVkU1ZHRm9udDo6Z2V0U1ZHRm9udEJ5SWQoY29u
c3QgQXRvbVN0cmluZyYgZm9udE5hbWUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZXh0ZXJuYWxT
VkdEb2N1bWVudCk7CiAgICAgYXV0byBlbGVtZW50cyA9IGRlc2NlbmRhbnRzT2ZUeXBlPFNWR0Zv
bnRFbGVtZW50PigqbV9leHRlcm5hbFNWR0RvY3VtZW50KTsKQEAgLTEyMiwxMCArMTIyLDEwIEBA
IFNWR0ZvbnRFbGVtZW50KiBDYWNoZWRTVkdGb250OjptYXliZUluaXRpYWxpemVFeHRlcm5hbFNW
R0ZvbnRFbGVtZW50KGNvbnN0IEF0b21TCiB7CiAgICAgaWYgKG1fZXh0ZXJuYWxTVkdGb250RWxl
bWVudCkKICAgICAgICAgcmV0dXJuIG1fZXh0ZXJuYWxTVkdGb250RWxlbWVudDsKLSAgICBTdHJp
bmcgZnJhZ21lbnRJZGVudGlmaWVyOworICAgIEF0b21TdHJpbmcgZnJhZ21lbnRJZGVudGlmaWVy
OwogICAgIHNpemVfdCBzdGFydCA9IHJlbW90ZVVSSS5maW5kKCcjJyk7CiAgICAgaWYgKHN0YXJ0
ICE9IG5vdEZvdW5kKQotICAgICAgICBmcmFnbWVudElkZW50aWZpZXIgPSByZW1vdGVVUkkuc3Ry
aW5nKCkuc3Vic3RyaW5nKHN0YXJ0ICsgMSk7CisgICAgICAgIGZyYWdtZW50SWRlbnRpZmllciA9
IFN0cmluZ1ZpZXcocmVtb3RlVVJJKS5zdWJzdHJpbmcoc3RhcnQgKyAxKS50b0F0b21TdHJpbmco
KTsKICAgICBtX2V4dGVybmFsU1ZHRm9udEVsZW1lbnQgPSBnZXRTVkdGb250QnlJZChmcmFnbWVu
dElkZW50aWZpZXIpOwogICAgIHJldHVybiBtX2V4dGVybmFsU1ZHRm9udEVsZW1lbnQ7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5oIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0ZvbnQuaAppbmRleCAzNTNkM2Rl
NjNiMDYyODYxM2FiYWY3NzdmZWIyNTNjNWI2MjQ5MGM2Li5kZmI4OTJjOWM1NzRkMTYyYjAzYjA5
MTYxNTYxNDI1ZGVkNGE5YzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkU1ZHRm9udC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRTVkdGb250LmgKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGb250
UGxhdGZvcm1EYXRhIHBsYXRmb3JtRGF0YUZyb21DdXN0b21EYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMsIGNvbnN0IEZvbnRDcmVhdGlvbkNvbnRleHQm
KTsKIAotICAgIFNWR0ZvbnRFbGVtZW50KiBnZXRTVkdGb250QnlJZChjb25zdCBTdHJpbmcmKSBj
b25zdDsKKyAgICBTVkdGb250RWxlbWVudCogZ2V0U1ZHRm9udEJ5SWQoY29uc3QgQXRvbVN0cmlu
ZyYpIGNvbnN0OwogCiAgICAgU1ZHRm9udEVsZW1lbnQqIG1heWJlSW5pdGlhbGl6ZUV4dGVybmFs
U1ZHRm9udEVsZW1lbnQoY29uc3QgQXRvbVN0cmluZyYgcmVtb3RlVVJJKTsKICAgICBTVkdGb250
RmFjZUVsZW1lbnQqIGZpcnN0Rm9udEZhY2UoY29uc3QgQXRvbVN0cmluZyYgcmVtb3RlVVJJKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTG9jYXRpb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAKaW5kZXggZTRmMjdiMmVjZDk2MmYyYTU5MjcwMDQ3NDZm
OTNjZGJiMzVkZGM2Yi4uODdiOTk2OGQyODkyMDVjZTI1NTU2OThjOTE3ZDE5Y2E5ZGQyNzI2NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAKQEAgLTE5OCw5ICsxOTgsOSBAQCBFeGNlcHRpb25P
cjx2b2lkPiBMb2NhdGlvbjo6c2V0SGFzaChET01XaW5kb3cmIGluY3VtYmVudFdpbmRvdywgRE9N
V2luZG93JiBmaXJzdAogICAgIEFTU0VSVChmcmFtZS0+ZG9jdW1lbnQoKSk7CiAgICAgYXV0byB1
cmwgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCk7CiAgICAgYXV0byBvbGRGcmFnbWVudElkZW50
aWZpZXIgPSB1cmwuZnJhZ21lbnRJZGVudGlmaWVyKCk7Ci0gICAgYXV0byBuZXdGcmFnbWVudElk
ZW50aWZpZXIgPSBoYXNoOwotICAgIGlmIChoYXNoWzBdID09ICcjJykKLSAgICAgICAgbmV3RnJh
Z21lbnRJZGVudGlmaWVyID0gaGFzaC5zdWJzdHJpbmcoMSk7CisgICAgU3RyaW5nVmlldyBuZXdG
cmFnbWVudElkZW50aWZpZXIgeyBoYXNoIH07CisgICAgaWYgKCFoYXNoLmlzRW1wdHkoKSAmJiBo
YXNoWzBdID09ICcjJykKKyAgICAgICAgbmV3RnJhZ21lbnRJZGVudGlmaWVyID0gbmV3RnJhZ21l
bnRJZGVudGlmaWVyLnN1YnN0cmluZygxKTsKICAgICB1cmwuc2V0RnJhZ21lbnRJZGVudGlmaWVy
KG5ld0ZyYWdtZW50SWRlbnRpZmllcik7CiAgICAgLy8gTm90ZSB0aGF0IGJ5IHBhcnNpbmcgdGhl
IFVSTCBhbmQgKnRoZW4qIGNvbXBhcmluZyBmcmFnbWVudHMsIHdlIGFyZSAKICAgICAvLyBjb21w
YXJpbmcgZnJhZ21lbnRzIHBvc3QtY2Fub25pY2FsaXphdGlvbiwgYW5kIHNvIHRoaXMgaGFuZGxl
cyB0aGUgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCA1ZDNmNjgwNDJlNzJmMjdmOTVkNTZhNWJlNTkw
N2Q0MDVmMDVhMDRmLi45MzU4Yjg0NjRiYjU5MzkxMDVhNjg5ODQ3NmZmNjkxYWVmM2MzNzgwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTIwMjMsNyArMjAyMyw3IEBAIHZvaWQgUGFnZTo6dXNlclN0
eWxlU2hlZXRMb2NhdGlvbkNoYW5nZWQoKQogICAgIGlmICh1cmwucHJvdG9jb2xJc0RhdGEoKSAm
JiB1cmwuc3RyaW5nKCkuc3RhcnRzV2l0aCgiZGF0YTp0ZXh0L2NzcztjaGFyc2V0PXV0Zi04O2Jh
c2U2NCwiKSkgewogICAgICAgICBtX2RpZExvYWRVc2VyU3R5bGVTaGVldCA9IHRydWU7CiAKLSAg
ICAgICAgaWYgKGF1dG8gc3R5bGVTaGVldEFzVVRGOCA9IGJhc2U2NERlY29kZShQQUw6OmRlY29k
ZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwuc3RyaW5nKCkuc3Vic3RyaW5nKDM1KSksIEJhc2U2NERl
Y29kZU9wdGlvbnM6Oklnbm9yZVNwYWNlc0FuZE5ld0xpbmVzKSkKKyAgICAgICAgaWYgKGF1dG8g
c3R5bGVTaGVldEFzVVRGOCA9IGJhc2U2NERlY29kZShQQUw6OmRlY29kZVVSTEVzY2FwZVNlcXVl
bmNlcyhTdHJpbmdWaWV3KHVybC5zdHJpbmcoKSkuc3Vic3RyaW5nKDM1KSksIEJhc2U2NERlY29k
ZU9wdGlvbnM6Oklnbm9yZVNwYWNlc0FuZE5ld0xpbmVzKSkKICAgICAgICAgICAgIG1fdXNlclN0
eWxlU2hlZXQgPSBTdHJpbmc6OmZyb21VVEY4KHN0eWxlU2hlZXRBc1VURjgtPmRhdGEoKSwgc3R5
bGVTaGVldEFzVVRGOC0+c2l6ZSgpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
VXNlckNvbnRlbnRVUkxQYXR0ZXJuLmNwcAppbmRleCA3NTkyZDFmYzIyMTNkZmRhMjAwNDcxNTE2
ZTNkYTM5Y2M1ODU5N2EwLi5mMTZmYjM1NGVkNmJhMWYwZDAyNTQ1NWVkMzVlYWMxOTgwMTY5N2M4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50VVJMUGF0dGVybi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudFVSTFBhdHRlcm4uY3BwCkBA
IC02MSwxNSArNjEsMTUgQEAgYm9vbCBVc2VyQ29udGVudFVSTFBhdHRlcm46Om1hdGNoZXNQYXR0
ZXJucyhjb25zdCBVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4KICAgICByZXR1cm4gbWF0
Y2hlc0FsbG93bGlzdCAmJiAhbWF0Y2hlc0Jsb2NrbGlzdDsKIH0KIAotYm9vbCBVc2VyQ29udGVu
dFVSTFBhdHRlcm46OnBhcnNlKGNvbnN0IFN0cmluZyYgcGF0dGVybikKK2Jvb2wgVXNlckNvbnRl
bnRVUkxQYXR0ZXJuOjpwYXJzZShTdHJpbmdWaWV3IHBhdHRlcm4pCiB7CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBBU0NJSUxpdGVyYWwgc2NoZW1lU2VwYXJhdG9yID0gIjovLyJfczsKIAotICAgIHNp
emVfdCBzY2hlbWVFbmRQb3MgPSBwYXR0ZXJuLmZpbmQoU3RyaW5nVmlldyB7IHNjaGVtZVNlcGFy
YXRvciB9KTsKKyAgICBzaXplX3Qgc2NoZW1lRW5kUG9zID0gcGF0dGVybi5maW5kKHNjaGVtZVNl
cGFyYXRvcik7CiAgICAgaWYgKHNjaGVtZUVuZFBvcyA9PSBub3RGb3VuZCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgbV9zY2hlbWUgPSBwYXR0ZXJuLmxlZnQoc2NoZW1lRW5kUG9zKTsK
KyAgICBtX3NjaGVtZSA9IHBhdHRlcm4ubGVmdChzY2hlbWVFbmRQb3MpLnRvU3RyaW5nKCk7CiAK
ICAgICB1bnNpZ25lZCBob3N0U3RhcnRQb3MgPSBzY2hlbWVFbmRQb3MgKyBzY2hlbWVTZXBhcmF0
b3IubGVuZ3RoKCk7CiAgICAgaWYgKGhvc3RTdGFydFBvcyA+PSBwYXR0ZXJuLmxlbmd0aCgpKQpA
QCAtODQsNyArODQsNyBAQCBib29sIFVzZXJDb250ZW50VVJMUGF0dGVybjo6cGFyc2UoY29uc3Qg
U3RyaW5nJiBwYXR0ZXJuKQogICAgICAgICBpZiAoaG9zdEVuZFBvcyA9PSBub3RGb3VuZCkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBtX2hvc3QgPSBwYXR0ZXJuLnN1YnN0
cmluZyhob3N0U3RhcnRQb3MsIGhvc3RFbmRQb3MgLSBob3N0U3RhcnRQb3MpOworICAgICAgICBt
X2hvc3QgPSBwYXR0ZXJuLnN1YnN0cmluZyhob3N0U3RhcnRQb3MsIGhvc3RFbmRQb3MgLSBob3N0
U3RhcnRQb3MpLnRvU3RyaW5nKCk7CiAgICAgICAgIG1fbWF0Y2hTdWJkb21haW5zID0gZmFsc2U7
CiAKICAgICAgICAgaWYgKG1faG9zdCA9PSAiKiIpIHsKQEAgLTEwNCw3ICsxMDQsNyBAQCBib29s
IFVzZXJDb250ZW50VVJMUGF0dGVybjo6cGFyc2UoY29uc3QgU3RyaW5nJiBwYXR0ZXJuKQogICAg
ICAgICBwYXRoU3RhcnRQb3MgPSBob3N0RW5kUG9zOwogICAgIH0KIAotICAgIG1fcGF0aCA9IHBh
dHRlcm4ucmlnaHQocGF0dGVybi5sZW5ndGgoKSAtIHBhdGhTdGFydFBvcyk7CisgICAgbV9wYXRo
ID0gcGF0dGVybi5yaWdodChwYXR0ZXJuLmxlbmd0aCgpIC0gcGF0aFN0YXJ0UG9zKS50b1N0cmlu
ZygpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1VzZXJDb250ZW50VVJMUGF0dGVybi5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29u
dGVudFVSTFBhdHRlcm4uaAppbmRleCA5YTJmMGE1ZjE1ZWEzZTkyZmUxMzhkNzVlNThiYTI1OTU1
ZGM1MThmLi45Y2I4MjAzZWE2MjE5OWNmM2Y3OTAwNzhhMzBlY2E0ZTRkZTIwZGE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50VVJMUGF0dGVybi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmgKQEAgLTM0LDcgKzM0LDcg
QEAgY2xhc3MgVXNlckNvbnRlbnRVUkxQYXR0ZXJuIHsKIHB1YmxpYzoKICAgICBVc2VyQ29udGVu
dFVSTFBhdHRlcm4oKSA6IG1faW52YWxpZCh0cnVlKSwgbV9tYXRjaFN1YmRvbWFpbnMoZmFsc2Up
IHsgfQogCi0gICAgVXNlckNvbnRlbnRVUkxQYXR0ZXJuKGNvbnN0IFN0cmluZyYgcGF0dGVybikK
KyAgICBVc2VyQ29udGVudFVSTFBhdHRlcm4oU3RyaW5nVmlldyBwYXR0ZXJuKQogICAgIDogbV9t
YXRjaFN1YmRvbWFpbnMoZmFsc2UpCiAgICAgewogICAgICAgICBtX2ludmFsaWQgPSAhcGFyc2Uo
cGF0dGVybik7CkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBtYXRj
aGVzUGF0dGVybnMoY29uc3QgVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsbG93bGlzdCwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2NrbGlzdCk7CiAKIHByaXZhdGU6Ci0gICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBwYXJzZShjb25zdCBTdHJpbmcmIHBhdHRlcm4pOworICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgcGFyc2UoU3RyaW5nVmlldyBwYXR0ZXJuKTsKIAogICAgIGJvb2wgbWF0Y2hl
c0hvc3QoY29uc3QgVVJMJikgY29uc3Q7CiAgICAgYm9vbCBtYXRjaGVzUGF0aChjb25zdCBVUkwm
KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVn
aXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAK
aW5kZXggMjljZmMzMDQzMjJiYmQyZGE4ZDAzNTViYmVlMzVkNzE1MjU0M2M1Mi4uYjQ3NzMxMzVm
Yzg3M2M5NjRjZDEwMzYwOWZlYzA4NDk4YzZlM2M1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKQEAgLTM3OSwxNSArMzc5LDE1IEBAIHN0YXRpYyBj
b25zdCBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4sIEFTQ0lJQ2FzZUluc2Vuc2l0aXZl
SGFzaD4mIGNvbW1vbk1pCiAgICAgcmV0dXJuIG1pbWVUeXBlc01hcDsKIH0KIAotc3RhdGljIGNv
bnN0IFZlY3RvcjxTdHJpbmc+KiB0eXBlc0ZvckNvbW1vbkV4dGVuc2lvbihjb25zdCBTdHJpbmcm
IGV4dGVuc2lvbikKK3N0YXRpYyBjb25zdCBWZWN0b3I8U3RyaW5nPiogdHlwZXNGb3JDb21tb25F
eHRlbnNpb24oU3RyaW5nVmlldyBleHRlbnNpb24pCiB7Ci0gICAgYXV0byBtYXBFbnRyeSA9IGNv
bW1vbk1pbWVUeXBlc01hcCgpLmZpbmQoZXh0ZW5zaW9uKTsKKyAgICBhdXRvIG1hcEVudHJ5ID0g
Y29tbW9uTWltZVR5cGVzTWFwKCkuZmluZDxBU0NJSUNhc2VJbnNlbnNpdGl2ZVN0cmluZ1ZpZXdI
YXNoVHJhbnNsYXRvcj4oZXh0ZW5zaW9uKTsKICAgICBpZiAobWFwRW50cnkgPT0gY29tbW9uTWlt
ZVR5cGVzTWFwKCkuZW5kKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiAm
bWFwRW50cnktPnZhbHVlOwogfQogCi1TdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6bWVkaWFNSU1F
VHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikKK1N0cmluZyBNSU1FVHlw
ZVJlZ2lzdHJ5OjptZWRpYU1JTUVUeXBlRm9yRXh0ZW5zaW9uKFN0cmluZ1ZpZXcgZXh0ZW5zaW9u
KQogewogICAgIGF1dG8qIHZlY3RvciA9IHR5cGVzRm9yQ29tbW9uRXh0ZW5zaW9uKGV4dGVuc2lv
bik7CiAgICAgaWYgKHZlY3RvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L01JTUVUeXBlUmVnaXN0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVn
aXN0cnkuaAppbmRleCA2YjUxNjJkOWFkY2YyY2VlMjI5ODM0ZDU4NWM1MDY1OTQ3N2RlY2JhLi4y
YmQwYzg5MGIwY2UzMWI1Y2JlMGQ0ZTJiZDkxOTBiNGQ1M2QwMmNjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5oCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoK
ICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIG1pbWVUeXBlRm9yRXh0ZW5zaW9uKFN0
cmluZ1ZpZXcpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBleHRl
bnNpb25zRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKTsKICAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgU3RyaW5nIHByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKGNvbnN0IFN0cmlu
ZyYgdHlwZSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBtZWRpYU1JTUVUeXBl
Rm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgU3RyaW5nIG1lZGlhTUlNRVR5cGVGb3JFeHRlbnNpb24oU3RyaW5nVmlldyBleHRl
bnNpb24pOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBtaW1lVHlwZUZvclBh
dGgoU3RyaW5nVmlldyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL0RyYWdJbWFnZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJh
Z0ltYWdlQ29jb2EubW0KaW5kZXggZTM4ZGFmODg1YTM2NDdjMDBmYzQ5OWIwNTRmMGRiZGU5NDM5
MzdiYS4uOTA2MGUxZGNmMTlkYTMzZWZiZTIxYzAyNDk5ZDBlZTExMzg5NWU4ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdlQ29jb2EubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdlQ29jb2EubW0KQEAgLTEzOSwx
OCArMTM5LDE4IEBAIFJldGFpblB0cjxOU0ltYWdlPiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2Uo
SW1hZ2UqIGltYWdlLCBJbWFnZU9yaWVudGF0aW9uIG9yaWVuCiAgICAgCiBSZXRhaW5QdHI8TlNJ
bWFnZT4gY3JlYXRlRHJhZ0ltYWdlSWNvbkZvckNhY2hlZEltYWdlRmlsZW5hbWUoY29uc3QgU3Ry
aW5nJiBmaWxlbmFtZSkKIHsKLSAgICBOU1N0cmluZyAqZXh0ZW5zaW9uID0gbmlsOworICAgIFJl
dGFpblB0cjxOU1N0cmluZz4gZXh0ZW5zaW9uOwogICAgIHNpemVfdCBkb3RJbmRleCA9IGZpbGVu
YW1lLnJldmVyc2VGaW5kKCcuJyk7CiAgICAgCiAgICAgaWYgKGRvdEluZGV4ICE9IG5vdEZvdW5k
ICYmIGRvdEluZGV4IDwgKGZpbGVuYW1lLmxlbmd0aCgpIC0gMSkpIC8vIHJlcXVpcmUgdGhhdCBh
IC4gZXhpc3RzIGFmdGVyIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYW5kIGJlZm9yZSB0aGUgbGFzdAot
ICAgICAgICBleHRlbnNpb24gPSBmaWxlbmFtZS5zdWJzdHJpbmcoZG90SW5kZXggKyAxKTsKKyAg
ICAgICAgZXh0ZW5zaW9uID0gU3RyaW5nVmlldyhmaWxlbmFtZSkuc3Vic3RyaW5nKGRvdEluZGV4
ICsgMSkuY3JlYXRlTlNTdHJpbmcoKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gSXQgbWlnaHQg
YmUgd29ydGggZG9pbmcgYSBmdXJ0aGVyIGxvb2t1cCB0byBwdWxsIHRoZSBleHRlbnNpb24gZnJv
bSB0aGUgTUlNRSB0eXBlLgogICAgICAgICBleHRlbnNpb24gPSBAIiI7CiAgICAgfQogICAgIAog
ICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgcmV0dXJuIFtbTlNX
b3Jrc3BhY2Ugc2hhcmVkV29ya3NwYWNlXSBpY29uRm9yRmlsZVR5cGU6ZXh0ZW5zaW9uXTsKKyAg
ICByZXR1cm4gW1tOU1dvcmtzcGFjZSBzaGFyZWRXb3Jrc3BhY2VdIGljb25Gb3JGaWxlVHlwZTpl
eHRlbnNpb24uZ2V0KCldOwogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBs
YXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5j
cHAKaW5kZXggYTI2ODdhODkzYmJmZDg5NGY2ODVmNDkyZDFmOTM5OTIxZTY1MDM2MS4uZGJiODBj
YTY0MzhjOTAzODU5YTdmOTkwMTg4NTRhZjYwYjcxZWU5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcApAQCAtNDkzLDcgKzQ5Myw3IEBA
IGJvb2wgTWVkaWFQbGF5ZXI6OmxvYWQoY29uc3QgVVJMJiB1cmwsIGNvbnN0IENvbnRlbnRUeXBl
JiBjb250ZW50VHlwZSwgY29uc3QgU3RyCiAgICAgICAgICAgICBhdXRvIGxhc3RQYXRoQ29tcG9u
ZW50ID0gdXJsLmxhc3RQYXRoQ29tcG9uZW50KCk7CiAgICAgICAgICAgICBzaXplX3QgcG9zID0g
bGFzdFBhdGhDb21wb25lbnQucmV2ZXJzZUZpbmQoJy4nKTsKICAgICAgICAgICAgIGlmIChwb3Mg
IT0gbm90Rm91bmQpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uID0gbGFzdFBh
dGhDb21wb25lbnQuc3Vic3RyaW5nKHBvcyArIDEpLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAg
ICAgYXV0byBleHRlbnNpb24gPSBsYXN0UGF0aENvbXBvbmVudC5zdWJzdHJpbmcocG9zICsgMSk7
CiAgICAgICAgICAgICAgICAgU3RyaW5nIG1lZGlhVHlwZSA9IE1JTUVUeXBlUmVnaXN0cnk6Om1l
ZGlhTUlNRVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKICAgICAgICAgICAgICAgICBpZiAo
IW1lZGlhVHlwZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgbV9jb250ZW50VHlw
ZSA9IENvbnRlbnRUeXBlIHsgV1RGTW92ZShtZWRpYVR5cGUpIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xF
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuY3BwCmluZGV4IGZlMTg4NTRkNjMzMTczYTY4ZmJlMDJjZDhlZGFmYzcyZmZh
OGFmMzYuLmQ2NzdiM2M2ZmNmM2M5ZTM3MTdlNTczZThiZDk5ZWE0NDc3OWJmZTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4
dEdMQU5HTEUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xl
L0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCkBAIC0xOTAzLDcgKzE5MDMsNyBAQCBTdHJpbmcg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9ybUdMT2Jq
ZWN0IHNoYWRlcnNbMl0sCiAgICAgLy8gaXMgY2F1c2luZyBpdC4KICAgICBzdGF0aWMgY29uc3Rl
eHByIGNoYXIgYW5nbGVXYXJuaW5nW10gPSAiV0FSTklORzogMDoxOiBleHRlbnNpb24gJ0dMX0FS
Ql9ncHVfc2hhZGVyNScgaXMgbm90IHN1cHBvcnRlZFxuIjsKICAgICBpbnQgc3RhcnRGcm9tID0g
bG9nLnN0YXJ0c1dpdGgoYW5nbGVXYXJuaW5nKSA/IHN0cmxlbihhbmdsZVdhcm5pbmcpIDogMDsK
LSAgICBwcm9jZXNzZWRMb2cuYXBwZW5kKGxvZy5zdWJzdHJpbmcoc3RhcnRGcm9tLCBsb2cubGVu
Z3RoKCkgLSBzdGFydEZyb20pKTsKKyAgICBwcm9jZXNzZWRMb2cuYXBwZW5kKFN0cmluZ1ZpZXco
bG9nKS5zdWJzdHJpbmcoc3RhcnRGcm9tLCBsb2cubGVuZ3RoKCkgLSBzdGFydEZyb20pKTsKIAog
ICAgIExPRyhXZWJHTCwgIlVubWFuZ2xlZCBTaGFkZXJJbmZvTG9nOlxuJXMiLCBwcm9jZXNzZWRM
b2cudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICByZXR1cm4gcHJvY2Vzc2VkTG9nLnRv
U3RyaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFW
Ri5jcHAKaW5kZXggNzMzZDU2YTA4M2QzMGIzZjQ1ODQ3NDk1ZjdjODliMzE5ODQ2OTQ5Mi4uYWQ4
YzVkMThjNjg0MTIxOGRhMDBkM2U5NTI5YTZiMjUwOTQzODU4YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1By
aXZhdGVBVkYuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcApAQCAtMzAwLDcgKzMwMCw3IEBA
IFJlZjxJbmJhbmRHZW5lcmljQ3VlPiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNz
Q3VlQXR0cmlidXRlcyhDRkF0dHJpYnV0CiAgICAgICAgIH0KIAogICAgICAgICBjb250ZW50LmFw
cGVuZCh0YWdTdGFydCk7Ci0gICAgICAgIGNvbnRlbnQuYXBwZW5kKGF0dHJpYnV0ZWRTdHJpbmdW
YWx1ZS5zdWJzdHJpbmcoZWZmZWN0aXZlUmFuZ2UubG9jYXRpb24sIGVmZmVjdGl2ZVJhbmdlLmxl
bmd0aCkpOworICAgICAgICBjb250ZW50LmFwcGVuZChTdHJpbmdWaWV3KGF0dHJpYnV0ZWRTdHJp
bmdWYWx1ZSkuc3Vic3RyaW5nKGVmZmVjdGl2ZVJhbmdlLmxvY2F0aW9uLCBlZmZlY3RpdmVSYW5n
ZS5sZW5ndGgpKTsKICAgICAgICAgY29udGVudC5hcHBlbmQodGFnRW5kKTsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCmluZGV4IDhmNTQ2NmE1YTNlN2JlOWVj
NmFjMDI5NTlhZmZkZTQ5ODViMDZkZTQuLjQ4MzgwMjIzNTdmODVlZTM0NzQyMzAzZjIzN2NhYTRl
MjE3MTRjNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcApAQCAtMTk4
NCw3ICsxOTg0LDcgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmds
ZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwKICAgICAgICAgaWYgKHN0YXJ0
ID09IC0xKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgcHJvY2Vzc2VkTG9nLmFwcGVu
ZChsb2cuc3Vic3RyaW5nKHN0YXJ0RnJvbSwgc3RhcnQgLSBzdGFydEZyb20pKTsKKyAgICAgICAg
cHJvY2Vzc2VkTG9nLmFwcGVuZChTdHJpbmdWaWV3KGxvZykuc3Vic3RyaW5nKHN0YXJ0RnJvbSwg
c3RhcnQgLSBzdGFydEZyb20pKTsKICAgICAgICAgc3RhcnRGcm9tID0gc3RhcnQgKyBtYXRjaGVk
TGVuZ3RoOwogCiAgICAgICAgIGNvbnN0IFN0cmluZyYgbWFuZ2xlZFN5bWJvbCA9IGxvZy5zdWJz
dHJpbmcoc3RhcnQsIG1hdGNoZWRMZW5ndGgpOwpAQCAtMTk5Myw3ICsxOTkzLDcgQEAgU3RyaW5n
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3JtR0xP
YmplY3Qgc2hhZGVyc1syXSwKICAgICAgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChtYXBwZWRTeW1i
b2wpOwogICAgIH0gd2hpbGUgKHN0YXJ0RnJvbSA8IHN0YXRpY19jYXN0PGludD4obG9nLmxlbmd0
aCgpKSk7CiAKLSAgICBwcm9jZXNzZWRMb2cuYXBwZW5kKGxvZy5zdWJzdHJpbmcoc3RhcnRGcm9t
LCBsb2cubGVuZ3RoKCkgLSBzdGFydEZyb20pKTsKKyAgICBwcm9jZXNzZWRMb2cuYXBwZW5kKFN0
cmluZ1ZpZXcobG9nKS5zdWJzdHJpbmcoc3RhcnRGcm9tLCBsb2cubGVuZ3RoKCkgLSBzdGFydEZy
b20pKTsKIAogICAgIExPRyhXZWJHTCwgIlVubWFuZ2xlZCBTaGFkZXJJbmZvTG9nOlxuJXMiLCBw
cm9jZXNzZWRMb2cudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICByZXR1cm4gcHJvY2Vz
c2VkTG9nLnRvU3RyaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0hUVFBQYXJzZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
SFRUUFBhcnNlcnMuY3BwCmluZGV4IDA0ODgxZGExOGEwYWMzMWY3ZDg1OTM2MWI3ZWNlMWU2Mzgz
OWVjYTcuLjAxOTUxNTA0YjFlODJjNjE5NDZlZjExNDIyZDk2YjRjYWQ5ZTFlOWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuY3BwCkBAIC02MTgs
NyArNjE4LDcgQEAgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8U3RyaW5nVmlldywgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz4+PiBwYXJzZVN0cnVjdHVyZWRGaWUKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICsraW5kZXg7CiAgICAgICAgIH0KLSAgICAgICAgU3RyaW5nIGtleSA9
IGhlYWRlci5zdWJzdHJpbmcoa2V5U3RhcnQsIGluZGV4IC0ga2V5U3RhcnQpLnRvU3RyaW5nKCk7
CisgICAgICAgIFN0cmluZ1ZpZXcga2V5ID0gaGVhZGVyLnN1YnN0cmluZyhrZXlTdGFydCwgaW5k
ZXggLSBrZXlTdGFydCk7CiAgICAgICAgIFN0cmluZyB2YWx1ZSA9ICJ0cnVlIl9zOwogICAgICAg
ICBpZiAoaW5kZXggPCBoZWFkZXIubGVuZ3RoKCkgJiYgaGVhZGVyW2luZGV4XSA9PSAnPScpIHsK
ICAgICAgICAgICAgICsraW5kZXg7IC8vIENvbnN1bWUgJz0nLgpAQCAtNjU5LDE0ICs2NTksMTQg
QEAgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8U3RyaW5nVmlldywgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4+PiBwYXJzZVN0cnVjdHVyZWRGaWUKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIH0KLSAgICAgICAgcGFyYW1ldGVy
cy5zZXQoV1RGTW92ZShrZXkpLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIHBhcmFtZXRlcnMu
c2V0KGtleS50b1N0cmluZygpLCBXVEZNb3ZlKHZhbHVlKSk7CiAgICAgfQogICAgIGlmIChpbmRl
eCAhPSBoZWFkZXIubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAg
cmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGJhcmVJdGVtLCBwYXJhbWV0ZXJzKTsKIH0KIAotYm9vbCBw
YXJzZVJhbmdlKGNvbnN0IFN0cmluZyYgcmFuZ2UsIGxvbmcgbG9uZyYgcmFuZ2VPZmZzZXQsIGxv
bmcgbG9uZyYgcmFuZ2VFbmQsIGxvbmcgbG9uZyYgcmFuZ2VTdWZmaXhMZW5ndGgpCitib29sIHBh
cnNlUmFuZ2UoU3RyaW5nVmlldyByYW5nZSwgbG9uZyBsb25nJiByYW5nZU9mZnNldCwgbG9uZyBs
b25nJiByYW5nZUVuZCwgbG9uZyBsb25nJiByYW5nZVN1ZmZpeExlbmd0aCkKIHsKICAgICAvLyBU
aGUgZm9ybWF0IG9mICJSYW5nZSIgaGVhZGVyIGlzIGRlZmluZWQgaW4gUkZDIDI2MTYgU2VjdGlv
biAxNC4zNS4xLgogICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3Jm
YzI2MTYtc2VjMTQuaHRtbCNzZWMxNC4zNS4xCkBAIC02NzksNyArNjc5LDcgQEAgYm9vbCBwYXJz
ZVJhbmdlKGNvbnN0IFN0cmluZyYgcmFuZ2UsIGxvbmcgbG9uZyYgcmFuZ2VPZmZzZXQsIGxvbmcg
bG9uZyYgcmFuZ2VFbmQKICAgICBpZiAoIXN0YXJ0c1dpdGhMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UocmFuZ2UsICJieXRlcz0iKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8vIEZJWE1F
OiBUaGUgcmVzdCBvZiB0aGlzIHNob3VsZCB1c2UgU3RyaW5nVmlldy4KLSAgICBTdHJpbmcgYnl0
ZVJhbmdlID0gcmFuZ2Uuc3Vic3RyaW5nKGJ5dGVzTGVuZ3RoKTsKKyAgICBTdHJpbmdWaWV3IGJ5
dGVSYW5nZSA9IHJhbmdlLnN1YnN0cmluZyhieXRlc0xlbmd0aCk7CiAKICAgICAvLyBUaGUgJy0n
IGNoYXJhY3RlciBuZWVkcyB0byBiZSBwcmVzZW50LgogICAgIGludCBpbmRleCA9IGJ5dGVSYW5n
ZS5maW5kKCctJyk7CkBAIC02OTAsNyArNjkwLDcgQEAgYm9vbCBwYXJzZVJhbmdlKGNvbnN0IFN0
cmluZyYgcmFuZ2UsIGxvbmcgbG9uZyYgcmFuZ2VPZmZzZXQsIGxvbmcgbG9uZyYgcmFuZ2VFbmQK
ICAgICAvLyBFeGFtcGxlOgogICAgIC8vICAgICAtNTAwCiAgICAgaWYgKCFpbmRleCkgewotICAg
ICAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcnNlSW50ZWdlcjxsb25nIGxvbmc+KFN0cmluZ1ZpZXcg
eyBieXRlUmFuZ2UgfS5zdWJzdHJpbmcoaW5kZXggKyAxKSkpCisgICAgICAgIGlmIChhdXRvIHZh
bHVlID0gcGFyc2VJbnRlZ2VyPGxvbmcgbG9uZz4oYnl0ZVJhbmdlLnN1YnN0cmluZyhpbmRleCAr
IDEpKSkKICAgICAgICAgICAgIHJhbmdlU3VmZml4TGVuZ3RoID0gKnZhbHVlOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC02OTksMTEgKzY5OSwxMSBAQCBib29sIHBhcnNlUmFuZ2Uo
Y29uc3QgU3RyaW5nJiByYW5nZSwgbG9uZyBsb25nJiByYW5nZU9mZnNldCwgbG9uZyBsb25nJiBy
YW5nZUVuZAogICAgIC8vIEV4YW1wbGVzOgogICAgIC8vICAgICAwLTQ5OQogICAgIC8vICAgICA1
MDAtCi0gICAgYXV0byBmaXJzdEJ5dGVQb3MgPSBwYXJzZUludGVnZXI8bG9uZyBsb25nPihTdHJp
bmdWaWV3IHsgYnl0ZVJhbmdlIH0ubGVmdChpbmRleCkpOworICAgIGF1dG8gZmlyc3RCeXRlUG9z
ID0gcGFyc2VJbnRlZ2VyPGxvbmcgbG9uZz4oYnl0ZVJhbmdlLmxlZnQoaW5kZXgpKTsKICAgICBp
ZiAoIWZpcnN0Qnl0ZVBvcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBsYXN0
Qnl0ZVBvc1N0ciA9IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRUUFNwYWNlcyhTdHJpbmdWaWV3
IHsgYnl0ZVJhbmdlIH0uc3Vic3RyaW5nKGluZGV4ICsgMSkpOworICAgIGF1dG8gbGFzdEJ5dGVQ
b3NTdHIgPSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUVFBTcGFjZXMoYnl0ZVJhbmdlLnN1YnN0
cmluZyhpbmRleCArIDEpKTsKICAgICBsb25nIGxvbmcgbGFzdEJ5dGVQb3MgPSAtMTsKICAgICBp
ZiAoIWxhc3RCeXRlUG9zU3RyLmlzRW1wdHkoKSkgewogICAgICAgICBhdXRvIHZhbHVlID0gcGFy
c2VJbnRlZ2VyPGxvbmcgbG9uZz4obGFzdEJ5dGVQb3NTdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5oCmluZGV4IDA1MjhjMDI5MDBiNmMxYzY3YTE3
YjFiYTU2MzAxMGY4MTJmNzVjMjcuLmQ1Y2U3ODI5YjVhZDE2MjNmNjk3MTM4ZjcyOTY1OGRjMGQz
MzczZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBh
cnNlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJz
LmgKQEAgLTg4LDcgKzg4LDcgQEAgV0VCQ09SRV9FWFBPUlQgWEZyYW1lT3B0aW9uc0Rpc3Bvc2l0
aW9uIHBhcnNlWEZyYW1lT3B0aW9uc0hlYWRlcihTdHJpbmdWaWV3KTsKIHN0ZDo6b3B0aW9uYWw8
c3RkOjpwYWlyPFN0cmluZ1ZpZXcsIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Pj4gcGFyc2VTdHJ1
Y3R1cmVkRmllbGRWYWx1ZShTdHJpbmdWaWV3IGhlYWRlcik7CiAKIC8vIC0xIGNvdWxkIGJlIHNl
dCB0byBvbmUgb2YgdGhlIHJldHVybiBwYXJhbWV0ZXJzIHRvIGluZGljYXRlIHRoZSB2YWx1ZSBp
cyBub3Qgc3BlY2lmaWVkLgotV0VCQ09SRV9FWFBPUlQgYm9vbCBwYXJzZVJhbmdlKGNvbnN0IFN0
cmluZyYsIGxvbmcgbG9uZyYgcmFuZ2VPZmZzZXQsIGxvbmcgbG9uZyYgcmFuZ2VFbmQsIGxvbmcg
bG9uZyYgcmFuZ2VTdWZmaXhMZW5ndGgpOworV0VCQ09SRV9FWFBPUlQgYm9vbCBwYXJzZVJhbmdl
KFN0cmluZ1ZpZXcsIGxvbmcgbG9uZyYgcmFuZ2VPZmZzZXQsIGxvbmcgbG9uZyYgcmFuZ2VFbmQs
IGxvbmcgbG9uZyYgcmFuZ2VTdWZmaXhMZW5ndGgpOwogCiBDb250ZW50VHlwZU9wdGlvbnNEaXNw
b3NpdGlvbiBwYXJzZUNvbnRlbnRUeXBlT3B0aW9uc0hlYWRlcihTdHJpbmdWaWV3IGhlYWRlcik7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIuY3BwCmlu
ZGV4IDQyZmE2MTE4Y2VmMWFjYmZlMmVjYWNlZGFhZWEyNjIxNzAzNmVhMGUuLjFhOWI4M2VlZjU3
NzIxZmZjNWUxMTBhMDgzNGJiMDMxMDY3NTVlMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcApAQCAtNTYsNyArNTYsNyBAQCBzdGF0aWMgS2V5
VmFsdWVNYXAgcmV0cmlldmVLZXlWYWx1ZVBhaXJzKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlckNodW5r
UmVhZGVyJiBidWZmZQogICAgICAgICAgICAgYnJlYWs7IC8vIEVtcHR5IGxpbmUgbWVhbnMgZW5k
IG9mIGtleS92YWx1ZSBzZWN0aW9uLgogICAgICAgICBpZiAobGluZVswXSA9PSAnXHQnKSB7CiAg
ICAgICAgICAgICBBU1NFUlQoIWtleS5pc0VtcHR5KCkpOwotICAgICAgICAgICAgdmFsdWUuYXBw
ZW5kKGxpbmUuc3Vic3RyaW5nKDEpKTsKKyAgICAgICAgICAgIHZhbHVlLmFwcGVuZChTdHJpbmdW
aWV3KGxpbmUpLnN1YnN0cmluZygxKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogICAgICAgICAvLyBOZXcga2V5L3ZhbHVlLCBzdG9yZSB0aGUgcHJldmlvdXMgb25lIGlmIGFu
eS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGFyc2VkQ29u
dGVudFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QYXJzZWRDb250
ZW50VHlwZS5jcHAKaW5kZXggYjJlN2JkZDNmOWZlZGYyODY5YTExYmM3NjNiZWM2NzQ1YjUzOWIy
YS4uNmI5MTY1OTE0YzFmYzEyMzIzODk3Y2E1MmQ3MzcyZDc2NjEzNTEyOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QYXJzZWRDb250ZW50VHlwZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QYXJzZWRDb250ZW50VHlwZS5jcHAK
QEAgLTM2NSw5ICszNjUsOSBAQCBzaXplX3QgUGFyc2VkQ29udGVudFR5cGU6OnBhcmFtZXRlckNv
dW50KCkgY29uc3QKICAgICByZXR1cm4gbV9wYXJhbWV0ZXJWYWx1ZXMuc2l6ZSgpOwogfQogCi12
b2lkIFBhcnNlZENvbnRlbnRUeXBlOjpzZXRDb250ZW50VHlwZShTdHJpbmdWaWV3IGNvbnRlbnRS
YW5nZSwgTW9kZSBtb2RlKQordm9pZCBQYXJzZWRDb250ZW50VHlwZTo6c2V0Q29udGVudFR5cGUo
U3RyaW5nJiYgY29udGVudFJhbmdlLCBNb2RlIG1vZGUpCiB7Ci0gICAgbV9taW1lVHlwZSA9IGNv
bnRlbnRSYW5nZS50b1N0cmluZygpOworICAgIG1fbWltZVR5cGUgPSBXVEZNb3ZlKGNvbnRlbnRS
YW5nZSk7CiAgICAgaWYgKG1vZGUgPT0gTW9kZTo6TWltZVNuaWZmKQogICAgICAgICBtX21pbWVU
eXBlID0gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVFRQU3BhY2VzKG1fbWltZVR5cGUpLmNvbnZl
cnRUb0FTQ0lJTG93ZXJjYXNlKCk7CiAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9QYXJzZWRDb250ZW50VHlwZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9QYXJzZWRDb250ZW50VHlwZS5oCmluZGV4IGQyMmI5NzI1MmU5Y2Iz
ZmQyMWI4ZDU5NGE1YmE4ZDQ0M2JhNTBiZWIuLjQ2YTVmNWMzMDU4Mjc0NGM1MzE1ZTRmMDJiYmIz
MmNhZDZiZDA4MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UGFyc2VkQ29udGVudFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1BhcnNlZENvbnRlbnRUeXBlLmgKQEAgLTYzLDcgKzYzLDcgQEAgcHJpdmF0ZToKICAgICBQYXJz
ZWRDb250ZW50VHlwZShjb25zdCBQYXJzZWRDb250ZW50VHlwZSYpID0gZGVsZXRlOwogICAgIFBh
cnNlZENvbnRlbnRUeXBlJiBvcGVyYXRvcj0oUGFyc2VkQ29udGVudFR5cGUgY29uc3QmKSA9IGRl
bGV0ZTsKICAgICBib29sIHBhcnNlQ29udGVudFR5cGUoTW9kZSk7Ci0gICAgdm9pZCBzZXRDb250
ZW50VHlwZShTdHJpbmdWaWV3LCBNb2RlKTsKKyAgICB2b2lkIHNldENvbnRlbnRUeXBlKFN0cmlu
ZyYmLCBNb2RlKTsKICAgICB2b2lkIHNldENvbnRlbnRUeXBlUGFyYW1ldGVyKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYsIE1vZGUpOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
U3RyaW5nPiBLZXlWYWx1ZVBhaXJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RNYXJrZXIuY3BwCmluZGV4IDg1YjZhM2NlMTAyOWYyZGM0MzcxMWY2NGQxMDU5MjAzYjBi
OTZiN2UuLmQ3ODU2ZjZkOGU4ZGQ2OTJjYmNhY2Q3NzRlMWQwZDBjZDNjZmMxZTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAKQEAgLTE1NjIsMTMg
KzE1NjIsMTMgQEAgYXV0byBSZW5kZXJMaXN0TWFya2VyOjp0ZXh0UnVuKCkgY29uc3QgLT4gVGV4
dFJ1bldpdGhVbmRlcmx5aW5nU3RyaW5nCiAgICAgICAgICAgICBpZiAoc3R5bGUoKS5saXN0U3R5
bGVUeXBlKCkgPT0gTGlzdFN0eWxlVHlwZTo6RGlzY2xvc3VyZUNsb3NlZCkKICAgICAgICAgICAg
ICAgICB0ZXh0Rm9yUnVuID0geyAmYmxhY2tMZWZ0UG9pbnRpbmdTbWFsbFRyaWFuZ2xlLCAxIH07
CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdGV4dEZvclJ1biA9IG1ha2VTdHJp
bmcocmV2ZXJzZWQobV90ZXh0V2l0aFN1ZmZpeC5zdWJzdHJpbmcobV90ZXh0V2l0aG91dFN1ZmZp
eExlbmd0aCkpLCBtX3RleHRXaXRoU3VmZml4LmxlZnQobV90ZXh0V2l0aG91dFN1ZmZpeExlbmd0
aCkpOworICAgICAgICAgICAgICAgIHRleHRGb3JSdW4gPSBtYWtlU3RyaW5nKHJldmVyc2VkKFN0
cmluZ1ZpZXcobV90ZXh0V2l0aFN1ZmZpeCkuc3Vic3RyaW5nKG1fdGV4dFdpdGhvdXRTdWZmaXhM
ZW5ndGgpKSwgbV90ZXh0V2l0aFN1ZmZpeC5sZWZ0KG1fdGV4dFdpdGhvdXRTdWZmaXhMZW5ndGgp
KTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghc3R5bGUoKS5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAgICAgICB0ZXh0Rm9yUnVuID0gcmV2ZXJzZWQobV90
ZXh0V2l0aFN1ZmZpeCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRleHRGb3JSdW4gPSBt
YWtlU3RyaW5nKHJldmVyc2VkKG1fdGV4dFdpdGhTdWZmaXgubGVmdChtX3RleHRXaXRob3V0U3Vm
Zml4TGVuZ3RoKSksIG1fdGV4dFdpdGhTdWZmaXguc3Vic3RyaW5nKG1fdGV4dFdpdGhvdXRTdWZm
aXhMZW5ndGgpKTsKKyAgICAgICAgICAgIHRleHRGb3JSdW4gPSBtYWtlU3RyaW5nKHJldmVyc2Vk
KFN0cmluZ1ZpZXcobV90ZXh0V2l0aFN1ZmZpeCkubGVmdChtX3RleHRXaXRob3V0U3VmZml4TGVu
Z3RoKSksIG1fdGV4dFdpdGhTdWZmaXguc3Vic3RyaW5nKG1fdGV4dFdpdGhvdXRTdWZmaXhMZW5n
dGgpKTsKICAgICB9CiAgICAgYXV0byB0ZXh0UnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRl
eHRSdW4odGV4dEZvclJ1biwgc3R5bGUoKSk7CiAgICAgcmV0dXJuIHsgV1RGTW92ZSh0ZXh0UnVu
KSwgV1RGTW92ZSh0ZXh0Rm9yUnVuKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9jb2NvYS9JbWFnZUFuYWx5c2lzVXRpbGl0aWVzLm1tIGIvU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9jb2NvYS9JbWFnZUFuYWx5c2lzVXRpbGl0aWVzLm1tCmluZGV4IDAxNTMzNzkxZGMxODUy
Y2RhYTViOGNkYTQzODA3ZmEyMzgzZDIyOTcuLjdkMWE1YzZkOTVjMWY2M2JkMzA0ODAwYTk1ZWJm
NDFmZDhlNTg1NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY29jb2EvSW1h
Z2VBbmFseXNpc1V0aWxpdGllcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NvY29h
L0ltYWdlQW5hbHlzaXNVdGlsaXRpZXMubW0KQEAgLTEwNCw3ICsxMDQsNyBAQCBUZXh0UmVjb2du
aXRpb25SZXN1bHQgbWFrZVRleHRSZWNvZ25pdGlvblJlc3VsdChDb2NvYUltYWdlQW5hbHlzaXMg
KmFuYWx5c2lzKQogICAgICAgICAgICAgICAgIGlmIChtYXRjaExvY2F0aW9uID09IHNlYXJjaExv
Y2F0aW9uKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWlzRmlyc3RMaW5lICYmICFzZWFy
Y2hMb2NhdGlvbjsKIAotICAgICAgICAgICAgICAgIGF1dG8gdGV4dEJlZm9yZU1hdGNoID0gbGlu
ZVRleHQuc3Vic3RyaW5nKHNlYXJjaExvY2F0aW9uLCBtYXRjaExvY2F0aW9uIC0gc2VhcmNoTG9j
YXRpb24pOworICAgICAgICAgICAgICAgIGF1dG8gdGV4dEJlZm9yZU1hdGNoID0gU3RyaW5nVmll
dyhsaW5lVGV4dCkuc3Vic3RyaW5nKHNlYXJjaExvY2F0aW9uLCBtYXRjaExvY2F0aW9uIC0gc2Vh
cmNoTG9jYXRpb24pOwogICAgICAgICAgICAgICAgIHJldHVybiAhdGV4dEJlZm9yZU1hdGNoLmlz
RW1wdHkoKSAmJiBpc1NwYWNlT3JOZXdsaW5lKHRleHRCZWZvcmVNYXRjaFswXSk7CiAgICAgICAg
ICAgICB9KSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9N
ZWRpYVBlcm1pc3Npb25VdGlsaXRpZXMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9NZWRpYVBlcm1pc3Npb25VdGlsaXRpZXMubW0KaW5kZXggMGJjMTdmZmZmYTdhNDhlYzdhYmE0
OTBjZjNhZjIzYjJiNWY2YjhkMS4uMGYxNTJiZjNhZTVjMjg5ZTFjOGI5ZjE1ODQ1ZjA1ZDlhYTdi
ZDdhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTWVkaWFQZXJt
aXNzaW9uVXRpbGl0aWVzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL01l
ZGlhUGVybWlzc2lvblV0aWxpdGllcy5tbQpAQCAtMTA5LDcgKzEwOSw3IEBAIGJvb2wgY2hlY2tV
c2FnZURlc2NyaXB0aW9uU3RyaW5nRm9yU3BlZWNoUmVjb2duaXRpb24oKQogc3RhdGljIE5TU3Ry
aW5nKiB2aXNpYmxlRG9tYWluKGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKICAgICBhdXRvIGRvbWFp
biA9IFdURjo6VVJMSGVscGVyczo6dXNlclZpc2libGVVUkwoaG9zdC51dGY4KCkpOwotICAgIHJl
dHVybiBzdGFydHNXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGRvbWFpbiwgInd3dy4iKSA/
IGRvbWFpbi5zdWJzdHJpbmcoNCkgOiBkb21haW47CisgICAgcmV0dXJuIHN0YXJ0c1dpdGhMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UoZG9tYWluLCAid3d3LiIpID8gU3RyaW5nVmlldyhkb21haW4p
LnN1YnN0cmluZyg0KS5jcmVhdGVOU1N0cmluZygpLmF1dG9yZWxlYXNlKCkgOiBzdGF0aWNfY2Fz
dDxOU1N0cmluZyAqPihkb21haW4pOwogfQogCiBOU1N0cmluZyAqYXBwbGljYXRpb25WaXNpYmxl
TmFtZUZyb21PcmlnaW4oY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiBvcmlnaW4p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3
LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCmlu
ZGV4IDdiYjFlOTI4N2RkMDBjZDY3MzYyZWE5ZGMxY2Q2ODFhOGI5MmE3ZWIuLjc0Y2U4ZDk3Y2E1
NzBjMGE4OGM1MmU4YWM0MWJlZDViN2YyYjBlMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC0xMDgwLDcgKzEwODAsOCBAQCB2b2lk
IFBsdWdpblZpZXc6OnBlcmZvcm1KYXZhU2NyaXB0VVJMUmVxdWVzdChVUkxSZXF1ZXN0KiByZXF1
ZXN0KQogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBTdHJpbmcg
anNTdHJpbmcgPSBQQUw6OmRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhyZXF1ZXN0LT5yZXF1ZXN0
KCkudXJsKCkuc3RyaW5nKCkuc3Vic3RyaW5nKHNpemVvZigiamF2YXNjcmlwdDoiKSAtIDEpKTsK
KyAgICBhdXRvIHVybFN0cmluZyA9IHJlcXVlc3QtPnJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKTsK
KyAgICBTdHJpbmcganNTdHJpbmcgPSBQQUw6OmRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhTdHJp
bmdWaWV3KHVybFN0cmluZykuc3Vic3RyaW5nKHNpemVvZigiamF2YXNjcmlwdDoiKSAtIDEpKTsK
IAogICAgIGlmICghcmVxdWVzdC0+dGFyZ2V0KCkuaXNOdWxsKCkpIHsKICAgICAgICAgLy8gRm9y
IHNlY3VyaXR5IHJlYXNvbnMsIG9ubHkgYWxsb3cgSlMgcmVxdWVzdHMgdG8gYmUgbWFkZSBvbiB0
aGUgZnJhbWUgdGhhdCBjb250YWlucyB0aGUgcGx1Zy1pbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViVXNlckNvbnRlbnRVUkxQYXR0ZXJuLm1tIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJVc2VyQ29udGVudFVSTFBhdHRlcm4ubW0KaW5kZXgg
YjcyNjU4M2Y5NzRjZGRmNzY2MTdmMmFkMThkMzk4ZjQwM2I5MTNiZS4uZjJmOGM4NzQ3ODJjNzM0
ODAxYzY3NTc4OTVmZTEwN2NjZDgxNjEwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvTWlzYy9XZWJVc2VyQ29udGVudFVSTFBhdHRlcm4ubW0KKysrIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvTWlzYy9XZWJVc2VyQ29udGVudFVSTFBhdHRlcm4ubW0KQEAgLTQ4LDcgKzQ4
LDcgQEAgLSAoaWQpaW5pdFdpdGhQYXR0ZXJuU3RyaW5nOihOU1N0cmluZyAqKXBhdHRlcm5TdHJp
bmcKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIF9wcml2YXRlID0gW1tXZWJVc2VyQ29udGVu
dFVSTFBhdHRlcm5Qcml2YXRlIGFsbG9jXSBpbml0XTsKLSAgICBfcHJpdmF0ZS0+cGF0dGVybiA9
IFVzZXJDb250ZW50VVJMUGF0dGVybihwYXR0ZXJuU3RyaW5nKTsKKyAgICBfcHJpdmF0ZS0+cGF0
dGVybiA9IFVzZXJDb250ZW50VVJMUGF0dGVybihTdHJpbmcocGF0dGVyblN0cmluZykpOwogCiAg
ICAgcmV0dXJuIHNlbGY7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457731</attachid>
            <date>2022-04-15 16:14:23 -0700</date>
            <delta_ts>2022-04-15 21:45:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-239356-20220415161423.patch</filename>
            <type>text/plain</type>
            <size>73148</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyOTIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MWQ5NjhkYmY5YmRjZWZlZDcwMzI4MDE0NTRmNzgwMWZhNjAyODI2Li5jZDIxNjM5YjdjNTM5MzI1
NmViODU0OWIyZGY0ZDMyZDIxNjkwNTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNiBAQAorMjAyMi0wNC0xNSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIExldmVyYWdlIFN0cmluZ1ZpZXcgaW4gbW9yZSBwbGFjZXMgdG8gYXZvaWQgc29t
ZSBTdHJpbmcgYWxsb2NhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzOTM1NgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgor
CisgICAgICAgICogaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlsaXRpZXMuY3BwOgorICAgICAg
ICAoSW5zcGVjdG9yOjpDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpnZXRSZWd1bGFyRXhwcmVzc2lv
bk1hdGNoZXNCeUxpbmVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6Q29udGVudFNlYXJjaFV0aWxp
dGllczo6ZmluZE1hZ2ljQ29tbWVudCk6CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxw
ZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6aW52YWxpZFBhcmFtZXRlckluU291cmNlQXBwZW5kZXIp
OgorICAgICAgICAoSlNDOjppbnZhbGlkUGFyYW1ldGVySW5zdGFuY2VvZlNvdXJjZUFwcGVuZGVy
KToKKyAgICAgICAgKiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHA6CisgICAgICAgIChK
U0M6OkludGxEYXRlVGltZUZvcm1hdDo6Zm9ybWF0VG9QYXJ0cyBjb25zdCk6CisgICAgICAgIChK
U0M6OkludGxEYXRlVGltZUZvcm1hdDo6Zm9ybWF0UmFuZ2VUb1BhcnRzKToKKyAgICAgICAgKiBy
dW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bExpc3RGb3JtYXQ6
OmZvcm1hdFRvUGFydHMgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE51bWJlckZvcm1h
dC5jcHA6CisgICAgICAgIChKU0M6OkludGxOdW1iZXJGb3JtYXQ6OmZvcm1hdFJhbmdlVG9QYXJ0
c0ludGVybmFsKToKKyAgICAgICAgKiB0b29scy9GdW5jdGlvbk92ZXJyaWRlcy5jcHA6CisgICAg
ICAgIChKU0M6OmluaXRpYWxpemVPdmVycmlkZUluZm8pOgorCiAyMDIyLTA0LTE1ICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBBcHBseSBwdXJpZnlOYU4gaW4gbW9y
ZSBwbGFjZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjU5YTk4Y2Y5Zjg4NTlhNDQyYmM4ZGZiY2U2ODNhNzRk
N2Q4NmY1NS4uYWZhNTcyYTg2NjFmODUxODFjODEwMzMyY2QxNDEwM2M0YmY4YzUwYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDk2IEBACisyMDIyLTA0LTE1ICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CisKKyAgICAgICAgTGV2ZXJhZ2UgU3RyaW5nVmlldyBpbiBtb3JlIHBsYWNlcyB0
byBhdm9pZCBzb21lIFN0cmluZyBhbGxvY2F0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM5MzU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIuCisKKyAgICAgICAgKiBNb2R1bGVzL2ZldGNoL0ZldGNoQm9keUNvbnN1bWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keUNvbnN1bWVyOjpwYWNrYWdlRm9ybURhdGEp
OgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1J0cFRy
YW5zY2VpdmVyQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b1J0cENvZGVjQ2FwYWJp
bGl0eSk6CisgICAgICAgICogTW9kdWxlcy9tb2RlbC1lbGVtZW50L3NjZW5la2l0L1NjZW5lS2l0
TW9kZWxMb2FkZXIubW06CisgICAgICAgIChXZWJDb3JlOjptaW1lVHlwZVV0aWxpemluZ0ZpbGVF
eHRlbnNpb25PdmVycmlkaW5nRm9yTG9jYWxGaWxlcyk6CisgICAgICAgICogTW9kdWxlcy9wbHVn
aW5zL1BsdWdpblJlcGxhY2VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlbWVudFBs
dWdpbjo6c3VwcG9ydHNGaWxlRXh0ZW5zaW9uIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3Bs
dWdpbnMvWW91VHViZVBsdWdpblJlcGxhY2VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ollv
dVR1YmVQbHVnaW5SZXBsYWNlbWVudDo6c3VwcG9ydHNGaWxlRXh0ZW5zaW9uKToKKyAgICAgICAg
KiBNb2R1bGVzL3BsdWdpbnMvWW91VHViZVBsdWdpblJlcGxhY2VtZW50Lmg6CisgICAgICAgICog
YW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1l
RWZmZWN0OjpzZXRQc2V1ZG9FbGVtZW50KToKKyAgICAgICAgKiBjc3MvQ29udGFpbmVyUXVlcnlQ
YXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyUXVlcnlQYXJzZXI6OmNvbnN1
bWVQbGFpblNpemVGZWF0dXJlKToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1NlbGVjdG9yUGFy
c2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN1bWVBTlBsdXNCKToKKyAgICAgICAgKiBk
b20vU2VjdXJpdHlDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5Q29udGV4
dDo6cGFyc2VTYW5kYm94UG9saWN5KToKKyAgICAgICAgKiBkb20vU2VjdXJpdHlDb250ZXh0Lmg6
CisgICAgICAgICogZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmlzQmxvYlVSTENvbnRhaW5zTnVsbE9yaWdpbik6CisgICAgICAgICogaHRtbC9E
T01Ub2tlbkxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NVG9rZW5MaXN0Ojp1cGRhdGVU
b2tlbnNGcm9tQXR0cmlidXRlVmFsdWUpOgorICAgICAgICAqIGh0bWwvRE9NVG9rZW5MaXN0Lmg6
CisgICAgICAgICogaHRtbC9IVE1MTWFwRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWFwRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTFBsdWdJ
bkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGx1Z2luUmVwbGFjZW1lbnRGb3JUeXBl
KToKKyAgICAgICAgKiBodG1sL3RyYWNrL1dlYlZUVFBhcnNlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXZWJWVFRQYXJzZXI6OmNoZWNrQW5kQ3JlYXRlUmVnaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYlZUVFBhcnNlcjo6Y2hlY2tBbmRTdG9yZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJWVFRQYXJzZXI6OmNoZWNrU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJW
VFRQYXJzZXI6OmNoZWNrQW5kU3RvcmVTdHlsZVNoZWV0KToKKyAgICAgICAgKiBodG1sL3RyYWNr
L1dlYlZUVFBhcnNlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRIYW5kbGVyOjpvYnNlcnZlUHJvcGVy
dHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEhhbmRsZXI6Om9ic2VydmVDb21tZW50
KToKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5l
QnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OnRvU3RyaW5nKToKKyAgICAg
ICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9kaXNwbGF5L0lubGluZURpc3Bs
YXlDb250ZW50QnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZURp
c3BsYXlDb250ZW50QnVpbGRlcjo6YXBwZW5kVGV4dERpc3BsYXlCb3gpOgorICAgICAgICAqIGxh
eW91dC9sYXlvdXR0cmVlL0xheW91dElubGluZVRleHRCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lVGV4dEJveDo6Y29udGVudCBjb25zdCk6CisgICAgICAgICogbG9hZGVy
L2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZTo6d3JpdGVEYXRhVG9VbmlxdWVGaWxlSW5EaXJlY3RvcnkpOgor
ICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oOgorICAg
ICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhY2hlZFNWR0ZvbnQ6OmdldFNWR0ZvbnRCeUlkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNhY2hlZFNWR0ZvbnQ6Om1heWJlSW5pdGlhbGl6ZUV4dGVybmFsU1ZHRm9udEVsZW1lbnQpOgor
ICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250Lmg6CisgICAgICAgICogcGFnZS9M
b2NhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2NhdGlvbjo6c2V0SGFzaCk6CisgICAg
ICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnVzZXJTdHlsZVNo
ZWV0TG9jYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKiBwYWdlL1VzZXJDb250ZW50VVJMUGF0dGVy
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudFVSTFBhdHRlcm46OnBhcnNlKToK
KyAgICAgICAgKiBwYWdlL1VzZXJDb250ZW50VVJMUGF0dGVybi5oOgorICAgICAgICAoV2ViQ29y
ZTo6VXNlckNvbnRlbnRVUkxQYXR0ZXJuOjpVc2VyQ29udGVudFVSTFBhdHRlcm4pOgorICAgICAg
ICAqIHBsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dHlw
ZXNGb3JDb21tb25FeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3Ry
eTo6bWVkaWFNSU1FVHlwZUZvckV4dGVuc2lvbik6CisgICAgICAgICogcGxhdGZvcm0vTUlNRVR5
cGVSZWdpc3RyeS5oOgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL0RyYWdJbWFnZUNvY29hLm1t
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlSWNvbkZvckNhY2hlZEltYWdlRmls
ZW5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpsb2FkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OmdldFVubWFuZ2xlZEluZm9Mb2cpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRl
QVZGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnBy
b2Nlc3NDdWVBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFVubWFuZ2xlZEluZm9Mb2cpOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvSFRUUFBhcnNlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VTdHJ1Y3R1
cmVkRmllbGRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVJhbmdlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9NSU1FSGVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJldHJpZXZlS2V5VmFsdWVQ
YWlycyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9QYXJzZWRDb250ZW50VHlwZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQYXJzZWRDb250ZW50VHlwZTo6c2V0Q29udGVudFR5cGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUGFyc2VkQ29udGVudFR5cGUuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMaXN0TWFya2VyOjp0ZXh0UnVuIGNvbnN0KToKKwogMjAyMi0wNC0xNSAgQW50b2luZSBRdWlu
dCAgPGdyYW91dHNAYXBwbGUuY29tPgogCiAgICAgICAgIFdLV2ViVmlldyBmYWxzZSBwb3NpdGl2
ZSB3aGVuIHRlc3RpbmcgYS5yZWxMaXN0LnN1cHBvcnRzKCJhciIpLCBmYWlscyB0byBvcGVuIFVT
RFogaW4gQVIgUXVpY2tMb29rCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDZjNDQ5YTQxMTlmYTU4MTdmMDAzOTNjMWU4
NmQ0MzJmNmRjNmM3NTAuLmNmZjE4NzE3Yjk0Y2NhM2JkODhmYmI0MWE0MjI5MWEyMjY1YzQ2MWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjItMDQtMTUgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBMZXZlcmFnZSBTdHJpbmdWaWV3IGluIG1vcmUgcGxh
Y2VzIHRvIGF2b2lkIHNvbWUgU3RyaW5nIGFsbG9jYXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzkzNTYKKworICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBBZGxlci4KKworICAgICAgICAqIFBsYXRmb3JtL2NvY29hL0ltYWdlQW5hbHlzaXNV
dGlsaXRpZXMubW06CisgICAgICAgIChXZWJLaXQ6Om1ha2VUZXh0UmVjb2duaXRpb25SZXN1bHQp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9NZWRpYVBlcm1pc3Npb25VdGlsaXRpZXMubW06
CisgICAgICAgIChXZWJLaXQ6OnZpc2libGVEb21haW4pOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6cGVy
Zm9ybUphdmFTY3JpcHRVUkxSZXF1ZXN0KToKKwogMjAyMi0wNC0xNSAgQnJlbnQgRnVsZ2hhbSAg
PGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMjkxODQzKTogQnJv
a2VuIE5ldGZsaXggYW5kIEFtYXpvbiB2aWRlbyBwbGF5YmFjawpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hh
bmdlTG9nCmluZGV4IDkyNzZlM2IzYWJjOGFmMzU2Njg3MWY3ODlmYTMyMDMyZmQxNGQxNTAuLmRh
NDNhZDQwYmU0ZWU2NTkxZTJjNjM0Mzc4NTkxMTVmYmVmMjhhYjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMi0wNC0xNSAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIExldmVyYWdlIFN0cmluZ1ZpZXcgaW4gbW9yZSBw
bGFjZXMgdG8gYXZvaWQgc29tZSBTdHJpbmcgYWxsb2NhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTM1NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgICogTWlzYy9XZWJVc2VyQ29udGVudFVSTFBhdHRl
cm4ubW06CisgICAgICAgICgtW1dlYlVzZXJDb250ZW50VVJMUGF0dGVybiBpbml0V2l0aFBhdHRl
cm5TdHJpbmc6XSk6CisKIDIwMjItMDQtMTQgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxl
LmNvbT4KIAogICAgICAgICBbSlNDXSBSZWR1Y2UgdXNlIG9mIENhbGxGcmFtZTo6ZGVwcmVjYXRl
ZFZNCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnRlbnRT
ZWFyY2hVdGlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db250
ZW50U2VhcmNoVXRpbGl0aWVzLmNwcAppbmRleCAxMjUxMDQzOGIyZmM5YjQ2ODZhNmM1ODdjNWE4
NmQ0ZTgzYTM5MTQ1Li5iNDQ5NDA0ZTNjZjYxNjExMTc3YTcyMWU4MDM2NDI3YTZkM2FjZDZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hV
dGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29udGVu
dFNlYXJjaFV0aWxpdGllcy5jcHAKQEAgLTg3LDExICs4NywxMSBAQCBzdGF0aWMgVmVjdG9yPHN0
ZDo6cGFpcjxzaXplX3QsIFN0cmluZz4+IGdldFJlZ3VsYXJFeHByZXNzaW9uTWF0Y2hlc0J5TGlu
ZXMoY29ucwogCiAgICAgZm9yIChzaXplX3QgbGluZU51bWJlciA9IDA7IGxpbmVOdW1iZXIgPCBz
aXplOyArK2xpbmVOdW1iZXIpIHsKICAgICAgICAgc2l6ZV90IG5leHRTdGFydCA9IGVuZGluZ3Nb
bGluZU51bWJlcl07Ci0gICAgICAgIFN0cmluZyBsaW5lID0gdGV4dC5zdWJzdHJpbmcoc3RhcnQs
IG5leHRTdGFydCAtIHN0YXJ0KTsKKyAgICAgICAgYXV0byBsaW5lID0gU3RyaW5nVmlldyh0ZXh0
KS5zdWJzdHJpbmcoc3RhcnQsIG5leHRTdGFydCAtIHN0YXJ0KTsKIAogICAgICAgICBpbnQgbWF0
Y2hMZW5ndGg7CiAgICAgICAgIGlmIChyZWdleC5tYXRjaChsaW5lLCAwLCAmbWF0Y2hMZW5ndGgp
ICE9IC0xKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGQ6OnBhaXI8c2l6ZV90LCBTdHJp
bmc+KGxpbmVOdW1iZXIsIGxpbmUpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeyBsaW5l
TnVtYmVyLCBsaW5lLnRvU3RyaW5nKCkgfSk7CiAKICAgICAgICAgc3RhcnQgPSBuZXh0U3RhcnQ7
CiAgICAgfQpAQCAtMTc1LDcgKzE3NSw3IEBAIFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpH
ZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4gc2VhcmNoSW5UZXh0QnlMaW5lcyhjb25zCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIFN0cmluZyBmaW5kTWFnaWNDb21tZW50KGNvbnN0
IFN0cmluZyYgY29udGVudCwgY29uc3QgU3RyaW5nJiBwYXR0ZXJuU3RyaW5nKQorc3RhdGljIFN0
cmluZyBmaW5kTWFnaWNDb21tZW50KGNvbnN0IFN0cmluZyYgY29udGVudCwgQVNDSUlMaXRlcmFs
IHBhdHRlcm5TdHJpbmcpCiB7CiAgICAgaWYgKGNvbnRlbnQuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGNlcHRpb25IZWxwZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
Y2VwdGlvbkhlbHBlcnMuY3BwCmluZGV4IDE2MWYzZTY5ZDQzYjg5ZDgzZjU3ZmM3ZmMxZjMxYzBk
MjJhMDQ4ZWQuLjRkNWU1NGIwYTA4NGQxMzlkNjM5YjVkZjM3MmQ2YjAyZTMwYzA3YTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3Bw
CkBAIC0yMDgsNyArMjA4LDcgQEAgc3RhdGljIFN0cmluZyBpbnZhbGlkUGFyYW1ldGVySW5Tb3Vy
Y2VBcHBlbmRlcihjb25zdCBTdHJpbmcmIG9yaWdpbmFsTWVzc2FnZSwgU3QKICAgICAgICAgcmV0
dXJuIG1ha2VTdHJpbmcob3JpZ2luYWxNZXNzYWdlLCAiIChldmFsdWF0aW5nICciLCBzb3VyY2VU
ZXh0LCAiJykiKTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgaW5MZW5ndGggPSAy
OwotICAgIFN0cmluZyByaWdodEhhbmRTaWRlID0gc291cmNlVGV4dC5zdWJzdHJpbmcoaW5JbmRl
eCArIGluTGVuZ3RoKS50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkuc2ltcGxpZnlXaGl0ZVNwYWNl
KCk7CisgICAgU3RyaW5nVmlldyByaWdodEhhbmRTaWRlID0gc291cmNlVGV4dC5zdWJzdHJpbmco
aW5JbmRleCArIGluTGVuZ3RoKS5zdHJpcExlYWRpbmdBbmRUcmFpbGluZ01hdGNoZWRDaGFyYWN0
ZXJzKGlzU3BhY2VPck5ld2xpbmUpOwogICAgIHJldHVybiBtYWtlU3RyaW5nKHJpZ2h0SGFuZFNp
ZGUsICIgaXMgbm90IGFuIE9iamVjdC4gKGV2YWx1YXRpbmcgJyIsIHNvdXJjZVRleHQsICInKSIp
OwogfQogCkBAIC0yMjcsNyArMjI3LDcgQEAgaW5saW5lIFN0cmluZyBpbnZhbGlkUGFyYW1ldGVy
SW5zdGFuY2VvZlNvdXJjZUFwcGVuZGVyKGNvbnN0IFN0cmluZyYgY29udGVudCwgY28KICAgICAg
ICAgcmV0dXJuIG1ha2VTdHJpbmcob3JpZ2luYWxNZXNzYWdlLCAiIChldmFsdWF0aW5nICciLCBz
b3VyY2VUZXh0LCAiJykiKTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgaW5zdGFu
Y2VvZkxlbmd0aCA9IDEwOwotICAgIFN0cmluZyByaWdodEhhbmRTaWRlID0gc291cmNlVGV4dC5z
dWJzdHJpbmcoaW5zdGFuY2VvZkluZGV4ICsgaW5zdGFuY2VvZkxlbmd0aCkudG9TdHJpbmdXaXRo
b3V0Q29weWluZygpLnNpbXBsaWZ5V2hpdGVTcGFjZSgpOworICAgIFN0cmluZ1ZpZXcgcmlnaHRI
YW5kU2lkZSA9IHNvdXJjZVRleHQuc3Vic3RyaW5nKGluc3RhbmNlb2ZJbmRleCArIGluc3RhbmNl
b2ZMZW5ndGgpLnN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nTWF0Y2hlZENoYXJhY3RlcnMoaXNTcGFj
ZU9yTmV3bGluZSk7CiAgICAgcmV0dXJuIG1ha2VTdHJpbmcocmlnaHRIYW5kU2lkZSwgY29udGVu
dCwgIi4gKGV2YWx1YXRpbmcgJyIsIHNvdXJjZVRleHQsICInKSIpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAppbmRl
eCAyYjI3Yzg4MjBmYmM5MjJiOTM1NGU2ZTA3MGRmMjM5NDI4MGUxNTU3Li40N2NjODQ2YjQxMjA2
N2UyNWZiOTE4MTIwMGI2M2IxZjYxMzcyOTg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAKQEAgLTEzODEsNyArMTM4MSw3
IEBAIEpTVmFsdWUgSW50bERhdGVUaW1lRm9ybWF0Ojpmb3JtYXRUb1BhcnRzKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGRvdWJsZSB2CiAgICAgaWYgKCFwYXJ0cykKICAgICAgICAgcmV0
dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKIAotICAgIGF1
dG8gcmVzdWx0U3RyaW5nID0gU3RyaW5nKHJlc3VsdCk7CisgICAgU3RyaW5nVmlldyByZXN1bHRT
dHJpbmdWaWV3KHJlc3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkpOwogICAgIGF1dG8gbGl0ZXJh
bFN0cmluZyA9IGpzTm9udHJpdmlhbFN0cmluZyh2bSwgImxpdGVyYWwiX3MpOwogCiAgICAgaW50
MzJfdCByZXN1bHRMZW5ndGggPSByZXN1bHQuc2l6ZSgpOwpAQCAtMTM5NCw3ICsxMzk0LDcgQEAg
SlNWYWx1ZSBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmZvcm1hdFRvUGFydHMoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgZG91YmxlIHYKICAgICAgICAgICAgIGJlZ2luSW5kZXggPSBlbmRJbmRl
eCA9IHJlc3VsdExlbmd0aDsKIAogICAgICAgICBpZiAocHJldmlvdXNFbmRJbmRleCA8IGJlZ2lu
SW5kZXgpIHsKLSAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBqc1N0cmluZyh2bSwgcmVzdWx0U3Ry
aW5nLnN1YnN0cmluZyhwcmV2aW91c0VuZEluZGV4LCBiZWdpbkluZGV4IC0gcHJldmlvdXNFbmRJ
bmRleCkpOworICAgICAgICAgICAgYXV0byB2YWx1ZSA9IGpzU3RyaW5nKHZtLCByZXN1bHRTdHJp
bmdWaWV3LnN1YnN0cmluZyhwcmV2aW91c0VuZEluZGV4LCBiZWdpbkluZGV4IC0gcHJldmlvdXNF
bmRJbmRleCkpOwogICAgICAgICAgICAgSlNPYmplY3QqIHBhcnQgPSBjb25zdHJ1Y3RFbXB0eU9i
amVjdChnbG9iYWxPYmplY3QpOwogICAgICAgICAgICAgcGFydC0+cHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT50eXBlLCBsaXRlcmFsU3RyaW5nKTsKICAgICAgICAgICAgIHBhcnQtPnB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+dmFsdWUsIHZhbHVlKTsKQEAgLTE0MDcsNyAr
MTQwNyw3IEBAIEpTVmFsdWUgSW50bERhdGVUaW1lRm9ybWF0Ojpmb3JtYXRUb1BhcnRzKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGRvdWJsZSB2CiAKICAgICAgICAgaWYgKGZpZWxkVHlw
ZSA+PSAwKSB7CiAgICAgICAgICAgICBhdXRvIHR5cGUgPSBqc05vbnRyaXZpYWxTdHJpbmcodm0s
IHBhcnRUeXBlU3RyaW5nKFVEYXRlRm9ybWF0RmllbGQoZmllbGRUeXBlKSkpOwotICAgICAgICAg
ICAgYXV0byB2YWx1ZSA9IGpzU3RyaW5nKHZtLCByZXN1bHRTdHJpbmcuc3Vic3RyaW5nKGJlZ2lu
SW5kZXgsIGVuZEluZGV4IC0gYmVnaW5JbmRleCkpOworICAgICAgICAgICAgYXV0byB2YWx1ZSA9
IGpzU3RyaW5nKHZtLCByZXN1bHRTdHJpbmdWaWV3LnN1YnN0cmluZyhiZWdpbkluZGV4LCBlbmRJ
bmRleCAtIGJlZ2luSW5kZXgpKTsKICAgICAgICAgICAgIEpTT2JqZWN0KiBwYXJ0ID0gY29uc3Ry
dWN0RW1wdHlPYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAgIHBhcnQtPnB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+dHlwZSwgdHlwZSk7CiAgICAgICAgICAgICBwYXJ0LT5w
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlLCB2YWx1ZSk7CkBAIC0xNzE2LDcg
KzE3MTYsNyBAQCBKU1ZhbHVlIEludGxEYXRlVGltZUZvcm1hdDo6Zm9ybWF0UmFuZ2VUb1BhcnRz
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGRvdQogICAgICAgICB0aHJvd1R5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCAiRmFpbGVkIHRvIGZvcm1hdCBkYXRlIGludGVydmFsIl9z
KTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9Ci0gICAgU3RyaW5nIHJlc3VsdFN0cmluZyhm
b3JtYXR0ZWRTdHJpbmdQb2ludGVyLCBmb3JtYXR0ZWRTdHJpbmdMZW5ndGgpOworICAgIFN0cmlu
Z1ZpZXcgcmVzdWx0U3RyaW5nVmlldyhmb3JtYXR0ZWRTdHJpbmdQb2ludGVyLCBmb3JtYXR0ZWRT
dHJpbmdMZW5ndGgpOwogCiAgICAgLy8gV2UgY2FyZSBtdWx0aXBsZSBjYXRlZ29yaWVzIChVRklF
TERfQ0FURUdPUllfREFURSBhbmQgVUZJRUxEX0NBVEVHT1JZX0RBVEVfSU5URVJWQUxfU1BBTiku
CiAgICAgLy8gU28gd2UgZG8gbm90IGNvbnN0cmFpbnQgaXRlcmF0b3IuCkBAIC0xNzQyLDcgKzE3
NDIsNyBAQCBKU1ZhbHVlIEludGxEYXRlVGltZUZvcm1hdDo6Zm9ybWF0UmFuZ2VUb1BhcnRzKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGRvdQogICAgICAgICAgICAgcmV0dXJuIHNoYXJl
ZFN0cmluZzsKICAgICAgICAgfTsKIAotICAgICAgICBhdXRvIHZhbHVlID0ganNTdHJpbmcodm0s
IHJlc3VsdFN0cmluZy5zdWJzdHJpbmcoYmVnaW5JbmRleCwgbGVuZ3RoKSk7CisgICAgICAgIGF1
dG8gdmFsdWUgPSBqc1N0cmluZyh2bSwgcmVzdWx0U3RyaW5nVmlldy5zdWJzdHJpbmcoYmVnaW5J
bmRleCwgbGVuZ3RoKSk7CiAgICAgICAgIEpTT2JqZWN0KiBwYXJ0ID0gY29uc3RydWN0RW1wdHlP
YmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgcGFydC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT50eXBlLCB0eXBlKTsKICAgICAgICAgcGFydC0+cHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT52YWx1ZSwgdmFsdWUpOwpAQCAtMTc1MCw3ICsxNzUwLDcgQEAgSlNWYWx1
ZSBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmZvcm1hdFJhbmdlVG9QYXJ0cyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBkb3UKICAgICAgICAgcmV0dXJuIHBhcnQ7CiAgICAgfTsKIAotICAgIGlu
dDMyX3QgcmVzdWx0TGVuZ3RoID0gcmVzdWx0U3RyaW5nLmxlbmd0aCgpOworICAgIGludDMyX3Qg
cmVzdWx0TGVuZ3RoID0gcmVzdWx0U3RyaW5nVmlldy5sZW5ndGgoKTsKICAgICBpbnQzMl90IHBy
ZXZpb3VzRW5kSW5kZXggPSAwOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGJvb2wgbmV4
dCA9IHVmbXR2YWxfbmV4dFBvc2l0aW9uKGZvcm1hdHRlZFZhbHVlLCBpdGVyYXRvci5nZXQoKSwg
JnN0YXR1cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
TGlzdEZvcm1hdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTGlzdEZv
cm1hdC5jcHAKaW5kZXggZDNiZTYzZDRjZGMwM2Q2MDUxMjVmZWRiMTViZjg1YTg2MjU3OGY3Zi4u
N2RmOTUwZDVmMzc4ODIxNWRiOTllNTU4MDM0YzQxNTMxNmVjZmRkOCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bExpc3RGb3JtYXQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxMaXN0Rm9ybWF0LmNwcApAQCAtMjY4LDcgKzI2
OCw3IEBAIEpTVmFsdWUgSW50bExpc3RGb3JtYXQ6OmZvcm1hdFRvUGFydHMoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBsaXN0CiAgICAgY29uc3QgVUNoYXIqIGZvcm1hdHRl
ZFN0cmluZ1BvaW50ZXIgPSB1Zm10dmFsX2dldFN0cmluZyhmb3JtYXR0ZWRWYWx1ZSwgJmZvcm1h
dHRlZFN0cmluZ0xlbmd0aCwgJnN0YXR1cyk7CiAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQog
ICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImZhaWxl
ZCB0byBmb3JtYXQgbGlzdCBvZiBzdHJpbmdzIl9zKTsKLSAgICBTdHJpbmcgcmVzdWx0U3RyaW5n
KGZvcm1hdHRlZFN0cmluZ1BvaW50ZXIsIGZvcm1hdHRlZFN0cmluZ0xlbmd0aCk7CisgICAgU3Ry
aW5nVmlldyByZXN1bHRTdHJpbmdWaWV3KGZvcm1hdHRlZFN0cmluZ1BvaW50ZXIsIGZvcm1hdHRl
ZFN0cmluZ0xlbmd0aCk7CiAKICAgICBhdXRvIGl0ZXJhdG9yID0gc3RkOjp1bmlxdWVfcHRyPFVD
b25zdHJhaW5lZEZpZWxkUG9zaXRpb24sIElDVURlbGV0ZXI8dWNmcG9zX2Nsb3NlPj4odWNmcG9z
X29wZW4oJnN0YXR1cykpOwogICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKQEAgLTI4OCw3ICsy
ODgsNyBAQCBKU1ZhbHVlIEludGxMaXN0Rm9ybWF0Ojpmb3JtYXRUb1BhcnRzKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgbGlzdAogICAgICAgICByZXR1cm4gcGFydDsKICAg
ICB9OwogCi0gICAgaW50MzJfdCByZXN1bHRMZW5ndGggPSByZXN1bHRTdHJpbmcubGVuZ3RoKCk7
CisgICAgaW50MzJfdCByZXN1bHRMZW5ndGggPSByZXN1bHRTdHJpbmdWaWV3Lmxlbmd0aCgpOwog
ICAgIGludDMyX3QgcHJldmlvdXNFbmRJbmRleCA9IDA7CiAgICAgd2hpbGUgKHRydWUpIHsKICAg
ICAgICAgYm9vbCBuZXh0ID0gdWZtdHZhbF9uZXh0UG9zaXRpb24oZm9ybWF0dGVkVmFsdWUsIGl0
ZXJhdG9yLmdldCgpLCAmc3RhdHVzKTsKQEAgLTMwNCwyMSArMzA0LDIxIEBAIEpTVmFsdWUgSW50
bExpc3RGb3JtYXQ6OmZvcm1hdFRvUGFydHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBsaXN0CiAgICAgICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgImZhaWxlZCB0byBmb3JtYXQgbGlzdCBvZiBzdHJpbmdzIl9zKTsKIAogICAg
ICAgICBpZiAocHJldmlvdXNFbmRJbmRleCA8IGJlZ2luSW5kZXgpIHsKLSAgICAgICAgICAgIGF1
dG8gdmFsdWUgPSBqc1N0cmluZyh2bSwgcmVzdWx0U3RyaW5nLnN1YnN0cmluZyhwcmV2aW91c0Vu
ZEluZGV4LCBiZWdpbkluZGV4IC0gcHJldmlvdXNFbmRJbmRleCkpOworICAgICAgICAgICAgYXV0
byB2YWx1ZSA9IGpzU3RyaW5nKHZtLCByZXN1bHRTdHJpbmdWaWV3LnN1YnN0cmluZyhwcmV2aW91
c0VuZEluZGV4LCBiZWdpbkluZGV4IC0gcHJldmlvdXNFbmRJbmRleCkpOwogICAgICAgICAgICAg
SlNPYmplY3QqIHBhcnQgPSBjcmVhdGVQYXJ0KGxpdGVyYWxTdHJpbmcsIHZhbHVlKTsKICAgICAg
ICAgICAgIHBhcnRzLT5wdXNoKGdsb2JhbE9iamVjdCwgcGFydCk7CiAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICB9CiAgICAgICAgIHByZXZpb3Vz
RW5kSW5kZXggPSBlbmRJbmRleDsKIAotICAgICAgICBhdXRvIHZhbHVlID0ganNTdHJpbmcodm0s
IHJlc3VsdFN0cmluZy5zdWJzdHJpbmcoYmVnaW5JbmRleCwgZW5kSW5kZXggLSBiZWdpbkluZGV4
KSk7CisgICAgICAgIGF1dG8gdmFsdWUgPSBqc1N0cmluZyh2bSwgcmVzdWx0U3RyaW5nVmlldy5z
dWJzdHJpbmcoYmVnaW5JbmRleCwgZW5kSW5kZXggLSBiZWdpbkluZGV4KSk7CiAgICAgICAgIEpT
T2JqZWN0KiBwYXJ0ID0gY3JlYXRlUGFydChlbGVtZW50U3RyaW5nLCB2YWx1ZSk7CiAgICAgICAg
IHBhcnRzLT5wdXNoKGdsb2JhbE9iamVjdCwgcGFydCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQogCiAgICAgaWYgKHByZXZpb3VzRW5kSW5kZXggPCBy
ZXN1bHRMZW5ndGgpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IGpzU3RyaW5nKHZtLCByZXN1bHRT
dHJpbmcuc3Vic3RyaW5nKHByZXZpb3VzRW5kSW5kZXgsIHJlc3VsdExlbmd0aCAtIHByZXZpb3Vz
RW5kSW5kZXgpKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IGpzU3RyaW5nKHZtLCByZXN1bHRTdHJp
bmdWaWV3LnN1YnN0cmluZyhwcmV2aW91c0VuZEluZGV4LCByZXN1bHRMZW5ndGggLSBwcmV2aW91
c0VuZEluZGV4KSk7CiAgICAgICAgIEpTT2JqZWN0KiBwYXJ0ID0gY3JlYXRlUGFydChsaXRlcmFs
U3RyaW5nLCB2YWx1ZSk7CiAgICAgICAgIHBhcnRzLT5wdXNoKGdsb2JhbE9iamVjdCwgcGFydCk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCmluZGV4IDMyODBk
YWMyZDc1ZGQ0ODM2MGNmOGMzNDNiMmRkNThmMmI3ODkxNWIuLjkwNjRjOTlhYWJkZWNiNjI2YTQw
NDM5MGVhZjQ5ZjQxMjdhYzNlNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCkBAIC0xMDMzLDcgKzEwMzMsNyBAQCB2b2lkIElu
dGxOdW1iZXJGb3JtYXQ6OmZvcm1hdFJhbmdlVG9QYXJ0c0ludGVybmFsKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsCiAgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsICJGYWlsZWQgdG8gZm9ybWF0IG51bWJlciByYW5nZSJfcyk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgU3RyaW5nIHJlc3VsdFN0cmluZyhmb3JtYXR0ZWRTdHJpbmdQb2ludGVyLCBm
b3JtYXR0ZWRTdHJpbmdMZW5ndGgpOworICAgIFN0cmluZ1ZpZXcgcmVzdWx0U3RyaW5nVmlldyhm
b3JtYXR0ZWRTdHJpbmdQb2ludGVyLCBmb3JtYXR0ZWRTdHJpbmdMZW5ndGgpOwogCiAgICAgLy8g
V2UgY2FyZSBtdWx0aXBsZSBjYXRlZ29yaWVzIChVRklFTERfQ0FURUdPUllfREFURSBhbmQgVUZJ
RUxEX0NBVEVHT1JZX0RBVEVfSU5URVJWQUxfU1BBTikuCiAgICAgLy8gU28gd2UgZG8gbm90IGNv
bnN0cmFpbnQgaXRlcmF0b3IuCkBAIC0xMTE4LDcgKzExMTgsNyBAQCB2b2lkIEludGxOdW1iZXJG
b3JtYXQ6OmZvcm1hdFJhbmdlVG9QYXJ0c0ludGVybmFsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsCiAgICAgICAgICAgICByZXR1cm4gc2hhcmVkU3RyaW5nOwogICAgICAgICB9OwogCi0g
ICAgICAgIGF1dG8gdmFsdWUgPSBqc1N0cmluZyh2bSwgcmVzdWx0U3RyaW5nLnN1YnN0cmluZyhi
ZWdpbkluZGV4LCBsZW5ndGgpKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IGpzU3RyaW5nKHZtLCBy
ZXN1bHRTdHJpbmdWaWV3LnN1YnN0cmluZyhiZWdpbkluZGV4LCBsZW5ndGgpKTsKICAgICAgICAg
SlNPYmplY3QqIHBhcnQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxPYmplY3QpOwogICAg
ICAgICBwYXJ0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnR5cGUsIHR5cGUpOwog
ICAgICAgICBwYXJ0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlLCB2YWx1
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvRnVuY3Rpb25PdmVy
cmlkZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0Z1bmN0aW9uT3ZlcnJpZGVz
LmNwcAppbmRleCBiZTFmMjhmYTU0NGJmODg0MDAzN2ZlNDgxNDg1NTc4YjAyOGYzNmI5Li5iOWM5
MzIxNTZlZTc3MmM2MzZkNTAyMTIxNDM0NWM4NDVjNzVjYTI5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvRnVuY3Rpb25PdmVycmlkZXMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9GdW5jdGlvbk92ZXJyaWRlcy5jcHAKQEAgLTEzMyw5ICsxMzMs
OSBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplT3ZlcnJpZGVJbmZvKGNvbnN0IFNvdXJjZUNvZGUm
IG9yaWdDb2RlLCBjb25zdCBTdHJpbmcmIG5ldwogICAgIHVuc2lnbmVkIG9yaWdGdW5jdGlvblN0
YXJ0ID0gb3JpZ1Byb3ZpZGVyU3RyLnJldmVyc2VGaW5kKCJmdW5jdGlvbiIsIG9yaWdTdGFydCk7
CiAgICAgdW5zaWduZWQgb3JpZ0JyYWNlU3RhcnQgPSBvcmlnUHJvdmlkZXJTdHIuZmluZCgneycs
IG9yaWdTdGFydCk7CiAgICAgdW5zaWduZWQgaGVhZGVyTGVuZ3RoID0gb3JpZ0JyYWNlU3RhcnQg
LSBvcmlnRnVuY3Rpb25TdGFydDsKLSAgICBTdHJpbmcgb3JpZ0hlYWRlciA9IG9yaWdQcm92aWRl
clN0ci5zdWJzdHJpbmcob3JpZ0Z1bmN0aW9uU3RhcnQsIGhlYWRlckxlbmd0aCk7CisgICAgYXV0
byBvcmlnSGVhZGVyVmlldyA9IFN0cmluZ1ZpZXcob3JpZ1Byb3ZpZGVyU3RyKS5zdWJzdHJpbmco
b3JpZ0Z1bmN0aW9uU3RhcnQsIGhlYWRlckxlbmd0aCk7CiAKLSAgICBTdHJpbmcgbmV3UHJvdmlk
ZXJTdHJpbmcgPSBtYWtlU3RyaW5nKG9yaWdIZWFkZXIsIG5ld0JvZHkpOworICAgIFN0cmluZyBu
ZXdQcm92aWRlclN0cmluZyA9IG1ha2VTdHJpbmcob3JpZ0hlYWRlclZpZXcsIG5ld0JvZHkpOwog
CiAgICAgYXV0byBvdmVycmlkZGVuID0gIjxvdmVycmlkZGVuPiJfczsKICAgICBVUkwgdXJsKHsg
fSwgb3ZlcnJpZGRlbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcu
aCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCmluZGV4IDI3MDBjNjZkZGFhMTg3MDU0
ZGE1OWRhOTM0ZTAyODc3ZjRlYTQ0MDguLmQ4MjYwNjc0YjdjMDFlZDljY2FlNmM0ZDFhMzAyZGQ1
OWI4MTYyMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCkBAIC03Miw2ICs3Miw4IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG1fYnVmZmVyID8gbV9idWZmZXItPmRhdGEoKSA6IG51bGxwdHI7CiAg
ICAgfQogCisgICAgc3RkOjpzdHJpbmcgdG9TdGRTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX2J1
ZmZlciA/IHN0ZDo6c3RyaW5nKG1fYnVmZmVyLT5kYXRhKCkpIDogc3RkOjpzdHJpbmcoKTsgfQor
CiAgICAgY29uc3QgdWludDhfdCogZGF0YUFzVUludDhQdHIoKSBjb25zdCB7IHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKCkpOyB9CiAKICAgICBTcGFuPGNvbnN0
IHVpbnQ4X3Q+IGJ5dGVzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZmV0Y2gvRmV0Y2hCb2R5Q29uc3VtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9m
ZXRjaC9GZXRjaEJvZHlDb25zdW1lci5jcHAKaW5kZXggMDNlMDE4MmQzOTIxNzhhYzY3YTQ2YTU1
OTQ3MGZmNjU3MmQ5NGU3NC4uOTUxYTFlM2RmZmM3MzMwZjFiZDVkNGU4NTZjMjE1YWRlN2M5NjQ0
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlDb25z
dW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlDb25z
dW1lci5jcHAKQEAgLTE2NCw3ICsxNjQsNyBAQCBSZWZQdHI8RE9NRm9ybURhdGE+IEZldGNoQm9k
eUNvbnN1bWVyOjpwYWNrYWdlRm9ybURhdGEoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogYwogICAg
ICAgICAgICAgc2l6ZV90IGNvbnRlbnRUeXBlQmVnaW4gPSBoZWFkZXIuZmluZChjb250ZW50VHlw
ZUNoYXJhY3RlcnMpOwogICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlQmVnaW4gIT0gbm90Rm91
bmQpIHsKICAgICAgICAgICAgICAgICBzaXplX3QgY29udGVudFR5cGVFbmQgPSBoZWFkZXIuZmlu
ZCgiXHJcbiIsIGNvbnRlbnRUeXBlQmVnaW4pOwotICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBl
ID0gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVFRQU3BhY2VzKGhlYWRlci5zdWJzdHJpbmcoY29u
dGVudFR5cGVCZWdpbiArIGNvbnRlbnRUeXBlUHJlZml4TGVuZ3RoLCBjb250ZW50VHlwZUVuZCAt
IGNvbnRlbnRUeXBlQmVnaW4gLSBjb250ZW50VHlwZVByZWZpeExlbmd0aCkpOworICAgICAgICAg
ICAgICAgIGNvbnRlbnRUeXBlID0gU3RyaW5nVmlldyhoZWFkZXIpLnN1YnN0cmluZyhjb250ZW50
VHlwZUJlZ2luICsgY29udGVudFR5cGVQcmVmaXhMZW5ndGgsIGNvbnRlbnRUeXBlRW5kIC0gY29u
dGVudFR5cGVCZWdpbiAtIGNvbnRlbnRUeXBlUHJlZml4TGVuZ3RoKS5zdHJpcExlYWRpbmdBbmRU
cmFpbGluZ01hdGNoZWRDaGFyYWN0ZXJzKGlzSFRUUFNwYWNlKS50b1N0cmluZygpOwogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBmb3JtLmFwcGVuZChuYW1lLCBGaWxlOjpjcmVhdGUoY29u
dGV4dCwgQmxvYjo6Y3JlYXRlKGNvbnRleHQsIFZlY3RvciB7IGJvZHlCZWdpbiwgYm9keUxlbmd0
aCB9LCBCbG9iOjpub3JtYWxpemVkQ29udGVudFR5cGUoY29udGVudFR5cGUpKS5nZXQoKSwgZmls
ZW5hbWUpLmdldCgpLCBmaWxlbmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENSdHBUcmFuc2NlaXZlckJhY2tlbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2Vi
UlRDUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmNwcAppbmRleCA5NDkzN2YwNGRiOGMzYjRkZDViZDgx
ZjU0M2ZmMTAwZjRmN2ZlYjQwLi5jYjkxNjQxNzhjZTNmZGNiYzYyM2ZkYWFkMGI4YTIwZjQzZGFk
N2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndl
YnJ0Yy9MaWJXZWJSVENSdHBUcmFuc2NlaXZlckJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1J0cFRyYW5zY2VpdmVy
QmFja2VuZC5jcHAKQEAgLTkxLDcgKzkxLDcgQEAgc3RhdGljIGlubGluZSBFeGNlcHRpb25Pcjx3
ZWJydGM6OlJ0cENvZGVjQ2FwYWJpbGl0eT4gdG9SdHBDb2RlY0NhcGFiaWxpdHkoY29uc3QKICAg
ICBlbHNlCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTW9kaWZpY2F0aW9uRXJy
b3IsICJSVENSdHBDb2RlY0NhcGFiaWxpdHkgYmFkIG1pbWVUeXBlIl9zIH07CiAKLSAgICBydGND
b2RlYy5uYW1lID0gY29kZWMubWltZVR5cGUuc3Vic3RyaW5nKDYpLnV0ZjgoKS5kYXRhKCk7Cisg
ICAgcnRjQ29kZWMubmFtZSA9IFN0cmluZ1ZpZXcoY29kZWMubWltZVR5cGUpLnN1YnN0cmluZyg2
KS51dGY4KCkudG9TdGRTdHJpbmcoKTsKICAgICBydGNDb2RlYy5jbG9ja19yYXRlID0gY29kZWMu
Y2xvY2tSYXRlOwogICAgIGlmIChjb2RlYy5jaGFubmVscykKICAgICAgICAgcnRjQ29kZWMubnVt
X2NoYW5uZWxzID0gKmNvZGVjLmNoYW5uZWxzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tb2RlbC1lbGVtZW50L3NjZW5la2l0L1NjZW5lS2l0TW9kZWxMb2FkZXIubW0gYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21vZGVsLWVsZW1lbnQvc2NlbmVraXQvU2NlbmVLaXRNb2Rl
bExvYWRlci5tbQppbmRleCAxYTliYjFkNWUyNzNjZjBlNjk5NjNhNmQzOTUzNGFlZGZkY2NiZDY4
Li40OTg5N2Y4NjcyMTY3Y2E1MjFiZGUyM2E5ZjJhYzlkZDA2M2Q1MjExIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21vZGVsLWVsZW1lbnQvc2NlbmVraXQvU2NlbmVLaXRNb2Rl
bExvYWRlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21vZGVsLWVsZW1lbnQvc2Nl
bmVraXQvU2NlbmVLaXRNb2RlbExvYWRlci5tbQpAQCAtNzksNyArNzksNyBAQCBzdGF0aWMgU3Ry
aW5nIG1pbWVUeXBlVXRpbGl6aW5nRmlsZUV4dGVuc2lvbk92ZXJyaWRpbmdGb3JMb2NhbEZpbGVz
KGNvbnN0IE1vZGVsJgogICAgICAgICBpZiAocG9zaXRpb24gIT0gV1RGOjpub3RGb3VuZCkgewog
ICAgICAgICAgICAgYXV0byBleHRlbnNpb24gPSBsYXN0UGF0aENvbXBvbmVudC5zdWJzdHJpbmco
cG9zaXRpb24gKyAxKTsKIAotICAgICAgICAgICAgcmV0dXJuIE1JTUVUeXBlUmVnaXN0cnk6Om1l
ZGlhTUlNRVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9uLnRvU3RyaW5nKCkpOworICAgICAgICAg
ICAgcmV0dXJuIE1JTUVUeXBlUmVnaXN0cnk6Om1lZGlhTUlNRVR5cGVGb3JFeHRlbnNpb24oZXh0
ZW5zaW9uKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9wbHVnaW5zL1BsdWdpblJlcGxhY2VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3BsdWdpbnMvUGx1Z2luUmVwbGFjZW1lbnQuaAppbmRleCAyZjRhNDJmZTdhODRlMDcyNzdi
ZTM2NTBlNDI5Y2MxYTUwYTI5N2M3Li43YzAzYmUyOTEzZjRkZGVjMmZhYmJmNWRjMDdjNWU1YmY0
OTM2NDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUGx1Z2lu
UmVwbGFjZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUGx1Z2lu
UmVwbGFjZW1lbnQuaApAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAKIHR5cGVkZWYgUmVmPFBs
dWdpblJlcGxhY2VtZW50PiAoKkNyZWF0ZVBsdWdpblJlcGxhY2VtZW50KShIVE1MUGx1Z0luRWxl
bWVudCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcGFyYW1WYWx1ZXMpOwogdHlwZWRlZiBib29sICgqUGx1Z2luUmVwbGFjZW1lbnRTdXBw
b3J0c1R5cGUpKGNvbnN0IFN0cmluZyYpOwotdHlwZWRlZiBib29sICgqUGx1Z2luUmVwbGFjZW1l
bnRTdXBwb3J0c0ZpbGVFeHRlbnNpb24pKGNvbnN0IFN0cmluZyYpOwordHlwZWRlZiBib29sICgq
UGx1Z2luUmVwbGFjZW1lbnRTdXBwb3J0c0ZpbGVFeHRlbnNpb24pKFN0cmluZ1ZpZXcpOwogdHlw
ZWRlZiBib29sICgqUGx1Z2luUmVwbGFjZW1lbnRTdXBwb3J0c1VSTCkoY29uc3QgVVJMJik7CiB0
eXBlZGVmIGJvb2wgKCpQbHVnaW5SZXBsYWNlbWVudEVuYWJsZWRGb3JTZXR0aW5ncykoY29uc3Qg
U2V0dGluZ3MmKTsKIApAQCAtODEsNyArODEsNyBAQCBwdWJsaWM6CiAKICAgICBSZWY8UGx1Z2lu
UmVwbGFjZW1lbnQ+IGNyZWF0ZShIVE1MUGx1Z0luRWxlbWVudCYgZWxlbWVudCwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVl
cykgY29uc3QgeyByZXR1cm4gbV9jb25zdHJ1Y3RvcihlbGVtZW50LCBwYXJhbU5hbWVzLCBwYXJh
bVZhbHVlcyk7IH0KICAgICBib29sIHN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KSBjb25zdCB7IHJldHVybiBtX3N1cHBvcnRzVHlwZShtaW1lVHlwZSk7IH0KLSAgICBib29sIHN1
cHBvcnRzRmlsZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikgY29uc3QgeyByZXR1
cm4gbV9zdXBwb3J0c0ZpbGVFeHRlbnNpb24oZXh0ZW5zaW9uKTsgfQorICAgIGJvb2wgc3VwcG9y
dHNGaWxlRXh0ZW5zaW9uKFN0cmluZ1ZpZXcgZXh0ZW5zaW9uKSBjb25zdCB7IHJldHVybiBtX3N1
cHBvcnRzRmlsZUV4dGVuc2lvbihleHRlbnNpb24pOyB9CiAgICAgYm9vbCBzdXBwb3J0c1VSTChj
b25zdCBVUkwmIHVybCkgY29uc3QgeyByZXR1cm4gbV9zdXBwb3J0c1VSTCh1cmwpOyB9CiAgICAg
Ym9vbCBpc0VuYWJsZWRCeVNldHRpbmdzKGNvbnN0IFNldHRpbmdzJiBzZXR0aW5ncykgY29uc3Qg
eyByZXR1cm4gbV9pc0VuYWJsZWRCeVNldHRpbmdzKHNldHRpbmdzKTsgfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1lvdVR1YmVQbHVnaW5SZXBsYWNlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvWW91VHViZVBsdWdpblJlcGxh
Y2VtZW50LmNwcAppbmRleCBjYmFmNDZmMGVlNWZlN2U0MDkwNWE0OTZkYWQ4N2U0ZTlmYTlhYTJj
Li43ODA4NDE0YWIwNTQ0YjMzNDY4NjRkYjQwOGYyNmQzN2I3NDhmMWRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvWW91VHViZVBsdWdpblJlcGxhY2VtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvWW91VHViZVBsdWdpblJlcGxh
Y2VtZW50LmNwcApAQCAtNTQsNyArNTQsNyBAQCBib29sIFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVu
dDo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogICAgICAgICB8fCBl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImFwcGxpY2F0aW9uL2Z1dHVy
ZXNwbGFzaCIpOwogfQogCi1ib29sIFlvdVR1YmVQbHVnaW5SZXBsYWNlbWVudDo6c3VwcG9ydHNG
aWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKQorYm9vbCBZb3VUdWJlUGx1Z2lu
UmVwbGFjZW1lbnQ6OnN1cHBvcnRzRmlsZUV4dGVuc2lvbihTdHJpbmdWaWV3IGV4dGVuc2lvbikK
IHsKICAgICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZXh0ZW5zaW9uLCAi
c3BsIikgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZXh0ZW5zaW9uLCAic3dmIik7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvWW91VHViZVBs
dWdpblJlcGxhY2VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvWW91VHVi
ZVBsdWdpblJlcGxhY2VtZW50LmgKaW5kZXggMTcyZmZhMmY1YzgzYjEwYmNjMTI4YjNlYzE3Njk2
NjVkNTRkMTJkMC4uZTA0MjJmNGRhOTZhMzA0NDBiNmRkOTIyYjAxOTVkNDczZTI3NzA3NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1lvdVR1YmVQbHVnaW5SZXBs
YWNlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9Zb3VUdWJlUGx1
Z2luUmVwbGFjZW1lbnQuaApAQCAtNDUsNyArNDUsNyBAQCBwcml2YXRlOgogICAgIFlvdVR1YmVQ
bHVnaW5SZXBsYWNlbWVudChIVE1MUGx1Z0luRWxlbWVudCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOwogICAgIHN0
YXRpYyBSZWY8UGx1Z2luUmVwbGFjZW1lbnQ+IGNyZWF0ZShIVE1MUGx1Z0luRWxlbWVudCYsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFy
YW1WYWx1ZXMpOwogICAgIHN0YXRpYyBib29sIHN1cHBvcnRzTUlNRVR5cGUoY29uc3QgU3RyaW5n
Jik7Ci0gICAgc3RhdGljIGJvb2wgc3VwcG9ydHNGaWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYp
OworICAgIHN0YXRpYyBib29sIHN1cHBvcnRzRmlsZUV4dGVuc2lvbihTdHJpbmdWaWV3KTsKICAg
ICBzdGF0aWMgYm9vbCBzdXBwb3J0c1VSTChjb25zdCBVUkwmKTsKICAgICBzdGF0aWMgYm9vbCBp
c0VuYWJsZWRCeVNldHRpbmdzKGNvbnN0IFNldHRpbmdzJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9h
bmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwCmluZGV4IDFmMzU4ZDY2NTc2YTMyOThkNGE4ZjFi
YTM3NjcxOGQwMmU2ZDI0ZDUuLmYxODUxYjA5N2VmMGU5ZmQ1NTViZjgxMjEyZTlmMTc2NGFhOWZm
ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcApAQCAt
MTE4NSw3ICsxMTg1LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gS2V5ZnJhbWVFZmZlY3Q6OnNldFBz
ZXVkb0VsZW1lbnQoY29uc3QgU3RyaW5nJiBwc2V1ZG9FbGVtZW50KQogICAgICAgICBhdXRvIGlz
TGVnYWN5ID0gcHNldWRvRWxlbWVudCA9PSAiOmJlZm9yZSIgfHwgcHNldWRvRWxlbWVudCA9PSAi
OmFmdGVyIiB8fCBwc2V1ZG9FbGVtZW50ID09ICI6Zmlyc3QtbGV0dGVyIiB8fCBwc2V1ZG9FbGVt
ZW50ID09ICI6Zmlyc3QtbGluZSI7CiAgICAgICAgIGlmICghaXNMZWdhY3kgJiYgIXBzZXVkb0Vs
ZW1lbnQuc3RhcnRzV2l0aCgiOjoiKSkKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBT
eW50YXhFcnJvciB9OwotICAgICAgICBhdXRvIHBzZXVkb1R5cGUgPSBDU1NTZWxlY3Rvcjo6cGFy
c2VQc2V1ZG9FbGVtZW50VHlwZShwc2V1ZG9FbGVtZW50LnN1YnN0cmluZyhpc0xlZ2FjeSA/IDEg
OiAyKSk7CisgICAgICAgIGF1dG8gcHNldWRvVHlwZSA9IENTU1NlbGVjdG9yOjpwYXJzZVBzZXVk
b0VsZW1lbnRUeXBlKFN0cmluZ1ZpZXcocHNldWRvRWxlbWVudCkuc3Vic3RyaW5nKGlzTGVnYWN5
ID8gMSA6IDIpKTsKICAgICAgICAgaWYgKHBzZXVkb1R5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVk
b0VsZW1lbnRVbmtub3duIHx8IHBzZXVkb1R5cGUgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1l
bnRXZWJLaXRDdXN0b20pCiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJy
b3IgfTsKICAgICAgICAgcHNldWRvSWQgPSBDU1NTZWxlY3Rvcjo6cHNldWRvSWQocHNldWRvVHlw
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ29udGFpbmVyUXVlcnlQYXJzZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NvbnRhaW5lclF1ZXJ5UGFyc2VyLmNwcAppbmRleCA0
YmNhZmMyMzIzYWU3N2U0MWM3ODU1ODZhOGYxNTg1NzJjYmQ2OWU3Li5iZDQ5MzE3YzFlZWVlYjcx
ZWQ4YzlhZGE3MGRjOTgzNjQ1OWY1MDFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q29udGFpbmVyUXVlcnlQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Db250YWlu
ZXJRdWVyeVBhcnNlci5jcHAKQEAgLTE4MSw5ICsxODEsOSBAQCBzdGQ6Om9wdGlvbmFsPENROjpT
aXplRmVhdHVyZT4gQ29udGFpbmVyUXVlcnlQYXJzZXI6OmNvbnN1bWVQbGFpblNpemVGZWF0dXJl
KENTUwogICAgICAgICBpZiAobmFtZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4geyB9
OwogICAgICAgICBpZiAobmFtZS5zdGFydHNXaXRoKCJtaW4tIikpCi0gICAgICAgICAgICByZXR1
cm4geyBuYW1lLnN1YnN0cmluZyg0KSwgQ1E6OkNvbXBhcmlzb25PcGVyYXRvcjo6R3JlYXRlclRo
YW5PckVxdWFsIH07CisgICAgICAgICAgICByZXR1cm4geyBTdHJpbmdWaWV3KG5hbWUpLnN1YnN0
cmluZyg0KS50b0F0b21TdHJpbmcoKSwgQ1E6OkNvbXBhcmlzb25PcGVyYXRvcjo6R3JlYXRlclRo
YW5PckVxdWFsIH07CiAgICAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoIm1heC0iKSkKLSAgICAg
ICAgICAgIHJldHVybiB7IG5hbWUuc3Vic3RyaW5nKDQpLCBDUTo6Q29tcGFyaXNvbk9wZXJhdG9y
OjpMZXNzVGhhbk9yRXF1YWwgfTsKKyAgICAgICAgICAgIHJldHVybiB7IFN0cmluZ1ZpZXcobmFt
ZSkuc3Vic3RyaW5nKDQpLnRvQXRvbVN0cmluZygpLCBDUTo6Q29tcGFyaXNvbk9wZXJhdG9yOjpM
ZXNzVGhhbk9yRXF1YWwgfTsKIAogICAgICAgICByZXR1cm4geyBuYW1lLCBDUTo6Q29tcGFyaXNv
bk9wZXJhdG9yOjpFcXVhbCB9OwogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1NlbGVjdG9yUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTU2VsZWN0b3JQYXJzZXIuY3BwCmluZGV4IDYzNWJlNzZkNzYxYjc2NjBkNzE4YTNmYTE1
MmQ2MGRjNWY0MTNhNTQuLjMyZTMxNmRjNDEyZjNiNWMwN2QwOThiYTkyYTRkOGQ5OTk1ZjQ4Njcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTU2VsZWN0b3JQYXJzZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTU2VsZWN0b3JQYXJzZXIuY3Bw
CkBAIC05MzIsMjEgKzkzMiwyMSBAQCBzdGF0aWMgYm9vbCBjb25zdW1lQU5QbHVzQihDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSwgc3RkOjpwYWlyPGludCwgaW50PiYgcmVzdQogCiAgICAgLy8g
VGhlICduJyB3aWxsIGVuZCB1cCBhcyBwYXJ0IG9mIGFuIGlkZW50IG9yIGRpbWVuc2lvbi4gRm9y
IGEgdmFsaWQgPGFuK2I+LAogICAgIC8vIHRoaXMgd2lsbCBzdG9yZSBhIHN0cmluZyBvZiB0aGUg
Zm9ybSAnbicsICduLScsIG9yICduLTEyMycuCi0gICAgU3RyaW5nIG5TdHJpbmc7CisgICAgU3Ry
aW5nVmlldyBuU3RyaW5nOwogCiAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBEZWxpbWl0ZXJUb2tl
biAmJiB0b2tlbi5kZWxpbWl0ZXIoKSA9PSAnKycgJiYgcmFuZ2UucGVlaygpLnR5cGUoKSA9PSBJ
ZGVudFRva2VuKSB7CiAgICAgICAgIHJlc3VsdC5maXJzdCA9IDE7Ci0gICAgICAgIG5TdHJpbmcg
PSByYW5nZS5jb25zdW1lKCkudmFsdWUoKS50b1N0cmluZygpOworICAgICAgICBuU3RyaW5nID0g
cmFuZ2UuY29uc3VtZSgpLnZhbHVlKCk7CiAgICAgfSBlbHNlIGlmICh0b2tlbi50eXBlKCkgPT0g
RGltZW5zaW9uVG9rZW4gJiYgdG9rZW4ubnVtZXJpY1ZhbHVlVHlwZSgpID09IEludGVnZXJWYWx1
ZVR5cGUpIHsKICAgICAgICAgcmVzdWx0LmZpcnN0ID0gdG9rZW4ubnVtZXJpY1ZhbHVlKCk7Ci0g
ICAgICAgIG5TdHJpbmcgPSB0b2tlbi51bml0U3RyaW5nKCkudG9TdHJpbmcoKTsKKyAgICAgICAg
blN0cmluZyA9IHRva2VuLnVuaXRTdHJpbmcoKTsKICAgICB9IGVsc2UgaWYgKHRva2VuLnR5cGUo
KSA9PSBJZGVudFRva2VuKSB7CiAgICAgICAgIGlmICh0b2tlbi52YWx1ZSgpWzBdID09ICctJykg
ewogICAgICAgICAgICAgcmVzdWx0LmZpcnN0ID0gLTE7Ci0gICAgICAgICAgICBuU3RyaW5nID0g
dG9rZW4udmFsdWUoKS5zdWJzdHJpbmcoMSkudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIG5TdHJp
bmcgPSB0b2tlbi52YWx1ZSgpLnN1YnN0cmluZygxKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIHJlc3VsdC5maXJzdCA9IDE7Ci0gICAgICAgICAgICBuU3RyaW5nID0gdG9rZW4udmFs
dWUoKS50b1N0cmluZygpOworICAgICAgICAgICAgblN0cmluZyA9IHRva2VuLnZhbHVlKCk7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTk1OCw3ICs5NTgsNyBAQCBzdGF0aWMgYm9vbCBjb25zdW1l
QU5QbHVzQihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgc3RkOjpwYWlyPGludCwgaW50PiYg
cmVzdQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoblN0cmluZy5sZW5ndGgoKSA+
IDIpIHsKLSAgICAgICAgYXV0byBwYXJzZWROdW1iZXIgPSBwYXJzZUludGVnZXI8aW50PihTdHJp
bmdWaWV3IHsgblN0cmluZyB9LnN1YnN0cmluZygxKSk7CisgICAgICAgIGF1dG8gcGFyc2VkTnVt
YmVyID0gcGFyc2VJbnRlZ2VyPGludD4oblN0cmluZy5zdWJzdHJpbmcoMSkpOwogICAgICAgICBy
ZXN1bHQuc2Vjb25kID0gcGFyc2VkTnVtYmVyLnZhbHVlX29yKDApOwogICAgICAgICByZXR1cm4g
cGFyc2VkTnVtYmVyLmhhc192YWx1ZSgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9TZWN1cml0eUNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NlY3VyaXR5
Q29udGV4dC5jcHAKaW5kZXggMWM2OTRlYjA0NTk5ZjIxODdkZmM0YzA4MjUwOWUyYjhmMDJhODUx
Zi4uYTNkMjQ5ZmE5ZGE5ZjVjOTA0MzYzZjE0OTdkMzNiODA3MzZiZWNkZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1NlY3VyaXR5Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL1NlY3VyaXR5Q29udGV4dC5jcHAKQEAgLTk1LDcgKzk1LDcgQEAgYm9vbCBTZWN1cml0
eUNvbnRleHQ6OmlzU3VwcG9ydGVkU2FuZGJveFBvbGljeShTdHJpbmdWaWV3IHBvbGljeSkKIH0K
IAogLy8gS2VlcCBTZWN1cml0eUNvbnRleHQ6OmlzU3VwcG9ydGVkU2FuZGJveFBvbGljeSgpIGlu
IHN5bmMgd2hlbiB1cGRhdGluZyB0aGlzIGZ1bmN0aW9uLgotU2FuZGJveEZsYWdzIFNlY3VyaXR5
Q29udGV4dDo6cGFyc2VTYW5kYm94UG9saWN5KGNvbnN0IFN0cmluZyYgcG9saWN5LCBTdHJpbmcm
IGludmFsaWRUb2tlbnNFcnJvck1lc3NhZ2UpCitTYW5kYm94RmxhZ3MgU2VjdXJpdHlDb250ZXh0
OjpwYXJzZVNhbmRib3hQb2xpY3koU3RyaW5nVmlldyBwb2xpY3ksIFN0cmluZyYgaW52YWxpZFRv
a2Vuc0Vycm9yTWVzc2FnZSkKIHsKICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS90
aGUtaWZyYW1lLWVsZW1lbnQuaHRtbCNhdHRyLWlmcmFtZS1zYW5kYm94CiAgICAgLy8gUGFyc2Ug
dGhlIHVub3JkZXJlZCBzZXQgb2YgdW5pcXVlIHNwYWNlLXNlcGFyYXRlZCB0b2tlbnMuCkBAIC0x
MTQsNyArMTE0LDcgQEAgU2FuZGJveEZsYWdzIFNlY3VyaXR5Q29udGV4dDo6cGFyc2VTYW5kYm94
UG9saWN5KGNvbnN0IFN0cmluZyYgcG9saWN5LCBTdHJpbmcmIGkKICAgICAgICAgICAgICsrZW5k
OwogCiAgICAgICAgIC8vIFR1cm4gb2ZmIHRoZSBjb3JyZXNwb25kaW5nIHNhbmRib3ggZmxhZyBp
ZiBpdCdzIHNldCBhcyAiYWxsb3dlZCIuCi0gICAgICAgIFN0cmluZyBzYW5kYm94VG9rZW4gPSBw
b2xpY3kuc3Vic3RyaW5nKHN0YXJ0LCBlbmQgLSBzdGFydCk7CisgICAgICAgIGF1dG8gc2FuZGJv
eFRva2VuID0gcG9saWN5LnN1YnN0cmluZyhzdGFydCwgZW5kIC0gc3RhcnQpOwogICAgICAgICBp
ZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoc2FuZGJveFRva2VuLCAiYWxsb3ctc2Ft
ZS1vcmlnaW4iKSkKICAgICAgICAgICAgIGZsYWdzICY9IH5TYW5kYm94T3JpZ2luOwogICAgICAg
ICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzYW5kYm94VG9rZW4sICJh
bGxvdy1mb3JtcyIpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NlY3VyaXR5Q29u
dGV4dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NlY3VyaXR5Q29udGV4dC5oCmluZGV4IDM4MmZh
ZmRmOWNlNDUzYWU4NjU1NTRhNTBlMThjYzk3YWU3NWY1MzguLmMxNzJiMjE3YTI4NTI5MjI2MDFm
ZDZkMjM3ZDAwMTM1MDc0OWQ5MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWN1
cml0eUNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2VjdXJpdHlDb250ZXh0LmgK
QEAgLTEwMCw3ICsxMDAsNyBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTZWN1cml0
eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKIAotICAgIHN0YXRpYyBTYW5kYm94Rmxh
Z3MgcGFyc2VTYW5kYm94UG9saWN5KGNvbnN0IFN0cmluZyYgcG9saWN5LCBTdHJpbmcmIGludmFs
aWRUb2tlbnNFcnJvck1lc3NhZ2UpOworICAgIHN0YXRpYyBTYW5kYm94RmxhZ3MgcGFyc2VTYW5k
Ym94UG9saWN5KFN0cmluZ1ZpZXcgcG9saWN5LCBTdHJpbmcmIGludmFsaWRUb2tlbnNFcnJvck1l
c3NhZ2UpOwogICAgIHN0YXRpYyBib29sIGlzU3VwcG9ydGVkU2FuZGJveFBvbGljeShTdHJpbmdW
aWV3KTsKIAogICAgIGVudW0gTWl4ZWRDb250ZW50VHlwZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcAppbmRleCA2MmQxYjM0OGU0OWQ3
YTYyYzlkNTBhMjdhYTY3OWMxNTYwMjcwYzk5Li43Mjc0NjIyY2Q4N2NhZWMyMDA2ODRhZDRjMTMy
OTEyMzQzYmY3MmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFi
bGVCbG9iUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJs
ZUJsb2JSZWdpc3RyeS5jcHAKQEAgLTk2LDcgKzk2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlz
QmxvYlVSTENvbnRhaW5zTnVsbE9yaWdpbihjb25zdCBVUkwmIHVybCkKICAgICBBU1NFUlQodXJs
LnByb3RvY29sSXNCbG9iKCkpOwogICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXggPSB1cmwucGF0aFN0
YXJ0KCk7CiAgICAgdW5zaWduZWQgZW5kSW5kZXggPSB1cmwucGF0aEFmdGVyTGFzdFNsYXNoKCk7
Ci0gICAgcmV0dXJuIHVybC5zdHJpbmcoKS5zdWJzdHJpbmcoc3RhcnRJbmRleCwgZW5kSW5kZXgg
LSBzdGFydEluZGV4IC0gMSkgPT0gIm51bGwiOworICAgIHJldHVybiBTdHJpbmdWaWV3KHVybC5z
dHJpbmcoKSkuc3Vic3RyaW5nKHN0YXJ0SW5kZXgsIGVuZEluZGV4IC0gc3RhcnRJbmRleCAtIDEp
ID09ICJudWxsIjsKIH0KIAogdm9pZCBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJs
b2JVUkwoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgUG9saWN5Q29udGFpbmVyJiYgcG9saWN5Q29u
dGFpbmVyLCBjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiBzcmNVUkwpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0RPTVRva2VuTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0RPTVRva2VuTGlzdC5jcHAKaW5kZXggNDAzOGI2OWJhMjA3MzkwOGI0Y2NlYzMzM2E4ZjcyZmFl
NmMwZjEyOS4uZjYwZTYyNTE4NzZhMDYxZThlZjgyOWFlMTkxNTYzNTRmYTRhNGI3NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9ET01Ub2tlbkxpc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvRE9NVG9rZW5MaXN0LmNwcApAQCAtMjIwLDcgKzIyMCw3IEBAIHZvaWQgRE9N
VG9rZW5MaXN0OjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIG1fZWxlbWVudC5z
ZXRBdHRyaWJ1dGUobV9hdHRyaWJ1dGVOYW1lLCB2YWx1ZSk7CiB9CiAKLXZvaWQgRE9NVG9rZW5M
aXN0Ojp1cGRhdGVUb2tlbnNGcm9tQXR0cmlidXRlVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
K3ZvaWQgRE9NVG9rZW5MaXN0Ojp1cGRhdGVUb2tlbnNGcm9tQXR0cmlidXRlVmFsdWUoU3RyaW5n
VmlldyB2YWx1ZSkKIHsKICAgICAvLyBDbGVhciB0b2tlbnMgYnV0IG5vdCBjYXBhY2l0eS4KICAg
ICBtX3Rva2Vucy5zaHJpbmsoMCk7CkBAIC0yMzYsMTAgKzIzNiwxMSBAQCB2b2lkIERPTVRva2Vu
TGlzdDo6dXBkYXRlVG9rZW5zRnJvbUF0dHJpYnV0ZVZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgIHdoaWxlIChlbmQgPCB2YWx1ZS5sZW5ndGgoKSAmJiAhaXNIVE1MU3BhY2UodmFs
dWVbZW5kXSkpCiAgICAgICAgICAgICArK2VuZDsKIAotICAgICAgICBBdG9tU3RyaW5nIHRva2Vu
ID0gdmFsdWUuc3Vic3RyaW5nKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0gICAgICAgIGlmICghYWRk
ZWRUb2tlbnMuY29udGFpbnModG9rZW4pKSB7CisgICAgICAgIGF1dG8gdG9rZW5WaWV3ID0gdmFs
dWUuc3Vic3RyaW5nKHN0YXJ0LCBlbmQgLSBzdGFydCk7CisgICAgICAgIGlmICghYWRkZWRUb2tl
bnMuY29udGFpbnM8U3RyaW5nVmlld0hhc2hUcmFuc2xhdG9yPih0b2tlblZpZXcpKSB7CisgICAg
ICAgICAgICBhdXRvIHRva2VuID0gdG9rZW5WaWV3LnRvQXRvbVN0cmluZygpOwogICAgICAgICAg
ICAgbV90b2tlbnMuYXBwZW5kKHRva2VuKTsKLSAgICAgICAgICAgIGFkZGVkVG9rZW5zLmFkZCh0
b2tlbik7CisgICAgICAgICAgICBhZGRlZFRva2Vucy5hZGQoV1RGTW92ZSh0b2tlbikpOwogICAg
ICAgICB9CiAKICAgICAgICAgc3RhcnQgPSBlbmQgKyAxOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9ET01Ub2tlbkxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRE9NVG9rZW5M
aXN0LmgKaW5kZXggYWJlNWYxNDM3ZjFjYzUyMjc1Mjg1YTU4MzRlN2U0YWJjYWFkNjg3Yi4uM2E4
M2IxN2FiMWI3YmQ3NzdiOGQ3YjE4MjRhNzliM2ExMjUzYzExNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9ET01Ub2tlbkxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0RP
TVRva2VuTGlzdC5oCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9S
VCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIHZvaWQg
dXBkYXRlVG9rZW5zRnJvbUF0dHJpYnV0ZVZhbHVlKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQg
dXBkYXRlVG9rZW5zRnJvbUF0dHJpYnV0ZVZhbHVlKFN0cmluZ1ZpZXcpOwogICAgIHZvaWQgdXBk
YXRlQXNzb2NpYXRlZEF0dHJpYnV0ZUZyb21Ub2tlbnMoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JU
IFZlY3RvcjxBdG9tU3RyaW5nPiYgdG9rZW5zKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVs
ZW1lbnQuY3BwCmluZGV4IGYwMDkxNDdlYTMzYTc5MzAwYmVjNGE5NGYzYTZhMjk0MGE1NDJlZjEu
LmI1ZDYzM2NmZmYyNGRiMzJiYjczZjc5MmQxYzRiMzg3NGQyYWJiY2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCkBAIC05OSw4ICs5OSw4IEBAIHZvaWQgSFRNTE1hcEVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0
b21TdHJpbmcmCiAgICAgICAgICAgICB0cmVlU2NvcGUoKS5yZW1vdmVJbWFnZU1hcCgqdGhpcyk7
CiAgICAgICAgIFN0cmluZyBtYXBOYW1lID0gdmFsdWU7CiAgICAgICAgIGlmIChtYXBOYW1lWzBd
ID09ICcjJykKLSAgICAgICAgICAgIG1hcE5hbWUgPSBtYXBOYW1lLnN1YnN0cmluZygxKTsKLSAg
ICAgICAgbV9uYW1lID0gbWFwTmFtZTsKKyAgICAgICAgICAgIG1hcE5hbWUgPSBTdHJpbmdWaWV3
KG1hcE5hbWUpLnN1YnN0cmluZygxKS50b0F0b21TdHJpbmcoKTsKKyAgICAgICAgbV9uYW1lID0g
V1RGTW92ZShtYXBOYW1lKTsKICAgICAgICAgaWYgKGlzQ29ubmVjdGVkKCkpCiAgICAgICAgICAg
ICB0cmVlU2NvcGUoKS5hZGRJbWFnZU1hcCgqdGhpcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MUGx1Z0luRWxlbWVudC5jcHAKaW5kZXggYjQ4ZDBhNTZkNWU1NzA0YzcxNmVkYTUyYWU4NTRj
YmU1MWExZTdlZC4uMGYxM2YwMWEwZmZiYmY3Mzg2N2MzYjhkOTdiZjY5MzE2NDIxNzA1YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5jcHAKQEAgLTMwOCwxMSArMzA4
LDExIEBAIHN0YXRpYyBSZXBsYWNlbWVudFBsdWdpbiogcGx1Z2luUmVwbGFjZW1lbnRGb3JUeXBl
KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmCiAgICAgaWYgKHJlcGxhY2VtZW50cy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgU3RyaW5nIGV4dGVuc2lvbjsK
KyAgICBTdHJpbmdWaWV3IGV4dGVuc2lvbjsKICAgICBhdXRvIGxhc3RQYXRoQ29tcG9uZW50ID0g
dXJsLmxhc3RQYXRoQ29tcG9uZW50KCk7CiAgICAgc2l6ZV90IGRvdE9mZnNldCA9IGxhc3RQYXRo
Q29tcG9uZW50LnJldmVyc2VGaW5kKCcuJyk7CiAgICAgaWYgKGRvdE9mZnNldCAhPSBub3RGb3Vu
ZCkKLSAgICAgICAgZXh0ZW5zaW9uID0gbGFzdFBhdGhDb21wb25lbnQuc3Vic3RyaW5nKGRvdE9m
ZnNldCArIDEpLnRvU3RyaW5nKCk7CisgICAgICAgIGV4dGVuc2lvbiA9IGxhc3RQYXRoQ29tcG9u
ZW50LnN1YnN0cmluZyhkb3RPZmZzZXQgKyAxKTsKIAogICAgIFN0cmluZyB0eXBlID0gbWltZVR5
cGU7CiAgICAgaWYgKHR5cGUuaXNFbXB0eSgpICYmIHVybC5wcm90b2NvbElzRGF0YSgpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuY3BwCmluZGV4IGE2MDNjMDgxZTkw
YjQ2ZDUzNGU5MDNlZWVjY2EwNjRmNzYzZThjYWQuLjhmZDFjMzM1YjA2NjcwODUxNDk5M2VjYzlk
N2JlNGMwY2VlOWZiMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2Vi
VlRUUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFBhcnNl
ci5jcHAKQEAgLTMxNSw3ICszMTUsNyBAQCBXZWJWVFRQYXJzZXI6OlBhcnNlU3RhdGUgV2ViVlRU
UGFyc2VyOjpjb2xsZWN0U3R5bGVTaGVldChjb25zdCBTdHJpbmcmIGxpbmUpCiAgICAgcmV0dXJu
IFN0eWxlOwogfQogCi1ib29sIFdlYlZUVFBhcnNlcjo6Y2hlY2tBbmRDcmVhdGVSZWdpb24oY29u
c3QgU3RyaW5nJiBsaW5lKQorYm9vbCBXZWJWVFRQYXJzZXI6OmNoZWNrQW5kQ3JlYXRlUmVnaW9u
KFN0cmluZ1ZpZXcgbGluZSkKIHsKICAgICBpZiAobV9wcmV2aW91c0xpbmUuY29udGFpbnMoIi0t
PiIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMjksNyArMzI5LDcgQEAgYm9vbCBXZWJW
VFRQYXJzZXI6OmNoZWNrQW5kQ3JlYXRlUmVnaW9uKGNvbnN0IFN0cmluZyYgbGluZSkKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgV2ViVlRUUGFyc2VyOjpjaGVja0FuZFN0b3JlUmVnaW9u
KGNvbnN0IFN0cmluZyYgbGluZSkKK2Jvb2wgV2ViVlRUUGFyc2VyOjpjaGVja0FuZFN0b3JlUmVn
aW9uKFN0cmluZ1ZpZXcgbGluZSkKIHsKICAgICBpZiAoIWxpbmUuaXNFbXB0eSgpICYmICFsaW5l
LmNvbnRhaW5zKCItLT4iKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzQ0LDcgKzM0NCw3
IEBAIGJvb2wgV2ViVlRUUGFyc2VyOjpjaGVja0FuZFN0b3JlUmVnaW9uKGNvbnN0IFN0cmluZyYg
bGluZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBXZWJWVFRQYXJzZXI6OmNoZWNrU3R5
bGVTaGVldChjb25zdCBTdHJpbmcmIGxpbmUpCitib29sIFdlYlZUVFBhcnNlcjo6Y2hlY2tTdHls
ZVNoZWV0KFN0cmluZ1ZpZXcgbGluZSkKIHsKICAgICBpZiAobV9wcmV2aW91c0xpbmUuY29udGFp
bnMoIi0tPiIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNTcsNyArMzU3LDcgQEAgYm9v
bCBXZWJWVFRQYXJzZXI6OmNoZWNrU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIGxpbmUpCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFdlYlZUVFBhcnNlcjo6Y2hlY2tBbmRTdG9yZVN0eWxl
U2hlZXQoY29uc3QgU3RyaW5nJiBsaW5lKQorYm9vbCBXZWJWVFRQYXJzZXI6OmNoZWNrQW5kU3Rv
cmVTdHlsZVNoZWV0KFN0cmluZ1ZpZXcgbGluZSkKIHsKICAgICBpZiAoIWxpbmUuaXNFbXB0eSgp
ICYmICFsaW5lLmNvbnRhaW5zKCItLT4iKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmgKaW5kZXggMmZiMzA5MDU0MjRmY2U5ZmYy
MzkxM2RiM2U5NzRjMTIzYTQ0NjYzYS4uMTZlYWRjYjc3ZThmNzU3Y2I0ZTNiODkwZTU2YTg4ZTZi
NjU0ZTI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQYXJz
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFBhcnNlci5oCkBAIC0x
NzAsMTAgKzE3MCwxMCBAQCBwcml2YXRlOgogICAgIFBhcnNlU3RhdGUgY29sbGVjdFdlYlZUVEJs
b2NrKGNvbnN0IFN0cmluZyYpOwogICAgIFBhcnNlU3RhdGUgY2hlY2tBbmRSZWNvdmVyQ3VlKGNv
bnN0IFN0cmluZyYgbGluZSk7CiAgICAgUGFyc2VTdGF0ZSBjb2xsZWN0U3R5bGVTaGVldChjb25z
dCBTdHJpbmcmKTsKLSAgICBib29sIGNoZWNrQW5kQ3JlYXRlUmVnaW9uKGNvbnN0IFN0cmluZyYg
bGluZSk7Ci0gICAgYm9vbCBjaGVja0FuZFN0b3JlUmVnaW9uKGNvbnN0IFN0cmluZyYgbGluZSk7
Ci0gICAgYm9vbCBjaGVja1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBsaW5lKTsKLSAgICBib29s
IGNoZWNrQW5kU3RvcmVTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgbGluZSk7CisgICAgYm9vbCBj
aGVja0FuZENyZWF0ZVJlZ2lvbihTdHJpbmdWaWV3IGxpbmUpOworICAgIGJvb2wgY2hlY2tBbmRT
dG9yZVJlZ2lvbihTdHJpbmdWaWV3IGxpbmUpOworICAgIGJvb2wgY2hlY2tTdHlsZVNoZWV0KFN0
cmluZ1ZpZXcgbGluZSk7CisgICAgYm9vbCBjaGVja0FuZFN0b3JlU3R5bGVTaGVldChTdHJpbmdW
aWV3IGxpbmUpOwogCiAgICAgdm9pZCBjcmVhdGVOZXdDdWUoKTsKICAgICB2b2lkIHJlc2V0Q3Vl
VmFsdWVzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
U3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5jcHAKaW5kZXggMDkwMTZlNWM3MTFkNTY1MTNlMzVjMzg0ZDRkZDMwMDJkZDM0NjcyZi4u
ZTgwNzk2MWU3NmVmYjE5OGY5Mjc2ODUwYjg4OTU1N2ExYTI2OWFmNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcApAQCAtMzUyLDE0ICsz
NTIsMTQgQEAgdm9pZCBTdHlsZVNoZWV0SGFuZGxlcjo6b2JzZXJ2ZVByb3BlcnR5KHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQKICAgICAgICAgKytlbmRPZmZzZXQ7CiAg
ICAgCiAgICAgQVNTRVJUKHN0YXJ0T2Zmc2V0IDwgZW5kT2Zmc2V0KTsKLSAgICBTdHJpbmcgcHJv
cGVydHlTdHJpbmcgPSBtX3BhcnNlZFRleHQuc3Vic3RyaW5nKHN0YXJ0T2Zmc2V0LCBlbmRPZmZz
ZXQgLSBzdGFydE9mZnNldCkuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgU3RyaW5nVmlldyBwcm9w
ZXJ0eVN0cmluZyA9IFN0cmluZ1ZpZXcobV9wYXJzZWRUZXh0KS5zdWJzdHJpbmcoc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0KS5zdHJpcExlYWRpbmdBbmRUcmFpbGluZ01hdGNo
ZWRDaGFyYWN0ZXJzKGlzU3BhY2VPck5ld2xpbmUpOwogICAgIGlmIChwcm9wZXJ0eVN0cmluZy5l
bmRzV2l0aCgnOycpKQogICAgICAgICBwcm9wZXJ0eVN0cmluZyA9IHByb3BlcnR5U3RyaW5nLmxl
ZnQocHJvcGVydHlTdHJpbmcubGVuZ3RoKCkgLSAxKTsKICAgICBzaXplX3QgY29sb25JbmRleCA9
IHByb3BlcnR5U3RyaW5nLmZpbmQoJzonKTsKICAgICBBU1NFUlQoY29sb25JbmRleCAhPSBub3RG
b3VuZCk7CiAKLSAgICBTdHJpbmcgbmFtZSA9IHByb3BlcnR5U3RyaW5nLmxlZnQoY29sb25JbmRl
eCkuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0gICAgU3RyaW5nIHZhbHVlID0gcHJvcGVydHlTdHJpbmcu
c3Vic3RyaW5nKGNvbG9uSW5kZXggKyAxLCBwcm9wZXJ0eVN0cmluZy5sZW5ndGgoKSkuc3RyaXBX
aGl0ZVNwYWNlKCk7CisgICAgU3RyaW5nIG5hbWUgPSBwcm9wZXJ0eVN0cmluZy5sZWZ0KGNvbG9u
SW5kZXgpLnN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nTWF0Y2hlZENoYXJhY3RlcnMoaXNTcGFjZU9y
TmV3bGluZSkudG9TdHJpbmcoKTsKKyAgICBTdHJpbmcgdmFsdWUgPSBwcm9wZXJ0eVN0cmluZy5z
dWJzdHJpbmcoY29sb25JbmRleCArIDEsIHByb3BlcnR5U3RyaW5nLmxlbmd0aCgpKS5zdHJpcExl
YWRpbmdBbmRUcmFpbGluZ01hdGNoZWRDaGFyYWN0ZXJzKGlzU3BhY2VPck5ld2xpbmUpLnRvU3Ry
aW5nKCk7CiAgICAgCiAgICAgLy8gRklYTUUtTkVXUEFSU0VSOiBUaGUgcHJvcGVydHkgcmFuZ2Ug
aXMgcmVsYXRpdmUgdG8gdGhlIGRlY2xhcmF0aW9uIHN0YXJ0IG9mZnNldCwgYnV0IG5vCiAgICAg
Ly8gZ29vZCByZWFzb24gZm9yIGl0LCBhbmQgaXQgY29tcGxpY2F0ZXMgZml4VW5wYXJzZWRQcm9w
ZXJ0aWVzLgpAQCAtMzc2LDE3ICszNzYsMTkgQEAgdm9pZCBTdHlsZVNoZWV0SGFuZGxlcjo6b2Jz
ZXJ2ZUNvbW1lbnQodW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKICAg
ICAKICAgICAvLyBUaGUgbGV4ZXIgaXMgbm90IGluc2lkZSBhIHByb3BlcnR5IEFORCBpdCBpcyBz
Y2FubmluZyBhIGRlY2xhcmF0aW9uLWF3YXJlCiAgICAgLy8gcnVsZSBib2R5LgotICAgIFN0cmlu
ZyBjb21tZW50VGV4dCA9IG1fcGFyc2VkVGV4dC5zdWJzdHJpbmcoc3RhcnRPZmZzZXQsIGVuZE9m
ZnNldCAtIHN0YXJ0T2Zmc2V0KTsKKyAgICBhdXRvIGNvbW1lbnRUZXh0VmlldyA9IFN0cmluZ1Zp
ZXcobV9wYXJzZWRUZXh0KS5zdWJzdHJpbmcoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0
T2Zmc2V0KTsKICAgICAKLSAgICBBU1NFUlQoY29tbWVudFRleHQuc3RhcnRzV2l0aCgiLyoiKSk7
Ci0gICAgY29tbWVudFRleHQgPSBjb21tZW50VGV4dC5zdWJzdHJpbmcoMik7CisgICAgQVNTRVJU
KGNvbW1lbnRUZXh0Vmlldy5zdGFydHNXaXRoKCIvKiIpKTsKKyAgICBjb21tZW50VGV4dFZpZXcg
PSBjb21tZW50VGV4dFZpZXcuc3Vic3RyaW5nKDIpOwogICAgIAogICAgIC8vIFJlcXVpcmUgd2Vs
bC1mb3JtZWQgY29tbWVudHMuCi0gICAgaWYgKCFjb21tZW50VGV4dC5lbmRzV2l0aCgiKi8iKSkK
KyAgICBpZiAoIWNvbW1lbnRUZXh0Vmlldy5lbmRzV2l0aCgiKi8iKSkKICAgICAgICAgcmV0dXJu
OwotICAgIGNvbW1lbnRUZXh0ID0gY29tbWVudFRleHQubGVmdChjb21tZW50VGV4dC5sZW5ndGgo
KSAtIDIpLnN0cmlwV2hpdGVTcGFjZSgpOwotICAgIGlmIChjb21tZW50VGV4dC5pc0VtcHR5KCkp
CisgICAgY29tbWVudFRleHRWaWV3ID0gY29tbWVudFRleHRWaWV3LmxlZnQoY29tbWVudFRleHRW
aWV3Lmxlbmd0aCgpIC0gMikuc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdNYXRjaGVkQ2hhcmFjdGVy
cyhpc1NwYWNlT3JOZXdsaW5lKTsKKyAgICBpZiAoY29tbWVudFRleHRWaWV3LmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBjb21tZW50VGV4dCA9IGNvbW1lbnRUZXh0Vmll
dy50b1N0cmluZygpOwogICAgIAogICAgIC8vIEZJWE1FOiBVc2UgdGhlIGFjdHVhbCBydWxlIHR5
cGUgcmF0aGVyIHRoYW4gU1RZTEVfUlVMRT8KICAgICBSdWxlU291cmNlRGF0YUxpc3Qgc291cmNl
RGF0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvaW5saW5lL0lubGluZUxpbmVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmVCdWlsZGVyLmNwcAppbmRleCAyN2Y1
NGMxNDVkZTI2NWY0M2RiMTdjOWU2NTkyOTE4Mzg5YjcxZGQ3Li43NjI5M2M3MzUxMGYzOTQ5YWE0
YjU0MDk0N2M0ZGYxYzA0Yzg0NjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lQnVpbGRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZUJ1
aWxkZXIuY3BwCkBAIC00OSw3ICs0OSw3IEBAIHN0YXRpYyBpbmxpbmUgU3RyaW5nQnVpbGRlciB0
b1N0cmluZyhjb25zdCBMaW5lOjpSdW5MaXN0JiBydW5zKQogICAgICAgICBpZiAoIXJ1bi5pc1Rl
eHQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBhdXRvJiB0ZXh0Q29udGVudCA9
IHJ1bi50ZXh0Q29udGVudCgpOwotICAgICAgICBsaW5lQ29udGVudEJ1aWxkZXIuYXBwZW5kKGRv
d25jYXN0PElubGluZVRleHRCb3g+KHJ1bi5sYXlvdXRCb3goKSkuY29udGVudCgpLnN1YnN0cmlu
Zyh0ZXh0Q29udGVudC0+c3RhcnQsIHRleHRDb250ZW50LT5sZW5ndGgpKTsKKyAgICAgICAgbGlu
ZUNvbnRlbnRCdWlsZGVyLmFwcGVuZChTdHJpbmdWaWV3KGRvd25jYXN0PElubGluZVRleHRCb3g+
KHJ1bi5sYXlvdXRCb3goKSkuY29udGVudCgpKS5zdWJzdHJpbmcodGV4dENvbnRlbnQtPnN0YXJ0
LCB0ZXh0Q29udGVudC0+bGVuZ3RoKSk7CiAgICAgfQogICAgIHJldHVybiBsaW5lQ29udGVudEJ1
aWxkZXI7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL2lubGluZS9kaXNwbGF5L0lubGluZURpc3BsYXlDb250ZW50QnVpbGRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9kaXNwbGF5L0lu
bGluZURpc3BsYXlDb250ZW50QnVpbGRlci5jcHAKaW5kZXggMTk0ZmQ3YWMxYWI4ZTAxMTI4YzFm
Y2NmMDdiYzQ4ODk4ZjgwZjk5ZS4uZjE4ODlmNDVmYWVhZDUyY2M5YzYzZTEwMGM3YTZkOThhMjdl
MDRkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9pbmxpbmUvZGlzcGxheS9JbmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL2Rpc3BsYXkvSW5s
aW5lRGlzcGxheUNvbnRlbnRCdWlsZGVyLmNwcApAQCAtMTYzLDEwICsxNjMsMTAgQEAgdm9pZCBJ
bmxpbmVEaXNwbGF5Q29udGVudEJ1aWxkZXI6OmFwcGVuZFRleHREaXNwbGF5Qm94KGNvbnN0IExp
bmU6OlJ1biYgbGluZVJ1biwKIAogICAgICAgICByZXR1cm4gaW5rT3ZlcmZsb3c7CiAgICAgfTsK
LSAgICBhdXRvIGNvbnRlbnQgPSBkb3duY2FzdDxJbmxpbmVUZXh0Qm94PihsYXlvdXRCb3gpLmNv
bnRlbnQoKTsKLSAgICBhdXRvIHRleHQgPSBsaW5lUnVuLnRleHRDb250ZW50KCk7CisgICAgYXV0
byYgY29udGVudCA9IGRvd25jYXN0PElubGluZVRleHRCb3g+KGxheW91dEJveCkuY29udGVudCgp
OworICAgIGF1dG8mIHRleHQgPSBsaW5lUnVuLnRleHRDb250ZW50KCk7CiAgICAgYXV0byBhZGp1
c3RlZENvbnRlbnRUb1JlbmRlciA9IFsmXSB7Ci0gICAgICAgIHJldHVybiB0ZXh0LT5uZWVkc0h5
cGhlbiA/IG1ha2VTdHJpbmcoY29udGVudC5zdWJzdHJpbmcodGV4dC0+c3RhcnQsIHRleHQtPmxl
bmd0aCksIHN0eWxlLmh5cGhlblN0cmluZygpKSA6IFN0cmluZygpOworICAgICAgICByZXR1cm4g
dGV4dC0+bmVlZHNIeXBoZW4gPyBtYWtlU3RyaW5nKFN0cmluZ1ZpZXcoY29udGVudCkuc3Vic3Ry
aW5nKHRleHQtPnN0YXJ0LCB0ZXh0LT5sZW5ndGgpLCBzdHlsZS5oeXBoZW5TdHJpbmcoKSkgOiBT
dHJpbmcoKTsKICAgICB9OwogICAgIGJveGVzLmFwcGVuZCh7IG1fbGluZUluZGV4CiAgICAgICAg
ICwgbGluZVJ1bi5pc1dvcmRTZXBhcmF0b3IoKSA/IElubGluZURpc3BsYXk6OkJveDo6VHlwZTo6
V29yZFNlcGFyYXRvciA6IElubGluZURpc3BsYXk6OkJveDo6VHlwZTo6VGV4dApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0SW5saW5lVGV4dEJveC5o
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0SW5saW5lVGV4dEJveC5o
CmluZGV4IDBmMDg4ZmZhNGYwYjVkNDUzYWE3NWMwYzI4MTgxYzcxNTRkM2NmZGIuLmQ2NmFhMzYz
YWIxNGE1YjBlOGNmNGMxOTBiNTliZDRiNGNhMjExMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9sYXlvdXR0cmVlL0xheW91dElubGluZVRleHRCb3guaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRJbmxpbmVUZXh0Qm94LmgKQEAgLTQwLDcg
KzQwLDcgQEAgcHVibGljOgogICAgIElubGluZVRleHRCb3goU3RyaW5nLCBib29sIGNhblVzZVNp
bXBsaWZpZWRDb250ZW50TWVhc3VyaW5nLCBib29sIGNhblVzZVNpbXBsZUZvbnRDb2RlUGF0aCwg
UmVuZGVyU3R5bGUmJiwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYmIGZpcnN0TGluZVN0
eWxlID0gbnVsbHB0cik7CiAgICAgdmlydHVhbCB+SW5saW5lVGV4dEJveCgpID0gZGVmYXVsdDsK
IAotICAgIFN0cmluZyBjb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50OyB9CisgICAg
Y29uc3QgU3RyaW5nJiBjb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50OyB9CiAgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIG5vdCBiZSBhIGJveCdzIHByb3BlcnR5LgogICAgIGJvb2wg
Y2FuVXNlU2ltcGxpZmllZENvbnRlbnRNZWFzdXJpbmcoKSBjb25zdCB7IHJldHVybiBtX2NhblVz
ZVNpbXBsaWZpZWRDb250ZW50TWVhc3VyaW5nOyB9CiAgICAgYm9vbCBjYW5Vc2VTaW1wbGVGb250
Q29kZVBhdGgoKSBjb25zdCB7IHJldHVybiBtX2NhblVzZVNpbXBsZUZvbnRDb2RlUGF0aDsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZS5jcHAKaW5kZXggNTIzMDBjNmM1YjgxZDY1MTIyMDVkOGMzZjMwNmY3MGI3
MDhmYjYyOC4uOGIwMzJmZWE5NTVlMTU3OTg5NzZkYzMyODYzOGE4ZTVmODYzNTlkYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25D
YWNoZVN0b3JhZ2UuY3BwCkBAIC03OTgsMTIgKzc5OCwxMiBAQCBib29sIEFwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlOjpzdG9yZShBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIHJlc291cmNlLCB1bnNp
Z25lZAogICAgICAgICBTdHJpbmcgZmxhdEZpbGVEaXJlY3RvcnkgPSBGaWxlU3lzdGVtOjpwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnQobV9jYWNoZURpcmVjdG9yeSwgbV9mbGF0RmlsZVN1YmRpcmVj
dG9yeU5hbWUpOwogICAgICAgICBGaWxlU3lzdGVtOjptYWtlQWxsRGlyZWN0b3JpZXMoZmxhdEZp
bGVEaXJlY3RvcnkpOwogCi0gICAgICAgIFN0cmluZyBleHRlbnNpb247CisgICAgICAgIFN0cmlu
Z1ZpZXcgZXh0ZW5zaW9uOwogICAgICAgICAKICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gcmVz
b3VyY2UtPnJlc3BvbnNlKCkuc3VnZ2VzdGVkRmlsZW5hbWUoKTsKICAgICAgICAgc2l6ZV90IGRv
dEluZGV4ID0gZmlsZU5hbWUucmV2ZXJzZUZpbmQoJy4nKTsKICAgICAgICAgaWYgKGRvdEluZGV4
ICE9IG5vdEZvdW5kICYmIGRvdEluZGV4IDwgKGZpbGVOYW1lLmxlbmd0aCgpIC0gMSkpCi0gICAg
ICAgICAgICBleHRlbnNpb24gPSBmaWxlTmFtZS5zdWJzdHJpbmcoZG90SW5kZXgpOworICAgICAg
ICAgICAgZXh0ZW5zaW9uID0gU3RyaW5nVmlldyhmaWxlTmFtZSkuc3Vic3RyaW5nKGRvdEluZGV4
KTsKIAogICAgICAgICBTdHJpbmcgcGF0aDsKICAgICAgICAgaWYgKCF3cml0ZURhdGFUb1VuaXF1
ZUZpbGVJbkRpcmVjdG9yeShyZXNvdXJjZS0+ZGF0YSgpLCBmbGF0RmlsZURpcmVjdG9yeSwgcGF0
aCwgZXh0ZW5zaW9uKSkKQEAgLTEyNzIsMTIgKzEyNzIsMTIgQEAgYm9vbCBBcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZTo6c2hvdWxkU3RvcmVSZXNvdXJjZUFzRmxhdEZpbGUoQXBwbGljYXRpb25DYWNo
ZVJlc28KICAgICByZXR1cm4gc3RhcnRzV2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh0eXBl
LCAiYXVkaW8vIikgfHwgc3RhcnRzV2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh0eXBlLCAi
dmlkZW8vIik7CiB9CiAgICAgCi1ib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp3cml0ZURh
dGFUb1VuaXF1ZUZpbGVJbkRpcmVjdG9yeShGcmFnbWVudGVkU2hhcmVkQnVmZmVyJiBkYXRhLCBj
b25zdCBTdHJpbmcmIGRpcmVjdG9yeSwgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGZpbGVF
eHRlbnNpb24pCitib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjp3cml0ZURhdGFUb1VuaXF1
ZUZpbGVJbkRpcmVjdG9yeShGcmFnbWVudGVkU2hhcmVkQnVmZmVyJiBkYXRhLCBjb25zdCBTdHJp
bmcmIGRpcmVjdG9yeSwgU3RyaW5nJiBwYXRoLCBTdHJpbmdWaWV3IGZpbGVFeHRlbnNpb24pCiB7
CiAgICAgU3RyaW5nIGZ1bGxQYXRoOwogICAgIAogICAgIGRvIHsKLSAgICAgICAgcGF0aCA9IEZp
bGVTeXN0ZW06OmVuY29kZUZvckZpbGVOYW1lKGNyZWF0ZVZlcnNpb240VVVJRFN0cmluZygpKSAr
IGZpbGVFeHRlbnNpb247CisgICAgICAgIHBhdGggPSBtYWtlU3RyaW5nKEZpbGVTeXN0ZW06OmVu
Y29kZUZvckZpbGVOYW1lKGNyZWF0ZVZlcnNpb240VVVJRFN0cmluZygpKSwgZmlsZUV4dGVuc2lv
bik7CiAgICAgICAgIC8vIEd1YXJkIGFnYWluc3QgdGhlIGFib3ZlIGZ1bmN0aW9uIGJlaW5nIGNh
bGxlZCBvbiBhIHBsYXRmb3JtIHdoaWNoIGRvZXMgbm90IGltcGxlbWVudAogICAgICAgICAvLyBj
cmVhdGVWZXJzaW9uNFVVSURTdHJpbmcoKS4KICAgICAgICAgQVNTRVJUKCFwYXRoLmlzRW1wdHko
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRp
b25DYWNoZVN0b3JhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNh
dGlvbkNhY2hlU3RvcmFnZS5oCmluZGV4IDQxMDJhMTgwOGI0NTU1N2I2NDVlMzZlN2U2ODFmYzRj
NmQyMDdjZTIuLjBiM2NjMWFiNjVhMGZlOGU0YmZhYzJhNzg0NjRlYjc3NjAwZWYxMGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZS5oCkBAIC0xMjIsNyArMTIyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGVuc3Vy
ZU9yaWdpblJlY29yZChjb25zdCBTZWN1cml0eU9yaWdpbiopOwogICAgIHN0YXRpYyBib29sIHNo
b3VsZFN0b3JlUmVzb3VyY2VBc0ZsYXRGaWxlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSopOwog
ICAgIHZvaWQgZGVsZXRlVGFibGVzKCk7Ci0gICAgYm9vbCB3cml0ZURhdGFUb1VuaXF1ZUZpbGVJ
bkRpcmVjdG9yeShGcmFnbWVudGVkU2hhcmVkQnVmZmVyJiwgY29uc3QgU3RyaW5nJiBkaXJlY3Rv
cnksIFN0cmluZyYgb3V0RmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgZmlsZUV4dGVuc2lvbik7Cisg
ICAgYm9vbCB3cml0ZURhdGFUb1VuaXF1ZUZpbGVJbkRpcmVjdG9yeShGcmFnbWVudGVkU2hhcmVk
QnVmZmVyJiwgY29uc3QgU3RyaW5nJiBkaXJlY3RvcnksIFN0cmluZyYgb3V0RmlsZW5hbWUsIFN0
cmluZ1ZpZXcgZmlsZUV4dGVuc2lvbik7CiAKICAgICB2b2lkIGxvYWRNYW5pZmVzdEhvc3RIYXNo
ZXMoKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRTVkdGb250LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdGb250
LmNwcAppbmRleCAwOGNhNDdlMTJkNDQwNmZhNWNmNTliYzA1OTE1YjM4NGUyOTVhOTU0Li5kMTY2
OTMzMzI2MjY3ZWZiNDdjN2IwZDc4MzlhMTBkYzc5Y2NjODlhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNWR0ZvbnQuY3BwCkBAIC0xMDMsNyArMTAzLDcgQEAgYm9v
bCBDYWNoZWRTVkdGb250OjplbnN1cmVDdXN0b21Gb250RGF0YShjb25zdCBBdG9tU3RyaW5nJiBy
ZW1vdGVVUkkpCiAgICAgcmV0dXJuIG1fZXh0ZXJuYWxTVkdEb2N1bWVudCAmJiBDYWNoZWRGb250
OjplbnN1cmVDdXN0b21Gb250RGF0YShtX2NvbnZlcnRlZEZvbnQuZ2V0KCkpOwogfQogCi1TVkdG
b250RWxlbWVudCogQ2FjaGVkU1ZHRm9udDo6Z2V0U1ZHRm9udEJ5SWQoY29uc3QgU3RyaW5nJiBm
b250TmFtZSkgY29uc3QKK1NWR0ZvbnRFbGVtZW50KiBDYWNoZWRTVkdGb250OjpnZXRTVkdGb250
QnlJZChjb25zdCBBdG9tU3RyaW5nJiBmb250TmFtZSkgY29uc3QKIHsKICAgICBBU1NFUlQobV9l
eHRlcm5hbFNWR0RvY3VtZW50KTsKICAgICBhdXRvIGVsZW1lbnRzID0gZGVzY2VuZGFudHNPZlR5
cGU8U1ZHRm9udEVsZW1lbnQ+KCptX2V4dGVybmFsU1ZHRG9jdW1lbnQpOwpAQCAtMTIyLDEwICsx
MjIsMTAgQEAgU1ZHRm9udEVsZW1lbnQqIENhY2hlZFNWR0ZvbnQ6Om1heWJlSW5pdGlhbGl6ZUV4
dGVybmFsU1ZHRm9udEVsZW1lbnQoY29uc3QgQXRvbVMKIHsKICAgICBpZiAobV9leHRlcm5hbFNW
R0ZvbnRFbGVtZW50KQogICAgICAgICByZXR1cm4gbV9leHRlcm5hbFNWR0ZvbnRFbGVtZW50Owot
ICAgIFN0cmluZyBmcmFnbWVudElkZW50aWZpZXI7CisgICAgQXRvbVN0cmluZyBmcmFnbWVudElk
ZW50aWZpZXI7CiAgICAgc2l6ZV90IHN0YXJ0ID0gcmVtb3RlVVJJLmZpbmQoJyMnKTsKICAgICBp
ZiAoc3RhcnQgIT0gbm90Rm91bmQpCi0gICAgICAgIGZyYWdtZW50SWRlbnRpZmllciA9IHJlbW90
ZVVSSS5zdHJpbmcoKS5zdWJzdHJpbmcoc3RhcnQgKyAxKTsKKyAgICAgICAgZnJhZ21lbnRJZGVu
dGlmaWVyID0gU3RyaW5nVmlldyhyZW1vdGVVUkkpLnN1YnN0cmluZyhzdGFydCArIDEpLnRvQXRv
bVN0cmluZygpOwogICAgIG1fZXh0ZXJuYWxTVkdGb250RWxlbWVudCA9IGdldFNWR0ZvbnRCeUlk
KGZyYWdtZW50SWRlbnRpZmllcik7CiAgICAgcmV0dXJuIG1fZXh0ZXJuYWxTVkdGb250RWxlbWVu
dDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdG
b250LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRm9udC5oCmluZGV4
IDM1M2QzZGU2M2IwNjI4NjEzYWJhZjc3N2ZlYjI1M2M1YjYyNDkwYzYuLmRmYjg5MmM5YzU3NGQx
NjJiMDNiMDkxNjE1NjE0MjVkZWQ0YTljNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRTVkdGb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZFNWR0ZvbnQuaApAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIEZvbnRQbGF0Zm9ybURhdGEgcGxhdGZvcm1EYXRhRnJvbUN1c3RvbURhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgYm9vbCBib2xkLCBib29sIGl0YWxpYywgY29uc3QgRm9udENyZWF0aW9u
Q29udGV4dCYpOwogCi0gICAgU1ZHRm9udEVsZW1lbnQqIGdldFNWR0ZvbnRCeUlkKGNvbnN0IFN0
cmluZyYpIGNvbnN0OworICAgIFNWR0ZvbnRFbGVtZW50KiBnZXRTVkdGb250QnlJZChjb25zdCBB
dG9tU3RyaW5nJikgY29uc3Q7CiAKICAgICBTVkdGb250RWxlbWVudCogbWF5YmVJbml0aWFsaXpl
RXh0ZXJuYWxTVkdGb250RWxlbWVudChjb25zdCBBdG9tU3RyaW5nJiByZW1vdGVVUkkpOwogICAg
IFNWR0ZvbnRGYWNlRWxlbWVudCogZmlyc3RGb250RmFjZShjb25zdCBBdG9tU3RyaW5nJiByZW1v
dGVVUkkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0xvY2F0aW9uLmNwcAppbmRleCBlNGYyN2IyZWNkOTYyZjJhNTky
NzAwNDc0NmY5M2NkYmIzNWRkYzZiLi40MmJhYThjYWIzMjhlMjdiYTJhOTZkMGRiNzlkYmEwZDNl
MzdmZTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0xvY2F0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0xvY2F0aW9uLmNwcApAQCAtMTk4LDkgKzE5OCw5IEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IExvY2F0aW9uOjpzZXRIYXNoKERPTVdpbmRvdyYgaW5jdW1iZW50V2lu
ZG93LCBET01XaW5kb3cmIGZpcnN0CiAgICAgQVNTRVJUKGZyYW1lLT5kb2N1bWVudCgpKTsKICAg
ICBhdXRvIHVybCA9IGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKTsKICAgICBhdXRvIG9sZEZyYWdt
ZW50SWRlbnRpZmllciA9IHVybC5mcmFnbWVudElkZW50aWZpZXIoKTsKLSAgICBhdXRvIG5ld0Zy
YWdtZW50SWRlbnRpZmllciA9IGhhc2g7Ci0gICAgaWYgKGhhc2hbMF0gPT0gJyMnKQotICAgICAg
ICBuZXdGcmFnbWVudElkZW50aWZpZXIgPSBoYXNoLnN1YnN0cmluZygxKTsKKyAgICBTdHJpbmdW
aWV3IG5ld0ZyYWdtZW50SWRlbnRpZmllciB7IGhhc2ggfTsKKyAgICBpZiAoaGFzaC5zdGFydHNX
aXRoKCcjJykpCisgICAgICAgIG5ld0ZyYWdtZW50SWRlbnRpZmllciA9IG5ld0ZyYWdtZW50SWRl
bnRpZmllci5zdWJzdHJpbmcoMSk7CiAgICAgdXJsLnNldEZyYWdtZW50SWRlbnRpZmllcihuZXdG
cmFnbWVudElkZW50aWZpZXIpOwogICAgIC8vIE5vdGUgdGhhdCBieSBwYXJzaW5nIHRoZSBVUkwg
YW5kICp0aGVuKiBjb21wYXJpbmcgZnJhZ21lbnRzLCB3ZSBhcmUgCiAgICAgLy8gY29tcGFyaW5n
IGZyYWdtZW50cyBwb3N0LWNhbm9uaWNhbGl6YXRpb24sIGFuZCBzbyB0aGlzIGhhbmRsZXMgdGhl
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXggNWQzZjY4MDQyZTcyZjI3Zjk1ZDU2YTViZTU5MDdkNDA1
ZjA1YTA0Zi4uOTM1OGI4NDY0YmI1OTM5MTA1YTY4OTg0NzZmZjY5MWFlZjNjMzc4MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2UuY3BwCkBAIC0yMDIzLDcgKzIwMjMsNyBAQCB2b2lkIFBhZ2U6OnVzZXJTdHlsZVNo
ZWV0TG9jYXRpb25DaGFuZ2VkKCkKICAgICBpZiAodXJsLnByb3RvY29sSXNEYXRhKCkgJiYgdXJs
LnN0cmluZygpLnN0YXJ0c1dpdGgoImRhdGE6dGV4dC9jc3M7Y2hhcnNldD11dGYtODtiYXNlNjQs
IikpIHsKICAgICAgICAgbV9kaWRMb2FkVXNlclN0eWxlU2hlZXQgPSB0cnVlOwogCi0gICAgICAg
IGlmIChhdXRvIHN0eWxlU2hlZXRBc1VURjggPSBiYXNlNjREZWNvZGUoUEFMOjpkZWNvZGVVUkxF
c2NhcGVTZXF1ZW5jZXModXJsLnN0cmluZygpLnN1YnN0cmluZygzNSkpLCBCYXNlNjREZWNvZGVP
cHRpb25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcykpCisgICAgICAgIGlmIChhdXRvIHN0eWxl
U2hlZXRBc1VURjggPSBiYXNlNjREZWNvZGUoUEFMOjpkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMo
U3RyaW5nVmlldyh1cmwuc3RyaW5nKCkpLnN1YnN0cmluZygzNSkpLCBCYXNlNjREZWNvZGVPcHRp
b25zOjpJZ25vcmVTcGFjZXNBbmROZXdMaW5lcykpCiAgICAgICAgICAgICBtX3VzZXJTdHlsZVNo
ZWV0ID0gU3RyaW5nOjpmcm9tVVRGOChzdHlsZVNoZWV0QXNVVEY4LT5kYXRhKCksIHN0eWxlU2hl
ZXRBc1VURjgtPnNpemUoKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1VzZXJDb250ZW50VVJMUGF0dGVybi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJD
b250ZW50VVJMUGF0dGVybi5jcHAKaW5kZXggNzU5MmQxZmMyMjEzZGZkYTIwMDQ3MTUxNmUzZGEz
OWNjNTg1OTdhMC4uZjE2ZmIzNTRlZDZiYTFmMGQwMjU0NTVlZDM1ZWFjMTk4MDE2OTdjOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudFVSTFBhdHRlcm4uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmNwcApAQCAtNjEs
MTUgKzYxLDE1IEBAIGJvb2wgVXNlckNvbnRlbnRVUkxQYXR0ZXJuOjptYXRjaGVzUGF0dGVybnMo
Y29uc3QgVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+CiAgICAgcmV0dXJuIG1hdGNoZXNB
bGxvd2xpc3QgJiYgIW1hdGNoZXNCbG9ja2xpc3Q7CiB9CiAKLWJvb2wgVXNlckNvbnRlbnRVUkxQ
YXR0ZXJuOjpwYXJzZShjb25zdCBTdHJpbmcmIHBhdHRlcm4pCitib29sIFVzZXJDb250ZW50VVJM
UGF0dGVybjo6cGFyc2UoU3RyaW5nVmlldyBwYXR0ZXJuKQogewogICAgIHN0YXRpYyBjb25zdGV4
cHIgQVNDSUlMaXRlcmFsIHNjaGVtZVNlcGFyYXRvciA9ICI6Ly8iX3M7CiAKLSAgICBzaXplX3Qg
c2NoZW1lRW5kUG9zID0gcGF0dGVybi5maW5kKFN0cmluZ1ZpZXcgeyBzY2hlbWVTZXBhcmF0b3Ig
fSk7CisgICAgc2l6ZV90IHNjaGVtZUVuZFBvcyA9IHBhdHRlcm4uZmluZChzY2hlbWVTZXBhcmF0
b3IpOwogICAgIGlmIChzY2hlbWVFbmRQb3MgPT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIG1fc2NoZW1lID0gcGF0dGVybi5sZWZ0KHNjaGVtZUVuZFBvcyk7CisgICAg
bV9zY2hlbWUgPSBwYXR0ZXJuLmxlZnQoc2NoZW1lRW5kUG9zKS50b1N0cmluZygpOwogCiAgICAg
dW5zaWduZWQgaG9zdFN0YXJ0UG9zID0gc2NoZW1lRW5kUG9zICsgc2NoZW1lU2VwYXJhdG9yLmxl
bmd0aCgpOwogICAgIGlmIChob3N0U3RhcnRQb3MgPj0gcGF0dGVybi5sZW5ndGgoKSkKQEAgLTg0
LDcgKzg0LDcgQEAgYm9vbCBVc2VyQ29udGVudFVSTFBhdHRlcm46OnBhcnNlKGNvbnN0IFN0cmlu
ZyYgcGF0dGVybikKICAgICAgICAgaWYgKGhvc3RFbmRQb3MgPT0gbm90Rm91bmQpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgbV9ob3N0ID0gcGF0dGVybi5zdWJzdHJpbmco
aG9zdFN0YXJ0UG9zLCBob3N0RW5kUG9zIC0gaG9zdFN0YXJ0UG9zKTsKKyAgICAgICAgbV9ob3N0
ID0gcGF0dGVybi5zdWJzdHJpbmcoaG9zdFN0YXJ0UG9zLCBob3N0RW5kUG9zIC0gaG9zdFN0YXJ0
UG9zKS50b1N0cmluZygpOwogICAgICAgICBtX21hdGNoU3ViZG9tYWlucyA9IGZhbHNlOwogCiAg
ICAgICAgIGlmIChtX2hvc3QgPT0gIioiKSB7CkBAIC0xMDQsNyArMTA0LDcgQEAgYm9vbCBVc2Vy
Q29udGVudFVSTFBhdHRlcm46OnBhcnNlKGNvbnN0IFN0cmluZyYgcGF0dGVybikKICAgICAgICAg
cGF0aFN0YXJ0UG9zID0gaG9zdEVuZFBvczsKICAgICB9CiAKLSAgICBtX3BhdGggPSBwYXR0ZXJu
LnJpZ2h0KHBhdHRlcm4ubGVuZ3RoKCkgLSBwYXRoU3RhcnRQb3MpOworICAgIG1fcGF0aCA9IHBh
dHRlcm4ucmlnaHQocGF0dGVybi5sZW5ndGgoKSAtIHBhdGhTdGFydFBvcykudG9TdHJpbmcoKTsK
IAogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9V
c2VyQ29udGVudFVSTFBhdHRlcm4uaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRV
UkxQYXR0ZXJuLmgKaW5kZXggOWEyZjBhNWYxNWVhM2U5MmZlMTM4ZDc1ZTU4YmEyNTk1NWRjNTE4
Zi4uZTBjYWE1OGZiYmQ1N2IwNzc5OWM4MzkyYjdlZmYzOGUxYjE2ODcxMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudFVSTFBhdHRlcm4uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1VzZXJDb250ZW50VVJMUGF0dGVybi5oCkBAIC0zMiwxMCArMzIsOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFVzZXJDb250ZW50VVJMUGF0dGVybiB7CiBwdWJs
aWM6Ci0gICAgVXNlckNvbnRlbnRVUkxQYXR0ZXJuKCkgOiBtX2ludmFsaWQodHJ1ZSksIG1fbWF0
Y2hTdWJkb21haW5zKGZhbHNlKSB7IH0KKyAgICBVc2VyQ29udGVudFVSTFBhdHRlcm4oKSA9IGRl
ZmF1bHQ7CiAKLSAgICBVc2VyQ29udGVudFVSTFBhdHRlcm4oY29uc3QgU3RyaW5nJiBwYXR0ZXJu
KQotICAgIDogbV9tYXRjaFN1YmRvbWFpbnMoZmFsc2UpCisgICAgZXhwbGljaXQgVXNlckNvbnRl
bnRVUkxQYXR0ZXJuKFN0cmluZ1ZpZXcgcGF0dGVybikKICAgICB7CiAgICAgICAgIG1faW52YWxp
ZCA9ICFwYXJzZShwYXR0ZXJuKTsKICAgICB9CkBAIC01MywxOCArNTIsMTcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBib29sIG1hdGNoZXNQYXR0ZXJucyhjb25zdCBVUkwmLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgYWxsb3dsaXN0LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvY2tsaXN0KTsKIAog
cHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIHBhcnNlKGNvbnN0IFN0cmluZyYgcGF0
dGVybik7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBwYXJzZShTdHJpbmdWaWV3IHBhdHRlcm4p
OwogCiAgICAgYm9vbCBtYXRjaGVzSG9zdChjb25zdCBVUkwmKSBjb25zdDsKICAgICBib29sIG1h
dGNoZXNQYXRoKGNvbnN0IFVSTCYpIGNvbnN0OwogCi0gICAgYm9vbCBtX2ludmFsaWQ7Ci0KICAg
ICBTdHJpbmcgbV9zY2hlbWU7CiAgICAgU3RyaW5nIG1faG9zdDsKICAgICBTdHJpbmcgbV9wYXRo
OwogCi0gICAgYm9vbCBtX21hdGNoU3ViZG9tYWluczsKKyAgICBib29sIG1faW52YWxpZCB7IHRy
dWUgfTsKKyAgICBib29sIG1fbWF0Y2hTdWJkb21haW5zIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01J
TUVUeXBlUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdp
c3RyeS5jcHAKaW5kZXggMjljZmMzMDQzMjJiYmQyZGE4ZDAzNTViYmVlMzVkNzE1MjU0M2M1Mi4u
YjQ3NzMxMzVmYzg3M2M5NjRjZDEwMzYwOWZlYzA4NDk4YzZlM2M1YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKQEAgLTM3OSwxNSArMzc5LDE1IEBA
IHN0YXRpYyBjb25zdCBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4sIEFTQ0lJQ2FzZUlu
c2Vuc2l0aXZlSGFzaD4mIGNvbW1vbk1pCiAgICAgcmV0dXJuIG1pbWVUeXBlc01hcDsKIH0KIAot
c3RhdGljIGNvbnN0IFZlY3RvcjxTdHJpbmc+KiB0eXBlc0ZvckNvbW1vbkV4dGVuc2lvbihjb25z
dCBTdHJpbmcmIGV4dGVuc2lvbikKK3N0YXRpYyBjb25zdCBWZWN0b3I8U3RyaW5nPiogdHlwZXNG
b3JDb21tb25FeHRlbnNpb24oU3RyaW5nVmlldyBleHRlbnNpb24pCiB7Ci0gICAgYXV0byBtYXBF
bnRyeSA9IGNvbW1vbk1pbWVUeXBlc01hcCgpLmZpbmQoZXh0ZW5zaW9uKTsKKyAgICBhdXRvIG1h
cEVudHJ5ID0gY29tbW9uTWltZVR5cGVzTWFwKCkuZmluZDxBU0NJSUNhc2VJbnNlbnNpdGl2ZVN0
cmluZ1ZpZXdIYXNoVHJhbnNsYXRvcj4oZXh0ZW5zaW9uKTsKICAgICBpZiAobWFwRW50cnkgPT0g
Y29tbW9uTWltZVR5cGVzTWFwKCkuZW5kKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IHJldHVybiAmbWFwRW50cnktPnZhbHVlOwogfQogCi1TdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6
bWVkaWFNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikKK1N0cmlu
ZyBNSU1FVHlwZVJlZ2lzdHJ5OjptZWRpYU1JTUVUeXBlRm9yRXh0ZW5zaW9uKFN0cmluZ1ZpZXcg
ZXh0ZW5zaW9uKQogewogICAgIGF1dG8qIHZlY3RvciA9IHR5cGVzRm9yQ29tbW9uRXh0ZW5zaW9u
KGV4dGVuc2lvbik7CiAgICAgaWYgKHZlY3RvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01J
TUVUeXBlUmVnaXN0cnkuaAppbmRleCA2YjUxNjJkOWFkY2YyY2VlMjI5ODM0ZDU4NWM1MDY1OTQ3
N2RlY2JhLi4yYmQwYzg5MGIwY2UzMWI1Y2JlMGQ0ZTJiZDkxOTBiNGQ1M2QwMmNjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5oCkBAIC01Niw3ICs1Niw3IEBA
IHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIG1pbWVUeXBlRm9yRXh0
ZW5zaW9uKFN0cmluZ1ZpZXcpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBWZWN0b3I8U3Ry
aW5nPiBleHRlbnNpb25zRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKGNv
bnN0IFN0cmluZyYgdHlwZSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBtZWRp
YU1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIG1lZGlhTUlNRVR5cGVGb3JFeHRlbnNpb24oU3RyaW5n
VmlldyBleHRlbnNpb24pOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBtaW1l
VHlwZUZvclBhdGgoU3RyaW5nVmlldyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL0RyYWdJbWFnZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y29jb2EvRHJhZ0ltYWdlQ29jb2EubW0KaW5kZXggZTM4ZGFmODg1YTM2NDdjMDBmYzQ5OWIwNTRm
MGRiZGU5NDM5MzdiYS4uOTA2MGUxZGNmMTlkYTMzZWZiZTIxYzAyNDk5ZDBlZTExMzg5NWU4ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdlQ29jb2Eu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdlQ29jb2EubW0K
QEAgLTEzOSwxOCArMTM5LDE4IEBAIFJldGFpblB0cjxOU0ltYWdlPiBjcmVhdGVEcmFnSW1hZ2VG
cm9tSW1hZ2UoSW1hZ2UqIGltYWdlLCBJbWFnZU9yaWVudGF0aW9uIG9yaWVuCiAgICAgCiBSZXRh
aW5QdHI8TlNJbWFnZT4gY3JlYXRlRHJhZ0ltYWdlSWNvbkZvckNhY2hlZEltYWdlRmlsZW5hbWUo
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKIHsKLSAgICBOU1N0cmluZyAqZXh0ZW5zaW9uID0gbmls
OworICAgIFJldGFpblB0cjxOU1N0cmluZz4gZXh0ZW5zaW9uOwogICAgIHNpemVfdCBkb3RJbmRl
eCA9IGZpbGVuYW1lLnJldmVyc2VGaW5kKCcuJyk7CiAgICAgCiAgICAgaWYgKGRvdEluZGV4ICE9
IG5vdEZvdW5kICYmIGRvdEluZGV4IDwgKGZpbGVuYW1lLmxlbmd0aCgpIC0gMSkpIC8vIHJlcXVp
cmUgdGhhdCBhIC4gZXhpc3RzIGFmdGVyIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYW5kIGJlZm9yZSB0
aGUgbGFzdAotICAgICAgICBleHRlbnNpb24gPSBmaWxlbmFtZS5zdWJzdHJpbmcoZG90SW5kZXgg
KyAxKTsKKyAgICAgICAgZXh0ZW5zaW9uID0gU3RyaW5nVmlldyhmaWxlbmFtZSkuc3Vic3RyaW5n
KGRvdEluZGV4ICsgMSkuY3JlYXRlTlNTdHJpbmcoKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8g
SXQgbWlnaHQgYmUgd29ydGggZG9pbmcgYSBmdXJ0aGVyIGxvb2t1cCB0byBwdWxsIHRoZSBleHRl
bnNpb24gZnJvbSB0aGUgTUlNRSB0eXBlLgogICAgICAgICBleHRlbnNpb24gPSBAIiI7CiAgICAg
fQogICAgIAogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgcmV0
dXJuIFtbTlNXb3Jrc3BhY2Ugc2hhcmVkV29ya3NwYWNlXSBpY29uRm9yRmlsZVR5cGU6ZXh0ZW5z
aW9uXTsKKyAgICByZXR1cm4gW1tOU1dvcmtzcGFjZSBzaGFyZWRXb3Jrc3BhY2VdIGljb25Gb3JG
aWxlVHlwZTpleHRlbnNpb24uZ2V0KCldOwogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJ
T05TX0VORAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9NZWRpYVBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5jcHAKaW5kZXggYTI2ODdhODkzYmJmZDg5NGY2ODVmNDkyZDFmOTM5OTIxZTY1MDM2
MS4uZGJiODBjYTY0MzhjOTAzODU5YTdmOTkwMTg4NTRhZjYwYjcxZWU5YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcApAQCAtNDkzLDcg
KzQ5Myw3IEBAIGJvb2wgTWVkaWFQbGF5ZXI6OmxvYWQoY29uc3QgVVJMJiB1cmwsIGNvbnN0IENv
bnRlbnRUeXBlJiBjb250ZW50VHlwZSwgY29uc3QgU3RyCiAgICAgICAgICAgICBhdXRvIGxhc3RQ
YXRoQ29tcG9uZW50ID0gdXJsLmxhc3RQYXRoQ29tcG9uZW50KCk7CiAgICAgICAgICAgICBzaXpl
X3QgcG9zID0gbGFzdFBhdGhDb21wb25lbnQucmV2ZXJzZUZpbmQoJy4nKTsKICAgICAgICAgICAg
IGlmIChwb3MgIT0gbm90Rm91bmQpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgZXh0ZW5zaW9u
ID0gbGFzdFBhdGhDb21wb25lbnQuc3Vic3RyaW5nKHBvcyArIDEpLnRvU3RyaW5nKCk7CisgICAg
ICAgICAgICAgICAgYXV0byBleHRlbnNpb24gPSBsYXN0UGF0aENvbXBvbmVudC5zdWJzdHJpbmco
cG9zICsgMSk7CiAgICAgICAgICAgICAgICAgU3RyaW5nIG1lZGlhVHlwZSA9IE1JTUVUeXBlUmVn
aXN0cnk6Om1lZGlhTUlNRVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKICAgICAgICAgICAg
ICAgICBpZiAoIW1lZGlhVHlwZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgbV9j
b250ZW50VHlwZSA9IENvbnRlbnRUeXBlIHsgV1RGTW92ZShtZWRpYVR5cGUpIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRl
eHRHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dy
YXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCmluZGV4IGZlMTg4NTRkNjMzMTczYTY4ZmJlMDJjZDhl
ZGFmYzcyZmZhOGFmMzYuLmQ2NzdiM2M2ZmNmM2M5ZTM3MTdlNTczZThiZDk5ZWE0NDc3OWJmZTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBo
aWNzQ29udGV4dEdMQU5HTEUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCkBAIC0xOTAzLDcgKzE5MDMsNyBA
QCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6Z2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0sCiAgICAgLy8gaXMgY2F1c2luZyBpdC4KICAgICBzdGF0
aWMgY29uc3RleHByIGNoYXIgYW5nbGVXYXJuaW5nW10gPSAiV0FSTklORzogMDoxOiBleHRlbnNp
b24gJ0dMX0FSQl9ncHVfc2hhZGVyNScgaXMgbm90IHN1cHBvcnRlZFxuIjsKICAgICBpbnQgc3Rh
cnRGcm9tID0gbG9nLnN0YXJ0c1dpdGgoYW5nbGVXYXJuaW5nKSA/IHN0cmxlbihhbmdsZVdhcm5p
bmcpIDogMDsKLSAgICBwcm9jZXNzZWRMb2cuYXBwZW5kKGxvZy5zdWJzdHJpbmcoc3RhcnRGcm9t
LCBsb2cubGVuZ3RoKCkgLSBzdGFydEZyb20pKTsKKyAgICBwcm9jZXNzZWRMb2cuYXBwZW5kKFN0
cmluZ1ZpZXcobG9nKS5zdWJzdHJpbmcoc3RhcnRGcm9tLCBsb2cubGVuZ3RoKCkgLSBzdGFydEZy
b20pKTsKIAogICAgIExPRyhXZWJHTCwgIlVubWFuZ2xlZCBTaGFkZXJJbmZvTG9nOlxuJXMiLCBw
cm9jZXNzZWRMb2cudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICByZXR1cm4gcHJvY2Vz
c2VkTG9nLnRvU3RyaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRi5jcHAKaW5kZXggNzMzZDU2YTA4M2QzMGIzZjQ1ODQ3NDk1ZjdjODliMzE5ODQ2
OTQ5Mi4uYWQ4YzVkMThjNjg0MTIxOGRhMDBkM2U5NTI5YTZiMjUwOTQzODU4YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRl
eHRUcmFja1ByaXZhdGVBVkYuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcApAQCAtMzAwLDcg
KzMwMCw3IEBAIFJlZjxJbmJhbmRHZW5lcmljQ3VlPiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZG
Ojpwcm9jZXNzQ3VlQXR0cmlidXRlcyhDRkF0dHJpYnV0CiAgICAgICAgIH0KIAogICAgICAgICBj
b250ZW50LmFwcGVuZCh0YWdTdGFydCk7Ci0gICAgICAgIGNvbnRlbnQuYXBwZW5kKGF0dHJpYnV0
ZWRTdHJpbmdWYWx1ZS5zdWJzdHJpbmcoZWZmZWN0aXZlUmFuZ2UubG9jYXRpb24sIGVmZmVjdGl2
ZVJhbmdlLmxlbmd0aCkpOworICAgICAgICBjb250ZW50LmFwcGVuZChTdHJpbmdWaWV3KGF0dHJp
YnV0ZWRTdHJpbmdWYWx1ZSkuc3Vic3RyaW5nKGVmZmVjdGl2ZVJhbmdlLmxvY2F0aW9uLCBlZmZl
Y3RpdmVSYW5nZS5sZW5ndGgpKTsKICAgICAgICAgY29udGVudC5hcHBlbmQodGFnRW5kKTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCmluZGV4IDhmNTQ2NmE1
YTNlN2JlOWVjNmFjMDI5NTlhZmZkZTQ5ODViMDZkZTQuLjQ4MzgwMjIzNTdmODVlZTM0NzQyMzAz
ZjIzN2NhYTRlMjE3MTRjNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNw
cApAQCAtMTk4NCw3ICsxOTg0LDcgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwKICAgICAgICAg
aWYgKHN0YXJ0ID09IC0xKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgcHJvY2Vzc2Vk
TG9nLmFwcGVuZChsb2cuc3Vic3RyaW5nKHN0YXJ0RnJvbSwgc3RhcnQgLSBzdGFydEZyb20pKTsK
KyAgICAgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChTdHJpbmdWaWV3KGxvZykuc3Vic3RyaW5nKHN0
YXJ0RnJvbSwgc3RhcnQgLSBzdGFydEZyb20pKTsKICAgICAgICAgc3RhcnRGcm9tID0gc3RhcnQg
KyBtYXRjaGVkTGVuZ3RoOwogCiAgICAgICAgIGNvbnN0IFN0cmluZyYgbWFuZ2xlZFN5bWJvbCA9
IGxvZy5zdWJzdHJpbmcoc3RhcnQsIG1hdGNoZWRMZW5ndGgpOwpAQCAtMTk5Myw3ICsxOTkzLDcg
QEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKFBs
YXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSwKICAgICAgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZCht
YXBwZWRTeW1ib2wpOwogICAgIH0gd2hpbGUgKHN0YXJ0RnJvbSA8IHN0YXRpY19jYXN0PGludD4o
bG9nLmxlbmd0aCgpKSk7CiAKLSAgICBwcm9jZXNzZWRMb2cuYXBwZW5kKGxvZy5zdWJzdHJpbmco
c3RhcnRGcm9tLCBsb2cubGVuZ3RoKCkgLSBzdGFydEZyb20pKTsKKyAgICBwcm9jZXNzZWRMb2cu
YXBwZW5kKFN0cmluZ1ZpZXcobG9nKS5zdWJzdHJpbmcoc3RhcnRGcm9tLCBsb2cubGVuZ3RoKCkg
LSBzdGFydEZyb20pKTsKIAogICAgIExPRyhXZWJHTCwgIlVubWFuZ2xlZCBTaGFkZXJJbmZvTG9n
OlxuJXMiLCBwcm9jZXNzZWRMb2cudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICByZXR1
cm4gcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvSFRUUFBhcnNlcnMuY3BwCmluZGV4IDA0ODgxZGExOGEwYWMzMWY3ZDg1OTM2MWI3
ZWNlMWU2MzgzOWVjYTcuLjlkNTAzYjVhOTI5OTJlN2VlMWFmMzBmMDllMWRmMThhNTY3OWI4MjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuY3Bw
CkBAIC02MTgsNyArNjE4LDcgQEAgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8U3RyaW5nVmlldywg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4+PiBwYXJzZVN0cnVjdHVyZWRGaWUKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICsraW5kZXg7CiAgICAgICAgIH0KLSAgICAgICAgU3Ry
aW5nIGtleSA9IGhlYWRlci5zdWJzdHJpbmcoa2V5U3RhcnQsIGluZGV4IC0ga2V5U3RhcnQpLnRv
U3RyaW5nKCk7CisgICAgICAgIFN0cmluZ1ZpZXcga2V5ID0gaGVhZGVyLnN1YnN0cmluZyhrZXlT
dGFydCwgaW5kZXggLSBrZXlTdGFydCk7CiAgICAgICAgIFN0cmluZyB2YWx1ZSA9ICJ0cnVlIl9z
OwogICAgICAgICBpZiAoaW5kZXggPCBoZWFkZXIubGVuZ3RoKCkgJiYgaGVhZGVyW2luZGV4XSA9
PSAnPScpIHsKICAgICAgICAgICAgICsraW5kZXg7IC8vIENvbnN1bWUgJz0nLgpAQCAtNjU5LDE0
ICs2NTksMTQgQEAgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8U3RyaW5nVmlldywgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz4+PiBwYXJzZVN0cnVjdHVyZWRGaWUKICAgICAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIH0KLSAgICAgICAg
cGFyYW1ldGVycy5zZXQoV1RGTW92ZShrZXkpLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIHBh
cmFtZXRlcnMuc2V0KGtleS50b1N0cmluZygpLCBXVEZNb3ZlKHZhbHVlKSk7CiAgICAgfQogICAg
IGlmIChpbmRleCAhPSBoZWFkZXIubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CiAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGJhcmVJdGVtLCBwYXJhbWV0ZXJzKTsKIH0K
IAotYm9vbCBwYXJzZVJhbmdlKGNvbnN0IFN0cmluZyYgcmFuZ2UsIGxvbmcgbG9uZyYgcmFuZ2VP
ZmZzZXQsIGxvbmcgbG9uZyYgcmFuZ2VFbmQsIGxvbmcgbG9uZyYgcmFuZ2VTdWZmaXhMZW5ndGgp
Citib29sIHBhcnNlUmFuZ2UoU3RyaW5nVmlldyByYW5nZSwgbG9uZyBsb25nJiByYW5nZU9mZnNl
dCwgbG9uZyBsb25nJiByYW5nZUVuZCwgbG9uZyBsb25nJiByYW5nZVN1ZmZpeExlbmd0aCkKIHsK
ICAgICAvLyBUaGUgZm9ybWF0IG9mICJSYW5nZSIgaGVhZGVyIGlzIGRlZmluZWQgaW4gUkZDIDI2
MTYgU2VjdGlvbiAxNC4zNS4xLgogICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1Byb3RvY29scy9y
ZmMyNjE2L3JmYzI2MTYtc2VjMTQuaHRtbCNzZWMxNC4zNS4xCkBAIC02NzgsOCArNjc4LDggQEAg
Ym9vbCBwYXJzZVJhbmdlKGNvbnN0IFN0cmluZyYgcmFuZ2UsIGxvbmcgbG9uZyYgcmFuZ2VPZmZz
ZXQsIGxvbmcgbG9uZyYgcmFuZ2VFbmQKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgYnl0ZXNM
ZW5ndGggPSA2OwogICAgIGlmICghc3RhcnRzV2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShy
YW5nZSwgImJ5dGVzPSIpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gRklYTUU6IFRo
ZSByZXN0IG9mIHRoaXMgc2hvdWxkIHVzZSBTdHJpbmdWaWV3LgotICAgIFN0cmluZyBieXRlUmFu
Z2UgPSByYW5nZS5zdWJzdHJpbmcoYnl0ZXNMZW5ndGgpOworCisgICAgU3RyaW5nVmlldyBieXRl
UmFuZ2UgPSByYW5nZS5zdWJzdHJpbmcoYnl0ZXNMZW5ndGgpOwogCiAgICAgLy8gVGhlICctJyBj
aGFyYWN0ZXIgbmVlZHMgdG8gYmUgcHJlc2VudC4KICAgICBpbnQgaW5kZXggPSBieXRlUmFuZ2Uu
ZmluZCgnLScpOwpAQCAtNjkwLDcgKzY5MCw3IEBAIGJvb2wgcGFyc2VSYW5nZShjb25zdCBTdHJp
bmcmIHJhbmdlLCBsb25nIGxvbmcmIHJhbmdlT2Zmc2V0LCBsb25nIGxvbmcmIHJhbmdlRW5kCiAg
ICAgLy8gRXhhbXBsZToKICAgICAvLyAgICAgLTUwMAogICAgIGlmICghaW5kZXgpIHsKLSAgICAg
ICAgaWYgKGF1dG8gdmFsdWUgPSBwYXJzZUludGVnZXI8bG9uZyBsb25nPihTdHJpbmdWaWV3IHsg
Ynl0ZVJhbmdlIH0uc3Vic3RyaW5nKGluZGV4ICsgMSkpKQorICAgICAgICBpZiAoYXV0byB2YWx1
ZSA9IHBhcnNlSW50ZWdlcjxsb25nIGxvbmc+KGJ5dGVSYW5nZS5zdWJzdHJpbmcoaW5kZXggKyAx
KSkpCiAgICAgICAgICAgICByYW5nZVN1ZmZpeExlbmd0aCA9ICp2YWx1ZTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpAQCAtNjk5LDExICs2OTksMTEgQEAgYm9vbCBwYXJzZVJhbmdlKGNv
bnN0IFN0cmluZyYgcmFuZ2UsIGxvbmcgbG9uZyYgcmFuZ2VPZmZzZXQsIGxvbmcgbG9uZyYgcmFu
Z2VFbmQKICAgICAvLyBFeGFtcGxlczoKICAgICAvLyAgICAgMC00OTkKICAgICAvLyAgICAgNTAw
LQotICAgIGF1dG8gZmlyc3RCeXRlUG9zID0gcGFyc2VJbnRlZ2VyPGxvbmcgbG9uZz4oU3RyaW5n
VmlldyB7IGJ5dGVSYW5nZSB9LmxlZnQoaW5kZXgpKTsKKyAgICBhdXRvIGZpcnN0Qnl0ZVBvcyA9
IHBhcnNlSW50ZWdlcjxsb25nIGxvbmc+KGJ5dGVSYW5nZS5sZWZ0KGluZGV4KSk7CiAgICAgaWYg
KCFmaXJzdEJ5dGVQb3MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gbGFzdEJ5
dGVQb3NTdHIgPSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUVFBTcGFjZXMoU3RyaW5nVmlldyB7
IGJ5dGVSYW5nZSB9LnN1YnN0cmluZyhpbmRleCArIDEpKTsKKyAgICBhdXRvIGxhc3RCeXRlUG9z
U3RyID0gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVFRQU3BhY2VzKGJ5dGVSYW5nZS5zdWJzdHJp
bmcoaW5kZXggKyAxKSk7CiAgICAgbG9uZyBsb25nIGxhc3RCeXRlUG9zID0gLTE7CiAgICAgaWYg
KCFsYXN0Qnl0ZVBvc1N0ci5pc0VtcHR5KCkpIHsKICAgICAgICAgYXV0byB2YWx1ZSA9IHBhcnNl
SW50ZWdlcjxsb25nIGxvbmc+KGxhc3RCeXRlUG9zU3RyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuaAppbmRleCAwNTI4YzAyOTAwYjZjMWM2N2ExN2Ix
YmE1NjMwMTBmODEyZjc1YzI3Li5kNWNlNzgyOWI1YWQxNjIzZjY5NzEzOGY3Mjk2NThkYzBkMzM3
M2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJz
ZXJzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5o
CkBAIC04OCw3ICs4OCw3IEBAIFdFQkNPUkVfRVhQT1JUIFhGcmFtZU9wdGlvbnNEaXNwb3NpdGlv
biBwYXJzZVhGcmFtZU9wdGlvbnNIZWFkZXIoU3RyaW5nVmlldyk7CiBzdGQ6Om9wdGlvbmFsPHN0
ZDo6cGFpcjxTdHJpbmdWaWV3LCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPj4+IHBhcnNlU3RydWN0
dXJlZEZpZWxkVmFsdWUoU3RyaW5nVmlldyBoZWFkZXIpOwogCiAvLyAtMSBjb3VsZCBiZSBzZXQg
dG8gb25lIG9mIHRoZSByZXR1cm4gcGFyYW1ldGVycyB0byBpbmRpY2F0ZSB0aGUgdmFsdWUgaXMg
bm90IHNwZWNpZmllZC4KLVdFQkNPUkVfRVhQT1JUIGJvb2wgcGFyc2VSYW5nZShjb25zdCBTdHJp
bmcmLCBsb25nIGxvbmcmIHJhbmdlT2Zmc2V0LCBsb25nIGxvbmcmIHJhbmdlRW5kLCBsb25nIGxv
bmcmIHJhbmdlU3VmZml4TGVuZ3RoKTsKK1dFQkNPUkVfRVhQT1JUIGJvb2wgcGFyc2VSYW5nZShT
dHJpbmdWaWV3LCBsb25nIGxvbmcmIHJhbmdlT2Zmc2V0LCBsb25nIGxvbmcmIHJhbmdlRW5kLCBs
b25nIGxvbmcmIHJhbmdlU3VmZml4TGVuZ3RoKTsKIAogQ29udGVudFR5cGVPcHRpb25zRGlzcG9z
aXRpb24gcGFyc2VDb250ZW50VHlwZU9wdGlvbnNIZWFkZXIoU3RyaW5nVmlldyBoZWFkZXIpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9NSU1FSGVhZGVyLmNwcAppbmRl
eCA0MmZhNjExOGNlZjFhY2JmZTJlY2FjZWRhYWVhMjYyMTcwMzZlYTBlLi4xYTliODNlZWY1Nzcy
MWZmYzVlMTEwYTA4MzRiYjAzMTA2NzU1ZTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL01JTUVIZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvTUlNRUhlYWRlci5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgc3RhdGljIEtleVZh
bHVlTWFwIHJldHJpZXZlS2V5VmFsdWVQYWlycyhXZWJDb3JlOjpTaGFyZWRCdWZmZXJDaHVua1Jl
YWRlciYgYnVmZmUKICAgICAgICAgICAgIGJyZWFrOyAvLyBFbXB0eSBsaW5lIG1lYW5zIGVuZCBv
ZiBrZXkvdmFsdWUgc2VjdGlvbi4KICAgICAgICAgaWYgKGxpbmVbMF0gPT0gJ1x0JykgewogICAg
ICAgICAgICAgQVNTRVJUKCFrZXkuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIHZhbHVlLmFwcGVu
ZChsaW5lLnN1YnN0cmluZygxKSk7CisgICAgICAgICAgICB2YWx1ZS5hcHBlbmQoU3RyaW5nVmll
dyhsaW5lKS5zdWJzdHJpbmcoMSkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0K
ICAgICAgICAgLy8gTmV3IGtleS92YWx1ZSwgc3RvcmUgdGhlIHByZXZpb3VzIG9uZSBpZiBhbnku
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZENvbnRl
bnRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGFyc2VkQ29udGVu
dFR5cGUuY3BwCmluZGV4IGIyZTdiZGQzZjlmZWRmMjg2OWExMWJjNzYzYmVjNjc0NWI1MzliMmEu
LjZiOTE2NTkxNGMxZmMxMjMyMzg5N2NhNTJkNzM3MmQ3NjYxMzUxMjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGFyc2VkQ29udGVudFR5cGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGFyc2VkQ29udGVudFR5cGUuY3BwCkBA
IC0zNjUsOSArMzY1LDkgQEAgc2l6ZV90IFBhcnNlZENvbnRlbnRUeXBlOjpwYXJhbWV0ZXJDb3Vu
dCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcGFyYW1ldGVyVmFsdWVzLnNpemUoKTsKIH0KIAotdm9p
ZCBQYXJzZWRDb250ZW50VHlwZTo6c2V0Q29udGVudFR5cGUoU3RyaW5nVmlldyBjb250ZW50UmFu
Z2UsIE1vZGUgbW9kZSkKK3ZvaWQgUGFyc2VkQ29udGVudFR5cGU6OnNldENvbnRlbnRUeXBlKFN0
cmluZyYmIGNvbnRlbnRSYW5nZSwgTW9kZSBtb2RlKQogewotICAgIG1fbWltZVR5cGUgPSBjb250
ZW50UmFuZ2UudG9TdHJpbmcoKTsKKyAgICBtX21pbWVUeXBlID0gV1RGTW92ZShjb250ZW50UmFu
Z2UpOwogICAgIGlmIChtb2RlID09IE1vZGU6Ok1pbWVTbmlmZikKICAgICAgICAgbV9taW1lVHlw
ZSA9IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRUUFNwYWNlcyhtX21pbWVUeXBlKS5jb252ZXJ0
VG9BU0NJSUxvd2VyY2FzZSgpOwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUGFyc2VkQ29udGVudFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUGFyc2VkQ29udGVudFR5cGUuaAppbmRleCBkMjJiOTcyNTJlOWNiM2Zk
MjFiOGQ1OTRhNWJhOGQ0NDNiYTUwYmViLi40NmE1ZjVjMzA1ODI3NDRjNTMxNWU0ZjAyYmJiMzJj
YWQ2YmQwODExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Bh
cnNlZENvbnRlbnRUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Q
YXJzZWRDb250ZW50VHlwZS5oCkBAIC02Myw3ICs2Myw3IEBAIHByaXZhdGU6CiAgICAgUGFyc2Vk
Q29udGVudFR5cGUoY29uc3QgUGFyc2VkQ29udGVudFR5cGUmKSA9IGRlbGV0ZTsKICAgICBQYXJz
ZWRDb250ZW50VHlwZSYgb3BlcmF0b3I9KFBhcnNlZENvbnRlbnRUeXBlIGNvbnN0JikgPSBkZWxl
dGU7CiAgICAgYm9vbCBwYXJzZUNvbnRlbnRUeXBlKE1vZGUpOwotICAgIHZvaWQgc2V0Q29udGVu
dFR5cGUoU3RyaW5nVmlldywgTW9kZSk7CisgICAgdm9pZCBzZXRDb250ZW50VHlwZShTdHJpbmcm
JiwgTW9kZSk7CiAgICAgdm9pZCBzZXRDb250ZW50VHlwZVBhcmFtZXRlcihjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmLCBNb2RlKTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4gS2V5VmFsdWVQYWlyczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0TWFya2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0TWFya2VyLmNwcAppbmRleCA4NWI2YTNjZTEwMjlmMmRjNDM3MTFmNjRkMTA1OTIwM2IwYjk2
YjdlLi5kNzg1NmY2ZDhlOGRkNjkyY2JjYWNkNzc0ZTFkMGQwY2QzY2ZjMWU1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCkBAIC0xNTYyLDEzICsx
NTYyLDEzIEBAIGF1dG8gUmVuZGVyTGlzdE1hcmtlcjo6dGV4dFJ1bigpIGNvbnN0IC0+IFRleHRS
dW5XaXRoVW5kZXJseWluZ1N0cmluZwogICAgICAgICAgICAgaWYgKHN0eWxlKCkubGlzdFN0eWxl
VHlwZSgpID09IExpc3RTdHlsZVR5cGU6OkRpc2Nsb3N1cmVDbG9zZWQpCiAgICAgICAgICAgICAg
ICAgdGV4dEZvclJ1biA9IHsgJmJsYWNrTGVmdFBvaW50aW5nU21hbGxUcmlhbmdsZSwgMSB9Owog
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRleHRGb3JSdW4gPSBtYWtlU3RyaW5n
KHJldmVyc2VkKG1fdGV4dFdpdGhTdWZmaXguc3Vic3RyaW5nKG1fdGV4dFdpdGhvdXRTdWZmaXhM
ZW5ndGgpKSwgbV90ZXh0V2l0aFN1ZmZpeC5sZWZ0KG1fdGV4dFdpdGhvdXRTdWZmaXhMZW5ndGgp
KTsKKyAgICAgICAgICAgICAgICB0ZXh0Rm9yUnVuID0gbWFrZVN0cmluZyhyZXZlcnNlZChTdHJp
bmdWaWV3KG1fdGV4dFdpdGhTdWZmaXgpLnN1YnN0cmluZyhtX3RleHRXaXRob3V0U3VmZml4TGVu
Z3RoKSksIG1fdGV4dFdpdGhTdWZmaXgubGVmdChtX3RleHRXaXRob3V0U3VmZml4TGVuZ3RoKSk7
CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIXN0eWxlKCkuaXNMZWZ0VG9S
aWdodERpcmVjdGlvbigpKQogICAgICAgICAgICAgdGV4dEZvclJ1biA9IHJldmVyc2VkKG1fdGV4
dFdpdGhTdWZmaXgpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0ZXh0Rm9yUnVuID0gbWFr
ZVN0cmluZyhyZXZlcnNlZChtX3RleHRXaXRoU3VmZml4LmxlZnQobV90ZXh0V2l0aG91dFN1ZmZp
eExlbmd0aCkpLCBtX3RleHRXaXRoU3VmZml4LnN1YnN0cmluZyhtX3RleHRXaXRob3V0U3VmZml4
TGVuZ3RoKSk7CisgICAgICAgICAgICB0ZXh0Rm9yUnVuID0gbWFrZVN0cmluZyhyZXZlcnNlZChT
dHJpbmdWaWV3KG1fdGV4dFdpdGhTdWZmaXgpLmxlZnQobV90ZXh0V2l0aG91dFN1ZmZpeExlbmd0
aCkpLCBtX3RleHRXaXRoU3VmZml4LnN1YnN0cmluZyhtX3RleHRXaXRob3V0U3VmZml4TGVuZ3Ro
KSk7CiAgICAgfQogICAgIGF1dG8gdGV4dFJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0
UnVuKHRleHRGb3JSdW4sIHN0eWxlKCkpOwogICAgIHJldHVybiB7IFdURk1vdmUodGV4dFJ1biks
IFdURk1vdmUodGV4dEZvclJ1bikgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vY29jb2EvSW1hZ2VBbmFseXNpc1V0aWxpdGllcy5tbSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vY29jb2EvSW1hZ2VBbmFseXNpc1V0aWxpdGllcy5tbQppbmRleCAwMTUzMzc5MWRjMTg1MmNk
YWE1YjhjZGE0MzgwN2ZhMjM4M2QyMjk3Li43ZDFhNWM2ZDk1YzFmNjNiZDMwNDgwMGE5NWViZjQx
ZmQ4ZTU4NTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NvY29hL0ltYWdl
QW5hbHlzaXNVdGlsaXRpZXMubW0KKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jb2NvYS9J
bWFnZUFuYWx5c2lzVXRpbGl0aWVzLm1tCkBAIC0xMDQsNyArMTA0LDcgQEAgVGV4dFJlY29nbml0
aW9uUmVzdWx0IG1ha2VUZXh0UmVjb2duaXRpb25SZXN1bHQoQ29jb2FJbWFnZUFuYWx5c2lzICph
bmFseXNpcykKICAgICAgICAgICAgICAgICBpZiAobWF0Y2hMb2NhdGlvbiA9PSBzZWFyY2hMb2Nh
dGlvbikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFpc0ZpcnN0TGluZSAmJiAhc2VhcmNo
TG9jYXRpb247CiAKLSAgICAgICAgICAgICAgICBhdXRvIHRleHRCZWZvcmVNYXRjaCA9IGxpbmVU
ZXh0LnN1YnN0cmluZyhzZWFyY2hMb2NhdGlvbiwgbWF0Y2hMb2NhdGlvbiAtIHNlYXJjaExvY2F0
aW9uKTsKKyAgICAgICAgICAgICAgICBhdXRvIHRleHRCZWZvcmVNYXRjaCA9IFN0cmluZ1ZpZXco
bGluZVRleHQpLnN1YnN0cmluZyhzZWFyY2hMb2NhdGlvbiwgbWF0Y2hMb2NhdGlvbiAtIHNlYXJj
aExvY2F0aW9uKTsKICAgICAgICAgICAgICAgICByZXR1cm4gIXRleHRCZWZvcmVNYXRjaC5pc0Vt
cHR5KCkgJiYgaXNTcGFjZU9yTmV3bGluZSh0ZXh0QmVmb3JlTWF0Y2hbMF0pOwogICAgICAgICAg
ICAgfSkoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTWVk
aWFQZXJtaXNzaW9uVXRpbGl0aWVzLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
TWVkaWFQZXJtaXNzaW9uVXRpbGl0aWVzLm1tCmluZGV4IDBiYzE3ZmZmZmE3YTQ4ZWM3YWJhNDkw
Y2YzYWYyM2IyYjVmNmI4ZDEuLjBmMTUyYmYzYWU1YzI4OWUxYzhiOWYxNTg0NWYwNWQ5YWE3YmQ3
YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL01lZGlhUGVybWlz
c2lvblV0aWxpdGllcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9NZWRp
YVBlcm1pc3Npb25VdGlsaXRpZXMubW0KQEAgLTEwOSw3ICsxMDksNyBAQCBib29sIGNoZWNrVXNh
Z2VEZXNjcmlwdGlvblN0cmluZ0ZvclNwZWVjaFJlY29nbml0aW9uKCkKIHN0YXRpYyBOU1N0cmlu
ZyogdmlzaWJsZURvbWFpbihjb25zdCBTdHJpbmcmIGhvc3QpCiB7CiAgICAgYXV0byBkb21haW4g
PSBXVEY6OlVSTEhlbHBlcnM6OnVzZXJWaXNpYmxlVVJMKGhvc3QudXRmOCgpKTsKLSAgICByZXR1
cm4gc3RhcnRzV2l0aExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShkb21haW4sICJ3d3cuIikgPyBk
b21haW4uc3Vic3RyaW5nKDQpIDogZG9tYWluOworICAgIHJldHVybiBzdGFydHNXaXRoTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKGRvbWFpbiwgInd3dy4iKSA/IFN0cmluZ1ZpZXcoZG9tYWluKS5z
dWJzdHJpbmcoNCkuY3JlYXRlTlNTdHJpbmcoKS5hdXRvcmVsZWFzZSgpIDogc3RhdGljX2Nhc3Q8
TlNTdHJpbmcgKj4oZG9tYWluKTsKIH0KIAogTlNTdHJpbmcgKmFwcGxpY2F0aW9uVmlzaWJsZU5h
bWVGcm9tT3JpZ2luKGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgb3JpZ2luKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRl
eCA3YmIxZTkyODdkZDAwY2Q2NzM2MmVhOWRjMWNkNjgxYThiOTJhN2ViLi43NGNlOGQ5N2NhNTcw
YzBhODhjNTJlOGFjNDFiZWQ1YjdmMmIwZTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtMTA4MCw3ICsxMDgwLDggQEAgdm9pZCBQ
bHVnaW5WaWV3OjpwZXJmb3JtSmF2YVNjcmlwdFVSTFJlcXVlc3QoVVJMUmVxdWVzdCogcmVxdWVz
dCkKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgU3RyaW5nIGpz
U3RyaW5nID0gUEFMOjpkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMocmVxdWVzdC0+cmVxdWVzdCgp
LnVybCgpLnN0cmluZygpLnN1YnN0cmluZyhzaXplb2YoImphdmFzY3JpcHQ6IikgLSAxKSk7Cisg
ICAgYXV0byB1cmxTdHJpbmcgPSByZXF1ZXN0LT5yZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCk7Cisg
ICAgU3RyaW5nIGpzU3RyaW5nID0gUEFMOjpkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoU3RyaW5n
Vmlldyh1cmxTdHJpbmcpLnN1YnN0cmluZyhzaXplb2YoImphdmFzY3JpcHQ6IikgLSAxKSk7CiAK
ICAgICBpZiAoIXJlcXVlc3QtPnRhcmdldCgpLmlzTnVsbCgpKSB7CiAgICAgICAgIC8vIEZvciBz
ZWN1cml0eSByZWFzb25zLCBvbmx5IGFsbG93IEpTIHJlcXVlc3RzIHRvIGJlIG1hZGUgb24gdGhl
IGZyYW1lIHRoYXQgY29udGFpbnMgdGhlIHBsdWctaW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9NaXNjL1dlYlVzZXJDb250ZW50VVJMUGF0dGVybi5tbSBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViVXNlckNvbnRlbnRVUkxQYXR0ZXJuLm1tCmluZGV4IGI3
MjY1ODNmOTc0Y2RkZjc2NjE3ZjJhZDE4ZDM5OGY0MDNiOTEzYmUuLmYyZjhjODc0NzgyYzczNDgw
MWM2NzU3ODk1ZmUxMDdjY2Q4MTYxMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL01pc2MvV2ViVXNlckNvbnRlbnRVUkxQYXR0ZXJuLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL01pc2MvV2ViVXNlckNvbnRlbnRVUkxQYXR0ZXJuLm1tCkBAIC00OCw3ICs0OCw3
IEBAIC0gKGlkKWluaXRXaXRoUGF0dGVyblN0cmluZzooTlNTdHJpbmcgKilwYXR0ZXJuU3RyaW5n
CiAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICBfcHJpdmF0ZSA9IFtbV2ViVXNlckNvbnRlbnRV
UkxQYXR0ZXJuUHJpdmF0ZSBhbGxvY10gaW5pdF07Ci0gICAgX3ByaXZhdGUtPnBhdHRlcm4gPSBV
c2VyQ29udGVudFVSTFBhdHRlcm4ocGF0dGVyblN0cmluZyk7CisgICAgX3ByaXZhdGUtPnBhdHRl
cm4gPSBVc2VyQ29udGVudFVSTFBhdHRlcm4oU3RyaW5nKHBhdHRlcm5TdHJpbmcpKTsKIAogICAg
IHJldHVybiBzZWxmOwogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>