<?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>236769</bug_id>
          
          <creation_ts>2022-02-17 04:08:05 -0800</creation_ts>
          <short_desc>[GTK][WPE][WC] Move ANGLE context initialisation to GraphicsContextGLTextureMapper::initialize</short_desc>
          <delta_ts>2022-02-28 01:00:22 -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>WebGL</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=236664</see_also>
          <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>
          
          <blocked>221664</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kimmo Kinnunen">kkinnunen</reporter>
          <assigned_to name="Alejandro G. Castro">alex</assigned_to>
          <cc>alex</cc>
    
    <cc>annulen</cc>
    
    <cc>clord</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kbr</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zdobersek</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1842813</commentid>
    <comment_count>0</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-02-17 04:08:05 -0800</bug_when>
    <thetext>[GTK][WPE] Move ANGLE context initialisation to GraphicsContextGLTextureMapper::initialize

The long-term plan would be to share more code in GraphicsContextGLANGLE between Cocoa and non-Cocoa.
The long-term plan would be to minimise the ifdefs in GraphicsContextGLANGLE.

The first step in this direction would be to move the context initialisation and holding to GraphicsContextGLTextureMapper, away from GCGLANGLELayer::ANGLEContext and the layer classes.
Later on, Cocoa and non-Cocoa can merge their ::initialize.

The idea would be to have 
GraphicsContextGLANGLE::
    GCGLDisplay m_displayObj { nullptr };
    GCGLContext m_contextObj { nullptr };
    GCGLConfig m_configObj { nullptr };</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843275</commentid>
    <comment_count>1</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-02-17 21:34:02 -0800</bug_when>
    <thetext>GTK and WPE are still using !USE(ANGLE) code.
Will GCGLLayer move into GraphicsContextGLOpenGL?

Will they remove !USE(ANGLE) code soon?

Who will do this? You? Me for WinCairo part?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843340</commentid>
    <comment_count>2</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2022-02-18 02:37:07 -0800</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #1)
&gt; GTK and WPE are still using !USE(ANGLE) code.
&gt; Will GCGLLayer move into GraphicsContextGLOpenGL?
&gt; 
&gt; Will they remove !USE(ANGLE) code soon?
&gt; 
&gt; Who will do this? You? Me for WinCairo part?

Good question! Thanks for bringing this up.

We need to support the !USE(ANGLE) code path for WPE and GTK at least for the next release until we make the new code path default and there is no regression, that means probably 2 more releases, around 1 year. Release is going to happen next week and we do not plan to make it the default for the moment, it is too early.

We can remove the !USE(ANGLE) &amp;&amp; ENABLE(WEBGL2), that is something we are not going to use and I think Apple ports are not using. I can open a bug and remove that code. And we are all for sharing more code which I understood this bug is about when Kimmo told us.

We have more plans to try to use ANGLE even more but that is something we still do not know how it will work, so it is more long term.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843558</commentid>
    <comment_count>3</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-02-18 12:28:10 -0800</bug_when>
    <thetext>For purposes of this bug:
If I&apos;m not mistaken questions about GraphicsContextGLOpenGL and !USE(ANGLE) should not affect the task here, and should not block this.
E.g. move the initialization code from GCGLANGLELayer::ANGLEContext to GraphicsContextGLTextureMapper ANGLE variant. From general platform code, ANGLE parts should be now quite isolated from the legacy code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844129</commentid>
    <comment_count>4</comment_count>
      <attachid>452714</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-02-20 23:23:41 -0800</bug_when>
    <thetext>Created attachment 452714
WIP patch

I created a patch for WinCairo.
Because WinCairo and Coordinated Graphics share the code,
It&apos;s difficult to keep Coordinated Graphics part untouched.
Alex, could you take a look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845089</commentid>
    <comment_count>5</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2022-02-23 04:54:02 -0800</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #4)
&gt; Created attachment 452714 [details]
&gt; WIP patch
&gt; 
&gt; I created a patch for WinCairo.
&gt; Because WinCairo and Coordinated Graphics share the code,
&gt; It&apos;s difficult to keep Coordinated Graphics part untouched.
&gt; Alex, could you take a look?

Thanks for the patch! I&apos;ll update with the changes we need.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845750</commentid>
    <comment_count>6</comment_count>
      <attachid>453137</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2022-02-24 14:18:03 -0800</bug_when>
    <thetext>Created attachment 453137
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845753</commentid>
    <comment_count>7</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2022-02-24 14:21:15 -0800</bug_when>
    <thetext>I&apos;ve updated and tested the patch for GTK with ANGLE and with system OpenGL. I&apos;ve added some changes to the context configuration we are using, hopefully they are ok for WinCairo, in case they are not we can use some ifdef in the GraphicsContextGLTextureMapper::platformInitializeContext function.

I did not test in WPE with both options but nowadays it is very aligned with GTK, but bots will tell us :-).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845830</commentid>
    <comment_count>8</comment_count>
      <attachid>453137</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-02-24 16:28:46 -0800</bug_when>
    <thetext>Comment on attachment 453137
Patch

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

Thank you.

&gt; Source/WebCore/platform/graphics/texmap/GraphicsContextGLTextureMapperANGLE.cpp:68
&gt; +        EGL_PLATFORM_ANGLE_NATIVE_PLATFORM_TYPE_ANGLE, EGL_PLATFORM_SURFACELESS_MESA,

WinCairo is failing to get a platform display because it&apos;s using D3D renderer not OpenGL renderer.
WinCairo needs to condition out these 3 lines. What is a good condition for it? !OS(WINDOWS), !PLATFORM(WIN) or USE(NICOSIA)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845834</commentid>
    <comment_count>9</comment_count>
      <attachid>453156</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-02-24 16:35:31 -0800</bug_when>
    <thetext>Created attachment 453156
Fix WinCairo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845953</commentid>
    <comment_count>10</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2022-02-25 03:18:21 -0800</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #8)
&gt; Comment on attachment 453137 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=453137&amp;action=review
&gt; 
&gt; Thank you.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/GraphicsContextGLTextureMapperANGLE.cpp:68
&gt; &gt; +        EGL_PLATFORM_ANGLE_NATIVE_PLATFORM_TYPE_ANGLE, EGL_PLATFORM_SURFACELESS_MESA,
&gt; 
&gt; WinCairo is failing to get a platform display because it&apos;s using D3D
&gt; renderer not OpenGL renderer.
&gt; WinCairo needs to condition out these 3 lines. What is a good condition for
&gt; it? !OS(WINDOWS), !PLATFORM(WIN) or USE(NICOSIA)?

Great! Thanks! :-) One of those probably will be ok, not sure if there is any preference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845955</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2022-02-25 03:24:32 -0800</bug_when>
    <thetext>Nice work, I&apos;m just building and testing now before doing the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845961</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2022-02-25 03:50:16 -0800</bug_when>
    <thetext>Just an initial observation of something that needs to be fixed, this patch seems to have some kind of corruption or race when resizing contexts - in a debug build with this patch applied and ANGLE enabled, if you go to https://tiny.vision/demos/Tiny3D/Wasm/Tiny3D.html and resize the window a bit, you&apos;ll get a &quot;corrupted double-linked list&quot; message in the terminal, followed by a crash. This doesn&apos;t seem to happen without the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846005</commentid>
    <comment_count>13</comment_count>
      <attachid>453156</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2022-02-25 06:53:48 -0800</bug_when>
    <thetext>Comment on attachment 453156
Fix WinCairo

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

I take it back, I can reproduce the crash pre-patch so it would appear unrelated. I also tested this on WPE, compiling both with and without ANGLE enabled and it built and functioned correctly. LGTM!

&gt; Source/WebCore/platform/graphics/texmap/GraphicsContextGLTextureMapper.h:67
&gt; +    bool platformInitializeContext() final;
&gt; +#endif
&gt; +    bool platformInitialize() final;

It feels weird to me that these are two separate functions, but that&apos;s pre-existing so I assume there&apos;s a reason. I think at some point it would be good to consolidate here, we have initialize, platformInitialize and platformInitializeContext - this feels like at least one too many functions and certainly doesn&apos;t make for easy reading.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846255</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-02-25 18:04:43 -0800</bug_when>
    <thetext>Committed r290540 (247818@main): &lt;https://commits.webkit.org/247818@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 453156.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846256</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-02-25 18:05:24 -0800</bug_when>
    <thetext>&lt;rdar://problem/89501470&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846562</commentid>
    <comment_count>16</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-02-28 01:00:22 -0800</bug_when>
    <thetext>Thanks! Great work everybody!

&gt; It feels weird to me that these are two separate functions, but that&apos;s
&gt; pre-existing so I assume there&apos;s a reason. I think at some point it would be
&gt; good to consolidate here, we have initialize, platformInitialize and
&gt; platformInitializeContext - this feels like at least one too many functions
&gt; and certainly doesn&apos;t make for easy reading.

Some of the functions certainly can be removed once more code is shared.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452714</attachid>
            <date>2022-02-20 23:23:41 -0800</date>
            <delta_ts>2022-02-24 14:17:53 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>angle-context.2.diff</filename>
            <type>text/plain</type>
            <size>31702</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2Ug
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCmluZGV4IGUzMmYy
NmQ1MjdkZi4uNGUwYWViZTE5NzQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9UZXh0dXJlTWFwcGVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1
cmVNYXBwZXIuY21ha2UKQEAgLTYsNyArNiw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFU
RV9JTkNMVURFX0RJUkVDVE9SSUVTCiBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFBbmltYXRpb24uY3BwCiAKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvQU5HTEVDb250ZXh0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9CaXRtYXBUZXh0dXJlUG9vbC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3Jh
cGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcApAQCAtMjIsNyArMjEsNiBAQCBsaXN0KEFQ
UEVORCBXZWJDb3JlX1NPVVJDRVMKIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUFuaW1hdGlv
bi5oCiAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQU5HTEVDb250ZXh0LmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0NsaXBTdGFjay5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xF
LmgKaW5kZXggN2YyN2NkYzgyNjY1Li5iMzkxZDk2MDE5ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRl
eHRHTEFOR0xFLmgKQEAgLTUwMSw2ICs1MDEsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RkOjp1bmlx
dWVfcHRyPEVHTEltYWdlQmFja2luZz4gbV9jb21wb3NpdG9yVGV4dHVyZUJhY2tpbmc7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEVHTEltYWdlQmFja2luZz4gbV9pbnRlcm1lZGlhdGVUZXh0dXJlQmFj
a2luZzsKICNlbGlmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBHQ0dMRGlzcGxheSBtX2Rpc3Bs
YXlPYmogeyBudWxscHRyIH07CisgICAgR0NHTENvbnRleHQgbV9jb250ZXh0T2JqIHsgbnVsbHB0
ciB9OworICAgIEdDR0xDb25maWcgbV9jb25maWdPYmogeyBudWxscHRyIH07CiAgICAgc3RkOjp1
bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcj4gbV90ZXhtYXBMYXllcjsK
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcAppbmRleCBiYmYw
ZTgxZWI5ODUuLjRlNDI3MTlhNWQ5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wuY3BwCkBAIC0yOTAsNiArMjkwLDExIEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0woKQogI2VuZGlmCiB9CiAKK2Jvb2wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmluaXRpYWxpemUoKQoreworICAgIHJldHVybiBwbGF0Zm9ybUluaXRpYWxpemUo
KTsKK30KKwogYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFrZUNvbnRleHRDdXJyZW50
KCkKIHsKICNpZiBVU0UoTklDT1NJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgK
aW5kZXggNTk3OTY4ZTBmZmU5Li40MDUxZmM1MjIwY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTC5oCkBAIC00MzEsNiArNDMxLDEwIEBAIHByb3RlY3RlZDoKICAgICAvLyBDYWxs
ZWQgb25jZSBieSBhbGwgdGhlIHB1YmxpYyBlbnRyeSBwb2ludHMgb2YgRXh0ZW5zaW9uc0dMT3Bl
bkdML0V4dGVuc2lvbkdMT3BlbkdMRVMgdGhhdCBldmVudHVhbGx5IGNhbGwgT3BlbkdMLgogICAg
IGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkgV0FSTl9VTlVTRURfUkVUVVJOOwogCisgICAgLy8g
SW5pdGlhbGl6ZXMgdGhlIGluc3RhbmNlLiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBpbnN0YW5jZSBz
aG91bGQgbm90IGJlIHVzZWQuCisgICAgYm9vbCBpbml0aWFsaXplKCk7CisgICAgdmlydHVhbCBi
b29sIHBsYXRmb3JtSW5pdGlhbGl6ZSgpID0gMDsKKwogICAgIC8vIFRha2UgaW50byBhY2NvdW50
IHRoZSB1c2VyJ3MgcmVxdWVzdGVkIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcywKICAgICAv
LyBpbiBwYXJ0aWN1bGFyIHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGlj
aCBjb3VsZCBvcgogICAgIC8vIGNvdWxkIG5vdCBiZSBob25vcmVkIGJhc2VkIG9uIHRoZSBjYXBh
YmlsaXRpZXMgb2YgdGhlIE9wZW5HTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0FOR0xFQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvQU5HTEVDb250ZXh0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZjczN2FiOGZhMDRiLi4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0FOR0xFQ29udGV4dC5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2lj
YWwgR3JvdXAgQi5WLgotICogQ29weXJpZ2h0IChDKSAyMDE4LCAyMDE5IElnYWxpYSBTLkwuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMCBBcHBsZSBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBTkdMRUNvbnRl
eHQuaCIKLQotI2lmIFVTRShURVhUVVJFX01BUFBFUikgJiYgVVNFKEFOR0xFKSAmJiAhVVNFKE5J
Q09TSUEpCi0KLSNpbmNsdWRlICJBTkdMRUhlYWRlcnMuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgi
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNvbnN0
IGNoYXIqIEFOR0xFQ29udGV4dDo6ZXJyb3JTdHJpbmcoaW50IHN0YXR1c0NvZGUpCi17Ci0gICAg
c3RhdGljX2Fzc2VydChzaXplb2YoaW50KSA+PSBzaXplb2YoRUdMaW50KSwgIkVHTGludCBtdXN0
IG5vdCBiZSB3aWRlciB0aGFuIGludCIpOwotICAgIHN3aXRjaCAoc3RhdHVzQ29kZSkgewotI2Rl
ZmluZSBDQVNFX1JFVFVSTl9TVFJJTkcobmFtZSkgY2FzZSBuYW1lOiByZXR1cm4gI25hbWUKLSAg
ICAgICAgLy8gaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvRUdML3Nkay9kb2NzL21h
bi9odG1sL2VnbEdldEVycm9yLnhodG1sCi0gICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xf
U1VDQ0VTUyk7Ci0gICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfTk9UX0lOSVRJQUxJWkVE
KTsKLSAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfQUNDRVNTKTsKLSAgICAgICAg
Q0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfQUxMT0MpOwotICAgICAgICBDQVNFX1JFVFVSTl9T
VFJJTkcoRUdMX0JBRF9BVFRSSUJVVEUpOwotICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdM
X0JBRF9DT05URVhUKTsKLSAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfQ09ORklH
KTsKLSAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfQ1VSUkVOVF9TVVJGQUNFKTsK
LSAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfRElTUExBWSk7Ci0gICAgICAgIENB
U0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX1NVUkZBQ0UpOwotICAgICAgICBDQVNFX1JFVFVSTl9T
VFJJTkcoRUdMX0JBRF9NQVRDSCk7Ci0gICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFE
X1BBUkFNRVRFUik7Ci0gICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX05BVElWRV9Q
SVhNQVApOwotICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9OQVRJVkVfV0lORE9X
KTsKLSAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9DT05URVhUX0xPU1QpOwotI3VuZGVm
IENBU0VfUkVUVVJOX1NUUklORwotICAgIGRlZmF1bHQ6IHJldHVybiAiVW5rbm93biBFR0wgZXJy
b3IiOwotICAgIH0KLX0KLQotY29uc3QgY2hhciogQU5HTEVDb250ZXh0OjpsYXN0RXJyb3JTdHJp
bmcoKQotewotICAgIHJldHVybiBlcnJvclN0cmluZyhFR0xfR2V0RXJyb3IoKSk7Ci19Ci0KLXN0
ZDo6dW5pcXVlX3B0cjxBTkdMRUNvbnRleHQ+IEFOR0xFQ29udGV4dDo6Y3JlYXRlQ29udGV4dChF
R0xDb250ZXh0IHNoYXJpbmdDb250ZXh0LCBib29sIGlzRm9yV2ViR0wyKQotewotICAgIEVHTERp
c3BsYXkgZGlzcGxheSA9IEVHTF9HZXREaXNwbGF5KEVHTF9ERUZBVUxUX0RJU1BMQVkpOwotICAg
IGlmIChkaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIEVHTGludCBtYWpvclZlcnNpb24sIG1pbm9yVmVyc2lvbjsKLSAgICBpZiAoRUdMX0lu
aXRpYWxpemUoZGlzcGxheSwgJm1ham9yVmVyc2lvbiwgJm1pbm9yVmVyc2lvbikgPT0gRUdMX0ZB
TFNFKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIkVHTERpc3BsYXkgSW5pdGlhbGl6YXRpb24gZmFp
bGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgTE9HKFdlYkdMLCAi
QU5HTEUgaW5pdGlhbGlzZWQgTWFqb3I6ICVkIE1pbm9yOiAlZCIsIG1ham9yVmVyc2lvbiwgbWlu
b3JWZXJzaW9uKTsKLQotICAgIGNvbnN0IGNoYXIqIGRpc3BsYXlFeHRlbnNpb25zID0gRUdMX1F1
ZXJ5U3RyaW5nKGRpc3BsYXksIEVHTF9FWFRFTlNJT05TKTsKLSAgICBMT0coV2ViR0wsICJFeHRl
bnNpb25zOiAlcyIsIGRpc3BsYXlFeHRlbnNpb25zKTsKLQotICAgIEVHTENvbmZpZyBjb25maWc7
Ci0gICAgRUdMaW50IGNvbmZpZ0F0dHJpYnV0ZXNbXSA9IHsKLSAgICAgICAgRUdMX1JFTkRFUkFC
TEVfVFlQRSwgRUdMX09QRU5HTF9FUzJfQklULAotICAgICAgICBFR0xfUkVEX1NJWkUsIDgsCi0g
ICAgICAgIEVHTF9HUkVFTl9TSVpFLCA4LAotICAgICAgICBFR0xfQkxVRV9TSVpFLCA4LAotICAg
ICAgICBFR0xfQUxQSEFfU0laRSwgOCwKLSAgICAgICAgRUdMX05PTkUKLSAgICB9OwotICAgIEVH
TGludCBudW1iZXJDb25maWdzUmV0dXJuZWQgPSAwOwotICAgIEVHTF9DaG9vc2VDb25maWcoZGlz
cGxheSwgY29uZmlnQXR0cmlidXRlcywgJmNvbmZpZywgMSwgJm51bWJlckNvbmZpZ3NSZXR1cm5l
ZCk7Ci0gICAgaWYgKG51bWJlckNvbmZpZ3NSZXR1cm5lZCAhPSAxKSB7Ci0gICAgICAgIExPRyhX
ZWJHTCwgIkVHTENvbmZpZyBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KLSAgICBMT0coV2ViR0wsICJHb3QgRUdMQ29uZmlnIik7Ci0KLSAg
ICBFR0xfQmluZEFQSShFR0xfT1BFTkdMX0VTX0FQSSk7Ci0gICAgaWYgKEVHTF9HZXRFcnJvcigp
ICE9IEVHTF9TVUNDRVNTKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIlVuYWJsZSB0byBiaW5kIHRv
IE9QRU5HTF9FU19BUEkiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAg
VmVjdG9yPEVHTGludD4gY29udGV4dEF0dHJpYnV0ZXM7Ci0gICAgaWYgKGlzRm9yV2ViR0wyKSB7
Ci0gICAgICAgIGNvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfQ09OVEVYVF9DTElFTlRfVkVS
U0lPTik7Ci0gICAgICAgIGNvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZCgzKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBjb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0NPTlRFWFRfQ0xJRU5UX1ZF
UlNJT04pOwotICAgICAgICBjb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoMik7Ci0gICAgICAgIC8v
IEFOR0xFIHdpbGwgdXBncmFkZSB0aGUgY29udGV4dCB0byBFUzMgYXV0b21hdGljYWxseSB1bmxl
c3MgdGhpcyBpcyBzcGVjaWZpZWQuCi0gICAgICAgIGNvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChF
R0xfQ09OVEVYVF9PUEVOR0xfQkFDS1dBUkRTX0NPTVBBVElCTEVfQU5HTEUpOwotICAgICAgICBj
b250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0ZBTFNFKTsKLSAgICB9Ci0gICAgY29udGV4dEF0
dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX1dFQkdMX0NPTVBBVElCSUxJVFlfQU5HTEUpOwot
ICAgIGNvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfVFJVRSk7Ci0gICAgLy8gV2ViR0wgcmVx
dWlyZXMgdGhhdCBhbGwgcmVzb3VyY2VzIGFyZSBjbGVhcmVkIGF0IGNyZWF0aW9uLgotICAgIGNv
bnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfUk9CVVNUX1JFU09VUkNFX0lOSVRJQUxJWkFUSU9O
X0FOR0xFKTsKLSAgICBjb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX1RSVUUpOwotICAgIC8v
IFdlYkdMIGRvZXNuJ3QgYWxsb3cgY2xpZW50IGFycmF5cy4KLSAgICBjb250ZXh0QXR0cmlidXRl
cy5hcHBlbmQoRUdMX0NPTlRFWFRfQ0xJRU5UX0FSUkFZU19FTkFCTEVEX0FOR0xFKTsKLSAgICBj
b250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0ZBTFNFKTsKLSAgICAvLyBXZWJHTCBkb2Vzbid0
IGFsbG93IGltcGxpY2l0IGNyZWF0aW9uIG9mIG9iamVjdHMgb24gYmluZC4KLSAgICBjb250ZXh0
QXR0cmlidXRlcy5hcHBlbmQoRUdMX0NPTlRFWFRfQklORF9HRU5FUkFURVNfUkVTT1VSQ0VfQ0hS
T01JVU0pOwotICAgIGNvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfRkFMU0UpOwotCi0gICAg
aWYgKHN0cnN0cihkaXNwbGF5RXh0ZW5zaW9ucywgIkVHTF9BTkdMRV9wb3dlcl9wcmVmZXJlbmNl
IikpIHsKLSAgICAgICAgY29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9QT1dFUl9QUkVGRVJF
TkNFX0FOR0xFKTsKLSAgICAgICAgLy8gRUdMX0xPV19QT1dFUl9BTkdMRSBpcyB0aGUgZGVmYXVs
dC4gQ2hhbmdlIHRvCi0gICAgICAgIC8vIEVHTF9ISUdIX1BPV0VSX0FOR0xFIGlmIGRlc2lyZWQu
Ci0gICAgICAgIGNvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfTE9XX1BPV0VSX0FOR0xFKTsK
LSAgICB9Ci0gICAgY29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9OT05FKTsKLQotICAgIEVH
TENvbnRleHQgY29udGV4dCA9IEVHTF9DcmVhdGVDb250ZXh0KGRpc3BsYXksIGNvbmZpZywgc2hh
cmluZ0NvbnRleHQsIGNvbnRleHRBdHRyaWJ1dGVzLmRhdGEoKSk7Ci0gICAgaWYgKGNvbnRleHQg
PT0gRUdMX05PX0NPTlRFWFQpIHsKLSAgICAgICAgTE9HKFdlYkdMLCAiRUdMQ29udGV4dCBJbml0
aWFsaXphdGlvbiBmYWlsZWQuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAg
ICBMT0coV2ViR0wsICJHb3QgRUdMQ29udGV4dCIpOwotCi0gICAgcmV0dXJuIHN0ZDo6dW5pcXVl
X3B0cjxBTkdMRUNvbnRleHQ+KG5ldyBBTkdMRUNvbnRleHQoZGlzcGxheSwgIGNvbmZpZywgY29u
dGV4dCwgRUdMX05PX1NVUkZBQ0UpKTsKLX0KLQotQU5HTEVDb250ZXh0OjpBTkdMRUNvbnRleHQo
RUdMRGlzcGxheSBkaXNwbGF5LCBFR0xDb25maWcgY29uZmlnLCBFR0xDb250ZXh0IGNvbnRleHQs
IEVHTFN1cmZhY2Ugc3VyZmFjZSkKLSAgICA6IG1fZGlzcGxheShkaXNwbGF5KQotICAgICwgbV9j
b25maWcoY29uZmlnKQotICAgICwgbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX3N1cmZhY2Uo
c3VyZmFjZSkKLXsKLX0KLQotQU5HTEVDb250ZXh0Ojp+QU5HTEVDb250ZXh0KCkKLXsKLSAgICBp
ZiAobV9jb250ZXh0KSB7Ci0gICAgICAgIEdMX0JpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZF
UiwgMCk7Ci0gICAgICAgIEVHTF9NYWtlQ3VycmVudChtX2Rpc3BsYXksIEVHTF9OT19TVVJGQUNF
LCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOwotICAgICAgICBFR0xfRGVzdHJveUNv
bnRleHQobV9kaXNwbGF5LCBtX2NvbnRleHQpOwotICAgIH0KLQotICAgIGlmIChtX3N1cmZhY2Up
Ci0gICAgICAgIEVHTF9EZXN0cm95U3VyZmFjZShtX2Rpc3BsYXksIG1fc3VyZmFjZSk7Ci19Ci0K
LWJvb2wgQU5HTEVDb250ZXh0OjptYWtlQ29udGV4dEN1cnJlbnQoKQotewotICAgIEFTU0VSVCht
X2NvbnRleHQpOwotCi0gICAgaWYgKEVHTF9HZXRDdXJyZW50Q29udGV4dCgpICE9IG1fY29udGV4
dCkKLSAgICAgICAgcmV0dXJuIEVHTF9NYWtlQ3VycmVudChtX2Rpc3BsYXksIG1fc3VyZmFjZSwg
bV9zdXJmYWNlLCBtX2NvbnRleHQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1FR0xDb250ZXh0
IEFOR0xFQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9j
b250ZXh0OwotfQotCi1FR0xEaXNwbGF5IEFOR0xFQ29udGV4dDo6cGxhdGZvcm1EaXNwbGF5KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9kaXNwbGF5OwotfQotCi1FR0xDb25maWcgQU5HTEVDb250
ZXh0OjpwbGF0Zm9ybUNvbmZpZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29uZmlnOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0FOR0xFQ29udGV4dC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0FOR0xFQ29udGV4dC5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBiMTdjNGM5NTFjOTUuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQU5HTEVDb250ZXh0LmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJv
bG9naWNhbCBHcm91cCBCLlYuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgsIDIwMTkgSWdhbGlhIFMu
TC4KLSAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQg
SW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAg
ICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIEhPTERFUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIFVTRShBTkdMRSkgJiYgIVVTRShOSUNPU0lBKQotCi0j
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0KLXR5cGVkZWYgdm9pZCAqRUdMQ29uZmlnOwot
dHlwZWRlZiB2b2lkICpFR0xDb250ZXh0OwotdHlwZWRlZiB2b2lkICpFR0xEaXNwbGF5OwotdHlw
ZWRlZiB2b2lkICpFR0xTdXJmYWNlOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEFO
R0xFQ29udGV4dCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQU5HTEVDb250ZXh0KTsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgY2hhciogZXJyb3JTdHJpbmcoaW50IHN0YXR1c0NvZGUp
OwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBsYXN0RXJyb3JTdHJpbmcoKTsKLQotICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8QU5HTEVDb250ZXh0PiBjcmVhdGVDb250ZXh0KEVHTENvbnRleHQg
c2hhcmluZ0NvbnRleHQsIGJvb2wgaXNGb3JXZWJHTDIpOwotICAgIH5BTkdMRUNvbnRleHQoKTsK
LQotICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgRUdMQ29udGV4dCBwbGF0Zm9y
bUNvbnRleHQoKSBjb25zdDsKLSAgICBFR0xEaXNwbGF5IHBsYXRmb3JtRGlzcGxheSgpIGNvbnN0
OwotICAgIEVHTENvbmZpZyBwbGF0Zm9ybUNvbmZpZygpIGNvbnN0OwotcHJpdmF0ZToKLSAgICBB
TkdMRUNvbnRleHQoRUdMRGlzcGxheSwgRUdMQ29uZmlnLCBFR0xDb250ZXh0LCBFR0xTdXJmYWNl
KTsKLQotICAgIEVHTERpc3BsYXkgbV9kaXNwbGF5IHsgbnVsbHB0ciB9OwotICAgIEVHTENvbmZp
ZyBtX2NvbmZpZyB7IG51bGxwdHIgfTsKLSAgICBFR0xDb250ZXh0IG1fY29udGV4dCB7IG51bGxw
dHIgfTsKLSAgICBFR0xTdXJmYWNlIG1fc3VyZmFjZSB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRl
eHRHTFRleHR1cmVNYXBwZXIuY3BwCmluZGV4IDBkYTk1MDE4MzM3OC4uNzY2YzhmMWE3OGFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhp
Y3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcApAQCAt
MzIsNyArMzIsNiBAQAogI2lmIEVOQUJMRShXRUJHTCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQog
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlLmgiCiAjaW5jbHVkZSAiUGl4ZWxC
dWZmZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIuaCIKICNp
bmNsdWRlIDx3dGYvRGVxdWUuaD4KQEAgLTU2LDYgKzU1LDcgQEAKICNpbmNsdWRlICJOaWNvc2lh
R0NHTEFOR0xFTGF5ZXIuaCIKICNlbHNlCiAjaW5jbHVkZSAiTmljb3NpYUdDR0xMYXllci5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXJEaXNwbGF5RGVsZWdhdGUuaCIKICNlbmRpZgogI2VuZGlm
CiAKQEAgLTczLDM5ICs3MywxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLW5hbWVzcGFj
ZSB7Ci0KLWNsYXNzIFBsYXRmb3JtTGF5ZXJEaXNwbGF5RGVsZWdhdGUgZmluYWwgOiBwdWJsaWMg
R3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPFBsYXRmb3JtTGF5ZXJEaXNwbGF5RGVsZWdhdGU+IGNyZWF0ZShQbGF0Zm9ybUxheWVy
KiBwbGF0Zm9ybUxheWVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGxh
dGZvcm1MYXllckRpc3BsYXlEZWxlZ2F0ZShwbGF0Zm9ybUxheWVyKSk7Ci0gICAgfQotCi0gICAg
Ly8gR3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlIG92ZXJyaWRlcy4KLSAgICBQ
bGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX3BsYXRmb3JtTGF5ZXI7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFBsYXRmb3Jt
TGF5ZXJEaXNwbGF5RGVsZWdhdGUoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcikKLSAgICAg
ICAgOiBtX3BsYXRmb3JtTGF5ZXIocGxhdGZvcm1MYXllcikKLSAgICB7Ci0gICAgfQotCi0gICAg
UGxhdGZvcm1MYXllciogbV9wbGF0Zm9ybUxheWVyOwotfTsKLQotfQotCiBSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyPiBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6
OmNyZWF0ZShHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJiBhdHRyaWJ1dGVzKQogewogICAg
IGF1dG8gY29udGV4dCA9IGFkb3B0UmVmKCpuZXcgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyKFdURk1vdmUoYXR0cmlidXRlcykpKTsKLSNpZiBVU0UoQU5HTEUpCiAgICAgaWYgKCFjb250
ZXh0LT5pbml0aWFsaXplKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotI2VuZGlmCiAgICAg
cmV0dXJuIGNvbnRleHQ7CiB9CiAKQEAgLTExMywxNyArODUsMTIgQEAgR3JhcGhpY3NDb250ZXh0
R0xUZXh0dXJlTWFwcGVyOjp+R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyKCkgPSBkZWZh
dWx0OwogCiBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6OkdyYXBoaWNzQ29udGV4dEdM
VGV4dHVyZU1hcHBlcihHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJiBhdHRyaWJ1dGVzKQog
ICAgIDogR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQmFzZShXVEZNb3ZlKGF0dHJpYnV0
ZXMpKQotI2lmIFVTRShOSUNPU0lBKQotICAgICwgbV9sYXllckNvbnRlbnRzRGlzcGxheURlbGVn
YXRlKFBsYXRmb3JtTGF5ZXJEaXNwbGF5RGVsZWdhdGU6OmNyZWF0ZSgmbV9uaWNvc2lhTGF5ZXIt
PmNvbnRlbnRMYXllcigpKSkKLSNlbHNlCi0gICAgLCBtX2xheWVyQ29udGVudHNEaXNwbGF5RGVs
ZWdhdGUoUGxhdGZvcm1MYXllckRpc3BsYXlEZWxlZ2F0ZTo6Y3JlYXRlKG1fdGV4bWFwTGF5ZXIu
Z2V0KCkpKQotI2VuZGlmCiB7CiB9CiAKIFJlZlB0cjxHcmFwaGljc0xheWVyQ29udGVudHNEaXNw
bGF5RGVsZWdhdGU+IEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6bGF5ZXJDb250ZW50
c0Rpc3BsYXlEZWxlZ2F0ZSgpCiB7Ci0gICAgcmV0dXJuIG1fbGF5ZXJDb250ZW50c0Rpc3BsYXlE
ZWxlZ2F0ZS5wdHIoKTsKKyAgICByZXR1cm4gbV9sYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRl
OwogfQogCiBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0w+IGNyZWF0ZVdlYlByb2Nlc3NHcmFwaGlj
c0NvbnRleHRHTChjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMp
CkBAIC0xOTIsNiArMTU5LDEzIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVy
Ojpjb3B5VGV4dHVyZUZyb21NZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBQCiB9CiAjZW5kaWYK
IAorI2lmIFVTRShOSUNPU0lBKSAmJiAhVVNFKEFOR0xFKQorYm9vbCBHcmFwaGljc0NvbnRleHRH
TFRleHR1cmVNYXBwZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCit7CisgICAgbV9sYXllckNvbnRl
bnRzRGlzcGxheURlbGVnYXRlID0gUGxhdGZvcm1MYXllckRpc3BsYXlEZWxlZ2F0ZTo6Y3JlYXRl
KCZtX25pY29zaWFMYXllci0+Y29udGVudExheWVyKCkpOworfQorI2VuZGlmCisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgJiYgVVNFKFRFWFRVUkVf
TUFQUEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5oCmlu
ZGV4IDkxZmE1NWJjZjg0ZC4uNzViYzMyZjNmYmViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNz
Q29udGV4dEdMVGV4dHVyZU1hcHBlci5oCkBAIC00NSw3ICs0NSw3IEBAIGNsYXNzIFdFQkNPUkVf
RVhQT1JUIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlciA6IHB1YmxpYyBHcmFwaGljc0Nv
bnRleHRHTFRlCiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZlB0cjxHcmFwaGljc0NvbnRleHRHTFRl
eHR1cmVNYXBwZXI+IGNyZWF0ZShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMm
Jik7CiAgICAgfkdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcigpOwotICAgIAorCiAgICAg
Ly8gR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQmFzZSBvdmVycmlkZXMuCiAgICAgUmVm
UHRyPEdyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZT4gbGF5ZXJDb250ZW50c0Rp
c3BsYXlEZWxlZ2F0ZSgpIGZpbmFsOwogI2lmIEVOQUJMRShWSURFTykKQEAgLTYwLDkgKzYwLDEz
IEBAIHB1YmxpYzoKICAgICB2b2lkIHByZXBhcmVGb3JEaXNwbGF5KCkgZmluYWw7CiAjZW5kaWYK
IAotcHJvdGVjdGVkOgorcHJpdmF0ZToKKyNpZiBVU0UoQU5HTEUpCisgICAgYm9vbCBwbGF0Zm9y
bUluaXRpYWxpemVDb250ZXh0KCkgZmluYWw7CisjZW5kaWYKKyAgICBib29sIHBsYXRmb3JtSW5p
dGlhbGl6ZSgpIGZpbmFsOwogICAgIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcihXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJik7Ci0gICAgUmVmPEdyYXBoaWNzTGF5
ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZT4gbV9sYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRl
OworICAgIFJlZlB0cjxHcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGU+IG1fbGF5
ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVN
YXBwZXJBTkdMRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEUuY3BwCmluZGV4IDk1NDE2N2Q2Y2Y2
Mi4uZDBhOTExZGYzNjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRH
TFRleHR1cmVNYXBwZXJBTkdMRS5jcHAKQEAgLTMyLDcgKzMyLDkgQEAKICNpbmNsdWRlICJBTkdM
RUhlYWRlcnMuaCIKICNpbmNsdWRlICJBTkdMRVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXJEaXNwbGF5RGVsZWdh
dGUuaCIKIAogI2lmIFVTRShOSUNPU0lBKQogI2luY2x1ZGUgIkdCTURldmljZS5oIgpAQCAtNDEs
NiArNDMsOCBAQAogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8Z2JtLmg+CiAjZWxzZQor
I2luY2x1ZGUgIkdMQ29udGV4dC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtRGlzcGxheS5oIgogI2lu
Y2x1ZGUgIlRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5oIgogI2VuZGlmCiAKQEAgLTQ5
LDExICs1MywxMDUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogR3JhcGhpY3NDb250ZXh0R0xBTkdM
RTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRShHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0
cmlidXRlcykKICAgICA6IEdyYXBoaWNzQ29udGV4dEdMKGF0dHJpYnV0ZXMpCiB7Cit9CisKK2Jv
b2wgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyOjpwbGF0Zm9ybUluaXRpYWxpemVDb250
ZXh0KCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IGNv
bnRleHRBdHRyaWJ1dGVzKCk7CiAjaWYgRU5BQkxFKFdFQkdMMikKICAgICBtX2lzRm9yV2ViR0wy
ID0gYXR0cmlidXRlcy53ZWJHTFZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0R0xXZWJHTFZlcnNp
b246OldlYkdMMjsKICNlbmRpZgorCisgICAgbV9kaXNwbGF5T2JqID0gRUdMX0dldERpc3BsYXko
RUdMX0RFRkFVTFRfRElTUExBWSk7CisgICAgaWYgKG1fZGlzcGxheU9iaiA9PSBFR0xfTk9fRElT
UExBWSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRUdMaW50IG1ham9yVmVyc2lvbiwg
bWlub3JWZXJzaW9uOworICAgIGlmIChFR0xfSW5pdGlhbGl6ZShtX2Rpc3BsYXlPYmosICZtYWpv
clZlcnNpb24sICZtaW5vclZlcnNpb24pID09IEVHTF9GQUxTRSkgeworICAgICAgICBMT0coV2Vi
R0wsICJFR0xEaXNwbGF5IEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICBMT0coV2ViR0wsICJBTkdMRSBpbml0aWFsaXNlZCBNYWpvcjog
JWQgTWlub3I6ICVkIiwgbWFqb3JWZXJzaW9uLCBtaW5vclZlcnNpb24pOworCisgICAgY29uc3Qg
Y2hhciogZGlzcGxheUV4dGVuc2lvbnMgPSBFR0xfUXVlcnlTdHJpbmcobV9kaXNwbGF5T2JqLCBF
R0xfRVhURU5TSU9OUyk7CisgICAgTE9HKFdlYkdMLCAiRXh0ZW5zaW9uczogJXMiLCBkaXNwbGF5
RXh0ZW5zaW9ucyk7CisKKyAgICBFR0xpbnQgY29uZmlnQXR0cmlidXRlc1tdID0geworICAgICAg
ICBFR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0VTMl9CSVQsCisgICAgICAgIEVHTF9S
RURfU0laRSwgOCwKKyAgICAgICAgRUdMX0dSRUVOX1NJWkUsIDgsCisgICAgICAgIEVHTF9CTFVF
X1NJWkUsIDgsCisgICAgICAgIEVHTF9BTFBIQV9TSVpFLCA4LAorICAgICAgICBFR0xfTk9ORQor
ICAgIH07CisgICAgRUdMaW50IG51bWJlckNvbmZpZ3NSZXR1cm5lZCA9IDA7CisgICAgRUdMX0No
b29zZUNvbmZpZyhtX2Rpc3BsYXlPYmosIGNvbmZpZ0F0dHJpYnV0ZXMsICZtX2NvbmZpZ09iaiwg
MSwgJm51bWJlckNvbmZpZ3NSZXR1cm5lZCk7CisgICAgaWYgKG51bWJlckNvbmZpZ3NSZXR1cm5l
ZCAhPSAxKSB7CisgICAgICAgIExPRyhXZWJHTCwgIkVHTENvbmZpZyBJbml0aWFsaXphdGlvbiBm
YWlsZWQuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgTE9HKFdlYkdMLCAi
R290IEVHTENvbmZpZyIpOworCisgICAgRUdMX0JpbmRBUEkoRUdMX09QRU5HTF9FU19BUEkpOwor
ICAgIGlmIChFR0xfR2V0RXJyb3IoKSAhPSBFR0xfU1VDQ0VTUykgeworICAgICAgICBMT0coV2Vi
R0wsICJVbmFibGUgdG8gYmluZCB0byBPUEVOR0xfRVNfQVBJIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBWZWN0b3I8RUdMaW50PiBlZ2xDb250ZXh0QXR0cmlidXRlczsK
KyAgICBpZiAobV9pc0ZvcldlYkdMMikgeworICAgICAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5h
cHBlbmQoRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04pOworICAgICAgICBlZ2xDb250ZXh0QXR0
cmlidXRlcy5hcHBlbmQoMyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZWdsQ29udGV4dEF0dHJp
YnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OKTsKKyAgICAgICAgZWdsQ29u
dGV4dEF0dHJpYnV0ZXMuYXBwZW5kKDIpOworICAgICAgICAvLyBBTkdMRSB3aWxsIHVwZ3JhZGUg
dGhlIGNvbnRleHQgdG8gRVMzIGF1dG9tYXRpY2FsbHkgdW5sZXNzIHRoaXMgaXMgc3BlY2lmaWVk
LgorICAgICAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0NPTlRFWFRfT1BFTkdM
X0JBQ0tXQVJEU19DT01QQVRJQkxFX0FOR0xFKTsKKyAgICAgICAgZWdsQ29udGV4dEF0dHJpYnV0
ZXMuYXBwZW5kKEVHTF9GQUxTRSk7CisgICAgfQorICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFw
cGVuZChFR0xfQ09OVEVYVF9XRUJHTF9DT01QQVRJQklMSVRZX0FOR0xFKTsKKyAgICBlZ2xDb250
ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX1RSVUUpOworICAgIC8vIFdlYkdMIHJlcXVpcmVzIHRo
YXQgYWxsIHJlc291cmNlcyBhcmUgY2xlYXJlZCBhdCBjcmVhdGlvbi4KKyAgICBlZ2xDb250ZXh0
QXR0cmlidXRlcy5hcHBlbmQoRUdMX1JPQlVTVF9SRVNPVVJDRV9JTklUSUFMSVpBVElPTl9BTkdM
RSk7CisgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9UUlVFKTsKKyAgICAvLyBX
ZWJHTCBkb2Vzbid0IGFsbG93IGNsaWVudCBhcnJheXMuCisgICAgZWdsQ29udGV4dEF0dHJpYnV0
ZXMuYXBwZW5kKEVHTF9DT05URVhUX0NMSUVOVF9BUlJBWVNfRU5BQkxFRF9BTkdMRSk7CisgICAg
ZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9GQUxTRSk7CisgICAgLy8gV2ViR0wgZG9l
c24ndCBhbGxvdyBpbXBsaWNpdCBjcmVhdGlvbiBvZiBvYmplY3RzIG9uIGJpbmQuCisgICAgZWds
Q29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX0JJTkRfR0VORVJBVEVTX1JFU09V
UkNFX0NIUk9NSVVNKTsKKyAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0ZBTFNF
KTsKKworICAgIGlmIChzdHJzdHIoZGlzcGxheUV4dGVuc2lvbnMsICJFR0xfQU5HTEVfcG93ZXJf
cHJlZmVyZW5jZSIpKSB7CisgICAgICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xf
UE9XRVJfUFJFRkVSRU5DRV9BTkdMRSk7CisgICAgICAgIC8vIEVHTF9MT1dfUE9XRVJfQU5HTEUg
aXMgdGhlIGRlZmF1bHQuIENoYW5nZSB0bworICAgICAgICAvLyBFR0xfSElHSF9QT1dFUl9BTkdM
RSBpZiBkZXNpcmVkLgorICAgICAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0xP
V19QT1dFUl9BTkdMRSk7CisgICAgfQorICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChF
R0xfTk9ORSk7CisKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBhdXRvIHNoYXJpbmdDb250ZXh0ID0g
RUdMX05PX0NPTlRFWFQ7CisjZWxzZQorICAgIGF1dG8gc2hhcmluZ0NvbnRleHQgPSBQbGF0Zm9y
bURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQo
KS0+cGxhdGZvcm1Db250ZXh0KCk7CisjZW5kaWYKKyAgICBtX2NvbnRleHRPYmogPSBFR0xfQ3Jl
YXRlQ29udGV4dChtX2Rpc3BsYXlPYmosIG1fY29uZmlnT2JqLCBzaGFyaW5nQ29udGV4dCwgZWds
Q29udGV4dEF0dHJpYnV0ZXMuZGF0YSgpKTsKKyAgICBpZiAobV9jb250ZXh0T2JqID09IEVHTF9O
T19DT05URVhUKSB7CisgICAgICAgIExPRyhXZWJHTCwgIkVHTENvbnRleHQgSW5pdGlhbGl6YXRp
b24gZmFpbGVkLiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiQU5HTEUgbWFrZUNvbnRl
eHRDdXJyZW50IGZhaWxlZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBM
T0coV2ViR0wsICJHb3QgRUdMQ29udGV4dCIpOworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1Jbml0aWFsaXplKCkKK3sK
ICNpZiBVU0UoTklDT1NJQSkKICAgICBtX25pY29zaWFMYXllciA9IG1ha2VVbmlxdWU8Tmljb3Np
YTo6R0NHTEFOR0xFTGF5ZXI+KCp0aGlzKTsKKyAgICBtX2xheWVyQ29udGVudHNEaXNwbGF5RGVs
ZWdhdGUgPSBQbGF0Zm9ybUxheWVyRGlzcGxheURlbGVnYXRlOjpjcmVhdGUoJm1fbmljb3NpYUxh
eWVyLT5jb250ZW50TGF5ZXIoKSk7CiAKICAgICBjb25zdCBhdXRvJiBnYm1EZXZpY2UgPSBHQk1E
ZXZpY2U6OmdldCgpOwogICAgIGlmIChnYm1EZXZpY2UuZGV2aWNlKCkpIHsKQEAgLTYzLDE4ICsx
NjEsMTcgQEAgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRShH
cmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmkKICAgICB9CiAjZWxzZQogICAgIG1fdGV4
bWFwTGF5ZXIgPSBtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcj4oKnRo
aXMpOworICAgIG1fbGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZSA9IFBsYXRmb3JtTGF5ZXJE
aXNwbGF5RGVsZWdhdGU6OmNyZWF0ZShtX3RleG1hcExheWVyLmdldCgpKTsKICNlbmRpZgogICAg
IGJvb2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIEFTU0VSVF9VTlVTRUQo
c3VjY2Vzcywgc3VjY2Vzcyk7Ci0gICAgc3VjY2VzcyA9IGluaXRpYWxpemUoKTsKLSAgICBBU1NF
UlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwogCiAgICAgLy8gV2UgcmVxdWlyZSB0aGlzIGV4
dGVuc2lvbiB0byByZW5kZXIgaW50byB0aGUgZG1hYnVmLWJhY2tlZCBFR0xJbWFnZS4KICAgICBS
RUxFQVNFX0FTU0VSVChzdXBwb3J0c0V4dGVuc2lvbigiR0xfT0VTX0VHTF9pbWFnZSIpKTsKICAg
ICBHTF9SZXF1ZXN0RXh0ZW5zaW9uQU5HTEUoIkdMX09FU19FR0xfaW1hZ2UiKTsKIAogICAgIHZh
bGlkYXRlQXR0cmlidXRlcygpOwotICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygp
OyAvLyBUaGV5IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCisgICAgYXV0byBh
dHRyaWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsgLy8gVGhleSBtYXkgaGF2ZSBjaGFuZ2Vk
IGR1cmluZyB2YWxpZGF0aW9uLgogCiAgICAgR0xlbnVtIHRleHR1cmVUYXJnZXQgPSBkcmF3aW5n
QnVmZmVyVGV4dHVyZVRhcmdldCgpOwogICAgIC8vIENyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVy
IGludG8uCkBAIC0xMjYsNiArMjIzLDcgQEAgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRShHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmkKICAgICB9
CiAKICAgICBHTF9DbGVhckNvbG9yKDAsIDAsIDAsIDApOworICAgIHJldHVybiB0cnVlOwogfQog
CiAjaWYgVVNFKE5JQ09TSUEpCkBAIC0yNDEsNyArMzM5LDcgQEAgR0NHTERpc3BsYXkgR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1EaXNwbGF5KCkgY29uc3QKICNpZiBVU0UoTklDT1NJ
QSkKICAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXItPnBsYXRmb3JtRGlzcGxheSgpOwogI2Vsc2UK
LSAgICByZXR1cm4gbV90ZXhtYXBMYXllci0+cGxhdGZvcm1EaXNwbGF5KCk7CisgICAgcmV0dXJu
IG1fZGlzcGxheU9iajsKICNlbmRpZgogfQogCkBAIC0yNTAsNyArMzQ4LDcgQEAgR0NHTENvbmZp
ZyBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwbGF0Zm9ybUNvbmZpZygpIGNvbnN0CiAjaWYgVVNF
KE5JQ09TSUEpCiAgICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5wbGF0Zm9ybUNvbmZpZygpOwog
I2Vsc2UKLSAgICByZXR1cm4gbV90ZXhtYXBMYXllci0+cGxhdGZvcm1Db25maWcoKTsKKyAgICBy
ZXR1cm4gbV9jb25maWdPYmo7CiAjZW5kaWYKIH0KIApAQCAtMjU5LDcgKzM1Nyw5IEBAIGJvb2wg
R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bWFrZUNvbnRleHRDdXJyZW50KCkKICNpZiBVU0UoTklD
T1NJQSkKICAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXItPm1ha2VDb250ZXh0Q3VycmVudCgpOwog
I2Vsc2UKLSAgICByZXR1cm4gbV90ZXhtYXBMYXllci0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKEVHTF9HZXRDdXJyZW50Q29udGV4dCgpID09IG1fY29udGV4dE9iaikKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIEVHTF9NYWtlQ3VycmVudChtX2Rpc3BsYXlPYmosIEVH
TF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgbV9jb250ZXh0T2JqKTsKICNlbmRpZgogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvUGxh
dGZvcm1MYXllckRpc3BsYXlEZWxlZ2F0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1BsYXRmb3JtTGF5ZXJEaXNwbGF5RGVsZWdhdGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjYwNWVlMTE3ZTg2MwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9QbGF0Zm9ybUxheWVy
RGlzcGxheURlbGVnYXRlLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiR3JhcGhp
Y3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1MYXll
ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBsYXRmb3JtTGF5ZXJEaXNwbGF5
RGVsZWdhdGUgZmluYWwgOiBwdWJsaWMgR3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVn
YXRlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFBsYXRmb3JtTGF5ZXJEaXNwbGF5RGVsZWdh
dGU+IGNyZWF0ZShQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgUGxhdGZvcm1MYXllckRpc3BsYXlEZWxlZ2F0ZShwbGF0Zm9y
bUxheWVyKSk7CisgICAgfQorCisgICAgLy8gR3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURl
bGVnYXRlIG92ZXJyaWRlcy4KKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29u
c3QgZmluYWwKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BsYXRmb3JtTGF5ZXI7CisgICAgfQor
Citwcml2YXRlOgorICAgIFBsYXRmb3JtTGF5ZXJEaXNwbGF5RGVsZWdhdGUoUGxhdGZvcm1MYXll
ciogcGxhdGZvcm1MYXllcikKKyAgICAgICAgOiBtX3BsYXRmb3JtTGF5ZXIocGxhdGZvcm1MYXll
cikKKyAgICB7CisgICAgfQorCisgICAgUGxhdGZvcm1MYXllciogbV9wbGF0Zm9ybUxheWVyOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckdDR0xQbGF0Zm9ybUxheWVyLmNwcAppbmRleCBiNTYwNmIzODhlNzUuLjBlMTlkOGM3YjViMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5jcHAKQEAg
LTIzLDcgKzIzLDYgQEAKIAogI2lmIEVOQUJMRShXRUJHTCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVS
KSAmJiAhVVNFKE5JQ09TSUEpCiAKLSNpbmNsdWRlICJBTkdMRUNvbnRleHQuaCIKICNpbmNsdWRl
ICJBTkdMRUhlYWRlcnMuaCIKICNpbmNsdWRlICJCaXRtYXBUZXh0dXJlR0wuaCIKICNpbmNsdWRl
ICJHTENvbnRleHQuaCIKQEAgLTM2LDc3ICszNSwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBU
ZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI6OlRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1M
YXllcihHcmFwaGljc0NvbnRleHRHTEFOR0xFJiBjb250ZXh0KQogICAgIDogbV9jb250ZXh0KGNv
bnRleHQpCiB7Ci0gICAgYXV0byBzaGFyaW5nQ29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hh
cmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpLT5wbGF0Zm9ybUNv
bnRleHQoKTsKLSNpZiBFTkFCTEUoV0VCR0wyKQotICAgIG1fZ2xDb250ZXh0ID0gQU5HTEVDb250
ZXh0OjpjcmVhdGVDb250ZXh0KHNoYXJpbmdDb250ZXh0LCBjb250ZXh0LmNvbnRleHRBdHRyaWJ1
dGVzKCkud2ViR0xWZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJH
TDIpOwotI2Vsc2UKLSAgICBtX2dsQ29udGV4dCA9IEFOR0xFQ29udGV4dDo6Y3JlYXRlQ29udGV4
dChzaGFyaW5nQ29udGV4dCwgZmFsc2UpOwotI2VuZGlmCi0KLSNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCi0gICAgbV9wbGF0Zm9ybUxheWVyUHJveHkgPSBhZG9wdFJlZihuZXcgVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eUdMKTsKLSNlbmRpZgogfQogCiBUZXh0dXJlTWFwcGVy
R0NHTFBsYXRmb3JtTGF5ZXI6On5UZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIoKQogewot
I2lmICFVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAgICAgaWYgKGNsaWVudCgpKQogICAgICAg
ICBjbGllbnQoKS0+cGxhdGZvcm1MYXllcldpbGxCZURlc3Ryb3llZCgpOwotI2VuZGlmCi19Ci0K
LWJvb2wgVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOjptYWtlQ29udGV4dEN1cnJlbnQo
KQotewotICAgIEFTU0VSVChtX2dsQ29udGV4dCk7Ci0gICAgcmV0dXJuIG1fZ2xDb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKLX0KLQotR0NHTENvbnRleHQgVGV4dHVyZU1hcHBlckdDR0xQ
bGF0Zm9ybUxheWVyOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2ds
Q29udGV4dCk7Ci0gICAgcmV0dXJuIG1fZ2xDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLX0K
LQotR0NHTERpc3BsYXkgVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOjpwbGF0Zm9ybURp
c3BsYXkoKSBjb25zdAotewotICAgIEFTU0VSVChtX2dsQ29udGV4dCk7Ci0gICAgcmV0dXJuIG1f
Z2xDb250ZXh0LT5wbGF0Zm9ybURpc3BsYXkoKTsKLX0KLQotR0NHTENvbmZpZyBUZXh0dXJlTWFw
cGVyR0NHTFBsYXRmb3JtTGF5ZXI6OnBsYXRmb3JtQ29uZmlnKCkgY29uc3QKLXsKLSAgICBBU1NF
UlQobV9nbENvbnRleHQpOwotICAgIHJldHVybiBtX2dsQ29udGV4dC0+cGxhdGZvcm1Db25maWco
KTsKIH0KIAotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLVJlZlB0cjxUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllclByb3h5PiBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI6OnBy
b3h5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVyUHJveHkuY29weVJlZigp
OwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjo6c3dhcEJ1ZmZlcnNJ
Zk5lZWRlZCgpCi17Ci0gICAgaWYgKG1fY29udGV4dC5sYXllckNvbXBvc2l0ZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LnByZXBhcmVUZXh0dXJlKCk7Ci0gICAgSW50U2l6
ZSB0ZXh0dXJlU2l6ZShtX2NvbnRleHQubV9jdXJyZW50V2lkdGgsIG1fY29udGV4dC5tX2N1cnJl
bnRIZWlnaHQpOwotICAgIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgZmxhZ3MgPSBUZXh0dXJlTWFw
cGVyR0w6OlNob3VsZEZsaXBUZXh0dXJlIHwgKG1fY29udGV4dC5tX2F0dHJzLmFscGhhID8gVGV4
dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCA6IDApOwotCi0gICAgewotICAgICAgICBMb2NrZXIg
bG9ja2VyIHsgbV9wbGF0Zm9ybUxheWVyUHJveHktPmxvY2soKSB9OwotICAgICAgICBkb3duY2Fz
dDxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5R0w+KCptX3BsYXRmb3JtTGF5ZXJQcm94
eSkucHVzaE5leHRCdWZmZXIobWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1
ZmZlcj4obV9jb250ZXh0Lm1fY29tcG9zaXRvclRleHR1cmUsIHRleHR1cmVTaXplLCBmbGFncywg
bV9jb250ZXh0Lm1faW50ZXJuYWxDb2xvckZvcm1hdCkpOwotICAgIH0KLQotICAgIG1fY29udGV4
dC5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7Ci19Ci0jZWxzZQogdm9pZCBUZXh0dXJlTWFwcGVyR0NH
TFBsYXRmb3JtTGF5ZXI6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1
cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBBU1NFUlQobV9nbENvbnRl
eHQpOwotCiAgICAgbV9jb250ZXh0Lm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKIAogI2lmIFVTRShU
RVhUVVJFX01BUFBFUl9HTCkKQEAgLTEyOSw3ICs2Nyw2IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdD
R0xQbGF0Zm9ybUxheWVyOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0
dXJlCiAgICAgdGV4bWFwR0wuZHJhd1RleHR1cmUobV9jb250ZXh0Lm1fdGV4dHVyZSwgZmxhZ3Ms
IHRleHR1cmVTaXplLCB0YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHkpOwogI2VuZGlmIC8vIFVT
RShURVhUVVJFX01BUFBFUl9HTCkKIH0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXll
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJHQ0dMUGxhdGZvcm1MYXllci5oCmluZGV4IGY3Yjg1NzRmOGYwMy4uNzQ0MjZmMmI0YTM1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5oCkBAIC0yOCw3
ICsyOCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQU5HTEVDb250ZXh0Owog
Y2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTsKIAogY2xhc3MgVGV4dHVyZU1h
cHBlckdDR0xQbGF0Zm9ybUxheWVyIDogcHVibGljIFBsYXRmb3JtTGF5ZXIgewpAQCAtMzcsMjUg
KzM2LDEwIEBAIHB1YmxpYzoKICAgICBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIoR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRSYpOwogICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJHQ0dMUGxh
dGZvcm1MYXllcigpOwogCi0gICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHQ0dM
Q29udGV4dCBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKLSAgICBHQ0dMRGlzcGxheSBwbGF0Zm9y
bURpc3BsYXkoKSBjb25zdDsKLSAgICBHQ0dMQ29uZmlnIHBsYXRmb3JtQ29uZmlnKCkgY29uc3Q7
Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgUmVmUHRyPFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyUHJveHk+IHByb3h5KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
d2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7Ci0jZWxzZQogICAgIHZpcnR1YWwgdm9pZCBw
YWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwgY29uc3QgRmxvYXRSZWN0JiB0YXJn
ZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7Ci0jZW5kaWYK
IAogcHJpdmF0ZToKICAgICBHcmFwaGljc0NvbnRleHRHTEFOR0xFJiBtX2NvbnRleHQ7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPEFOR0xFQ29udGV4dD4gbV9nbENvbnRleHQ7Ci0KLSNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
UHJveHk+IG1fcGxhdGZvcm1MYXllclByb3h5OwotI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453137</attachid>
            <date>2022-02-24 14:18:03 -0800</date>
            <delta_ts>2022-02-25 03:17:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236769-20220224231802.patch</filename>
            <type>text/plain</type>
            <size>47580</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwNDI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzdlMDY5YTg5ZTVhNGYw
NGQ0OGRkYzYwZjcyOTU1OWRiMDA2ODIzMy4uYTllMjIyMGFlYTkyMDQxZmJlOTk4ZmRiNmU0M2E1
OTMwYWRjZWNiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDIyLTAyLTI0ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPiBhbmQgRnVqaWkgSGlyb25vcmkgPEhp
cm9ub3JpLkZ1amlpQHNvbnkuY29tPgorCisgICAgICAgIFtHVEtdW1dQRV1bV0NdIE1vdmUgQU5H
TEUgY29udGV4dCBpbml0aWFsaXNhdGlvbiB0byBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBw
ZXI6OmluaXRpYWxpemUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzNjc2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgZm9yIHRoZSBsb25nLXRlcm0gcGxhbiB0byBz
aGFyZSBtb3JlIGNvZGUKKyAgICAgICAgaW4gR3JhcGhpY3NDb250ZXh0R0xBTkdMRSBiZXR3ZWVu
IENvY29hIGFuZCBub24tQ29jb2EsIGFuZAorICAgICAgICBtaW5pbWlzZSB0aGUgaWZkZWZzIGlu
IEdyYXBoaWNzQ29udGV4dEdMQU5HTEUuCisKKyAgICAgICAgV2UgYXJlIG1vdmluZyB0aGUgY29u
dGV4dCBpbml0aWFsaXNhdGlvbiBhbmQgaG9sZGluZyB0bworICAgICAgICBHcmFwaGljc0NvbnRl
eHRHTFRleHR1cmVNYXBwZXIsIGF3YXkgZnJvbQorICAgICAgICBHQ0dMQU5HTEVMYXllcjo6QU5H
TEVDb250ZXh0IGFuZCB0aGUgbGF5ZXIgY2xhc3NlcyBpbiBjYXNlIG9mCisgICAgICAgIENPT1JE
SU5BVEVEX0dSQVBISUNTLiBMYXRlciBvbiwgQ29jb2EgYW5kIG5vbi1Db2NvYSBjYW4gbWVyZ2UK
KyAgICAgICAgdGhlaXIgOjppbml0aWFsaXplLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhp
cyBpcyBhIHJlZmFjdG9yaW5nIHBhdGNoLgorCisgICAgICAgICogcGxhdGZvcm0vVGV4dHVyZU1h
cHBlci5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0Nv
bnRleHRHTEFOR0xFLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXht
YXAvTmljb3NpYUdDR0xBTkdMRUxheWVyLmNwcDoKKyAgICAgICAgKE5pY29zaWE6OkdDR0xBTkdM
RUxheWVyOjpHQ0dMQU5HTEVMYXllcik6CisgICAgICAgIChOaWNvc2lhOjpHQ0dMQU5HTEVMYXll
cjo6QU5HTEVDb250ZXh0OjplcnJvclN0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lh
OjpHQ0dMQU5HTEVMYXllcjo6QU5HTEVDb250ZXh0OjpsYXN0RXJyb3JTdHJpbmcpOiBEZWxldGVk
LgorICAgICAgICAoTmljb3NpYTo6R0NHTEFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6Y3JlYXRl
Q29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpHQ0dMQU5HTEVMYXllcjo6QU5H
TEVDb250ZXh0OjpBTkdMRUNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6R0NH
TEFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6fkFOR0xFQ29udGV4dCk6IERlbGV0ZWQuCisgICAg
ICAgIChOaWNvc2lhOjpHQ0dMQU5HTEVMYXllcjo6QU5HTEVDb250ZXh0OjptYWtlQ29udGV4dEN1
cnJlbnQpOiBEZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6R0NHTEFOR0xFTGF5ZXI6OkFOR0xF
Q29udGV4dDo6cGxhdGZvcm1Db250ZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29z
aWE6OkdDR0xBTkdMRUxheWVyOjpBTkdMRUNvbnRleHQ6OnBsYXRmb3JtRGlzcGxheSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpHQ0dMQU5HTEVMYXllcjo6QU5HTEVDb250ZXh0
OjpwbGF0Zm9ybUNvbmZpZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpHQ0dM
QU5HTEVMYXllcjo6bWFrZUNvbnRleHRDdXJyZW50KTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29z
aWE6OkdDR0xBTkdMRUxheWVyOjpwbGF0Zm9ybUNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoTmljb3NpYTo6R0NHTEFOR0xFTGF5ZXI6OnBsYXRmb3JtRGlzcGxheSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpHQ0dMQU5HTEVMYXllcjo6cGxhdGZvcm1Db25maWcg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4
bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0FOR0xFQ29udGV4dC5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0FOR0xFQ29udGV4dC5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVN
YXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJl
TWFwcGVyOjpHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyOjpsYXllckNvbnRlbnRzRGlzcGxheURl
bGVnYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBl
cjo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRl
eHR1cmVNYXBwZXJBTkdMRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TEFOR0xFOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1Jbml0aWFsaXplQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6OnBsYXRmb3Jt
SW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpw
bGF0Zm9ybURpc3BsYXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6cGxhdGZvcm1Db25maWcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBTkdMRTo6bWFrZUNvbnRleHRDdXJyZW50KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvUGxhdGZvcm1MYXllckRpc3BsYXlEZWxlZ2F0ZS5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250
ZXh0R0xUZXh0dXJlTWFwcGVyLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI6OlRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1M
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI6
On5UZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOjpwYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI6Om1ha2VDb250ZXh0
Q3VycmVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0NHTFBs
YXRmb3JtTGF5ZXI6OnBsYXRmb3JtQ29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI6OnBsYXRmb3JtRGlzcGxheSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0NHTFBsYXRm
b3JtTGF5ZXI6OnBsYXRmb3JtQ29uZmlnIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcjo6cHJveHkgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOjpzd2Fw
QnVmZmVyc0lmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyLmg6CisKIDIwMjItMDItMjQgIEtp
bW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBMaWJXZWJSVEND
b2RlY3MsIC1Qcm94eSBjcmVhdGUgYW5kIGNvbW11bmljYXRlIHRoZSBSZW1vdGVWaWRlb0ZyYW1l
UHJveHkgaW5jb3JyZWN0bHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Rl
eHR1cmVNYXBwZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVy
LmNtYWtlCmluZGV4IGUzMmYyNmQ1MjdkZjUxMzFlNzk5ODM4N2M1NDAxYjMwZTU2NzY5MTkuLjRl
MGFlYmUxOTc0Nzc4OGQ2NDBkYzk5NWE2NmM0M2JiYTJjOTE4MTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZQpAQCAtNiw3ICs2LDYgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKIGxpc3QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUFuaW1hdGlv
bi5jcHAKIAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9BTkdMRUNvbnRleHQuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVQb29sLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCkBAIC0yMiw3
ICsyMSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogbGlzdChBUFBFTkQgV2ViQ29y
ZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3Np
YS9OaWNvc2lhQW5pbWF0aW9uLmgKIAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9BTkdM
RUNvbnRleHQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQ2xpcFN0YWNrLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmgKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4
dEdMQU5HTEUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBo
aWNzQ29udGV4dEdMQU5HTEUuaAppbmRleCA3ZjI3Y2RjODI2NjVlYzViNzk3Y2VkMTMyYWRmZWIx
MzEzNzY1MGM1Li5jMGJmYTYxMWRiYmY5MWFhOGM1YWMzMzYxN2NlNDk4OGZjZTI0ODhlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0Nv
bnRleHRHTEFOR0xFLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5oCkBAIC00NTMsMTIgKzQ1MywxMyBAQCBwcm90ZWN0
ZWQ6CiAgICAgU2NvcGVkR0xGZW5jZSBtX2ZyYW1lQ29tcGxldGlvbkZlbmNlc1ttYXhQZW5kaW5n
RnJhbWVzXTsKICAgICBHcmFwaGljc0NvbnRleHRHTFN0YXRlIG1fc3RhdGU7CiAKLSNpZiBQTEFU
Rk9STShDT0NPQSkKLSAgICAvLyBGSVhNRTogTW92ZSB0aGVzZSB0byBHcmFwaGljc0NvbnRleHRH
TENvY29hLgotICAgIEdyYXBoaWNzQ29udGV4dEdMSU9TdXJmYWNlU3dhcENoYWluIG1fc3dhcENo
YWluOwogICAgIEdDR0xEaXNwbGF5IG1fZGlzcGxheU9iaiB7IG51bGxwdHIgfTsKICAgICBHQ0dM
Q29udGV4dCBtX2NvbnRleHRPYmogeyBudWxscHRyIH07CiAgICAgR0NHTENvbmZpZyBtX2NvbmZp
Z09iaiB7IG51bGxwdHIgfTsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIC8vIEZJWE1FOiBN
b3ZlIHRoZXNlIHRvIEdyYXBoaWNzQ29udGV4dEdMQ29jb2EuCisgICAgR3JhcGhpY3NDb250ZXh0
R0xJT1N1cmZhY2VTd2FwQ2hhaW4gbV9zd2FwQ2hhaW47CiAgICAgLy8gQmFja2luZyBzdG9yZSBm
b3IgdGhlIHRoZSBidWZmZXIgd2hpY2ggaXMgZXZlbnR1YWxseSB1c2VkIGZvciBkaXNwbGF5Lgog
ICAgIC8vIFdoZW4gcHJlc2VydmVEcmF3aW5nQnVmZmVyID09IGZhbHNlLCB0aGlzIGlzIHRoZSBk
cmF3aW5nIGJ1ZmZlciBiYWNraW5nIHN0b3JlLgogICAgIC8vIFdoZW4gcHJlc2VydmVEcmF3aW5n
QnVmZmVyID09IHRydWUsIHRoaXMgaXMgYmxpdHRlZCB0byBkdXJpbmcgZGlzcGxheSBwcmVwYXJl
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90
ZXhtYXAvTmljb3NpYUdDR0xBTkdMRUxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5jcHAKaW5kZXgg
OTkxNzQxODM2ZDQ0MWJmOTY4MWNkZTk2NjJjMjc1MjhjNWQwNzBiNi4uMjQyNTFmY2FlYzAyMzQy
MWJjZWI5ZDE3MDliNGY1OGQ0Yjc3N2Y0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xBTkdMRUxheWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNv
c2lhR0NHTEFOR0xFTGF5ZXIuY3BwCkBAIC05MiwxNzUgKzkyLDggQEAgdm9pZCBHQ0dMQU5HTEVM
YXllcjo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCiAgICAgbV9jb250ZXh0Lm1hcmtMYXllckNvbXBv
c2l0ZWQoKTsKIH0KIAotY29uc3QgY2hhciogR0NHTEFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6
ZXJyb3JTdHJpbmcoaW50IHN0YXR1c0NvZGUpCi17Ci0gICAgc3RhdGljX2Fzc2VydChzaXplb2Yo
aW50KSA+PSBzaXplb2YoRUdMaW50KSwgIkVHTGludCBtdXN0IG5vdCBiZSB3aWRlciB0aGFuIGlu
dCIpOwotICAgIHN3aXRjaCAoc3RhdHVzQ29kZSkgewotI2RlZmluZSBDQVNFX1JFVFVSTl9TVFJJ
TkcobmFtZSkgY2FzZSBuYW1lOiByZXR1cm4gI25hbWUKLSAgICAgICAgLy8gaHR0cHM6Ly93d3cu
a2hyb25vcy5vcmcvcmVnaXN0cnkvRUdML3Nkay9kb2NzL21hbi9odG1sL2VnbEdldEVycm9yLnho
dG1sCi0gICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfU1VDQ0VTUyk7Ci0gICAgICAgIENB
U0VfUkVUVVJOX1NUUklORyhFR0xfTk9UX0lOSVRJQUxJWkVEKTsKLSAgICAgICAgQ0FTRV9SRVRV
Uk5fU1RSSU5HKEVHTF9CQURfQUNDRVNTKTsKLSAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVH
TF9CQURfQUxMT0MpOwotICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9BVFRSSUJV
VEUpOwotICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9DT05URVhUKTsKLSAgICAg
ICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfQ09ORklHKTsKLSAgICAgICAgQ0FTRV9SRVRV
Uk5fU1RSSU5HKEVHTF9CQURfQ1VSUkVOVF9TVVJGQUNFKTsKLSAgICAgICAgQ0FTRV9SRVRVUk5f
U1RSSU5HKEVHTF9CQURfRElTUExBWSk7Ci0gICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xf
QkFEX1NVUkZBQ0UpOwotICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9NQVRDSCk7
Ci0gICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX1BBUkFNRVRFUik7Ci0gICAgICAg
IENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX05BVElWRV9QSVhNQVApOwotICAgICAgICBDQVNF
X1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9OQVRJVkVfV0lORE9XKTsKLSAgICAgICAgQ0FTRV9SRVRV
Uk5fU1RSSU5HKEVHTF9DT05URVhUX0xPU1QpOwotI3VuZGVmIENBU0VfUkVUVVJOX1NUUklORwot
ICAgIGRlZmF1bHQ6IHJldHVybiAiVW5rbm93biBFR0wgZXJyb3IiOwotICAgIH0KLX0KLQotY29u
c3QgY2hhciogR0NHTEFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6bGFzdEVycm9yU3RyaW5nKCkK
LXsKLSAgICByZXR1cm4gZXJyb3JTdHJpbmcoRUdMX0dldEVycm9yKCkpOwotfQotCi1zdGQ6OnVu
aXF1ZV9wdHI8R0NHTEFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dD4gR0NHTEFOR0xFTGF5ZXI6OkFO
R0xFQ29udGV4dDo6Y3JlYXRlQ29udGV4dChib29sIGlzRm9yV2ViR0wyKQotewotICAgIFZlY3Rv
cjxFR0xpbnQ+IGRpc3BsYXlBdHRyaWJ1dGVzIHsKLSAgICAgICAgRUdMX1BMQVRGT1JNX0FOR0xF
X1RZUEVfQU5HTEUsIEVHTF9QTEFURk9STV9BTkdMRV9UWVBFX09QRU5HTEVTX0FOR0xFLAotICAg
ICAgICBFR0xfUExBVEZPUk1fQU5HTEVfREVWSUNFX1RZUEVfQU5HTEUsIEVHTF9QTEFURk9STV9B
TkdMRV9ERVZJQ0VfVFlQRV9FR0xfQU5HTEUsCi0gICAgICAgIEVHTF9QTEFURk9STV9BTkdMRV9O
QVRJVkVfUExBVEZPUk1fVFlQRV9BTkdMRSwgRUdMX1BMQVRGT1JNX1NVUkZBQ0VMRVNTX01FU0Es
Ci0gICAgICAgIEVHTF9OT05FLAotICAgIH07Ci0gICAgRUdMRGlzcGxheSBkaXNwbGF5ID0gRUdM
X0dldFBsYXRmb3JtRGlzcGxheUVYVChFR0xfUExBVEZPUk1fQU5HTEVfQU5HTEUsIEVHTF9ERUZB
VUxUX0RJU1BMQVksIGRpc3BsYXlBdHRyaWJ1dGVzLmRhdGEoKSk7Ci0gICAgaWYgKGRpc3BsYXkg
PT0gRUdMX05PX0RJU1BMQVkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRUdMaW50
IG1ham9yVmVyc2lvbiwgbWlub3JWZXJzaW9uOwotICAgIGlmIChFR0xfSW5pdGlhbGl6ZShkaXNw
bGF5LCAmbWFqb3JWZXJzaW9uLCAmbWlub3JWZXJzaW9uKSA9PSBFR0xfRkFMU0UpIHsKLSAgICAg
ICAgTE9HKFdlYkdMLCAiRUdMRGlzcGxheSBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBMT0coV2ViR0wsICJBTkdMRSBpbml0aWFs
aXNlZCBNYWpvcjogJWQgTWlub3I6ICVkIiwgbWFqb3JWZXJzaW9uLCBtaW5vclZlcnNpb24pOwot
Ci0gICAgY29uc3QgY2hhciogZGlzcGxheUV4dGVuc2lvbnMgPSBFR0xfUXVlcnlTdHJpbmcoZGlz
cGxheSwgRUdMX0VYVEVOU0lPTlMpOwotICAgIExPRyhXZWJHTCwgIkV4dGVuc2lvbnM6ICVzIiwg
ZGlzcGxheUV4dGVuc2lvbnMpOwotCi0gICAgRUdMQ29uZmlnIGNvbmZpZzsKLSAgICBFR0xpbnQg
Y29uZmlnQXR0cmlidXRlc1tdID0gewotICAgICAgICBFR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xf
T1BFTkdMX0VTMl9CSVQsCi0gICAgICAgIEVHTF9SRURfU0laRSwgOCwKLSAgICAgICAgRUdMX0dS
RUVOX1NJWkUsIDgsCi0gICAgICAgIEVHTF9CTFVFX1NJWkUsIDgsCi0gICAgICAgIEVHTF9BTFBI
QV9TSVpFLCA4LAotICAgICAgICBFR0xfREVQVEhfU0laRSwgMCwKLSAgICAgICAgRUdMX1NURU5D
SUxfU0laRSwgMCwKLSAgICAgICAgRUdMX05PTkUKLSAgICB9OwotICAgIEVHTGludCBudW1iZXJD
b25maWdzUmV0dXJuZWQgPSAwOwotICAgIEVHTF9DaG9vc2VDb25maWcoZGlzcGxheSwgY29uZmln
QXR0cmlidXRlcywgJmNvbmZpZywgMSwgJm51bWJlckNvbmZpZ3NSZXR1cm5lZCk7Ci0gICAgaWYg
KG51bWJlckNvbmZpZ3NSZXR1cm5lZCAhPSAxKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIkVHTENv
bmZpZyBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIH0KLSAgICBMT0coV2ViR0wsICJHb3QgRUdMQ29uZmlnIik7Ci0KLSAgICBFR0xfQmluZEFQ
SShFR0xfT1BFTkdMX0VTX0FQSSk7Ci0gICAgaWYgKEVHTF9HZXRFcnJvcigpICE9IEVHTF9TVUND
RVNTKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIlVuYWJsZSB0byBiaW5kIHRvIE9QRU5HTF9FU19B
UEkiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgc3RkOjp2ZWN0b3I8
RUdMaW50PiBjb250ZXh0QXR0cmlidXRlczsKLSAgICBpZiAoaXNGb3JXZWJHTDIpIHsKLSAgICAg
ICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9O
KTsKLSAgICAgICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKDMpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfQ09OVEVYVF9DTElFTlRf
VkVSU0lPTik7Ci0gICAgICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjaygyKTsKLSAgICAg
ICAgLy8gQU5HTEUgd2lsbCB1cGdyYWRlIHRoZSBjb250ZXh0IHRvIEVTMyBhdXRvbWF0aWNhbGx5
IHVubGVzcyB0aGlzIGlzIHNwZWNpZmllZC4KLSAgICAgICAgY29udGV4dEF0dHJpYnV0ZXMucHVz
aF9iYWNrKEVHTF9DT05URVhUX09QRU5HTF9CQUNLV0FSRFNfQ09NUEFUSUJMRV9BTkdMRSk7Ci0g
ICAgICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfRkFMU0UpOwotICAgIH0KLSAg
ICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdMX0NPTlRFWFRfV0VCR0xfQ09NUEFUSUJJ
TElUWV9BTkdMRSk7Ci0gICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9UUlVFKTsK
LQotICAgIC8vIFdlYkdMIHJlcXVpcmVzIHRoYXQgYWxsIHJlc291cmNlcyBhcmUgY2xlYXJlZCBh
dCBjcmVhdGlvbi4KLSAgICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdMX1JPQlVTVF9S
RVNPVVJDRV9JTklUSUFMSVpBVElPTl9BTkdMRSk7Ci0gICAgY29udGV4dEF0dHJpYnV0ZXMucHVz
aF9iYWNrKEVHTF9UUlVFKTsKLQotICAgIC8vIFdlYkdMIGRvZXNuJ3QgYWxsb3cgY2xpZW50IGFy
cmF5cy4KLSAgICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdMX0NPTlRFWFRfQ0xJRU5U
X0FSUkFZU19FTkFCTEVEX0FOR0xFKTsKLSAgICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2so
RUdMX0ZBTFNFKTsKLQotICAgIC8vIFdlYkdMIGRvZXNuJ3QgYWxsb3cgaW1wbGljaXQgY3JlYXRp
b24gb2Ygb2JqZWN0cyBvbiBiaW5kLgotICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhF
R0xfQ09OVEVYVF9CSU5EX0dFTkVSQVRFU19SRVNPVVJDRV9DSFJPTUlVTSk7Ci0gICAgY29udGV4
dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9GQUxTRSk7Ci0KLSAgICBpZiAoc3Ryc3RyKGRpc3Bs
YXlFeHRlbnNpb25zLCAiRUdMX0FOR0xFX3Bvd2VyX3ByZWZlcmVuY2UiKSkgewotICAgICAgICBj
b250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdMX1BPV0VSX1BSRUZFUkVOQ0VfQU5HTEUpOwot
ICAgICAgICAvLyBFR0xfTE9XX1BPV0VSX0FOR0xFIGlzIHRoZSBkZWZhdWx0LiBDaGFuZ2UgdG8K
LSAgICAgICAgLy8gRUdMX0hJR0hfUE9XRVJfQU5HTEUgaWYgZGVzaXJlZC4KLSAgICAgICAgY29u
dGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9MT1dfUE9XRVJfQU5HTEUpOwotICAgIH0KLSAg
ICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdMX05PTkUpOwotCi0gICAgRUdMQ29udGV4
dCBjb250ZXh0ID0gRUdMX0NyZWF0ZUNvbnRleHQoZGlzcGxheSwgY29uZmlnLCBFR0xfTk9fQ09O
VEVYVCwgY29udGV4dEF0dHJpYnV0ZXMuZGF0YSgpKTsKLSAgICBpZiAoY29udGV4dCA9PSBFR0xf
Tk9fQ09OVEVYVCkgewotICAgICAgICBMT0coV2ViR0wsICJFR0xDb250ZXh0IEluaXRpYWxpemF0
aW9uIGZhaWxlZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIExPRyhX
ZWJHTCwgIkdvdCBFR0xDb250ZXh0Iik7Ci0KLSAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEFO
R0xFQ29udGV4dD4obmV3IEFOR0xFQ29udGV4dChkaXNwbGF5LCBjb25maWcsIGNvbnRleHQsIEVH
TF9OT19TVVJGQUNFKSk7Ci19Ci0KLUdDR0xBTkdMRUxheWVyOjpBTkdMRUNvbnRleHQ6OkFOR0xF
Q29udGV4dChFR0xEaXNwbGF5IGRpc3BsYXksIEVHTENvbmZpZyBjb25maWcsIEVHTENvbnRleHQg
Y29udGV4dCwgRUdMU3VyZmFjZSBzdXJmYWNlKQotICAgIDogbV9kaXNwbGF5KGRpc3BsYXkpCi0g
ICAgLCBtX2NvbmZpZyhjb25maWcpCi0gICAgLCBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1f
c3VyZmFjZShzdXJmYWNlKQotewotfQotCi1HQ0dMQU5HTEVMYXllcjo6QU5HTEVDb250ZXh0Ojp+
QU5HTEVDb250ZXh0KCkKLXsKLSAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAgICAgIEdMX0JpbmRG
cmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7Ci0gICAgICAgIEVHTF9NYWtlQ3VycmVudCht
X2Rpc3BsYXksIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQp
OwotICAgICAgICBFR0xfRGVzdHJveUNvbnRleHQobV9kaXNwbGF5LCBtX2NvbnRleHQpOwotICAg
IH0KLQotICAgIGlmIChtX3N1cmZhY2UpCi0gICAgICAgIEVHTF9EZXN0cm95U3VyZmFjZShtX2Rp
c3BsYXksIG1fc3VyZmFjZSk7Ci19Ci0KLWJvb2wgR0NHTEFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4
dDo6bWFrZUNvbnRleHRDdXJyZW50KCkKLXsKLSAgICBBU1NFUlQobV9jb250ZXh0KTsKLQotICAg
IGlmIChFR0xfR2V0Q3VycmVudENvbnRleHQoKSAhPSBtX2NvbnRleHQpCi0gICAgICAgIHJldHVy
biBFR0xfTWFrZUN1cnJlbnQobV9kaXNwbGF5LCBtX3N1cmZhY2UsIG1fc3VyZmFjZSwgbV9jb250
ZXh0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotR0NHTENvbnRleHQgR0NHTEFOR0xFTGF5ZXI6
OkFOR0xFQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9j
b250ZXh0OwotfQotCi1HQ0dMRGlzcGxheSBHQ0dMQU5HTEVMYXllcjo6QU5HTEVDb250ZXh0Ojpw
bGF0Zm9ybURpc3BsYXkoKSBjb25zdAotewotICAgIHJldHVybiBtX2Rpc3BsYXk7Ci19Ci0KLUdD
R0xDb25maWcgR0NHTEFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6cGxhdGZvcm1Db25maWcoKSBj
b25zdAotewotICAgIHJldHVybiBtX2NvbmZpZzsKLX0KLQogR0NHTEFOR0xFTGF5ZXI6OkdDR0xB
TkdMRUxheWVyKEdyYXBoaWNzQ29udGV4dEdMQU5HTEUmIGNvbnRleHQpCiAgICAgOiBtX2NvbnRl
eHQoY29udGV4dCkKLSAgICAsIG1fYW5nbGVDb250ZXh0KEFOR0xFQ29udGV4dDo6Y3JlYXRlQ29u
dGV4dChjb250ZXh0Lm1faXNGb3JXZWJHTDIpKQogICAgICwgbV9jb250ZW50TGF5ZXIoTmljb3Np
YTo6Q29udGVudExheWVyOjpjcmVhdGUoTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBl
ckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKSkKIHsKIH0KQEAgLTI3MCwzMSArMTAzLDYgQEAg
R0NHTEFOR0xFTGF5ZXI6On5HQ0dMQU5HTEVMYXllcigpCiAgICAgZG93bmNhc3Q8Q29udGVudExh
eWVyVGV4dHVyZU1hcHBlckltcGw+KG1fY29udGVudExheWVyLT5pbXBsKCkpLmludmFsaWRhdGVD
bGllbnQoKTsKIH0KIAotYm9vbCBHQ0dMQU5HTEVMYXllcjo6bWFrZUNvbnRleHRDdXJyZW50KCkK
LXsKLSAgICBBU1NFUlQobV9hbmdsZUNvbnRleHQpOwotICAgIHJldHVybiBtX2FuZ2xlQ29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLX0KLQotR0NHTENvbnRleHQgR0NHTEFOR0xFTGF5
ZXI6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fYW5nbGVDb250ZXh0
KTsKLSAgICByZXR1cm4gbV9hbmdsZUNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotfQotCi1H
Q0dMRGlzcGxheSBHQ0dMQU5HTEVMYXllcjo6cGxhdGZvcm1EaXNwbGF5KCkgY29uc3QKLXsKLSAg
ICBBU1NFUlQobV9hbmdsZUNvbnRleHQpOwotICAgIHJldHVybiBtX2FuZ2xlQ29udGV4dC0+cGxh
dGZvcm1EaXNwbGF5KCk7Ci19Ci0KLUdDR0xDb25maWcgR0NHTEFOR0xFTGF5ZXI6OnBsYXRmb3Jt
Q29uZmlnKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9hbmdsZUNvbnRleHQpOwotICAgIHJldHVy
biBtX2FuZ2xlQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNl
IE5pY29zaWEKIAogI2VuZGlmIC8vIFVTRShOSUNPU0lBKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3Rl
eG1hcC9OaWNvc2lhR0NHTEFOR0xFTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5oCmluZGV4IDg4ZjQ0
YTc5ZGM3OTk0NTRhYzllZDgxNTA1YzA5OGE3OTM2NWRiODAuLjQxMjQyNmEzY2RiNWM0YjBmMzBl
NzE5ZGNlNmE4N2FkZjU0ZjM4ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dM
QU5HTEVMYXllci5oCkBAIC01MCw0NSArNTAsMTQgQEAgbmFtZXNwYWNlIE5pY29zaWEgewogY2xh
c3MgR0NHTEFOR0xFTGF5ZXIgZmluYWwgOiBwdWJsaWMgQ29udGVudExheWVyVGV4dHVyZU1hcHBl
ckltcGw6OkNsaWVudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0g
ICAgY2xhc3MgQU5HTEVDb250ZXh0IHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQU5H
TEVDb250ZXh0KTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBlcnJv
clN0cmluZyhpbnQgc3RhdHVzQ29kZSk7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBsYXN0
RXJyb3JTdHJpbmcoKTsKLQotICAgICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFOR0xFQ29u
dGV4dD4gY3JlYXRlQ29udGV4dChib29sIGlzRm9yV2ViR0wyKTsKLSAgICAgICAgdmlydHVhbCB+
QU5HTEVDb250ZXh0KCk7Ci0KLSAgICAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNp
ZiBFTkFCTEUoV0VCR0wpCi0gICAgICAgIEdDR0xDb250ZXh0IHBsYXRmb3JtQ29udGV4dCgpIGNv
bnN0OwotICAgICAgICBHQ0dMRGlzcGxheSBwbGF0Zm9ybURpc3BsYXkoKSBjb25zdDsKLSAgICAg
ICAgR0NHTENvbmZpZyBwbGF0Zm9ybUNvbmZpZygpIGNvbnN0OwotI2VuZGlmCi0KLSAgICBwcml2
YXRlOgotICAgICAgICBBTkdMRUNvbnRleHQoRUdMRGlzcGxheSwgRUdMQ29uZmlnLCBFR0xDb250
ZXh0LCBFR0xTdXJmYWNlKTsKLQotICAgICAgICBFR0xEaXNwbGF5IG1fZGlzcGxheSB7IG51bGxw
dHIgfTsKLSAgICAgICAgRUdMQ29uZmlnIG1fY29uZmlnIHsgbnVsbHB0ciB9OwotICAgICAgICBF
R0xDb250ZXh0IG1fY29udGV4dCB7IG51bGxwdHIgfTsKLSAgICAgICAgRUdMU3VyZmFjZSBtX3N1
cmZhY2UgeyBudWxscHRyIH07Ci0gICAgfTsKLQogICAgIEdDR0xBTkdMRUxheWVyKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMQU5HTEUmKTsKICAgICB2aXJ0dWFsIH5HQ0dMQU5HTEVMYXllcigp
OwogCi0gICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHQ0dMQ29udGV4dCBwbGF0
Zm9ybUNvbnRleHQoKSBjb25zdDsKLSAgICBHQ0dMRGlzcGxheSBwbGF0Zm9ybURpc3BsYXkoKSBj
b25zdDsKLSAgICBHQ0dMQ29uZmlnIHBsYXRmb3JtQ29uZmlnKCkgY29uc3Q7Ci0KICAgICBDb250
ZW50TGF5ZXImIGNvbnRlbnRMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudExheWVyOyB9
CiAgICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgZmluYWw7CiAKIHByaXZhdGU6CiAgICAg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRSYgbV9jb250ZXh0OwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxBTkdMRUNvbnRleHQ+IG1fYW5nbGVDb250ZXh0OwogICAgIFJlZjxDb250ZW50TGF5
ZXI+IG1fY29udGVudExheWVyOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TC5jcHAKaW5kZXggYmJmMGU4MWViOTg1NTI1ZjMyNDc3MTI4ZTQ0MzczMzA0OWE5YzU1OC4uNGU0
MjcxOWE1ZDlmMDc4MTlhNTc5NTZkMTAyYjgyZGUwNmJlZmJhZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuY3BwCkBAIC0yOTAsNiArMjkwLDExIEBAIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKQogI2VuZGlmCiB9CiAKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmluaXRpYWxpemUoKQoreworICAgIHJldHVybiBwbGF0
Zm9ybUluaXRpYWxpemUoKTsKK30KKwogYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFr
ZUNvbnRleHRDdXJyZW50KCkKIHsKICNpZiBVU0UoTklDT1NJQSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMLmgKaW5kZXggNTk3OTY4ZTBmZmU5Mjc4MzA4MDYxMzI5M2JmZjgwYWM4MDgy
MGE2OC4uNDA1MWZjNTIyMGNhMGEyYzNkNTBhZDk3NzE2ZWMyYzFlOTdmNTQzNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKQEAgLTQzMSw2ICs0MzEsMTAgQEAgcHJvdGVjdGVk
OgogICAgIC8vIENhbGxlZCBvbmNlIGJ5IGFsbCB0aGUgcHVibGljIGVudHJ5IHBvaW50cyBvZiBF
eHRlbnNpb25zR0xPcGVuR0wvRXh0ZW5zaW9uR0xPcGVuR0xFUyB0aGF0IGV2ZW50dWFsbHkgY2Fs
bCBPcGVuR0wuCiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKSBXQVJOX1VOVVNFRF9SRVRV
Uk47CiAKKyAgICAvLyBJbml0aWFsaXplcyB0aGUgaW5zdGFuY2UuIFJldHVybnMgZmFsc2UgaWYg
dGhlIGluc3RhbmNlIHNob3VsZCBub3QgYmUgdXNlZC4KKyAgICBib29sIGluaXRpYWxpemUoKTsK
KyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1Jbml0aWFsaXplKCkgPSAwOworCiAgICAgLy8gVGFr
ZSBpbnRvIGFjY291bnQgdGhlIHVzZXIncyByZXF1ZXN0ZWQgY29udGV4dCBjcmVhdGlvbiBhdHRy
aWJ1dGVzLAogICAgIC8vIGluIHBhcnRpY3VsYXIgc3RlbmNpbCBhbmQgYW50aWFsaWFzLCBhbmQg
ZGV0ZXJtaW5lIHdoaWNoIGNvdWxkIG9yCiAgICAgLy8gY291bGQgbm90IGJlIGhvbm9yZWQgYmFz
ZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgT3BlbkdMCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQU5HTEVDb250ZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9BTkdMRUNvbnRleHQuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzM3YWI4ZmEwNGJlMDJkMjc0MWM1OTg3ZGY5MTQ1
MjQzM2MyMzEwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9BTkdMRUNvbnRleHQuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KLSAqIENvcHlyaWdodCAoQykgMjAxOCwgMjAxOSBJ
Z2FsaWEgUy5MLgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMjAgQXBwbGUgSW5jLgotICogQ29w
eXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAqICAgIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiQU5HTEVDb250ZXh0LmgiCi0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIFVTRShBTkdM
RSkgJiYgIVVTRShOSUNPU0lBKQotCi0jaW5jbHVkZSAiQU5HTEVIZWFkZXJzLmgiCi0jaW5jbHVk
ZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jb25zdCBjaGFyKiBBTkdMRUNvbnRleHQ6OmVycm9yU3RyaW5nKGludCBzdGF0dXND
b2RlKQotewotICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGludCkgPj0gc2l6ZW9mKEVHTGludCks
ICJFR0xpbnQgbXVzdCBub3QgYmUgd2lkZXIgdGhhbiBpbnQiKTsKLSAgICBzd2l0Y2ggKHN0YXR1
c0NvZGUpIHsKLSNkZWZpbmUgQ0FTRV9SRVRVUk5fU1RSSU5HKG5hbWUpIGNhc2UgbmFtZTogcmV0
dXJuICNuYW1lCi0gICAgICAgIC8vIGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L0VH
TC9zZGsvZG9jcy9tYW4vaHRtbC9lZ2xHZXRFcnJvci54aHRtbAotICAgICAgICBDQVNFX1JFVFVS
Tl9TVFJJTkcoRUdMX1NVQ0NFU1MpOwotICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX05P
VF9JTklUSUFMSVpFRCk7Ci0gICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX0FDQ0VT
Uyk7Ci0gICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX0FMTE9DKTsKLSAgICAgICAg
Q0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfQVRUUklCVVRFKTsKLSAgICAgICAgQ0FTRV9SRVRV
Uk5fU1RSSU5HKEVHTF9CQURfQ09OVEVYVCk7Ci0gICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhF
R0xfQkFEX0NPTkZJRyk7Ci0gICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX0NVUlJF
TlRfU1VSRkFDRSk7Ci0gICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX0RJU1BMQVkp
OwotICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9TVVJGQUNFKTsKLSAgICAgICAg
Q0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfTUFUQ0gpOwotICAgICAgICBDQVNFX1JFVFVSTl9T
VFJJTkcoRUdMX0JBRF9QQVJBTUVURVIpOwotICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdM
X0JBRF9OQVRJVkVfUElYTUFQKTsKLSAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURf
TkFUSVZFX1dJTkRPVyk7Ci0gICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfQ09OVEVYVF9M
T1NUKTsKLSN1bmRlZiBDQVNFX1JFVFVSTl9TVFJJTkcKLSAgICBkZWZhdWx0OiByZXR1cm4gIlVu
a25vd24gRUdMIGVycm9yIjsKLSAgICB9Ci19Ci0KLWNvbnN0IGNoYXIqIEFOR0xFQ29udGV4dDo6
bGFzdEVycm9yU3RyaW5nKCkKLXsKLSAgICByZXR1cm4gZXJyb3JTdHJpbmcoRUdMX0dldEVycm9y
KCkpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8QU5HTEVDb250ZXh0PiBBTkdMRUNvbnRleHQ6OmNy
ZWF0ZUNvbnRleHQoRUdMQ29udGV4dCBzaGFyaW5nQ29udGV4dCwgYm9vbCBpc0ZvcldlYkdMMikK
LXsKLSAgICBFR0xEaXNwbGF5IGRpc3BsYXkgPSBFR0xfR2V0RGlzcGxheShFR0xfREVGQVVMVF9E
SVNQTEFZKTsKLSAgICBpZiAoZGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBFR0xpbnQgbWFqb3JWZXJzaW9uLCBtaW5vclZlcnNpb247Ci0g
ICAgaWYgKEVHTF9Jbml0aWFsaXplKGRpc3BsYXksICZtYWpvclZlcnNpb24sICZtaW5vclZlcnNp
b24pID09IEVHTF9GQUxTRSkgewotICAgICAgICBMT0coV2ViR0wsICJFR0xEaXNwbGF5IEluaXRp
YWxpemF0aW9uIGZhaWxlZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAg
IExPRyhXZWJHTCwgIkFOR0xFIGluaXRpYWxpc2VkIE1ham9yOiAlZCBNaW5vcjogJWQiLCBtYWpv
clZlcnNpb24sIG1pbm9yVmVyc2lvbik7Ci0KLSAgICBjb25zdCBjaGFyKiBkaXNwbGF5RXh0ZW5z
aW9ucyA9IEVHTF9RdWVyeVN0cmluZyhkaXNwbGF5LCBFR0xfRVhURU5TSU9OUyk7Ci0gICAgTE9H
KFdlYkdMLCAiRXh0ZW5zaW9uczogJXMiLCBkaXNwbGF5RXh0ZW5zaW9ucyk7Ci0KLSAgICBFR0xD
b25maWcgY29uZmlnOwotICAgIEVHTGludCBjb25maWdBdHRyaWJ1dGVzW10gPSB7Ci0gICAgICAg
IEVHTF9SRU5ERVJBQkxFX1RZUEUsIEVHTF9PUEVOR0xfRVMyX0JJVCwKLSAgICAgICAgRUdMX1JF
RF9TSVpFLCA4LAotICAgICAgICBFR0xfR1JFRU5fU0laRSwgOCwKLSAgICAgICAgRUdMX0JMVUVf
U0laRSwgOCwKLSAgICAgICAgRUdMX0FMUEhBX1NJWkUsIDgsCi0gICAgICAgIEVHTF9OT05FCi0g
ICAgfTsKLSAgICBFR0xpbnQgbnVtYmVyQ29uZmlnc1JldHVybmVkID0gMDsKLSAgICBFR0xfQ2hv
b3NlQ29uZmlnKGRpc3BsYXksIGNvbmZpZ0F0dHJpYnV0ZXMsICZjb25maWcsIDEsICZudW1iZXJD
b25maWdzUmV0dXJuZWQpOwotICAgIGlmIChudW1iZXJDb25maWdzUmV0dXJuZWQgIT0gMSkgewot
ICAgICAgICBMT0coV2ViR0wsICJFR0xDb25maWcgSW5pdGlhbGl6YXRpb24gZmFpbGVkLiIpOwot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgTE9HKFdlYkdMLCAiR290IEVHTENv
bmZpZyIpOwotCi0gICAgRUdMX0JpbmRBUEkoRUdMX09QRU5HTF9FU19BUEkpOwotICAgIGlmIChF
R0xfR2V0RXJyb3IoKSAhPSBFR0xfU1VDQ0VTUykgewotICAgICAgICBMT0coV2ViR0wsICJVbmFi
bGUgdG8gYmluZCB0byBPUEVOR0xfRVNfQVBJIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIH0KLQotICAgIFZlY3RvcjxFR0xpbnQ+IGNvbnRleHRBdHRyaWJ1dGVzOwotICAgIGlmIChp
c0ZvcldlYkdMMikgewotICAgICAgICBjb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0NPTlRF
WFRfQ0xJRU5UX1ZFUlNJT04pOwotICAgICAgICBjb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoMyk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05U
RVhUX0NMSUVOVF9WRVJTSU9OKTsKLSAgICAgICAgY29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKDIp
OwotICAgICAgICAvLyBBTkdMRSB3aWxsIHVwZ3JhZGUgdGhlIGNvbnRleHQgdG8gRVMzIGF1dG9t
YXRpY2FsbHkgdW5sZXNzIHRoaXMgaXMgc3BlY2lmaWVkLgotICAgICAgICBjb250ZXh0QXR0cmli
dXRlcy5hcHBlbmQoRUdMX0NPTlRFWFRfT1BFTkdMX0JBQ0tXQVJEU19DT01QQVRJQkxFX0FOR0xF
KTsKLSAgICAgICAgY29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9GQUxTRSk7Ci0gICAgfQot
ICAgIGNvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfQ09OVEVYVF9XRUJHTF9DT01QQVRJQklM
SVRZX0FOR0xFKTsKLSAgICBjb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX1RSVUUpOwotICAg
IC8vIFdlYkdMIHJlcXVpcmVzIHRoYXQgYWxsIHJlc291cmNlcyBhcmUgY2xlYXJlZCBhdCBjcmVh
dGlvbi4KLSAgICBjb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX1JPQlVTVF9SRVNPVVJDRV9J
TklUSUFMSVpBVElPTl9BTkdMRSk7Ci0gICAgY29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9U
UlVFKTsKLSAgICAvLyBXZWJHTCBkb2Vzbid0IGFsbG93IGNsaWVudCBhcnJheXMuCi0gICAgY29u
dGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX0NMSUVOVF9BUlJBWVNfRU5BQkxFRF9B
TkdMRSk7Ci0gICAgY29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9GQUxTRSk7Ci0gICAgLy8g
V2ViR0wgZG9lc24ndCBhbGxvdyBpbXBsaWNpdCBjcmVhdGlvbiBvZiBvYmplY3RzIG9uIGJpbmQu
Ci0gICAgY29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX0JJTkRfR0VORVJBVEVT
X1JFU09VUkNFX0NIUk9NSVVNKTsKLSAgICBjb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0ZB
TFNFKTsKLQotICAgIGlmIChzdHJzdHIoZGlzcGxheUV4dGVuc2lvbnMsICJFR0xfQU5HTEVfcG93
ZXJfcHJlZmVyZW5jZSIpKSB7Ci0gICAgICAgIGNvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xf
UE9XRVJfUFJFRkVSRU5DRV9BTkdMRSk7Ci0gICAgICAgIC8vIEVHTF9MT1dfUE9XRVJfQU5HTEUg
aXMgdGhlIGRlZmF1bHQuIENoYW5nZSB0bwotICAgICAgICAvLyBFR0xfSElHSF9QT1dFUl9BTkdM
RSBpZiBkZXNpcmVkLgotICAgICAgICBjb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0xPV19Q
T1dFUl9BTkdMRSk7Ci0gICAgfQotICAgIGNvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfTk9O
RSk7Ci0KLSAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBFR0xfQ3JlYXRlQ29udGV4dChkaXNwbGF5
LCBjb25maWcsIHNoYXJpbmdDb250ZXh0LCBjb250ZXh0QXR0cmlidXRlcy5kYXRhKCkpOwotICAg
IGlmIChjb250ZXh0ID09IEVHTF9OT19DT05URVhUKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIkVH
TENvbnRleHQgSW5pdGlhbGl6YXRpb24gZmFpbGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0gICAgTE9HKFdlYkdMLCAiR290IEVHTENvbnRleHQiKTsKLQotICAgIHJldHVy
biBzdGQ6OnVuaXF1ZV9wdHI8QU5HTEVDb250ZXh0PihuZXcgQU5HTEVDb250ZXh0KGRpc3BsYXks
ICBjb25maWcsIGNvbnRleHQsIEVHTF9OT19TVVJGQUNFKSk7Ci19Ci0KLUFOR0xFQ29udGV4dDo6
QU5HTEVDb250ZXh0KEVHTERpc3BsYXkgZGlzcGxheSwgRUdMQ29uZmlnIGNvbmZpZywgRUdMQ29u
dGV4dCBjb250ZXh0LCBFR0xTdXJmYWNlIHN1cmZhY2UpCi0gICAgOiBtX2Rpc3BsYXkoZGlzcGxh
eSkKLSAgICAsIG1fY29uZmlnKGNvbmZpZykKLSAgICAsIG1fY29udGV4dChjb250ZXh0KQotICAg
ICwgbV9zdXJmYWNlKHN1cmZhY2UpCi17Ci19Ci0KLUFOR0xFQ29udGV4dDo6fkFOR0xFQ29udGV4
dCgpCi17Ci0gICAgaWYgKG1fY29udGV4dCkgewotICAgICAgICBHTF9CaW5kRnJhbWVidWZmZXIo
R0xfRlJBTUVCVUZGRVIsIDApOwotICAgICAgICBFR0xfTWFrZUN1cnJlbnQobV9kaXNwbGF5LCBF
R0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKLSAgICAgICAg
RUdMX0Rlc3Ryb3lDb250ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0KTsKLSAgICB9Ci0KLSAgICBp
ZiAobV9zdXJmYWNlKQotICAgICAgICBFR0xfRGVzdHJveVN1cmZhY2UobV9kaXNwbGF5LCBtX3N1
cmZhY2UpOwotfQotCi1ib29sIEFOR0xFQ29udGV4dDo6bWFrZUNvbnRleHRDdXJyZW50KCkKLXsK
LSAgICBBU1NFUlQobV9jb250ZXh0KTsKLQotICAgIGlmIChFR0xfR2V0Q3VycmVudENvbnRleHQo
KSAhPSBtX2NvbnRleHQpCi0gICAgICAgIHJldHVybiBFR0xfTWFrZUN1cnJlbnQobV9kaXNwbGF5
LCBtX3N1cmZhY2UsIG1fc3VyZmFjZSwgbV9jb250ZXh0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotRUdMQ29udGV4dCBBTkdMRUNvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fY29udGV4dDsKLX0KLQotRUdMRGlzcGxheSBBTkdMRUNvbnRleHQ6OnBsYXRm
b3JtRGlzcGxheSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGlzcGxheTsKLX0KLQotRUdMQ29u
ZmlnIEFOR0xFQ29udGV4dDo6cGxhdGZvcm1Db25maWcoKSBjb25zdAotewotICAgIHJldHVybiBt
X2NvbmZpZzsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9BTkdMRUNvbnRleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9BTkdMRUNvbnRleHQu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE3YzRjOTUxYzk1YzQyNDdlZGE0MzQ3
NDk4ZTIzZTg2ODNmOWRiNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQU5HTEVDb250
ZXh0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgsIDIw
MTkgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVu
dGVydGFpbm1lbnQgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAg
ZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkCi0gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIEhPTERFUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIFVTRShBTkdMRSkgJiYgIVVTRShO
SUNPU0lBKQotCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0KLXR5cGVkZWYgdm9pZCAq
RUdMQ29uZmlnOwotdHlwZWRlZiB2b2lkICpFR0xDb250ZXh0OwotdHlwZWRlZiB2b2lkICpFR0xE
aXNwbGF5OwotdHlwZWRlZiB2b2lkICpFR0xTdXJmYWNlOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEFOR0xFQ29udGV4dCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQU5HTEVD
b250ZXh0KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgY2hhciogZXJyb3JTdHJpbmcoaW50
IHN0YXR1c0NvZGUpOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBsYXN0RXJyb3JTdHJpbmcoKTsK
LQotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QU5HTEVDb250ZXh0PiBjcmVhdGVDb250ZXh0
KEVHTENvbnRleHQgc2hhcmluZ0NvbnRleHQsIGJvb2wgaXNGb3JXZWJHTDIpOwotICAgIH5BTkdM
RUNvbnRleHQoKTsKLQotICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgRUdMQ29u
dGV4dCBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKLSAgICBFR0xEaXNwbGF5IHBsYXRmb3JtRGlz
cGxheSgpIGNvbnN0OwotICAgIEVHTENvbmZpZyBwbGF0Zm9ybUNvbmZpZygpIGNvbnN0OwotcHJp
dmF0ZToKLSAgICBBTkdMRUNvbnRleHQoRUdMRGlzcGxheSwgRUdMQ29uZmlnLCBFR0xDb250ZXh0
LCBFR0xTdXJmYWNlKTsKLQotICAgIEVHTERpc3BsYXkgbV9kaXNwbGF5IHsgbnVsbHB0ciB9Owot
ICAgIEVHTENvbmZpZyBtX2NvbmZpZyB7IG51bGxwdHIgfTsKLSAgICBFR0xDb250ZXh0IG1fY29u
dGV4dCB7IG51bGxwdHIgfTsKLSAgICBFR0xTdXJmYWNlIG1fc3VyZmFjZSB7IG51bGxwdHIgfTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0
dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCmluZGV4IDBkYTk1MDE4MzM3OGUzMjU1
Y2I4ZGRiYjliZWYxYzFkZDc5NTQ4MTYuLjkyZmY1MjA2YjI1ZjA1MWQwMzU4NjI1YzkzYmI0OTFh
NDk2ZWI5ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBw
ZXIuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaWYgRU5BQkxFKFdFQkdMKSAmJiBVU0UoVEVYVFVS
RV9NQVBQRVIpCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaCIK
LSNpbmNsdWRlICJHcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUuaCIKICNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1M
YXllci5oIgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgpAQCAtNTYsNiArNTUsNyBAQAogI2luY2x1
ZGUgIk5pY29zaWFHQ0dMQU5HTEVMYXllci5oIgogI2Vsc2UKICNpbmNsdWRlICJOaWNvc2lhR0NH
TExheWVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1MYXllckRpc3BsYXlEZWxlZ2F0ZS5oIgogI2Vu
ZGlmCiAjZW5kaWYKIApAQCAtNzMsMzkgKzczLDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotbmFtZXNwYWNlIHsKLQotY2xhc3MgUGxhdGZvcm1MYXllckRpc3BsYXlEZWxlZ2F0ZSBmaW5h
bCA6IHB1YmxpYyBHcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUgewotcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8UGxhdGZvcm1MYXllckRpc3BsYXlEZWxlZ2F0ZT4gY3JlYXRlKFBs
YXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBQbGF0Zm9ybUxheWVyRGlzcGxheURlbGVnYXRlKHBsYXRmb3JtTGF5ZXIpKTsKLSAg
ICB9Ci0KLSAgICAvLyBHcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUgb3ZlcnJp
ZGVzLgotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBmaW5hbAotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fcGxhdGZvcm1MYXllcjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgUGxhdGZvcm1MYXllckRpc3BsYXlEZWxlZ2F0ZShQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxh
eWVyKQotICAgICAgICA6IG1fcGxhdGZvcm1MYXllcihwbGF0Zm9ybUxheWVyKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBQbGF0Zm9ybUxheWVyKiBtX3BsYXRmb3JtTGF5ZXI7Ci19OwotCi19Ci0KIFJl
ZlB0cjxHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI+IEdyYXBoaWNzQ29udGV4dEdMVGV4
dHVyZU1hcHBlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYmIGF0dHJpYnV0
ZXMpCiB7CiAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRSZWYoKm5ldyBHcmFwaGljc0NvbnRleHRH
TFRleHR1cmVNYXBwZXIoV1RGTW92ZShhdHRyaWJ1dGVzKSkpOwotI2lmIFVTRShBTkdMRSkKICAg
ICBpZiAoIWNvbnRleHQtPmluaXRpYWxpemUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0j
ZW5kaWYKICAgICByZXR1cm4gY29udGV4dDsKIH0KIApAQCAtMTEzLDE3ICs4NSwxMiBAQCBHcmFw
aGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6On5HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBw
ZXIoKSA9IGRlZmF1bHQ7CiAKIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6R3JhcGhp
Y3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYmIGF0
dHJpYnV0ZXMpCiAgICAgOiBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJCYXNlKFdURk1v
dmUoYXR0cmlidXRlcykpCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAgLCBtX2xheWVyQ29udGVudHNE
aXNwbGF5RGVsZWdhdGUoUGxhdGZvcm1MYXllckRpc3BsYXlEZWxlZ2F0ZTo6Y3JlYXRlKCZtX25p
Y29zaWFMYXllci0+Y29udGVudExheWVyKCkpKQotI2Vsc2UKLSAgICAsIG1fbGF5ZXJDb250ZW50
c0Rpc3BsYXlEZWxlZ2F0ZShQbGF0Zm9ybUxheWVyRGlzcGxheURlbGVnYXRlOjpjcmVhdGUobV90
ZXhtYXBMYXllci5nZXQoKSkpCi0jZW5kaWYKIHsKIH0KIAogUmVmUHRyPEdyYXBoaWNzTGF5ZXJD
b250ZW50c0Rpc3BsYXlEZWxlZ2F0ZT4gR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyOjps
YXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlKCkKIHsKLSAgICByZXR1cm4gbV9sYXllckNvbnRl
bnRzRGlzcGxheURlbGVnYXRlLnB0cigpOworICAgIHJldHVybiBtX2xheWVyQ29udGVudHNEaXNw
bGF5RGVsZWdhdGU7CiB9CiAKIFJlZlB0cjxHcmFwaGljc0NvbnRleHRHTD4gY3JlYXRlV2ViUHJv
Y2Vzc0dyYXBoaWNzQ29udGV4dEdMKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYg
YXR0cmlidXRlcykKQEAgLTE5Miw2ICsxNTksMTUgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTFRl
eHR1cmVNYXBwZXI6OmNvcHlUZXh0dXJlRnJvbU1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIFAK
IH0KICNlbmRpZgogCisjaWYgVVNFKE5JQ09TSUEpICYmICFVU0UoQU5HTEUpCitib29sIEdyYXBo
aWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1Jbml0aWFsaXplKCkKK3sKKyAgICBt
X2xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUgPSBQbGF0Zm9ybUxheWVyRGlzcGxheURlbGVn
YXRlOjpjcmVhdGUoJm1fbmljb3NpYUxheWVyLT5jb250ZW50TGF5ZXIoKSk7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAv
LyBFTkFCTEUoV0VCR0wpICYmIFVTRShURVhUVVJFX01BUFBFUikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1
cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFw
aGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuaAppbmRleCA5MWZhNTViY2Y4NGQ3MTk3MGJjNTBm
ODQzNzdlNTVhNDBkN2YwYTA3Li43NWJjMzJmM2ZiZWJlNzkxMDY0YjlhNWIxM2VhZDc0ZGM5ZTc5
N2JlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5oCkBA
IC00NSw3ICs0NSw3IEBAIGNsYXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dEdMVGV4
dHVyZU1hcHBlciA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTFRlCiBwdWJsaWM6CiAgICAgc3Rh
dGljIFJlZlB0cjxHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI+IGNyZWF0ZShXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmJik7CiAgICAgfkdyYXBoaWNzQ29udGV4dEdM
VGV4dHVyZU1hcHBlcigpOwotICAgIAorCiAgICAgLy8gR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJl
TWFwcGVyQmFzZSBvdmVycmlkZXMuCiAgICAgUmVmUHRyPEdyYXBoaWNzTGF5ZXJDb250ZW50c0Rp
c3BsYXlEZWxlZ2F0ZT4gbGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZSgpIGZpbmFsOwogI2lm
IEVOQUJMRShWSURFTykKQEAgLTYwLDkgKzYwLDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHByZXBh
cmVGb3JEaXNwbGF5KCkgZmluYWw7CiAjZW5kaWYKIAotcHJvdGVjdGVkOgorcHJpdmF0ZToKKyNp
ZiBVU0UoQU5HTEUpCisgICAgYm9vbCBwbGF0Zm9ybUluaXRpYWxpemVDb250ZXh0KCkgZmluYWw7
CisjZW5kaWYKKyAgICBib29sIHBsYXRmb3JtSW5pdGlhbGl6ZSgpIGZpbmFsOwogICAgIEdyYXBo
aWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEF0dHJp
YnV0ZXMmJik7Ci0gICAgUmVmPEdyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZT4g
bV9sYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlOworICAgIFJlZlB0cjxHcmFwaGljc0xheWVy
Q29udGVudHNEaXNwbGF5RGVsZWdhdGU+IG1fbGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZTsK
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyQU5HTEUuY3BwCmluZGV4IDk1NDE2N2Q2Y2Y2MjQwMzhkOTU1OThhZTcxYjYzYTlmZGJjNmM1
NGYuLjZiNzA4MjYzNmE1Mjk5YTJkNzMzM2U5OGU5Y2Y5MjBmZmUwOGUxN2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRH
TFRleHR1cmVNYXBwZXJBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFLmNwcApAQCAt
MzIsNyArMzIsOSBAQAogI2luY2x1ZGUgIkFOR0xFSGVhZGVycy5oIgogI2luY2x1ZGUgIkFOR0xF
VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgi
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1MYXllckRpc3BsYXlEZWxlZ2F0ZS5oIgogCiAjaWYgVVNFKE5JQ09TSUEpCiAj
aW5jbHVkZSAiR0JNRGV2aWNlLmgiCkBAIC00MSw2ICs0Myw4IEBACiAjaW5jbHVkZSA8ZmNudGwu
aD4KICNpbmNsdWRlIDxnYm0uaD4KICNlbHNlCisjaW5jbHVkZSAiR0xDb250ZXh0LmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1EaXNwbGF5LmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdDR0xQbGF0
Zm9ybUxheWVyLmgiCiAjZW5kaWYKIApAQCAtNDksMTEgKzUzLDExNCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFKEdy
YXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQogICAgIDogR3JhcGhpY3NDb250
ZXh0R0woYXR0cmlidXRlcykKIHsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVN
YXBwZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZUNvbnRleHQoKQoreworICAgIEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyBhdHRyaWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKICNpZiBFTkFC
TEUoV0VCR0wyKQogICAgIG1faXNGb3JXZWJHTDIgPSBhdHRyaWJ1dGVzLndlYkdMVmVyc2lvbiA9
PSBHcmFwaGljc0NvbnRleHRHTFdlYkdMVmVyc2lvbjo6V2ViR0wyOwogI2VuZGlmCisKKyAgICBW
ZWN0b3I8RUdMaW50PiBkaXNwbGF5QXR0cmlidXRlcyB7CisgICAgICAgIEVHTF9QTEFURk9STV9B
TkdMRV9UWVBFX0FOR0xFLCBFR0xfUExBVEZPUk1fQU5HTEVfVFlQRV9PUEVOR0xFU19BTkdMRSwK
KyAgICAgICAgRUdMX1BMQVRGT1JNX0FOR0xFX0RFVklDRV9UWVBFX0FOR0xFLCBFR0xfUExBVEZP
Uk1fQU5HTEVfREVWSUNFX1RZUEVfRUdMX0FOR0xFLAorICAgICAgICBFR0xfUExBVEZPUk1fQU5H
TEVfTkFUSVZFX1BMQVRGT1JNX1RZUEVfQU5HTEUsIEVHTF9QTEFURk9STV9TVVJGQUNFTEVTU19N
RVNBLAorICAgICAgICBFR0xfTk9ORSwKKyAgICB9OworCisgICAgbV9kaXNwbGF5T2JqID0gRUdM
X0dldFBsYXRmb3JtRGlzcGxheUVYVChFR0xfUExBVEZPUk1fQU5HTEVfQU5HTEUsIEVHTF9ERUZB
VUxUX0RJU1BMQVksIGRpc3BsYXlBdHRyaWJ1dGVzLmRhdGEoKSk7CisgICAgaWYgKG1fZGlzcGxh
eU9iaiA9PSBFR0xfTk9fRElTUExBWSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRUdM
aW50IG1ham9yVmVyc2lvbiwgbWlub3JWZXJzaW9uOworICAgIGlmIChFR0xfSW5pdGlhbGl6ZSht
X2Rpc3BsYXlPYmosICZtYWpvclZlcnNpb24sICZtaW5vclZlcnNpb24pID09IEVHTF9GQUxTRSkg
eworICAgICAgICBMT0coV2ViR0wsICJFR0xEaXNwbGF5IEluaXRpYWxpemF0aW9uIGZhaWxlZC4i
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBMT0coV2ViR0wsICJBTkdMRSBp
bml0aWFsaXNlZCBNYWpvcjogJWQgTWlub3I6ICVkIiwgbWFqb3JWZXJzaW9uLCBtaW5vclZlcnNp
b24pOworCisgICAgY29uc3QgY2hhciogZGlzcGxheUV4dGVuc2lvbnMgPSBFR0xfUXVlcnlTdHJp
bmcobV9kaXNwbGF5T2JqLCBFR0xfRVhURU5TSU9OUyk7CisgICAgTE9HKFdlYkdMLCAiRXh0ZW5z
aW9uczogJXMiLCBkaXNwbGF5RXh0ZW5zaW9ucyk7CisKKyAgICBFR0xpbnQgY29uZmlnQXR0cmli
dXRlc1tdID0geworICAgICAgICBFR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0VTMl9C
SVQsCisgICAgICAgIEVHTF9SRURfU0laRSwgOCwKKyAgICAgICAgRUdMX0dSRUVOX1NJWkUsIDgs
CisgICAgICAgIEVHTF9CTFVFX1NJWkUsIDgsCisgICAgICAgIEVHTF9BTFBIQV9TSVpFLCA4LAor
ICAgICAgICBFR0xfREVQVEhfU0laRSwgMCwKKyAgICAgICAgRUdMX1NURU5DSUxfU0laRSwgMCwK
KyAgICAgICAgRUdMX05PTkUKKyAgICB9OworICAgIEVHTGludCBudW1iZXJDb25maWdzUmV0dXJu
ZWQgPSAwOworICAgIEVHTF9DaG9vc2VDb25maWcobV9kaXNwbGF5T2JqLCBjb25maWdBdHRyaWJ1
dGVzLCAmbV9jb25maWdPYmosIDEsICZudW1iZXJDb25maWdzUmV0dXJuZWQpOworICAgIGlmIChu
dW1iZXJDb25maWdzUmV0dXJuZWQgIT0gMSkgeworICAgICAgICBMT0coV2ViR0wsICJFR0xDb25m
aWcgSW5pdGlhbGl6YXRpb24gZmFpbGVkLiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIExPRyhXZWJHTCwgIkdvdCBFR0xDb25maWciKTsKKworICAgIEVHTF9CaW5kQVBJKEVH
TF9PUEVOR0xfRVNfQVBJKTsKKyAgICBpZiAoRUdMX0dldEVycm9yKCkgIT0gRUdMX1NVQ0NFU1Mp
IHsKKyAgICAgICAgTE9HKFdlYkdMLCAiVW5hYmxlIHRvIGJpbmQgdG8gT1BFTkdMX0VTX0FQSSIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVmVjdG9yPEVHTGludD4gZWds
Q29udGV4dEF0dHJpYnV0ZXM7CisgICAgaWYgKG1faXNGb3JXZWJHTDIpIHsKKyAgICAgICAgZWds
Q29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OKTsKKyAg
ICAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKDMpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lP
Tik7CisgICAgICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZCgyKTsKKyAgICAgICAgLy8g
QU5HTEUgd2lsbCB1cGdyYWRlIHRoZSBjb250ZXh0IHRvIEVTMyBhdXRvbWF0aWNhbGx5IHVubGVz
cyB0aGlzIGlzIHNwZWNpZmllZC4KKyAgICAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5k
KEVHTF9DT05URVhUX09QRU5HTF9CQUNLV0FSRFNfQ09NUEFUSUJMRV9BTkdMRSk7CisgICAgICAg
IGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfRkFMU0UpOworICAgIH0KKyAgICBlZ2xD
b250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0NPTlRFWFRfV0VCR0xfQ09NUEFUSUJJTElUWV9B
TkdMRSk7CisgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9UUlVFKTsKKyAgICAv
LyBXZWJHTCByZXF1aXJlcyB0aGF0IGFsbCByZXNvdXJjZXMgYXJlIGNsZWFyZWQgYXQgY3JlYXRp
b24uCisgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9ST0JVU1RfUkVTT1VSQ0Vf
SU5JVElBTElaQVRJT05fQU5HTEUpOworICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChF
R0xfVFJVRSk7CisgICAgLy8gV2ViR0wgZG9lc24ndCBhbGxvdyBjbGllbnQgYXJyYXlzLgorICAg
IGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfQ09OVEVYVF9DTElFTlRfQVJSQVlTX0VO
QUJMRURfQU5HTEUpOworICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfRkFMU0Up
OworICAgIC8vIFdlYkdMIGRvZXNuJ3QgYWxsb3cgaW1wbGljaXQgY3JlYXRpb24gb2Ygb2JqZWN0
cyBvbiBiaW5kLgorICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfQ09OVEVYVF9C
SU5EX0dFTkVSQVRFU19SRVNPVVJDRV9DSFJPTUlVTSk7CisgICAgZWdsQ29udGV4dEF0dHJpYnV0
ZXMuYXBwZW5kKEVHTF9GQUxTRSk7CisKKyAgICBpZiAoc3Ryc3RyKGRpc3BsYXlFeHRlbnNpb25z
LCAiRUdMX0FOR0xFX3Bvd2VyX3ByZWZlcmVuY2UiKSkgeworICAgICAgICBlZ2xDb250ZXh0QXR0
cmlidXRlcy5hcHBlbmQoRUdMX1BPV0VSX1BSRUZFUkVOQ0VfQU5HTEUpOworICAgICAgICAvLyBF
R0xfTE9XX1BPV0VSX0FOR0xFIGlzIHRoZSBkZWZhdWx0LiBDaGFuZ2UgdG8KKyAgICAgICAgLy8g
RUdMX0hJR0hfUE9XRVJfQU5HTEUgaWYgZGVzaXJlZC4KKyAgICAgICAgZWdsQ29udGV4dEF0dHJp
YnV0ZXMuYXBwZW5kKEVHTF9MT1dfUE9XRVJfQU5HTEUpOworICAgIH0KKyAgICBlZ2xDb250ZXh0
QXR0cmlidXRlcy5hcHBlbmQoRUdMX05PTkUpOworCisjaWYgVVNFKE5JQ09TSUEpCisgICAgYXV0
byBzaGFyaW5nQ29udGV4dCA9IEVHTF9OT19DT05URVhUOworI2Vsc2UKKyAgICBhdXRvIHNoYXJp
bmdDb250ZXh0ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmco
KS5zaGFyaW5nR0xDb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpOworI2VuZGlmCisgICAgbV9j
b250ZXh0T2JqID0gRUdMX0NyZWF0ZUNvbnRleHQobV9kaXNwbGF5T2JqLCBtX2NvbmZpZ09iaiwg
c2hhcmluZ0NvbnRleHQsIGVnbENvbnRleHRBdHRyaWJ1dGVzLmRhdGEoKSk7CisgICAgaWYgKG1f
Y29udGV4dE9iaiA9PSBFR0xfTk9fQ09OVEVYVCkgeworICAgICAgICBMT0coV2ViR0wsICJFR0xD
b250ZXh0IEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKSB7CisgICAgICAgIExPRyhXZWJH
TCwgIkFOR0xFIG1ha2VDb250ZXh0Q3VycmVudCBmYWlsZWQuIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgTE9HKFdlYkdMLCAiR290IEVHTENvbnRleHQiKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6OnBsYXRm
b3JtSW5pdGlhbGl6ZSgpCit7CiAjaWYgVVNFKE5JQ09TSUEpCiAgICAgbV9uaWNvc2lhTGF5ZXIg
PSBtYWtlVW5pcXVlPE5pY29zaWE6OkdDR0xBTkdMRUxheWVyPigqdGhpcyk7CisgICAgbV9sYXll
ckNvbnRlbnRzRGlzcGxheURlbGVnYXRlID0gUGxhdGZvcm1MYXllckRpc3BsYXlEZWxlZ2F0ZTo6
Y3JlYXRlKCZtX25pY29zaWFMYXllci0+Y29udGVudExheWVyKCkpOwogCiAgICAgY29uc3QgYXV0
byYgZ2JtRGV2aWNlID0gR0JNRGV2aWNlOjpnZXQoKTsKICAgICBpZiAoZ2JtRGV2aWNlLmRldmlj
ZSgpKSB7CkBAIC02MywxOCArMTcwLDE3IEBAIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OkdyYXBo
aWNzQ29udGV4dEdMQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpCiAgICAg
fQogI2Vsc2UKICAgICBtX3RleG1hcExheWVyID0gbWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyR0NH
TFBsYXRmb3JtTGF5ZXI+KCp0aGlzKTsKKyAgICBtX2xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdh
dGUgPSBQbGF0Zm9ybUxheWVyRGlzcGxheURlbGVnYXRlOjpjcmVhdGUobV90ZXhtYXBMYXllci5n
ZXQoKSk7CiAjZW5kaWYKICAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
ICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotICAgIHN1Y2Nlc3MgPSBpbml0
aWFsaXplKCk7Ci0gICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKIAogICAgIC8v
IFdlIHJlcXVpcmUgdGhpcyBleHRlbnNpb24gdG8gcmVuZGVyIGludG8gdGhlIGRtYWJ1Zi1iYWNr
ZWQgRUdMSW1hZ2UuCiAgICAgUkVMRUFTRV9BU1NFUlQoc3VwcG9ydHNFeHRlbnNpb24oIkdMX09F
U19FR0xfaW1hZ2UiKSk7CiAgICAgR0xfUmVxdWVzdEV4dGVuc2lvbkFOR0xFKCJHTF9PRVNfRUdM
X2ltYWdlIik7CiAKICAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKLSAgICBhdHRyaWJ1dGVzID0g
Y29udGV4dEF0dHJpYnV0ZXMoKTsgLy8gVGhleSBtYXkgaGF2ZSBjaGFuZ2VkIGR1cmluZyB2YWxp
ZGF0aW9uLgorICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRo
ZXkgbWF5IGhhdmUgY2hhbmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KIAogICAgIEdMZW51bSB0ZXh0
dXJlVGFyZ2V0ID0gZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKTsKICAgICAvLyBDcmVhdGUg
YSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvLgpAQCAtMTI2LDYgKzIzMiw3IEBAIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xBdHRy
aWJ1dGVzIGF0dHJpCiAgICAgfQogCiAgICAgR0xfQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAogI2lmIFVTRShOSUNPU0lBKQpAQCAtMjM4LDI5ICszNDUsMTkg
QEAgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6fkdyYXBoaWNzQ29udGV4dEdMQU5HTEUoKQogCiBH
Q0dMRGlzcGxheSBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwbGF0Zm9ybURpc3BsYXkoKSBjb25z
dAogewotI2lmIFVTRShOSUNPU0lBKQotICAgIHJldHVybiBtX25pY29zaWFMYXllci0+cGxhdGZv
cm1EaXNwbGF5KCk7Ci0jZWxzZQotICAgIHJldHVybiBtX3RleG1hcExheWVyLT5wbGF0Zm9ybURp
c3BsYXkoKTsKLSNlbmRpZgorICAgIHJldHVybiBtX2Rpc3BsYXlPYmo7CiB9CiAKIEdDR0xDb25m
aWcgR3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1Db25maWcoKSBjb25zdAogewotI2lm
IFVTRShOSUNPU0lBKQotICAgIHJldHVybiBtX25pY29zaWFMYXllci0+cGxhdGZvcm1Db25maWco
KTsKLSNlbHNlCi0gICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXItPnBsYXRmb3JtQ29uZmlnKCk7Ci0j
ZW5kaWYKKyAgICByZXR1cm4gbV9jb25maWdPYmo7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0
R0xBTkdMRTo6bWFrZUNvbnRleHRDdXJyZW50KCkKIHsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICBy
ZXR1cm4gbV9uaWNvc2lhTGF5ZXItPm1ha2VDb250ZXh0Q3VycmVudCgpOwotI2Vsc2UKLSAgICBy
ZXR1cm4gbV90ZXhtYXBMYXllci0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jZW5kaWYKKyAgICBp
ZiAoRUdMX0dldEN1cnJlbnRDb250ZXh0KCkgPT0gbV9jb250ZXh0T2JqKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gRUdMX01ha2VDdXJyZW50KG1fZGlzcGxheU9iaiwgRUdMX05P
X1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBtX2NvbnRleHRPYmopOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEU6OmNoZWNrR1BVU3RhdHVzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9QbGF0Zm9ybUxheWVyRGlzcGxheURlbGVn
YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvUGxhdGZvcm1M
YXllckRpc3BsYXlEZWxlZ2F0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYwNWVlMTE3ZTg2MzRlYzZiNGY5YWFm
NDZjZDg3ZGJiNTM5ZjAyNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvUGxhdGZvcm1MYXllckRpc3BsYXlEZWxlZ2F0ZS5oCkBAIC0w
LDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlE
ZWxlZ2F0ZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBQbGF0Zm9ybUxheWVyRGlzcGxheURlbGVnYXRlIGZpbmFsIDogcHVibGlj
IEdyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxQbGF0Zm9ybUxheWVyRGlzcGxheURlbGVnYXRlPiBjcmVhdGUoUGxhdGZvcm1MYXll
ciogcGxhdGZvcm1MYXllcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBs
YXRmb3JtTGF5ZXJEaXNwbGF5RGVsZWdhdGUocGxhdGZvcm1MYXllcikpOworICAgIH0KKworICAg
IC8vIEdyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZSBvdmVycmlkZXMuCisgICAg
UGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IGZpbmFsCisgICAgeworICAgICAg
ICByZXR1cm4gbV9wbGF0Zm9ybUxheWVyOworICAgIH0KKworcHJpdmF0ZToKKyAgICBQbGF0Zm9y
bUxheWVyRGlzcGxheURlbGVnYXRlKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIpCisgICAg
ICAgIDogbV9wbGF0Zm9ybUxheWVyKHBsYXRmb3JtTGF5ZXIpCisgICAgeworICAgIH0KKworICAg
IFBsYXRmb3JtTGF5ZXIqIG1fcGxhdGZvcm1MYXllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5jcHAK
aW5kZXggYjU2MDZiMzg4ZTc1MmUzNDkwODM2OGEzY2M0MDkwMDc0M2Y4YTY3Mi4uMGUxOWQ4Yzdi
NWIwMWZkOGRmNjg5NmRjZmQyMTUxMjZjYTgyNzMyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXll
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5jcHAKQEAgLTIzLDcgKzIzLDYgQEAKIAogI2lmIEVO
QUJMRShXRUJHTCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiAhVVNFKE5JQ09TSUEpCiAKLSNp
bmNsdWRlICJBTkdMRUNvbnRleHQuaCIKICNpbmNsdWRlICJBTkdMRUhlYWRlcnMuaCIKICNpbmNs
dWRlICJCaXRtYXBUZXh0dXJlR0wuaCIKICNpbmNsdWRlICJHTENvbnRleHQuaCIKQEAgLTM2LDc3
ICszNSwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3Jt
TGF5ZXI6OlRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcihHcmFwaGljc0NvbnRleHRHTEFO
R0xFJiBjb250ZXh0KQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiB7Ci0gICAgYXV0byBzaGFy
aW5nQ29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5n
KCkuc2hhcmluZ0dMQ29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKLSNpZiBFTkFCTEUoV0VC
R0wyKQotICAgIG1fZ2xDb250ZXh0ID0gQU5HTEVDb250ZXh0OjpjcmVhdGVDb250ZXh0KHNoYXJp
bmdDb250ZXh0LCBjb250ZXh0LmNvbnRleHRBdHRyaWJ1dGVzKCkud2ViR0xWZXJzaW9uID09IEdy
YXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDIpOwotI2Vsc2UKLSAgICBtX2dsQ29u
dGV4dCA9IEFOR0xFQ29udGV4dDo6Y3JlYXRlQ29udGV4dChzaGFyaW5nQ29udGV4dCwgZmFsc2Up
OwotI2VuZGlmCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgbV9wbGF0Zm9y
bUxheWVyUHJveHkgPSBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eUdMKTsKLSNlbmRpZgogfQogCiBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI6On5UZXh0
dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIoKQogewotI2lmICFVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCiAgICAgaWYgKGNsaWVudCgpKQogICAgICAgICBjbGllbnQoKS0+cGxhdGZvcm1MYXll
cldpbGxCZURlc3Ryb3llZCgpOwotI2VuZGlmCi19Ci0KLWJvb2wgVGV4dHVyZU1hcHBlckdDR0xQ
bGF0Zm9ybUxheWVyOjptYWtlQ29udGV4dEN1cnJlbnQoKQotewotICAgIEFTU0VSVChtX2dsQ29u
dGV4dCk7Ci0gICAgcmV0dXJuIG1fZ2xDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLX0K
LQotR0NHTENvbnRleHQgVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOjpwbGF0Zm9ybUNv
bnRleHQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2dsQ29udGV4dCk7Ci0gICAgcmV0dXJuIG1f
Z2xDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLX0KLQotR0NHTERpc3BsYXkgVGV4dHVyZU1h
cHBlckdDR0xQbGF0Zm9ybUxheWVyOjpwbGF0Zm9ybURpc3BsYXkoKSBjb25zdAotewotICAgIEFT
U0VSVChtX2dsQ29udGV4dCk7Ci0gICAgcmV0dXJuIG1fZ2xDb250ZXh0LT5wbGF0Zm9ybURpc3Bs
YXkoKTsKLX0KLQotR0NHTENvbmZpZyBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI6OnBs
YXRmb3JtQ29uZmlnKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9nbENvbnRleHQpOwotICAgIHJl
dHVybiBtX2dsQ29udGV4dC0+cGxhdGZvcm1Db25maWcoKTsKIH0KIAotI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKLVJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBU
ZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI6OnByb3h5KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9wbGF0Zm9ybUxheWVyUHJveHkuY29weVJlZigpOwotfQotCi12b2lkIFRleHR1cmVNYXBw
ZXJHQ0dMUGxhdGZvcm1MYXllcjo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1f
Y29udGV4dC5sYXllckNvbXBvc2l0ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250
ZXh0LnByZXBhcmVUZXh0dXJlKCk7Ci0gICAgSW50U2l6ZSB0ZXh0dXJlU2l6ZShtX2NvbnRleHQu
bV9jdXJyZW50V2lkdGgsIG1fY29udGV4dC5tX2N1cnJlbnRIZWlnaHQpOwotICAgIFRleHR1cmVN
YXBwZXJHTDo6RmxhZ3MgZmxhZ3MgPSBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEZsaXBUZXh0dXJl
IHwgKG1fY29udGV4dC5tX2F0dHJzLmFscGhhID8gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVu
ZCA6IDApOwotCi0gICAgewotICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9wbGF0Zm9ybUxheWVy
UHJveHktPmxvY2soKSB9OwotICAgICAgICBkb3duY2FzdDxUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllclByb3h5R0w+KCptX3BsYXRmb3JtTGF5ZXJQcm94eSkucHVzaE5leHRCdWZmZXIobWFrZVVu
aXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4obV9jb250ZXh0Lm1fY29tcG9z
aXRvclRleHR1cmUsIHRleHR1cmVTaXplLCBmbGFncywgbV9jb250ZXh0Lm1faW50ZXJuYWxDb2xv
ckZvcm1hdCkpOwotICAgIH0KLQotICAgIG1fY29udGV4dC5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7
Ci19Ci0jZWxzZQogdm9pZCBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI6OnBhaW50VG9U
ZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQg
b3BhY2l0eSkKIHsKLSAgICBBU1NFUlQobV9nbENvbnRleHQpOwotCiAgICAgbV9jb250ZXh0Lm1h
cmtMYXllckNvbXBvc2l0ZWQoKTsKIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKQEAgLTEy
OSw3ICs2Nyw2IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOjpwYWludFRv
VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlCiAgICAgdGV4bWFwR0wuZHJhd1Rl
eHR1cmUobV9jb250ZXh0Lm1fdGV4dHVyZSwgZmxhZ3MsIHRleHR1cmVTaXplLCB0YXJnZXRSZWN0
LCBtYXRyaXgsIG9wYWNpdHkpOwogI2VuZGlmIC8vIFVTRShURVhUVVJFX01BUFBFUl9HTCkKIH0K
LSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5oCmlu
ZGV4IGY3Yjg1NzRmOGYwMzBkMzBkNjUxMWU2YjhkODA0Y2Q5ZTUwMjJkMjIuLjc0NDI2ZjJiNGEz
NTI2NTVlMzU0ODkzZmZmNjkyYjA3NTkzOGRlNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckdDR0xQbGF0Zm9ybUxheWVyLmgKQEAgLTI4LDcgKzI4LDYgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBBTkdMRUNvbnRleHQ7CiBjbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllclByb3h5OwogCiBjbGFzcyBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIgOiBw
dWJsaWMgUGxhdGZvcm1MYXllciB7CkBAIC0zNywyNSArMzYsMTAgQEAgcHVibGljOgogICAgIFRl
eHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcihHcmFwaGljc0NvbnRleHRHTEFOR0xFJik7CiAg
ICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyKCk7CiAKLSAgICBib29s
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdDR0xDb250ZXh0IHBsYXRmb3JtQ29udGV4dCgp
IGNvbnN0OwotICAgIEdDR0xEaXNwbGF5IHBsYXRmb3JtRGlzcGxheSgpIGNvbnN0OwotICAgIEdD
R0xDb25maWcgcGxhdGZvcm1Db25maWcoKSBjb25zdDsKLQotI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gcHJv
eHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVy
cmlkZTsKLSNlbHNlCiAgICAgdmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1
cmVNYXBwZXImLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKLSNlbmRpZgogCiBwcml2YXRlOgogICAgIEdyYXBoaWNz
Q29udGV4dEdMQU5HTEUmIG1fY29udGV4dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QU5HTEVDb250
ZXh0PiBtX2dsQ29udGV4dDsKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBS
ZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gbV9wbGF0Zm9ybUxheWVyUHJv
eHk7Ci0jZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453156</attachid>
            <date>2022-02-24 16:35:31 -0800</date>
            <delta_ts>2022-02-25 18:04:46 -0800</delta_ts>
            <desc>Fix WinCairo</desc>
            <filename>bug236769-fix-wincairo.diff</filename>
            <type>text/plain</type>
            <size>46714</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkODAxZWQ2YTljYTUuLjA4NGQ5MDZmOTMwMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDcyIEBACisyMDIyLTAyLTI0ICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2Fs
aWEuY29tPiBhbmQgRnVqaWkgSGlyb25vcmkgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgorCisg
ICAgICAgIFtHVEtdW1dQRV1bV0NdIE1vdmUgQU5HTEUgY29udGV4dCBpbml0aWFsaXNhdGlvbiB0
byBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6OmluaXRpYWxpemUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjc2OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgdGhlIGZpcnN0IHN0
ZXAgZm9yIHRoZSBsb25nLXRlcm0gcGxhbiB0byBzaGFyZSBtb3JlIGNvZGUKKyAgICAgICAgaW4g
R3JhcGhpY3NDb250ZXh0R0xBTkdMRSBiZXR3ZWVuIENvY29hIGFuZCBub24tQ29jb2EsIGFuZAor
ICAgICAgICBtaW5pbWlzZSB0aGUgaWZkZWZzIGluIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUuCisK
KyAgICAgICAgV2UgYXJlIG1vdmluZyB0aGUgY29udGV4dCBpbml0aWFsaXNhdGlvbiBhbmQgaG9s
ZGluZyB0bworICAgICAgICBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIsIGF3YXkgZnJv
bQorICAgICAgICBHQ0dMQU5HTEVMYXllcjo6QU5HTEVDb250ZXh0IGFuZCB0aGUgbGF5ZXIgY2xh
c3NlcyBpbiBjYXNlIG9mCisgICAgICAgIENPT1JESU5BVEVEX0dSQVBISUNTLiBMYXRlciBvbiwg
Q29jb2EgYW5kIG5vbi1Db2NvYSBjYW4gbWVyZ2UKKyAgICAgICAgdGhlaXIgOjppbml0aWFsaXpl
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhpcyBpcyBhIHJlZmFjdG9yaW5nIHBhdGNoLgor
CisgICAgICAgICogcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xBTkdMRUxheWVyLmNw
cDoKKyAgICAgICAgKE5pY29zaWE6OkdDR0xBTkdMRUxheWVyOjpHQ0dMQU5HTEVMYXllcik6Cisg
ICAgICAgIChOaWNvc2lhOjpHQ0dMQU5HTEVMYXllcjo6QU5HTEVDb250ZXh0OjplcnJvclN0cmlu
Zyk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpHQ0dMQU5HTEVMYXllcjo6QU5HTEVDb250
ZXh0OjpsYXN0RXJyb3JTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6R0NHTEFO
R0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6Y3JlYXRlQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAg
IChOaWNvc2lhOjpHQ0dMQU5HTEVMYXllcjo6QU5HTEVDb250ZXh0OjpBTkdMRUNvbnRleHQpOiBE
ZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6R0NHTEFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6
fkFOR0xFQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpHQ0dMQU5HTEVMYXll
cjo6QU5HTEVDb250ZXh0OjptYWtlQ29udGV4dEN1cnJlbnQpOiBEZWxldGVkLgorICAgICAgICAo
Tmljb3NpYTo6R0NHTEFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkdDR0xBTkdMRUxheWVyOjpBTkdMRUNv
bnRleHQ6OnBsYXRmb3JtRGlzcGxheSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lh
OjpHQ0dMQU5HTEVMYXllcjo6QU5HTEVDb250ZXh0OjpwbGF0Zm9ybUNvbmZpZyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpHQ0dMQU5HTEVMYXllcjo6bWFrZUNvbnRleHRDdXJy
ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkdDR0xBTkdMRUxheWVyOjpwbGF0Zm9y
bUNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6R0NHTEFOR0xFTGF5
ZXI6OnBsYXRmb3JtRGlzcGxheSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpH
Q0dMQU5HTEVMYXllcjo6cGxhdGZvcm1Db25maWcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW5p
dGlhbGl6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0FOR0xF
Q29udGV4dC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L0FOR0xFQ29udGV4dC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyOjpHcmFwaGljc0NvbnRleHRHTFRl
eHR1cmVNYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJl
TWFwcGVyOjpsYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXJBTkdMRS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6
cGxhdGZvcm1Jbml0aWFsaXplQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTFRleHR1cmVNYXBwZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpwbGF0Zm9ybURpc3BsYXkgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1Db25maWcgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBTkdMRTo6bWFrZUNvbnRl
eHRDdXJyZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvUGxhdGZvcm1M
YXllckRpc3BsYXlEZWxlZ2F0ZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmguCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1M
YXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5
ZXI6OlRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI6On5UZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3Jt
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVy
OjpwYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
R0NHTFBsYXRmb3JtTGF5ZXI6Om1ha2VDb250ZXh0Q3VycmVudCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI6OnBsYXRmb3JtQ29udGV4
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0NHTFBs
YXRmb3JtTGF5ZXI6OnBsYXRmb3JtRGlzcGxheSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI6OnBsYXRmb3JtQ29uZmlnIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHQ0dMUGxhdGZv
cm1MYXllcjo6cHJveHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVkKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDR0xQbGF0
Zm9ybUxheWVyLmg6CisKIDIwMjItMDItMjAgIEFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFtMRkNdW0lGQ10gRmxpcCBpbmxpbmUgYmxvY2sgY29vcmRzIGZvciB2ZXJ0
aWNhbC1ybCBiZWZvcmUgcGFpbnRpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1RleHR1cmVNYXBwZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJl
TWFwcGVyLmNtYWtlCmluZGV4IGUzMmYyNmQ1MjdkZi4uNGUwYWViZTE5NzQ3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKQEAgLTYsNyArNiw2IEBAIGxp
c3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCiBsaXN0KEFQUEVO
RCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFB
bmltYXRpb24uY3BwCiAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQU5HTEVDb250ZXh0
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlUG9vbC5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcApA
QCAtMjIsNyArMjEsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKIGxpc3QoQVBQRU5E
IFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvTmljb3NpYUFuaW1hdGlvbi5oCiAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvQU5HTEVDb250ZXh0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4
dHVyZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0NsaXBTdGFjay5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGlj
c0NvbnRleHRHTEFOR0xFLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmds
ZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmgKaW5kZXggN2YyN2NkYzgyNjY1Li5jMGJmYTYxMWRi
YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dy
YXBoaWNzQ29udGV4dEdMQU5HTEUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmgKQEAgLTQ1MywxMiArNDUzLDEzIEBA
IHByb3RlY3RlZDoKICAgICBTY29wZWRHTEZlbmNlIG1fZnJhbWVDb21wbGV0aW9uRmVuY2VzW21h
eFBlbmRpbmdGcmFtZXNdOwogICAgIEdyYXBoaWNzQ29udGV4dEdMU3RhdGUgbV9zdGF0ZTsKIAot
I2lmIFBMQVRGT1JNKENPQ09BKQotICAgIC8vIEZJWE1FOiBNb3ZlIHRoZXNlIHRvIEdyYXBoaWNz
Q29udGV4dEdMQ29jb2EuCi0gICAgR3JhcGhpY3NDb250ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4g
bV9zd2FwQ2hhaW47CiAgICAgR0NHTERpc3BsYXkgbV9kaXNwbGF5T2JqIHsgbnVsbHB0ciB9Owog
ICAgIEdDR0xDb250ZXh0IG1fY29udGV4dE9iaiB7IG51bGxwdHIgfTsKICAgICBHQ0dMQ29uZmln
IG1fY29uZmlnT2JqIHsgbnVsbHB0ciB9OworCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgLy8g
RklYTUU6IE1vdmUgdGhlc2UgdG8gR3JhcGhpY3NDb250ZXh0R0xDb2NvYS4KKyAgICBHcmFwaGlj
c0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbiBtX3N3YXBDaGFpbjsKICAgICAvLyBCYWNraW5n
IHN0b3JlIGZvciB0aGUgdGhlIGJ1ZmZlciB3aGljaCBpcyBldmVudHVhbGx5IHVzZWQgZm9yIGRp
c3BsYXkuCiAgICAgLy8gV2hlbiBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPT0gZmFsc2UsIHRoaXMg
aXMgdGhlIGRyYXdpbmcgYnVmZmVyIGJhY2tpbmcgc3RvcmUuCiAgICAgLy8gV2hlbiBwcmVzZXJ2
ZURyYXdpbmdCdWZmZXIgPT0gdHJ1ZSwgdGhpcyBpcyBibGl0dGVkIHRvIGR1cmluZyBkaXNwbGF5
IHByZXBhcmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9u
aWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xFTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xBTkdMRUxheWVyLmNw
cAppbmRleCA5OTE3NDE4MzZkNDQuLjI0MjUxZmNhZWMwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDR0xBTkdMRUxh
eWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3Rl
eG1hcC9OaWNvc2lhR0NHTEFOR0xFTGF5ZXIuY3BwCkBAIC05MiwxNzUgKzkyLDggQEAgdm9pZCBH
Q0dMQU5HTEVMYXllcjo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCiAgICAgbV9jb250ZXh0Lm1hcmtM
YXllckNvbXBvc2l0ZWQoKTsKIH0KIAotY29uc3QgY2hhciogR0NHTEFOR0xFTGF5ZXI6OkFOR0xF
Q29udGV4dDo6ZXJyb3JTdHJpbmcoaW50IHN0YXR1c0NvZGUpCi17Ci0gICAgc3RhdGljX2Fzc2Vy
dChzaXplb2YoaW50KSA+PSBzaXplb2YoRUdMaW50KSwgIkVHTGludCBtdXN0IG5vdCBiZSB3aWRl
ciB0aGFuIGludCIpOwotICAgIHN3aXRjaCAoc3RhdHVzQ29kZSkgewotI2RlZmluZSBDQVNFX1JF
VFVSTl9TVFJJTkcobmFtZSkgY2FzZSBuYW1lOiByZXR1cm4gI25hbWUKLSAgICAgICAgLy8gaHR0
cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvRUdML3Nkay9kb2NzL21hbi9odG1sL2VnbEdl
dEVycm9yLnhodG1sCi0gICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfU1VDQ0VTUyk7Ci0g
ICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfTk9UX0lOSVRJQUxJWkVEKTsKLSAgICAgICAg
Q0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfQUNDRVNTKTsKLSAgICAgICAgQ0FTRV9SRVRVUk5f
U1RSSU5HKEVHTF9CQURfQUxMT0MpOwotICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JB
RF9BVFRSSUJVVEUpOwotICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9DT05URVhU
KTsKLSAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfQ09ORklHKTsKLSAgICAgICAg
Q0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfQ1VSUkVOVF9TVVJGQUNFKTsKLSAgICAgICAgQ0FT
RV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfRElTUExBWSk7Ci0gICAgICAgIENBU0VfUkVUVVJOX1NU
UklORyhFR0xfQkFEX1NVUkZBQ0UpOwotICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JB
RF9NQVRDSCk7Ci0gICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX1BBUkFNRVRFUik7
Ci0gICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX05BVElWRV9QSVhNQVApOwotICAg
ICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9OQVRJVkVfV0lORE9XKTsKLSAgICAgICAg
Q0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9DT05URVhUX0xPU1QpOwotI3VuZGVmIENBU0VfUkVUVVJO
X1NUUklORwotICAgIGRlZmF1bHQ6IHJldHVybiAiVW5rbm93biBFR0wgZXJyb3IiOwotICAgIH0K
LX0KLQotY29uc3QgY2hhciogR0NHTEFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6bGFzdEVycm9y
U3RyaW5nKCkKLXsKLSAgICByZXR1cm4gZXJyb3JTdHJpbmcoRUdMX0dldEVycm9yKCkpOwotfQot
Ci1zdGQ6OnVuaXF1ZV9wdHI8R0NHTEFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dD4gR0NHTEFOR0xF
TGF5ZXI6OkFOR0xFQ29udGV4dDo6Y3JlYXRlQ29udGV4dChib29sIGlzRm9yV2ViR0wyKQotewot
ICAgIFZlY3RvcjxFR0xpbnQ+IGRpc3BsYXlBdHRyaWJ1dGVzIHsKLSAgICAgICAgRUdMX1BMQVRG
T1JNX0FOR0xFX1RZUEVfQU5HTEUsIEVHTF9QTEFURk9STV9BTkdMRV9UWVBFX09QRU5HTEVTX0FO
R0xFLAotICAgICAgICBFR0xfUExBVEZPUk1fQU5HTEVfREVWSUNFX1RZUEVfQU5HTEUsIEVHTF9Q
TEFURk9STV9BTkdMRV9ERVZJQ0VfVFlQRV9FR0xfQU5HTEUsCi0gICAgICAgIEVHTF9QTEFURk9S
TV9BTkdMRV9OQVRJVkVfUExBVEZPUk1fVFlQRV9BTkdMRSwgRUdMX1BMQVRGT1JNX1NVUkZBQ0VM
RVNTX01FU0EsCi0gICAgICAgIEVHTF9OT05FLAotICAgIH07Ci0gICAgRUdMRGlzcGxheSBkaXNw
bGF5ID0gRUdMX0dldFBsYXRmb3JtRGlzcGxheUVYVChFR0xfUExBVEZPUk1fQU5HTEVfQU5HTEUs
IEVHTF9ERUZBVUxUX0RJU1BMQVksIGRpc3BsYXlBdHRyaWJ1dGVzLmRhdGEoKSk7Ci0gICAgaWYg
KGRpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgRUdMaW50IG1ham9yVmVyc2lvbiwgbWlub3JWZXJzaW9uOwotICAgIGlmIChFR0xfSW5pdGlh
bGl6ZShkaXNwbGF5LCAmbWFqb3JWZXJzaW9uLCAmbWlub3JWZXJzaW9uKSA9PSBFR0xfRkFMU0Up
IHsKLSAgICAgICAgTE9HKFdlYkdMLCAiRUdMRGlzcGxheSBJbml0aWFsaXphdGlvbiBmYWlsZWQu
Iik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBMT0coV2ViR0wsICJBTkdM
RSBpbml0aWFsaXNlZCBNYWpvcjogJWQgTWlub3I6ICVkIiwgbWFqb3JWZXJzaW9uLCBtaW5vclZl
cnNpb24pOwotCi0gICAgY29uc3QgY2hhciogZGlzcGxheUV4dGVuc2lvbnMgPSBFR0xfUXVlcnlT
dHJpbmcoZGlzcGxheSwgRUdMX0VYVEVOU0lPTlMpOwotICAgIExPRyhXZWJHTCwgIkV4dGVuc2lv
bnM6ICVzIiwgZGlzcGxheUV4dGVuc2lvbnMpOwotCi0gICAgRUdMQ29uZmlnIGNvbmZpZzsKLSAg
ICBFR0xpbnQgY29uZmlnQXR0cmlidXRlc1tdID0gewotICAgICAgICBFR0xfUkVOREVSQUJMRV9U
WVBFLCBFR0xfT1BFTkdMX0VTMl9CSVQsCi0gICAgICAgIEVHTF9SRURfU0laRSwgOCwKLSAgICAg
ICAgRUdMX0dSRUVOX1NJWkUsIDgsCi0gICAgICAgIEVHTF9CTFVFX1NJWkUsIDgsCi0gICAgICAg
IEVHTF9BTFBIQV9TSVpFLCA4LAotICAgICAgICBFR0xfREVQVEhfU0laRSwgMCwKLSAgICAgICAg
RUdMX1NURU5DSUxfU0laRSwgMCwKLSAgICAgICAgRUdMX05PTkUKLSAgICB9OwotICAgIEVHTGlu
dCBudW1iZXJDb25maWdzUmV0dXJuZWQgPSAwOwotICAgIEVHTF9DaG9vc2VDb25maWcoZGlzcGxh
eSwgY29uZmlnQXR0cmlidXRlcywgJmNvbmZpZywgMSwgJm51bWJlckNvbmZpZ3NSZXR1cm5lZCk7
Ci0gICAgaWYgKG51bWJlckNvbmZpZ3NSZXR1cm5lZCAhPSAxKSB7Ci0gICAgICAgIExPRyhXZWJH
TCwgIkVHTENvbmZpZyBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLSAgICBMT0coV2ViR0wsICJHb3QgRUdMQ29uZmlnIik7Ci0KLSAgICBF
R0xfQmluZEFQSShFR0xfT1BFTkdMX0VTX0FQSSk7Ci0gICAgaWYgKEVHTF9HZXRFcnJvcigpICE9
IEVHTF9TVUNDRVNTKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIlVuYWJsZSB0byBiaW5kIHRvIE9Q
RU5HTF9FU19BUEkiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgc3Rk
Ojp2ZWN0b3I8RUdMaW50PiBjb250ZXh0QXR0cmlidXRlczsKLSAgICBpZiAoaXNGb3JXZWJHTDIp
IHsKLSAgICAgICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9DT05URVhUX0NMSUVO
VF9WRVJTSU9OKTsKLSAgICAgICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKDMpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfQ09OVEVY
VF9DTElFTlRfVkVSU0lPTik7Ci0gICAgICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjaygy
KTsKLSAgICAgICAgLy8gQU5HTEUgd2lsbCB1cGdyYWRlIHRoZSBjb250ZXh0IHRvIEVTMyBhdXRv
bWF0aWNhbGx5IHVubGVzcyB0aGlzIGlzIHNwZWNpZmllZC4KLSAgICAgICAgY29udGV4dEF0dHJp
YnV0ZXMucHVzaF9iYWNrKEVHTF9DT05URVhUX09QRU5HTF9CQUNLV0FSRFNfQ09NUEFUSUJMRV9B
TkdMRSk7Ci0gICAgICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1c2hfYmFjayhFR0xfRkFMU0UpOwot
ICAgIH0KLSAgICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdMX0NPTlRFWFRfV0VCR0xf
Q09NUEFUSUJJTElUWV9BTkdMRSk7Ci0gICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVH
TF9UUlVFKTsKLQotICAgIC8vIFdlYkdMIHJlcXVpcmVzIHRoYXQgYWxsIHJlc291cmNlcyBhcmUg
Y2xlYXJlZCBhdCBjcmVhdGlvbi4KLSAgICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdM
X1JPQlVTVF9SRVNPVVJDRV9JTklUSUFMSVpBVElPTl9BTkdMRSk7Ci0gICAgY29udGV4dEF0dHJp
YnV0ZXMucHVzaF9iYWNrKEVHTF9UUlVFKTsKLQotICAgIC8vIFdlYkdMIGRvZXNuJ3QgYWxsb3cg
Y2xpZW50IGFycmF5cy4KLSAgICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdMX0NPTlRF
WFRfQ0xJRU5UX0FSUkFZU19FTkFCTEVEX0FOR0xFKTsKLSAgICBjb250ZXh0QXR0cmlidXRlcy5w
dXNoX2JhY2soRUdMX0ZBTFNFKTsKLQotICAgIC8vIFdlYkdMIGRvZXNuJ3QgYWxsb3cgaW1wbGlj
aXQgY3JlYXRpb24gb2Ygb2JqZWN0cyBvbiBiaW5kLgotICAgIGNvbnRleHRBdHRyaWJ1dGVzLnB1
c2hfYmFjayhFR0xfQ09OVEVYVF9CSU5EX0dFTkVSQVRFU19SRVNPVVJDRV9DSFJPTUlVTSk7Ci0g
ICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9GQUxTRSk7Ci0KLSAgICBpZiAoc3Ry
c3RyKGRpc3BsYXlFeHRlbnNpb25zLCAiRUdMX0FOR0xFX3Bvd2VyX3ByZWZlcmVuY2UiKSkgewot
ICAgICAgICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdMX1BPV0VSX1BSRUZFUkVOQ0Vf
QU5HTEUpOwotICAgICAgICAvLyBFR0xfTE9XX1BPV0VSX0FOR0xFIGlzIHRoZSBkZWZhdWx0LiBD
aGFuZ2UgdG8KLSAgICAgICAgLy8gRUdMX0hJR0hfUE9XRVJfQU5HTEUgaWYgZGVzaXJlZC4KLSAg
ICAgICAgY29udGV4dEF0dHJpYnV0ZXMucHVzaF9iYWNrKEVHTF9MT1dfUE9XRVJfQU5HTEUpOwot
ICAgIH0KLSAgICBjb250ZXh0QXR0cmlidXRlcy5wdXNoX2JhY2soRUdMX05PTkUpOwotCi0gICAg
RUdMQ29udGV4dCBjb250ZXh0ID0gRUdMX0NyZWF0ZUNvbnRleHQoZGlzcGxheSwgY29uZmlnLCBF
R0xfTk9fQ09OVEVYVCwgY29udGV4dEF0dHJpYnV0ZXMuZGF0YSgpKTsKLSAgICBpZiAoY29udGV4
dCA9PSBFR0xfTk9fQ09OVEVYVCkgewotICAgICAgICBMT0coV2ViR0wsICJFR0xDb250ZXh0IElu
aXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQot
ICAgIExPRyhXZWJHTCwgIkdvdCBFR0xDb250ZXh0Iik7Ci0KLSAgICByZXR1cm4gc3RkOjp1bmlx
dWVfcHRyPEFOR0xFQ29udGV4dD4obmV3IEFOR0xFQ29udGV4dChkaXNwbGF5LCBjb25maWcsIGNv
bnRleHQsIEVHTF9OT19TVVJGQUNFKSk7Ci19Ci0KLUdDR0xBTkdMRUxheWVyOjpBTkdMRUNvbnRl
eHQ6OkFOR0xFQ29udGV4dChFR0xEaXNwbGF5IGRpc3BsYXksIEVHTENvbmZpZyBjb25maWcsIEVH
TENvbnRleHQgY29udGV4dCwgRUdMU3VyZmFjZSBzdXJmYWNlKQotICAgIDogbV9kaXNwbGF5KGRp
c3BsYXkpCi0gICAgLCBtX2NvbmZpZyhjb25maWcpCi0gICAgLCBtX2NvbnRleHQoY29udGV4dCkK
LSAgICAsIG1fc3VyZmFjZShzdXJmYWNlKQotewotfQotCi1HQ0dMQU5HTEVMYXllcjo6QU5HTEVD
b250ZXh0Ojp+QU5HTEVDb250ZXh0KCkKLXsKLSAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAgICAg
IEdMX0JpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7Ci0gICAgICAgIEVHTF9NYWtl
Q3VycmVudChtX2Rpc3BsYXksIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05P
X0NPTlRFWFQpOwotICAgICAgICBFR0xfRGVzdHJveUNvbnRleHQobV9kaXNwbGF5LCBtX2NvbnRl
eHQpOwotICAgIH0KLQotICAgIGlmIChtX3N1cmZhY2UpCi0gICAgICAgIEVHTF9EZXN0cm95U3Vy
ZmFjZShtX2Rpc3BsYXksIG1fc3VyZmFjZSk7Ci19Ci0KLWJvb2wgR0NHTEFOR0xFTGF5ZXI6OkFO
R0xFQ29udGV4dDo6bWFrZUNvbnRleHRDdXJyZW50KCkKLXsKLSAgICBBU1NFUlQobV9jb250ZXh0
KTsKLQotICAgIGlmIChFR0xfR2V0Q3VycmVudENvbnRleHQoKSAhPSBtX2NvbnRleHQpCi0gICAg
ICAgIHJldHVybiBFR0xfTWFrZUN1cnJlbnQobV9kaXNwbGF5LCBtX3N1cmZhY2UsIG1fc3VyZmFj
ZSwgbV9jb250ZXh0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotR0NHTENvbnRleHQgR0NHTEFO
R0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9jb250ZXh0OwotfQotCi1HQ0dMRGlzcGxheSBHQ0dMQU5HTEVMYXllcjo6QU5HTEVD
b250ZXh0OjpwbGF0Zm9ybURpc3BsYXkoKSBjb25zdAotewotICAgIHJldHVybiBtX2Rpc3BsYXk7
Ci19Ci0KLUdDR0xDb25maWcgR0NHTEFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6cGxhdGZvcm1D
b25maWcoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbmZpZzsKLX0KLQogR0NHTEFOR0xFTGF5
ZXI6OkdDR0xBTkdMRUxheWVyKEdyYXBoaWNzQ29udGV4dEdMQU5HTEUmIGNvbnRleHQpCiAgICAg
OiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fYW5nbGVDb250ZXh0KEFOR0xFQ29udGV4dDo6
Y3JlYXRlQ29udGV4dChjb250ZXh0Lm1faXNGb3JXZWJHTDIpKQogICAgICwgbV9jb250ZW50TGF5
ZXIoTmljb3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUoTmljb3NpYTo6Q29udGVudExheWVyVGV4
dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKSkKIHsKIH0KQEAgLTI3MCwzMSAr
MTAzLDYgQEAgR0NHTEFOR0xFTGF5ZXI6On5HQ0dMQU5HTEVMYXllcigpCiAgICAgZG93bmNhc3Q8
Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fY29udGVudExheWVyLT5pbXBsKCkpLmlu
dmFsaWRhdGVDbGllbnQoKTsKIH0KIAotYm9vbCBHQ0dMQU5HTEVMYXllcjo6bWFrZUNvbnRleHRD
dXJyZW50KCkKLXsKLSAgICBBU1NFUlQobV9hbmdsZUNvbnRleHQpOwotICAgIHJldHVybiBtX2Fu
Z2xlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLX0KLQotR0NHTENvbnRleHQgR0NH
TEFOR0xFTGF5ZXI6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fYW5n
bGVDb250ZXh0KTsKLSAgICByZXR1cm4gbV9hbmdsZUNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
OwotfQotCi1HQ0dMRGlzcGxheSBHQ0dMQU5HTEVMYXllcjo6cGxhdGZvcm1EaXNwbGF5KCkgY29u
c3QKLXsKLSAgICBBU1NFUlQobV9hbmdsZUNvbnRleHQpOwotICAgIHJldHVybiBtX2FuZ2xlQ29u
dGV4dC0+cGxhdGZvcm1EaXNwbGF5KCk7Ci19Ci0KLUdDR0xDb25maWcgR0NHTEFOR0xFTGF5ZXI6
OnBsYXRmb3JtQ29uZmlnKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9hbmdsZUNvbnRleHQpOwot
ICAgIHJldHVybiBtX2FuZ2xlQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci19Ci0KIH0gLy8g
bmFtZXNwYWNlIE5pY29zaWEKIAogI2VuZGlmIC8vIFVTRShOSUNPU0lBKSAmJiBVU0UoVEVYVFVS
RV9NQVBQRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9u
aWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xFTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQ0dMQU5HTEVMYXllci5oCmlu
ZGV4IDg4ZjQ0YTc5ZGM3OS4uNDEyNDI2YTNjZGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0NHTEFOR0xFTGF5ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9O
aWNvc2lhR0NHTEFOR0xFTGF5ZXIuaApAQCAtNTAsNDUgKzUwLDE0IEBAIG5hbWVzcGFjZSBOaWNv
c2lhIHsKIGNsYXNzIEdDR0xBTkdMRUxheWVyIGZpbmFsIDogcHVibGljIENvbnRlbnRMYXllclRl
eHR1cmVNYXBwZXJJbXBsOjpDbGllbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgotICAgIGNsYXNzIEFOR0xFQ29udGV4dCB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEFOR0xFQ29udGV4dCk7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgY29uc3Qg
Y2hhciogZXJyb3JTdHJpbmcoaW50IHN0YXR1c0NvZGUpOwotICAgICAgICBzdGF0aWMgY29uc3Qg
Y2hhciogbGFzdEVycm9yU3RyaW5nKCk7Ci0KLSAgICAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxBTkdMRUNvbnRleHQ+IGNyZWF0ZUNvbnRleHQoYm9vbCBpc0ZvcldlYkdMMik7Ci0gICAgICAg
IHZpcnR1YWwgfkFOR0xFQ29udGV4dCgpOwotCi0gICAgICAgIGJvb2wgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0jaWYgRU5BQkxFKFdFQkdMKQotICAgICAgICBHQ0dMQ29udGV4dCBwbGF0Zm9ybUNv
bnRleHQoKSBjb25zdDsKLSAgICAgICAgR0NHTERpc3BsYXkgcGxhdGZvcm1EaXNwbGF5KCkgY29u
c3Q7Ci0gICAgICAgIEdDR0xDb25maWcgcGxhdGZvcm1Db25maWcoKSBjb25zdDsKLSNlbmRpZgot
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgQU5HTEVDb250ZXh0KEVHTERpc3BsYXksIEVHTENvbmZp
ZywgRUdMQ29udGV4dCwgRUdMU3VyZmFjZSk7Ci0KLSAgICAgICAgRUdMRGlzcGxheSBtX2Rpc3Bs
YXkgeyBudWxscHRyIH07Ci0gICAgICAgIEVHTENvbmZpZyBtX2NvbmZpZyB7IG51bGxwdHIgfTsK
LSAgICAgICAgRUdMQ29udGV4dCBtX2NvbnRleHQgeyBudWxscHRyIH07Ci0gICAgICAgIEVHTFN1
cmZhY2UgbV9zdXJmYWNlIHsgbnVsbHB0ciB9OwotICAgIH07Ci0KICAgICBHQ0dMQU5HTEVMYXll
cihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTEFOR0xFJik7CiAgICAgdmlydHVhbCB+R0NHTEFO
R0xFTGF5ZXIoKTsKIAotICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0NHTENv
bnRleHQgcGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7Ci0gICAgR0NHTERpc3BsYXkgcGxhdGZvcm1E
aXNwbGF5KCkgY29uc3Q7Ci0gICAgR0NHTENvbmZpZyBwbGF0Zm9ybUNvbmZpZygpIGNvbnN0Owot
CiAgICAgQ29udGVudExheWVyJiBjb250ZW50TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
bnRMYXllcjsgfQogICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIGZpbmFsOwogCiBwcml2
YXRlOgogICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQU5HTEUmIG1fY29udGV4dDsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QU5HTEVDb250ZXh0PiBtX2FuZ2xlQ29udGV4dDsKICAgICBSZWY8
Q29udGVudExheWVyPiBtX2NvbnRlbnRMYXllcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuY3BwCmluZGV4IGJiZjBlODFlYjk4NS4uNGU0MjcxOWE1ZDlmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAKQEAgLTI5MCw2ICsyOTAsMTEgQEAgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgpCiAjZW5kaWYK
IH0KIAorYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW5pdGlhbGl6ZSgpCit7CisgICAg
cmV0dXJuIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOworfQorCiBib29sIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjptYWtlQ29udGV4dEN1cnJlbnQoKQogewogI2lmIFVTRShOSUNPU0lBKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaAppbmRleCA1OTc5NjhlMGZmZTkuLjQwNTFmYzUyMjBj
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKQEAgLTQzMSw2ICs0MzEsMTAg
QEAgcHJvdGVjdGVkOgogICAgIC8vIENhbGxlZCBvbmNlIGJ5IGFsbCB0aGUgcHVibGljIGVudHJ5
IHBvaW50cyBvZiBFeHRlbnNpb25zR0xPcGVuR0wvRXh0ZW5zaW9uR0xPcGVuR0xFUyB0aGF0IGV2
ZW50dWFsbHkgY2FsbCBPcGVuR0wuCiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKSBXQVJO
X1VOVVNFRF9SRVRVUk47CiAKKyAgICAvLyBJbml0aWFsaXplcyB0aGUgaW5zdGFuY2UuIFJldHVy
bnMgZmFsc2UgaWYgdGhlIGluc3RhbmNlIHNob3VsZCBub3QgYmUgdXNlZC4KKyAgICBib29sIGlu
aXRpYWxpemUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1Jbml0aWFsaXplKCkgPSAwOwor
CiAgICAgLy8gVGFrZSBpbnRvIGFjY291bnQgdGhlIHVzZXIncyByZXF1ZXN0ZWQgY29udGV4dCBj
cmVhdGlvbiBhdHRyaWJ1dGVzLAogICAgIC8vIGluIHBhcnRpY3VsYXIgc3RlbmNpbCBhbmQgYW50
aWFsaWFzLCBhbmQgZGV0ZXJtaW5lIHdoaWNoIGNvdWxkIG9yCiAgICAgLy8gY291bGQgbm90IGJl
IGhvbm9yZWQgYmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgT3BlbkdMCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQU5HTEVDb250ZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9BTkdMRUNvbnRl
eHQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzM3YWI4ZmEwNGIuLjAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQU5H
TEVDb250ZXh0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5OSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTgsIDIwMTkgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIwIEFwcGxl
IEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1l
ciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0g
KiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIEhPTERFUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkFOR0xFQ29udGV4dC5oIgotCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVS
KSAmJiBVU0UoQU5HTEUpICYmICFVU0UoTklDT1NJQSkKLQotI2luY2x1ZGUgIkFOR0xFSGVhZGVy
cy5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY29uc3QgY2hhciogQU5HTEVDb250ZXh0OjplcnJvclN0cmlu
ZyhpbnQgc3RhdHVzQ29kZSkKLXsKLSAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihpbnQpID49IHNp
emVvZihFR0xpbnQpLCAiRUdMaW50IG11c3Qgbm90IGJlIHdpZGVyIHRoYW4gaW50Iik7Ci0gICAg
c3dpdGNoIChzdGF0dXNDb2RlKSB7Ci0jZGVmaW5lIENBU0VfUkVUVVJOX1NUUklORyhuYW1lKSBj
YXNlIG5hbWU6IHJldHVybiAjbmFtZQotICAgICAgICAvLyBodHRwczovL3d3dy5raHJvbm9zLm9y
Zy9yZWdpc3RyeS9FR0wvc2RrL2RvY3MvbWFuL2h0bWwvZWdsR2V0RXJyb3IueGh0bWwKLSAgICAg
ICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9TVUNDRVNTKTsKLSAgICAgICAgQ0FTRV9SRVRVUk5f
U1RSSU5HKEVHTF9OT1RfSU5JVElBTElaRUQpOwotICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkco
RUdMX0JBRF9BQ0NFU1MpOwotICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdMX0JBRF9BTExP
Qyk7Ci0gICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX0FUVFJJQlVURSk7Ci0gICAg
ICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX0NPTlRFWFQpOwotICAgICAgICBDQVNFX1JF
VFVSTl9TVFJJTkcoRUdMX0JBRF9DT05GSUcpOwotICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkco
RUdMX0JBRF9DVVJSRU5UX1NVUkZBQ0UpOwotICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkcoRUdM
X0JBRF9ESVNQTEFZKTsKLSAgICAgICAgQ0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfU1VSRkFD
RSk7Ci0gICAgICAgIENBU0VfUkVUVVJOX1NUUklORyhFR0xfQkFEX01BVENIKTsKLSAgICAgICAg
Q0FTRV9SRVRVUk5fU1RSSU5HKEVHTF9CQURfUEFSQU1FVEVSKTsKLSAgICAgICAgQ0FTRV9SRVRV
Uk5fU1RSSU5HKEVHTF9CQURfTkFUSVZFX1BJWE1BUCk7Ci0gICAgICAgIENBU0VfUkVUVVJOX1NU
UklORyhFR0xfQkFEX05BVElWRV9XSU5ET1cpOwotICAgICAgICBDQVNFX1JFVFVSTl9TVFJJTkco
RUdMX0NPTlRFWFRfTE9TVCk7Ci0jdW5kZWYgQ0FTRV9SRVRVUk5fU1RSSU5HCi0gICAgZGVmYXVs
dDogcmV0dXJuICJVbmtub3duIEVHTCBlcnJvciI7Ci0gICAgfQotfQotCi1jb25zdCBjaGFyKiBB
TkdMRUNvbnRleHQ6Omxhc3RFcnJvclN0cmluZygpCi17Ci0gICAgcmV0dXJuIGVycm9yU3RyaW5n
KEVHTF9HZXRFcnJvcigpKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEFOR0xFQ29udGV4dD4gQU5H
TEVDb250ZXh0OjpjcmVhdGVDb250ZXh0KEVHTENvbnRleHQgc2hhcmluZ0NvbnRleHQsIGJvb2wg
aXNGb3JXZWJHTDIpCi17Ci0gICAgRUdMRGlzcGxheSBkaXNwbGF5ID0gRUdMX0dldERpc3BsYXko
RUdMX0RFRkFVTFRfRElTUExBWSk7Ci0gICAgaWYgKGRpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRUdMaW50IG1ham9yVmVyc2lvbiwgbWlu
b3JWZXJzaW9uOwotICAgIGlmIChFR0xfSW5pdGlhbGl6ZShkaXNwbGF5LCAmbWFqb3JWZXJzaW9u
LCAmbWlub3JWZXJzaW9uKSA9PSBFR0xfRkFMU0UpIHsKLSAgICAgICAgTE9HKFdlYkdMLCAiRUdM
RGlzcGxheSBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIH0KLSAgICBMT0coV2ViR0wsICJBTkdMRSBpbml0aWFsaXNlZCBNYWpvcjogJWQgTWlu
b3I6ICVkIiwgbWFqb3JWZXJzaW9uLCBtaW5vclZlcnNpb24pOwotCi0gICAgY29uc3QgY2hhciog
ZGlzcGxheUV4dGVuc2lvbnMgPSBFR0xfUXVlcnlTdHJpbmcoZGlzcGxheSwgRUdMX0VYVEVOU0lP
TlMpOwotICAgIExPRyhXZWJHTCwgIkV4dGVuc2lvbnM6ICVzIiwgZGlzcGxheUV4dGVuc2lvbnMp
OwotCi0gICAgRUdMQ29uZmlnIGNvbmZpZzsKLSAgICBFR0xpbnQgY29uZmlnQXR0cmlidXRlc1td
ID0gewotICAgICAgICBFR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0VTMl9CSVQsCi0g
ICAgICAgIEVHTF9SRURfU0laRSwgOCwKLSAgICAgICAgRUdMX0dSRUVOX1NJWkUsIDgsCi0gICAg
ICAgIEVHTF9CTFVFX1NJWkUsIDgsCi0gICAgICAgIEVHTF9BTFBIQV9TSVpFLCA4LAotICAgICAg
ICBFR0xfTk9ORQotICAgIH07Ci0gICAgRUdMaW50IG51bWJlckNvbmZpZ3NSZXR1cm5lZCA9IDA7
Ci0gICAgRUdMX0Nob29zZUNvbmZpZyhkaXNwbGF5LCBjb25maWdBdHRyaWJ1dGVzLCAmY29uZmln
LCAxLCAmbnVtYmVyQ29uZmlnc1JldHVybmVkKTsKLSAgICBpZiAobnVtYmVyQ29uZmlnc1JldHVy
bmVkICE9IDEpIHsKLSAgICAgICAgTE9HKFdlYkdMLCAiRUdMQ29uZmlnIEluaXRpYWxpemF0aW9u
IGZhaWxlZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIExPRyhXZWJH
TCwgIkdvdCBFR0xDb25maWciKTsKLQotICAgIEVHTF9CaW5kQVBJKEVHTF9PUEVOR0xfRVNfQVBJ
KTsKLSAgICBpZiAoRUdMX0dldEVycm9yKCkgIT0gRUdMX1NVQ0NFU1MpIHsKLSAgICAgICAgTE9H
KFdlYkdMLCAiVW5hYmxlIHRvIGJpbmQgdG8gT1BFTkdMX0VTX0FQSSIpOwotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBWZWN0b3I8RUdMaW50PiBjb250ZXh0QXR0cmlidXRl
czsKLSAgICBpZiAoaXNGb3JXZWJHTDIpIHsKLSAgICAgICAgY29udGV4dEF0dHJpYnV0ZXMuYXBw
ZW5kKEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OKTsKLSAgICAgICAgY29udGV4dEF0dHJpYnV0
ZXMuYXBwZW5kKDMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnRleHRBdHRyaWJ1dGVzLmFw
cGVuZChFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTik7Ci0gICAgICAgIGNvbnRleHRBdHRyaWJ1
dGVzLmFwcGVuZCgyKTsKLSAgICAgICAgLy8gQU5HTEUgd2lsbCB1cGdyYWRlIHRoZSBjb250ZXh0
IHRvIEVTMyBhdXRvbWF0aWNhbGx5IHVubGVzcyB0aGlzIGlzIHNwZWNpZmllZC4KLSAgICAgICAg
Y29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX09QRU5HTF9CQUNLV0FSRFNfQ09N
UEFUSUJMRV9BTkdMRSk7Ci0gICAgICAgIGNvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfRkFM
U0UpOwotICAgIH0KLSAgICBjb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0NPTlRFWFRfV0VC
R0xfQ09NUEFUSUJJTElUWV9BTkdMRSk7Ci0gICAgY29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVH
TF9UUlVFKTsKLSAgICAvLyBXZWJHTCByZXF1aXJlcyB0aGF0IGFsbCByZXNvdXJjZXMgYXJlIGNs
ZWFyZWQgYXQgY3JlYXRpb24uCi0gICAgY29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9ST0JV
U1RfUkVTT1VSQ0VfSU5JVElBTElaQVRJT05fQU5HTEUpOwotICAgIGNvbnRleHRBdHRyaWJ1dGVz
LmFwcGVuZChFR0xfVFJVRSk7Ci0gICAgLy8gV2ViR0wgZG9lc24ndCBhbGxvdyBjbGllbnQgYXJy
YXlzLgotICAgIGNvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfQ09OVEVYVF9DTElFTlRfQVJS
QVlTX0VOQUJMRURfQU5HTEUpOwotICAgIGNvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfRkFM
U0UpOwotICAgIC8vIFdlYkdMIGRvZXNuJ3QgYWxsb3cgaW1wbGljaXQgY3JlYXRpb24gb2Ygb2Jq
ZWN0cyBvbiBiaW5kLgotICAgIGNvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfQ09OVEVYVF9C
SU5EX0dFTkVSQVRFU19SRVNPVVJDRV9DSFJPTUlVTSk7Ci0gICAgY29udGV4dEF0dHJpYnV0ZXMu
YXBwZW5kKEVHTF9GQUxTRSk7Ci0KLSAgICBpZiAoc3Ryc3RyKGRpc3BsYXlFeHRlbnNpb25zLCAi
RUdMX0FOR0xFX3Bvd2VyX3ByZWZlcmVuY2UiKSkgewotICAgICAgICBjb250ZXh0QXR0cmlidXRl
cy5hcHBlbmQoRUdMX1BPV0VSX1BSRUZFUkVOQ0VfQU5HTEUpOwotICAgICAgICAvLyBFR0xfTE9X
X1BPV0VSX0FOR0xFIGlzIHRoZSBkZWZhdWx0LiBDaGFuZ2UgdG8KLSAgICAgICAgLy8gRUdMX0hJ
R0hfUE9XRVJfQU5HTEUgaWYgZGVzaXJlZC4KLSAgICAgICAgY29udGV4dEF0dHJpYnV0ZXMuYXBw
ZW5kKEVHTF9MT1dfUE9XRVJfQU5HTEUpOwotICAgIH0KLSAgICBjb250ZXh0QXR0cmlidXRlcy5h
cHBlbmQoRUdMX05PTkUpOwotCi0gICAgRUdMQ29udGV4dCBjb250ZXh0ID0gRUdMX0NyZWF0ZUNv
bnRleHQoZGlzcGxheSwgY29uZmlnLCBzaGFyaW5nQ29udGV4dCwgY29udGV4dEF0dHJpYnV0ZXMu
ZGF0YSgpKTsKLSAgICBpZiAoY29udGV4dCA9PSBFR0xfTk9fQ09OVEVYVCkgewotICAgICAgICBM
T0coV2ViR0wsICJFR0xDb250ZXh0IEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIExPRyhXZWJHTCwgIkdvdCBFR0xDb250ZXh0Iik7
Ci0KLSAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEFOR0xFQ29udGV4dD4obmV3IEFOR0xFQ29u
dGV4dChkaXNwbGF5LCAgY29uZmlnLCBjb250ZXh0LCBFR0xfTk9fU1VSRkFDRSkpOwotfQotCi1B
TkdMRUNvbnRleHQ6OkFOR0xFQ29udGV4dChFR0xEaXNwbGF5IGRpc3BsYXksIEVHTENvbmZpZyBj
b25maWcsIEVHTENvbnRleHQgY29udGV4dCwgRUdMU3VyZmFjZSBzdXJmYWNlKQotICAgIDogbV9k
aXNwbGF5KGRpc3BsYXkpCi0gICAgLCBtX2NvbmZpZyhjb25maWcpCi0gICAgLCBtX2NvbnRleHQo
Y29udGV4dCkKLSAgICAsIG1fc3VyZmFjZShzdXJmYWNlKQotewotfQotCi1BTkdMRUNvbnRleHQ6
On5BTkdMRUNvbnRleHQoKQotewotICAgIGlmIChtX2NvbnRleHQpIHsKLSAgICAgICAgR0xfQmlu
ZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKTsKLSAgICAgICAgRUdMX01ha2VDdXJyZW50
KG1fZGlzcGxheSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fQ09OVEVY
VCk7Ci0gICAgICAgIEVHTF9EZXN0cm95Q29udGV4dChtX2Rpc3BsYXksIG1fY29udGV4dCk7Ci0g
ICAgfQotCi0gICAgaWYgKG1fc3VyZmFjZSkKLSAgICAgICAgRUdMX0Rlc3Ryb3lTdXJmYWNlKG1f
ZGlzcGxheSwgbV9zdXJmYWNlKTsKLX0KLQotYm9vbCBBTkdMRUNvbnRleHQ6Om1ha2VDb250ZXh0
Q3VycmVudCgpCi17Ci0gICAgQVNTRVJUKG1fY29udGV4dCk7Ci0KLSAgICBpZiAoRUdMX0dldEN1
cnJlbnRDb250ZXh0KCkgIT0gbV9jb250ZXh0KQotICAgICAgICByZXR1cm4gRUdMX01ha2VDdXJy
ZW50KG1fZGlzcGxheSwgbV9zdXJmYWNlLCBtX3N1cmZhY2UsIG1fY29udGV4dCk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLUVHTENvbnRleHQgQU5HTEVDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQo
KSBjb25zdAotewotICAgIHJldHVybiBtX2NvbnRleHQ7Ci19Ci0KLUVHTERpc3BsYXkgQU5HTEVD
b250ZXh0OjpwbGF0Zm9ybURpc3BsYXkoKSBjb25zdAotewotICAgIHJldHVybiBtX2Rpc3BsYXk7
Ci19Ci0KLUVHTENvbmZpZyBBTkdMRUNvbnRleHQ6OnBsYXRmb3JtQ29uZmlnKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9jb25maWc7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
QU5HTEVDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
QU5HTEVDb250ZXh0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxN2M0Yzk1MWM5
NS4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9BTkdMRUNvbnRleHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KLSAqIENvcHlyaWdo
dCAoQykgMjAxOCwgMjAxOSBJZ2FsaWEgUy5MLgotICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAq
ICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShURVhUVVJFX01BUFBFUikgJiYgVVNFKEFO
R0xFKSAmJiAhVVNFKE5JQ09TSUEpCi0KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLQot
dHlwZWRlZiB2b2lkICpFR0xDb25maWc7Ci10eXBlZGVmIHZvaWQgKkVHTENvbnRleHQ7Ci10eXBl
ZGVmIHZvaWQgKkVHTERpc3BsYXk7Ci10eXBlZGVmIHZvaWQgKkVHTFN1cmZhY2U7Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQU5HTEVDb250ZXh0IHsKLSAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShBTkdMRUNvbnRleHQpOwotcHVibGljOgotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBl
cnJvclN0cmluZyhpbnQgc3RhdHVzQ29kZSk7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGxhc3RF
cnJvclN0cmluZygpOwotCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBTkdMRUNvbnRleHQ+
IGNyZWF0ZUNvbnRleHQoRUdMQ29udGV4dCBzaGFyaW5nQ29udGV4dCwgYm9vbCBpc0ZvcldlYkdM
Mik7Ci0gICAgfkFOR0xFQ29udGV4dCgpOwotCi0gICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBFR0xDb250ZXh0IHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0OwotICAgIEVHTERpc3Bs
YXkgcGxhdGZvcm1EaXNwbGF5KCkgY29uc3Q7Ci0gICAgRUdMQ29uZmlnIHBsYXRmb3JtQ29uZmln
KCkgY29uc3Q7Ci1wcml2YXRlOgotICAgIEFOR0xFQ29udGV4dChFR0xEaXNwbGF5LCBFR0xDb25m
aWcsIEVHTENvbnRleHQsIEVHTFN1cmZhY2UpOwotCi0gICAgRUdMRGlzcGxheSBtX2Rpc3BsYXkg
eyBudWxscHRyIH07Ci0gICAgRUdMQ29uZmlnIG1fY29uZmlnIHsgbnVsbHB0ciB9OwotICAgIEVH
TENvbnRleHQgbV9jb250ZXh0IHsgbnVsbHB0ciB9OwotICAgIEVHTFN1cmZhY2UgbV9zdXJmYWNl
IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGlj
c0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAKaW5kZXggMGRh
OTUwMTgzMzc4Li45MmZmNTIwNmIyNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRl
eHRHTFRleHR1cmVNYXBwZXIuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaWYgRU5BQkxFKFdFQkdM
KSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTE1hbmFnZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVs
ZWdhdGUuaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJHQ0dMUGxhdGZvcm1MYXllci5oIgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgpAQCAtNTYsNiAr
NTUsNyBAQAogI2luY2x1ZGUgIk5pY29zaWFHQ0dMQU5HTEVMYXllci5oIgogI2Vsc2UKICNpbmNs
dWRlICJOaWNvc2lhR0NHTExheWVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1MYXllckRpc3BsYXlE
ZWxlZ2F0ZS5oIgogI2VuZGlmCiAjZW5kaWYKIApAQCAtNzMsMzkgKzczLDExIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotbmFtZXNwYWNlIHsKLQotY2xhc3MgUGxhdGZvcm1MYXllckRpc3Bs
YXlEZWxlZ2F0ZSBmaW5hbCA6IHB1YmxpYyBHcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVs
ZWdhdGUgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8UGxhdGZvcm1MYXllckRpc3BsYXlEZWxl
Z2F0ZT4gY3JlYXRlKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQbGF0Zm9ybUxheWVyRGlzcGxheURlbGVnYXRlKHBsYXRm
b3JtTGF5ZXIpKTsKLSAgICB9Ci0KLSAgICAvLyBHcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5
RGVsZWdhdGUgb3ZlcnJpZGVzLgotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBj
b25zdCBmaW5hbAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcGxhdGZvcm1MYXllcjsKLSAgICB9
Ci0KLXByaXZhdGU6Ci0gICAgUGxhdGZvcm1MYXllckRpc3BsYXlEZWxlZ2F0ZShQbGF0Zm9ybUxh
eWVyKiBwbGF0Zm9ybUxheWVyKQotICAgICAgICA6IG1fcGxhdGZvcm1MYXllcihwbGF0Zm9ybUxh
eWVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBQbGF0Zm9ybUxheWVyKiBtX3BsYXRmb3JtTGF5ZXI7
Ci19OwotCi19Ci0KIFJlZlB0cjxHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI+IEdyYXBo
aWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dEdMQXR0cmli
dXRlcyYmIGF0dHJpYnV0ZXMpCiB7CiAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRSZWYoKm5ldyBH
cmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIoV1RGTW92ZShhdHRyaWJ1dGVzKSkpOwotI2lm
IFVTRShBTkdMRSkKICAgICBpZiAoIWNvbnRleHQtPmluaXRpYWxpemUoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0jZW5kaWYKICAgICByZXR1cm4gY29udGV4dDsKIH0KIApAQCAtMTEzLDE3
ICs4NSwxMiBAQCBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6On5HcmFwaGljc0NvbnRl
eHRHTFRleHR1cmVNYXBwZXIoKSA9IGRlZmF1bHQ7CiAKIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVy
ZU1hcHBlcjo6R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyKEdyYXBoaWNzQ29udGV4dEdM
QXR0cmlidXRlcyYmIGF0dHJpYnV0ZXMpCiAgICAgOiBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVN
YXBwZXJCYXNlKFdURk1vdmUoYXR0cmlidXRlcykpCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAgLCBt
X2xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUoUGxhdGZvcm1MYXllckRpc3BsYXlEZWxlZ2F0
ZTo6Y3JlYXRlKCZtX25pY29zaWFMYXllci0+Y29udGVudExheWVyKCkpKQotI2Vsc2UKLSAgICAs
IG1fbGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZShQbGF0Zm9ybUxheWVyRGlzcGxheURlbGVn
YXRlOjpjcmVhdGUobV90ZXhtYXBMYXllci5nZXQoKSkpCi0jZW5kaWYKIHsKIH0KIAogUmVmUHRy
PEdyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZT4gR3JhcGhpY3NDb250ZXh0R0xU
ZXh0dXJlTWFwcGVyOjpsYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlKCkKIHsKLSAgICByZXR1
cm4gbV9sYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlLnB0cigpOworICAgIHJldHVybiBtX2xh
eWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGU7CiB9CiAKIFJlZlB0cjxHcmFwaGljc0NvbnRleHRH
TD4gY3JlYXRlV2ViUHJvY2Vzc0dyYXBoaWNzQ29udGV4dEdMKGNvbnN0IEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyYgYXR0cmlidXRlcykKQEAgLTE5Miw2ICsxNTksMTUgQEAgYm9vbCBHcmFw
aGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXI6OmNvcHlUZXh0dXJlRnJvbU1lZGlhKE1lZGlhUGxh
eWVyJiBwbGF5ZXIsIFAKIH0KICNlbmRpZgogCisjaWYgVVNFKE5JQ09TSUEpICYmICFVU0UoQU5H
TEUpCitib29sIEdyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1Jbml0aWFs
aXplKCkKK3sKKyAgICBtX2xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUgPSBQbGF0Zm9ybUxh
eWVyRGlzcGxheURlbGVnYXRlOjpjcmVhdGUoJm1fbmljb3NpYUxheWVyLT5jb250ZW50TGF5ZXIo
KSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpICYmIFVTRShURVhUVVJFX01BUFBFUikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGlj
c0NvbnRleHRHTFRleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuaAppbmRleCA5MWZhNTVi
Y2Y4NGQuLjc1YmMzMmYzZmJlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRl
eHR1cmVNYXBwZXIuaApAQCAtNDUsNyArNDUsNyBAQCBjbGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFw
aGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0R0xUZQog
cHVibGljOgogICAgIHN0YXRpYyBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVy
PiBjcmVhdGUoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYpOwogICAgIH5H
cmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIoKTsKLSAgICAKKwogICAgIC8vIEdyYXBoaWNz
Q29udGV4dEdMVGV4dHVyZU1hcHBlckJhc2Ugb3ZlcnJpZGVzLgogICAgIFJlZlB0cjxHcmFwaGlj
c0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGU+IGxheWVyQ29udGVudHNEaXNwbGF5RGVsZWdh
dGUoKSBmaW5hbDsKICNpZiBFTkFCTEUoVklERU8pCkBAIC02MCw5ICs2MCwxMyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBwcmVwYXJlRm9yRGlzcGxheSgpIGZpbmFsOwogI2VuZGlmCiAKLXByb3RlY3Rl
ZDoKK3ByaXZhdGU6CisjaWYgVVNFKEFOR0xFKQorICAgIGJvb2wgcGxhdGZvcm1Jbml0aWFsaXpl
Q29udGV4dCgpIGZpbmFsOworI2VuZGlmCisgICAgYm9vbCBwbGF0Zm9ybUluaXRpYWxpemUoKSBm
aW5hbDsKICAgICBHcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xBdHRyaWJ1dGVzJiYpOwotICAgIFJlZjxHcmFwaGljc0xheWVyQ29udGVudHNE
aXNwbGF5RGVsZWdhdGU+IG1fbGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZTsKKyAgICBSZWZQ
dHI8R3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlPiBtX2xheWVyQ29udGVudHNE
aXNwbGF5RGVsZWdhdGU7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyQU5HTEUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29u
dGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFLmNwcAppbmRleCA5NTQxNjdkNmNmNjIuLjU2NTE1NGE4
NjljOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlckFOR0xFLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyQU5HTEUuY3BwCkBAIC0zMiw3ICszMiw5IEBACiAjaW5jbHVkZSAiQU5HTEVIZWFkZXJzLmgi
CiAjaW5jbHVkZSAiQU5HTEVVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TE9wZW5HTE1hbmFnZXIuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGl4ZWxC
dWZmZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUxheWVyRGlzcGxheURlbGVnYXRlLmgiCiAKICNp
ZiBVU0UoTklDT1NJQSkKICNpbmNsdWRlICJHQk1EZXZpY2UuaCIKQEAgLTQxLDYgKzQzLDggQEAK
ICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPGdibS5oPgogI2Vsc2UKKyNpbmNsdWRlICJH
TENvbnRleHQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybURpc3BsYXkuaCIKICNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXIuaCIKICNlbmRpZgogCkBAIC00OSwxMSArNTMsMTE2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6OkdyYXBoaWNz
Q29udGV4dEdMQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCiAg
ICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRyaWJ1dGVzKQogeworfQorCitib29sIEdyYXBoaWNz
Q29udGV4dEdMVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1Jbml0aWFsaXplQ29udGV4dCgpCit7Cisg
ICAgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmli
dXRlcygpOwogI2lmIEVOQUJMRShXRUJHTDIpCiAgICAgbV9pc0ZvcldlYkdMMiA9IGF0dHJpYnV0
ZXMud2ViR0xWZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDI7
CiAjZW5kaWYKKworICAgIFZlY3RvcjxFR0xpbnQ+IGRpc3BsYXlBdHRyaWJ1dGVzIHsKKyNpZiAh
T1MoV0lORE9XUykKKyAgICAgICAgRUdMX1BMQVRGT1JNX0FOR0xFX1RZUEVfQU5HTEUsIEVHTF9Q
TEFURk9STV9BTkdMRV9UWVBFX09QRU5HTEVTX0FOR0xFLAorICAgICAgICBFR0xfUExBVEZPUk1f
QU5HTEVfREVWSUNFX1RZUEVfQU5HTEUsIEVHTF9QTEFURk9STV9BTkdMRV9ERVZJQ0VfVFlQRV9F
R0xfQU5HTEUsCisgICAgICAgIEVHTF9QTEFURk9STV9BTkdMRV9OQVRJVkVfUExBVEZPUk1fVFlQ
RV9BTkdMRSwgRUdMX1BMQVRGT1JNX1NVUkZBQ0VMRVNTX01FU0EsCisjZW5kaWYKKyAgICAgICAg
RUdMX05PTkUsCisgICAgfTsKKworICAgIG1fZGlzcGxheU9iaiA9IEVHTF9HZXRQbGF0Zm9ybURp
c3BsYXlFWFQoRUdMX1BMQVRGT1JNX0FOR0xFX0FOR0xFLCBFR0xfREVGQVVMVF9ESVNQTEFZLCBk
aXNwbGF5QXR0cmlidXRlcy5kYXRhKCkpOworICAgIGlmIChtX2Rpc3BsYXlPYmogPT0gRUdMX05P
X0RJU1BMQVkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEVHTGludCBtYWpvclZlcnNp
b24sIG1pbm9yVmVyc2lvbjsKKyAgICBpZiAoRUdMX0luaXRpYWxpemUobV9kaXNwbGF5T2JqLCAm
bWFqb3JWZXJzaW9uLCAmbWlub3JWZXJzaW9uKSA9PSBFR0xfRkFMU0UpIHsKKyAgICAgICAgTE9H
KFdlYkdMLCAiRUdMRGlzcGxheSBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgTE9HKFdlYkdMLCAiQU5HTEUgaW5pdGlhbGlzZWQgTWFq
b3I6ICVkIE1pbm9yOiAlZCIsIG1ham9yVmVyc2lvbiwgbWlub3JWZXJzaW9uKTsKKworICAgIGNv
bnN0IGNoYXIqIGRpc3BsYXlFeHRlbnNpb25zID0gRUdMX1F1ZXJ5U3RyaW5nKG1fZGlzcGxheU9i
aiwgRUdMX0VYVEVOU0lPTlMpOworICAgIExPRyhXZWJHTCwgIkV4dGVuc2lvbnM6ICVzIiwgZGlz
cGxheUV4dGVuc2lvbnMpOworCisgICAgRUdMaW50IGNvbmZpZ0F0dHJpYnV0ZXNbXSA9IHsKKyAg
ICAgICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9FUzJfQklULAorICAgICAgICBF
R0xfUkVEX1NJWkUsIDgsCisgICAgICAgIEVHTF9HUkVFTl9TSVpFLCA4LAorICAgICAgICBFR0xf
QkxVRV9TSVpFLCA4LAorICAgICAgICBFR0xfQUxQSEFfU0laRSwgOCwKKyAgICAgICAgRUdMX0RF
UFRIX1NJWkUsIDAsCisgICAgICAgIEVHTF9TVEVOQ0lMX1NJWkUsIDAsCisgICAgICAgIEVHTF9O
T05FCisgICAgfTsKKyAgICBFR0xpbnQgbnVtYmVyQ29uZmlnc1JldHVybmVkID0gMDsKKyAgICBF
R0xfQ2hvb3NlQ29uZmlnKG1fZGlzcGxheU9iaiwgY29uZmlnQXR0cmlidXRlcywgJm1fY29uZmln
T2JqLCAxLCAmbnVtYmVyQ29uZmlnc1JldHVybmVkKTsKKyAgICBpZiAobnVtYmVyQ29uZmlnc1Jl
dHVybmVkICE9IDEpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiRUdMQ29uZmlnIEluaXRpYWxpemF0
aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBMT0coV2Vi
R0wsICJHb3QgRUdMQ29uZmlnIik7CisKKyAgICBFR0xfQmluZEFQSShFR0xfT1BFTkdMX0VTX0FQ
SSk7CisgICAgaWYgKEVHTF9HZXRFcnJvcigpICE9IEVHTF9TVUNDRVNTKSB7CisgICAgICAgIExP
RyhXZWJHTCwgIlVuYWJsZSB0byBiaW5kIHRvIE9QRU5HTF9FU19BUEkiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIFZlY3RvcjxFR0xpbnQ+IGVnbENvbnRleHRBdHRyaWJ1
dGVzOworICAgIGlmIChtX2lzRm9yV2ViR0wyKSB7CisgICAgICAgIGVnbENvbnRleHRBdHRyaWJ1
dGVzLmFwcGVuZChFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTik7CisgICAgICAgIGVnbENvbnRl
eHRBdHRyaWJ1dGVzLmFwcGVuZCgzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlZ2xDb250ZXh0
QXR0cmlidXRlcy5hcHBlbmQoRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04pOworICAgICAgICBl
Z2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoMik7CisgICAgICAgIC8vIEFOR0xFIHdpbGwgdXBn
cmFkZSB0aGUgY29udGV4dCB0byBFUzMgYXV0b21hdGljYWxseSB1bmxlc3MgdGhpcyBpcyBzcGVj
aWZpZWQuCisgICAgICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfQ09OVEVYVF9P
UEVOR0xfQkFDS1dBUkRTX0NPTVBBVElCTEVfQU5HTEUpOworICAgICAgICBlZ2xDb250ZXh0QXR0
cmlidXRlcy5hcHBlbmQoRUdMX0ZBTFNFKTsKKyAgICB9CisgICAgZWdsQ29udGV4dEF0dHJpYnV0
ZXMuYXBwZW5kKEVHTF9DT05URVhUX1dFQkdMX0NPTVBBVElCSUxJVFlfQU5HTEUpOworICAgIGVn
bENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfVFJVRSk7CisgICAgLy8gV2ViR0wgcmVxdWly
ZXMgdGhhdCBhbGwgcmVzb3VyY2VzIGFyZSBjbGVhcmVkIGF0IGNyZWF0aW9uLgorICAgIGVnbENv
bnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfUk9CVVNUX1JFU09VUkNFX0lOSVRJQUxJWkFUSU9O
X0FOR0xFKTsKKyAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX1RSVUUpOworICAg
IC8vIFdlYkdMIGRvZXNuJ3QgYWxsb3cgY2xpZW50IGFycmF5cy4KKyAgICBlZ2xDb250ZXh0QXR0
cmlidXRlcy5hcHBlbmQoRUdMX0NPTlRFWFRfQ0xJRU5UX0FSUkFZU19FTkFCTEVEX0FOR0xFKTsK
KyAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0ZBTFNFKTsKKyAgICAvLyBXZWJH
TCBkb2Vzbid0IGFsbG93IGltcGxpY2l0IGNyZWF0aW9uIG9mIG9iamVjdHMgb24gYmluZC4KKyAg
ICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0NPTlRFWFRfQklORF9HRU5FUkFURVNf
UkVTT1VSQ0VfQ0hST01JVU0pOworICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xf
RkFMU0UpOworCisgICAgaWYgKHN0cnN0cihkaXNwbGF5RXh0ZW5zaW9ucywgIkVHTF9BTkdMRV9w
b3dlcl9wcmVmZXJlbmNlIikpIHsKKyAgICAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5k
KEVHTF9QT1dFUl9QUkVGRVJFTkNFX0FOR0xFKTsKKyAgICAgICAgLy8gRUdMX0xPV19QT1dFUl9B
TkdMRSBpcyB0aGUgZGVmYXVsdC4gQ2hhbmdlIHRvCisgICAgICAgIC8vIEVHTF9ISUdIX1BPV0VS
X0FOR0xFIGlmIGRlc2lyZWQuCisgICAgICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChF
R0xfTE9XX1BPV0VSX0FOR0xFKTsKKyAgICB9CisgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBw
ZW5kKEVHTF9OT05FKTsKKworI2lmIFVTRShOSUNPU0lBKQorICAgIGF1dG8gc2hhcmluZ0NvbnRl
eHQgPSBFR0xfTk9fQ09OVEVYVDsKKyNlbHNlCisgICAgYXV0byBzaGFyaW5nQ29udGV4dCA9IFBs
YXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29u
dGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyNlbmRpZgorICAgIG1fY29udGV4dE9iaiA9IEVH
TF9DcmVhdGVDb250ZXh0KG1fZGlzcGxheU9iaiwgbV9jb25maWdPYmosIHNoYXJpbmdDb250ZXh0
LCBlZ2xDb250ZXh0QXR0cmlidXRlcy5kYXRhKCkpOworICAgIGlmIChtX2NvbnRleHRPYmogPT0g
RUdMX05PX0NPTlRFWFQpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiRUdMQ29udGV4dCBJbml0aWFs
aXphdGlvbiBmYWlsZWQuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkgeworICAgICAgICBMT0coV2ViR0wsICJBTkdMRSBtYWtl
Q29udGV4dEN1cnJlbnQgZmFpbGVkLiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIExPRyhXZWJHTCwgIkdvdCBFR0xDb250ZXh0Iik7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyOjpwbGF0Zm9ybUluaXRpYWxpemUo
KQorewogI2lmIFVTRShOSUNPU0lBKQogICAgIG1fbmljb3NpYUxheWVyID0gbWFrZVVuaXF1ZTxO
aWNvc2lhOjpHQ0dMQU5HTEVMYXllcj4oKnRoaXMpOworICAgIG1fbGF5ZXJDb250ZW50c0Rpc3Bs
YXlEZWxlZ2F0ZSA9IFBsYXRmb3JtTGF5ZXJEaXNwbGF5RGVsZWdhdGU6OmNyZWF0ZSgmbV9uaWNv
c2lhTGF5ZXItPmNvbnRlbnRMYXllcigpKTsKIAogICAgIGNvbnN0IGF1dG8mIGdibURldmljZSA9
IEdCTURldmljZTo6Z2V0KCk7CiAgICAgaWYgKGdibURldmljZS5kZXZpY2UoKSkgewpAQCAtNjMs
MTggKzE3MiwxNyBAQCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpHcmFwaGljc0NvbnRleHRHTEFO
R0xFKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRyaQogICAgIH0KICNlbHNlCiAgICAg
bV90ZXhtYXBMYXllciA9IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVy
PigqdGhpcyk7CisgICAgbV9sYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlID0gUGxhdGZvcm1M
YXllckRpc3BsYXlEZWxlZ2F0ZTo6Y3JlYXRlKG1fdGV4bWFwTGF5ZXIuZ2V0KCkpOwogI2VuZGlm
CiAgICAgYm9vbCBzdWNjZXNzID0gbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgQVNTRVJUX1VO
VVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKLSAgICBzdWNjZXNzID0gaW5pdGlhbGl6ZSgpOwotICAg
IEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CiAKICAgICAvLyBXZSByZXF1aXJlIHRo
aXMgZXh0ZW5zaW9uIHRvIHJlbmRlciBpbnRvIHRoZSBkbWFidWYtYmFja2VkIEVHTEltYWdlLgog
ICAgIFJFTEVBU0VfQVNTRVJUKHN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdlIikp
OwogICAgIEdMX1JlcXVlc3RFeHRlbnNpb25BTkdMRSgiR0xfT0VTX0VHTF9pbWFnZSIpOwogCiAg
ICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7Ci0gICAgYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1
dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hhbmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KKyAgICBh
dXRvIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOyAvLyBUaGV5IG1heSBoYXZlIGNo
YW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCiAKICAgICBHTGVudW0gdGV4dHVyZVRhcmdldCA9IGRy
YXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCk7CiAgICAgLy8gQ3JlYXRlIGEgdGV4dHVyZSB0byBy
ZW5kZXIgaW50by4KQEAgLTEyNiw2ICsyMzQsNyBAQCBHcmFwaGljc0NvbnRleHRHTEFOR0xFOjpH
cmFwaGljc0NvbnRleHRHTEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRyaQog
ICAgIH0KIAogICAgIEdMX0NsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgcmV0dXJuIHRydWU7
CiB9CiAKICNpZiBVU0UoTklDT1NJQSkKQEAgLTIzOCwyOSArMzQ3LDE5IEBAIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6On5HcmFwaGljc0NvbnRleHRHTEFOR0xFKCkKIAogR0NHTERpc3BsYXkgR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRTo6cGxhdGZvcm1EaXNwbGF5KCkgY29uc3QKIHsKLSNpZiBVU0Uo
TklDT1NJQSkKLSAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXItPnBsYXRmb3JtRGlzcGxheSgpOwot
I2Vsc2UKLSAgICByZXR1cm4gbV90ZXhtYXBMYXllci0+cGxhdGZvcm1EaXNwbGF5KCk7Ci0jZW5k
aWYKKyAgICByZXR1cm4gbV9kaXNwbGF5T2JqOwogfQogCiBHQ0dMQ29uZmlnIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEU6OnBsYXRmb3JtQ29uZmlnKCkgY29uc3QKIHsKLSNpZiBVU0UoTklDT1NJQSkK
LSAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXItPnBsYXRmb3JtQ29uZmlnKCk7Ci0jZWxzZQotICAg
IHJldHVybiBtX3RleG1hcExheWVyLT5wbGF0Zm9ybUNvbmZpZygpOwotI2VuZGlmCisgICAgcmV0
dXJuIG1fY29uZmlnT2JqOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dEdMQU5HTEU6Om1ha2VD
b250ZXh0Q3VycmVudCgpCiB7Ci0jaWYgVVNFKE5JQ09TSUEpCi0gICAgcmV0dXJuIG1fbmljb3Np
YUxheWVyLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNlbHNlCi0gICAgcmV0dXJuIG1fdGV4bWFw
TGF5ZXItPm1ha2VDb250ZXh0Q3VycmVudCgpOwotI2VuZGlmCisgICAgaWYgKEVHTF9HZXRDdXJy
ZW50Q29udGV4dCgpID09IG1fY29udGV4dE9iaikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIEVHTF9NYWtlQ3VycmVudChtX2Rpc3BsYXlPYmosIEVHTF9OT19TVVJGQUNFLCBFR0xf
Tk9fU1VSRkFDRSwgbV9jb250ZXh0T2JqKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTEFO
R0xFOjpjaGVja0dQVVN0YXR1cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvUGxhdGZvcm1MYXllckRpc3BsYXlEZWxlZ2F0ZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1BsYXRmb3JtTGF5ZXJEaXNwbGF5RGVs
ZWdhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjYwNWVlMTE3
ZTg2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9QbGF0Zm9ybUxheWVyRGlzcGxheURlbGVnYXRlLmgKQEAgLTAsMCArMSw1NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFBsYXRmb3JtTGF5ZXJEaXNwbGF5RGVsZWdhdGUgZmluYWwgOiBwdWJsaWMgR3JhcGhpY3NMYXll
ckNvbnRlbnRzRGlzcGxheURlbGVnYXRlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFBsYXRm
b3JtTGF5ZXJEaXNwbGF5RGVsZWdhdGU+IGNyZWF0ZShQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxh
eWVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGxhdGZvcm1MYXllckRp
c3BsYXlEZWxlZ2F0ZShwbGF0Zm9ybUxheWVyKSk7CisgICAgfQorCisgICAgLy8gR3JhcGhpY3NM
YXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlIG92ZXJyaWRlcy4KKyAgICBQbGF0Zm9ybUxheWVy
KiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Bs
YXRmb3JtTGF5ZXI7CisgICAgfQorCitwcml2YXRlOgorICAgIFBsYXRmb3JtTGF5ZXJEaXNwbGF5
RGVsZWdhdGUoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcikKKyAgICAgICAgOiBtX3BsYXRm
b3JtTGF5ZXIocGxhdGZvcm1MYXllcikKKyAgICB7CisgICAgfQorCisgICAgUGxhdGZvcm1MYXll
ciogbV9wbGF0Zm9ybUxheWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJHQ0dMUGxhdGZvcm1MYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyLmNwcAppbmRleCBiNTYwNmIz
ODhlNzUuLjBlMTlkOGM3YjViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dM
UGxhdGZvcm1MYXllci5jcHAKQEAgLTIzLDcgKzIzLDYgQEAKIAogI2lmIEVOQUJMRShXRUJHTCkg
JiYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiAhVVNFKE5JQ09TSUEpCiAKLSNpbmNsdWRlICJBTkdM
RUNvbnRleHQuaCIKICNpbmNsdWRlICJBTkdMRUhlYWRlcnMuaCIKICNpbmNsdWRlICJCaXRtYXBU
ZXh0dXJlR0wuaCIKICNpbmNsdWRlICJHTENvbnRleHQuaCIKQEAgLTM2LDc3ICszNSwxNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI6OlRleHR1
cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcihHcmFwaGljc0NvbnRleHRHTEFOR0xFJiBjb250ZXh0
KQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiB7Ci0gICAgYXV0byBzaGFyaW5nQ29udGV4dCA9
IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dM
Q29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKLSNpZiBFTkFCTEUoV0VCR0wyKQotICAgIG1f
Z2xDb250ZXh0ID0gQU5HTEVDb250ZXh0OjpjcmVhdGVDb250ZXh0KHNoYXJpbmdDb250ZXh0LCBj
b250ZXh0LmNvbnRleHRBdHRyaWJ1dGVzKCkud2ViR0xWZXJzaW9uID09IEdyYXBoaWNzQ29udGV4
dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDIpOwotI2Vsc2UKLSAgICBtX2dsQ29udGV4dCA9IEFOR0xF
Q29udGV4dDo6Y3JlYXRlQ29udGV4dChzaGFyaW5nQ29udGV4dCwgZmFsc2UpOwotI2VuZGlmCi0K
LSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgbV9wbGF0Zm9ybUxheWVyUHJveHkg
PSBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eUdMKTsKLSNlbmRp
ZgogfQogCiBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI6On5UZXh0dXJlTWFwcGVyR0NH
TFBsYXRmb3JtTGF5ZXIoKQogewotI2lmICFVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAgICAg
aWYgKGNsaWVudCgpKQogICAgICAgICBjbGllbnQoKS0+cGxhdGZvcm1MYXllcldpbGxCZURlc3Ry
b3llZCgpOwotI2VuZGlmCi19Ci0KLWJvb2wgVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVy
OjptYWtlQ29udGV4dEN1cnJlbnQoKQotewotICAgIEFTU0VSVChtX2dsQ29udGV4dCk7Ci0gICAg
cmV0dXJuIG1fZ2xDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLX0KLQotR0NHTENvbnRl
eHQgVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25z
dAotewotICAgIEFTU0VSVChtX2dsQ29udGV4dCk7Ci0gICAgcmV0dXJuIG1fZ2xDb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKTsKLX0KLQotR0NHTERpc3BsYXkgVGV4dHVyZU1hcHBlckdDR0xQbGF0
Zm9ybUxheWVyOjpwbGF0Zm9ybURpc3BsYXkoKSBjb25zdAotewotICAgIEFTU0VSVChtX2dsQ29u
dGV4dCk7Ci0gICAgcmV0dXJuIG1fZ2xDb250ZXh0LT5wbGF0Zm9ybURpc3BsYXkoKTsKLX0KLQot
R0NHTENvbmZpZyBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI6OnBsYXRmb3JtQ29uZmln
KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9nbENvbnRleHQpOwotICAgIHJldHVybiBtX2dsQ29u
dGV4dC0+cGxhdGZvcm1Db25maWcoKTsKIH0KIAotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKLVJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBUZXh0dXJlTWFwcGVy
R0NHTFBsYXRmb3JtTGF5ZXI6OnByb3h5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbGF0Zm9y
bUxheWVyUHJveHkuY29weVJlZigpOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZv
cm1MYXllcjo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1fY29udGV4dC5sYXll
ckNvbXBvc2l0ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LnByZXBhcmVU
ZXh0dXJlKCk7Ci0gICAgSW50U2l6ZSB0ZXh0dXJlU2l6ZShtX2NvbnRleHQubV9jdXJyZW50V2lk
dGgsIG1fY29udGV4dC5tX2N1cnJlbnRIZWlnaHQpOwotICAgIFRleHR1cmVNYXBwZXJHTDo6Rmxh
Z3MgZmxhZ3MgPSBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEZsaXBUZXh0dXJlIHwgKG1fY29udGV4
dC5tX2F0dHJzLmFscGhhID8gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCA6IDApOwotCi0g
ICAgewotICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9wbGF0Zm9ybUxheWVyUHJveHktPmxvY2so
KSB9OwotICAgICAgICBkb3duY2FzdDxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5R0w+
KCptX3BsYXRmb3JtTGF5ZXJQcm94eSkucHVzaE5leHRCdWZmZXIobWFrZVVuaXF1ZTxUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4obV9jb250ZXh0Lm1fY29tcG9zaXRvclRleHR1cmUs
IHRleHR1cmVTaXplLCBmbGFncywgbV9jb250ZXh0Lm1faW50ZXJuYWxDb2xvckZvcm1hdCkpOwot
ICAgIH0KLQotICAgIG1fY29udGV4dC5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7Ci19Ci0jZWxzZQog
dm9pZCBUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI6OnBhaW50VG9UZXh0dXJlTWFwcGVy
KFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVj
dCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSkKIHsK
LSAgICBBU1NFUlQobV9nbENvbnRleHQpOwotCiAgICAgbV9jb250ZXh0Lm1hcmtMYXllckNvbXBv
c2l0ZWQoKTsKIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKQEAgLTEyOSw3ICs2Nyw2IEBA
IHZvaWQgVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyOjpwYWludFRvVGV4dHVyZU1hcHBl
cihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlCiAgICAgdGV4bWFwR0wuZHJhd1RleHR1cmUobV9jb250
ZXh0Lm1fdGV4dHVyZSwgZmxhZ3MsIHRleHR1cmVTaXplLCB0YXJnZXRSZWN0LCBtYXRyaXgsIG9w
YWNpdHkpOwogI2VuZGlmIC8vIFVTRShURVhUVVJFX01BUFBFUl9HTCkKIH0KLSNlbmRpZiAvLyBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJHQ0dMUGxhdGZvcm1MYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllci5oCmluZGV4IGY3Yjg1NzRm
OGYwMy4uNzQ0MjZmMmI0YTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQ0dMUGxh
dGZvcm1MYXllci5oCkBAIC0yOCw3ICsyOCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgQU5HTEVDb250ZXh0OwogY2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eTsKIAogY2xhc3MgVGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyIDogcHVibGljIFBsYXRm
b3JtTGF5ZXIgewpAQCAtMzcsMjUgKzM2LDEwIEBAIHB1YmxpYzoKICAgICBUZXh0dXJlTWFwcGVy
R0NHTFBsYXRmb3JtTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xBTkdMRSYpOwogICAgIHZpcnR1YWwg
flRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcigpOwogCi0gICAgYm9vbCBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBHQ0dMQ29udGV4dCBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKLSAg
ICBHQ0dMRGlzcGxheSBwbGF0Zm9ybURpc3BsYXkoKSBjb25zdDsKLSAgICBHQ0dMQ29uZmlnIHBs
YXRmb3JtQ29uZmlnKCkgY29uc3Q7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0g
ICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IHByb3h5KCkgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7Ci0jZWxz
ZQogICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwg
Y29uc3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxv
YXQgb3BhY2l0eSk7Ci0jZW5kaWYKIAogcHJpdmF0ZToKICAgICBHcmFwaGljc0NvbnRleHRHTEFO
R0xFJiBtX2NvbnRleHQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFOR0xFQ29udGV4dD4gbV9nbENv
bnRleHQ7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgUmVmUHRyPFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IG1fcGxhdGZvcm1MYXllclByb3h5OwotI2VuZGlm
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>