<?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>6642</bug_id>
          
          <creation_ts>2006-01-17 21:56:51 -0800</creation_ts>
          <short_desc>Split XMLHttpRequest class into JS binding and implementation</short_desc>
          <delta_ts>2019-02-06 09:03:37 -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>DOM</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>cdumez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>28786</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-01-17 21:56:51 -0800</bug_when>
    <thetext>Split XMLHttpRequest class into JS binding and implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28790</commentid>
    <comment_count>1</comment_count>
      <attachid>5755</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-01-17 22:02:50 -0800</bug_when>
    <thetext>Created attachment 5755
first cut

A minimal patch that attempts no cleanup, to make it more readable
(ironically).

Which I don&apos;t like here is that the impl still has to know about the JS object
to gcProtect/gcUnprotect it while an async request is in progress. I couldn&apos;t
find a proper way to communicate this state back to the JS binding, and didn&apos;t
want to devise an ad-hoc broadcaster/listener scheme. OTOH, maybe the JS object
doesn&apos;t even need to be protected, and it&apos;s enough to bump the refcount of the
impl?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28793</commentid>
    <comment_count>2</comment_count>
      <attachid>5755</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-17 22:24:17 -0800</bug_when>
    <thetext>Comment on attachment 5755
first cut

Namespace should be WebCore::, not DOM:: for XMLHttpRequestImpl and everywhere.
DOM is now just a synonym for WebCore, and an obsolete one.

We&apos;re not going to use the &quot;Impl&quot; suffix any more going forward, so you should
omit it and name the class XMLHttpRequest.

xmlhttprequestimpl.h should be XMLHttpRequest.h (to match the class name) and
should not be in the WebCore/kjs/ecma directory. I suggest the WebCore/xml
directory (which wouldbe a new one).

Please leave the commented-out lines out altogether.

In the code for StatusText, I think you should just use jsStringOrNull. I think
it&apos;s OK for a null string to become a JavaScript null rather than undefined.
Same for GetAllResponseHeaders.

I&apos;d like to see the listeners move into the DOM too, but I can see that might
be tricky. In general this still leaves a number of things in the bindings that
we should get into the DOM.

Looks good, the right direction. This is going to be great!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28839</commentid>
    <comment_count>3</comment_count>
      <attachid>5760</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-01-18 12:23:17 -0800</bug_when>
    <thetext>Created attachment 5760
revised patch

- Renamed the namespace to WebCore.
- Removed commented-out lines.
- Moved KURL completion logic into the impl.
- (mostly) renamed the files. Kept xmlhttprequest.{h,cpp} in khtml/ecma to help
svn produce readable diffs; will move to WebCore/xml when that&apos;s no longer
needed.

Actually, I thought I have already moved listeners to the impl - or did I do it
incorrectly?

Later, I&apos;m going to investigate how Safari null/undefined/throw responses match
over browsers and specifications. So, I don&apos;t think that arbitrarily changing
the behavior would be appropriate in this patch.

I still dislike it that gcProtect/gcUnprotect are in the impl... Do we really
need to protect the JSXMLHttpRequest object?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28924</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-19 10:45:29 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Do we really need to protect the JSXMLHttpRequest object?

We don&apos;t. We just need to ref the underlying DOM object. It&apos;s just that gcProtect/gcUnprotect was the only 
way to do that when it wasn&apos;t a separate object. Now that it&apos;s separate, a simple ref/deref will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28926</commentid>
    <comment_count>5</comment_count>
      <attachid>5760</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-19 10:49:42 -0800</bug_when>
    <thetext>Comment on attachment 5760
revised patch

Not sure I like the &quot;JS&quot; naming here, since it&apos;s novel and doesn&apos;t match the
rest of the ecma directory. But perhaps it&apos;s forward looking and all of this is
temporary since we hope to auto-generate the files.

We need to eliminate that gcProtect/Unprotect as you suggested.

All the places that say DOM:: should be WebCore:: instead.

I really dislike the special case for undefiined. So if you want to be
conservative and use the behavior, how about making a jsStringOrUndefined
alongside jsStringOrNull? When we autogenerate headers we&apos;re going to need
syntax to say whether a 0 should change to a null or an undefined or an empty
string, which is annoying. I&apos;m hoping we won&apos;t ever need the undefined case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28930</commentid>
    <comment_count>6</comment_count>
      <attachid>5787</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-01-19 12:57:33 -0800</bug_when>
    <thetext>Created attachment 5787
revised patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28931</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-01-19 12:59:05 -0800</bug_when>
    <thetext>Yes, the JS prefix was suggested by MacDome as forward looking (Maciej also was there).

jsStringOrUndefined was already defined and used in kjs_events.cpp, I moved it to kjs_binding.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29285</commentid>
    <comment_count>8</comment_count>
      <attachid>5820</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-01-21 15:46:07 -0800</bug_when>
    <thetext>Created attachment 5820
revised patch

Maciej pointed out that the previous version changed the semantics of URL completion - it would complete the URL for open() against the document the XMLHttpRequest was created with instead of based on the currently executing frame. So, returned URL completion back to JSXMLHttpRequest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503005</commentid>
    <comment_count>9</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-02-06 09:03:37 -0800</bug_when>
    <thetext>Mass moving XML DOM bugs to the &quot;DOM&quot; Component.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5755</attachid>
            <date>2006-01-17 22:02:50 -0800</date>
            <delta_ts>2006-01-18 12:23:17 -0800</delta_ts>
            <desc>first cut</desc>
            <filename>SplitXMLHttpRequest.txt</filename>
            <type>text/plain</type>
            <size>57494</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUva2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdC5oCShyZXZpc2lvbiAxMjE1MSkKKysr
IFdlYkNvcmUva2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
LDcgKzIsNyBAQAogLyoKICAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmll
cwogICogIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLgotICogIENvcHly
aWdodCAoQykgMjAwNSBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CisgKiAgQ29w
eXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4K
ICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDM2ICsyMiwxNyBAQAogI2lmbmRlZiBYTUxIVFRQ
UkVRVUVTVF9IXwogI2RlZmluZSBYTUxIVFRQUkVRVUVTVF9IXwogCi0jaW5jbHVkZSAia2pzX2Rv
bS5oIgotI2luY2x1ZGUgPGt1cmwuaD4KLSNpbmNsdWRlIDxreG1sY29yZS9IYXNoU2V0Lmg+Ci0j
aW5jbHVkZSA8a3htbGNvcmUvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHFndWFyZGVkcHRyLmg+Ci0j
aW5jbHVkZSA8cW9iamVjdC5oPgorI2luY2x1ZGUgPGt4bWxjb3JlL1JlZlB0ci5oPgorI2luY2x1
ZGUgImtqc19iaW5kaW5nLmgiCiAKLW5hbWVzcGFjZSBraHRtbCB7Ci0gICAgY2xhc3MgRGVjb2Rl
cjsKLX0KK25hbWVzcGFjZSBET00geworICAgIGNsYXNzIFhNTEh0dHBSZXF1ZXN0SW1wbDsKKyAg
ICBjbGFzcyBEb2N1bWVudEltcGw7Cit9OwogCi1uYW1lc3BhY2UgS0lPIHsKLSAgICBjbGFzcyBK
b2I7Ci0gICAgY2xhc3MgVHJhbnNmZXJKb2I7Ci19CiAKIG5hbWVzcGFjZSBLSlMgewogCi0gIGNs
YXNzIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyOwotICBjbGFzcyBYTUxIdHRwUmVxdWVzdFFP
YmplY3Q7Ci0KLSAgLy8gdGhlc2UgZXhhY3QgbnVtZXJpYyB2YWx1ZXMgYXJlIGltcG9ydGFudCBi
ZWNhdXNlIEpTIGV4cGVjdHMgdGhlbQotICBlbnVtIFhNTEh0dHBSZXF1ZXN0U3RhdGUgewotICAg
IFVuaW5pdGlhbGl6ZWQgPSAwLCAgLy8gb3BlbigpIGhhcyBub3QgYmVlbiBjYWxsZWQgeWV0Ci0g
ICAgTG9hZGluZyA9IDEsICAgICAgICAvLyBzZW5kKCkgaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQK
LSAgICBMb2FkZWQgPSAyLCAgICAgICAgIC8vIHNlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGhlYWRl
cnMgYW5kIHN0YXR1cyBhcmUgYXZhaWxhYmxlCi0gICAgSW50ZXJhY3RpdmUgPSAzLCAgICAvLyBE
b3dubG9hZGluZywgcmVzcG9uc2VUZXh0IGhvbGRzIHRoZSBwYXJ0aWFsIGRhdGEKLSAgICBDb21w
bGV0ZWQgPSA0ICAgICAgIC8vIEZpbmlzaGVkIHdpdGggYWxsIG9wZXJhdGlvbnMKLSAgfTsKLQog
ICBjbGFzcyBYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wIDogcHVibGljIEpTT2JqZWN0IHsK
ICAgcHVibGljOgogICAgIFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXAoRXhlY1N0YXRlICpl
eGVjLCBET006OkRvY3VtZW50SW1wbCAqZCk7CkBAIC02Niw2ICs0NywxMiBAQAogICBwdWJsaWM6
CiAgICAgWE1MSHR0cFJlcXVlc3QoRXhlY1N0YXRlICosIERPTTo6RG9jdW1lbnRJbXBsICpkKTsK
ICAgICB+WE1MSHR0cFJlcXVlc3QoKTsKKyAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xh
c3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KKyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJ
bmZvIGluZm87CisgICAgZW51bSB7IE9ubG9hZCwgT25yZWFkeXN0YXRlY2hhbmdlLCBSZWFkeVN0
YXRlLCBSZXNwb25zZVRleHQsIFJlc3BvbnNlWE1MLCBTdGF0dXMsCisgICAgICAgIFN0YXR1c1Rl
eHQsIEFib3J0LCBHZXRBbGxSZXNwb25zZUhlYWRlcnMsIEdldFJlc3BvbnNlSGVhZGVyLCBPcGVu
LCBTZW5kLCBTZXRSZXF1ZXN0SGVhZGVyLAorICAgICAgICBPdmVycmlkZU1JTUVUeXBlIH07CisK
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgSlNWYWx1ZSAqZ2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHB1
dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgSlNWYWx1
ZSAqdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CkBAIC03Myw5MSArNjAsMTAgQEAKICAgICB2aXJ0
dWFsIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSAqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAg
ICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKIAotICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBj
bGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQotICAgIHN0YXRpYyBjb25zdCBDbGFz
c0luZm8gaW5mbzsKLSAgICBlbnVtIHsgT25sb2FkLCBPbnJlYWR5c3RhdGVjaGFuZ2UsIFJlYWR5
U3RhdGUsIFJlc3BvbnNlVGV4dCwgUmVzcG9uc2VYTUwsIFN0YXR1cywKLSAgICAgICAgU3RhdHVz
VGV4dCwgQWJvcnQsIEdldEFsbFJlc3BvbnNlSGVhZGVycywgR2V0UmVzcG9uc2VIZWFkZXIsIE9w
ZW4sIFNlbmQsIFNldFJlcXVlc3RIZWFkZXIsCi0gICAgICAgIE92ZXJyaWRlTUlNRVR5cGUgfTsK
LQotICAgIHN0YXRpYyB2b2lkIGNhbmNlbFJlcXVlc3RzKERPTTo6RG9jdW1lbnRJbXBsICpkKTsK
LQogICBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBYTUxIdHRwUmVxdWVzdFByb3RvRnVuYzsK
LSAgICBmcmllbmQgY2xhc3MgWE1MSHR0cFJlcXVlc3RRT2JqZWN0OwotCi0gICAgSlNWYWx1ZSAq
Z2V0U3RhdHVzVGV4dCgpIGNvbnN0OwotICAgIEpTVmFsdWUgKmdldFN0YXR1cygpIGNvbnN0Owot
ICAgIGJvb2wgdXJsTWF0Y2hlc0RvY3VtZW50RG9tYWluKGNvbnN0IEtVUkwmKSBjb25zdDsKLQot
ICAgIFhNTEh0dHBSZXF1ZXN0UU9iamVjdCAqcU9iamVjdDsKLQotICAgIHZvaWQgc2xvdERhdGEo
IEtJTzo6Sm9iKiBqb2IsIGNvbnN0IGNoYXIgKmRhdGEsIGludCBzaXplICk7Ci0gICAgdm9pZCBz
bG90RmluaXNoZWQoIEtJTzo6Sm9iKiApOwotICAgIHZvaWQgc2xvdFJlZGlyZWN0aW9uKCBLSU86
OkpvYiosIGNvbnN0IEtVUkwmICk7Ci0KLSAgICB2b2lkIHByb2Nlc3NTeW5jTG9hZFJlc3VsdHMo
Y29uc3QgQnl0ZUFycmF5ICZkYXRhLCBjb25zdCBLVVJMICZmaW5hbFVSTCwgY29uc3QgUVN0cmlu
ZyAmaGVhZGVycyk7Ci0KLSAgICB2b2lkIG9wZW4oY29uc3QgUVN0cmluZyYgX21ldGhvZCwgY29u
c3QgS1VSTCYgX3VybCwgYm9vbCBfYXN5bmMpOwotICAgIHZvaWQgc2VuZChjb25zdCBET006OkRP
TVN0cmluZyYgX2JvZHkpOwotICAgIHZvaWQgYWJvcnQoKTsKLSAgICB2b2lkIHNldFJlcXVlc3RI
ZWFkZXIoY29uc3QgUVN0cmluZyYgbmFtZSwgY29uc3QgUVN0cmluZyAmdmFsdWUpOwotICAgIFFT
dHJpbmcgZ2V0UmVxdWVzdEhlYWRlcihjb25zdCBRU3RyaW5nJiBuYW1lKSBjb25zdDsKLSAgICBK
U1ZhbHVlICpnZXRBbGxSZXNwb25zZUhlYWRlcnMoKSBjb25zdDsKLSAgICBRU3RyaW5nIGdldFJl
c3BvbnNlSGVhZGVyKGNvbnN0IFFTdHJpbmcmIG5hbWUpIGNvbnN0OwotICAgIGJvb2wgcmVzcG9u
c2VJc1hNTCgpIGNvbnN0OwotICAgIAotICAgIHN0YXRpYyBRU3RyaW5nIGdldFNwZWNpZmljSGVh
ZGVyKGNvbnN0IFFTdHJpbmcmIGhlYWRlcnMsIGNvbnN0IFFTdHJpbmcmIG5hbWUpOwotCi0gICAg
dm9pZCBjaGFuZ2VTdGF0ZShYTUxIdHRwUmVxdWVzdFN0YXRlIG5ld1N0YXRlKTsKLQotICAgIHR5
cGVkZWYgSGFzaFNldDxYTUxIdHRwUmVxdWVzdCosIFBvaW50ZXJIYXNoPFhNTEh0dHBSZXF1ZXN0
Kj4gPiBSZXF1ZXN0c1NldDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8RE9NOjpEb2N1bWVudEltcGwq
LCBSZXF1ZXN0c1NldCosIFBvaW50ZXJIYXNoPERPTTo6RG9jdW1lbnRJbXBsKj4gPiBSZXF1ZXN0
c01hcDsKLSAgICBzdGF0aWMgUmVxdWVzdHNNYXAgJnJlcXVlc3RzQnlEb2N1bWVudCgpOwotICAg
IHZvaWQgYWRkVG9SZXF1ZXN0c0J5RG9jdW1lbnQoKTsKLSAgICB2b2lkIHJlbW92ZUZyb21SZXF1
ZXN0c0J5RG9jdW1lbnQoKTsKLQotICAgIFFHdWFyZGVkUHRyPERPTTo6RG9jdW1lbnRJbXBsPiBk
b2M7Ci0KLSAgICBLVVJMIHVybDsKLSAgICBRU3RyaW5nIG1ldGhvZDsKLSAgICBib29sIGFzeW5j
OwotICAgIFFTdHJpbmcgcmVxdWVzdEhlYWRlcnM7Ci0KLSAgICBLSU86OlRyYW5zZmVySm9iICog
am9iOwotCi0gICAgWE1MSHR0cFJlcXVlc3RTdGF0ZSBzdGF0ZTsKLSAgICBSZWZQdHI8SlNVbnBy
b3RlY3RlZEV2ZW50TGlzdGVuZXI+IG9uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyOwotICAgIFJl
ZlB0cjxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcj4gb25Mb2FkTGlzdGVuZXI7Ci0KLSAgICBS
ZWZQdHI8a2h0bWw6OkRlY29kZXI+IGRlY29kZXI7Ci0gICAgUVN0cmluZyBlbmNvZGluZzsKLSAg
ICBRU3RyaW5nIHJlc3BvbnNlSGVhZGVyczsKLSAgICBRU3RyaW5nIE1JTUVUeXBlT3ZlcnJpZGU7
Ci0KLSAgICBRU3RyaW5nIHJlc3BvbnNlOwotICAgIG11dGFibGUgYm9vbCBjcmVhdGVkRG9jdW1l
bnQ7Ci0gICAgbXV0YWJsZSBib29sIHR5cGVJc1hNTDsKLSAgICBtdXRhYmxlIFJlZlB0cjxET006
OkRvY3VtZW50SW1wbD4gcmVzcG9uc2VYTUw7Ci0KLSAgICBib29sIGFib3J0ZWQ7CisgICAgUmVm
UHRyPERPTTo6WE1MSHR0cFJlcXVlc3RJbXBsPiBtX2ltcGw7CiAgIH07Ci0KLQotICBjbGFzcyBY
TUxIdHRwUmVxdWVzdFFPYmplY3QgOiBwdWJsaWMgUU9iamVjdCB7Ci0gICAgUV9PQkpFQ1QKLQot
ICBwdWJsaWM6Ci0gICAgWE1MSHR0cFJlcXVlc3RRT2JqZWN0KFhNTEh0dHBSZXF1ZXN0ICpfanNP
YmplY3QpOwotCi0gIHB1YmxpYyBzbG90czoKLSAgICB2b2lkIHNsb3REYXRhKCBLSU86OkpvYiog
am9iLCBjb25zdCBjaGFyICpkYXRhLCBpbnQgc2l6ZSApOwotICAgIHZvaWQgc2xvdEZpbmlzaGVk
KCBLSU86OkpvYiogam9iICk7Ci0gICAgdm9pZCBzbG90UmVkaXJlY3Rpb24oIEtJTzo6Sm9iKiBq
b2IsIGNvbnN0IEtVUkwmIHVybCk7Ci0KLSAgcHJpdmF0ZToKLSAgICBYTUxIdHRwUmVxdWVzdCAq
anNPYmplY3Q7Ci0gIH07Ci0KIH0gLy8gbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRleDogV2ViQ29y
ZS9raHRtbC9lY21hL3htbGh0dHByZXF1ZXN0aW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
a2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdGltcGwuaAkocmV2aXNpb24gMTIxNTEpCisrKyBXZWJD
b3JlL2todG1sL2VjbWEveG1saHR0cHJlcXVlc3RpbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTIs
NyArMiw3IEBACiAvKgogICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgbGlicmFyaWVz
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDA1IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDUsIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMTksMTEgKzE5LDExIEBACiAgKiAgRm91bmRhdGlvbiwg
SW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcg
IFVTQQogICovCiAKLSNpZm5kZWYgWE1MSFRUUFJFUVVFU1RfSF8KLSNkZWZpbmUgWE1MSFRUUFJF
UVVFU1RfSF8KKyNpZm5kZWYgWE1MSFRUUFJFUVVFU1RJTVBMX0hfCisjZGVmaW5lIFhNTEhUVFBS
RVFVRVNUSU1QTF9IXwogCi0jaW5jbHVkZSAia2pzX2RvbS5oIgogI2luY2x1ZGUgPGt1cmwuaD4K
KyNpbmNsdWRlIDxreG1sY29yZS9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8a3htbGNvcmUvSGFz
aFNldC5oPgogI2luY2x1ZGUgPGt4bWxjb3JlL0hhc2hNYXAuaD4KICNpbmNsdWRlIDxxZ3VhcmRl
ZHB0ci5oPgpAQCAtMzMsMTQgKzMzLDE5IEBACiAgICAgY2xhc3MgRGVjb2RlcjsKIH0KIAorbmFt
ZXNwYWNlIEtKUyB7CisgICAgY2xhc3MgSlNPYmplY3Q7Cit9OworCiBuYW1lc3BhY2UgS0lPIHsK
ICAgICBjbGFzcyBKb2I7CiAgICAgY2xhc3MgVHJhbnNmZXJKb2I7CiB9CiAKLW5hbWVzcGFjZSBL
SlMgeworbmFtZXNwYWNlIERPTSB7CiAKLSAgY2xhc3MgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVu
ZXI7CisgIGNsYXNzIERvY3VtZW50SW1wbDsKKyAgY2xhc3MgRXZlbnRMaXN0ZW5lcjsKICAgY2xh
c3MgWE1MSHR0cFJlcXVlc3RRT2JqZWN0OwogCiAgIC8vIHRoZXNlIGV4YWN0IG51bWVyaWMgdmFs
dWVzIGFyZSBpbXBvcnRhbnQgYmVjYXVzZSBKUyBleHBlY3RzIHRoZW0KQEAgLTUyLDQxICs1Nywz
NSBAQAogICAgIENvbXBsZXRlZCA9IDQgICAgICAgLy8gRmluaXNoZWQgd2l0aCBhbGwgb3BlcmF0
aW9ucwogICB9OwogCi0gIGNsYXNzIFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXAgOiBwdWJs
aWMgSlNPYmplY3QgeworICBjbGFzcyBYTUxIdHRwUmVxdWVzdEltcGwgOiBwdWJsaWMgU2hhcmVk
PFhNTEh0dHBSZXF1ZXN0SW1wbD4gewogICBwdWJsaWM6Ci0gICAgWE1MSHR0cFJlcXVlc3RDb25z
dHJ1Y3RvckltcChFeGVjU3RhdGUgKmV4ZWMsIERPTTo6RG9jdW1lbnRJbXBsICpkKTsKLSAgICB+
WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3RvckltcCgpOwotICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1l
bnRzQ29uc3RydWN0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBKU09iamVjdCAqY29uc3RydWN0KEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncyk7Ci0gIHByaXZhdGU6Ci0gICAgUmVmUHRy
PERPTTo6RG9jdW1lbnRJbXBsPiBkb2M7Ci0gIH07CisgICAgWE1MSHR0cFJlcXVlc3RJbXBsKERv
Y3VtZW50SW1wbCogZCwgS0pTOjpKU09iamVjdCogb3duZXIgPSAwKTsKKyAgICB+WE1MSHR0cFJl
cXVlc3RJbXBsKCk7CiAKLSAgY2xhc3MgWE1MSHR0cFJlcXVlc3QgOiBwdWJsaWMgRE9NT2JqZWN0
IHsKLSAgcHVibGljOgotICAgIFhNTEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSAqLCBET006OkRvY3Vt
ZW50SW1wbCAqZCk7Ci0gICAgflhNTEh0dHBSZXF1ZXN0KCk7Ci0gICAgdmlydHVhbCBib29sIGdl
dE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5
U2xvdCYpOwotICAgIEpTVmFsdWUgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgKnZhbHVlLCBpbnQgYXR0ciA9
IE5vbmUpOwotICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgSlNWYWx1ZSAqdmFsdWUsIGludCAvKmF0dHIqLyk7Ci0gICAgdmlydHVhbCBib29sIHRv
Qm9vbGVhbihFeGVjU3RhdGUgKikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwg
dm9pZCBtYXJrKCk7CisgICAgc3RhdGljIHZvaWQgY2FuY2VsUmVxdWVzdHMoRG9jdW1lbnRJbXBs
ICpkKTsKIAotICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7
IHJldHVybiAmaW5mbzsgfQotICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKLSAgICBl
bnVtIHsgT25sb2FkLCBPbnJlYWR5c3RhdGVjaGFuZ2UsIFJlYWR5U3RhdGUsIFJlc3BvbnNlVGV4
dCwgUmVzcG9uc2VYTUwsIFN0YXR1cywKLSAgICAgICAgU3RhdHVzVGV4dCwgQWJvcnQsIEdldEFs
bFJlc3BvbnNlSGVhZGVycywgR2V0UmVzcG9uc2VIZWFkZXIsIE9wZW4sIFNlbmQsIFNldFJlcXVl
c3RIZWFkZXIsCi0gICAgICAgIE92ZXJyaWRlTUlNRVR5cGUgfTsKKyAgICBET01TdHJpbmcgZ2V0
U3RhdHVzVGV4dCgpIGNvbnN0OworICAgIGludCBnZXRTdGF0dXMoKSBjb25zdDsKKyAgICBYTUxI
dHRwUmVxdWVzdFN0YXRlIGdldFJlYWR5U3RhdGUoKSBjb25zdDsKKyAgICB2b2lkIG9wZW4oY29u
c3QgRE9NU3RyaW5nJiBfbWV0aG9kLCBjb25zdCBLVVJMJiBfdXJsLCBib29sIF9hc3luYyk7Cisg
ICAgdm9pZCBzZW5kKGNvbnN0IERPTTo6RE9NU3RyaW5nJiBfYm9keSk7CisgICAgdm9pZCBhYm9y
dCgpOworICAgIHZvaWQgc2V0UmVxdWVzdEhlYWRlcihjb25zdCBET01TdHJpbmcmIG5hbWUsIGNv
bnN0IERPTVN0cmluZyAmdmFsdWUpOworICAgIHZvaWQgb3ZlcnJpZGVNSU1FVHlwZShjb25zdCBE
T01TdHJpbmcmIG92ZXJyaWRlKTsKKyAgICBET01TdHJpbmcgZ2V0QWxsUmVzcG9uc2VIZWFkZXJz
KCkgY29uc3Q7CisgICAgRE9NU3RyaW5nIGdldFJlc3BvbnNlSGVhZGVyKGNvbnN0IERPTVN0cmlu
ZyYgbmFtZSkgY29uc3Q7CisgICAgRE9NU3RyaW5nIGdldFJlc3BvbnNlVGV4dCgpIGNvbnN0Owor
ICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRJbXBsPiBnZXRSZXNwb25zZVhNTCgpIGNvbnN0OwogCi0g
ICAgc3RhdGljIHZvaWQgY2FuY2VsUmVxdWVzdHMoRE9NOjpEb2N1bWVudEltcGwgKmQpOworICAg
IHZvaWQgc2V0T25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIoRXZlbnRMaXN0ZW5lciogZXZlbnRM
aXN0ZW5lcik7CisgICAgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBnZXRPblJlYWR5U3RhdGVD
aGFuZ2VMaXN0ZW5lcigpIGNvbnN0OworICAgIHZvaWQgc2V0T25Mb2FkTGlzdGVuZXIoRXZlbnRM
aXN0ZW5lciogZXZlbnRMaXN0ZW5lcik7CisgICAgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBn
ZXRPbkxvYWRMaXN0ZW5lcigpIGNvbnN0OwogCiAgIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IFhNTEh0dHBSZXF1ZXN0UHJvdG9GdW5jOwogICAgIGZyaWVuZCBjbGFzcyBYTUxIdHRwUmVxdWVz
dFFPYmplY3Q7CiAKLSAgICBKU1ZhbHVlICpnZXRTdGF0dXNUZXh0KCkgY29uc3Q7Ci0gICAgSlNW
YWx1ZSAqZ2V0U3RhdHVzKCkgY29uc3Q7CiAgICAgYm9vbCB1cmxNYXRjaGVzRG9jdW1lbnREb21h
aW4oY29uc3QgS1VSTCYpIGNvbnN0OwogCiAgICAgWE1MSHR0cFJlcXVlc3RRT2JqZWN0ICpxT2Jq
ZWN0OwpAQCAtOTcsMjYgKzk2LDIzIEBACiAKICAgICB2b2lkIHByb2Nlc3NTeW5jTG9hZFJlc3Vs
dHMoY29uc3QgQnl0ZUFycmF5ICZkYXRhLCBjb25zdCBLVVJMICZmaW5hbFVSTCwgY29uc3QgUVN0
cmluZyAmaGVhZGVycyk7CiAKLSAgICB2b2lkIG9wZW4oY29uc3QgUVN0cmluZyYgX21ldGhvZCwg
Y29uc3QgS1VSTCYgX3VybCwgYm9vbCBfYXN5bmMpOwotICAgIHZvaWQgc2VuZChjb25zdCBET006
OkRPTVN0cmluZyYgX2JvZHkpOwotICAgIHZvaWQgYWJvcnQoKTsKLSAgICB2b2lkIHNldFJlcXVl
c3RIZWFkZXIoY29uc3QgUVN0cmluZyYgbmFtZSwgY29uc3QgUVN0cmluZyAmdmFsdWUpOwotICAg
IFFTdHJpbmcgZ2V0UmVxdWVzdEhlYWRlcihjb25zdCBRU3RyaW5nJiBuYW1lKSBjb25zdDsKLSAg
ICBKU1ZhbHVlICpnZXRBbGxSZXNwb25zZUhlYWRlcnMoKSBjb25zdDsKLSAgICBRU3RyaW5nIGdl
dFJlc3BvbnNlSGVhZGVyKGNvbnN0IFFTdHJpbmcmIG5hbWUpIGNvbnN0OwogICAgIGJvb2wgcmVz
cG9uc2VJc1hNTCgpIGNvbnN0OwogICAgIAorICAgIFFTdHJpbmcgZ2V0UmVxdWVzdEhlYWRlcihj
b25zdCBRU3RyaW5nJiBuYW1lKSBjb25zdDsKICAgICBzdGF0aWMgUVN0cmluZyBnZXRTcGVjaWZp
Y0hlYWRlcihjb25zdCBRU3RyaW5nJiBoZWFkZXJzLCBjb25zdCBRU3RyaW5nJiBuYW1lKTsKIAog
ICAgIHZvaWQgY2hhbmdlU3RhdGUoWE1MSHR0cFJlcXVlc3RTdGF0ZSBuZXdTdGF0ZSk7CiAKLSAg
ICB0eXBlZGVmIEhhc2hTZXQ8WE1MSHR0cFJlcXVlc3QqLCBQb2ludGVySGFzaDxYTUxIdHRwUmVx
dWVzdCo+ID4gUmVxdWVzdHNTZXQ7CisgICAgdHlwZWRlZiBIYXNoU2V0PFhNTEh0dHBSZXF1ZXN0
SW1wbCosIFBvaW50ZXJIYXNoPFhNTEh0dHBSZXF1ZXN0SW1wbCo+ID4gUmVxdWVzdHNTZXQ7CiAg
ICAgdHlwZWRlZiBIYXNoTWFwPERPTTo6RG9jdW1lbnRJbXBsKiwgUmVxdWVzdHNTZXQqLCBQb2lu
dGVySGFzaDxET006OkRvY3VtZW50SW1wbCo+ID4gUmVxdWVzdHNNYXA7CiAgICAgc3RhdGljIFJl
cXVlc3RzTWFwICZyZXF1ZXN0c0J5RG9jdW1lbnQoKTsKICAgICB2b2lkIGFkZFRvUmVxdWVzdHNC
eURvY3VtZW50KCk7CiAgICAgdm9pZCByZW1vdmVGcm9tUmVxdWVzdHNCeURvY3VtZW50KCk7CiAK
KyAgICBLSlM6OkpTT2JqZWN0KiBvd25lcjsKICAgICBRR3VhcmRlZFB0cjxET006OkRvY3VtZW50
SW1wbD4gZG9jOworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBvblJlYWR5U3RhdGVDaGFuZ2VM
aXN0ZW5lcjsKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gb25Mb2FkTGlzdGVuZXI7CiAKICAg
ICBLVVJMIHVybDsKICAgICBRU3RyaW5nIG1ldGhvZDsKQEAgLTEyNiw4ICsxMjIsNiBAQAogICAg
IEtJTzo6VHJhbnNmZXJKb2IgKiBqb2I7CiAKICAgICBYTUxIdHRwUmVxdWVzdFN0YXRlIHN0YXRl
OwotICAgIFJlZlB0cjxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcj4gb25SZWFkeVN0YXRlQ2hh
bmdlTGlzdGVuZXI7Ci0gICAgUmVmUHRyPEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyPiBvbkxv
YWRMaXN0ZW5lcjsKIAogICAgIFJlZlB0cjxraHRtbDo6RGVjb2Rlcj4gZGVjb2RlcjsKICAgICBR
U3RyaW5nIGVuY29kaW5nOwpAQCAtMTQ3LDcgKzE0MSw3IEBACiAgICAgUV9PQkpFQ1QKIAogICBw
dWJsaWM6Ci0gICAgWE1MSHR0cFJlcXVlc3RRT2JqZWN0KFhNTEh0dHBSZXF1ZXN0ICpfanNPYmpl
Y3QpOworICAgIFhNTEh0dHBSZXF1ZXN0UU9iamVjdChYTUxIdHRwUmVxdWVzdEltcGwgKl9qc09i
amVjdCk7CiAKICAgcHVibGljIHNsb3RzOgogICAgIHZvaWQgc2xvdERhdGEoIEtJTzo6Sm9iKiBq
b2IsIGNvbnN0IGNoYXIgKmRhdGEsIGludCBzaXplICk7CkBAIC0xNTUsNyArMTQ5LDcgQEAKICAg
ICB2b2lkIHNsb3RSZWRpcmVjdGlvbiggS0lPOjpKb2IqIGpvYiwgY29uc3QgS1VSTCYgdXJsKTsK
IAogICBwcml2YXRlOgotICAgIFhNTEh0dHBSZXF1ZXN0ICpqc09iamVjdDsKKyAgICBYTUxIdHRw
UmVxdWVzdEltcGwgKmpzT2JqZWN0OwogICB9OwogCiB9IC8vIG5hbWVzcGFjZQpJbmRleDogV2Vi
Q29yZS9raHRtbC9lY21hL3htbGh0dHByZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2todG1sL2VjbWEveG1saHR0cHJlcXVlc3QuY3BwCShyZXZpc2lvbiAxMjE1MSkKKysrIFdlYkNv
cmUva2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyAr
MSw3IEBACiAvKgogICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgbGlicmFyaWVzCiAg
KiAgQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDA1IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDUsIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgogICoK
ICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsNzkgKzIwLDI0IEBACiAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJ4bWxodHRwcmVxdWVzdC5oIgorI2luY2x1ZGUgInhtbGh0dHByZXF1ZXN0
aW1wbC5oIgogCiAjaW5jbHVkZSAia2pzX3dpbmRvdy5oIgogI2luY2x1ZGUgImtqc19ldmVudHMu
aCIKIAotI2luY2x1ZGUgImRvbS9kb21fZXhjZXB0aW9uLmgiCisvLyNpbmNsdWRlICJkb20vZG9t
X2V4Y2VwdGlvbi5oIgogI2luY2x1ZGUgImRvbS9kb21fc3RyaW5nLmgiCi0jaW5jbHVkZSAiQ2Fj
aGUuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCi0jaW5jbHVkZSAieG1s
L2RvbTJfZXZlbnRzaW1wbC5oIgotI2luY2x1ZGUgInhtbC9FdmVudE5hbWVzLmgiCi0jaW5jbHVk
ZSAiRE9NSW1wbGVtZW50YXRpb25JbXBsLmgiCi0KKy8vI2luY2x1ZGUgInhtbC9kb20yX2V2ZW50
c2ltcGwuaCIKKy8vI2luY2x1ZGUgInhtbC9FdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUu
aCIKIAotI2luY2x1ZGUgPGtkZWJ1Zy5oPgotI2luY2x1ZGUgPGtpby9qb2IuaD4KLSNpbmNsdWRl
IDxxb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cXJlZ2V4cC5oPgotI2luY2x1ZGUgPHF0ZXh0Y29kZWMu
aD4KLQotI2luY2x1ZGUgIktXUUxvYWRlci5oIgotCiAjaW5jbHVkZSAieG1saHR0cHJlcXVlc3Qu
bHV0LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBET007Ci11c2luZyBuYW1lc3BhY2UgRE9NOjpFdmVu
dE5hbWVzOworLy91c2luZyBuYW1lc3BhY2UgRE9NOjpFdmVudE5hbWVzOwogCi11c2luZyBraHRt
bDo6RGVjb2RlcjsKIAotc3RhdGljIGlubGluZSBRU3RyaW5nIGdldE1JTUVUeXBlKGNvbnN0IFFT
dHJpbmcmIGNvbnRlbnRUeXBlU3RyaW5nKQotewotICAgIHJldHVybiBRU3RyaW5nTGlzdDo6c3Bs
aXQoIjsiLCBjb250ZW50VHlwZVN0cmluZywgdHJ1ZSlbMF0uc3RyaXBXaGl0ZVNwYWNlKCk7Ci19
Ci0KLXN0YXRpYyBRU3RyaW5nIGdldENoYXJzZXQoY29uc3QgUVN0cmluZyYgY29udGVudFR5cGVT
dHJpbmcpCi17Ci0gICAgaW50IHBvcyA9IDA7Ci0gICAgaW50IGxlbmd0aCA9IChpbnQpY29udGVu
dFR5cGVTdHJpbmcubGVuZ3RoKCk7Ci0gICAgCi0gICAgd2hpbGUgKHBvcyA8IGxlbmd0aCkgewot
ICAgICAgICBwb3MgPSBjb250ZW50VHlwZVN0cmluZy5maW5kKCJjaGFyc2V0IiwgcG9zLCBmYWxz
ZSk7Ci0gICAgICAgIGlmIChwb3MgPD0gMCkKLSAgICAgICAgICAgIHJldHVybiBRU3RyaW5nKCk7
Ci0gICAgICAgIAotICAgICAgICAvLyBpcyB3aGF0IHdlIGZvdW5kIGEgYmVnaW5uaW5nIG9mIGEg
d29yZD8KLSAgICAgICAgaWYgKGNvbnRlbnRUeXBlU3RyaW5nW3Bvcy0xXSA+ICcgJyAmJiBjb250
ZW50VHlwZVN0cmluZ1twb3MtMV0gIT0gJzsnKSB7Ci0gICAgICAgICAgICBwb3MgKz0gNzsKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwb3MgKz0g
NzsKLQotICAgICAgICAvLyBza2lwIHdoaXRlc3BhY2UKLSAgICAgICAgd2hpbGUgKHBvcyAhPSBs
ZW5ndGggJiYgY29udGVudFR5cGVTdHJpbmdbcG9zXSA8PSAnICcpCi0gICAgICAgICAgICArK3Bv
czsKLSAgICAKLSAgICAgICAgaWYgKGNvbnRlbnRUeXBlU3RyaW5nW3BvcysrXSAhPSAnPScpIC8v
IHRoaXMgImNoYXJzZXQiIHN1YnN0cmluZyB3YXNuJ3QgYSBwYXJhbWV0ZXIgbmFtZSwgYnV0IHRo
ZXJlIG1heSBiZSBvdGhlcnMKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHdoaWxl
IChwb3MgIT0gbGVuZ3RoICYmIChjb250ZW50VHlwZVN0cmluZ1twb3NdIDw9ICcgJyB8fCBjb250
ZW50VHlwZVN0cmluZ1twb3NdID09ICciJyB8fCBjb250ZW50VHlwZVN0cmluZ1twb3NdID09ICdc
JycpKQotICAgICAgICAgICAgKytwb3M7Ci0KLSAgICAgICAgLy8gd2UgZG9uJ3QgaGFuZGxlIHNw
YWNlcyB3aXRoaW4gcXVvdGVkIHBhcmFtZXRlciB2YWx1ZXMsIGJlY2F1c2UgY2hhcnNldCBuYW1l
cyBjYW5ub3QgaGF2ZSBhbnkKLSAgICAgICAgaW50IGVuZHBvcyA9IHBvczsKLSAgICAgICAgd2hp
bGUgKHBvcyAhPSBsZW5ndGggJiYgY29udGVudFR5cGVTdHJpbmdbZW5kcG9zXSA+ICcgJyAmJiBj
b250ZW50VHlwZVN0cmluZ1tlbmRwb3NdICE9ICciJyAmJiBjb250ZW50VHlwZVN0cmluZ1tlbmRw
b3NdICE9ICdcJycgJiYgY29udGVudFR5cGVTdHJpbmdbZW5kcG9zXSAhPSAnOycpCi0gICAgICAg
ICAgICArK2VuZHBvczsKLSAgICAKLSAgICAgICAgcmV0dXJuIGNvbnRlbnRUeXBlU3RyaW5nLm1p
ZChwb3MsIGVuZHBvcy1wb3MpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gUVN0cmluZygpOwot
fQotCiBuYW1lc3BhY2UgS0pTIHsKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBYTUxIdHRwUmVx
dWVzdCBPYmplY3QgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkBAIC0xMTIsMjYgKzU3LDcgQEAK
IEtKU19JTVBMRU1FTlRfUFJPVE9GVU5DKFhNTEh0dHBSZXF1ZXN0UHJvdG9GdW5jKQogS0pTX0lN
UExFTUVOVF9QUk9UT1RZUEUoIlhNTEh0dHBSZXF1ZXN0IixYTUxIdHRwUmVxdWVzdFByb3RvLFhN
TEh0dHBSZXF1ZXN0UHJvdG9GdW5jKQogCi1YTUxIdHRwUmVxdWVzdFFPYmplY3Q6OlhNTEh0dHBS
ZXF1ZXN0UU9iamVjdChYTUxIdHRwUmVxdWVzdCAqX2pzT2JqZWN0KSAKLXsKLSAganNPYmplY3Qg
PSBfanNPYmplY3Q7IAotfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0UU9iamVjdDo6c2xvdERhdGEo
IEtJTzo6Sm9iKiBqb2IsIGNvbnN0IGNoYXIgKmRhdGEsIGludCBzaXplICkKLXsKLSAganNPYmpl
Y3QtPnNsb3REYXRhKGpvYiwgZGF0YSwgc2l6ZSk7Ci19Ci0KLXZvaWQgWE1MSHR0cFJlcXVlc3RR
T2JqZWN0OjpzbG90RmluaXNoZWQoIEtJTzo6Sm9iKiBqb2IgKQotewotICBqc09iamVjdC0+c2xv
dEZpbmlzaGVkKGpvYik7IAotfQotCi12b2lkIFhNTEh0dHBSZXF1ZXN0UU9iamVjdDo6c2xvdFJl
ZGlyZWN0aW9uKCBLSU86OkpvYiogam9iLCBjb25zdCBLVVJMJiB1cmwpCi17IAotICBqc09iamVj
dC0+c2xvdFJlZGlyZWN0aW9uKCBqb2IsIHVybCApOyAKLX0KLQogWE1MSHR0cFJlcXVlc3RDb25z
dHJ1Y3RvckltcDo6WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3RvckltcChFeGVjU3RhdGUgKmV4ZWMs
IERPTTo6RG9jdW1lbnRJbXBsICpkKQogICAgIDogZG9jKGQpCiB7CkBAIC0xNzUsNTEgKzEwMSw0
NCBAQAogewogICBzd2l0Y2ggKHRva2VuKSB7CiAgIGNhc2UgUmVhZHlTdGF0ZToKLSAgICByZXR1
cm4ganNOdW1iZXIoc3RhdGUpOworICAgIHJldHVybiBqc051bWJlcihtX2ltcGwtPmdldFJlYWR5
U3RhdGUoKSk7CiAgIGNhc2UgUmVzcG9uc2VUZXh0OgotICAgIHJldHVybiBqc1N0cmluZ09yTnVs
bChET006OkRPTVN0cmluZyhyZXNwb25zZSkpOwotICBjYXNlIFJlc3BvbnNlWE1MOgotICAgIGlm
IChzdGF0ZSAhPSBDb21wbGV0ZWQpIHsKKyAgICByZXR1cm4ganNTdHJpbmdPck51bGwobV9pbXBs
LT5nZXRSZXNwb25zZVRleHQoKSk7CisgIGNhc2UgUmVzcG9uc2VYTUw6IHsKKyAgICBSZWZQdHI8
RG9jdW1lbnRJbXBsPiByZXNwb25zZVhNTCA9IG1faW1wbC0+Z2V0UmVzcG9uc2VYTUwoKTsKKyAg
ICBpZiAocmVzcG9uc2VYTUwuZ2V0KCkpCisgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBy
ZXNwb25zZVhNTC5nZXQoKSk7CisgICAgZWxzZQogICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gICAgfQotCi0gICAgaWYgKCFjcmVhdGVkRG9jdW1lbnQpIHsKLSAgICAgIGlmICh0eXBlSXNY
TUwgPSByZXNwb25zZUlzWE1MKCkpIHsKLSAgICAgICAgcmVzcG9uc2VYTUwgPSBkb2MtPmltcGxl
bWVudGF0aW9uKCktPmNyZWF0ZURvY3VtZW50KCk7Ci0KLSAgICAgICAgRG9jdW1lbnRJbXBsICpk
b2NJbXBsID0gcmVzcG9uc2VYTUwuZ2V0KCk7Ci0gICAgICAgIAotICAgICAgICBkb2NJbXBsLT5v
cGVuKCk7Ci0gICAgICAgIGRvY0ltcGwtPndyaXRlKHJlc3BvbnNlKTsKLSAgICAgICAgZG9jSW1w
bC0+ZmluaXNoUGFyc2luZygpOwotICAgICAgICBkb2NJbXBsLT5jbG9zZSgpOwotICAgICAgfQot
ICAgICAgY3JlYXRlZERvY3VtZW50ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIXR5cGVJc1hN
TCkgewotICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGdl
dERPTU5vZGUoZXhlYywgcmVzcG9uc2VYTUwuZ2V0KCkpOworICB9CiAgIGNhc2UgU3RhdHVzOgot
ICAgIHJldHVybiBnZXRTdGF0dXMoKTsKLSAgY2FzZSBTdGF0dXNUZXh0OgotICAgIHJldHVybiBn
ZXRTdGF0dXNUZXh0KCk7CisgICAgaW50IHN0YXR1cyA9IG1faW1wbC0+Z2V0U3RhdHVzKCk7Cisg
ICAgcmV0dXJuIHN0YXR1cyA+IDAgPyBqc051bWJlcihzdGF0dXMpIDoganNVbmRlZmluZWQoKTsK
KyAgY2FzZSBTdGF0dXNUZXh0OiB7CisgICAgRE9NU3RyaW5nIHN0YXR1c1RleHQgPSBtX2ltcGwt
PmdldFN0YXR1c1RleHQoKTsKKyAgICBpZiAoIXN0YXR1c1RleHQuaXNOdWxsKCkpCisgICAgICBy
ZXR1cm4ganNTdHJpbmcoc3RhdHVzVGV4dCk7CisgICAgZWxzZQorICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgIH0KICAgY2FzZSBPbnJlYWR5c3RhdGVjaGFuZ2U6Ci0gICBpZiAob25SZWFk
eVN0YXRlQ2hhbmdlTGlzdGVuZXIgJiYgb25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXItPmxpc3Rl
bmVyT2JqKCkpIHsKLSAgICAgcmV0dXJuIG9uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyLT5saXN0
ZW5lck9iaigpOwotICAgfSBlbHNlIHsKLSAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgSlNVbnBy
b3RlY3RlZEV2ZW50TGlzdGVuZXIqIG9uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyID0gc3RhdGlj
X2Nhc3Q8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqPihtX2ltcGwtPmdldE9uUmVhZHlTdGF0
ZUNoYW5nZUxpc3RlbmVyKCkuZ2V0KCkpOworICAgaWYgKG9uUmVhZHlTdGF0ZUNoYW5nZUxpc3Rl
bmVyKSB7CisgICAgICBKU09iamVjdCogbGlzdGVuZXJPYmogPSBvblJlYWR5U3RhdGVDaGFuZ2VM
aXN0ZW5lci0+bGlzdGVuZXJPYmooKTsKKyAgICAgIGlmIChsaXN0ZW5lck9iaikKKyAgICAgICAg
cmV0dXJuIGxpc3RlbmVyT2JqOwogICAgfQorICAgcmV0dXJuIGpzTnVsbCgpOwogICBjYXNlIE9u
bG9hZDoKLSAgIGlmIChvbkxvYWRMaXN0ZW5lciAmJiBvbkxvYWRMaXN0ZW5lci0+bGlzdGVuZXJP
YmooKSkgewotICAgICByZXR1cm4gb25Mb2FkTGlzdGVuZXItPmxpc3RlbmVyT2JqKCk7Ci0gICB9
IGVsc2UgewotICAgICByZXR1cm4ganNOdWxsKCk7CisgICBKU1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lciogb25Mb2FkTGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxKU1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lcio+KG1faW1wbC0+Z2V0T25Mb2FkTGlzdGVuZXIoKS5nZXQoKSk7CisgICBpZiAob25Mb2Fk
TGlzdGVuZXIpIHsKKyAgICAgIEpTT2JqZWN0KiBsaXN0ZW5lck9iaiA9IG9uTG9hZExpc3RlbmVy
LT5saXN0ZW5lck9iaigpOworICAgICAgaWYgKGxpc3RlbmVyT2JqKQorICAgICAgICByZXR1cm4g
bGlzdGVuZXJPYmo7CiAgICB9CisgICByZXR1cm4ganNOdWxsKCk7CiAgIGRlZmF1bHQ6Ci0gICAg
a2RXYXJuaW5nKCkgPDwgIlhNTEh0dHBSZXF1ZXN0OjpnZXRWYWx1ZVByb3BlcnR5IHVuaGFuZGxl
ZCB0b2tlbiAiIDw8IHRva2VuIDw8IGVuZGw7CisvLyAgICBrZFdhcm5pbmcoKSA8PCAiWE1MSHR0
cFJlcXVlc3Q6OmdldFZhbHVlUHJvcGVydHkgdW5oYW5kbGVkIHRva2VuICIgPDwgdG9rZW4gPDwg
ZW5kbDsKICAgICByZXR1cm4gTlVMTDsKICAgfQogfQpAQCAtMjMzLDEzICsxNTIsMTQgQEAKIHsK
ICAgc3dpdGNoKHRva2VuKSB7CiAgIGNhc2UgT25yZWFkeXN0YXRlY2hhbmdlOgotICAgIG9uUmVh
ZHlTdGF0ZUNoYW5nZUxpc3RlbmVyID0gV2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+Z2V0
SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIodmFsdWUsIHRydWUpOworICAgIG1faW1wbC0+c2V0
T25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIoV2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+
Z2V0SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIodmFsdWUsIHRydWUpKTsKICAgICBicmVhazsK
ICAgY2FzZSBPbmxvYWQ6Ci0gICAgb25Mb2FkTGlzdGVuZXIgPSBXaW5kb3c6OnJldHJpZXZlQWN0
aXZlKGV4ZWMpLT5nZXRKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcih2YWx1ZSwgdHJ1ZSk7Cisg
ICAgbV9pbXBsLT5zZXRPbkxvYWRMaXN0ZW5lcihXaW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMp
LT5nZXRKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcih2YWx1ZSwgdHJ1ZSkpOwogICAgIGJyZWFr
OwogICBkZWZhdWx0OgotICAgIGtkV2FybmluZygpIDw8ICJIVE1MRG9jdW1lbnQ6OnB1dFZhbHVl
UHJvcGVydHkgdW5oYW5kbGVkIHRva2VuICIgPDwgdG9rZW4gPDwgZW5kbDsKKyAgICAgIDsKKy8v
ICAgIGtkV2FybmluZygpIDw8ICJIVE1MRG9jdW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkgdW5oYW5k
bGVkIHRva2VuICIgPDwgdG9rZW4gPDwgZW5kbDsKICAgfQogfQogCkBAIC0yNDcsNiArMTY3LDkg
QEAKIHsKICAgRE9NT2JqZWN0OjptYXJrKCk7CiAKKyAgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVu
ZXIqIG9uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8SlNVbnByb3RlY3Rl
ZEV2ZW50TGlzdGVuZXIqPihtX2ltcGwtPmdldE9uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyKCku
Z2V0KCkpOworICBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogb25Mb2FkTGlzdGVuZXIgPSBz
dGF0aWNfY2FzdDxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcio+KG1faW1wbC0+Z2V0T25Mb2Fk
TGlzdGVuZXIoKS5nZXQoKSk7CisKICAgaWYgKG9uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyKQog
ICAgIG9uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyLT5tYXJrKCk7CiAKQEAgLTI1Niw0MzAgKzE3
OSwxNSBAQAogCiAKIFhNTEh0dHBSZXF1ZXN0OjpYTUxIdHRwUmVxdWVzdChFeGVjU3RhdGUgKmV4
ZWMsIERPTTo6RG9jdW1lbnRJbXBsICpkKQotICA6IHFPYmplY3QobmV3IFhNTEh0dHBSZXF1ZXN0
UU9iamVjdCh0aGlzKSksCi0gICAgZG9jKGQpLAotICAgIGFzeW5jKHRydWUpLAotICAgIGpvYigw
KSwKLSAgICBzdGF0ZShVbmluaXRpYWxpemVkKSwKLSAgICBjcmVhdGVkRG9jdW1lbnQoZmFsc2Up
LAotICAgIGFib3J0ZWQoZmFsc2UpCisgIDogbV9pbXBsKG5ldyBYTUxIdHRwUmVxdWVzdEltcGwo
ZCwgdGhpcykpCiB7CiAgIHNldFByb3RvdHlwZShYTUxIdHRwUmVxdWVzdFByb3RvOjpzZWxmKGV4
ZWMpKTsKIH0KIAogWE1MSHR0cFJlcXVlc3Q6On5YTUxIdHRwUmVxdWVzdCgpCiB7Ci0gICAgZGVs
ZXRlIHFPYmplY3Q7CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OmNoYW5nZVN0YXRlKFhNTEh0
dHBSZXF1ZXN0U3RhdGUgbmV3U3RhdGUpCi17Ci0gIGlmIChzdGF0ZSAhPSBuZXdTdGF0ZSkgewot
ICAgIHN0YXRlID0gbmV3U3RhdGU7Ci0gICAgCi0gICAgaWYgKGRvYyAmJiBkb2MtPmZyYW1lKCkg
JiYgb25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIpIHsKLSAgICAgIGludCBpZ25vcmVFeGNlcHRp
b247Ci0gICAgICBSZWZQdHI8RXZlbnRJbXBsPiBldiA9IGRvYy0+Y3JlYXRlRXZlbnQoIkhUTUxF
dmVudHMiLCBpZ25vcmVFeGNlcHRpb24pOwotICAgICAgZXYtPmluaXRFdmVudChyZWFkeXN0YXRl
Y2hhbmdlRXZlbnQsIHRydWUsIHRydWUpOwotICAgICAgb25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVu
ZXItPmhhbmRsZUV2ZW50SW1wbChldi5nZXQoKSwgdHJ1ZSk7Ci0gICAgfQotICAgIAotICAgIGlm
IChkb2MgJiYgZG9jLT5mcmFtZSgpICYmIHN0YXRlID09IENvbXBsZXRlZCAmJiBvbkxvYWRMaXN0
ZW5lcikgewotICAgICAgaW50IGlnbm9yZUV4Y2VwdGlvbjsKLSAgICAgIFJlZlB0cjxFdmVudElt
cGw+IGV2ID0gZG9jLT5jcmVhdGVFdmVudCgiSFRNTEV2ZW50cyIsIGlnbm9yZUV4Y2VwdGlvbik7
Ci0gICAgICBldi0+aW5pdEV2ZW50KGxvYWRFdmVudCwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgICBvbkxv
YWRMaXN0ZW5lci0+aGFuZGxlRXZlbnRJbXBsKGV2LmdldCgpLCB0cnVlKTsKLSAgICB9Ci0gIH0K
LX0KLQotYm9vbCBYTUxIdHRwUmVxdWVzdDo6dXJsTWF0Y2hlc0RvY3VtZW50RG9tYWluKGNvbnN0
IEtVUkwmIF91cmwpIGNvbnN0Ci17Ci0gIEtVUkwgZG9jdW1lbnRVUkwoZG9jLT5VUkwoKSk7Ci0K
LSAgLy8gYSBsb2NhbCBmaWxlIGNhbiBsb2FkIGFueXRoaW5nCi0gIGlmIChkb2N1bWVudFVSTC5w
cm90b2NvbCgpLmxvd2VyKCkgPT0gImZpbGUiKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQot
ICAvLyBidXQgYSByZW1vdGUgZG9jdW1lbnQgY2FuIG9ubHkgbG9hZCBmcm9tIHRoZSBzYW1lIHBv
cnQgb24gdGhlIHNlcnZlcgotICBpZiAoZG9jdW1lbnRVUkwucHJvdG9jb2woKS5sb3dlcigpID09
IF91cmwucHJvdG9jb2woKS5sb3dlcigpICYmCi0gICAgICBkb2N1bWVudFVSTC5ob3N0KCkubG93
ZXIoKSA9PSBfdXJsLmhvc3QoKS5sb3dlcigpICYmCi0gICAgICBkb2N1bWVudFVSTC5wb3J0KCkg
PT0gX3VybC5wb3J0KCkpIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHJldHVybiBmYWxz
ZTsKLX0KLQotdm9pZCBYTUxIdHRwUmVxdWVzdDo6b3Blbihjb25zdCBRU3RyaW5nJiBfbWV0aG9k
LCBjb25zdCBLVVJMJiBfdXJsLCBib29sIF9hc3luYykKLXsKLSAgYWJvcnQoKTsKLSAgYWJvcnRl
ZCA9IGZhbHNlOwotCi0gIC8vIGNsZWFyIHN0dWZmIGZyb20gcG9zc2libGUgcHJldmlvdXMgbG9h
ZAotICByZXF1ZXN0SGVhZGVycyA9IFFTdHJpbmcoKTsKLSAgcmVzcG9uc2VIZWFkZXJzID0gUVN0
cmluZygpOwotICByZXNwb25zZSA9IFFTdHJpbmcoKTsKLSAgY3JlYXRlZERvY3VtZW50ID0gZmFs
c2U7Ci0gIHJlc3BvbnNlWE1MID0gMDsKLQotICBjaGFuZ2VTdGF0ZShVbmluaXRpYWxpemVkKTsK
LQotICBpZiAoYWJvcnRlZCkgewotICAgIHJldHVybjsKLSAgfQotCi0gIGlmICghdXJsTWF0Y2hl
c0RvY3VtZW50RG9tYWluKF91cmwpKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgCi0gIG1ldGhv
ZCA9IF9tZXRob2Q7Ci0gIHVybCA9IF91cmw7Ci0gIGFzeW5jID0gX2FzeW5jOwotCi0gIGNoYW5n
ZVN0YXRlKExvYWRpbmcpOwotfQotCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKGNvbnN0IERP
TVN0cmluZyYgX2JvZHkpCi17Ci0gIGlmICghZG9jKQotICAgIHJldHVybjsKLQotICAvLyBGSVhN
RTogU2hvdWxkIHRoaXMgYWJvcnQgaW5zdGVhZCBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBqb2IgZ29p
bmc/Ci0gIGlmIChqb2IpCi0gICAgcmV0dXJuOwotCi0gIGFib3J0ZWQgPSBmYWxzZTsKLQotICBp
ZiAobWV0aG9kLmxvd2VyKCkgPT0gInBvc3QiICYmICh1cmwucHJvdG9jb2woKS5sb3dlcigpID09
ICJodHRwIiB8fCB1cmwucHJvdG9jb2woKS5sb3dlcigpID09ICJodHRwcyIpICkgewotICAgICAg
UVN0cmluZyBjb250ZW50VHlwZSA9IGdldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIpOwot
ICAgICAgUVN0cmluZyBjaGFyc2V0OwotICAgICAgaWYgKGNvbnRlbnRUeXBlLmlzRW1wdHkoKSkK
LSAgICAgICAgc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL3ht
bCIpOwotICAgICAgZWxzZQotICAgICAgICBjaGFyc2V0ID0gZ2V0Q2hhcnNldChjb250ZW50VHlw
ZSk7Ci0gICAgICAKLSAgICAgIGlmIChjaGFyc2V0LmlzRW1wdHkoKSkKLSAgICAgICAgY2hhcnNl
dCA9ICJVVEYtOCI7Ci0gICAgICAKLSAgICAgIFFUZXh0Q29kZWMgKmNvZGVjID0gUVRleHRDb2Rl
Yzo6Y29kZWNGb3JOYW1lKGNoYXJzZXQubGF0aW4xKCkpOwotICAgICAgaWYgKCFjb2RlYykgICAv
LyBGSVhNRTogcmVwb3J0IGFuIGVycm9yPwotICAgICAgICBjb2RlYyA9IFFUZXh0Q29kZWM6OmNv
ZGVjRm9yTmFtZSgiVVRGLTgiKTsKLQotICAgICAgam9iID0gS0lPOjpodHRwX3Bvc3QodXJsLCBj
b2RlYy0+ZnJvbVVuaWNvZGUoX2JvZHkucXN0cmluZygpKSwgZmFsc2UpOwotICB9Ci0gIGVsc2UK
LSAgICAgam9iID0gS0lPOjpnZXQoIHVybCwgZmFsc2UsIGZhbHNlICk7Ci0gIGlmIChyZXF1ZXN0
SGVhZGVycy5sZW5ndGgoKSA+IDApCi0gICAgam9iLT5hZGRNZXRhRGF0YSgiY3VzdG9tSFRUUEhl
YWRlciIsIHJlcXVlc3RIZWFkZXJzKTsKLQotICBpZiAoIWFzeW5jKSB7Ci0gICAgQnl0ZUFycmF5
IGRhdGE7Ci0gICAgS1VSTCBmaW5hbFVSTDsKLSAgICBRU3RyaW5nIGhlYWRlcnM7Ci0KLSAgICB7
IC8vIHNjb3BlCi0gICAgICAgIC8vIGF2b2lkIGRlYWRsb2NrIGluIGNhc2UgdGhlIGxvYWRlciB3
YW50cyB0byB1c2UgSlMgb24gYSBiYWNrZ3JvdW5kIHRocmVhZAotICAgICAgICBKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wTG9ja3M7Ci0KLSAgICAgICAgZGF0YSA9IEtXUVNlcnZlU3luY2hyb25v
dXNSZXF1ZXN0KGtodG1sOjpDYWNoZTo6bG9hZGVyKCksIGRvYy0+ZG9jTG9hZGVyKCksIGpvYiwg
ZmluYWxVUkwsIGhlYWRlcnMpOwotICAgIH0KLQotICAgIGpvYiA9IDA7Ci0gICAgcHJvY2Vzc1N5
bmNMb2FkUmVzdWx0cyhkYXRhLCBmaW5hbFVSTCwgaGVhZGVycyk7Ci0gICAgCi0gICAgcmV0dXJu
OwotICB9Ci0KLSAgewotICAgIEpTTG9jayBsb2NrOwotICAgIGdjUHJvdGVjdCh0aGlzKTsKLSAg
fQotICAKLSAgcU9iamVjdC0+Y29ubmVjdCggam9iLCBTSUdOQUwoIHJlc3VsdCggS0lPOjpKb2Iq
ICkgKSwKLSAgICAgICAgICAgICAgICAgICAgU0xPVCggc2xvdEZpbmlzaGVkKCBLSU86OkpvYiog
KSApICk7Ci0gIHFPYmplY3QtPmNvbm5lY3QoIGpvYiwgU0lHTkFMKCBkYXRhKCBLSU86OkpvYios
IGNvbnN0IGNoYXIqLCBpbnQgKSApLAotICAgICAgICAgICAgICAgICAgICBTTE9UKCBzbG90RGF0
YSggS0lPOjpKb2IqLCBjb25zdCBjaGFyKiwgaW50ICkgKSApOwotICBxT2JqZWN0LT5jb25uZWN0
KCBqb2IsIFNJR05BTChyZWRpcmVjdGlvbihLSU86OkpvYiosIGNvbnN0IEtVUkwmICkgKSwKLSAg
ICAgICAgICAgICAgICAgICAgU0xPVCggc2xvdFJlZGlyZWN0aW9uKEtJTzo6Sm9iKiwgY29uc3Qg
S1VSTCYpICkgKTsKLQotICBhZGRUb1JlcXVlc3RzQnlEb2N1bWVudCgpOwotCi0gIEtXUVNlcnZl
UmVxdWVzdChraHRtbDo6Q2FjaGU6OmxvYWRlcigpLCBkb2MtPmRvY0xvYWRlcigpLCBqb2IpOwot
fQotCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjphYm9ydCgpCi17Ci0gIGJvb2wgaGFkSm9iID0gam9i
OwotCi0gIGlmIChoYWRKb2IpIHsKLSAgICByZW1vdmVGcm9tUmVxdWVzdHNCeURvY3VtZW50KCk7
Ci0gICAgam9iLT5raWxsKCk7Ci0gICAgam9iID0gMDsKLSAgfQotICBkZWNvZGVyID0gMDsKLSAg
YWJvcnRlZCA9IHRydWU7Ci0KLSAgaWYgKGhhZEpvYikgewotICAgIEpTTG9jayBsb2NrOwotICAg
IGdjVW5wcm90ZWN0KHRoaXMpOwotICB9Ci19Ci0KLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNldFJl
cXVlc3RIZWFkZXIoY29uc3QgUVN0cmluZyYgbmFtZSwgY29uc3QgUVN0cmluZyAmdmFsdWUpCi17
Ci0gIGlmIChyZXF1ZXN0SGVhZGVycy5sZW5ndGgoKSA+IDApIHsKLSAgICByZXF1ZXN0SGVhZGVy
cyArPSAiXHJcbiI7Ci0gIH0KLSAgcmVxdWVzdEhlYWRlcnMgKz0gbmFtZTsKLSAgcmVxdWVzdEhl
YWRlcnMgKz0gIjogIjsKLSAgcmVxdWVzdEhlYWRlcnMgKz0gdmFsdWU7Ci19Ci0KLVFTdHJpbmcg
WE1MSHR0cFJlcXVlc3Q6OmdldFJlcXVlc3RIZWFkZXIoY29uc3QgUVN0cmluZyYgbmFtZSkgY29u
c3QKLXsKLSAgcmV0dXJuIGdldFNwZWNpZmljSGVhZGVyKHJlcXVlc3RIZWFkZXJzLCBuYW1lKTsK
LX0KLQotSlNWYWx1ZSAqWE1MSHR0cFJlcXVlc3Q6OmdldEFsbFJlc3BvbnNlSGVhZGVycygpIGNv
bnN0Ci17Ci0gIGlmIChyZXNwb25zZUhlYWRlcnMuaXNFbXB0eSgpKSB7Ci0gICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gIH0KLQotICBpbnQgZW5kT2ZMaW5lID0gcmVzcG9uc2VIZWFkZXJzLmZp
bmQoIlxuIik7Ci0KLSAgaWYgKGVuZE9mTGluZSA9PSAtMSkgewotICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICB9Ci0KLSAgcmV0dXJuIGpzU3RyaW5nKHJlc3BvbnNlSGVhZGVycy5taWQoZW5k
T2ZMaW5lICsgMSkgKyAiXG4iKTsKLX0KLQotUVN0cmluZyBYTUxIdHRwUmVxdWVzdDo6Z2V0UmVz
cG9uc2VIZWFkZXIoY29uc3QgUVN0cmluZyYgbmFtZSkgY29uc3QKLXsKLSAgcmV0dXJuIGdldFNw
ZWNpZmljSGVhZGVyKHJlc3BvbnNlSGVhZGVycywgbmFtZSk7Ci19Ci0KLVFTdHJpbmcgWE1MSHR0
cFJlcXVlc3Q6OmdldFNwZWNpZmljSGVhZGVyKGNvbnN0IFFTdHJpbmcmIGhlYWRlcnMsIGNvbnN0
IFFTdHJpbmcmIG5hbWUpCi17Ci0gIGlmIChoZWFkZXJzLmlzRW1wdHkoKSkKLSAgICByZXR1cm4g
UVN0cmluZygpOwotCi0gIFFSZWdFeHAgaGVhZGVyTGluZVBhdHRlcm4obmFtZSArICI6IiwgZmFs
c2UpOwotCi0gIGludCBtYXRjaExlbmd0aDsKLSAgaW50IGhlYWRlckxpbmVQb3MgPSBoZWFkZXJM
aW5lUGF0dGVybi5tYXRjaChoZWFkZXJzLCAwLCAmbWF0Y2hMZW5ndGgpOwotICB3aGlsZSAoaGVh
ZGVyTGluZVBvcyAhPSAtMSkgewotICAgIGlmIChoZWFkZXJMaW5lUG9zID09IDAgfHwgaGVhZGVy
c1toZWFkZXJMaW5lUG9zLTFdID09ICdcbicpIHsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICAK
LSAgICBoZWFkZXJMaW5lUG9zID0gaGVhZGVyTGluZVBhdHRlcm4ubWF0Y2goaGVhZGVycywgaGVh
ZGVyTGluZVBvcyArIDEsICZtYXRjaExlbmd0aCk7Ci0gIH0KLQotICBpZiAoaGVhZGVyTGluZVBv
cyA9PSAtMSkKLSAgICByZXR1cm4gUVN0cmluZygpOwotICAgIAotICBpbnQgZW5kT2ZMaW5lID0g
aGVhZGVycy5maW5kKCJcbiIsIGhlYWRlckxpbmVQb3MgKyBtYXRjaExlbmd0aCk7Ci0gIAotICBy
ZXR1cm4gaGVhZGVycy5taWQoaGVhZGVyTGluZVBvcyArIG1hdGNoTGVuZ3RoLCBlbmRPZkxpbmUg
LSAoaGVhZGVyTGluZVBvcyArIG1hdGNoTGVuZ3RoKSkuc3RyaXBXaGl0ZVNwYWNlKCk7Ci19Ci0K
LWJvb2wgWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlSXNYTUwoKSBjb25zdAotewotICAgIFFTdHJp
bmcgbWltZVR5cGUgPSBnZXRNSU1FVHlwZShNSU1FVHlwZU92ZXJyaWRlKTsKLSAgICBpZiAobWlt
ZVR5cGUuaXNFbXB0eSgpKQotICAgICAgICBtaW1lVHlwZSA9IGdldE1JTUVUeXBlKGdldFJlc3Bv
bnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKSk7Ci0gICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkK
LSAgICAgIG1pbWVUeXBlID0gInRleHQveG1sIjsKLSAgICAKLSAgICByZXR1cm4gRE9NSW1wbGVt
ZW50YXRpb25JbXBsOjppc1hNTE1JTUVUeXBlKG1pbWVUeXBlKTsKLX0KLQotSlNWYWx1ZSAqWE1M
SHR0cFJlcXVlc3Q6OmdldFN0YXR1cygpIGNvbnN0Ci17Ci0gIGlmIChyZXNwb25zZUhlYWRlcnMu
aXNFbXB0eSgpKSB7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gIH0KLSAgCi0gIGludCBl
bmRPZkxpbmUgPSByZXNwb25zZUhlYWRlcnMuZmluZCgiXG4iKTsKLSAgUVN0cmluZyBmaXJzdExp
bmUgPSBlbmRPZkxpbmUgPT0gLTEgPyByZXNwb25zZUhlYWRlcnMgOiByZXNwb25zZUhlYWRlcnMu
bGVmdChlbmRPZkxpbmUpOwotICBpbnQgY29kZVN0YXJ0ID0gZmlyc3RMaW5lLmZpbmQoIiAiKTsK
LSAgaW50IGNvZGVFbmQgPSBmaXJzdExpbmUuZmluZCgiICIsIGNvZGVTdGFydCArIDEpOwotICAK
LSAgaWYgKGNvZGVTdGFydCA9PSAtMSB8fCBjb2RlRW5kID09IC0xKSB7Ci0gICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gIH0KLSAgCi0gIFFTdHJpbmcgbnVtYmVyID0gZmlyc3RMaW5lLm1pZChj
b2RlU3RhcnQgKyAxLCBjb2RlRW5kIC0gKGNvZGVTdGFydCArIDEpKTsKLSAgCi0gIGJvb2wgb2sg
PSBmYWxzZTsKLSAgaW50IGNvZGUgPSBudW1iZXIudG9JbnQoJm9rKTsKLSAgaWYgKCFvaykgewot
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICB9Ci0KLSAgcmV0dXJuIGpzTnVtYmVyKGNvZGUp
OwotfQotCi1KU1ZhbHVlICpYTUxIdHRwUmVxdWVzdDo6Z2V0U3RhdHVzVGV4dCgpIGNvbnN0Ci17
Ci0gIGlmIChyZXNwb25zZUhlYWRlcnMuaXNFbXB0eSgpKSB7Ci0gICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci0gIH0KLSAgCi0gIGludCBlbmRPZkxpbmUgPSByZXNwb25zZUhlYWRlcnMuZmluZCgi
XG4iKTsKLSAgUVN0cmluZyBmaXJzdExpbmUgPSBlbmRPZkxpbmUgPT0gLTEgPyByZXNwb25zZUhl
YWRlcnMgOiByZXNwb25zZUhlYWRlcnMubGVmdChlbmRPZkxpbmUpOwotICBpbnQgY29kZVN0YXJ0
ID0gZmlyc3RMaW5lLmZpbmQoIiAiKTsKLSAgaW50IGNvZGVFbmQgPSBmaXJzdExpbmUuZmluZCgi
ICIsIGNvZGVTdGFydCArIDEpOwotCi0gIGlmIChjb2RlU3RhcnQgPT0gLTEgfHwgY29kZUVuZCA9
PSAtMSkgewotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICB9Ci0gIAotICBRU3RyaW5nIHN0
YXR1c1RleHQgPSBmaXJzdExpbmUubWlkKGNvZGVFbmQgKyAxLCBlbmRPZkxpbmUgLSAoY29kZUVu
ZCArIDEpKS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgCi0gIHJldHVybiBqc1N0cmluZyhzdGF0dXNU
ZXh0KTsKLX0KLQotdm9pZCBYTUxIdHRwUmVxdWVzdDo6cHJvY2Vzc1N5bmNMb2FkUmVzdWx0cyhj
b25zdCBCeXRlQXJyYXkgJmRhdGEsIGNvbnN0IEtVUkwgJmZpbmFsVVJMLCBjb25zdCBRU3RyaW5n
ICZoZWFkZXJzKQotewotICBpZiAoIXVybE1hdGNoZXNEb2N1bWVudERvbWFpbihmaW5hbFVSTCkp
IHsKLSAgICBhYm9ydCgpOwotICAgIHJldHVybjsKLSAgfQotICAKLSAgcmVzcG9uc2VIZWFkZXJz
ID0gaGVhZGVyczsKLSAgY2hhbmdlU3RhdGUoTG9hZGVkKTsKLSAgaWYgKGFib3J0ZWQpIHsKLSAg
ICByZXR1cm47Ci0gIH0KLSAgCi0gIGNvbnN0IGNoYXIgKmJ5dGVzID0gKGNvbnN0IGNoYXIgKilk
YXRhLmRhdGEoKTsKLSAgaW50IGxlbiA9IChpbnQpZGF0YS5zaXplKCk7Ci0KLSAgc2xvdERhdGEo
MCwgYnl0ZXMsIGxlbik7Ci0KLSAgaWYgKGFib3J0ZWQpIHsKLSAgICByZXR1cm47Ci0gIH0KLQot
ICBzbG90RmluaXNoZWQoMCk7Ci19Ci0KLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNsb3RGaW5pc2hl
ZChLSU86OkpvYiAqKQotewotICBpZiAocmVzcG9uc2VIZWFkZXJzLmlzRW1wdHkoKSAmJiBqb2Ip
Ci0gICAgcmVzcG9uc2VIZWFkZXJzID0gam9iLT5xdWVyeU1ldGFEYXRhKCJIVFRQLUhlYWRlcnMi
KTsKLQotICBpZiAoc3RhdGUgPCBMb2FkZWQpCi0gICAgY2hhbmdlU3RhdGUoTG9hZGVkKTsKLQot
ICBpZiAoZGVjb2RlcikKLSAgICByZXNwb25zZSArPSBkZWNvZGVyLT5mbHVzaCgpOwotCi0gIHJl
bW92ZUZyb21SZXF1ZXN0c0J5RG9jdW1lbnQoKTsKLSAgam9iID0gMDsKLQotICBjaGFuZ2VTdGF0
ZShDb21wbGV0ZWQpOwotICBkZWNvZGVyID0gMDsKLQotICBKU0xvY2sgbG9jazsKLSAgZ2NVbnBy
b3RlY3QodGhpcyk7Ci19Ci0KLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNsb3RSZWRpcmVjdGlvbihL
SU86OkpvYiosIGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgaWYgKCF1cmxNYXRjaGVzRG9jdW1lbnRE
b21haW4odXJsKSkgewotICAgIGFib3J0KCk7Ci0gIH0KLX0KLQotdm9pZCBYTUxIdHRwUmVxdWVz
dDo6c2xvdERhdGEoS0lPOjpKb2IqLCBjb25zdCBjaGFyICpkYXRhLCBpbnQgbGVuKQotewotICBp
ZiAocmVzcG9uc2VIZWFkZXJzLmlzRW1wdHkoKSAmJiBqb2IpCi0gICAgcmVzcG9uc2VIZWFkZXJz
ID0gam9iLT5xdWVyeU1ldGFEYXRhKCJIVFRQLUhlYWRlcnMiKTsKLQotICBpZiAoc3RhdGUgPCBM
b2FkZWQpCi0gICAgY2hhbmdlU3RhdGUoTG9hZGVkKTsKLSAgCi0gIGlmICghZGVjb2Rlcikgewot
ICAgIGVuY29kaW5nID0gZ2V0Q2hhcnNldChNSU1FVHlwZU92ZXJyaWRlKTsKLSAgICBpZiAoZW5j
b2RpbmcuaXNFbXB0eSgpKQotICAgICAgZW5jb2RpbmcgPSBnZXRDaGFyc2V0KGdldFJlc3BvbnNl
SGVhZGVyKCJDb250ZW50LVR5cGUiKSk7Ci0gICAgaWYgKGVuY29kaW5nLmlzRW1wdHkoKSAmJiBq
b2IpCi0gICAgICBlbmNvZGluZyA9IGpvYi0+cXVlcnlNZXRhRGF0YSgiY2hhcnNldCIpOwotICAg
IAotICAgIGRlY29kZXIgPSBuZXcgRGVjb2RlcjsKLSAgICBpZiAoIWVuY29kaW5nLmlzRW1wdHko
KSkKLSAgICAgIGRlY29kZXItPnNldEVuY29kaW5nKGVuY29kaW5nLmxhdGluMSgpLCBEZWNvZGVy
OjpFbmNvZGluZ0Zyb21IVFRQSGVhZGVyKTsKLSAgICBlbHNlIHsKLSAgICAgIC8vIG9ubHkgYWxs
b3cgRGVjb2RlciB0byBsb29rIGluc2lkZSB0aGUgcmVzcG9uc2UgaWYgaXQncyBYTUwKLSAgICAg
IGRlY29kZXItPnNldEVuY29kaW5nKCJVVEYtOCIsIHJlc3BvbnNlSXNYTUwoKSA/IERlY29kZXI6
OkRlZmF1bHRFbmNvZGluZyA6IERlY29kZXI6OkVuY29kaW5nRnJvbUhUVFBIZWFkZXIpOwotICAg
IH0KLSAgfQotICBpZiAobGVuID09IDApCi0gICAgcmV0dXJuOwotCi0gIGlmIChsZW4gPT0gLTEp
Ci0gICAgbGVuID0gc3RybGVuKGRhdGEpOwotCi0gIFFTdHJpbmcgZGVjb2RlZCA9IGRlY29kZXIt
PmRlY29kZShkYXRhLCBsZW4pOwotCi0gIHJlc3BvbnNlICs9IGRlY29kZWQ7Ci0KLSAgaWYgKCFh
Ym9ydGVkKSB7Ci0gICAgY2hhbmdlU3RhdGUoSW50ZXJhY3RpdmUpOwotICB9Ci19Ci0KLVhNTEh0
dHBSZXF1ZXN0OjpSZXF1ZXN0c01hcCYgWE1MSHR0cFJlcXVlc3Q6OnJlcXVlc3RzQnlEb2N1bWVu
dCgpCi17Ci0gICAgc3RhdGljIFJlcXVlc3RzTWFwIG1hcDsKLSAgICByZXR1cm4gbWFwOwotfQot
Ci12b2lkIFhNTEh0dHBSZXF1ZXN0OjphZGRUb1JlcXVlc3RzQnlEb2N1bWVudCgpCi17Ci0gIGFz
c2VydChkb2MpOwotCi0gIFJlcXVlc3RzU2V0KiByZXF1ZXN0cyA9IHJlcXVlc3RzQnlEb2N1bWVu
dCgpLmdldChkb2MpOwotICBpZiAoIXJlcXVlc3RzKSB7Ci0gICAgcmVxdWVzdHMgPSBuZXcgUmVx
dWVzdHNTZXQ7Ci0gICAgcmVxdWVzdHNCeURvY3VtZW50KCkuc2V0KGRvYywgcmVxdWVzdHMpOwot
ICB9Ci0KLSAgYXNzZXJ0KCFyZXF1ZXN0cy0+Y29udGFpbnModGhpcykpOwotICByZXF1ZXN0cy0+
aW5zZXJ0KHRoaXMpOwotfQotCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjpyZW1vdmVGcm9tUmVxdWVz
dHNCeURvY3VtZW50KCkKLXsKLSAgYXNzZXJ0KGRvYyk7Ci0KLSAgUmVxdWVzdHNTZXQqIHJlcXVl
c3RzID0gcmVxdWVzdHNCeURvY3VtZW50KCkuZ2V0KGRvYyk7Ci0KLSAgLy8gU2luY2Ugc3luY2hy
b25vdXMgbG9hZHMgYXJlIG5vdCBhZGRlZCB0byByZXF1ZXN0c0J5RG9jdW1lbnQoKSwgd2UgbmVl
ZCB0byBtYWtlIHN1cmUgd2UgZm91bmQgdGhlIHJlcXVlc3QuCi0gIGlmICghcmVxdWVzdHMgfHwg
IXJlcXVlc3RzLT5jb250YWlucyh0aGlzKSkKLSAgICByZXR1cm47Ci0KLSAgcmVxdWVzdHMtPnJl
bW92ZSh0aGlzKTsKLQotICBpZiAocmVxdWVzdHMtPmlzRW1wdHkoKSkgewotICAgIHJlcXVlc3Rz
QnlEb2N1bWVudCgpLnJlbW92ZShkb2MpOwotICAgIGRlbGV0ZSByZXF1ZXN0czsKLSAgfQotfQot
Ci12b2lkIFhNTEh0dHBSZXF1ZXN0OjpjYW5jZWxSZXF1ZXN0cyhET006OkRvY3VtZW50SW1wbCog
ZCkKLXsKLSAgd2hpbGUgKFJlcXVlc3RzU2V0KiByZXF1ZXN0cyA9IHJlcXVlc3RzQnlEb2N1bWVu
dCgpLmdldChkKSkKLSAgICAoKnJlcXVlc3RzLT5iZWdpbigpKS0+YWJvcnQoKTsKLX0KLQogSlNW
YWx1ZSAqWE1MSHR0cFJlcXVlc3RQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAq
ZXhlYywgSlNPYmplY3QgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAgIGlmICghdGhp
c09iai0+aW5oZXJpdHMoJlhNTEh0dHBSZXF1ZXN0OjppbmZvKSkKQEAgLTY4OSwyMiArMTk3LDI3
IEBACiAKICAgc3dpdGNoIChpZCkgewogICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpBYm9ydDogewot
ICAgIHJlcXVlc3QtPmFib3J0KCk7CisgICAgcmVxdWVzdC0+bV9pbXBsLT5hYm9ydCgpOwogICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICB9CiAgIGNhc2UgWE1MSHR0cFJlcXVlc3Q6OkdldEFs
bFJlc3BvbnNlSGVhZGVyczogewogICAgIGlmIChhcmdzLnNpemUoKSAhPSAwKSB7CiAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CisgICAgCisgICAgRE9NU3RyaW5nIGhlYWRlcnMg
PSByZXF1ZXN0LT5tX2ltcGwtPmdldEFsbFJlc3BvbnNlSGVhZGVycygpOwogCi0gICAgcmV0dXJu
IHJlcXVlc3QtPmdldEFsbFJlc3BvbnNlSGVhZGVycygpOworICAgIGlmIChoZWFkZXJzLmlzTnVs
bCgpKQorICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICByZXR1cm4ganNTdHJpbmco
aGVhZGVycyk7CiAgIH0KICAgY2FzZSBYTUxIdHRwUmVxdWVzdDo6R2V0UmVzcG9uc2VIZWFkZXI6
IHsKICAgICBpZiAoYXJncy5zaXplKCkgIT0gMSkgewogICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgfQogICAgIAotICAgIFFTdHJpbmcgaGVhZGVyID0gcmVxdWVzdC0+Z2V0UmVzcG9u
c2VIZWFkZXIoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpKTsKKyAgICBET01TdHJp
bmcgaGVhZGVyID0gcmVxdWVzdC0+bV9pbXBsLT5nZXRSZXNwb25zZUhlYWRlcihhcmdzWzBdLT50
b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKSk7CiAKICAgICBpZiAoaGVhZGVyLmlzTnVsbCgpKQog
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC03MTcsNyArMjMwLDcgQEAKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICB9CiAgICAgCi0gICAgICBRU3RyaW5nIG1ldGhv
ZCA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKTsKKyAgICAgIERPTVN0cmluZyBt
ZXRob2QgPSBhcmdzWzBdLT50b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKTsKICAgICAgIEtVUkwg
dXJsID0gS1VSTChXaW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5mcmFtZSgpLT54bWxEb2NJ
bXBsKCktPmNvbXBsZXRlVVJMKGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSkpOwog
CiAgICAgICBib29sIGFzeW5jID0gdHJ1ZTsKQEAgLTczMyw3ICsyNDYsNyBAQAogICAgICAgICB1
cmwuc2V0UGFzcyhhcmdzWzRdLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkpOwogICAgICAgfQog
Ci0gICAgICByZXF1ZXN0LT5vcGVuKG1ldGhvZCwgdXJsLCBhc3luYyk7CisgICAgICByZXF1ZXN0
LT5tX2ltcGwtPm9wZW4obWV0aG9kLCB1cmwsIGFzeW5jKTsKIAogICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgfQpAQCAtNzQzLDEwICsyNTYsNiBAQAogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICAgIH0KIAotICAgICAgaWYgKHJlcXVlc3QtPnN0YXRlICE9IExvYWRp
bmcpIHsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0KICAgICAgIERP
TVN0cmluZyBib2R5OwogCiAgICAgICBpZiAoYXJncy5zaXplKCkgPj0gMSkgewpAQCAtNzYwLDcg
KzI2OSw3IEBACiAgICAgICAgIH0KICAgICAgIH0KIAotICAgICAgcmVxdWVzdC0+c2VuZChib2R5
KTsKKyAgICAgIHJlcXVlc3QtPm1faW1wbC0+c2VuZChib2R5KTsKIAogICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgfQpAQCAtNzY5LDcgKzI3OCw3IEBACiAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICB9CiAgICAgCi0gICAgcmVxdWVzdC0+c2V0UmVxdWVzdEhlYWRlcihh
cmdzWzBdLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCksIGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMp
LnFzdHJpbmcoKSk7CisgICAgcmVxdWVzdC0+bV9pbXBsLT5zZXRSZXF1ZXN0SGVhZGVyKGFyZ3Nb
MF0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpLCBhcmdzWzFdLT50b1N0cmluZyhleGVjKS5k
b21TdHJpbmcoKSk7CiAgICAgCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgIH0KQEAgLTc3
Nyw3ICsyODYsNyBAQAogICAgIGlmIChhcmdzLnNpemUoKSAhPSAxKSB7CiAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgcmVxdWVzdC0+TUlNRVR5cGVPdmVycmlkZSA9IGFy
Z3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKTsKKyAgICByZXF1ZXN0LT5tX2ltcGwtPm92
ZXJyaWRlTUlNRVR5cGUoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCkpOwogICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICB9CiAgIH0KSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNt
YS94bWxodHRwcmVxdWVzdGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2h0bWwvZWNt
YS94bWxodHRwcmVxdWVzdGltcGwuY3BwCShyZXZpc2lvbiAxMjE1MSkKKysrIFdlYkNvcmUva2h0
bWwvZWNtYS94bWxodHRwcmVxdWVzdGltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEs
NyBAQAogLyoKICAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcwogICog
IENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLgotICogIENvcHlyaWdodCAo
QykgMjAwNSBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CisgKiAgQ29weXJpZ2h0
IChDKSAyMDA1LCAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KICAqCiAg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKQEAgLTE5LDIyICsxOSwyMCBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJ4bWxodHRwcmVxdWVzdC5oIgorI2luY2x1ZGUgInhtbGh0dHByZXF1
ZXN0aW1wbC5oIgogCi0jaW5jbHVkZSAia2pzX3dpbmRvdy5oIgotI2luY2x1ZGUgImtqc19ldmVu
dHMuaCIKKyNpbmNsdWRlICJranMvcHJvdGVjdC5oIgogCiAjaW5jbHVkZSAiZG9tL2RvbV9leGNl
cHRpb24uaCIKICNpbmNsdWRlICJkb20vZG9tX3N0cmluZy5oIgorI2luY2x1ZGUgImRvbS9kb20y
X2V2ZW50cy5oIgogI2luY2x1ZGUgIkNhY2hlLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2RvY3Vt
ZW50aW1wbC5oIgorI2luY2x1ZGUgIm1pc2MvZm9ybWRhdGEuaCIKICNpbmNsdWRlICJ4bWwvZG9t
Ml9ldmVudHNpbXBsLmgiCiAjaW5jbHVkZSAieG1sL0V2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJE
T01JbXBsZW1lbnRhdGlvbkltcGwuaCIKIAotI2luY2x1ZGUgIkZyYW1lLmgiCi0KLSNpbmNsdWRl
IDxrZGVidWcuaD4KICNpbmNsdWRlIDxraW8vam9iLmg+CiAjaW5jbHVkZSA8cW9iamVjdC5oPgog
I2luY2x1ZGUgPHFyZWdleHAuaD4KQEAgLTQyLDggKzQwLDYgQEAKIAogI2luY2x1ZGUgIktXUUxv
YWRlci5oIgogCi0jaW5jbHVkZSAieG1saHR0cHJlcXVlc3QubHV0LmgiCi0KIHVzaW5nIG5hbWVz
cGFjZSBET007CiB1c2luZyBuYW1lc3BhY2UgRE9NOjpFdmVudE5hbWVzOwogCkBAIC05MywyNiAr
ODksOSBAQAogICAgIHJldHVybiBRU3RyaW5nKCk7CiB9CiAKLW5hbWVzcGFjZSBLSlMgeworbmFt
ZXNwYWNlIERPTSB7CiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gWE1MSHR0cFJlcXVlc3QgT2Jq
ZWN0IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0vKiBTb3VyY2UgZm9yIFhNTEh0dHBSZXF1
ZXN0UHJvdG9UYWJsZS4KLUBiZWdpbiBYTUxIdHRwUmVxdWVzdFByb3RvVGFibGUgNwotICBhYm9y
dCAgICAgICAgICAgICAgICAgWE1MSHR0cFJlcXVlc3Q6OkFib3J0ICAgICAgICAgICAgICAgICAg
IERvbnREZWxldGV8RnVuY3Rpb24gMAotICBnZXRBbGxSZXNwb25zZUhlYWRlcnMgWE1MSHR0cFJl
cXVlc3Q6OkdldEFsbFJlc3BvbnNlSGVhZGVycyAgIERvbnREZWxldGV8RnVuY3Rpb24gMAotICBn
ZXRSZXNwb25zZUhlYWRlciAgICAgWE1MSHR0cFJlcXVlc3Q6OkdldFJlc3BvbnNlSGVhZGVyICAg
ICAgIERvbnREZWxldGV8RnVuY3Rpb24gMQotICBvcGVuICAgICAgICAgICAgICAgICAgWE1MSHR0
cFJlcXVlc3Q6Ok9wZW4gICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gNQot
ICBvdmVycmlkZU1pbWVUeXBlICAgICAgWE1MSHR0cFJlcXVlc3Q6Ok92ZXJyaWRlTUlNRVR5cGUg
ICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMQotICBzZW5kICAgICAgICAgICAgICAgICAgWE1M
SHR0cFJlcXVlc3Q6OlNlbmQgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24g
MQotICBzZXRSZXF1ZXN0SGVhZGVyICAgICAgWE1MSHR0cFJlcXVlc3Q6OlNldFJlcXVlc3RIZWFk
ZXIgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMgotQGVuZAotKi8KLUtKU19ERUZJTkVfUFJP
VE9UWVBFKFhNTEh0dHBSZXF1ZXN0UHJvdG8pCi1LSlNfSU1QTEVNRU5UX1BST1RPRlVOQyhYTUxI
dHRwUmVxdWVzdFByb3RvRnVuYykKLUtKU19JTVBMRU1FTlRfUFJPVE9UWVBFKCJYTUxIdHRwUmVx
dWVzdCIsWE1MSHR0cFJlcXVlc3RQcm90byxYTUxIdHRwUmVxdWVzdFByb3RvRnVuYykKLQotWE1M
SHR0cFJlcXVlc3RRT2JqZWN0OjpYTUxIdHRwUmVxdWVzdFFPYmplY3QoWE1MSHR0cFJlcXVlc3Qg
Kl9qc09iamVjdCkgCitYTUxIdHRwUmVxdWVzdFFPYmplY3Q6OlhNTEh0dHBSZXF1ZXN0UU9iamVj
dChYTUxIdHRwUmVxdWVzdEltcGwgKl9qc09iamVjdCkgCiB7CiAgIGpzT2JqZWN0ID0gX2pzT2Jq
ZWN0OyAKIH0KQEAgLTEzMiw1NyArMTExLDIxIEBACiAgIGpzT2JqZWN0LT5zbG90UmVkaXJlY3Rp
b24oIGpvYiwgdXJsICk7IAogfQogCi1YTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wOjpYTUxI
dHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wKEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpEb2N1bWVudElt
cGwgKmQpCi0gICAgOiBkb2MoZCkKK1hNTEh0dHBSZXF1ZXN0U3RhdGUgWE1MSHR0cFJlcXVlc3RJ
bXBsOjpnZXRSZWFkeVN0YXRlKCkgY29uc3QKIHsKLSAgICBwdXREaXJlY3QocHJvdG90eXBlUHJv
cGVydHlOYW1lLCBYTUxIdHRwUmVxdWVzdFByb3RvOjpzZWxmKGV4ZWMpLCBEb250RW51bXxEb250
RGVsZXRlfFJlYWRPbmx5KTsKKyAgICByZXR1cm4gc3RhdGU7CiB9CiAKLVhNTEh0dHBSZXF1ZXN0
Q29uc3RydWN0b3JJbXA6On5YTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wKCkKK0RPTVN0cmlu
ZyBYTUxIdHRwUmVxdWVzdEltcGw6OmdldFJlc3BvbnNlVGV4dCgpIGNvbnN0CiB7CisgICAgcmV0
dXJuIHJlc3BvbnNlOwogfQogCi1ib29sIFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXA6Omlt
cGxlbWVudHNDb25zdHJ1Y3QoKSBjb25zdAorUGFzc1JlZlB0cjxEb2N1bWVudEltcGw+IFhNTEh0
dHBSZXF1ZXN0SW1wbDo6Z2V0UmVzcG9uc2VYTUwoKSBjb25zdAogewotICByZXR1cm4gdHJ1ZTsK
LX0KKyAgICBpZiAoc3RhdGUgIT0gQ29tcGxldGVkKQorICAgICAgcmV0dXJuIDA7CiAKLUpTT2Jq
ZWN0ICpYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wOjpjb25zdHJ1Y3QoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBMaXN0ICYpCi17Ci0gIHJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoZXhlYywg
ZG9jLmdldCgpKTsKLX0KLQotY29uc3QgQ2xhc3NJbmZvIFhNTEh0dHBSZXF1ZXN0OjppbmZvID0g
eyAiWE1MSHR0cFJlcXVlc3QiLCAwLCAmWE1MSHR0cFJlcXVlc3RUYWJsZSwgMCB9OwotCi0vKiBT
b3VyY2UgZm9yIFhNTEh0dHBSZXF1ZXN0VGFibGUuCi1AYmVnaW4gWE1MSHR0cFJlcXVlc3RUYWJs
ZSA3Ci0gIHJlYWR5U3RhdGUgICAgICAgICAgICBYTUxIdHRwUmVxdWVzdDo6UmVhZHlTdGF0ZSAg
ICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICByZXNwb25zZVRleHQgICAgICAgICAg
WE1MSHR0cFJlcXVlc3Q6OlJlc3BvbnNlVGV4dCAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9u
bHkKLSAgcmVzcG9uc2VYTUwgICAgICAgICAgIFhNTEh0dHBSZXF1ZXN0OjpSZXNwb25zZVhNTCAg
ICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHN0YXR1cyAgICAgICAgICAgICAgICBY
TUxIdHRwUmVxdWVzdDo6U3RhdHVzICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25s
eQotICBzdGF0dXNUZXh0ICAgICAgICAgICAgWE1MSHR0cFJlcXVlc3Q6OlN0YXR1c1RleHQgICAg
ICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgb25yZWFkeXN0YXRlY2hhbmdlICAgIFhN
TEh0dHBSZXF1ZXN0OjpPbnJlYWR5c3RhdGVjaGFuZ2UgICAgICBEb250RGVsZXRlCi0gIG9ubG9h
ZCAgICAgICAgICAgICAgICBYTUxIdHRwUmVxdWVzdDo6T25sb2FkICAgICAgICAgICAgICAgICAg
RG9udERlbGV0ZQotQGVuZAotKi8KLQotYm9vbCBYTUxIdHRwUmVxdWVzdDo6Z2V0T3duUHJvcGVy
dHlTbG90KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8WE1MSHR0
cFJlcXVlc3QsIERPTU9iamVjdD4oZXhlYywgJlhNTEh0dHBSZXF1ZXN0VGFibGUsIHRoaXMsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7Ci19Ci0KLUpTVmFsdWUgKlhNTEh0dHBSZXF1ZXN0OjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAotewotICBzd2l0Y2gg
KHRva2VuKSB7Ci0gIGNhc2UgUmVhZHlTdGF0ZToKLSAgICByZXR1cm4ganNOdW1iZXIoc3RhdGUp
OwotICBjYXNlIFJlc3BvbnNlVGV4dDoKLSAgICByZXR1cm4ganNTdHJpbmdPck51bGwoRE9NOjpE
T01TdHJpbmcocmVzcG9uc2UpKTsKLSAgY2FzZSBSZXNwb25zZVhNTDoKLSAgICBpZiAoc3RhdGUg
IT0gQ29tcGxldGVkKSB7Ci0gICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KICAg
ICBpZiAoIWNyZWF0ZWREb2N1bWVudCkgewogICAgICAgaWYgKHR5cGVJc1hNTCA9IHJlc3BvbnNl
SXNYTUwoKSkgewogICAgICAgICByZXNwb25zZVhNTCA9IGRvYy0+aW1wbGVtZW50YXRpb24oKS0+
Y3JlYXRlRG9jdW1lbnQoKTsKQEAgLTE5Nyw2NiArMTQwLDM1IEBACiAgICAgICBjcmVhdGVkRG9j
dW1lbnQgPSB0cnVlOwogICAgIH0KIAotICAgIGlmICghdHlwZUlzWE1MKSB7Ci0gICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CisgICAgaWYgKCF0eXBlSXNYTUwpCisgICAgICByZXR1
cm4gMDsKIAotICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHJlc3BvbnNlWE1MLmdldCgpKTsK
LSAgY2FzZSBTdGF0dXM6Ci0gICAgcmV0dXJuIGdldFN0YXR1cygpOwotICBjYXNlIFN0YXR1c1Rl
eHQ6Ci0gICAgcmV0dXJuIGdldFN0YXR1c1RleHQoKTsKLSAgY2FzZSBPbnJlYWR5c3RhdGVjaGFu
Z2U6Ci0gICBpZiAob25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIgJiYgb25SZWFkeVN0YXRlQ2hh
bmdlTGlzdGVuZXItPmxpc3RlbmVyT2JqKCkpIHsKLSAgICAgcmV0dXJuIG9uUmVhZHlTdGF0ZUNo
YW5nZUxpc3RlbmVyLT5saXN0ZW5lck9iaigpOwotICAgfSBlbHNlIHsKLSAgICAgcmV0dXJuIGpz
TnVsbCgpOwotICAgfQotICBjYXNlIE9ubG9hZDoKLSAgIGlmIChvbkxvYWRMaXN0ZW5lciAmJiBv
bkxvYWRMaXN0ZW5lci0+bGlzdGVuZXJPYmooKSkgewotICAgICByZXR1cm4gb25Mb2FkTGlzdGVu
ZXItPmxpc3RlbmVyT2JqKCk7Ci0gICB9IGVsc2UgewotICAgICByZXR1cm4ganNOdWxsKCk7Ci0g
ICB9Ci0gIGRlZmF1bHQ6Ci0gICAga2RXYXJuaW5nKCkgPDwgIlhNTEh0dHBSZXF1ZXN0OjpnZXRW
YWx1ZVByb3BlcnR5IHVuaGFuZGxlZCB0b2tlbiAiIDw8IHRva2VuIDw8IGVuZGw7Ci0gICAgcmV0
dXJuIE5VTEw7Ci0gIH0KKyAgICByZXR1cm4gcmVzcG9uc2VYTUw7CiB9CiAKLXZvaWQgWE1MSHR0
cFJlcXVlc3Q6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5
TmFtZSwgSlNWYWx1ZSAqdmFsdWUsIGludCBhdHRyKQorUGFzc1JlZlB0cjxFdmVudExpc3RlbmVy
PiBYTUxIdHRwUmVxdWVzdEltcGw6OmdldE9uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyKCkgY29u
c3QKIHsKLSAgbG9va3VwUHV0PFhNTEh0dHBSZXF1ZXN0LERPTU9iamVjdD4oZXhlYywgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgYXR0ciwgJlhNTEh0dHBSZXF1ZXN0VGFibGUsIHRoaXMgKTsKKyAgICBy
ZXR1cm4gb25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXI7CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVl
c3Q6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEpTVmFsdWUg
KnZhbHVlLCBpbnQgLyphdHRyKi8pCit2b2lkIFhNTEh0dHBSZXF1ZXN0SW1wbDo6c2V0T25SZWFk
eVN0YXRlQ2hhbmdlTGlzdGVuZXIoRXZlbnRMaXN0ZW5lciogZXZlbnRMaXN0ZW5lcikKIHsKLSAg
c3dpdGNoKHRva2VuKSB7Ci0gIGNhc2UgT25yZWFkeXN0YXRlY2hhbmdlOgotICAgIG9uUmVhZHlT
dGF0ZUNoYW5nZUxpc3RlbmVyID0gV2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+Z2V0SlNV
bnByb3RlY3RlZEV2ZW50TGlzdGVuZXIodmFsdWUsIHRydWUpOwotICAgIGJyZWFrOwotICBjYXNl
IE9ubG9hZDoKLSAgICBvbkxvYWRMaXN0ZW5lciA9IFdpbmRvdzo6cmV0cmlldmVBY3RpdmUoZXhl
YyktPmdldEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKHZhbHVlLCB0cnVlKTsKLSAgICBicmVh
azsKLSAgZGVmYXVsdDoKLSAgICBrZFdhcm5pbmcoKSA8PCAiSFRNTERvY3VtZW50OjpwdXRWYWx1
ZVByb3BlcnR5IHVuaGFuZGxlZCB0b2tlbiAiIDw8IHRva2VuIDw8IGVuZGw7Ci0gIH0KKyAgICBv
blJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7CiB9CiAKLXZvaWQgWE1M
SHR0cFJlcXVlc3Q6Om1hcmsoKQorUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBYTUxIdHRwUmVx
dWVzdEltcGw6OmdldE9uTG9hZExpc3RlbmVyKCkgY29uc3QKIHsKLSAgRE9NT2JqZWN0OjptYXJr
KCk7CisgICAgcmV0dXJuIG9uTG9hZExpc3RlbmVyOworfQogCi0gIGlmIChvblJlYWR5U3RhdGVD
aGFuZ2VMaXN0ZW5lcikKLSAgICBvblJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lci0+bWFyaygpOwot
Ci0gIGlmIChvbkxvYWRMaXN0ZW5lcikKLSAgICBvbkxvYWRMaXN0ZW5lci0+bWFyaygpOwordm9p
ZCBYTUxIdHRwUmVxdWVzdEltcGw6OnNldE9uTG9hZExpc3RlbmVyKEV2ZW50TGlzdGVuZXIqIGV2
ZW50TGlzdGVuZXIpCit7CisgICAgb25Mb2FkTGlzdGVuZXIgPSBldmVudExpc3RlbmVyOwogfQog
Ci0KLVhNTEh0dHBSZXF1ZXN0OjpYTUxIdHRwUmVxdWVzdChFeGVjU3RhdGUgKmV4ZWMsIERPTTo6
RG9jdW1lbnRJbXBsICpkKQorWE1MSHR0cFJlcXVlc3RJbXBsOjpYTUxIdHRwUmVxdWVzdEltcGwo
RG9jdW1lbnRJbXBsICpkLCBLSlM6OkpTT2JqZWN0KiBvd25lcikKICAgOiBxT2JqZWN0KG5ldyBY
TUxIdHRwUmVxdWVzdFFPYmplY3QodGhpcykpLAorICAgIG93bmVyKG93bmVyKSwKICAgICBkb2Mo
ZCksCiAgICAgYXN5bmModHJ1ZSksCiAgICAgam9iKDApLApAQCAtMjY0LDE1ICsxNzYsMTQgQEAK
ICAgICBjcmVhdGVkRG9jdW1lbnQoZmFsc2UpLAogICAgIGFib3J0ZWQoZmFsc2UpCiB7Ci0gIHNl
dFByb3RvdHlwZShYTUxIdHRwUmVxdWVzdFByb3RvOjpzZWxmKGV4ZWMpKTsKIH0KIAotWE1MSHR0
cFJlcXVlc3Q6On5YTUxIdHRwUmVxdWVzdCgpCitYTUxIdHRwUmVxdWVzdEltcGw6On5YTUxIdHRw
UmVxdWVzdEltcGwoKQogewogICAgIGRlbGV0ZSBxT2JqZWN0OwogfQogCi12b2lkIFhNTEh0dHBS
ZXF1ZXN0OjpjaGFuZ2VTdGF0ZShYTUxIdHRwUmVxdWVzdFN0YXRlIG5ld1N0YXRlKQordm9pZCBY
TUxIdHRwUmVxdWVzdEltcGw6OmNoYW5nZVN0YXRlKFhNTEh0dHBSZXF1ZXN0U3RhdGUgbmV3U3Rh
dGUpCiB7CiAgIGlmIChzdGF0ZSAhPSBuZXdTdGF0ZSkgewogICAgIHN0YXRlID0gbmV3U3RhdGU7
CkBAIC0yOTMsNyArMjA0LDcgQEAKICAgfQogfQogCi1ib29sIFhNTEh0dHBSZXF1ZXN0Ojp1cmxN
YXRjaGVzRG9jdW1lbnREb21haW4oY29uc3QgS1VSTCYgX3VybCkgY29uc3QKK2Jvb2wgWE1MSHR0
cFJlcXVlc3RJbXBsOjp1cmxNYXRjaGVzRG9jdW1lbnREb21haW4oY29uc3QgS1VSTCYgX3VybCkg
Y29uc3QKIHsKICAgS1VSTCBkb2N1bWVudFVSTChkb2MtPlVSTCgpKTsKIApAQCAtMzEyLDcgKzIy
Myw3IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBYTUxIdHRwUmVxdWVzdDo6b3Blbihj
b25zdCBRU3RyaW5nJiBfbWV0aG9kLCBjb25zdCBLVVJMJiBfdXJsLCBib29sIF9hc3luYykKK3Zv
aWQgWE1MSHR0cFJlcXVlc3RJbXBsOjpvcGVuKGNvbnN0IERPTVN0cmluZyYgX21ldGhvZCwgY29u
c3QgS1VSTCYgX3VybCwgYm9vbCBfYXN5bmMpCiB7CiAgIGFib3J0KCk7CiAgIGFib3J0ZWQgPSBm
YWxzZTsKQEAgLTMzNSwxNCArMjQ2LDE0IEBACiAgIH0KIAogICAKLSAgbWV0aG9kID0gX21ldGhv
ZDsKKyAgbWV0aG9kID0gX21ldGhvZC5xc3RyaW5nKCk7CiAgIHVybCA9IF91cmw7CiAgIGFzeW5j
ID0gX2FzeW5jOwogCiAgIGNoYW5nZVN0YXRlKExvYWRpbmcpOwogfQogCi12b2lkIFhNTEh0dHBS
ZXF1ZXN0OjpzZW5kKGNvbnN0IERPTVN0cmluZyYgX2JvZHkpCit2b2lkIFhNTEh0dHBSZXF1ZXN0
SW1wbDo6c2VuZChjb25zdCBET01TdHJpbmcmIF9ib2R5KQogewogICBpZiAoIWRvYykKICAgICBy
ZXR1cm47CkBAIC0zODIsNyArMjkzLDcgQEAKIAogICAgIHsgLy8gc2NvcGUKICAgICAgICAgLy8g
YXZvaWQgZGVhZGxvY2sgaW4gY2FzZSB0aGUgbG9hZGVyIHdhbnRzIHRvIHVzZSBKUyBvbiBhIGJh
Y2tncm91bmQgdGhyZWFkCi0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BMb2NrczsK
KyAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wTG9ja3M7CiAKICAgICAgICAg
ZGF0YSA9IEtXUVNlcnZlU3luY2hyb25vdXNSZXF1ZXN0KGtodG1sOjpDYWNoZTo6bG9hZGVyKCks
IGRvYy0+ZG9jTG9hZGVyKCksIGpvYiwgZmluYWxVUkwsIGhlYWRlcnMpOwogICAgIH0KQEAgLTM5
Myw5ICszMDQsOSBAQAogICAgIHJldHVybjsKICAgfQogCi0gIHsKLSAgICBKU0xvY2sgbG9jazsK
LSAgICBnY1Byb3RlY3QodGhpcyk7CisgIGlmIChvd25lcikgeworICAgIEtKUzo6SlNMb2NrIGxv
Y2s7CisgICAgS0pTOjpnY1Byb3RlY3Qob3duZXIpOwogICB9CiAgIAogICBxT2JqZWN0LT5jb25u
ZWN0KCBqb2IsIFNJR05BTCggcmVzdWx0KCBLSU86OkpvYiogKSApLApAQCAtNDEwLDcgKzMyMSw3
IEBACiAgIEtXUVNlcnZlUmVxdWVzdChraHRtbDo6Q2FjaGU6OmxvYWRlcigpLCBkb2MtPmRvY0xv
YWRlcigpLCBqb2IpOwogfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjphYm9ydCgpCit2b2lkIFhN
TEh0dHBSZXF1ZXN0SW1wbDo6YWJvcnQoKQogewogICBib29sIGhhZEpvYiA9IGpvYjsKIApAQCAt
NDIyLDQ4ICszMzMsNTMgQEAKICAgZGVjb2RlciA9IDA7CiAgIGFib3J0ZWQgPSB0cnVlOwogCi0g
IGlmIChoYWRKb2IpIHsKLSAgICBKU0xvY2sgbG9jazsKLSAgICBnY1VucHJvdGVjdCh0aGlzKTsK
KyAgaWYgKGhhZEpvYiAmJiBvd25lcikgeworICAgIEtKUzo6SlNMb2NrIGxvY2s7CisgICAgS0pT
OjpnY1VucHJvdGVjdChvd25lcik7CiAgIH0KIH0KIAotdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2V0
UmVxdWVzdEhlYWRlcihjb25zdCBRU3RyaW5nJiBuYW1lLCBjb25zdCBRU3RyaW5nICZ2YWx1ZSkK
K3ZvaWQgWE1MSHR0cFJlcXVlc3RJbXBsOjpvdmVycmlkZU1JTUVUeXBlKGNvbnN0IERPTVN0cmlu
ZyYgb3ZlcnJpZGUpCiB7CisgIE1JTUVUeXBlT3ZlcnJpZGUgPSBvdmVycmlkZS5xc3RyaW5nKCk7
Cit9CisKK3ZvaWQgWE1MSHR0cFJlcXVlc3RJbXBsOjpzZXRSZXF1ZXN0SGVhZGVyKGNvbnN0IERP
TVN0cmluZyYgbmFtZSwgY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSkKK3sKICAgaWYgKHJlcXVlc3RI
ZWFkZXJzLmxlbmd0aCgpID4gMCkgewogICAgIHJlcXVlc3RIZWFkZXJzICs9ICJcclxuIjsKICAg
fQotICByZXF1ZXN0SGVhZGVycyArPSBuYW1lOworICByZXF1ZXN0SGVhZGVycyArPSBuYW1lLnFz
dHJpbmcoKTsKICAgcmVxdWVzdEhlYWRlcnMgKz0gIjogIjsKLSAgcmVxdWVzdEhlYWRlcnMgKz0g
dmFsdWU7CisgIHJlcXVlc3RIZWFkZXJzICs9IHZhbHVlLnFzdHJpbmcoKTsKIH0KIAotUVN0cmlu
ZyBYTUxIdHRwUmVxdWVzdDo6Z2V0UmVxdWVzdEhlYWRlcihjb25zdCBRU3RyaW5nJiBuYW1lKSBj
b25zdAorUVN0cmluZyBYTUxIdHRwUmVxdWVzdEltcGw6OmdldFJlcXVlc3RIZWFkZXIoY29uc3Qg
UVN0cmluZyYgbmFtZSkgY29uc3QKIHsKICAgcmV0dXJuIGdldFNwZWNpZmljSGVhZGVyKHJlcXVl
c3RIZWFkZXJzLCBuYW1lKTsKIH0KIAotSlNWYWx1ZSAqWE1MSHR0cFJlcXVlc3Q6OmdldEFsbFJl
c3BvbnNlSGVhZGVycygpIGNvbnN0CitET01TdHJpbmcgWE1MSHR0cFJlcXVlc3RJbXBsOjpnZXRB
bGxSZXNwb25zZUhlYWRlcnMoKSBjb25zdAogewogICBpZiAocmVzcG9uc2VIZWFkZXJzLmlzRW1w
dHkoKSkgewotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBET01TdHJpbmco
KTsKICAgfQogCiAgIGludCBlbmRPZkxpbmUgPSByZXNwb25zZUhlYWRlcnMuZmluZCgiXG4iKTsK
IAogICBpZiAoZW5kT2ZMaW5lID09IC0xKSB7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgcmV0dXJuIERPTVN0cmluZygpOwogICB9CiAKLSAgcmV0dXJuIGpzU3RyaW5nKHJlc3BvbnNl
SGVhZGVycy5taWQoZW5kT2ZMaW5lICsgMSkgKyAiXG4iKTsKKyAgcmV0dXJuIHJlc3BvbnNlSGVh
ZGVycy5taWQoZW5kT2ZMaW5lICsgMSkgKyAiXG4iOwogfQogCi1RU3RyaW5nIFhNTEh0dHBSZXF1
ZXN0OjpnZXRSZXNwb25zZUhlYWRlcihjb25zdCBRU3RyaW5nJiBuYW1lKSBjb25zdAorRE9NU3Ry
aW5nIFhNTEh0dHBSZXF1ZXN0SW1wbDo6Z2V0UmVzcG9uc2VIZWFkZXIoY29uc3QgRE9NU3RyaW5n
JiBuYW1lKSBjb25zdAogewotICByZXR1cm4gZ2V0U3BlY2lmaWNIZWFkZXIocmVzcG9uc2VIZWFk
ZXJzLCBuYW1lKTsKKyAgcmV0dXJuIGdldFNwZWNpZmljSGVhZGVyKHJlc3BvbnNlSGVhZGVycywg
bmFtZS5xc3RyaW5nKCkpOwogfQogCi1RU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRTcGVjaWZp
Y0hlYWRlcihjb25zdCBRU3RyaW5nJiBoZWFkZXJzLCBjb25zdCBRU3RyaW5nJiBuYW1lKQorUVN0
cmluZyBYTUxIdHRwUmVxdWVzdEltcGw6OmdldFNwZWNpZmljSGVhZGVyKGNvbnN0IFFTdHJpbmcm
IGhlYWRlcnMsIGNvbnN0IFFTdHJpbmcmIG5hbWUpCiB7CiAgIGlmIChoZWFkZXJzLmlzRW1wdHko
KSkKICAgICByZXR1cm4gUVN0cmluZygpOwpAQCAtNDg4LDQ3ICs0MDQsNDQgQEAKICAgcmV0dXJu
IGhlYWRlcnMubWlkKGhlYWRlckxpbmVQb3MgKyBtYXRjaExlbmd0aCwgZW5kT2ZMaW5lIC0gKGhl
YWRlckxpbmVQb3MgKyBtYXRjaExlbmd0aCkpLnN0cmlwV2hpdGVTcGFjZSgpOwogfQogCi1ib29s
IFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZUlzWE1MKCkgY29uc3QKK2Jvb2wgWE1MSHR0cFJlcXVl
c3RJbXBsOjpyZXNwb25zZUlzWE1MKCkgY29uc3QKIHsKICAgICBRU3RyaW5nIG1pbWVUeXBlID0g
Z2V0TUlNRVR5cGUoTUlNRVR5cGVPdmVycmlkZSk7CiAgICAgaWYgKG1pbWVUeXBlLmlzRW1wdHko
KSkKLSAgICAgICAgbWltZVR5cGUgPSBnZXRNSU1FVHlwZShnZXRSZXNwb25zZUhlYWRlcigiQ29u
dGVudC1UeXBlIikpOworICAgICAgICBtaW1lVHlwZSA9IGdldE1JTUVUeXBlKGdldFJlc3BvbnNl
SGVhZGVyKCJDb250ZW50LVR5cGUiKS5xc3RyaW5nKCkpOwogICAgIGlmIChtaW1lVHlwZS5pc0Vt
cHR5KCkpCiAgICAgICBtaW1lVHlwZSA9ICJ0ZXh0L3htbCI7CiAgICAgCiAgICAgcmV0dXJuIERP
TUltcGxlbWVudGF0aW9uSW1wbDo6aXNYTUxNSU1FVHlwZShtaW1lVHlwZSk7CiB9CiAKLUpTVmFs
dWUgKlhNTEh0dHBSZXF1ZXN0OjpnZXRTdGF0dXMoKSBjb25zdAoraW50IFhNTEh0dHBSZXF1ZXN0
SW1wbDo6Z2V0U3RhdHVzKCkgY29uc3QKIHsKLSAgaWYgKHJlc3BvbnNlSGVhZGVycy5pc0VtcHR5
KCkpIHsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgfQorICBpZiAocmVzcG9uc2VIZWFk
ZXJzLmlzRW1wdHkoKSkKKyAgICByZXR1cm4gLTE7CiAgIAogICBpbnQgZW5kT2ZMaW5lID0gcmVz
cG9uc2VIZWFkZXJzLmZpbmQoIlxuIik7CiAgIFFTdHJpbmcgZmlyc3RMaW5lID0gZW5kT2ZMaW5l
ID09IC0xID8gcmVzcG9uc2VIZWFkZXJzIDogcmVzcG9uc2VIZWFkZXJzLmxlZnQoZW5kT2ZMaW5l
KTsKICAgaW50IGNvZGVTdGFydCA9IGZpcnN0TGluZS5maW5kKCIgIik7CiAgIGludCBjb2RlRW5k
ID0gZmlyc3RMaW5lLmZpbmQoIiAiLCBjb2RlU3RhcnQgKyAxKTsKICAgCi0gIGlmIChjb2RlU3Rh
cnQgPT0gLTEgfHwgY29kZUVuZCA9PSAtMSkgewotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICB9CisgIGlmIChjb2RlU3RhcnQgPT0gLTEgfHwgY29kZUVuZCA9PSAtMSkKKyAgICByZXR1cm4g
LTE7CiAgIAogICBRU3RyaW5nIG51bWJlciA9IGZpcnN0TGluZS5taWQoY29kZVN0YXJ0ICsgMSwg
Y29kZUVuZCAtIChjb2RlU3RhcnQgKyAxKSk7CiAgIAogICBib29sIG9rID0gZmFsc2U7CiAgIGlu
dCBjb2RlID0gbnVtYmVyLnRvSW50KCZvayk7Ci0gIGlmICghb2spIHsKLSAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgfQorICBpZiAoIW9rKQorICAgIHJldHVybiAtMTsKIAotICByZXR1cm4g
anNOdW1iZXIoY29kZSk7CisgIHJldHVybiBjb2RlOwogfQogCi1KU1ZhbHVlICpYTUxIdHRwUmVx
dWVzdDo6Z2V0U3RhdHVzVGV4dCgpIGNvbnN0CitET01TdHJpbmcgWE1MSHR0cFJlcXVlc3RJbXBs
OjpnZXRTdGF0dXNUZXh0KCkgY29uc3QKIHsKICAgaWYgKHJlc3BvbnNlSGVhZGVycy5pc0VtcHR5
KCkpIHsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gRE9NU3RyaW5nKCk7
CiAgIH0KICAgCiAgIGludCBlbmRPZkxpbmUgPSByZXNwb25zZUhlYWRlcnMuZmluZCgiXG4iKTsK
QEAgLTUzNywxNSArNDUwLDE1IEBACiAgIGludCBjb2RlRW5kID0gZmlyc3RMaW5lLmZpbmQoIiAi
LCBjb2RlU3RhcnQgKyAxKTsKIAogICBpZiAoY29kZVN0YXJ0ID09IC0xIHx8IGNvZGVFbmQgPT0g
LTEpIHsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gRE9NU3RyaW5nKCk7
CiAgIH0KICAgCiAgIFFTdHJpbmcgc3RhdHVzVGV4dCA9IGZpcnN0TGluZS5taWQoY29kZUVuZCAr
IDEsIGVuZE9mTGluZSAtIChjb2RlRW5kICsgMSkpLnN0cmlwV2hpdGVTcGFjZSgpOwogICAKLSAg
cmV0dXJuIGpzU3RyaW5nKHN0YXR1c1RleHQpOworICByZXR1cm4gRE9NU3RyaW5nKHN0YXR1c1Rl
eHQpOwogfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0Ojpwcm9jZXNzU3luY0xvYWRSZXN1bHRzKGNv
bnN0IEJ5dGVBcnJheSAmZGF0YSwgY29uc3QgS1VSTCAmZmluYWxVUkwsIGNvbnN0IFFTdHJpbmcg
JmhlYWRlcnMpCit2b2lkIFhNTEh0dHBSZXF1ZXN0SW1wbDo6cHJvY2Vzc1N5bmNMb2FkUmVzdWx0
cyhjb25zdCBCeXRlQXJyYXkgJmRhdGEsIGNvbnN0IEtVUkwgJmZpbmFsVVJMLCBjb25zdCBRU3Ry
aW5nICZoZWFkZXJzKQogewogICBpZiAoIXVybE1hdGNoZXNEb2N1bWVudERvbWFpbihmaW5hbFVS
TCkpIHsKICAgICBhYm9ydCgpOwpAQCAtNTcwLDcgKzQ4Myw3IEBACiAgIHNsb3RGaW5pc2hlZCgw
KTsKIH0KIAotdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2xvdEZpbmlzaGVkKEtJTzo6Sm9iICopCit2
b2lkIFhNTEh0dHBSZXF1ZXN0SW1wbDo6c2xvdEZpbmlzaGVkKEtJTzo6Sm9iICopCiB7CiAgIGlm
IChyZXNwb25zZUhlYWRlcnMuaXNFbXB0eSgpICYmIGpvYikKICAgICByZXNwb25zZUhlYWRlcnMg
PSBqb2ItPnF1ZXJ5TWV0YURhdGEoIkhUVFAtSGVhZGVycyIpOwpAQCAtNTg3LDE4ICs1MDAsMjAg
QEAKICAgY2hhbmdlU3RhdGUoQ29tcGxldGVkKTsKICAgZGVjb2RlciA9IDA7CiAKLSAgSlNMb2Nr
IGxvY2s7Ci0gIGdjVW5wcm90ZWN0KHRoaXMpOworICBpZiAob3duZXIpIHsKKyAgICBLSlM6OkpT
TG9jayBsb2NrOworICAgIEtKUzo6Z2NVbnByb3RlY3Qob3duZXIpOworICB9CiB9CiAKLXZvaWQg
WE1MSHR0cFJlcXVlc3Q6OnNsb3RSZWRpcmVjdGlvbihLSU86OkpvYiosIGNvbnN0IEtVUkwmIHVy
bCkKK3ZvaWQgWE1MSHR0cFJlcXVlc3RJbXBsOjpzbG90UmVkaXJlY3Rpb24oS0lPOjpKb2IqLCBj
b25zdCBLVVJMJiB1cmwpCiB7CiAgIGlmICghdXJsTWF0Y2hlc0RvY3VtZW50RG9tYWluKHVybCkp
IHsKICAgICBhYm9ydCgpOwogICB9CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNsb3REYXRh
KEtJTzo6Sm9iKiwgY29uc3QgY2hhciAqZGF0YSwgaW50IGxlbikKK3ZvaWQgWE1MSHR0cFJlcXVl
c3RJbXBsOjpzbG90RGF0YShLSU86OkpvYiosIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4pCiB7
CiAgIGlmIChyZXNwb25zZUhlYWRlcnMuaXNFbXB0eSgpICYmIGpvYikKICAgICByZXNwb25zZUhl
YWRlcnMgPSBqb2ItPnF1ZXJ5TWV0YURhdGEoIkhUVFAtSGVhZGVycyIpOwpAQCAtNjA5LDcgKzUy
NCw3IEBACiAgIGlmICghZGVjb2RlcikgewogICAgIGVuY29kaW5nID0gZ2V0Q2hhcnNldChNSU1F
VHlwZU92ZXJyaWRlKTsKICAgICBpZiAoZW5jb2RpbmcuaXNFbXB0eSgpKQotICAgICAgZW5jb2Rp
bmcgPSBnZXRDaGFyc2V0KGdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKSk7CisgICAg
ICBlbmNvZGluZyA9IGdldENoYXJzZXQoZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIp
LnFzdHJpbmcoKSk7CiAgICAgaWYgKGVuY29kaW5nLmlzRW1wdHkoKSAmJiBqb2IpCiAgICAgICBl
bmNvZGluZyA9IGpvYi0+cXVlcnlNZXRhRGF0YSgiY2hhcnNldCIpOwogICAgIApAQCAtNjM2LDEz
ICs1NTEsMTMgQEAKICAgfQogfQogCi1YTUxIdHRwUmVxdWVzdDo6UmVxdWVzdHNNYXAmIFhNTEh0
dHBSZXF1ZXN0OjpyZXF1ZXN0c0J5RG9jdW1lbnQoKQorWE1MSHR0cFJlcXVlc3RJbXBsOjpSZXF1
ZXN0c01hcCYgWE1MSHR0cFJlcXVlc3RJbXBsOjpyZXF1ZXN0c0J5RG9jdW1lbnQoKQogewogICAg
IHN0YXRpYyBSZXF1ZXN0c01hcCBtYXA7CiAgICAgcmV0dXJuIG1hcDsKIH0KIAotdm9pZCBYTUxI
dHRwUmVxdWVzdDo6YWRkVG9SZXF1ZXN0c0J5RG9jdW1lbnQoKQordm9pZCBYTUxIdHRwUmVxdWVz
dEltcGw6OmFkZFRvUmVxdWVzdHNCeURvY3VtZW50KCkKIHsKICAgYXNzZXJ0KGRvYyk7CiAKQEAg
LTY1Niw3ICs1NzEsNyBAQAogICByZXF1ZXN0cy0+aW5zZXJ0KHRoaXMpOwogfQogCi12b2lkIFhN
TEh0dHBSZXF1ZXN0OjpyZW1vdmVGcm9tUmVxdWVzdHNCeURvY3VtZW50KCkKK3ZvaWQgWE1MSHR0
cFJlcXVlc3RJbXBsOjpyZW1vdmVGcm9tUmVxdWVzdHNCeURvY3VtZW50KCkKIHsKICAgYXNzZXJ0
KGRvYyk7CiAKQEAgLTY3NCwxMTUgKzU4OSwxMCBAQAogICB9CiB9CiAKLXZvaWQgWE1MSHR0cFJl
cXVlc3Q6OmNhbmNlbFJlcXVlc3RzKERPTTo6RG9jdW1lbnRJbXBsKiBkKQordm9pZCBYTUxIdHRw
UmVxdWVzdEltcGw6OmNhbmNlbFJlcXVlc3RzKERPTTo6RG9jdW1lbnRJbXBsKiBkKQogewogICB3
aGlsZSAoUmVxdWVzdHNTZXQqIHJlcXVlc3RzID0gcmVxdWVzdHNCeURvY3VtZW50KCkuZ2V0KGQp
KQogICAgICgqcmVxdWVzdHMtPmJlZ2luKCkpLT5hYm9ydCgpOwogfQogCi1KU1ZhbHVlICpYTUxI
dHRwUmVxdWVzdFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBKU09i
amVjdCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKLXsKLSAgaWYgKCF0aGlzT2JqLT5pbmhl
cml0cygmWE1MSHR0cFJlcXVlc3Q6OmluZm8pKQotICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFR5cGVFcnJvcik7Ci0KLSAgWE1MSHR0cFJlcXVlc3QgKnJlcXVlc3QgPSBzdGF0aWNfY2FzdDxY
TUxIdHRwUmVxdWVzdCAqPih0aGlzT2JqKTsKLQotICBzd2l0Y2ggKGlkKSB7Ci0gIGNhc2UgWE1M
SHR0cFJlcXVlc3Q6OkFib3J0OiB7Ci0gICAgcmVxdWVzdC0+YWJvcnQoKTsKLSAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKLSAgfQotICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpHZXRBbGxSZXNwb25z
ZUhlYWRlcnM6IHsKLSAgICBpZiAoYXJncy5zaXplKCkgIT0gMCkgewotICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlcXVlc3QtPmdldEFsbFJlc3BvbnNl
SGVhZGVycygpOwotICB9Ci0gIGNhc2UgWE1MSHR0cFJlcXVlc3Q6OkdldFJlc3BvbnNlSGVhZGVy
OiB7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDEpIHsKLSAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgIH0KLSAgICAKLSAgICBRU3RyaW5nIGhlYWRlciA9IHJlcXVlc3QtPmdldFJlc3Bv
bnNlSGVhZGVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSk7Ci0KLSAgICBpZiAo
aGVhZGVyLmlzTnVsbCgpKQotICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICByZXR1
cm4ganNTdHJpbmcoaGVhZGVyKTsKLSAgfQotICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpPcGVuOgot
ICAgIHsKLSAgICAgIGlmIChhcmdzLnNpemUoKSA8IDIgfHwgYXJncy5zaXplKCkgPiA1KSB7Ci0g
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgfQotICAgIAotICAgICAgUVN0cmlu
ZyBtZXRob2QgPSBhcmdzWzBdLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCk7Ci0gICAgICBLVVJM
IHVybCA9IEtVUkwoV2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+ZnJhbWUoKS0+eG1sRG9j
SW1wbCgpLT5jb21wbGV0ZVVSTChhcmdzWzFdLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkpKTsK
LQotICAgICAgYm9vbCBhc3luYyA9IHRydWU7Ci0gICAgICBpZiAoYXJncy5zaXplKCkgPj0gMykg
ewotICAgICAgICBhc3luYyA9IGFyZ3NbMl0tPnRvQm9vbGVhbihleGVjKTsKLSAgICAgIH0KLSAg
ICAKLSAgICAgIGlmIChhcmdzLnNpemUoKSA+PSA0KSB7Ci0gICAgICAgIHVybC5zZXRVc2VyKGFy
Z3NbM10tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAg
IGlmIChhcmdzLnNpemUoKSA+PSA1KSB7Ci0gICAgICAgIHVybC5zZXRQYXNzKGFyZ3NbNF0tPnRv
U3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSk7Ci0gICAgICB9Ci0KLSAgICAgIHJlcXVlc3QtPm9wZW4o
bWV0aG9kLCB1cmwsIGFzeW5jKTsKLQotICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAg
fQotICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpTZW5kOgotICAgIHsKLSAgICAgIGlmIChhcmdzLnNp
emUoKSA+IDEpIHsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0KLSAg
ICAgIGlmIChyZXF1ZXN0LT5zdGF0ZSAhPSBMb2FkaW5nKSB7Ci0gICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgICAgfQotCi0gICAgICBET01TdHJpbmcgYm9keTsKLQotICAgICAgaWYg
KGFyZ3Muc2l6ZSgpID49IDEpIHsKLSAgICAgICAgaWYgKGFyZ3NbMF0tPnRvT2JqZWN0KGV4ZWMp
LT5pbmhlcml0cygmRE9NRG9jdW1lbnQ6OmluZm8pKSB7Ci0gICAgICAgICAgRG9jdW1lbnRJbXBs
ICpkb2MgPSBzdGF0aWNfY2FzdDxEb2N1bWVudEltcGwgKj4oc3RhdGljX2Nhc3Q8RE9NRG9jdW1l
bnQgKj4oYXJnc1swXS0+dG9PYmplY3QoZXhlYykpLT5pbXBsKCkpOwotICAgICAgICAgIGJvZHkg
PSBkb2MtPnRvU3RyaW5nKCkucXN0cmluZygpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
IC8vIGNvbnZlcnRpbmcgY2VydGFpbiB2YWx1ZXMgKGxpa2UgbnVsbCkgdG8gb2JqZWN0IGNhbiBz
ZXQgYW4gZXhjZXB0aW9uCi0gICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICAg
ICAgICBib2R5ID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCk7Ci0gICAgICAg
IH0KLSAgICAgIH0KLQotICAgICAgcmVxdWVzdC0+c2VuZChib2R5KTsKLQotICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpTZXRSZXF1ZXN0
SGVhZGVyOiB7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDIpIHsKLSAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgIH0KLSAgICAKLSAgICByZXF1ZXN0LT5zZXRSZXF1ZXN0SGVhZGVyKGFy
Z3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSwgYXJnc1sxXS0+dG9TdHJpbmcoZXhlYyku
cXN0cmluZygpKTsKLSAgICAKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgfQotICBjYXNl
IFhNTEh0dHBSZXF1ZXN0OjpPdmVycmlkZU1JTUVUeXBlOiB7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgp
ICE9IDEpIHsKLSAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLSAgICByZXF1ZXN0
LT5NSU1FVHlwZU92ZXJyaWRlID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpOwot
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICB9Ci0gIH0KLQotICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLX0KLQogfSAvLyBlbmQgbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTIxNTEpCisrKyBXZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTY2Nyw2ICsx
NjY3LDEwIEBACiAJCUJDRkIyRjc5MDk3QTJFMUEwMEJBNzAzRCAvKiBBcmVuYS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGQjJGNzUwOTdBMkUxQTAw
QkE3MDNEIC8qIEFyZW5hLmggKi87IH07CiAJCUUxRUU3NzM3MDhGMTA4NkMwMDE2Njg3MCAvKiBX
ZWJDb3JlVGV4dERlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxRUU3NzM1MDhGMTA4NkMwMDE2Njg3MCAvKiBXZWJDb3JlVGV4dERlY29kZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMUVF
NzczODA4RjEwODZDMDAxNjY4NzAgLyogV2ViQ29yZVRleHREZWNvZGVyLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFFRTc3MzYwOEYxMDg2QzAwMTY2
ODcwIC8qIFdlYkNvcmVUZXh0RGVjb2Rlci5tbSAqLzsgfTsKKwkJRTFGODM5NkYwOTdENzc0MzAw
N0RCN0FEIC8qIHhtbGh0dHByZXF1ZXN0aW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUY4Mzk2RDA5N0Q3NzQzMDA3REI3QUQgLyogeG1saHR0
cHJlcXVlc3RpbXBsLmNwcCAqLzsgfTsKKwkJRTFGODM5NzAwOTdENzc0MzAwN0RCN0FEIC8qIHht
bGh0dHByZXF1ZXN0aW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTFGODM5NkUwOTdENzc0MzAwN0RCN0FEIC8qIHhtbGh0dHByZXF1ZXN0aW1wbC5o
ICovOyB9OworCQlFMUY4Mzk3MTA5N0Q3NzQzMDA3REI3QUQgLyogeG1saHR0cHJlcXVlc3RpbXBs
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRjgz
OTZEMDk3RDc3NDMwMDdEQjdBRCAvKiB4bWxodHRwcmVxdWVzdGltcGwuY3BwICovOyB9OworCQlF
MUY4Mzk3MjA5N0Q3NzQzMDA3REI3QUQgLyogeG1saHR0cHJlcXVlc3RpbXBsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUY4Mzk2RTA5N0Q3NzQzMDA3
REI3QUQgLyogeG1saHR0cHJlcXVlc3RpbXBsLmggKi87IH07CiAJCUVEMDQ4QUJDMDgzM0YxMzIw
MDZFMUU2NyAvKiB0ZXh0QXJlYVJlc2l6ZUNvcm5lci50aWZmIGluIFJlc291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFRDA0OEFCQjA4MzNGMTMyMDA2RTFFNjcgLyog
dGV4dEFyZWFSZXNpemVDb3JuZXIudGlmZiAqLzsgfTsKIAkJRkFFMDQxOEIwOTc1OTY5NDAwMDU0
MEJFIC8qIFJlbmRlclNWR0ltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGQUUwNDE4OTA5NzU5Njk0MDAwNTQwQkUgLyogUmVuZGVyU1ZHSW1hZ2Uu
aCAqLzsgfTsKIAkJRkFFMDQxOEMwOTc1OTY5NDAwMDU0MEJFIC8qIFJlbmRlclNWR0ltYWdlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZBRTA0MThB
MDk3NTk2OTQwMDA1NDBCRSAvKiBSZW5kZXJTVkdJbWFnZS5jcHAgKi87IH07CkBAIC0yNjA0LDYg
KzI2MDgsOCBAQAogCQlCRUY3RUVBMTA1RkY4RjBEMDA5NzE3RUUgLyogS1dRRWRpdENvbW1hbmQu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVu
dFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBLV1FFZGl0Q29tbWFuZC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGgg
PSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUUxRUU3NzM1MDhGMTA4NkMwMDE2Njg3MCAvKiBXZWJD
b3JlVGV4dERlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJDb3JlVGV4dERlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
dGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUUxRUU3NzM2MDhGMTA4NkMwMDE2Njg3
MCAvKiBXZWJDb3JlVGV4dERlY29kZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVUZXh0RGVjb2Rlci5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CisJCUUxRjgz
OTZEMDk3RDc3NDMwMDdEQjdBRCAvKiB4bWxodHRwcmVxdWVzdGltcGwuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0geG1saHR0cHJlcXVlc3RpbXBsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFGODM5NkUwOTdENzc0MzAwN0RCN0FEIC8qIHhtbGh0
dHByZXF1ZXN0aW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB4bWxodHRw
cmVxdWVzdGltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUQwNDhBQkIwODMz
RjEzMjAwNkUxRTY3IC8qIHRleHRBcmVhUmVzaXplQ29ybmVyLnRpZmYgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBpbWFnZS50aWZmOyBuYW1lID0gdGV4
dEFyZWFSZXNpemVDb3JuZXIudGlmZjsgcGF0aCA9IFJlc291cmNlcy90ZXh0QXJlYVJlc2l6ZUNv
cm5lci50aWZmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFREE0QUM5NzA3NkZCODkx
MDBERDIzRUMgLyogZWRpdF9hY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gZWRpdF9hY3Rpb25zLmg7IHBhdGggPSBlZGl0aW5nL2VkaXRf
YWN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJz
ID0gMDsgfTsKIAkJRjUxMTdCQzkwMkY5RkZFRjAxODYzNUNFIC8qIEtXUVNpZ25hbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gS1dRU2lnbmFsLmg7IHBhdGggPSBrd3EvS1dR
U2lnbmFsLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKQEAgLTQwMzMsNiArNDAzOSw4
IEBACiAJCQkJRjUyM0QyMTEwMkRFNDM2OTAxODYzNUNBIC8qIGtqc193aW5kb3cuaCAqLywKIAkJ
CQk2NTRFN0VFMDA1NjlGRDQ2MDAzNThCRDIgLyogeG1saHR0cHJlcXVlc3QuY3BwICovLAogCQkJ
CTY1NEU3RUUxMDU2OUZENDYwMDM1OEJEMiAvKiB4bWxodHRwcmVxdWVzdC5oICovLAorCQkJCUUx
RjgzOTZEMDk3RDc3NDMwMDdEQjdBRCAvKiB4bWxodHRwcmVxdWVzdGltcGwuY3BwICovLAorCQkJ
CUUxRjgzOTZFMDk3RDc3NDMwMDdEQjdBRCAvKiB4bWxodHRwcmVxdWVzdGltcGwuaCAqLywKIAkJ
CQk2NTkxMkIwRDA1ODY5MjEwMDAxMjNBNjkgLyogeG1sc2VyaWFsaXplci5jcHAgKi8sCiAJCQkJ
NjU5MTJCMEUwNTg2OTIxMDAwMTIzQTY5IC8qIHhtbHNlcmlhbGl6ZXIuaCAqLywKIAkJCQkxQTY5
RDM4MDA4NTYyNzQxMDAwOTg4MEQgLyogZG9tcGFyc2VyLmNwcCAqLywKQEAgLTUwMDYsNiArNTAx
NCw3IEBACiAJCQkJQkNFQTQ3OTkwOTdDQUFDODAwOTRDOUU0IC8qIGNzc2hlbHBlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkNFQTQ3OUIwOTdDQUFDODAwOTRDOUU0IC8qIGNzc3BhcnNlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ3OUUwOTdDQUFDODAwOTRDOUU0IC8qIGNzc3N0eWxlc2Vs
ZWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxRjgzOTcwMDk3RDc3NDMwMDdEQjdBRCAvKiB4
bWxodHRwcmVxdWVzdGltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNTM1Niw2ICs1MzY1LDcgQEAK
IAkJCQk1RDgyMUUwNTA5N0NDMDdFMDAyODk2NDYgLyogV2ViQ29yZVBhZ2VCcmlkZ2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTVEODIxRTA2MDk3Q0MwN0UwMDI4OTY0NiAvKiBNYWNGcmFtZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNUQ4MjFFMEQwOTdDQzU3MjAwMjg5NjQ2IC8qIFdlYkNvcmVGcmFt
ZU5hbWVzcGFjZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxRjgzOTcyMDk3RDc3NDMwMDdEQjdB
RCAvKiB4bWxodHRwcmVxdWVzdGltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNjkwNCw2ICs2OTE0
LDcgQEAKIAkJCQlCQ0VBNDc5ODA5N0NBQUM4MDA5NEM5RTQgLyogY3NzaGVscGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDRUE0NzlBMDk3Q0FBQzgwMDk0QzlFNCAvKiBjc3NwYXJzZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFQTQ3OUQwOTdDQUFDODAwOTRDOUU0IC8qIGNzc3N0eWxl
c2VsZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTFGODM5NkYwOTdENzc0MzAwN0RCN0FE
IC8qIHhtbGh0dHByZXF1ZXN0aW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTcyMDQsNiArNzIx
NSw3IEBACiAJCQkJNUQ4MjFFMDcwOTdDQzA3RTAwMjg5NjQ2IC8qIFdlYkNvcmVQYWdlQnJpZGdl
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUQ4MjFFMDgwOTdDQzA3RjAwMjg5NjQ2IC8qIE1hY0Zy
YW1lLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUQ4MjFFMEMwOTdDQzU3MjAwMjg5NjQ2IC8qIFdl
YkNvcmVGcmFtZU5hbWVzcGFjZXMubSBpbiBTb3VyY2VzICovLAorCQkJCUUxRjgzOTcxMDk3RDc3
NDMwMDdEQjdBRCAvKiB4bWxodHRwcmVxdWVzdGltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4
OiBXZWJDb3JlL2t3cS9LV1FTbG90Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3dxL0tXUVNs
b3QubW0JKHJldmlzaW9uIDEyMTUxKQorKysgV2ViQ29yZS9rd3EvS1dRU2xvdC5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogI2ltcG9ydCAia2pzX3dpbmRvdy5oIgogI2ltcG9y
dCAicmVuZGVyX2Zvcm0uaCIKICNpbXBvcnQgInJlbmRlcl9sYXllci5oIgotI2ltcG9ydCAieG1s
aHR0cHJlcXVlc3QuaCIKKyNpbXBvcnQgInhtbGh0dHByZXF1ZXN0aW1wbC5oIgogI2lmZGVmIFNW
R19TVVBQT1JUCiAjZGVmaW5lIGlkIElEX0hBQ0sKICNpbXBvcnQgImtzdmcyL21pc2MvS1NWR1Rp
bWVTY2hlZHVsZXIuaCIKQEAgLTU0LDcgKzU0LDcgQEAKIHVzaW5nIGtodG1sOjpSZW5kZXJTY3Jv
bGxNZWRpYXRvcjsKIHVzaW5nIEtJTzo6Sm9iOwogdXNpbmcgS0pTOjpXaW5kb3dRT2JqZWN0Owot
dXNpbmcgS0pTOjpYTUxIdHRwUmVxdWVzdFFPYmplY3Q7Cit1c2luZyBET006OlhNTEh0dHBSZXF1
ZXN0UU9iamVjdDsKICNpZmRlZiBTVkdfU1VQUE9SVAogdXNpbmcgS1NWRzo6VGltZVNjaGVkdWxl
cjsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAxMjE1MikKKysrIFdlYkNvcmUvcGFnZS9G
cmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJhbWVQcml2YXRlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCisjaW5jbHVkZSAiTm9kZUxpc3RJbXBsLmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50
SW1wbC5oIgogI2luY2x1ZGUgIkhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsLmgiCiAjaW5jbHVk
ZSAiTWFjRnJhbWUuaCIKQEAgLTY3LDcgKzY4LDcgQEAKICNpbmNsdWRlICJ2aXNpYmxlX3RleHQu
aCIKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCiAjaW5jbHVkZSAieG1sX3Rva2VuaXplci5o
IgotI2luY2x1ZGUgInhtbGh0dHByZXF1ZXN0LmgiCisjaW5jbHVkZSAieG1saHR0cHJlcXVlc3Rp
bXBsLmgiCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8a2RlYnVnLmg+CiAjaW5jbHVk
ZSA8a2lvL2dsb2JhbC5oPgpAQCAtMzY3LDcgKzM2OCw3IEBACiAgIGlmIChEb2N1bWVudEltcGwg
KmRvYyA9IGQtPm1fZG9jKSB7CiAgICAgaWYgKERvY0xvYWRlciAqZG9jTG9hZGVyID0gZG9jLT5k
b2NMb2FkZXIoKSkKICAgICAgIENhY2hlOjpsb2FkZXIoKS0+Y2FuY2VsUmVxdWVzdHMoZG9jTG9h
ZGVyKTsKLSAgICBLSlM6OlhNTEh0dHBSZXF1ZXN0OjpjYW5jZWxSZXF1ZXN0cyhkb2MpOworICAg
IERPTTo6WE1MSHR0cFJlcXVlc3RJbXBsOjpjYW5jZWxSZXF1ZXN0cyhkb2MpOwogICB9CiAKICAg
Ly8gdGVsbCBhbGwgc3ViZnJhbWVzIHRvIHN0b3AgYXMgd2VsbAo=
</data>
<flag name="review"
          id="1308"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5760</attachid>
            <date>2006-01-18 12:23:17 -0800</date>
            <delta_ts>2006-01-19 12:57:33 -0800</delta_ts>
            <desc>revised patch</desc>
            <filename>SplitXMLHttpRequest.txt</filename>
            <type>text/plain</type>
            <size>65309</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2VjbWEvSlNYTUxIdHRwUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1s
L2VjbWEvSlNYTUxIdHRwUmVxdWVzdC5oCShyZXZpc2lvbiAxMjE3MCkKKysrIGtodG1sL2VjbWEv
SlNYTUxIdHRwUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogLyoKICAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcwogICogIENvcHlyaWdodCAo
QykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLgotICogIENvcHlyaWdodCAoQykgMjAwNSBBbGV4
ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LCAy
MDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKQEAgLTE5LDE0NSArMTksNTEgQEAKICAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAotI2lm
bmRlZiBYTUxIVFRQUkVRVUVTVF9IXwotI2RlZmluZSBYTUxIVFRQUkVRVUVTVF9IXworI2lmbmRl
ZiBKU1hNTEhUVFBSRVFVRVNUX0hfCisjZGVmaW5lIEpTWE1MSFRUUFJFUVVFU1RfSF8KIAotI2lu
Y2x1ZGUgImtqc19kb20uaCIKLSNpbmNsdWRlIDxrdXJsLmg+Ci0jaW5jbHVkZSA8a3htbGNvcmUv
SGFzaFNldC5oPgotI2luY2x1ZGUgPGt4bWxjb3JlL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDxxZ3Vh
cmRlZHB0ci5oPgotI2luY2x1ZGUgPHFvYmplY3QuaD4KLQotbmFtZXNwYWNlIGtodG1sIHsKLSAg
ICBjbGFzcyBEZWNvZGVyOwotfQotCi1uYW1lc3BhY2UgS0lPIHsKLSAgICBjbGFzcyBKb2I7Ci0g
ICAgY2xhc3MgVHJhbnNmZXJKb2I7Ci19CisjaW5jbHVkZSA8a3htbGNvcmUvUmVmUHRyLmg+Cisj
aW5jbHVkZSAia2pzX2JpbmRpbmcuaCIKIAotbmFtZXNwYWNlIEtKUyB7CituYW1lc3BhY2UgV2Vi
Q29yZSB7CisgICAgY2xhc3MgWE1MSHR0cFJlcXVlc3Q7CisgICAgY2xhc3MgRG9jdW1lbnRJbXBs
OworfTsKIAotICBjbGFzcyBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjsKLSAgY2xhc3MgWE1M
SHR0cFJlcXVlc3RRT2JqZWN0OwogCi0gIC8vIHRoZXNlIGV4YWN0IG51bWVyaWMgdmFsdWVzIGFy
ZSBpbXBvcnRhbnQgYmVjYXVzZSBKUyBleHBlY3RzIHRoZW0KLSAgZW51bSBYTUxIdHRwUmVxdWVz
dFN0YXRlIHsKLSAgICBVbmluaXRpYWxpemVkID0gMCwgIC8vIG9wZW4oKSBoYXMgbm90IGJlZW4g
Y2FsbGVkIHlldAotICAgIExvYWRpbmcgPSAxLCAgICAgICAgLy8gc2VuZCgpIGhhcyBub3QgYmVl
biBjYWxsZWQgeWV0Ci0gICAgTG9hZGVkID0gMiwgICAgICAgICAvLyBzZW5kKCkgaGFzIGJlZW4g
Y2FsbGVkLCBoZWFkZXJzIGFuZCBzdGF0dXMgYXJlIGF2YWlsYWJsZQotICAgIEludGVyYWN0aXZl
ID0gMywgICAgLy8gRG93bmxvYWRpbmcsIHJlc3BvbnNlVGV4dCBob2xkcyB0aGUgcGFydGlhbCBk
YXRhCi0gICAgQ29tcGxldGVkID0gNCAgICAgICAvLyBGaW5pc2hlZCB3aXRoIGFsbCBvcGVyYXRp
b25zCi0gIH07CituYW1lc3BhY2UgS0pTIHsKIAotICBjbGFzcyBYTUxIdHRwUmVxdWVzdENvbnN0
cnVjdG9ySW1wIDogcHVibGljIEpTT2JqZWN0IHsKKyAgY2xhc3MgSlNYTUxIdHRwUmVxdWVzdENv
bnN0cnVjdG9ySW1wIDogcHVibGljIEpTT2JqZWN0IHsKICAgcHVibGljOgotICAgIFhNTEh0dHBS
ZXF1ZXN0Q29uc3RydWN0b3JJbXAoRXhlY1N0YXRlICpleGVjLCBET006OkRvY3VtZW50SW1wbCAq
ZCk7Ci0gICAgflhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXAoKTsKKyAgICBKU1hNTEh0dHBS
ZXF1ZXN0Q29uc3RydWN0b3JJbXAoRXhlY1N0YXRlICpleGVjLCBXZWJDb3JlOjpEb2N1bWVudElt
cGwgKmQpOworICAgIH5KU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXAoKTsKICAgICB2aXJ0
dWFsIGJvb2wgaW1wbGVtZW50c0NvbnN0cnVjdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgSlNPYmpl
Y3QgKmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpOwogICBwcml2
YXRlOgotICAgIFJlZlB0cjxET006OkRvY3VtZW50SW1wbD4gZG9jOworICAgIFJlZlB0cjxXZWJD
b3JlOjpEb2N1bWVudEltcGw+IGRvYzsKICAgfTsKIAotICBjbGFzcyBYTUxIdHRwUmVxdWVzdCA6
IHB1YmxpYyBET01PYmplY3QgeworICBjbGFzcyBKU1hNTEh0dHBSZXF1ZXN0IDogcHVibGljIERP
TU9iamVjdCB7CiAgIHB1YmxpYzoKLSAgICBYTUxIdHRwUmVxdWVzdChFeGVjU3RhdGUgKiwgRE9N
OjpEb2N1bWVudEltcGwgKmQpOwotICAgIH5YTUxIdHRwUmVxdWVzdCgpOwotICAgIHZpcnR1YWwg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQ
cm9wZXJ0eVNsb3QmKTsKLSAgICBKU1ZhbHVlICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBKU1ZhbHVlICp2YWx1ZSwgaW50
IGF0dHIgPSBOb25lKTsKLSAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIEpTVmFsdWUgKnZhbHVlLCBpbnQgLyphdHRyKi8pOwotICAgIHZpcnR1YWwg
Ym9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlICopIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgbWFyaygpOwotCisgICAgSlNYTUxIdHRwUmVxdWVzdChFeGVjU3RhdGUgKiwg
V2ViQ29yZTo6RG9jdW1lbnRJbXBsICpkKTsKKyAgICB+SlNYTUxIdHRwUmVxdWVzdCgpOwogICAg
IHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5m
bzsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgICBlbnVtIHsgT25sb2Fk
LCBPbnJlYWR5c3RhdGVjaGFuZ2UsIFJlYWR5U3RhdGUsIFJlc3BvbnNlVGV4dCwgUmVzcG9uc2VY
TUwsIFN0YXR1cywKICAgICAgICAgU3RhdHVzVGV4dCwgQWJvcnQsIEdldEFsbFJlc3BvbnNlSGVh
ZGVycywgR2V0UmVzcG9uc2VIZWFkZXIsIE9wZW4sIFNlbmQsIFNldFJlcXVlc3RIZWFkZXIsCiAg
ICAgICAgIE92ZXJyaWRlTUlNRVR5cGUgfTsKIAotICAgIHN0YXRpYyB2b2lkIGNhbmNlbFJlcXVl
c3RzKERPTTo6RG9jdW1lbnRJbXBsICpkKTsKLQotICBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFz
cyBYTUxIdHRwUmVxdWVzdFByb3RvRnVuYzsKLSAgICBmcmllbmQgY2xhc3MgWE1MSHR0cFJlcXVl
c3RRT2JqZWN0OwotCi0gICAgSlNWYWx1ZSAqZ2V0U3RhdHVzVGV4dCgpIGNvbnN0OwotICAgIEpT
VmFsdWUgKmdldFN0YXR1cygpIGNvbnN0OwotICAgIGJvb2wgdXJsTWF0Y2hlc0RvY3VtZW50RG9t
YWluKGNvbnN0IEtVUkwmKSBjb25zdDsKLQotICAgIFhNTEh0dHBSZXF1ZXN0UU9iamVjdCAqcU9i
amVjdDsKLQotICAgIHZvaWQgc2xvdERhdGEoIEtJTzo6Sm9iKiBqb2IsIGNvbnN0IGNoYXIgKmRh
dGEsIGludCBzaXplICk7Ci0gICAgdm9pZCBzbG90RmluaXNoZWQoIEtJTzo6Sm9iKiApOwotICAg
IHZvaWQgc2xvdFJlZGlyZWN0aW9uKCBLSU86OkpvYiosIGNvbnN0IEtVUkwmICk7Ci0KLSAgICB2
b2lkIHByb2Nlc3NTeW5jTG9hZFJlc3VsdHMoY29uc3QgQnl0ZUFycmF5ICZkYXRhLCBjb25zdCBL
VVJMICZmaW5hbFVSTCwgY29uc3QgUVN0cmluZyAmaGVhZGVycyk7Ci0KLSAgICB2b2lkIG9wZW4o
Y29uc3QgUVN0cmluZyYgX21ldGhvZCwgY29uc3QgS1VSTCYgX3VybCwgYm9vbCBfYXN5bmMpOwot
ICAgIHZvaWQgc2VuZChjb25zdCBET006OkRPTVN0cmluZyYgX2JvZHkpOwotICAgIHZvaWQgYWJv
cnQoKTsKLSAgICB2b2lkIHNldFJlcXVlc3RIZWFkZXIoY29uc3QgUVN0cmluZyYgbmFtZSwgY29u
c3QgUVN0cmluZyAmdmFsdWUpOwotICAgIFFTdHJpbmcgZ2V0UmVxdWVzdEhlYWRlcihjb25zdCBR
U3RyaW5nJiBuYW1lKSBjb25zdDsKLSAgICBKU1ZhbHVlICpnZXRBbGxSZXNwb25zZUhlYWRlcnMo
KSBjb25zdDsKLSAgICBRU3RyaW5nIGdldFJlc3BvbnNlSGVhZGVyKGNvbnN0IFFTdHJpbmcmIG5h
bWUpIGNvbnN0OwotICAgIGJvb2wgcmVzcG9uc2VJc1hNTCgpIGNvbnN0OwotICAgIAotICAgIHN0
YXRpYyBRU3RyaW5nIGdldFNwZWNpZmljSGVhZGVyKGNvbnN0IFFTdHJpbmcmIGhlYWRlcnMsIGNv
bnN0IFFTdHJpbmcmIG5hbWUpOwotCi0gICAgdm9pZCBjaGFuZ2VTdGF0ZShYTUxIdHRwUmVxdWVz
dFN0YXRlIG5ld1N0YXRlKTsKLQotICAgIHR5cGVkZWYgSGFzaFNldDxYTUxIdHRwUmVxdWVzdCos
IFBvaW50ZXJIYXNoPFhNTEh0dHBSZXF1ZXN0Kj4gPiBSZXF1ZXN0c1NldDsKLSAgICB0eXBlZGVm
IEhhc2hNYXA8RE9NOjpEb2N1bWVudEltcGwqLCBSZXF1ZXN0c1NldCosIFBvaW50ZXJIYXNoPERP
TTo6RG9jdW1lbnRJbXBsKj4gPiBSZXF1ZXN0c01hcDsKLSAgICBzdGF0aWMgUmVxdWVzdHNNYXAg
JnJlcXVlc3RzQnlEb2N1bWVudCgpOwotICAgIHZvaWQgYWRkVG9SZXF1ZXN0c0J5RG9jdW1lbnQo
KTsKLSAgICB2b2lkIHJlbW92ZUZyb21SZXF1ZXN0c0J5RG9jdW1lbnQoKTsKLQotICAgIFFHdWFy
ZGVkUHRyPERPTTo6RG9jdW1lbnRJbXBsPiBkb2M7Ci0KLSAgICBLVVJMIHVybDsKLSAgICBRU3Ry
aW5nIG1ldGhvZDsKLSAgICBib29sIGFzeW5jOwotICAgIFFTdHJpbmcgcmVxdWVzdEhlYWRlcnM7
Ci0KLSAgICBLSU86OlRyYW5zZmVySm9iICogam9iOwotCi0gICAgWE1MSHR0cFJlcXVlc3RTdGF0
ZSBzdGF0ZTsKLSAgICBSZWZQdHI8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI+IG9uUmVhZHlT
dGF0ZUNoYW5nZUxpc3RlbmVyOwotICAgIFJlZlB0cjxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5l
cj4gb25Mb2FkTGlzdGVuZXI7Ci0KLSAgICBSZWZQdHI8a2h0bWw6OkRlY29kZXI+IGRlY29kZXI7
Ci0gICAgUVN0cmluZyBlbmNvZGluZzsKLSAgICBRU3RyaW5nIHJlc3BvbnNlSGVhZGVyczsKLSAg
ICBRU3RyaW5nIE1JTUVUeXBlT3ZlcnJpZGU7Ci0KLSAgICBRU3RyaW5nIHJlc3BvbnNlOwotICAg
IG11dGFibGUgYm9vbCBjcmVhdGVkRG9jdW1lbnQ7Ci0gICAgbXV0YWJsZSBib29sIHR5cGVJc1hN
TDsKLSAgICBtdXRhYmxlIFJlZlB0cjxET006OkRvY3VtZW50SW1wbD4gcmVzcG9uc2VYTUw7Ci0K
LSAgICBib29sIGFib3J0ZWQ7Ci0gIH07Ci0KLQotICBjbGFzcyBYTUxIdHRwUmVxdWVzdFFPYmpl
Y3QgOiBwdWJsaWMgUU9iamVjdCB7Ci0gICAgUV9PQkpFQ1QKLQotICBwdWJsaWM6Ci0gICAgWE1M
SHR0cFJlcXVlc3RRT2JqZWN0KFhNTEh0dHBSZXF1ZXN0ICpfanNPYmplY3QpOwotCi0gIHB1Ymxp
YyBzbG90czoKLSAgICB2b2lkIHNsb3REYXRhKCBLSU86OkpvYiogam9iLCBjb25zdCBjaGFyICpk
YXRhLCBpbnQgc2l6ZSApOwotICAgIHZvaWQgc2xvdEZpbmlzaGVkKCBLSU86OkpvYiogam9iICk7
Ci0gICAgdm9pZCBzbG90UmVkaXJlY3Rpb24oIEtJTzo6Sm9iKiBqb2IsIGNvbnN0IEtVUkwmIHVy
bCk7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29u
c3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOworICAgIEpTVmFsdWUgKmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOworICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgSlNWYWx1ZSAqdmFsdWUsIGludCAvKmF0dHIq
Lyk7CisgICAgdmlydHVhbCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUgKikgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CiAKICAgcHJpdmF0ZToKLSAgICBY
TUxIdHRwUmVxdWVzdCAqanNPYmplY3Q7CisgICAgZnJpZW5kIGNsYXNzIEpTWE1MSHR0cFJlcXVl
c3RQcm90b0Z1bmM7CisgICAgUmVmUHRyPFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0PiBtX2ltcGw7
CiAgIH07Ci0KIH0gLy8gbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRleDoga2h0bWwvZWNtYS94bWxo
dHRwcmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2VjbWEveG1saHR0cHJlcXVlc3QuaAko
cmV2aXNpb24gMTIxNzApCisrKyBraHRtbC9lY21hL3htbGh0dHByZXF1ZXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIsNyArMiw3IEBACiAvKgogICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBL
REUgbGlicmFyaWVzCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMu
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNv
bT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBA
bnlwb3AuY29tPgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMjUgKzIyLDI3IEBACiAjaWZu
ZGVmIFhNTEhUVFBSRVFVRVNUX0hfCiAjZGVmaW5lIFhNTEhUVFBSRVFVRVNUX0hfCiAKLSNpbmNs
dWRlICJranNfZG9tLmgiCiAjaW5jbHVkZSA8a3VybC5oPgorI2luY2x1ZGUgPGt4bWxjb3JlL1Bh
c3NSZWZQdHIuaD4KICNpbmNsdWRlIDxreG1sY29yZS9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8a3ht
bGNvcmUvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHFndWFyZGVkcHRyLmg+CiAjaW5jbHVkZSA8cW9i
amVjdC5oPgogCi1uYW1lc3BhY2Uga2h0bWwgewotICAgIGNsYXNzIERlY29kZXI7Ci19CituYW1l
c3BhY2UgS0pTIHsKKyAgICBjbGFzcyBKU09iamVjdDsKK307CiAKIG5hbWVzcGFjZSBLSU8gewog
ICAgIGNsYXNzIEpvYjsKICAgICBjbGFzcyBUcmFuc2ZlckpvYjsKIH0KIAotbmFtZXNwYWNlIEtK
UyB7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgY2xhc3MgSlNVbnByb3RlY3RlZEV2ZW50TGlz
dGVuZXI7CisgIGNsYXNzIERlY29kZXI7CisgIGNsYXNzIERvY3VtZW50SW1wbDsKKyAgY2xhc3Mg
RXZlbnRMaXN0ZW5lcjsKICAgY2xhc3MgWE1MSHR0cFJlcXVlc3RRT2JqZWN0OwogCiAgIC8vIHRo
ZXNlIGV4YWN0IG51bWVyaWMgdmFsdWVzIGFyZSBpbXBvcnRhbnQgYmVjYXVzZSBKUyBleHBlY3Rz
IHRoZW0KQEAgLTUyLDQxICs1NCwzNSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBDb21wbGV0ZWQg
PSA0ICAgICAgIC8vIEZpbmlzaGVkIHdpdGggYWxsIG9wZXJhdGlvbnMKICAgfTsKIAotICBjbGFz
cyBYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wIDogcHVibGljIEpTT2JqZWN0IHsKLSAgcHVi
bGljOgotICAgIFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXAoRXhlY1N0YXRlICpleGVjLCBE
T006OkRvY3VtZW50SW1wbCAqZCk7Ci0gICAgflhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXAo
KTsKLSAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NvbnN0cnVjdCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgSlNPYmplY3QgKmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFy
Z3MpOwotICBwcml2YXRlOgotICAgIFJlZlB0cjxET006OkRvY3VtZW50SW1wbD4gZG9jOwotICB9
OwotCi0gIGNsYXNzIFhNTEh0dHBSZXF1ZXN0IDogcHVibGljIERPTU9iamVjdCB7CisgIGNsYXNz
IFhNTEh0dHBSZXF1ZXN0IDogcHVibGljIFNoYXJlZDxYTUxIdHRwUmVxdWVzdD4gewogICBwdWJs
aWM6Ci0gICAgWE1MSHR0cFJlcXVlc3QoRXhlY1N0YXRlICosIERPTTo6RG9jdW1lbnRJbXBsICpk
KTsKKyAgICBYTUxIdHRwUmVxdWVzdChEb2N1bWVudEltcGwqIGQsIEtKUzo6SlNPYmplY3QqIG93
bmVyID0gMCk7CiAgICAgflhNTEh0dHBSZXF1ZXN0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldE93
blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xv
dCYpOwotICAgIEpTVmFsdWUgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgKnZhbHVlLCBpbnQgYXR0ciA9IE5v
bmUpOwotICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgSlNWYWx1ZSAqdmFsdWUsIGludCAvKmF0dHIqLyk7Ci0gICAgdmlydHVhbCBib29sIHRvQm9v
bGVhbihFeGVjU3RhdGUgKikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9p
ZCBtYXJrKCk7Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29u
c3QgeyByZXR1cm4gJmluZm87IH0KLSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87Ci0g
ICAgZW51bSB7IE9ubG9hZCwgT25yZWFkeXN0YXRlY2hhbmdlLCBSZWFkeVN0YXRlLCBSZXNwb25z
ZVRleHQsIFJlc3BvbnNlWE1MLCBTdGF0dXMsCi0gICAgICAgIFN0YXR1c1RleHQsIEFib3J0LCBH
ZXRBbGxSZXNwb25zZUhlYWRlcnMsIEdldFJlc3BvbnNlSGVhZGVyLCBPcGVuLCBTZW5kLCBTZXRS
ZXF1ZXN0SGVhZGVyLAotICAgICAgICBPdmVycmlkZU1JTUVUeXBlIH07CiAKLSAgICBzdGF0aWMg
dm9pZCBjYW5jZWxSZXF1ZXN0cyhET006OkRvY3VtZW50SW1wbCAqZCk7CisgICAgc3RhdGljIHZv
aWQgY2FuY2VsUmVxdWVzdHMoRG9jdW1lbnRJbXBsICpkKTsKKworICAgIERPTVN0cmluZyBnZXRT
dGF0dXNUZXh0KCkgY29uc3Q7CisgICAgaW50IGdldFN0YXR1cygpIGNvbnN0OworICAgIFhNTEh0
dHBSZXF1ZXN0U3RhdGUgZ2V0UmVhZHlTdGF0ZSgpIGNvbnN0OworICAgIHZvaWQgb3Blbihjb25z
dCBET01TdHJpbmcmIG1ldGhvZCwgY29uc3QgRE9NU3RyaW5nJiB1cmxTdHJpbmcsIGJvb2wgYXN5
bmMsIGNvbnN0IERPTVN0cmluZyYgdXNlciwgY29uc3QgRE9NU3RyaW5nJiBwYXNzd29yZCk7Cisg
ICAgdm9pZCBzZW5kKGNvbnN0IERPTVN0cmluZyYgX2JvZHkpOworICAgIHZvaWQgYWJvcnQoKTsK
KyAgICB2b2lkIHNldFJlcXVlc3RIZWFkZXIoY29uc3QgRE9NU3RyaW5nJiBuYW1lLCBjb25zdCBE
T01TdHJpbmcgJnZhbHVlKTsKKyAgICB2b2lkIG92ZXJyaWRlTUlNRVR5cGUoY29uc3QgRE9NU3Ry
aW5nJiBvdmVycmlkZSk7CisgICAgRE9NU3RyaW5nIGdldEFsbFJlc3BvbnNlSGVhZGVycygpIGNv
bnN0OworICAgIERPTVN0cmluZyBnZXRSZXNwb25zZUhlYWRlcihjb25zdCBET01TdHJpbmcmIG5h
bWUpIGNvbnN0OworICAgIERPTVN0cmluZyBnZXRSZXNwb25zZVRleHQoKSBjb25zdDsKKyAgICBQ
YXNzUmVmUHRyPERvY3VtZW50SW1wbD4gZ2V0UmVzcG9uc2VYTUwoKSBjb25zdDsKKworICAgIHZv
aWQgc2V0T25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIoRXZlbnRMaXN0ZW5lciogZXZlbnRMaXN0
ZW5lcik7CisgICAgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBnZXRPblJlYWR5U3RhdGVDaGFu
Z2VMaXN0ZW5lcigpIGNvbnN0OworICAgIHZvaWQgc2V0T25Mb2FkTGlzdGVuZXIoRXZlbnRMaXN0
ZW5lciogZXZlbnRMaXN0ZW5lcik7CisgICAgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBnZXRP
bkxvYWRMaXN0ZW5lcigpIGNvbnN0OwogCiAgIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFhN
TEh0dHBSZXF1ZXN0UHJvdG9GdW5jOwogICAgIGZyaWVuZCBjbGFzcyBYTUxIdHRwUmVxdWVzdFFP
YmplY3Q7CiAKLSAgICBKU1ZhbHVlICpnZXRTdGF0dXNUZXh0KCkgY29uc3Q7Ci0gICAgSlNWYWx1
ZSAqZ2V0U3RhdHVzKCkgY29uc3Q7CiAgICAgYm9vbCB1cmxNYXRjaGVzRG9jdW1lbnREb21haW4o
Y29uc3QgS1VSTCYpIGNvbnN0OwogCiAgICAgWE1MSHR0cFJlcXVlc3RRT2JqZWN0ICpxT2JqZWN0
OwpAQCAtOTcsMjYgKzkzLDIzIEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgdm9pZCBwcm9jZXNz
U3luY0xvYWRSZXN1bHRzKGNvbnN0IEJ5dGVBcnJheSAmZGF0YSwgY29uc3QgS1VSTCAmZmluYWxV
UkwsIGNvbnN0IFFTdHJpbmcgJmhlYWRlcnMpOwogCi0gICAgdm9pZCBvcGVuKGNvbnN0IFFTdHJp
bmcmIF9tZXRob2QsIGNvbnN0IEtVUkwmIF91cmwsIGJvb2wgX2FzeW5jKTsKLSAgICB2b2lkIHNl
bmQoY29uc3QgRE9NOjpET01TdHJpbmcmIF9ib2R5KTsKLSAgICB2b2lkIGFib3J0KCk7Ci0gICAg
dm9pZCBzZXRSZXF1ZXN0SGVhZGVyKGNvbnN0IFFTdHJpbmcmIG5hbWUsIGNvbnN0IFFTdHJpbmcg
JnZhbHVlKTsKLSAgICBRU3RyaW5nIGdldFJlcXVlc3RIZWFkZXIoY29uc3QgUVN0cmluZyYgbmFt
ZSkgY29uc3Q7Ci0gICAgSlNWYWx1ZSAqZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgY29uc3Q7Ci0g
ICAgUVN0cmluZyBnZXRSZXNwb25zZUhlYWRlcihjb25zdCBRU3RyaW5nJiBuYW1lKSBjb25zdDsK
ICAgICBib29sIHJlc3BvbnNlSXNYTUwoKSBjb25zdDsKICAgICAKKyAgICBRU3RyaW5nIGdldFJl
cXVlc3RIZWFkZXIoY29uc3QgUVN0cmluZyYgbmFtZSkgY29uc3Q7CiAgICAgc3RhdGljIFFTdHJp
bmcgZ2V0U3BlY2lmaWNIZWFkZXIoY29uc3QgUVN0cmluZyYgaGVhZGVycywgY29uc3QgUVN0cmlu
ZyYgbmFtZSk7CiAKICAgICB2b2lkIGNoYW5nZVN0YXRlKFhNTEh0dHBSZXF1ZXN0U3RhdGUgbmV3
U3RhdGUpOwogCiAgICAgdHlwZWRlZiBIYXNoU2V0PFhNTEh0dHBSZXF1ZXN0KiwgUG9pbnRlckhh
c2g8WE1MSHR0cFJlcXVlc3QqPiA+IFJlcXVlc3RzU2V0OwotICAgIHR5cGVkZWYgSGFzaE1hcDxE
T006OkRvY3VtZW50SW1wbCosIFJlcXVlc3RzU2V0KiwgUG9pbnRlckhhc2g8RE9NOjpEb2N1bWVu
dEltcGwqPiA+IFJlcXVlc3RzTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxEb2N1bWVudEltcGwq
LCBSZXF1ZXN0c1NldCosIFBvaW50ZXJIYXNoPERvY3VtZW50SW1wbCo+ID4gUmVxdWVzdHNNYXA7
CiAgICAgc3RhdGljIFJlcXVlc3RzTWFwICZyZXF1ZXN0c0J5RG9jdW1lbnQoKTsKICAgICB2b2lk
IGFkZFRvUmVxdWVzdHNCeURvY3VtZW50KCk7CiAgICAgdm9pZCByZW1vdmVGcm9tUmVxdWVzdHNC
eURvY3VtZW50KCk7CiAKLSAgICBRR3VhcmRlZFB0cjxET006OkRvY3VtZW50SW1wbD4gZG9jOwor
ICAgIEtKUzo6SlNPYmplY3QqIG93bmVyOworICAgIFFHdWFyZGVkUHRyPERvY3VtZW50SW1wbD4g
ZG9jOworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBvblJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5l
cjsKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gb25Mb2FkTGlzdGVuZXI7CiAKICAgICBLVVJM
IHVybDsKICAgICBRU3RyaW5nIG1ldGhvZDsKQEAgLTEyNiw4ICsxMTksNiBAQCBuYW1lc3BhY2Ug
S0pTIHsKICAgICBLSU86OlRyYW5zZmVySm9iICogam9iOwogCiAgICAgWE1MSHR0cFJlcXVlc3RT
dGF0ZSBzdGF0ZTsKLSAgICBSZWZQdHI8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI+IG9uUmVh
ZHlTdGF0ZUNoYW5nZUxpc3RlbmVyOwotICAgIFJlZlB0cjxKU1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lcj4gb25Mb2FkTGlzdGVuZXI7CiAKICAgICBSZWZQdHI8a2h0bWw6OkRlY29kZXI+IGRlY29k
ZXI7CiAgICAgUVN0cmluZyBlbmNvZGluZzsKQEAgLTEzNyw3ICsxMjgsNyBAQCBuYW1lc3BhY2Ug
S0pTIHsKICAgICBRU3RyaW5nIHJlc3BvbnNlOwogICAgIG11dGFibGUgYm9vbCBjcmVhdGVkRG9j
dW1lbnQ7CiAgICAgbXV0YWJsZSBib29sIHR5cGVJc1hNTDsKLSAgICBtdXRhYmxlIFJlZlB0cjxE
T006OkRvY3VtZW50SW1wbD4gcmVzcG9uc2VYTUw7CisgICAgbXV0YWJsZSBSZWZQdHI8RG9jdW1l
bnRJbXBsPiByZXNwb25zZVhNTDsKIAogICAgIGJvb2wgYWJvcnRlZDsKICAgfTsKSW5kZXg6IGto
dG1sL2VjbWEvSlNYTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvZWNtYS9K
U1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gMTIxNzApCisrKyBraHRtbC9lY21hL0pTWE1M
SHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcwogICogIENvcHlyaWdodCAoQykg
MjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLgotICogIENvcHlyaWdodCAoQykgMjAwNSBBbGV4ZXkg
UHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2
IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
QEAgLTE5LDIzNCArMTksMTUyIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkpTWE1MSHR0cFJlcXVlc3QuaCIKICNpbmNsdWRlICJ4bWxodHRwcmVxdWVzdC5oIgogCiAj
aW5jbHVkZSAia2pzX3dpbmRvdy5oIgogI2luY2x1ZGUgImtqc19ldmVudHMuaCIKIAotI2luY2x1
ZGUgImRvbS9kb21fZXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKLSNp
bmNsdWRlICJDYWNoZS5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKLSNp
bmNsdWRlICJ4bWwvZG9tMl9ldmVudHNpbXBsLmgiCi0jaW5jbHVkZSAieG1sL0V2ZW50TmFtZXMu
aCIKLSNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbkltcGwuaCIKIAotI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiSlNYTUxIdHRwUmVxdWVzdC5sdXQuaCIKIAotI2luY2x1ZGUgPGtkZWJ1
Zy5oPgotI2luY2x1ZGUgPGtpby9qb2IuaD4KLSNpbmNsdWRlIDxxb2JqZWN0Lmg+Ci0jaW5jbHVk
ZSA8cXJlZ2V4cC5oPgotI2luY2x1ZGUgPHF0ZXh0Y29kZWMuaD4KK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCi0jaW5jbHVkZSAiS1dRTG9hZGVyLmgiCi0KLSNpbmNsdWRlICJ4bWxodHRwcmVx
dWVzdC5sdXQuaCIKLQotdXNpbmcgbmFtZXNwYWNlIERPTTsKLXVzaW5nIG5hbWVzcGFjZSBET006
OkV2ZW50TmFtZXM7Ci0KLXVzaW5nIGtodG1sOjpEZWNvZGVyOwotCi1zdGF0aWMgaW5saW5lIFFT
dHJpbmcgZ2V0TUlNRVR5cGUoY29uc3QgUVN0cmluZyYgY29udGVudFR5cGVTdHJpbmcpCi17Ci0g
ICAgcmV0dXJuIFFTdHJpbmdMaXN0OjpzcGxpdCgiOyIsIGNvbnRlbnRUeXBlU3RyaW5nLCB0cnVl
KVswXS5zdHJpcFdoaXRlU3BhY2UoKTsKLX0KLQotc3RhdGljIFFTdHJpbmcgZ2V0Q2hhcnNldChj
b25zdCBRU3RyaW5nJiBjb250ZW50VHlwZVN0cmluZykKLXsKLSAgICBpbnQgcG9zID0gMDsKLSAg
ICBpbnQgbGVuZ3RoID0gKGludCljb250ZW50VHlwZVN0cmluZy5sZW5ndGgoKTsKLSAgICAKLSAg
ICB3aGlsZSAocG9zIDwgbGVuZ3RoKSB7Ci0gICAgICAgIHBvcyA9IGNvbnRlbnRUeXBlU3RyaW5n
LmZpbmQoImNoYXJzZXQiLCBwb3MsIGZhbHNlKTsKLSAgICAgICAgaWYgKHBvcyA8PSAwKQotICAg
ICAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIGlzIHdoYXQg
d2UgZm91bmQgYSBiZWdpbm5pbmcgb2YgYSB3b3JkPwotICAgICAgICBpZiAoY29udGVudFR5cGVT
dHJpbmdbcG9zLTFdID4gJyAnICYmIGNvbnRlbnRUeXBlU3RyaW5nW3Bvcy0xXSAhPSAnOycpIHsK
LSAgICAgICAgICAgIHBvcyArPSA3OwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIHBvcyArPSA3OwotCi0gICAgICAgIC8vIHNraXAgd2hpdGVzcGFj
ZQotICAgICAgICB3aGlsZSAocG9zICE9IGxlbmd0aCAmJiBjb250ZW50VHlwZVN0cmluZ1twb3Nd
IDw9ICcgJykKLSAgICAgICAgICAgICsrcG9zOwotICAgIAotICAgICAgICBpZiAoY29udGVudFR5
cGVTdHJpbmdbcG9zKytdICE9ICc9JykgLy8gdGhpcyAiY2hhcnNldCIgc3Vic3RyaW5nIHdhc24n
dCBhIHBhcmFtZXRlciBuYW1lLCBidXQgdGhlcmUgbWF5IGJlIG90aGVycwotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgd2hpbGUgKHBvcyAhPSBsZW5ndGggJiYgKGNvbnRlbnRUeXBl
U3RyaW5nW3Bvc10gPD0gJyAnIHx8IGNvbnRlbnRUeXBlU3RyaW5nW3Bvc10gPT0gJyInIHx8IGNv
bnRlbnRUeXBlU3RyaW5nW3Bvc10gPT0gJ1wnJykpCi0gICAgICAgICAgICArK3BvczsKLQotICAg
ICAgICAvLyB3ZSBkb24ndCBoYW5kbGUgc3BhY2VzIHdpdGhpbiBxdW90ZWQgcGFyYW1ldGVyIHZh
bHVlcywgYmVjYXVzZSBjaGFyc2V0IG5hbWVzIGNhbm5vdCBoYXZlIGFueQotICAgICAgICBpbnQg
ZW5kcG9zID0gcG9zOwotICAgICAgICB3aGlsZSAocG9zICE9IGxlbmd0aCAmJiBjb250ZW50VHlw
ZVN0cmluZ1tlbmRwb3NdID4gJyAnICYmIGNvbnRlbnRUeXBlU3RyaW5nW2VuZHBvc10gIT0gJyIn
ICYmIGNvbnRlbnRUeXBlU3RyaW5nW2VuZHBvc10gIT0gJ1wnJyAmJiBjb250ZW50VHlwZVN0cmlu
Z1tlbmRwb3NdICE9ICc7JykKLSAgICAgICAgICAgICsrZW5kcG9zOwotICAgIAotICAgICAgICBy
ZXR1cm4gY29udGVudFR5cGVTdHJpbmcubWlkKHBvcywgZW5kcG9zLXBvcyk7Ci0gICAgfQotICAg
IAotICAgIHJldHVybiBRU3RyaW5nKCk7Ci19CiAKIG5hbWVzcGFjZSBLSlMgewogCi0vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vIFhNTEh0dHBSZXF1ZXN0IE9iamVjdCAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gSlNYTUxIdHRwUmVxdWVzdCBPYmplY3QgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLS8qIFNvdXJjZSBmb3IgWE1MSHR0cFJlcXVlc3RQcm90
b1RhYmxlLgotQGJlZ2luIFhNTEh0dHBSZXF1ZXN0UHJvdG9UYWJsZSA3Ci0gIGFib3J0ICAgICAg
ICAgICAgICAgICBYTUxIdHRwUmVxdWVzdDo6QWJvcnQgICAgICAgICAgICAgICAgICAgRG9udERl
bGV0ZXxGdW5jdGlvbiAwCi0gIGdldEFsbFJlc3BvbnNlSGVhZGVycyBYTUxIdHRwUmVxdWVzdDo6
R2V0QWxsUmVzcG9uc2VIZWFkZXJzICAgRG9udERlbGV0ZXxGdW5jdGlvbiAwCi0gIGdldFJlc3Bv
bnNlSGVhZGVyICAgICBYTUxIdHRwUmVxdWVzdDo6R2V0UmVzcG9uc2VIZWFkZXIgICAgICAgRG9u
dERlbGV0ZXxGdW5jdGlvbiAxCi0gIG9wZW4gICAgICAgICAgICAgICAgICBYTUxIdHRwUmVxdWVz
dDo6T3BlbiAgICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiA1Ci0gIG92ZXJy
aWRlTWltZVR5cGUgICAgICBYTUxIdHRwUmVxdWVzdDo6T3ZlcnJpZGVNSU1FVHlwZSAgICAgICAg
RG9udERlbGV0ZXxGdW5jdGlvbiAxCi0gIHNlbmQgICAgICAgICAgICAgICAgICBYTUxIdHRwUmVx
dWVzdDo6U2VuZCAgICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAxCi0gIHNl
dFJlcXVlc3RIZWFkZXIgICAgICBYTUxIdHRwUmVxdWVzdDo6U2V0UmVxdWVzdEhlYWRlciAgICAg
ICAgRG9udERlbGV0ZXxGdW5jdGlvbiAyCisvKiBTb3VyY2UgZm9yIEpTWE1MSHR0cFJlcXVlc3RQ
cm90b1RhYmxlLgorQGJlZ2luIEpTWE1MSHR0cFJlcXVlc3RQcm90b1RhYmxlIDcKKyAgYWJvcnQg
ICAgICAgICAgICAgICAgIEpTWE1MSHR0cFJlcXVlc3Q6OkFib3J0ICAgICAgICAgICAgICAgICAg
IERvbnREZWxldGV8RnVuY3Rpb24gMAorICBnZXRBbGxSZXNwb25zZUhlYWRlcnMgSlNYTUxIdHRw
UmVxdWVzdDo6R2V0QWxsUmVzcG9uc2VIZWFkZXJzICAgRG9udERlbGV0ZXxGdW5jdGlvbiAwCisg
IGdldFJlc3BvbnNlSGVhZGVyICAgICBKU1hNTEh0dHBSZXF1ZXN0OjpHZXRSZXNwb25zZUhlYWRl
ciAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDEKKyAgb3BlbiAgICAgICAgICAgICAgICAgIEpT
WE1MSHR0cFJlcXVlc3Q6Ok9wZW4gICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8RnVuY3Rp
b24gNQorICBvdmVycmlkZU1pbWVUeXBlICAgICAgSlNYTUxIdHRwUmVxdWVzdDo6T3ZlcnJpZGVN
SU1FVHlwZSAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAxCisgIHNlbmQgICAgICAgICAgICAg
ICAgICBKU1hNTEh0dHBSZXF1ZXN0OjpTZW5kICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRl
fEZ1bmN0aW9uIDEKKyAgc2V0UmVxdWVzdEhlYWRlciAgICAgIEpTWE1MSHR0cFJlcXVlc3Q6OlNl
dFJlcXVlc3RIZWFkZXIgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMgogQGVuZAogKi8KLUtK
U19ERUZJTkVfUFJPVE9UWVBFKFhNTEh0dHBSZXF1ZXN0UHJvdG8pCi1LSlNfSU1QTEVNRU5UX1BS
T1RPRlVOQyhYTUxIdHRwUmVxdWVzdFByb3RvRnVuYykKLUtKU19JTVBMRU1FTlRfUFJPVE9UWVBF
KCJYTUxIdHRwUmVxdWVzdCIsWE1MSHR0cFJlcXVlc3RQcm90byxYTUxIdHRwUmVxdWVzdFByb3Rv
RnVuYykKLQotWE1MSHR0cFJlcXVlc3RRT2JqZWN0OjpYTUxIdHRwUmVxdWVzdFFPYmplY3QoWE1M
SHR0cFJlcXVlc3QgKl9qc09iamVjdCkgCi17Ci0gIGpzT2JqZWN0ID0gX2pzT2JqZWN0OyAKLX0K
LQotdm9pZCBYTUxIdHRwUmVxdWVzdFFPYmplY3Q6OnNsb3REYXRhKCBLSU86OkpvYiogam9iLCBj
b25zdCBjaGFyICpkYXRhLCBpbnQgc2l6ZSApCi17Ci0gIGpzT2JqZWN0LT5zbG90RGF0YShqb2Is
IGRhdGEsIHNpemUpOwotfQotCi12b2lkIFhNTEh0dHBSZXF1ZXN0UU9iamVjdDo6c2xvdEZpbmlz
aGVkKCBLSU86OkpvYiogam9iICkKLXsKLSAganNPYmplY3QtPnNsb3RGaW5pc2hlZChqb2IpOyAK
LX0KK0tKU19ERUZJTkVfUFJPVE9UWVBFKEpTWE1MSHR0cFJlcXVlc3RQcm90bykKK0tKU19JTVBM
RU1FTlRfUFJPVE9GVU5DKEpTWE1MSHR0cFJlcXVlc3RQcm90b0Z1bmMpCitLSlNfSU1QTEVNRU5U
X1BST1RPVFlQRSgiSlNYTUxIdHRwUmVxdWVzdCIsIEpTWE1MSHR0cFJlcXVlc3RQcm90bywgSlNY
TUxIdHRwUmVxdWVzdFByb3RvRnVuYykKIAotdm9pZCBYTUxIdHRwUmVxdWVzdFFPYmplY3Q6OnNs
b3RSZWRpcmVjdGlvbiggS0lPOjpKb2IqIGpvYiwgY29uc3QgS1VSTCYgdXJsKQoteyAKLSAganNP
YmplY3QtPnNsb3RSZWRpcmVjdGlvbiggam9iLCB1cmwgKTsgCi19CiAKLVhNTEh0dHBSZXF1ZXN0
Q29uc3RydWN0b3JJbXA6OlhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXAoRXhlY1N0YXRlICpl
eGVjLCBET006OkRvY3VtZW50SW1wbCAqZCkKK0pTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvcklt
cDo6SlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wKEV4ZWNTdGF0ZSAqZXhlYywgRG9jdW1l
bnRJbXBsICpkKQogICAgIDogZG9jKGQpCiB7Ci0gICAgcHV0RGlyZWN0KHByb3RvdHlwZVByb3Bl
cnR5TmFtZSwgWE1MSHR0cFJlcXVlc3RQcm90bzo6c2VsZihleGVjKSwgRG9udEVudW18RG9udERl
bGV0ZXxSZWFkT25seSk7CisgICAgcHV0RGlyZWN0KHByb3RvdHlwZVByb3BlcnR5TmFtZSwgSlNY
TUxIdHRwUmVxdWVzdFByb3RvOjpzZWxmKGV4ZWMpLCBEb250RW51bXxEb250RGVsZXRlfFJlYWRP
bmx5KTsKIH0KIAotWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3RvckltcDo6flhNTEh0dHBSZXF1ZXN0
Q29uc3RydWN0b3JJbXAoKQorSlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wOjp+SlNYTUxI
dHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wKCkKIHsKIH0KIAotYm9vbCBYTUxIdHRwUmVxdWVzdENv
bnN0cnVjdG9ySW1wOjppbXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3QKK2Jvb2wgSlNYTUxIdHRw
UmVxdWVzdENvbnN0cnVjdG9ySW1wOjppbXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3QKIHsKICAg
cmV0dXJuIHRydWU7CiB9CiAKLUpTT2JqZWN0ICpYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1w
Ojpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICYpCitKU09iamVjdCAqSlNY
TUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wOjpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBMaXN0ICYpCiB7Ci0gIHJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoZXhlYywgZG9jLmdl
dCgpKTsKKyAgcmV0dXJuIG5ldyBKU1hNTEh0dHBSZXF1ZXN0KGV4ZWMsIGRvYy5nZXQoKSk7CiB9
CiAKLWNvbnN0IENsYXNzSW5mbyBYTUxIdHRwUmVxdWVzdDo6aW5mbyA9IHsgIlhNTEh0dHBSZXF1
ZXN0IiwgMCwgJlhNTEh0dHBSZXF1ZXN0VGFibGUsIDAgfTsKK2NvbnN0IENsYXNzSW5mbyBKU1hN
TEh0dHBSZXF1ZXN0OjppbmZvID0geyAiSlNYTUxIdHRwUmVxdWVzdCIsIDAsICZKU1hNTEh0dHBS
ZXF1ZXN0VGFibGUsIDAgfTsKIAotLyogU291cmNlIGZvciBYTUxIdHRwUmVxdWVzdFRhYmxlLgot
QGJlZ2luIFhNTEh0dHBSZXF1ZXN0VGFibGUgNwotICByZWFkeVN0YXRlICAgICAgICAgICAgWE1M
SHR0cFJlcXVlc3Q6OlJlYWR5U3RhdGUgICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkK
LSAgcmVzcG9uc2VUZXh0ICAgICAgICAgIFhNTEh0dHBSZXF1ZXN0OjpSZXNwb25zZVRleHQgICAg
ICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHJlc3BvbnNlWE1MICAgICAgICAgICBYTUxI
dHRwUmVxdWVzdDo6UmVzcG9uc2VYTUwgICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQot
ICBzdGF0dXMgICAgICAgICAgICAgICAgWE1MSHR0cFJlcXVlc3Q6OlN0YXR1cyAgICAgICAgICAg
ICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgc3RhdHVzVGV4dCAgICAgICAgICAgIFhNTEh0
dHBSZXF1ZXN0OjpTdGF0dXNUZXh0ICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0g
IG9ucmVhZHlzdGF0ZWNoYW5nZSAgICBYTUxIdHRwUmVxdWVzdDo6T25yZWFkeXN0YXRlY2hhbmdl
ICAgICAgRG9udERlbGV0ZQotICBvbmxvYWQgICAgICAgICAgICAgICAgWE1MSHR0cFJlcXVlc3Q6
Ok9ubG9hZCAgICAgICAgICAgICAgICAgIERvbnREZWxldGUKKy8qIFNvdXJjZSBmb3IgSlNYTUxI
dHRwUmVxdWVzdFRhYmxlLgorQGJlZ2luIEpTWE1MSHR0cFJlcXVlc3RUYWJsZSA3CisgIHJlYWR5
U3RhdGUgICAgICAgICAgICBKU1hNTEh0dHBSZXF1ZXN0OjpSZWFkeVN0YXRlICAgICAgICAgICAg
ICBEb250RGVsZXRlfFJlYWRPbmx5CisgIHJlc3BvbnNlVGV4dCAgICAgICAgICBKU1hNTEh0dHBS
ZXF1ZXN0OjpSZXNwb25zZVRleHQgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5CisgIHJl
c3BvbnNlWE1MICAgICAgICAgICBKU1hNTEh0dHBSZXF1ZXN0OjpSZXNwb25zZVhNTCAgICAgICAg
ICAgICBEb250RGVsZXRlfFJlYWRPbmx5CisgIHN0YXR1cyAgICAgICAgICAgICAgICBKU1hNTEh0
dHBSZXF1ZXN0OjpTdGF0dXMgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Cisg
IHN0YXR1c1RleHQgICAgICAgICAgICBKU1hNTEh0dHBSZXF1ZXN0OjpTdGF0dXNUZXh0ICAgICAg
ICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5CisgIG9ucmVhZHlzdGF0ZWNoYW5nZSAgICBKU1hN
TEh0dHBSZXF1ZXN0OjpPbnJlYWR5c3RhdGVjaGFuZ2UgICAgICBEb250RGVsZXRlCisgIG9ubG9h
ZCAgICAgICAgICAgICAgICBKU1hNTEh0dHBSZXF1ZXN0OjpPbmxvYWQgICAgICAgICAgICAgICAg
ICBEb250RGVsZXRlCiBAZW5kCiAqLwogCi1ib29sIFhNTEh0dHBSZXF1ZXN0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNYTUxIdHRwUmVxdWVzdDo6Z2V0T3duUHJvcGVy
dHlTbG90KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8WE1MSHR0
cFJlcXVlc3QsIERPTU9iamVjdD4oZXhlYywgJlhNTEh0dHBSZXF1ZXN0VGFibGUsIHRoaXMsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7CisgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNYTUxIdHRw
UmVxdWVzdCwgRE9NT2JqZWN0PihleGVjLCAmSlNYTUxIdHRwUmVxdWVzdFRhYmxlLCB0aGlzLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi1KU1ZhbHVlICpYTUxIdHRwUmVxdWVzdDo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK0pTVmFsdWUgKkpT
WE1MSHR0cFJlcXVlc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CiB7CiAgIHN3aXRjaCAodG9rZW4pIHsKICAgY2FzZSBSZWFkeVN0YXRlOgotICAg
IHJldHVybiBqc051bWJlcihzdGF0ZSk7CisgICAgcmV0dXJuIGpzTnVtYmVyKG1faW1wbC0+Z2V0
UmVhZHlTdGF0ZSgpKTsKICAgY2FzZSBSZXNwb25zZVRleHQ6Ci0gICAgcmV0dXJuIGpzU3RyaW5n
T3JOdWxsKERPTTo6RE9NU3RyaW5nKHJlc3BvbnNlKSk7Ci0gIGNhc2UgUmVzcG9uc2VYTUw6Ci0g
ICAgaWYgKHN0YXRlICE9IENvbXBsZXRlZCkgeworICAgIHJldHVybiBqc1N0cmluZ09yTnVsbCht
X2ltcGwtPmdldFJlc3BvbnNlVGV4dCgpKTsKKyAgY2FzZSBSZXNwb25zZVhNTDogeworICAgIFJl
ZlB0cjxEb2N1bWVudEltcGw+IHJlc3BvbnNlWE1MID0gbV9pbXBsLT5nZXRSZXNwb25zZVhNTCgp
OworICAgIGlmIChyZXNwb25zZVhNTC5nZXQoKSkKKyAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4
ZWMsIHJlc3BvbnNlWE1MLmdldCgpKTsKKyAgICBlbHNlCiAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLSAgICB9Ci0KLSAgICBpZiAoIWNyZWF0ZWREb2N1bWVudCkgewotICAgICAgaWYgKHR5
cGVJc1hNTCA9IHJlc3BvbnNlSXNYTUwoKSkgewotICAgICAgICByZXNwb25zZVhNTCA9IGRvYy0+
aW1wbGVtZW50YXRpb24oKS0+Y3JlYXRlRG9jdW1lbnQoKTsKLQotICAgICAgICBEb2N1bWVudElt
cGwgKmRvY0ltcGwgPSByZXNwb25zZVhNTC5nZXQoKTsKLSAgICAgICAgCi0gICAgICAgIGRvY0lt
cGwtPm9wZW4oKTsKLSAgICAgICAgZG9jSW1wbC0+d3JpdGUocmVzcG9uc2UpOwotICAgICAgICBk
b2NJbXBsLT5maW5pc2hQYXJzaW5nKCk7Ci0gICAgICAgIGRvY0ltcGwtPmNsb3NlKCk7Ci0gICAg
ICB9Ci0gICAgICBjcmVhdGVkRG9jdW1lbnQgPSB0cnVlOwotICAgIH0KLQotICAgIGlmICghdHlw
ZUlzWE1MKSB7Ci0gICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gZ2V0RE9NTm9kZShleGVjLCByZXNwb25zZVhNTC5nZXQoKSk7CisgIH0KICAgY2FzZSBTdGF0
dXM6Ci0gICAgcmV0dXJuIGdldFN0YXR1cygpOwotICBjYXNlIFN0YXR1c1RleHQ6Ci0gICAgcmV0
dXJuIGdldFN0YXR1c1RleHQoKTsKKyAgICBpbnQgc3RhdHVzID0gbV9pbXBsLT5nZXRTdGF0dXMo
KTsKKyAgICByZXR1cm4gc3RhdHVzID4gMCA/IGpzTnVtYmVyKHN0YXR1cykgOiBqc1VuZGVmaW5l
ZCgpOworICBjYXNlIFN0YXR1c1RleHQ6IHsKKyAgICBET01TdHJpbmcgc3RhdHVzVGV4dCA9IG1f
aW1wbC0+Z2V0U3RhdHVzVGV4dCgpOworICAgIGlmICghc3RhdHVzVGV4dC5pc051bGwoKSkKKyAg
ICAgIHJldHVybiBqc1N0cmluZyhzdGF0dXNUZXh0KTsKKyAgICBlbHNlCisgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgfQogICBjYXNlIE9ucmVhZHlzdGF0ZWNoYW5nZToKLSAgIGlmIChv
blJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lciAmJiBvblJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lci0+
bGlzdGVuZXJPYmooKSkgewotICAgICByZXR1cm4gb25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIt
Pmxpc3RlbmVyT2JqKCk7Ci0gICB9IGVsc2UgewotICAgICByZXR1cm4ganNOdWxsKCk7CisgICBK
U1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogb25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIgPSBz
dGF0aWNfY2FzdDxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcio+KG1faW1wbC0+Z2V0T25SZWFk
eVN0YXRlQ2hhbmdlTGlzdGVuZXIoKS5nZXQoKSk7CisgICBpZiAob25SZWFkeVN0YXRlQ2hhbmdl
TGlzdGVuZXIpIHsKKyAgICAgIEpTT2JqZWN0KiBsaXN0ZW5lck9iaiA9IG9uUmVhZHlTdGF0ZUNo
YW5nZUxpc3RlbmVyLT5saXN0ZW5lck9iaigpOworICAgICAgaWYgKGxpc3RlbmVyT2JqKQorICAg
ICAgICByZXR1cm4gbGlzdGVuZXJPYmo7CiAgICB9CisgICByZXR1cm4ganNOdWxsKCk7CiAgIGNh
c2UgT25sb2FkOgotICAgaWYgKG9uTG9hZExpc3RlbmVyICYmIG9uTG9hZExpc3RlbmVyLT5saXN0
ZW5lck9iaigpKSB7Ci0gICAgIHJldHVybiBvbkxvYWRMaXN0ZW5lci0+bGlzdGVuZXJPYmooKTsK
LSAgIH0gZWxzZSB7Ci0gICAgIHJldHVybiBqc051bGwoKTsKKyAgIEpTVW5wcm90ZWN0ZWRFdmVu
dExpc3RlbmVyKiBvbkxvYWRMaXN0ZW5lciA9IHN0YXRpY19jYXN0PEpTVW5wcm90ZWN0ZWRFdmVu
dExpc3RlbmVyKj4obV9pbXBsLT5nZXRPbkxvYWRMaXN0ZW5lcigpLmdldCgpKTsKKyAgIGlmIChv
bkxvYWRMaXN0ZW5lcikgeworICAgICAgSlNPYmplY3QqIGxpc3RlbmVyT2JqID0gb25Mb2FkTGlz
dGVuZXItPmxpc3RlbmVyT2JqKCk7CisgICAgICBpZiAobGlzdGVuZXJPYmopCisgICAgICAgIHJl
dHVybiBsaXN0ZW5lck9iajsKICAgIH0KKyAgIHJldHVybiBqc051bGwoKTsKICAgZGVmYXVsdDoK
LSAgICBrZFdhcm5pbmcoKSA8PCAiWE1MSHR0cFJlcXVlc3Q6OmdldFZhbHVlUHJvcGVydHkgdW5o
YW5kbGVkIHRva2VuICIgPDwgdG9rZW4gPDwgZW5kbDsKKy8vICAgIGtkV2FybmluZygpIDw8ICJK
U1hNTEh0dHBSZXF1ZXN0OjpnZXRWYWx1ZVByb3BlcnR5IHVuaGFuZGxlZCB0b2tlbiAiIDw8IHRv
a2VuIDw8IGVuZGw7CiAgICAgcmV0dXJuIE5VTEw7CiAgIH0KIH0KIAotdm9pZCBYTUxIdHRwUmVx
dWVzdDo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1l
LCBKU1ZhbHVlICp2YWx1ZSwgaW50IGF0dHIpCit2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnB1dChF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgSlNWYWx1ZSAq
dmFsdWUsIGludCBhdHRyKQogewotICBsb29rdXBQdXQ8WE1MSHR0cFJlcXVlc3QsRE9NT2JqZWN0
PihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAmWE1MSHR0cFJlcXVlc3RUYWJsZSwg
dGhpcyApOworICBsb29rdXBQdXQ8SlNYTUxIdHRwUmVxdWVzdCxET01PYmplY3Q+KGV4ZWMsIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIsICZKU1hNTEh0dHBSZXF1ZXN0VGFibGUsIHRoaXMgKTsK
IH0KIAotdm9pZCBYTUxIdHRwUmVxdWVzdDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgSlNWYWx1ZSAqdmFsdWUsIGludCAvKmF0dHIqLykKK3ZvaWQgSlNYTUxI
dHRwUmVxdWVzdDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
SlNWYWx1ZSAqdmFsdWUsIGludCAvKmF0dHIqLykKIHsKICAgc3dpdGNoKHRva2VuKSB7CiAgIGNh
c2UgT25yZWFkeXN0YXRlY2hhbmdlOgotICAgIG9uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyID0g
V2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+Z2V0SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVu
ZXIodmFsdWUsIHRydWUpOworICAgIG1faW1wbC0+c2V0T25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVu
ZXIoV2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+Z2V0SlNVbnByb3RlY3RlZEV2ZW50TGlz
dGVuZXIodmFsdWUsIHRydWUpKTsKICAgICBicmVhazsKICAgY2FzZSBPbmxvYWQ6Ci0gICAgb25M
b2FkTGlzdGVuZXIgPSBXaW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5nZXRKU1VucHJvdGVj
dGVkRXZlbnRMaXN0ZW5lcih2YWx1ZSwgdHJ1ZSk7CisgICAgbV9pbXBsLT5zZXRPbkxvYWRMaXN0
ZW5lcihXaW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5nZXRKU1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lcih2YWx1ZSwgdHJ1ZSkpOwogICAgIGJyZWFrOwogICBkZWZhdWx0OgotICAgIGtkV2Fy
bmluZygpIDw8ICJIVE1MRG9jdW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkgdW5oYW5kbGVkIHRva2Vu
ICIgPDwgdG9rZW4gPDwgZW5kbDsKKyAgICAgIDsKKy8vICAgIGtkV2FybmluZygpIDw8ICJIVE1M
RG9jdW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkgdW5oYW5kbGVkIHRva2VuICIgPDwgdG9rZW4gPDwg
ZW5kbDsKICAgfQogfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjptYXJrKCkKK3ZvaWQgSlNYTUxI
dHRwUmVxdWVzdDo6bWFyaygpCiB7CiAgIERPTU9iamVjdDo6bWFyaygpOwogCisgIEpTVW5wcm90
ZWN0ZWRFdmVudExpc3RlbmVyKiBvblJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lciA9IHN0YXRpY19j
YXN0PEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKj4obV9pbXBsLT5nZXRPblJlYWR5U3RhdGVD
aGFuZ2VMaXN0ZW5lcigpLmdldCgpKTsKKyAgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIG9u
TG9hZExpc3RlbmVyID0gc3RhdGljX2Nhc3Q8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqPiht
X2ltcGwtPmdldE9uTG9hZExpc3RlbmVyKCkuZ2V0KCkpOworCiAgIGlmIChvblJlYWR5U3RhdGVD
aGFuZ2VMaXN0ZW5lcikKICAgICBvblJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lci0+bWFyaygpOwog
CkBAIC0yNTUsNDk4ICsxNzMsODMgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6bWFyaygpCiB9CiAK
IAotWE1MSHR0cFJlcXVlc3Q6OlhNTEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpE
b2N1bWVudEltcGwgKmQpCi0gIDogcU9iamVjdChuZXcgWE1MSHR0cFJlcXVlc3RRT2JqZWN0KHRo
aXMpKSwKLSAgICBkb2MoZCksCi0gICAgYXN5bmModHJ1ZSksCi0gICAgam9iKDApLAotICAgIHN0
YXRlKFVuaW5pdGlhbGl6ZWQpLAotICAgIGNyZWF0ZWREb2N1bWVudChmYWxzZSksCi0gICAgYWJv
cnRlZChmYWxzZSkKLXsKLSAgc2V0UHJvdG90eXBlKFhNTEh0dHBSZXF1ZXN0UHJvdG86OnNlbGYo
ZXhlYykpOwotfQotCi1YTUxIdHRwUmVxdWVzdDo6flhNTEh0dHBSZXF1ZXN0KCkKLXsKLSAgICBk
ZWxldGUgcU9iamVjdDsKLX0KLQotdm9pZCBYTUxIdHRwUmVxdWVzdDo6Y2hhbmdlU3RhdGUoWE1M
SHR0cFJlcXVlc3RTdGF0ZSBuZXdTdGF0ZSkKLXsKLSAgaWYgKHN0YXRlICE9IG5ld1N0YXRlKSB7
Ci0gICAgc3RhdGUgPSBuZXdTdGF0ZTsKLSAgICAKLSAgICBpZiAoZG9jICYmIGRvYy0+ZnJhbWUo
KSAmJiBvblJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lcikgewotICAgICAgaW50IGlnbm9yZUV4Y2Vw
dGlvbjsKLSAgICAgIFJlZlB0cjxFdmVudEltcGw+IGV2ID0gZG9jLT5jcmVhdGVFdmVudCgiSFRN
TEV2ZW50cyIsIGlnbm9yZUV4Y2VwdGlvbik7Ci0gICAgICBldi0+aW5pdEV2ZW50KHJlYWR5c3Rh
dGVjaGFuZ2VFdmVudCwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgICBvblJlYWR5U3RhdGVDaGFuZ2VMaXN0
ZW5lci0+aGFuZGxlRXZlbnRJbXBsKGV2LmdldCgpLCB0cnVlKTsKLSAgICB9Ci0gICAgCi0gICAg
aWYgKGRvYyAmJiBkb2MtPmZyYW1lKCkgJiYgc3RhdGUgPT0gQ29tcGxldGVkICYmIG9uTG9hZExp
c3RlbmVyKSB7Ci0gICAgICBpbnQgaWdub3JlRXhjZXB0aW9uOwotICAgICAgUmVmUHRyPEV2ZW50
SW1wbD4gZXYgPSBkb2MtPmNyZWF0ZUV2ZW50KCJIVE1MRXZlbnRzIiwgaWdub3JlRXhjZXB0aW9u
KTsKLSAgICAgIGV2LT5pbml0RXZlbnQobG9hZEV2ZW50LCB0cnVlLCB0cnVlKTsKLSAgICAgIG9u
TG9hZExpc3RlbmVyLT5oYW5kbGVFdmVudEltcGwoZXYuZ2V0KCksIHRydWUpOwotICAgIH0KLSAg
fQotfQotCi1ib29sIFhNTEh0dHBSZXF1ZXN0Ojp1cmxNYXRjaGVzRG9jdW1lbnREb21haW4oY29u
c3QgS1VSTCYgX3VybCkgY29uc3QKLXsKLSAgS1VSTCBkb2N1bWVudFVSTChkb2MtPlVSTCgpKTsK
LQotICAvLyBhIGxvY2FsIGZpbGUgY2FuIGxvYWQgYW55dGhpbmcKLSAgaWYgKGRvY3VtZW50VVJM
LnByb3RvY29sKCkubG93ZXIoKSA9PSAiZmlsZSIpIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQot
Ci0gIC8vIGJ1dCBhIHJlbW90ZSBkb2N1bWVudCBjYW4gb25seSBsb2FkIGZyb20gdGhlIHNhbWUg
cG9ydCBvbiB0aGUgc2VydmVyCi0gIGlmIChkb2N1bWVudFVSTC5wcm90b2NvbCgpLmxvd2VyKCkg
PT0gX3VybC5wcm90b2NvbCgpLmxvd2VyKCkgJiYKLSAgICAgIGRvY3VtZW50VVJMLmhvc3QoKS5s
b3dlcigpID09IF91cmwuaG9zdCgpLmxvd2VyKCkgJiYKLSAgICAgIGRvY3VtZW50VVJMLnBvcnQo
KSA9PSBfdXJsLnBvcnQoKSkgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcmV0dXJuIGZh
bHNlOwotfQotCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjpvcGVuKGNvbnN0IFFTdHJpbmcmIF9tZXRo
b2QsIGNvbnN0IEtVUkwmIF91cmwsIGJvb2wgX2FzeW5jKQotewotICBhYm9ydCgpOwotICBhYm9y
dGVkID0gZmFsc2U7Ci0KLSAgLy8gY2xlYXIgc3R1ZmYgZnJvbSBwb3NzaWJsZSBwcmV2aW91cyBs
b2FkCi0gIHJlcXVlc3RIZWFkZXJzID0gUVN0cmluZygpOwotICByZXNwb25zZUhlYWRlcnMgPSBR
U3RyaW5nKCk7Ci0gIHJlc3BvbnNlID0gUVN0cmluZygpOwotICBjcmVhdGVkRG9jdW1lbnQgPSBm
YWxzZTsKLSAgcmVzcG9uc2VYTUwgPSAwOwotCi0gIGNoYW5nZVN0YXRlKFVuaW5pdGlhbGl6ZWQp
OwotCi0gIGlmIChhYm9ydGVkKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgaWYgKCF1cmxNYXRj
aGVzRG9jdW1lbnREb21haW4oX3VybCkpIHsKLSAgICByZXR1cm47Ci0gIH0KLQotICAKLSAgbWV0
aG9kID0gX21ldGhvZDsKLSAgdXJsID0gX3VybDsKLSAgYXN5bmMgPSBfYXN5bmM7Ci0KLSAgY2hh
bmdlU3RhdGUoTG9hZGluZyk7Ci19Ci0KLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmQoY29uc3Qg
RE9NU3RyaW5nJiBfYm9keSkKLXsKLSAgaWYgKCFkb2MpCi0gICAgcmV0dXJuOwotCi0gIC8vIEZJ
WE1FOiBTaG91bGQgdGhpcyBhYm9ydCBpbnN0ZWFkIGlmIHdlIGFscmVhZHkgaGF2ZSBhIGpvYiBn
b2luZz8KLSAgaWYgKGpvYikKLSAgICByZXR1cm47Ci0KLSAgYWJvcnRlZCA9IGZhbHNlOwotCi0g
IGlmIChtZXRob2QubG93ZXIoKSA9PSAicG9zdCIgJiYgKHVybC5wcm90b2NvbCgpLmxvd2VyKCkg
PT0gImh0dHAiIHx8IHVybC5wcm90b2NvbCgpLmxvd2VyKCkgPT0gImh0dHBzIikgKSB7Ci0gICAg
ICBRU3RyaW5nIGNvbnRlbnRUeXBlID0gZ2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIik7
Ci0gICAgICBRU3RyaW5nIGNoYXJzZXQ7Ci0gICAgICBpZiAoY29udGVudFR5cGUuaXNFbXB0eSgp
KQotICAgICAgICBzZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24v
eG1sIik7Ci0gICAgICBlbHNlCi0gICAgICAgIGNoYXJzZXQgPSBnZXRDaGFyc2V0KGNvbnRlbnRU
eXBlKTsKLSAgICAgIAotICAgICAgaWYgKGNoYXJzZXQuaXNFbXB0eSgpKQotICAgICAgICBjaGFy
c2V0ID0gIlVURi04IjsKLSAgICAgIAotICAgICAgUVRleHRDb2RlYyAqY29kZWMgPSBRVGV4dENv
ZGVjOjpjb2RlY0Zvck5hbWUoY2hhcnNldC5sYXRpbjEoKSk7Ci0gICAgICBpZiAoIWNvZGVjKSAg
IC8vIEZJWE1FOiByZXBvcnQgYW4gZXJyb3I/Ci0gICAgICAgIGNvZGVjID0gUVRleHRDb2RlYzo6
Y29kZWNGb3JOYW1lKCJVVEYtOCIpOwotCi0gICAgICBqb2IgPSBLSU86Omh0dHBfcG9zdCh1cmws
IGNvZGVjLT5mcm9tVW5pY29kZShfYm9keS5xc3RyaW5nKCkpLCBmYWxzZSk7Ci0gIH0KLSAgZWxz
ZQotICAgICBqb2IgPSBLSU86OmdldCggdXJsLCBmYWxzZSwgZmFsc2UgKTsKLSAgaWYgKHJlcXVl
c3RIZWFkZXJzLmxlbmd0aCgpID4gMCkKLSAgICBqb2ItPmFkZE1ldGFEYXRhKCJjdXN0b21IVFRQ
SGVhZGVyIiwgcmVxdWVzdEhlYWRlcnMpOwotCi0gIGlmICghYXN5bmMpIHsKLSAgICBCeXRlQXJy
YXkgZGF0YTsKLSAgICBLVVJMIGZpbmFsVVJMOwotICAgIFFTdHJpbmcgaGVhZGVyczsKLQotICAg
IHsgLy8gc2NvcGUKLSAgICAgICAgLy8gYXZvaWQgZGVhZGxvY2sgaW4gY2FzZSB0aGUgbG9hZGVy
IHdhbnRzIHRvIHVzZSBKUyBvbiBhIGJhY2tncm91bmQgdGhyZWFkCi0gICAgICAgIEpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BMb2NrczsKLQotICAgICAgICBkYXRhID0gS1dRU2VydmVTeW5jaHJv
bm91c1JlcXVlc3Qoa2h0bWw6OkNhY2hlOjpsb2FkZXIoKSwgZG9jLT5kb2NMb2FkZXIoKSwgam9i
LCBmaW5hbFVSTCwgaGVhZGVycyk7Ci0gICAgfQotCi0gICAgam9iID0gMDsKLSAgICBwcm9jZXNz
U3luY0xvYWRSZXN1bHRzKGRhdGEsIGZpbmFsVVJMLCBoZWFkZXJzKTsKLSAgICAKLSAgICByZXR1
cm47Ci0gIH0KLQotICB7Ci0gICAgSlNMb2NrIGxvY2s7Ci0gICAgZ2NQcm90ZWN0KHRoaXMpOwot
ICB9Ci0gIAotICBxT2JqZWN0LT5jb25uZWN0KCBqb2IsIFNJR05BTCggcmVzdWx0KCBLSU86Okpv
YiogKSApLAotICAgICAgICAgICAgICAgICAgICBTTE9UKCBzbG90RmluaXNoZWQoIEtJTzo6Sm9i
KiApICkgKTsKLSAgcU9iamVjdC0+Y29ubmVjdCggam9iLCBTSUdOQUwoIGRhdGEoIEtJTzo6Sm9i
KiwgY29uc3QgY2hhciosIGludCApICksCi0gICAgICAgICAgICAgICAgICAgIFNMT1QoIHNsb3RE
YXRhKCBLSU86OkpvYiosIGNvbnN0IGNoYXIqLCBpbnQgKSApICk7Ci0gIHFPYmplY3QtPmNvbm5l
Y3QoIGpvYiwgU0lHTkFMKHJlZGlyZWN0aW9uKEtJTzo6Sm9iKiwgY29uc3QgS1VSTCYgKSApLAot
ICAgICAgICAgICAgICAgICAgICBTTE9UKCBzbG90UmVkaXJlY3Rpb24oS0lPOjpKb2IqLCBjb25z
dCBLVVJMJikgKSApOwotCi0gIGFkZFRvUmVxdWVzdHNCeURvY3VtZW50KCk7Ci0KLSAgS1dRU2Vy
dmVSZXF1ZXN0KGtodG1sOjpDYWNoZTo6bG9hZGVyKCksIGRvYy0+ZG9jTG9hZGVyKCksIGpvYik7
Ci19Ci0KLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OmFib3J0KCkKLXsKLSAgYm9vbCBoYWRKb2IgPSBq
b2I7Ci0KLSAgaWYgKGhhZEpvYikgewotICAgIHJlbW92ZUZyb21SZXF1ZXN0c0J5RG9jdW1lbnQo
KTsKLSAgICBqb2ItPmtpbGwoKTsKLSAgICBqb2IgPSAwOwotICB9Ci0gIGRlY29kZXIgPSAwOwot
ICBhYm9ydGVkID0gdHJ1ZTsKLQotICBpZiAoaGFkSm9iKSB7Ci0gICAgSlNMb2NrIGxvY2s7Ci0g
ICAgZ2NVbnByb3RlY3QodGhpcyk7Ci0gIH0KLX0KLQotdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2V0
UmVxdWVzdEhlYWRlcihjb25zdCBRU3RyaW5nJiBuYW1lLCBjb25zdCBRU3RyaW5nICZ2YWx1ZSkK
LXsKLSAgaWYgKHJlcXVlc3RIZWFkZXJzLmxlbmd0aCgpID4gMCkgewotICAgIHJlcXVlc3RIZWFk
ZXJzICs9ICJcclxuIjsKLSAgfQotICByZXF1ZXN0SGVhZGVycyArPSBuYW1lOwotICByZXF1ZXN0
SGVhZGVycyArPSAiOiAiOwotICByZXF1ZXN0SGVhZGVycyArPSB2YWx1ZTsKLX0KLQotUVN0cmlu
ZyBYTUxIdHRwUmVxdWVzdDo6Z2V0UmVxdWVzdEhlYWRlcihjb25zdCBRU3RyaW5nJiBuYW1lKSBj
b25zdAotewotICByZXR1cm4gZ2V0U3BlY2lmaWNIZWFkZXIocmVxdWVzdEhlYWRlcnMsIG5hbWUp
OwotfQotCi1KU1ZhbHVlICpYTUxIdHRwUmVxdWVzdDo6Z2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkg
Y29uc3QKLXsKLSAgaWYgKHJlc3BvbnNlSGVhZGVycy5pc0VtcHR5KCkpIHsKLSAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKLSAgfQotCi0gIGludCBlbmRPZkxpbmUgPSByZXNwb25zZUhlYWRlcnMu
ZmluZCgiXG4iKTsKLQotICBpZiAoZW5kT2ZMaW5lID09IC0xKSB7Ci0gICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gIH0KLQotICByZXR1cm4ganNTdHJpbmcocmVzcG9uc2VIZWFkZXJzLm1pZChl
bmRPZkxpbmUgKyAxKSArICJcbiIpOwotfQotCi1RU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRS
ZXNwb25zZUhlYWRlcihjb25zdCBRU3RyaW5nJiBuYW1lKSBjb25zdAotewotICByZXR1cm4gZ2V0
U3BlY2lmaWNIZWFkZXIocmVzcG9uc2VIZWFkZXJzLCBuYW1lKTsKLX0KLQotUVN0cmluZyBYTUxI
dHRwUmVxdWVzdDo6Z2V0U3BlY2lmaWNIZWFkZXIoY29uc3QgUVN0cmluZyYgaGVhZGVycywgY29u
c3QgUVN0cmluZyYgbmFtZSkKLXsKLSAgaWYgKGhlYWRlcnMuaXNFbXB0eSgpKQotICAgIHJldHVy
biBRU3RyaW5nKCk7Ci0KLSAgUVJlZ0V4cCBoZWFkZXJMaW5lUGF0dGVybihuYW1lICsgIjoiLCBm
YWxzZSk7Ci0KLSAgaW50IG1hdGNoTGVuZ3RoOwotICBpbnQgaGVhZGVyTGluZVBvcyA9IGhlYWRl
ckxpbmVQYXR0ZXJuLm1hdGNoKGhlYWRlcnMsIDAsICZtYXRjaExlbmd0aCk7Ci0gIHdoaWxlICho
ZWFkZXJMaW5lUG9zICE9IC0xKSB7Ci0gICAgaWYgKGhlYWRlckxpbmVQb3MgPT0gMCB8fCBoZWFk
ZXJzW2hlYWRlckxpbmVQb3MtMV0gPT0gJ1xuJykgewotICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IAotICAgIGhlYWRlckxpbmVQb3MgPSBoZWFkZXJMaW5lUGF0dGVybi5tYXRjaChoZWFkZXJzLCBo
ZWFkZXJMaW5lUG9zICsgMSwgJm1hdGNoTGVuZ3RoKTsKLSAgfQotCi0gIGlmIChoZWFkZXJMaW5l
UG9zID09IC0xKQotICAgIHJldHVybiBRU3RyaW5nKCk7Ci0gICAgCi0gIGludCBlbmRPZkxpbmUg
PSBoZWFkZXJzLmZpbmQoIlxuIiwgaGVhZGVyTGluZVBvcyArIG1hdGNoTGVuZ3RoKTsKLSAgCi0g
IHJldHVybiBoZWFkZXJzLm1pZChoZWFkZXJMaW5lUG9zICsgbWF0Y2hMZW5ndGgsIGVuZE9mTGlu
ZSAtIChoZWFkZXJMaW5lUG9zICsgbWF0Y2hMZW5ndGgpKS5zdHJpcFdoaXRlU3BhY2UoKTsKLX0K
LQotYm9vbCBYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VJc1hNTCgpIGNvbnN0Ci17Ci0gICAgUVN0
cmluZyBtaW1lVHlwZSA9IGdldE1JTUVUeXBlKE1JTUVUeXBlT3ZlcnJpZGUpOwotICAgIGlmICht
aW1lVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIG1pbWVUeXBlID0gZ2V0TUlNRVR5cGUoZ2V0UmVz
cG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTsKLSAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgp
KQotICAgICAgbWltZVR5cGUgPSAidGV4dC94bWwiOwotICAgIAotICAgIHJldHVybiBET01JbXBs
ZW1lbnRhdGlvbkltcGw6OmlzWE1MTUlNRVR5cGUobWltZVR5cGUpOwotfQotCi1KU1ZhbHVlICpY
TUxIdHRwUmVxdWVzdDo6Z2V0U3RhdHVzKCkgY29uc3QKLXsKLSAgaWYgKHJlc3BvbnNlSGVhZGVy
cy5pc0VtcHR5KCkpIHsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgfQotICAKLSAgaW50
IGVuZE9mTGluZSA9IHJlc3BvbnNlSGVhZGVycy5maW5kKCJcbiIpOwotICBRU3RyaW5nIGZpcnN0
TGluZSA9IGVuZE9mTGluZSA9PSAtMSA/IHJlc3BvbnNlSGVhZGVycyA6IHJlc3BvbnNlSGVhZGVy
cy5sZWZ0KGVuZE9mTGluZSk7Ci0gIGludCBjb2RlU3RhcnQgPSBmaXJzdExpbmUuZmluZCgiICIp
OwotICBpbnQgY29kZUVuZCA9IGZpcnN0TGluZS5maW5kKCIgIiwgY29kZVN0YXJ0ICsgMSk7Ci0g
IAotICBpZiAoY29kZVN0YXJ0ID09IC0xIHx8IGNvZGVFbmQgPT0gLTEpIHsKLSAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKLSAgfQotICAKLSAgUVN0cmluZyBudW1iZXIgPSBmaXJzdExpbmUubWlk
KGNvZGVTdGFydCArIDEsIGNvZGVFbmQgLSAoY29kZVN0YXJ0ICsgMSkpOwotICAKLSAgYm9vbCBv
ayA9IGZhbHNlOwotICBpbnQgY29kZSA9IG51bWJlci50b0ludCgmb2spOwotICBpZiAoIW9rKSB7
Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gIH0KLQotICByZXR1cm4ganNOdW1iZXIoY29k
ZSk7Ci19Ci0KLUpTVmFsdWUgKlhNTEh0dHBSZXF1ZXN0OjpnZXRTdGF0dXNUZXh0KCkgY29uc3QK
K0pTWE1MSHR0cFJlcXVlc3Q6OkpTWE1MSHR0cFJlcXVlc3QoRXhlY1N0YXRlICpleGVjLCBEb2N1
bWVudEltcGwgKmQpCisgIDogbV9pbXBsKG5ldyBYTUxIdHRwUmVxdWVzdChkLCB0aGlzKSkKIHsK
LSAgaWYgKHJlc3BvbnNlSGVhZGVycy5pc0VtcHR5KCkpIHsKLSAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLSAgfQotICAKLSAgaW50IGVuZE9mTGluZSA9IHJlc3BvbnNlSGVhZGVycy5maW5kKCJc
biIpOwotICBRU3RyaW5nIGZpcnN0TGluZSA9IGVuZE9mTGluZSA9PSAtMSA/IHJlc3BvbnNlSGVh
ZGVycyA6IHJlc3BvbnNlSGVhZGVycy5sZWZ0KGVuZE9mTGluZSk7Ci0gIGludCBjb2RlU3RhcnQg
PSBmaXJzdExpbmUuZmluZCgiICIpOwotICBpbnQgY29kZUVuZCA9IGZpcnN0TGluZS5maW5kKCIg
IiwgY29kZVN0YXJ0ICsgMSk7Ci0KLSAgaWYgKGNvZGVTdGFydCA9PSAtMSB8fCBjb2RlRW5kID09
IC0xKSB7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gIH0KLSAgCi0gIFFTdHJpbmcgc3Rh
dHVzVGV4dCA9IGZpcnN0TGluZS5taWQoY29kZUVuZCArIDEsIGVuZE9mTGluZSAtIChjb2RlRW5k
ICsgMSkpLnN0cmlwV2hpdGVTcGFjZSgpOwotICAKLSAgcmV0dXJuIGpzU3RyaW5nKHN0YXR1c1Rl
eHQpOworICBzZXRQcm90b3R5cGUoSlNYTUxIdHRwUmVxdWVzdFByb3RvOjpzZWxmKGV4ZWMpKTsK
IH0KIAotdm9pZCBYTUxIdHRwUmVxdWVzdDo6cHJvY2Vzc1N5bmNMb2FkUmVzdWx0cyhjb25zdCBC
eXRlQXJyYXkgJmRhdGEsIGNvbnN0IEtVUkwgJmZpbmFsVVJMLCBjb25zdCBRU3RyaW5nICZoZWFk
ZXJzKQorSlNYTUxIdHRwUmVxdWVzdDo6fkpTWE1MSHR0cFJlcXVlc3QoKQogewotICBpZiAoIXVy
bE1hdGNoZXNEb2N1bWVudERvbWFpbihmaW5hbFVSTCkpIHsKLSAgICBhYm9ydCgpOwotICAgIHJl
dHVybjsKLSAgfQotICAKLSAgcmVzcG9uc2VIZWFkZXJzID0gaGVhZGVyczsKLSAgY2hhbmdlU3Rh
dGUoTG9hZGVkKTsKLSAgaWYgKGFib3J0ZWQpIHsKLSAgICByZXR1cm47Ci0gIH0KLSAgCi0gIGNv
bnN0IGNoYXIgKmJ5dGVzID0gKGNvbnN0IGNoYXIgKilkYXRhLmRhdGEoKTsKLSAgaW50IGxlbiA9
IChpbnQpZGF0YS5zaXplKCk7Ci0KLSAgc2xvdERhdGEoMCwgYnl0ZXMsIGxlbik7Ci0KLSAgaWYg
KGFib3J0ZWQpIHsKLSAgICByZXR1cm47Ci0gIH0KLQotICBzbG90RmluaXNoZWQoMCk7CiB9CiAK
LXZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNsb3RGaW5pc2hlZChLSU86OkpvYiAqKQorSlNWYWx1ZSAq
SlNYTUxIdHRwUmVxdWVzdFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVj
LCBKU09iamVjdCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKHJlc3BvbnNl
SGVhZGVycy5pc0VtcHR5KCkgJiYgam9iKQotICAgIHJlc3BvbnNlSGVhZGVycyA9IGpvYi0+cXVl
cnlNZXRhRGF0YSgiSFRUUC1IZWFkZXJzIik7Ci0KLSAgaWYgKHN0YXRlIDwgTG9hZGVkKQotICAg
IGNoYW5nZVN0YXRlKExvYWRlZCk7Ci0KLSAgaWYgKGRlY29kZXIpCi0gICAgcmVzcG9uc2UgKz0g
ZGVjb2Rlci0+Zmx1c2goKTsKLQotICByZW1vdmVGcm9tUmVxdWVzdHNCeURvY3VtZW50KCk7Ci0g
IGpvYiA9IDA7Ci0KLSAgY2hhbmdlU3RhdGUoQ29tcGxldGVkKTsKLSAgZGVjb2RlciA9IDA7Ci0K
LSAgSlNMb2NrIGxvY2s7Ci0gIGdjVW5wcm90ZWN0KHRoaXMpOwotfQotCi12b2lkIFhNTEh0dHBS
ZXF1ZXN0OjpzbG90UmVkaXJlY3Rpb24oS0lPOjpKb2IqLCBjb25zdCBLVVJMJiB1cmwpCi17Ci0g
IGlmICghdXJsTWF0Y2hlc0RvY3VtZW50RG9tYWluKHVybCkpIHsKLSAgICBhYm9ydCgpOwotICB9
Ci19Ci0KLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNsb3REYXRhKEtJTzo6Sm9iKiwgY29uc3QgY2hh
ciAqZGF0YSwgaW50IGxlbikKLXsKLSAgaWYgKHJlc3BvbnNlSGVhZGVycy5pc0VtcHR5KCkgJiYg
am9iKQotICAgIHJlc3BvbnNlSGVhZGVycyA9IGpvYi0+cXVlcnlNZXRhRGF0YSgiSFRUUC1IZWFk
ZXJzIik7Ci0KLSAgaWYgKHN0YXRlIDwgTG9hZGVkKQotICAgIGNoYW5nZVN0YXRlKExvYWRlZCk7
Ci0gIAotICBpZiAoIWRlY29kZXIpIHsKLSAgICBlbmNvZGluZyA9IGdldENoYXJzZXQoTUlNRVR5
cGVPdmVycmlkZSk7Ci0gICAgaWYgKGVuY29kaW5nLmlzRW1wdHkoKSkKLSAgICAgIGVuY29kaW5n
ID0gZ2V0Q2hhcnNldChnZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1UeXBlIikpOwotICAgIGlm
IChlbmNvZGluZy5pc0VtcHR5KCkgJiYgam9iKQotICAgICAgZW5jb2RpbmcgPSBqb2ItPnF1ZXJ5
TWV0YURhdGEoImNoYXJzZXQiKTsKLSAgICAKLSAgICBkZWNvZGVyID0gbmV3IERlY29kZXI7Ci0g
ICAgaWYgKCFlbmNvZGluZy5pc0VtcHR5KCkpCi0gICAgICBkZWNvZGVyLT5zZXRFbmNvZGluZyhl
bmNvZGluZy5sYXRpbjEoKSwgRGVjb2Rlcjo6RW5jb2RpbmdGcm9tSFRUUEhlYWRlcik7Ci0gICAg
ZWxzZSB7Ci0gICAgICAvLyBvbmx5IGFsbG93IERlY29kZXIgdG8gbG9vayBpbnNpZGUgdGhlIHJl
c3BvbnNlIGlmIGl0J3MgWE1MCi0gICAgICBkZWNvZGVyLT5zZXRFbmNvZGluZygiVVRGLTgiLCBy
ZXNwb25zZUlzWE1MKCkgPyBEZWNvZGVyOjpEZWZhdWx0RW5jb2RpbmcgOiBEZWNvZGVyOjpFbmNv
ZGluZ0Zyb21IVFRQSGVhZGVyKTsKLSAgICB9Ci0gIH0KLSAgaWYgKGxlbiA9PSAwKQotICAgIHJl
dHVybjsKLQotICBpZiAobGVuID09IC0xKQotICAgIGxlbiA9IHN0cmxlbihkYXRhKTsKLQotICBR
U3RyaW5nIGRlY29kZWQgPSBkZWNvZGVyLT5kZWNvZGUoZGF0YSwgbGVuKTsKLQotICByZXNwb25z
ZSArPSBkZWNvZGVkOwotCi0gIGlmICghYWJvcnRlZCkgewotICAgIGNoYW5nZVN0YXRlKEludGVy
YWN0aXZlKTsKLSAgfQotfQotCi1YTUxIdHRwUmVxdWVzdDo6UmVxdWVzdHNNYXAmIFhNTEh0dHBS
ZXF1ZXN0OjpyZXF1ZXN0c0J5RG9jdW1lbnQoKQotewotICAgIHN0YXRpYyBSZXF1ZXN0c01hcCBt
YXA7Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQotdm9pZCBYTUxIdHRwUmVxdWVzdDo6YWRkVG9SZXF1
ZXN0c0J5RG9jdW1lbnQoKQotewotICBhc3NlcnQoZG9jKTsKLQotICBSZXF1ZXN0c1NldCogcmVx
dWVzdHMgPSByZXF1ZXN0c0J5RG9jdW1lbnQoKS5nZXQoZG9jKTsKLSAgaWYgKCFyZXF1ZXN0cykg
ewotICAgIHJlcXVlc3RzID0gbmV3IFJlcXVlc3RzU2V0OwotICAgIHJlcXVlc3RzQnlEb2N1bWVu
dCgpLnNldChkb2MsIHJlcXVlc3RzKTsKLSAgfQotCi0gIGFzc2VydCghcmVxdWVzdHMtPmNvbnRh
aW5zKHRoaXMpKTsKLSAgcmVxdWVzdHMtPmluc2VydCh0aGlzKTsKLX0KLQotdm9pZCBYTUxIdHRw
UmVxdWVzdDo6cmVtb3ZlRnJvbVJlcXVlc3RzQnlEb2N1bWVudCgpCi17Ci0gIGFzc2VydChkb2Mp
OwotCi0gIFJlcXVlc3RzU2V0KiByZXF1ZXN0cyA9IHJlcXVlc3RzQnlEb2N1bWVudCgpLmdldChk
b2MpOwotCi0gIC8vIFNpbmNlIHN5bmNocm9ub3VzIGxvYWRzIGFyZSBub3QgYWRkZWQgdG8gcmVx
dWVzdHNCeURvY3VtZW50KCksIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGZvdW5kIHRoZSByZXF1
ZXN0LgotICBpZiAoIXJlcXVlc3RzIHx8ICFyZXF1ZXN0cy0+Y29udGFpbnModGhpcykpCi0gICAg
cmV0dXJuOwotCi0gIHJlcXVlc3RzLT5yZW1vdmUodGhpcyk7Ci0KLSAgaWYgKHJlcXVlc3RzLT5p
c0VtcHR5KCkpIHsKLSAgICByZXF1ZXN0c0J5RG9jdW1lbnQoKS5yZW1vdmUoZG9jKTsKLSAgICBk
ZWxldGUgcmVxdWVzdHM7Ci0gIH0KLX0KLQotdm9pZCBYTUxIdHRwUmVxdWVzdDo6Y2FuY2VsUmVx
dWVzdHMoRE9NOjpEb2N1bWVudEltcGwqIGQpCi17Ci0gIHdoaWxlIChSZXF1ZXN0c1NldCogcmVx
dWVzdHMgPSByZXF1ZXN0c0J5RG9jdW1lbnQoKS5nZXQoZCkpCi0gICAgKCpyZXF1ZXN0cy0+YmVn
aW4oKSktPmFib3J0KCk7Ci19Ci0KLUpTVmFsdWUgKlhNTEh0dHBSZXF1ZXN0UHJvdG9GdW5jOjpj
YWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBM
aXN0ICZhcmdzKQotewotICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZYTUxIdHRwUmVxdWVzdDo6
aW5mbykpCisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkpTWE1MSHR0cFJlcXVlc3Q6OmluZm8p
KQogICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKLSAgWE1MSHR0cFJl
cXVlc3QgKnJlcXVlc3QgPSBzdGF0aWNfY2FzdDxYTUxIdHRwUmVxdWVzdCAqPih0aGlzT2JqKTsK
KyAgSlNYTUxIdHRwUmVxdWVzdCAqcmVxdWVzdCA9IHN0YXRpY19jYXN0PEpTWE1MSHR0cFJlcXVl
c3QgKj4odGhpc09iaik7CiAKICAgc3dpdGNoIChpZCkgewotICBjYXNlIFhNTEh0dHBSZXF1ZXN0
OjpBYm9ydDogewotICAgIHJlcXVlc3QtPmFib3J0KCk7CisgIGNhc2UgSlNYTUxIdHRwUmVxdWVz
dDo6QWJvcnQ6IHsKKyAgICByZXF1ZXN0LT5tX2ltcGwtPmFib3J0KCk7CiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgIH0KLSAgY2FzZSBYTUxIdHRwUmVxdWVzdDo6R2V0QWxsUmVzcG9uc2VI
ZWFkZXJzOiB7CisgIGNhc2UgSlNYTUxIdHRwUmVxdWVzdDo6R2V0QWxsUmVzcG9uc2VIZWFkZXJz
OiB7CiAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDApIHsKICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIH0KKyAgICAKKyAgICBET01TdHJpbmcgaGVhZGVycyA9IHJlcXVlc3QtPm1faW1w
bC0+Z2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7CisKKyAgICBpZiAoaGVhZGVycy5pc051bGwoKSkK
KyAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgcmV0dXJuIHJlcXVlc3QtPmdldEFs
bFJlc3BvbnNlSGVhZGVycygpOworICAgIHJldHVybiBqc1N0cmluZyhoZWFkZXJzKTsKICAgfQot
ICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpHZXRSZXNwb25zZUhlYWRlcjogeworICBjYXNlIEpTWE1M
SHR0cFJlcXVlc3Q6OkdldFJlc3BvbnNlSGVhZGVyOiB7CiAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9
IDEpIHsKICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KICAgICAKLSAgICBRU3Ry
aW5nIGhlYWRlciA9IHJlcXVlc3QtPmdldFJlc3BvbnNlSGVhZGVyKGFyZ3NbMF0tPnRvU3RyaW5n
KGV4ZWMpLnFzdHJpbmcoKSk7CisgICAgRE9NU3RyaW5nIGhlYWRlciA9IHJlcXVlc3QtPm1faW1w
bC0+Z2V0UmVzcG9uc2VIZWFkZXIoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCkp
OwogCiAgICAgaWYgKGhlYWRlci5pc051bGwoKSkKICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCiAgICAgcmV0dXJuIGpzU3RyaW5nKGhlYWRlcik7CiAgIH0KLSAgY2FzZSBYTUxIdHRwUmVx
dWVzdDo6T3BlbjoKKyAgY2FzZSBKU1hNTEh0dHBSZXF1ZXN0OjpPcGVuOgogICAgIHsKICAgICAg
IGlmIChhcmdzLnNpemUoKSA8IDIgfHwgYXJncy5zaXplKCkgPiA1KSB7CiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgICAgfQogICAgIAotICAgICAgUVN0cmluZyBtZXRob2QgPSBh
cmdzWzBdLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCk7Ci0gICAgICBLVVJMIHVybCA9IEtVUkwo
V2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+ZnJhbWUoKS0+eG1sRG9jSW1wbCgpLT5jb21w
bGV0ZVVSTChhcmdzWzFdLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkpKTsKKyAgICAgIERPTVN0
cmluZyBtZXRob2QgPSBhcmdzWzBdLT50b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKTsKKyAgICAg
IERPTVN0cmluZyB1cmwgPSBhcmdzWzFdLT50b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKTsKIAog
ICAgICAgYm9vbCBhc3luYyA9IHRydWU7Ci0gICAgICBpZiAoYXJncy5zaXplKCkgPj0gMykgewor
ICAgICAgaWYgKGFyZ3Muc2l6ZSgpID49IDMpCiAgICAgICAgIGFzeW5jID0gYXJnc1syXS0+dG9C
b29sZWFuKGV4ZWMpOwotICAgICAgfQogICAgIAotICAgICAgaWYgKGFyZ3Muc2l6ZSgpID49IDQp
IHsKLSAgICAgICAgdXJsLnNldFVzZXIoYXJnc1szXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygp
KTsKLSAgICAgIH0KKyAgICAgIERPTVN0cmluZyB1c2VyOworICAgICAgaWYgKGFyZ3Muc2l6ZSgp
ID49IDQpCisgICAgICAgIHVzZXIgPSBhcmdzWzNdLT50b1N0cmluZyhleGVjKS5kb21TdHJpbmco
KTsKICAgICAgIAotICAgICAgaWYgKGFyZ3Muc2l6ZSgpID49IDUpIHsKLSAgICAgICAgdXJsLnNl
dFBhc3MoYXJnc1s0XS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpKTsKLSAgICAgIH0KKyAgICAg
IERPTVN0cmluZyBwYXNzd29yZDsKKyAgICAgIGlmIChhcmdzLnNpemUoKSA+PSA1KQorICAgICAg
ICBwYXNzd29yZCA9IGFyZ3NbNF0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpOwogCi0gICAg
ICByZXF1ZXN0LT5vcGVuKG1ldGhvZCwgdXJsLCBhc3luYyk7CisgICAgICByZXF1ZXN0LT5tX2lt
cGwtPm9wZW4obWV0aG9kLCB1cmwsIGFzeW5jLCB1c2VyLCBwYXNzd29yZCk7CiAKICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KLSAgY2FzZSBYTUxIdHRwUmVxdWVzdDo6U2VuZDoK
KyAgY2FzZSBKU1hNTEh0dHBSZXF1ZXN0OjpTZW5kOgogICAgIHsKICAgICAgIGlmIChhcmdzLnNp
emUoKSA+IDEpIHsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICB9CiAKLSAg
ICAgIGlmIChyZXF1ZXN0LT5zdGF0ZSAhPSBMb2FkaW5nKSB7Ci0gICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgICAgfQotCiAgICAgICBET01TdHJpbmcgYm9keTsKIAogICAgICAgaWYg
KGFyZ3Muc2l6ZSgpID49IDEpIHsKQEAgLTc2MCwyNCArMjYzLDI0IEBAIEpTVmFsdWUgKlhNTEh0
dHBSZXF1ZXN0UHJvdG9GdW5jOjpjYWxsQXMKICAgICAgICAgfQogICAgICAgfQogCi0gICAgICBy
ZXF1ZXN0LT5zZW5kKGJvZHkpOworICAgICAgcmVxdWVzdC0+bV9pbXBsLT5zZW5kKGJvZHkpOwog
CiAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9Ci0gIGNhc2UgWE1MSHR0cFJlcXVl
c3Q6OlNldFJlcXVlc3RIZWFkZXI6IHsKKyAgY2FzZSBKU1hNTEh0dHBSZXF1ZXN0OjpTZXRSZXF1
ZXN0SGVhZGVyOiB7CiAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDIpIHsKICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIH0KICAgICAKLSAgICByZXF1ZXN0LT5zZXRSZXF1ZXN0SGVhZGVy
KGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSwgYXJnc1sxXS0+dG9TdHJpbmcoZXhl
YykucXN0cmluZygpKTsKKyAgICByZXF1ZXN0LT5tX2ltcGwtPnNldFJlcXVlc3RIZWFkZXIoYXJn
c1swXS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCksIGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMp
LmRvbVN0cmluZygpKTsKICAgICAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgfQotICBj
YXNlIFhNTEh0dHBSZXF1ZXN0OjpPdmVycmlkZU1JTUVUeXBlOiB7CisgIGNhc2UgSlNYTUxIdHRw
UmVxdWVzdDo6T3ZlcnJpZGVNSU1FVHlwZTogewogICAgIGlmIChhcmdzLnNpemUoKSAhPSAxKSB7
CiAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgcmVxdWVzdC0+TUlNRVR5
cGVPdmVycmlkZSA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKTsKKyAgICByZXF1
ZXN0LT5tX2ltcGwtPm92ZXJyaWRlTUlNRVR5cGUoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuZG9t
U3RyaW5nKCkpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICB9CiAgIH0KSW5kZXg6IGto
dG1sL2VjbWEveG1saHR0cHJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2VjbWEveG1s
aHR0cHJlcXVlc3QuY3BwCShyZXZpc2lvbiAxMjE3MCkKKysrIGtodG1sL2VjbWEveG1saHR0cHJl
cXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcwogICogIENvcHlyaWdodCAoQykgMjAwNCBB
cHBsZSBDb21wdXRlciwgSW5jLgotICogIENvcHlyaWdodCAoQykgMjAwNSBBbGV4ZXkgUHJvc2t1
cnlha292IDxhcEBueXBvcC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFsZXhl
eSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTIx
LDIwICsyMSwxOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgInhtbGh0dHByZXF1
ZXN0LmgiCiAKLSNpbmNsdWRlICJranNfd2luZG93LmgiCi0jaW5jbHVkZSAia2pzX2V2ZW50cy5o
IgorI2luY2x1ZGUgImtqcy9wcm90ZWN0LmgiCiAKICNpbmNsdWRlICJkb20vZG9tX2V4Y2VwdGlv
bi5oIgogI2luY2x1ZGUgImRvbS9kb21fc3RyaW5nLmgiCisjaW5jbHVkZSAiZG9tL2RvbTJfZXZl
bnRzLmgiCiAjaW5jbHVkZSAiQ2FjaGUuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfZG9jdW1lbnRp
bXBsLmgiCisjaW5jbHVkZSAibWlzYy9mb3JtZGF0YS5oIgogI2luY2x1ZGUgInhtbC9kb20yX2V2
ZW50c2ltcGwuaCIKICNpbmNsdWRlICJ4bWwvRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkRPTUlt
cGxlbWVudGF0aW9uSW1wbC5oIgotCiAjaW5jbHVkZSAiRnJhbWUuaCIKIAotI2luY2x1ZGUgPGtk
ZWJ1Zy5oPgogI2luY2x1ZGUgPGtpby9qb2IuaD4KICNpbmNsdWRlIDxxb2JqZWN0Lmg+CiAjaW5j
bHVkZSA8cXJlZ2V4cC5oPgpAQCAtNDIsMTIgKzQxLDcgQEAKIAogI2luY2x1ZGUgIktXUUxvYWRl
ci5oIgogCi0jaW5jbHVkZSAieG1saHR0cHJlcXVlc3QubHV0LmgiCi0KLXVzaW5nIG5hbWVzcGFj
ZSBET007Ci11c2luZyBuYW1lc3BhY2UgRE9NOjpFdmVudE5hbWVzOwotCi11c2luZyBraHRtbDo6
RGVjb2RlcjsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpFdmVudE5hbWVzOwogCiBzdGF0aWMg
aW5saW5lIFFTdHJpbmcgZ2V0TUlNRVR5cGUoY29uc3QgUVN0cmluZyYgY29udGVudFR5cGVTdHJp
bmcpCiB7CkBAIC05MywyNCArODcsNyBAQCBzdGF0aWMgUVN0cmluZyBnZXRDaGFyc2V0KGNvbnN0
IFFTdHJpbmcmCiAgICAgcmV0dXJuIFFTdHJpbmcoKTsKIH0KIAotbmFtZXNwYWNlIEtKUyB7Ci0K
LS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gWE1MSHR0cFJlcXVlc3QgT2JqZWN0IC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwotCi0vKiBTb3VyY2UgZm9yIFhNTEh0dHBSZXF1ZXN0UHJvdG9UYWJsZS4K
LUBiZWdpbiBYTUxIdHRwUmVxdWVzdFByb3RvVGFibGUgNwotICBhYm9ydCAgICAgICAgICAgICAg
ICAgWE1MSHR0cFJlcXVlc3Q6OkFib3J0ICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8RnVu
Y3Rpb24gMAotICBnZXRBbGxSZXNwb25zZUhlYWRlcnMgWE1MSHR0cFJlcXVlc3Q6OkdldEFsbFJl
c3BvbnNlSGVhZGVycyAgIERvbnREZWxldGV8RnVuY3Rpb24gMAotICBnZXRSZXNwb25zZUhlYWRl
ciAgICAgWE1MSHR0cFJlcXVlc3Q6OkdldFJlc3BvbnNlSGVhZGVyICAgICAgIERvbnREZWxldGV8
RnVuY3Rpb24gMQotICBvcGVuICAgICAgICAgICAgICAgICAgWE1MSHR0cFJlcXVlc3Q6Ok9wZW4g
ICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gNQotICBvdmVycmlkZU1pbWVU
eXBlICAgICAgWE1MSHR0cFJlcXVlc3Q6Ok92ZXJyaWRlTUlNRVR5cGUgICAgICAgIERvbnREZWxl
dGV8RnVuY3Rpb24gMQotICBzZW5kICAgICAgICAgICAgICAgICAgWE1MSHR0cFJlcXVlc3Q6OlNl
bmQgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMQotICBzZXRSZXF1ZXN0
SGVhZGVyICAgICAgWE1MSHR0cFJlcXVlc3Q6OlNldFJlcXVlc3RIZWFkZXIgICAgICAgIERvbnRE
ZWxldGV8RnVuY3Rpb24gMgotQGVuZAotKi8KLUtKU19ERUZJTkVfUFJPVE9UWVBFKFhNTEh0dHBS
ZXF1ZXN0UHJvdG8pCi1LSlNfSU1QTEVNRU5UX1BST1RPRlVOQyhYTUxIdHRwUmVxdWVzdFByb3Rv
RnVuYykKLUtKU19JTVBMRU1FTlRfUFJPVE9UWVBFKCJYTUxIdHRwUmVxdWVzdCIsWE1MSHR0cFJl
cXVlc3RQcm90byxYTUxIdHRwUmVxdWVzdFByb3RvRnVuYykKK25hbWVzcGFjZSBXZWJDb3JlIHsK
IAogWE1MSHR0cFJlcXVlc3RRT2JqZWN0OjpYTUxIdHRwUmVxdWVzdFFPYmplY3QoWE1MSHR0cFJl
cXVlc3QgKl9qc09iamVjdCkgCiB7CkBAIC0xMzIsNTYgKzEwOSwyMCBAQCB2b2lkIFhNTEh0dHBS
ZXF1ZXN0UU9iamVjdDo6c2xvdFJlZGlyZWN0CiAgIGpzT2JqZWN0LT5zbG90UmVkaXJlY3Rpb24o
IGpvYiwgdXJsICk7IAogfQogCi1YTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wOjpYTUxIdHRw
UmVxdWVzdENvbnN0cnVjdG9ySW1wKEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpEb2N1bWVudEltcGwg
KmQpCi0gICAgOiBkb2MoZCkKK1hNTEh0dHBSZXF1ZXN0U3RhdGUgWE1MSHR0cFJlcXVlc3Q6Omdl
dFJlYWR5U3RhdGUoKSBjb25zdAogewotICAgIHB1dERpcmVjdChwcm90b3R5cGVQcm9wZXJ0eU5h
bWUsIFhNTEh0dHBSZXF1ZXN0UHJvdG86OnNlbGYoZXhlYyksIERvbnRFbnVtfERvbnREZWxldGV8
UmVhZE9ubHkpOworICAgIHJldHVybiBzdGF0ZTsKIH0KIAotWE1MSHR0cFJlcXVlc3RDb25zdHJ1
Y3RvckltcDo6flhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXAoKQorRE9NU3RyaW5nIFhNTEh0
dHBSZXF1ZXN0OjpnZXRSZXNwb25zZVRleHQoKSBjb25zdAogeworICAgIHJldHVybiByZXNwb25z
ZTsKIH0KIAotYm9vbCBYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wOjppbXBsZW1lbnRzQ29u
c3RydWN0KCkgY29uc3QKK1Bhc3NSZWZQdHI8RG9jdW1lbnRJbXBsPiBYTUxIdHRwUmVxdWVzdDo6
Z2V0UmVzcG9uc2VYTUwoKSBjb25zdAogewotICByZXR1cm4gdHJ1ZTsKLX0KLQotSlNPYmplY3Qg
KlhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXA6OmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IExpc3QgJikKLXsKLSAgcmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdChleGVjLCBkb2Mu
Z2V0KCkpOwotfQotCi1jb25zdCBDbGFzc0luZm8gWE1MSHR0cFJlcXVlc3Q6OmluZm8gPSB7ICJY
TUxIdHRwUmVxdWVzdCIsIDAsICZYTUxIdHRwUmVxdWVzdFRhYmxlLCAwIH07Ci0KLS8qIFNvdXJj
ZSBmb3IgWE1MSHR0cFJlcXVlc3RUYWJsZS4KLUBiZWdpbiBYTUxIdHRwUmVxdWVzdFRhYmxlIDcK
LSAgcmVhZHlTdGF0ZSAgICAgICAgICAgIFhNTEh0dHBSZXF1ZXN0OjpSZWFkeVN0YXRlICAgICAg
ICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHJlc3BvbnNlVGV4dCAgICAgICAgICBYTUxI
dHRwUmVxdWVzdDo6UmVzcG9uc2VUZXh0ICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQot
ICByZXNwb25zZVhNTCAgICAgICAgICAgWE1MSHR0cFJlcXVlc3Q6OlJlc3BvbnNlWE1MICAgICAg
ICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgc3RhdHVzICAgICAgICAgICAgICAgIFhNTEh0
dHBSZXF1ZXN0OjpTdGF0dXMgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0g
IHN0YXR1c1RleHQgICAgICAgICAgICBYTUxIdHRwUmVxdWVzdDo6U3RhdHVzVGV4dCAgICAgICAg
ICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBvbnJlYWR5c3RhdGVjaGFuZ2UgICAgWE1MSHR0
cFJlcXVlc3Q6Ok9ucmVhZHlzdGF0ZWNoYW5nZSAgICAgIERvbnREZWxldGUKLSAgb25sb2FkICAg
ICAgICAgICAgICAgIFhNTEh0dHBSZXF1ZXN0OjpPbmxvYWQgICAgICAgICAgICAgICAgICBEb250
RGVsZXRlCi1AZW5kCi0qLwotCi1ib29sIFhNTEh0dHBSZXF1ZXN0OjpnZXRPd25Qcm9wZXJ0eVNs
b3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKLXsKLSAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxYTUxIdHRwUmVx
dWVzdCwgRE9NT2JqZWN0PihleGVjLCAmWE1MSHR0cFJlcXVlc3RUYWJsZSwgdGhpcywgcHJvcGVy
dHlOYW1lLCBzbG90KTsKLX0KLQotSlNWYWx1ZSAqWE1MSHR0cFJlcXVlc3Q6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Ci17Ci0gIHN3aXRjaCAodG9r
ZW4pIHsKLSAgY2FzZSBSZWFkeVN0YXRlOgotICAgIHJldHVybiBqc051bWJlcihzdGF0ZSk7Ci0g
IGNhc2UgUmVzcG9uc2VUZXh0OgotICAgIHJldHVybiBqc1N0cmluZ09yTnVsbChET006OkRPTVN0
cmluZyhyZXNwb25zZSkpOwotICBjYXNlIFJlc3BvbnNlWE1MOgotICAgIGlmIChzdGF0ZSAhPSBD
b21wbGV0ZWQpIHsKLSAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KKyAgICBpZiAo
c3RhdGUgIT0gQ29tcGxldGVkKQorICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIWNyZWF0ZWRE
b2N1bWVudCkgewogICAgICAgaWYgKHR5cGVJc1hNTCA9IHJlc3BvbnNlSXNYTUwoKSkgewpAQCAt
MTk3LDY2ICsxMzgsMzUgQEAgSlNWYWx1ZSAqWE1MSHR0cFJlcXVlc3Q6OmdldFZhbHVlUHJvcGVy
dAogICAgICAgY3JlYXRlZERvY3VtZW50ID0gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoIXR5cGVJ
c1hNTCkgewotICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQorICAgIGlmICghdHlw
ZUlzWE1MKQorICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBy
ZXNwb25zZVhNTC5nZXQoKSk7Ci0gIGNhc2UgU3RhdHVzOgotICAgIHJldHVybiBnZXRTdGF0dXMo
KTsKLSAgY2FzZSBTdGF0dXNUZXh0OgotICAgIHJldHVybiBnZXRTdGF0dXNUZXh0KCk7Ci0gIGNh
c2UgT25yZWFkeXN0YXRlY2hhbmdlOgotICAgaWYgKG9uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVy
ICYmIG9uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyLT5saXN0ZW5lck9iaigpKSB7Ci0gICAgIHJl
dHVybiBvblJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lci0+bGlzdGVuZXJPYmooKTsKLSAgIH0gZWxz
ZSB7Ci0gICAgIHJldHVybiBqc051bGwoKTsKLSAgIH0KLSAgY2FzZSBPbmxvYWQ6Ci0gICBpZiAo
b25Mb2FkTGlzdGVuZXIgJiYgb25Mb2FkTGlzdGVuZXItPmxpc3RlbmVyT2JqKCkpIHsKLSAgICAg
cmV0dXJuIG9uTG9hZExpc3RlbmVyLT5saXN0ZW5lck9iaigpOwotICAgfSBlbHNlIHsKLSAgICAg
cmV0dXJuIGpzTnVsbCgpOwotICAgfQotICBkZWZhdWx0OgotICAgIGtkV2FybmluZygpIDw8ICJY
TUxIdHRwUmVxdWVzdDo6Z2V0VmFsdWVQcm9wZXJ0eSB1bmhhbmRsZWQgdG9rZW4gIiA8PCB0b2tl
biA8PCBlbmRsOwotICAgIHJldHVybiBOVUxMOwotICB9CisgICAgcmV0dXJuIHJlc3BvbnNlWE1M
OwogfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgKnZhbHVlLCBpbnQgYXR0cikKK1Bhc3NS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gWE1MSHR0cFJlcXVlc3Q6OmdldE9uUmVhZHlTdGF0ZUNoYW5n
ZUxpc3RlbmVyKCkgY29uc3QKIHsKLSAgbG9va3VwUHV0PFhNTEh0dHBSZXF1ZXN0LERPTU9iamVj
dD4oZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0ciwgJlhNTEh0dHBSZXF1ZXN0VGFibGUs
IHRoaXMgKTsKKyAgICByZXR1cm4gb25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXI7CiB9CiAKLXZv
aWQgWE1MSHR0cFJlcXVlc3Q6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIEpTVmFsdWUgKnZhbHVlLCBpbnQgLyphdHRyKi8pCit2b2lkIFhNTEh0dHBSZXF1ZXN0
OjpzZXRPblJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lcihFdmVudExpc3RlbmVyKiBldmVudExpc3Rl
bmVyKQogewotICBzd2l0Y2godG9rZW4pIHsKLSAgY2FzZSBPbnJlYWR5c3RhdGVjaGFuZ2U6Ci0g
ICAgb25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIgPSBXaW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4
ZWMpLT5nZXRKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcih2YWx1ZSwgdHJ1ZSk7Ci0gICAgYnJl
YWs7Ci0gIGNhc2UgT25sb2FkOgotICAgIG9uTG9hZExpc3RlbmVyID0gV2luZG93OjpyZXRyaWV2
ZUFjdGl2ZShleGVjKS0+Z2V0SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIodmFsdWUsIHRydWUp
OwotICAgIGJyZWFrOwotICBkZWZhdWx0OgotICAgIGtkV2FybmluZygpIDw8ICJIVE1MRG9jdW1l
bnQ6OnB1dFZhbHVlUHJvcGVydHkgdW5oYW5kbGVkIHRva2VuICIgPDwgdG9rZW4gPDwgZW5kbDsK
LSAgfQorICAgIG9uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsKIH0K
IAotdm9pZCBYTUxIdHRwUmVxdWVzdDo6bWFyaygpCitQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IFhNTEh0dHBSZXF1ZXN0OjpnZXRPbkxvYWRMaXN0ZW5lcigpIGNvbnN0CiB7Ci0gIERPTU9iamVj
dDo6bWFyaygpOwotCi0gIGlmIChvblJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lcikKLSAgICBvblJl
YWR5U3RhdGVDaGFuZ2VMaXN0ZW5lci0+bWFyaygpOwotCi0gIGlmIChvbkxvYWRMaXN0ZW5lcikK
LSAgICBvbkxvYWRMaXN0ZW5lci0+bWFyaygpOworICAgIHJldHVybiBvbkxvYWRMaXN0ZW5lcjsK
IH0KIAordm9pZCBYTUxIdHRwUmVxdWVzdDo6c2V0T25Mb2FkTGlzdGVuZXIoRXZlbnRMaXN0ZW5l
ciogZXZlbnRMaXN0ZW5lcikKK3sKKyAgICBvbkxvYWRMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7
Cit9CiAKLVhNTEh0dHBSZXF1ZXN0OjpYTUxIdHRwUmVxdWVzdChFeGVjU3RhdGUgKmV4ZWMsIERP
TTo6RG9jdW1lbnRJbXBsICpkKQorWE1MSHR0cFJlcXVlc3Q6OlhNTEh0dHBSZXF1ZXN0KERvY3Vt
ZW50SW1wbCAqZCwgS0pTOjpKU09iamVjdCogb3duZXIpCiAgIDogcU9iamVjdChuZXcgWE1MSHR0
cFJlcXVlc3RRT2JqZWN0KHRoaXMpKSwKKyAgICBvd25lcihvd25lciksCiAgICAgZG9jKGQpLAog
ICAgIGFzeW5jKHRydWUpLAogICAgIGpvYigwKSwKQEAgLTI2NCw3ICsxNzQsNiBAQCBYTUxIdHRw
UmVxdWVzdDo6WE1MSHR0cFJlcXVlc3QoRXhlY1N0YXRlCiAgICAgY3JlYXRlZERvY3VtZW50KGZh
bHNlKSwKICAgICBhYm9ydGVkKGZhbHNlKQogewotICBzZXRQcm90b3R5cGUoWE1MSHR0cFJlcXVl
c3RQcm90bzo6c2VsZihleGVjKSk7CiB9CiAKIFhNTEh0dHBSZXF1ZXN0Ojp+WE1MSHR0cFJlcXVl
c3QoKQpAQCAtMzEyLDcgKzIyMSw3IEBAIGJvb2wgWE1MSHR0cFJlcXVlc3Q6OnVybE1hdGNoZXNE
b2N1bWVudEQKICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjpvcGVu
KGNvbnN0IFFTdHJpbmcmIF9tZXRob2QsIGNvbnN0IEtVUkwmIF91cmwsIGJvb2wgX2FzeW5jKQor
dm9pZCBYTUxIdHRwUmVxdWVzdDo6b3Blbihjb25zdCBET01TdHJpbmcmIF9tZXRob2QsIGNvbnN0
IERPTVN0cmluZyYgX3VybCwgYm9vbCBfYXN5bmMsIGNvbnN0IERPTVN0cmluZyYgdXNlciwgY29u
c3QgRE9NU3RyaW5nJiBwYXNzd29yZCkKIHsKICAgYWJvcnQoKTsKICAgYWJvcnRlZCA9IGZhbHNl
OwpAQCAtMzI0LDE5ICsyMzMsMjYgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6b3Blbihjb25zdCBR
U3RyaW5nJgogICBjcmVhdGVkRG9jdW1lbnQgPSBmYWxzZTsKICAgcmVzcG9uc2VYTUwgPSAwOwog
CisgIHVybCA9IEtVUkwoZG9jLT5mcmFtZSgpLT54bWxEb2NJbXBsKCktPmNvbXBsZXRlVVJMKF91
cmwucXN0cmluZygpKSk7CisKKyAgaWYgKCF1c2VyLmlzTnVsbCgpKQorICAgIHVybC5zZXRVc2Vy
KHVzZXIucXN0cmluZygpKTsKKworICBpZiAoIXBhc3N3b3JkLmlzTnVsbCgpKQorICAgIHVybC5z
ZXRQYXNzKHBhc3N3b3JkLnFzdHJpbmcoKSk7CisKICAgY2hhbmdlU3RhdGUoVW5pbml0aWFsaXpl
ZCk7CiAKICAgaWYgKGFib3J0ZWQpIHsKICAgICByZXR1cm47CiAgIH0KIAotICBpZiAoIXVybE1h
dGNoZXNEb2N1bWVudERvbWFpbihfdXJsKSkgeworICBpZiAoIXVybE1hdGNoZXNEb2N1bWVudERv
bWFpbih1cmwpKSB7CiAgICAgcmV0dXJuOwogICB9CiAKICAgCi0gIG1ldGhvZCA9IF9tZXRob2Q7
Ci0gIHVybCA9IF91cmw7CisgIG1ldGhvZCA9IF9tZXRob2QucXN0cmluZygpOwogICBhc3luYyA9
IF9hc3luYzsKIAogICBjaGFuZ2VTdGF0ZShMb2FkaW5nKTsKQEAgLTM4Miw3ICsyOTgsNyBAQCB2
b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKGNvbnN0IERPTVN0cmluCiAKICAgICB7IC8vIHNjb3Bl
CiAgICAgICAgIC8vIGF2b2lkIGRlYWRsb2NrIGluIGNhc2UgdGhlIGxvYWRlciB3YW50cyB0byB1
c2UgSlMgb24gYSBiYWNrZ3JvdW5kIHRocmVhZAotICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wTG9ja3M7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcExvY2tz
OwogCiAgICAgICAgIGRhdGEgPSBLV1FTZXJ2ZVN5bmNocm9ub3VzUmVxdWVzdChraHRtbDo6Q2Fj
aGU6OmxvYWRlcigpLCBkb2MtPmRvY0xvYWRlcigpLCBqb2IsIGZpbmFsVVJMLCBoZWFkZXJzKTsK
ICAgICB9CkBAIC0zOTMsOSArMzA5LDkgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2VuZChjb25z
dCBET01TdHJpbgogICAgIHJldHVybjsKICAgfQogCi0gIHsKLSAgICBKU0xvY2sgbG9jazsKLSAg
ICBnY1Byb3RlY3QodGhpcyk7CisgIGlmIChvd25lcikgeworICAgIEtKUzo6SlNMb2NrIGxvY2s7
CisgICAgS0pTOjpnY1Byb3RlY3Qob3duZXIpOwogICB9CiAgIAogICBxT2JqZWN0LT5jb25uZWN0
KCBqb2IsIFNJR05BTCggcmVzdWx0KCBLSU86OkpvYiogKSApLApAQCAtNDIyLDIwICszMzgsMjUg
QEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6YWJvcnQoKQogICBkZWNvZGVyID0gMDsKICAgYWJvcnRl
ZCA9IHRydWU7CiAKLSAgaWYgKGhhZEpvYikgewotICAgIEpTTG9jayBsb2NrOwotICAgIGdjVW5w
cm90ZWN0KHRoaXMpOworICBpZiAoaGFkSm9iICYmIG93bmVyKSB7CisgICAgS0pTOjpKU0xvY2sg
bG9jazsKKyAgICBLSlM6OmdjVW5wcm90ZWN0KG93bmVyKTsKICAgfQogfQogCi12b2lkIFhNTEh0
dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVyKGNvbnN0IFFTdHJpbmcmIG5hbWUsIGNvbnN0IFFT
dHJpbmcgJnZhbHVlKQordm9pZCBYTUxIdHRwUmVxdWVzdDo6b3ZlcnJpZGVNSU1FVHlwZShjb25z
dCBET01TdHJpbmcmIG92ZXJyaWRlKQoreworICBNSU1FVHlwZU92ZXJyaWRlID0gb3ZlcnJpZGUu
cXN0cmluZygpOworfQorCit2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVyKGNv
bnN0IERPTVN0cmluZyYgbmFtZSwgY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSkKIHsKICAgaWYgKHJl
cXVlc3RIZWFkZXJzLmxlbmd0aCgpID4gMCkgewogICAgIHJlcXVlc3RIZWFkZXJzICs9ICJcclxu
IjsKICAgfQotICByZXF1ZXN0SGVhZGVycyArPSBuYW1lOworICByZXF1ZXN0SGVhZGVycyArPSBu
YW1lLnFzdHJpbmcoKTsKICAgcmVxdWVzdEhlYWRlcnMgKz0gIjogIjsKLSAgcmVxdWVzdEhlYWRl
cnMgKz0gdmFsdWU7CisgIHJlcXVlc3RIZWFkZXJzICs9IHZhbHVlLnFzdHJpbmcoKTsKIH0KIAog
UVN0cmluZyBYTUxIdHRwUmVxdWVzdDo6Z2V0UmVxdWVzdEhlYWRlcihjb25zdCBRU3RyaW5nJiBu
YW1lKSBjb25zdApAQCAtNDQzLDI0ICszNjQsMjQgQEAgUVN0cmluZyBYTUxIdHRwUmVxdWVzdDo6
Z2V0UmVxdWVzdEhlYWRlcgogICByZXR1cm4gZ2V0U3BlY2lmaWNIZWFkZXIocmVxdWVzdEhlYWRl
cnMsIG5hbWUpOwogfQogCi1KU1ZhbHVlICpYTUxIdHRwUmVxdWVzdDo6Z2V0QWxsUmVzcG9uc2VI
ZWFkZXJzKCkgY29uc3QKK0RPTVN0cmluZyBYTUxIdHRwUmVxdWVzdDo6Z2V0QWxsUmVzcG9uc2VI
ZWFkZXJzKCkgY29uc3QKIHsKICAgaWYgKHJlc3BvbnNlSGVhZGVycy5pc0VtcHR5KCkpIHsKLSAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gRE9NU3RyaW5nKCk7CiAgIH0KIAog
ICBpbnQgZW5kT2ZMaW5lID0gcmVzcG9uc2VIZWFkZXJzLmZpbmQoIlxuIik7CiAKICAgaWYgKGVu
ZE9mTGluZSA9PSAtMSkgewotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBE
T01TdHJpbmcoKTsKICAgfQogCi0gIHJldHVybiBqc1N0cmluZyhyZXNwb25zZUhlYWRlcnMubWlk
KGVuZE9mTGluZSArIDEpICsgIlxuIik7CisgIHJldHVybiByZXNwb25zZUhlYWRlcnMubWlkKGVu
ZE9mTGluZSArIDEpICsgIlxuIjsKIH0KIAotUVN0cmluZyBYTUxIdHRwUmVxdWVzdDo6Z2V0UmVz
cG9uc2VIZWFkZXIoY29uc3QgUVN0cmluZyYgbmFtZSkgY29uc3QKK0RPTVN0cmluZyBYTUxIdHRw
UmVxdWVzdDo6Z2V0UmVzcG9uc2VIZWFkZXIoY29uc3QgRE9NU3RyaW5nJiBuYW1lKSBjb25zdAog
ewotICByZXR1cm4gZ2V0U3BlY2lmaWNIZWFkZXIocmVzcG9uc2VIZWFkZXJzLCBuYW1lKTsKKyAg
cmV0dXJuIGdldFNwZWNpZmljSGVhZGVyKHJlc3BvbnNlSGVhZGVycywgbmFtZS5xc3RyaW5nKCkp
OwogfQogCiBRU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRTcGVjaWZpY0hlYWRlcihjb25zdCBR
U3RyaW5nJiBoZWFkZXJzLCBjb25zdCBRU3RyaW5nJiBuYW1lKQpAQCAtNDkyLDQzICs0MTMsNDAg
QEAgYm9vbCBYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VJc1hNTCgpIGNvbgogewogICAgIFFTdHJp
bmcgbWltZVR5cGUgPSBnZXRNSU1FVHlwZShNSU1FVHlwZU92ZXJyaWRlKTsKICAgICBpZiAobWlt
ZVR5cGUuaXNFbXB0eSgpKQotICAgICAgICBtaW1lVHlwZSA9IGdldE1JTUVUeXBlKGdldFJlc3Bv
bnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKSk7CisgICAgICAgIG1pbWVUeXBlID0gZ2V0TUlNRVR5
cGUoZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpLnFzdHJpbmcoKSk7CiAgICAgaWYg
KG1pbWVUeXBlLmlzRW1wdHkoKSkKICAgICAgIG1pbWVUeXBlID0gInRleHQveG1sIjsKICAgICAK
ICAgICByZXR1cm4gRE9NSW1wbGVtZW50YXRpb25JbXBsOjppc1hNTE1JTUVUeXBlKG1pbWVUeXBl
KTsKIH0KIAotSlNWYWx1ZSAqWE1MSHR0cFJlcXVlc3Q6OmdldFN0YXR1cygpIGNvbnN0CitpbnQg
WE1MSHR0cFJlcXVlc3Q6OmdldFN0YXR1cygpIGNvbnN0CiB7Ci0gIGlmIChyZXNwb25zZUhlYWRl
cnMuaXNFbXB0eSgpKSB7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gIH0KKyAgaWYgKHJl
c3BvbnNlSGVhZGVycy5pc0VtcHR5KCkpCisgICAgcmV0dXJuIC0xOwogICAKICAgaW50IGVuZE9m
TGluZSA9IHJlc3BvbnNlSGVhZGVycy5maW5kKCJcbiIpOwogICBRU3RyaW5nIGZpcnN0TGluZSA9
IGVuZE9mTGluZSA9PSAtMSA/IHJlc3BvbnNlSGVhZGVycyA6IHJlc3BvbnNlSGVhZGVycy5sZWZ0
KGVuZE9mTGluZSk7CiAgIGludCBjb2RlU3RhcnQgPSBmaXJzdExpbmUuZmluZCgiICIpOwogICBp
bnQgY29kZUVuZCA9IGZpcnN0TGluZS5maW5kKCIgIiwgY29kZVN0YXJ0ICsgMSk7CiAgIAotICBp
ZiAoY29kZVN0YXJ0ID09IC0xIHx8IGNvZGVFbmQgPT0gLTEpIHsKLSAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgfQorICBpZiAoY29kZVN0YXJ0ID09IC0xIHx8IGNvZGVFbmQgPT0gLTEpCisg
ICAgcmV0dXJuIC0xOwogICAKICAgUVN0cmluZyBudW1iZXIgPSBmaXJzdExpbmUubWlkKGNvZGVT
dGFydCArIDEsIGNvZGVFbmQgLSAoY29kZVN0YXJ0ICsgMSkpOwogICAKICAgYm9vbCBvayA9IGZh
bHNlOwogICBpbnQgY29kZSA9IG51bWJlci50b0ludCgmb2spOwotICBpZiAoIW9rKSB7Ci0gICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gIH0KKyAgaWYgKCFvaykKKyAgICByZXR1cm4gLTE7CiAK
LSAgcmV0dXJuIGpzTnVtYmVyKGNvZGUpOworICByZXR1cm4gY29kZTsKIH0KIAotSlNWYWx1ZSAq
WE1MSHR0cFJlcXVlc3Q6OmdldFN0YXR1c1RleHQoKSBjb25zdAorRE9NU3RyaW5nIFhNTEh0dHBS
ZXF1ZXN0OjpnZXRTdGF0dXNUZXh0KCkgY29uc3QKIHsKICAgaWYgKHJlc3BvbnNlSGVhZGVycy5p
c0VtcHR5KCkpIHsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gRE9NU3Ry
aW5nKCk7CiAgIH0KICAgCiAgIGludCBlbmRPZkxpbmUgPSByZXNwb25zZUhlYWRlcnMuZmluZCgi
XG4iKTsKQEAgLTUzNywxMiArNDU1LDEyIEBAIEpTVmFsdWUgKlhNTEh0dHBSZXF1ZXN0OjpnZXRT
dGF0dXNUZXh0KCkKICAgaW50IGNvZGVFbmQgPSBmaXJzdExpbmUuZmluZCgiICIsIGNvZGVTdGFy
dCArIDEpOwogCiAgIGlmIChjb2RlU3RhcnQgPT0gLTEgfHwgY29kZUVuZCA9PSAtMSkgewotICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBET01TdHJpbmcoKTsKICAgfQogICAK
ICAgUVN0cmluZyBzdGF0dXNUZXh0ID0gZmlyc3RMaW5lLm1pZChjb2RlRW5kICsgMSwgZW5kT2ZM
aW5lIC0gKGNvZGVFbmQgKyAxKSkuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgIAotICByZXR1cm4ganNT
dHJpbmcoc3RhdHVzVGV4dCk7CisgIHJldHVybiBET01TdHJpbmcoc3RhdHVzVGV4dCk7CiB9CiAK
IHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnByb2Nlc3NTeW5jTG9hZFJlc3VsdHMoY29uc3QgQnl0ZUFy
cmF5ICZkYXRhLCBjb25zdCBLVVJMICZmaW5hbFVSTCwgY29uc3QgUVN0cmluZyAmaGVhZGVycykK
QEAgLTU4Nyw4ICs1MDUsMTAgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2xvdEZpbmlzaGVkKEtJ
Tzo6SgogICBjaGFuZ2VTdGF0ZShDb21wbGV0ZWQpOwogICBkZWNvZGVyID0gMDsKIAotICBKU0xv
Y2sgbG9jazsKLSAgZ2NVbnByb3RlY3QodGhpcyk7CisgIGlmIChvd25lcikgeworICAgIEtKUzo6
SlNMb2NrIGxvY2s7CisgICAgS0pTOjpnY1VucHJvdGVjdChvd25lcik7CisgIH0KIH0KIAogdm9p
ZCBYTUxIdHRwUmVxdWVzdDo6c2xvdFJlZGlyZWN0aW9uKEtJTzo6Sm9iKiwgY29uc3QgS1VSTCYg
dXJsKQpAQCAtNjA5LDcgKzUyOSw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNsb3REYXRhKEtJ
Tzo6Sm9iKiwKICAgaWYgKCFkZWNvZGVyKSB7CiAgICAgZW5jb2RpbmcgPSBnZXRDaGFyc2V0KE1J
TUVUeXBlT3ZlcnJpZGUpOwogICAgIGlmIChlbmNvZGluZy5pc0VtcHR5KCkpCi0gICAgICBlbmNv
ZGluZyA9IGdldENoYXJzZXQoZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTsKKyAg
ICAgIGVuY29kaW5nID0gZ2V0Q2hhcnNldChnZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1UeXBl
IikucXN0cmluZygpKTsKICAgICBpZiAoZW5jb2RpbmcuaXNFbXB0eSgpICYmIGpvYikKICAgICAg
IGVuY29kaW5nID0gam9iLT5xdWVyeU1ldGFEYXRhKCJjaGFyc2V0Iik7CiAgICAgCkBAIC02NzQs
MTE1ICs1OTQsMTAgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6cmVtb3ZlRnJvbVJlcXVlc3RzQgog
ICB9CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OmNhbmNlbFJlcXVlc3RzKERPTTo6RG9jdW1l
bnRJbXBsKiBkKQordm9pZCBYTUxIdHRwUmVxdWVzdDo6Y2FuY2VsUmVxdWVzdHMoRG9jdW1lbnRJ
bXBsKiBkKQogewogICB3aGlsZSAoUmVxdWVzdHNTZXQqIHJlcXVlc3RzID0gcmVxdWVzdHNCeURv
Y3VtZW50KCkuZ2V0KGQpKQogICAgICgqcmVxdWVzdHMtPmJlZ2luKCkpLT5hYm9ydCgpOwogfQog
Ci1KU1ZhbHVlICpYTUxIdHRwUmVxdWVzdFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0
YXRlICpleGVjLCBKU09iamVjdCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKLXsKLSAgaWYg
KCF0aGlzT2JqLT5pbmhlcml0cygmWE1MSHR0cFJlcXVlc3Q6OmluZm8pKQotICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0KLSAgWE1MSHR0cFJlcXVlc3QgKnJlcXVlc3Qg
PSBzdGF0aWNfY2FzdDxYTUxIdHRwUmVxdWVzdCAqPih0aGlzT2JqKTsKLQotICBzd2l0Y2ggKGlk
KSB7Ci0gIGNhc2UgWE1MSHR0cFJlcXVlc3Q6OkFib3J0OiB7Ci0gICAgcmVxdWVzdC0+YWJvcnQo
KTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgfQotICBjYXNlIFhNTEh0dHBSZXF1ZXN0
OjpHZXRBbGxSZXNwb25zZUhlYWRlcnM6IHsKLSAgICBpZiAoYXJncy5zaXplKCkgIT0gMCkgewot
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlcXVlc3Qt
PmdldEFsbFJlc3BvbnNlSGVhZGVycygpOwotICB9Ci0gIGNhc2UgWE1MSHR0cFJlcXVlc3Q6Okdl
dFJlc3BvbnNlSGVhZGVyOiB7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDEpIHsKLSAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLSAgICAKLSAgICBRU3RyaW5nIGhlYWRlciA9IHJl
cXVlc3QtPmdldFJlc3BvbnNlSGVhZGVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmco
KSk7Ci0KLSAgICBpZiAoaGVhZGVyLmlzTnVsbCgpKQotICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7Ci0KLSAgICByZXR1cm4ganNTdHJpbmcoaGVhZGVyKTsKLSAgfQotICBjYXNlIFhNTEh0dHBS
ZXF1ZXN0OjpPcGVuOgotICAgIHsKLSAgICAgIGlmIChhcmdzLnNpemUoKSA8IDIgfHwgYXJncy5z
aXplKCkgPiA1KSB7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgfQotICAg
IAotICAgICAgUVN0cmluZyBtZXRob2QgPSBhcmdzWzBdLT50b1N0cmluZyhleGVjKS5xc3RyaW5n
KCk7Ci0gICAgICBLVVJMIHVybCA9IEtVUkwoV2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+
ZnJhbWUoKS0+eG1sRG9jSW1wbCgpLT5jb21wbGV0ZVVSTChhcmdzWzFdLT50b1N0cmluZyhleGVj
KS5xc3RyaW5nKCkpKTsKLQotICAgICAgYm9vbCBhc3luYyA9IHRydWU7Ci0gICAgICBpZiAoYXJn
cy5zaXplKCkgPj0gMykgewotICAgICAgICBhc3luYyA9IGFyZ3NbMl0tPnRvQm9vbGVhbihleGVj
KTsKLSAgICAgIH0KLSAgICAKLSAgICAgIGlmIChhcmdzLnNpemUoKSA+PSA0KSB7Ci0gICAgICAg
IHVybC5zZXRVc2VyKGFyZ3NbM10tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSk7Ci0gICAgICB9
Ci0gICAgICAKLSAgICAgIGlmIChhcmdzLnNpemUoKSA+PSA1KSB7Ci0gICAgICAgIHVybC5zZXRQ
YXNzKGFyZ3NbNF0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSk7Ci0gICAgICB9Ci0KLSAgICAg
IHJlcXVlc3QtPm9wZW4obWV0aG9kLCB1cmwsIGFzeW5jKTsKLQotICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgfQotICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpTZW5kOgotICAgIHsKLSAg
ICAgIGlmIChhcmdzLnNpemUoKSA+IDEpIHsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gICAgICB9Ci0KLSAgICAgIGlmIChyZXF1ZXN0LT5zdGF0ZSAhPSBMb2FkaW5nKSB7Ci0gICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgfQotCi0gICAgICBET01TdHJpbmcgYm9k
eTsKLQotICAgICAgaWYgKGFyZ3Muc2l6ZSgpID49IDEpIHsKLSAgICAgICAgaWYgKGFyZ3NbMF0t
PnRvT2JqZWN0KGV4ZWMpLT5pbmhlcml0cygmRE9NRG9jdW1lbnQ6OmluZm8pKSB7Ci0gICAgICAg
ICAgRG9jdW1lbnRJbXBsICpkb2MgPSBzdGF0aWNfY2FzdDxEb2N1bWVudEltcGwgKj4oc3RhdGlj
X2Nhc3Q8RE9NRG9jdW1lbnQgKj4oYXJnc1swXS0+dG9PYmplY3QoZXhlYykpLT5pbXBsKCkpOwot
ICAgICAgICAgIGJvZHkgPSBkb2MtPnRvU3RyaW5nKCkucXN0cmluZygpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgIC8vIGNvbnZlcnRpbmcgY2VydGFpbiB2YWx1ZXMgKGxpa2UgbnVsbCkg
dG8gb2JqZWN0IGNhbiBzZXQgYW4gZXhjZXB0aW9uCi0gICAgICAgICAgZXhlYy0+Y2xlYXJFeGNl
cHRpb24oKTsKLSAgICAgICAgICBib2R5ID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuZG9tU3Ry
aW5nKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcmVxdWVzdC0+c2VuZChib2R5KTsK
LQotICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICBjYXNlIFhNTEh0dHBSZXF1
ZXN0OjpTZXRSZXF1ZXN0SGVhZGVyOiB7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDIpIHsKLSAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLSAgICAKLSAgICByZXF1ZXN0LT5zZXRS
ZXF1ZXN0SGVhZGVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSwgYXJnc1sxXS0+
dG9TdHJpbmcoZXhlYykucXN0cmluZygpKTsKLSAgICAKLSAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKLSAgfQotICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpPdmVycmlkZU1JTUVUeXBlOiB7Ci0gICAg
aWYgKGFyZ3Muc2l6ZSgpICE9IDEpIHsKLSAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAg
IH0KLSAgICByZXF1ZXN0LT5NSU1FVHlwZU92ZXJyaWRlID0gYXJnc1swXS0+dG9TdHJpbmcoZXhl
YykucXN0cmluZygpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICB9Ci0gIH0KLQotICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQogfSAvLyBlbmQgbmFtZXNwYWNlCkluZGV4OiBraHRt
bC9lY21hL2tqc193aW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2VjbWEva2pzX3dpbmRv
dy5jcHAJKHJldmlzaW9uIDEyMTcwKQorKysga2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQAogI2luY2x1ZGUgImtqc190cmF2ZXJzYWwuaCIK
ICNpbmNsdWRlICJranNfY3NzLmgiCiAjaW5jbHVkZSAia2pzX2V2ZW50cy5oIgotI2luY2x1ZGUg
InhtbGh0dHByZXF1ZXN0LmgiCisjaW5jbHVkZSAiSlNYTUxIdHRwUmVxdWVzdC5oIgogI2luY2x1
ZGUgInhtbHNlcmlhbGl6ZXIuaCIKICNpZmRlZiBLSFRNTF9YU0xUCiAjaW5jbHVkZSAiWFNMVFBy
b2Nlc3Nvci5oIgpAQCAtODA5LDcgKzgwOSw3IEBAIEpTVmFsdWUgKldpbmRvdzo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3QKICAgICBjYXNlIE9wdGlvbjoKICAgICAgIHJldHVybiBuZXcgT3B0aW9u
Q29uc3RydWN0b3JJbXAoZXhlYywgbV9mcmFtZS0+eG1sRG9jSW1wbCgpKTsKICAgICBjYXNlIFhN
TEh0dHBSZXF1ZXN0OgotICAgICAgcmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9y
SW1wKGV4ZWMsIG1fZnJhbWUtPnhtbERvY0ltcGwoKSk7CisgICAgICByZXR1cm4gbmV3IEpTWE1M
SHR0cFJlcXVlc3RDb25zdHJ1Y3RvckltcChleGVjLCBtX2ZyYW1lLT54bWxEb2NJbXBsKCkpOwog
ICAgIGNhc2UgWE1MU2VyaWFsaXplcjoKICAgICAgIHJldHVybiBuZXcgWE1MU2VyaWFsaXplckNv
bnN0cnVjdG9ySW1wKGV4ZWMpOwogICAgIGNhc2UgRE9NUGFyc2VyOgpJbmRleDogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTIxNzApCisrKyBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE2NTQsNiArMTY1NCwxMCBAQAogCQlC
Q0ZCMkY3NzA5N0EyRTFBMDBCQTcwM0QgLyogQXJlbmEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkIyRjc1MDk3QTJFMUEwMEJBNzAzRCAvKiBBcmVu
YS5oICovOyB9OwogCQlCQ0ZCMkY3ODA5N0EyRTFBMDBCQTcwM0QgLyogQXJlbmEuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGQjJGNzQwOTdBMkUx
QTAwQkE3MDNEIC8qIEFyZW5hLmNwcCAqLzsgfTsKIAkJQkNGQjJGNzkwOTdBMkUxQTAwQkE3MDNE
IC8qIEFyZW5hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQ0ZCMkY3NTA5N0EyRTFBMDBCQTcwM0QgLyogQXJlbmEuaCAqLzsgfTsKKwkJRTFFQzEzMzAw
OTdFRDEyRjAwNTgyQ0E5IC8qIEpTWE1MSHR0cFJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRUMxMzJFMDk3RUQxMkYwMDU4MkNBOSAvKiBK
U1hNTEh0dHBSZXF1ZXN0LmggKi87IH07CisJCUUxRUMxMzMxMDk3RUQxMkYwMDU4MkNBOSAvKiBK
U1hNTEh0dHBSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxRUMxMzJGMDk3RUQxMkYwMDU4MkNBOSAvKiBKU1hNTEh0dHBSZXF1ZXN0LmNw
cCAqLzsgfTsKKwkJRTFFQzEzMzIwOTdFRDEyRjAwNTgyQ0E5IC8qIEpTWE1MSHR0cFJlcXVlc3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRUMxMzJF
MDk3RUQxMkYwMDU4MkNBOSAvKiBKU1hNTEh0dHBSZXF1ZXN0LmggKi87IH07CisJCUUxRUMxMzMz
MDk3RUQxMkYwMDU4MkNBOSAvKiBKU1hNTEh0dHBSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRUMxMzJGMDk3RUQxMkYwMDU4MkNBOSAv
KiBKU1hNTEh0dHBSZXF1ZXN0LmNwcCAqLzsgfTsKIAkJRTFFRTc3MzcwOEYxMDg2QzAwMTY2ODcw
IC8qIFdlYkNvcmVUZXh0RGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTFFRTc3MzUwOEYxMDg2QzAwMTY2ODcwIC8qIFdlYkNvcmVUZXh0RGVj
b2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUUxRUU3NzM4MDhGMTA4NkMwMDE2Njg3MCAvKiBXZWJDb3JlVGV4dERlY29kZXIubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUVFNzczNjA4RjEwODZD
MDAxNjY4NzAgLyogV2ViQ29yZVRleHREZWNvZGVyLm1tICovOyB9OwogCQlFRDA0OEFCQzA4MzNG
MTMyMDA2RTFFNjcgLyogdGV4dEFyZWFSZXNpemVDb3JuZXIudGlmZiBpbiBSZXNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUQwNDhBQkIwODMzRjEzMjAwNkUxRTY3
IC8qIHRleHRBcmVhUmVzaXplQ29ybmVyLnRpZmYgKi87IH07CkBAIC0yNjIyLDYgKzI2MjYsOCBA
QAogCQlCRUNFNjdCRDA3MDg3QjI1MDAwN0MxNEIgLyogdGV4dF9hZmZpbml0eS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSB0ZXh0X2FmZmluaXR5
Lmg7IHBhdGggPSBlZGl0aW5nL3RleHRfYWZmaW5pdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUJFRjdFRUEwMDVGRjhGMEQwMDk3
MTdFRSAvKiBLV1FFZGl0Q29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBLV1FFZGl0Q29tbWFuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJQkVGN0VFQTEwNUZGOEYwRDAw
OTcxN0VFIC8qIEtXUUVkaXRDb21tYW5kLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gS1dRRWRpdENvbW1hbmQubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OworCQlFMUVDMTMy
RTA5N0VEMTJGMDA1ODJDQTkgLyogSlNYTUxIdHRwUmVxdWVzdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1hNTEh0dHBSZXF1ZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUUxRUMxMzJGMDk3RUQxMkYwMDU4MkNBOSAvKiBKU1hNTEh0dHBSZXF1ZXN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTWE1MSHR0cFJlcXVlc3Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUVFNzczNTA4RjEwODZDMDAxNjY4
NzAgLyogV2ViQ29yZVRleHREZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVRleHREZWNvZGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlFMUVFNzczNjA4RjEw
ODZDMDAxNjY4NzAgLyogV2ViQ29yZVRleHREZWNvZGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb3JlVGV4dERlY29kZXIu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9
OwogCQlFRDA0OEFCQjA4MzNGMTMyMDA2RTFFNjcgLyogdGV4dEFyZWFSZXNpemVDb3JuZXIudGlm
ZiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGltYWdl
LnRpZmY7IG5hbWUgPSB0ZXh0QXJlYVJlc2l6ZUNvcm5lci50aWZmOyBwYXRoID0gUmVzb3VyY2Vz
L3RleHRBcmVhUmVzaXplQ29ybmVyLnRpZmY7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC00MDA4LDYgKzQwMTQsOCBAQAogCQkJCUY1MjNEMjBFMDJERTQzNjkwMTg2MzVDQSAvKiBranNf
dmlld3MuaCAqLywKIAkJCQlGNTIzRDIxMDAyREU0MzY5MDE4NjM1Q0EgLyoga2pzX3dpbmRvdy5j
cHAgKi8sCiAJCQkJRjUyM0QyMTEwMkRFNDM2OTAxODYzNUNBIC8qIGtqc193aW5kb3cuaCAqLywK
KwkJCQlFMUVDMTMyRjA5N0VEMTJGMDA1ODJDQTkgLyogSlNYTUxIdHRwUmVxdWVzdC5jcHAgKi8s
CisJCQkJRTFFQzEzMkUwOTdFRDEyRjAwNTgyQ0E5IC8qIEpTWE1MSHR0cFJlcXVlc3QuaCAqLywK
IAkJCQk2NTRFN0VFMDA1NjlGRDQ2MDAzNThCRDIgLyogeG1saHR0cHJlcXVlc3QuY3BwICovLAog
CQkJCTY1NEU3RUUxMDU2OUZENDYwMDM1OEJEMiAvKiB4bWxodHRwcmVxdWVzdC5oICovLAogCQkJ
CTY1OTEyQjBEMDU4NjkyMTAwMDEyM0E2OSAvKiB4bWxzZXJpYWxpemVyLmNwcCAqLywKQEAgLTQ5
NzYsNiArNDk4NCw3IEBACiAJCQkJQkNFQTQ4OEMwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRl
eHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0ODhFMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5k
ZXJUZXh0RnJhZ21lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0ODkwMDk3RDkzMDIwMDk0
QzlFNCAvKiB0YWJsZV9sYXlvdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxRUMxMzMwMDk3RUQx
MkYwMDU4MkNBOSAvKiBKU1hNTEh0dHBSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTUzMjMs
NiArNTMzMiw3IEBACiAJCQkJQkNFQTQ4Q0IwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRleHQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0OENEMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJU
ZXh0RnJhZ21lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0OENGMDk3RDkzMDIwMDk0QzlF
NCAvKiB0YWJsZV9sYXlvdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxRUMxMzMyMDk3RUQxMkYw
MDU4MkNBOSAvKiBKU1hNTEh0dHBSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTUzNTAsNyAr
NTM2MCw3IEBACiAJCQkJOTMyRkMwREEwODI0QTMzNzAwNUIzQzc1IC8qIEtXUUNvbG9yRGF0YS5j
ICovLAogCQkJCTkzRUE2ODQ0MDgyNDk3OTAwMDY4N0Y1NiAvKiBsaWJ4bWwyLVdlYkNvcmUgKi8s
CiAJCQkJOTMyRkMzOEYwODI0QkEzMDAwNUIzQzc1IC8qIHRva2VuaXplci5jcHAgKi8sCi0JCQkJ
OTMyRkMxNzEwODI0QTkxMzAwNUIzQzc1IC8qIHhtbGh0dHByZXF1ZXN0Lmx1dC5oICovLAorCQkJ
CTkzMkZDMTcxMDgyNEE5MTMwMDVCM0M3NSAvKiBKU1hNTEh0dHBSZXF1ZXN0Lmx1dC5oICovLAog
CQkJCTkzMkZDMTczMDgyNEE5MTkwMDVCM0M3NSAvKiB4bWxzZXJpYWxpemVyLmx1dC5oICovLAog
CQkJCUE4M0M4NjdEMDkxMUFBMTkwMDlCRjRBNyAvKiBYU0xUUHJvY2Vzc29yLmx1dC5oICovLAog
CQkJCTFBNjlEMzg3MDg1NjI4NjUwMDA5ODgwRCAvKiBkb21wYXJzZXIubHV0LmggKi8sCkBAIC01
ODMwLDIyICs1ODQwLDIyIEBACiAJCQlzaGVsbFBhdGggPSAvYmluL3NoOwogCQkJc2hlbGxTY3Jp
cHQgPSAiXCIkQ1JFQVRFX0hBU0hfVEFCTEVcIiBraHRtbC9lY21hL2tqc193aW5kb3cuY3BwID4g
XCIkREVSSVZFRF9GSUxFX0RJUi9ranNfd2luZG93Lmx1dC5oXCIiOwogCQl9OwotCQk5MzJGQzE3
MTA4MjRBOTEzMDA1QjNDNzUgLyogeG1saHR0cHJlcXVlc3QubHV0LmggKi8gPSB7CisJCTkzMkZD
MTcxMDgyNEE5MTMwMDVCM0M3NSAvKiBKU1hNTEh0dHBSZXF1ZXN0Lmx1dC5oICovID0gewogCQkJ
aXNhID0gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0
NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAogCQkJKTsKIAkJCWlucHV0UGF0aHMgPSAoCiAJCQkJIiQo
Q1JFQVRFX0hBU0hfVEFCTEUpIiwKLQkJCQlraHRtbC9lY21hL3htbGh0dHByZXF1ZXN0LmNwcCwK
KwkJCQlraHRtbC9lY21hL0pTWE1MSHR0cFJlcXVlc3QuY3BwLAogCQkJKTsKLQkJCW5hbWUgPSB4
bWxodHRwcmVxdWVzdC5sdXQuaDsKKwkJCW5hbWUgPSBKU1hNTEh0dHBSZXF1ZXN0Lmx1dC5oOwog
CQkJb3V0cHV0UGF0aHMgPSAoCi0JCQkJIiQoREVSSVZFRF9GSUxFX0RJUikveG1saHR0cHJlcXVl
c3QubHV0LmgiLAorCQkJCSIkKERFUklWRURfRklMRV9ESVIpL0pTWE1MSHR0cFJlcXVlc3QubHV0
LmgiLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQkJc2hlbGxQYXRoID0gL2Jpbi9zaDsKLQkJCXNoZWxsU2NyaXB0ID0gIlwiJENSRUFURV9IQVNI
X1RBQkxFXCIga2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdC5jcHAgPiBcIiRERVJJVkVEX0ZJTEVf
RElSL3htbGh0dHByZXF1ZXN0Lmx1dC5oXCIiOworCQkJc2hlbGxTY3JpcHQgPSAiXCIkQ1JFQVRF
X0hBU0hfVEFCTEVcIiBraHRtbC9lY21hL0pTWE1MSHR0cFJlcXVlc3QuY3BwID4gXCIkREVSSVZF
RF9GSUxFX0RJUi9KU1hNTEh0dHBSZXF1ZXN0Lmx1dC5oXCIiOwogCQl9OwogCQk5MzJGQzE3MzA4
MjRBOTE5MDA1QjNDNzUgLyogeG1sc2VyaWFsaXplci5sdXQuaCAqLyA9IHsKIAkJCWlzYSA9IFBC
WFNoZWxsU2NyaXB0QnVpbGRQaGFzZTsKQEAgLTY4ODUsNiArNjg5NSw3IEBACiAJCQkJQkNFQTQ4
OEQwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRleHRGcmFnbWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQ0VBNDg4RjA5N0Q5MzAyMDA5NEM5RTQgLyogdGFibGVfbGF5b3V0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkzN0EzNkE3MDk3RTJFMzIwMEU0RUUyRiAvKiBVc2VyQWdlbnRTdHls
ZVNoZWV0cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMUVDMTMzMTA5N0VEMTJGMDA1ODJDQTkg
LyogSlNYTUxIdHRwUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTcxODQsNiArNzE5NSw3
IEBACiAJCQkJQkNFQTQ4Q0MwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRleHRGcmFnbWVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0VBNDhDRTA5N0Q5MzAyMDA5NEM5RTQgLyogdGFibGVf
bGF5b3V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzN0EzNkE4MDk3RTJFMzIwMEU0RUUyRiAv
KiBVc2VyQWdlbnRTdHlsZVNoZWV0cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMUVDMTMzMzA5
N0VEMTJGMDA1ODJDQTkgLyogSlNYTUxIdHRwUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5k
ZXg6IGt3cS9LV1FTbG90Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGt3cS9LV1FTbG90Lm1tCShyZXZpc2lv
biAxMjE3MCkKKysrIGt3cS9LV1FTbG90Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3
IEBAIHVzaW5nIGtodG1sOjpSZW5kZXJXaWRnZXQ7CiB1c2luZyBraHRtbDo6UmVuZGVyU2Nyb2xs
TWVkaWF0b3I7CiB1c2luZyBLSU86OkpvYjsKIHVzaW5nIEtKUzo6V2luZG93UU9iamVjdDsKLXVz
aW5nIEtKUzo6WE1MSHR0cFJlcXVlc3RRT2JqZWN0OwordXNpbmcgRE9NOjpYTUxIdHRwUmVxdWVz
dFFPYmplY3Q7CiAjaWZkZWYgU1ZHX1NVUFBPUlQKIHVzaW5nIEtTVkc6OlRpbWVTY2hlZHVsZXI7
CiAjZW5kaWYKSW5kZXg6IHBhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvRnJhbWUu
Y3BwCShyZXZpc2lvbiAxMjE3MCkKKysrIHBhZ2UvRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1l
UHJpdmF0ZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIk5vZGVMaXN0SW1w
bC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudEltcGwuaCIKICNpbmNsdWRlICJIVE1MR2Vu
ZXJpY0Zvcm1FbGVtZW50SW1wbC5oIgogI2luY2x1ZGUgIk1hY0ZyYW1lLmgiCkBAIC0zNjUsNyAr
MzY2LDcgQEAgdm9pZCBGcmFtZTo6c3RvcExvYWRpbmcoYm9vbCBzZW5kVW5sb2FkKQogICBpZiAo
RG9jdW1lbnRJbXBsICpkb2MgPSBkLT5tX2RvYykgewogICAgIGlmIChEb2NMb2FkZXIgKmRvY0xv
YWRlciA9IGRvYy0+ZG9jTG9hZGVyKCkpCiAgICAgICBDYWNoZTo6bG9hZGVyKCktPmNhbmNlbFJl
cXVlc3RzKGRvY0xvYWRlcik7Ci0gICAgS0pTOjpYTUxIdHRwUmVxdWVzdDo6Y2FuY2VsUmVxdWVz
dHMoZG9jKTsKKyAgICAgIFhNTEh0dHBSZXF1ZXN0OjpjYW5jZWxSZXF1ZXN0cyhkb2MpOwogICB9
CiAKICAgLy8gdGVsbCBhbGwgc3ViZnJhbWVzIHRvIHN0b3AgYXMgd2VsbAo=
</data>
<flag name="review"
          id="1312"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5787</attachid>
            <date>2006-01-19 12:57:33 -0800</date>
            <delta_ts>2006-01-21 15:46:07 -0800</delta_ts>
            <desc>revised patch</desc>
            <filename>SplitXMLHttpRequest.txt</filename>
            <type>text/plain</type>
            <size>65129</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2VjbWEvSlNYTUxIdHRwUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1s
L2VjbWEvSlNYTUxIdHRwUmVxdWVzdC5oCShyZXZpc2lvbiAxMjE3MCkKKysrIGtodG1sL2VjbWEv
SlNYTUxIdHRwUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogLyoKICAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcwogICogIENvcHlyaWdodCAo
QykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLgotICogIENvcHlyaWdodCAoQykgMjAwNSBBbGV4
ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LCAy
MDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKQEAgLTE5LDE0NSArMTksNTEgQEAKICAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAotI2lm
bmRlZiBYTUxIVFRQUkVRVUVTVF9IXwotI2RlZmluZSBYTUxIVFRQUkVRVUVTVF9IXworI2lmbmRl
ZiBKU1hNTEhUVFBSRVFVRVNUX0hfCisjZGVmaW5lIEpTWE1MSFRUUFJFUVVFU1RfSF8KIAotI2lu
Y2x1ZGUgImtqc19kb20uaCIKLSNpbmNsdWRlIDxrdXJsLmg+Ci0jaW5jbHVkZSA8a3htbGNvcmUv
SGFzaFNldC5oPgotI2luY2x1ZGUgPGt4bWxjb3JlL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDxxZ3Vh
cmRlZHB0ci5oPgotI2luY2x1ZGUgPHFvYmplY3QuaD4KLQotbmFtZXNwYWNlIGtodG1sIHsKLSAg
ICBjbGFzcyBEZWNvZGVyOwotfQotCi1uYW1lc3BhY2UgS0lPIHsKLSAgICBjbGFzcyBKb2I7Ci0g
ICAgY2xhc3MgVHJhbnNmZXJKb2I7Ci19CisjaW5jbHVkZSA8a3htbGNvcmUvUmVmUHRyLmg+Cisj
aW5jbHVkZSAia2pzX2JpbmRpbmcuaCIKIAotbmFtZXNwYWNlIEtKUyB7CituYW1lc3BhY2UgV2Vi
Q29yZSB7CisgICAgY2xhc3MgWE1MSHR0cFJlcXVlc3Q7CisgICAgY2xhc3MgRG9jdW1lbnRJbXBs
OworfTsKIAotICBjbGFzcyBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjsKLSAgY2xhc3MgWE1M
SHR0cFJlcXVlc3RRT2JqZWN0OwogCi0gIC8vIHRoZXNlIGV4YWN0IG51bWVyaWMgdmFsdWVzIGFy
ZSBpbXBvcnRhbnQgYmVjYXVzZSBKUyBleHBlY3RzIHRoZW0KLSAgZW51bSBYTUxIdHRwUmVxdWVz
dFN0YXRlIHsKLSAgICBVbmluaXRpYWxpemVkID0gMCwgIC8vIG9wZW4oKSBoYXMgbm90IGJlZW4g
Y2FsbGVkIHlldAotICAgIExvYWRpbmcgPSAxLCAgICAgICAgLy8gc2VuZCgpIGhhcyBub3QgYmVl
biBjYWxsZWQgeWV0Ci0gICAgTG9hZGVkID0gMiwgICAgICAgICAvLyBzZW5kKCkgaGFzIGJlZW4g
Y2FsbGVkLCBoZWFkZXJzIGFuZCBzdGF0dXMgYXJlIGF2YWlsYWJsZQotICAgIEludGVyYWN0aXZl
ID0gMywgICAgLy8gRG93bmxvYWRpbmcsIHJlc3BvbnNlVGV4dCBob2xkcyB0aGUgcGFydGlhbCBk
YXRhCi0gICAgQ29tcGxldGVkID0gNCAgICAgICAvLyBGaW5pc2hlZCB3aXRoIGFsbCBvcGVyYXRp
b25zCi0gIH07CituYW1lc3BhY2UgS0pTIHsKIAotICBjbGFzcyBYTUxIdHRwUmVxdWVzdENvbnN0
cnVjdG9ySW1wIDogcHVibGljIEpTT2JqZWN0IHsKKyAgY2xhc3MgSlNYTUxIdHRwUmVxdWVzdENv
bnN0cnVjdG9ySW1wIDogcHVibGljIEpTT2JqZWN0IHsKICAgcHVibGljOgotICAgIFhNTEh0dHBS
ZXF1ZXN0Q29uc3RydWN0b3JJbXAoRXhlY1N0YXRlICpleGVjLCBET006OkRvY3VtZW50SW1wbCAq
ZCk7Ci0gICAgflhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXAoKTsKKyAgICBKU1hNTEh0dHBS
ZXF1ZXN0Q29uc3RydWN0b3JJbXAoRXhlY1N0YXRlICpleGVjLCBXZWJDb3JlOjpEb2N1bWVudElt
cGwgKmQpOworICAgIH5KU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXAoKTsKICAgICB2aXJ0
dWFsIGJvb2wgaW1wbGVtZW50c0NvbnN0cnVjdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgSlNPYmpl
Y3QgKmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpOwogICBwcml2
YXRlOgotICAgIFJlZlB0cjxET006OkRvY3VtZW50SW1wbD4gZG9jOworICAgIFJlZlB0cjxXZWJD
b3JlOjpEb2N1bWVudEltcGw+IGRvYzsKICAgfTsKIAotICBjbGFzcyBYTUxIdHRwUmVxdWVzdCA6
IHB1YmxpYyBET01PYmplY3QgeworICBjbGFzcyBKU1hNTEh0dHBSZXF1ZXN0IDogcHVibGljIERP
TU9iamVjdCB7CiAgIHB1YmxpYzoKLSAgICBYTUxIdHRwUmVxdWVzdChFeGVjU3RhdGUgKiwgRE9N
OjpEb2N1bWVudEltcGwgKmQpOwotICAgIH5YTUxIdHRwUmVxdWVzdCgpOwotICAgIHZpcnR1YWwg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQ
cm9wZXJ0eVNsb3QmKTsKLSAgICBKU1ZhbHVlICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBKU1ZhbHVlICp2YWx1ZSwgaW50
IGF0dHIgPSBOb25lKTsKLSAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIEpTVmFsdWUgKnZhbHVlLCBpbnQgLyphdHRyKi8pOwotICAgIHZpcnR1YWwg
Ym9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlICopIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgbWFyaygpOwotCisgICAgSlNYTUxIdHRwUmVxdWVzdChFeGVjU3RhdGUgKiwg
V2ViQ29yZTo6RG9jdW1lbnRJbXBsICpkKTsKKyAgICB+SlNYTUxIdHRwUmVxdWVzdCgpOwogICAg
IHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5m
bzsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgICBlbnVtIHsgT25sb2Fk
LCBPbnJlYWR5c3RhdGVjaGFuZ2UsIFJlYWR5U3RhdGUsIFJlc3BvbnNlVGV4dCwgUmVzcG9uc2VY
TUwsIFN0YXR1cywKICAgICAgICAgU3RhdHVzVGV4dCwgQWJvcnQsIEdldEFsbFJlc3BvbnNlSGVh
ZGVycywgR2V0UmVzcG9uc2VIZWFkZXIsIE9wZW4sIFNlbmQsIFNldFJlcXVlc3RIZWFkZXIsCiAg
ICAgICAgIE92ZXJyaWRlTUlNRVR5cGUgfTsKIAotICAgIHN0YXRpYyB2b2lkIGNhbmNlbFJlcXVl
c3RzKERPTTo6RG9jdW1lbnRJbXBsICpkKTsKLQotICBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFz
cyBYTUxIdHRwUmVxdWVzdFByb3RvRnVuYzsKLSAgICBmcmllbmQgY2xhc3MgWE1MSHR0cFJlcXVl
c3RRT2JqZWN0OwotCi0gICAgSlNWYWx1ZSAqZ2V0U3RhdHVzVGV4dCgpIGNvbnN0OwotICAgIEpT
VmFsdWUgKmdldFN0YXR1cygpIGNvbnN0OwotICAgIGJvb2wgdXJsTWF0Y2hlc0RvY3VtZW50RG9t
YWluKGNvbnN0IEtVUkwmKSBjb25zdDsKLQotICAgIFhNTEh0dHBSZXF1ZXN0UU9iamVjdCAqcU9i
amVjdDsKLQotICAgIHZvaWQgc2xvdERhdGEoIEtJTzo6Sm9iKiBqb2IsIGNvbnN0IGNoYXIgKmRh
dGEsIGludCBzaXplICk7Ci0gICAgdm9pZCBzbG90RmluaXNoZWQoIEtJTzo6Sm9iKiApOwotICAg
IHZvaWQgc2xvdFJlZGlyZWN0aW9uKCBLSU86OkpvYiosIGNvbnN0IEtVUkwmICk7Ci0KLSAgICB2
b2lkIHByb2Nlc3NTeW5jTG9hZFJlc3VsdHMoY29uc3QgQnl0ZUFycmF5ICZkYXRhLCBjb25zdCBL
VVJMICZmaW5hbFVSTCwgY29uc3QgUVN0cmluZyAmaGVhZGVycyk7Ci0KLSAgICB2b2lkIG9wZW4o
Y29uc3QgUVN0cmluZyYgX21ldGhvZCwgY29uc3QgS1VSTCYgX3VybCwgYm9vbCBfYXN5bmMpOwot
ICAgIHZvaWQgc2VuZChjb25zdCBET006OkRPTVN0cmluZyYgX2JvZHkpOwotICAgIHZvaWQgYWJv
cnQoKTsKLSAgICB2b2lkIHNldFJlcXVlc3RIZWFkZXIoY29uc3QgUVN0cmluZyYgbmFtZSwgY29u
c3QgUVN0cmluZyAmdmFsdWUpOwotICAgIFFTdHJpbmcgZ2V0UmVxdWVzdEhlYWRlcihjb25zdCBR
U3RyaW5nJiBuYW1lKSBjb25zdDsKLSAgICBKU1ZhbHVlICpnZXRBbGxSZXNwb25zZUhlYWRlcnMo
KSBjb25zdDsKLSAgICBRU3RyaW5nIGdldFJlc3BvbnNlSGVhZGVyKGNvbnN0IFFTdHJpbmcmIG5h
bWUpIGNvbnN0OwotICAgIGJvb2wgcmVzcG9uc2VJc1hNTCgpIGNvbnN0OwotICAgIAotICAgIHN0
YXRpYyBRU3RyaW5nIGdldFNwZWNpZmljSGVhZGVyKGNvbnN0IFFTdHJpbmcmIGhlYWRlcnMsIGNv
bnN0IFFTdHJpbmcmIG5hbWUpOwotCi0gICAgdm9pZCBjaGFuZ2VTdGF0ZShYTUxIdHRwUmVxdWVz
dFN0YXRlIG5ld1N0YXRlKTsKLQotICAgIHR5cGVkZWYgSGFzaFNldDxYTUxIdHRwUmVxdWVzdCos
IFBvaW50ZXJIYXNoPFhNTEh0dHBSZXF1ZXN0Kj4gPiBSZXF1ZXN0c1NldDsKLSAgICB0eXBlZGVm
IEhhc2hNYXA8RE9NOjpEb2N1bWVudEltcGwqLCBSZXF1ZXN0c1NldCosIFBvaW50ZXJIYXNoPERP
TTo6RG9jdW1lbnRJbXBsKj4gPiBSZXF1ZXN0c01hcDsKLSAgICBzdGF0aWMgUmVxdWVzdHNNYXAg
JnJlcXVlc3RzQnlEb2N1bWVudCgpOwotICAgIHZvaWQgYWRkVG9SZXF1ZXN0c0J5RG9jdW1lbnQo
KTsKLSAgICB2b2lkIHJlbW92ZUZyb21SZXF1ZXN0c0J5RG9jdW1lbnQoKTsKLQotICAgIFFHdWFy
ZGVkUHRyPERPTTo6RG9jdW1lbnRJbXBsPiBkb2M7Ci0KLSAgICBLVVJMIHVybDsKLSAgICBRU3Ry
aW5nIG1ldGhvZDsKLSAgICBib29sIGFzeW5jOwotICAgIFFTdHJpbmcgcmVxdWVzdEhlYWRlcnM7
Ci0KLSAgICBLSU86OlRyYW5zZmVySm9iICogam9iOwotCi0gICAgWE1MSHR0cFJlcXVlc3RTdGF0
ZSBzdGF0ZTsKLSAgICBSZWZQdHI8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI+IG9uUmVhZHlT
dGF0ZUNoYW5nZUxpc3RlbmVyOwotICAgIFJlZlB0cjxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5l
cj4gb25Mb2FkTGlzdGVuZXI7Ci0KLSAgICBSZWZQdHI8a2h0bWw6OkRlY29kZXI+IGRlY29kZXI7
Ci0gICAgUVN0cmluZyBlbmNvZGluZzsKLSAgICBRU3RyaW5nIHJlc3BvbnNlSGVhZGVyczsKLSAg
ICBRU3RyaW5nIE1JTUVUeXBlT3ZlcnJpZGU7Ci0KLSAgICBRU3RyaW5nIHJlc3BvbnNlOwotICAg
IG11dGFibGUgYm9vbCBjcmVhdGVkRG9jdW1lbnQ7Ci0gICAgbXV0YWJsZSBib29sIHR5cGVJc1hN
TDsKLSAgICBtdXRhYmxlIFJlZlB0cjxET006OkRvY3VtZW50SW1wbD4gcmVzcG9uc2VYTUw7Ci0K
LSAgICBib29sIGFib3J0ZWQ7Ci0gIH07Ci0KLQotICBjbGFzcyBYTUxIdHRwUmVxdWVzdFFPYmpl
Y3QgOiBwdWJsaWMgUU9iamVjdCB7Ci0gICAgUV9PQkpFQ1QKLQotICBwdWJsaWM6Ci0gICAgWE1M
SHR0cFJlcXVlc3RRT2JqZWN0KFhNTEh0dHBSZXF1ZXN0ICpfanNPYmplY3QpOwotCi0gIHB1Ymxp
YyBzbG90czoKLSAgICB2b2lkIHNsb3REYXRhKCBLSU86OkpvYiogam9iLCBjb25zdCBjaGFyICpk
YXRhLCBpbnQgc2l6ZSApOwotICAgIHZvaWQgc2xvdEZpbmlzaGVkKCBLSU86OkpvYiogam9iICk7
Ci0gICAgdm9pZCBzbG90UmVkaXJlY3Rpb24oIEtJTzo6Sm9iKiBqb2IsIGNvbnN0IEtVUkwmIHVy
bCk7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29u
c3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOworICAgIEpTVmFsdWUgKmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOworICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgSlNWYWx1ZSAqdmFsdWUsIGludCAvKmF0dHIq
Lyk7CisgICAgdmlydHVhbCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUgKikgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CiAKICAgcHJpdmF0ZToKLSAgICBY
TUxIdHRwUmVxdWVzdCAqanNPYmplY3Q7CisgICAgZnJpZW5kIGNsYXNzIEpTWE1MSHR0cFJlcXVl
c3RQcm90b0Z1bmM7CisgICAgUmVmUHRyPFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0PiBtX2ltcGw7
CiAgIH07Ci0KIH0gLy8gbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRleDoga2h0bWwvZWNtYS94bWxo
dHRwcmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2VjbWEveG1saHR0cHJlcXVlc3QuaAko
cmV2aXNpb24gMTIyMzkpCisrKyBraHRtbC9lY21hL3htbGh0dHByZXF1ZXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIsNyArMiw3IEBACiAvKgogICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBL
REUgbGlicmFyaWVzCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMu
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNv
bT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBA
bnlwb3AuY29tPgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMjUgKzIyLDIzIEBACiAjaWZu
ZGVmIFhNTEhUVFBSRVFVRVNUX0hfCiAjZGVmaW5lIFhNTEhUVFBSRVFVRVNUX0hfCiAKLSNpbmNs
dWRlICJranNfZG9tLmgiCiAjaW5jbHVkZSA8a3VybC5oPgorI2luY2x1ZGUgPGt4bWxjb3JlL1Bh
c3NSZWZQdHIuaD4KICNpbmNsdWRlIDxreG1sY29yZS9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8a3ht
bGNvcmUvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHFndWFyZGVkcHRyLmg+CiAjaW5jbHVkZSA8cW9i
amVjdC5oPgogCi1uYW1lc3BhY2Uga2h0bWwgewotICAgIGNsYXNzIERlY29kZXI7Ci19Ci0KIG5h
bWVzcGFjZSBLSU8gewogICAgIGNsYXNzIEpvYjsKICAgICBjbGFzcyBUcmFuc2ZlckpvYjsKIH0K
IAotbmFtZXNwYWNlIEtKUyB7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgY2xhc3MgSlNVbnBy
b3RlY3RlZEV2ZW50TGlzdGVuZXI7CisgIGNsYXNzIERlY29kZXI7CisgIGNsYXNzIERvY3VtZW50
SW1wbDsKKyAgY2xhc3MgRXZlbnRMaXN0ZW5lcjsKICAgY2xhc3MgWE1MSHR0cFJlcXVlc3RRT2Jq
ZWN0OwogCiAgIC8vIHRoZXNlIGV4YWN0IG51bWVyaWMgdmFsdWVzIGFyZSBpbXBvcnRhbnQgYmVj
YXVzZSBKUyBleHBlY3RzIHRoZW0KQEAgLTUyLDQxICs1MCwzNSBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICBDb21wbGV0ZWQgPSA0ICAgICAgIC8vIEZpbmlzaGVkIHdpdGggYWxsIG9wZXJhdGlvbnMK
ICAgfTsKIAotICBjbGFzcyBYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wIDogcHVibGljIEpT
T2JqZWN0IHsKLSAgcHVibGljOgotICAgIFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXAoRXhl
Y1N0YXRlICpleGVjLCBET006OkRvY3VtZW50SW1wbCAqZCk7Ci0gICAgflhNTEh0dHBSZXF1ZXN0
Q29uc3RydWN0b3JJbXAoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NvbnN0cnVjdCgp
IGNvbnN0OwotICAgIHZpcnR1YWwgSlNPYmplY3QgKmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IExpc3QgJmFyZ3MpOwotICBwcml2YXRlOgotICAgIFJlZlB0cjxET006OkRvY3VtZW50
SW1wbD4gZG9jOwotICB9OwotCi0gIGNsYXNzIFhNTEh0dHBSZXF1ZXN0IDogcHVibGljIERPTU9i
amVjdCB7CisgIGNsYXNzIFhNTEh0dHBSZXF1ZXN0IDogcHVibGljIFNoYXJlZDxYTUxIdHRwUmVx
dWVzdD4gewogICBwdWJsaWM6Ci0gICAgWE1MSHR0cFJlcXVlc3QoRXhlY1N0YXRlICosIERPTTo6
RG9jdW1lbnRJbXBsICpkKTsKKyAgICBYTUxIdHRwUmVxdWVzdChEb2N1bWVudEltcGwqIGQpOwog
ICAgIH5YTUxIdHRwUmVxdWVzdCgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBK
U1ZhbHVlICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmll
ciAmcHJvcGVydHlOYW1lLCBKU1ZhbHVlICp2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKLSAgICB2
b2lkIHB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEpTVmFsdWUg
KnZhbHVlLCBpbnQgLyphdHRyKi8pOwotICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0
YXRlICopIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOwot
Ci0gICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJu
ICZpbmZvOyB9Ci0gICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwotICAgIGVudW0geyBP
bmxvYWQsIE9ucmVhZHlzdGF0ZWNoYW5nZSwgUmVhZHlTdGF0ZSwgUmVzcG9uc2VUZXh0LCBSZXNw
b25zZVhNTCwgU3RhdHVzLAotICAgICAgICBTdGF0dXNUZXh0LCBBYm9ydCwgR2V0QWxsUmVzcG9u
c2VIZWFkZXJzLCBHZXRSZXNwb25zZUhlYWRlciwgT3BlbiwgU2VuZCwgU2V0UmVxdWVzdEhlYWRl
ciwKLSAgICAgICAgT3ZlcnJpZGVNSU1FVHlwZSB9OwogCi0gICAgc3RhdGljIHZvaWQgY2FuY2Vs
UmVxdWVzdHMoRE9NOjpEb2N1bWVudEltcGwgKmQpOworICAgIHN0YXRpYyB2b2lkIGNhbmNlbFJl
cXVlc3RzKERvY3VtZW50SW1wbCAqZCk7CisKKyAgICBET01TdHJpbmcgZ2V0U3RhdHVzVGV4dCgp
IGNvbnN0OworICAgIGludCBnZXRTdGF0dXMoKSBjb25zdDsKKyAgICBYTUxIdHRwUmVxdWVzdFN0
YXRlIGdldFJlYWR5U3RhdGUoKSBjb25zdDsKKyAgICB2b2lkIG9wZW4oY29uc3QgRE9NU3RyaW5n
JiBtZXRob2QsIGNvbnN0IERPTVN0cmluZyYgdXJsU3RyaW5nLCBib29sIGFzeW5jLCBjb25zdCBE
T01TdHJpbmcmIHVzZXIsIGNvbnN0IERPTVN0cmluZyYgcGFzc3dvcmQpOworICAgIHZvaWQgc2Vu
ZChjb25zdCBET01TdHJpbmcmIF9ib2R5KTsKKyAgICB2b2lkIGFib3J0KCk7CisgICAgdm9pZCBz
ZXRSZXF1ZXN0SGVhZGVyKGNvbnN0IERPTVN0cmluZyYgbmFtZSwgY29uc3QgRE9NU3RyaW5nICZ2
YWx1ZSk7CisgICAgdm9pZCBvdmVycmlkZU1JTUVUeXBlKGNvbnN0IERPTVN0cmluZyYgb3ZlcnJp
ZGUpOworICAgIERPTVN0cmluZyBnZXRBbGxSZXNwb25zZUhlYWRlcnMoKSBjb25zdDsKKyAgICBE
T01TdHJpbmcgZ2V0UmVzcG9uc2VIZWFkZXIoY29uc3QgRE9NU3RyaW5nJiBuYW1lKSBjb25zdDsK
KyAgICBET01TdHJpbmcgZ2V0UmVzcG9uc2VUZXh0KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxE
b2N1bWVudEltcGw+IGdldFJlc3BvbnNlWE1MKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldE9uUmVh
ZHlTdGF0ZUNoYW5nZUxpc3RlbmVyKEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIpOworICAg
IFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZ2V0T25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIo
KSBjb25zdDsKKyAgICB2b2lkIHNldE9uTG9hZExpc3RlbmVyKEV2ZW50TGlzdGVuZXIqIGV2ZW50
TGlzdGVuZXIpOworICAgIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZ2V0T25Mb2FkTGlzdGVu
ZXIoKSBjb25zdDsKIAogICBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBYTUxIdHRwUmVxdWVz
dFByb3RvRnVuYzsKICAgICBmcmllbmQgY2xhc3MgWE1MSHR0cFJlcXVlc3RRT2JqZWN0OwogCi0g
ICAgSlNWYWx1ZSAqZ2V0U3RhdHVzVGV4dCgpIGNvbnN0OwotICAgIEpTVmFsdWUgKmdldFN0YXR1
cygpIGNvbnN0OwogICAgIGJvb2wgdXJsTWF0Y2hlc0RvY3VtZW50RG9tYWluKGNvbnN0IEtVUkwm
KSBjb25zdDsKIAogICAgIFhNTEh0dHBSZXF1ZXN0UU9iamVjdCAqcU9iamVjdDsKQEAgLTk3LDI2
ICs4OSwyMiBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgIHZvaWQgcHJvY2Vzc1N5bmNMb2FkUmVz
dWx0cyhjb25zdCBCeXRlQXJyYXkgJmRhdGEsIGNvbnN0IEtVUkwgJmZpbmFsVVJMLCBjb25zdCBR
U3RyaW5nICZoZWFkZXJzKTsKIAotICAgIHZvaWQgb3Blbihjb25zdCBRU3RyaW5nJiBfbWV0aG9k
LCBjb25zdCBLVVJMJiBfdXJsLCBib29sIF9hc3luYyk7Ci0gICAgdm9pZCBzZW5kKGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBfYm9keSk7Ci0gICAgdm9pZCBhYm9ydCgpOwotICAgIHZvaWQgc2V0UmVx
dWVzdEhlYWRlcihjb25zdCBRU3RyaW5nJiBuYW1lLCBjb25zdCBRU3RyaW5nICZ2YWx1ZSk7Ci0g
ICAgUVN0cmluZyBnZXRSZXF1ZXN0SGVhZGVyKGNvbnN0IFFTdHJpbmcmIG5hbWUpIGNvbnN0Owot
ICAgIEpTVmFsdWUgKmdldEFsbFJlc3BvbnNlSGVhZGVycygpIGNvbnN0OwotICAgIFFTdHJpbmcg
Z2V0UmVzcG9uc2VIZWFkZXIoY29uc3QgUVN0cmluZyYgbmFtZSkgY29uc3Q7CiAgICAgYm9vbCBy
ZXNwb25zZUlzWE1MKCkgY29uc3Q7CiAgICAgCisgICAgUVN0cmluZyBnZXRSZXF1ZXN0SGVhZGVy
KGNvbnN0IFFTdHJpbmcmIG5hbWUpIGNvbnN0OwogICAgIHN0YXRpYyBRU3RyaW5nIGdldFNwZWNp
ZmljSGVhZGVyKGNvbnN0IFFTdHJpbmcmIGhlYWRlcnMsIGNvbnN0IFFTdHJpbmcmIG5hbWUpOwog
CiAgICAgdm9pZCBjaGFuZ2VTdGF0ZShYTUxIdHRwUmVxdWVzdFN0YXRlIG5ld1N0YXRlKTsKIAog
ICAgIHR5cGVkZWYgSGFzaFNldDxYTUxIdHRwUmVxdWVzdCosIFBvaW50ZXJIYXNoPFhNTEh0dHBS
ZXF1ZXN0Kj4gPiBSZXF1ZXN0c1NldDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8RE9NOjpEb2N1bWVu
dEltcGwqLCBSZXF1ZXN0c1NldCosIFBvaW50ZXJIYXNoPERPTTo6RG9jdW1lbnRJbXBsKj4gPiBS
ZXF1ZXN0c01hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8RG9jdW1lbnRJbXBsKiwgUmVxdWVzdHNT
ZXQqLCBQb2ludGVySGFzaDxEb2N1bWVudEltcGwqPiA+IFJlcXVlc3RzTWFwOwogICAgIHN0YXRp
YyBSZXF1ZXN0c01hcCAmcmVxdWVzdHNCeURvY3VtZW50KCk7CiAgICAgdm9pZCBhZGRUb1JlcXVl
c3RzQnlEb2N1bWVudCgpOwogICAgIHZvaWQgcmVtb3ZlRnJvbVJlcXVlc3RzQnlEb2N1bWVudCgp
OwogCi0gICAgUUd1YXJkZWRQdHI8RE9NOjpEb2N1bWVudEltcGw+IGRvYzsKKyAgICBRR3VhcmRl
ZFB0cjxEb2N1bWVudEltcGw+IGRvYzsKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gb25SZWFk
eVN0YXRlQ2hhbmdlTGlzdGVuZXI7CisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG9uTG9hZExp
c3RlbmVyOwogCiAgICAgS1VSTCB1cmw7CiAgICAgUVN0cmluZyBtZXRob2Q7CkBAIC0xMjYsOCAr
MTE0LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgS0lPOjpUcmFuc2ZlckpvYiAqIGpvYjsKIAog
ICAgIFhNTEh0dHBSZXF1ZXN0U3RhdGUgc3RhdGU7Ci0gICAgUmVmUHRyPEpTVW5wcm90ZWN0ZWRF
dmVudExpc3RlbmVyPiBvblJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lcjsKLSAgICBSZWZQdHI8SlNV
bnByb3RlY3RlZEV2ZW50TGlzdGVuZXI+IG9uTG9hZExpc3RlbmVyOwogCiAgICAgUmVmUHRyPGto
dG1sOjpEZWNvZGVyPiBkZWNvZGVyOwogICAgIFFTdHJpbmcgZW5jb2Rpbmc7CkBAIC0xMzcsNyAr
MTIzLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgUVN0cmluZyByZXNwb25zZTsKICAgICBtdXRh
YmxlIGJvb2wgY3JlYXRlZERvY3VtZW50OwogICAgIG11dGFibGUgYm9vbCB0eXBlSXNYTUw7Ci0g
ICAgbXV0YWJsZSBSZWZQdHI8RE9NOjpEb2N1bWVudEltcGw+IHJlc3BvbnNlWE1MOworICAgIG11
dGFibGUgUmVmUHRyPERvY3VtZW50SW1wbD4gcmVzcG9uc2VYTUw7CiAKICAgICBib29sIGFib3J0
ZWQ7CiAgIH07CkluZGV4OiBraHRtbC9lY21hL2tqc19iaW5kaW5nLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a2h0bWwvZWNtYS9ranNfYmluZGluZy5oCShyZXZpc2lvbiAxMjIzOSkKKysrIGtodG1sL2VjbWEv
a2pzX2JpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDYgKzE1NSwxMSBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgSlNWYWx1ZSAqanNTdHJpbmdPck51bGwoY29uc3QgRE9NOjpET01TdHJpbmcm
KTsKIAogICAvKioKKyAgICogIEdldCBhIFN0cmluZyBvYmplY3QsIG9yIGpzVW5kZWZpbmVkKCkg
aWYgcyBpcyBudWxsCisgICAqLworICBKU1ZhbHVlICpqc1N0cmluZ09yVW5kZWZpbmVkKGNvbnN0
IFdlYkNvcmU6OkRPTVN0cmluZyYpOworCisgIC8qKgogICAgKiAgR2V0IGEgRE9NU3RyaW5nIG9i
amVjdCBvciBhIG51bGwgRE9NU3RyaW5nIGlmIHRoZSB2YWx1ZSBpcyBudWxsCiAgICAqLwogICBE
T006OkRPTVN0cmluZyB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgKnZhbCk7CkluZGV4OiBraHRtbC9lY21hL0pTWE1MSHR0cFJlcXVlc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtodG1sL2VjbWEvSlNYTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDEy
MTcwKQorKysga2h0bWwvZWNtYS9KU1hNTEh0dHBSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJy
YXJpZXMKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDUgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgorICog
IENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5j
b20+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0xOSwyMzQgKzE5LDE0NyBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1hNTEh0dHBSZXF1ZXN0LmgiCiAjaW5jbHVk
ZSAieG1saHR0cHJlcXVlc3QuaCIKIAogI2luY2x1ZGUgImtqc193aW5kb3cuaCIKICNpbmNsdWRl
ICJranNfZXZlbnRzLmgiCiAKLSNpbmNsdWRlICJkb20vZG9tX2V4Y2VwdGlvbi5oIgogI2luY2x1
ZGUgImRvbS9kb21fc3RyaW5nLmgiCi0jaW5jbHVkZSAiQ2FjaGUuaCIKICNpbmNsdWRlICJodG1s
L2h0bWxfZG9jdW1lbnRpbXBsLmgiCi0jaW5jbHVkZSAieG1sL2RvbTJfZXZlbnRzaW1wbC5oIgot
I2luY2x1ZGUgInhtbC9FdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRpb25J
bXBsLmgiCiAKLSNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkpTWE1MSHR0cFJlcXVlc3Qu
bHV0LmgiCiAKLSNpbmNsdWRlIDxrZGVidWcuaD4KLSNpbmNsdWRlIDxraW8vam9iLmg+Ci0jaW5j
bHVkZSA8cW9iamVjdC5oPgotI2luY2x1ZGUgPHFyZWdleHAuaD4KLSNpbmNsdWRlIDxxdGV4dGNv
ZGVjLmg+Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotI2luY2x1ZGUgIktXUUxvYWRlci5o
IgotCi0jaW5jbHVkZSAieG1saHR0cHJlcXVlc3QubHV0LmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBE
T007Ci11c2luZyBuYW1lc3BhY2UgRE9NOjpFdmVudE5hbWVzOwotCi11c2luZyBraHRtbDo6RGVj
b2RlcjsKLQotc3RhdGljIGlubGluZSBRU3RyaW5nIGdldE1JTUVUeXBlKGNvbnN0IFFTdHJpbmcm
IGNvbnRlbnRUeXBlU3RyaW5nKQotewotICAgIHJldHVybiBRU3RyaW5nTGlzdDo6c3BsaXQoIjsi
LCBjb250ZW50VHlwZVN0cmluZywgdHJ1ZSlbMF0uc3RyaXBXaGl0ZVNwYWNlKCk7Ci19Ci0KLXN0
YXRpYyBRU3RyaW5nIGdldENoYXJzZXQoY29uc3QgUVN0cmluZyYgY29udGVudFR5cGVTdHJpbmcp
Ci17Ci0gICAgaW50IHBvcyA9IDA7Ci0gICAgaW50IGxlbmd0aCA9IChpbnQpY29udGVudFR5cGVT
dHJpbmcubGVuZ3RoKCk7Ci0gICAgCi0gICAgd2hpbGUgKHBvcyA8IGxlbmd0aCkgewotICAgICAg
ICBwb3MgPSBjb250ZW50VHlwZVN0cmluZy5maW5kKCJjaGFyc2V0IiwgcG9zLCBmYWxzZSk7Ci0g
ICAgICAgIGlmIChwb3MgPD0gMCkKLSAgICAgICAgICAgIHJldHVybiBRU3RyaW5nKCk7Ci0gICAg
ICAgIAotICAgICAgICAvLyBpcyB3aGF0IHdlIGZvdW5kIGEgYmVnaW5uaW5nIG9mIGEgd29yZD8K
LSAgICAgICAgaWYgKGNvbnRlbnRUeXBlU3RyaW5nW3Bvcy0xXSA+ICcgJyAmJiBjb250ZW50VHlw
ZVN0cmluZ1twb3MtMV0gIT0gJzsnKSB7Ci0gICAgICAgICAgICBwb3MgKz0gNzsKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwb3MgKz0gNzsKLQot
ICAgICAgICAvLyBza2lwIHdoaXRlc3BhY2UKLSAgICAgICAgd2hpbGUgKHBvcyAhPSBsZW5ndGgg
JiYgY29udGVudFR5cGVTdHJpbmdbcG9zXSA8PSAnICcpCi0gICAgICAgICAgICArK3BvczsKLSAg
ICAKLSAgICAgICAgaWYgKGNvbnRlbnRUeXBlU3RyaW5nW3BvcysrXSAhPSAnPScpIC8vIHRoaXMg
ImNoYXJzZXQiIHN1YnN0cmluZyB3YXNuJ3QgYSBwYXJhbWV0ZXIgbmFtZSwgYnV0IHRoZXJlIG1h
eSBiZSBvdGhlcnMKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHdoaWxlIChwb3Mg
IT0gbGVuZ3RoICYmIChjb250ZW50VHlwZVN0cmluZ1twb3NdIDw9ICcgJyB8fCBjb250ZW50VHlw
ZVN0cmluZ1twb3NdID09ICciJyB8fCBjb250ZW50VHlwZVN0cmluZ1twb3NdID09ICdcJycpKQot
ICAgICAgICAgICAgKytwb3M7Ci0KLSAgICAgICAgLy8gd2UgZG9uJ3QgaGFuZGxlIHNwYWNlcyB3
aXRoaW4gcXVvdGVkIHBhcmFtZXRlciB2YWx1ZXMsIGJlY2F1c2UgY2hhcnNldCBuYW1lcyBjYW5u
b3QgaGF2ZSBhbnkKLSAgICAgICAgaW50IGVuZHBvcyA9IHBvczsKLSAgICAgICAgd2hpbGUgKHBv
cyAhPSBsZW5ndGggJiYgY29udGVudFR5cGVTdHJpbmdbZW5kcG9zXSA+ICcgJyAmJiBjb250ZW50
VHlwZVN0cmluZ1tlbmRwb3NdICE9ICciJyAmJiBjb250ZW50VHlwZVN0cmluZ1tlbmRwb3NdICE9
ICdcJycgJiYgY29udGVudFR5cGVTdHJpbmdbZW5kcG9zXSAhPSAnOycpCi0gICAgICAgICAgICAr
K2VuZHBvczsKLSAgICAKLSAgICAgICAgcmV0dXJuIGNvbnRlbnRUeXBlU3RyaW5nLm1pZChwb3Ms
IGVuZHBvcy1wb3MpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gUVN0cmluZygpOwotfQogCiBu
YW1lc3BhY2UgS0pTIHsKIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBYTUxIdHRwUmVxdWVzdCBP
YmplY3QgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEpT
WE1MSHR0cFJlcXVlc3QgT2JqZWN0IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCi0vKiBTb3Vy
Y2UgZm9yIFhNTEh0dHBSZXF1ZXN0UHJvdG9UYWJsZS4KLUBiZWdpbiBYTUxIdHRwUmVxdWVzdFBy
b3RvVGFibGUgNwotICBhYm9ydCAgICAgICAgICAgICAgICAgWE1MSHR0cFJlcXVlc3Q6OkFib3J0
ICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMAotICBnZXRBbGxSZXNwb25z
ZUhlYWRlcnMgWE1MSHR0cFJlcXVlc3Q6OkdldEFsbFJlc3BvbnNlSGVhZGVycyAgIERvbnREZWxl
dGV8RnVuY3Rpb24gMAotICBnZXRSZXNwb25zZUhlYWRlciAgICAgWE1MSHR0cFJlcXVlc3Q6Okdl
dFJlc3BvbnNlSGVhZGVyICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMQotICBvcGVuICAgICAg
ICAgICAgICAgICAgWE1MSHR0cFJlcXVlc3Q6Ok9wZW4gICAgICAgICAgICAgICAgICAgIERvbnRE
ZWxldGV8RnVuY3Rpb24gNQotICBvdmVycmlkZU1pbWVUeXBlICAgICAgWE1MSHR0cFJlcXVlc3Q6
Ok92ZXJyaWRlTUlNRVR5cGUgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMQotICBzZW5kICAg
ICAgICAgICAgICAgICAgWE1MSHR0cFJlcXVlc3Q6OlNlbmQgICAgICAgICAgICAgICAgICAgIERv
bnREZWxldGV8RnVuY3Rpb24gMQotICBzZXRSZXF1ZXN0SGVhZGVyICAgICAgWE1MSHR0cFJlcXVl
c3Q6OlNldFJlcXVlc3RIZWFkZXIgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMgorLyogU291
cmNlIGZvciBKU1hNTEh0dHBSZXF1ZXN0UHJvdG9UYWJsZS4KK0BiZWdpbiBKU1hNTEh0dHBSZXF1
ZXN0UHJvdG9UYWJsZSA3CisgIGFib3J0ICAgICAgICAgICAgICAgICBKU1hNTEh0dHBSZXF1ZXN0
OjpBYm9ydCAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDAKKyAgZ2V0QWxs
UmVzcG9uc2VIZWFkZXJzIEpTWE1MSHR0cFJlcXVlc3Q6OkdldEFsbFJlc3BvbnNlSGVhZGVycyAg
IERvbnREZWxldGV8RnVuY3Rpb24gMAorICBnZXRSZXNwb25zZUhlYWRlciAgICAgSlNYTUxIdHRw
UmVxdWVzdDo6R2V0UmVzcG9uc2VIZWFkZXIgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAxCisg
IG9wZW4gICAgICAgICAgICAgICAgICBKU1hNTEh0dHBSZXF1ZXN0OjpPcGVuICAgICAgICAgICAg
ICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDUKKyAgb3ZlcnJpZGVNaW1lVHlwZSAgICAgIEpT
WE1MSHR0cFJlcXVlc3Q6Ok92ZXJyaWRlTUlNRVR5cGUgICAgICAgIERvbnREZWxldGV8RnVuY3Rp
b24gMQorICBzZW5kICAgICAgICAgICAgICAgICAgSlNYTUxIdHRwUmVxdWVzdDo6U2VuZCAgICAg
ICAgICAgICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAxCisgIHNldFJlcXVlc3RIZWFkZXIg
ICAgICBKU1hNTEh0dHBSZXF1ZXN0OjpTZXRSZXF1ZXN0SGVhZGVyICAgICAgICBEb250RGVsZXRl
fEZ1bmN0aW9uIDIKIEBlbmQKICovCi1LSlNfREVGSU5FX1BST1RPVFlQRShYTUxIdHRwUmVxdWVz
dFByb3RvKQotS0pTX0lNUExFTUVOVF9QUk9UT0ZVTkMoWE1MSHR0cFJlcXVlc3RQcm90b0Z1bmMp
Ci1LSlNfSU1QTEVNRU5UX1BST1RPVFlQRSgiWE1MSHR0cFJlcXVlc3QiLFhNTEh0dHBSZXF1ZXN0
UHJvdG8sWE1MSHR0cFJlcXVlc3RQcm90b0Z1bmMpCitLSlNfREVGSU5FX1BST1RPVFlQRShKU1hN
TEh0dHBSZXF1ZXN0UHJvdG8pCitLSlNfSU1QTEVNRU5UX1BST1RPRlVOQyhKU1hNTEh0dHBSZXF1
ZXN0UHJvdG9GdW5jKQorS0pTX0lNUExFTUVOVF9QUk9UT1RZUEUoIkpTWE1MSHR0cFJlcXVlc3Qi
LCBKU1hNTEh0dHBSZXF1ZXN0UHJvdG8sIEpTWE1MSHR0cFJlcXVlc3RQcm90b0Z1bmMpCiAKLVhN
TEh0dHBSZXF1ZXN0UU9iamVjdDo6WE1MSHR0cFJlcXVlc3RRT2JqZWN0KFhNTEh0dHBSZXF1ZXN0
ICpfanNPYmplY3QpIAotewotICBqc09iamVjdCA9IF9qc09iamVjdDsgCi19Ci0KLXZvaWQgWE1M
SHR0cFJlcXVlc3RRT2JqZWN0OjpzbG90RGF0YSggS0lPOjpKb2IqIGpvYiwgY29uc3QgY2hhciAq
ZGF0YSwgaW50IHNpemUgKQotewotICBqc09iamVjdC0+c2xvdERhdGEoam9iLCBkYXRhLCBzaXpl
KTsKLX0KLQotdm9pZCBYTUxIdHRwUmVxdWVzdFFPYmplY3Q6OnNsb3RGaW5pc2hlZCggS0lPOjpK
b2IqIGpvYiApCi17Ci0gIGpzT2JqZWN0LT5zbG90RmluaXNoZWQoam9iKTsgCi19CiAKLXZvaWQg
WE1MSHR0cFJlcXVlc3RRT2JqZWN0OjpzbG90UmVkaXJlY3Rpb24oIEtJTzo6Sm9iKiBqb2IsIGNv
bnN0IEtVUkwmIHVybCkKLXsgCi0gIGpzT2JqZWN0LT5zbG90UmVkaXJlY3Rpb24oIGpvYiwgdXJs
ICk7IAotfQotCi1YTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wOjpYTUxIdHRwUmVxdWVzdENv
bnN0cnVjdG9ySW1wKEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpEb2N1bWVudEltcGwgKmQpCitKU1hN
TEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXA6OkpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvcklt
cChFeGVjU3RhdGUgKmV4ZWMsIERvY3VtZW50SW1wbCAqZCkKICAgICA6IGRvYyhkKQogewotICAg
IHB1dERpcmVjdChwcm90b3R5cGVQcm9wZXJ0eU5hbWUsIFhNTEh0dHBSZXF1ZXN0UHJvdG86OnNl
bGYoZXhlYyksIERvbnRFbnVtfERvbnREZWxldGV8UmVhZE9ubHkpOworICAgIHB1dERpcmVjdChw
cm90b3R5cGVQcm9wZXJ0eU5hbWUsIEpTWE1MSHR0cFJlcXVlc3RQcm90bzo6c2VsZihleGVjKSwg
RG9udEVudW18RG9udERlbGV0ZXxSZWFkT25seSk7CiB9CiAKLVhNTEh0dHBSZXF1ZXN0Q29uc3Ry
dWN0b3JJbXA6On5YTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wKCkKK0pTWE1MSHR0cFJlcXVl
c3RDb25zdHJ1Y3RvckltcDo6fkpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3RvckltcCgpCiB7CiB9
CiAKLWJvb2wgWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3RvckltcDo6aW1wbGVtZW50c0NvbnN0cnVj
dCgpIGNvbnN0Citib29sIEpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3RvckltcDo6aW1wbGVtZW50
c0NvbnN0cnVjdCgpIGNvbnN0CiB7CiAgIHJldHVybiB0cnVlOwogfQogCi1KU09iamVjdCAqWE1M
SHR0cFJlcXVlc3RDb25zdHJ1Y3RvckltcDo6Y29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgTGlzdCAmKQorSlNPYmplY3QgKkpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3RvckltcDo6Y29u
c3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmKQogewotICByZXR1cm4gbmV3IFhN
TEh0dHBSZXF1ZXN0KGV4ZWMsIGRvYy5nZXQoKSk7CisgIHJldHVybiBuZXcgSlNYTUxIdHRwUmVx
dWVzdChleGVjLCBkb2MuZ2V0KCkpOwogfQogCi1jb25zdCBDbGFzc0luZm8gWE1MSHR0cFJlcXVl
c3Q6OmluZm8gPSB7ICJYTUxIdHRwUmVxdWVzdCIsIDAsICZYTUxIdHRwUmVxdWVzdFRhYmxlLCAw
IH07Citjb25zdCBDbGFzc0luZm8gSlNYTUxIdHRwUmVxdWVzdDo6aW5mbyA9IHsgIkpTWE1MSHR0
cFJlcXVlc3QiLCAwLCAmSlNYTUxIdHRwUmVxdWVzdFRhYmxlLCAwIH07CiAKLS8qIFNvdXJjZSBm
b3IgWE1MSHR0cFJlcXVlc3RUYWJsZS4KLUBiZWdpbiBYTUxIdHRwUmVxdWVzdFRhYmxlIDcKLSAg
cmVhZHlTdGF0ZSAgICAgICAgICAgIFhNTEh0dHBSZXF1ZXN0OjpSZWFkeVN0YXRlICAgICAgICAg
ICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHJlc3BvbnNlVGV4dCAgICAgICAgICBYTUxIdHRw
UmVxdWVzdDo6UmVzcG9uc2VUZXh0ICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBy
ZXNwb25zZVhNTCAgICAgICAgICAgWE1MSHR0cFJlcXVlc3Q6OlJlc3BvbnNlWE1MICAgICAgICAg
ICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgc3RhdHVzICAgICAgICAgICAgICAgIFhNTEh0dHBS
ZXF1ZXN0OjpTdGF0dXMgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHN0
YXR1c1RleHQgICAgICAgICAgICBYTUxIdHRwUmVxdWVzdDo6U3RhdHVzVGV4dCAgICAgICAgICAg
ICAgRG9udERlbGV0ZXxSZWFkT25seQotICBvbnJlYWR5c3RhdGVjaGFuZ2UgICAgWE1MSHR0cFJl
cXVlc3Q6Ok9ucmVhZHlzdGF0ZWNoYW5nZSAgICAgIERvbnREZWxldGUKLSAgb25sb2FkICAgICAg
ICAgICAgICAgIFhNTEh0dHBSZXF1ZXN0OjpPbmxvYWQgICAgICAgICAgICAgICAgICBEb250RGVs
ZXRlCisvKiBTb3VyY2UgZm9yIEpTWE1MSHR0cFJlcXVlc3RUYWJsZS4KK0BiZWdpbiBKU1hNTEh0
dHBSZXF1ZXN0VGFibGUgNworICByZWFkeVN0YXRlICAgICAgICAgICAgSlNYTUxIdHRwUmVxdWVz
dDo6UmVhZHlTdGF0ZSAgICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQorICByZXNwb25z
ZVRleHQgICAgICAgICAgSlNYTUxIdHRwUmVxdWVzdDo6UmVzcG9uc2VUZXh0ICAgICAgICAgICAg
RG9udERlbGV0ZXxSZWFkT25seQorICByZXNwb25zZVhNTCAgICAgICAgICAgSlNYTUxIdHRwUmVx
dWVzdDo6UmVzcG9uc2VYTUwgICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQorICBzdGF0
dXMgICAgICAgICAgICAgICAgSlNYTUxIdHRwUmVxdWVzdDo6U3RhdHVzICAgICAgICAgICAgICAg
ICAgRG9udERlbGV0ZXxSZWFkT25seQorICBzdGF0dXNUZXh0ICAgICAgICAgICAgSlNYTUxIdHRw
UmVxdWVzdDo6U3RhdHVzVGV4dCAgICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQorICBv
bnJlYWR5c3RhdGVjaGFuZ2UgICAgSlNYTUxIdHRwUmVxdWVzdDo6T25yZWFkeXN0YXRlY2hhbmdl
ICAgICAgRG9udERlbGV0ZQorICBvbmxvYWQgICAgICAgICAgICAgICAgSlNYTUxIdHRwUmVxdWVz
dDo6T25sb2FkICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZQogQGVuZAogKi8KIAotYm9vbCBY
TUxIdHRwUmVxdWVzdDo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEpTWE1M
SHR0cFJlcXVlc3Q6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewotICByZXR1cm4g
Z2V0U3RhdGljVmFsdWVTbG90PFhNTEh0dHBSZXF1ZXN0LCBET01PYmplY3Q+KGV4ZWMsICZYTUxI
dHRwUmVxdWVzdFRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICByZXR1cm4gZ2V0
U3RhdGljVmFsdWVTbG90PEpTWE1MSHR0cFJlcXVlc3QsIERPTU9iamVjdD4oZXhlYywgJkpTWE1M
SHR0cFJlcXVlc3RUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotSlNWYWx1
ZSAqWE1MSHR0cFJlcXVlc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0CitKU1ZhbHVlICpKU1hNTEh0dHBSZXF1ZXN0OjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogICBzd2l0Y2ggKHRva2VuKSB7
CiAgIGNhc2UgUmVhZHlTdGF0ZToKLSAgICByZXR1cm4ganNOdW1iZXIoc3RhdGUpOworICAgIHJl
dHVybiBqc051bWJlcihtX2ltcGwtPmdldFJlYWR5U3RhdGUoKSk7CiAgIGNhc2UgUmVzcG9uc2VU
ZXh0OgotICAgIHJldHVybiBqc1N0cmluZ09yTnVsbChET006OkRPTVN0cmluZyhyZXNwb25zZSkp
OwotICBjYXNlIFJlc3BvbnNlWE1MOgotICAgIGlmIChzdGF0ZSAhPSBDb21wbGV0ZWQpIHsKKyAg
ICByZXR1cm4ganNTdHJpbmdPck51bGwobV9pbXBsLT5nZXRSZXNwb25zZVRleHQoKSk7CisgIGNh
c2UgUmVzcG9uc2VYTUw6IHsKKyAgICBSZWZQdHI8RG9jdW1lbnRJbXBsPiByZXNwb25zZVhNTCA9
IG1faW1wbC0+Z2V0UmVzcG9uc2VYTUwoKTsKKyAgICBpZiAocmVzcG9uc2VYTUwuZ2V0KCkpCisg
ICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCByZXNwb25zZVhNTC5nZXQoKSk7CisgICAgZWxz
ZQogICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotCi0gICAgaWYgKCFjcmVhdGVk
RG9jdW1lbnQpIHsKLSAgICAgIGlmICh0eXBlSXNYTUwgPSByZXNwb25zZUlzWE1MKCkpIHsKLSAg
ICAgICAgcmVzcG9uc2VYTUwgPSBkb2MtPmltcGxlbWVudGF0aW9uKCktPmNyZWF0ZURvY3VtZW50
KCk7Ci0KLSAgICAgICAgRG9jdW1lbnRJbXBsICpkb2NJbXBsID0gcmVzcG9uc2VYTUwuZ2V0KCk7
Ci0gICAgICAgIAotICAgICAgICBkb2NJbXBsLT5vcGVuKCk7Ci0gICAgICAgIGRvY0ltcGwtPndy
aXRlKHJlc3BvbnNlKTsKLSAgICAgICAgZG9jSW1wbC0+ZmluaXNoUGFyc2luZygpOwotICAgICAg
ICBkb2NJbXBsLT5jbG9zZSgpOwotICAgICAgfQotICAgICAgY3JlYXRlZERvY3VtZW50ID0gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBpZiAoIXR5cGVJc1hNTCkgewotICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgcmVzcG9uc2VYTUwu
Z2V0KCkpOworICB9CiAgIGNhc2UgU3RhdHVzOgotICAgIHJldHVybiBnZXRTdGF0dXMoKTsKKyAg
ICBpbnQgc3RhdHVzID0gbV9pbXBsLT5nZXRTdGF0dXMoKTsKKyAgICByZXR1cm4gc3RhdHVzID4g
MCA/IGpzTnVtYmVyKHN0YXR1cykgOiBqc1VuZGVmaW5lZCgpOwogICBjYXNlIFN0YXR1c1RleHQ6
Ci0gICAgcmV0dXJuIGdldFN0YXR1c1RleHQoKTsKKyAgICByZXR1cm4ganNTdHJpbmdPclVuZGVm
aW5lZChtX2ltcGwtPmdldFN0YXR1c1RleHQoKSk7CiAgIGNhc2UgT25yZWFkeXN0YXRlY2hhbmdl
OgotICAgaWYgKG9uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyICYmIG9uUmVhZHlTdGF0ZUNoYW5n
ZUxpc3RlbmVyLT5saXN0ZW5lck9iaigpKSB7Ci0gICAgIHJldHVybiBvblJlYWR5U3RhdGVDaGFu
Z2VMaXN0ZW5lci0+bGlzdGVuZXJPYmooKTsKLSAgIH0gZWxzZSB7Ci0gICAgIHJldHVybiBqc051
bGwoKTsKKyAgIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKiBvblJlYWR5U3RhdGVDaGFuZ2VM
aXN0ZW5lciA9IHN0YXRpY19jYXN0PEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKj4obV9pbXBs
LT5nZXRPblJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lcigpLmdldCgpKTsKKyAgIGlmIChvblJlYWR5
U3RhdGVDaGFuZ2VMaXN0ZW5lcikgeworICAgICAgSlNPYmplY3QqIGxpc3RlbmVyT2JqID0gb25S
ZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXItPmxpc3RlbmVyT2JqKCk7CisgICAgICBpZiAobGlzdGVu
ZXJPYmopCisgICAgICAgIHJldHVybiBsaXN0ZW5lck9iajsKICAgIH0KKyAgIHJldHVybiBqc051
bGwoKTsKICAgY2FzZSBPbmxvYWQ6Ci0gICBpZiAob25Mb2FkTGlzdGVuZXIgJiYgb25Mb2FkTGlz
dGVuZXItPmxpc3RlbmVyT2JqKCkpIHsKLSAgICAgcmV0dXJuIG9uTG9hZExpc3RlbmVyLT5saXN0
ZW5lck9iaigpOwotICAgfSBlbHNlIHsKLSAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgSlNVbnBy
b3RlY3RlZEV2ZW50TGlzdGVuZXIqIG9uTG9hZExpc3RlbmVyID0gc3RhdGljX2Nhc3Q8SlNVbnBy
b3RlY3RlZEV2ZW50TGlzdGVuZXIqPihtX2ltcGwtPmdldE9uTG9hZExpc3RlbmVyKCkuZ2V0KCkp
OworICAgaWYgKG9uTG9hZExpc3RlbmVyKSB7CisgICAgICBKU09iamVjdCogbGlzdGVuZXJPYmog
PSBvbkxvYWRMaXN0ZW5lci0+bGlzdGVuZXJPYmooKTsKKyAgICAgIGlmIChsaXN0ZW5lck9iaikK
KyAgICAgICAgcmV0dXJuIGxpc3RlbmVyT2JqOwogICAgfQorICAgcmV0dXJuIGpzTnVsbCgpOwog
ICBkZWZhdWx0OgotICAgIGtkV2FybmluZygpIDw8ICJYTUxIdHRwUmVxdWVzdDo6Z2V0VmFsdWVQ
cm9wZXJ0eSB1bmhhbmRsZWQgdG9rZW4gIiA8PCB0b2tlbiA8PCBlbmRsOworLy8gICAga2RXYXJu
aW5nKCkgPDwgIkpTWE1MSHR0cFJlcXVlc3Q6OmdldFZhbHVlUHJvcGVydHkgdW5oYW5kbGVkIHRv
a2VuICIgPDwgdG9rZW4gPDwgZW5kbDsKICAgICByZXR1cm4gTlVMTDsKICAgfQogfQogCi12b2lk
IFhNTEh0dHBSZXF1ZXN0OjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgKnZhbHVlLCBpbnQgYXR0cikKK3ZvaWQgSlNYTUxIdHRwUmVx
dWVzdDo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1l
LCBKU1ZhbHVlICp2YWx1ZSwgaW50IGF0dHIpCiB7Ci0gIGxvb2t1cFB1dDxYTUxIdHRwUmVxdWVz
dCxET01PYmplY3Q+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIsICZYTUxIdHRwUmVx
dWVzdFRhYmxlLCB0aGlzICk7CisgIGxvb2t1cFB1dDxKU1hNTEh0dHBSZXF1ZXN0LERPTU9iamVj
dD4oZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0ciwgJkpTWE1MSHR0cFJlcXVlc3RUYWJs
ZSwgdGhpcyApOwogfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjpwdXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBKU1ZhbHVlICp2YWx1ZSwgaW50IC8qYXR0ciovKQor
dm9pZCBKU1hNTEh0dHBSZXF1ZXN0OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBKU1ZhbHVlICp2YWx1ZSwgaW50IC8qYXR0ciovKQogewogICBzd2l0Y2godG9r
ZW4pIHsKICAgY2FzZSBPbnJlYWR5c3RhdGVjaGFuZ2U6Ci0gICAgb25SZWFkeVN0YXRlQ2hhbmdl
TGlzdGVuZXIgPSBXaW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5nZXRKU1VucHJvdGVjdGVk
RXZlbnRMaXN0ZW5lcih2YWx1ZSwgdHJ1ZSk7CisgICAgbV9pbXBsLT5zZXRPblJlYWR5U3RhdGVD
aGFuZ2VMaXN0ZW5lcihXaW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5nZXRKU1VucHJvdGVj
dGVkRXZlbnRMaXN0ZW5lcih2YWx1ZSwgdHJ1ZSkpOwogICAgIGJyZWFrOwogICBjYXNlIE9ubG9h
ZDoKLSAgICBvbkxvYWRMaXN0ZW5lciA9IFdpbmRvdzo6cmV0cmlldmVBY3RpdmUoZXhlYyktPmdl
dEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKHZhbHVlLCB0cnVlKTsKKyAgICBtX2ltcGwtPnNl
dE9uTG9hZExpc3RlbmVyKFdpbmRvdzo6cmV0cmlldmVBY3RpdmUoZXhlYyktPmdldEpTVW5wcm90
ZWN0ZWRFdmVudExpc3RlbmVyKHZhbHVlLCB0cnVlKSk7CiAgICAgYnJlYWs7CiAgIGRlZmF1bHQ6
Ci0gICAga2RXYXJuaW5nKCkgPDwgIkhUTUxEb2N1bWVudDo6cHV0VmFsdWVQcm9wZXJ0eSB1bmhh
bmRsZWQgdG9rZW4gIiA8PCB0b2tlbiA8PCBlbmRsOworICAgICAgOworLy8gICAga2RXYXJuaW5n
KCkgPDwgIkhUTUxEb2N1bWVudDo6cHV0VmFsdWVQcm9wZXJ0eSB1bmhhbmRsZWQgdG9rZW4gIiA8
PCB0b2tlbiA8PCBlbmRsOwogICB9CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3Q6Om1hcmsoKQor
dm9pZCBKU1hNTEh0dHBSZXF1ZXN0OjptYXJrKCkKIHsKICAgRE9NT2JqZWN0OjptYXJrKCk7CiAK
KyAgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIG9uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVy
ID0gc3RhdGljX2Nhc3Q8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqPihtX2ltcGwtPmdldE9u
UmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyKCkuZ2V0KCkpOworICBKU1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lciogb25Mb2FkTGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxKU1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lcio+KG1faW1wbC0+Z2V0T25Mb2FkTGlzdGVuZXIoKS5nZXQoKSk7CisKICAgaWYgKG9u
UmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyKQogICAgIG9uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVy
LT5tYXJrKCk7CiAKQEAgLTI1NSw0OTggKzE2OCw3OCBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpt
YXJrKCkKIH0KIAogCi1YTUxIdHRwUmVxdWVzdDo6WE1MSHR0cFJlcXVlc3QoRXhlY1N0YXRlICpl
eGVjLCBET006OkRvY3VtZW50SW1wbCAqZCkKLSAgOiBxT2JqZWN0KG5ldyBYTUxIdHRwUmVxdWVz
dFFPYmplY3QodGhpcykpLAotICAgIGRvYyhkKSwKLSAgICBhc3luYyh0cnVlKSwKLSAgICBqb2Io
MCksCi0gICAgc3RhdGUoVW5pbml0aWFsaXplZCksCi0gICAgY3JlYXRlZERvY3VtZW50KGZhbHNl
KSwKLSAgICBhYm9ydGVkKGZhbHNlKQotewotICBzZXRQcm90b3R5cGUoWE1MSHR0cFJlcXVlc3RQ
cm90bzo6c2VsZihleGVjKSk7Ci19Ci0KLVhNTEh0dHBSZXF1ZXN0Ojp+WE1MSHR0cFJlcXVlc3Qo
KQotewotICAgIGRlbGV0ZSBxT2JqZWN0OwotfQotCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjpjaGFu
Z2VTdGF0ZShYTUxIdHRwUmVxdWVzdFN0YXRlIG5ld1N0YXRlKQotewotICBpZiAoc3RhdGUgIT0g
bmV3U3RhdGUpIHsKLSAgICBzdGF0ZSA9IG5ld1N0YXRlOwotICAgIAotICAgIGlmIChkb2MgJiYg
ZG9jLT5mcmFtZSgpICYmIG9uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyKSB7Ci0gICAgICBpbnQg
aWdub3JlRXhjZXB0aW9uOwotICAgICAgUmVmUHRyPEV2ZW50SW1wbD4gZXYgPSBkb2MtPmNyZWF0
ZUV2ZW50KCJIVE1MRXZlbnRzIiwgaWdub3JlRXhjZXB0aW9uKTsKLSAgICAgIGV2LT5pbml0RXZl
bnQocmVhZHlzdGF0ZWNoYW5nZUV2ZW50LCB0cnVlLCB0cnVlKTsKLSAgICAgIG9uUmVhZHlTdGF0
ZUNoYW5nZUxpc3RlbmVyLT5oYW5kbGVFdmVudEltcGwoZXYuZ2V0KCksIHRydWUpOwotICAgIH0K
LSAgICAKLSAgICBpZiAoZG9jICYmIGRvYy0+ZnJhbWUoKSAmJiBzdGF0ZSA9PSBDb21wbGV0ZWQg
JiYgb25Mb2FkTGlzdGVuZXIpIHsKLSAgICAgIGludCBpZ25vcmVFeGNlcHRpb247Ci0gICAgICBS
ZWZQdHI8RXZlbnRJbXBsPiBldiA9IGRvYy0+Y3JlYXRlRXZlbnQoIkhUTUxFdmVudHMiLCBpZ25v
cmVFeGNlcHRpb24pOwotICAgICAgZXYtPmluaXRFdmVudChsb2FkRXZlbnQsIHRydWUsIHRydWUp
OwotICAgICAgb25Mb2FkTGlzdGVuZXItPmhhbmRsZUV2ZW50SW1wbChldi5nZXQoKSwgdHJ1ZSk7
Ci0gICAgfQotICB9Ci19Ci0KLWJvb2wgWE1MSHR0cFJlcXVlc3Q6OnVybE1hdGNoZXNEb2N1bWVu
dERvbWFpbihjb25zdCBLVVJMJiBfdXJsKSBjb25zdAotewotICBLVVJMIGRvY3VtZW50VVJMKGRv
Yy0+VVJMKCkpOwotCi0gIC8vIGEgbG9jYWwgZmlsZSBjYW4gbG9hZCBhbnl0aGluZwotICBpZiAo
ZG9jdW1lbnRVUkwucHJvdG9jb2woKS5sb3dlcigpID09ICJmaWxlIikgewotICAgIHJldHVybiB0
cnVlOwotICB9Ci0KLSAgLy8gYnV0IGEgcmVtb3RlIGRvY3VtZW50IGNhbiBvbmx5IGxvYWQgZnJv
bSB0aGUgc2FtZSBwb3J0IG9uIHRoZSBzZXJ2ZXIKLSAgaWYgKGRvY3VtZW50VVJMLnByb3RvY29s
KCkubG93ZXIoKSA9PSBfdXJsLnByb3RvY29sKCkubG93ZXIoKSAmJgotICAgICAgZG9jdW1lbnRV
UkwuaG9zdCgpLmxvd2VyKCkgPT0gX3VybC5ob3N0KCkubG93ZXIoKSAmJgotICAgICAgZG9jdW1l
bnRVUkwucG9ydCgpID09IF91cmwucG9ydCgpKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQot
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgWE1MSHR0cFJlcXVlc3Q6Om9wZW4oY29uc3QgUVN0
cmluZyYgX21ldGhvZCwgY29uc3QgS1VSTCYgX3VybCwgYm9vbCBfYXN5bmMpCitKU1hNTEh0dHBS
ZXF1ZXN0OjpKU1hNTEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSAqZXhlYywgRG9jdW1lbnRJbXBsICpk
KQorICA6IG1faW1wbChuZXcgWE1MSHR0cFJlcXVlc3QoZCkpCiB7Ci0gIGFib3J0KCk7Ci0gIGFi
b3J0ZWQgPSBmYWxzZTsKLQotICAvLyBjbGVhciBzdHVmZiBmcm9tIHBvc3NpYmxlIHByZXZpb3Vz
IGxvYWQKLSAgcmVxdWVzdEhlYWRlcnMgPSBRU3RyaW5nKCk7Ci0gIHJlc3BvbnNlSGVhZGVycyA9
IFFTdHJpbmcoKTsKLSAgcmVzcG9uc2UgPSBRU3RyaW5nKCk7Ci0gIGNyZWF0ZWREb2N1bWVudCA9
IGZhbHNlOwotICByZXNwb25zZVhNTCA9IDA7Ci0KLSAgY2hhbmdlU3RhdGUoVW5pbml0aWFsaXpl
ZCk7Ci0KLSAgaWYgKGFib3J0ZWQpIHsKLSAgICByZXR1cm47Ci0gIH0KLQotICBpZiAoIXVybE1h
dGNoZXNEb2N1bWVudERvbWFpbihfdXJsKSkgewotICAgIHJldHVybjsKLSAgfQotCi0gIAotICBt
ZXRob2QgPSBfbWV0aG9kOwotICB1cmwgPSBfdXJsOwotICBhc3luYyA9IF9hc3luYzsKLQotICBj
aGFuZ2VTdGF0ZShMb2FkaW5nKTsKKyAgc2V0UHJvdG90eXBlKEpTWE1MSHR0cFJlcXVlc3RQcm90
bzo6c2VsZihleGVjKSk7CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmQoY29uc3QgRE9N
U3RyaW5nJiBfYm9keSkKK0pTWE1MSHR0cFJlcXVlc3Q6On5KU1hNTEh0dHBSZXF1ZXN0KCkKIHsK
LSAgaWYgKCFkb2MpCi0gICAgcmV0dXJuOwotCi0gIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBhYm9y
dCBpbnN0ZWFkIGlmIHdlIGFscmVhZHkgaGF2ZSBhIGpvYiBnb2luZz8KLSAgaWYgKGpvYikKLSAg
ICByZXR1cm47Ci0KLSAgYWJvcnRlZCA9IGZhbHNlOwotCi0gIGlmIChtZXRob2QubG93ZXIoKSA9
PSAicG9zdCIgJiYgKHVybC5wcm90b2NvbCgpLmxvd2VyKCkgPT0gImh0dHAiIHx8IHVybC5wcm90
b2NvbCgpLmxvd2VyKCkgPT0gImh0dHBzIikgKSB7Ci0gICAgICBRU3RyaW5nIGNvbnRlbnRUeXBl
ID0gZ2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIik7Ci0gICAgICBRU3RyaW5nIGNoYXJz
ZXQ7Ci0gICAgICBpZiAoY29udGVudFR5cGUuaXNFbXB0eSgpKQotICAgICAgICBzZXRSZXF1ZXN0
SGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veG1sIik7Ci0gICAgICBlbHNlCi0g
ICAgICAgIGNoYXJzZXQgPSBnZXRDaGFyc2V0KGNvbnRlbnRUeXBlKTsKLSAgICAgIAotICAgICAg
aWYgKGNoYXJzZXQuaXNFbXB0eSgpKQotICAgICAgICBjaGFyc2V0ID0gIlVURi04IjsKLSAgICAg
IAotICAgICAgUVRleHRDb2RlYyAqY29kZWMgPSBRVGV4dENvZGVjOjpjb2RlY0Zvck5hbWUoY2hh
cnNldC5sYXRpbjEoKSk7Ci0gICAgICBpZiAoIWNvZGVjKSAgIC8vIEZJWE1FOiByZXBvcnQgYW4g
ZXJyb3I/Ci0gICAgICAgIGNvZGVjID0gUVRleHRDb2RlYzo6Y29kZWNGb3JOYW1lKCJVVEYtOCIp
OwotCi0gICAgICBqb2IgPSBLSU86Omh0dHBfcG9zdCh1cmwsIGNvZGVjLT5mcm9tVW5pY29kZShf
Ym9keS5xc3RyaW5nKCkpLCBmYWxzZSk7Ci0gIH0KLSAgZWxzZQotICAgICBqb2IgPSBLSU86Omdl
dCggdXJsLCBmYWxzZSwgZmFsc2UgKTsKLSAgaWYgKHJlcXVlc3RIZWFkZXJzLmxlbmd0aCgpID4g
MCkKLSAgICBqb2ItPmFkZE1ldGFEYXRhKCJjdXN0b21IVFRQSGVhZGVyIiwgcmVxdWVzdEhlYWRl
cnMpOwotCi0gIGlmICghYXN5bmMpIHsKLSAgICBCeXRlQXJyYXkgZGF0YTsKLSAgICBLVVJMIGZp
bmFsVVJMOwotICAgIFFTdHJpbmcgaGVhZGVyczsKLQotICAgIHsgLy8gc2NvcGUKLSAgICAgICAg
Ly8gYXZvaWQgZGVhZGxvY2sgaW4gY2FzZSB0aGUgbG9hZGVyIHdhbnRzIHRvIHVzZSBKUyBvbiBh
IGJhY2tncm91bmQgdGhyZWFkCi0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BMb2Nr
czsKLQotICAgICAgICBkYXRhID0gS1dRU2VydmVTeW5jaHJvbm91c1JlcXVlc3Qoa2h0bWw6OkNh
Y2hlOjpsb2FkZXIoKSwgZG9jLT5kb2NMb2FkZXIoKSwgam9iLCBmaW5hbFVSTCwgaGVhZGVycyk7
Ci0gICAgfQotCi0gICAgam9iID0gMDsKLSAgICBwcm9jZXNzU3luY0xvYWRSZXN1bHRzKGRhdGEs
IGZpbmFsVVJMLCBoZWFkZXJzKTsKLSAgICAKLSAgICByZXR1cm47Ci0gIH0KLQotICB7Ci0gICAg
SlNMb2NrIGxvY2s7Ci0gICAgZ2NQcm90ZWN0KHRoaXMpOwotICB9Ci0gIAotICBxT2JqZWN0LT5j
b25uZWN0KCBqb2IsIFNJR05BTCggcmVzdWx0KCBLSU86OkpvYiogKSApLAotICAgICAgICAgICAg
ICAgICAgICBTTE9UKCBzbG90RmluaXNoZWQoIEtJTzo6Sm9iKiApICkgKTsKLSAgcU9iamVjdC0+
Y29ubmVjdCggam9iLCBTSUdOQUwoIGRhdGEoIEtJTzo6Sm9iKiwgY29uc3QgY2hhciosIGludCAp
ICksCi0gICAgICAgICAgICAgICAgICAgIFNMT1QoIHNsb3REYXRhKCBLSU86OkpvYiosIGNvbnN0
IGNoYXIqLCBpbnQgKSApICk7Ci0gIHFPYmplY3QtPmNvbm5lY3QoIGpvYiwgU0lHTkFMKHJlZGly
ZWN0aW9uKEtJTzo6Sm9iKiwgY29uc3QgS1VSTCYgKSApLAotICAgICAgICAgICAgICAgICAgICBT
TE9UKCBzbG90UmVkaXJlY3Rpb24oS0lPOjpKb2IqLCBjb25zdCBLVVJMJikgKSApOwotCi0gIGFk
ZFRvUmVxdWVzdHNCeURvY3VtZW50KCk7Ci0KLSAgS1dRU2VydmVSZXF1ZXN0KGtodG1sOjpDYWNo
ZTo6bG9hZGVyKCksIGRvYy0+ZG9jTG9hZGVyKCksIGpvYik7CiB9CiAKLXZvaWQgWE1MSHR0cFJl
cXVlc3Q6OmFib3J0KCkKK0pTVmFsdWUgKkpTWE1MSHR0cFJlcXVlc3RQcm90b0Z1bmM6OmNhbGxB
c0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKnRoaXNPYmosIGNvbnN0IExpc3Qg
JmFyZ3MpCiB7Ci0gIGJvb2wgaGFkSm9iID0gam9iOwotCi0gIGlmIChoYWRKb2IpIHsKLSAgICBy
ZW1vdmVGcm9tUmVxdWVzdHNCeURvY3VtZW50KCk7Ci0gICAgam9iLT5raWxsKCk7Ci0gICAgam9i
ID0gMDsKLSAgfQotICBkZWNvZGVyID0gMDsKLSAgYWJvcnRlZCA9IHRydWU7Ci0KLSAgaWYgKGhh
ZEpvYikgewotICAgIEpTTG9jayBsb2NrOwotICAgIGdjVW5wcm90ZWN0KHRoaXMpOwotICB9Ci19
Ci0KLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXIoY29uc3QgUVN0cmluZyYg
bmFtZSwgY29uc3QgUVN0cmluZyAmdmFsdWUpCi17Ci0gIGlmIChyZXF1ZXN0SGVhZGVycy5sZW5n
dGgoKSA+IDApIHsKLSAgICByZXF1ZXN0SGVhZGVycyArPSAiXHJcbiI7Ci0gIH0KLSAgcmVxdWVz
dEhlYWRlcnMgKz0gbmFtZTsKLSAgcmVxdWVzdEhlYWRlcnMgKz0gIjogIjsKLSAgcmVxdWVzdEhl
YWRlcnMgKz0gdmFsdWU7Ci19Ci0KLVFTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldFJlcXVlc3RI
ZWFkZXIoY29uc3QgUVN0cmluZyYgbmFtZSkgY29uc3QKLXsKLSAgcmV0dXJuIGdldFNwZWNpZmlj
SGVhZGVyKHJlcXVlc3RIZWFkZXJzLCBuYW1lKTsKLX0KLQotSlNWYWx1ZSAqWE1MSHR0cFJlcXVl
c3Q6OmdldEFsbFJlc3BvbnNlSGVhZGVycygpIGNvbnN0Ci17Ci0gIGlmIChyZXNwb25zZUhlYWRl
cnMuaXNFbXB0eSgpKSB7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gIH0KLQotICBpbnQg
ZW5kT2ZMaW5lID0gcmVzcG9uc2VIZWFkZXJzLmZpbmQoIlxuIik7Ci0KLSAgaWYgKGVuZE9mTGlu
ZSA9PSAtMSkgewotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICB9Ci0KLSAgcmV0dXJuIGpz
U3RyaW5nKHJlc3BvbnNlSGVhZGVycy5taWQoZW5kT2ZMaW5lICsgMSkgKyAiXG4iKTsKLX0KLQot
UVN0cmluZyBYTUxIdHRwUmVxdWVzdDo6Z2V0UmVzcG9uc2VIZWFkZXIoY29uc3QgUVN0cmluZyYg
bmFtZSkgY29uc3QKLXsKLSAgcmV0dXJuIGdldFNwZWNpZmljSGVhZGVyKHJlc3BvbnNlSGVhZGVy
cywgbmFtZSk7Ci19Ci0KLVFTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldFNwZWNpZmljSGVhZGVy
KGNvbnN0IFFTdHJpbmcmIGhlYWRlcnMsIGNvbnN0IFFTdHJpbmcmIG5hbWUpCi17Ci0gIGlmICho
ZWFkZXJzLmlzRW1wdHkoKSkKLSAgICByZXR1cm4gUVN0cmluZygpOwotCi0gIFFSZWdFeHAgaGVh
ZGVyTGluZVBhdHRlcm4obmFtZSArICI6IiwgZmFsc2UpOwotCi0gIGludCBtYXRjaExlbmd0aDsK
LSAgaW50IGhlYWRlckxpbmVQb3MgPSBoZWFkZXJMaW5lUGF0dGVybi5tYXRjaChoZWFkZXJzLCAw
LCAmbWF0Y2hMZW5ndGgpOwotICB3aGlsZSAoaGVhZGVyTGluZVBvcyAhPSAtMSkgewotICAgIGlm
IChoZWFkZXJMaW5lUG9zID09IDAgfHwgaGVhZGVyc1toZWFkZXJMaW5lUG9zLTFdID09ICdcbicp
IHsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBoZWFkZXJMaW5lUG9zID0gaGVhZGVy
TGluZVBhdHRlcm4ubWF0Y2goaGVhZGVycywgaGVhZGVyTGluZVBvcyArIDEsICZtYXRjaExlbmd0
aCk7Ci0gIH0KLQotICBpZiAoaGVhZGVyTGluZVBvcyA9PSAtMSkKLSAgICByZXR1cm4gUVN0cmlu
ZygpOwotICAgIAotICBpbnQgZW5kT2ZMaW5lID0gaGVhZGVycy5maW5kKCJcbiIsIGhlYWRlckxp
bmVQb3MgKyBtYXRjaExlbmd0aCk7Ci0gIAotICByZXR1cm4gaGVhZGVycy5taWQoaGVhZGVyTGlu
ZVBvcyArIG1hdGNoTGVuZ3RoLCBlbmRPZkxpbmUgLSAoaGVhZGVyTGluZVBvcyArIG1hdGNoTGVu
Z3RoKSkuc3RyaXBXaGl0ZVNwYWNlKCk7Ci19Ci0KLWJvb2wgWE1MSHR0cFJlcXVlc3Q6OnJlc3Bv
bnNlSXNYTUwoKSBjb25zdAotewotICAgIFFTdHJpbmcgbWltZVR5cGUgPSBnZXRNSU1FVHlwZShN
SU1FVHlwZU92ZXJyaWRlKTsKLSAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQotICAgICAgICBt
aW1lVHlwZSA9IGdldE1JTUVUeXBlKGdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKSk7
Ci0gICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkKLSAgICAgIG1pbWVUeXBlID0gInRleHQveG1s
IjsKLSAgICAKLSAgICByZXR1cm4gRE9NSW1wbGVtZW50YXRpb25JbXBsOjppc1hNTE1JTUVUeXBl
KG1pbWVUeXBlKTsKLX0KLQotSlNWYWx1ZSAqWE1MSHR0cFJlcXVlc3Q6OmdldFN0YXR1cygpIGNv
bnN0Ci17Ci0gIGlmIChyZXNwb25zZUhlYWRlcnMuaXNFbXB0eSgpKSB7Ci0gICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gIH0KLSAgCi0gIGludCBlbmRPZkxpbmUgPSByZXNwb25zZUhlYWRlcnMu
ZmluZCgiXG4iKTsKLSAgUVN0cmluZyBmaXJzdExpbmUgPSBlbmRPZkxpbmUgPT0gLTEgPyByZXNw
b25zZUhlYWRlcnMgOiByZXNwb25zZUhlYWRlcnMubGVmdChlbmRPZkxpbmUpOwotICBpbnQgY29k
ZVN0YXJ0ID0gZmlyc3RMaW5lLmZpbmQoIiAiKTsKLSAgaW50IGNvZGVFbmQgPSBmaXJzdExpbmUu
ZmluZCgiICIsIGNvZGVTdGFydCArIDEpOwotICAKLSAgaWYgKGNvZGVTdGFydCA9PSAtMSB8fCBj
b2RlRW5kID09IC0xKSB7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gIH0KLSAgCi0gIFFT
dHJpbmcgbnVtYmVyID0gZmlyc3RMaW5lLm1pZChjb2RlU3RhcnQgKyAxLCBjb2RlRW5kIC0gKGNv
ZGVTdGFydCArIDEpKTsKLSAgCi0gIGJvb2wgb2sgPSBmYWxzZTsKLSAgaW50IGNvZGUgPSBudW1i
ZXIudG9JbnQoJm9rKTsKLSAgaWYgKCFvaykgewotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICB9Ci0KLSAgcmV0dXJuIGpzTnVtYmVyKGNvZGUpOwotfQotCi1KU1ZhbHVlICpYTUxIdHRwUmVx
dWVzdDo6Z2V0U3RhdHVzVGV4dCgpIGNvbnN0Ci17Ci0gIGlmIChyZXNwb25zZUhlYWRlcnMuaXNF
bXB0eSgpKSB7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gIH0KLSAgCi0gIGludCBlbmRP
ZkxpbmUgPSByZXNwb25zZUhlYWRlcnMuZmluZCgiXG4iKTsKLSAgUVN0cmluZyBmaXJzdExpbmUg
PSBlbmRPZkxpbmUgPT0gLTEgPyByZXNwb25zZUhlYWRlcnMgOiByZXNwb25zZUhlYWRlcnMubGVm
dChlbmRPZkxpbmUpOwotICBpbnQgY29kZVN0YXJ0ID0gZmlyc3RMaW5lLmZpbmQoIiAiKTsKLSAg
aW50IGNvZGVFbmQgPSBmaXJzdExpbmUuZmluZCgiICIsIGNvZGVTdGFydCArIDEpOwotCi0gIGlm
IChjb2RlU3RhcnQgPT0gLTEgfHwgY29kZUVuZCA9PSAtMSkgewotICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICB9Ci0gIAotICBRU3RyaW5nIHN0YXR1c1RleHQgPSBmaXJzdExpbmUubWlkKGNv
ZGVFbmQgKyAxLCBlbmRPZkxpbmUgLSAoY29kZUVuZCArIDEpKS5zdHJpcFdoaXRlU3BhY2UoKTsK
LSAgCi0gIHJldHVybiBqc1N0cmluZyhzdGF0dXNUZXh0KTsKLX0KLQotdm9pZCBYTUxIdHRwUmVx
dWVzdDo6cHJvY2Vzc1N5bmNMb2FkUmVzdWx0cyhjb25zdCBCeXRlQXJyYXkgJmRhdGEsIGNvbnN0
IEtVUkwgJmZpbmFsVVJMLCBjb25zdCBRU3RyaW5nICZoZWFkZXJzKQotewotICBpZiAoIXVybE1h
dGNoZXNEb2N1bWVudERvbWFpbihmaW5hbFVSTCkpIHsKLSAgICBhYm9ydCgpOwotICAgIHJldHVy
bjsKLSAgfQotICAKLSAgcmVzcG9uc2VIZWFkZXJzID0gaGVhZGVyczsKLSAgY2hhbmdlU3RhdGUo
TG9hZGVkKTsKLSAgaWYgKGFib3J0ZWQpIHsKLSAgICByZXR1cm47Ci0gIH0KLSAgCi0gIGNvbnN0
IGNoYXIgKmJ5dGVzID0gKGNvbnN0IGNoYXIgKilkYXRhLmRhdGEoKTsKLSAgaW50IGxlbiA9IChp
bnQpZGF0YS5zaXplKCk7Ci0KLSAgc2xvdERhdGEoMCwgYnl0ZXMsIGxlbik7Ci0KLSAgaWYgKGFi
b3J0ZWQpIHsKLSAgICByZXR1cm47Ci0gIH0KLQotICBzbG90RmluaXNoZWQoMCk7Ci19Ci0KLXZv
aWQgWE1MSHR0cFJlcXVlc3Q6OnNsb3RGaW5pc2hlZChLSU86OkpvYiAqKQotewotICBpZiAocmVz
cG9uc2VIZWFkZXJzLmlzRW1wdHkoKSAmJiBqb2IpCi0gICAgcmVzcG9uc2VIZWFkZXJzID0gam9i
LT5xdWVyeU1ldGFEYXRhKCJIVFRQLUhlYWRlcnMiKTsKLQotICBpZiAoc3RhdGUgPCBMb2FkZWQp
Ci0gICAgY2hhbmdlU3RhdGUoTG9hZGVkKTsKLQotICBpZiAoZGVjb2RlcikKLSAgICByZXNwb25z
ZSArPSBkZWNvZGVyLT5mbHVzaCgpOwotCi0gIHJlbW92ZUZyb21SZXF1ZXN0c0J5RG9jdW1lbnQo
KTsKLSAgam9iID0gMDsKLQotICBjaGFuZ2VTdGF0ZShDb21wbGV0ZWQpOwotICBkZWNvZGVyID0g
MDsKLQotICBKU0xvY2sgbG9jazsKLSAgZ2NVbnByb3RlY3QodGhpcyk7Ci19Ci0KLXZvaWQgWE1M
SHR0cFJlcXVlc3Q6OnNsb3RSZWRpcmVjdGlvbihLSU86OkpvYiosIGNvbnN0IEtVUkwmIHVybCkK
LXsKLSAgaWYgKCF1cmxNYXRjaGVzRG9jdW1lbnREb21haW4odXJsKSkgewotICAgIGFib3J0KCk7
Ci0gIH0KLX0KLQotdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2xvdERhdGEoS0lPOjpKb2IqLCBjb25z
dCBjaGFyICpkYXRhLCBpbnQgbGVuKQotewotICBpZiAocmVzcG9uc2VIZWFkZXJzLmlzRW1wdHko
KSAmJiBqb2IpCi0gICAgcmVzcG9uc2VIZWFkZXJzID0gam9iLT5xdWVyeU1ldGFEYXRhKCJIVFRQ
LUhlYWRlcnMiKTsKLQotICBpZiAoc3RhdGUgPCBMb2FkZWQpCi0gICAgY2hhbmdlU3RhdGUoTG9h
ZGVkKTsKLSAgCi0gIGlmICghZGVjb2RlcikgewotICAgIGVuY29kaW5nID0gZ2V0Q2hhcnNldChN
SU1FVHlwZU92ZXJyaWRlKTsKLSAgICBpZiAoZW5jb2RpbmcuaXNFbXB0eSgpKQotICAgICAgZW5j
b2RpbmcgPSBnZXRDaGFyc2V0KGdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKSk7Ci0g
ICAgaWYgKGVuY29kaW5nLmlzRW1wdHkoKSAmJiBqb2IpCi0gICAgICBlbmNvZGluZyA9IGpvYi0+
cXVlcnlNZXRhRGF0YSgiY2hhcnNldCIpOwotICAgIAotICAgIGRlY29kZXIgPSBuZXcgRGVjb2Rl
cjsKLSAgICBpZiAoIWVuY29kaW5nLmlzRW1wdHkoKSkKLSAgICAgIGRlY29kZXItPnNldEVuY29k
aW5nKGVuY29kaW5nLmxhdGluMSgpLCBEZWNvZGVyOjpFbmNvZGluZ0Zyb21IVFRQSGVhZGVyKTsK
LSAgICBlbHNlIHsKLSAgICAgIC8vIG9ubHkgYWxsb3cgRGVjb2RlciB0byBsb29rIGluc2lkZSB0
aGUgcmVzcG9uc2UgaWYgaXQncyBYTUwKLSAgICAgIGRlY29kZXItPnNldEVuY29kaW5nKCJVVEYt
OCIsIHJlc3BvbnNlSXNYTUwoKSA/IERlY29kZXI6OkRlZmF1bHRFbmNvZGluZyA6IERlY29kZXI6
OkVuY29kaW5nRnJvbUhUVFBIZWFkZXIpOwotICAgIH0KLSAgfQotICBpZiAobGVuID09IDApCi0g
ICAgcmV0dXJuOwotCi0gIGlmIChsZW4gPT0gLTEpCi0gICAgbGVuID0gc3RybGVuKGRhdGEpOwot
Ci0gIFFTdHJpbmcgZGVjb2RlZCA9IGRlY29kZXItPmRlY29kZShkYXRhLCBsZW4pOwotCi0gIHJl
c3BvbnNlICs9IGRlY29kZWQ7Ci0KLSAgaWYgKCFhYm9ydGVkKSB7Ci0gICAgY2hhbmdlU3RhdGUo
SW50ZXJhY3RpdmUpOwotICB9Ci19Ci0KLVhNTEh0dHBSZXF1ZXN0OjpSZXF1ZXN0c01hcCYgWE1M
SHR0cFJlcXVlc3Q6OnJlcXVlc3RzQnlEb2N1bWVudCgpCi17Ci0gICAgc3RhdGljIFJlcXVlc3Rz
TWFwIG1hcDsKLSAgICByZXR1cm4gbWFwOwotfQotCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjphZGRU
b1JlcXVlc3RzQnlEb2N1bWVudCgpCi17Ci0gIGFzc2VydChkb2MpOwotCi0gIFJlcXVlc3RzU2V0
KiByZXF1ZXN0cyA9IHJlcXVlc3RzQnlEb2N1bWVudCgpLmdldChkb2MpOwotICBpZiAoIXJlcXVl
c3RzKSB7Ci0gICAgcmVxdWVzdHMgPSBuZXcgUmVxdWVzdHNTZXQ7Ci0gICAgcmVxdWVzdHNCeURv
Y3VtZW50KCkuc2V0KGRvYywgcmVxdWVzdHMpOwotICB9Ci0KLSAgYXNzZXJ0KCFyZXF1ZXN0cy0+
Y29udGFpbnModGhpcykpOwotICByZXF1ZXN0cy0+aW5zZXJ0KHRoaXMpOwotfQotCi12b2lkIFhN
TEh0dHBSZXF1ZXN0OjpyZW1vdmVGcm9tUmVxdWVzdHNCeURvY3VtZW50KCkKLXsKLSAgYXNzZXJ0
KGRvYyk7Ci0KLSAgUmVxdWVzdHNTZXQqIHJlcXVlc3RzID0gcmVxdWVzdHNCeURvY3VtZW50KCku
Z2V0KGRvYyk7Ci0KLSAgLy8gU2luY2Ugc3luY2hyb25vdXMgbG9hZHMgYXJlIG5vdCBhZGRlZCB0
byByZXF1ZXN0c0J5RG9jdW1lbnQoKSwgd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZm91bmQgdGhl
IHJlcXVlc3QuCi0gIGlmICghcmVxdWVzdHMgfHwgIXJlcXVlc3RzLT5jb250YWlucyh0aGlzKSkK
LSAgICByZXR1cm47Ci0KLSAgcmVxdWVzdHMtPnJlbW92ZSh0aGlzKTsKLQotICBpZiAocmVxdWVz
dHMtPmlzRW1wdHkoKSkgewotICAgIHJlcXVlc3RzQnlEb2N1bWVudCgpLnJlbW92ZShkb2MpOwot
ICAgIGRlbGV0ZSByZXF1ZXN0czsKLSAgfQotfQotCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjpjYW5j
ZWxSZXF1ZXN0cyhET006OkRvY3VtZW50SW1wbCogZCkKLXsKLSAgd2hpbGUgKFJlcXVlc3RzU2V0
KiByZXF1ZXN0cyA9IHJlcXVlc3RzQnlEb2N1bWVudCgpLmdldChkKSkKLSAgICAoKnJlcXVlc3Rz
LT5iZWdpbigpKS0+YWJvcnQoKTsKLX0KLQotSlNWYWx1ZSAqWE1MSHR0cFJlcXVlc3RQcm90b0Z1
bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKnRoaXNPYmosIGNv
bnN0IExpc3QgJmFyZ3MpCi17Ci0gIGlmICghdGhpc09iai0+aW5oZXJpdHMoJlhNTEh0dHBSZXF1
ZXN0OjppbmZvKSkKKyAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmSlNYTUxIdHRwUmVxdWVzdDo6
aW5mbykpCiAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAotICBYTUxI
dHRwUmVxdWVzdCAqcmVxdWVzdCA9IHN0YXRpY19jYXN0PFhNTEh0dHBSZXF1ZXN0ICo+KHRoaXNP
YmopOworICBKU1hNTEh0dHBSZXF1ZXN0ICpyZXF1ZXN0ID0gc3RhdGljX2Nhc3Q8SlNYTUxIdHRw
UmVxdWVzdCAqPih0aGlzT2JqKTsKIAogICBzd2l0Y2ggKGlkKSB7Ci0gIGNhc2UgWE1MSHR0cFJl
cXVlc3Q6OkFib3J0OiB7Ci0gICAgcmVxdWVzdC0+YWJvcnQoKTsKKyAgY2FzZSBKU1hNTEh0dHBS
ZXF1ZXN0OjpBYm9ydDogeworICAgIHJlcXVlc3QtPm1faW1wbC0+YWJvcnQoKTsKICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgfQotICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpHZXRBbGxSZXNw
b25zZUhlYWRlcnM6IHsKKyAgY2FzZSBKU1hNTEh0dHBSZXF1ZXN0OjpHZXRBbGxSZXNwb25zZUhl
YWRlcnM6IHsKICAgICBpZiAoYXJncy5zaXplKCkgIT0gMCkgewogICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgfQotCi0gICAgcmV0dXJuIHJlcXVlc3QtPmdldEFsbFJlc3BvbnNlSGVh
ZGVycygpOworICAgIAorICAgIHJldHVybiBqc1N0cmluZ09yVW5kZWZpbmVkKHJlcXVlc3QtPm1f
aW1wbC0+Z2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpOwogICB9Ci0gIGNhc2UgWE1MSHR0cFJlcXVl
c3Q6OkdldFJlc3BvbnNlSGVhZGVyOiB7CisgIGNhc2UgSlNYTUxIdHRwUmVxdWVzdDo6R2V0UmVz
cG9uc2VIZWFkZXI6IHsKICAgICBpZiAoYXJncy5zaXplKCkgIT0gMSkgewogICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgfQogICAgIAotICAgIFFTdHJpbmcgaGVhZGVyID0gcmVxdWVz
dC0+Z2V0UmVzcG9uc2VIZWFkZXIoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpKTsK
KyAgICBET01TdHJpbmcgaGVhZGVyID0gcmVxdWVzdC0+bV9pbXBsLT5nZXRSZXNwb25zZUhlYWRl
cihhcmdzWzBdLT50b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKSk7CiAKICAgICBpZiAoaGVhZGVy
LmlzTnVsbCgpKQogICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICByZXR1cm4ganNT
dHJpbmcoaGVhZGVyKTsKICAgfQotICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpPcGVuOgorICBjYXNl
IEpTWE1MSHR0cFJlcXVlc3Q6Ok9wZW46CiAgICAgewogICAgICAgaWYgKGFyZ3Muc2l6ZSgpIDwg
MiB8fCBhcmdzLnNpemUoKSA+IDUpIHsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgICB9CiAgICAgCi0gICAgICBRU3RyaW5nIG1ldGhvZCA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4
ZWMpLnFzdHJpbmcoKTsKLSAgICAgIEtVUkwgdXJsID0gS1VSTChXaW5kb3c6OnJldHJpZXZlQWN0
aXZlKGV4ZWMpLT5mcmFtZSgpLT54bWxEb2NJbXBsKCktPmNvbXBsZXRlVVJMKGFyZ3NbMV0tPnRv
U3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSkpOworICAgICAgRE9NU3RyaW5nIG1ldGhvZCA9IGFyZ3Nb
MF0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpOworICAgICAgRE9NU3RyaW5nIHVybCA9IGFy
Z3NbMV0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpOwogCiAgICAgICBib29sIGFzeW5jID0g
dHJ1ZTsKLSAgICAgIGlmIChhcmdzLnNpemUoKSA+PSAzKSB7CisgICAgICBpZiAoYXJncy5zaXpl
KCkgPj0gMykKICAgICAgICAgYXN5bmMgPSBhcmdzWzJdLT50b0Jvb2xlYW4oZXhlYyk7Ci0gICAg
ICB9CiAgICAgCi0gICAgICBpZiAoYXJncy5zaXplKCkgPj0gNCkgewotICAgICAgICB1cmwuc2V0
VXNlcihhcmdzWzNdLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkpOwotICAgICAgfQorICAgICAg
RE9NU3RyaW5nIHVzZXI7CisgICAgICBpZiAoYXJncy5zaXplKCkgPj0gNCkKKyAgICAgICAgdXNl
ciA9IGFyZ3NbM10tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpOwogICAgICAgCi0gICAgICBp
ZiAoYXJncy5zaXplKCkgPj0gNSkgewotICAgICAgICB1cmwuc2V0UGFzcyhhcmdzWzRdLT50b1N0
cmluZyhleGVjKS5xc3RyaW5nKCkpOwotICAgICAgfQorICAgICAgRE9NU3RyaW5nIHBhc3N3b3Jk
OworICAgICAgaWYgKGFyZ3Muc2l6ZSgpID49IDUpCisgICAgICAgIHBhc3N3b3JkID0gYXJnc1s0
XS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCk7CiAKLSAgICAgIHJlcXVlc3QtPm9wZW4obWV0
aG9kLCB1cmwsIGFzeW5jKTsKKyAgICAgIHJlcXVlc3QtPm1faW1wbC0+b3BlbihtZXRob2QsIHVy
bCwgYXN5bmMsIHVzZXIsIHBhc3N3b3JkKTsKIAogICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgfQotICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpTZW5kOgorICBjYXNlIEpTWE1MSHR0cFJl
cXVlc3Q6OlNlbmQ6CiAgICAgewogICAgICAgaWYgKGFyZ3Muc2l6ZSgpID4gMSkgewogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgIH0KIAotICAgICAgaWYgKHJlcXVlc3QtPnN0
YXRlICE9IExvYWRpbmcpIHsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICB9
Ci0KICAgICAgIERPTVN0cmluZyBib2R5OwogCiAgICAgICBpZiAoYXJncy5zaXplKCkgPj0gMSkg
ewpAQCAtNzYwLDI0ICsyNTMsMjQgQEAgSlNWYWx1ZSAqWE1MSHR0cFJlcXVlc3RQcm90b0Z1bmM6
OmNhbGxBcwogICAgICAgICB9CiAgICAgICB9CiAKLSAgICAgIHJlcXVlc3QtPnNlbmQoYm9keSk7
CisgICAgICByZXF1ZXN0LT5tX2ltcGwtPnNlbmQoYm9keSk7CiAKICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIH0KLSAgY2FzZSBYTUxIdHRwUmVxdWVzdDo6U2V0UmVxdWVzdEhlYWRl
cjogeworICBjYXNlIEpTWE1MSHR0cFJlcXVlc3Q6OlNldFJlcXVlc3RIZWFkZXI6IHsKICAgICBp
ZiAoYXJncy5zaXplKCkgIT0gMikgewogICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
fQogICAgIAotICAgIHJlcXVlc3QtPnNldFJlcXVlc3RIZWFkZXIoYXJnc1swXS0+dG9TdHJpbmco
ZXhlYykucXN0cmluZygpLCBhcmdzWzFdLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkpOworICAg
IHJlcXVlc3QtPm1faW1wbC0+c2V0UmVxdWVzdEhlYWRlcihhcmdzWzBdLT50b1N0cmluZyhleGVj
KS5kb21TdHJpbmcoKSwgYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCkpOwogICAg
IAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICB9Ci0gIGNhc2UgWE1MSHR0cFJlcXVlc3Q6
Ok92ZXJyaWRlTUlNRVR5cGU6IHsKKyAgY2FzZSBKU1hNTEh0dHBSZXF1ZXN0OjpPdmVycmlkZU1J
TUVUeXBlOiB7CiAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDEpIHsKICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIH0KLSAgICByZXF1ZXN0LT5NSU1FVHlwZU92ZXJyaWRlID0gYXJnc1sw
XS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpOworICAgIHJlcXVlc3QtPm1faW1wbC0+b3ZlcnJp
ZGVNSU1FVHlwZShhcmdzWzBdLT50b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKSk7CiAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgIH0KICAgfQpJbmRleDoga2h0bWwvZWNtYS94bWxodHRwcmVx
dWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdC5jcHAJKHJl
dmlzaW9uIDEyMjM5KQorKysga2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBL
REUgbGlicmFyaWVzCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMu
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNv
bT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBA
bnlwb3AuY29tPgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjEsMjAgKzIxLDE5IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAieG1saHR0cHJlcXVlc3QuaCIKIAotI2luY2x1ZGUg
Imtqc193aW5kb3cuaCIKLSNpbmNsdWRlICJranNfZXZlbnRzLmgiCisjaW5jbHVkZSAia2pzL3By
b3RlY3QuaCIKIAogI2luY2x1ZGUgImRvbS9kb21fZXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiZG9t
L2RvbV9zdHJpbmcuaCIKKyNpbmNsdWRlICJkb20vZG9tMl9ldmVudHMuaCIKICNpbmNsdWRlICJD
YWNoZS5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKKyNpbmNsdWRlICJt
aXNjL2Zvcm1kYXRhLmgiCiAjaW5jbHVkZSAieG1sL2RvbTJfZXZlbnRzaW1wbC5oIgogI2luY2x1
ZGUgInhtbC9FdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRpb25JbXBsLmgi
Ci0KICNpbmNsdWRlICJGcmFtZS5oIgogCi0jaW5jbHVkZSA8a2RlYnVnLmg+CiAjaW5jbHVkZSA8
a2lvL2pvYi5oPgogI2luY2x1ZGUgPHFvYmplY3QuaD4KICNpbmNsdWRlIDxxcmVnZXhwLmg+CkBA
IC00MiwxMiArNDEsNyBAQAogCiAjaW5jbHVkZSAiS1dRTG9hZGVyLmgiCiAKLSNpbmNsdWRlICJ4
bWxodHRwcmVxdWVzdC5sdXQuaCIKLQotdXNpbmcgbmFtZXNwYWNlIERPTTsKLXVzaW5nIG5hbWVz
cGFjZSBET006OkV2ZW50TmFtZXM7Ci0KLXVzaW5nIGtodG1sOjpEZWNvZGVyOwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU6OkV2ZW50TmFtZXM7CiAKIHN0YXRpYyBpbmxpbmUgUVN0cmluZyBnZXRN
SU1FVHlwZShjb25zdCBRU3RyaW5nJiBjb250ZW50VHlwZVN0cmluZykKIHsKQEAgLTkzLDI0ICs4
Nyw3IEBAIHN0YXRpYyBRU3RyaW5nIGdldENoYXJzZXQoY29uc3QgUVN0cmluZyYKICAgICByZXR1
cm4gUVN0cmluZygpOwogfQogCi1uYW1lc3BhY2UgS0pTIHsKLQotLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLyBYTUxIdHRwUmVxdWVzdCBPYmplY3QgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLS8q
IFNvdXJjZSBmb3IgWE1MSHR0cFJlcXVlc3RQcm90b1RhYmxlLgotQGJlZ2luIFhNTEh0dHBSZXF1
ZXN0UHJvdG9UYWJsZSA3Ci0gIGFib3J0ICAgICAgICAgICAgICAgICBYTUxIdHRwUmVxdWVzdDo6
QWJvcnQgICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAwCi0gIGdldEFsbFJl
c3BvbnNlSGVhZGVycyBYTUxIdHRwUmVxdWVzdDo6R2V0QWxsUmVzcG9uc2VIZWFkZXJzICAgRG9u
dERlbGV0ZXxGdW5jdGlvbiAwCi0gIGdldFJlc3BvbnNlSGVhZGVyICAgICBYTUxIdHRwUmVxdWVz
dDo6R2V0UmVzcG9uc2VIZWFkZXIgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAxCi0gIG9wZW4g
ICAgICAgICAgICAgICAgICBYTUxIdHRwUmVxdWVzdDo6T3BlbiAgICAgICAgICAgICAgICAgICAg
RG9udERlbGV0ZXxGdW5jdGlvbiA1Ci0gIG92ZXJyaWRlTWltZVR5cGUgICAgICBYTUxIdHRwUmVx
dWVzdDo6T3ZlcnJpZGVNSU1FVHlwZSAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAxCi0gIHNl
bmQgICAgICAgICAgICAgICAgICBYTUxIdHRwUmVxdWVzdDo6U2VuZCAgICAgICAgICAgICAgICAg
ICAgRG9udERlbGV0ZXxGdW5jdGlvbiAxCi0gIHNldFJlcXVlc3RIZWFkZXIgICAgICBYTUxIdHRw
UmVxdWVzdDo6U2V0UmVxdWVzdEhlYWRlciAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAyCi1A
ZW5kCi0qLwotS0pTX0RFRklORV9QUk9UT1RZUEUoWE1MSHR0cFJlcXVlc3RQcm90bykKLUtKU19J
TVBMRU1FTlRfUFJPVE9GVU5DKFhNTEh0dHBSZXF1ZXN0UHJvdG9GdW5jKQotS0pTX0lNUExFTUVO
VF9QUk9UT1RZUEUoIlhNTEh0dHBSZXF1ZXN0IixYTUxIdHRwUmVxdWVzdFByb3RvLFhNTEh0dHBS
ZXF1ZXN0UHJvdG9GdW5jKQorbmFtZXNwYWNlIFdlYkNvcmUgewogCiBYTUxIdHRwUmVxdWVzdFFP
YmplY3Q6OlhNTEh0dHBSZXF1ZXN0UU9iamVjdChYTUxIdHRwUmVxdWVzdCAqX2pzT2JqZWN0KSAK
IHsKQEAgLTEzMiw1NiArMTA5LDIwIEBAIHZvaWQgWE1MSHR0cFJlcXVlc3RRT2JqZWN0OjpzbG90
UmVkaXJlY3QKICAganNPYmplY3QtPnNsb3RSZWRpcmVjdGlvbiggam9iLCB1cmwgKTsgCiB9CiAK
LVhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXA6OlhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJ
bXAoRXhlY1N0YXRlICpleGVjLCBET006OkRvY3VtZW50SW1wbCAqZCkKLSAgICA6IGRvYyhkKQor
WE1MSHR0cFJlcXVlc3RTdGF0ZSBYTUxIdHRwUmVxdWVzdDo6Z2V0UmVhZHlTdGF0ZSgpIGNvbnN0
CiB7Ci0gICAgcHV0RGlyZWN0KHByb3RvdHlwZVByb3BlcnR5TmFtZSwgWE1MSHR0cFJlcXVlc3RQ
cm90bzo6c2VsZihleGVjKSwgRG9udEVudW18RG9udERlbGV0ZXxSZWFkT25seSk7CisgICAgcmV0
dXJuIHN0YXRlOwogfQogCi1YTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wOjp+WE1MSHR0cFJl
cXVlc3RDb25zdHJ1Y3RvckltcCgpCitET01TdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldFJlc3Bv
bnNlVGV4dCgpIGNvbnN0CiB7CisgICAgcmV0dXJuIHJlc3BvbnNlOwogfQogCi1ib29sIFhNTEh0
dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXA6OmltcGxlbWVudHNDb25zdHJ1Y3QoKSBjb25zdAorUGFz
c1JlZlB0cjxEb2N1bWVudEltcGw+IFhNTEh0dHBSZXF1ZXN0OjpnZXRSZXNwb25zZVhNTCgpIGNv
bnN0CiB7Ci0gIHJldHVybiB0cnVlOwotfQotCi1KU09iamVjdCAqWE1MSHR0cFJlcXVlc3RDb25z
dHJ1Y3RvckltcDo6Y29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmKQotewot
ICByZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0KGV4ZWMsIGRvYy5nZXQoKSk7Ci19Ci0KLWNvbnN0
IENsYXNzSW5mbyBYTUxIdHRwUmVxdWVzdDo6aW5mbyA9IHsgIlhNTEh0dHBSZXF1ZXN0IiwgMCwg
JlhNTEh0dHBSZXF1ZXN0VGFibGUsIDAgfTsKLQotLyogU291cmNlIGZvciBYTUxIdHRwUmVxdWVz
dFRhYmxlLgotQGJlZ2luIFhNTEh0dHBSZXF1ZXN0VGFibGUgNwotICByZWFkeVN0YXRlICAgICAg
ICAgICAgWE1MSHR0cFJlcXVlc3Q6OlJlYWR5U3RhdGUgICAgICAgICAgICAgIERvbnREZWxldGV8
UmVhZE9ubHkKLSAgcmVzcG9uc2VUZXh0ICAgICAgICAgIFhNTEh0dHBSZXF1ZXN0OjpSZXNwb25z
ZVRleHQgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHJlc3BvbnNlWE1MICAgICAg
ICAgICBYTUxIdHRwUmVxdWVzdDo6UmVzcG9uc2VYTUwgICAgICAgICAgICAgRG9udERlbGV0ZXxS
ZWFkT25seQotICBzdGF0dXMgICAgICAgICAgICAgICAgWE1MSHR0cFJlcXVlc3Q6OlN0YXR1cyAg
ICAgICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgc3RhdHVzVGV4dCAgICAgICAg
ICAgIFhNTEh0dHBSZXF1ZXN0OjpTdGF0dXNUZXh0ICAgICAgICAgICAgICBEb250RGVsZXRlfFJl
YWRPbmx5Ci0gIG9ucmVhZHlzdGF0ZWNoYW5nZSAgICBYTUxIdHRwUmVxdWVzdDo6T25yZWFkeXN0
YXRlY2hhbmdlICAgICAgRG9udERlbGV0ZQotICBvbmxvYWQgICAgICAgICAgICAgICAgWE1MSHR0
cFJlcXVlc3Q6Ok9ubG9hZCAgICAgICAgICAgICAgICAgIERvbnREZWxldGUKLUBlbmQKLSovCi0K
LWJvb2wgWE1MSHR0cFJlcXVlc3Q6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQotewot
ICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PFhNTEh0dHBSZXF1ZXN0LCBET01PYmplY3Q+KGV4
ZWMsICZYTUxIdHRwUmVxdWVzdFRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQot
Ci1KU1ZhbHVlICpYTUxIdHRwUmVxdWVzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKLXsKLSAgc3dpdGNoICh0b2tlbikgewotICBjYXNlIFJlYWR5
U3RhdGU6Ci0gICAgcmV0dXJuIGpzTnVtYmVyKHN0YXRlKTsKLSAgY2FzZSBSZXNwb25zZVRleHQ6
Ci0gICAgcmV0dXJuIGpzU3RyaW5nT3JOdWxsKERPTTo6RE9NU3RyaW5nKHJlc3BvbnNlKSk7Ci0g
IGNhc2UgUmVzcG9uc2VYTUw6Ci0gICAgaWYgKHN0YXRlICE9IENvbXBsZXRlZCkgewotICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQorICAgIGlmIChzdGF0ZSAhPSBDb21wbGV0ZWQp
CisgICAgICByZXR1cm4gMDsKIAogICAgIGlmICghY3JlYXRlZERvY3VtZW50KSB7CiAgICAgICBp
ZiAodHlwZUlzWE1MID0gcmVzcG9uc2VJc1hNTCgpKSB7CkBAIC0xOTcsNjUgKzEzOCwzMyBAQCBK
U1ZhbHVlICpYTUxIdHRwUmVxdWVzdDo6Z2V0VmFsdWVQcm9wZXJ0CiAgICAgICBjcmVhdGVkRG9j
dW1lbnQgPSB0cnVlOwogICAgIH0KIAotICAgIGlmICghdHlwZUlzWE1MKSB7Ci0gICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CisgICAgaWYgKCF0eXBlSXNYTUwpCisgICAgICByZXR1
cm4gMDsKIAotICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHJlc3BvbnNlWE1MLmdldCgpKTsK
LSAgY2FzZSBTdGF0dXM6Ci0gICAgcmV0dXJuIGdldFN0YXR1cygpOwotICBjYXNlIFN0YXR1c1Rl
eHQ6Ci0gICAgcmV0dXJuIGdldFN0YXR1c1RleHQoKTsKLSAgY2FzZSBPbnJlYWR5c3RhdGVjaGFu
Z2U6Ci0gICBpZiAob25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIgJiYgb25SZWFkeVN0YXRlQ2hh
bmdlTGlzdGVuZXItPmxpc3RlbmVyT2JqKCkpIHsKLSAgICAgcmV0dXJuIG9uUmVhZHlTdGF0ZUNo
YW5nZUxpc3RlbmVyLT5saXN0ZW5lck9iaigpOwotICAgfSBlbHNlIHsKLSAgICAgcmV0dXJuIGpz
TnVsbCgpOwotICAgfQotICBjYXNlIE9ubG9hZDoKLSAgIGlmIChvbkxvYWRMaXN0ZW5lciAmJiBv
bkxvYWRMaXN0ZW5lci0+bGlzdGVuZXJPYmooKSkgewotICAgICByZXR1cm4gb25Mb2FkTGlzdGVu
ZXItPmxpc3RlbmVyT2JqKCk7Ci0gICB9IGVsc2UgewotICAgICByZXR1cm4ganNOdWxsKCk7Ci0g
ICB9Ci0gIGRlZmF1bHQ6Ci0gICAga2RXYXJuaW5nKCkgPDwgIlhNTEh0dHBSZXF1ZXN0OjpnZXRW
YWx1ZVByb3BlcnR5IHVuaGFuZGxlZCB0b2tlbiAiIDw8IHRva2VuIDw8IGVuZGw7Ci0gICAgcmV0
dXJuIE5VTEw7Ci0gIH0KKyAgICByZXR1cm4gcmVzcG9uc2VYTUw7CiB9CiAKLXZvaWQgWE1MSHR0
cFJlcXVlc3Q6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5
TmFtZSwgSlNWYWx1ZSAqdmFsdWUsIGludCBhdHRyKQorUGFzc1JlZlB0cjxFdmVudExpc3RlbmVy
PiBYTUxIdHRwUmVxdWVzdDo6Z2V0T25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIoKSBjb25zdAog
ewotICBsb29rdXBQdXQ8WE1MSHR0cFJlcXVlc3QsRE9NT2JqZWN0PihleGVjLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBhdHRyLCAmWE1MSHR0cFJlcXVlc3RUYWJsZSwgdGhpcyApOworICAgIHJldHVy
biBvblJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lcjsKIH0KIAotdm9pZCBYTUxIdHRwUmVxdWVzdDo6
cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgSlNWYWx1ZSAqdmFs
dWUsIGludCAvKmF0dHIqLykKK3ZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNldE9uUmVhZHlTdGF0ZUNo
YW5nZUxpc3RlbmVyKEV2ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIpCiB7Ci0gIHN3aXRjaCh0
b2tlbikgewotICBjYXNlIE9ucmVhZHlzdGF0ZWNoYW5nZToKLSAgICBvblJlYWR5U3RhdGVDaGFu
Z2VMaXN0ZW5lciA9IFdpbmRvdzo6cmV0cmlldmVBY3RpdmUoZXhlYyktPmdldEpTVW5wcm90ZWN0
ZWRFdmVudExpc3RlbmVyKHZhbHVlLCB0cnVlKTsKLSAgICBicmVhazsKLSAgY2FzZSBPbmxvYWQ6
Ci0gICAgb25Mb2FkTGlzdGVuZXIgPSBXaW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5nZXRK
U1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcih2YWx1ZSwgdHJ1ZSk7Ci0gICAgYnJlYWs7Ci0gIGRl
ZmF1bHQ6Ci0gICAga2RXYXJuaW5nKCkgPDwgIkhUTUxEb2N1bWVudDo6cHV0VmFsdWVQcm9wZXJ0
eSB1bmhhbmRsZWQgdG9rZW4gIiA8PCB0b2tlbiA8PCBlbmRsOwotICB9CisgICAgb25SZWFkeVN0
YXRlQ2hhbmdlTGlzdGVuZXIgPSBldmVudExpc3RlbmVyOwogfQogCi12b2lkIFhNTEh0dHBSZXF1
ZXN0OjptYXJrKCkKK1Bhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gWE1MSHR0cFJlcXVlc3Q6Omdl
dE9uTG9hZExpc3RlbmVyKCkgY29uc3QKIHsKLSAgRE9NT2JqZWN0OjptYXJrKCk7Ci0KLSAgaWYg
KG9uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyKQotICAgIG9uUmVhZHlTdGF0ZUNoYW5nZUxpc3Rl
bmVyLT5tYXJrKCk7Ci0KLSAgaWYgKG9uTG9hZExpc3RlbmVyKQotICAgIG9uTG9hZExpc3RlbmVy
LT5tYXJrKCk7CisgICAgcmV0dXJuIG9uTG9hZExpc3RlbmVyOwogfQogCit2b2lkIFhNTEh0dHBS
ZXF1ZXN0OjpzZXRPbkxvYWRMaXN0ZW5lcihFdmVudExpc3RlbmVyKiBldmVudExpc3RlbmVyKQor
eworICAgIG9uTG9hZExpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsKK30KIAotWE1MSHR0cFJlcXVl
c3Q6OlhNTEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpEb2N1bWVudEltcGwgKmQp
CitYTUxIdHRwUmVxdWVzdDo6WE1MSHR0cFJlcXVlc3QoRG9jdW1lbnRJbXBsICpkKQogICA6IHFP
YmplY3QobmV3IFhNTEh0dHBSZXF1ZXN0UU9iamVjdCh0aGlzKSksCiAgICAgZG9jKGQpLAogICAg
IGFzeW5jKHRydWUpLApAQCAtMjY0LDcgKzE3Myw2IEBAIFhNTEh0dHBSZXF1ZXN0OjpYTUxIdHRw
UmVxdWVzdChFeGVjU3RhdGUKICAgICBjcmVhdGVkRG9jdW1lbnQoZmFsc2UpLAogICAgIGFib3J0
ZWQoZmFsc2UpCiB7Ci0gIHNldFByb3RvdHlwZShYTUxIdHRwUmVxdWVzdFByb3RvOjpzZWxmKGV4
ZWMpKTsKIH0KIAogWE1MSHR0cFJlcXVlc3Q6On5YTUxIdHRwUmVxdWVzdCgpCkBAIC0zMTIsNyAr
MjIwLDcgQEAgYm9vbCBYTUxIdHRwUmVxdWVzdDo6dXJsTWF0Y2hlc0RvY3VtZW50RAogICByZXR1
cm4gZmFsc2U7CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3Q6Om9wZW4oY29uc3QgUVN0cmluZyYg
X21ldGhvZCwgY29uc3QgS1VSTCYgX3VybCwgYm9vbCBfYXN5bmMpCit2b2lkIFhNTEh0dHBSZXF1
ZXN0OjpvcGVuKGNvbnN0IERPTVN0cmluZyYgX21ldGhvZCwgY29uc3QgRE9NU3RyaW5nJiBfdXJs
LCBib29sIF9hc3luYywgY29uc3QgRE9NU3RyaW5nJiB1c2VyLCBjb25zdCBET01TdHJpbmcmIHBh
c3N3b3JkKQogewogICBhYm9ydCgpOwogICBhYm9ydGVkID0gZmFsc2U7CkBAIC0zMjQsMTkgKzIz
MiwyNiBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpvcGVuKGNvbnN0IFFTdHJpbmcmCiAgIGNyZWF0
ZWREb2N1bWVudCA9IGZhbHNlOwogICByZXNwb25zZVhNTCA9IDA7CiAKKyAgdXJsID0gS1VSTChk
b2MtPmZyYW1lKCktPnhtbERvY0ltcGwoKS0+Y29tcGxldGVVUkwoX3VybC5xc3RyaW5nKCkpKTsK
KworICBpZiAoIXVzZXIuaXNOdWxsKCkpCisgICAgdXJsLnNldFVzZXIodXNlci5xc3RyaW5nKCkp
OworCisgIGlmICghcGFzc3dvcmQuaXNOdWxsKCkpCisgICAgdXJsLnNldFBhc3MocGFzc3dvcmQu
cXN0cmluZygpKTsKKwogICBjaGFuZ2VTdGF0ZShVbmluaXRpYWxpemVkKTsKIAogICBpZiAoYWJv
cnRlZCkgewogICAgIHJldHVybjsKICAgfQogCi0gIGlmICghdXJsTWF0Y2hlc0RvY3VtZW50RG9t
YWluKF91cmwpKSB7CisgIGlmICghdXJsTWF0Y2hlc0RvY3VtZW50RG9tYWluKHVybCkpIHsKICAg
ICByZXR1cm47CiAgIH0KIAogICAKLSAgbWV0aG9kID0gX21ldGhvZDsKLSAgdXJsID0gX3VybDsK
KyAgbWV0aG9kID0gX21ldGhvZC5xc3RyaW5nKCk7CiAgIGFzeW5jID0gX2FzeW5jOwogCiAgIGNo
YW5nZVN0YXRlKExvYWRpbmcpOwpAQCAtMzgyLDcgKzI5Nyw3IEBAIHZvaWQgWE1MSHR0cFJlcXVl
c3Q6OnNlbmQoY29uc3QgRE9NU3RyaW4KIAogICAgIHsgLy8gc2NvcGUKICAgICAgICAgLy8gYXZv
aWQgZGVhZGxvY2sgaW4gY2FzZSB0aGUgbG9hZGVyIHdhbnRzIHRvIHVzZSBKUyBvbiBhIGJhY2tn
cm91bmQgdGhyZWFkCi0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BMb2NrczsKKyAg
ICAgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wTG9ja3M7CiAKICAgICAgICAgZGF0
YSA9IEtXUVNlcnZlU3luY2hyb25vdXNSZXF1ZXN0KGtodG1sOjpDYWNoZTo6bG9hZGVyKCksIGRv
Yy0+ZG9jTG9hZGVyKCksIGpvYiwgZmluYWxVUkwsIGhlYWRlcnMpOwogICAgIH0KQEAgLTM5Mywx
MCArMzA4LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2VuZChjb25zdCBET01TdHJpbgogICAg
IHJldHVybjsKICAgfQogCi0gIHsKLSAgICBKU0xvY2sgbG9jazsKLSAgICBnY1Byb3RlY3QodGhp
cyk7Ci0gIH0KKyAgcmVmKCk7IC8vIHRoaXMgb2JqZWN0IHNob3VsZCBub3QgYmUgZGVsZXRlZCB3
aGlsZSBhIHJlcXVlc3QgaXMgaW4gcHJvZ3Jlc3MKICAgCiAgIHFPYmplY3QtPmNvbm5lY3QoIGpv
YiwgU0lHTkFMKCByZXN1bHQoIEtJTzo6Sm9iKiApICksCiAgICAgICAgICAgICAgICAgICAgIFNM
T1QoIHNsb3RGaW5pc2hlZCggS0lPOjpKb2IqICkgKSApOwpAQCAtNDIyLDIwICszMzQsMjMgQEAg
dm9pZCBYTUxIdHRwUmVxdWVzdDo6YWJvcnQoKQogICBkZWNvZGVyID0gMDsKICAgYWJvcnRlZCA9
IHRydWU7CiAKLSAgaWYgKGhhZEpvYikgewotICAgIEpTTG9jayBsb2NrOwotICAgIGdjVW5wcm90
ZWN0KHRoaXMpOwotICB9CisgIGlmIChoYWRKb2IpCisgICAgZGVyZWYoKTsKIH0KIAotdm9pZCBY
TUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRlcihjb25zdCBRU3RyaW5nJiBuYW1lLCBjb25z
dCBRU3RyaW5nICZ2YWx1ZSkKK3ZvaWQgWE1MSHR0cFJlcXVlc3Q6Om92ZXJyaWRlTUlNRVR5cGUo
Y29uc3QgRE9NU3RyaW5nJiBvdmVycmlkZSkKK3sKKyAgTUlNRVR5cGVPdmVycmlkZSA9IG92ZXJy
aWRlLnFzdHJpbmcoKTsKK30KKwordm9pZCBYTUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRl
cihjb25zdCBET01TdHJpbmcmIG5hbWUsIGNvbnN0IERPTVN0cmluZyAmdmFsdWUpCiB7CiAgIGlm
IChyZXF1ZXN0SGVhZGVycy5sZW5ndGgoKSA+IDApIHsKICAgICByZXF1ZXN0SGVhZGVycyArPSAi
XHJcbiI7CiAgIH0KLSAgcmVxdWVzdEhlYWRlcnMgKz0gbmFtZTsKKyAgcmVxdWVzdEhlYWRlcnMg
Kz0gbmFtZS5xc3RyaW5nKCk7CiAgIHJlcXVlc3RIZWFkZXJzICs9ICI6ICI7Ci0gIHJlcXVlc3RI
ZWFkZXJzICs9IHZhbHVlOworICByZXF1ZXN0SGVhZGVycyArPSB2YWx1ZS5xc3RyaW5nKCk7CiB9
CiAKIFFTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldFJlcXVlc3RIZWFkZXIoY29uc3QgUVN0cmlu
ZyYgbmFtZSkgY29uc3QKQEAgLTQ0MywyNCArMzU4LDI0IEBAIFFTdHJpbmcgWE1MSHR0cFJlcXVl
c3Q6OmdldFJlcXVlc3RIZWFkZXIKICAgcmV0dXJuIGdldFNwZWNpZmljSGVhZGVyKHJlcXVlc3RI
ZWFkZXJzLCBuYW1lKTsKIH0KIAotSlNWYWx1ZSAqWE1MSHR0cFJlcXVlc3Q6OmdldEFsbFJlc3Bv
bnNlSGVhZGVycygpIGNvbnN0CitET01TdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldEFsbFJlc3Bv
bnNlSGVhZGVycygpIGNvbnN0CiB7CiAgIGlmIChyZXNwb25zZUhlYWRlcnMuaXNFbXB0eSgpKSB7
Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIERPTVN0cmluZygpOwogICB9
CiAKICAgaW50IGVuZE9mTGluZSA9IHJlc3BvbnNlSGVhZGVycy5maW5kKCJcbiIpOwogCiAgIGlm
IChlbmRPZkxpbmUgPT0gLTEpIHsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1
cm4gRE9NU3RyaW5nKCk7CiAgIH0KIAotICByZXR1cm4ganNTdHJpbmcocmVzcG9uc2VIZWFkZXJz
Lm1pZChlbmRPZkxpbmUgKyAxKSArICJcbiIpOworICByZXR1cm4gcmVzcG9uc2VIZWFkZXJzLm1p
ZChlbmRPZkxpbmUgKyAxKSArICJcbiI7CiB9CiAKLVFTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6Omdl
dFJlc3BvbnNlSGVhZGVyKGNvbnN0IFFTdHJpbmcmIG5hbWUpIGNvbnN0CitET01TdHJpbmcgWE1M
SHR0cFJlcXVlc3Q6OmdldFJlc3BvbnNlSGVhZGVyKGNvbnN0IERPTVN0cmluZyYgbmFtZSkgY29u
c3QKIHsKLSAgcmV0dXJuIGdldFNwZWNpZmljSGVhZGVyKHJlc3BvbnNlSGVhZGVycywgbmFtZSk7
CisgIHJldHVybiBnZXRTcGVjaWZpY0hlYWRlcihyZXNwb25zZUhlYWRlcnMsIG5hbWUucXN0cmlu
ZygpKTsKIH0KIAogUVN0cmluZyBYTUxIdHRwUmVxdWVzdDo6Z2V0U3BlY2lmaWNIZWFkZXIoY29u
c3QgUVN0cmluZyYgaGVhZGVycywgY29uc3QgUVN0cmluZyYgbmFtZSkKQEAgLTQ5Miw0MyArNDA3
LDQwIEBAIGJvb2wgWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlSXNYTUwoKSBjb24KIHsKICAgICBR
U3RyaW5nIG1pbWVUeXBlID0gZ2V0TUlNRVR5cGUoTUlNRVR5cGVPdmVycmlkZSk7CiAgICAgaWYg
KG1pbWVUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgbWltZVR5cGUgPSBnZXRNSU1FVHlwZShnZXRS
ZXNwb25zZUhlYWRlcigiQ29udGVudC1UeXBlIikpOworICAgICAgICBtaW1lVHlwZSA9IGdldE1J
TUVUeXBlKGdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKS5xc3RyaW5nKCkpOwogICAg
IGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpCiAgICAgICBtaW1lVHlwZSA9ICJ0ZXh0L3htbCI7CiAg
ICAgCiAgICAgcmV0dXJuIERPTUltcGxlbWVudGF0aW9uSW1wbDo6aXNYTUxNSU1FVHlwZShtaW1l
VHlwZSk7CiB9CiAKLUpTVmFsdWUgKlhNTEh0dHBSZXF1ZXN0OjpnZXRTdGF0dXMoKSBjb25zdAor
aW50IFhNTEh0dHBSZXF1ZXN0OjpnZXRTdGF0dXMoKSBjb25zdAogewotICBpZiAocmVzcG9uc2VI
ZWFkZXJzLmlzRW1wdHkoKSkgewotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICB9CisgIGlm
IChyZXNwb25zZUhlYWRlcnMuaXNFbXB0eSgpKQorICAgIHJldHVybiAtMTsKICAgCiAgIGludCBl
bmRPZkxpbmUgPSByZXNwb25zZUhlYWRlcnMuZmluZCgiXG4iKTsKICAgUVN0cmluZyBmaXJzdExp
bmUgPSBlbmRPZkxpbmUgPT0gLTEgPyByZXNwb25zZUhlYWRlcnMgOiByZXNwb25zZUhlYWRlcnMu
bGVmdChlbmRPZkxpbmUpOwogICBpbnQgY29kZVN0YXJ0ID0gZmlyc3RMaW5lLmZpbmQoIiAiKTsK
ICAgaW50IGNvZGVFbmQgPSBmaXJzdExpbmUuZmluZCgiICIsIGNvZGVTdGFydCArIDEpOwogICAK
LSAgaWYgKGNvZGVTdGFydCA9PSAtMSB8fCBjb2RlRW5kID09IC0xKSB7Ci0gICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gIH0KKyAgaWYgKGNvZGVTdGFydCA9PSAtMSB8fCBjb2RlRW5kID09IC0x
KQorICAgIHJldHVybiAtMTsKICAgCiAgIFFTdHJpbmcgbnVtYmVyID0gZmlyc3RMaW5lLm1pZChj
b2RlU3RhcnQgKyAxLCBjb2RlRW5kIC0gKGNvZGVTdGFydCArIDEpKTsKICAgCiAgIGJvb2wgb2sg
PSBmYWxzZTsKICAgaW50IGNvZGUgPSBudW1iZXIudG9JbnQoJm9rKTsKLSAgaWYgKCFvaykgewot
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICB9CisgIGlmICghb2spCisgICAgcmV0dXJuIC0x
OwogCi0gIHJldHVybiBqc051bWJlcihjb2RlKTsKKyAgcmV0dXJuIGNvZGU7CiB9CiAKLUpTVmFs
dWUgKlhNTEh0dHBSZXF1ZXN0OjpnZXRTdGF0dXNUZXh0KCkgY29uc3QKK0RPTVN0cmluZyBYTUxI
dHRwUmVxdWVzdDo6Z2V0U3RhdHVzVGV4dCgpIGNvbnN0CiB7CiAgIGlmIChyZXNwb25zZUhlYWRl
cnMuaXNFbXB0eSgpKSB7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIERP
TVN0cmluZygpOwogICB9CiAgIAogICBpbnQgZW5kT2ZMaW5lID0gcmVzcG9uc2VIZWFkZXJzLmZp
bmQoIlxuIik7CkBAIC01MzcsMTIgKzQ0OSwxMiBAQCBKU1ZhbHVlICpYTUxIdHRwUmVxdWVzdDo6
Z2V0U3RhdHVzVGV4dCgpCiAgIGludCBjb2RlRW5kID0gZmlyc3RMaW5lLmZpbmQoIiAiLCBjb2Rl
U3RhcnQgKyAxKTsKIAogICBpZiAoY29kZVN0YXJ0ID09IC0xIHx8IGNvZGVFbmQgPT0gLTEpIHsK
LSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gRE9NU3RyaW5nKCk7CiAgIH0K
ICAgCiAgIFFTdHJpbmcgc3RhdHVzVGV4dCA9IGZpcnN0TGluZS5taWQoY29kZUVuZCArIDEsIGVu
ZE9mTGluZSAtIChjb2RlRW5kICsgMSkpLnN0cmlwV2hpdGVTcGFjZSgpOwogICAKLSAgcmV0dXJu
IGpzU3RyaW5nKHN0YXR1c1RleHQpOworICByZXR1cm4gRE9NU3RyaW5nKHN0YXR1c1RleHQpOwog
fQogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpwcm9jZXNzU3luY0xvYWRSZXN1bHRzKGNvbnN0IEJ5
dGVBcnJheSAmZGF0YSwgY29uc3QgS1VSTCAmZmluYWxVUkwsIGNvbnN0IFFTdHJpbmcgJmhlYWRl
cnMpCkBAIC01ODEsMTQgKzQ5MywxNSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzbG90RmluaXNo
ZWQoS0lPOjpKCiAgIGlmIChkZWNvZGVyKQogICAgIHJlc3BvbnNlICs9IGRlY29kZXItPmZsdXNo
KCk7CiAKKyAgYm9vbCBoYWRKb2IgPSBqb2I7CiAgIHJlbW92ZUZyb21SZXF1ZXN0c0J5RG9jdW1l
bnQoKTsKICAgam9iID0gMDsKIAogICBjaGFuZ2VTdGF0ZShDb21wbGV0ZWQpOwogICBkZWNvZGVy
ID0gMDsKIAotICBKU0xvY2sgbG9jazsKLSAgZ2NVbnByb3RlY3QodGhpcyk7CisgIGlmIChoYWRK
b2IpCisgICAgZGVyZWYoKTsKIH0KIAogdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2xvdFJlZGlyZWN0
aW9uKEtJTzo6Sm9iKiwgY29uc3QgS1VSTCYgdXJsKQpAQCAtNjA5LDcgKzUyMiw3IEBAIHZvaWQg
WE1MSHR0cFJlcXVlc3Q6OnNsb3REYXRhKEtJTzo6Sm9iKiwKICAgaWYgKCFkZWNvZGVyKSB7CiAg
ICAgZW5jb2RpbmcgPSBnZXRDaGFyc2V0KE1JTUVUeXBlT3ZlcnJpZGUpOwogICAgIGlmIChlbmNv
ZGluZy5pc0VtcHR5KCkpCi0gICAgICBlbmNvZGluZyA9IGdldENoYXJzZXQoZ2V0UmVzcG9uc2VI
ZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTsKKyAgICAgIGVuY29kaW5nID0gZ2V0Q2hhcnNldChnZXRS
ZXNwb25zZUhlYWRlcigiQ29udGVudC1UeXBlIikucXN0cmluZygpKTsKICAgICBpZiAoZW5jb2Rp
bmcuaXNFbXB0eSgpICYmIGpvYikKICAgICAgIGVuY29kaW5nID0gam9iLT5xdWVyeU1ldGFEYXRh
KCJjaGFyc2V0Iik7CiAgICAgCkBAIC02NzQsMTE1ICs1ODcsMTAgQEAgdm9pZCBYTUxIdHRwUmVx
dWVzdDo6cmVtb3ZlRnJvbVJlcXVlc3RzQgogICB9CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3Q6
OmNhbmNlbFJlcXVlc3RzKERPTTo6RG9jdW1lbnRJbXBsKiBkKQordm9pZCBYTUxIdHRwUmVxdWVz
dDo6Y2FuY2VsUmVxdWVzdHMoRG9jdW1lbnRJbXBsKiBkKQogewogICB3aGlsZSAoUmVxdWVzdHNT
ZXQqIHJlcXVlc3RzID0gcmVxdWVzdHNCeURvY3VtZW50KCkuZ2V0KGQpKQogICAgICgqcmVxdWVz
dHMtPmJlZ2luKCkpLT5hYm9ydCgpOwogfQogCi1KU1ZhbHVlICpYTUxIdHRwUmVxdWVzdFByb3Rv
RnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqdGhpc09iaiwg
Y29uc3QgTGlzdCAmYXJncykKLXsKLSAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmWE1MSHR0cFJl
cXVlc3Q6OmluZm8pKQotICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0K
LSAgWE1MSHR0cFJlcXVlc3QgKnJlcXVlc3QgPSBzdGF0aWNfY2FzdDxYTUxIdHRwUmVxdWVzdCAq
Pih0aGlzT2JqKTsKLQotICBzd2l0Y2ggKGlkKSB7Ci0gIGNhc2UgWE1MSHR0cFJlcXVlc3Q6OkFi
b3J0OiB7Ci0gICAgcmVxdWVzdC0+YWJvcnQoKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgfQotICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpHZXRBbGxSZXNwb25zZUhlYWRlcnM6IHsKLSAg
ICBpZiAoYXJncy5zaXplKCkgIT0gMCkgewotICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHJlcXVlc3QtPmdldEFsbFJlc3BvbnNlSGVhZGVycygpOwotICB9
Ci0gIGNhc2UgWE1MSHR0cFJlcXVlc3Q6OkdldFJlc3BvbnNlSGVhZGVyOiB7Ci0gICAgaWYgKGFy
Z3Muc2l6ZSgpICE9IDEpIHsKLSAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLSAg
ICAKLSAgICBRU3RyaW5nIGhlYWRlciA9IHJlcXVlc3QtPmdldFJlc3BvbnNlSGVhZGVyKGFyZ3Nb
MF0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSk7Ci0KLSAgICBpZiAoaGVhZGVyLmlzTnVsbCgp
KQotICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICByZXR1cm4ganNTdHJpbmcoaGVh
ZGVyKTsKLSAgfQotICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpPcGVuOgotICAgIHsKLSAgICAgIGlm
IChhcmdzLnNpemUoKSA8IDIgfHwgYXJncy5zaXplKCkgPiA1KSB7Ci0gICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotICAgICAgfQotICAgIAotICAgICAgUVN0cmluZyBtZXRob2QgPSBhcmdz
WzBdLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCk7Ci0gICAgICBLVVJMIHVybCA9IEtVUkwoV2lu
ZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+ZnJhbWUoKS0+eG1sRG9jSW1wbCgpLT5jb21wbGV0
ZVVSTChhcmdzWzFdLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkpKTsKLQotICAgICAgYm9vbCBh
c3luYyA9IHRydWU7Ci0gICAgICBpZiAoYXJncy5zaXplKCkgPj0gMykgewotICAgICAgICBhc3lu
YyA9IGFyZ3NbMl0tPnRvQm9vbGVhbihleGVjKTsKLSAgICAgIH0KLSAgICAKLSAgICAgIGlmIChh
cmdzLnNpemUoKSA+PSA0KSB7Ci0gICAgICAgIHVybC5zZXRVc2VyKGFyZ3NbM10tPnRvU3RyaW5n
KGV4ZWMpLnFzdHJpbmcoKSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmIChhcmdzLnNpemUo
KSA+PSA1KSB7Ci0gICAgICAgIHVybC5zZXRQYXNzKGFyZ3NbNF0tPnRvU3RyaW5nKGV4ZWMpLnFz
dHJpbmcoKSk7Ci0gICAgICB9Ci0KLSAgICAgIHJlcXVlc3QtPm9wZW4obWV0aG9kLCB1cmwsIGFz
eW5jKTsKLQotICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICBjYXNlIFhNTEh0
dHBSZXF1ZXN0OjpTZW5kOgotICAgIHsKLSAgICAgIGlmIChhcmdzLnNpemUoKSA+IDEpIHsKLSAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChyZXF1ZXN0
LT5zdGF0ZSAhPSBMb2FkaW5nKSB7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAg
ICAgfQotCi0gICAgICBET01TdHJpbmcgYm9keTsKLQotICAgICAgaWYgKGFyZ3Muc2l6ZSgpID49
IDEpIHsKLSAgICAgICAgaWYgKGFyZ3NbMF0tPnRvT2JqZWN0KGV4ZWMpLT5pbmhlcml0cygmRE9N
RG9jdW1lbnQ6OmluZm8pKSB7Ci0gICAgICAgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBzdGF0aWNf
Y2FzdDxEb2N1bWVudEltcGwgKj4oc3RhdGljX2Nhc3Q8RE9NRG9jdW1lbnQgKj4oYXJnc1swXS0+
dG9PYmplY3QoZXhlYykpLT5pbXBsKCkpOwotICAgICAgICAgIGJvZHkgPSBkb2MtPnRvU3RyaW5n
KCkucXN0cmluZygpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8vIGNvbnZlcnRpbmcg
Y2VydGFpbiB2YWx1ZXMgKGxpa2UgbnVsbCkgdG8gb2JqZWN0IGNhbiBzZXQgYW4gZXhjZXB0aW9u
Ci0gICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgICBib2R5ID0gYXJn
c1swXS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQot
ICAgICAgcmVxdWVzdC0+c2VuZChib2R5KTsKLQotICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gICAgfQotICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpTZXRSZXF1ZXN0SGVhZGVyOiB7Ci0gICAg
aWYgKGFyZ3Muc2l6ZSgpICE9IDIpIHsKLSAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAg
IH0KLSAgICAKLSAgICByZXF1ZXN0LT5zZXRSZXF1ZXN0SGVhZGVyKGFyZ3NbMF0tPnRvU3RyaW5n
KGV4ZWMpLnFzdHJpbmcoKSwgYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpKTsKLSAg
ICAKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgfQotICBjYXNlIFhNTEh0dHBSZXF1ZXN0
OjpPdmVycmlkZU1JTUVUeXBlOiB7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDEpIHsKLSAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLSAgICByZXF1ZXN0LT5NSU1FVHlwZU92ZXJy
aWRlID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpOwotICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICB9Ci0gIH0KLQotICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQogfSAv
LyBlbmQgbmFtZXNwYWNlCkluZGV4OiBraHRtbC9lY21hL2tqc19ldmVudHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtodG1sL2VjbWEva2pzX2V2ZW50cy5jcHAJKHJldmlzaW9uIDEyMjM5KQorKysga2h0
bWwvZWNtYS9ranNfZXZlbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTMgKzQxLDYgQEAg
dXNpbmcgbmFtZXNwYWNlIGtodG1sOwogCiBuYW1lc3BhY2UgS0pTIHsKIAotc3RhdGljIEpTVmFs
dWUqIGpzU3RyaW5nT3JVbmRlZmluZWQoY29uc3QgRE9NU3RyaW5nJiBzdHIpCi17Ci0gICAgcmV0
dXJuIHN0ci5pc051bGwoKSA/IGpzVW5kZWZpbmVkKCkgOiBqc1N0cmluZyhzdHIpOwotfQotCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KIEpTQWJzdHJhY3RFdmVudExpc3RlbmVyOjpKU0Fic3RyYWN0
RXZlbnRMaXN0ZW5lcihib29sIF9odG1sKQogICAgIDogaHRtbChfaHRtbCkKIHsKSW5kZXg6IGto
dG1sL2VjbWEva2pzX3dpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvZWNtYS9ranNfd2lu
ZG93LmNwcAkocmV2aXNpb24gMTIyMzkpCisrKyBraHRtbC9lY21hL2tqc193aW5kb3cuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBACiAjaW5jbHVkZSAia2pzX3RyYXZlcnNhbC5o
IgogI2luY2x1ZGUgImtqc19jc3MuaCIKICNpbmNsdWRlICJranNfZXZlbnRzLmgiCi0jaW5jbHVk
ZSAieG1saHR0cHJlcXVlc3QuaCIKKyNpbmNsdWRlICJKU1hNTEh0dHBSZXF1ZXN0LmgiCiAjaW5j
bHVkZSAieG1sc2VyaWFsaXplci5oIgogI2lmZGVmIEtIVE1MX1hTTFQKICNpbmNsdWRlICJYU0xU
UHJvY2Vzc29yLmgiCkBAIC04MDUsNyArODA1LDcgQEAgSlNWYWx1ZSAqV2luZG93OjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdAogICAgIGNhc2UgT3B0aW9uOgogICAgICAgcmV0dXJuIG5ldyBPcHRp
b25Db25zdHJ1Y3RvckltcChleGVjLCBtX2ZyYW1lLT54bWxEb2NJbXBsKCkpOwogICAgIGNhc2Ug
WE1MSHR0cFJlcXVlc3Q6Ci0gICAgICByZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0
b3JJbXAoZXhlYywgbV9mcmFtZS0+eG1sRG9jSW1wbCgpKTsKKyAgICAgIHJldHVybiBuZXcgSlNY
TUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wKGV4ZWMsIG1fZnJhbWUtPnhtbERvY0ltcGwoKSk7
CiAgICAgY2FzZSBYTUxTZXJpYWxpemVyOgogICAgICAgcmV0dXJuIG5ldyBYTUxTZXJpYWxpemVy
Q29uc3RydWN0b3JJbXAoZXhlYyk7CiAgICAgY2FzZSBET01QYXJzZXI6CkluZGV4OiBraHRtbC9l
Y21hL2tqc19iaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9lY21hL2tqc19iaW5kaW5n
LmNwcAkocmV2aXNpb24gMTIyMzkpCisrKyBraHRtbC9lY21hL2tqc19iaW5kaW5nLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzE3LDYgKzMxNywxMyBAQCBKU1ZhbHVlICpqc1N0cmluZ09yTnVsbChj
b25zdCBET01TdHJpbmcgCiAgICAgcmV0dXJuIGpzU3RyaW5nKHMpOwogfQogCitKU1ZhbHVlICpq
c1N0cmluZ09yVW5kZWZpbmVkKGNvbnN0IERPTVN0cmluZyAmcykKK3sKKyAgICBpZiAocy5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIGpzU3RyaW5n
KHMpOworfQorCiBET01TdHJpbmcgdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soRXhlY1N0YXRl
ICpleGVjLCBKU1ZhbHVlICp2YWwpCiB7CiAgICAgaWYgKHZhbC0+aXNOdWxsKCkpCkluZGV4OiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMjIzOSkKKysrIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTY1MSw2ICsxNjUxLDEw
IEBACiAJCUJDRkIyRjc5MDk3QTJFMUEwMEJBNzAzRCAvKiBBcmVuYS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGQjJGNzUwOTdBMkUxQTAwQkE3MDNE
IC8qIEFyZW5hLmggKi87IH07CiAJCUUxRUU3NzM3MDhGMTA4NkMwMDE2Njg3MCAvKiBXZWJDb3Jl
VGV4dERlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUxRUU3NzM1MDhGMTA4NkMwMDE2Njg3MCAvKiBXZWJDb3JlVGV4dERlY29kZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMUVFNzczODA4
RjEwODZDMDAxNjY4NzAgLyogV2ViQ29yZVRleHREZWNvZGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFFRTc3MzYwOEYxMDg2QzAwMTY2ODcwIC8q
IFdlYkNvcmVUZXh0RGVjb2Rlci5tbSAqLzsgfTsKKwkJRTFGNDNCMDMwOTgwMjhENjAwRTZGQ0I2
IC8qIEpTWE1MSHR0cFJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTFGNDNCMDEwOTgwMjhENjAwRTZGQ0I2IC8qIEpTWE1MSHR0cFJlcXVl
c3QuY3BwICovOyB9OworCQlFMUY0M0IwNDA5ODAyOEQ2MDBFNkZDQjYgLyogSlNYTUxIdHRwUmVx
dWVzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFG
NDNCMDIwOTgwMjhENjAwRTZGQ0I2IC8qIEpTWE1MSHR0cFJlcXVlc3QuaCAqLzsgfTsKKwkJRTFG
NDNCMDUwOTgwMjhENjAwRTZGQ0I2IC8qIEpTWE1MSHR0cFJlcXVlc3QuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFGNDNCMDEwOTgwMjhENjAwRTZG
Q0I2IC8qIEpTWE1MSHR0cFJlcXVlc3QuY3BwICovOyB9OworCQlFMUY0M0IwNjA5ODAyOEQ2MDBF
NkZDQjYgLyogSlNYTUxIdHRwUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTFGNDNCMDIwOTgwMjhENjAwRTZGQ0I2IC8qIEpTWE1MSHR0cFJl
cXVlc3QuaCAqLzsgfTsKIAkJRUQwNDhBQkMwODMzRjEzMjAwNkUxRTY3IC8qIHRleHRBcmVhUmVz
aXplQ29ybmVyLnRpZmYgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEVEMDQ4QUJCMDgzM0YxMzIwMDZFMUU2NyAvKiB0ZXh0QXJlYVJlc2l6ZUNvcm5lci50
aWZmICovOyB9OwogCQlGQUUwNDE4QjA5NzU5Njk0MDAwNTQwQkUgLyogUmVuZGVyU1ZHSW1hZ2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZBRTA0MTg5
MDk3NTk2OTQwMDA1NDBCRSAvKiBSZW5kZXJTVkdJbWFnZS5oICovOyB9OwogCQlGQUUwNDE4QzA5
NzU5Njk0MDAwNTQwQkUgLyogUmVuZGVyU1ZHSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkFFMDQxOEEwOTc1OTY5NDAwMDU0MEJFIC8qIFJl
bmRlclNWR0ltYWdlLmNwcCAqLzsgfTsKQEAgLTI2MjEsNiArMjYyNSw4IEBACiAJCUJFRjdFRUEx
MDVGRjhGMEQwMDk3MTdFRSAvKiBLV1FFZGl0Q29tbWFuZC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEtXUUVkaXRDb21tYW5kLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsK
IAkJRTFFRTc3MzUwOEYxMDg2QzAwMTY2ODcwIC8qIFdlYkNvcmVUZXh0RGVjb2Rlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVUZXh0
RGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJz
ID0gMDsgfTsKIAkJRTFFRTc3MzYwOEYxMDg2QzAwMTY2ODcwIC8qIFdlYkNvcmVUZXh0RGVjb2Rl
ci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRl
bnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV2ViQ29yZVRleHREZWNvZGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJX
aWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKKwkJRTFGNDNCMDEwOTgwMjhENjAwRTZGQ0I2IC8q
IEpTWE1MSHR0cFJlcXVlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNYTUxIdHRwUmVxdWVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUx
RjQzQjAyMDk4MDI4RDYwMEU2RkNCNiAvKiBKU1hNTEh0dHBSZXF1ZXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTWE1MSHR0cFJlcXVlc3QuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRUQwNDhBQkIwODMzRjEzMjAwNkUxRTY3IC8qIHRleHRBcmVhUmVzaXpl
Q29ybmVyLnRpZmYgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBpbWFnZS50aWZmOyBuYW1lID0gdGV4dEFyZWFSZXNpemVDb3JuZXIudGlmZjsgcGF0aCA9
IFJlc291cmNlcy90ZXh0QXJlYVJlc2l6ZUNvcm5lci50aWZmOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFREE0QUM5NzA3NkZCODkxMDBERDIzRUMgLyogZWRpdF9hY3Rpb25zLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gZWRpdF9hY3Rp
b25zLmg7IHBhdGggPSBlZGl0aW5nL2VkaXRfYWN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUxMTdCQzkwMkY5RkZFRjAx
ODYzNUNFIC8qIEtXUVNpZ25hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
S1dRU2lnbmFsLmg7IHBhdGggPSBrd3EvS1dRU2lnbmFsLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0Vf
Uk9PVDsgfTsKQEAgLTQwMDIsNiArNDAwOCw4IEBACiAJCQkJRjUyM0QyMEUwMkRFNDM2OTAxODYz
NUNBIC8qIGtqc192aWV3cy5oICovLAogCQkJCUY1MjNEMjEwMDJERTQzNjkwMTg2MzVDQSAvKiBr
anNfd2luZG93LmNwcCAqLywKIAkJCQlGNTIzRDIxMTAyREU0MzY5MDE4NjM1Q0EgLyoga2pzX3dp
bmRvdy5oICovLAorCQkJCUUxRjQzQjAxMDk4MDI4RDYwMEU2RkNCNiAvKiBKU1hNTEh0dHBSZXF1
ZXN0LmNwcCAqLywKKwkJCQlFMUY0M0IwMjA5ODAyOEQ2MDBFNkZDQjYgLyogSlNYTUxIdHRwUmVx
dWVzdC5oICovLAogCQkJCTY1NEU3RUUwMDU2OUZENDYwMDM1OEJEMiAvKiB4bWxodHRwcmVxdWVz
dC5jcHAgKi8sCiAJCQkJNjU0RTdFRTEwNTY5RkQ0NjAwMzU4QkQyIC8qIHhtbGh0dHByZXF1ZXN0
LmggKi8sCiAJCQkJNjU5MTJCMEQwNTg2OTIxMDAwMTIzQTY5IC8qIHhtbHNlcmlhbGl6ZXIuY3Bw
ICovLApAQCAtNDk2OCw2ICs0OTc2LDcgQEAKIAkJCQlCQ0VBNDk0NDA5N0YwRjVDMDA5NEM5RTQg
LyogQnJvd3NlckV4dGVuc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ5NDcwOTdGMEY3
NzAwOTRDOUU0IC8qIEJyb3dzZXJFeHRlbnNpb25NYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCUFC
NjdEMUE5MDk3RjNBRTMwMEY5MzkyRSAvKiBSZW5kZXJUZXh0RmllbGQuaCBpbiBIZWFkZXJzICov
LAorCQkJCUUxRjQzQjA0MDk4MDI4RDYwMEU2RkNCNiAvKiBKU1hNTEh0dHBSZXF1ZXN0LmggaW4g
SGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKQEAgLTUzMTIsNiArNTMyMSw3IEBACiAJCQkJQkNFQTQ4Q0QwOTdEOTMwMjAw
OTRDOUU0IC8qIFJlbmRlclRleHRGcmFnbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4
Q0YwOTdEOTMwMjAwOTRDOUU0IC8qIHRhYmxlX2xheW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QUI2N0QxQUIwOTdGM0FFMzAwRjkzOTJFIC8qIFJlbmRlclRleHRGaWVsZC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRTFGNDNCMDYwOTgwMjhENjAwRTZGQ0I2IC8qIEpTWE1MSHR0cFJlcXVlc3QuaCBp
biBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpAQCAtNjg3NCw2ICs2ODg0LDcgQEAKIAkJCQk5MzdBMzZBNzA5N0UyRTMy
MDBFNEVFMkYgLyogVXNlckFnZW50U3R5bGVTaGVldHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkNFQTQ5NDgwOTdGMEY3NzAwOTRDOUU0IC8qIEJyb3dzZXJFeHRlbnNpb25NYWMubW0gaW4gU291
cmNlcyAqLywKIAkJCQlBQjY3RDFBODA5N0YzQUUzMDBGOTM5MkUgLyogUmVuZGVyVGV4dEZpZWxk
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxRjQzQjAzMDk4MDI4RDYwMEU2RkNCNiAvKiBKU1hN
TEh0dHBSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNzE3Miw2ICs3MTgzLDcgQEAKIAkJ
CQlCQ0VBNDhDRTA5N0Q5MzAyMDA5NEM5RTQgLyogdGFibGVfbGF5b3V0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTkzN0EzNkE4MDk3RTJFMzIwMEU0RUUyRiAvKiBVc2VyQWdlbnRTdHlsZVNoZWV0
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBQjY3RDFBQTA5N0YzQUUzMDBGOTM5MkUgLyogUmVu
ZGVyVGV4dEZpZWxkLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxRjQzQjA1MDk4MDI4RDYwMEU2
RkNCNiAvKiBKU1hNTEh0dHBSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDoga3dxL0tX
UVNsb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGt3cS9LV1FTbG90LmNwcAkocmV2aXNpb24gMTIyMzkp
CisrKyBrd3EvS1dRU2xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgdXNp
bmcga2h0bWw6OlJlbmRlcldpZGdldDsKIHVzaW5nIGtodG1sOjpSZW5kZXJTY3JvbGxNZWRpYXRv
cjsKIHVzaW5nIEtJTzo6Sm9iOwogdXNpbmcgS0pTOjpXaW5kb3dRT2JqZWN0OwotdXNpbmcgS0pT
OjpYTUxIdHRwUmVxdWVzdFFPYmplY3Q7Cit1c2luZyBXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFFP
YmplY3Q7CiAjaWZkZWYgU1ZHX1NVUFBPUlQKIHVzaW5nIEtTVkc6OlRpbWVTY2hlZHVsZXI7CiAj
ZW5kaWYKSW5kZXg6IHBhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvRnJhbWUuY3Bw
CShyZXZpc2lvbiAxMjIzOSkKKysrIHBhZ2UvRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw2ICszNSw3IEBACiAjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIk5vZGVMaXN0SW1wbC5oIgog
I2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudEltcGwuaCIKICNpbmNsdWRlICJIVE1MR2VuZXJpY0Zv
cm1FbGVtZW50SW1wbC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC0zNjgsNyArMzY5LDcgQEAg
dm9pZCBGcmFtZTo6c3RvcExvYWRpbmcoYm9vbCBzZW5kVW5sb2FkKQogICBpZiAoRG9jdW1lbnRJ
bXBsICpkb2MgPSBkLT5tX2RvYykgewogICAgIGlmIChEb2NMb2FkZXIgKmRvY0xvYWRlciA9IGRv
Yy0+ZG9jTG9hZGVyKCkpCiAgICAgICBDYWNoZTo6bG9hZGVyKCktPmNhbmNlbFJlcXVlc3RzKGRv
Y0xvYWRlcik7Ci0gICAgS0pTOjpYTUxIdHRwUmVxdWVzdDo6Y2FuY2VsUmVxdWVzdHMoZG9jKTsK
KyAgICAgIFhNTEh0dHBSZXF1ZXN0OjpjYW5jZWxSZXF1ZXN0cyhkb2MpOwogICB9CiAKICAgLy8g
dGVsbCBhbGwgc3ViZnJhbWVzIHRvIHN0b3AgYXMgd2VsbAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5820</attachid>
            <date>2006-01-21 15:46:07 -0800</date>
            <delta_ts>2006-01-21 16:50:19 -0800</delta_ts>
            <desc>revised patch</desc>
            <filename>SplitXMLHttpRequest.txt</filename>
            <type>text/plain</type>
            <size>66564</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2VjbWEvSlNYTUxIdHRwUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1s
L2VjbWEvSlNYTUxIdHRwUmVxdWVzdC5oCShyZXZpc2lvbiAxMjE3MCkKKysrIGtodG1sL2VjbWEv
SlNYTUxIdHRwUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogLyoKICAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcwogICogIENvcHlyaWdodCAo
QykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLgotICogIENvcHlyaWdodCAoQykgMjAwNSBBbGV4
ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LCAy
MDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKQEAgLTE5LDE0NSArMTksNTEgQEAKICAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAotI2lm
bmRlZiBYTUxIVFRQUkVRVUVTVF9IXwotI2RlZmluZSBYTUxIVFRQUkVRVUVTVF9IXworI2lmbmRl
ZiBKU1hNTEhUVFBSRVFVRVNUX0hfCisjZGVmaW5lIEpTWE1MSFRUUFJFUVVFU1RfSF8KIAotI2lu
Y2x1ZGUgImtqc19kb20uaCIKLSNpbmNsdWRlIDxrdXJsLmg+Ci0jaW5jbHVkZSA8a3htbGNvcmUv
SGFzaFNldC5oPgotI2luY2x1ZGUgPGt4bWxjb3JlL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDxxZ3Vh
cmRlZHB0ci5oPgotI2luY2x1ZGUgPHFvYmplY3QuaD4KLQotbmFtZXNwYWNlIGtodG1sIHsKLSAg
ICBjbGFzcyBEZWNvZGVyOwotfQotCi1uYW1lc3BhY2UgS0lPIHsKLSAgICBjbGFzcyBKb2I7Ci0g
ICAgY2xhc3MgVHJhbnNmZXJKb2I7Ci19CisjaW5jbHVkZSA8a3htbGNvcmUvUmVmUHRyLmg+Cisj
aW5jbHVkZSAia2pzX2JpbmRpbmcuaCIKIAotbmFtZXNwYWNlIEtKUyB7CituYW1lc3BhY2UgV2Vi
Q29yZSB7CisgICAgY2xhc3MgWE1MSHR0cFJlcXVlc3Q7CisgICAgY2xhc3MgRG9jdW1lbnRJbXBs
OworfTsKIAotICBjbGFzcyBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjsKLSAgY2xhc3MgWE1M
SHR0cFJlcXVlc3RRT2JqZWN0OwogCi0gIC8vIHRoZXNlIGV4YWN0IG51bWVyaWMgdmFsdWVzIGFy
ZSBpbXBvcnRhbnQgYmVjYXVzZSBKUyBleHBlY3RzIHRoZW0KLSAgZW51bSBYTUxIdHRwUmVxdWVz
dFN0YXRlIHsKLSAgICBVbmluaXRpYWxpemVkID0gMCwgIC8vIG9wZW4oKSBoYXMgbm90IGJlZW4g
Y2FsbGVkIHlldAotICAgIExvYWRpbmcgPSAxLCAgICAgICAgLy8gc2VuZCgpIGhhcyBub3QgYmVl
biBjYWxsZWQgeWV0Ci0gICAgTG9hZGVkID0gMiwgICAgICAgICAvLyBzZW5kKCkgaGFzIGJlZW4g
Y2FsbGVkLCBoZWFkZXJzIGFuZCBzdGF0dXMgYXJlIGF2YWlsYWJsZQotICAgIEludGVyYWN0aXZl
ID0gMywgICAgLy8gRG93bmxvYWRpbmcsIHJlc3BvbnNlVGV4dCBob2xkcyB0aGUgcGFydGlhbCBk
YXRhCi0gICAgQ29tcGxldGVkID0gNCAgICAgICAvLyBGaW5pc2hlZCB3aXRoIGFsbCBvcGVyYXRp
b25zCi0gIH07CituYW1lc3BhY2UgS0pTIHsKIAotICBjbGFzcyBYTUxIdHRwUmVxdWVzdENvbnN0
cnVjdG9ySW1wIDogcHVibGljIEpTT2JqZWN0IHsKKyAgY2xhc3MgSlNYTUxIdHRwUmVxdWVzdENv
bnN0cnVjdG9ySW1wIDogcHVibGljIEpTT2JqZWN0IHsKICAgcHVibGljOgotICAgIFhNTEh0dHBS
ZXF1ZXN0Q29uc3RydWN0b3JJbXAoRXhlY1N0YXRlICpleGVjLCBET006OkRvY3VtZW50SW1wbCAq
ZCk7Ci0gICAgflhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXAoKTsKKyAgICBKU1hNTEh0dHBS
ZXF1ZXN0Q29uc3RydWN0b3JJbXAoRXhlY1N0YXRlICpleGVjLCBXZWJDb3JlOjpEb2N1bWVudElt
cGwgKmQpOworICAgIH5KU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXAoKTsKICAgICB2aXJ0
dWFsIGJvb2wgaW1wbGVtZW50c0NvbnN0cnVjdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgSlNPYmpl
Y3QgKmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpOwogICBwcml2
YXRlOgotICAgIFJlZlB0cjxET006OkRvY3VtZW50SW1wbD4gZG9jOworICAgIFJlZlB0cjxXZWJD
b3JlOjpEb2N1bWVudEltcGw+IGRvYzsKICAgfTsKIAotICBjbGFzcyBYTUxIdHRwUmVxdWVzdCA6
IHB1YmxpYyBET01PYmplY3QgeworICBjbGFzcyBKU1hNTEh0dHBSZXF1ZXN0IDogcHVibGljIERP
TU9iamVjdCB7CiAgIHB1YmxpYzoKLSAgICBYTUxIdHRwUmVxdWVzdChFeGVjU3RhdGUgKiwgRE9N
OjpEb2N1bWVudEltcGwgKmQpOwotICAgIH5YTUxIdHRwUmVxdWVzdCgpOwotICAgIHZpcnR1YWwg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQ
cm9wZXJ0eVNsb3QmKTsKLSAgICBKU1ZhbHVlICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBKU1ZhbHVlICp2YWx1ZSwgaW50
IGF0dHIgPSBOb25lKTsKLSAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIEpTVmFsdWUgKnZhbHVlLCBpbnQgLyphdHRyKi8pOwotICAgIHZpcnR1YWwg
Ym9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlICopIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgbWFyaygpOwotCisgICAgSlNYTUxIdHRwUmVxdWVzdChFeGVjU3RhdGUgKiwg
V2ViQ29yZTo6RG9jdW1lbnRJbXBsICpkKTsKKyAgICB+SlNYTUxIdHRwUmVxdWVzdCgpOwogICAg
IHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5m
bzsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgICBlbnVtIHsgT25sb2Fk
LCBPbnJlYWR5c3RhdGVjaGFuZ2UsIFJlYWR5U3RhdGUsIFJlc3BvbnNlVGV4dCwgUmVzcG9uc2VY
TUwsIFN0YXR1cywKICAgICAgICAgU3RhdHVzVGV4dCwgQWJvcnQsIEdldEFsbFJlc3BvbnNlSGVh
ZGVycywgR2V0UmVzcG9uc2VIZWFkZXIsIE9wZW4sIFNlbmQsIFNldFJlcXVlc3RIZWFkZXIsCiAg
ICAgICAgIE92ZXJyaWRlTUlNRVR5cGUgfTsKIAotICAgIHN0YXRpYyB2b2lkIGNhbmNlbFJlcXVl
c3RzKERPTTo6RG9jdW1lbnRJbXBsICpkKTsKLQotICBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFz
cyBYTUxIdHRwUmVxdWVzdFByb3RvRnVuYzsKLSAgICBmcmllbmQgY2xhc3MgWE1MSHR0cFJlcXVl
c3RRT2JqZWN0OwotCi0gICAgSlNWYWx1ZSAqZ2V0U3RhdHVzVGV4dCgpIGNvbnN0OwotICAgIEpT
VmFsdWUgKmdldFN0YXR1cygpIGNvbnN0OwotICAgIGJvb2wgdXJsTWF0Y2hlc0RvY3VtZW50RG9t
YWluKGNvbnN0IEtVUkwmKSBjb25zdDsKLQotICAgIFhNTEh0dHBSZXF1ZXN0UU9iamVjdCAqcU9i
amVjdDsKLQotICAgIHZvaWQgc2xvdERhdGEoIEtJTzo6Sm9iKiBqb2IsIGNvbnN0IGNoYXIgKmRh
dGEsIGludCBzaXplICk7Ci0gICAgdm9pZCBzbG90RmluaXNoZWQoIEtJTzo6Sm9iKiApOwotICAg
IHZvaWQgc2xvdFJlZGlyZWN0aW9uKCBLSU86OkpvYiosIGNvbnN0IEtVUkwmICk7Ci0KLSAgICB2
b2lkIHByb2Nlc3NTeW5jTG9hZFJlc3VsdHMoY29uc3QgQnl0ZUFycmF5ICZkYXRhLCBjb25zdCBL
VVJMICZmaW5hbFVSTCwgY29uc3QgUVN0cmluZyAmaGVhZGVycyk7Ci0KLSAgICB2b2lkIG9wZW4o
Y29uc3QgUVN0cmluZyYgX21ldGhvZCwgY29uc3QgS1VSTCYgX3VybCwgYm9vbCBfYXN5bmMpOwot
ICAgIHZvaWQgc2VuZChjb25zdCBET006OkRPTVN0cmluZyYgX2JvZHkpOwotICAgIHZvaWQgYWJv
cnQoKTsKLSAgICB2b2lkIHNldFJlcXVlc3RIZWFkZXIoY29uc3QgUVN0cmluZyYgbmFtZSwgY29u
c3QgUVN0cmluZyAmdmFsdWUpOwotICAgIFFTdHJpbmcgZ2V0UmVxdWVzdEhlYWRlcihjb25zdCBR
U3RyaW5nJiBuYW1lKSBjb25zdDsKLSAgICBKU1ZhbHVlICpnZXRBbGxSZXNwb25zZUhlYWRlcnMo
KSBjb25zdDsKLSAgICBRU3RyaW5nIGdldFJlc3BvbnNlSGVhZGVyKGNvbnN0IFFTdHJpbmcmIG5h
bWUpIGNvbnN0OwotICAgIGJvb2wgcmVzcG9uc2VJc1hNTCgpIGNvbnN0OwotICAgIAotICAgIHN0
YXRpYyBRU3RyaW5nIGdldFNwZWNpZmljSGVhZGVyKGNvbnN0IFFTdHJpbmcmIGhlYWRlcnMsIGNv
bnN0IFFTdHJpbmcmIG5hbWUpOwotCi0gICAgdm9pZCBjaGFuZ2VTdGF0ZShYTUxIdHRwUmVxdWVz
dFN0YXRlIG5ld1N0YXRlKTsKLQotICAgIHR5cGVkZWYgSGFzaFNldDxYTUxIdHRwUmVxdWVzdCos
IFBvaW50ZXJIYXNoPFhNTEh0dHBSZXF1ZXN0Kj4gPiBSZXF1ZXN0c1NldDsKLSAgICB0eXBlZGVm
IEhhc2hNYXA8RE9NOjpEb2N1bWVudEltcGwqLCBSZXF1ZXN0c1NldCosIFBvaW50ZXJIYXNoPERP
TTo6RG9jdW1lbnRJbXBsKj4gPiBSZXF1ZXN0c01hcDsKLSAgICBzdGF0aWMgUmVxdWVzdHNNYXAg
JnJlcXVlc3RzQnlEb2N1bWVudCgpOwotICAgIHZvaWQgYWRkVG9SZXF1ZXN0c0J5RG9jdW1lbnQo
KTsKLSAgICB2b2lkIHJlbW92ZUZyb21SZXF1ZXN0c0J5RG9jdW1lbnQoKTsKLQotICAgIFFHdWFy
ZGVkUHRyPERPTTo6RG9jdW1lbnRJbXBsPiBkb2M7Ci0KLSAgICBLVVJMIHVybDsKLSAgICBRU3Ry
aW5nIG1ldGhvZDsKLSAgICBib29sIGFzeW5jOwotICAgIFFTdHJpbmcgcmVxdWVzdEhlYWRlcnM7
Ci0KLSAgICBLSU86OlRyYW5zZmVySm9iICogam9iOwotCi0gICAgWE1MSHR0cFJlcXVlc3RTdGF0
ZSBzdGF0ZTsKLSAgICBSZWZQdHI8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI+IG9uUmVhZHlT
dGF0ZUNoYW5nZUxpc3RlbmVyOwotICAgIFJlZlB0cjxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5l
cj4gb25Mb2FkTGlzdGVuZXI7Ci0KLSAgICBSZWZQdHI8a2h0bWw6OkRlY29kZXI+IGRlY29kZXI7
Ci0gICAgUVN0cmluZyBlbmNvZGluZzsKLSAgICBRU3RyaW5nIHJlc3BvbnNlSGVhZGVyczsKLSAg
ICBRU3RyaW5nIE1JTUVUeXBlT3ZlcnJpZGU7Ci0KLSAgICBRU3RyaW5nIHJlc3BvbnNlOwotICAg
IG11dGFibGUgYm9vbCBjcmVhdGVkRG9jdW1lbnQ7Ci0gICAgbXV0YWJsZSBib29sIHR5cGVJc1hN
TDsKLSAgICBtdXRhYmxlIFJlZlB0cjxET006OkRvY3VtZW50SW1wbD4gcmVzcG9uc2VYTUw7Ci0K
LSAgICBib29sIGFib3J0ZWQ7Ci0gIH07Ci0KLQotICBjbGFzcyBYTUxIdHRwUmVxdWVzdFFPYmpl
Y3QgOiBwdWJsaWMgUU9iamVjdCB7Ci0gICAgUV9PQkpFQ1QKLQotICBwdWJsaWM6Ci0gICAgWE1M
SHR0cFJlcXVlc3RRT2JqZWN0KFhNTEh0dHBSZXF1ZXN0ICpfanNPYmplY3QpOwotCi0gIHB1Ymxp
YyBzbG90czoKLSAgICB2b2lkIHNsb3REYXRhKCBLSU86OkpvYiogam9iLCBjb25zdCBjaGFyICpk
YXRhLCBpbnQgc2l6ZSApOwotICAgIHZvaWQgc2xvdEZpbmlzaGVkKCBLSU86OkpvYiogam9iICk7
Ci0gICAgdm9pZCBzbG90UmVkaXJlY3Rpb24oIEtJTzo6Sm9iKiBqb2IsIGNvbnN0IEtVUkwmIHVy
bCk7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29u
c3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOworICAgIEpTVmFsdWUgKmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgKnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOworICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgSlNWYWx1ZSAqdmFsdWUsIGludCAvKmF0dHIq
Lyk7CisgICAgdmlydHVhbCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUgKikgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CiAKICAgcHJpdmF0ZToKLSAgICBY
TUxIdHRwUmVxdWVzdCAqanNPYmplY3Q7CisgICAgZnJpZW5kIGNsYXNzIEpTWE1MSHR0cFJlcXVl
c3RQcm90b0Z1bmM7CisgICAgUmVmUHRyPFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0PiBtX2ltcGw7
CiAgIH07Ci0KIH0gLy8gbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRleDoga2h0bWwvZWNtYS94bWxo
dHRwcmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2VjbWEveG1saHR0cHJlcXVlc3QuaAko
cmV2aXNpb24gMTIyNjcpCisrKyBraHRtbC9lY21hL3htbGh0dHByZXF1ZXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIsNyArMiw3IEBACiAvKgogICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBL
REUgbGlicmFyaWVzCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMu
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNv
bT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBA
bnlwb3AuY29tPgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMjUgKzIyLDIzIEBACiAjaWZu
ZGVmIFhNTEhUVFBSRVFVRVNUX0hfCiAjZGVmaW5lIFhNTEhUVFBSRVFVRVNUX0hfCiAKLSNpbmNs
dWRlICJranNfZG9tLmgiCiAjaW5jbHVkZSA8a3VybC5oPgorI2luY2x1ZGUgPGt4bWxjb3JlL1Bh
c3NSZWZQdHIuaD4KICNpbmNsdWRlIDxreG1sY29yZS9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8a3ht
bGNvcmUvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHFndWFyZGVkcHRyLmg+CiAjaW5jbHVkZSA8cW9i
amVjdC5oPgogCi1uYW1lc3BhY2Uga2h0bWwgewotICAgIGNsYXNzIERlY29kZXI7Ci19Ci0KIG5h
bWVzcGFjZSBLSU8gewogICAgIGNsYXNzIEpvYjsKICAgICBjbGFzcyBUcmFuc2ZlckpvYjsKIH0K
IAotbmFtZXNwYWNlIEtKUyB7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgY2xhc3MgSlNVbnBy
b3RlY3RlZEV2ZW50TGlzdGVuZXI7CisgIGNsYXNzIERlY29kZXI7CisgIGNsYXNzIERvY3VtZW50
SW1wbDsKKyAgY2xhc3MgRXZlbnRMaXN0ZW5lcjsKICAgY2xhc3MgWE1MSHR0cFJlcXVlc3RRT2Jq
ZWN0OwogCiAgIC8vIHRoZXNlIGV4YWN0IG51bWVyaWMgdmFsdWVzIGFyZSBpbXBvcnRhbnQgYmVj
YXVzZSBKUyBleHBlY3RzIHRoZW0KQEAgLTUyLDQxICs1MCwzNSBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICBDb21wbGV0ZWQgPSA0ICAgICAgIC8vIEZpbmlzaGVkIHdpdGggYWxsIG9wZXJhdGlvbnMK
ICAgfTsKIAotICBjbGFzcyBYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wIDogcHVibGljIEpT
T2JqZWN0IHsKLSAgcHVibGljOgotICAgIFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXAoRXhl
Y1N0YXRlICpleGVjLCBET006OkRvY3VtZW50SW1wbCAqZCk7Ci0gICAgflhNTEh0dHBSZXF1ZXN0
Q29uc3RydWN0b3JJbXAoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NvbnN0cnVjdCgp
IGNvbnN0OwotICAgIHZpcnR1YWwgSlNPYmplY3QgKmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IExpc3QgJmFyZ3MpOwotICBwcml2YXRlOgotICAgIFJlZlB0cjxET006OkRvY3VtZW50
SW1wbD4gZG9jOwotICB9OwotCi0gIGNsYXNzIFhNTEh0dHBSZXF1ZXN0IDogcHVibGljIERPTU9i
amVjdCB7CisgIGNsYXNzIFhNTEh0dHBSZXF1ZXN0IDogcHVibGljIFNoYXJlZDxYTUxIdHRwUmVx
dWVzdD4gewogICBwdWJsaWM6Ci0gICAgWE1MSHR0cFJlcXVlc3QoRXhlY1N0YXRlICosIERPTTo6
RG9jdW1lbnRJbXBsICpkKTsKKyAgICBYTUxIdHRwUmVxdWVzdChEb2N1bWVudEltcGwqIGQpOwog
ICAgIH5YTUxIdHRwUmVxdWVzdCgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBK
U1ZhbHVlICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmll
ciAmcHJvcGVydHlOYW1lLCBKU1ZhbHVlICp2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKLSAgICB2
b2lkIHB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEpTVmFsdWUg
KnZhbHVlLCBpbnQgLyphdHRyKi8pOwotICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0
YXRlICopIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOwot
Ci0gICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJu
ICZpbmZvOyB9Ci0gICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwotICAgIGVudW0geyBP
bmxvYWQsIE9ucmVhZHlzdGF0ZWNoYW5nZSwgUmVhZHlTdGF0ZSwgUmVzcG9uc2VUZXh0LCBSZXNw
b25zZVhNTCwgU3RhdHVzLAotICAgICAgICBTdGF0dXNUZXh0LCBBYm9ydCwgR2V0QWxsUmVzcG9u
c2VIZWFkZXJzLCBHZXRSZXNwb25zZUhlYWRlciwgT3BlbiwgU2VuZCwgU2V0UmVxdWVzdEhlYWRl
ciwKLSAgICAgICAgT3ZlcnJpZGVNSU1FVHlwZSB9OwogCi0gICAgc3RhdGljIHZvaWQgY2FuY2Vs
UmVxdWVzdHMoRE9NOjpEb2N1bWVudEltcGwgKmQpOworICAgIHN0YXRpYyB2b2lkIGNhbmNlbFJl
cXVlc3RzKERvY3VtZW50SW1wbCAqZCk7CisKKyAgICBET01TdHJpbmcgZ2V0U3RhdHVzVGV4dCgp
IGNvbnN0OworICAgIGludCBnZXRTdGF0dXMoKSBjb25zdDsKKyAgICBYTUxIdHRwUmVxdWVzdFN0
YXRlIGdldFJlYWR5U3RhdGUoKSBjb25zdDsKKyAgICB2b2lkIG9wZW4oY29uc3QgRE9NU3RyaW5n
JiBtZXRob2QsIGNvbnN0IEtVUkwmIHVybCwgYm9vbCBhc3luYywgY29uc3QgRE9NU3RyaW5nJiB1
c2VyLCBjb25zdCBET01TdHJpbmcmIHBhc3N3b3JkKTsKKyAgICB2b2lkIHNlbmQoY29uc3QgRE9N
U3RyaW5nJiBfYm9keSk7CisgICAgdm9pZCBhYm9ydCgpOworICAgIHZvaWQgc2V0UmVxdWVzdEhl
YWRlcihjb25zdCBET01TdHJpbmcmIG5hbWUsIGNvbnN0IERPTVN0cmluZyAmdmFsdWUpOworICAg
IHZvaWQgb3ZlcnJpZGVNSU1FVHlwZShjb25zdCBET01TdHJpbmcmIG92ZXJyaWRlKTsKKyAgICBE
T01TdHJpbmcgZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgY29uc3Q7CisgICAgRE9NU3RyaW5nIGdl
dFJlc3BvbnNlSGVhZGVyKGNvbnN0IERPTVN0cmluZyYgbmFtZSkgY29uc3Q7CisgICAgRE9NU3Ry
aW5nIGdldFJlc3BvbnNlVGV4dCgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRJbXBs
PiBnZXRSZXNwb25zZVhNTCgpIGNvbnN0OworCisgICAgdm9pZCBzZXRPblJlYWR5U3RhdGVDaGFu
Z2VMaXN0ZW5lcihFdmVudExpc3RlbmVyKiBldmVudExpc3RlbmVyKTsKKyAgICBQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGdldE9uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRPbkxvYWRMaXN0ZW5lcihFdmVudExpc3RlbmVyKiBldmVudExpc3RlbmVyKTsK
KyAgICBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGdldE9uTG9hZExpc3RlbmVyKCkgY29uc3Q7
CiAKICAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgWE1MSHR0cFJlcXVlc3RQcm90b0Z1bmM7
CiAgICAgZnJpZW5kIGNsYXNzIFhNTEh0dHBSZXF1ZXN0UU9iamVjdDsKIAotICAgIEpTVmFsdWUg
KmdldFN0YXR1c1RleHQoKSBjb25zdDsKLSAgICBKU1ZhbHVlICpnZXRTdGF0dXMoKSBjb25zdDsK
ICAgICBib29sIHVybE1hdGNoZXNEb2N1bWVudERvbWFpbihjb25zdCBLVVJMJikgY29uc3Q7CiAK
ICAgICBYTUxIdHRwUmVxdWVzdFFPYmplY3QgKnFPYmplY3Q7CkBAIC05NywyNiArODksMjIgQEAg
bmFtZXNwYWNlIEtKUyB7CiAKICAgICB2b2lkIHByb2Nlc3NTeW5jTG9hZFJlc3VsdHMoY29uc3Qg
Qnl0ZUFycmF5ICZkYXRhLCBjb25zdCBLVVJMICZmaW5hbFVSTCwgY29uc3QgUVN0cmluZyAmaGVh
ZGVycyk7CiAKLSAgICB2b2lkIG9wZW4oY29uc3QgUVN0cmluZyYgX21ldGhvZCwgY29uc3QgS1VS
TCYgX3VybCwgYm9vbCBfYXN5bmMpOwotICAgIHZvaWQgc2VuZChjb25zdCBET006OkRPTVN0cmlu
ZyYgX2JvZHkpOwotICAgIHZvaWQgYWJvcnQoKTsKLSAgICB2b2lkIHNldFJlcXVlc3RIZWFkZXIo
Y29uc3QgUVN0cmluZyYgbmFtZSwgY29uc3QgUVN0cmluZyAmdmFsdWUpOwotICAgIFFTdHJpbmcg
Z2V0UmVxdWVzdEhlYWRlcihjb25zdCBRU3RyaW5nJiBuYW1lKSBjb25zdDsKLSAgICBKU1ZhbHVl
ICpnZXRBbGxSZXNwb25zZUhlYWRlcnMoKSBjb25zdDsKLSAgICBRU3RyaW5nIGdldFJlc3BvbnNl
SGVhZGVyKGNvbnN0IFFTdHJpbmcmIG5hbWUpIGNvbnN0OwogICAgIGJvb2wgcmVzcG9uc2VJc1hN
TCgpIGNvbnN0OwogICAgIAorICAgIFFTdHJpbmcgZ2V0UmVxdWVzdEhlYWRlcihjb25zdCBRU3Ry
aW5nJiBuYW1lKSBjb25zdDsKICAgICBzdGF0aWMgUVN0cmluZyBnZXRTcGVjaWZpY0hlYWRlcihj
b25zdCBRU3RyaW5nJiBoZWFkZXJzLCBjb25zdCBRU3RyaW5nJiBuYW1lKTsKIAogICAgIHZvaWQg
Y2hhbmdlU3RhdGUoWE1MSHR0cFJlcXVlc3RTdGF0ZSBuZXdTdGF0ZSk7CiAKICAgICB0eXBlZGVm
IEhhc2hTZXQ8WE1MSHR0cFJlcXVlc3QqLCBQb2ludGVySGFzaDxYTUxIdHRwUmVxdWVzdCo+ID4g
UmVxdWVzdHNTZXQ7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPERPTTo6RG9jdW1lbnRJbXBsKiwgUmVx
dWVzdHNTZXQqLCBQb2ludGVySGFzaDxET006OkRvY3VtZW50SW1wbCo+ID4gUmVxdWVzdHNNYXA7
CisgICAgdHlwZWRlZiBIYXNoTWFwPERvY3VtZW50SW1wbCosIFJlcXVlc3RzU2V0KiwgUG9pbnRl
ckhhc2g8RG9jdW1lbnRJbXBsKj4gPiBSZXF1ZXN0c01hcDsKICAgICBzdGF0aWMgUmVxdWVzdHNN
YXAgJnJlcXVlc3RzQnlEb2N1bWVudCgpOwogICAgIHZvaWQgYWRkVG9SZXF1ZXN0c0J5RG9jdW1l
bnQoKTsKICAgICB2b2lkIHJlbW92ZUZyb21SZXF1ZXN0c0J5RG9jdW1lbnQoKTsKIAotICAgIFFH
dWFyZGVkUHRyPERPTTo6RG9jdW1lbnRJbXBsPiBkb2M7CisgICAgUUd1YXJkZWRQdHI8RG9jdW1l
bnRJbXBsPiBkb2M7CisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG9uUmVhZHlTdGF0ZUNoYW5n
ZUxpc3RlbmVyOworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBvbkxvYWRMaXN0ZW5lcjsKIAog
ICAgIEtVUkwgdXJsOwogICAgIFFTdHJpbmcgbWV0aG9kOwpAQCAtMTI2LDggKzExNCw2IEBAIG5h
bWVzcGFjZSBLSlMgewogICAgIEtJTzo6VHJhbnNmZXJKb2IgKiBqb2I7CiAKICAgICBYTUxIdHRw
UmVxdWVzdFN0YXRlIHN0YXRlOwotICAgIFJlZlB0cjxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5l
cj4gb25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXI7Ci0gICAgUmVmUHRyPEpTVW5wcm90ZWN0ZWRF
dmVudExpc3RlbmVyPiBvbkxvYWRMaXN0ZW5lcjsKIAogICAgIFJlZlB0cjxraHRtbDo6RGVjb2Rl
cj4gZGVjb2RlcjsKICAgICBRU3RyaW5nIGVuY29kaW5nOwpAQCAtMTM3LDcgKzEyMyw3IEBAIG5h
bWVzcGFjZSBLSlMgewogICAgIFFTdHJpbmcgcmVzcG9uc2U7CiAgICAgbXV0YWJsZSBib29sIGNy
ZWF0ZWREb2N1bWVudDsKICAgICBtdXRhYmxlIGJvb2wgdHlwZUlzWE1MOwotICAgIG11dGFibGUg
UmVmUHRyPERPTTo6RG9jdW1lbnRJbXBsPiByZXNwb25zZVhNTDsKKyAgICBtdXRhYmxlIFJlZlB0
cjxEb2N1bWVudEltcGw+IHJlc3BvbnNlWE1MOwogCiAgICAgYm9vbCBhYm9ydGVkOwogICB9OwpJ
bmRleDoga2h0bWwvZWNtYS9ranNfYmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2VjbWEv
a2pzX2JpbmRpbmcuaAkocmV2aXNpb24gMTIyNjcpCisrKyBraHRtbC9lY21hL2tqc19iaW5kaW5n
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw2ICsxNTUsMTEgQEAgbmFtZXNwYWNlIEtKUyB7CiAg
IEpTVmFsdWUgKmpzU3RyaW5nT3JOdWxsKGNvbnN0IERPTTo6RE9NU3RyaW5nJik7CiAKICAgLyoq
CisgICAqICBHZXQgYSBTdHJpbmcgb2JqZWN0LCBvciBqc1VuZGVmaW5lZCgpIGlmIHMgaXMgbnVs
bAorICAgKi8KKyAgSlNWYWx1ZSAqanNTdHJpbmdPclVuZGVmaW5lZChjb25zdCBXZWJDb3JlOjpE
T01TdHJpbmcmKTsKKworICAvKioKICAgICogIEdldCBhIERPTVN0cmluZyBvYmplY3Qgb3IgYSBu
dWxsIERPTVN0cmluZyBpZiB0aGUgdmFsdWUgaXMgbnVsbAogICAgKi8KICAgRE9NOjpET01TdHJp
bmcgdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlICp2
YWwpOwpJbmRleDoga2h0bWwvZWNtYS9KU1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBraHRtbC9lY21hL0pTWE1MSHR0cFJlcXVlc3QuY3BwCShyZXZpc2lvbiAxMjE3MCkKKysrIGto
dG1sL2VjbWEvSlNYTUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3
IEBACiAvKgogICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgbGlicmFyaWVzCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDA1IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDUsIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgogICoKICAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwpAQCAtMTksMjM0ICsxOSwxNDggQEAKICAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSlNYTUxIdHRwUmVxdWVzdC5oIgogI2luY2x1ZGUgInhtbGh0dHBy
ZXF1ZXN0LmgiCiAKICNpbmNsdWRlICJranNfd2luZG93LmgiCiAjaW5jbHVkZSAia2pzX2V2ZW50
cy5oIgogCi0jaW5jbHVkZSAiZG9tL2RvbV9leGNlcHRpb24uaCIKICNpbmNsdWRlICJkb20vZG9t
X3N0cmluZy5oIgotI2luY2x1ZGUgIkNhY2hlLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2RvY3Vt
ZW50aW1wbC5oIgotI2luY2x1ZGUgInhtbC9kb20yX2V2ZW50c2ltcGwuaCIKLSNpbmNsdWRlICJ4
bWwvRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uSW1wbC5oIgogCiAj
aW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJKU1hNTEh0dHBSZXF1ZXN0Lmx1dC5oIgogCi0j
aW5jbHVkZSA8a2RlYnVnLmg+Ci0jaW5jbHVkZSA8a2lvL2pvYi5oPgotI2luY2x1ZGUgPHFvYmpl
Y3QuaD4KLSNpbmNsdWRlIDxxcmVnZXhwLmg+Ci0jaW5jbHVkZSA8cXRleHRjb2RlYy5oPgordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLSNpbmNsdWRlICJLV1FMb2FkZXIuaCIKLQotI2luY2x1
ZGUgInhtbGh0dHByZXF1ZXN0Lmx1dC5oIgotCi11c2luZyBuYW1lc3BhY2UgRE9NOwotdXNpbmcg
bmFtZXNwYWNlIERPTTo6RXZlbnROYW1lczsKLQotdXNpbmcga2h0bWw6OkRlY29kZXI7Ci0KLXN0
YXRpYyBpbmxpbmUgUVN0cmluZyBnZXRNSU1FVHlwZShjb25zdCBRU3RyaW5nJiBjb250ZW50VHlw
ZVN0cmluZykKLXsKLSAgICByZXR1cm4gUVN0cmluZ0xpc3Q6OnNwbGl0KCI7IiwgY29udGVudFR5
cGVTdHJpbmcsIHRydWUpWzBdLnN0cmlwV2hpdGVTcGFjZSgpOwotfQotCi1zdGF0aWMgUVN0cmlu
ZyBnZXRDaGFyc2V0KGNvbnN0IFFTdHJpbmcmIGNvbnRlbnRUeXBlU3RyaW5nKQotewotICAgIGlu
dCBwb3MgPSAwOwotICAgIGludCBsZW5ndGggPSAoaW50KWNvbnRlbnRUeXBlU3RyaW5nLmxlbmd0
aCgpOwotICAgIAotICAgIHdoaWxlIChwb3MgPCBsZW5ndGgpIHsKLSAgICAgICAgcG9zID0gY29u
dGVudFR5cGVTdHJpbmcuZmluZCgiY2hhcnNldCIsIHBvcywgZmFsc2UpOwotICAgICAgICBpZiAo
cG9zIDw9IDApCi0gICAgICAgICAgICByZXR1cm4gUVN0cmluZygpOwotICAgICAgICAKLSAgICAg
ICAgLy8gaXMgd2hhdCB3ZSBmb3VuZCBhIGJlZ2lubmluZyBvZiBhIHdvcmQ/Ci0gICAgICAgIGlm
IChjb250ZW50VHlwZVN0cmluZ1twb3MtMV0gPiAnICcgJiYgY29udGVudFR5cGVTdHJpbmdbcG9z
LTFdICE9ICc7JykgewotICAgICAgICAgICAgcG9zICs9IDc7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcG9zICs9IDc7Ci0KLSAgICAgICAgLy8g
c2tpcCB3aGl0ZXNwYWNlCi0gICAgICAgIHdoaWxlIChwb3MgIT0gbGVuZ3RoICYmIGNvbnRlbnRU
eXBlU3RyaW5nW3Bvc10gPD0gJyAnKQotICAgICAgICAgICAgKytwb3M7Ci0gICAgCi0gICAgICAg
IGlmIChjb250ZW50VHlwZVN0cmluZ1twb3MrK10gIT0gJz0nKSAvLyB0aGlzICJjaGFyc2V0IiBz
dWJzdHJpbmcgd2Fzbid0IGEgcGFyYW1ldGVyIG5hbWUsIGJ1dCB0aGVyZSBtYXkgYmUgb3RoZXJz
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICB3aGlsZSAocG9zICE9IGxlbmd0aCAm
JiAoY29udGVudFR5cGVTdHJpbmdbcG9zXSA8PSAnICcgfHwgY29udGVudFR5cGVTdHJpbmdbcG9z
XSA9PSAnIicgfHwgY29udGVudFR5cGVTdHJpbmdbcG9zXSA9PSAnXCcnKSkKLSAgICAgICAgICAg
ICsrcG9zOwotCi0gICAgICAgIC8vIHdlIGRvbid0IGhhbmRsZSBzcGFjZXMgd2l0aGluIHF1b3Rl
ZCBwYXJhbWV0ZXIgdmFsdWVzLCBiZWNhdXNlIGNoYXJzZXQgbmFtZXMgY2Fubm90IGhhdmUgYW55
Ci0gICAgICAgIGludCBlbmRwb3MgPSBwb3M7Ci0gICAgICAgIHdoaWxlIChwb3MgIT0gbGVuZ3Ro
ICYmIGNvbnRlbnRUeXBlU3RyaW5nW2VuZHBvc10gPiAnICcgJiYgY29udGVudFR5cGVTdHJpbmdb
ZW5kcG9zXSAhPSAnIicgJiYgY29udGVudFR5cGVTdHJpbmdbZW5kcG9zXSAhPSAnXCcnICYmIGNv
bnRlbnRUeXBlU3RyaW5nW2VuZHBvc10gIT0gJzsnKQotICAgICAgICAgICAgKytlbmRwb3M7Ci0g
ICAgCi0gICAgICAgIHJldHVybiBjb250ZW50VHlwZVN0cmluZy5taWQocG9zLCBlbmRwb3MtcG9z
KTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIFFTdHJpbmcoKTsKLX0KIAogbmFtZXNwYWNlIEtK
UyB7CiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gWE1MSHR0cFJlcXVlc3QgT2JqZWN0IC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBKU1hNTEh0dHBSZXF1
ZXN0IE9iamVjdCAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotLyogU291cmNlIGZvciBYTUxI
dHRwUmVxdWVzdFByb3RvVGFibGUuCi1AYmVnaW4gWE1MSHR0cFJlcXVlc3RQcm90b1RhYmxlIDcK
LSAgYWJvcnQgICAgICAgICAgICAgICAgIFhNTEh0dHBSZXF1ZXN0OjpBYm9ydCAgICAgICAgICAg
ICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDAKLSAgZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIFhN
TEh0dHBSZXF1ZXN0OjpHZXRBbGxSZXNwb25zZUhlYWRlcnMgICBEb250RGVsZXRlfEZ1bmN0aW9u
IDAKLSAgZ2V0UmVzcG9uc2VIZWFkZXIgICAgIFhNTEh0dHBSZXF1ZXN0OjpHZXRSZXNwb25zZUhl
YWRlciAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDEKLSAgb3BlbiAgICAgICAgICAgICAgICAg
IFhNTEh0dHBSZXF1ZXN0OjpPcGVuICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfEZ1bmN0
aW9uIDUKLSAgb3ZlcnJpZGVNaW1lVHlwZSAgICAgIFhNTEh0dHBSZXF1ZXN0OjpPdmVycmlkZU1J
TUVUeXBlICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDEKLSAgc2VuZCAgICAgICAgICAgICAg
ICAgIFhNTEh0dHBSZXF1ZXN0OjpTZW5kICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfEZ1
bmN0aW9uIDEKLSAgc2V0UmVxdWVzdEhlYWRlciAgICAgIFhNTEh0dHBSZXF1ZXN0OjpTZXRSZXF1
ZXN0SGVhZGVyICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDIKKy8qIFNvdXJjZSBmb3IgSlNY
TUxIdHRwUmVxdWVzdFByb3RvVGFibGUuCitAYmVnaW4gSlNYTUxIdHRwUmVxdWVzdFByb3RvVGFi
bGUgNworICBhYm9ydCAgICAgICAgICAgICAgICAgSlNYTUxIdHRwUmVxdWVzdDo6QWJvcnQgICAg
ICAgICAgICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAwCisgIGdldEFsbFJlc3BvbnNlSGVh
ZGVycyBKU1hNTEh0dHBSZXF1ZXN0OjpHZXRBbGxSZXNwb25zZUhlYWRlcnMgICBEb250RGVsZXRl
fEZ1bmN0aW9uIDAKKyAgZ2V0UmVzcG9uc2VIZWFkZXIgICAgIEpTWE1MSHR0cFJlcXVlc3Q6Okdl
dFJlc3BvbnNlSGVhZGVyICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMQorICBvcGVuICAgICAg
ICAgICAgICAgICAgSlNYTUxIdHRwUmVxdWVzdDo6T3BlbiAgICAgICAgICAgICAgICAgICAgRG9u
dERlbGV0ZXxGdW5jdGlvbiA1CisgIG92ZXJyaWRlTWltZVR5cGUgICAgICBKU1hNTEh0dHBSZXF1
ZXN0OjpPdmVycmlkZU1JTUVUeXBlICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDEKKyAgc2Vu
ZCAgICAgICAgICAgICAgICAgIEpTWE1MSHR0cFJlcXVlc3Q6OlNlbmQgICAgICAgICAgICAgICAg
ICAgIERvbnREZWxldGV8RnVuY3Rpb24gMQorICBzZXRSZXF1ZXN0SGVhZGVyICAgICAgSlNYTUxI
dHRwUmVxdWVzdDo6U2V0UmVxdWVzdEhlYWRlciAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAy
CiBAZW5kCiAqLwotS0pTX0RFRklORV9QUk9UT1RZUEUoWE1MSHR0cFJlcXVlc3RQcm90bykKLUtK
U19JTVBMRU1FTlRfUFJPVE9GVU5DKFhNTEh0dHBSZXF1ZXN0UHJvdG9GdW5jKQotS0pTX0lNUExF
TUVOVF9QUk9UT1RZUEUoIlhNTEh0dHBSZXF1ZXN0IixYTUxIdHRwUmVxdWVzdFByb3RvLFhNTEh0
dHBSZXF1ZXN0UHJvdG9GdW5jKQorS0pTX0RFRklORV9QUk9UT1RZUEUoSlNYTUxIdHRwUmVxdWVz
dFByb3RvKQorS0pTX0lNUExFTUVOVF9QUk9UT0ZVTkMoSlNYTUxIdHRwUmVxdWVzdFByb3RvRnVu
YykKK0tKU19JTVBMRU1FTlRfUFJPVE9UWVBFKCJKU1hNTEh0dHBSZXF1ZXN0IiwgSlNYTUxIdHRw
UmVxdWVzdFByb3RvLCBKU1hNTEh0dHBSZXF1ZXN0UHJvdG9GdW5jKQogCi1YTUxIdHRwUmVxdWVz
dFFPYmplY3Q6OlhNTEh0dHBSZXF1ZXN0UU9iamVjdChYTUxIdHRwUmVxdWVzdCAqX2pzT2JqZWN0
KSAKLXsKLSAganNPYmplY3QgPSBfanNPYmplY3Q7IAotfQotCi12b2lkIFhNTEh0dHBSZXF1ZXN0
UU9iamVjdDo6c2xvdERhdGEoIEtJTzo6Sm9iKiBqb2IsIGNvbnN0IGNoYXIgKmRhdGEsIGludCBz
aXplICkKLXsKLSAganNPYmplY3QtPnNsb3REYXRhKGpvYiwgZGF0YSwgc2l6ZSk7Ci19Ci0KLXZv
aWQgWE1MSHR0cFJlcXVlc3RRT2JqZWN0OjpzbG90RmluaXNoZWQoIEtJTzo6Sm9iKiBqb2IgKQot
ewotICBqc09iamVjdC0+c2xvdEZpbmlzaGVkKGpvYik7IAotfQogCi12b2lkIFhNTEh0dHBSZXF1
ZXN0UU9iamVjdDo6c2xvdFJlZGlyZWN0aW9uKCBLSU86OkpvYiogam9iLCBjb25zdCBLVVJMJiB1
cmwpCi17IAotICBqc09iamVjdC0+c2xvdFJlZGlyZWN0aW9uKCBqb2IsIHVybCApOyAKLX0KLQot
WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3RvckltcDo6WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvcklt
cChFeGVjU3RhdGUgKmV4ZWMsIERPTTo6RG9jdW1lbnRJbXBsICpkKQorSlNYTUxIdHRwUmVxdWVz
dENvbnN0cnVjdG9ySW1wOjpKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXAoRXhlY1N0YXRl
ICpleGVjLCBEb2N1bWVudEltcGwgKmQpCiAgICAgOiBkb2MoZCkKIHsKLSAgICBwdXREaXJlY3Qo
cHJvdG90eXBlUHJvcGVydHlOYW1lLCBYTUxIdHRwUmVxdWVzdFByb3RvOjpzZWxmKGV4ZWMpLCBE
b250RW51bXxEb250RGVsZXRlfFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3QocHJvdG90eXBlUHJv
cGVydHlOYW1lLCBKU1hNTEh0dHBSZXF1ZXN0UHJvdG86OnNlbGYoZXhlYyksIERvbnRFbnVtfERv
bnREZWxldGV8UmVhZE9ubHkpOwogfQogCi1YTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wOjp+
WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3RvckltcCgpCitKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0
b3JJbXA6On5KU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXAoKQogewogfQogCi1ib29sIFhN
TEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXA6OmltcGxlbWVudHNDb25zdHJ1Y3QoKSBjb25zdAor
Ym9vbCBKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXA6OmltcGxlbWVudHNDb25zdHJ1Y3Qo
KSBjb25zdAogewogICByZXR1cm4gdHJ1ZTsKIH0KIAotSlNPYmplY3QgKlhNTEh0dHBSZXF1ZXN0
Q29uc3RydWN0b3JJbXA6OmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJikK
K0pTT2JqZWN0ICpKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXA6OmNvbnN0cnVjdChFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJikKIHsKLSAgcmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVz
dChleGVjLCBkb2MuZ2V0KCkpOworICByZXR1cm4gbmV3IEpTWE1MSHR0cFJlcXVlc3QoZXhlYywg
ZG9jLmdldCgpKTsKIH0KIAotY29uc3QgQ2xhc3NJbmZvIFhNTEh0dHBSZXF1ZXN0OjppbmZvID0g
eyAiWE1MSHR0cFJlcXVlc3QiLCAwLCAmWE1MSHR0cFJlcXVlc3RUYWJsZSwgMCB9OworY29uc3Qg
Q2xhc3NJbmZvIEpTWE1MSHR0cFJlcXVlc3Q6OmluZm8gPSB7ICJKU1hNTEh0dHBSZXF1ZXN0Iiwg
MCwgJkpTWE1MSHR0cFJlcXVlc3RUYWJsZSwgMCB9OwogCi0vKiBTb3VyY2UgZm9yIFhNTEh0dHBS
ZXF1ZXN0VGFibGUuCi1AYmVnaW4gWE1MSHR0cFJlcXVlc3RUYWJsZSA3Ci0gIHJlYWR5U3RhdGUg
ICAgICAgICAgICBYTUxIdHRwUmVxdWVzdDo6UmVhZHlTdGF0ZSAgICAgICAgICAgICAgRG9udERl
bGV0ZXxSZWFkT25seQotICByZXNwb25zZVRleHQgICAgICAgICAgWE1MSHR0cFJlcXVlc3Q6OlJl
c3BvbnNlVGV4dCAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgcmVzcG9uc2VYTUwg
ICAgICAgICAgIFhNTEh0dHBSZXF1ZXN0OjpSZXNwb25zZVhNTCAgICAgICAgICAgICBEb250RGVs
ZXRlfFJlYWRPbmx5Ci0gIHN0YXR1cyAgICAgICAgICAgICAgICBYTUxIdHRwUmVxdWVzdDo6U3Rh
dHVzICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBzdGF0dXNUZXh0ICAg
ICAgICAgICAgWE1MSHR0cFJlcXVlc3Q6OlN0YXR1c1RleHQgICAgICAgICAgICAgIERvbnREZWxl
dGV8UmVhZE9ubHkKLSAgb25yZWFkeXN0YXRlY2hhbmdlICAgIFhNTEh0dHBSZXF1ZXN0OjpPbnJl
YWR5c3RhdGVjaGFuZ2UgICAgICBEb250RGVsZXRlCi0gIG9ubG9hZCAgICAgICAgICAgICAgICBY
TUxIdHRwUmVxdWVzdDo6T25sb2FkICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZQorLyogU291
cmNlIGZvciBKU1hNTEh0dHBSZXF1ZXN0VGFibGUuCitAYmVnaW4gSlNYTUxIdHRwUmVxdWVzdFRh
YmxlIDcKKyAgcmVhZHlTdGF0ZSAgICAgICAgICAgIEpTWE1MSHR0cFJlcXVlc3Q6OlJlYWR5U3Rh
dGUgICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKKyAgcmVzcG9uc2VUZXh0ICAgICAg
ICAgIEpTWE1MSHR0cFJlcXVlc3Q6OlJlc3BvbnNlVGV4dCAgICAgICAgICAgIERvbnREZWxldGV8
UmVhZE9ubHkKKyAgcmVzcG9uc2VYTUwgICAgICAgICAgIEpTWE1MSHR0cFJlcXVlc3Q6OlJlc3Bv
bnNlWE1MICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKKyAgc3RhdHVzICAgICAgICAg
ICAgICAgIEpTWE1MSHR0cFJlcXVlc3Q6OlN0YXR1cyAgICAgICAgICAgICAgICAgIERvbnREZWxl
dGV8UmVhZE9ubHkKKyAgc3RhdHVzVGV4dCAgICAgICAgICAgIEpTWE1MSHR0cFJlcXVlc3Q6OlN0
YXR1c1RleHQgICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKKyAgb25yZWFkeXN0YXRl
Y2hhbmdlICAgIEpTWE1MSHR0cFJlcXVlc3Q6Ok9ucmVhZHlzdGF0ZWNoYW5nZSAgICAgIERvbnRE
ZWxldGUKKyAgb25sb2FkICAgICAgICAgICAgICAgIEpTWE1MSHR0cFJlcXVlc3Q6Ok9ubG9hZCAg
ICAgICAgICAgICAgICAgIERvbnREZWxldGUKIEBlbmQKICovCiAKLWJvb2wgWE1MSHR0cFJlcXVl
c3Q6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBKU1hNTEh0dHBSZXF1ZXN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgcmV0dXJuIGdldFN0YXRpY1Zh
bHVlU2xvdDxYTUxIdHRwUmVxdWVzdCwgRE9NT2JqZWN0PihleGVjLCAmWE1MSHR0cFJlcXVlc3RU
YWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgcmV0dXJuIGdldFN0YXRpY1ZhbHVl
U2xvdDxKU1hNTEh0dHBSZXF1ZXN0LCBET01PYmplY3Q+KGV4ZWMsICZKU1hNTEh0dHBSZXF1ZXN0
VGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLUpTVmFsdWUgKlhNTEh0dHBS
ZXF1ZXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAorSlNWYWx1ZSAqSlNYTUxIdHRwUmVxdWVzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgc3dpdGNoICh0b2tlbikgewogICBjYXNlIFJl
YWR5U3RhdGU6Ci0gICAgcmV0dXJuIGpzTnVtYmVyKHN0YXRlKTsKKyAgICByZXR1cm4ganNOdW1i
ZXIobV9pbXBsLT5nZXRSZWFkeVN0YXRlKCkpOwogICBjYXNlIFJlc3BvbnNlVGV4dDoKLSAgICBy
ZXR1cm4ganNTdHJpbmdPck51bGwoRE9NOjpET01TdHJpbmcocmVzcG9uc2UpKTsKLSAgY2FzZSBS
ZXNwb25zZVhNTDoKLSAgICBpZiAoc3RhdGUgIT0gQ29tcGxldGVkKSB7CisgICAgcmV0dXJuIGpz
U3RyaW5nT3JOdWxsKG1faW1wbC0+Z2V0UmVzcG9uc2VUZXh0KCkpOworICBjYXNlIFJlc3BvbnNl
WE1MOiB7CisgICAgUmVmUHRyPERvY3VtZW50SW1wbD4gcmVzcG9uc2VYTUwgPSBtX2ltcGwtPmdl
dFJlc3BvbnNlWE1MKCk7CisgICAgaWYgKHJlc3BvbnNlWE1MLmdldCgpKQorICAgICAgcmV0dXJu
IGdldERPTU5vZGUoZXhlYywgcmVzcG9uc2VYTUwuZ2V0KCkpOworICAgIGVsc2UKICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLQotICAgIGlmICghY3JlYXRlZERvY3VtZW50KSB7
Ci0gICAgICBpZiAodHlwZUlzWE1MID0gcmVzcG9uc2VJc1hNTCgpKSB7Ci0gICAgICAgIHJlc3Bv
bnNlWE1MID0gZG9jLT5pbXBsZW1lbnRhdGlvbigpLT5jcmVhdGVEb2N1bWVudCgpOwotCi0gICAg
ICAgIERvY3VtZW50SW1wbCAqZG9jSW1wbCA9IHJlc3BvbnNlWE1MLmdldCgpOwotICAgICAgICAK
LSAgICAgICAgZG9jSW1wbC0+b3BlbigpOwotICAgICAgICBkb2NJbXBsLT53cml0ZShyZXNwb25z
ZSk7Ci0gICAgICAgIGRvY0ltcGwtPmZpbmlzaFBhcnNpbmcoKTsKLSAgICAgICAgZG9jSW1wbC0+
Y2xvc2UoKTsKLSAgICAgIH0KLSAgICAgIGNyZWF0ZWREb2N1bWVudCA9IHRydWU7Ci0gICAgfQot
Ci0gICAgaWYgKCF0eXBlSXNYTUwpIHsKLSAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAg
IH0KLQotICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHJlc3BvbnNlWE1MLmdldCgpKTsKKyAg
fQogICBjYXNlIFN0YXR1czoKLSAgICByZXR1cm4gZ2V0U3RhdHVzKCk7CisgICAgaW50IHN0YXR1
cyA9IG1faW1wbC0+Z2V0U3RhdHVzKCk7CisgICAgcmV0dXJuIHN0YXR1cyA+IDAgPyBqc051bWJl
cihzdGF0dXMpIDoganNVbmRlZmluZWQoKTsKICAgY2FzZSBTdGF0dXNUZXh0OgotICAgIHJldHVy
biBnZXRTdGF0dXNUZXh0KCk7CisgICAgcmV0dXJuIGpzU3RyaW5nT3JVbmRlZmluZWQobV9pbXBs
LT5nZXRTdGF0dXNUZXh0KCkpOwogICBjYXNlIE9ucmVhZHlzdGF0ZWNoYW5nZToKLSAgIGlmIChv
blJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lciAmJiBvblJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lci0+
bGlzdGVuZXJPYmooKSkgewotICAgICByZXR1cm4gb25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIt
Pmxpc3RlbmVyT2JqKCk7Ci0gICB9IGVsc2UgewotICAgICByZXR1cm4ganNOdWxsKCk7CisgICBK
U1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogb25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIgPSBz
dGF0aWNfY2FzdDxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcio+KG1faW1wbC0+Z2V0T25SZWFk
eVN0YXRlQ2hhbmdlTGlzdGVuZXIoKS5nZXQoKSk7CisgICBpZiAob25SZWFkeVN0YXRlQ2hhbmdl
TGlzdGVuZXIpIHsKKyAgICAgIEpTT2JqZWN0KiBsaXN0ZW5lck9iaiA9IG9uUmVhZHlTdGF0ZUNo
YW5nZUxpc3RlbmVyLT5saXN0ZW5lck9iaigpOworICAgICAgaWYgKGxpc3RlbmVyT2JqKQorICAg
ICAgICByZXR1cm4gbGlzdGVuZXJPYmo7CiAgICB9CisgICByZXR1cm4ganNOdWxsKCk7CiAgIGNh
c2UgT25sb2FkOgotICAgaWYgKG9uTG9hZExpc3RlbmVyICYmIG9uTG9hZExpc3RlbmVyLT5saXN0
ZW5lck9iaigpKSB7Ci0gICAgIHJldHVybiBvbkxvYWRMaXN0ZW5lci0+bGlzdGVuZXJPYmooKTsK
LSAgIH0gZWxzZSB7Ci0gICAgIHJldHVybiBqc051bGwoKTsKKyAgIEpTVW5wcm90ZWN0ZWRFdmVu
dExpc3RlbmVyKiBvbkxvYWRMaXN0ZW5lciA9IHN0YXRpY19jYXN0PEpTVW5wcm90ZWN0ZWRFdmVu
dExpc3RlbmVyKj4obV9pbXBsLT5nZXRPbkxvYWRMaXN0ZW5lcigpLmdldCgpKTsKKyAgIGlmIChv
bkxvYWRMaXN0ZW5lcikgeworICAgICAgSlNPYmplY3QqIGxpc3RlbmVyT2JqID0gb25Mb2FkTGlz
dGVuZXItPmxpc3RlbmVyT2JqKCk7CisgICAgICBpZiAobGlzdGVuZXJPYmopCisgICAgICAgIHJl
dHVybiBsaXN0ZW5lck9iajsKICAgIH0KKyAgIHJldHVybiBqc051bGwoKTsKICAgZGVmYXVsdDoK
LSAgICBrZFdhcm5pbmcoKSA8PCAiWE1MSHR0cFJlcXVlc3Q6OmdldFZhbHVlUHJvcGVydHkgdW5o
YW5kbGVkIHRva2VuICIgPDwgdG9rZW4gPDwgZW5kbDsKKy8vICAgIGtkV2FybmluZygpIDw8ICJK
U1hNTEh0dHBSZXF1ZXN0OjpnZXRWYWx1ZVByb3BlcnR5IHVuaGFuZGxlZCB0b2tlbiAiIDw8IHRv
a2VuIDw8IGVuZGw7CiAgICAgcmV0dXJuIE5VTEw7CiAgIH0KIH0KIAotdm9pZCBYTUxIdHRwUmVx
dWVzdDo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1l
LCBKU1ZhbHVlICp2YWx1ZSwgaW50IGF0dHIpCit2b2lkIEpTWE1MSHR0cFJlcXVlc3Q6OnB1dChF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgSlNWYWx1ZSAq
dmFsdWUsIGludCBhdHRyKQogewotICBsb29rdXBQdXQ8WE1MSHR0cFJlcXVlc3QsRE9NT2JqZWN0
PihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAmWE1MSHR0cFJlcXVlc3RUYWJsZSwg
dGhpcyApOworICBsb29rdXBQdXQ8SlNYTUxIdHRwUmVxdWVzdCxET01PYmplY3Q+KGV4ZWMsIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIsICZKU1hNTEh0dHBSZXF1ZXN0VGFibGUsIHRoaXMgKTsK
IH0KIAotdm9pZCBYTUxIdHRwUmVxdWVzdDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgSlNWYWx1ZSAqdmFsdWUsIGludCAvKmF0dHIqLykKK3ZvaWQgSlNYTUxI
dHRwUmVxdWVzdDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
SlNWYWx1ZSAqdmFsdWUsIGludCAvKmF0dHIqLykKIHsKICAgc3dpdGNoKHRva2VuKSB7CiAgIGNh
c2UgT25yZWFkeXN0YXRlY2hhbmdlOgotICAgIG9uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyID0g
V2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+Z2V0SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVu
ZXIodmFsdWUsIHRydWUpOworICAgIG1faW1wbC0+c2V0T25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVu
ZXIoV2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+Z2V0SlNVbnByb3RlY3RlZEV2ZW50TGlz
dGVuZXIodmFsdWUsIHRydWUpKTsKICAgICBicmVhazsKICAgY2FzZSBPbmxvYWQ6Ci0gICAgb25M
b2FkTGlzdGVuZXIgPSBXaW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5nZXRKU1VucHJvdGVj
dGVkRXZlbnRMaXN0ZW5lcih2YWx1ZSwgdHJ1ZSk7CisgICAgbV9pbXBsLT5zZXRPbkxvYWRMaXN0
ZW5lcihXaW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5nZXRKU1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lcih2YWx1ZSwgdHJ1ZSkpOwogICAgIGJyZWFrOwogICBkZWZhdWx0OgotICAgIGtkV2Fy
bmluZygpIDw8ICJIVE1MRG9jdW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkgdW5oYW5kbGVkIHRva2Vu
ICIgPDwgdG9rZW4gPDwgZW5kbDsKKyAgICAgIDsKKy8vICAgIGtkV2FybmluZygpIDw8ICJIVE1M
RG9jdW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkgdW5oYW5kbGVkIHRva2VuICIgPDwgdG9rZW4gPDwg
ZW5kbDsKICAgfQogfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjptYXJrKCkKK3ZvaWQgSlNYTUxI
dHRwUmVxdWVzdDo6bWFyaygpCiB7CiAgIERPTU9iamVjdDo6bWFyaygpOwogCisgIEpTVW5wcm90
ZWN0ZWRFdmVudExpc3RlbmVyKiBvblJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lciA9IHN0YXRpY19j
YXN0PEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKj4obV9pbXBsLT5nZXRPblJlYWR5U3RhdGVD
aGFuZ2VMaXN0ZW5lcigpLmdldCgpKTsKKyAgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIG9u
TG9hZExpc3RlbmVyID0gc3RhdGljX2Nhc3Q8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqPiht
X2ltcGwtPmdldE9uTG9hZExpc3RlbmVyKCkuZ2V0KCkpOworCiAgIGlmIChvblJlYWR5U3RhdGVD
aGFuZ2VMaXN0ZW5lcikKICAgICBvblJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lci0+bWFyaygpOwog
CkBAIC0yNTUsNDk4ICsxNjksNzggQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6bWFyaygpCiB9CiAK
IAotWE1MSHR0cFJlcXVlc3Q6OlhNTEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpE
b2N1bWVudEltcGwgKmQpCi0gIDogcU9iamVjdChuZXcgWE1MSHR0cFJlcXVlc3RRT2JqZWN0KHRo
aXMpKSwKLSAgICBkb2MoZCksCi0gICAgYXN5bmModHJ1ZSksCi0gICAgam9iKDApLAotICAgIHN0
YXRlKFVuaW5pdGlhbGl6ZWQpLAotICAgIGNyZWF0ZWREb2N1bWVudChmYWxzZSksCi0gICAgYWJv
cnRlZChmYWxzZSkKLXsKLSAgc2V0UHJvdG90eXBlKFhNTEh0dHBSZXF1ZXN0UHJvdG86OnNlbGYo
ZXhlYykpOwotfQotCi1YTUxIdHRwUmVxdWVzdDo6flhNTEh0dHBSZXF1ZXN0KCkKLXsKLSAgICBk
ZWxldGUgcU9iamVjdDsKLX0KLQotdm9pZCBYTUxIdHRwUmVxdWVzdDo6Y2hhbmdlU3RhdGUoWE1M
SHR0cFJlcXVlc3RTdGF0ZSBuZXdTdGF0ZSkKLXsKLSAgaWYgKHN0YXRlICE9IG5ld1N0YXRlKSB7
Ci0gICAgc3RhdGUgPSBuZXdTdGF0ZTsKLSAgICAKLSAgICBpZiAoZG9jICYmIGRvYy0+ZnJhbWUo
KSAmJiBvblJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lcikgewotICAgICAgaW50IGlnbm9yZUV4Y2Vw
dGlvbjsKLSAgICAgIFJlZlB0cjxFdmVudEltcGw+IGV2ID0gZG9jLT5jcmVhdGVFdmVudCgiSFRN
TEV2ZW50cyIsIGlnbm9yZUV4Y2VwdGlvbik7Ci0gICAgICBldi0+aW5pdEV2ZW50KHJlYWR5c3Rh
dGVjaGFuZ2VFdmVudCwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgICBvblJlYWR5U3RhdGVDaGFuZ2VMaXN0
ZW5lci0+aGFuZGxlRXZlbnRJbXBsKGV2LmdldCgpLCB0cnVlKTsKLSAgICB9Ci0gICAgCi0gICAg
aWYgKGRvYyAmJiBkb2MtPmZyYW1lKCkgJiYgc3RhdGUgPT0gQ29tcGxldGVkICYmIG9uTG9hZExp
c3RlbmVyKSB7Ci0gICAgICBpbnQgaWdub3JlRXhjZXB0aW9uOwotICAgICAgUmVmUHRyPEV2ZW50
SW1wbD4gZXYgPSBkb2MtPmNyZWF0ZUV2ZW50KCJIVE1MRXZlbnRzIiwgaWdub3JlRXhjZXB0aW9u
KTsKLSAgICAgIGV2LT5pbml0RXZlbnQobG9hZEV2ZW50LCB0cnVlLCB0cnVlKTsKLSAgICAgIG9u
TG9hZExpc3RlbmVyLT5oYW5kbGVFdmVudEltcGwoZXYuZ2V0KCksIHRydWUpOwotICAgIH0KLSAg
fQotfQotCi1ib29sIFhNTEh0dHBSZXF1ZXN0Ojp1cmxNYXRjaGVzRG9jdW1lbnREb21haW4oY29u
c3QgS1VSTCYgX3VybCkgY29uc3QKLXsKLSAgS1VSTCBkb2N1bWVudFVSTChkb2MtPlVSTCgpKTsK
LQotICAvLyBhIGxvY2FsIGZpbGUgY2FuIGxvYWQgYW55dGhpbmcKLSAgaWYgKGRvY3VtZW50VVJM
LnByb3RvY29sKCkubG93ZXIoKSA9PSAiZmlsZSIpIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQot
Ci0gIC8vIGJ1dCBhIHJlbW90ZSBkb2N1bWVudCBjYW4gb25seSBsb2FkIGZyb20gdGhlIHNhbWUg
cG9ydCBvbiB0aGUgc2VydmVyCi0gIGlmIChkb2N1bWVudFVSTC5wcm90b2NvbCgpLmxvd2VyKCkg
PT0gX3VybC5wcm90b2NvbCgpLmxvd2VyKCkgJiYKLSAgICAgIGRvY3VtZW50VVJMLmhvc3QoKS5s
b3dlcigpID09IF91cmwuaG9zdCgpLmxvd2VyKCkgJiYKLSAgICAgIGRvY3VtZW50VVJMLnBvcnQo
KSA9PSBfdXJsLnBvcnQoKSkgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcmV0dXJuIGZh
bHNlOwotfQotCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjpvcGVuKGNvbnN0IFFTdHJpbmcmIF9tZXRo
b2QsIGNvbnN0IEtVUkwmIF91cmwsIGJvb2wgX2FzeW5jKQorSlNYTUxIdHRwUmVxdWVzdDo6SlNY
TUxIdHRwUmVxdWVzdChFeGVjU3RhdGUgKmV4ZWMsIERvY3VtZW50SW1wbCAqZCkKKyAgOiBtX2lt
cGwobmV3IFhNTEh0dHBSZXF1ZXN0KGQpKQogewotICBhYm9ydCgpOwotICBhYm9ydGVkID0gZmFs
c2U7Ci0KLSAgLy8gY2xlYXIgc3R1ZmYgZnJvbSBwb3NzaWJsZSBwcmV2aW91cyBsb2FkCi0gIHJl
cXVlc3RIZWFkZXJzID0gUVN0cmluZygpOwotICByZXNwb25zZUhlYWRlcnMgPSBRU3RyaW5nKCk7
Ci0gIHJlc3BvbnNlID0gUVN0cmluZygpOwotICBjcmVhdGVkRG9jdW1lbnQgPSBmYWxzZTsKLSAg
cmVzcG9uc2VYTUwgPSAwOwotCi0gIGNoYW5nZVN0YXRlKFVuaW5pdGlhbGl6ZWQpOwotCi0gIGlm
IChhYm9ydGVkKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgaWYgKCF1cmxNYXRjaGVzRG9jdW1l
bnREb21haW4oX3VybCkpIHsKLSAgICByZXR1cm47Ci0gIH0KLQotICAKLSAgbWV0aG9kID0gX21l
dGhvZDsKLSAgdXJsID0gX3VybDsKLSAgYXN5bmMgPSBfYXN5bmM7Ci0KLSAgY2hhbmdlU3RhdGUo
TG9hZGluZyk7CisgIHNldFByb3RvdHlwZShKU1hNTEh0dHBSZXF1ZXN0UHJvdG86OnNlbGYoZXhl
YykpOwogfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKGNvbnN0IERPTVN0cmluZyYgX2Jv
ZHkpCitKU1hNTEh0dHBSZXF1ZXN0Ojp+SlNYTUxIdHRwUmVxdWVzdCgpCiB7Ci0gIGlmICghZG9j
KQotICAgIHJldHVybjsKLQotICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYWJvcnQgaW5zdGVhZCBp
ZiB3ZSBhbHJlYWR5IGhhdmUgYSBqb2IgZ29pbmc/Ci0gIGlmIChqb2IpCi0gICAgcmV0dXJuOwot
Ci0gIGFib3J0ZWQgPSBmYWxzZTsKLQotICBpZiAobWV0aG9kLmxvd2VyKCkgPT0gInBvc3QiICYm
ICh1cmwucHJvdG9jb2woKS5sb3dlcigpID09ICJodHRwIiB8fCB1cmwucHJvdG9jb2woKS5sb3dl
cigpID09ICJodHRwcyIpICkgewotICAgICAgUVN0cmluZyBjb250ZW50VHlwZSA9IGdldFJlcXVl
c3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIpOwotICAgICAgUVN0cmluZyBjaGFyc2V0OwotICAgICAg
aWYgKGNvbnRlbnRUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgc2V0UmVxdWVzdEhlYWRlcigiQ29u
dGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL3htbCIpOwotICAgICAgZWxzZQotICAgICAgICBjaGFy
c2V0ID0gZ2V0Q2hhcnNldChjb250ZW50VHlwZSk7Ci0gICAgICAKLSAgICAgIGlmIChjaGFyc2V0
LmlzRW1wdHkoKSkKLSAgICAgICAgY2hhcnNldCA9ICJVVEYtOCI7Ci0gICAgICAKLSAgICAgIFFU
ZXh0Q29kZWMgKmNvZGVjID0gUVRleHRDb2RlYzo6Y29kZWNGb3JOYW1lKGNoYXJzZXQubGF0aW4x
KCkpOwotICAgICAgaWYgKCFjb2RlYykgICAvLyBGSVhNRTogcmVwb3J0IGFuIGVycm9yPwotICAg
ICAgICBjb2RlYyA9IFFUZXh0Q29kZWM6OmNvZGVjRm9yTmFtZSgiVVRGLTgiKTsKLQotICAgICAg
am9iID0gS0lPOjpodHRwX3Bvc3QodXJsLCBjb2RlYy0+ZnJvbVVuaWNvZGUoX2JvZHkucXN0cmlu
ZygpKSwgZmFsc2UpOwotICB9Ci0gIGVsc2UKLSAgICAgam9iID0gS0lPOjpnZXQoIHVybCwgZmFs
c2UsIGZhbHNlICk7Ci0gIGlmIChyZXF1ZXN0SGVhZGVycy5sZW5ndGgoKSA+IDApCi0gICAgam9i
LT5hZGRNZXRhRGF0YSgiY3VzdG9tSFRUUEhlYWRlciIsIHJlcXVlc3RIZWFkZXJzKTsKLQotICBp
ZiAoIWFzeW5jKSB7Ci0gICAgQnl0ZUFycmF5IGRhdGE7Ci0gICAgS1VSTCBmaW5hbFVSTDsKLSAg
ICBRU3RyaW5nIGhlYWRlcnM7Ci0KLSAgICB7IC8vIHNjb3BlCi0gICAgICAgIC8vIGF2b2lkIGRl
YWRsb2NrIGluIGNhc2UgdGhlIGxvYWRlciB3YW50cyB0byB1c2UgSlMgb24gYSBiYWNrZ3JvdW5k
IHRocmVhZAotICAgICAgICBKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wTG9ja3M7Ci0KLSAgICAg
ICAgZGF0YSA9IEtXUVNlcnZlU3luY2hyb25vdXNSZXF1ZXN0KGtodG1sOjpDYWNoZTo6bG9hZGVy
KCksIGRvYy0+ZG9jTG9hZGVyKCksIGpvYiwgZmluYWxVUkwsIGhlYWRlcnMpOwotICAgIH0KLQot
ICAgIGpvYiA9IDA7Ci0gICAgcHJvY2Vzc1N5bmNMb2FkUmVzdWx0cyhkYXRhLCBmaW5hbFVSTCwg
aGVhZGVycyk7Ci0gICAgCi0gICAgcmV0dXJuOwotICB9Ci0KLSAgewotICAgIEpTTG9jayBsb2Nr
OwotICAgIGdjUHJvdGVjdCh0aGlzKTsKLSAgfQotICAKLSAgcU9iamVjdC0+Y29ubmVjdCggam9i
LCBTSUdOQUwoIHJlc3VsdCggS0lPOjpKb2IqICkgKSwKLSAgICAgICAgICAgICAgICAgICAgU0xP
VCggc2xvdEZpbmlzaGVkKCBLSU86OkpvYiogKSApICk7Ci0gIHFPYmplY3QtPmNvbm5lY3QoIGpv
YiwgU0lHTkFMKCBkYXRhKCBLSU86OkpvYiosIGNvbnN0IGNoYXIqLCBpbnQgKSApLAotICAgICAg
ICAgICAgICAgICAgICBTTE9UKCBzbG90RGF0YSggS0lPOjpKb2IqLCBjb25zdCBjaGFyKiwgaW50
ICkgKSApOwotICBxT2JqZWN0LT5jb25uZWN0KCBqb2IsIFNJR05BTChyZWRpcmVjdGlvbihLSU86
OkpvYiosIGNvbnN0IEtVUkwmICkgKSwKLSAgICAgICAgICAgICAgICAgICAgU0xPVCggc2xvdFJl
ZGlyZWN0aW9uKEtJTzo6Sm9iKiwgY29uc3QgS1VSTCYpICkgKTsKLQotICBhZGRUb1JlcXVlc3Rz
QnlEb2N1bWVudCgpOwotCi0gIEtXUVNlcnZlUmVxdWVzdChraHRtbDo6Q2FjaGU6OmxvYWRlcigp
LCBkb2MtPmRvY0xvYWRlcigpLCBqb2IpOwogfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjphYm9y
dCgpCitKU1ZhbHVlICpKU1hNTEh0dHBSZXF1ZXN0UHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihF
eGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewot
ICBib29sIGhhZEpvYiA9IGpvYjsKLQotICBpZiAoaGFkSm9iKSB7Ci0gICAgcmVtb3ZlRnJvbVJl
cXVlc3RzQnlEb2N1bWVudCgpOwotICAgIGpvYi0+a2lsbCgpOwotICAgIGpvYiA9IDA7Ci0gIH0K
LSAgZGVjb2RlciA9IDA7Ci0gIGFib3J0ZWQgPSB0cnVlOwotCi0gIGlmIChoYWRKb2IpIHsKLSAg
ICBKU0xvY2sgbG9jazsKLSAgICBnY1VucHJvdGVjdCh0aGlzKTsKLSAgfQotfQotCi12b2lkIFhN
TEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVyKGNvbnN0IFFTdHJpbmcmIG5hbWUsIGNvbnN0
IFFTdHJpbmcgJnZhbHVlKQotewotICBpZiAocmVxdWVzdEhlYWRlcnMubGVuZ3RoKCkgPiAwKSB7
Ci0gICAgcmVxdWVzdEhlYWRlcnMgKz0gIlxyXG4iOwotICB9Ci0gIHJlcXVlc3RIZWFkZXJzICs9
IG5hbWU7Ci0gIHJlcXVlc3RIZWFkZXJzICs9ICI6ICI7Ci0gIHJlcXVlc3RIZWFkZXJzICs9IHZh
bHVlOwotfQotCi1RU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRSZXF1ZXN0SGVhZGVyKGNvbnN0
IFFTdHJpbmcmIG5hbWUpIGNvbnN0Ci17Ci0gIHJldHVybiBnZXRTcGVjaWZpY0hlYWRlcihyZXF1
ZXN0SGVhZGVycywgbmFtZSk7Ci19Ci0KLUpTVmFsdWUgKlhNTEh0dHBSZXF1ZXN0OjpnZXRBbGxS
ZXNwb25zZUhlYWRlcnMoKSBjb25zdAotewotICBpZiAocmVzcG9uc2VIZWFkZXJzLmlzRW1wdHko
KSkgewotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICB9Ci0KLSAgaW50IGVuZE9mTGluZSA9
IHJlc3BvbnNlSGVhZGVycy5maW5kKCJcbiIpOwotCi0gIGlmIChlbmRPZkxpbmUgPT0gLTEpIHsK
LSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgfQotCi0gIHJldHVybiBqc1N0cmluZyhyZXNw
b25zZUhlYWRlcnMubWlkKGVuZE9mTGluZSArIDEpICsgIlxuIik7Ci19Ci0KLVFTdHJpbmcgWE1M
SHR0cFJlcXVlc3Q6OmdldFJlc3BvbnNlSGVhZGVyKGNvbnN0IFFTdHJpbmcmIG5hbWUpIGNvbnN0
Ci17Ci0gIHJldHVybiBnZXRTcGVjaWZpY0hlYWRlcihyZXNwb25zZUhlYWRlcnMsIG5hbWUpOwot
fQotCi1RU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRTcGVjaWZpY0hlYWRlcihjb25zdCBRU3Ry
aW5nJiBoZWFkZXJzLCBjb25zdCBRU3RyaW5nJiBuYW1lKQotewotICBpZiAoaGVhZGVycy5pc0Vt
cHR5KCkpCi0gICAgcmV0dXJuIFFTdHJpbmcoKTsKLQotICBRUmVnRXhwIGhlYWRlckxpbmVQYXR0
ZXJuKG5hbWUgKyAiOiIsIGZhbHNlKTsKLQotICBpbnQgbWF0Y2hMZW5ndGg7Ci0gIGludCBoZWFk
ZXJMaW5lUG9zID0gaGVhZGVyTGluZVBhdHRlcm4ubWF0Y2goaGVhZGVycywgMCwgJm1hdGNoTGVu
Z3RoKTsKLSAgd2hpbGUgKGhlYWRlckxpbmVQb3MgIT0gLTEpIHsKLSAgICBpZiAoaGVhZGVyTGlu
ZVBvcyA9PSAwIHx8IGhlYWRlcnNbaGVhZGVyTGluZVBvcy0xXSA9PSAnXG4nKSB7Ci0gICAgICBi
cmVhazsKLSAgICB9Ci0gICAgCi0gICAgaGVhZGVyTGluZVBvcyA9IGhlYWRlckxpbmVQYXR0ZXJu
Lm1hdGNoKGhlYWRlcnMsIGhlYWRlckxpbmVQb3MgKyAxLCAmbWF0Y2hMZW5ndGgpOwotICB9Ci0K
LSAgaWYgKGhlYWRlckxpbmVQb3MgPT0gLTEpCi0gICAgcmV0dXJuIFFTdHJpbmcoKTsKLSAgICAK
LSAgaW50IGVuZE9mTGluZSA9IGhlYWRlcnMuZmluZCgiXG4iLCBoZWFkZXJMaW5lUG9zICsgbWF0
Y2hMZW5ndGgpOwotICAKLSAgcmV0dXJuIGhlYWRlcnMubWlkKGhlYWRlckxpbmVQb3MgKyBtYXRj
aExlbmd0aCwgZW5kT2ZMaW5lIC0gKGhlYWRlckxpbmVQb3MgKyBtYXRjaExlbmd0aCkpLnN0cmlw
V2hpdGVTcGFjZSgpOwotfQotCi1ib29sIFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZUlzWE1MKCkg
Y29uc3QKLXsKLSAgICBRU3RyaW5nIG1pbWVUeXBlID0gZ2V0TUlNRVR5cGUoTUlNRVR5cGVPdmVy
cmlkZSk7Ci0gICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgbWltZVR5cGUgPSBn
ZXRNSU1FVHlwZShnZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1UeXBlIikpOwotICAgIGlmICht
aW1lVHlwZS5pc0VtcHR5KCkpCi0gICAgICBtaW1lVHlwZSA9ICJ0ZXh0L3htbCI7Ci0gICAgCi0g
ICAgcmV0dXJuIERPTUltcGxlbWVudGF0aW9uSW1wbDo6aXNYTUxNSU1FVHlwZShtaW1lVHlwZSk7
Ci19Ci0KLUpTVmFsdWUgKlhNTEh0dHBSZXF1ZXN0OjpnZXRTdGF0dXMoKSBjb25zdAotewotICBp
ZiAocmVzcG9uc2VIZWFkZXJzLmlzRW1wdHkoKSkgewotICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICB9Ci0gIAotICBpbnQgZW5kT2ZMaW5lID0gcmVzcG9uc2VIZWFkZXJzLmZpbmQoIlxuIik7
Ci0gIFFTdHJpbmcgZmlyc3RMaW5lID0gZW5kT2ZMaW5lID09IC0xID8gcmVzcG9uc2VIZWFkZXJz
IDogcmVzcG9uc2VIZWFkZXJzLmxlZnQoZW5kT2ZMaW5lKTsKLSAgaW50IGNvZGVTdGFydCA9IGZp
cnN0TGluZS5maW5kKCIgIik7Ci0gIGludCBjb2RlRW5kID0gZmlyc3RMaW5lLmZpbmQoIiAiLCBj
b2RlU3RhcnQgKyAxKTsKLSAgCi0gIGlmIChjb2RlU3RhcnQgPT0gLTEgfHwgY29kZUVuZCA9PSAt
MSkgewotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICB9Ci0gIAotICBRU3RyaW5nIG51bWJl
ciA9IGZpcnN0TGluZS5taWQoY29kZVN0YXJ0ICsgMSwgY29kZUVuZCAtIChjb2RlU3RhcnQgKyAx
KSk7Ci0gIAotICBib29sIG9rID0gZmFsc2U7Ci0gIGludCBjb2RlID0gbnVtYmVyLnRvSW50KCZv
ayk7Ci0gIGlmICghb2spIHsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgfQotCi0gIHJl
dHVybiBqc051bWJlcihjb2RlKTsKLX0KLQotSlNWYWx1ZSAqWE1MSHR0cFJlcXVlc3Q6OmdldFN0
YXR1c1RleHQoKSBjb25zdAotewotICBpZiAocmVzcG9uc2VIZWFkZXJzLmlzRW1wdHkoKSkgewot
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICB9Ci0gIAotICBpbnQgZW5kT2ZMaW5lID0gcmVz
cG9uc2VIZWFkZXJzLmZpbmQoIlxuIik7Ci0gIFFTdHJpbmcgZmlyc3RMaW5lID0gZW5kT2ZMaW5l
ID09IC0xID8gcmVzcG9uc2VIZWFkZXJzIDogcmVzcG9uc2VIZWFkZXJzLmxlZnQoZW5kT2ZMaW5l
KTsKLSAgaW50IGNvZGVTdGFydCA9IGZpcnN0TGluZS5maW5kKCIgIik7Ci0gIGludCBjb2RlRW5k
ID0gZmlyc3RMaW5lLmZpbmQoIiAiLCBjb2RlU3RhcnQgKyAxKTsKLQotICBpZiAoY29kZVN0YXJ0
ID09IC0xIHx8IGNvZGVFbmQgPT0gLTEpIHsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAg
fQotICAKLSAgUVN0cmluZyBzdGF0dXNUZXh0ID0gZmlyc3RMaW5lLm1pZChjb2RlRW5kICsgMSwg
ZW5kT2ZMaW5lIC0gKGNvZGVFbmQgKyAxKSkuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0gIAotICByZXR1
cm4ganNTdHJpbmcoc3RhdHVzVGV4dCk7Ci19Ci0KLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OnByb2Nl
c3NTeW5jTG9hZFJlc3VsdHMoY29uc3QgQnl0ZUFycmF5ICZkYXRhLCBjb25zdCBLVVJMICZmaW5h
bFVSTCwgY29uc3QgUVN0cmluZyAmaGVhZGVycykKLXsKLSAgaWYgKCF1cmxNYXRjaGVzRG9jdW1l
bnREb21haW4oZmluYWxVUkwpKSB7Ci0gICAgYWJvcnQoKTsKLSAgICByZXR1cm47Ci0gIH0KLSAg
Ci0gIHJlc3BvbnNlSGVhZGVycyA9IGhlYWRlcnM7Ci0gIGNoYW5nZVN0YXRlKExvYWRlZCk7Ci0g
IGlmIChhYm9ydGVkKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0gIAotICBjb25zdCBjaGFyICpieXRl
cyA9IChjb25zdCBjaGFyICopZGF0YS5kYXRhKCk7Ci0gIGludCBsZW4gPSAoaW50KWRhdGEuc2l6
ZSgpOwotCi0gIHNsb3REYXRhKDAsIGJ5dGVzLCBsZW4pOwotCi0gIGlmIChhYm9ydGVkKSB7Ci0g
ICAgcmV0dXJuOwotICB9Ci0KLSAgc2xvdEZpbmlzaGVkKDApOwotfQotCi12b2lkIFhNTEh0dHBS
ZXF1ZXN0OjpzbG90RmluaXNoZWQoS0lPOjpKb2IgKikKLXsKLSAgaWYgKHJlc3BvbnNlSGVhZGVy
cy5pc0VtcHR5KCkgJiYgam9iKQotICAgIHJlc3BvbnNlSGVhZGVycyA9IGpvYi0+cXVlcnlNZXRh
RGF0YSgiSFRUUC1IZWFkZXJzIik7Ci0KLSAgaWYgKHN0YXRlIDwgTG9hZGVkKQotICAgIGNoYW5n
ZVN0YXRlKExvYWRlZCk7Ci0KLSAgaWYgKGRlY29kZXIpCi0gICAgcmVzcG9uc2UgKz0gZGVjb2Rl
ci0+Zmx1c2goKTsKLQotICByZW1vdmVGcm9tUmVxdWVzdHNCeURvY3VtZW50KCk7Ci0gIGpvYiA9
IDA7Ci0KLSAgY2hhbmdlU3RhdGUoQ29tcGxldGVkKTsKLSAgZGVjb2RlciA9IDA7Ci0KLSAgSlNM
b2NrIGxvY2s7Ci0gIGdjVW5wcm90ZWN0KHRoaXMpOwotfQotCi12b2lkIFhNTEh0dHBSZXF1ZXN0
OjpzbG90UmVkaXJlY3Rpb24oS0lPOjpKb2IqLCBjb25zdCBLVVJMJiB1cmwpCi17Ci0gIGlmICgh
dXJsTWF0Y2hlc0RvY3VtZW50RG9tYWluKHVybCkpIHsKLSAgICBhYm9ydCgpOwotICB9Ci19Ci0K
LXZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNsb3REYXRhKEtJTzo6Sm9iKiwgY29uc3QgY2hhciAqZGF0
YSwgaW50IGxlbikKLXsKLSAgaWYgKHJlc3BvbnNlSGVhZGVycy5pc0VtcHR5KCkgJiYgam9iKQot
ICAgIHJlc3BvbnNlSGVhZGVycyA9IGpvYi0+cXVlcnlNZXRhRGF0YSgiSFRUUC1IZWFkZXJzIik7
Ci0KLSAgaWYgKHN0YXRlIDwgTG9hZGVkKQotICAgIGNoYW5nZVN0YXRlKExvYWRlZCk7Ci0gIAot
ICBpZiAoIWRlY29kZXIpIHsKLSAgICBlbmNvZGluZyA9IGdldENoYXJzZXQoTUlNRVR5cGVPdmVy
cmlkZSk7Ci0gICAgaWYgKGVuY29kaW5nLmlzRW1wdHkoKSkKLSAgICAgIGVuY29kaW5nID0gZ2V0
Q2hhcnNldChnZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1UeXBlIikpOwotICAgIGlmIChlbmNv
ZGluZy5pc0VtcHR5KCkgJiYgam9iKQotICAgICAgZW5jb2RpbmcgPSBqb2ItPnF1ZXJ5TWV0YURh
dGEoImNoYXJzZXQiKTsKLSAgICAKLSAgICBkZWNvZGVyID0gbmV3IERlY29kZXI7Ci0gICAgaWYg
KCFlbmNvZGluZy5pc0VtcHR5KCkpCi0gICAgICBkZWNvZGVyLT5zZXRFbmNvZGluZyhlbmNvZGlu
Zy5sYXRpbjEoKSwgRGVjb2Rlcjo6RW5jb2RpbmdGcm9tSFRUUEhlYWRlcik7Ci0gICAgZWxzZSB7
Ci0gICAgICAvLyBvbmx5IGFsbG93IERlY29kZXIgdG8gbG9vayBpbnNpZGUgdGhlIHJlc3BvbnNl
IGlmIGl0J3MgWE1MCi0gICAgICBkZWNvZGVyLT5zZXRFbmNvZGluZygiVVRGLTgiLCByZXNwb25z
ZUlzWE1MKCkgPyBEZWNvZGVyOjpEZWZhdWx0RW5jb2RpbmcgOiBEZWNvZGVyOjpFbmNvZGluZ0Zy
b21IVFRQSGVhZGVyKTsKLSAgICB9Ci0gIH0KLSAgaWYgKGxlbiA9PSAwKQotICAgIHJldHVybjsK
LQotICBpZiAobGVuID09IC0xKQotICAgIGxlbiA9IHN0cmxlbihkYXRhKTsKLQotICBRU3RyaW5n
IGRlY29kZWQgPSBkZWNvZGVyLT5kZWNvZGUoZGF0YSwgbGVuKTsKLQotICByZXNwb25zZSArPSBk
ZWNvZGVkOwotCi0gIGlmICghYWJvcnRlZCkgewotICAgIGNoYW5nZVN0YXRlKEludGVyYWN0aXZl
KTsKLSAgfQotfQotCi1YTUxIdHRwUmVxdWVzdDo6UmVxdWVzdHNNYXAmIFhNTEh0dHBSZXF1ZXN0
OjpyZXF1ZXN0c0J5RG9jdW1lbnQoKQotewotICAgIHN0YXRpYyBSZXF1ZXN0c01hcCBtYXA7Ci0g
ICAgcmV0dXJuIG1hcDsKLX0KLQotdm9pZCBYTUxIdHRwUmVxdWVzdDo6YWRkVG9SZXF1ZXN0c0J5
RG9jdW1lbnQoKQotewotICBhc3NlcnQoZG9jKTsKLQotICBSZXF1ZXN0c1NldCogcmVxdWVzdHMg
PSByZXF1ZXN0c0J5RG9jdW1lbnQoKS5nZXQoZG9jKTsKLSAgaWYgKCFyZXF1ZXN0cykgewotICAg
IHJlcXVlc3RzID0gbmV3IFJlcXVlc3RzU2V0OwotICAgIHJlcXVlc3RzQnlEb2N1bWVudCgpLnNl
dChkb2MsIHJlcXVlc3RzKTsKLSAgfQotCi0gIGFzc2VydCghcmVxdWVzdHMtPmNvbnRhaW5zKHRo
aXMpKTsKLSAgcmVxdWVzdHMtPmluc2VydCh0aGlzKTsKLX0KLQotdm9pZCBYTUxIdHRwUmVxdWVz
dDo6cmVtb3ZlRnJvbVJlcXVlc3RzQnlEb2N1bWVudCgpCi17Ci0gIGFzc2VydChkb2MpOwotCi0g
IFJlcXVlc3RzU2V0KiByZXF1ZXN0cyA9IHJlcXVlc3RzQnlEb2N1bWVudCgpLmdldChkb2MpOwot
Ci0gIC8vIFNpbmNlIHN5bmNocm9ub3VzIGxvYWRzIGFyZSBub3QgYWRkZWQgdG8gcmVxdWVzdHNC
eURvY3VtZW50KCksIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGZvdW5kIHRoZSByZXF1ZXN0Lgot
ICBpZiAoIXJlcXVlc3RzIHx8ICFyZXF1ZXN0cy0+Y29udGFpbnModGhpcykpCi0gICAgcmV0dXJu
OwotCi0gIHJlcXVlc3RzLT5yZW1vdmUodGhpcyk7Ci0KLSAgaWYgKHJlcXVlc3RzLT5pc0VtcHR5
KCkpIHsKLSAgICByZXF1ZXN0c0J5RG9jdW1lbnQoKS5yZW1vdmUoZG9jKTsKLSAgICBkZWxldGUg
cmVxdWVzdHM7Ci0gIH0KLX0KLQotdm9pZCBYTUxIdHRwUmVxdWVzdDo6Y2FuY2VsUmVxdWVzdHMo
RE9NOjpEb2N1bWVudEltcGwqIGQpCi17Ci0gIHdoaWxlIChSZXF1ZXN0c1NldCogcmVxdWVzdHMg
PSByZXF1ZXN0c0J5RG9jdW1lbnQoKS5nZXQoZCkpCi0gICAgKCpyZXF1ZXN0cy0+YmVnaW4oKSkt
PmFib3J0KCk7Ci19Ci0KLUpTVmFsdWUgKlhNTEh0dHBSZXF1ZXN0UHJvdG9GdW5jOjpjYWxsQXNG
dW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBMaXN0ICZh
cmdzKQotewotICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZYTUxIdHRwUmVxdWVzdDo6aW5mbykp
CisgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkpTWE1MSHR0cFJlcXVlc3Q6OmluZm8pKQogICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKLSAgWE1MSHR0cFJlcXVlc3Qg
KnJlcXVlc3QgPSBzdGF0aWNfY2FzdDxYTUxIdHRwUmVxdWVzdCAqPih0aGlzT2JqKTsKKyAgSlNY
TUxIdHRwUmVxdWVzdCAqcmVxdWVzdCA9IHN0YXRpY19jYXN0PEpTWE1MSHR0cFJlcXVlc3QgKj4o
dGhpc09iaik7CiAKICAgc3dpdGNoIChpZCkgewotICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpBYm9y
dDogewotICAgIHJlcXVlc3QtPmFib3J0KCk7CisgIGNhc2UgSlNYTUxIdHRwUmVxdWVzdDo6QWJv
cnQ6IHsKKyAgICByZXF1ZXN0LT5tX2ltcGwtPmFib3J0KCk7CiAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgIH0KLSAgY2FzZSBYTUxIdHRwUmVxdWVzdDo6R2V0QWxsUmVzcG9uc2VIZWFkZXJz
OiB7CisgIGNhc2UgSlNYTUxIdHRwUmVxdWVzdDo6R2V0QWxsUmVzcG9uc2VIZWFkZXJzOiB7CiAg
ICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDApIHsKICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIH0KLQotICAgIHJldHVybiByZXF1ZXN0LT5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTsKKyAg
ICAKKyAgICByZXR1cm4ganNTdHJpbmdPclVuZGVmaW5lZChyZXF1ZXN0LT5tX2ltcGwtPmdldEFs
bFJlc3BvbnNlSGVhZGVycygpKTsKICAgfQotICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpHZXRSZXNw
b25zZUhlYWRlcjogeworICBjYXNlIEpTWE1MSHR0cFJlcXVlc3Q6OkdldFJlc3BvbnNlSGVhZGVy
OiB7CiAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDEpIHsKICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIH0KICAgICAKLSAgICBRU3RyaW5nIGhlYWRlciA9IHJlcXVlc3QtPmdldFJlc3Bv
bnNlSGVhZGVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSk7CisgICAgRE9NU3Ry
aW5nIGhlYWRlciA9IHJlcXVlc3QtPm1faW1wbC0+Z2V0UmVzcG9uc2VIZWFkZXIoYXJnc1swXS0+
dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCkpOwogCiAgICAgaWYgKGhlYWRlci5pc051bGwoKSkK
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgcmV0dXJuIGpzU3RyaW5nKGhlYWRl
cik7CiAgIH0KLSAgY2FzZSBYTUxIdHRwUmVxdWVzdDo6T3BlbjoKKyAgY2FzZSBKU1hNTEh0dHBS
ZXF1ZXN0OjpPcGVuOgogICAgIHsKICAgICAgIGlmIChhcmdzLnNpemUoKSA8IDIgfHwgYXJncy5z
aXplKCkgPiA1KSB7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgfQogICAg
IAotICAgICAgUVN0cmluZyBtZXRob2QgPSBhcmdzWzBdLT50b1N0cmluZyhleGVjKS5xc3RyaW5n
KCk7CisgICAgICBET01TdHJpbmcgbWV0aG9kID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuZG9t
U3RyaW5nKCk7CiAgICAgICBLVVJMIHVybCA9IEtVUkwoV2luZG93OjpyZXRyaWV2ZUFjdGl2ZShl
eGVjKS0+ZnJhbWUoKS0+eG1sRG9jSW1wbCgpLT5jb21wbGV0ZVVSTChhcmdzWzFdLT50b1N0cmlu
ZyhleGVjKS5xc3RyaW5nKCkpKTsKIAogICAgICAgYm9vbCBhc3luYyA9IHRydWU7Ci0gICAgICBp
ZiAoYXJncy5zaXplKCkgPj0gMykgeworICAgICAgaWYgKGFyZ3Muc2l6ZSgpID49IDMpCiAgICAg
ICAgIGFzeW5jID0gYXJnc1syXS0+dG9Cb29sZWFuKGV4ZWMpOwotICAgICAgfQogICAgIAotICAg
ICAgaWYgKGFyZ3Muc2l6ZSgpID49IDQpIHsKLSAgICAgICAgdXJsLnNldFVzZXIoYXJnc1szXS0+
dG9TdHJpbmcoZXhlYykucXN0cmluZygpKTsKLSAgICAgIH0KKyAgICAgIERPTVN0cmluZyB1c2Vy
OworICAgICAgaWYgKGFyZ3Muc2l6ZSgpID49IDQpCisgICAgICAgIHVzZXIgPSBhcmdzWzNdLT50
b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKTsKICAgICAgIAotICAgICAgaWYgKGFyZ3Muc2l6ZSgp
ID49IDUpIHsKLSAgICAgICAgdXJsLnNldFBhc3MoYXJnc1s0XS0+dG9TdHJpbmcoZXhlYykucXN0
cmluZygpKTsKLSAgICAgIH0KKyAgICAgIERPTVN0cmluZyBwYXNzd29yZDsKKyAgICAgIGlmIChh
cmdzLnNpemUoKSA+PSA1KQorICAgICAgICBwYXNzd29yZCA9IGFyZ3NbNF0tPnRvU3RyaW5nKGV4
ZWMpLmRvbVN0cmluZygpOwogCi0gICAgICByZXF1ZXN0LT5vcGVuKG1ldGhvZCwgdXJsLCBhc3lu
Yyk7CisgICAgICByZXF1ZXN0LT5tX2ltcGwtPm9wZW4obWV0aG9kLCB1cmwsIGFzeW5jLCB1c2Vy
LCBwYXNzd29yZCk7CiAKICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KLSAgY2Fz
ZSBYTUxIdHRwUmVxdWVzdDo6U2VuZDoKKyAgY2FzZSBKU1hNTEh0dHBSZXF1ZXN0OjpTZW5kOgog
ICAgIHsKICAgICAgIGlmIChhcmdzLnNpemUoKSA+IDEpIHsKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgICB9CiAKLSAgICAgIGlmIChyZXF1ZXN0LT5zdGF0ZSAhPSBMb2FkaW5n
KSB7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgfQotCiAgICAgICBET01T
dHJpbmcgYm9keTsKIAogICAgICAgaWYgKGFyZ3Muc2l6ZSgpID49IDEpIHsKQEAgLTc2MCwyNCAr
MjU0LDI0IEBAIEpTVmFsdWUgKlhNTEh0dHBSZXF1ZXN0UHJvdG9GdW5jOjpjYWxsQXMKICAgICAg
ICAgfQogICAgICAgfQogCi0gICAgICByZXF1ZXN0LT5zZW5kKGJvZHkpOworICAgICAgcmVxdWVz
dC0+bV9pbXBsLT5zZW5kKGJvZHkpOwogCiAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICB9Ci0gIGNhc2UgWE1MSHR0cFJlcXVlc3Q6OlNldFJlcXVlc3RIZWFkZXI6IHsKKyAgY2FzZSBK
U1hNTEh0dHBSZXF1ZXN0OjpTZXRSZXF1ZXN0SGVhZGVyOiB7CiAgICAgaWYgKGFyZ3Muc2l6ZSgp
ICE9IDIpIHsKICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KICAgICAKLSAgICBy
ZXF1ZXN0LT5zZXRSZXF1ZXN0SGVhZGVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmco
KSwgYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpKTsKKyAgICByZXF1ZXN0LT5tX2lt
cGwtPnNldFJlcXVlc3RIZWFkZXIoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCks
IGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpKTsKICAgICAKICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgfQotICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpPdmVycmlkZU1JTUVU
eXBlOiB7CisgIGNhc2UgSlNYTUxIdHRwUmVxdWVzdDo6T3ZlcnJpZGVNSU1FVHlwZTogewogICAg
IGlmIChhcmdzLnNpemUoKSAhPSAxKSB7CiAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICB9Ci0gICAgcmVxdWVzdC0+TUlNRVR5cGVPdmVycmlkZSA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4
ZWMpLnFzdHJpbmcoKTsKKyAgICByZXF1ZXN0LT5tX2ltcGwtPm92ZXJyaWRlTUlNRVR5cGUoYXJn
c1swXS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCkpOwogICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICB9CiAgIH0KSW5kZXg6IGtodG1sL2VjbWEveG1saHR0cHJlcXVlc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtodG1sL2VjbWEveG1saHR0cHJlcXVlc3QuY3BwCShyZXZpc2lvbiAxMjI2NykK
KysrIGtodG1sL2VjbWEveG1saHR0cHJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcg
KzEsNyBAQAogLyoKICAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcwog
ICogIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLgotICogIENvcHlyaWdo
dCAoQykgMjAwNSBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CisgKiAgQ29weXJp
Z2h0IChDKSAyMDA1LCAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDIwICsyMSwxOCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgInhtbGh0dHByZXF1ZXN0LmgiCiAKLSNpbmNsdWRlICJranNfd2luZG93Lmgi
Ci0jaW5jbHVkZSAia2pzX2V2ZW50cy5oIgorI2luY2x1ZGUgImtqcy9wcm90ZWN0LmgiCiAKICNp
bmNsdWRlICJkb20vZG9tX2V4Y2VwdGlvbi5oIgogI2luY2x1ZGUgImRvbS9kb21fc3RyaW5nLmgi
CisjaW5jbHVkZSAiZG9tL2RvbTJfZXZlbnRzLmgiCiAjaW5jbHVkZSAiQ2FjaGUuaCIKICNpbmNs
dWRlICJodG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCisjaW5jbHVkZSAibWlzYy9mb3JtZGF0YS5o
IgogI2luY2x1ZGUgInhtbC9kb20yX2V2ZW50c2ltcGwuaCIKICNpbmNsdWRlICJ4bWwvRXZlbnRO
YW1lcy5oIgogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uSW1wbC5oIgogCi0jaW5jbHVkZSAi
RnJhbWUuaCIKLQotI2luY2x1ZGUgPGtkZWJ1Zy5oPgogI2luY2x1ZGUgPGtpby9qb2IuaD4KICNp
bmNsdWRlIDxxb2JqZWN0Lmg+CiAjaW5jbHVkZSA8cXJlZ2V4cC5oPgpAQCAtNDIsMTIgKzQwLDcg
QEAKIAogI2luY2x1ZGUgIktXUUxvYWRlci5oIgogCi0jaW5jbHVkZSAieG1saHR0cHJlcXVlc3Qu
bHV0LmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBET007Ci11c2luZyBuYW1lc3BhY2UgRE9NOjpFdmVu
dE5hbWVzOwotCi11c2luZyBraHRtbDo6RGVjb2RlcjsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OjpFdmVudE5hbWVzOwogCiBzdGF0aWMgaW5saW5lIFFTdHJpbmcgZ2V0TUlNRVR5cGUoY29uc3Qg
UVN0cmluZyYgY29udGVudFR5cGVTdHJpbmcpCiB7CkBAIC05MywyNCArODYsNyBAQCBzdGF0aWMg
UVN0cmluZyBnZXRDaGFyc2V0KGNvbnN0IFFTdHJpbmcmCiAgICAgcmV0dXJuIFFTdHJpbmcoKTsK
IH0KIAotbmFtZXNwYWNlIEtKUyB7Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gWE1MSHR0cFJl
cXVlc3QgT2JqZWN0IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0vKiBTb3VyY2UgZm9yIFhN
TEh0dHBSZXF1ZXN0UHJvdG9UYWJsZS4KLUBiZWdpbiBYTUxIdHRwUmVxdWVzdFByb3RvVGFibGUg
NwotICBhYm9ydCAgICAgICAgICAgICAgICAgWE1MSHR0cFJlcXVlc3Q6OkFib3J0ICAgICAgICAg
ICAgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMAotICBnZXRBbGxSZXNwb25zZUhlYWRlcnMg
WE1MSHR0cFJlcXVlc3Q6OkdldEFsbFJlc3BvbnNlSGVhZGVycyAgIERvbnREZWxldGV8RnVuY3Rp
b24gMAotICBnZXRSZXNwb25zZUhlYWRlciAgICAgWE1MSHR0cFJlcXVlc3Q6OkdldFJlc3BvbnNl
SGVhZGVyICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMQotICBvcGVuICAgICAgICAgICAgICAg
ICAgWE1MSHR0cFJlcXVlc3Q6Ok9wZW4gICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8RnVu
Y3Rpb24gNQotICBvdmVycmlkZU1pbWVUeXBlICAgICAgWE1MSHR0cFJlcXVlc3Q6Ok92ZXJyaWRl
TUlNRVR5cGUgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMQotICBzZW5kICAgICAgICAgICAg
ICAgICAgWE1MSHR0cFJlcXVlc3Q6OlNlbmQgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8
RnVuY3Rpb24gMQotICBzZXRSZXF1ZXN0SGVhZGVyICAgICAgWE1MSHR0cFJlcXVlc3Q6OlNldFJl
cXVlc3RIZWFkZXIgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMgotQGVuZAotKi8KLUtKU19E
RUZJTkVfUFJPVE9UWVBFKFhNTEh0dHBSZXF1ZXN0UHJvdG8pCi1LSlNfSU1QTEVNRU5UX1BST1RP
RlVOQyhYTUxIdHRwUmVxdWVzdFByb3RvRnVuYykKLUtKU19JTVBMRU1FTlRfUFJPVE9UWVBFKCJY
TUxIdHRwUmVxdWVzdCIsWE1MSHR0cFJlcXVlc3RQcm90byxYTUxIdHRwUmVxdWVzdFByb3RvRnVu
YykKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAogWE1MSHR0cFJlcXVlc3RRT2JqZWN0OjpYTUxIdHRw
UmVxdWVzdFFPYmplY3QoWE1MSHR0cFJlcXVlc3QgKl9qc09iamVjdCkgCiB7CkBAIC0xMzIsNTYg
KzEwOCwyMCBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0UU9iamVjdDo6c2xvdFJlZGlyZWN0CiAgIGpz
T2JqZWN0LT5zbG90UmVkaXJlY3Rpb24oIGpvYiwgdXJsICk7IAogfQogCi1YTUxIdHRwUmVxdWVz
dENvbnN0cnVjdG9ySW1wOjpYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9ySW1wKEV4ZWNTdGF0ZSAq
ZXhlYywgRE9NOjpEb2N1bWVudEltcGwgKmQpCi0gICAgOiBkb2MoZCkKLXsKLSAgICBwdXREaXJl
Y3QocHJvdG90eXBlUHJvcGVydHlOYW1lLCBYTUxIdHRwUmVxdWVzdFByb3RvOjpzZWxmKGV4ZWMp
LCBEb250RW51bXxEb250RGVsZXRlfFJlYWRPbmx5KTsKLX0KLQotWE1MSHR0cFJlcXVlc3RDb25z
dHJ1Y3RvckltcDo6flhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXAoKQotewotfQotCi1ib29s
IFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXA6OmltcGxlbWVudHNDb25zdHJ1Y3QoKSBjb25z
dAorWE1MSHR0cFJlcXVlc3RTdGF0ZSBYTUxIdHRwUmVxdWVzdDo6Z2V0UmVhZHlTdGF0ZSgpIGNv
bnN0CiB7Ci0gIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGF0ZTsKIH0KIAotSlNPYmplY3Qg
KlhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXA6OmNvbnN0cnVjdChFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IExpc3QgJikKK0RPTVN0cmluZyBYTUxIdHRwUmVxdWVzdDo6Z2V0UmVzcG9uc2VUZXh0
KCkgY29uc3QKIHsKLSAgcmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdChleGVjLCBkb2MuZ2V0KCkp
OworICAgIHJldHVybiByZXNwb25zZTsKIH0KIAotY29uc3QgQ2xhc3NJbmZvIFhNTEh0dHBSZXF1
ZXN0OjppbmZvID0geyAiWE1MSHR0cFJlcXVlc3QiLCAwLCAmWE1MSHR0cFJlcXVlc3RUYWJsZSwg
MCB9OwotCi0vKiBTb3VyY2UgZm9yIFhNTEh0dHBSZXF1ZXN0VGFibGUuCi1AYmVnaW4gWE1MSHR0
cFJlcXVlc3RUYWJsZSA3Ci0gIHJlYWR5U3RhdGUgICAgICAgICAgICBYTUxIdHRwUmVxdWVzdDo6
UmVhZHlTdGF0ZSAgICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICByZXNwb25zZVRl
eHQgICAgICAgICAgWE1MSHR0cFJlcXVlc3Q6OlJlc3BvbnNlVGV4dCAgICAgICAgICAgIERvbnRE
ZWxldGV8UmVhZE9ubHkKLSAgcmVzcG9uc2VYTUwgICAgICAgICAgIFhNTEh0dHBSZXF1ZXN0OjpS
ZXNwb25zZVhNTCAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHN0YXR1cyAgICAg
ICAgICAgICAgICBYTUxIdHRwUmVxdWVzdDo6U3RhdHVzICAgICAgICAgICAgICAgICAgRG9udERl
bGV0ZXxSZWFkT25seQotICBzdGF0dXNUZXh0ICAgICAgICAgICAgWE1MSHR0cFJlcXVlc3Q6OlN0
YXR1c1RleHQgICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgb25yZWFkeXN0YXRl
Y2hhbmdlICAgIFhNTEh0dHBSZXF1ZXN0OjpPbnJlYWR5c3RhdGVjaGFuZ2UgICAgICBEb250RGVs
ZXRlCi0gIG9ubG9hZCAgICAgICAgICAgICAgICBYTUxIdHRwUmVxdWVzdDo6T25sb2FkICAgICAg
ICAgICAgICAgICAgRG9udERlbGV0ZQotQGVuZAotKi8KLQotYm9vbCBYTUxIdHRwUmVxdWVzdDo6
Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gIHJldHVybiBnZXRTdGF0aWNWYWx1
ZVNsb3Q8WE1MSHR0cFJlcXVlc3QsIERPTU9iamVjdD4oZXhlYywgJlhNTEh0dHBSZXF1ZXN0VGFi
bGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci19Ci0KLUpTVmFsdWUgKlhNTEh0dHBSZXF1
ZXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAor
UGFzc1JlZlB0cjxEb2N1bWVudEltcGw+IFhNTEh0dHBSZXF1ZXN0OjpnZXRSZXNwb25zZVhNTCgp
IGNvbnN0CiB7Ci0gIHN3aXRjaCAodG9rZW4pIHsKLSAgY2FzZSBSZWFkeVN0YXRlOgotICAgIHJl
dHVybiBqc051bWJlcihzdGF0ZSk7Ci0gIGNhc2UgUmVzcG9uc2VUZXh0OgotICAgIHJldHVybiBq
c1N0cmluZ09yTnVsbChET006OkRPTVN0cmluZyhyZXNwb25zZSkpOwotICBjYXNlIFJlc3BvbnNl
WE1MOgotICAgIGlmIChzdGF0ZSAhPSBDb21wbGV0ZWQpIHsKLSAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICAgIH0KKyAgICBpZiAoc3RhdGUgIT0gQ29tcGxldGVkKQorICAgICAgcmV0dXJu
IDA7CiAKICAgICBpZiAoIWNyZWF0ZWREb2N1bWVudCkgewogICAgICAgaWYgKHR5cGVJc1hNTCA9
IHJlc3BvbnNlSXNYTUwoKSkgewpAQCAtMTk3LDY1ICsxMzcsMzMgQEAgSlNWYWx1ZSAqWE1MSHR0
cFJlcXVlc3Q6OmdldFZhbHVlUHJvcGVydAogICAgICAgY3JlYXRlZERvY3VtZW50ID0gdHJ1ZTsK
ICAgICB9CiAKLSAgICBpZiAoIXR5cGVJc1hNTCkgewotICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7Ci0gICAgfQorICAgIGlmICghdHlwZUlzWE1MKQorICAgICAgcmV0dXJuIDA7CiAKLSAgICBy
ZXR1cm4gZ2V0RE9NTm9kZShleGVjLCByZXNwb25zZVhNTC5nZXQoKSk7Ci0gIGNhc2UgU3RhdHVz
OgotICAgIHJldHVybiBnZXRTdGF0dXMoKTsKLSAgY2FzZSBTdGF0dXNUZXh0OgotICAgIHJldHVy
biBnZXRTdGF0dXNUZXh0KCk7Ci0gIGNhc2UgT25yZWFkeXN0YXRlY2hhbmdlOgotICAgaWYgKG9u
UmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyICYmIG9uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyLT5s
aXN0ZW5lck9iaigpKSB7Ci0gICAgIHJldHVybiBvblJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lci0+
bGlzdGVuZXJPYmooKTsKLSAgIH0gZWxzZSB7Ci0gICAgIHJldHVybiBqc051bGwoKTsKLSAgIH0K
LSAgY2FzZSBPbmxvYWQ6Ci0gICBpZiAob25Mb2FkTGlzdGVuZXIgJiYgb25Mb2FkTGlzdGVuZXIt
Pmxpc3RlbmVyT2JqKCkpIHsKLSAgICAgcmV0dXJuIG9uTG9hZExpc3RlbmVyLT5saXN0ZW5lck9i
aigpOwotICAgfSBlbHNlIHsKLSAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgfQotICBkZWZhdWx0
OgotICAgIGtkV2FybmluZygpIDw8ICJYTUxIdHRwUmVxdWVzdDo6Z2V0VmFsdWVQcm9wZXJ0eSB1
bmhhbmRsZWQgdG9rZW4gIiA8PCB0b2tlbiA8PCBlbmRsOwotICAgIHJldHVybiBOVUxMOwotICB9
CisgICAgcmV0dXJuIHJlc3BvbnNlWE1MOwogfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjpwdXQo
RXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
KnZhbHVlLCBpbnQgYXR0cikKK1Bhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gWE1MSHR0cFJlcXVl
c3Q6OmdldE9uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyKCkgY29uc3QKIHsKLSAgbG9va3VwUHV0
PFhNTEh0dHBSZXF1ZXN0LERPTU9iamVjdD4oZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0
ciwgJlhNTEh0dHBSZXF1ZXN0VGFibGUsIHRoaXMgKTsKKyAgICByZXR1cm4gb25SZWFkeVN0YXRl
Q2hhbmdlTGlzdGVuZXI7CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OnB1dFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEpTVmFsdWUgKnZhbHVlLCBpbnQgLyphdHRy
Ki8pCit2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZXRPblJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lcihF
dmVudExpc3RlbmVyKiBldmVudExpc3RlbmVyKQogewotICBzd2l0Y2godG9rZW4pIHsKLSAgY2Fz
ZSBPbnJlYWR5c3RhdGVjaGFuZ2U6Ci0gICAgb25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIgPSBX
aW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5nZXRKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5l
cih2YWx1ZSwgdHJ1ZSk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgT25sb2FkOgotICAgIG9uTG9hZExp
c3RlbmVyID0gV2luZG93OjpyZXRyaWV2ZUFjdGl2ZShleGVjKS0+Z2V0SlNVbnByb3RlY3RlZEV2
ZW50TGlzdGVuZXIodmFsdWUsIHRydWUpOwotICAgIGJyZWFrOwotICBkZWZhdWx0OgotICAgIGtk
V2FybmluZygpIDw8ICJIVE1MRG9jdW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkgdW5oYW5kbGVkIHRv
a2VuICIgPDwgdG9rZW4gPDwgZW5kbDsKLSAgfQorICAgIG9uUmVhZHlTdGF0ZUNoYW5nZUxpc3Rl
bmVyID0gZXZlbnRMaXN0ZW5lcjsKIH0KIAotdm9pZCBYTUxIdHRwUmVxdWVzdDo6bWFyaygpCitQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IFhNTEh0dHBSZXF1ZXN0OjpnZXRPbkxvYWRMaXN0ZW5l
cigpIGNvbnN0CiB7Ci0gIERPTU9iamVjdDo6bWFyaygpOwotCi0gIGlmIChvblJlYWR5U3RhdGVD
aGFuZ2VMaXN0ZW5lcikKLSAgICBvblJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lci0+bWFyaygpOwot
Ci0gIGlmIChvbkxvYWRMaXN0ZW5lcikKLSAgICBvbkxvYWRMaXN0ZW5lci0+bWFyaygpOworICAg
IHJldHVybiBvbkxvYWRMaXN0ZW5lcjsKIH0KIAordm9pZCBYTUxIdHRwUmVxdWVzdDo6c2V0T25M
b2FkTGlzdGVuZXIoRXZlbnRMaXN0ZW5lciogZXZlbnRMaXN0ZW5lcikKK3sKKyAgICBvbkxvYWRM
aXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7Cit9CiAKLVhNTEh0dHBSZXF1ZXN0OjpYTUxIdHRwUmVx
dWVzdChFeGVjU3RhdGUgKmV4ZWMsIERPTTo6RG9jdW1lbnRJbXBsICpkKQorWE1MSHR0cFJlcXVl
c3Q6OlhNTEh0dHBSZXF1ZXN0KERvY3VtZW50SW1wbCAqZCkKICAgOiBxT2JqZWN0KG5ldyBYTUxI
dHRwUmVxdWVzdFFPYmplY3QodGhpcykpLAogICAgIGRvYyhkKSwKICAgICBhc3luYyh0cnVlKSwK
QEAgLTI2NCw3ICsxNzIsNiBAQCBYTUxIdHRwUmVxdWVzdDo6WE1MSHR0cFJlcXVlc3QoRXhlY1N0
YXRlCiAgICAgY3JlYXRlZERvY3VtZW50KGZhbHNlKSwKICAgICBhYm9ydGVkKGZhbHNlKQogewot
ICBzZXRQcm90b3R5cGUoWE1MSHR0cFJlcXVlc3RQcm90bzo6c2VsZihleGVjKSk7CiB9CiAKIFhN
TEh0dHBSZXF1ZXN0Ojp+WE1MSHR0cFJlcXVlc3QoKQpAQCAtMzEyLDcgKzIxOSw3IEBAIGJvb2wg
WE1MSHR0cFJlcXVlc3Q6OnVybE1hdGNoZXNEb2N1bWVudEQKICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIFhNTEh0dHBSZXF1ZXN0OjpvcGVuKGNvbnN0IFFTdHJpbmcmIF9tZXRob2QsIGNvbnN0
IEtVUkwmIF91cmwsIGJvb2wgX2FzeW5jKQordm9pZCBYTUxIdHRwUmVxdWVzdDo6b3Blbihjb25z
dCBET01TdHJpbmcmIF9tZXRob2QsIGNvbnN0IEtVUkwmIF91cmwsIGJvb2wgX2FzeW5jLCBjb25z
dCBET01TdHJpbmcmIHVzZXIsIGNvbnN0IERPTVN0cmluZyYgcGFzc3dvcmQpCiB7CiAgIGFib3J0
KCk7CiAgIGFib3J0ZWQgPSBmYWxzZTsKQEAgLTMzNCw5ICsyNDEsMTUgQEAgdm9pZCBYTUxIdHRw
UmVxdWVzdDo6b3Blbihjb25zdCBRU3RyaW5nJgogICAgIHJldHVybjsKICAgfQogCi0gIAotICBt
ZXRob2QgPSBfbWV0aG9kOwogICB1cmwgPSBfdXJsOworCisgIGlmICghdXNlci5pc051bGwoKSkK
KyAgICB1cmwuc2V0VXNlcih1c2VyLnFzdHJpbmcoKSk7CisKKyAgaWYgKCFwYXNzd29yZC5pc051
bGwoKSkKKyAgICB1cmwuc2V0UGFzcyhwYXNzd29yZC5xc3RyaW5nKCkpOworCisgIG1ldGhvZCA9
IF9tZXRob2QucXN0cmluZygpOwogICBhc3luYyA9IF9hc3luYzsKIAogICBjaGFuZ2VTdGF0ZShM
b2FkaW5nKTsKQEAgLTM0Nyw2ICsyNjAsOSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKGNv
bnN0IERPTVN0cmluCiAgIGlmICghZG9jKQogICAgIHJldHVybjsKIAorICBpZiAoc3RhdGUgIT0g
TG9hZGluZykKKyAgICByZXR1cm47CisgIAogICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYWJvcnQg
aW5zdGVhZCBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBqb2IgZ29pbmc/CiAgIGlmIChqb2IpCiAgICAg
cmV0dXJuOwpAQCAtMzgyLDcgKzI5OCw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmQoY29u
c3QgRE9NU3RyaW4KIAogICAgIHsgLy8gc2NvcGUKICAgICAgICAgLy8gYXZvaWQgZGVhZGxvY2sg
aW4gY2FzZSB0aGUgbG9hZGVyIHdhbnRzIHRvIHVzZSBKUyBvbiBhIGJhY2tncm91bmQgdGhyZWFk
Ci0gICAgICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BMb2NrczsKKyAgICAgICAgS0pTOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wTG9ja3M7CiAKICAgICAgICAgZGF0YSA9IEtXUVNlcnZl
U3luY2hyb25vdXNSZXF1ZXN0KGtodG1sOjpDYWNoZTo6bG9hZGVyKCksIGRvYy0+ZG9jTG9hZGVy
KCksIGpvYiwgZmluYWxVUkwsIGhlYWRlcnMpOwogICAgIH0KQEAgLTM5MywxMCArMzA5LDcgQEAg
dm9pZCBYTUxIdHRwUmVxdWVzdDo6c2VuZChjb25zdCBET01TdHJpbgogICAgIHJldHVybjsKICAg
fQogCi0gIHsKLSAgICBKU0xvY2sgbG9jazsKLSAgICBnY1Byb3RlY3QodGhpcyk7Ci0gIH0KKyAg
cmVmKCk7IC8vIHRoaXMgb2JqZWN0IHNob3VsZCBub3QgYmUgZGVsZXRlZCB3aGlsZSBhIHJlcXVl
c3QgaXMgaW4gcHJvZ3Jlc3MKICAgCiAgIHFPYmplY3QtPmNvbm5lY3QoIGpvYiwgU0lHTkFMKCBy
ZXN1bHQoIEtJTzo6Sm9iKiApICksCiAgICAgICAgICAgICAgICAgICAgIFNMT1QoIHNsb3RGaW5p
c2hlZCggS0lPOjpKb2IqICkgKSApOwpAQCAtNDIyLDIwICszMzUsMjMgQEAgdm9pZCBYTUxIdHRw
UmVxdWVzdDo6YWJvcnQoKQogICBkZWNvZGVyID0gMDsKICAgYWJvcnRlZCA9IHRydWU7CiAKLSAg
aWYgKGhhZEpvYikgewotICAgIEpTTG9jayBsb2NrOwotICAgIGdjVW5wcm90ZWN0KHRoaXMpOwot
ICB9CisgIGlmIChoYWRKb2IpCisgICAgZGVyZWYoKTsKIH0KIAotdm9pZCBYTUxIdHRwUmVxdWVz
dDo6c2V0UmVxdWVzdEhlYWRlcihjb25zdCBRU3RyaW5nJiBuYW1lLCBjb25zdCBRU3RyaW5nICZ2
YWx1ZSkKK3ZvaWQgWE1MSHR0cFJlcXVlc3Q6Om92ZXJyaWRlTUlNRVR5cGUoY29uc3QgRE9NU3Ry
aW5nJiBvdmVycmlkZSkKK3sKKyAgTUlNRVR5cGVPdmVycmlkZSA9IG92ZXJyaWRlLnFzdHJpbmco
KTsKK30KKwordm9pZCBYTUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRlcihjb25zdCBET01T
dHJpbmcmIG5hbWUsIGNvbnN0IERPTVN0cmluZyAmdmFsdWUpCiB7CiAgIGlmIChyZXF1ZXN0SGVh
ZGVycy5sZW5ndGgoKSA+IDApIHsKICAgICByZXF1ZXN0SGVhZGVycyArPSAiXHJcbiI7CiAgIH0K
LSAgcmVxdWVzdEhlYWRlcnMgKz0gbmFtZTsKKyAgcmVxdWVzdEhlYWRlcnMgKz0gbmFtZS5xc3Ry
aW5nKCk7CiAgIHJlcXVlc3RIZWFkZXJzICs9ICI6ICI7Ci0gIHJlcXVlc3RIZWFkZXJzICs9IHZh
bHVlOworICByZXF1ZXN0SGVhZGVycyArPSB2YWx1ZS5xc3RyaW5nKCk7CiB9CiAKIFFTdHJpbmcg
WE1MSHR0cFJlcXVlc3Q6OmdldFJlcXVlc3RIZWFkZXIoY29uc3QgUVN0cmluZyYgbmFtZSkgY29u
c3QKQEAgLTQ0MywyNCArMzU5LDI0IEBAIFFTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldFJlcXVl
c3RIZWFkZXIKICAgcmV0dXJuIGdldFNwZWNpZmljSGVhZGVyKHJlcXVlc3RIZWFkZXJzLCBuYW1l
KTsKIH0KIAotSlNWYWx1ZSAqWE1MSHR0cFJlcXVlc3Q6OmdldEFsbFJlc3BvbnNlSGVhZGVycygp
IGNvbnN0CitET01TdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldEFsbFJlc3BvbnNlSGVhZGVycygp
IGNvbnN0CiB7CiAgIGlmIChyZXNwb25zZUhlYWRlcnMuaXNFbXB0eSgpKSB7Ci0gICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIERPTVN0cmluZygpOwogICB9CiAKICAgaW50IGVu
ZE9mTGluZSA9IHJlc3BvbnNlSGVhZGVycy5maW5kKCJcbiIpOwogCiAgIGlmIChlbmRPZkxpbmUg
PT0gLTEpIHsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gRE9NU3RyaW5n
KCk7CiAgIH0KIAotICByZXR1cm4ganNTdHJpbmcocmVzcG9uc2VIZWFkZXJzLm1pZChlbmRPZkxp
bmUgKyAxKSArICJcbiIpOworICByZXR1cm4gcmVzcG9uc2VIZWFkZXJzLm1pZChlbmRPZkxpbmUg
KyAxKSArICJcbiI7CiB9CiAKLVFTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldFJlc3BvbnNlSGVh
ZGVyKGNvbnN0IFFTdHJpbmcmIG5hbWUpIGNvbnN0CitET01TdHJpbmcgWE1MSHR0cFJlcXVlc3Q6
OmdldFJlc3BvbnNlSGVhZGVyKGNvbnN0IERPTVN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgcmV0
dXJuIGdldFNwZWNpZmljSGVhZGVyKHJlc3BvbnNlSGVhZGVycywgbmFtZSk7CisgIHJldHVybiBn
ZXRTcGVjaWZpY0hlYWRlcihyZXNwb25zZUhlYWRlcnMsIG5hbWUucXN0cmluZygpKTsKIH0KIAog
UVN0cmluZyBYTUxIdHRwUmVxdWVzdDo6Z2V0U3BlY2lmaWNIZWFkZXIoY29uc3QgUVN0cmluZyYg
aGVhZGVycywgY29uc3QgUVN0cmluZyYgbmFtZSkKQEAgLTQ5Miw0MyArNDA4LDQwIEBAIGJvb2wg
WE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlSXNYTUwoKSBjb24KIHsKICAgICBRU3RyaW5nIG1pbWVU
eXBlID0gZ2V0TUlNRVR5cGUoTUlNRVR5cGVPdmVycmlkZSk7CiAgICAgaWYgKG1pbWVUeXBlLmlz
RW1wdHkoKSkKLSAgICAgICAgbWltZVR5cGUgPSBnZXRNSU1FVHlwZShnZXRSZXNwb25zZUhlYWRl
cigiQ29udGVudC1UeXBlIikpOworICAgICAgICBtaW1lVHlwZSA9IGdldE1JTUVUeXBlKGdldFJl
c3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKS5xc3RyaW5nKCkpOwogICAgIGlmIChtaW1lVHlw
ZS5pc0VtcHR5KCkpCiAgICAgICBtaW1lVHlwZSA9ICJ0ZXh0L3htbCI7CiAgICAgCiAgICAgcmV0
dXJuIERPTUltcGxlbWVudGF0aW9uSW1wbDo6aXNYTUxNSU1FVHlwZShtaW1lVHlwZSk7CiB9CiAK
LUpTVmFsdWUgKlhNTEh0dHBSZXF1ZXN0OjpnZXRTdGF0dXMoKSBjb25zdAoraW50IFhNTEh0dHBS
ZXF1ZXN0OjpnZXRTdGF0dXMoKSBjb25zdAogewotICBpZiAocmVzcG9uc2VIZWFkZXJzLmlzRW1w
dHkoKSkgewotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICB9CisgIGlmIChyZXNwb25zZUhl
YWRlcnMuaXNFbXB0eSgpKQorICAgIHJldHVybiAtMTsKICAgCiAgIGludCBlbmRPZkxpbmUgPSBy
ZXNwb25zZUhlYWRlcnMuZmluZCgiXG4iKTsKICAgUVN0cmluZyBmaXJzdExpbmUgPSBlbmRPZkxp
bmUgPT0gLTEgPyByZXNwb25zZUhlYWRlcnMgOiByZXNwb25zZUhlYWRlcnMubGVmdChlbmRPZkxp
bmUpOwogICBpbnQgY29kZVN0YXJ0ID0gZmlyc3RMaW5lLmZpbmQoIiAiKTsKICAgaW50IGNvZGVF
bmQgPSBmaXJzdExpbmUuZmluZCgiICIsIGNvZGVTdGFydCArIDEpOwogICAKLSAgaWYgKGNvZGVT
dGFydCA9PSAtMSB8fCBjb2RlRW5kID09IC0xKSB7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gIH0KKyAgaWYgKGNvZGVTdGFydCA9PSAtMSB8fCBjb2RlRW5kID09IC0xKQorICAgIHJldHVy
biAtMTsKICAgCiAgIFFTdHJpbmcgbnVtYmVyID0gZmlyc3RMaW5lLm1pZChjb2RlU3RhcnQgKyAx
LCBjb2RlRW5kIC0gKGNvZGVTdGFydCArIDEpKTsKICAgCiAgIGJvb2wgb2sgPSBmYWxzZTsKICAg
aW50IGNvZGUgPSBudW1iZXIudG9JbnQoJm9rKTsKLSAgaWYgKCFvaykgewotICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotICB9CisgIGlmICghb2spCisgICAgcmV0dXJuIC0xOwogCi0gIHJldHVy
biBqc051bWJlcihjb2RlKTsKKyAgcmV0dXJuIGNvZGU7CiB9CiAKLUpTVmFsdWUgKlhNTEh0dHBS
ZXF1ZXN0OjpnZXRTdGF0dXNUZXh0KCkgY29uc3QKK0RPTVN0cmluZyBYTUxIdHRwUmVxdWVzdDo6
Z2V0U3RhdHVzVGV4dCgpIGNvbnN0CiB7CiAgIGlmIChyZXNwb25zZUhlYWRlcnMuaXNFbXB0eSgp
KSB7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIERPTVN0cmluZygpOwog
ICB9CiAgIAogICBpbnQgZW5kT2ZMaW5lID0gcmVzcG9uc2VIZWFkZXJzLmZpbmQoIlxuIik7CkBA
IC01MzcsMTIgKzQ1MCwxMiBAQCBKU1ZhbHVlICpYTUxIdHRwUmVxdWVzdDo6Z2V0U3RhdHVzVGV4
dCgpCiAgIGludCBjb2RlRW5kID0gZmlyc3RMaW5lLmZpbmQoIiAiLCBjb2RlU3RhcnQgKyAxKTsK
IAogICBpZiAoY29kZVN0YXJ0ID09IC0xIHx8IGNvZGVFbmQgPT0gLTEpIHsKLSAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gRE9NU3RyaW5nKCk7CiAgIH0KICAgCiAgIFFTdHJp
bmcgc3RhdHVzVGV4dCA9IGZpcnN0TGluZS5taWQoY29kZUVuZCArIDEsIGVuZE9mTGluZSAtIChj
b2RlRW5kICsgMSkpLnN0cmlwV2hpdGVTcGFjZSgpOwogICAKLSAgcmV0dXJuIGpzU3RyaW5nKHN0
YXR1c1RleHQpOworICByZXR1cm4gRE9NU3RyaW5nKHN0YXR1c1RleHQpOwogfQogCiB2b2lkIFhN
TEh0dHBSZXF1ZXN0Ojpwcm9jZXNzU3luY0xvYWRSZXN1bHRzKGNvbnN0IEJ5dGVBcnJheSAmZGF0
YSwgY29uc3QgS1VSTCAmZmluYWxVUkwsIGNvbnN0IFFTdHJpbmcgJmhlYWRlcnMpCkBAIC01ODEs
MTQgKzQ5NCwxNSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzbG90RmluaXNoZWQoS0lPOjpKCiAg
IGlmIChkZWNvZGVyKQogICAgIHJlc3BvbnNlICs9IGRlY29kZXItPmZsdXNoKCk7CiAKKyAgYm9v
bCBoYWRKb2IgPSBqb2I7CiAgIHJlbW92ZUZyb21SZXF1ZXN0c0J5RG9jdW1lbnQoKTsKICAgam9i
ID0gMDsKIAogICBjaGFuZ2VTdGF0ZShDb21wbGV0ZWQpOwogICBkZWNvZGVyID0gMDsKIAotICBK
U0xvY2sgbG9jazsKLSAgZ2NVbnByb3RlY3QodGhpcyk7CisgIGlmIChoYWRKb2IpCisgICAgZGVy
ZWYoKTsKIH0KIAogdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2xvdFJlZGlyZWN0aW9uKEtJTzo6Sm9i
KiwgY29uc3QgS1VSTCYgdXJsKQpAQCAtNjA5LDcgKzUyMyw3IEBAIHZvaWQgWE1MSHR0cFJlcXVl
c3Q6OnNsb3REYXRhKEtJTzo6Sm9iKiwKICAgaWYgKCFkZWNvZGVyKSB7CiAgICAgZW5jb2Rpbmcg
PSBnZXRDaGFyc2V0KE1JTUVUeXBlT3ZlcnJpZGUpOwogICAgIGlmIChlbmNvZGluZy5pc0VtcHR5
KCkpCi0gICAgICBlbmNvZGluZyA9IGdldENoYXJzZXQoZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRl
bnQtVHlwZSIpKTsKKyAgICAgIGVuY29kaW5nID0gZ2V0Q2hhcnNldChnZXRSZXNwb25zZUhlYWRl
cigiQ29udGVudC1UeXBlIikucXN0cmluZygpKTsKICAgICBpZiAoZW5jb2RpbmcuaXNFbXB0eSgp
ICYmIGpvYikKICAgICAgIGVuY29kaW5nID0gam9iLT5xdWVyeU1ldGFEYXRhKCJjaGFyc2V0Iik7
CiAgICAgCkBAIC02NzQsMTE1ICs1ODgsMTAgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6cmVtb3Zl
RnJvbVJlcXVlc3RzQgogICB9CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OmNhbmNlbFJlcXVl
c3RzKERPTTo6RG9jdW1lbnRJbXBsKiBkKQordm9pZCBYTUxIdHRwUmVxdWVzdDo6Y2FuY2VsUmVx
dWVzdHMoRG9jdW1lbnRJbXBsKiBkKQogewogICB3aGlsZSAoUmVxdWVzdHNTZXQqIHJlcXVlc3Rz
ID0gcmVxdWVzdHNCeURvY3VtZW50KCkuZ2V0KGQpKQogICAgICgqcmVxdWVzdHMtPmJlZ2luKCkp
LT5hYm9ydCgpOwogfQogCi1KU1ZhbHVlICpYTUxIdHRwUmVxdWVzdFByb3RvRnVuYzo6Y2FsbEFz
RnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqdGhpc09iaiwgY29uc3QgTGlzdCAm
YXJncykKLXsKLSAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmWE1MSHR0cFJlcXVlc3Q6OmluZm8p
KQotICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0KLSAgWE1MSHR0cFJl
cXVlc3QgKnJlcXVlc3QgPSBzdGF0aWNfY2FzdDxYTUxIdHRwUmVxdWVzdCAqPih0aGlzT2JqKTsK
LQotICBzd2l0Y2ggKGlkKSB7Ci0gIGNhc2UgWE1MSHR0cFJlcXVlc3Q6OkFib3J0OiB7Ci0gICAg
cmVxdWVzdC0+YWJvcnQoKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgfQotICBjYXNl
IFhNTEh0dHBSZXF1ZXN0OjpHZXRBbGxSZXNwb25zZUhlYWRlcnM6IHsKLSAgICBpZiAoYXJncy5z
aXplKCkgIT0gMCkgewotICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHJlcXVlc3QtPmdldEFsbFJlc3BvbnNlSGVhZGVycygpOwotICB9Ci0gIGNhc2UgWE1M
SHR0cFJlcXVlc3Q6OkdldFJlc3BvbnNlSGVhZGVyOiB7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpICE9
IDEpIHsKLSAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLSAgICAKLSAgICBRU3Ry
aW5nIGhlYWRlciA9IHJlcXVlc3QtPmdldFJlc3BvbnNlSGVhZGVyKGFyZ3NbMF0tPnRvU3RyaW5n
KGV4ZWMpLnFzdHJpbmcoKSk7Ci0KLSAgICBpZiAoaGVhZGVyLmlzTnVsbCgpKQotICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICByZXR1cm4ganNTdHJpbmcoaGVhZGVyKTsKLSAgfQot
ICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpPcGVuOgotICAgIHsKLSAgICAgIGlmIChhcmdzLnNpemUo
KSA8IDIgfHwgYXJncy5zaXplKCkgPiA1KSB7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgICAgfQotICAgIAotICAgICAgUVN0cmluZyBtZXRob2QgPSBhcmdzWzBdLT50b1N0cmlu
ZyhleGVjKS5xc3RyaW5nKCk7Ci0gICAgICBLVVJMIHVybCA9IEtVUkwoV2luZG93OjpyZXRyaWV2
ZUFjdGl2ZShleGVjKS0+ZnJhbWUoKS0+eG1sRG9jSW1wbCgpLT5jb21wbGV0ZVVSTChhcmdzWzFd
LT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkpKTsKLQotICAgICAgYm9vbCBhc3luYyA9IHRydWU7
Ci0gICAgICBpZiAoYXJncy5zaXplKCkgPj0gMykgewotICAgICAgICBhc3luYyA9IGFyZ3NbMl0t
PnRvQm9vbGVhbihleGVjKTsKLSAgICAgIH0KLSAgICAKLSAgICAgIGlmIChhcmdzLnNpemUoKSA+
PSA0KSB7Ci0gICAgICAgIHVybC5zZXRVc2VyKGFyZ3NbM10tPnRvU3RyaW5nKGV4ZWMpLnFzdHJp
bmcoKSk7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGlmIChhcmdzLnNpemUoKSA+PSA1KSB7Ci0g
ICAgICAgIHVybC5zZXRQYXNzKGFyZ3NbNF0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSk7Ci0g
ICAgICB9Ci0KLSAgICAgIHJlcXVlc3QtPm9wZW4obWV0aG9kLCB1cmwsIGFzeW5jKTsKLQotICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpT
ZW5kOgotICAgIHsKLSAgICAgIGlmIChhcmdzLnNpemUoKSA+IDEpIHsKLSAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChyZXF1ZXN0LT5zdGF0ZSAhPSBM
b2FkaW5nKSB7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgfQotCi0gICAg
ICBET01TdHJpbmcgYm9keTsKLQotICAgICAgaWYgKGFyZ3Muc2l6ZSgpID49IDEpIHsKLSAgICAg
ICAgaWYgKGFyZ3NbMF0tPnRvT2JqZWN0KGV4ZWMpLT5pbmhlcml0cygmRE9NRG9jdW1lbnQ6Omlu
Zm8pKSB7Ci0gICAgICAgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBzdGF0aWNfY2FzdDxEb2N1bWVu
dEltcGwgKj4oc3RhdGljX2Nhc3Q8RE9NRG9jdW1lbnQgKj4oYXJnc1swXS0+dG9PYmplY3QoZXhl
YykpLT5pbXBsKCkpOwotICAgICAgICAgIGJvZHkgPSBkb2MtPnRvU3RyaW5nKCkucXN0cmluZygp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8vIGNvbnZlcnRpbmcgY2VydGFpbiB2YWx1
ZXMgKGxpa2UgbnVsbCkgdG8gb2JqZWN0IGNhbiBzZXQgYW4gZXhjZXB0aW9uCi0gICAgICAgICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgICBib2R5ID0gYXJnc1swXS0+dG9TdHJp
bmcoZXhlYykuZG9tU3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcmVxdWVz
dC0+c2VuZChib2R5KTsKLQotICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICBj
YXNlIFhNTEh0dHBSZXF1ZXN0OjpTZXRSZXF1ZXN0SGVhZGVyOiB7Ci0gICAgaWYgKGFyZ3Muc2l6
ZSgpICE9IDIpIHsKLSAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLSAgICAKLSAg
ICByZXF1ZXN0LT5zZXRSZXF1ZXN0SGVhZGVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJp
bmcoKSwgYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpKTsKLSAgICAKLSAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgfQotICBjYXNlIFhNTEh0dHBSZXF1ZXN0OjpPdmVycmlkZU1J
TUVUeXBlOiB7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDEpIHsKLSAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgIH0KLSAgICByZXF1ZXN0LT5NSU1FVHlwZU92ZXJyaWRlID0gYXJnc1sw
XS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICB9Ci0gIH0KLQotICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQogfSAvLyBlbmQgbmFtZXNw
YWNlCkluZGV4OiBraHRtbC9lY21hL2tqc19iaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRt
bC9lY21hL2tqc19iaW5kaW5nLmNwcAkocmV2aXNpb24gMTIyNjcpCisrKyBraHRtbC9lY21hL2tq
c19iaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE3LDYgKzMxNywxMyBAQCBKU1ZhbHVl
ICpqc1N0cmluZ09yTnVsbChjb25zdCBET01TdHJpbmcgCiAgICAgcmV0dXJuIGpzU3RyaW5nKHMp
OwogfQogCitKU1ZhbHVlICpqc1N0cmluZ09yVW5kZWZpbmVkKGNvbnN0IERPTVN0cmluZyAmcykK
K3sKKyAgICBpZiAocy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgcmV0dXJuIGpzU3RyaW5nKHMpOworfQorCiBET01TdHJpbmcgdmFsdWVUb1N0cmluZ1dpdGhO
dWxsQ2hlY2soRXhlY1N0YXRlICpleGVjLCBKU1ZhbHVlICp2YWwpCiB7CiAgICAgaWYgKHZhbC0+
aXNOdWxsKCkpCkluZGV4OiBraHRtbC9lY21hL2tqc19ldmVudHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtodG1sL2VjbWEva2pzX2V2ZW50cy5jcHAJKHJldmlzaW9uIDEyMjY3KQorKysga2h0bWwvZWNt
YS9ranNfZXZlbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTMgKzQxLDYgQEAgdXNpbmcg
bmFtZXNwYWNlIGtodG1sOwogCiBuYW1lc3BhY2UgS0pTIHsKIAotc3RhdGljIEpTVmFsdWUqIGpz
U3RyaW5nT3JVbmRlZmluZWQoY29uc3QgRE9NU3RyaW5nJiBzdHIpCi17Ci0gICAgcmV0dXJuIHN0
ci5pc051bGwoKSA/IGpzVW5kZWZpbmVkKCkgOiBqc1N0cmluZyhzdHIpOwotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KIEpTQWJzdHJhY3RFdmVudExpc3RlbmVyOjpKU0Fic3RyYWN0RXZlbnRM
aXN0ZW5lcihib29sIF9odG1sKQogICAgIDogaHRtbChfaHRtbCkKIHsKSW5kZXg6IGtodG1sL2Vj
bWEva2pzX3dpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvZWNtYS9ranNfd2luZG93LmNw
cAkocmV2aXNpb24gMTIyNjcpCisrKyBraHRtbC9lY21hL2tqc193aW5kb3cuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw3ICs0Myw3IEBACiAjaW5jbHVkZSAia2pzX3RyYXZlcnNhbC5oIgogI2lu
Y2x1ZGUgImtqc19jc3MuaCIKICNpbmNsdWRlICJranNfZXZlbnRzLmgiCi0jaW5jbHVkZSAieG1s
aHR0cHJlcXVlc3QuaCIKKyNpbmNsdWRlICJKU1hNTEh0dHBSZXF1ZXN0LmgiCiAjaW5jbHVkZSAi
eG1sc2VyaWFsaXplci5oIgogI2lmZGVmIEtIVE1MX1hTTFQKICNpbmNsdWRlICJYU0xUUHJvY2Vz
c29yLmgiCkBAIC04MDUsNyArODA1LDcgQEAgSlNWYWx1ZSAqV2luZG93OjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdAogICAgIGNhc2UgT3B0aW9uOgogICAgICAgcmV0dXJuIG5ldyBPcHRpb25Db25z
dHJ1Y3RvckltcChleGVjLCBtX2ZyYW1lLT54bWxEb2NJbXBsKCkpOwogICAgIGNhc2UgWE1MSHR0
cFJlcXVlc3Q6Ci0gICAgICByZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXAo
ZXhlYywgbV9mcmFtZS0+eG1sRG9jSW1wbCgpKTsKKyAgICAgIHJldHVybiBuZXcgSlNYTUxIdHRw
UmVxdWVzdENvbnN0cnVjdG9ySW1wKGV4ZWMsIG1fZnJhbWUtPnhtbERvY0ltcGwoKSk7CiAgICAg
Y2FzZSBYTUxTZXJpYWxpemVyOgogICAgICAgcmV0dXJuIG5ldyBYTUxTZXJpYWxpemVyQ29uc3Ry
dWN0b3JJbXAoZXhlYyk7CiAgICAgY2FzZSBET01QYXJzZXI6CkluZGV4OiBrd3EvS1dRU2xvdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga3dxL0tXUVNsb3QuY3BwCShyZXZpc2lvbiAxMjI2NykKKysrIGt3
cS9LV1FTbG90LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCB1c2luZyBraHRt
bDo6UmVuZGVyV2lkZ2V0OwogdXNpbmcga2h0bWw6OlJlbmRlclNjcm9sbE1lZGlhdG9yOwogdXNp
bmcgS0lPOjpKb2I7CiB1c2luZyBLSlM6OldpbmRvd1FPYmplY3Q7Ci11c2luZyBLSlM6OlhNTEh0
dHBSZXF1ZXN0UU9iamVjdDsKK3VzaW5nIFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0UU9iamVjdDsK
ICNpZmRlZiBTVkdfU1VQUE9SVAogdXNpbmcgS1NWRzo6VGltZVNjaGVkdWxlcjsKICNlbmRpZgpJ
bmRleDogcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9GcmFtZS5jcHAJKHJldmlz
aW9uIDEyMjY3KQorKysgcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1
LDcgQEAKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiTm9kZUxpc3RJbXBsLmgiCiAjaW5jbHVk
ZSAiSFRNTEZvcm1FbGVtZW50SW1wbC5oIgogI2luY2x1ZGUgIkhUTUxHZW5lcmljRm9ybUVsZW1l
bnRJbXBsLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTM2NSw3ICszNjYsNyBAQCB2b2lkIEZy
YW1lOjpzdG9wTG9hZGluZyhib29sIHNlbmRVbmxvYWQpCiAgIGlmIChEb2N1bWVudEltcGwgKmRv
YyA9IGQtPm1fZG9jKSB7CiAgICAgaWYgKERvY0xvYWRlciAqZG9jTG9hZGVyID0gZG9jLT5kb2NM
b2FkZXIoKSkKICAgICAgIENhY2hlOjpsb2FkZXIoKS0+Y2FuY2VsUmVxdWVzdHMoZG9jTG9hZGVy
KTsKLSAgICBLSlM6OlhNTEh0dHBSZXF1ZXN0OjpjYW5jZWxSZXF1ZXN0cyhkb2MpOworICAgICAg
WE1MSHR0cFJlcXVlc3Q6OmNhbmNlbFJlcXVlc3RzKGRvYyk7CiAgIH0KIAogICAvLyB0ZWxsIGFs
bCBzdWJmcmFtZXMgdG8gc3RvcCBhcyB3ZWxsCkluZGV4OiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxMjI2NykKKysrIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMTY3OSw2ICsxNjc5LDEwIEBACiAJCUJDRkIyRjc5MDk3QTJF
MUEwMEJBNzAzRCAvKiBBcmVuYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkNGQjJGNzUwOTdBMkUxQTAwQkE3MDNEIC8qIEFyZW5hLmggKi87IH07CiAJ
CUUxRUU3NzM3MDhGMTA4NkMwMDE2Njg3MCAvKiBXZWJDb3JlVGV4dERlY29kZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRUU3NzM1MDhGMTA4NkMw
MDE2Njg3MCAvKiBXZWJDb3JlVGV4dERlY29kZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMUVFNzczODA4RjEwODZDMDAxNjY4NzAgLyogV2Vi
Q29yZVRleHREZWNvZGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTFFRTc3MzYwOEYxMDg2QzAwMTY2ODcwIC8qIFdlYkNvcmVUZXh0RGVjb2Rlci5t
bSAqLzsgfTsKKwkJRTFGN0Y1NjAwOTgxQUY1NzAwNzNCRTZBIC8qIEpTWE1MSHR0cFJlcXVlc3Qu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFGN0Y1
NUUwOTgxQUY1NzAwNzNCRTZBIC8qIEpTWE1MSHR0cFJlcXVlc3QuY3BwICovOyB9OworCQlFMUY3
RjU2MTA5ODFBRjU3MDA3M0JFNkEgLyogSlNYTUxIdHRwUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFGN0Y1NUYwOTgxQUY1NzAwNzNCRTZB
IC8qIEpTWE1MSHR0cFJlcXVlc3QuaCAqLzsgfTsKKwkJRTFGN0Y1NjIwOTgxQUY1NzAwNzNCRTZB
IC8qIEpTWE1MSHR0cFJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTFGN0Y1NUUwOTgxQUY1NzAwNzNCRTZBIC8qIEpTWE1MSHR0cFJlcXVl
c3QuY3BwICovOyB9OworCQlFMUY3RjU2MzA5ODFBRjU3MDA3M0JFNkEgLyogSlNYTUxIdHRwUmVx
dWVzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFG
N0Y1NUYwOTgxQUY1NzAwNzNCRTZBIC8qIEpTWE1MSHR0cFJlcXVlc3QuaCAqLzsgfTsKIAkJRUQw
NDhBQkMwODMzRjEzMjAwNkUxRTY3IC8qIHRleHRBcmVhUmVzaXplQ29ybmVyLnRpZmYgaW4gUmVz
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVEMDQ4QUJCMDgzM0Yx
MzIwMDZFMUU2NyAvKiB0ZXh0QXJlYVJlc2l6ZUNvcm5lci50aWZmICovOyB9OwogCQlGQUUwNDE4
QjA5NzU5Njk0MDAwNTQwQkUgLyogUmVuZGVyU1ZHSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZBRTA0MTg5MDk3NTk2OTQwMDA1NDBCRSAvKiBS
ZW5kZXJTVkdJbWFnZS5oICovOyB9OwogCQlGQUUwNDE4QzA5NzU5Njk0MDAwNTQwQkUgLyogUmVu
ZGVyU1ZHSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkFFMDQxOEEwOTc1OTY5NDAwMDU0MEJFIC8qIFJlbmRlclNWR0ltYWdlLmNwcCAqLzsg
fTsKQEAgLTI2NjUsNiArMjY2OSw4IEBACiAJCUJFRjdFRUExMDVGRjhGMEQwMDk3MTdFRSAvKiBL
V1FFZGl0Q29tbWFuZC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IEtXUUVkaXRDb21tYW5kLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRTFFRTc3MzUwOEYxMDg2QzAw
MTY2ODcwIC8qIFdlYkNvcmVUZXh0RGVjb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVUZXh0RGVjb2Rlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRTFFRTc3MzYw
OEYxMDg2QzAwMTY2ODcwIC8qIFdlYkNvcmVUZXh0RGVjb2Rlci5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZVRleHREZWNv
ZGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKKwkJRTFGN0Y1NUUwOTgxQUY1NzAwNzNCRTZBIC8qIEpTWE1MSHR0cFJlcXVlc3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNYTUxIdHRwUmVxdWVzdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxRjdGNTVGMDk4MUFGNTcwMDczQkU2
QSAvKiBKU1hNTEh0dHBSZXF1ZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTWE1MSHR0cFJlcXVlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUQwNDhB
QkIwODMzRjEzMjAwNkUxRTY3IC8qIHRleHRBcmVhUmVzaXplQ29ybmVyLnRpZmYgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBpbWFnZS50aWZmOyBuYW1l
ID0gdGV4dEFyZWFSZXNpemVDb3JuZXIudGlmZjsgcGF0aCA9IFJlc291cmNlcy90ZXh0QXJlYVJl
c2l6ZUNvcm5lci50aWZmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFREE0QUM5NzA3
NkZCODkxMDBERDIzRUMgLyogZWRpdF9hY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gZWRpdF9hY3Rpb25zLmg7IHBhdGggPSBlZGl0aW5n
L2VkaXRfYWN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVz
ZXNUYWJzID0gMDsgfTsKIAkJRjUxMTdCQzkwMkY5RkZFRjAxODYzNUNFIC8qIEtXUVNpZ25hbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gS1dRU2lnbmFsLmg7IHBhdGggPSBr
d3EvS1dRU2lnbmFsLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKQEAgLTQwNDYsNiAr
NDA1Miw4IEBACiAJCQkJRjUyM0QyMTEwMkRFNDM2OTAxODYzNUNBIC8qIGtqc193aW5kb3cuaCAq
LywKIAkJCQk2NTRFN0VFMDA1NjlGRDQ2MDAzNThCRDIgLyogeG1saHR0cHJlcXVlc3QuY3BwICov
LAogCQkJCTY1NEU3RUUxMDU2OUZENDYwMDM1OEJEMiAvKiB4bWxodHRwcmVxdWVzdC5oICovLAor
CQkJCUUxRjdGNTVFMDk4MUFGNTcwMDczQkU2QSAvKiBKU1hNTEh0dHBSZXF1ZXN0LmNwcCAqLywK
KwkJCQlFMUY3RjU1RjA5ODFBRjU3MDA3M0JFNkEgLyogSlNYTUxIdHRwUmVxdWVzdC5oICovLAog
CQkJCTY1OTEyQjBEMDU4NjkyMTAwMDEyM0E2OSAvKiB4bWxzZXJpYWxpemVyLmNwcCAqLywKIAkJ
CQk2NTkxMkIwRTA1ODY5MjEwMDAxMjNBNjkgLyogeG1sc2VyaWFsaXplci5oICovLAogCQkJCTFB
NjlEMzgwMDg1NjI3NDEwMDA5ODgwRCAvKiBkb21wYXJzZXIuY3BwICovLApAQCAtNTAzMSw2ICs1
MDM5LDcgQEAKIAkJCQlBOERGNEFFRTA5ODBDNDJDMDA1Mjk4MUIgLyogUmVuZGVyVGFibGVSb3cu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4REY0QUVGMDk4MEM0MkMwMDUyOTgxQiAvKiBSZW5kZXJU
YWJsZVNlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4REY0QUYxMDk4MEM0MkMwMDUyOTgx
QiAvKiBSZW5kZXJUYWJsZUNvbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTFGN0Y1NjEwOTgxQUY1
NzAwNzNCRTZBIC8qIEpTWE1MSHR0cFJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNTM4Miw2
ICs1MzkxLDcgQEAKIAkJCQlBOERGNEFGODA5ODBDNDJDMDA1Mjk4MUIgLyogUmVuZGVyVGFibGVS
b3cuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4REY0QUY5MDk4MEM0MkMwMDUyOTgxQiAvKiBSZW5k
ZXJUYWJsZVNlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4REY0QUZCMDk4MEM0MkMwMDUy
OTgxQiAvKiBSZW5kZXJUYWJsZUNvbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTFGN0Y1NjMwOTgx
QUY1NzAwNzNCRTZBIC8qIEpTWE1MSHR0cFJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNTQw
OSw3ICs1NDE5LDcgQEAKIAkJCQk5MzJGQzBEQTA4MjRBMzM3MDA1QjNDNzUgLyogS1dRQ29sb3JE
YXRhLmMgKi8sCiAJCQkJOTNFQTY4NDQwODI0OTc5MDAwNjg3RjU2IC8qIGxpYnhtbDItV2ViQ29y
ZSAqLywKIAkJCQk5MzJGQzM4RjA4MjRCQTMwMDA1QjNDNzUgLyogdG9rZW5pemVyLmNwcCAqLywK
LQkJCQk5MzJGQzE3MTA4MjRBOTEzMDA1QjNDNzUgLyogeG1saHR0cHJlcXVlc3QubHV0LmggKi8s
CisJCQkJOTMyRkMxNzEwODI0QTkxMzAwNUIzQzc1IC8qIEpTWE1MSHR0cFJlcXVlc3QubHV0Lmgg
Ki8sCiAJCQkJOTMyRkMxNzMwODI0QTkxOTAwNUIzQzc1IC8qIHhtbHNlcmlhbGl6ZXIubHV0Lmgg
Ki8sCiAJCQkJQTgzQzg2N0QwOTExQUExOTAwOUJGNEE3IC8qIFhTTFRQcm9jZXNzb3IubHV0Lmgg
Ki8sCiAJCQkJMUE2OUQzODcwODU2Mjg2NTAwMDk4ODBEIC8qIGRvbXBhcnNlci5sdXQuaCAqLywK
QEAgLTU4ODksMjIgKzU4OTksMjIgQEAKIAkJCXNoZWxsUGF0aCA9IC9iaW4vc2g7CiAJCQlzaGVs
bFNjcmlwdCA9ICJcIiRDUkVBVEVfSEFTSF9UQUJMRVwiIGtodG1sL2VjbWEva2pzX3dpbmRvdy5j
cHAgPiBcIiRERVJJVkVEX0ZJTEVfRElSL2tqc193aW5kb3cubHV0LmhcIiI7CiAJCX07Ci0JCTkz
MkZDMTcxMDgyNEE5MTMwMDVCM0M3NSAvKiB4bWxodHRwcmVxdWVzdC5sdXQuaCAqLyA9IHsKKwkJ
OTMyRkMxNzEwODI0QTkxMzAwNUIzQzc1IC8qIEpTWE1MSHR0cFJlcXVlc3QubHV0LmggKi8gPSB7
CiAJCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sg
PSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJCQkpOwogCQkJaW5wdXRQYXRocyA9ICgKIAkJ
CQkiJChDUkVBVEVfSEFTSF9UQUJMRSkiLAotCQkJCWtodG1sL2VjbWEveG1saHR0cHJlcXVlc3Qu
Y3BwLAorCQkJCWtodG1sL2VjbWEvSlNYTUxIdHRwUmVxdWVzdC5jcHAsCiAJCQkpOwotCQkJbmFt
ZSA9IHhtbGh0dHByZXF1ZXN0Lmx1dC5oOworCQkJbmFtZSA9IEpTWE1MSHR0cFJlcXVlc3QubHV0
Lmg7CiAJCQlvdXRwdXRQYXRocyA9ICgKLQkJCQkiJChERVJJVkVEX0ZJTEVfRElSKS94bWxodHRw
cmVxdWVzdC5sdXQuaCIsCisJCQkJIiQoREVSSVZFRF9GSUxFX0RJUikvSlNYTUxIdHRwUmVxdWVz
dC5sdXQuaCIsCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCQlzaGVsbFBhdGggPSAvYmluL3NoOwotCQkJc2hlbGxTY3JpcHQgPSAiXCIkQ1JFQVRF
X0hBU0hfVEFCTEVcIiBraHRtbC9lY21hL3htbGh0dHByZXF1ZXN0LmNwcCA+IFwiJERFUklWRURf
RklMRV9ESVIveG1saHR0cHJlcXVlc3QubHV0LmhcIiI7CisJCQlzaGVsbFNjcmlwdCA9ICJcIiRD
UkVBVEVfSEFTSF9UQUJMRVwiIGtodG1sL2VjbWEvSlNYTUxIdHRwUmVxdWVzdC5jcHAgPiBcIiRE
RVJJVkVEX0ZJTEVfRElSL0pTWE1MSHR0cFJlcXVlc3QubHV0LmhcIiI7CiAJCX07CiAJCTkzMkZD
MTczMDgyNEE5MTkwMDVCM0M3NSAvKiB4bWxzZXJpYWxpemVyLmx1dC5oICovID0gewogCQkJaXNh
ID0gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlOwpAQCAtNjk1MSw2ICs2OTYxLDcgQEAKIAkJCQlB
OERGNEFFQzA5ODBDNDJDMDA1Mjk4MUIgLyogUmVuZGVyVGFibGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQThERjRBRUQwOTgwQzQyQzAwNTI5ODFCIC8qIFJlbmRlclRhYmxlU2VjdGlvbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBOERGNEFGMDA5ODBDNDJDMDA1Mjk4MUIgLyogUmVuZGVyVGFi
bGVSb3cuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTFGN0Y1NjAwOTgxQUY1NzAwNzNCRTZBIC8q
IEpTWE1MSHR0cFJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC03MjU2LDYgKzcyNjcsNyBA
QAogCQkJCUE4REY0QUY2MDk4MEM0MkMwMDUyOTgxQiAvKiBSZW5kZXJUYWJsZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBOERGNEFGNzA5ODBDNDJDMDA1Mjk4MUIgLyogUmVuZGVyVGFibGVTZWN0
aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4REY0QUZBMDk4MEM0MkMwMDUyOTgxQiAvKiBS
ZW5kZXJUYWJsZVJvdy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMUY3RjU2MjA5ODFBRjU3MDA3
M0JFNkEgLyogSlNYTUxIdHRwUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
</data>
<flag name="review"
          id="1343"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>