<?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>235182</bug_id>
          
          <creation_ts>2022-01-13 07:27:57 -0800</creation_ts>
          <short_desc>[GTK][WPE] Share code between NicosiaGCGLLayer+ANGLE and NicosiaImageBufferPipe</short_desc>
          <delta_ts>2022-01-15 05:38:53 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>ANGLE</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="Chris Lord">clord</reporter>
          <assigned_to name="Chris Lord">clord</assigned_to>
          <cc>alex</cc>
    
    <cc>annulen</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kbr</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>pnormand</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1830539</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2022-01-13 07:27:57 -0800</bug_when>
    <thetext>Currently, these two classes are doing basically the same thing when ANGLE is enabled. I think we should remove the ANGLE-specific code from NicosiaGCGLLayer and that NicosiaGCGLANGLELayer should be a sub-class of NicosiaImageBufferPipe so that they can share the code and OffscreenCanvas can benefit when we get copy-less buffer transfers for WebGL+ANGLE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830541</commentid>
    <comment_count>1</comment_count>
      <attachid>449058</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2022-01-13 07:45:07 -0800</bug_when>
    <thetext>Created attachment 449058
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830542</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2022-01-13 07:47:58 -0800</bug_when>
    <thetext>Perhaps it&apos;s coincidence, but this also seems to have fixed some flickering I was seeing prior to this patch - I don&apos;t believe this works in any significantly different way to before though, so maybe just a driver bug exposed by timing differences or something...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830864</commentid>
    <comment_count>3</comment_count>
      <attachid>449058</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2022-01-14 04:02:51 -0800</bug_when>
    <thetext>Comment on attachment 449058
Patch

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

Great patch! Very helpful for the next refactorings.

&gt; Source/WebCore/platform/graphics/angle/GraphicsContextGLANGLE.h:45
&gt; -class GCGLANGLELayer;
&gt; +class GCGLANGLEPipe;

Can we ifdef USE(ANGLE) like we do in the attribute definition?

&gt; Source/WebCore/platform/graphics/nicosia/texmap/NicosiaGCGLANGLEPipe.h:51
&gt; +class GCGLANGLEPipeSource;

Leftover?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830869</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2022-01-14 04:16:50 -0800</bug_when>
    <thetext>Thanks for the review!

(In reply to Alejandro G. Castro from comment #3)
&gt; Comment on attachment 449058 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=449058&amp;action=review
&gt; 
&gt; Great patch! Very helpful for the next refactorings.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/angle/GraphicsContextGLANGLE.h:45
&gt; &gt; -class GCGLANGLELayer;
&gt; &gt; +class GCGLANGLEPipe;
&gt; 
&gt; Can we ifdef USE(ANGLE) like we do in the attribute definition?

I think it&apos;s convention to just declare the class regardless (at least in a previous patch where I did what you&apos;re suggesting, a review comment was to remove the #ifdef :))

&gt; &gt; Source/WebCore/platform/graphics/nicosia/texmap/NicosiaGCGLANGLEPipe.h:51
&gt; &gt; +class GCGLANGLEPipeSource;
&gt; 
&gt; Leftover?

Nice catch, thanks :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830870</commentid>
    <comment_count>5</comment_count>
      <attachid>449159</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2022-01-14 04:18:40 -0800</bug_when>
    <thetext>Created attachment 449159
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830877</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-01-14 04:56:15 -0800</bug_when>
    <thetext>Committed r288014 (246040@main): &lt;https://commits.webkit.org/246040@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 449159.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830878</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-01-14 04:57:19 -0800</bug_when>
    <thetext>&lt;rdar://problem/87596622&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831180</commentid>
    <comment_count>8</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-01-15 05:26:44 -0800</bug_when>
    <thetext>This broke clean WPE builds, both clang and gcc. There&apos;s a bunch of errors, here&apos;s an extract:

1228/7908] Building CXX object Source/ThirdParty/ANGLE/CMakeFiles/ANGLE.dir/src/common/PackedEGLEnums_autogen.cpp.o
FAILED: Source/ThirdParty/ANGLE/CMakeFiles/ANGLE.dir/src/common/PackedEGLEnums_autogen.cpp.o 
/usr/bin/sccache /usr/bin/c++ -DANGLE_ENABLE_ESSL -DANGLE_ENABLE_GLSL -DANGLE_PLATFORM_LINUX -DBUILDING_WITH_CMAKE=1 -DBUILDING_WPE__=1 -DBWRAP_EXECUTABLE=\&quot;/usr/bin/bwrap\&quot; -DDBUS_PROXY_EXECUTABLE=\&quot;/usr/bin/xdg-dbus-proxy\&quot; -DEGL_EGL_PROTOTYPES=0 -DGETTEXT_PACKAGE=\&quot;WPE\&quot; -DGL_GLES_PROTOTYPES=0 -DHAVE_CONFIG_H=1 -DJSC_GLIB_API_ENABLED -DLIBANGLE_IMPLEMENTATION -DPAS_BMALLOC=1 -I/app/webkit/Source/ThirdParty/ANGLE/include -I/app/webkit/Source/ThirdParty/ANGLE/include/KHR -I/app/webkit/Source/ThirdParty/ANGLE/src -I/app/webkit/Source/ThirdParty/ANGLE/src/common/third_party/base -I/app/webkit/Source/ThirdParty/ANGLE/third_party/zlib/google -I/app/webkit/WebKitBuild/Release/Source/ThirdParty/ANGLE/include -fdiagnostics-color=always -Wextra -Wall -Wno-expansion-to-defined -Wno-stringop-overread -Wno-nonnull -Wno-array-bounds -Wno-noexcept-type -Wno-psabi -Wno-misleading-indentation -Wno-maybe-uninitialized -Wwrite-strings -Wundef -Wpointer-arith -Wmissing-format-attribute -Wformat-security -Wcast-align -Wno-tautological-compare  -fno-strict-aliasing -fno-exceptions -fno-rtti -O3 -DNDEBUG -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -Wno-cast-align -Wno-extra -Wno-suggest-attribute=format -Wno-undef -Wno-unused-parameter -Wno-return-type -Wno-comment -std=c++20 -MD -MT Source/ThirdParty/ANGLE/CMakeFiles/ANGLE.dir/src/common/PackedEGLEnums_autogen.cpp.o -MF Source/ThirdParty/ANGLE/CMakeFiles/ANGLE.dir/src/common/PackedEGLEnums_autogen.cpp.o.d -o Source/ThirdParty/ANGLE/CMakeFiles/ANGLE.dir/src/common/PackedEGLEnums_autogen.cpp.o -c /app/webkit/Source/ThirdParty/ANGLE/src/common/PackedEGLEnums_autogen.cpp
[1230/7908] Building CXX object Source/ThirdParty/ANGLE/CMakeFiles/ANGLE.dir/src/common/PackedEnums.cpp.o
FAILED: Source/ThirdParty/ANGLE/CMakeFiles/ANGLE.dir/src/common/PackedEnums.cpp.o 
/usr/bin/sccache /usr/bin/c++ -DANGLE_ENABLE_ESSL -DANGLE_ENABLE_GLSL -DANGLE_PLATFORM_LINUX -DBUILDING_WITH_CMAKE=1 -DBUILDING_WPE__=1 -DBWRAP_EXECUTABLE=\&quot;/usr/bin/bwrap\&quot; -DDBUS_PROXY_EXECUTABLE=\&quot;/usr/bin/xdg-dbus-proxy\&quot; -DEGL_EGL_PROTOTYPES=0 -DGETTEXT_PACKAGE=\&quot;WPE\&quot; -DGL_GLES_PROTOTYPES=0 -DHAVE_CONFIG_H=1 -DJSC_GLIB_API_ENABLED -DLIBANGLE_IMPLEMENTATION -DPAS_BMALLOC=1 -I/app/webkit/Source/ThirdParty/ANGLE/include -I/app/webkit/Source/ThirdParty/ANGLE/include/KHR -I/app/webkit/Source/ThirdParty/ANGLE/src -I/app/webkit/Source/ThirdParty/ANGLE/src/common/third_party/base -I/app/webkit/Source/ThirdParty/ANGLE/third_party/zlib/google -I/app/webkit/WebKitBuild/Release/Source/ThirdParty/ANGLE/include -fdiagnostics-color=always -Wextra -Wall -Wno-expansion-to-defined -Wno-stringop-overread -Wno-nonnull -Wno-array-bounds -Wno-noexcept-type -Wno-psabi -Wno-misleading-indentation -Wno-maybe-uninitialized -Wwrite-strings -Wundef -Wpointer-arith -Wmissing-format-attribute -Wformat-security -Wcast-align -Wno-tautological-compare  -fno-strict-aliasing -fno-exceptions -fno-rtti -O3 -DNDEBUG -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -Wno-cast-align -Wno-extra -Wno-suggest-attribute=format -Wno-undef -Wno-unused-parameter -Wno-return-type -Wno-comment -std=c++20 -MD -MT Source/ThirdParty/ANGLE/CMakeFiles/ANGLE.dir/src/common/PackedEnums.cpp.o -MF Source/ThirdParty/ANGLE/CMakeFiles/ANGLE.dir/src/common/PackedEnums.cpp.o.d -o Source/ThirdParty/ANGLE/CMakeFiles/ANGLE.dir/src/common/PackedEnums.cpp.o -c /app/webkit/Source/ThirdParty/ANGLE/src/common/PackedEnums.cpp
[1231/7908] Building CXX object Source/ThirdParty/ANGLE/CMakeFiles/ANGLE.dir/src/compiler/translator/tree_ops/gl/UseInterfaceBlockFields.cpp.o
FAILED: Source/ThirdParty/ANGLE/CMakeFiles/ANGLE.dir/src/compiler/translator/tree_ops/gl/UseInterfaceBlockFields.cpp.o 
/usr/bin/sccache /usr/bin/c++ -DANGLE_ENABLE_ESSL -DANGLE_ENABLE_GLSL -DANGLE_PLATFORM_LINUX -DBUILDING_WITH_CMAKE=1 -DBUILDING_WPE__=1 -DBWRAP_EXECUTABLE=\&quot;/usr/bin/bwrap\&quot; -DDBUS_PROXY_EXECUTABLE=\&quot;/usr/bin/xdg-dbus-proxy\&quot; -DEGL_EGL_PROTOTYPES=0 -DGETTEXT_PACKAGE=\&quot;WPE\&quot; -DGL_GLES_PROTOTYPES=0 -DHAVE_CONFIG_H=1 -DJSC_GLIB_API_ENABLED -DLIBANGLE_IMPLEMENTATION -DPAS_BMALLOC=1 -I/app/webkit/Source/ThirdParty/ANGLE/include -I/app/webkit/Source/ThirdParty/ANGLE/include/KHR -I/app/webkit/Source/ThirdParty/ANGLE/src -I/app/webkit/Source/ThirdParty/ANGLE/src/common/third_party/base -I/app/webkit/Source/ThirdParty/ANGLE/third_party/zlib/google -I/app/webkit/WebKitBuild/Release/Source/ThirdParty/ANGLE/include -fdiagnostics-color=always -Wextra -Wall -Wno-expansion-to-defined -Wno-stringop-overread -Wno-nonnull -Wno-array-bounds -Wno-noexcept-type -Wno-psabi -Wno-misleading-indentation -Wno-maybe-uninitialized -Wwrite-strings -Wundef -Wpointer-arith -Wmissing-format-attribute -Wformat-security -Wcast-align -Wno-tautological-compare  -fno-strict-aliasing -fno-exceptions -fno-rtti -O3 -DNDEBUG -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -Wno-cast-align -Wno-extra -Wno-suggest-attribute=format -Wno-undef -Wno-unused-parameter -Wno-return-type -Wno-comment -std=c++20 -MD -MT Source/ThirdParty/ANGLE/CMakeFiles/ANGLE.dir/src/compiler/translator/tree_ops/gl/UseInterfaceBlockFields.cpp.o -MF Source/ThirdParty/ANGLE/CMakeFiles/ANGLE.dir/src/compiler/translator/tree_ops/gl/UseInterfaceBlockFields.cpp.o.d -o Source/ThirdParty/ANGLE/CMakeFiles/ANGLE.dir/src/compiler/translator/tree_ops/gl/UseInterfaceBlockFields.cpp.o -c /app/webkit/Source/ThirdParty/ANGLE/src/compiler/translator/tree_ops/gl/UseInterfaceBlockFields.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831187</commentid>
    <comment_count>9</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-01-15 05:38:53 -0800</bug_when>
    <thetext>Ah sorry, this is happening elsewhere in my build, something related with an empty llint offsets headers...</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449058</attachid>
            <date>2022-01-13 07:45:07 -0800</date>
            <delta_ts>2022-01-14 04:18:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235182-20220113154506.patch</filename>
            <type>text/plain</type>
            <size>44791</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3ODM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDQxYjYyMGI4NGNhY2Fi
MDU1NTExNGNhYmI4YWVjNTU0MmYyNDNiMy4uYTgxNjBmYjEyZWU4ZDkwNTA3YzFlOTZlZjZmZGMw
Nzk0ZDdiYzVhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDIyLTAxLTEzICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIFNoYXJlIGNv
ZGUgYmV0d2VlbiBOaWNvc2lhR0NHTExheWVyK0FOR0xFIGFuZCBOaWNvc2lhSW1hZ2VCdWZmZXJQ
aXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzUx
ODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5h
bWUgTmljb3NpYUdDR0xBTkdMRUxheWVyIHRvIE5pY29zaWFHQ0dMQU5HTEVQaXBlIGFuZCBoYXZl
IGl0CisgICAgICAgIGluaGVyaXQgZnJvbSBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlIGluc3RlYWQg
b2YgTmljb3NpYUdDR0xMYXllci4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGNoYW5nZSBp
biBiZWhhdmlvdXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFJbWFnZUJ1ZmZl
clBpcGUuY3BwOgorICAgICAgICAoTmljb3NpYTo6Tmljb3NpYUltYWdlQnVmZmVyUGlwZTo6Tmlj
b3NpYUltYWdlQnVmZmVyUGlwZSk6CisgICAgICAgIChOaWNvc2lhOjpOaWNvc2lhSW1hZ2VCdWZm
ZXJQaXBlOjpzb3VyY2UgY29uc3QpOgorICAgICAgICAoTmljb3NpYTo6Tmljb3NpYUltYWdlQnVm
ZmVyUGlwZTo6bGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZSk6CisgICAgICAgICgpOiBEZWxl
dGVkLgorICAgICAgICAoTmljb3NpYTo6V2ViQ29yZTo6Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNv
dXJjZTo6Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZSk6IERlbGV0ZWQuCisgICAgICAgIChO
aWNvc2lhOjpXZWJDb3JlOjpOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlOjp+Tmljb3NpYUlt
YWdlQnVmZmVyUGlwZVNvdXJjZSk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpXZWJDb3Jl
OjpOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlOjpoYW5kbGUpOiBEZWxldGVkLgorICAgICAg
ICAoTmljb3NpYTo6V2ViQ29yZTo6Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZTo6c3dhcEJ1
ZmZlcnNJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS9OaWNvc2lhSW1hZ2VCdWZmZXJQaXBlLmg6IEFkZGVkLgorICAgICAgICAoTmljb3NpYTo6
Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZTo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xBTkdMRVBp
cGUuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS90ZXhtYXAvTmljb3NpYUdDR0xBTkdMRUxheWVyLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xFUGlwZS5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmlj
b3NpYUdDR0xBTkdMRUxheWVyLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3Np
YS90ZXhtYXAvTmljb3NpYUdDR0xMYXllci5jcHA6CisgICAgICAgIChOaWNvc2lhOjpHQ0dMTGF5
ZXI6OkdDR0xMYXllcik6CisgICAgICAgIChOaWNvc2lhOjpHQ0dMTGF5ZXI6OnN3YXBCdWZmZXJz
SWZOZWVkZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05p
Y29zaWFHQ0dMTGF5ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3Jh
cGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVy
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xU
ZXh0dXJlTWFwcGVyQU5HTEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTEFOR0xFOjpwbGF0Zm9ybURpc3BsYXkgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1Db25maWcgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bWFrZUNvbnRleHRDdXJyZW50
KToKKwogMjAyMi0wMS0xMiAgQ2hyaXMgTG9yZCAgPGNsb3JkQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgW1dQRV0gRml4IGJ1aWxkaW5nIFdlYlhSIHdpdGggQU5HTEUgZW5hYmxlZApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKaW5kZXggNDI0YTZlM2M4MmU0ZTFh
N2QxNDUzYWRhYWNjNTU3MzZlOWUyZmQxZC4uNmM0NjdmMmZiNTY4NDgxYWVmMzZhZTViZTAyNGU0
ZjhkNTlhNzhhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1h
cHBlci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNt
YWtlCkBAIC0xMjYsNiArMTI2LDYgQEAgZW5kaWYgKCkKIAogaWYgKFVTRV9BTkdMRV9XRUJHTCkK
ICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xBTkdMRUxheWVyLmNwcAorICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xFUGlwZS5jcHAKICAg
ICApCiBlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oCmluZGV4IGY4OWI5OWUx
M2NiMWVjNDkxY2Y3ZjFkMWQwYjBlYzkzNjBhNjRhNjEuLmNhODcyYWU1OGNkYTUxYTE2NTkyMWJj
NTA5MmI1N2MyMTAzMzhkNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmgKQEAgLTQy
LDcgKzQyLDcgQEAKIAogI2lmIFVTRShOSUNPU0lBKQogbmFtZXNwYWNlIE5pY29zaWEgewotY2xh
c3MgR0NHTEFOR0xFTGF5ZXI7CitjbGFzcyBHQ0dMQU5HTEVQaXBlOwogY2xhc3MgR0NHTExheWVy
OwogfQogI2VuZGlmCkBAIC00NTAsNyArNDUwLDExIEBAIHByb3RlY3RlZDoKICAgICBHQ0dMdWlu
dCBtX2ludGVybWVkaWF0ZVRleHR1cmUgeyAwIH07CiAjZW5kaWYKICNpZiBVU0UoTklDT1NJQSkK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8Tmljb3NpYTo6R0NHTEFOR0xFTGF5ZXI+IG1fbmljb3NpYUxh
eWVyOworI2lmIFVTRShBTkdMRSkKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Tmljb3NpYTo6R0NHTEFO
R0xFUGlwZT4gbV9uaWNvc2lhUGlwZTsKKyNlbHNlCisgICAgc3RkOjp1bmlxdWVfcHRyPE5pY29z
aWE6OkdDR0xMYXllcj4gbV9uaWNvc2lhTGF5ZXI7CisjZW5kaWYKICNlbGlmIFVTRShURVhUVVJF
X01BUFBFUikKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxh
eWVyPiBtX3RleG1hcExheWVyOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFJbWFnZUJ1ZmZlclBpcGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhSW1hZ2VCdWZmZXJQ
aXBlLmNwcAppbmRleCAyZjc0ZDBlYmFkYjdkODJlOTIwZDQyOGNkOWUxOWNmNmRkZTM2MDRmLi42
Mzg0NjNmYjNmMjVlNWJkYmRhZjk3ODllNGFmOTA3MTRhNjU2OTYxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFJbWFnZUJ1ZmZlclBp
cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmlj
b3NpYUltYWdlQnVmZmVyUGlwZS5jcHAKQEAgLTI1LDExICsyNSwxMCBAQAogICovCiAKICNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIk5pY29z
aWFJbWFnZUJ1ZmZlclBpcGUuaCIKIAotI2luY2x1ZGUgIkltYWdlQnVmZmVyUGlwZS5oIgorI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIKLSNpbmNsdWRl
ICJOaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKICNpbmNsdWRlICJOaWNv
c2lhUGxhdGZvcm1MYXllci5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
QnVmZmVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5oIgpA
QCAtNDQsNjAgKzQzLDYgQEAgbmFtZXNwYWNlIE5pY29zaWEgewogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIAotbmFtZXNwYWNlIHsKLWNsYXNzIE5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3Vy
Y2UgZmluYWwgOiBwdWJsaWMgSW1hZ2VCdWZmZXJQaXBlOjpTb3VyY2UsIHB1YmxpYyBDb250ZW50
TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Q2xpZW50IHsKLXB1YmxpYzoKLSAgICBOaWNvc2lhSW1h
Z2VCdWZmZXJQaXBlU291cmNlKCk7Ci0gICAgdmlydHVhbCB+Tmljb3NpYUltYWdlQnVmZmVyUGlw
ZVNvdXJjZSgpOwotCi0gICAgLy8gSW1hZ2VCdWZmZXJQaXBlOjpTb3VyY2Ugb3ZlcnJpZGVzLgot
ICAgIHZvaWQgaGFuZGxlKFJlZlB0cjxJbWFnZUJ1ZmZlcj4mJikgZmluYWw7Ci0KLSAgICBDb250
ZW50TGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX25pY29zaWFMYXllci5n
ZXQoKTsgfQotcHJpdmF0ZToKLSAgICAvLyBDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6
Q2xpZW50IG92ZXJyaWRlcy4KLSAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlk
ZTsKLQotICAgIFJlZlB0cjxDb250ZW50TGF5ZXI+IG1fbmljb3NpYUxheWVyOwotCi0gICAgbXV0
YWJsZSBMb2NrIG1faW1hZ2VCdWZmZXJMb2NrOwotICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9p
bWFnZUJ1ZmZlcjsKLX07Ci0KLWNsYXNzIFBpcGVTb3VyY2VEaXNwbGF5RGVsZWdhdGUgZmluYWwg
OiBwdWJsaWMgR3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPFBpcGVTb3VyY2VEaXNwbGF5RGVsZWdhdGU+IGNyZWF0ZShSZWZQdHI8
Q29udGVudExheWVyPiYmIG5pY29zaWFMYXllcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFBpcGVTb3VyY2VEaXNwbGF5RGVsZWdhdGUoV1RGTW92ZShuaWNvc2lhTGF5ZXIp
KSk7Ci0gICAgfQotCi0gICAgLy8gR3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRl
IG92ZXJyaWRlcy4KLSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9uaWNvc2lhTGF5ZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUGlwZVNv
dXJjZURpc3BsYXlEZWxlZ2F0ZShSZWZQdHI8Q29udGVudExheWVyPiYmIG5pY29zaWFMYXllcikK
LSAgICAgICAgOiBtX25pY29zaWFMYXllcihXVEZNb3ZlKG5pY29zaWFMYXllcikpCi0gICAgewot
ICAgIH0KLQotICAgIFJlZlB0cjxDb250ZW50TGF5ZXI+IG1fbmljb3NpYUxheWVyOwotfTsKLQot
Y2xhc3MgTmljb3NpYUltYWdlQnVmZmVyUGlwZSBmaW5hbCA6IHB1YmxpYyBJbWFnZUJ1ZmZlclBp
cGUgewotcHVibGljOgotICAgIE5pY29zaWFJbWFnZUJ1ZmZlclBpcGUoKQotICAgICAgICA6IG1f
c291cmNlKGFkb3B0UmVmKCpuZXcgTmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZSkpCi0gICAg
ICAgICwgbV9sYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlKFBpcGVTb3VyY2VEaXNwbGF5RGVs
ZWdhdGU6OmNyZWF0ZShtX3NvdXJjZS0+cGxhdGZvcm1MYXllcigpKSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgLy8gSW1hZ2VCdWZmZXJQaXBlIG92ZXJyaWRlcy4KLSAgICBSZWZQdHI8SW1hZ2VCdWZm
ZXJQaXBlOjpTb3VyY2U+IHNvdXJjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc291cmNlLnB0
cigpOyB9Ci0gICAgUmVmUHRyPEdyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZT4g
bGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZSgpIGZpbmFsIHsgcmV0dXJuIG1fbGF5ZXJDb250
ZW50c0Rpc3BsYXlEZWxlZ2F0ZS5wdHIoKTsgfQotcHJpdmF0ZToKLSAgICBSZWY8Tmljb3NpYUlt
YWdlQnVmZmVyUGlwZVNvdXJjZT4gbV9zb3VyY2U7Ci0gICAgUmVmPFBpcGVTb3VyY2VEaXNwbGF5
RGVsZWdhdGU+IG1fbGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZTsKLX07Ci0KIE5pY29zaWFJ
bWFnZUJ1ZmZlclBpcGVTb3VyY2U6Ok5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3VyY2UoKQogewog
ICAgIG1fbmljb3NpYUxheWVyID0gTmljb3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUoTmljb3Np
YTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKTsK
QEAgLTE2Myw2ICsxMDgsMjAgQEAgdm9pZCBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlOjpz
d2FwQnVmZmVyc0lmTmVlZGVkKCkKIHsKIH0KIAorTmljb3NpYUltYWdlQnVmZmVyUGlwZTo6Tmlj
b3NpYUltYWdlQnVmZmVyUGlwZSgpCisgICAgOiBtX3NvdXJjZShhZG9wdFJlZigqbmV3IE5pY29z
aWFJbWFnZUJ1ZmZlclBpcGVTb3VyY2UpKQorICAgICwgbV9sYXllckNvbnRlbnRzRGlzcGxheURl
bGVnYXRlKE5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3VyY2VEaXNwbGF5RGVsZWdhdGU6OmNyZWF0
ZShtX3NvdXJjZS0+cGxhdGZvcm1MYXllcigpKSkKK3sKK30KKworUmVmUHRyPEltYWdlQnVmZmVy
UGlwZTo6U291cmNlPiBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlOjpzb3VyY2UoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3NvdXJjZS5wdHIoKTsKK30KKworUmVmUHRyPEdyYXBoaWNzTGF5ZXJDb250
ZW50c0Rpc3BsYXlEZWxlZ2F0ZT4gTmljb3NpYUltYWdlQnVmZmVyUGlwZTo6bGF5ZXJDb250ZW50
c0Rpc3BsYXlEZWxlZ2F0ZSgpCit7CisgICAgcmV0dXJuIG1fbGF5ZXJDb250ZW50c0Rpc3BsYXlE
ZWxlZ2F0ZS5wdHIoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgTmljb3NpYQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhSW1hZ2VCdWZm
ZXJQaXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29z
aWFJbWFnZUJ1ZmZlclBpcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wODA1YzQ3ODk0ODVhYWE4MzAyYzEwYTEy
MjdkNTYxMmRmOWE3NGExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhSW1hZ2VCdWZmZXJQaXBlLmgKQEAgLTAsMCArMSw4
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCwyMDIyIElnYWxpYSBTLkwKKyAqIENvcHly
aWdodCAoQykgMjAyMCwyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclBpcGUuaCIKKyNpbmNsdWRlICJOaWNvc2lhQ29u
dGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKKworbmFtZXNwYWNlIE5pY29zaWEgeworCitj
bGFzcyBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlRGlzcGxheURlbGVnYXRlIGZpbmFsIDog
cHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlRGlzcGxh
eURlbGVnYXRlPiBjcmVhdGUoUmVmUHRyPENvbnRlbnRMYXllcj4mJiBuaWNvc2lhTGF5ZXIpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBl
U291cmNlRGlzcGxheURlbGVnYXRlKFdURk1vdmUobmljb3NpYUxheWVyKSkpOworICAgIH0KKwor
ICAgIC8vIEdyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZSBvdmVycmlkZXMuCisg
ICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
bmljb3NpYUxheWVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIE5pY29zaWFJbWFnZUJ1ZmZlclBp
cGVTb3VyY2VEaXNwbGF5RGVsZWdhdGUoUmVmUHRyPENvbnRlbnRMYXllcj4mJiBuaWNvc2lhTGF5
ZXIpCisgICAgICAgIDogbV9uaWNvc2lhTGF5ZXIoV1RGTW92ZShuaWNvc2lhTGF5ZXIpKQorICAg
IHsKKyAgICB9CisKKyAgICBSZWZQdHI8Q29udGVudExheWVyPiBtX25pY29zaWFMYXllcjsKK307
CisKK2NsYXNzIE5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3VyY2UgOiBwdWJsaWMgV2ViQ29yZTo6
SW1hZ2VCdWZmZXJQaXBlOjpTb3VyY2UsIHB1YmxpYyBDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVy
SW1wbDo6Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNl
KCk7CisgICAgdmlydHVhbCB+Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZSgpOworCisgICAg
Ly8gSW1hZ2VCdWZmZXJQaXBlOjpTb3VyY2Ugb3ZlcnJpZGVzLgorICAgIHZvaWQgaGFuZGxlKFJl
ZlB0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4mJikgZmluYWw7CisKKyAgICAvLyBDb250ZW50TGF5
ZXJUZXh0dXJlTWFwcGVySW1wbDo6Q2xpZW50IG92ZXJyaWRlcy4KKyAgICB2b2lkIHN3YXBCdWZm
ZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKKworICAgIENvbnRlbnRMYXllciogcGxhdGZvcm1MYXll
cigpIGNvbnN0IHsgcmV0dXJuIG1fbmljb3NpYUxheWVyLmdldCgpOyB9Citwcml2YXRlOgorICAg
IFJlZlB0cjxDb250ZW50TGF5ZXI+IG1fbmljb3NpYUxheWVyOworCisgICAgbXV0YWJsZSBMb2Nr
IG1faW1hZ2VCdWZmZXJMb2NrOworICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gbV9p
bWFnZUJ1ZmZlcjsKK307CisKK2NsYXNzIE5pY29zaWFJbWFnZUJ1ZmZlclBpcGUgZmluYWwgOiBw
dWJsaWMgV2ViQ29yZTo6SW1hZ2VCdWZmZXJQaXBlIHsKK3B1YmxpYzoKKyAgICBOaWNvc2lhSW1h
Z2VCdWZmZXJQaXBlKCk7CisKKyAgICAvLyBJbWFnZUJ1ZmZlclBpcGUgb3ZlcnJpZGVzLgorICAg
IFJlZlB0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlclBpcGU6OlNvdXJjZT4gc291cmNlKCkgY29uc3Qg
ZmluYWw7CisgICAgUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlE
ZWxlZ2F0ZT4gbGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZSgpIGZpbmFsOworcHJpdmF0ZToK
KyAgICBSZWY8Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZT4gbV9zb3VyY2U7CisgICAgUmVm
PE5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3VyY2VEaXNwbGF5RGVsZWdhdGU+IG1fbGF5ZXJDb250
ZW50c0Rpc3BsYXlEZWxlZ2F0ZTsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNv
c2lhR0NHTEFOR0xFTGF5ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmZm
NmU0ZjBiY2Y1YWU5MzY1Njg5NjhkYzMzYTQwMDhmMTdlYmQzLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyMTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2lj
YWwgR3JvdXAgQi5WLgotICogQ29weXJpZ2h0IChDKSAyMDE4LCAyMDE5IElnYWxpYSBTLkwuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAqICAgIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiTmljb3NpYUdDR0xBTkdMRUxheWVyLmgiCi0KLSNpZiBVU0UoTklDT1NJQSkgJiYgVVNF
KFRFWFRVUkVfTUFQUEVSKQotCi0jaW5jbHVkZSAiQU5HTEVIZWFkZXJzLmgiCi0jaW5jbHVkZSAi
TG9nZ2luZy5oIgotCi1uYW1lc3BhY2UgTmljb3NpYSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwotCi1jb25zdCBjaGFyKiBHQ0dMQU5HTEVMYXllcjo6QU5HTEVDb250ZXh0OjplcnJvclN0
cmluZyhpbnQgc3RhdHVzQ29kZSkKLXsKLSAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihpbnQpID49
IHNpemVvZihFR0xpbnQpLCAiRUdMaW50IG11c3Qgbm90IGJlIHdpZGVyIHRoYW4gaW50Iik7Ci0g
ICAgc3dpdGNoIChzdGF0dXNDb2RlKSB7Ci0jZGVmaW5lIENBU0VfUkVUVVJOX1NUUklORyhuYW1l
KSBjYXNlIG5hbWU6IHJldHVybiAjbmFtZQotICAgICAgICAvLyBodHRwczovL3d3dy5raHJvbm9z
Lm9yZy9yZWdpc3RyeS9FR0wvc2RrL2RvY3MvbWFuL2h0bWwvZWdsR2V0RXJyb3IueGh0bWwKLSAg
ICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9TVUNDRVNTKTsKLSAgICAgICAgQ0FTRV9SRVRV
Uk5fU1RSSU5HKEVHTF9OT1RfSU5JVElBTElaRUQpOwotICAgICAgICBDQVNFX1JFVFVSTl9TVFJJ
TkcoRUdMX0JBRF9BQ0NFU1MpOwotICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9B
TExPQyk7Ci0gICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX0FUVFJJQlVURSk7Ci0g
ICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX0NPTlRFWFQpOwotICAgICAgICBDQVNF
X1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9DT05GSUcpOwotICAgICAgICBDQVNFX1JFVFVSTl9TVFJJ
TkcoRUdMX0JBRF9DVVJSRU5UX1NVUkZBQ0UpOwotICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkco
RUdMX0JBRF9ESVNQTEFZKTsKLSAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfU1VS
RkFDRSk7Ci0gICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX01BVENIKTsKLSAgICAg
ICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfUEFSQU1FVEVSKTsKLSAgICAgICAgQ0FTRV9S
RVRVUk5fU1RSSU5HKEVHTF9CQURfTkFUSVZFX1BJWE1BUCk7Ci0gICAgICAgIENBU0VfUkVUVVJO
X1NUUklORyhFR0xfQkFEX05BVElWRV9XSU5ET1cpOwotICAgICAgICBDQVNFX1JFVFVSTl9TVFJJ
TkcoRUdMX0NPTlRFWFRfTE9TVCk7Ci0jdW5kZWYgQ0FTRV9SRVRVUk5fU1RSSU5HCi0gICAgZGVm
YXVsdDogcmV0dXJuICJVbmtub3duIEVHTCBlcnJvciI7Ci0gICAgfQotfQotCi1jb25zdCBjaGFy
KiBHQ0dMQU5HTEVMYXllcjo6QU5HTEVDb250ZXh0OjpsYXN0RXJyb3JTdHJpbmcoKQotewotICAg
IHJldHVybiBlcnJvclN0cmluZyhFR0xfR2V0RXJyb3IoKSk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0
cjxHQ0dMQU5HTEVMYXllcjo6QU5HTEVDb250ZXh0PiBHQ0dMQU5HTEVMYXllcjo6QU5HTEVDb250
ZXh0OjpjcmVhdGVDb250ZXh0KCkKLXsKLSAgICBFR0xEaXNwbGF5IGRpc3BsYXkgPSBFR0xfR2V0
RGlzcGxheShFR0xfREVGQVVMVF9ESVNQTEFZKTsKLSAgICBpZiAoZGlzcGxheSA9PSBFR0xfTk9f
RElTUExBWSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBFR0xpbnQgbWFqb3JWZXJz
aW9uLCBtaW5vclZlcnNpb247Ci0gICAgaWYgKEVHTF9Jbml0aWFsaXplKGRpc3BsYXksICZtYWpv
clZlcnNpb24sICZtaW5vclZlcnNpb24pID09IEVHTF9GQUxTRSkgewotICAgICAgICBMT0coV2Vi
R0wsICJFR0xEaXNwbGF5IEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQotICAgIExPRyhXZWJHTCwgIkFOR0xFIGluaXRpYWxpc2VkIE1ham9y
OiAlZCBNaW5vcjogJWQiLCBtYWpvclZlcnNpb24sIG1pbm9yVmVyc2lvbik7Ci0KLSAgICBjb25z
dCBjaGFyKiBkaXNwbGF5RXh0ZW5zaW9ucyA9IEVHTF9RdWVyeVN0cmluZyhkaXNwbGF5LCBFR0xf
RVhURU5TSU9OUyk7Ci0gICAgTE9HKFdlYkdMLCAiRXh0ZW5zaW9uczogJXMiLCBkaXNwbGF5RXh0
ZW5zaW9ucyk7Ci0KLSAgICBFR0xDb25maWcgY29uZmlnOwotICAgIEVHTGludCBjb25maWdBdHRy
aWJ1dGVzW10gPSB7Ci0gICAgICAgIEVHTF9SRU5ERVJBQkxFX1RZUEUsIEVHTF9PUEVOR0xfRVMy
X0JJVCwKLSAgICAgICAgRUdMX1JFRF9TSVpFLCA4LAotICAgICAgICBFR0xfR1JFRU5fU0laRSwg
OCwKLSAgICAgICAgRUdMX0JMVUVfU0laRSwgOCwKLSAgICAgICAgRUdMX0FMUEhBX1NJWkUsIDgs
Ci0gICAgICAgIEVHTF9OT05FCi0gICAgfTsKLSAgICBFR0xpbnQgbnVtYmVyQ29uZmlnc1JldHVy
bmVkID0gMDsKLSAgICBFR0xfQ2hvb3NlQ29uZmlnKGRpc3BsYXksIGNvbmZpZ0F0dHJpYnV0ZXMs
ICZjb25maWcsIDEsICZudW1iZXJDb25maWdzUmV0dXJuZWQpOwotICAgIGlmIChudW1iZXJDb25m
aWdzUmV0dXJuZWQgIT0gMSkgewotICAgICAgICBMT0coV2ViR0wsICJFR0xDb25maWcgSW5pdGlh
bGl6YXRpb24gZmFpbGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAg
TE9HKFdlYkdMLCAiR290IEVHTENvbmZpZyIpOwotCi0gICAgRUdMX0JpbmRBUEkoRUdMX09QRU5H
TF9FU19BUEkpOwotICAgIGlmIChFR0xfR2V0RXJyb3IoKSAhPSBFR0xfU1VDQ0VTUykgewotICAg
ICAgICBMT0coV2ViR0wsICJVbmFibGUgdG8gYmluZCB0byBPUEVOR0xfRVNfQVBJIik7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHN0ZDo6dmVjdG9yPEVHTGludD4gY29u
dGV4dEF0dHJpYnV0ZXM7Ci0gICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9DT05U
RVhUX0NMSUVOVF9WRVJTSU9OKTsKLSAgICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soMik7
Ci0gICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9DT05URVhUX1dFQkdMX0NPTVBB
VElCSUxJVFlfQU5HTEUpOwotICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfVFJV
RSk7Ci0gICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9FWFRFTlNJT05TX0VOQUJM
RURfQU5HTEUpOwotICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfVFJVRSk7Ci0g
ICAgaWYgKHN0cnN0cihkaXNwbGF5RXh0ZW5zaW9ucywgIkVHTF9BTkdMRV9wb3dlcl9wcmVmZXJl
bmNlIikpIHsKLSAgICAgICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9QT1dFUl9Q
UkVGRVJFTkNFX0FOR0xFKTsKLSAgICAgICAgLy8gRUdMX0xPV19QT1dFUl9BTkdMRSBpcyB0aGUg
ZGVmYXVsdC4gQ2hhbmdlIHRvCi0gICAgICAgIC8vIEVHTF9ISUdIX1BPV0VSX0FOR0xFIGlmIGRl
c2lyZWQuCi0gICAgICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfTE9XX1BPV0VS
X0FOR0xFKTsKLSAgICB9Ci0gICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9OT05F
KTsKLQotICAgIEVHTENvbnRleHQgY29udGV4dCA9IEVHTF9DcmVhdGVDb250ZXh0KGRpc3BsYXks
IGNvbmZpZywgRUdMX05PX0NPTlRFWFQsIGNvbnRleHRBdHRyaWJ1dGVzLmRhdGEoKSk7Ci0gICAg
aWYgKGNvbnRleHQgPT0gRUdMX05PX0NPTlRFWFQpIHsKLSAgICAgICAgTE9HKFdlYkdMLCAiRUdM
Q29udGV4dCBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIH0KLSAgICBMT0coV2ViR0wsICJHb3QgRUdMQ29udGV4dCIpOwotCi0gICAgcmV0dXJu
IHN0ZDo6dW5pcXVlX3B0cjxBTkdMRUNvbnRleHQ+KG5ldyBBTkdMRUNvbnRleHQoZGlzcGxheSwg
Y29uZmlnLCBjb250ZXh0LCBFR0xfTk9fU1VSRkFDRSkpOwotfQotCi1HQ0dMQU5HTEVMYXllcjo6
QU5HTEVDb250ZXh0OjpBTkdMRUNvbnRleHQoRUdMRGlzcGxheSBkaXNwbGF5LCBFR0xDb25maWcg
Y29uZmlnLCBFR0xDb250ZXh0IGNvbnRleHQsIEVHTFN1cmZhY2Ugc3VyZmFjZSkKLSAgICA6IG1f
ZGlzcGxheShkaXNwbGF5KQotICAgICwgbV9jb25maWcoY29uZmlnKQotICAgICwgbV9jb250ZXh0
KGNvbnRleHQpCi0gICAgLCBtX3N1cmZhY2Uoc3VyZmFjZSkKLXsKLX0KLQotR0NHTEFOR0xFTGF5
ZXI6OkFOR0xFQ29udGV4dDo6fkFOR0xFQ29udGV4dCgpCi17Ci0gICAgaWYgKG1fY29udGV4dCkg
ewotICAgICAgICBHTF9CaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOwotICAgICAg
ICBFR0xfTWFrZUN1cnJlbnQobV9kaXNwbGF5LCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZB
Q0UsIEVHTF9OT19DT05URVhUKTsKLSAgICAgICAgRUdMX0Rlc3Ryb3lDb250ZXh0KG1fZGlzcGxh
eSwgbV9jb250ZXh0KTsKLSAgICB9Ci0KLSAgICBpZiAobV9zdXJmYWNlKQotICAgICAgICBFR0xf
RGVzdHJveVN1cmZhY2UobV9kaXNwbGF5LCBtX3N1cmZhY2UpOwotfQotCi1ib29sIEdDR0xBTkdM
RUxheWVyOjpBTkdMRUNvbnRleHQ6Om1ha2VDb250ZXh0Q3VycmVudCgpCi17Ci0gICAgQVNTRVJU
KG1fY29udGV4dCk7Ci0KLSAgICBpZiAoRUdMX0dldEN1cnJlbnRDb250ZXh0KCkgIT0gbV9jb250
ZXh0KQotICAgICAgICByZXR1cm4gRUdMX01ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9zdXJmYWNl
LCBtX3N1cmZhY2UsIG1fY29udGV4dCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0wgR0NHTEFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6cGxhdGZvcm1D
b250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250ZXh0OwotfQotCi1QbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dEdMRGlzcGxheSBHQ0dMQU5HTEVMYXllcjo6QU5HTEVDb250ZXh0OjpwbGF0
Zm9ybURpc3BsYXkoKSBjb25zdAotewotICAgIHJldHVybiBtX2Rpc3BsYXk7Ci19Ci0KLVBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgR0NHTEFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6
cGxhdGZvcm1Db25maWcoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbmZpZzsKLX0KLQotR0NH
TEFOR0xFTGF5ZXI6OkdDR0xBTkdMRUxheWVyKEdyYXBoaWNzQ29udGV4dEdMQU5HTEUmIGNvbnRl
eHQpCi0gICAgOiBHQ0dMTGF5ZXIoY29udGV4dCkKLSAgICAsIG1fYW5nbGVDb250ZXh0KEFOR0xF
Q29udGV4dDo6Y3JlYXRlQ29udGV4dCgpKQotewotfQotCi1HQ0dMQU5HTEVMYXllcjo6fkdDR0xB
TkdMRUxheWVyKCkKLXsKLX0KLQotYm9vbCBHQ0dMQU5HTEVMYXllcjo6bWFrZUNvbnRleHRDdXJy
ZW50KCkKLXsKLSAgICBBU1NFUlQobV9hbmdsZUNvbnRleHQpOwotICAgIHJldHVybiBtX2FuZ2xl
Q29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLX0KLQotUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHRHTCBHQ0dMQU5HTEVMYXllcjo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAgICBB
U1NFUlQobV9hbmdsZUNvbnRleHQpOwotICAgIHJldHVybiBtX2FuZ2xlQ29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCk7Ci19Ci0KLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IEdDR0xB
TkdMRUxheWVyOjpwbGF0Zm9ybURpc3BsYXkoKSBjb25zdAotewotICAgIEFTU0VSVChtX2FuZ2xl
Q29udGV4dCk7Ci0gICAgcmV0dXJuIG1fYW5nbGVDb250ZXh0LT5wbGF0Zm9ybURpc3BsYXkoKTsK
LX0KLQotUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBHQ0dMQU5HTEVMYXllcjo6cGxh
dGZvcm1Db25maWcoKSBjb25zdAotewotICAgIEFTU0VSVChtX2FuZ2xlQ29udGV4dCk7Ci0gICAg
cmV0dXJuIG1fYW5nbGVDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgTmljb3NpYQotCi0jZW5kaWYgLy8gVVNFKE5JQ09TSUEpICYmIFVTRShURVhUVVJFX01B
UFBFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29z
aWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xBTkdMRUxheWVyLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NzM3ODJjM2ZkMjJjNTBhNTc1MDA1YWFkZTBmNGYw
MDBmMmIxYWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdD
R0xBTkdMRUxheWVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTgsIDIwMTkgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK
LSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZAotICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBI
T0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKE5JQ09TSUEpICYmIFVTRShURVhUVVJFX01BUFBFUikK
LQotI2luY2x1ZGUgIkdMQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMLmgiCi0jaW5jbHVkZSAiTmljb3NpYUdDR0xMYXllci5oIgotI2luY2x1ZGUgPG1lbW9yeT4K
LQotdHlwZWRlZiB2b2lkICpFR0xDb25maWc7Ci10eXBlZGVmIHZvaWQgKkVHTENvbnRleHQ7Ci10
eXBlZGVmIHZvaWQgKkVHTERpc3BsYXk7Ci10eXBlZGVmIHZvaWQgKkVHTFN1cmZhY2U7Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEludFNpemU7Ci1jbGFzcyBHTENvbnRleHQ7Ci1jbGFz
cyBQbGF0Zm9ybURpc3BsYXk7Ci19Ci0KLW5hbWVzcGFjZSBOaWNvc2lhIHsKLQotY2xhc3MgR0NH
TEFOR0xFTGF5ZXIgZmluYWwgOiBwdWJsaWMgR0NHTExheWVyIHsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBjbGFzcyBBTkdMRUNvbnRleHQgewotICAgICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShBTkdMRUNvbnRleHQpOwotICAgIHB1YmxpYzoKLSAgICAgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGVycm9yU3RyaW5nKGludCBzdGF0dXNDb2RlKTsKLSAgICAgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGxhc3RFcnJvclN0cmluZygpOwotCi0gICAgICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8QU5HTEVDb250ZXh0PiBjcmVhdGVDb250ZXh0KCk7Ci0gICAgICAgIHZp
cnR1YWwgfkFOR0xFQ29udGV4dCgpOwotCi0gICAgICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0jaWYgRU5BQkxFKFdFQkdMKQotICAgICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdM
IHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0OwotICAgICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dEdMRGlzcGxheSBwbGF0Zm9ybURpc3BsYXkoKSBjb25zdDsKLSAgICAgICAgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHRHTENvbmZpZyBwbGF0Zm9ybUNvbmZpZygpIGNvbnN0OwotI2VuZGlmCi0KLSAg
ICBwcml2YXRlOgotICAgICAgICBBTkdMRUNvbnRleHQoRUdMRGlzcGxheSwgRUdMQ29uZmlnLCBF
R0xDb250ZXh0LCBFR0xTdXJmYWNlKTsKLQotICAgICAgICBFR0xEaXNwbGF5IG1fZGlzcGxheSB7
IG51bGxwdHIgfTsKLSAgICAgICAgRUdMQ29uZmlnIG1fY29uZmlnIHsgbnVsbHB0ciB9OwotICAg
ICAgICBFR0xDb250ZXh0IG1fY29udGV4dCB7IG51bGxwdHIgfTsKLSAgICAgICAgRUdMU3VyZmFj
ZSBtX3N1cmZhY2UgeyBudWxscHRyIH07Ci0gICAgfTsKLQotICAgIEdDR0xBTkdMRUxheWVyKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEUmKTsKLSAgICB2aXJ0dWFsIH5HQ0dMQU5HTEVM
YXllcigpOwotCi0gICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKSBvdmVycmlkZTsKLSAgICBQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRl
OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IHBsYXRmb3JtRGlzcGxheSgp
IGNvbnN0OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgcGxhdGZvcm1Db25m
aWcoKSBjb25zdDsKLXByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFOR0xFQ29udGV4dD4g
bV9hbmdsZUNvbnRleHQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBOaWNvc2lhCi0KLSNlbmRpZiAv
LyBVU0UoTklDT1NJQSkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xBTkdM
RVBpcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXht
YXAvTmljb3NpYUdDR0xBTkdMRVBpcGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVhMzlkM2RhYTY4MWRiOWVj
Y2QwYzZmNmQ5Mzc2NjI4NDEwZTIxZmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xFUGlwZS5j
cHAKQEAgLTAsMCArMSwyNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dp
Y2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAxOCwgMjAxOSBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIk5pY29zaWFHQ0dMQU5HTEVQaXBlLmgiCisKKyNpZiBVU0UoTklDT1NJQSkgJiYgVVNF
KFRFWFRVUkVfTUFQUEVSKQorCisjaW5jbHVkZSAiQU5HTEVIZWFkZXJzLmgiCisjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1h
cHBlckdMLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuaCIK
KyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmgiCisKK25hbWVzcGFj
ZSBOaWNvc2lhIHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0dDR0xBTkdMRVBpcGVT
b3VyY2U6OkdDR0xBTkdMRVBpcGVTb3VyY2UoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RSYgY29udGV4dCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQoreworfQorCitHQ0dMQU5HTEVQ
aXBlU291cmNlOjp+R0NHTEFOR0xFUGlwZVNvdXJjZSgpCit7Cit9CisKK3ZvaWQgR0NHTEFOR0xF
UGlwZVNvdXJjZTo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCit7CisgICAgaWYgKG1fY29udGV4dC5s
YXllckNvbXBvc2l0ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LnByZXBh
cmVUZXh0dXJlKCk7CisgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZl
ciA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9jb250ZXh0LmdldEludGVybmFsRnJhbWVidWZmZXJT
aXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICghaW1hZ2VCdWZmZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC5wYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0NhbnZhcygqaW1hZ2VCdWZmZXIuZ2V0KCkpOworCisgICAgaGFuZGxlKFdURk1vdmUoaW1hZ2VC
dWZmZXIpKTsKKworICAgIG1fY29udGV4dC5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7Cit9CisKK2Nv
bnN0IGNoYXIqIEdDR0xBTkdMRVBpcGU6OkFOR0xFQ29udGV4dDo6ZXJyb3JTdHJpbmcoaW50IHN0
YXR1c0NvZGUpCit7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoaW50KSA+PSBzaXplb2YoRUdM
aW50KSwgIkVHTGludCBtdXN0IG5vdCBiZSB3aWRlciB0aGFuIGludCIpOworICAgIHN3aXRjaCAo
c3RhdHVzQ29kZSkgeworI2RlZmluZSBDQVNFX1JFVFVSTl9TVFJJTkcobmFtZSkgY2FzZSBuYW1l
OiByZXR1cm4gI25hbWUKKyAgICAgICAgLy8gaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0
cnkvRUdML3Nkay9kb2NzL21hbi9odG1sL2VnbEdldEVycm9yLnhodG1sCisgICAgICAgIENBU0Vf
UkVUVVJOX1NUUklORyhFR0xfU1VDQ0VTUyk7CisgICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhF
R0xfTk9UX0lOSVRJQUxJWkVEKTsKKyAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURf
QUNDRVNTKTsKKyAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfQUxMT0MpOworICAg
ICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9BVFRSSUJVVEUpOworICAgICAgICBDQVNF
X1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9DT05URVhUKTsKKyAgICAgICAgQ0FTRV9SRVRVUk5fU1RS
SU5HKEVHTF9CQURfQ09ORklHKTsKKyAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURf
Q1VSUkVOVF9TVVJGQUNFKTsKKyAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfRElT
UExBWSk7CisgICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX1NVUkZBQ0UpOworICAg
ICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9NQVRDSCk7CisgICAgICAgIENBU0VfUkVU
VVJOX1NUUklORyhFR0xfQkFEX1BBUkFNRVRFUik7CisgICAgICAgIENBU0VfUkVUVVJOX1NUUklO
RyhFR0xfQkFEX05BVElWRV9QSVhNQVApOworICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdM
X0JBRF9OQVRJVkVfV0lORE9XKTsKKyAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9DT05U
RVhUX0xPU1QpOworI3VuZGVmIENBU0VfUkVUVVJOX1NUUklORworICAgIGRlZmF1bHQ6IHJldHVy
biAiVW5rbm93biBFR0wgZXJyb3IiOworICAgIH0KK30KKworY29uc3QgY2hhciogR0NHTEFOR0xF
UGlwZTo6QU5HTEVDb250ZXh0OjpsYXN0RXJyb3JTdHJpbmcoKQoreworICAgIHJldHVybiBlcnJv
clN0cmluZyhFR0xfR2V0RXJyb3IoKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxHQ0dMQU5HTEVQ
aXBlOjpBTkdMRUNvbnRleHQ+IEdDR0xBTkdMRVBpcGU6OkFOR0xFQ29udGV4dDo6Y3JlYXRlQ29u
dGV4dCgpCit7CisgICAgRUdMRGlzcGxheSBkaXNwbGF5ID0gRUdMX0dldERpc3BsYXkoRUdMX0RF
RkFVTFRfRElTUExBWSk7CisgICAgaWYgKGRpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgRUdMaW50IG1ham9yVmVyc2lvbiwgbWlub3JWZXJz
aW9uOworICAgIGlmIChFR0xfSW5pdGlhbGl6ZShkaXNwbGF5LCAmbWFqb3JWZXJzaW9uLCAmbWlu
b3JWZXJzaW9uKSA9PSBFR0xfRkFMU0UpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiRUdMRGlzcGxh
eSBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKyAgICBMT0coV2ViR0wsICJBTkdMRSBpbml0aWFsaXNlZCBNYWpvcjogJWQgTWlub3I6ICVk
IiwgbWFqb3JWZXJzaW9uLCBtaW5vclZlcnNpb24pOworCisgICAgY29uc3QgY2hhciogZGlzcGxh
eUV4dGVuc2lvbnMgPSBFR0xfUXVlcnlTdHJpbmcoZGlzcGxheSwgRUdMX0VYVEVOU0lPTlMpOwor
ICAgIExPRyhXZWJHTCwgIkV4dGVuc2lvbnM6ICVzIiwgZGlzcGxheUV4dGVuc2lvbnMpOworCisg
ICAgRUdMQ29uZmlnIGNvbmZpZzsKKyAgICBFR0xpbnQgY29uZmlnQXR0cmlidXRlc1tdID0gewor
ICAgICAgICBFR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0VTMl9CSVQsCisgICAgICAg
IEVHTF9SRURfU0laRSwgOCwKKyAgICAgICAgRUdMX0dSRUVOX1NJWkUsIDgsCisgICAgICAgIEVH
TF9CTFVFX1NJWkUsIDgsCisgICAgICAgIEVHTF9BTFBIQV9TSVpFLCA4LAorICAgICAgICBFR0xf
Tk9ORQorICAgIH07CisgICAgRUdMaW50IG51bWJlckNvbmZpZ3NSZXR1cm5lZCA9IDA7CisgICAg
RUdMX0Nob29zZUNvbmZpZyhkaXNwbGF5LCBjb25maWdBdHRyaWJ1dGVzLCAmY29uZmlnLCAxLCAm
bnVtYmVyQ29uZmlnc1JldHVybmVkKTsKKyAgICBpZiAobnVtYmVyQ29uZmlnc1JldHVybmVkICE9
IDEpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiRUdMQ29uZmlnIEluaXRpYWxpemF0aW9uIGZhaWxl
ZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIExPRyhXZWJHTCwgIkdv
dCBFR0xDb25maWciKTsKKworICAgIEVHTF9CaW5kQVBJKEVHTF9PUEVOR0xfRVNfQVBJKTsKKyAg
ICBpZiAoRUdMX0dldEVycm9yKCkgIT0gRUdMX1NVQ0NFU1MpIHsKKyAgICAgICAgTE9HKFdlYkdM
LCAiVW5hYmxlIHRvIGJpbmQgdG8gT1BFTkdMX0VTX0FQSSIpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisKKyAgICBzdGQ6OnZlY3RvcjxFR0xpbnQ+IGNvbnRleHRBdHRyaWJ1dGVz
OworICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfQ09OVEVYVF9DTElFTlRfVkVS
U0lPTik7CisgICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKDIpOworICAgIGNvbnRleHRB
dHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfQ09OVEVYVF9XRUJHTF9DT01QQVRJQklMSVRZX0FOR0xF
KTsKKyAgICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdMX1RSVUUpOworICAgIGNvbnRl
eHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfRVhURU5TSU9OU19FTkFCTEVEX0FOR0xFKTsKKyAg
ICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdMX1RSVUUpOworICAgIGlmIChzdHJzdHIo
ZGlzcGxheUV4dGVuc2lvbnMsICJFR0xfQU5HTEVfcG93ZXJfcHJlZmVyZW5jZSIpKSB7CisgICAg
ICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfUE9XRVJfUFJFRkVSRU5DRV9BTkdM
RSk7CisgICAgICAgIC8vIEVHTF9MT1dfUE9XRVJfQU5HTEUgaXMgdGhlIGRlZmF1bHQuIENoYW5n
ZSB0bworICAgICAgICAvLyBFR0xfSElHSF9QT1dFUl9BTkdMRSBpZiBkZXNpcmVkLgorICAgICAg
ICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdMX0xPV19QT1dFUl9BTkdMRSk7CisgICAg
fQorICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfTk9ORSk7CisKKyAgICBFR0xD
b250ZXh0IGNvbnRleHQgPSBFR0xfQ3JlYXRlQ29udGV4dChkaXNwbGF5LCBjb25maWcsIEVHTF9O
T19DT05URVhULCBjb250ZXh0QXR0cmlidXRlcy5kYXRhKCkpOworICAgIGlmIChjb250ZXh0ID09
IEVHTF9OT19DT05URVhUKSB7CisgICAgICAgIExPRyhXZWJHTCwgIkVHTENvbnRleHQgSW5pdGlh
bGl6YXRpb24gZmFpbGVkLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAg
TE9HKFdlYkdMLCAiR290IEVHTENvbnRleHQiKTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9w
dHI8QU5HTEVDb250ZXh0PihuZXcgQU5HTEVDb250ZXh0KGRpc3BsYXksIGNvbmZpZywgY29udGV4
dCwgRUdMX05PX1NVUkZBQ0UpKTsKK30KKworR0NHTEFOR0xFUGlwZTo6QU5HTEVDb250ZXh0OjpB
TkdMRUNvbnRleHQoRUdMRGlzcGxheSBkaXNwbGF5LCBFR0xDb25maWcgY29uZmlnLCBFR0xDb250
ZXh0IGNvbnRleHQsIEVHTFN1cmZhY2Ugc3VyZmFjZSkKKyAgICA6IG1fZGlzcGxheShkaXNwbGF5
KQorICAgICwgbV9jb25maWcoY29uZmlnKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCisgICAg
LCBtX3N1cmZhY2Uoc3VyZmFjZSkKK3sKK30KKworR0NHTEFOR0xFUGlwZTo6QU5HTEVDb250ZXh0
Ojp+QU5HTEVDb250ZXh0KCkKK3sKKyAgICBpZiAobV9jb250ZXh0KSB7CisgICAgICAgIEdMX0Jp
bmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7CisgICAgICAgIEVHTF9NYWtlQ3VycmVu
dChtX2Rpc3BsYXksIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRF
WFQpOworICAgICAgICBFR0xfRGVzdHJveUNvbnRleHQobV9kaXNwbGF5LCBtX2NvbnRleHQpOwor
ICAgIH0KKworICAgIGlmIChtX3N1cmZhY2UpCisgICAgICAgIEVHTF9EZXN0cm95U3VyZmFjZSht
X2Rpc3BsYXksIG1fc3VyZmFjZSk7Cit9CisKK2Jvb2wgR0NHTEFOR0xFUGlwZTo6QU5HTEVDb250
ZXh0OjptYWtlQ29udGV4dEN1cnJlbnQoKQoreworICAgIEFTU0VSVChtX2NvbnRleHQpOworCisg
ICAgaWYgKEVHTF9HZXRDdXJyZW50Q29udGV4dCgpICE9IG1fY29udGV4dCkKKyAgICAgICAgcmV0
dXJuIEVHTF9NYWtlQ3VycmVudChtX2Rpc3BsYXksIG1fc3VyZmFjZSwgbV9zdXJmYWNlLCBtX2Nv
bnRleHQpOworICAgIHJldHVybiB0cnVlOworfQorCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdM
IEdDR0xBTkdMRVBpcGU6OkFOR0xFQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9jb250ZXh0OworfQorCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlz
cGxheSBHQ0dMQU5HTEVQaXBlOjpBTkdMRUNvbnRleHQ6OnBsYXRmb3JtRGlzcGxheSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fZGlzcGxheTsKK30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRleHRH
TENvbmZpZyBHQ0dMQU5HTEVQaXBlOjpBTkdMRUNvbnRleHQ6OnBsYXRmb3JtQ29uZmlnKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9jb25maWc7Cit9CisKK0dDR0xBTkdMRVBpcGU6OkdDR0xBTkdM
RVBpcGUoR3JhcGhpY3NDb250ZXh0R0xBTkdMRSYgY29udGV4dCkKKyAgICA6IG1fYW5nbGVDb250
ZXh0KEFOR0xFQ29udGV4dDo6Y3JlYXRlQ29udGV4dCgpKQorICAgICwgbV9zb3VyY2UoYWRvcHRS
ZWYoKm5ldyBHQ0dMQU5HTEVQaXBlU291cmNlKGNvbnRleHQpKSkKKyAgICAsIG1fbGF5ZXJDb250
ZW50c0Rpc3BsYXlEZWxlZ2F0ZShOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlRGlzcGxheURl
bGVnYXRlOjpjcmVhdGUobV9zb3VyY2UtPnBsYXRmb3JtTGF5ZXIoKSkpCit7Cit9CisKK0dDR0xB
TkdMRVBpcGU6On5HQ0dMQU5HTEVQaXBlKCkKK3sKK30KKworYm9vbCBHQ0dMQU5HTEVQaXBlOjpt
YWtlQ29udGV4dEN1cnJlbnQoKQoreworICAgIEFTU0VSVChtX2FuZ2xlQ29udGV4dCk7CisgICAg
cmV0dXJuIG1fYW5nbGVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworfQorCitQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dEdMIEdDR0xBTkdMRVBpcGU6OnBsYXRmb3JtQ29udGV4dCgpIGNv
bnN0Cit7CisgICAgQVNTRVJUKG1fYW5nbGVDb250ZXh0KTsKKyAgICByZXR1cm4gbV9hbmdsZUNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworfQorCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdM
RGlzcGxheSBHQ0dMQU5HTEVQaXBlOjpwbGF0Zm9ybURpc3BsYXkoKSBjb25zdAoreworICAgIEFT
U0VSVChtX2FuZ2xlQ29udGV4dCk7CisgICAgcmV0dXJuIG1fYW5nbGVDb250ZXh0LT5wbGF0Zm9y
bURpc3BsYXkoKTsKK30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBHQ0dMQU5H
TEVQaXBlOjpwbGF0Zm9ybUNvbmZpZygpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fYW5nbGVDb250
ZXh0KTsKKyAgICByZXR1cm4gbV9hbmdsZUNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworfQor
CitSZWZQdHI8SW1hZ2VCdWZmZXJQaXBlOjpTb3VyY2U+IEdDR0xBTkdMRVBpcGU6OnNvdXJjZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc291cmNlLnB0cigpOworfQorCitSZWZQdHI8R3JhcGhp
Y3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlPiBHQ0dMQU5HTEVQaXBlOjpsYXllckNvbnRl
bnRzRGlzcGxheURlbGVnYXRlKCkKK3sKKyAgICByZXR1cm4gbV9sYXllckNvbnRlbnRzRGlzcGxh
eURlbGVnYXRlLnB0cigpOworfQorCit9IC8vIG5hbWVzcGFjZSBOaWNvc2lhCisKKyNlbmRpZiAv
LyBVU0UoTklDT1NJQSkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xBTkdM
RVBpcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFw
L05pY29zaWFHQ0dMQU5HTEVQaXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODYxMzdlMGQ2YzM1N2YwMzQ1Y2Y5
NWUxOWIzYzc3N2Y5NDRmMzUzMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVQaXBlLmgKQEAg
LTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAxOCwgMjAxOSBJZ2FsaWEgUy5MLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoTklDT1NJ
QSkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorCisjaW5jbHVkZSAiR0xDb250ZXh0LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oIgorI2luY2x1ZGUgIk5pY29zaWFJbWFnZUJ1
ZmZlclBpcGUuaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisKK3R5cGVkZWYgdm9pZCAqRUdMQ29uZmln
OwordHlwZWRlZiB2b2lkICpFR0xDb250ZXh0OwordHlwZWRlZiB2b2lkICpFR0xEaXNwbGF5Owor
dHlwZWRlZiB2b2lkICpFR0xTdXJmYWNlOworCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJ
bnRTaXplOworY2xhc3MgR0xDb250ZXh0OworY2xhc3MgUGxhdGZvcm1EaXNwbGF5OworfQorCitu
YW1lc3BhY2UgTmljb3NpYSB7CisKK2NsYXNzIEdDR0xBTkdMRVBpcGVTb3VyY2U7CitjbGFzcyBH
Q0dMQU5HTEVQaXBlU291cmNlIDogcHVibGljIE5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3VyY2Ug
eworcHVibGljOgorICAgIEdDR0xBTkdMRVBpcGVTb3VyY2UoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xBTkdMRSYpOworICAgIHZpcnR1YWwgfkdDR0xBTkdMRVBpcGVTb3VyY2UoKTsKKworICAg
IC8vIENvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQgb3ZlcnJpZGVzLgorICAg
IHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIGZpbmFsOworcHJpdmF0ZToKKyAgICBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEFOR0xFJiBtX2NvbnRleHQ7Cit9OworCitjbGFzcyBHQ0dMQU5H
TEVQaXBlIGZpbmFsIDogcHVibGljIFdlYkNvcmU6OkltYWdlQnVmZmVyUGlwZSB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgY2xhc3MgQU5HTEVDb250ZXh0IHsK
KyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQU5HTEVDb250ZXh0KTsKKyAgICBwdWJsaWM6
CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBlcnJvclN0cmluZyhpbnQgc3RhdHVzQ29kZSk7
CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBsYXN0RXJyb3JTdHJpbmcoKTsKKworICAgICAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFOR0xFQ29udGV4dD4gY3JlYXRlQ29udGV4dCgpOwor
ICAgICAgICB2aXJ0dWFsIH5BTkdMRUNvbnRleHQoKTsKKworICAgICAgICBib29sIG1ha2VDb250
ZXh0Q3VycmVudCgpOworI2lmIEVOQUJMRShXRUJHTCkKKyAgICAgICAgUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHRHTCBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKKyAgICAgICAgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHRHTERpc3BsYXkgcGxhdGZvcm1EaXNwbGF5KCkgY29uc3Q7CisgICAgICAgIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgcGxhdGZvcm1Db25maWcoKSBjb25zdDsKKyNl
bmRpZgorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQU5HTEVDb250ZXh0KEVHTERpc3BsYXksIEVH
TENvbmZpZywgRUdMQ29udGV4dCwgRUdMU3VyZmFjZSk7CisKKyAgICAgICAgRUdMRGlzcGxheSBt
X2Rpc3BsYXkgeyBudWxscHRyIH07CisgICAgICAgIEVHTENvbmZpZyBtX2NvbmZpZyB7IG51bGxw
dHIgfTsKKyAgICAgICAgRUdMQ29udGV4dCBtX2NvbnRleHQgeyBudWxscHRyIH07CisgICAgICAg
IEVHTFN1cmZhY2UgbV9zdXJmYWNlIHsgbnVsbHB0ciB9OworICAgIH07CisKKyAgICBHQ0dMQU5H
TEVQaXBlKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEUmKTsKKyAgICB2aXJ0dWFsIH5H
Q0dMQU5HTEVQaXBlKCk7CisKKyAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgcGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7CisgICAgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgcGxhdGZvcm1EaXNwbGF5KCkgY29uc3Q7Cisg
ICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBwbGF0Zm9ybUNvbmZpZygpIGNvbnN0
OworCisgICAgLy8gSW1hZ2VCdWZmZXJQaXBlIG92ZXJyaWRlcy4KKyAgICBSZWZQdHI8V2ViQ29y
ZTo6SW1hZ2VCdWZmZXJQaXBlOjpTb3VyY2U+IHNvdXJjZSgpIGNvbnN0IGZpbmFsOworICAgIFJl
ZlB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGU+IGxheWVy
Q29udGVudHNEaXNwbGF5RGVsZWdhdGUoKSBmaW5hbDsKKworcHJpdmF0ZToKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8QU5HTEVDb250ZXh0PiBtX2FuZ2xlQ29udGV4dDsKKyAgICBSZWY8R0NHTEFOR0xF
UGlwZVNvdXJjZT4gbV9zb3VyY2U7CisgICAgUmVmPE5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3Vy
Y2VEaXNwbGF5RGVsZWdhdGU+IG1fbGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIE5pY29zaWEKKworI2VuZGlmIC8vIFVTRShOSUNPU0lBKSAmJiBVU0Uo
VEVYVFVSRV9NQVBQRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMTGF5ZXIuY3BwCmlu
ZGV4IDJjZTI0N2M2ZGRmNGIzNmQ3MGMzZTZhNjQ3OWNmNjA2Yzc5NmUyMDUuLjRlNGEyYjNiZTUy
ZGMzNjU3MDBjN2I1OWM5NTUzMjJhZGVlODY2MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMTGF5ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29z
aWFHQ0dMTGF5ZXIuY3BwCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiTmljb3NpYUdDR0xMYXllci5oIgogCi0jaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0Uo
TklDT1NJQSkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2lmIEVOQUJMRShXRUJHTCkgJiYgVVNF
KE5JQ09TSUEpICYmIFVTRShURVhUVVJFX01BUFBFUikgJiYgIVVTRShBTkdMRSkKIAogI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKQEAg
LTM3LDIwICszNywxMyBAQAogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHkuaCIKICNlbmRpZgogCi0jaWYgVVNFKEFOR0xFKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
Ci0jaWYgVVNFKENBSVJPKQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jZW5kaWYKLSNlbmRpZgotCiAj
aW5jbHVkZSAiR0xDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBOaWNvc2lhIHsKIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKLUdDR0xMYXllcjo6R0NHTExheWVyKEdyYXBoaWNzQ29udGV4dEdM
VHlwZSYgY29udGV4dCkKK0dDR0xMYXllcjo6R0NHTExheWVyKEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMJiBjb250ZXh0KQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX2NvbnRlbnRM
YXllcihOaWNvc2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJU
ZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhpcykpKQogewpAQCAtODIsNjQgKzc1
LDE1IEBAIHZvaWQgR0NHTExheWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKIAogICAgIG1fY29u
dGV4dC5wcmVwYXJlVGV4dHVyZSgpOwogICAgIEludFNpemUgdGV4dHVyZVNpemUobV9jb250ZXh0
Lm1fY3VycmVudFdpZHRoLCBtX2NvbnRleHQubV9jdXJyZW50SGVpZ2h0KTsKLSNpZiBVU0UoQU5H
TEUpCi0gICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUodGV4dHVyZVNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQs
IDEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwot
ICAgIGlmICghaW1hZ2VCdWZmZXIpCi0gICAgICAgIHJldHVybjsKIAotICAgIG1fY29udGV4dC5w
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygqaW1hZ2VCdWZmZXIuZ2V0KCkpOwotI2Vsc2UK
ICAgICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIGZsYWdzID0gVGV4dHVyZU1hcHBlckdMOjpTaG91
bGRGbGlwVGV4dHVyZTsKICAgICBpZiAobV9jb250ZXh0LmNvbnRleHRBdHRyaWJ1dGVzKCkuYWxw
aGEpCiAgICAgICAgIGZsYWdzIHw9IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQ7Ci0jZW5k
aWYKIAogICAgIHsKICAgICAgICAgYXV0byYgcHJveHkgPSBkb3duY2FzdDxOaWNvc2lhOjpDb250
ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9jb250ZW50TGF5ZXItPmltcGwoKSkucHJveHko
KTsKLSNpZiBVU0UoQU5HTEUpCi0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGR1cGxpY2F0ZWQg
ZnJvbSBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlLCBidXQgc2hvdWxkIGJlIHNoYXJlZCBzb21laG93
LgotICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KLSAgICAgICAgICAgIFt0aGlzLCBpbWFn
ZUJ1ZmZlciA9IFdURk1vdmUoaW1hZ2VCdWZmZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAg
ICAgICBhdXRvIG5hdGl2ZUltYWdlID0gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uo
V1RGTW92ZShpbWFnZUJ1ZmZlcikpOwotICAgICAgICAgICAgICAgIGlmICghbmF0aXZlSW1hZ2Up
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIGF1dG8gc2l6
ZSA9IG5hdGl2ZUltYWdlLT5zaXplKCk7Ci0gICAgICAgICAgICAgICAgYXV0byBmbGFncyA9IG5h
dGl2ZUltYWdlLT5oYXNBbHBoYSgpID8gQml0bWFwVGV4dHVyZTo6U3VwcG9ydHNBbHBoYSA6IEJp
dG1hcFRleHR1cmU6Ok5vRmxhZzsKLQotICAgICAgICAgICAgICAgIGF1dG8mIHByb3h5ID0gZG93
bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fY29udGVudExh
eWVyLT5pbXBsKCkpLnByb3h5KCk7Ci0gICAgICAgICAgICAgICAgTG9ja2VyIGxvY2tlciB7IHBy
b3h5LmxvY2soKSB9OwotCi0gICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPiBsYXllckJ1ZmZlciA9IHByb3h5LmdldEF2YWlsYWJs
ZUJ1ZmZlcihzaXplLCBmbGFncyk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWxheWVyQnVmZmVy
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gdGV4dHVyZSA9IEJpdG1hcFRleHR1cmVHTDo6
Y3JlYXRlKFRleHR1cmVNYXBwZXJDb250ZXh0QXR0cmlidXRlczo6Z2V0KCkpOwotICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlLT5yZXNldChzaXplLCBmbGFncyk7Ci0gICAgICAgICAgICAgICAg
ICAgIGxheWVyQnVmZmVyID0gbWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1
ZmZlcj4oV1RGTW92ZSh0ZXh0dXJlKSwgbmF0aXZlSW1hZ2UtPmhhc0FscGhhKCkgPyBUZXh0dXJl
TWFwcGVyR0w6OlNob3VsZEJsZW5kIDogVGV4dHVyZU1hcHBlckdMOjpOb0ZsYWcpOwotICAgICAg
ICAgICAgICAgIH0KLQotI2lmIFVTRShDQUlSTykKLSAgICAgICAgICAgICAgICBhdXRvKiBzdXJm
YWNlID0gbmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKTsKLSAgICAgICAgICAgICAg
ICBhdXRvKiBpbWFnZURhdGEgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2Up
OwotICAgICAgICAgICAgICAgIGxheWVyQnVmZmVyLT50ZXh0dXJlR0woKS51cGRhdGVDb250ZW50
cyhpbWFnZURhdGEsIEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSksIEludFBvaW50KCksIGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlKSk7Ci0jZWxzZQotICAgICAgICAgICAg
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0jZW5kaWYKLQotICAgICAgICAgICAgICAgIHByb3h5LnB1
c2hOZXh0QnVmZmVyKFdURk1vdmUobGF5ZXJCdWZmZXIpKTsKLQotICAgICAgICAgICAgICAgIG1f
Y29udGV4dC5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAg
IHByb3h5LnNjaGVkdWxlVXBkYXRlT25Db21wb3NpdG9yVGhyZWFkKFtwcm94eU9wZXJhdGlvbl0g
KCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBwcm94eU9wZXJhdGlvbigpOwotICAgICAgICB9KTsK
LQotICAgICAgICByZXR1cm47Ci0jZWxzZQogICAgICAgICBMb2NrZXIgbG9ja2VyIHsgcHJveHku
bG9jaygpIH07CiAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKG1ha2VVbmlxdWU8VGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29udGV4dC5tX2NvbXBvc2l0b3JUZXh0dXJl
LCB0ZXh0dXJlU2l6ZSwgZmxhZ3MsIG1fY29udGV4dC5tX2ludGVybmFsQ29sb3JGb3JtYXQpKTsK
LSNlbmRpZgogICAgIH0KIAogICAgIG1fY29udGV4dC5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1h
cC9OaWNvc2lhR0NHTExheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9u
aWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmgKaW5kZXggM2MwYTAyMzRhNGU2ZmZjOWNk
NTE4YWMzNmE2NjQyNTZlODE4ZTdkYy4uMTk2NmM3OWZjYmJhZGVlMzZkNzBhZDVmMGE0ZjcwZWQ3
ZjMxZGMzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS90ZXhtYXAvTmljb3NpYUdDR0xMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMTGF5ZXIuaApAQCAtMjgsMTcg
KzI4LDEyIEBACiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoTklD
T1NJQSkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2lmIEVOQUJMRShXRUJHTCkgJiYgVVNFKE5J
Q09TSUEpICYmIFVTRShURVhUVVJFX01BUFBFUikgJiYgIVVTRShBTkdMRSkKIAorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAjaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXll
clRleHR1cmVNYXBwZXJJbXBsLmgiCiAjaW5jbHVkZSA8bWVtb3J5PgogCi0jaWYgVVNFKEFOR0xF
KQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQU5HTEUuaCIKLSNlbHNlCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBHTENvbnRleHQ7CiB9CkBAIC00OCwxMiArNDMsNyBAQCBuYW1lc3BhY2UgTmljb3Np
YSB7CiBjbGFzcyBHQ0dMTGF5ZXIgOiBwdWJsaWMgQ29udGVudExheWVyVGV4dHVyZU1hcHBlcklt
cGw6OkNsaWVudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0jaWYg
VVNFKEFOR0xFKQotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dEdMVHlwZSA9IFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMQU5HTEU7Ci0jZWxzZQotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dEdM
VHlwZSA9IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwotI2VuZGlmCi0gICAgZXhw
bGljaXQgR0NHTExheWVyKEdyYXBoaWNzQ29udGV4dEdMVHlwZSYpOworICAgIGV4cGxpY2l0IEdD
R0xMYXllcihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYpOwogCiAgICAgdmlydHVh
bCB+R0NHTExheWVyKCk7CiAKQEAgLTY0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3dh
cEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIEdyYXBoaWNzQ29u
dGV4dEdMVHlwZSYgbV9jb250ZXh0OworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMJiBtX2NvbnRleHQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdMQ29udGV4dD4g
bV9nbENvbnRleHQ7CiAKICAgICBSZWY8Q29udGVudExheWVyPiBtX2NvbnRlbnRMYXllcjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGlj
c0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAKaW5kZXggNzUw
YTg0YWY2MzgyYzU0MTMwY2YzNmU4NmQ5YmM4Yzc2MDRjZmJjYi4uNTNlZDc0YWRkYWZmNGE3OTJm
ZTYwYzA5NTU5NGNjNjBiZDgxY2Y1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4
dEdMVGV4dHVyZU1hcHBlci5jcHAKQEAgLTYwLDcgKzYwLDcgQEAKIAogI2lmIFVTRShOSUNPU0lB
KQogI2lmIFVTRShBTkdMRSkKLSNpbmNsdWRlICJOaWNvc2lhR0NHTEFOR0xFTGF5ZXIuaCIKKyNp
bmNsdWRlICJOaWNvc2lhR0NHTEFOR0xFUGlwZS5oIgogI2Vsc2UKICNpbmNsdWRlICJOaWNvc2lh
R0NHTExheWVyLmgiCiAjZW5kaWYKQEAgLTExNiw3ICsxMTYsMTEgQEAgR3JhcGhpY3NDb250ZXh0
R0xUZXh0dXJlTWFwcGVyOjp+R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyKCkgPSBkZWZh
dWx0OwogR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyOjpHcmFwaGljc0NvbnRleHRHTFRl
eHR1cmVNYXBwZXIoR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYgYXR0cmlidXRlcykKICAg
ICA6IEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckJhc2UoV1RGTW92ZShhdHRyaWJ1dGVz
KSkKICNpZiBVU0UoTklDT1NJQSkKKyNpZiBVU0UoQU5HTEUpCisgICAgLCBtX2xheWVyQ29udGVu
dHNEaXNwbGF5RGVsZWdhdGUoKm1fbmljb3NpYVBpcGUtPmxheWVyQ29udGVudHNEaXNwbGF5RGVs
ZWdhdGUoKSkKKyNlbHNlCiAgICAgLCBtX2xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUoUGxh
dGZvcm1MYXllckRpc3BsYXlEZWxlZ2F0ZTo6Y3JlYXRlKCZtX25pY29zaWFMYXllci0+Y29udGVu
dExheWVyKCkpKQorI2VuZGlmCiAjZWxzZQogICAgICwgbV9sYXllckNvbnRlbnRzRGlzcGxheURl
bGVnYXRlKFBsYXRmb3JtTGF5ZXJEaXNwbGF5RGVsZWdhdGU6OmNyZWF0ZShtX3RleG1hcExheWVy
LmdldCgpKSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRl
eHR1cmVNYXBwZXJBTkdMRS5jcHAKaW5kZXggY2ZhZDg0MzhlODQ1OTUwMTJlZjE5MzNmZjZiZjgz
N2YyNTI0NmE3NS4uYTFlMWU4NDQ5OTNmMGQzNGUxMzczZGY0YjUzYjc2MTFkNGI5Mzg2YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNz
Q29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEUu
Y3BwCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKIAogI2lmIFVT
RShOSUNPU0lBKQotI2luY2x1ZGUgIk5pY29zaWFHQ0dMQU5HTEVMYXllci5oIgorI2luY2x1ZGUg
Ik5pY29zaWFHQ0dMQU5HTEVQaXBlLmgiCiAjZWxzZQogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJH
Q0dMUGxhdGZvcm1MYXllci5oIgogI2VuZGlmCkBAIC01MCw3ICs1MCw3IEBAIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xBdHRy
aWJ1dGVzIGF0dHJpCiAgICAgbV9pc0ZvcldlYkdMMiA9IGF0dHJpYnV0ZXMud2ViR0xWZXJzaW9u
ID09IEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDI7CiAjZW5kaWYKICNpZiBV
U0UoTklDT1NJQSkKLSAgICBtX25pY29zaWFMYXllciA9IG1ha2VVbmlxdWU8Tmljb3NpYTo6R0NH
TEFOR0xFTGF5ZXI+KCp0aGlzKTsKKyAgICBtX25pY29zaWFQaXBlID0gbWFrZVVuaXF1ZTxOaWNv
c2lhOjpHQ0dMQU5HTEVQaXBlPigqdGhpcyk7CiAjZWxzZQogICAgIG1fdGV4bWFwTGF5ZXIgPSBt
YWtlVW5pcXVlPFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcj4oKnRoaXMpOwogI2VuZGlm
CkBAIC0xNDQsNyArMTQ0LDcgQEAgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29u
dGV4dEdMQU5HTEUoKQogUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgR3JhcGhpY3ND
b250ZXh0R0xBTkdMRTo6cGxhdGZvcm1EaXNwbGF5KCkgY29uc3QKIHsKICNpZiBVU0UoTklDT1NJ
QSkKLSAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXItPnBsYXRmb3JtRGlzcGxheSgpOworICAgIHJl
dHVybiBtX25pY29zaWFQaXBlLT5wbGF0Zm9ybURpc3BsYXkoKTsKICNlbHNlCiAgICAgcmV0dXJu
IG1fdGV4bWFwTGF5ZXItPnBsYXRmb3JtRGlzcGxheSgpOwogI2VuZGlmCkBAIC0xNTMsNyArMTUz
LDcgQEAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgR3JhcGhpY3NDb250ZXh0R0xB
TkdMRTo6cGxhdGZvcm1EaXNwbGF5KCkgY29uc3QKIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xD
b25maWcgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1Db25maWcoKSBjb25zdAogewog
I2lmIFVTRShOSUNPU0lBKQotICAgIHJldHVybiBtX25pY29zaWFMYXllci0+cGxhdGZvcm1Db25m
aWcoKTsKKyAgICByZXR1cm4gbV9uaWNvc2lhUGlwZS0+cGxhdGZvcm1Db25maWcoKTsKICNlbHNl
CiAgICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXItPnBsYXRmb3JtQ29uZmlnKCk7CiAjZW5kaWYKQEAg
LTE2Miw3ICsxNjIsNyBAQCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEU6OnBsYXRmb3JtQ29uZmlnKCkgY29uc3QKIGJvb2wgR3JhcGhpY3NDb250
ZXh0R0xBTkdMRTo6bWFrZUNvbnRleHRDdXJyZW50KCkKIHsKICNpZiBVU0UoTklDT1NJQSkKLSAg
ICByZXR1cm4gbV9uaWNvc2lhTGF5ZXItPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVy
biBtX25pY29zaWFQaXBlLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICNlbHNlCiAgICAgcmV0dXJu
IG1fdGV4bWFwTGF5ZXItPm1ha2VDb250ZXh0Q3VycmVudCgpOwogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449159</attachid>
            <date>2022-01-14 04:18:40 -0800</date>
            <delta_ts>2022-01-14 04:56:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235182-20220114121839.patch</filename>
            <type>text/plain</type>
            <size>44768</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3ODM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDQxYjYyMGI4NGNhY2Fi
MDU1NTExNGNhYmI4YWVjNTU0MmYyNDNiMy4uZDA3MjZhMDlhNGMxYWYxMDBkNGE5NTEwZDZhNGFi
NjZiYmVmNTA2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDIyLTAxLTEzICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIFNoYXJlIGNv
ZGUgYmV0d2VlbiBOaWNvc2lhR0NHTExheWVyK0FOR0xFIGFuZCBOaWNvc2lhSW1hZ2VCdWZmZXJQ
aXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzUx
ODIKKworICAgICAgICBSZXZpZXdlZCBieSBBbGVqYW5kcm8gRy4gQ2FzdHJvLgorCisgICAgICAg
IFJlbmFtZSBOaWNvc2lhR0NHTEFOR0xFTGF5ZXIgdG8gTmljb3NpYUdDR0xBTkdMRVBpcGUgYW5k
IGhhdmUgaXQKKyAgICAgICAgaW5oZXJpdCBmcm9tIE5pY29zaWFJbWFnZUJ1ZmZlclBpcGUgaW5z
dGVhZCBvZiBOaWNvc2lhR0NHTExheWVyLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gY2hh
bmdlIGluIGJlaGF2aW91ci4KKworICAgICAgICAqIHBsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21h
a2U6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xB
TkdMRS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUltYWdl
QnVmZmVyUGlwZS5jcHA6CisgICAgICAgIChOaWNvc2lhOjpOaWNvc2lhSW1hZ2VCdWZmZXJQaXBl
OjpOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlKToKKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFJbWFn
ZUJ1ZmZlclBpcGU6OnNvdXJjZSBjb25zdCk6CisgICAgICAgIChOaWNvc2lhOjpOaWNvc2lhSW1h
Z2VCdWZmZXJQaXBlOjpsYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlKToKKyAgICAgICAgKCk6
IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpXZWJDb3JlOjpOaWNvc2lhSW1hZ2VCdWZmZXJQ
aXBlU291cmNlOjpOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKE5pY29zaWE6OldlYkNvcmU6Ok5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3VyY2U6On5OaWNv
c2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlKTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6Oldl
YkNvcmU6Ok5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3VyY2U6OmhhbmRsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChOaWNvc2lhOjpXZWJDb3JlOjpOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlOjpz
d2FwQnVmZmVyc0lmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9uaWNvc2lhL05pY29zaWFJbWFnZUJ1ZmZlclBpcGUuaDogQWRkZWQuCisgICAgICAgIChOaWNv
c2lhOjpOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlOjpwbGF0Zm9ybUxheWVyIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFO
R0xFUGlwZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xFTGF5ZXIuY3BwLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVQaXBlLmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1h
cC9OaWNvc2lhR0NHTEFOR0xFTGF5ZXIuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9u
aWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmNwcDoKKyAgICAgICAgKE5pY29zaWE6OkdD
R0xMYXllcjo6R0NHTExheWVyKToKKyAgICAgICAgKE5pY29zaWE6OkdDR0xMYXllcjo6c3dhcEJ1
ZmZlcnNJZk5lZWRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXht
YXAvTmljb3NpYUdDR0xMYXllci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyOjpHcmFwaGljc0NvbnRleHRHTFRleHR1cmVN
YXBwZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRl
eHRHTFRleHR1cmVNYXBwZXJBTkdMRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBsYXRmb3JtRGlzcGxheSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwbGF0Zm9ybUNvbmZpZyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjptYWtlQ29udGV4dEN1
cnJlbnQpOgorCiAyMDIyLTAxLTEyICBDaHJpcyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbV1BFXSBGaXggYnVpbGRpbmcgV2ViWFIgd2l0aCBBTkdMRSBlbmFibGVkCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZQppbmRleCA0MjRhNmUzYzgy
ZTRlMWE3ZDE0NTNhZGFhY2M1NTczNmU5ZTJmZDFkLi42YzQ2N2YyZmI1Njg0ODFhZWYzNmFlNWJl
MDI0ZTRmOGQ1OWE3OGFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0
dXJlTWFwcGVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBw
ZXIuY21ha2UKQEAgLTEyNiw2ICsxMjYsNiBAQCBlbmRpZiAoKQogCiBpZiAoVVNFX0FOR0xFX1dF
QkdMKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwotICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xFTGF5ZXIuY3BwCisgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVQaXBlLmNw
cAogICAgICkKIGVuZGlmICgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmgKaW5kZXggZjg5
Yjk5ZTEzY2IxZWM0OTFjZjdmMWQxZDBiMGVjOTM2MGE2NGE2MS4uY2E4NzJhZTU4Y2RhNTFhMTY1
OTIxYmM1MDkyYjU3YzIxMDMzOGQ0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuaApA
QCAtNDIsNyArNDIsNyBAQAogCiAjaWYgVVNFKE5JQ09TSUEpCiBuYW1lc3BhY2UgTmljb3NpYSB7
Ci1jbGFzcyBHQ0dMQU5HTEVMYXllcjsKK2NsYXNzIEdDR0xBTkdMRVBpcGU7CiBjbGFzcyBHQ0dM
TGF5ZXI7CiB9CiAjZW5kaWYKQEAgLTQ1MCw3ICs0NTAsMTEgQEAgcHJvdGVjdGVkOgogICAgIEdD
R0x1aW50IG1faW50ZXJtZWRpYXRlVGV4dHVyZSB7IDAgfTsKICNlbmRpZgogI2lmIFVTRShOSUNP
U0lBKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxOaWNvc2lhOjpHQ0dMQU5HTEVMYXllcj4gbV9uaWNv
c2lhTGF5ZXI7CisjaWYgVVNFKEFOR0xFKQorICAgIHN0ZDo6dW5pcXVlX3B0cjxOaWNvc2lhOjpH
Q0dMQU5HTEVQaXBlPiBtX25pY29zaWFQaXBlOworI2Vsc2UKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
Tmljb3NpYTo6R0NHTExheWVyPiBtX25pY29zaWFMYXllcjsKKyNlbmRpZgogI2VsaWYgVVNFKFRF
WFRVUkVfTUFQUEVSKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlTWFwcGVyR0NHTFBsYXRm
b3JtTGF5ZXI+IG1fdGV4bWFwTGF5ZXI7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUltYWdlQnVmZmVyUGlwZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFJbWFnZUJ1
ZmZlclBpcGUuY3BwCmluZGV4IDJmNzRkMGViYWRiN2Q4MmU5MjBkNDI4Y2Q5ZTE5Y2Y2ZGRlMzYw
NGYuLjYzODQ2M2ZiM2YyNWU1YmRiZGFmOTc4OWU0YWY5MDcxNGE2NTY5NjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUltYWdlQnVm
ZmVyUGlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3Np
YS9OaWNvc2lhSW1hZ2VCdWZmZXJQaXBlLmNwcApAQCAtMjUsMTEgKzI1LDEwIEBACiAgKi8KIAog
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAi
Tmljb3NpYUltYWdlQnVmZmVyUGlwZS5oIgogCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJQaXBlLmgi
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgotI2lu
Y2x1ZGUgIk5pY29zaWFDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5oIgogI2luY2x1ZGUg
Ik5pY29zaWFQbGF0Zm9ybUxheWVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJCdWZmZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
LmgiCkBAIC00NCw2MCArNDMsNiBAQCBuYW1lc3BhY2UgTmljb3NpYSB7CiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCi1uYW1lc3BhY2UgewotY2xhc3MgTmljb3NpYUltYWdlQnVmZmVyUGlw
ZVNvdXJjZSBmaW5hbCA6IHB1YmxpYyBJbWFnZUJ1ZmZlclBpcGU6OlNvdXJjZSwgcHVibGljIENv
bnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQgewotcHVibGljOgotICAgIE5pY29z
aWFJbWFnZUJ1ZmZlclBpcGVTb3VyY2UoKTsKLSAgICB2aXJ0dWFsIH5OaWNvc2lhSW1hZ2VCdWZm
ZXJQaXBlU291cmNlKCk7Ci0KLSAgICAvLyBJbWFnZUJ1ZmZlclBpcGU6OlNvdXJjZSBvdmVycmlk
ZXMuCi0gICAgdm9pZCBoYW5kbGUoUmVmUHRyPEltYWdlQnVmZmVyPiYmKSBmaW5hbDsKLQotICAg
IENvbnRlbnRMYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbmljb3NpYUxh
eWVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIC8vIENvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJ
bXBsOjpDbGllbnQgb3ZlcnJpZGVzLgotICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92
ZXJyaWRlOwotCi0gICAgUmVmUHRyPENvbnRlbnRMYXllcj4gbV9uaWNvc2lhTGF5ZXI7Ci0KLSAg
ICBtdXRhYmxlIExvY2sgbV9pbWFnZUJ1ZmZlckxvY2s7Ci0gICAgUmVmUHRyPEltYWdlQnVmZmVy
PiBtX2ltYWdlQnVmZmVyOwotfTsKLQotY2xhc3MgUGlwZVNvdXJjZURpc3BsYXlEZWxlZ2F0ZSBm
aW5hbCA6IHB1YmxpYyBHcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUgewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8UGlwZVNvdXJjZURpc3BsYXlEZWxlZ2F0ZT4gY3JlYXRlKFJl
ZlB0cjxDb250ZW50TGF5ZXI+JiYgbmljb3NpYUxheWVyKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgUGlwZVNvdXJjZURpc3BsYXlEZWxlZ2F0ZShXVEZNb3ZlKG5pY29zaWFM
YXllcikpKTsKLSAgICB9Ci0KLSAgICAvLyBHcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVs
ZWdhdGUgb3ZlcnJpZGVzLgotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX25pY29zaWFMYXllci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBQ
aXBlU291cmNlRGlzcGxheURlbGVnYXRlKFJlZlB0cjxDb250ZW50TGF5ZXI+JiYgbmljb3NpYUxh
eWVyKQotICAgICAgICA6IG1fbmljb3NpYUxheWVyKFdURk1vdmUobmljb3NpYUxheWVyKSkKLSAg
ICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPENvbnRlbnRMYXllcj4gbV9uaWNvc2lhTGF5ZXI7Ci19
OwotCi1jbGFzcyBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlIGZpbmFsIDogcHVibGljIEltYWdlQnVm
ZmVyUGlwZSB7Ci1wdWJsaWM6Ci0gICAgTmljb3NpYUltYWdlQnVmZmVyUGlwZSgpCi0gICAgICAg
IDogbV9zb3VyY2UoYWRvcHRSZWYoKm5ldyBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlKSkK
LSAgICAgICAgLCBtX2xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUoUGlwZVNvdXJjZURpc3Bs
YXlEZWxlZ2F0ZTo6Y3JlYXRlKG1fc291cmNlLT5wbGF0Zm9ybUxheWVyKCkpKQotICAgIHsKLSAg
ICB9Ci0KLSAgICAvLyBJbWFnZUJ1ZmZlclBpcGUgb3ZlcnJpZGVzLgotICAgIFJlZlB0cjxJbWFn
ZUJ1ZmZlclBpcGU6OlNvdXJjZT4gc291cmNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zb3Vy
Y2UucHRyKCk7IH0KLSAgICBSZWZQdHI8R3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVn
YXRlPiBsYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlKCkgZmluYWwgeyByZXR1cm4gbV9sYXll
ckNvbnRlbnRzRGlzcGxheURlbGVnYXRlLnB0cigpOyB9Ci1wcml2YXRlOgotICAgIFJlZjxOaWNv
c2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlPiBtX3NvdXJjZTsKLSAgICBSZWY8UGlwZVNvdXJjZURp
c3BsYXlEZWxlZ2F0ZT4gbV9sYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlOwotfTsKLQogTmlj
b3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZTo6Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZSgp
CiB7CiAgICAgbV9uaWNvc2lhTGF5ZXIgPSBOaWNvc2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0ZShO
aWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhp
cykpOwpAQCAtMTYzLDYgKzEwOCwyMCBAQCB2b2lkIE5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3Vy
Y2U6OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQogewogfQogCitOaWNvc2lhSW1hZ2VCdWZmZXJQaXBl
OjpOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlKCkKKyAgICA6IG1fc291cmNlKGFkb3B0UmVmKCpuZXcg
Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZSkpCisgICAgLCBtX2xheWVyQ29udGVudHNEaXNw
bGF5RGVsZWdhdGUoTmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZURpc3BsYXlEZWxlZ2F0ZTo6
Y3JlYXRlKG1fc291cmNlLT5wbGF0Zm9ybUxheWVyKCkpKQoreworfQorCitSZWZQdHI8SW1hZ2VC
dWZmZXJQaXBlOjpTb3VyY2U+IE5pY29zaWFJbWFnZUJ1ZmZlclBpcGU6OnNvdXJjZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fc291cmNlLnB0cigpOworfQorCitSZWZQdHI8R3JhcGhpY3NMYXll
ckNvbnRlbnRzRGlzcGxheURlbGVnYXRlPiBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlOjpsYXllckNv
bnRlbnRzRGlzcGxheURlbGVnYXRlKCkKK3sKKyAgICByZXR1cm4gbV9sYXllckNvbnRlbnRzRGlz
cGxheURlbGVnYXRlLnB0cigpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBOaWNvc2lhCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFJbWFn
ZUJ1ZmZlclBpcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEv
Tmljb3NpYUltYWdlQnVmZmVyUGlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4MDVjNDc4OTQ4NWFhYTgzMDJj
MTBhMTIyN2Q1NjEyZGY5YTc0YTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFJbWFnZUJ1ZmZlclBpcGUuaApAQCAtMCww
ICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwLDIwMjIgSWdhbGlhIFMuTAorICog
Q29weXJpZ2h0IChDKSAyMDIwLDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyUGlwZS5oIgorI2luY2x1ZGUgIk5pY29z
aWFDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5oIgorCituYW1lc3BhY2UgTmljb3NpYSB7
CisKK2NsYXNzIE5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3VyY2VEaXNwbGF5RGVsZWdhdGUgZmlu
YWwgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRl
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3VyY2VE
aXNwbGF5RGVsZWdhdGU+IGNyZWF0ZShSZWZQdHI8Q29udGVudExheWVyPiYmIG5pY29zaWFMYXll
cikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5pY29zaWFJbWFnZUJ1ZmZl
clBpcGVTb3VyY2VEaXNwbGF5RGVsZWdhdGUoV1RGTW92ZShuaWNvc2lhTGF5ZXIpKSk7CisgICAg
fQorCisgICAgLy8gR3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlIG92ZXJyaWRl
cy4KKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV9uaWNvc2lhTGF5ZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgTmljb3NpYUltYWdlQnVm
ZmVyUGlwZVNvdXJjZURpc3BsYXlEZWxlZ2F0ZShSZWZQdHI8Q29udGVudExheWVyPiYmIG5pY29z
aWFMYXllcikKKyAgICAgICAgOiBtX25pY29zaWFMYXllcihXVEZNb3ZlKG5pY29zaWFMYXllcikp
CisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxDb250ZW50TGF5ZXI+IG1fbmljb3NpYUxheWVy
OworfTsKKworY2xhc3MgTmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZSA6IHB1YmxpYyBXZWJD
b3JlOjpJbWFnZUJ1ZmZlclBpcGU6OlNvdXJjZSwgcHVibGljIENvbnRlbnRMYXllclRleHR1cmVN
YXBwZXJJbXBsOjpDbGllbnQgeworcHVibGljOgorICAgIE5pY29zaWFJbWFnZUJ1ZmZlclBpcGVT
b3VyY2UoKTsKKyAgICB2aXJ0dWFsIH5OaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlKCk7CisK
KyAgICAvLyBJbWFnZUJ1ZmZlclBpcGU6OlNvdXJjZSBvdmVycmlkZXMuCisgICAgdm9pZCBoYW5k
bGUoUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiYmKSBmaW5hbDsKKworICAgIC8vIENvbnRl
bnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQgb3ZlcnJpZGVzLgorICAgIHZvaWQgc3dh
cEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOworCisgICAgQ29udGVudExheWVyKiBwbGF0Zm9y
bUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9uaWNvc2lhTGF5ZXIuZ2V0KCk7IH0KK3ByaXZhdGU6
CisgICAgUmVmUHRyPENvbnRlbnRMYXllcj4gbV9uaWNvc2lhTGF5ZXI7CisKKyAgICBtdXRhYmxl
IExvY2sgbV9pbWFnZUJ1ZmZlckxvY2s7CisgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVy
PiBtX2ltYWdlQnVmZmVyOworfTsKKworY2xhc3MgTmljb3NpYUltYWdlQnVmZmVyUGlwZSBmaW5h
bCA6IHB1YmxpYyBXZWJDb3JlOjpJbWFnZUJ1ZmZlclBpcGUgeworcHVibGljOgorICAgIE5pY29z
aWFJbWFnZUJ1ZmZlclBpcGUoKTsKKworICAgIC8vIEltYWdlQnVmZmVyUGlwZSBvdmVycmlkZXMu
CisgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyUGlwZTo6U291cmNlPiBzb3VyY2UoKSBj
b25zdCBmaW5hbDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllckNvbnRlbnRzRGlz
cGxheURlbGVnYXRlPiBsYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlKCkgZmluYWw7Citwcml2
YXRlOgorICAgIFJlZjxOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlPiBtX3NvdXJjZTsKKyAg
ICBSZWY8Tmljb3NpYUltYWdlQnVmZmVyUGlwZVNvdXJjZURpc3BsYXlEZWxlZ2F0ZT4gbV9sYXll
ckNvbnRlbnRzRGlzcGxheURlbGVnYXRlOworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xBTkdMRUxh
eWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFw
L05pY29zaWFHQ0dMQU5HTEVMYXllci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDJiZmY2ZTRmMGJjZjVhZTkzNjU2ODk2OGRjMzNhNDAwOGYxN2ViZDMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xBTkdMRUxheWVyLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDIxNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJv
bG9naWNhbCBHcm91cCBCLlYuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgsIDIwMTkgSWdhbGlhIFMu
TC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotICogICAg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJOaWNvc2lhR0NHTEFOR0xFTGF5ZXIuaCIKLQotI2lmIFVTRShOSUNPU0lBKSAm
JiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0KLSNpbmNsdWRlICJBTkdMRUhlYWRlcnMuaCIKLSNpbmNs
dWRlICJMb2dnaW5nLmgiCi0KLW5hbWVzcGFjZSBOaWNvc2lhIHsKLQotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Ci0KLWNvbnN0IGNoYXIqIEdDR0xBTkdMRUxheWVyOjpBTkdMRUNvbnRleHQ6OmVy
cm9yU3RyaW5nKGludCBzdGF0dXNDb2RlKQotewotICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGlu
dCkgPj0gc2l6ZW9mKEVHTGludCksICJFR0xpbnQgbXVzdCBub3QgYmUgd2lkZXIgdGhhbiBpbnQi
KTsKLSAgICBzd2l0Y2ggKHN0YXR1c0NvZGUpIHsKLSNkZWZpbmUgQ0FTRV9SRVRVUk5fU1RSSU5H
KG5hbWUpIGNhc2UgbmFtZTogcmV0dXJuICNuYW1lCi0gICAgICAgIC8vIGh0dHBzOi8vd3d3Lmto
cm9ub3Mub3JnL3JlZ2lzdHJ5L0VHTC9zZGsvZG9jcy9tYW4vaHRtbC9lZ2xHZXRFcnJvci54aHRt
bAotICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX1NVQ0NFU1MpOwotICAgICAgICBDQVNF
X1JFVFVSTl9TVFJJTkcoRUdMX05PVF9JTklUSUFMSVpFRCk7Ci0gICAgICAgIENBU0VfUkVUVVJO
X1NUUklORyhFR0xfQkFEX0FDQ0VTUyk7Ci0gICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xf
QkFEX0FMTE9DKTsKLSAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfQVRUUklCVVRF
KTsKLSAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfQ09OVEVYVCk7Ci0gICAgICAg
IENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX0NPTkZJRyk7Ci0gICAgICAgIENBU0VfUkVUVVJO
X1NUUklORyhFR0xfQkFEX0NVUlJFTlRfU1VSRkFDRSk7Ci0gICAgICAgIENBU0VfUkVUVVJOX1NU
UklORyhFR0xfQkFEX0RJU1BMQVkpOwotICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JB
RF9TVVJGQUNFKTsKLSAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfTUFUQ0gpOwot
ICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9QQVJBTUVURVIpOwotICAgICAgICBD
QVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9OQVRJVkVfUElYTUFQKTsKLSAgICAgICAgQ0FTRV9S
RVRVUk5fU1RSSU5HKEVHTF9CQURfTkFUSVZFX1dJTkRPVyk7Ci0gICAgICAgIENBU0VfUkVUVVJO
X1NUUklORyhFR0xfQ09OVEVYVF9MT1NUKTsKLSN1bmRlZiBDQVNFX1JFVFVSTl9TVFJJTkcKLSAg
ICBkZWZhdWx0OiByZXR1cm4gIlVua25vd24gRUdMIGVycm9yIjsKLSAgICB9Ci19Ci0KLWNvbnN0
IGNoYXIqIEdDR0xBTkdMRUxheWVyOjpBTkdMRUNvbnRleHQ6Omxhc3RFcnJvclN0cmluZygpCi17
Ci0gICAgcmV0dXJuIGVycm9yU3RyaW5nKEVHTF9HZXRFcnJvcigpKTsKLX0KLQotc3RkOjp1bmlx
dWVfcHRyPEdDR0xBTkdMRUxheWVyOjpBTkdMRUNvbnRleHQ+IEdDR0xBTkdMRUxheWVyOjpBTkdM
RUNvbnRleHQ6OmNyZWF0ZUNvbnRleHQoKQotewotICAgIEVHTERpc3BsYXkgZGlzcGxheSA9IEVH
TF9HZXREaXNwbGF5KEVHTF9ERUZBVUxUX0RJU1BMQVkpOwotICAgIGlmIChkaXNwbGF5ID09IEVH
TF9OT19ESVNQTEFZKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEVHTGludCBtYWpv
clZlcnNpb24sIG1pbm9yVmVyc2lvbjsKLSAgICBpZiAoRUdMX0luaXRpYWxpemUoZGlzcGxheSwg
Jm1ham9yVmVyc2lvbiwgJm1pbm9yVmVyc2lvbikgPT0gRUdMX0ZBTFNFKSB7Ci0gICAgICAgIExP
RyhXZWJHTCwgIkVHTERpc3BsYXkgSW5pdGlhbGl6YXRpb24gZmFpbGVkLiIpOwotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgTE9HKFdlYkdMLCAiQU5HTEUgaW5pdGlhbGlzZWQg
TWFqb3I6ICVkIE1pbm9yOiAlZCIsIG1ham9yVmVyc2lvbiwgbWlub3JWZXJzaW9uKTsKLQotICAg
IGNvbnN0IGNoYXIqIGRpc3BsYXlFeHRlbnNpb25zID0gRUdMX1F1ZXJ5U3RyaW5nKGRpc3BsYXks
IEVHTF9FWFRFTlNJT05TKTsKLSAgICBMT0coV2ViR0wsICJFeHRlbnNpb25zOiAlcyIsIGRpc3Bs
YXlFeHRlbnNpb25zKTsKLQotICAgIEVHTENvbmZpZyBjb25maWc7Ci0gICAgRUdMaW50IGNvbmZp
Z0F0dHJpYnV0ZXNbXSA9IHsKLSAgICAgICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5H
TF9FUzJfQklULAotICAgICAgICBFR0xfUkVEX1NJWkUsIDgsCi0gICAgICAgIEVHTF9HUkVFTl9T
SVpFLCA4LAotICAgICAgICBFR0xfQkxVRV9TSVpFLCA4LAotICAgICAgICBFR0xfQUxQSEFfU0la
RSwgOCwKLSAgICAgICAgRUdMX05PTkUKLSAgICB9OwotICAgIEVHTGludCBudW1iZXJDb25maWdz
UmV0dXJuZWQgPSAwOwotICAgIEVHTF9DaG9vc2VDb25maWcoZGlzcGxheSwgY29uZmlnQXR0cmli
dXRlcywgJmNvbmZpZywgMSwgJm51bWJlckNvbmZpZ3NSZXR1cm5lZCk7Ci0gICAgaWYgKG51bWJl
ckNvbmZpZ3NSZXR1cm5lZCAhPSAxKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIkVHTENvbmZpZyBJ
bml0aWFsaXphdGlvbiBmYWlsZWQuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0K
LSAgICBMT0coV2ViR0wsICJHb3QgRUdMQ29uZmlnIik7Ci0KLSAgICBFR0xfQmluZEFQSShFR0xf
T1BFTkdMX0VTX0FQSSk7Ci0gICAgaWYgKEVHTF9HZXRFcnJvcigpICE9IEVHTF9TVUNDRVNTKSB7
Ci0gICAgICAgIExPRyhXZWJHTCwgIlVuYWJsZSB0byBiaW5kIHRvIE9QRU5HTF9FU19BUEkiKTsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgc3RkOjp2ZWN0b3I8RUdMaW50
PiBjb250ZXh0QXR0cmlidXRlczsKLSAgICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdM
X0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04pOwotICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFj
aygyKTsKLSAgICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdMX0NPTlRFWFRfV0VCR0xf
Q09NUEFUSUJJTElUWV9BTkdMRSk7Ci0gICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVH
TF9UUlVFKTsKLSAgICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdMX0VYVEVOU0lPTlNf
RU5BQkxFRF9BTkdMRSk7Ci0gICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9UUlVF
KTsKLSAgICBpZiAoc3Ryc3RyKGRpc3BsYXlFeHRlbnNpb25zLCAiRUdMX0FOR0xFX3Bvd2VyX3By
ZWZlcmVuY2UiKSkgewotICAgICAgICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdMX1BP
V0VSX1BSRUZFUkVOQ0VfQU5HTEUpOwotICAgICAgICAvLyBFR0xfTE9XX1BPV0VSX0FOR0xFIGlz
IHRoZSBkZWZhdWx0LiBDaGFuZ2UgdG8KLSAgICAgICAgLy8gRUdMX0hJR0hfUE9XRVJfQU5HTEUg
aWYgZGVzaXJlZC4KLSAgICAgICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9MT1df
UE9XRVJfQU5HTEUpOwotICAgIH0KLSAgICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdM
X05PTkUpOwotCi0gICAgRUdMQ29udGV4dCBjb250ZXh0ID0gRUdMX0NyZWF0ZUNvbnRleHQoZGlz
cGxheSwgY29uZmlnLCBFR0xfTk9fQ09OVEVYVCwgY29udGV4dEF0dHJpYnV0ZXMuZGF0YSgpKTsK
LSAgICBpZiAoY29udGV4dCA9PSBFR0xfTk9fQ09OVEVYVCkgewotICAgICAgICBMT0coV2ViR0ws
ICJFR0xDb250ZXh0IEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfQotICAgIExPRyhXZWJHTCwgIkdvdCBFR0xDb250ZXh0Iik7Ci0KLSAgICBy
ZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEFOR0xFQ29udGV4dD4obmV3IEFOR0xFQ29udGV4dChkaXNw
bGF5LCBjb25maWcsIGNvbnRleHQsIEVHTF9OT19TVVJGQUNFKSk7Ci19Ci0KLUdDR0xBTkdMRUxh
eWVyOjpBTkdMRUNvbnRleHQ6OkFOR0xFQ29udGV4dChFR0xEaXNwbGF5IGRpc3BsYXksIEVHTENv
bmZpZyBjb25maWcsIEVHTENvbnRleHQgY29udGV4dCwgRUdMU3VyZmFjZSBzdXJmYWNlKQotICAg
IDogbV9kaXNwbGF5KGRpc3BsYXkpCi0gICAgLCBtX2NvbmZpZyhjb25maWcpCi0gICAgLCBtX2Nv
bnRleHQoY29udGV4dCkKLSAgICAsIG1fc3VyZmFjZShzdXJmYWNlKQotewotfQotCi1HQ0dMQU5H
TEVMYXllcjo6QU5HTEVDb250ZXh0Ojp+QU5HTEVDb250ZXh0KCkKLXsKLSAgICBpZiAobV9jb250
ZXh0KSB7Ci0gICAgICAgIEdMX0JpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7Ci0g
ICAgICAgIEVHTF9NYWtlQ3VycmVudChtX2Rpc3BsYXksIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9f
U1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOwotICAgICAgICBFR0xfRGVzdHJveUNvbnRleHQobV9k
aXNwbGF5LCBtX2NvbnRleHQpOwotICAgIH0KLQotICAgIGlmIChtX3N1cmZhY2UpCi0gICAgICAg
IEVHTF9EZXN0cm95U3VyZmFjZShtX2Rpc3BsYXksIG1fc3VyZmFjZSk7Ci19Ci0KLWJvb2wgR0NH
TEFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6bWFrZUNvbnRleHRDdXJyZW50KCkKLXsKLSAgICBB
U1NFUlQobV9jb250ZXh0KTsKLQotICAgIGlmIChFR0xfR2V0Q3VycmVudENvbnRleHQoKSAhPSBt
X2NvbnRleHQpCi0gICAgICAgIHJldHVybiBFR0xfTWFrZUN1cnJlbnQobV9kaXNwbGF5LCBtX3N1
cmZhY2UsIG1fc3VyZmFjZSwgbV9jb250ZXh0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUGxh
dGZvcm1HcmFwaGljc0NvbnRleHRHTCBHQ0dMQU5HTEVMYXllcjo6QU5HTEVDb250ZXh0OjpwbGF0
Zm9ybUNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbnRleHQ7Ci19Ci0KLVBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IEdDR0xBTkdMRUxheWVyOjpBTkdMRUNvbnRleHQ6
OnBsYXRmb3JtRGlzcGxheSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGlzcGxheTsKLX0KLQot
UGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBHQ0dMQU5HTEVMYXllcjo6QU5HTEVDb250
ZXh0OjpwbGF0Zm9ybUNvbmZpZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29uZmlnOwotfQot
Ci1HQ0dMQU5HTEVMYXllcjo6R0NHTEFOR0xFTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xBTkdMRSYg
Y29udGV4dCkKLSAgICA6IEdDR0xMYXllcihjb250ZXh0KQotICAgICwgbV9hbmdsZUNvbnRleHQo
QU5HTEVDb250ZXh0OjpjcmVhdGVDb250ZXh0KCkpCi17Ci19Ci0KLUdDR0xBTkdMRUxheWVyOjp+
R0NHTEFOR0xFTGF5ZXIoKQotewotfQotCi1ib29sIEdDR0xBTkdMRUxheWVyOjptYWtlQ29udGV4
dEN1cnJlbnQoKQotewotICAgIEFTU0VSVChtX2FuZ2xlQ29udGV4dCk7Ci0gICAgcmV0dXJuIG1f
YW5nbGVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotfQotCi1QbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dEdMIEdDR0xBTkdMRUxheWVyOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewot
ICAgIEFTU0VSVChtX2FuZ2xlQ29udGV4dCk7Ci0gICAgcmV0dXJuIG1fYW5nbGVDb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKTsKLX0KLQotUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkg
R0NHTEFOR0xFTGF5ZXI6OnBsYXRmb3JtRGlzcGxheSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1f
YW5nbGVDb250ZXh0KTsKLSAgICByZXR1cm4gbV9hbmdsZUNvbnRleHQtPnBsYXRmb3JtRGlzcGxh
eSgpOwotfQotCi1QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdDR0xBTkdMRUxheWVy
OjpwbGF0Zm9ybUNvbmZpZygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fYW5nbGVDb250ZXh0KTsK
LSAgICByZXR1cm4gbV9hbmdsZUNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBOaWNvc2lhCi0KLSNlbmRpZiAvLyBVU0UoTklDT1NJQSkgJiYgVVNFKFRFWFRV
UkVfTUFQUEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xBTkdMRUxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xFTGF5ZXIuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg3Mzc4MmMzZmQyMmM1MGE1NzUwMDVhYWRl
MGY0ZjAwMGYyYjFhZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNv
c2lhR0NHTEFOR0xFTGF5ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KLSAqIENvcHlyaWdo
dCAoQykgMjAxOCwgMjAxOSBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAg
ICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoTklDT1NJQSkgJiYgVVNFKFRFWFRVUkVfTUFQ
UEVSKQotCi0jaW5jbHVkZSAiR0xDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuaCIKLSNpbmNsdWRlICJOaWNvc2lhR0NHTExheWVyLmgiCi0jaW5jbHVkZSA8bWVt
b3J5PgotCi10eXBlZGVmIHZvaWQgKkVHTENvbmZpZzsKLXR5cGVkZWYgdm9pZCAqRUdMQ29udGV4
dDsKLXR5cGVkZWYgdm9pZCAqRUdMRGlzcGxheTsKLXR5cGVkZWYgdm9pZCAqRUdMU3VyZmFjZTsK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSW50U2l6ZTsKLWNsYXNzIEdMQ29udGV4dDsK
LWNsYXNzIFBsYXRmb3JtRGlzcGxheTsKLX0KLQotbmFtZXNwYWNlIE5pY29zaWEgewotCi1jbGFz
cyBHQ0dMQU5HTEVMYXllciBmaW5hbCA6IHB1YmxpYyBHQ0dMTGF5ZXIgewotICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGNsYXNzIEFOR0xFQ29udGV4dCB7Ci0gICAg
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFOR0xFQ29udGV4dCk7Ci0gICAgcHVibGljOgotICAg
ICAgICBzdGF0aWMgY29uc3QgY2hhciogZXJyb3JTdHJpbmcoaW50IHN0YXR1c0NvZGUpOwotICAg
ICAgICBzdGF0aWMgY29uc3QgY2hhciogbGFzdEVycm9yU3RyaW5nKCk7Ci0KLSAgICAgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxBTkdMRUNvbnRleHQ+IGNyZWF0ZUNvbnRleHQoKTsKLSAgICAg
ICAgdmlydHVhbCB+QU5HTEVDb250ZXh0KCk7Ci0KLSAgICAgICAgYm9vbCBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSNpZiBFTkFCTEUoV0VCR0wpCi0gICAgICAgIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0R0wgcGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7Ci0gICAgICAgIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0R0xEaXNwbGF5IHBsYXRmb3JtRGlzcGxheSgpIGNvbnN0OwotICAgICAgICBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIHBsYXRmb3JtQ29uZmlnKCkgY29uc3Q7Ci0jZW5kaWYK
LQotICAgIHByaXZhdGU6Ci0gICAgICAgIEFOR0xFQ29udGV4dChFR0xEaXNwbGF5LCBFR0xDb25m
aWcsIEVHTENvbnRleHQsIEVHTFN1cmZhY2UpOwotCi0gICAgICAgIEVHTERpc3BsYXkgbV9kaXNw
bGF5IHsgbnVsbHB0ciB9OwotICAgICAgICBFR0xDb25maWcgbV9jb25maWcgeyBudWxscHRyIH07
Ci0gICAgICAgIEVHTENvbnRleHQgbV9jb250ZXh0IHsgbnVsbHB0ciB9OwotICAgICAgICBFR0xT
dXJmYWNlIG1fc3VyZmFjZSB7IG51bGxwdHIgfTsKLSAgICB9OwotCi0gICAgR0NHTEFOR0xFTGF5
ZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRSYpOwotICAgIHZpcnR1YWwgfkdDR0xB
TkdMRUxheWVyKCk7Ci0KLSAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpIG92ZXJyaWRlOwot
ICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgcGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgcGxhdGZvcm1EaXNw
bGF5KCkgY29uc3Q7Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBwbGF0Zm9y
bUNvbmZpZygpIGNvbnN0OwotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QU5HTEVDb250
ZXh0PiBtX2FuZ2xlQ29udGV4dDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIE5pY29zaWEKLQotI2Vu
ZGlmIC8vIFVTRShOSUNPU0lBKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NH
TEFOR0xFUGlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lh
L3RleG1hcC9OaWNvc2lhR0NHTEFOR0xFUGlwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWEzOWQzZGFhNjgx
ZGI5ZWNjZDBjNmY2ZDkzNzY2Mjg0MTBlMjFmZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVQ
aXBlLmNwcApAQCAtMCwwICsxLDI1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRy
b2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE4LCAyMDE5IElnYWxpYSBT
LkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAg
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiTmljb3NpYUdDR0xBTkdMRVBpcGUuaCIKKworI2lmIFVTRShOSUNPU0lBKSAm
JiBVU0UoVEVYVFVSRV9NQVBQRVIpCisKKyNpbmNsdWRlICJBTkdMRUhlYWRlcnMuaCIKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZl
ci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIKKworbmFt
ZXNwYWNlIE5pY29zaWEgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworR0NHTEFOR0xF
UGlwZVNvdXJjZTo6R0NHTEFOR0xFUGlwZVNvdXJjZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFJiBjb250ZXh0KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCit7Cit9CisKK0dDR0xB
TkdMRVBpcGVTb3VyY2U6On5HQ0dMQU5HTEVQaXBlU291cmNlKCkKK3sKK30KKwordm9pZCBHQ0dM
QU5HTEVQaXBlU291cmNlOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKK3sKKyAgICBpZiAobV9jb250
ZXh0LmxheWVyQ29tcG9zaXRlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQu
cHJlcGFyZVRleHR1cmUoKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGltYWdl
QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2NvbnRleHQuZ2V0SW50ZXJuYWxGcmFtZWJ1
ZmZlclNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgMSwgRGVzdGluYXRpb25D
b2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgaWYgKCFpbWFnZUJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzKCppbWFnZUJ1ZmZlci5nZXQoKSk7CisKKyAgICBoYW5kbGUoV1RGTW92ZShp
bWFnZUJ1ZmZlcikpOworCisgICAgbV9jb250ZXh0Lm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKK30K
KworY29uc3QgY2hhciogR0NHTEFOR0xFUGlwZTo6QU5HTEVDb250ZXh0OjplcnJvclN0cmluZyhp
bnQgc3RhdHVzQ29kZSkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihpbnQpID49IHNpemVv
ZihFR0xpbnQpLCAiRUdMaW50IG11c3Qgbm90IGJlIHdpZGVyIHRoYW4gaW50Iik7CisgICAgc3dp
dGNoIChzdGF0dXNDb2RlKSB7CisjZGVmaW5lIENBU0VfUkVUVVJOX1NUUklORyhuYW1lKSBjYXNl
IG5hbWU6IHJldHVybiAjbmFtZQorICAgICAgICAvLyBodHRwczovL3d3dy5raHJvbm9zLm9yZy9y
ZWdpc3RyeS9FR0wvc2RrL2RvY3MvbWFuL2h0bWwvZWdsR2V0RXJyb3IueGh0bWwKKyAgICAgICAg
Q0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9TVUNDRVNTKTsKKyAgICAgICAgQ0FTRV9SRVRVUk5fU1RS
SU5HKEVHTF9OT1RfSU5JVElBTElaRUQpOworICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdM
X0JBRF9BQ0NFU1MpOworICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9BTExPQyk7
CisgICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX0FUVFJJQlVURSk7CisgICAgICAg
IENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX0NPTlRFWFQpOworICAgICAgICBDQVNFX1JFVFVS
Tl9TVFJJTkcoRUdMX0JBRF9DT05GSUcpOworICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdM
X0JBRF9DVVJSRU5UX1NVUkZBQ0UpOworICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JB
RF9ESVNQTEFZKTsKKyAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfU1VSRkFDRSk7
CisgICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX01BVENIKTsKKyAgICAgICAgQ0FT
RV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfUEFSQU1FVEVSKTsKKyAgICAgICAgQ0FTRV9SRVRVUk5f
U1RSSU5HKEVHTF9CQURfTkFUSVZFX1BJWE1BUCk7CisgICAgICAgIENBU0VfUkVUVVJOX1NUUklO
RyhFR0xfQkFEX05BVElWRV9XSU5ET1cpOworICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdM
X0NPTlRFWFRfTE9TVCk7CisjdW5kZWYgQ0FTRV9SRVRVUk5fU1RSSU5HCisgICAgZGVmYXVsdDog
cmV0dXJuICJVbmtub3duIEVHTCBlcnJvciI7CisgICAgfQorfQorCitjb25zdCBjaGFyKiBHQ0dM
QU5HTEVQaXBlOjpBTkdMRUNvbnRleHQ6Omxhc3RFcnJvclN0cmluZygpCit7CisgICAgcmV0dXJu
IGVycm9yU3RyaW5nKEVHTF9HZXRFcnJvcigpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEdDR0xB
TkdMRVBpcGU6OkFOR0xFQ29udGV4dD4gR0NHTEFOR0xFUGlwZTo6QU5HTEVDb250ZXh0OjpjcmVh
dGVDb250ZXh0KCkKK3sKKyAgICBFR0xEaXNwbGF5IGRpc3BsYXkgPSBFR0xfR2V0RGlzcGxheShF
R0xfREVGQVVMVF9ESVNQTEFZKTsKKyAgICBpZiAoZGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBFR0xpbnQgbWFqb3JWZXJzaW9uLCBtaW5v
clZlcnNpb247CisgICAgaWYgKEVHTF9Jbml0aWFsaXplKGRpc3BsYXksICZtYWpvclZlcnNpb24s
ICZtaW5vclZlcnNpb24pID09IEVHTF9GQUxTRSkgeworICAgICAgICBMT0coV2ViR0wsICJFR0xE
aXNwbGF5IEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorICAgIExPRyhXZWJHTCwgIkFOR0xFIGluaXRpYWxpc2VkIE1ham9yOiAlZCBNaW5v
cjogJWQiLCBtYWpvclZlcnNpb24sIG1pbm9yVmVyc2lvbik7CisKKyAgICBjb25zdCBjaGFyKiBk
aXNwbGF5RXh0ZW5zaW9ucyA9IEVHTF9RdWVyeVN0cmluZyhkaXNwbGF5LCBFR0xfRVhURU5TSU9O
Uyk7CisgICAgTE9HKFdlYkdMLCAiRXh0ZW5zaW9uczogJXMiLCBkaXNwbGF5RXh0ZW5zaW9ucyk7
CisKKyAgICBFR0xDb25maWcgY29uZmlnOworICAgIEVHTGludCBjb25maWdBdHRyaWJ1dGVzW10g
PSB7CisgICAgICAgIEVHTF9SRU5ERVJBQkxFX1RZUEUsIEVHTF9PUEVOR0xfRVMyX0JJVCwKKyAg
ICAgICAgRUdMX1JFRF9TSVpFLCA4LAorICAgICAgICBFR0xfR1JFRU5fU0laRSwgOCwKKyAgICAg
ICAgRUdMX0JMVUVfU0laRSwgOCwKKyAgICAgICAgRUdMX0FMUEhBX1NJWkUsIDgsCisgICAgICAg
IEVHTF9OT05FCisgICAgfTsKKyAgICBFR0xpbnQgbnVtYmVyQ29uZmlnc1JldHVybmVkID0gMDsK
KyAgICBFR0xfQ2hvb3NlQ29uZmlnKGRpc3BsYXksIGNvbmZpZ0F0dHJpYnV0ZXMsICZjb25maWcs
IDEsICZudW1iZXJDb25maWdzUmV0dXJuZWQpOworICAgIGlmIChudW1iZXJDb25maWdzUmV0dXJu
ZWQgIT0gMSkgeworICAgICAgICBMT0coV2ViR0wsICJFR0xDb25maWcgSW5pdGlhbGl6YXRpb24g
ZmFpbGVkLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgTE9HKFdlYkdM
LCAiR290IEVHTENvbmZpZyIpOworCisgICAgRUdMX0JpbmRBUEkoRUdMX09QRU5HTF9FU19BUEkp
OworICAgIGlmIChFR0xfR2V0RXJyb3IoKSAhPSBFR0xfU1VDQ0VTUykgeworICAgICAgICBMT0co
V2ViR0wsICJVbmFibGUgdG8gYmluZCB0byBPUEVOR0xfRVNfQVBJIik7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKworICAgIHN0ZDo6dmVjdG9yPEVHTGludD4gY29udGV4dEF0dHJp
YnV0ZXM7CisgICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9DT05URVhUX0NMSUVO
VF9WRVJTSU9OKTsKKyAgICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soMik7CisgICAgY29u
dGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9DT05URVhUX1dFQkdMX0NPTVBBVElCSUxJVFlf
QU5HTEUpOworICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfVFJVRSk7CisgICAg
Y29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9FWFRFTlNJT05TX0VOQUJMRURfQU5HTEUp
OworICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfVFJVRSk7CisgICAgaWYgKHN0
cnN0cihkaXNwbGF5RXh0ZW5zaW9ucywgIkVHTF9BTkdMRV9wb3dlcl9wcmVmZXJlbmNlIikpIHsK
KyAgICAgICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9QT1dFUl9QUkVGRVJFTkNF
X0FOR0xFKTsKKyAgICAgICAgLy8gRUdMX0xPV19QT1dFUl9BTkdMRSBpcyB0aGUgZGVmYXVsdC4g
Q2hhbmdlIHRvCisgICAgICAgIC8vIEVHTF9ISUdIX1BPV0VSX0FOR0xFIGlmIGRlc2lyZWQuCisg
ICAgICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfTE9XX1BPV0VSX0FOR0xFKTsK
KyAgICB9CisgICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9OT05FKTsKKworICAg
IEVHTENvbnRleHQgY29udGV4dCA9IEVHTF9DcmVhdGVDb250ZXh0KGRpc3BsYXksIGNvbmZpZywg
RUdMX05PX0NPTlRFWFQsIGNvbnRleHRBdHRyaWJ1dGVzLmRhdGEoKSk7CisgICAgaWYgKGNvbnRl
eHQgPT0gRUdMX05PX0NPTlRFWFQpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiRUdMQ29udGV4dCBJ
bml0aWFsaXphdGlvbiBmYWlsZWQuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KyAgICBMT0coV2ViR0wsICJHb3QgRUdMQ29udGV4dCIpOworCisgICAgcmV0dXJuIHN0ZDo6dW5p
cXVlX3B0cjxBTkdMRUNvbnRleHQ+KG5ldyBBTkdMRUNvbnRleHQoZGlzcGxheSwgY29uZmlnLCBj
b250ZXh0LCBFR0xfTk9fU1VSRkFDRSkpOworfQorCitHQ0dMQU5HTEVQaXBlOjpBTkdMRUNvbnRl
eHQ6OkFOR0xFQ29udGV4dChFR0xEaXNwbGF5IGRpc3BsYXksIEVHTENvbmZpZyBjb25maWcsIEVH
TENvbnRleHQgY29udGV4dCwgRUdMU3VyZmFjZSBzdXJmYWNlKQorICAgIDogbV9kaXNwbGF5KGRp
c3BsYXkpCisgICAgLCBtX2NvbmZpZyhjb25maWcpCisgICAgLCBtX2NvbnRleHQoY29udGV4dCkK
KyAgICAsIG1fc3VyZmFjZShzdXJmYWNlKQoreworfQorCitHQ0dMQU5HTEVQaXBlOjpBTkdMRUNv
bnRleHQ6On5BTkdMRUNvbnRleHQoKQoreworICAgIGlmIChtX2NvbnRleHQpIHsKKyAgICAgICAg
R0xfQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKTsKKyAgICAgICAgRUdMX01ha2VD
dXJyZW50KG1fZGlzcGxheSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9f
Q09OVEVYVCk7CisgICAgICAgIEVHTF9EZXN0cm95Q29udGV4dChtX2Rpc3BsYXksIG1fY29udGV4
dCk7CisgICAgfQorCisgICAgaWYgKG1fc3VyZmFjZSkKKyAgICAgICAgRUdMX0Rlc3Ryb3lTdXJm
YWNlKG1fZGlzcGxheSwgbV9zdXJmYWNlKTsKK30KKworYm9vbCBHQ0dMQU5HTEVQaXBlOjpBTkdM
RUNvbnRleHQ6Om1ha2VDb250ZXh0Q3VycmVudCgpCit7CisgICAgQVNTRVJUKG1fY29udGV4dCk7
CisKKyAgICBpZiAoRUdMX0dldEN1cnJlbnRDb250ZXh0KCkgIT0gbV9jb250ZXh0KQorICAgICAg
ICByZXR1cm4gRUdMX01ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9zdXJmYWNlLCBtX3N1cmZhY2Us
IG1fY29udGV4dCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250
ZXh0R0wgR0NHTEFOR0xFUGlwZTo6QU5HTEVDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25z
dAoreworICAgIHJldHVybiBtX2NvbnRleHQ7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0
R0xEaXNwbGF5IEdDR0xBTkdMRVBpcGU6OkFOR0xFQ29udGV4dDo6cGxhdGZvcm1EaXNwbGF5KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9kaXNwbGF5OworfQorCitQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dEdMQ29uZmlnIEdDR0xBTkdMRVBpcGU6OkFOR0xFQ29udGV4dDo6cGxhdGZvcm1Db25maWco
KSBjb25zdAoreworICAgIHJldHVybiBtX2NvbmZpZzsKK30KKworR0NHTEFOR0xFUGlwZTo6R0NH
TEFOR0xFUGlwZShHcmFwaGljc0NvbnRleHRHTEFOR0xFJiBjb250ZXh0KQorICAgIDogbV9hbmds
ZUNvbnRleHQoQU5HTEVDb250ZXh0OjpjcmVhdGVDb250ZXh0KCkpCisgICAgLCBtX3NvdXJjZShh
ZG9wdFJlZigqbmV3IEdDR0xBTkdMRVBpcGVTb3VyY2UoY29udGV4dCkpKQorICAgICwgbV9sYXll
ckNvbnRlbnRzRGlzcGxheURlbGVnYXRlKE5pY29zaWFJbWFnZUJ1ZmZlclBpcGVTb3VyY2VEaXNw
bGF5RGVsZWdhdGU6OmNyZWF0ZShtX3NvdXJjZS0+cGxhdGZvcm1MYXllcigpKSkKK3sKK30KKwor
R0NHTEFOR0xFUGlwZTo6fkdDR0xBTkdMRVBpcGUoKQoreworfQorCitib29sIEdDR0xBTkdMRVBp
cGU6Om1ha2VDb250ZXh0Q3VycmVudCgpCit7CisgICAgQVNTRVJUKG1fYW5nbGVDb250ZXh0KTsK
KyAgICByZXR1cm4gbV9hbmdsZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworCit9CisK
K1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgR0NHTEFOR0xFUGlwZTo6cGxhdGZvcm1Db250ZXh0
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9hbmdsZUNvbnRleHQpOworICAgIHJldHVybiBtX2Fu
Z2xlQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250
ZXh0R0xEaXNwbGF5IEdDR0xBTkdMRVBpcGU6OnBsYXRmb3JtRGlzcGxheSgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKG1fYW5nbGVDb250ZXh0KTsKKyAgICByZXR1cm4gbV9hbmdsZUNvbnRleHQtPnBs
YXRmb3JtRGlzcGxheSgpOworfQorCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdD
R0xBTkdMRVBpcGU6OnBsYXRmb3JtQ29uZmlnKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9hbmds
ZUNvbnRleHQpOworICAgIHJldHVybiBtX2FuZ2xlQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7
Cit9CisKK1JlZlB0cjxJbWFnZUJ1ZmZlclBpcGU6OlNvdXJjZT4gR0NHTEFOR0xFUGlwZTo6c291
cmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zb3VyY2UucHRyKCk7Cit9CisKK1JlZlB0cjxH
cmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGU+IEdDR0xBTkdMRVBpcGU6OmxheWVy
Q29udGVudHNEaXNwbGF5RGVsZWdhdGUoKQoreworICAgIHJldHVybiBtX2xheWVyQ29udGVudHNE
aXNwbGF5RGVsZWdhdGUucHRyKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIE5pY29zaWEKKworI2Vu
ZGlmIC8vIFVTRShOSUNPU0lBKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NH
TEFOR0xFUGlwZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90
ZXhtYXAvTmljb3NpYUdDR0xBTkdMRVBpcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZjM1MzM2MDg0MGM1NWI2
NWQ5ZTVjZDc0MDk4ZmViNjYzMDg4OTcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xBTkdMRVBpcGUu
aApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2lj
YWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE4LCAyMDE5IElnYWxpYSBTLkwuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShO
SUNPU0lBKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisKKyNpbmNsdWRlICJHTENvbnRleHQuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEFOR0xFLmgiCisjaW5jbHVkZSAiTmljb3NpYUlt
YWdlQnVmZmVyUGlwZS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKwordHlwZWRlZiB2b2lkICpFR0xD
b25maWc7Cit0eXBlZGVmIHZvaWQgKkVHTENvbnRleHQ7Cit0eXBlZGVmIHZvaWQgKkVHTERpc3Bs
YXk7Cit0eXBlZGVmIHZvaWQgKkVHTFN1cmZhY2U7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2Ns
YXNzIEludFNpemU7CitjbGFzcyBHTENvbnRleHQ7CitjbGFzcyBQbGF0Zm9ybURpc3BsYXk7Cit9
CisKK25hbWVzcGFjZSBOaWNvc2lhIHsKKworY2xhc3MgR0NHTEFOR0xFUGlwZVNvdXJjZSA6IHB1
YmxpYyBOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlIHsKK3B1YmxpYzoKKyAgICBHQ0dMQU5H
TEVQaXBlU291cmNlKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEUmKTsKKyAgICB2aXJ0
dWFsIH5HQ0dMQU5HTEVQaXBlU291cmNlKCk7CisKKyAgICAvLyBDb250ZW50TGF5ZXJUZXh0dXJl
TWFwcGVySW1wbDo6Q2xpZW50IG92ZXJyaWRlcy4KKyAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVk
ZWQoKSBmaW5hbDsKK3ByaXZhdGU6CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdM
RSYgbV9jb250ZXh0OworfTsKKworY2xhc3MgR0NHTEFOR0xFUGlwZSBmaW5hbCA6IHB1YmxpYyBX
ZWJDb3JlOjpJbWFnZUJ1ZmZlclBpcGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIGNsYXNzIEFOR0xFQ29udGV4dCB7CisgICAgICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEFOR0xFQ29udGV4dCk7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgY29uc3Qg
Y2hhciogZXJyb3JTdHJpbmcoaW50IHN0YXR1c0NvZGUpOworICAgICAgICBzdGF0aWMgY29uc3Qg
Y2hhciogbGFzdEVycm9yU3RyaW5nKCk7CisKKyAgICAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxBTkdMRUNvbnRleHQ+IGNyZWF0ZUNvbnRleHQoKTsKKyAgICAgICAgdmlydHVhbCB+QU5HTEVD
b250ZXh0KCk7CisKKyAgICAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNpZiBFTkFC
TEUoV0VCR0wpCisgICAgICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgcGxhdGZvcm1Db250
ZXh0KCkgY29uc3Q7CisgICAgICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IHBs
YXRmb3JtRGlzcGxheSgpIGNvbnN0OworICAgICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdM
Q29uZmlnIHBsYXRmb3JtQ29uZmlnKCkgY29uc3Q7CisjZW5kaWYKKworICAgIHByaXZhdGU6Cisg
ICAgICAgIEFOR0xFQ29udGV4dChFR0xEaXNwbGF5LCBFR0xDb25maWcsIEVHTENvbnRleHQsIEVH
TFN1cmZhY2UpOworCisgICAgICAgIEVHTERpc3BsYXkgbV9kaXNwbGF5IHsgbnVsbHB0ciB9Owor
ICAgICAgICBFR0xDb25maWcgbV9jb25maWcgeyBudWxscHRyIH07CisgICAgICAgIEVHTENvbnRl
eHQgbV9jb250ZXh0IHsgbnVsbHB0ciB9OworICAgICAgICBFR0xTdXJmYWNlIG1fc3VyZmFjZSB7
IG51bGxwdHIgfTsKKyAgICB9OworCisgICAgR0NHTEFOR0xFUGlwZShXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTEFOR0xFJik7CisgICAgdmlydHVhbCB+R0NHTEFOR0xFUGlwZSgpOworCisgICAg
Ym9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdM
IHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0OworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xE
aXNwbGF5IHBsYXRmb3JtRGlzcGxheSgpIGNvbnN0OworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0R0xDb25maWcgcGxhdGZvcm1Db25maWcoKSBjb25zdDsKKworICAgIC8vIEltYWdlQnVmZmVy
UGlwZSBvdmVycmlkZXMuCisgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyUGlwZTo6U291
cmNlPiBzb3VyY2UoKSBjb25zdCBmaW5hbDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NM
YXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlPiBsYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRl
KCkgZmluYWw7CisKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPEFOR0xFQ29udGV4dD4g
bV9hbmdsZUNvbnRleHQ7CisgICAgUmVmPEdDR0xBTkdMRVBpcGVTb3VyY2U+IG1fc291cmNlOwor
ICAgIFJlZjxOaWNvc2lhSW1hZ2VCdWZmZXJQaXBlU291cmNlRGlzcGxheURlbGVnYXRlPiBtX2xh
eWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBOaWNvc2lh
CisKKyNlbmRpZiAvLyBVU0UoTklDT1NJQSkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmlj
b3NpYUdDR0xMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNv
c2lhL3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmNwcAppbmRleCAyY2UyNDdjNmRkZjRiMzZkNzBj
M2U2YTY0NzljZjYwNmM3OTZlMjA1Li40ZTRhMmIzYmU1MmRjMzY1NzAwYzdiNTljOTU1MzIyYWRl
ZTg2NjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNv
c2lhL3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTExheWVyLmNwcApAQCAtMjks
NyArMjksNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk5pY29zaWFHQ0dMTGF5
ZXIuaCIKIAotI2lmIEVOQUJMRShXRUJHTCkgJiYgVVNFKE5JQ09TSUEpICYmIFVTRShURVhUVVJF
X01BUFBFUikKKyNpZiBFTkFCTEUoV0VCR0wpICYmIFVTRShOSUNPU0lBKSAmJiBVU0UoVEVYVFVS
RV9NQVBQRVIpICYmICFVU0UoQU5HTEUpCiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCkBAIC0zNywyMCArMzcsMTMgQEAKICNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmgiCiAjZW5kaWYKIAotI2lmIFVT
RShBTkdMRSkKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2lmIFVTRShDQUlSTykKLSNpbmNs
dWRlIDxjYWlyby5oPgotI2VuZGlmCi0jZW5kaWYKLQogI2luY2x1ZGUgIkdMQ29udGV4dC5oIgog
CiBuYW1lc3BhY2UgTmljb3NpYSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1HQ0dM
TGF5ZXI6OkdDR0xMYXllcihHcmFwaGljc0NvbnRleHRHTFR5cGUmIGNvbnRleHQpCitHQ0dMTGF5
ZXI6OkdDR0xMYXllcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCkKICAgICA6IG1f
Y29udGV4dChjb250ZXh0KQogICAgICwgbV9jb250ZW50TGF5ZXIoTmljb3NpYTo6Q29udGVudExh
eWVyOjpjcmVhdGUoTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OmNyZWF0
ZUZhY3RvcnkoKnRoaXMpKSkKIHsKQEAgLTgyLDY0ICs3NSwxNSBAQCB2b2lkIEdDR0xMYXllcjo6
c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCiAKICAgICBtX2NvbnRleHQucHJlcGFyZVRleHR1cmUoKTsK
ICAgICBJbnRTaXplIHRleHR1cmVTaXplKG1fY29udGV4dC5tX2N1cnJlbnRXaWR0aCwgbV9jb250
ZXh0Lm1fY3VycmVudEhlaWdodCk7Ci0jaWYgVVNFKEFOR0xFKQotICAgIFJlZlB0cjxXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRleHR1cmVT
aXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAoIWltYWdlQnVmZmVyKQot
ICAgICAgICByZXR1cm47CiAKLSAgICBtX2NvbnRleHQucGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9D
YW52YXMoKmltYWdlQnVmZmVyLmdldCgpKTsKLSNlbHNlCiAgICAgVGV4dHVyZU1hcHBlckdMOjpG
bGFncyBmbGFncyA9IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkRmxpcFRleHR1cmU7CiAgICAgaWYg
KG1fY29udGV4dC5jb250ZXh0QXR0cmlidXRlcygpLmFscGhhKQogICAgICAgICBmbGFncyB8PSBU
ZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kOwotI2VuZGlmCiAKICAgICB7CiAgICAgICAgIGF1
dG8mIHByb3h5ID0gZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlcklt
cGw+KG1fY29udGVudExheWVyLT5pbXBsKCkpLnByb3h5KCk7Ci0jaWYgVVNFKEFOR0xFKQotICAg
ICAgICAvLyBGSVhNRTogVGhpcyBpcyBkdXBsaWNhdGVkIGZyb20gTmljb3NpYUltYWdlQnVmZmVy
UGlwZSwgYnV0IHNob3VsZCBiZSBzaGFyZWQgc29tZWhvdy4KLSAgICAgICAgYXV0byBwcm94eU9w
ZXJhdGlvbiA9Ci0gICAgICAgICAgICBbdGhpcywgaW1hZ2VCdWZmZXIgPSBXVEZNb3ZlKGltYWdl
QnVmZmVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgYXV0byBuYXRpdmVJbWFnZSA9
IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUoaW1hZ2VCdWZmZXIpKTsK
LSAgICAgICAgICAgICAgICBpZiAoIW5hdGl2ZUltYWdlKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBhdXRvIHNpemUgPSBuYXRpdmVJbWFnZS0+c2l6ZSgp
OwotICAgICAgICAgICAgICAgIGF1dG8gZmxhZ3MgPSBuYXRpdmVJbWFnZS0+aGFzQWxwaGEoKSA/
IEJpdG1hcFRleHR1cmU6OlN1cHBvcnRzQWxwaGEgOiBCaXRtYXBUZXh0dXJlOjpOb0ZsYWc7Ci0K
LSAgICAgICAgICAgICAgICBhdXRvJiBwcm94eSA9IGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRM
YXllclRleHR1cmVNYXBwZXJJbXBsPihtX2NvbnRlbnRMYXllci0+aW1wbCgpKS5wcm94eSgpOwot
ICAgICAgICAgICAgICAgIExvY2tlciBsb2NrZXIgeyBwcm94eS5sb2NrKCkgfTsKLQotICAgICAg
ICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZl
cj4gbGF5ZXJCdWZmZXIgPSBwcm94eS5nZXRBdmFpbGFibGVCdWZmZXIoc2l6ZSwgZmxhZ3MpOwot
Ci0gICAgICAgICAgICAgICAgaWYgKCFsYXllckJ1ZmZlcikgewotICAgICAgICAgICAgICAgICAg
ICBhdXRvIHRleHR1cmUgPSBCaXRtYXBUZXh0dXJlR0w6OmNyZWF0ZShUZXh0dXJlTWFwcGVyQ29u
dGV4dEF0dHJpYnV0ZXM6OmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+cmVz
ZXQoc2l6ZSwgZmxhZ3MpOwotICAgICAgICAgICAgICAgICAgICBsYXllckJ1ZmZlciA9IG1ha2VV
bmlxdWU8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KFdURk1vdmUodGV4dHVyZSks
IG5hdGl2ZUltYWdlLT5oYXNBbHBoYSgpID8gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCA6
IFRleHR1cmVNYXBwZXJHTDo6Tm9GbGFnKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSNpZiBVU0Uo
Q0FJUk8pCi0gICAgICAgICAgICAgICAgYXV0byogc3VyZmFjZSA9IG5hdGl2ZUltYWdlLT5wbGF0
Zm9ybUltYWdlKCkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgYXV0byogaW1hZ2VEYXRhID0gY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlKTsKLSAgICAgICAgICAgICAgICBsYXll
ckJ1ZmZlci0+dGV4dHVyZUdMKCkudXBkYXRlQ29udGVudHMoaW1hZ2VEYXRhLCBJbnRSZWN0KElu
dFBvaW50KCksIHNpemUpLCBJbnRQb2ludCgpLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJp
ZGUoc3VyZmFjZSkpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwot
I2VuZGlmCi0KLSAgICAgICAgICAgICAgICBwcm94eS5wdXNoTmV4dEJ1ZmZlcihXVEZNb3ZlKGxh
eWVyQnVmZmVyKSk7Ci0KLSAgICAgICAgICAgICAgICBtX2NvbnRleHQubWFya0xheWVyQ29tcG9z
aXRlZCgpOwotICAgICAgICAgICAgfTsKLQotICAgICAgICBwcm94eS5zY2hlZHVsZVVwZGF0ZU9u
Q29tcG9zaXRvclRocmVhZChbcHJveHlPcGVyYXRpb25dICgpIG11dGFibGUgewotICAgICAgICAg
ICAgcHJveHlPcGVyYXRpb24oKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgcmV0dXJuOwotI2Vs
c2UKICAgICAgICAgTG9ja2VyIGxvY2tlciB7IHByb3h5LmxvY2soKSB9OwogICAgICAgICBwcm94
eS5wdXNoTmV4dEJ1ZmZlcihtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVm
ZmVyPihtX2NvbnRleHQubV9jb21wb3NpdG9yVGV4dHVyZSwgdGV4dHVyZVNpemUsIGZsYWdzLCBt
X2NvbnRleHQubV9pbnRlcm5hbENvbG9yRm9ybWF0KSk7Ci0jZW5kaWYKICAgICB9CiAKICAgICBt
X2NvbnRleHQubWFya0xheWVyQ29tcG9zaXRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xMYXllci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdD
R0xMYXllci5oCmluZGV4IDNjMGEwMjM0YTRlNmZmYzljZDUxOGFjMzZhNjY0MjU2ZTgxOGU3ZGMu
LjE5NjZjNzlmY2JiYWRlZTM2ZDcwYWQ1ZjBhNGY3MGVkN2YzMWRjMzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dM
TGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3Rl
eG1hcC9OaWNvc2lhR0NHTExheWVyLmgKQEAgLTI4LDE3ICsyOCwxMiBAQAogCiAjcHJhZ21hIG9u
Y2UKIAotI2lmIEVOQUJMRShXRUJHTCkgJiYgVVNFKE5JQ09TSUEpICYmIFVTRShURVhUVVJFX01B
UFBFUikKKyNpZiBFTkFCTEUoV0VCR0wpICYmIFVTRShOSUNPU0lBKSAmJiBVU0UoVEVYVFVSRV9N
QVBQRVIpICYmICFVU0UoQU5HTEUpCiAKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5H
TC5oIgogI2luY2x1ZGUgIk5pY29zaWFDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5oIgog
I2luY2x1ZGUgPG1lbW9yeT4KIAotI2lmIFVTRShBTkdMRSkKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRHTEFOR0xFLmgiCi0jZWxzZQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
LmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR0xDb250ZXh0OwogfQpA
QCAtNDgsMTIgKzQzLDcgQEAgbmFtZXNwYWNlIE5pY29zaWEgewogY2xhc3MgR0NHTExheWVyIDog
cHVibGljIENvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotI2lmIFVTRShBTkdMRSkKLSAgICB1c2luZyBH
cmFwaGljc0NvbnRleHRHTFR5cGUgPSBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOwot
I2Vsc2UKLSAgICB1c2luZyBHcmFwaGljc0NvbnRleHRHTFR5cGUgPSBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDsKLSNlbmRpZgotICAgIGV4cGxpY2l0IEdDR0xMYXllcihHcmFwaGlj
c0NvbnRleHRHTFR5cGUmKTsKKyAgICBleHBsaWNpdCBHQ0dMTGF5ZXIoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wmKTsKIAogICAgIHZpcnR1YWwgfkdDR0xMYXllcigpOwogCkBAIC02
NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVy
cmlkZTsKIAogcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHRHTFR5cGUmIG1fY29udGV4dDsK
KyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgbV9jb250ZXh0OwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHTENvbnRleHQ+IG1fZ2xDb250ZXh0OwogCiAgICAgUmVm
PENvbnRlbnRMYXllcj4gbV9jb250ZW50TGF5ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0Nv
bnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCmluZGV4IDc1MGE4NGFmNjM4MmM1NDEzMGNmMzZlODZk
OWJjOGM3NjA0Y2ZiY2IuLjUzZWQ3NGFkZGFmZjRhNzkyZmU2MGMwOTU1OTRjYzYwYmQ4MWNmNWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFw
aGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCkBA
IC02MCw3ICs2MCw3IEBACiAKICNpZiBVU0UoTklDT1NJQSkKICNpZiBVU0UoQU5HTEUpCi0jaW5j
bHVkZSAiTmljb3NpYUdDR0xBTkdMRUxheWVyLmgiCisjaW5jbHVkZSAiTmljb3NpYUdDR0xBTkdM
RVBpcGUuaCIKICNlbHNlCiAjaW5jbHVkZSAiTmljb3NpYUdDR0xMYXllci5oIgogI2VuZGlmCkBA
IC0xMTYsNyArMTE2LDExIEBAIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6fkdyYXBo
aWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcigpID0gZGVmYXVsdDsKIEdyYXBoaWNzQ29udGV4dEdM
VGV4dHVyZU1hcHBlcjo6R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyKEdyYXBoaWNzQ29u
dGV4dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCiAgICAgOiBHcmFwaGljc0NvbnRleHRHTFRl
eHR1cmVNYXBwZXJCYXNlKFdURk1vdmUoYXR0cmlidXRlcykpCiAjaWYgVVNFKE5JQ09TSUEpCisj
aWYgVVNFKEFOR0xFKQorICAgICwgbV9sYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlKCptX25p
Y29zaWFQaXBlLT5sYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlKCkpCisjZWxzZQogICAgICwg
bV9sYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlKFBsYXRmb3JtTGF5ZXJEaXNwbGF5RGVsZWdh
dGU6OmNyZWF0ZSgmbV9uaWNvc2lhTGF5ZXItPmNvbnRlbnRMYXllcigpKSkKKyNlbmRpZgogI2Vs
c2UKICAgICAsIG1fbGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZShQbGF0Zm9ybUxheWVyRGlz
cGxheURlbGVnYXRlOjpjcmVhdGUobV90ZXhtYXBMYXllci5nZXQoKSkpCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0Nv
bnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEUuY3BwCmlu
ZGV4IGNmYWQ4NDM4ZTg0NTk1MDEyZWYxOTMzZmY2YmY4MzdmMjUyNDZhNzUuLmExZTFlODQ0OTkz
ZjBkMzRlMTM3M2RmNGI1M2I3NjExZDRiOTM4NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJB
TkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFLmNwcApAQCAtMzYsNyArMzYsNyBAQAog
I2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAKICNpZiBVU0UoTklDT1NJQSkKLSNpbmNsdWRlICJO
aWNvc2lhR0NHTEFOR0xFTGF5ZXIuaCIKKyNpbmNsdWRlICJOaWNvc2lhR0NHTEFOR0xFUGlwZS5o
IgogI2Vsc2UKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIuaCIKICNl
bmRpZgpAQCAtNTAsNyArNTAsNyBAQCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpHcmFwaGljc0Nv
bnRleHRHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRyaQogICAgIG1faXNG
b3JXZWJHTDIgPSBhdHRyaWJ1dGVzLndlYkdMVmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHRHTFdl
YkdMVmVyc2lvbjo6V2ViR0wyOwogI2VuZGlmCiAjaWYgVVNFKE5JQ09TSUEpCi0gICAgbV9uaWNv
c2lhTGF5ZXIgPSBtYWtlVW5pcXVlPE5pY29zaWE6OkdDR0xBTkdMRUxheWVyPigqdGhpcyk7Cisg
ICAgbV9uaWNvc2lhUGlwZSA9IG1ha2VVbmlxdWU8Tmljb3NpYTo6R0NHTEFOR0xFUGlwZT4oKnRo
aXMpOwogI2Vsc2UKICAgICBtX3RleG1hcExheWVyID0gbWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVy
R0NHTFBsYXRmb3JtTGF5ZXI+KCp0aGlzKTsKICNlbmRpZgpAQCAtMTQ0LDcgKzE0NCw3IEBAIEdy
YXBoaWNzQ29udGV4dEdMQU5HTEU6On5HcmFwaGljc0NvbnRleHRHTEFOR0xFKCkKIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBsYXRmb3Jt
RGlzcGxheSgpIGNvbnN0CiB7CiAjaWYgVVNFKE5JQ09TSUEpCi0gICAgcmV0dXJuIG1fbmljb3Np
YUxheWVyLT5wbGF0Zm9ybURpc3BsYXkoKTsKKyAgICByZXR1cm4gbV9uaWNvc2lhUGlwZS0+cGxh
dGZvcm1EaXNwbGF5KCk7CiAjZWxzZQogICAgIHJldHVybiBtX3RleG1hcExheWVyLT5wbGF0Zm9y
bURpc3BsYXkoKTsKICNlbmRpZgpAQCAtMTUzLDcgKzE1Myw3IEBAIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0R0xEaXNwbGF5IEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OnBsYXRmb3JtRGlzcGxheSgp
IGNvbnN0CiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEU6OnBsYXRmb3JtQ29uZmlnKCkgY29uc3QKIHsKICNpZiBVU0UoTklDT1NJQSkKLSAgICBy
ZXR1cm4gbV9uaWNvc2lhTGF5ZXItPnBsYXRmb3JtQ29uZmlnKCk7CisgICAgcmV0dXJuIG1fbmlj
b3NpYVBpcGUtPnBsYXRmb3JtQ29uZmlnKCk7CiAjZWxzZQogICAgIHJldHVybiBtX3RleG1hcExh
eWVyLT5wbGF0Zm9ybUNvbmZpZygpOwogI2VuZGlmCkBAIC0xNjIsNyArMTYyLDcgQEAgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwbGF0Zm9y
bUNvbmZpZygpIGNvbnN0CiBib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VDb250ZXh0
Q3VycmVudCgpCiB7CiAjaWYgVVNFKE5JQ09TSUEpCi0gICAgcmV0dXJuIG1fbmljb3NpYUxheWVy
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gbV9uaWNvc2lhUGlwZS0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CiAjZWxzZQogICAgIHJldHVybiBtX3RleG1hcExheWVyLT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKICNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>