<?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>11658</bug_id>
          
          <creation_ts>2006-11-20 13:08:51 -0800</creation_ts>
          <short_desc>KRenderingPaintServer* rework</short_desc>
          <delta_ts>2006-11-21 04:33:03 -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>SVG</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>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>44935</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-11-20 13:08:51 -0800</bug_when>
    <thetext>Similiar to the work in patch 11468 (platform/graphics addition), and 11596 (KCanvasFilters split-up)the KRenderingPaintServer* classes has to be reworked.

The KRenderingPaintServer classes are moved to platform/graphics/svg, named SVGPaintServer*.
Removing the qt/quartz specific KRenderingPaintServer*(Qt/Quartz) which were inherting from
the KRenderingPaintServer* classes and reimplemented functions. Now designed just like all
other code in platform (adding functions, and the implementations in platform specific subdirs).

kcanvas/device/ now only contains KRenderingDevice &amp; KRenderingDeviceContext - to be
integrated within platform/graphics/GraphicsContext soon (Eric already started a patch
some time ago)

Attaching patch soon</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>44937</commentid>
    <comment_count>1</comment_count>
      <attachid>11589</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-11-20 13:44:02 -0800</bug_when>
    <thetext>Created attachment 11589
Initial patch

No new leaks or regressions introduced.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>44947</commentid>
    <comment_count>2</comment_count>
      <attachid>11589</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2006-11-20 18:20:07 -0800</bug_when>
    <thetext>Comment on attachment 11589
Initial patch

looks fine to me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>44962</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-11-21 04:33:03 -0800</bug_when>
    <thetext>Landed in r17870.
Thanks Oliver for the quick review!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11589</attachid>
            <date>2006-11-20 13:44:02 -0800</date>
            <delta_ts>2006-11-20 18:20:07 -0800</delta_ts>
            <desc>Initial patch</desc>
            <filename>move-paint-servers.diff</filename>
            <type>text/plain</type>
            <size>239528</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMTc4NjIpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC01MzUsMTYgKzUzNSw3IEBAIHNldCAoU1ZHX1NPVVJDRVMKICAgICBi
aW5kaW5ncy9qcy9KU1NWR1JlY3QuY3BwCiAKICAgICBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5n
RGV2aWNlLmNwcAotICAgIGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlckdyYWRp
ZW50LmNwcAotICAgIGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4u
Y3BwCi0gICAga2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQuY3BwCi0j
ICAga2NhbnZhcy9kZXZpY2UvcXQvS0NhbnZhc0ZpbHRlclF0LmNwcAotIyAgIGtjYW52YXMvZGV2
aWNlL3F0L0tDYW52YXNJbWFnZUl0ZW1RdC5jcHAKICAgICBrY2FudmFzL2RldmljZS9xdC9LUmVu
ZGVyaW5nRGV2aWNlUXQuY3BwCi0gICAga2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ1BhaW50
U2VydmVyR3JhZGllbnRRdC5jcHAKLSAgICBrY2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJQYXR0ZXJuUXQuY3BwCi0gICAga2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ1Bh
aW50U2VydmVyUXQuY3BwCi0gICAga2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ1BhaW50U2Vy
dmVyU29saWRRdC5jcHAKICAgICBrY2FudmFzL2RldmljZS9xdC9SZW5kZXJQYXRoUXQuY3BwCiAK
ICAgICBrc3ZnMi9jc3MvU1ZHQ1NTUGFyc2VyLmNwcApAQCAtOTkwLDcgKzk4MSw3IEBAIHNldChX
ZWJDb3JlX1NSQ1MKICAgICBwYWdlL1BhZ2UuY3BwCiAgICAgcGFnZS9QYWdlU3RhdGUuY3BwCiAK
LQlwYWdlL3F0L0V2ZW50SGFuZGxlclF0LmNwcCAgIAorICAgIHBhZ2UvcXQvRXZlbnRIYW5kbGVy
UXQuY3BwICAgCiAKICAgICBwbGF0Zm9ybS9BcmVuYS5jcHAKICAgICBwbGF0Zm9ybS9BcnJheUlt
cGwuY3BwCkBAIC0xMDUyLDYgKzEwNDMsMTIgQEAgc2V0KFdlYkNvcmVfU1JDUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L0ludFNpemVRdC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Q
YXRoUXQuY3BwCiAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUGFpbnRTZXJ2ZXIuY3Bw
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50U2VydmVyR3JhZGllbnQuY3BwCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQuY3Bw
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50U2VydmVyUGF0dGVybi5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudC5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUmVzb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3ZnL1NWR1Jlc291cmNlQ2xpcHBlci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdmcv
U1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0xMDc2LDYgKzEwNzMsMTIgQEAgc2V0KFdlYkNvcmVf
U1JDUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N2Zy9maWx0ZXJzL1NWR0ZpbHRlckVmZmVjdC5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvZmlsdGVycy9TVkdMaWdodFNvdXJjZS5jcHAK
IAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N2Zy9xdC9TVkdQYWludFNlcnZlckdyYWRpZW50UXQu
Y3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50U2VydmVyTGluZWFyR3Jh
ZGllbnRRdC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZHUGFpbnRTZXJ2ZXJQ
YXR0ZXJuUXQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50U2VydmVy
UXQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50U2VydmVyUmFkaWFs
R3JhZGllbnRRdC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZHUGFpbnRTZXJ2
ZXJTb2xpZFF0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N2Zy9xdC9TVkdSZXNvdXJjZUNs
aXBwZXJRdC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZHUmVzb3VyY2VJbWFn
ZVF0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N2Zy9xdC9TVkdSZXNvdXJjZU1hc2tlclF0
LmNwcApJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDE3ODYyKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxOTggQEAKKzIwMDYtMTEtMjAgIE5pa29sYXMgWmltbWVybWFubiAgPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBGaXhlczogaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTE2NTgKKworICAgICAgICBNb3ZlIEtSZW5kZXJpbmdQYWludFNlcnZlciogY2xhc3NlcyB0byB0
aGUgbG9jYXRpb24KKyAgICAgICAgb2YgYWxsIG90aGVyIHJlc291cmNlcyAocGxhdGZvcm0vZ3Jh
cGhpY3Mvc3ZnKS4KKworICAgICAgICBTb29uIHRoZSB3aG9sZSBwbGF0Zm9ybS9ncmFwaGljcy9z
dmcgc3R1ZmYgd2lsbCBiZW1vdmVkCisgICAgICAgIGludG8ga3N2ZzIvIGl0c2VsZiwgYXMgZGlz
Y3Vzc2VkIHdpdGggRGFyaW4uCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICoga2NhbnZhcy9k
ZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL0tSZW5k
ZXJpbmdQYWludFNlcnZlci5oOiBSZW1vdmVkLgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL0tS
ZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBrY2Fu
dmFzL2RldmljZS9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudC5oOiBSZW1vdmVkLgorICAg
ICAgICAqIGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4uY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlclBh
dHRlcm4uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJTb2xpZC5jcHA6IFJlbW92ZWQuCisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvS1Jl
bmRlcmluZ1BhaW50U2VydmVyU29saWQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBrY2FudmFzL2Rl
dmljZS9xdC9LUmVuZGVyaW5nRGV2aWNlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6S1JlbmRl
cmluZ0RldmljZVF0OjpjcmVhdGVQYWludFNlcnZlcik6CisgICAgICAgICoga2NhbnZhcy9kZXZp
Y2UvcXQvS1JlbmRlcmluZ0RldmljZVF0Lmg6CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXQv
S1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
a2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdC5oOiBSZW1v
dmVkLgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWludFNlcnZlclBh
dHRlcm5RdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRl
cmluZ1BhaW50U2VydmVyUGF0dGVyblF0Lmg6IFJlbW92ZWQuCisgICAgICAgICoga2NhbnZhcy9k
ZXZpY2UvcXQvS1JlbmRlcmluZ1BhaW50U2VydmVyUXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IGtjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWludFNlcnZlclF0Lmg6IFJlbW92ZWQuCisg
ICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdC5j
cHA6IFJlbW92ZWQuCisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ1BhaW50
U2VydmVyU29saWRRdC5oOiBSZW1vdmVkLgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F1YXJ0
ei9LQ2FudmFzSXRlbVF1YXJ0ei5oOiBSZW1vdmVkLgorICAgICAgICAqIGtjYW52YXMvZGV2aWNl
L3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OktS
ZW5kZXJpbmdEZXZpY2VRdWFydHo6OmNyZWF0ZVBhaW50U2VydmVyKToKKyAgICAgICAgKiBrY2Fu
dmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oOgorICAgICAgICAqIGtj
YW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0ei5j
cHA6IFJlbW92ZWQuCisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdQ
YWludFNlcnZlclF1YXJ0ei5jcHA6IFJlbW92ZWQuCisgICAgICAgICoga2NhbnZhcy9kZXZpY2Uv
cXVhcnR6L0tSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ei5oOiBSZW1vdmVkLgorICAgICAgICAq
IGtzdmcyL21pc2MvS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnNoYXJlZFNvbGlkUGFpbnRTZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6S1NWR1BhaW50ZXJG
YWN0b3J5OjpmaWxsUGFpbnRTZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6S1NWR1BhaW50ZXJG
YWN0b3J5OjpzdHJva2VQYWludFNlcnZlcik6CisgICAgICAgICoga3N2ZzIvbWlzYy9LQ2FudmFz
UmVuZGVyaW5nU3R5bGUuaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJF
bGVtZW50LmNwcDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcDoK
KyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0dyYWRpZW50RWxlbWVudDo6Y2FudmFzUmVzb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHR3JhZGllbnRFbGVtZW50OjpyZXNvdXJjZU5vdGlmaWNhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTVkdHcmFkaWVudEVsZW1lbnQ6OnJlYnVpbGRTdG9wcyk6CisgICAgICAgICog
a3N2ZzIvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdM
aW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGluZWFyR3Jh
ZGllbnRFbGVtZW50OjpidWlsZEdyYWRpZW50KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHTGlu
ZWFyR3JhZGllbnRFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdMaW5lYXJHcmFkaWVu
dEVsZW1lbnQ6OmdyYWRpZW50VHlwZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1BhdHRlcm5F
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdHRlcm5FbGVtZW50OjpmaWxsQXR0
cmlidXRlc0Zyb21SZWZlcmVuY2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdHRl
cm5FbGVtZW50OjpjYW52YXNSZXNvdXJjZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1BhdHRl
cm5FbGVtZW50Lmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OmJ1aWxk
R3JhZGllbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6Z3JhZGllbnRU
eXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUGFpbnRTZXJ2ZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyOjpTVkdQYWludFNlcnZl
cik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlcjo6flNWR1BhaW50U2VydmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyOjphY3RpdmVDbGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXI6OnNldEFjdGl2ZUNsaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYWludFNlcnZlcjo6aXNQYWludGluZ1RleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGFpbnRTZXJ2ZXI6OnNldFBhaW50aW5nVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpv
cGVyYXRvcjw8KToKKyAgICAgICAgKFdlYkNvcmU6OmdldFBhaW50U2VydmVyQnlJZCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50U2VydmVyLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyOjppc1Bh
aW50U2VydmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUGFpbnRTZXJ2
ZXJHcmFkaWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29tcGFyZVN0b3BPZmZz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYWludFNlcnZlckdyYWRpZW50OjpTVkdQYWludFNlcnZlckdyYWRpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhaW50U2VydmVyR3JhZGllbnQ6On5TVkdQYWludFNlcnZlckdyYWRpZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyR3JhZGllbnQ6OmdyYWRpZW50U3Rv
cHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0R3JhZGll
bnRTdG9wcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlckdyYWRpZW50OjpzcHJl
YWRNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0
R3JhZGllbnRTcHJlYWRNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJH
cmFkaWVudDo6Ym91bmRpbmdCb3hNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2Vy
dmVyR3JhZGllbnQ6OnNldEJvdW5kaW5nQm94TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YWludFNlcnZlckdyYWRpZW50OjpncmFkaWVudFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXRHcmFkaWVudFRyYW5zZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYWludFNlcnZlckdyYWRpZW50OjpsaXN0ZW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXRMaXN0ZW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYWludFNlcnZlckdyYWRpZW50OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWlu
dFNlcnZlckdyYWRpZW50OjopOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUdyYWRpZW50U3RvcCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50U2VydmVyTGluZWFyR3Jh
ZGllbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyTGluZWFy
R3JhZGllbnQ6OlNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudDo6flNWR1BhaW50U2VydmVyTGluZWFyR3Jh
ZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudDo6
Z3JhZGllbnRTdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlckxpbmVhckdy
YWRpZW50OjpzZXRHcmFkaWVudFN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2Vy
dmVyTGluZWFyR3JhZGllbnQ6OmdyYWRpZW50RW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
aW50U2VydmVyTGluZWFyR3JhZGllbnQ6OnNldEdyYWRpZW50RW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQYWludFNlcnZlckxpbmVhckdy
YWRpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJMaW5lYXJH
cmFkaWVudDo6dHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50
U2VydmVyUGF0dGVybi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2
ZXJQYXR0ZXJuOjpTVkdQYWludFNlcnZlclBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGFpbnRTZXJ2ZXJQYXR0ZXJuOjp+U1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhaW50U2VydmVyUGF0dGVybjo6YmJveCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYWludFNlcnZlclBhdHRlcm46OnNldEJib3gpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFp
bnRTZXJ2ZXJQYXR0ZXJuOjpib3VuZGluZ0JveE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGFpbnRTZXJ2ZXJQYXR0ZXJuOjpzZXRCb3VuZGluZ0JveE1vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjp0aWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
aW50U2VydmVyUGF0dGVybjo6c2V0VGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNl
cnZlclBhdHRlcm46OnBhdHRlcm5UcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFp
bnRTZXJ2ZXJQYXR0ZXJuOjpzZXRQYXR0ZXJuVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BhaW50U2VydmVyUGF0dGVybjo6bGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGFpbnRTZXJ2ZXJQYXR0ZXJuOjpzZXRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YWludFNlcnZlclBhdHRlcm46OmV4dGVybmFsUmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQYWludFNlcnZlclBhdHRlcm4uaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlclBhdHRlcm46OnR5cGUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50OjpTVkdQ
YWludFNlcnZlclJhZGlhbEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2Vy
dmVyUmFkaWFsR3JhZGllbnQ6On5TVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQ6OmdyYWRpZW50Q2VudGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQ6OnNldEdy
YWRpZW50Q2VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyUmFkaWFsR3Jh
ZGllbnQ6OmdyYWRpZW50Rm9jYWwpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJS
YWRpYWxHcmFkaWVudDo6c2V0R3JhZGllbnRGb2NhbCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YWludFNlcnZlclJhZGlhbEdyYWRpZW50OjpncmFkaWVudFJhZGl1cyk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50OjpzZXRHcmFkaWVudFJhZGl1cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50OjpleHRlcm5hbFJl
cHJlc2VudGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUGFpbnRT
ZXJ2ZXJSYWRpYWxHcmFkaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50
U2VydmVyUmFkaWFsR3JhZGllbnQ6OnR5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3N2Zy9TVkdQYWludFNlcnZlclNvbGlkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpT
VkdQYWludFNlcnZlclNvbGlkOjpTVkdQYWludFNlcnZlclNvbGlkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhaW50U2VydmVyU29saWQ6On5TVkdQYWludFNlcnZlclNvbGlkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhaW50U2VydmVyU29saWQ6OmNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BhaW50U2VydmVyU29saWQ6OnNldENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
aW50U2VydmVyU29saWQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3N2Zy9TVkdQYWludFNlcnZlclNvbGlkLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJTb2xpZDo6dHlwZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvc3ZnL1NWR1Jlc291cmNlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9zdmcvU1ZHUmVzb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZH
UmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZH
UmVzb3VyY2VNYXJrZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdS
ZXNvdXJjZU1hc2tlci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NnL1NW
R1BhaW50U2VydmVyQ2cuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2Vy
dmVyOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyOjp0ZWFyZG93bik6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlcjo6cmVuZGVyUGF0aCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYWludFNlcnZlcjo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYWludFNlcnZlcjo6Y2xpcFRvU3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYWludFNlcnZlcjo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2
ZXI6OmNsaXBUb0ZpbGxQYXRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvY2cv
U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpj
Z0dyYWRpZW50Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q0dTaGFkaW5nUmVmRm9yTGlu
ZWFyR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0dTaGFkaW5nUmVmRm9yUmFkaWFsR3Jh
ZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6aW52YWxp
ZGF0ZUNhY2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlckdyYWRpZW50Ojp1
cGRhdGVRdWFydHpHcmFkaWVudFN0b3BzQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFp
bnRTZXJ2ZXJHcmFkaWVudDo6dXBkYXRlUXVhcnR6R3JhZGllbnRDYWNoZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYWludFNlcnZlckdyYWRpZW50Ojp0ZWFyZG93bik6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYWludFNlcnZlckdyYWRpZW50OjpyZW5kZXJQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVwKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhaW50U2VydmVyR3JhZGllbnQ6OmludmFsaWRhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3N2Zy9jZy9TVkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6cGF0dGVybkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50
U2VydmVyUGF0dGVybjo6c2V0dXApOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJQ
YXR0ZXJuOjp0ZWFyZG93bik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NnL1NW
R1BhaW50U2VydmVyU29saWRDZy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFp
bnRTZXJ2ZXJTb2xpZDo6c2V0dXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N2Zy9x
dC9TVkdQYWludFNlcnZlckdyYWRpZW50UXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BhaW50U2VydmVyR3JhZGllbnQ6OmZpbGxDb2xvckFycmF5KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudFF0LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50Ojpz
ZXR1cCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50U2VydmVy
UGF0dGVyblF0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdQYWludFNlcnZlclBh
dHRlcm46OnNldHVwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZHUGFp
bnRTZXJ2ZXJRdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXI6
OnNldFBlblByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXI6OmRy
YXcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXI6OnRlYXJkb3duKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhaW50U2VydmVyOjpyZW5kZXJQYXRoKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudFF0LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXR1cCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3ZnL3F0L1NWR1BhaW50U2VydmVyU29saWRRdC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGFpbnRTZXJ2ZXJTb2xpZDo6c2V0dXApOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclBhdGg6OnBhaW50KToK
KyAgICAgICAgKiByZW5kZXJpbmcvU1ZHSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpwYWludFNWR0lubGluZUZsb3cpOgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSZW5kZXJU
cmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6d3JpdGVSZW5kZXJSZXNvdXJjZXMpOgorCiAyMDA2LTExLTIwICBTYW11ZWwgV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5LgpJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3
ODYyKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTE4MzIsMTkgKzE4MzIsOSBAQAogCQlBODcxREZFNTBBMTUzNzZCMDBCMTJB
NjggLyogUmVuZGVyV2lkZ2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4NzFERkUxMEExNTM3NkIwMEIxMkE2OCAvKiBSZW5kZXJXaWRnZXQuY3Bw
ICovOyB9OwogCQlBODhBRDM4NjA5NTI0ODZEMDAxREQxOTYgLyogS1JlbmRlcmluZ0RldmljZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI1
NDA4OTcwMUY3MDBCQTUxMTQgLyogS1JlbmRlcmluZ0RldmljZS5jcHAgKi87IH07CiAJCUE4OEFE
Mzg3MDk1MjQ4NkQwMDFERDE5NiAvKiBLUmVuZGVyaW5nRGV2aWNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI1NTA4OTcwMUY3MDBCQTUxMTQg
LyogS1JlbmRlcmluZ0RldmljZS5oICovOyB9OwotCQlBODhBRDM4QTA5NTI0ODZEMDAxREQxOTYg
LyogS1JlbmRlcmluZ1BhaW50U2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI1QjA4OTcwMUY3MDBCQTUxMTQgLyogS1JlbmRlcmluZ1Bh
aW50U2VydmVyLmggKi87IH07Ci0JCUE4OEFEMzhCMDk1MjQ4NkQwMDFERDE5NiAvKiBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI1QzA4OTcwMUY3MDBCQTUxMTQgLyogS1JlbmRlcmluZ1Bh
aW50U2VydmVyR3JhZGllbnQuY3BwICovOyB9OwotCQlBODhBRDM4QzA5NTI0ODZEMDAxREQxOTYg
LyogS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGQjVEMDg5NzAxRjcwMEJBNTExNCAvKiBLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudC5oICovOyB9OwotCQlBODhBRDM4RjA5NTI0ODZEMDAx
REQxOTYgLyogS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI2MDA4OTcwMUY3MDBCQTUxMTQg
LyogS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybi5jcHAgKi87IH07Ci0JCUE4OEFEMzkwMDk1
MjQ4NkQwMDFERDE5NiAvKiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI2MTA4OTcwMUY3MDBC
QTUxMTQgLyogS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybi5oICovOyB9OwotCQlBODhBRDM5
MTA5NTI0ODZEMDAxREQxOTYgLyogS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMEZCNjIwODk3MDFG
NzAwQkE1MTE0IC8qIEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkLmNwcCAqLzsgfTsKLQkJQTg4
QUQzOTIwOTUyNDg2RDAwMUREMTk2IC8qIEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI2MzA4OTcw
MUY3MDBCQTUxMTQgLyogS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQuaCAqLzsgfTsKIAkJQTg4
QUQzQUQwOTUyNDg2RDAwMUREMTk2IC8qIEtDYW52YXNJdGVtUXVhcnR6LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGQjZDMDg5NzAxRjgwMEJB
NTExNCAvKiBLQ2FudmFzSXRlbVF1YXJ0ei5jcHAgKi87IH07CiAJCUE4OEFEM0IwMDk1MjQ4NkUw
MDFERDE5NiAvKiBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI3MTA4OTcwMUY4MDBCQTUxMTQgLyogS1Jl
bmRlcmluZ0RldmljZVF1YXJ0ei5oICovOyB9OwogCQlBODhBRDNCMTA5NTI0ODZFMDAxREQxOTYg
LyogS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI3MjA4OTcwMUY4MDBCQTUxMTQgLyogS1JlbmRlcmlu
Z0RldmljZVF1YXJ0ei5jcHAgKi87IH07Ci0JCUE4OEFEM0IyMDk1MjQ4NkUwMDFERDE5NiAvKiBL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0ei5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI3MzA4OTcwMUY4MDBCQTUxMTQgLyog
S1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHouY3BwICovOyB9OwotCQlBODhBRDNC
MzA5NTI0ODZFMDAxREQxOTYgLyogS1JlbmRlcmluZ1BhaW50U2VydmVyUXVhcnR6LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI3NDA4OTcwMUY4
MDBCQTUxMTQgLyogS1JlbmRlcmluZ1BhaW50U2VydmVyUXVhcnR6LmggKi87IH07Ci0JCUE4OEFE
M0I0MDk1MjQ4NkUwMDFERDE5NiAvKiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHouY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMEZCNzUwODk3
MDFGODAwQkE1MTE0IC8qIEtSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ei5jcHAgKi87IH07CiAJ
CUE4OEFEM0I1MDk1MjQ4NkUwMDFERDE5NiAvKiBRdWFydHpTdXBwb3J0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI3NjA4OTcwMUY4MDBCQTUx
MTQgLyogUXVhcnR6U3VwcG9ydC5oICovOyB9OwogCQlBODhBRDNCNjA5NTI0ODZFMDAxREQxOTYg
LyogUXVhcnR6U3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOEMwRkI3NzA4OTcwMUY4MDBCQTUxMTQgLyogUXVhcnR6U3VwcG9ydC5jcHAg
Ki87IH07CiAJCUE4OEFENDAxMDk1MjQ4RjAwMDFERDE5NiAvKiBTVkdSZW5kZXJTdHlsZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRjZGRjA4
OTcwMUYxMDBCQTUxMTQgLyogU1ZHUmVuZGVyU3R5bGUuY3BwICovOyB9OwpAQCAtMjMwMSw2ICsy
MjkxLDIyIEBACiAJCUIyQTAxNUJBMEFGNkNENTMwMDZCQ0UwRSAvKiBTVkdSZXNvdXJjZU1hc2tl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJBMDE1
QTcwQUY2Q0Q1MzAwNkJDRTBFIC8qIFNWR1Jlc291cmNlTWFza2VyLmggKi87IH07CiAJCUIyQ0I0
MTkzMEFCNzU5MDQwMDREOUM0NSAvKiBTVkdSZW5kZXJpbmdJbnRlbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyQ0I0MTRDMEFCNzU5MDQwMDREOUM0
NSAvKiBTVkdSZW5kZXJpbmdJbnRlbnQuaCAqLzsgfTsKIAkJQjJDQjQxQTYwQUI3NTkwNDAwNEQ5
QzQ1IC8qIFNWR1VuaXRUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjJDQjQxNUYwQUI3NTkwNDAwNEQ5QzQ1IC8qIFNWR1VuaXRUeXBlcy5oICov
OyB9OworCQlCMkQ4N0M3NzBCMTI0RTczMDBCMERFMUUgLyogU1ZHUGFpbnRTZXJ2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJEODdDNkIwQjEy
NEU3MzAwQjBERTFFIC8qIFNWR1BhaW50U2VydmVyLmNwcCAqLzsgfTsKKwkJQjJEODdDNzgwQjEy
NEU3MzAwQjBERTFFIC8qIFNWR1BhaW50U2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkQ4N0M2QzBCMTI0RTczMDBCMERFMUUgLyogU1ZHUGFp
bnRTZXJ2ZXIuaCAqLzsgfTsKKwkJQjJEODdDNzkwQjEyNEU3MzAwQjBERTFFIC8qIFNWR1BhaW50
U2VydmVyR3JhZGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjJEODdDNkQwQjEyNEU3MzAwQjBERTFFIC8qIFNWR1BhaW50U2VydmVyR3JhZGll
bnQuY3BwICovOyB9OworCQlCMkQ4N0M3QTBCMTI0RTczMDBCMERFMUUgLyogU1ZHUGFpbnRTZXJ2
ZXJHcmFkaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjJEODdDNkUwQjEyNEU3MzAwQjBERTFFIC8qIFNWR1BhaW50U2VydmVyR3JhZGllbnQuaCAq
LzsgfTsKKwkJQjJEODdDN0IwQjEyNEU3MzAwQjBERTFFIC8qIFNWR1BhaW50U2VydmVyTGluZWFy
R3JhZGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjJEODdDNkYwQjEyNEU3MzAwQjBERTFFIC8qIFNWR1BhaW50U2VydmVyTGluZWFyR3JhZGll
bnQuY3BwICovOyB9OworCQlCMkQ4N0M3QzBCMTI0RTczMDBCMERFMUUgLyogU1ZHUGFpbnRTZXJ2
ZXJMaW5lYXJHcmFkaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjJEODdDNzAwQjEyNEU3MzAwQjBERTFFIC8qIFNWR1BhaW50U2VydmVyTGluZWFy
R3JhZGllbnQuaCAqLzsgfTsKKwkJQjJEODdDN0QwQjEyNEU3MzAwQjBERTFFIC8qIFNWR1BhaW50
U2VydmVyUGF0dGVybi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMkQ4N0M3MTBCMTI0RTczMDBCMERFMUUgLyogU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJu
LmNwcCAqLzsgfTsKKwkJQjJEODdDN0UwQjEyNEU3MzAwQjBERTFFIC8qIFNWR1BhaW50U2VydmVy
UGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjJEODdDNzIwQjEyNEU3MzAwQjBERTFFIC8qIFNWR1BhaW50U2VydmVyUGF0dGVybi5oICovOyB9
OworCQlCMkQ4N0M3RjBCMTI0RTczMDBCMERFMUUgLyogU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFk
aWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MkQ4N0M3MzBCMTI0RTczMDBCMERFMUUgLyogU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudC5j
cHAgKi87IH07CisJCUIyRDg3QzgwMEIxMjRFNzMwMEIwREUxRSAvKiBTVkdQYWludFNlcnZlclJh
ZGlhbEdyYWRpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCMkQ4N0M3NDBCMTI0RTczMDBCMERFMUUgLyogU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFk
aWVudC5oICovOyB9OworCQlCMkQ4N0M4MTBCMTI0RTczMDBCMERFMUUgLyogU1ZHUGFpbnRTZXJ2
ZXJTb2xpZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMkQ4N0M3NTBCMTI0RTczMDBCMERFMUUgLyogU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5jcHAgKi87
IH07CisJCUIyRDg3QzgyMEIxMjRFNzMwMEIwREUxRSAvKiBTVkdQYWludFNlcnZlclNvbGlkLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkQ4N0M3NjBC
MTI0RTczMDBCMERFMUUgLyogU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5oICovOyB9OworCQlCMkQ4N0M4
NzBCMTI0RTk1MDBCMERFMUUgLyogU1ZHUGFpbnRTZXJ2ZXJDZy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkQ4N0M4MzBCMTI0RTk1MDBCMERFMUUg
LyogU1ZHUGFpbnRTZXJ2ZXJDZy5jcHAgKi87IH07CisJCUIyRDg3Qzg4MEIxMjRFOTUwMEIwREUx
RSAvKiBTVkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJEODdDODQwQjEyNEU5NTAwQjBERTFFIC8qIFNWR1Bh
aW50U2VydmVyR3JhZGllbnRDZy5jcHAgKi87IH07CisJCUIyRDg3Qzg5MEIxMjRFOTUwMEIwREUx
RSAvKiBTVkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkQ4N0M4NTBCMTI0RTk1MDBCMERFMUUgLyogU1ZHUGFp
bnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwICovOyB9OworCQlCMkQ4N0M4QTBCMTI0RTk1MDBCMERFMUUg
LyogU1ZHUGFpbnRTZXJ2ZXJTb2xpZENnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEIyRDg3Qzg2MEIxMjRFOTUwMEIwREUxRSAvKiBTVkdQYWludFNl
cnZlclNvbGlkQ2cuY3BwICovOyB9OwogCQlCMkUyN0JENTBCMEYyQTk1MDBGMTdDN0IgLyogU1ZH
UmVzb3VyY2VGaWx0ZXJDZy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyRTI3QkQzMEIwRjJBOTUwMEYxN0M3QiAvKiBTVkdSZXNvdXJjZUZpbHRlckNn
Lm1tICovOyB9OwogCQlCMkUyN0JEQTBCMEYyQUM4MDBGMTdDN0IgLyogU1ZHUmVzb3VyY2VGaWx0
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJF
MjdCRDcwQjBGMkFDODAwRjE3QzdCIC8qIFNWR1Jlc291cmNlRmlsdGVyLmNwcCAqLzsgfTsKIAkJ
QjJFMjdCREIwQjBGMkFDODAwRjE3QzdCIC8qIFNWR1Jlc291cmNlRmlsdGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkUyN0JEODBCMEYyQUM4MDBG
MTdDN0IgLyogU1ZHUmVzb3VyY2VGaWx0ZXIuaCAqLzsgfTsKQEAgLTQ5ODMsMTkgKzQ5ODksOSBA
QAogCQlBOEMwRjhFQzA4OTcwMUY0MDBCQTUxMTQgLyogU1ZHWm9vbUFuZFBhbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1pvb21BbmRQYW4u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07
CiAJCUE4QzBGQjU0MDg5NzAxRjcwMEJBNTExNCAvKiBLUmVuZGVyaW5nRGV2aWNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gS1JlbmRl
cmluZ0RldmljZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNl
c1RhYnMgPSAwOyB9OwogCQlBOEMwRkI1NTA4OTcwMUY3MDBCQTUxMTQgLyogS1JlbmRlcmluZ0Rl
dmljZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGlu
ZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEtSZW5kZXJpbmdEZXZpY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07Ci0JCUE4QzBGQjVCMDg5NzAxRjcwMEJBNTExNCAvKiBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUE4QzBGQjVDMDg5NzAxRjcwMEJB
NTExNCAvKiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtSZW5kZXJpbmdQYWludFNl
cnZlckdyYWRpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1
c2VzVGFicyA9IDA7IH07Ci0JCUE4QzBGQjVEMDg5NzAxRjcwMEJBNTExNCAvKiBLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJHcmFkaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlBOEMwRkI2
MDA4OTcwMUY3MDBCQTUxMTQgLyogS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtSZW5k
ZXJpbmdQYWludFNlcnZlclBhdHRlcm4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJX
aWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJQThDMEZCNjEwODk3MDFGNzAwQkE1MTE0IC8q
IEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9Owot
CQlBOEMwRkI2MjA4OTcwMUY3MDBCQTUxMTQgLyogS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVu
dFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlBOEMwRkI2MzA4OTcwMUY3MDBCQTUx
MTQgLyogS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsK
IAkJQThDMEZCNkMwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNJdGVtUXVhcnR6LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gS0NhbnZh
c0l0ZW1RdWFydHouY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVz
ZXNUYWJzID0gMDsgfTsKIAkJQThDMEZCNzEwODk3MDFGODAwQkE1MTE0IC8qIEtSZW5kZXJpbmdE
ZXZpY2VRdWFydHouaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlBOEMwRkI3MjA4OTcwMUY4MDBCQTUx
MTQgLyogS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtSZW5kZXJpbmdEZXZpY2VRdWFydHouY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsK
LQkJQThDMEZCNzMwODk3MDFGODAwQkE1MTE0IC8qIEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRp
ZW50UXVhcnR6LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHouY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJQThD
MEZCNzQwODk3MDFGODAwQkE1MTE0IC8qIEtSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ei5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRo
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtSZW5kZXJp
bmdQYWludFNlcnZlclF1YXJ0ei5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9
IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJQThDMEZCNzUwODk3MDFGODAwQkE1MTE0IC8qIEtSZW5k
ZXJpbmdQYWludFNlcnZlclF1YXJ0ei5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ei5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9Owog
CQlBOEMwRkI3NjA4OTcwMUY4MDBCQTUxMTQgLyogUXVhcnR6U3VwcG9ydC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFF1YXJ0elN1cHBvcnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJ
CUE4QzBGQjc3MDg5NzAxRjgwMEJBNTExNCAvKiBRdWFydHpTdXBwb3J0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUXVhcnR6U3VwcG9y
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAw
OyB9OwogCQlBOEMzMjk1QzA5M0JCN0IyMDAwQjlDQUMgLyogU1ZHRkVMaWdodEVsZW1lbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGRUxp
Z2h0RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNU
YWJzID0gMDsgfTsKQEAgLTUzMjcsNiArNTMyMywyMiBAQAogCQlCMkNCNDE2MjBBQjc1OTA0MDA0
RDlDNDUgLyogU1ZHVXNlRWxlbWVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNWR1Vz
ZUVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkNCNDE2MzBBQjc1
OTA0MDA0RDlDNDUgLyogU1ZHVmlld0VsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBTVkdWaWV3RWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQ0I0
MTY0MEFCNzU5MDQwMDREOUM0NSAvKiBTVkdab29tQW5kUGFuLmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gU1ZHWm9vbUFuZFBhbi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUIyRDg3QzZCMEIxMjRFNzMwMEIwREUxRSAvKiBTVkdQYWludFNlcnZlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUGFpbnRTZXJ2ZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlCMkQ4N0M2QzBCMTI0RTczMDBCMERFMUUgLyogU1ZHUGFp
bnRTZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1BhaW50U2Vy
dmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyRDg3QzZEMEIxMjRFNzMwMEIw
REUxRSAvKiBTVkdQYWludFNlcnZlckdyYWRpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTVkdQYWludFNlcnZlckdyYWRpZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQjJEODdDNkUwQjEyNEU3MzAwQjBERTFFIC8qIFNWR1BhaW50U2Vy
dmVyR3JhZGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1BhaW50
U2VydmVyR3JhZGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjJEODdDNkYw
QjEyNEU3MzAwQjBERTFFIC8qIFNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1BhaW50U2VydmVyTGluZWFyR3Jh
ZGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkQ4N0M3MDBCMTI0RTcz
MDBCMERFMUUgLyogU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkQ4N0M3MTBCMTI0RTczMDBCMERFMUUgLyogU1ZH
UGFpbnRTZXJ2ZXJQYXR0ZXJuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTVkdQYWludFNlcnZlclBhdHRlcm4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlCMkQ4N0M3MjBCMTI0RTczMDBCMERFMUUgLyogU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQYWludFNlcnZlclBhdHRlcm4u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjJEODdDNzMwQjEyNEU3MzAwQjBERTFF
IC8qIFNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkQ4N0M3NDBCMTI0RTczMDBCMERFMUUgLyogU1ZH
UGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlCMkQ4N0M3NTBCMTI0RTczMDBCMERFMUUgLyogU1ZHUGFpbnRTZXJ2ZXJTb2xp
ZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUGFpbnRTZXJ2
ZXJTb2xpZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyRDg3Qzc2MEIxMjRF
NzMwMEIwREUxRSAvKiBTVkdQYWludFNlcnZlclNvbGlkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdQYWludFNlcnZlclNvbGlkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUIyRDg3QzgzMEIxMjRFOTUwMEIwREUxRSAvKiBTVkdQYWludFNlcnZlckNnLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdQYWludFNlcnZlckNn
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjJEODdDODQwQjEyNEU5NTAwQjBE
RTFFIC8qIFNWR1BhaW50U2VydmVyR3JhZGllbnRDZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjJEODdDODUwQjEyNEU5NTAwQjBERTFFIC8qIFNWR1BhaW50
U2VydmVyUGF0dGVybkNnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTVkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUIyRDg3Qzg2MEIxMjRFOTUwMEIwREUxRSAvKiBTVkdQYWludFNlcnZlclNvbGlkQ2cuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1BhaW50U2VydmVyU29s
aWRDZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRTI3QkQzMEIwRjJBOTUw
MEYxN0M3QiAvKiBTVkdSZXNvdXJjZUZpbHRlckNnLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFNWR1Jlc291cmNlRmlsdGVyQ2cubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUIyRTI3QkQ3MEIwRjJBQzgwMEYxN0M3QiAvKiBTVkdSZXNvdXJjZUZp
bHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUmVzb3Vy
Y2VGaWx0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkUyN0JEODBCMEYy
QUM4MDBGMTdDN0IgLyogU1ZHUmVzb3VyY2VGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNWR1Jlc291cmNlRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC04MzYxLDEzICs4MzczLDYgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUE4QzBGQjU0
MDg5NzAxRjcwMEJBNTExNCAvKiBLUmVuZGVyaW5nRGV2aWNlLmNwcCAqLywKIAkJCQlBOEMwRkI1
NTA4OTcwMUY3MDBCQTUxMTQgLyogS1JlbmRlcmluZ0RldmljZS5oICovLAotCQkJCUE4QzBGQjVC
MDg5NzAxRjcwMEJBNTExNCAvKiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaCAqLywKLQkJCQlBOEMw
RkI1QzA4OTcwMUY3MDBCQTUxMTQgLyogS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQuY3Bw
ICovLAotCQkJCUE4QzBGQjVEMDg5NzAxRjcwMEJBNTExNCAvKiBLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJHcmFkaWVudC5oICovLAotCQkJCUE4QzBGQjYwMDg5NzAxRjcwMEJBNTExNCAvKiBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuLmNwcCAqLywKLQkJCQlBOEMwRkI2MTA4OTcwMUY3MDBCQTUx
MTQgLyogS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybi5oICovLAotCQkJCUE4QzBGQjYyMDg5
NzAxRjcwMEJBNTExNCAvKiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZC5jcHAgKi8sCi0JCQkJ
QThDMEZCNjMwODk3MDFGNzAwQkE1MTE0IC8qIEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkLmgg
Ki8sCiAJCQkJQThDMEZCNjgwODk3MDFGODAwQkE1MTE0IC8qIHF1YXJ0eiAqLywKIAkJCSk7CiAJ
CQlwYXRoID0gZGV2aWNlOwpAQCAtODM3OSw5ICs4Mzg0LDYgQEAKIAkJCQlBOEMwRkI2QzA4OTcw
MUY4MDBCQTUxMTQgLyogS0NhbnZhc0l0ZW1RdWFydHouY3BwICovLAogCQkJCUE4QzBGQjcxMDg5
NzAxRjgwMEJBNTExNCAvKiBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmggKi8sCiAJCQkJQThDMEZC
NzIwODk3MDFGODAwQkE1MTE0IC8qIEtSZW5kZXJpbmdEZXZpY2VRdWFydHouY3BwICovLAotCQkJ
CUE4QzBGQjczMDg5NzAxRjgwMEJBNTExNCAvKiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVu
dFF1YXJ0ei5jcHAgKi8sCi0JCQkJQThDMEZCNzQwODk3MDFGODAwQkE1MTE0IC8qIEtSZW5kZXJp
bmdQYWludFNlcnZlclF1YXJ0ei5oICovLAotCQkJCUE4QzBGQjc1MDg5NzAxRjgwMEJBNTExNCAv
KiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHouY3BwICovLAogCQkJCUE4QzBGQjc2MDg5NzAx
RjgwMEJBNTExNCAvKiBRdWFydHpTdXBwb3J0LmggKi8sCiAJCQkJQThDMEZCNzcwODk3MDFGODAw
QkE1MTE0IC8qIFF1YXJ0elN1cHBvcnQuY3BwICovLAogCQkJKTsKQEAgLTg0NjcsOCArODQ2OSwy
MCBAQAogCQlCMkEwMTU5NjBBRjZDRDUzMDA2QkNFMEUgLyogc3ZnICovID0gewogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlCMkUyN0JERDBCMEYyQUU1MDBGMTdDN0Ig
LyogZmlsdGVycyAqLywKIAkJCQlCMkEwMTU5NzBBRjZDRDUzMDA2QkNFMEUgLyogY2cgKi8sCisJ
CQkJQjJFMjdCREQwQjBGMkFFNTAwRjE3QzdCIC8qIGZpbHRlcnMgKi8sCisJCQkJQjJEODdDNkIw
QjEyNEU3MzAwQjBERTFFIC8qIFNWR1BhaW50U2VydmVyLmNwcCAqLywKKwkJCQlCMkQ4N0M2QzBC
MTI0RTczMDBCMERFMUUgLyogU1ZHUGFpbnRTZXJ2ZXIuaCAqLywKKwkJCQlCMkQ4N0M2RDBCMTI0
RTczMDBCMERFMUUgLyogU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHAgKi8sCisJCQkJQjJEODdD
NkUwQjEyNEU3MzAwQjBERTFFIC8qIFNWR1BhaW50U2VydmVyR3JhZGllbnQuaCAqLywKKwkJCQlC
MkQ4N0M2RjBCMTI0RTczMDBCMERFMUUgLyogU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudC5j
cHAgKi8sCisJCQkJQjJEODdDNzAwQjEyNEU3MzAwQjBERTFFIC8qIFNWR1BhaW50U2VydmVyTGlu
ZWFyR3JhZGllbnQuaCAqLywKKwkJCQlCMkQ4N0M3MTBCMTI0RTczMDBCMERFMUUgLyogU1ZHUGFp
bnRTZXJ2ZXJQYXR0ZXJuLmNwcCAqLywKKwkJCQlCMkQ4N0M3MjBCMTI0RTczMDBCMERFMUUgLyog
U1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuLmggKi8sCisJCQkJQjJEODdDNzMwQjEyNEU3MzAwQjBERTFF
IC8qIFNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQuY3BwICovLAorCQkJCUIyRDg3Qzc0MEIx
MjRFNzMwMEIwREUxRSAvKiBTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50LmggKi8sCisJCQkJ
QjJEODdDNzUwQjEyNEU3MzAwQjBERTFFIC8qIFNWR1BhaW50U2VydmVyU29saWQuY3BwICovLAor
CQkJCUIyRDg3Qzc2MEIxMjRFNzMwMEIwREUxRSAvKiBTVkdQYWludFNlcnZlclNvbGlkLmggKi8s
CiAJCQkJQjJBMDE1OUYwQUY2Q0Q1MzAwNkJDRTBFIC8qIFNWR1Jlc291cmNlLmNwcCAqLywKIAkJ
CQlCMkEwMTVBMDBBRjZDRDUzMDA2QkNFMEUgLyogU1ZHUmVzb3VyY2UuaCAqLywKIAkJCQlCMkEw
MTVBMTBBRjZDRDUzMDA2QkNFMEUgLyogU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCAqLywKQEAgLTg0
ODgsNiArODUwMiwxMCBAQAogCQlCMkEwMTU5NzBBRjZDRDUzMDA2QkNFMEUgLyogY2cgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUIyRDg3QzgzMEIxMjRF
OTUwMEIwREUxRSAvKiBTVkdQYWludFNlcnZlckNnLmNwcCAqLywKKwkJCQlCMkQ4N0M4NDBCMTI0
RTk1MDBCMERFMUUgLyogU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcCAqLywKKwkJCQlCMkQ4
N0M4NTBCMTI0RTk1MDBCMERFMUUgLyogU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuQ2cuY3BwICovLAor
CQkJCUIyRDg3Qzg2MEIxMjRFOTUwMEIwREUxRSAvKiBTVkdQYWludFNlcnZlclNvbGlkQ2cuY3Bw
ICovLAogCQkJCUIyRTI3QkQzMEIwRjJBOTUwMEYxN0M3QiAvKiBTVkdSZXNvdXJjZUZpbHRlckNn
Lm1tICovLAogCQkJCUIyQTAxNTk4MEFGNkNENTMwMDZCQ0UwRSAvKiBTVkdSZXNvdXJjZUNsaXBw
ZXJDZy5jcHAgKi8sCiAJCQkJQjJBMDE1OTkwQUY2Q0Q1MzAwNkJDRTBFIC8qIFNWR1Jlc291cmNl
SW1hZ2VDZy5jcHAgKi8sCkBAIC05NDIzLDEyICs5NDQxLDcgQEAKIAkJCQk5Mzk4ODVDNDA4QjdF
M0QxMDBFNzA3QzQgLyogRXZlbnROYW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVDOTdBRjMw
OEVBOTA4ODAwQUNEMjczIC8qIGNvbmZpZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg4QUQzODcw
OTUyNDg2RDAwMUREMTk2IC8qIEtSZW5kZXJpbmdEZXZpY2UuaCBpbiBIZWFkZXJzICovLAotCQkJ
CUE4OEFEMzhBMDk1MjQ4NkQwMDFERDE5NiAvKiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUE4OEFEMzhDMDk1MjQ4NkQwMDFERDE5NiAvKiBLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJHcmFkaWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTg4QUQzOTAwOTUyNDg2RDAw
MUREMTk2IC8qIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4uaCBpbiBIZWFkZXJzICovLAot
CQkJCUE4OEFEMzkyMDk1MjQ4NkQwMDFERDE5NiAvKiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xp
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg4QUQzQjAwOTUyNDg2RTAwMUREMTk2IC8qIEtSZW5k
ZXJpbmdEZXZpY2VRdWFydHouaCBpbiBIZWFkZXJzICovLAotCQkJCUE4OEFEM0IzMDk1MjQ4NkUw
MDFERDE5NiAvKiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHouaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4OEFEM0I1MDk1MjQ4NkUwMDFERDE5NiAvKiBRdWFydHpTdXBwb3J0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBODhBRDQwMjA5NTI0OEYwMDAxREQxOTYgLyogU1ZHUmVuZGVyU3R5bGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4OEFENDA0MDk1MjQ4RjAwMDFERDE5NiAvKiBTVkdSZW5kZXJT
dHlsZURlZnMuaCBpbiBIZWFkZXJzICovLApAQCAtMTA4MDIsNiArMTA4MTUsMTIgQEAKIAkJCQlC
MkUyN0M5QzBCMEYyQUU2MDBGMTdDN0IgLyogU1ZHU3BvdExpZ2h0U291cmNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCMkUyN0NBMDBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNELmggaW4g
SGVhZGVycyAqLywKIAkJCQk5M0ZEQUZDQTBCMTEzMDc0MDBFMjc0NkYgLyogRWRpdG9ySW5zZXJ0
QWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlCMkQ4N0M3ODBCMTI0RTczMDBCMERFMUUgLyog
U1ZHUGFpbnRTZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUIyRDg3QzdBMEIxMjRFNzMwMEIw
REUxRSAvKiBTVkdQYWludFNlcnZlckdyYWRpZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlCMkQ4
N0M3QzBCMTI0RTczMDBCMERFMUUgLyogU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQjJEODdDN0UwQjEyNEU3MzAwQjBERTFFIC8qIFNWR1BhaW50U2Vy
dmVyUGF0dGVybi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjJEODdDODAwQjEyNEU3MzAwQjBERTFF
IC8qIFNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUIy
RDg3QzgyMEIxMjRFNzMwMEIwREUxRSAvKiBTVkdQYWludFNlcnZlclNvbGlkLmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKQEAgLTExMDAzLDEzICsxMTAyMiw4IEBACiAJCQkJN0U2RkVFRDkwODk4NTgyMzAwQzQ0
QzNGIC8qIFdlYkNvcmVTY3JpcHREZWJ1Z2dlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTg4
NUMzMDhCN0UzRDEwMEU3MDdDNCAvKiBFdmVudE5hbWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE4OEFEMzg2MDk1MjQ4NkQwMDFERDE5NiAvKiBLUmVuZGVyaW5nRGV2aWNlLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUE4OEFEMzhCMDk1MjQ4NkQwMDFERDE5NiAvKiBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJHcmFkaWVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBODhBRDM4RjA5NTI0ODZEMDAx
REQxOTYgLyogS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybi5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQlBODhBRDM5MTA5NTI0ODZEMDAxREQxOTYgLyogS1JlbmRlcmluZ1BhaW50U2VydmVyU29s
aWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg4QUQzQUQwOTUyNDg2RDAwMUREMTk2IC8qIEtD
YW52YXNJdGVtUXVhcnR6LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4OEFEM0IxMDk1MjQ4NkUw
MDFERDE5NiAvKiBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CUE4OEFEM0IyMDk1MjQ4NkUwMDFERDE5NiAvKiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVu
dFF1YXJ0ei5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBODhBRDNCNDA5NTI0ODZFMDAxREQxOTYg
LyogS1JlbmRlcmluZ1BhaW50U2VydmVyUXVhcnR6LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
OEFEM0I2MDk1MjQ4NkUwMDFERDE5NiAvKiBRdWFydHpTdXBwb3J0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE4OEFENDAxMDk1MjQ4RjAwMDFERDE5NiAvKiBTVkdSZW5kZXJTdHlsZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBODhBRDQwMzA5NTI0OEYwMDAxREQxOTYgLyogU1ZHUmVuZGVyU3R5
bGVEZWZzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTIxMDcsNiArMTIxMjEsMTYgQEAKIAkJCQlC
MkUyN0M5NzBCMEYyQUU2MDBGMTdDN0IgLyogU1ZHRmlsdGVyRWZmZWN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUIyRTI3Qzk5MEIwRjJBRTYwMEYxN0M3QiAvKiBTVkdMaWdodFNvdXJjZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCMkUyN0M5RjBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2lu
dDNELmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIyRDg3Qzc3MEIxMjRFNzMwMEIwREUxRSAvKiBT
VkdQYWludFNlcnZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCMkQ4N0M3OTBCMTI0RTczMDBC
MERFMUUgLyogU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlC
MkQ4N0M3QjBCMTI0RTczMDBCMERFMUUgLyogU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlCMkQ4N0M3RDBCMTI0RTczMDBCMERFMUUgLyogU1ZHUGFp
bnRTZXJ2ZXJQYXR0ZXJuLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIyRDg3QzdGMEIxMjRFNzMw
MEIwREUxRSAvKiBTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUIyRDg3QzgxMEIxMjRFNzMwMEIwREUxRSAvKiBTVkdQYWludFNlcnZlclNvbGlkLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUIyRDg3Qzg3MEIxMjRFOTUwMEIwREUxRSAvKiBTVkdQYWlu
dFNlcnZlckNnLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUIyRDg3Qzg4MEIxMjRFOTUwMEIwREUx
RSAvKiBTVkdQYWludFNlcnZlckdyYWRpZW50Q2cuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjJE
ODdDODkwQjEyNEU5NTAwQjBERTFFIC8qIFNWR1BhaW50U2VydmVyUGF0dGVybkNnLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUIyRDg3QzhBMEIxMjRFOTUwMEIwREUxRSAvKiBTVkdQYWludFNlcnZl
clNvbGlkQ2cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNl
L0tSZW5kZXJpbmdEZXZpY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNl
L0tSZW5kZXJpbmdEZXZpY2UuaAkocmV2aXNpb24gMTc4NjIpCisrKyBXZWJDb3JlL2tjYW52YXMv
ZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBA
QAogI2lmZGVmIFNWR19TVVBQT1JUCiAKICNpbmNsdWRlICJTVkdGaWx0ZXJFZmZlY3QuaCIKLSNp
bmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaCIKKyNpbmNsdWRlICJTVkdQYWludFNlcnZl
ci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgog
ICAgIC8vIENyZWF0aW9uIHRvb2xzCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNWR1Jlc291cmNl
PiBjcmVhdGVSZXNvdXJjZShjb25zdCBTVkdSZXNvdXJjZVR5cGUmKSBjb25zdCA9IDA7CiAgICAg
dmlydHVhbCBTVkdGaWx0ZXJFZmZlY3QqIGNyZWF0ZUZpbHRlckVmZmVjdChjb25zdCBTVkdGaWx0
ZXJFZmZlY3RUeXBlJikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXI+IGNyZWF0ZVBhaW50U2VydmVyKGNvbnN0IEtDUGFpbnRTZXJ2ZXJUeXBl
JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTVkdQYWludFNlcnZlcj4gY3Jl
YXRlUGFpbnRTZXJ2ZXIoY29uc3QgU1ZHUGFpbnRTZXJ2ZXJUeXBlJikgY29uc3QgPSAwOwogCiBw
cml2YXRlOgogICAgIFZlY3RvcjxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCo+IG1fY29udGV4dFN0
YWNrOwpJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNl
cnZlci5oCShyZXZpc2lvbiAxNzg2MikKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvS1JlbmRl
cmluZ1BhaW50U2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOTggKzAsMCBAQAotLyoKLSAg
ICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtk
ZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5v
cmc+Ci0gICAgICAgICAgICAgICAgICAyMDA2IEFsZXhhbmRlciBLZWxsZXR0IDxseXBhbm92QGtk
ZS5vcmc+Ci0KLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKLQotICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhaW50IHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0g
U3VpdGUgMzMwLAotICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotKi8KLQotI2lmbmRl
ZiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJfSAotI2RlZmluZSBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJf
SAotI2lmZGVmIFNWR19TVVBQT1JUCi0KLSNpbmNsdWRlICJTVkdSZXNvdXJjZS5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0OwotY2xhc3Mg
UmVuZGVyT2JqZWN0OwotY2xhc3MgUmVuZGVyUGF0aDsKLWNsYXNzIFJlbmRlclN0eWxlOwotY2xh
c3MgVGV4dFN0cmVhbTsKLQotI2lmZGVmIFBTX1NPTElECi0jdW5kZWYgUFNfU09MSUQKLSNlbmRp
ZgotCi0vLyBFbnVtZXJhdGlvbnMKLWVudW0gS0NQYWludFNlcnZlclR5cGUgewotICAgIC8vIFBh
aW50aW5nIG1vZGUKLSAgICBQU19TT0xJRCA9IDAsCi0gICAgUFNfUEFUVEVSTiA9IDEsCi0gICAg
UFNfTElORUFSX0dSQURJRU5UID0gMiwKLSAgICBQU19SQURJQUxfR1JBRElFTlQgPSAzCi19Owot
Ci1lbnVtIEtDUGFpbnRUYXJnZXRUeXBlIHsKLSAgICAvLyBUYXJnZXQgbW9kZQotICAgIEFQUExZ
X1RPX0ZJTEwgPSAxLAotICAgIEFQUExZX1RPX1NUUk9LRSA9IDIKLX07Ci0KLWNsYXNzIEtSZW5k
ZXJpbmdQYWludFNlcnZlciA6IHB1YmxpYyBTVkdSZXNvdXJjZQotewotcHVibGljOgotICAgIEtS
ZW5kZXJpbmdQYWludFNlcnZlcigpCi0gICAgICAgIDogU1ZHUmVzb3VyY2UoKQotICAgICAgICAs
IG1fYWN0aXZlQ2xpZW50KDApCi0gICAgICAgICwgbV9wYWludGluZ1RleHQoZmFsc2UpCi0gICAg
eyB9Ci0gICAgdmlydHVhbCB+S1JlbmRlcmluZ1BhaW50U2VydmVyKCkgeyB9Ci0gICAgCi0gICAg
dmlydHVhbCBib29sIGlzUGFpbnRTZXJ2ZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAg
ICBjb25zdCBSZW5kZXJQYXRoKiBhY3RpdmVDbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2
ZUNsaWVudDt9Ci0gICAgdm9pZCBzZXRBY3RpdmVDbGllbnQoY29uc3QgUmVuZGVyUGF0aCogY2xp
ZW50KSB7IG1fYWN0aXZlQ2xpZW50ID0gY2xpZW50OyB9Ci0KLSAgICB2aXJ0dWFsIEtDUGFpbnRT
ZXJ2ZXJUeXBlIHR5cGUoKSBjb25zdCA9IDA7Ci0gICAgCi0gICAgLy8gQWN0dWFsIHJlbmRlcmlu
ZyBmdW5jdGlvbgotICAgIHZpcnR1YWwgdm9pZCBkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
KiwgY29uc3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdCA9IDA7Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgc2V0dXAoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5k
ZXJPYmplY3QqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCB0ZWFyZG93bihLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCos
IEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdCA9IDA7Ci0gICAgCi0gICAgYm9vbCBpc1BhaW50aW5n
VGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFpbnRpbmdUZXh0OyB9Ci0gICAgdm9pZCBzZXRQYWlu
dGluZ1RleHQoYm9vbCBwYWludGluZ1RleHQpIHsgbV9wYWludGluZ1RleHQgPSBwYWludGluZ1Rl
eHQ7IH0KLQotICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJikgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHJlbmRlclBhdGgoS1Jl
bmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJQYXRoKiwgS0NQYWludFRhcmdldFR5
cGUpIGNvbnN0ID0gMDsKLXByaXZhdGU6Ci0gICAgY29uc3QgUmVuZGVyUGF0aCogbV9hY3RpdmVD
bGllbnQ7Ci0gICAgYm9vbCBtX3BhaW50aW5nVGV4dDsKLX07Ci0KLVRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEtSZW5kZXJpbmdQYWludFNlcnZlciYpOwotCi19Ci0K
LSNlbmRpZiAvLyBTVkdfU1VQUE9SVAotI2VuZGlmCi0KLS8vIHZpbTp0cz00Om5vZXQKSW5kZXg6
IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2Vy
dmVyR3JhZGllbnQuY3BwCShyZXZpc2lvbiAxNzg2MikKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZp
Y2UvS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDI1MyArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFpp
bW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUg
Um9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLQotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBL
REUgcHJvamVjdAotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0g
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBV
U0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaWZkZWYgU1ZHX1NVUFBPUlQKLSNpbmNs
dWRlICJJbnRQb2ludC5oIgotCi0jaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGll
bnQuaCIKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIlNWR1JlbmRl
clRyZWVBc1RleHQuaCIKLSNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotLy9LQ0dyYWRpZW50U3ByZWFkTWV0aG9kCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBLQ0dyYWRpZW50U3ByZWFkTWV0aG9kIG0pCi17Ci0gICAgc3dpdGNo
IChtKSAKLSAgICB7Ci0gICAgY2FzZSBTUFJFQURNRVRIT0RfUEFEOgotICAgICAgICB0cyA8PCAi
UEFEIjsgYnJlYWs7Ci0gICAgY2FzZSBTUFJFQURNRVRIT0RfUkVQRUFUOgotICAgICAgICB0cyA8
PCAiUkVQRUFUIjsgYnJlYWs7Ci0gICAgY2FzZSBTUFJFQURNRVRIT0RfUkVGTEVDVDoKLSAgICAg
ICAgdHMgPDwgIlJFRkxFQ1QiOyBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHRzOwotfQotCi1U
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBWZWN0b3I8S0NHcmFk
aWVudFN0b3A+JiBsKQotewotICAgIHRzIDw8ICJbIjsKLSAgICBmb3IgKFZlY3RvcjxLQ0dyYWRp
ZW50U3RvcD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbC5iZWdpbigpOyBpdCAhPSBsLmVuZCgpOyAr
K2l0KSB7IAotICAgICAgICB0cyA8PCAiKCIgPDwgaXQtPmZpcnN0IDw8ICIsIiA8PCBpdC0+c2Vj
b25kIDw8ICIpIjsKLSAgICAgICAgaWYgKGl0ICsgMSAhPSBsLmVuZCgpKQotICAgICAgICAgICAg
dHMgPDwgIiwgIjsKLSAgICB9Ci0gICAgdHMgPDwgIl0iOwotICAgIHJldHVybiB0czsKLX0KLQot
Ly8gS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQKLUtSZW5kZXJpbmdQYWludFNlcnZlckdy
YWRpZW50OjpLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCgpCi0gICAgOiBLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXIoKQotICAgICwgbV9zcHJlYWRNZXRob2QoU1BSRUFETUVUSE9EX1BBRCkKLSAg
ICAsIG1fYm91bmRpbmdCb3hNb2RlKHRydWUpCi0gICAgLCBtX2xpc3RlbmVyKDApCi17Ci19Ci0K
LUtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50Ojp+S1JlbmRlcmluZ1BhaW50U2VydmVyR3Jh
ZGllbnQoKQotewotfQotCi1jb25zdCBWZWN0b3I8S0NHcmFkaWVudFN0b3A+JiBLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJHcmFkaWVudDo6Z3JhZGllbnRTdG9wcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fc3RvcHM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlU3RvcE9mZnNldChjb25z
dCBLQ0dyYWRpZW50U3RvcCYgZmlyc3QsIGNvbnN0IEtDR3JhZGllbnRTdG9wJiBzZWNvbmQpCi17
Ci0gICAgcmV0dXJuIGZpcnN0LmZpcnN0IDwgc2Vjb25kLmZpcnN0OwotfQotCi12b2lkIEtSZW5k
ZXJpbmdQYWludFNlcnZlckdyYWRpZW50OjpzZXRHcmFkaWVudFN0b3BzKGNvbnN0IFZlY3RvcjxL
Q0dyYWRpZW50U3RvcD4mIHN0b3BzKQotewotICAgIG1fc3RvcHMgPSBzdG9wczsKLSAgICBzdGQ6
OnNvcnQobV9zdG9wcy5iZWdpbigpLCBtX3N0b3BzLmVuZCgpLCBjb21wYXJlU3RvcE9mZnNldCk7
Ci19IAotCi12b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50OjpzZXRHcmFkaWVudFN0
b3BzKEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50KiBzZXJ2ZXIpCi17Ci0gICAgbV9zdG9w
cyA9IHNlcnZlci0+Z3JhZGllbnRTdG9wcygpOwotfQotCi1LQ0dyYWRpZW50U3ByZWFkTWV0aG9k
IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50OjpzcHJlYWRNZXRob2QoKSBjb25zdAotewot
ICAgIHJldHVybiBtX3NwcmVhZE1ldGhvZDsKLX0KLQotdm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJHcmFkaWVudDo6c2V0R3JhZGllbnRTcHJlYWRNZXRob2QoY29uc3QgS0NHcmFkaWVudFNwcmVh
ZE1ldGhvZCAmbWV0aG9kKQotewotICAgIG1fc3ByZWFkTWV0aG9kID0gbWV0aG9kOwotfQotCi1i
b29sIEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50Ojpib3VuZGluZ0JveE1vZGUoKSBjb25z
dAotewotICAgIHJldHVybiBtX2JvdW5kaW5nQm94TW9kZTsKLX0KLQotdm9pZCBLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0Qm91bmRpbmdCb3hNb2RlKGJvb2wgbW9kZSkKLXsKLSAg
ICBtX2JvdW5kaW5nQm94TW9kZSA9IG1vZGU7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJHcmFkaWVudDo6Z3JhZGllbnRUcmFuc2Zvcm0oKSBjb25zdAotewotICAg
IHJldHVybiBtX2dyYWRpZW50VHJhbnNmb3JtOwotfQotCi12b2lkIEtSZW5kZXJpbmdQYWludFNl
cnZlckdyYWRpZW50OjpzZXRHcmFkaWVudFRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IG1hdCkKLXsKLSAgICBtX2dyYWRpZW50VHJhbnNmb3JtID0gbWF0OwotfQotCi1UZXh0U3RyZWFt
JiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiB0cykgY29uc3QKLXsKLSAgICAvLyBhYnN0cmFjdCwgZG9uJ3Qgc3RyZWFtIHR5
cGUKLSAgICB0cyAgPDwgIltzdG9wcz0iIDw8IGdyYWRpZW50U3RvcHMoKSA8PCAiXSI7Ci0gICAg
aWYgKHNwcmVhZE1ldGhvZCgpICE9IFNQUkVBRE1FVEhPRF9QQUQpCi0gICAgICAgIHRzIDw8ICJb
bWV0aG9kPSIgPDwgc3ByZWFkTWV0aG9kKCkgPDwgIl0iOyAgICAgICAgCi0gICAgaWYgKCFib3Vu
ZGluZ0JveE1vZGUoKSkKLSAgICAgICAgdHMgPDwgIiBbYm91bmRpbmcgYm94IG1vZGU9IiA8PCBi
b3VuZGluZ0JveE1vZGUoKSA8PCAiXSI7Ci0gICAgaWYgKCFncmFkaWVudFRyYW5zZm9ybSgpLmlz
SWRlbnRpdHkoKSkKLSAgICAgICAgdHMgPDwgIiBbdHJhbnNmb3JtPSIgPDwgZ3JhZGllbnRUcmFu
c2Zvcm0oKSA8PCAiXSI7Ci0gICAgCi0gICAgcmV0dXJuIHRzOwotfQotCi0vLyBLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudAotS1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3Jh
ZGllbnQ6OktSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50KCkKLSAgICA6IEtSZW5k
ZXJpbmdQYWludFNlcnZlckdyYWRpZW50KCkKLXsKLX0KLQotS1JlbmRlcmluZ1BhaW50U2VydmVy
TGluZWFyR3JhZGllbnQ6On5LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudCgpCi17
Ci19Ci0KLUZsb2F0UG9pbnQgS1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQ6Omdy
YWRpZW50U3RhcnQoKSBjb25zdAotewotICAgIHJldHVybiBtX3N0YXJ0OwotfQotCi12b2lkIEtS
ZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50OjpzZXRHcmFkaWVudFN0YXJ0KGNvbnN0
IEZsb2F0UG9pbnQgJnN0YXJ0KQotewotICAgIG1fc3RhcnQgPSBzdGFydDsKLX0KLQotRmxvYXRQ
b2ludCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudDo6Z3JhZGllbnRFbmQoKSBj
b25zdAotewotICAgIHJldHVybiBtX2VuZDsKLX0KLQotdm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJMaW5lYXJHcmFkaWVudDo6c2V0R3JhZGllbnRFbmQoY29uc3QgRmxvYXRQb2ludCAmZW5kKQot
ewotICAgIG1fZW5kID0gZW5kOwotfQotCi1LQ1BhaW50U2VydmVyVHlwZSBLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJMaW5lYXJHcmFkaWVudDo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFBTX0xJ
TkVBUl9HUkFESUVOVDsKLX0KLQotVGV4dFN0cmVhbSYgS1JlbmRlcmluZ1BhaW50U2VydmVyTGlu
ZWFyR3JhZGllbnQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMpIGNvbnN0
Ci17Ci0gICAgdHMgPDwgIlt0eXBlPUxJTkVBUi1HUkFESUVOVF0gIjsgICAgCi0gICAgS1JlbmRl
cmluZ1BhaW50U2VydmVyR3JhZGllbnQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOwotICAg
IHRzICA8PCAiIFtzdGFydD0iIDw8IGdyYWRpZW50U3RhcnQoKSA8PCAiXSIKLSAgICAgICAgPDwg
IiBbZW5kPSIgPDwgZ3JhZGllbnRFbmQoKSA8PCAiXSI7Ci0gICAgcmV0dXJuIHRzOwotfQotCi0v
LyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudAotS1JlbmRlcmluZ1BhaW50U2Vy
dmVyUmFkaWFsR3JhZGllbnQ6OktSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50KCkK
LSAgICA6IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50KCkKLXsKLX0KLQotS1JlbmRlcmlu
Z1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQ6On5LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxH
cmFkaWVudCgpCi17Ci19Ci0KLUZsb2F0UG9pbnQgS1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFs
R3JhZGllbnQ6OmdyYWRpZW50Q2VudGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jZW50ZXI7
Ci19Ci0KLXZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQ6OnNldEdyYWRp
ZW50Q2VudGVyKGNvbnN0IEZsb2F0UG9pbnQgJmNlbnRlcikKLXsKLSAgICBtX2NlbnRlciA9IGNl
bnRlcjsKLX0KLQotRmxvYXRQb2ludCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVu
dDo6Z3JhZGllbnRGb2NhbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZm9jYWw7Ci19Ci0KLXZv
aWQgS1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQ6OnNldEdyYWRpZW50Rm9jYWwo
Y29uc3QgRmxvYXRQb2ludCAmZm9jYWwpCi17Ci0gICAgbV9mb2NhbCA9IGZvY2FsOwotfQotCi1m
bG9hdCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudDo6Z3JhZGllbnRSYWRpdXMo
KSBjb25zdAotewotICAgIHJldHVybiBtX3JhZGl1czsKLX0KLQotdm9pZCBLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJSYWRpYWxHcmFkaWVudDo6c2V0R3JhZGllbnRSYWRpdXMoZmxvYXQgcmFkaXVzKQot
ewotICAgIG1fcmFkaXVzID0gcmFkaXVzOwotfQotCi1LQ1BhaW50U2VydmVyVHlwZSBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudDo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IFBTX1JBRElBTF9HUkFESUVOVDsKLX0KLQotU1ZHUmVzb3VyY2VMaXN0ZW5lciogS1JlbmRlcmlu
Z1BhaW50U2VydmVyR3JhZGllbnQ6Omxpc3RlbmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9s
aXN0ZW5lcjsKLX0KLQotdm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0TGlz
dGVuZXIoU1ZHUmVzb3VyY2VMaXN0ZW5lciogbGlzdGVuZXIpCi17Ci0gICAgbV9saXN0ZW5lciA9
IGxpc3RlbmVyOwotfQotCi1UZXh0U3RyZWFtJiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxH
cmFkaWVudDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cykgY29uc3QKLXsK
LSAgICB0cyA8PCAiW3R5cGU9UkFESUFMLUdSQURJRU5UXSAiOyAKLSAgICBLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJHcmFkaWVudDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7Ci0gICAgdHMgPDwg
IiBbY2VudGVyPSIgPDwgZ3JhZGllbnRDZW50ZXIoKSA8PCAiXSIKLSAgICAgICAgPDwgIiBbZm9j
YWw9IiA8PCBncmFkaWVudEZvY2FsKCkgPDwgIl0iCi0gICAgICAgIDw8ICIgW3JhZGl1cz0iIDw8
IGdyYWRpZW50UmFkaXVzKCkgPDwgIl0iOwotICAgIHJldHVybiB0czsKLX0KLQotfQotCi0vLyB2
aW06dHM9NDpub2V0Ci0jZW5kaWYgLy8gU1ZHX1NVUFBPUlQKLQpJbmRleDogV2ViQ29yZS9rY2Fu
dmFzL2RldmljZS9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQuaAko
cmV2aXNpb24gMTc4NjIpCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWlu
dFNlcnZlckdyYWRpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMyICswLDAgQEAKLS8qCi0g
ICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBr
ZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUu
b3JnPgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0Ci0KLSAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWludCB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1
aXRlIDMzMCwKLSAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSovCi0KLSNpZm5kZWYg
S1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRfSAotI2RlZmluZSBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJHcmFkaWVudF9ICi0jaWZkZWYgU1ZHX1NVUFBPUlQKLQotI2luY2x1ZGUgIkFmZmluZVRy
YW5zZm9ybS5oIgotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgot
I2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWVudW0gS0NHcmFkaWVudFNwcmVhZE1ldGhvZCB7Ci0gICAgU1BSRUFETUVUSE9EX1BBRCA9
IDEsCi0gICAgU1BSRUFETUVUSE9EX1JFUEVBVCA9IDIsCi0gICAgU1BSRUFETUVUSE9EX1JFRkxF
Q1QgPSA0Ci19OwotCi10eXBlZGVmIHN0ZDo6cGFpcjxmbG9hdCwgQ29sb3I+IEtDR3JhZGllbnRT
dG9wOwotaW5saW5lIEtDR3JhZGllbnRTdG9wIG1ha2VHcmFkaWVudFN0b3AoZmxvYXQgb2Zmc2V0
LCBjb25zdCBDb2xvciYgY29sb3IpIHsgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG9mZnNldCwgY29s
b3IpOyB9Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIEtDR3JhZGllbnRT
cHJlYWRNZXRob2QpOwotCi1jbGFzcyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCA6IHB1
YmxpYyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIKLXsKLXB1YmxpYzoKLSAgICBLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJHcmFkaWVudCgpOwotICAgIHZpcnR1YWwgfktSZW5kZXJpbmdQYWludFNlcnZlckdy
YWRpZW50KCk7Ci0KLSAgICAvLyAnR3JhZGllbnQnIGludGVyZmFjZQotICAgIGNvbnN0IFZlY3Rv
cjxLQ0dyYWRpZW50U3RvcD4mIGdyYWRpZW50U3RvcHMoKSBjb25zdDsKLSAgICB2b2lkIHNldEdy
YWRpZW50U3RvcHMoY29uc3QgVmVjdG9yPEtDR3JhZGllbnRTdG9wPiYpOwotICAgIHZvaWQgc2V0
R3JhZGllbnRTdG9wcyhLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCopOwotCi0gICAgS0NH
cmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QoKSBjb25zdDsKLSAgICB2b2lkIHNldEdy
YWRpZW50U3ByZWFkTWV0aG9kKGNvbnN0IEtDR3JhZGllbnRTcHJlYWRNZXRob2QmKTsKLQotICAg
IC8vIEdyYWRpZW50IHN0YXJ0IGFuZCBlbmQgcG9pbnRzIGFyZSBwZXJjZW50YWdlcyB3aGVuIHVz
ZWQgaW4gYm91bmRpbmdCb3ggbW9kZS4KLSAgICAvLyBGb3IgaW5zdGFuY2Ugc3RhcnQgcG9pbnQg
d2l0aCB2YWx1ZSAoMCwwKSBpcyB0b3AtbGVmdCBhbmQgZW5kIHBvaW50IHdpdGggdmFsdWUgKDEw
MCwgMTAwKSBpcyAKLSAgICAvLyBib3R0b20tcmlnaHQuCi0gICAgLy8gQm91bmRpbmdCb3ggbW9k
ZSBpcyB0cnVlIGJ5IGRlZmF1bHQuCi0gICAgYm9vbCBib3VuZGluZ0JveE1vZGUoKSBjb25zdDsK
LSAgICB2b2lkIHNldEJvdW5kaW5nQm94TW9kZShib29sIG1vZGUgPSB0cnVlKTsKLQotICAgIEFm
ZmluZVRyYW5zZm9ybSBncmFkaWVudFRyYW5zZm9ybSgpIGNvbnN0OwotICAgIHZvaWQgc2V0R3Jh
ZGllbnRUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgCi0gICAgU1ZHUmVz
b3VyY2VMaXN0ZW5lciogbGlzdGVuZXIoKSBjb25zdDsKLSAgICB2b2lkIHNldExpc3RlbmVyKFNW
R1Jlc291cmNlTGlzdGVuZXIqKTsKLQotICAgIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0OwotcHJpdmF0ZToKLSAgICBWZWN0b3I8S0NHcmFkaWVu
dFN0b3A+IG1fc3RvcHM7Ci0gICAgS0NHcmFkaWVudFNwcmVhZE1ldGhvZCBtX3NwcmVhZE1ldGhv
ZDsKLSAgICBib29sIG1fYm91bmRpbmdCb3hNb2RlOwotICAgIEFmZmluZVRyYW5zZm9ybSBtX2dy
YWRpZW50VHJhbnNmb3JtOwotICAgIFNWR1Jlc291cmNlTGlzdGVuZXIqIG1fbGlzdGVuZXI7Ci19
OwotCi1jbGFzcyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudCA6IHB1YmxpYyBL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudAotewotcHVibGljOgotICAgIEtSZW5kZXJpbmdQ
YWludFNlcnZlckxpbmVhckdyYWRpZW50KCk7Ci0gICAgdmlydHVhbCB+S1JlbmRlcmluZ1BhaW50
U2VydmVyTGluZWFyR3JhZGllbnQoKTsKLQotICAgIHZpcnR1YWwgS0NQYWludFNlcnZlclR5cGUg
dHlwZSgpIGNvbnN0OwotCi0gICAgLy8gJ0xpbmVhciBHcmFkaWVudCcgaW50ZXJmYWNlCi0gICAg
RmxvYXRQb2ludCBncmFkaWVudFN0YXJ0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRHcmFkaWVudFN0
YXJ0KGNvbnN0IEZsb2F0UG9pbnQmKTsKLQotICAgIEZsb2F0UG9pbnQgZ3JhZGllbnRFbmQoKSBj
b25zdDsKLSAgICB2b2lkIHNldEdyYWRpZW50RW5kKGNvbnN0IEZsb2F0UG9pbnQmKTsKLQotICAg
IFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0Owot
cHJpdmF0ZToKLSAgICBGbG9hdFBvaW50IG1fc3RhcnQ7Ci0gICAgRmxvYXRQb2ludCBtX2VuZDsK
LX07Ci0KLWNsYXNzIEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50IDogcHVibGlj
IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50Ci17Ci1wdWJsaWM6Ci0gICAgS1JlbmRlcmlu
Z1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQoKTsKLSAgICB2aXJ0dWFsIH5LUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJSYWRpYWxHcmFkaWVudCgpOwotCi0gICAgdmlydHVhbCBLQ1BhaW50U2VydmVyVHlw
ZSB0eXBlKCkgY29uc3Q7Ci0KLSAgICAvLyAnUmFkaWFsIEdyYWRpZW50JyBpbnRlcmZhY2UKLSAg
ICBGbG9hdFBvaW50IGdyYWRpZW50Q2VudGVyKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRHcmFkaWVu
dENlbnRlcihjb25zdCBGbG9hdFBvaW50Jik7Ci0KLSAgICBGbG9hdFBvaW50IGdyYWRpZW50Rm9j
YWwoKSBjb25zdDsKLSAgICB2b2lkIHNldEdyYWRpZW50Rm9jYWwoY29uc3QgRmxvYXRQb2ludCYp
OwotCi0gICAgZmxvYXQgZ3JhZGllbnRSYWRpdXMoKSBjb25zdDsKLSAgICB2b2lkIHNldEdyYWRp
ZW50UmFkaXVzKGZsb2F0KTsKLQotICAgIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oVGV4dFN0cmVhbSYpIGNvbnN0OwotcHJpdmF0ZToKLSAgICBmbG9hdCBtX3JhZGl1czsKLSAg
ICBGbG9hdFBvaW50IG1fY2VudGVyOwotICAgIEZsb2F0UG9pbnQgbV9mb2NhbDsKLX07Ci0KLX0K
LQotI2VuZGlmIC8vIFNWR19TVVBQT1JUCi0jZW5kaWYKLQotLy8gdmltOnRzPTQ6bm9ldApJbmRl
eDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNl
cnZlclBhdHRlcm4uY3BwCShyZXZpc2lvbiAxNzg2MikKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZp
Y2UvS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTE1ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmlt
bWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtE
RSBwcm9qZWN0Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
ICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT
QS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpZmRlZiBTVkdfU1VQUE9SVAotI2luY2x1
ZGUgIlNWR1Jlc291cmNlSW1hZ2UuaCIKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgot
I2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4uaCIKLSNpbmNsdWRlICJTVkdS
ZW5kZXJUcmVlQXNUZXh0LmgiCi0jaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLUtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm46OktSZW5kZXJpbmdQYWlu
dFNlcnZlclBhdHRlcm4oKQotICAgIDogS1JlbmRlcmluZ1BhaW50U2VydmVyKCkKLSAgICAsIG1f
dXNlQm91bmRpbmdCb3hNb2RlKHRydWUpCi0gICAgLCBtX2xpc3RlbmVyKDApCi17Ci19Ci0KLUtS
ZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm46On5LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJu
KCkKLXsKLX0KLQotdm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpzZXRCYm94KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBtX2Jib3ggPSByZWN0OwotfQotCi1GbG9hdFJl
Y3QgS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybjo6YmJveCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fYmJveDsKLX0KLQotYm9vbCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpib3Vu
ZGluZ0JveE1vZGUoKSBjb25zdAotewotICAgIHJldHVybiBtX3VzZUJvdW5kaW5nQm94TW9kZTsK
LX0KLQotdm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpzZXRCb3VuZGluZ0JveE1v
ZGUoYm9vbCBtb2RlKQotewotICAgIG1fdXNlQm91bmRpbmdCb3hNb2RlID0gbW9kZTsKLX0KLQot
U1ZHUmVzb3VyY2VJbWFnZSogS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybjo6dGlsZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fdGlsZS5nZXQoKTsKLX0KLQotdm9pZCBLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJQYXR0ZXJuOjpzZXRUaWxlKGNvbnN0IFBhc3NSZWZQdHI8U1ZHUmVzb3VyY2VJbWFn
ZT4mIHRpbGUpCi17Ci0gICAgbV90aWxlID0gdGlsZTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIEtS
ZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm46OnBhdHRlcm5UcmFuc2Zvcm0oKSBjb25zdAotewot
ICAgIHJldHVybiBtX3BhdHRlcm5UcmFuc2Zvcm07Ci19Ci0KLXZvaWQgS1JlbmRlcmluZ1BhaW50
U2VydmVyUGF0dGVybjo6c2V0UGF0dGVyblRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IG1hdCkKLXsKLSAgICBtX3BhdHRlcm5UcmFuc2Zvcm0gPSBtYXQ7Ci19Ci0KLUtDUGFpbnRTZXJ2
ZXJUeXBlIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm46OnR5cGUoKSBjb25zdAotewotICAg
IHJldHVybiBQU19QQVRURVJOOwotfQotCi1TVkdSZXNvdXJjZUxpc3RlbmVyKiBLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJQYXR0ZXJuOjpsaXN0ZW5lcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbGlz
dGVuZXI7Ci19Ci0KLXZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybjo6c2V0TGlzdGVu
ZXIoU1ZHUmVzb3VyY2VMaXN0ZW5lciogbGlzdGVuZXIpCi17Ci0gICAgbV9saXN0ZW5lciA9IGxp
c3RlbmVyOwotfQotCi1UZXh0U3RyZWFtJiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzKSBjb25zdAotewotICAgICB0cyA8
PCAiW3R5cGU9UEFUVEVSTl0iCi0gICAgICAgIDw8ICIgW2Jib3g9IiA8PCBiYm94KCkgPDwgIl0i
OwotICAgIGlmICghYm91bmRpbmdCb3hNb2RlKCkpCi0gICAgICAgIHRzIDw8ICIgW2JvdW5kaW5n
IGJveCBtb2RlPSIgPDwgYm91bmRpbmdCb3hNb2RlKCkgPDwgIl0iOyAgICAgICAgCi0gICAgaWYg
KCFwYXR0ZXJuVHJhbnNmb3JtKCkuaXNJZGVudGl0eSgpKQotICAgICAgICB0cyA8PCAiIFtwYXR0
ZXJuIHRyYW5zZm9ybT0iIDw8IHBhdHRlcm5UcmFuc2Zvcm0oKSA8PCAiXSI7Ci0gICAgcmV0dXJu
IHRzOwotfQotCi19Ci0KLS8vIHZpbTp0cz00Om5vZXQKLSNlbmRpZiAvLyBTVkdfU1VQUE9SVAot
CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlclBhdHRl
cm4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWlu
dFNlcnZlclBhdHRlcm4uaAkocmV2aXNpb24gMTc4NjIpCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2
aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw3
NyArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1l
cm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLQotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUg
cHJvamVjdAotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAg
IGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBU
ZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0Eu
Ci0qLwotCi0jaWZuZGVmIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5fSAotI2RlZmluZSBL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuX0gKLSNpZmRlZiBTVkdfU1VQUE9SVAotCi0jaW5j
bHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVk
ZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgU1ZHUmVzb3VyY2VJbWFnZTsKLQotY2xhc3MgS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVy
biA6IHB1YmxpYyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIKLXsKLXB1YmxpYzoKLSAgICBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuKCk7Ci0gICAgdmlydHVhbCB+S1JlbmRlcmluZ1BhaW50U2Vy
dmVyUGF0dGVybigpOwotCi0gICAgdmlydHVhbCBLQ1BhaW50U2VydmVyVHlwZSB0eXBlKCkgY29u
c3Q7Ci0KLSAgICAvLyBQYXR0ZXJuIGJib3gKLSAgICB2b2lkIHNldEJib3goY29uc3QgRmxvYXRS
ZWN0Jik7Ci0gICAgRmxvYXRSZWN0IGJib3goKSBjb25zdDsKLSAgICAKLSAgICAvLyBQYXR0ZXJu
IHgseSBwaGFzZSBwb2ludHMgYXJlIHJlbGF0aXZlIHdoZW4gaW4gYm91bmRpbmdCb3hNb2RlCi0g
ICAgLy8gQm91bmRpbmdCb3ggbW9kZSBpcyB0cnVlIGJ5IGRlZmF1bHQuCi0gICAgYm9vbCBib3Vu
ZGluZ0JveE1vZGUoKSBjb25zdDsKLSAgICB2b2lkIHNldEJvdW5kaW5nQm94TW9kZShib29sIG1v
ZGUgPSB0cnVlKTsKLSAgICAKLSAgICAvLyAnUGF0dGVybicgaW50ZXJmYWNlCi0gICAgU1ZHUmVz
b3VyY2VJbWFnZSogdGlsZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VGlsZShjb25zdCBQYXNzUmVm
UHRyPFNWR1Jlc291cmNlSW1hZ2U+Jik7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRy
YW5zZm9ybSgpIGNvbnN0OwotICAgIHZvaWQgc2V0UGF0dGVyblRyYW5zZm9ybShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKTsKLQotICAgIFNWR1Jlc291cmNlTGlzdGVuZXIqIGxpc3RlbmVyKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRMaXN0ZW5lcihTVkdSZXNvdXJjZUxpc3RlbmVyKik7Ci0gICAgVGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJikgY29uc3Q7Ci0KLXBy
aXZhdGU6Ci0gICAgUmVmUHRyPFNWR1Jlc291cmNlSW1hZ2U+IG1fdGlsZTsKLSAgICBBZmZpbmVU
cmFuc2Zvcm0gbV9wYXR0ZXJuVHJhbnNmb3JtOwotICAgIEZsb2F0UmVjdCBtX2Jib3g7Ci0gICAg
Ym9vbCBtX3VzZUJvdW5kaW5nQm94TW9kZTsKLSAgICBTVkdSZXNvdXJjZUxpc3RlbmVyKiBtX2xp
c3RlbmVyOwotCi19OwotCi19Ci0KLSNlbmRpZiAvLyBTVkdfU1VQUE9SVAotI2VuZGlmCi0KLS8v
IHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1Bh
aW50U2VydmVyU29saWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2Uv
S1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQuY3BwCShyZXZpc2lvbiAxNzg2MikKKysrIFdlYkNv
cmUva2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDczICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotCi0gICAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIEtERSBwcm9qZWN0Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAgICBCb3N0b24sIE1BIDAy
MTExLTEzMDcsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmZGVmIFNWR19T
VVBQT1JUCi0jaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQuaCIKLQotI2luY2x1
ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQuaCIKLSNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQ6OktSZW5kZXJp
bmdQYWludFNlcnZlclNvbGlkKCkKLSAgICA6IEtSZW5kZXJpbmdQYWludFNlcnZlcigpCi17Ci19
Ci0KLUtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkOjp+S1JlbmRlcmluZ1BhaW50U2VydmVyU29s
aWQoKQotewotfQotCi1Db2xvciBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZDo6Y29sb3IoKSBj
b25zdAotewotICAgIHJldHVybiBtX2NvbG9yOwotfQotCi12b2lkIEtSZW5kZXJpbmdQYWludFNl
cnZlclNvbGlkOjpzZXRDb2xvcihjb25zdCBDb2xvciAmY29sb3IpCi17Ci0gICAgbV9jb2xvciA9
IGNvbG9yOwotfQotCi1LQ1BhaW50U2VydmVyVHlwZSBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xp
ZDo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFBTX1NPTElEOwotfQotCi1UZXh0U3RyZWFt
JiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cykgY29uc3QKLXsKLSAgICB0cyA8PCAiW3R5cGU9U09MSURdIgotICAgICAgICA8
PCAiIFtjb2xvcj0iPDwgY29sb3IoKSA8PCAiXSI7Ci0gICAgcmV0dXJuIHRzOwotfQotCi1UZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXImIHBzKQotewotICAgIHJldHVybiBwcy5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsK
LX0KLQotfQotCi0vLyB2aW06dHM9NDpub2V0Ci0jZW5kaWYgLy8gU1ZHX1NVUFBPUlQKLQpJbmRl
eDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVy
U29saWQuaAkocmV2aXNpb24gMTc4NjIpCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL0tSZW5k
ZXJpbmdQYWludFNlcnZlclNvbGlkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTQgKzAsMCBAQAot
LyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxk
Zm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlz
QGtkZS5vcmc+Ci0KLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKLQot
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhaW50IHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNl
IC0gU3VpdGUgMzMwLAotICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotKi8KLQotI2lm
bmRlZiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZF9ICi0jZGVmaW5lIEtSZW5kZXJpbmdQYWlu
dFNlcnZlclNvbGlkX0gKLSNpZmRlZiBTVkdfU1VQUE9SVAotCi0jaW5jbHVkZSAiQ29sb3IuaCIK
LSNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZCA6IHB1YmxpYyBLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXIKLXsKLXB1YmxpYzoKLSAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZCgp
OwotICAgIHZpcnR1YWwgfktSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkKCk7Ci0KLSAgICB2aXJ0
dWFsIEtDUGFpbnRTZXJ2ZXJUeXBlIHR5cGUoKSBjb25zdDsKLQotICAgIC8vICdTb2xpZCcgaW50
ZXJmYWNlCi0gICAgQ29sb3IgY29sb3IoKSBjb25zdDsKLSAgICB2b2lkIHNldENvbG9yKGNvbnN0
IENvbG9yJik7Ci0KLSAgICBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRT
dHJlYW0mKSBjb25zdDsKLXByaXZhdGU6Ci0gICAgQ29sb3IgbV9jb2xvcjsKLX07Ci0KLX0KLQot
I2VuZGlmIC8vIFNWR19TVVBQT1JUCi0jZW5kaWYKLQotLy8gdmltOnRzPTQ6bm9ldApJbmRleDog
V2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nRGV2aWNlUXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ0RldmljZVF0LmNwcAko
cmV2aXNpb24gMTc4NjIpCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdE
ZXZpY2VRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDkgKzI5LDEwIEBACiAjaW5jbHVkZSAi
U1ZHUmVzb3VyY2VDbGlwcGVyLmgiCiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2VNYXJrZXIuaCIKICNp
bmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlUXQuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJTb2xpZFF0LmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRR
dC5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdC5oIgorI2luY2x1
ZGUgIlNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQuaCIKKyNpbmNsdWRlICJTVkdQYWludFNl
cnZlclBhdHRlcm4uaCIKKyNpbmNsdWRlICJTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50Lmgi
CisjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTE2MSwxOCArMTYyLDE4IEBAIFBhc3NSZWZQdHI8U1ZHUmVzb3VyY2U+IEtSZW5kZXJp
bmdEZXZpY2UKICAgICB9CiB9CiAKLVBhc3NSZWZQdHI8S1JlbmRlcmluZ1BhaW50U2VydmVyPiBL
UmVuZGVyaW5nRGV2aWNlUXQ6OmNyZWF0ZVBhaW50U2VydmVyKGNvbnN0IEtDUGFpbnRTZXJ2ZXJU
eXBlJiB0eXBlKSBjb25zdAorUGFzc1JlZlB0cjxTVkdQYWludFNlcnZlcj4gS1JlbmRlcmluZ0Rl
dmljZVF0OjpjcmVhdGVQYWludFNlcnZlcihjb25zdCBTVkdQYWludFNlcnZlclR5cGUmIHR5cGUp
IGNvbnN0CiB7CiAgICAgc3dpdGNoICh0eXBlKQogICAgIHsKICAgICAgICAgY2FzZSBQU19TT0xJ
RDoKLSAgICAgICAgICAgIHJldHVybiBuZXcgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdCgp
OworICAgICAgICAgICAgcmV0dXJuIG5ldyBTVkdQYWludFNlcnZlclNvbGlkKCk7CiAgICAgICAg
IGNhc2UgUFNfUEFUVEVSTjoKLSAgICAgICAgICAgIHJldHVybiBuZXcgS1JlbmRlcmluZ1BhaW50
U2VydmVyUGF0dGVyblF0KCk7CisgICAgICAgICAgICByZXR1cm4gbmV3IFNWR1BhaW50U2VydmVy
UGF0dGVybigpOwogICAgICAgICBjYXNlIFBTX0xJTkVBUl9HUkFESUVOVDoKLSAgICAgICAgICAg
IHJldHVybiBuZXcgS1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRRdCgpOworICAg
ICAgICAgICAgcmV0dXJuIG5ldyBTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50KCk7CiAgICAg
ICAgIGNhc2UgUFNfUkFESUFMX0dSQURJRU5UOgotICAgICAgICAgICAgcmV0dXJuIG5ldyBLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudFF0KCk7CisgICAgICAgICAgICByZXR1cm4g
bmV3IFNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQoKTsKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgIH0KSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2Uv
cXQvS1JlbmRlcmluZ0RldmljZVF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2Rl
dmljZS9xdC9LUmVuZGVyaW5nRGV2aWNlUXQuaAkocmV2aXNpb24gMTc4NjIpCisrKyBXZWJDb3Jl
L2tjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdEZXZpY2VRdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8UVBhaW50ZXJQYXRoPgogCiAjaW5jbHVkZSAiS1Jl
bmRlcmluZ0RldmljZS5oIgorI2luY2x1ZGUgIlBhdGguaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC03OCw3ICs3OSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFJlc291cmNlIGNyZWF0aW9u
CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNWR1Jlc291cmNlPiBjcmVhdGVSZXNvdXJjZShjb25z
dCBTVkdSZXNvdXJjZVR5cGUmKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8S1JlbmRl
cmluZ1BhaW50U2VydmVyPiBjcmVhdGVQYWludFNlcnZlcihjb25zdCBLQ1BhaW50U2VydmVyVHlw
ZSYpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTVkdQYWludFNlcnZlcj4gY3JlYXRl
UGFpbnRTZXJ2ZXIoY29uc3QgU1ZHUGFpbnRTZXJ2ZXJUeXBlJikgY29uc3Q7CiAgICAgdmlydHVh
bCBTVkdGaWx0ZXJFZmZlY3QqIGNyZWF0ZUZpbHRlckVmZmVjdChjb25zdCBTVkdGaWx0ZXJFZmZl
Y3RUeXBlJikgY29uc3Q7CiB9OwogCkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tS
ZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
a2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdC5jcHAJKHJl
dmlzaW9uIDE3ODYyKQorKysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJHcmFkaWVudFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyNzQgKzAsMCBAQAot
LyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5u
IDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJv
YiBCdWlzIDxidWlzQGtkZS5vcmc+Ci0KLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RF
IHByb2plY3QKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcg
d2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gSWYgbm90LCB3cml0
ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0q
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8
UVBvaW50Rj4KLQotI2luY2x1ZGUgIlJlbmRlclBhdGguaCIKLSNpbmNsdWRlICJSZW5kZXJTdHls
ZS5oIgotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdE
ZXZpY2VRdC5oIgotI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgotI2luY2x1ZGUg
IktSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi12b2lkIGZpbGxfY29sb3JfYXJyYXkoUUdyYWRpZW50JiBncmFkaWVudCwgY29uc3QgVmVj
dG9yPEtDR3JhZGllbnRTdG9wPiYgc3RvcHMsIGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHN0b3BzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGZsb2F0IG9m
ZnNldCA9IHN0b3BzW2ldLmZpcnN0OwotICAgICAgICBDb2xvciBjb2xvciA9IHN0b3BzW2ldLnNl
Y29uZDsKLSAgICAgICAgCi0gICAgICAgIFFDb2xvciBjKGNvbG9yLnJlZCgpLCBjb2xvci5ncmVl
bigpLCBjb2xvci5ibHVlKCkpOwotICAgICAgICBjLnNldEFscGhhKGludChjb2xvci5hbHBoYSgp
ICogb3BhY2l0eSkpOwotCi0gICAgICAgIGdyYWRpZW50LnNldENvbG9yQXQob2Zmc2V0LCBjKTsK
LSAgICB9Ci19Ci0KLS8vIEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50UXQKLUtS
ZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50UXQ6OktSZW5kZXJpbmdQYWludFNlcnZl
ckxpbmVhckdyYWRpZW50UXQoKQotICAgIDogS1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3Jh
ZGllbnQoKQotICAgICwgS1JlbmRlcmluZ1BhaW50U2VydmVyUXQoKQotewotfQotCi12b2lkIEtS
ZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50UXQ6OnJlbmRlclBhdGgoS1JlbmRlcmlu
Z0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHBhdGgsIEtDUGFpbnRU
YXJnZXRUeXBlIHR5cGUpIGNvbnN0Ci17Ci0gICAgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlID0g
cGF0aC0+c3R5bGUoKTsKLSAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0KiBxdENvbnRleHQg
PSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0Kj4oY29udGV4dCk7Ci0KLSAg
ICBpZiAoKHR5cGUgJiBBUFBMWV9UT19GSUxMKSAmJiByZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+
aGFzRmlsbCgpKQotICAgICAgICBxdENvbnRleHQtPmZpbGxQYXRoKCk7Ci0KLSAgICBpZiAoKHR5
cGUgJiBBUFBMWV9UT19TVFJPS0UpICYmIHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJv
a2UoKSkKLSAgICAgICAgcXRDb250ZXh0LT5zdHJva2VQYXRoKCk7Ci19Ci0KLWJvb2wgS1JlbmRl
cmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRRdDo6c2V0dXAoS1JlbmRlcmluZ0RldmljZUNv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBLQ1BhaW50VGFyZ2V0
VHlwZSB0eXBlKSBjb25zdAotewotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQqIHF0Q29u
dGV4dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQqPihjb250ZXh0KTsK
LSAgICBRX0FTU0VSVChxdENvbnRleHQgIT0gMCk7Ci0KLSAgICBpZiAobGlzdGVuZXIoKSkKLSAg
ICAgICAgbGlzdGVuZXIoKS0+cmVzb3VyY2VOb3RpZmljYXRpb24oKTsKLQotICAgIFJlbmRlclN0
eWxlKiByZW5kZXJTdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKLQotICAgIGRvdWJsZSB4MSwgeDIs
IHkxLCB5MjsKLSAgICBpZiAoYm91bmRpbmdCb3hNb2RlKCkpIHsKLSAgICAgICAgUVJlY3RGIGJi
b3ggPSBxdENvbnRleHQtPnBhdGhCQm94KCk7Ci0gICAgICAgIHgxID0gZG91YmxlKGJib3gubGVm
dCgpKSArIChkb3VibGUoZ3JhZGllbnRTdGFydCgpLngoKSAvIDEwMC4wKSAqIGRvdWJsZShiYm94
LndpZHRoKCkpKTsKLSAgICAgICAgeTEgPSBkb3VibGUoYmJveC50b3AoKSkgKyAoZG91YmxlKGdy
YWRpZW50U3RhcnQoKS55KCkgLyAxMDAuMCkgKiBkb3VibGUoYmJveC5oZWlnaHQoKSkpOwotICAg
ICAgICB4MiA9IGRvdWJsZShiYm94LmxlZnQoKSkgKyAoZG91YmxlKGdyYWRpZW50RW5kKCkueCgp
IC8gMTAwLjApICAqIGRvdWJsZShiYm94LndpZHRoKCkpKTsKLSAgICAgICAgeTIgPSBkb3VibGUo
YmJveC50b3AoKSkgKyAoZG91YmxlKGdyYWRpZW50RW5kKCkueSgpIC8gMTAwLjApICogZG91Ymxl
KGJib3guaGVpZ2h0KCkpKTsKLSAgICB9IGVsc2UgewotICAgICAgICB4MSA9IGdyYWRpZW50U3Rh
cnQoKS54KCk7Ci0gICAgICAgIHkxID0gZ3JhZGllbnRTdGFydCgpLnkoKTsKLSAgICAgICAgeDIg
PSBncmFkaWVudEVuZCgpLngoKTsKLSAgICAgICAgeTIgPSBncmFkaWVudEVuZCgpLnkoKTsKLSAg
ICB9Ci0KLSAgICBxdENvbnRleHQtPnBhaW50ZXIoKS5zZXRQZW4oUXQ6Ok5vUGVuKTsKLSAgICBx
dENvbnRleHQtPnBhaW50ZXIoKS5zZXRCcnVzaChRdDo6Tm9CcnVzaCk7Ci0KLSAgICBRTGluZWFy
R3JhZGllbnQgZ3JhZGllbnQoUVBvaW50Rih4MSwgeTEpLCBRUG9pbnRGKHgyLCB5MikpOwotICAg
IGlmIChzcHJlYWRNZXRob2QoKSA9PSBTUFJFQURNRVRIT0RfUkVQRUFUKQotICAgICAgICBncmFk
aWVudC5zZXRTcHJlYWQoUUdyYWRpZW50OjpSZXBlYXRTcHJlYWQpOwotICAgIGVsc2UgaWYgKHNw
cmVhZE1ldGhvZCgpID09IFNQUkVBRE1FVEhPRF9SRUZMRUNUKQotICAgICAgICBncmFkaWVudC5z
ZXRTcHJlYWQoUUdyYWRpZW50OjpSZWZsZWN0U3ByZWFkKTsKLSAgICBlbHNlCi0gICAgICAgIGdy
YWRpZW50LnNldFNwcmVhZChRR3JhZGllbnQ6OlBhZFNwcmVhZCk7Ci0KLSAgICBkb3VibGUgb3Bh
Y2l0eSA9IDEuMDsKLQotICAgIC8vIFRPRE86IEdyYWRpZW50IHRyYW5zZm9ybSArIG9wYWNpdHkg
Zml4ZXMhIAotCi0gICAgaWYgKCh0eXBlICYgQVBQTFlfVE9fRklMTCkgJiYgcmVuZGVyU3R5bGUt
PnN2Z1N0eWxlKCktPmhhc0ZpbGwoKSkgewotICAgICAgICBmaWxsX2NvbG9yX2FycmF5KGdyYWRp
ZW50LCBncmFkaWVudFN0b3BzKCksIG9wYWNpdHkpOwotCi0gICAgICAgIFFCcnVzaCBicnVzaChn
cmFkaWVudCk7Ci0KLSAgICAgICAgcXRDb250ZXh0LT5wYWludGVyKCkuc2V0QnJ1c2goYnJ1c2gp
OwotICAgICAgICBxdENvbnRleHQtPnNldEZpbGxSdWxlKHJlbmRlclN0eWxlLT5zdmdTdHlsZSgp
LT5maWxsUnVsZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAoKHR5cGUgJiBBUFBMWV9UT19TVFJPS0Up
ICYmIHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSkgewotICAgICAgICBmaWxs
X2NvbG9yX2FycmF5KGdyYWRpZW50LCBncmFkaWVudFN0b3BzKCksIG9wYWNpdHkpOwotCi0gICAg
ICAgIFFQZW4gcGVuOwotICAgICAgICBRQnJ1c2ggYnJ1c2goZ3JhZGllbnQpOwotCi0gICAgICAg
IHNldFBlblByb3BlcnRpZXMob2JqZWN0LCByZW5kZXJTdHlsZSwgcGVuKTsKLSAgICAgICAgcGVu
LnNldEJydXNoKGJydXNoKTsKLQotICAgICAgICBxdENvbnRleHQtPnBhaW50ZXIoKS5zZXRQZW4o
cGVuKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJMaW5lYXJHcmFkaWVudFF0Ojp0ZWFyZG93bihLUmVuZGVyaW5nRGV2aWNlQ29udGV4
dCosIGNvbnN0IFJlbmRlck9iamVjdCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdAotewotfQot
Ci12b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50UXQ6OmRyYXcoS1JlbmRl
cmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHBhdGgsIEtDUGFp
bnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Ci17Ci0gICAgaWYgKCFzZXR1cChjb250ZXh0LCBwYXRo
LCB0eXBlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVuZGVyUGF0aChjb250ZXh0LCBwYXRo
LCB0eXBlKTsKLSAgICB0ZWFyZG93bihjb250ZXh0LCBwYXRoLCB0eXBlKTsKLX0KLQotLy8gS1Jl
bmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRRdAotS1JlbmRlcmluZ1BhaW50U2VydmVy
UmFkaWFsR3JhZGllbnRRdDo6S1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRRdCgp
Ci0gICAgOiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudCgpCi0gICAgLCBLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJRdCgpCi17Ci19Ci0KLWJvb2wgS1JlbmRlcmluZ1BhaW50U2VydmVy
UmFkaWFsR3JhZGllbnRRdDo6c2V0dXAoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25z
dAotewotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQqIHF0Q29udGV4dCA9IHN0YXRpY19j
YXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQqPihjb250ZXh0KTsKLSAgICBRX0FTU0VSVChx
dENvbnRleHQgIT0gMCk7Ci0KLSAgICBpZiAobGlzdGVuZXIoKSkKLSAgICAgICAgbGlzdGVuZXIo
KS0+cmVzb3VyY2VOb3RpZmljYXRpb24oKTsKLQotICAgIFJlbmRlclN0eWxlKiByZW5kZXJTdHls
ZSA9IG9iamVjdC0+c3R5bGUoKTsKLQotICAgIHF0Q29udGV4dC0+cGFpbnRlcigpLnNldFBlbihR
dDo6Tm9QZW4pOwotICAgIHF0Q29udGV4dC0+cGFpbnRlcigpLnNldEJydXNoKFF0OjpOb0JydXNo
KTsKLSAgICBRTWF0cml4IG1hdCA9IHF0Q29udGV4dC0+Y3RtKCk7Ci0KLSAgICBkb3VibGUgY3gs
IGZ4LCBjeSwgZnksIHI7Ci0gICAgaWYgKGJvdW5kaW5nQm94TW9kZSgpKSB7Ci0gICAgICAgIFFS
ZWN0RiBiYm94ID0gcXRDb250ZXh0LT5wYXRoQkJveCgpOwotICAgICAgICBjeCA9IGRvdWJsZShi
Ym94LmxlZnQoKSkgKyAoZG91YmxlKGdyYWRpZW50Q2VudGVyKCkueCgpIC8gMTAwLjApICogZG91
YmxlKGJib3gud2lkdGgoKSkpOwotICAgICAgICBjeSA9IGRvdWJsZShiYm94LnRvcCgpKSArIChk
b3VibGUoZ3JhZGllbnRDZW50ZXIoKS55KCkgLyAxMDAuMCkgKiBkb3VibGUoYmJveC5oZWlnaHQo
KSkpOwotICAgICAgICBmeCA9IGRvdWJsZShiYm94LmxlZnQoKSkgKyAoZG91YmxlKGdyYWRpZW50
Rm9jYWwoKS54KCkgLyAxMDAuMCkgKiBkb3VibGUoYmJveC53aWR0aCgpKSkgLSBjeDsKLSAgICAg
ICAgZnkgPSBkb3VibGUoYmJveC50b3AoKSkgKyAoZG91YmxlKGdyYWRpZW50Rm9jYWwoKS55KCkg
LyAxMDAuMCkgKiBkb3VibGUoYmJveC5oZWlnaHQoKSkpIC0gY3k7Ci0gICAgICAgIHIgPSBkb3Vi
bGUoZ3JhZGllbnRSYWRpdXMoKSAvIDEwMC4wKSAqIChzcXJ0KHBvdyhiYm94LndpZHRoKCksIDIp
ICsgcG93KGJib3guaGVpZ2h0KCksIDIpKSk7Ci0KLSAgICAgICAgZmxvYXQgd2lkdGggPSBiYm94
LndpZHRoKCk7Ci0gICAgICAgIGZsb2F0IGhlaWdodCA9IGJib3guaGVpZ2h0KCk7Ci0KLSAgICAg
ICAgaW50IGRpZmYgPSBpbnQod2lkdGggLSBoZWlnaHQpOyAvLyBhbGxvdyBzbGlnaHQgdG9sZXJh
bmNlCi0gICAgICAgIGlmICghKGRpZmYgPiAtMiAmJiBkaWZmIDwgMikpIHsKLSAgICAgICAgICAg
IC8vIG1ha2UgZWxsaXB0aWNhbCBvciBjaXJjdWxhciBkZXBlbmRpbmcgb24gYmJveCBhc3BlY3Qg
cmF0aW8KLSAgICAgICAgICAgIGZsb2F0IHJhdGlvWCA9ICh3aWR0aCAvIGhlaWdodCk7Ci0gICAg
ICAgICAgICBmbG9hdCByYXRpb1kgPSAoaGVpZ2h0IC8gd2lkdGgpOwotICAgICAgICAgICAgbWF0
LnNjYWxlKCh3aWR0aCA+IGhlaWdodCkgPyAxIDogcmF0aW9YLCAod2lkdGggPiBoZWlnaHQpID8g
cmF0aW9ZIDogMSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBjeCA9IGdyYWRp
ZW50Q2VudGVyKCkueCgpOwotICAgICAgICBjeSA9IGdyYWRpZW50Q2VudGVyKCkueSgpOwotCi0g
ICAgICAgIGZ4ID0gZ3JhZGllbnRGb2NhbCgpLngoKTsKLSAgICAgICAgZnkgPSBncmFkaWVudEZv
Y2FsKCkueSgpOwotCi0gICAgICAgIGZ4IC09IGN4OwotICAgICAgICBmeSAtPSBjeTsKLQotICAg
ICAgICByID0gZ3JhZGllbnRSYWRpdXMoKTsKLSAgICB9Ci0KLSAgICBpZiAoc3FydChmeCAqIGZ4
ICsgZnkgKiBmeSkgPiByKSB7Ci0gICAgICAgIC8vIFNwZWM6IElmIChmeCwgZnkpIGxpZXMgb3V0
c2lkZSB0aGUgY2lyY2xlIGRlZmluZWQgYnkgKGN4LCBjeSkgYW5kIHIsIHNldCAoZngsIGZ5KQot
ICAgICAgICAvLyB0byB0aGUgcG9pbnQgb2YgaW50ZXJzZWN0aW9uIG9mIHRoZSBsaW5lIHRocm91
Z2ggKGZ4LCBmeSkgYW5kIHRoZSBjaXJjbGUuCi0gICAgICAgIGRvdWJsZSBhbmdsZSA9IGF0YW4y
KGZ5LCBmeCk7Ci0gICAgICAgIGZ4ID0gaW50KGNvcyhhbmdsZSkgKiByKSAtIDE7Ci0gICAgICAg
IGZ5ID0gaW50KHNpbihhbmdsZSkgKiByKSAtIDE7Ci0gICAgfQotCi0gICAgUVJhZGlhbEdyYWRp
ZW50IGdyYWRpZW50KFFQb2ludEYoY3gsIGN5KSwgZ3JhZGllbnRSYWRpdXMoKSwgUVBvaW50Rihm
eCArIGN4LCBmeSArIGN5KSk7Ci0gICAgaWYgKHNwcmVhZE1ldGhvZCgpID09IFNQUkVBRE1FVEhP
RF9SRVBFQVQpCi0gICAgICAgIGdyYWRpZW50LnNldFNwcmVhZChRR3JhZGllbnQ6OlJlcGVhdFNw
cmVhZCk7Ci0gICAgZWxzZSBpZiAoc3ByZWFkTWV0aG9kKCkgPT0gU1BSRUFETUVUSE9EX1JFRkxF
Q1QpCi0gICAgICAgIGdyYWRpZW50LnNldFNwcmVhZChRR3JhZGllbnQ6OlJlZmxlY3RTcHJlYWQp
OwotICAgIGVsc2UKLSAgICAgICAgZ3JhZGllbnQuc2V0U3ByZWFkKFFHcmFkaWVudDo6UGFkU3By
ZWFkKTsKLQotICAgIGRvdWJsZSBvcGFjaXR5ID0gMS4wOwotCi0gICAgLy8gVE9ETzogR3JhZGll
bnQgdHJhbnNmb3JtICsgb3BhY2l0eSBmaXhlcyEgCi0KLSAgICAvLyBBZmZpbmVUcmFuc2Zvcm0g
Z3JhZGllbnRUcmFucyA9IGdyYWRpZW50VHJhbnNmb3JtKCk7Ci0gICAgLy8gZ3JhZGllbnRUcmFu
cy5tYXAoY3gsIGN5LCAmY3gsICZjeSk7Ci0gICAgLy8gcXRDb250ZXh0LT5wYWludGVyKCkuc2V0
TWF0cml4KG1hdCk7Ci0KLSAgICBpZiAoKHR5cGUgJiBBUFBMWV9UT19GSUxMKSAmJiByZW5kZXJT
dHlsZS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKSB7Ci0gICAgICAgIGZpbGxfY29sb3JfYXJyYXko
Z3JhZGllbnQsIGdyYWRpZW50U3RvcHMoKSwgb3BhY2l0eSk7Ci0KLSAgICAgICAgUUJydXNoIGJy
dXNoKGdyYWRpZW50KTsKLQotICAgICAgICBxdENvbnRleHQtPnBhaW50ZXIoKS5zZXRCcnVzaChi
cnVzaCk7Ci0gICAgICAgIHF0Q29udGV4dC0+c2V0RmlsbFJ1bGUocmVuZGVyU3R5bGUtPnN2Z1N0
eWxlKCktPmZpbGxSdWxlKCkpOwotICAgICAgICAKLSAgICB9Ci0KLSAgICBpZiAoKHR5cGUgJiBB
UFBMWV9UT19TVFJPS0UpICYmIHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSkg
ewotICAgICAgICBmaWxsX2NvbG9yX2FycmF5KGdyYWRpZW50LCBncmFkaWVudFN0b3BzKCksIG9w
YWNpdHkpOwotCi0gICAgICAgIFFQZW4gcGVuOwotICAgICAgICBRQnJ1c2ggYnJ1c2goZ3JhZGll
bnQpOwotCi0gICAgICAgIHNldFBlblByb3BlcnRpZXMob2JqZWN0LCByZW5kZXJTdHlsZSwgcGVu
KTsKLSAgICAgICAgcGVuLnNldEJydXNoKGJydXNoKTsKLQotICAgICAgICBxdENvbnRleHQtPnBh
aW50ZXIoKS5zZXRQZW4ocGVuKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9p
ZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudFF0OjpkcmF3KEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiBwYXRoLCBLQ1BhaW50VGFy
Z2V0VHlwZSB0eXBlKSBjb25zdAotewotICAgIGlmICghc2V0dXAoY29udGV4dCwgcGF0aCwgdHlw
ZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlbmRlclBhdGgoY29udGV4dCwgcGF0aCwgdHlw
ZSk7Ci0gICAgdGVhcmRvd24oY29udGV4dCwgcGF0aCwgdHlwZSk7Ci19Ci0KLXZvaWQgS1JlbmRl
cmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRRdDo6dGVhcmRvd24oS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3QK
LXsKLX0KLQotdm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudFF0OjpyZW5k
ZXJQYXRoKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRo
KiBwYXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAotewotICAgIFJlbmRlclN0eWxl
KiByZW5kZXJTdHlsZSA9IHBhdGgtPnN0eWxlKCk7Ci0gICAgS1JlbmRlcmluZ0RldmljZUNvbnRl
eHRRdCogcXRDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdCo+
KGNvbnRleHQpOwotCi0gICAgaWYgKCh0eXBlICYgQVBQTFlfVE9fRklMTCkgJiYgcmVuZGVyU3R5
bGUtPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKSkKLSAgICAgICAgcXRDb250ZXh0LT5maWxsUGF0aCgp
OwotCi0gICAgaWYgKCh0eXBlICYgQVBQTFlfVE9fU1RST0tFKSAmJiByZW5kZXJTdHlsZS0+c3Zn
U3R5bGUoKS0+aGFzU3Ryb2tlKCkpCi0gICAgICAgIHF0Q29udGV4dC0+c3Ryb2tlUGF0aCgpOwot
fQotCi19Ci0KLS8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2Uv
cXQvS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdC5oCShy
ZXZpc2lvbiAxNzg2MikKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ1Bh
aW50U2VydmVyR3JhZGllbnRRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYzICswLDAgQEAKLS8q
Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8
d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2Ig
QnVpcyA8YnVpc0BrZGUub3JnPgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBw
cm9qZWN0Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdp
dGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuIElmIG5vdCwgd3JpdGUg
dG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8K
LQotI2lmbmRlZiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF0X0gKLSNkZWZpbmUgS1Jl
bmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdF9ICi0KLSNpbmNsdWRlICJLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJRdC5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50Lmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgS1JlbmRlcmluZ1BhaW50U2VydmVyTGlu
ZWFyR3JhZGllbnRRdCA6IHB1YmxpYyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVu
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMg
S1JlbmRlcmluZ1BhaW50U2VydmVyUXQKLXsKLXB1YmxpYzoKLSAgICBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJMaW5lYXJHcmFkaWVudFF0KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhdyhLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlclBhdGgqLCBLQ1BhaW50VGFyZ2V0VHlwZSkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHNldHVwKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Kiwg
Y29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0OwotICAgIHZpcnR1
YWwgdm9pZCB0ZWFyZG93bihLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogLCBjb25zdCBSZW5kZXJP
YmplY3QqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0
dWFsIHZvaWQgcmVuZGVyUGF0aChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRl
clBhdGgqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7Ci19OwotCi1jbGFzcyBLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudFF0IDogcHVibGljIEtSZW5kZXJpbmdQYWludFNlcnZl
clJhZGlhbEdyYWRpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1YmxpYyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdAotewotcHVibGljOgotICAgIEtS
ZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50UXQoKTsKLQotICAgIHZpcnR1YWwgdm9p
ZCBkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyUGF0aCosIEtDUGFp
bnRUYXJnZXRUeXBlKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc2V0dXAoS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29u
c3Q7Ci0gICAgdmlydHVhbCB2b2lkIHRlYXJkb3duKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Kiwg
Y29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0OwotCi1wcm90ZWN0
ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHJlbmRlclBhdGgoS1JlbmRlcmluZ0RldmljZUNvbnRleHQq
LCBjb25zdCBSZW5kZXJQYXRoKiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0OwotfTsKLQotfQot
Ci0jZW5kaWYKLQotLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rY2FudmFzL2Rldmlj
ZS9xdC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVyblF0LmNw
cAkocmV2aXNpb24gMTc4NjIpCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJp
bmdQYWludFNlcnZlclBhdHRlcm5RdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTI4ICswLDAg
QEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IE5pa29sYXMgWmltbWVy
bWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAw
NiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBwcm9qZWN0Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0K
LSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFs
b25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuIElmIG5vdCwg
d3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSA8cXJlY3QuaD4KLSNpbmNs
dWRlIDxxaW1hZ2UuaD4KLQotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxRUG9pbnRGPgot
I2luY2x1ZGUgPFFQYWludGVyUGF0aD4KLQotI2luY2x1ZGUgIlJlbmRlclBhdGguaCIKLSNpbmNs
dWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2VRdC5oIgotI2lu
Y2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdQYWlu
dFNlcnZlclBhdHRlcm5RdC5oIgotI2luY2x1ZGUgIlNWR1Jlc291cmNlSW1hZ2UuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi0vLyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXQKLUtS
ZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdDo6S1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVy
blF0KCkKLSAgICA6IEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4oKQotICAgICwgS1JlbmRl
cmluZ1BhaW50U2VydmVyUXQoKQotewotfQotCi1LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJu
UXQ6On5LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXQoKQotewotfQotCi12b2lkIEtSZW5k
ZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdDo6cmVuZGVyUGF0aChLUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcGF0aCwgS0NQYWludFRhcmdldFR5cGUg
dHlwZSkgY29uc3QKLXsKLSAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBwYXRoLT5zdHls
ZSgpOwotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQqIHF0Q29udGV4dCA9IHN0YXRpY19j
YXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQqPihjb250ZXh0KTsKLQotICAgIGlmICgodHlw
ZSAmIEFQUExZX1RPX0ZJTEwpICYmIHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkp
Ci0gICAgICAgIHF0Q29udGV4dC0+ZmlsbFBhdGgoKTsKLQotICAgIGlmICgodHlwZSAmIEFQUExZ
X1RPX1NUUk9LRSkgJiYgcmVuZGVyU3R5bGUtPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgpKQotICAg
ICAgICBxdENvbnRleHQtPnN0cm9rZVBhdGgoKTsKLX0KLQotYm9vbCBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJQYXR0ZXJuUXQ6OnNldHVwKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QK
LXsKLS8qCi0gICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdCogcXRDb250ZXh0ID0gc3RhdGlj
X2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdCo+KGNvbnRleHQpOwotICAgIFFfQVNTRVJU
KHF0Q29udGV4dCAhPSAwKTsKLQotICAgIFFQYWludGVyUGF0aCogX3BhdGggPSBzdGF0aWNfY2Fz
dDxRUGFpbnRlclBhdGgqPihxdENvbnRleHQtPnBhdGgoKSk7Ci0gICAgUV9BU1NFUlQoX3BhdGgg
IT0gMCk7Ci0gCi0gICAgaWYgKGxpc3RlbmVyKCkpIHsKLSAgICAgICAgbGlzdGVuZXIoKS0+cmVz
b3VyY2VOb3RpZmljYXRpb24oKTsKLSAgICB9Ci0KLSAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5
bGUgPSBvYmplY3QtPnN0eWxlKCk7Ci0KLSAgICBxdENvbnRleHQtPnBhaW50ZXIoKS5zZXRQZW4o
UXQ6Ok5vUGVuKTsKLSAgICBxdENvbnRleHQtPnBhaW50ZXIoKS5zZXRCcnVzaChRdDo6Tm9CcnVz
aCk7Ci0gICAgUUltYWdlKiBwYXR0ZXJuaW1hZ2UgPSBuZXcgUUltYWdlKHRpbGUoKS0+Yml0cygp
LCB0aWxlKCktPndpZHRoKCksIHRpbGUoKS0+aGVpZ2h0KCksIFFJbWFnZTo6Rm9ybWF0X0FSR0Iz
Ml9QcmVtdWx0aXBsaWVkKTsKLSAgICBwYXR0ZXJuaW1hZ2UtPnNldEFscGhhQnVmZmVyKHRydWUp
OwotICAgIGlmICh0eXBlICYgQVBQTFlfVE9fRklMTCkgewotICAgICAgICAvL1FDb2xvciBjID0g
Y29sb3IoKTsKLSAgICAgICAgLy9jLnNldEFscGhhRihzdHlsZS0+ZmlsbFBhaW50ZXIoKS0+b3Bh
Y2l0eSgpICogc3R5bGUtPm9wYWNpdHkoKSAqIG9wYWNpdHkoKSk7Ci0gICAgICAgIEtSZW5kZXJp
bmdGaWxsUGFpbnRlciBmaWxsUGFpbnRlciA9IEtTVkdQYWludGVyRmFjdG9yeTo6ZmlsbFBhaW50
ZXIocmVuZGVyU3R5bGUsIG9iamVjdCk7Ci0gICAgICAgIFFCcnVzaCBicnVzaChRUGl4bWFwOjpm
cm9tSW1hZ2UoKnBhdHRlcm5pbWFnZSkpOwotICAgICAgICBfcGF0aC0+c2V0RmlsbFJ1bGUoZmls
bFBhaW50ZXIuZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQgPyBRdDo6T2RkRXZlbkZpbGwgOiBR
dDo6V2luZGluZ0ZpbGwpOwotICAgICAgICBxdENvbnRleHQtPnBhaW50ZXIoKS5zZXRCcnVzaChi
cnVzaCk7Ci0gICAgfQotICAgIGlmICh0eXBlICYgQVBQTFlfVE9fU1RST0tFKSB7Ci0gICAgICAg
IC8vUUNvbG9yIGMgPSBjb2xvcigpOwotICAgICAgICAvL2Muc2V0QWxwaGFGKHN0eWxlLT5zdHJv
a2VQYWludGVyKCktPm9wYWNpdHkoKSAqIHN0eWxlLT5vcGFjaXR5KCkgKiBvcGFjaXR5KCkpOwot
ICAgICAgICBLUmVuZGVyaW5nU3Ryb2tlUGFpbnRlciBzdHJva2VQYWludGVyID0gS1NWR1BhaW50
ZXJGYWN0b3J5OjpzdHJva2VQYWludGVyKHJlbmRlclN0eWxlLCBvYmplY3QpOwotCi0gICAgICAg
IFFQZW4gcGVuOwotICAgICAgICBRQnJ1c2ggYnJ1c2goUVBpeG1hcDo6ZnJvbUltYWdlKCpwYXR0
ZXJuaW1hZ2UpKTsKLQotICAgICAgICBzZXRQZW5Qcm9wZXJ0aWVzKHN0cm9rZVBhaW50ZXIsIHBl
bik7Ci0gICAgICAgIHBlbi5zZXRCcnVzaChicnVzaCk7Ci0gICAgICAgIHF0Q29udGV4dC0+cGFp
bnRlcigpLnNldFBlbihwZW4pOwotICAgIH0KLQotICAgIHF0Q29udGV4dC0+cGFpbnRlcigpLmRy
YXdQYXRoKCpfcGF0aCk7Ci0KLSAgICBkZWxldGUgcGF0dGVybmltYWdlOwotKi8KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi12b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdDo6dGVh
cmRvd24oS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBLQ1Bh
aW50VGFyZ2V0VHlwZSkgY29uc3QKLXsKLX0KLQotdm9pZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQ
YXR0ZXJuUXQ6OmRyYXcoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJl
bmRlclBhdGgqIHBhdGgsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Ci17Ci0gICAgaWYg
KCFzZXR1cChjb250ZXh0LCBwYXRoLCB0eXBlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVu
ZGVyUGF0aChjb250ZXh0LCBwYXRoLCB0eXBlKTsKLSAgICB0ZWFyZG93bihjb250ZXh0LCBwYXRo
LCB0eXBlKTsKLX0KLQotfQotCi0vLyB2aW06dHM9NDpub2V0Ci0KSW5kZXg6IFdlYkNvcmUva2Nh
bnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVyblF0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0
ZXJuUXQuaAkocmV2aXNpb24gMTc4NjIpCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tS
ZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUwICsw
LDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IE5pa29sYXMgWmlt
bWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwg
MjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIEtERSBwcm9qZWN0Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAg
IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuIElmIG5v
dCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotKi8KLQotI2lmbmRlZiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXRfSAotI2Rl
ZmluZSBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXRfSAotCi0jaW5jbHVkZSAiS1JlbmRl
cmluZ1BhaW50U2VydmVyUXQuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0
ZXJuLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgS1JlbmRlcmluZ1BhaW50U2Vy
dmVyUGF0dGVyblF0IDogcHVibGljIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgS1JlbmRlcmluZ1BhaW50
U2VydmVyUXQKLXsKLXB1YmxpYzoKLSAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXQo
KTsKLSAgICB2aXJ0dWFsIH5LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXQoKTsKLQotICAg
IHZpcnR1YWwgdm9pZCBkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVy
UGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc2V0dXAo
S1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBLQ1BhaW50VGFy
Z2V0VHlwZSkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHRlYXJkb3duKEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0
OwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHJlbmRlclBhdGgoS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJQYXRoKiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0
OwotfTsKLQotfQotCi0jZW5kaWYKLQotLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9r
Y2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdC5jcHAJ
KHJldmlzaW9uIDE3ODYyKQorKysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzcgKzAsMCBAQAotLyoKLSAg
ICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxk
Zm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+Ci0KLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2pl
Y3QKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0
aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gSWYgbm90LCB3cml0ZSB0bwot
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlIDxRUGVuPgotI2luY2x1ZGUgPFFWZWN0b3I+
Ci0KLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdT
dHlsZS5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlclF0LmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotS1JlbmRlcmluZ1BhaW50U2VydmVyUXQ6OktSZW5kZXJpbmdQYWludFNl
cnZlclF0KCkKLXsKLX0KLQotS1JlbmRlcmluZ1BhaW50U2VydmVyUXQ6On5LUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJRdCgpCi17Ci19Ci0KLXZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyUXQ6OnNldFBl
blByb3BlcnRpZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBpdGVtLCBjb25zdCBSZW5kZXJTdHlsZSog
c3R5bGUsIFFQZW4mIHBlbikgY29uc3QKLXsKLSAgICBwZW4uc2V0V2lkdGhGKEtTVkdQYWludGVy
RmFjdG9yeTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgoaXRlbSwgc3R5bGUtPnN2Z1N0eWxlKCktPnN0
cm9rZVdpZHRoKCksIDEuMCkpOwotCi0gICAgaWYgKHN0eWxlLT5zdmdTdHlsZSgpLT5jYXBTdHls
ZSgpID09IEJ1dHRDYXApCi0gICAgICAgIHBlbi5zZXRDYXBTdHlsZShRdDo6RmxhdENhcCk7Ci0g
ICAgZWxzZSBpZiAoc3R5bGUtPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgPT0gUm91bmRDYXApCi0g
ICAgICAgIHBlbi5zZXRDYXBTdHlsZShRdDo6Um91bmRDYXApOwotCi0gICAgaWYgKHN0eWxlLT5z
dmdTdHlsZSgpLT5qb2luU3R5bGUoKSA9PSBNaXRlckpvaW4pIHsKLSAgICAgICAgcGVuLnNldEpv
aW5TdHlsZShRdDo6TWl0ZXJKb2luKTsKLSAgICAgICAgcGVuLnNldE1pdGVyTGltaXQoKHFyZWFs
KSBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlTWl0ZXJMaW1pdCgpKTsKLSAgICB9IGVsc2UgaWYo
c3R5bGUtPnN2Z1N0eWxlKCktPmpvaW5TdHlsZSgpID09IFJvdW5kSm9pbikKLSAgICAgICAgcGVu
LnNldEpvaW5TdHlsZShRdDo6Um91bmRKb2luKTsKLQotICAgIGNvbnN0IEtDRGFzaEFycmF5JiBk
YXNoZXMgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OmRhc2hBcnJheUZyb21SZW5kZXJpbmdTdHlsZShz
dHlsZSk7Ci0gICAgZG91YmxlIGRhc2hPZmZzZXQgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OmNzc1By
aW1pdGl2ZVRvTGVuZ3RoKGl0ZW0sIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VEYXNoT2Zmc2V0
KCksIDAuMCk7Ci0KLSAgICB1bnNpZ25lZCBpbnQgZGFzaExlbmd0aCA9ICFkYXNoZXMuaXNFbXB0
eSgpID8gZGFzaGVzLnNpemUoKSA6IDA7Ci0gICAgaWYoZGFzaExlbmd0aCkgewotICAgICAgICBR
VmVjdG9yPHFyZWFsPiBwYXR0ZXJuOwotICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSAoZGFz
aExlbmd0aCAlIDIpID09IDAgPyBkYXNoTGVuZ3RoIDogZGFzaExlbmd0aCAqIDI7Ci0KLSAgICAg
ICAgZm9yKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICBw
YXR0ZXJuLmFwcGVuZChkYXNoZXNbaSAlIGRhc2hMZW5ndGhdIC8gKGZsb2F0KXBlbi53aWR0aEYo
KSk7Ci0KLSAgICAgICAgcGVuLnNldERhc2hQYXR0ZXJuKHBhdHRlcm4pOwotICAgIAotICAgICAg
ICBRX1VOVVNFRChkYXNoT2Zmc2V0KTsKLSAgICAgICAgLy8gVE9ETzogZGFzaC1vZmZzZXQsIGRv
ZXMvd2lsbCBxdDQgQVBJIGFsbG93IGl0PyAoUm9iKQotICAgIH0KLX0KLQotfQotCi0vLyB2aW06
dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWlu
dFNlcnZlclF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9LUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJRdC5oCShyZXZpc2lvbiAxNzg2MikKKysrIFdlYkNvcmUva2NhbnZh
cy9kZXZpY2UvcXQvS1JlbmRlcmluZ1BhaW50U2VydmVyUXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1MCArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOaWtv
bGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQs
IDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLQotICAgIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBLREUgcHJvamVjdAotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSovCi0KLSNpZm5kZWYgS1JlbmRlcmluZ1BhaW50U2VydmVyUXRfSAotI2Rl
ZmluZSBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdF9ICi0KLSNpbmNsdWRlICJLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXIuaCIKLQotY2xhc3MgUVBlbjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBSZW5kZXJTdHlsZTsKLWNsYXNzIFJlbmRlck9iamVjdDsKLQotLy8gVGhpcyBjbGFzcyBpcyBk
ZXNpZ25lZCBhcyBhbiBleHRlbnNpb24gdG8KLS8vIEtSZW5kZXJpbmdQYWludFNlcnZlciwgaXQg
d29uJ3QgaW5oZXJpdCBmcm9tIGl0LgotY2xhc3MgS1JlbmRlcmluZ1BhaW50U2VydmVyUXQKLXsK
LXB1YmxpYzoKLSAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdCgpOwotICAgIH5LUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJRdCgpOwotCi0gICAgdm9pZCBzZXRQZW5Qcm9wZXJ0aWVzKGNvbnN0IFJlbmRl
ck9iamVjdCosIGNvbnN0IFJlbmRlclN0eWxlKiwgUVBlbiYpIGNvbnN0OwotfTsKLQotfQotCi0j
ZW5kaWYKLQotLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9x
dC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2tjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXQuY3BwCShyZXZp
c2lvbiAxNzg2MikKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ1BhaW50
U2VydmVyU29saWRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA3ICswLDAgQEAKLS8qCi0g
ICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8d2ls
ZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVp
cyA8YnVpc0BrZGUub3JnPgotCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9q
ZWN0Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGgg
dGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuIElmIG5vdCwgd3JpdGUgdG8K
LSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSA8UVBlbj4KLSNpbmNsdWRlIDxRQnJ1c2g+
Ci0jaW5jbHVkZSA8UVBhaW50ZXI+Ci0KLSNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlUXQuaCIKLSNpbmNs
dWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJTb2xpZFF0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotS1JlbmRlcmluZ1BhaW50
U2VydmVyU29saWRRdDo6S1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdCgpCi0gICAgOiBLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZCgpCi0gICAgLCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdCgp
Ci17Ci19Ci0KLUtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXQ6On5LUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJTb2xpZFF0KCkKLXsKLX0KLQotLy8gJ1NvbGlkJyBpbnRlcmZhY2UKLXZvaWQgS1JlbmRl
cmluZ1BhaW50U2VydmVyU29saWRRdDo6ZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29u
dGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcGF0aCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29u
c3QKLXsKLSAgICBpZiAoIXNldHVwKGNvbnRleHQsIHBhdGgsIHR5cGUpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICByZW5kZXJQYXRoKGNvbnRleHQsIHBhdGgsIHR5cGUpOwotICAgIHRlYXJkb3du
KGNvbnRleHQsIHBhdGgsIHR5cGUpOwotfQotCi1ib29sIEtSZW5kZXJpbmdQYWludFNlcnZlclNv
bGlkUXQ6OnNldHVwKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5k
ZXJPYmplY3QqIG9iamVjdCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKLXsKLSAgICBL
UmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0KiBxdENvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dFF0Kj4oY29udGV4dCk7Ci0KLSAgICBSZW5kZXJTdHlsZSogcmVuZGVy
U3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7Ci0gICAgLy8gVE9ETz8gcXRDb250ZXh0LT5wYWludGVy
KCkuc2V0T3BhY2l0eShyZW5kZXJTdHlsZS0+b3BhY2l0eSgpKTsKLQotICAgIFFDb2xvciBjID0g
Y29sb3IoKTsKLQotICAgIGlmICgodHlwZSAmIEFQUExZX1RPX0ZJTEwpICYmIHJlbmRlclN0eWxl
LT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkpIHsKLSAgICAgICAgYy5zZXRBbHBoYUYocmVuZGVyU3R5
bGUtPnN2Z1N0eWxlKCktPmZpbGxPcGFjaXR5KCkpOwotCi0gICAgICAgIFFCcnVzaCBicnVzaChj
KTsKLSAgICAgICAgcXRDb250ZXh0LT5wYWludGVyKCkuc2V0QnJ1c2goYnJ1c2gpOwotICAgICAg
ICBxdENvbnRleHQtPnNldEZpbGxSdWxlKHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5maWxsUnVs
ZSgpKTsKLQotICAgICAgICAvKiBpZihpc1BhaW50aW5nVGV4dCgpKSAuLi4gKi8KLSAgICB9Ci0K
LSAgICBpZigodHlwZSAmIEFQUExZX1RPX1NUUk9LRSkgJiYgcmVuZGVyU3R5bGUtPnN2Z1N0eWxl
KCktPmhhc1N0cm9rZSgpKSB7Ci0gICAgICAgIGMuc2V0QWxwaGFGKHJlbmRlclN0eWxlLT5zdmdT
dHlsZSgpLT5zdHJva2VPcGFjaXR5KCkpOwotCi0gICAgICAgIFFQZW4gcGVuKGMpOwotICAgICAg
ICBzZXRQZW5Qcm9wZXJ0aWVzKG9iamVjdCwgcmVuZGVyU3R5bGUsIHBlbik7Ci0gICAgICAgIHF0
Q29udGV4dC0+cGFpbnRlcigpLnNldFBlbihwZW4pOwotCi0gICAgICAgIC8qIGlmKGlzUGFpbnRp
bmdUZXh0KCkpIC4uLiAqLwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEtS
ZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXQ6OnRlYXJkb3duKEtSZW5kZXJpbmdEZXZpY2VDb250
ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0Ci17Ci19
Ci0KLXZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdDo6cmVuZGVyUGF0aChLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcGF0aCwgS0NQYWlu
dFRhcmdldFR5cGUgdHlwZSkgY29uc3QKLXsKLSAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUg
PSBwYXRoLT5zdHlsZSgpOwotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQqIHF0Q29udGV4
dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQqPihjb250ZXh0KTsKLQot
ICAgIGlmICgodHlwZSAmIEFQUExZX1RPX0ZJTEwpICYmIHJlbmRlclN0eWxlLT5zdmdTdHlsZSgp
LT5oYXNGaWxsKCkpCi0gICAgICAgIHF0Q29udGV4dC0+ZmlsbFBhdGgoKTsKLQotICAgIGlmICgo
dHlwZSAmIEFQUExZX1RPX1NUUk9LRSkgJiYgcmVuZGVyU3R5bGUtPnN2Z1N0eWxlKCktPmhhc1N0
cm9rZSgpKQotICAgICAgICBxdENvbnRleHQtPnN0cm9rZVBhdGgoKTsKLX0KLQotfQotCi0vLyB2
aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdQ
YWludFNlcnZlclNvbGlkUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNl
L3F0L0tSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXQuaAkocmV2aXNpb24gMTc4NjIpCisrKyBX
ZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1MCArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAg
ICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KLQot
ICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAotCi0gICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpZm5kZWYgS1JlbmRlcmluZ1Bh
aW50U2VydmVyU29saWRRdF9ICi0jZGVmaW5lIEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXRf
SAotCi0jaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyUXQuaCIKLSNpbmNsdWRlICJLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1j
bGFzcyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF0IDogcHVibGljIEtSZW5kZXJpbmdQYWlu
dFNlcnZlclNvbGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxp
YyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdAotewotcHVibGljOgotICAgIEtSZW5kZXJpbmdQYWlu
dFNlcnZlclNvbGlkUXQoKTsKLSAgICB2aXJ0dWFsIH5LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xp
ZFF0KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCos
IGNvbnN0IFJlbmRlclBhdGgqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIHNldHVwKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0
KiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB0ZWFyZG93bihL
UmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIEtDUGFpbnRUYXJn
ZXRUeXBlKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCByZW5kZXJQYXRo
KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJn
ZXRUeXBlKSBjb25zdDsKLX07Ci0KLX0KLQotI2VuZGlmCi0KLS8vIHZpbTp0cz00Om5vZXQKSW5k
ZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNJdGVtUXVhcnR6LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0Rl
dmljZVF1YXJ0ei5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdWFy
dHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5jcHAJKHJldmlzaW9uIDE3ODYyKQorKysgV2ViQ29y
ZS9rY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDcgKzQ3LDEwIEBACiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2VJbWFnZS5o
IgogI2luY2x1ZGUgIlNWR1Jlc291cmNlTWFya2VyLmgiCiAjaW5jbHVkZSAiU1ZHUmVzb3VyY2VN
YXNrZXIuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHouaCIKKyNpbmNs
dWRlICJTVkdQYWludFNlcnZlclNvbGlkLmgiCisjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJMaW5l
YXJHcmFkaWVudC5oIgorI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQuaCIK
KyNpbmNsdWRlICJTVkdQYWludFNlcnZlclBhdHRlcm4uaCIKICNpbmNsdWRlICJMb2dnaW5nLmgi
CiAjaW5jbHVkZSAiUXVhcnR6U3VwcG9ydC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAg
LTE0OCwyMSArMTUxLDIxIEBAIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBLUmVuZGVyaW5nRGV2
aWMKICNwcmFnbWEgbWFyayAtCiAjcHJhZ21hIG1hcmsgUmVzb3VyY2UgQ3JlYXRpb24KIAotUGFz
c1JlZlB0cjxLUmVuZGVyaW5nUGFpbnRTZXJ2ZXI+IEtSZW5kZXJpbmdEZXZpY2VRdWFydHo6OmNy
ZWF0ZVBhaW50U2VydmVyKGNvbnN0IEtDUGFpbnRTZXJ2ZXJUeXBlJiB0eXBlKSBjb25zdAorUGFz
c1JlZlB0cjxTVkdQYWludFNlcnZlcj4gS1JlbmRlcmluZ0RldmljZVF1YXJ0ejo6Y3JlYXRlUGFp
bnRTZXJ2ZXIoY29uc3QgU1ZHUGFpbnRTZXJ2ZXJUeXBlJiB0eXBlKSBjb25zdAogewotICAgIEtS
ZW5kZXJpbmdQYWludFNlcnZlciAqbmV3U2VydmVyID0gTlVMTDsKKyAgICBTVkdQYWludFNlcnZl
ciogbmV3U2VydmVyID0gTlVMTDsKICAgICBzd2l0Y2godHlwZSkgewogICAgIGNhc2UgUFNfU09M
SUQ6Ci0gICAgICAgIG5ld1NlcnZlciA9IG5ldyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF1
YXJ0eigpOworICAgICAgICBuZXdTZXJ2ZXIgPSBuZXcgU1ZHUGFpbnRTZXJ2ZXJTb2xpZCgpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIFBTX1BBVFRFUk46Ci0gICAgICAgIG5ld1NlcnZlciA9
IG5ldyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXVhcnR6KCk7CisgICAgICAgIG5ld1Nl
cnZlciA9IG5ldyBTVkdQYWludFNlcnZlclBhdHRlcm4oKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBQU19MSU5FQVJfR1JBRElFTlQ6Ci0gICAgICAgIG5ld1NlcnZlciA9IG5ldyBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudFF1YXJ0eigpOworICAgICAgICBuZXdTZXJ2ZXIg
PSBuZXcgU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudCgpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIFBTX1JBRElBTF9HUkFESUVOVDoKLSAgICAgICAgbmV3U2VydmVyID0gbmV3IEtSZW5k
ZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50UXVhcnR6KCk7CisgICAgICAgIG5ld1NlcnZl
ciA9IG5ldyBTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50KCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICByZXR1cm4gbmV3U2VydmVyOwpJbmRleDogV2ViQ29yZS9rY2FudmFzL2Rldmlj
ZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
a2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHouaAkocmV2aXNpb24g
MTc4NjIpCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNl
UXVhcnR6LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGljOgogCiAgICAg
Ly8gUmVzb3VyY2UgY3JlYXRpb24KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U1ZHUmVzb3VyY2U+
IGNyZWF0ZVJlc291cmNlKGNvbnN0IFNWR1Jlc291cmNlVHlwZSYpIGNvbnN0OwotICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxLUmVuZGVyaW5nUGFpbnRTZXJ2ZXI+IGNyZWF0ZVBhaW50U2VydmVyKGNv
bnN0IEtDUGFpbnRTZXJ2ZXJUeXBlJikgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNW
R1BhaW50U2VydmVyPiBjcmVhdGVQYWludFNlcnZlcihjb25zdCBTVkdQYWludFNlcnZlclR5cGUm
KSBjb25zdDsKICAgICB2aXJ0dWFsIFNWR0ZpbHRlckVmZmVjdCAqY3JlYXRlRmlsdGVyRWZmZWN0
KGNvbnN0IFNWR0ZpbHRlckVmZmVjdFR5cGUmKSBjb25zdDsKICAgICAKICAgICAvLyBmaWx0ZXJz
IChtb3N0bHkgZGVidWdnaW5nKQpJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdWFydHov
S1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHouY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50
UXVhcnR6LmNwcAkocmV2aXNpb24gMTc4NjIpCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F1
YXJ0ei9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0ei5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMzIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgICAgICAgICAgICAgIDIwMDYg
QWxleGFuZGVyIEtlbGxldHQgPGx5cGFub3ZAa2RlLm9yZz4KLSAqICAgICAgICAgICAgICAgMjAw
NiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2lmZGVmIFNWR19TVVBQT1JUCi0jaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyUXVh
cnR6LmgiCi0jaW5jbHVkZSAiU1ZHUmVzb3VyY2VJbWFnZS5oIgotI2luY2x1ZGUgIktSZW5kZXJp
bmdEZXZpY2VRdWFydHouaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaCIKLSNp
bmNsdWRlICJRdWFydHpTdXBwb3J0LmgiCi0jaW5jbHVkZSAiUmVuZGVyUGF0aC5oIgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLXN0YXRp
YyB2b2lkIGNnR3JhZGllbnRDYWxsYmFjayh2b2lkKiBpbmZvLCBjb25zdCBDR0Zsb2F0KiBpblZh
bHVlcywgQ0dGbG9hdCogb3V0Q29sb3IpCi17Ci0gICAgY29uc3QgS1JlbmRlcmluZ1BhaW50U2Vy
dmVyR3JhZGllbnRRdWFydHoqIHNlcnZlciA9IChjb25zdCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJH
cmFkaWVudFF1YXJ0eiopaW5mbzsKLSAgICBRdWFydHpHcmFkaWVudFN0b3AgKnN0b3BzID0gc2Vy
dmVyLT5tX3N0b3BzQ2FjaGU7Ci0gICAgaW50IHN0b3BzQ291bnQgPSBzZXJ2ZXItPm1fc3RvcHND
b3VudDsKLSAgICAKLSAgICBDR0Zsb2F0IGluVmFsdWUgPSBpblZhbHVlc1swXTsKLSAgICAKLSAg
ICBpZiAoIXN0b3BzQ291bnQpIHsKLSAgICAgICAgb3V0Q29sb3JbMF0gPSAwOwotICAgICAgICBv
dXRDb2xvclsxXSA9IDA7Ci0gICAgICAgIG91dENvbG9yWzJdID0gMDsKLSAgICAgICAgb3V0Q29s
b3JbM10gPSAxOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChzdG9wc0NvdW50ID09
IDEpIHsKLSAgICAgICAgbWVtY3B5KG91dENvbG9yLCBzdG9wc1swXS5jb2xvckFycmF5LCA0ICog
c2l6ZW9mKENHRmxvYXQpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAo
IShpblZhbHVlID4gc3RvcHNbMF0ub2Zmc2V0KSkKLSAgICAgICAgbWVtY3B5KG91dENvbG9yLCBz
dG9wc1swXS5jb2xvckFycmF5LCA0ICogc2l6ZW9mKENHRmxvYXQpKTsKLSAgICBlbHNlIGlmICgh
KGluVmFsdWUgPCBzdG9wc1tzdG9wc0NvdW50LTFdLm9mZnNldCkpCi0gICAgICAgIG1lbWNweShv
dXRDb2xvciwgc3RvcHNbc3RvcHNDb3VudC0xXS5jb2xvckFycmF5LCA0ICogc2l6ZW9mKENHRmxv
YXQpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaW50IG5leHRTdG9wSW5kZXggPSAwOwotICAgICAg
ICB3aGlsZSAoKG5leHRTdG9wSW5kZXggPCBzdG9wc0NvdW50KSAmJiAoc3RvcHNbbmV4dFN0b3BJ
bmRleF0ub2Zmc2V0IDwgaW5WYWx1ZSkpCi0gICAgICAgICAgICBuZXh0U3RvcEluZGV4Kys7Ci0g
ICAgICAgIAotICAgICAgICAvL2Zsb2F0IG5leHRPZmZzZXQgPSBzdG9wc1tuZXh0U3RvcEluZGV4
XS5vZmZzZXQ7Ci0gICAgICAgIENHRmxvYXQgKm5leHRDb2xvckFycmF5ID0gc3RvcHNbbmV4dFN0
b3BJbmRleF0uY29sb3JBcnJheTsKLSAgICAgICAgQ0dGbG9hdCAqcHJldmlvdXNDb2xvckFycmF5
ID0gc3RvcHNbbmV4dFN0b3BJbmRleC0xXS5jb2xvckFycmF5OwotICAgICAgICAvL2Zsb2F0IHRv
dGFsRGVsdGEgPSBuZXh0T2Zmc2V0IC0gcHJldmlvdXNPZmZzZXQ7Ci0gICAgICAgIENHRmxvYXQg
ZGlmZkZyb21QcmV2aW91cyA9IGluVmFsdWUgLSBzdG9wc1tuZXh0U3RvcEluZGV4LTFdLm9mZnNl
dDsKLSAgICAgICAgLy9mbG9hdCBwZXJjZW50ID0gZGlmZkZyb21QcmV2aW91cyAvIHRvdGFsRGVs
dGE7Ci0gICAgICAgIENHRmxvYXQgcGVyY2VudCA9IGRpZmZGcm9tUHJldmlvdXMgKiBzdG9wc1tu
ZXh0U3RvcEluZGV4XS5wcmV2aW91c0RlbHRhSW52ZXJzZTsKLSAgICAgICAgCi0gICAgICAgIG91
dENvbG9yWzBdID0gKCgxLjAgLSBwZXJjZW50KSAqIHByZXZpb3VzQ29sb3JBcnJheVswXSArIHBl
cmNlbnQgKiBuZXh0Q29sb3JBcnJheVswXSk7Ci0gICAgICAgIG91dENvbG9yWzFdID0gKCgxLjAg
LSBwZXJjZW50KSAqIHByZXZpb3VzQ29sb3JBcnJheVsxXSArIHBlcmNlbnQgKiBuZXh0Q29sb3JB
cnJheVsxXSk7Ci0gICAgICAgIG91dENvbG9yWzJdID0gKCgxLjAgLSBwZXJjZW50KSAqIHByZXZp
b3VzQ29sb3JBcnJheVsyXSArIHBlcmNlbnQgKiBuZXh0Q29sb3JBcnJheVsyXSk7Ci0gICAgICAg
IG91dENvbG9yWzNdID0gKCgxLjAgLSBwZXJjZW50KSAqIHByZXZpb3VzQ29sb3JBcnJheVszXSAr
IHBlcmNlbnQgKiBuZXh0Q29sb3JBcnJheVszXSk7Ci0gICAgfQotICAgIC8vIEZJWE1FOiBoYXZl
IHRvIGhhbmRsZSB0aGUgc3ByZWFkTWV0aG9kKClzIGhlcmUgU1BSRUFETUVUSE9EX1JFUEVBVCwg
ZXRjLgotfQotCi1zdGF0aWMgQ0dTaGFkaW5nUmVmIENHU2hhZGluZ1JlZkZvckxpbmVhckdyYWRp
ZW50KGNvbnN0IEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50UXVhcnR6KiBzZXJ2
ZXIpCi17Ci0gICAgQ0dQb2ludCBzdGFydCA9IENHUG9pbnQoc2VydmVyLT5ncmFkaWVudFN0YXJ0
KCkpOwotICAgIENHUG9pbnQgZW5kID0gQ0dQb2ludChzZXJ2ZXItPmdyYWRpZW50RW5kKCkpOwot
ICAgIAotICAgIENHRnVuY3Rpb25DYWxsYmFja3MgY2FsbGJhY2tzID0gezAsIGNnR3JhZGllbnRD
YWxsYmFjaywgTlVMTH07Ci0gICAgQ0dGbG9hdCBkb21haW5MaW1pdHNbMl0gPSB7MCwgMX07Ci0g
ICAgQ0dGbG9hdCByYW5nZUxpbWl0c1s4XSA9IHswLCAxLCAwLCAxLCAwLCAxLCAwLCAxfTsKLSAg
ICBjb25zdCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0eiogY2FzdFNlcnZlciA9
IHN0YXRpY19jYXN0PGNvbnN0IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6Kj4o
c2VydmVyKTsKLSAgICBDR0Z1bmN0aW9uUmVmIHNoYWRpbmdGdW5jdGlvbiA9IENHRnVuY3Rpb25D
cmVhdGUoKHZvaWQgKiljYXN0U2VydmVyLCAxLCBkb21haW5MaW1pdHMsIDQsIHJhbmdlTGltaXRz
LCAmY2FsbGJhY2tzKTsKLSAgICAKLSAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IENH
Q29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOwotICAgIENHU2hhZGluZ1JlZiBzaGFkaW5nID0g
Q0dTaGFkaW5nQ3JlYXRlQXhpYWwoY29sb3JTcGFjZSwgc3RhcnQsIGVuZCwgc2hhZGluZ0Z1bmN0
aW9uLCB0cnVlLCB0cnVlKTsKLSAgICBDR0NvbG9yU3BhY2VSZWxlYXNlKGNvbG9yU3BhY2UpOwot
ICAgIENHRnVuY3Rpb25SZWxlYXNlKHNoYWRpbmdGdW5jdGlvbik7Ci0gICAgcmV0dXJuIHNoYWRp
bmc7Ci19Ci0KLXN0YXRpYyBDR1NoYWRpbmdSZWYgQ0dTaGFkaW5nUmVmRm9yUmFkaWFsR3JhZGll
bnQoY29uc3QgS1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRRdWFydHoqIHNlcnZl
cikKLXsKLSAgICBDR1BvaW50IGNlbnRlciA9IENHUG9pbnQoc2VydmVyLT5ncmFkaWVudENlbnRl
cigpKTsKLSAgICBDR1BvaW50IGZvY3VzID0gQ0dQb2ludChzZXJ2ZXItPmdyYWRpZW50Rm9jYWwo
KSk7Ci0gICAgZG91YmxlIHJhZGl1cyA9IHNlcnZlci0+Z3JhZGllbnRSYWRpdXMoKTsKLSAgICAK
LSAgICBkb3VibGUgZmR4ID0gZm9jdXMueCAtIGNlbnRlci54OwotICAgIGRvdWJsZSBmZHkgPSBm
b2N1cy55IC0gY2VudGVyLnk7Ci0gICAgCi0gICAgLy8gU3BlYzogSWYgKGZ4LCBmeSkgbGllcyBv
dXRzaWRlIHRoZSBjaXJjbGUgZGVmaW5lZCBieSAoY3gsIGN5KSBhbmQgciwgc2V0IChmeCwgZnkp
Ci0gICAgLy8gdG8gdGhlIHBvaW50IG9mIGludGVyc2VjdGlvbiBvZiB0aGUgbGluZSB0aHJvdWdo
IChmeCwgZnkpIGFuZCB0aGUgY2lyY2xlLgotICAgIGlmIChzcXJ0KGZkeCpmZHggKyBmZHkqZmR5
KSA+IHJhZGl1cykgewotICAgICAgICBkb3VibGUgYW5nbGUgPSBhdGFuMihmb2N1cy55LCBmb2N1
cy54KTsKLSAgICAgICAgZm9jdXMueCA9IGludChjb3MoYW5nbGUpICogcmFkaXVzKSAtIDE7Ci0g
ICAgICAgIGZvY3VzLnkgPSBpbnQoc2luKGFuZ2xlKSAqIHJhZGl1cykgLSAxOwotICAgIH0KLSAg
ICAKLSAgICBDR0Z1bmN0aW9uQ2FsbGJhY2tzIGNhbGxiYWNrcyA9IHswLCBjZ0dyYWRpZW50Q2Fs
bGJhY2ssIE5VTEx9OwotICAgIENHRmxvYXQgZG9tYWluTGltaXRzWzJdID0gezAsIDF9OwotICAg
IENHRmxvYXQgcmFuZ2VMaW1pdHNbOF0gPSB7MCwgMSwgMCwgMSwgMCwgMSwgMCwgMX07Ci0gICAg
Y29uc3QgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHoqIGNhc3RTZXJ2ZXIgPSBz
dGF0aWNfY2FzdDxjb25zdCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0eio+KHNl
cnZlcik7Ci0gICAgQ0dGdW5jdGlvblJlZiBzaGFkaW5nRnVuY3Rpb24gPSBDR0Z1bmN0aW9uQ3Jl
YXRlKCh2b2lkICopY2FzdFNlcnZlciwgMSwgZG9tYWluTGltaXRzLCA0LCByYW5nZUxpbWl0cywg
JmNhbGxiYWNrcyk7Ci0gICAgCi0gICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0Nv
bG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsKLSAgICBDR1NoYWRpbmdSZWYgc2hhZGluZyA9IENH
U2hhZGluZ0NyZWF0ZVJhZGlhbChjb2xvclNwYWNlLCBmb2N1cywgMCwgY2VudGVyLCByYWRpdXMs
IHNoYWRpbmdGdW5jdGlvbiwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgQ0dDb2xvclNwYWNlUmVsZWFzZShj
b2xvclNwYWNlKTsKLSAgICBDR0Z1bmN0aW9uUmVsZWFzZShzaGFkaW5nRnVuY3Rpb24pOwotICAg
IHJldHVybiBzaGFkaW5nOwotfQotCi1LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0
ejo6S1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHooKQotICAgIDogbV9zdG9wc0Nh
Y2hlKDApCi0gICAgLCBtX3N0b3BzQ291bnQoMCkKLSAgICAsIG1fc2hhZGluZ0NhY2hlKDApCi17
Ci19Ci0KLUtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6Ojp+S1JlbmRlcmluZ1Bh
aW50U2VydmVyR3JhZGllbnRRdWFydHooKQotewotICAgIGRlbGV0ZSBtX3N0b3BzQ2FjaGU7Ci0g
ICAgQ0dTaGFkaW5nUmVsZWFzZShtX3NoYWRpbmdDYWNoZSk7Ci19Ci0KLXZvaWQgS1JlbmRlcmlu
Z1BhaW50U2VydmVyR3JhZGllbnRRdWFydHo6OnVwZGF0ZVF1YXJ0ekdyYWRpZW50Q2FjaGUoY29u
c3QgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQgKnNlcnZlcikKLXsKLSAgICAvLyBjYWNo
ZSBvdXIgb3duIGNvcHkgb2YgdGhlIHN0b3BzIGZvciBmYXN0ZXIgYWNjZXNzLgotICAgIC8vIHRo
aXMgaXMgbGVnYWN5IGNvZGUsIHByb2JhYmx5IGNvdWxkIGJlIHJld29ya2VkLgotICAgIGlmICgh
bV9zdG9wc0NhY2hlKQotICAgICAgICB1cGRhdGVRdWFydHpHcmFkaWVudFN0b3BzQ2FjaGUoc2Vy
dmVyLT5ncmFkaWVudFN0b3BzKCkpOwotICAgIAotICAgIGlmIChtX3NoYWRpbmdDYWNoZSkKLSAg
ICAgICAgQ0dTaGFkaW5nUmVsZWFzZShtX3NoYWRpbmdDYWNoZSk7Ci0gICAgaWYgKHNlcnZlci0+
dHlwZSgpID09IFBTX1JBRElBTF9HUkFESUVOVCkgewotICAgICAgICBjb25zdCBLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudFF1YXJ0eiogcmFkaWFsID0gc3RhdGljX2Nhc3Q8Y29u
c3QgS1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRRdWFydHoqPihzZXJ2ZXIpOwot
ICAgICAgICBtX3NoYWRpbmdDYWNoZSA9IENHU2hhZGluZ1JlZkZvclJhZGlhbEdyYWRpZW50KHJh
ZGlhbCk7Ci0gICAgfSBlbHNlIGlmIChzZXJ2ZXItPnR5cGUoKSA9PSBQU19MSU5FQVJfR1JBRElF
TlQpIHsKLSAgICAgICAgY29uc3QgS1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRR
dWFydHoqIGxpbmVhciA9IHN0YXRpY19jYXN0PGNvbnN0IEtSZW5kZXJpbmdQYWludFNlcnZlckxp
bmVhckdyYWRpZW50UXVhcnR6Kj4oc2VydmVyKTsKLSAgICAgICAgbV9zaGFkaW5nQ2FjaGUgPSBD
R1NoYWRpbmdSZWZGb3JMaW5lYXJHcmFkaWVudChsaW5lYXIpOwotICAgIH0KLX0KLQotdm9pZCBL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0ejo6dXBkYXRlUXVhcnR6R3JhZGllbnRT
dG9wc0NhY2hlKGNvbnN0IFZlY3RvcjxLQ0dyYWRpZW50U3RvcD4mIHN0b3BzKQotewotICAgIGRl
bGV0ZSBtX3N0b3BzQ2FjaGU7Ci0KLSAgICBtX3N0b3BzQ291bnQgPSBzdG9wcy5zaXplKCk7Ci0g
ICAgbV9zdG9wc0NhY2hlID0gbmV3IFF1YXJ0ekdyYWRpZW50U3RvcFttX3N0b3BzQ291bnRdOwot
ICAgIAotICAgIENHRmxvYXQgcHJldmlvdXNPZmZzZXQgPSAwLjA7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHN0b3BzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIG1fc3RvcHNDYWNoZVtp
XS5vZmZzZXQgPSBzdG9wc1tpXS5maXJzdDsKLSAgICAgICAgbV9zdG9wc0NhY2hlW2ldLnByZXZp
b3VzRGVsdGFJbnZlcnNlID0gMS4wIC8gKHN0b3BzW2ldLmZpcnN0IC0gcHJldmlvdXNPZmZzZXQp
OwotICAgICAgICBwcmV2aW91c09mZnNldCA9IHN0b3BzW2ldLmZpcnN0OwotICAgICAgICBDR0Zs
b2F0ICpjYSA9IG1fc3RvcHNDYWNoZVtpXS5jb2xvckFycmF5OwotICAgICAgICBzdG9wc1tpXS5z
ZWNvbmQuZ2V0UkdCQShjYVswXSwgY2FbMV0sIGNhWzJdLCBjYVszXSk7Ci0gICAgfQotfQotCi12
b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6OjppbnZhbGlkYXRlQ2FjaGVz
KCkKLXsKLSAgICBkZWxldGUgbV9zdG9wc0NhY2hlOwotICAgIENHU2hhZGluZ1JlbGVhc2UobV9z
aGFkaW5nQ2FjaGUpOwotICAgIAotICAgIG1fc3RvcHNDYWNoZSA9IDA7Ci0gICAgbV9zaGFkaW5n
Q2FjaGUgPSAwOwotfQotCi12b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50
UXVhcnR6OjppbnZhbGlkYXRlKCkKLXsKLSAgICBpbnZhbGlkYXRlQ2FjaGVzKCk7Ci0gICAgS1Jl
bmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQ6OmludmFsaWRhdGUoKTsKLX0KLQotdm9p
ZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudFF1YXJ0ejo6aW52YWxpZGF0ZSgp
Ci17Ci0gICAgaW52YWxpZGF0ZUNhY2hlcygpOwotICAgIEtSZW5kZXJpbmdQYWludFNlcnZlclJh
ZGlhbEdyYWRpZW50OjppbnZhbGlkYXRlKCk7Ci19Ci0KLXZvaWQgS1JlbmRlcmluZ1BhaW50U2Vy
dmVyR3JhZGllbnRRdWFydHo6OmRyYXcoY29uc3QgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGll
bnQqIHNlcnZlciwgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQsIGNv
bnN0IFJlbmRlclBhdGgqIHBhdGgsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFzZXR1cChzZXJ2ZXIsIHJlbmRlcmluZ0NvbnRleHQsIHBhdGgsIHR5cGUpKQotICAg
ICAgICByZXR1cm47Ci0gICAgcmVuZGVyUGF0aChzZXJ2ZXIsIHJlbmRlcmluZ0NvbnRleHQsIHBh
dGgsIHR5cGUpOwotICAgIHRlYXJkb3duKHNlcnZlciwgcmVuZGVyaW5nQ29udGV4dCwgcGF0aCwg
dHlwZSk7Ci19Ci0KLWJvb2wgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHo6OnNl
dHVwKGNvbnN0IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50KiBzZXJ2ZXIsIEtSZW5kZXJp
bmdEZXZpY2VDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHJl
bmRlck9iamVjdCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKLXsKLSAgICBpZiAoc2Vy
dmVyLT5saXN0ZW5lcigpKSAvLyB0aGlzIHNlZW1zIGxpa2UgYmFkIGRlc2lnbiB0byBtZSwgc2hv
dWxkIGJlIGluIGEgY29tbW9uIGJhc2VjbGFzcy4gLS0gZWNzIDgvNi8wNQotICAgICAgICBzZXJ2
ZXItPmxpc3RlbmVyKCktPnJlc291cmNlTm90aWZpY2F0aW9uKCk7Ci0gICAgCi0gICAgLy8gRklY
TUU6IHRvdGFsIGNvbnN0IEhBQ0shCi0gICAgLy8gV2UgbmVlZCBhIGhvb2sgdG8gY2FsbCB0aGlz
IHdoZW4gdGhlIGdyYWRpZW50IGdldHMgdXBkYXRlZCwgYmVmb3JlIGRyYXduLgotICAgIGlmICgh
bV9zaGFkaW5nQ2FjaGUpCi0gICAgICAgIGNvbnN0X2Nhc3Q8S1JlbmRlcmluZ1BhaW50U2VydmVy
R3JhZGllbnRRdWFydHoqPih0aGlzKS0+dXBkYXRlUXVhcnR6R3JhZGllbnRDYWNoZShzZXJ2ZXIp
OwotICAgIAotICAgIEtSZW5kZXJpbmdEZXZpY2VRdWFydHoqIHF1YXJ0ekRldmljZSA9IHN0YXRp
Y19jYXN0PEtSZW5kZXJpbmdEZXZpY2VRdWFydHoqPihyZW5kZXJpbmdEZXZpY2UoKSk7Ci0gICAg
Q0dDb250ZXh0UmVmIGNvbnRleHQgPSBxdWFydHpEZXZpY2UtPmN1cnJlbnRDR0NvbnRleHQoKTsK
LSAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSByZW5kZXJPYmplY3QtPnN0eWxlKCk7Ci0g
ICAgQVNTRVJUKGNvbnRleHQgIT0gTlVMTCk7Ci0gICAgCi0gICAgQ0dDb250ZXh0U2F2ZUdTdGF0
ZShjb250ZXh0KTsKLSAgICBDR0NvbnRleHRTZXRBbHBoYShjb250ZXh0LCByZW5kZXJTdHlsZS0+
b3BhY2l0eSgpKTsKLSAgICAKLSAgICBpZiAoKHR5cGUgJiBBUFBMWV9UT19GSUxMKSAmJiByZW5k
ZXJTdHlsZS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKSB7Ci0gICAgICAgIENHQ29udGV4dFNhdmVH
U3RhdGUoY29udGV4dCk7Ci0gICAgICAgIGlmIChzZXJ2ZXItPmlzUGFpbnRpbmdUZXh0KCkpCi0g
ICAgICAgICAgICBDR0NvbnRleHRTZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dCwga0NHVGV4dENs
aXApOwotICAgIH0KLQotICAgIGlmICgodHlwZSAmIEFQUExZX1RPX1NUUk9LRSkgJiYgcmVuZGVy
U3R5bGUtPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgpKSB7Ci0gICAgICAgIENHQ29udGV4dFNhdmVH
U3RhdGUoY29udGV4dCk7Ci0gICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4
dCwgcmVuZGVyU3R5bGUsIHJlbmRlck9iamVjdCk7IC8vIEZJWE1FOiB0aGlzIHNlZW1zIGxpa2Ug
dGhlIHdyb25nIHBsYWNlIGZvciB0aGlzLgotICAgICAgICBpZiAoc2VydmVyLT5pc1BhaW50aW5n
VGV4dCgpKSB7Ci0gICAgICAgICAgICBtX21hc2tJbWFnZSA9IG5ldyBTVkdSZXNvdXJjZUltYWdl
KCk7Ci0gICAgICAgICAgICBpbnQgd2lkdGggID0gMjA0ODsKLSAgICAgICAgICAgIGludCBoZWln
aHQgPSAyMDQ4OyAvLyBGSVhNRT8/PwotICAgICAgICAgICAgSW50U2l6ZSBzaXplID0gSW50U2l6
ZSh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgICAgIG1fbWFza0ltYWdlLT5pbml0KHNpemUpOwot
ICAgICAgICAgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIG1hc2tJbWFnZUNvbnRleHQgPSBx
dWFydHpEZXZpY2UtPmNvbnRleHRGb3JJbWFnZShtX21hc2tJbWFnZS5nZXQoKSk7Ci0gICAgICAg
ICAgICBxdWFydHpEZXZpY2UtPnB1c2hDb250ZXh0KG1hc2tJbWFnZUNvbnRleHQpOwotICAgICAg
ICAgICAgQ0dDb250ZXh0UmVmIG1hc2tDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0Rl
dmljZUNvbnRleHRRdWFydHoqPihtYXNrSW1hZ2VDb250ZXh0KS0+Y2dDb250ZXh0KCk7Ci0gICAg
ICAgICAgICBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KHJlbmRlck9iamVjdCktPnN0eWxlKCkt
PnNldENvbG9yKENvbG9yKDI1NSwgMjU1LCAyNTUpKTsKLSAgICAgICAgICAgIENHQ29udGV4dFNl
dFRleHREcmF3aW5nTW9kZShtYXNrQ29udGV4dCwga0NHVGV4dFN0cm9rZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVy
R3JhZGllbnRRdWFydHo6OnJlbmRlclBhdGgoY29uc3QgS1JlbmRlcmluZ1BhaW50U2VydmVyR3Jh
ZGllbnQqIHNlcnZlciwgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQs
IGNvbnN0IFJlbmRlclBhdGgqIHBhdGgsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Ci17
ICAgIAotICAgIEtSZW5kZXJpbmdEZXZpY2VRdWFydHoqIHF1YXJ0ekRldmljZSA9IHN0YXRpY19j
YXN0PEtSZW5kZXJpbmdEZXZpY2VRdWFydHoqPihyZW5kZXJpbmdEZXZpY2UoKSk7Ci0gICAgQ0dD
b250ZXh0UmVmIGNvbnRleHQgPSBxdWFydHpEZXZpY2UtPmN1cnJlbnRDR0NvbnRleHQoKTsKLSAg
ICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBwYXRoLT5zdHlsZSgpOwotICAgIEFTU0VSVChj
b250ZXh0ICE9IE5VTEwpOwotICAgIAotICAgIENHUmVjdCBvYmplY3RCQm94OwotICAgIGlmIChz
ZXJ2ZXItPmJvdW5kaW5nQm94TW9kZSgpKQotICAgICAgICBvYmplY3RCQm94ID0gQ0dDb250ZXh0
R2V0UGF0aEJvdW5kaW5nQm94KGNvbnRleHQpOwotICAgIGlmICgodHlwZSAmIEFQUExZX1RPX0ZJ
TEwpICYmIHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkpCi0gICAgICAgIEtSZW5k
ZXJpbmdQYWludFNlcnZlclF1YXJ0ekhlbHBlcjo6Y2xpcFRvRmlsbFBhdGgoY29udGV4dCwgcGF0
aCk7Ci0gICAgaWYgKCh0eXBlICYgQVBQTFlfVE9fU1RST0tFKSAmJiByZW5kZXJTdHlsZS0+c3Zn
U3R5bGUoKS0+aGFzU3Ryb2tlKCkpCi0gICAgICAgIEtSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0
ekhlbHBlcjo6Y2xpcFRvU3Ryb2tlUGF0aChjb250ZXh0LCBwYXRoKTsKLSAgICAvLyBtYWtlIHRo
ZSBncmFkaWVudCBmaXQgaW4gdGhlIGJib3ggaWYgbmVjZXNzYXJ5LgotICAgIGlmIChzZXJ2ZXIt
PmJvdW5kaW5nQm94TW9kZSgpKSB7IC8vIG5vIHN1cHBvcnQgZm9yIGJvdW5kaW5nIGJveGVzIGFy
b3VuZCB0ZXh0IHlldCEKLSAgICAgICAgLy8gZ2V0IHRoZSBvYmplY3QgYmJveAotICAgICAgICBD
R1JlY3QgZ3JhZGllbnRCQm94ID0gQ0dSZWN0TWFrZSgwLDAsMTAwLDEwMCk7IC8vIEZJWE1FIC0g
dGhpcyBpcyBhcmJpdHJhcnkgbm8/Ci0gICAgICAgIC8vIGdlbmVyYXRlIGEgdHJhbnNmb3JtIHRv
IG1hcCBiZXR3ZWVuIHRoZSB0d28uCi0gICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIGdyYWRpZW50
SW50b09iamVjdEJCb3ggPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VNYXBCZXR3ZWVuUmVjdHMoZ3Jh
ZGllbnRCQm94LCBvYmplY3RCQm94KTsKLSAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRl
eHQsIGdyYWRpZW50SW50b09iamVjdEJCb3gpOwotICAgIH0KLSAgICAKLSAgICAvLyBhcHBseSB0
aGUgZ3JhZGllbnQncyBvd24gdHJhbnNmb3JtCi0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gZ3JhZGll
bnRUcmFuc2Zvcm0gPSBzZXJ2ZXItPmdyYWRpZW50VHJhbnNmb3JtKCk7Ci0gICAgQ0dDb250ZXh0
Q29uY2F0Q1RNKGNvbnRleHQsIGdyYWRpZW50VHJhbnNmb3JtKTsKLX0KLQotdm9pZCBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0ejo6dGVhcmRvd24oY29uc3QgS1JlbmRlcmluZ1Bh
aW50U2VydmVyR3JhZGllbnQgKnNlcnZlciwgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIHJlbmRl
cmluZ0NvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBLQ1BhaW50VGFy
Z2V0VHlwZSB0eXBlKSBjb25zdAoteyAKLSAgICBDR1NoYWRpbmdSZWYgc2hhZGluZyA9IG1fc2hh
ZGluZ0NhY2hlOwotICAgIEtSZW5kZXJpbmdEZXZpY2VRdWFydHoqIHF1YXJ0ekRldmljZSA9IHN0
YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VRdWFydHoqPihyZW5kZXJpbmdEZXZpY2UoKSk7Ci0g
ICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBxdWFydHpEZXZpY2UtPmN1cnJlbnRDR0NvbnRleHQo
KTsKLSAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSByZW5kZXJPYmplY3QtPnN0eWxlKCk7
Ci0gICAgQVNTRVJUKGNvbnRleHQgIT0gTlVMTCk7Ci0gICAgCi0gICAgaWYgKCh0eXBlICYgQVBQ
TFlfVE9fRklMTCkgJiYgcmVuZGVyU3R5bGUtPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKSkgewotICAg
ICAgICAvLyB3b3JrYXJvdW5kIGZvciBmaWxsaW5nIHRoZSBlbnRpcmUgc2NyZWVuIHdpdGggdGhl
IHNoYWRpbmcgaW4gdGhlIGNhc2UgdGhhdCBubyB0ZXh0IHdhcyBpbnRlcnNlY3RlZCB3aXRoIHRo
ZSBjbGlwCi0gICAgICAgIGlmICghc2VydmVyLT5pc1BhaW50aW5nVGV4dCgpIHx8IChyZW5kZXJP
YmplY3QtPndpZHRoKCkgPiAwICYmIHJlbmRlck9iamVjdC0+aGVpZ2h0KCkgPiAwKSkKLSAgICAg
ICAgICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRleHQsIHNoYWRpbmcpOwotICAgICAgICBD
R0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwotICAgIH0KLSAgICAKLSAgICBpZiAoKHR5
cGUgJiBBUFBMWV9UT19TVFJPS0UpICYmIHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJv
a2UoKSkgewotICAgICAgICBpZiAoc2VydmVyLT5pc1BhaW50aW5nVGV4dCgpKSB7Ci0gICAgICAg
ICAgICBpbnQgd2lkdGggID0gMjA0ODsKLSAgICAgICAgICAgIGludCBoZWlnaHQgPSAyMDQ4OyAv
LyBGSVhNRT8/PyBTRUUgQUJPVkUKLSAgICAgICAgICAgIGRlbGV0ZSBxdWFydHpEZXZpY2UtPnBv
cENvbnRleHQoKTsKLSAgICAgICAgICAgIGNvbnRleHQgPSBxdWFydHpEZXZpY2UtPmN1cnJlbnRD
R0NvbnRleHQoKTsKLSAgICAgICAgICAgIHZvaWQqIGltYWdlQnVmZmVyID0gZmFzdE1hbGxvYyh3
aWR0aCAqIGhlaWdodCk7Ci0gICAgICAgICAgICBDR0NvbG9yU3BhY2VSZWYgZ3JheUNvbG9yU3Bh
Y2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VHcmF5KCk7Ci0gICAgICAgICAgICBDR0NvbnRl
eHRSZWYgZ3JheXNjYWxlQ29udGV4dCA9IENHQml0bWFwQ29udGV4dENyZWF0ZShpbWFnZUJ1ZmZl
ciwgd2lkdGgsIGhlaWdodCwgOCwgd2lkdGgsIGdyYXlDb2xvclNwYWNlLCBrQ0dJbWFnZUFscGhh
Tm9uZSk7Ci0gICAgICAgICAgICBDR0NvbG9yU3BhY2VSZWxlYXNlKGdyYXlDb2xvclNwYWNlKTsK
LSAgICAgICAgICAgIENHQ29udGV4dERyYXdMYXllckF0UG9pbnQoZ3JheXNjYWxlQ29udGV4dCwg
Q0dQb2ludE1ha2UoMCwgMCksIG1fbWFza0ltYWdlLT5jZ0xheWVyKCkpOwotICAgICAgICAgICAg
Q0dJbWFnZVJlZiBncmF5c2NhbGVJbWFnZSA9IENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGdy
YXlzY2FsZUNvbnRleHQpOwotICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcFRvTWFzayhjb250ZXh0
LCBDR1JlY3RNYWtlKDAsIDAsIHdpZHRoLCBoZWlnaHQpLCBncmF5c2NhbGVJbWFnZSk7Ci0gICAg
ICAgICAgICBDR0NvbnRleHRSZWxlYXNlKGdyYXlzY2FsZUNvbnRleHQpOwotICAgICAgICAgICAg
Q0dJbWFnZVJlbGVhc2UoZ3JheXNjYWxlSW1hZ2UpOwotICAgICAgICB9Ci0gICAgICAgIENHQ29u
dGV4dERyYXdTaGFkaW5nKGNvbnRleHQsIHNoYWRpbmcpOwotICAgICAgICBDR0NvbnRleHRSZXN0
b3JlR1N0YXRlKGNvbnRleHQpOwotICAgIH0KLSAgICAKLSAgICBDR0NvbnRleHRSZXN0b3JlR1N0
YXRlKGNvbnRleHQpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBTVkdfU1VQUE9SVApJbmRleDogV2Vi
Q29yZS9rY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ1BhaW50U2VydmVyUXVhcnR6LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJRdWFydHouY3BwCShyZXZpc2lvbiAxNzg2MikKKysrIFdlYkNvcmUva2NhbnZh
cy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ei5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMjQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgICAgICAgICAg
ICAgIDIwMDYgQWxleGFuZGVyIEtlbGxldHQgPGx5cGFub3ZAa2RlLm9yZz4KLSAqICAgICAgICAg
ICAgICAgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2lmZGVmIFNWR19TVVBQT1JUCi0jaW5jbHVkZSAiU1ZHUmVzb3VyY2VJbWFn
ZS5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ei5oIgotI2luY2x1ZGUg
IlJlbmRlclBhdGguaCIKLSNpbmNsdWRlICJRdWFydHpTdXBwb3J0LmgiCi0jaW5jbHVkZSAiS1Jl
bmRlcmluZ0RldmljZVF1YXJ0ei5oIgotCi0jaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxl
LmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyLmgiCi0jaW5jbHVkZSAiS1JlbmRl
cmluZ0RldmljZS5oIgotCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLXZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyUXVhcnR6SGVscGVyOjpzdHJva2VQYXRo
KENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiByZW5kZXJQYXRoKQotewot
ICAgIENHQ29udGV4dFN0cm9rZVBhdGgoY29udGV4dCk7Ci19Ci0KLXZvaWQgS1JlbmRlcmluZ1Bh
aW50U2VydmVyUXVhcnR6SGVscGVyOjpjbGlwVG9TdHJva2VQYXRoKENHQ29udGV4dFJlZiBjb250
ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiByZW5kZXJQYXRoKQotewotICAgIENHQ29udGV4dFJlcGxh
Y2VQYXRoV2l0aFN0cm9rZWRQYXRoKGNvbnRleHQpOwotICAgIENHQ29udGV4dENsaXAoY29udGV4
dCk7Ci19ICAgIAotCi12b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ekhlbHBlcjo6Zmls
bFBhdGgoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHJlbmRlclBhdGgp
Ci17Ci0gICAgaWYgKHJlbmRlclBhdGgtPnN0eWxlKCktPnN2Z1N0eWxlKCktPmZpbGxSdWxlKCkg
PT0gUlVMRV9FVkVOT0REKQotICAgICAgICBDR0NvbnRleHRFT0ZpbGxQYXRoKGNvbnRleHQpOwot
ICAgIGVsc2UKLSAgICAgICAgQ0dDb250ZXh0RmlsbFBhdGgoY29udGV4dCk7Ci19Ci0KLXZvaWQg
S1JlbmRlcmluZ1BhaW50U2VydmVyUXVhcnR6SGVscGVyOjpjbGlwVG9GaWxsUGF0aChDR0NvbnRl
eHRSZWYgY29udGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcmVuZGVyUGF0aCkKLXsKLSAgICBpZiAo
cmVuZGVyUGF0aC0+c3R5bGUoKS0+c3ZnU3R5bGUoKS0+ZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5P
REQpCi0gICAgICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0KTsKLSAgICBlbHNlCi0gICAgICAg
IENHQ29udGV4dENsaXAoY29udGV4dCk7Ci19ICAgIAotCi12b2lkIEtSZW5kZXJpbmdQYWludFNl
cnZlclNvbGlkUXVhcnR6OjpkcmF3KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiByZW5kZXJpbmdD
b250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiBwYXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBj
b25zdAotewotICAgIGlmICghc2V0dXAocmVuZGVyaW5nQ29udGV4dCwgcGF0aCwgdHlwZSkpCi0g
ICAgICAgIHJldHVybjsKLSAgICByZW5kZXJQYXRoKHJlbmRlcmluZ0NvbnRleHQsIHBhdGgsIHR5
cGUpOwotICAgIHRlYXJkb3duKHJlbmRlcmluZ0NvbnRleHQsIHBhdGgsIHR5cGUpOwotfQotCi1i
b29sIEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXVhcnR6OjpzZXR1cChLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJP
YmplY3QsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Ci17Ci0gICAgS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHRRdWFydHoqIHF1YXJ0ekNvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dFF1YXJ0eio+KHJlbmRlcmluZ0NvbnRleHQpOwotICAgIENHQ29udGV4dFJl
ZiBjb250ZXh0ID0gcXVhcnR6Q29udGV4dC0+Y2dDb250ZXh0KCk7Ci0gICAgUmVuZGVyU3R5bGUq
IHJlbmRlclN0eWxlID0gcmVuZGVyT2JqZWN0LT5zdHlsZSgpOwotCi0gICAgQ0dDb250ZXh0U2V0
QWxwaGEoY29udGV4dCwgcmVuZGVyU3R5bGUtPm9wYWNpdHkoKSk7Ci0gICAgCi0gICAgc3RhdGlj
IENHQ29sb3JTcGFjZVJlZiBkZXZpY2VSR0JDb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRl
RGV2aWNlUkdCKCk7IC8vIFRoaXMgc2hvdWxkIGJlIHNoYXJlZCBmcm9tIEdyYXBoaWNzQ29udGV4
dCwgb3Igc29tZSBvdGhlciBjZW50cmFsIGxvY2F0aW9uCi0KLSAgICBpZiAoKHR5cGUgJiBBUFBM
WV9UT19GSUxMKSAmJiByZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKSB7Ci0gICAg
ICAgIENHRmxvYXQgY29sb3JDb21wb25lbnRzWzRdOwotICAgICAgICBjb2xvcigpLmdldFJHQkEo
Y29sb3JDb21wb25lbnRzWzBdLCBjb2xvckNvbXBvbmVudHNbMV0sIGNvbG9yQ29tcG9uZW50c1sy
XSwgY29sb3JDb21wb25lbnRzWzNdKTsKLSAgICAgICAgQVNTRVJUKCFjb2xvcigpLmhhc0FscGhh
KCkpOwotICAgICAgICBjb2xvckNvbXBvbmVudHNbM10gPSByZW5kZXJTdHlsZS0+c3ZnU3R5bGUo
KS0+ZmlsbE9wYWNpdHkoKTsgLy8gU1ZHL0NTUyBjb2xvcnMgYXJlIG5vdCBzcGVjaWZpZWQgdy9v
IGFscGhhCi0gICAgICAgIENHQ29udGV4dFNldEZpbGxDb2xvclNwYWNlKGNvbnRleHQsIGRldmlj
ZVJHQkNvbG9yU3BhY2UpOwotICAgICAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3IoY29udGV4dCwg
Y29sb3JDb21wb25lbnRzKTsKLSAgICAgICAgaWYgKGlzUGFpbnRpbmdUZXh0KCkpIHsKLSAgICAg
ICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4ocmVuZGVyT2JqZWN0KS0+c3R5bGUoKS0+
c2V0Q29sb3IoY29sb3IoKSk7Ci0gICAgICAgICAgICBDR0NvbnRleHRTZXRUZXh0RHJhd2luZ01v
ZGUoY29udGV4dCwga0NHVGV4dEZpbGwpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCh0
eXBlICYgQVBQTFlfVE9fU1RST0tFKSAmJiByZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+aGFzU3Ry
b2tlKCkpIHsKLSAgICAgICAgQ0dGbG9hdCBjb2xvckNvbXBvbmVudHNbNF07Ci0gICAgICAgIGNv
bG9yKCkuZ2V0UkdCQShjb2xvckNvbXBvbmVudHNbMF0sIGNvbG9yQ29tcG9uZW50c1sxXSwgY29s
b3JDb21wb25lbnRzWzJdLCBjb2xvckNvbXBvbmVudHNbM10pOwotICAgICAgICBBU1NFUlQoIWNv
bG9yKCkuaGFzQWxwaGEoKSk7Ci0gICAgICAgIGNvbG9yQ29tcG9uZW50c1szXSA9IHJlbmRlclN0
eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VPcGFjaXR5KCk7IC8vIFNWRy9DU1MgY29sb3JzIGFyZSBu
b3Qgc3BlY2lmaWVkIHcvbyBhbHBoYQotICAgICAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xvclNw
YWNlKGNvbnRleHQsIGRldmljZVJHQkNvbG9yU3BhY2UpOwotICAgICAgICBDR0NvbnRleHRTZXRT
dHJva2VDb2xvcihjb250ZXh0LCBjb2xvckNvbXBvbmVudHMpOwotICAgICAgICBhcHBseVN0cm9r
ZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHJlbmRlclN0eWxlLCByZW5kZXJPYmplY3QpOwotICAg
ICAgICBpZiAoaXNQYWludGluZ1RleHQoKSkgewotICAgICAgICAgICAgY29uc3RfY2FzdDxSZW5k
ZXJPYmplY3QqPihyZW5kZXJPYmplY3QpLT5zdHlsZSgpLT5zZXRDb2xvcihjb2xvcigpKTsKLSAg
ICAgICAgICAgIENHQ29udGV4dFNldFRleHREcmF3aW5nTW9kZShjb250ZXh0LCBrQ0dUZXh0U3Ry
b2tlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9p
ZCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF1YXJ0ejo6cmVuZGVyUGF0aChLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcmVuZGVy
UGF0aCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKLXsKLSAgICBSZW5kZXJTdHlsZSog
cmVuZGVyU3R5bGUgPSByZW5kZXJQYXRoLT5zdHlsZSgpOwotICAgIEtSZW5kZXJpbmdEZXZpY2VD
b250ZXh0UXVhcnR6KiBxdWFydHpDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHRRdWFydHoqPihyZW5kZXJpbmdDb250ZXh0KTsKLSAgICBDR0NvbnRleHRSZWYgY29u
dGV4dCA9IHF1YXJ0ekNvbnRleHQtPmNnQ29udGV4dCgpOyAgICAKLSAgICBpZiAoKHR5cGUgJiBB
UFBMWV9UT19GSUxMKSAmJiByZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKQotICAg
ICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHpIZWxwZXI6OmZpbGxQYXRoKGNvbnRleHQs
IHJlbmRlclBhdGgpOwotICAgIGlmICgodHlwZSAmIEFQUExZX1RPX1NUUk9LRSkgJiYgcmVuZGVy
U3R5bGUtPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgpKQotICAgICAgICBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJRdWFydHpIZWxwZXI6OnN0cm9rZVBhdGgoY29udGV4dCwgcmVuZGVyUGF0aCk7Ci19Ci0K
LXZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdWFydHo6OnRlYXJkb3duKEtSZW5kZXJp
bmdEZXZpY2VDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHJl
bmRlck9iamVjdCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKLXsKLX0KLQotdm9pZCBw
YXR0ZXJuQ2FsbGJhY2sodm9pZCAqaW5mbywgQ0dDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAg
Q0dMYXllclJlZiBsYXllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8U1ZHUmVzb3VyY2VJbWFnZSo+KGlu
Zm8pLT5jZ0xheWVyKCk7Ci0gICAgQ0dDb250ZXh0RHJhd0xheWVyQXRQb2ludChjb250ZXh0LCBD
R1BvaW50WmVybywgbGF5ZXIpOwotfQotCi12b2lkIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRl
cm5RdWFydHo6OmRyYXcoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQs
IGNvbnN0IFJlbmRlclBhdGgqIHBhdGgsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Ci17
Ci0gICAgaWYgKCFzZXR1cChyZW5kZXJpbmdDb250ZXh0LCBwYXRoLCB0eXBlKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIHJlbmRlclBhdGgocmVuZGVyaW5nQ29udGV4dCwgcGF0aCwgdHlwZSk7Ci0g
ICAgdGVhcmRvd24ocmVuZGVyaW5nQ29udGV4dCwgcGF0aCwgdHlwZSk7Ci19Ci0KLWJvb2wgS1Jl
bmRlcmluZ1BhaW50U2VydmVyUGF0dGVyblF1YXJ0ejo6c2V0dXAoS1JlbmRlcmluZ0RldmljZUNv
bnRleHQqIHJlbmRlcmluZ0NvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0
LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAotewotICAgIGlmKGxpc3RlbmVyKCkpIC8v
IHRoaXMgc2VlbXMgbGlrZSBiYWQgZGVzaWduIHRvIG1lLCBzaG91bGQgYmUgaW4gYSBjb21tb24g
YmFzZWNsYXNzLiAtLSBlY3MgOC82LzA1Ci0gICAgICAgIGxpc3RlbmVyKCktPnJlc291cmNlTm90
aWZpY2F0aW9uKCk7Ci0KLSAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSByZW5kZXJPYmpl
Y3QtPnN0eWxlKCk7Ci0KLSAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eiogcXVhcnR6
Q29udGV4dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6Kj4ocmVu
ZGVyaW5nQ29udGV4dCk7Ci0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBxdWFydHpDb250ZXh0
LT5jZ0NvbnRleHQoKTsKLQotICAgIFJlZlB0cjxTVkdSZXNvdXJjZUltYWdlPiBjZWxsID0gdGls
ZSgpOwotICAgIGlmICghY2VsbCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ0dDb250
ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKLQotICAgIENHU2l6ZSBjZWxsU2l6ZSA9IENHU2l6ZShj
ZWxsLT5zaXplKCkpOwotCi0gICAgQ0dGbG9hdCBhbHBoYSA9IDE7IC8vIGNhbnZhc1N0eWxlLT5v
cGFjaXR5KCk7IC8vd2hpY2g/Ci0gICAgICAgICAgICAKLSAgICAvLyBQYXR0ZXJucyBkb24ndCBz
ZWVtIHRvIHJlc2VwZWN0IHRoZSBDVE0gdW5sZXNzIHdlIG1ha2UgdGhlbS4uLgotICAgIENHQWZm
aW5lVHJhbnNmb3JtIGN0bSA9IENHQ29udGV4dEdldENUTShjb250ZXh0KTsKLSAgICBDR0FmZmlu
ZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBwYXR0ZXJuVHJhbnNmb3JtKCk7Ci0gICAgdHJhbnNmb3Jt
ID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQodHJhbnNmb3JtLCBjdG0pOwotCi0gICAgQ0dTaXpl
IHBoYXNlID0gQ0dTaXplTWFrZShiYm94KCkueCgpLCAtYmJveCgpLnkoKSk7IC8vIFBhdHRlcm4g
c3BhY2Ugc2VlbXMgdG8gc3RhcnQgaW4gdGhlIGxvd2VyLWxlZnQsIHNvIHdlIGZsaXAgdGhlIFkg
aGVyZS4KLSAgICBDR0NvbnRleHRTZXRQYXR0ZXJuUGhhc2UoY29udGV4dCwgcGhhc2UpOwotCi0g
ICAgQ0dQYXR0ZXJuQ2FsbGJhY2tzIGNhbGxiYWNrcyA9IHswLCBwYXR0ZXJuQ2FsbGJhY2ssIE5V
TEx9OwotICAgIG1fcGF0dGVybiA9IENHUGF0dGVybkNyZWF0ZSgKLSAgICAgICAgdGlsZSgpLAot
ICAgICAgICBDR1JlY3RNYWtlKDAsIDAsIGNlbGxTaXplLndpZHRoLCBjZWxsU2l6ZS5oZWlnaHQp
LAotICAgICAgICB0cmFuc2Zvcm0sCi0gICAgICAgIGJib3goKS53aWR0aCgpLCAvL2NlbGxTaXpl
LndpZHRoLAotICAgICAgICBiYm94KCkuaGVpZ2h0KCksIC8vY2VsbFNpemUuaGVpZ2h0LAotICAg
ICAgICBrQ0dQYXR0ZXJuVGlsaW5nQ29uc3RhbnRTcGFjaW5nLCAgLy8gRklYTUU6IHNob3VsZCBh
c2sgQ0cgZ3V5cy4KLSAgICAgICAgdHJ1ZSwgLy8gaGFzIGNvbG9yCi0gICAgICAgICZjYWxsYmFj
a3MpOwotCi0gICAgQ0dDb250ZXh0U2V0QWxwaGEoY29udGV4dCwgcmVuZGVyU3R5bGUtPm9wYWNp
dHkoKSk7IC8vIG9yIGRvIEkgc2V0IHRoZSBhbHBoYSBhYm92ZT8KLQotICAgIG1fcGF0dGVyblNw
YWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlUGF0dGVybihOVUxMKTsKLQotICAgIGlmICgodHlwZSAm
IEFQUExZX1RPX0ZJTEwpICYmIHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkpIHsK
LSAgICAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yU3BhY2UoY29udGV4dCwgbV9wYXR0ZXJuU3Bh
Y2UpOwotICAgICAgICBDR0NvbnRleHRTZXRGaWxsUGF0dGVybihjb250ZXh0LCBtX3BhdHRlcm4s
ICZhbHBoYSk7Ci0gICAgICAgIGlmIChpc1BhaW50aW5nVGV4dCgpKSB7Ci0gICAgICAgICAgICBj
b25zdF9jYXN0PFJlbmRlck9iamVjdCo+KHJlbmRlck9iamVjdCktPnN0eWxlKCktPnNldENvbG9y
KENvbG9yKCkpOwotICAgICAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2RlKGNvbnRl
eHQsIGtDR1RleHRGaWxsKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoKHR5cGUg
JiBBUFBMWV9UT19TVFJPS0UpICYmIHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJva2Uo
KSkgewotICAgICAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xvclNwYWNlKGNvbnRleHQsIG1fcGF0
dGVyblNwYWNlKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0U3Ryb2tlUGF0dGVybihjb250ZXh0LCBt
X3BhdHRlcm4sICZhbHBoYSk7Ci0gICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29u
dGV4dCwgcmVuZGVyU3R5bGUsIHJlbmRlck9iamVjdCk7Ci0gICAgICAgIGlmIChpc1BhaW50aW5n
VGV4dCgpKSB7Ci0gICAgICAgICAgICBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KHJlbmRlck9i
amVjdCktPnN0eWxlKCktPnNldENvbG9yKENvbG9yKCkpOwotICAgICAgICAgICAgQ0dDb250ZXh0
U2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQsIGtDR1RleHRTdHJva2UpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEtSZW5kZXJpbmdQYWludFNl
cnZlclBhdHRlcm5RdWFydHo6OnJlbmRlclBhdGgoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIHJl
bmRlcmluZ0NvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHJlbmRlclBhdGgsIEtDUGFpbnRUYXJn
ZXRUeXBlIHR5cGUpIGNvbnN0Ci17Ci0gICAgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlID0gcmVu
ZGVyUGF0aC0+c3R5bGUoKTsKLQotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6KiBx
dWFydHpDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHoq
PihyZW5kZXJpbmdDb250ZXh0KTsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHF1YXJ0ekNv
bnRleHQtPmNnQ29udGV4dCgpOwotCi0gICAgaWYgKCh0eXBlICYgQVBQTFlfVE9fRklMTCkgJiYg
cmVuZGVyU3R5bGUtPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKSkKLSAgICAgICAgS1JlbmRlcmluZ1Bh
aW50U2VydmVyUXVhcnR6SGVscGVyOjpmaWxsUGF0aChjb250ZXh0LCByZW5kZXJQYXRoKTsKLSAg
ICAKLSAgICBpZiAoKHR5cGUgJiBBUFBMWV9UT19TVFJPS0UpICYmIHJlbmRlclN0eWxlLT5zdmdT
dHlsZSgpLT5oYXNTdHJva2UoKSkKLSAgICAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyUXVhcnR6
SGVscGVyOjpzdHJva2VQYXRoKGNvbnRleHQsIHJlbmRlclBhdGgpOwotfQotCi12b2lkIEtSZW5k
ZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdWFydHo6OnRlYXJkb3duKEtSZW5kZXJpbmdEZXZpY2VD
b250ZXh0KiByZW5kZXJpbmdDb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVj
dCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKLXsKLSAgICBLUmVuZGVyaW5nRGV2aWNl
Q29udGV4dFF1YXJ0eiogcXVhcnR6Q29udGV4dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0UXVhcnR6Kj4ocmVuZGVyaW5nQ29udGV4dCk7Ci0gICAgQ0dDb250ZXh0UmVmIGNv
bnRleHQgPSBxdWFydHpDb250ZXh0LT5jZ0NvbnRleHQoKTsKLSAgICBDR1BhdHRlcm5SZWxlYXNl
KG1fcGF0dGVybik7Ci0gICAgQ0dDb2xvclNwYWNlUmVsZWFzZShtX3BhdHRlcm5TcGFjZSk7Ci0g
ICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKLX0KLQotfQotCi0jZW5kaWYgLy8g
U1ZHX1NVUFBPUlQKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJp
bmdQYWludFNlcnZlclF1YXJ0ei5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZp
Y2UvcXVhcnR6L0tSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ei5oCShyZXZpc2lvbiAxNzg2MikK
KysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdQYWludFNlcnZlclF1
YXJ0ei5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLiAKLSAq
ICAgICAgICAgICAgICAgMjAwNiBBbGV4YW5kZXIgS2VsbGV0dCA8bHlwYW5vdkBrZGUub3JnPgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotI2lmbmRlZiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHpfSAotI2RlZmluZSBLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHpfSAotCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5o
IgotI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkLmgiCi0jaW5jbHVkZSAiS1Jl
bmRlcmluZ1BhaW50U2VydmVyUGF0dGVybi5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNl
cnZlckdyYWRpZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU1ZHUmVzb3Vy
Y2VJbWFnZTsKLQotY2xhc3MgS1JlbmRlcmluZ1BhaW50U2VydmVyUXVhcnR6SGVscGVyIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBzdHJva2VQYXRoKENHQ29udGV4dFJlZiwgY29uc3QgUmVu
ZGVyUGF0aCopOwotICAgIHN0YXRpYyB2b2lkIGNsaXBUb1N0cm9rZVBhdGgoQ0dDb250ZXh0UmVm
LCBjb25zdCBSZW5kZXJQYXRoKik7Ci0gICAgc3RhdGljIHZvaWQgZmlsbFBhdGgoQ0dDb250ZXh0
UmVmLCBjb25zdCBSZW5kZXJQYXRoKik7Ci0gICAgc3RhdGljIHZvaWQgY2xpcFRvRmlsbFBhdGgo
Q0dDb250ZXh0UmVmLCBjb25zdCBSZW5kZXJQYXRoKik7Ci19OwotCi1jbGFzcyBLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJTb2xpZFF1YXJ0eiA6IHB1YmxpYyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xp
ZCB7Ci1wdWJsaWM6Ci0gICAgS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdWFydHooKSB7fTsK
LSAgICB2aXJ0dWFsIHZvaWQgZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNvbnN0IFJl
bmRlclBhdGgqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHNl
dHVwKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWlu
dFRhcmdldFR5cGUpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB0ZWFyZG93bihLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIEtDUGFpbnRUYXJnZXRUeXBlKSBj
b25zdDsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyUGF0aChLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dCosIGNvbnN0IFJlbmRlclBhdGgqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29u
c3Q7Ci19OwotCi1jbGFzcyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXVhcnR6IDogcHVi
bGljIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4gewotcHVibGljOgotICAgIEtSZW5kZXJp
bmdQYWludFNlcnZlclBhdHRlcm5RdWFydHooKSB7fQotICAgIHZpcnR1YWwgdm9pZCBkcmF3KEtS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRU
eXBlKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc2V0dXAoS1JlbmRlcmluZ0RldmljZUNvbnRl
eHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7Ci0gICAg
dmlydHVhbCB2b2lkIHRlYXJkb3duKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVu
ZGVyT2JqZWN0KiwgS0NQYWludFRhcmdldFR5cGUpIGNvbnN0OwotcHJvdGVjdGVkOgotICAgIHZp
cnR1YWwgdm9pZCByZW5kZXJQYXRoKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVu
ZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKLXByaXZhdGU6Ci0gICAgbXV0YWJs
ZSBDR0NvbG9yU3BhY2VSZWYgbV9wYXR0ZXJuU3BhY2U7Ci0gICAgbXV0YWJsZSBDR1BhdHRlcm5S
ZWYgbV9wYXR0ZXJuOwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIENHRmxvYXQgY29sb3JB
cnJheVs0XTsKLSAgICBDR0Zsb2F0IG9mZnNldDsKLSAgICBDR0Zsb2F0IHByZXZpb3VzRGVsdGFJ
bnZlcnNlOwotfSBRdWFydHpHcmFkaWVudFN0b3A7Ci0KLS8vIERvZXMgbm90IHN1YmNsYXNzIGZy
b20gS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQgaW50ZW50aW9uYWxseS4KLWNsYXNzIEtS
ZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6IHsKLQotcHVibGljOgotICAgIEtSZW5k
ZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6KCk7Ci0gICAgdmlydHVhbCB+S1JlbmRlcmlu
Z1BhaW50U2VydmVyR3JhZGllbnRRdWFydHooKTsKLSAgICAKLSAgICB2b2lkIHVwZGF0ZVF1YXJ0
ekdyYWRpZW50U3RvcHNDYWNoZShjb25zdCBWZWN0b3I8S0NHcmFkaWVudFN0b3A+JiBzdG9wcyk7
Ci0gICAgdm9pZCB1cGRhdGVRdWFydHpHcmFkaWVudENhY2hlKGNvbnN0IEtSZW5kZXJpbmdQYWlu
dFNlcnZlckdyYWRpZW50KiBzZXJ2ZXIpOwotCi0gICAgdm9pZCBkcmF3KGNvbnN0IEtSZW5kZXJp
bmdQYWludFNlcnZlckdyYWRpZW50KiBzZXJ2ZXIsIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Kiwg
Y29uc3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKLSAgICBib29sIHNl
dHVwKGNvbnN0IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50KiBzZXJ2ZXIsIEtSZW5kZXJp
bmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgS0NQYWludFRhcmdldFR5cGUp
IGNvbnN0OwotICAgIHZvaWQgdGVhcmRvd24oY29uc3QgS1JlbmRlcmluZ1BhaW50U2VydmVyR3Jh
ZGllbnQqIHNlcnZlciwgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJPYmpl
Y3QqLCBLQ1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7Ci0gICAgdm9pZCByZW5kZXJQYXRoKGNvbnN0
IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50KiBzZXJ2ZXIsIEtSZW5kZXJpbmdEZXZpY2VD
b250ZXh0KiwgY29uc3QgUmVuZGVyUGF0aCosIEtDUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKLQot
cHVibGljOgotICAgIC8vIGR1ZSB0byBjIGZ1bmN0aW9ucwotICAgIFF1YXJ0ekdyYWRpZW50U3Rv
cCAqbV9zdG9wc0NhY2hlOwotICAgIGludCAgICAgICAgICAgICAgICAgbV9zdG9wc0NvdW50Owot
Ci1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBpbnZhbGlkYXRlQ2FjaGVzKCk7Ci0gICAgQ0dTaGFkaW5n
UmVmIG1fc2hhZGluZ0NhY2hlOwotICAgIG11dGFibGUgUmVmUHRyPFNWR1Jlc291cmNlSW1hZ2U+
IG1fbWFza0ltYWdlOwotfTsKLQotY2xhc3MgS1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3Jh
ZGllbnRRdWFydHogOiBwdWJsaWMgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHos
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxp
YyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudCB7Ci1wdWJsaWM6Ci0gICAgS1Jl
bmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRRdWFydHooKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgaW52YWxpZGF0ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3KEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiByZW5kZXJQYXRoLCBLQ1BhaW50
VGFyZ2V0VHlwZSB0eXBlKSBjb25zdAotICAgICAgICB7IEtSZW5kZXJpbmdQYWludFNlcnZlckdy
YWRpZW50UXVhcnR6OjpkcmF3KHRoaXMsIGNvbnRleHQsIHJlbmRlclBhdGgsIHR5cGUpOyB9Ci0g
ICAgdmlydHVhbCBib29sIHNldHVwKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkg
Y29uc3QKLSAgICAgICAgeyByZXR1cm4gS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFy
dHo6OnNldHVwKHRoaXMsIGNvbnRleHQsIHJlbmRlck9iamVjdCwgdHlwZSk7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgdGVhcmRvd24oS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBlKSBjb25z
dAotICAgICAgICB7IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6Ojp0ZWFyZG93
bih0aGlzLCBjb250ZXh0LCByZW5kZXJPYmplY3QsIHR5cGUpOyB9Ci0gICAgdmlydHVhbCB2b2lk
IHJlbmRlclBhdGgoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRl
clBhdGgqIHJlbmRlclBhdGgsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Ci0gICAgICAg
IHsgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdWFydHo6OnJlbmRlclBhdGgodGhpcywg
Y29udGV4dCwgcmVuZGVyUGF0aCwgdHlwZSk7IH0KLX07Ci0KLWNsYXNzIEtSZW5kZXJpbmdQYWlu
dFNlcnZlclJhZGlhbEdyYWRpZW50UXVhcnR6IDogcHVibGljIEtSZW5kZXJpbmdQYWludFNlcnZl
ckdyYWRpZW50UXVhcnR6LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdWJsaWMgS1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQgewot
cHVibGljOgotICAgIEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50UXVhcnR6KCkg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJh
dyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcmVu
ZGVyUGF0aCwgS0NQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKLSAgICAgICAgeyBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF1YXJ0ejo6ZHJhdyh0aGlzLCBjb250ZXh0LCByZW5kZXJQ
YXRoLCB0eXBlKTsgfQotICAgIHZpcnR1YWwgYm9vbCBzZXR1cChLUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIEtDUGFpbnRU
YXJnZXRUeXBlIHR5cGUpIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIEtSZW5kZXJpbmdQYWludFNl
cnZlckdyYWRpZW50UXVhcnR6OjpzZXR1cCh0aGlzLCBjb250ZXh0LCByZW5kZXJPYmplY3QsIHR5
cGUpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHRlYXJkb3duKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgS0NQYWludFRhcmdl
dFR5cGUgdHlwZSkgY29uc3QKLSAgICAgICAgeyBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVu
dFF1YXJ0ejo6dGVhcmRvd24odGhpcywgY29udGV4dCwgcmVuZGVyT2JqZWN0LCB0eXBlKTsgfQot
ICAgIHZpcnR1YWwgdm9pZCByZW5kZXJQYXRoKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBSZW5kZXJQYXRoKiByZW5kZXJQYXRoLCBLQ1BhaW50VGFyZ2V0VHlwZSB0eXBl
KSBjb25zdAotICAgICAgICB7IEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXVhcnR6Ojpy
ZW5kZXJQYXRoKHRoaXMsIGNvbnRleHQsIHJlbmRlclBhdGgsIHR5cGUpOyB9Ci19OwotCi19Ci0K
LSNlbmRpZiAvLyAhS1JlbmRlcmluZ1BhaW50U2VydmVyUXVhcnR6X0gKSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvbWlzYy9LQ2FudmFzUmVuZGVyaW5nU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva3N2ZzIvbWlzYy9LQ2FudmFzUmVuZGVyaW5nU3R5bGUuY3BwCShyZXZpc2lvbiAxNzg2MikK
KysrIFdlYkNvcmUva3N2ZzIvbWlzYy9LQ2FudmFzUmVuZGVyaW5nU3R5bGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCi0jaW5jbHVk
ZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJTb2xpZC5oIgorI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyR3JhZGllbnQuaCIK
KyNpbmNsdWRlICJTVkdQYWludFNlcnZlclNvbGlkLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0
LmgiCiAjaW5jbHVkZSAiUmVuZGVyUGF0aC5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgpAQCAt
NDAsMjIgKzQwLDIyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIEtSZW5kZXJp
bmdQYWludFNlcnZlclNvbGlkKiBzaGFyZWRTb2xpZFBhaW50U2VydmVyKCkKK3N0YXRpYyBTVkdQ
YWludFNlcnZlclNvbGlkKiBzaGFyZWRTb2xpZFBhaW50U2VydmVyKCkKIHsKLSAgICBzdGF0aWMg
S1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQqIF9zaGFyZWRTb2xpZFBhaW50U2VydmVyID0gMDsK
KyAgICBzdGF0aWMgU1ZHUGFpbnRTZXJ2ZXJTb2xpZCogX3NoYXJlZFNvbGlkUGFpbnRTZXJ2ZXIg
PSAwOwogICAgIGlmICghX3NoYXJlZFNvbGlkUGFpbnRTZXJ2ZXIpCi0gICAgICAgIF9zaGFyZWRT
b2xpZFBhaW50U2VydmVyID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQq
PihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlUGFpbnRTZXJ2ZXIoUFNfU09MSUQpLnJlbGVhc2VS
ZWYoKSk7CisgICAgICAgIF9zaGFyZWRTb2xpZFBhaW50U2VydmVyID0gc3RhdGljX2Nhc3Q8U1ZH
UGFpbnRTZXJ2ZXJTb2xpZCo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVQYWludFNlcnZlcihQ
U19TT0xJRCkucmVsZWFzZVJlZigpKTsKICAgICByZXR1cm4gX3NoYXJlZFNvbGlkUGFpbnRTZXJ2
ZXI7CiB9CiAKLUtSZW5kZXJpbmdQYWludFNlcnZlciogS1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxs
UGFpbnRTZXJ2ZXIoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJPYmplY3Qq
IGl0ZW0pCitTVkdQYWludFNlcnZlciogS1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxsUGFpbnRTZXJ2
ZXIoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJPYmplY3QqIGl0ZW0pCiB7
CiAgICAgaWYgKCFzdHlsZS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKQogICAgICAgICByZXR1cm4g
MDsKIAogICAgIFNWR1BhaW50KiBmaWxsID0gc3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxQYWludCgp
OwogCi0gICAgS1JlbmRlcmluZ1BhaW50U2VydmVyKiBmaWxsUGFpbnRTZXJ2ZXIgPSAwOworICAg
IFNWR1BhaW50U2VydmVyKiBmaWxsUGFpbnRTZXJ2ZXIgPSAwOwogICAgIGlmIChmaWxsLT5wYWlu
dFR5cGUoKSA9PSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9VUkkpIHsKICAgICAgICAgZmlsbFBh
aW50U2VydmVyID0gZ2V0UGFpbnRTZXJ2ZXJCeUlkKGl0ZW0tPmRvY3VtZW50KCksIEF0b21pY1N0
cmluZyhmaWxsLT51cmkoKS5zdWJzdHJpbmcoMSkpKTsKICAgICAgICAgaWYgKGZpbGxQYWludFNl
cnZlciAmJiBpdGVtLT5pc1JlbmRlclBhdGgoKSkKQEAgLTYzLDExICs2MywxMSBAQCBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXIqIEtTVkdQYWludGVyRmFjdG9yCiAgICAgICAgIGlmICghZmlsbFBhaW50
U2VydmVyKSB7CiAgICAgICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIChibGFjayksIHNlZSBidWcg
MTEwMTcKICAgICAgICAgICAgIGZpbGxQYWludFNlcnZlciA9IHNoYXJlZFNvbGlkUGFpbnRTZXJ2
ZXIoKTsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlk
Kj4oZmlsbFBhaW50U2VydmVyKS0+c2V0Q29sb3IoQ29sb3I6OmJsYWNrKTsKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PFNWR1BhaW50U2VydmVyU29saWQqPihmaWxsUGFpbnRTZXJ2ZXIpLT5zZXRD
b2xvcihDb2xvcjo6YmxhY2spOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgZmls
bFBhaW50U2VydmVyID0gc2hhcmVkU29saWRQYWludFNlcnZlcigpOwotICAgICAgICBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJTb2xpZCogZmlsbFBhaW50U2VydmVyU29saWQgPSBzdGF0aWNfY2FzdDxL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZCo+KGZpbGxQYWludFNlcnZlcik7CisgICAgICAgIFNW
R1BhaW50U2VydmVyU29saWQqIGZpbGxQYWludFNlcnZlclNvbGlkID0gc3RhdGljX2Nhc3Q8U1ZH
UGFpbnRTZXJ2ZXJTb2xpZCo+KGZpbGxQYWludFNlcnZlcik7CiAgICAgICAgIGlmIChmaWxsLT5w
YWludFR5cGUoKSA9PSBTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9DVVJSRU5UQ09MT1IpCiAgICAg
ICAgICAgICBmaWxsUGFpbnRTZXJ2ZXJTb2xpZC0+c2V0Q29sb3Ioc3R5bGUtPmNvbG9yKCkpOwog
ICAgICAgICBlbHNlCkBAIC03NiwyMSArNzYsMjEgQEAgS1JlbmRlcmluZ1BhaW50U2VydmVyKiBL
U1ZHUGFpbnRlckZhY3RvcgogICAgIHJldHVybiBmaWxsUGFpbnRTZXJ2ZXI7CiB9CiAKLUtSZW5k
ZXJpbmdQYWludFNlcnZlciogS1NWR1BhaW50ZXJGYWN0b3J5OjpzdHJva2VQYWludFNlcnZlcihj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlck9iamVjdCogaXRlbSkKK1NWR1Bh
aW50U2VydmVyKiBLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50U2VydmVyKGNvbnN0IFJl
bmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyT2JqZWN0KiBpdGVtKQogewogICAgIGlmICgh
c3R5bGUtPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgpKQogICAgICAgICByZXR1cm4gMDsKIAogICAg
IFNWR1BhaW50KiBzdHJva2UgPSBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlUGFpbnQoKTsKIAot
ICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciogc3Ryb2tlUGFpbnRTZXJ2ZXIgPSAwOworICAgIFNW
R1BhaW50U2VydmVyKiBzdHJva2VQYWludFNlcnZlciA9IDA7CiAgICAgaWYgKHN0cm9rZS0+cGFp
bnRUeXBlKCkgPT0gU1ZHUGFpbnQ6OlNWR19QQUlOVFRZUEVfVVJJKSB7CiAgICAgICAgIHN0cm9r
ZVBhaW50U2VydmVyID0gZ2V0UGFpbnRTZXJ2ZXJCeUlkKGl0ZW0tPmRvY3VtZW50KCksIEF0b21p
Y1N0cmluZyhzdHJva2UtPnVyaSgpLnN1YnN0cmluZygxKSkpOwogICAgICAgICBpZiAoaXRlbSAm
JiBzdHJva2VQYWludFNlcnZlciAmJiBpdGVtLT5pc1JlbmRlclBhdGgoKSkKICAgICAgICAgICAg
IHN0cm9rZVBhaW50U2VydmVyLT5hZGRDbGllbnQoc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyUGF0
aCo+KGl0ZW0pKTsKICAgICB9IGVsc2UgewogICAgICAgICBzdHJva2VQYWludFNlcnZlciA9IHNo
YXJlZFNvbGlkUGFpbnRTZXJ2ZXIoKTsKLSAgICAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyU29s
aWQqIHN0cm9rZVBhaW50U2VydmVyU29saWQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJTb2xpZCo+KHN0cm9rZVBhaW50U2VydmVyKTsKKyAgICAgICAgU1ZHUGFpbnRTZXJ2ZXJT
b2xpZCogc3Ryb2tlUGFpbnRTZXJ2ZXJTb2xpZCA9IHN0YXRpY19jYXN0PFNWR1BhaW50U2VydmVy
U29saWQqPihzdHJva2VQYWludFNlcnZlcik7CiAgICAgICAgIGlmIChzdHJva2UtPnBhaW50VHlw
ZSgpID09IFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX0NVUlJFTlRDT0xPUikKICAgICAgICAgICAg
IHN0cm9rZVBhaW50U2VydmVyU29saWQtPnNldENvbG9yKHN0eWxlLT5jb2xvcigpKTsKICAgICAg
ICAgZWxzZQpJbmRleDogV2ViQ29yZS9rc3ZnMi9taXNjL0tDYW52YXNSZW5kZXJpbmdTdHlsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvbWlzYy9LQ2FudmFzUmVuZGVyaW5nU3R5bGUu
aAkocmV2aXNpb24gMTc4NjIpCisrKyBXZWJDb3JlL2tzdmcyL21pc2MvS0NhbnZhc1JlbmRlcmlu
Z1N0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDE0ICs0MSwxNCBAQCB0eXBlZGVmIFZlY3Rv
cjxmbG9hdD4gS0NEYXNoQXJyYXk7CiAjZW5kaWYKIAogICAgIGNsYXNzIENTU1ZhbHVlOwotICAg
IGNsYXNzIEtSZW5kZXJpbmdQYWludFNlcnZlcjsKKyAgICBjbGFzcyBTVkdQYWludFNlcnZlcjsK
ICAgICBjbGFzcyBSZW5kZXJTdHlsZTsKICAgICBjbGFzcyBSZW5kZXJPYmplY3Q7CiAKICAgICBj
bGFzcyBLU1ZHUGFpbnRlckZhY3RvcnkgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIEtS
ZW5kZXJpbmdQYWludFNlcnZlciogc3Ryb2tlUGFpbnRTZXJ2ZXIoY29uc3QgUmVuZGVyU3R5bGUq
LCBjb25zdCBSZW5kZXJPYmplY3QqKTsKLSAgICAgICAgc3RhdGljIEtSZW5kZXJpbmdQYWludFNl
cnZlciogZmlsbFBhaW50U2VydmVyKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyT2Jq
ZWN0Kik7CisgICAgICAgIHN0YXRpYyBTVkdQYWludFNlcnZlciogc3Ryb2tlUGFpbnRTZXJ2ZXIo
Y29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKKyAgICAgICAgc3RhdGlj
IFNWR1BhaW50U2VydmVyKiBmaWxsUGFpbnRTZXJ2ZXIoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25z
dCBSZW5kZXJPYmplY3QqKTsKIAogICAgICAgICAvLyBIZWxwZXJzCiAgICAgICAgIHN0YXRpYyBk
b3VibGUgY3NzUHJpbWl0aXZlVG9MZW5ndGgoY29uc3QgUmVuZGVyT2JqZWN0KiwgQ1NTVmFsdWUq
LCBkb3VibGUgZGVmYXVsdFZhbHVlID0gMC4wKTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAkocmV2aXNpb24gMTc4NjIpCisrKyBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSAiU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50Lmgi
CiAKICNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ1Bh
aW50U2VydmVyR3JhZGllbnQuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJT
VkdOYW1lcy5oIgogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5j
cHAJKHJldmlzaW9uIDE3ODYyKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVPZmZzZXRFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgIkF0dHIu
aCIKIAogI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJHcmFkaWVudC5oIgogCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVk
ZSAiU1ZHUmVuZGVyU3R5bGUuaCIKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0dyYWRpZW50
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHR3JhZGllbnRF
bGVtZW50LmNwcAkocmV2aXNpb24gMTc4NjIpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdHcmFk
aWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBT
VkdHcmFkaWVudEVsZW1lbnQ6Om5vdGlmeUF0dHJpYnV0ZQogU1ZHUmVzb3VyY2UqIFNWR0dyYWRp
ZW50RWxlbWVudDo6Y2FudmFzUmVzb3VyY2UoKQogewogICAgIGlmICghbV9yZXNvdXJjZSkgewot
ICAgICAgICBtX3Jlc291cmNlID0gV1RGOjpzdGF0aWNfcG9pbnRlcl9jYXN0PEtSZW5kZXJpbmdQ
YWludFNlcnZlckdyYWRpZW50PihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlUGFpbnRTZXJ2ZXIo
Z3JhZGllbnRUeXBlKCkpKTsKKyAgICAgICAgbV9yZXNvdXJjZSA9IFdURjo6c3RhdGljX3BvaW50
ZXJfY2FzdDxTVkdQYWludFNlcnZlckdyYWRpZW50PihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRl
UGFpbnRTZXJ2ZXIoZ3JhZGllbnRUeXBlKCkpKTsKICAgICAgICAgbV9yZXNvdXJjZS0+c2V0TGlz
dGVuZXIodGhpcyk7CiAgICAgICAgIGJ1aWxkR3JhZGllbnQobV9yZXNvdXJjZSk7CiAgICAgfQpA
QCAtMTE2LDEzICsxMTYsMTMgQEAgU1ZHUmVzb3VyY2UqIFNWR0dyYWRpZW50RWxlbWVudDo6Y2Fu
dmFzUgogdm9pZCBTVkdHcmFkaWVudEVsZW1lbnQ6OnJlc291cmNlTm90aWZpY2F0aW9uKCkgY29u
c3QKIHsKICAgICAvLyBXZSdyZSByZWZlcmVuY2VkIGJ5IGEgImNsaWVudCIsIGJ1aWxkIHRoZSBn
cmFkaWVudCBub3cuLi4KLSAgICBidWlsZEdyYWRpZW50KHN0YXRpY19jYXN0PEtSZW5kZXJpbmdQ
YWludFNlcnZlckdyYWRpZW50Kj4oY29uc3RfY2FzdDxTVkdHcmFkaWVudEVsZW1lbnQqPih0aGlz
KS0+Y2FudmFzUmVzb3VyY2UoKSkpOworICAgIGJ1aWxkR3JhZGllbnQoc3RhdGljX2Nhc3Q8U1ZH
UGFpbnRTZXJ2ZXJHcmFkaWVudCo+KGNvbnN0X2Nhc3Q8U1ZHR3JhZGllbnRFbGVtZW50Kj4odGhp
cyktPmNhbnZhc1Jlc291cmNlKCkpKTsKIH0KIAogdm9pZCBTVkdHcmFkaWVudEVsZW1lbnQ6OnJl
YnVpbGRTdG9wcygpIGNvbnN0CiB7CiAgICAgaWYgKG1fcmVzb3VyY2UgJiYgIW93bmVyRG9jdW1l
bnQoKS0+cGFyc2luZygpKSB7Ci0gICAgICAgIFZlY3RvcjxLQ0dyYWRpZW50U3RvcD4gc3RvcHM7
CisgICAgICAgIFZlY3RvcjxTVkdHcmFkaWVudFN0b3A+IHN0b3BzOwogICAgICAgICAgLy8gRklY
TUU6IE1hbnVhbCBzdHlsZSByZXNvbHV0aW9uIGlzIGEgaGFjawogICAgICAgICBSZW5kZXJTdHls
ZSogZ3JhZGllbnRTdHlsZSA9IGNvbnN0X2Nhc3Q8U1ZHR3JhZGllbnRFbGVtZW50Kj4odGhpcykt
PnN0eWxlRm9yUmVuZGVyZXIocGFyZW50KCktPnJlbmRlcmVyKCkpOwogICAgICAgICBmb3IgKE5v
ZGUqIG4gPSBmaXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKSB7CkluZGV4OiBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuaAkocmV2aXNpb24gMTc4NjIpCisrKyBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjQsNyArMjQsNyBAQAogI2RlZmluZSBLU1ZHX1NWR0dyYWRpZW50RWxlbWVudEltcGxfSAogI2lm
ZGVmIFNWR19TVVBQT1JUCiAKLSNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVu
dC5oIgorI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyR3JhZGllbnQuaCIKICNpbmNsdWRlICJTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5o
IgogI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgpAQCAtNTcsOCArNTcsOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZXNvdXJjZU5vdGlmaWNhdGlvbigp
IGNvbnN0OwogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICB2aXJ0dWFsIHZvaWQgYnVpbGRHcmFk
aWVudChQYXNzUmVmUHRyPEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50PikgY29uc3QgPSAw
OwotICAgICAgICB2aXJ0dWFsIEtDUGFpbnRTZXJ2ZXJUeXBlIGdyYWRpZW50VHlwZSgpIGNvbnN0
ID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGJ1aWxkR3JhZGllbnQoUGFzc1JlZlB0cjxTVkdQ
YWludFNlcnZlckdyYWRpZW50PikgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIFNWR1BhaW50
U2VydmVyVHlwZSBncmFkaWVudFR5cGUoKSBjb25zdCA9IDA7CiAgICAgICAgIHZvaWQgcmVidWls
ZFN0b3BzKCkgY29uc3Q7CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC02OSw3ICs2OSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNW
R0dyYWRpZW50RWxlbWVudCwgaW50LCBpbnQsIEdyYWRpZW50VW5pdHMsIGdyYWRpZW50VW5pdHMp
CiAgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdHcmFkaWVudEVsZW1l
bnQsIFNWR1RyYW5zZm9ybUxpc3QqLCBSZWZQdHI8U1ZHVHJhbnNmb3JtTGlzdD4sIEdyYWRpZW50
VHJhbnNmb3JtLCBncmFkaWVudFRyYW5zZm9ybSkKIAotICAgICAgICBtdXRhYmxlIFJlZlB0cjxL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudD4gbV9yZXNvdXJjZTsKKyAgICAgICAgbXV0YWJs
ZSBSZWZQdHI8U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudD4gbV9yZXNvdXJjZTsKICAgICB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMaW5lYXJH
cmFkaWVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xp
bmVhckdyYWRpZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDE3ODYyKQorKysgV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUs
NyArMjUsNyBAQAogI2luY2x1ZGUgIlNWR0xpbmVhckdyYWRpZW50RWxlbWVudC5oIgogCiAjaW5j
bHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZl
ckdyYWRpZW50LmgiCisjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudC5oIgog
I2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogI2luY2x1ZGUg
IlNWR01hdHJpeC5oIgpAQCAtNzEsNyArNzEsNyBAQCB2b2lkIFNWR0xpbmVhckdyYWRpZW50RWxl
bWVudDo6cGFyc2VNYXBwCiAgICAgICAgIFNWR0dyYWRpZW50RWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cik7CiB9CiAKLXZvaWQgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpidWls
ZEdyYWRpZW50KFBhc3NSZWZQdHI8S1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQ+IF9ncmFk
KSBjb25zdAordm9pZCBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmJ1aWxkR3JhZGllbnQoUGFz
c1JlZlB0cjxTVkdQYWludFNlcnZlckdyYWRpZW50PiBfZ3JhZCkgY29uc3QKIHsKICAgICByZWJ1
aWxkU3RvcHMoKTsgLy8gcmVidWlsZCBzdG9wcyBiZWZvcmUgcG9zc2libHkgaW1wb3J0aW5nIHRo
ZW0gZnJvbSBhbnkgcmVmZXJlbmNlZCBncmFkaWVudC4KIApAQCAtODUsMjMgKzg1LDIzIEBAIHZv
aWQgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpidWlsZEdyYWQKICAgICBmbG9hdCBfeDEgPSB4
MSgpLT52YWx1ZSgpLCBfeTEgPSB5MSgpLT52YWx1ZSgpOwogICAgIGZsb2F0IF94MiA9IHgyKCkt
PnZhbHVlKCksIF95MiA9IHkyKCktPnZhbHVlKCk7CiAKLSAgICBSZWZQdHI8S1JlbmRlcmluZ1Bh
aW50U2VydmVyTGluZWFyR3JhZGllbnQ+IGdyYWQgPSBXVEY6OnN0YXRpY19wb2ludGVyX2Nhc3Q8
S1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQ+KF9ncmFkKTsKKyAgICBSZWZQdHI8
U1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudD4gZ3JhZCA9IFdURjo6c3RhdGljX3BvaW50ZXJf
Y2FzdDxTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50PihfZ3JhZCk7CiAgICAgQWZmaW5lVHJh
bnNmb3JtIG1hdDsKICAgICBpZiAoZ3JhZGllbnRUcmFuc2Zvcm0oKS0+bnVtYmVyT2ZJdGVtcygp
ID4gMCkKICAgICAgICAgbWF0ID0gZ3JhZGllbnRUcmFuc2Zvcm0oKS0+Y29uc29saWRhdGUoKS0+
bWF0cml4KCktPm1hdHJpeCgpOwogCiAgICAgRGVwcmVjYXRlZFN0cmluZyByZWYgPSBocmVmKCku
ZGVwcmVjYXRlZFN0cmluZygpOwotICAgIFJlZlB0cjxLUmVuZGVyaW5nUGFpbnRTZXJ2ZXI+IHBz
ZXJ2ZXIgPSBnZXRQYWludFNlcnZlckJ5SWQoZG9jdW1lbnQoKSwgcmVmLm1pZCgxKSk7CisgICAg
UmVmUHRyPFNWR1BhaW50U2VydmVyPiBwc2VydmVyID0gZ2V0UGFpbnRTZXJ2ZXJCeUlkKGRvY3Vt
ZW50KCksIHJlZi5taWQoMSkpOwogICAgIAogICAgIGlmIChwc2VydmVyICYmIChwc2VydmVyLT50
eXBlKCkgPT0gUFNfUkFESUFMX0dSQURJRU5UIHx8IHBzZXJ2ZXItPnR5cGUoKSA9PSBQU19MSU5F
QVJfR1JBRElFTlQpKSB7CiAgICAgICAgIGJvb2wgaXNMaW5lYXIgPSBwc2VydmVyLT50eXBlKCkg
PT0gUFNfTElORUFSX0dSQURJRU5UOwotICAgICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFk
aWVudCogZ3JhZGllbnQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVu
dCo+KHBzZXJ2ZXIuZ2V0KCkpOworICAgICAgICBTVkdQYWludFNlcnZlckdyYWRpZW50KiBncmFk
aWVudCA9IHN0YXRpY19jYXN0PFNWR1BhaW50U2VydmVyR3JhZGllbnQqPihwc2VydmVyLmdldCgp
KTsKIAogICAgICAgICBpZiAoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6Z3JhZGllbnRVbml0c0F0
dHIpKQogICAgICAgICAgICAgYmJveCA9IGdyYWRpZW50LT5ib3VuZGluZ0JveE1vZGUoKTsKICAg
ICAgICAgICAgIAogICAgICAgICBpZiAoaXNMaW5lYXIpIHsKLSAgICAgICAgICAgIEtSZW5kZXJp
bmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50KiBsaW5lYXIgPSBzdGF0aWNfY2FzdDxLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudCo+KHBzZXJ2ZXIuZ2V0KCkpOworICAgICAgICAg
ICAgU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudCogbGluZWFyID0gc3RhdGljX2Nhc3Q8U1ZH
UGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudCo+KHBzZXJ2ZXIuZ2V0KCkpOwogICAgICAgICAgICAg
aWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OngxQXR0cikpCiAgICAgICAgICAgICAgICAgX3gx
ID0gbGluZWFyLT5ncmFkaWVudFN0YXJ0KCkueCgpOwogICAgICAgICAgICAgZWxzZSBpZiAoYmJv
eCkKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5o
CShyZXZpc2lvbiAxNzg2MikKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xpbmVhckdyYWRpZW50
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGUqKTsKIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgdmlydHVhbCB2b2lkIGJ1aWxkR3Jh
ZGllbnQoUGFzc1JlZlB0cjxLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudD4pIGNvbnN0Owot
ICAgICAgICB2aXJ0dWFsIEtDUGFpbnRTZXJ2ZXJUeXBlIGdyYWRpZW50VHlwZSgpIGNvbnN0IHsg
cmV0dXJuIFBTX0xJTkVBUl9HUkFESUVOVDsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgYnVpbGRH
cmFkaWVudChQYXNzUmVmUHRyPFNWR1BhaW50U2VydmVyR3JhZGllbnQ+KSBjb25zdDsKKyAgICAg
ICAgdmlydHVhbCBTVkdQYWludFNlcnZlclR5cGUgZ3JhZGllbnRUeXBlKCkgY29uc3QgeyByZXR1
cm4gUFNfTElORUFSX0dSQURJRU5UOyB9CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1
YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlz
OyB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCShyZXZpc2lv
biAxNzg2MikKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2luY2x1ZGUgIlNWR1Jlc291cmNlSW1hZ2UuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nRGV2
aWNlLmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybi5oIgorI2luY2x1
ZGUgIlNWR1BhaW50U2VydmVyUGF0dGVybi5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5l
ci5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgpAQCAt
MTM3LDEyICsxMzcsMTIgQEAgdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6cmVzb3VyY2VOb3RpZmlj
YQogdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6ZmlsbEF0dHJpYnV0ZXNGcm9tUmVmZXJlbmNlUGF0
dGVybihjb25zdCBTVkdQYXR0ZXJuRWxlbWVudCogdGFyZ2V0LCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm1NYXRyaXgpCiB7CiAgICAgRGVwcmVjYXRlZFN0cmluZyByZWYgPSBocmVm
KCkuZGVwcmVjYXRlZFN0cmluZygpOwotICAgIFJlZlB0cjxLUmVuZGVyaW5nUGFpbnRTZXJ2ZXI+
IHJlZlNlcnZlciA9IGdldFBhaW50U2VydmVyQnlJZChkb2N1bWVudCgpLCByZWYubWlkKDEpKTsK
KyAgICBSZWZQdHI8U1ZHUGFpbnRTZXJ2ZXI+IHJlZlNlcnZlciA9IGdldFBhaW50U2VydmVyQnlJ
ZChkb2N1bWVudCgpLCByZWYubWlkKDEpKTsKIAogICAgIGlmICghcmVmU2VydmVyIHx8IHJlZlNl
cnZlci0+dHlwZSgpICE9IFBTX1BBVFRFUk4pCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBS
ZWZQdHI8S1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybj4gcmVmUGF0dGVybiA9IFdURjo6c3Rh
dGljX3BvaW50ZXJfY2FzdDxLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuPihyZWZTZXJ2ZXIp
OworICAgIFJlZlB0cjxTVkdQYWludFNlcnZlclBhdHRlcm4+IHJlZlBhdHRlcm4gPSBXVEY6OnN0
YXRpY19wb2ludGVyX2Nhc3Q8U1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuPihyZWZTZXJ2ZXIpOwogICAg
IAogICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjpwYXR0ZXJuVW5pdHNBdHRyKSkgewog
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gdGFyZ2V0LT5nZXRBdHRyaWJ1dGUo
U1ZHTmFtZXM6OnBhdHRlcm5Vbml0c0F0dHIpOwpAQCAtMzI2LDcgKzMyNiw3IEBAIFJlbmRlck9i
amVjdCogU1ZHUGF0dGVybkVsZW1lbnQ6OmNyZWF0ZVIKIFNWR1Jlc291cmNlKiBTVkdQYXR0ZXJu
RWxlbWVudDo6Y2FudmFzUmVzb3VyY2UoKQogewogICAgIGlmICghbV9wYWludFNlcnZlcikgewot
ICAgICAgICBtX3BhaW50U2VydmVyID0gV1RGOjpzdGF0aWNfcG9pbnRlcl9jYXN0PEtSZW5kZXJp
bmdQYWludFNlcnZlclBhdHRlcm4+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVQYWludFNlcnZl
cihLQ1BhaW50U2VydmVyVHlwZShQU19QQVRURVJOKSkpOworICAgICAgICBtX3BhaW50U2VydmVy
ID0gV1RGOjpzdGF0aWNfcG9pbnRlcl9jYXN0PFNWR1BhaW50U2VydmVyUGF0dGVybj4ocmVuZGVy
aW5nRGV2aWNlKCktPmNyZWF0ZVBhaW50U2VydmVyKFNWR1BhaW50U2VydmVyVHlwZShQU19QQVRU
RVJOKSkpOwogICAgICAgICBtX3BhaW50U2VydmVyLT5zZXRMaXN0ZW5lcihjb25zdF9jYXN0PFNW
R1BhdHRlcm5FbGVtZW50Kj4odGhpcykpOwogICAgIH0KICAgICByZXR1cm4gbV9wYWludFNlcnZl
ci5nZXQoKTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuaAkocmV2aXNp
b24gMTc4NjIpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAjZGVmaW5lIEtTVkdfU1ZHUGF0dGVybkVsZW1l
bnRJbXBsX0gKICNpZmRlZiBTVkdfU1VQUE9SVAogCi0jaW5jbHVkZSAiS1JlbmRlcmluZ1BhaW50
U2VydmVyUGF0dGVybi5oIgorI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyUGF0dGVybi5oIgogI2lu
Y2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaCIKICNpbmNsdWRlICJTVkdGaXRU
b1ZpZXdCb3guaCIKICNpbmNsdWRlICJTVkdMYW5nU3BhY2UuaCIKQEAgLTg0LDcgKzg0LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUKIAogICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdSZXNvdXJjZUlt
YWdlPiBtX3RpbGU7CiAgICAgICAgIG11dGFibGUgYm9vbCBtX2lnbm9yZUF0dHJpYnV0ZUNoYW5n
ZXM7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4+
IG1fcGFpbnRTZXJ2ZXI7CisgICAgICAgIG11dGFibGUgUmVmUHRyPFNWR1BhaW50U2VydmVyUGF0
dGVybj4gbV9wYWludFNlcnZlcjsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZH
RWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CiAKSW5kZXg6
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAkocmV2
aXNpb24gMTc4NjIpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAjaWZkZWYgU1ZHX1NVUFBP
UlQKICNpbmNsdWRlICJTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIktS
ZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50LmgiCisjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJS
YWRpYWxHcmFkaWVudC5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR0xl
bmd0aC5oIgogI2luY2x1ZGUgIlNWR01hdHJpeC5oIgpAQCAtNzcsNyArNzcsNyBAQCB2b2lkIFNW
R1JhZGlhbEdyYWRpZW50RWxlbWVudDo6cGFyc2VNYXBwCiAgICAgICAgIFNWR0dyYWRpZW50RWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CiAKLXZvaWQgU1ZHUmFkaWFsR3Jh
ZGllbnRFbGVtZW50OjpidWlsZEdyYWRpZW50KFBhc3NSZWZQdHI8S1JlbmRlcmluZ1BhaW50U2Vy
dmVyR3JhZGllbnQ+IF9ncmFkKSBjb25zdAordm9pZCBTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6
OmJ1aWxkR3JhZGllbnQoUGFzc1JlZlB0cjxTVkdQYWludFNlcnZlckdyYWRpZW50PiBfZ3JhZCkg
Y29uc3QKIHsKICAgICByZWJ1aWxkU3RvcHMoKTsgLy8gcmVidWlsZCBzdG9wcyBiZWZvcmUgcG9z
c2libHkgaW1wb3J0aW5nIHRoZW0gZnJvbSBhbnkgcmVmZXJlbmNlZCBncmFkaWVudC4KIApAQCAt
OTQsMjMgKzk0LDIzIEBAIHZvaWQgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpidWlsZEdyYWQK
ICAgICBmbG9hdCBfZnggPSBmeFNldCA/IGZ4KCktPnZhbHVlKCkgOiBfY3g7CiAgICAgZmxvYXQg
X2Z5ID0gZnlTZXQgPyBmeSgpLT52YWx1ZSgpIDogX2N5OwogCi0gICAgUmVmUHRyPEtSZW5kZXJp
bmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50PiBncmFkID0gV1RGOjpzdGF0aWNfcG9pbnRlcl9j
YXN0PEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50PihfZ3JhZCk7CisgICAgUmVm
UHRyPFNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQ+IGdyYWQgPSBXVEY6OnN0YXRpY19wb2lu
dGVyX2Nhc3Q8U1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudD4oX2dyYWQpOwogICAgIEFmZmlu
ZVRyYW5zZm9ybSBtYXQ7CiAgICAgaWYgKGdyYWRpZW50VHJhbnNmb3JtKCktPm51bWJlck9mSXRl
bXMoKSA+IDApCiAgICAgICAgIG1hdCA9IGdyYWRpZW50VHJhbnNmb3JtKCktPmNvbnNvbGlkYXRl
KCktPm1hdHJpeCgpLT5tYXRyaXgoKTsKIAogICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVmID0gaHJl
ZigpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICBSZWZQdHI8S1JlbmRlcmluZ1BhaW50U2VydmVy
PiBwc2VydmVyID0gZ2V0UGFpbnRTZXJ2ZXJCeUlkKGRvY3VtZW50KCksIHJlZi5taWQoMSkpOwor
ICAgIFJlZlB0cjxTVkdQYWludFNlcnZlcj4gcHNlcnZlciA9IGdldFBhaW50U2VydmVyQnlJZChk
b2N1bWVudCgpLCByZWYubWlkKDEpKTsKIAogICAgIGlmIChwc2VydmVyICYmIChwc2VydmVyLT50
eXBlKCkgPT0gUFNfUkFESUFMX0dSQURJRU5UIHx8IHBzZXJ2ZXItPnR5cGUoKSA9PSBQU19MSU5F
QVJfR1JBRElFTlQpKSB7CiAgICAgICAgIGJvb2wgaXNSYWRpYWwgPSBwc2VydmVyLT50eXBlKCkg
PT0gUFNfUkFESUFMX0dSQURJRU5UOwotICAgICAgICBSZWZQdHI8S1JlbmRlcmluZ1BhaW50U2Vy
dmVyR3JhZGllbnQ+IGdyYWRpZW50ID0gV1RGOjpzdGF0aWNfcG9pbnRlcl9jYXN0PEtSZW5kZXJp
bmdQYWludFNlcnZlckdyYWRpZW50Pihwc2VydmVyKTsKKyAgICAgICAgUmVmUHRyPFNWR1BhaW50
U2VydmVyR3JhZGllbnQ+IGdyYWRpZW50ID0gV1RGOjpzdGF0aWNfcG9pbnRlcl9jYXN0PFNWR1Bh
aW50U2VydmVyR3JhZGllbnQ+KHBzZXJ2ZXIpOwogCiAgICAgICAgIGlmICghaGFzQXR0cmlidXRl
KFNWR05hbWVzOjpncmFkaWVudFVuaXRzQXR0cikpCiAgICAgICAgICAgICBiYm94ID0gZ3JhZGll
bnQtPmJvdW5kaW5nQm94TW9kZSgpOwogCiAgICAgICAgIGlmIChpc1JhZGlhbCkgewotICAgICAg
ICAgICAgUmVmUHRyPEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50PiByYWRpYWwg
PSBXVEY6OnN0YXRpY19wb2ludGVyX2Nhc3Q8S1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3Jh
ZGllbnQ+KHBzZXJ2ZXIpOworICAgICAgICAgICAgUmVmUHRyPFNWR1BhaW50U2VydmVyUmFkaWFs
R3JhZGllbnQ+IHJhZGlhbCA9IFdURjo6c3RhdGljX3BvaW50ZXJfY2FzdDxTVkdQYWludFNlcnZl
clJhZGlhbEdyYWRpZW50Pihwc2VydmVyKTsKICAgICAgICAgICAgIGlmICghaGFzQXR0cmlidXRl
KFNWR05hbWVzOjpjeEF0dHIpKQogICAgICAgICAgICAgICAgIF9jeCA9IHJhZGlhbC0+Z3JhZGll
bnRDZW50ZXIoKS54KCk7CiAgICAgICAgICAgICBlbHNlIGlmIChiYm94KQpJbmRleDogV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmgJKHJldmlzaW9uIDE3ODYy
KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDggKzM5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwogCiAgICAg
cHJvdGVjdGVkOgotICAgICAgICB2aXJ0dWFsIHZvaWQgYnVpbGRHcmFkaWVudChQYXNzUmVmUHRy
PEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50PikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwg
S0NQYWludFNlcnZlclR5cGUgZ3JhZGllbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gUFNfUkFESUFM
X0dSQURJRU5UOyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBidWlsZEdyYWRpZW50KFBhc3NSZWZQ
dHI8U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudD4pIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFNWR1Bh
aW50U2VydmVyVHlwZSBncmFkaWVudFR5cGUoKSBjb25zdCB7IHJldHVybiBQU19SQURJQUxfR1JB
RElFTlQ7IH0KIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVt
ZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50U2VydmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQYWludFNlcnZlci5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQYWludFNlcnZlci5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmZGVmIFNWR19TVVBQT1JUCisjaW5jbHVkZSAiU1ZHUGFpbnRT
ZXJ2ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTVkdQYWludFNlcnZlcjo6U1ZHUGFp
bnRTZXJ2ZXIoKQorICAgIDogbV9hY3RpdmVDbGllbnQoMCkKKyAgICAsIG1fcGFpbnRpbmdUZXh0
KGZhbHNlKQoreworfQorCitTVkdQYWludFNlcnZlcjo6flNWR1BhaW50U2VydmVyKCkKK3sKK30K
KworY29uc3QgUmVuZGVyUGF0aCogU1ZHUGFpbnRTZXJ2ZXI6OmFjdGl2ZUNsaWVudCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fYWN0aXZlQ2xpZW50OworfQorCit2b2lkIFNWR1BhaW50U2VydmVy
OjpzZXRBY3RpdmVDbGllbnQoY29uc3QgUmVuZGVyUGF0aCogY2xpZW50KQoreworICAgIG1fYWN0
aXZlQ2xpZW50ID0gY2xpZW50OworfQorCitib29sIFNWR1BhaW50U2VydmVyOjppc1BhaW50aW5n
VGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFpbnRpbmdUZXh0OworfQorCit2b2lkIFNW
R1BhaW50U2VydmVyOjpzZXRQYWludGluZ1RleHQoYm9vbCBwYWludGluZ1RleHQpCit7CisgICAg
bV9wYWludGluZ1RleHQgPSBwYWludGluZ1RleHQ7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNWR1BhaW50U2VydmVyJiBwYWludFNlcnZlcikKK3sK
KyAgICByZXR1cm4gcGFpbnRTZXJ2ZXIuZXh0ZXJuYWxSZXByZXNlbnRhdGlvbih0cyk7Cit9CisK
K1NWR1BhaW50U2VydmVyKiBnZXRQYWludFNlcnZlckJ5SWQoRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBBdG9taWNTdHJpbmcmIGlkKQoreworICAgIFNWR1Jlc291cmNlKiByZXNvdXJjZSA9IGdl
dFJlc291cmNlQnlJZChkb2N1bWVudCwgaWQpOworICAgIGlmIChyZXNvdXJjZSAmJiByZXNvdXJj
ZS0+aXNQYWludFNlcnZlcigpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHUGFpbnRT
ZXJ2ZXIqPihyZXNvdXJjZSk7CisKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NW
R1BhaW50U2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dmcvU1ZHUGFpbnRTZXJ2ZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3ZnL1NWR1BhaW50U2VydmVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNWR1BhaW50U2VydmVyX0gKKyNkZWZpbmUgU1ZH
UGFpbnRTZXJ2ZXJfSAorCisjaWZkZWYgU1ZHX1NVUFBPUlQKKworI2luY2x1ZGUgIlNWR1Jlc291
cmNlLmgiCisKKyNpZiBQTEFURk9STShNQUMpCisjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNl
cy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFFUKQorY2xh
c3MgUVBlbjsKKyNlbmRpZgorICAgIAorbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorICAgIGVu
dW0gU1ZHUGFpbnRTZXJ2ZXJUeXBlIHsKKyAgICAgICAgLy8gUGFpbnRpbmcgbW9kZQorICAgICAg
ICBQU19TT0xJRCA9IDAsCisgICAgICAgIFBTX1BBVFRFUk4gPSAxLAorICAgICAgICBQU19MSU5F
QVJfR1JBRElFTlQgPSAyLAorICAgICAgICBQU19SQURJQUxfR1JBRElFTlQgPSAzCisgICAgfTsK
KworICAgIGVudW0gU1ZHUGFpbnRUYXJnZXRUeXBlIHsKKyAgICAgICAgLy8gVGFyZ2V0IG1vZGUK
KyAgICAgICAgQVBQTFlfVE9fRklMTCA9IDEsCisgICAgICAgIEFQUExZX1RPX1NUUk9LRSA9IDIK
KyAgICB9OworCisgICAgY2xhc3MgUmVuZGVyT2JqZWN0OworICAgIGNsYXNzIFJlbmRlclBhdGg7
CisgICAgY2xhc3MgUmVuZGVyU3R5bGU7CisgICAgY2xhc3MgS1JlbmRlcmluZ0RldmljZUNvbnRl
eHQ7IC8vIEZJWE1FOiBUaGlzIGlzIGdvbmUgc29vbiEKKworICAgIGNsYXNzIFNWR1BhaW50U2Vy
dmVyIDogcHVibGljIFNWR1Jlc291cmNlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNWR1BhaW50
U2VydmVyKCk7CisgICAgICAgIHZpcnR1YWwgflNWR1BhaW50U2VydmVyKCk7CisKKyAgICAgICAg
dmlydHVhbCBib29sIGlzUGFpbnRTZXJ2ZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAg
ICAgICAgY29uc3QgUmVuZGVyUGF0aCogYWN0aXZlQ2xpZW50KCkgY29uc3Q7CisgICAgICAgIHZv
aWQgc2V0QWN0aXZlQ2xpZW50KGNvbnN0IFJlbmRlclBhdGgqKTsKKworICAgICAgICBib29sIGlz
UGFpbnRpbmdUZXh0KCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0UGFpbnRpbmdUZXh0KGJvb2wp
OworCisgICAgICAgIHZpcnR1YWwgU1ZHUGFpbnRTZXJ2ZXJUeXBlIHR5cGUoKSBjb25zdCA9IDA7
CisgICAgICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJikgY29uc3QgPSAwOworCisgICAgICAgIC8vIFRvIGJlIGltcGxlbWVudGVkIGluIHBs
YXRmb3JtIHNwZWNpZmljIGNvZGUuCisgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3KEtSZW5kZXJp
bmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyUGF0aCosIFNWR1BhaW50VGFyZ2V0VHlwZSkg
Y29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCB0ZWFyZG93bihLUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dCosIGNvbnN0IFJlbmRlck9iamVjdCosIFNWR1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCByZW5kZXJQYXRoKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Kiwg
Y29uc3QgUmVuZGVyUGF0aCosIFNWR1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7CisKKyAgICAgICAg
dmlydHVhbCBib29sIHNldHVwKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVy
T2JqZWN0KiwgU1ZHUGFpbnRUYXJnZXRUeXBlKSBjb25zdCA9IDA7CisKKyAgICBwcm90ZWN0ZWQ6
CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICB2b2lkIHN0cm9rZVBhdGgoQ0dDb250ZXh0UmVm
LCBjb25zdCBSZW5kZXJQYXRoKikgY29uc3Q7CisgICAgICAgIHZvaWQgY2xpcFRvU3Ryb2tlUGF0
aChDR0NvbnRleHRSZWYsIGNvbnN0IFJlbmRlclBhdGgqKSBjb25zdDsKKyAgICAgICAgdm9pZCBm
aWxsUGF0aChDR0NvbnRleHRSZWYsIGNvbnN0IFJlbmRlclBhdGgqKSBjb25zdDsKKyAgICAgICAg
dm9pZCBjbGlwVG9GaWxsUGF0aChDR0NvbnRleHRSZWYsIGNvbnN0IFJlbmRlclBhdGgqKSBjb25z
dDsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oUVQpCisgICAgICAgIHZvaWQgc2V0UGVuUHJvcGVy
dGllcyhjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHlsZSosIFFQZW4mKSBjb25z
dDsKKyNlbmRpZgorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgUmVuZGVyUGF0aCogbV9h
Y3RpdmVDbGllbnQ7CisgICAgICAgIGJvb2wgbV9wYWludGluZ1RleHQ7CisgICAgfTsKKworICAg
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IFNWR1BhaW50U2VydmVy
Jik7CisKKyAgICBTVkdQYWludFNlcnZlciogZ2V0UGFpbnRTZXJ2ZXJCeUlkKERvY3VtZW50Kiwg
Y29uc3QgQXRvbWljU3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
CisKKyNlbmRpZiAvLyBTVkdQYWludFNlcnZlcl9ICkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3N2Zy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50U2VydmVy
R3JhZGllbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWZkZWYgU1ZHX1NVUFBPUlQKKyNpbmNsdWRl
ICJTVkdQYWludFNlcnZlckdyYWRpZW50LmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEhlbHBlcnMKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBjb21wYXJlU3RvcE9mZnNldChjb25zdCBTVkdHcmFkaWVudFN0b3AmIGZpcnN0LCBjb25z
dCBTVkdHcmFkaWVudFN0b3AmIHNlY29uZCkKK3sKKyAgICByZXR1cm4gZmlyc3QuZmlyc3QgPCBz
ZWNvbmQuZmlyc3Q7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IFNWR0dyYWRpZW50U3ByZWFkTWV0aG9kIG0pCit7CisgICAgc3dpdGNoIChtKSB7CisgICAgICAg
IGNhc2UgU1BSRUFETUVUSE9EX1BBRDoKKyAgICAgICAgICAgIHRzIDw8ICJQQUQiOyBicmVhazsK
KyAgICAgICAgY2FzZSBTUFJFQURNRVRIT0RfUkVQRUFUOgorICAgICAgICAgICAgdHMgPDwgIlJF
UEVBVCI7IGJyZWFrOworICAgICAgICBjYXNlIFNQUkVBRE1FVEhPRF9SRUZMRUNUOgorICAgICAg
ICAgICAgdHMgPDwgIlJFRkxFQ1QiOyBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gdHM7Cit9
CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFZlY3RvcjxT
VkdHcmFkaWVudFN0b3A+JiBsKQoreworICAgIHRzIDw8ICJbIjsKKyAgICBmb3IgKFZlY3RvcjxT
VkdHcmFkaWVudFN0b3A+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGwuYmVnaW4oKTsgaXQgIT0gbC5l
bmQoKTsgKytpdCkgeworICAgICAgICB0cyA8PCAiKCIgPDwgaXQtPmZpcnN0IDw8ICIsIiA8PCBp
dC0+c2Vjb25kIDw8ICIpIjsKKyAgICAgICAgaWYgKGl0ICsgMSAhPSBsLmVuZCgpKQorICAgICAg
ICAgICAgdHMgPDwgIiwgIjsKKyAgICB9CisgICAgdHMgPDwgIl0iOworICAgIHJldHVybiB0czsK
K30KKworU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudCgpCisg
ICAgOiBtX3NwcmVhZE1ldGhvZChTUFJFQURNRVRIT0RfUEFEKQorICAgICwgbV9ib3VuZGluZ0Jv
eE1vZGUodHJ1ZSkKKyAgICAsIG1fbGlzdGVuZXIoMCkKKworI2lmIFBMQVRGT1JNKE1BQykKKyAg
ICAsIG1fc3RvcHNDYWNoZSgwKQorICAgICwgbV9zdG9wc0NvdW50KDApCisgICAgLCBtX3NoYWRp
bmdDYWNoZSgwKQorI2VuZGlmCit7Cit9CisKK1NWR1BhaW50U2VydmVyR3JhZGllbnQ6On5TVkdQ
YWludFNlcnZlckdyYWRpZW50KCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgZGVsZXRlIG1f
c3RvcHNDYWNoZTsKKyAgICBDR1NoYWRpbmdSZWxlYXNlKG1fc2hhZGluZ0NhY2hlKTsKKyNlbmRp
ZgorfQorCitjb25zdCBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiYgU1ZHUGFpbnRTZXJ2ZXJHcmFk
aWVudDo6Z3JhZGllbnRTdG9wcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RvcHM7Cit9CisK
K3ZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0R3JhZGllbnRTdG9wcyhjb25zdCBWZWN0
b3I8U1ZHR3JhZGllbnRTdG9wPiYgc3RvcHMpCit7CisgICAgbV9zdG9wcyA9IHN0b3BzOworICAg
IHN0ZDo6c29ydChtX3N0b3BzLmJlZ2luKCksIG1fc3RvcHMuZW5kKCksIGNvbXBhcmVTdG9wT2Zm
c2V0KTsKK30KKwordm9pZCBTVkdQYWludFNlcnZlckdyYWRpZW50OjpzZXRHcmFkaWVudFN0b3Bz
KFNWR1BhaW50U2VydmVyR3JhZGllbnQqIHNlcnZlcikKK3sKKyAgICBtX3N0b3BzID0gc2VydmVy
LT5ncmFkaWVudFN0b3BzKCk7Cit9CisKK1NWR0dyYWRpZW50U3ByZWFkTWV0aG9kIFNWR1BhaW50
U2VydmVyR3JhZGllbnQ6OnNwcmVhZE1ldGhvZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3By
ZWFkTWV0aG9kOworfQorCit2b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldEdyYWRpZW50
U3ByZWFkTWV0aG9kKGNvbnN0IFNWR0dyYWRpZW50U3ByZWFkTWV0aG9kJiBtZXRob2QpCit7Cisg
ICAgbV9zcHJlYWRNZXRob2QgPSBtZXRob2Q7Cit9CisKK2Jvb2wgU1ZHUGFpbnRTZXJ2ZXJHcmFk
aWVudDo6Ym91bmRpbmdCb3hNb2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ib3VuZGluZ0Jv
eE1vZGU7Cit9CisKK3ZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0Qm91bmRpbmdCb3hN
b2RlKGJvb2wgbW9kZSkKK3sKKyAgICBtX2JvdW5kaW5nQm94TW9kZSA9IG1vZGU7Cit9CisKK0Fm
ZmluZVRyYW5zZm9ybSBTVkdQYWludFNlcnZlckdyYWRpZW50OjpncmFkaWVudFRyYW5zZm9ybSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZ3JhZGllbnRUcmFuc2Zvcm07Cit9CisKK3ZvaWQgU1ZH
UGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0R3JhZGllbnRUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiB0cmFuc2Zvcm0pCit7CisgICAgbV9ncmFkaWVudFRyYW5zZm9ybSA9IHRyYW5zZm9y
bTsKK30KKworU1ZHUmVzb3VyY2VMaXN0ZW5lciogU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6bGlz
dGVuZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2xpc3RlbmVyOworfQorCit2b2lkIFNWR1Bh
aW50U2VydmVyR3JhZGllbnQ6OnNldExpc3RlbmVyKFNWR1Jlc291cmNlTGlzdGVuZXIqIGxpc3Rl
bmVyKQoreworICAgIG1fbGlzdGVuZXIgPSBsaXN0ZW5lcjsKK30KKworVGV4dFN0cmVhbSYgU1ZH
UGFpbnRTZXJ2ZXJHcmFkaWVudDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0
cykgY29uc3QKK3sKKyAgICAvLyBhYnN0cmFjdCwgZG9uJ3Qgc3RyZWFtIHR5cGUKKyAgICB0cyAg
PDwgIltzdG9wcz0iIDw8IGdyYWRpZW50U3RvcHMoKSA8PCAiXSI7CisgICAgaWYgKHNwcmVhZE1l
dGhvZCgpICE9IFNQUkVBRE1FVEhPRF9QQUQpCisgICAgICAgIHRzIDw8ICJbbWV0aG9kPSIgPDwg
c3ByZWFkTWV0aG9kKCkgPDwgIl0iOworICAgIGlmICghYm91bmRpbmdCb3hNb2RlKCkpCisgICAg
ICAgIHRzIDw8ICIgW2JvdW5kaW5nIGJveCBtb2RlPSIgPDwgYm91bmRpbmdCb3hNb2RlKCkgPDwg
Il0iOworICAgIGlmICghZ3JhZGllbnRUcmFuc2Zvcm0oKS5pc0lkZW50aXR5KCkpCisgICAgICAg
IHRzIDw8ICIgW3RyYW5zZm9ybT0iIDw8IGdyYWRpZW50VHJhbnNmb3JtKCkgPDwgIl0iOworCisg
ICAgcmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50U2Vy
dmVyR3JhZGllbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3ZnL1NWR1BhaW50U2VydmVyR3JhZGllbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudF9ICisj
ZGVmaW5lIFNWR1BhaW50U2VydmVyR3JhZGllbnRfSAorCisjaWZkZWYgU1ZHX1NVUFBPUlQKKwor
I2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVk
ZSAiU1ZHUGFpbnRTZXJ2ZXIuaCIKKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJTVkdS
ZXNvdXJjZUltYWdlLmgiCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFFUKQorY2xhc3MgUUdyYWRp
ZW50OworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGVudW0gU1ZHR3JhZGll
bnRTcHJlYWRNZXRob2QgeworICAgICAgICBTUFJFQURNRVRIT0RfUEFEID0gMSwKKyAgICAgICAg
U1BSRUFETUVUSE9EX1JFUEVBVCA9IDIsCisgICAgICAgIFNQUkVBRE1FVEhPRF9SRUZMRUNUID0g
NAorICAgIH07CisKKyAgICB0eXBlZGVmIHN0ZDo6cGFpcjxmbG9hdCwgQ29sb3I+IFNWR0dyYWRp
ZW50U3RvcDsKKworICAgIGNsYXNzIFNWR1BhaW50U2VydmVyR3JhZGllbnQgOiBwdWJsaWMgU1ZH
UGFpbnRTZXJ2ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVu
dCgpOworICAgICAgICB2aXJ0dWFsIH5TVkdQYWludFNlcnZlckdyYWRpZW50KCk7CisKKyAgICAg
ICAgY29uc3QgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4mIGdyYWRpZW50U3RvcHMoKSBjb25zdDsK
KyAgICAgICAgdm9pZCBzZXRHcmFkaWVudFN0b3BzKGNvbnN0IFZlY3RvcjxTVkdHcmFkaWVudFN0
b3A+Jik7CisgICAgICAgIHZvaWQgc2V0R3JhZGllbnRTdG9wcyhTVkdQYWludFNlcnZlckdyYWRp
ZW50Kik7CisKKyAgICAgICAgU1ZHR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKCkg
Y29uc3Q7CisgICAgICAgIHZvaWQgc2V0R3JhZGllbnRTcHJlYWRNZXRob2QoY29uc3QgU1ZHR3Jh
ZGllbnRTcHJlYWRNZXRob2QmKTsKKworICAgICAgICAvLyBHcmFkaWVudCBzdGFydCBhbmQgZW5k
IHBvaW50cyBhcmUgcGVyY2VudGFnZXMgd2hlbiB1c2VkIGluIGJvdW5kaW5nQm94IG1vZGUuCisg
ICAgICAgIC8vIEZvciBpbnN0YW5jZSBzdGFydCBwb2ludCB3aXRoIHZhbHVlICgwLDApIGlzIHRv
cC1sZWZ0IGFuZCBlbmQgcG9pbnQgd2l0aAorICAgICAgICAvLyB2YWx1ZSAoMTAwLCAxMDApIGlz
IGJvdHRvbS1yaWdodC4gQm91bmRpbmdCb3ggbW9kZSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCisg
ICAgICAgIGJvb2wgYm91bmRpbmdCb3hNb2RlKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0Qm91
bmRpbmdCb3hNb2RlKGJvb2wgbW9kZSA9IHRydWUpOworCisgICAgICAgIEFmZmluZVRyYW5zZm9y
bSBncmFkaWVudFRyYW5zZm9ybSgpIGNvbnN0OworICAgICAgICB2b2lkIHNldEdyYWRpZW50VHJh
bnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOworCisgICAgICAgIFNWR1Jlc291cmNlTGlz
dGVuZXIqIGxpc3RlbmVyKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0TGlzdGVuZXIoU1ZHUmVz
b3VyY2VMaXN0ZW5lciopOworCisgICAgICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJikgY29uc3Q7CisKKyNpZiBQTEFURk9STShNQUMpCisg
ICAgICAgIHZpcnR1YWwgdm9pZCB0ZWFyZG93bihLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNv
bnN0IFJlbmRlck9iamVjdCosIFNWR1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7CisgICAgICAgIHZp
cnR1YWwgdm9pZCByZW5kZXJQYXRoKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVu
ZGVyUGF0aCosIFNWR1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBi
b29sIHNldHVwKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0Kiwg
U1ZHUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgaW52YWxp
ZGF0ZSgpOworCisgICAgICAgIC8vIEhlbHBlcnMKKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlQ2Fj
aGVzKCk7CisgICAgICAgIHZvaWQgdXBkYXRlUXVhcnR6R3JhZGllbnRTdG9wc0NhY2hlKGNvbnN0
IFZlY3RvcjxTVkdHcmFkaWVudFN0b3A+Jik7CisgICAgICAgIHZvaWQgdXBkYXRlUXVhcnR6R3Jh
ZGllbnRDYWNoZShjb25zdCBTVkdQYWludFNlcnZlckdyYWRpZW50Kik7CisjZW5kaWYKKworI2lm
IFBMQVRGT1JNKFFUKQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdm9pZCBmaWxsQ29sb3JBcnJh
eShRR3JhZGllbnQmLCBjb25zdCBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiYsIGZsb2F0IG9wYWNp
dHkpIGNvbnN0OworI2VuZGlmCisKKyAgICBwcml2YXRlOgorICAgICAgICBWZWN0b3I8U1ZHR3Jh
ZGllbnRTdG9wPiBtX3N0b3BzOworICAgICAgICBTVkdHcmFkaWVudFNwcmVhZE1ldGhvZCBtX3Nw
cmVhZE1ldGhvZDsKKyAgICAgICAgYm9vbCBtX2JvdW5kaW5nQm94TW9kZTsKKyAgICAgICAgQWZm
aW5lVHJhbnNmb3JtIG1fZ3JhZGllbnRUcmFuc2Zvcm07CisgICAgICAgIFNWR1Jlc291cmNlTGlz
dGVuZXIqIG1fbGlzdGVuZXI7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgcHVibGljOgorICAg
ICAgICB0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgICAgICBDR0Zsb2F0IGNvbG9yQXJyYXlbNF07
CisgICAgICAgICAgICBDR0Zsb2F0IG9mZnNldDsKKyAgICAgICAgICAgIENHRmxvYXQgcHJldmlv
dXNEZWx0YUludmVyc2U7CisgICAgICAgIH0gUXVhcnR6R3JhZGllbnRTdG9wOworCisgICAgICAg
IFF1YXJ0ekdyYWRpZW50U3RvcCogbV9zdG9wc0NhY2hlOworICAgICAgICBpbnQgbV9zdG9wc0Nv
dW50OworCisgICAgICAgIENHU2hhZGluZ1JlZiBtX3NoYWRpbmdDYWNoZTsKKyAgICAgICAgbXV0
YWJsZSBSZWZQdHI8U1ZHUmVzb3VyY2VJbWFnZT4gbV9tYXNrSW1hZ2U7CisjZW5kaWYKKyAgICB9
OworCisgICAgaW5saW5lIFNWR0dyYWRpZW50U3RvcCBtYWtlR3JhZGllbnRTdG9wKGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV9wYWlyKG9mZnNldCwgY29sb3IpOworICAgIH0KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYKKworI2VuZGlmIC8vIFNWR1BhaW50U2VydmVyR3JhZGllbnRfSApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUGFpbnRT
ZXJ2ZXJMaW5lYXJHcmFkaWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N2Zy9TVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50LmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWZkZWYgU1ZHX1NVUFBPUlQKKyNpbmNsdWRlICJTVkdQYWludFNlcnZlckxpbmVhckdy
YWRpZW50LmgiCisjaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1NWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQ6OlNWR1BhaW50U2VydmVy
TGluZWFyR3JhZGllbnQoKQoreworfQorCitTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50Ojp+
U1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudCgpCit7Cit9CisKK0Zsb2F0UG9pbnQgU1ZHUGFp
bnRTZXJ2ZXJMaW5lYXJHcmFkaWVudDo6Z3JhZGllbnRTdGFydCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fc3RhcnQ7Cit9CisKK3ZvaWQgU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudDo6c2V0
R3JhZGllbnRTdGFydChjb25zdCBGbG9hdFBvaW50JiBzdGFydCkKK3sKKyAgICBtX3N0YXJ0ID0g
c3RhcnQ7Cit9CisKK0Zsb2F0UG9pbnQgU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudDo6Z3Jh
ZGllbnRFbmQoKSBjb25zdAoreworICAgIHJldHVybiBtX2VuZDsKK30KKwordm9pZCBTVkdQYWlu
dFNlcnZlckxpbmVhckdyYWRpZW50OjpzZXRHcmFkaWVudEVuZChjb25zdCBGbG9hdFBvaW50JiBl
bmQpCit7CisgICAgbV9lbmQgPSBlbmQ7Cit9CisKK1RleHRTdHJlYW0mIFNWR1BhaW50U2VydmVy
TGluZWFyR3JhZGllbnQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMpIGNv
bnN0Cit7CisgICAgdHMgPDwgIlt0eXBlPUxJTkVBUi1HUkFESUVOVF0gIjsKKyAgICBTVkdQYWlu
dFNlcnZlckdyYWRpZW50OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKKyAgICB0cyAgPDwg
IiBbc3RhcnQ9IiA8PCBncmFkaWVudFN0YXJ0KCkgPDwgIl0iCisgICAgICAgIDw8ICIgW2VuZD0i
IDw8IGdyYWRpZW50RW5kKCkgPDwgIl0iOworICAgIHJldHVybiB0czsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3ZnL1NWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50LmgJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQYWludFNlcnZl
ckxpbmVhckdyYWRpZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudF9ICisjZGVmaW5l
IFNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRfSAorCisjaWZkZWYgU1ZHX1NVUFBPUlQKKwor
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJTVkdQYWludFNlcnZlckdyYWRpZW50
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIFNWR1BhaW50U2VydmVyTGlu
ZWFyR3JhZGllbnQgOiBwdWJsaWMgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudCB7CisgICAgcHVibGlj
OgorICAgICAgICBTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50KCk7CisgICAgICAgIHZpcnR1
YWwgflNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQoKTsKKworICAgICAgICB2aXJ0dWFsIFNW
R1BhaW50U2VydmVyVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gUFNfTElORUFSX0dSQURJRU5U
OyB9CisKKyAgICAgICAgRmxvYXRQb2ludCBncmFkaWVudFN0YXJ0KCkgY29uc3Q7CisgICAgICAg
IHZvaWQgc2V0R3JhZGllbnRTdGFydChjb25zdCBGbG9hdFBvaW50Jik7CisKKyAgICAgICAgRmxv
YXRQb2ludCBncmFkaWVudEVuZCgpIGNvbnN0OworICAgICAgICB2b2lkIHNldEdyYWRpZW50RW5k
KGNvbnN0IEZsb2F0UG9pbnQmKTsKKworICAgICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0OworCisjaWYgUExBVEZPUk0oUVQp
CisgICAgICAgIHZpcnR1YWwgYm9vbCBzZXR1cChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNv
bnN0IFJlbmRlck9iamVjdCosIFNWR1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7CisjZW5kaWYKKwor
ICAgIHByaXZhdGU6CisgICAgICAgIEZsb2F0UG9pbnQgbV9zdGFydDsKKyAgICAgICAgRmxvYXRQ
b2ludCBtX2VuZDsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgor
CisjZW5kaWYgLy8gU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudF9ICkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQYWludFNlcnZlclBhdHRlcm4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50U2VydmVyUGF0dGVy
bi5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQ
YWludFNlcnZlclBhdHRlcm4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWZkZWYgU1ZHX1NVUFBPUlQK
KyNpbmNsdWRlICJTVkdQYWludFNlcnZlclBhdHRlcm4uaCIKKyNpbmNsdWRlICJTVkdSZW5kZXJU
cmVlQXNUZXh0LmgiCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VJbWFnZS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1NWR1BhaW50U2VydmVyUGF0dGVybjo6U1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJu
KCkKKyAgICA6IG1fYm91bmRpbmdCb3hNb2RlKHRydWUpCisgICAgLCBtX2xpc3RlbmVyKDApCit7
Cit9CisKK1NWR1BhaW50U2VydmVyUGF0dGVybjo6flNWR1BhaW50U2VydmVyUGF0dGVybigpCit7
Cit9CisKK0Zsb2F0UmVjdCBTVkdQYWludFNlcnZlclBhdHRlcm46OmJib3goKSBjb25zdAorewor
ICAgIHJldHVybiBtX2Jib3g7Cit9CisKK3ZvaWQgU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpzZXRC
Ym94KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBtX2Jib3ggPSByZWN0OworfQorCiti
b29sIFNWR1BhaW50U2VydmVyUGF0dGVybjo6Ym91bmRpbmdCb3hNb2RlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9ib3VuZGluZ0JveE1vZGU7Cit9CisKK3ZvaWQgU1ZHUGFpbnRTZXJ2ZXJQYXR0
ZXJuOjpzZXRCb3VuZGluZ0JveE1vZGUoYm9vbCBtb2RlKQoreworICAgIG1fYm91bmRpbmdCb3hN
b2RlID0gbW9kZTsKK30KKworU1ZHUmVzb3VyY2VJbWFnZSogU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJu
Ojp0aWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90aWxlLmdldCgpOworfQorCit2b2lkIFNW
R1BhaW50U2VydmVyUGF0dGVybjo6c2V0VGlsZShjb25zdCBQYXNzUmVmUHRyPFNWR1Jlc291cmNl
SW1hZ2U+JiB0aWxlKQoreworICAgIG1fdGlsZSA9IHRpbGU7Cit9CisKK0FmZmluZVRyYW5zZm9y
bSBTVkdQYWludFNlcnZlclBhdHRlcm46OnBhdHRlcm5UcmFuc2Zvcm0oKSBjb25zdAoreworICAg
IHJldHVybiBtX3BhdHRlcm5UcmFuc2Zvcm07Cit9CisKK3ZvaWQgU1ZHUGFpbnRTZXJ2ZXJQYXR0
ZXJuOjpzZXRQYXR0ZXJuVHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
KQoreworICAgIG1fcGF0dGVyblRyYW5zZm9ybSA9IHRyYW5zZm9ybTsKK30KKworU1ZHUmVzb3Vy
Y2VMaXN0ZW5lciogU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpsaXN0ZW5lcigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fbGlzdGVuZXI7Cit9CisKK3ZvaWQgU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjpz
ZXRMaXN0ZW5lcihTVkdSZXNvdXJjZUxpc3RlbmVyKiBsaXN0ZW5lcikKK3sKKyAgICBtX2xpc3Rl
bmVyID0gbGlzdGVuZXI7Cit9CisKK1RleHRTdHJlYW0mIFNWR1BhaW50U2VydmVyUGF0dGVybjo6
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sKKyAgICB0cyA8
PCAiW3R5cGU9UEFUVEVSTl0iCisgICAgICAgIDw8ICIgW2Jib3g9IiA8PCBiYm94KCkgPDwgIl0i
OworICAgIGlmICghYm91bmRpbmdCb3hNb2RlKCkpCisgICAgICAgIHRzIDw8ICIgW2JvdW5kaW5n
IGJveCBtb2RlPSIgPDwgYm91bmRpbmdCb3hNb2RlKCkgPDwgIl0iOworICAgIGlmICghcGF0dGVy
blRyYW5zZm9ybSgpLmlzSWRlbnRpdHkoKSkKKyAgICAgICAgdHMgPDwgIiBbcGF0dGVybiB0cmFu
c2Zvcm09IiA8PCBwYXR0ZXJuVHJhbnNmb3JtKCkgPDwgIl0iOworICAgIHJldHVybiB0czsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50U2VydmVyUGF0dGVybi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50U2VydmVyUGF0dGVybi5oCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUGFpbnRTZXJ2ZXJQ
YXR0ZXJuLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuX0gKKyNkZWZpbmUgU1ZHUGFpbnRTZXJ2ZXJQ
YXR0ZXJuX0gKKworI2lmZGVmIFNWR19TVVBQT1JUCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zv
cm0uaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJTVkdQYWludFNlcnZlci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBTVkdSZXNvdXJjZUltYWdlOwor
CisgICAgY2xhc3MgU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuIDogcHVibGljIFNWR1BhaW50U2VydmVy
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNWR1BhaW50U2VydmVyUGF0dGVybigpOworICAgICAg
ICB2aXJ0dWFsIH5TVkdQYWludFNlcnZlclBhdHRlcm4oKTsKKworICAgICAgICB2aXJ0dWFsIFNW
R1BhaW50U2VydmVyVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gUFNfUEFUVEVSTjsgfQorCisg
ICAgICAgIC8vIFBhdHRlcm4gYm91bmRpbmcgYm94CisgICAgICAgIHZvaWQgc2V0QmJveChjb25z
dCBGbG9hdFJlY3QmKTsKKyAgICAgICAgRmxvYXRSZWN0IGJib3goKSBjb25zdDsKKworICAgICAg
ICAvLyBQYXR0ZXJuIHgsIHkgcGhhc2UgcG9pbnRzIGFyZSByZWxhdGl2ZSB3aGVuIGluIGJvdW5k
aW5nQm94TW9kZQorICAgICAgICAvLyBCb3VuZGluZ0JveCBtb2RlIGlzIGVuYWJsZWQgYnkgZGVm
YXVsdC4KKyAgICAgICAgYm9vbCBib3VuZGluZ0JveE1vZGUoKSBjb25zdDsKKyAgICAgICAgdm9p
ZCBzZXRCb3VuZGluZ0JveE1vZGUoYm9vbCBtb2RlID0gdHJ1ZSk7CisKKyAgICAgICAgU1ZHUmVz
b3VyY2VJbWFnZSogdGlsZSgpIGNvbnN0OworICAgICAgICB2b2lkIHNldFRpbGUoY29uc3QgUGFz
c1JlZlB0cjxTVkdSZXNvdXJjZUltYWdlPiYpOworCisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBw
YXR0ZXJuVHJhbnNmb3JtKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0UGF0dGVyblRyYW5zZm9y
bShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKworICAgICAgICBTVkdSZXNvdXJjZUxpc3RlbmVy
KiBsaXN0ZW5lcigpIGNvbnN0OworICAgICAgICB2b2lkIHNldExpc3RlbmVyKFNWR1Jlc291cmNl
TGlzdGVuZXIqKTsKKworICAgICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0OworCisjaWYgUExBVEZPUk0oTUFDKQorICAgICAg
ICB2aXJ0dWFsIGJvb2wgc2V0dXAoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5k
ZXJPYmplY3QqLCBTVkdQYWludFRhcmdldFR5cGUpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZv
aWQgdGVhcmRvd24oS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3Qq
LCBTVkdQYWludFRhcmdldFR5cGUpIGNvbnN0OyAKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oUVQp
CisgICAgICAgIHZpcnR1YWwgYm9vbCBzZXR1cChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCosIGNv
bnN0IFJlbmRlck9iamVjdCosIFNWR1BhaW50VGFyZ2V0VHlwZSkgY29uc3Q7CisjZW5kaWYKKwor
ICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxTVkdSZXNvdXJjZUltYWdlPiBtX3RpbGU7Cisg
ICAgICAgIEFmZmluZVRyYW5zZm9ybSBtX3BhdHRlcm5UcmFuc2Zvcm07CisgICAgICAgIEZsb2F0
UmVjdCBtX2Jib3g7CisgICAgICAgIGJvb2wgbV9ib3VuZGluZ0JveE1vZGU7CisgICAgICAgIFNW
R1Jlc291cmNlTGlzdGVuZXIqIG1fbGlzdGVuZXI7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAg
ICAgIG11dGFibGUgQ0dDb2xvclNwYWNlUmVmIG1fcGF0dGVyblNwYWNlOworICAgICAgICBtdXRh
YmxlIENHUGF0dGVyblJlZiBtX3BhdHRlcm47CisjZW5kaWYgICAgICAgICAgICAgICAgCisgICAg
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIFNWR1Bh
aW50U2VydmVyUGF0dGVybl9ICkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9T
VkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50LmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50U2VydmVy
UmFkaWFsR3JhZGllbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZmRlZiBTVkdfU1VQUE9SVAorI2lu
Y2x1ZGUgIlNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQuaCIKKyNpbmNsdWRlICJTVkdSZW5k
ZXJUcmVlQXNUZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU1ZHUGFpbnRTZXJ2ZXJS
YWRpYWxHcmFkaWVudDo6U1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudCgpCisgICAgOiBtX3Jh
ZGl1cygwLjApCit7Cit9CisKK1NWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQ6On5TVkdQYWlu
dFNlcnZlclJhZGlhbEdyYWRpZW50KCkKK3sKK30KKworCitGbG9hdFBvaW50IFNWR1BhaW50U2Vy
dmVyUmFkaWFsR3JhZGllbnQ6OmdyYWRpZW50Q2VudGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9jZW50ZXI7Cit9CisKK3ZvaWQgU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudDo6c2V0R3Jh
ZGllbnRDZW50ZXIoY29uc3QgRmxvYXRQb2ludCYgY2VudGVyKQoreworICAgIG1fY2VudGVyID0g
Y2VudGVyOworfQorCitGbG9hdFBvaW50IFNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQ6Omdy
YWRpZW50Rm9jYWwoKSBjb25zdAoreworICAgIHJldHVybiBtX2ZvY2FsOworfQorCit2b2lkIFNW
R1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQ6OnNldEdyYWRpZW50Rm9jYWwoY29uc3QgRmxvYXRQ
b2ludCYgZm9jYWwpCit7CisgICAgbV9mb2NhbCA9IGZvY2FsOworfQorCitmbG9hdCBTVkdQYWlu
dFNlcnZlclJhZGlhbEdyYWRpZW50OjpncmFkaWVudFJhZGl1cygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcmFkaXVzOworfQorCit2b2lkIFNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQ6OnNl
dEdyYWRpZW50UmFkaXVzKGZsb2F0IHJhZGl1cykKK3sKKyAgICBtX3JhZGl1cyA9IHJhZGl1czsK
K30KKworVGV4dFN0cmVhbSYgU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudDo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sKKyAgICB0cyA8PCAiW3R5cGU9
UkFESUFMLUdSQURJRU5UXSAiOworICAgIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24odHMpOworICAgIHRzIDw8ICIgW2NlbnRlcj0iIDw8IGdyYWRpZW50Q2Vu
dGVyKCkgPDwgIl0iCisgICAgICAgIDw8ICIgW2ZvY2FsPSIgPDwgZ3JhZGllbnRGb2NhbCgpIDw8
ICJdIgorICAgICAgICA8PCAiIFtyYWRpdXM9IiA8PCBncmFkaWVudFJhZGl1cygpIDw8ICJdIjsK
KyAgICByZXR1cm4gdHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdQYWludFNlcnZlclJhZGlhbEdy
YWRpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZH
UGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudC5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNWR1BhaW50
U2VydmVyUmFkaWFsR3JhZGllbnRfSAorI2RlZmluZSBTVkdQYWludFNlcnZlclJhZGlhbEdyYWRp
ZW50X0gKKworI2lmZGVmIFNWR19TVVBQT1JUCisKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisj
aW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKyAgICBjbGFzcyBTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50IDogcHVibGljIFNWR1Bh
aW50U2VydmVyR3JhZGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgU1ZHUGFpbnRTZXJ2ZXJS
YWRpYWxHcmFkaWVudCgpOworICAgICAgICB2aXJ0dWFsIH5TVkdQYWludFNlcnZlclJhZGlhbEdy
YWRpZW50KCk7CisKKyAgICAgICAgdmlydHVhbCBTVkdQYWludFNlcnZlclR5cGUgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIFBTX1JBRElBTF9HUkFESUVOVDsgfQorCisgICAgICAgIEZsb2F0UG9pbnQg
Z3JhZGllbnRDZW50ZXIoKSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXRHcmFkaWVudENlbnRlcihj
b25zdCBGbG9hdFBvaW50Jik7CisKKyAgICAgICAgRmxvYXRQb2ludCBncmFkaWVudEZvY2FsKCkg
Y29uc3Q7CisgICAgICAgIHZvaWQgc2V0R3JhZGllbnRGb2NhbChjb25zdCBGbG9hdFBvaW50Jik7
CisKKyAgICAgICAgZmxvYXQgZ3JhZGllbnRSYWRpdXMoKSBjb25zdDsKKyAgICAgICAgdm9pZCBz
ZXRHcmFkaWVudFJhZGl1cyhmbG9hdCk7CisKKyAgICAgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mKSBjb25zdDsKKworI2lmIFBMQVRGT1JN
KFFUKQorICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0dXAoS1JlbmRlcmluZ0RldmljZUNvbnRleHQq
LCBjb25zdCBSZW5kZXJPYmplY3QqLCBTVkdQYWludFRhcmdldFR5cGUpIGNvbnN0OworI2VuZGlm
CisKKyAgICBwcml2YXRlOgorICAgICAgICBmbG9hdCBtX3JhZGl1czsKKyAgICAgICAgRmxvYXRQ
b2ludCBtX2NlbnRlcjsKKyAgICAgICAgRmxvYXRQb2ludCBtX2ZvY2FsOworICAgIH07CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBTVkdQYWludFNlcnZl
clJhZGlhbEdyYWRpZW50X0gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NW
R1BhaW50U2VydmVyU29saWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3ZnL1NWR1BhaW50U2VydmVyU29saWQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmZGVmIFNWR19TVVBQT1JUCisjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5o
IgorI2luY2x1ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitTVkdQYWludFNlcnZlclNvbGlkOjpTVkdQYWludFNlcnZlclNvbGlkKCkKK3sKK30KKwor
U1ZHUGFpbnRTZXJ2ZXJTb2xpZDo6flNWR1BhaW50U2VydmVyU29saWQoKQoreworfQorCitDb2xv
ciBTVkdQYWludFNlcnZlclNvbGlkOjpjb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29s
b3I7Cit9CisKK3ZvaWQgU1ZHUGFpbnRTZXJ2ZXJTb2xpZDo6c2V0Q29sb3IoY29uc3QgQ29sb3Im
IGNvbG9yKQoreworICAgIG1fY29sb3IgPSBjb2xvcjsKK30KKworVGV4dFN0cmVhbSYgU1ZHUGFp
bnRTZXJ2ZXJTb2xpZDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cykgY29u
c3QKK3sKKyAgICB0cyA8PCAiW3R5cGU9U09MSURdIgorICAgICAgICA8PCAiIFtjb2xvcj0iPDwg
Y29sb3IoKSA8PCAiXSI7CisgICAgcmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUGFp
bnRTZXJ2ZXJTb2xpZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3ZnL1NWR1BhaW50U2VydmVyU29saWQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3ZnL1NWR1BhaW50U2VydmVyU29saWQuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTVkdQYWludFNlcnZlclNvbGlk
X0gKKyNkZWZpbmUgU1ZHUGFpbnRTZXJ2ZXJTb2xpZF9ICisKKyNpZmRlZiBTVkdfU1VQUE9SVAor
CisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJTVkdQYWludFNlcnZlci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBTVkdQYWludFNlcnZlclNvbGlkIDogcHVibGlj
IFNWR1BhaW50U2VydmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNWR1BhaW50U2VydmVyU29s
aWQoKTsKKyAgICAgICAgdmlydHVhbCB+U1ZHUGFpbnRTZXJ2ZXJTb2xpZCgpOworCisgICAgICAg
IHZpcnR1YWwgU1ZHUGFpbnRTZXJ2ZXJUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBQU19TT0xJ
RDsgfQorCisgICAgICAgIENvbG9yIGNvbG9yKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0Q29s
b3IoY29uc3QgQ29sb3ImKTsKKworICAgICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYpIGNvbnN0OworCisjaWYgUExBVEZPUk0oTUFDKSB8
fCBQTEFURk9STShRVCkKKyAgICAgICAgdmlydHVhbCBib29sIHNldHVwKEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0KiwgY29uc3QgUmVuZGVyT2JqZWN0KiwgU1ZHUGFpbnRUYXJnZXRUeXBlKSBjb25z
dDsKKyNlbmRpZgorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ29sb3IgbV9jb2xvcjsKKyAgICB9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gU1ZHUGFp
bnRTZXJ2ZXJTb2xpZF9ICkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdS
ZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcv
U1ZHUmVzb3VyY2UuY3BwCShyZXZpc2lvbiAxNzg2MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3ZnL1NWR1Jlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTEgKzI0LDEw
IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNWR1Jlc291cmNlLmgi
CiAKICNpZmRlZiBTVkdfU1VQUE9SVAorI2luY2x1ZGUgIlNWR1Jlc291cmNlLmgiCiAKLSNpbmNs
dWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCiAj
aW5jbHVkZSAiU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKQEAg
LTk2LDE2ICs5NSw2IEBAIFNWR1Jlc291cmNlKiBnZXRSZXNvdXJjZUJ5SWQoRG9jdW1lbnQqIGQK
ICAgICByZXR1cm4gMDsKIH0KIAotS1JlbmRlcmluZ1BhaW50U2VydmVyKiBnZXRQYWludFNlcnZl
ckJ5SWQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIGlkKQotewotICAg
IFNWR1Jlc291cmNlKiByZXNvdXJjZSA9IGdldFJlc291cmNlQnlJZChkb2N1bWVudCwgaWQpOwot
ICAgIGlmIChyZXNvdXJjZSAmJiByZXNvdXJjZS0+aXNQYWludFNlcnZlcigpKQotICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ1BhaW50U2VydmVyKj4ocmVzb3VyY2UpOwotCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLQogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgU1ZHUmVzb3VyY2UmIHIpCiB7CiAgICAgcmV0dXJuIHIuZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbih0cyk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdSZXNv
dXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1Jl
c291cmNlLmgJKHJldmlzaW9uIDE3ODYyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dmcvU1ZHUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgUmVuZGVyUGF0aDsKICAgICBjbGFzcyBUZXh0U3RyZWFt
OwogICAgIGNsYXNzIEF0b21pY1N0cmluZzsKLSAgICBjbGFzcyBLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXI7CiAKICAgICB0eXBlZGVmIFZlY3Rvcjxjb25zdCBSZW5kZXJQYXRoKj4gUmVuZGVyUGF0aExp
c3Q7CiAKQEAgLTk1LDcgKzk0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIH07CiAKICAg
ICBTVkdSZXNvdXJjZSogZ2V0UmVzb3VyY2VCeUlkKERvY3VtZW50KiwgY29uc3QgQXRvbWljU3Ry
aW5nJik7Ci0gICAgS1JlbmRlcmluZ1BhaW50U2VydmVyKiBnZXRQYWludFNlcnZlckJ5SWQoRG9j
dW1lbnQqLCBjb25zdCBBdG9taWNTdHJpbmcmKTsKIAogICAgIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYsIGNvbnN0IFNWR1Jlc291cmNlJik7CiAKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3ZnL1NWR1Jlc291cmNlQ2xpcHBlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAkocmV2
aXNpb24gMTc4NjIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdSZXNvdXJj
ZUNsaXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw5ICsyNCw5IEBACiAgKi8KIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNWR1Jlc291cmNlQ2xpcHBlci5oIgogCiAjaWZk
ZWYgU1ZHX1NVUFBPUlQKKyNpbmNsdWRlICJTVkdSZXNvdXJjZUNsaXBwZXIuaCIKIAogI2luY2x1
ZGUgIlNWR1JlbmRlclRyZWVBc1RleHQuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdSZXNvdXJjZU1hcmtlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUmVzb3VyY2VNYXJr
ZXIuY3BwCShyZXZpc2lvbiAxNzg2MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Zn
L1NWR1Jlc291cmNlTWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsOSArMjQsOSBAQAog
ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTVkdSZXNvdXJjZU1hcmtlci5o
IgogCiAjaWZkZWYgU1ZHX1NVUFBPUlQKKyNpbmNsdWRlICJTVkdSZXNvdXJjZU1hcmtlci5oIgog
CiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9TVkdSZXNvdXJjZU1hc2tl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvU1ZHUmVz
b3VyY2VNYXNrZXIuY3BwCShyZXZpc2lvbiAxNzg2MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3ZnL1NWR1Jlc291cmNlTWFza2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsOSAr
MjQsOSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTVkdSZXNvdXJj
ZU1hc2tlci5oIgogCiAjaWZkZWYgU1ZHX1NVUFBPUlQKKyNpbmNsdWRlICJTVkdSZXNvdXJjZU1h
c2tlci5oIgogCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgIlNWR1Jlc291cmNl
SW1hZ2UuaCIKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NnL1NWR1BhaW50
U2VydmVyQ2cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Zn
L2NnL1NWR1BhaW50U2VydmVyQ2cuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdmcvY2cvU1ZHUGFpbnRTZXJ2ZXJDZy5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsOTEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFu
biA8d2lsZGZveEBrZGUub3JnPgorCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBw
cm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAg
YWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRl
bXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4K
KyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmZGVmIFNWR19TVVBQT1JUCisjaW5jbHVk
ZSAiU1ZHUGFpbnRTZXJ2ZXIuaCIKKworI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2VRdWFydHou
aCIKKyNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9p
ZCBTVkdQYWludFNlcnZlcjo6ZHJhdyhLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCwg
Y29uc3QgUmVuZGVyUGF0aCogcGF0aCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit7
CisgICAgaWYgKCFzZXR1cChjb250ZXh0LCBwYXRoLCB0eXBlKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgcmVuZGVyUGF0aChjb250ZXh0LCBwYXRoLCB0eXBlKTsKKyAgICB0ZWFyZG93bihjb250
ZXh0LCBwYXRoLCB0eXBlKTsKK30KKwordm9pZCBTVkdQYWludFNlcnZlcjo6dGVhcmRvd24oS1Jl
bmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJPYmplY3QqLCBTVkdQYWludFRhcmdl
dFR5cGUpIGNvbnN0Cit7CisgICAgLy8gbm8tb3AKK30KKwordm9pZCBTVkdQYWludFNlcnZlcjo6
cmVuZGVyUGF0aChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVy
UGF0aCogcGF0aCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0Cit7CisgICAgUmVuZGVy
U3R5bGUqIHN0eWxlID0gcGF0aC0+c3R5bGUoKTsKKworICAgIEtSZW5kZXJpbmdEZXZpY2VDb250
ZXh0UXVhcnR6KiBxdWFydHpDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNv
bnRleHRRdWFydHoqPihjb250ZXh0KTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dFJlZiA9IHF1
YXJ0ekNvbnRleHQtPmNnQ29udGV4dCgpOworCisgICAgaWYgKCh0eXBlICYgQVBQTFlfVE9fRklM
TCkgJiYgc3R5bGUtPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKSkKKyAgICAgICAgZmlsbFBhdGgoY29u
dGV4dFJlZiwgcGF0aCk7CisKKyAgICBpZiAoKHR5cGUgJiBBUFBMWV9UT19TVFJPS0UpICYmIHN0
eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSkKKyAgICAgICAgc3Ryb2tlUGF0aChjb250ZXh0
UmVmLCBwYXRoKTsKK30KKwordm9pZCBTVkdQYWludFNlcnZlcjo6c3Ryb2tlUGF0aChDR0NvbnRl
eHRSZWYgY29udGV4dCwgY29uc3QgUmVuZGVyUGF0aCopIGNvbnN0Cit7CisgICAgQ0dDb250ZXh0
U3Ryb2tlUGF0aChjb250ZXh0KTsKK30KKwordm9pZCBTVkdQYWludFNlcnZlcjo6Y2xpcFRvU3Ry
b2tlUGF0aChDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgUmVuZGVyUGF0aCopIGNvbnN0Cit7
CisgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgoY29udGV4dCk7CisgICAg
Q0dDb250ZXh0Q2xpcChjb250ZXh0KTsKK30KKwordm9pZCBTVkdQYWludFNlcnZlcjo6ZmlsbFBh
dGgoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IFJlbmRlclBhdGgqIHBhdGgpIGNvbnN0Cit7
CisgICAgaWYgKHBhdGgtPnN0eWxlKCktPnN2Z1N0eWxlKCktPmZpbGxSdWxlKCkgPT0gUlVMRV9F
VkVOT0REKQorICAgICAgICBDR0NvbnRleHRFT0ZpbGxQYXRoKGNvbnRleHQpOworICAgIGVsc2UK
KyAgICAgICAgQ0dDb250ZXh0RmlsbFBhdGgoY29udGV4dCk7Cit9CisKK3ZvaWQgU1ZHUGFpbnRT
ZXJ2ZXI6OmNsaXBUb0ZpbGxQYXRoKENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBSZW5kZXJQ
YXRoKiBwYXRoKSBjb25zdAoreworICAgIGlmIChwYXRoLT5zdHlsZSgpLT5zdmdTdHlsZSgpLT5m
aWxsUnVsZSgpID09IFJVTEVfRVZFTk9ERCkKKyAgICAgICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRl
eHQpOworICAgIGVsc2UKKyAgICAgICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworLy8gdmltOnRzPTQ6bm9ldApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvY2cvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENn
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jZy9TVkdQ
YWludFNlcnZlckdyYWRpZW50Q2cuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdmcvY2cvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyODkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMg
WmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIEtERSBwcm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEz
MDcsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmZGVmIFNWR19TVVBQT1JU
CisjaW5jbHVkZSAiU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5oIgorCisjaW5jbHVkZSAiS1JlbmRl
cmluZ0RldmljZVF1YXJ0ei5oIgorI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyTGluZWFyR3JhZGll
bnQuaCIKKyNpbmNsdWRlICJTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50LmgiCisjaW5jbHVk
ZSAiUmVuZGVyUGF0aC5oIgorI2luY2x1ZGUgIlF1YXJ0elN1cHBvcnQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgdm9pZCBjZ0dyYWRpZW50Q2FsbGJhY2sodm9pZCogaW5mbywg
Y29uc3QgQ0dGbG9hdCogaW5WYWx1ZXMsIENHRmxvYXQqIG91dENvbG9yKQoreworICAgIGNvbnN0
IFNWR1BhaW50U2VydmVyR3JhZGllbnQqIHNlcnZlciA9IChjb25zdCBTVkdQYWludFNlcnZlckdy
YWRpZW50KilpbmZvOworICAgIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OlF1YXJ0ekdyYWRpZW50
U3RvcCogc3RvcHMgPSBzZXJ2ZXItPm1fc3RvcHNDYWNoZTsKKyAgICBpbnQgc3RvcHNDb3VudCA9
IHNlcnZlci0+bV9zdG9wc0NvdW50OworCisgICAgQ0dGbG9hdCBpblZhbHVlID0gaW5WYWx1ZXNb
MF07CisKKyAgICBpZiAoIXN0b3BzQ291bnQpIHsKKyAgICAgICAgb3V0Q29sb3JbMF0gPSAwOwor
ICAgICAgICBvdXRDb2xvclsxXSA9IDA7CisgICAgICAgIG91dENvbG9yWzJdID0gMDsKKyAgICAg
ICAgb3V0Q29sb3JbM10gPSAxOworICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIGlmIChzdG9w
c0NvdW50ID09IDEpIHsKKyAgICAgICAgbWVtY3B5KG91dENvbG9yLCBzdG9wc1swXS5jb2xvckFy
cmF5LCA0ICogc2l6ZW9mKENHRmxvYXQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghKGluVmFsdWUgPiBzdG9wc1swXS5vZmZzZXQpKQorICAgICAgICBtZW1jcHkob3V0Q29s
b3IsIHN0b3BzWzBdLmNvbG9yQXJyYXksIDQgKiBzaXplb2YoQ0dGbG9hdCkpOworICAgIGVsc2Ug
aWYgKCEoaW5WYWx1ZSA8IHN0b3BzW3N0b3BzQ291bnQtMV0ub2Zmc2V0KSkKKyAgICAgICAgbWVt
Y3B5KG91dENvbG9yLCBzdG9wc1tzdG9wc0NvdW50LTFdLmNvbG9yQXJyYXksIDQgKiBzaXplb2Yo
Q0dGbG9hdCkpOworICAgIGVsc2UgeworICAgICAgICBpbnQgbmV4dFN0b3BJbmRleCA9IDA7Cisg
ICAgICAgIHdoaWxlICgobmV4dFN0b3BJbmRleCA8IHN0b3BzQ291bnQpICYmIChzdG9wc1tuZXh0
U3RvcEluZGV4XS5vZmZzZXQgPCBpblZhbHVlKSkKKyAgICAgICAgICAgIG5leHRTdG9wSW5kZXgr
KzsKKworICAgICAgICAvL2Zsb2F0IG5leHRPZmZzZXQgPSBzdG9wc1tuZXh0U3RvcEluZGV4XS5v
ZmZzZXQ7CisgICAgICAgIENHRmxvYXQgKm5leHRDb2xvckFycmF5ID0gc3RvcHNbbmV4dFN0b3BJ
bmRleF0uY29sb3JBcnJheTsKKyAgICAgICAgQ0dGbG9hdCAqcHJldmlvdXNDb2xvckFycmF5ID0g
c3RvcHNbbmV4dFN0b3BJbmRleC0xXS5jb2xvckFycmF5OworICAgICAgICAvL2Zsb2F0IHRvdGFs
RGVsdGEgPSBuZXh0T2Zmc2V0IC0gcHJldmlvdXNPZmZzZXQ7CisgICAgICAgIENHRmxvYXQgZGlm
ZkZyb21QcmV2aW91cyA9IGluVmFsdWUgLSBzdG9wc1tuZXh0U3RvcEluZGV4LTFdLm9mZnNldDsK
KyAgICAgICAgLy9mbG9hdCBwZXJjZW50ID0gZGlmZkZyb21QcmV2aW91cyAvIHRvdGFsRGVsdGE7
CisgICAgICAgIENHRmxvYXQgcGVyY2VudCA9IGRpZmZGcm9tUHJldmlvdXMgKiBzdG9wc1tuZXh0
U3RvcEluZGV4XS5wcmV2aW91c0RlbHRhSW52ZXJzZTsKKworICAgICAgICBvdXRDb2xvclswXSA9
ICgoMS4wIC0gcGVyY2VudCkgKiBwcmV2aW91c0NvbG9yQXJyYXlbMF0gKyBwZXJjZW50ICogbmV4
dENvbG9yQXJyYXlbMF0pOworICAgICAgICBvdXRDb2xvclsxXSA9ICgoMS4wIC0gcGVyY2VudCkg
KiBwcmV2aW91c0NvbG9yQXJyYXlbMV0gKyBwZXJjZW50ICogbmV4dENvbG9yQXJyYXlbMV0pOwor
ICAgICAgICBvdXRDb2xvclsyXSA9ICgoMS4wIC0gcGVyY2VudCkgKiBwcmV2aW91c0NvbG9yQXJy
YXlbMl0gKyBwZXJjZW50ICogbmV4dENvbG9yQXJyYXlbMl0pOworICAgICAgICBvdXRDb2xvclsz
XSA9ICgoMS4wIC0gcGVyY2VudCkgKiBwcmV2aW91c0NvbG9yQXJyYXlbM10gKyBwZXJjZW50ICog
bmV4dENvbG9yQXJyYXlbM10pOworICAgIH0KKyAgICAvLyBGSVhNRTogaGF2ZSB0byBoYW5kbGUg
dGhlIHNwcmVhZE1ldGhvZCgpcyBoZXJlIFNQUkVBRE1FVEhPRF9SRVBFQVQsIGV0Yy4KK30KKwor
c3RhdGljIENHU2hhZGluZ1JlZiBDR1NoYWRpbmdSZWZGb3JMaW5lYXJHcmFkaWVudChjb25zdCBT
VkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50KiBzZXJ2ZXIpCit7CisgICAgQ0dQb2ludCBzdGFy
dCA9IENHUG9pbnQoc2VydmVyLT5ncmFkaWVudFN0YXJ0KCkpOworICAgIENHUG9pbnQgZW5kID0g
Q0dQb2ludChzZXJ2ZXItPmdyYWRpZW50RW5kKCkpOworCisgICAgQ0dGdW5jdGlvbkNhbGxiYWNr
cyBjYWxsYmFja3MgPSB7MCwgY2dHcmFkaWVudENhbGxiYWNrLCBOVUxMfTsKKyAgICBDR0Zsb2F0
IGRvbWFpbkxpbWl0c1syXSA9IHswLCAxfTsKKyAgICBDR0Zsb2F0IHJhbmdlTGltaXRzWzhdID0g
ezAsIDEsIDAsIDEsIDAsIDEsIDAsIDF9OworICAgIENHRnVuY3Rpb25SZWYgc2hhZGluZ0Z1bmN0
aW9uID0gQ0dGdW5jdGlvbkNyZWF0ZSgodm9pZCAqKXNlcnZlciwgMSwgZG9tYWluTGltaXRzLCA0
LCByYW5nZUxpbWl0cywgJmNhbGxiYWNrcyk7CisKKyAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JT
cGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOworICAgIENHU2hhZGluZ1JlZiBz
aGFkaW5nID0gQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY29sb3JTcGFjZSwgc3RhcnQsIGVuZCwgc2hh
ZGluZ0Z1bmN0aW9uLCB0cnVlLCB0cnVlKTsKKyAgICBDR0NvbG9yU3BhY2VSZWxlYXNlKGNvbG9y
U3BhY2UpOworICAgIENHRnVuY3Rpb25SZWxlYXNlKHNoYWRpbmdGdW5jdGlvbik7CisgICAgcmV0
dXJuIHNoYWRpbmc7Cit9CisKK3N0YXRpYyBDR1NoYWRpbmdSZWYgQ0dTaGFkaW5nUmVmRm9yUmFk
aWFsR3JhZGllbnQoY29uc3QgU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudCogc2VydmVyKQor
eworICAgIENHUG9pbnQgY2VudGVyID0gQ0dQb2ludChzZXJ2ZXItPmdyYWRpZW50Q2VudGVyKCkp
OworICAgIENHUG9pbnQgZm9jdXMgPSBDR1BvaW50KHNlcnZlci0+Z3JhZGllbnRGb2NhbCgpKTsK
KyAgICBkb3VibGUgcmFkaXVzID0gc2VydmVyLT5ncmFkaWVudFJhZGl1cygpOworCisgICAgZG91
YmxlIGZkeCA9IGZvY3VzLnggLSBjZW50ZXIueDsKKyAgICBkb3VibGUgZmR5ID0gZm9jdXMueSAt
IGNlbnRlci55OworCisgICAgLy8gU3BlYzogSWYgKGZ4LCBmeSkgbGllcyBvdXRzaWRlIHRoZSBj
aXJjbGUgZGVmaW5lZCBieSAoY3gsIGN5KSBhbmQgciwgc2V0IChmeCwgZnkpCisgICAgLy8gdG8g
dGhlIHBvaW50IG9mIGludGVyc2VjdGlvbiBvZiB0aGUgbGluZSB0aHJvdWdoIChmeCwgZnkpIGFu
ZCB0aGUgY2lyY2xlLgorICAgIGlmIChzcXJ0KGZkeCpmZHggKyBmZHkqZmR5KSA+IHJhZGl1cykg
eworICAgICAgICBkb3VibGUgYW5nbGUgPSBhdGFuMihmb2N1cy55LCBmb2N1cy54KTsKKyAgICAg
ICAgZm9jdXMueCA9IGludChjb3MoYW5nbGUpICogcmFkaXVzKSAtIDE7CisgICAgICAgIGZvY3Vz
LnkgPSBpbnQoc2luKGFuZ2xlKSAqIHJhZGl1cykgLSAxOworICAgIH0KKworICAgIENHRnVuY3Rp
b25DYWxsYmFja3MgY2FsbGJhY2tzID0gezAsIGNnR3JhZGllbnRDYWxsYmFjaywgTlVMTH07Cisg
ICAgQ0dGbG9hdCBkb21haW5MaW1pdHNbMl0gPSB7MCwgMX07CisgICAgQ0dGbG9hdCByYW5nZUxp
bWl0c1s4XSA9IHswLCAxLCAwLCAxLCAwLCAxLCAwLCAxfTsKKyAgICBDR0Z1bmN0aW9uUmVmIHNo
YWRpbmdGdW5jdGlvbiA9IENHRnVuY3Rpb25DcmVhdGUoKHZvaWQgKilzZXJ2ZXIsIDEsIGRvbWFp
bkxpbWl0cywgNCwgcmFuZ2VMaW1pdHMsICZjYWxsYmFja3MpOworCisgICAgQ0dDb2xvclNwYWNl
UmVmIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsKKyAgICBDR1No
YWRpbmdSZWYgc2hhZGluZyA9IENHU2hhZGluZ0NyZWF0ZVJhZGlhbChjb2xvclNwYWNlLCBmb2N1
cywgMCwgY2VudGVyLCByYWRpdXMsIHNoYWRpbmdGdW5jdGlvbiwgdHJ1ZSwgdHJ1ZSk7CisgICAg
Q0dDb2xvclNwYWNlUmVsZWFzZShjb2xvclNwYWNlKTsKKyAgICBDR0Z1bmN0aW9uUmVsZWFzZShz
aGFkaW5nRnVuY3Rpb24pOworICAgIHJldHVybiBzaGFkaW5nOworfQorCit2b2lkIFNWR1BhaW50
U2VydmVyR3JhZGllbnQ6OmludmFsaWRhdGVDYWNoZXMoKQoreworICAgIGRlbGV0ZSBtX3N0b3Bz
Q2FjaGU7CisgICAgQ0dTaGFkaW5nUmVsZWFzZShtX3NoYWRpbmdDYWNoZSk7CisKKyAgICBtX3N0
b3BzQ2FjaGUgPSAwOworICAgIG1fc2hhZGluZ0NhY2hlID0gMDsKK30KKwordm9pZCBTVkdQYWlu
dFNlcnZlckdyYWRpZW50Ojp1cGRhdGVRdWFydHpHcmFkaWVudFN0b3BzQ2FjaGUoY29uc3QgVmVj
dG9yPFNWR0dyYWRpZW50U3RvcD4mIHN0b3BzKQoreworICAgIGRlbGV0ZSBtX3N0b3BzQ2FjaGU7
CisKKyAgICBtX3N0b3BzQ291bnQgPSBzdG9wcy5zaXplKCk7CisgICAgbV9zdG9wc0NhY2hlID0g
bmV3IFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OlF1YXJ0ekdyYWRpZW50U3RvcFttX3N0b3BzQ291
bnRdOworCisgICAgQ0dGbG9hdCBwcmV2aW91c09mZnNldCA9IDAuMDsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc3RvcHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgbV9zdG9wc0NhY2hl
W2ldLm9mZnNldCA9IHN0b3BzW2ldLmZpcnN0OworICAgICAgICBtX3N0b3BzQ2FjaGVbaV0ucHJl
dmlvdXNEZWx0YUludmVyc2UgPSAxLjAgLyAoc3RvcHNbaV0uZmlyc3QgLSBwcmV2aW91c09mZnNl
dCk7CisgICAgICAgIHByZXZpb3VzT2Zmc2V0ID0gc3RvcHNbaV0uZmlyc3Q7CisgICAgICAgIENH
RmxvYXQgKmNhID0gbV9zdG9wc0NhY2hlW2ldLmNvbG9yQXJyYXk7CisgICAgICAgIHN0b3BzW2ld
LnNlY29uZC5nZXRSR0JBKGNhWzBdLCBjYVsxXSwgY2FbMl0sIGNhWzNdKTsKKyAgICB9Cit9CisK
K3ZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6dXBkYXRlUXVhcnR6R3JhZGllbnRDYWNoZShj
b25zdCBTVkdQYWludFNlcnZlckdyYWRpZW50KiBzZXJ2ZXIpCit7CisgICAgLy8gY2FjaGUgb3Vy
IG93biBjb3B5IG9mIHRoZSBzdG9wcyBmb3IgZmFzdGVyIGFjY2Vzcy4KKyAgICAvLyB0aGlzIGlz
IGxlZ2FjeSBjb2RlLCBwcm9iYWJseSBjb3VsZCBiZSByZXdvcmtlZC4KKyAgICBpZiAoIW1fc3Rv
cHNDYWNoZSkKKyAgICAgICAgdXBkYXRlUXVhcnR6R3JhZGllbnRTdG9wc0NhY2hlKGdyYWRpZW50
U3RvcHMoKSk7CisKKyAgICBpZiAobV9zaGFkaW5nQ2FjaGUpCisgICAgICAgIENHU2hhZGluZ1Jl
bGVhc2UobV9zaGFkaW5nQ2FjaGUpOworCisgICAgaWYgKHR5cGUoKSA9PSBQU19SQURJQUxfR1JB
RElFTlQpIHsKKyAgICAgICAgY29uc3QgU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudCogcmFk
aWFsID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudCo+KHNl
cnZlcik7CisgICAgICAgIG1fc2hhZGluZ0NhY2hlID0gQ0dTaGFkaW5nUmVmRm9yUmFkaWFsR3Jh
ZGllbnQocmFkaWFsKTsKKyAgICB9IGVsc2UgaWYgKHR5cGUoKSA9PSBQU19MSU5FQVJfR1JBRElF
TlQpIHsKKyAgICAgICAgY29uc3QgU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudCogbGluZWFy
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudCo+KHNlcnZl
cik7CisgICAgICAgIG1fc2hhZGluZ0NhY2hlID0gQ0dTaGFkaW5nUmVmRm9yTGluZWFyR3JhZGll
bnQobGluZWFyKTsKKyAgICB9Cit9CisKK3ZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6dGVh
cmRvd24oS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVj
dCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBDR1NoYWRp
bmdSZWYgc2hhZGluZyA9IG1fc2hhZGluZ0NhY2hlOworICAgIEtSZW5kZXJpbmdEZXZpY2VRdWFy
dHoqIHF1YXJ0ekRldmljZSA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VRdWFydHoqPihy
ZW5kZXJpbmdEZXZpY2UoKSk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHRSZWYgPSBxdWFydHpE
ZXZpY2UtPmN1cnJlbnRDR0NvbnRleHQoKTsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmpl
Y3QtPnN0eWxlKCk7CisgICAgQVNTRVJUKGNvbnRleHRSZWYgIT0gTlVMTCk7CisKKyAgICBpZiAo
KHR5cGUgJiBBUFBMWV9UT19GSUxMKSAmJiBzdHlsZS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKSB7
CisgICAgICAgIC8vIHdvcmthcm91bmQgZm9yIGZpbGxpbmcgdGhlIGVudGlyZSBzY3JlZW4gd2l0
aCB0aGUgc2hhZGluZyBpbiB0aGUgY2FzZSB0aGF0IG5vIHRleHQgd2FzIGludGVyc2VjdGVkIHdp
dGggdGhlIGNsaXAKKyAgICAgICAgaWYgKCFpc1BhaW50aW5nVGV4dCgpIHx8IChvYmplY3QtPndp
ZHRoKCkgPiAwICYmIG9iamVjdC0+aGVpZ2h0KCkgPiAwKSkKKyAgICAgICAgICAgIENHQ29udGV4
dERyYXdTaGFkaW5nKGNvbnRleHRSZWYsIHNoYWRpbmcpOworICAgICAgICBDR0NvbnRleHRSZXN0
b3JlR1N0YXRlKGNvbnRleHRSZWYpOworICAgIH0KKworICAgIGlmICgodHlwZSAmIEFQUExZX1RP
X1NUUk9LRSkgJiYgc3R5bGUtPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgpKSB7CisgICAgICAgIGlm
IChpc1BhaW50aW5nVGV4dCgpKSB7CisgICAgICAgICAgICBpbnQgd2lkdGggID0gMjA0ODsKKyAg
ICAgICAgICAgIGludCBoZWlnaHQgPSAyMDQ4OyAvLyBGSVhNRT8/PyBTRUUgQUJPVkUKKyAgICAg
ICAgICAgIGRlbGV0ZSBxdWFydHpEZXZpY2UtPnBvcENvbnRleHQoKTsKKyAgICAgICAgICAgIGNv
bnRleHRSZWYgPSBxdWFydHpEZXZpY2UtPmN1cnJlbnRDR0NvbnRleHQoKTsKKyAgICAgICAgICAg
IHZvaWQqIGltYWdlQnVmZmVyID0gZmFzdE1hbGxvYyh3aWR0aCAqIGhlaWdodCk7CisgICAgICAg
ICAgICBDR0NvbG9yU3BhY2VSZWYgZ3JheUNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVE
ZXZpY2VHcmF5KCk7CisgICAgICAgICAgICBDR0NvbnRleHRSZWYgZ3JheXNjYWxlQ29udGV4dCA9
IENHQml0bWFwQ29udGV4dENyZWF0ZShpbWFnZUJ1ZmZlciwgd2lkdGgsIGhlaWdodCwgOCwgd2lk
dGgsIGdyYXlDb2xvclNwYWNlLCBrQ0dJbWFnZUFscGhhTm9uZSk7CisgICAgICAgICAgICBDR0Nv
bG9yU3BhY2VSZWxlYXNlKGdyYXlDb2xvclNwYWNlKTsKKyAgICAgICAgICAgIENHQ29udGV4dERy
YXdMYXllckF0UG9pbnQoZ3JheXNjYWxlQ29udGV4dCwgQ0dQb2ludE1ha2UoMCwgMCksIG1fbWFz
a0ltYWdlLT5jZ0xheWVyKCkpOworICAgICAgICAgICAgQ0dJbWFnZVJlZiBncmF5c2NhbGVJbWFn
ZSA9IENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGdyYXlzY2FsZUNvbnRleHQpOworICAgICAg
ICAgICAgQ0dDb250ZXh0Q2xpcFRvTWFzayhjb250ZXh0UmVmLCBDR1JlY3RNYWtlKDAsIDAsIHdp
ZHRoLCBoZWlnaHQpLCBncmF5c2NhbGVJbWFnZSk7CisgICAgICAgICAgICBDR0NvbnRleHRSZWxl
YXNlKGdyYXlzY2FsZUNvbnRleHQpOworICAgICAgICAgICAgQ0dJbWFnZVJlbGVhc2UoZ3JheXNj
YWxlSW1hZ2UpOworICAgICAgICB9CisgICAgICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRl
eHRSZWYsIHNoYWRpbmcpOworICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHRS
ZWYpOworICAgIH0KKworICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dFJlZik7Cit9
CisKK3ZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6cmVuZGVyUGF0aChLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcGF0aCwgU1ZHUGFpbnRUYXJn
ZXRUeXBlIHR5cGUpIGNvbnN0Cit7CisgICAgS1JlbmRlcmluZ0RldmljZVF1YXJ0eiogcXVhcnR6
RGV2aWNlID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZVF1YXJ0eio+KHJlbmRlcmluZ0Rl
dmljZSgpKTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dFJlZiA9IHF1YXJ0ekRldmljZS0+Y3Vy
cmVudENHQ29udGV4dCgpOworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHBhdGgtPnN0eWxlKCk7
CisgICAgQVNTRVJUKGNvbnRleHRSZWYgIT0gTlVMTCk7CisKKyAgICBDR1JlY3Qgb2JqZWN0QkJv
eDsKKyAgICBpZiAoYm91bmRpbmdCb3hNb2RlKCkpCisgICAgICAgIG9iamVjdEJCb3ggPSBDR0Nv
bnRleHRHZXRQYXRoQm91bmRpbmdCb3goY29udGV4dFJlZik7CisgICAgaWYgKCh0eXBlICYgQVBQ
TFlfVE9fRklMTCkgJiYgc3R5bGUtPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKSkKKyAgICAgICAgY2xp
cFRvRmlsbFBhdGgoY29udGV4dFJlZiwgcGF0aCk7CisgICAgaWYgKCh0eXBlICYgQVBQTFlfVE9f
U1RST0tFKSAmJiBzdHlsZS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpCisgICAgICAgIGNsaXBU
b1N0cm9rZVBhdGgoY29udGV4dFJlZiwgcGF0aCk7CisgICAgLy8gbWFrZSB0aGUgZ3JhZGllbnQg
Zml0IGluIHRoZSBiYm94IGlmIG5lY2Vzc2FyeS4KKyAgICBpZiAoYm91bmRpbmdCb3hNb2RlKCkp
IHsgLy8gbm8gc3VwcG9ydCBmb3IgYm91bmRpbmcgYm94ZXMgYXJvdW5kIHRleHQgeWV0IQorICAg
ICAgICAvLyBnZXQgdGhlIG9iamVjdCBiYm94CisgICAgICAgIENHUmVjdCBncmFkaWVudEJCb3gg
PSBDR1JlY3RNYWtlKDAsMCwxMDAsMTAwKTsgLy8gRklYTUUgLSB0aGlzIGlzIGFyYml0cmFyeSBu
bz8KKyAgICAgICAgLy8gZ2VuZXJhdGUgYSB0cmFuc2Zvcm0gdG8gbWFwIGJldHdlZW4gdGhlIHR3
by4KKyAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gZ3JhZGllbnRJbnRvT2JqZWN0QkJveCA9IENH
QWZmaW5lVHJhbnNmb3JtTWFrZU1hcEJldHdlZW5SZWN0cyhncmFkaWVudEJCb3gsIG9iamVjdEJC
b3gpOworICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dFJlZiwgZ3JhZGllbnRJbnRv
T2JqZWN0QkJveCk7CisgICAgfQorCisgICAgLy8gYXBwbHkgdGhlIGdyYWRpZW50J3Mgb3duIHRy
YW5zZm9ybQorICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdyYWRpZW50VHJhbnNm
b3JtKCk7CisgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHRSZWYsIHRyYW5zZm9ybSk7Cit9
CisKK2Jvb2wgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXAoS1JlbmRlcmluZ0RldmljZUNv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdl
dFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBpZiAobGlzdGVuZXIoKSkgLy8gdGhpcyBzZWVtcyBs
aWtlIGJhZCBkZXNpZ24gdG8gbWUsIHNob3VsZCBiZSBpbiBhIGNvbW1vbiBiYXNlY2xhc3MuIC0t
IGVjcyA4LzYvMDUKKyAgICAgICAgbGlzdGVuZXIoKS0+cmVzb3VyY2VOb3RpZmljYXRpb24oKTsK
KworICAgIC8vIEZJWE1FOiB0b3RhbCBjb25zdCBIQUNLIQorICAgIC8vIFdlIG5lZWQgYSBob29r
IHRvIGNhbGwgdGhpcyB3aGVuIHRoZSBncmFkaWVudCBnZXRzIHVwZGF0ZWQsIGJlZm9yZSBkcmF3
bi4KKyAgICBpZiAoIW1fc2hhZGluZ0NhY2hlKQorICAgICAgICBjb25zdF9jYXN0PFNWR1BhaW50
U2VydmVyR3JhZGllbnQqPih0aGlzKS0+dXBkYXRlUXVhcnR6R3JhZGllbnRDYWNoZSh0aGlzKTsK
KworICAgIEtSZW5kZXJpbmdEZXZpY2VRdWFydHoqIHF1YXJ0ekRldmljZSA9IHN0YXRpY19jYXN0
PEtSZW5kZXJpbmdEZXZpY2VRdWFydHoqPihyZW5kZXJpbmdEZXZpY2UoKSk7CisgICAgQ0dDb250
ZXh0UmVmIGNvbnRleHRSZWYgPSBxdWFydHpEZXZpY2UtPmN1cnJlbnRDR0NvbnRleHQoKTsKKyAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CisgICAgQVNTRVJUKGNvbnRl
eHRSZWYgIT0gTlVMTCk7CisKKyAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHRSZWYpOwor
ICAgIENHQ29udGV4dFNldEFscGhhKGNvbnRleHRSZWYsIHN0eWxlLT5vcGFjaXR5KCkpOworCisg
ICAgaWYgKCh0eXBlICYgQVBQTFlfVE9fRklMTCkgJiYgc3R5bGUtPnN2Z1N0eWxlKCktPmhhc0Zp
bGwoKSkgeworICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHRSZWYpOworICAgICAg
ICBpZiAoaXNQYWludGluZ1RleHQoKSkKKyAgICAgICAgICAgIENHQ29udGV4dFNldFRleHREcmF3
aW5nTW9kZShjb250ZXh0UmVmLCBrQ0dUZXh0Q2xpcCk7CisgICAgfQorCisgICAgaWYgKCh0eXBl
ICYgQVBQTFlfVE9fU1RST0tFKSAmJiBzdHlsZS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpIHsK
KyAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0UmVmKTsKKyAgICAgICAgYXBwbHlT
dHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0UmVmLCBzdHlsZSwgb2JqZWN0KTsgLy8gRklYTUU6
IHRoaXMgc2VlbXMgbGlrZSB0aGUgd3JvbmcgcGxhY2UgZm9yIHRoaXMuCisgICAgICAgIGlmIChp
c1BhaW50aW5nVGV4dCgpKSB7CisgICAgICAgICAgICBtX21hc2tJbWFnZSA9IG5ldyBTVkdSZXNv
dXJjZUltYWdlKCk7CisgICAgICAgICAgICBpbnQgd2lkdGggID0gMjA0ODsKKyAgICAgICAgICAg
IGludCBoZWlnaHQgPSAyMDQ4OyAvLyBGSVhNRT8/PworICAgICAgICAgICAgSW50U2l6ZSBzaXpl
ID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIG1fbWFza0ltYWdlLT5pbml0
KHNpemUpOworICAgICAgICAgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIG1hc2tJbWFnZUNv
bnRleHQgPSBxdWFydHpEZXZpY2UtPmNvbnRleHRGb3JJbWFnZShtX21hc2tJbWFnZS5nZXQoKSk7
CisgICAgICAgICAgICBxdWFydHpEZXZpY2UtPnB1c2hDb250ZXh0KG1hc2tJbWFnZUNvbnRleHQp
OworICAgICAgICAgICAgQ0dDb250ZXh0UmVmIG1hc2tDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1Jl
bmRlcmluZ0RldmljZUNvbnRleHRRdWFydHoqPihtYXNrSW1hZ2VDb250ZXh0KS0+Y2dDb250ZXh0
KCk7CisgICAgICAgICAgICBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KG9iamVjdCktPnN0eWxl
KCktPnNldENvbG9yKENvbG9yKDI1NSwgMjU1LCAyNTUpKTsKKyAgICAgICAgICAgIENHQ29udGV4
dFNldFRleHREcmF3aW5nTW9kZShtYXNrQ29udGV4dCwga0NHVGV4dFN0cm9rZSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTVkdQYWludFNlcnZlckdy
YWRpZW50OjppbnZhbGlkYXRlKCkKK3sKKyAgICBpbnZhbGlkYXRlQ2FjaGVzKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL2NnL1NWR1BhaW50U2VydmVyUGF0dGVybkNn
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jZy9TVkdQ
YWludFNlcnZlclBhdHRlcm5DZy5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N2Zy9jZy9TVkdQYWludFNlcnZlclBhdHRlcm5DZy5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTE4IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFpp
bW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KKworICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBLREUgcHJvamVjdAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3
LCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZmRlZiBTVkdfU1VQUE9SVAor
I2luY2x1ZGUgIlNWR1BhaW50U2VydmVyUGF0dGVybi5oIgorCisjaW5jbHVkZSAiS1JlbmRlcmlu
Z0RldmljZVF1YXJ0ei5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlNW
R1Jlc291cmNlSW1hZ2UuaCIKKyNpbmNsdWRlICJRdWFydHpTdXBwb3J0LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQgcGF0dGVybkNhbGxiYWNrKHZvaWQqIGluZm8sIENH
Q29udGV4dFJlZiBjb250ZXh0KQoreworICAgIENHTGF5ZXJSZWYgbGF5ZXIgPSByZWludGVycHJl
dF9jYXN0PFNWR1Jlc291cmNlSW1hZ2UqPihpbmZvKS0+Y2dMYXllcigpOworICAgIENHQ29udGV4
dERyYXdMYXllckF0UG9pbnQoY29udGV4dCwgQ0dQb2ludFplcm8sIGxheWVyKTsKK30KKworYm9v
bCBTVkdQYWludFNlcnZlclBhdHRlcm46OnNldHVwKEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5
cGUpIGNvbnN0Cit7CisgICAgaWYobGlzdGVuZXIoKSkgLy8gdGhpcyBzZWVtcyBsaWtlIGJhZCBk
ZXNpZ24gdG8gbWUsIHNob3VsZCBiZSBpbiBhIGNvbW1vbiBiYXNlY2xhc3MuIC0tIGVjcyA4LzYv
MDUKKyAgICAgICAgbGlzdGVuZXIoKS0+cmVzb3VyY2VOb3RpZmljYXRpb24oKTsKKworICAgIFJl
bmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKKworICAgIEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0UXVhcnR6KiBxdWFydHpDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0Rl
dmljZUNvbnRleHRRdWFydHoqPihjb250ZXh0KTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dFJl
ZiA9IHF1YXJ0ekNvbnRleHQtPmNnQ29udGV4dCgpOworCisgICAgUmVmUHRyPFNWR1Jlc291cmNl
SW1hZ2U+IGNlbGwgPSB0aWxlKCk7CisgICAgaWYgKCFjZWxsKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHRSZWYpOworCisgICAgQ0dTaXpl
IGNlbGxTaXplID0gQ0dTaXplKGNlbGwtPnNpemUoKSk7CisKKyAgICBDR0Zsb2F0IGFscGhhID0g
MTsgLy8gY2FudmFzU3R5bGUtPm9wYWNpdHkoKTsgLy93aGljaD8KKworICAgIC8vIFBhdHRlcm5z
IGRvbid0IHNlZW0gdG8gcmVzZXBlY3QgdGhlIENUTSB1bmxlc3Mgd2UgbWFrZSB0aGVtLi4uCisg
ICAgQ0dBZmZpbmVUcmFuc2Zvcm0gY3RtID0gQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHRSZWYpOwor
ICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IHBhdHRlcm5UcmFuc2Zvcm0oKTsKKyAg
ICB0cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdCh0cmFuc2Zvcm0sIGN0bSk7CisK
KyAgICBDR1NpemUgcGhhc2UgPSBDR1NpemVNYWtlKGJib3goKS54KCksIC1iYm94KCkueSgpKTsg
Ly8gUGF0dGVybiBzcGFjZSBzZWVtcyB0byBzdGFydCBpbiB0aGUgbG93ZXItbGVmdCwgc28gd2Ug
ZmxpcCB0aGUgWSBoZXJlLgorICAgIENHQ29udGV4dFNldFBhdHRlcm5QaGFzZShjb250ZXh0UmVm
LCBwaGFzZSk7CisKKyAgICBDR1BhdHRlcm5DYWxsYmFja3MgY2FsbGJhY2tzID0gezAsIHBhdHRl
cm5DYWxsYmFjaywgTlVMTH07CisgICAgbV9wYXR0ZXJuID0gQ0dQYXR0ZXJuQ3JlYXRlKAorICAg
ICAgICAgICAgdGlsZSgpLAorICAgICAgICAgICAgQ0dSZWN0TWFrZSgwLCAwLCBjZWxsU2l6ZS53
aWR0aCwgY2VsbFNpemUuaGVpZ2h0KSwKKyAgICAgICAgICAgIHRyYW5zZm9ybSwKKyAgICAgICAg
ICAgIGJib3goKS53aWR0aCgpLCAvL2NlbGxTaXplLndpZHRoLAorICAgICAgICAgICAgYmJveCgp
LmhlaWdodCgpLCAvL2NlbGxTaXplLmhlaWdodCwKKyAgICAgICAgICAgIGtDR1BhdHRlcm5UaWxp
bmdDb25zdGFudFNwYWNpbmcsICAvLyBGSVhNRTogc2hvdWxkIGFzayBDRyBndXlzLgorICAgICAg
ICAgICAgdHJ1ZSwgLy8gaGFzIGNvbG9yCisgICAgICAgICAgICAmY2FsbGJhY2tzKTsKKworICAg
IENHQ29udGV4dFNldEFscGhhKGNvbnRleHRSZWYsIHN0eWxlLT5vcGFjaXR5KCkpOyAvLyBvciBk
byBJIHNldCB0aGUgYWxwaGEgYWJvdmU/CisKKyAgICBtX3BhdHRlcm5TcGFjZSA9IENHQ29sb3JT
cGFjZUNyZWF0ZVBhdHRlcm4oTlVMTCk7CisKKyAgICBpZiAoKHR5cGUgJiBBUFBMWV9UT19GSUxM
KSAmJiBzdHlsZS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKSB7CisgICAgICAgIENHQ29udGV4dFNl
dEZpbGxDb2xvclNwYWNlKGNvbnRleHRSZWYsIG1fcGF0dGVyblNwYWNlKTsKKyAgICAgICAgQ0dD
b250ZXh0U2V0RmlsbFBhdHRlcm4oY29udGV4dFJlZiwgbV9wYXR0ZXJuLCAmYWxwaGEpOworICAg
ICAgICBpZiAoaXNQYWludGluZ1RleHQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxSZW5k
ZXJPYmplY3QqPihvYmplY3QpLT5zdHlsZSgpLT5zZXRDb2xvcihDb2xvcigpKTsKKyAgICAgICAg
ICAgIENHQ29udGV4dFNldFRleHREcmF3aW5nTW9kZShjb250ZXh0UmVmLCBrQ0dUZXh0RmlsbCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoKHR5cGUgJiBBUFBMWV9UT19TVFJPS0UpICYm
IHN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSkgeworICAgICAgICBDR0NvbnRleHRTZXRT
dHJva2VDb2xvclNwYWNlKGNvbnRleHRSZWYsIG1fcGF0dGVyblNwYWNlKTsKKyAgICAgICAgQ0dD
b250ZXh0U2V0U3Ryb2tlUGF0dGVybihjb250ZXh0UmVmLCBtX3BhdHRlcm4sICZhbHBoYSk7Cisg
ICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dFJlZiwgc3R5bGUsIG9iamVj
dCk7CisgICAgICAgIGlmIChpc1BhaW50aW5nVGV4dCgpKSB7CisgICAgICAgICAgICBjb25zdF9j
YXN0PFJlbmRlck9iamVjdCo+KG9iamVjdCktPnN0eWxlKCktPnNldENvbG9yKENvbG9yKCkpOwor
ICAgICAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHRSZWYsIGtDR1Rl
eHRTdHJva2UpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuOjp0ZWFyZG93bihLUmVuZGVyaW5nRGV2aWNlQ29udGV4
dCogY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0VHlw
ZSB0eXBlKSBjb25zdAoreworICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6KiBxdWFy
dHpDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHoqPihj
b250ZXh0KTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dFJlZiA9IHF1YXJ0ekNvbnRleHQtPmNn
Q29udGV4dCgpOworICAgIENHUGF0dGVyblJlbGVhc2UobV9wYXR0ZXJuKTsKKyAgICBDR0NvbG9y
U3BhY2VSZWxlYXNlKG1fcGF0dGVyblNwYWNlKTsKKyAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRl
KGNvbnRleHRSZWYpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisv
LyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jZy9T
VkdQYWludFNlcnZlclNvbGlkQ2cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3ZnL2NnL1NWR1BhaW50U2VydmVyU29saWRDZy5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9jZy9TVkdQYWludFNlcnZlclNvbGlkQ2cu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc3IEBACisvKgorICAgIENvcHlyaWdodCAoQykg
MjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KKworICAgIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9u
LCBNQSAwMjExMS0xMzA3LCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZmRl
ZiBTVkdfU1VQUE9SVAorI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyU29saWQuaCIKKworI2luY2x1
ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2VRdWFydHouaCIK
KyNpbmNsdWRlICJRdWFydHpTdXBwb3J0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9v
bCBTVkdQYWludFNlcnZlclNvbGlkOjpzZXR1cChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29u
dGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0eXBl
KSBjb25zdAoreworICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6KiBxdWFydHpDb250
ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHoqPihjb250ZXh0
KTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dFJlZiA9IHF1YXJ0ekNvbnRleHQtPmNnQ29udGV4
dCgpOworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKKworICAgIENH
Q29udGV4dFNldEFscGhhKGNvbnRleHRSZWYsIHN0eWxlLT5vcGFjaXR5KCkpOworCisgICAgc3Rh
dGljIENHQ29sb3JTcGFjZVJlZiBkZXZpY2VSR0JDb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3Jl
YXRlRGV2aWNlUkdCKCk7IC8vIFRoaXMgc2hvdWxkIGJlIHNoYXJlZCBmcm9tIEdyYXBoaWNzQ29u
dGV4dCwgb3Igc29tZSBvdGhlciBjZW50cmFsIGxvY2F0aW9uCisKKyAgICBpZiAoKHR5cGUgJiBB
UFBMWV9UT19GSUxMKSAmJiBzdHlsZS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKSB7CisgICAgICAg
IENHRmxvYXQgY29sb3JDb21wb25lbnRzWzRdOworICAgICAgICBjb2xvcigpLmdldFJHQkEoY29s
b3JDb21wb25lbnRzWzBdLCBjb2xvckNvbXBvbmVudHNbMV0sIGNvbG9yQ29tcG9uZW50c1syXSwg
Y29sb3JDb21wb25lbnRzWzNdKTsKKyAgICAgICAgQVNTRVJUKCFjb2xvcigpLmhhc0FscGhhKCkp
OworICAgICAgICBjb2xvckNvbXBvbmVudHNbM10gPSBzdHlsZS0+c3ZnU3R5bGUoKS0+ZmlsbE9w
YWNpdHkoKTsgLy8gU1ZHL0NTUyBjb2xvcnMgYXJlIG5vdCBzcGVjaWZpZWQgdy9vIGFscGhhCisg
ICAgICAgIENHQ29udGV4dFNldEZpbGxDb2xvclNwYWNlKGNvbnRleHRSZWYsIGRldmljZVJHQkNv
bG9yU3BhY2UpOworICAgICAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3IoY29udGV4dFJlZiwgY29s
b3JDb21wb25lbnRzKTsKKyAgICAgICAgaWYgKGlzUGFpbnRpbmdUZXh0KCkpIHsKKyAgICAgICAg
ICAgIGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4ob2JqZWN0KS0+c3R5bGUoKS0+c2V0Q29sb3Io
Y29sb3IoKSk7CisgICAgICAgICAgICBDR0NvbnRleHRTZXRUZXh0RHJhd2luZ01vZGUoY29udGV4
dFJlZiwga0NHVGV4dEZpbGwpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCh0eXBlICYg
QVBQTFlfVE9fU1RST0tFKSAmJiBzdHlsZS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpIHsKKyAg
ICAgICAgQ0dGbG9hdCBjb2xvckNvbXBvbmVudHNbNF07CisgICAgICAgIGNvbG9yKCkuZ2V0UkdC
QShjb2xvckNvbXBvbmVudHNbMF0sIGNvbG9yQ29tcG9uZW50c1sxXSwgY29sb3JDb21wb25lbnRz
WzJdLCBjb2xvckNvbXBvbmVudHNbM10pOworICAgICAgICBBU1NFUlQoIWNvbG9yKCkuaGFzQWxw
aGEoKSk7CisgICAgICAgIGNvbG9yQ29tcG9uZW50c1szXSA9IHN0eWxlLT5zdmdTdHlsZSgpLT5z
dHJva2VPcGFjaXR5KCk7IC8vIFNWRy9DU1MgY29sb3JzIGFyZSBub3Qgc3BlY2lmaWVkIHcvbyBh
bHBoYQorICAgICAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xvclNwYWNlKGNvbnRleHRSZWYsIGRl
dmljZVJHQkNvbG9yU3BhY2UpOworICAgICAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xvcihjb250
ZXh0UmVmLCBjb2xvckNvbXBvbmVudHMpOworICAgICAgICBhcHBseVN0cm9rZVN0eWxlVG9Db250
ZXh0KGNvbnRleHRSZWYsIHN0eWxlLCBvYmplY3QpOworICAgICAgICBpZiAoaXNQYWludGluZ1Rl
eHQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihvYmplY3QpLT5z
dHlsZSgpLT5zZXRDb2xvcihjb2xvcigpKTsKKyAgICAgICAgICAgIENHQ29udGV4dFNldFRleHRE
cmF3aW5nTW9kZShjb250ZXh0UmVmLCBrQ0dUZXh0U3Ryb2tlKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZgorCisvLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2
Zy9xdC9TVkdQYWludFNlcnZlckdyYWRpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50U2VydmVyR3JhZGllbnRRdC5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N2Zy9xdC9TVkdQYWludFNl
cnZlckdyYWRpZW50UXQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACisvKgorICAg
IENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4K
KworICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAz
MzAsCisgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZmRlZiBTVkdfU1VQUE9SVAorI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyR3Jh
ZGllbnQuaCIKKworI2luY2x1ZGUgPFFDb2xvcj4KKyNpbmNsdWRlIDxRR3JhZGllbnQ+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworLy8gSGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgbGluZWFyICYg
cmFkaWFsIGdyYWRpZW50Cit2b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OmZpbGxDb2xvckFy
cmF5KFFHcmFkaWVudCYgZ3JhZGllbnQsIGNvbnN0IFZlY3RvcjxTVkdHcmFkaWVudFN0b3A+JiBz
dG9wcywgZmxvYXQgb3BhY2l0eSkgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc3RvcHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgZmxvYXQgb2Zmc2V0ID0gc3RvcHNbaV0u
Zmlyc3Q7CisgICAgICAgIENvbG9yIGNvbG9yID0gc3RvcHNbaV0uc2Vjb25kOworCisgICAgICAg
IFFDb2xvciBjKGNvbG9yLnJlZCgpLCBjb2xvci5ncmVlbigpLCBjb2xvci5ibHVlKCkpOworICAg
ICAgICBjLnNldEFscGhhKGludChjb2xvci5hbHBoYSgpICogb3BhY2l0eSkpOworCisgICAgICAg
IGdyYWRpZW50LnNldENvbG9yQXQob2Zmc2V0LCBjKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmCisKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRRdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZHUGFp
bnRTZXJ2ZXJMaW5lYXJHcmFkaWVudFF0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRRdC5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAw
NiBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KKworICAgIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9uLCBN
QSAwMjExMS0xMzA3LCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZmRlZiBT
VkdfU1VQUE9SVAorI2luY2x1ZGUgIlNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQuaCIKKwor
I2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2VRdC5oIgorI2luY2x1ZGUgIlJlbmRlclBhdGguaCIK
KworI2luY2x1ZGUgPFFMaW5lYXJHcmFkaWVudD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCiti
b29sIFNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQ6OnNldHVwKEtSZW5kZXJpbmdEZXZpY2VD
b250ZXh0KiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJn
ZXRUeXBlIHR5cGUpIGNvbnN0Cit7CisgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdCogcXRD
b250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdCo+KGNvbnRleHQp
OworICAgIFFfQVNTRVJUKHF0Q29udGV4dCAhPSAwKTsKKworICAgIGlmIChsaXN0ZW5lcigpKQor
ICAgICAgICBsaXN0ZW5lcigpLT5yZXNvdXJjZU5vdGlmaWNhdGlvbigpOworCisgICAgUmVuZGVy
U3R5bGUqIHJlbmRlclN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOworCisgICAgZG91YmxlIHgxLCB4
MiwgeTEsIHkyOworICAgIGlmIChib3VuZGluZ0JveE1vZGUoKSkgeworICAgICAgICBRUmVjdEYg
YmJveCA9IHF0Q29udGV4dC0+cGF0aEJCb3goKTsKKyAgICAgICAgeDEgPSBkb3VibGUoYmJveC5s
ZWZ0KCkpICsgKGRvdWJsZShncmFkaWVudFN0YXJ0KCkueCgpIC8gMTAwLjApICogZG91YmxlKGJi
b3gud2lkdGgoKSkpOworICAgICAgICB5MSA9IGRvdWJsZShiYm94LnRvcCgpKSArIChkb3VibGUo
Z3JhZGllbnRTdGFydCgpLnkoKSAvIDEwMC4wKSAqIGRvdWJsZShiYm94LmhlaWdodCgpKSk7Cisg
ICAgICAgIHgyID0gZG91YmxlKGJib3gubGVmdCgpKSArIChkb3VibGUoZ3JhZGllbnRFbmQoKS54
KCkgLyAxMDAuMCkgICogZG91YmxlKGJib3gud2lkdGgoKSkpOworICAgICAgICB5MiA9IGRvdWJs
ZShiYm94LnRvcCgpKSArIChkb3VibGUoZ3JhZGllbnRFbmQoKS55KCkgLyAxMDAuMCkgKiBkb3Vi
bGUoYmJveC5oZWlnaHQoKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHgxID0gZ3JhZGllbnRT
dGFydCgpLngoKTsKKyAgICAgICAgeTEgPSBncmFkaWVudFN0YXJ0KCkueSgpOworICAgICAgICB4
MiA9IGdyYWRpZW50RW5kKCkueCgpOworICAgICAgICB5MiA9IGdyYWRpZW50RW5kKCkueSgpOwor
ICAgIH0KKworICAgIHF0Q29udGV4dC0+cGFpbnRlcigpLnNldFBlbihRdDo6Tm9QZW4pOworICAg
IHF0Q29udGV4dC0+cGFpbnRlcigpLnNldEJydXNoKFF0OjpOb0JydXNoKTsKKworICAgIFFMaW5l
YXJHcmFkaWVudCBncmFkaWVudChRUG9pbnRGKHgxLCB5MSksIFFQb2ludEYoeDIsIHkyKSk7Cisg
ICAgaWYgKHNwcmVhZE1ldGhvZCgpID09IFNQUkVBRE1FVEhPRF9SRVBFQVQpCisgICAgICAgIGdy
YWRpZW50LnNldFNwcmVhZChRR3JhZGllbnQ6OlJlcGVhdFNwcmVhZCk7CisgICAgZWxzZSBpZiAo
c3ByZWFkTWV0aG9kKCkgPT0gU1BSRUFETUVUSE9EX1JFRkxFQ1QpCisgICAgICAgIGdyYWRpZW50
LnNldFNwcmVhZChRR3JhZGllbnQ6OlJlZmxlY3RTcHJlYWQpOworICAgIGVsc2UKKyAgICAgICAg
Z3JhZGllbnQuc2V0U3ByZWFkKFFHcmFkaWVudDo6UGFkU3ByZWFkKTsKKworICAgIGRvdWJsZSBv
cGFjaXR5ID0gMS4wOworCisgICAgLy8gVE9ETzogR3JhZGllbnQgdHJhbnNmb3JtICsgb3BhY2l0
eSBmaXhlcyEKKworICAgIGlmICgodHlwZSAmIEFQUExZX1RPX0ZJTEwpICYmIHJlbmRlclN0eWxl
LT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkpIHsKKyAgICAgICAgZmlsbENvbG9yQXJyYXkoZ3JhZGll
bnQsIGdyYWRpZW50U3RvcHMoKSwgb3BhY2l0eSk7CisKKyAgICAgICAgUUJydXNoIGJydXNoKGdy
YWRpZW50KTsKKworICAgICAgICBxdENvbnRleHQtPnBhaW50ZXIoKS5zZXRCcnVzaChicnVzaCk7
CisgICAgICAgIHF0Q29udGV4dC0+c2V0RmlsbFJ1bGUocmVuZGVyU3R5bGUtPnN2Z1N0eWxlKCkt
PmZpbGxSdWxlKCkpOworICAgIH0KKworICAgIGlmICgodHlwZSAmIEFQUExZX1RPX1NUUk9LRSkg
JiYgcmVuZGVyU3R5bGUtPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgpKSB7CisgICAgICAgIGZpbGxD
b2xvckFycmF5KGdyYWRpZW50LCBncmFkaWVudFN0b3BzKCksIG9wYWNpdHkpOworCisgICAgICAg
IFFQZW4gcGVuOworICAgICAgICBRQnJ1c2ggYnJ1c2goZ3JhZGllbnQpOworCisgICAgICAgIHNl
dFBlblByb3BlcnRpZXMob2JqZWN0LCByZW5kZXJTdHlsZSwgcGVuKTsKKyAgICAgICAgcGVuLnNl
dEJydXNoKGJydXNoKTsKKworICAgICAgICBxdENvbnRleHQtPnBhaW50ZXIoKS5zZXRQZW4ocGVu
KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKKworLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdmcvcXQvU1ZHUGFpbnRTZXJ2ZXJQYXR0ZXJuUXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50U2VydmVyUGF0dGVyblF0
LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL3F0L1NW
R1BhaW50U2VydmVyUGF0dGVyblF0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MyBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtk
ZS5vcmc+CisKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKKworICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhaW50IHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0g
U3VpdGUgMzMwLAorICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWZkZWYgU1ZHX1NVUFBPUlQKKyNpbmNsdWRlICJTVkdQYWludFNl
cnZlclBhdHRlcm4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIFNWR1BhaW50U2Vy
dmVyUGF0dGVybjo6c2V0dXAoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUgdHlwZSkgY29uc3QKK3sK
KyAgICAvLyBGSVhNRTogUmVhY3RpdmF0ZSBvbGQgcGF0dGVybiBjb2RlCisKKy8qCisgICAgS1Jl
bmRlcmluZ0RldmljZUNvbnRleHRRdCogcXRDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmlu
Z0RldmljZUNvbnRleHRRdCo+KGNvbnRleHQpOworICAgIFFfQVNTRVJUKHF0Q29udGV4dCAhPSAw
KTsKKworICAgIFFQYWludGVyUGF0aCogX3BhdGggPSBzdGF0aWNfY2FzdDxRUGFpbnRlclBhdGgq
PihxdENvbnRleHQtPnBhdGgoKSk7CisgICAgUV9BU1NFUlQoX3BhdGggIT0gMCk7CisKKyAgICBp
ZiAobGlzdGVuZXIoKSkgeworICAgICAgICBsaXN0ZW5lcigpLT5yZXNvdXJjZU5vdGlmaWNhdGlv
bigpOworICAgIH0KKworICAgIFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSA9IG9iamVjdC0+c3R5
bGUoKTsKKworICAgIHF0Q29udGV4dC0+cGFpbnRlcigpLnNldFBlbihRdDo6Tm9QZW4pOworICAg
IHF0Q29udGV4dC0+cGFpbnRlcigpLnNldEJydXNoKFF0OjpOb0JydXNoKTsKKyAgICBRSW1hZ2Uq
IHBhdHRlcm5pbWFnZSA9IG5ldyBRSW1hZ2UodGlsZSgpLT5iaXRzKCksIHRpbGUoKS0+d2lkdGgo
KSwgdGlsZSgpLT5oZWlnaHQoKSwgUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQp
OworICAgIHBhdHRlcm5pbWFnZS0+c2V0QWxwaGFCdWZmZXIodHJ1ZSk7CisgICAgaWYgKHR5cGUg
JiBBUFBMWV9UT19GSUxMKSB7CisgICAgICAgIC8vUUNvbG9yIGMgPSBjb2xvcigpOworICAgICAg
ICAvL2Muc2V0QWxwaGFGKHN0eWxlLT5maWxsUGFpbnRlcigpLT5vcGFjaXR5KCkgKiBzdHlsZS0+
b3BhY2l0eSgpICogb3BhY2l0eSgpKTsKKyAgICAgICAgS1JlbmRlcmluZ0ZpbGxQYWludGVyIGZp
bGxQYWludGVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxsUGFpbnRlcihyZW5kZXJTdHlsZSwg
b2JqZWN0KTsKKyAgICAgICAgUUJydXNoIGJydXNoKFFQaXhtYXA6OmZyb21JbWFnZSgqcGF0dGVy
bmltYWdlKSk7CisgICAgICAgIF9wYXRoLT5zZXRGaWxsUnVsZShmaWxsUGFpbnRlci5maWxsUnVs
ZSgpID09IFJVTEVfRVZFTk9ERCA/IFF0OjpPZGRFdmVuRmlsbCA6IFF0OjpXaW5kaW5nRmlsbCk7
CisgICAgICAgIHF0Q29udGV4dC0+cGFpbnRlcigpLnNldEJydXNoKGJydXNoKTsKKyAgICB9Cisg
ICAgaWYgKHR5cGUgJiBBUFBMWV9UT19TVFJPS0UpIHsKKyAgICAgICAgLy9RQ29sb3IgYyA9IGNv
bG9yKCk7CisgICAgICAgIC8vYy5zZXRBbHBoYUYoc3R5bGUtPnN0cm9rZVBhaW50ZXIoKS0+b3Bh
Y2l0eSgpICogc3R5bGUtPm9wYWNpdHkoKSAqIG9wYWNpdHkoKSk7CisgICAgICAgIEtSZW5kZXJp
bmdTdHJva2VQYWludGVyIHN0cm9rZVBhaW50ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9r
ZVBhaW50ZXIocmVuZGVyU3R5bGUsIG9iamVjdCk7CisKKyAgICAgICAgUVBlbiBwZW47CisgICAg
ICAgIFFCcnVzaCBicnVzaChRUGl4bWFwOjpmcm9tSW1hZ2UoKnBhdHRlcm5pbWFnZSkpOworCisg
ICAgICAgIHNldFBlblByb3BlcnRpZXMoc3Ryb2tlUGFpbnRlciwgcGVuKTsKKyAgICAgICAgcGVu
LnNldEJydXNoKGJydXNoKTsKKyAgICAgICAgcXRDb250ZXh0LT5wYWludGVyKCkuc2V0UGVuKHBl
bik7CisgICAgfQorCisgICAgcXRDb250ZXh0LT5wYWludGVyKCkuZHJhd1BhdGgoKl9wYXRoKTsK
KworICAgIGRlbGV0ZSBwYXR0ZXJuaW1hZ2U7CisqLworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKy8vIHZpbTp0cz00Om5vZXQKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50U2VydmVyUXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50
U2VydmVyUXQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dmcvcXQvU1ZHUGFpbnRTZXJ2ZXJRdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTkgQEAK
Ky8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBr
ZGUub3JnPgorCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWludCB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAt
IFN1aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmZGVmIFNWR19TVVBQT1JUCisjaW5jbHVkZSAiU1ZHUGFpbnRT
ZXJ2ZXIuaCIKKworI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgorI2luY2x1ZGUg
IktSZW5kZXJpbmdEZXZpY2VRdC5oIgorI2luY2x1ZGUgIlJlbmRlclBhdGguaCIKKworI2luY2x1
ZGUgPFFQZW4+CisjaW5jbHVkZSA8UVZlY3Rvcj4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2
b2lkIFNWR1BhaW50U2VydmVyOjpzZXRQZW5Qcm9wZXJ0aWVzKGNvbnN0IFJlbmRlck9iamVjdCog
b2JqZWN0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIFFQZW4mIHBlbikgY29uc3QKK3sKKyAg
ICBwZW4uc2V0V2lkdGhGKEtTVkdQYWludGVyRmFjdG9yeTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgo
b2JqZWN0LCBzdHlsZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlV2lkdGgoKSwgMS4wKSk7CisKKyAgICBp
ZiAoc3R5bGUtPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgPT0gQnV0dENhcCkKKyAgICAgICAgcGVu
LnNldENhcFN0eWxlKFF0OjpGbGF0Q2FwKTsKKyAgICBlbHNlIGlmIChzdHlsZS0+c3ZnU3R5bGUo
KS0+Y2FwU3R5bGUoKSA9PSBSb3VuZENhcCkKKyAgICAgICAgcGVuLnNldENhcFN0eWxlKFF0OjpS
b3VuZENhcCk7CisKKyAgICBpZiAoc3R5bGUtPnN2Z1N0eWxlKCktPmpvaW5TdHlsZSgpID09IE1p
dGVySm9pbikgeworICAgICAgICBwZW4uc2V0Sm9pblN0eWxlKFF0OjpNaXRlckpvaW4pOworICAg
ICAgICBwZW4uc2V0TWl0ZXJMaW1pdCgocXJlYWwpIHN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VN
aXRlckxpbWl0KCkpOworICAgIH0gZWxzZSBpZihzdHlsZS0+c3ZnU3R5bGUoKS0+am9pblN0eWxl
KCkgPT0gUm91bmRKb2luKQorICAgICAgICBwZW4uc2V0Sm9pblN0eWxlKFF0OjpSb3VuZEpvaW4p
OworCisgICAgY29uc3QgS0NEYXNoQXJyYXkmIGRhc2hlcyA9IEtTVkdQYWludGVyRmFjdG9yeTo6
ZGFzaEFycmF5RnJvbVJlbmRlcmluZ1N0eWxlKHN0eWxlKTsKKyAgICBkb3VibGUgZGFzaE9mZnNl
dCA9IEtTVkdQYWludGVyRmFjdG9yeTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgob2JqZWN0LCBzdHls
ZS0+c3ZnU3R5bGUoKS0+c3Ryb2tlRGFzaE9mZnNldCgpLCAwLjApOworCisgICAgdW5zaWduZWQg
aW50IGRhc2hMZW5ndGggPSAhZGFzaGVzLmlzRW1wdHkoKSA/IGRhc2hlcy5zaXplKCkgOiAwOwor
ICAgIGlmKGRhc2hMZW5ndGgpIHsKKyAgICAgICAgUVZlY3RvcjxxcmVhbD4gcGF0dGVybjsKKyAg
ICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gKGRhc2hMZW5ndGggJSAyKSA9PSAwID8gZGFzaExl
bmd0aCA6IGRhc2hMZW5ndGggKiAyOworCisgICAgICAgIGZvcih1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAgICAgcGF0dGVybi5hcHBlbmQoZGFzaGVzW2kgJSBk
YXNoTGVuZ3RoXSAvIChmbG9hdClwZW4ud2lkdGhGKCkpOworCisgICAgICAgIHBlbi5zZXREYXNo
UGF0dGVybihwYXR0ZXJuKTsKKworICAgICAgICBRX1VOVVNFRChkYXNoT2Zmc2V0KTsKKyAgICAg
ICAgLy8gVE9ETzogZGFzaC1vZmZzZXQsIGRvZXMvd2lsbCBxdDQgQVBJIGFsbG93IGl0PyAoUm9i
KQorICAgIH0KK30KKwordm9pZCBTVkdQYWludFNlcnZlcjo6ZHJhdyhLUmVuZGVyaW5nRGV2aWNl
Q29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcGF0aCwgU1ZHUGFpbnRUYXJnZXRU
eXBlIHR5cGUpIGNvbnN0Cit7CisgICAgaWYgKCFzZXR1cChjb250ZXh0LCBwYXRoLCB0eXBlKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgcmVuZGVyUGF0aChjb250ZXh0LCBwYXRoLCB0eXBlKTsK
KyAgICB0ZWFyZG93bihjb250ZXh0LCBwYXRoLCB0eXBlKTsKK30KKwordm9pZCBTVkdQYWludFNl
cnZlcjo6dGVhcmRvd24oS1JlbmRlcmluZ0RldmljZUNvbnRleHQqLCBjb25zdCBSZW5kZXJPYmpl
Y3QqLCBTVkdQYWludFRhcmdldFR5cGUpIGNvbnN0Cit7CisgICAgLy8gbm8tb3AKK30KKwordm9p
ZCBTVkdQYWludFNlcnZlcjo6cmVuZGVyUGF0aChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29u
dGV4dCwgY29uc3QgUmVuZGVyUGF0aCogcGF0aCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNv
bnN0Cit7CisgICAgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlID0gcGF0aC0+c3R5bGUoKTsKKyAg
ICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0KiBxdENvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVu
ZGVyaW5nRGV2aWNlQ29udGV4dFF0Kj4oY29udGV4dCk7CisKKyAgICBpZiAoKHR5cGUgJiBBUFBM
WV9UT19GSUxMKSAmJiByZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKQorICAgICAg
ICBxdENvbnRleHQtPmZpbGxQYXRoKCk7CisKKyAgICBpZiAoKHR5cGUgJiBBUFBMWV9UT19TVFJP
S0UpICYmIHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSkKKyAgICAgICAgcXRD
b250ZXh0LT5zdHJva2VQYXRoKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmCisKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3ZnL3F0L1NWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRRdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFk
aWVudFF0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Zn
L3F0L1NWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRRdC5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTMzIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1h
bm4gPHdpbGRmb3hAa2RlLm9yZz4KKworICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUg
cHJvamVjdAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg
IGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBU
ZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0Eu
CisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZmRlZiBTVkdfU1VQUE9SVAorI2luY2x1
ZGUgIlNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQuaCIKKworI2luY2x1ZGUgIktSZW5kZXJp
bmdEZXZpY2VRdC5oIgorI2luY2x1ZGUgIlJlbmRlclBhdGguaCIKKworI2luY2x1ZGUgPG1hdGgu
aD4KKyNpbmNsdWRlIDxRUmFkaWFsR3JhZGllbnQ+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Ym9vbCBTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50Ojogc2V0dXAoS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRh
cmdldFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0KiBx
dENvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0Kj4oY29udGV4
dCk7CisgICAgUV9BU1NFUlQocXRDb250ZXh0ICE9IDApOworCisgICAgaWYgKGxpc3RlbmVyKCkp
CisgICAgICAgIGxpc3RlbmVyKCktPnJlc291cmNlTm90aWZpY2F0aW9uKCk7CisKKyAgICBSZW5k
ZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CisKKyAgICBxdENvbnRleHQt
PnBhaW50ZXIoKS5zZXRQZW4oUXQ6Ok5vUGVuKTsKKyAgICBxdENvbnRleHQtPnBhaW50ZXIoKS5z
ZXRCcnVzaChRdDo6Tm9CcnVzaCk7CisgICAgUU1hdHJpeCBtYXQgPSBxdENvbnRleHQtPmN0bSgp
OworCisgICAgZG91YmxlIGN4LCBmeCwgY3ksIGZ5LCByOworICAgIGlmIChib3VuZGluZ0JveE1v
ZGUoKSkgeworICAgICAgICBRUmVjdEYgYmJveCA9IHF0Q29udGV4dC0+cGF0aEJCb3goKTsKKyAg
ICAgICAgY3ggPSBkb3VibGUoYmJveC5sZWZ0KCkpICsgKGRvdWJsZShncmFkaWVudENlbnRlcigp
LngoKSAvIDEwMC4wKSAqIGRvdWJsZShiYm94LndpZHRoKCkpKTsKKyAgICAgICAgY3kgPSBkb3Vi
bGUoYmJveC50b3AoKSkgKyAoZG91YmxlKGdyYWRpZW50Q2VudGVyKCkueSgpIC8gMTAwLjApICog
ZG91YmxlKGJib3guaGVpZ2h0KCkpKTsKKyAgICAgICAgZnggPSBkb3VibGUoYmJveC5sZWZ0KCkp
ICsgKGRvdWJsZShncmFkaWVudEZvY2FsKCkueCgpIC8gMTAwLjApICogZG91YmxlKGJib3gud2lk
dGgoKSkpIC0gY3g7CisgICAgICAgIGZ5ID0gZG91YmxlKGJib3gudG9wKCkpICsgKGRvdWJsZShn
cmFkaWVudEZvY2FsKCkueSgpIC8gMTAwLjApICogZG91YmxlKGJib3guaGVpZ2h0KCkpKSAtIGN5
OworICAgICAgICByID0gZG91YmxlKGdyYWRpZW50UmFkaXVzKCkgLyAxMDAuMCkgKiAoc3FydChw
b3coYmJveC53aWR0aCgpLCAyKSArIHBvdyhiYm94LmhlaWdodCgpLCAyKSkpOworCisgICAgICAg
IGZsb2F0IHdpZHRoID0gYmJveC53aWR0aCgpOworICAgICAgICBmbG9hdCBoZWlnaHQgPSBiYm94
LmhlaWdodCgpOworCisgICAgICAgIGludCBkaWZmID0gaW50KHdpZHRoIC0gaGVpZ2h0KTsgLy8g
YWxsb3cgc2xpZ2h0IHRvbGVyYW5jZQorICAgICAgICBpZiAoIShkaWZmID4gLTIgJiYgZGlmZiA8
IDIpKSB7CisgICAgICAgICAgICAvLyBtYWtlIGVsbGlwdGljYWwgb3IgY2lyY3VsYXIgZGVwZW5k
aW5nIG9uIGJib3ggYXNwZWN0IHJhdGlvCisgICAgICAgICAgICBmbG9hdCByYXRpb1ggPSAod2lk
dGggLyBoZWlnaHQpOworICAgICAgICAgICAgZmxvYXQgcmF0aW9ZID0gKGhlaWdodCAvIHdpZHRo
KTsKKyAgICAgICAgICAgIG1hdC5zY2FsZSgod2lkdGggPiBoZWlnaHQpID8gMSA6IHJhdGlvWCwg
KHdpZHRoID4gaGVpZ2h0KSA/IHJhdGlvWSA6IDEpOworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgY3ggPSBncmFkaWVudENlbnRlcigpLngoKTsKKyAgICAgICAgY3kgPSBncmFkaWVu
dENlbnRlcigpLnkoKTsKKworICAgICAgICBmeCA9IGdyYWRpZW50Rm9jYWwoKS54KCk7CisgICAg
ICAgIGZ5ID0gZ3JhZGllbnRGb2NhbCgpLnkoKTsKKworICAgICAgICBmeCAtPSBjeDsKKyAgICAg
ICAgZnkgLT0gY3k7CisKKyAgICAgICAgciA9IGdyYWRpZW50UmFkaXVzKCk7CisgICAgfQorCisg
ICAgaWYgKHNxcnQoZnggKiBmeCArIGZ5ICogZnkpID4gcikgeworICAgICAgICAvLyBTcGVjOiBJ
ZiAoZngsIGZ5KSBsaWVzIG91dHNpZGUgdGhlIGNpcmNsZSBkZWZpbmVkIGJ5IChjeCwgY3kpIGFu
ZCByLCBzZXQgKGZ4LCBmeSkKKyAgICAgICAgLy8gdG8gdGhlIHBvaW50IG9mIGludGVyc2VjdGlv
biBvZiB0aGUgbGluZSB0aHJvdWdoIChmeCwgZnkpIGFuZCB0aGUgY2lyY2xlLgorICAgICAgICBk
b3VibGUgYW5nbGUgPSBhdGFuMihmeSwgZngpOworICAgICAgICBmeCA9IGludChjb3MoYW5nbGUp
ICogcikgLSAxOworICAgICAgICBmeSA9IGludChzaW4oYW5nbGUpICogcikgLSAxOworICAgIH0K
KworICAgIFFSYWRpYWxHcmFkaWVudCBncmFkaWVudChRUG9pbnRGKGN4LCBjeSksIGdyYWRpZW50
UmFkaXVzKCksIFFQb2ludEYoZnggKyBjeCwgZnkgKyBjeSkpOworICAgIGlmIChzcHJlYWRNZXRo
b2QoKSA9PSBTUFJFQURNRVRIT0RfUkVQRUFUKQorICAgICAgICBncmFkaWVudC5zZXRTcHJlYWQo
UUdyYWRpZW50OjpSZXBlYXRTcHJlYWQpOworICAgIGVsc2UgaWYgKHNwcmVhZE1ldGhvZCgpID09
IFNQUkVBRE1FVEhPRF9SRUZMRUNUKQorICAgICAgICBncmFkaWVudC5zZXRTcHJlYWQoUUdyYWRp
ZW50OjpSZWZsZWN0U3ByZWFkKTsKKyAgICBlbHNlCisgICAgICAgIGdyYWRpZW50LnNldFNwcmVh
ZChRR3JhZGllbnQ6OlBhZFNwcmVhZCk7CisKKyAgICBkb3VibGUgb3BhY2l0eSA9IDEuMDsKKwor
ICAgIC8vIFRPRE86IEdyYWRpZW50IHRyYW5zZm9ybSArIG9wYWNpdHkgZml4ZXMhCisKKyAgICAv
LyBBZmZpbmVUcmFuc2Zvcm0gZ3JhZGllbnRUcmFucyA9IGdyYWRpZW50VHJhbnNmb3JtKCk7Cisg
ICAgLy8gZ3JhZGllbnRUcmFucy5tYXAoY3gsIGN5LCAmY3gsICZjeSk7CisgICAgLy8gcXRDb250
ZXh0LT5wYWludGVyKCkuc2V0TWF0cml4KG1hdCk7CisKKyAgICBpZiAoKHR5cGUgJiBBUFBMWV9U
T19GSUxMKSAmJiByZW5kZXJTdHlsZS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKSB7CisgICAgICAg
IGZpbGxDb2xvckFycmF5KGdyYWRpZW50LCBncmFkaWVudFN0b3BzKCksIG9wYWNpdHkpOworCisg
ICAgICAgIFFCcnVzaCBicnVzaChncmFkaWVudCk7CisKKyAgICAgICAgcXRDb250ZXh0LT5wYWlu
dGVyKCkuc2V0QnJ1c2goYnJ1c2gpOworICAgICAgICBxdENvbnRleHQtPnNldEZpbGxSdWxlKHJl
bmRlclN0eWxlLT5zdmdTdHlsZSgpLT5maWxsUnVsZSgpKTsKKyAgICB9CisKKyAgICBpZiAoKHR5
cGUgJiBBUFBMWV9UT19TVFJPS0UpICYmIHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJv
a2UoKSkgeworICAgICAgICBmaWxsQ29sb3JBcnJheShncmFkaWVudCwgZ3JhZGllbnRTdG9wcygp
LCBvcGFjaXR5KTsKKworICAgICAgICBRUGVuIHBlbjsKKyAgICAgICAgUUJydXNoIGJydXNoKGdy
YWRpZW50KTsKKworICAgICAgICBzZXRQZW5Qcm9wZXJ0aWVzKG9iamVjdCwgcmVuZGVyU3R5bGUs
IHBlbik7CisgICAgICAgIHBlbi5zZXRCcnVzaChicnVzaCk7CisKKyAgICAgICAgcXRDb250ZXh0
LT5wYWludGVyKCkuc2V0UGVuKHBlbik7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKy8vIHZpbTp0cz00Om5vZXQKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50U2VydmVyU29saWRR
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdmcvcXQvU1ZH
UGFpbnRTZXJ2ZXJTb2xpZFF0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3ZnL3F0L1NWR1BhaW50U2VydmVyU29saWRRdC5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNjggQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVy
bWFubiA8d2lsZGZveEBrZGUub3JnPgorCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtE
RSBwcm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT
QS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmZGVmIFNWR19TVVBQT1JUCisjaW5j
bHVkZSAiU1ZHUGFpbnRTZXJ2ZXJTb2xpZC5oIgorCisjaW5jbHVkZSAiS1JlbmRlcmluZ0Rldmlj
ZVF0LmgiCisjaW5jbHVkZSAiUmVuZGVyUGF0aC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2Jvb2wgU1ZHUGFpbnRTZXJ2ZXJTb2xpZDo6c2V0dXAoS1JlbmRlcmluZ0RldmljZUNvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdldFR5cGUg
dHlwZSkgY29uc3QKK3sKKyAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0KiBxdENvbnRleHQg
PSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0Kj4oY29udGV4dCk7CisKKyAg
ICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CisgICAgLy8gVE9E
Tz8gcXRDb250ZXh0LT5wYWludGVyKCkuc2V0T3BhY2l0eShyZW5kZXJTdHlsZS0+b3BhY2l0eSgp
KTsKKworICAgIFFDb2xvciBjID0gY29sb3IoKTsKKworICAgIGlmICgodHlwZSAmIEFQUExZX1RP
X0ZJTEwpICYmIHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkpIHsKKyAgICAgICAg
Yy5zZXRBbHBoYUYocmVuZGVyU3R5bGUtPnN2Z1N0eWxlKCktPmZpbGxPcGFjaXR5KCkpOworCisg
ICAgICAgIFFCcnVzaCBicnVzaChjKTsKKyAgICAgICAgcXRDb250ZXh0LT5wYWludGVyKCkuc2V0
QnJ1c2goYnJ1c2gpOworICAgICAgICBxdENvbnRleHQtPnNldEZpbGxSdWxlKHJlbmRlclN0eWxl
LT5zdmdTdHlsZSgpLT5maWxsUnVsZSgpKTsKKworICAgICAgICAvKiBpZihpc1BhaW50aW5nVGV4
dCgpKSAuLi4gKi8KKyAgICB9CisKKyAgICBpZigodHlwZSAmIEFQUExZX1RPX1NUUk9LRSkgJiYg
cmVuZGVyU3R5bGUtPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgpKSB7CisgICAgICAgIGMuc2V0QWxw
aGFGKHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5zdHJva2VPcGFjaXR5KCkpOworCisgICAgICAg
IFFQZW4gcGVuKGMpOworICAgICAgICBzZXRQZW5Qcm9wZXJ0aWVzKG9iamVjdCwgcmVuZGVyU3R5
bGUsIHBlbik7CisgICAgICAgIHF0Q29udGV4dC0+cGFpbnRlcigpLnNldFBlbihwZW4pOworCisg
ICAgICAgIC8qIGlmKGlzUGFpbnRpbmdUZXh0KCkpIC4uLiAqLworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisvLyB2aW06
dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmNwcAkocmV2aXNpb24gMTc4NjIp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjAzLDEzICsyMDMsMTMgQEAgdm9pZCBSZW5kZXJQYXRoOjpwYWludChQYWludEluZm8mIHBhaW50
SQogCiAgICAgY29udGV4dC0+Y2xlYXJQYXRoKCk7CiAgICAgCi0gICAgS1JlbmRlcmluZ1BhaW50
U2VydmVyKiBmaWxsUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OmZpbGxQYWludFNl
cnZlcihzdHlsZSgpLCB0aGlzKTsKKyAgICBTVkdQYWludFNlcnZlciogZmlsbFBhaW50U2VydmVy
ID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxsUGFpbnRTZXJ2ZXIoc3R5bGUoKSwgdGhpcyk7CiAg
ICAgaWYgKGZpbGxQYWludFNlcnZlcikgewogICAgICAgICBjb250ZXh0LT5hZGRQYXRoKHBhdGgo
KSk7CiAgICAgICAgIGZpbGxQYWludFNlcnZlci0+c2V0QWN0aXZlQ2xpZW50KHRoaXMpOwogICAg
ICAgICBmaWxsUGFpbnRTZXJ2ZXItPmRyYXcoY29udGV4dCwgdGhpcywgQVBQTFlfVE9fRklMTCk7
CiAgICAgfQotICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciogc3Ryb2tlUGFpbnRTZXJ2ZXIgPSBL
U1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50U2VydmVyKHN0eWxlKCksIHRoaXMpOworICAg
IFNWR1BhaW50U2VydmVyKiBzdHJva2VQYWludFNlcnZlciA9IEtTVkdQYWludGVyRmFjdG9yeTo6
c3Ryb2tlUGFpbnRTZXJ2ZXIoc3R5bGUoKSwgdGhpcyk7CiAgICAgaWYgKHN0cm9rZVBhaW50U2Vy
dmVyKSB7CiAgICAgICAgIGNvbnRleHQtPmFkZFBhdGgocGF0aCgpKTsgLy8gcGF0aCBpcyBjbGVh
cmVkIHdoZW4gZmlsbGVkLgogICAgICAgICBzdHJva2VQYWludFNlcnZlci0+c2V0QWN0aXZlQ2xp
ZW50KHRoaXMpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5saW5lRmxvd0JveC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5saW5lRmxvd0JveC5jcHAJKHJl
dmlzaW9uIDE3ODYyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5saW5lRmxvd0JveC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCB2b2lkIHBhaW50U1ZHSW5saW5lRmxv
dyhJbmxpbmVGbG93Qm94KiBmCiAgICAgICAgIGMtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3Bh
Y2l0eSk7CiAgICAgfQogICAgIAotICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciogZmlsbFBhaW50
U2VydmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxsUGFpbnRTZXJ2ZXIob2JqZWN0LT5zdHls
ZSgpLCBvYmplY3QpOworICAgIFNWR1BhaW50U2VydmVyKiBmaWxsUGFpbnRTZXJ2ZXIgPSBLU1ZH
UGFpbnRlckZhY3Rvcnk6OmZpbGxQYWludFNlcnZlcihvYmplY3QtPnN0eWxlKCksIG9iamVjdCk7
CiAgICAgaWYgKGZpbGxQYWludFNlcnZlcikgewogICAgICAgICBmaWxsUGFpbnRTZXJ2ZXItPnNl
dFBhaW50aW5nVGV4dCh0cnVlKTsKICAgICAgICAgaWYgKGZpbGxQYWludFNlcnZlci0+c2V0dXAo
Y29udGV4dCwgb2JqZWN0LCBBUFBMWV9UT19GSUxMKSkgewpAQCAtMTExLDcgKzExMSw3IEBAIHZv
aWQgcGFpbnRTVkdJbmxpbmVGbG93KElubGluZUZsb3dCb3gqIGYKICAgICAgICAgfQogICAgICAg
ICBmaWxsUGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dChmYWxzZSk7CiAgICAgfQotICAgIEtS
ZW5kZXJpbmdQYWludFNlcnZlciogc3Ryb2tlUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rv
cnk6OnN0cm9rZVBhaW50U2VydmVyKG9iamVjdC0+c3R5bGUoKSwgb2JqZWN0KTsKKyAgICBTVkdQ
YWludFNlcnZlciogc3Ryb2tlUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9r
ZVBhaW50U2VydmVyKG9iamVjdC0+c3R5bGUoKSwgb2JqZWN0KTsKICAgICBpZiAoc3Ryb2tlUGFp
bnRTZXJ2ZXIpIHsKICAgICAgICAgc3Ryb2tlUGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dCh0
cnVlKTsKICAgICAgICAgaWYgKHN0cm9rZVBhaW50U2VydmVyLT5zZXR1cChjb250ZXh0LCBvYmpl
Y3QsIEFQUExZX1RPX1NUUk9LRSkpIHsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRl
clRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRl
clRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiAxNzg2MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NW
R1JlbmRlclRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw5IEBACiAj
aW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5l
ci5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJHcmFkaWVudC5oIgotI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlclBh
dHRlcm4uaCIKLSNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZC5oIgorI2luY2x1
ZGUgIlNWR1BhaW50U2VydmVyR3JhZGllbnQuaCIKKyNpbmNsdWRlICJTVkdQYWludFNlcnZlclBh
dHRlcm4uaCIKKyNpbmNsdWRlICJTVkdQYWludFNlcnZlclNvbGlkLmgiCiAjaW5jbHVkZSAiS0Nh
bnZhc1JlbmRlcmluZ1N0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgogI2lu
Y2x1ZGUgPG1hdGguaD4KQEAgLTIyOCw3ICsyMjgsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZVN0eWxl
KFRleHRTdHJlYW0mIHRzLCBjCiAgICAgICAgIHRzIDw8ICIgW29wYWNpdHk9IiA8PCBzdHlsZS0+
b3BhY2l0eSgpIDw8ICJdIjsKICAgICBpZiAob2JqZWN0LmlzUmVuZGVyUGF0aCgpKSB7CiAgICAg
ICAgIGNvbnN0IFJlbmRlclBhdGgmIHBhdGggPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJQYXRo
Jj4ob2JqZWN0KTsKLSAgICAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpzdHJva2VQYWludFNl
cnZlciA9IEtTVkdQYWludGVyRmFjdG9yeTo6c3Ryb2tlUGFpbnRTZXJ2ZXIoc3R5bGUsICZwYXRo
KTsKKyAgICAgICAgU1ZHUGFpbnRTZXJ2ZXIgKnN0cm9rZVBhaW50U2VydmVyID0gS1NWR1BhaW50
ZXJGYWN0b3J5OjpzdHJva2VQYWludFNlcnZlcihzdHlsZSwgJnBhdGgpOwogICAgICAgICBpZiAo
c3Ryb2tlUGFpbnRTZXJ2ZXIpIHsKICAgICAgICAgICAgIFRleHRTdHJlYW1TZXBhcmF0b3Igcygi
ICIpOwogICAgICAgICAgICAgdHMgPDwgIiBbc3Ryb2tlPXsiOwpAQCAtMjU5LDcgKzI1OSw3IEBA
IHN0YXRpYyB2b2lkIHdyaXRlU3R5bGUoVGV4dFN0cmVhbSYgdHMsIGMKICAgICAgICAgICAgICAg
ICB0cyA8PCBzIDw8ICJbZGFzaCBhcnJheT0iIDw8IGRhc2hBcnJheSA8PCAiXSI7ICAgICAgICAK
ICAgICAgICAgICAgIHRzIDw8ICJ9XSI7CiAgICAgICAgIH0KLSAgICAgICAgS1JlbmRlcmluZ1Bh
aW50U2VydmVyICpmaWxsUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OmZpbGxQYWlu
dFNlcnZlcihzdHlsZSwgJnBhdGgpOworICAgICAgICBTVkdQYWludFNlcnZlciAqZmlsbFBhaW50
U2VydmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxsUGFpbnRTZXJ2ZXIoc3R5bGUsICZwYXRo
KTsKICAgICAgICAgaWYgKGZpbGxQYWludFNlcnZlcikgewogICAgICAgICAgICAgVGV4dFN0cmVh
bVNlcGFyYXRvciBzKCIgIik7CiAgICAgICAgICAgICB0cyA8PCAiIFtmaWxsPXsiOwpAQCAtMzY4
LDcgKzM2OCw3IEBAIHZvaWQgd3JpdGVSZW5kZXJSZXNvdXJjZXMoVGV4dFN0cmVhbSYgdHMKICAg
ICAgICAgCiAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgZWxlbWVudElkID0gc3ZnRWxlbWVudC0+
Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyKS5kZXByZWNhdGVkU3RyaW5nKCk7CiAgICAg
ICAgIGlmIChyZXNvdXJjZS0+aXNQYWludFNlcnZlcigpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8
S1JlbmRlcmluZ1BhaW50U2VydmVyPiBwYWludFNlcnZlciA9IFdURjo6c3RhdGljX3BvaW50ZXJf
Y2FzdDxLUmVuZGVyaW5nUGFpbnRTZXJ2ZXI+KHJlc291cmNlKTsKKyAgICAgICAgICAgIFJlZlB0
cjxTVkdQYWludFNlcnZlcj4gcGFpbnRTZXJ2ZXIgPSBXVEY6OnN0YXRpY19wb2ludGVyX2Nhc3Q8
U1ZHUGFpbnRTZXJ2ZXI+KHJlc291cmNlKTsKICAgICAgICAgICAgIHRzIDw8ICJLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXIge2lkPVwiIiA8PCBlbGVtZW50SWQgPDwgIlwiICIgPDwgKnBhaW50U2VydmVy
IDw8ICJ9IiA8PCBlbmRsOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHRzIDw8ICJLQ2Fu
dmFzUmVzb3VyY2Uge2lkPVwiIiA8PCBlbGVtZW50SWQgPDwgIlwiICIgPDwgKnJlc291cmNlIDw8
ICJ9IiA8PCBlbmRsOwo=
</data>
<flag name="review"
          id="4131"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>