<?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>192746</bug_id>
          
          <creation_ts>2018-12-16 13:46:04 -0800</creation_ts>
          <short_desc>Convert additional String::format clients to alternative approaches</short_desc>
          <delta_ts>2019-02-03 11:19:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=188191</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>30342</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>ap</cc>
    
    <cc>bburg</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>jbedard</cc>
    
    <cc>joepeck</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>mitz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tpopela</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1488371</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-12-16 13:46:04 -0800</bug_when>
    <thetext>Convert additional String::format clients to alternative approaches</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1488372</commentid>
    <comment_count>1</comment_count>
      <attachid>357420</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-12-16 14:01:11 -0800</bug_when>
    <thetext>Created attachment 357420
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1488378</commentid>
    <comment_count>2</comment_count>
      <attachid>357422</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-12-16 15:33:17 -0800</bug_when>
    <thetext>Created attachment 357422
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489660</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-12-19 18:45:00 -0800</bug_when>
    <thetext>Anyone interested in reviewing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1490381</commentid>
    <comment_count>4</comment_count>
      <attachid>357422</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2018-12-21 10:11:12 -0800</bug_when>
    <thetext>Comment on attachment 357422
Patch

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

Looks good. Some ranty nitpicks below.

&gt; Source/WTF/wtf/JSONValues.cpp:449
&gt; +inline bool appendDoubleQuotedStringEscapedCharacter(StringBuilder&amp; builder, UChar character)

This function name doesn&apos;t quite parse for me. Maybe appendCharacterEscapingForDoubleQuotedStringIfNeeded?

&gt; Source/WTF/wtf/JSONValues.cpp:489
&gt; +        // FIXME: This is likely incorrect for surrogate pairs.

Seems worth elaborating on what the action for this FIXME is. &quot;Likely&quot; is too weak of a statement, as it&apos;s obviously never correct to serialize a code unit into two \u escape sequences.

But I&apos;m not sure if it&apos;s observable, maybe callers guarantee that strings here don&apos;t contain surrogate pairs? It just feels unlikely that a bug of this magnitude could have survived so long in the era of Emoji if it were a real bug. In this case, I&apos;m not sure what the action would be, maybe to rename the function so that it wouldn&apos;t be misused in the future.

FWIW, I played with JSON.stringify, and couldn&apos;t get two \u sequences out of it. But I didn&apos;t check if it takes this code path.

&gt; Source/WTF/wtf/JSONValues.cpp:494
&gt; +        builder.appendLiteral(&quot;\\u&quot;);
&gt; +        builder.append(upperNibbleToASCIIHexDigit(codeUnit &gt;&gt; 8));
&gt; +        builder.append(lowerNibbleToASCIIHexDigit(codeUnit &gt;&gt; 8));
&gt; +        builder.append(upperNibbleToASCIIHexDigit(codeUnit));
&gt; +        builder.append(lowerNibbleToASCIIHexDigit(codeUnit));

I never looked into StringBuilder performance before, but a brief glance over it doesn&apos;t fill me with confidence that appending characters one by one is performant. This class over-allocates the buffer, but it&apos;s still a non-inlined function call for every character.

Probably no worse than String::format though.

&gt; Source/WebCore/Modules/indexeddb/IDBKeyData.cpp:367
&gt; +        return makeString(&quot;&lt;date&gt; - &quot;, FormattedNumber::fixedWidth(WTF::get&lt;double&gt;(m_value), 6));

Not new in this patch, but it&apos;s sad that we don&apos;t have a consistent story for the WTF namespace. Most of WTF code is designed to be used without an explicit namespace, and symbols are exported into global namespace right away. But that kind of thing wouldn&apos;t work with &quot;get&quot;.

&gt; Source/WebCore/PAL/pal/FileSizeFormatter.cpp:42
&gt; +        return makeString(FormattedNumber::fixedWidth(size / 1000., 1), &quot; KB&quot;); // This should be lowercase k.

This lacks &quot;FIXME&quot;. May be worth elaborating on what exactly the goal here is. Obviously, &quot;kilo&quot; prefix is lower case, but using upper case is quite traditional. Is there action for this FIXME to just make this change locally, or to switch the whole code base consistently?

&gt; Source/WebCore/html/track/VTTCue.cpp:231
&gt; -            String::format(&quot;translate(-%.2f%%, -%.2f%%)&quot;, position.first, position.second));
&gt; +            makeString(&quot;translate(&quot;, FormattedNumber::fixedWidth(-position.first, 2), &quot;%, &quot;, FormattedNumber::fixedWidth(-position.second, 2), &quot;%)&quot;));

I think that negating is problem-free for floating point numbers that we can encounter here, but is it an improvement to do an arithmetic operation here before converting the number to string?

&gt; Source/WebCore/page/cocoa/ResourceUsageOverlayCocoa.mm:434
&gt; -        return String::format(&quot;%.1f kB&quot;, static_cast&lt;double&gt;(number) / 1024);
&gt; +        return makeString(FormattedNumber::fixedWidth(number / 1024, 1), &quot; kB&quot;);

FIXME: Should be &quot;KiB&quot; (and same for others)? Hate hate hate.

&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:106
&gt; +    return makeString(&quot;{{&quot;,

Hmm, why does StringBuilder need a separate appendLiteral function, but makeString gets an unadorned literal? Do we need ASCIILiteral here by any chance?

&gt; Source/WebCore/platform/cocoa/KeyEventCocoa.mm:500
&gt; +            return makeString(&quot;U+&quot;,

Is there any concern about non-BMP characters here?

&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:475
&gt; +    // FIXME: I don&apos;t think that formatting with %s and passing an NSObject from a dictionary will work.

Would you be willing to file a bug for this? I believe that this is new code, and fixing it should probably be tracked with more than a FIXME.

&gt; Tools/WebKitTestRunner/TestController.cpp:2272
&gt; +    if (auto port = WKSecurityOriginGetPort(origin)) {

This is one of the cases where I think that the type matters, and &quot;auto&quot; takes away from the reader. I want to know whether it&apos;s an unsigned short or something else when reading this.

&gt; Tools/WebKitTestRunner/TestController.cpp:2274
&gt; +        // FIXME: Use static_cast&lt;int&gt; to work around makeString&apos;s limitation when formatting numbers that are the same type as UChar.
&gt; +        return makeString(protocol, &quot;://&quot;, host, &apos;:&apos;, static_cast&lt;int&gt;(port));

What is the FIXME action? It says &quot;use&quot;, but the code already does that.

I&apos;m guessing that it&apos;s about removing static_cast once there is a better way, but this seems like a strange place to motivate creating that better way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1490465</commentid>
    <comment_count>5</comment_count>
      <attachid>357422</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-12-21 13:54:27 -0800</bug_when>
    <thetext>Comment on attachment 357422
Patch

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

&gt;&gt; Source/WTF/wtf/JSONValues.cpp:449
&gt;&gt; +inline bool appendDoubleQuotedStringEscapedCharacter(StringBuilder&amp; builder, UChar character)
&gt; 
&gt; This function name doesn&apos;t quite parse for me. Maybe appendCharacterEscapingForDoubleQuotedStringIfNeeded?

I don’t love the name you suggested. Let me think and see if I can come up with a name I love.

&gt;&gt; Source/WTF/wtf/JSONValues.cpp:489
&gt;&gt; +        // FIXME: This is likely incorrect for surrogate pairs.
&gt; 
&gt; Seems worth elaborating on what the action for this FIXME is. &quot;Likely&quot; is too weak of a statement, as it&apos;s obviously never correct to serialize a code unit into two \u escape sequences.
&gt; 
&gt; But I&apos;m not sure if it&apos;s observable, maybe callers guarantee that strings here don&apos;t contain surrogate pairs? It just feels unlikely that a bug of this magnitude could have survived so long in the era of Emoji if it were a real bug. In this case, I&apos;m not sure what the action would be, maybe to rename the function so that it wouldn&apos;t be misused in the future.
&gt; 
&gt; FWIW, I played with JSON.stringify, and couldn&apos;t get two \u sequences out of it. But I didn&apos;t check if it takes this code path.

I believe this code is currently used only for our web development tools, and nothing that is part of the web platform.

&gt;&gt; Source/WTF/wtf/JSONValues.cpp:494
&gt;&gt; +        builder.append(lowerNibbleToASCIIHexDigit(codeUnit));
&gt; 
&gt; I never looked into StringBuilder performance before, but a brief glance over it doesn&apos;t fill me with confidence that appending characters one by one is performant. This class over-allocates the buffer, but it&apos;s still a non-inlined function call for every character.
&gt; 
&gt; Probably no worse than String::format though.

Seems like something we can return to. We could make a more efficient overload of append that can take a list of characters; maybe initializer_list&lt;char&gt;.

&gt;&gt; Source/WebCore/PAL/pal/FileSizeFormatter.cpp:42
&gt;&gt; +        return makeString(FormattedNumber::fixedWidth(size / 1000., 1), &quot; KB&quot;); // This should be lowercase k.
&gt; 
&gt; This lacks &quot;FIXME&quot;. May be worth elaborating on what exactly the goal here is. Obviously, &quot;kilo&quot; prefix is lower case, but using upper case is quite traditional. Is there action for this FIXME to just make this change locally, or to switch the whole code base consistently?

I know that it’s traditional, but I am suggesting we consider changing it, especially in a function designed for reuse. I wouldn’t call it a &quot;FIXME&quot;. I would rather remove the comment entirely than add a FIXME.

I think I’ll remove the comment.

&gt;&gt; Source/WebCore/html/track/VTTCue.cpp:231
&gt;&gt; +            makeString(&quot;translate(&quot;, FormattedNumber::fixedWidth(-position.first, 2), &quot;%, &quot;, FormattedNumber::fixedWidth(-position.second, 2), &quot;%)&quot;));
&gt; 
&gt; I think that negating is problem-free for floating point numbers that we can encounter here, but is it an improvement to do an arithmetic operation here before converting the number to string?

Yes, I believe it is an improvement. For one thing, the old code depends on the number being non-negative. Prepending a &quot;-&quot; sign seems quite non-traditional and if more efficient, only extremely slightly so.

&gt;&gt; Source/WebCore/page/cocoa/ResourceUsageOverlayCocoa.mm:434
&gt;&gt; +        return makeString(FormattedNumber::fixedWidth(number / 1024, 1), &quot; kB&quot;);
&gt; 
&gt; FIXME: Should be &quot;KiB&quot; (and same for others)? Hate hate hate.

Worth taking this up with whoever created this overlay. Simon perhaps?

&gt;&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:106
&gt;&gt; +    return makeString(&quot;{{&quot;,
&gt; 
&gt; Hmm, why does StringBuilder need a separate appendLiteral function, but makeString gets an unadorned literal? Do we need ASCIILiteral here by any chance?

Maybe some day; I don’t think should do it right now. I am not sure what the size/speed tradeoff is for passing the length rather than scanning for a null character.

&gt;&gt; Source/WebCore/platform/cocoa/KeyEventCocoa.mm:500
&gt;&gt; +            return makeString(&quot;U+&quot;,
&gt; 
&gt; Is there any concern about non-BMP characters here?

Might be worth researching that, but I won’t do that right now. At the moment this function takes a 16-bit integer, so it can’t be a non-BMP character, although it could be an unpaired surrogate.

&gt;&gt; Source/WebKit/UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm:475
&gt;&gt; +    // FIXME: I don&apos;t think that formatting with %s and passing an NSObject from a dictionary will work.
&gt; 
&gt; Would you be willing to file a bug for this? I believe that this is new code, and fixing it should probably be tracked with more than a FIXME.

Sure.

&gt;&gt; Tools/WebKitTestRunner/TestController.cpp:2272
&gt;&gt; +    if (auto port = WKSecurityOriginGetPort(origin)) {
&gt; 
&gt; This is one of the cases where I think that the type matters, and &quot;auto&quot; takes away from the reader. I want to know whether it&apos;s an unsigned short or something else when reading this.

I guess I could just make it int, and then get rid of the static_cast&lt;int&gt; below.

&gt;&gt; Tools/WebKitTestRunner/TestController.cpp:2274
&gt;&gt; +        return makeString(protocol, &quot;://&quot;, host, &apos;:&apos;, static_cast&lt;int&gt;(port));
&gt; 
&gt; What is the FIXME action? It says &quot;use&quot;, but the code already does that.
&gt; 
&gt; I&apos;m guessing that it&apos;s about removing static_cast once there is a better way, but this seems like a strange place to motivate creating that better way.

I think the FIXME should probably be separate and say:

// FIXME: Consider changing the type to uint16_t once makeString can handle numbers that are the same type as UChar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501422</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-02-01 20:06:01 -0800</bug_when>
    <thetext>Committed r240892: &lt;https://trac.webkit.org/changeset/240892&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501425</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-02-01 20:06:27 -0800</bug_when>
    <thetext>&lt;rdar://problem/47758658&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501509</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-02-02 11:20:53 -0800</bug_when>
    <thetext>What&apos;s the impetus for these changes? Security? Performance? Code cleanup?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501566</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-02-02 19:04:18 -0800</bug_when>
    <thetext>Primarily security and its intersection with portability; hard to get the format specifiers right in all cases; there is type checking based on the format strings in some but not all of the modern compilers.

Also should give us gain in efficiency in most cases; we have seen in profiles that the formatting code is fairly costly and inefficient. But while makeString is quite efficient, in other cases the non-String::format replacement may not be written for maximum efficiency.

Some small style/maintainability benefit. There are a mix of techniques needed to correctly portably format types such as &quot;uint64_t&quot; that are different from the ones for &quot;unsigned long long&quot; and different in turn from the ones needed for &quot;size_t&quot;. These aren’t all equally easy to read. With makeString, there is no need to learn any of these.

Also, some economy of implementation; we have and won’t be getting rid of our numeric formatting functions, and it would be good to not *also* depend on the ones in the underlying operating system.

Some costs, perhaps, too. Loss of a familiar idiom, primarily. And until we update logging macros to use a different approach, we will still have many of the costs above just for logging.

For a little background there are comments in bug 188191, bug 187955, and bug 192742.

Please do feel free to steer me in another direction if you think this isn’t a smart thing to be doing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501640</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-02-03 11:03:54 -0800</bug_when>
    <thetext>Also found bug 30342, bug 37327, and bug 176035.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1501643</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-02-03 11:19:25 -0800</bug_when>
    <thetext>I tried to gather a bit more information about this in bug 30342, relating the bugs better. The motivation that drove that oldest bug the most seems to be problems with UTF-8 processing in implementations of String::format on non-Apple platforms, which isn’t even one of the reasons I listed above.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357420</attachid>
            <date>2018-12-16 14:01:11 -0800</date>
            <delta_ts>2018-12-16 15:33:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192746-20181216140110.patch</filename>
            <type>text/plain</type>
            <size>43372</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5MjU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MThhYjJlNDFhZTM3ZWNhYjY3MTgxY2ExNTEyNGU0MDMzNzk0NWVlLi4yMThhNjU5MGJjODhkNWM4
ODA2NDhhOThkZWU0ZWIxMjk2ZDU4NThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAxOC0xMi0xNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgQ29udmVydCBhZGRpdGlvbmFsIFN0cmluZzo6Zm9ybWF0IGNsaWVudHMgdG8gYWx0
ZXJuYXRpdmUgYXBwcm9hY2hlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTkyNzQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHA6
CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckNvbnNvbGVBZ2VudDo6c3RvcFRpbWluZyk6
IFVzZSBtYWtlU3RyaW5nCisgICAgICAgIGFuZCBGb3JtYXR0ZWROdW1iZXI6OmZpeGVkV2lkdGgu
CisKIDIwMTgtMTItMTUgIFl1c3VrZSBTdXp1a2kgIDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9y
Zz4KIAogICAgICAgICBVbnJldmlld2VkLCBzdXBwcmVzcyB3YXJuaW5ncyBpbiBMaW51eApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRl
eCBjYTBlODU2Y2QyM2Y5NWFmMWYyY2U4MWQ5MTk3NjQxYWE0MWNiNzQyLi4wZjIwOWQ5YjcwYjY5
NTBjNWJmNGRjNGUzNjg4MjA1YjBiZDAxOGNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE4LTEy
LTE2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBDb252ZXJ0IGFk
ZGl0aW9uYWwgU3RyaW5nOjpmb3JtYXQgY2xpZW50cyB0byBhbHRlcm5hdGl2ZSBhcHByb2FjaGVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTI3NDYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9K
U09OVmFsdWVzLmNwcDoKKyAgICAgICAgKFdURjo6YXBwZW5kRG91YmxlUXVvdGVkU3RyaW5nRXNj
YXBlZENoYXJhY3Rlcik6IFJlbmFtZWQgZnJvbQorICAgICAgICBlc2NhcGVDaGFyIGFuZCByZW9y
ZGVyZWQgYXJndW1lbnRzIHRvIG1ha2Ugc2Vuc2UgYXMgYW4gYXBwZW5kIGZ1bmN0aW9uLgorICAg
ICAgICAoV1RGOjphcHBlbmREb3VibGVRdW90ZWRTdHJpbmcpOiBSZW5hbWVkIGZyb20gZG91Ymxl
UXVvdGVTdHJpbmcsCisgICAgICAgIHJlb3JkZXJlZCBhcmd1bWVudHMgdG8gbWFrZSBzZW5zZSBh
cyBhbiBhcHBlbmQgZnVuY3Rpb24sIHRha2UgYQorICAgICAgICBTdHJpbmdWaWV3IGluc3RlYWQg
b2YgYSBTdHJpbmcsIHVzZWQgZWFybHkgZXhpdCB0byBtYWtlIHRoZSBjb2RlCisgICAgICAgIGEg
Yml0IGVhc2llciB0byByZWFkLiBVc2UgdGhlIEFTQ0lJSGV4RGlnaXQgZnVuY3Rpb25zIHRvIGNv
bnN0cnVjdAorICAgICAgICBhIGhleCBudW1iZXIgYSBuaWJibGUgYXQgYSB0aW1lIHJhdGhlciB0
aGFuIHVzaW5nIFN0cmluZzo6Zm9ybWF0LgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6VmFsdWU6
OndyaXRlSlNPTiBjb25zdCk6IFVwZGF0ZSBmb3IgbmFtZSBjaGFuZ2UuCisgICAgICAgIChXVEY6
OkpTT05JbXBsOjpPYmplY3RCYXNlOjp3cml0ZUpTT04gY29uc3QpOiBEaXR0by4KKwogMjAxOC0x
Mi0xNSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIHdhcm5p
bmctaWdub3JpbmcgbWFjcm9zIG1vcmUgY29uc2lzdGVudGx5IGFuZCBzaW1wbHkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCAwNTk0OWJlMjRiNjc1NTU1NTUwOTkzNWRkZWI1ZjlmMzFmOTYzMzI3Li5iM2NlM2MxMmQw
ZDliMTg5NTkxYWZiMzFhYTY3NTBiZTA4YWVkMmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjIg
QEAKKzIwMTgtMTItMTYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAg
IENvbnZlcnQgYWRkaXRpb25hbCBTdHJpbmc6OmZvcm1hdCBjbGllbnRzIHRvIGFsdGVybmF0aXZl
IGFwcHJvYWNoZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5Mjc0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgcm91bmQgb2YgY29udmVyc2lvbnMgY292ZXJzIGxlc3MtdHJpdmlhbCBjYXNlcyBz
dWNoIGFzIGZsb2F0aW5nCisgICAgICAgIHBvaW50IG51bWVyYWxzIGFuZCBoZXhhZGVjaW1hbC4g
Tm90IHlldCB0YWtpbmcgb24gcG9pbnRlciBzZXJpYWxpemF0aW9uCisgICAgICAgICgiJXAiKSBv
ciBwYWRkaW5nIHdpdGggc3BhY2VzIG9mIHplcm8gZGlnaXRzLCBzbyBjYWxsIHNpdGVzIHVzaW5n
IHRob3NlCisgICAgICAgIGhhdmUgYmVlbiBsZWZ0IHVudG91Y2hlZC4KKworICAgICAgICBJbiBz
b21lIGNhc2VzIHRoZXNlIG5ldyBpZGlvbXMgYXJlIGEgYml0IGNsdW1zeSwgYW5kIHdlIGNvdWxk
IGZvbGxvdyB1cAorICAgICAgICB3aXRoIGFkZGl0aW9uYWwgY29udmVuaWVuY2UgZnVuY3Rpb25z
IHRvIG1ha2UgdGhlbSBtb3JlIGVsZWdhbnQuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJLZXlEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OmxvZ2dpbmdT
dHJpbmcgY29uc3QpOiBVc2UgbW9yZSBBU0NJSUxpdGVyYWwgYW5kCisgICAgICAgIG1vcmUgYXBw
ZW5kTGl0ZXJhbCBmb3IgZWZmaWNpZW5jeS4gVXNlIHVwcGVyTmliYmxlVG9Mb3dlcmNhc2VBU0NJ
SUhleERpZ2l0LAorICAgICAgICBsb3dlck5pYmJsZVRvTG93ZXJjYXNlQVNDSUlIZXhEaWdpdCwg
YW5kIGFsc28gbWFrZVN0cmluZyBhbmQgRm9ybWF0dGVkTnVtYmVyLgorCisgICAgICAgICogY3Nz
L01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXNwZWN0UmF0aW9W
YWx1ZUFzU3RyaW5nKTogVXNlIG1ha2VTdHJpbmcgYW5kIEZvcm1hdHRlZE51bWJlci4KKyAgICAg
ICAgRG9pbmcgaXQgdGhpcyB3YXkgbWFrZXMgaXQgYSBsaXR0bGUgY2xlYXJlciB0aGF0IHdlIGhh
dmUgYW4gdW5wbGVhc2FudAorICAgICAgICB1c2Ugb2YgZml4ZWQgNi1kaWdpdCBwcmVjaXNpb24g
aGVyZS4KKworICAgICAgICAqIGh0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cHJvY2Vzc0ZpbGVzaXplU3RyaW5nKTogVXNlIG1ha2VTdHJpbmcgYW5kIEZv
cm1hdHRlZE51bWJlci4KKyAgICAgICAgKiBodG1sL3RyYWNrL1ZUVEN1ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpWVFRDdWVCb3g6OmFwcGx5Q1NTUHJvcGVydGllcyk6IERpdHRvLgorICAgICAg
ICAqIHBhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OndpbmRvd1JvdW5kZWRDb3JuZXJS
YWRpdXNDU1MgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL0hpc3RvcnkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SGlzdG9yeTo6c3RhdGVPYmplY3RBZGRlZCk6IERpdHRvLgorICAgICAg
ICAqIHBhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OmZvcm1hdEJ5dGVOdW1iZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmdjVGlt
ZXJTdHJpbmcpOiBVc2UgU3RyaW5nOjpudW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZVVzYWdlT3ZlcmxheTo6cGxhdGZvcm1EcmF3KTogVXNlIG1ha2VTdHJpbmcgYW5kIEZvcm1hdHRl
ZE51bWJlci4KKworICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzbmFwT2Zmc2V0c1RvU3RyaW5nKTogUmVtb3ZlZCBz
b21lIHVubmVjZXNzYXJ5IGNvcHlpbmcgaW4gdGhlIGZvciBsb29wLAorICAgICAgICB1c2UgYXBw
ZW5kTGl0ZXJhbCwgYW5kIHVzZSBhcHBlbmRGaXhlZFdpZHRoTnVtYmVyLgorICAgICAgICAoV2Vi
Q29yZTo6c25hcE9mZnNldFJhbmdlc1RvU3RyaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpzbmFwUG9ydE9yQXJlYVRvU3RyaW5nKTogVXNlIG1ha2VTdHJpbmcgYW5kIEZvcm1hdHRlZE51
bWJlci4KKworICAgICAgICAqIHBsYXRmb3JtL2FuaW1hdGlvbi9UaW1pbmdGdW5jdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUaW1pbmdGdW5jdGlvbjo6Y3NzVGV4dCBjb25zdCk6IFVzZSBt
YWtlU3RyaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vY29jb2EvS2V5RXZlbnRDb2NvYS5tbToK
KyAgICAgICAgKFdlYkNvcmU6OmtleUlkZW50aWZpZXJGb3JDaGFyQ29kZSk6IFVzZSBtYWtlU3Ry
aW5nIGFuZCB0aGUgQVNDSUlIZXhEaWdpdAorICAgICAgICBmdW5jdGlvbnMuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Om5h
bWVGb3JSZW5kZXJUcmVlQXNUZXh0IGNvbnN0KTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1v
Y2tSZWFsdGltZVZpZGVvU291cmNlOjpkcmF3VGV4dCk6IFVzZSBtYWtlU3RyaW5nIGFuZCBGb3Jt
YXR0ZWROdW1iZXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lU3RyaW5nQnVpbGRlcjo6dmlzaXRGaWVsZCk6
IFVzZSBTdHJpbmc6Om51bWJlclRvU3RyaW5nRml4ZWRXaWR0aC4KKwogMjAxOC0xMi0xNSAgWXVz
dWtlIFN1enVraSAgPHl1c3VrZXN1enVraUBzbG93c3RhcnQub3JnPgogCiAgICAgICAgIE51bGwg
cG9pbnRlciBkZXJlZmVyZW5jZSBpbiBKU0M6OldyaXRlQmFycmllckJhc2UoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFu
Z2VMb2cKaW5kZXggZDk3NWExNjM4ZTFlODNlNjk0NTVhNTI4ODZlOTY2NDg2MmU3MDgzYS4uNTg0
Yzc5NjkyNmI3OTUwNTQ1ZDQwZTNhNzFmZTZmZGI3YzZiYzJjMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTMgQEAKKzIwMTgtMTItMTYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIENvbnZlcnQgYWRkaXRpb25hbCBTdHJpbmc6OmZvcm1hdCBjbGllbnRz
IHRvIGFsdGVybmF0aXZlIGFwcHJvYWNoZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5Mjc0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogcGFsL0ZpbGVTaXplRm9ybWF0dGVyLmNwcDoKKyAgICAgICAg
KGZpbGVTaXplRGVzY3JpcHRpb24pOiBVc2UgbWFrZVN0cmluZyBhbmQgRm9ybWF0dGVkTnVtYmVy
LgorCiAyMDE4LTEyLTE1ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAg
ICBVc2Ugd2FybmluZy1pZ25vcmluZyBtYWNyb3MgbW9yZSBjb25zaXN0ZW50bHkgYW5kIHNpbXBs
eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwppbmRleCBlNWZlZjY5MmRkMjAwYWE0MTNlY2NiN2FkODI5ODI4NzlkZTE3OGM0Li4w
OGM5YWFlM2QzMzljZTM5ZGEwZjY5ZjdiZjI5ZGY5ZDdkZmY3OWQ2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE4IEBACisyMDE4LTEyLTE2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKwor
ICAgICAgICBDb252ZXJ0IGFkZGl0aW9uYWwgU3RyaW5nOjpmb3JtYXQgY2xpZW50cyB0byBhbHRl
cm5hdGl2ZSBhcHByb2FjaGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTI3NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9WaWV3R2VzdHVyZUNvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlNuYXBzaG90UmVtb3ZhbFRy
YWNrZXI6OnN0YXJ0V2F0Y2hkb2cpOgorICAgICAgICBVc2UgbWFrZVN0cmluZyBhbmQgRm9ybWF0
dGVkTnVtYmVyLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29h
L0xvY2FsQXV0aGVudGljYXRvci5tbToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxBdXRoZW50aWNh
dG9yOjpnZXRBc3NlcnRpb24pOiBBZGRlZCBhIGNvbW1lbnQgYWJvdXQgYW4KKyAgICAgICAgaW5j
b3JyZWN0IGZvcm1hdCBzcGVjaWZpZXIgYW5kIGxlZnQgdGhpcyBjb2RlIGFzIGlzIGZvciBub3cu
CisKIDIwMTgtMTItMTUgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbbWV0YV1bV2ViS2l0XSBSZW1vdmUgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmUgYW5k
IFdlYktpdCBpbiB0aGUgZ2xvYmFsIHNjb3BlIGZvciB1bmlmaWVkIHNvdXJjZSBidWlsZHMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckNvbnNvbGVBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCmluZGV4IDNmYzVlOTkyYTk1MGYyMDE5ZjkxNjQ4
ZDBkMWFlN2QyNzM2ZTQyZmMuLjhhODc0YTc2N2E4YjM3Yjg4M2I3MjRkNjJhMTYyN2VkNmU3YWQ4
NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcApAQCAtMTY0LDcgKzE2NCw3IEBA
IHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpzdG9wVGltaW5nKGNvbnN0IFN0cmluZyYgdGl0
bGUsIFJlZjxTY3JpcHRDYWxsU3RhY2s+CiAgICAgbV90aW1lcy5yZW1vdmUoaXQpOwogCiAgICAg
U2Vjb25kcyBlbGFwc2VkID0gTW9ub3RvbmljVGltZTo6bm93KCkgLSBzdGFydFRpbWU7Ci0gICAg
U3RyaW5nIG1lc3NhZ2UgPSB0aXRsZSArIFN0cmluZzo6Zm9ybWF0KCI6ICUuM2ZtcyIsIGVsYXBz
ZWQubWlsbGlzZWNvbmRzKCkpOworICAgIFN0cmluZyBtZXNzYWdlID0gbWFrZVN0cmluZyh0aXRs
ZSwgIjogIiwgRm9ybWF0dGVkTnVtYmVyOjpmaXhlZFdpZHRoKGVsYXBzZWQubWlsbGlzZWNvbmRz
KCksIDMpLCAibXMiKTsKICAgICBhZGRNZXNzYWdlVG9Db25zb2xlKHN0ZDo6bWFrZV91bmlxdWU8
Q29uc29sZU1lc3NhZ2U+KE1lc3NhZ2VTb3VyY2U6OkNvbnNvbGVBUEksIE1lc3NhZ2VUeXBlOjpU
aW1pbmcsIE1lc3NhZ2VMZXZlbDo6RGVidWcsIG1lc3NhZ2UsIFdURk1vdmUoY2FsbFN0YWNrKSkp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9KU09OVmFsdWVzLmNwcCBiL1NvdXJj
ZS9XVEYvd3RmL0pTT05WYWx1ZXMuY3BwCmluZGV4IDY0YmVlMDVhMDc5MGFiNTYwNTQ5OTdmOWU3
NjVjOWFlYjM4YmVkMWUuLmU0NDYxY2RmMmJjZjk1NGI4ODJhMWQzZDQwNTE5YTVkNWIxZTFiYjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMuY3BwCisrKyBiL1NvdXJjZS9X
VEYvd3RmL0pTT05WYWx1ZXMuY3BwCkBAIC00NDYsMzggKzQ0Niw1NCBAQCBSZWZQdHI8SlNPTjo6
VmFsdWU+IGJ1aWxkVmFsdWUoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBj
b25zdCBVQ2hhcgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWlubGluZSBib29sIGVzY2FwZUNo
YXIoVUNoYXIgYywgU3RyaW5nQnVpbGRlciYgZHN0KQotewotICAgIHN3aXRjaCAoYykgewotICAg
IGNhc2UgJ1xiJzogZHN0LmFwcGVuZExpdGVyYWwoIlxcYiIpOyBicmVhazsKLSAgICBjYXNlICdc
Zic6IGRzdC5hcHBlbmRMaXRlcmFsKCJcXGYiKTsgYnJlYWs7Ci0gICAgY2FzZSAnXG4nOiBkc3Qu
YXBwZW5kTGl0ZXJhbCgiXFxuIik7IGJyZWFrOwotICAgIGNhc2UgJ1xyJzogZHN0LmFwcGVuZExp
dGVyYWwoIlxcciIpOyBicmVhazsKLSAgICBjYXNlICdcdCc6IGRzdC5hcHBlbmRMaXRlcmFsKCJc
XHQiKTsgYnJlYWs7Ci0gICAgY2FzZSAnXFwnOiBkc3QuYXBwZW5kTGl0ZXJhbCgiXFxcXCIpOyBi
cmVhazsKLSAgICBjYXNlICciJzogZHN0LmFwcGVuZExpdGVyYWwoIlxcXCIiKTsgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOworaW5saW5lIGJvb2wgYXBwZW5kRG91
YmxlUXVvdGVkU3RyaW5nRXNjYXBlZENoYXJhY3RlcihTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBV
Q2hhciBjaGFyYWN0ZXIpCit7CisgICAgc3dpdGNoIChjaGFyYWN0ZXIpIHsKKyAgICBjYXNlICdc
Yic6CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXFxiIik7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGNhc2UgJ1xmJzoKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJc
XGYiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSAnXG4nOgorICAgICAgICBidWls
ZGVyLmFwcGVuZExpdGVyYWwoIlxcbiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNl
ICdccic6CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXFxyIik7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGNhc2UgJ1x0JzoKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJcXHQiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSAnXFwnOgorICAgICAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIlxcXFwiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
Y2FzZSAnIic6CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXFxcIiIpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1pbmxpbmUgdm9pZCBkb3VibGVRdW90ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0ciwg
U3RyaW5nQnVpbGRlciYgZHN0KQoraW5saW5lIHZvaWQgYXBwZW5kRG91YmxlUXVvdGVkU3RyaW5n
KFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIFN0cmluZ1ZpZXcgc3RyaW5nKQogewotICAgIGRzdC5h
cHBlbmQoJyInKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RyLmxlbmd0aCgpOyAr
K2kpIHsKLSAgICAgICAgVUNoYXIgYyA9IHN0cltpXTsKLSAgICAgICAgaWYgKCFlc2NhcGVDaGFy
KGMsIGRzdCkpIHsKLSAgICAgICAgICAgIGlmIChjIDwgMzIgfHwgYyA+IDEyNiB8fCBjID09ICc8
JyB8fCBjID09ICc+JykgewotICAgICAgICAgICAgICAgIC8vIDEuIEVzY2FwaW5nIDwsID4gdG8g
cHJldmVudCBzY3JpcHQgZXhlY3V0aW9uLgotICAgICAgICAgICAgICAgIC8vIDIuIFRlY2huaWNh
bGx5LCB3ZSBjb3VsZCBhbHNvIHBhc3MgdGhyb3VnaCBjID4gMTI2IGFzIFVURjgsIGJ1dCB0aGlz
Ci0gICAgICAgICAgICAgICAgLy8gICAgaXMgYWxzbyBvcHRpb25hbC4gSXQgd291bGQgYWxzbyBi
ZSBhIHBhaW4gdG8gaW1wbGVtZW50IGhlcmUuCi0gICAgICAgICAgICAgICAgZHN0LmFwcGVuZChT
dHJpbmc6OmZvcm1hdCgiXFx1JTA0WCIsIGMpKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgIGRzdC5hcHBlbmQoYyk7CisgICAgYnVpbGRlci5hcHBlbmQoJyInKTsKKyAgICBm
b3IgKFVDaGFyIGNvZGVVbml0IDogc3RyaW5nLmNvZGVVbml0cygpKSB7CisgICAgICAgIGlmIChh
cHBlbmREb3VibGVRdW90ZWRTdHJpbmdFc2NhcGVkQ2hhcmFjdGVyKGJ1aWxkZXIsIGNvZGVVbml0
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoY29kZVVuaXQgPj0gMzIgJiYg
Y29kZVVuaXQgPCAxMjcgJiYgY29kZVVuaXQgIT0gJzwnICYmIGNvZGVVbml0ICE9ICc+Jykgewor
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoY29kZVVuaXQpOworICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIH0KKyAgICAgICAgLy8gMS4gV2UgZXNjYXBlIDwgYW5kID4gdG8gcHJldmVu
dCBzY3JpcHQgZXhlY3V0aW9uLgorICAgICAgICAvLyAyLiBXZSBjb3VsZCBlbmNvZGUgY2hhcmFj
dGVycyA+PSAxMjcgYXMgVVRGLTggaW5zdGVhZCBvZiBcdSBlc2NhcGUgc2VxdWVuY2VzLgorICAg
ICAgICAvLyBGSVhNRTogVGhpcyBpcyBsaWtlbHkgaW5jb3JyZWN0IGZvciBzdXJyb2dhdGUgcGFp
cnMuCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXFx1Iik7CisgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKHVwcGVyTmliYmxlVG9BU0NJSUhleERpZ2l0KGNvZGVVbml0ID4+IDgpKTsKKyAg
ICAgICAgYnVpbGRlci5hcHBlbmQobG93ZXJOaWJibGVUb0FTQ0lJSGV4RGlnaXQoY29kZVVuaXQg
Pj4gOCkpOworICAgICAgICBidWlsZGVyLmFwcGVuZCh1cHBlck5pYmJsZVRvQVNDSUlIZXhEaWdp
dChjb2RlVW5pdCkpOworICAgICAgICBidWlsZGVyLmFwcGVuZChsb3dlck5pYmJsZVRvQVNDSUlI
ZXhEaWdpdChjb2RlVW5pdCkpOwogICAgIH0KLSAgICBkc3QuYXBwZW5kKCciJyk7CisgICAgYnVp
bGRlci5hcHBlbmQoJyInKTsKIH0KIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCkBAIC02NTks
NyArNjc1LDcgQEAgdm9pZCBWYWx1ZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkg
Y29uc3QKICAgICAgICAgICAgIG91dHB1dC5hcHBlbmRMaXRlcmFsKCJmYWxzZSIpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIFR5cGU6OlN0cmluZzoKLSAgICAgICAgZG91YmxlUXVvdGVTdHJp
bmcobV92YWx1ZS5zdHJpbmcsIG91dHB1dCk7CisgICAgICAgIGFwcGVuZERvdWJsZVF1b3RlZFN0
cmluZyhvdXRwdXQsIG1fdmFsdWUuc3RyaW5nKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBU
eXBlOjpEb3VibGU6CiAgICAgY2FzZSBUeXBlOjpJbnRlZ2VyOiB7CkBAIC03ODYsNyArODAyLDcg
QEAgdm9pZCBPYmplY3RCYXNlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBjb25z
dAogICAgICAgICBBU1NFUlQoZmluZFJlc3VsdCAhPSBtX21hcC5lbmQoKSk7CiAgICAgICAgIGlm
IChpKQogICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnLCcpOwotICAgICAgICBkb3VibGVRdW90
ZVN0cmluZyhmaW5kUmVzdWx0LT5rZXksIG91dHB1dCk7CisgICAgICAgIGFwcGVuZERvdWJsZVF1
b3RlZFN0cmluZyhvdXRwdXQsIGZpbmRSZXN1bHQtPmtleSk7CiAgICAgICAgIG91dHB1dC5hcHBl
bmQoJzonKTsKICAgICAgICAgZmluZFJlc3VsdC0+dmFsdWUtPndyaXRlSlNPTihvdXRwdXQpOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktl
eURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5j
cHAKaW5kZXggNDBmZDNiMWQ4NDIwZThlYWNhZmQxZDQzOTZiOTBkNmViNDBkMGEyYy4uN2JkMmFj
NTIwMmJkYjFkMjk1ZTYxNmI3MDM0N2IwZmU2MGI3ZDU1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKIAog
I2luY2x1ZGUgIktleWVkQ29kaW5nLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTMxNSwxMyArMzE2LDEzIEBAIGludCBJREJLZXlEYXRh
Ojpjb21wYXJlKGNvbnN0IElEQktleURhdGEmIG90aGVyKSBjb25zdAogU3RyaW5nIElEQktleURh
dGE6OmxvZ2dpbmdTdHJpbmcoKSBjb25zdAogewogICAgIGlmIChtX2lzTnVsbCkKLSAgICAgICAg
cmV0dXJuICI8bnVsbD4iOworICAgICAgICByZXR1cm4gIjxudWxsPiJfczsKIAogICAgIFN0cmlu
ZyByZXN1bHQ7CiAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgSW5kZXhlZERCOjpL
ZXlUeXBlOjpJbnZhbGlkOgotICAgICAgICByZXR1cm4gIjxpbnZhbGlkPiI7CisgICAgICAgIHJl
dHVybiAiPGludmFsaWQ+Il9zOwogICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpBcnJheTog
ewogICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiPGFycmF5PiAtIHsgIik7CkBAIC0zMzcsMjEgKzMzOCwyNCBAQCBTdHJpbmcgSURC
S2V5RGF0YTo6bG9nZ2luZ1N0cmluZygpIGNvbnN0CiAgICAgfQogICAgIGNhc2UgSW5kZXhlZERC
OjpLZXlUeXBlOjpCaW5hcnk6IHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAg
ICAgICBidWlsZGVyLmFwcGVuZCgiPGJpbmFyeT4gLSAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBl
bmRMaXRlcmFsKCI8YmluYXJ5PiAtICIpOwogCiAgICAgICAgIGF1dG8qIGRhdGEgPSBXVEY6Omdl
dDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSkuZGF0YSgpOwogICAgICAgICBpZiAoIWRh
dGEpIHsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIobnVsbCkiKTsKKyAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKG51bGwpIik7CiAgICAgICAgICAgICByZXN1bHQgPSBi
dWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAg
ICAgIHNpemVfdCBpID0gMDsKLSAgICAgICAgZm9yICg7IGkgPCA4ICYmIGkgPCBkYXRhLT5zaXpl
KCk7ICsraSkKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCIlMDJ4
IiwgZGF0YS0+YXQoaSkpKTsKKyAgICAgICAgZm9yICg7IGkgPCA4ICYmIGkgPCBkYXRhLT5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgdWludDhfdCBieXRlID0gZGF0YS0+YXQoaSk7CisgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZCh1cHBlck5pYmJsZVRvTG93ZXJjYXNlQVNDSUlIZXhEaWdp
dChieXRlKSk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChsb3dlck5pYmJsZVRvTG93ZXJj
YXNlQVNDSUlIZXhEaWdpdChieXRlKSk7CisgICAgICAgIH0KIAogICAgICAgICBpZiAoZGF0YS0+
c2l6ZSgpID4gOCkKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIuLi4iKTsKKyAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLi4uIik7CiAKICAgICAgICAgcmVzdWx0ID0gYnVp
bGRlci50b1N0cmluZygpOwogICAgICAgICBicmVhazsKQEAgLTM2MCwxMyArMzY0LDEzIEBAIFN0
cmluZyBJREJLZXlEYXRhOjpsb2dnaW5nU3RyaW5nKCkgY29uc3QKICAgICAgICAgcmVzdWx0ID0g
IjxzdHJpbmc+IC0gIiArIFdURjo6Z2V0PFN0cmluZz4obV92YWx1ZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpEYXRlOgotICAgICAgICByZXR1cm4gU3Ry
aW5nOjpmb3JtYXQoIjxkYXRlPiAtICVmIiwgV1RGOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKSk7Cisg
ICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCI8ZGF0ZT4gLSAiLCBGb3JtYXR0ZWROdW1iZXI6OmZp
eGVkV2lkdGgoV1RGOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKSwgNikpOwogICAgIGNhc2UgSW5kZXhl
ZERCOjpLZXlUeXBlOjpOdW1iZXI6Ci0gICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiPG51
bWJlcj4gLSAlZiIsIFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSkpOworICAgICAgICByZXR1cm4g
bWFrZVN0cmluZygiPG51bWJlcj4gLSAiLCBGb3JtYXR0ZWROdW1iZXI6OmZpeGVkV2lkdGgoV1RG
OjpnZXQ8ZG91YmxlPihtX3ZhbHVlKSwgNikpOwogICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBl
OjpNYXg6Ci0gICAgICAgIHJldHVybiAiPG1heGltdW0+IjsKKyAgICAgICAgcmV0dXJuICI8bWF4
aW11bT4iX3M7CiAgICAgY2FzZSBJbmRleGVkREI6OktleVR5cGU6Ok1pbjoKLSAgICAgICAgcmV0
dXJuICI8bWluaW11bT4iOworICAgICAgICByZXR1cm4gIjxtaW5pbXVtPiJfczsKICAgICB9CiAK
ICAgICBpZiAocmVzdWx0Lmxlbmd0aCgpID4gMTUwKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL0ZpbGVTaXplRm9ybWF0dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvRmlsZVNpemVGb3JtYXR0ZXIuY3BwCmluZGV4IDRkZDFkNWYxZGU1MmU5ZjYxZmZjMzA5NGM5
ZWVkNWI1N2M2ZWQ0NTEuLjVlMDc3ZTAyMTlkNWQ2ZmVjMzE5Nzk4MDIyOTY4ZmUyNmRjYmIwM2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvRmlsZVNpemVGb3JtYXR0ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvRmlsZVNpemVGb3JtYXR0ZXIuY3BwCkBAIC0y
Niw2ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRmlsZVNpemVGb3Jt
YXR0ZXIuaCIKIAorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5o
PgorCiAjaWYgIVBMQVRGT1JNKENPQ09BKQogCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29u
Y2F0ZW5hdGVOdW1iZXJzLmg+CkBAIC0zNywxMCArMzksMTAgQEAgU3RyaW5nIGZpbGVTaXplRGVz
Y3JpcHRpb24odWludDY0X3Qgc2l6ZSkKICAgICBpZiAoc2l6ZSA8IDEwMDApCiAgICAgICAgIHJl
dHVybiBtYWtlU3RyaW5nKHNpemUsICIgYnl0ZXMiKTsKICAgICBpZiAoc2l6ZSA8IDEwMDAwMDAp
Ci0gICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJS4xZiBLQiIsIHNpemUgLyAxMDAwLik7
CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKEZvcm1hdHRlZE51bWJlcjo6Zml4ZWRXaWR0aChz
aXplIC8gMTAwMC4sIDEpLCAiIEtCIik7IC8vIFRoaXMgc2hvdWxkIGJlIGxvd2VyY2FzZSBrLgog
ICAgIGlmIChzaXplIDwgMTAwMDAwMDAwMCkKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0
KCIlLjFmIE1CIiwgc2l6ZSAvIDEwMDAwMDAuKTsKLSAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQo
IiUuMWYgR0IiLCBzaXplIC8gMTAwMDAwMDAwMC4pOworICAgICAgICByZXR1cm4gbWFrZVN0cmlu
ZyhGb3JtYXR0ZWROdW1iZXI6OmZpeGVkV2lkdGgoc2l6ZSAvIDEwMDAwMDAuLCAxKSwgIiBNQiIp
OworICAgIHJldHVybiBtYWtlU3RyaW5nKEZvcm1hdHRlZE51bWJlcjo6Zml4ZWRXaWR0aChzaXpl
IC8gMTAwMDAwMDAwMC4sIDEpLCAiIEdCIik7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCmluZGV4IGU5NTlhZTYwY2ZhNjc0NGE3OGFiODBh
M2MzYjYzNmIwMGU5Zjg4ODQuLjU0Zjc5NDMxYzAwZTMxNzQ4ODE3NWQ5YjI5ZGY4NWYxN2Q3ZGYw
ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAKQEAgLTUw
LDYgKzUwLDcgQEAKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVGhlbWUu
aCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0Nv
bmNhdGVuYXRlTnVtYmVycy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAog
I2lmIEVOQUJMRSgzRF9UUkFOU0ZPUk1TKQpAQCAtMjM3LDE0ICsyMzgsMTYgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gYm9vbCBjb21wYXJlVmFsdWUoVCBhLCBVIGIsIE1lZGlh
RmVhdHVyZVByZWZpeAogfQogCiAjaWYgIUxPR19ESVNBQkxFRAorCiBzdGF0aWMgU3RyaW5nIGFz
cGVjdFJhdGlvVmFsdWVBc1N0cmluZyhDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKCFpczxD
U1NBc3BlY3RSYXRpb1ZhbHVlPih2YWx1ZSkpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygp
OwogCiAgICAgYXV0byYgYXNwZWN0UmF0aW8gPSBkb3duY2FzdDxDU1NBc3BlY3RSYXRpb1ZhbHVl
PigqdmFsdWUpOwotICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJWYvJWYiLCBhc3BlY3RSYXRp
by5udW1lcmF0b3JWYWx1ZSgpLCBhc3BlY3RSYXRpby5kZW5vbWluYXRvclZhbHVlKCkpOworICAg
IHJldHVybiBtYWtlU3RyaW5nKEZvcm1hdHRlZE51bWJlcjo6Zml4ZWRXaWR0aChhc3BlY3RSYXRp
by5udW1lcmF0b3JWYWx1ZSgpLCA2KSwgJy8nLCBGb3JtYXR0ZWROdW1iZXI6OmZpeGVkV2lkdGgo
YXNwZWN0UmF0aW8uZGVub21pbmF0b3JWYWx1ZSgpLCA2KSk7CiB9CisKICNlbmRpZgogCiBzdGF0
aWMgYm9vbCBjb21wYXJlQXNwZWN0UmF0aW9WYWx1ZShDU1NWYWx1ZSogdmFsdWUsIGludCB3aWR0
aCwgaW50IGhlaWdodCwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcAppbmRleCBkN2UyYjc1YTQ1MzEyMGIwMmQ3Yzc0
MmQ0NjBmNDZhNGRkNTk5NDhlLi43ZmZjYmUzOWQ1ZmY3ZWU3ZDlmNmI3Nzg3N2Y5Yjg5YjFiMjZm
ZmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ZUUERpcmVjdG9yeURvY3VtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ZUUERpcmVjdG9yeURvY3VtZW50LmNwcApA
QCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPHd0Zi9HcmVnb3JpYW5EYXRlVGltZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgogI2lu
Y2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTE2NywxMiArMTY4LDEyIEBAIHN0YXRpYyBTdHJpbmcgcHJvY2Vzc0ZpbGVzaXplU3Ry
aW5nKGNvbnN0IFN0cmluZyYgc2l6ZSwgYm9vbCBpc0RpcmVjdG9yeSkKICAgICAgICAgcmV0dXJu
IHVua25vd25GaWxlU2l6ZVRleHQoKTsKIAogICAgIGlmIChieXRlcyA8IDEwMDAwMDApCi0gICAg
ICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJS4yZiBLQiIsIHN0YXRpY19jYXN0PGZsb2F0Pihi
eXRlcykvMTAwMCk7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKEZvcm1hdHRlZE51bWJlcjo6
Zml4ZWRXaWR0aChieXRlcyAvIDEwMDAuLCAyKSwgIiBLQiIpOwogCiAgICAgaWYgKGJ5dGVzIDwg
MTAwMDAwMDAwMCkKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlLjJmIE1CIiwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGJ5dGVzKS8xMDAwMDAwKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJp
bmcoRm9ybWF0dGVkTnVtYmVyOjpmaXhlZFdpZHRoKGJ5dGVzIC8gMTAwMDAwMC4sIDIpLCAiIE1C
Iik7CiAKLSAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiUuMmYgR0IiLCBzdGF0aWNfY2FzdDxm
bG9hdD4oYnl0ZXMpLzEwMDAwMDAwMDApOworICAgIHJldHVybiBtYWtlU3RyaW5nKEZvcm1hdHRl
ZE51bWJlcjo6Zml4ZWRXaWR0aChieXRlcyAvIDEwMDAwMDAwMDAuLCAyKSwgIiBHQiIpOwogfQog
CiBzdGF0aWMgYm9vbCB3YXNMYXN0RGF5T2ZNb250aChpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQg
ZGF5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRDdWUuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRDdWUuY3BwCmluZGV4IDRmZjEzYTAxYWU5YzY1
NDI3NWYyZGIxOWMwYmVlMGRhZWJiYzlmOTYuLjJmMGU1ZTMwODFkYWM3NWM1NjFmZTdhOWNjNjVi
YWRlN2ZjNDVkMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUQ3Vl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1ZS5jcHAKQEAgLTMwLDkg
KzMwLDkgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVlRUQ3VlLmgi
CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0jaW5jbHVkZSAiVlRUQ3VlLmgiCiAKICNpbmNs
dWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgpA
QCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMjI3LDcgKzIyOCw3IEBAIHZvaWQgVlRUQ3VlQm94Ojph
cHBseUNTU1Byb3BlcnRpZXMoY29uc3QgSW50U2l6ZSYgdmlkZW9TaXplKQogICAgICAgICAvLyBt
YWludGFpbmluZyB0aGUgcmVsYXRpdmUgcG9zaXRpb25zIG9mIHRoZSBib3hlcyBpbiBib3hlcyB0
byBlYWNoCiAgICAgICAgIC8vIG90aGVyLgogICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5VHJhbnNmb3JtLAotICAgICAgICAgICAgU3RyaW5nOjpmb3JtYXQoInRyYW5z
bGF0ZSgtJS4yZiUlLCAtJS4yZiUlKSIsIHBvc2l0aW9uLmZpcnN0LCBwb3NpdGlvbi5zZWNvbmQp
KTsKKyAgICAgICAgICAgIG1ha2VTdHJpbmcoInRyYW5zbGF0ZSgiLCBGb3JtYXR0ZWROdW1iZXI6
OmZpeGVkV2lkdGgoLXBvc2l0aW9uLmZpcnN0LCAyKSwgIiUsICIsIEZvcm1hdHRlZE51bWJlcjo6
Zml4ZWRXaWR0aCgtcG9zaXRpb24uc2Vjb25kLCAyKSwgIiUpIikpOwogCiAgICAgICAgIHNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaGl0ZVNwYWNlLCBDU1NWYWx1ZVByZSk7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVu
Y2VzTWVkaWFBRi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5j
ZXNNZWRpYUFGLmNwcAppbmRleCBiNzkyM2Y3ODMyMjI2ZWQ1M2YwYzkxZjhkZWRhODVkYjlkNjMx
NjJjLi5lYmQ4ZTllNzM0Y2E1OGZkYTE2NzM0NTBmODQyZWE1NmEwMmFmNzAwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNw
cApAQCAtMzIsMTYgKzMyLDEyIEBACiAjaW5jbHVkZSAiQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01l
ZGlhQUYuaCIKIAogI2luY2x1ZGUgIkF1ZGlvVHJhY2tMaXN0LmgiCi0jaWYgUExBVEZPUk0oV0lO
KQotI2luY2x1ZGUgPHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg+Ci0jZW5kaWYKICNpbmNs
dWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAj
aW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNs
dWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgogI2luY2x1ZGUgIlRleHRUcmFja0xpc3QuaCIK
LSNpbmNsdWRlIDx3dGYvVVJMLmg+CiAjaW5jbHVkZSAiVXNlclN0eWxlU2hlZXRUeXBlcy5oIgog
I2luY2x1ZGUgIlZUVEN1ZS5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KQEAgLTQ5LDE5ICs0NSwy
NiBAQAogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvU29mdExpbmtpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVVJM
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJl
cnMuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW1wb3J0ICJXZWJDb3JlVGhyZWFk
UnVuLmgiCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDxwYWwvc3BpL3dp
bi9Db3JlVGV4dFNQSVdpbi5oPgorI2VuZGlmCisKICNpZiBDT01QSUxFUihNU1ZDKQogLy8gU2Vl
IGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvMzViaGtmYjYuYXNweAog
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQyNzMpCiAjZW5kaWYKIAogI2lmIEhBVkUoTUVESUFf
QUNDRVNTSUJJTElUWV9GUkFNRVdPUkspCisKICNpbmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5o
PgogI2luY2x1ZGUgPE1lZGlhQWNjZXNzaWJpbGl0eS9NZWRpYUFjY2Vzc2liaWxpdHkuaD4KIApA
QCAtODMsMTggKzg2LDE5IEBACiBTT0ZUX0xJTktfQVZGX0ZSQU1FV09SSyhDb3JlTWVkaWEpCiBT
T0ZUX0xJTktfQVZGX0ZSQU1FV09SS19JTVBPUlRfT1BUSU9OQUwoQ29yZU1lZGlhLCBNVEVuYWJs
ZUNhcHRpb24yMDE1QmVoYXZpb3IsIEJvb2xlYW4sICgpKQogCi0jZWxzZQorI2Vsc2UgLy8gUExB
VEZPUk0oV0lOKQogCiBTT0ZUX0xJTktfRlJBTUVXT1JLX09QVElPTkFMKE1lZGlhVG9vbGJveCkK
IFNPRlRfTElOS19PUFRJT05BTChNZWRpYVRvb2xib3gsIE1URW5hYmxlQ2FwdGlvbjIwMTVCZWhh
dmlvciwgQm9vbGVhbiwgKCksICgpKQogCi0jZW5kaWYgLy8gUExBVEZPUk0oV0lOKQorI2VuZGlm
IC8vICFQTEFURk9STShXSU4pCiAKICNlbmRpZiAvLyBIQVZFKE1FRElBX0FDQ0VTU0lCSUxJVFlf
RlJBTUVXT1JLKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBIQVZFKE1FRElBX0FDQ0VT
U0lCSUxJVFlfRlJBTUVXT1JLKQorCiBzdGF0aWMgdm9pZCB1c2VyQ2FwdGlvblByZWZlcmVuY2Vz
Q2hhbmdlZE5vdGlmaWNhdGlvbkNhbGxiYWNrKENGTm90aWZpY2F0aW9uQ2VudGVyUmVmLCB2b2lk
KiBvYnNlcnZlciwgQ0ZTdHJpbmdSZWYsIGNvbnN0IHZvaWQgKiwgQ0ZEaWN0aW9uYXJ5UmVmKQog
ewogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtMTA1LDYgKzEwOSw3IEBAIHN0YXRpYyB2
b2lkIHVzZXJDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkTm90aWZpY2F0aW9uQ2FsbGJhY2soQ0ZO
b3RpZmljYXRpb25DZW50CiAgICAgfSk7CiAjZW5kaWYKIH0KKwogI2VuZGlmCiAKIENhcHRpb25V
c2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRihQYWdl
R3JvdXAmIGdyb3VwKQpAQCAtMzQ2LDcgKzM1MSw3IEBAIFN0cmluZyBDYXB0aW9uVXNlclByZWZl
cmVuY2VzTWVkaWFBRjo6d2luZG93Um91bmRlZENvcm5lclJhZGl1c0NTUygpIGNvbnN0CiAgICAg
ICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwot
ICAgIGFwcGVuZENTUyhidWlsZGVyLCBDU1NQcm9wZXJ0eUJvcmRlclJhZGl1cywgU3RyaW5nOjpm
b3JtYXQoIiUuMDJmcHgiLCByYWRpdXMpLCBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5j
ZUJlaGF2aW9yVXNlVmFsdWUpOworICAgIGFwcGVuZENTUyhidWlsZGVyLCBDU1NQcm9wZXJ0eUJv
cmRlclJhZGl1cywgbWFrZVN0cmluZyhGb3JtYXR0ZWROdW1iZXI6OmZpeGVkV2lkdGgocmFkaXVz
LCAyKSwgInB4IiksIGJlaGF2aW9yID09IGtNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3JVc2VW
YWx1ZSk7CiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlz
dG9yeS5jcHAKaW5kZXggZmQxOTIxZDIzNzRlOTMxYjg1YTkxNzI1ZDAzYjYyYzM0NTU0ZDVlNS4u
ZDI5Y2I0NTliYWZlZTM5MWVjOWQ5OTcxMWQ0N2I4MzJjNWY4YmYzOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hp
c3RvcnkuY3BwCkBAIC0yMjIsOCArMjIyLDggQEAgRXhjZXB0aW9uT3I8dm9pZD4gSGlzdG9yeTo6
c3RhdGVPYmplY3RBZGRlZChSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYmIGRhdGEKICAg
ICAKICAgICBpZiAobWFpbkhpc3RvcnkubV9jdXJyZW50U3RhdGVPYmplY3RUaW1lU3Bhbk9iamVj
dHNBZGRlZCA+PSBwZXJTdGF0ZU9iamVjdFRpbWVTcGFuTGltaXQpIHsKICAgICAgICAgaWYgKHN0
YXRlT2JqZWN0VHlwZSA9PSBTdGF0ZU9iamVjdFR5cGU6OlJlcGxhY2UpCi0gICAgICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgU2VjdXJpdHlFcnJvciwgU3RyaW5nOjpmb3JtYXQoIkF0dGVtcHQg
dG8gdXNlIGhpc3RvcnkucmVwbGFjZVN0YXRlKCkgbW9yZSB0aGFuICV1IHRpbWVzIHBlciAlZiBz
ZWNvbmRzIiwgcGVyU3RhdGVPYmplY3RUaW1lU3BhbkxpbWl0LCBzdGF0ZU9iamVjdFRpbWVTcGFu
LnNlY29uZHMoKSkgfTsKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNlY3VyaXR5RXJyb3Is
IFN0cmluZzo6Zm9ybWF0KCJBdHRlbXB0IHRvIHVzZSBoaXN0b3J5LnB1c2hTdGF0ZSgpIG1vcmUg
dGhhbiAldSB0aW1lcyBwZXIgJWYgc2Vjb25kcyIsIHBlclN0YXRlT2JqZWN0VGltZVNwYW5MaW1p
dCwgc3RhdGVPYmplY3RUaW1lU3Bhbi5zZWNvbmRzKCkpIH07CisgICAgICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgU2VjdXJpdHlFcnJvciwgbWFrZVN0cmluZygiQXR0ZW1wdCB0byB1c2UgaGlz
dG9yeS5yZXBsYWNlU3RhdGUoKSBtb3JlIHRoYW4gIiwgcGVyU3RhdGVPYmplY3RUaW1lU3Bhbkxp
bWl0LCAiIHRpbWVzIHBlciAiLCBGb3JtYXR0ZWROdW1iZXI6OmZpeGVkV2lkdGgoc3RhdGVPYmpl
Y3RUaW1lU3Bhbi5zZWNvbmRzKCksIDYpLCAiIHNlY29uZHMiKSB9OworICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgU2VjdXJpdHlFcnJvciwgbWFrZVN0cmluZygiQXR0ZW1wdCB0byB1c2UgaGlz
dG9yeS5wdXNoU3RhdGUoKSBtb3JlIHRoYW4gIiwgcGVyU3RhdGVPYmplY3RUaW1lU3BhbkxpbWl0
LCAiIHRpbWVzIHBlciAiLCBGb3JtYXR0ZWROdW1iZXI6OmZpeGVkV2lkdGgoc3RhdGVPYmplY3RU
aW1lU3Bhbi5zZWNvbmRzKCksIDYpLCAiIHNlY29uZHMiKSB9OwogICAgIH0KIAogICAgIENoZWNr
ZWQ8dW5zaWduZWQ+IHRpdGxlU2l6ZSA9IHRpdGxlLmxlbmd0aCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3ZlcmxheUNvY29hLm1tIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3ZlcmxheUNvY29hLm1tCmluZGV4
IDBjYjVjMzUzMjdiMWQyOTdkMDQ4OTQyYTE5ZmFhNTAwZTZmNzQwMTMuLjZiYjFmYmI3NjgwZmZj
M2E0NjhkNzk5MmEwNjQ2ODdiNGYxYmYxMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvY29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0KQEAgLTQxLDYgKzQxLDcg
QEAKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9NZW1vcnlGb290
cHJpbnQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KIAogdXNpbmcgV2ViQ29yZTo6UmVzb3Vy
Y2VVc2FnZU92ZXJsYXk7CiBAaW50ZXJmYWNlIFdlYk92ZXJsYXlMYXllciA6IENBTGF5ZXIgewpA
QCAtNDI2LDExICs0MjcsMTEgQEAgc3RhdGljIHZvaWQgZHJhd01lbW9yeVBpZShDR0NvbnRleHRS
ZWYgY29udGV4dCwgRmxvYXRSZWN0JiByZWN0LCBIaXN0b3JpY1Jlc291cmMKIHN0YXRpYyBTdHJp
bmcgZm9ybWF0Qnl0ZU51bWJlcihzaXplX3QgbnVtYmVyKQogewogICAgIGlmIChudW1iZXIgPj0g
MTAyNCAqIDEwNDg1NzYpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJS4zZiBHQiIs
IHN0YXRpY19jYXN0PGRvdWJsZT4obnVtYmVyKSAvICgxMDI0ICogMTA0ODU3NikpOworICAgICAg
ICByZXR1cm4gbWFrZVN0cmluZyhGb3JtYXR0ZWROdW1iZXI6OmZpeGVkV2lkdGgobnVtYmVyIC8g
KDEwMjQuICogMTA0ODU3NiksIDMpLCAiIEdCIik7CiAgICAgaWYgKG51bWJlciA+PSAxMDQ4NTc2
KQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiUuMmYgTUIiLCBzdGF0aWNfY2FzdDxk
b3VibGU+KG51bWJlcikgLyAxMDQ4NTc2KTsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoRm9y
bWF0dGVkTnVtYmVyOjpmaXhlZFdpZHRoKG51bWJlciAvIDEwNDg1NzYuLCAyKSwgIiBNQiIpOwog
ICAgIGlmIChudW1iZXIgPj0gMTAyNCkKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIl
LjFmIGtCIiwgc3RhdGljX2Nhc3Q8ZG91YmxlPihudW1iZXIpIC8gMTAyNCk7CisgICAgICAgIHJl
dHVybiBtYWtlU3RyaW5nKEZvcm1hdHRlZE51bWJlcjo6Zml4ZWRXaWR0aChudW1iZXIgLyAxMDI0
LCAxKSwgIiBrQiIpOwogICAgIHJldHVybiBTdHJpbmc6Om51bWJlcihudW1iZXIpOwogfQogCkBA
IC00MzgsNyArNDM5LDcgQEAgc3RhdGljIFN0cmluZyBnY1RpbWVyU3RyaW5nKE1vbm90b25pY1Rp
bWUgdGltZXJGaXJlRGF0ZSwgTW9ub3RvbmljVGltZSBub3cpCiB7CiAgICAgaWYgKHN0ZDo6aXNu
YW4odGltZXJGaXJlRGF0ZSkpCiAgICAgICAgIHJldHVybiAiW25vdCBzY2hlZHVsZWRdIl9zOwot
ICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJWciLCAodGltZXJGaXJlRGF0ZSAtIG5vdykuc2Vj
b25kcygpKTsKKyAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIoKHRpbWVyRmlyZURhdGUgLSBub3cp
LnNlY29uZHMoKSk7CiB9CiAKIHZvaWQgUmVzb3VyY2VVc2FnZU92ZXJsYXk6OnBsYXRmb3JtRHJh
dyhDR0NvbnRleHRSZWYgY29udGV4dCkKQEAgLTQ1Nyw3ICs0NTgsNyBAQCB2b2lkIFJlc291cmNl
VXNhZ2VPdmVybGF5OjpwbGF0Zm9ybURyYXcoQ0dDb250ZXh0UmVmIGNvbnRleHQpCiAgICAgQ0dD
b250ZXh0Q2xlYXJSZWN0KGNvbnRleHQsIHZpZXdCb3VuZHMpOwogCiAgICAgc3RhdGljIENHQ29s
b3JSZWYgY29sb3JGb3JMYWJlbHMgPSBjcmVhdGVDb2xvcigwLjksIDAuOSwgMC45LCAxKTsKLSAg
ICBzaG93VGV4dChjb250ZXh0LCAxMCwgMjAsIGNvbG9yRm9yTGFiZWxzLCBTdHJpbmc6OmZvcm1h
dCgiICAgICAgICBDUFU6ICVnIiwgZGF0YS5jcHUubGFzdCgpKSk7CisgICAgc2hvd1RleHQoY29u
dGV4dCwgMTAsIDIwLCBjb2xvckZvckxhYmVscywgbWFrZVN0cmluZygiICAgICAgICBDUFU6ICIs
IEZvcm1hdHRlZE51bWJlcjo6Zml4ZWRQcmVjaXNpb24oZGF0YS5jcHUubGFzdCgpKSkpOwogICAg
IHNob3dUZXh0KGNvbnRleHQsIDEwLCAzMCwgY29sb3JGb3JMYWJlbHMsICIgIEZvb3RwcmludDog
IiArIGZvcm1hdEJ5dGVOdW1iZXIobWVtb3J5Rm9vdHByaW50KCkpKTsKICAgICBzaG93VGV4dChj
b250ZXh0LCAxMCwgNDAsIGNvbG9yRm9yTGFiZWxzLCAiICAgRXh0ZXJuYWw6ICIgKyBmb3JtYXRC
eXRlTnVtYmVyKGRhdGEudG90YWxFeHRlcm5hbFNpemUubGFzdCgpKSk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuY3Bw
CmluZGV4IDAyMDc1Mzg0N2EwZDg0MTcxOTMwZTJlNmYzZTVlNGQ5ZDQ4YzdhZjMuLjYwMzc5YjU4
MmRkNzM3MTRlNzZmZjg2ZTNkYTFmZmZkODBiOTc0NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcApAQCAtMzUs
NiArMzUsNyBAQAogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTY3JvbGxhYmxl
QXJlYS5oIgogI2luY2x1ZGUgIlN0eWxlU2Nyb2xsU25hcFBvaW50cy5oIgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgogCiAjaWYgRU5BQkxFKENTU19TQ1JP
TExfU05BUCkKIApAQCAtNzUsMjggKzc2LDM4IEBAIHN0YXRpYyBMYXlvdXRVbml0IGNvbXB1dGVT
Y3JvbGxTbmFwQWxpZ25PZmZzZXQoY29uc3QgTGF5b3V0VW5pdCYgbGVmdE9yVG9wLCBjb25zCiAK
IHN0YXRpYyBTdHJpbmcgc25hcE9mZnNldHNUb1N0cmluZyhjb25zdCBWZWN0b3I8TGF5b3V0VW5p
dD4mIHNuYXBPZmZzZXRzKQogewotICAgIFN0cmluZ0J1aWxkZXIgczsKLSAgICBzLmFwcGVuZCgi
WyAiKTsKLSAgICBmb3IgKGF1dG8gb2Zmc2V0IDogc25hcE9mZnNldHMpCi0gICAgICAgIHMuYXBw
ZW5kKFN0cmluZzo6Zm9ybWF0KCIlLjFmICIsIG9mZnNldC50b0Zsb2F0KCkpKTsKLQotICAgIHMu
YXBwZW5kKCJdIik7Ci0gICAgcmV0dXJuIHMudG9TdHJpbmcoKTsKKyAgICBTdHJpbmdCdWlsZGVy
IGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJbICIpOworICAgIGZvciAoYXV0
byYgb2Zmc2V0IDogc25hcE9mZnNldHMpIHsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRGaXhlZFdp
ZHRoTnVtYmVyKG9mZnNldC50b0Zsb2F0KCksIDEpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgn
ICcpOworICAgIH0KKyAgICBidWlsZGVyLmFwcGVuZCgnXScpOworICAgIHJldHVybiBidWlsZGVy
LnRvU3RyaW5nKCk7CiB9CiAKIHN0YXRpYyBTdHJpbmcgc25hcE9mZnNldFJhbmdlc1RvU3RyaW5n
KGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4mIHJhbmdlcykKIHsK
LSAgICBTdHJpbmdCdWlsZGVyIHM7Ci0gICAgcy5hcHBlbmQoIlsgIik7Ci0gICAgZm9yIChhdXRv
IHJhbmdlIDogcmFuZ2VzKQotICAgICAgICBzLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiKCUuMWYs
ICUuMWYpICIsIHJhbmdlLnN0YXJ0LnRvRmxvYXQoKSwgcmFuZ2UuZW5kLnRvRmxvYXQoKSkpOwot
ICAgIHMuYXBwZW5kKCJdIik7Ci0gICAgcmV0dXJuIHMudG9TdHJpbmcoKTsKKyAgICBTdHJpbmdC
dWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJbICIpOworICAgIGZv
ciAoYXV0byYgcmFuZ2UgOiByYW5nZXMpIHsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoJygnKTsK
KyAgICAgICAgYnVpbGRlci5hcHBlbmRGaXhlZFdpZHRoTnVtYmVyKHJhbmdlLnN0YXJ0LnRvRmxv
YXQoKSwgMSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKKyAgICAgICAg
YnVpbGRlci5hcHBlbmRGaXhlZFdpZHRoTnVtYmVyKHJhbmdlLmVuZC50b0Zsb2F0KCksIDEpOwor
ICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIikgIik7CisgICAgfQorICAgIGJ1aWxkZXIu
YXBwZW5kKCddJyk7CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAogc3RhdGlj
IFN0cmluZyBzbmFwUG9ydE9yQXJlYVRvU3RyaW5nKGNvbnN0IExheW91dFJlY3QmIHJlY3QpCiB7
Ci0gICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJ7eyUuMWYsICUuMWZ9IHslLjFmLCAlLjFmfX0i
LCByZWN0LngoKS50b0Zsb2F0KCksIHJlY3QueSgpLnRvRmxvYXQoKSwgcmVjdC53aWR0aCgpLnRv
RmxvYXQoKSwgcmVjdC5oZWlnaHQoKS50b0Zsb2F0KCkpOworICAgIHJldHVybiBtYWtlU3RyaW5n
KCJ7eyIsCisgICAgICAgIEZvcm1hdHRlZE51bWJlcjo6Zml4ZWRXaWR0aChyZWN0LngoKSwgMSks
ICIsICIsCisgICAgICAgIEZvcm1hdHRlZE51bWJlcjo6Zml4ZWRXaWR0aChyZWN0LnkoKSwgMSks
ICJ9IHsiLAorICAgICAgICBGb3JtYXR0ZWROdW1iZXI6OmZpeGVkV2lkdGgocmVjdC53aWR0aCgp
LCAxKSwgIiwgIiwKKyAgICAgICAgRm9ybWF0dGVkTnVtYmVyOjpmaXhlZFdpZHRoKHJlY3QuaGVp
Z2h0KCksIDEpLCAifX0iKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hbmltYXRpb24vVGltaW5nRnVuY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYW5pbWF0aW9uL1RpbWluZ0Z1bmN0aW9uLmNwcAppbmRleCA5NDA3MzQyMDY1ZmU5
ZmM1MjhkNTQ1NzQ0NDYzNzZhMWQ0ZDdkN2RjLi40ODc5MmM5YjRjN2VjMjVmM2VmYzg2ZWI1OWFh
ZDE1ZTZjYTA0MjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRp
b24vVGltaW5nRnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1h
dGlvbi9UaW1pbmdGdW5jdGlvbi5jcHAKQEAgLTE3Niw3ICsxNzYsNyBAQCBTdHJpbmcgVGltaW5n
RnVuY3Rpb246OmNzc1RleHQoKSBjb25zdAogICAgICAgICAgICAgcmV0dXJuICJlYXNlLW91dCI7
CiAgICAgICAgIGlmIChmdW5jdGlvbi54MSgpID09IDAuNDIgJiYgIWZ1bmN0aW9uLnkxKCkgJiYg
ZnVuY3Rpb24ueDIoKSA9PSAwLjU4ICYmIGZ1bmN0aW9uLnkyKCkgPT0gMS4wKQogICAgICAgICAg
ICAgcmV0dXJuICJlYXNlLWluLW91dCI7Ci0gICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgi
Y3ViaWMtYmV6aWVyKCVnLCAlZywgJWcsICVnKSIsIGZ1bmN0aW9uLngxKCksIGZ1bmN0aW9uLnkx
KCksIGZ1bmN0aW9uLngyKCksIGZ1bmN0aW9uLnkyKCkpOworICAgICAgICByZXR1cm4gbWFrZVN0
cmluZygiY3ViaWMtYmV6aWVyKCIsIGZ1bmN0aW9uLngxKCksICIsICIsIGZ1bmN0aW9uLnkxKCks
ICIsICIsIGZ1bmN0aW9uLngyKCksICIsICIsIGZ1bmN0aW9uLnkyKCksICcpJyk7CiAgICAgfQog
CiAgICAgaWYgKG1fdHlwZSA9PSBUaW1pbmdGdW5jdGlvbjo6U3RlcHNGdW5jdGlvbikgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvS2V5RXZlbnRDb2NvYS5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0tleUV2ZW50Q29jb2EubW0KaW5kZXggMDVj
MGE4Y2U3MDgyMjdjM2Y1NGIwOGM4NzYxODY1MzgyMzIyYzY3ZC4uZDEwMTJmZTA2YmU0Y2M1ZTNj
MjJmZjVlZTNjNzE5NDNiMWNjODAyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvS2V5RXZlbnRDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9LZXlFdmVudENvY29hLm1tCkBAIC00OTYsNyArNDk2LDEyIEBAIFN0cmluZyBrZXlJZGVu
dGlmaWVyRm9yQ2hhckNvZGUodW5pY2hhciBjaGFyQ29kZSkKICAgICAgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgdXNlIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSB2ZW5kb3ItYXJlYSBVbmlj
b2RlIHZhbHVlcyBmb3IgdGhlIGFib3ZlIGtleXMuCiAgICAgICAgICAgICAvLyBGb3Igbm93LCBq
dXN0IGZhbGwgdGhyb3VnaCB0byB0aGUgZGVmYXVsdC4KICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiVSslMDRYIiwgdG9BU0NJSVVwcGVyKGNoYXJD
b2RlKSk7CisgICAgICAgICAgICBVQ2hhciBjb2RlVW5pdCA9IHRvQVNDSUlVcHBlcihjaGFyQ29k
ZSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiVSsiLAorICAgICAgICAgICAgICAg
IHVwcGVyTmliYmxlVG9BU0NJSUhleERpZ2l0KGNvZGVVbml0ID4+IDgpLAorICAgICAgICAgICAg
ICAgIGxvd2VyTmliYmxlVG9BU0NJSUhleERpZ2l0KGNvZGVVbml0ID4+IDgpLAorICAgICAgICAg
ICAgICAgIHVwcGVyTmliYmxlVG9BU0NJSUhleERpZ2l0KGNvZGVVbml0KSwKKyAgICAgICAgICAg
ICAgICBsb3dlck5pYmJsZVRvQVNDSUlIZXhEaWdpdChjb2RlVW5pdCkpOwogICAgIH0KIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCmluZGV4IDhkYmQzNmM1
NGQ2NWY1MTUwMTcwYTc4YTU1ZDExNTRlZTViZWFlYjcuLjhiMTBhNzI2OWRhY2U1MmE1ZGY4NmMy
ZWQ0Y2UyYjQ5NWVlZGVmODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5jcHAKQEAgLTM5MSw5ICszOTEsMTcgQEAgU3RyaW5nIENvbG9yOjpjc3NUZXh0KCkgY29u
c3QKIFN0cmluZyBDb2xvcjo6bmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSBjb25zdAogewogICAg
IC8vIEZJWE1FOiBIYW5kbGUgRXh0ZW5kZWRDb2xvcnMuCi0gICAgaWYgKGFscGhhKCkgPCAweEZG
KQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiMlMDJYJTAyWCUwMlglMDJYIiwgcmVk
KCksIGdyZWVuKCksIGJsdWUoKSwgYWxwaGEoKSk7Ci0gICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0
KCIjJTAyWCUwMlglMDJYIiwgcmVkKCksIGdyZWVuKCksIGJsdWUoKSk7CisgICAgaWYgKGFscGhh
KCkgPCAweEZGKSB7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywKKyAgICAgICAgICAg
IHVwcGVyTmliYmxlVG9BU0NJSUhleERpZ2l0KHJlZCgpKSwgbG93ZXJOaWJibGVUb0FTQ0lJSGV4
RGlnaXQocmVkKCkpLAorICAgICAgICAgICAgdXBwZXJOaWJibGVUb0FTQ0lJSGV4RGlnaXQoZ3Jl
ZW4oKSksIGxvd2VyTmliYmxlVG9BU0NJSUhleERpZ2l0KGdyZWVuKCkpLAorICAgICAgICAgICAg
dXBwZXJOaWJibGVUb0FTQ0lJSGV4RGlnaXQoYmx1ZSgpKSwgbG93ZXJOaWJibGVUb0FTQ0lJSGV4
RGlnaXQoYmx1ZSgpKSwKKyAgICAgICAgICAgIHVwcGVyTmliYmxlVG9BU0NJSUhleERpZ2l0KGFs
cGhhKCkpLCBsb3dlck5pYmJsZVRvQVNDSUlIZXhEaWdpdChhbHBoYSgpKSk7CisgICAgfQorICAg
IHJldHVybiBtYWtlU3RyaW5nKCcjJywKKyAgICAgICAgdXBwZXJOaWJibGVUb0FTQ0lJSGV4RGln
aXQocmVkKCkpLCBsb3dlck5pYmJsZVRvQVNDSUlIZXhEaWdpdChyZWQoKSksCisgICAgICAgIHVw
cGVyTmliYmxlVG9BU0NJSUhleERpZ2l0KGdyZWVuKCkpLCBsb3dlck5pYmJsZVRvQVNDSUlIZXhE
aWdpdChncmVlbigpKSwKKyAgICAgICAgdXBwZXJOaWJibGVUb0FTQ0lJSGV4RGlnaXQoYmx1ZSgp
KSwgbG93ZXJOaWJibGVUb0FTQ0lJSGV4RGlnaXQoYmx1ZSgpKSk7CiB9CiAKIENvbG9yIENvbG9y
OjpsaWdodCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2Nr
L01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21v
Y2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCmluZGV4IDRlNzMzNmUyYzgxMjFmYzU0Zjll
MjBkNjI3MjM1MjRiNTNhYmMwZDIuLjBiM2QwOGUzYzgxMDczOWVlMDIxMTA0ZDRlNTQwYjJhYmJh
NWQzMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0
aW1lVmlkZW9Tb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9j
a1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCkBAIC0zNTgsMTEgKzM1OCwxMSBAQCB2b2lkIE1vY2tS
ZWFsdGltZVZpZGVvU291cmNlOjpkcmF3VGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAg
ICAgY29udGV4dC5kcmF3VGV4dCh0aW1lRm9udCwgVGV4dFJ1bigoU3RyaW5nVmlldyhzdHJpbmcp
KSksIHRpbWVMb2NhdGlvbik7CiAKICAgICBGbG9hdFBvaW50IHN0YXRzTG9jYXRpb24oY2FwdHVy
ZVNpemUud2lkdGgoKSAqIC40NSwgY2FwdHVyZVNpemUuaGVpZ2h0KCkgKiAuNzUpOwotICAgIHN0
cmluZyA9IFN0cmluZzo6Zm9ybWF0KCJSZXF1ZXN0ZWQgZnJhbWUgcmF0ZTogJS4xZiBmcHMiLCBm
cmFtZVJhdGUoKSk7CisgICAgc3RyaW5nID0gbWFrZVN0cmluZygiUmVxdWVzdGVkIGZyYW1lIHJh
dGU6ICIsIEZvcm1hdHRlZE51bWJlcjo6Zml4ZWRXaWR0aChmcmFtZVJhdGUoKSwgMSksICIgZnBz
Iik7CiAgICAgY29udGV4dC5kcmF3VGV4dChzdGF0c0ZvbnQsIFRleHRSdW4oKFN0cmluZ1ZpZXco
c3RyaW5nKSkpLCBzdGF0c0xvY2F0aW9uKTsKIAogICAgIHN0YXRzTG9jYXRpb24ubW92ZSgwLCBt
X3N0YXRzRm9udFNpemUpOwotICAgIHN0cmluZyA9IFN0cmluZzo6Zm9ybWF0KCJPYnNlcnZlZCBm
cmFtZSByYXRlOiAlLjFmIGZwcyIsIG9ic2VydmVkRnJhbWVSYXRlKCkpOworICAgIHN0cmluZyA9
IG1ha2VTdHJpbmcoIk9ic2VydmVkIGZyYW1lIHJhdGU6ICIsIEZvcm1hdHRlZE51bWJlcjo6Zml4
ZWRXaWR0aChvYnNlcnZlZEZyYW1lUmF0ZSgpLCAxKSwgIiBmcHMiKTsKICAgICBjb250ZXh0LmRy
YXdUZXh0KHN0YXRzRm9udCwgVGV4dFJ1bigoU3RyaW5nVmlldyhzdHJpbmcpKSksIHN0YXRzTG9j
YXRpb24pOwogCiAgICAgYXV0byBzaXplID0gdGhpcy0+c2l6ZSgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2FsZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxlLmNwcAppbmRleCBjOWRhMmQ2YWZhZjVj
NmI5NGI2YThkNTI1ZGMyOGE1MGYzYzFiYjhlLi40ZDc1ZWEwYmUyOWFmNGVkMDBmN2JmNjE4YzVh
MmE5N2I3YTBhYTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Bs
YXRmb3JtTG9jYWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRm
b3JtTG9jYWxlLmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIHZvaWQgRGF0ZVRpbWVTdHJpbmdCdWls
ZGVyOjp2aXNpdEZpZWxkKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGUgZmllbGRUeXBlLCBpbnQK
ICAgICAgICAgICAgIGFwcGVuZE51bWJlcihtX2RhdGUuc2Vjb25kKCksIG51bWJlck9mUGF0dGVy
bkNoYXJhY3RlcnMpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGRvdWJsZSBzZWNvbmQg
PSBtX2RhdGUuc2Vjb25kKCkgKyBtX2RhdGUubWlsbGlzZWNvbmQoKSAvIDEwMDAuMDsKLSAgICAg
ICAgICAgIFN0cmluZyB6ZXJvUGFkZGVkU2Vjb25kU3RyaW5nID0gemVyb1BhZFN0cmluZyhTdHJp
bmc6OmZvcm1hdCgiJS4wM2YiLCBzZWNvbmQpLCBudW1iZXJPZlBhdHRlcm5DaGFyYWN0ZXJzICsg
NCk7CisgICAgICAgICAgICBTdHJpbmcgemVyb1BhZGRlZFNlY29uZFN0cmluZyA9IHplcm9QYWRT
dHJpbmcoU3RyaW5nOjpudW1iZXJUb1N0cmluZ0ZpeGVkV2lkdGgoc2Vjb25kLCAzKSwgbnVtYmVy
T2ZQYXR0ZXJuQ2hhcmFjdGVycyArIDQpOwogICAgICAgICAgICAgbV9idWlsZGVyLmFwcGVuZCht
X2xvY2FsaXplci5jb252ZXJ0VG9Mb2NhbGl6ZWROdW1iZXIoemVyb1BhZGRlZFNlY29uZFN0cmlu
ZykpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9WaWV3R2VzdHVyZUNvbnRyb2xsZXIuY3BwCmluZGV4IGQ0ZmFh
OTNlM2Q5MTNjYWVmYzQwY2ExN2ZlOGFiNGI5MzNiZTY2YjUuLmQ4OWY2ZDhkY2ZkMTdiZDhlNGI3
MTk0NDQ5N2IxOTQzMjM5MGE2MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvVmlld0dlc3R1cmVDb250cm9sbGVyLmNwcApAQCAtMzYsNiArMzYsNyBAQAog
I2ltcG9ydCA8d3RmL01hdGhFeHRyYXMuaD4KICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2ltcG9ydCA8d3RmL3RleHQv
U3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0zNjYsNyArMzY3LDcgQEAgdm9pZCBWaWV3R2VzdHVyZUNv
bnRyb2xsZXI6OlNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6OndhdGNoZG9nVGltZXJGaXJlZCgpCiAK
IHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpTbmFwc2hvdFJlbW92YWxUcmFja2VyOjpzdGFy
dFdhdGNoZG9nKFNlY29uZHMgZHVyYXRpb24pCiB7Ci0gICAgbG9nKFN0cmluZzo6Zm9ybWF0KCIo
cmUpc3RhcnRlZCB3YXRjaGRvZyB0aW1lciBmb3IgJS4xZiBzZWNvbmRzIiwgZHVyYXRpb24uc2Vj
b25kcygpKSk7CisgICAgbG9nKG1ha2VTdHJpbmcoIihyZSlzdGFydGVkIHdhdGNoZG9nIHRpbWVy
IGZvciAiLCBGb3JtYXR0ZWROdW1iZXI6OmZpeGVkV2lkdGgoZHVyYXRpb24uc2Vjb25kcygpLCAx
KSwgIiBzZWNvbmRzIikpOwogICAgIG1fd2F0Y2hkb2dUaW1lci5zdGFydE9uZVNob3QoZHVyYXRp
b24pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50
aWNhdGlvbi9Db2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW0KaW5kZXgg
ODVkODFmYzU4ZDRmYzhiNDdkNDRmNTg2OTM3ODE5YjFjOTIyM2Y2Zi4uOGRkZTc4NjAxYzk4NTI4
ODRmN2ZlNDIzZDUzNWRjMmFmNDU5YmFmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9yLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29hL0xvY2FsQXV0
aGVudGljYXRvci5tbQpAQCAtNDcyLDYgKzQ3Miw3IEBAIHZvaWQgTG9jYWxBdXRoZW50aWNhdG9y
OjpnZXRBc3NlcnRpb24oKQogCiAgICAgICAgIHdlYWtUaGlzLT5jb250aW51ZUdldEFzc2VydGlv
bkFmdGVyVXNlckNvbnNlbnRlZChjb25zZW50LCBjb250ZXh0LCBjcmVkZW50aWFsSWQsIHVzZXJo
YW5kbGUpOwogICAgIH07CisgICAgLy8gRklYTUU6IEkgZG9uJ3QgdGhpbmsgdGhhdCBmb3JtYXR0
aW5nIHdpdGggJXMgYW5kIHBhc3NpbmcgYW4gTlNPYmplY3QgZnJvbSBhIGRpY3Rpb25hcnkgd2ls
bCB3b3JrLgogICAgIG1fY29ubmVjdGlvbi0+Z2V0VXNlckNvbnNlbnQoCiAgICAgICAgIFN0cmlu
Zzo6Zm9ybWF0KCJMb2cgaW50byAlcyB3aXRoICVzLiIsIHJlcXVlc3REYXRhKCkucmVxdWVzdE9w
dGlvbnMucnBJZC51dGY4KCkuZGF0YSgpLCBzZWxlY3RlZENyZWRlbnRpYWxBdHRyaWJ1dGVzWyhp
ZClrU2VjQXR0ckFwcGxpY2F0aW9uVGFnXSksCiAgICAgICAgIChfX2JyaWRnZSBTZWNBY2Nlc3ND
b250cm9sUmVmKXNlbGVjdGVkQ3JlZGVudGlhbEF0dHJpYnV0ZXNbKGlkKWtTZWNBdHRyQWNjZXNz
Q29udHJvbF0sCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cK
aW5kZXggZTViOTMzOWE3NjkxZWMzZTRjYmYyZjk1N2VjMTlmZjVhMGNiY2VjMS4uNzkzNzNhNDli
MzVmZDEzMzJhY2JiMDYxY2E2NzM5OGE0ZGM5OWI5MCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDE4LTEyLTE2ICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBDb252ZXJ0IGFkZGl0aW9u
YWwgU3RyaW5nOjpmb3JtYXQgY2xpZW50cyB0byBhbHRlcm5hdGl2ZSBhcHByb2FjaGVzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTI3NDYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpvcmlnaW5Vc2VyVmlzaWJs
ZU5hbWUpOiBVc2UgbWFrZVN0cmluZyBhbmQgcmVkdWNlIHRoZSB1c2Ugb2Ygc3RkOjpzdHJpbmcK
KyAgICAgICAgYXMgYW4gaW50ZXJtZWRpYXRlIGluIGNvZGUgdGhhdCB1bHRpbWF0ZWx5IGNvbnN0
cnVjdHMgYSBXVEY6OlN0cmluZy4KKyAgICAgICAgKFdUUjo6dXNlck1lZGlhT3JpZ2luSGFzaCk6
IFVzZSBtYWtlU3RyaW5nLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6ZGlkTmF2aWdh
dGVXaXRoTmF2aWdhdGlvbkRhdGEpOiBNb3JlIG9mIHRoZSBzYW1lLgorICAgICAgICAoV1RSOjpU
ZXN0Q29udHJvbGxlcjo6ZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KTogRGl0dG8uCisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjpkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QpOiBEaXR0by4K
KyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZFVwZGF0ZUhpc3RvcnlUaXRsZSk6IERp
dHRvLgorCiAyMDE4LTEyLTE2ICBBZHJpYW4gUGVyZXogZGUgQ2FzdHJvICA8YXBlcmV6QGlnYWxp
YS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXggYWZ0ZXIgcjIzOTI1MwpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAppbmRleCBhOTdhYzllZWVkNTU2
OGJlZmM0MmQyY2IyMTkzMjc5ZWEzMDJhYmVjLi40Nzk3NTFlZDQxMDYxZjIwZTE2YjQxMDI1ZWEw
M2VhYzM3MzYzMjI5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNw
cApAQCAtMjI2MywxNyArMjI2MywxOCBAQCBzdGF0aWMgU3RyaW5nIG9yaWdpblVzZXJWaXNpYmxl
TmFtZShXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbikKICAgICBpZiAoIW9yaWdpbikKICAgICAg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAgICBzdGQ6OnN0cmluZyBob3N0ID0gdG9TVEQo
YWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weUhvc3Qob3JpZ2luKSkpLmNfc3RyKCk7Ci0gICAg
c3RkOjpzdHJpbmcgcHJvdG9jb2wgPSB0b1NURChhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5
UHJvdG9jb2wob3JpZ2luKSkpLmNfc3RyKCk7CisgICAgYXV0byBob3N0ID0gdG9XVEZTdHJpbmco
YWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weUhvc3Qob3JpZ2luKSkpOworICAgIGF1dG8gcHJv
dG9jb2wgPSB0b1dURlN0cmluZyhhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5UHJvdG9jb2wo
b3JpZ2luKSkpOwogCi0gICAgaWYgKCFob3N0Lmxlbmd0aCgpIHx8ICFwcm90b2NvbC5sZW5ndGgo
KSkKKyAgICBpZiAoaG9zdC5pc0VtcHR5KCkgfHwgcHJvdG9jb2wuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAotICAgIHVuc2lnbmVkIHNob3J0IHBvcnQgPSBXS1Nl
Y3VyaXR5T3JpZ2luR2V0UG9ydChvcmlnaW4pOwotICAgIGlmIChwb3J0KQotICAgICAgICByZXR1
cm4gU3RyaW5nOjpmb3JtYXQoIiVzOi8vJXM6JWQiLCBwcm90b2NvbC5jX3N0cigpLCBob3N0LmNf
c3RyKCksIHBvcnQpOworICAgIGlmIChhdXRvIHBvcnQgPSBXS1NlY3VyaXR5T3JpZ2luR2V0UG9y
dChvcmlnaW4pKSB7CisgICAgICAgIC8vIEZJWE1FOiBVc2Ugc3RhdGljX2Nhc3Q8aW50PiB0byB3
b3JrIGFyb3VuZCBtYWtlU3RyaW5nJ3MgbGltaXRhdGlvbiB3aGVuIGZvcm1hdHRpbmcgbnVtYmVy
cyB0aGF0IGFyZSB0aGUgc2FtZSB0eXBlIGFzIFVDaGFyLgorICAgICAgICByZXR1cm4gbWFrZVN0
cmluZyhwcm90b2NvbCwgIjovLyIsIGhvc3QsICc6Jywgc3RhdGljX2Nhc3Q8aW50Pihwb3J0KSk7
CisgICAgfQogCi0gICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlczovLyVzIiwgcHJvdG9jb2wu
Y19zdHIoKSwgaG9zdC5jX3N0cigpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhwcm90b2NvbCwg
IjovLyIsIGhvc3QpOwogfQogCiBzdGF0aWMgU3RyaW5nIHVzZXJNZWRpYU9yaWdpbkhhc2goV0tT
ZWN1cml0eU9yaWdpblJlZiB1c2VyTWVkaWFEb2N1bWVudE9yaWdpbiwgV0tTZWN1cml0eU9yaWdp
blJlZiB0b3BMZXZlbERvY3VtZW50T3JpZ2luKQpAQCAtMjI4NCw3ICsyMjg1LDcgQEAgc3RhdGlj
IFN0cmluZyB1c2VyTWVkaWFPcmlnaW5IYXNoKFdLU2VjdXJpdHlPcmlnaW5SZWYgdXNlck1lZGlh
RG9jdW1lbnRPcmlnaW4sIFcKICAgICBpZiAodG9wTGV2ZWxEb2N1bWVudE9yaWdpblN0cmluZy5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB1c2VyTWVkaWFEb2N1bWVudE9yaWdpblN0cmluZzsK
IAotICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJXMtJXMiLCB1c2VyTWVkaWFEb2N1bWVudE9y
aWdpblN0cmluZy51dGY4KCkuZGF0YSgpLCB0b3BMZXZlbERvY3VtZW50T3JpZ2luU3RyaW5nLnV0
ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKHVzZXJNZWRpYURvY3VtZW50T3Jp
Z2luU3RyaW5nLCAnLScsIHRvcExldmVsRG9jdW1lbnRPcmlnaW5TdHJpbmcpOwogfQogCiBzdGF0
aWMgU3RyaW5nIHVzZXJNZWRpYU9yaWdpbkhhc2goV0tTdHJpbmdSZWYgdXNlck1lZGlhRG9jdW1l
bnRPcmlnaW5TdHJpbmcsIFdLU3RyaW5nUmVmIHRvcExldmVsRG9jdW1lbnRPcmlnaW5TdHJpbmcp
CkBAIC0yNTUyLDE3ICsyNTUzLDE3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZE5hdmlnYXRl
V2l0aE5hdmlnYXRpb25EYXRhKFdLTmF2aWdhdGlvbkRhdGFSZWYgbmF2aWdhdGlvCiAgICAgICAg
IHJldHVybjsKIAogICAgIC8vIFVSTAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmxXSyA9
IGFkb3B0V0soV0tOYXZpZ2F0aW9uRGF0YUNvcHlVUkwobmF2aWdhdGlvbkRhdGEpKTsKLSAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXJsU3RyaW5nV0sgPSBhZG9wdFdLKFdLVVJMQ29weVN0
cmluZyh1cmxXSy5nZXQoKSkpOworICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS05hdmlnYXRpb25E
YXRhQ29weVVSTChuYXZpZ2F0aW9uRGF0YSkpOworICAgIGF1dG8gdXJsU3RyaW5nID0gdG9XVEZT
dHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsLmdldCgpKSkpOwogICAgIC8vIFRpdGxl
Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRpdGxlV0sgPSBhZG9wdFdLKFdLTmF2aWdh
dGlvbkRhdGFDb3B5VGl0bGUobmF2aWdhdGlvbkRhdGEpKTsKKyAgICBhdXRvIHRpdGxlID0gdG9X
VEZTdHJpbmcoYWRvcHRXSyhXS05hdmlnYXRpb25EYXRhQ29weVRpdGxlKG5hdmlnYXRpb25EYXRh
KSkpOwogICAgIC8vIEhUVFAgbWV0aG9kCi0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZXF1ZXN0UmVm
PiByZXF1ZXN0V0sgPSBhZG9wdFdLKFdLTmF2aWdhdGlvbkRhdGFDb3B5T3JpZ2luYWxSZXF1ZXN0
KG5hdmlnYXRpb25EYXRhKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1ldGhvZFdL
ID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5SFRUUE1ldGhvZChyZXF1ZXN0V0suZ2V0KCkpKTsK
KyAgICBhdXRvIHJlcXVlc3QgPSBhZG9wdFdLKFdLTmF2aWdhdGlvbkRhdGFDb3B5T3JpZ2luYWxS
ZXF1ZXN0KG5hdmlnYXRpb25EYXRhKSk7CisgICAgYXV0byBtZXRob2QgPSB0b1dURlN0cmluZyhh
ZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlIVFRQTWV0aG9kKHJlcXVlc3QuZ2V0KCkpKSk7CiAKICAg
ICAvLyBGSVhNRTogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIG5hdmlnYXRpb24gd2FzIHN1Y2Nlc3Nm
dWwgLyBhIGNsaWVudCByZWRpcmVjdCByYXRoZXIgdGhhbiBoYXJkLWNvZGluZyB0aGUgbWVzc2Fn
ZSBoZXJlLgotICAgIG1fY3VycmVudEludm9jYXRpb24tPm91dHB1dFRleHQoU3RyaW5nOjpmb3Jt
YXQoIldlYlZpZXcgbmF2aWdhdGVkIHRvIHVybCBcIiVzXCIgd2l0aCB0aXRsZSBcIiVzXCIgd2l0
aCBIVFRQIGVxdWl2YWxlbnQgbWV0aG9kIFwiJXNcIi4gIFRoZSBuYXZpZ2F0aW9uIHdhcyBzdWNj
ZXNzZnVsIGFuZCB3YXMgbm90IGEgY2xpZW50IHJlZGlyZWN0LlxuIiwKLSAgICAgICAgdG9TVEQo
dXJsU3RyaW5nV0spLmNfc3RyKCksIHRvU1REKHRpdGxlV0spLmNfc3RyKCksIHRvU1REKG1ldGhv
ZFdLKS5jX3N0cigpKSk7CisgICAgbV9jdXJyZW50SW52b2NhdGlvbi0+b3V0cHV0VGV4dChtYWtl
U3RyaW5nKCJXZWJWaWV3IG5hdmlnYXRlZCB0byB1cmwgXCIiLCB1cmxTdHJpbmcsICJcIiB3aXRo
IHRpdGxlIFwiIiwgdGl0bGUsICJcIiB3aXRoIEhUVFAgZXF1aXZhbGVudCBtZXRob2QgXCIiLCBt
ZXRob2QsCisgICAgICAgICJcIi4gIFRoZSBuYXZpZ2F0aW9uIHdhcyBzdWNjZXNzZnVsIGFuZCB3
YXMgbm90IGEgY2xpZW50IHJlZGlyZWN0LlxuIikpOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVy
OjpkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYsIFdLVVJM
UmVmIHNvdXJjZVVSTCwgV0tVUkxSZWYgZGVzdGluYXRpb25VUkwsIFdLRnJhbWVSZWYgZnJhbWUs
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCkBAIC0yNTc4LDEwICsyNTc5LDEwIEBAIHZvaWQgVGVz
dENvbnRyb2xsZXI6OmRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdChXS1VSTFJlZiBzb3VyY2VVUkws
IFdLVVJMUmVmIGRlc3RpCiAgICAgaWYgKCFtX3Nob3VsZExvZ0hpc3RvcnlDbGllbnRDYWxsYmFj
a3MpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzb3Vy
Y2VTdHJpbmdXSyA9IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHNvdXJjZVVSTCkpOwotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBkZXN0aW5hdGlvblN0cmluZ1dLID0gYWRvcHRXSyhXS1VS
TENvcHlTdHJpbmcoZGVzdGluYXRpb25VUkwpKTsKKyAgICBhdXRvIHNvdXJjZSA9IHRvV1RGU3Ry
aW5nKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHNvdXJjZVVSTCkpKTsKKyAgICBhdXRvIGRlc3Rp
bmF0aW9uID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcoZGVzdGluYXRpb25V
UkwpKSk7CiAKLSAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5vdXRwdXRUZXh0KFN0cmluZzo6Zm9y
bWF0KCJXZWJWaWV3IHBlcmZvcm1lZCBhIGNsaWVudCByZWRpcmVjdCBmcm9tIFwiJXNcIiB0byBc
IiVzXCIuXG4iLCB0b1NURChzb3VyY2VTdHJpbmdXSykuY19zdHIoKSwgdG9TVEQoZGVzdGluYXRp
b25TdHJpbmdXSykuY19zdHIoKSkpOworICAgIG1fY3VycmVudEludm9jYXRpb24tPm91dHB1dFRl
eHQobWFrZVN0cmluZygiV2ViVmlldyBwZXJmb3JtZWQgYSBjbGllbnQgcmVkaXJlY3QgZnJvbSBc
IiIsIHNvdXJjZSwgIlwiIHRvIFwiIiwgZGVzdGluYXRpb24sICJcIi5cbiIpKTsKIH0KIAogdm9p
ZCBUZXN0Q29udHJvbGxlcjo6ZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KFdLQ29udGV4dFJlZiwg
V0tQYWdlUmVmLCBXS1VSTFJlZiBzb3VyY2VVUkwsIFdLVVJMUmVmIGRlc3RpbmF0aW9uVVJMLCBX
S0ZyYW1lUmVmIGZyYW1lLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQpAQCAtMjU5NywxMCArMjU5
OCwxMCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QoV0tV
UkxSZWYgc291cmNlVVJMLCBXS1VSTFJlZiBkZXN0aQogICAgIGlmICghbV9zaG91bGRMb2dIaXN0
b3J5Q2xpZW50Q2FsbGJhY2tzKQogICAgICAgICByZXR1cm47CiAKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gc291cmNlU3RyaW5nV0sgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyhzb3Vy
Y2VVUkwpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZGVzdGluYXRpb25TdHJpbmdX
SyA9IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKGRlc3RpbmF0aW9uVVJMKSk7CisgICAgYXV0byBz
b3VyY2UgPSB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyhzb3VyY2VVUkwpKSk7
CisgICAgYXV0byBkZXN0aW5hdGlvbiA9IHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5U3Ry
aW5nKGRlc3RpbmF0aW9uVVJMKSkpOwogCi0gICAgbV9jdXJyZW50SW52b2NhdGlvbi0+b3V0cHV0
VGV4dChTdHJpbmc6OmZvcm1hdCgiV2ViVmlldyBwZXJmb3JtZWQgYSBzZXJ2ZXIgcmVkaXJlY3Qg
ZnJvbSBcIiVzXCIgdG8gXCIlc1wiLlxuIiwgdG9TVEQoc291cmNlU3RyaW5nV0spLmNfc3RyKCks
IHRvU1REKGRlc3RpbmF0aW9uU3RyaW5nV0spLmNfc3RyKCkpKTsKKyAgICBtX2N1cnJlbnRJbnZv
Y2F0aW9uLT5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIldlYlZpZXcgcGVyZm9ybWVkIGEgc2VydmVy
IHJlZGlyZWN0IGZyb20gXCIiLCBzb3VyY2UsICJcIiB0byBcIiIsIGRlc3RpbmF0aW9uLCAiXCIu
XG4iKSk7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFVwZGF0ZUhpc3RvcnlUaXRsZShX
S0NvbnRleHRSZWYsIFdLUGFnZVJlZiwgV0tTdHJpbmdSZWYgdGl0bGUsIFdLVVJMUmVmIFVSTCwg
V0tGcmFtZVJlZiBmcmFtZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTI2MTYsOCArMjYx
Nyw4IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFVwZGF0ZUhpc3RvcnlUaXRsZShXS1N0cmlu
Z1JlZiB0aXRsZSwgV0tVUkxSZWYgVVJMLCBXS0ZyCiAgICAgaWYgKCFtX3Nob3VsZExvZ0hpc3Rv
cnlDbGllbnRDYWxsYmFja3MpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB1cmxTdHJpbmdXSyhBZG9wdFdLLCBXS1VSTENvcHlTdHJpbmcoVVJMKSk7Ci0g
ICAgbV9jdXJyZW50SW52b2NhdGlvbi0+b3V0cHV0VGV4dChTdHJpbmc6OmZvcm1hdCgiV2ViVmll
dyB1cGRhdGVkIHRoZSB0aXRsZSBmb3IgaGlzdG9yeSBVUkwgXCIlc1wiIHRvIFwiJXNcIi5cbiIs
IHRvU1REKHVybFN0cmluZ1dLKS5jX3N0cigpLCB0b1NURCh0aXRsZSkuY19zdHIoKSkpOworICAg
IGF1dG8gdXJsU3RyaW5nID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcoVVJM
KSkpOworICAgIG1fY3VycmVudEludm9jYXRpb24tPm91dHB1dFRleHQobWFrZVN0cmluZygiV2Vi
VmlldyB1cGRhdGVkIHRoZSB0aXRsZSBmb3IgaGlzdG9yeSBVUkwgXCIiLCB1cmxTdHJpbmcsICJc
IiB0byBcIiIsIHRvV1RGU3RyaW5nKHRpdGxlKSwgIlwiLlxuIikpOwogfQogCiB2b2lkIFRlc3RD
b250cm9sbGVyOjpzZXROYXZpZ2F0aW9uR2VzdHVyZXNFbmFibGVkKGJvb2wgdmFsdWUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357422</attachid>
            <date>2018-12-16 15:33:17 -0800</date>
            <delta_ts>2018-12-21 13:54:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192746-20181216153316.patch</filename>
            <type>text/plain</type>
            <size>43495</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5MjYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MThhYjJlNDFhZTM3ZWNhYjY3MTgxY2ExNTEyNGU0MDMzNzk0NWVlLi4yMThhNjU5MGJjODhkNWM4
ODA2NDhhOThkZWU0ZWIxMjk2ZDU4NThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAxOC0xMi0xNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgQ29udmVydCBhZGRpdGlvbmFsIFN0cmluZzo6Zm9ybWF0IGNsaWVudHMgdG8gYWx0
ZXJuYXRpdmUgYXBwcm9hY2hlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTkyNzQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHA6
CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckNvbnNvbGVBZ2VudDo6c3RvcFRpbWluZyk6
IFVzZSBtYWtlU3RyaW5nCisgICAgICAgIGFuZCBGb3JtYXR0ZWROdW1iZXI6OmZpeGVkV2lkdGgu
CisKIDIwMTgtMTItMTUgIFl1c3VrZSBTdXp1a2kgIDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9y
Zz4KIAogICAgICAgICBVbnJldmlld2VkLCBzdXBwcmVzcyB3YXJuaW5ncyBpbiBMaW51eApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRl
eCBjYTBlODU2Y2QyM2Y5NWFmMWYyY2U4MWQ5MTk3NjQxYWE0MWNiNzQyLi4wZjIwOWQ5YjcwYjY5
NTBjNWJmNGRjNGUzNjg4MjA1YjBiZDAxOGNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE4LTEy
LTE2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBDb252ZXJ0IGFk
ZGl0aW9uYWwgU3RyaW5nOjpmb3JtYXQgY2xpZW50cyB0byBhbHRlcm5hdGl2ZSBhcHByb2FjaGVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTI3NDYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9K
U09OVmFsdWVzLmNwcDoKKyAgICAgICAgKFdURjo6YXBwZW5kRG91YmxlUXVvdGVkU3RyaW5nRXNj
YXBlZENoYXJhY3Rlcik6IFJlbmFtZWQgZnJvbQorICAgICAgICBlc2NhcGVDaGFyIGFuZCByZW9y
ZGVyZWQgYXJndW1lbnRzIHRvIG1ha2Ugc2Vuc2UgYXMgYW4gYXBwZW5kIGZ1bmN0aW9uLgorICAg
ICAgICAoV1RGOjphcHBlbmREb3VibGVRdW90ZWRTdHJpbmcpOiBSZW5hbWVkIGZyb20gZG91Ymxl
UXVvdGVTdHJpbmcsCisgICAgICAgIHJlb3JkZXJlZCBhcmd1bWVudHMgdG8gbWFrZSBzZW5zZSBh
cyBhbiBhcHBlbmQgZnVuY3Rpb24sIHRha2UgYQorICAgICAgICBTdHJpbmdWaWV3IGluc3RlYWQg
b2YgYSBTdHJpbmcsIHVzZWQgZWFybHkgZXhpdCB0byBtYWtlIHRoZSBjb2RlCisgICAgICAgIGEg
Yml0IGVhc2llciB0byByZWFkLiBVc2UgdGhlIEFTQ0lJSGV4RGlnaXQgZnVuY3Rpb25zIHRvIGNv
bnN0cnVjdAorICAgICAgICBhIGhleCBudW1iZXIgYSBuaWJibGUgYXQgYSB0aW1lIHJhdGhlciB0
aGFuIHVzaW5nIFN0cmluZzo6Zm9ybWF0LgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6VmFsdWU6
OndyaXRlSlNPTiBjb25zdCk6IFVwZGF0ZSBmb3IgbmFtZSBjaGFuZ2UuCisgICAgICAgIChXVEY6
OkpTT05JbXBsOjpPYmplY3RCYXNlOjp3cml0ZUpTT04gY29uc3QpOiBEaXR0by4KKwogMjAxOC0x
Mi0xNSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIHdhcm5p
bmctaWdub3JpbmcgbWFjcm9zIG1vcmUgY29uc2lzdGVudGx5IGFuZCBzaW1wbHkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCAwNTk0OWJlMjRiNjc1NTU1NTUwOTkzNWRkZWI1ZjlmMzFmOTYzMzI3Li5iM2NlM2MxMmQw
ZDliMTg5NTkxYWZiMzFhYTY3NTBiZTA4YWVkMmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjIg
QEAKKzIwMTgtMTItMTYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAg
IENvbnZlcnQgYWRkaXRpb25hbCBTdHJpbmc6OmZvcm1hdCBjbGllbnRzIHRvIGFsdGVybmF0aXZl
IGFwcHJvYWNoZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5Mjc0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgcm91bmQgb2YgY29udmVyc2lvbnMgY292ZXJzIGxlc3MtdHJpdmlhbCBjYXNlcyBz
dWNoIGFzIGZsb2F0aW5nCisgICAgICAgIHBvaW50IG51bWVyYWxzIGFuZCBoZXhhZGVjaW1hbC4g
Tm90IHlldCB0YWtpbmcgb24gcG9pbnRlciBzZXJpYWxpemF0aW9uCisgICAgICAgICgiJXAiKSBv
ciBwYWRkaW5nIHdpdGggc3BhY2VzIG9mIHplcm8gZGlnaXRzLCBzbyBjYWxsIHNpdGVzIHVzaW5n
IHRob3NlCisgICAgICAgIGhhdmUgYmVlbiBsZWZ0IHVudG91Y2hlZC4KKworICAgICAgICBJbiBz
b21lIGNhc2VzIHRoZXNlIG5ldyBpZGlvbXMgYXJlIGEgYml0IGNsdW1zeSwgYW5kIHdlIGNvdWxk
IGZvbGxvdyB1cAorICAgICAgICB3aXRoIGFkZGl0aW9uYWwgY29udmVuaWVuY2UgZnVuY3Rpb25z
IHRvIG1ha2UgdGhlbSBtb3JlIGVsZWdhbnQuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJLZXlEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OmxvZ2dpbmdT
dHJpbmcgY29uc3QpOiBVc2UgbW9yZSBBU0NJSUxpdGVyYWwgYW5kCisgICAgICAgIG1vcmUgYXBw
ZW5kTGl0ZXJhbCBmb3IgZWZmaWNpZW5jeS4gVXNlIHVwcGVyTmliYmxlVG9Mb3dlcmNhc2VBU0NJ
SUhleERpZ2l0LAorICAgICAgICBsb3dlck5pYmJsZVRvTG93ZXJjYXNlQVNDSUlIZXhEaWdpdCwg
YW5kIGFsc28gbWFrZVN0cmluZyBhbmQgRm9ybWF0dGVkTnVtYmVyLgorCisgICAgICAgICogY3Nz
L01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXNwZWN0UmF0aW9W
YWx1ZUFzU3RyaW5nKTogVXNlIG1ha2VTdHJpbmcgYW5kIEZvcm1hdHRlZE51bWJlci4KKyAgICAg
ICAgRG9pbmcgaXQgdGhpcyB3YXkgbWFrZXMgaXQgYSBsaXR0bGUgY2xlYXJlciB0aGF0IHdlIGhh
dmUgYW4gdW5wbGVhc2FudAorICAgICAgICB1c2Ugb2YgZml4ZWQgNi1kaWdpdCBwcmVjaXNpb24g
aGVyZS4KKworICAgICAgICAqIGh0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cHJvY2Vzc0ZpbGVzaXplU3RyaW5nKTogVXNlIG1ha2VTdHJpbmcgYW5kIEZv
cm1hdHRlZE51bWJlci4KKyAgICAgICAgKiBodG1sL3RyYWNrL1ZUVEN1ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpWVFRDdWVCb3g6OmFwcGx5Q1NTUHJvcGVydGllcyk6IERpdHRvLgorICAgICAg
ICAqIHBhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUY6OndpbmRvd1JvdW5kZWRDb3JuZXJS
YWRpdXNDU1MgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL0hpc3RvcnkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SGlzdG9yeTo6c3RhdGVPYmplY3RBZGRlZCk6IERpdHRvLgorICAgICAg
ICAqIHBhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OmZvcm1hdEJ5dGVOdW1iZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmdjVGlt
ZXJTdHJpbmcpOiBVc2UgU3RyaW5nOjpudW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZVVzYWdlT3ZlcmxheTo6cGxhdGZvcm1EcmF3KTogVXNlIG1ha2VTdHJpbmcgYW5kIEZvcm1hdHRl
ZE51bWJlci4KKworICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzbmFwT2Zmc2V0c1RvU3RyaW5nKTogUmVtb3ZlZCBz
b21lIHVubmVjZXNzYXJ5IGNvcHlpbmcgaW4gdGhlIGZvciBsb29wLAorICAgICAgICB1c2UgYXBw
ZW5kTGl0ZXJhbCwgYW5kIHVzZSBhcHBlbmRGaXhlZFdpZHRoTnVtYmVyLgorICAgICAgICAoV2Vi
Q29yZTo6c25hcE9mZnNldFJhbmdlc1RvU3RyaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpzbmFwUG9ydE9yQXJlYVRvU3RyaW5nKTogVXNlIG1ha2VTdHJpbmcgYW5kIEZvcm1hdHRlZE51
bWJlci4KKworICAgICAgICAqIHBsYXRmb3JtL2FuaW1hdGlvbi9UaW1pbmdGdW5jdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUaW1pbmdGdW5jdGlvbjo6Y3NzVGV4dCBjb25zdCk6IFVzZSBt
YWtlU3RyaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vY29jb2EvS2V5RXZlbnRDb2NvYS5tbToK
KyAgICAgICAgKFdlYkNvcmU6OmtleUlkZW50aWZpZXJGb3JDaGFyQ29kZSk6IFVzZSBtYWtlU3Ry
aW5nIGFuZCB0aGUgQVNDSUlIZXhEaWdpdAorICAgICAgICBmdW5jdGlvbnMuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Om5h
bWVGb3JSZW5kZXJUcmVlQXNUZXh0IGNvbnN0KTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1v
Y2tSZWFsdGltZVZpZGVvU291cmNlOjpkcmF3VGV4dCk6IFVzZSBtYWtlU3RyaW5nIGFuZCBGb3Jt
YXR0ZWROdW1iZXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lU3RyaW5nQnVpbGRlcjo6dmlzaXRGaWVsZCk6
IFVzZSBTdHJpbmc6Om51bWJlclRvU3RyaW5nRml4ZWRXaWR0aC4KKwogMjAxOC0xMi0xNSAgWXVz
dWtlIFN1enVraSAgPHl1c3VrZXN1enVraUBzbG93c3RhcnQub3JnPgogCiAgICAgICAgIE51bGwg
cG9pbnRlciBkZXJlZmVyZW5jZSBpbiBKU0M6OldyaXRlQmFycmllckJhc2UoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFu
Z2VMb2cKaW5kZXggZDk3NWExNjM4ZTFlODNlNjk0NTVhNTI4ODZlOTY2NDg2MmU3MDgzYS4uNTg0
Yzc5NjkyNmI3OTUwNTQ1ZDQwZTNhNzFmZTZmZGI3YzZiYzJjMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTMgQEAKKzIwMTgtMTItMTYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIENvbnZlcnQgYWRkaXRpb25hbCBTdHJpbmc6OmZvcm1hdCBjbGllbnRz
IHRvIGFsdGVybmF0aXZlIGFwcHJvYWNoZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5Mjc0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogcGFsL0ZpbGVTaXplRm9ybWF0dGVyLmNwcDoKKyAgICAgICAg
KGZpbGVTaXplRGVzY3JpcHRpb24pOiBVc2UgbWFrZVN0cmluZyBhbmQgRm9ybWF0dGVkTnVtYmVy
LgorCiAyMDE4LTEyLTE1ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAg
ICBVc2Ugd2FybmluZy1pZ25vcmluZyBtYWNyb3MgbW9yZSBjb25zaXN0ZW50bHkgYW5kIHNpbXBs
eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwppbmRleCAxOGFhNWMxMTUyY2VlOWNkYWFkNTkyM2EwMjZjNzQ0NzhmOTJkNmJhLi43
M2NiMmU5ODU0MDlmMTFmNjY4YmVkMzFkNDNiYjNmZWUzYzc4NTM4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE4IEBACisyMDE4LTEyLTE2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKwor
ICAgICAgICBDb252ZXJ0IGFkZGl0aW9uYWwgU3RyaW5nOjpmb3JtYXQgY2xpZW50cyB0byBhbHRl
cm5hdGl2ZSBhcHByb2FjaGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTI3NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9WaWV3R2VzdHVyZUNvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlNuYXBzaG90UmVtb3ZhbFRy
YWNrZXI6OnN0YXJ0V2F0Y2hkb2cpOgorICAgICAgICBVc2UgbWFrZVN0cmluZyBhbmQgRm9ybWF0
dGVkTnVtYmVyLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29h
L0xvY2FsQXV0aGVudGljYXRvci5tbToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxBdXRoZW50aWNh
dG9yOjpnZXRBc3NlcnRpb24pOiBBZGRlZCBhIGNvbW1lbnQgYWJvdXQgYW4KKyAgICAgICAgaW5j
b3JyZWN0IGZvcm1hdCBzcGVjaWZpZXIgYW5kIGxlZnQgdGhpcyBjb2RlIGFzIGlzIGZvciBub3cu
CisKIDIwMTgtMTItMTYgIEFkcmlhbiBQZXJleiBkZSBDYXN0cm8gIDxhcGVyZXpAaWdhbGlhLmNv
bT4KIAogICAgICAgICBVbnJldmlld2VkIGZvbGxvdyB1cCBhZnRlciByMjM5MjYwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25z
b2xlQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yQ29uc29sZUFnZW50LmNwcAppbmRleCAzZmM1ZTk5MmE5NTBmMjAxOWY5MTY0OGQwZDFh
ZTdkMjczNmU0MmZjLi44YTg3NGE3NjdhOGIzN2I4ODNiNzI0ZDYyYTE2MjdlZDZlN2FkODY3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JDb25zb2xlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKQEAgLTE2NCw3ICsxNjQsNyBAQCB2b2lk
IEluc3BlY3RvckNvbnNvbGVBZ2VudDo6c3RvcFRpbWluZyhjb25zdCBTdHJpbmcmIHRpdGxlLCBS
ZWY8U2NyaXB0Q2FsbFN0YWNrPgogICAgIG1fdGltZXMucmVtb3ZlKGl0KTsKIAogICAgIFNlY29u
ZHMgZWxhcHNlZCA9IE1vbm90b25pY1RpbWU6Om5vdygpIC0gc3RhcnRUaW1lOwotICAgIFN0cmlu
ZyBtZXNzYWdlID0gdGl0bGUgKyBTdHJpbmc6OmZvcm1hdCgiOiAlLjNmbXMiLCBlbGFwc2VkLm1p
bGxpc2Vjb25kcygpKTsKKyAgICBTdHJpbmcgbWVzc2FnZSA9IG1ha2VTdHJpbmcodGl0bGUsICI6
ICIsIEZvcm1hdHRlZE51bWJlcjo6Zml4ZWRXaWR0aChlbGFwc2VkLm1pbGxpc2Vjb25kcygpLCAz
KSwgIm1zIik7CiAgICAgYWRkTWVzc2FnZVRvQ29uc29sZShzdGQ6Om1ha2VfdW5pcXVlPENvbnNv
bGVNZXNzYWdlPihNZXNzYWdlU291cmNlOjpDb25zb2xlQVBJLCBNZXNzYWdlVHlwZTo6VGltaW5n
LCBNZXNzYWdlTGV2ZWw6OkRlYnVnLCBtZXNzYWdlLCBXVEZNb3ZlKGNhbGxTdGFjaykpKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSlNPTlZhbHVlcy5jcHAgYi9Tb3VyY2UvV1RG
L3d0Zi9KU09OVmFsdWVzLmNwcAppbmRleCA2NGJlZTA1YTA3OTBhYjU2MDU0OTk3ZjllNzY1Yzlh
ZWIzOGJlZDFlLi5lNDQ2MWNkZjJiY2Y5NTRiODgyYTFkM2Q0MDUxOWE1ZDViMWUxYmI4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9KU09OVmFsdWVzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9KU09OVmFsdWVzLmNwcApAQCAtNDQ2LDM4ICs0NDYsNTQgQEAgUmVmUHRyPEpTT046OlZhbHVl
PiBidWlsZFZhbHVlKGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3Qg
VUNoYXIKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1pbmxpbmUgYm9vbCBlc2NhcGVDaGFyKFVD
aGFyIGMsIFN0cmluZ0J1aWxkZXImIGRzdCkKLXsKLSAgICBzd2l0Y2ggKGMpIHsKLSAgICBjYXNl
ICdcYic6IGRzdC5hcHBlbmRMaXRlcmFsKCJcXGIiKTsgYnJlYWs7Ci0gICAgY2FzZSAnXGYnOiBk
c3QuYXBwZW5kTGl0ZXJhbCgiXFxmIik7IGJyZWFrOwotICAgIGNhc2UgJ1xuJzogZHN0LmFwcGVu
ZExpdGVyYWwoIlxcbiIpOyBicmVhazsKLSAgICBjYXNlICdccic6IGRzdC5hcHBlbmRMaXRlcmFs
KCJcXHIiKTsgYnJlYWs7Ci0gICAgY2FzZSAnXHQnOiBkc3QuYXBwZW5kTGl0ZXJhbCgiXFx0Iik7
IGJyZWFrOwotICAgIGNhc2UgJ1xcJzogZHN0LmFwcGVuZExpdGVyYWwoIlxcXFwiKTsgYnJlYWs7
Ci0gICAgY2FzZSAnIic6IGRzdC5hcHBlbmRMaXRlcmFsKCJcXFwiIik7IGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKK2lubGluZSBib29sIGFwcGVuZERvdWJsZVF1
b3RlZFN0cmluZ0VzY2FwZWRDaGFyYWN0ZXIoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgVUNoYXIg
Y2hhcmFjdGVyKQoreworICAgIHN3aXRjaCAoY2hhcmFjdGVyKSB7CisgICAgY2FzZSAnXGInOgor
ICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIlxcYiIpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBjYXNlICdcZic6CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXFxmIik7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgJ1xuJzoKKyAgICAgICAgYnVpbGRlci5h
cHBlbmRMaXRlcmFsKCJcXG4iKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSAnXHIn
OgorICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIlxcciIpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBjYXNlICdcdCc6CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXFx0
Iik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgJ1xcJzoKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCJcXFxcIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Ug
JyInOgorICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIlxcXCIiKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKIH0K
IAotaW5saW5lIHZvaWQgZG91YmxlUXVvdGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIsIFN0cmlu
Z0J1aWxkZXImIGRzdCkKK2lubGluZSB2b2lkIGFwcGVuZERvdWJsZVF1b3RlZFN0cmluZyhTdHJp
bmdCdWlsZGVyJiBidWlsZGVyLCBTdHJpbmdWaWV3IHN0cmluZykKIHsKLSAgICBkc3QuYXBwZW5k
KCciJyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0ci5sZW5ndGgoKTsgKytpKSB7
Ci0gICAgICAgIFVDaGFyIGMgPSBzdHJbaV07Ci0gICAgICAgIGlmICghZXNjYXBlQ2hhcihjLCBk
c3QpKSB7Ci0gICAgICAgICAgICBpZiAoYyA8IDMyIHx8IGMgPiAxMjYgfHwgYyA9PSAnPCcgfHwg
YyA9PSAnPicpIHsKLSAgICAgICAgICAgICAgICAvLyAxLiBFc2NhcGluZyA8LCA+IHRvIHByZXZl
bnQgc2NyaXB0IGV4ZWN1dGlvbi4KLSAgICAgICAgICAgICAgICAvLyAyLiBUZWNobmljYWxseSwg
d2UgY291bGQgYWxzbyBwYXNzIHRocm91Z2ggYyA+IDEyNiBhcyBVVEY4LCBidXQgdGhpcwotICAg
ICAgICAgICAgICAgIC8vICAgIGlzIGFsc28gb3B0aW9uYWwuIEl0IHdvdWxkIGFsc28gYmUgYSBw
YWluIHRvIGltcGxlbWVudCBoZXJlLgotICAgICAgICAgICAgICAgIGRzdC5hcHBlbmQoU3RyaW5n
Ojpmb3JtYXQoIlxcdSUwNFgiLCBjKSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICBkc3QuYXBwZW5kKGMpOworICAgIGJ1aWxkZXIuYXBwZW5kKCciJyk7CisgICAgZm9yIChV
Q2hhciBjb2RlVW5pdCA6IHN0cmluZy5jb2RlVW5pdHMoKSkgeworICAgICAgICBpZiAoYXBwZW5k
RG91YmxlUXVvdGVkU3RyaW5nRXNjYXBlZENoYXJhY3RlcihidWlsZGVyLCBjb2RlVW5pdCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGNvZGVVbml0ID49IDMyICYmIGNvZGVV
bml0IDwgMTI3ICYmIGNvZGVVbml0ICE9ICc8JyAmJiBjb2RlVW5pdCAhPSAnPicpIHsKKyAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKGNvZGVVbml0KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CisgICAgICAgIC8vIDEuIFdlIGVzY2FwZSA8IGFuZCA+IHRvIHByZXZlbnQgc2Ny
aXB0IGV4ZWN1dGlvbi4KKyAgICAgICAgLy8gMi4gV2UgY291bGQgZW5jb2RlIGNoYXJhY3RlcnMg
Pj0gMTI3IGFzIFVURi04IGluc3RlYWQgb2YgXHUgZXNjYXBlIHNlcXVlbmNlcy4KKyAgICAgICAg
Ly8gRklYTUU6IFRoaXMgaXMgbGlrZWx5IGluY29ycmVjdCBmb3Igc3Vycm9nYXRlIHBhaXJzLgor
ICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIlxcdSIpOworICAgICAgICBidWlsZGVyLmFw
cGVuZCh1cHBlck5pYmJsZVRvQVNDSUlIZXhEaWdpdChjb2RlVW5pdCA+PiA4KSk7CisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKGxvd2VyTmliYmxlVG9BU0NJSUhleERpZ2l0KGNvZGVVbml0ID4+IDgp
KTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQodXBwZXJOaWJibGVUb0FTQ0lJSGV4RGlnaXQoY29k
ZVVuaXQpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQobG93ZXJOaWJibGVUb0FTQ0lJSGV4RGln
aXQoY29kZVVuaXQpKTsKICAgICB9Ci0gICAgZHN0LmFwcGVuZCgnIicpOworICAgIGJ1aWxkZXIu
YXBwZW5kKCciJyk7CiB9CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQpAQCAtNjU5LDcgKzY3
NSw3IEBAIHZvaWQgVmFsdWU6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0
CiAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kTGl0ZXJhbCgiZmFsc2UiKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBUeXBlOjpTdHJpbmc6Ci0gICAgICAgIGRvdWJsZVF1b3RlU3RyaW5nKG1f
dmFsdWUuc3RyaW5nLCBvdXRwdXQpOworICAgICAgICBhcHBlbmREb3VibGVRdW90ZWRTdHJpbmco
b3V0cHV0LCBtX3ZhbHVlLnN0cmluZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVHlwZTo6
RG91YmxlOgogICAgIGNhc2UgVHlwZTo6SW50ZWdlcjogewpAQCAtNzg2LDcgKzgwMiw3IEBAIHZv
aWQgT2JqZWN0QmFzZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3QKICAg
ICAgICAgQVNTRVJUKGZpbmRSZXN1bHQgIT0gbV9tYXAuZW5kKCkpOwogICAgICAgICBpZiAoaSkK
ICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJywnKTsKLSAgICAgICAgZG91YmxlUXVvdGVTdHJp
bmcoZmluZFJlc3VsdC0+a2V5LCBvdXRwdXQpOworICAgICAgICBhcHBlbmREb3VibGVRdW90ZWRT
dHJpbmcob3V0cHV0LCBmaW5kUmVzdWx0LT5rZXkpOwogICAgICAgICBvdXRwdXQuYXBwZW5kKCc6
Jyk7CiAgICAgICAgIGZpbmRSZXN1bHQtPnZhbHVlLT53cml0ZUpTT04ob3V0cHV0KTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRh
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuY3BwCmlu
ZGV4IDQwZmQzYjFkODQyMGU4ZWFjYWZkMWQ0Mzk2YjkwZDZlYjQwZDBhMmMuLjdiZDJhYzUyMDJi
ZGIxZDI5NWU2MTZiNzAzNDdiMGZlNjBiN2Q1NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNs
dWRlICJLZXllZENvZGluZy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC0zMTUsMTMgKzMxNiwxMyBAQCBpbnQgSURCS2V5RGF0YTo6Y29t
cGFyZShjb25zdCBJREJLZXlEYXRhJiBvdGhlcikgY29uc3QKIFN0cmluZyBJREJLZXlEYXRhOjps
b2dnaW5nU3RyaW5nKCkgY29uc3QKIHsKICAgICBpZiAobV9pc051bGwpCi0gICAgICAgIHJldHVy
biAiPG51bGw+IjsKKyAgICAgICAgcmV0dXJuICI8bnVsbD4iX3M7CiAKICAgICBTdHJpbmcgcmVz
dWx0OwogCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlw
ZTo6SW52YWxpZDoKLSAgICAgICAgcmV0dXJuICI8aW52YWxpZD4iOworICAgICAgICByZXR1cm4g
IjxpbnZhbGlkPiJfczsKICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6QXJyYXk6IHsKICAg
ICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVy
YWwoIjxhcnJheT4gLSB7ICIpOwpAQCAtMzM3LDIxICszMzgsMjQgQEAgU3RyaW5nIElEQktleURh
dGE6OmxvZ2dpbmdTdHJpbmcoKSBjb25zdAogICAgIH0KICAgICBjYXNlIEluZGV4ZWREQjo6S2V5
VHlwZTo6QmluYXJ5OiB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICAgICAg
YnVpbGRlci5hcHBlbmQoIjxiaW5hcnk+IC0gIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiPGJpbmFyeT4gLSAiKTsKIAogICAgICAgICBhdXRvKiBkYXRhID0gV1RGOjpnZXQ8VGhy
ZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpLmRhdGEoKTsKICAgICAgICAgaWYgKCFkYXRhKSB7
Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiKG51bGwpIik7CisgICAgICAgICAgICBidWls
ZGVyLmFwcGVuZExpdGVyYWwoIihudWxsKSIpOwogICAgICAgICAgICAgcmVzdWx0ID0gYnVpbGRl
ci50b1N0cmluZygpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBz
aXplX3QgaSA9IDA7Ci0gICAgICAgIGZvciAoOyBpIDwgOCAmJiBpIDwgZGF0YS0+c2l6ZSgpOyAr
K2kpCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiJTAyeCIsIGRh
dGEtPmF0KGkpKSk7CisgICAgICAgIGZvciAoOyBpIDwgOCAmJiBpIDwgZGF0YS0+c2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgYnl0ZSA9IGRhdGEtPmF0KGkpOworICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQodXBwZXJOaWJibGVUb0xvd2VyY2FzZUFTQ0lJSGV4RGlnaXQoYnl0
ZSkpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQobG93ZXJOaWJibGVUb0xvd2VyY2FzZUFT
Q0lJSGV4RGlnaXQoYnl0ZSkpOworICAgICAgICB9CiAKICAgICAgICAgaWYgKGRhdGEtPnNpemUo
KSA+IDgpCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiLi4uIik7CisgICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIi4uLiIpOwogCiAgICAgICAgIHJlc3VsdCA9IGJ1aWxkZXIu
dG9TdHJpbmcoKTsKICAgICAgICAgYnJlYWs7CkBAIC0zNjAsMTMgKzM2NCwxMyBAQCBTdHJpbmcg
SURCS2V5RGF0YTo6bG9nZ2luZ1N0cmluZygpIGNvbnN0CiAgICAgICAgIHJlc3VsdCA9ICI8c3Ry
aW5nPiAtICIgKyBXVEY6OmdldDxTdHJpbmc+KG1fdmFsdWUpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6RGF0ZToKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6
Zm9ybWF0KCI8ZGF0ZT4gLSAlZiIsIFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSkpOworICAgICAg
ICByZXR1cm4gbWFrZVN0cmluZygiPGRhdGU+IC0gIiwgRm9ybWF0dGVkTnVtYmVyOjpmaXhlZFdp
ZHRoKFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSksIDYpKTsKICAgICBjYXNlIEluZGV4ZWREQjo6
S2V5VHlwZTo6TnVtYmVyOgotICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIjxudW1iZXI+
IC0gJWYiLCBXVEY6OmdldDxkb3VibGU+KG1fdmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VT
dHJpbmcoIjxudW1iZXI+IC0gIiwgRm9ybWF0dGVkTnVtYmVyOjpmaXhlZFdpZHRoKFdURjo6Z2V0
PGRvdWJsZT4obV92YWx1ZSksIDYpKTsKICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlwZTo6TWF4
OgotICAgICAgICByZXR1cm4gIjxtYXhpbXVtPiI7CisgICAgICAgIHJldHVybiAiPG1heGltdW0+
Il9zOwogICAgIGNhc2UgSW5kZXhlZERCOjpLZXlUeXBlOjpNaW46Ci0gICAgICAgIHJldHVybiAi
PG1pbmltdW0+IjsKKyAgICAgICAgcmV0dXJuICI8bWluaW11bT4iX3M7CiAgICAgfQogCiAgICAg
aWYgKHJlc3VsdC5sZW5ndGgoKSA+IDE1MCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UEFML3BhbC9GaWxlU2l6ZUZvcm1hdHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL0Zp
bGVTaXplRm9ybWF0dGVyLmNwcAppbmRleCA0ZGQxZDVmMWRlNTJlOWY2MWZmYzMwOTRjOWVlZDVi
NTdjNmVkNDUxLi41ZTA3N2UwMjE5ZDVkNmZlYzMxOTc5ODAyMjk2OGZlMjZkY2JiMDNlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL0ZpbGVTaXplRm9ybWF0dGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL0ZpbGVTaXplRm9ybWF0dGVyLmNwcApAQCAtMjYsNiAr
MjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZpbGVTaXplRm9ybWF0dGVy
LmgiCiAKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKwog
I2lmICFQTEFURk9STShDT0NPQSkKIAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVu
YXRlTnVtYmVycy5oPgpAQCAtMzcsMTAgKzM5LDEwIEBAIFN0cmluZyBmaWxlU2l6ZURlc2NyaXB0
aW9uKHVpbnQ2NF90IHNpemUpCiAgICAgaWYgKHNpemUgPCAxMDAwKQogICAgICAgICByZXR1cm4g
bWFrZVN0cmluZyhzaXplLCAiIGJ5dGVzIik7CiAgICAgaWYgKHNpemUgPCAxMDAwMDAwKQotICAg
ICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiUuMWYgS0IiLCBzaXplIC8gMTAwMC4pOworICAg
ICAgICByZXR1cm4gbWFrZVN0cmluZyhGb3JtYXR0ZWROdW1iZXI6OmZpeGVkV2lkdGgoc2l6ZSAv
IDEwMDAuLCAxKSwgIiBLQiIpOyAvLyBUaGlzIHNob3VsZCBiZSBsb3dlcmNhc2Ugay4KICAgICBp
ZiAoc2l6ZSA8IDEwMDAwMDAwMDApCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJS4x
ZiBNQiIsIHNpemUgLyAxMDAwMDAwLik7Ci0gICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlLjFm
IEdCIiwgc2l6ZSAvIDEwMDAwMDAwMDAuKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoRm9y
bWF0dGVkTnVtYmVyOjpmaXhlZFdpZHRoKHNpemUgLyAxMDAwMDAwLiwgMSksICIgTUIiKTsKKyAg
ICByZXR1cm4gbWFrZVN0cmluZyhGb3JtYXR0ZWROdW1iZXI6OmZpeGVkV2lkdGgoc2l6ZSAvIDEw
MDAwMDAwMDAuLCAxKSwgIiBHQiIpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9N
ZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAppbmRleCBlOTU5YWU2MGNmYTY3NDRhNzhhYjgwYTNjM2I2
MzZiMDBlOWY4ODg0Li41NGY3OTQzMWMwMGUzMTc0ODgxNzVkOWIyOWRmODVmMTdkN2RmMGZjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCkBAIC01MCw2ICs1
MCw3IEBACiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlRoZW1lLmgiCiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRl
bmF0ZU51bWJlcnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKICNpZiBF
TkFCTEUoM0RfVFJBTlNGT1JNUykKQEAgLTIzNywxNCArMjM4LDE2IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGJvb2wgY29tcGFyZVZhbHVlKFQgYSwgVSBiLCBNZWRpYUZlYXR1
cmVQcmVmaXgKIH0KIAogI2lmICFMT0dfRElTQUJMRUQKKwogc3RhdGljIFN0cmluZyBhc3BlY3RS
YXRpb1ZhbHVlQXNTdHJpbmcoQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICghaXM8Q1NTQXNw
ZWN0UmF0aW9WYWx1ZT4odmFsdWUpKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAog
ICAgIGF1dG8mIGFzcGVjdFJhdGlvID0gZG93bmNhc3Q8Q1NTQXNwZWN0UmF0aW9WYWx1ZT4oKnZh
bHVlKTsKLSAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiVmLyVmIiwgYXNwZWN0UmF0aW8ubnVt
ZXJhdG9yVmFsdWUoKSwgYXNwZWN0UmF0aW8uZGVub21pbmF0b3JWYWx1ZSgpKTsKKyAgICByZXR1
cm4gbWFrZVN0cmluZyhGb3JtYXR0ZWROdW1iZXI6OmZpeGVkV2lkdGgoYXNwZWN0UmF0aW8ubnVt
ZXJhdG9yVmFsdWUoKSwgNiksICcvJywgRm9ybWF0dGVkTnVtYmVyOjpmaXhlZFdpZHRoKGFzcGVj
dFJhdGlvLmRlbm9taW5hdG9yVmFsdWUoKSwgNikpOwogfQorCiAjZW5kaWYKIAogc3RhdGljIGJv
b2wgY29tcGFyZUFzcGVjdFJhdGlvVmFsdWUoQ1NTVmFsdWUqIHZhbHVlLCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9G
VFBEaXJlY3RvcnlEb2N1bWVudC5jcHAKaW5kZXggZDdlMmI3NWE0NTMxMjBiMDJkN2M3NDJkNDYw
ZjQ2YTRkZDU5OTQ4ZS4uN2ZmY2JlMzlkNWZmN2VlN2Q5ZjZiNzc4NzdmOWI4OWIxYjI2ZmZkNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAKQEAgLTQx
LDYgKzQxLDcgQEAKICNpbmNsdWRlIDx3dGYvR3JlZ29yaWFuRGF0ZVRpbWUuaD4KICNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KICNpbmNsdWRl
IDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0xNjcsMTIgKzE2OCwxMiBAQCBzdGF0aWMgU3RyaW5nIHByb2Nlc3NGaWxlc2l6ZVN0cmluZyhj
b25zdCBTdHJpbmcmIHNpemUsIGJvb2wgaXNEaXJlY3RvcnkpCiAgICAgICAgIHJldHVybiB1bmtu
b3duRmlsZVNpemVUZXh0KCk7CiAKICAgICBpZiAoYnl0ZXMgPCAxMDAwMDAwKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiUuMmYgS0IiLCBzdGF0aWNfY2FzdDxmbG9hdD4oYnl0ZXMp
LzEwMDApOworICAgICAgICByZXR1cm4gbWFrZVN0cmluZyhGb3JtYXR0ZWROdW1iZXI6OmZpeGVk
V2lkdGgoYnl0ZXMgLyAxMDAwLiwgMiksICIgS0IiKTsKIAogICAgIGlmIChieXRlcyA8IDEwMDAw
MDAwMDApCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJS4yZiBNQiIsIHN0YXRpY19j
YXN0PGZsb2F0PihieXRlcykvMTAwMDAwMCk7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKEZv
cm1hdHRlZE51bWJlcjo6Zml4ZWRXaWR0aChieXRlcyAvIDEwMDAwMDAuLCAyKSwgIiBNQiIpOwog
Ci0gICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlLjJmIEdCIiwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGJ5dGVzKS8xMDAwMDAwMDAwKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhGb3JtYXR0ZWROdW1i
ZXI6OmZpeGVkV2lkdGgoYnl0ZXMgLyAxMDAwMDAwMDAwLiwgMiksICIgR0IiKTsKIH0KIAogc3Rh
dGljIGJvb2wgd2FzTGFzdERheU9mTW9udGgoaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUQ3VlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svVlRUQ3VlLmNwcAppbmRleCA0ZmYxM2EwMWFlOWM2NTQyNzVm
MmRiMTljMGJlZTBkYWViYmM5Zjk2Li4yZjBlNWUzMDgxZGFjNzVjNTYxZmU3YTljYzY1YmFkZTdm
YzQ1ZDM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9WVFRDdWUuY3BwCkBAIC0zMCw5ICszMCw5
IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlZUVEN1ZS5oIgogCiAj
aWYgRU5BQkxFKFZJREVPX1RSQUNLKQotI2luY2x1ZGUgIlZUVEN1ZS5oIgogCiAjaW5jbHVkZSAi
Q1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKQEAgLTU1
LDYgKzU1LDcgQEAKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTIyNyw3ICsyMjgsNyBAQCB2b2lkIFZUVEN1ZUJveDo6YXBwbHlD
U1NQcm9wZXJ0aWVzKGNvbnN0IEludFNpemUmIHZpZGVvU2l6ZSkKICAgICAgICAgLy8gbWFpbnRh
aW5pbmcgdGhlIHJlbGF0aXZlIHBvc2l0aW9ucyBvZiB0aGUgYm94ZXMgaW4gYm94ZXMgdG8gZWFj
aAogICAgICAgICAvLyBvdGhlci4KICAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVRyYW5zZm9ybSwKLSAgICAgICAgICAgIFN0cmluZzo6Zm9ybWF0KCJ0cmFuc2xhdGUo
LSUuMmYlJSwgLSUuMmYlJSkiLCBwb3NpdGlvbi5maXJzdCwgcG9zaXRpb24uc2Vjb25kKSk7Cisg
ICAgICAgICAgICBtYWtlU3RyaW5nKCJ0cmFuc2xhdGUoIiwgRm9ybWF0dGVkTnVtYmVyOjpmaXhl
ZFdpZHRoKC1wb3NpdGlvbi5maXJzdCwgMiksICIlLCAiLCBGb3JtYXR0ZWROdW1iZXI6OmZpeGVk
V2lkdGgoLXBvc2l0aW9uLnNlY29uZCwgMiksICIlKSIpKTsKIAogICAgICAgICBzZXRJbmxpbmVT
dHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2hpdGVTcGFjZSwgQ1NTVmFsdWVQcmUpOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01l
ZGlhQUYuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVk
aWFBRi5jcHAKaW5kZXggYjc5MjNmNzgzMjIyNmVkNTNmMGM5MWY4ZGVkYTg1ZGI5ZDYzMTYyYy4u
ZWJkOGU5ZTczNGNhNThmZGExNjczNDUwZjg0MmVhNTZhMDJhZjcwMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAKQEAg
LTMyLDE2ICszMiwxMiBAQAogI2luY2x1ZGUgIkNhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFG
LmgiCiAKICNpbmNsdWRlICJBdWRpb1RyYWNrTGlzdC5oIgotI2lmIFBMQVRGT1JNKFdJTikKLSNp
bmNsdWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgotI2VuZGlmCiAjaW5jbHVkZSAi
RmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1
ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAi
TWVkaWFDb250cm9sRWxlbWVudHMuaCIKICNpbmNsdWRlICJUZXh0VHJhY2tMaXN0LmgiCi0jaW5j
bHVkZSA8d3RmL1VSTC5oPgogI2luY2x1ZGUgIlVzZXJTdHlsZVNoZWV0VHlwZXMuaCIKICNpbmNs
dWRlICJWVFRDdWUuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CkBAIC00OSwxOSArNDUsMjYgQEAK
ICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1NvZnRMaW5raW5nLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+
CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogI2ltcG9ydCAiV2ViQ29yZVRocmVhZFJ1bi5o
IgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8cGFsL3NwaS93aW4vQ29y
ZVRleHRTUElXaW4uaD4KKyNlbmRpZgorCiAjaWYgQ09NUElMRVIoTVNWQykKIC8vIFNlZSBodHRw
czovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzM1YmhrZmI2LmFzcHgKICNwcmFn
bWEgd2FybmluZyhkaXNhYmxlOiA0MjczKQogI2VuZGlmCiAKICNpZiBIQVZFKE1FRElBX0FDQ0VT
U0lCSUxJVFlfRlJBTUVXT1JLKQorCiAjaW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KICNp
bmNsdWRlIDxNZWRpYUFjY2Vzc2liaWxpdHkvTWVkaWFBY2Nlc3NpYmlsaXR5Lmg+CiAKQEAgLTgz
LDE4ICs4NiwxOSBAQAogU09GVF9MSU5LX0FWRl9GUkFNRVdPUksoQ29yZU1lZGlhKQogU09GVF9M
SU5LX0FWRl9GUkFNRVdPUktfSU1QT1JUX09QVElPTkFMKENvcmVNZWRpYSwgTVRFbmFibGVDYXB0
aW9uMjAxNUJlaGF2aW9yLCBCb29sZWFuLCAoKSkKIAotI2Vsc2UKKyNlbHNlIC8vIFBMQVRGT1JN
KFdJTikKIAogU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChNZWRpYVRvb2xib3gpCiBTT0ZU
X0xJTktfT1BUSU9OQUwoTWVkaWFUb29sYm94LCBNVEVuYWJsZUNhcHRpb24yMDE1QmVoYXZpb3Is
IEJvb2xlYW4sICgpLCAoKSkKIAotI2VuZGlmIC8vIFBMQVRGT1JNKFdJTikKKyNlbmRpZiAvLyAh
UExBVEZPUk0oV0lOKQogCiAjZW5kaWYgLy8gSEFWRShNRURJQV9BQ0NFU1NJQklMSVRZX0ZSQU1F
V09SSykKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgSEFWRShNRURJQV9BQ0NFU1NJQklM
SVRZX0ZSQU1FV09SSykKKwogc3RhdGljIHZvaWQgdXNlckNhcHRpb25QcmVmZXJlbmNlc0NoYW5n
ZWROb3RpZmljYXRpb25DYWxsYmFjayhDRk5vdGlmaWNhdGlvbkNlbnRlclJlZiwgdm9pZCogb2Jz
ZXJ2ZXIsIENGU3RyaW5nUmVmLCBjb25zdCB2b2lkICosIENGRGljdGlvbmFyeVJlZikKIHsKICNp
ZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTEwNSw2ICsxMDksNyBAQCBzdGF0aWMgdm9pZCB1
c2VyQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZE5vdGlmaWNhdGlvbkNhbGxiYWNrKENGTm90aWZp
Y2F0aW9uQ2VudAogICAgIH0pOwogI2VuZGlmCiB9CisKICNlbmRpZgogCiBDYXB0aW9uVXNlclBy
ZWZlcmVuY2VzTWVkaWFBRjo6Q2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYoUGFnZUdyb3Vw
JiBncm91cCkKQEAgLTM0Niw3ICszNTEsNyBAQCBTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJlbmNl
c01lZGlhQUY6OndpbmRvd1JvdW5kZWRDb3JuZXJSYWRpdXNDU1MoKSBjb25zdAogICAgICAgICBy
ZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBh
cHBlbmRDU1MoYnVpbGRlciwgQ1NTUHJvcGVydHlCb3JkZXJSYWRpdXMsIFN0cmluZzo6Zm9ybWF0
KCIlLjAyZnB4IiwgcmFkaXVzKSwgYmVoYXZpb3IgPT0ga01BQ2FwdGlvbkFwcGVhcmFuY2VCZWhh
dmlvclVzZVZhbHVlKTsKKyAgICBhcHBlbmRDU1MoYnVpbGRlciwgQ1NTUHJvcGVydHlCb3JkZXJS
YWRpdXMsIG1ha2VTdHJpbmcoRm9ybWF0dGVkTnVtYmVyOjpmaXhlZFdpZHRoKHJhZGl1cywgMiks
ICJweCIpLCBiZWhhdmlvciA9PSBrTUFDYXB0aW9uQXBwZWFyYW5jZUJlaGF2aW9yVXNlVmFsdWUp
OwogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3Rvcnku
Y3BwCmluZGV4IGZkMTkyMWQyMzc0ZTkzMWI4NWE5MTcyNWQwM2I2MmMzNDU1NGQ1ZTUuLjkzZDRk
YTRjZDM5ZWNiNGQwMzU3NjRiNmRmNjdlZDEyMDhkMWQ2OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvSGlzdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5
LmNwcApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5j
bHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC0yMjIsOCArMjIzLDggQEAgRXhjZXB0aW9uT3I8dm9pZD4g
SGlzdG9yeTo6c3RhdGVPYmplY3RBZGRlZChSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYm
IGRhdGEKICAgICAKICAgICBpZiAobWFpbkhpc3RvcnkubV9jdXJyZW50U3RhdGVPYmplY3RUaW1l
U3Bhbk9iamVjdHNBZGRlZCA+PSBwZXJTdGF0ZU9iamVjdFRpbWVTcGFuTGltaXQpIHsKICAgICAg
ICAgaWYgKHN0YXRlT2JqZWN0VHlwZSA9PSBTdGF0ZU9iamVjdFR5cGU6OlJlcGxhY2UpCi0gICAg
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU2VjdXJpdHlFcnJvciwgU3RyaW5nOjpmb3JtYXQo
IkF0dGVtcHQgdG8gdXNlIGhpc3RvcnkucmVwbGFjZVN0YXRlKCkgbW9yZSB0aGFuICV1IHRpbWVz
IHBlciAlZiBzZWNvbmRzIiwgcGVyU3RhdGVPYmplY3RUaW1lU3BhbkxpbWl0LCBzdGF0ZU9iamVj
dFRpbWVTcGFuLnNlY29uZHMoKSkgfTsKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNlY3Vy
aXR5RXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJBdHRlbXB0IHRvIHVzZSBoaXN0b3J5LnB1c2hTdGF0
ZSgpIG1vcmUgdGhhbiAldSB0aW1lcyBwZXIgJWYgc2Vjb25kcyIsIHBlclN0YXRlT2JqZWN0VGlt
ZVNwYW5MaW1pdCwgc3RhdGVPYmplY3RUaW1lU3Bhbi5zZWNvbmRzKCkpIH07CisgICAgICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgU2VjdXJpdHlFcnJvciwgbWFrZVN0cmluZygiQXR0ZW1wdCB0
byB1c2UgaGlzdG9yeS5yZXBsYWNlU3RhdGUoKSBtb3JlIHRoYW4gIiwgcGVyU3RhdGVPYmplY3RU
aW1lU3BhbkxpbWl0LCAiIHRpbWVzIHBlciAiLCBGb3JtYXR0ZWROdW1iZXI6OmZpeGVkV2lkdGgo
c3RhdGVPYmplY3RUaW1lU3Bhbi5zZWNvbmRzKCksIDYpLCAiIHNlY29uZHMiKSB9OworICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgU2VjdXJpdHlFcnJvciwgbWFrZVN0cmluZygiQXR0ZW1wdCB0
byB1c2UgaGlzdG9yeS5wdXNoU3RhdGUoKSBtb3JlIHRoYW4gIiwgcGVyU3RhdGVPYmplY3RUaW1l
U3BhbkxpbWl0LCAiIHRpbWVzIHBlciAiLCBGb3JtYXR0ZWROdW1iZXI6OmZpeGVkV2lkdGgoc3Rh
dGVPYmplY3RUaW1lU3Bhbi5zZWNvbmRzKCksIDYpLCAiIHNlY29uZHMiKSB9OwogICAgIH0KIAog
ICAgIENoZWNrZWQ8dW5zaWduZWQ+IHRpdGxlU2l6ZSA9IHRpdGxlLmxlbmd0aCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3ZlcmxheUNvY29h
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9SZXNvdXJjZVVzYWdlT3ZlcmxheUNvY29h
Lm1tCmluZGV4IDBjYjVjMzUzMjdiMWQyOTdkMDQ4OTQyYTE5ZmFhNTAwZTZmNzQwMTMuLjZiYjFm
YmI3NjgwZmZjM2E0NjhkNzk5MmEwNjQ2ODdiNGYxYmYxMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW0KQEAgLTQx
LDYgKzQxLDcgQEAKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9N
ZW1vcnlGb290cHJpbnQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KIAogdXNpbmcgV2ViQ29y
ZTo6UmVzb3VyY2VVc2FnZU92ZXJsYXk7CiBAaW50ZXJmYWNlIFdlYk92ZXJsYXlMYXllciA6IENB
TGF5ZXIgewpAQCAtNDI2LDExICs0MjcsMTEgQEAgc3RhdGljIHZvaWQgZHJhd01lbW9yeVBpZShD
R0NvbnRleHRSZWYgY29udGV4dCwgRmxvYXRSZWN0JiByZWN0LCBIaXN0b3JpY1Jlc291cmMKIHN0
YXRpYyBTdHJpbmcgZm9ybWF0Qnl0ZU51bWJlcihzaXplX3QgbnVtYmVyKQogewogICAgIGlmIChu
dW1iZXIgPj0gMTAyNCAqIDEwNDg1NzYpCi0gICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgi
JS4zZiBHQiIsIHN0YXRpY19jYXN0PGRvdWJsZT4obnVtYmVyKSAvICgxMDI0ICogMTA0ODU3Nikp
OworICAgICAgICByZXR1cm4gbWFrZVN0cmluZyhGb3JtYXR0ZWROdW1iZXI6OmZpeGVkV2lkdGgo
bnVtYmVyIC8gKDEwMjQuICogMTA0ODU3NiksIDMpLCAiIEdCIik7CiAgICAgaWYgKG51bWJlciA+
PSAxMDQ4NTc2KQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiUuMmYgTUIiLCBzdGF0
aWNfY2FzdDxkb3VibGU+KG51bWJlcikgLyAxMDQ4NTc2KTsKKyAgICAgICAgcmV0dXJuIG1ha2VT
dHJpbmcoRm9ybWF0dGVkTnVtYmVyOjpmaXhlZFdpZHRoKG51bWJlciAvIDEwNDg1NzYuLCAyKSwg
IiBNQiIpOwogICAgIGlmIChudW1iZXIgPj0gMTAyNCkKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6
Zm9ybWF0KCIlLjFmIGtCIiwgc3RhdGljX2Nhc3Q8ZG91YmxlPihudW1iZXIpIC8gMTAyNCk7Cisg
ICAgICAgIHJldHVybiBtYWtlU3RyaW5nKEZvcm1hdHRlZE51bWJlcjo6Zml4ZWRXaWR0aChudW1i
ZXIgLyAxMDI0LCAxKSwgIiBrQiIpOwogICAgIHJldHVybiBTdHJpbmc6Om51bWJlcihudW1iZXIp
OwogfQogCkBAIC00MzgsNyArNDM5LDcgQEAgc3RhdGljIFN0cmluZyBnY1RpbWVyU3RyaW5nKE1v
bm90b25pY1RpbWUgdGltZXJGaXJlRGF0ZSwgTW9ub3RvbmljVGltZSBub3cpCiB7CiAgICAgaWYg
KHN0ZDo6aXNuYW4odGltZXJGaXJlRGF0ZSkpCiAgICAgICAgIHJldHVybiAiW25vdCBzY2hlZHVs
ZWRdIl9zOwotICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJWciLCAodGltZXJGaXJlRGF0ZSAt
IG5vdykuc2Vjb25kcygpKTsKKyAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIoKHRpbWVyRmlyZURh
dGUgLSBub3cpLnNlY29uZHMoKSk7CiB9CiAKIHZvaWQgUmVzb3VyY2VVc2FnZU92ZXJsYXk6OnBs
YXRmb3JtRHJhdyhDR0NvbnRleHRSZWYgY29udGV4dCkKQEAgLTQ1Nyw3ICs0NTgsNyBAQCB2b2lk
IFJlc291cmNlVXNhZ2VPdmVybGF5OjpwbGF0Zm9ybURyYXcoQ0dDb250ZXh0UmVmIGNvbnRleHQp
CiAgICAgQ0dDb250ZXh0Q2xlYXJSZWN0KGNvbnRleHQsIHZpZXdCb3VuZHMpOwogCiAgICAgc3Rh
dGljIENHQ29sb3JSZWYgY29sb3JGb3JMYWJlbHMgPSBjcmVhdGVDb2xvcigwLjksIDAuOSwgMC45
LCAxKTsKLSAgICBzaG93VGV4dChjb250ZXh0LCAxMCwgMjAsIGNvbG9yRm9yTGFiZWxzLCBTdHJp
bmc6OmZvcm1hdCgiICAgICAgICBDUFU6ICVnIiwgZGF0YS5jcHUubGFzdCgpKSk7CisgICAgc2hv
d1RleHQoY29udGV4dCwgMTAsIDIwLCBjb2xvckZvckxhYmVscywgbWFrZVN0cmluZygiICAgICAg
ICBDUFU6ICIsIEZvcm1hdHRlZE51bWJlcjo6Zml4ZWRQcmVjaXNpb24oZGF0YS5jcHUubGFzdCgp
KSkpOwogICAgIHNob3dUZXh0KGNvbnRleHQsIDEwLCAzMCwgY29sb3JGb3JMYWJlbHMsICIgIEZv
b3RwcmludDogIiArIGZvcm1hdEJ5dGVOdW1iZXIobWVtb3J5Rm9vdHByaW50KCkpKTsKICAgICBz
aG93VGV4dChjb250ZXh0LCAxMCwgNDAsIGNvbG9yRm9yTGFiZWxzLCAiICAgRXh0ZXJuYWw6ICIg
KyBmb3JtYXRCeXRlTnVtYmVyKGRhdGEudG90YWxFeHRlcm5hbFNpemUubGFzdCgpKSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zm
c2V0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9m
ZnNldHMuY3BwCmluZGV4IDAyMDc1Mzg0N2EwZDg0MTcxOTMwZTJlNmYzZTVlNGQ5ZDQ4YzdhZjMu
LjYwMzc5YjU4MmRkNzM3MTRlNzZmZjg2ZTNkYTFmZmZkODBiOTc0NTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNw
cApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJT
Y3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlN0eWxlU2Nyb2xsU25hcFBvaW50cy5oIgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgogCiAjaWYgRU5BQkxF
KENTU19TQ1JPTExfU05BUCkKIApAQCAtNzUsMjggKzc2LDM4IEBAIHN0YXRpYyBMYXlvdXRVbml0
IGNvbXB1dGVTY3JvbGxTbmFwQWxpZ25PZmZzZXQoY29uc3QgTGF5b3V0VW5pdCYgbGVmdE9yVG9w
LCBjb25zCiAKIHN0YXRpYyBTdHJpbmcgc25hcE9mZnNldHNUb1N0cmluZyhjb25zdCBWZWN0b3I8
TGF5b3V0VW5pdD4mIHNuYXBPZmZzZXRzKQogewotICAgIFN0cmluZ0J1aWxkZXIgczsKLSAgICBz
LmFwcGVuZCgiWyAiKTsKLSAgICBmb3IgKGF1dG8gb2Zmc2V0IDogc25hcE9mZnNldHMpCi0gICAg
ICAgIHMuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCIlLjFmICIsIG9mZnNldC50b0Zsb2F0KCkpKTsK
LQotICAgIHMuYXBwZW5kKCJdIik7Ci0gICAgcmV0dXJuIHMudG9TdHJpbmcoKTsKKyAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJbICIpOworICAg
IGZvciAoYXV0byYgb2Zmc2V0IDogc25hcE9mZnNldHMpIHsKKyAgICAgICAgYnVpbGRlci5hcHBl
bmRGaXhlZFdpZHRoTnVtYmVyKG9mZnNldC50b0Zsb2F0KCksIDEpOworICAgICAgICBidWlsZGVy
LmFwcGVuZCgnICcpOworICAgIH0KKyAgICBidWlsZGVyLmFwcGVuZCgnXScpOworICAgIHJldHVy
biBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKIHN0YXRpYyBTdHJpbmcgc25hcE9mZnNldFJhbmdl
c1RvU3RyaW5nKGNvbnN0IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxMYXlvdXRVbml0Pj4mIHJh
bmdlcykKIHsKLSAgICBTdHJpbmdCdWlsZGVyIHM7Ci0gICAgcy5hcHBlbmQoIlsgIik7Ci0gICAg
Zm9yIChhdXRvIHJhbmdlIDogcmFuZ2VzKQotICAgICAgICBzLmFwcGVuZChTdHJpbmc6OmZvcm1h
dCgiKCUuMWYsICUuMWYpICIsIHJhbmdlLnN0YXJ0LnRvRmxvYXQoKSwgcmFuZ2UuZW5kLnRvRmxv
YXQoKSkpOwotICAgIHMuYXBwZW5kKCJdIik7Ci0gICAgcmV0dXJuIHMudG9TdHJpbmcoKTsKKyAg
ICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJbICIp
OworICAgIGZvciAoYXV0byYgcmFuZ2UgOiByYW5nZXMpIHsKKyAgICAgICAgYnVpbGRlci5hcHBl
bmQoJygnKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRGaXhlZFdpZHRoTnVtYmVyKHJhbmdlLnN0
YXJ0LnRvRmxvYXQoKSwgMSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsK
KyAgICAgICAgYnVpbGRlci5hcHBlbmRGaXhlZFdpZHRoTnVtYmVyKHJhbmdlLmVuZC50b0Zsb2F0
KCksIDEpOworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIikgIik7CisgICAgfQorICAg
IGJ1aWxkZXIuYXBwZW5kKCddJyk7CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0K
IAogc3RhdGljIFN0cmluZyBzbmFwUG9ydE9yQXJlYVRvU3RyaW5nKGNvbnN0IExheW91dFJlY3Qm
IHJlY3QpCiB7Ci0gICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJ7eyUuMWYsICUuMWZ9IHslLjFm
LCAlLjFmfX0iLCByZWN0LngoKS50b0Zsb2F0KCksIHJlY3QueSgpLnRvRmxvYXQoKSwgcmVjdC53
aWR0aCgpLnRvRmxvYXQoKSwgcmVjdC5oZWlnaHQoKS50b0Zsb2F0KCkpOworICAgIHJldHVybiBt
YWtlU3RyaW5nKCJ7eyIsCisgICAgICAgIEZvcm1hdHRlZE51bWJlcjo6Zml4ZWRXaWR0aChyZWN0
LngoKSwgMSksICIsICIsCisgICAgICAgIEZvcm1hdHRlZE51bWJlcjo6Zml4ZWRXaWR0aChyZWN0
LnkoKSwgMSksICJ9IHsiLAorICAgICAgICBGb3JtYXR0ZWROdW1iZXI6OmZpeGVkV2lkdGgocmVj
dC53aWR0aCgpLCAxKSwgIiwgIiwKKyAgICAgICAgRm9ybWF0dGVkTnVtYmVyOjpmaXhlZFdpZHRo
KHJlY3QuaGVpZ2h0KCksIDEpLCAifX0iKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vVGltaW5nRnVuY3Rpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL1RpbWluZ0Z1bmN0aW9uLmNwcAppbmRleCA5NDA3
MzQyMDY1ZmU5ZmM1MjhkNTQ1NzQ0NDYzNzZhMWQ0ZDdkN2RjLi40ODc5MmM5YjRjN2VjMjVmM2Vm
Yzg2ZWI1OWFhZDE1ZTZjYTA0MjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hbmltYXRpb24vVGltaW5nRnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2FuaW1hdGlvbi9UaW1pbmdGdW5jdGlvbi5jcHAKQEAgLTE3Niw3ICsxNzYsNyBAQCBTdHJp
bmcgVGltaW5nRnVuY3Rpb246OmNzc1RleHQoKSBjb25zdAogICAgICAgICAgICAgcmV0dXJuICJl
YXNlLW91dCI7CiAgICAgICAgIGlmIChmdW5jdGlvbi54MSgpID09IDAuNDIgJiYgIWZ1bmN0aW9u
LnkxKCkgJiYgZnVuY3Rpb24ueDIoKSA9PSAwLjU4ICYmIGZ1bmN0aW9uLnkyKCkgPT0gMS4wKQog
ICAgICAgICAgICAgcmV0dXJuICJlYXNlLWluLW91dCI7Ci0gICAgICAgIHJldHVybiBTdHJpbmc6
OmZvcm1hdCgiY3ViaWMtYmV6aWVyKCVnLCAlZywgJWcsICVnKSIsIGZ1bmN0aW9uLngxKCksIGZ1
bmN0aW9uLnkxKCksIGZ1bmN0aW9uLngyKCksIGZ1bmN0aW9uLnkyKCkpOworICAgICAgICByZXR1
cm4gbWFrZVN0cmluZygiY3ViaWMtYmV6aWVyKCIsIGZ1bmN0aW9uLngxKCksICIsICIsIGZ1bmN0
aW9uLnkxKCksICIsICIsIGZ1bmN0aW9uLngyKCksICIsICIsIGZ1bmN0aW9uLnkyKCksICcpJyk7
CiAgICAgfQogCiAgICAgaWYgKG1fdHlwZSA9PSBUaW1pbmdGdW5jdGlvbjo6U3RlcHNGdW5jdGlv
bikgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvS2V5RXZlbnRD
b2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0tleUV2ZW50Q29jb2EubW0K
aW5kZXggMDVjMGE4Y2U3MDgyMjdjM2Y1NGIwOGM4NzYxODY1MzgyMzIyYzY3ZC4uZDEwMTJmZTA2
YmU0Y2M1ZTNjMjJmZjVlZTNjNzE5NDNiMWNjODAyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvS2V5RXZlbnRDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9LZXlFdmVudENvY29hLm1tCkBAIC00OTYsNyArNDk2LDEyIEBAIFN0cmlu
ZyBrZXlJZGVudGlmaWVyRm9yQ2hhckNvZGUodW5pY2hhciBjaGFyQ29kZSkKICAgICAgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgdXNlIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSB2ZW5kb3It
YXJlYSBVbmljb2RlIHZhbHVlcyBmb3IgdGhlIGFib3ZlIGtleXMuCiAgICAgICAgICAgICAvLyBG
b3Igbm93LCBqdXN0IGZhbGwgdGhyb3VnaCB0byB0aGUgZGVmYXVsdC4KICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiVSslMDRYIiwgdG9BU0NJSVVw
cGVyKGNoYXJDb2RlKSk7CisgICAgICAgICAgICBVQ2hhciBjb2RlVW5pdCA9IHRvQVNDSUlVcHBl
cihjaGFyQ29kZSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiVSsiLAorICAgICAg
ICAgICAgICAgIHVwcGVyTmliYmxlVG9BU0NJSUhleERpZ2l0KGNvZGVVbml0ID4+IDgpLAorICAg
ICAgICAgICAgICAgIGxvd2VyTmliYmxlVG9BU0NJSUhleERpZ2l0KGNvZGVVbml0ID4+IDgpLAor
ICAgICAgICAgICAgICAgIHVwcGVyTmliYmxlVG9BU0NJSUhleERpZ2l0KGNvZGVVbml0KSwKKyAg
ICAgICAgICAgICAgICBsb3dlck5pYmJsZVRvQVNDSUlIZXhEaWdpdChjb2RlVW5pdCkpOwogICAg
IH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCmluZGV4
IDhkYmQzNmM1NGQ2NWY1MTUwMTcwYTc4YTU1ZDExNTRlZTViZWFlYjcuLjhiMTBhNzI2OWRhY2U1
MmE1ZGY4NmMyZWQ0Y2UyYjQ5NWVlZGVmODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvci5jcHAKQEAgLTM5MSw5ICszOTEsMTcgQEAgU3RyaW5nIENvbG9yOjpjc3NU
ZXh0KCkgY29uc3QKIFN0cmluZyBDb2xvcjo6bmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSBjb25z
dAogewogICAgIC8vIEZJWE1FOiBIYW5kbGUgRXh0ZW5kZWRDb2xvcnMuCi0gICAgaWYgKGFscGhh
KCkgPCAweEZGKQotICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiMlMDJYJTAyWCUwMlgl
MDJYIiwgcmVkKCksIGdyZWVuKCksIGJsdWUoKSwgYWxwaGEoKSk7Ci0gICAgcmV0dXJuIFN0cmlu
Zzo6Zm9ybWF0KCIjJTAyWCUwMlglMDJYIiwgcmVkKCksIGdyZWVuKCksIGJsdWUoKSk7CisgICAg
aWYgKGFscGhhKCkgPCAweEZGKSB7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywKKyAg
ICAgICAgICAgIHVwcGVyTmliYmxlVG9BU0NJSUhleERpZ2l0KHJlZCgpKSwgbG93ZXJOaWJibGVU
b0FTQ0lJSGV4RGlnaXQocmVkKCkpLAorICAgICAgICAgICAgdXBwZXJOaWJibGVUb0FTQ0lJSGV4
RGlnaXQoZ3JlZW4oKSksIGxvd2VyTmliYmxlVG9BU0NJSUhleERpZ2l0KGdyZWVuKCkpLAorICAg
ICAgICAgICAgdXBwZXJOaWJibGVUb0FTQ0lJSGV4RGlnaXQoYmx1ZSgpKSwgbG93ZXJOaWJibGVU
b0FTQ0lJSGV4RGlnaXQoYmx1ZSgpKSwKKyAgICAgICAgICAgIHVwcGVyTmliYmxlVG9BU0NJSUhl
eERpZ2l0KGFscGhhKCkpLCBsb3dlck5pYmJsZVRvQVNDSUlIZXhEaWdpdChhbHBoYSgpKSk7Cisg
ICAgfQorICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywKKyAgICAgICAgdXBwZXJOaWJibGVUb0FT
Q0lJSGV4RGlnaXQocmVkKCkpLCBsb3dlck5pYmJsZVRvQVNDSUlIZXhEaWdpdChyZWQoKSksCisg
ICAgICAgIHVwcGVyTmliYmxlVG9BU0NJSUhleERpZ2l0KGdyZWVuKCkpLCBsb3dlck5pYmJsZVRv
QVNDSUlIZXhEaWdpdChncmVlbigpKSwKKyAgICAgICAgdXBwZXJOaWJibGVUb0FTQ0lJSGV4RGln
aXQoYmx1ZSgpKSwgbG93ZXJOaWJibGVUb0FTQ0lJSGV4RGlnaXQoYmx1ZSgpKSk7CiB9CiAKIENv
bG9yIENvbG9yOjpsaWdodCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCmluZGV4IDRlNzMzNmUyYzgx
MjFmYzU0ZjllMjBkNjI3MjM1MjRiNTNhYmMwZDIuLjBiM2QwOGUzYzgxMDczOWVlMDIxMTA0ZDRl
NTQwYjJhYmJhNWQzMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2sv
TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCkBAIC0zNTgsMTEgKzM1OCwxMSBAQCB2
b2lkIE1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpkcmF3VGV4dChHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCiAgICAgY29udGV4dC5kcmF3VGV4dCh0aW1lRm9udCwgVGV4dFJ1bigoU3RyaW5nVmll
dyhzdHJpbmcpKSksIHRpbWVMb2NhdGlvbik7CiAKICAgICBGbG9hdFBvaW50IHN0YXRzTG9jYXRp
b24oY2FwdHVyZVNpemUud2lkdGgoKSAqIC40NSwgY2FwdHVyZVNpemUuaGVpZ2h0KCkgKiAuNzUp
OwotICAgIHN0cmluZyA9IFN0cmluZzo6Zm9ybWF0KCJSZXF1ZXN0ZWQgZnJhbWUgcmF0ZTogJS4x
ZiBmcHMiLCBmcmFtZVJhdGUoKSk7CisgICAgc3RyaW5nID0gbWFrZVN0cmluZygiUmVxdWVzdGVk
IGZyYW1lIHJhdGU6ICIsIEZvcm1hdHRlZE51bWJlcjo6Zml4ZWRXaWR0aChmcmFtZVJhdGUoKSwg
MSksICIgZnBzIik7CiAgICAgY29udGV4dC5kcmF3VGV4dChzdGF0c0ZvbnQsIFRleHRSdW4oKFN0
cmluZ1ZpZXcoc3RyaW5nKSkpLCBzdGF0c0xvY2F0aW9uKTsKIAogICAgIHN0YXRzTG9jYXRpb24u
bW92ZSgwLCBtX3N0YXRzRm9udFNpemUpOwotICAgIHN0cmluZyA9IFN0cmluZzo6Zm9ybWF0KCJP
YnNlcnZlZCBmcmFtZSByYXRlOiAlLjFmIGZwcyIsIG9ic2VydmVkRnJhbWVSYXRlKCkpOworICAg
IHN0cmluZyA9IG1ha2VTdHJpbmcoIk9ic2VydmVkIGZyYW1lIHJhdGU6ICIsIEZvcm1hdHRlZE51
bWJlcjo6Zml4ZWRXaWR0aChvYnNlcnZlZEZyYW1lUmF0ZSgpLCAxKSwgIiBmcHMiKTsKICAgICBj
b250ZXh0LmRyYXdUZXh0KHN0YXRzRm9udCwgVGV4dFJ1bigoU3RyaW5nVmlldyhzdHJpbmcpKSks
IHN0YXRzTG9jYXRpb24pOwogCiAgICAgYXV0byBzaXplID0gdGhpcy0+c2l6ZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybUxvY2FsZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtTG9jYWxlLmNwcAppbmRleCBjOWRh
MmQ2YWZhZjVjNmI5NGI2YThkNTI1ZGMyOGE1MGYzYzFiYjhlLi40ZDc1ZWEwYmUyOWFmNGVkMDBm
N2JmNjE4YzVhMmE5N2I3YTBhYTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1BsYXRmb3JtTG9jYWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1BsYXRmb3JtTG9jYWxlLmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIHZvaWQgRGF0ZVRpbWVT
dHJpbmdCdWlsZGVyOjp2aXNpdEZpZWxkKERhdGVUaW1lRm9ybWF0OjpGaWVsZFR5cGUgZmllbGRU
eXBlLCBpbnQKICAgICAgICAgICAgIGFwcGVuZE51bWJlcihtX2RhdGUuc2Vjb25kKCksIG51bWJl
ck9mUGF0dGVybkNoYXJhY3RlcnMpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGRvdWJs
ZSBzZWNvbmQgPSBtX2RhdGUuc2Vjb25kKCkgKyBtX2RhdGUubWlsbGlzZWNvbmQoKSAvIDEwMDAu
MDsKLSAgICAgICAgICAgIFN0cmluZyB6ZXJvUGFkZGVkU2Vjb25kU3RyaW5nID0gemVyb1BhZFN0
cmluZyhTdHJpbmc6OmZvcm1hdCgiJS4wM2YiLCBzZWNvbmQpLCBudW1iZXJPZlBhdHRlcm5DaGFy
YWN0ZXJzICsgNCk7CisgICAgICAgICAgICBTdHJpbmcgemVyb1BhZGRlZFNlY29uZFN0cmluZyA9
IHplcm9QYWRTdHJpbmcoU3RyaW5nOjpudW1iZXJUb1N0cmluZ0ZpeGVkV2lkdGgoc2Vjb25kLCAz
KSwgbnVtYmVyT2ZQYXR0ZXJuQ2hhcmFjdGVycyArIDQpOwogICAgICAgICAgICAgbV9idWlsZGVy
LmFwcGVuZChtX2xvY2FsaXplci5jb252ZXJ0VG9Mb2NhbGl6ZWROdW1iZXIoemVyb1BhZGRlZFNl
Y29uZFN0cmluZykpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9WaWV3R2VzdHVyZUNvbnRyb2xsZXIuY3BwCmlu
ZGV4IGQ0ZmFhOTNlM2Q5MTNjYWVmYzQwY2ExN2ZlOGFiNGI5MzNiZTY2YjUuLmQ4OWY2ZDhkY2Zk
MTdiZDhlNGI3MTk0NDQ5N2IxOTQzMjM5MGE2MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvVmlld0dlc3R1cmVDb250cm9sbGVyLmNwcApAQCAtMzYsNiAr
MzYsNyBAQAogI2ltcG9ydCA8d3RmL01hdGhFeHRyYXMuaD4KICNpbXBvcnQgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2ltcG9ydCA8
d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0zNjYsNyArMzY3LDcgQEAgdm9pZCBWaWV3
R2VzdHVyZUNvbnRyb2xsZXI6OlNuYXBzaG90UmVtb3ZhbFRyYWNrZXI6OndhdGNoZG9nVGltZXJG
aXJlZCgpCiAKIHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpTbmFwc2hvdFJlbW92YWxUcmFj
a2VyOjpzdGFydFdhdGNoZG9nKFNlY29uZHMgZHVyYXRpb24pCiB7Ci0gICAgbG9nKFN0cmluZzo6
Zm9ybWF0KCIocmUpc3RhcnRlZCB3YXRjaGRvZyB0aW1lciBmb3IgJS4xZiBzZWNvbmRzIiwgZHVy
YXRpb24uc2Vjb25kcygpKSk7CisgICAgbG9nKG1ha2VTdHJpbmcoIihyZSlzdGFydGVkIHdhdGNo
ZG9nIHRpbWVyIGZvciAiLCBGb3JtYXR0ZWROdW1iZXI6OmZpeGVkV2lkdGgoZHVyYXRpb24uc2Vj
b25kcygpLCAxKSwgIiBzZWNvbmRzIikpOwogICAgIG1fd2F0Y2hkb2dUaW1lci5zdGFydE9uZVNo
b3QoZHVyYXRpb24pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3IubW0gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9Db2NvYS9Mb2NhbEF1dGhlbnRpY2F0b3Iu
bW0KaW5kZXggODVkODFmYzU4ZDRmYzhiNDdkNDRmNTg2OTM3ODE5YjFjOTIyM2Y2Zi4uOGRkZTc4
NjAxYzk4NTI4ODRmN2ZlNDIzZDUzNWRjMmFmNDU5YmFmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQ29jb2EvTG9jYWxBdXRoZW50aWNhdG9y
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0NvY29h
L0xvY2FsQXV0aGVudGljYXRvci5tbQpAQCAtNDcyLDYgKzQ3Miw3IEBAIHZvaWQgTG9jYWxBdXRo
ZW50aWNhdG9yOjpnZXRBc3NlcnRpb24oKQogCiAgICAgICAgIHdlYWtUaGlzLT5jb250aW51ZUdl
dEFzc2VydGlvbkFmdGVyVXNlckNvbnNlbnRlZChjb25zZW50LCBjb250ZXh0LCBjcmVkZW50aWFs
SWQsIHVzZXJoYW5kbGUpOwogICAgIH07CisgICAgLy8gRklYTUU6IEkgZG9uJ3QgdGhpbmsgdGhh
dCBmb3JtYXR0aW5nIHdpdGggJXMgYW5kIHBhc3NpbmcgYW4gTlNPYmplY3QgZnJvbSBhIGRpY3Rp
b25hcnkgd2lsbCB3b3JrLgogICAgIG1fY29ubmVjdGlvbi0+Z2V0VXNlckNvbnNlbnQoCiAgICAg
ICAgIFN0cmluZzo6Zm9ybWF0KCJMb2cgaW50byAlcyB3aXRoICVzLiIsIHJlcXVlc3REYXRhKCku
cmVxdWVzdE9wdGlvbnMucnBJZC51dGY4KCkuZGF0YSgpLCBzZWxlY3RlZENyZWRlbnRpYWxBdHRy
aWJ1dGVzWyhpZClrU2VjQXR0ckFwcGxpY2F0aW9uVGFnXSksCiAgICAgICAgIChfX2JyaWRnZSBT
ZWNBY2Nlc3NDb250cm9sUmVmKXNlbGVjdGVkQ3JlZGVudGlhbEF0dHJpYnV0ZXNbKGlkKWtTZWNB
dHRyQWNjZXNzQ29udHJvbF0sCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggZTViOTMzOWE3NjkxZWMzZTRjYmYyZjk1N2VjMTlmZjVhMGNiY2VjMS4u
NzkzNzNhNDliMzVmZDEzMzJhY2JiMDYxY2E2NzM5OGE0ZGM5OWI5MCAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDE4
LTEyLTE2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBDb252ZXJ0
IGFkZGl0aW9uYWwgU3RyaW5nOjpmb3JtYXQgY2xpZW50cyB0byBhbHRlcm5hdGl2ZSBhcHByb2Fj
aGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTI3
NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpvcmlnaW5V
c2VyVmlzaWJsZU5hbWUpOiBVc2UgbWFrZVN0cmluZyBhbmQgcmVkdWNlIHRoZSB1c2Ugb2Ygc3Rk
OjpzdHJpbmcKKyAgICAgICAgYXMgYW4gaW50ZXJtZWRpYXRlIGluIGNvZGUgdGhhdCB1bHRpbWF0
ZWx5IGNvbnN0cnVjdHMgYSBXVEY6OlN0cmluZy4KKyAgICAgICAgKFdUUjo6dXNlck1lZGlhT3Jp
Z2luSGFzaCk6IFVzZSBtYWtlU3RyaW5nLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6
ZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEpOiBNb3JlIG9mIHRoZSBzYW1lLgorICAgICAg
ICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6ZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KTogRGl0dG8u
CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3Qp
OiBEaXR0by4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZFVwZGF0ZUhpc3RvcnlU
aXRsZSk6IERpdHRvLgorCiAyMDE4LTEyLTE2ICBBZHJpYW4gUGVyZXogZGUgQ2FzdHJvICA8YXBl
cmV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXggYWZ0ZXIgcjIz
OTI1MwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAppbmRleCBhOTdh
YzllZWVkNTU2OGJlZmM0MmQyY2IyMTkzMjc5ZWEzMDJhYmVjLi40Nzk3NTFlZDQxMDYxZjIwZTE2
YjQxMDI1ZWEwM2VhYzM3MzYzMjI5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmNwcApAQCAtMjI2MywxNyArMjI2MywxOCBAQCBzdGF0aWMgU3RyaW5nIG9yaWdpblVz
ZXJWaXNpYmxlTmFtZShXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbikKICAgICBpZiAoIW9yaWdp
bikKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAgICBzdGQ6OnN0cmluZyBob3N0
ID0gdG9TVEQoYWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weUhvc3Qob3JpZ2luKSkpLmNfc3Ry
KCk7Ci0gICAgc3RkOjpzdHJpbmcgcHJvdG9jb2wgPSB0b1NURChhZG9wdFdLKFdLU2VjdXJpdHlP
cmlnaW5Db3B5UHJvdG9jb2wob3JpZ2luKSkpLmNfc3RyKCk7CisgICAgYXV0byBob3N0ID0gdG9X
VEZTdHJpbmcoYWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weUhvc3Qob3JpZ2luKSkpOworICAg
IGF1dG8gcHJvdG9jb2wgPSB0b1dURlN0cmluZyhhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5
UHJvdG9jb2wob3JpZ2luKSkpOwogCi0gICAgaWYgKCFob3N0Lmxlbmd0aCgpIHx8ICFwcm90b2Nv
bC5sZW5ndGgoKSkKKyAgICBpZiAoaG9zdC5pc0VtcHR5KCkgfHwgcHJvdG9jb2wuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAotICAgIHVuc2lnbmVkIHNob3J0IHBv
cnQgPSBXS1NlY3VyaXR5T3JpZ2luR2V0UG9ydChvcmlnaW4pOwotICAgIGlmIChwb3J0KQotICAg
ICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiVzOi8vJXM6JWQiLCBwcm90b2NvbC5jX3N0cigp
LCBob3N0LmNfc3RyKCksIHBvcnQpOworICAgIGlmIChhdXRvIHBvcnQgPSBXS1NlY3VyaXR5T3Jp
Z2luR2V0UG9ydChvcmlnaW4pKSB7CisgICAgICAgIC8vIEZJWE1FOiBVc2Ugc3RhdGljX2Nhc3Q8
aW50PiB0byB3b3JrIGFyb3VuZCBtYWtlU3RyaW5nJ3MgbGltaXRhdGlvbiB3aGVuIGZvcm1hdHRp
bmcgbnVtYmVycyB0aGF0IGFyZSB0aGUgc2FtZSB0eXBlIGFzIFVDaGFyLgorICAgICAgICByZXR1
cm4gbWFrZVN0cmluZyhwcm90b2NvbCwgIjovLyIsIGhvc3QsICc6Jywgc3RhdGljX2Nhc3Q8aW50
Pihwb3J0KSk7CisgICAgfQogCi0gICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlczovLyVzIiwg
cHJvdG9jb2wuY19zdHIoKSwgaG9zdC5jX3N0cigpKTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhw
cm90b2NvbCwgIjovLyIsIGhvc3QpOwogfQogCiBzdGF0aWMgU3RyaW5nIHVzZXJNZWRpYU9yaWdp
bkhhc2goV0tTZWN1cml0eU9yaWdpblJlZiB1c2VyTWVkaWFEb2N1bWVudE9yaWdpbiwgV0tTZWN1
cml0eU9yaWdpblJlZiB0b3BMZXZlbERvY3VtZW50T3JpZ2luKQpAQCAtMjI4NCw3ICsyMjg1LDcg
QEAgc3RhdGljIFN0cmluZyB1c2VyTWVkaWFPcmlnaW5IYXNoKFdLU2VjdXJpdHlPcmlnaW5SZWYg
dXNlck1lZGlhRG9jdW1lbnRPcmlnaW4sIFcKICAgICBpZiAodG9wTGV2ZWxEb2N1bWVudE9yaWdp
blN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB1c2VyTWVkaWFEb2N1bWVudE9yaWdp
blN0cmluZzsKIAotICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJXMtJXMiLCB1c2VyTWVkaWFE
b2N1bWVudE9yaWdpblN0cmluZy51dGY4KCkuZGF0YSgpLCB0b3BMZXZlbERvY3VtZW50T3JpZ2lu
U3RyaW5nLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKHVzZXJNZWRpYURv
Y3VtZW50T3JpZ2luU3RyaW5nLCAnLScsIHRvcExldmVsRG9jdW1lbnRPcmlnaW5TdHJpbmcpOwog
fQogCiBzdGF0aWMgU3RyaW5nIHVzZXJNZWRpYU9yaWdpbkhhc2goV0tTdHJpbmdSZWYgdXNlck1l
ZGlhRG9jdW1lbnRPcmlnaW5TdHJpbmcsIFdLU3RyaW5nUmVmIHRvcExldmVsRG9jdW1lbnRPcmln
aW5TdHJpbmcpCkBAIC0yNTUyLDE3ICsyNTUzLDE3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRp
ZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKFdLTmF2aWdhdGlvbkRhdGFSZWYgbmF2aWdhdGlv
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFVSTAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVm
PiB1cmxXSyA9IGFkb3B0V0soV0tOYXZpZ2F0aW9uRGF0YUNvcHlVUkwobmF2aWdhdGlvbkRhdGEp
KTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdXJsU3RyaW5nV0sgPSBhZG9wdFdLKFdL
VVJMQ29weVN0cmluZyh1cmxXSy5nZXQoKSkpOworICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS05h
dmlnYXRpb25EYXRhQ29weVVSTChuYXZpZ2F0aW9uRGF0YSkpOworICAgIGF1dG8gdXJsU3RyaW5n
ID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsLmdldCgpKSkpOwogICAg
IC8vIFRpdGxlCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRpdGxlV0sgPSBhZG9wdFdL
KFdLTmF2aWdhdGlvbkRhdGFDb3B5VGl0bGUobmF2aWdhdGlvbkRhdGEpKTsKKyAgICBhdXRvIHRp
dGxlID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS05hdmlnYXRpb25EYXRhQ29weVRpdGxlKG5hdmln
YXRpb25EYXRhKSkpOwogICAgIC8vIEhUVFAgbWV0aG9kCi0gICAgV0tSZXRhaW5QdHI8V0tVUkxS
ZXF1ZXN0UmVmPiByZXF1ZXN0V0sgPSBhZG9wdFdLKFdLTmF2aWdhdGlvbkRhdGFDb3B5T3JpZ2lu
YWxSZXF1ZXN0KG5hdmlnYXRpb25EYXRhKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1ldGhvZFdLID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5SFRUUE1ldGhvZChyZXF1ZXN0V0su
Z2V0KCkpKTsKKyAgICBhdXRvIHJlcXVlc3QgPSBhZG9wdFdLKFdLTmF2aWdhdGlvbkRhdGFDb3B5
T3JpZ2luYWxSZXF1ZXN0KG5hdmlnYXRpb25EYXRhKSk7CisgICAgYXV0byBtZXRob2QgPSB0b1dU
RlN0cmluZyhhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlIVFRQTWV0aG9kKHJlcXVlc3QuZ2V0KCkp
KSk7CiAKICAgICAvLyBGSVhNRTogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIG5hdmlnYXRpb24gd2Fz
IHN1Y2Nlc3NmdWwgLyBhIGNsaWVudCByZWRpcmVjdCByYXRoZXIgdGhhbiBoYXJkLWNvZGluZyB0
aGUgbWVzc2FnZSBoZXJlLgotICAgIG1fY3VycmVudEludm9jYXRpb24tPm91dHB1dFRleHQoU3Ry
aW5nOjpmb3JtYXQoIldlYlZpZXcgbmF2aWdhdGVkIHRvIHVybCBcIiVzXCIgd2l0aCB0aXRsZSBc
IiVzXCIgd2l0aCBIVFRQIGVxdWl2YWxlbnQgbWV0aG9kIFwiJXNcIi4gIFRoZSBuYXZpZ2F0aW9u
IHdhcyBzdWNjZXNzZnVsIGFuZCB3YXMgbm90IGEgY2xpZW50IHJlZGlyZWN0LlxuIiwKLSAgICAg
ICAgdG9TVEQodXJsU3RyaW5nV0spLmNfc3RyKCksIHRvU1REKHRpdGxlV0spLmNfc3RyKCksIHRv
U1REKG1ldGhvZFdLKS5jX3N0cigpKSk7CisgICAgbV9jdXJyZW50SW52b2NhdGlvbi0+b3V0cHV0
VGV4dChtYWtlU3RyaW5nKCJXZWJWaWV3IG5hdmlnYXRlZCB0byB1cmwgXCIiLCB1cmxTdHJpbmcs
ICJcIiB3aXRoIHRpdGxlIFwiIiwgdGl0bGUsICJcIiB3aXRoIEhUVFAgZXF1aXZhbGVudCBtZXRo
b2QgXCIiLCBtZXRob2QsCisgICAgICAgICJcIi4gIFRoZSBuYXZpZ2F0aW9uIHdhcyBzdWNjZXNz
ZnVsIGFuZCB3YXMgbm90IGEgY2xpZW50IHJlZGlyZWN0LlxuIikpOwogfQogCiB2b2lkIFRlc3RD
b250cm9sbGVyOjpkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QoV0tDb250ZXh0UmVmLCBXS1BhZ2VS
ZWYsIFdLVVJMUmVmIHNvdXJjZVVSTCwgV0tVUkxSZWYgZGVzdGluYXRpb25VUkwsIFdLRnJhbWVS
ZWYgZnJhbWUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCkBAIC0yNTc4LDEwICsyNTc5LDEwIEBA
IHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdChXS1VSTFJlZiBz
b3VyY2VVUkwsIFdLVVJMUmVmIGRlc3RpCiAgICAgaWYgKCFtX3Nob3VsZExvZ0hpc3RvcnlDbGll
bnRDYWxsYmFja3MpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBzb3VyY2VTdHJpbmdXSyA9IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHNvdXJjZVVSTCkp
OwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBkZXN0aW5hdGlvblN0cmluZ1dLID0gYWRv
cHRXSyhXS1VSTENvcHlTdHJpbmcoZGVzdGluYXRpb25VUkwpKTsKKyAgICBhdXRvIHNvdXJjZSA9
IHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHNvdXJjZVVSTCkpKTsKKyAgICBh
dXRvIGRlc3RpbmF0aW9uID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcoZGVz
dGluYXRpb25VUkwpKSk7CiAKLSAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5vdXRwdXRUZXh0KFN0
cmluZzo6Zm9ybWF0KCJXZWJWaWV3IHBlcmZvcm1lZCBhIGNsaWVudCByZWRpcmVjdCBmcm9tIFwi
JXNcIiB0byBcIiVzXCIuXG4iLCB0b1NURChzb3VyY2VTdHJpbmdXSykuY19zdHIoKSwgdG9TVEQo
ZGVzdGluYXRpb25TdHJpbmdXSykuY19zdHIoKSkpOworICAgIG1fY3VycmVudEludm9jYXRpb24t
Pm91dHB1dFRleHQobWFrZVN0cmluZygiV2ViVmlldyBwZXJmb3JtZWQgYSBjbGllbnQgcmVkaXJl
Y3QgZnJvbSBcIiIsIHNvdXJjZSwgIlwiIHRvIFwiIiwgZGVzdGluYXRpb24sICJcIi5cbiIpKTsK
IH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KFdLQ29u
dGV4dFJlZiwgV0tQYWdlUmVmLCBXS1VSTFJlZiBzb3VyY2VVUkwsIFdLVVJMUmVmIGRlc3RpbmF0
aW9uVVJMLCBXS0ZyYW1lUmVmIGZyYW1lLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQpAQCAtMjU5
NywxMCArMjU5OCwxMCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRQZXJmb3JtU2VydmVyUmVk
aXJlY3QoV0tVUkxSZWYgc291cmNlVVJMLCBXS1VSTFJlZiBkZXN0aQogICAgIGlmICghbV9zaG91
bGRMb2dIaXN0b3J5Q2xpZW50Q2FsbGJhY2tzKQogICAgICAgICByZXR1cm47CiAKLSAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gc291cmNlU3RyaW5nV0sgPSBhZG9wdFdLKFdLVVJMQ29weVN0
cmluZyhzb3VyY2VVUkwpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZGVzdGluYXRp
b25TdHJpbmdXSyA9IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKGRlc3RpbmF0aW9uVVJMKSk7Cisg
ICAgYXV0byBzb3VyY2UgPSB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyhzb3Vy
Y2VVUkwpKSk7CisgICAgYXV0byBkZXN0aW5hdGlvbiA9IHRvV1RGU3RyaW5nKGFkb3B0V0soV0tV
UkxDb3B5U3RyaW5nKGRlc3RpbmF0aW9uVVJMKSkpOwogCi0gICAgbV9jdXJyZW50SW52b2NhdGlv
bi0+b3V0cHV0VGV4dChTdHJpbmc6OmZvcm1hdCgiV2ViVmlldyBwZXJmb3JtZWQgYSBzZXJ2ZXIg
cmVkaXJlY3QgZnJvbSBcIiVzXCIgdG8gXCIlc1wiLlxuIiwgdG9TVEQoc291cmNlU3RyaW5nV0sp
LmNfc3RyKCksIHRvU1REKGRlc3RpbmF0aW9uU3RyaW5nV0spLmNfc3RyKCkpKTsKKyAgICBtX2N1
cnJlbnRJbnZvY2F0aW9uLT5vdXRwdXRUZXh0KG1ha2VTdHJpbmcoIldlYlZpZXcgcGVyZm9ybWVk
IGEgc2VydmVyIHJlZGlyZWN0IGZyb20gXCIiLCBzb3VyY2UsICJcIiB0byBcIiIsIGRlc3RpbmF0
aW9uLCAiXCIuXG4iKSk7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFVwZGF0ZUhpc3Rv
cnlUaXRsZShXS0NvbnRleHRSZWYsIFdLUGFnZVJlZiwgV0tTdHJpbmdSZWYgdGl0bGUsIFdLVVJM
UmVmIFVSTCwgV0tGcmFtZVJlZiBmcmFtZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTI2
MTYsOCArMjYxNyw4IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFVwZGF0ZUhpc3RvcnlUaXRs
ZShXS1N0cmluZ1JlZiB0aXRsZSwgV0tVUkxSZWYgVVJMLCBXS0ZyCiAgICAgaWYgKCFtX3Nob3Vs
ZExvZ0hpc3RvcnlDbGllbnRDYWxsYmFja3MpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxTdHJpbmdXSyhBZG9wdFdLLCBXS1VSTENvcHlTdHJpbmco
VVJMKSk7Ci0gICAgbV9jdXJyZW50SW52b2NhdGlvbi0+b3V0cHV0VGV4dChTdHJpbmc6OmZvcm1h
dCgiV2ViVmlldyB1cGRhdGVkIHRoZSB0aXRsZSBmb3IgaGlzdG9yeSBVUkwgXCIlc1wiIHRvIFwi
JXNcIi5cbiIsIHRvU1REKHVybFN0cmluZ1dLKS5jX3N0cigpLCB0b1NURCh0aXRsZSkuY19zdHIo
KSkpOworICAgIGF1dG8gdXJsU3RyaW5nID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlT
dHJpbmcoVVJMKSkpOworICAgIG1fY3VycmVudEludm9jYXRpb24tPm91dHB1dFRleHQobWFrZVN0
cmluZygiV2ViVmlldyB1cGRhdGVkIHRoZSB0aXRsZSBmb3IgaGlzdG9yeSBVUkwgXCIiLCB1cmxT
dHJpbmcsICJcIiB0byBcIiIsIHRvV1RGU3RyaW5nKHRpdGxlKSwgIlwiLlxuIikpOwogfQogCiB2
b2lkIFRlc3RDb250cm9sbGVyOjpzZXROYXZpZ2F0aW9uR2VzdHVyZXNFbmFibGVkKGJvb2wgdmFs
dWUpCg==
</data>
<flag name="review"
          id="374318"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>