<?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>217982</bug_id>
          
          <creation_ts>2020-10-20 13:11:20 -0700</creation_ts>
          <short_desc>[WebGPU] Add Dawn implementation skeleton</short_desc>
          <delta_ts>2020-10-22 09:48:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Don Olmstead">don.olmstead</reporter>
          <assigned_to name="Don Olmstead">don.olmstead</assigned_to>
          <cc>annulen</cc>
    
    <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1699889</commentid>
    <comment_count>0</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2020-10-20 13:11:20 -0700</bug_when>
    <thetext>Make it compile and link successfully.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1699894</commentid>
    <comment_count>1</comment_count>
      <attachid>411907</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2020-10-20 13:17:28 -0700</bug_when>
    <thetext>Created attachment 411907
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700645</commentid>
    <comment_count>2</comment_count>
      <attachid>412099</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2020-10-22 08:37:13 -0700</bug_when>
    <thetext>Created attachment 412099
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700650</commentid>
    <comment_count>3</comment_count>
      <attachid>412101</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2020-10-22 08:40:16 -0700</bug_when>
    <thetext>Created attachment 412101
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700687</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-22 09:47:25 -0700</bug_when>
    <thetext>Committed r268869: &lt;https://trac.webkit.org/changeset/268869&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 412101.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700688</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-22 09:48:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/70577479&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411907</attachid>
            <date>2020-10-20 13:17:28 -0700</date>
            <delta_ts>2020-10-22 08:37:13 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-217982.diff</filename>
            <type>text/plain</type>
            <size>48616</size>
            <attacher name="Don Olmstead">don.olmstead</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCmluZGV4IGM0Yjg2YzE0ODlhYS4uYTY4
OTY0NzdkZTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKQEAgLTQsNiAr
NCwxMCBAQCBpbmNsdWRlKHBsYXRmb3JtL0ltYWdlRGVjb2RlcnMuY21ha2UpCiBpbmNsdWRlKHBs
YXRmb3JtL09wZW5TU0wuY21ha2UpCiBpbmNsdWRlKHBsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21h
a2UpCiAKK2lmIChVU0VfREFXTikKKyAgICBpbmNsdWRlKHBsYXRmb3JtL0Rhd24uY21ha2UpCitl
bmRpZiAoKQorCiBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklF
UwogICAgICIke1dFQktJVF9MSUJSQVJJRVNfRElSfS9pbmNsdWRlIgogICAgICIke1dFQkNPUkVf
RElSfS9sb2FkZXIvYXJjaGl2ZS9jZiIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0Rhd24uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EYXduLmNtYWtlCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjI2YjQ2NTUxMTU2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGF3bi5jbWFrZQpAQCAtMCwwICsx
LDI3IEBACitsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklFUwor
ICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3biIKKykKKworbGlz
dChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24v
R1BVQmluZEdyb3VwQWxsb2NhdG9yRGF3bi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUv
ZGF3bi9HUFVCaW5kR3JvdXBEYXduLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXdu
L0dQVUJpbmRHcm91cExheW91dERhd24uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rh
d24vR1BVQnVmZmVyRGF3bi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVD
b21tYW5kQnVmZmVyRGF3bi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVD
b21wdXRlUGFzc0VuY29kZXJEYXduLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXdu
L0dQVUNvbXB1dGVQaXBlbGluZURhd24uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rh
d24vR1BVRGV2aWNlRGF3bi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVQ
cm9ncmFtbWFibGVQYXNzRW5jb2RlckRhd24uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L2Rhd24vR1BVUXVldWVEYXduLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQ
VVJlbmRlclBhc3NFbmNvZGVyRGF3bi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3
bi9HUFVSZW5kZXJQaXBlbGluZURhd24uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rh
d24vR1BVU2FtcGxlckRhd24uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BV
U2hhZGVyTW9kdWxlRGF3bi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVT
d2FwQ2hhaW5EYXduLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVRleHR1
cmVEYXduLmNwcAorKQorCitsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfTElCUkFSSUVTCisg
ICAgRGF3bjo6ZGF3bgorICAgIERhd246Om5hdGl2ZQorKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVBsYXRmb3JtVHlwZXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVQbGF0Zm9ybVR5cGVzLmgKaW5kZXggMWI3
ZGJhNTk2ZWMzLi45MmM3NjcyNjc4NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9HUFVQbGF0Zm9ybVR5cGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVBsYXRmb3JtVHlwZXMuaApAQCAtMjcsNiArMjcsOCBA
QAogCiAjaWYgVVNFKE1FVEFMKQogI2luY2x1ZGUgIkdQVVBsYXRmb3JtVHlwZXNNZXRhbC5oIgor
I2VsaWYgVVNFKERBV04pCisjaW5jbHVkZSAiR1BVUGxhdGZvcm1UeXBlc0Rhd24uaCIKICNlbHNl
CiAjZXJyb3IgIlVuc3VwcG9ydGVkIHBsYXRmb3JtIGZvciBXZWJHUFUiCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVUJpbmRH
cm91cEFsbG9jYXRvckRhd24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L2Rhd24vR1BVQmluZEdyb3VwQWxsb2NhdG9yRGF3bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43ZDZkNThkMzViMTUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVCaW5kR3JvdXBBbGxv
Y2F0b3JEYXduLmNwcApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJHUFVCaW5kR3JvdXBBbGxvY2F0b3IuaCIKKworI2lmIEVO
QUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJHUFVFcnJvclNjb3Blcy5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1JlZjxHUFVCaW5kR3JvdXBBbGxvY2F0b3I+IEdQVUJpbmRHcm91cEFsbG9j
YXRvcjo6Y3JlYXRlKEdQVUVycm9yU2NvcGVzJiBlcnJvcnMpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgR1BVQmluZEdyb3VwQWxsb2NhdG9yKGVycm9ycykpOworfQorCitHUFVCaW5kR3Jv
dXBBbGxvY2F0b3I6OkdQVUJpbmRHcm91cEFsbG9jYXRvcihHUFVFcnJvclNjb3BlcyYgZXJyb3Jz
KQorICAgIDogbV9lcnJvclNjb3BlcyhtYWtlUmVmKGVycm9ycykpCit7Cit9CisKK2Jvb2wgR1BV
QmluZEdyb3VwQWxsb2NhdG9yOjpyZWFsbG9jYXRlKFBsYXRmb3JtR1BVQnVmZmVyT2Zmc2V0IG5l
d09mZnNldCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgR1BVQmluZEdyb3VwQWxs
b2NhdG9yOjp0cnlSZXNldCgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvZGF3bi9HUFVCaW5kR3JvdXBEYXduLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVUJpbmRHcm91cERhd24uY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNjA1ZTZiY2RjMTdmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVQmlu
ZEdyb3VwRGF3bi5jcHAKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJHUFVCaW5kR3JvdXAuaCIKKworI2lmIEVOQUJMRShXRUJHUFUp
CisKKyNpbmNsdWRlICJHUFVCaW5kR3JvdXBBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJHUFVFcnJv
clNjb3Blcy5oIgorI2luY2x1ZGUgPHdlYmdwdS93ZWJncHUuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitSZWZQdHI8R1BVQmluZEdyb3VwPiBHUFVCaW5kR3JvdXA6OnRyeUNyZWF0ZShjb25z
dCBHUFVCaW5kR3JvdXBEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBHUFVCaW5kR3JvdXBBbGxvY2F0
b3ImIGFsbG9jYXRvcikKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworR1BVQmluZEdyb3Vw
OjpHUFVCaW5kR3JvdXAoR1BVQmluZEdyb3VwQWxsb2NhdG9yOjpBcmd1bWVudEJ1ZmZlck9mZnNl
dHMmJiBvZmZzZXRzLCBHUFVCaW5kR3JvdXBBbGxvY2F0b3ImIGFsbG9jYXRvciwgSGFzaFNldDxS
ZWY8R1BVQnVmZmVyPj4mJiBidWZmZXJzLCBIYXNoU2V0PFJlZjxHUFVUZXh0dXJlPj4mJiB0ZXh0
dXJlcykKKyAgICA6IG1fYXJndW1lbnRCdWZmZXJPZmZzZXRzKFdURk1vdmUob2Zmc2V0cykpCisg
ICAgLCBtX2FsbG9jYXRvcihtYWtlUmVmKGFsbG9jYXRvcikpCisgICAgLCBtX2JvdW5kQnVmZmVy
cyhXVEZNb3ZlKGJ1ZmZlcnMpKQorICAgICwgbV9ib3VuZFRleHR1cmVzKFdURk1vdmUodGV4dHVy
ZXMpKQoreworfQorCitHUFVCaW5kR3JvdXA6On5HUFVCaW5kR3JvdXAoKQoreworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVQmluZEdyb3Vw
TGF5b3V0RGF3bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3
bi9HUFVCaW5kR3JvdXBMYXlvdXREYXduLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAuLmUxNzQ3YTk5NzI4NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVUJpbmRHcm91cExheW91dERhd24uY3Bw
CkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiR1BVQmluZEdyb3VwTGF5b3V0LmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5j
bHVkZSAiR1BVRGV2aWNlLmgiCisjaW5jbHVkZSA8d2ViZ3B1L3dlYmdwdS5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1JlZlB0cjxHUFVCaW5kR3JvdXBMYXlvdXQ+IEdQVUJpbmRHcm91cExh
eW91dDo6dHJ5Q3JlYXRlKGNvbnN0IEdQVURldmljZSYgZGV2aWNlLCBjb25zdCBHUFVCaW5kR3Jv
dXBMYXlvdXREZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIHJldHVybiBudWxscHRyOwor
fQorCisvKgorR1BVQmluZEdyb3VwTGF5b3V0OjpHUFVCaW5kR3JvdXBMYXlvdXQoQmluZGluZ3NN
YXBUeXBlJiYgYmluZGluZ3NNYXAsIFJldGFpblB0cjxNVExBcmd1bWVudEVuY29kZXI+JiYgdmVy
dGV4LCBSZXRhaW5QdHI8TVRMQXJndW1lbnRFbmNvZGVyPiYmIGZyYWdtZW50LCBSZXRhaW5QdHI8
TVRMQXJndW1lbnRFbmNvZGVyPiYmIGNvbXB1dGUpCisgICAgOiBtX3ZlcnRleEVuY29kZXIoV1RG
TW92ZSh2ZXJ0ZXgpKQorICAgICwgbV9mcmFnbWVudEVuY29kZXIoV1RGTW92ZShmcmFnbWVudCkp
CisgICAgLCBtX2NvbXB1dGVFbmNvZGVyKFdURk1vdmUoY29tcHV0ZSkpCisgICAgLCBtX2JpbmRp
bmdzTWFwKFdURk1vdmUoYmluZGluZ3NNYXApKQoreworfQorKi8KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVUJ1ZmZlckRhd24uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVQnVmZmVyRGF3bi5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40Yjg4MmEyMjkxZmQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3
bi9HUFVCdWZmZXJEYXduLmNwcApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1BVQnVmZmVyLmgiCisKKyNpZiBFTkFCTEUo
V0VCR1BVKQorCisjaW5jbHVkZSAiR1BVQnVmZmVyRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIkdQ
VURldmljZS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FycmF5QnVmZmVyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEdQVUJ1ZmZlcj4gR1BVQnVmZmVyOjp0cnlDcmVh
dGUoR1BVRGV2aWNlJiBkZXZpY2UsIGNvbnN0IEdQVUJ1ZmZlckRlc2NyaXB0b3ImIGRlc2NyaXB0
b3IsIEdQVUJ1ZmZlck1hcHBlZE9wdGlvbiBpc01hcHBlZCwgR1BVRXJyb3JTY29wZXMmIGVycm9y
U2NvcGVzKQoreworICAgIHJldHVybiBudWxscHRyOworfQorCitHUFVCdWZmZXI6OkdQVUJ1ZmZl
cihQbGF0Zm9ybUJ1ZmZlclNtYXJ0UHRyJiYgYnVmZmVyLCBHUFVEZXZpY2UmIGRldmljZSwgc2l6
ZV90IHNpemUsIE9wdGlvblNldDxHUFVCdWZmZXJVc2FnZTo6RmxhZ3M+IHVzYWdlLCBHUFVCdWZm
ZXJNYXBwZWRPcHRpb24gaXNNYXBwZWQpCisgICAgOiBtX3BsYXRmb3JtQnVmZmVyKFdURk1vdmUo
YnVmZmVyKSkKKyAgICAsIG1fZGV2aWNlKG1ha2VSZWYoZGV2aWNlKSkKKyAgICAsIG1fYnl0ZUxl
bmd0aChzaXplKQorICAgICwgbV91c2FnZSh1c2FnZSkKKyAgICAsIG1faXNNYXBwZWRGcm9tQ3Jl
YXRpb24oaXNNYXBwZWQgPT0gR1BVQnVmZmVyTWFwcGVkT3B0aW9uOjpJc01hcHBlZCkKK3sKK30K
KworR1BVQnVmZmVyOjp+R1BVQnVmZmVyKCkKK3sKKyAgICBkZXN0cm95KG51bGxwdHIpOworfQor
Citib29sIEdQVUJ1ZmZlcjo6aXNSZWFkT25seSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK0dQVUJ1ZmZlcjo6U3RhdGUgR1BVQnVmZmVyOjpzdGF0ZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIFN0YXRlOjpVbm1hcHBlZDsKK30KKworSlNDOjpBcnJheUJ1ZmZlciogR1BVQnVmZmVy
OjptYXBPbkNyZWF0aW9uKCkKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBHUFVC
dWZmZXI6OnJlZ2lzdGVyTWFwcGluZ0NhbGxiYWNrKE1hcHBpbmdDYWxsYmFjayYmIGNhbGxiYWNr
LCBib29sIGlzUmVhZCwgR1BVRXJyb3JTY29wZXMmIGVycm9yU2NvcGVzKQoreworfQorCit2b2lk
IEdQVUJ1ZmZlcjo6cnVuTWFwcGluZ0NhbGxiYWNrKCkKK3sKK30KKworSlNDOjpBcnJheUJ1ZmZl
ciogR1BVQnVmZmVyOjpzdGFnaW5nQnVmZmVyRm9yUmVhZCgpCit7CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK0pTQzo6QXJyYXlCdWZmZXIqIEdQVUJ1ZmZlcjo6c3RhZ2luZ0J1ZmZlckZvcldy
aXRlKCkKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBHUFVCdWZmZXI6OmNvcHlT
dGFnaW5nQnVmZmVyVG9HUFUoR1BVRXJyb3JTY29wZXMqIGVycm9yU2NvcGVzKQoreworfQorCit2
b2lkIEdQVUJ1ZmZlcjo6dW5tYXAoR1BVRXJyb3JTY29wZXMqIGVycm9yU2NvcGVzKQoreworfQor
Cit2b2lkIEdQVUJ1ZmZlcjo6ZGVzdHJveShHUFVFcnJvclNjb3BlcyogZXJyb3JTY29wZXMpCit7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9H
UFVDb21tYW5kQnVmZmVyRGF3bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvZGF3bi9HUFVDb21tYW5kQnVmZmVyRGF3bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwLi5iN2U2MTM4ZjBkMzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVDb21tYW5kQnVmZmVyRGF3
bi5jcHAKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IElu
dGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiR1BVQ29tbWFuZEJ1ZmZlci5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWZQdHI8R1BVQ29tbWFuZEJ1ZmZlcj4gR1BVQ29t
bWFuZEJ1ZmZlcjo6dHJ5Q3JlYXRlKGNvbnN0IEdQVURldmljZSYgZGV2aWNlKQoreworICAgIHJl
dHVybiBudWxscHRyOworfQorCitHUFVDb21tYW5kQnVmZmVyOjpHUFVDb21tYW5kQnVmZmVyKFBs
YXRmb3JtQ29tbWFuZEJ1ZmZlclNtYXJ0UHRyJiYgYnVmZmVyKQorICAgIDogbV9wbGF0Zm9ybUNv
bW1hbmRCdWZmZXIoV1RGTW92ZShidWZmZXIpKQoreworfQorCit2b2lkIEdQVUNvbW1hbmRCdWZm
ZXI6OmNvcHlCdWZmZXJUb0J1ZmZlcihSZWY8R1BVQnVmZmVyPiYmIHNyYywgdWludDY0X3Qgc3Jj
T2Zmc2V0LCBSZWY8R1BVQnVmZmVyPiYmIGRzdCwgdWludDY0X3QgZHN0T2Zmc2V0LCB1aW50NjRf
dCBzaXplKQoreworfQorCit2b2lkIEdQVUNvbW1hbmRCdWZmZXI6OmNvcHlCdWZmZXJUb1RleHR1
cmUoR1BVQnVmZmVyQ29weVZpZXcmJiBzcmNCdWZmZXIsIEdQVVRleHR1cmVDb3B5VmlldyYmIGRz
dFRleHR1cmUsIGNvbnN0IEdQVUV4dGVudDNEJiBzaXplKQoreworfQorCit2b2lkIEdQVUNvbW1h
bmRCdWZmZXI6OmNvcHlUZXh0dXJlVG9CdWZmZXIoR1BVVGV4dHVyZUNvcHlWaWV3JiYgc3JjVGV4
dHVyZSwgR1BVQnVmZmVyQ29weVZpZXcmJiBkc3RCdWZmZXIsIGNvbnN0IEdQVUV4dGVudDNEJiBz
aXplKQoreworfQorCit2b2lkIEdQVUNvbW1hbmRCdWZmZXI6OmNvcHlUZXh0dXJlVG9UZXh0dXJl
KEdQVVRleHR1cmVDb3B5VmlldyYmIHNyYywgR1BVVGV4dHVyZUNvcHlWaWV3JiYgZHN0LCBjb25z
dCBHUFVFeHRlbnQzRCYgc2l6ZSkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVUNvbXB1dGVQYXNzRW5jb2RlckRhd24uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVQ29tcHV0ZVBhc3NFbmNv
ZGVyRGF3bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kMDky
MGZkNGZjN2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvZGF3bi9HUFVDb21wdXRlUGFzc0VuY29kZXJEYXduLmNwcApAQCAtMCwwICsxLDU5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlu
bWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHUFVD
b21wdXRlUGFzc0VuY29kZXIuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworUmVmUHRyPEdQVUNvbXB1dGVQYXNzRW5jb2Rlcj4gR1BVQ29tcHV0ZVBhc3NF
bmNvZGVyOjp0cnlDcmVhdGUoUmVmPEdQVUNvbW1hbmRCdWZmZXI+JiYgYnVmZmVyKQoreworICAg
IHJldHVybiBudWxscHRyOworfQorCitHUFVDb21wdXRlUGFzc0VuY29kZXI6OkdQVUNvbXB1dGVQ
YXNzRW5jb2RlcihSZWY8R1BVQ29tbWFuZEJ1ZmZlcj4mJiBidWZmZXIsIFBsYXRmb3JtQ29tcHV0
ZVBhc3NFbmNvZGVyU21hcnRQdHImJiBlbmNvZGVyKQorICAgIDogR1BVUHJvZ3JhbW1hYmxlUGFz
c0VuY29kZXIoV1RGTW92ZShidWZmZXIpKQorICAgICwgbV9wbGF0Zm9ybUNvbXB1dGVQYXNzRW5j
b2RlcihXVEZNb3ZlKGVuY29kZXIpKQoreworfQorCit2b2lkIEdQVUNvbXB1dGVQYXNzRW5jb2Rl
cjo6c2V0UGlwZWxpbmUoUmVmPGNvbnN0IEdQVUNvbXB1dGVQaXBlbGluZT4mJiBwaXBlbGluZSkK
K3sKK30KKwordm9pZCBHUFVDb21wdXRlUGFzc0VuY29kZXI6OmRpc3BhdGNoKHVuc2lnbmVkIHgs
IHVuc2lnbmVkIHksIHVuc2lnbmVkIHopCit7Cit9CisKK2NvbnN0IFBsYXRmb3JtUHJvZ3JhbW1h
YmxlUGFzc0VuY29kZXIqIEdQVUNvbXB1dGVQYXNzRW5jb2Rlcjo6cGxhdGZvcm1QYXNzRW5jb2Rl
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG51bGxwdHI7Ly9tX3BsYXRmb3JtQ29tcHV0ZVBhc3NF
bmNvZGVyLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L2Rhd24vR1BVQ29tcHV0ZVBpcGVsaW5lRGF3bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVDb21wdXRlUGlwZWxpbmVEYXduLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjEyNDcxODdkMjczYwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQ
VUNvbXB1dGVQaXBlbGluZURhd24uY3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdQVUNvbXB1dGVQaXBlbGluZS5oIgor
CisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIkdQVVBpcGVsaW5lTGF5b3V0LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEdQVUNvbXB1dGVQaXBlbGluZT4gR1BVQ29t
cHV0ZVBpcGVsaW5lOjp0cnlDcmVhdGUoY29uc3QgR1BVRGV2aWNlJiBkZXZpY2UsIGNvbnN0IEdQ
VUNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIEdQVUVycm9yU2NvcGVzJiBl
cnJvclNjb3BlcykKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworLyoKK0dQVUNvbXB1dGVQ
aXBlbGluZTo6R1BVQ29tcHV0ZVBpcGVsaW5lKFJldGFpblB0cjxNVExDb21wdXRlUGlwZWxpbmVT
dGF0ZT4mJiBwaXBlbGluZSwgV0hMU0w6OkNvbXB1dGVEaW1lbnNpb25zIGNvbXB1dGVEaW1lbnNp
b25zLCBjb25zdCBSZWZQdHI8R1BVUGlwZWxpbmVMYXlvdXQ+JiBsYXlvdXQpCisgICAgOiBHUFVQ
aXBlbGluZSgpCisgICAgLCBtX3BsYXRmb3JtQ29tcHV0ZVBpcGVsaW5lKFdURk1vdmUocGlwZWxp
bmUpKQorICAgICwgbV9jb21wdXRlRGltZW5zaW9ucyhjb21wdXRlRGltZW5zaW9ucykKKyAgICAs
IG1fbGF5b3V0KGxheW91dCkKK3sKK30KKyovCisKK0dQVUNvbXB1dGVQaXBlbGluZTo6fkdQVUNv
bXB1dGVQaXBlbGluZSgpID0gZGVmYXVsdDsKKworYm9vbCBHUFVDb21wdXRlUGlwZWxpbmU6OnJl
Y29tcGlsZShjb25zdCBHUFVEZXZpY2UmIGRldmljZSwgR1BVUHJvZ3JhbW1hYmxlU3RhZ2VEZXNj
cmlwdG9yJiYgY29tcHV0ZVN0YWdlKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVURldmljZURhd24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVRGV2aWNl
RGF3bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hZDZiNmNm
N2Y5ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvZGF3bi9HUFVEZXZpY2VEYXduLmNwcApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHUFVEZXZpY2UuaCIKKworI2lm
IEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEdQVURldmlj
ZT4gR1BVRGV2aWNlOjp0cnlDcmVhdGUoY29uc3QgT3B0aW9uYWw8R1BVUmVxdWVzdEFkYXB0ZXJP
cHRpb25zPiYgb3B0aW9ucykKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworR1BVRGV2aWNl
OjpHUFVEZXZpY2UoUGxhdGZvcm1EZXZpY2VTbWFydFB0ciYmIGRldmljZSkKKyAgICA6IG1fcGxh
dGZvcm1EZXZpY2UoV1RGTW92ZShkZXZpY2UpKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVUGxhdGZvcm1UeXBlc0Rhd24uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVBsYXRmb3JtVHlwZXNE
YXduLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44ZTI3MjE1NjY0
M2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvZGF3bi9HUFVQbGF0Zm9ybVR5cGVzRGF3bi5oCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHdl
YmdwdS93ZWJncHUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBQbGF0Zm9ybUdQ
VUJ1ZmZlck9mZnNldCA9IHN0ZDo6dWludDY0X3Q7CisKKy8vIERhd24gdHlwZXMKK3VzaW5nIFBs
YXRmb3JtQnVmZmVyID0gV0dQVUJ1ZmZlckltcGw7Cit1c2luZyBQbGF0Zm9ybUNvbW1hbmRCdWZm
ZXIgPSBXR1BVQ29tbWFuZEJ1ZmZlckltcGw7Cit1c2luZyBQbGF0Zm9ybUNvbXB1dGVQYXNzRW5j
b2RlciA9IFdHUFVDb21wdXRlUGFzc0VuY29kZXJJbXBsOwordXNpbmcgUGxhdGZvcm1Db21wdXRl
UGlwZWxpbmUgPSBXR1BVQ29tcHV0ZVBpcGVsaW5lSW1wbDsKK3VzaW5nIFBsYXRmb3JtRGV2aWNl
ID0gV0dQVURldmljZUltcGw7Cit1c2luZyBQbGF0Zm9ybURyYXdhYmxlID0gV0dQVVN1cmZhY2VJ
bXBsOwordXNpbmcgUGxhdGZvcm1Qcm9ncmFtbWFibGVQYXNzRW5jb2RlciA9IFdHUFVDb21tYW5k
RW5jb2RlckltcGw7Cit1c2luZyBQbGF0Zm9ybVF1ZXVlID0gV0dQVVF1ZXVlSW1wbDsKK3VzaW5n
IFBsYXRmb3JtUmVuZGVyUGFzc0VuY29kZXIgPSBXR1BVUmVuZGVyUGFzc0VuY29kZXJJbXBsOwor
dXNpbmcgUGxhdGZvcm1SZW5kZXJQaXBlbGluZSA9IFdHUFVSZW5kZXJQaXBlbGluZUltcGw7Cit1
c2luZyBQbGF0Zm9ybVNhbXBsZXIgPSBXR1BVU2FtcGxlckltcGw7Cit1c2luZyBQbGF0Zm9ybVNo
YWRlck1vZHVsZSA9IFdHUFVTaGFkZXJNb2R1bGVJbXBsOwordXNpbmcgUGxhdGZvcm1Td2FwTGF5
ZXIgPSBXR1BVU3dhcENoYWluSW1wbDsKK3VzaW5nIFBsYXRmb3JtVGV4dHVyZSA9IFdHUFVUZXh0
dXJlSW1wbDsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBIYW5kbGVEZWxldGVyIHsK
K3B1YmxpYzoKKyAgICB2b2lkIG9wZXJhdG9yKCkoVCogaGFuZGxlKSA9IGRlbGV0ZTsKK307CisK
K3RlbXBsYXRlPD4KK3N0cnVjdCBIYW5kbGVEZWxldGVyPFBsYXRmb3JtQnVmZmVyPiB7CisgICAg
dm9pZCBvcGVyYXRvcigpKFBsYXRmb3JtQnVmZmVyKiBoYW5kbGUpIHsKKyAgICAgICAgaWYgKGhh
bmRsZSkKKyAgICAgICAgICAgIHdncHVCdWZmZXJEZXN0cm95KGhhbmRsZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8Pgorc3RydWN0IEhhbmRsZURlbGV0ZXI8UGxhdGZvcm1Db21tYW5kQnVmZmVy
PiB7CisgICAgdm9pZCBvcGVyYXRvcigpKFBsYXRmb3JtQ29tbWFuZEJ1ZmZlciogaGFuZGxlKSB7
CisgICAgICAgIGlmIChoYW5kbGUpCisgICAgICAgICAgICB3Z3B1Q29tbWFuZEJ1ZmZlclJlbGVh
c2UoaGFuZGxlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgSGFuZGxlRGVsZXRl
cjxQbGF0Zm9ybUNvbXB1dGVQYXNzRW5jb2Rlcj4geworICAgIHZvaWQgb3BlcmF0b3IoKShQbGF0
Zm9ybUNvbXB1dGVQYXNzRW5jb2RlciogaGFuZGxlKSB7CisgICAgICAgIGlmIChoYW5kbGUpCisg
ICAgICAgICAgICB3Z3B1Q29tcHV0ZVBhc3NFbmNvZGVyUmVsZWFzZShoYW5kbGUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBIYW5kbGVEZWxldGVyPFBsYXRmb3JtQ29tcHV0ZVBp
cGVsaW5lPiB7CisgICAgdm9pZCBvcGVyYXRvcigpKFBsYXRmb3JtQ29tcHV0ZVBpcGVsaW5lKiBo
YW5kbGUpIHsKKyAgICAgICAgaWYgKGhhbmRsZSkKKyAgICAgICAgICAgIHdncHVDb21wdXRlUGlw
ZWxpbmVSZWxlYXNlKGhhbmRsZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IEhh
bmRsZURlbGV0ZXI8UGxhdGZvcm1EZXZpY2U+IHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoUGxhdGZv
cm1EZXZpY2UqIGhhbmRsZSkgeworICAgICAgICBpZiAoaGFuZGxlKQorICAgICAgICAgICAgd2dw
dURldmljZVJlbGVhc2UoaGFuZGxlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3Qg
SGFuZGxlRGVsZXRlcjxQbGF0Zm9ybURyYXdhYmxlPiB7CisgICAgdm9pZCBvcGVyYXRvcigpKFBs
YXRmb3JtRHJhd2FibGUqIGhhbmRsZSkgeworICAgICAgICBpZiAoaGFuZGxlKQorICAgICAgICAg
ICAgd2dwdVN1cmZhY2VSZWxlYXNlKGhhbmRsZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8Pgor
c3RydWN0IEhhbmRsZURlbGV0ZXI8UGxhdGZvcm1Qcm9ncmFtbWFibGVQYXNzRW5jb2Rlcj4gewor
ICAgIHZvaWQgb3BlcmF0b3IoKShQbGF0Zm9ybVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyKiBoYW5k
bGUpIHsKKyAgICAgICAgaWYgKGhhbmRsZSkKKyAgICAgICAgICAgIHdncHVDb21tYW5kRW5jb2Rl
clJlbGVhc2UoaGFuZGxlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgSGFuZGxl
RGVsZXRlcjxQbGF0Zm9ybVF1ZXVlPiB7CisgICAgdm9pZCBvcGVyYXRvcigpKFBsYXRmb3JtUXVl
dWUqIGhhbmRsZSkgeworICAgICAgICBpZiAoaGFuZGxlKQorICAgICAgICAgICAgd2dwdVF1ZXVl
UmVsZWFzZShoYW5kbGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBIYW5kbGVE
ZWxldGVyPFBsYXRmb3JtUmVuZGVyUGFzc0VuY29kZXI+IHsKKyAgICB2b2lkIG9wZXJhdG9yKCko
UGxhdGZvcm1SZW5kZXJQYXNzRW5jb2RlciogaGFuZGxlKSB7CisgICAgICAgIGlmIChoYW5kbGUp
CisgICAgICAgICAgICB3Z3B1UmVuZGVyUGFzc0VuY29kZXJSZWxlYXNlKGhhbmRsZSk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IEhhbmRsZURlbGV0ZXI8UGxhdGZvcm1SZW5kZXJQ
aXBlbGluZT4geworICAgIHZvaWQgb3BlcmF0b3IoKShQbGF0Zm9ybVJlbmRlclBpcGVsaW5lKiBo
YW5kbGUpIHsKKyAgICAgICAgaWYgKGhhbmRsZSkKKyAgICAgICAgICAgIHdncHVSZW5kZXJQaXBl
bGluZVJlbGVhc2UoaGFuZGxlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgSGFu
ZGxlRGVsZXRlcjxQbGF0Zm9ybVNhbXBsZXI+IHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoUGxhdGZv
cm1TYW1wbGVyKiBoYW5kbGUpIHsKKyAgICAgICAgaWYgKGhhbmRsZSkKKyAgICAgICAgICAgIHdn
cHVTYW1wbGVyUmVsZWFzZShoYW5kbGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4KK3N0cnVj
dCBIYW5kbGVEZWxldGVyPFBsYXRmb3JtU2hhZGVyTW9kdWxlPiB7CisgICAgdm9pZCBvcGVyYXRv
cigpKFBsYXRmb3JtU2hhZGVyTW9kdWxlKiBoYW5kbGUpIHsKKyAgICAgICAgaWYgKGhhbmRsZSkK
KyAgICAgICAgICAgIHdncHVTaGFkZXJNb2R1bGVSZWxlYXNlKGhhbmRsZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8Pgorc3RydWN0IEhhbmRsZURlbGV0ZXI8UGxhdGZvcm1Td2FwTGF5ZXI+IHsK
KyAgICB2b2lkIG9wZXJhdG9yKCkoUGxhdGZvcm1Td2FwTGF5ZXIqIGhhbmRsZSkgeworICAgICAg
ICBpZiAoaGFuZGxlKQorICAgICAgICAgICAgd2dwdVN3YXBDaGFpblJlbGVhc2UoaGFuZGxlKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgSGFuZGxlRGVsZXRlcjxQbGF0Zm9ybVRl
eHR1cmU+IHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoUGxhdGZvcm1UZXh0dXJlKiBoYW5kbGUpIHsK
KyAgICAgICAgaWYgKGhhbmRsZSkKKyAgICAgICAgICAgIHdncHVUZXh0dXJlUmVsZWFzZShoYW5k
bGUpOworICAgIH0KK307CisKK3VzaW5nIFBsYXRmb3JtQnVmZmVyU21hcnRQdHIgPSBzdGQ6OnVu
aXF1ZV9wdHI8UGxhdGZvcm1CdWZmZXIsIEhhbmRsZURlbGV0ZXI8UGxhdGZvcm1CdWZmZXI+PjsK
K3VzaW5nIFBsYXRmb3JtQ29tbWFuZEJ1ZmZlclNtYXJ0UHRyID0gc3RkOjp1bmlxdWVfcHRyPFBs
YXRmb3JtQ29tbWFuZEJ1ZmZlciwgSGFuZGxlRGVsZXRlcjxQbGF0Zm9ybUNvbW1hbmRCdWZmZXI+
PjsKK3VzaW5nIFBsYXRmb3JtQ29tcHV0ZVBhc3NFbmNvZGVyU21hcnRQdHIgPSBzdGQ6OnVuaXF1
ZV9wdHI8UGxhdGZvcm1Db21wdXRlUGFzc0VuY29kZXIsIEhhbmRsZURlbGV0ZXI8UGxhdGZvcm1D
b21wdXRlUGFzc0VuY29kZXI+PjsKK3VzaW5nIFBsYXRmb3JtQ29tcHV0ZVBpcGVsaW5lU21hcnRQ
dHIgPSBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db21wdXRlUGlwZWxpbmUsIEhhbmRsZURlbGV0
ZXI8UGxhdGZvcm1Db21wdXRlUGlwZWxpbmU+PjsKK3VzaW5nIFBsYXRmb3JtRGV2aWNlU21hcnRQ
dHIgPSBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1EZXZpY2UsIEhhbmRsZURlbGV0ZXI8UGxhdGZv
cm1EZXZpY2U+PjsKK3VzaW5nIFBsYXRmb3JtRHJhd2FibGVTbWFydFB0ciA9IHN0ZDo6dW5pcXVl
X3B0cjxQbGF0Zm9ybURyYXdhYmxlLCBIYW5kbGVEZWxldGVyPFBsYXRmb3JtRHJhd2FibGU+PjsK
K3VzaW5nIFBsYXRmb3JtUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXJTbWFydFB0ciA9IHN0ZDo6dW5p
cXVlX3B0cjxQbGF0Zm9ybVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyLCBIYW5kbGVEZWxldGVyPFBs
YXRmb3JtUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXI+PjsKK3VzaW5nIFBsYXRmb3JtUXVldWVTbWFy
dFB0ciA9IHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVF1ZXVlLCBIYW5kbGVEZWxldGVyPFBsYXRm
b3JtUXVldWU+PjsKK3VzaW5nIFBsYXRmb3JtUmVuZGVyUGFzc0VuY29kZXJTbWFydFB0ciA9IHN0
ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVJlbmRlclBhc3NFbmNvZGVyLCBIYW5kbGVEZWxldGVyPFBs
YXRmb3JtUmVuZGVyUGFzc0VuY29kZXI+PjsKK3VzaW5nIFBsYXRmb3JtUmVuZGVyUGlwZWxpbmVT
bWFydFB0ciA9IHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVJlbmRlclBpcGVsaW5lLCBIYW5kbGVE
ZWxldGVyPFBsYXRmb3JtUmVuZGVyUGlwZWxpbmU+PjsKK3VzaW5nIFBsYXRmb3JtU2FtcGxlclNt
YXJ0UHRyID0gc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtU2FtcGxlciwgSGFuZGxlRGVsZXRlcjxQ
bGF0Zm9ybVNhbXBsZXI+PjsKK3VzaW5nIFBsYXRmb3JtU2hhZGVyTW9kdWxlU21hcnRQdHIgPSBz
dGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1TaGFkZXJNb2R1bGUsIEhhbmRsZURlbGV0ZXI8UGxhdGZv
cm1TaGFkZXJNb2R1bGU+PjsKK3VzaW5nIFBsYXRmb3JtU3dhcExheWVyU21hcnRQdHIgPSBzdGQ6
OnVuaXF1ZV9wdHI8UGxhdGZvcm1Td2FwTGF5ZXIsIEhhbmRsZURlbGV0ZXI8UGxhdGZvcm1Td2Fw
TGF5ZXI+PjsKK3VzaW5nIFBsYXRmb3JtVGV4dHVyZVNtYXJ0UHRyID0gc3RkOjp1bmlxdWVfcHRy
PFBsYXRmb3JtVGV4dHVyZSwgSGFuZGxlRGVsZXRlcjxQbGF0Zm9ybVRleHR1cmU+PjsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L2Rhd24vR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXJEYXduLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVByb2dyYW1tYWJsZVBh
c3NFbmNvZGVyRGF3bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
Li4zNGU0OGY3YjAyNTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvZGF3bi9HUFVQcm9ncmFtbWFibGVQYXNzRW5jb2RlckRhd24uY3BwCkBA
IC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2
ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkdQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BV
KQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29k
ZXI6OmVuZFBhc3MoKQoreworfQorCit2b2lkIEdQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyOjpz
ZXRCaW5kR3JvdXAodW5zaWduZWQgaW5kZXgsIEdQVUJpbmRHcm91cCYgYmluZEdyb3VwKQorewor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BV
UXVldWVEYXduLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXdu
L0dQVVF1ZXVlRGF3bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
Li45MWY2YzgwM2Q5ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvZGF3bi9HUFVRdWV1ZURhd24uY3BwCkBAIC0wLDAgKzEsNjIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IElu
Yy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdQVVF1ZXVlLmgi
CisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiR1BVRGV2aWNlLmgiCisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRy
PEdQVVF1ZXVlPiBHUFVRdWV1ZTo6dHJ5Q3JlYXRlKGNvbnN0IEdQVURldmljZSYgZGV2aWNlKQor
eworICAgIHJldHVybiBudWxscHRyOworfQorCitHUFVRdWV1ZTo6R1BVUXVldWUoUGxhdGZvcm1R
dWV1ZVNtYXJ0UHRyJiYgcXVldWUsIGNvbnN0IEdQVURldmljZSYgZGV2aWNlKQorICAgIDogbV9w
bGF0Zm9ybVF1ZXVlKFdURk1vdmUocXVldWUpKQorICAgICwgbV9kZXZpY2UobWFrZVdlYWtQdHIo
ZGV2aWNlKSkKK3sKK30KKwordm9pZCBHUFVRdWV1ZTo6c3VibWl0KFZlY3RvcjxSZWY8R1BVQ29t
bWFuZEJ1ZmZlcj4+JiYgY29tbWFuZEJ1ZmZlcnMpCit7Cit9CisKK1N0cmluZyBHUFVRdWV1ZTo6
bGFiZWwoKSBjb25zdAoreworICAgIHJldHVybiBlbXB0eVN0cmluZygpOworfQorCit2b2lkIEdQ
VVF1ZXVlOjpzZXRMYWJlbChjb25zdCBTdHJpbmcmIGxhYmVsKSBjb25zdAoreworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVUmVuZGVyUGFz
c0VuY29kZXJEYXduLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9k
YXduL0dQVVJlbmRlclBhc3NFbmNvZGVyRGF3bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi5jMTYzYmVhMDNmNDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVSZW5kZXJQYXNzRW5jb2RlckRh
d24uY3BwCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJ
bnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkdQVVJlbmRlclBhc3NFbmNvZGVyLmgiCisKKyNpZiBFTkFCTEUoV0VC
R1BVKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZlB0cjxHUFVSZW5kZXJQYXNzRW5jb2Rl
cj4gR1BVUmVuZGVyUGFzc0VuY29kZXI6OnRyeUNyZWF0ZShSZWY8R1BVQ29tbWFuZEJ1ZmZlcj4m
JiBidWZmZXIsIEdQVVJlbmRlclBhc3NEZXNjcmlwdG9yJiYgZGVzY3JpcHRvcikKK3sKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKworR1BVUmVuZGVyUGFzc0VuY29kZXI6OkdQVVJlbmRlclBhc3NF
bmNvZGVyKFJlZjxHUFVDb21tYW5kQnVmZmVyPiYmIGNvbW1hbmRCdWZmZXIsIFBsYXRmb3JtUmVu
ZGVyUGFzc0VuY29kZXJTbWFydFB0ciYmIGVuY29kZXIpCisgICAgOiBHUFVQcm9ncmFtbWFibGVQ
YXNzRW5jb2RlcihXVEZNb3ZlKGNvbW1hbmRCdWZmZXIpKQorICAgICwgbV9wbGF0Zm9ybVJlbmRl
clBhc3NFbmNvZGVyKFdURk1vdmUoZW5jb2RlcikpCit7Cit9CisKK2NvbnN0IFBsYXRmb3JtUHJv
Z3JhbW1hYmxlUGFzc0VuY29kZXIqIEdQVVJlbmRlclBhc3NFbmNvZGVyOjpwbGF0Zm9ybVBhc3NF
bmNvZGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsvL21fcGxhdGZvcm1SZW5kZXJQ
YXNzRW5jb2Rlci5nZXQoKTsKK30KKwordm9pZCBHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0UGlw
ZWxpbmUoUmVmPGNvbnN0IEdQVVJlbmRlclBpcGVsaW5lPiYmIHBpcGVsaW5lKQoreworfQorCit2
b2lkIEdQVVJlbmRlclBhc3NFbmNvZGVyOjpzZXRCbGVuZENvbG9yKGNvbnN0IEdQVUNvbG9yJiBj
b2xvcikKK3sKK30KKwordm9pZCBHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0Vmlld3BvcnQoZmxv
YXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgbWluRGVwdGgs
IGZsb2F0IG1heERlcHRoKQoreworfQorCit2b2lkIEdQVVJlbmRlclBhc3NFbmNvZGVyOjpzZXRT
Y2lzc29yUmVjdCh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWdu
ZWQgaGVpZ2h0KQoreworfQorCit2b2lkIEdQVVJlbmRlclBhc3NFbmNvZGVyOjpzZXRJbmRleEJ1
ZmZlcihHUFVCdWZmZXImIGJ1ZmZlciwgdWludDY0X3Qgb2Zmc2V0KQoreworfQorCit2b2lkIEdQ
VVJlbmRlclBhc3NFbmNvZGVyOjpzZXRWZXJ0ZXhCdWZmZXJzKHVuc2lnbmVkIGluZGV4LCBjb25z
dCBWZWN0b3I8UmVmPEdQVUJ1ZmZlcj4+JiBidWZmZXJzLCBjb25zdCBWZWN0b3I8dWludDY0X3Q+
JiBvZmZzZXRzKQoreworfQorCit2b2lkIEdQVVJlbmRlclBhc3NFbmNvZGVyOjpkcmF3KHVuc2ln
bmVkIHZlcnRleENvdW50LCB1bnNpZ25lZCBpbnN0YW5jZUNvdW50LCB1bnNpZ25lZCBmaXJzdFZl
cnRleCwgdW5zaWduZWQgZmlyc3RJbnN0YW5jZSkKK3sKK30KKwordm9pZCBHUFVSZW5kZXJQYXNz
RW5jb2Rlcjo6ZHJhd0luZGV4ZWQodW5zaWduZWQgaW5kZXhDb3VudCwgdW5zaWduZWQgaW5zdGFu
Y2VDb3VudCwgdW5zaWduZWQgZmlyc3RJbmRleCwgaW50IGJhc2VWZXJ0ZXgsIHVuc2lnbmVkIGZp
cnN0SW5zdGFuY2UpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvZGF3bi9HUFVSZW5kZXJQaXBlbGluZURhd24uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVUmVuZGVyUGlwZWxpbmVEYXduLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjE3YTMxYWI2NjIwZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQ
VVJlbmRlclBpcGVsaW5lRGF3bi5jcHAKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1BVUmVuZGVyUGlwZWxpbmUuaCIKKwor
I2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEdQVVJl
bmRlclBpcGVsaW5lPiBHUFVSZW5kZXJQaXBlbGluZTo6dHJ5Q3JlYXRlKGNvbnN0IEdQVURldmlj
ZSYgZGV2aWNlLCBjb25zdCBHUFVSZW5kZXJQaXBlbGluZURlc2NyaXB0b3ImIGRlc2NyaXB0b3Is
IEdQVUVycm9yU2NvcGVzJiBlcnJvclNjb3BlcykKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
KworR1BVUmVuZGVyUGlwZWxpbmU6On5HUFVSZW5kZXJQaXBlbGluZSgpID0gZGVmYXVsdDsKKwor
Ym9vbCBHUFVSZW5kZXJQaXBlbGluZTo6cmVjb21waWxlKGNvbnN0IEdQVURldmljZSYgZGV2aWNl
LCBHUFVQcm9ncmFtbWFibGVTdGFnZURlc2NyaXB0b3ImJiB2ZXJ0ZXhTdGFnZSwgT3B0aW9uYWw8
R1BVUHJvZ3JhbW1hYmxlU3RhZ2VEZXNjcmlwdG9yPiYmIGZyYWdtZW50U3RhZ2UpCit7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L2Rhd24vR1BVU2FtcGxlckRhd24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L2Rhd24vR1BVU2FtcGxlckRhd24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMC4uYTNjOWQwYWVmYTQxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVU2FtcGxlckRhd24uY3Bw
CkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFj
dGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkdQVVNhbXBsZXIuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworUmVmUHRyPEdQVVNhbXBsZXI+IEdQVVNhbXBsZXI6OnRyeUNyZWF0ZShj
b25zdCBHUFVEZXZpY2UmIGRldmljZSwgY29uc3QgR1BVU2FtcGxlckRlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0dQVVNhbXBsZXI6OkdQVVNhbXBs
ZXIoUGxhdGZvcm1TYW1wbGVyU21hcnRQdHImJiBzYW1wbGVyKQorICAgIDogbV9wbGF0Zm9ybVNh
bXBsZXIoV1RGTW92ZShzYW1wbGVyKSkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVNoYWRlck1vZHVsZURhd24uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVU2hhZGVyTW9kdWxlRGF3bi5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5lOWE1MzRhZDVhYTAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
ZGF3bi9HUFVTaGFkZXJNb2R1bGVEYXduLmNwcApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHUFVTaGFkZXJNb2R1bGUuaCIK
KworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEdQ
VVNoYWRlck1vZHVsZT4gR1BVU2hhZGVyTW9kdWxlOjp0cnlDcmVhdGUoY29uc3QgR1BVRGV2aWNl
JiBkZXZpY2UsIGNvbnN0IEdQVVNoYWRlck1vZHVsZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0dQVVNoYWRlck1vZHVsZTo6R1BVU2hhZGVyTW9k
dWxlKFBsYXRmb3JtU2hhZGVyTW9kdWxlU21hcnRQdHImJiBtb2R1bGUpCisgICAgOiBtX3BsYXRm
b3JtU2hhZGVyTW9kdWxlKFdURk1vdmUobW9kdWxlKSkKK3sKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVN3YXBDaGFpbkRhd24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVU3dhcENoYWluRGF3
bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mYTVhNzZlMDcw
NjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvZGF3bi9HUFVTd2FwQ2hhaW5EYXduLmNwcApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHUFVTd2FwQ2hhaW4uaCIKKwor
I2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEdQVVN3
YXBDaGFpbj4gR1BVU3dhcENoYWluOjp0cnlDcmVhdGUoY29uc3QgR1BVU3dhcENoYWluRGVzY3Jp
cHRvciYgZGVzY3JpcHRvciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIHJldHVybiBu
dWxscHRyOworfQorCitHUFVTd2FwQ2hhaW46OkdQVVN3YXBDaGFpbihQbGF0Zm9ybVN3YXBMYXll
clNtYXJ0UHRyJiYgcGxhdGZvcm1MYXllciwgT3B0aW9uU2V0PEdQVVRleHR1cmVVc2FnZTo6Rmxh
Z3M+IHVzYWdlT3B0aW9ucykKKyAgICA6IG1fcGxhdGZvcm1Td2FwTGF5ZXIoV1RGTW92ZShwbGF0
Zm9ybUxheWVyKSkKKyAgICAsIG1fdXNhZ2UodXNhZ2VPcHRpb25zKQoreworfQorCitSZWZQdHI8
R1BVVGV4dHVyZT4gR1BVU3dhcENoYWluOjp0cnlHZXRDdXJyZW50VGV4dHVyZSgpCit7CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgR1BVU3dhcENoYWluOjpwcmVzZW50KCkKK3sKKyAg
ICBpZiAoIW1fY3VycmVudERyYXdhYmxlKQorICAgICAgICByZXR1cm47Cit9CisKK3ZvaWQgR1BV
U3dhcENoYWluOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKworfQorCitQbGF0
Zm9ybUxheWVyKiBHUFVTd2FwQ2hhaW46OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAoreworICAgIHJl
dHVybiBudWxscHRyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L2Rhd24vR1BVVGV4dHVyZURhd24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L2Rhd24vR1BVVGV4dHVyZURhd24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMC4uMmI0NmQyNDE3M2I1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVVGV4dHVyZURhd24uY3Bw
CkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFj
dGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkdQVVRleHR1cmUuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworUmVmUHRyPEdQVVRleHR1cmU+IEdQVVRleHR1cmU6OnRyeUNyZWF0ZShj
b25zdCBHUFVEZXZpY2UmIGRldmljZSwgY29uc3QgR1BVVGV4dHVyZURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IsIEdQVUVycm9yU2NvcGVzJiBlcnJvclNjb3BlcykKK3sKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKworUmVmPEdQVVRleHR1cmU+IEdQVVRleHR1cmU6OmNyZWF0ZShQbGF0Zm9ybVRleHR1
cmVTbWFydFB0ciYmIHRleHR1cmUsIE9wdGlvblNldDxHUFVUZXh0dXJlVXNhZ2U6OkZsYWdzPiB1
c2FnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHUFVUZXh0dXJlKFdURk1vdmUodGV4
dHVyZSksIHVzYWdlKSk7Cit9CisKK0dQVVRleHR1cmU6OkdQVVRleHR1cmUoUGxhdGZvcm1UZXh0
dXJlU21hcnRQdHImJiB0ZXh0dXJlLCBPcHRpb25TZXQ8R1BVVGV4dHVyZVVzYWdlOjpGbGFncz4g
dXNhZ2UpCisgICAgOiBtX3BsYXRmb3JtVGV4dHVyZShXVEZNb3ZlKHRleHR1cmUpKQorICAgICwg
bV91c2FnZSh1c2FnZSkKK3sKK30KKworUmVmUHRyPEdQVVRleHR1cmU+IEdQVVRleHR1cmU6OnRy
eUNyZWF0ZURlZmF1bHRUZXh0dXJlVmlldygpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412099</attachid>
            <date>2020-10-22 08:37:13 -0700</date>
            <delta_ts>2020-10-22 08:40:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217982.diff</filename>
            <type>text/plain</type>
            <size>55950</size>
            <attacher name="Don Olmstead">don.olmstead</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiZTM1MmMxZjNiOGIuLjA0NTUwNGE1ZmQxNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDExOCBAQAorMjAyMC0xMC0yMiAgRG9uIE9sbXN0ZWFkICA8ZG9uLm9sbXN0ZWFkQHNv
bnkuY29tPgorCisgICAgICAgIFtXZWJHUFVdIEFkZCBEYXduIGltcGxlbWVudGF0aW9uIHNrZWxl
dG9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc5
ODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
YW4gZW1wdHkgaW1wbGVtZW50YXRpb24gb2YgdGhlIFdlYkdQVSB0eXBlcy4gVGhpcyBnZXRzIFdl
YkdQVSBidWlsdCBhbmQgbGlua2luZworICAgICAgICB1c2luZyBEYXduLgorCisgICAgICAgICog
UGxhdGZvcm1XaW5DYWlyby5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9EYXduLmNtYWtlOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVUGxhdGZvcm1UeXBlcy5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVUJpbmRHcm91cEFsbG9j
YXRvckRhd24uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvR1BVUGxhdGZvcm1UeXBlcy5oLgorICAgICAgICAoV2ViQ29yZTo6R1BVQmluZEdyb3Vw
QWxsb2NhdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQmluZEdyb3VwQWxsb2Nh
dG9yOjpHUFVCaW5kR3JvdXBBbGxvY2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQmluZEdy
b3VwQWxsb2NhdG9yOjpyZWFsbG9jYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJpbmRHcm91
cEFsbG9jYXRvcjo6dHJ5UmVzZXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9k
YXduL0dQVUJpbmRHcm91cERhd24uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvR1BVUGxhdGZvcm1UeXBlcy5oLgorICAgICAgICAoV2ViQ29yZTo6
R1BVQmluZEdyb3VwOjp0cnlDcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQmluZEdyb3Vw
OjpHUFVCaW5kR3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6R1BVQmluZEdyb3VwOjp+R1BVQmlu
ZEdyb3VwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVCaW5kR3Jv
dXBMYXlvdXREYXduLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0dQVVBsYXRmb3JtVHlwZXMuaC4KKyAgICAgICAgKFdlYkNvcmU6OkdQVUJpbmRH
cm91cExheW91dDo6dHJ5Q3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUv
ZGF3bi9HUFVCdWZmZXJEYXduLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHUFVCdWZm
ZXI6OnRyeUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6OkdQVUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6On5HUFVCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R1BVQnVmZmVyOjppc1JlYWRPbmx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdQ
VUJ1ZmZlcjo6c3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjptYXBP
bkNyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJ1ZmZlcjo6cmVnaXN0ZXJNYXBwaW5n
Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjpydW5NYXBwaW5nQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjpzdGFnaW5nQnVmZmVyRm9yUmVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6OnN0YWdpbmdCdWZmZXJGb3JXcml0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6OmNvcHlTdGFnaW5nQnVmZmVyVG9HUFUpOgorICAg
ICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjp1bm1hcCk6CisgICAgICAgIChXZWJDb3JlOjpHUFVC
dWZmZXI6OmRlc3Ryb3kpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQ
VUNvbW1hbmRCdWZmZXJEYXduLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L0dQVVBsYXRmb3JtVHlwZXMuaC4KKyAgICAgICAgKFdlYkNvcmU6OkdQ
VUNvbW1hbmRCdWZmZXI6OnRyeUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHUFVDb21tYW5k
QnVmZmVyOjpHUFVDb21tYW5kQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUNvbW1hbmRC
dWZmZXI6OmNvcHlCdWZmZXJUb0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHUFVDb21tYW5k
QnVmZmVyOjpjb3B5QnVmZmVyVG9UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUNvbW1h
bmRCdWZmZXI6OmNvcHlUZXh0dXJlVG9CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQ29t
bWFuZEJ1ZmZlcjo6Y29weVRleHR1cmVUb1RleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dwdS9kYXduL0dQVUNvbXB1dGVQYXNzRW5jb2RlckRhd24uY3BwOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVUGxhdGZvcm1UeXBlcy5o
LgorICAgICAgICAoV2ViQ29yZTo6R1BVQ29tcHV0ZVBhc3NFbmNvZGVyOjp0cnlDcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R1BVQ29tcHV0ZVBhc3NFbmNvZGVyOjpHUFVDb21wdXRlUGFzc0Vu
Y29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQ29tcHV0ZVBhc3NFbmNvZGVyOjpzZXRQaXBl
bGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHUFVDb21wdXRlUGFzc0VuY29kZXI6OmRpc3BhdGNo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUNvbXB1dGVQYXNzRW5jb2Rlcjo6cGxhdGZvcm1QYXNz
RW5jb2RlciBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BV
Q29tcHV0ZVBpcGVsaW5lRGF3bi5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9HUFVQbGF0Zm9ybVR5cGVzLmguCisgICAgICAgIChXZWJDb3JlOjpH
UFVDb21wdXRlUGlwZWxpbmU6OnRyeUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHUFVDb21w
dXRlUGlwZWxpbmU6OnJlY29tcGlsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L2Rhd24vR1BVRGV2aWNlRGF3bi5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9HUFVQbGF0Zm9ybVR5cGVzLmguCisgICAgICAgIChXZWJDb3JlOjpH
UFVEZXZpY2U6OnRyeUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHUFVEZXZpY2U6OkdQVURl
dmljZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVUGxhdGZvcm1U
eXBlc0Rhd24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIYW5kbGVEZWxldGVyPFBsYXRm
b3JtQnVmZmVyPjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3JlOjpIYW5kbGVEZWxldGVy
PFBsYXRmb3JtQ29tbWFuZEJ1ZmZlcj46Om9wZXJhdG9yKCkpOgorICAgICAgICAoV2ViQ29yZTo6
SGFuZGxlRGVsZXRlcjxQbGF0Zm9ybUNvbXB1dGVQYXNzRW5jb2Rlcj46Om9wZXJhdG9yKCkpOgor
ICAgICAgICAoV2ViQ29yZTo6SGFuZGxlRGVsZXRlcjxQbGF0Zm9ybUNvbXB1dGVQaXBlbGluZT46
Om9wZXJhdG9yKCkpOgorICAgICAgICAoV2ViQ29yZTo6SGFuZGxlRGVsZXRlcjxQbGF0Zm9ybURl
dmljZT46Om9wZXJhdG9yKCkpOgorICAgICAgICAoV2ViQ29yZTo6SGFuZGxlRGVsZXRlcjxQbGF0
Zm9ybURyYXdhYmxlPjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3JlOjpIYW5kbGVEZWxl
dGVyPFBsYXRmb3JtUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXI+OjpvcGVyYXRvcigpKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhhbmRsZURlbGV0ZXI8UGxhdGZvcm1RdWV1ZT46Om9wZXJhdG9yKCkpOgor
ICAgICAgICAoV2ViQ29yZTo6SGFuZGxlRGVsZXRlcjxQbGF0Zm9ybVJlbmRlclBhc3NFbmNvZGVy
Pjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3JlOjpIYW5kbGVEZWxldGVyPFBsYXRmb3Jt
UmVuZGVyUGlwZWxpbmU+OjpvcGVyYXRvcigpKToKKyAgICAgICAgKFdlYkNvcmU6OkhhbmRsZURl
bGV0ZXI8UGxhdGZvcm1TYW1wbGVyPjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3JlOjpI
YW5kbGVEZWxldGVyPFBsYXRmb3JtU2hhZGVyTW9kdWxlPjo6b3BlcmF0b3IoKSk6CisgICAgICAg
IChXZWJDb3JlOjpIYW5kbGVEZWxldGVyPFBsYXRmb3JtU3dhcExheWVyPjo6b3BlcmF0b3IoKSk6
CisgICAgICAgIChXZWJDb3JlOjpIYW5kbGVEZWxldGVyPFBsYXRmb3JtVGV4dHVyZT46Om9wZXJh
dG9yKCkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVByb2dyYW1t
YWJsZVBhc3NFbmNvZGVyRGF3bi5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9HUFVQbGF0Zm9ybVR5cGVzLmguCisgICAgICAgIChXZWJDb3JlOjpH
UFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlcjo6ZW5kUGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpH
UFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlcjo6c2V0QmluZEdyb3VwKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVRdWV1ZURhd24uY3BwOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVUGxhdGZvcm1UeXBlcy5oLgorICAg
ICAgICAoV2ViQ29yZTo6R1BVUXVldWU6OnRyeUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
UFVRdWV1ZTo6R1BVUXVldWUpOgorICAgICAgICAoV2ViQ29yZTo6R1BVUXVldWU6OnN1Ym1pdCk6
CisgICAgICAgIChXZWJDb3JlOjpHUFVRdWV1ZTo6bGFiZWwgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R1BVUXVldWU6OnNldExhYmVsIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9ncHUvZGF3bi9HUFVSZW5kZXJQYXNzRW5jb2RlckRhd24uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdQVVJlbmRlclBhc3NFbmNvZGVyOjp0cnlDcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R1BVUmVuZGVyUGFzc0VuY29kZXI6OkdQVVJlbmRlclBhc3NFbmNvZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdQVVJlbmRlclBhc3NFbmNvZGVyOjpwbGF0Zm9ybVBhc3NFbmNvZGVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdQVVJlbmRlclBhc3NFbmNvZGVyOjpzZXRQaXBl
bGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0QmxlbmRD
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0Vmlld3Bv
cnQpOgorICAgICAgICAoV2ViQ29yZTo6R1BVUmVuZGVyUGFzc0VuY29kZXI6OnNldFNjaXNzb3JS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdQVVJlbmRlclBhc3NFbmNvZGVyOjpzZXRJbmRleEJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0VmVydGV4
QnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6ZHJhdyk6
CisgICAgICAgIChXZWJDb3JlOjpHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6ZHJhd0luZGV4ZWQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVJlbmRlclBpcGVsaW5lRGF3
bi5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9H
UFVQbGF0Zm9ybVR5cGVzLmguCisgICAgICAgIChXZWJDb3JlOjpHUFVSZW5kZXJQaXBlbGluZTo6
dHJ5Q3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdQVVJlbmRlclBpcGVsaW5lOjpyZWNvbXBp
bGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVNhbXBsZXJEYXdu
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQ
VVBsYXRmb3JtVHlwZXMuaC4KKyAgICAgICAgKFdlYkNvcmU6OkdQVVNhbXBsZXI6OnRyeUNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHUFVTYW1wbGVyOjpHUFVTYW1wbGVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVTaGFkZXJNb2R1bGVEYXduLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVBsYXRmb3Jt
VHlwZXMuaC4KKyAgICAgICAgKFdlYkNvcmU6OkdQVVNoYWRlck1vZHVsZTo6dHJ5Q3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdQVVNoYWRlck1vZHVsZTo6R1BVU2hhZGVyTW9kdWxlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVTd2FwQ2hhaW5EYXduLmNwcDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVBsYXRm
b3JtVHlwZXMuaC4KKyAgICAgICAgKFdlYkNvcmU6OkdQVVN3YXBDaGFpbjo6dHJ5Q3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdQVVN3YXBDaGFpbjo6R1BVU3dhcENoYWluKToKKyAgICAgICAg
KFdlYkNvcmU6OkdQVVN3YXBDaGFpbjo6dHJ5R2V0Q3VycmVudFRleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6R1BVU3dhcENoYWluOjpwcmVzZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdQVVN3
YXBDaGFpbjo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHUFVTd2FwQ2hhaW46OnBsYXRm
b3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQ
VVRleHR1cmVEYXduLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0dQVVBsYXRmb3JtVHlwZXMuaC4KKyAgICAgICAgKFdlYkNvcmU6OkdQVVRleHR1
cmU6OnRyeUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHUFVUZXh0dXJlOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R1BVVGV4dHVyZTo6R1BVVGV4dHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpHUFVUZXh0dXJlOjp0cnlDcmVhdGVEZWZhdWx0VGV4dHVyZVZpZXcpOgorCiAyMDIwLTEw
LTIwICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFtjc3MtZmxleGJveF0gZmxleC1iYXNpcyBub3QgYW5pbWF0YWJsZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtV2luQ2Fpcm8uY21ha2UKaW5kZXggYzRiODZjMTQ4OWFhLi5hNjg5NjQ3N2RlMGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKKysrIGIvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQpAQCAtNCw2ICs0LDEwIEBAIGluY2x1ZGUo
cGxhdGZvcm0vSW1hZ2VEZWNvZGVycy5jbWFrZSkKIGluY2x1ZGUocGxhdGZvcm0vT3BlblNTTC5j
bWFrZSkKIGluY2x1ZGUocGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZSkKIAoraWYgKFVTRV9E
QVdOKQorICAgIGluY2x1ZGUocGxhdGZvcm0vRGF3bi5jbWFrZSkKK2VuZGlmICgpCisKIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCS0lU
X0xJQlJBUklFU19ESVJ9L2luY2x1ZGUiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2xvYWRlci9hcmNo
aXZlL2NmIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGF3bi5jbWFrZSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Rhd24uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwLi5iMjZiNDY1NTExNTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9EYXduLmNtYWtlCkBAIC0wLDAgKzEsMjcgQEAKK2xpc3QoQVBQ
RU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgIiR7V0VCQ09SRV9E
SVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduIgorKQorCitsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVCaW5kR3JvdXBBbGxv
Y2F0b3JEYXduLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVUJpbmRHcm91
cERhd24uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVQmluZEdyb3VwTGF5
b3V0RGF3bi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVCdWZmZXJEYXdu
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVUNvbW1hbmRCdWZmZXJEYXdu
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVUNvbXB1dGVQYXNzRW5jb2Rl
ckRhd24uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVQ29tcHV0ZVBpcGVs
aW5lRGF3bi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVEZXZpY2VEYXdu
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVByb2dyYW1tYWJsZVBhc3NF
bmNvZGVyRGF3bi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVRdWV1ZURh
d24uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVUmVuZGVyUGFzc0VuY29k
ZXJEYXduLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVJlbmRlclBpcGVs
aW5lRGF3bi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVTYW1wbGVyRGF3
bi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVTaGFkZXJNb2R1bGVEYXdu
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVN3YXBDaGFpbkRhd24uY3Bw
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVVGV4dHVyZURhd24uY3BwCispCisK
K2xpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9MSUJSQVJJRVMKKyAgICBEYXduOjpkYXduCisg
ICAgRGF3bjo6bmF0aXZlCispCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvR1BVUGxhdGZvcm1UeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L0dQVVBsYXRmb3JtVHlwZXMuaAppbmRleCAxYjdkYmE1OTZlYzMuLjkyYzc2
NzI2Nzg2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L0dQVVBsYXRmb3JtVHlwZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvR1BVUGxhdGZvcm1UeXBlcy5oCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpZiBVU0UoTUVU
QUwpCiAjaW5jbHVkZSAiR1BVUGxhdGZvcm1UeXBlc01ldGFsLmgiCisjZWxpZiBVU0UoREFXTikK
KyNpbmNsdWRlICJHUFVQbGF0Zm9ybVR5cGVzRGF3bi5oIgogI2Vsc2UKICNlcnJvciAiVW5zdXBw
b3J0ZWQgcGxhdGZvcm0gZm9yIFdlYkdQVSIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVQmluZEdyb3VwQWxsb2NhdG9yRGF3
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVCaW5k
R3JvdXBBbGxvY2F0b3JEYXduLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAuLjdkNmQ1OGQzNWIxNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVUJpbmRHcm91cEFsbG9jYXRvckRhd24uY3BwCkBA
IC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2
ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkdQVUJpbmRHcm91cEFsbG9jYXRvci5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKwor
I2luY2x1ZGUgIkdQVUVycm9yU2NvcGVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVm
PEdQVUJpbmRHcm91cEFsbG9jYXRvcj4gR1BVQmluZEdyb3VwQWxsb2NhdG9yOjpjcmVhdGUoR1BV
RXJyb3JTY29wZXMmIGVycm9ycykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHUFVCaW5k
R3JvdXBBbGxvY2F0b3IoZXJyb3JzKSk7Cit9CisKK0dQVUJpbmRHcm91cEFsbG9jYXRvcjo6R1BV
QmluZEdyb3VwQWxsb2NhdG9yKEdQVUVycm9yU2NvcGVzJiBlcnJvcnMpCisgICAgOiBtX2Vycm9y
U2NvcGVzKG1ha2VSZWYoZXJyb3JzKSkKK3sKK30KKworYm9vbCBHUFVCaW5kR3JvdXBBbGxvY2F0
b3I6OnJlYWxsb2NhdGUoUGxhdGZvcm1HUFVCdWZmZXJPZmZzZXQgbmV3T2Zmc2V0KQoreworICAg
IHJldHVybiBmYWxzZTsKK30KKwordm9pZCBHUFVCaW5kR3JvdXBBbGxvY2F0b3I6OnRyeVJlc2V0
KCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkdQVSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9k
YXduL0dQVUJpbmRHcm91cERhd24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L2Rhd24vR1BVQmluZEdyb3VwRGF3bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi42MDVlNmJjZGMxN2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVCaW5kR3JvdXBEYXduLmNwcApA
QCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkdQVUJpbmRHcm91cC5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIkdQ
VUJpbmRHcm91cEFsbG9jYXRvci5oIgorI2luY2x1ZGUgIkdQVUVycm9yU2NvcGVzLmgiCisjaW5j
bHVkZSA8d2ViZ3B1L3dlYmdwdS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZlB0cjxH
UFVCaW5kR3JvdXA+IEdQVUJpbmRHcm91cDo6dHJ5Q3JlYXRlKGNvbnN0IEdQVUJpbmRHcm91cERl
c2NyaXB0b3ImIGRlc2NyaXB0b3IsIEdQVUJpbmRHcm91cEFsbG9jYXRvciYgYWxsb2NhdG9yKQor
eworICAgIHJldHVybiBudWxscHRyOworfQorCitHUFVCaW5kR3JvdXA6OkdQVUJpbmRHcm91cChH
UFVCaW5kR3JvdXBBbGxvY2F0b3I6OkFyZ3VtZW50QnVmZmVyT2Zmc2V0cyYmIG9mZnNldHMsIEdQ
VUJpbmRHcm91cEFsbG9jYXRvciYgYWxsb2NhdG9yLCBIYXNoU2V0PFJlZjxHUFVCdWZmZXI+PiYm
IGJ1ZmZlcnMsIEhhc2hTZXQ8UmVmPEdQVVRleHR1cmU+PiYmIHRleHR1cmVzKQorICAgIDogbV9h
cmd1bWVudEJ1ZmZlck9mZnNldHMoV1RGTW92ZShvZmZzZXRzKSkKKyAgICAsIG1fYWxsb2NhdG9y
KG1ha2VSZWYoYWxsb2NhdG9yKSkKKyAgICAsIG1fYm91bmRCdWZmZXJzKFdURk1vdmUoYnVmZmVy
cykpCisgICAgLCBtX2JvdW5kVGV4dHVyZXMoV1RGTW92ZSh0ZXh0dXJlcykpCit7Cit9CisKK0dQ
VUJpbmRHcm91cDo6fkdQVUJpbmRHcm91cCgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVCaW5kR3JvdXBMYXlvdXREYXduLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVUJpbmRHcm91cExh
eW91dERhd24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZTE3
NDdhOTk3Mjg2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L2Rhd24vR1BVQmluZEdyb3VwTGF5b3V0RGF3bi5jcHAKQEAgLTAsMCArMSw1MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHUFVCaW5kR3Jv
dXBMYXlvdXQuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJHUFVEZXZpY2Uu
aCIKKyNpbmNsdWRlIDx3ZWJncHUvd2ViZ3B1Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UmVmUHRyPEdQVUJpbmRHcm91cExheW91dD4gR1BVQmluZEdyb3VwTGF5b3V0Ojp0cnlDcmVhdGUo
Y29uc3QgR1BVRGV2aWNlJiBkZXZpY2UsIGNvbnN0IEdQVUJpbmRHcm91cExheW91dERlc2NyaXB0
b3ImIGRlc2NyaXB0b3IpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKKy8qCitHUFVCaW5k
R3JvdXBMYXlvdXQ6OkdQVUJpbmRHcm91cExheW91dChCaW5kaW5nc01hcFR5cGUmJiBiaW5kaW5n
c01hcCwgUmV0YWluUHRyPE1UTEFyZ3VtZW50RW5jb2Rlcj4mJiB2ZXJ0ZXgsIFJldGFpblB0cjxN
VExBcmd1bWVudEVuY29kZXI+JiYgZnJhZ21lbnQsIFJldGFpblB0cjxNVExBcmd1bWVudEVuY29k
ZXI+JiYgY29tcHV0ZSkKKyAgICA6IG1fdmVydGV4RW5jb2RlcihXVEZNb3ZlKHZlcnRleCkpCisg
ICAgLCBtX2ZyYWdtZW50RW5jb2RlcihXVEZNb3ZlKGZyYWdtZW50KSkKKyAgICAsIG1fY29tcHV0
ZUVuY29kZXIoV1RGTW92ZShjb21wdXRlKSkKKyAgICAsIG1fYmluZGluZ3NNYXAoV1RGTW92ZShi
aW5kaW5nc01hcCkpCit7Cit9CisqLworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L2Rhd24vR1BVQnVmZmVyRGF3bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVCdWZmZXJEYXduLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjRiODgyYTIyOTFmZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVUJ1ZmZlckRhd24u
Y3BwCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50
ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJHUFVCdWZmZXIuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNs
dWRlICJHUFVCdWZmZXJEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiR1BVRGV2aWNlLmgiCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvQXJyYXlCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitSZWZQdHI8R1BVQnVmZmVyPiBHUFVCdWZmZXI6OnRyeUNyZWF0ZShHUFVEZXZpY2UmIGRl
dmljZSwgY29uc3QgR1BVQnVmZmVyRGVzY3JpcHRvciYgZGVzY3JpcHRvciwgR1BVQnVmZmVyTWFw
cGVkT3B0aW9uIGlzTWFwcGVkLCBHUFVFcnJvclNjb3BlcyYgZXJyb3JTY29wZXMpCit7CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK0dQVUJ1ZmZlcjo6R1BVQnVmZmVyKFBsYXRmb3JtQnVmZmVy
U21hcnRQdHImJiBidWZmZXIsIEdQVURldmljZSYgZGV2aWNlLCBzaXplX3Qgc2l6ZSwgT3B0aW9u
U2V0PEdQVUJ1ZmZlclVzYWdlOjpGbGFncz4gdXNhZ2UsIEdQVUJ1ZmZlck1hcHBlZE9wdGlvbiBp
c01hcHBlZCkKKyAgICA6IG1fcGxhdGZvcm1CdWZmZXIoV1RGTW92ZShidWZmZXIpKQorICAgICwg
bV9kZXZpY2UobWFrZVJlZihkZXZpY2UpKQorICAgICwgbV9ieXRlTGVuZ3RoKHNpemUpCisgICAg
LCBtX3VzYWdlKHVzYWdlKQorICAgICwgbV9pc01hcHBlZEZyb21DcmVhdGlvbihpc01hcHBlZCA9
PSBHUFVCdWZmZXJNYXBwZWRPcHRpb246OklzTWFwcGVkKQoreworfQorCitHUFVCdWZmZXI6On5H
UFVCdWZmZXIoKQoreworICAgIGRlc3Ryb3kobnVsbHB0cik7Cit9CisKK2Jvb2wgR1BVQnVmZmVy
Ojppc1JlYWRPbmx5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR1BVQnVmZmVy
OjpTdGF0ZSBHUFVCdWZmZXI6OnN0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gU3RhdGU6OlVu
bWFwcGVkOworfQorCitKU0M6OkFycmF5QnVmZmVyKiBHUFVCdWZmZXI6Om1hcE9uQ3JlYXRpb24o
KQoreworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIEdQVUJ1ZmZlcjo6cmVnaXN0ZXJN
YXBwaW5nQ2FsbGJhY2soTWFwcGluZ0NhbGxiYWNrJiYgY2FsbGJhY2ssIGJvb2wgaXNSZWFkLCBH
UFVFcnJvclNjb3BlcyYgZXJyb3JTY29wZXMpCit7Cit9CisKK3ZvaWQgR1BVQnVmZmVyOjpydW5N
YXBwaW5nQ2FsbGJhY2soKQoreworfQorCitKU0M6OkFycmF5QnVmZmVyKiBHUFVCdWZmZXI6OnN0
YWdpbmdCdWZmZXJGb3JSZWFkKCkKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworSlNDOjpB
cnJheUJ1ZmZlciogR1BVQnVmZmVyOjpzdGFnaW5nQnVmZmVyRm9yV3JpdGUoKQoreworICAgIHJl
dHVybiBudWxscHRyOworfQorCit2b2lkIEdQVUJ1ZmZlcjo6Y29weVN0YWdpbmdCdWZmZXJUb0dQ
VShHUFVFcnJvclNjb3BlcyogZXJyb3JTY29wZXMpCit7Cit9CisKK3ZvaWQgR1BVQnVmZmVyOjp1
bm1hcChHUFVFcnJvclNjb3BlcyogZXJyb3JTY29wZXMpCit7Cit9CisKK3ZvaWQgR1BVQnVmZmVy
OjpkZXN0cm95KEdQVUVycm9yU2NvcGVzKiBlcnJvclNjb3BlcykKK3sKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVUNvbW1hbmRCdWZmZXJE
YXduLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVUNv
bW1hbmRCdWZmZXJEYXduLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAuLmI3ZTYxMzhmMGQzOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVUNvbW1hbmRCdWZmZXJEYXduLmNwcApAQCAtMCwwICsx
LDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0
YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJH
UFVDb21tYW5kQnVmZmVyLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1JlZlB0cjxHUFVDb21tYW5kQnVmZmVyPiBHUFVDb21tYW5kQnVmZmVyOjp0cnlD
cmVhdGUoY29uc3QgR1BVRGV2aWNlJiBkZXZpY2UpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK0dQVUNvbW1hbmRCdWZmZXI6OkdQVUNvbW1hbmRCdWZmZXIoUGxhdGZvcm1Db21tYW5kQnVm
ZmVyU21hcnRQdHImJiBidWZmZXIpCisgICAgOiBtX3BsYXRmb3JtQ29tbWFuZEJ1ZmZlcihXVEZN
b3ZlKGJ1ZmZlcikpCit7Cit9CisKK3ZvaWQgR1BVQ29tbWFuZEJ1ZmZlcjo6Y29weUJ1ZmZlclRv
QnVmZmVyKFJlZjxHUFVCdWZmZXI+JiYgc3JjLCB1aW50NjRfdCBzcmNPZmZzZXQsIFJlZjxHUFVC
dWZmZXI+JiYgZHN0LCB1aW50NjRfdCBkc3RPZmZzZXQsIHVpbnQ2NF90IHNpemUpCit7Cit9CisK
K3ZvaWQgR1BVQ29tbWFuZEJ1ZmZlcjo6Y29weUJ1ZmZlclRvVGV4dHVyZShHUFVCdWZmZXJDb3B5
VmlldyYmIHNyY0J1ZmZlciwgR1BVVGV4dHVyZUNvcHlWaWV3JiYgZHN0VGV4dHVyZSwgY29uc3Qg
R1BVRXh0ZW50M0QmIHNpemUpCit7Cit9CisKK3ZvaWQgR1BVQ29tbWFuZEJ1ZmZlcjo6Y29weVRl
eHR1cmVUb0J1ZmZlcihHUFVUZXh0dXJlQ29weVZpZXcmJiBzcmNUZXh0dXJlLCBHUFVCdWZmZXJD
b3B5VmlldyYmIGRzdEJ1ZmZlciwgY29uc3QgR1BVRXh0ZW50M0QmIHNpemUpCit7Cit9CisKK3Zv
aWQgR1BVQ29tbWFuZEJ1ZmZlcjo6Y29weVRleHR1cmVUb1RleHR1cmUoR1BVVGV4dHVyZUNvcHlW
aWV3JiYgc3JjLCBHUFVUZXh0dXJlQ29weVZpZXcmJiBkc3QsIGNvbnN0IEdQVUV4dGVudDNEJiBz
aXplKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCR1BVKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L2Rhd24vR1BVQ29tcHV0ZVBhc3NFbmNvZGVyRGF3bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVDb21wdXRlUGFzc0VuY29kZXJEYXduLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmMxZDgyYmNkY2E4NwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQ
VUNvbXB1dGVQYXNzRW5jb2RlckRhd24uY3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdQVUNvbXB1dGVQYXNzRW5jb2Rl
ci5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWZQ
dHI8R1BVQ29tcHV0ZVBhc3NFbmNvZGVyPiBHUFVDb21wdXRlUGFzc0VuY29kZXI6OnRyeUNyZWF0
ZShSZWY8R1BVQ29tbWFuZEJ1ZmZlcj4mJiBidWZmZXIpCit7CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK0dQVUNvbXB1dGVQYXNzRW5jb2Rlcjo6R1BVQ29tcHV0ZVBhc3NFbmNvZGVyKFJlZjxH
UFVDb21tYW5kQnVmZmVyPiYmIGJ1ZmZlciwgUGxhdGZvcm1Db21wdXRlUGFzc0VuY29kZXJTbWFy
dFB0ciYmIGVuY29kZXIpCisgICAgOiBHUFVQcm9ncmFtbWFibGVQYXNzRW5jb2RlcihXVEZNb3Zl
KGJ1ZmZlcikpCisgICAgLCBtX3BsYXRmb3JtQ29tcHV0ZVBhc3NFbmNvZGVyKFdURk1vdmUoZW5j
b2RlcikpCit7Cit9CisKK3ZvaWQgR1BVQ29tcHV0ZVBhc3NFbmNvZGVyOjpzZXRQaXBlbGluZShS
ZWY8Y29uc3QgR1BVQ29tcHV0ZVBpcGVsaW5lPiYmIHBpcGVsaW5lKQoreworfQorCit2b2lkIEdQ
VUNvbXB1dGVQYXNzRW5jb2Rlcjo6ZGlzcGF0Y2godW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5z
aWduZWQgeikKK3sKK30KKworY29uc3QgUGxhdGZvcm1Qcm9ncmFtbWFibGVQYXNzRW5jb2Rlciog
R1BVQ29tcHV0ZVBhc3NFbmNvZGVyOjpwbGF0Zm9ybVBhc3NFbmNvZGVyKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQkdQVSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9kYXduL0dQVUNvbXB1dGVQaXBlbGluZURhd24uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVQ29tcHV0ZVBpcGVsaW5lRGF3bi5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xMjQ3MTg3ZDI3M2MKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3
bi9HUFVDb21wdXRlUGlwZWxpbmVEYXduLmNwcApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHUFVDb21wdXRlUGlwZWxpbmUu
aCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJHUFVQaXBlbGluZUxheW91dC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZlB0cjxHUFVDb21wdXRlUGlwZWxpbmU+IEdQ
VUNvbXB1dGVQaXBlbGluZTo6dHJ5Q3JlYXRlKGNvbnN0IEdQVURldmljZSYgZGV2aWNlLCBjb25z
dCBHUFVDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBHUFVFcnJvclNjb3Bl
cyYgZXJyb3JTY29wZXMpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKKy8qCitHUFVDb21w
dXRlUGlwZWxpbmU6OkdQVUNvbXB1dGVQaXBlbGluZShSZXRhaW5QdHI8TVRMQ29tcHV0ZVBpcGVs
aW5lU3RhdGU+JiYgcGlwZWxpbmUsIFdITFNMOjpDb21wdXRlRGltZW5zaW9ucyBjb21wdXRlRGlt
ZW5zaW9ucywgY29uc3QgUmVmUHRyPEdQVVBpcGVsaW5lTGF5b3V0PiYgbGF5b3V0KQorICAgIDog
R1BVUGlwZWxpbmUoKQorICAgICwgbV9wbGF0Zm9ybUNvbXB1dGVQaXBlbGluZShXVEZNb3ZlKHBp
cGVsaW5lKSkKKyAgICAsIG1fY29tcHV0ZURpbWVuc2lvbnMoY29tcHV0ZURpbWVuc2lvbnMpCisg
ICAgLCBtX2xheW91dChsYXlvdXQpCit7Cit9CisqLworCitHUFVDb21wdXRlUGlwZWxpbmU6On5H
UFVDb21wdXRlUGlwZWxpbmUoKSA9IGRlZmF1bHQ7CisKK2Jvb2wgR1BVQ29tcHV0ZVBpcGVsaW5l
OjpyZWNvbXBpbGUoY29uc3QgR1BVRGV2aWNlJiBkZXZpY2UsIEdQVVByb2dyYW1tYWJsZVN0YWdl
RGVzY3JpcHRvciYmIGNvbXB1dGVTdGFnZSkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVEZXZpY2VE
YXduLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVURl
dmljZURhd24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYWQ2
YjZjZjdmOWZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L2Rhd24vR1BVRGV2aWNlRGF3bi5jcHAKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1BVRGV2aWNlLmgiCisK
KyNpZiBFTkFCTEUoV0VCR1BVKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZlB0cjxHUFVE
ZXZpY2U+IEdQVURldmljZTo6dHJ5Q3JlYXRlKGNvbnN0IE9wdGlvbmFsPEdQVVJlcXVlc3RBZGFw
dGVyT3B0aW9ucz4mIG9wdGlvbnMpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0dQVURl
dmljZTo6R1BVRGV2aWNlKFBsYXRmb3JtRGV2aWNlU21hcnRQdHImJiBkZXZpY2UpCisgICAgOiBt
X3BsYXRmb3JtRGV2aWNlKFdURk1vdmUoZGV2aWNlKSkKK3sKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVBsYXRmb3JtVHlwZXNEYXduLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVQbGF0Zm9ybVR5
cGVzRGF3bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZjVhOTli
NDU4YjI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L2Rhd24vR1BVUGxhdGZvcm1UeXBlc0Rhd24uaApAQCAtMCwwICsxLDE5OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5j
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRl
IDx3ZWJncHUvd2ViZ3B1Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgUGxhdGZv
cm1HUFVCdWZmZXJPZmZzZXQgPSBzdGQ6OnVpbnQ2NF90OworCisvLyBEYXduIHR5cGVzCit1c2lu
ZyBQbGF0Zm9ybUJ1ZmZlciA9IFdHUFVCdWZmZXJJbXBsOwordXNpbmcgUGxhdGZvcm1Db21tYW5k
QnVmZmVyID0gV0dQVUNvbW1hbmRCdWZmZXJJbXBsOwordXNpbmcgUGxhdGZvcm1Db21wdXRlUGFz
c0VuY29kZXIgPSBXR1BVQ29tcHV0ZVBhc3NFbmNvZGVySW1wbDsKK3VzaW5nIFBsYXRmb3JtQ29t
cHV0ZVBpcGVsaW5lID0gV0dQVUNvbXB1dGVQaXBlbGluZUltcGw7Cit1c2luZyBQbGF0Zm9ybURl
dmljZSA9IFdHUFVEZXZpY2VJbXBsOwordXNpbmcgUGxhdGZvcm1EcmF3YWJsZSA9IFdHUFVTdXJm
YWNlSW1wbDsKK3VzaW5nIFBsYXRmb3JtUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIgPSBXR1BVQ29t
bWFuZEVuY29kZXJJbXBsOwordXNpbmcgUGxhdGZvcm1RdWV1ZSA9IFdHUFVRdWV1ZUltcGw7Cit1
c2luZyBQbGF0Zm9ybVJlbmRlclBhc3NFbmNvZGVyID0gV0dQVVJlbmRlclBhc3NFbmNvZGVySW1w
bDsKK3VzaW5nIFBsYXRmb3JtUmVuZGVyUGlwZWxpbmUgPSBXR1BVUmVuZGVyUGlwZWxpbmVJbXBs
OwordXNpbmcgUGxhdGZvcm1TYW1wbGVyID0gV0dQVVNhbXBsZXJJbXBsOwordXNpbmcgUGxhdGZv
cm1TaGFkZXJNb2R1bGUgPSBXR1BVU2hhZGVyTW9kdWxlSW1wbDsKK3VzaW5nIFBsYXRmb3JtU3dh
cExheWVyID0gV0dQVVN3YXBDaGFpbkltcGw7Cit1c2luZyBQbGF0Zm9ybVRleHR1cmUgPSBXR1BV
VGV4dHVyZUltcGw7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSGFuZGxlRGVsZXRl
ciB7CitwdWJsaWM6CisgICAgdm9pZCBvcGVyYXRvcigpKFQqIGhhbmRsZSkgPSBkZWxldGU7Cit9
OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgSGFuZGxlRGVsZXRlcjxQbGF0Zm9ybUJ1ZmZlcj4gewor
ICAgIHZvaWQgb3BlcmF0b3IoKShQbGF0Zm9ybUJ1ZmZlciogaGFuZGxlKQorICAgIHsKKyAgICAg
ICAgaWYgKGhhbmRsZSkKKyAgICAgICAgICAgIHdncHVCdWZmZXJEZXN0cm95KGhhbmRsZSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IEhhbmRsZURlbGV0ZXI8UGxhdGZvcm1Db21t
YW5kQnVmZmVyPiB7CisgICAgdm9pZCBvcGVyYXRvcigpKFBsYXRmb3JtQ29tbWFuZEJ1ZmZlciog
aGFuZGxlKQorICAgIHsKKyAgICAgICAgaWYgKGhhbmRsZSkKKyAgICAgICAgICAgIHdncHVDb21t
YW5kQnVmZmVyUmVsZWFzZShoYW5kbGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4KK3N0cnVj
dCBIYW5kbGVEZWxldGVyPFBsYXRmb3JtQ29tcHV0ZVBhc3NFbmNvZGVyPiB7CisgICAgdm9pZCBv
cGVyYXRvcigpKFBsYXRmb3JtQ29tcHV0ZVBhc3NFbmNvZGVyKiBoYW5kbGUpCisgICAgeworICAg
ICAgICBpZiAoaGFuZGxlKQorICAgICAgICAgICAgd2dwdUNvbXB1dGVQYXNzRW5jb2RlclJlbGVh
c2UoaGFuZGxlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgSGFuZGxlRGVsZXRl
cjxQbGF0Zm9ybUNvbXB1dGVQaXBlbGluZT4geworICAgIHZvaWQgb3BlcmF0b3IoKShQbGF0Zm9y
bUNvbXB1dGVQaXBlbGluZSogaGFuZGxlKQorICAgIHsKKyAgICAgICAgaWYgKGhhbmRsZSkKKyAg
ICAgICAgICAgIHdncHVDb21wdXRlUGlwZWxpbmVSZWxlYXNlKGhhbmRsZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8Pgorc3RydWN0IEhhbmRsZURlbGV0ZXI8UGxhdGZvcm1EZXZpY2U+IHsKKyAg
ICB2b2lkIG9wZXJhdG9yKCkoUGxhdGZvcm1EZXZpY2UqIGhhbmRsZSkKKyAgICB7CisgICAgICAg
IGlmIChoYW5kbGUpCisgICAgICAgICAgICB3Z3B1RGV2aWNlUmVsZWFzZShoYW5kbGUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBIYW5kbGVEZWxldGVyPFBsYXRmb3JtRHJhd2Fi
bGU+IHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoUGxhdGZvcm1EcmF3YWJsZSogaGFuZGxlKQorICAg
IHsKKyAgICAgICAgaWYgKGhhbmRsZSkKKyAgICAgICAgICAgIHdncHVTdXJmYWNlUmVsZWFzZSho
YW5kbGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBIYW5kbGVEZWxldGVyPFBs
YXRmb3JtUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXI+IHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoUGxh
dGZvcm1Qcm9ncmFtbWFibGVQYXNzRW5jb2RlciogaGFuZGxlKQorICAgIHsKKyAgICAgICAgaWYg
KGhhbmRsZSkKKyAgICAgICAgICAgIHdncHVDb21tYW5kRW5jb2RlclJlbGVhc2UoaGFuZGxlKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgSGFuZGxlRGVsZXRlcjxQbGF0Zm9ybVF1
ZXVlPiB7CisgICAgdm9pZCBvcGVyYXRvcigpKFBsYXRmb3JtUXVldWUqIGhhbmRsZSkKKyAgICB7
CisgICAgICAgIGlmIChoYW5kbGUpCisgICAgICAgICAgICB3Z3B1UXVldWVSZWxlYXNlKGhhbmRs
ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IEhhbmRsZURlbGV0ZXI8UGxhdGZv
cm1SZW5kZXJQYXNzRW5jb2Rlcj4geworICAgIHZvaWQgb3BlcmF0b3IoKShQbGF0Zm9ybVJlbmRl
clBhc3NFbmNvZGVyKiBoYW5kbGUpCisgICAgeworICAgICAgICBpZiAoaGFuZGxlKQorICAgICAg
ICAgICAgd2dwdVJlbmRlclBhc3NFbmNvZGVyUmVsZWFzZShoYW5kbGUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPD4KK3N0cnVjdCBIYW5kbGVEZWxldGVyPFBsYXRmb3JtUmVuZGVyUGlwZWxpbmU+
IHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoUGxhdGZvcm1SZW5kZXJQaXBlbGluZSogaGFuZGxlKQor
ICAgIHsKKyAgICAgICAgaWYgKGhhbmRsZSkKKyAgICAgICAgICAgIHdncHVSZW5kZXJQaXBlbGlu
ZVJlbGVhc2UoaGFuZGxlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgSGFuZGxl
RGVsZXRlcjxQbGF0Zm9ybVNhbXBsZXI+IHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoUGxhdGZvcm1T
YW1wbGVyKiBoYW5kbGUpCisgICAgeworICAgICAgICBpZiAoaGFuZGxlKQorICAgICAgICAgICAg
d2dwdVNhbXBsZXJSZWxlYXNlKGhhbmRsZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8Pgorc3Ry
dWN0IEhhbmRsZURlbGV0ZXI8UGxhdGZvcm1TaGFkZXJNb2R1bGU+IHsKKyAgICB2b2lkIG9wZXJh
dG9yKCkoUGxhdGZvcm1TaGFkZXJNb2R1bGUqIGhhbmRsZSkKKyAgICB7CisgICAgICAgIGlmICho
YW5kbGUpCisgICAgICAgICAgICB3Z3B1U2hhZGVyTW9kdWxlUmVsZWFzZShoYW5kbGUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBIYW5kbGVEZWxldGVyPFBsYXRmb3JtU3dhcExh
eWVyPiB7CisgICAgdm9pZCBvcGVyYXRvcigpKFBsYXRmb3JtU3dhcExheWVyKiBoYW5kbGUpCisg
ICAgeworICAgICAgICBpZiAoaGFuZGxlKQorICAgICAgICAgICAgd2dwdVN3YXBDaGFpblJlbGVh
c2UoaGFuZGxlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgSGFuZGxlRGVsZXRl
cjxQbGF0Zm9ybVRleHR1cmU+IHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoUGxhdGZvcm1UZXh0dXJl
KiBoYW5kbGUpCisgICAgeworICAgICAgICBpZiAoaGFuZGxlKQorICAgICAgICAgICAgd2dwdVRl
eHR1cmVSZWxlYXNlKGhhbmRsZSk7CisgICAgfQorfTsKKwordXNpbmcgUGxhdGZvcm1CdWZmZXJT
bWFydFB0ciA9IHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUJ1ZmZlciwgSGFuZGxlRGVsZXRlcjxQ
bGF0Zm9ybUJ1ZmZlcj4+OwordXNpbmcgUGxhdGZvcm1Db21tYW5kQnVmZmVyU21hcnRQdHIgPSBz
dGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db21tYW5kQnVmZmVyLCBIYW5kbGVEZWxldGVyPFBsYXRm
b3JtQ29tbWFuZEJ1ZmZlcj4+OwordXNpbmcgUGxhdGZvcm1Db21wdXRlUGFzc0VuY29kZXJTbWFy
dFB0ciA9IHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbXB1dGVQYXNzRW5jb2RlciwgSGFuZGxl
RGVsZXRlcjxQbGF0Zm9ybUNvbXB1dGVQYXNzRW5jb2Rlcj4+OwordXNpbmcgUGxhdGZvcm1Db21w
dXRlUGlwZWxpbmVTbWFydFB0ciA9IHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbXB1dGVQaXBl
bGluZSwgSGFuZGxlRGVsZXRlcjxQbGF0Zm9ybUNvbXB1dGVQaXBlbGluZT4+OwordXNpbmcgUGxh
dGZvcm1EZXZpY2VTbWFydFB0ciA9IHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybURldmljZSwgSGFu
ZGxlRGVsZXRlcjxQbGF0Zm9ybURldmljZT4+OwordXNpbmcgUGxhdGZvcm1EcmF3YWJsZVNtYXJ0
UHRyID0gc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtRHJhd2FibGUsIEhhbmRsZURlbGV0ZXI8UGxh
dGZvcm1EcmF3YWJsZT4+OwordXNpbmcgUGxhdGZvcm1Qcm9ncmFtbWFibGVQYXNzRW5jb2RlclNt
YXJ0UHRyID0gc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIs
IEhhbmRsZURlbGV0ZXI8UGxhdGZvcm1Qcm9ncmFtbWFibGVQYXNzRW5jb2Rlcj4+OwordXNpbmcg
UGxhdGZvcm1RdWV1ZVNtYXJ0UHRyID0gc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtUXVldWUsIEhh
bmRsZURlbGV0ZXI8UGxhdGZvcm1RdWV1ZT4+OwordXNpbmcgUGxhdGZvcm1SZW5kZXJQYXNzRW5j
b2RlclNtYXJ0UHRyID0gc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtUmVuZGVyUGFzc0VuY29kZXIs
IEhhbmRsZURlbGV0ZXI8UGxhdGZvcm1SZW5kZXJQYXNzRW5jb2Rlcj4+OwordXNpbmcgUGxhdGZv
cm1SZW5kZXJQaXBlbGluZVNtYXJ0UHRyID0gc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtUmVuZGVy
UGlwZWxpbmUsIEhhbmRsZURlbGV0ZXI8UGxhdGZvcm1SZW5kZXJQaXBlbGluZT4+OwordXNpbmcg
UGxhdGZvcm1TYW1wbGVyU21hcnRQdHIgPSBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1TYW1wbGVy
LCBIYW5kbGVEZWxldGVyPFBsYXRmb3JtU2FtcGxlcj4+OwordXNpbmcgUGxhdGZvcm1TaGFkZXJN
b2R1bGVTbWFydFB0ciA9IHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVNoYWRlck1vZHVsZSwgSGFu
ZGxlRGVsZXRlcjxQbGF0Zm9ybVNoYWRlck1vZHVsZT4+OwordXNpbmcgUGxhdGZvcm1Td2FwTGF5
ZXJTbWFydFB0ciA9IHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVN3YXBMYXllciwgSGFuZGxlRGVs
ZXRlcjxQbGF0Zm9ybVN3YXBMYXllcj4+OwordXNpbmcgUGxhdGZvcm1UZXh0dXJlU21hcnRQdHIg
PSBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UZXh0dXJlLCBIYW5kbGVEZWxldGVyPFBsYXRmb3Jt
VGV4dHVyZT4+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVQcm9ncmFtbWFibGVQYXNzRW5j
b2RlckRhd24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24v
R1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXJEYXduLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAuLjM0ZTQ4ZjdiMDI1NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVByb2dyYW1tYWJsZVBhc3NF
bmNvZGVyRGF3bi5jcHAKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXIuaCIKKwor
I2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBHUFVQcm9n
cmFtbWFibGVQYXNzRW5jb2Rlcjo6ZW5kUGFzcygpCit7Cit9CisKK3ZvaWQgR1BVUHJvZ3JhbW1h
YmxlUGFzc0VuY29kZXI6OnNldEJpbmRHcm91cCh1bnNpZ25lZCBpbmRleCwgR1BVQmluZEdyb3Vw
JiBiaW5kR3JvdXApCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvZGF3bi9HUFVRdWV1ZURhd24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L2Rhd24vR1BVUXVldWVEYXduLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAuLjkxZjZjODAzZDllNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVF1ZXVlRGF3bi5jcHAKQEAg
LTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZl
IEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiR1BVUXVldWUuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJHUFVE
ZXZpY2UuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitSZWZQdHI8R1BVUXVldWU+IEdQVVF1ZXVlOjp0cnlDcmVhdGUoY29uc3QgR1BV
RGV2aWNlJiBkZXZpY2UpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0dQVVF1ZXVlOjpH
UFVRdWV1ZShQbGF0Zm9ybVF1ZXVlU21hcnRQdHImJiBxdWV1ZSwgY29uc3QgR1BVRGV2aWNlJiBk
ZXZpY2UpCisgICAgOiBtX3BsYXRmb3JtUXVldWUoV1RGTW92ZShxdWV1ZSkpCisgICAgLCBtX2Rl
dmljZShtYWtlV2Vha1B0cihkZXZpY2UpKQoreworfQorCit2b2lkIEdQVVF1ZXVlOjpzdWJtaXQo
VmVjdG9yPFJlZjxHUFVDb21tYW5kQnVmZmVyPj4mJiBjb21tYW5kQnVmZmVycykKK3sKK30KKwor
U3RyaW5nIEdQVVF1ZXVlOjpsYWJlbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGVtcHR5U3RyaW5n
KCk7Cit9CisKK3ZvaWQgR1BVUXVldWU6OnNldExhYmVsKGNvbnN0IFN0cmluZyYgbGFiZWwpIGNv
bnN0Cit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShX
RUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
ZGF3bi9HUFVSZW5kZXJQYXNzRW5jb2RlckRhd24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVUmVuZGVyUGFzc0VuY29kZXJEYXduLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmU4ZDliNmQ1ZTI0MwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVJl
bmRlclBhc3NFbmNvZGVyRGF3bi5jcHAKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1BVUmVuZGVyUGFzc0VuY29kZXIuaCIK
KworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEdQ
VVJlbmRlclBhc3NFbmNvZGVyPiBHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6dHJ5Q3JlYXRlKFJlZjxH
UFVDb21tYW5kQnVmZmVyPiYmIGJ1ZmZlciwgR1BVUmVuZGVyUGFzc0Rlc2NyaXB0b3ImJiBkZXNj
cmlwdG9yKQoreworICAgIHJldHVybiBudWxscHRyOworfQorCitHUFVSZW5kZXJQYXNzRW5jb2Rl
cjo6R1BVUmVuZGVyUGFzc0VuY29kZXIoUmVmPEdQVUNvbW1hbmRCdWZmZXI+JiYgY29tbWFuZEJ1
ZmZlciwgUGxhdGZvcm1SZW5kZXJQYXNzRW5jb2RlclNtYXJ0UHRyJiYgZW5jb2RlcikKKyAgICA6
IEdQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyKFdURk1vdmUoY29tbWFuZEJ1ZmZlcikpCisgICAg
LCBtX3BsYXRmb3JtUmVuZGVyUGFzc0VuY29kZXIoV1RGTW92ZShlbmNvZGVyKSkKK3sKK30KKwor
Y29uc3QgUGxhdGZvcm1Qcm9ncmFtbWFibGVQYXNzRW5jb2RlciogR1BVUmVuZGVyUGFzc0VuY29k
ZXI6OnBsYXRmb3JtUGFzc0VuY29kZXIoKSBjb25zdAoreworICAgIHJldHVybiBudWxscHRyOwor
fQorCit2b2lkIEdQVVJlbmRlclBhc3NFbmNvZGVyOjpzZXRQaXBlbGluZShSZWY8Y29uc3QgR1BV
UmVuZGVyUGlwZWxpbmU+JiYgcGlwZWxpbmUpCit7Cit9CisKK3ZvaWQgR1BVUmVuZGVyUGFzc0Vu
Y29kZXI6OnNldEJsZW5kQ29sb3IoY29uc3QgR1BVQ29sb3ImIGNvbG9yKQoreworfQorCit2b2lk
IEdQVVJlbmRlclBhc3NFbmNvZGVyOjpzZXRWaWV3cG9ydChmbG9hdCB4LCBmbG9hdCB5LCBmbG9h
dCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBtaW5EZXB0aCwgZmxvYXQgbWF4RGVwdGgpCit7
Cit9CisKK3ZvaWQgR1BVUmVuZGVyUGFzc0VuY29kZXI6OnNldFNjaXNzb3JSZWN0KHVuc2lnbmVk
IHgsIHVuc2lnbmVkIHksIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCit7Cit9CisK
K3ZvaWQgR1BVUmVuZGVyUGFzc0VuY29kZXI6OnNldEluZGV4QnVmZmVyKEdQVUJ1ZmZlciYgYnVm
ZmVyLCB1aW50NjRfdCBvZmZzZXQpCit7Cit9CisKK3ZvaWQgR1BVUmVuZGVyUGFzc0VuY29kZXI6
OnNldFZlcnRleEJ1ZmZlcnModW5zaWduZWQgaW5kZXgsIGNvbnN0IFZlY3RvcjxSZWY8R1BVQnVm
ZmVyPj4mIGJ1ZmZlcnMsIGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIG9mZnNldHMpCit7Cit9CisK
K3ZvaWQgR1BVUmVuZGVyUGFzc0VuY29kZXI6OmRyYXcodW5zaWduZWQgdmVydGV4Q291bnQsIHVu
c2lnbmVkIGluc3RhbmNlQ291bnQsIHVuc2lnbmVkIGZpcnN0VmVydGV4LCB1bnNpZ25lZCBmaXJz
dEluc3RhbmNlKQoreworfQorCit2b2lkIEdQVVJlbmRlclBhc3NFbmNvZGVyOjpkcmF3SW5kZXhl
ZCh1bnNpZ25lZCBpbmRleENvdW50LCB1bnNpZ25lZCBpbnN0YW5jZUNvdW50LCB1bnNpZ25lZCBm
aXJzdEluZGV4LCBpbnQgYmFzZVZlcnRleCwgdW5zaWduZWQgZmlyc3RJbnN0YW5jZSkKK3sKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVJl
bmRlclBpcGVsaW5lRGF3bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvZGF3bi9HUFVSZW5kZXJQaXBlbGluZURhd24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMC4uMTdhMzFhYjY2MjBlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVUmVuZGVyUGlwZWxpbmVEYXdu
LmNwcApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50
ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJHUFVSZW5kZXJQaXBlbGluZS5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWZQdHI8R1BVUmVuZGVyUGlwZWxpbmU+IEdQVVJl
bmRlclBpcGVsaW5lOjp0cnlDcmVhdGUoY29uc3QgR1BVRGV2aWNlJiBkZXZpY2UsIGNvbnN0IEdQ
VVJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciYgZGVzY3JpcHRvciwgR1BVRXJyb3JTY29wZXMmIGVy
cm9yU2NvcGVzKQoreworICAgIHJldHVybiBudWxscHRyOworfQorCitHUFVSZW5kZXJQaXBlbGlu
ZTo6fkdQVVJlbmRlclBpcGVsaW5lKCkgPSBkZWZhdWx0OworCitib29sIEdQVVJlbmRlclBpcGVs
aW5lOjpyZWNvbXBpbGUoY29uc3QgR1BVRGV2aWNlJiBkZXZpY2UsIEdQVVByb2dyYW1tYWJsZVN0
YWdlRGVzY3JpcHRvciYmIHZlcnRleFN0YWdlLCBPcHRpb25hbDxHUFVQcm9ncmFtbWFibGVTdGFn
ZURlc2NyaXB0b3I+JiYgZnJhZ21lbnRTdGFnZSkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVTYW1w
bGVyRGF3bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9H
UFVTYW1wbGVyRGF3bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
Li5hM2M5ZDBhZWZhNDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvZGF3bi9HUFVTYW1wbGVyRGF3bi5jcHAKQEAgLTAsMCArMSw0NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQg
SW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1BVU2FtcGxl
ci5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWZQ
dHI8R1BVU2FtcGxlcj4gR1BVU2FtcGxlcjo6dHJ5Q3JlYXRlKGNvbnN0IEdQVURldmljZSYgZGV2
aWNlLCBjb25zdCBHUFVTYW1wbGVyRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKworR1BVU2FtcGxlcjo6R1BVU2FtcGxlcihQbGF0Zm9ybVNhbXBsZXJT
bWFydFB0ciYmIHNhbXBsZXIpCisgICAgOiBtX3BsYXRmb3JtU2FtcGxlcihXVEZNb3ZlKHNhbXBs
ZXIpKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCR1BVKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L2Rhd24vR1BVU2hhZGVyTW9kdWxlRGF3bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvZGF3bi9HUFVTaGFkZXJNb2R1bGVEYXduLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmU5YTUzNGFkNWFhMAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVNoYWRlck1vZHVs
ZURhd24uY3BwCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29u
eSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkdQVVNoYWRlck1vZHVsZS5oIgorCisjaWYgRU5BQkxFKFdFQkdQ
VSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWZQdHI8R1BVU2hhZGVyTW9kdWxlPiBHUFVT
aGFkZXJNb2R1bGU6OnRyeUNyZWF0ZShjb25zdCBHUFVEZXZpY2UmIGRldmljZSwgY29uc3QgR1BV
U2hhZGVyTW9kdWxlRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKworR1BVU2hhZGVyTW9kdWxlOjpHUFVTaGFkZXJNb2R1bGUoUGxhdGZvcm1TaGFkZXJN
b2R1bGVTbWFydFB0ciYmIG1vZHVsZSkKKyAgICA6IG1fcGxhdGZvcm1TaGFkZXJNb2R1bGUoV1RG
TW92ZShtb2R1bGUpKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L2Rhd24vR1BVU3dhcENoYWluRGF3bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVTd2FwQ2hhaW5EYXduLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmZhNWE3NmUwNzA2NwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVN3YXBDaGFp
bkRhd24uY3BwCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29u
eSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkdQVVN3YXBDaGFpbi5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWZQdHI8R1BVU3dhcENoYWluPiBHUFVTd2FwQ2hh
aW46OnRyeUNyZWF0ZShjb25zdCBHUFVTd2FwQ2hhaW5EZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBp
bnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0dQVVN3
YXBDaGFpbjo6R1BVU3dhcENoYWluKFBsYXRmb3JtU3dhcExheWVyU21hcnRQdHImJiBwbGF0Zm9y
bUxheWVyLCBPcHRpb25TZXQ8R1BVVGV4dHVyZVVzYWdlOjpGbGFncz4gdXNhZ2VPcHRpb25zKQor
ICAgIDogbV9wbGF0Zm9ybVN3YXBMYXllcihXVEZNb3ZlKHBsYXRmb3JtTGF5ZXIpKQorICAgICwg
bV91c2FnZSh1c2FnZU9wdGlvbnMpCit7Cit9CisKK1JlZlB0cjxHUFVUZXh0dXJlPiBHUFVTd2Fw
Q2hhaW46OnRyeUdldEN1cnJlbnRUZXh0dXJlKCkKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
Kwordm9pZCBHUFVTd2FwQ2hhaW46OnByZXNlbnQoKQoreworICAgIGlmICghbV9jdXJyZW50RHJh
d2FibGUpCisgICAgICAgIHJldHVybjsKK30KKwordm9pZCBHUFVTd2FwQ2hhaW46OnJlc2hhcGUo
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworCit9CisKK1BsYXRmb3JtTGF5ZXIqIEdQVVN3YXBD
aGFpbjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVUZXh0
dXJlRGF3bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9H
UFVUZXh0dXJlRGF3bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
Li4yYjQ2ZDI0MTczYjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvZGF3bi9HUFVUZXh0dXJlRGF3bi5jcHAKQEAgLTAsMCArMSw1NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQg
SW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1BVVGV4dHVy
ZS5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWZQ
dHI8R1BVVGV4dHVyZT4gR1BVVGV4dHVyZTo6dHJ5Q3JlYXRlKGNvbnN0IEdQVURldmljZSYgZGV2
aWNlLCBjb25zdCBHUFVUZXh0dXJlRGVzY3JpcHRvciYgZGVzY3JpcHRvciwgR1BVRXJyb3JTY29w
ZXMmIGVycm9yU2NvcGVzKQoreworICAgIHJldHVybiBudWxscHRyOworfQorCitSZWY8R1BVVGV4
dHVyZT4gR1BVVGV4dHVyZTo6Y3JlYXRlKFBsYXRmb3JtVGV4dHVyZVNtYXJ0UHRyJiYgdGV4dHVy
ZSwgT3B0aW9uU2V0PEdQVVRleHR1cmVVc2FnZTo6RmxhZ3M+IHVzYWdlKQoreworICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEdQVVRleHR1cmUoV1RGTW92ZSh0ZXh0dXJlKSwgdXNhZ2UpKTsKK30K
KworR1BVVGV4dHVyZTo6R1BVVGV4dHVyZShQbGF0Zm9ybVRleHR1cmVTbWFydFB0ciYmIHRleHR1
cmUsIE9wdGlvblNldDxHUFVUZXh0dXJlVXNhZ2U6OkZsYWdzPiB1c2FnZSkKKyAgICA6IG1fcGxh
dGZvcm1UZXh0dXJlKFdURk1vdmUodGV4dHVyZSkpCisgICAgLCBtX3VzYWdlKHVzYWdlKQorewor
fQorCitSZWZQdHI8R1BVVGV4dHVyZT4gR1BVVGV4dHVyZTo6dHJ5Q3JlYXRlRGVmYXVsdFRleHR1
cmVWaWV3KCkKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412101</attachid>
            <date>2020-10-22 08:40:16 -0700</date>
            <delta_ts>2020-10-22 09:47:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217982.diff</filename>
            <type>text/plain</type>
            <size>55240</size>
            <attacher name="Don Olmstead">don.olmstead</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiZTM1MmMxZjNiOGIuLjA0NTUwNGE1ZmQxNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDExOCBAQAorMjAyMC0xMC0yMiAgRG9uIE9sbXN0ZWFkICA8ZG9uLm9sbXN0ZWFkQHNv
bnkuY29tPgorCisgICAgICAgIFtXZWJHUFVdIEFkZCBEYXduIGltcGxlbWVudGF0aW9uIHNrZWxl
dG9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc5
ODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
YW4gZW1wdHkgaW1wbGVtZW50YXRpb24gb2YgdGhlIFdlYkdQVSB0eXBlcy4gVGhpcyBnZXRzIFdl
YkdQVSBidWlsdCBhbmQgbGlua2luZworICAgICAgICB1c2luZyBEYXduLgorCisgICAgICAgICog
UGxhdGZvcm1XaW5DYWlyby5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9EYXduLmNtYWtlOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVUGxhdGZvcm1UeXBlcy5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVUJpbmRHcm91cEFsbG9j
YXRvckRhd24uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvR1BVUGxhdGZvcm1UeXBlcy5oLgorICAgICAgICAoV2ViQ29yZTo6R1BVQmluZEdyb3Vw
QWxsb2NhdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQmluZEdyb3VwQWxsb2Nh
dG9yOjpHUFVCaW5kR3JvdXBBbGxvY2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQmluZEdy
b3VwQWxsb2NhdG9yOjpyZWFsbG9jYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJpbmRHcm91
cEFsbG9jYXRvcjo6dHJ5UmVzZXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9k
YXduL0dQVUJpbmRHcm91cERhd24uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvR1BVUGxhdGZvcm1UeXBlcy5oLgorICAgICAgICAoV2ViQ29yZTo6
R1BVQmluZEdyb3VwOjp0cnlDcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQmluZEdyb3Vw
OjpHUFVCaW5kR3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6R1BVQmluZEdyb3VwOjp+R1BVQmlu
ZEdyb3VwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVCaW5kR3Jv
dXBMYXlvdXREYXduLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0dQVVBsYXRmb3JtVHlwZXMuaC4KKyAgICAgICAgKFdlYkNvcmU6OkdQVUJpbmRH
cm91cExheW91dDo6dHJ5Q3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUv
ZGF3bi9HUFVCdWZmZXJEYXduLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHUFVCdWZm
ZXI6OnRyeUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6OkdQVUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6On5HUFVCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R1BVQnVmZmVyOjppc1JlYWRPbmx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdQ
VUJ1ZmZlcjo6c3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjptYXBP
bkNyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJ1ZmZlcjo6cmVnaXN0ZXJNYXBwaW5n
Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjpydW5NYXBwaW5nQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjpzdGFnaW5nQnVmZmVyRm9yUmVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6OnN0YWdpbmdCdWZmZXJGb3JXcml0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6OmNvcHlTdGFnaW5nQnVmZmVyVG9HUFUpOgorICAg
ICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjp1bm1hcCk6CisgICAgICAgIChXZWJDb3JlOjpHUFVC
dWZmZXI6OmRlc3Ryb3kpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQ
VUNvbW1hbmRCdWZmZXJEYXduLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L0dQVVBsYXRmb3JtVHlwZXMuaC4KKyAgICAgICAgKFdlYkNvcmU6OkdQ
VUNvbW1hbmRCdWZmZXI6OnRyeUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHUFVDb21tYW5k
QnVmZmVyOjpHUFVDb21tYW5kQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUNvbW1hbmRC
dWZmZXI6OmNvcHlCdWZmZXJUb0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHUFVDb21tYW5k
QnVmZmVyOjpjb3B5QnVmZmVyVG9UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUNvbW1h
bmRCdWZmZXI6OmNvcHlUZXh0dXJlVG9CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQ29t
bWFuZEJ1ZmZlcjo6Y29weVRleHR1cmVUb1RleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dwdS9kYXduL0dQVUNvbXB1dGVQYXNzRW5jb2RlckRhd24uY3BwOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVUGxhdGZvcm1UeXBlcy5o
LgorICAgICAgICAoV2ViQ29yZTo6R1BVQ29tcHV0ZVBhc3NFbmNvZGVyOjp0cnlDcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R1BVQ29tcHV0ZVBhc3NFbmNvZGVyOjpHUFVDb21wdXRlUGFzc0Vu
Y29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQ29tcHV0ZVBhc3NFbmNvZGVyOjpzZXRQaXBl
bGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHUFVDb21wdXRlUGFzc0VuY29kZXI6OmRpc3BhdGNo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUNvbXB1dGVQYXNzRW5jb2Rlcjo6cGxhdGZvcm1QYXNz
RW5jb2RlciBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BV
Q29tcHV0ZVBpcGVsaW5lRGF3bi5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9HUFVQbGF0Zm9ybVR5cGVzLmguCisgICAgICAgIChXZWJDb3JlOjpH
UFVDb21wdXRlUGlwZWxpbmU6OnRyeUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHUFVDb21w
dXRlUGlwZWxpbmU6OnJlY29tcGlsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L2Rhd24vR1BVRGV2aWNlRGF3bi5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9HUFVQbGF0Zm9ybVR5cGVzLmguCisgICAgICAgIChXZWJDb3JlOjpH
UFVEZXZpY2U6OnRyeUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHUFVEZXZpY2U6OkdQVURl
dmljZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVUGxhdGZvcm1U
eXBlc0Rhd24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIYW5kbGVEZWxldGVyPFBsYXRm
b3JtQnVmZmVyPjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3JlOjpIYW5kbGVEZWxldGVy
PFBsYXRmb3JtQ29tbWFuZEJ1ZmZlcj46Om9wZXJhdG9yKCkpOgorICAgICAgICAoV2ViQ29yZTo6
SGFuZGxlRGVsZXRlcjxQbGF0Zm9ybUNvbXB1dGVQYXNzRW5jb2Rlcj46Om9wZXJhdG9yKCkpOgor
ICAgICAgICAoV2ViQ29yZTo6SGFuZGxlRGVsZXRlcjxQbGF0Zm9ybUNvbXB1dGVQaXBlbGluZT46
Om9wZXJhdG9yKCkpOgorICAgICAgICAoV2ViQ29yZTo6SGFuZGxlRGVsZXRlcjxQbGF0Zm9ybURl
dmljZT46Om9wZXJhdG9yKCkpOgorICAgICAgICAoV2ViQ29yZTo6SGFuZGxlRGVsZXRlcjxQbGF0
Zm9ybURyYXdhYmxlPjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3JlOjpIYW5kbGVEZWxl
dGVyPFBsYXRmb3JtUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXI+OjpvcGVyYXRvcigpKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhhbmRsZURlbGV0ZXI8UGxhdGZvcm1RdWV1ZT46Om9wZXJhdG9yKCkpOgor
ICAgICAgICAoV2ViQ29yZTo6SGFuZGxlRGVsZXRlcjxQbGF0Zm9ybVJlbmRlclBhc3NFbmNvZGVy
Pjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3JlOjpIYW5kbGVEZWxldGVyPFBsYXRmb3Jt
UmVuZGVyUGlwZWxpbmU+OjpvcGVyYXRvcigpKToKKyAgICAgICAgKFdlYkNvcmU6OkhhbmRsZURl
bGV0ZXI8UGxhdGZvcm1TYW1wbGVyPjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3JlOjpI
YW5kbGVEZWxldGVyPFBsYXRmb3JtU2hhZGVyTW9kdWxlPjo6b3BlcmF0b3IoKSk6CisgICAgICAg
IChXZWJDb3JlOjpIYW5kbGVEZWxldGVyPFBsYXRmb3JtU3dhcExheWVyPjo6b3BlcmF0b3IoKSk6
CisgICAgICAgIChXZWJDb3JlOjpIYW5kbGVEZWxldGVyPFBsYXRmb3JtVGV4dHVyZT46Om9wZXJh
dG9yKCkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVByb2dyYW1t
YWJsZVBhc3NFbmNvZGVyRGF3bi5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9HUFVQbGF0Zm9ybVR5cGVzLmguCisgICAgICAgIChXZWJDb3JlOjpH
UFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlcjo6ZW5kUGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpH
UFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlcjo6c2V0QmluZEdyb3VwKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVRdWV1ZURhd24uY3BwOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVUGxhdGZvcm1UeXBlcy5oLgorICAg
ICAgICAoV2ViQ29yZTo6R1BVUXVldWU6OnRyeUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
UFVRdWV1ZTo6R1BVUXVldWUpOgorICAgICAgICAoV2ViQ29yZTo6R1BVUXVldWU6OnN1Ym1pdCk6
CisgICAgICAgIChXZWJDb3JlOjpHUFVRdWV1ZTo6bGFiZWwgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R1BVUXVldWU6OnNldExhYmVsIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9ncHUvZGF3bi9HUFVSZW5kZXJQYXNzRW5jb2RlckRhd24uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdQVVJlbmRlclBhc3NFbmNvZGVyOjp0cnlDcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R1BVUmVuZGVyUGFzc0VuY29kZXI6OkdQVVJlbmRlclBhc3NFbmNvZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdQVVJlbmRlclBhc3NFbmNvZGVyOjpwbGF0Zm9ybVBhc3NFbmNvZGVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdQVVJlbmRlclBhc3NFbmNvZGVyOjpzZXRQaXBl
bGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0QmxlbmRD
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0Vmlld3Bv
cnQpOgorICAgICAgICAoV2ViQ29yZTo6R1BVUmVuZGVyUGFzc0VuY29kZXI6OnNldFNjaXNzb3JS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdQVVJlbmRlclBhc3NFbmNvZGVyOjpzZXRJbmRleEJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0VmVydGV4
QnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6ZHJhdyk6
CisgICAgICAgIChXZWJDb3JlOjpHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6ZHJhd0luZGV4ZWQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVJlbmRlclBpcGVsaW5lRGF3
bi5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9H
UFVQbGF0Zm9ybVR5cGVzLmguCisgICAgICAgIChXZWJDb3JlOjpHUFVSZW5kZXJQaXBlbGluZTo6
dHJ5Q3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdQVVJlbmRlclBpcGVsaW5lOjpyZWNvbXBp
bGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVNhbXBsZXJEYXdu
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQ
VVBsYXRmb3JtVHlwZXMuaC4KKyAgICAgICAgKFdlYkNvcmU6OkdQVVNhbXBsZXI6OnRyeUNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHUFVTYW1wbGVyOjpHUFVTYW1wbGVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVTaGFkZXJNb2R1bGVEYXduLmNwcDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVBsYXRmb3Jt
VHlwZXMuaC4KKyAgICAgICAgKFdlYkNvcmU6OkdQVVNoYWRlck1vZHVsZTo6dHJ5Q3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdQVVNoYWRlck1vZHVsZTo6R1BVU2hhZGVyTW9kdWxlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVTd2FwQ2hhaW5EYXduLmNwcDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVVBsYXRm
b3JtVHlwZXMuaC4KKyAgICAgICAgKFdlYkNvcmU6OkdQVVN3YXBDaGFpbjo6dHJ5Q3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdQVVN3YXBDaGFpbjo6R1BVU3dhcENoYWluKToKKyAgICAgICAg
KFdlYkNvcmU6OkdQVVN3YXBDaGFpbjo6dHJ5R2V0Q3VycmVudFRleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6R1BVU3dhcENoYWluOjpwcmVzZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdQVVN3
YXBDaGFpbjo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHUFVTd2FwQ2hhaW46OnBsYXRm
b3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQ
VVRleHR1cmVEYXduLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0dQVVBsYXRmb3JtVHlwZXMuaC4KKyAgICAgICAgKFdlYkNvcmU6OkdQVVRleHR1
cmU6OnRyeUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHUFVUZXh0dXJlOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R1BVVGV4dHVyZTo6R1BVVGV4dHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpHUFVUZXh0dXJlOjp0cnlDcmVhdGVEZWZhdWx0VGV4dHVyZVZpZXcpOgorCiAyMDIwLTEw
LTIwICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFtjc3MtZmxleGJveF0gZmxleC1iYXNpcyBub3QgYW5pbWF0YWJsZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtV2luQ2Fpcm8uY21ha2UKaW5kZXggYzRiODZjMTQ4OWFhLi5hNjg5NjQ3N2RlMGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKKysrIGIvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQpAQCAtNCw2ICs0LDEwIEBAIGluY2x1ZGUo
cGxhdGZvcm0vSW1hZ2VEZWNvZGVycy5jbWFrZSkKIGluY2x1ZGUocGxhdGZvcm0vT3BlblNTTC5j
bWFrZSkKIGluY2x1ZGUocGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZSkKIAoraWYgKFVTRV9E
QVdOKQorICAgIGluY2x1ZGUocGxhdGZvcm0vRGF3bi5jbWFrZSkKK2VuZGlmICgpCisKIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCS0lU
X0xJQlJBUklFU19ESVJ9L2luY2x1ZGUiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2xvYWRlci9hcmNo
aXZlL2NmIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGF3bi5jbWFrZSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Rhd24uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwLi5iMjZiNDY1NTExNTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9EYXduLmNtYWtlCkBAIC0wLDAgKzEsMjcgQEAKK2xpc3QoQVBQ
RU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgIiR7V0VCQ09SRV9E
SVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduIgorKQorCitsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVCaW5kR3JvdXBBbGxv
Y2F0b3JEYXduLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVUJpbmRHcm91
cERhd24uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVQmluZEdyb3VwTGF5
b3V0RGF3bi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVCdWZmZXJEYXdu
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVUNvbW1hbmRCdWZmZXJEYXdu
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVUNvbXB1dGVQYXNzRW5jb2Rl
ckRhd24uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVQ29tcHV0ZVBpcGVs
aW5lRGF3bi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVEZXZpY2VEYXdu
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVByb2dyYW1tYWJsZVBhc3NF
bmNvZGVyRGF3bi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVRdWV1ZURh
d24uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVUmVuZGVyUGFzc0VuY29k
ZXJEYXduLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVJlbmRlclBpcGVs
aW5lRGF3bi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVTYW1wbGVyRGF3
bi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVTaGFkZXJNb2R1bGVEYXdu
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVN3YXBDaGFpbkRhd24uY3Bw
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVVGV4dHVyZURhd24uY3BwCispCisK
K2xpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9MSUJSQVJJRVMKKyAgICBEYXduOjpkYXduCisg
ICAgRGF3bjo6bmF0aXZlCispCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvR1BVUGxhdGZvcm1UeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L0dQVVBsYXRmb3JtVHlwZXMuaAppbmRleCAxYjdkYmE1OTZlYzMuLjkyYzc2
NzI2Nzg2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L0dQVVBsYXRmb3JtVHlwZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvR1BVUGxhdGZvcm1UeXBlcy5oCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpZiBVU0UoTUVU
QUwpCiAjaW5jbHVkZSAiR1BVUGxhdGZvcm1UeXBlc01ldGFsLmgiCisjZWxpZiBVU0UoREFXTikK
KyNpbmNsdWRlICJHUFVQbGF0Zm9ybVR5cGVzRGF3bi5oIgogI2Vsc2UKICNlcnJvciAiVW5zdXBw
b3J0ZWQgcGxhdGZvcm0gZm9yIFdlYkdQVSIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVQmluZEdyb3VwQWxsb2NhdG9yRGF3
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVCaW5k
R3JvdXBBbGxvY2F0b3JEYXduLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAuLjdkNmQ1OGQzNWIxNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVUJpbmRHcm91cEFsbG9jYXRvckRhd24uY3BwCkBA
IC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2
ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkdQVUJpbmRHcm91cEFsbG9jYXRvci5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKwor
I2luY2x1ZGUgIkdQVUVycm9yU2NvcGVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVm
PEdQVUJpbmRHcm91cEFsbG9jYXRvcj4gR1BVQmluZEdyb3VwQWxsb2NhdG9yOjpjcmVhdGUoR1BV
RXJyb3JTY29wZXMmIGVycm9ycykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHUFVCaW5k
R3JvdXBBbGxvY2F0b3IoZXJyb3JzKSk7Cit9CisKK0dQVUJpbmRHcm91cEFsbG9jYXRvcjo6R1BV
QmluZEdyb3VwQWxsb2NhdG9yKEdQVUVycm9yU2NvcGVzJiBlcnJvcnMpCisgICAgOiBtX2Vycm9y
U2NvcGVzKG1ha2VSZWYoZXJyb3JzKSkKK3sKK30KKworYm9vbCBHUFVCaW5kR3JvdXBBbGxvY2F0
b3I6OnJlYWxsb2NhdGUoUGxhdGZvcm1HUFVCdWZmZXJPZmZzZXQgbmV3T2Zmc2V0KQoreworICAg
IHJldHVybiBmYWxzZTsKK30KKwordm9pZCBHUFVCaW5kR3JvdXBBbGxvY2F0b3I6OnRyeVJlc2V0
KCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkdQVSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9k
YXduL0dQVUJpbmRHcm91cERhd24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L2Rhd24vR1BVQmluZEdyb3VwRGF3bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi42MDVlNmJjZGMxN2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVCaW5kR3JvdXBEYXduLmNwcApA
QCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkdQVUJpbmRHcm91cC5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIkdQ
VUJpbmRHcm91cEFsbG9jYXRvci5oIgorI2luY2x1ZGUgIkdQVUVycm9yU2NvcGVzLmgiCisjaW5j
bHVkZSA8d2ViZ3B1L3dlYmdwdS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZlB0cjxH
UFVCaW5kR3JvdXA+IEdQVUJpbmRHcm91cDo6dHJ5Q3JlYXRlKGNvbnN0IEdQVUJpbmRHcm91cERl
c2NyaXB0b3ImIGRlc2NyaXB0b3IsIEdQVUJpbmRHcm91cEFsbG9jYXRvciYgYWxsb2NhdG9yKQor
eworICAgIHJldHVybiBudWxscHRyOworfQorCitHUFVCaW5kR3JvdXA6OkdQVUJpbmRHcm91cChH
UFVCaW5kR3JvdXBBbGxvY2F0b3I6OkFyZ3VtZW50QnVmZmVyT2Zmc2V0cyYmIG9mZnNldHMsIEdQ
VUJpbmRHcm91cEFsbG9jYXRvciYgYWxsb2NhdG9yLCBIYXNoU2V0PFJlZjxHUFVCdWZmZXI+PiYm
IGJ1ZmZlcnMsIEhhc2hTZXQ8UmVmPEdQVVRleHR1cmU+PiYmIHRleHR1cmVzKQorICAgIDogbV9h
cmd1bWVudEJ1ZmZlck9mZnNldHMoV1RGTW92ZShvZmZzZXRzKSkKKyAgICAsIG1fYWxsb2NhdG9y
KG1ha2VSZWYoYWxsb2NhdG9yKSkKKyAgICAsIG1fYm91bmRCdWZmZXJzKFdURk1vdmUoYnVmZmVy
cykpCisgICAgLCBtX2JvdW5kVGV4dHVyZXMoV1RGTW92ZSh0ZXh0dXJlcykpCit7Cit9CisKK0dQ
VUJpbmRHcm91cDo6fkdQVUJpbmRHcm91cCgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVCaW5kR3JvdXBMYXlvdXREYXduLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVUJpbmRHcm91cExh
eW91dERhd24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTJl
Y2NlNGU3MzYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L2Rhd24vR1BVQmluZEdyb3VwTGF5b3V0RGF3bi5jcHAKQEAgLTAsMCArMSw0MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHUFVCaW5kR3Jv
dXBMYXlvdXQuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJHUFVEZXZpY2Uu
aCIKKyNpbmNsdWRlIDx3ZWJncHUvd2ViZ3B1Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UmVmUHRyPEdQVUJpbmRHcm91cExheW91dD4gR1BVQmluZEdyb3VwTGF5b3V0Ojp0cnlDcmVhdGUo
Y29uc3QgR1BVRGV2aWNlJiBkZXZpY2UsIGNvbnN0IEdQVUJpbmRHcm91cExheW91dERlc2NyaXB0
b3ImIGRlc2NyaXB0b3IpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVCdWZmZXJEYXduLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVUJ1ZmZlckRhd24u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNGI4ODJhMjI5MWZk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L2Rhd24vR1BVQnVmZmVyRGF3bi5jcHAKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdQVUJ1ZmZlci5oIgorCisjaWYgRU5B
QkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIkdQVUJ1ZmZlckRlc2NyaXB0b3IuaCIKKyNpbmNsdWRl
ICJHUFVEZXZpY2UuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BcnJheUJ1ZmZlci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZlB0cjxHUFVCdWZmZXI+IEdQVUJ1ZmZlcjo6dHJ5
Q3JlYXRlKEdQVURldmljZSYgZGV2aWNlLCBjb25zdCBHUFVCdWZmZXJEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yLCBHUFVCdWZmZXJNYXBwZWRPcHRpb24gaXNNYXBwZWQsIEdQVUVycm9yU2NvcGVzJiBl
cnJvclNjb3BlcykKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworR1BVQnVmZmVyOjpHUFVC
dWZmZXIoUGxhdGZvcm1CdWZmZXJTbWFydFB0ciYmIGJ1ZmZlciwgR1BVRGV2aWNlJiBkZXZpY2Us
IHNpemVfdCBzaXplLCBPcHRpb25TZXQ8R1BVQnVmZmVyVXNhZ2U6OkZsYWdzPiB1c2FnZSwgR1BV
QnVmZmVyTWFwcGVkT3B0aW9uIGlzTWFwcGVkKQorICAgIDogbV9wbGF0Zm9ybUJ1ZmZlcihXVEZN
b3ZlKGJ1ZmZlcikpCisgICAgLCBtX2RldmljZShtYWtlUmVmKGRldmljZSkpCisgICAgLCBtX2J5
dGVMZW5ndGgoc2l6ZSkKKyAgICAsIG1fdXNhZ2UodXNhZ2UpCisgICAgLCBtX2lzTWFwcGVkRnJv
bUNyZWF0aW9uKGlzTWFwcGVkID09IEdQVUJ1ZmZlck1hcHBlZE9wdGlvbjo6SXNNYXBwZWQpCit7
Cit9CisKK0dQVUJ1ZmZlcjo6fkdQVUJ1ZmZlcigpCit7CisgICAgZGVzdHJveShudWxscHRyKTsK
K30KKworYm9vbCBHUFVCdWZmZXI6OmlzUmVhZE9ubHkoKSBjb25zdAoreworICAgIHJldHVybiB0
cnVlOworfQorCitHUFVCdWZmZXI6OlN0YXRlIEdQVUJ1ZmZlcjo6c3RhdGUoKSBjb25zdAorewor
ICAgIHJldHVybiBTdGF0ZTo6VW5tYXBwZWQ7Cit9CisKK0pTQzo6QXJyYXlCdWZmZXIqIEdQVUJ1
ZmZlcjo6bWFwT25DcmVhdGlvbigpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQg
R1BVQnVmZmVyOjpyZWdpc3Rlck1hcHBpbmdDYWxsYmFjayhNYXBwaW5nQ2FsbGJhY2smJiBjYWxs
YmFjaywgYm9vbCBpc1JlYWQsIEdQVUVycm9yU2NvcGVzJiBlcnJvclNjb3BlcykKK3sKK30KKwor
dm9pZCBHUFVCdWZmZXI6OnJ1bk1hcHBpbmdDYWxsYmFjaygpCit7Cit9CisKK0pTQzo6QXJyYXlC
dWZmZXIqIEdQVUJ1ZmZlcjo6c3RhZ2luZ0J1ZmZlckZvclJlYWQoKQoreworICAgIHJldHVybiBu
dWxscHRyOworfQorCitKU0M6OkFycmF5QnVmZmVyKiBHUFVCdWZmZXI6OnN0YWdpbmdCdWZmZXJG
b3JXcml0ZSgpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgR1BVQnVmZmVyOjpj
b3B5U3RhZ2luZ0J1ZmZlclRvR1BVKEdQVUVycm9yU2NvcGVzKiBlcnJvclNjb3BlcykKK3sKK30K
Kwordm9pZCBHUFVCdWZmZXI6OnVubWFwKEdQVUVycm9yU2NvcGVzKiBlcnJvclNjb3BlcykKK3sK
K30KKwordm9pZCBHUFVCdWZmZXI6OmRlc3Ryb3koR1BVRXJyb3JTY29wZXMqIGVycm9yU2NvcGVz
KQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
R1BVKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rh
d24vR1BVQ29tbWFuZEJ1ZmZlckRhd24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L2Rhd24vR1BVQ29tbWFuZEJ1ZmZlckRhd24uY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjdlNjEzOGYwZDM5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVQ29tbWFuZEJ1ZmZl
ckRhd24uY3BwCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29u
eSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkdQVUNvbW1hbmRCdWZmZXIuaCIKKworI2lmIEVOQUJMRShXRUJH
UFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEdQVUNvbW1hbmRCdWZmZXI+IEdQ
VUNvbW1hbmRCdWZmZXI6OnRyeUNyZWF0ZShjb25zdCBHUFVEZXZpY2UmIGRldmljZSkKK3sKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKworR1BVQ29tbWFuZEJ1ZmZlcjo6R1BVQ29tbWFuZEJ1ZmZl
cihQbGF0Zm9ybUNvbW1hbmRCdWZmZXJTbWFydFB0ciYmIGJ1ZmZlcikKKyAgICA6IG1fcGxhdGZv
cm1Db21tYW5kQnVmZmVyKFdURk1vdmUoYnVmZmVyKSkKK3sKK30KKwordm9pZCBHUFVDb21tYW5k
QnVmZmVyOjpjb3B5QnVmZmVyVG9CdWZmZXIoUmVmPEdQVUJ1ZmZlcj4mJiBzcmMsIHVpbnQ2NF90
IHNyY09mZnNldCwgUmVmPEdQVUJ1ZmZlcj4mJiBkc3QsIHVpbnQ2NF90IGRzdE9mZnNldCwgdWlu
dDY0X3Qgc2l6ZSkKK3sKK30KKwordm9pZCBHUFVDb21tYW5kQnVmZmVyOjpjb3B5QnVmZmVyVG9U
ZXh0dXJlKEdQVUJ1ZmZlckNvcHlWaWV3JiYgc3JjQnVmZmVyLCBHUFVUZXh0dXJlQ29weVZpZXcm
JiBkc3RUZXh0dXJlLCBjb25zdCBHUFVFeHRlbnQzRCYgc2l6ZSkKK3sKK30KKwordm9pZCBHUFVD
b21tYW5kQnVmZmVyOjpjb3B5VGV4dHVyZVRvQnVmZmVyKEdQVVRleHR1cmVDb3B5VmlldyYmIHNy
Y1RleHR1cmUsIEdQVUJ1ZmZlckNvcHlWaWV3JiYgZHN0QnVmZmVyLCBjb25zdCBHUFVFeHRlbnQz
RCYgc2l6ZSkKK3sKK30KKwordm9pZCBHUFVDb21tYW5kQnVmZmVyOjpjb3B5VGV4dHVyZVRvVGV4
dHVyZShHUFVUZXh0dXJlQ29weVZpZXcmJiBzcmMsIEdQVVRleHR1cmVDb3B5VmlldyYmIGRzdCwg
Y29uc3QgR1BVRXh0ZW50M0QmIHNpemUpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVDb21wdXRlUGFzc0VuY29kZXJEYXduLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVUNvbXB1dGVQYXNz
RW5jb2RlckRhd24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u
YzFkODJiY2RjYTg3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L2Rhd24vR1BVQ29tcHV0ZVBhc3NFbmNvZGVyRGF3bi5jcHAKQEAgLTAsMCAr
MSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVy
dGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
R1BVQ29tcHV0ZVBhc3NFbmNvZGVyLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1JlZlB0cjxHUFVDb21wdXRlUGFzc0VuY29kZXI+IEdQVUNvbXB1dGVQ
YXNzRW5jb2Rlcjo6dHJ5Q3JlYXRlKFJlZjxHUFVDb21tYW5kQnVmZmVyPiYmIGJ1ZmZlcikKK3sK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworR1BVQ29tcHV0ZVBhc3NFbmNvZGVyOjpHUFVDb21w
dXRlUGFzc0VuY29kZXIoUmVmPEdQVUNvbW1hbmRCdWZmZXI+JiYgYnVmZmVyLCBQbGF0Zm9ybUNv
bXB1dGVQYXNzRW5jb2RlclNtYXJ0UHRyJiYgZW5jb2RlcikKKyAgICA6IEdQVVByb2dyYW1tYWJs
ZVBhc3NFbmNvZGVyKFdURk1vdmUoYnVmZmVyKSkKKyAgICAsIG1fcGxhdGZvcm1Db21wdXRlUGFz
c0VuY29kZXIoV1RGTW92ZShlbmNvZGVyKSkKK3sKK30KKwordm9pZCBHUFVDb21wdXRlUGFzc0Vu
Y29kZXI6OnNldFBpcGVsaW5lKFJlZjxjb25zdCBHUFVDb21wdXRlUGlwZWxpbmU+JiYgcGlwZWxp
bmUpCit7Cit9CisKK3ZvaWQgR1BVQ29tcHV0ZVBhc3NFbmNvZGVyOjpkaXNwYXRjaCh1bnNpZ25l
ZCB4LCB1bnNpZ25lZCB5LCB1bnNpZ25lZCB6KQoreworfQorCitjb25zdCBQbGF0Zm9ybVByb2dy
YW1tYWJsZVBhc3NFbmNvZGVyKiBHUFVDb21wdXRlUGFzc0VuY29kZXI6OnBsYXRmb3JtUGFzc0Vu
Y29kZXIoKSBjb25zdAoreworICAgIHJldHVybiBudWxscHRyOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVQ29tcHV0ZVBpcGVsaW5lRGF3
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVDb21w
dXRlUGlwZWxpbmVEYXduLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAuLmRhYjllYzYzNzQ5NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVUNvbXB1dGVQaXBlbGluZURhd24uY3BwCkBAIC0wLDAg
KzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRl
cnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkdQVUNvbXB1dGVQaXBlbGluZS5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUg
IkdQVVBpcGVsaW5lTGF5b3V0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEdQ
VUNvbXB1dGVQaXBlbGluZT4gR1BVQ29tcHV0ZVBpcGVsaW5lOjp0cnlDcmVhdGUoY29uc3QgR1BV
RGV2aWNlJiBkZXZpY2UsIGNvbnN0IEdQVUNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IsIEdQVUVycm9yU2NvcGVzJiBlcnJvclNjb3BlcykKK3sKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKworR1BVQ29tcHV0ZVBpcGVsaW5lOjp+R1BVQ29tcHV0ZVBpcGVsaW5lKCkgPSBkZWZh
dWx0OworCitib29sIEdQVUNvbXB1dGVQaXBlbGluZTo6cmVjb21waWxlKGNvbnN0IEdQVURldmlj
ZSYgZGV2aWNlLCBHUFVQcm9ncmFtbWFibGVTdGFnZURlc2NyaXB0b3ImJiBjb21wdXRlU3RhZ2Up
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVRGV2aWNlRGF3bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVEZXZpY2VEYXduLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmFkNmI2Y2Y3ZjlmYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVURldmljZURh
d24uY3BwCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJ
bnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkdQVURldmljZS5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitSZWZQdHI8R1BVRGV2aWNlPiBHUFVEZXZpY2U6OnRyeUNyZWF0
ZShjb25zdCBPcHRpb25hbDxHUFVSZXF1ZXN0QWRhcHRlck9wdGlvbnM+JiBvcHRpb25zKQorewor
ICAgIHJldHVybiBudWxscHRyOworfQorCitHUFVEZXZpY2U6OkdQVURldmljZShQbGF0Zm9ybURl
dmljZVNtYXJ0UHRyJiYgZGV2aWNlKQorICAgIDogbV9wbGF0Zm9ybURldmljZShXVEZNb3ZlKGRl
dmljZSkpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvZGF3bi9HUFVQbGF0Zm9ybVR5cGVzRGF3bi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L2Rhd24vR1BVUGxhdGZvcm1UeXBlc0Rhd24uaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmY1YTk5YjQ1OGIyOQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVBsYXRmb3JtVHlw
ZXNEYXduLmgKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29u
eSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d2ViZ3B1L3dlYmdwdS5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIFBsYXRmb3JtR1BVQnVmZmVyT2Zmc2V0ID0gc3RkOjp1
aW50NjRfdDsKKworLy8gRGF3biB0eXBlcwordXNpbmcgUGxhdGZvcm1CdWZmZXIgPSBXR1BVQnVm
ZmVySW1wbDsKK3VzaW5nIFBsYXRmb3JtQ29tbWFuZEJ1ZmZlciA9IFdHUFVDb21tYW5kQnVmZmVy
SW1wbDsKK3VzaW5nIFBsYXRmb3JtQ29tcHV0ZVBhc3NFbmNvZGVyID0gV0dQVUNvbXB1dGVQYXNz
RW5jb2RlckltcGw7Cit1c2luZyBQbGF0Zm9ybUNvbXB1dGVQaXBlbGluZSA9IFdHUFVDb21wdXRl
UGlwZWxpbmVJbXBsOwordXNpbmcgUGxhdGZvcm1EZXZpY2UgPSBXR1BVRGV2aWNlSW1wbDsKK3Vz
aW5nIFBsYXRmb3JtRHJhd2FibGUgPSBXR1BVU3VyZmFjZUltcGw7Cit1c2luZyBQbGF0Zm9ybVBy
b2dyYW1tYWJsZVBhc3NFbmNvZGVyID0gV0dQVUNvbW1hbmRFbmNvZGVySW1wbDsKK3VzaW5nIFBs
YXRmb3JtUXVldWUgPSBXR1BVUXVldWVJbXBsOwordXNpbmcgUGxhdGZvcm1SZW5kZXJQYXNzRW5j
b2RlciA9IFdHUFVSZW5kZXJQYXNzRW5jb2RlckltcGw7Cit1c2luZyBQbGF0Zm9ybVJlbmRlclBp
cGVsaW5lID0gV0dQVVJlbmRlclBpcGVsaW5lSW1wbDsKK3VzaW5nIFBsYXRmb3JtU2FtcGxlciA9
IFdHUFVTYW1wbGVySW1wbDsKK3VzaW5nIFBsYXRmb3JtU2hhZGVyTW9kdWxlID0gV0dQVVNoYWRl
ck1vZHVsZUltcGw7Cit1c2luZyBQbGF0Zm9ybVN3YXBMYXllciA9IFdHUFVTd2FwQ2hhaW5JbXBs
OwordXNpbmcgUGxhdGZvcm1UZXh0dXJlID0gV0dQVVRleHR1cmVJbXBsOworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorc3RydWN0IEhhbmRsZURlbGV0ZXIgeworcHVibGljOgorICAgIHZvaWQgb3Bl
cmF0b3IoKShUKiBoYW5kbGUpID0gZGVsZXRlOworfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IEhh
bmRsZURlbGV0ZXI8UGxhdGZvcm1CdWZmZXI+IHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoUGxhdGZv
cm1CdWZmZXIqIGhhbmRsZSkKKyAgICB7CisgICAgICAgIGlmIChoYW5kbGUpCisgICAgICAgICAg
ICB3Z3B1QnVmZmVyRGVzdHJveShoYW5kbGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4KK3N0
cnVjdCBIYW5kbGVEZWxldGVyPFBsYXRmb3JtQ29tbWFuZEJ1ZmZlcj4geworICAgIHZvaWQgb3Bl
cmF0b3IoKShQbGF0Zm9ybUNvbW1hbmRCdWZmZXIqIGhhbmRsZSkKKyAgICB7CisgICAgICAgIGlm
IChoYW5kbGUpCisgICAgICAgICAgICB3Z3B1Q29tbWFuZEJ1ZmZlclJlbGVhc2UoaGFuZGxlKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgSGFuZGxlRGVsZXRlcjxQbGF0Zm9ybUNv
bXB1dGVQYXNzRW5jb2Rlcj4geworICAgIHZvaWQgb3BlcmF0b3IoKShQbGF0Zm9ybUNvbXB1dGVQ
YXNzRW5jb2RlciogaGFuZGxlKQorICAgIHsKKyAgICAgICAgaWYgKGhhbmRsZSkKKyAgICAgICAg
ICAgIHdncHVDb21wdXRlUGFzc0VuY29kZXJSZWxlYXNlKGhhbmRsZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8Pgorc3RydWN0IEhhbmRsZURlbGV0ZXI8UGxhdGZvcm1Db21wdXRlUGlwZWxpbmU+
IHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoUGxhdGZvcm1Db21wdXRlUGlwZWxpbmUqIGhhbmRsZSkK
KyAgICB7CisgICAgICAgIGlmIChoYW5kbGUpCisgICAgICAgICAgICB3Z3B1Q29tcHV0ZVBpcGVs
aW5lUmVsZWFzZShoYW5kbGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBIYW5k
bGVEZWxldGVyPFBsYXRmb3JtRGV2aWNlPiB7CisgICAgdm9pZCBvcGVyYXRvcigpKFBsYXRmb3Jt
RGV2aWNlKiBoYW5kbGUpCisgICAgeworICAgICAgICBpZiAoaGFuZGxlKQorICAgICAgICAgICAg
d2dwdURldmljZVJlbGVhc2UoaGFuZGxlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1
Y3QgSGFuZGxlRGVsZXRlcjxQbGF0Zm9ybURyYXdhYmxlPiB7CisgICAgdm9pZCBvcGVyYXRvcigp
KFBsYXRmb3JtRHJhd2FibGUqIGhhbmRsZSkKKyAgICB7CisgICAgICAgIGlmIChoYW5kbGUpCisg
ICAgICAgICAgICB3Z3B1U3VyZmFjZVJlbGVhc2UoaGFuZGxlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+CitzdHJ1Y3QgSGFuZGxlRGVsZXRlcjxQbGF0Zm9ybVByb2dyYW1tYWJsZVBhc3NFbmNv
ZGVyPiB7CisgICAgdm9pZCBvcGVyYXRvcigpKFBsYXRmb3JtUHJvZ3JhbW1hYmxlUGFzc0VuY29k
ZXIqIGhhbmRsZSkKKyAgICB7CisgICAgICAgIGlmIChoYW5kbGUpCisgICAgICAgICAgICB3Z3B1
Q29tbWFuZEVuY29kZXJSZWxlYXNlKGhhbmRsZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8Pgor
c3RydWN0IEhhbmRsZURlbGV0ZXI8UGxhdGZvcm1RdWV1ZT4geworICAgIHZvaWQgb3BlcmF0b3Io
KShQbGF0Zm9ybVF1ZXVlKiBoYW5kbGUpCisgICAgeworICAgICAgICBpZiAoaGFuZGxlKQorICAg
ICAgICAgICAgd2dwdVF1ZXVlUmVsZWFzZShoYW5kbGUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PD4KK3N0cnVjdCBIYW5kbGVEZWxldGVyPFBsYXRmb3JtUmVuZGVyUGFzc0VuY29kZXI+IHsKKyAg
ICB2b2lkIG9wZXJhdG9yKCkoUGxhdGZvcm1SZW5kZXJQYXNzRW5jb2RlciogaGFuZGxlKQorICAg
IHsKKyAgICAgICAgaWYgKGhhbmRsZSkKKyAgICAgICAgICAgIHdncHVSZW5kZXJQYXNzRW5jb2Rl
clJlbGVhc2UoaGFuZGxlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgSGFuZGxl
RGVsZXRlcjxQbGF0Zm9ybVJlbmRlclBpcGVsaW5lPiB7CisgICAgdm9pZCBvcGVyYXRvcigpKFBs
YXRmb3JtUmVuZGVyUGlwZWxpbmUqIGhhbmRsZSkKKyAgICB7CisgICAgICAgIGlmIChoYW5kbGUp
CisgICAgICAgICAgICB3Z3B1UmVuZGVyUGlwZWxpbmVSZWxlYXNlKGhhbmRsZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8Pgorc3RydWN0IEhhbmRsZURlbGV0ZXI8UGxhdGZvcm1TYW1wbGVyPiB7
CisgICAgdm9pZCBvcGVyYXRvcigpKFBsYXRmb3JtU2FtcGxlciogaGFuZGxlKQorICAgIHsKKyAg
ICAgICAgaWYgKGhhbmRsZSkKKyAgICAgICAgICAgIHdncHVTYW1wbGVyUmVsZWFzZShoYW5kbGUp
OworICAgIH0KK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBIYW5kbGVEZWxldGVyPFBsYXRmb3Jt
U2hhZGVyTW9kdWxlPiB7CisgICAgdm9pZCBvcGVyYXRvcigpKFBsYXRmb3JtU2hhZGVyTW9kdWxl
KiBoYW5kbGUpCisgICAgeworICAgICAgICBpZiAoaGFuZGxlKQorICAgICAgICAgICAgd2dwdVNo
YWRlck1vZHVsZVJlbGVhc2UoaGFuZGxlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1
Y3QgSGFuZGxlRGVsZXRlcjxQbGF0Zm9ybVN3YXBMYXllcj4geworICAgIHZvaWQgb3BlcmF0b3Io
KShQbGF0Zm9ybVN3YXBMYXllciogaGFuZGxlKQorICAgIHsKKyAgICAgICAgaWYgKGhhbmRsZSkK
KyAgICAgICAgICAgIHdncHVTd2FwQ2hhaW5SZWxlYXNlKGhhbmRsZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8Pgorc3RydWN0IEhhbmRsZURlbGV0ZXI8UGxhdGZvcm1UZXh0dXJlPiB7CisgICAg
dm9pZCBvcGVyYXRvcigpKFBsYXRmb3JtVGV4dHVyZSogaGFuZGxlKQorICAgIHsKKyAgICAgICAg
aWYgKGhhbmRsZSkKKyAgICAgICAgICAgIHdncHVUZXh0dXJlUmVsZWFzZShoYW5kbGUpOworICAg
IH0KK307CisKK3VzaW5nIFBsYXRmb3JtQnVmZmVyU21hcnRQdHIgPSBzdGQ6OnVuaXF1ZV9wdHI8
UGxhdGZvcm1CdWZmZXIsIEhhbmRsZURlbGV0ZXI8UGxhdGZvcm1CdWZmZXI+PjsKK3VzaW5nIFBs
YXRmb3JtQ29tbWFuZEJ1ZmZlclNtYXJ0UHRyID0gc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29t
bWFuZEJ1ZmZlciwgSGFuZGxlRGVsZXRlcjxQbGF0Zm9ybUNvbW1hbmRCdWZmZXI+PjsKK3VzaW5n
IFBsYXRmb3JtQ29tcHV0ZVBhc3NFbmNvZGVyU21hcnRQdHIgPSBzdGQ6OnVuaXF1ZV9wdHI8UGxh
dGZvcm1Db21wdXRlUGFzc0VuY29kZXIsIEhhbmRsZURlbGV0ZXI8UGxhdGZvcm1Db21wdXRlUGFz
c0VuY29kZXI+PjsKK3VzaW5nIFBsYXRmb3JtQ29tcHV0ZVBpcGVsaW5lU21hcnRQdHIgPSBzdGQ6
OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db21wdXRlUGlwZWxpbmUsIEhhbmRsZURlbGV0ZXI8UGxhdGZv
cm1Db21wdXRlUGlwZWxpbmU+PjsKK3VzaW5nIFBsYXRmb3JtRGV2aWNlU21hcnRQdHIgPSBzdGQ6
OnVuaXF1ZV9wdHI8UGxhdGZvcm1EZXZpY2UsIEhhbmRsZURlbGV0ZXI8UGxhdGZvcm1EZXZpY2U+
PjsKK3VzaW5nIFBsYXRmb3JtRHJhd2FibGVTbWFydFB0ciA9IHN0ZDo6dW5pcXVlX3B0cjxQbGF0
Zm9ybURyYXdhYmxlLCBIYW5kbGVEZWxldGVyPFBsYXRmb3JtRHJhd2FibGU+PjsKK3VzaW5nIFBs
YXRmb3JtUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXJTbWFydFB0ciA9IHN0ZDo6dW5pcXVlX3B0cjxQ
bGF0Zm9ybVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyLCBIYW5kbGVEZWxldGVyPFBsYXRmb3JtUHJv
Z3JhbW1hYmxlUGFzc0VuY29kZXI+PjsKK3VzaW5nIFBsYXRmb3JtUXVldWVTbWFydFB0ciA9IHN0
ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVF1ZXVlLCBIYW5kbGVEZWxldGVyPFBsYXRmb3JtUXVldWU+
PjsKK3VzaW5nIFBsYXRmb3JtUmVuZGVyUGFzc0VuY29kZXJTbWFydFB0ciA9IHN0ZDo6dW5pcXVl
X3B0cjxQbGF0Zm9ybVJlbmRlclBhc3NFbmNvZGVyLCBIYW5kbGVEZWxldGVyPFBsYXRmb3JtUmVu
ZGVyUGFzc0VuY29kZXI+PjsKK3VzaW5nIFBsYXRmb3JtUmVuZGVyUGlwZWxpbmVTbWFydFB0ciA9
IHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVJlbmRlclBpcGVsaW5lLCBIYW5kbGVEZWxldGVyPFBs
YXRmb3JtUmVuZGVyUGlwZWxpbmU+PjsKK3VzaW5nIFBsYXRmb3JtU2FtcGxlclNtYXJ0UHRyID0g
c3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtU2FtcGxlciwgSGFuZGxlRGVsZXRlcjxQbGF0Zm9ybVNh
bXBsZXI+PjsKK3VzaW5nIFBsYXRmb3JtU2hhZGVyTW9kdWxlU21hcnRQdHIgPSBzdGQ6OnVuaXF1
ZV9wdHI8UGxhdGZvcm1TaGFkZXJNb2R1bGUsIEhhbmRsZURlbGV0ZXI8UGxhdGZvcm1TaGFkZXJN
b2R1bGU+PjsKK3VzaW5nIFBsYXRmb3JtU3dhcExheWVyU21hcnRQdHIgPSBzdGQ6OnVuaXF1ZV9w
dHI8UGxhdGZvcm1Td2FwTGF5ZXIsIEhhbmRsZURlbGV0ZXI8UGxhdGZvcm1Td2FwTGF5ZXI+PjsK
K3VzaW5nIFBsYXRmb3JtVGV4dHVyZVNtYXJ0UHRyID0gc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3Jt
VGV4dHVyZSwgSGFuZGxlRGVsZXRlcjxQbGF0Zm9ybVRleHR1cmU+PjsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L2Rhd24vR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXJEYXduLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVy
RGF3bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zNGU0OGY3
YjAyNTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvZGF3bi9HUFVQcm9ncmFtbWFibGVQYXNzRW5jb2RlckRhd24uY3BwCkBAIC0wLDAgKzEs
NDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRh
aW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdQ
VVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXI6OmVuZFBh
c3MoKQoreworfQorCit2b2lkIEdQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyOjpzZXRCaW5kR3Jv
dXAodW5zaWduZWQgaW5kZXgsIEdQVUJpbmRHcm91cCYgYmluZEdyb3VwKQoreworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVUXVldWVEYXdu
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVF1ZXVl
RGF3bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45MWY2Yzgw
M2Q5ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvZGF3bi9HUFVRdWV1ZURhd24uY3BwCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdQVVF1ZXVlLmgiCisKKyNpZiBF
TkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiR1BVRGV2aWNlLmgiCisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEdQVVF1ZXVl
PiBHUFVRdWV1ZTo6dHJ5Q3JlYXRlKGNvbnN0IEdQVURldmljZSYgZGV2aWNlKQoreworICAgIHJl
dHVybiBudWxscHRyOworfQorCitHUFVRdWV1ZTo6R1BVUXVldWUoUGxhdGZvcm1RdWV1ZVNtYXJ0
UHRyJiYgcXVldWUsIGNvbnN0IEdQVURldmljZSYgZGV2aWNlKQorICAgIDogbV9wbGF0Zm9ybVF1
ZXVlKFdURk1vdmUocXVldWUpKQorICAgICwgbV9kZXZpY2UobWFrZVdlYWtQdHIoZGV2aWNlKSkK
K3sKK30KKwordm9pZCBHUFVRdWV1ZTo6c3VibWl0KFZlY3RvcjxSZWY8R1BVQ29tbWFuZEJ1ZmZl
cj4+JiYgY29tbWFuZEJ1ZmZlcnMpCit7Cit9CisKK1N0cmluZyBHUFVRdWV1ZTo6bGFiZWwoKSBj
b25zdAoreworICAgIHJldHVybiBlbXB0eVN0cmluZygpOworfQorCit2b2lkIEdQVVF1ZXVlOjpz
ZXRMYWJlbChjb25zdCBTdHJpbmcmIGxhYmVsKSBjb25zdAoreworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVUmVuZGVyUGFzc0VuY29kZXJE
YXduLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVJl
bmRlclBhc3NFbmNvZGVyRGF3bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwLi5lOGQ5YjZkNWUyNDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVSZW5kZXJQYXNzRW5jb2RlckRhd24uY3BwCkBA
IC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2
ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkdQVVJlbmRlclBhc3NFbmNvZGVyLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZlB0cjxHUFVSZW5kZXJQYXNzRW5jb2Rlcj4gR1BVUmVu
ZGVyUGFzc0VuY29kZXI6OnRyeUNyZWF0ZShSZWY8R1BVQ29tbWFuZEJ1ZmZlcj4mJiBidWZmZXIs
IEdQVVJlbmRlclBhc3NEZXNjcmlwdG9yJiYgZGVzY3JpcHRvcikKK3sKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKworR1BVUmVuZGVyUGFzc0VuY29kZXI6OkdQVVJlbmRlclBhc3NFbmNvZGVyKFJl
ZjxHUFVDb21tYW5kQnVmZmVyPiYmIGNvbW1hbmRCdWZmZXIsIFBsYXRmb3JtUmVuZGVyUGFzc0Vu
Y29kZXJTbWFydFB0ciYmIGVuY29kZXIpCisgICAgOiBHUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rl
cihXVEZNb3ZlKGNvbW1hbmRCdWZmZXIpKQorICAgICwgbV9wbGF0Zm9ybVJlbmRlclBhc3NFbmNv
ZGVyKFdURk1vdmUoZW5jb2RlcikpCit7Cit9CisKK2NvbnN0IFBsYXRmb3JtUHJvZ3JhbW1hYmxl
UGFzc0VuY29kZXIqIEdQVVJlbmRlclBhc3NFbmNvZGVyOjpwbGF0Zm9ybVBhc3NFbmNvZGVyKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBHUFVSZW5kZXJQYXNzRW5j
b2Rlcjo6c2V0UGlwZWxpbmUoUmVmPGNvbnN0IEdQVVJlbmRlclBpcGVsaW5lPiYmIHBpcGVsaW5l
KQoreworfQorCit2b2lkIEdQVVJlbmRlclBhc3NFbmNvZGVyOjpzZXRCbGVuZENvbG9yKGNvbnN0
IEdQVUNvbG9yJiBjb2xvcikKK3sKK30KKwordm9pZCBHUFVSZW5kZXJQYXNzRW5jb2Rlcjo6c2V0
Vmlld3BvcnQoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxv
YXQgbWluRGVwdGgsIGZsb2F0IG1heERlcHRoKQoreworfQorCit2b2lkIEdQVVJlbmRlclBhc3NF
bmNvZGVyOjpzZXRTY2lzc29yUmVjdCh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LCB1bnNpZ25lZCB3
aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQoreworfQorCit2b2lkIEdQVVJlbmRlclBhc3NFbmNvZGVy
OjpzZXRJbmRleEJ1ZmZlcihHUFVCdWZmZXImIGJ1ZmZlciwgdWludDY0X3Qgb2Zmc2V0KQorewor
fQorCit2b2lkIEdQVVJlbmRlclBhc3NFbmNvZGVyOjpzZXRWZXJ0ZXhCdWZmZXJzKHVuc2lnbmVk
IGluZGV4LCBjb25zdCBWZWN0b3I8UmVmPEdQVUJ1ZmZlcj4+JiBidWZmZXJzLCBjb25zdCBWZWN0
b3I8dWludDY0X3Q+JiBvZmZzZXRzKQoreworfQorCit2b2lkIEdQVVJlbmRlclBhc3NFbmNvZGVy
OjpkcmF3KHVuc2lnbmVkIHZlcnRleENvdW50LCB1bnNpZ25lZCBpbnN0YW5jZUNvdW50LCB1bnNp
Z25lZCBmaXJzdFZlcnRleCwgdW5zaWduZWQgZmlyc3RJbnN0YW5jZSkKK3sKK30KKwordm9pZCBH
UFVSZW5kZXJQYXNzRW5jb2Rlcjo6ZHJhd0luZGV4ZWQodW5zaWduZWQgaW5kZXhDb3VudCwgdW5z
aWduZWQgaW5zdGFuY2VDb3VudCwgdW5zaWduZWQgZmlyc3RJbmRleCwgaW50IGJhc2VWZXJ0ZXgs
IHVuc2lnbmVkIGZpcnN0SW5zdGFuY2UpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvZGF3bi9HUFVSZW5kZXJQaXBlbGluZURhd24uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVUmVuZGVyUGlwZWxpbmVE
YXduLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjE3YTMxYWI2
NjIwZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9kYXduL0dQVVJlbmRlclBpcGVsaW5lRGF3bi5jcHAKQEAgLTAsMCArMSw0NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5j
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1BVUmVuZGVyUGlw
ZWxpbmUuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UmVmUHRyPEdQVVJlbmRlclBpcGVsaW5lPiBHUFVSZW5kZXJQaXBlbGluZTo6dHJ5Q3JlYXRlKGNv
bnN0IEdQVURldmljZSYgZGV2aWNlLCBjb25zdCBHUFVSZW5kZXJQaXBlbGluZURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IsIEdQVUVycm9yU2NvcGVzJiBlcnJvclNjb3BlcykKK3sKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworR1BVUmVuZGVyUGlwZWxpbmU6On5HUFVSZW5kZXJQaXBlbGluZSgpID0g
ZGVmYXVsdDsKKworYm9vbCBHUFVSZW5kZXJQaXBlbGluZTo6cmVjb21waWxlKGNvbnN0IEdQVURl
dmljZSYgZGV2aWNlLCBHUFVQcm9ncmFtbWFibGVTdGFnZURlc2NyaXB0b3ImJiB2ZXJ0ZXhTdGFn
ZSwgT3B0aW9uYWw8R1BVUHJvZ3JhbW1hYmxlU3RhZ2VEZXNjcmlwdG9yPiYmIGZyYWdtZW50U3Rh
Z2UpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVU2FtcGxlckRhd24uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVU2FtcGxlckRhd24uY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYTNjOWQwYWVmYTQxCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVU2Ft
cGxlckRhd24uY3BwCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
U29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkdQVVNhbXBsZXIuaCIKKworI2lmIEVOQUJMRShXRUJHUFUp
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEdQVVNhbXBsZXI+IEdQVVNhbXBsZXI6
OnRyeUNyZWF0ZShjb25zdCBHUFVEZXZpY2UmIGRldmljZSwgY29uc3QgR1BVU2FtcGxlckRlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0dQVVNhbXBs
ZXI6OkdQVVNhbXBsZXIoUGxhdGZvcm1TYW1wbGVyU21hcnRQdHImJiBzYW1wbGVyKQorICAgIDog
bV9wbGF0Zm9ybVNhbXBsZXIoV1RGTW92ZShzYW1wbGVyKSkKK3sKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVNoYWRlck1vZHVsZURhd24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVU2hhZGVy
TW9kdWxlRGF3bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5l
OWE1MzRhZDVhYTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvZGF3bi9HUFVTaGFkZXJNb2R1bGVEYXduLmNwcApAQCAtMCwwICsxLDQ1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVu
dCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHUFVTaGFk
ZXJNb2R1bGUuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUmVmUHRyPEdQVVNoYWRlck1vZHVsZT4gR1BVU2hhZGVyTW9kdWxlOjp0cnlDcmVhdGUoY29u
c3QgR1BVRGV2aWNlJiBkZXZpY2UsIGNvbnN0IEdQVVNoYWRlck1vZHVsZURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0dQVVNoYWRlck1vZHVsZTo6
R1BVU2hhZGVyTW9kdWxlKFBsYXRmb3JtU2hhZGVyTW9kdWxlU21hcnRQdHImJiBtb2R1bGUpCisg
ICAgOiBtX3BsYXRmb3JtU2hhZGVyTW9kdWxlKFdURk1vdmUobW9kdWxlKSkKK3sKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9kYXduL0dQVVN3YXBDaGFp
bkRhd24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BV
U3dhcENoYWluRGF3bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
Li5mYTVhNzZlMDcwNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvZGF3bi9HUFVTd2FwQ2hhaW5EYXduLmNwcApAQCAtMCwwICsxLDY3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVu
dCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHUFVTd2Fw
Q2hhaW4uaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UmVmUHRyPEdQVVN3YXBDaGFpbj4gR1BVU3dhcENoYWluOjp0cnlDcmVhdGUoY29uc3QgR1BVU3dh
cENoYWluRGVzY3JpcHRvciYgZGVzY3JpcHRvciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorewor
ICAgIHJldHVybiBudWxscHRyOworfQorCitHUFVTd2FwQ2hhaW46OkdQVVN3YXBDaGFpbihQbGF0
Zm9ybVN3YXBMYXllclNtYXJ0UHRyJiYgcGxhdGZvcm1MYXllciwgT3B0aW9uU2V0PEdQVVRleHR1
cmVVc2FnZTo6RmxhZ3M+IHVzYWdlT3B0aW9ucykKKyAgICA6IG1fcGxhdGZvcm1Td2FwTGF5ZXIo
V1RGTW92ZShwbGF0Zm9ybUxheWVyKSkKKyAgICAsIG1fdXNhZ2UodXNhZ2VPcHRpb25zKQorewor
fQorCitSZWZQdHI8R1BVVGV4dHVyZT4gR1BVU3dhcENoYWluOjp0cnlHZXRDdXJyZW50VGV4dHVy
ZSgpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgR1BVU3dhcENoYWluOjpwcmVz
ZW50KCkKK3sKKyAgICBpZiAoIW1fY3VycmVudERyYXdhYmxlKQorICAgICAgICByZXR1cm47Cit9
CisKK3ZvaWQgR1BVU3dhcENoYWluOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sK
KworfQorCitQbGF0Zm9ybUxheWVyKiBHUFVTd2FwQ2hhaW46OnBsYXRmb3JtTGF5ZXIoKSBjb25z
dAoreworICAgIHJldHVybiBudWxscHRyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVVGV4dHVyZURhd24uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVVGV4dHVyZURhd24uY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMmI0NmQyNDE3M2I1Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Rhd24vR1BVVGV4
dHVyZURhd24uY3BwCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
U29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkdQVVRleHR1cmUuaCIKKworI2lmIEVOQUJMRShXRUJHUFUp
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEdQVVRleHR1cmU+IEdQVVRleHR1cmU6
OnRyeUNyZWF0ZShjb25zdCBHUFVEZXZpY2UmIGRldmljZSwgY29uc3QgR1BVVGV4dHVyZURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IsIEdQVUVycm9yU2NvcGVzJiBlcnJvclNjb3BlcykKK3sKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKworUmVmPEdQVVRleHR1cmU+IEdQVVRleHR1cmU6OmNyZWF0ZShQ
bGF0Zm9ybVRleHR1cmVTbWFydFB0ciYmIHRleHR1cmUsIE9wdGlvblNldDxHUFVUZXh0dXJlVXNh
Z2U6OkZsYWdzPiB1c2FnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHUFVUZXh0dXJl
KFdURk1vdmUodGV4dHVyZSksIHVzYWdlKSk7Cit9CisKK0dQVVRleHR1cmU6OkdQVVRleHR1cmUo
UGxhdGZvcm1UZXh0dXJlU21hcnRQdHImJiB0ZXh0dXJlLCBPcHRpb25TZXQ8R1BVVGV4dHVyZVVz
YWdlOjpGbGFncz4gdXNhZ2UpCisgICAgOiBtX3BsYXRmb3JtVGV4dHVyZShXVEZNb3ZlKHRleHR1
cmUpKQorICAgICwgbV91c2FnZSh1c2FnZSkKK3sKK30KKworUmVmUHRyPEdQVVRleHR1cmU+IEdQ
VVRleHR1cmU6OnRyeUNyZWF0ZURlZmF1bHRUZXh0dXJlVmlldygpCit7CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShX
RUJHUFUpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>