<?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>220463</bug_id>
          
          <creation_ts>2021-01-08 08:01:54 -0800</creation_ts>
          <short_desc>[GStreamer] Clean-up the TextCombiner</short_desc>
          <delta_ts>2021-01-15 01:28:14 -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>Platform</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Philippe Normand">pnormand</reporter>
          <assigned_to name="Philippe Normand">pnormand</assigned_to>
          <cc>annulen</cc>
    
    <cc>calvaris</cc>
    
    <cc>cgarcia</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jbedard</cc>
    
    <cc>menard</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>vjaquez</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1718301</commentid>
    <comment_count>0</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-01-08 08:01:54 -0800</bug_when>
    <thetext>Coding style does not conform WebKit&apos;s, and it should use the WEBKIT_DEFINE_TYPE machinery.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718690</commentid>
    <comment_count>1</comment_count>
      <attachid>417382</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-01-11 08:37:55 -0800</bug_when>
    <thetext>Created attachment 417382
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718995</commentid>
    <comment_count>2</comment_count>
      <attachid>417382</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2021-01-12 07:57:43 -0800</bug_when>
    <thetext>Comment on attachment 417382
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/TextCombinerGStreamer.cpp:121
&gt; +    auto internalPad = adoptGRef(gst_element_request_pad(combiner-&gt;priv-&gt;combinerElement.get(), templ, name, caps));
&gt; +    g_object_set(WEBKIT_TEXT_COMBINER_PAD(ghostPad), &quot;inner-combiner-pad&quot;, internalPad.leakRef(), nullptr);

You&apos;re probably astonished that I tell you this but I don&apos;t think you need to create a smart ptr to just release it in the next line.

&gt; Source/WebCore/platform/graphics/gstreamer/TextCombinerGStreamer.cpp:142
&gt; +    gst_element_release_request_pad(combiner-&gt;priv-&gt;combinerElement.get(), webKitTextCombinerPadLeakInternalPadRef(combinerPad));

Aren&apos;t we leaking here? gst_element_release_request_pad doc says &quot;This does not unref the pad. If the pad was created by using gst_element_request_pad(), gst_element_release_request_pad() needs to be followed by gst_object_unref() to free the pad.&quot;

&gt; Source/WebCore/platform/graphics/gstreamer/TextCombinerPadGStreamer.cpp:32
&gt; +#include &quot;GStreamerCommon.h&quot;

You don&apos;t need this if you include it in the header.

&gt; Source/WebCore/platform/graphics/gstreamer/TextCombinerPadGStreamer.h:31
&gt; +#include &quot;GRefPtrGStreamer.h&quot;

GStreamerCommon.h?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718998</commentid>
    <comment_count>3</comment_count>
      <attachid>417382</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-01-12 08:13:55 -0800</bug_when>
    <thetext>Comment on attachment 417382
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/TextCombinerPadGStreamer.h:31
&gt;&gt; +#include &quot;GRefPtrGStreamer.h&quot;
&gt; 
&gt; GStreamerCommon.h?

I was profiling the impact of including that header recently, here it adds a 2 seconds wall-time overhead. So unless really needed I now prefer to not include it directly, there is a way to reduce the impact it has but this is another rabbit hole :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719593</commentid>
    <comment_count>4</comment_count>
      <attachid>417620</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-01-14 07:58:46 -0800</bug_when>
    <thetext>Created attachment 417620
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719613</commentid>
    <comment_count>5</comment_count>
      <attachid>417620</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2021-01-14 09:15:52 -0800</bug_when>
    <thetext>Comment on attachment 417620
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/TextCombinerGStreamer.cpp:142
&gt; +    auto* internalPad = webKitTextCombinerPadLeakInternalPadRef(combinerPad);
&gt; +    gst_element_release_request_pad(combiner-&gt;priv-&gt;combinerElement.get(), internalPad);
&gt; +    gst_object_unref(internalPad);

Nit: I would adopt it here not unref. I would try to avoid manual unrefs as much as possible cause they can lead to leaks if we change the code around and forget to call it when it is due.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719812</commentid>
    <comment_count>6</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-01-15 01:27:32 -0800</bug_when>
    <thetext>Committed r271512: &lt;https://trac.webkit.org/changeset/271512&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719813</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-01-15 01:28:14 -0800</bug_when>
    <thetext>&lt;rdar://problem/73239616&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417382</attachid>
            <date>2021-01-11 08:37:55 -0800</date>
            <delta_ts>2021-01-14 07:58:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220463-20210111083754.patch</filename>
            <type>text/plain</type>
            <size>34545</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxMzU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTMzZGNjZmM5NWIzNDQ0
NWI5MWZlMjlhNWZkY2M3ZGY1ZTEzMmM0My4uNjgwYmQzZTJhM2Y4ZDIwMmY0YzgyZjYyNjRlNTFl
YTU4ZjEyYjFhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDIxLTAxLTExICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBDbGVhbi11cCB0aGUgVGV4dENvbWJpbmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA0NjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGUgY29kZSBzdHlsZSBub3cgY29uZm9ybXMgV2ViS2l0J3Mu
IFRoZSBHaG9zdFBhZCBzdWJjbGFzcyBtb3ZlZCB0byBpdHMgb3duIGNvZGUgdW5pdCwKKyAgICAg
ICAgYmVjYXVzZSB0aGUgV0VCS0lUX0RFRklORV9UWVBFIGNhbm5vdCBiZSB1c2VkIG11bHRpcGxl
IHRpbWVzIGluIHRoZSBzYW1lIGZpbGUgKGl0IGRlZmluZXMgYQorICAgICAgICBwYXJlbnRfY2xh
c3Mgc3ltYm9sKS4gVGhlIEdob3N0UGFkIHdhcyBhbHNvIGRlY291cGxlZCBhcyBtdWNoIGFzIHBv
c3NpYmxlIGZyb20gdGhlIENvbWJpbmVyLgorICAgICAgICBNb3N0IG1lbnRpb25zIG9mIHRoZSBm
dW5uZWwgR1N0cmVhbWVyIGVsZW1lbnQgd2VyZSBtYWRlIG1vcmUgZ2VuZXJpYyBiZWNhdXNlIHdl
IG1pZ2h0IG5lZWQKKyAgICAgICAgdG8gdXNlIGEgZGlmZmVyZW50IGVsZW1lbnQgaW4gc2l0dWF0
aW9ucyB3aGVyZSB0aGUgcGlwZWxpbmUgaXMgcGxheWJpbjMtYmFzZWQsIHdoaWNoIHJlcXVpcmVz
CisgICAgICAgIHRoZSBjb25jYXQgZWxlbWVudC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGV4
aXN0aW5nIHRlc3RzIGNvdmVyIHRoaXMgcGF0Y2guCisKKyAgICAgICAgKiBwbGF0Zm9ybS9HU3Ry
ZWFtZXIuY21ha2U6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJl
YW1lckNvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnc3RFbGVtZW50RmFjdG9yeUVxdWFs
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1v
bi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UZXh0Q29tYmluZXJH
U3RyZWFtZXIuY3BwOgorICAgICAgICAod2ViS2l0VGV4dENvbWJpbmVySGFuZGxlQ2Fwc0V2ZW50
KToKKyAgICAgICAgKHdlYmtpdFRleHRDb21iaW5lclJlcXVlc3ROZXdQYWQpOgorICAgICAgICAo
d2Via2l0VGV4dENvbWJpbmVyUmVsZWFzZVBhZCk6CisgICAgICAgICh3ZWJLaXRUZXh0Q29tYmlu
ZXJDb25zdHJ1Y3RlZCk6CisgICAgICAgICh3ZWJraXRfdGV4dF9jb21iaW5lcl9jbGFzc19pbml0
KToKKyAgICAgICAgKHdlYmtpdFRleHRDb21iaW5lck5ldyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1RleHRDb21iaW5lckdTdHJlYW1lci5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UZXh0Q29tYmluZXJQYWRHU3RyZWFtZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKHdlYmtpdFRleHRDb21iaW5lclBhZEV2ZW50KToKKyAgICAgICAgKHdl
YmtpdFRleHRDb21iaW5lclBhZEdldFByb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdFRleHRDb21i
aW5lclBhZFNldFByb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdFRleHRDb21iaW5lclBhZENvbnN0
cnVjdGVkKToKKyAgICAgICAgKHdlYmtpdF90ZXh0X2NvbWJpbmVyX3BhZF9jbGFzc19pbml0KToK
KyAgICAgICAgKHdlYktpdFRleHRDb21iaW5lclBhZExlYWtJbnRlcm5hbFBhZFJlZik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RleHRDb21iaW5lclBhZEdTdHJlYW1l
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvVGV4dENvbWJpbmVyR1N0cmVhbWVyLmguCisKIDIwMjEtMDEtMTEgIEtpbW1vIEtpbm51bmVu
ICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJLaXQ6OklQQzo6RW5jb2RlciBu
ZWVkcyBkZWZpbml0aW9ucyBvZiBhbGwgY3VzdG9tIGVudW0gdmFsdWVzIGF0IHRoZSBFbmNvZGVy
IGRlZmluaXRpb24gdGltZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0
cmVhbWVyLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCmlu
ZGV4IDJhZjdhYTBkYTc3NjQ1ZjE5NWNmNzUyOTUwZDU5YmU2YTQ0NDkzYTMuLmZlNThmZDY3N2Y0
ZTFkZTQwZDZjZjI0MjY2OWExZDJmZjEzNGMwZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9H
U3RyZWFtZXIuY21ha2UKQEAgLTIxLDYgKzIxLDcgQEAgaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFC
TEVfV0VCX0FVRElPKQogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9UZXh0Q29tYmluZXJHU3RyZWFtZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9UZXh0Q29tYmluZXJQYWRHU3RyZWFtZXIuY3BwCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UZXh0U2lua0dTdHJlYW1lci5jcHAKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIuY3Bw
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvR1N0cmVhbWVyQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCmluZGV4IDk5MjE0NzY1YzJlNDg1ZDVmM2Y4
ZWU4YTIwOGRmM2MwZjUwMmIxMGUuLjQ4N2Q2ZTA4ZjVjZDdjZDE1YzE5M2NmZGQzMDEzZWEwNTMy
M2Y4NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9HU3RyZWFtZXJDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCkBAIC00MzYsNiArNDM2LDExIEBA
IGJvb2wgaXNHU3RyZWFtZXJQbHVnaW5BdmFpbGFibGUoY29uc3QgY2hhciogbmFtZSkKICAgICBy
ZXR1cm4gcGx1Z2luOwogfQogCitib29sIGdzdEVsZW1lbnRGYWN0b3J5RXF1YWxzKEdzdEVsZW1l
bnQqIGVsZW1lbnQsIGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgcmV0dXJuIGVxdWFsKEdTVF9P
QkpFQ1RfTkFNRShnc3RfZWxlbWVudF9nZXRfZmFjdG9yeShlbGVtZW50KSksIG5hbWUpOworfQor
CiBHc3RFbGVtZW50KiBjcmVhdGVQbGF0Zm9ybUF1ZGlvU2luaygpCiB7CiAgICAgR3N0RWxlbWVu
dCogYXVkaW9TaW5rID0gd2Via2l0QXVkaW9TaW5rTmV3KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9u
LmgKaW5kZXggNzM2MTMxMThiNTVhY2JkYmZhNjBmMjRmZDA0MjljNWQ2ODhjYjA2ZS4uNTI2YTk4
OTljYTNmNTI5YzA1MDdkNjEyNDFkN2ZkYmRhMzI4NmRjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21t
b24uaApAQCAtMjkxLDYgKzI5MSw3IEBAIHZvaWQgZGlzY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VD
YWxsYmFjayhHc3RFbGVtZW50KiBwaXBlbGluZSk7CiBlbnVtIGNsYXNzIEdzdFZpZGVvRGVjb2Rl
clBsYXRmb3JtIHsgSW14VlBVLCBWaWRlbzRMaW51eCwgT3Blbk1BWCB9OwogCiBib29sIGlzR1N0
cmVhbWVyUGx1Z2luQXZhaWxhYmxlKGNvbnN0IGNoYXIqIG5hbWUpOworYm9vbCBnc3RFbGVtZW50
RmFjdG9yeUVxdWFscyhHc3RFbGVtZW50KiwgY29uc3QgY2hhciogbmFtZSk7CiAKIEdzdEVsZW1l
bnQqIGNyZWF0ZVBsYXRmb3JtQXVkaW9TaW5rKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UZXh0Q29tYmluZXJHU3RyZWFtZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RleHRDb21iaW5l
ckdTdHJlYW1lci5jcHAKaW5kZXggYjFjNjExYzY0YTdkYmJjMmZmZDJkMGY1YmNkMjU3MTc4NGJl
MWMwNC4uNWUwODlhMTYyNWE5NTg5YzI1N2JhMWQzMWZiZjlmYzMyMDEzNzViOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RleHRDb21iaW5l
ckdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL1RleHRDb21iaW5lckdTdHJlYW1lci5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDEzIENhYmxlIFRlbGV2aXNpb24gTGFib3JhdG9yaWVzLCBJbmMuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhIFMuTC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjksMjcyICszMCwxNjAgQEAKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShH
U1RSRUFNRVIpCiAKICNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKKyNpbmNsdWRlICJUZXh0
Q29tYmluZXJQYWRHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5oPgog
Ci1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua1RlbXBsYXRlID0KLSAgICBHU1RfU1RB
VElDX1BBRF9URU1QTEFURSgic2lua18ldSIsIEdTVF9QQURfU0lOSywgR1NUX1BBRF9SRVFVRVNU
LAotICAgICAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1w
bGF0ZSBzaW5rVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgic2lua18ldSIsIEdT
VF9QQURfU0lOSywgR1NUX1BBRF9SRVFVRVNULCBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKIAotc3Rh
dGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY1RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BB
RF9URU1QTEFURSgic3JjIiwgR1NUX1BBRF9TUkMsIEdTVF9QQURfQUxXQVlTLAotICAgICAgICBH
U1RfU1RBVElDX0NBUFNfQU5ZKTsKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNUZW1w
bGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJzcmMiLCBHU1RfUEFEX1NSQywgR1NUX1BB
RF9BTFdBWVMsIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwogCiBHU1RfREVCVUdfQ0FURUdPUllfU1RB
VElDKHdlYmtpdFRleHRDb21iaW5lckRlYnVnKTsKICNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdl
YmtpdFRleHRDb21iaW5lckRlYnVnCiAKLSNkZWZpbmUgd2Via2l0X3RleHRfY29tYmluZXJfcGFy
ZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0VGV4
dENvbWJpbmVyLCB3ZWJraXRfdGV4dF9jb21iaW5lciwgR1NUX1RZUEVfQklOLAotICAgIEdTVF9E
RUJVR19DQVRFR09SWV9JTklUKHdlYmtpdFRleHRDb21iaW5lckRlYnVnLCAid2Via2l0dGV4dGNv
bWJpbmVyIiwgMCwKLSAgICAgICAgIndlYmtpdCB0ZXh0IGNvbWJpbmVyIikpOwotCi1lbnVtIHsK
LSAgICBQUk9QX1BBRF8wLAotICAgIFBST1BfUEFEX1RBR1MKK3N0cnVjdCBfV2ViS2l0VGV4dENv
bWJpbmVyUHJpdmF0ZSB7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBjb21iaW5lckVsZW1lbnQ7
CiB9OwogCi0jZGVmaW5lIFdFQktJVF9UWVBFX1RFWFRfQ09NQklORVJfUEFEIHdlYmtpdF90ZXh0
X2NvbWJpbmVyX3BhZF9nZXRfdHlwZSgpCi0KLSNkZWZpbmUgV0VCS0lUX1RFWFRfQ09NQklORVJf
UEFEKG9iaikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9U
RVhUX0NPTUJJTkVSX1BBRCwgV2ViS2l0VGV4dENvbWJpbmVyUGFkKSkKLSNkZWZpbmUgV0VCS0lU
X1RFWFRfQ09NQklORVJfUEFEX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1Qo
KGtsYXNzKSwgV0VCS0lUX1RZUEVfVEVYVF9DT01CSU5FUl9QQUQsIFdlYktpdFRleHRDb21iaW5l
clBhZENsYXNzKSkKLSNkZWZpbmUgV0VCS0lUX0lTX1RFWFRfQ09NQklORVJfUEFEKG9iaikgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9URVhUX0NPTUJJTkVS
X1BBRCkpCi0jZGVmaW5lIFdFQktJVF9JU19URVhUX0NPTUJJTkVSX1BBRF9DTEFTUyhrbGFzcykg
KEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksIFdFQktJVF9UWVBFX1RFWFRfQ09NQklO
RVJfUEFEKSkKLSNkZWZpbmUgV0VCS0lUX1RFWFRfQ09NQklORVJfUEFEX0dFVF9DTEFTUyhvYmop
IChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCBXRUJLSVRfVFlQRV9URVhUX0NPTUJJ
TkVSX1BBRCwgV2ViS2l0VGV4dENvbWJpbmVyUGFkQ2xhc3MpKQotCi10eXBlZGVmIHN0cnVjdCBf
V2ViS2l0VGV4dENvbWJpbmVyUGFkIFdlYktpdFRleHRDb21iaW5lclBhZDsKLXR5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRUZXh0Q29tYmluZXJQYWRDbGFzcyBXZWJLaXRUZXh0Q29tYmluZXJQYWRDbGFz
czsKLQotc3RydWN0IF9XZWJLaXRUZXh0Q29tYmluZXJQYWQgewotICAgIEdzdEdob3N0UGFkIHBh
cmVudDsKLQotICAgIEdzdFRhZ0xpc3QqIHRhZ3M7Ci0gICAgR3N0UGFkKiBmdW5uZWxQYWQ7Ci19
OwotCi1zdHJ1Y3QgX1dlYktpdFRleHRDb21iaW5lclBhZENsYXNzIHsKLSAgICBHc3RHaG9zdFBh
ZENsYXNzIHBhcmVudDsKLX07Ci0KLUdfREVGSU5FX1RZUEUoV2ViS2l0VGV4dENvbWJpbmVyUGFk
LCB3ZWJraXRfdGV4dF9jb21iaW5lcl9wYWQsIEdTVF9UWVBFX0dIT1NUX1BBRCk7Ci0KLXN0YXRp
YyBHVHlwZSB3ZWJWVFRFbmNUeXBlOwotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0VGV4dENvbWJp
bmVyUGFkRXZlbnQoR3N0UGFkKiwgR3N0T2JqZWN0KiBwYXJlbnQsIEdzdEV2ZW50Kik7Ci0KLXN0
YXRpYyB2b2lkIHdlYmtpdF90ZXh0X2NvbWJpbmVyX2luaXQoV2ViS2l0VGV4dENvbWJpbmVyKiBj
b21iaW5lcikKLXsKLSAgICBjb21iaW5lci0+ZnVubmVsID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9t
YWtlKCJmdW5uZWwiLCBudWxscHRyKTsKLSAgICBBU1NFUlQoY29tYmluZXItPmZ1bm5lbCk7Ci0K
LSAgICBnYm9vbGVhbiByZXQgPSBnc3RfYmluX2FkZChHU1RfQklOKGNvbWJpbmVyKSwgY29tYmlu
ZXItPmZ1bm5lbCk7Ci0gICAgVU5VU0VEX1BBUkFNKHJldCk7Ci0gICAgQVNTRVJUKHJldCk7Ci0K
LSAgICBHUmVmUHRyPEdzdFBhZD4gcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0
aWNfcGFkKGNvbWJpbmVyLT5mdW5uZWwsICJzcmMiKSk7Ci0gICAgQVNTRVJUKHBhZCk7Ci0KLSAg
ICByZXQgPSBnc3RfZWxlbWVudF9hZGRfcGFkKEdTVF9FTEVNRU5UKGNvbWJpbmVyKSwgZ3N0X2do
b3N0X3BhZF9uZXcoInNyYyIsIHBhZC5nZXQoKSkpOwotICAgIEFTU0VSVChyZXQpOwotfQotCi1z
dGF0aWMgdm9pZCB3ZWJraXRfdGV4dF9jb21iaW5lcl9wYWRfaW5pdChXZWJLaXRUZXh0Q29tYmlu
ZXJQYWQqIHBhZCkKLXsKLSAgICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbihHU1RfUEFEKHBh
ZCksIHdlYmtpdFRleHRDb21iaW5lclBhZEV2ZW50KTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0
VGV4dENvbWJpbmVyUGFkRGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgV2ViS2l0VGV4
dENvbWJpbmVyUGFkKiBjb21iaW5lclBhZCA9IFdFQktJVF9URVhUX0NPTUJJTkVSX1BBRChvYmpl
Y3QpOwotICAgIGdfY2xlYXJfcG9pbnRlcigmY29tYmluZXJQYWQtPnRhZ3MsIGdzdF90YWdfbGlz
dF91bnJlZik7Ci0gICAgZ19jbGVhcl9wb2ludGVyKCZjb21iaW5lclBhZC0+ZnVubmVsUGFkLCBn
c3Rfb2JqZWN0X3VucmVmKTsKLSAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfdGV4dF9jb21iaW5l
cl9wYWRfcGFyZW50X2NsYXNzKS0+ZGlzcG9zZShvYmplY3QpOwotfQorI2RlZmluZSB3ZWJraXRf
dGV4dF9jb21iaW5lcl9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCitXRUJLSVRfREVGSU5FX1RZ
UEVfV0lUSF9DT0RFKFdlYktpdFRleHRDb21iaW5lciwgd2Via2l0X3RleHRfY29tYmluZXIsIEdT
VF9UWVBFX0JJTiwKKyAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRUZXh0Q29tYmlu
ZXJEZWJ1ZywgIndlYmtpdHRleHRjb21iaW5lciIsIDAsICJ3ZWJraXQgdGV4dCBjb21iaW5lciIp
KQogCi1zdGF0aWMgdm9pZCB3ZWJraXRUZXh0Q29tYmluZXJQYWRHZXRQcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBz
cGVjKQotewotICAgIFdlYktpdFRleHRDb21iaW5lclBhZCogcGFkID0gV0VCS0lUX1RFWFRfQ09N
QklORVJfUEFEKG9iamVjdCk7Ci0gICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Ci0gICAgY2FzZSBQ
Uk9QX1BBRF9UQUdTOgotICAgICAgICBHU1RfT0JKRUNUX0xPQ0sob2JqZWN0KTsKLSAgICAgICAg
aWYgKHBhZC0+dGFncykKLSAgICAgICAgICAgIGdfdmFsdWVfdGFrZV9ib3hlZCh2YWx1ZSwgZ3N0
X3RhZ19saXN0X2NvcHkocGFkLT50YWdzKSk7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG9i
amVjdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotfQordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLXN0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRUZXh0Q29tYmluZXJQYWRFdmVudChHc3RQYWQqIHBhZCwgR3N0T2JqZWN0
KiBwYXJlbnQsIEdzdEV2ZW50KiBldmVudCkKK3ZvaWQgd2ViS2l0VGV4dENvbWJpbmVySGFuZGxl
Q2Fwc0V2ZW50KFdlYktpdFRleHRDb21iaW5lciogY29tYmluZXIsIEdzdFBhZCogcGFkLCBHc3RF
dmVudCogZXZlbnQpCiB7Ci0gICAgZ2Jvb2xlYW4gcmV0OwotICAgIFVOVVNFRF9QQVJBTShyZXQp
OwotICAgIFdlYktpdFRleHRDb21iaW5lciogY29tYmluZXIgPSBXRUJLSVRfVEVYVF9DT01CSU5F
UihwYXJlbnQpOwotICAgIFdlYktpdFRleHRDb21iaW5lclBhZCogY29tYmluZXJQYWQgPSBXRUJL
SVRfVEVYVF9DT01CSU5FUl9QQUQocGFkKTsKLSAgICBBU1NFUlQoY29tYmluZXIpOwotCi0gICAg
c3dpdGNoIChHU1RfRVZFTlRfVFlQRShldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9DQVBT
OiB7Ci0gICAgICAgIEdzdENhcHMqIGNhcHM7Ci0gICAgICAgIGdzdF9ldmVudF9wYXJzZV9jYXBz
KGV2ZW50LCAmY2Fwcyk7Ci0gICAgICAgIEFTU0VSVChjYXBzKTsKLQotICAgICAgICBHUmVmUHRy
PEdzdFBhZD4gdGFyZ2V0ID0gYWRvcHRHUmVmKGdzdF9naG9zdF9wYWRfZ2V0X3RhcmdldChHU1Rf
R0hPU1RfUEFEKHBhZCkpKTsKLSAgICAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiB0YXJnZXRQYXJl
bnQgPSB0YXJnZXQgPyBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfcGFyZW50X2VsZW1lbnQodGFyZ2V0
LmdldCgpKSkgOiBudWxscHRyOwotCi0gICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gdGV4dENhcHMg
PSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSgidGV4dC94LXJhdyIpKTsKLSAg
ICAgICAgaWYgKGdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QodGV4dENhcHMuZ2V0KCksIGNhcHMpKSB7
Ci0gICAgICAgICAgICAvLyBDYXBzIGFyZSBwbGFpbiB0ZXh0LCB3ZSB3YW50IGEgV2ViVlRUIGVu
Y29kZXIgYmV0d2VlbiB0aGUgZ2hvc3RwYWQgYW5kIHRoZSBmdW5uZWwuCi0gICAgICAgICAgICBp
ZiAoIXRhcmdldCB8fCBHX1RZUEVfRlJPTV9JTlNUQU5DRSh0YXJnZXRQYXJlbnQuZ2V0KCkpICE9
IHdlYlZUVEVuY1R5cGUpIHsKLSAgICAgICAgICAgICAgICAvLyBTZXR1cCBhIFdlYlZUVCBlbmNv
ZGVyLgotICAgICAgICAgICAgICAgIEdzdEVsZW1lbnQqIGVuY29kZXIgPSBnc3RfZWxlbWVudF9m
YWN0b3J5X21ha2UoIndlYnZ0dGVuYyIsIG51bGxwdHIpOwotICAgICAgICAgICAgICAgIEFTU0VS
VChlbmNvZGVyKTsKLQotICAgICAgICAgICAgICAgIHJldCA9IGdzdF9iaW5fYWRkKEdTVF9CSU4o
Y29tYmluZXIpLCBlbmNvZGVyKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQocmV0KTsKLQotICAg
ICAgICAgICAgICAgIHJldCA9IGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoZW5j
b2Rlcik7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHJldCk7Ci0KLSAgICAgICAgICAgICAgICAv
LyBTd2l0Y2ggdGhlIGdob3N0cGFkIHRvIHRhcmdldCB0aGUgV2ViVlRUIGVuY29kZXIuCi0gICAg
ICAgICAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1l
bnRfZ2V0X3N0YXRpY19wYWQoZW5jb2RlciwgInNpbmsiKSk7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKHNpbmtQYWQpOwotCi0gICAgICAgICAgICAgICAgcmV0ID0gZ3N0X2dob3N0X3BhZF9zZXRf
dGFyZ2V0KEdTVF9HSE9TVF9QQUQocGFkKSwgc2lua1BhZC5nZXQoKSk7Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKHJldCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBDb25uZWN0IHRoZSBXZWJWVFQg
ZW5jb2RlciB0byB0aGUgZnVubmVsLgotICAgICAgICAgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBz
cmNQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoZW5jb2RlciwgInNy
YyIpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoc3JjUGFkKTsKLQotICAgICAgICAgICAgICAg
IHJldCA9IEdTVF9QQURfTElOS19TVUNDRVNTRlVMKGdzdF9wYWRfbGluayhzcmNQYWQuZ2V0KCks
IGNvbWJpbmVyUGFkLT5mdW5uZWxQYWQpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQocmV0KTsK
LSAgICAgICAgICAgIH0gLy8gRWxzZTogcGlwZWxpbmUgaXMgYWxyZWFkeSBjb3JyZWN0LgotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gQ2FwcyBhcmUgbm90IHBsYWluIHRleHQsIHdl
IGFzc3VtZSBpdCdzIFdlYlZUVC4KLQotICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBXZWJWVFQg
ZW5jb2RlciBpZiBwcmVzZW50LgotICAgICAgICAgICAgaWYgKHRhcmdldCAmJiBHX1RZUEVfRlJP
TV9JTlNUQU5DRSh0YXJnZXRQYXJlbnQuZ2V0KCkpID09IHdlYlZUVEVuY1R5cGUpIHsKLSAgICAg
ICAgICAgICAgICByZXQgPSBnc3RfYmluX3JlbW92ZShHU1RfQklOKGNvbWJpbmVyKSwgdGFyZ2V0
UGFyZW50LmdldCgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQocmV0KTsKLQotICAgICAgICAg
ICAgICAgIHRhcmdldCA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgdGFyZ2V0UGFyZW50ID0g
bnVsbHB0cjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gTGluayB0aGUgcGFkIHRv
IHRoZSBmdW5uZWwuCi0gICAgICAgICAgICBpZiAoIXRhcmdldCkgewotICAgICAgICAgICAgICAg
IHJldCA9IGdzdF9naG9zdF9wYWRfc2V0X3RhcmdldChHU1RfR0hPU1RfUEFEKHBhZCksIGNvbWJp
bmVyUGFkLT5mdW5uZWxQYWQpOwotICAgICAgICAgICAgICAgIEFTU0VSVChyZXQpOwotICAgICAg
ICAgICAgfSAvLyBFbHNlOiBwaXBlbGluZSBpcyBhbHJlYWR5IGNvcnJlY3QuCisgICAgR3N0Q2Fw
cyogY2FwczsKKyAgICBnc3RfZXZlbnRfcGFyc2VfY2FwcyhldmVudCwgJmNhcHMpOworICAgIEFT
U0VSVChjYXBzKTsKKyAgICBHU1RfREVCVUcoIkhhbmRsaW5nIGNhcHMgJSIgR1NUX1BUUl9GT1JN
QVQsIGNhcHMpOworCisgICAgYXV0byB0YXJnZXQgPSBhZG9wdEdSZWYoZ3N0X2dob3N0X3BhZF9n
ZXRfdGFyZ2V0KEdTVF9HSE9TVF9QQUQocGFkKSkpOworICAgIGF1dG8gdGFyZ2V0UGFyZW50ID0g
dGFyZ2V0ID8gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50KHRhcmdldC5nZXQo
KSkpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBjb21iaW5lclBhZCA9IFdFQktJVF9URVhUX0NPTUJJ
TkVSX1BBRChwYWQpOworCisgICAgR1JlZlB0cjxHc3RQYWQ+IGludGVybmFsUGFkOworICAgIGdf
b2JqZWN0X2dldChjb21iaW5lclBhZCwgImlubmVyLWNvbWJpbmVyLXBhZCIsICZpbnRlcm5hbFBh
ZC5vdXRQdHIoKSwgbnVsbHB0cik7CisKKyAgICBhdXRvIHRleHRDYXBzID0gYWRvcHRHUmVmKGdz
dF9jYXBzX25ld19lbXB0eV9zaW1wbGUoInRleHQveC1yYXciKSk7CisgICAgaWYgKGdzdF9jYXBz
X2Nhbl9pbnRlcnNlY3QodGV4dENhcHMuZ2V0KCksIGNhcHMpKSB7CisgICAgICAgIC8vIENhcHMg
YXJlIHBsYWluIHRleHQsIHdlIHdhbnQgYSBXZWJWVFQgZW5jb2RlciBiZXR3ZWVuIHRoZSBnaG9z
dHBhZCBhbmQgdGhlIGNvbWJpbmVyRWxlbWVudC4KKyAgICAgICAgaWYgKCF0YXJnZXQgfHwgZ3N0
RWxlbWVudEZhY3RvcnlFcXVhbHModGFyZ2V0UGFyZW50LmdldCgpLCAid2VidnR0ZW5jIl9zKSkg
eworICAgICAgICAgICAgR1NUX0RFQlVHKCJTZXR0aW5nIHVwIGEgV2ViVlRUIGVuY29kZXIiKTsK
KyAgICAgICAgICAgIGF1dG8qIGVuY29kZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoIndl
YnZ0dGVuYyIsIG51bGxwdHIpOworICAgICAgICAgICAgQVNTRVJUKGVuY29kZXIpOworCisgICAg
ICAgICAgICBnc3RfYmluX2FkZChHU1RfQklOX0NBU1QoY29tYmluZXIpLCBlbmNvZGVyKTsKKyAg
ICAgICAgICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoZW5jb2Rlcik7CisK
KyAgICAgICAgICAgIC8vIFN3aXRjaCB0aGUgZ2hvc3RwYWQgdG8gdGFyZ2V0IHRoZSBXZWJWVFQg
ZW5jb2Rlci4KKyAgICAgICAgICAgIGF1dG8gc2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVu
dF9nZXRfc3RhdGljX3BhZChlbmNvZGVyLCAic2luayIpKTsKKyAgICAgICAgICAgIEFTU0VSVChz
aW5rUGFkKTsKKworICAgICAgICAgICAgZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0KEdTVF9HSE9T
VF9QQUQocGFkKSwgc2lua1BhZC5nZXQoKSk7CisKKyAgICAgICAgICAgIC8vIENvbm5lY3QgdGhl
IFdlYlZUVCBlbmNvZGVyIHRvIHRoZSBjb21iaW5lckVsZW1lbnQuCisgICAgICAgICAgICBhdXRv
IHNyY1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChlbmNvZGVyLCAi
c3JjIikpOworICAgICAgICAgICAgQVNTRVJUKHNyY1BhZCk7CisKKyAgICAgICAgICAgIGdzdF9w
YWRfbGluayhzcmNQYWQuZ2V0KCksIGludGVybmFsUGFkLmdldCgpKTsKKyAgICAgICAgfSAvLyBF
bHNlOiBwaXBlbGluZSBpcyBhbHJlYWR5IGNvcnJlY3QuCisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gQ2FwcyBhcmUgbm90IHBsYWluIHRleHQsIHdlIGFzc3VtZSBpdCdzIFdlYlZUVC4KKworICAg
ICAgICAvLyBSZW1vdmUgdGhlIFdlYlZUVCBlbmNvZGVyIGlmIHByZXNlbnQuCisgICAgICAgIGlm
ICh0YXJnZXQgJiYgZ3N0RWxlbWVudEZhY3RvcnlFcXVhbHModGFyZ2V0UGFyZW50LmdldCgpLCAi
d2VidnR0ZW5jIl9zKSkgeworICAgICAgICAgICAgR1NUX0RFQlVHKCJSZW1vdmluZyBXZWJWVFQg
ZW5jb2RlciIpOworICAgICAgICAgICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJTl9DQVNUKGNvbWJp
bmVyKSwgdGFyZ2V0UGFyZW50LmdldCgpKTsKKyAgICAgICAgICAgIHRhcmdldCA9IG51bGxwdHI7
CisgICAgICAgICAgICB0YXJnZXRQYXJlbnQgPSBudWxscHRyOwogICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9UQUc6IHsKLSAgICAgICAgR3N0VGFn
TGlzdCogdGFnczsKLSAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3RhZyhldmVudCwgJnRhZ3MpOwot
ICAgICAgICBBU1NFUlQodGFncyk7Ci0KLSAgICAgICAgR1NUX09CSkVDVF9MT0NLKHBhZCk7Ci0g
ICAgICAgIGlmICghY29tYmluZXJQYWQtPnRhZ3MpCi0gICAgICAgICAgICBjb21iaW5lclBhZC0+
dGFncyA9IGdzdF90YWdfbGlzdF9jb3B5KHRhZ3MpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBnc3RfdGFnX2xpc3RfaW5zZXJ0KGNvbWJpbmVyUGFkLT50YWdzLCB0YWdzLCBHU1RfVEFHX01F
UkdFX1JFUExBQ0UpOwotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhwYWQpOwotCi0gICAgICAg
IGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChwYWQpLCAidGFncyIpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gTGluayB0
aGUgcGFkIHRvIHRoZSBjb21iaW5lckVsZW1lbnQuCisgICAgICAgIGlmICghdGFyZ2V0KSB7Cisg
ICAgICAgICAgICBHU1RfREVCVUcoIkFzc29jaWF0aW5nICUiIEdTVF9QVFJfRk9STUFUICIgdG8g
JSIgR1NUX1BUUl9GT1JNQVQsIGludGVybmFsUGFkLmdldCgpLCBwYWQpOworICAgICAgICAgICAg
Z3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0KEdTVF9HSE9TVF9QQUQocGFkKSwgaW50ZXJuYWxQYWQu
Z2V0KCkpOworICAgICAgICB9IC8vIEVsc2U6IHBpcGVsaW5lIGlzIGFscmVhZHkgY29ycmVjdC4K
ICAgICB9Ci0gICAgcmV0dXJuIGdzdF9wYWRfZXZlbnRfZGVmYXVsdChwYWQsIHBhcmVudCwgZXZl
bnQpOwogfQogCi1zdGF0aWMgR3N0UGFkKiB3ZWJraXRUZXh0Q29tYmluZXJSZXF1ZXN0TmV3UGFk
KEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFBhZFRlbXBsYXRlICogdGVtcGwsIGNvbnN0
IGdjaGFyICogbmFtZSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMpCitzdGF0aWMgR3N0UGFkKiB3ZWJr
aXRUZXh0Q29tYmluZXJSZXF1ZXN0TmV3UGFkKEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdFBhZFRl
bXBsYXRlKiB0ZW1wbCwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgR3N0Q2FwcyogY2FwcykKIHsK
LSAgICBnYm9vbGVhbiByZXQ7Ci0gICAgVU5VU0VEX1BBUkFNKHJldCk7Ci0gICAgQVNTRVJUKHRl
bXBsKTsKLQotICAgIFdlYktpdFRleHRDb21iaW5lciogY29tYmluZXIgPSBXRUJLSVRfVEVYVF9D
T01CSU5FUihlbGVtZW50KTsKKyAgICBhdXRvKiBjb21iaW5lciA9IFdFQktJVF9URVhUX0NPTUJJ
TkVSKGVsZW1lbnQpOwogICAgIEFTU0VSVChjb21iaW5lcik7CiAKLSAgICBHc3RQYWQqIGdob3N0
UGFkID0gR1NUX1BBRChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfVEVYVF9DT01CSU5FUl9QQUQs
ICJkaXJlY3Rpb24iLCBHU1RfUEFEX1NJTkssIG51bGxwdHIpKTsKKyAgICBHU1RfREVCVUdfT0JK
RUNUKGVsZW1lbnQsICJSZXF1ZXN0aW5nIG5ldyBwYWQiKTsKKyAgICBhdXRvKiBnaG9zdFBhZCA9
IEdTVF9QQUQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1RFWFRfQ09NQklORVJfUEFELCAiZGly
ZWN0aW9uIiwgR1NUX1BBRF9TSU5LLCBudWxscHRyKSk7CiAgICAgQVNTRVJUKGdob3N0UGFkKTsK
IAotICAgIHJldCA9IGdzdF9naG9zdF9wYWRfY29uc3RydWN0KEdTVF9HSE9TVF9QQUQoZ2hvc3RQ
YWQpKTsKLSAgICBBU1NFUlQocmV0KTsKKyAgICBnc3RfZ2hvc3RfcGFkX2NvbnN0cnVjdChHU1Rf
R0hPU1RfUEFEKGdob3N0UGFkKSk7CiAKLSAgICBXZWJLaXRUZXh0Q29tYmluZXJQYWQqIGNvbWJp
bmVyUGFkID0gV0VCS0lUX1RFWFRfQ09NQklORVJfUEFEKGdob3N0UGFkKTsKLSAgICBjb21iaW5l
clBhZC0+ZnVubmVsUGFkID0gZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQoY29tYmluZXItPmZ1bm5l
bCwgdGVtcGwsIG5hbWUsIGNhcHMpOwotICAgIEFTU0VSVChjb21iaW5lclBhZC0+ZnVubmVsUGFk
KTsKKyAgICBhdXRvIGludGVybmFsUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X3JlcXVlc3Rf
cGFkKGNvbWJpbmVyLT5wcml2LT5jb21iaW5lckVsZW1lbnQuZ2V0KCksIHRlbXBsLCBuYW1lLCBj
YXBzKSk7CisgICAgZ19vYmplY3Rfc2V0KFdFQktJVF9URVhUX0NPTUJJTkVSX1BBRChnaG9zdFBh
ZCksICJpbm5lci1jb21iaW5lci1wYWQiLCBpbnRlcm5hbFBhZC5sZWFrUmVmKCksIG51bGxwdHIp
OwogCi0gICAgcmV0ID0gZ3N0X3BhZF9zZXRfYWN0aXZlKGdob3N0UGFkLCB0cnVlKTsKLSAgICBB
U1NFUlQocmV0KTsKLQotICAgIHJldCA9IGdzdF9lbGVtZW50X2FkZF9wYWQoR1NUX0VMRU1FTlQo
Y29tYmluZXIpLCBnaG9zdFBhZCk7Ci0gICAgQVNTRVJUKHJldCk7CisgICAgZ3N0X3BhZF9zZXRf
YWN0aXZlKGdob3N0UGFkLCB0cnVlKTsKKyAgICBnc3RfZWxlbWVudF9hZGRfcGFkKEdTVF9FTEVN
RU5UX0NBU1QoY29tYmluZXIpLCBnaG9zdFBhZCk7CiAgICAgcmV0dXJuIGdob3N0UGFkOwogfQog
Ci1zdGF0aWMgdm9pZCB3ZWJraXRUZXh0Q29tYmluZXJSZWxlYXNlUGFkKEdzdEVsZW1lbnQgKmVs
ZW1lbnQsIEdzdFBhZCAqcGFkKQorc3RhdGljIHZvaWQgd2Via2l0VGV4dENvbWJpbmVyUmVsZWFz
ZVBhZChHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RQYWQqIHBhZCkKIHsKLSAgICBXZWJLaXRUZXh0
Q29tYmluZXIqIGNvbWJpbmVyID0gV0VCS0lUX1RFWFRfQ09NQklORVIoZWxlbWVudCk7Ci0gICAg
V2ViS2l0VGV4dENvbWJpbmVyUGFkKiBjb21iaW5lclBhZCA9IFdFQktJVF9URVhUX0NPTUJJTkVS
X1BBRChwYWQpOworICAgIGF1dG8qIGNvbWJpbmVyID0gV0VCS0lUX1RFWFRfQ09NQklORVIoZWxl
bWVudCk7CisgICAgYXV0byogY29tYmluZXJQYWQgPSBXRUJLSVRfVEVYVF9DT01CSU5FUl9QQUQo
cGFkKTsKIAotICAgIGlmIChHUmVmUHRyPEdzdFBhZD4gdGFyZ2V0ID0gYWRvcHRHUmVmKGdzdF9n
aG9zdF9wYWRfZ2V0X3RhcmdldChHU1RfR0hPU1RfUEFEKHBhZCkpKSkgewotICAgICAgICBHUmVm
UHRyPEdzdEVsZW1lbnQ+IHBhcmVudCA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wYXJlbnRfZWxl
bWVudCh0YXJnZXQuZ2V0KCkpKTsKKyAgICBpZiAoYXV0byB0YXJnZXQgPSBhZG9wdEdSZWYoZ3N0
X2dob3N0X3BhZF9nZXRfdGFyZ2V0KEdTVF9HSE9TVF9QQUQocGFkKSkpKSB7CisgICAgICAgIGF1
dG8gcGFyZW50ID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50KHRhcmdldC5n
ZXQoKSkpOwogICAgICAgICBBU1NFUlQocGFyZW50KTsKLSAgICAgICAgaWYgKEdfVFlQRV9GUk9N
X0lOU1RBTkNFKHBhcmVudC5nZXQoKSkgPT0gd2ViVlRURW5jVHlwZSkgeworICAgICAgICBpZiAo
Z3N0RWxlbWVudEZhY3RvcnlFcXVhbHMocGFyZW50LmdldCgpLCAid2VidnR0ZW5jIl9zKSkgewog
ICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKHBhcmVudC5nZXQoKSwgR1NUX1NUQVRF
X05VTEwpOwotICAgICAgICAgICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJTihjb21iaW5lciksIHBh
cmVudC5nZXQoKSk7CisgICAgICAgICAgICBnc3RfYmluX3JlbW92ZShHU1RfQklOX0NBU1QoY29t
YmluZXIpLCBwYXJlbnQuZ2V0KCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgZ3N0X2VsZW1l
bnRfcmVsZWFzZV9yZXF1ZXN0X3BhZChjb21iaW5lci0+ZnVubmVsLCBjb21iaW5lclBhZC0+ZnVu
bmVsUGFkKTsKKyAgICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkKGNvbWJpbmVyLT5w
cml2LT5jb21iaW5lckVsZW1lbnQuZ2V0KCksIHdlYktpdFRleHRDb21iaW5lclBhZExlYWtJbnRl
cm5hbFBhZFJlZihjb21iaW5lclBhZCkpOwogICAgIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQoZWxl
bWVudCwgcGFkKTsKIH0KIAotc3RhdGljIHZvaWQgd2Via2l0X3RleHRfY29tYmluZXJfY2xhc3Nf
aW5pdChXZWJLaXRUZXh0Q29tYmluZXJDbGFzcyoga2xhc3MpCitzdGF0aWMgdm9pZCB3ZWJLaXRU
ZXh0Q29tYmluZXJDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgR3N0RWxlbWVu
dENsYXNzKiBlbGVtZW50Q2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyhrbGFzcyk7CisgICAgR1NU
X0NBTExfUEFSRU5UKEdfT0JKRUNUX0NMQVNTLCBjb25zdHJ1Y3RlZCwgKG9iamVjdCkpOwogCi0g
ICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZShlbGVtZW50Q2xhc3MsIGdzdF9z
dGF0aWNfcGFkX3RlbXBsYXRlX2dldCgmc2lua1RlbXBsYXRlKSk7Ci0gICAgZ3N0X2VsZW1lbnRf
Y2xhc3NfYWRkX3BhZF90ZW1wbGF0ZShlbGVtZW50Q2xhc3MsIGdzdF9zdGF0aWNfcGFkX3RlbXBs
YXRlX2dldCgmc3JjVGVtcGxhdGUpKTsKKyAgICBhdXRvKiBjb21iaW5lciA9IFdFQktJVF9URVhU
X0NPTUJJTkVSKG9iamVjdCk7CisgICAgYXV0byogcHJpdiA9IGNvbWJpbmVyLT5wcml2OwogCi0g
ICAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X21ldGFkYXRhKGVsZW1lbnRDbGFzcywgIldlYktpdCB0
ZXh0IGNvbWJpbmVyIiwgIkdlbmVyaWMiLAotICAgICAgICAiQSBmdW5uZWwgdGhhdCBhY2NlcHRz
IGFueSBjYXBzLCBidXQgY29udmVydHMgcGxhaW4gdGV4dCB0byBXZWJWVFQiLAotICAgICAgICAi
QnJlbmRhbiBMb25nIDxiLmxvbmdAY2FibGVsYWJzLmNvbT4iKTsKKyAgICAvLyBGb3Igbm93IGEg
ZnVubmVsIGlzIHVzZWQsIGJ1dCBhIGJldHRlciBjb21iaW5lciwgY29tcGF0aWJsZSB3aXRoIHBs
YXliaW4zIHVzZS1jYXNlcywgd291bGQgYmUgY29uY2F0LgorICAgIHByaXYtPmNvbWJpbmVyRWxl
bWVudCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiZnVubmVsIiwgbnVsbHB0cik7CisgICAg
QVNTRVJUKHByaXYtPmNvbWJpbmVyRWxlbWVudCk7CiAKLSAgICBlbGVtZW50Q2xhc3MtPnJlcXVl
c3RfbmV3X3BhZCA9Ci0gICAgICAgIEdTVF9ERUJVR19GVU5DUFRSKHdlYmtpdFRleHRDb21iaW5l
clJlcXVlc3ROZXdQYWQpOwotICAgIGVsZW1lbnRDbGFzcy0+cmVsZWFzZV9wYWQgPQotICAgICAg
ICBHU1RfREVCVUdfRlVOQ1BUUih3ZWJraXRUZXh0Q29tYmluZXJSZWxlYXNlUGFkKTsKKyAgICBn
c3RfYmluX2FkZChHU1RfQklOX0NBU1QoY29tYmluZXIpLCBwcml2LT5jb21iaW5lckVsZW1lbnQu
Z2V0KCkpOwogCi0gICAgR1JlZlB0cjxHc3RFbGVtZW50RmFjdG9yeT4gd2ViVlRURW5jRmFjdG9y
eSA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9mYWN0b3J5X2ZpbmQoIndlYnZ0dGVuYyIpKTsKLSAg
ICBBU1NFUlQod2ViVlRURW5jRmFjdG9yeSk7Ci0gICAgZ3N0X29iamVjdF91bnJlZihnc3RfcGx1
Z2luX2ZlYXR1cmVfbG9hZChHU1RfUExVR0lOX0ZFQVRVUkUod2ViVlRURW5jRmFjdG9yeS5nZXQo
KSkpKTsKLSAgICB3ZWJWVFRFbmNUeXBlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfZWxlbWVu
dF90eXBlKHdlYlZUVEVuY0ZhY3RvcnkuZ2V0KCkpOwotICAgIEFTU0VSVCh3ZWJWVFRFbmNUeXBl
KTsKKyAgICBhdXRvIHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChw
cml2LT5jb21iaW5lckVsZW1lbnQuZ2V0KCksICJzcmMiKSk7CisgICAgQVNTRVJUKHBhZCk7CisK
KyAgICBnc3RfZWxlbWVudF9hZGRfcGFkKEdTVF9FTEVNRU5UX0NBU1QoY29tYmluZXIpLCBnc3Rf
Z2hvc3RfcGFkX25ldygic3JjIiwgcGFkLmdldCgpKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHdlYmtp
dF90ZXh0X2NvbWJpbmVyX3BhZF9jbGFzc19pbml0KFdlYktpdFRleHRDb21iaW5lclBhZENsYXNz
KiBrbGFzcykKK3N0YXRpYyB2b2lkIHdlYmtpdF90ZXh0X2NvbWJpbmVyX2NsYXNzX2luaXQoV2Vi
S2l0VGV4dENvbWJpbmVyQ2xhc3MqIGtsYXNzKQogewotICAgIEdPYmplY3RDbGFzcyogZ29iamVj
dENsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIGF1dG8qIGVsZW1lbnRDbGFzcyA9
IEdTVF9FTEVNRU5UX0NMQVNTKGtsYXNzKTsKKyAgICBhdXRvKiBvYmplY3RDbGFzcyA9IEdfT0JK
RUNUX0NMQVNTKGtsYXNzKTsKIAotICAgIGdvYmplY3RDbGFzcy0+ZGlzcG9zZSA9IEdTVF9ERUJV
R19GVU5DUFRSKHdlYmtpdFRleHRDb21iaW5lclBhZERpc3Bvc2UpOwotICAgIGdvYmplY3RDbGFz
cy0+Z2V0X3Byb3BlcnR5ID0gR1NUX0RFQlVHX0ZVTkNQVFIod2Via2l0VGV4dENvbWJpbmVyUGFk
R2V0UHJvcGVydHkpOworICAgIG9iamVjdENsYXNzLT5jb25zdHJ1Y3RlZCA9IHdlYktpdFRleHRD
b21iaW5lckNvbnN0cnVjdGVkOworCisgICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1w
bGF0ZShlbGVtZW50Q2xhc3MsIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCgmc2lua1RlbXBs
YXRlKSk7CisgICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZShlbGVtZW50Q2xh
c3MsIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCgmc3JjVGVtcGxhdGUpKTsKKworICAgIGdz
dF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YShlbGVtZW50Q2xhc3MsICJXZWJLaXQgdGV4dCBj
b21iaW5lciIsICJHZW5lcmljIiwKKyAgICAgICAgIkEgY29tYmluZXIgdGhhdCBhY2NlcHRzIGFu
eSBjYXBzLCBidXQgY29udmVydHMgcGxhaW4gdGV4dCB0byBXZWJWVFQiLAorICAgICAgICAiQnJl
bmRhbiBMb25nIDxiLmxvbmdAY2FibGVsYWJzLmNvbT4iKTsKIAotICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLCBQUk9QX1BBRF9UQUdTLAotICAgICAgICBn
X3BhcmFtX3NwZWNfYm94ZWQoInRhZ3MiLCAiVGFncyIsICJUaGUgY3VycmVudGx5IGFjdGl2ZSB0
YWdzIG9uIHRoZSBwYWQiLCBHU1RfVFlQRV9UQUdfTElTVCwKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PEdQYXJhbUZsYWdzPihHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5H
UykpKTsKKyAgICBlbGVtZW50Q2xhc3MtPnJlcXVlc3RfbmV3X3BhZCA9IEdTVF9ERUJVR19GVU5D
UFRSKHdlYmtpdFRleHRDb21iaW5lclJlcXVlc3ROZXdQYWQpOworICAgIGVsZW1lbnRDbGFzcy0+
cmVsZWFzZV9wYWQgPSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJraXRUZXh0Q29tYmluZXJSZWxlYXNl
UGFkKTsKIH0KIAogR3N0RWxlbWVudCogd2Via2l0VGV4dENvbWJpbmVyTmV3KCkKIHsKICAgICAv
LyBUaGUgY29tYmluZXIgcmVsaWVzIG9uIHdlYnZ0dGVuYywgZmFpbCBlYXJseSBpZiBpdCdzIG5v
dCB0aGVyZS4KLSAgICBpZiAoIVdlYkNvcmU6OmlzR1N0cmVhbWVyUGx1Z2luQXZhaWxhYmxlKCJz
dWJlbmMiKSkgeworICAgIGlmICghaXNHU3RyZWFtZXJQbHVnaW5BdmFpbGFibGUoInN1YmVuYyIp
KSB7CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiV2ViS2l0IHdhc24ndCBhYmxlIHRvIGZpbmQgYSBX
ZWJWVFQgZW5jb2Rlci4gTm90IGNvbnRpbnVpbmcgd2l0aG91dCBwbGF0Zm9ybSBzdXBwb3J0IGZv
ciBzdWJ0aXRsZXMuIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UZXh0Q29tYmlu
ZXJHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9UZXh0Q29tYmluZXJHU3RyZWFtZXIuaAppbmRleCAwOTA2NzYzNTQ0YTYxMmE3N2ZlNDQ1OGYx
YWZhNTNhZDcyMGI0NTRiLi4wMzRkOWIwYTE4MGQ2MTk4ZjQ2YTcwMGE2NGNmZGViOWQ4MTJlMGY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
VGV4dENvbWJpbmVyR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1RleHRDb21iaW5lckdTdHJlYW1lci5oCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAxMyBDYWJsZSBUZWxldmlzaW9uIExhYm9yYXRvcmllcywg
SW5jLgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShWSURFTykgJiYg
VVNFKEdTVFJFQU1FUikKIAotI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CiAjaW5jbHVkZSA8Z3N0
L2dzdC5oPgogCiAjZGVmaW5lIFdFQktJVF9UWVBFX1RFWFRfQ09NQklORVIgd2Via2l0X3RleHRf
Y29tYmluZXJfZ2V0X3R5cGUoKQpAQCAtMzgsMjcgKzM4LDI0IEBACiAjZGVmaW5lIFdFQktJVF9J
U19URVhUX0NPTUJJTkVSX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGts
YXNzKSwgV0VCS0lUX1RZUEVfVEVYVF9DT01CSU5FUikpCiAjZGVmaW5lIFdFQktJVF9URVhUX0NP
TUJJTkVSX0dFVF9DTEFTUyhvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCBX
RUJLSVRfVFlQRV9URVhUX0NPTUJJTkVSLCBXZWJLaXRUZXh0Q29tYmluZXJDbGFzcykpCiAKK0dU
eXBlIHdlYmtpdF90ZXh0X2NvbWJpbmVyX2dldF90eXBlKHZvaWQpOworCiB0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0VGV4dENvbWJpbmVyIFdlYktpdFRleHRDb21iaW5lcjsKIHR5cGVkZWYgc3RydWN0
IF9XZWJLaXRUZXh0Q29tYmluZXJDbGFzcyBXZWJLaXRUZXh0Q29tYmluZXJDbGFzczsKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRUZXh0Q29tYmluZXJQcml2YXRlIFdlYktpdFRleHRDb21iaW5lclBy
aXZhdGU7CiAKIHN0cnVjdCBfV2ViS2l0VGV4dENvbWJpbmVyIHsKICAgICBHc3RCaW4gcGFyZW50
OwogCi0gICAgR3N0RWxlbWVudCAqZnVubmVsOworICAgIFdlYktpdFRleHRDb21iaW5lclByaXZh
dGUqIHByaXY7CiB9OwogCiBzdHJ1Y3QgX1dlYktpdFRleHRDb21iaW5lckNsYXNzIHsKICAgICBH
c3RCaW5DbGFzcyBwYXJlbnRDbGFzczsKLQotICAgIC8vIEZ1dHVyZSBwYWRkaW5nCi0gICAgdm9p
ZCAoKiBfd2Via2l0X3Jlc2VydmVkMSkodm9pZCk7Ci0gICAgdm9pZCAoKiBfd2Via2l0X3Jlc2Vy
dmVkMikodm9pZCk7Ci0gICAgdm9pZCAoKiBfd2Via2l0X3Jlc2VydmVkMykodm9pZCk7Ci0gICAg
dm9pZCAoKiBfd2Via2l0X3Jlc2VydmVkNCkodm9pZCk7Ci0gICAgdm9pZCAoKiBfd2Via2l0X3Jl
c2VydmVkNSkodm9pZCk7Ci0gICAgdm9pZCAoKiBfd2Via2l0X3Jlc2VydmVkNikodm9pZCk7CiB9
OwogCiBHc3RFbGVtZW50KiB3ZWJraXRUZXh0Q29tYmluZXJOZXcoKTsKIAordm9pZCB3ZWJLaXRU
ZXh0Q29tYmluZXJIYW5kbGVDYXBzRXZlbnQoV2ViS2l0VGV4dENvbWJpbmVyKiwgR3N0UGFkKiwg
R3N0RXZlbnQqKTsKKwogI2VuZGlmIC8vIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9U
ZXh0Q29tYmluZXJQYWRHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1RleHRDb21iaW5lclBhZEdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
N2Q0ZmVhNTE1ZGE3OGU3MDA3OWE1MjMyZWM4NmYxZTg2MDg2NTcwNAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UZXh0Q29tYmlu
ZXJQYWRHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIENhYmxlIFRlbGV2aXNpb24gTGFib3JhdG9yaWVzLCBJbmMuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUZXh0Q29tYmluZXJQYWRHU3RyZWFtZXIuaCIKKworI2lmIEVOQUJMRShW
SURFTykgJiYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgor
I2luY2x1ZGUgIlRleHRDb21iaW5lckdTdHJlYW1lci5oIgorI2luY2x1ZGUgPHd0Zi9nbGliL1dU
RkdUeXBlLmg+CisKK3N0cnVjdCBfV2ViS2l0VGV4dENvbWJpbmVyUGFkUHJpdmF0ZSB7CisgICAg
R1JlZlB0cjxHc3RUYWdMaXN0PiB0YWdzOworICAgIEdSZWZQdHI8R3N0UGFkPiBpbm5lckNvbWJp
bmVyUGFkOworfTsKKworZW51bSB7CisgICAgUFJPUF9QQURfMCwKKyAgICBQUk9QX1BBRF9UQUdT
LAorICAgIFBST1BfSU5ORVJfQ09NQklORVJfUEFELAorfTsKKworI2RlZmluZSB3ZWJraXRfdGV4
dF9jb21iaW5lcl9wYWRfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcworV0VCS0lUX0RFRklORV9U
WVBFKFdlYktpdFRleHRDb21iaW5lclBhZCwgd2Via2l0X3RleHRfY29tYmluZXJfcGFkLCBHU1Rf
VFlQRV9HSE9TVF9QQUQpOworCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0VGV4dENvbWJpbmVyUGFk
RXZlbnQoR3N0UGFkKiBwYWQsIEdzdE9iamVjdCogcGFyZW50LCBHc3RFdmVudCogZXZlbnQpCit7
CisgICAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRShldmVudCkpIHsKKyAgICBjYXNlIEdTVF9FVkVO
VF9DQVBTOgorICAgICAgICB3ZWJLaXRUZXh0Q29tYmluZXJIYW5kbGVDYXBzRXZlbnQoV0VCS0lU
X1RFWFRfQ09NQklORVIocGFyZW50KSwgcGFkLCBldmVudCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgR1NUX0VWRU5UX1RBRzogeworICAgICAgICBhdXRvKiBjb21iaW5lclBhZCA9IFdFQktJ
VF9URVhUX0NPTUJJTkVSX1BBRChwYWQpOworICAgICAgICBHc3RUYWdMaXN0KiB0YWdzOworICAg
ICAgICBnc3RfZXZlbnRfcGFyc2VfdGFnKGV2ZW50LCAmdGFncyk7CisgICAgICAgIEFTU0VSVCh0
YWdzKTsKKworICAgICAgICBHU1RfT0JKRUNUX0xPQ0socGFkKTsKKyAgICAgICAgaWYgKCFjb21i
aW5lclBhZC0+cHJpdi0+dGFncykKKyAgICAgICAgICAgIGNvbWJpbmVyUGFkLT5wcml2LT50YWdz
ID0gYWRvcHRHUmVmKGdzdF90YWdfbGlzdF9jb3B5KHRhZ3MpKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZ3N0X3RhZ19saXN0X2luc2VydChjb21iaW5lclBhZC0+cHJpdi0+dGFncy5nZXQo
KSwgdGFncywgR1NUX1RBR19NRVJHRV9SRVBMQUNFKTsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxP
Q0socGFkKTsKKworICAgICAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1QocGFkKSwgInRhZ3Mi
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICByZXR1cm4gZ3N0X3BhZF9ldmVudF9kZWZhdWx0KHBhZCwgcGFyZW50LCBldmVu
dCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFRleHRDb21iaW5lclBhZEdldFByb3BlcnR5KEdP
YmplY3QqIG9iamVjdCwgdW5zaWduZWQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFt
U3BlYyogcHNwZWMpCit7CisgICAgYXV0byogcGFkID0gV0VCS0lUX1RFWFRfQ09NQklORVJfUEFE
KG9iamVjdCk7CisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1BBRF9U
QUdTOgorICAgICAgICBHU1RfT0JKRUNUX0xPQ0sob2JqZWN0KTsKKyAgICAgICAgaWYgKHBhZC0+
cHJpdi0+dGFncykKKyAgICAgICAgICAgIGdfdmFsdWVfdGFrZV9ib3hlZCh2YWx1ZSwgZ3N0X3Rh
Z19saXN0X2NvcHkocGFkLT5wcml2LT50YWdzLmdldCgpKSk7CisgICAgICAgIEdTVF9PQkpFQ1Rf
VU5MT0NLKG9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9JTk5FUl9DT01C
SU5FUl9QQUQ6CisgICAgICAgIEdTVF9PQkpFQ1RfTE9DSyhvYmplY3QpOworICAgICAgICBnX3Zh
bHVlX3NldF9vYmplY3QodmFsdWUsIHBhZC0+cHJpdi0+aW5uZXJDb21iaW5lclBhZC5nZXQoKSk7
CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmpl
Y3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRUZXh0Q29tYmluZXJQYWRTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3Qs
IGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVj
KQoreworICAgIGF1dG8qIHBhZCA9IFdFQktJVF9URVhUX0NPTUJJTkVSX1BBRChvYmplY3QpOwor
ICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9JTk5FUl9DT01CSU5FUl9Q
QUQ6CisgICAgICAgIEdTVF9PQkpFQ1RfTE9DSyhvYmplY3QpOworICAgICAgICBwYWQtPnByaXYt
PmlubmVyQ29tYmluZXJQYWQgPSBhZG9wdEdSZWYoR1NUX1BBRF9DQVNUKGdfdmFsdWVfZ2V0X29i
amVjdCh2YWx1ZSkpKTsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sob2JqZWN0KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BS
T1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFRleHRDb21iaW5lclBhZENvbnN0cnVjdGVkKEdP
YmplY3QqIG9iamVjdCkKK3sKKyAgICBHU1RfQ0FMTF9QQVJFTlQoR19PQkpFQ1RfQ0xBU1MsIGNv
bnN0cnVjdGVkLCAob2JqZWN0KSk7CisgICAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24oR1NU
X1BBRChvYmplY3QpLCB3ZWJraXRUZXh0Q29tYmluZXJQYWRFdmVudCk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF90ZXh0X2NvbWJpbmVyX3BhZF9jbGFzc19pbml0KFdlYktpdFRleHRDb21iaW5l
clBhZENsYXNzKiBrbGFzcykKK3sKKyAgICBhdXRvKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9D
TEFTUyhrbGFzcyk7CisKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdGVkID0gd2Via2l0VGV4
dENvbWJpbmVyUGFkQ29uc3RydWN0ZWQ7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkg
PSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJraXRUZXh0Q29tYmluZXJQYWRHZXRQcm9wZXJ0eSk7Cisg
ICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSBHU1RfREVCVUdfRlVOQ1BUUih3ZWJraXRU
ZXh0Q29tYmluZXJQYWRTZXRQcm9wZXJ0eSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KGdvYmplY3RDbGFzcywgUFJPUF9QQURfVEFHUywKKyAgICAgICAgZ19wYXJhbV9z
cGVjX2JveGVkKCJ0YWdzIiwgIlRhZ3MiLCAiVGhlIGN1cnJlbnRseSBhY3RpdmUgdGFncyBvbiB0
aGUgcGFkIiwgR1NUX1RZUEVfVEFHX0xJU1QsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFy
YW1GbGFncz4oR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywgUFJPUF9J
Tk5FUl9DT01CSU5FUl9QQUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoImlubmVyLWNv
bWJpbmVyLXBhZCIsICJJbnRlcm5hbCBDb21iaW5lciBQYWQiLCAiVGhlIGludGVybmFsIGZ1bm5l
bCAob3IgY29uY2F0KSBwYWQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGFkIiwgR1NUX1RZUEVfUEFE
LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KEdfUEFSQU1fUkVBRFdSSVRF
IHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpKTsKK30KKworR3N0UGFkKiB3ZWJLaXRUZXh0Q29t
YmluZXJQYWRMZWFrSW50ZXJuYWxQYWRSZWYoV2ViS2l0VGV4dENvbWJpbmVyUGFkKiBwYWQpCit7
CisgICAgcmV0dXJuIHBhZC0+cHJpdi0+aW5uZXJDb21iaW5lclBhZC5sZWFrUmVmKCk7Cit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL1RleHRDb21iaW5lclBhZEdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RleHRDb21iaW5lclBhZEdTdHJlYW1lci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmI4NDI3MWNkNmEyMTFhZTU3NDY1NjU5NWI3ZTA0MDliNTVkZTVmMzMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVGV4dENv
bWJpbmVyUGFkR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBDYWJsZSBUZWxldmlzaW9uIExhYm9yYXRvcmllcywgSW5jLgorICogQ29weXJpZ2h0
IChDKSAyMDIxIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIkdSZWZQdHJH
U3RyZWFtZXIuaCIKKworI2RlZmluZSBXRUJLSVRfVFlQRV9URVhUX0NPTUJJTkVSX1BBRCB3ZWJr
aXRfdGV4dF9jb21iaW5lcl9wYWRfZ2V0X3R5cGUoKQorCisjZGVmaW5lIFdFQktJVF9URVhUX0NP
TUJJTkVSX1BBRChvYmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lU
X1RZUEVfVEVYVF9DT01CSU5FUl9QQUQsIFdlYktpdFRleHRDb21iaW5lclBhZCkpCisjZGVmaW5l
IFdFQktJVF9URVhUX0NPTUJJTkVSX1BBRF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUKChrbGFzcyksIFdFQktJVF9UWVBFX1RFWFRfQ09NQklORVJfUEFELCBXZWJLaXRUZXh0
Q29tYmluZXJQYWRDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19URVhUX0NPTUJJTkVSX1BBRChv
YmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfVEVYVF9D
T01CSU5FUl9QQUQpKQorI2RlZmluZSBXRUJLSVRfSVNfVEVYVF9DT01CSU5FUl9QQURfQ0xBU1Mo
a2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBXRUJLSVRfVFlQRV9URVhU
X0NPTUJJTkVSX1BBRCkpCisjZGVmaW5lIFdFQktJVF9URVhUX0NPTUJJTkVSX1BBRF9HRVRfQ0xB
U1Mob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgV0VCS0lUX1RZUEVfVEVY
VF9DT01CSU5FUl9QQUQsIFdlYktpdFRleHRDb21iaW5lclBhZENsYXNzKSkKKwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdFRleHRDb21iaW5lclBhZFByaXZhdGUgV2ViS2l0VGV4dENvbWJpbmVyUGFk
UHJpdmF0ZTsKKworc3RydWN0IFdlYktpdFRleHRDb21iaW5lclBhZCB7CisgICAgR3N0R2hvc3RQ
YWQgcGFyZW50OworICAgIFdlYktpdFRleHRDb21iaW5lclBhZFByaXZhdGUqIHByaXY7Cit9Owor
CitzdHJ1Y3QgV2ViS2l0VGV4dENvbWJpbmVyUGFkQ2xhc3MgeworICAgIEdzdEdob3N0UGFkQ2xh
c3MgcGFyZW50OworfTsKKworR1R5cGUgd2Via2l0X3RleHRfY29tYmluZXJfcGFkX2dldF90eXBl
KHZvaWQpOworCitHc3RQYWQqIHdlYktpdFRleHRDb21iaW5lclBhZExlYWtJbnRlcm5hbFBhZFJl
ZihXZWJLaXRUZXh0Q29tYmluZXJQYWQqKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZmY1NThhMjUyNDc3YmE0ODllMDY0OGZi
OWQ4NjQ0YmVlZTI1MThlNy4uNDZlMDJiY2MxMmYwNGYxZjU2NjcwMTcwZjViOGRjY2VkMzY3MDYx
YSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEzIEBACisyMDIxLTAxLTExICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdh
bGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBDbGVhbi11cCB0aGUgVGV4dENvbWJpbmVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA0NjMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weTogQWRkIEdTdHJlYW1lciBUZXh0Q29tYmluZXIg
aW1wbGVtZW50YXRpb24gdG8gR09iamVjdAorICAgICAgICBjbGFzc2VzIGFsbG93LWxpc3QuCisK
IDIwMjEtMDEtMDkgIExhdXJvIE1vdXJhICA8bG1vdXJhQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0dTdHJlYW1lcl0gQnVpbGQgZmFpbHVyZSB3aXRoIGdzdC1idWlsZDogTWlzc2luZyBnc3QvYXVk
aW8vYXVkaW8uaApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVj
a2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CmluZGV4IDRl
YmYwYmQ4ZTZlNDgzNjBkZmVkNTJmZjMzYWEwNmY1MTk1ZWQ1MGMuLjFkNDk1MTcwZjM1YjY4OTI5
NmI4MWNiNjdhODJkNTMwNDc1MzFiMDIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvc3R5bGUvY2hlY2tlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2No
ZWNrZXIucHkKQEAgLTIxOSw2ICsyMTksMTAgQEAgX1BBVEhfUlVMRVNfU1BFQ0lGSUVSID0gWwog
ICAgICAgIyB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyBjb250YWluaW5nIHVuZGVyc2NvcmVzLgog
ICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdncmFw
aGljcycsICdnc3RyZWFtZXInLCAnR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwJyksCiAgICAgICBv
cy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ2dyYXBoaWNzJywg
J2dzdHJlYW1lcicsICdHTFZpZGVvU2lua0dTdHJlYW1lci5oJyksCisgICAgICBvcy5wYXRoLmpv
aW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ2dyYXBoaWNzJywgJ2dzdHJlYW1l
cicsICdUZXh0Q29tYmluZXJHU3RyZWFtZXIuY3BwJyksCisgICAgICBvcy5wYXRoLmpvaW4oJ1Nv
dXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ2dyYXBoaWNzJywgJ2dzdHJlYW1lcicsICdU
ZXh0Q29tYmluZXJHU3RyZWFtZXIuaCcpLAorICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAn
V2ViQ29yZScsICdwbGF0Zm9ybScsICdncmFwaGljcycsICdnc3RyZWFtZXInLCAnVGV4dENvbWJp
bmVyUGFkR1N0cmVhbWVyLmNwcCcpLAorICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2Vi
Q29yZScsICdwbGF0Zm9ybScsICdncmFwaGljcycsICdnc3RyZWFtZXInLCAnVGV4dENvbWJpbmVy
UGFkR1N0cmVhbWVyLmgnKSwKICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUn
LCAncGxhdGZvcm0nLCAnZ3JhcGhpY3MnLCAnZ3N0cmVhbWVyJywgJ1ZpZGVvU2lua0dTdHJlYW1l
ci5jcHAnKSwKICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZv
cm0nLCAnZ3JhcGhpY3MnLCAnZ3N0cmVhbWVyJywgJ1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5j
cHAnKSwKICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0n
LCAnZ3JhcGhpY3MnLCAnZ3N0cmVhbWVyJywgJ1dlYktpdEF1ZGlvU2lua0dTdHJlYW1lci5jcHAn
KSwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417620</attachid>
            <date>2021-01-14 07:58:46 -0800</date>
            <delta_ts>2021-01-14 09:15:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220463-20210114075844.patch</filename>
            <type>text/plain</type>
            <size>34692</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxNDgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTMxMDgzNWQxMWIyMzdk
MTlhZWJjYjlkMTY0OTYyNTQ5ODA5YThmZC4uZjEzZDlmZGJmMzM3NGNjNzVjOTc0MjAzMzhhODk0
OGIxNmM0MjQ3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDIxLTAxLTExICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBDbGVhbi11cCB0aGUgVGV4dENvbWJpbmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA0NjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGUgY29kZSBzdHlsZSBub3cgY29uZm9ybXMgV2ViS2l0J3Mu
IFRoZSBHaG9zdFBhZCBzdWJjbGFzcyBtb3ZlZCB0byBpdHMgb3duIGNvZGUgdW5pdCwKKyAgICAg
ICAgYmVjYXVzZSB0aGUgV0VCS0lUX0RFRklORV9UWVBFIGNhbm5vdCBiZSB1c2VkIG11bHRpcGxl
IHRpbWVzIGluIHRoZSBzYW1lIGZpbGUgKGl0IGRlZmluZXMgYQorICAgICAgICBwYXJlbnRfY2xh
c3Mgc3ltYm9sKS4gVGhlIEdob3N0UGFkIHdhcyBhbHNvIGRlY291cGxlZCBhcyBtdWNoIGFzIHBv
c3NpYmxlIGZyb20gdGhlIENvbWJpbmVyLgorICAgICAgICBNb3N0IG1lbnRpb25zIG9mIHRoZSBm
dW5uZWwgR1N0cmVhbWVyIGVsZW1lbnQgd2VyZSBtYWRlIG1vcmUgZ2VuZXJpYyBiZWNhdXNlIHdl
IG1pZ2h0IG5lZWQKKyAgICAgICAgdG8gdXNlIGEgZGlmZmVyZW50IGVsZW1lbnQgaW4gc2l0dWF0
aW9ucyB3aGVyZSB0aGUgcGlwZWxpbmUgaXMgcGxheWJpbjMtYmFzZWQsIHdoaWNoIHJlcXVpcmVz
CisgICAgICAgIHRoZSBjb25jYXQgZWxlbWVudC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGV4
aXN0aW5nIHRlc3RzIGNvdmVyIHRoaXMgcGF0Y2guCisKKyAgICAgICAgKiBwbGF0Zm9ybS9HU3Ry
ZWFtZXIuY21ha2U6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJl
YW1lckNvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnc3RFbGVtZW50RmFjdG9yeUVxdWFs
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1v
bi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UZXh0Q29tYmluZXJH
U3RyZWFtZXIuY3BwOgorICAgICAgICAod2ViS2l0VGV4dENvbWJpbmVySGFuZGxlQ2Fwc0V2ZW50
KToKKyAgICAgICAgKHdlYmtpdFRleHRDb21iaW5lclJlcXVlc3ROZXdQYWQpOgorICAgICAgICAo
d2Via2l0VGV4dENvbWJpbmVyUmVsZWFzZVBhZCk6CisgICAgICAgICh3ZWJLaXRUZXh0Q29tYmlu
ZXJDb25zdHJ1Y3RlZCk6CisgICAgICAgICh3ZWJraXRfdGV4dF9jb21iaW5lcl9jbGFzc19pbml0
KToKKyAgICAgICAgKHdlYmtpdFRleHRDb21iaW5lck5ldyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1RleHRDb21iaW5lckdTdHJlYW1lci5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UZXh0Q29tYmluZXJQYWRHU3RyZWFtZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKHdlYmtpdFRleHRDb21iaW5lclBhZEV2ZW50KToKKyAgICAgICAgKHdl
YmtpdFRleHRDb21iaW5lclBhZEdldFByb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdFRleHRDb21i
aW5lclBhZFNldFByb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdFRleHRDb21iaW5lclBhZENvbnN0
cnVjdGVkKToKKyAgICAgICAgKHdlYmtpdF90ZXh0X2NvbWJpbmVyX3BhZF9jbGFzc19pbml0KToK
KyAgICAgICAgKHdlYktpdFRleHRDb21iaW5lclBhZExlYWtJbnRlcm5hbFBhZFJlZik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RleHRDb21iaW5lclBhZEdTdHJlYW1l
ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvVGV4dENvbWJpbmVyR1N0cmVhbWVyLmguCisKIDIwMjEtMDEtMTQgIE1hcnRpbiBSb2JpbnNv
biAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtjc3Mtc2Nyb2xsLXNuYXBdIHNj
cm9sbC1zbmFwLWFsaWduIHBhcnNpbmcgaXMgaW5jb3JyZWN0L2JhY2t3YXJkcwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCmluZGV4IGRiZGY0MDkxYTFlN2E5M2ZmY2M1MDZm
MTg0Yjk4YWViMzY1YWQ3NzUuLjJlNGQwNzZkYTBiNTJjY2NlYmQzYTEwMjMxNzU1NmM3NzU1ZTcz
OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKQEAgLTIxLDYgKzIx
LDcgQEAgaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VCX0FVRElPKQogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIu
Y3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UZXh0Q29tYmluZXJHU3Ry
ZWFtZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UZXh0Q29tYmlu
ZXJQYWRHU3RyZWFtZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9U
ZXh0U2lua0dTdHJlYW1lci5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24u
Y3BwCmluZGV4IGQyZmEyM2I3MWIxNGU5NzEzNGU3MTVlMWEwNWQ5MzU4YmNkNzVlMGUuLjgwOWRh
MTQ3NDgxNjJjNTQ4NjE3MTc0Zjc2ODdlY2MxYzlkYTNiMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJD
b21tb24uY3BwCkBAIC00NDIsNiArNDQyLDExIEBAIGJvb2wgaXNHU3RyZWFtZXJQbHVnaW5BdmFp
bGFibGUoY29uc3QgY2hhciogbmFtZSkKICAgICByZXR1cm4gcGx1Z2luOwogfQogCitib29sIGdz
dEVsZW1lbnRGYWN0b3J5RXF1YWxzKEdzdEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IGNoYXIqIG5h
bWUpCit7CisgICAgcmV0dXJuIGVxdWFsKEdTVF9PQkpFQ1RfTkFNRShnc3RfZWxlbWVudF9nZXRf
ZmFjdG9yeShlbGVtZW50KSksIG5hbWUpOworfQorCiBHc3RFbGVtZW50KiBjcmVhdGVQbGF0Zm9y
bUF1ZGlvU2luaygpCiB7CiAgICAgR3N0RWxlbWVudCogYXVkaW9TaW5rID0gd2Via2l0QXVkaW9T
aW5rTmV3KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmgKaW5kZXggYWRiYjBhNmNiM2JiZWViOTQ5
ZmY5Mjg3OGU5MTAzM2YyNWFmNDYwZi4uNWI2ZGM2Yjk4ZmQzZWI1NWM0ZDFlODhkMTMxZGFjNjdi
NTkyYTA1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaApAQCAtMjkyLDYgKzI5Miw3IEBAIHZv
aWQgZGlzY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhHc3RFbGVtZW50KiBwaXBlbGlu
ZSk7CiBlbnVtIGNsYXNzIEdzdFZpZGVvRGVjb2RlclBsYXRmb3JtIHsgSW14VlBVLCBWaWRlbzRM
aW51eCwgT3Blbk1BWCB9OwogCiBib29sIGlzR1N0cmVhbWVyUGx1Z2luQXZhaWxhYmxlKGNvbnN0
IGNoYXIqIG5hbWUpOworYm9vbCBnc3RFbGVtZW50RmFjdG9yeUVxdWFscyhHc3RFbGVtZW50Kiwg
Y29uc3QgY2hhciogbmFtZSk7CiAKIEdzdEVsZW1lbnQqIGNyZWF0ZVBsYXRmb3JtQXVkaW9TaW5r
KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9UZXh0Q29tYmluZXJHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1RleHRDb21iaW5lckdTdHJlYW1lci5jcHAKaW5kZXggYjFjNjEx
YzY0YTdkYmJjMmZmZDJkMGY1YmNkMjU3MTc4NGJlMWMwNC4uZjUxY2NjYjEwMzI2YjM1ZWQ5ZTY4
MzkyOTdhYzVmN2ViMzg4MzBhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1RleHRDb21iaW5lckdTdHJlYW1lci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RleHRDb21iaW5lckdTdHJlYW1l
ci5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEzIENhYmxlIFRl
bGV2aXNpb24gTGFib3JhdG9yaWVzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlh
IFMuTC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMjcyICszMCwxNjEg
QEAKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCiAKICNpbmNsdWRlICJHU3Ry
ZWFtZXJDb21tb24uaCIKKyNpbmNsdWRlICJUZXh0Q29tYmluZXJQYWRHU3RyZWFtZXIuaCIKKyNp
bmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5oPgogCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxh
dGUgc2lua1RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgic2lua18ldSIs
IEdTVF9QQURfU0lOSywgR1NUX1BBRF9SRVFVRVNULAotICAgICAgICBHU1RfU1RBVElDX0NBUFNf
QU5ZKTsKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rVGVtcGxhdGUgPSBHU1RfU1RB
VElDX1BBRF9URU1QTEFURSgic2lua18ldSIsIEdTVF9QQURfU0lOSywgR1NUX1BBRF9SRVFVRVNU
LCBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKIAotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNy
Y1RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgic3JjIiwgR1NUX1BBRF9T
UkMsIEdTVF9QQURfQUxXQVlTLAotICAgICAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKK3N0YXRp
YyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNUZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBM
QVRFKCJzcmMiLCBHU1RfUEFEX1NSQywgR1NUX1BBRF9BTFdBWVMsIEdTVF9TVEFUSUNfQ0FQU19B
TlkpOwogCiBHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDKHdlYmtpdFRleHRDb21iaW5lckRlYnVn
KTsKICNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdFRleHRDb21iaW5lckRlYnVnCiAKLSNk
ZWZpbmUgd2Via2l0X3RleHRfY29tYmluZXJfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19E
RUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0VGV4dENvbWJpbmVyLCB3ZWJraXRfdGV4dF9jb21i
aW5lciwgR1NUX1RZUEVfQklOLAotICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdFRl
eHRDb21iaW5lckRlYnVnLCAid2Via2l0dGV4dGNvbWJpbmVyIiwgMCwKLSAgICAgICAgIndlYmtp
dCB0ZXh0IGNvbWJpbmVyIikpOwotCi1lbnVtIHsKLSAgICBQUk9QX1BBRF8wLAotICAgIFBST1Bf
UEFEX1RBR1MKK3N0cnVjdCBfV2ViS2l0VGV4dENvbWJpbmVyUHJpdmF0ZSB7CisgICAgR1JlZlB0
cjxHc3RFbGVtZW50PiBjb21iaW5lckVsZW1lbnQ7CiB9OwogCi0jZGVmaW5lIFdFQktJVF9UWVBF
X1RFWFRfQ09NQklORVJfUEFEIHdlYmtpdF90ZXh0X2NvbWJpbmVyX3BhZF9nZXRfdHlwZSgpCi0K
LSNkZWZpbmUgV0VCS0lUX1RFWFRfQ09NQklORVJfUEFEKG9iaikgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9URVhUX0NPTUJJTkVSX1BBRCwgV2ViS2l0VGV4
dENvbWJpbmVyUGFkKSkKLSNkZWZpbmUgV0VCS0lUX1RFWFRfQ09NQklORVJfUEFEX0NMQVNTKGts
YXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgV0VCS0lUX1RZUEVfVEVYVF9D
T01CSU5FUl9QQUQsIFdlYktpdFRleHRDb21iaW5lclBhZENsYXNzKSkKLSNkZWZpbmUgV0VCS0lU
X0lTX1RFWFRfQ09NQklORVJfUEFEKG9iaikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChv
YmopLCBXRUJLSVRfVFlQRV9URVhUX0NPTUJJTkVSX1BBRCkpCi0jZGVmaW5lIFdFQktJVF9JU19U
RVhUX0NPTUJJTkVSX1BBRF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChr
bGFzcyksIFdFQktJVF9UWVBFX1RFWFRfQ09NQklORVJfUEFEKSkKLSNkZWZpbmUgV0VCS0lUX1RF
WFRfQ09NQklORVJfUEFEX0dFVF9DTEFTUyhvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNT
KChvYmopLCBXRUJLSVRfVFlQRV9URVhUX0NPTUJJTkVSX1BBRCwgV2ViS2l0VGV4dENvbWJpbmVy
UGFkQ2xhc3MpKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0VGV4dENvbWJpbmVyUGFkIFdlYktp
dFRleHRDb21iaW5lclBhZDsKLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRUZXh0Q29tYmluZXJQYWRD
bGFzcyBXZWJLaXRUZXh0Q29tYmluZXJQYWRDbGFzczsKLQotc3RydWN0IF9XZWJLaXRUZXh0Q29t
YmluZXJQYWQgewotICAgIEdzdEdob3N0UGFkIHBhcmVudDsKLQotICAgIEdzdFRhZ0xpc3QqIHRh
Z3M7Ci0gICAgR3N0UGFkKiBmdW5uZWxQYWQ7Ci19OwotCi1zdHJ1Y3QgX1dlYktpdFRleHRDb21i
aW5lclBhZENsYXNzIHsKLSAgICBHc3RHaG9zdFBhZENsYXNzIHBhcmVudDsKLX07Ci0KLUdfREVG
SU5FX1RZUEUoV2ViS2l0VGV4dENvbWJpbmVyUGFkLCB3ZWJraXRfdGV4dF9jb21iaW5lcl9wYWQs
IEdTVF9UWVBFX0dIT1NUX1BBRCk7Ci0KLXN0YXRpYyBHVHlwZSB3ZWJWVFRFbmNUeXBlOwotCi1z
dGF0aWMgZ2Jvb2xlYW4gd2Via2l0VGV4dENvbWJpbmVyUGFkRXZlbnQoR3N0UGFkKiwgR3N0T2Jq
ZWN0KiBwYXJlbnQsIEdzdEV2ZW50Kik7Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF90ZXh0X2NvbWJp
bmVyX2luaXQoV2ViS2l0VGV4dENvbWJpbmVyKiBjb21iaW5lcikKLXsKLSAgICBjb21iaW5lci0+
ZnVubmVsID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJmdW5uZWwiLCBudWxscHRyKTsKLSAg
ICBBU1NFUlQoY29tYmluZXItPmZ1bm5lbCk7Ci0KLSAgICBnYm9vbGVhbiByZXQgPSBnc3RfYmlu
X2FkZChHU1RfQklOKGNvbWJpbmVyKSwgY29tYmluZXItPmZ1bm5lbCk7Ci0gICAgVU5VU0VEX1BB
UkFNKHJldCk7Ci0gICAgQVNTRVJUKHJldCk7Ci0KLSAgICBHUmVmUHRyPEdzdFBhZD4gcGFkID0g
YWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGNvbWJpbmVyLT5mdW5uZWwsICJz
cmMiKSk7Ci0gICAgQVNTRVJUKHBhZCk7Ci0KLSAgICByZXQgPSBnc3RfZWxlbWVudF9hZGRfcGFk
KEdTVF9FTEVNRU5UKGNvbWJpbmVyKSwgZ3N0X2dob3N0X3BhZF9uZXcoInNyYyIsIHBhZC5nZXQo
KSkpOwotICAgIEFTU0VSVChyZXQpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfdGV4dF9jb21i
aW5lcl9wYWRfaW5pdChXZWJLaXRUZXh0Q29tYmluZXJQYWQqIHBhZCkKLXsKLSAgICBnc3RfcGFk
X3NldF9ldmVudF9mdW5jdGlvbihHU1RfUEFEKHBhZCksIHdlYmtpdFRleHRDb21iaW5lclBhZEV2
ZW50KTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0VGV4dENvbWJpbmVyUGFkRGlzcG9zZShHT2Jq
ZWN0KiBvYmplY3QpCi17Ci0gICAgV2ViS2l0VGV4dENvbWJpbmVyUGFkKiBjb21iaW5lclBhZCA9
IFdFQktJVF9URVhUX0NPTUJJTkVSX1BBRChvYmplY3QpOwotICAgIGdfY2xlYXJfcG9pbnRlcigm
Y29tYmluZXJQYWQtPnRhZ3MsIGdzdF90YWdfbGlzdF91bnJlZik7Ci0gICAgZ19jbGVhcl9wb2lu
dGVyKCZjb21iaW5lclBhZC0+ZnVubmVsUGFkLCBnc3Rfb2JqZWN0X3VucmVmKTsKLSAgICBHX09C
SkVDVF9DTEFTUyh3ZWJraXRfdGV4dF9jb21iaW5lcl9wYWRfcGFyZW50X2NsYXNzKS0+ZGlzcG9z
ZShvYmplY3QpOwotfQorI2RlZmluZSB3ZWJraXRfdGV4dF9jb21iaW5lcl9wYXJlbnRfY2xhc3Mg
cGFyZW50X2NsYXNzCitXRUJLSVRfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdFRleHRDb21i
aW5lciwgd2Via2l0X3RleHRfY29tYmluZXIsIEdTVF9UWVBFX0JJTiwKKyAgICBHU1RfREVCVUdf
Q0FURUdPUllfSU5JVCh3ZWJraXRUZXh0Q29tYmluZXJEZWJ1ZywgIndlYmtpdHRleHRjb21iaW5l
ciIsIDAsICJ3ZWJraXQgdGV4dCBjb21iaW5lciIpKQogCi1zdGF0aWMgdm9pZCB3ZWJraXRUZXh0
Q29tYmluZXJQYWRHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQs
IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQotewotICAgIFdlYktpdFRleHRDb21i
aW5lclBhZCogcGFkID0gV0VCS0lUX1RFWFRfQ09NQklORVJfUEFEKG9iamVjdCk7Ci0gICAgc3dp
dGNoIChwcm9wZXJ0eUlkKSB7Ci0gICAgY2FzZSBQUk9QX1BBRF9UQUdTOgotICAgICAgICBHU1Rf
T0JKRUNUX0xPQ0sob2JqZWN0KTsKLSAgICAgICAgaWYgKHBhZC0+dGFncykKLSAgICAgICAgICAg
IGdfdmFsdWVfdGFrZV9ib3hlZCh2YWx1ZSwgZ3N0X3RhZ19saXN0X2NvcHkocGFkLT50YWdzKSk7
Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG9iamVjdCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmpl
Y3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRUZXh0Q29tYmluZXJQ
YWRFdmVudChHc3RQYWQqIHBhZCwgR3N0T2JqZWN0KiBwYXJlbnQsIEdzdEV2ZW50KiBldmVudCkK
K3ZvaWQgd2ViS2l0VGV4dENvbWJpbmVySGFuZGxlQ2Fwc0V2ZW50KFdlYktpdFRleHRDb21iaW5l
ciogY29tYmluZXIsIEdzdFBhZCogcGFkLCBHc3RFdmVudCogZXZlbnQpCiB7Ci0gICAgZ2Jvb2xl
YW4gcmV0OwotICAgIFVOVVNFRF9QQVJBTShyZXQpOwotICAgIFdlYktpdFRleHRDb21iaW5lciog
Y29tYmluZXIgPSBXRUJLSVRfVEVYVF9DT01CSU5FUihwYXJlbnQpOwotICAgIFdlYktpdFRleHRD
b21iaW5lclBhZCogY29tYmluZXJQYWQgPSBXRUJLSVRfVEVYVF9DT01CSU5FUl9QQUQocGFkKTsK
LSAgICBBU1NFUlQoY29tYmluZXIpOwotCi0gICAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRShldmVu
dCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9DQVBTOiB7Ci0gICAgICAgIEdzdENhcHMqIGNhcHM7
Ci0gICAgICAgIGdzdF9ldmVudF9wYXJzZV9jYXBzKGV2ZW50LCAmY2Fwcyk7Ci0gICAgICAgIEFT
U0VSVChjYXBzKTsKLQotICAgICAgICBHUmVmUHRyPEdzdFBhZD4gdGFyZ2V0ID0gYWRvcHRHUmVm
KGdzdF9naG9zdF9wYWRfZ2V0X3RhcmdldChHU1RfR0hPU1RfUEFEKHBhZCkpKTsKLSAgICAgICAg
R1JlZlB0cjxHc3RFbGVtZW50PiB0YXJnZXRQYXJlbnQgPSB0YXJnZXQgPyBhZG9wdEdSZWYoZ3N0
X3BhZF9nZXRfcGFyZW50X2VsZW1lbnQodGFyZ2V0LmdldCgpKSkgOiBudWxscHRyOwotCi0gICAg
ICAgIEdSZWZQdHI8R3N0Q2Fwcz4gdGV4dENhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2Vt
cHR5X3NpbXBsZSgidGV4dC94LXJhdyIpKTsKLSAgICAgICAgaWYgKGdzdF9jYXBzX2Nhbl9pbnRl
cnNlY3QodGV4dENhcHMuZ2V0KCksIGNhcHMpKSB7Ci0gICAgICAgICAgICAvLyBDYXBzIGFyZSBw
bGFpbiB0ZXh0LCB3ZSB3YW50IGEgV2ViVlRUIGVuY29kZXIgYmV0d2VlbiB0aGUgZ2hvc3RwYWQg
YW5kIHRoZSBmdW5uZWwuCi0gICAgICAgICAgICBpZiAoIXRhcmdldCB8fCBHX1RZUEVfRlJPTV9J
TlNUQU5DRSh0YXJnZXRQYXJlbnQuZ2V0KCkpICE9IHdlYlZUVEVuY1R5cGUpIHsKLSAgICAgICAg
ICAgICAgICAvLyBTZXR1cCBhIFdlYlZUVCBlbmNvZGVyLgotICAgICAgICAgICAgICAgIEdzdEVs
ZW1lbnQqIGVuY29kZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoIndlYnZ0dGVuYyIsIG51
bGxwdHIpOwotICAgICAgICAgICAgICAgIEFTU0VSVChlbmNvZGVyKTsKLQotICAgICAgICAgICAg
ICAgIHJldCA9IGdzdF9iaW5fYWRkKEdTVF9CSU4oY29tYmluZXIpLCBlbmNvZGVyKTsKLSAgICAg
ICAgICAgICAgICBBU1NFUlQocmV0KTsKLQotICAgICAgICAgICAgICAgIHJldCA9IGdzdF9lbGVt
ZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoZW5jb2Rlcik7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKHJldCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTd2l0Y2ggdGhlIGdob3N0cGFkIHRvIHRh
cmdldCB0aGUgV2ViVlRUIGVuY29kZXIuCi0gICAgICAgICAgICAgICAgR1JlZlB0cjxHc3RQYWQ+
IHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoZW5jb2Rlciwg
InNpbmsiKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHNpbmtQYWQpOwotCi0gICAgICAgICAg
ICAgICAgcmV0ID0gZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0KEdTVF9HSE9TVF9QQUQocGFkKSwg
c2lua1BhZC5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHJldCk7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBDb25uZWN0IHRoZSBXZWJWVFQgZW5jb2RlciB0byB0aGUgZnVubmVsLgotICAg
ICAgICAgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBzcmNQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1l
bnRfZ2V0X3N0YXRpY19wYWQoZW5jb2RlciwgInNyYyIpKTsKLSAgICAgICAgICAgICAgICBBU1NF
UlQoc3JjUGFkKTsKLQotICAgICAgICAgICAgICAgIHJldCA9IEdTVF9QQURfTElOS19TVUNDRVNT
RlVMKGdzdF9wYWRfbGluayhzcmNQYWQuZ2V0KCksIGNvbWJpbmVyUGFkLT5mdW5uZWxQYWQpKTsK
LSAgICAgICAgICAgICAgICBBU1NFUlQocmV0KTsKLSAgICAgICAgICAgIH0gLy8gRWxzZTogcGlw
ZWxpbmUgaXMgYWxyZWFkeSBjb3JyZWN0LgotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Ly8gQ2FwcyBhcmUgbm90IHBsYWluIHRleHQsIHdlIGFzc3VtZSBpdCdzIFdlYlZUVC4KLQotICAg
ICAgICAgICAgLy8gUmVtb3ZlIHRoZSBXZWJWVFQgZW5jb2RlciBpZiBwcmVzZW50LgotICAgICAg
ICAgICAgaWYgKHRhcmdldCAmJiBHX1RZUEVfRlJPTV9JTlNUQU5DRSh0YXJnZXRQYXJlbnQuZ2V0
KCkpID09IHdlYlZUVEVuY1R5cGUpIHsKLSAgICAgICAgICAgICAgICByZXQgPSBnc3RfYmluX3Jl
bW92ZShHU1RfQklOKGNvbWJpbmVyKSwgdGFyZ2V0UGFyZW50LmdldCgpKTsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQocmV0KTsKLQotICAgICAgICAgICAgICAgIHRhcmdldCA9IG51bGxwdHI7Ci0g
ICAgICAgICAgICAgICAgdGFyZ2V0UGFyZW50ID0gbnVsbHB0cjsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgLy8gTGluayB0aGUgcGFkIHRvIHRoZSBmdW5uZWwuCi0gICAgICAgICAgICBp
ZiAoIXRhcmdldCkgewotICAgICAgICAgICAgICAgIHJldCA9IGdzdF9naG9zdF9wYWRfc2V0X3Rh
cmdldChHU1RfR0hPU1RfUEFEKHBhZCksIGNvbWJpbmVyUGFkLT5mdW5uZWxQYWQpOwotICAgICAg
ICAgICAgICAgIEFTU0VSVChyZXQpOwotICAgICAgICAgICAgfSAvLyBFbHNlOiBwaXBlbGluZSBp
cyBhbHJlYWR5IGNvcnJlY3QuCisgICAgR3N0Q2FwcyogY2FwczsKKyAgICBnc3RfZXZlbnRfcGFy
c2VfY2FwcyhldmVudCwgJmNhcHMpOworICAgIEFTU0VSVChjYXBzKTsKKyAgICBHU1RfREVCVUdf
T0JKRUNUKGNvbWJpbmVyLCAiSGFuZGxpbmcgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7
CisKKyAgICBhdXRvIHRhcmdldCA9IGFkb3B0R1JlZihnc3RfZ2hvc3RfcGFkX2dldF90YXJnZXQo
R1NUX0dIT1NUX1BBRChwYWQpKSk7CisgICAgYXV0byB0YXJnZXRQYXJlbnQgPSB0YXJnZXQgPyBh
ZG9wdEdSZWYoZ3N0X3BhZF9nZXRfcGFyZW50X2VsZW1lbnQodGFyZ2V0LmdldCgpKSkgOiBudWxs
cHRyOworICAgIGF1dG8qIGNvbWJpbmVyUGFkID0gV0VCS0lUX1RFWFRfQ09NQklORVJfUEFEKHBh
ZCk7CisKKyAgICBHUmVmUHRyPEdzdFBhZD4gaW50ZXJuYWxQYWQ7CisgICAgZ19vYmplY3RfZ2V0
KGNvbWJpbmVyUGFkLCAiaW5uZXItY29tYmluZXItcGFkIiwgJmludGVybmFsUGFkLm91dFB0cigp
LCBudWxscHRyKTsKKworICAgIGF1dG8gdGV4dENhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3
X2VtcHR5X3NpbXBsZSgidGV4dC94LXJhdyIpKTsKKyAgICBpZiAoZ3N0X2NhcHNfY2FuX2ludGVy
c2VjdCh0ZXh0Q2Fwcy5nZXQoKSwgY2FwcykpIHsKKyAgICAgICAgLy8gQ2FwcyBhcmUgcGxhaW4g
dGV4dCwgd2Ugd2FudCBhIFdlYlZUVCBlbmNvZGVyIGJldHdlZW4gdGhlIGdob3N0cGFkIGFuZCB0
aGUgY29tYmluZXJFbGVtZW50LgorICAgICAgICBpZiAoIXRhcmdldCB8fCBnc3RFbGVtZW50RmFj
dG9yeUVxdWFscyh0YXJnZXRQYXJlbnQuZ2V0KCksICJ3ZWJ2dHRlbmMiX3MpKSB7CisgICAgICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKGNvbWJpbmVyLCAiU2V0dGluZyB1cCBhIFdlYlZUVCBlbmNv
ZGVyIik7CisgICAgICAgICAgICBhdXRvKiBlbmNvZGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9t
YWtlKCJ3ZWJ2dHRlbmMiLCBudWxscHRyKTsKKyAgICAgICAgICAgIEFTU0VSVChlbmNvZGVyKTsK
KworICAgICAgICAgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNUKGNvbWJpbmVyKSwgZW5jb2Rl
cik7CisgICAgICAgICAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KGVuY29k
ZXIpOworCisgICAgICAgICAgICAvLyBTd2l0Y2ggdGhlIGdob3N0cGFkIHRvIHRhcmdldCB0aGUg
V2ViVlRUIGVuY29kZXIuCisgICAgICAgICAgICBhdXRvIHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0
X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoZW5jb2RlciwgInNpbmsiKSk7CisgICAgICAgICAgICBB
U1NFUlQoc2lua1BhZCk7CisKKyAgICAgICAgICAgIGdzdF9naG9zdF9wYWRfc2V0X3RhcmdldChH
U1RfR0hPU1RfUEFEKHBhZCksIHNpbmtQYWQuZ2V0KCkpOworCisgICAgICAgICAgICAvLyBDb25u
ZWN0IHRoZSBXZWJWVFQgZW5jb2RlciB0byB0aGUgY29tYmluZXJFbGVtZW50LgorICAgICAgICAg
ICAgYXV0byBzcmNQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoZW5j
b2RlciwgInNyYyIpKTsKKyAgICAgICAgICAgIEFTU0VSVChzcmNQYWQpOworCisgICAgICAgICAg
ICBnc3RfcGFkX2xpbmsoc3JjUGFkLmdldCgpLCBpbnRlcm5hbFBhZC5nZXQoKSk7CisgICAgICAg
IH0gLy8gRWxzZTogcGlwZWxpbmUgaXMgYWxyZWFkeSBjb3JyZWN0LgorICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIENhcHMgYXJlIG5vdCBwbGFpbiB0ZXh0LCB3ZSBhc3N1bWUgaXQncyBXZWJWVFQu
CisKKyAgICAgICAgLy8gUmVtb3ZlIHRoZSBXZWJWVFQgZW5jb2RlciBpZiBwcmVzZW50LgorICAg
ICAgICBpZiAodGFyZ2V0ICYmIGdzdEVsZW1lbnRGYWN0b3J5RXF1YWxzKHRhcmdldFBhcmVudC5n
ZXQoKSwgIndlYnZ0dGVuYyJfcykpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QoY29t
YmluZXIsICJSZW1vdmluZyBXZWJWVFQgZW5jb2RlciIpOworICAgICAgICAgICAgZ3N0X2Jpbl9y
ZW1vdmUoR1NUX0JJTl9DQVNUKGNvbWJpbmVyKSwgdGFyZ2V0UGFyZW50LmdldCgpKTsKKyAgICAg
ICAgICAgIHRhcmdldCA9IG51bGxwdHI7CisgICAgICAgICAgICB0YXJnZXRQYXJlbnQgPSBudWxs
cHRyOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVO
VF9UQUc6IHsKLSAgICAgICAgR3N0VGFnTGlzdCogdGFnczsKLSAgICAgICAgZ3N0X2V2ZW50X3Bh
cnNlX3RhZyhldmVudCwgJnRhZ3MpOwotICAgICAgICBBU1NFUlQodGFncyk7Ci0KLSAgICAgICAg
R1NUX09CSkVDVF9MT0NLKHBhZCk7Ci0gICAgICAgIGlmICghY29tYmluZXJQYWQtPnRhZ3MpCi0g
ICAgICAgICAgICBjb21iaW5lclBhZC0+dGFncyA9IGdzdF90YWdfbGlzdF9jb3B5KHRhZ3MpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBnc3RfdGFnX2xpc3RfaW5zZXJ0KGNvbWJpbmVyUGFk
LT50YWdzLCB0YWdzLCBHU1RfVEFHX01FUkdFX1JFUExBQ0UpOwotICAgICAgICBHU1RfT0JKRUNU
X1VOTE9DSyhwYWQpOwotCi0gICAgICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChwYWQpLCAi
dGFncyIpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgLy8gTGluayB0aGUgcGFkIHRvIHRoZSBjb21iaW5lckVsZW1lbnQuCisg
ICAgICAgIGlmICghdGFyZ2V0KSB7CisgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKGNvbWJp
bmVyLCAiQXNzb2NpYXRpbmcgJSIgR1NUX1BUUl9GT1JNQVQgIiB0byAlIiBHU1RfUFRSX0ZPUk1B
VCwgaW50ZXJuYWxQYWQuZ2V0KCksIHBhZCk7CisgICAgICAgICAgICBnc3RfZ2hvc3RfcGFkX3Nl
dF90YXJnZXQoR1NUX0dIT1NUX1BBRChwYWQpLCBpbnRlcm5hbFBhZC5nZXQoKSk7CisgICAgICAg
IH0gLy8gRWxzZTogcGlwZWxpbmUgaXMgYWxyZWFkeSBjb3JyZWN0LgogICAgIH0KLSAgICByZXR1
cm4gZ3N0X3BhZF9ldmVudF9kZWZhdWx0KHBhZCwgcGFyZW50LCBldmVudCk7CiB9CiAKLXN0YXRp
YyBHc3RQYWQqIHdlYmtpdFRleHRDb21iaW5lclJlcXVlc3ROZXdQYWQoR3N0RWxlbWVudCAqIGVs
ZW1lbnQsCi0gICAgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCwgY29uc3QgZ2NoYXIgKiBuYW1lLCBj
b25zdCBHc3RDYXBzICogY2FwcykKK3N0YXRpYyBHc3RQYWQqIHdlYmtpdFRleHRDb21iaW5lclJl
cXVlc3ROZXdQYWQoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0UGFkVGVtcGxhdGUqIHRlbXBsLCBj
b25zdCBjaGFyKiBuYW1lLCBjb25zdCBHc3RDYXBzKiBjYXBzKQogewotICAgIGdib29sZWFuIHJl
dDsKLSAgICBVTlVTRURfUEFSQU0ocmV0KTsKLSAgICBBU1NFUlQodGVtcGwpOwotCi0gICAgV2Vi
S2l0VGV4dENvbWJpbmVyKiBjb21iaW5lciA9IFdFQktJVF9URVhUX0NPTUJJTkVSKGVsZW1lbnQp
OworICAgIGF1dG8qIGNvbWJpbmVyID0gV0VCS0lUX1RFWFRfQ09NQklORVIoZWxlbWVudCk7CiAg
ICAgQVNTRVJUKGNvbWJpbmVyKTsKIAotICAgIEdzdFBhZCogZ2hvc3RQYWQgPSBHU1RfUEFEKGdf
b2JqZWN0X25ldyhXRUJLSVRfVFlQRV9URVhUX0NPTUJJTkVSX1BBRCwgImRpcmVjdGlvbiIsIEdT
VF9QQURfU0lOSywgbnVsbHB0cikpOworICAgIEdTVF9ERUJVR19PQkpFQ1QoZWxlbWVudCwgIlJl
cXVlc3RpbmcgbmV3IHNpbmsgcGFkIik7CisgICAgYXV0byogZ2hvc3RQYWQgPSBHU1RfUEFEX0NB
U1QoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1RFWFRfQ09NQklORVJfUEFELCAiZGlyZWN0aW9u
IiwgR1NUX1BBRF9TSU5LLCBudWxscHRyKSk7CiAgICAgQVNTRVJUKGdob3N0UGFkKTsKIAotICAg
IHJldCA9IGdzdF9naG9zdF9wYWRfY29uc3RydWN0KEdTVF9HSE9TVF9QQUQoZ2hvc3RQYWQpKTsK
LSAgICBBU1NFUlQocmV0KTsKLQotICAgIFdlYktpdFRleHRDb21iaW5lclBhZCogY29tYmluZXJQ
YWQgPSBXRUJLSVRfVEVYVF9DT01CSU5FUl9QQUQoZ2hvc3RQYWQpOwotICAgIGNvbWJpbmVyUGFk
LT5mdW5uZWxQYWQgPSBnc3RfZWxlbWVudF9yZXF1ZXN0X3BhZChjb21iaW5lci0+ZnVubmVsLCB0
ZW1wbCwgbmFtZSwgY2Fwcyk7Ci0gICAgQVNTRVJUKGNvbWJpbmVyUGFkLT5mdW5uZWxQYWQpOwor
ICAgIGF1dG8qIGludGVybmFsUGFkID0gZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQoY29tYmluZXIt
PnByaXYtPmNvbWJpbmVyRWxlbWVudC5nZXQoKSwgdGVtcGwsIG5hbWUsIGNhcHMpOworICAgIGdf
b2JqZWN0X3NldChXRUJLSVRfVEVYVF9DT01CSU5FUl9QQUQoZ2hvc3RQYWQpLCAiaW5uZXItY29t
YmluZXItcGFkIiwgaW50ZXJuYWxQYWQsIG51bGxwdHIpOwogCi0gICAgcmV0ID0gZ3N0X3BhZF9z
ZXRfYWN0aXZlKGdob3N0UGFkLCB0cnVlKTsKLSAgICBBU1NFUlQocmV0KTsKLQotICAgIHJldCA9
IGdzdF9lbGVtZW50X2FkZF9wYWQoR1NUX0VMRU1FTlQoY29tYmluZXIpLCBnaG9zdFBhZCk7Ci0g
ICAgQVNTRVJUKHJldCk7CisgICAgZ3N0X3BhZF9zZXRfYWN0aXZlKGdob3N0UGFkLCB0cnVlKTsK
KyAgICBnc3RfZWxlbWVudF9hZGRfcGFkKEdTVF9FTEVNRU5UX0NBU1QoY29tYmluZXIpLCBnaG9z
dFBhZCk7CiAgICAgcmV0dXJuIGdob3N0UGFkOwogfQogCi1zdGF0aWMgdm9pZCB3ZWJraXRUZXh0
Q29tYmluZXJSZWxlYXNlUGFkKEdzdEVsZW1lbnQgKmVsZW1lbnQsIEdzdFBhZCAqcGFkKQorc3Rh
dGljIHZvaWQgd2Via2l0VGV4dENvbWJpbmVyUmVsZWFzZVBhZChHc3RFbGVtZW50KiBlbGVtZW50
LCBHc3RQYWQqIHBhZCkKIHsKLSAgICBXZWJLaXRUZXh0Q29tYmluZXIqIGNvbWJpbmVyID0gV0VC
S0lUX1RFWFRfQ09NQklORVIoZWxlbWVudCk7Ci0gICAgV2ViS2l0VGV4dENvbWJpbmVyUGFkKiBj
b21iaW5lclBhZCA9IFdFQktJVF9URVhUX0NPTUJJTkVSX1BBRChwYWQpOworICAgIGF1dG8qIGNv
bWJpbmVyID0gV0VCS0lUX1RFWFRfQ09NQklORVIoZWxlbWVudCk7CisgICAgYXV0byogY29tYmlu
ZXJQYWQgPSBXRUJLSVRfVEVYVF9DT01CSU5FUl9QQUQocGFkKTsKIAotICAgIGlmIChHUmVmUHRy
PEdzdFBhZD4gdGFyZ2V0ID0gYWRvcHRHUmVmKGdzdF9naG9zdF9wYWRfZ2V0X3RhcmdldChHU1Rf
R0hPU1RfUEFEKHBhZCkpKSkgewotICAgICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IHBhcmVudCA9
IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudCh0YXJnZXQuZ2V0KCkpKTsKKyAg
ICBpZiAoYXV0byB0YXJnZXQgPSBhZG9wdEdSZWYoZ3N0X2dob3N0X3BhZF9nZXRfdGFyZ2V0KEdT
VF9HSE9TVF9QQUQocGFkKSkpKSB7CisgICAgICAgIGF1dG8gcGFyZW50ID0gYWRvcHRHUmVmKGdz
dF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50KHRhcmdldC5nZXQoKSkpOwogICAgICAgICBBU1NFUlQo
cGFyZW50KTsKLSAgICAgICAgaWYgKEdfVFlQRV9GUk9NX0lOU1RBTkNFKHBhcmVudC5nZXQoKSkg
PT0gd2ViVlRURW5jVHlwZSkgeworICAgICAgICBpZiAoZ3N0RWxlbWVudEZhY3RvcnlFcXVhbHMo
cGFyZW50LmdldCgpLCAid2VidnR0ZW5jIl9zKSkgewogICAgICAgICAgICAgZ3N0X2VsZW1lbnRf
c2V0X3N0YXRlKHBhcmVudC5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOwotICAgICAgICAgICAgZ3N0
X2Jpbl9yZW1vdmUoR1NUX0JJTihjb21iaW5lciksIHBhcmVudC5nZXQoKSk7CisgICAgICAgICAg
ICBnc3RfYmluX3JlbW92ZShHU1RfQklOX0NBU1QoY29tYmluZXIpLCBwYXJlbnQuZ2V0KCkpOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZChj
b21iaW5lci0+ZnVubmVsLCBjb21iaW5lclBhZC0+ZnVubmVsUGFkKTsKKyAgICBhdXRvKiBpbnRl
cm5hbFBhZCA9IHdlYktpdFRleHRDb21iaW5lclBhZExlYWtJbnRlcm5hbFBhZFJlZihjb21iaW5l
clBhZCk7CisgICAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZChjb21iaW5lci0+cHJp
di0+Y29tYmluZXJFbGVtZW50LmdldCgpLCBpbnRlcm5hbFBhZCk7CisgICAgZ3N0X29iamVjdF91
bnJlZihpbnRlcm5hbFBhZCk7CisKICAgICBnc3RfZWxlbWVudF9yZW1vdmVfcGFkKGVsZW1lbnQs
IHBhZCk7CiB9CiAKLXN0YXRpYyB2b2lkIHdlYmtpdF90ZXh0X2NvbWJpbmVyX2NsYXNzX2luaXQo
V2ViS2l0VGV4dENvbWJpbmVyQ2xhc3MqIGtsYXNzKQorc3RhdGljIHZvaWQgd2ViS2l0VGV4dENv
bWJpbmVyQ29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogewotICAgIEdzdEVsZW1lbnRDbGFz
cyogZWxlbWVudENsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1Moa2xhc3MpOworICAgIEdTVF9DQUxM
X1BBUkVOVChHX09CSkVDVF9DTEFTUywgY29uc3RydWN0ZWQsIChvYmplY3QpKTsKIAotICAgIGdz
dF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUoZWxlbWVudENsYXNzLCBnc3Rfc3RhdGlj
X3BhZF90ZW1wbGF0ZV9nZXQoJnNpbmtUZW1wbGF0ZSkpOwotICAgIGdzdF9lbGVtZW50X2NsYXNz
X2FkZF9wYWRfdGVtcGxhdGUoZWxlbWVudENsYXNzLCBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9n
ZXQoJnNyY1RlbXBsYXRlKSk7CisgICAgYXV0byogY29tYmluZXIgPSBXRUJLSVRfVEVYVF9DT01C
SU5FUihvYmplY3QpOworICAgIGF1dG8qIHByaXYgPSBjb21iaW5lci0+cHJpdjsKIAotICAgIGdz
dF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YShlbGVtZW50Q2xhc3MsICJXZWJLaXQgdGV4dCBj
b21iaW5lciIsICJHZW5lcmljIiwKLSAgICAgICAgIkEgZnVubmVsIHRoYXQgYWNjZXB0cyBhbnkg
Y2FwcywgYnV0IGNvbnZlcnRzIHBsYWluIHRleHQgdG8gV2ViVlRUIiwKLSAgICAgICAgIkJyZW5k
YW4gTG9uZyA8Yi5sb25nQGNhYmxlbGFicy5jb20+Iik7CisgICAgLy8gRm9yIG5vdyBhIGZ1bm5l
bCBpcyB1c2VkLCBidXQgYSBiZXR0ZXIgY29tYmluZXIsIGNvbXBhdGlibGUgd2l0aCBwbGF5Ymlu
MyB1c2UtY2FzZXMsIHdvdWxkIGJlIGNvbmNhdC4KKyAgICBwcml2LT5jb21iaW5lckVsZW1lbnQg
PSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImZ1bm5lbCIsIG51bGxwdHIpOworICAgIEFTU0VS
VChwcml2LT5jb21iaW5lckVsZW1lbnQpOwogCi0gICAgZWxlbWVudENsYXNzLT5yZXF1ZXN0X25l
d19wYWQgPQotICAgICAgICBHU1RfREVCVUdfRlVOQ1BUUih3ZWJraXRUZXh0Q29tYmluZXJSZXF1
ZXN0TmV3UGFkKTsKLSAgICBlbGVtZW50Q2xhc3MtPnJlbGVhc2VfcGFkID0KLSAgICAgICAgR1NU
X0RFQlVHX0ZVTkNQVFIod2Via2l0VGV4dENvbWJpbmVyUmVsZWFzZVBhZCk7CisgICAgZ3N0X2Jp
bl9hZGQoR1NUX0JJTl9DQVNUKGNvbWJpbmVyKSwgcHJpdi0+Y29tYmluZXJFbGVtZW50LmdldCgp
KTsKIAotICAgIEdSZWZQdHI8R3N0RWxlbWVudEZhY3Rvcnk+IHdlYlZUVEVuY0ZhY3RvcnkgPSBh
ZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZmFjdG9yeV9maW5kKCJ3ZWJ2dHRlbmMiKSk7Ci0gICAgQVNT
RVJUKHdlYlZUVEVuY0ZhY3RvcnkpOwotICAgIGdzdF9vYmplY3RfdW5yZWYoZ3N0X3BsdWdpbl9m
ZWF0dXJlX2xvYWQoR1NUX1BMVUdJTl9GRUFUVVJFKHdlYlZUVEVuY0ZhY3RvcnkuZ2V0KCkpKSk7
Ci0gICAgd2ViVlRURW5jVHlwZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X2VsZW1lbnRfdHlw
ZSh3ZWJWVFRFbmNGYWN0b3J5LmdldCgpKTsKLSAgICBBU1NFUlQod2ViVlRURW5jVHlwZSk7Cisg
ICAgYXV0byBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQocHJpdi0+
Y29tYmluZXJFbGVtZW50LmdldCgpLCAic3JjIikpOworICAgIEFTU0VSVChwYWQpOworCisgICAg
Z3N0X2VsZW1lbnRfYWRkX3BhZChHU1RfRUxFTUVOVF9DQVNUKGNvbWJpbmVyKSwgZ3N0X2dob3N0
X3BhZF9uZXcoInNyYyIsIHBhZC5nZXQoKSkpOwogfQogCi1zdGF0aWMgdm9pZCB3ZWJraXRfdGV4
dF9jb21iaW5lcl9wYWRfY2xhc3NfaW5pdChXZWJLaXRUZXh0Q29tYmluZXJQYWRDbGFzcyoga2xh
c3MpCitzdGF0aWMgdm9pZCB3ZWJraXRfdGV4dF9jb21iaW5lcl9jbGFzc19pbml0KFdlYktpdFRl
eHRDb21iaW5lckNsYXNzKiBrbGFzcykKIHsKLSAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFz
cyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBhdXRvKiBlbGVtZW50Q2xhc3MgPSBHU1Rf
RUxFTUVOVF9DTEFTUyhrbGFzcyk7CisgICAgYXV0byogb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9D
TEFTUyhrbGFzcyk7CiAKLSAgICBnb2JqZWN0Q2xhc3MtPmRpc3Bvc2UgPSBHU1RfREVCVUdfRlVO
Q1BUUih3ZWJraXRUZXh0Q29tYmluZXJQYWREaXNwb3NlKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmdl
dF9wcm9wZXJ0eSA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYmtpdFRleHRDb21iaW5lclBhZEdldFBy
b3BlcnR5KTsKKyAgICBvYmplY3RDbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJLaXRUZXh0Q29tYmlu
ZXJDb25zdHJ1Y3RlZDsKKworICAgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUo
ZWxlbWVudENsYXNzLCBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQoJnNpbmtUZW1wbGF0ZSkp
OworICAgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUoZWxlbWVudENsYXNzLCBn
c3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQoJnNyY1RlbXBsYXRlKSk7CisKKyAgICBnc3RfZWxl
bWVudF9jbGFzc19zZXRfbWV0YWRhdGEoZWxlbWVudENsYXNzLCAiV2ViS2l0IHRleHQgY29tYmlu
ZXIiLCAiR2VuZXJpYyIsCisgICAgICAgICJBIGNvbWJpbmVyIHRoYXQgYWNjZXB0cyBhbnkgY2Fw
cywgYnV0IGNvbnZlcnRzIHBsYWluIHRleHQgdG8gV2ViVlRUIiwKKyAgICAgICAgIkJyZW5kYW4g
TG9uZyA8Yi5sb25nQGNhYmxlbGFicy5jb20+Iik7CiAKLSAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywgUFJPUF9QQURfVEFHUywKLSAgICAgICAgZ19wYXJh
bV9zcGVjX2JveGVkKCJ0YWdzIiwgIlRhZ3MiLCAiVGhlIGN1cnJlbnRseSBhY3RpdmUgdGFncyBv
biB0aGUgcGFkIiwgR1NUX1RZUEVfVEFHX0xJU1QsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxH
UGFyYW1GbGFncz4oR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7
CisgICAgZWxlbWVudENsYXNzLT5yZXF1ZXN0X25ld19wYWQgPSBHU1RfREVCVUdfRlVOQ1BUUih3
ZWJraXRUZXh0Q29tYmluZXJSZXF1ZXN0TmV3UGFkKTsKKyAgICBlbGVtZW50Q2xhc3MtPnJlbGVh
c2VfcGFkID0gR1NUX0RFQlVHX0ZVTkNQVFIod2Via2l0VGV4dENvbWJpbmVyUmVsZWFzZVBhZCk7
CiB9CiAKIEdzdEVsZW1lbnQqIHdlYmtpdFRleHRDb21iaW5lck5ldygpCiB7CiAgICAgLy8gVGhl
IGNvbWJpbmVyIHJlbGllcyBvbiB3ZWJ2dHRlbmMsIGZhaWwgZWFybHkgaWYgaXQncyBub3QgdGhl
cmUuCi0gICAgaWYgKCFXZWJDb3JlOjppc0dTdHJlYW1lclBsdWdpbkF2YWlsYWJsZSgic3ViZW5j
IikpIHsKKyAgICBpZiAoIWlzR1N0cmVhbWVyUGx1Z2luQXZhaWxhYmxlKCJzdWJlbmMiKSkgewog
ICAgICAgICBXVEZMb2dBbHdheXMoIldlYktpdCB3YXNuJ3QgYWJsZSB0byBmaW5kIGEgV2ViVlRU
IGVuY29kZXIuIE5vdCBjb250aW51aW5nIHdpdGhvdXQgcGxhdGZvcm0gc3VwcG9ydCBmb3Igc3Vi
dGl0bGVzLiIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVGV4dENvbWJpbmVyR1N0
cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVGV4
dENvbWJpbmVyR1N0cmVhbWVyLmgKaW5kZXggMDkwNjc2MzU0NGE2MTJhNzdmZTQ0NThmMWFmYTUz
YWQ3MjBiNDU0Yi4uMDM0ZDliMGExODBkNjE5OGY0NmE3MDBhNjRjZmRlYjlkODEyZTBmOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RleHRD
b21iaW5lckdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9UZXh0Q29tYmluZXJHU3RyZWFtZXIuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQ2FibGUgVGVsZXZpc2lvbiBMYWJvcmF0b3JpZXMsIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEgUy5MLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNyw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShH
U1RSRUFNRVIpCiAKLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgogI2luY2x1ZGUgPGdzdC9nc3Qu
aD4KIAogI2RlZmluZSBXRUJLSVRfVFlQRV9URVhUX0NPTUJJTkVSIHdlYmtpdF90ZXh0X2NvbWJp
bmVyX2dldF90eXBlKCkKQEAgLTM4LDI3ICszOCwyNCBAQAogI2RlZmluZSBXRUJLSVRfSVNfVEVY
VF9DT01CSU5FUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyks
IFdFQktJVF9UWVBFX1RFWFRfQ09NQklORVIpKQogI2RlZmluZSBXRUJLSVRfVEVYVF9DT01CSU5F
Ul9HRVRfQ0xBU1Mob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgV0VCS0lU
X1RZUEVfVEVYVF9DT01CSU5FUiwgV2ViS2l0VGV4dENvbWJpbmVyQ2xhc3MpKQogCitHVHlwZSB3
ZWJraXRfdGV4dF9jb21iaW5lcl9nZXRfdHlwZSh2b2lkKTsKKwogdHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdFRleHRDb21iaW5lciBXZWJLaXRUZXh0Q29tYmluZXI7CiB0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0VGV4dENvbWJpbmVyQ2xhc3MgV2ViS2l0VGV4dENvbWJpbmVyQ2xhc3M7Cit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0VGV4dENvbWJpbmVyUHJpdmF0ZSBXZWJLaXRUZXh0Q29tYmluZXJQcml2YXRl
OwogCiBzdHJ1Y3QgX1dlYktpdFRleHRDb21iaW5lciB7CiAgICAgR3N0QmluIHBhcmVudDsKIAot
ICAgIEdzdEVsZW1lbnQgKmZ1bm5lbDsKKyAgICBXZWJLaXRUZXh0Q29tYmluZXJQcml2YXRlKiBw
cml2OwogfTsKIAogc3RydWN0IF9XZWJLaXRUZXh0Q29tYmluZXJDbGFzcyB7CiAgICAgR3N0Qmlu
Q2xhc3MgcGFyZW50Q2xhc3M7Ci0KLSAgICAvLyBGdXR1cmUgcGFkZGluZwotICAgIHZvaWQgKCog
X3dlYmtpdF9yZXNlcnZlZDEpKHZvaWQpOwotICAgIHZvaWQgKCogX3dlYmtpdF9yZXNlcnZlZDIp
KHZvaWQpOwotICAgIHZvaWQgKCogX3dlYmtpdF9yZXNlcnZlZDMpKHZvaWQpOwotICAgIHZvaWQg
KCogX3dlYmtpdF9yZXNlcnZlZDQpKHZvaWQpOwotICAgIHZvaWQgKCogX3dlYmtpdF9yZXNlcnZl
ZDUpKHZvaWQpOwotICAgIHZvaWQgKCogX3dlYmtpdF9yZXNlcnZlZDYpKHZvaWQpOwogfTsKIAog
R3N0RWxlbWVudCogd2Via2l0VGV4dENvbWJpbmVyTmV3KCk7CiAKK3ZvaWQgd2ViS2l0VGV4dENv
bWJpbmVySGFuZGxlQ2Fwc0V2ZW50KFdlYktpdFRleHRDb21iaW5lciosIEdzdFBhZCosIEdzdEV2
ZW50Kik7CisKICNlbmRpZiAvLyBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVGV4dENv
bWJpbmVyUGFkR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9UZXh0Q29tYmluZXJQYWRHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJkYWVl
ZDY3NTc2NWI0Y2I0OTNiM2ZjODFhOGVjYWVkYjRiYzE5ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVGV4dENvbWJpbmVyUGFk
R1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBDYWJsZSBUZWxldmlzaW9uIExhYm9yYXRvcmllcywgSW5jLgorICogQ29weXJpZ2h0IChDKSAy
MDIxIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiVGV4dENvbWJpbmVyUGFkR1N0cmVhbWVyLmgiCisKKyNpZiBFTkFCTEUoVklERU8p
ICYmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKKyNpbmNs
dWRlICJUZXh0Q29tYmluZXJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlw
ZS5oPgorCitzdHJ1Y3QgX1dlYktpdFRleHRDb21iaW5lclBhZFByaXZhdGUgeworICAgIEdSZWZQ
dHI8R3N0VGFnTGlzdD4gdGFnczsKKyAgICBHUmVmUHRyPEdzdFBhZD4gaW5uZXJDb21iaW5lclBh
ZDsKK307CisKK2VudW0geworICAgIFBST1BfUEFEXzAsCisgICAgUFJPUF9QQURfVEFHUywKKyAg
ICBQUk9QX0lOTkVSX0NPTUJJTkVSX1BBRCwKK307CisKKyNkZWZpbmUgd2Via2l0X3RleHRfY29t
YmluZXJfcGFkX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKK1dFQktJVF9ERUZJTkVfVFlQRShX
ZWJLaXRUZXh0Q29tYmluZXJQYWQsIHdlYmtpdF90ZXh0X2NvbWJpbmVyX3BhZCwgR1NUX1RZUEVf
R0hPU1RfUEFEKTsKKworc3RhdGljIGdib29sZWFuIHdlYmtpdFRleHRDb21iaW5lclBhZEV2ZW50
KEdzdFBhZCogcGFkLCBHc3RPYmplY3QqIHBhcmVudCwgR3N0RXZlbnQqIGV2ZW50KQoreworICAg
IHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUoZXZlbnQpKSB7CisgICAgY2FzZSBHU1RfRVZFTlRfQ0FQ
UzoKKyAgICAgICAgd2ViS2l0VGV4dENvbWJpbmVySGFuZGxlQ2Fwc0V2ZW50KFdFQktJVF9URVhU
X0NPTUJJTkVSKHBhcmVudCksIHBhZCwgZXZlbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdTVF9FVkVOVF9UQUc6IHsKKyAgICAgICAgYXV0byogY29tYmluZXJQYWQgPSBXRUJLSVRfVEVY
VF9DT01CSU5FUl9QQUQocGFkKTsKKyAgICAgICAgR3N0VGFnTGlzdCogdGFnczsKKyAgICAgICAg
Z3N0X2V2ZW50X3BhcnNlX3RhZyhldmVudCwgJnRhZ3MpOworICAgICAgICBBU1NFUlQodGFncyk7
CisKKyAgICAgICAgR1NUX09CSkVDVF9MT0NLKHBhZCk7CisgICAgICAgIGlmICghY29tYmluZXJQ
YWQtPnByaXYtPnRhZ3MpCisgICAgICAgICAgICBjb21iaW5lclBhZC0+cHJpdi0+dGFncyA9IGFk
b3B0R1JlZihnc3RfdGFnX2xpc3RfY29weSh0YWdzKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGdzdF90YWdfbGlzdF9pbnNlcnQoY29tYmluZXJQYWQtPnByaXYtPnRhZ3MuZ2V0KCksIHRh
Z3MsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSk7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHBh
ZCk7CisKKyAgICAgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKHBhZCksICJ0YWdzIik7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9
CisgICAgcmV0dXJuIGdzdF9wYWRfZXZlbnRfZGVmYXVsdChwYWQsIHBhcmVudCwgZXZlbnQpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRUZXh0Q29tYmluZXJQYWRHZXRQcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIHVuc2lnbmVkIHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMq
IHBzcGVjKQoreworICAgIGF1dG8qIHBhZCA9IFdFQktJVF9URVhUX0NPTUJJTkVSX1BBRChvYmpl
Y3QpOworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9QQURfVEFHUzoK
KyAgICAgICAgR1NUX09CSkVDVF9MT0NLKG9iamVjdCk7CisgICAgICAgIGlmIChwYWQtPnByaXYt
PnRhZ3MpCisgICAgICAgICAgICBnX3ZhbHVlX3Rha2VfYm94ZWQodmFsdWUsIGdzdF90YWdfbGlz
dF9jb3B5KHBhZC0+cHJpdi0+dGFncy5nZXQoKSkpOworICAgICAgICBHU1RfT0JKRUNUX1VOTE9D
SyhvYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSU5ORVJfQ09NQklORVJf
UEFEOgorICAgICAgICBHU1RfT0JKRUNUX0xPQ0sob2JqZWN0KTsKKyAgICAgICAgZ192YWx1ZV9z
ZXRfb2JqZWN0KHZhbHVlLCBwYWQtPnByaXYtPmlubmVyQ29tYmluZXJQYWQuZ2V0KCkpOworICAg
ICAgICBHU1RfT0JKRUNUX1VOTE9DSyhvYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBw
cm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgd2Via2l0VGV4dENvbWJpbmVyUGFkU2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sK
KyAgICBhdXRvKiBwYWQgPSBXRUJLSVRfVEVYVF9DT01CSU5FUl9QQUQob2JqZWN0KTsKKyAgICBz
d2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfSU5ORVJfQ09NQklORVJfUEFEOgor
ICAgICAgICBHU1RfT0JKRUNUX0xPQ0sob2JqZWN0KTsKKyAgICAgICAgcGFkLT5wcml2LT5pbm5l
ckNvbWJpbmVyUGFkID0gYWRvcHRHUmVmKEdTVF9QQURfQ0FTVChnX3ZhbHVlX2dldF9vYmplY3Qo
dmFsdWUpKSk7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG9iamVjdCk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJU
WV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRUZXh0Q29tYmluZXJQYWRDb25zdHJ1Y3RlZChHT2JqZWN0
KiBvYmplY3QpCit7CisgICAgR1NUX0NBTExfUEFSRU5UKEdfT0JKRUNUX0NMQVNTLCBjb25zdHJ1
Y3RlZCwgKG9iamVjdCkpOworICAgIGdzdF9naG9zdF9wYWRfY29uc3RydWN0KEdTVF9HSE9TVF9Q
QUQob2JqZWN0KSk7CisgICAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24oR1NUX1BBRF9DQVNU
KG9iamVjdCksIHdlYmtpdFRleHRDb21iaW5lclBhZEV2ZW50KTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X3RleHRfY29tYmluZXJfcGFkX2NsYXNzX2luaXQoV2ViS2l0VGV4dENvbWJpbmVyUGFk
Q2xhc3MqIGtsYXNzKQoreworICAgIGF1dG8qIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNT
KGtsYXNzKTsKKworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJraXRUZXh0Q29t
YmluZXJQYWRDb25zdHJ1Y3RlZDsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IEdT
VF9ERUJVR19GVU5DUFRSKHdlYmtpdFRleHRDb21iaW5lclBhZEdldFByb3BlcnR5KTsKKyAgICBn
b2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IEdTVF9ERUJVR19GVU5DUFRSKHdlYmtpdFRleHRD
b21iaW5lclBhZFNldFByb3BlcnR5KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoZ29iamVjdENsYXNzLCBQUk9QX1BBRF9UQUdTLAorICAgICAgICBnX3BhcmFtX3NwZWNf
Ym94ZWQoInRhZ3MiLCAiVGFncyIsICJUaGUgY3VycmVudGx5IGFjdGl2ZSB0YWdzIG9uIHRoZSBw
YWQiLCBHU1RfVFlQRV9UQUdfTElTVCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZs
YWdzPihHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLCBQUk9QX0lOTkVS
X0NPTUJJTkVSX1BBRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgiaW5uZXItY29tYmlu
ZXItcGFkIiwgIkludGVybmFsIENvbWJpbmVyIFBhZCIsICJUaGUgaW50ZXJuYWwgZnVubmVsIChv
ciBjb25jYXQpIHBhZCBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYWQiLCBHU1RfVFlQRV9QQUQsCisg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oR19QQVJBTV9SRUFEV1JJVEUgfCBH
X1BBUkFNX1NUQVRJQ19TVFJJTkdTKSkpOworfQorCitHc3RQYWQqIHdlYktpdFRleHRDb21iaW5l
clBhZExlYWtJbnRlcm5hbFBhZFJlZihXZWJLaXRUZXh0Q29tYmluZXJQYWQqIHBhZCkKK3sKKyAg
ICByZXR1cm4gcGFkLT5wcml2LT5pbm5lckNvbWJpbmVyUGFkLmxlYWtSZWYoKTsKK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvVGV4dENvbWJpbmVyUGFkR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvVGV4dENvbWJpbmVyUGFkR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Yjg0MjcxY2Q2YTIxMWFlNTc0NjU2NTk1YjdlMDQwOWI1NWRlNWYzMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UZXh0Q29tYmlu
ZXJQYWRHU3RyZWFtZXIuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIENhYmxlIFRlbGV2aXNpb24gTGFib3JhdG9yaWVzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJl
YW1lci5oIgorCisjZGVmaW5lIFdFQktJVF9UWVBFX1RFWFRfQ09NQklORVJfUEFEIHdlYmtpdF90
ZXh0X2NvbWJpbmVyX3BhZF9nZXRfdHlwZSgpCisKKyNkZWZpbmUgV0VCS0lUX1RFWFRfQ09NQklO
RVJfUEFEKG9iaikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQ
RV9URVhUX0NPTUJJTkVSX1BBRCwgV2ViS2l0VGV4dENvbWJpbmVyUGFkKSkKKyNkZWZpbmUgV0VC
S0lUX1RFWFRfQ09NQklORVJfUEFEX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX0NB
U1QoKGtsYXNzKSwgV0VCS0lUX1RZUEVfVEVYVF9DT01CSU5FUl9QQUQsIFdlYktpdFRleHRDb21i
aW5lclBhZENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1RFWFRfQ09NQklORVJfUEFEKG9iaikg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9URVhUX0NPTUJJ
TkVSX1BBRCkpCisjZGVmaW5lIFdFQktJVF9JU19URVhUX0NPTUJJTkVSX1BBRF9DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksIFdFQktJVF9UWVBFX1RFWFRfQ09N
QklORVJfUEFEKSkKKyNkZWZpbmUgV0VCS0lUX1RFWFRfQ09NQklORVJfUEFEX0dFVF9DTEFTUyhv
YmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCBXRUJLSVRfVFlQRV9URVhUX0NP
TUJJTkVSX1BBRCwgV2ViS2l0VGV4dENvbWJpbmVyUGFkQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0VGV4dENvbWJpbmVyUGFkUHJpdmF0ZSBXZWJLaXRUZXh0Q29tYmluZXJQYWRQcml2
YXRlOworCitzdHJ1Y3QgV2ViS2l0VGV4dENvbWJpbmVyUGFkIHsKKyAgICBHc3RHaG9zdFBhZCBw
YXJlbnQ7CisgICAgV2ViS2l0VGV4dENvbWJpbmVyUGFkUHJpdmF0ZSogcHJpdjsKK307CisKK3N0
cnVjdCBXZWJLaXRUZXh0Q29tYmluZXJQYWRDbGFzcyB7CisgICAgR3N0R2hvc3RQYWRDbGFzcyBw
YXJlbnQ7Cit9OworCitHVHlwZSB3ZWJraXRfdGV4dF9jb21iaW5lcl9wYWRfZ2V0X3R5cGUodm9p
ZCk7CisKK0dzdFBhZCogd2ViS2l0VGV4dENvbWJpbmVyUGFkTGVha0ludGVybmFsUGFkUmVmKFdl
YktpdFRleHRDb21iaW5lclBhZCopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5n
ZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmYzkxM2RlNzQ0NGQ4MjI0MDk0NmNmMDEyZTEz
YjFmNzU4YzA3NWE3Li4xYjVkODkyNDA4NTMwNGI4M2Y1OWY5ZTJkNDA4NjlkNDE1YmMxOWZkIDEw
MDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTMgQEAKKzIwMjEtMDEtMTEgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEu
Y29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIENsZWFuLXVwIHRoZSBUZXh0Q29tYmluZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDQ2MworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5OiBBZGQgR1N0cmVhbWVyIFRleHRDb21iaW5lciBpbXBs
ZW1lbnRhdGlvbiB0byBHT2JqZWN0CisgICAgICAgIGNsYXNzZXMgYWxsb3ctbGlzdC4KKwogMjAy
MS0wMS0xMyAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSRUdSRVNTSU9OIChyMjY2NjM0KTogTWVzc2FnZXMgY3Jhc2hlcyBzb21ldGltZXMgd2hpbGUg
c2Nyb2xsaW5nIGFyb3VuZCBhbmQgcGxheWluZyBZb3VUdWJlIHZpZGVvcwpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CmluZGV4IDRlYmYwYmQ4ZTZlNDgzNjBkZmVkNTJmZjMz
YWEwNmY1MTk1ZWQ1MGMuLjFkNDk1MTcwZjM1YjY4OTI5NmI4MWNiNjdhODJkNTMwNDc1MzFiMDIg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKQEAgLTIxOSw2ICsyMTks
MTAgQEAgX1BBVEhfUlVMRVNfU1BFQ0lGSUVSID0gWwogICAgICAgIyB2YXJpYWJsZXMgYW5kIGZ1
bmN0aW9ucyBjb250YWluaW5nIHVuZGVyc2NvcmVzLgogICAgICAgb3MucGF0aC5qb2luKCdTb3Vy
Y2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdncmFwaGljcycsICdnc3RyZWFtZXInLCAnR0xW
aWRlb1NpbmtHU3RyZWFtZXIuY3BwJyksCiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdX
ZWJDb3JlJywgJ3BsYXRmb3JtJywgJ2dyYXBoaWNzJywgJ2dzdHJlYW1lcicsICdHTFZpZGVvU2lu
a0dTdHJlYW1lci5oJyksCisgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywg
J3BsYXRmb3JtJywgJ2dyYXBoaWNzJywgJ2dzdHJlYW1lcicsICdUZXh0Q29tYmluZXJHU3RyZWFt
ZXIuY3BwJyksCisgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRm
b3JtJywgJ2dyYXBoaWNzJywgJ2dzdHJlYW1lcicsICdUZXh0Q29tYmluZXJHU3RyZWFtZXIuaCcp
LAorICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdn
cmFwaGljcycsICdnc3RyZWFtZXInLCAnVGV4dENvbWJpbmVyUGFkR1N0cmVhbWVyLmNwcCcpLAor
ICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdncmFw
aGljcycsICdnc3RyZWFtZXInLCAnVGV4dENvbWJpbmVyUGFkR1N0cmVhbWVyLmgnKSwKICAgICAg
IG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAnZ3JhcGhpY3Mn
LCAnZ3N0cmVhbWVyJywgJ1ZpZGVvU2lua0dTdHJlYW1lci5jcHAnKSwKICAgICAgIG9zLnBhdGgu
am9pbignU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAnZ3JhcGhpY3MnLCAnZ3N0cmVh
bWVyJywgJ1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAnKSwKICAgICAgIG9zLnBhdGguam9p
bignU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAnZ3JhcGhpY3MnLCAnZ3N0cmVhbWVy
JywgJ1dlYktpdEF1ZGlvU2lua0dTdHJlYW1lci5jcHAnKSwK
</data>
<flag name="review"
          id="435367"
          type_id="1"
          status="+"
          setter="calvaris"
    />
    <flag name="commit-queue"
          id="435378"
          type_id="3"
          status="-"
          setter="calvaris"
    />
          </attachment>
      

    </bug>

</bugzilla>