<?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>222401</bug_id>
          
          <creation_ts>2021-02-24 20:15:03 -0800</creation_ts>
          <short_desc>WKRemoteObjectCoder should be able to handle NSErrors from TLS failures</short_desc>
          <delta_ts>2021-03-08 16:31:23 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>222954</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1733193</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-24 20:15:03 -0800</bug_when>
    <thetext>WKRemoteObjectCoder should be able to handle NSErrors from TLS failures</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733195</commentid>
    <comment_count>1</comment_count>
      <attachid>421496</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-24 20:20:41 -0800</bug_when>
    <thetext>Created attachment 421496
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733196</commentid>
    <comment_count>2</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-24 20:20:44 -0800</bug_when>
    <thetext>&lt;rdar://problem/72103865&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1735040</commentid>
    <comment_count>3</comment_count>
      <attachid>421496</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-02 14:44:00 -0800</bug_when>
    <thetext>Comment on attachment 421496
Patch

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

&gt; Source/WebKit/Shared/API/Cocoa/WKRemoteObjectCoder.mm:317
&gt; +    return [result autorelease];

I spent a lot of time getting rid of all the explicit [objc autorelease] in our internal code. Please use RetainPtr&lt;&gt;.

&gt; Source/WebKit/Shared/API/Cocoa/WKRemoteObjectCoder.mm:343
&gt; +    return (NSData *)data.autorelease();

I cc&apos;d Darin because I seem to remember that this sort of things (casting from CF to NS and autoreleasing) makes ARC transition complicated.

Overall, we should be using RetainPtr&lt;&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1735136</commentid>
    <comment_count>4</comment_count>
      <attachid>421496</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-02 17:14:02 -0800</bug_when>
    <thetext>Comment on attachment 421496
Patch

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

I suggest using a lot more RetainPtr.

&gt; Source/WebKit/Shared/API/Cocoa/WKRemoteObjectCoder.mm:303
&gt; +static id decodeObjCObject(WKRemoteObjectDecoder *decoder, Class objectClass)

This should return a RetainPtr&lt;id&gt;.

&gt; Source/WebKit/Shared/API/Cocoa/WKRemoteObjectCoder.mm:322
&gt; +NSString *peerCertificateKey = @&quot;NSErrorPeerCertificateChainKey&quot;;
&gt; +NSString *peerTrustKey = @&quot;NSURLErrorFailingURLPeerTrustErrorKey&quot;;
&gt; +NSString *clientCertificateKey = @&quot;NSErrorClientCertificateChainKey&quot;;

Should these have static constexpr in front of them?

&gt; Source/WebKit/Shared/API/Cocoa/WKRemoteObjectCoder.mm:324
&gt; +static NSArray *transformCertificatesToData(NSArray *input)

This should return a RetainPtr&lt;NSArray&gt;.

&gt; Source/WebKit/Shared/API/Cocoa/WKRemoteObjectCoder.mm:335
&gt; +static NSData *transformTrustToData(SecTrustRef trust)

This should return a RetainPtr&lt;CFDataRef&gt;.

&gt;&gt; Source/WebKit/Shared/API/Cocoa/WKRemoteObjectCoder.mm:343
&gt;&gt; +    return (NSData *)data.autorelease();
&gt; 
&gt; I cc&apos;d Darin because I seem to remember that this sort of things (casting from CF to NS and autoreleasing) makes ARC transition complicated.
&gt; 
&gt; Overall, we should be using RetainPtr&lt;&gt;.

For our own functions we should use RetainPtr for return values, not autoreleased objects. However, I don’t know exactly how to change a RetainPtr&lt;CFDataRef&gt; into a RetainPtr&lt;NSData&gt;. I suggest we sidestep that issue by having this function return RetainPtr&lt;CFDataRef&gt;.

&gt; Source/WebKit/Shared/API/Cocoa/WKRemoteObjectCoder.mm:348
&gt; +    NSMutableDictionary *copy = nil;

This should be a RetainPtr.

&gt; Source/WebKit/Shared/API/Cocoa/WKRemoteObjectCoder.mm:374
&gt; +static NSArray *transformDataToCertificates(NSArray *input)

This should return a RetainPtr&lt;NSArray&gt;.

&gt; Source/WebKit/Shared/API/Cocoa/WKRemoteObjectCoder.mm:388
&gt; +static id transformDataToTrust(NSData *data)

This should probably return a RetainPtr&lt;CFTypeRef&gt;.

&gt; Source/WebKit/Shared/API/Cocoa/WKRemoteObjectCoder.mm:399
&gt; +static NSError *decodeError(WKRemoteObjectDecoder *decoder)

This should return a RetainPtr&lt;NSError&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1735189</commentid>
    <comment_count>5</comment_count>
      <attachid>422041</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-03-02 21:26:52 -0800</bug_when>
    <thetext>Created attachment 422041
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1735190</commentid>
    <comment_count>6</comment_count>
      <attachid>422042</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-03-02 21:29:14 -0800</bug_when>
    <thetext>Created attachment 422042
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1735191</commentid>
    <comment_count>7</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-03-02 21:30:54 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #4)
&gt; &gt; Source/WebKit/Shared/API/Cocoa/WKRemoteObjectCoder.mm:322
&gt; &gt; +NSString *peerCertificateKey = @&quot;NSErrorPeerCertificateChainKey&quot;;
&gt; &gt; +NSString *peerTrustKey = @&quot;NSURLErrorFailingURLPeerTrustErrorKey&quot;;
&gt; &gt; +NSString *clientCertificateKey = @&quot;NSErrorClientCertificateChainKey&quot;;
&gt; 
&gt; Should these have static constexpr in front of them?

This blew my mind a little bit.  Static I get, but I definitely need to do more thinking about exactly what a constexpr NSString* is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1735317</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-03 09:37:39 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #7)
&gt; This blew my mind a little bit.  Static I get, but I definitely need to do
&gt; more thinking about exactly what a constexpr NSString* is.

Roughly speaking, it&apos;s an NSString * with a value known at compile time and that never changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1735331</commentid>
    <comment_count>9</comment_count>
      <attachid>422042</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-03 09:56:33 -0800</bug_when>
    <thetext>Comment on attachment 422042
Patch

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

r=me with a couple of changes.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.mm:237
&gt; +    auto webView = [[[WKWebView alloc] initWithFrame:CGRectZero configuration:[WKWebViewConfiguration _test_configurationWithTestPlugInClassName:@&quot;RemoteObjectRegistryPlugIn&quot;]] autorelease];

no autorelease] please. Just use adoptNS().

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/RemoteObjectRegistry.mm:238
&gt; +    auto delegate = [[TestNavigationDelegate new] autorelease];

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1735684</commentid>
    <comment_count>10</comment_count>
      <attachid>422183</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-03-03 22:31:39 -0800</bug_when>
    <thetext>Created attachment 422183
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1735689</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-03-03 23:22:37 -0800</bug_when>
    <thetext>Committed r273875: &lt;https://commits.webkit.org/r273875&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 422183.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421496</attachid>
            <date>2021-02-24 20:20:41 -0800</date>
            <delta_ts>2021-03-02 21:26:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222401-20210224202040.patch</filename>
            <type>text/plain</type>
            <size>14703</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczMzE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDMzNTczMmVlYzg2MmZiYjM3
YzZjOGE5ZmZkZDYzMzRhMjUyZmExYzYuLjM1YzY2YmY5MjkyYzlhNTA0OWE0NjkzZTNjMGQ0MDdh
ZWUwNjc1ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMjEtMDItMjQgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBXS1JlbW90ZU9i
amVjdENvZGVyIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSBOU0Vycm9ycyBmcm9tIFRMUyBmYWls
dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIy
NDAxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MjEwMzg2NT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOU0Vycm9ycyBmcm9tIFRMUyBmYWlsdXJl
cyBjb250YWluIHZhbHVlcyBsaWtlIGEgU2VjVHJ1c3RSZWYgb3IgYSBTZWNDZXJ0aWZpY2F0ZVJl
ZiwKKyAgICAgICAgd2hpY2ggYXJlIG5vdCBPYmpDIG9iamVjdHMsIGFuZCB0aGV5IGRvbid0IGxp
a2UgaXQgd2hlbiB5b3UgY2FsbCBlbmNvZGVXaXRoQ29kZXI6IG9uIHRoZW0uCisgICAgICAgIFVu
dGlsIHIyNzMxNDEgaXQgd291bGQgY3Jhc2ggd2hlbiB3ZSBkbywgYnV0IGV2ZW4gYWZ0ZXIgdGhh
dCB3ZSBqdXN0IGRlY29kZSBhIG5pbCBOU0Vycm9yLgorICAgICAgICBBZGQgYSBzcGVjaWFsIGNh
c2UgbGlrZSB3ZSBkaWQgaW4gZW5jb2RlTlNFcnJvciB0byBzdWNjZXNzZnVsbHkgZW5jb2RlIGFu
ZCBkZWNvZGUgdGhlc2UgZXJyb3JzLgorCisgICAgICAgICogU2hhcmVkL0FQSS9Db2NvYS9XS1Jl
bW90ZU9iamVjdENvZGVyLm1tOgorICAgICAgICAoZGVjb2RlT2JqQ09iamVjdCk6CisgICAgICAg
ICh0cmFuc2Zvcm1DZXJ0aWZpY2F0ZXNUb0RhdGEpOgorICAgICAgICAodHJhbnNmb3JtVHJ1c3RU
b0RhdGEpOgorICAgICAgICAoZW5jb2RlRXJyb3IpOgorICAgICAgICAodHJhbnNmb3JtRGF0YVRv
Q2VydGlmaWNhdGVzKToKKyAgICAgICAgKHRyYW5zZm9ybURhdGFUb1RydXN0KToKKyAgICAgICAg
KGRlY29kZUVycm9yKToKKyAgICAgICAgKGVuY29kZU9iamVjdCk6CisgICAgICAgIChkZWNvZGVP
YmplY3QpOgorCiAyMDIxLTAyLTIzICBLaW1tbyBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5j
b20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMjczMjA0KTogd2Via2l0cHkgdGVzdHMgZmFpbApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dLUmVtb3RlT2JqZWN0
Q29kZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tSZW1vdGVPYmplY3RD
b2Rlci5tbQppbmRleCA1ZGUxOTViMDNiZjZiNTAwYTQ5ZjRiMmQ5YjBhNWUxNjJlZGNjYTJhLi4z
NGQ4MTg2MTU0ZWQxYjIwNjJlN2JkZjg1YmI0MDQ5MDZjNTEzODZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tSZW1vdGVPYmplY3RDb2Rlci5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tSZW1vdGVPYmplY3RDb2Rlci5tbQpAQCAt
MzMsNiArMzMsNyBAQAogI2ltcG9ydCAiQVBJU3RyaW5nLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgi
CiAjaW1wb3J0ICJOU0ludm9jYXRpb25TUEkuaCIKKyNpbXBvcnQgIl9XS0Vycm9yUmVjb3ZlcnlB
dHRlbXB0aW5nLmgiCiAjaW1wb3J0ICJfV0tSZW1vdGVPYmplY3RJbnRlcmZhY2VJbnRlcm5hbC5o
IgogI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CkBA
IC0yOTksMTEgKzMwMCwxMjYgQEAgc3RhdGljIHZvaWQgZW5jb2RlU3RyaW5nKFdLUmVtb3RlT2Jq
ZWN0RW5jb2RlciAqZW5jb2RlciwgTlNTdHJpbmcgKnN0cmluZykKICAgICBlbmNvZGVyLT5fY3Vy
cmVudERpY3Rpb25hcnktPnNldChzdHJpbmdLZXksIEFQSTo6U3RyaW5nOjpjcmVhdGUoc3RyaW5n
KSk7CiB9CiAKK3N0YXRpYyBpZCBkZWNvZGVPYmpDT2JqZWN0KFdLUmVtb3RlT2JqZWN0RGVjb2Rl
ciAqZGVjb2RlciwgQ2xhc3Mgb2JqZWN0Q2xhc3MpCit7CisgICAgaWQgcmVzdWx0ID0gW29iamVj
dENsYXNzIGFsbG9jV2l0aFpvbmU6ZGVjb2Rlci56b25lXTsKKyAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZFVuYXJjaGl2ZU9wZXJhdGlvbkV4Y2Vw
dGlvbiBmb3JtYXQ6QCJDbGFzcyBcIiVAXCIgcmV0dXJuZWQgbmlsIGZyb20gK2FsbG9jIHdoaWxl
IGJlaW5nIGRlY29kZWQiLCBOU1N0cmluZ0Zyb21DbGFzcyhvYmplY3RDbGFzcyldOworCisgICAg
cmVzdWx0ID0gW3Jlc3VsdCBpbml0V2l0aENvZGVyOmRlY29kZXJdOworICAgIGlmICghcmVzdWx0
KQorICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkVW5hcmNoaXZlT3BlcmF0aW9u
RXhjZXB0aW9uIGZvcm1hdDpAIk9iamVjdCBvZiBjbGFzcyBcIiVAXCIgcmV0dXJuZWQgbmlsIGZy
b20gLWluaXRXaXRoQ29kZXI6IHdoaWxlIGJlaW5nIGRlY29kZWQiLCBOU1N0cmluZ0Zyb21DbGFz
cyhvYmplY3RDbGFzcyldOworCisgICAgcmVzdWx0ID0gW3Jlc3VsdCBhd2FrZUFmdGVyVXNpbmdD
b2RlcjpkZWNvZGVyXTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgW05TRXhjZXB0aW9uIHJh
aXNlOk5TSW52YWxpZFVuYXJjaGl2ZU9wZXJhdGlvbkV4Y2VwdGlvbiBmb3JtYXQ6QCJPYmplY3Qg
b2YgY2xhc3MgXCIlQFwiIHJldHVybmVkIG5pbCBmcm9tIC1hd2FrZUFmdGVyVXNpbmdDb2Rlcjog
d2hpbGUgYmVpbmcgZGVjb2RlZCIsIE5TU3RyaW5nRnJvbUNsYXNzKG9iamVjdENsYXNzKV07CisK
KyAgICByZXR1cm4gW3Jlc3VsdCBhdXRvcmVsZWFzZV07Cit9CisKK05TU3RyaW5nICpwZWVyQ2Vy
dGlmaWNhdGVLZXkgPSBAIk5TRXJyb3JQZWVyQ2VydGlmaWNhdGVDaGFpbktleSI7CitOU1N0cmlu
ZyAqcGVlclRydXN0S2V5ID0gQCJOU1VSTEVycm9yRmFpbGluZ1VSTFBlZXJUcnVzdEVycm9yS2V5
IjsKK05TU3RyaW5nICpjbGllbnRDZXJ0aWZpY2F0ZUtleSA9IEAiTlNFcnJvckNsaWVudENlcnRp
ZmljYXRlQ2hhaW5LZXkiOworCitzdGF0aWMgTlNBcnJheSAqdHJhbnNmb3JtQ2VydGlmaWNhdGVz
VG9EYXRhKE5TQXJyYXkgKmlucHV0KQoreworICAgIE5TTXV0YWJsZUFycmF5PE5TRGF0YSAqPiAq
ZGF0YUFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmlucHV0LmNvdW50
XTsKKyAgICBmb3IgKGlkIGNlcnRpZmljYXRlIGluIGlucHV0KSB7CisgICAgICAgIGlmIChDRkdl
dFR5cGVJRChjZXJ0aWZpY2F0ZSkgIT0gU2VjQ2VydGlmaWNhdGVHZXRUeXBlSUQoKSkKKyAgICAg
ICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3Jt
YXQ6QCJFcnJvciBlbmNvZGluZyBpbnZhbGlkIGNlcnRpZmljYXRlIGluIGNoYWluIl07CisgICAg
ICAgIFtkYXRhQXJyYXkgYWRkT2JqZWN0OihOU0RhdGEgKilhZG9wdENGKFNlY0NlcnRpZmljYXRl
Q29weURhdGEoKFNlY0NlcnRpZmljYXRlUmVmKWNlcnRpZmljYXRlKSkuZ2V0KCldOworICAgIH0K
KyAgICByZXR1cm4gZGF0YUFycmF5OworfQorCitzdGF0aWMgTlNEYXRhICp0cmFuc2Zvcm1UcnVz
dFRvRGF0YShTZWNUcnVzdFJlZiB0cnVzdCkKK3sKKyAgICBpZiAoQ0ZHZXRUeXBlSUQodHJ1c3Qp
ICE9IFNlY1RydXN0R2V0VHlwZUlEKCkpCisgICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0lu
dmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJFcnJvciBlbmNvZGluZyBpbnZhbGlkIFNl
Y1RydXN0UmVmIl07CisgICAgQ0ZFcnJvclJlZiBlcnJvciA9IG51bGxwdHI7CisgICAgYXV0byBk
YXRhID0gYWRvcHRDRihTZWNUcnVzdFNlcmlhbGl6ZSh0cnVzdCwgJmVycm9yKSk7CisgICAgaWYg
KGVycm9yKQorICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNl
cHRpb24gZm9ybWF0OkAiRXJyb3Igc2VyaWFsaXppbmcgU2VjVHJ1c3RSZWY6ICVAIiwgZXJyb3Jd
OworICAgIHJldHVybiAoTlNEYXRhICopZGF0YS5hdXRvcmVsZWFzZSgpOworfQorCitzdGF0aWMg
dm9pZCBlbmNvZGVFcnJvcihXS1JlbW90ZU9iamVjdEVuY29kZXIgKmVuY29kZXIsIE5TRXJyb3Ig
KmVycm9yKQoreworICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmNvcHkgPSBuaWw7CisgICAgaWYg
KGVycm9yLnVzZXJJbmZvW19XS1JlY292ZXJ5QXR0ZW1wdGVyRXJyb3JLZXldKSB7CisgICAgICAg
IGNvcHkgPSBbW2Vycm9yLnVzZXJJbmZvIG11dGFibGVDb3B5XSBhdXRvcmVsZWFzZV07CisgICAg
ICAgIFtjb3B5IHJlbW92ZU9iamVjdEZvcktleTpfV0tSZWNvdmVyeUF0dGVtcHRlckVycm9yS2V5
XTsKKyAgICB9CisgICAgaWYgKGVycm9yLnVzZXJJbmZvW2NsaWVudENlcnRpZmljYXRlS2V5XSkg
eworICAgICAgICBpZiAoIWNvcHkpCisgICAgICAgICAgICBjb3B5ID0gW1tlcnJvci51c2VySW5m
byBtdXRhYmxlQ29weV0gYXV0b3JlbGVhc2VdOworICAgICAgICBbY29weSByZW1vdmVPYmplY3RG
b3JLZXk6Y2xpZW50Q2VydGlmaWNhdGVLZXldOworICAgIH0KKyAgICBpZiAoTlNBcnJheSAqY2Vy
dGlmaWNhdGVDaGFpbiA9IGVycm9yLnVzZXJJbmZvW3BlZXJDZXJ0aWZpY2F0ZUtleV0pIHsKKyAg
ICAgICAgaWYgKCFjb3B5KQorICAgICAgICAgICAgY29weSA9IFtbZXJyb3IudXNlckluZm8gbXV0
YWJsZUNvcHldIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgY29weVtwZWVyQ2VydGlmaWNhdGVLZXld
ID0gdHJhbnNmb3JtQ2VydGlmaWNhdGVzVG9EYXRhKGNlcnRpZmljYXRlQ2hhaW4pOworICAgIH0K
KyAgICBpZiAoaWQgdHJ1c3QgPSBlcnJvci51c2VySW5mb1twZWVyVHJ1c3RLZXldKSB7CisgICAg
ICAgIGlmICghY29weSkKKyAgICAgICAgICAgIGNvcHkgPSBbW2Vycm9yLnVzZXJJbmZvIG11dGFi
bGVDb3B5XSBhdXRvcmVsZWFzZV07CisgICAgICAgIGNvcHlbcGVlclRydXN0S2V5XSA9IHRyYW5z
Zm9ybVRydXN0VG9EYXRhKChTZWNUcnVzdFJlZil0cnVzdCk7CisgICAgfQorICAgIGlmICghY29w
eSkKKyAgICAgICAgW2Vycm9yIGVuY29kZVdpdGhDb2RlcjplbmNvZGVyXTsKKyAgICBlbHNlCisg
ICAgICAgIFtbTlNFcnJvciBlcnJvcldpdGhEb21haW46ZXJyb3IuZG9tYWluIGNvZGU6ZXJyb3Iu
Y29kZSB1c2VySW5mbzpjb3B5XSBlbmNvZGVXaXRoQ29kZXI6ZW5jb2Rlcl07Cit9CisKK3N0YXRp
YyBOU0FycmF5ICp0cmFuc2Zvcm1EYXRhVG9DZXJ0aWZpY2F0ZXMoTlNBcnJheSAqaW5wdXQpCit7
CisgICAgTlNNdXRhYmxlQXJyYXkgKmFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENh
cGFjaXR5OmlucHV0LmNvdW50XTsKKyAgICBmb3IgKE5TRGF0YSAqZGF0YSBpbiBpbnB1dCkgewor
ICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQoZGF0YSkgIT0gQ0ZEYXRhR2V0VHlwZUlEKCkpCisgICAg
ICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkVW5hcmNoaXZlT3BlcmF0aW9uRXhj
ZXB0aW9uIGZvcm1hdDpAIkVycm9yIGRlY29kaW5nIGNlcnRpZmljYXRlIGZyb20gb2JqZWN0IHRo
YXQgaXMgbm90IGRhdGEgJUAiLCBOU1N0cmluZ0Zyb21DbGFzcyhbZGF0YSBjbGFzc10pXTsKKyAg
ICAgICAgYXV0byBjZXJ0aWZpY2F0ZSA9IGFkb3B0Q0YoU2VjQ2VydGlmaWNhdGVDcmVhdGVXaXRo
RGF0YShudWxscHRyLCAoQ0ZEYXRhUmVmKWRhdGEpKTsKKyAgICAgICAgaWYgKCFjZXJ0aWZpY2F0
ZSkKKyAgICAgICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRVbmFyY2hpdmVPcGVy
YXRpb25FeGNlcHRpb24gZm9ybWF0OkAiRXJyb3IgZGVjb2RpbmcgbnZhbGlkIGNlcnRpZmljYXRl
IGluIGNoYWluIl07CisgICAgICAgIFthcnJheSBhZGRPYmplY3Q6KGlkKWNlcnRpZmljYXRlLmdl
dCgpXTsKKyAgICB9CisgICAgcmV0dXJuIGFycmF5OworfQorCitzdGF0aWMgaWQgdHJhbnNmb3Jt
RGF0YVRvVHJ1c3QoTlNEYXRhICpkYXRhKQoreworICAgIGlmIChDRkdldFR5cGVJRChkYXRhKSAh
PSBDRkRhdGFHZXRUeXBlSUQoKSkKKyAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxp
ZFVuYXJjaGl2ZU9wZXJhdGlvbkV4Y2VwdGlvbiBmb3JtYXQ6QCJJbnZhbGlkIFNlY1RydXN0UmVm
IGRhdGEgJUAiLCBOU1N0cmluZ0Zyb21DbGFzcyhbZGF0YSBjbGFzc10pXTsKKyAgICBDRkVycm9y
UmVmIGVycm9yID0gbnVsbHB0cjsKKyAgICBhdXRvIHRydXN0ID0gYWRvcHRDRihTZWNUcnVzdERl
c2VyaWFsaXplKChDRkRhdGFSZWYpZGF0YSwgJmVycm9yKSk7CisgICAgaWYgKGVycm9yIHx8ICF0
cnVzdCkKKyAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZFVuYXJjaGl2ZU9wZXJh
dGlvbkV4Y2VwdGlvbiBmb3JtYXQ6QCJJbnZhbGlkIFNlY1RydXN0UmVmICVAIiwgZXJyb3JdOwor
ICAgIHJldHVybiAoaWQpdHJ1c3QuYXV0b3JlbGVhc2UoKTsKK30KKworc3RhdGljIE5TRXJyb3Ig
KmRlY29kZUVycm9yKFdLUmVtb3RlT2JqZWN0RGVjb2RlciAqZGVjb2RlcikKK3sKKyAgICBOU0Vy
cm9yICplcnJvciA9IGRlY29kZU9iakNPYmplY3QoZGVjb2RlciwgW05TRXJyb3IgY2xhc3NdKTsK
KyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpjb3B5ID0gbmlsOworICAgIGlmIChOU0FycmF5ICpj
ZXJ0aWZpY2F0ZUNoYWluID0gZXJyb3IudXNlckluZm9bcGVlckNlcnRpZmljYXRlS2V5XSkgewor
ICAgICAgICBjb3B5ID0gW1tlcnJvci51c2VySW5mbyBtdXRhYmxlQ29weV0gYXV0b3JlbGVhc2Vd
OworICAgICAgICBjb3B5W3BlZXJDZXJ0aWZpY2F0ZUtleV0gPSB0cmFuc2Zvcm1EYXRhVG9DZXJ0
aWZpY2F0ZXMoY2VydGlmaWNhdGVDaGFpbik7CisgICAgfQorICAgIGlmIChOU0RhdGEgKnRydXN0
ID0gZXJyb3IudXNlckluZm9bcGVlclRydXN0S2V5XSkgeworICAgICAgICBpZiAoIWNvcHkpCisg
ICAgICAgICAgICBjb3B5ID0gW1tlcnJvci51c2VySW5mbyBtdXRhYmxlQ29weV0gYXV0b3JlbGVh
c2VdOworICAgICAgICBjb3B5W3BlZXJUcnVzdEtleV0gPSB0cmFuc2Zvcm1EYXRhVG9UcnVzdCh0
cnVzdCk7CisgICAgfQorICAgIGlmICghY29weSkKKyAgICAgICAgcmV0dXJuIGVycm9yOworICAg
IHJldHVybiBbTlNFcnJvciBlcnJvcldpdGhEb21haW46ZXJyb3IuZG9tYWluIGNvZGU6ZXJyb3Iu
Y29kZSB1c2VySW5mbzpjb3B5XTsKK30KKwogc3RhdGljIHZvaWQgZW5jb2RlT2JqZWN0KFdLUmVt
b3RlT2JqZWN0RW5jb2RlciAqZW5jb2RlciwgaWQgb2JqZWN0KQogewogICAgIEFTU0VSVChvYmpl
Y3QpOwogCi0gICAgaWYgKCFbb2JqZWN0IGNvbmZvcm1zVG9Qcm90b2NvbDpAcHJvdG9jb2woTlNT
ZWN1cmVDb2RpbmcpXSAmJiAhW29iamVjdCBpc0tpbmRPZkNsYXNzOltOU0ludm9jYXRpb24gY2xh
c3NdXSkKKyAgICBpZiAoIVtvYmplY3QgY29uZm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChOU1Nl
Y3VyZUNvZGluZyldCisgICAgICAgICYmICFbb2JqZWN0IGlzS2luZE9mQ2xhc3M6W05TSW52b2Nh
dGlvbiBjbGFzc11dKQogICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1l
bnRFeGNlcHRpb24gZm9ybWF0OkAiJUAgZG9lcyBub3QgY29uZm9ybSB0byBOU1NlY3VyZUNvZGlu
ZyIsIG9iamVjdF07CiAKICAgICBpZiAoY2xhc3NfaXNNZXRhQ2xhc3Mob2JqZWN0X2dldENsYXNz
KG9iamVjdCkpKQpAQCAtMzM3LDYgKzQ1Myw5IEBAIHN0YXRpYyB2b2lkIGVuY29kZU9iamVjdChX
S1JlbW90ZU9iamVjdEVuY29kZXIgKmVuY29kZXIsIGlkIG9iamVjdCkKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAorICAgIGlmIChvYmplY3RDbGFzcyA9PSBbTlNFcnJvciBjbGFzc10pCisgICAg
ICAgIHJldHVybiBlbmNvZGVFcnJvcihlbmNvZGVyLCBvYmplY3QpOworICAgIAogICAgIFtvYmpl
Y3QgZW5jb2RlV2l0aENvZGVyOmVuY29kZXJdOwogfQogCkBAIC04NzMsMjMgKzk5MiwxNCBAQCBz
dGF0aWMgaWQgZGVjb2RlT2JqZWN0KFdLUmVtb3RlT2JqZWN0RGVjb2RlciAqZGVjb2RlcikKIAog
ICAgIGlmIChvYmplY3RDbGFzcyA9PSBbTlNTdHJpbmcgY2xhc3NdKQogICAgICAgICByZXR1cm4g
ZGVjb2RlU3RyaW5nKGRlY29kZXIpOworICAgIAorICAgIGlmIChvYmplY3RDbGFzcyA9PSBbTlNF
cnJvciBjbGFzc10pCisgICAgICAgIHJldHVybiBkZWNvZGVFcnJvcihkZWNvZGVyKTsKIAogICAg
IGlmIChvYmplY3RDbGFzcyA9PSBbTlNNdXRhYmxlU3RyaW5nIGNsYXNzXSkKICAgICAgICAgcmV0
dXJuIFtOU011dGFibGVTdHJpbmcgc3RyaW5nV2l0aFN0cmluZzpkZWNvZGVTdHJpbmcoZGVjb2Rl
cildOwogCi0gICAgaWQgcmVzdWx0ID0gW29iamVjdENsYXNzIGFsbG9jV2l0aFpvbmU6ZGVjb2Rl
ci56b25lXTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5T
SW52YWxpZFVuYXJjaGl2ZU9wZXJhdGlvbkV4Y2VwdGlvbiBmb3JtYXQ6QCJDbGFzcyBcIiVzXCIg
cmV0dXJuZWQgbmlsIGZyb20gK2FsbG9jIHdoaWxlIGJlaW5nIGRlY29kZWQiLCBjbGFzc05hbWUu
ZGF0YSgpXTsKLQotICAgIHJlc3VsdCA9IFtyZXN1bHQgaW5pdFdpdGhDb2RlcjpkZWNvZGVyXTsK
LSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZFVu
YXJjaGl2ZU9wZXJhdGlvbkV4Y2VwdGlvbiBmb3JtYXQ6QCJPYmplY3Qgb2YgY2xhc3MgXCIlc1wi
IHJldHVybmVkIG5pbCBmcm9tIC1pbml0V2l0aENvZGVyOiB3aGlsZSBiZWluZyBkZWNvZGVkIiwg
Y2xhc3NOYW1lLmRhdGEoKV07Ci0KLSAgICByZXN1bHQgPSBbcmVzdWx0IGF3YWtlQWZ0ZXJVc2lu
Z0NvZGVyOmRlY29kZXJdOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICBbTlNFeGNlcHRpb24g
cmFpc2U6TlNJbnZhbGlkVW5hcmNoaXZlT3BlcmF0aW9uRXhjZXB0aW9uIGZvcm1hdDpAIk9iamVj
dCBvZiBjbGFzcyBcIiVzXCIgcmV0dXJuZWQgbmlsIGZyb20gLWF3YWtlQWZ0ZXJVc2luZ0NvZGVy
OiB3aGlsZSBiZWluZyBkZWNvZGVkIiwgY2xhc3NOYW1lLmRhdGEoKV07Ci0KLSAgICByZXR1cm4g
W3Jlc3VsdCBhdXRvcmVsZWFzZV07CisgICAgcmV0dXJuIGRlY29kZU9iakNPYmplY3QoZGVjb2Rl
ciwgb2JqZWN0Q2xhc3MpOwogfQogCiBzdGF0aWMgaWQgZGVjb2RlT2JqZWN0KFdLUmVtb3RlT2Jq
ZWN0RGVjb2RlciAqZGVjb2RlciwgY29uc3QgQVBJOjpEaWN0aW9uYXJ5KiBkaWN0aW9uYXJ5LCBj
b25zdCBIYXNoU2V0PENGVHlwZVJlZj4mIGFsbG93ZWRDbGFzc2VzKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDZjZjNlNGZhNGUyZTMzYTE2MmI4
NjQzMDU1ZDAzOTlkOGFiODkwODYuLjFhM2Y5YThiMGQ2ODkxZjk0OWM3YTcxMThjODc1MDc2NzE4
ZTc2ODAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNiBAQAorMjAyMS0wMi0yNCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3Rl
bnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFdLUmVtb3RlT2JqZWN0Q29kZXIgc2hvdWxkIGJl
IGFibGUgdG8gaGFuZGxlIE5TRXJyb3JzIGZyb20gVExTIGZhaWx1cmVzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjI0MDEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvUmVtb3RlT2JqZWN0UmVnaXN0cnkuaDoKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1JlbW90ZU9iamVjdFJlZ2lzdHJ5Lm1tOgorICAgICAgICAo
VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZW1vdGVP
YmplY3RSZWdpc3RyeVBsdWdJbi5tbToKKyAgICAgICAgKC1bUmVtb3RlT2JqZWN0UmVnaXN0cnlQ
bHVnSW4gc2VuZEVycm9yOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorCiAyMDIxLTAyLTIzICBDb21t
aXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
LCByZXZlcnRpbmcgcjI3MzMwNy4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvUmVtb3RlT2JqZWN0UmVnaXN0cnkuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVtb3RlT2JqZWN0UmVnaXN0cnkuaAppbmRleCA3N2E2MDdj
MzIwOWQ0MzEyMDNlODY3YWEwZDhjM2FiNjZkYTZmZjg4Li5mMjQ3YTI1YzAyMWZlMTY1MWU2NWMw
NTY4NmYzYmNkM2EyMTM1MDk4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1JlbW90ZU9iamVjdFJlZ2lzdHJ5LmgKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZW1vdGVPYmplY3RSZWdpc3RyeS5oCkBAIC01Miw2ICs1
Miw3IEBACiAtICh2b2lkKWRvTm90Q2FsbENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSgpKWNv
bXBsZXRpb25IYW5kbGVyOwogLSAodm9pZClzZW5kUmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVx
dWVzdCByZXNwb25zZTooTlNVUkxSZXNwb25zZSAqKXJlc3BvbnNlIGNoYWxsZW5nZTooTlNVUkxB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqKWNoYWxsZW5nZSBlcnJvcjooTlNFcnJvciAqKWVycm9y
IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU1VSTFJlcXVlc3QgKiwgTlNVUkxSZXNwb25z
ZSAqLCBOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlICosIE5TRXJyb3IgKikpY29tcGxldGlv
bkhhbmRsZXI7CiAtICh2b2lkKWNhbGxVSVByb2Nlc3NNZXRob2RXaXRoUmVwbHlCbG9jazsKKy0g
KHZvaWQpc2VuZEVycm9yOihOU0Vycm9yICopZXJyb3IgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQg
KF4pKE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXI7CiAKIEBlbmQKIApkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZW1vdGVPYmplY3RSZWdpc3Ry
eS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVtb3RlT2JqZWN0
UmVnaXN0cnkubW0KaW5kZXggZmRlZmJhZTIwNmQyMmFmNzFlZjkyNTJlOTJhNjI1NDk1OTNmZGY4
Zi4uY2M2ZWZjYTg5ZmIyYTY3ZGIwNWQ5MmVkYThhYTI3YjBmMmRiYzI1ZiAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZW1vdGVPYmplY3RSZWdpc3Ry
eS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1JlbW90ZU9i
amVjdFJlZ2lzdHJ5Lm1tCkBAIC0yNSw5ICsyNSwxMSBAQAogCiAjaW1wb3J0ICJjb25maWcuaCIK
IAorI2ltcG9ydCAiSFRUUFNlcnZlci5oIgogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIK
ICNpbXBvcnQgIlJlbW90ZU9iamVjdFJlZ2lzdHJ5LmgiCiAjaW1wb3J0ICJUZXN0LmgiCisjaW1w
b3J0ICJUZXN0TmF2aWdhdGlvbkRlbGVnYXRlLmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1
cmF0aW9uRXh0cmFzLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CkBAIC0zOCw3ICs0MCw3IEBACiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4KIAot
VEVTVChXZWJLaXQsIFJlbW90ZU9iamVjdFJlZ2lzdHJ5KQorVEVTVChSZW1vdGVPYmplY3RSZWdp
c3RyeSwgQmFzaWMpCiB7CiAgICAgX19ibG9jayBib29sIGlzRG9uZSA9IGZhbHNlOwogCkBAIC0x
OTYsNyArMTk4LDcgQEAgVEVTVChXZWJLaXQsIFJlbW90ZU9iamVjdFJlZ2lzdHJ5KQogCiBAZW5k
CiAKLVRFU1QoV2ViS2l0LCBSZW1vdGVPYmplY3RSZWdpc3RyeV9DYWxsUmVwbHlCbG9ja0FmdGVy
T3JpZ2luYXRpbmdXZWJWaWV3RGVhbGxvY2F0ZXMpCitURVNUKFJlbW90ZU9iamVjdFJlZ2lzdHJ5
LCBDYWxsUmVwbHlCbG9ja0FmdGVyT3JpZ2luYXRpbmdXZWJWaWV3RGVhbGxvY2F0ZXMpCiB7CiAg
ICAgYXV0byBsb2NhbE9iamVjdCA9IGFkb3B0TlMoW1tMb2NhbE9iamVjdCBhbGxvY10gaW5pdF0p
OwogICAgIFdlYWtPYmpDUHRyPFdLV2ViVmlldz4gd2Vha1dlYlZpZXdQdHI7CkBAIC0yMjgsMyAr
MjMwLDI4IEBAIFRFU1QoV2ViS2l0LCBSZW1vdGVPYmplY3RSZWdpc3RyeV9DYWxsUmVwbHlCbG9j
a0FmdGVyT3JpZ2luYXRpbmdXZWJWaWV3RGVhbGxvY2F0CiAKICAgICBsb2NhbE9iamVjdC0+Y29t
cGxldGlvbkhhbmRsZXJGcm9tV2ViUHJvY2VzcygpOwogfQorCitURVNUKFJlbW90ZU9iamVjdFJl
Z2lzdHJ5LCBTZXJpYWxpemVFcnJvcldpdGhDZXJ0aWZpY2F0ZXMpCit7CisgICAgVGVzdFdlYktp
dEFQSTo6SFRUUFNlcnZlciBzZXJ2ZXIoeyB9LCBUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjpQ
cm90b2NvbDo6SHR0cHMpOworICAgIGF1dG8gd2ViVmlldyA9IFtbW1dLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpDR1JlY3RaZXJvIGNvbmZpZ3VyYXRpb246W1dLV2ViVmlld0NvbmZpZ3Vy
YXRpb24gX3Rlc3RfY29uZmlndXJhdGlvbldpdGhUZXN0UGx1Z0luQ2xhc3NOYW1lOkAiUmVtb3Rl
T2JqZWN0UmVnaXN0cnlQbHVnSW4iXV0gYXV0b3JlbGVhc2VdOworICAgIGF1dG8gZGVsZWdhdGUg
PSBbW1Rlc3ROYXZpZ2F0aW9uRGVsZWdhdGUgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgd2ViVmll
dy5uYXZpZ2F0aW9uRGVsZWdhdGUgPSBkZWxlZ2F0ZTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVz
dDpzZXJ2ZXIucmVxdWVzdCgpXTsKKyAgICBOU0Vycm9yICplcnJvciA9IFtkZWxlZ2F0ZSB3YWl0
Rm9yRGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlvbl07CisgICAgTlNTdHJpbmcgKmtleSA9IEAi
TlNFcnJvclBlZXJDZXJ0aWZpY2F0ZUNoYWluS2V5IjsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoZXJy
b3IuZG9tYWluLCAiTlNVUkxFcnJvckRvbWFpbiIpOworICAgIEVYUEVDVF9UUlVFKGVycm9yLnVz
ZXJJbmZvW2tleV0pOworICAgIAorICAgIF9XS1JlbW90ZU9iamVjdEludGVyZmFjZSAqaW50ZXJm
YWNlID0gW19XS1JlbW90ZU9iamVjdEludGVyZmFjZSByZW1vdGVPYmplY3RJbnRlcmZhY2VXaXRo
UHJvdG9jb2w6QHByb3RvY29sKFJlbW90ZU9iamVjdFByb3RvY29sKV07CisgICAgaWQgPFJlbW90
ZU9iamVjdFByb3RvY29sPiBvYmplY3QgPSBbW3dlYlZpZXcgX3JlbW90ZU9iamVjdFJlZ2lzdHJ5
XSByZW1vdGVPYmplY3RQcm94eVdpdGhJbnRlcmZhY2U6aW50ZXJmYWNlXTsKKyAgICBfX2Jsb2Nr
IGJvb2wgcm91bmRUcmlwQ29tcGxldGUgPSBmYWxzZTsKKyAgICBbb2JqZWN0IHNlbmRFcnJvcjpl
cnJvciBjb21wbGV0aW9uSGFuZGxlcjpeKE5TRXJyb3IgKmRlc2VyaWFsaXplZEVycm9yKSB7Cisg
ICAgICAgIEVYUEVDVF9XS19TVFJFUShkZXNlcmlhbGl6ZWRFcnJvci5kb21haW4sICJOU1VSTEVy
cm9yRG9tYWluIik7CisgICAgICAgIE5TQXJyYXkgKmNoYWluID0gZGVzZXJpYWxpemVkRXJyb3Iu
dXNlckluZm9ba2V5XTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY2hhaW4pOworICAgICAgICBFWFBF
Q1RfRVEoQ0ZHZXRUeXBlSUQoY2hhaW5bMF0pLCBTZWNDZXJ0aWZpY2F0ZUdldFR5cGVJRCgpKTsK
KyAgICAgICAgcm91bmRUcmlwQ29tcGxldGUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmcm91bmRUcmlwQ29tcGxldGUpOworfQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZW1vdGVPYmplY3RSZWdpc3RyeVBs
dWdJbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVtb3RlT2Jq
ZWN0UmVnaXN0cnlQbHVnSW4ubW0KaW5kZXggZGQ3MGU0ZjYzNjdjYjQ1YmMyM2QwMzc1ZWVhYmM1
MjQ4MzYwMDhlYi4uYjFhN2E3NDY0ZmQ1ZTRkN2EwNGEwMmM2MjQzZTAyNzc5ZjQ4NDM1ZCAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZW1vdGVPYmpl
Y3RSZWdpc3RyeVBsdWdJbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1JlbW90ZU9iamVjdFJlZ2lzdHJ5UGx1Z0luLm1tCkBAIC0xMTgsNiArMTE4LDExIEBA
CiAgICAgY29tcGxldGlvbkhhbmRsZXIocmVxdWVzdCwgcmVzcG9uc2UsIGNoYWxsZW5nZSwgZXJy
b3IpOwogfQogCistICh2b2lkKXNlbmRFcnJvcjooTlNFcnJvciAqKWVycm9yIGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKShOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgY29t
cGxldGlvbkhhbmRsZXIoZXJyb3IpOworfQorCiAtICh2b2lkKWNhbGxVSVByb2Nlc3NNZXRob2RX
aXRoUmVwbHlCbG9jawogewogICAgIGlkIDxMb2NhbE9iamVjdFByb3RvY29sPiBsb2NhbE9iamVj
dCA9IFtbX2Jyb3dzZXJDb250ZXh0Q29udHJvbGxlciBfcmVtb3RlT2JqZWN0UmVnaXN0cnldIHJl
bW90ZU9iamVjdFByb3h5V2l0aEludGVyZmFjZTpsb2NhbE9iamVjdEludGVyZmFjZSgpXTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>422041</attachid>
            <date>2021-03-02 21:26:52 -0800</date>
            <delta_ts>2021-03-02 21:29:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222401-20210302212651.patch</filename>
            <type>text/plain</type>
            <size>14546</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczNzQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGY5OTc3ODVjZmVjYTk1Njcz
NWIwNWQyNjU5ODkxZTM1N2U3Yzg0NTcuLjJlMWFjMTBkMDkwNTRhNWNjMTU5NTZmYmRmMTQ1NDQ5
ZDY4OWFhMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMjEtMDMtMDIgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBXS1JlbW90ZU9i
amVjdENvZGVyIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSBOU0Vycm9ycyBmcm9tIFRMUyBmYWls
dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIy
NDAxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MjEwMzg2NT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOU0Vycm9ycyBmcm9tIFRMUyBmYWlsdXJl
cyBjb250YWluIHZhbHVlcyBsaWtlIGEgU2VjVHJ1c3RSZWYgb3IgYSBTZWNDZXJ0aWZpY2F0ZVJl
ZiwKKyAgICAgICAgd2hpY2ggYXJlIG5vdCBPYmpDIG9iamVjdHMsIGFuZCB0aGV5IGRvbid0IGxp
a2UgaXQgd2hlbiB5b3UgY2FsbCBlbmNvZGVXaXRoQ29kZXI6IG9uIHRoZW0uCisgICAgICAgIFVu
dGlsIHIyNzMxNDEgaXQgd291bGQgY3Jhc2ggd2hlbiB3ZSBkbywgYnV0IGV2ZW4gYWZ0ZXIgdGhh
dCB3ZSBqdXN0IGRlY29kZSBhIG5pbCBOU0Vycm9yLgorICAgICAgICBBZGQgYSBzcGVjaWFsIGNh
c2UgbGlrZSB3ZSBkaWQgaW4gZW5jb2RlTlNFcnJvciB0byBzdWNjZXNzZnVsbHkgZW5jb2RlIGFu
ZCBkZWNvZGUgdGhlc2UgZXJyb3JzLgorCisgICAgICAgICogU2hhcmVkL0FQSS9Db2NvYS9XS1Jl
bW90ZU9iamVjdENvZGVyLm1tOgorICAgICAgICAoZGVjb2RlT2JqQ09iamVjdCk6CisgICAgICAg
ICh0cmFuc2Zvcm1DZXJ0aWZpY2F0ZXNUb0RhdGEpOgorICAgICAgICAodHJhbnNmb3JtVHJ1c3RU
b0RhdGEpOgorICAgICAgICAoZW5jb2RlRXJyb3IpOgorICAgICAgICAodHJhbnNmb3JtRGF0YVRv
Q2VydGlmaWNhdGVzKToKKyAgICAgICAgKHRyYW5zZm9ybURhdGFUb1RydXN0KToKKyAgICAgICAg
KGRlY29kZUVycm9yKToKKyAgICAgICAgKGVuY29kZU9iamVjdCk6CisgICAgICAgIChkZWNvZGVP
YmplY3QpOgorCiAyMDIxLTAzLTAyICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyNjMwOTQpOiBbR1RLXVtXUEVdIEFQSSB0
ZXN0IC93ZWJraXQvV2ViS2l0V2ViQ29udGV4dC9sYW5ndWFnZXMgaXMgZmFpbGluZwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dLUmVtb3RlT2JqZWN0Q29kZXIu
bW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tSZW1vdGVPYmplY3RDb2Rlci5t
bQppbmRleCA1ZGUxOTViMDNiZjZiNTAwYTQ5ZjRiMmQ5YjBhNWUxNjJlZGNjYTJhLi4zMDdlMDlh
NGVjMjEwYTFlYjFjZWU5ZTEwYjg5ZjdmZmU5YTg5Mzk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tSZW1vdGVPYmplY3RDb2Rlci5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tSZW1vdGVPYmplY3RDb2Rlci5tbQpAQCAtMzMsNiAr
MzMsNyBAQAogI2ltcG9ydCAiQVBJU3RyaW5nLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1w
b3J0ICJOU0ludm9jYXRpb25TUEkuaCIKKyNpbXBvcnQgIl9XS0Vycm9yUmVjb3ZlcnlBdHRlbXB0
aW5nLmgiCiAjaW1wb3J0ICJfV0tSZW1vdGVPYmplY3RJbnRlcmZhY2VJbnRlcm5hbC5oIgogI2lt
cG9ydCA8b2JqYy9ydW50aW1lLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CkBAIC0yOTks
NiArMzAwLDEyMCBAQCBzdGF0aWMgdm9pZCBlbmNvZGVTdHJpbmcoV0tSZW1vdGVPYmplY3RFbmNv
ZGVyICplbmNvZGVyLCBOU1N0cmluZyAqc3RyaW5nKQogICAgIGVuY29kZXItPl9jdXJyZW50RGlj
dGlvbmFyeS0+c2V0KHN0cmluZ0tleSwgQVBJOjpTdHJpbmc6OmNyZWF0ZShzdHJpbmcpKTsKIH0K
IAorc3RhdGljIFJldGFpblB0cjxpZD4gZGVjb2RlT2JqQ09iamVjdChXS1JlbW90ZU9iamVjdERl
Y29kZXIgKmRlY29kZXIsIENsYXNzIG9iamVjdENsYXNzKQoreworICAgIGlkIGFsbG9jYXRpb24g
PSBbb2JqZWN0Q2xhc3MgYWxsb2NXaXRoWm9uZTpkZWNvZGVyLnpvbmVdOworICAgIGlmICghYWxs
b2NhdGlvbikKKyAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZFVuYXJjaGl2ZU9w
ZXJhdGlvbkV4Y2VwdGlvbiBmb3JtYXQ6QCJDbGFzcyBcIiVAXCIgcmV0dXJuZWQgbmlsIGZyb20g
K2FsbG9jIHdoaWxlIGJlaW5nIGRlY29kZWQiLCBOU1N0cmluZ0Zyb21DbGFzcyhvYmplY3RDbGFz
cyldOworCisgICAgUmV0YWluUHRyPGlkPiByZXN1bHQgPSBhZG9wdE5TKFthbGxvY2F0aW9uIGlu
aXRXaXRoQ29kZXI6ZGVjb2Rlcl0pOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBbTlNFeGNl
cHRpb24gcmFpc2U6TlNJbnZhbGlkVW5hcmNoaXZlT3BlcmF0aW9uRXhjZXB0aW9uIGZvcm1hdDpA
Ik9iamVjdCBvZiBjbGFzcyBcIiVAXCIgcmV0dXJuZWQgbmlsIGZyb20gLWluaXRXaXRoQ29kZXI6
IHdoaWxlIGJlaW5nIGRlY29kZWQiLCBOU1N0cmluZ0Zyb21DbGFzcyhvYmplY3RDbGFzcyldOwor
CisgICAgcmVzdWx0ID0gW3Jlc3VsdCBhd2FrZUFmdGVyVXNpbmdDb2RlcjpkZWNvZGVyXTsKKyAg
ICBpZiAoIXJlc3VsdCkKKyAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZFVuYXJj
aGl2ZU9wZXJhdGlvbkV4Y2VwdGlvbiBmb3JtYXQ6QCJPYmplY3Qgb2YgY2xhc3MgXCIlQFwiIHJl
dHVybmVkIG5pbCBmcm9tIC1hd2FrZUFmdGVyVXNpbmdDb2Rlcjogd2hpbGUgYmVpbmcgZGVjb2Rl
ZCIsIE5TU3RyaW5nRnJvbUNsYXNzKG9iamVjdENsYXNzKV07CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitzdGF0aWMgTlNTdHJpbmcgKnBlZXJDZXJ0aWZpY2F0ZUtleSA9IEAiTlNFcnJvclBl
ZXJDZXJ0aWZpY2F0ZUNoYWluS2V5IjsKK3N0YXRpYyBOU1N0cmluZyAqcGVlclRydXN0S2V5ID0g
QCJOU1VSTEVycm9yRmFpbGluZ1VSTFBlZXJUcnVzdEVycm9yS2V5IjsKK3N0YXRpYyBOU1N0cmlu
ZyAqY2xpZW50Q2VydGlmaWNhdGVLZXkgPSBAIk5TRXJyb3JDbGllbnRDZXJ0aWZpY2F0ZUNoYWlu
S2V5IjsKKworc3RhdGljIFJldGFpblB0cjxOU0FycmF5PE5TRGF0YSAqPj4gdHJhbnNmb3JtQ2Vy
dGlmaWNhdGVzVG9EYXRhKE5TQXJyYXkgKmlucHV0KQoreworICAgIGF1dG8gZGF0YUFycmF5ID0g
YWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmlucHV0LmNv
dW50XSk7CisgICAgZm9yIChpZCBjZXJ0aWZpY2F0ZSBpbiBpbnB1dCkgeworICAgICAgICBpZiAo
Q0ZHZXRUeXBlSUQoY2VydGlmaWNhdGUpICE9IFNlY0NlcnRpZmljYXRlR2V0VHlwZUlEKCkpCisg
ICAgICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24g
Zm9ybWF0OkAiRXJyb3IgZW5jb2RpbmcgaW52YWxpZCBjZXJ0aWZpY2F0ZSBpbiBjaGFpbiJdOwor
ICAgICAgICBbZGF0YUFycmF5IGFkZE9iamVjdDooTlNEYXRhICopYWRvcHRDRihTZWNDZXJ0aWZp
Y2F0ZUNvcHlEYXRhKChTZWNDZXJ0aWZpY2F0ZVJlZiljZXJ0aWZpY2F0ZSkpLmdldCgpXTsKKyAg
ICB9CisgICAgcmV0dXJuIGRhdGFBcnJheTsKK30KKworc3RhdGljIFJldGFpblB0cjxOU0RhdGE+
IHRyYW5zZm9ybVRydXN0VG9EYXRhKFNlY1RydXN0UmVmIHRydXN0KQoreworICAgIGlmIChDRkdl
dFR5cGVJRCh0cnVzdCkgIT0gU2VjVHJ1c3RHZXRUeXBlSUQoKSkKKyAgICAgICAgW05TRXhjZXB0
aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIkVycm9yIGVuY29k
aW5nIGludmFsaWQgU2VjVHJ1c3RSZWYiXTsKKyAgICBDRkVycm9yUmVmIGVycm9yID0gbnVsbHB0
cjsKKyAgICBhdXRvIGRhdGEgPSBhZG9wdENGKFNlY1RydXN0U2VyaWFsaXplKHRydXN0LCAmZXJy
b3IpKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFs
aWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJFcnJvciBzZXJpYWxpemluZyBTZWNUcnVzdFJl
ZjogJUAiLCBlcnJvcl07CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIGVuY29k
ZUVycm9yKFdLUmVtb3RlT2JqZWN0RW5jb2RlciAqZW5jb2RlciwgTlNFcnJvciAqZXJyb3IpCit7
CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IGNvcHk7CisgICAgaWYgKGVycm9y
LnVzZXJJbmZvW19XS1JlY292ZXJ5QXR0ZW1wdGVyRXJyb3JLZXldKSB7CisgICAgICAgIGNvcHkg
PSBhZG9wdE5TKFtlcnJvci51c2VySW5mbyBtdXRhYmxlQ29weV0pOworICAgICAgICBbY29weSBy
ZW1vdmVPYmplY3RGb3JLZXk6X1dLUmVjb3ZlcnlBdHRlbXB0ZXJFcnJvcktleV07CisgICAgfQor
ICAgIGlmIChlcnJvci51c2VySW5mb1tjbGllbnRDZXJ0aWZpY2F0ZUtleV0pIHsKKyAgICAgICAg
aWYgKCFjb3B5KQorICAgICAgICAgICAgY29weSA9IGFkb3B0TlMoW2Vycm9yLnVzZXJJbmZvIG11
dGFibGVDb3B5XSk7CisgICAgICAgIFtjb3B5IHJlbW92ZU9iamVjdEZvcktleTpjbGllbnRDZXJ0
aWZpY2F0ZUtleV07CisgICAgfQorICAgIGlmIChOU0FycmF5ICpjZXJ0aWZpY2F0ZUNoYWluID0g
ZXJyb3IudXNlckluZm9bcGVlckNlcnRpZmljYXRlS2V5XSkgeworICAgICAgICBpZiAoIWNvcHkp
CisgICAgICAgICAgICBjb3B5ID0gYWRvcHROUyhbZXJyb3IudXNlckluZm8gbXV0YWJsZUNvcHld
KTsKKyAgICAgICAgY29weS5nZXQoKVtwZWVyQ2VydGlmaWNhdGVLZXldID0gdHJhbnNmb3JtQ2Vy
dGlmaWNhdGVzVG9EYXRhKGNlcnRpZmljYXRlQ2hhaW4pLmdldCgpOworICAgIH0KKyAgICBpZiAo
aWQgdHJ1c3QgPSBlcnJvci51c2VySW5mb1twZWVyVHJ1c3RLZXldKSB7CisgICAgICAgIGlmICgh
Y29weSkKKyAgICAgICAgICAgIGNvcHkgPSBhZG9wdE5TKFtlcnJvci51c2VySW5mbyBtdXRhYmxl
Q29weV0pOworICAgICAgICBjb3B5LmdldCgpW3BlZXJUcnVzdEtleV0gPSB0cmFuc2Zvcm1UcnVz
dFRvRGF0YSgoU2VjVHJ1c3RSZWYpdHJ1c3QpLmdldCgpOworICAgIH0KKyAgICBpZiAoIWNvcHkp
CisgICAgICAgIFtlcnJvciBlbmNvZGVXaXRoQ29kZXI6ZW5jb2Rlcl07CisgICAgZWxzZQorICAg
ICAgICBbW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOmVycm9yLmRvbWFpbiBjb2RlOmVycm9yLmNv
ZGUgdXNlckluZm86Y29weS5nZXQoKV0gZW5jb2RlV2l0aENvZGVyOmVuY29kZXJdOworfQorCitz
dGF0aWMgUmV0YWluUHRyPE5TQXJyYXk+IHRyYW5zZm9ybURhdGFUb0NlcnRpZmljYXRlcyhOU0Fy
cmF5ICppbnB1dCkKK3sKKyAgICBhdXRvIGFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5
IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmlucHV0LmNvdW50XSk7CisgICAgZm9yIChOU0RhdGEg
KmRhdGEgaW4gaW5wdXQpIHsKKyAgICAgICAgaWYgKENGR2V0VHlwZUlEKGRhdGEpICE9IENGRGF0
YUdldFR5cGVJRCgpKQorICAgICAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZFVu
YXJjaGl2ZU9wZXJhdGlvbkV4Y2VwdGlvbiBmb3JtYXQ6QCJFcnJvciBkZWNvZGluZyBjZXJ0aWZp
Y2F0ZSBmcm9tIG9iamVjdCB0aGF0IGlzIG5vdCBkYXRhICVAIiwgTlNTdHJpbmdGcm9tQ2xhc3Mo
W2RhdGEgY2xhc3NdKV07CisgICAgICAgIGF1dG8gY2VydGlmaWNhdGUgPSBhZG9wdENGKFNlY0Nl
cnRpZmljYXRlQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgKENGRGF0YVJlZilkYXRhKSk7CisgICAg
ICAgIGlmICghY2VydGlmaWNhdGUpCisgICAgICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJ
bnZhbGlkVW5hcmNoaXZlT3BlcmF0aW9uRXhjZXB0aW9uIGZvcm1hdDpAIkVycm9yIGRlY29kaW5n
IG52YWxpZCBjZXJ0aWZpY2F0ZSBpbiBjaGFpbiJdOworICAgICAgICBbYXJyYXkgYWRkT2JqZWN0
OihpZCljZXJ0aWZpY2F0ZS5nZXQoKV07CisgICAgfQorICAgIHJldHVybiBhcnJheTsKK30KKwor
c3RhdGljIFJldGFpblB0cjxpZD4gdHJhbnNmb3JtRGF0YVRvVHJ1c3QoTlNEYXRhICpkYXRhKQor
eworICAgIGlmIChDRkdldFR5cGVJRChkYXRhKSAhPSBDRkRhdGFHZXRUeXBlSUQoKSkKKyAgICAg
ICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZFVuYXJjaGl2ZU9wZXJhdGlvbkV4Y2VwdGlv
biBmb3JtYXQ6QCJJbnZhbGlkIFNlY1RydXN0UmVmIGRhdGEgJUAiLCBOU1N0cmluZ0Zyb21DbGFz
cyhbZGF0YSBjbGFzc10pXTsKKyAgICBDRkVycm9yUmVmIGVycm9yID0gbnVsbHB0cjsKKyAgICBh
dXRvIHRydXN0ID0gYWRvcHRDRihTZWNUcnVzdERlc2VyaWFsaXplKChDRkRhdGFSZWYpZGF0YSwg
JmVycm9yKSk7CisgICAgaWYgKGVycm9yIHx8ICF0cnVzdCkKKyAgICAgICAgW05TRXhjZXB0aW9u
IHJhaXNlOk5TSW52YWxpZFVuYXJjaGl2ZU9wZXJhdGlvbkV4Y2VwdGlvbiBmb3JtYXQ6QCJJbnZh
bGlkIFNlY1RydXN0UmVmICVAIiwgZXJyb3JdOworICAgIHJldHVybiB0cnVzdDsKK30KKworc3Rh
dGljIFJldGFpblB0cjxOU0Vycm9yPiBkZWNvZGVFcnJvcihXS1JlbW90ZU9iamVjdERlY29kZXIg
KmRlY29kZXIpCit7CisgICAgUmV0YWluUHRyPE5TRXJyb3I+IGVycm9yID0gZGVjb2RlT2JqQ09i
amVjdChkZWNvZGVyLCBbTlNFcnJvciBjbGFzc10pOworICAgIFJldGFpblB0cjxOU011dGFibGVE
aWN0aW9uYXJ5PiBjb3B5OworICAgIGlmIChOU0FycmF5ICpjZXJ0aWZpY2F0ZUNoYWluID0gZXJy
b3IuZ2V0KCkudXNlckluZm9bcGVlckNlcnRpZmljYXRlS2V5XSkgeworICAgICAgICBjb3B5ID0g
YWRvcHROUyhbZXJyb3IuZ2V0KCkudXNlckluZm8gbXV0YWJsZUNvcHldKTsKKyAgICAgICAgY29w
eS5nZXQoKVtwZWVyQ2VydGlmaWNhdGVLZXldID0gdHJhbnNmb3JtRGF0YVRvQ2VydGlmaWNhdGVz
KGNlcnRpZmljYXRlQ2hhaW4pLmdldCgpOworICAgIH0KKyAgICBpZiAoTlNEYXRhICp0cnVzdCA9
IGVycm9yLmdldCgpLnVzZXJJbmZvW3BlZXJUcnVzdEtleV0pIHsKKyAgICAgICAgaWYgKCFjb3B5
KQorICAgICAgICAgICAgY29weSA9IGFkb3B0TlMoW2Vycm9yLmdldCgpLnVzZXJJbmZvIG11dGFi
bGVDb3B5XSk7CisgICAgICAgIGNvcHkuZ2V0KClbcGVlclRydXN0S2V5XSA9IHRyYW5zZm9ybURh
dGFUb1RydXN0KHRydXN0KS5nZXQoKTsKKyAgICB9CisgICAgaWYgKCFjb3B5KQorICAgICAgICBy
ZXR1cm4gZXJyb3I7CisgICAgcmV0dXJuIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjplcnJvci5n
ZXQoKS5kb21haW4gY29kZTplcnJvci5nZXQoKS5jb2RlIHVzZXJJbmZvOmNvcHkuZ2V0KCldOwor
fQorCiBzdGF0aWMgdm9pZCBlbmNvZGVPYmplY3QoV0tSZW1vdGVPYmplY3RFbmNvZGVyICplbmNv
ZGVyLCBpZCBvYmplY3QpCiB7CiAgICAgQVNTRVJUKG9iamVjdCk7CkBAIC0zMzcsNiArNDUyLDkg
QEAgc3RhdGljIHZvaWQgZW5jb2RlT2JqZWN0KFdLUmVtb3RlT2JqZWN0RW5jb2RlciAqZW5jb2Rl
ciwgaWQgb2JqZWN0KQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgaWYgKG9iamVjdENs
YXNzID09IFtOU0Vycm9yIGNsYXNzXSkKKyAgICAgICAgcmV0dXJuIGVuY29kZUVycm9yKGVuY29k
ZXIsIG9iamVjdCk7CisgICAgCiAgICAgW29iamVjdCBlbmNvZGVXaXRoQ29kZXI6ZW5jb2Rlcl07
CiB9CiAKQEAgLTg3MywyMyArOTkxLDE0IEBAIHN0YXRpYyBpZCBkZWNvZGVPYmplY3QoV0tSZW1v
dGVPYmplY3REZWNvZGVyICpkZWNvZGVyKQogCiAgICAgaWYgKG9iamVjdENsYXNzID09IFtOU1N0
cmluZyBjbGFzc10pCiAgICAgICAgIHJldHVybiBkZWNvZGVTdHJpbmcoZGVjb2Rlcik7CisgICAg
CisgICAgaWYgKG9iamVjdENsYXNzID09IFtOU0Vycm9yIGNsYXNzXSkKKyAgICAgICAgcmV0dXJu
IGRlY29kZUVycm9yKGRlY29kZXIpLmF1dG9yZWxlYXNlKCk7CiAKICAgICBpZiAob2JqZWN0Q2xh
c3MgPT0gW05TTXV0YWJsZVN0cmluZyBjbGFzc10pCiAgICAgICAgIHJldHVybiBbTlNNdXRhYmxl
U3RyaW5nIHN0cmluZ1dpdGhTdHJpbmc6ZGVjb2RlU3RyaW5nKGRlY29kZXIpXTsKIAotICAgIGlk
IHJlc3VsdCA9IFtvYmplY3RDbGFzcyBhbGxvY1dpdGhab25lOmRlY29kZXIuem9uZV07Ci0gICAg
aWYgKCFyZXN1bHQpCi0gICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRVbmFyY2hp
dmVPcGVyYXRpb25FeGNlcHRpb24gZm9ybWF0OkAiQ2xhc3MgXCIlc1wiIHJldHVybmVkIG5pbCBm
cm9tICthbGxvYyB3aGlsZSBiZWluZyBkZWNvZGVkIiwgY2xhc3NOYW1lLmRhdGEoKV07Ci0KLSAg
ICByZXN1bHQgPSBbcmVzdWx0IGluaXRXaXRoQ29kZXI6ZGVjb2Rlcl07Ci0gICAgaWYgKCFyZXN1
bHQpCi0gICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRVbmFyY2hpdmVPcGVyYXRp
b25FeGNlcHRpb24gZm9ybWF0OkAiT2JqZWN0IG9mIGNsYXNzIFwiJXNcIiByZXR1cm5lZCBuaWwg
ZnJvbSAtaW5pdFdpdGhDb2Rlcjogd2hpbGUgYmVpbmcgZGVjb2RlZCIsIGNsYXNzTmFtZS5kYXRh
KCldOwotCi0gICAgcmVzdWx0ID0gW3Jlc3VsdCBhd2FrZUFmdGVyVXNpbmdDb2RlcjpkZWNvZGVy
XTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxp
ZFVuYXJjaGl2ZU9wZXJhdGlvbkV4Y2VwdGlvbiBmb3JtYXQ6QCJPYmplY3Qgb2YgY2xhc3MgXCIl
c1wiIHJldHVybmVkIG5pbCBmcm9tIC1hd2FrZUFmdGVyVXNpbmdDb2Rlcjogd2hpbGUgYmVpbmcg
ZGVjb2RlZCIsIGNsYXNzTmFtZS5kYXRhKCldOwotCi0gICAgcmV0dXJuIFtyZXN1bHQgYXV0b3Jl
bGVhc2VdOworICAgIHJldHVybiBkZWNvZGVPYmpDT2JqZWN0KGRlY29kZXIsIG9iamVjdENsYXNz
KS5hdXRvcmVsZWFzZSgpOwogfQogCiBzdGF0aWMgaWQgZGVjb2RlT2JqZWN0KFdLUmVtb3RlT2Jq
ZWN0RGVjb2RlciAqZGVjb2RlciwgY29uc3QgQVBJOjpEaWN0aW9uYXJ5KiBkaWN0aW9uYXJ5LCBj
b25zdCBIYXNoU2V0PENGVHlwZVJlZj4mIGFsbG93ZWRDbGFzc2VzKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDU5ZWNlOWFkYjRmYThjZGFhZmRl
ODQwOWI3MDkzNjZiMTk1NDBhMDAuLjkxMjIyZDE5NzkyM2IzNGY3M2RlNzM4ZDUyN2RkNDA4NzRj
YmI0MDkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNiBAQAorMjAyMS0wMy0wMiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3Rl
bnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFdLUmVtb3RlT2JqZWN0Q29kZXIgc2hvdWxkIGJl
IGFibGUgdG8gaGFuZGxlIE5TRXJyb3JzIGZyb20gVExTIGZhaWx1cmVzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjI0MDEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvUmVtb3RlT2JqZWN0UmVnaXN0cnkuaDoKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1JlbW90ZU9iamVjdFJlZ2lzdHJ5Lm1tOgorICAgICAgICAo
VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZW1vdGVP
YmplY3RSZWdpc3RyeVBsdWdJbi5tbToKKyAgICAgICAgKC1bUmVtb3RlT2JqZWN0UmVnaXN0cnlQ
bHVnSW4gc2VuZEVycm9yOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorCiAyMDIxLTAzLTAyICBBYWth
c2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIGJ1aWxkLndl
YmtpdC5vcmcgbG9hZGNvbmZpZyBzaW1pbGFyIHRvIEVXUwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZW1vdGVPYmplY3RSZWdpc3RyeS5oIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZW1vdGVPYmplY3RSZWdpc3RyeS5o
CmluZGV4IDc3YTYwN2MzMjA5ZDQzMTIwM2U4NjdhYTBkOGMzYWI2NmRhNmZmODguLmYyNDdhMjVj
MDIxZmUxNjUxZTY1YzA1Njg2ZjNiY2QzYTIxMzUwOTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVtb3RlT2JqZWN0UmVnaXN0cnkuaAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1JlbW90ZU9iamVjdFJlZ2lzdHJ5
LmgKQEAgLTUyLDYgKzUyLDcgQEAKIC0gKHZvaWQpZG9Ob3RDYWxsQ29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKCkpY29tcGxldGlvbkhhbmRsZXI7CiAtICh2b2lkKXNlbmRSZXF1ZXN0OihOU1VS
TFJlcXVlc3QgKilyZXF1ZXN0IHJlc3BvbnNlOihOU1VSTFJlc3BvbnNlICopcmVzcG9uc2UgY2hh
bGxlbmdlOihOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlICopY2hhbGxlbmdlIGVycm9yOihO
U0Vycm9yICopZXJyb3IgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TVVJMUmVxdWVzdCAq
LCBOU1VSTFJlc3BvbnNlICosIE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgKiwgTlNFcnJv
ciAqKSljb21wbGV0aW9uSGFuZGxlcjsKIC0gKHZvaWQpY2FsbFVJUHJvY2Vzc01ldGhvZFdpdGhS
ZXBseUJsb2NrOworLSAodm9pZClzZW5kRXJyb3I6KE5TRXJyb3IgKillcnJvciBjb21wbGV0aW9u
SGFuZGxlcjoodm9pZCAoXikoTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsKIAogQGVuZAog
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1JlbW90
ZU9iamVjdFJlZ2lzdHJ5Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9SZW1vdGVPYmplY3RSZWdpc3RyeS5tbQppbmRleCBmZGVmYmFlMjA2ZDIyYWY3MWVmOTI1MmU5
MmE2MjU0OTU5M2ZkZjhmLi5jYzZlZmNhODlmYjJhNjdkYjA1ZDkyZWRhOGFhMjdiMGYyZGJjMjVm
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1JlbW90
ZU9iamVjdFJlZ2lzdHJ5Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvUmVtb3RlT2JqZWN0UmVnaXN0cnkubW0KQEAgLTI1LDkgKzI1LDExIEBACiAKICNpbXBv
cnQgImNvbmZpZy5oIgogCisjaW1wb3J0ICJIVFRQU2VydmVyLmgiCiAjaW1wb3J0ICJQbGF0Zm9y
bVV0aWxpdGllcy5oIgogI2ltcG9ydCAiUmVtb3RlT2JqZWN0UmVnaXN0cnkuaCIKICNpbXBvcnQg
IlRlc3QuaCIKKyNpbXBvcnQgIlRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUuaCIKICNpbXBvcnQgIldL
V2ViVmlld0NvbmZpZ3VyYXRpb25FeHRyYXMuaCIKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQ
b29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KQEAgLTM4
LDcgKzQwLDcgQEAKICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9XZWFr
T2JqQ1B0ci5oPgogCi1URVNUKFdlYktpdCwgUmVtb3RlT2JqZWN0UmVnaXN0cnkpCitURVNUKFJl
bW90ZU9iamVjdFJlZ2lzdHJ5LCBCYXNpYykKIHsKICAgICBfX2Jsb2NrIGJvb2wgaXNEb25lID0g
ZmFsc2U7CiAKQEAgLTE5Niw3ICsxOTgsNyBAQCBURVNUKFdlYktpdCwgUmVtb3RlT2JqZWN0UmVn
aXN0cnkpCiAKIEBlbmQKIAotVEVTVChXZWJLaXQsIFJlbW90ZU9iamVjdFJlZ2lzdHJ5X0NhbGxS
ZXBseUJsb2NrQWZ0ZXJPcmlnaW5hdGluZ1dlYlZpZXdEZWFsbG9jYXRlcykKK1RFU1QoUmVtb3Rl
T2JqZWN0UmVnaXN0cnksIENhbGxSZXBseUJsb2NrQWZ0ZXJPcmlnaW5hdGluZ1dlYlZpZXdEZWFs
bG9jYXRlcykKIHsKICAgICBhdXRvIGxvY2FsT2JqZWN0ID0gYWRvcHROUyhbW0xvY2FsT2JqZWN0
IGFsbG9jXSBpbml0XSk7CiAgICAgV2Vha09iakNQdHI8V0tXZWJWaWV3PiB3ZWFrV2ViVmlld1B0
cjsKQEAgLTIyOCwzICsyMzAsMjggQEAgVEVTVChXZWJLaXQsIFJlbW90ZU9iamVjdFJlZ2lzdHJ5
X0NhbGxSZXBseUJsb2NrQWZ0ZXJPcmlnaW5hdGluZ1dlYlZpZXdEZWFsbG9jYXQKIAogICAgIGxv
Y2FsT2JqZWN0LT5jb21wbGV0aW9uSGFuZGxlckZyb21XZWJQcm9jZXNzKCk7CiB9CisKK1RFU1Qo
UmVtb3RlT2JqZWN0UmVnaXN0cnksIFNlcmlhbGl6ZUVycm9yV2l0aENlcnRpZmljYXRlcykKK3sK
KyAgICBUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyIHNlcnZlcih7IH0sIFRlc3RXZWJLaXRBUEk6
OkhUVFBTZXJ2ZXI6OlByb3RvY29sOjpIdHRwcyk7CisgICAgYXV0byB3ZWJWaWV3ID0gW1tbV0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdFplcm8gY29uZmlndXJhdGlvbjpbV0tX
ZWJWaWV3Q29uZmlndXJhdGlvbiBfdGVzdF9jb25maWd1cmF0aW9uV2l0aFRlc3RQbHVnSW5DbGFz
c05hbWU6QCJSZW1vdGVPYmplY3RSZWdpc3RyeVBsdWdJbiJdXSBhdXRvcmVsZWFzZV07CisgICAg
YXV0byBkZWxlZ2F0ZSA9IFtbVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZSBuZXddIGF1dG9yZWxlYXNl
XTsKKyAgICB3ZWJWaWV3Lm5hdmlnYXRpb25EZWxlZ2F0ZSA9IGRlbGVnYXRlOworICAgIFt3ZWJW
aWV3IGxvYWRSZXF1ZXN0OnNlcnZlci5yZXF1ZXN0KCldOworICAgIE5TRXJyb3IgKmVycm9yID0g
W2RlbGVnYXRlIHdhaXRGb3JEaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0aW9uXTsKKyAgICBOU1N0
cmluZyAqa2V5ID0gQCJOU0Vycm9yUGVlckNlcnRpZmljYXRlQ2hhaW5LZXkiOworICAgIEVYUEVD
VF9XS19TVFJFUShlcnJvci5kb21haW4sICJOU1VSTEVycm9yRG9tYWluIik7CisgICAgRVhQRUNU
X1RSVUUoZXJyb3IudXNlckluZm9ba2V5XSk7CisgICAgCisgICAgX1dLUmVtb3RlT2JqZWN0SW50
ZXJmYWNlICppbnRlcmZhY2UgPSBbX1dLUmVtb3RlT2JqZWN0SW50ZXJmYWNlIHJlbW90ZU9iamVj
dEludGVyZmFjZVdpdGhQcm90b2NvbDpAcHJvdG9jb2woUmVtb3RlT2JqZWN0UHJvdG9jb2wpXTsK
KyAgICBpZCA8UmVtb3RlT2JqZWN0UHJvdG9jb2w+IG9iamVjdCA9IFtbd2ViVmlldyBfcmVtb3Rl
T2JqZWN0UmVnaXN0cnldIHJlbW90ZU9iamVjdFByb3h5V2l0aEludGVyZmFjZTppbnRlcmZhY2Vd
OworICAgIF9fYmxvY2sgYm9vbCByb3VuZFRyaXBDb21wbGV0ZSA9IGZhbHNlOworICAgIFtvYmpl
Y3Qgc2VuZEVycm9yOmVycm9yIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNFcnJvciAqZGVzZXJpYWxp
emVkRXJyb3IpIHsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKGRlc2VyaWFsaXplZEVycm9yLmRv
bWFpbiwgIk5TVVJMRXJyb3JEb21haW4iKTsKKyAgICAgICAgTlNBcnJheSAqY2hhaW4gPSBkZXNl
cmlhbGl6ZWRFcnJvci51c2VySW5mb1trZXldOworICAgICAgICBFWFBFQ1RfVFJVRShjaGFpbik7
CisgICAgICAgIEVYUEVDVF9FUShDRkdldFR5cGVJRChjaGFpblswXSksIFNlY0NlcnRpZmljYXRl
R2V0VHlwZUlEKCkpOworICAgICAgICByb3VuZFRyaXBDb21wbGV0ZSA9IHRydWU7CisgICAgfV07
CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyb3VuZFRyaXBDb21wbGV0ZSk7Cit9CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1JlbW90ZU9i
amVjdFJlZ2lzdHJ5UGx1Z0luLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9SZW1vdGVPYmplY3RSZWdpc3RyeVBsdWdJbi5tbQppbmRleCBkZDcwZTRmNjM2N2NiNDVi
YzIzZDAzNzVlZWFiYzUyNDgzNjAwOGViLi5iMWE3YTc0NjRmZDVlNGQ3YTA0YTAyYzYyNDNlMDI3
NzlmNDg0MzVkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1JlbW90ZU9iamVjdFJlZ2lzdHJ5UGx1Z0luLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVtb3RlT2JqZWN0UmVnaXN0cnlQbHVnSW4ubW0KQEAgLTEx
OCw2ICsxMTgsMTEgQEAKICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXF1ZXN0LCByZXNwb25zZSwg
Y2hhbGxlbmdlLCBlcnJvcik7CiB9CiAKKy0gKHZvaWQpc2VuZEVycm9yOihOU0Vycm9yICopZXJy
b3IgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRs
ZXIKK3sKKyAgICBjb21wbGV0aW9uSGFuZGxlcihlcnJvcik7Cit9CisKIC0gKHZvaWQpY2FsbFVJ
UHJvY2Vzc01ldGhvZFdpdGhSZXBseUJsb2NrCiB7CiAgICAgaWQgPExvY2FsT2JqZWN0UHJvdG9j
b2w+IGxvY2FsT2JqZWN0ID0gW1tfYnJvd3NlckNvbnRleHRDb250cm9sbGVyIF9yZW1vdGVPYmpl
Y3RSZWdpc3RyeV0gcmVtb3RlT2JqZWN0UHJveHlXaXRoSW50ZXJmYWNlOmxvY2FsT2JqZWN0SW50
ZXJmYWNlKCldOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>422042</attachid>
            <date>2021-03-02 21:29:14 -0800</date>
            <delta_ts>2021-03-03 22:31:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222401-20210302212913.patch</filename>
            <type>text/plain</type>
            <size>14576</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczNzQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGY5OTc3ODVjZmVjYTk1Njcz
NWIwNWQyNjU5ODkxZTM1N2U3Yzg0NTcuLjJlMWFjMTBkMDkwNTRhNWNjMTU5NTZmYmRmMTQ1NDQ5
ZDY4OWFhMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMjEtMDMtMDIgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBXS1JlbW90ZU9i
amVjdENvZGVyIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSBOU0Vycm9ycyBmcm9tIFRMUyBmYWls
dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIy
NDAxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MjEwMzg2NT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOU0Vycm9ycyBmcm9tIFRMUyBmYWlsdXJl
cyBjb250YWluIHZhbHVlcyBsaWtlIGEgU2VjVHJ1c3RSZWYgb3IgYSBTZWNDZXJ0aWZpY2F0ZVJl
ZiwKKyAgICAgICAgd2hpY2ggYXJlIG5vdCBPYmpDIG9iamVjdHMsIGFuZCB0aGV5IGRvbid0IGxp
a2UgaXQgd2hlbiB5b3UgY2FsbCBlbmNvZGVXaXRoQ29kZXI6IG9uIHRoZW0uCisgICAgICAgIFVu
dGlsIHIyNzMxNDEgaXQgd291bGQgY3Jhc2ggd2hlbiB3ZSBkbywgYnV0IGV2ZW4gYWZ0ZXIgdGhh
dCB3ZSBqdXN0IGRlY29kZSBhIG5pbCBOU0Vycm9yLgorICAgICAgICBBZGQgYSBzcGVjaWFsIGNh
c2UgbGlrZSB3ZSBkaWQgaW4gZW5jb2RlTlNFcnJvciB0byBzdWNjZXNzZnVsbHkgZW5jb2RlIGFu
ZCBkZWNvZGUgdGhlc2UgZXJyb3JzLgorCisgICAgICAgICogU2hhcmVkL0FQSS9Db2NvYS9XS1Jl
bW90ZU9iamVjdENvZGVyLm1tOgorICAgICAgICAoZGVjb2RlT2JqQ09iamVjdCk6CisgICAgICAg
ICh0cmFuc2Zvcm1DZXJ0aWZpY2F0ZXNUb0RhdGEpOgorICAgICAgICAodHJhbnNmb3JtVHJ1c3RU
b0RhdGEpOgorICAgICAgICAoZW5jb2RlRXJyb3IpOgorICAgICAgICAodHJhbnNmb3JtRGF0YVRv
Q2VydGlmaWNhdGVzKToKKyAgICAgICAgKHRyYW5zZm9ybURhdGFUb1RydXN0KToKKyAgICAgICAg
KGRlY29kZUVycm9yKToKKyAgICAgICAgKGVuY29kZU9iamVjdCk6CisgICAgICAgIChkZWNvZGVP
YmplY3QpOgorCiAyMDIxLTAzLTAyICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyNjMwOTQpOiBbR1RLXVtXUEVdIEFQSSB0
ZXN0IC93ZWJraXQvV2ViS2l0V2ViQ29udGV4dC9sYW5ndWFnZXMgaXMgZmFpbGluZwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dLUmVtb3RlT2JqZWN0Q29kZXIu
bW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tSZW1vdGVPYmplY3RDb2Rlci5t
bQppbmRleCA1ZGUxOTViMDNiZjZiNTAwYTQ5ZjRiMmQ5YjBhNWUxNjJlZGNjYTJhLi44OGFkODM4
MjdhZDllNjEyNjZhMGIzZWVjZWJlYzg3NDkzN2ZhYmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tSZW1vdGVPYmplY3RDb2Rlci5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tSZW1vdGVPYmplY3RDb2Rlci5tbQpAQCAtMzMsNiAr
MzMsNyBAQAogI2ltcG9ydCAiQVBJU3RyaW5nLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1w
b3J0ICJOU0ludm9jYXRpb25TUEkuaCIKKyNpbXBvcnQgIl9XS0Vycm9yUmVjb3ZlcnlBdHRlbXB0
aW5nLmgiCiAjaW1wb3J0ICJfV0tSZW1vdGVPYmplY3RJbnRlcmZhY2VJbnRlcm5hbC5oIgogI2lt
cG9ydCA8b2JqYy9ydW50aW1lLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CkBAIC0yOTks
NiArMzAwLDEyMCBAQCBzdGF0aWMgdm9pZCBlbmNvZGVTdHJpbmcoV0tSZW1vdGVPYmplY3RFbmNv
ZGVyICplbmNvZGVyLCBOU1N0cmluZyAqc3RyaW5nKQogICAgIGVuY29kZXItPl9jdXJyZW50RGlj
dGlvbmFyeS0+c2V0KHN0cmluZ0tleSwgQVBJOjpTdHJpbmc6OmNyZWF0ZShzdHJpbmcpKTsKIH0K
IAorc3RhdGljIFJldGFpblB0cjxpZD4gZGVjb2RlT2JqQ09iamVjdChXS1JlbW90ZU9iamVjdERl
Y29kZXIgKmRlY29kZXIsIENsYXNzIG9iamVjdENsYXNzKQoreworICAgIGlkIGFsbG9jYXRpb24g
PSBbb2JqZWN0Q2xhc3MgYWxsb2NXaXRoWm9uZTpkZWNvZGVyLnpvbmVdOworICAgIGlmICghYWxs
b2NhdGlvbikKKyAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZFVuYXJjaGl2ZU9w
ZXJhdGlvbkV4Y2VwdGlvbiBmb3JtYXQ6QCJDbGFzcyBcIiVAXCIgcmV0dXJuZWQgbmlsIGZyb20g
K2FsbG9jIHdoaWxlIGJlaW5nIGRlY29kZWQiLCBOU1N0cmluZ0Zyb21DbGFzcyhvYmplY3RDbGFz
cyldOworCisgICAgUmV0YWluUHRyPGlkPiByZXN1bHQgPSBhZG9wdE5TKFthbGxvY2F0aW9uIGlu
aXRXaXRoQ29kZXI6ZGVjb2Rlcl0pOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBbTlNFeGNl
cHRpb24gcmFpc2U6TlNJbnZhbGlkVW5hcmNoaXZlT3BlcmF0aW9uRXhjZXB0aW9uIGZvcm1hdDpA
Ik9iamVjdCBvZiBjbGFzcyBcIiVAXCIgcmV0dXJuZWQgbmlsIGZyb20gLWluaXRXaXRoQ29kZXI6
IHdoaWxlIGJlaW5nIGRlY29kZWQiLCBOU1N0cmluZ0Zyb21DbGFzcyhvYmplY3RDbGFzcyldOwor
CisgICAgcmVzdWx0ID0gW3Jlc3VsdCBhd2FrZUFmdGVyVXNpbmdDb2RlcjpkZWNvZGVyXTsKKyAg
ICBpZiAoIXJlc3VsdCkKKyAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZFVuYXJj
aGl2ZU9wZXJhdGlvbkV4Y2VwdGlvbiBmb3JtYXQ6QCJPYmplY3Qgb2YgY2xhc3MgXCIlQFwiIHJl
dHVybmVkIG5pbCBmcm9tIC1hd2FrZUFmdGVyVXNpbmdDb2Rlcjogd2hpbGUgYmVpbmcgZGVjb2Rl
ZCIsIE5TU3RyaW5nRnJvbUNsYXNzKG9iamVjdENsYXNzKV07CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitzdGF0aWMgY29uc3RleHByIE5TU3RyaW5nICpwZWVyQ2VydGlmaWNhdGVLZXkgPSBA
Ik5TRXJyb3JQZWVyQ2VydGlmaWNhdGVDaGFpbktleSI7CitzdGF0aWMgY29uc3RleHByIE5TU3Ry
aW5nICpwZWVyVHJ1c3RLZXkgPSBAIk5TVVJMRXJyb3JGYWlsaW5nVVJMUGVlclRydXN0RXJyb3JL
ZXkiOworc3RhdGljIGNvbnN0ZXhwciBOU1N0cmluZyAqY2xpZW50Q2VydGlmaWNhdGVLZXkgPSBA
Ik5TRXJyb3JDbGllbnRDZXJ0aWZpY2F0ZUNoYWluS2V5IjsKKworc3RhdGljIFJldGFpblB0cjxO
U0FycmF5PE5TRGF0YSAqPj4gdHJhbnNmb3JtQ2VydGlmaWNhdGVzVG9EYXRhKE5TQXJyYXkgKmlu
cHV0KQoreworICAgIGF1dG8gZGF0YUFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0V2l0aENhcGFjaXR5OmlucHV0LmNvdW50XSk7CisgICAgZm9yIChpZCBjZXJ0aWZp
Y2F0ZSBpbiBpbnB1dCkgeworICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQoY2VydGlmaWNhdGUpICE9
IFNlY0NlcnRpZmljYXRlR2V0VHlwZUlEKCkpCisgICAgICAgICAgICBbTlNFeGNlcHRpb24gcmFp
c2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiRXJyb3IgZW5jb2RpbmcgaW52
YWxpZCBjZXJ0aWZpY2F0ZSBpbiBjaGFpbiJdOworICAgICAgICBbZGF0YUFycmF5IGFkZE9iamVj
dDooTlNEYXRhICopYWRvcHRDRihTZWNDZXJ0aWZpY2F0ZUNvcHlEYXRhKChTZWNDZXJ0aWZpY2F0
ZVJlZiljZXJ0aWZpY2F0ZSkpLmdldCgpXTsKKyAgICB9CisgICAgcmV0dXJuIGRhdGFBcnJheTsK
K30KKworc3RhdGljIFJldGFpblB0cjxOU0RhdGE+IHRyYW5zZm9ybVRydXN0VG9EYXRhKFNlY1Ry
dXN0UmVmIHRydXN0KQoreworICAgIGlmIChDRkdldFR5cGVJRCh0cnVzdCkgIT0gU2VjVHJ1c3RH
ZXRUeXBlSUQoKSkKKyAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50
RXhjZXB0aW9uIGZvcm1hdDpAIkVycm9yIGVuY29kaW5nIGludmFsaWQgU2VjVHJ1c3RSZWYiXTsK
KyAgICBDRkVycm9yUmVmIGVycm9yID0gbnVsbHB0cjsKKyAgICBhdXRvIGRhdGEgPSBhZG9wdENG
KFNlY1RydXN0U2VyaWFsaXplKHRydXN0LCAmZXJyb3IpKTsKKyAgICBpZiAoZXJyb3IpCisgICAg
ICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6
QCJFcnJvciBzZXJpYWxpemluZyBTZWNUcnVzdFJlZjogJUAiLCBlcnJvcl07CisgICAgcmV0dXJu
IGRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIGVuY29kZUVycm9yKFdLUmVtb3RlT2JqZWN0RW5jb2Rl
ciAqZW5jb2RlciwgTlNFcnJvciAqZXJyb3IpCit7CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZURp
Y3Rpb25hcnk+IGNvcHk7CisgICAgaWYgKGVycm9yLnVzZXJJbmZvW19XS1JlY292ZXJ5QXR0ZW1w
dGVyRXJyb3JLZXldKSB7CisgICAgICAgIGNvcHkgPSBhZG9wdE5TKFtlcnJvci51c2VySW5mbyBt
dXRhYmxlQ29weV0pOworICAgICAgICBbY29weSByZW1vdmVPYmplY3RGb3JLZXk6X1dLUmVjb3Zl
cnlBdHRlbXB0ZXJFcnJvcktleV07CisgICAgfQorICAgIGlmIChlcnJvci51c2VySW5mb1tjbGll
bnRDZXJ0aWZpY2F0ZUtleV0pIHsKKyAgICAgICAgaWYgKCFjb3B5KQorICAgICAgICAgICAgY29w
eSA9IGFkb3B0TlMoW2Vycm9yLnVzZXJJbmZvIG11dGFibGVDb3B5XSk7CisgICAgICAgIFtjb3B5
IHJlbW92ZU9iamVjdEZvcktleTpjbGllbnRDZXJ0aWZpY2F0ZUtleV07CisgICAgfQorICAgIGlm
IChOU0FycmF5ICpjZXJ0aWZpY2F0ZUNoYWluID0gZXJyb3IudXNlckluZm9bcGVlckNlcnRpZmlj
YXRlS2V5XSkgeworICAgICAgICBpZiAoIWNvcHkpCisgICAgICAgICAgICBjb3B5ID0gYWRvcHRO
UyhbZXJyb3IudXNlckluZm8gbXV0YWJsZUNvcHldKTsKKyAgICAgICAgY29weS5nZXQoKVtwZWVy
Q2VydGlmaWNhdGVLZXldID0gdHJhbnNmb3JtQ2VydGlmaWNhdGVzVG9EYXRhKGNlcnRpZmljYXRl
Q2hhaW4pLmdldCgpOworICAgIH0KKyAgICBpZiAoaWQgdHJ1c3QgPSBlcnJvci51c2VySW5mb1tw
ZWVyVHJ1c3RLZXldKSB7CisgICAgICAgIGlmICghY29weSkKKyAgICAgICAgICAgIGNvcHkgPSBh
ZG9wdE5TKFtlcnJvci51c2VySW5mbyBtdXRhYmxlQ29weV0pOworICAgICAgICBjb3B5LmdldCgp
W3BlZXJUcnVzdEtleV0gPSB0cmFuc2Zvcm1UcnVzdFRvRGF0YSgoU2VjVHJ1c3RSZWYpdHJ1c3Qp
LmdldCgpOworICAgIH0KKyAgICBpZiAoIWNvcHkpCisgICAgICAgIFtlcnJvciBlbmNvZGVXaXRo
Q29kZXI6ZW5jb2Rlcl07CisgICAgZWxzZQorICAgICAgICBbW05TRXJyb3IgZXJyb3JXaXRoRG9t
YWluOmVycm9yLmRvbWFpbiBjb2RlOmVycm9yLmNvZGUgdXNlckluZm86Y29weS5nZXQoKV0gZW5j
b2RlV2l0aENvZGVyOmVuY29kZXJdOworfQorCitzdGF0aWMgUmV0YWluUHRyPE5TQXJyYXk+IHRy
YW5zZm9ybURhdGFUb0NlcnRpZmljYXRlcyhOU0FycmF5ICppbnB1dCkKK3sKKyAgICBhdXRvIGFy
cmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Omlu
cHV0LmNvdW50XSk7CisgICAgZm9yIChOU0RhdGEgKmRhdGEgaW4gaW5wdXQpIHsKKyAgICAgICAg
aWYgKENGR2V0VHlwZUlEKGRhdGEpICE9IENGRGF0YUdldFR5cGVJRCgpKQorICAgICAgICAgICAg
W05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZFVuYXJjaGl2ZU9wZXJhdGlvbkV4Y2VwdGlvbiBm
b3JtYXQ6QCJFcnJvciBkZWNvZGluZyBjZXJ0aWZpY2F0ZSBmcm9tIG9iamVjdCB0aGF0IGlzIG5v
dCBkYXRhICVAIiwgTlNTdHJpbmdGcm9tQ2xhc3MoW2RhdGEgY2xhc3NdKV07CisgICAgICAgIGF1
dG8gY2VydGlmaWNhdGUgPSBhZG9wdENGKFNlY0NlcnRpZmljYXRlQ3JlYXRlV2l0aERhdGEobnVs
bHB0ciwgKENGRGF0YVJlZilkYXRhKSk7CisgICAgICAgIGlmICghY2VydGlmaWNhdGUpCisgICAg
ICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkVW5hcmNoaXZlT3BlcmF0aW9uRXhj
ZXB0aW9uIGZvcm1hdDpAIkVycm9yIGRlY29kaW5nIG52YWxpZCBjZXJ0aWZpY2F0ZSBpbiBjaGFp
biJdOworICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OihpZCljZXJ0aWZpY2F0ZS5nZXQoKV07Cisg
ICAgfQorICAgIHJldHVybiBhcnJheTsKK30KKworc3RhdGljIFJldGFpblB0cjxpZD4gdHJhbnNm
b3JtRGF0YVRvVHJ1c3QoTlNEYXRhICpkYXRhKQoreworICAgIGlmIChDRkdldFR5cGVJRChkYXRh
KSAhPSBDRkRhdGFHZXRUeXBlSUQoKSkKKyAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52
YWxpZFVuYXJjaGl2ZU9wZXJhdGlvbkV4Y2VwdGlvbiBmb3JtYXQ6QCJJbnZhbGlkIFNlY1RydXN0
UmVmIGRhdGEgJUAiLCBOU1N0cmluZ0Zyb21DbGFzcyhbZGF0YSBjbGFzc10pXTsKKyAgICBDRkVy
cm9yUmVmIGVycm9yID0gbnVsbHB0cjsKKyAgICBhdXRvIHRydXN0ID0gYWRvcHRDRihTZWNUcnVz
dERlc2VyaWFsaXplKChDRkRhdGFSZWYpZGF0YSwgJmVycm9yKSk7CisgICAgaWYgKGVycm9yIHx8
ICF0cnVzdCkKKyAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZFVuYXJjaGl2ZU9w
ZXJhdGlvbkV4Y2VwdGlvbiBmb3JtYXQ6QCJJbnZhbGlkIFNlY1RydXN0UmVmICVAIiwgZXJyb3Jd
OworICAgIHJldHVybiB0cnVzdDsKK30KKworc3RhdGljIFJldGFpblB0cjxOU0Vycm9yPiBkZWNv
ZGVFcnJvcihXS1JlbW90ZU9iamVjdERlY29kZXIgKmRlY29kZXIpCit7CisgICAgUmV0YWluUHRy
PE5TRXJyb3I+IGVycm9yID0gZGVjb2RlT2JqQ09iamVjdChkZWNvZGVyLCBbTlNFcnJvciBjbGFz
c10pOworICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBjb3B5OworICAgIGlmIChO
U0FycmF5ICpjZXJ0aWZpY2F0ZUNoYWluID0gZXJyb3IuZ2V0KCkudXNlckluZm9bcGVlckNlcnRp
ZmljYXRlS2V5XSkgeworICAgICAgICBjb3B5ID0gYWRvcHROUyhbZXJyb3IuZ2V0KCkudXNlcklu
Zm8gbXV0YWJsZUNvcHldKTsKKyAgICAgICAgY29weS5nZXQoKVtwZWVyQ2VydGlmaWNhdGVLZXld
ID0gdHJhbnNmb3JtRGF0YVRvQ2VydGlmaWNhdGVzKGNlcnRpZmljYXRlQ2hhaW4pLmdldCgpOwor
ICAgIH0KKyAgICBpZiAoTlNEYXRhICp0cnVzdCA9IGVycm9yLmdldCgpLnVzZXJJbmZvW3BlZXJU
cnVzdEtleV0pIHsKKyAgICAgICAgaWYgKCFjb3B5KQorICAgICAgICAgICAgY29weSA9IGFkb3B0
TlMoW2Vycm9yLmdldCgpLnVzZXJJbmZvIG11dGFibGVDb3B5XSk7CisgICAgICAgIGNvcHkuZ2V0
KClbcGVlclRydXN0S2V5XSA9IHRyYW5zZm9ybURhdGFUb1RydXN0KHRydXN0KS5nZXQoKTsKKyAg
ICB9CisgICAgaWYgKCFjb3B5KQorICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgcmV0dXJuIFtO
U0Vycm9yIGVycm9yV2l0aERvbWFpbjplcnJvci5nZXQoKS5kb21haW4gY29kZTplcnJvci5nZXQo
KS5jb2RlIHVzZXJJbmZvOmNvcHkuZ2V0KCldOworfQorCiBzdGF0aWMgdm9pZCBlbmNvZGVPYmpl
Y3QoV0tSZW1vdGVPYmplY3RFbmNvZGVyICplbmNvZGVyLCBpZCBvYmplY3QpCiB7CiAgICAgQVNT
RVJUKG9iamVjdCk7CkBAIC0zMzcsNiArNDUyLDkgQEAgc3RhdGljIHZvaWQgZW5jb2RlT2JqZWN0
KFdLUmVtb3RlT2JqZWN0RW5jb2RlciAqZW5jb2RlciwgaWQgb2JqZWN0KQogICAgICAgICByZXR1
cm47CiAgICAgfQogCisgICAgaWYgKG9iamVjdENsYXNzID09IFtOU0Vycm9yIGNsYXNzXSkKKyAg
ICAgICAgcmV0dXJuIGVuY29kZUVycm9yKGVuY29kZXIsIG9iamVjdCk7CisgICAgCiAgICAgW29i
amVjdCBlbmNvZGVXaXRoQ29kZXI6ZW5jb2Rlcl07CiB9CiAKQEAgLTg3MywyMyArOTkxLDE0IEBA
IHN0YXRpYyBpZCBkZWNvZGVPYmplY3QoV0tSZW1vdGVPYmplY3REZWNvZGVyICpkZWNvZGVyKQog
CiAgICAgaWYgKG9iamVjdENsYXNzID09IFtOU1N0cmluZyBjbGFzc10pCiAgICAgICAgIHJldHVy
biBkZWNvZGVTdHJpbmcoZGVjb2Rlcik7CisgICAgCisgICAgaWYgKG9iamVjdENsYXNzID09IFtO
U0Vycm9yIGNsYXNzXSkKKyAgICAgICAgcmV0dXJuIGRlY29kZUVycm9yKGRlY29kZXIpLmF1dG9y
ZWxlYXNlKCk7CiAKICAgICBpZiAob2JqZWN0Q2xhc3MgPT0gW05TTXV0YWJsZVN0cmluZyBjbGFz
c10pCiAgICAgICAgIHJldHVybiBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ1dpdGhTdHJpbmc6ZGVj
b2RlU3RyaW5nKGRlY29kZXIpXTsKIAotICAgIGlkIHJlc3VsdCA9IFtvYmplY3RDbGFzcyBhbGxv
Y1dpdGhab25lOmRlY29kZXIuem9uZV07Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIFtOU0V4
Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRVbmFyY2hpdmVPcGVyYXRpb25FeGNlcHRpb24gZm9ybWF0
OkAiQ2xhc3MgXCIlc1wiIHJldHVybmVkIG5pbCBmcm9tICthbGxvYyB3aGlsZSBiZWluZyBkZWNv
ZGVkIiwgY2xhc3NOYW1lLmRhdGEoKV07Ci0KLSAgICByZXN1bHQgPSBbcmVzdWx0IGluaXRXaXRo
Q29kZXI6ZGVjb2Rlcl07Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIFtOU0V4Y2VwdGlvbiBy
YWlzZTpOU0ludmFsaWRVbmFyY2hpdmVPcGVyYXRpb25FeGNlcHRpb24gZm9ybWF0OkAiT2JqZWN0
IG9mIGNsYXNzIFwiJXNcIiByZXR1cm5lZCBuaWwgZnJvbSAtaW5pdFdpdGhDb2Rlcjogd2hpbGUg
YmVpbmcgZGVjb2RlZCIsIGNsYXNzTmFtZS5kYXRhKCldOwotCi0gICAgcmVzdWx0ID0gW3Jlc3Vs
dCBhd2FrZUFmdGVyVXNpbmdDb2RlcjpkZWNvZGVyXTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAg
ICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZFVuYXJjaGl2ZU9wZXJhdGlvbkV4Y2VwdGlv
biBmb3JtYXQ6QCJPYmplY3Qgb2YgY2xhc3MgXCIlc1wiIHJldHVybmVkIG5pbCBmcm9tIC1hd2Fr
ZUFmdGVyVXNpbmdDb2Rlcjogd2hpbGUgYmVpbmcgZGVjb2RlZCIsIGNsYXNzTmFtZS5kYXRhKCld
OwotCi0gICAgcmV0dXJuIFtyZXN1bHQgYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBkZWNvZGVP
YmpDT2JqZWN0KGRlY29kZXIsIG9iamVjdENsYXNzKS5hdXRvcmVsZWFzZSgpOwogfQogCiBzdGF0
aWMgaWQgZGVjb2RlT2JqZWN0KFdLUmVtb3RlT2JqZWN0RGVjb2RlciAqZGVjb2RlciwgY29uc3Qg
QVBJOjpEaWN0aW9uYXJ5KiBkaWN0aW9uYXJ5LCBjb25zdCBIYXNoU2V0PENGVHlwZVJlZj4mIGFs
bG93ZWRDbGFzc2VzKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdl
TG9nCmluZGV4IDU5ZWNlOWFkYjRmYThjZGFhZmRlODQwOWI3MDkzNjZiMTk1NDBhMDAuLjkxMjIy
ZDE5NzkyM2IzNGY3M2RlNzM4ZDUyN2RkNDA4NzRjYmI0MDkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0No
YW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAyMS0wMy0w
MiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAg
IFdLUmVtb3RlT2JqZWN0Q29kZXIgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIE5TRXJyb3JzIGZy
b20gVExTIGZhaWx1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjI0MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVtb3RlT2JqZWN0UmVn
aXN0cnkuaDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1JlbW90
ZU9iamVjdFJlZ2lzdHJ5Lm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZW1vdGVPYmplY3RSZWdpc3RyeVBsdWdJbi5tbToKKyAg
ICAgICAgKC1bUmVtb3RlT2JqZWN0UmVnaXN0cnlQbHVnSW4gc2VuZEVycm9yOmNvbXBsZXRpb25I
YW5kbGVyOl0pOgorCiAyMDIxLTAzLTAyICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxl
LmNvbT4KIAogICAgICAgICBNYWtlIGJ1aWxkLndlYmtpdC5vcmcgbG9hZGNvbmZpZyBzaW1pbGFy
IHRvIEVXUwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9SZW1vdGVPYmplY3RSZWdpc3RyeS5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9SZW1vdGVPYmplY3RSZWdpc3RyeS5oCmluZGV4IDc3YTYwN2MzMjA5ZDQzMTIwM2U4
NjdhYTBkOGMzYWI2NmRhNmZmODguLmYyNDdhMjVjMDIxZmUxNjUxZTY1YzA1Njg2ZjNiY2QzYTIx
MzUwOTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
UmVtb3RlT2JqZWN0UmVnaXN0cnkuaAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1JlbW90ZU9iamVjdFJlZ2lzdHJ5LmgKQEAgLTUyLDYgKzUyLDcgQEAKIC0gKHZv
aWQpZG9Ob3RDYWxsQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKCkpY29tcGxldGlvbkhhbmRs
ZXI7CiAtICh2b2lkKXNlbmRSZXF1ZXN0OihOU1VSTFJlcXVlc3QgKilyZXF1ZXN0IHJlc3BvbnNl
OihOU1VSTFJlc3BvbnNlICopcmVzcG9uc2UgY2hhbGxlbmdlOihOU1VSTEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlICopY2hhbGxlbmdlIGVycm9yOihOU0Vycm9yICopZXJyb3IgY29tcGxldGlvbkhh
bmRsZXI6KHZvaWQgKF4pKE5TVVJMUmVxdWVzdCAqLCBOU1VSTFJlc3BvbnNlICosIE5TVVJMQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UgKiwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcjsKIC0g
KHZvaWQpY2FsbFVJUHJvY2Vzc01ldGhvZFdpdGhSZXBseUJsb2NrOworLSAodm9pZClzZW5kRXJy
b3I6KE5TRXJyb3IgKillcnJvciBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNFcnJvciAq
KSljb21wbGV0aW9uSGFuZGxlcjsKIAogQGVuZAogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1JlbW90ZU9iamVjdFJlZ2lzdHJ5Lm1tIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZW1vdGVPYmplY3RSZWdpc3RyeS5tbQpp
bmRleCBmZGVmYmFlMjA2ZDIyYWY3MWVmOTI1MmU5MmE2MjU0OTU5M2ZkZjhmLi5jYzZlZmNhODlm
YjJhNjdkYjA1ZDkyZWRhOGFhMjdiMGYyZGJjMjVmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1JlbW90ZU9iamVjdFJlZ2lzdHJ5Lm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVtb3RlT2JqZWN0UmVnaXN0cnku
bW0KQEAgLTI1LDkgKzI1LDExIEBACiAKICNpbXBvcnQgImNvbmZpZy5oIgogCisjaW1wb3J0ICJI
VFRQU2VydmVyLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiUmVt
b3RlT2JqZWN0UmVnaXN0cnkuaCIKICNpbXBvcnQgIlRlc3QuaCIKKyNpbXBvcnQgIlRlc3ROYXZp
Z2F0aW9uRGVsZWdhdGUuaCIKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25FeHRyYXMu
aCIKICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KQEAgLTM4LDcgKzQwLDcgQEAKICNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9XZWFrT2JqQ1B0ci5oPgogCi1URVNUKFdlYktpdCwg
UmVtb3RlT2JqZWN0UmVnaXN0cnkpCitURVNUKFJlbW90ZU9iamVjdFJlZ2lzdHJ5LCBCYXNpYykK
IHsKICAgICBfX2Jsb2NrIGJvb2wgaXNEb25lID0gZmFsc2U7CiAKQEAgLTE5Niw3ICsxOTgsNyBA
QCBURVNUKFdlYktpdCwgUmVtb3RlT2JqZWN0UmVnaXN0cnkpCiAKIEBlbmQKIAotVEVTVChXZWJL
aXQsIFJlbW90ZU9iamVjdFJlZ2lzdHJ5X0NhbGxSZXBseUJsb2NrQWZ0ZXJPcmlnaW5hdGluZ1dl
YlZpZXdEZWFsbG9jYXRlcykKK1RFU1QoUmVtb3RlT2JqZWN0UmVnaXN0cnksIENhbGxSZXBseUJs
b2NrQWZ0ZXJPcmlnaW5hdGluZ1dlYlZpZXdEZWFsbG9jYXRlcykKIHsKICAgICBhdXRvIGxvY2Fs
T2JqZWN0ID0gYWRvcHROUyhbW0xvY2FsT2JqZWN0IGFsbG9jXSBpbml0XSk7CiAgICAgV2Vha09i
akNQdHI8V0tXZWJWaWV3PiB3ZWFrV2ViVmlld1B0cjsKQEAgLTIyOCwzICsyMzAsMjggQEAgVEVT
VChXZWJLaXQsIFJlbW90ZU9iamVjdFJlZ2lzdHJ5X0NhbGxSZXBseUJsb2NrQWZ0ZXJPcmlnaW5h
dGluZ1dlYlZpZXdEZWFsbG9jYXQKIAogICAgIGxvY2FsT2JqZWN0LT5jb21wbGV0aW9uSGFuZGxl
ckZyb21XZWJQcm9jZXNzKCk7CiB9CisKK1RFU1QoUmVtb3RlT2JqZWN0UmVnaXN0cnksIFNlcmlh
bGl6ZUVycm9yV2l0aENlcnRpZmljYXRlcykKK3sKKyAgICBUZXN0V2ViS2l0QVBJOjpIVFRQU2Vy
dmVyIHNlcnZlcih7IH0sIFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OlByb3RvY29sOjpIdHRw
cyk7CisgICAgYXV0byB3ZWJWaWV3ID0gW1tbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
OkNHUmVjdFplcm8gY29uZmlndXJhdGlvbjpbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBfdGVzdF9j
b25maWd1cmF0aW9uV2l0aFRlc3RQbHVnSW5DbGFzc05hbWU6QCJSZW1vdGVPYmplY3RSZWdpc3Ry
eVBsdWdJbiJdXSBhdXRvcmVsZWFzZV07CisgICAgYXV0byBkZWxlZ2F0ZSA9IFtbVGVzdE5hdmln
YXRpb25EZWxlZ2F0ZSBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICB3ZWJWaWV3Lm5hdmlnYXRpb25E
ZWxlZ2F0ZSA9IGRlbGVnYXRlOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnNlcnZlci5yZXF1
ZXN0KCldOworICAgIE5TRXJyb3IgKmVycm9yID0gW2RlbGVnYXRlIHdhaXRGb3JEaWRGYWlsUHJv
dmlzaW9uYWxOYXZpZ2F0aW9uXTsKKyAgICBOU1N0cmluZyAqa2V5ID0gQCJOU0Vycm9yUGVlckNl
cnRpZmljYXRlQ2hhaW5LZXkiOworICAgIEVYUEVDVF9XS19TVFJFUShlcnJvci5kb21haW4sICJO
U1VSTEVycm9yRG9tYWluIik7CisgICAgRVhQRUNUX1RSVUUoZXJyb3IudXNlckluZm9ba2V5XSk7
CisgICAgCisgICAgX1dLUmVtb3RlT2JqZWN0SW50ZXJmYWNlICppbnRlcmZhY2UgPSBbX1dLUmVt
b3RlT2JqZWN0SW50ZXJmYWNlIHJlbW90ZU9iamVjdEludGVyZmFjZVdpdGhQcm90b2NvbDpAcHJv
dG9jb2woUmVtb3RlT2JqZWN0UHJvdG9jb2wpXTsKKyAgICBpZCA8UmVtb3RlT2JqZWN0UHJvdG9j
b2w+IG9iamVjdCA9IFtbd2ViVmlldyBfcmVtb3RlT2JqZWN0UmVnaXN0cnldIHJlbW90ZU9iamVj
dFByb3h5V2l0aEludGVyZmFjZTppbnRlcmZhY2VdOworICAgIF9fYmxvY2sgYm9vbCByb3VuZFRy
aXBDb21wbGV0ZSA9IGZhbHNlOworICAgIFtvYmplY3Qgc2VuZEVycm9yOmVycm9yIGNvbXBsZXRp
b25IYW5kbGVyOl4oTlNFcnJvciAqZGVzZXJpYWxpemVkRXJyb3IpIHsKKyAgICAgICAgRVhQRUNU
X1dLX1NUUkVRKGRlc2VyaWFsaXplZEVycm9yLmRvbWFpbiwgIk5TVVJMRXJyb3JEb21haW4iKTsK
KyAgICAgICAgTlNBcnJheSAqY2hhaW4gPSBkZXNlcmlhbGl6ZWRFcnJvci51c2VySW5mb1trZXld
OworICAgICAgICBFWFBFQ1RfVFJVRShjaGFpbik7CisgICAgICAgIEVYUEVDVF9FUShDRkdldFR5
cGVJRChjaGFpblswXSksIFNlY0NlcnRpZmljYXRlR2V0VHlwZUlEKCkpOworICAgICAgICByb3Vu
ZFRyaXBDb21wbGV0ZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZyb3VuZFRyaXBDb21wbGV0ZSk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1JlbW90ZU9iamVjdFJlZ2lzdHJ5UGx1Z0luLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZW1vdGVPYmplY3RSZWdpc3RyeVBs
dWdJbi5tbQppbmRleCBkZDcwZTRmNjM2N2NiNDViYzIzZDAzNzVlZWFiYzUyNDgzNjAwOGViLi5i
MWE3YTc0NjRmZDVlNGQ3YTA0YTAyYzYyNDNlMDI3NzlmNDg0MzVkIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1JlbW90ZU9iamVjdFJlZ2lzdHJ5UGx1
Z0luLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVtb3Rl
T2JqZWN0UmVnaXN0cnlQbHVnSW4ubW0KQEAgLTExOCw2ICsxMTgsMTEgQEAKICAgICBjb21wbGV0
aW9uSGFuZGxlcihyZXF1ZXN0LCByZXNwb25zZSwgY2hhbGxlbmdlLCBlcnJvcik7CiB9CiAKKy0g
KHZvaWQpc2VuZEVycm9yOihOU0Vycm9yICopZXJyb3IgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQg
KF4pKE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBjb21wbGV0aW9uSGFuZGxl
cihlcnJvcik7Cit9CisKIC0gKHZvaWQpY2FsbFVJUHJvY2Vzc01ldGhvZFdpdGhSZXBseUJsb2Nr
CiB7CiAgICAgaWQgPExvY2FsT2JqZWN0UHJvdG9jb2w+IGxvY2FsT2JqZWN0ID0gW1tfYnJvd3Nl
ckNvbnRleHRDb250cm9sbGVyIF9yZW1vdGVPYmplY3RSZWdpc3RyeV0gcmVtb3RlT2JqZWN0UHJv
eHlXaXRoSW50ZXJmYWNlOmxvY2FsT2JqZWN0SW50ZXJmYWNlKCldOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>422183</attachid>
            <date>2021-03-03 22:31:39 -0800</date>
            <delta_ts>2021-03-03 23:22:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222401-20210303223139.patch</filename>
            <type>text/plain</type>
            <size>14504</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjczODcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGFhZGQxZmJhNTliZjEyNGEx
YzA1NDFiOGQ1NTY0MWQ3ZWRlMjk1NzQuLjZlMjQ3ZTViNTExN2I1MWUxMjYzYWI0MTJkZGIzNWVm
ZmNjOTMzMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMjEtMDMtMDMgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBXS1JlbW90ZU9i
amVjdENvZGVyIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSBOU0Vycm9ycyBmcm9tIFRMUyBmYWls
dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIy
NDAxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MjEwMzg2NT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBDaHJpcyBEdW1lei4KKworICAgICAgICBOU0Vycm9ycyBmcm9tIFRMUyBmYWlsdXJlcyBj
b250YWluIHZhbHVlcyBsaWtlIGEgU2VjVHJ1c3RSZWYgb3IgYSBTZWNDZXJ0aWZpY2F0ZVJlZiwK
KyAgICAgICAgd2hpY2ggYXJlIG5vdCBPYmpDIG9iamVjdHMsIGFuZCB0aGV5IGRvbid0IGxpa2Ug
aXQgd2hlbiB5b3UgY2FsbCBlbmNvZGVXaXRoQ29kZXI6IG9uIHRoZW0uCisgICAgICAgIFVudGls
IHIyNzMxNDEgaXQgd291bGQgY3Jhc2ggd2hlbiB3ZSBkbywgYnV0IGV2ZW4gYWZ0ZXIgdGhhdCB3
ZSBqdXN0IGRlY29kZSBhIG5pbCBOU0Vycm9yLgorICAgICAgICBBZGQgYSBzcGVjaWFsIGNhc2Ug
bGlrZSB3ZSBkaWQgaW4gZW5jb2RlTlNFcnJvciB0byBzdWNjZXNzZnVsbHkgZW5jb2RlIGFuZCBk
ZWNvZGUgdGhlc2UgZXJyb3JzLgorCisgICAgICAgICogU2hhcmVkL0FQSS9Db2NvYS9XS1JlbW90
ZU9iamVjdENvZGVyLm1tOgorICAgICAgICAoZGVjb2RlT2JqQ09iamVjdCk6CisgICAgICAgICh0
cmFuc2Zvcm1DZXJ0aWZpY2F0ZXNUb0RhdGEpOgorICAgICAgICAodHJhbnNmb3JtVHJ1c3RUb0Rh
dGEpOgorICAgICAgICAoZW5jb2RlRXJyb3IpOgorICAgICAgICAodHJhbnNmb3JtRGF0YVRvQ2Vy
dGlmaWNhdGVzKToKKyAgICAgICAgKHRyYW5zZm9ybURhdGFUb1RydXN0KToKKyAgICAgICAgKGRl
Y29kZUVycm9yKToKKyAgICAgICAgKGVuY29kZU9iamVjdCk6CisgICAgICAgIChkZWNvZGVPYmpl
Y3QpOgorCiAyMDIxLTAzLTAzICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgTGltaXQgSGFzaFRhYmxlIGVudHJ5IHNpemUgdG8gNTAwIGJ5dGVz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tSZW1vdGVPYmpl
Y3RDb2Rlci5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS1JlbW90ZU9iamVj
dENvZGVyLm1tCmluZGV4IDVkZTE5NWIwM2JmNmI1MDBhNDlmNGIyZDliMGE1ZTE2MmVkY2NhMmEu
Ljg4YWQ4MzgyN2FkOWU2MTI2NmEwYjNlZWNlYmVjODc0OTM3ZmFiYzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS1JlbW90ZU9iamVjdENvZGVyLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS1JlbW90ZU9iamVjdENvZGVyLm1tCkBA
IC0zMyw2ICszMyw3IEBACiAjaW1wb3J0ICJBUElTdHJpbmcuaCIKICNpbXBvcnQgIkxvZ2dpbmcu
aCIKICNpbXBvcnQgIk5TSW52b2NhdGlvblNQSS5oIgorI2ltcG9ydCAiX1dLRXJyb3JSZWNvdmVy
eUF0dGVtcHRpbmcuaCIKICNpbXBvcnQgIl9XS1JlbW90ZU9iamVjdEludGVyZmFjZUludGVybmFs
LmgiCiAjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4K
QEAgLTI5OSw2ICszMDAsMTIwIEBAIHN0YXRpYyB2b2lkIGVuY29kZVN0cmluZyhXS1JlbW90ZU9i
amVjdEVuY29kZXIgKmVuY29kZXIsIE5TU3RyaW5nICpzdHJpbmcpCiAgICAgZW5jb2Rlci0+X2N1
cnJlbnREaWN0aW9uYXJ5LT5zZXQoc3RyaW5nS2V5LCBBUEk6OlN0cmluZzo6Y3JlYXRlKHN0cmlu
ZykpOwogfQogCitzdGF0aWMgUmV0YWluUHRyPGlkPiBkZWNvZGVPYmpDT2JqZWN0KFdLUmVtb3Rl
T2JqZWN0RGVjb2RlciAqZGVjb2RlciwgQ2xhc3Mgb2JqZWN0Q2xhc3MpCit7CisgICAgaWQgYWxs
b2NhdGlvbiA9IFtvYmplY3RDbGFzcyBhbGxvY1dpdGhab25lOmRlY29kZXIuem9uZV07CisgICAg
aWYgKCFhbGxvY2F0aW9uKQorICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkVW5h
cmNoaXZlT3BlcmF0aW9uRXhjZXB0aW9uIGZvcm1hdDpAIkNsYXNzIFwiJUBcIiByZXR1cm5lZCBu
aWwgZnJvbSArYWxsb2Mgd2hpbGUgYmVpbmcgZGVjb2RlZCIsIE5TU3RyaW5nRnJvbUNsYXNzKG9i
amVjdENsYXNzKV07CisKKyAgICBSZXRhaW5QdHI8aWQ+IHJlc3VsdCA9IGFkb3B0TlMoW2FsbG9j
YXRpb24gaW5pdFdpdGhDb2RlcjpkZWNvZGVyXSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAg
IFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRVbmFyY2hpdmVPcGVyYXRpb25FeGNlcHRpb24g
Zm9ybWF0OkAiT2JqZWN0IG9mIGNsYXNzIFwiJUBcIiByZXR1cm5lZCBuaWwgZnJvbSAtaW5pdFdp
dGhDb2Rlcjogd2hpbGUgYmVpbmcgZGVjb2RlZCIsIE5TU3RyaW5nRnJvbUNsYXNzKG9iamVjdENs
YXNzKV07CisKKyAgICByZXN1bHQgPSBbcmVzdWx0IGF3YWtlQWZ0ZXJVc2luZ0NvZGVyOmRlY29k
ZXJdOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZh
bGlkVW5hcmNoaXZlT3BlcmF0aW9uRXhjZXB0aW9uIGZvcm1hdDpAIk9iamVjdCBvZiBjbGFzcyBc
IiVAXCIgcmV0dXJuZWQgbmlsIGZyb20gLWF3YWtlQWZ0ZXJVc2luZ0NvZGVyOiB3aGlsZSBiZWlu
ZyBkZWNvZGVkIiwgTlNTdHJpbmdGcm9tQ2xhc3Mob2JqZWN0Q2xhc3MpXTsKKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3N0YXRpYyBjb25zdGV4cHIgTlNTdHJpbmcgKnBlZXJDZXJ0aWZpY2F0
ZUtleSA9IEAiTlNFcnJvclBlZXJDZXJ0aWZpY2F0ZUNoYWluS2V5IjsKK3N0YXRpYyBjb25zdGV4
cHIgTlNTdHJpbmcgKnBlZXJUcnVzdEtleSA9IEAiTlNVUkxFcnJvckZhaWxpbmdVUkxQZWVyVHJ1
c3RFcnJvcktleSI7CitzdGF0aWMgY29uc3RleHByIE5TU3RyaW5nICpjbGllbnRDZXJ0aWZpY2F0
ZUtleSA9IEAiTlNFcnJvckNsaWVudENlcnRpZmljYXRlQ2hhaW5LZXkiOworCitzdGF0aWMgUmV0
YWluUHRyPE5TQXJyYXk8TlNEYXRhICo+PiB0cmFuc2Zvcm1DZXJ0aWZpY2F0ZXNUb0RhdGEoTlNB
cnJheSAqaW5wdXQpCit7CisgICAgYXV0byBkYXRhQXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6aW5wdXQuY291bnRdKTsKKyAgICBmb3IgKGlk
IGNlcnRpZmljYXRlIGluIGlucHV0KSB7CisgICAgICAgIGlmIChDRkdldFR5cGVJRChjZXJ0aWZp
Y2F0ZSkgIT0gU2VjQ2VydGlmaWNhdGVHZXRUeXBlSUQoKSkKKyAgICAgICAgICAgIFtOU0V4Y2Vw
dGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJFcnJvciBlbmNv
ZGluZyBpbnZhbGlkIGNlcnRpZmljYXRlIGluIGNoYWluIl07CisgICAgICAgIFtkYXRhQXJyYXkg
YWRkT2JqZWN0OihOU0RhdGEgKilhZG9wdENGKFNlY0NlcnRpZmljYXRlQ29weURhdGEoKFNlY0Nl
cnRpZmljYXRlUmVmKWNlcnRpZmljYXRlKSkuZ2V0KCldOworICAgIH0KKyAgICByZXR1cm4gZGF0
YUFycmF5OworfQorCitzdGF0aWMgUmV0YWluUHRyPE5TRGF0YT4gdHJhbnNmb3JtVHJ1c3RUb0Rh
dGEoU2VjVHJ1c3RSZWYgdHJ1c3QpCit7CisgICAgaWYgKENGR2V0VHlwZUlEKHRydXN0KSAhPSBT
ZWNUcnVzdEdldFR5cGVJRCgpKQorICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlk
QXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiRXJyb3IgZW5jb2RpbmcgaW52YWxpZCBTZWNUcnVz
dFJlZiJdOworICAgIENGRXJyb3JSZWYgZXJyb3IgPSBudWxscHRyOworICAgIGF1dG8gZGF0YSA9
IGFkb3B0Q0YoU2VjVHJ1c3RTZXJpYWxpemUodHJ1c3QsICZlcnJvcikpOworICAgIGlmIChlcnJv
cikKKyAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9u
IGZvcm1hdDpAIkVycm9yIHNlcmlhbGl6aW5nIFNlY1RydXN0UmVmOiAlQCIsIGVycm9yXTsKKyAg
ICByZXR1cm4gZGF0YTsKK30KKworc3RhdGljIHZvaWQgZW5jb2RlRXJyb3IoV0tSZW1vdGVPYmpl
Y3RFbmNvZGVyICplbmNvZGVyLCBOU0Vycm9yICplcnJvcikKK3sKKyAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlRGljdGlvbmFyeT4gY29weTsKKyAgICBpZiAoZXJyb3IudXNlckluZm9bX1dLUmVjb3Zl
cnlBdHRlbXB0ZXJFcnJvcktleV0pIHsKKyAgICAgICAgY29weSA9IGFkb3B0TlMoW2Vycm9yLnVz
ZXJJbmZvIG11dGFibGVDb3B5XSk7CisgICAgICAgIFtjb3B5IHJlbW92ZU9iamVjdEZvcktleTpf
V0tSZWNvdmVyeUF0dGVtcHRlckVycm9yS2V5XTsKKyAgICB9CisgICAgaWYgKGVycm9yLnVzZXJJ
bmZvW2NsaWVudENlcnRpZmljYXRlS2V5XSkgeworICAgICAgICBpZiAoIWNvcHkpCisgICAgICAg
ICAgICBjb3B5ID0gYWRvcHROUyhbZXJyb3IudXNlckluZm8gbXV0YWJsZUNvcHldKTsKKyAgICAg
ICAgW2NvcHkgcmVtb3ZlT2JqZWN0Rm9yS2V5OmNsaWVudENlcnRpZmljYXRlS2V5XTsKKyAgICB9
CisgICAgaWYgKE5TQXJyYXkgKmNlcnRpZmljYXRlQ2hhaW4gPSBlcnJvci51c2VySW5mb1twZWVy
Q2VydGlmaWNhdGVLZXldKSB7CisgICAgICAgIGlmICghY29weSkKKyAgICAgICAgICAgIGNvcHkg
PSBhZG9wdE5TKFtlcnJvci51c2VySW5mbyBtdXRhYmxlQ29weV0pOworICAgICAgICBjb3B5Lmdl
dCgpW3BlZXJDZXJ0aWZpY2F0ZUtleV0gPSB0cmFuc2Zvcm1DZXJ0aWZpY2F0ZXNUb0RhdGEoY2Vy
dGlmaWNhdGVDaGFpbikuZ2V0KCk7CisgICAgfQorICAgIGlmIChpZCB0cnVzdCA9IGVycm9yLnVz
ZXJJbmZvW3BlZXJUcnVzdEtleV0pIHsKKyAgICAgICAgaWYgKCFjb3B5KQorICAgICAgICAgICAg
Y29weSA9IGFkb3B0TlMoW2Vycm9yLnVzZXJJbmZvIG11dGFibGVDb3B5XSk7CisgICAgICAgIGNv
cHkuZ2V0KClbcGVlclRydXN0S2V5XSA9IHRyYW5zZm9ybVRydXN0VG9EYXRhKChTZWNUcnVzdFJl
Zil0cnVzdCkuZ2V0KCk7CisgICAgfQorICAgIGlmICghY29weSkKKyAgICAgICAgW2Vycm9yIGVu
Y29kZVdpdGhDb2RlcjplbmNvZGVyXTsKKyAgICBlbHNlCisgICAgICAgIFtbTlNFcnJvciBlcnJv
cldpdGhEb21haW46ZXJyb3IuZG9tYWluIGNvZGU6ZXJyb3IuY29kZSB1c2VySW5mbzpjb3B5Lmdl
dCgpXSBlbmNvZGVXaXRoQ29kZXI6ZW5jb2Rlcl07Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8TlNB
cnJheT4gdHJhbnNmb3JtRGF0YVRvQ2VydGlmaWNhdGVzKE5TQXJyYXkgKmlucHV0KQoreworICAg
IGF1dG8gYXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2Fw
YWNpdHk6aW5wdXQuY291bnRdKTsKKyAgICBmb3IgKE5TRGF0YSAqZGF0YSBpbiBpbnB1dCkgewor
ICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQoZGF0YSkgIT0gQ0ZEYXRhR2V0VHlwZUlEKCkpCisgICAg
ICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkVW5hcmNoaXZlT3BlcmF0aW9uRXhj
ZXB0aW9uIGZvcm1hdDpAIkVycm9yIGRlY29kaW5nIGNlcnRpZmljYXRlIGZyb20gb2JqZWN0IHRo
YXQgaXMgbm90IGRhdGEgJUAiLCBOU1N0cmluZ0Zyb21DbGFzcyhbZGF0YSBjbGFzc10pXTsKKyAg
ICAgICAgYXV0byBjZXJ0aWZpY2F0ZSA9IGFkb3B0Q0YoU2VjQ2VydGlmaWNhdGVDcmVhdGVXaXRo
RGF0YShudWxscHRyLCAoQ0ZEYXRhUmVmKWRhdGEpKTsKKyAgICAgICAgaWYgKCFjZXJ0aWZpY2F0
ZSkKKyAgICAgICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRVbmFyY2hpdmVPcGVy
YXRpb25FeGNlcHRpb24gZm9ybWF0OkAiRXJyb3IgZGVjb2RpbmcgbnZhbGlkIGNlcnRpZmljYXRl
IGluIGNoYWluIl07CisgICAgICAgIFthcnJheSBhZGRPYmplY3Q6KGlkKWNlcnRpZmljYXRlLmdl
dCgpXTsKKyAgICB9CisgICAgcmV0dXJuIGFycmF5OworfQorCitzdGF0aWMgUmV0YWluUHRyPGlk
PiB0cmFuc2Zvcm1EYXRhVG9UcnVzdChOU0RhdGEgKmRhdGEpCit7CisgICAgaWYgKENGR2V0VHlw
ZUlEKGRhdGEpICE9IENGRGF0YUdldFR5cGVJRCgpKQorICAgICAgICBbTlNFeGNlcHRpb24gcmFp
c2U6TlNJbnZhbGlkVW5hcmNoaXZlT3BlcmF0aW9uRXhjZXB0aW9uIGZvcm1hdDpAIkludmFsaWQg
U2VjVHJ1c3RSZWYgZGF0YSAlQCIsIE5TU3RyaW5nRnJvbUNsYXNzKFtkYXRhIGNsYXNzXSldOwor
ICAgIENGRXJyb3JSZWYgZXJyb3IgPSBudWxscHRyOworICAgIGF1dG8gdHJ1c3QgPSBhZG9wdENG
KFNlY1RydXN0RGVzZXJpYWxpemUoKENGRGF0YVJlZilkYXRhLCAmZXJyb3IpKTsKKyAgICBpZiAo
ZXJyb3IgfHwgIXRydXN0KQorICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkVW5h
cmNoaXZlT3BlcmF0aW9uRXhjZXB0aW9uIGZvcm1hdDpAIkludmFsaWQgU2VjVHJ1c3RSZWYgJUAi
LCBlcnJvcl07CisgICAgcmV0dXJuIHRydXN0OworfQorCitzdGF0aWMgUmV0YWluUHRyPE5TRXJy
b3I+IGRlY29kZUVycm9yKFdLUmVtb3RlT2JqZWN0RGVjb2RlciAqZGVjb2RlcikKK3sKKyAgICBS
ZXRhaW5QdHI8TlNFcnJvcj4gZXJyb3IgPSBkZWNvZGVPYmpDT2JqZWN0KGRlY29kZXIsIFtOU0Vy
cm9yIGNsYXNzXSk7CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IGNvcHk7Cisg
ICAgaWYgKE5TQXJyYXkgKmNlcnRpZmljYXRlQ2hhaW4gPSBlcnJvci5nZXQoKS51c2VySW5mb1tw
ZWVyQ2VydGlmaWNhdGVLZXldKSB7CisgICAgICAgIGNvcHkgPSBhZG9wdE5TKFtlcnJvci5nZXQo
KS51c2VySW5mbyBtdXRhYmxlQ29weV0pOworICAgICAgICBjb3B5LmdldCgpW3BlZXJDZXJ0aWZp
Y2F0ZUtleV0gPSB0cmFuc2Zvcm1EYXRhVG9DZXJ0aWZpY2F0ZXMoY2VydGlmaWNhdGVDaGFpbiku
Z2V0KCk7CisgICAgfQorICAgIGlmIChOU0RhdGEgKnRydXN0ID0gZXJyb3IuZ2V0KCkudXNlcklu
Zm9bcGVlclRydXN0S2V5XSkgeworICAgICAgICBpZiAoIWNvcHkpCisgICAgICAgICAgICBjb3B5
ID0gYWRvcHROUyhbZXJyb3IuZ2V0KCkudXNlckluZm8gbXV0YWJsZUNvcHldKTsKKyAgICAgICAg
Y29weS5nZXQoKVtwZWVyVHJ1c3RLZXldID0gdHJhbnNmb3JtRGF0YVRvVHJ1c3QodHJ1c3QpLmdl
dCgpOworICAgIH0KKyAgICBpZiAoIWNvcHkpCisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICBy
ZXR1cm4gW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOmVycm9yLmdldCgpLmRvbWFpbiBjb2RlOmVy
cm9yLmdldCgpLmNvZGUgdXNlckluZm86Y29weS5nZXQoKV07Cit9CisKIHN0YXRpYyB2b2lkIGVu
Y29kZU9iamVjdChXS1JlbW90ZU9iamVjdEVuY29kZXIgKmVuY29kZXIsIGlkIG9iamVjdCkKIHsK
ICAgICBBU1NFUlQob2JqZWN0KTsKQEAgLTMzNyw2ICs0NTIsOSBAQCBzdGF0aWMgdm9pZCBlbmNv
ZGVPYmplY3QoV0tSZW1vdGVPYmplY3RFbmNvZGVyICplbmNvZGVyLCBpZCBvYmplY3QpCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAob2JqZWN0Q2xhc3MgPT0gW05TRXJyb3IgY2xh
c3NdKQorICAgICAgICByZXR1cm4gZW5jb2RlRXJyb3IoZW5jb2Rlciwgb2JqZWN0KTsKKyAgICAK
ICAgICBbb2JqZWN0IGVuY29kZVdpdGhDb2RlcjplbmNvZGVyXTsKIH0KIApAQCAtODczLDIzICs5
OTEsMTQgQEAgc3RhdGljIGlkIGRlY29kZU9iamVjdChXS1JlbW90ZU9iamVjdERlY29kZXIgKmRl
Y29kZXIpCiAKICAgICBpZiAob2JqZWN0Q2xhc3MgPT0gW05TU3RyaW5nIGNsYXNzXSkKICAgICAg
ICAgcmV0dXJuIGRlY29kZVN0cmluZyhkZWNvZGVyKTsKKyAgICAKKyAgICBpZiAob2JqZWN0Q2xh
c3MgPT0gW05TRXJyb3IgY2xhc3NdKQorICAgICAgICByZXR1cm4gZGVjb2RlRXJyb3IoZGVjb2Rl
cikuYXV0b3JlbGVhc2UoKTsKIAogICAgIGlmIChvYmplY3RDbGFzcyA9PSBbTlNNdXRhYmxlU3Ry
aW5nIGNsYXNzXSkKICAgICAgICAgcmV0dXJuIFtOU011dGFibGVTdHJpbmcgc3RyaW5nV2l0aFN0
cmluZzpkZWNvZGVTdHJpbmcoZGVjb2RlcildOwogCi0gICAgaWQgcmVzdWx0ID0gW29iamVjdENs
YXNzIGFsbG9jV2l0aFpvbmU6ZGVjb2Rlci56b25lXTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAg
ICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZFVuYXJjaGl2ZU9wZXJhdGlvbkV4Y2VwdGlv
biBmb3JtYXQ6QCJDbGFzcyBcIiVzXCIgcmV0dXJuZWQgbmlsIGZyb20gK2FsbG9jIHdoaWxlIGJl
aW5nIGRlY29kZWQiLCBjbGFzc05hbWUuZGF0YSgpXTsKLQotICAgIHJlc3VsdCA9IFtyZXN1bHQg
aW5pdFdpdGhDb2RlcjpkZWNvZGVyXTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgW05TRXhj
ZXB0aW9uIHJhaXNlOk5TSW52YWxpZFVuYXJjaGl2ZU9wZXJhdGlvbkV4Y2VwdGlvbiBmb3JtYXQ6
QCJPYmplY3Qgb2YgY2xhc3MgXCIlc1wiIHJldHVybmVkIG5pbCBmcm9tIC1pbml0V2l0aENvZGVy
OiB3aGlsZSBiZWluZyBkZWNvZGVkIiwgY2xhc3NOYW1lLmRhdGEoKV07Ci0KLSAgICByZXN1bHQg
PSBbcmVzdWx0IGF3YWtlQWZ0ZXJVc2luZ0NvZGVyOmRlY29kZXJdOwotICAgIGlmICghcmVzdWx0
KQotICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkVW5hcmNoaXZlT3BlcmF0aW9u
RXhjZXB0aW9uIGZvcm1hdDpAIk9iamVjdCBvZiBjbGFzcyBcIiVzXCIgcmV0dXJuZWQgbmlsIGZy
b20gLWF3YWtlQWZ0ZXJVc2luZ0NvZGVyOiB3aGlsZSBiZWluZyBkZWNvZGVkIiwgY2xhc3NOYW1l
LmRhdGEoKV07Ci0KLSAgICByZXR1cm4gW3Jlc3VsdCBhdXRvcmVsZWFzZV07CisgICAgcmV0dXJu
IGRlY29kZU9iakNPYmplY3QoZGVjb2Rlciwgb2JqZWN0Q2xhc3MpLmF1dG9yZWxlYXNlKCk7CiB9
CiAKIHN0YXRpYyBpZCBkZWNvZGVPYmplY3QoV0tSZW1vdGVPYmplY3REZWNvZGVyICpkZWNvZGVy
LCBjb25zdCBBUEk6OkRpY3Rpb25hcnkqIGRpY3Rpb25hcnksIGNvbnN0IEhhc2hTZXQ8Q0ZUeXBl
UmVmPiYgYWxsb3dlZENsYXNzZXMpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29s
cy9DaGFuZ2VMb2cKaW5kZXggNWYyOWM1MTkwNGYyYWZlMWM1YmNiOWM2YTU3ZmY3ZWQxODZmMDFj
Zi4uM2QyNGI2NzFhMGNiNmM4MGViOTQyZGYzNjAyYzhjMzgzN2QxZmI4YyAxMDA2NDQKLS0tIGEv
VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisy
MDIxLTAzLTAzICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgV0tSZW1vdGVPYmplY3RDb2RlciBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgTlNF
cnJvcnMgZnJvbSBUTFMgZmFpbHVyZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyMjQwMQorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6
LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZW1vdGVPYmpl
Y3RSZWdpc3RyeS5oOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
UmVtb3RlT2JqZWN0UmVnaXN0cnkubW06CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1JlbW90ZU9iamVjdFJlZ2lzdHJ5UGx1Z0luLm1t
OgorICAgICAgICAoLVtSZW1vdGVPYmplY3RSZWdpc3RyeVBsdWdJbiBzZW5kRXJyb3I6Y29tcGxl
dGlvbkhhbmRsZXI6XSk6CisKIDIwMjEtMDMtMDMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3Mzg1MS4KZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVtb3RlT2JqZWN0UmVn
aXN0cnkuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVtb3RlT2Jq
ZWN0UmVnaXN0cnkuaAppbmRleCA3N2E2MDdjMzIwOWQ0MzEyMDNlODY3YWEwZDhjM2FiNjZkYTZm
Zjg4Li5mMjQ3YTI1YzAyMWZlMTY1MWU2NWMwNTY4NmYzYmNkM2EyMTM1MDk4IDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1JlbW90ZU9iamVjdFJlZ2lz
dHJ5LmgKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZW1vdGVP
YmplY3RSZWdpc3RyeS5oCkBAIC01Miw2ICs1Miw3IEBACiAtICh2b2lkKWRvTm90Q2FsbENvbXBs
ZXRpb25IYW5kbGVyOih2b2lkICheKSgpKWNvbXBsZXRpb25IYW5kbGVyOwogLSAodm9pZClzZW5k
UmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdCByZXNwb25zZTooTlNVUkxSZXNwb25zZSAq
KXJlc3BvbnNlIGNoYWxsZW5nZTooTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAqKWNoYWxs
ZW5nZSBlcnJvcjooTlNFcnJvciAqKWVycm9yIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShO
U1VSTFJlcXVlc3QgKiwgTlNVUkxSZXNwb25zZSAqLCBOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXI7CiAtICh2b2lkKWNhbGxVSVByb2Nl
c3NNZXRob2RXaXRoUmVwbHlCbG9jazsKKy0gKHZvaWQpc2VuZEVycm9yOihOU0Vycm9yICopZXJy
b3IgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRs
ZXI7CiAKIEBlbmQKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9SZW1vdGVPYmplY3RSZWdpc3RyeS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvUmVtb3RlT2JqZWN0UmVnaXN0cnkubW0KaW5kZXggZmRlZmJhZTIwNmQy
MmFmNzFlZjkyNTJlOTJhNjI1NDk1OTNmZGY4Zi4uMGZmODNlN2MxMzMxMGYzNjc3ZjY2YTNlMzk1
YzBkMDJmYzI1OWE2MyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9SZW1vdGVPYmplY3RSZWdpc3RyeS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1JlbW90ZU9iamVjdFJlZ2lzdHJ5Lm1tCkBAIC0yNSw5ICsyNSwx
MSBAQAogCiAjaW1wb3J0ICJjb25maWcuaCIKIAorI2ltcG9ydCAiSFRUUFNlcnZlci5oIgogI2lt
cG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlJlbW90ZU9iamVjdFJlZ2lzdHJ5
LmgiCiAjaW1wb3J0ICJUZXN0LmgiCisjaW1wb3J0ICJUZXN0TmF2aWdhdGlvbkRlbGVnYXRlLmgi
CiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uRXh0cmFzLmgiCiAjaW1wb3J0IDxXZWJL
aXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2
YXRlLmg+CkBAIC0zOCw3ICs0MCw3IEBACiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1w
b3J0IDx3dGYvV2Vha09iakNQdHIuaD4KIAotVEVTVChXZWJLaXQsIFJlbW90ZU9iamVjdFJlZ2lz
dHJ5KQorVEVTVChSZW1vdGVPYmplY3RSZWdpc3RyeSwgQmFzaWMpCiB7CiAgICAgX19ibG9jayBi
b29sIGlzRG9uZSA9IGZhbHNlOwogCkBAIC0xOTYsNyArMTk4LDcgQEAgVEVTVChXZWJLaXQsIFJl
bW90ZU9iamVjdFJlZ2lzdHJ5KQogCiBAZW5kCiAKLVRFU1QoV2ViS2l0LCBSZW1vdGVPYmplY3RS
ZWdpc3RyeV9DYWxsUmVwbHlCbG9ja0FmdGVyT3JpZ2luYXRpbmdXZWJWaWV3RGVhbGxvY2F0ZXMp
CitURVNUKFJlbW90ZU9iamVjdFJlZ2lzdHJ5LCBDYWxsUmVwbHlCbG9ja0FmdGVyT3JpZ2luYXRp
bmdXZWJWaWV3RGVhbGxvY2F0ZXMpCiB7CiAgICAgYXV0byBsb2NhbE9iamVjdCA9IGFkb3B0TlMo
W1tMb2NhbE9iamVjdCBhbGxvY10gaW5pdF0pOwogICAgIFdlYWtPYmpDUHRyPFdLV2ViVmlldz4g
d2Vha1dlYlZpZXdQdHI7CkBAIC0yMjgsMyArMjMwLDI4IEBAIFRFU1QoV2ViS2l0LCBSZW1vdGVP
YmplY3RSZWdpc3RyeV9DYWxsUmVwbHlCbG9ja0FmdGVyT3JpZ2luYXRpbmdXZWJWaWV3RGVhbGxv
Y2F0CiAKICAgICBsb2NhbE9iamVjdC0+Y29tcGxldGlvbkhhbmRsZXJGcm9tV2ViUHJvY2Vzcygp
OwogfQorCitURVNUKFJlbW90ZU9iamVjdFJlZ2lzdHJ5LCBTZXJpYWxpemVFcnJvcldpdGhDZXJ0
aWZpY2F0ZXMpCit7CisgICAgVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlciBzZXJ2ZXIoeyB9LCBU
ZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjpQcm90b2NvbDo6SHR0cHMpOworICAgIGF1dG8gd2Vi
VmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0WmVy
byBjb25maWd1cmF0aW9uOltXS1dlYlZpZXdDb25maWd1cmF0aW9uIF90ZXN0X2NvbmZpZ3VyYXRp
b25XaXRoVGVzdFBsdWdJbkNsYXNzTmFtZTpAIlJlbW90ZU9iamVjdFJlZ2lzdHJ5UGx1Z0luIl1d
KTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZSBu
ZXddKTsKKyAgICB3ZWJWaWV3LmdldCgpLm5hdmlnYXRpb25EZWxlZ2F0ZSA9IGRlbGVnYXRlLmdl
dCgpOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnNlcnZlci5yZXF1ZXN0KCldOworICAgIE5T
RXJyb3IgKmVycm9yID0gW2RlbGVnYXRlIHdhaXRGb3JEaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0
aW9uXTsKKyAgICBOU1N0cmluZyAqa2V5ID0gQCJOU0Vycm9yUGVlckNlcnRpZmljYXRlQ2hhaW5L
ZXkiOworICAgIEVYUEVDVF9XS19TVFJFUShlcnJvci5kb21haW4sICJOU1VSTEVycm9yRG9tYWlu
Iik7CisgICAgRVhQRUNUX1RSVUUoZXJyb3IudXNlckluZm9ba2V5XSk7CisgICAgCisgICAgX1dL
UmVtb3RlT2JqZWN0SW50ZXJmYWNlICppbnRlcmZhY2UgPSBbX1dLUmVtb3RlT2JqZWN0SW50ZXJm
YWNlIHJlbW90ZU9iamVjdEludGVyZmFjZVdpdGhQcm90b2NvbDpAcHJvdG9jb2woUmVtb3RlT2Jq
ZWN0UHJvdG9jb2wpXTsKKyAgICBpZCA8UmVtb3RlT2JqZWN0UHJvdG9jb2w+IG9iamVjdCA9IFtb
d2ViVmlldyBfcmVtb3RlT2JqZWN0UmVnaXN0cnldIHJlbW90ZU9iamVjdFByb3h5V2l0aEludGVy
ZmFjZTppbnRlcmZhY2VdOworICAgIF9fYmxvY2sgYm9vbCByb3VuZFRyaXBDb21wbGV0ZSA9IGZh
bHNlOworICAgIFtvYmplY3Qgc2VuZEVycm9yOmVycm9yIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNF
cnJvciAqZGVzZXJpYWxpemVkRXJyb3IpIHsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKGRlc2Vy
aWFsaXplZEVycm9yLmRvbWFpbiwgIk5TVVJMRXJyb3JEb21haW4iKTsKKyAgICAgICAgTlNBcnJh
eSAqY2hhaW4gPSBkZXNlcmlhbGl6ZWRFcnJvci51c2VySW5mb1trZXldOworICAgICAgICBFWFBF
Q1RfVFJVRShjaGFpbik7CisgICAgICAgIEVYUEVDVF9FUShDRkdldFR5cGVJRChjaGFpblswXSks
IFNlY0NlcnRpZmljYXRlR2V0VHlwZUlEKCkpOworICAgICAgICByb3VuZFRyaXBDb21wbGV0ZSA9
IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyb3VuZFRyaXBD
b21wbGV0ZSk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1JlbW90ZU9iamVjdFJlZ2lzdHJ5UGx1Z0luLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9SZW1vdGVPYmplY3RSZWdpc3RyeVBsdWdJbi5tbQppbmRleCBk
ZDcwZTRmNjM2N2NiNDViYzIzZDAzNzVlZWFiYzUyNDgzNjAwOGViLi5iMWE3YTc0NjRmZDVlNGQ3
YTA0YTAyYzYyNDNlMDI3NzlmNDg0MzVkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1JlbW90ZU9iamVjdFJlZ2lzdHJ5UGx1Z0luLm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVtb3RlT2JqZWN0UmVnaXN0cnlQ
bHVnSW4ubW0KQEAgLTExOCw2ICsxMTgsMTEgQEAKICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXF1
ZXN0LCByZXNwb25zZSwgY2hhbGxlbmdlLCBlcnJvcik7CiB9CiAKKy0gKHZvaWQpc2VuZEVycm9y
OihOU0Vycm9yICopZXJyb3IgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRXJyb3IgKikp
Y29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBjb21wbGV0aW9uSGFuZGxlcihlcnJvcik7Cit9CisK
IC0gKHZvaWQpY2FsbFVJUHJvY2Vzc01ldGhvZFdpdGhSZXBseUJsb2NrCiB7CiAgICAgaWQgPExv
Y2FsT2JqZWN0UHJvdG9jb2w+IGxvY2FsT2JqZWN0ID0gW1tfYnJvd3NlckNvbnRleHRDb250cm9s
bGVyIF9yZW1vdGVPYmplY3RSZWdpc3RyeV0gcmVtb3RlT2JqZWN0UHJveHlXaXRoSW50ZXJmYWNl
OmxvY2FsT2JqZWN0SW50ZXJmYWNlKCldOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>