<?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>147258</bug_id>
          
          <creation_ts>2015-07-24 01:45:08 -0700</creation_ts>
          <short_desc>[GTK] Software-only basic compositing</short_desc>
          <delta_ts>2015-12-31 14:21:23 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Emanuele Aina">emanuele.aina</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andrunko</cc>
    
    <cc>cgarcia</cc>
    
    <cc>changseok</cc>
    
    <cc>clopez</cc>
    
    <cc>gustavo</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>mrobinson</cc>
    
    <cc>philip.chimento</cc>
    
    <cc>yoon</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1111952</commentid>
    <comment_count>0</comment_count>
    <who name="Emanuele Aina">emanuele.aina</who>
    <bug_when>2015-07-24 01:45:08 -0700</bug_when>
    <thetext>At the moment WebKit depends on OpenGL until bug 146511 gets fixed. Unfortunately, disabling OpenGL means disabling composition too.

On our old 2.4.1-based branch for the Raspberry Pi we had some features and some really ugly hacks in place to reduce memory copies as much as possible, since those where one of the most severe performance bottlenecks on a device with a rather slow memory bus: we enabled the Tiled Backing Store with a Cairo backend to improve scrolling responsiveness, and we punched some holes through several layers to make sure video frames get blit to screen directly, without hitting the backing store first.

Now that we&apos;re (finally!) moving to the modern world I&apos;d like to get rid of such hacks: my very high level idea would be to have some form of restricted compositing where only rectangular, non-transformed, fully-opaque areas are promoted to layers. This way, compositing would roughly consist in a series of clipped memcpys on the windowing surface.

The main use-case I&apos;d like to target is video playing: with our hacked up branch at the moment we&apos;re able to play 720p videos on the Pi 1 and I&apos;d like to retain such ability while getting rid of the hacks. What currently slows things down is that without compositing each frame is copied to the backing store first and only then blit to windowing surface, doubling the amount of memcpy&apos;ed data for each drawing loop.

Another use-case that would benefit from such sort of composition would be the scrolling of the vast majority of pages with position:fixed headers or sidebars.

Implementation-wise I started looking at reviving the TextureMapperImageBuffer that was removed in http://trac.webkit.org/changeset/183807 (see https://lists.webkit.org/pipermail/webkit-dev/2015-April/027384.html for some context).

I&apos;m now a bit confused about which infrastructure I should use to develop such feature, in LayerTreeHost.cpp[1] there seems to be three choices: USE(COORDINATED_GRAPHICS_MULTIPROCESS), USE(COORDINATED_GRAPHICS_THREADED) and USE(TEXTURE_MAPPER_GL). LayerTreeHostGtk assumes GL, so I guess I  will need to add a software-only implementation. I&apos;m not sure about the status of Coordinated Graphics and the GTK+ port: building with -DENABLE_THREADED_COMPOSITOR on my amd64 laptop failed due to a mismatch with the ThreadedCoordinatedLayerTreeHost::create() prototype. :/

I guess that Coordinated Graphics may be more interesting for me: it already has a Tiled Backing Store implementation and the prospect of being able to use the threaded compositor to use the four cores of the Pi 2 to render the layers is very interesting (we have a special multi-threading feature where we render to a Cairo recording surface and dispatch the real drawing to a thread pool for each tile).

Any guidance is appreciated! :)

[1] https://trac.webkit.org/browser/trunk/Source/WebKit2/WebProcess/WebPage/LayerTreeHost.cpp?rev=187332#L41</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112698</commentid>
    <comment_count>1</comment_count>
    <who name="Emanuele Aina">emanuele.aina</who>
    <bug_when>2015-07-28 03:32:04 -0700</bug_when>
    <thetext>From what I can see, the only thing that uses GL directly with Coordinated Graphics is ThreadedCompositor.cpp, so I guess I should start there, replacing GL usage with GraphicsContext.

Yoon, if you have any moment to spare, any suggestion would be welcome. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113065</commentid>
    <comment_count>2</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2015-07-29 02:40:51 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; From what I can see, the only thing that uses GL directly with Coordinated
&gt; Graphics is ThreadedCompositor.cpp, so I guess I should start there,
&gt; replacing GL usage with GraphicsContext.
&gt; 
&gt; Yoon, if you have any moment to spare, any suggestion would be welcome. :)


Plz blame my laziness. I fixed build of threaded compositor.

Anyway, It looks like I couldn&apos;t understand your use cases properly.
Why not using GL accelerated compositing in RPi2?
AFAIK, it has enough hardware power.

If you want to use threaded-compositor with TextureMapperImageBuffer,
You don&apos;t have to do lots of things.

just do not use ensureGLContext and glContext()-&gt;swapBuffers();
and make a GraphicsContext from ThreadedCompositor:m_nativeSurfaceHandle and
pass it to TextureMapperImageBuffer implementation.

However, I think it is enough to use HW accelerated compositing in RPi2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116524</commentid>
    <comment_count>3</comment_count>
    <who name="Emanuele Aina">emanuele.aina</who>
    <bug_when>2015-08-11 02:26:27 -0700</bug_when>
    <thetext>&gt; Plz blame my laziness. I fixed build of threaded compositor.

Ah ah, no worries, I just picked an unfortunate timing. :)

&gt; Anyway, It looks like I couldn&apos;t understand your use cases properly. Why not using GL accelerated compositing in RPi2? AFAIK, it has enough hardware power.

The current (closed) GL stack has been deemed not reliable enough for WebKit. It works well enough for the limited usage seen in Kodi/XBMC, but WebKit may stress it too much and it has been decided that we will need to get away without GL until the new open stack based on Mesa will be viable.

&gt; If you want to use threaded-compositor with TextureMapperImageBuffer,
&gt; You don&apos;t have to do lots of things.
&gt; just do not use ensureGLContext and glContext()-&gt;swapBuffers();
&gt; and make a GraphicsContext from ThreadedCompositor:m_nativeSurfaceHandle and
pass it to TextureMapperImageBuffer implementation.

Indeed that was enough to get the threaded-compositor to work without GL when not actually compositing layers, now I&apos;ve got position:fixed elements on their own layers (but with a lot of flickering probably due to overdraw) and will look at &lt;video&gt; elements once I have a clear understanding of what causes the flickering.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1123443</commentid>
    <comment_count>4</comment_count>
    <who name="Emanuele Aina">emanuele.aina</who>
    <bug_when>2015-09-04 09:01:20 -0700</bug_when>
    <thetext>Just a quick update: I&apos;ve currently got it running with opaque position:fixed elements, I still need to fix elements with alpha, clean up the hugely messy patch and after that I will start looking at &lt;video&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129657</commentid>
    <comment_count>5</comment_count>
      <attachid>262186</attachid>
    <who name="Emanuele Aina">emanuele.aina</who>
    <bug_when>2015-09-30 13:24:08 -0700</bug_when>
    <thetext>Created attachment 262186
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129658</commentid>
    <comment_count>6</comment_count>
      <attachid>262187</attachid>
    <who name="Emanuele Aina">emanuele.aina</who>
    <bug_when>2015-09-30 13:27:56 -0700</bug_when>
    <thetext>Created attachment 262187
Reintroduce TextureMapperImageBuffer

I submitted the current work in progress rough patch to have some sort of software only compositing using the threaded compositor.

The patch needs the reintroduction of TextureMapperImageBuffer to be applied first, should I upload it as a separate bug?

Comments on the general approach would be very welcome. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131234</commentid>
    <comment_count>7</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-10-06 22:38:53 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; Plz blame my laziness. I fixed build of threaded compositor.
&gt; 
&gt; Ah ah, no worries, I just picked an unfortunate timing. :)
&gt; 
&gt; &gt; Anyway, It looks like I couldn&apos;t understand your use cases properly. Why not using GL accelerated compositing in RPi2? AFAIK, it has enough hardware power.
&gt; 
&gt; The current (closed) GL stack has been deemed not reliable enough for
&gt; WebKit. It works well enough for the limited usage seen in Kodi/XBMC, but
&gt; WebKit may stress it too much and it has been decided that we will need to
&gt; get away without GL until the new open stack based on Mesa will be viable.
&gt; 

Can you roughly estimate how long this software compositing backend would have to be maintained in trunk, i.e. how long until you&apos;d be able to switch back to OpenGL-based implementation?

For the last few years the desire was to move over completely towards depending on hardware acceleration for compositing, which is why TextureMapperImageBuffer was removed in the first place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131257</commentid>
    <comment_count>8</comment_count>
    <who name="Emanuele Aina">emanuele.aina</who>
    <bug_when>2015-10-07 03:32:25 -0700</bug_when>
    <thetext>My current understanding is that we&apos;re still one or two year from having a GL implementation we can rely on.

The current patch didn&apos;t turn out to be extremely invasive: I guess it can also benefit from a couple of refinements to further lower its impact if the approach chosen seems sensible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147726</commentid>
    <comment_count>9</comment_count>
    <who name="Emanuele Aina">emanuele.aina</who>
    <bug_when>2015-12-09 05:19:35 -0800</bug_when>
    <thetext>Interest in this a dried up, and hopefully some sort of usable, free GL support for the Raspberry Pi should be available soon. Closing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151775</commentid>
    <comment_count>10</comment_count>
      <attachid>262186</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-12-31 14:21:23 -0800</bug_when>
    <thetext>Comment on attachment 262186
Patch

At the web engines hackfest, you mentioned that you&apos;re no longer interested in software-only compositing. For a better future....</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262186</attachid>
            <date>2015-09-30 13:24:08 -0700</date>
            <delta_ts>2015-12-31 14:21:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147258-20150930222342.patch</filename>
            <type>text/plain</type>
            <size>27139</size>
            <attacher name="Emanuele Aina">emanuele.aina</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwMzIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2VkYWMzYjJiMjRiODg3
MDZkYzg5OWY4NzA5ZjhiMzQ5MjVjZTBjYi4uNzg4MDAyZDI4NjdkZTAzMGEyZTNlYjUxZDcyYTRi
ZWE5MTk2MzcwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE1LTA5LTMwICBFbWFu
dWVsZSBBaW5hICA8ZW1hbnVlbGUuYWluYUBjb2xsYWJvcmEuY29tPgorCisgICAgICAgIFtHVEtd
IFNvZnR3YXJlLW9ubHkgYmFzaWMgY29tcG9zaXRpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzI1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAg
ICogcGFnZS9TZXR0aW5ncy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFJl
Y3RhbmdsZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJv
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFJlY3RhbmdsZXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXI6OmJlZ2lu
Q2xpcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJ
bWFnZUJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpw
YWludFNlbGZBbmRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5
ZXI6OnBhaW50V2l0aEludGVybWVkaWF0ZVN1cmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyVGlsZS5jcHA6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OmNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhbkJlQ29tcG9zaXRlZCk6CisKIDIwMTUt
MDktMTEgIEVtYW51ZWxlIEFpbmEgIDxlbWFudWVsZS5haW5hQGNvbGxhYm9yYS5jb20+CiAKICAg
ICAgICAgUmVpbnRyb2R1Y2UgVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
NDc0OGE4MjZjNjdlZTllZTVkZGFiNDBkY2ExNzdiODdjY2E0ZTE2Ni4uNGJhMDBjMGViMzM4YWEw
ZWNhMTNiMzdhZDhlMzZlODQwYzhmZTJjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisy
MDE1LTA5LTMwICBFbWFudWVsZSBBaW5hICA8ZW1hbnVlbGUuYWluYUBjb2xsYWJvcmEuY29tPgor
CisgICAgICAgIFtHVEtdIFNvZnR3YXJlLW9ubHkgYmFzaWMgY29tcG9zaXRpbmcKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzI1OAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpwYWludFRvR3JhcGhpY3NDb250ZXh0KToKKyAg
ICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2Nl
bmUuaDoKKyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBv
c2l0b3IvVGhyZWFkU2FmZUNvb3JkaW5hdGVkU3VyZmFjZS5jcHA6CisgICAgICAgICogU2hhcmVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRv
ci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRocmVhZGVkQ29tcG9zaXRvcjo6cmVuZGVyTGF5ZXJU
cmVlKToKKyAgICAgICAgKFdlYktpdDo6VGhyZWFkZWRDb21wb3NpdG9yOjpydW5Db21wb3NpdGlu
Z1RocmVhZCk6CisgICAgICAgICogU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRj
b21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsv
V2ViUHJlZmVyZW5jZXNHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcmVmZXJlbmNlczo6
cGxhdGZvcm1Jbml0aWFsaXplU3RvcmUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisKIDIwMTUtMDktMTEgIEVtYW51ZWxlIEFpbmEgIDxl
bWFudWVsZS5haW5hQGNvbGxhYm9yYS5jb20+CiAKICAgICAgICAgUmVpbnRyb2R1Y2UgVGV4dHVy
ZU1hcHBlckltYWdlQnVmZmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRp
bmdzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCmluZGV4IDQwODY2MTk0
YTg4NzgwYmEwODJmMmVmMmZiMTU3ZmZlYWY5N2NhNTUuLjRiOTMxNDI3ODI0NjcwMTg1ZWU4MjVj
ODVjMWNmYzk4NzljOGRlMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGlu
Z3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCkBAIC0xMzMsNyAr
MTMzLDcgQEAgc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdE1lZGlhQ29udHJvbHNTY2FsZVdpdGhQ
YWdlWm9vbSA9IHRydWU7CiAjZWxzZQogc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdEZpeGVkUG9z
aXRpb25DcmVhdGVzU3RhY2tpbmdDb250ZXh0ID0gZmFsc2U7CiBzdGF0aWMgY29uc3QgYm9vbCBk
ZWZhdWx0Rml4ZWRCYWNrZ3JvdW5kc1BhaW50UmVsYXRpdmVUb0RvY3VtZW50ID0gZmFsc2U7Ci1z
dGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9z
aXRpb25FbmFibGVkID0gZmFsc2U7CitzdGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkID0gdHJ1ZTsKIHN0YXRpYyBjb25z
dCBib29sIGRlZmF1bHRBbGxvd3NJbmxpbmVNZWRpYVBsYXliYWNrID0gdHJ1ZTsKIHN0YXRpYyBj
b25zdCBib29sIGRlZmF1bHRJbmxpbmVNZWRpYVBsYXliYWNrUmVxdWlyZXNQbGF5c0lubGluZUF0
dHJpYnV0ZSA9IGZhbHNlOwogc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdFJlcXVpcmVzVXNlckdl
c3R1cmVGb3JNZWRpYVBsYXliYWNrID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCAzMDM0MGRiZDMzYWI1
YzA3YjlmNDE2NWEwODIxYTVjNGYzZTIxNDlkLi43MTNiOWM2NWUxNGYxNTBkMzMzZjFjNjc5M2Rm
YjFlZTBjMDMwYjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTQ4Niw2ICs0ODYsMTYgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBidWZmZXIsIGNvbnN0IEZs
b2F0UmVjdCYgcmUKICAgICBidWZmZXItPmNsaXAoKnRoaXMsIHJlY3QpOwogfQogCisjaWYgIVVT
RShDQUlSTykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUmVjdGFuZ2xlcyhjb25zdCBWZWN0
b3I8RmxvYXRSZWN0PiYgcmVjdHMpCit7CisgICAgUGF0aCBwYXRoKCk7CisgICAgZm9yIChGbG9h
dFJlY3QgcmVjdCA6IHJlY3RzKQorICAgICAgICBwYXRoLmFkZFJlY3QocmVjdCk7CisgICAgY2xp
cFBhdGgocGF0aCk7Cit9CisjZW5kaWYKKwogI2lmICFVU0UoQ0cpICYmICFVU0UoQ0FJUk8pCiBJ
bnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IGVh
OWI3YjI2NGYxMDA3YmQ4ZTAzNDhmMWI4YmQzYTY0ZjA1YWVlNTkuLjk5ZjM4YzdjNjY2MTgyN2Mw
ODdmZDBjNzkxNmVkYzAxMzIxMzM4YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC0zMzEsNiArMzMxLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jik7CiAg
ICAgICAgIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsK
ICAgICAgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpOworICAgICAgICB2
b2lkIGNsaXBSZWN0YW5nbGVzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+Jik7CiAgICAgICAgIHZv
aWQgY2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCos
IGJvb2wgYW50aWFsaWFzID0gdHJ1ZSk7CiAgICAgICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmKTsKICAgICAgICAgCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWly
by5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRDYWlyby5jcHAKaW5kZXggMmVjMGZiOTlkYzQ5Y2ZjYzQ1MGI1ZTlkNmE3NWI4MjQzZTFh
N2JkOS4uMWNhNjc2MjU4YmU1NDYxNjUwOWVmN2Y5ZTc2YmYwMWFiMGRhM2Y4NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtNDk4LDYgKzQ5OCwyMyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiAg
ICAgY2Fpcm9fY2xpcChjcik7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUmVjdGFu
Z2xlcyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMpCit7CisgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9y
bUNvbnRleHQoKS0+Y3IoKTsKKyAgICBmb3IgKGNvbnN0IEZsb2F0UmVjdCByZWN0IDogcmVjdHMp
CisgICAgICAgIGNhaXJvX3JlY3RhbmdsZShjciwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIGNhaXJvX2ZpbGxfcnVsZV90IHNhdmVkRmlsbFJ1
bGUgPSBjYWlyb19nZXRfZmlsbF9ydWxlKGNyKTsKKyAgICBjYWlyb19hbnRpYWxpYXNfdCBzYXZl
ZEFudGlhbGlhc1J1bGUgPSBjYWlyb19nZXRfYW50aWFsaWFzKGNyKTsKKyAgICBjYWlyb19zZXRf
ZmlsbF9ydWxlKGNyLCBDQUlST19GSUxMX1JVTEVfV0lORElORyk7CisgICAgY2Fpcm9fc2V0X2Fu
dGlhbGlhcyhjciwgQ0FJUk9fQU5USUFMSUFTX05PTkUpOworICAgIGNhaXJvX2NsaXAoY3IpOwor
ICAgIGNhaXJvX3NldF9maWxsX3J1bGUoY3IsIHNhdmVkRmlsbFJ1bGUpOworICAgIGNhaXJvX3Nl
dF9hbnRpYWxpYXMoY3IsIHNhdmVkQW50aWFsaWFzUnVsZSk7Cit9CisKIEludFJlY3QgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKIHsKICAgICBkb3VibGUgeDEsIHgyLCB5MSwg
eTI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXIuaAppbmRleCA0M2U2MmMyODE5YmVhZjBmOWM5N2JmZTRjZDVkZDk3NTY4
MzFhM2U5Li4wNmI5OTgzNjE4MTE4ZjhlOWNiYWVhMmVhNDVmZThiOWQyOTgwZDBlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIK
IAogLyoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAKaW5kZXggZDZmODdl
MTMwYjg1NTg1YTlmOWJjZGY4MGY1NWIzNWYzM2VjOGNkYi4uYTMzOGM1OTIxODRhMjUyODM2ZWFj
MjBjMGZlZDFhMDk0MzIzYTllZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZl
ci5jcHAKQEAgLTQyLDYgKzQyLDIwIEBAIEludFNpemUgVGV4dHVyZU1hcHBlckltYWdlQnVmZmVy
OjptYXhUZXh0dXJlU2l6ZSgpIGNvbnN0CiAKIHZvaWQgVGV4dHVyZU1hcHBlckltYWdlQnVmZmVy
OjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogeworICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHJlY3RzID0geyByZWN0IH07
CisgICAgYmVnaW5DbGlwKG1hdHJpeCwgcmVjdHMpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJJ
bWFnZUJ1ZmZlcjo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgs
IGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcikKK3sKKyAgICBWZWN0b3I8RmxvYXRSZWN0PiByZWN0
cyhyLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByLnNpemUoKTsgaSsrKQor
ICAgICAgICByZWN0c1tpXSA9IHJbaV07CisgICAgYmVnaW5DbGlwKG1hdHJpeCwgcmVjdHMpOwor
fQorCit2b2lkIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlcjo6YmVnaW5DbGlwKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cykK
K3sKICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBjdXJyZW50Q29udGV4dCgpOwogICAg
IGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuOwpAQCAtNTgsNyArNzIsNyBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJJbWFnZUJ1ZmZlcjo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtYXRyaXgsIGNvbgogICAgIGNvbnRleHQtPmNvbmNhdENUTShtYXRyaXgudG9BZmZpbmVU
cmFuc2Zvcm0oKSk7CiAjZW5kaWYKIAotICAgIGNvbnRleHQtPmNsaXAocmVjdCk7CisgICAgY29u
dGV4dC0+Y2xpcFJlY3RhbmdsZXMocmVjdHMpOwogCiAjaWYgRU5BQkxFKDNEX1RSQU5TRk9STVMp
CiAgICAgY29udGV4dC0+c2V0M0RUcmFuc2Zvcm0ocHJldmlvdXNUcmFuc2Zvcm0pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5oCmluZGV4IGRkMTcxOTNlOWE4Yjc0ODUxOGE3MTdl
YjFhNGVhZDM5MTJhNTk2MmIuLjQ3YzQzODA1ZDNmNTc5NDE2YjJiMjcxYzkyY2JkNmRhZjdhZjBj
ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmgKQEAgLTM4LDggKzM4LDEw
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4
dHVyZSYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmLCBmbG9hdCBvcGFjaXR5LCB1bnNpZ25lZCBleHBvc2VkRWRnZXMpIG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgdm9pZCBkcmF3U29saWRDb2xvcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCB2b2lkIGJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0
UmVjdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNsaXAoY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmLCBjb25zdCBWZWN0b3I8SW50UmVjdD4mKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mKTsKICAgICB2aXJ0dWFsIHZvaWQgYmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSog
c3VyZmFjZSkgb3ZlcnJpZGUgeyBtX2N1cnJlbnRTdXJmYWNlID0gc3VyZmFjZTt9Ci0gICAgdmly
dHVhbCB2b2lkIGVuZENsaXAoKSBvdmVycmlkZSB7IGdyYXBoaWNzQ29udGV4dCgpLT5yZXN0b3Jl
KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZW5kQ2xpcCgpIG92ZXJyaWRlIHsgY3VycmVudENvbnRl
eHQoKS0+cmVzdG9yZSgpOyB9CiAgICAgdmlydHVhbCBJbnRSZWN0IGNsaXBCb3VuZHMoKSBvdmVy
cmlkZSB7IHJldHVybiBjdXJyZW50Q29udGV4dCgpLT5jbGlwQm91bmRzKCk7IH0KICAgICB2aXJ0
dWFsIEludFNpemUgbWF4VGV4dHVyZVNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpIG92ZXJyaWRlIHsgcmV0dXJuIEJpdG1h
cFRleHR1cmVJbWFnZUJ1ZmZlcjo6Y3JlYXRlKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5j
cHAKaW5kZXggZTgxMjJkOWY4ZTBiMGQ2OTE5ZDAwYmQ1YWM2MzFmNDdjYzc4Nzg3Ny4uZDkzZWJl
MTdkYjA1YTM2NGMyNWVhMmMxOWIzZjVhYmM2OGRjYTM3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJM
YXllci5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNs
dWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgogI2luY2x1ZGUgIlJlZ2lvbi5oIgor
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCkBAIC0xNjEsNyArMTYyLDIzIEBA
IHZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjpzb3J0QnlaT3JkZXIoVmVjdG9yPFRleHR1cmVNYXBw
ZXJMYXllciogPiYgYXJyYXkpCiAKIHZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjpwYWludFNlbGZB
bmRDaGlsZHJlbihjb25zdCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zJiBvcHRpb25zKQogewot
ICAgIHBhaW50U2VsZihvcHRpb25zKTsKKyAgICBpZiAob3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5h
Y2NlbGVyYXRpb25Nb2RlKCkgPT0gVGV4dHVyZU1hcHBlcjo6U29mdHdhcmVNb2RlKSB7CisgICAg
ICAgIFJlZ2lvbiBvdmVybGFwUmVnaW9uOworICAgICAgICBSZWdpb24gbm9uT3ZlcmxhcFJlZ2lv
bjsKKyAgICAgICAgY29tcHV0ZU92ZXJsYXBSZWdpb25zKG92ZXJsYXBSZWdpb24sIG5vbk92ZXJs
YXBSZWdpb24sIFJlc29sdmVTZWxmT3ZlcmxhcEFsd2F5cyk7CisKKyAgICAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggdDsKKyAgICAgICAgdC50cmFuc2xhdGUob3B0aW9ucy5vZmZzZXQud2lkdGgo
KSwgb3B0aW9ucy5vZmZzZXQuaGVpZ2h0KCkpOworCisgICAgICAgIFZlY3RvcjxJbnRSZWN0PiBu
b25PdmVybGFwUmVjdHMobm9uT3ZlcmxhcFJlZ2lvbi5yZWN0cygpKTsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBub25PdmVybGFwUmVjdHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAg
ICBub25PdmVybGFwUmVjdHNbaV0gPSB0Lm1hcFJlY3Qobm9uT3ZlcmxhcFJlY3RzW2ldKTsKKwor
ICAgICAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIqPihvcHRpb25zLnRl
eHR1cmVNYXBwZXIpLT5iZWdpbkNsaXAoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgbm9uT3Zlcmxh
cFJlY3RzKTsKKyAgICAgICAgcGFpbnRTZWxmKG9wdGlvbnMpOworICAgICAgICBvcHRpb25zLnRl
eHR1cmVNYXBwZXItPmVuZENsaXAoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcGFpbnRTZWxmKG9w
dGlvbnMpOwogCiAgICAgaWYgKG1fY2hpbGRyZW4uaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CkBAIC00MTgsNyArNDM1LDE3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjpwYWludFdpdGhJ
bnRlcm1lZGlhdGVTdXJmYWNlKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wCiAgICAgICAgIG1h
aW5TdXJmYWNlID0gcmVwbGljYVN1cmZhY2U7CiAgICAgfQogCi0gICAgY29tbWl0U3VyZmFjZShv
cHRpb25zLCBtYWluU3VyZmFjZSwgcmVjdCwgb3B0aW9ucy5vcGFjaXR5KTsKKyAgICBpZiAob3B0
aW9ucy50ZXh0dXJlTWFwcGVyLT5hY2NlbGVyYXRpb25Nb2RlKCkgPT0gVGV4dHVyZU1hcHBlcjo6
U29mdHdhcmVNb2RlICYmIG9wdGlvbnMub3BhY2l0eSA8IDEpIHsKKyAgICAgICAgUmVmUHRyPEJp
dG1hcFRleHR1cmU+IHN1cmZhY2UgPSBvcHRpb25zLnRleHR1cmVNYXBwZXItPmFjcXVpcmVUZXh0
dXJlRnJvbVBvb2wocmVjdC5zaXplKCkpOworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
OworICAgICAgICB0LnRyYW5zbGF0ZSgtcmVjdC54KCksIC1yZWN0LnkoKSk7CisgICAgICAgIG9w
dGlvbnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2Uoc3VyZmFjZS5nZXQoKSk7CisgICAgICAg
IG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1NvbGlkQ29sb3IocmVjdCwgdCwgQ29sb3I6OmN5
YW4pOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCptYWluU3Vy
ZmFjZS5nZXQoKSwgcmVjdCwgdCwgb3B0aW9ucy5vcGFjaXR5KTsKKyAgICAgICAgbWFpblN1cmZh
Y2UgPSBzdXJmYWNlOworICAgICAgICBjb21taXRTdXJmYWNlKG9wdGlvbnMsIG1haW5TdXJmYWNl
LCByZWN0LCAxLjApOworICAgIH0gZWxzZQorICAgICAgICBjb21taXRTdXJmYWNlKG9wdGlvbnMs
IG1haW5TdXJmYWNlLCByZWN0LCBvcHRpb25zLm9wYWNpdHkpOwogfQogCiB2b2lkIFRleHR1cmVN
YXBwZXJMYXllcjo6cGFpbnRSZWN1cnNpdmUoY29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9u
cyYgb3B0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyVGlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclRpbGUuY3BwCmluZGV4IGU2ZjNmZTgwZWU2ODIy
YmMwYTQ1MDZmNzA3ZjUxOTc4ZTQ2NTZhYTIuLjYzODhkMTBhNDdiOGFhOTA1N2M1YzIxY2EwM2Fi
ZWE1ZjA3NzQ5MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyVGlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJUaWxlLmNwcApAQCAtMjEsNiArMjEsNyBA
QAogI2lmIFVTRShURVhUVVJFX01BUFBFUikKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyVGlsZS5o
IgogCisjaW5jbHVkZSAiQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW1h
Z2UuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9z
aXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmNwcAppbmRleCA2YmU1MzRjNjEwZjE1NDk5M2M5MTYwNmY1ZWU4N2RjZDBjMTIzZWYyLi4yYjVj
NGIzMTAwYjcwYjZjMTk3ZmE3ZTc5ZDEzNTFmZWRkNzE0ZDFlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtMTMzOCw3ICsx
MzM4LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVDb21wb3NpdGluZ1Jl
cXVpcmVtZW50cyhSZW5kZXJMYXllciogYW5jZXN0b3IKICAgICBSZW5kZXJMYXllcjo6SW5kaXJl
Y3RDb21wb3NpdGluZ1JlYXNvbiBjb21wb3NpdGluZ1JlYXNvbiA9IGNvbXBvc2l0aW5nU3RhdGUu
c3VidHJlZUlzQ29tcG9zaXRpbmcgPyBSZW5kZXJMYXllcjo6SW5kaXJlY3RDb21wb3NpdGluZ1Jl
YXNvbjo6U3RhY2tpbmcgOiBSZW5kZXJMYXllcjo6SW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbjo6
Tm9uZTsKIAogICAgIC8vIElmIHdlIGtub3cgZm9yIHN1cmUgdGhlIGxheWVyIGlzIGdvaW5nIHRv
IGJlIGNvbXBvc2l0ZWQsIGRvbid0IGJvdGhlciBsb29raW5nIGl0IHVwIGluIHRoZSBvdmVybGFw
IG1hcAotICAgIGlmICghd2lsbEJlQ29tcG9zaXRlZCAmJiAhb3ZlcmxhcE1hcC5pc0VtcHR5KCkg
JiYgY29tcG9zaXRpbmdTdGF0ZS50ZXN0aW5nT3ZlcmxhcCkgeworICAgIGlmICghd2lsbEJlQ29t
cG9zaXRlZCAmJiAhb3ZlcmxhcE1hcC5pc0VtcHR5KCkgJiYgY29tcG9zaXRpbmdTdGF0ZS50ZXN0
aW5nT3ZlcmxhcCAmJiBjYW5CZUNvbXBvc2l0ZWQobGF5ZXIpKSB7CiAgICAgICAgIGNvbXB1dGVF
eHRlbnQob3ZlcmxhcE1hcCwgbGF5ZXIsIGxheWVyRXh0ZW50KTsKICAgICAgICAgLy8gSWYgd2Un
cmUgdGVzdGluZyBmb3Igb3ZlcmxhcCwgd2Ugb25seSBuZWVkIHRvIGNvbXBvc2l0ZSBpZiB3ZSBv
dmVybGFwIHNvbWV0aGluZyB0aGF0IGlzIGFscmVhZHkgY29tcG9zaXRlZC4KICAgICAgICAgY29t
cG9zaXRpbmdSZWFzb24gPSBvdmVybGFwTWFwLm92ZXJsYXBzTGF5ZXJzKGxheWVyRXh0ZW50LmJv
dW5kcykgPyBSZW5kZXJMYXllcjo6SW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbjo6T3ZlcmxhcCA6
IFJlbmRlckxheWVyOjpJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOjpOb25lOwpAQCAtMjIwMCw2
ICsyMjAwLDE0IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0
aW5nTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBSCiAKIGJvb2wgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpjYW5CZUNvbXBvc2l0ZWQoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKSBjb25z
dAogeworI2lmICFFTkFCTEUoT1BFTkdMKQorICAgIGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3Rv
ck9yU2VsZiA9ICZsYXllcjsKKyAgICBkbyB7CisgICAgICAgIGlmIChhbmNlc3Rvck9yU2VsZi0+
aXNUcmFuc3BhcmVudCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gd2hpbGUg
KChhbmNlc3Rvck9yU2VsZiA9IGFuY2VzdG9yT3JTZWxmLT5wYXJlbnQoKSkpOworI2VuZGlmCisK
ICAgICBpZiAobV9oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nICYmIGxheWVyLmlzU2VsZlBhaW50
aW5nTGF5ZXIoKSkgewogICAgICAgICBpZiAoIWxheWVyLmlzSW5zaWRlRmxvd1RocmVhZCgpKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lLmNwcAppbmRleCBhZmQxM2YyOTRmZTRjYTc0ZDRjYzE2MDkxMGFhZjBhNTQ5ZWFhNGMw
Li4wYTU5YmRjYWVkMWIyMDE2ZDA0M2E1M2JmNDZkOWUyM2RhY2E2ZmJhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBo
aWNzU2NlbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAKQEAgLTI0LDggKzI0LDExIEBACiAjaW5j
bHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgiCiAKICNpbmNsdWRlICJDb29yZGluYXRl
ZEJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHRDYWlyby5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvVGV4dHVyZU1hcHBlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlckdMLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1RleHR1cmVNYXBwZXJMYXllci5oPgogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+
CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTY4LDYgKzcxLDcgQEAgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjp+Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCkKIHsKIH0KIAorI2lm
IEVOQUJMRShPUEVOR0wpCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cGFpbnRUb0N1
cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQg
b3BhY2l0eSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCwgY29uc3QgQ29sb3ImIGJhY2tncm91
bmRDb2xvciwgYm9vbCBkcmF3c0JhY2tncm91bmQsIGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRlbnRQ
b3NpdGlvbiwgVGV4dHVyZU1hcHBlcjo6UGFpbnRGbGFncyBQYWludEZsYWdzKQogewogICAgIGlm
ICghbV90ZXh0dXJlTWFwcGVyKSB7CkBAIC0xMTUsNiArMTE5LDcgQEAgdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cmkKICAgICAgICAgfSk7CiAgICAgfQogfQorI2VuZGlmIC8vIEVOQUJMRShPUEVOR0wp
CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpwYWludFRvR3JhcGhpY3NDb250ZXh0
KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IENvbG9yJiBi
YWNrZ3JvdW5kQ29sb3IsIGJvb2wgZHJhd3NCYWNrZ3JvdW5kKQogewpAQCAtMTI2LDE4ICsxMzEs
MjYgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnBhaW50VG9HcmFwaGljc0NvbnRl
eHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHAKICAgICBpZiAoIWxheWVyKQogICAgICAgICBy
ZXR1cm47CiAKKyAgICBsYXllci0+YXBwbHlBbmltYXRpb25zUmVjdXJzaXZlbHkoKTsKKwogICAg
IEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQocGxhdGZvcm1Db250ZXh0KTsKICAgICBt
X3RleHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dCgmZ3JhcGhpY3NDb250ZXh0KTsKICAg
ICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoKTsKIAogICAgIEludFJlY3QgY2xpcFJl
Y3QgPSBncmFwaGljc0NvbnRleHQuY2xpcEJvdW5kcygpOwotICAgIGlmIChkcmF3c0JhY2tncm91
bmQpCi0gICAgICAgIG1fdGV4dHVyZU1hcHBlci0+ZHJhd1NvbGlkQ29sb3IoY2xpcFJlY3QsIFRy
YW5zZm9ybWF0aW9uTWF0cml4KCksIGJhY2tncm91bmRDb2xvcik7Ci0gICAgZWxzZQotICAgICAg
ICBtX3RleHR1cmVNYXBwZXItPmRyYXdTb2xpZENvbG9yKGNsaXBSZWN0LCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCgpLCBtX3ZpZXdCYWNrZ3JvdW5kQ29sb3IpOworCisgICAgbV90ZXh0dXJlTWFwcGVy
LT5iZWdpbkNsaXAoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgY2xpcFJlY3QpOworCisgICAgaWYg
KG1fdGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9kZSgpICE9IFdlYkNvcmU6OlRleHR1cmVN
YXBwZXI6OlNvZnR3YXJlTW9kZSkgeworICAgICAgICBpZiAoZHJhd3NCYWNrZ3JvdW5kKQorICAg
ICAgICAgICAgbV90ZXh0dXJlTWFwcGVyLT5kcmF3U29saWRDb2xvcihjbGlwUmVjdCwgVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSwgYmFja2dyb3VuZENvbG9yKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV90ZXh0dXJlTWFwcGVyLT5kcmF3U29saWRDb2xvcihjbGlwUmVjdCwgVHJhbnNmb3Jt
YXRpb25NYXRyaXgoKSwgbV92aWV3QmFja2dyb3VuZENvbG9yKTsKKyAgICB9CiAKICAgICBsYXll
ci0+cGFpbnQoKTsKICAgICBtX2Zwc0NvdW50ZXIudXBkYXRlRlBTQW5kRGlzcGxheShtX3RleHR1
cmVNYXBwZXIuZ2V0KCksIGNsaXBSZWN0LmxvY2F0aW9uKCkpOworICAgIG1fdGV4dHVyZU1hcHBl
ci0+ZW5kQ2xpcCgpOwogICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKICAgICBt
X3RleHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dCgwKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgKaW5kZXggZDE1MjIwZGEzODE0ZjA5ZWQ4YmRhN2MzOGM0
ZGY0OWQ1N2Q0ZTA2Ny4uNDJiM2JlOTE5ZjUyZTA4YmNmNjFhYzRjOTdmNTgzMmI0ZTYwN2FjMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgKQEAgLTU3LDcgKzU3LDkg
QEAgY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPENvb3JkaW5hdGVkR3JhcGhpY3MKIHB1YmxpYzoKICAgICBleHBsaWNpdCBDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lQ2xpZW50Kik7CiAgICAg
dmlydHVhbCB+Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCk7CisjaWYgRU5BQkxFKE9QRU5HTCkK
ICAgICB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9y
bWF0aW9uTWF0cml4JiwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdl
YkNvcmU6OkNvbG9yJiBiYWNrZ3JvdW5kQ29sb3IsIGJvb2wgZHJhd3NCYWNrZ3JvdW5kLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6UGFpbnRGbGFn
cyA9IDApOworI2VuZGlmCiAgICAgdm9pZCBwYWludFRvR3JhcGhpY3NDb250ZXh0KFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImIGJhY2tncm91bmRDb2xvciwg
Ym9vbCBkcmF3c0JhY2tncm91bmQpOwogICAgIHZvaWQgZGV0YWNoKCk7CiAgICAgdm9pZCBhcHBl
bmRVcGRhdGUoc3RkOjpmdW5jdGlvbjx2b2lkKCk+KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRT
YWZlQ29vcmRpbmF0ZWRTdXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGlu
YXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRTYWZlQ29vcmRpbmF0ZWRTdXJm
YWNlLmNwcAppbmRleCBjMmE5NmNhM2QyYWZkMjk5ZDY1NWJjNWU4NDkyMDQxOTFhYWIxNDU2Li41
ZjFmNzFiNzA2MDZmNWJlYmIwNjJiZWI0OTRlZGMyYjY2NmU2NTY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3Iv
VGhyZWFkU2FmZUNvb3JkaW5hdGVkU3VyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZFNhZmVDb29y
ZGluYXRlZFN1cmZhY2UuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQogI2luY2x1ZGUgIlRocmVhZFNhZmVDb29yZGluYXRlZFN1cmZhY2UuaCIKIAot
I2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlckdMLmg+CisjaW5jbHVkZSAiQml0bWFwVGV4
dHVyZS5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRH
cmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3NpdG9yLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9U
aHJlYWRlZENvbXBvc2l0b3IuY3BwCmluZGV4IGEzNzI0OGFkNGM0YmJmYzQyOWU3ZGUwMWExNjg5
OTgwMWZkNTFkOWEuLjU5MzE2NTg3OGNlZGU4MTVmM2Y3NzNkM2QwYjgxY2MzM2U1NjQ3NzkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVh
ZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENv
bXBvc2l0b3IuY3BwCkBAIC0zMywxMSArMzMsMjAgQEAKICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5o
PgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAorI2lmIEVOQUJMRShPUEVOR0wpCiAj
aWYgVVNFKE9QRU5HTF9FU18yKQogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogI2Vsc2UKICNpbmNs
dWRlIDxHTC9nbC5oPgogI2VuZGlmCisjZWxzZQorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENh
aXJvLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5WDExLmgiCisjaW5jbHVkZSAiWFVuaXF1
ZVB0ci5oIgorI2luY2x1ZGUgIlhVbmlxdWVSZXNvdXJjZS5oIgorI2luY2x1ZGUgPGNhaXJvLXhs
aWIuaD4KKyNpbmNsdWRlIDxjYWlyby5oPgorI2VuZGlmIC8vIEVOQUJMRShPUEVOR0wpCiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0yMDQsNiArMjEzLDcgQEAgdm9pZCBUaHJlYWRl
ZENvbXBvc2l0b3I6OmNvbW1pdFNjcm9sbE9mZnNldCh1aW50MzJfdCBsYXllcklELCBjb25zdCBJ
bnRTaXplJiBvZmYKICAgICBtX2NsaWVudC0+Y29tbWl0U2Nyb2xsT2Zmc2V0KGxheWVySUQsIG9m
ZnNldCk7CiB9CiAKKyNpZiBFTkFCTEUoT1BFTkdMKQogYm9vbCBUaHJlYWRlZENvbXBvc2l0b3I6
OmVuc3VyZUdMQ29udGV4dCgpCiB7CiAgICAgaWYgKCFnbENvbnRleHQoKSkKQEAgLTIzMyw2ICsy
NDMsNyBAQCBHTENvbnRleHQqIFRocmVhZGVkQ29tcG9zaXRvcjo6Z2xDb250ZXh0KCkKICAgICBt
X2NvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZUNvbnRleHRGb3JXaW5kb3cocmVpbnRlcnByZXRf
Y2FzdDxHTE5hdGl2ZVdpbmRvd1R5cGU+KG1fbmF0aXZlU3VyZmFjZUhhbmRsZSksIEdMQ29udGV4
dDo6c2hhcmluZ0NvbnRleHQoKSk7CiAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKIH0KKyNl
bmRpZgogCiB2b2lkIFRocmVhZGVkQ29tcG9zaXRvcjo6c2NoZWR1bGVEaXNwbGF5SW1tZWRpYXRl
bHkoKQogewpAQCAtMjU1LDYgKzI2Niw3IEBAIHZvaWQgVGhyZWFkZWRDb21wb3NpdG9yOjpyZW5k
ZXJMYXllclRyZWUoKQogICAgIGlmICghbV9zY2VuZSkKICAgICAgICAgcmV0dXJuOwogCisjaWYg
RU5BQkxFKE9QRU5HTCkKICAgICBpZiAoIWVuc3VyZUdMQ29udGV4dCgpKQogICAgICAgICByZXR1
cm47CiAKQEAgLTI2OCw2ICsyODAsMjcgQEAgdm9pZCBUaHJlYWRlZENvbXBvc2l0b3I6OnJlbmRl
ckxheWVyVHJlZSgpCiAgICAgbV9zY2VuZS0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQodmlld3Bv
cnRUcmFuc2Zvcm0sIDEsIGNsaXBSZWN0LCBDb2xvcjo6d2hpdGUsIGZhbHNlLCBzY3JvbGxQb3N0
aW9uKTsKIAogICAgIGdsQ29udGV4dCgpLT5zd2FwQnVmZmVycygpOworI2Vsc2UKKyAgICBEaXNw
bGF5KiBkaXNwbGF5ID0gZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihQbGF0Zm9ybURpc3Bs
YXk6OnNoYXJlZERpc3BsYXkoKSkubmF0aXZlKCk7CisgICAgaWYgKCFtX25hdGl2ZVN1cmZhY2VI
YW5kbGUpCisgICAgICAgIHJldHVybjsKKyAgICBYV2luZG93QXR0cmlidXRlcyBhdHRyaWJ1dGVz
OworICAgIGlmICghWEdldFdpbmRvd0F0dHJpYnV0ZXMoZGlzcGxheSwgbV9uYXRpdmVTdXJmYWNl
SGFuZGxlLCAmYXR0cmlidXRlcykpCisgICAgICAgIHJldHVybjsKKworICAgIGNhaXJvX3N1cmZh
Y2VfdCogZGVzdCA9IGNhaXJvX3hsaWJfc3VyZmFjZV9jcmVhdGUoZGlzcGxheSwgbV9uYXRpdmVT
dXJmYWNlSGFuZGxlLCBhdHRyaWJ1dGVzLnZpc3VhbCwgYXR0cmlidXRlcy53aWR0aCwgYXR0cmli
dXRlcy5oZWlnaHQpOworCisgICAgZmxvYXQgc2NhbGVYID0gYXR0cmlidXRlcy53aWR0aCAvIHZp
ZXdwb3J0Q29udHJvbGxlcigpLT52aXNpYmxlQ29udGVudHNSZWN0KCkud2lkdGgoKTsKKyAgICBm
bG9hdCBzY2FsZVkgPSBhdHRyaWJ1dGVzLmhlaWdodCAvIHZpZXdwb3J0Q29udHJvbGxlcigpLT52
aXNpYmxlQ29udGVudHNSZWN0KCkuaGVpZ2h0KCk7CisgICAgY2Fpcm9fc3VyZmFjZV9zZXRfZGV2
aWNlX3NjYWxlKGRlc3QsIHNjYWxlWCwgc2NhbGVZKTsKKworICAgIGNhaXJvX3QqIGNyID0gY2Fp
cm9fY3JlYXRlKGRlc3QpOworICAgIFBsYXRmb3JtQ29udGV4dENhaXJvIGN0eChjcik7CisgICAg
bV9zY2VuZS0+cGFpbnRUb0dyYXBoaWNzQ29udGV4dCgmY3R4LCBDb2xvcjo6d2hpdGUsIGZhbHNl
KTsKKworICAgIGNhaXJvX2Rlc3Ryb3koY3IpOworICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShk
ZXN0KTsKKyNlbmRpZiAvLyBFTkFCTEUoT1BFTkdMKQogfQogCiB2b2lkIFRocmVhZGVkQ29tcG9z
aXRvcjo6dXBkYXRlU2NlbmVTdGF0ZShjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmIHN0
YXRlKQpAQCAtMzE4LDEyICszNTEsMTYgQEAgdm9pZCBUaHJlYWRlZENvbXBvc2l0b3I6OnJ1bkNv
bXBvc2l0aW5nVGhyZWFkKCkKICAgICBtX2NvbXBvc2l0aW5nUnVuTG9vcC0+cnVuTG9vcCgpLnJ1
bigpOwogCiAgICAgbV9jb21wb3NpdGluZ1J1bkxvb3AtPnN0b3BVcGRhdGVUaW1lcigpOworI2lm
IEVOQUJMRShPUEVOR0wpCiAgICAgbV9zY2VuZS0+cHVyZ2VHTFJlc291cmNlcygpOworI2VuZGlm
CiAKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fdGVybWluYXRlUnVuTG9vcENv
bmRpdGlvbk11dGV4KTsKICAgICAgICAgbV9jb21wb3NpdGluZ1J1bkxvb3AgPSBudWxscHRyOwor
I2lmIEVOQUJMRShPUEVOR0wpCiAgICAgICAgIG1fY29udGV4dCA9IG51bGxwdHI7CisjZW5kaWYK
ICAgICAgICAgbV90ZXJtaW5hdGVSdW5Mb29wQ29uZGl0aW9uLm5vdGlmeU9uZSgpOwogICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
dGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5oIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29t
cG9zaXRvci5oCmluZGV4IDBlNjgzZGMwMWM2YTliMGNjNTQ4MGY1MDczNDRlMzhkZTkyZTU4Nzku
LjE0ZjQ1N2MyMzVmYTQ3ZWI1NWMyYjY3NjA0ZjNiMTQ4YjAyYjcxMTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRv
ci9UaHJlYWRlZENvbXBvc2l0b3IuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRp
bmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3NpdG9yLmgKQEAg
LTMwLDcgKzMwLDkgQEAKIAogI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oIgog
I2luY2x1ZGUgIlNpbXBsZVZpZXdwb3J0Q29udHJvbGxlci5oIgorI2lmIEVOQUJMRShPUEVOR0wp
CiAjaW5jbHVkZSA8V2ViQ29yZS9HTENvbnRleHQuaD4KKyNlbmRpZgogI2luY2x1ZGUgPFdlYkNv
cmUvSW50U2l6ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVHJhbnNmb3JtYXRpb25NYXRyaXguaD4K
ICNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CkBAIC04OSw4ICs5MSwxMCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgc2NoZWR1bGVEaXNwbGF5SW1tZWRpYXRlbHkoKTsKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ2hhbmdlVmlzaWJsZVJlY3QoKSBvdmVycmlkZTsKIAorI2lmIEVOQUJMRShPUEVOR0wpCiAg
ICAgYm9vbCBlbnN1cmVHTENvbnRleHQoKTsKICAgICBXZWJDb3JlOjpHTENvbnRleHQqIGdsQ29u
dGV4dCgpOworI2VuZGlmCiAgICAgU2ltcGxlVmlld3BvcnRDb250cm9sbGVyKiB2aWV3cG9ydENv
bnRyb2xsZXIoKSB7IHJldHVybiBtX3ZpZXdwb3J0Q29udHJvbGxlci5nZXQoKTsgfQogCiAgICAg
dm9pZCBjYWxsT25Db21wb3NpdGluZ1RocmVhZChzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4pOwpAQCAt
MTAzLDcgKzEwNyw5IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZT4gbV9zY2VuZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2ltcGxlVmlld3BvcnRDb250cm9s
bGVyPiBtX3ZpZXdwb3J0Q29udHJvbGxlcjsKIAorI2lmIEVOQUJMRShPUEVOR0wpCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OkdMQ29udGV4dD4gbV9jb250ZXh0OworI2VuZGlmCiAKICAg
ICBXZWJDb3JlOjpJbnRTaXplIG1fdmlld3BvcnRTaXplOwogICAgIHVpbnQ2NF90IG1fbmF0aXZl
U3VyZmFjZUhhbmRsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsv
V2ViUHJlZmVyZW5jZXNHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQ
cmVmZXJlbmNlc0d0ay5jcHAKaW5kZXggYWE3NzAxODcxZDgyNzM0NzlhNDI2MWI5ZDkxNmM0NDJj
Y2YzMzVhMy4uMjc2MWQzNTNmYjQyNGVmNmI5YjViNzUzNTFjOTE0YzZiMTQwYjdlYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQcmVmZXJlbmNlc0d0ay5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQcmVmZXJlbmNlc0d0ay5jcHAK
QEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBXZWJQcmVmZXJlbmNlczo6cGxhdGZvcm1Jbml0aWFsaXpl
U3RvcmUoKQogICAgICAgICBzZXRQbHVnaW5zRW5hYmxlZChmYWxzZSk7CiAgICAgfQogI2VuZGlm
Ci0jaWYgIUVOQUJMRShPUEVOX0dMKQorI2lmICFFTkFCTEUoT1BFTl9HTCkgJiYgIVVTRShURVhU
VVJFX01BUFBFUikKICAgICBzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZChmYWxzZSk7
CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4IDcwZTJiMWUwN2FjYjc5ZTI5ZjMw
ZDc0NDUxMjVjNmEzM2JhMTA5NGQuLmU5Mjc5MGZmY2Q5NmEzYmMyMTYwY2ZmZGMxNGFmZWM1Njcz
MzgyMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMjIwLDcgKzIyMCw5IEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCBDb21wb3NpdGluZ1RyaWdnZXJGbGFncyBhbGxvd2VkQ29tcG9zaXRpbmdU
cmlnZ2VycygpIGNvbnN0IG92ZXJyaWRlCiAgICAgewogICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Q29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3M+KAorI2lmIEVOQUJMRShPUEVOR0wpCiAgICAgICAg
ICAgICBUaHJlZURUcmFuc2Zvcm1UcmlnZ2VyIHwKKyNlbmRpZgogICAgICAgICAgICAgVmlkZW9U
cmlnZ2VyIHwKICAgICAgICAgICAgIFBsdWdpblRyaWdnZXJ8CiAgICAgICAgICAgICBDYW52YXNU
cmlnZ2VyIHwKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlIGIvU291
cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKaW5kZXggOTJlZjRiOTlkM2RlYWE2MjMwMTFkYjQy
YTJjYzAwMmY3YWVhNTc0MC4uZmZlMzU2NDVhNThmODk3MmFlYzhhMjE0OTg1MTM5MWE2NmFhMTk3
YiAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKKysrIGIvU291cmNl
L2NtYWtlL09wdGlvbnNHVEsuY21ha2UKQEAgLTg4LDcgKzg4LDYgQEAgV0VCS0lUX09QVElPTl9E
RVBFTkQoRU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUyBFTkFCTEVfT1BFTkdMKQogV0VCS0lU
X09QVElPTl9ERVBFTkQoRU5BQkxFX0dMRVMyIEVOQUJMRV9PUEVOR0wpCiBXRUJLSVRfT1BUSU9O
X0RFUEVORChFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQSSBFTkFCTEVfWDExX1RBUkdFVCkKIFdF
QktJVF9PUFRJT05fREVQRU5EKEVOQUJMRV9QTFVHSU5fUFJPQ0VTU19HVEsyIEVOQUJMRV9YMTFf
VEFSR0VUKQotV0VCS0lUX09QVElPTl9ERVBFTkQoRU5BQkxFX1RIUkVBREVEX0NPTVBPU0lUT1Ig
RU5BQkxFX09QRU5HTCkKIFdFQktJVF9PUFRJT05fREVQRU5EKEVOQUJMRV9XRUJHTCBFTkFCTEVf
T1BFTkdMKQogV0VCS0lUX09QVElPTl9ERVBFTkQoVVNFX1JFRElSRUNURURfWENPTVBPU0lURV9X
SU5ET1cgRU5BQkxFX09QRU5HTCkKIFdFQktJVF9PUFRJT05fREVQRU5EKFVTRV9SRURJUkVDVEVE
X1hDT01QT1NJVEVfV0lORE9XIEVOQUJMRV9YMTFfVEFSR0VUKQpAQCAtMzE3LDExICszMTYsMTEg
QEAgaWYgKEVOQUJMRV9PUEVOR0wpCiAgICAgaWYgKEVOQUJMRV9YMTFfVEFSR0VUIEFORCBHTFhf
Rk9VTkQgQU5EIFVTRV9PUEVOR0wpCiAgICAgICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVT
RV9HTFggVFJVRSkKICAgICBlbmRpZiAoKQotCi0gICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQo
VVNFX0NPT1JESU5BVEVEX0dSQVBISUNTICR7RU5BQkxFX1RIUkVBREVEX0NPTVBPU0lUT1J9KQot
ICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9DT09SRElOQVRFRF9HUkFQSElDU19USFJF
QURFRCAke0VOQUJMRV9USFJFQURFRF9DT01QT1NJVE9SfSkKIGVuZGlmICgpCiAKK1NFVF9BTkRf
RVhQT1NFX1RPX0JVSUxEKFVTRV9DT09SRElOQVRFRF9HUkFQSElDUyAke0VOQUJMRV9USFJFQURF
RF9DT01QT1NJVE9SfSkKK1NFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9DT09SRElOQVRFRF9H
UkFQSElDU19USFJFQURFRCAke0VOQUJMRV9USFJFQURFRF9DT01QT1NJVE9SfSkKKwogaWYgKEVO
QUJMRV9QTFVHSU5fUFJPQ0VTU19HVEsyKQogICAgIGZpbmRfcGFja2FnZShHVEsyIDIuMjQuMTAg
UkVRVUlSRUQpCiAgICAgZmluZF9wYWNrYWdlKEdESzIgMi4yNC4xMCBSRVFVSVJFRCkKZGlmZiAt
LWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAwZDU5ZjgyOWI4ZGMyZjExMTFhODRi
ZGRkZWNhYTVjMGYwNjUwZjU0Li4xZmNiM2IwMjYwM2ExMGRlYjMyN2NhZDc1MWEwMWE0OTUzYThi
MGNiIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIg
QEAKKzIwMTUtMDktMzAgIEVtYW51ZWxlIEFpbmEgIDxlbWFudWVsZS5haW5hQGNvbGxhYm9yYS5j
b20+CisKKyAgICAgICAgW0dUS10gU29mdHdhcmUtb25seSBiYXNpYyBjb21wb3NpdGluZworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3MjU4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2UvY21h
a2UvT3B0aW9uc0dUSy5jbWFrZToKKwogMjAxNS0wOS0xNyAgRW1hbnVlbGUgQWluYSAgPGVtYW51
ZWxlLmFpbmFAY29sbGFib3JhLmNvbT4KIAogICAgICAgICBGaXggRU5BQkxFX09QRU5HTD1PRkYg
YnVpbGRzCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262187</attachid>
            <date>2015-09-30 13:27:56 -0700</date>
            <delta_ts>2015-09-30 13:27:56 -0700</delta_ts>
            <desc>Reintroduce TextureMapperImageBuffer</desc>
            <filename>0001-Reintroduce-TextureMapperImageBuffer.patch</filename>
            <type>text/plain</type>
            <size>36783</size>
            <attacher name="Emanuele Aina">emanuele.aina</attacher>
            
              <data encoding="base64">RnJvbSBiMTk2MDYzYTg4ZmU0MzkxYjk4NzUxOTU1ODFmZDFhYTAwN2JiY2RhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBFbWFudWVsZSBBaW5hIDxlbWFudWVsZS5haW5hQGNvbGxhYm9y
YS5jb20+CkRhdGU6IE1vbiwgMjcgSnVsIDIwMTUgMTY6MjM6MjEgKzAyMDAKU3ViamVjdDogW1BB
VENIIDEvMl0gUmVpbnRyb2R1Y2UgVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyCgotLS0KIFNvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0ICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDU2ICsr
KysrKysrKwogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgICAgICAgICAgICAgICAg
ICAgfCAgIDEgKwogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgICAgICAgICAgICAg
ICAgICAgfCAgIDIgKwogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZSAgICAg
ICAgICAgICAgfCAgIDIgKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZS5jcHAgfCAgMzkgKysrKysrKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm8uY3BwICAgfCAgIDUgKwogLi4uL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlLmNwcCAgfCAgIDMgKwogLi4uL2dyYXBoaWNzL3RleG1hcC9CaXRt
YXBUZXh0dXJlSW1hZ2VCdWZmZXIuY3BwICAgfCAgNzQgKysrKysrKysrKysrCiAuLi4vZ3JhcGhp
Y3MvdGV4bWFwL0JpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlci5oICAgICB8ICA1OSArKysrKysrKysr
CiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVQb29sLmNwcCB8ICAx
MCArLQogLi4uL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAg
fCAgIDMgKy0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAg
ICAgIHwgICA4ICstCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIu
aCAgICAgICB8ICAgNyArLQogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyR0wuY3BwICAgfCAgIDMgKy0KIC4uLi9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlcklt
YWdlQnVmZmVyLmNwcCAgIHwgMTI1ICsrKysrKysrKysrKysrKysrKysrKwogLi4uL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaCAgICAgfCAgNTkgKysrKysrKysrKwog
Li4uL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcCAgfCAgIDQg
KwogLi4uL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgICAgICAgfCAg
IDkgKy0KIC4uLi90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgg
IHwgICAxICsKIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgIDE1ICsrKwogLi4uL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAgICAgICAgICAg
ICAgICAgICAgfCAgIDIgKy0KIC4uLi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL0xheWVyVHJlZUhv
c3RHdGsuY3BwICAgIHwgICAyICstCiAyMyBmaWxlcyBjaGFuZ2VkLCA0NzcgaW5zZXJ0aW9ucygr
KSwgMTMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlci5jcHAKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0
bWFwVGV4dHVyZUltYWdlQnVmZmVyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMTFm
MmYwMDdjYjBmLi5lMGY1M2Q2MTk1OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMjU1LDYg
KzIyNTUsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJGUFNDb3VudGVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmUuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJUaWxlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGUxZjVj
NTBlNjg1MC4uN2VkYWMzYjJiMjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkgQEAKKzIwMTUt
MDktMTEgIEVtYW51ZWxlIEFpbmEgIDxlbWFudWVsZS5haW5hQGNvbGxhYm9yYS5jb20+CisKKyAg
ICAgICAgUmVpbnRyb2R1Y2UgVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyCisgICAgICAgIE5lZWQg
dGhlIGJ1ZyBVUkwgKE9PUFMhKS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2lu
Q2Fpcm8uY21ha2U6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJE
YXRhOjpwYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cGFpbnRUb1RleHR1cmVN
YXBwZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJl
SW1hZ2VCdWZmZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVJ
bWFnZUJ1ZmZlcjo6dXBkYXRlQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4
dHVyZUltYWdlQnVmZmVyOjpkaWRSZXNldCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0JpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBUZXh0dXJlSW1hZ2VCdWZmZXI6OmlzVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
VGV4dHVyZUltYWdlQnVmZmVyOjpncmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwVGV4dHVyZUltYWdlQnVmZmVyOjppbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBUZXh0dXJlSW1hZ2VCdWZmZXI6OkJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVQb29sLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVQb29sOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldEZpbHRl
cnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpUZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlcjo6YWNjZWxlcmF0aW9uTW9kZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyR0w6OlRleHR1cmVNYXBwZXJHTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckltYWdlQnVmZmVyOjpUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckltYWdlQnVmZmVyOjptYXhUZXh0dXJl
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXI6OmJlZ2lu
Q2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXI6OmRyYXdU
ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlcjo6ZHJh
d1NvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckltYWdlQnVmZmVy
OjpkcmF3Qm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZl
cjo6ZHJhd051bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlSW1hZ2VCdWZm
ZXI6OmFwcGx5RmlsdGVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJJbWFnZUJ1ZmZlcjo6Y3VycmVudENvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNvbXBvc2l0aW5nQ29v
cmRpbmF0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzZXRTaG91bGRTdXBwb3J0Q29udGVudHNUaWxpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6c3VwcG9ydHNDb250ZW50c1RpbGluZyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllci5oOgorCiAyMDE1LTAxLTA4ICBHd2FuZyBZb29uIEh3YW5nICA8eW9vbkBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFtDb29yZGluYXRlZEdyYXBoaWNzXSBOb24tb3ZlcmxheSBz
Y3JvbGxiYXIgaXMgbm90IHJlbmRlcmVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDlj
YzExNTdiNDJmMC4uMDhkOTAwY2JhNmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAt
MjA2LDYgKzIwNiw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0JpdG1hcFRleHR1cmVHTC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9CaXRtYXBUZXh0dXJlUG9vbC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggNWI2
ZTFlMmU4NTM5Li41YjI4NGViZGY1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC00
MTUsOSArNDE1LDExIEBAIGlmIChVU0VfVEVYVFVSRV9NQVBQRVIpCiAgICAgbGlzdChBUFBFTkQg
V2ViQ29yZV9TT1VSQ0VTCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBU
ZXh0dXJlLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVy
ZUdMLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZUlt
YWdlQnVmZmVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4
dHVyZVBvb2wuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlci5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJHTC5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmNwcAogICAgICkKIGVuZGlmICgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQppbmRleCAxNWJiZjNmZDY5MjIuLmM4ZDE0YmY5OWMx
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCkBAIC01OCw2ICs1OCw3IEBA
IGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL0JpdG1hcFRleHR1cmUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1h
cFRleHR1cmVHTC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVy
ZUltYWdlQnVmZmVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0
dXJlUG9vbC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXIuY3BwCkBAIC02NSw2ICs2Niw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyRlBTQ291bnRlci5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3Jl
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKaW5kZXggYjFjZGNjY2I2NzJmLi5jOTUzM2E0
YzMzYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcApAQCAtODksNiArODksNDUgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVN
YXBwZXIqIHRleHR1cmVNYXBwZXIKIAogICAgIG1fY29udGV4dC0+bWFya0xheWVyQ29tcG9zaXRl
ZCgpOwogCisgICAgLy8gRklYTUU6IFdlIGRvIG5vdCBzdXBwb3J0IG1hc2sgZm9yIHRoZSBtb21l
bnQgd2l0aCBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuCisgICAgaWYgKHRleHR1cmVNYXBwZXIt
PmFjY2VsZXJhdGlvbk1vZGUoKSAhPSBUZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2RlKSB7CisgICAg
ICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHRleHR1cmVNYXBwZXItPmdyYXBoaWNzQ29u
dGV4dCgpOworICAgICAgICBjb250ZXh0LT5zYXZlKCk7CisgICAgICAgIGNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpLT5zZXRHbG9iYWxBbHBoYShvcGFjaXR5KTsKKworICAgICAgICBjb25zdCBp
bnQgaGVpZ2h0ID0gbV9jb250ZXh0LT5tX2N1cnJlbnRIZWlnaHQ7CisgICAgICAgIGNvbnN0IGlu
dCB3aWR0aCA9IG1fY29udGV4dC0+bV9jdXJyZW50V2lkdGg7CisgICAgICAgIGludCB0b3RhbEJ5
dGVzID0gd2lkdGggKiBoZWlnaHQgKiA0OworCisgICAgICAgIGF1dG8gcGl4ZWxzID0gc3RkOjpt
YWtlX3VuaXF1ZTx1bnNpZ25lZCBjaGFyW10+KHRvdGFsQnl0ZXMpOworICAgICAgICBpZiAoIXBp
eGVscykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBPcGVuR0wga2VlcHMgdGhl
IHBpeGVscyBzdG9yZWQgYm90dG9tIHVwLCBzbyB3ZSBuZWVkIHRvIGZsaXAgdGhlIGltYWdlIGhl
cmUuCisgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgwLCBoZWlnaHQpOworICAgICAgICBjb250
ZXh0LT5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKworICAgICAgICBjb250ZXh0LT5jb25jYXRD
VE0obWF0cml4LnRvQWZmaW5lVHJhbnNmb3JtKCkpOworCisgICAgICAgIG1fY29udGV4dC0+cmVh
ZFJlbmRlcmluZ1Jlc3VsdHMocGl4ZWxzLmdldCgpLCB0b3RhbEJ5dGVzKTsKKworICAgICAgICAv
LyBQcmVtdWx0aXBseSBhbHBoYS4KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5
dGVzOyBpICs9IDQpCisgICAgICAgICAgICBpZiAocGl4ZWxzW2kgKyAzXSAhPSAyNTUpIHsKKyAg
ICAgICAgICAgICAgICBwaXhlbHNbaSArIDBdID0gbWluKDI1NSwgcGl4ZWxzW2kgKyAwXSAqIHBp
eGVsc1tpICsgM10gLyAyNTUpOworICAgICAgICAgICAgICAgIHBpeGVsc1tpICsgMV0gPSBtaW4o
MjU1LCBwaXhlbHNbaSArIDFdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7CisgICAgICAgICAgICAg
ICAgcGl4ZWxzW2kgKyAyXSA9IG1pbigyNTUsIHBpeGVsc1tpICsgMl0gKiBwaXhlbHNbaSArIDNd
IC8gMjU1KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiBpbWFnZVN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3Jf
ZGF0YSgKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KHBpeGVscy5nZXQo
KSksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIHdpZHRoLCBoZWlnaHQsIHdpZHRoICogNCkpOworCisg
ICAgICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3U3VyZmFjZVRvQ29udGV4dChp
bWFnZVN1cmZhY2UuZ2V0KCksIHRhcmdldFJlY3QsIEludFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdo
dCksICpjb250ZXh0KTsKKworICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAgICAgaWYgKG1fY29u
dGV4dC0+bV9hdHRycy5hbnRpYWxpYXMgJiYgbV9jb250ZXh0LT5tX3N0YXRlLmJvdW5kRkJPID09
IG1fY29udGV4dC0+bV9tdWx0aXNhbXBsZUZCTykgewogICAgICAgICBHTENvbnRleHQqIHByZXZp
b3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Z2V0Q3VycmVudCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvLmNwcAppbmRleCBiZDAwMjMwYjljODkuLjg4MWFlOWFiMjM1MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyby5jcHAKQEAgLTQxMSw2ICs0MTEsMTEgQEAgU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFV
UkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiwgQ29vcmRpbmF0ZVMKICNp
ZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnBh
aW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwg
ZmxvYXQgb3BhY2l0eSkKIHsKKyAgICBpZiAodGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9k
ZSgpICE9IFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpIHsKKyAgICAgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIEFTU0VSVChtX3RleHR1cmUpOwog
CiAgICAgLy8gQ2Fpcm8gbWF5IGNoYW5nZSB0aGUgYWN0aXZlIGNvbnRleHQsIHNvIHdlIG1ha2Ug
c3VyZSB0byBjaGFuZ2UgaXQgYmFjayBhZnRlciBmbHVzaGluZy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcAppbmRleCBlNWYyODZhNTQz
MGMuLjM5NzdhNWRkNjI0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlLmNwcApAQCAtNTMwLDYgKzUzMCw5IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGbG9hCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKSAmJiAhVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpwYWludFRv
VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJl
Y3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0
IG9wYWNpdHkpCiB7CisgICAgaWYgKHRleHR1cmVNYXBwZXItPmFjY2VsZXJhdGlvbk1vZGUoKSAh
PSBUZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2RlKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAo
IW1fcGxheWVyLT52aXNpYmxlKCkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVJbWFnZUJ1
ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFw
VGV4dHVyZUltYWdlQnVmZmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAuLmE0MTkyYmJkZTdmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIuY3BwCkBAIC0w
LDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlh
IFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJpdG1hcFRl
eHR1cmVJbWFnZUJ1ZmZlci5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyOjp1cGRhdGVD
b250ZW50cyhjb25zdCB2b2lkKiBkYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25z
dCBJbnRQb2ludCYgc291cmNlT2Zmc2V0LCBpbnQgYnl0ZXNQZXJMaW5lLCBVcGRhdGVDb250ZW50
c0ZsYWcpCit7CisjaWYgUExBVEZPUk0oQ0FJUk8pCisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2Vf
dD4gc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRh
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihkYXRhKCkpLAorICAgICAgICBDQUlST19GT1JN
QVRfQVJHQjMyLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIGJ5dGVz
UGVyTGluZSkpOworICAgIG1faW1hZ2UtPmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJh
d1N1cmZhY2VUb0NvbnRleHQoc3VyZmFjZS5nZXQoKSwgdGFyZ2V0UmVjdCwKKyAgICAgICAgSW50
UmVjdChzb3VyY2VPZmZzZXQsIHRhcmdldFJlY3Quc2l6ZSgpKSwgbV9pbWFnZS0+Y29udGV4dCgp
KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGRhdGEpOworICAgIFVOVVNFRF9QQVJBTSh0YXJn
ZXRSZWN0KTsKKyAgICBVTlVTRURfUEFSQU0oc291cmNlT2Zmc2V0KTsKKyAgICBVTlVTRURfUEFS
QU0oYnl0ZXNQZXJMaW5lKTsKKyNlbmRpZgorfQorCit2b2lkIEJpdG1hcFRleHR1cmVJbWFnZUJ1
ZmZlcjo6dXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciosIEdyYXBoaWNzTGF5ZXIqIHNvdXJj
ZUxheWVyLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRQb2ludCYgc291cmNl
T2Zmc2V0LCBVcGRhdGVDb250ZW50c0ZsYWcpCit7CisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0ID0gbV9pbWFnZS0+Y29udGV4dCgpOworCisgICAgY29udGV4dC5jbGVhclJlY3QodGFyZ2V0
UmVjdCk7CisKKyAgICBJbnRSZWN0IHNvdXJjZVJlY3QodGFyZ2V0UmVjdCk7CisgICAgc291cmNl
UmVjdC5zZXRMb2NhdGlvbihzb3VyY2VPZmZzZXQpOworICAgIGNvbnRleHQuc2F2ZSgpOworICAg
IGNvbnRleHQuY2xpcCh0YXJnZXRSZWN0KTsKKyAgICBjb250ZXh0LnRyYW5zbGF0ZSh0YXJnZXRS
ZWN0LngoKSAtIHNvdXJjZU9mZnNldC54KCksIHRhcmdldFJlY3QueSgpIC0gc291cmNlT2Zmc2V0
LnkoKSk7CisgICAgc291cmNlTGF5ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRl
eHQsIHNvdXJjZVJlY3QpOworICAgIGNvbnRleHQucmVzdG9yZSgpOworfQorCit2b2lkIEJpdG1h
cFRleHR1cmVJbWFnZUJ1ZmZlcjo6ZGlkUmVzZXQoKQoreworICAgIG1faW1hZ2UgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGNvbnRlbnRTaXplKCksIFVuYWNjZWxlcmF0ZWQpOworfQorCit2b2lkIEJp
dG1hcFRleHR1cmVJbWFnZUJ1ZmZlcjo6dXBkYXRlQ29udGVudHMoSW1hZ2UqIGltYWdlLCBjb25z
dCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0LCBVcGRhdGVDb250
ZW50c0ZsYWcpCit7CisgICAgbV9pbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZShpbWFnZSwgQ29s
b3JTcGFjZURldmljZVJHQiwgdGFyZ2V0UmVjdCwgSW50UmVjdChvZmZzZXQsIHRhcmdldFJlY3Qu
c2l6ZSgpKSwgQ29tcG9zaXRlQ29weSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBU
ZXh0dXJlSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9CaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAuLmJkMjA4YzU3ZDgzZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIu
aApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDE0
IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVy
X2gKKyNkZWZpbmUgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyX2gKKworI2luY2x1ZGUgIkJpdG1h
cFRleHR1cmUuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkludFJlY3Qu
aCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
R3JhcGhpY3NDb250ZXh0OworCitjbGFzcyBCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIgOiBwdWJs
aWMgQml0bWFwVGV4dHVyZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IEJpdG1hcFRleHR1cmVJbWFn
ZUJ1ZmZlcik7IH0KKyAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1faW1hZ2UtPmludGVybmFsU2l6ZSgpOyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJl
c2V0KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9CisgICAgaW5saW5lIEdyYXBoaWNzQ29udGV4dCog
Z3JhcGhpY3NDb250ZXh0KCkgeyByZXR1cm4gbV9pbWFnZSA/ICZtX2ltYWdlLT5jb250ZXh0KCkg
OiBudWxscHRyOyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKEltYWdlKiwgY29u
c3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50JiwgVXBkYXRlQ29udGVudHNGbGFnKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciosIEdyYXBo
aWNzTGF5ZXIqLCBjb25zdCBJbnRSZWN0JiB0YXJnZXQsIGNvbnN0IEludFBvaW50JiBvZmZzZXQs
IFVwZGF0ZUNvbnRlbnRzRmxhZykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNv
bnRlbnRzKGNvbnN0IHZvaWQqLCBjb25zdCBJbnRSZWN0JiB0YXJnZXQsIGNvbnN0IEludFBvaW50
JiBzb3VyY2VPZmZzZXQsIGludCBieXRlc1BlckxpbmUsIFVwZGF0ZUNvbnRlbnRzRmxhZykgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGFwcGx5RmlsdGVy
cyhUZXh0dXJlTWFwcGVyKiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpIG92ZXJyaWRlOworICAg
IEltYWdlQnVmZmVyKiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KKwor
cHJpdmF0ZToKKyAgICBCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIoKSB7IH0KKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2U7Cit9OworCit9CisKKyNlbmRpZiAvLyBCaXRt
YXBUZXh0dXJlSW1hZ2VCdWZmZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVQb29sLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlUG9vbC5jcHAKaW5kZXggNmRj
NTFhOGVjYmVlLi5lYTZkY2ExZDUzZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlUG9vbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVQb29sLmNwcApAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkJpdG1hcFRleHR1cmVHTC5oIgogI2luY2x1ZGUgIkdM
Q29udGV4dC5oIgogI2VuZGlmCisjaW5jbHVkZSAiQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTAyLDExICsxMDMsMTIgQEAgUGFzc1JlZlB0
cjxCaXRtYXBUZXh0dXJlPiBCaXRtYXBUZXh0dXJlUG9vbDo6YWNxdWlyZVRleHR1cmUoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gQml0bWFwVGV4dHVyZVBv
b2w6OmNyZWF0ZVRleHR1cmUoKQogewogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLSAgICBC
aXRtYXBUZXh0dXJlR0wqIHRleHR1cmUgPSBuZXcgQml0bWFwVGV4dHVyZUdMKG1fY29udGV4dDNE
KTsKLSAgICByZXR1cm4gYWRvcHRSZWYodGV4dHVyZSk7Ci0jZWxzZQotICAgIHJldHVybiBudWxs
cHRyOworICAgIGlmIChtX2NvbnRleHQzRCkgeworICAgICAgICBCaXRtYXBUZXh0dXJlR0wqIHRl
eHR1cmUgPSBuZXcgQml0bWFwVGV4dHVyZUdMKG1fY29udGV4dDNEKTsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKHRleHR1cmUpOworICAgIH0KICNlbmRpZgorICAgIHJldHVybiBCaXRtYXBUZXh0
dXJlSW1hZ2VCdWZmZXI6OmNyZWF0ZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAppbmRleCBkNTM0NzA0NGU4
OGMuLjc3NjY1NDg1NDRhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIuY3BwCkBAIC02MDIsNyArNjAyLDggQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cjo6cmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKIGJvb2wgR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9u
cyYgZmlsdGVycykKIHsKICAgICBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyID0gbV9sYXll
ci50ZXh0dXJlTWFwcGVyKCk7Ci0gICAgaWYgKCF0ZXh0dXJlTWFwcGVyKQorICAgIC8vIFRleHR1
cmVNYXBwZXJJbWFnZUJ1ZmZlciBkb2VzIG5vdCBzdXBwb3J0IENTUyBmaWx0ZXJzLgorICAgIGlm
ICghdGV4dHVyZU1hcHBlciB8fCB0ZXh0dXJlTWFwcGVyLT5hY2NlbGVyYXRpb25Nb2RlKCkgPT0g
VGV4dHVyZU1hcHBlcjo6U29mdHdhcmVNb2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
bm90aWZ5Q2hhbmdlKEZpbHRlckNoYW5nZSk7CiAgICAgcmV0dXJuIEdyYXBoaWNzTGF5ZXI6OnNl
dEZpbHRlcnMoZmlsdGVycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAKaW5kZXggNGNlNzg1OTExYTNjLi4w
MzNhNjFlNzdkM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNs
dWRlICJCaXRtYXBUZXh0dXJlUG9vbC5oIgogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckltYWdl
QnVmZmVyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUu
aD4KIApAQCAtMzcsMTUgKzM4LDE4IEBAIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4dHVy
ZU1hcHBlcjo6YWNxdWlyZVRleHR1cmVGcm9tUG9vbChjb25zdCBJbnRTaXplJiBzCiAgICAgcmV0
dXJuIHNlbGVjdGVkVGV4dHVyZS5yZWxlYXNlKCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxUZXh0
dXJlTWFwcGVyPiBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoKQorc3RkOjp1bmlxdWVfcHRyPFRleHR1
cmVNYXBwZXI+IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShBY2NlbGVyYXRpb25Nb2RlIG1vZGUpCiB7
CisgICAgaWYgKG1vZGUgPT0gU29mdHdhcmVNb2RlKQorICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXI+KCk7CiAgICAgcmV0dXJuIHBsYXRmb3Jt
Q3JlYXRlQWNjZWxlcmF0ZWQoKTsKIH0KIAotVGV4dHVyZU1hcHBlcjo6VGV4dHVyZU1hcHBlcigp
CitUZXh0dXJlTWFwcGVyOjpUZXh0dXJlTWFwcGVyKEFjY2VsZXJhdGlvbk1vZGUgYWNjZWxlcmF0
aW9uTW9kZSkKICAgICA6IG1fY29udGV4dCgwKQogICAgICwgbV9pbnRlcnBvbGF0aW9uUXVhbGl0
eShJbnRlcnBvbGF0aW9uRGVmYXVsdCkKICAgICAsIG1fdGV4dERyYXdpbmdNb2RlKFRleHRNb2Rl
RmlsbCkKKyAgICAsIG1fYWNjZWxlcmF0aW9uTW9kZShhY2NlbGVyYXRpb25Nb2RlKQogICAgICwg
bV9pc01hc2tNb2RlKGZhbHNlKQogICAgICwgbV93cmFwTW9kZShTdHJldGNoV3JhcCkKIHsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyLmgKaW5kZXggODg3MWYxYjIzYjA0Li40M2U2MmMyODE5YmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXIuaApAQCAtNDYsNiArNDYsNyBAQCBjbGFzcyBGaWx0ZXJPcGVyYXRpb25zOwogY2xhc3MgVGV4
dHVyZU1hcHBlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CisgICAg
ZW51bSBBY2NlbGVyYXRpb25Nb2RlIHsgU29mdHdhcmVNb2RlLCBPcGVuR0xNb2RlIH07CiAgICAg
ZW51bSBQYWludEZsYWcgewogICAgICAgICBQYWludGluZ01pcnJvcmVkID0gMSA8PCAwLAogICAg
IH07CkBAIC01Nyw5ICs1OCw5IEBAIHB1YmxpYzoKIAogICAgIHR5cGVkZWYgdW5zaWduZWQgUGFp
bnRGbGFnczsKIAotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlcj4gY3Jl
YXRlKCk7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlTWFwcGVyPiBjcmVhdGUo
QWNjZWxlcmF0aW9uTW9kZSBuZXdNb2RlID0gU29mdHdhcmVNb2RlKTsKIAotICAgIGV4cGxpY2l0
IFRleHR1cmVNYXBwZXIoKTsKKyAgICBleHBsaWNpdCBUZXh0dXJlTWFwcGVyKEFjY2VsZXJhdGlv
bk1vZGUpOwogICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXIoKTsKIAogICAgIGVudW0gRXhwb3Nl
ZEVkZ2VzIHsKQEAgLTkxLDYgKzkyLDcgQEAgcHVibGljOgogCiAgICAgSW50ZXJwb2xhdGlvblF1
YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJw
b2xhdGlvblF1YWxpdHk7IH0KICAgICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01v
ZGUoKSBjb25zdCB7IHJldHVybiBtX3RleHREcmF3aW5nTW9kZTsgfQorICAgIEFjY2VsZXJhdGlv
bk1vZGUgYWNjZWxlcmF0aW9uTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZWxlcmF0aW9uTW9k
ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGJlZ2luUGFpbnRpbmcoUGFpbnRGbGFncyA9IDApIHsg
fQogICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludGluZygpIHsgfQpAQCAtMTIzLDYgKzEyNSw3IEBA
IHByaXZhdGU6CiAjZW5kaWYKICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2ludGVycG9sYXRp
b25RdWFsaXR5OwogICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIG1fdGV4dERyYXdpbmdNb2RlOwor
ICAgIEFjY2VsZXJhdGlvbk1vZGUgbV9hY2NlbGVyYXRpb25Nb2RlOwogICAgIGJvb2wgbV9pc01h
c2tNb2RlOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcGF0dGVyblRyYW5zZm9ybTsKICAg
ICBXcmFwTW9kZSBtX3dyYXBNb2RlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCAxZjlhNDFh
NzBjZjkuLjNlNDJiYWNjMWM0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKQEAgLTI0MSw3ICsy
NDEsOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTERhdGE6OmluaXRpYWxpemVTdGVuY2lsKCkKIH0K
IAogVGV4dHVyZU1hcHBlckdMOjpUZXh0dXJlTWFwcGVyR0woKQotICAgIDogbV9lbmFibGVFZGdl
RGlzdGFuY2VBbnRpYWxpYXNpbmcoZmFsc2UpCisgICAgOiBUZXh0dXJlTWFwcGVyKE9wZW5HTE1v
ZGUpCisgICAgLCBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZyhmYWxzZSkKIHsKICAg
ICBtX2NvbnRleHQzRCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGb3JDdXJyZW50R0xDb250
ZXh0KCk7CiAgICAgbV9kYXRhID0gbmV3IFRleHR1cmVNYXBwZXJHTERhdGEobV9jb250ZXh0M0Qu
Z2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmQ2Zjg3ZTEzMGI4NQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVySW1hZ2VCdWZmZXIuY3BwCkBAIC0wLDAgKzEsMTI1IEBACisvKgorIENvcHlyaWdodCAoQykg
MjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJJbWFnZUJ1ZmZlci5oIgorCisjaW5jbHVkZSAiQml0bWFwVGV4dHVyZVBvb2wuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KworI2lmIFVTRShURVhUVVJFX01BUFBFUikKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGlj
IGNvbnN0IGludCBzX21heGltdW1BbGxvd2VkSW1hZ2VCdWZmZXJEaW1lbnNpb24gPSA0MDk2Owor
CitUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXI6OlRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlcigpCisg
ICAgOiBUZXh0dXJlTWFwcGVyKFNvZnR3YXJlTW9kZSkKK3sKKyAgICBtX3RleHR1cmVQb29sID0g
c3RkOjptYWtlX3VuaXF1ZTxCaXRtYXBUZXh0dXJlUG9vbD4oKTsKK30KKworSW50U2l6ZSBUZXh0
dXJlTWFwcGVySW1hZ2VCdWZmZXI6Om1heFRleHR1cmVTaXplKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gSW50U2l6ZShzX21heGltdW1BbGxvd2VkSW1hZ2VCdWZmZXJEaW1lbnNpb24sIHNfbWF4aW11
bUFsbG93ZWRJbWFnZUJ1ZmZlckRpbWVuc2lvbik7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlcklt
YWdlQnVmZmVyOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwg
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9
IGN1cnJlbnRDb250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm47Cisj
aWYgRU5BQkxFKDNEX1RSQU5TRk9STVMpCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcHJldmlv
dXNUcmFuc2Zvcm0gPSBjb250ZXh0LT5nZXQzRFRyYW5zZm9ybSgpOworI2Vsc2UKKyAgICBBZmZp
bmVUcmFuc2Zvcm0gcHJldmlvdXNUcmFuc2Zvcm0gPSBjb250ZXh0LT5nZXRDVE0oKTsKKyNlbmRp
ZgorICAgIGNvbnRleHQtPnNhdmUoKTsKKworI2lmIEVOQUJMRSgzRF9UUkFOU0ZPUk1TKQorICAg
IGNvbnRleHQtPmNvbmNhdDNEVHJhbnNmb3JtKG1hdHJpeCk7CisjZWxzZQorICAgIGNvbnRleHQt
PmNvbmNhdENUTShtYXRyaXgudG9BZmZpbmVUcmFuc2Zvcm0oKSk7CisjZW5kaWYKKworICAgIGNv
bnRleHQtPmNsaXAocmVjdCk7CisKKyNpZiBFTkFCTEUoM0RfVFJBTlNGT1JNUykKKyAgICBjb250
ZXh0LT5zZXQzRFRyYW5zZm9ybShwcmV2aW91c1RyYW5zZm9ybSk7CisjZWxzZQorICAgIGNvbnRl
eHQtPnNldENUTShwcmV2aW91c1RyYW5zZm9ybSk7CisjZW5kaWYKK30KKwordm9pZCBUZXh0dXJl
TWFwcGVySW1hZ2VCdWZmZXI6OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1
cmUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgdW5zaWduZWQgLyogZXhwb3NlZEVkZ2VzICovKQor
eworICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IGN1cnJlbnRDb250ZXh0KCk7CisgICAg
aWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBCaXRtYXBUZXh0dXJl
SW1hZ2VCdWZmZXImIHRleHR1cmVJbWFnZUJ1ZmZlciA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1h
cFRleHR1cmVJbWFnZUJ1ZmZlciY+KHRleHR1cmUpOworICAgIEltYWdlQnVmZmVyKiBpbWFnZSA9
IHRleHR1cmVJbWFnZUJ1ZmZlci5pbWFnZSgpOworICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICBj
b250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oaXNJbk1hc2tNb2RlKCkgPyBDb21wb3NpdGVE
ZXN0aW5hdGlvbkluIDogQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgY29udGV4dC0+c2V0QWxw
aGEob3BhY2l0eSk7CisjaWYgRU5BQkxFKDNEX1RSQU5TRk9STVMpCisgICAgY29udGV4dC0+Y29u
Y2F0M0RUcmFuc2Zvcm0obWF0cml4KTsKKyNlbHNlCisgICAgY29udGV4dC0+Y29uY2F0Q1RNKG1h
dHJpeC50b0FmZmluZVRyYW5zZm9ybSgpKTsKKyNlbmRpZgorICAgIGNvbnRleHQtPmRyYXdJbWFn
ZUJ1ZmZlcihpbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgdGFyZ2V0UmVjdCk7CisgICAgY29u
dGV4dC0+cmVzdG9yZSgpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlcjo6ZHJh
d1NvbGlkQ29sb3IoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbWF0cml4LCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0ID0gY3VycmVudENvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAg
IHJldHVybjsKKworICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICBjb250ZXh0LT5zZXRDb21wb3Np
dGVPcGVyYXRpb24oaXNJbk1hc2tNb2RlKCkgPyBDb21wb3NpdGVEZXN0aW5hdGlvbkluIDogQ29t
cG9zaXRlU291cmNlT3Zlcik7CisjaWYgRU5BQkxFKDNEX1RSQU5TRk9STVMpCisgICAgY29udGV4
dC0+Y29uY2F0M0RUcmFuc2Zvcm0obWF0cml4KTsKKyNlbHNlCisgICAgY29udGV4dC0+Y29uY2F0
Q1RNKG1hdHJpeC50b0FmZmluZVRyYW5zZm9ybSgpKTsKKyNlbmRpZgorCisgICAgY29udGV4dC0+
ZmlsbFJlY3QocmVjdCwgY29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQt
PnJlc3RvcmUoKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXI6OmRyYXdCb3Jk
ZXIoY29uc3QgQ29sb3ImLCBmbG9hdCAvKiBib3JkZXJXaWR0aCAqLywgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyOjpkcmF3TnVtYmVyKGludCAvKiBu
dW1iZXIgKi8sIGNvbnN0IENvbG9yJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitQYXNzUmVmUHRy
PEJpdG1hcFRleHR1cmU+IEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcjo6YXBwbHlGaWx0ZXJzKFRl
eHR1cmVNYXBwZXIqLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJikKK3sKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gdGhpczsKK30KKworfQorI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlcklt
YWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwLi5kZDE3MTkzZTlhOGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmgKQEAgLTAs
MCArMSw1OSBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisK
KyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyX2gKKyNkZWZpbmUgVGV4dHVyZU1hcHBlckltYWdl
QnVmZmVyX2gKKworI2luY2x1ZGUgIkJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlci5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgorCisjaWYgVVNF
KFRFWFRVUkVfTUFQUEVSKQorbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0dXJlTWFw
cGVySW1hZ2VCdWZmZXIgOiBwdWJsaWMgVGV4dHVyZU1hcHBlciB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyKCk7CisK
KyAgICAvLyBUZXh0dXJlTWFwcGVyIGltcGxlbWVudGF0aW9uCisgICAgdmlydHVhbCB2b2lkIGRy
YXdCb3JkZXIoY29uc3QgQ29sb3ImLCBmbG9hdCBib3JkZXJXaWR0aCwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhd051bWJlcihpbnQgbnVtYmVyLCBjb25zdCBDb2xvciYsIGNvbnN0IEZsb2F0UG9pbnQm
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgRmxvYXRSZWN0JiB0YXJn
ZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIHVuc2ln
bmVkIGV4cG9zZWRFZGdlcykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRyYXdTb2xpZENv
bG9yKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3Qg
Q29sb3ImKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5DbGlwKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpIG92ZXJyaWRlIHsgbV9j
dXJyZW50U3VyZmFjZSA9IHN1cmZhY2U7fQorICAgIHZpcnR1YWwgdm9pZCBlbmRDbGlwKCkgb3Zl
cnJpZGUgeyBncmFwaGljc0NvbnRleHQoKS0+cmVzdG9yZSgpOyB9CisgICAgdmlydHVhbCBJbnRS
ZWN0IGNsaXBCb3VuZHMoKSBvdmVycmlkZSB7IHJldHVybiBjdXJyZW50Q29udGV4dCgpLT5jbGlw
Qm91bmRzKCk7IH0KKyAgICB2aXJ0dWFsIEludFNpemUgbWF4VGV4dHVyZVNpemUoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpIG92
ZXJyaWRlIHsgcmV0dXJuIEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcjo6Y3JlYXRlKCk7IH0KKwor
ICAgIGlubGluZSBHcmFwaGljc0NvbnRleHQqIGN1cnJlbnRDb250ZXh0KCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRTdXJmYWNlID8gc3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVyZUlt
YWdlQnVmZmVyKj4obV9jdXJyZW50U3VyZmFjZS5nZXQoKSktPmdyYXBoaWNzQ29udGV4dCgpIDog
Z3JhcGhpY3NDb250ZXh0KCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlZlB0cjxCaXRtYXBU
ZXh0dXJlPiBtX2N1cnJlbnRTdXJmYWNlOworfTsKKworfQorI2VuZGlmIC8vIFVTRShURVhUVVJF
X01BUFBFUikKKworI2VuZGlmIC8vIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlcl9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAKaW5kZXgg
Njc5NDcwNGNlYzFiLi4wOTczMGZlNjhkMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db21wb3NpdGluZ0Nvb3JkaW5hdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAKQEAgLTY1LDYgKzY1LDEwIEBAIENvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OkNvbXBvc2l0aW5nQ29vcmRpbmF0b3IoUGFnZSogcGFnZSwgQ29t
cG9zaXRpbmdDb29yZGluYXRvCiAjZW5kaWYKIHsKICAgICBtX3BhZ2UtPnNldHRpbmdzKCkuc2V0
QXBwbHlEZXZpY2VTY2FsZUZhY3RvckluQ29tcG9zaXRvcih0cnVlKTsKKworICAgIC8vIFRoaXMg
aXMgYSB0ZW1wb3Jhcnkgd2F5IHRvIGVuYWJsZSB0aGlzIG9ubHkgaW4gdGhlIEdMIGNhc2UsIHVu
dGlsIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlciBpcyByZW1vdmVkLgorICAgIC8vIFNlZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0ODY5CisgICAgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpzZXRTaG91bGRTdXBwb3J0Q29udGVudHNUaWxpbmcodHJ1ZSk7CiB9
CiAKIHZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIo
R3JhcGhpY3NMYXllciogY29tcG9zaXRpbmdMYXllciwgR3JhcGhpY3NMYXllciogb3ZlcmxheUxh
eWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmNwcAppbmRleCA3Yzc1MjQ0YzczZTAuLjMzMzhlZGJlM2M3NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKQEAg
LTM2NSw5ICszNjUsMTYgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRl
bnRzVGlsZVBoYXNlKGNvbnN0IEZsb2F0U2l6ZSYgcCkKICAgICBkaWRDaGFuZ2VMYXllclN0YXRl
KCk7CiB9CiAKK3N0YXRpYyBib29sIHNfc2hvdWxkU3VwcG9ydENvbnRlbnRzVGlsaW5nID0gZmFs
c2U7CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRTaG91bGRTdXBwb3J0Q29u
dGVudHNUaWxpbmcoYm9vbCBzKQoreworICAgIHNfc2hvdWxkU3VwcG9ydENvbnRlbnRzVGlsaW5n
ID0gczsKK30KKwogYm9vbCBHcmFwaGljc0xheWVyOjpzdXBwb3J0c0NvbnRlbnRzVGlsaW5nKCkK
IHsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc19zaG91bGRTdXBwb3J0Q29udGVudHNU
aWxpbmc7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c05l
ZWRzRGlzcGxheSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyLmgKaW5kZXggNTQ2NTY2NGM5ZmQzLi5hN2YyMTBhMDAyN2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKQEAg
LTE0Miw2ICsxNDIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXROZWVkc1Zpc2libGVSZWN0QWRq
dXN0bWVudCgpOwogICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CiAKKyAgICBzdGF0aWMg
dm9pZCBzZXRTaG91bGRTdXBwb3J0Q29udGVudHNUaWxpbmcoYm9vbCk7CiAgICAgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyKiBmaW5kRmlyc3REZXNjZW5kYW50V2l0aENvbnRlbnRzUmVjdXJzaXZl
bHkoKTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAwNTFhMTIzNDBiNjUuLjQ3NDhhODI2YzY3
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIwIEBACiAyMDE1LTA5LTExICBFbWFudWVsZSBBaW5h
ICA8ZW1hbnVlbGUuYWluYUBjb2xsYWJvcmEuY29tPgogCisgICAgICAgIFJlaW50cm9kdWNlIFRl
eHR1cmVNYXBwZXJJbWFnZUJ1ZmZlcgorICAgICAgICBOZWVkIHRoZSBidWcgVVJMIChPT1BTISku
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnBhaW50VG9DdXJyZW50R0xD
b250ZXh0KToKKyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNv
bXBvc2l0b3IvVGhyZWFkU2FmZUNvb3JkaW5hdGVkU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlRocmVhZFNhZmVDb29yZGluYXRlZFN1cmZhY2U6OmJlZ2luUGFpbnQpOgorICAgICAgICAo
V2ViS2l0OjpUaHJlYWRTYWZlQ29vcmRpbmF0ZWRTdXJmYWNlOjplbmRQYWludCk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdEd0azo6c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBv
c2l0aW5nKToKKworMjAxNS0wOS0xMSAgRW1hbnVlbGUgQWluYSAgPGVtYW51ZWxlLmFpbmFAY29s
bGFib3JhLmNvbT4KKwogICAgICAgICBbVGhyZWFkZWRDb21wb3NpdG9yXSBTY3JvbGxpbmcgYXJ0
aWZhY3RzIG9uIGFjY2VsZXJhdGVkIHN1YmZyYW1lcwogICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5MDYwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUuY3BwCmluZGV4IDgwODAzMDAwNzBiNC4uYWZkMTNmMjk0ZmU0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZEdyYXBoaWNzU2NlbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAKQEAgLTcxLDcgKzcxLDcg
QEAgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjp+Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCkK
IHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpwYWludFRvQ3VycmVudEdMQ29udGV4dChj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBG
bG9hdFJlY3QmIGNsaXBSZWN0LCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yLCBib29sIGRy
YXdzQmFja2dyb3VuZCwgY29uc3QgRmxvYXRQb2ludCYgY29udGVudFBvc2l0aW9uLCBUZXh0dXJl
TWFwcGVyOjpQYWludEZsYWdzIFBhaW50RmxhZ3MpCiB7CiAgICAgaWYgKCFtX3RleHR1cmVNYXBw
ZXIpIHsKLSAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKCk7
CisgICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShUZXh0dXJl
TWFwcGVyOjpPcGVuR0xNb2RlKTsKICAgICAgICAgc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdM
Kj4obV90ZXh0dXJlTWFwcGVyLmdldCgpKS0+c2V0RW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFz
aW5nKHRydWUpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAKaW5kZXggYzEwODFhMTBjYWQz
Li5lYTIxMzk0ODE4YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9ndGsvTGF5ZXJUcmVlSG9zdEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2d0ay9MYXllclRyZWVIb3N0R3RrLmNwcApAQCAtMzc2LDcgKzM3Niw3IEBA
IHZvaWQgTGF5ZXJUcmVlSG9zdEd0azo6c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0
aW5nKHVpbnQ2NF90IGhhbmRsZSkKIAogICAgIEFTU0VSVChtX2lzVmFsaWQpOwogICAgIEFTU0VS
VCghbV90ZXh0dXJlTWFwcGVyKTsKLSAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVy
OjpjcmVhdGUoKTsKKyAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUo
VGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7CiAgICAgc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBl
ckdMKj4obV90ZXh0dXJlTWFwcGVyLmdldCgpKS0+c2V0RW5hYmxlRWRnZURpc3RhbmNlQW50aWFs
aWFzaW5nKHRydWUpOwogICAgIGRvd25jYXN0PEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyPigq
bV9yb290TGF5ZXIpLmxheWVyKCkuc2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0
KCkpOwogCi0tIAoyLjUuMwoK
</data>

          </attachment>
      

    </bug>

</bugzilla>