<?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>73043</bug_id>
          
          <creation_ts>2011-11-23 13:18:56 -0800</creation_ts>
          <short_desc>Teach VideoLayerChromium how to render native texture (to support HW video decode).</short_desc>
          <delta_ts>2011-12-19 20:28:17 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ami Fischman">fischman</reporter>
          <assigned_to name="Ami Fischman">fischman</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>levin+threading</cc>
    
    <cc>reveman</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>508331</commentid>
    <comment_count>0</comment_count>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2011-11-23 13:18:56 -0800</bug_when>
    <thetext>Teach VideoLayerChromium how to render native texture (to support HW video decode).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508332</commentid>
    <comment_count>1</comment_count>
      <attachid>116406</attachid>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2011-11-23 13:20:33 -0800</bug_when>
    <thetext>Created attachment 116406
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508334</commentid>
    <comment_count>2</comment_count>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2011-11-23 13:21:45 -0800</bug_when>
    <thetext>Ken: vrk@ suggested you&apos;d be a good person to review this.  If that&apos;s wrong do you know who would be?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508335</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-23 13:22:18 -0800</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508340</commentid>
    <comment_count>4</comment_count>
      <attachid>116406</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-23 13:26:11 -0800</bug_when>
    <thetext>Comment on attachment 116406
Patch

Attachment 116406 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10630075</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508347</commentid>
    <comment_count>5</comment_count>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2011-11-23 13:32:41 -0800</bug_when>
    <thetext>WebKit-n00b time: chromium-ews bot failed b/c I added a pure-virtual to WebKit::WebVideoFrame, implemented in chromium&apos;s webkit_media::WebVideoFrameImpl (and of course the chromium change isn&apos;t included in this patch, so the bot doesn&apos;t see the method implementation).

In order to land this do I need to first land the chromium-side patch to add the implementation (sans OVERRIDE), then wait for webkit to do a chromium roll, then add the pure virtual to webkit, then wait for chromium to do a webkit roll, then add OVERRIDE to chromium?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508350</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-11-23 13:35:38 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; WebKit-n00b time: chromium-ews bot failed b/c I added a pure-virtual to WebKit::WebVideoFrame, implemented in chromium&apos;s webkit_media::WebVideoFrameImpl (and of course the chromium change isn&apos;t included in this patch, so the bot doesn&apos;t see the method implementation).
&gt; 
&gt; In order to land this do I need to first land the chromium-side patch to add the implementation (sans OVERRIDE), then wait for webkit to do a chromium roll, then add the pure virtual to webkit, then wait for chromium to do a webkit roll, then add OVERRIDE to chromium?

To simplify the landing process, you can provide an empty implementation of the pure virtual for the time being. It would be best to add a FIXME about making it pure virtual, and file and take a follow-on bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508360</commentid>
    <comment_count>7</comment_count>
      <attachid>116414</attachid>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2011-11-23 13:43:35 -0800</bug_when>
    <thetext>Created attachment 116414
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508390</commentid>
    <comment_count>8</comment_count>
      <attachid>116414</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-11-23 14:17:56 -0800</bug_when>
    <thetext>Comment on attachment 116414
Patch

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

&gt; Source/WebKit/chromium/public/WebVideoFrame.h:63
&gt; +    virtual unsigned textureId() const { return 0; } // FIXME: make pure virtual once chromium-side lands (bug 73048).

Actually, methods intended to be implemented by Chromium are normally not made pure virtual.  Normally, we provide default implementations here as you are doing for this method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508405</commentid>
    <comment_count>9</comment_count>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2011-11-23 14:28:20 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 116414 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=116414&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/chromium/public/WebVideoFrame.h:63
&gt; &gt; +    virtual unsigned textureId() const { return 0; } // FIXME: make pure virtual once chromium-side lands (bug 73048).
&gt; 
&gt; Actually, methods intended to be implemented by Chromium are normally not made pure virtual.  Normally, we provide default implementations here as you are doing for this method.

Huh.  There&apos;re an awful lot of &quot;= 0;&quot;&apos;s in this class and in this directory, though.
Happy to go either way, of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508407</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-11-23 14:32:43 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Huh.  There&apos;re an awful lot of &quot;= 0;&quot;&apos;s in this class and in this directory, though.
&gt; Happy to go either way, of course.

We&apos;re not consistent.  Keep in mind that interfaces implemented by WebKit should indeed have pure virtual methods.

The point of saying that embedder implemented interfaces should not use pure virtual methods is to avoid the churn you are experiencing with this patch today.  You are putting in a FIXME comment, which implies having to go back and cleanup the code later to remove the FIXME.  If you could avoid that round of busy work, wouldn&apos;t you appreciate it? :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508413</commentid>
    <comment_count>11</comment_count>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2011-11-23 14:40:32 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; Huh.  There&apos;re an awful lot of &quot;= 0;&quot;&apos;s in this class and in this directory, though.
&gt; &gt; Happy to go either way, of course.
&gt; 
&gt; We&apos;re not consistent.  Keep in mind that interfaces implemented by WebKit should indeed have pure virtual methods.
&gt; 
&gt; The point of saying that embedder implemented interfaces should not use pure virtual methods is to avoid the churn you are experiencing with this patch today.  You are putting in a FIXME comment, which implies having to go back and cleanup the code later to remove the FIXME.  If you could avoid that round of busy work, wouldn&apos;t you appreciate it? :-)

Yes, I would :)
I am not clear on what you are telling me to do, though.  Options I see include:
1) Remove the FIXME, leaving the impl in place, leaving the rest of the class as-is.
2) Replace all the =0&apos;s in the class with empty impl&apos;s and remove the FIXME.

Did you mean one of these or something else?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508414</commentid>
    <comment_count>12</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-11-23 14:41:34 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; Huh.  There&apos;re an awful lot of &quot;= 0;&quot;&apos;s in this class and in this directory, though.
&gt; &gt; Happy to go either way, of course.
&gt; 
&gt; We&apos;re not consistent.  Keep in mind that interfaces implemented by WebKit should indeed have pure virtual methods.
&gt; 
&gt; The point of saying that embedder implemented interfaces should not use pure virtual methods is to avoid the churn you are experiencing with this patch today.  You are putting in a FIXME comment, which implies having to go back and cleanup the code later to remove the FIXME.  If you could avoid that round of busy work, wouldn&apos;t you appreciate it? :-)

This is good to know. I&apos;d been assuming that all interfaces in the WebKit API (both directions) were supposed to be pure virtual. Ami added the FIXME and the follow-on bug on my request; Ami, please feel free to remove the FIXME and close the other bug on Darin&apos;s feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508418</commentid>
    <comment_count>13</comment_count>
      <attachid>116432</attachid>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2011-11-23 14:47:00 -0800</bug_when>
    <thetext>Created attachment 116432
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508424</commentid>
    <comment_count>14</comment_count>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2011-11-23 14:49:47 -0800</bug_when>
    <thetext>Went with option 2 - replace all =0&apos;s in the class w/ empty impls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508433</commentid>
    <comment_count>15</comment_count>
      <attachid>116432</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-11-23 15:01:39 -0800</bug_when>
    <thetext>Comment on attachment 116432
Patch

WebKit API changes LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508454</commentid>
    <comment_count>16</comment_count>
      <attachid>116432</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-11-23 15:20:19 -0800</bug_when>
    <thetext>Comment on attachment 116432
Patch

Looks good to me. Style failure looks like a flake. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508550</commentid>
    <comment_count>17</comment_count>
      <attachid>116432</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-23 18:32:05 -0800</bug_when>
    <thetext>Comment on attachment 116432
Patch

Clearing flags on attachment: 116432

Committed r101115: &lt;http://trac.webkit.org/changeset/101115&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508551</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-23 18:32:10 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509460</commentid>
    <comment_count>19</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-27 11:20:02 -0800</bug_when>
    <thetext>I&apos;m disappointed this was landed without tests.  New logic without tests is likely to break quickly.

I also think it&apos;s a mistake to bake this new drawing path into the existing VideoLayer stuff. It&apos;s a different enough rendering path - uses different resources, shaders, and ownership - that it deserves its own layer type.

What is this I420 format stuff? I don&apos;t see it being used.

Reopening for test coverage.  We cannot support untested codepaths in the compositor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509510</commentid>
    <comment_count>20</comment_count>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2011-11-27 16:50:55 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; I&apos;m disappointed this was landed without tests.  New logic without tests is likely to break quickly.

Teach me to fish.  How does a change to the chromium compositor in WK get tested before the chromium-side implementation lands (and rolls into WK)?  I&apos;d love for that to exist independent of the chromium implementation.

&gt; I also think it&apos;s a mistake to bake this new drawing path into the existing VideoLayer stuff. It&apos;s a different enough rendering path - uses different resources, shaders, and ownership - that it deserves its own layer type.

I started out hoping to reuse the Plugin* layer/renderer for this (and rename it s/Plugin/External/g or somesuch) but was confounded by the fact that the layer/renderer needs to be decided on &amp; created when the element is created (WebMediaPlayerClientImpl in this case), which is too early to know whether software or hardware decode will be used (a decision that can only be reached after the media stream starts loading and demuxing).

I am not at all wedded to anything in this implementation (other than it working :)).  Happy to make changes if you have alternate suggestions.

&gt; What is this I420 format stuff? I don&apos;t see it being used.

Assuming you mean the change to WebVideoFrame.h, I made it to match chromium&apos;s media::VideoFrame, which WebVideoFrame is the counterpart to.  Apparently I420 wasn&apos;t added to the WK side when it was added to the chromium and I made them symmetric again, since chromium expects the enums to match up.
media::VideoFrame: http://codesearch.google.com/codesearch#OAMlx_jo-ck/src/media/base/video_frame.h&amp;exact_package=chromium&amp;q=file:media/base/video_frame.h%20I420&amp;type=cs&amp;l=39
Expectation of matching up: http://codesearch.google.com/codesearch#OAMlx_jo-ck/src/webkit/media/webvideoframe_impl.cc&amp;exact_package=chromium&amp;q=COMPILE_ASSERT%20VideoFrame%20WebVideoFrame&amp;type=cs&amp;l=35

&gt; Reopening for test coverage.  We cannot support untested codepaths in the compositor.

Thanks for reopening - it was not my intent to declare Mission Accomplished before some test coverage was achieved (which I assumed would require the chromium-side changes to land first).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513295</commentid>
    <comment_count>21</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-01 17:05:09 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; I&apos;m disappointed this was landed without tests.  New logic without tests is likely to break quickly.
&gt; 
&gt; Teach me to fish.  How does a change to the chromium compositor in WK get tested before the chromium-side implementation lands (and rolls into WK)?  I&apos;d love for that to exist independent of the chromium implementation.
&gt; 

Sorry for complaining and then running, I&apos;ve been a bit overloaded this week (and every other week it seems).

The things about this patch that I&apos;d most like to see test coverage for are:

1.) Frame lifetime - making sure we don&apos;t use try to draw from textures when we should not, making sure we pick up new frames when we should, and making sure we do the correct thing when the video frame format changes. I have some questions about this part of the patch as it exists, actually.

2.) Drawing frames - making sure that drawNativeTexture() actually puts the video frame we want on screen and isn&apos;t upside down or color inverted or unscaled. That function sets some geometry and texture units up, but that logic isn&apos;t tested.  It looks like a lot of this logic is identical to the logic we use for drawing other types - like RGBA video texture format, plugin layers, and single-tile content layers, and images. I would like to be able to unify the draw logic for these and have confidence that I&apos;m not breaking video display.

As for (1) I&apos;m not quite sure how it&apos;s supposed to work today. It seems that once a texture ID is grabbed from the VideoFrameProvider it is valid to bind and draw from, but for how long? Is it valid to draw from the texture an arbitrary number of times between frames? When the video is torn down or the decoding pipeline is torn down, at what point does it become no longer valid to draw from the native texture and how is that information communicated to the VideoLayer?  I think there are some hidden assumptions being made here, but without knowing what they are it&apos;s hard to know exactly how to test for them.

When a new frame becomes available, do we need to do anything other than re-binding the native texture ID to ensure the frame is available? Do we get a different native texture ID for each frame? Does the decoder take care of ensuring that we can never see an intermediate result, no matter when we draw?

As for (2) there&apos;s an example of a layout test to check the pixel output from a texture managed externally to the compositor here: https://bugs.webkit.org/show_bug.cgi?id=69027.  That test is set up for plugin layers.  The draw path for plugin layers seems pretty much identical to that for native textures.  In fact, if it used the same compositor drawing code then the plugin test could provide test coverage for videos too.  Since they are currently using different code to set up the draw transforms, attributes, etc we don&apos;t get that benefit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513303</commentid>
    <comment_count>22</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-01 17:07:42 -0800</bug_when>
    <thetext>&gt; I started out hoping to reuse the Plugin* layer/renderer for this (and rename it s/Plugin/External/g or somesuch) but was confounded by the fact that the layer/renderer needs to be decided on &amp; created when the element is created (WebMediaPlayerClientImpl in this case), which is too early to know whether software or hardware decode will be used (a decision that can only be reached after the media stream starts loading and demuxing).
&gt; 
&gt; I am not at all wedded to anything in this implementation (other than it working :)).  Happy to make changes if you have alternate suggestions.
&gt; 

I see, it&apos;s not quite as simple as I thought.  I&apos;d be happy to try some ways to simplify this if I had a way to tell if I was breaking the video path or not while doing so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517955</commentid>
    <comment_count>23</comment_count>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2011-12-08 17:15:10 -0800</bug_when>
    <thetext>[Sorry for the delay, also :)  (been sick/recovering)]

- Lifecycle: as long as the compositor can get a frame (as &quot;current&quot;), the chromium-side code keeps the backing texture in a state where it can be read from (and doesn&apos;t overwrite it with new data until it stops being gotten by the compositor).  I am not at all confident in this part of the CL.  Are you aware of any document/comments/anything that describes the intended lifecycle of LayerChromium&apos;s updateCompositorResources()/pushPropertiesTo() and CCLayerImpl&apos;s draw()?  (my impl cargo-culted what I found in  VideoLayer and PluginLayer).

- Drawing code: indeed, drawNativeTexture &amp; drawRGBA are virtually identical.  My first stab at it actually extracted it to a helper but that ended up having to be templated (to support the different *Program types) and looked sufficiently complicated that I decided to drop it.  Are you aware of any tests for the drawRGBA stuff (other than layout tests, which require the chromium side land, obvs)?

&gt; As for (1) I&apos;m not quite sure how it&apos;s supposed to work today. It seems that once a texture ID is grabbed from the VideoFrameProvider it is valid to bind and draw from, but for how long?

The provider tracks which frame is &quot;current&quot; and keeps it valid.
(chromium CL is http://codereview.chromium.org/8686010/ in case that helps)

&gt; Is it valid to draw from the texture an arbitrary number of times between frames? 

Yeah.

&gt; When the video is torn down or the decoding pipeline is torn down, at what point does it become no longer valid to draw from the native texture and how is that information communicated to the VideoLayer?  I think there are some hidden assumptions being made here, but without knowing what they are it&apos;s hard to know exactly how to test for them.

Agreed (and that the assumptions are hidden from me, as well).  Hopefully answers to my questions above will enable me to answer this.

&gt; When a new frame becomes available, do we need to do anything other than re-binding the native texture ID to ensure the frame is available? 

No.

&gt; Do we get a different native texture ID for each frame?

Maybe maybe not.  The provider reuses textures, so IDs will be re-seen over time.
(my impl uses 4 textures).

&gt; Does the decoder take care of ensuring that we can never see an intermediate result, no matter when we draw?

Yes; frames are only handed to compositor once ready, and aren&apos;t re-used by the decoder until they&apos;re no longer current.

&gt; As for (2) there&apos;s an example of a layout test to check the pixel output from a texture managed externally to the compositor here: https://bugs.webkit.org/show_bug.cgi?id=69027.

Ah; I was thinking using a layouttest for testing this would be blocked on the chromium impl, but I think you&apos;re saying that that&apos;s not the case, since the chromium/DumpRenderTree (in WK) can implement the client-side.  I&apos;ll look at doing this tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517979</commentid>
    <comment_count>24</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-08 17:42:26 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; [Sorry for the delay, also :)  (been sick/recovering)]
&gt; 
&gt; - Lifecycle: as long as the compositor can get a frame (as &quot;current&quot;), the chromium-side code keeps the backing texture in a state where it can be read from (and doesn&apos;t overwrite it with new data until it stops being gotten by the compositor).  I am not at all confident in this part of the CL.  Are you aware of any document/comments/anything that describes the intended lifecycle of LayerChromium&apos;s updateCompositorResources()/pushPropertiesTo() and CCLayerImpl&apos;s draw()?  (my impl cargo-culted what I found in  VideoLayer and PluginLayer).
&gt; 

updateCompositorResources() may be called at &quot;any&quot; time on the WebKit main thread.  After that function is called, pushPropertiesTo() will be called within the same task.  After those two functions are called for a given LayerChromium, CCLayerImpl::draw() may be called on that layer one or more times, potentially from a different thread.  In particular, CCLayerImpl::draw() may be called one or more times *after* the associated LayerChromium is destroyed.  CCLayerImpl::draw() will not be called after the compositor itself is destroyed, which is usually when the tab is destroyed, the page is navigated, or no more composited content exists on the page.

&gt; &gt; As for (1) I&apos;m not quite sure how it&apos;s supposed to work today. It seems that once a texture ID is grabbed from the VideoFrameProvider it is valid to bind and draw from, but for how long?
&gt; 
&gt; The provider tracks which frame is &quot;current&quot; and keeps it valid.
&gt; (chromium CL is http://codereview.chromium.org/8686010/ in case that helps)

But when does the provider go down? Does the provider have the same lifetime as the VideoLayerChromium?  The draw() might be called after the layer is destroyed.

Additionally, we may call draw() one or more times after a new video frame is requested from the provider via updateCompositorResources(). Does the provider rely on requesting a frame meaning that the last frame will never be drawn again?  If so I think there&apos;s a problem there.

I think that in general it might be worth wiring the provider up closer to the draw().  One big advantage of this is that in threaded compositor mode the draw() function can be called while the WebKit main thread is blocked.  If we wire up new frame notifications and texture IDs directly to the drawing thread, we can keep video playing smoothly even if there&apos;s a long running block of JavaScript or layout or whatnot running.  I can give you some pointers to a solution that looks like this offline if you&apos;d like.  Another advantage of moving closer to the draw() is that we can have more direct control over when certain texture IDs are used, etc.  A downside is that wiring up closer to the draw() means that multiple threads are involved, which complicated setup and shutdown.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522363</commentid>
    <comment_count>25</comment_count>
      <attachid>119524</attachid>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2011-12-15 17:11:58 -0800</bug_when>
    <thetext>Created attachment 119524
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522367</commentid>
    <comment_count>26</comment_count>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2011-12-15 17:13:34 -0800</bug_when>
    <thetext>Thanks for dropping the knowledge bombs.

Please see the attached patch, which I believe implements all the lifecycle fixes we&apos;ve been discussing.  VideoLayerChromium is gutted and almost all of its contents have migrated to CCVideoLayerImpl.
It is still test-free, but that&apos;s next!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522394</commentid>
    <comment_count>27</comment_count>
      <attachid>119524</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-15 17:43:48 -0800</bug_when>
    <thetext>Comment on attachment 119524
Patch

Attachment 119524 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10900448</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522406</commentid>
    <comment_count>28</comment_count>
      <attachid>119524</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-12-15 18:01:23 -0800</bug_when>
    <thetext>Comment on attachment 119524
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:97
&gt; +    default:

If you&apos;re handling all values of VideoFrameChromium::Format, it would be better to get rid of the &quot;default&quot; and move the return outside of the switch so that appropriate warnings will kick in if more enum values are added.

If you aren&apos;t handing all values of VideoFrameChromium::Format, why not (to get the benefit of compile time checks when someone adds a new enum value)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522472</commentid>
    <comment_count>29</comment_count>
      <attachid>119549</attachid>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2011-12-15 20:15:39 -0800</bug_when>
    <thetext>Created attachment 119549
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522473</commentid>
    <comment_count>30</comment_count>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2011-12-15 20:16:37 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; If you&apos;re handling all values of VideoFrameChromium::Format, it would be better to get rid of the &quot;default&quot; and move the return outside of the switch so that appropriate warnings will kick in if more enum values are added.
&gt; If you aren&apos;t handing all values of VideoFrameChromium::Format, why not (to get the benefit of compile time checks when someone adds a new enum value)?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522570</commentid>
    <comment_count>31</comment_count>
      <attachid>119549</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-15 23:26:10 -0800</bug_when>
    <thetext>Comment on attachment 119549
Patch

I&apos;m not sure I understand the design around m_providerMutex. All of the functions it guards (~CCVideoLayerImpl, CCVideoLayerImpl::setProvider, CCVideoLayerImpl::draw) run on the same thread.

I&apos;m also a bit uneasy about VideoLayerChromium holding a raw pointer to a CCVideoLayerImpl instance. There&apos;s another bit of logic elsewhere (that we may or may not keep) that drops the entire CC*LayerImpl tree when a tab goes to the background to save resources. Having direct pointers between the trees makes that sort of logic far more difficult.

Here&apos;s another suggestion for dealing with the provider shutdown issue that we use elsewhere in WebKit: declare a VideoFrameProviderClient interface with a void shutdown() function and add a setClient() call to VideoFrameProvider. Then maintain the invariant that whoever owns a pointer to a VideoFrameProvider has to set itself as the client and whenever a VideoFrameProvider instance goes away it needs to notify its client (a hand-rolled weak pointer). You will still need a bit of careful locking since during different points in the lifetime of the provider the client may live on different threads, but I think it&apos;s manageable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522578</commentid>
    <comment_count>32</comment_count>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2011-12-15 23:46:21 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; (From update of attachment 119549 [details])
&gt; I&apos;m not sure I understand the design around m_providerMutex. All of the functions it guards (~CCVideoLayerImpl, CCVideoLayerImpl::setProvider, CCVideoLayerImpl::draw) run on the same thread.

No, the middle one (CCVideoLayerImpl::setProvider) is called by VideoLayerChromium::releaseProvider (called by ~WebMediaPlayerClientImpl), which runs on the main thread.

&gt; I&apos;m also a bit uneasy about VideoLayerChromium holding a raw pointer to a CCVideoLayerImpl instance. There&apos;s another bit of logic elsewhere (that we may or may not keep) that drops the entire CC*LayerImpl tree when a tab goes to the background to save resources. Having direct pointers between the trees makes that sort of logic far more difficult.
&gt; Here&apos;s another suggestion for dealing with the provider shutdown issue that we use elsewhere in WebKit: declare a VideoFrameProviderClient interface with a void shutdown() function and add a setClient() call to VideoFrameProvider. Then maintain the invariant that whoever owns a pointer to a VideoFrameProvider has to set itself as the client and whenever a VideoFrameProvider instance goes away it needs to notify its client (a hand-rolled weak pointer). You will still need a bit of careful locking since during different points in the lifetime of the provider the client may live on different threads, but I think it&apos;s manageable.

I&apos;ll take a crack at this tomorrow morning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522588</commentid>
    <comment_count>33</comment_count>
      <attachid>119575</attachid>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2011-12-16 00:07:24 -0800</bug_when>
    <thetext>Created attachment 119575
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522591</commentid>
    <comment_count>34</comment_count>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2011-12-16 00:08:23 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; &gt; Here&apos;s another suggestion for dealing with the provider shutdown issue that we use elsewhere in WebKit: declare a VideoFrameProviderClient interface with a void shutdown() function and add a setClient() call to VideoFrameProvider. Then maintain the invariant that whoever owns a pointer to a VideoFrameProvider has to set itself as the client and whenever a VideoFrameProvider instance goes away it needs to notify its client (a hand-rolled weak pointer). You will still need a bit of careful locking since during different points in the lifetime of the provider the client may live on different threads, but I think it&apos;s manageable.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522780</commentid>
    <comment_count>35</comment_count>
      <attachid>119621</attachid>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2011-12-16 09:34:12 -0800</bug_when>
    <thetext>Created attachment 119621
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522817</commentid>
    <comment_count>36</comment_count>
      <attachid>119628</attachid>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2011-12-16 10:15:35 -0800</bug_when>
    <thetext>Created attachment 119628
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523955</commentid>
    <comment_count>37</comment_count>
      <attachid>119876</attachid>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2011-12-19 09:54:50 -0800</bug_when>
    <thetext>Created attachment 119876
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523956</commentid>
    <comment_count>38</comment_count>
      <attachid>119876</attachid>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2011-12-19 09:57:16 -0800</bug_when>
    <thetext>Comment on attachment 119876
Patch

Rebased to pick up r103086 (in preference to my revert of r102387).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524282</commentid>
    <comment_count>39</comment_count>
      <attachid>119876</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-19 16:39:36 -0800</bug_when>
    <thetext>Comment on attachment 119876
Patch

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

This looks good except for the case where the CCVideoLayerImpl dies before its provider. It looks like you have all the API surface necessary to handle this, but it just isn&apos;t quite wired up. R- for that and the &quot;No new tests (OOPS!).&quot; in the ChangeLog but other than that I think this is ready to land.

&gt; Source/WebCore/ChangeLog:3
&gt; +        Fix the life-cycle of video frames handled by VideoLayerChromium/CCVideoLayerImpl.

the preferred structure for ChangeLog entries is:

dateline

        one-line description of the patch (typically the bug title)
        https://bugs.webkit.org/show_bug.cgi?id=12345

        Reviewed by NOBODY (OOPS!).

        long form description of the patch, typically broken over
        multiple lines

        description of test coverage

        * list of files

&gt; Source/WebCore/ChangeLog:14
&gt; +        No new tests. (OOPS!)

this will fail an svn presubmit hook, you have to remove it from the ChangeLog entry yourself and replace it with a description of the test coverage for this patch (like the exiting compositing/video/ tests, for instance)

&gt; Source/WebCore/platform/graphics/chromium/VideoLayerChromium.h:57
&gt; +    virtual void stopUsingProvider();

nit: could you document that this is an implementation of the VideoFrameProvider::Client interface?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:74
&gt; +    ASSERT(!m_provider); // Cleared during VideoLayerChromium::releaseProvider().

I believe this comment is out of date, since VideoLayerChromium::releaseProvider() isn&apos;t relevant to this codepath any more.

What is supposed to happen if the CCVideoLayerChromium is destroyed before the VideoFrameProvider? I would expect that cause the client to call setVideoFrameProviderClient(0) on the provider, but it doesn&apos;t seem that&apos;s what is happening here.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:87
&gt; +static GC3Denum convertVFCFormatToGC3DFormat(VideoFrameChromium::Format vfcFormat)

we typically don&apos;t use abbreviations like &apos;vfc&apos; in variable/parameter names in WebKit. Here I think that &apos;format&apos; would be a fine variable name

&gt; Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.h:57
&gt; +    virtual void stopUsingProvider();

could you document that this is an implementation of VideoFrameProvider::Client, and that it can be called from any thread?

&gt; Source/WebKit/chromium/src/WebMediaPlayerClientImpl.cpp:624
&gt; +    client-&gt;m_videoFrameProviderClient = 0;

is there a strong reason to set this here instead of inside the WebMediaPlayerClientImpl c&apos;tor?

&gt; Source/WebKit/chromium/src/WebMediaPlayerClientImpl.h:164
&gt; +    Mutex m_compositingMutex; // Guards interaction between the main thread and compisiting thread.

typo &apos;compisiting&apos;-&gt;&apos;compositing&apos;

ideally mutexes should guard data. could you document what data this mutex guards (it looks like it&apos;s guarding the m_videoFrameProviderClient pointer and potentially m_currentideoFrame, if I&apos;m reading this correctly)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524325</commentid>
    <comment_count>40</comment_count>
      <attachid>119959</attachid>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2011-12-19 17:22:21 -0800</bug_when>
    <thetext>Created attachment 119959
Patch

Response to jamesr CR from #39</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524330</commentid>
    <comment_count>41</comment_count>
      <attachid>119959</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-19 17:30:00 -0800</bug_when>
    <thetext>Comment on attachment 119959
Patch

Looks great, thanks for your persistence. R=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524401</commentid>
    <comment_count>42</comment_count>
      <attachid>119959</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-19 20:28:09 -0800</bug_when>
    <thetext>Comment on attachment 119959
Patch

Clearing flags on attachment: 119959

Committed r103298: &lt;http://trac.webkit.org/changeset/103298&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524402</commentid>
    <comment_count>43</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-19 20:28:17 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116406</attachid>
            <date>2011-11-23 13:20:33 -0800</date>
            <delta_ts>2011-11-23 13:43:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73043-20111123132032.patch</filename>
            <type>text/plain</type>
            <size>15301</size>
            <attacher name="Ami Fischman">fischman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwNTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWI4OTk1YWViMTRlNmMz
NzU2ZGJmNGU2NjdmY2QwYmEyOWY4MmFkNy4uOTNiMjFlODJkM2M2NGE2M2ZiNzEwMDEzNzFlZmU4
ODE4OWI4MWI5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDExLTExLTIzICBBbWkg
RmlzY2htYW4gIDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgVGVhY2ggVmlkZW9M
YXllckNocm9taXVtIGhvdyB0byByZW5kZXIgbmF0aXZlIHRleHR1cmUgKHRvIHN1cHBvcnQgSFcg
dmlkZW8gZGVjb2RlKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTczMDQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLiAoZGVwZW5kcyBvbiBjaHJvbWl1bSBzdXBwb3J0IGxhbmRpbmcs
IGFuZCBzdXBwb3J0aW5nIEhXIGJlaW5nIGF2YWlsYWJsZSkKKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFj
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWRlb0xheWVy
TmF0aXZlVGV4dHVyZVByb2dyYW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1ZpZGVvRnJhbWVDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpW
aWRlb0xheWVyQ2hyb21pdW06OlZpZGVvTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3Jl
OjpWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6ZGV0ZXJtaW5lVGV4dHVyZUZvcm1hdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVt
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVy
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpzZXROYXRpdmVU
ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmRyYXcpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6ZHJhd05hdGl2ZVRleHR1cmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaDoK
KwogMjAxMS0xMS0xNiAgQWxleGFuZHJlIEVsaWFzICA8YWVsaWFzQGdvb2dsZS5jb20+CiAKICAg
ICAgICAgW2Nocm9taXVtXSBJbXByb3ZlbWVudHMgZm9yIHBhZ2Ugc2NhbGUgZGVsdGEgZHVyaW5n
IGNvbW1pdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAxYzJlY2FlM2EzZjY3YjYxNWRi
OWUyOThiNzIyNzZjNjQzYmQ2N2E5Li4zMDM3NGRjOWJlYjc1ZTJjY2U3YzY4MjQ4NjU5NzU1ZmE2
YzIzYTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEx
LTExLTIzICBBbWkgRmlzY2htYW4gIDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
VGVhY2ggVmlkZW9MYXllckNocm9taXVtIGhvdyB0byByZW5kZXIgbmF0aXZlIHRleHR1cmUgKHRv
IHN1cHBvcnQgSFcgdmlkZW8gZGVjb2RlKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTczMDQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViVmlkZW9GcmFtZS5oOgorICAgICAgICAqIHNy
Yy9WaWRlb0ZyYW1lQ2hyb21pdW1JbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GcmFt
ZUNocm9taXVtSW1wbDo6dGV4dHVyZUlkKToKKyAgICAgICAgKiBzcmMvVmlkZW9GcmFtZUNocm9t
aXVtSW1wbC5oOgorCiAyMDExLTExLTE2ICBBbGV4YW5kcmUgRWxpYXMgIDxhZWxpYXNAZ29vZ2xl
LmNvbT4KIAogICAgICAgICBbY2hyb21pdW1dIEltcHJvdmVtZW50cyBmb3IgcGFnZSBzY2FsZSBk
ZWx0YSBkdXJpbmcgY29tbWl0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApp
bmRleCBiYzlmMDAwYzIyMjY2OGFmOGE3YTZkYTc1NGQyZDYwYzZiMTgwYmMzLi4xYWZiOGM0OTEy
YWU0OWUyNzZhZDQ1MjJkMWEyOTllMzU2OGU2Y2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKQEAgLTMxMCw3ICszMTAsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd0xheWVycygpCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
c09udG9SZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NM
YXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyIsIHRoaXMs
IDApOwotICAgIAorCiAgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVuZGVyIHN1
cmZhY2VzLiBXZSB0cmF2ZXJzZSB0aGUgcmVuZGVyIHN1cmZhY2VzCiAgICAgLy8gZnJvbSBiYWNr
IHRvIGZyb250IHRvIGd1YXJhbnRlZSB0aGF0IG5lc3RlZCByZW5kZXIgc3VyZmFjZXMgZ2V0IHJl
bmRlcmVkIGluCiAgICAgLy8gdGhlIGNvcnJlY3Qgb3JkZXIuCkBAIC04MzMsNiArODMzLDE3IEBA
IGNvbnN0IENDVmlkZW9MYXllckltcGw6OllVVlByb2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dmlkZW9MYXllcllVVlByb2dyYW0oCiAgICAgcmV0dXJuIG1fdmlkZW9MYXllcllVVlByb2dy
YW0uZ2V0KCk7CiB9CiAKK2NvbnN0IENDVmlkZW9MYXllckltcGw6Ok5hdGl2ZVRleHR1cmVQcm9n
cmFtKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZGVvTGF5ZXJOYXRpdmVUZXh0dXJlUHJvZ3Jh
bSgpCit7CisgICAgaWYgKCFtX3ZpZGVvTGF5ZXJOYXRpdmVUZXh0dXJlUHJvZ3JhbSkKKyAgICAg
ICAgbV92aWRlb0xheWVyTmF0aXZlVGV4dHVyZVByb2dyYW0gPSBhZG9wdFB0cihuZXcgQ0NWaWRl
b0xheWVySW1wbDo6TmF0aXZlVGV4dHVyZVByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7CisgICAg
aWYgKCFtX3ZpZGVvTGF5ZXJOYXRpdmVUZXh0dXJlUHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSkgewor
ICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWRlb0xheWVyTmF0
aXZlVGV4dHVyZVByb2dyYW06OmluaXRpYWxpemUiLCB0aGlzLCAwKTsKKyAgICAgICAgbV92aWRl
b0xheWVyTmF0aXZlVGV4dHVyZVByb2dyYW0tPmluaXRpYWxpemUobV9jb250ZXh0LmdldCgpKTsK
KyAgICB9CisgICAgcmV0dXJuIG1fdmlkZW9MYXllck5hdGl2ZVRleHR1cmVQcm9ncmFtLmdldCgp
OworfQorCiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0
cygpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDE3NGM4ODQ0MDI1
MzkzYjZhNTZkZDhmNmIxNWJhMDU2NjJjNTQ4ODcuLjM2ZjM2ZjZmMTdjZmUxNDljZDFjZTA1MWNk
NmJhNWJmZjdmMTJkOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC0x
MjgsNiArMTI4LDcgQEAgcHVibGljOgogICAgIGNvbnN0IENDUGx1Z2luTGF5ZXJJbXBsOjpQcm9n
cmFtRmxpcCogcGx1Z2luTGF5ZXJQcm9ncmFtRmxpcCgpOwogICAgIGNvbnN0IENDVmlkZW9MYXll
ckltcGw6OlJHQkFQcm9ncmFtKiB2aWRlb0xheWVyUkdCQVByb2dyYW0oKTsKICAgICBjb25zdCBD
Q1ZpZGVvTGF5ZXJJbXBsOjpZVVZQcm9ncmFtKiB2aWRlb0xheWVyWVVWUHJvZ3JhbSgpOworICAg
IGNvbnN0IENDVmlkZW9MYXllckltcGw6Ok5hdGl2ZVRleHR1cmVQcm9ncmFtKiB2aWRlb0xheWVy
TmF0aXZlVGV4dHVyZVByb2dyYW0oKTsKIAogICAgIHZvaWQgZ2V0RnJhbWVidWZmZXJQaXhlbHMo
dm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0Jik7CiAKQEAgLTIxNyw2ICsyMTgsNyBAQCBwcml2
YXRlOgogICAgIE93blB0cjxDQ1JlbmRlclN1cmZhY2U6OlByb2dyYW1BQT4gbV9yZW5kZXJTdXJm
YWNlUHJvZ3JhbUFBOwogICAgIE93blB0cjxDQ1ZpZGVvTGF5ZXJJbXBsOjpSR0JBUHJvZ3JhbT4g
bV92aWRlb0xheWVyUkdCQVByb2dyYW07CiAgICAgT3duUHRyPENDVmlkZW9MYXllckltcGw6OllV
VlByb2dyYW0+IG1fdmlkZW9MYXllcllVVlByb2dyYW07CisgICAgT3duUHRyPENDVmlkZW9MYXll
ckltcGw6Ok5hdGl2ZVRleHR1cmVQcm9ncmFtPiBtX3ZpZGVvTGF5ZXJOYXRpdmVUZXh0dXJlUHJv
Z3JhbTsKIAogICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gbV9yZW5kZXJTdXJmYWNlVGV4dHVy
ZU1hbmFnZXI7CiAgICAgT3duUHRyPFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcj4gbV9jb250ZW50
c1RleHR1cmVBbGxvY2F0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9WaWRlb0ZyYW1lQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvRnJhbWVDaHJvbWl1bS5oCmluZGV4IDFiNmNk
YWJjN2Q3MDJhM2ZmMWE5NWEyN2E3NmQ0ZGMyNmE4NzI5N2YuLmM0YWJkOTY5ZDFlZDExZDc4NDM3
ZDUwOWMzNGRhZDk1ZWQ5MzQyYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvRnJhbWVDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvRnJhbWVDaHJvbWl1bS5oCkBAIC01
OSw2ICs1OSw4IEBAIHB1YmxpYzoKICAgICAgICAgTlYxMiwKICAgICAgICAgRW1wdHksCiAgICAg
ICAgIEFTQ0lJLAorICAgICAgICBJNDIwLAorICAgICAgICBOYXRpdmVUZXh0dXJlLAogICAgIH07
CiAKICAgICB2aXJ0dWFsIH5WaWRlb0ZyYW1lQ2hyb21pdW0oKTsKQEAgLTcyLDYgKzc0LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgY29uc3Qgdm9pZCogZGF0YSh1bnNpZ25lZCBwbGFuZSkgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSByZXF1aXJlZFRleHR1cmVTaXplKHVu
c2lnbmVkIHBsYW5lKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGhhc1BhZGRpbmdCeXRl
cyh1bnNpZ25lZCBwbGFuZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgdGV4dHVy
ZUlkKCkgY29uc3QgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Zp
ZGVvTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMjM5NDU2OGYyZDgyNzhmNTk3OWE3ZmUwYzU2MTVk
OWY3MjA5OGI2Ny4uNDEwNjRmOTQ0ZWMxMDhjMDcyYTc3ZTRjMzVhYjk3NjNmMmQxMTA5MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9M
YXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCkBAIC01Nyw2ICs1Nyw3IEBAIFZpZGVvTGF5
ZXJDaHJvbWl1bTo6VmlkZW9MYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUs
IFZpZGVvRnJhbWVQcm92CiAgICAgLCBtX2ZyYW1lRm9ybWF0KFZpZGVvRnJhbWVDaHJvbWl1bTo6
SW52YWxpZCkKICAgICAsIG1fcHJvdmlkZXIocHJvdmlkZXIpCiAgICAgLCBtX3BsYW5lcygwKQor
ICAgICwgbV9uYXRpdmVUZXh0dXJlSWQoMCkKIHsKIH0KIApAQCAtMTE1LDYgKzExNiwxNSBAQCB2
b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCwgQwogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgaWYg
KHRleHR1cmVGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpIHsKKyAgICAg
ICAgbV9uYXRpdmVUZXh0dXJlSWQgPSBmcmFtZS0+dGV4dHVyZUlkKCk7CisgICAgICAgIG1fbmF0
aXZlVGV4dHVyZVNpemUgPSBJbnRTaXplKGZyYW1lLT53aWR0aCgpLCBmcmFtZS0+aGVpZ2h0KCkp
OworICAgICAgICBtX25hdGl2ZVRleHR1cmVWaXNpYmxlU2l6ZSA9IEludFNpemUoZnJhbWUtPndp
ZHRoKCksIGZyYW1lLT5oZWlnaHQoKSk7CisgICAgICAgIHJlc2V0TmVlZHNEaXNwbGF5KCk7Cisg
ICAgICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKICAgICAvLyBBbGxvY2F0ZSB0ZXh0dXJlcyBmb3IgcGxhbmVzIGlmIHRoZXkg
YXJlIG5vdCBhbGxvY2F0ZWQgYWxyZWFkeSwgb3IKICAgICAvLyByZWFsbG9jYXRlIHRleHR1cmVz
IHRoYXQgYXJlIHRoZSB3cm9uZyBzaXplIGZvciB0aGUgZnJhbWUuCiAgICAgYm9vbCB0ZXh0dXJl
c1Jlc2VydmVkID0gcmVzZXJ2ZVRleHR1cmVzKGZyYW1lLCB0ZXh0dXJlRm9ybWF0KTsKQEAgLTE1
Nyw2ICsxNjcsOCBAQCB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhD
Q0xheWVySW1wbCogbGF5ZXIpCiAgICAgfQogICAgIGZvciAodW5zaWduZWQgaSA9IG1fcGxhbmVz
OyBpIDwgTWF4UGxhbmVzOyArK2kpCiAgICAgICAgIHZpZGVvTGF5ZXItPnNldFRleHR1cmUoaSwg
MCwgSW50U2l6ZSgpLCBJbnRTaXplKCkpOworICAgIGlmIChtX2ZyYW1lRm9ybWF0ID09IFZpZGVv
RnJhbWVDaHJvbWl1bTo6TmF0aXZlVGV4dHVyZSkKKyAgICAgICAgdmlkZW9MYXllci0+c2V0TmF0
aXZlVGV4dHVyZShtX25hdGl2ZVRleHR1cmVJZCwgbV9uYXRpdmVUZXh0dXJlU2l6ZSwgbV9uYXRp
dmVUZXh0dXJlVmlzaWJsZVNpemUpOwogfQogCiB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6c2V0
TGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCkBAIC0xNzksNiArMTkxLDggQEAg
R0MzRGVudW0gVmlkZW9MYXllckNocm9taXVtOjpkZXRlcm1pbmVUZXh0dXJlRm9ybWF0KGNvbnN0
IFZpZGVvRnJhbWVDaHJvbWl1bSogZnIKICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNE
OjpMVU1JTkFOQ0U7CiAgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OlJHQkE6CiAgICAgICAg
IHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKKyAgICBjYXNlIFZpZGVvRnJhbWVDaHJv
bWl1bTo6TmF0aXZlVGV4dHVyZToKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJEOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJD
aHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlk
ZW9MYXllckNocm9taXVtLmgKaW5kZXggNDkwNTcyMjVlNDMwY2U4ZGRiOGI0MzBiZmVmYzc0MTJj
YjUyMWIwNC4uNTE2YzhkMzg0N2MyYWRiNjRjNWJiZWZiN2M5OWNhYjVmNWFmYWJhMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXll
ckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVmlkZW9MYXllckNocm9taXVtLmgKQEAgLTg1LDYgKzg1LDEwIEBAIHByaXZhdGU6CiAgICAg
ZW51bSB7IE1heFBsYW5lcyA9IDMgfTsKICAgICBUZXh0dXJlIG1fdGV4dHVyZXNbTWF4UGxhbmVz
XTsKICAgICB1bnNpZ25lZCBtX3BsYW5lczsKKworICAgIHVuc2lnbmVkIG1fbmF0aXZlVGV4dHVy
ZUlkOworICAgIEludFNpemUgbV9uYXRpdmVUZXh0dXJlU2l6ZTsKKyAgICBJbnRTaXplIG1fbmF0
aXZlVGV4dHVyZVZpc2libGVTaXplOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJ
bXBsLmNwcAppbmRleCAxNzQzNjhlYTcyODQzYTZlMTYzZDIzZGQwZmE2MjYwZmUwZjMzYWJkLi42
YjM3ZTg2YTZjZTY4ZDUxYmE1MmNhNDhjMjNjNmY3NGY0NTRjZWM5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ZpZGVvTGF5ZXJJbXBsLmNwcApAQCAtNzcsNiArNzcsMTMgQEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJ
bXBsOjpzZXRUZXh0dXJlKHNpemVfdCBpbmRleCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQs
IGNvbnMKICAgICBtX3RleHR1cmVzW2luZGV4XS52aXNpYmxlU2l6ZSA9IHZpc2libGVTaXplOwog
fQogCit2b2lkIENDVmlkZW9MYXllckltcGw6OnNldE5hdGl2ZVRleHR1cmUoUGxhdGZvcm0zRE9i
amVjdCB0ZXh0dXJlSWQsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIHZpc2li
bGVTaXplKQoreworICAgIG1fbmF0aXZlVGV4dHVyZUlkID0gdGV4dHVyZUlkOworICAgIG1fbmF0
aXZlVGV4dHVyZVNpemUgPSBzaXplOworICAgIG1fbmF0aXZlVGV4dHVyZVZpc2libGVTaXplID0g
dmlzaWJsZVNpemU7Cit9CisKIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhdyhMYXllclJlbmRl
cmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1w
bFRocmVhZCgpKTsKQEAgLTkyLDYgKzk5LDkgQEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3
KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKICAgICBjYXNlIFZpZGVvRnJh
bWVDaHJvbWl1bTo6UkdCQToKICAgICAgICAgZHJhd1JHQkEobGF5ZXJSZW5kZXJlcik7CiAgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpOYXRpdmVUZXh0dXJlOgor
ICAgICAgICBkcmF3TmF0aXZlVGV4dHVyZShsYXllclJlbmRlcmVyKTsKKyAgICAgICAgYnJlYWs7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBvdGhlciBwYXRocy4K
ICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKQEAgLTE2Myw2ICsxNzMsMjcgQEAgdm9pZCBDQ1Zp
ZGVvTGF5ZXJJbXBsOjpkcmF3UkdCQShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVy
ZXIpIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7CiB9CiAK
K3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhd05hdGl2ZVRleHR1cmUoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKiBsYXllclJlbmRlcmVyKSBjb25zdAoreworICAgIGNvbnN0IE5hdGl2ZVRleHR1cmVQ
cm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dmlkZW9MYXllck5hdGl2ZVRleHR1cmVQ
cm9ncmFtKCk7CisgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7
CisKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXItPmNvbnRl
eHQoKTsKKworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFMCkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9uYXRpdmVUZXh0dXJlSWQpKTsK
KworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0o
KSkpOworICAgIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4obV9u
YXRpdmVUZXh0dXJlVmlzaWJsZVNpemUud2lkdGgoKSkgLyBtX25hdGl2ZVRleHR1cmVTaXplLndp
ZHRoKCk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00Zihwcm9ncmFtLT52ZXJ0
ZXhTaGFkZXIoKS50ZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCAwLCAwLCB3aWR0aFNjYWxlRmFjdG9y
LCAxKSk7CisKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZy
YWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKKworICAgIGxheWVyUmVuZGVy
ZXItPmRyYXdUZXh0dXJlZFF1YWQoZHJhd1RyYW5zZm9ybSgpLCBib3VuZHMoKS53aWR0aCgpLCBi
b3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwgbGF5ZXJSZW5kZXJlci0+c2hhcmVkR2Vv
bWV0cnlRdWFkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFt
LT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7Cit9CiAKIHZvaWQgQ0NW
aWRlb0xheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50IGlu
ZGVudCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaAppbmRleCBlNmE1NDRk
OGY1ODZkMzgyM2FjZGMzY2U1NjM1ZTQzODcwNDBjOTEyLi5lNTMxN2FkMzRkYWVmY2I1MDYxMTZl
OWQzODA4YmZhNWY5MmFiNzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oCkBAIC00
Niw2ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4
U2hhZGVyUG9zVGV4VHJhbnNmb3JtLCBGcmFnbWVudFNoYWRlclJHQkFUZXhGbGlwQWxwaGE+IFJH
QkFQcm9ncmFtOwogICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4
WVVWU3RyZXRjaCwgRnJhZ21lbnRTaGFkZXJZVVZWaWRlbz4gWVVWUHJvZ3JhbTsKKyAgICB0eXBl
ZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFRyYW5zZm9ybSwgRnJhZ21lbnRT
aGFkZXJSR0JBVGV4RmxpcEFscGhhPiBOYXRpdmVUZXh0dXJlUHJvZ3JhbTsKIAogICAgIHZpcnR1
YWwgdm9pZCBkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwogCkBAIC01NCw2ICs1NSw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldFNraXBzRHJhdyhib29sIHNraXBzRHJhdykgeyBtX3NraXBz
RHJhdyA9IHNraXBzRHJhdzsgfQogICAgIHZvaWQgc2V0RnJhbWVGb3JtYXQoVmlkZW9GcmFtZUNo
cm9taXVtOjpGb3JtYXQgZm9ybWF0KSB7IG1fZnJhbWVGb3JtYXQgPSBmb3JtYXQ7IH0KICAgICB2
b2lkIHNldFRleHR1cmUoc2l6ZV90LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCwgY29uc3Qg
SW50U2l6ZSYsIGNvbnN0IEludFNpemUmIHZpc2libGVTaXplKTsKKyAgICB2b2lkIHNldE5hdGl2
ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQsIGNvbnN0IEludFNpemUmLCBjb25z
dCBJbnRTaXplJiB2aXNpYmxlU2l6ZSk7CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ0NWaWRl
b0xheWVySW1wbChpbnQpOwpAQCAtNjgsNiArNzAsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBk
cmF3WVVWKExheWVyUmVuZGVyZXJDaHJvbWl1bSopIGNvbnN0OwogICAgIHZvaWQgZHJhd1JHQkEo
TGF5ZXJSZW5kZXJlckNocm9taXVtKikgY29uc3Q7CisgICAgdm9pZCBkcmF3TmF0aXZlVGV4dHVy
ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKSBjb25zdDsKIAogICAgIHN0YXRpYyBjb25zdCBmbG9h
dCB5dXYyUkdCWzldOwogICAgIHN0YXRpYyBjb25zdCBmbG9hdCB5dXZBZGp1c3RbM107CkBAIC03
NSw2ICs3OCwxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9za2lwc0RyYXc7CiAgICAgVmlkZW9G
cmFtZUNocm9taXVtOjpGb3JtYXQgbV9mcmFtZUZvcm1hdDsKICAgICBUZXh0dXJlIG1fdGV4dHVy
ZXNbM107CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fbmF0aXZlVGV4dHVyZUlkOworICAgIElu
dFNpemUgbV9uYXRpdmVUZXh0dXJlU2l6ZTsKKyAgICBJbnRTaXplIG1fbmF0aXZlVGV4dHVyZVZp
c2libGVTaXplOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViVmlkZW9GcmFtZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
VmlkZW9GcmFtZS5oCmluZGV4IDllNjcyNTA2MTg5YTljYzAyM2E2YTVmMWVlMDg5MjhjZWE1ZDI2
YzQuLjM4YWYyYTE5NWQ4ZDUzN2MxYzk2MmQ3YjY0ZTJjYzMyYTE1OWQzYTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZGVvRnJhbWUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWRlb0ZyYW1lLmgKQEAgLTQ5LDYgKzQ5LDgg
QEAgcHVibGljOgogICAgICAgICBGb3JtYXROVjEyLAogICAgICAgICBGb3JtYXRFbXB0eSwKICAg
ICAgICAgRm9ybWF0QVNDSUksCisgICAgICAgIEZvcm1hdEk0MjAsCisgICAgICAgIEZvcm1hdE5h
dGl2ZVRleHR1cmUsCiAgICAgfTsKIAogICAgIHZpcnR1YWwgfldlYlZpZGVvRnJhbWUoKSB7IH0K
QEAgLTU4LDYgKzYwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdW5zaWduZWQgcGxhbmVzKCkg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IHN0cmlkZSh1bnNpZ25lZCBwbGFuZSkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgY29uc3Qgdm9pZCogZGF0YSh1bnNpZ25lZCBwbGFuZSkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgdGV4dHVyZUlkKCkgY29uc3QgPSAwOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9WaWRlb0ZyYW1lQ2hyb21pdW1JbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1ZpZGVvRnJhbWVDaHJvbWl1bUltcGwuY3BwCmluZGV4IDg0MzkzMDhkN2YxNGIzYTc5NDZm
Njc0MmMzODc5YjgyOWFkNjI4ZTAuLmNlMzg5YWRjNjE0NmE0NTk3ODkwMmUzOGI0M2Y5MjZhMTFm
MTE2NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1ZpZGVvRnJhbWVD
aHJvbWl1bUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1ZpZGVvRnJh
bWVDaHJvbWl1bUltcGwuY3BwCkBAIC0xMjEsNCArMTIxLDExIEBAIGJvb2wgVmlkZW9GcmFtZUNo
cm9taXVtSW1wbDo6aGFzUGFkZGluZ0J5dGVzKHVuc2lnbmVkIHBsYW5lKSBjb25zdAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAordW5zaWduZWQgVmlkZW9GcmFtZUNocm9taXVtSW1wbDo6dGV4dHVy
ZUlkKCkgY29uc3QKK3sKKyAgICBpZiAobV93ZWJWaWRlb0ZyYW1lKQorICAgICAgICByZXR1cm4g
bV93ZWJWaWRlb0ZyYW1lLT50ZXh0dXJlSWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9W
aWRlb0ZyYW1lQ2hyb21pdW1JbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9WaWRl
b0ZyYW1lQ2hyb21pdW1JbXBsLmgKaW5kZXggMzg2NDcxZjZhMTliNWUwMzQ2NGE2Yzc1MDVjNDIw
MjUzYzMxMDdjOC4uNDQ2YWI1ZjU0MzBkNTFlNjI3ZWYwN2YzY2U0NTc4ZjU5YTE4Y2Q1NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvVmlkZW9GcmFtZUNocm9taXVtSW1w
bC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1ZpZGVvRnJhbWVDaHJvbWl1bUlt
cGwuaApAQCAtNTcsNiArNTcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCB2b2lkKiBk
YXRhKHVuc2lnbmVkIHBsYW5lKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUgcmVxdWlyZWRUZXh0dXJlU2l6ZSh1bnNpZ25lZCBwbGFuZSkgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIGhhc1BhZGRpbmdCeXRlcyh1bnNpZ25lZCBwbGFuZSkgY29uc3Q7CisgICAgdmly
dHVhbCB1bnNpZ25lZCB0ZXh0dXJlSWQoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBXZWJWaWRl
b0ZyYW1lKiBtX3dlYlZpZGVvRnJhbWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116414</attachid>
            <date>2011-11-23 13:43:35 -0800</date>
            <delta_ts>2011-11-23 14:46:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73043-20111123134334.patch</filename>
            <type>text/plain</type>
            <size>15376</size>
            <attacher name="Ami Fischman">fischman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwNTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWI4OTk1YWViMTRlNmMz
NzU2ZGJmNGU2NjdmY2QwYmEyOWY4MmFkNy4uOTNiMjFlODJkM2M2NGE2M2ZiNzEwMDEzNzFlZmU4
ODE4OWI4MWI5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDExLTExLTIzICBBbWkg
RmlzY2htYW4gIDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgVGVhY2ggVmlkZW9M
YXllckNocm9taXVtIGhvdyB0byByZW5kZXIgbmF0aXZlIHRleHR1cmUgKHRvIHN1cHBvcnQgSFcg
dmlkZW8gZGVjb2RlKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTczMDQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLiAoZGVwZW5kcyBvbiBjaHJvbWl1bSBzdXBwb3J0IGxhbmRpbmcs
IGFuZCBzdXBwb3J0aW5nIEhXIGJlaW5nIGF2YWlsYWJsZSkKKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFj
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWRlb0xheWVy
TmF0aXZlVGV4dHVyZVByb2dyYW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1ZpZGVvRnJhbWVDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpW
aWRlb0xheWVyQ2hyb21pdW06OlZpZGVvTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3Jl
OjpWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6ZGV0ZXJtaW5lVGV4dHVyZUZvcm1hdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVt
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVy
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpzZXROYXRpdmVU
ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmRyYXcpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6ZHJhd05hdGl2ZVRleHR1cmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaDoK
KwogMjAxMS0xMS0xNiAgQWxleGFuZHJlIEVsaWFzICA8YWVsaWFzQGdvb2dsZS5jb20+CiAKICAg
ICAgICAgW2Nocm9taXVtXSBJbXByb3ZlbWVudHMgZm9yIHBhZ2Ugc2NhbGUgZGVsdGEgZHVyaW5n
IGNvbW1pdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAxYzJlY2FlM2EzZjY3YjYxNWRi
OWUyOThiNzIyNzZjNjQzYmQ2N2E5Li4zMDM3NGRjOWJlYjc1ZTJjY2U3YzY4MjQ4NjU5NzU1ZmE2
YzIzYTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEx
LTExLTIzICBBbWkgRmlzY2htYW4gIDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
VGVhY2ggVmlkZW9MYXllckNocm9taXVtIGhvdyB0byByZW5kZXIgbmF0aXZlIHRleHR1cmUgKHRv
IHN1cHBvcnQgSFcgdmlkZW8gZGVjb2RlKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTczMDQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViVmlkZW9GcmFtZS5oOgorICAgICAgICAqIHNy
Yy9WaWRlb0ZyYW1lQ2hyb21pdW1JbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GcmFt
ZUNocm9taXVtSW1wbDo6dGV4dHVyZUlkKToKKyAgICAgICAgKiBzcmMvVmlkZW9GcmFtZUNocm9t
aXVtSW1wbC5oOgorCiAyMDExLTExLTE2ICBBbGV4YW5kcmUgRWxpYXMgIDxhZWxpYXNAZ29vZ2xl
LmNvbT4KIAogICAgICAgICBbY2hyb21pdW1dIEltcHJvdmVtZW50cyBmb3IgcGFnZSBzY2FsZSBk
ZWx0YSBkdXJpbmcgY29tbWl0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApp
bmRleCBiYzlmMDAwYzIyMjY2OGFmOGE3YTZkYTc1NGQyZDYwYzZiMTgwYmMzLi4xYWZiOGM0OTEy
YWU0OWUyNzZhZDQ1MjJkMWEyOTllMzU2OGU2Y2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKQEAgLTMxMCw3ICszMTAsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd0xheWVycygpCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
c09udG9SZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NM
YXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyIsIHRoaXMs
IDApOwotICAgIAorCiAgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVuZGVyIHN1
cmZhY2VzLiBXZSB0cmF2ZXJzZSB0aGUgcmVuZGVyIHN1cmZhY2VzCiAgICAgLy8gZnJvbSBiYWNr
IHRvIGZyb250IHRvIGd1YXJhbnRlZSB0aGF0IG5lc3RlZCByZW5kZXIgc3VyZmFjZXMgZ2V0IHJl
bmRlcmVkIGluCiAgICAgLy8gdGhlIGNvcnJlY3Qgb3JkZXIuCkBAIC04MzMsNiArODMzLDE3IEBA
IGNvbnN0IENDVmlkZW9MYXllckltcGw6OllVVlByb2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dmlkZW9MYXllcllVVlByb2dyYW0oCiAgICAgcmV0dXJuIG1fdmlkZW9MYXllcllVVlByb2dy
YW0uZ2V0KCk7CiB9CiAKK2NvbnN0IENDVmlkZW9MYXllckltcGw6Ok5hdGl2ZVRleHR1cmVQcm9n
cmFtKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZGVvTGF5ZXJOYXRpdmVUZXh0dXJlUHJvZ3Jh
bSgpCit7CisgICAgaWYgKCFtX3ZpZGVvTGF5ZXJOYXRpdmVUZXh0dXJlUHJvZ3JhbSkKKyAgICAg
ICAgbV92aWRlb0xheWVyTmF0aXZlVGV4dHVyZVByb2dyYW0gPSBhZG9wdFB0cihuZXcgQ0NWaWRl
b0xheWVySW1wbDo6TmF0aXZlVGV4dHVyZVByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7CisgICAg
aWYgKCFtX3ZpZGVvTGF5ZXJOYXRpdmVUZXh0dXJlUHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSkgewor
ICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWRlb0xheWVyTmF0
aXZlVGV4dHVyZVByb2dyYW06OmluaXRpYWxpemUiLCB0aGlzLCAwKTsKKyAgICAgICAgbV92aWRl
b0xheWVyTmF0aXZlVGV4dHVyZVByb2dyYW0tPmluaXRpYWxpemUobV9jb250ZXh0LmdldCgpKTsK
KyAgICB9CisgICAgcmV0dXJuIG1fdmlkZW9MYXllck5hdGl2ZVRleHR1cmVQcm9ncmFtLmdldCgp
OworfQorCiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0
cygpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDE3NGM4ODQ0MDI1
MzkzYjZhNTZkZDhmNmIxNWJhMDU2NjJjNTQ4ODcuLjM2ZjM2ZjZmMTdjZmUxNDljZDFjZTA1MWNk
NmJhNWJmZjdmMTJkOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC0x
MjgsNiArMTI4LDcgQEAgcHVibGljOgogICAgIGNvbnN0IENDUGx1Z2luTGF5ZXJJbXBsOjpQcm9n
cmFtRmxpcCogcGx1Z2luTGF5ZXJQcm9ncmFtRmxpcCgpOwogICAgIGNvbnN0IENDVmlkZW9MYXll
ckltcGw6OlJHQkFQcm9ncmFtKiB2aWRlb0xheWVyUkdCQVByb2dyYW0oKTsKICAgICBjb25zdCBD
Q1ZpZGVvTGF5ZXJJbXBsOjpZVVZQcm9ncmFtKiB2aWRlb0xheWVyWVVWUHJvZ3JhbSgpOworICAg
IGNvbnN0IENDVmlkZW9MYXllckltcGw6Ok5hdGl2ZVRleHR1cmVQcm9ncmFtKiB2aWRlb0xheWVy
TmF0aXZlVGV4dHVyZVByb2dyYW0oKTsKIAogICAgIHZvaWQgZ2V0RnJhbWVidWZmZXJQaXhlbHMo
dm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0Jik7CiAKQEAgLTIxNyw2ICsyMTgsNyBAQCBwcml2
YXRlOgogICAgIE93blB0cjxDQ1JlbmRlclN1cmZhY2U6OlByb2dyYW1BQT4gbV9yZW5kZXJTdXJm
YWNlUHJvZ3JhbUFBOwogICAgIE93blB0cjxDQ1ZpZGVvTGF5ZXJJbXBsOjpSR0JBUHJvZ3JhbT4g
bV92aWRlb0xheWVyUkdCQVByb2dyYW07CiAgICAgT3duUHRyPENDVmlkZW9MYXllckltcGw6OllV
VlByb2dyYW0+IG1fdmlkZW9MYXllcllVVlByb2dyYW07CisgICAgT3duUHRyPENDVmlkZW9MYXll
ckltcGw6Ok5hdGl2ZVRleHR1cmVQcm9ncmFtPiBtX3ZpZGVvTGF5ZXJOYXRpdmVUZXh0dXJlUHJv
Z3JhbTsKIAogICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gbV9yZW5kZXJTdXJmYWNlVGV4dHVy
ZU1hbmFnZXI7CiAgICAgT3duUHRyPFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcj4gbV9jb250ZW50
c1RleHR1cmVBbGxvY2F0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9WaWRlb0ZyYW1lQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvRnJhbWVDaHJvbWl1bS5oCmluZGV4IDFiNmNk
YWJjN2Q3MDJhM2ZmMWE5NWEyN2E3NmQ0ZGMyNmE4NzI5N2YuLmM0YWJkOTY5ZDFlZDExZDc4NDM3
ZDUwOWMzNGRhZDk1ZWQ5MzQyYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvRnJhbWVDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvRnJhbWVDaHJvbWl1bS5oCkBAIC01
OSw2ICs1OSw4IEBAIHB1YmxpYzoKICAgICAgICAgTlYxMiwKICAgICAgICAgRW1wdHksCiAgICAg
ICAgIEFTQ0lJLAorICAgICAgICBJNDIwLAorICAgICAgICBOYXRpdmVUZXh0dXJlLAogICAgIH07
CiAKICAgICB2aXJ0dWFsIH5WaWRlb0ZyYW1lQ2hyb21pdW0oKTsKQEAgLTcyLDYgKzc0LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgY29uc3Qgdm9pZCogZGF0YSh1bnNpZ25lZCBwbGFuZSkgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSByZXF1aXJlZFRleHR1cmVTaXplKHVu
c2lnbmVkIHBsYW5lKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGhhc1BhZGRpbmdCeXRl
cyh1bnNpZ25lZCBwbGFuZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgdGV4dHVy
ZUlkKCkgY29uc3QgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Zp
ZGVvTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMjM5NDU2OGYyZDgyNzhmNTk3OWE3ZmUwYzU2MTVk
OWY3MjA5OGI2Ny4uNDEwNjRmOTQ0ZWMxMDhjMDcyYTc3ZTRjMzVhYjk3NjNmMmQxMTA5MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9M
YXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCkBAIC01Nyw2ICs1Nyw3IEBAIFZpZGVvTGF5
ZXJDaHJvbWl1bTo6VmlkZW9MYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUs
IFZpZGVvRnJhbWVQcm92CiAgICAgLCBtX2ZyYW1lRm9ybWF0KFZpZGVvRnJhbWVDaHJvbWl1bTo6
SW52YWxpZCkKICAgICAsIG1fcHJvdmlkZXIocHJvdmlkZXIpCiAgICAgLCBtX3BsYW5lcygwKQor
ICAgICwgbV9uYXRpdmVUZXh0dXJlSWQoMCkKIHsKIH0KIApAQCAtMTE1LDYgKzExNiwxNSBAQCB2
b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCwgQwogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgaWYg
KHRleHR1cmVGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpIHsKKyAgICAg
ICAgbV9uYXRpdmVUZXh0dXJlSWQgPSBmcmFtZS0+dGV4dHVyZUlkKCk7CisgICAgICAgIG1fbmF0
aXZlVGV4dHVyZVNpemUgPSBJbnRTaXplKGZyYW1lLT53aWR0aCgpLCBmcmFtZS0+aGVpZ2h0KCkp
OworICAgICAgICBtX25hdGl2ZVRleHR1cmVWaXNpYmxlU2l6ZSA9IEludFNpemUoZnJhbWUtPndp
ZHRoKCksIGZyYW1lLT5oZWlnaHQoKSk7CisgICAgICAgIHJlc2V0TmVlZHNEaXNwbGF5KCk7Cisg
ICAgICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKICAgICAvLyBBbGxvY2F0ZSB0ZXh0dXJlcyBmb3IgcGxhbmVzIGlmIHRoZXkg
YXJlIG5vdCBhbGxvY2F0ZWQgYWxyZWFkeSwgb3IKICAgICAvLyByZWFsbG9jYXRlIHRleHR1cmVz
IHRoYXQgYXJlIHRoZSB3cm9uZyBzaXplIGZvciB0aGUgZnJhbWUuCiAgICAgYm9vbCB0ZXh0dXJl
c1Jlc2VydmVkID0gcmVzZXJ2ZVRleHR1cmVzKGZyYW1lLCB0ZXh0dXJlRm9ybWF0KTsKQEAgLTE1
Nyw2ICsxNjcsOCBAQCB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhD
Q0xheWVySW1wbCogbGF5ZXIpCiAgICAgfQogICAgIGZvciAodW5zaWduZWQgaSA9IG1fcGxhbmVz
OyBpIDwgTWF4UGxhbmVzOyArK2kpCiAgICAgICAgIHZpZGVvTGF5ZXItPnNldFRleHR1cmUoaSwg
MCwgSW50U2l6ZSgpLCBJbnRTaXplKCkpOworICAgIGlmIChtX2ZyYW1lRm9ybWF0ID09IFZpZGVv
RnJhbWVDaHJvbWl1bTo6TmF0aXZlVGV4dHVyZSkKKyAgICAgICAgdmlkZW9MYXllci0+c2V0TmF0
aXZlVGV4dHVyZShtX25hdGl2ZVRleHR1cmVJZCwgbV9uYXRpdmVUZXh0dXJlU2l6ZSwgbV9uYXRp
dmVUZXh0dXJlVmlzaWJsZVNpemUpOwogfQogCiB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6c2V0
TGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCkBAIC0xNzksNiArMTkxLDggQEAg
R0MzRGVudW0gVmlkZW9MYXllckNocm9taXVtOjpkZXRlcm1pbmVUZXh0dXJlRm9ybWF0KGNvbnN0
IFZpZGVvRnJhbWVDaHJvbWl1bSogZnIKICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNE
OjpMVU1JTkFOQ0U7CiAgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OlJHQkE6CiAgICAgICAg
IHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKKyAgICBjYXNlIFZpZGVvRnJhbWVDaHJv
bWl1bTo6TmF0aXZlVGV4dHVyZToKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJEOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJD
aHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlk
ZW9MYXllckNocm9taXVtLmgKaW5kZXggNDkwNTcyMjVlNDMwY2U4ZGRiOGI0MzBiZmVmYzc0MTJj
YjUyMWIwNC4uNTE2YzhkMzg0N2MyYWRiNjRjNWJiZWZiN2M5OWNhYjVmNWFmYWJhMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXll
ckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVmlkZW9MYXllckNocm9taXVtLmgKQEAgLTg1LDYgKzg1LDEwIEBAIHByaXZhdGU6CiAgICAg
ZW51bSB7IE1heFBsYW5lcyA9IDMgfTsKICAgICBUZXh0dXJlIG1fdGV4dHVyZXNbTWF4UGxhbmVz
XTsKICAgICB1bnNpZ25lZCBtX3BsYW5lczsKKworICAgIHVuc2lnbmVkIG1fbmF0aXZlVGV4dHVy
ZUlkOworICAgIEludFNpemUgbV9uYXRpdmVUZXh0dXJlU2l6ZTsKKyAgICBJbnRTaXplIG1fbmF0
aXZlVGV4dHVyZVZpc2libGVTaXplOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJ
bXBsLmNwcAppbmRleCAxNzQzNjhlYTcyODQzYTZlMTYzZDIzZGQwZmE2MjYwZmUwZjMzYWJkLi42
YjM3ZTg2YTZjZTY4ZDUxYmE1MmNhNDhjMjNjNmY3NGY0NTRjZWM5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ZpZGVvTGF5ZXJJbXBsLmNwcApAQCAtNzcsNiArNzcsMTMgQEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJ
bXBsOjpzZXRUZXh0dXJlKHNpemVfdCBpbmRleCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQs
IGNvbnMKICAgICBtX3RleHR1cmVzW2luZGV4XS52aXNpYmxlU2l6ZSA9IHZpc2libGVTaXplOwog
fQogCit2b2lkIENDVmlkZW9MYXllckltcGw6OnNldE5hdGl2ZVRleHR1cmUoUGxhdGZvcm0zRE9i
amVjdCB0ZXh0dXJlSWQsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIHZpc2li
bGVTaXplKQoreworICAgIG1fbmF0aXZlVGV4dHVyZUlkID0gdGV4dHVyZUlkOworICAgIG1fbmF0
aXZlVGV4dHVyZVNpemUgPSBzaXplOworICAgIG1fbmF0aXZlVGV4dHVyZVZpc2libGVTaXplID0g
dmlzaWJsZVNpemU7Cit9CisKIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhdyhMYXllclJlbmRl
cmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1w
bFRocmVhZCgpKTsKQEAgLTkyLDYgKzk5LDkgQEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3
KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKICAgICBjYXNlIFZpZGVvRnJh
bWVDaHJvbWl1bTo6UkdCQToKICAgICAgICAgZHJhd1JHQkEobGF5ZXJSZW5kZXJlcik7CiAgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpOYXRpdmVUZXh0dXJlOgor
ICAgICAgICBkcmF3TmF0aXZlVGV4dHVyZShsYXllclJlbmRlcmVyKTsKKyAgICAgICAgYnJlYWs7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBvdGhlciBwYXRocy4K
ICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKQEAgLTE2Myw2ICsxNzMsMjcgQEAgdm9pZCBDQ1Zp
ZGVvTGF5ZXJJbXBsOjpkcmF3UkdCQShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVy
ZXIpIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7CiB9CiAK
K3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhd05hdGl2ZVRleHR1cmUoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKiBsYXllclJlbmRlcmVyKSBjb25zdAoreworICAgIGNvbnN0IE5hdGl2ZVRleHR1cmVQ
cm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dmlkZW9MYXllck5hdGl2ZVRleHR1cmVQ
cm9ncmFtKCk7CisgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7
CisKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXItPmNvbnRl
eHQoKTsKKworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFMCkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9uYXRpdmVUZXh0dXJlSWQpKTsK
KworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0o
KSkpOworICAgIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4obV9u
YXRpdmVUZXh0dXJlVmlzaWJsZVNpemUud2lkdGgoKSkgLyBtX25hdGl2ZVRleHR1cmVTaXplLndp
ZHRoKCk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00Zihwcm9ncmFtLT52ZXJ0
ZXhTaGFkZXIoKS50ZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCAwLCAwLCB3aWR0aFNjYWxlRmFjdG9y
LCAxKSk7CisKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZy
YWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKKworICAgIGxheWVyUmVuZGVy
ZXItPmRyYXdUZXh0dXJlZFF1YWQoZHJhd1RyYW5zZm9ybSgpLCBib3VuZHMoKS53aWR0aCgpLCBi
b3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwgbGF5ZXJSZW5kZXJlci0+c2hhcmVkR2Vv
bWV0cnlRdWFkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFt
LT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7Cit9CiAKIHZvaWQgQ0NW
aWRlb0xheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50IGlu
ZGVudCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaAppbmRleCBlNmE1NDRk
OGY1ODZkMzgyM2FjZGMzY2U1NjM1ZTQzODcwNDBjOTEyLi5lNTMxN2FkMzRkYWVmY2I1MDYxMTZl
OWQzODA4YmZhNWY5MmFiNzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oCkBAIC00
Niw2ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4
U2hhZGVyUG9zVGV4VHJhbnNmb3JtLCBGcmFnbWVudFNoYWRlclJHQkFUZXhGbGlwQWxwaGE+IFJH
QkFQcm9ncmFtOwogICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4
WVVWU3RyZXRjaCwgRnJhZ21lbnRTaGFkZXJZVVZWaWRlbz4gWVVWUHJvZ3JhbTsKKyAgICB0eXBl
ZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFRyYW5zZm9ybSwgRnJhZ21lbnRT
aGFkZXJSR0JBVGV4RmxpcEFscGhhPiBOYXRpdmVUZXh0dXJlUHJvZ3JhbTsKIAogICAgIHZpcnR1
YWwgdm9pZCBkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwogCkBAIC01NCw2ICs1NSw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldFNraXBzRHJhdyhib29sIHNraXBzRHJhdykgeyBtX3NraXBz
RHJhdyA9IHNraXBzRHJhdzsgfQogICAgIHZvaWQgc2V0RnJhbWVGb3JtYXQoVmlkZW9GcmFtZUNo
cm9taXVtOjpGb3JtYXQgZm9ybWF0KSB7IG1fZnJhbWVGb3JtYXQgPSBmb3JtYXQ7IH0KICAgICB2
b2lkIHNldFRleHR1cmUoc2l6ZV90LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCwgY29uc3Qg
SW50U2l6ZSYsIGNvbnN0IEludFNpemUmIHZpc2libGVTaXplKTsKKyAgICB2b2lkIHNldE5hdGl2
ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQsIGNvbnN0IEludFNpemUmLCBjb25z
dCBJbnRTaXplJiB2aXNpYmxlU2l6ZSk7CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ0NWaWRl
b0xheWVySW1wbChpbnQpOwpAQCAtNjgsNiArNzAsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBk
cmF3WVVWKExheWVyUmVuZGVyZXJDaHJvbWl1bSopIGNvbnN0OwogICAgIHZvaWQgZHJhd1JHQkEo
TGF5ZXJSZW5kZXJlckNocm9taXVtKikgY29uc3Q7CisgICAgdm9pZCBkcmF3TmF0aXZlVGV4dHVy
ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKSBjb25zdDsKIAogICAgIHN0YXRpYyBjb25zdCBmbG9h
dCB5dXYyUkdCWzldOwogICAgIHN0YXRpYyBjb25zdCBmbG9hdCB5dXZBZGp1c3RbM107CkBAIC03
NSw2ICs3OCwxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9za2lwc0RyYXc7CiAgICAgVmlkZW9G
cmFtZUNocm9taXVtOjpGb3JtYXQgbV9mcmFtZUZvcm1hdDsKICAgICBUZXh0dXJlIG1fdGV4dHVy
ZXNbM107CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fbmF0aXZlVGV4dHVyZUlkOworICAgIElu
dFNpemUgbV9uYXRpdmVUZXh0dXJlU2l6ZTsKKyAgICBJbnRTaXplIG1fbmF0aXZlVGV4dHVyZVZp
c2libGVTaXplOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViVmlkZW9GcmFtZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
VmlkZW9GcmFtZS5oCmluZGV4IDllNjcyNTA2MTg5YTljYzAyM2E2YTVmMWVlMDg5MjhjZWE1ZDI2
YzQuLjFhNWJhOTZhZDEyNzFkNDkxMTg3YmUzMjllMDdhNzgxM2ZiMThkY2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZGVvRnJhbWUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWRlb0ZyYW1lLmgKQEAgLTQ5LDYgKzQ5LDgg
QEAgcHVibGljOgogICAgICAgICBGb3JtYXROVjEyLAogICAgICAgICBGb3JtYXRFbXB0eSwKICAg
ICAgICAgRm9ybWF0QVNDSUksCisgICAgICAgIEZvcm1hdEk0MjAsCisgICAgICAgIEZvcm1hdE5h
dGl2ZVRleHR1cmUsCiAgICAgfTsKIAogICAgIHZpcnR1YWwgfldlYlZpZGVvRnJhbWUoKSB7IH0K
QEAgLTU4LDYgKzYwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdW5zaWduZWQgcGxhbmVzKCkg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IHN0cmlkZSh1bnNpZ25lZCBwbGFuZSkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgY29uc3Qgdm9pZCogZGF0YSh1bnNpZ25lZCBwbGFuZSkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgdGV4dHVyZUlkKCkgY29uc3QgeyByZXR1cm4gMDsg
fSAvLyBGSVhNRTogbWFrZSBwdXJlIHZpcnR1YWwgb25jZSBjaHJvbWl1bS1zaWRlIGxhbmRzIChi
dWcgNzMwNDgpLgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9WaWRlb0ZyYW1lQ2hyb21pdW1JbXBsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1ZpZGVvRnJhbWVDaHJvbWl1bUltcGwuY3BwCmluZGV4IDg0
MzkzMDhkN2YxNGIzYTc5NDZmNjc0MmMzODc5YjgyOWFkNjI4ZTAuLmNlMzg5YWRjNjE0NmE0NTk3
ODkwMmUzOGI0M2Y5MjZhMTFmMTE2NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1ZpZGVvRnJhbWVDaHJvbWl1bUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1ZpZGVvRnJhbWVDaHJvbWl1bUltcGwuY3BwCkBAIC0xMjEsNCArMTIxLDExIEBA
IGJvb2wgVmlkZW9GcmFtZUNocm9taXVtSW1wbDo6aGFzUGFkZGluZ0J5dGVzKHVuc2lnbmVkIHBs
YW5lKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAordW5zaWduZWQgVmlkZW9GcmFtZUNo
cm9taXVtSW1wbDo6dGV4dHVyZUlkKCkgY29uc3QKK3sKKyAgICBpZiAobV93ZWJWaWRlb0ZyYW1l
KQorICAgICAgICByZXR1cm4gbV93ZWJWaWRlb0ZyYW1lLT50ZXh0dXJlSWQoKTsKKyAgICByZXR1
cm4gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9WaWRlb0ZyYW1lQ2hyb21pdW1JbXBsLmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9WaWRlb0ZyYW1lQ2hyb21pdW1JbXBsLmgKaW5kZXggMzg2NDcxZjZhMTli
NWUwMzQ2NGE2Yzc1MDVjNDIwMjUzYzMxMDdjOC4uNDQ2YWI1ZjU0MzBkNTFlNjI3ZWYwN2YzY2U0
NTc4ZjU5YTE4Y2Q1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvVmlk
ZW9GcmFtZUNocm9taXVtSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1Zp
ZGVvRnJhbWVDaHJvbWl1bUltcGwuaApAQCAtNTcsNiArNTcsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBjb25zdCB2b2lkKiBkYXRhKHVuc2lnbmVkIHBsYW5lKSBjb25zdDsKICAgICB2aXJ0dWFs
IGNvbnN0IFdlYkNvcmU6OkludFNpemUgcmVxdWlyZWRUZXh0dXJlU2l6ZSh1bnNpZ25lZCBwbGFu
ZSkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGhhc1BhZGRpbmdCeXRlcyh1bnNpZ25lZCBwbGFu
ZSkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCB0ZXh0dXJlSWQoKSBjb25zdDsKIAogcHJp
dmF0ZToKICAgICBXZWJWaWRlb0ZyYW1lKiBtX3dlYlZpZGVvRnJhbWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116432</attachid>
            <date>2011-11-23 14:47:00 -0800</date>
            <delta_ts>2011-12-15 17:11:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73043-20111123144659.patch</filename>
            <type>text/plain</type>
            <size>15748</size>
            <attacher name="Ami Fischman">fischman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwNTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWI4OTk1YWViMTRlNmMz
NzU2ZGJmNGU2NjdmY2QwYmEyOWY4MmFkNy4uOTNiMjFlODJkM2M2NGE2M2ZiNzEwMDEzNzFlZmU4
ODE4OWI4MWI5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDExLTExLTIzICBBbWkg
RmlzY2htYW4gIDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgVGVhY2ggVmlkZW9M
YXllckNocm9taXVtIGhvdyB0byByZW5kZXIgbmF0aXZlIHRleHR1cmUgKHRvIHN1cHBvcnQgSFcg
dmlkZW8gZGVjb2RlKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTczMDQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLiAoZGVwZW5kcyBvbiBjaHJvbWl1bSBzdXBwb3J0IGxhbmRpbmcs
IGFuZCBzdXBwb3J0aW5nIEhXIGJlaW5nIGF2YWlsYWJsZSkKKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFj
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWRlb0xheWVy
TmF0aXZlVGV4dHVyZVByb2dyYW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1ZpZGVvRnJhbWVDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpW
aWRlb0xheWVyQ2hyb21pdW06OlZpZGVvTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3Jl
OjpWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6ZGV0ZXJtaW5lVGV4dHVyZUZvcm1hdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVt
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVy
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpzZXROYXRpdmVU
ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmRyYXcpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6ZHJhd05hdGl2ZVRleHR1cmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaDoK
KwogMjAxMS0xMS0xNiAgQWxleGFuZHJlIEVsaWFzICA8YWVsaWFzQGdvb2dsZS5jb20+CiAKICAg
ICAgICAgW2Nocm9taXVtXSBJbXByb3ZlbWVudHMgZm9yIHBhZ2Ugc2NhbGUgZGVsdGEgZHVyaW5n
IGNvbW1pdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAxYzJlY2FlM2EzZjY3YjYxNWRi
OWUyOThiNzIyNzZjNjQzYmQ2N2E5Li4zMDM3NGRjOWJlYjc1ZTJjY2U3YzY4MjQ4NjU5NzU1ZmE2
YzIzYTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEx
LTExLTIzICBBbWkgRmlzY2htYW4gIDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
VGVhY2ggVmlkZW9MYXllckNocm9taXVtIGhvdyB0byByZW5kZXIgbmF0aXZlIHRleHR1cmUgKHRv
IHN1cHBvcnQgSFcgdmlkZW8gZGVjb2RlKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTczMDQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViVmlkZW9GcmFtZS5oOgorICAgICAgICAqIHNy
Yy9WaWRlb0ZyYW1lQ2hyb21pdW1JbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VmlkZW9GcmFt
ZUNocm9taXVtSW1wbDo6dGV4dHVyZUlkKToKKyAgICAgICAgKiBzcmMvVmlkZW9GcmFtZUNocm9t
aXVtSW1wbC5oOgorCiAyMDExLTExLTE2ICBBbGV4YW5kcmUgRWxpYXMgIDxhZWxpYXNAZ29vZ2xl
LmNvbT4KIAogICAgICAgICBbY2hyb21pdW1dIEltcHJvdmVtZW50cyBmb3IgcGFnZSBzY2FsZSBk
ZWx0YSBkdXJpbmcgY29tbWl0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApp
bmRleCBiYzlmMDAwYzIyMjY2OGFmOGE3YTZkYTc1NGQyZDYwYzZiMTgwYmMzLi4xYWZiOGM0OTEy
YWU0OWUyNzZhZDQ1MjJkMWEyOTllMzU2OGU2Y2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKQEAgLTMxMCw3ICszMTAsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd0xheWVycygpCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
c09udG9SZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NM
YXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyIsIHRoaXMs
IDApOwotICAgIAorCiAgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVuZGVyIHN1
cmZhY2VzLiBXZSB0cmF2ZXJzZSB0aGUgcmVuZGVyIHN1cmZhY2VzCiAgICAgLy8gZnJvbSBiYWNr
IHRvIGZyb250IHRvIGd1YXJhbnRlZSB0aGF0IG5lc3RlZCByZW5kZXIgc3VyZmFjZXMgZ2V0IHJl
bmRlcmVkIGluCiAgICAgLy8gdGhlIGNvcnJlY3Qgb3JkZXIuCkBAIC04MzMsNiArODMzLDE3IEBA
IGNvbnN0IENDVmlkZW9MYXllckltcGw6OllVVlByb2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dmlkZW9MYXllcllVVlByb2dyYW0oCiAgICAgcmV0dXJuIG1fdmlkZW9MYXllcllVVlByb2dy
YW0uZ2V0KCk7CiB9CiAKK2NvbnN0IENDVmlkZW9MYXllckltcGw6Ok5hdGl2ZVRleHR1cmVQcm9n
cmFtKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZGVvTGF5ZXJOYXRpdmVUZXh0dXJlUHJvZ3Jh
bSgpCit7CisgICAgaWYgKCFtX3ZpZGVvTGF5ZXJOYXRpdmVUZXh0dXJlUHJvZ3JhbSkKKyAgICAg
ICAgbV92aWRlb0xheWVyTmF0aXZlVGV4dHVyZVByb2dyYW0gPSBhZG9wdFB0cihuZXcgQ0NWaWRl
b0xheWVySW1wbDo6TmF0aXZlVGV4dHVyZVByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7CisgICAg
aWYgKCFtX3ZpZGVvTGF5ZXJOYXRpdmVUZXh0dXJlUHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSkgewor
ICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWRlb0xheWVyTmF0
aXZlVGV4dHVyZVByb2dyYW06OmluaXRpYWxpemUiLCB0aGlzLCAwKTsKKyAgICAgICAgbV92aWRl
b0xheWVyTmF0aXZlVGV4dHVyZVByb2dyYW0tPmluaXRpYWxpemUobV9jb250ZXh0LmdldCgpKTsK
KyAgICB9CisgICAgcmV0dXJuIG1fdmlkZW9MYXllck5hdGl2ZVRleHR1cmVQcm9ncmFtLmdldCgp
OworfQorCiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0
cygpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDE3NGM4ODQ0MDI1
MzkzYjZhNTZkZDhmNmIxNWJhMDU2NjJjNTQ4ODcuLjM2ZjM2ZjZmMTdjZmUxNDljZDFjZTA1MWNk
NmJhNWJmZjdmMTJkOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC0x
MjgsNiArMTI4LDcgQEAgcHVibGljOgogICAgIGNvbnN0IENDUGx1Z2luTGF5ZXJJbXBsOjpQcm9n
cmFtRmxpcCogcGx1Z2luTGF5ZXJQcm9ncmFtRmxpcCgpOwogICAgIGNvbnN0IENDVmlkZW9MYXll
ckltcGw6OlJHQkFQcm9ncmFtKiB2aWRlb0xheWVyUkdCQVByb2dyYW0oKTsKICAgICBjb25zdCBD
Q1ZpZGVvTGF5ZXJJbXBsOjpZVVZQcm9ncmFtKiB2aWRlb0xheWVyWVVWUHJvZ3JhbSgpOworICAg
IGNvbnN0IENDVmlkZW9MYXllckltcGw6Ok5hdGl2ZVRleHR1cmVQcm9ncmFtKiB2aWRlb0xheWVy
TmF0aXZlVGV4dHVyZVByb2dyYW0oKTsKIAogICAgIHZvaWQgZ2V0RnJhbWVidWZmZXJQaXhlbHMo
dm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0Jik7CiAKQEAgLTIxNyw2ICsyMTgsNyBAQCBwcml2
YXRlOgogICAgIE93blB0cjxDQ1JlbmRlclN1cmZhY2U6OlByb2dyYW1BQT4gbV9yZW5kZXJTdXJm
YWNlUHJvZ3JhbUFBOwogICAgIE93blB0cjxDQ1ZpZGVvTGF5ZXJJbXBsOjpSR0JBUHJvZ3JhbT4g
bV92aWRlb0xheWVyUkdCQVByb2dyYW07CiAgICAgT3duUHRyPENDVmlkZW9MYXllckltcGw6OllV
VlByb2dyYW0+IG1fdmlkZW9MYXllcllVVlByb2dyYW07CisgICAgT3duUHRyPENDVmlkZW9MYXll
ckltcGw6Ok5hdGl2ZVRleHR1cmVQcm9ncmFtPiBtX3ZpZGVvTGF5ZXJOYXRpdmVUZXh0dXJlUHJv
Z3JhbTsKIAogICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gbV9yZW5kZXJTdXJmYWNlVGV4dHVy
ZU1hbmFnZXI7CiAgICAgT3duUHRyPFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcj4gbV9jb250ZW50
c1RleHR1cmVBbGxvY2F0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9WaWRlb0ZyYW1lQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvRnJhbWVDaHJvbWl1bS5oCmluZGV4IDFiNmNk
YWJjN2Q3MDJhM2ZmMWE5NWEyN2E3NmQ0ZGMyNmE4NzI5N2YuLmM0YWJkOTY5ZDFlZDExZDc4NDM3
ZDUwOWMzNGRhZDk1ZWQ5MzQyYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvRnJhbWVDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvRnJhbWVDaHJvbWl1bS5oCkBAIC01
OSw2ICs1OSw4IEBAIHB1YmxpYzoKICAgICAgICAgTlYxMiwKICAgICAgICAgRW1wdHksCiAgICAg
ICAgIEFTQ0lJLAorICAgICAgICBJNDIwLAorICAgICAgICBOYXRpdmVUZXh0dXJlLAogICAgIH07
CiAKICAgICB2aXJ0dWFsIH5WaWRlb0ZyYW1lQ2hyb21pdW0oKTsKQEAgLTcyLDYgKzc0LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgY29uc3Qgdm9pZCogZGF0YSh1bnNpZ25lZCBwbGFuZSkgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSByZXF1aXJlZFRleHR1cmVTaXplKHVu
c2lnbmVkIHBsYW5lKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGhhc1BhZGRpbmdCeXRl
cyh1bnNpZ25lZCBwbGFuZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgdGV4dHVy
ZUlkKCkgY29uc3QgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Zp
ZGVvTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMjM5NDU2OGYyZDgyNzhmNTk3OWE3ZmUwYzU2MTVk
OWY3MjA5OGI2Ny4uNDEwNjRmOTQ0ZWMxMDhjMDcyYTc3ZTRjMzVhYjk3NjNmMmQxMTA5MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9M
YXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCkBAIC01Nyw2ICs1Nyw3IEBAIFZpZGVvTGF5
ZXJDaHJvbWl1bTo6VmlkZW9MYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUs
IFZpZGVvRnJhbWVQcm92CiAgICAgLCBtX2ZyYW1lRm9ybWF0KFZpZGVvRnJhbWVDaHJvbWl1bTo6
SW52YWxpZCkKICAgICAsIG1fcHJvdmlkZXIocHJvdmlkZXIpCiAgICAgLCBtX3BsYW5lcygwKQor
ICAgICwgbV9uYXRpdmVUZXh0dXJlSWQoMCkKIHsKIH0KIApAQCAtMTE1LDYgKzExNiwxNSBAQCB2
b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCwgQwogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgaWYg
KHRleHR1cmVGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpIHsKKyAgICAg
ICAgbV9uYXRpdmVUZXh0dXJlSWQgPSBmcmFtZS0+dGV4dHVyZUlkKCk7CisgICAgICAgIG1fbmF0
aXZlVGV4dHVyZVNpemUgPSBJbnRTaXplKGZyYW1lLT53aWR0aCgpLCBmcmFtZS0+aGVpZ2h0KCkp
OworICAgICAgICBtX25hdGl2ZVRleHR1cmVWaXNpYmxlU2l6ZSA9IEludFNpemUoZnJhbWUtPndp
ZHRoKCksIGZyYW1lLT5oZWlnaHQoKSk7CisgICAgICAgIHJlc2V0TmVlZHNEaXNwbGF5KCk7Cisg
ICAgICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKICAgICAvLyBBbGxvY2F0ZSB0ZXh0dXJlcyBmb3IgcGxhbmVzIGlmIHRoZXkg
YXJlIG5vdCBhbGxvY2F0ZWQgYWxyZWFkeSwgb3IKICAgICAvLyByZWFsbG9jYXRlIHRleHR1cmVz
IHRoYXQgYXJlIHRoZSB3cm9uZyBzaXplIGZvciB0aGUgZnJhbWUuCiAgICAgYm9vbCB0ZXh0dXJl
c1Jlc2VydmVkID0gcmVzZXJ2ZVRleHR1cmVzKGZyYW1lLCB0ZXh0dXJlRm9ybWF0KTsKQEAgLTE1
Nyw2ICsxNjcsOCBAQCB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhD
Q0xheWVySW1wbCogbGF5ZXIpCiAgICAgfQogICAgIGZvciAodW5zaWduZWQgaSA9IG1fcGxhbmVz
OyBpIDwgTWF4UGxhbmVzOyArK2kpCiAgICAgICAgIHZpZGVvTGF5ZXItPnNldFRleHR1cmUoaSwg
MCwgSW50U2l6ZSgpLCBJbnRTaXplKCkpOworICAgIGlmIChtX2ZyYW1lRm9ybWF0ID09IFZpZGVv
RnJhbWVDaHJvbWl1bTo6TmF0aXZlVGV4dHVyZSkKKyAgICAgICAgdmlkZW9MYXllci0+c2V0TmF0
aXZlVGV4dHVyZShtX25hdGl2ZVRleHR1cmVJZCwgbV9uYXRpdmVUZXh0dXJlU2l6ZSwgbV9uYXRp
dmVUZXh0dXJlVmlzaWJsZVNpemUpOwogfQogCiB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6c2V0
TGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCkBAIC0xNzksNiArMTkxLDggQEAg
R0MzRGVudW0gVmlkZW9MYXllckNocm9taXVtOjpkZXRlcm1pbmVUZXh0dXJlRm9ybWF0KGNvbnN0
IFZpZGVvRnJhbWVDaHJvbWl1bSogZnIKICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNE
OjpMVU1JTkFOQ0U7CiAgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OlJHQkE6CiAgICAgICAg
IHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKKyAgICBjYXNlIFZpZGVvRnJhbWVDaHJv
bWl1bTo6TmF0aXZlVGV4dHVyZToKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJEOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJD
aHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlk
ZW9MYXllckNocm9taXVtLmgKaW5kZXggNDkwNTcyMjVlNDMwY2U4ZGRiOGI0MzBiZmVmYzc0MTJj
YjUyMWIwNC4uNTE2YzhkMzg0N2MyYWRiNjRjNWJiZWZiN2M5OWNhYjVmNWFmYWJhMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXll
ckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVmlkZW9MYXllckNocm9taXVtLmgKQEAgLTg1LDYgKzg1LDEwIEBAIHByaXZhdGU6CiAgICAg
ZW51bSB7IE1heFBsYW5lcyA9IDMgfTsKICAgICBUZXh0dXJlIG1fdGV4dHVyZXNbTWF4UGxhbmVz
XTsKICAgICB1bnNpZ25lZCBtX3BsYW5lczsKKworICAgIHVuc2lnbmVkIG1fbmF0aXZlVGV4dHVy
ZUlkOworICAgIEludFNpemUgbV9uYXRpdmVUZXh0dXJlU2l6ZTsKKyAgICBJbnRTaXplIG1fbmF0
aXZlVGV4dHVyZVZpc2libGVTaXplOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJ
bXBsLmNwcAppbmRleCAxNzQzNjhlYTcyODQzYTZlMTYzZDIzZGQwZmE2MjYwZmUwZjMzYWJkLi42
YjM3ZTg2YTZjZTY4ZDUxYmE1MmNhNDhjMjNjNmY3NGY0NTRjZWM5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ZpZGVvTGF5ZXJJbXBsLmNwcApAQCAtNzcsNiArNzcsMTMgQEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJ
bXBsOjpzZXRUZXh0dXJlKHNpemVfdCBpbmRleCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQs
IGNvbnMKICAgICBtX3RleHR1cmVzW2luZGV4XS52aXNpYmxlU2l6ZSA9IHZpc2libGVTaXplOwog
fQogCit2b2lkIENDVmlkZW9MYXllckltcGw6OnNldE5hdGl2ZVRleHR1cmUoUGxhdGZvcm0zRE9i
amVjdCB0ZXh0dXJlSWQsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIHZpc2li
bGVTaXplKQoreworICAgIG1fbmF0aXZlVGV4dHVyZUlkID0gdGV4dHVyZUlkOworICAgIG1fbmF0
aXZlVGV4dHVyZVNpemUgPSBzaXplOworICAgIG1fbmF0aXZlVGV4dHVyZVZpc2libGVTaXplID0g
dmlzaWJsZVNpemU7Cit9CisKIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhdyhMYXllclJlbmRl
cmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1w
bFRocmVhZCgpKTsKQEAgLTkyLDYgKzk5LDkgQEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3
KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKICAgICBjYXNlIFZpZGVvRnJh
bWVDaHJvbWl1bTo6UkdCQToKICAgICAgICAgZHJhd1JHQkEobGF5ZXJSZW5kZXJlcik7CiAgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpOYXRpdmVUZXh0dXJlOgor
ICAgICAgICBkcmF3TmF0aXZlVGV4dHVyZShsYXllclJlbmRlcmVyKTsKKyAgICAgICAgYnJlYWs7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBvdGhlciBwYXRocy4K
ICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKQEAgLTE2Myw2ICsxNzMsMjcgQEAgdm9pZCBDQ1Zp
ZGVvTGF5ZXJJbXBsOjpkcmF3UkdCQShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVy
ZXIpIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7CiB9CiAK
K3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhd05hdGl2ZVRleHR1cmUoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKiBsYXllclJlbmRlcmVyKSBjb25zdAoreworICAgIGNvbnN0IE5hdGl2ZVRleHR1cmVQ
cm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dmlkZW9MYXllck5hdGl2ZVRleHR1cmVQ
cm9ncmFtKCk7CisgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7
CisKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXItPmNvbnRl
eHQoKTsKKworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFMCkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9uYXRpdmVUZXh0dXJlSWQpKTsK
KworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0o
KSkpOworICAgIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4obV9u
YXRpdmVUZXh0dXJlVmlzaWJsZVNpemUud2lkdGgoKSkgLyBtX25hdGl2ZVRleHR1cmVTaXplLndp
ZHRoKCk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00Zihwcm9ncmFtLT52ZXJ0
ZXhTaGFkZXIoKS50ZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCAwLCAwLCB3aWR0aFNjYWxlRmFjdG9y
LCAxKSk7CisKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZy
YWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKKworICAgIGxheWVyUmVuZGVy
ZXItPmRyYXdUZXh0dXJlZFF1YWQoZHJhd1RyYW5zZm9ybSgpLCBib3VuZHMoKS53aWR0aCgpLCBi
b3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwgbGF5ZXJSZW5kZXJlci0+c2hhcmVkR2Vv
bWV0cnlRdWFkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFt
LT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7Cit9CiAKIHZvaWQgQ0NW
aWRlb0xheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50IGlu
ZGVudCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaAppbmRleCBlNmE1NDRk
OGY1ODZkMzgyM2FjZGMzY2U1NjM1ZTQzODcwNDBjOTEyLi5lNTMxN2FkMzRkYWVmY2I1MDYxMTZl
OWQzODA4YmZhNWY5MmFiNzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oCkBAIC00
Niw2ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4
U2hhZGVyUG9zVGV4VHJhbnNmb3JtLCBGcmFnbWVudFNoYWRlclJHQkFUZXhGbGlwQWxwaGE+IFJH
QkFQcm9ncmFtOwogICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4
WVVWU3RyZXRjaCwgRnJhZ21lbnRTaGFkZXJZVVZWaWRlbz4gWVVWUHJvZ3JhbTsKKyAgICB0eXBl
ZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFRyYW5zZm9ybSwgRnJhZ21lbnRT
aGFkZXJSR0JBVGV4RmxpcEFscGhhPiBOYXRpdmVUZXh0dXJlUHJvZ3JhbTsKIAogICAgIHZpcnR1
YWwgdm9pZCBkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwogCkBAIC01NCw2ICs1NSw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldFNraXBzRHJhdyhib29sIHNraXBzRHJhdykgeyBtX3NraXBz
RHJhdyA9IHNraXBzRHJhdzsgfQogICAgIHZvaWQgc2V0RnJhbWVGb3JtYXQoVmlkZW9GcmFtZUNo
cm9taXVtOjpGb3JtYXQgZm9ybWF0KSB7IG1fZnJhbWVGb3JtYXQgPSBmb3JtYXQ7IH0KICAgICB2
b2lkIHNldFRleHR1cmUoc2l6ZV90LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCwgY29uc3Qg
SW50U2l6ZSYsIGNvbnN0IEludFNpemUmIHZpc2libGVTaXplKTsKKyAgICB2b2lkIHNldE5hdGl2
ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQsIGNvbnN0IEludFNpemUmLCBjb25z
dCBJbnRTaXplJiB2aXNpYmxlU2l6ZSk7CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ0NWaWRl
b0xheWVySW1wbChpbnQpOwpAQCAtNjgsNiArNzAsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBk
cmF3WVVWKExheWVyUmVuZGVyZXJDaHJvbWl1bSopIGNvbnN0OwogICAgIHZvaWQgZHJhd1JHQkEo
TGF5ZXJSZW5kZXJlckNocm9taXVtKikgY29uc3Q7CisgICAgdm9pZCBkcmF3TmF0aXZlVGV4dHVy
ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKSBjb25zdDsKIAogICAgIHN0YXRpYyBjb25zdCBmbG9h
dCB5dXYyUkdCWzldOwogICAgIHN0YXRpYyBjb25zdCBmbG9hdCB5dXZBZGp1c3RbM107CkBAIC03
NSw2ICs3OCwxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9za2lwc0RyYXc7CiAgICAgVmlkZW9G
cmFtZUNocm9taXVtOjpGb3JtYXQgbV9mcmFtZUZvcm1hdDsKICAgICBUZXh0dXJlIG1fdGV4dHVy
ZXNbM107CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fbmF0aXZlVGV4dHVyZUlkOworICAgIElu
dFNpemUgbV9uYXRpdmVUZXh0dXJlU2l6ZTsKKyAgICBJbnRTaXplIG1fbmF0aXZlVGV4dHVyZVZp
c2libGVTaXplOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViVmlkZW9GcmFtZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
VmlkZW9GcmFtZS5oCmluZGV4IDllNjcyNTA2MTg5YTljYzAyM2E2YTVmMWVlMDg5MjhjZWE1ZDI2
YzQuLjhlM2IyY2RiZDJiZDFiOTZkZWM3ZDc5MmI4YjhjMmE5Y2Y2NjU0YjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZGVvRnJhbWUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWRlb0ZyYW1lLmgKQEAgLTQ5LDE1ICs0OSwx
OCBAQCBwdWJsaWM6CiAgICAgICAgIEZvcm1hdE5WMTIsCiAgICAgICAgIEZvcm1hdEVtcHR5LAog
ICAgICAgICBGb3JtYXRBU0NJSSwKKyAgICAgICAgRm9ybWF0STQyMCwKKyAgICAgICAgRm9ybWF0
TmF0aXZlVGV4dHVyZSwKICAgICB9OwogCiAgICAgdmlydHVhbCB+V2ViVmlkZW9GcmFtZSgpIHsg
fQotICAgIHZpcnR1YWwgRm9ybWF0IGZvcm1hdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHVu
c2lnbmVkIHdpZHRoKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdW5zaWduZWQgaGVpZ2h0KCkg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgdW5zaWduZWQgcGxhbmVzKCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgaW50IHN0cmlkZSh1bnNpZ25lZCBwbGFuZSkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgY29uc3Qgdm9pZCogZGF0YSh1bnNpZ25lZCBwbGFuZSkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgRm9ybWF0IGZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIEZvcm1hdEludmFsaWQ7IH0KKyAgICB2
aXJ0dWFsIHVuc2lnbmVkIHdpZHRoKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwg
dW5zaWduZWQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdW5zaWdu
ZWQgcGxhbmVzKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IHN0cmlkZSh1
bnNpZ25lZCBwbGFuZSkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgY29uc3Qgdm9p
ZCogZGF0YSh1bnNpZ25lZCBwbGFuZSkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwg
dW5zaWduZWQgdGV4dHVyZUlkKCkgY29uc3QgeyByZXR1cm4gMDsgfQogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9WaWRl
b0ZyYW1lQ2hyb21pdW1JbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1ZpZGVv
RnJhbWVDaHJvbWl1bUltcGwuY3BwCmluZGV4IDg0MzkzMDhkN2YxNGIzYTc5NDZmNjc0MmMzODc5
YjgyOWFkNjI4ZTAuLmNlMzg5YWRjNjE0NmE0NTk3ODkwMmUzOGI0M2Y5MjZhMTFmMTE2NzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1ZpZGVvRnJhbWVDaHJvbWl1bUlt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1ZpZGVvRnJhbWVDaHJvbWl1
bUltcGwuY3BwCkBAIC0xMjEsNCArMTIxLDExIEBAIGJvb2wgVmlkZW9GcmFtZUNocm9taXVtSW1w
bDo6aGFzUGFkZGluZ0J5dGVzKHVuc2lnbmVkIHBsYW5lKSBjb25zdAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAordW5zaWduZWQgVmlkZW9GcmFtZUNocm9taXVtSW1wbDo6dGV4dHVyZUlkKCkgY29u
c3QKK3sKKyAgICBpZiAobV93ZWJWaWRlb0ZyYW1lKQorICAgICAgICByZXR1cm4gbV93ZWJWaWRl
b0ZyYW1lLT50ZXh0dXJlSWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9WaWRlb0ZyYW1l
Q2hyb21pdW1JbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9WaWRlb0ZyYW1lQ2hy
b21pdW1JbXBsLmgKaW5kZXggMzg2NDcxZjZhMTliNWUwMzQ2NGE2Yzc1MDVjNDIwMjUzYzMxMDdj
OC4uNDQ2YWI1ZjU0MzBkNTFlNjI3ZWYwN2YzY2U0NTc4ZjU5YTE4Y2Q1NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvVmlkZW9GcmFtZUNocm9taXVtSW1wbC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1ZpZGVvRnJhbWVDaHJvbWl1bUltcGwuaApAQCAt
NTcsNiArNTcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCB2b2lkKiBkYXRhKHVuc2ln
bmVkIHBsYW5lKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IFdlYkNvcmU6OkludFNpemUgcmVx
dWlyZWRUZXh0dXJlU2l6ZSh1bnNpZ25lZCBwbGFuZSkgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IGhhc1BhZGRpbmdCeXRlcyh1bnNpZ25lZCBwbGFuZSkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNp
Z25lZCB0ZXh0dXJlSWQoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBXZWJWaWRlb0ZyYW1lKiBt
X3dlYlZpZGVvRnJhbWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119524</attachid>
            <date>2011-12-15 17:11:58 -0800</date>
            <delta_ts>2011-12-15 20:15:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73043-20111215171157.patch</filename>
            <type>text/plain</type>
            <size>33492</size>
            <attacher name="Ami Fischman">fischman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNjU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWVjMTc4Nzg3N2U2N2U2
ZjhkODAxY2NjNzYzYmJiMjdhNzE5OGIxYi4uMjZiNmU4Mzc1YTQ0ZGQ0OGIwNmQxNzY2OWM3Mjkw
NzU2MDBjOWIxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDExLTEyLTE1ICBBbWkg
RmlzY2htYW4gIDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRml4IHRoZSBsaWZl
LWN5Y2xlIG9mIHZpZGVvIGZyYW1lcyBoYW5kbGVkIGJ5IFZpZGVvTGF5ZXJDaHJvbWl1bS9DQ1Zp
ZGVvTGF5ZXJJbXBsLgorICAgICAgICBWaWRlb0ZyYW1lUHJvdmlkZXI6OntnZXQscHV0fUN1cnJl
bnRGcmFtZSBwcm92aWRlIGxlYXNlIHNlbWFudGljcy4gIFByZXZpb3VzbHkKKyAgICAgICAgVmlk
ZW9MYXllckNocm9taXVtIHdvdWxkIGFjcXVpcmUgdGhlIGxlYXNlIGZvciB0aGUgZHVyYXRpb24g
b2YgY29weWluZyB0aGUgZnJhbWUsCisgICAgICAgIGV2ZW4gaWYgdGhhdCB3YXMgb25seSBhIHRl
eHR1cmUgSUQsIGFuZCBpbW1lZGlhdGVseSByZXR1cm4gdGhlIGxlYXNlLCB3aGlsZQorICAgICAg
ICBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3KCkgd291bGQgY29tZSBhbG9uZyBsYXRlciBhbmQgdXNl
IHRoZSAobm8tbG9uZ2VyIGxvY2tlZCkKKyAgICAgICAgdGV4dHVyZSBvcHRpbWlzdGljYWxseS4g
IFRoaXMgY2hhbmdlIG1ha2VzIGl0IHNvIHRoYXQgQ0NWaWRlb0xheWVySW1wbCBob2xkcworICAg
ICAgICB0aGUgZnJhbWUncyBsZWFzZSBmb3IgdGhlIGR1cmF0aW9uIG9mIGRyYXcoKSwgZ3VhcmFu
dGVlaW5nIHRoZSBmcmFtZSBpcyB2YWxpZCB0byByZWFkLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwNDMKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OlZpZGVvTGF5ZXJDaHJvbWl1bSk6
CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06On5WaWRlb0xheWVyQ2hyb21p
dW0pOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVy
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnJlbGVhc2VQcm92
aWRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNo
cm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRl
b0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpDQ1Zp
ZGVvTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6On5DQ1Zp
ZGVvTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OnNldFBy
b3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRWRkNGb3JtYXRUb0dDM0RGb3JtYXQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6ZHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpjb3B5RnJhbWVUb1RleHR1cmVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmNvcHlQbGFuZVRvVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpjb21wdXRlVmlzaWJsZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRl
b0xheWVySW1wbDo6cmVzZXJ2ZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9M
YXllckltcGw6OmRyYXdZVVYpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6
ZHJhd0NvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3UkdC
QSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3TmF0aXZlVGV4dHVy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVy
SW1wbC5oOgorCiAyMDExLTEyLTEyICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTAyNjQ4LgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwppbmRleCA4ZTRhMDcwNjMxNzMzOGE3NTNlYzQ2YmVlMjg4YTliMDFjZWZkYzk5
Li4zYTgyMzUzMmU0MjBiZjE5NDcwM2NjNWViMWFiODhmZGMzNDVmMThhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTEyLTE1ICBBbWkgRmlzY2htYW4g
IDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2ZXJ0IENMIDEwMjM4NyBiZWNh
dXNlIGl0IGlzIGluY29ycmVjdCB0byBjYWxsIHNldE9wYXF1ZSBmcm9tIGEgbm9uLW1haW4gdGhy
ZWFkCisgICAgICAgIChhbmQgZ2V0Q3VycmVudEZyYW1lKCkgY2FuIG5vdyBiZSBjYWxsZWQgZnJv
bSB0aGUgY29tcG9zaXRvciB0aHJlYWQgd2hlbgorICAgICAgICAtLWVuYWJsZS10aHJlYWRlZC1j
b21wb3NpdGluZyBpcyBzcGVjaWZpZWQpLiAgV2hlbiB0aGlzIGlzIGZpeGVkIGZvciByZWFsLCB0
aGUKKyAgICAgICAgb3BhY2l0eS1kZXRlcm1pbmF0aW9uIHNob3VsZCBwcm9iYWJseSBub3QgYmUg
cGVyLWZyYW1lIGJ1dCByYXRoZXIgYSBtZXRob2Qgb24KKyAgICAgICAgV2ViTWVkaWFQbGF5ZXJD
bGllbnQgdGhhdCB0aGUgcGlwZWxpbmUgY2FuIGNhbGwgdXAtZnJvbnQgKGFuZCBvbiB0aGUgbWFp
biB0aHJlYWQpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzMwNDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHNyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJNZWRpYVBsYXllckNsaWVudEltcGw6OmdldEN1cnJlbnRGcmFtZSk6CisKIDIwMTEtMTItMTIg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgV2ViS2l0IGNvZGUg
c2hvdWxkbid0IGJlIGNhbGxpbmcgYXBwbHlDb21tYW5kIGRpcmVjdGx5CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21p
dW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9M
YXllckNocm9taXVtLmNwcAppbmRleCBlYzkzZjE2OGRhMTRlYTQxZTNjMTZkZjZkN2M0OWJlZTQ1
MTNlYWNlLi45ZjVhZGEyYzRlNzhhYWU2Zjc0ZjA0YzQ0Y2NkNTRjOTg4ZTRiYWNmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTMzLDE0ICszMyw3IEBACiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIlZpZGVvTGF5ZXJDaHJvbWl1bS5oIgog
Ci0jaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgotI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiVmlkZW9GcmFtZUNocm9taXVtLmgiCiAjaW5j
bHVkZSAiVmlkZW9GcmFtZVByb3ZpZGVyLmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIK
LSNpbmNsdWRlICJjYy9DQ1RleHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NWaWRlb0xh
eWVySW1wbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01MywyMzcgKzQ2LDI5IEBAIFBh
c3NSZWZQdHI8VmlkZW9MYXllckNocm9taXVtPiBWaWRlb0xheWVyQ2hyb21pdW06OmNyZWF0ZShD
Q0xheWVyRGVsZWdhdGUqIGRlbGVnCiAKIFZpZGVvTGF5ZXJDaHJvbWl1bTo6VmlkZW9MYXllckNo
cm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUsIFZpZGVvRnJhbWVQcm92aWRlciogcHJv
dmlkZXIpCiAgICAgOiBMYXllckNocm9taXVtKGRlbGVnYXRlKQotICAgICwgbV9za2lwc0RyYXco
dHJ1ZSkKLSAgICAsIG1fZnJhbWVGb3JtYXQoVmlkZW9GcmFtZUNocm9taXVtOjpJbnZhbGlkKQog
ICAgICwgbV9wcm92aWRlcihwcm92aWRlcikKLSAgICAsIG1fcGxhbmVzKDApCi0gICAgLCBtX25h
dGl2ZVRleHR1cmVJZCgwKQogeworICAgIEFTU0VSVChtX3Byb3ZpZGVyKTsKIH0KIAogVmlkZW9M
YXllckNocm9taXVtOjp+VmlkZW9MYXllckNocm9taXVtKCkKIHsKLSAgICBjbGVhbnVwUmVzb3Vy
Y2VzKCk7CisgICAgQVNTRVJUKCFtX3Byb3ZpZGVyKTsKIH0KIAogUGFzc1JlZlB0cjxDQ0xheWVy
SW1wbD4gVmlkZW9MYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCgpCiB7Ci0gICAgcmV0
dXJuIENDVmlkZW9MYXllckltcGw6OmNyZWF0ZShtX2xheWVySWQpOwotfQotCi12b2lkIFZpZGVv
TGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpCi17Ci0gICAgTGF5ZXJDaHJvbWl1bTo6
Y2xlYW51cFJlc291cmNlcygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBNYXhQbGFu
ZXM7ICsraSkKLSAgICAgICAgbV90ZXh0dXJlc1tpXS5tX3RleHR1cmUuY2xlYXIoKTsKLX0KLQot
dm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQsIENDVGV4dHVyZVVwZGF0ZXImIHVwZGF0ZXIpCi17Ci0gICAg
aWYgKCFtX2RlbGVnYXRlIHx8ICFtX3Byb3ZpZGVyIHx8ICFkcmF3c0NvbnRlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX25lZWRzRGlzcGxheSAmJiB0ZXh0dXJlc1ZhbGlkKCkp
IHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IDA7IHBsYW5lIDwgbV9wbGFuZXM7IHBs
YW5lKyspIHsKLSAgICAgICAgICAgIE1hbmFnZWRUZXh0dXJlKiB0ZXggPSBtX3RleHR1cmVzW3Bs
YW5lXS5tX3RleHR1cmUuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoIXRleC0+cmVzZXJ2ZSh0ZXgt
PnNpemUoKSwgdGV4LT5mb3JtYXQoKSkpIHsKLSAgICAgICAgICAgICAgICBtX3NraXBzRHJhdyA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fcGxhbmVzID0gMDsKLSAgICBtX3NraXBz
RHJhdyA9IGZhbHNlOwotCi0gICAgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSA9IG1fcHJvdmlk
ZXItPmdldEN1cnJlbnRGcmFtZSgpOwotICAgIGlmICghZnJhbWUpIHsKLSAgICAgICAgbV9za2lw
c0RyYXcgPSB0cnVlOwotICAgICAgICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJhbWUoZnJhbWUp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9mcmFtZUZvcm1hdCA9IGZyYW1lLT5m
b3JtYXQoKTsKLSAgICBHQzNEZW51bSB0ZXh0dXJlRm9ybWF0ID0gZGV0ZXJtaW5lVGV4dHVyZUZv
cm1hdChmcmFtZSk7Ci0gICAgaWYgKHRleHR1cmVGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUpIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBvdGhlciBwYXRo
cy4KLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVl
OwotICAgICAgICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJhbWUoZnJhbWUpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHRleHR1cmVGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQpIHsKLSAgICAgICAgbV9uYXRpdmVUZXh0dXJlSWQgPSBmcmFtZS0+dGV4
dHVyZUlkKCk7Ci0gICAgICAgIG1fbmF0aXZlVGV4dHVyZVNpemUgPSBJbnRTaXplKGZyYW1lLT53
aWR0aCgpLCBmcmFtZS0+aGVpZ2h0KCkpOwotICAgICAgICBtX25hdGl2ZVRleHR1cmVWaXNpYmxl
U2l6ZSA9IEludFNpemUoZnJhbWUtPndpZHRoKCksIGZyYW1lLT5oZWlnaHQoKSk7Ci0gICAgICAg
IG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7Ci0gICAgICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRG
cmFtZShmcmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBBbGxvY2F0ZSB0
ZXh0dXJlcyBmb3IgcGxhbmVzIGlmIHRoZXkgYXJlIG5vdCBhbGxvY2F0ZWQgYWxyZWFkeSwgb3IK
LSAgICAvLyByZWFsbG9jYXRlIHRleHR1cmVzIHRoYXQgYXJlIHRoZSB3cm9uZyBzaXplIGZvciB0
aGUgZnJhbWUuCi0gICAgYm9vbCB0ZXh0dXJlc1Jlc2VydmVkID0gcmVzZXJ2ZVRleHR1cmVzKGZy
YW1lLCB0ZXh0dXJlRm9ybWF0KTsKLSAgICBpZiAoIXRleHR1cmVzUmVzZXJ2ZWQpIHsKLSAgICAg
ICAgbV9za2lwc0RyYXcgPSB0cnVlOwotICAgICAgICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJh
bWUoZnJhbWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gVXBkYXRlIHRleHR1
cmUgcGxhbmVzLgotICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBwbGFuZSA8IGZyYW1lLT5w
bGFuZXMoKTsgcGxhbmUrKykgewotICAgICAgICBUZXh0dXJlJiB0ZXh0dXJlID0gbV90ZXh0dXJl
c1twbGFuZV07Ci0gICAgICAgIEFTU0VSVCh0ZXh0dXJlLm1fdGV4dHVyZSk7Ci0gICAgICAgIEFT
U0VSVChmcmFtZS0+cmVxdWlyZWRUZXh0dXJlU2l6ZShwbGFuZSkgPT0gdGV4dHVyZS5tX3RleHR1
cmUtPnNpemUoKSk7Ci0gICAgICAgIHVwZGF0ZVRleHR1cmUoY29udGV4dCwgdXBkYXRlci5hbGxv
Y2F0b3IoKSwgdGV4dHVyZSwgZnJhbWUtPmRhdGEocGxhbmUpKTsKLSAgICB9Ci0KLSAgICBtX3Bs
YW5lcyA9IGZyYW1lLT5wbGFuZXMoKTsKLSAgICBBU1NFUlQobV9wbGFuZXMgPD0gTWF4UGxhbmVz
KTsKLQotICAgIG1fdXBkYXRlUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGJvdW5kcygp
KTsKLSAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNlOwotCi0gICAgbV9wcm92aWRlci0+cHV0Q3Vy
cmVudEZyYW1lKGZyYW1lKTsKLX0KLQotdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnB1c2hQcm9w
ZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQotewotICAgIExheWVyQ2hyb21pdW06OnB1c2hQ
cm9wZXJ0aWVzVG8obGF5ZXIpOwotCi0gICAgQ0NWaWRlb0xheWVySW1wbCogdmlkZW9MYXllciA9
IHN0YXRpY19jYXN0PENDVmlkZW9MYXllckltcGwqPihsYXllcik7Ci0gICAgdmlkZW9MYXllci0+
c2V0U2tpcHNEcmF3KG1fc2tpcHNEcmF3KTsKLSAgICB2aWRlb0xheWVyLT5zZXRGcmFtZUZvcm1h
dChtX2ZyYW1lRm9ybWF0KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wbGFuZXM7
ICsraSkgewotICAgICAgICBpZiAoIW1fdGV4dHVyZXNbaV0ubV90ZXh0dXJlKSB7Ci0gICAgICAg
ICAgICB2aWRlb0xheWVyLT5zZXRTa2lwc0RyYXcodHJ1ZSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICB2aWRlb0xheWVyLT5zZXRUZXh0dXJlKGksIG1fdGV4dHVyZXNb
aV0ubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSwgbV90ZXh0dXJlc1tpXS5tX3RleHR1cmUtPnNpemUo
KSwgbV90ZXh0dXJlc1tpXS5tX3Zpc2libGVTaXplKTsKLSAgICB9Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9wbGFuZXM7IGkgPCBNYXhQbGFuZXM7ICsraSkKLSAgICAgICAgdmlkZW9MYXllci0+
c2V0VGV4dHVyZShpLCAwLCBJbnRTaXplKCksIEludFNpemUoKSk7Ci0gICAgaWYgKG1fZnJhbWVG
b3JtYXQgPT0gVmlkZW9GcmFtZUNocm9taXVtOjpOYXRpdmVUZXh0dXJlKQotICAgICAgICB2aWRl
b0xheWVyLT5zZXROYXRpdmVUZXh0dXJlKG1fbmF0aXZlVGV4dHVyZUlkLCBtX25hdGl2ZVRleHR1
cmVTaXplLCBtX25hdGl2ZVRleHR1cmVWaXNpYmxlU2l6ZSk7Ci19Ci0KLXZvaWQgVmlkZW9MYXll
ckNocm9taXVtOjpzZXRMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdCogaG9zdCkKLXsKLSAg
ICBpZiAoaG9zdCAmJiBsYXllclRyZWVIb3N0KCkgIT0gaG9zdCkgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgTWF4UGxhbmVzOyArK2kpIHsKLSAgICAgICAgICAgIG1fdGV4dHVy
ZXNbaV0ubV92aXNpYmxlU2l6ZSA9IEludFNpemUoKTsKLSAgICAgICAgICAgIG1fdGV4dHVyZXNb
aV0ubV90ZXh0dXJlID0gTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShob3N0LT5jb250ZW50c1RleHR1
cmVNYW5hZ2VyKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgTGF5ZXJDaHJvbWl1bTo6c2V0
TGF5ZXJUcmVlSG9zdChob3N0KTsKLX0KLQotR0MzRGVudW0gVmlkZW9MYXllckNocm9taXVtOjpk
ZXRlcm1pbmVUZXh0dXJlRm9ybWF0KGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUpCi17
Ci0gICAgc3dpdGNoIChmcmFtZS0+Zm9ybWF0KCkpIHsKLSAgICBjYXNlIFZpZGVvRnJhbWVDaHJv
bWl1bTo6WVYxMjoKLSAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6WVYxNjoKLSAgICAgICAg
cmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U7Ci0gICAgY2FzZSBWaWRlb0ZyYW1l
Q2hyb21pdW06OlJHQkE6Ci0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsK
LSAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6TmF0aXZlVGV4dHVyZToKLSAgICAgICAgcmV0
dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUU7Ci19Ci0KLWJvb2wgVmlkZW9MYXllckNocm9taXVtOjp0ZXh0dXJlc1ZhbGlkKCkKLXsKLSAg
ICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBtX3BsYW5lczsgcGxhbmUrKykgewot
ICAgICAgICBNYW5hZ2VkVGV4dHVyZSogdGV4ID0gbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJl
LmdldCgpOwotICAgICAgICBpZiAoIXRleC0+aXNWYWxpZCh0ZXgtPnNpemUoKSwgdGV4LT5mb3Jt
YXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIFZpZGVvTGF5ZXJDaHJvbWl1bTo6cmVzZXJ2ZVRleHR1cmVzKGNvbnN0IFZp
ZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUsIEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpCi17Ci0gICAg
QVNTRVJUKGxheWVyVHJlZUhvc3QoKSk7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLSAgICBBU1NFUlQo
dGV4dHVyZUZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7Ci0KLSAg
ICBpbnQgbWF4VGV4dHVyZVNpemUgPSBsYXllclRyZWVIb3N0KCktPmxheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZTsKLQotICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAw
OyBwbGFuZSA8IGZyYW1lLT5wbGFuZXMoKTsgcGxhbmUrKykgewotICAgICAgICBJbnRTaXplIHJl
cXVpcmVkVGV4dHVyZVNpemUgPSBmcmFtZS0+cmVxdWlyZWRUZXh0dXJlU2l6ZShwbGFuZSk7Ci0K
LSAgICAgICAgLy8gSWYgdGhlIHJlbmRlcmVyIGNhbm5vdCBoYW5kbGUgdGhpcyBsYXJnZSBvZiBh
IHRleHR1cmUsIHJldHVybiBmYWxzZS4KLSAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHRl
c3Qgd2hlbiB0aWxlZCBsYXllcnMgYXJlIGltcGxlbWVudGVkLgotICAgICAgICBpZiAocmVxdWly
ZWRUZXh0dXJlU2l6ZS5pc1plcm8oKSB8fCByZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCkgPiBt
YXhUZXh0dXJlU2l6ZSB8fCByZXF1aXJlZFRleHR1cmVTaXplLmhlaWdodCgpID4gbWF4VGV4dHVy
ZVNpemUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKCFtX3RleHR1
cmVzW3BsYW5lXS5tX3RleHR1cmUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgaWYgKG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS0+c2l6ZSgpICE9IHJlcXVpcmVkVGV4
dHVyZVNpemUpCi0gICAgICAgICAgICBtX3RleHR1cmVzW3BsYW5lXS5tX3Zpc2libGVTaXplID0g
Y29tcHV0ZVZpc2libGVTaXplKGZyYW1lLCBwbGFuZSk7Ci0KLSAgICAgICAgbV90ZXh0dXJlc1tw
bGFuZV0ubV90ZXh0dXJlLT5yZXNlcnZlKHJlcXVpcmVkVGV4dHVyZVNpemUsIHRleHR1cmVGb3Jt
YXQpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1JbnRTaXplIFZpZGVvTGF5ZXJD
aHJvbWl1bTo6Y29tcHV0ZVZpc2libGVTaXplKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSogZnJh
bWUsIHVuc2lnbmVkIHBsYW5lKQotewotICAgIGludCB2aXNpYmxlV2lkdGggPSBmcmFtZS0+d2lk
dGgocGxhbmUpOwotICAgIGludCB2aXNpYmxlSGVpZ2h0ID0gZnJhbWUtPmhlaWdodChwbGFuZSk7
Ci0gICAgLy8gV2hlbiB0aGVyZSBhcmUgZGVhZCBwaXhlbHMgYXQgdGhlIGVkZ2Ugb2YgdGhlIHRl
eHR1cmUsIGRlY3JlYXNlCi0gICAgLy8gdGhlIGZyYW1lIHdpZHRoIGJ5IDEgdG8gcHJldmVudCB0
aGUgcmlnaHRtb3N0IHBpeGVscyBmcm9tCi0gICAgLy8gaW50ZXJwb2xhdGluZyB3aXRoIHRoZSBk
ZWFkIHBpeGVscy4KLSAgICBpZiAoZnJhbWUtPmhhc1BhZGRpbmdCeXRlcyhwbGFuZSkpCi0gICAg
ICAgIC0tdmlzaWJsZVdpZHRoOwotCi0gICAgLy8gSW4gWVYxMiwgZXZlcnkgMngyIHNxdWFyZSBv
ZiBZIHZhbHVlcyBjb3JyZXNwb25kcyB0byBvbmUgVSBhbmQKLSAgICAvLyBvbmUgViB2YWx1ZS4g
SWYgd2UgZGVjcmVhc2UgdGhlIHdpZHRoIG9mIHRoZSBVViBwbGFuZSwgd2UgbXVzdCBkZWNyZWFz
ZSB0aGUKLSAgICAvLyB3aWR0aCBvZiB0aGUgWSB0ZXh0dXJlIGJ5IDIgZm9yIHByb3BlciBhbGln
bm1lbnQuIFRoaXMgbXVzdCBoYXBwZW4KLSAgICAvLyBhbHdheXMsIGV2ZW4gaWYgWSdzIHRleHR1
cmUgZG9lcyBub3QgaGF2ZSBwYWRkaW5nIGJ5dGVzLgotICAgIGlmIChwbGFuZSA9PSBWaWRlb0Zy
YW1lQ2hyb21pdW06OnlQbGFuZSAmJiBmcmFtZS0+Zm9ybWF0KCkgPT0gVmlkZW9GcmFtZUNocm9t
aXVtOjpZVjEyKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+aGFzUGFkZGluZ0J5dGVzKFZpZGVvRnJh
bWVDaHJvbWl1bTo6dVBsYW5lKSkgewotICAgICAgICAgICAgaW50IG9yaWdpbmFsV2lkdGggPSBm
cmFtZS0+d2lkdGgocGxhbmUpOwotICAgICAgICAgICAgdmlzaWJsZVdpZHRoID0gb3JpZ2luYWxX
aWR0aCAtIDI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gSW50U2l6ZSh2aXNpYmxl
V2lkdGgsIHZpc2libGVIZWlnaHQpOwotfQotCi12b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBk
YXRlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciog
YWxsb2NhdG9yLCBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCB2b2lkKiBkYXRhKSBjb25zdAotewot
ICAgIEFTU0VSVChjb250ZXh0KTsKLSAgICBBU1NFUlQodGV4dHVyZS5tX3RleHR1cmUpOwotCi0g
ICAgdGV4dHVyZS5tX3RleHR1cmUtPmJpbmRUZXh0dXJlKGNvbnRleHQsIGFsbG9jYXRvcik7Ci0K
LSAgICBHQzNEZW51bSBmb3JtYXQgPSB0ZXh0dXJlLm1fdGV4dHVyZS0+Zm9ybWF0KCk7Ci0gICAg
SW50U2l6ZSBkaW1lbnNpb25zID0gdGV4dHVyZS5tX3RleHR1cmUtPnNpemUoKTsKLQotICAgIHZv
aWQqIG1lbSA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpKS0+bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCAwLCAwLCAwLCBkaW1lbnNpb25zLndpZHRoKCksIGRpbWVuc2lvbnMuaGVp
Z2h0KCksIGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIEV4dGVuc2lv
bnMzRENocm9taXVtOjpXUklURV9PTkxZKTsKLSAgICBpZiAobWVtKSB7Ci0gICAgICAgIG1lbWNw
eShtZW0sIGRhdGEsIGRpbWVuc2lvbnMud2lkdGgoKSAqIGRpbWVuc2lvbnMuaGVpZ2h0KCkpOwot
ICAgICAgICBHTEMoY29udGV4dCwgc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihj
b250ZXh0LT5nZXRFeHRlbnNpb25zKCkpLT51bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShtZW0p
KTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBJZiBtYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0g
ZmFpbHMsIHRoZW4gZG8gdGhlIHNsb3dlciB0ZXhTdWJJbWFnZTJECi0gICAgICAgIC8vIHVwbG9h
ZC4gVGhpcyBkb2VzIHR3aWNlIHRoZSBjb3BpZXMgYXMgbWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVN
LCBvbmUKLSAgICAgICAgLy8gaW4gdGhlIGNvbW1hbmQgYnVmZmVyIGFuZCBhbm90aGVyIHRvIHRo
ZSB0ZXh0dXJlLgotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4U3ViSW1hZ2UyRChH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgZGltZW5zaW9ucy53aWR0aCgp
LCBkaW1lbnNpb25zLmhlaWdodCgpLCBmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFLCBkYXRhKSk7Ci0gICAgfQorICAgIFJlZlB0cjxDQ1ZpZGVvTGF5ZXJJbXBsPiByZXQg
PSBDQ1ZpZGVvTGF5ZXJJbXBsOjpjcmVhdGUobV9sYXllcklkKTsKKyAgICBtX2xheWVySW1wbCA9
IHJldC5nZXQoKTsKKyAgICBtX2xheWVySW1wbC0+c2V0UHJvdmlkZXIobV9wcm92aWRlcik7Cisg
ICAgcmV0dXJuIHJldDsKIH0KIAogdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnJlbGVhc2VQcm92
aWRlcigpCiB7CiAgICAgbV9wcm92aWRlciA9IDA7CisgICAgaWYgKG1fbGF5ZXJJbXBsKQorICAg
ICAgICBtX2xheWVySW1wbC0+c2V0UHJvdmlkZXIoMCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmgKaW5kZXggNTE2YzhkMzg0N2MyYWRiNjRj
NWJiZWZiN2M5OWNhYjVmNWFmYWJhMy4uYzk1Nzk2NmRkMmMxODU4YmE2NmI4ODkyMWFhMzM1NzNl
NmJkZWNiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVmlkZW9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmgKQEAgLTM1LDExICszNSwxMiBA
QAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAogI2luY2x1ZGUgIkxheWVyQ2hy
b21pdW0uaCIKLSNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgotI2luY2x1ZGUgIlZpZGVvRnJh
bWVQcm92aWRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDVmlkZW9MYXll
ckltcGw7CitjbGFzcyBWaWRlb0ZyYW1lUHJvdmlkZXI7CisKIC8vIEEgTGF5ZXIgdGhhdCBjb250
YWlucyBhIFZpZGVvIGVsZW1lbnQuCiBjbGFzcyBWaWRlb0xheWVyQ2hyb21pdW0gOiBwdWJsaWMg
TGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6CkBAIC01MCw0NSArNTEsMTUgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOwog
Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250
ZXh0M0QqLCBDQ1RleHR1cmVVcGRhdGVyJik7CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVu
dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZvaWQgcmVsZWFzZVByb3ZpZGVyKCk7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCopOwotCi0g
ICAgdmlydHVhbCB2b2lkIHNldExheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Kik7Ci0KLXBy
b3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cFJlc291cmNlcygpOwotCiBwcml2YXRl
OgotICAgIHN0cnVjdCBUZXh0dXJlIHsKLSAgICAgICAgSW50U2l6ZSBtX3Zpc2libGVTaXplOwot
ICAgICAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IG1fdGV4dHVyZTsKLSAgICB9OwotCiAgICAg
VmlkZW9MYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSosIFZpZGVvRnJhbWVQcm92aWRlciop
OwogCi0gICAgc3RhdGljIEdDM0RlbnVtIGRldGVybWluZVRleHR1cmVGb3JtYXQoY29uc3QgVmlk
ZW9GcmFtZUNocm9taXVtKik7Ci0gICAgc3RhdGljIEludFNpemUgY29tcHV0ZVZpc2libGVTaXpl
KGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSosIHVuc2lnbmVkIHBsYW5lKTsKLSAgICBib29sIHRl
eHR1cmVzVmFsaWQoKTsKLSAgICBib29sIHJlc2VydmVUZXh0dXJlcyhjb25zdCBWaWRlb0ZyYW1l
Q2hyb21pdW0qLCBHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKLSAgICB2b2lkIHVwZGF0ZVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgVGV4dHVyZSYsIGNvbnN0
IHZvaWQqKSBjb25zdDsKLQotICAgIHZvaWQgcmVzZXRGcmFtZVBhcmFtZXRlcnMoKTsKLQotICAg
IGJvb2wgbV9za2lwc0RyYXc7Ci0gICAgVmlkZW9GcmFtZUNocm9taXVtOjpGb3JtYXQgbV9mcmFt
ZUZvcm1hdDsKKyAgICBDQ1ZpZGVvTGF5ZXJJbXBsKiBtX2xheWVySW1wbDsKICAgICBWaWRlb0Zy
YW1lUHJvdmlkZXIqIG1fcHJvdmlkZXI7Ci0KLSAgICBlbnVtIHsgTWF4UGxhbmVzID0gMyB9Owot
ICAgIFRleHR1cmUgbV90ZXh0dXJlc1tNYXhQbGFuZXNdOwotICAgIHVuc2lnbmVkIG1fcGxhbmVz
OwotCi0gICAgdW5zaWduZWQgbV9uYXRpdmVUZXh0dXJlSWQ7Ci0gICAgSW50U2l6ZSBtX25hdGl2
ZVRleHR1cmVTaXplOwotICAgIEludFNpemUgbV9uYXRpdmVUZXh0dXJlVmlzaWJsZVNpemU7CiB9
OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCmluZGV4IDZiMzdlODZhNmNl
NjhkNTFiYTUyY2E0OGMyM2M2Zjc0ZjQ1NGNlYzkuLmZhMTFlYTU4MmNiZTY1ZDFmODBhYjQyMDIx
MGQ2YzAzMzQxM2I2ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCkBAIC0y
OSw5ICsyOSwxMiBAQAogCiAjaW5jbHVkZSAiY2MvQ0NWaWRlb0xheWVySW1wbC5oIgogCisjaW5j
bHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlByb2dy
YW1CaW5kaW5nLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJWaWRl
b0ZyYW1lUHJvdmlkZXIuaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTYxLDM3ICs2NCw2MiBAQCBjb25zdCBmbG9hdCBDQ1Zp
ZGVvTGF5ZXJJbXBsOjp5dXZBZGp1c3RbM10gPSB7CiAKIENDVmlkZW9MYXllckltcGw6OkNDVmlk
ZW9MYXllckltcGwoaW50IGlkKQogICAgIDogQ0NMYXllckltcGwoaWQpCisgICAgLCBtX3Byb3Zp
ZGVyKDApCiB7CiB9CiAKIENDVmlkZW9MYXllckltcGw6On5DQ1ZpZGVvTGF5ZXJJbXBsKCkKIHsK
KyAgICBNdXRleExvY2tlciBsb2NrZXIobV9wcm92aWRlck11dGV4KTsKKyAgICBBU1NFUlQoIW1f
cHJvdmlkZXIpOyAvLyBDbGVhcmVkIGR1cmluZyBWaWRlb0xheWVyQ2hyb21pdW06OnJlbGVhc2VQ
cm92aWRlcigpLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBNYXhQbGFuZXM7ICsraSkK
KyAgICAgICAgbV90ZXh0dXJlc1tpXS5tX3RleHR1cmUuY2xlYXIoKTsKICAgICBjbGVhbnVwUmVz
b3VyY2VzKCk7CiB9CiAKLXZvaWQgQ0NWaWRlb0xheWVySW1wbDo6c2V0VGV4dHVyZShzaXplX3Qg
aW5kZXgsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkLCBjb25zdCBJbnRTaXplJiBzaXplLCBj
b25zdCBJbnRTaXplJiB2aXNpYmxlU2l6ZSkKK3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6c2V0UHJv
dmlkZXIoVmlkZW9GcmFtZVByb3ZpZGVyKiBwcm92aWRlcikKIHsKLSAgICBBU1NFUlQoaW5kZXgg
PCAzKTsKLSAgICBtX3RleHR1cmVzW2luZGV4XS5pZCA9IHRleHR1cmVJZDsKLSAgICBtX3RleHR1
cmVzW2luZGV4XS5zaXplID0gc2l6ZTsKLSAgICBtX3RleHR1cmVzW2luZGV4XS52aXNpYmxlU2l6
ZSA9IHZpc2libGVTaXplOworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3Byb3ZpZGVyTXV0ZXgp
OworICAgIG1fcHJvdmlkZXIgPSBwcm92aWRlcjsKIH0KIAotdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBs
OjpzZXROYXRpdmVUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkLCBjb25zdCBJbnRT
aXplJiBzaXplLCBjb25zdCBJbnRTaXplJiB2aXNpYmxlU2l6ZSkKKy8vIENvbnZlcnQgVmlkZW9G
cmFtZUNocm9taXVtOjpGb3JtYXQgdG8gR3JhcGhpY3NDb250ZXh0M0QncyBmb3JtYXQgZW51bSB2
YWx1ZXMuCitzdGF0aWMgR0MzRGVudW0gY29udmVydFZGQ0Zvcm1hdFRvR0MzREZvcm1hdChWaWRl
b0ZyYW1lQ2hyb21pdW06OkZvcm1hdCB2ZmNGb3JtYXQpCiB7Ci0gICAgbV9uYXRpdmVUZXh0dXJl
SWQgPSB0ZXh0dXJlSWQ7Ci0gICAgbV9uYXRpdmVUZXh0dXJlU2l6ZSA9IHNpemU7Ci0gICAgbV9u
YXRpdmVUZXh0dXJlVmlzaWJsZVNpemUgPSB2aXNpYmxlU2l6ZTsKKyAgICBzd2l0Y2ggKHZmY0Zv
cm1hdCkgeworICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpZVjEyOgorICAgIGNhc2UgVmlk
ZW9GcmFtZUNocm9taXVtOjpZVjE2OgorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6
OkxVTUlOQU5DRTsKKyAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6UkdCQToKKyAgICAgICAg
cmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOworICAgIGNhc2UgVmlkZW9GcmFtZUNocm9t
aXVtOjpOYXRpdmVUZXh0dXJlOgorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFOworICAgIH0KIH0KIAogdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3
KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKIHsKICAgICBBU1NFUlQoQ0NQ
cm94eTo6aXNJbXBsVGhyZWFkKCkpOwogCi0gICAgaWYgKG1fc2tpcHNEcmF3KQorICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX3Byb3ZpZGVyTXV0ZXgpOworCisgICAgaWYgKCFtX3Byb3ZpZGVyKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBzd2l0Y2ggKG1fZnJhbWVGb3JtYXQpIHsKKyAgICBWaWRl
b0ZyYW1lQ2hyb21pdW0qIGZyYW1lID0gbV9wcm92aWRlci0+Z2V0Q3VycmVudEZyYW1lKCk7Cisg
ICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIEdDM0RlbnVtIGZvcm1hdCA9IGNv
bnZlcnRWRkNGb3JtYXRUb0dDM0RGb3JtYXQoZnJhbWUtPmZvcm1hdCgpKTsKKworICAgIGlmIChm
b3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICghY29weUZyYW1lVG9UZXh0dXJlcyhmcmFtZSwgZm9ybWF0LCBsYXllclJl
bmRlcmVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3dpdGNoIChmcmFtZS0+Zm9ybWF0KCkp
IHsKICAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6WVYxMjoKICAgICBjYXNlIFZpZGVvRnJh
bWVDaHJvbWl1bTo6WVYxNjoKICAgICAgICAgZHJhd1lVVihsYXllclJlbmRlcmVyKTsKQEAgLTEw
Nyw2ICsxMzUsMTA0IEBAIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhdyhMYXllclJlbmRlcmVy
Q2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCiAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KKworICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBwbGFuZSA8
IGZyYW1lLT5wbGFuZXMoKTsgKytwbGFuZSkKKyAgICAgICAgbV90ZXh0dXJlc1twbGFuZV0ubV90
ZXh0dXJlLT51bnJlc2VydmUoKTsKKyAgICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJhbWUoZnJh
bWUpOworfQorCitib29sIENDVmlkZW9MYXllckltcGw6OmNvcHlGcmFtZVRvVGV4dHVyZXMoY29u
c3QgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSwgR0MzRGVudW0gZm9ybWF0LCBMYXllclJlbmRl
cmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCit7CisgICAgaWYgKGZyYW1lLT5mb3JtYXQoKSA9
PSBWaWRlb0ZyYW1lQ2hyb21pdW06Ok5hdGl2ZVRleHR1cmUpIHsKKyAgICAgICAgbV9uYXRpdmVU
ZXh0dXJlSWQgPSBmcmFtZS0+dGV4dHVyZUlkKCk7CisgICAgICAgIG1fbmF0aXZlVGV4dHVyZVNp
emUgPSBJbnRTaXplKGZyYW1lLT53aWR0aCgpLCBmcmFtZS0+aGVpZ2h0KCkpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIXJlc2VydmVUZXh0dXJlcyhmcmFtZSwgZm9y
bWF0LCBsYXllclJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yICh1
bnNpZ25lZCBwbGFuZSA9IDA7IHBsYW5lIDwgZnJhbWUtPnBsYW5lcygpOyArK3BsYW5lKSB7Cisg
ICAgICAgIFRleHR1cmUmIHRleHR1cmUgPSBtX3RleHR1cmVzW3BsYW5lXTsKKyAgICAgICAgQVNT
RVJUKGZyYW1lLT5yZXF1aXJlZFRleHR1cmVTaXplKHBsYW5lKSA9PSB0ZXh0dXJlLm1fdGV4dHVy
ZS0+c2l6ZSgpKTsKKyAgICAgICAgY29weVBsYW5lVG9UZXh0dXJlKGxheWVyUmVuZGVyZXIsIGZy
YW1lLT5kYXRhKHBsYW5lKSwgcGxhbmUpOworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIHBsYW5l
ID0gZnJhbWUtPnBsYW5lcygpOyBwbGFuZSA8IE1heFBsYW5lczsgKytwbGFuZSkgeworICAgICAg
ICBUZXh0dXJlJiB0ZXh0dXJlID0gbV90ZXh0dXJlc1twbGFuZV07CisgICAgICAgIHRleHR1cmUu
bV90ZXh0dXJlLmNsZWFyKCk7CisgICAgICAgIHRleHR1cmUubV92aXNpYmxlU2l6ZSA9IEludFNp
emUoKTsKKyAgICB9CisgICAgbV9wbGFuZXMgPSBmcmFtZS0+cGxhbmVzKCk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6Y29weVBsYW5lVG9UZXh0dXJlKExh
eWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3Qgdm9pZCogcGxhbmUsIGlu
dCBpbmRleCkKK3sKKyAgICBUZXh0dXJlJiB0ZXh0dXJlID0gbV90ZXh0dXJlc1tpbmRleF07Cisg
ICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyLT5jb250ZXh0KCk7
CisgICAgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yID0gbGF5ZXJSZW5kZXJlci0+cmVuZGVy
U3VyZmFjZVRleHR1cmVBbGxvY2F0b3IoKTsKKyAgICB0ZXh0dXJlLm1fdGV4dHVyZS0+YmluZFRl
eHR1cmUoY29udGV4dCwgYWxsb2NhdG9yKTsKKyAgICBHQzNEZW51bSBmb3JtYXQgPSB0ZXh0dXJl
Lm1fdGV4dHVyZS0+Zm9ybWF0KCk7CisgICAgSW50U2l6ZSBkaW1lbnNpb25zID0gdGV4dHVyZS5t
X3RleHR1cmUtPnNpemUoKTsKKworICAgIHZvaWQqIG1lbSA9IHN0YXRpY19jYXN0PEV4dGVuc2lv
bnMzRENocm9taXVtKj4oY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKS0+bWFwVGV4U3ViSW1hZ2Uy
RENIUk9NSVVNKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAwLCAwLCBkaW1lbnNp
b25zLndpZHRoKCksIGRpbWVuc2lvbnMuaGVpZ2h0KCksIGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUsIEV4dGVuc2lvbnMzRENocm9taXVtOjpXUklURV9PTkxZKTsKKyAg
ICBpZiAobWVtKSB7CisgICAgICAgIG1lbWNweShtZW0sIHBsYW5lLCBkaW1lbnNpb25zLndpZHRo
KCkgKiBkaW1lbnNpb25zLmhlaWdodCgpKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIHN0YXRpY19j
YXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKS0+dW5t
YXBUZXhTdWJJbWFnZTJEQ0hST01JVU0obWVtKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
SWYgbWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNIGZhaWxzLCB0aGVuIGRvIHRoZSBzbG93ZXIgdGV4
U3ViSW1hZ2UyRAorICAgICAgICAvLyB1cGxvYWQuIFRoaXMgZG9lcyB0d2ljZSB0aGUgY29waWVz
IGFzIG1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSwgb25lCisgICAgICAgIC8vIGluIHRoZSBjb21t
YW5kIGJ1ZmZlciBhbmQgYW5vdGhlciB0byB0aGUgdGV4dHVyZS4KKyAgICAgICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IDAsIDAsIDAsIGRpbWVuc2lvbnMud2lkdGgoKSwgZGltZW5zaW9ucy5oZWlnaHQoKSwgZm9ybWF0
LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgcGxhbmUpKTsKKyAgICB9Cit9CisK
K3N0YXRpYyBJbnRTaXplIGNvbXB1dGVWaXNpYmxlU2l6ZShjb25zdCBWaWRlb0ZyYW1lQ2hyb21p
dW0qIGZyYW1lLCB1bnNpZ25lZCBwbGFuZSkKK3sKKyAgICBpbnQgdmlzaWJsZVdpZHRoID0gZnJh
bWUtPndpZHRoKHBsYW5lKTsKKyAgICBpbnQgdmlzaWJsZUhlaWdodCA9IGZyYW1lLT5oZWlnaHQo
cGxhbmUpOworICAgIC8vIFdoZW4gdGhlcmUgYXJlIGRlYWQgcGl4ZWxzIGF0IHRoZSBlZGdlIG9m
IHRoZSB0ZXh0dXJlLCBkZWNyZWFzZQorICAgIC8vIHRoZSBmcmFtZSB3aWR0aCBieSAxIHRvIHBy
ZXZlbnQgdGhlIHJpZ2h0bW9zdCBwaXhlbHMgZnJvbQorICAgIC8vIGludGVycG9sYXRpbmcgd2l0
aCB0aGUgZGVhZCBwaXhlbHMuCisgICAgaWYgKGZyYW1lLT5oYXNQYWRkaW5nQnl0ZXMocGxhbmUp
KQorICAgICAgICAtLXZpc2libGVXaWR0aDsKKworICAgIC8vIEluIFlWMTIsIGV2ZXJ5IDJ4MiBz
cXVhcmUgb2YgWSB2YWx1ZXMgY29ycmVzcG9uZHMgdG8gb25lIFUgYW5kCisgICAgLy8gb25lIFYg
dmFsdWUuIElmIHdlIGRlY3JlYXNlIHRoZSB3aWR0aCBvZiB0aGUgVVYgcGxhbmUsIHdlIG11c3Qg
ZGVjcmVhc2UgdGhlCisgICAgLy8gd2lkdGggb2YgdGhlIFkgdGV4dHVyZSBieSAyIGZvciBwcm9w
ZXIgYWxpZ25tZW50LiBUaGlzIG11c3QgaGFwcGVuCisgICAgLy8gYWx3YXlzLCBldmVuIGlmIFkn
cyB0ZXh0dXJlIGRvZXMgbm90IGhhdmUgcGFkZGluZyBieXRlcy4KKyAgICBpZiAocGxhbmUgPT0g
VmlkZW9GcmFtZUNocm9taXVtOjp5UGxhbmUgJiYgZnJhbWUtPmZvcm1hdCgpID09IFZpZGVvRnJh
bWVDaHJvbWl1bTo6WVYxMikgeworICAgICAgICBpZiAoZnJhbWUtPmhhc1BhZGRpbmdCeXRlcyhW
aWRlb0ZyYW1lQ2hyb21pdW06OnVQbGFuZSkpIHsKKyAgICAgICAgICAgIGludCBvcmlnaW5hbFdp
ZHRoID0gZnJhbWUtPndpZHRoKHBsYW5lKTsKKyAgICAgICAgICAgIHZpc2libGVXaWR0aCA9IG9y
aWdpbmFsV2lkdGggLSAyOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEludFNpemUo
dmlzaWJsZVdpZHRoLCB2aXNpYmxlSGVpZ2h0KTsKK30KKworYm9vbCBDQ1ZpZGVvTGF5ZXJJbXBs
OjpyZXNlcnZlVGV4dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSwgR0MzRGVu
dW0gZm9ybWF0LCBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCit7CisgICAg
aWYgKGZyYW1lLT5wbGFuZXMoKSA+IE1heFBsYW5lcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGludCBtYXhUZXh0dXJlU2l6ZSA9IGxheWVyUmVuZGVyZXItPmNhcGFiaWxpdGllcygpLm1h
eFRleHR1cmVTaXplOworICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBwbGFuZSA8IGZyYW1l
LT5wbGFuZXMoKTsgKytwbGFuZSkgeworICAgICAgICBJbnRTaXplIHJlcXVpcmVkVGV4dHVyZVNp
emUgPSBmcmFtZS0+cmVxdWlyZWRUZXh0dXJlU2l6ZShwbGFuZSk7CisgICAgICAgIC8vIElmIHRo
ZSByZW5kZXJlciBjYW5ub3QgaGFuZGxlIHRoaXMgbGFyZ2Ugb2YgYSB0ZXh0dXJlLCByZXR1cm4g
ZmFsc2UuCisgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyB0ZXN0IHdoZW4gdGlsZWQgbGF5
ZXJzIGFyZSBpbXBsZW1lbnRlZC4KKyAgICAgICAgaWYgKHJlcXVpcmVkVGV4dHVyZVNpemUuaXNa
ZXJvKCkgfHwgcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgpID4gbWF4VGV4dHVyZVNpemUgfHwg
cmVxdWlyZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSA+IG1heFRleHR1cmVTaXplKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIW1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVy
ZSkgeworICAgICAgICAgICAgbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlID0gTWFuYWdlZFRl
eHR1cmU6OmNyZWF0ZShsYXllclJlbmRlcmVyLT5yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIo
KSk7CisgICAgICAgICAgICBpZiAoIW1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBtX3RleHR1cmVzW3BsYW5lXS5t
X3Zpc2libGVTaXplID0gSW50U2l6ZSgpOworICAgICAgICB9CisgICAgICAgIGlmIChtX3RleHR1
cmVzW3BsYW5lXS5tX3RleHR1cmUtPnNpemUoKSAhPSByZXF1aXJlZFRleHR1cmVTaXplKQorICAg
ICAgICAgICAgbV90ZXh0dXJlc1twbGFuZV0ubV92aXNpYmxlU2l6ZSA9IGNvbXB1dGVWaXNpYmxl
U2l6ZShmcmFtZSwgcGxhbmUpOworICAgICAgICBtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUt
PnJlc2VydmUocmVxdWlyZWRUZXh0dXJlU2l6ZSwgZm9ybWF0KTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7CiB9CiAKIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhd1lVVihMYXllclJlbmRlcmVy
Q2hyb21pdW0qIGxheWVyUmVuZGVyZXIpIGNvbnN0CkBAIC0xMTUsMjIgKzI0MSwyMiBAQCB2b2lk
IENDVmlkZW9MYXllckltcGw6OmRyYXdZVVYoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJl
bmRlcmVyKSBjb25zdAogICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVk
KCkpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyLT5j
b250ZXh0KCk7Ci0gICAgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSB5VGV4dHVyZSA9IG1fdGV4
dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjp5UGxhbmVdOwotICAgIENDVmlkZW9MYXllckltcGw6
OlRleHR1cmUgdVRleHR1cmUgPSBtX3RleHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6dVBsYW5l
XTsKLSAgICBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlIHZUZXh0dXJlID0gbV90ZXh0dXJlc1tW
aWRlb0ZyYW1lQ2hyb21pdW06OnZQbGFuZV07CisgICAgY29uc3QgVGV4dHVyZSYgeVRleHR1cmUg
PSBtX3RleHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6eVBsYW5lXTsKKyAgICBjb25zdCBUZXh0
dXJlJiB1VGV4dHVyZSA9IG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjp1UGxhbmVdOwor
ICAgIGNvbnN0IFRleHR1cmUmIHZUZXh0dXJlID0gbV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21p
dW06OnZQbGFuZV07CiAKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHlUZXh0dXJlLmlkKSk7
CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCB5VGV4dHVyZS5tX3RleHR1cmUtPnRleHR1cmVJZCgpKSk7CiAgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkUyKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCB1VGV4dHVyZS5pZCkpOworICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdVRleHR1cmUu
bV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOwogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3Rp
dmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMykpOwotICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdlRl
eHR1cmUuaWQpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHZUZXh0dXJlLm1fdGV4dHVyZS0+dGV4dHVyZUlkKCkp
KTsKIAogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dy
YW0oKSkpOwogCi0gICAgZmxvYXQgeVdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9h
dD4oeVRleHR1cmUudmlzaWJsZVNpemUud2lkdGgoKSkgLyB5VGV4dHVyZS5zaXplLndpZHRoKCk7
CisgICAgZmxvYXQgeVdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4oeVRleHR1
cmUubV92aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHlUZXh0dXJlLm1fdGV4dHVyZS0+c2l6ZSgpLndp
ZHRoKCk7CiAgICAgLy8gQXJiaXRyYXJpbHkgdGFrZSB0aGUgdSBzaXplcyBiZWNhdXNlIHUgYW5k
IHYgZGltZW5zaW9ucyBhcmUgaWRlbnRpY2FsLgotICAgIGZsb2F0IHV2V2lkdGhTY2FsZUZhY3Rv
ciA9IHN0YXRpY19jYXN0PGZsb2F0Pih1VGV4dHVyZS52aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHVU
ZXh0dXJlLnNpemUud2lkdGgoKTsKKyAgICBmbG9hdCB1dldpZHRoU2NhbGVGYWN0b3IgPSBzdGF0
aWNfY2FzdDxmbG9hdD4odVRleHR1cmUubV92aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHVUZXh0dXJl
Lm1fdGV4dHVyZS0+c2l6ZSgpLndpZHRoKCk7CiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVu
aWZvcm0xZihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS55V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9u
KCksIHlXaWR0aFNjYWxlRmFjdG9yKSk7CiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZv
cm0xZihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS51dldpZHRoU2NhbGVGYWN0b3JMb2NhdGlvbigp
LCB1dldpZHRoU2NhbGVGYWN0b3IpKTsKIApAQCAtMTUwLDIxICsyNzYsMTggQEAgdm9pZCBDQ1Zp
ZGVvTGF5ZXJJbXBsOjpkcmF3WVVWKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJl
cikgY29uc3QKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRTApKTsKIH0KIAotdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3
UkdCQShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpIGNvbnN0Cit0ZW1wbGF0
ZTxjbGFzcyBQcm9ncmFtPgordm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3Q29tbW9uKExheWVy
UmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgUHJvZ3JhbSogcHJvZ3JhbSwgZmxvYXQg
d2lkdGhTY2FsZUZhY3RvciwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQpIGNvbnN0CiB7Ci0g
ICAgY29uc3QgUkdCQVByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT52aWRlb0xheWVy
UkdCQVByb2dyYW0oKTsKICAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXpl
ZCgpKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlci0+
Y29udGV4dCgpOwotICAgIENDVmlkZW9MYXllckltcGw6OlRleHR1cmUgdGV4dHVyZSA9IG1fdGV4
dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjpyZ2JQbGFuZV07CiAKICAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKLSAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIHRleHR1cmUuaWQpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmVJZCkpOwogCiAgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Ci0g
ICAgZmxvYXQgd2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0Pih0ZXh0dXJlLnZp
c2libGVTaXplLndpZHRoKCkpIC8gdGV4dHVyZS5zaXplLndpZHRoKCk7CiAgICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPnVuaWZvcm00Zihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS50ZXhUcmFuc2Zv
cm1Mb2NhdGlvbigpLCAwLCAwLCB3aWR0aFNjYWxlRmFjdG9yLCAxKSk7Ci0KICAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxl
ckxvY2F0aW9uKCksIDApKTsKIAogICAgIGxheWVyUmVuZGVyZXItPmRyYXdUZXh0dXJlZFF1YWQo
ZHJhd1RyYW5zZm9ybSgpLCBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJh
d09wYWNpdHkoKSwgbGF5ZXJSZW5kZXJlci0+c2hhcmVkR2VvbWV0cnlRdWFkKCksCkBAIC0xNzMs
MjYgKzI5NiwxOCBAQCB2b2lkIENDVmlkZW9MYXllckltcGw6OmRyYXdSR0JBKExheWVyUmVuZGVy
ZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikgY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC0xKTsKIH0KIAordm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3UkdCQShM
YXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpIGNvbnN0Cit7CisgICAgY29uc3Qg
UkdCQVByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT52aWRlb0xheWVyUkdCQVByb2dy
YW0oKTsKKyAgICBjb25zdCBUZXh0dXJlJiB0ZXh0dXJlID0gbV90ZXh0dXJlc1tWaWRlb0ZyYW1l
Q2hyb21pdW06OnJnYlBsYW5lXTsKKyAgICBmbG9hdCB3aWR0aFNjYWxlRmFjdG9yID0gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHRleHR1cmUubV92aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHRleHR1cmUubV90
ZXh0dXJlLT5zaXplKCkud2lkdGgoKTsKKyAgICBkcmF3Q29tbW9uKGxheWVyUmVuZGVyZXIsIHBy
b2dyYW0sIHdpZHRoU2NhbGVGYWN0b3IsIHRleHR1cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSk7
Cit9CisKIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhd05hdGl2ZVRleHR1cmUoTGF5ZXJSZW5k
ZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKSBjb25zdAogewogICAgIGNvbnN0IE5hdGl2ZVRl
eHR1cmVQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dmlkZW9MYXllck5hdGl2ZVRl
eHR1cmVQcm9ncmFtKCk7Ci0gICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6
ZWQoKSk7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXIt
PmNvbnRleHQoKTsKLQotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5i
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9uYXRpdmVUZXh0dXJl
SWQpKTsKLQotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0tPnBy
b2dyYW0oKSkpOwotICAgIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9h
dD4obV9uYXRpdmVUZXh0dXJlVmlzaWJsZVNpemUud2lkdGgoKSkgLyBtX25hdGl2ZVRleHR1cmVT
aXplLndpZHRoKCk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00Zihwcm9ncmFt
LT52ZXJ0ZXhTaGFkZXIoKS50ZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCAwLCAwLCB3aWR0aFNjYWxl
RmFjdG9yLCAxKSk7Ci0KLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHByb2dy
YW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKLQotICAgIGxheWVy
UmVuZGVyZXItPmRyYXdUZXh0dXJlZFF1YWQoZHJhd1RyYW5zZm9ybSgpLCBib3VuZHMoKS53aWR0
aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwgbGF5ZXJSZW5kZXJlci0+c2hh
cmVkR2VvbWV0cnlRdWFkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0
aW9uKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7CisgICAgZHJh
d0NvbW1vbihsYXllclJlbmRlcmVyLCBwcm9ncmFtLCAxLCBtX25hdGl2ZVRleHR1cmVJZCk7CiB9
CiAKIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFt
JiB0cywgaW50IGluZGVudCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaAppbmRl
eCBlNTMxN2FkMzRkYWVmY2I1MDYxMTZlOWQzODA4YmZhNWY5MmFiNzMwLi5kMTczYzExNzkxZTc3
ODVhNDAyYWYzMmQ2MGUxNjllNzUxNWUwMzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1w
bC5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIENDVmlkZW9MYXllckltcGxfaAogI2RlZmlu
ZSBDQ1ZpZGVvTGF5ZXJJbXBsX2gKIAotI2luY2x1ZGUgIlByb2dyYW1CaW5kaW5nLmgiCisjaW5j
bHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKICNpbmNsdWRlICJTaGFkZXJDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgIlZpZGVvRnJhbWVDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlZpZGVvTGF5ZXJDaHJvbWl1
bS5oIgpAQCAtMzQsNiArMzQsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3RlbXBsYXRl
PGNsYXNzIFZlcnRleFNoYWRlciwgY2xhc3MgRnJhZ21lbnRTaGFkZXI+IGNsYXNzIFByb2dyYW1C
aW5kaW5nOwogY2xhc3MgVmlkZW9GcmFtZVByb3ZpZGVyOwogCiBjbGFzcyBDQ1ZpZGVvTGF5ZXJJ
bXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsKQEAgLTUyLDM2ICs1MywzNyBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGlu
ZGVudCkgY29uc3Q7CiAKLSAgICB2b2lkIHNldFNraXBzRHJhdyhib29sIHNraXBzRHJhdykgeyBt
X3NraXBzRHJhdyA9IHNraXBzRHJhdzsgfQotICAgIHZvaWQgc2V0RnJhbWVGb3JtYXQoVmlkZW9G
cmFtZUNocm9taXVtOjpGb3JtYXQgZm9ybWF0KSB7IG1fZnJhbWVGb3JtYXQgPSBmb3JtYXQ7IH0K
LSAgICB2b2lkIHNldFRleHR1cmUoc2l6ZV90LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCwg
Y29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFNpemUmIHZpc2libGVTaXplKTsKLSAgICB2b2lkIHNl
dE5hdGl2ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQsIGNvbnN0IEludFNpemUm
LCBjb25zdCBJbnRTaXplJiB2aXNpYmxlU2l6ZSk7CisgICAgdm9pZCBzZXRQcm92aWRlcihWaWRl
b0ZyYW1lUHJvdmlkZXIqKTsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBDQ1ZpZGVvTGF5ZXJJ
bXBsKGludCk7CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkg
Y29uc3QgeyByZXR1cm4gIlZpZGVvTGF5ZXIiOyB9CiAKLSAgICBzdHJ1Y3QgVGV4dHVyZSB7Ci0g
ICAgICAgIFBsYXRmb3JtM0RPYmplY3QgaWQ7Ci0gICAgICAgIEludFNpemUgc2l6ZTsKLSAgICAg
ICAgSW50U2l6ZSB2aXNpYmxlU2l6ZTsKLSAgICB9OwotCisgICAgYm9vbCBjb3B5RnJhbWVUb1Rl
eHR1cmVzKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSosIEdDM0RlbnVtIGZvcm1hdCwgTGF5ZXJS
ZW5kZXJlckNocm9taXVtKik7CisgICAgdm9pZCBjb3B5UGxhbmVUb1RleHR1cmUoTGF5ZXJSZW5k
ZXJlckNocm9taXVtKiwgY29uc3Qgdm9pZCogcGxhbmUsIGludCBpbmRleCk7CisgICAgYm9vbCBy
ZXNlcnZlVGV4dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiwgR0MzRGVudW0gZm9ybWF0
LCBMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKICAgICB2b2lkIGRyYXdZVVYoTGF5ZXJSZW5kZXJl
ckNocm9taXVtKikgY29uc3Q7CiAgICAgdm9pZCBkcmF3UkdCQShMYXllclJlbmRlcmVyQ2hyb21p
dW0qKSBjb25zdDsKICAgICB2b2lkIGRyYXdOYXRpdmVUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJv
bWl1bSopIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIFByb2dyYW0+IHZvaWQgZHJhd0NvbW1v
bihMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBQcm9ncmFtKiwgZmxvYXQgd2lkdGhTY2FsZUZhY3Rv
ciwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQpIGNvbnN0OworCisgICAgTXV0ZXggbV9wcm92
aWRlck11dGV4OyAvLyBHdWFyZHMgbV9wcm92aWRlciBiZWxvdy4KKyAgICBWaWRlb0ZyYW1lUHJv
dmlkZXIqIG1fcHJvdmlkZXI7CiAKICAgICBzdGF0aWMgY29uc3QgZmxvYXQgeXV2MlJHQls5XTsK
ICAgICBzdGF0aWMgY29uc3QgZmxvYXQgeXV2QWRqdXN0WzNdOwogCi0gICAgYm9vbCBtX3NraXBz
RHJhdzsKLSAgICBWaWRlb0ZyYW1lQ2hyb21pdW06OkZvcm1hdCBtX2ZyYW1lRm9ybWF0OwotICAg
IFRleHR1cmUgbV90ZXh0dXJlc1szXTsKKyAgICBzdHJ1Y3QgVGV4dHVyZSB7CisgICAgICAgIE93
blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV90ZXh0dXJlOworICAgICAgICBJbnRTaXplIG1fdmlzaWJs
ZVNpemU7CisgICAgfTsKKyAgICBlbnVtIHsgTWF4UGxhbmVzID0gMyB9OworICAgIFRleHR1cmUg
bV90ZXh0dXJlc1tNYXhQbGFuZXNdOworICAgIGludCBtX3BsYW5lczsKIAogICAgIFBsYXRmb3Jt
M0RPYmplY3QgbV9uYXRpdmVUZXh0dXJlSWQ7CiAgICAgSW50U2l6ZSBtX25hdGl2ZVRleHR1cmVT
aXplOwotICAgIEludFNpemUgbV9uYXRpdmVUZXh0dXJlVmlzaWJsZVNpemU7CiB9OwogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVBsYXllckNsaWVu
dEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGll
bnRJbXBsLmNwcAppbmRleCA5OTM2MWVkOTQxYWE0NjMwNmQ1NjdiZDIzZDhkY2RlYWRmNjVhOTk2
Li45Yjk1ZjhkNTk3ZWUzNGFhNDU4ZTFjMWVkZTg2NTQzZTkwOGY0Mjk0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5j
cHAKQEAgLTYyLDI5ICs2Miw2IEBAIHN0YXRpYyBQYXNzT3duUHRyPFdlYk1lZGlhUGxheWVyPiBj
cmVhdGVXZWJNZWRpYVBsYXllcihXZWJNZWRpYVBsYXllckNsaWVudCogY2xpCiAgICAgcmV0dXJu
IGFkb3B0UHRyKHdlYkZyYW1lLT5jbGllbnQoKS0+Y3JlYXRlTWVkaWFQbGF5ZXIod2ViRnJhbWUs
IGNsaWVudCkpOwogfQogCi1zdGF0aWMgYm9vbCBpc1ZpZGVvRnJhbWVGb3JtYXRPcGFxdWUoV2Vi
VmlkZW9GcmFtZTo6Rm9ybWF0IGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAg
IGNhc2UgV2ViVmlkZW9GcmFtZTo6Rm9ybWF0SW52YWxpZDoKLSAgICBjYXNlIFdlYlZpZGVvRnJh
bWU6OkZvcm1hdEVtcHR5OgotICAgIGNhc2UgV2ViVmlkZW9GcmFtZTo6Rm9ybWF0UkdCQToKLSAg
ICBjYXNlIFdlYlZpZGVvRnJhbWU6OkZvcm1hdE5hdGl2ZVRleHR1cmU6Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBjYXNlIFdlYlZpZGVvRnJhbWU6OkZvcm1hdFJHQjU1NToKLSAgICBjYXNl
IFdlYlZpZGVvRnJhbWU6OkZvcm1hdFJHQjU2NToKLSAgICBjYXNlIFdlYlZpZGVvRnJhbWU6OkZv
cm1hdFJHQjI0OgotICAgIGNhc2UgV2ViVmlkZW9GcmFtZTo6Rm9ybWF0UkdCMzI6Ci0gICAgY2Fz
ZSBXZWJWaWRlb0ZyYW1lOjpGb3JtYXRZVjEyOgotICAgIGNhc2UgV2ViVmlkZW9GcmFtZTo6Rm9y
bWF0WVYxNjoKLSAgICBjYXNlIFdlYlZpZGVvRnJhbWU6OkZvcm1hdE5WMTI6Ci0gICAgY2FzZSBX
ZWJWaWRlb0ZyYW1lOjpGb3JtYXRBU0NJSToKLSAgICBjYXNlIFdlYlZpZGVvRnJhbWU6OkZvcm1h
dEk0MjA6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGJvb2wgV2ViTWVkaWFQbGF5ZXJDbGllbnRJ
bXBsOjptX2lzRW5hYmxlZCA9IGZhbHNlOwogCiBib29sIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1w
bDo6aXNFbmFibGVkKCkKQEAgLTYwMCw4ICs1NzcsNiBAQCBWaWRlb0ZyYW1lQ2hyb21pdW0qIFdl
Yk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6Z2V0Q3VycmVudEZyYW1lKCkKICAgICAgICAgV2ViVmlk
ZW9GcmFtZSogd2Via2l0VmlkZW9GcmFtZSA9IG1fd2ViTWVkaWFQbGF5ZXItPmdldEN1cnJlbnRG
cmFtZSgpOwogICAgICAgICBpZiAod2Via2l0VmlkZW9GcmFtZSkKICAgICAgICAgICAgIG1fY3Vy
cmVudFZpZGVvRnJhbWUgPSBhZG9wdFB0cihuZXcgVmlkZW9GcmFtZUNocm9taXVtSW1wbCh3ZWJr
aXRWaWRlb0ZyYW1lKSk7Ci0gICAgICAgIGlmIChtX3ZpZGVvTGF5ZXIpCi0gICAgICAgICAgICBt
X3ZpZGVvTGF5ZXItPnNldE9wYXF1ZSh3ZWJraXRWaWRlb0ZyYW1lICYmIGlzVmlkZW9GcmFtZUZv
cm1hdE9wYXF1ZSh3ZWJraXRWaWRlb0ZyYW1lLT5mb3JtYXQoKSkpOwogICAgIH0KICAgICByZXR1
cm4gbV9jdXJyZW50VmlkZW9GcmFtZS5nZXQoKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119549</attachid>
            <date>2011-12-15 20:15:39 -0800</date>
            <delta_ts>2011-12-16 00:07:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73043-20111215201537.patch</filename>
            <type>text/plain</type>
            <size>34148</size>
            <attacher name="Ami Fischman">fischman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNjU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWVjMTc4Nzg3N2U2N2U2
ZjhkODAxY2NjNzYzYmJiMjdhNzE5OGIxYi4uMjZiNmU4Mzc1YTQ0ZGQ0OGIwNmQxNzY2OWM3Mjkw
NzU2MDBjOWIxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDExLTEyLTE1ICBBbWkg
RmlzY2htYW4gIDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRml4IHRoZSBsaWZl
LWN5Y2xlIG9mIHZpZGVvIGZyYW1lcyBoYW5kbGVkIGJ5IFZpZGVvTGF5ZXJDaHJvbWl1bS9DQ1Zp
ZGVvTGF5ZXJJbXBsLgorICAgICAgICBWaWRlb0ZyYW1lUHJvdmlkZXI6OntnZXQscHV0fUN1cnJl
bnRGcmFtZSBwcm92aWRlIGxlYXNlIHNlbWFudGljcy4gIFByZXZpb3VzbHkKKyAgICAgICAgVmlk
ZW9MYXllckNocm9taXVtIHdvdWxkIGFjcXVpcmUgdGhlIGxlYXNlIGZvciB0aGUgZHVyYXRpb24g
b2YgY29weWluZyB0aGUgZnJhbWUsCisgICAgICAgIGV2ZW4gaWYgdGhhdCB3YXMgb25seSBhIHRl
eHR1cmUgSUQsIGFuZCBpbW1lZGlhdGVseSByZXR1cm4gdGhlIGxlYXNlLCB3aGlsZQorICAgICAg
ICBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3KCkgd291bGQgY29tZSBhbG9uZyBsYXRlciBhbmQgdXNl
IHRoZSAobm8tbG9uZ2VyIGxvY2tlZCkKKyAgICAgICAgdGV4dHVyZSBvcHRpbWlzdGljYWxseS4g
IFRoaXMgY2hhbmdlIG1ha2VzIGl0IHNvIHRoYXQgQ0NWaWRlb0xheWVySW1wbCBob2xkcworICAg
ICAgICB0aGUgZnJhbWUncyBsZWFzZSBmb3IgdGhlIGR1cmF0aW9uIG9mIGRyYXcoKSwgZ3VhcmFu
dGVlaW5nIHRoZSBmcmFtZSBpcyB2YWxpZCB0byByZWFkLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwNDMKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OlZpZGVvTGF5ZXJDaHJvbWl1bSk6
CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06On5WaWRlb0xheWVyQ2hyb21p
dW0pOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVy
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnJlbGVhc2VQcm92
aWRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNo
cm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRl
b0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpDQ1Zp
ZGVvTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6On5DQ1Zp
ZGVvTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OnNldFBy
b3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRWRkNGb3JtYXRUb0dDM0RGb3JtYXQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6ZHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpjb3B5RnJhbWVUb1RleHR1cmVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmNvcHlQbGFuZVRvVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpjb21wdXRlVmlzaWJsZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRl
b0xheWVySW1wbDo6cmVzZXJ2ZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9M
YXllckltcGw6OmRyYXdZVVYpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6
ZHJhd0NvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3UkdC
QSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3TmF0aXZlVGV4dHVy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVy
SW1wbC5oOgorCiAyMDExLTEyLTEyICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTAyNjQ4LgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwppbmRleCA4ZTRhMDcwNjMxNzMzOGE3NTNlYzQ2YmVlMjg4YTliMDFjZWZkYzk5
Li4zYTgyMzUzMmU0MjBiZjE5NDcwM2NjNWViMWFiODhmZGMzNDVmMThhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTEyLTE1ICBBbWkgRmlzY2htYW4g
IDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2ZXJ0IENMIDEwMjM4NyBiZWNh
dXNlIGl0IGlzIGluY29ycmVjdCB0byBjYWxsIHNldE9wYXF1ZSBmcm9tIGEgbm9uLW1haW4gdGhy
ZWFkCisgICAgICAgIChhbmQgZ2V0Q3VycmVudEZyYW1lKCkgY2FuIG5vdyBiZSBjYWxsZWQgZnJv
bSB0aGUgY29tcG9zaXRvciB0aHJlYWQgd2hlbgorICAgICAgICAtLWVuYWJsZS10aHJlYWRlZC1j
b21wb3NpdGluZyBpcyBzcGVjaWZpZWQpLiAgV2hlbiB0aGlzIGlzIGZpeGVkIGZvciByZWFsLCB0
aGUKKyAgICAgICAgb3BhY2l0eS1kZXRlcm1pbmF0aW9uIHNob3VsZCBwcm9iYWJseSBub3QgYmUg
cGVyLWZyYW1lIGJ1dCByYXRoZXIgYSBtZXRob2Qgb24KKyAgICAgICAgV2ViTWVkaWFQbGF5ZXJD
bGllbnQgdGhhdCB0aGUgcGlwZWxpbmUgY2FuIGNhbGwgdXAtZnJvbnQgKGFuZCBvbiB0aGUgbWFp
biB0aHJlYWQpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzMwNDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHNyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJNZWRpYVBsYXllckNsaWVudEltcGw6OmdldEN1cnJlbnRGcmFtZSk6CisKIDIwMTEtMTItMTIg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgV2ViS2l0IGNvZGUg
c2hvdWxkbid0IGJlIGNhbGxpbmcgYXBwbHlDb21tYW5kIGRpcmVjdGx5CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21p
dW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9M
YXllckNocm9taXVtLmNwcAppbmRleCBlYzkzZjE2OGRhMTRlYTQxZTNjMTZkZjZkN2M0OWJlZTQ1
MTNlYWNlLi45ZjVhZGEyYzRlNzhhYWU2Zjc0ZjA0YzQ0Y2NkNTRjOTg4ZTRiYWNmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTMzLDE0ICszMyw3IEBACiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIlZpZGVvTGF5ZXJDaHJvbWl1bS5oIgog
Ci0jaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgotI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiVmlkZW9GcmFtZUNocm9taXVtLmgiCiAjaW5j
bHVkZSAiVmlkZW9GcmFtZVByb3ZpZGVyLmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIK
LSNpbmNsdWRlICJjYy9DQ1RleHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NWaWRlb0xh
eWVySW1wbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01MywyMzcgKzQ2LDI5IEBAIFBh
c3NSZWZQdHI8VmlkZW9MYXllckNocm9taXVtPiBWaWRlb0xheWVyQ2hyb21pdW06OmNyZWF0ZShD
Q0xheWVyRGVsZWdhdGUqIGRlbGVnCiAKIFZpZGVvTGF5ZXJDaHJvbWl1bTo6VmlkZW9MYXllckNo
cm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUsIFZpZGVvRnJhbWVQcm92aWRlciogcHJv
dmlkZXIpCiAgICAgOiBMYXllckNocm9taXVtKGRlbGVnYXRlKQotICAgICwgbV9za2lwc0RyYXco
dHJ1ZSkKLSAgICAsIG1fZnJhbWVGb3JtYXQoVmlkZW9GcmFtZUNocm9taXVtOjpJbnZhbGlkKQog
ICAgICwgbV9wcm92aWRlcihwcm92aWRlcikKLSAgICAsIG1fcGxhbmVzKDApCi0gICAgLCBtX25h
dGl2ZVRleHR1cmVJZCgwKQogeworICAgIEFTU0VSVChtX3Byb3ZpZGVyKTsKIH0KIAogVmlkZW9M
YXllckNocm9taXVtOjp+VmlkZW9MYXllckNocm9taXVtKCkKIHsKLSAgICBjbGVhbnVwUmVzb3Vy
Y2VzKCk7CisgICAgQVNTRVJUKCFtX3Byb3ZpZGVyKTsKIH0KIAogUGFzc1JlZlB0cjxDQ0xheWVy
SW1wbD4gVmlkZW9MYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCgpCiB7Ci0gICAgcmV0
dXJuIENDVmlkZW9MYXllckltcGw6OmNyZWF0ZShtX2xheWVySWQpOwotfQotCi12b2lkIFZpZGVv
TGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpCi17Ci0gICAgTGF5ZXJDaHJvbWl1bTo6
Y2xlYW51cFJlc291cmNlcygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBNYXhQbGFu
ZXM7ICsraSkKLSAgICAgICAgbV90ZXh0dXJlc1tpXS5tX3RleHR1cmUuY2xlYXIoKTsKLX0KLQot
dm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQsIENDVGV4dHVyZVVwZGF0ZXImIHVwZGF0ZXIpCi17Ci0gICAg
aWYgKCFtX2RlbGVnYXRlIHx8ICFtX3Byb3ZpZGVyIHx8ICFkcmF3c0NvbnRlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX25lZWRzRGlzcGxheSAmJiB0ZXh0dXJlc1ZhbGlkKCkp
IHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IDA7IHBsYW5lIDwgbV9wbGFuZXM7IHBs
YW5lKyspIHsKLSAgICAgICAgICAgIE1hbmFnZWRUZXh0dXJlKiB0ZXggPSBtX3RleHR1cmVzW3Bs
YW5lXS5tX3RleHR1cmUuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoIXRleC0+cmVzZXJ2ZSh0ZXgt
PnNpemUoKSwgdGV4LT5mb3JtYXQoKSkpIHsKLSAgICAgICAgICAgICAgICBtX3NraXBzRHJhdyA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fcGxhbmVzID0gMDsKLSAgICBtX3NraXBz
RHJhdyA9IGZhbHNlOwotCi0gICAgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSA9IG1fcHJvdmlk
ZXItPmdldEN1cnJlbnRGcmFtZSgpOwotICAgIGlmICghZnJhbWUpIHsKLSAgICAgICAgbV9za2lw
c0RyYXcgPSB0cnVlOwotICAgICAgICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJhbWUoZnJhbWUp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9mcmFtZUZvcm1hdCA9IGZyYW1lLT5m
b3JtYXQoKTsKLSAgICBHQzNEZW51bSB0ZXh0dXJlRm9ybWF0ID0gZGV0ZXJtaW5lVGV4dHVyZUZv
cm1hdChmcmFtZSk7Ci0gICAgaWYgKHRleHR1cmVGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUpIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBvdGhlciBwYXRo
cy4KLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVl
OwotICAgICAgICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJhbWUoZnJhbWUpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHRleHR1cmVGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQpIHsKLSAgICAgICAgbV9uYXRpdmVUZXh0dXJlSWQgPSBmcmFtZS0+dGV4
dHVyZUlkKCk7Ci0gICAgICAgIG1fbmF0aXZlVGV4dHVyZVNpemUgPSBJbnRTaXplKGZyYW1lLT53
aWR0aCgpLCBmcmFtZS0+aGVpZ2h0KCkpOwotICAgICAgICBtX25hdGl2ZVRleHR1cmVWaXNpYmxl
U2l6ZSA9IEludFNpemUoZnJhbWUtPndpZHRoKCksIGZyYW1lLT5oZWlnaHQoKSk7Ci0gICAgICAg
IG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7Ci0gICAgICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRG
cmFtZShmcmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBBbGxvY2F0ZSB0
ZXh0dXJlcyBmb3IgcGxhbmVzIGlmIHRoZXkgYXJlIG5vdCBhbGxvY2F0ZWQgYWxyZWFkeSwgb3IK
LSAgICAvLyByZWFsbG9jYXRlIHRleHR1cmVzIHRoYXQgYXJlIHRoZSB3cm9uZyBzaXplIGZvciB0
aGUgZnJhbWUuCi0gICAgYm9vbCB0ZXh0dXJlc1Jlc2VydmVkID0gcmVzZXJ2ZVRleHR1cmVzKGZy
YW1lLCB0ZXh0dXJlRm9ybWF0KTsKLSAgICBpZiAoIXRleHR1cmVzUmVzZXJ2ZWQpIHsKLSAgICAg
ICAgbV9za2lwc0RyYXcgPSB0cnVlOwotICAgICAgICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJh
bWUoZnJhbWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gVXBkYXRlIHRleHR1
cmUgcGxhbmVzLgotICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBwbGFuZSA8IGZyYW1lLT5w
bGFuZXMoKTsgcGxhbmUrKykgewotICAgICAgICBUZXh0dXJlJiB0ZXh0dXJlID0gbV90ZXh0dXJl
c1twbGFuZV07Ci0gICAgICAgIEFTU0VSVCh0ZXh0dXJlLm1fdGV4dHVyZSk7Ci0gICAgICAgIEFT
U0VSVChmcmFtZS0+cmVxdWlyZWRUZXh0dXJlU2l6ZShwbGFuZSkgPT0gdGV4dHVyZS5tX3RleHR1
cmUtPnNpemUoKSk7Ci0gICAgICAgIHVwZGF0ZVRleHR1cmUoY29udGV4dCwgdXBkYXRlci5hbGxv
Y2F0b3IoKSwgdGV4dHVyZSwgZnJhbWUtPmRhdGEocGxhbmUpKTsKLSAgICB9Ci0KLSAgICBtX3Bs
YW5lcyA9IGZyYW1lLT5wbGFuZXMoKTsKLSAgICBBU1NFUlQobV9wbGFuZXMgPD0gTWF4UGxhbmVz
KTsKLQotICAgIG1fdXBkYXRlUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGJvdW5kcygp
KTsKLSAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNlOwotCi0gICAgbV9wcm92aWRlci0+cHV0Q3Vy
cmVudEZyYW1lKGZyYW1lKTsKLX0KLQotdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnB1c2hQcm9w
ZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQotewotICAgIExheWVyQ2hyb21pdW06OnB1c2hQ
cm9wZXJ0aWVzVG8obGF5ZXIpOwotCi0gICAgQ0NWaWRlb0xheWVySW1wbCogdmlkZW9MYXllciA9
IHN0YXRpY19jYXN0PENDVmlkZW9MYXllckltcGwqPihsYXllcik7Ci0gICAgdmlkZW9MYXllci0+
c2V0U2tpcHNEcmF3KG1fc2tpcHNEcmF3KTsKLSAgICB2aWRlb0xheWVyLT5zZXRGcmFtZUZvcm1h
dChtX2ZyYW1lRm9ybWF0KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wbGFuZXM7
ICsraSkgewotICAgICAgICBpZiAoIW1fdGV4dHVyZXNbaV0ubV90ZXh0dXJlKSB7Ci0gICAgICAg
ICAgICB2aWRlb0xheWVyLT5zZXRTa2lwc0RyYXcodHJ1ZSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICB2aWRlb0xheWVyLT5zZXRUZXh0dXJlKGksIG1fdGV4dHVyZXNb
aV0ubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSwgbV90ZXh0dXJlc1tpXS5tX3RleHR1cmUtPnNpemUo
KSwgbV90ZXh0dXJlc1tpXS5tX3Zpc2libGVTaXplKTsKLSAgICB9Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9wbGFuZXM7IGkgPCBNYXhQbGFuZXM7ICsraSkKLSAgICAgICAgdmlkZW9MYXllci0+
c2V0VGV4dHVyZShpLCAwLCBJbnRTaXplKCksIEludFNpemUoKSk7Ci0gICAgaWYgKG1fZnJhbWVG
b3JtYXQgPT0gVmlkZW9GcmFtZUNocm9taXVtOjpOYXRpdmVUZXh0dXJlKQotICAgICAgICB2aWRl
b0xheWVyLT5zZXROYXRpdmVUZXh0dXJlKG1fbmF0aXZlVGV4dHVyZUlkLCBtX25hdGl2ZVRleHR1
cmVTaXplLCBtX25hdGl2ZVRleHR1cmVWaXNpYmxlU2l6ZSk7Ci19Ci0KLXZvaWQgVmlkZW9MYXll
ckNocm9taXVtOjpzZXRMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdCogaG9zdCkKLXsKLSAg
ICBpZiAoaG9zdCAmJiBsYXllclRyZWVIb3N0KCkgIT0gaG9zdCkgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgTWF4UGxhbmVzOyArK2kpIHsKLSAgICAgICAgICAgIG1fdGV4dHVy
ZXNbaV0ubV92aXNpYmxlU2l6ZSA9IEludFNpemUoKTsKLSAgICAgICAgICAgIG1fdGV4dHVyZXNb
aV0ubV90ZXh0dXJlID0gTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShob3N0LT5jb250ZW50c1RleHR1
cmVNYW5hZ2VyKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgTGF5ZXJDaHJvbWl1bTo6c2V0
TGF5ZXJUcmVlSG9zdChob3N0KTsKLX0KLQotR0MzRGVudW0gVmlkZW9MYXllckNocm9taXVtOjpk
ZXRlcm1pbmVUZXh0dXJlRm9ybWF0KGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUpCi17
Ci0gICAgc3dpdGNoIChmcmFtZS0+Zm9ybWF0KCkpIHsKLSAgICBjYXNlIFZpZGVvRnJhbWVDaHJv
bWl1bTo6WVYxMjoKLSAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6WVYxNjoKLSAgICAgICAg
cmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U7Ci0gICAgY2FzZSBWaWRlb0ZyYW1l
Q2hyb21pdW06OlJHQkE6Ci0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsK
LSAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6TmF0aXZlVGV4dHVyZToKLSAgICAgICAgcmV0
dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUU7Ci19Ci0KLWJvb2wgVmlkZW9MYXllckNocm9taXVtOjp0ZXh0dXJlc1ZhbGlkKCkKLXsKLSAg
ICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBtX3BsYW5lczsgcGxhbmUrKykgewot
ICAgICAgICBNYW5hZ2VkVGV4dHVyZSogdGV4ID0gbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJl
LmdldCgpOwotICAgICAgICBpZiAoIXRleC0+aXNWYWxpZCh0ZXgtPnNpemUoKSwgdGV4LT5mb3Jt
YXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIFZpZGVvTGF5ZXJDaHJvbWl1bTo6cmVzZXJ2ZVRleHR1cmVzKGNvbnN0IFZp
ZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUsIEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpCi17Ci0gICAg
QVNTRVJUKGxheWVyVHJlZUhvc3QoKSk7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLSAgICBBU1NFUlQo
dGV4dHVyZUZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7Ci0KLSAg
ICBpbnQgbWF4VGV4dHVyZVNpemUgPSBsYXllclRyZWVIb3N0KCktPmxheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZTsKLQotICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAw
OyBwbGFuZSA8IGZyYW1lLT5wbGFuZXMoKTsgcGxhbmUrKykgewotICAgICAgICBJbnRTaXplIHJl
cXVpcmVkVGV4dHVyZVNpemUgPSBmcmFtZS0+cmVxdWlyZWRUZXh0dXJlU2l6ZShwbGFuZSk7Ci0K
LSAgICAgICAgLy8gSWYgdGhlIHJlbmRlcmVyIGNhbm5vdCBoYW5kbGUgdGhpcyBsYXJnZSBvZiBh
IHRleHR1cmUsIHJldHVybiBmYWxzZS4KLSAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHRl
c3Qgd2hlbiB0aWxlZCBsYXllcnMgYXJlIGltcGxlbWVudGVkLgotICAgICAgICBpZiAocmVxdWly
ZWRUZXh0dXJlU2l6ZS5pc1plcm8oKSB8fCByZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCkgPiBt
YXhUZXh0dXJlU2l6ZSB8fCByZXF1aXJlZFRleHR1cmVTaXplLmhlaWdodCgpID4gbWF4VGV4dHVy
ZVNpemUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKCFtX3RleHR1
cmVzW3BsYW5lXS5tX3RleHR1cmUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgaWYgKG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS0+c2l6ZSgpICE9IHJlcXVpcmVkVGV4
dHVyZVNpemUpCi0gICAgICAgICAgICBtX3RleHR1cmVzW3BsYW5lXS5tX3Zpc2libGVTaXplID0g
Y29tcHV0ZVZpc2libGVTaXplKGZyYW1lLCBwbGFuZSk7Ci0KLSAgICAgICAgbV90ZXh0dXJlc1tw
bGFuZV0ubV90ZXh0dXJlLT5yZXNlcnZlKHJlcXVpcmVkVGV4dHVyZVNpemUsIHRleHR1cmVGb3Jt
YXQpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1JbnRTaXplIFZpZGVvTGF5ZXJD
aHJvbWl1bTo6Y29tcHV0ZVZpc2libGVTaXplKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSogZnJh
bWUsIHVuc2lnbmVkIHBsYW5lKQotewotICAgIGludCB2aXNpYmxlV2lkdGggPSBmcmFtZS0+d2lk
dGgocGxhbmUpOwotICAgIGludCB2aXNpYmxlSGVpZ2h0ID0gZnJhbWUtPmhlaWdodChwbGFuZSk7
Ci0gICAgLy8gV2hlbiB0aGVyZSBhcmUgZGVhZCBwaXhlbHMgYXQgdGhlIGVkZ2Ugb2YgdGhlIHRl
eHR1cmUsIGRlY3JlYXNlCi0gICAgLy8gdGhlIGZyYW1lIHdpZHRoIGJ5IDEgdG8gcHJldmVudCB0
aGUgcmlnaHRtb3N0IHBpeGVscyBmcm9tCi0gICAgLy8gaW50ZXJwb2xhdGluZyB3aXRoIHRoZSBk
ZWFkIHBpeGVscy4KLSAgICBpZiAoZnJhbWUtPmhhc1BhZGRpbmdCeXRlcyhwbGFuZSkpCi0gICAg
ICAgIC0tdmlzaWJsZVdpZHRoOwotCi0gICAgLy8gSW4gWVYxMiwgZXZlcnkgMngyIHNxdWFyZSBv
ZiBZIHZhbHVlcyBjb3JyZXNwb25kcyB0byBvbmUgVSBhbmQKLSAgICAvLyBvbmUgViB2YWx1ZS4g
SWYgd2UgZGVjcmVhc2UgdGhlIHdpZHRoIG9mIHRoZSBVViBwbGFuZSwgd2UgbXVzdCBkZWNyZWFz
ZSB0aGUKLSAgICAvLyB3aWR0aCBvZiB0aGUgWSB0ZXh0dXJlIGJ5IDIgZm9yIHByb3BlciBhbGln
bm1lbnQuIFRoaXMgbXVzdCBoYXBwZW4KLSAgICAvLyBhbHdheXMsIGV2ZW4gaWYgWSdzIHRleHR1
cmUgZG9lcyBub3QgaGF2ZSBwYWRkaW5nIGJ5dGVzLgotICAgIGlmIChwbGFuZSA9PSBWaWRlb0Zy
YW1lQ2hyb21pdW06OnlQbGFuZSAmJiBmcmFtZS0+Zm9ybWF0KCkgPT0gVmlkZW9GcmFtZUNocm9t
aXVtOjpZVjEyKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+aGFzUGFkZGluZ0J5dGVzKFZpZGVvRnJh
bWVDaHJvbWl1bTo6dVBsYW5lKSkgewotICAgICAgICAgICAgaW50IG9yaWdpbmFsV2lkdGggPSBm
cmFtZS0+d2lkdGgocGxhbmUpOwotICAgICAgICAgICAgdmlzaWJsZVdpZHRoID0gb3JpZ2luYWxX
aWR0aCAtIDI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gSW50U2l6ZSh2aXNpYmxl
V2lkdGgsIHZpc2libGVIZWlnaHQpOwotfQotCi12b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBk
YXRlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciog
YWxsb2NhdG9yLCBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCB2b2lkKiBkYXRhKSBjb25zdAotewot
ICAgIEFTU0VSVChjb250ZXh0KTsKLSAgICBBU1NFUlQodGV4dHVyZS5tX3RleHR1cmUpOwotCi0g
ICAgdGV4dHVyZS5tX3RleHR1cmUtPmJpbmRUZXh0dXJlKGNvbnRleHQsIGFsbG9jYXRvcik7Ci0K
LSAgICBHQzNEZW51bSBmb3JtYXQgPSB0ZXh0dXJlLm1fdGV4dHVyZS0+Zm9ybWF0KCk7Ci0gICAg
SW50U2l6ZSBkaW1lbnNpb25zID0gdGV4dHVyZS5tX3RleHR1cmUtPnNpemUoKTsKLQotICAgIHZv
aWQqIG1lbSA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpKS0+bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCAwLCAwLCAwLCBkaW1lbnNpb25zLndpZHRoKCksIGRpbWVuc2lvbnMuaGVp
Z2h0KCksIGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIEV4dGVuc2lv
bnMzRENocm9taXVtOjpXUklURV9PTkxZKTsKLSAgICBpZiAobWVtKSB7Ci0gICAgICAgIG1lbWNw
eShtZW0sIGRhdGEsIGRpbWVuc2lvbnMud2lkdGgoKSAqIGRpbWVuc2lvbnMuaGVpZ2h0KCkpOwot
ICAgICAgICBHTEMoY29udGV4dCwgc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihj
b250ZXh0LT5nZXRFeHRlbnNpb25zKCkpLT51bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShtZW0p
KTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBJZiBtYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0g
ZmFpbHMsIHRoZW4gZG8gdGhlIHNsb3dlciB0ZXhTdWJJbWFnZTJECi0gICAgICAgIC8vIHVwbG9h
ZC4gVGhpcyBkb2VzIHR3aWNlIHRoZSBjb3BpZXMgYXMgbWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVN
LCBvbmUKLSAgICAgICAgLy8gaW4gdGhlIGNvbW1hbmQgYnVmZmVyIGFuZCBhbm90aGVyIHRvIHRo
ZSB0ZXh0dXJlLgotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4U3ViSW1hZ2UyRChH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgZGltZW5zaW9ucy53aWR0aCgp
LCBkaW1lbnNpb25zLmhlaWdodCgpLCBmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFLCBkYXRhKSk7Ci0gICAgfQorICAgIFJlZlB0cjxDQ1ZpZGVvTGF5ZXJJbXBsPiByZXQg
PSBDQ1ZpZGVvTGF5ZXJJbXBsOjpjcmVhdGUobV9sYXllcklkKTsKKyAgICBtX2xheWVySW1wbCA9
IHJldC5nZXQoKTsKKyAgICBtX2xheWVySW1wbC0+c2V0UHJvdmlkZXIobV9wcm92aWRlcik7Cisg
ICAgcmV0dXJuIHJldDsKIH0KIAogdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnJlbGVhc2VQcm92
aWRlcigpCiB7CiAgICAgbV9wcm92aWRlciA9IDA7CisgICAgaWYgKG1fbGF5ZXJJbXBsKQorICAg
ICAgICBtX2xheWVySW1wbC0+c2V0UHJvdmlkZXIoMCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmgKaW5kZXggNTE2YzhkMzg0N2MyYWRiNjRj
NWJiZWZiN2M5OWNhYjVmNWFmYWJhMy4uYzk1Nzk2NmRkMmMxODU4YmE2NmI4ODkyMWFhMzM1NzNl
NmJkZWNiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVmlkZW9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmgKQEAgLTM1LDExICszNSwxMiBA
QAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAogI2luY2x1ZGUgIkxheWVyQ2hy
b21pdW0uaCIKLSNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgotI2luY2x1ZGUgIlZpZGVvRnJh
bWVQcm92aWRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDVmlkZW9MYXll
ckltcGw7CitjbGFzcyBWaWRlb0ZyYW1lUHJvdmlkZXI7CisKIC8vIEEgTGF5ZXIgdGhhdCBjb250
YWlucyBhIFZpZGVvIGVsZW1lbnQuCiBjbGFzcyBWaWRlb0xheWVyQ2hyb21pdW0gOiBwdWJsaWMg
TGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6CkBAIC01MCw0NSArNTEsMTUgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOwog
Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250
ZXh0M0QqLCBDQ1RleHR1cmVVcGRhdGVyJik7CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVu
dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZvaWQgcmVsZWFzZVByb3ZpZGVyKCk7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCopOwotCi0g
ICAgdmlydHVhbCB2b2lkIHNldExheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Kik7Ci0KLXBy
b3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cFJlc291cmNlcygpOwotCiBwcml2YXRl
OgotICAgIHN0cnVjdCBUZXh0dXJlIHsKLSAgICAgICAgSW50U2l6ZSBtX3Zpc2libGVTaXplOwot
ICAgICAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IG1fdGV4dHVyZTsKLSAgICB9OwotCiAgICAg
VmlkZW9MYXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSosIFZpZGVvRnJhbWVQcm92aWRlciop
OwogCi0gICAgc3RhdGljIEdDM0RlbnVtIGRldGVybWluZVRleHR1cmVGb3JtYXQoY29uc3QgVmlk
ZW9GcmFtZUNocm9taXVtKik7Ci0gICAgc3RhdGljIEludFNpemUgY29tcHV0ZVZpc2libGVTaXpl
KGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSosIHVuc2lnbmVkIHBsYW5lKTsKLSAgICBib29sIHRl
eHR1cmVzVmFsaWQoKTsKLSAgICBib29sIHJlc2VydmVUZXh0dXJlcyhjb25zdCBWaWRlb0ZyYW1l
Q2hyb21pdW0qLCBHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKLSAgICB2b2lkIHVwZGF0ZVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgVGV4dHVyZSYsIGNvbnN0
IHZvaWQqKSBjb25zdDsKLQotICAgIHZvaWQgcmVzZXRGcmFtZVBhcmFtZXRlcnMoKTsKLQotICAg
IGJvb2wgbV9za2lwc0RyYXc7Ci0gICAgVmlkZW9GcmFtZUNocm9taXVtOjpGb3JtYXQgbV9mcmFt
ZUZvcm1hdDsKKyAgICBDQ1ZpZGVvTGF5ZXJJbXBsKiBtX2xheWVySW1wbDsKICAgICBWaWRlb0Zy
YW1lUHJvdmlkZXIqIG1fcHJvdmlkZXI7Ci0KLSAgICBlbnVtIHsgTWF4UGxhbmVzID0gMyB9Owot
ICAgIFRleHR1cmUgbV90ZXh0dXJlc1tNYXhQbGFuZXNdOwotICAgIHVuc2lnbmVkIG1fcGxhbmVz
OwotCi0gICAgdW5zaWduZWQgbV9uYXRpdmVUZXh0dXJlSWQ7Ci0gICAgSW50U2l6ZSBtX25hdGl2
ZVRleHR1cmVTaXplOwotICAgIEludFNpemUgbV9uYXRpdmVUZXh0dXJlVmlzaWJsZVNpemU7CiB9
OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCmluZGV4IDZiMzdlODZhNmNl
NjhkNTFiYTUyY2E0OGMyM2M2Zjc0ZjQ1NGNlYzkuLmQ2ZjhhYjM3MWVmMGI4MWU5NjY3ODFhYmQ1
ZDNlOTg3NjA0Njg2NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCkBAIC0y
OSw5ICsyOSwxMiBAQAogCiAjaW5jbHVkZSAiY2MvQ0NWaWRlb0xheWVySW1wbC5oIgogCisjaW5j
bHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlByb2dy
YW1CaW5kaW5nLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJWaWRl
b0ZyYW1lUHJvdmlkZXIuaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTYxLDc2ICs2NCwyMDQgQEAgY29uc3QgZmxvYXQgQ0NW
aWRlb0xheWVySW1wbDo6eXV2QWRqdXN0WzNdID0gewogCiBDQ1ZpZGVvTGF5ZXJJbXBsOjpDQ1Zp
ZGVvTGF5ZXJJbXBsKGludCBpZCkKICAgICA6IENDTGF5ZXJJbXBsKGlkKQorICAgICwgbV9wcm92
aWRlcigwKQogewogfQogCiBDQ1ZpZGVvTGF5ZXJJbXBsOjp+Q0NWaWRlb0xheWVySW1wbCgpCiB7
CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcHJvdmlkZXJNdXRleCk7CisgICAgQVNTRVJUKCFt
X3Byb3ZpZGVyKTsgLy8gQ2xlYXJlZCBkdXJpbmcgVmlkZW9MYXllckNocm9taXVtOjpyZWxlYXNl
UHJvdmlkZXIoKS4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTWF4UGxhbmVzOyArK2kp
CisgICAgICAgIG1fdGV4dHVyZXNbaV0ubV90ZXh0dXJlLmNsZWFyKCk7CiAgICAgY2xlYW51cFJl
c291cmNlcygpOwogfQogCi12b2lkIENDVmlkZW9MYXllckltcGw6OnNldFRleHR1cmUoc2l6ZV90
IGluZGV4LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwg
Y29uc3QgSW50U2l6ZSYgdmlzaWJsZVNpemUpCit2b2lkIENDVmlkZW9MYXllckltcGw6OnNldFBy
b3ZpZGVyKFZpZGVvRnJhbWVQcm92aWRlciogcHJvdmlkZXIpCiB7Ci0gICAgQVNTRVJUKGluZGV4
IDwgMyk7Ci0gICAgbV90ZXh0dXJlc1tpbmRleF0uaWQgPSB0ZXh0dXJlSWQ7Ci0gICAgbV90ZXh0
dXJlc1tpbmRleF0uc2l6ZSA9IHNpemU7Ci0gICAgbV90ZXh0dXJlc1tpbmRleF0udmlzaWJsZVNp
emUgPSB2aXNpYmxlU2l6ZTsKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9wcm92aWRlck11dGV4
KTsKKyAgICBtX3Byb3ZpZGVyID0gcHJvdmlkZXI7CiB9CiAKLXZvaWQgQ0NWaWRlb0xheWVySW1w
bDo6c2V0TmF0aXZlVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCwgY29uc3QgSW50
U2l6ZSYgc2l6ZSwgY29uc3QgSW50U2l6ZSYgdmlzaWJsZVNpemUpCisvLyBDb252ZXJ0IFZpZGVv
RnJhbWVDaHJvbWl1bTo6Rm9ybWF0IHRvIEdyYXBoaWNzQ29udGV4dDNEJ3MgZm9ybWF0IGVudW0g
dmFsdWVzLgorc3RhdGljIEdDM0RlbnVtIGNvbnZlcnRWRkNGb3JtYXRUb0dDM0RGb3JtYXQoVmlk
ZW9GcmFtZUNocm9taXVtOjpGb3JtYXQgdmZjRm9ybWF0KQogewotICAgIG1fbmF0aXZlVGV4dHVy
ZUlkID0gdGV4dHVyZUlkOwotICAgIG1fbmF0aXZlVGV4dHVyZVNpemUgPSBzaXplOwotICAgIG1f
bmF0aXZlVGV4dHVyZVZpc2libGVTaXplID0gdmlzaWJsZVNpemU7CisgICAgc3dpdGNoICh2ZmNG
b3JtYXQpIHsKKyAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6WVYxMjoKKyAgICBjYXNlIFZp
ZGVvRnJhbWVDaHJvbWl1bTo6WVYxNjoKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNE
OjpMVU1JTkFOQ0U7CisgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OlJHQkE6CisgICAgICAg
IHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKKyAgICBjYXNlIFZpZGVvRnJhbWVDaHJv
bWl1bTo6TmF0aXZlVGV4dHVyZToKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJEOworICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpJbnZhbGlkOgorICAgIGNh
c2UgVmlkZW9GcmFtZUNocm9taXVtOjpSR0I1NTU6CisgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21p
dW06OlJHQjU2NToKKyAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6UkdCMjQ6CisgICAgY2Fz
ZSBWaWRlb0ZyYW1lQ2hyb21pdW06OlJHQjMyOgorICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVt
OjpOVjEyOgorICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpFbXB0eToKKyAgICBjYXNlIFZp
ZGVvRnJhbWVDaHJvbWl1bTo6QVNDSUk6CisgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06Okk0
MjA6CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgfQorICAgIHJldHVybiBHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRTsKIH0KIAogdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpk
cmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKIHsKICAgICBBU1NFUlQo
Q0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogCi0gICAgaWYgKG1fc2tpcHNEcmF3KQorICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX3Byb3ZpZGVyTXV0ZXgpOworCisgICAgaWYgKCFtX3Byb3ZpZGVy
KQogICAgICAgICByZXR1cm47CiAKLSAgICBzd2l0Y2ggKG1fZnJhbWVGb3JtYXQpIHsKLSAgICBj
YXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6WVYxMjoKLSAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1
bTo6WVYxNjoKKyAgICBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lID0gbV9wcm92aWRlci0+Z2V0
Q3VycmVudEZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIEdD
M0RlbnVtIGZvcm1hdCA9IGNvbnZlcnRWRkNGb3JtYXRUb0dDM0RGb3JtYXQoZnJhbWUtPmZvcm1h
dCgpKTsKKworICAgIGlmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghY29weUZyYW1lVG9UZXh0dXJlcyhmcmFt
ZSwgZm9ybWF0LCBsYXllclJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3dpdGNo
IChmb3JtYXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U6CiAgICAg
ICAgIGRyYXdZVVYobGF5ZXJSZW5kZXJlcik7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgVmlk
ZW9GcmFtZUNocm9taXVtOjpSR0JBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6
CiAgICAgICAgIGRyYXdSR0JBKGxheWVyUmVuZGVyZXIpOwogICAgICAgICBicmVhazsKLSAgICBj
YXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6TmF0aXZlVGV4dHVyZToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJEOgogICAgICAgICBkcmF3TmF0aXZlVGV4dHVyZShsYXllclJl
bmRlcmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgLy8gRklYTUU6
IEltcGxlbWVudCBvdGhlciBwYXRocy4KLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIENSQVNIKCk7IC8vIFNvbWVvbmUgdXBkYXRlZCBjb252ZXJ0VkZD
Rm9ybWF0VG9HQzNERm9ybWF0IGFib3ZlIGJ1dCB1cGRhdGUgdGhpcyEKKyAgICB9CisKKyAgICBm
b3IgKHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBmcmFtZS0+cGxhbmVzKCk7ICsrcGxhbmUp
CisgICAgICAgIG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS0+dW5yZXNlcnZlKCk7CisgICAg
bV9wcm92aWRlci0+cHV0Q3VycmVudEZyYW1lKGZyYW1lKTsKK30KKworYm9vbCBDQ1ZpZGVvTGF5
ZXJJbXBsOjpjb3B5RnJhbWVUb1RleHR1cmVzKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSogZnJh
bWUsIEdDM0RlbnVtIGZvcm1hdCwgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVy
KQoreworICAgIGlmIChmcmFtZS0+Zm9ybWF0KCkgPT0gVmlkZW9GcmFtZUNocm9taXVtOjpOYXRp
dmVUZXh0dXJlKSB7CisgICAgICAgIG1fbmF0aXZlVGV4dHVyZUlkID0gZnJhbWUtPnRleHR1cmVJ
ZCgpOworICAgICAgICBtX25hdGl2ZVRleHR1cmVTaXplID0gSW50U2l6ZShmcmFtZS0+d2lkdGgo
KSwgZnJhbWUtPmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
aWYgKCFyZXNlcnZlVGV4dHVyZXMoZnJhbWUsIGZvcm1hdCwgbGF5ZXJSZW5kZXJlcikpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBwbGFuZSA8
IGZyYW1lLT5wbGFuZXMoKTsgKytwbGFuZSkgeworICAgICAgICBBU1NFUlQoZnJhbWUtPnJlcXVp
cmVkVGV4dHVyZVNpemUocGxhbmUpID09IG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS0+c2l6
ZSgpKTsKKyAgICAgICAgY29weVBsYW5lVG9UZXh0dXJlKGxheWVyUmVuZGVyZXIsIGZyYW1lLT5k
YXRhKHBsYW5lKSwgcGxhbmUpOworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gZnJh
bWUtPnBsYW5lcygpOyBwbGFuZSA8IE1heFBsYW5lczsgKytwbGFuZSkgeworICAgICAgICBUZXh0
dXJlJiB0ZXh0dXJlID0gbV90ZXh0dXJlc1twbGFuZV07CisgICAgICAgIHRleHR1cmUubV90ZXh0
dXJlLmNsZWFyKCk7CisgICAgICAgIHRleHR1cmUubV92aXNpYmxlU2l6ZSA9IEludFNpemUoKTsK
KyAgICB9CisgICAgbV9wbGFuZXMgPSBmcmFtZS0+cGxhbmVzKCk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6Y29weVBsYW5lVG9UZXh0dXJlKExheWVyUmVu
ZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3Qgdm9pZCogcGxhbmUsIGludCBpbmRl
eCkKK3sKKyAgICBUZXh0dXJlJiB0ZXh0dXJlID0gbV90ZXh0dXJlc1tpbmRleF07CisgICAgR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyLT5jb250ZXh0KCk7CisgICAg
VGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yID0gbGF5ZXJSZW5kZXJlci0+cmVuZGVyU3VyZmFj
ZVRleHR1cmVBbGxvY2F0b3IoKTsKKyAgICB0ZXh0dXJlLm1fdGV4dHVyZS0+YmluZFRleHR1cmUo
Y29udGV4dCwgYWxsb2NhdG9yKTsKKyAgICBHQzNEZW51bSBmb3JtYXQgPSB0ZXh0dXJlLm1fdGV4
dHVyZS0+Zm9ybWF0KCk7CisgICAgSW50U2l6ZSBkaW1lbnNpb25zID0gdGV4dHVyZS5tX3RleHR1
cmUtPnNpemUoKTsKKworICAgIHZvaWQqIG1lbSA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENo
cm9taXVtKj4oY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKS0+bWFwVGV4U3ViSW1hZ2UyRENIUk9N
SVVNKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAwLCAwLCBkaW1lbnNpb25zLndp
ZHRoKCksIGRpbWVuc2lvbnMuaGVpZ2h0KCksIGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEUsIEV4dGVuc2lvbnMzRENocm9taXVtOjpXUklURV9PTkxZKTsKKyAgICBpZiAo
bWVtKSB7CisgICAgICAgIG1lbWNweShtZW0sIHBsYW5lLCBkaW1lbnNpb25zLndpZHRoKCkgKiBk
aW1lbnNpb25zLmhlaWdodCgpKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIHN0YXRpY19jYXN0PEV4
dGVuc2lvbnMzRENocm9taXVtKj4oY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKS0+dW5tYXBUZXhT
dWJJbWFnZTJEQ0hST01JVU0obWVtKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgbWFw
VGV4U3ViSW1hZ2UyRENIUk9NSVVNIGZhaWxzLCB0aGVuIGRvIHRoZSBzbG93ZXIgdGV4U3ViSW1h
Z2UyRAorICAgICAgICAvLyB1cGxvYWQuIFRoaXMgZG9lcyB0d2ljZSB0aGUgY29waWVzIGFzIG1h
cFRleFN1YkltYWdlMkRDSFJPTUlVTSwgb25lCisgICAgICAgIC8vIGluIHRoZSBjb21tYW5kIGJ1
ZmZlciBhbmQgYW5vdGhlciB0byB0aGUgdGV4dHVyZS4KKyAgICAgICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDAs
IDAsIGRpbWVuc2lvbnMud2lkdGgoKSwgZGltZW5zaW9ucy5oZWlnaHQoKSwgZm9ybWF0LCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgcGxhbmUpKTsKICAgICB9CiB9CiAKK3N0YXRp
YyBJbnRTaXplIGNvbXB1dGVWaXNpYmxlU2l6ZShjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZy
YW1lLCB1bnNpZ25lZCBwbGFuZSkKK3sKKyAgICBpbnQgdmlzaWJsZVdpZHRoID0gZnJhbWUtPndp
ZHRoKHBsYW5lKTsKKyAgICBpbnQgdmlzaWJsZUhlaWdodCA9IGZyYW1lLT5oZWlnaHQocGxhbmUp
OworICAgIC8vIFdoZW4gdGhlcmUgYXJlIGRlYWQgcGl4ZWxzIGF0IHRoZSBlZGdlIG9mIHRoZSB0
ZXh0dXJlLCBkZWNyZWFzZQorICAgIC8vIHRoZSBmcmFtZSB3aWR0aCBieSAxIHRvIHByZXZlbnQg
dGhlIHJpZ2h0bW9zdCBwaXhlbHMgZnJvbQorICAgIC8vIGludGVycG9sYXRpbmcgd2l0aCB0aGUg
ZGVhZCBwaXhlbHMuCisgICAgaWYgKGZyYW1lLT5oYXNQYWRkaW5nQnl0ZXMocGxhbmUpKQorICAg
ICAgICAtLXZpc2libGVXaWR0aDsKKworICAgIC8vIEluIFlWMTIsIGV2ZXJ5IDJ4MiBzcXVhcmUg
b2YgWSB2YWx1ZXMgY29ycmVzcG9uZHMgdG8gb25lIFUgYW5kCisgICAgLy8gb25lIFYgdmFsdWUu
IElmIHdlIGRlY3JlYXNlIHRoZSB3aWR0aCBvZiB0aGUgVVYgcGxhbmUsIHdlIG11c3QgZGVjcmVh
c2UgdGhlCisgICAgLy8gd2lkdGggb2YgdGhlIFkgdGV4dHVyZSBieSAyIGZvciBwcm9wZXIgYWxp
Z25tZW50LiBUaGlzIG11c3QgaGFwcGVuCisgICAgLy8gYWx3YXlzLCBldmVuIGlmIFkncyB0ZXh0
dXJlIGRvZXMgbm90IGhhdmUgcGFkZGluZyBieXRlcy4KKyAgICBpZiAocGxhbmUgPT0gVmlkZW9G
cmFtZUNocm9taXVtOjp5UGxhbmUgJiYgZnJhbWUtPmZvcm1hdCgpID09IFZpZGVvRnJhbWVDaHJv
bWl1bTo6WVYxMikgeworICAgICAgICBpZiAoZnJhbWUtPmhhc1BhZGRpbmdCeXRlcyhWaWRlb0Zy
YW1lQ2hyb21pdW06OnVQbGFuZSkpIHsKKyAgICAgICAgICAgIGludCBvcmlnaW5hbFdpZHRoID0g
ZnJhbWUtPndpZHRoKHBsYW5lKTsKKyAgICAgICAgICAgIHZpc2libGVXaWR0aCA9IG9yaWdpbmFs
V2lkdGggLSAyOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEludFNpemUodmlzaWJs
ZVdpZHRoLCB2aXNpYmxlSGVpZ2h0KTsKK30KKworYm9vbCBDQ1ZpZGVvTGF5ZXJJbXBsOjpyZXNl
cnZlVGV4dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSwgR0MzRGVudW0gZm9y
bWF0LCBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCit7CisgICAgaWYgKGZy
YW1lLT5wbGFuZXMoKSA+IE1heFBsYW5lcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlu
dCBtYXhUZXh0dXJlU2l6ZSA9IGxheWVyUmVuZGVyZXItPmNhcGFiaWxpdGllcygpLm1heFRleHR1
cmVTaXplOworICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBwbGFuZSA8IGZyYW1lLT5wbGFu
ZXMoKTsgKytwbGFuZSkgeworICAgICAgICBJbnRTaXplIHJlcXVpcmVkVGV4dHVyZVNpemUgPSBm
cmFtZS0+cmVxdWlyZWRUZXh0dXJlU2l6ZShwbGFuZSk7CisgICAgICAgIC8vIElmIHRoZSByZW5k
ZXJlciBjYW5ub3QgaGFuZGxlIHRoaXMgbGFyZ2Ugb2YgYSB0ZXh0dXJlLCByZXR1cm4gZmFsc2Uu
CisgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyB0ZXN0IHdoZW4gdGlsZWQgbGF5ZXJzIGFy
ZSBpbXBsZW1lbnRlZC4KKyAgICAgICAgaWYgKHJlcXVpcmVkVGV4dHVyZVNpemUuaXNaZXJvKCkg
fHwgcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgpID4gbWF4VGV4dHVyZVNpemUgfHwgcmVxdWly
ZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSA+IG1heFRleHR1cmVTaXplKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBpZiAoIW1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZSkgewor
ICAgICAgICAgICAgbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlID0gTWFuYWdlZFRleHR1cmU6
OmNyZWF0ZShsYXllclJlbmRlcmVyLT5yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIoKSk7Cisg
ICAgICAgICAgICBpZiAoIW1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBtX3RleHR1cmVzW3BsYW5lXS5tX3Zpc2li
bGVTaXplID0gSW50U2l6ZSgpOworICAgICAgICB9CisgICAgICAgIGlmIChtX3RleHR1cmVzW3Bs
YW5lXS5tX3RleHR1cmUtPnNpemUoKSAhPSByZXF1aXJlZFRleHR1cmVTaXplKQorICAgICAgICAg
ICAgbV90ZXh0dXJlc1twbGFuZV0ubV92aXNpYmxlU2l6ZSA9IGNvbXB1dGVWaXNpYmxlU2l6ZShm
cmFtZSwgcGxhbmUpOworICAgICAgICBtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUtPnJlc2Vy
dmUocmVxdWlyZWRUZXh0dXJlU2l6ZSwgZm9ybWF0KTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhd1lVVihMYXllclJlbmRlcmVyQ2hyb21p
dW0qIGxheWVyUmVuZGVyZXIpIGNvbnN0CiB7CiAgICAgY29uc3QgWVVWUHJvZ3JhbSogcHJvZ3Jh
bSA9IGxheWVyUmVuZGVyZXItPnZpZGVvTGF5ZXJZVVZQcm9ncmFtKCk7CiAgICAgQVNTRVJUKHBy
b2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7CiAKICAgICBHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCA9IGxheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKLSAgICBDQ1ZpZGVvTGF5ZXJJ
bXBsOjpUZXh0dXJlIHlUZXh0dXJlID0gbV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnlQ
bGFuZV07Ci0gICAgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSB1VGV4dHVyZSA9IG1fdGV4dHVy
ZXNbVmlkZW9GcmFtZUNocm9taXVtOjp1UGxhbmVdOwotICAgIENDVmlkZW9MYXllckltcGw6OlRl
eHR1cmUgdlRleHR1cmUgPSBtX3RleHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6dlBsYW5lXTsK
KyAgICBjb25zdCBUZXh0dXJlJiB5VGV4dHVyZSA9IG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9t
aXVtOjp5UGxhbmVdOworICAgIGNvbnN0IFRleHR1cmUmIHVUZXh0dXJlID0gbV90ZXh0dXJlc1tW
aWRlb0ZyYW1lQ2hyb21pdW06OnVQbGFuZV07CisgICAgY29uc3QgVGV4dHVyZSYgdlRleHR1cmUg
PSBtX3RleHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6dlBsYW5lXTsKIAogICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMSkp
OwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgeVRleHR1cmUuaWQpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHlUZXh0dXJlLm1fdGV4
dHVyZS0+dGV4dHVyZUlkKCkpKTsKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTIpKTsKLSAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHVUZXh0dXJl
LmlkKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCB1VGV4dHVyZS5tX3RleHR1cmUtPnRleHR1cmVJZCgpKSk7CiAg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkUzKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB2VGV4dHVyZS5pZCkpOworICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdlRl
eHR1cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOwogCiAgICAgR0xDKGNvbnRleHQsIGNvbnRl
eHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CiAKLSAgICBmbG9hdCB5V2lkdGhT
Y2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0Pih5VGV4dHVyZS52aXNpYmxlU2l6ZS53aWR0
aCgpKSAvIHlUZXh0dXJlLnNpemUud2lkdGgoKTsKKyAgICBmbG9hdCB5V2lkdGhTY2FsZUZhY3Rv
ciA9IHN0YXRpY19jYXN0PGZsb2F0Pih5VGV4dHVyZS5tX3Zpc2libGVTaXplLndpZHRoKCkpIC8g
eVRleHR1cmUubV90ZXh0dXJlLT5zaXplKCkud2lkdGgoKTsKICAgICAvLyBBcmJpdHJhcmlseSB0
YWtlIHRoZSB1IHNpemVzIGJlY2F1c2UgdSBhbmQgdiBkaW1lbnNpb25zIGFyZSBpZGVudGljYWwu
Ci0gICAgZmxvYXQgdXZXaWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHVUZXh0
dXJlLnZpc2libGVTaXplLndpZHRoKCkpIC8gdVRleHR1cmUuc2l6ZS53aWR0aCgpOworICAgIGZs
b2F0IHV2V2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0Pih1VGV4dHVyZS5tX3Zp
c2libGVTaXplLndpZHRoKCkpIC8gdVRleHR1cmUubV90ZXh0dXJlLT5zaXplKCkud2lkdGgoKTsK
ICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFmKHByb2dyYW0tPnZlcnRleFNoYWRl
cigpLnlXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24oKSwgeVdpZHRoU2NhbGVGYWN0b3IpKTsKICAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFmKHByb2dyYW0tPnZlcnRleFNoYWRlcigp
LnV2V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKCksIHV2V2lkdGhTY2FsZUZhY3RvcikpOwogCkBA
IC0xNTAsMjEgKzI4MSwxOCBAQCB2b2lkIENDVmlkZW9MYXllckltcGw6OmRyYXdZVVYoTGF5ZXJS
ZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKSBjb25zdAogICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwogfQog
Ci12b2lkIENDVmlkZW9MYXllckltcGw6OmRyYXdSR0JBKExheWVyUmVuZGVyZXJDaHJvbWl1bSog
bGF5ZXJSZW5kZXJlcikgY29uc3QKK3RlbXBsYXRlPGNsYXNzIFByb2dyYW0+Cit2b2lkIENDVmlk
ZW9MYXllckltcGw6OmRyYXdDb21tb24oTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRl
cmVyLCBQcm9ncmFtKiBwcm9ncmFtLCBmbG9hdCB3aWR0aFNjYWxlRmFjdG9yLCBQbGF0Zm9ybTNE
T2JqZWN0IHRleHR1cmVJZCkgY29uc3QKIHsKLSAgICBjb25zdCBSR0JBUHJvZ3JhbSogcHJvZ3Jh
bSA9IGxheWVyUmVuZGVyZXItPnZpZGVvTGF5ZXJSR0JBUHJvZ3JhbSgpOwogICAgIEFTU0VSVChw
cm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyLT5jb250ZXh0KCk7Ci0gICAgQ0NWaWRlb0xheWVy
SW1wbDo6VGV4dHVyZSB0ZXh0dXJlID0gbV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnJn
YlBsYW5lXTsKIAogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZS5pZCkpOworICAg
IEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgdGV4dHVyZUlkKSk7CiAKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJv
Z3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKLSAgICBmbG9hdCB3aWR0aFNjYWxlRmFjdG9yID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHRleHR1cmUudmlzaWJsZVNpemUud2lkdGgoKSkgLyB0ZXh0dXJl
LnNpemUud2lkdGgoKTsKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKHByb2dy
YW0tPnZlcnRleFNoYWRlcigpLnRleFRyYW5zZm9ybUxvY2F0aW9uKCksIDAsIDAsIHdpZHRoU2Nh
bGVGYWN0b3IsIDEpKTsKLQogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkocHJv
Z3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkpOwogCiAgICAgbGF5
ZXJSZW5kZXJlci0+ZHJhd1RleHR1cmVkUXVhZChkcmF3VHJhbnNmb3JtKCksIGJvdW5kcygpLndp
ZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBkcmF3T3BhY2l0eSgpLCBsYXllclJlbmRlcmVyLT5z
aGFyZWRHZW9tZXRyeVF1YWQoKSwKQEAgLTE3MywyNiArMzAxLDE4IEBAIHZvaWQgQ0NWaWRlb0xh
eWVySW1wbDo6ZHJhd1JHQkEoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKSBj
b25zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEpOwogfQogCit2b2lk
IENDVmlkZW9MYXllckltcGw6OmRyYXdSR0JBKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJS
ZW5kZXJlcikgY29uc3QKK3sKKyAgICBjb25zdCBSR0JBUHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVy
UmVuZGVyZXItPnZpZGVvTGF5ZXJSR0JBUHJvZ3JhbSgpOworICAgIGNvbnN0IFRleHR1cmUmIHRl
eHR1cmUgPSBtX3RleHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6cmdiUGxhbmVdOworICAgIGZs
b2F0IHdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4odGV4dHVyZS5tX3Zpc2li
bGVTaXplLndpZHRoKCkpIC8gdGV4dHVyZS5tX3RleHR1cmUtPnNpemUoKS53aWR0aCgpOworICAg
IGRyYXdDb21tb24obGF5ZXJSZW5kZXJlciwgcHJvZ3JhbSwgd2lkdGhTY2FsZUZhY3RvciwgdGV4
dHVyZS5tX3RleHR1cmUtPnRleHR1cmVJZCgpKTsKK30KKwogdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBs
OjpkcmF3TmF0aXZlVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIp
IGNvbnN0CiB7CiAgICAgY29uc3QgTmF0aXZlVGV4dHVyZVByb2dyYW0qIHByb2dyYW0gPSBsYXll
clJlbmRlcmVyLT52aWRlb0xheWVyTmF0aXZlVGV4dHVyZVByb2dyYW0oKTsKLSAgICBBU1NFUlQo
cHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgpKTsKLQotICAgIEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOwotCi0gICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7
Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBtX25hdGl2ZVRleHR1cmVJZCkpOwotCi0gICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Ci0gICAgZmxvYXQgd2lkdGhT
Y2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0PihtX25hdGl2ZVRleHR1cmVWaXNpYmxlU2l6
ZS53aWR0aCgpKSAvIG1fbmF0aXZlVGV4dHVyZVNpemUud2lkdGgoKTsKLSAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+dW5pZm9ybTRmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnRleFRyYW5zZm9y
bUxvY2F0aW9uKCksIDAsIDAsIHdpZHRoU2NhbGVGYWN0b3IsIDEpKTsKLQotICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVy
TG9jYXRpb24oKSwgMCkpOwotCi0gICAgbGF5ZXJSZW5kZXJlci0+ZHJhd1RleHR1cmVkUXVhZChk
cmF3VHJhbnNmb3JtKCksIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBkcmF3
T3BhY2l0eSgpLCBsYXllclJlbmRlcmVyLT5zaGFyZWRHZW9tZXRyeVF1YWQoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJp
eExvY2F0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFt
LT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC0xKTsKKyAgICBkcmF3Q29tbW9uKGxheWVyUmVuZGVyZXIsIHByb2dy
YW0sIDEsIG1fbmF0aXZlVGV4dHVyZUlkKTsKIH0KIAogdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpk
dW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NW
aWRlb0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oCmluZGV4IGU1MzE3YWQzNGRhZWZjYjUwNjExNmU5ZDM4
MDhiZmE1ZjkyYWI3MzAuLmQxNzNjMTE3OTFlNzc4NWE0MDJhZjMyZDYwZTE2OWU3NTE1ZTAzMGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVmlkZW9MYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5k
ZWYgQ0NWaWRlb0xheWVySW1wbF9oCiAjZGVmaW5lIENDVmlkZW9MYXllckltcGxfaAogCi0jaW5j
bHVkZSAiUHJvZ3JhbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgogI2lu
Y2x1ZGUgIlNoYWRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVmlkZW9GcmFtZUNocm9taXVtLmgi
CiAjaW5jbHVkZSAiVmlkZW9MYXllckNocm9taXVtLmgiCkBAIC0zNCw2ICszNCw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAordGVtcGxhdGU8Y2xhc3MgVmVydGV4U2hhZGVyLCBjbGFzcyBG
cmFnbWVudFNoYWRlcj4gY2xhc3MgUHJvZ3JhbUJpbmRpbmc7CiBjbGFzcyBWaWRlb0ZyYW1lUHJv
dmlkZXI7CiAKIGNsYXNzIENDVmlkZW9MYXllckltcGwgOiBwdWJsaWMgQ0NMYXllckltcGwgewpA
QCAtNTIsMzYgKzUzLDM3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkdW1wTGF5ZXJQ
cm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKIAotICAgIHZvaWQgc2V0
U2tpcHNEcmF3KGJvb2wgc2tpcHNEcmF3KSB7IG1fc2tpcHNEcmF3ID0gc2tpcHNEcmF3OyB9Ci0g
ICAgdm9pZCBzZXRGcmFtZUZvcm1hdChWaWRlb0ZyYW1lQ2hyb21pdW06OkZvcm1hdCBmb3JtYXQp
IHsgbV9mcmFtZUZvcm1hdCA9IGZvcm1hdDsgfQotICAgIHZvaWQgc2V0VGV4dHVyZShzaXplX3Qs
IFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkLCBjb25zdCBJbnRTaXplJiwgY29uc3QgSW50U2l6
ZSYgdmlzaWJsZVNpemUpOwotICAgIHZvaWQgc2V0TmF0aXZlVGV4dHVyZShQbGF0Zm9ybTNET2Jq
ZWN0IHRleHR1cmVJZCwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFNpemUmIHZpc2libGVTaXpl
KTsKKyAgICB2b2lkIHNldFByb3ZpZGVyKFZpZGVvRnJhbWVQcm92aWRlciopOwogCiBwcml2YXRl
OgogICAgIGV4cGxpY2l0IENDVmlkZW9MYXllckltcGwoaW50KTsKIAogICAgIHZpcnR1YWwgY29u
c3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiVmlkZW9MYXllciI7
IH0KIAotICAgIHN0cnVjdCBUZXh0dXJlIHsKLSAgICAgICAgUGxhdGZvcm0zRE9iamVjdCBpZDsK
LSAgICAgICAgSW50U2l6ZSBzaXplOwotICAgICAgICBJbnRTaXplIHZpc2libGVTaXplOwotICAg
IH07Ci0KKyAgICBib29sIGNvcHlGcmFtZVRvVGV4dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9t
aXVtKiwgR0MzRGVudW0gZm9ybWF0LCBMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKKyAgICB2b2lk
IGNvcHlQbGFuZVRvVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBjb25zdCB2b2lkKiBw
bGFuZSwgaW50IGluZGV4KTsKKyAgICBib29sIHJlc2VydmVUZXh0dXJlcyhjb25zdCBWaWRlb0Zy
YW1lQ2hyb21pdW0qLCBHQzNEZW51bSBmb3JtYXQsIExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwog
ICAgIHZvaWQgZHJhd1lVVihMYXllclJlbmRlcmVyQ2hyb21pdW0qKSBjb25zdDsKICAgICB2b2lk
IGRyYXdSR0JBKExheWVyUmVuZGVyZXJDaHJvbWl1bSopIGNvbnN0OwogICAgIHZvaWQgZHJhd05h
dGl2ZVRleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKikgY29uc3Q7CisgICAgdGVtcGxhdGU8
Y2xhc3MgUHJvZ3JhbT4gdm9pZCBkcmF3Q29tbW9uKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIFBy
b2dyYW0qLCBmbG9hdCB3aWR0aFNjYWxlRmFjdG9yLCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJ
ZCkgY29uc3Q7CisKKyAgICBNdXRleCBtX3Byb3ZpZGVyTXV0ZXg7IC8vIEd1YXJkcyBtX3Byb3Zp
ZGVyIGJlbG93LgorICAgIFZpZGVvRnJhbWVQcm92aWRlciogbV9wcm92aWRlcjsKIAogICAgIHN0
YXRpYyBjb25zdCBmbG9hdCB5dXYyUkdCWzldOwogICAgIHN0YXRpYyBjb25zdCBmbG9hdCB5dXZB
ZGp1c3RbM107CiAKLSAgICBib29sIG1fc2tpcHNEcmF3OwotICAgIFZpZGVvRnJhbWVDaHJvbWl1
bTo6Rm9ybWF0IG1fZnJhbWVGb3JtYXQ7Ci0gICAgVGV4dHVyZSBtX3RleHR1cmVzWzNdOworICAg
IHN0cnVjdCBUZXh0dXJlIHsKKyAgICAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBtX3RleHR1
cmU7CisgICAgICAgIEludFNpemUgbV92aXNpYmxlU2l6ZTsKKyAgICB9OworICAgIGVudW0geyBN
YXhQbGFuZXMgPSAzIH07CisgICAgVGV4dHVyZSBtX3RleHR1cmVzW01heFBsYW5lc107CisgICAg
aW50IG1fcGxhbmVzOwogCiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX25hdGl2ZVRleHR1cmVJZDsK
ICAgICBJbnRTaXplIG1fbmF0aXZlVGV4dHVyZVNpemU7Ci0gICAgSW50U2l6ZSBtX25hdGl2ZVRl
eHR1cmVWaXNpYmxlU2l6ZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwCmluZGV4IDk5MzYxZWQ5NDFh
YTQ2MzA2ZDU2N2JkMjNkOGRjZGVhZGY2NWE5OTYuLjliOTVmOGQ1OTdlZTM0YWE0NThlMWMxZWRl
ODY1NDNlOTA4ZjQyOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
Yk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcApAQCAtNjIsMjkgKzYyLDYgQEAgc3RhdGlj
IFBhc3NPd25QdHI8V2ViTWVkaWFQbGF5ZXI+IGNyZWF0ZVdlYk1lZGlhUGxheWVyKFdlYk1lZGlh
UGxheWVyQ2xpZW50KiBjbGkKICAgICByZXR1cm4gYWRvcHRQdHIod2ViRnJhbWUtPmNsaWVudCgp
LT5jcmVhdGVNZWRpYVBsYXllcih3ZWJGcmFtZSwgY2xpZW50KSk7CiB9CiAKLXN0YXRpYyBib29s
IGlzVmlkZW9GcmFtZUZvcm1hdE9wYXF1ZShXZWJWaWRlb0ZyYW1lOjpGb3JtYXQgZm9ybWF0KQot
ewotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBXZWJWaWRlb0ZyYW1lOjpGb3JtYXRJ
bnZhbGlkOgotICAgIGNhc2UgV2ViVmlkZW9GcmFtZTo6Rm9ybWF0RW1wdHk6Ci0gICAgY2FzZSBX
ZWJWaWRlb0ZyYW1lOjpGb3JtYXRSR0JBOgotICAgIGNhc2UgV2ViVmlkZW9GcmFtZTo6Rm9ybWF0
TmF0aXZlVGV4dHVyZToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNhc2UgV2ViVmlkZW9G
cmFtZTo6Rm9ybWF0UkdCNTU1OgotICAgIGNhc2UgV2ViVmlkZW9GcmFtZTo6Rm9ybWF0UkdCNTY1
OgotICAgIGNhc2UgV2ViVmlkZW9GcmFtZTo6Rm9ybWF0UkdCMjQ6Ci0gICAgY2FzZSBXZWJWaWRl
b0ZyYW1lOjpGb3JtYXRSR0IzMjoKLSAgICBjYXNlIFdlYlZpZGVvRnJhbWU6OkZvcm1hdFlWMTI6
Ci0gICAgY2FzZSBXZWJWaWRlb0ZyYW1lOjpGb3JtYXRZVjE2OgotICAgIGNhc2UgV2ViVmlkZW9G
cmFtZTo6Rm9ybWF0TlYxMjoKLSAgICBjYXNlIFdlYlZpZGVvRnJhbWU6OkZvcm1hdEFTQ0lJOgot
ICAgIGNhc2UgV2ViVmlkZW9GcmFtZTo6Rm9ybWF0STQyMDoKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQogYm9vbCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6Om1faXNFbmFibGVkID0gZmFsc2U7CiAK
IGJvb2wgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjppc0VuYWJsZWQoKQpAQCAtNjAwLDggKzU3
Nyw2IEBAIFZpZGVvRnJhbWVDaHJvbWl1bSogV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpnZXRD
dXJyZW50RnJhbWUoKQogICAgICAgICBXZWJWaWRlb0ZyYW1lKiB3ZWJraXRWaWRlb0ZyYW1lID0g
bV93ZWJNZWRpYVBsYXllci0+Z2V0Q3VycmVudEZyYW1lKCk7CiAgICAgICAgIGlmICh3ZWJraXRW
aWRlb0ZyYW1lKQogICAgICAgICAgICAgbV9jdXJyZW50VmlkZW9GcmFtZSA9IGFkb3B0UHRyKG5l
dyBWaWRlb0ZyYW1lQ2hyb21pdW1JbXBsKHdlYmtpdFZpZGVvRnJhbWUpKTsKLSAgICAgICAgaWYg
KG1fdmlkZW9MYXllcikKLSAgICAgICAgICAgIG1fdmlkZW9MYXllci0+c2V0T3BhcXVlKHdlYmtp
dFZpZGVvRnJhbWUgJiYgaXNWaWRlb0ZyYW1lRm9ybWF0T3BhcXVlKHdlYmtpdFZpZGVvRnJhbWUt
PmZvcm1hdCgpKSk7CiAgICAgfQogICAgIHJldHVybiBtX2N1cnJlbnRWaWRlb0ZyYW1lLmdldCgp
OwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119575</attachid>
            <date>2011-12-16 00:07:24 -0800</date>
            <delta_ts>2011-12-16 09:34:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73043-20111216000723.patch</filename>
            <type>text/plain</type>
            <size>39027</size>
            <attacher name="Ami Fischman">fischman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNjU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWVjMTc4Nzg3N2U2N2U2
ZjhkODAxY2NjNzYzYmJiMjdhNzE5OGIxYi4uMjZiNmU4Mzc1YTQ0ZGQ0OGIwNmQxNzY2OWM3Mjkw
NzU2MDBjOWIxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDExLTEyLTE1ICBBbWkg
RmlzY2htYW4gIDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRml4IHRoZSBsaWZl
LWN5Y2xlIG9mIHZpZGVvIGZyYW1lcyBoYW5kbGVkIGJ5IFZpZGVvTGF5ZXJDaHJvbWl1bS9DQ1Zp
ZGVvTGF5ZXJJbXBsLgorICAgICAgICBWaWRlb0ZyYW1lUHJvdmlkZXI6OntnZXQscHV0fUN1cnJl
bnRGcmFtZSBwcm92aWRlIGxlYXNlIHNlbWFudGljcy4gIFByZXZpb3VzbHkKKyAgICAgICAgVmlk
ZW9MYXllckNocm9taXVtIHdvdWxkIGFjcXVpcmUgdGhlIGxlYXNlIGZvciB0aGUgZHVyYXRpb24g
b2YgY29weWluZyB0aGUgZnJhbWUsCisgICAgICAgIGV2ZW4gaWYgdGhhdCB3YXMgb25seSBhIHRl
eHR1cmUgSUQsIGFuZCBpbW1lZGlhdGVseSByZXR1cm4gdGhlIGxlYXNlLCB3aGlsZQorICAgICAg
ICBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3KCkgd291bGQgY29tZSBhbG9uZyBsYXRlciBhbmQgdXNl
IHRoZSAobm8tbG9uZ2VyIGxvY2tlZCkKKyAgICAgICAgdGV4dHVyZSBvcHRpbWlzdGljYWxseS4g
IFRoaXMgY2hhbmdlIG1ha2VzIGl0IHNvIHRoYXQgQ0NWaWRlb0xheWVySW1wbCBob2xkcworICAg
ICAgICB0aGUgZnJhbWUncyBsZWFzZSBmb3IgdGhlIGR1cmF0aW9uIG9mIGRyYXcoKSwgZ3VhcmFu
dGVlaW5nIHRoZSBmcmFtZSBpcyB2YWxpZCB0byByZWFkLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwNDMKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OlZpZGVvTGF5ZXJDaHJvbWl1bSk6
CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06On5WaWRlb0xheWVyQ2hyb21p
dW0pOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVy
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnJlbGVhc2VQcm92
aWRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNo
cm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRl
b0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpDQ1Zp
ZGVvTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6On5DQ1Zp
ZGVvTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OnNldFBy
b3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRWRkNGb3JtYXRUb0dDM0RGb3JtYXQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6ZHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpjb3B5RnJhbWVUb1RleHR1cmVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmNvcHlQbGFuZVRvVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpjb21wdXRlVmlzaWJsZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRl
b0xheWVySW1wbDo6cmVzZXJ2ZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9M
YXllckltcGw6OmRyYXdZVVYpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6
ZHJhd0NvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3UkdC
QSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3TmF0aXZlVGV4dHVy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVy
SW1wbC5oOgorCiAyMDExLTEyLTEyICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTAyNjQ4LgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwppbmRleCA4ZTRhMDcwNjMxNzMzOGE3NTNlYzQ2YmVlMjg4YTliMDFjZWZkYzk5
Li4zYTgyMzUzMmU0MjBiZjE5NDcwM2NjNWViMWFiODhmZGMzNDVmMThhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTEyLTE1ICBBbWkgRmlzY2htYW4g
IDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2ZXJ0IENMIDEwMjM4NyBiZWNh
dXNlIGl0IGlzIGluY29ycmVjdCB0byBjYWxsIHNldE9wYXF1ZSBmcm9tIGEgbm9uLW1haW4gdGhy
ZWFkCisgICAgICAgIChhbmQgZ2V0Q3VycmVudEZyYW1lKCkgY2FuIG5vdyBiZSBjYWxsZWQgZnJv
bSB0aGUgY29tcG9zaXRvciB0aHJlYWQgd2hlbgorICAgICAgICAtLWVuYWJsZS10aHJlYWRlZC1j
b21wb3NpdGluZyBpcyBzcGVjaWZpZWQpLiAgV2hlbiB0aGlzIGlzIGZpeGVkIGZvciByZWFsLCB0
aGUKKyAgICAgICAgb3BhY2l0eS1kZXRlcm1pbmF0aW9uIHNob3VsZCBwcm9iYWJseSBub3QgYmUg
cGVyLWZyYW1lIGJ1dCByYXRoZXIgYSBtZXRob2Qgb24KKyAgICAgICAgV2ViTWVkaWFQbGF5ZXJD
bGllbnQgdGhhdCB0aGUgcGlwZWxpbmUgY2FuIGNhbGwgdXAtZnJvbnQgKGFuZCBvbiB0aGUgbWFp
biB0aHJlYWQpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzMwNDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHNyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJNZWRpYVBsYXllckNsaWVudEltcGw6OmdldEN1cnJlbnRGcmFtZSk6CisKIDIwMTEtMTItMTIg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgV2ViS2l0IGNvZGUg
c2hvdWxkbid0IGJlIGNhbGxpbmcgYXBwbHlDb21tYW5kIGRpcmVjdGx5CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0ZyYW1lUHJvdmlk
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvRnJh
bWVQcm92aWRlci5oCmluZGV4IGM1OTZmODc2OTc2ZGIxYTAzOTY4NGU5ZGRmNmIxNzEwOGVmMGU0
YjAuLjNkNDNhOTBjMzdhNjM3YWNlN2NjNzMyMTc2M2RlNGEzOTc5OTQxZGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvRnJhbWVQcm92
aWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Zp
ZGVvRnJhbWVQcm92aWRlci5oCkBAIC0zOSw2ICszOSwxNCBAQCBjbGFzcyBWaWRlb0ZyYW1lUHJv
dmlkZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgflZpZGVvRnJhbWVQcm92aWRlcigpIHsgfQog
CisgICAgY2xhc3MgQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIC8vIFByb3ZpZGVyIHdp
bGwgY2FsbCB0aGlzIG1ldGhvZCB0byB0ZWxsIHRoZSBjbGllbnQgdG8gc3RvcCB1c2luZyBpdC4K
KyAgICAgICAgdmlydHVhbCB2b2lkIHN0b3BVc2luZ1Byb3ZpZGVyKCkgPSAwOworICAgIH07CisK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlkZW9GcmFtZVByb3ZpZGVyQ2xpZW50KENsaWVudCopID0g
MDsKKwogICAgIC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBWaWRlb0Zy
YW1lQ2hyb21pdW0sIHdoaWNoIGlzCiAgICAgLy8gdGhlIFdlYkNvcmUgd3JhcHBlciBmb3IgYSB2
aWRlbyBmcmFtZSBpbiBDaHJvbWl1bS4gZ2V0Q3VycmVudEZyYW1lKCkKICAgICAvLyBwbGFjZXMg
YSBsb2NrIG9uIHRoZSBmcmFtZSBpbiBDaHJvbWl1bS4gQ2FsbHMgdG8gdGhpcyBtZXRob2Qgc2hv
dWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAppbmRleCBlYzkzZjE2OGRhMTRlYTQx
ZTNjMTZkZjZkN2M0OWJlZTQ1MTNlYWNlLi5iZTM1YjZlZjAyMWYwY2E1Zjc5MzU2MjNlNDBjMWU2
ODAwMjk2N2JhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTMyLDE1ICsz
Miw2IEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaW5jbHVkZSAiVmlk
ZW9MYXllckNocm9taXVtLmgiCi0KLSNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJWaWRlb0Zy
YW1lQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJWaWRlb0ZyYW1lUHJvdmlkZXIuaCIKLSNpbmNsdWRl
ICJjYy9DQ0xheWVySW1wbC5oIgotI2luY2x1ZGUgImNjL0NDVGV4dHVyZVVwZGF0ZXIuaCIKICNp
bmNsdWRlICJjYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTUzLDIzNSArNDQsMjQgQEAgUGFzc1JlZlB0cjxWaWRlb0xheWVyQ2hyb21pdW0+IFZpZGVvTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWcKIAogVmlkZW9MYXllckNo
cm9taXVtOjpWaWRlb0xheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSwgVmlk
ZW9GcmFtZVByb3ZpZGVyKiBwcm92aWRlcikKICAgICA6IExheWVyQ2hyb21pdW0oZGVsZWdhdGUp
Ci0gICAgLCBtX3NraXBzRHJhdyh0cnVlKQotICAgICwgbV9mcmFtZUZvcm1hdChWaWRlb0ZyYW1l
Q2hyb21pdW06OkludmFsaWQpCiAgICAgLCBtX3Byb3ZpZGVyKHByb3ZpZGVyKQotICAgICwgbV9w
bGFuZXMoMCkKLSAgICAsIG1fbmF0aXZlVGV4dHVyZUlkKDApCiB7CisgICAgQVNTRVJUKG1fcHJv
dmlkZXIpOwogfQogCiBWaWRlb0xheWVyQ2hyb21pdW06On5WaWRlb0xheWVyQ2hyb21pdW0oKQog
ewotICAgIGNsZWFudXBSZXNvdXJjZXMoKTsKKyAgICBBU1NFUlQoIW1fcHJvdmlkZXIpOwogfQog
CiBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBWaWRlb0xheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5
ZXJJbXBsKCkKIHsKLSAgICByZXR1cm4gQ0NWaWRlb0xheWVySW1wbDo6Y3JlYXRlKG1fbGF5ZXJJ
ZCk7Ci19Ci0KLXZvaWQgVmlkZW9MYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKLXsK
LSAgICBMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IE1heFBsYW5lczsgKytpKQotICAgICAgICBtX3RleHR1cmVzW2ldLm1fdGV4
dHVyZS5jbGVhcigpOwotfQotCi12b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9z
aXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgQ0NUZXh0dXJlVXBkYXRl
ciYgdXBkYXRlcikKLXsKLSAgICBpZiAoIW1fZGVsZWdhdGUgfHwgIW1fcHJvdmlkZXIgfHwgIWRy
YXdzQ29udGVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fbmVlZHNEaXNwbGF5
ICYmIHRleHR1cmVzVmFsaWQoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gMDsg
cGxhbmUgPCBtX3BsYW5lczsgcGxhbmUrKykgewotICAgICAgICAgICAgTWFuYWdlZFRleHR1cmUq
IHRleCA9IG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS5nZXQoKTsKLSAgICAgICAgICAgIGlm
ICghdGV4LT5yZXNlcnZlKHRleC0+c2l6ZSgpLCB0ZXgtPmZvcm1hdCgpKSkgewotICAgICAgICAg
ICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9wbGFu
ZXMgPSAwOwotICAgIG1fc2tpcHNEcmF3ID0gZmFsc2U7Ci0KLSAgICBWaWRlb0ZyYW1lQ2hyb21p
dW0qIGZyYW1lID0gbV9wcm92aWRlci0+Z2V0Q3VycmVudEZyYW1lKCk7Ci0gICAgaWYgKCFmcmFt
ZSkgewotICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7Ci0gICAgICAgIG1fcHJvdmlkZXItPnB1
dEN1cnJlbnRGcmFtZShmcmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2Zy
YW1lRm9ybWF0ID0gZnJhbWUtPmZvcm1hdCgpOwotICAgIEdDM0RlbnVtIHRleHR1cmVGb3JtYXQg
PSBkZXRlcm1pbmVUZXh0dXJlRm9ybWF0KGZyYW1lKTsKLSAgICBpZiAodGV4dHVyZUZvcm1hdCA9
PSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSkgewotICAgICAgICAvLyBGSVhNRTog
SW1wbGVtZW50IG90aGVyIHBhdGhzLgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAg
ICBtX3NraXBzRHJhdyA9IHRydWU7Ci0gICAgICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFt
ZShmcmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAodGV4dHVyZUZvcm1h
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCkgewotICAgICAgICBtX25hdGl2ZVRl
eHR1cmVJZCA9IGZyYW1lLT50ZXh0dXJlSWQoKTsKLSAgICAgICAgbV9uYXRpdmVUZXh0dXJlU2l6
ZSA9IEludFNpemUoZnJhbWUtPndpZHRoKCksIGZyYW1lLT5oZWlnaHQoKSk7Ci0gICAgICAgIG1f
bmF0aXZlVGV4dHVyZVZpc2libGVTaXplID0gSW50U2l6ZShmcmFtZS0+d2lkdGgoKSwgZnJhbWUt
PmhlaWdodCgpKTsKLSAgICAgICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKLSAgICAgICAgbV9w
cm92aWRlci0+cHV0Q3VycmVudEZyYW1lKGZyYW1lKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIEFsbG9jYXRlIHRleHR1cmVzIGZvciBwbGFuZXMgaWYgdGhleSBhcmUgbm90IGFs
bG9jYXRlZCBhbHJlYWR5LCBvcgotICAgIC8vIHJlYWxsb2NhdGUgdGV4dHVyZXMgdGhhdCBhcmUg
dGhlIHdyb25nIHNpemUgZm9yIHRoZSBmcmFtZS4KLSAgICBib29sIHRleHR1cmVzUmVzZXJ2ZWQg
PSByZXNlcnZlVGV4dHVyZXMoZnJhbWUsIHRleHR1cmVGb3JtYXQpOwotICAgIGlmICghdGV4dHVy
ZXNSZXNlcnZlZCkgewotICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7Ci0gICAgICAgIG1fcHJv
dmlkZXItPnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBVcGRhdGUgdGV4dHVyZSBwbGFuZXMuCi0gICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9
IDA7IHBsYW5lIDwgZnJhbWUtPnBsYW5lcygpOyBwbGFuZSsrKSB7Ci0gICAgICAgIFRleHR1cmUm
IHRleHR1cmUgPSBtX3RleHR1cmVzW3BsYW5lXTsKLSAgICAgICAgQVNTRVJUKHRleHR1cmUubV90
ZXh0dXJlKTsKLSAgICAgICAgQVNTRVJUKGZyYW1lLT5yZXF1aXJlZFRleHR1cmVTaXplKHBsYW5l
KSA9PSB0ZXh0dXJlLm1fdGV4dHVyZS0+c2l6ZSgpKTsKLSAgICAgICAgdXBkYXRlVGV4dHVyZShj
b250ZXh0LCB1cGRhdGVyLmFsbG9jYXRvcigpLCB0ZXh0dXJlLCBmcmFtZS0+ZGF0YShwbGFuZSkp
OwotICAgIH0KLQotICAgIG1fcGxhbmVzID0gZnJhbWUtPnBsYW5lcygpOwotICAgIEFTU0VSVCht
X3BsYW5lcyA8PSBNYXhQbGFuZXMpOwotCi0gICAgbV91cGRhdGVSZWN0ID0gRmxvYXRSZWN0KEZs
b2F0UG9pbnQoKSwgYm91bmRzKCkpOwotICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7Ci0KLSAg
ICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJhbWUoZnJhbWUpOwotfQotCi12b2lkIFZpZGVvTGF5
ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCi17Ci0gICAg
TGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhsYXllcik7Ci0KLSAgICBDQ1ZpZGVvTGF5
ZXJJbXBsKiB2aWRlb0xheWVyID0gc3RhdGljX2Nhc3Q8Q0NWaWRlb0xheWVySW1wbCo+KGxheWVy
KTsKLSAgICB2aWRlb0xheWVyLT5zZXRTa2lwc0RyYXcobV9za2lwc0RyYXcpOwotICAgIHZpZGVv
TGF5ZXItPnNldEZyYW1lRm9ybWF0KG1fZnJhbWVGb3JtYXQpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX3BsYW5lczsgKytpKSB7Ci0gICAgICAgIGlmICghbV90ZXh0dXJlc1tpXS5t
X3RleHR1cmUpIHsKLSAgICAgICAgICAgIHZpZGVvTGF5ZXItPnNldFNraXBzRHJhdyh0cnVlKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHZpZGVvTGF5ZXItPnNldFRl
eHR1cmUoaSwgbV90ZXh0dXJlc1tpXS5tX3RleHR1cmUtPnRleHR1cmVJZCgpLCBtX3RleHR1cmVz
W2ldLm1fdGV4dHVyZS0+c2l6ZSgpLCBtX3RleHR1cmVzW2ldLm1fdmlzaWJsZVNpemUpOwotICAg
IH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3BsYW5lczsgaSA8IE1heFBsYW5lczsgKytpKQot
ICAgICAgICB2aWRlb0xheWVyLT5zZXRUZXh0dXJlKGksIDAsIEludFNpemUoKSwgSW50U2l6ZSgp
KTsKLSAgICBpZiAobV9mcmFtZUZvcm1hdCA9PSBWaWRlb0ZyYW1lQ2hyb21pdW06Ok5hdGl2ZVRl
eHR1cmUpCi0gICAgICAgIHZpZGVvTGF5ZXItPnNldE5hdGl2ZVRleHR1cmUobV9uYXRpdmVUZXh0
dXJlSWQsIG1fbmF0aXZlVGV4dHVyZVNpemUsIG1fbmF0aXZlVGV4dHVyZVZpc2libGVTaXplKTsK
LX0KLQotdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3QoQ0NMYXllclRy
ZWVIb3N0KiBob3N0KQotewotICAgIGlmIChob3N0ICYmIGxheWVyVHJlZUhvc3QoKSAhPSBob3N0
KSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBNYXhQbGFuZXM7ICsraSkgewot
ICAgICAgICAgICAgbV90ZXh0dXJlc1tpXS5tX3Zpc2libGVTaXplID0gSW50U2l6ZSgpOwotICAg
ICAgICAgICAgbV90ZXh0dXJlc1tpXS5tX3RleHR1cmUgPSBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRl
KGhvc3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBMYXllckNocm9taXVtOjpzZXRMYXllclRyZWVIb3N0KGhvc3QpOwotfQotCi1HQzNEZW51bSBW
aWRlb0xheWVyQ2hyb21pdW06OmRldGVybWluZVRleHR1cmVGb3JtYXQoY29uc3QgVmlkZW9GcmFt
ZUNocm9taXVtKiBmcmFtZSkKLXsKLSAgICBzd2l0Y2ggKGZyYW1lLT5mb3JtYXQoKSkgewotICAg
IGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpZVjEyOgotICAgIGNhc2UgVmlkZW9GcmFtZUNocm9t
aXVtOjpZVjE2OgotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRTsK
LSAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6UkdCQToKLSAgICAgICAgcmV0dXJuIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBOwotICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpOYXRpdmVU
ZXh0dXJlOgotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRTsKLX0KLQotYm9vbCBWaWRlb0xheWVyQ2hyb21pdW06OnRl
eHR1cmVzVmFsaWQoKQotewotICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBwbGFuZSA8IG1f
cGxhbmVzOyBwbGFuZSsrKSB7Ci0gICAgICAgIE1hbmFnZWRUZXh0dXJlKiB0ZXggPSBtX3RleHR1
cmVzW3BsYW5lXS5tX3RleHR1cmUuZ2V0KCk7Ci0gICAgICAgIGlmICghdGV4LT5pc1ZhbGlkKHRl
eC0+c2l6ZSgpLCB0ZXgtPmZvcm1hdCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmlkZW9MYXllckNocm9taXVtOjpyZXNl
cnZlVGV4dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSwgR0MzRGVudW0gdGV4
dHVyZUZvcm1hdCkKLXsKLSAgICBBU1NFUlQobGF5ZXJUcmVlSG9zdCgpKTsKLSAgICBBU1NFUlQo
ZnJhbWUpOwotICAgIEFTU0VSVCh0ZXh0dXJlRm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFKTsKLQotICAgIGludCBtYXhUZXh0dXJlU2l6ZSA9IGxheWVyVHJlZUhvc3Qo
KS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplOwotCi0gICAgZm9y
ICh1bnNpZ25lZCBwbGFuZSA9IDA7IHBsYW5lIDwgZnJhbWUtPnBsYW5lcygpOyBwbGFuZSsrKSB7
Ci0gICAgICAgIEludFNpemUgcmVxdWlyZWRUZXh0dXJlU2l6ZSA9IGZyYW1lLT5yZXF1aXJlZFRl
eHR1cmVTaXplKHBsYW5lKTsKLQotICAgICAgICAvLyBJZiB0aGUgcmVuZGVyZXIgY2Fubm90IGhh
bmRsZSB0aGlzIGxhcmdlIG9mIGEgdGV4dHVyZSwgcmV0dXJuIGZhbHNlLgotICAgICAgICAvLyBG
SVhNRTogUmVtb3ZlIHRoaXMgdGVzdCB3aGVuIHRpbGVkIGxheWVycyBhcmUgaW1wbGVtZW50ZWQu
Ci0gICAgICAgIGlmIChyZXF1aXJlZFRleHR1cmVTaXplLmlzWmVybygpIHx8IHJlcXVpcmVkVGV4
dHVyZVNpemUud2lkdGgoKSA+IG1heFRleHR1cmVTaXplIHx8IHJlcXVpcmVkVGV4dHVyZVNpemUu
aGVpZ2h0KCkgPiBtYXhUZXh0dXJlU2l6ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICBpZiAoIW1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBpZiAobV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlLT5z
aXplKCkgIT0gcmVxdWlyZWRUZXh0dXJlU2l6ZSkKLSAgICAgICAgICAgIG1fdGV4dHVyZXNbcGxh
bmVdLm1fdmlzaWJsZVNpemUgPSBjb21wdXRlVmlzaWJsZVNpemUoZnJhbWUsIHBsYW5lKTsKLQot
ICAgICAgICBtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUtPnJlc2VydmUocmVxdWlyZWRUZXh0
dXJlU2l6ZSwgdGV4dHVyZUZvcm1hdCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LUludFNpemUgVmlkZW9MYXllckNocm9taXVtOjpjb21wdXRlVmlzaWJsZVNpemUoY29uc3QgVmlk
ZW9GcmFtZUNocm9taXVtKiBmcmFtZSwgdW5zaWduZWQgcGxhbmUpCi17Ci0gICAgaW50IHZpc2li
bGVXaWR0aCA9IGZyYW1lLT53aWR0aChwbGFuZSk7Ci0gICAgaW50IHZpc2libGVIZWlnaHQgPSBm
cmFtZS0+aGVpZ2h0KHBsYW5lKTsKLSAgICAvLyBXaGVuIHRoZXJlIGFyZSBkZWFkIHBpeGVscyBh
dCB0aGUgZWRnZSBvZiB0aGUgdGV4dHVyZSwgZGVjcmVhc2UKLSAgICAvLyB0aGUgZnJhbWUgd2lk
dGggYnkgMSB0byBwcmV2ZW50IHRoZSByaWdodG1vc3QgcGl4ZWxzIGZyb20KLSAgICAvLyBpbnRl
cnBvbGF0aW5nIHdpdGggdGhlIGRlYWQgcGl4ZWxzLgotICAgIGlmIChmcmFtZS0+aGFzUGFkZGlu
Z0J5dGVzKHBsYW5lKSkKLSAgICAgICAgLS12aXNpYmxlV2lkdGg7Ci0KLSAgICAvLyBJbiBZVjEy
LCBldmVyeSAyeDIgc3F1YXJlIG9mIFkgdmFsdWVzIGNvcnJlc3BvbmRzIHRvIG9uZSBVIGFuZAot
ICAgIC8vIG9uZSBWIHZhbHVlLiBJZiB3ZSBkZWNyZWFzZSB0aGUgd2lkdGggb2YgdGhlIFVWIHBs
YW5lLCB3ZSBtdXN0IGRlY3JlYXNlIHRoZQotICAgIC8vIHdpZHRoIG9mIHRoZSBZIHRleHR1cmUg
YnkgMiBmb3IgcHJvcGVyIGFsaWdubWVudC4gVGhpcyBtdXN0IGhhcHBlbgotICAgIC8vIGFsd2F5
cywgZXZlbiBpZiBZJ3MgdGV4dHVyZSBkb2VzIG5vdCBoYXZlIHBhZGRpbmcgYnl0ZXMuCi0gICAg
aWYgKHBsYW5lID09IFZpZGVvRnJhbWVDaHJvbWl1bTo6eVBsYW5lICYmIGZyYW1lLT5mb3JtYXQo
KSA9PSBWaWRlb0ZyYW1lQ2hyb21pdW06OllWMTIpIHsKLSAgICAgICAgaWYgKGZyYW1lLT5oYXNQ
YWRkaW5nQnl0ZXMoVmlkZW9GcmFtZUNocm9taXVtOjp1UGxhbmUpKSB7Ci0gICAgICAgICAgICBp
bnQgb3JpZ2luYWxXaWR0aCA9IGZyYW1lLT53aWR0aChwbGFuZSk7Ci0gICAgICAgICAgICB2aXNp
YmxlV2lkdGggPSBvcmlnaW5hbFdpZHRoIC0gMjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiBJbnRTaXplKHZpc2libGVXaWR0aCwgdmlzaWJsZUhlaWdodCk7Ci19Ci0KLXZvaWQgVmlk
ZW9MYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IHZv
aWQqIGRhdGEpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGNvbnRleHQpOwotICAgIEFTU0VSVCh0ZXh0
dXJlLm1fdGV4dHVyZSk7Ci0KLSAgICB0ZXh0dXJlLm1fdGV4dHVyZS0+YmluZFRleHR1cmUoY29u
dGV4dCwgYWxsb2NhdG9yKTsKLQotICAgIEdDM0RlbnVtIGZvcm1hdCA9IHRleHR1cmUubV90ZXh0
dXJlLT5mb3JtYXQoKTsKLSAgICBJbnRTaXplIGRpbWVuc2lvbnMgPSB0ZXh0dXJlLm1fdGV4dHVy
ZS0+c2l6ZSgpOwotCi0gICAgdm9pZCogbWVtID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hy
b21pdW0qPihjb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpLT5tYXBUZXhTdWJJbWFnZTJEQ0hST01J
VU0oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDAsIDAsIGRpbWVuc2lvbnMud2lk
dGgoKSwgZGltZW5zaW9ucy5oZWlnaHQoKSwgZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURSwgRXh0ZW5zaW9uczNEQ2hyb21pdW06OldSSVRFX09OTFkpOwotICAgIGlmICht
ZW0pIHsKLSAgICAgICAgbWVtY3B5KG1lbSwgZGF0YSwgZGltZW5zaW9ucy53aWR0aCgpICogZGlt
ZW5zaW9ucy5oZWlnaHQoKSk7Ci0gICAgICAgIEdMQyhjb250ZXh0LCBzdGF0aWNfY2FzdDxFeHRl
bnNpb25zM0RDaHJvbWl1bSo+KGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKSktPnVubWFwVGV4U3Vi
SW1hZ2UyRENIUk9NSVVNKG1lbSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIG1hcFRl
eFN1YkltYWdlMkRDSFJPTUlVTSBmYWlscywgdGhlbiBkbyB0aGUgc2xvd2VyIHRleFN1YkltYWdl
MkQKLSAgICAgICAgLy8gdXBsb2FkLiBUaGlzIGRvZXMgdHdpY2UgdGhlIGNvcGllcyBhcyBtYXBU
ZXhTdWJJbWFnZTJEQ0hST01JVU0sIG9uZQotICAgICAgICAvLyBpbiB0aGUgY29tbWFuZCBidWZm
ZXIgYW5kIGFub3RoZXIgdG8gdGhlIHRleHR1cmUuCi0gICAgICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAwLCAw
LCBkaW1lbnNpb25zLndpZHRoKCksIGRpbWVuc2lvbnMuaGVpZ2h0KCksIGZvcm1hdCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGRhdGEpKTsKLSAgICB9CisgICAgUmVmUHRyPEND
VmlkZW9MYXllckltcGw+IHJldCA9IENDVmlkZW9MYXllckltcGw6OmNyZWF0ZShtX2xheWVySWQs
IG1fcHJvdmlkZXIpOworICAgIG1fcHJvdmlkZXIgPSAwOworICAgIHJldHVybiByZXQ7CiB9CiAK
LXZvaWQgVmlkZW9MYXllckNocm9taXVtOjpyZWxlYXNlUHJvdmlkZXIoKQordm9pZCBWaWRlb0xh
eWVyQ2hyb21pdW06OnN0b3BVc2luZ1Byb3ZpZGVyKCkKIHsKICAgICBtX3Byb3ZpZGVyID0gMDsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1ZpZGVvTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmgKaW5kZXggNTE2YzhkMzg0N2MyYWRiNjRjNWJi
ZWZiN2M5OWNhYjVmNWFmYWJhMy4uM2ZkNTcyNmI3OWU5OGU3NzIzOTFjYTFkMWE4MTQwNzhjOGMw
ZjkwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVmlkZW9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmgKQEAgLTM1LDEzICszNSwxNSBAQAog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAogI2luY2x1ZGUgIkxheWVyQ2hyb21p
dW0uaCIKLSNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgogI2luY2x1ZGUgIlZpZGVvRnJhbWVQ
cm92aWRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDVmlkZW9MYXllcklt
cGw7CisKIC8vIEEgTGF5ZXIgdGhhdCBjb250YWlucyBhIFZpZGVvIGVsZW1lbnQuCi1jbGFzcyBW
aWRlb0xheWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitjbGFzcyBWaWRlb0xh
eWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bQorICAgICAgICAgICAgICAgICAgICAg
ICAgICwgcHVibGljIFZpZGVvRnJhbWVQcm92aWRlcjo6Q2xpZW50IHsKIHB1YmxpYzoKIAogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFZpZGVvTGF5ZXJDaHJvbWl1bT4gY3JlYXRlKENDTGF5ZXJEZWxl
Z2F0ZSogPSAwLApAQCAtNTAsNDUgKzUyLDE0IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlQ0NMYXllckltcGwoKTsKIAotICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NUZXh0
dXJlVXBkYXRlciYpOwogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CiAKLSAgICB2b2lkIHJlbGVhc2VQcm92aWRlcigpOwotCi0gICAgdmlydHVh
bCB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqKTsKLQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdCopOwotCi1wcm90ZWN0ZWQ6Ci0gICAg
dmlydHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFVz
aW5nUHJvdmlkZXIoKTsKIAogcHJpdmF0ZToKLSAgICBzdHJ1Y3QgVGV4dHVyZSB7Ci0gICAgICAg
IEludFNpemUgbV92aXNpYmxlU2l6ZTsKLSAgICAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBt
X3RleHR1cmU7Ci0gICAgfTsKLQogICAgIFZpZGVvTGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdh
dGUqLCBWaWRlb0ZyYW1lUHJvdmlkZXIqKTsKIAotICAgIHN0YXRpYyBHQzNEZW51bSBkZXRlcm1p
bmVUZXh0dXJlRm9ybWF0KGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSopOwotICAgIHN0YXRpYyBJ
bnRTaXplIGNvbXB1dGVWaXNpYmxlU2l6ZShjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qLCB1bnNp
Z25lZCBwbGFuZSk7Ci0gICAgYm9vbCB0ZXh0dXJlc1ZhbGlkKCk7Ci0gICAgYm9vbCByZXNlcnZl
VGV4dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiwgR0MzRGVudW0gdGV4dHVyZUZvcm1h
dCk7Ci0gICAgdm9pZCB1cGRhdGVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFs
bG9jYXRvciosIFRleHR1cmUmLCBjb25zdCB2b2lkKikgY29uc3Q7Ci0KLSAgICB2b2lkIHJlc2V0
RnJhbWVQYXJhbWV0ZXJzKCk7Ci0KLSAgICBib29sIG1fc2tpcHNEcmF3OwotICAgIFZpZGVvRnJh
bWVDaHJvbWl1bTo6Rm9ybWF0IG1fZnJhbWVGb3JtYXQ7Ci0gICAgVmlkZW9GcmFtZVByb3ZpZGVy
KiBtX3Byb3ZpZGVyOwotCi0gICAgZW51bSB7IE1heFBsYW5lcyA9IDMgfTsKLSAgICBUZXh0dXJl
IG1fdGV4dHVyZXNbTWF4UGxhbmVzXTsKLSAgICB1bnNpZ25lZCBtX3BsYW5lczsKLQotICAgIHVu
c2lnbmVkIG1fbmF0aXZlVGV4dHVyZUlkOwotICAgIEludFNpemUgbV9uYXRpdmVUZXh0dXJlU2l6
ZTsKLSAgICBJbnRTaXplIG1fbmF0aXZlVGV4dHVyZVZpc2libGVTaXplOworICAgIFZpZGVvRnJh
bWVQcm92aWRlciogbV9wcm92aWRlcjsgLy8gT25seSBwb3B1bGF0ZWQgYmV0d2VlbiBjb25zdHJ1
Y3Rpb24gYW5kIGNyZWF0ZUNDTGF5ZXJJbXBsIGJlaW5nIGNhbGxlZC4KIH07CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlk
ZW9MYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKaW5kZXggNmIzN2U4NmE2Y2U2OGQ1MWJhNTJjYTQ4
YzIzYzZmNzRmNDU0Y2VjOS4uNjRjZjFkNGY5NTI0OTYyZjFhMzU5NWE2ZTUwYTBlM2E3MGI1MDg1
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKQEAgLTI5LDggKzI5LDEwIEBA
CiAKICNpbmNsdWRlICJjYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgiCiAKKyNpbmNsdWRlICJFeHRlbnNp
b25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVk
ZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSAiUHJvZ3JhbUJpbmRpbmcuaCIK
ICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTU5LDc4ICs2MSwyMDggQEAgY29uc3Qg
ZmxvYXQgQ0NWaWRlb0xheWVySW1wbDo6eXV2QWRqdXN0WzNdID0gewogICAgIC0wLjVmLAogfTsK
IAotQ0NWaWRlb0xheWVySW1wbDo6Q0NWaWRlb0xheWVySW1wbChpbnQgaWQpCitDQ1ZpZGVvTGF5
ZXJJbXBsOjpDQ1ZpZGVvTGF5ZXJJbXBsKGludCBpZCwgVmlkZW9GcmFtZVByb3ZpZGVyKiBwcm92
aWRlcikKICAgICA6IENDTGF5ZXJJbXBsKGlkKQorICAgICwgbV9wcm92aWRlcihwcm92aWRlcikK
IHsKKyAgICBBU1NFUlQoZmFsc2UpOworICAgIHByb3ZpZGVyLT5zZXRWaWRlb0ZyYW1lUHJvdmlk
ZXJDbGllbnQodGhpcyk7CiB9CiAKIENDVmlkZW9MYXllckltcGw6On5DQ1ZpZGVvTGF5ZXJJbXBs
KCkKIHsKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9wcm92aWRlck11dGV4KTsKKyAgICBBU1NF
UlQoIW1fcHJvdmlkZXIpOyAvLyBDbGVhcmVkIGR1cmluZyBWaWRlb0xheWVyQ2hyb21pdW06OnJl
bGVhc2VQcm92aWRlcigpLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBNYXhQbGFuZXM7
ICsraSkKKyAgICAgICAgbV90ZXh0dXJlc1tpXS5tX3RleHR1cmUuY2xlYXIoKTsKICAgICBjbGVh
bnVwUmVzb3VyY2VzKCk7CiB9CiAKLXZvaWQgQ0NWaWRlb0xheWVySW1wbDo6c2V0VGV4dHVyZShz
aXplX3QgaW5kZXgsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkLCBjb25zdCBJbnRTaXplJiBz
aXplLCBjb25zdCBJbnRTaXplJiB2aXNpYmxlU2l6ZSkKK3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6
c3RvcFVzaW5nUHJvdmlkZXIoKQogewotICAgIEFTU0VSVChpbmRleCA8IDMpOwotICAgIG1fdGV4
dHVyZXNbaW5kZXhdLmlkID0gdGV4dHVyZUlkOwotICAgIG1fdGV4dHVyZXNbaW5kZXhdLnNpemUg
PSBzaXplOwotICAgIG1fdGV4dHVyZXNbaW5kZXhdLnZpc2libGVTaXplID0gdmlzaWJsZVNpemU7
CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcHJvdmlkZXJNdXRleCk7CisgICAgbV9wcm92aWRl
ciA9IDA7CiB9CiAKLXZvaWQgQ0NWaWRlb0xheWVySW1wbDo6c2V0TmF0aXZlVGV4dHVyZShQbGF0
Zm9ybTNET2JqZWN0IHRleHR1cmVJZCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgSW50U2l6
ZSYgdmlzaWJsZVNpemUpCisvLyBDb252ZXJ0IFZpZGVvRnJhbWVDaHJvbWl1bTo6Rm9ybWF0IHRv
IEdyYXBoaWNzQ29udGV4dDNEJ3MgZm9ybWF0IGVudW0gdmFsdWVzLgorc3RhdGljIEdDM0RlbnVt
IGNvbnZlcnRWRkNGb3JtYXRUb0dDM0RGb3JtYXQoVmlkZW9GcmFtZUNocm9taXVtOjpGb3JtYXQg
dmZjRm9ybWF0KQogewotICAgIG1fbmF0aXZlVGV4dHVyZUlkID0gdGV4dHVyZUlkOwotICAgIG1f
bmF0aXZlVGV4dHVyZVNpemUgPSBzaXplOwotICAgIG1fbmF0aXZlVGV4dHVyZVZpc2libGVTaXpl
ID0gdmlzaWJsZVNpemU7CisgICAgc3dpdGNoICh2ZmNGb3JtYXQpIHsKKyAgICBjYXNlIFZpZGVv
RnJhbWVDaHJvbWl1bTo6WVYxMjoKKyAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6WVYxNjoK
KyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U7CisgICAgY2FzZSBW
aWRlb0ZyYW1lQ2hyb21pdW06OlJHQkE6CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQTsKKyAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6TmF0aXZlVGV4dHVyZToKKyAg
ICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOworICAgIGNhc2UgVmlk
ZW9GcmFtZUNocm9taXVtOjpJbnZhbGlkOgorICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpS
R0I1NTU6CisgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OlJHQjU2NToKKyAgICBjYXNlIFZp
ZGVvRnJhbWVDaHJvbWl1bTo6UkdCMjQ6CisgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OlJH
QjMyOgorICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpOVjEyOgorICAgIGNhc2UgVmlkZW9G
cmFtZUNocm9taXVtOjpFbXB0eToKKyAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6QVNDSUk6
CisgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06Okk0MjA6CisgICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgfQorICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RTsKIH0KIAogdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1
bSogbGF5ZXJSZW5kZXJlcikKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkp
OwogCi0gICAgaWYgKG1fc2tpcHNEcmF3KQorICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3Byb3Zp
ZGVyTXV0ZXgpOworCisgICAgaWYgKCFtX3Byb3ZpZGVyKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBzd2l0Y2ggKG1fZnJhbWVGb3JtYXQpIHsKLSAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6
WVYxMjoKLSAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6WVYxNjoKKyAgICBWaWRlb0ZyYW1l
Q2hyb21pdW0qIGZyYW1lID0gbV9wcm92aWRlci0+Z2V0Q3VycmVudEZyYW1lKCk7CisgICAgaWYg
KCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIEdDM0RlbnVtIGZvcm1hdCA9IGNvbnZlcnRW
RkNGb3JtYXRUb0dDM0RGb3JtYXQoZnJhbWUtPmZvcm1hdCgpKTsKKworICAgIGlmIChmb3JtYXQg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICghY29weUZyYW1lVG9UZXh0dXJlcyhmcmFtZSwgZm9ybWF0LCBsYXllclJlbmRlcmVy
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U6CiAgICAgICAgIGRyYXdZVVYobGF5ZXJSZW5kZXJl
cik7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpSR0JBOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6CiAgICAgICAgIGRyYXdSR0JBKGxheWVy
UmVuZGVyZXIpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6
TmF0aXZlVGV4dHVyZToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgog
ICAgICAgICBkcmF3TmF0aXZlVGV4dHVyZShsYXllclJlbmRlcmVyKTsKICAgICAgICAgYnJlYWs7
CiAgICAgZGVmYXVsdDoKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBvdGhlciBwYXRocy4K
LSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIENSQVNI
KCk7IC8vIFNvbWVvbmUgdXBkYXRlZCBjb252ZXJ0VkZDRm9ybWF0VG9HQzNERm9ybWF0IGFib3Zl
IGJ1dCB1cGRhdGUgdGhpcyEKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gMDsg
cGxhbmUgPCBmcmFtZS0+cGxhbmVzKCk7ICsrcGxhbmUpCisgICAgICAgIG1fdGV4dHVyZXNbcGxh
bmVdLm1fdGV4dHVyZS0+dW5yZXNlcnZlKCk7CisgICAgbV9wcm92aWRlci0+cHV0Q3VycmVudEZy
YW1lKGZyYW1lKTsKK30KKworYm9vbCBDQ1ZpZGVvTGF5ZXJJbXBsOjpjb3B5RnJhbWVUb1RleHR1
cmVzKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUsIEdDM0RlbnVtIGZvcm1hdCwgTGF5
ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQoreworICAgIGlmIChmcmFtZS0+Zm9y
bWF0KCkgPT0gVmlkZW9GcmFtZUNocm9taXVtOjpOYXRpdmVUZXh0dXJlKSB7CisgICAgICAgIG1f
bmF0aXZlVGV4dHVyZUlkID0gZnJhbWUtPnRleHR1cmVJZCgpOworICAgICAgICBtX25hdGl2ZVRl
eHR1cmVTaXplID0gSW50U2l6ZShmcmFtZS0+d2lkdGgoKSwgZnJhbWUtPmhlaWdodCgpKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKCFyZXNlcnZlVGV4dHVyZXMoZnJh
bWUsIGZvcm1hdCwgbGF5ZXJSZW5kZXJlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBwbGFuZSA8IGZyYW1lLT5wbGFuZXMoKTsgKytwbGFu
ZSkgeworICAgICAgICBBU1NFUlQoZnJhbWUtPnJlcXVpcmVkVGV4dHVyZVNpemUocGxhbmUpID09
IG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS0+c2l6ZSgpKTsKKyAgICAgICAgY29weVBsYW5l
VG9UZXh0dXJlKGxheWVyUmVuZGVyZXIsIGZyYW1lLT5kYXRhKHBsYW5lKSwgcGxhbmUpOworICAg
IH0KKyAgICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gZnJhbWUtPnBsYW5lcygpOyBwbGFuZSA8IE1h
eFBsYW5lczsgKytwbGFuZSkgeworICAgICAgICBUZXh0dXJlJiB0ZXh0dXJlID0gbV90ZXh0dXJl
c1twbGFuZV07CisgICAgICAgIHRleHR1cmUubV90ZXh0dXJlLmNsZWFyKCk7CisgICAgICAgIHRl
eHR1cmUubV92aXNpYmxlU2l6ZSA9IEludFNpemUoKTsKKyAgICB9CisgICAgbV9wbGFuZXMgPSBm
cmFtZS0+cGxhbmVzKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ0NWaWRlb0xheWVy
SW1wbDo6Y29weVBsYW5lVG9UZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5k
ZXJlciwgY29uc3Qgdm9pZCogcGxhbmUsIGludCBpbmRleCkKK3sKKyAgICBUZXh0dXJlJiB0ZXh0
dXJlID0gbV90ZXh0dXJlc1tpbmRleF07CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQg
PSBsYXllclJlbmRlcmVyLT5jb250ZXh0KCk7CisgICAgVGV4dHVyZUFsbG9jYXRvciogYWxsb2Nh
dG9yID0gbGF5ZXJSZW5kZXJlci0+cmVuZGVyU3VyZmFjZVRleHR1cmVBbGxvY2F0b3IoKTsKKyAg
ICB0ZXh0dXJlLm1fdGV4dHVyZS0+YmluZFRleHR1cmUoY29udGV4dCwgYWxsb2NhdG9yKTsKKyAg
ICBHQzNEZW51bSBmb3JtYXQgPSB0ZXh0dXJlLm1fdGV4dHVyZS0+Zm9ybWF0KCk7CisgICAgSW50
U2l6ZSBkaW1lbnNpb25zID0gdGV4dHVyZS5tX3RleHR1cmUtPnNpemUoKTsKKworICAgIHZvaWQq
IG1lbSA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpKS0+bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCAwLCAwLCAwLCBkaW1lbnNpb25zLndpZHRoKCksIGRpbWVuc2lvbnMuaGVpZ2h0
KCksIGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIEV4dGVuc2lvbnMz
RENocm9taXVtOjpXUklURV9PTkxZKTsKKyAgICBpZiAobWVtKSB7CisgICAgICAgIG1lbWNweSht
ZW0sIHBsYW5lLCBkaW1lbnNpb25zLndpZHRoKCkgKiBkaW1lbnNpb25zLmhlaWdodCgpKTsKKyAg
ICAgICAgR0xDKGNvbnRleHQsIHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpKS0+dW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0obWVtKSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgbWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNIGZh
aWxzLCB0aGVuIGRvIHRoZSBzbG93ZXIgdGV4U3ViSW1hZ2UyRAorICAgICAgICAvLyB1cGxvYWQu
IFRoaXMgZG9lcyB0d2ljZSB0aGUgY29waWVzIGFzIG1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSwg
b25lCisgICAgICAgIC8vIGluIHRoZSBjb21tYW5kIGJ1ZmZlciBhbmQgYW5vdGhlciB0byB0aGUg
dGV4dHVyZS4KKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFN1YkltYWdlMkQoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDAsIDAsIGRpbWVuc2lvbnMud2lkdGgoKSwg
ZGltZW5zaW9ucy5oZWlnaHQoKSwgZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSwgcGxhbmUpKTsKICAgICB9CiB9CiAKK3N0YXRpYyBJbnRTaXplIGNvbXB1dGVWaXNpYmxl
U2l6ZShjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lLCB1bnNpZ25lZCBwbGFuZSkKK3sK
KyAgICBpbnQgdmlzaWJsZVdpZHRoID0gZnJhbWUtPndpZHRoKHBsYW5lKTsKKyAgICBpbnQgdmlz
aWJsZUhlaWdodCA9IGZyYW1lLT5oZWlnaHQocGxhbmUpOworICAgIC8vIFdoZW4gdGhlcmUgYXJl
IGRlYWQgcGl4ZWxzIGF0IHRoZSBlZGdlIG9mIHRoZSB0ZXh0dXJlLCBkZWNyZWFzZQorICAgIC8v
IHRoZSBmcmFtZSB3aWR0aCBieSAxIHRvIHByZXZlbnQgdGhlIHJpZ2h0bW9zdCBwaXhlbHMgZnJv
bQorICAgIC8vIGludGVycG9sYXRpbmcgd2l0aCB0aGUgZGVhZCBwaXhlbHMuCisgICAgaWYgKGZy
YW1lLT5oYXNQYWRkaW5nQnl0ZXMocGxhbmUpKQorICAgICAgICAtLXZpc2libGVXaWR0aDsKKwor
ICAgIC8vIEluIFlWMTIsIGV2ZXJ5IDJ4MiBzcXVhcmUgb2YgWSB2YWx1ZXMgY29ycmVzcG9uZHMg
dG8gb25lIFUgYW5kCisgICAgLy8gb25lIFYgdmFsdWUuIElmIHdlIGRlY3JlYXNlIHRoZSB3aWR0
aCBvZiB0aGUgVVYgcGxhbmUsIHdlIG11c3QgZGVjcmVhc2UgdGhlCisgICAgLy8gd2lkdGggb2Yg
dGhlIFkgdGV4dHVyZSBieSAyIGZvciBwcm9wZXIgYWxpZ25tZW50LiBUaGlzIG11c3QgaGFwcGVu
CisgICAgLy8gYWx3YXlzLCBldmVuIGlmIFkncyB0ZXh0dXJlIGRvZXMgbm90IGhhdmUgcGFkZGlu
ZyBieXRlcy4KKyAgICBpZiAocGxhbmUgPT0gVmlkZW9GcmFtZUNocm9taXVtOjp5UGxhbmUgJiYg
ZnJhbWUtPmZvcm1hdCgpID09IFZpZGVvRnJhbWVDaHJvbWl1bTo6WVYxMikgeworICAgICAgICBp
ZiAoZnJhbWUtPmhhc1BhZGRpbmdCeXRlcyhWaWRlb0ZyYW1lQ2hyb21pdW06OnVQbGFuZSkpIHsK
KyAgICAgICAgICAgIGludCBvcmlnaW5hbFdpZHRoID0gZnJhbWUtPndpZHRoKHBsYW5lKTsKKyAg
ICAgICAgICAgIHZpc2libGVXaWR0aCA9IG9yaWdpbmFsV2lkdGggLSAyOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIEludFNpemUodmlzaWJsZVdpZHRoLCB2aXNpYmxlSGVpZ2h0KTsK
K30KKworYm9vbCBDQ1ZpZGVvTGF5ZXJJbXBsOjpyZXNlcnZlVGV4dHVyZXMoY29uc3QgVmlkZW9G
cmFtZUNocm9taXVtKiBmcmFtZSwgR0MzRGVudW0gZm9ybWF0LCBMYXllclJlbmRlcmVyQ2hyb21p
dW0qIGxheWVyUmVuZGVyZXIpCit7CisgICAgaWYgKGZyYW1lLT5wbGFuZXMoKSA+IE1heFBsYW5l
cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGludCBtYXhUZXh0dXJlU2l6ZSA9IGxheWVy
UmVuZGVyZXItPmNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplOworICAgIGZvciAodW5zaWdu
ZWQgcGxhbmUgPSAwOyBwbGFuZSA8IGZyYW1lLT5wbGFuZXMoKTsgKytwbGFuZSkgeworICAgICAg
ICBJbnRTaXplIHJlcXVpcmVkVGV4dHVyZVNpemUgPSBmcmFtZS0+cmVxdWlyZWRUZXh0dXJlU2l6
ZShwbGFuZSk7CisgICAgICAgIC8vIElmIHRoZSByZW5kZXJlciBjYW5ub3QgaGFuZGxlIHRoaXMg
bGFyZ2Ugb2YgYSB0ZXh0dXJlLCByZXR1cm4gZmFsc2UuCisgICAgICAgIC8vIEZJWE1FOiBSZW1v
dmUgdGhpcyB0ZXN0IHdoZW4gdGlsZWQgbGF5ZXJzIGFyZSBpbXBsZW1lbnRlZC4KKyAgICAgICAg
aWYgKHJlcXVpcmVkVGV4dHVyZVNpemUuaXNaZXJvKCkgfHwgcmVxdWlyZWRUZXh0dXJlU2l6ZS53
aWR0aCgpID4gbWF4VGV4dHVyZVNpemUgfHwgcmVxdWlyZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSA+
IG1heFRleHR1cmVTaXplKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
IW1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZSkgeworICAgICAgICAgICAgbV90ZXh0dXJlc1tw
bGFuZV0ubV90ZXh0dXJlID0gTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShsYXllclJlbmRlcmVyLT5y
ZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIoKSk7CisgICAgICAgICAgICBpZiAoIW1fdGV4dHVy
ZXNbcGxhbmVdLm1fdGV4dHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBtX3RleHR1cmVzW3BsYW5lXS5tX3Zpc2libGVTaXplID0gSW50U2l6ZSgpOworICAg
ICAgICB9CisgICAgICAgIGlmIChtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUtPnNpemUoKSAh
PSByZXF1aXJlZFRleHR1cmVTaXplKQorICAgICAgICAgICAgbV90ZXh0dXJlc1twbGFuZV0ubV92
aXNpYmxlU2l6ZSA9IGNvbXB1dGVWaXNpYmxlU2l6ZShmcmFtZSwgcGxhbmUpOworICAgICAgICBt
X3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUtPnJlc2VydmUocmVxdWlyZWRUZXh0dXJlU2l6ZSwg
Zm9ybWF0KTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgQ0NWaWRlb0xheWVy
SW1wbDo6ZHJhd1lVVihMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpIGNvbnN0
CiB7CiAgICAgY29uc3QgWVVWUHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnZpZGVv
TGF5ZXJZVVZQcm9ncmFtKCk7CiAgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlh
bGl6ZWQoKSk7CiAKICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVy
ZXItPmNvbnRleHQoKTsKLSAgICBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlIHlUZXh0dXJlID0g
bV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnlQbGFuZV07Ci0gICAgQ0NWaWRlb0xheWVy
SW1wbDo6VGV4dHVyZSB1VGV4dHVyZSA9IG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjp1
UGxhbmVdOwotICAgIENDVmlkZW9MYXllckltcGw6OlRleHR1cmUgdlRleHR1cmUgPSBtX3RleHR1
cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6dlBsYW5lXTsKKyAgICBjb25zdCBUZXh0dXJlJiB5VGV4
dHVyZSA9IG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjp5UGxhbmVdOworICAgIGNvbnN0
IFRleHR1cmUmIHVUZXh0dXJlID0gbV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnVQbGFu
ZV07CisgICAgY29uc3QgVGV4dHVyZSYgdlRleHR1cmUgPSBtX3RleHR1cmVzW1ZpZGVvRnJhbWVD
aHJvbWl1bTo6dlBsYW5lXTsKIAogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMSkpOwotICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgeVRleHR1cmUu
aWQpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIHlUZXh0dXJlLm1fdGV4dHVyZS0+dGV4dHVyZUlkKCkpKTsKICAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRTIpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHVUZXh0dXJlLmlkKSk7CisgICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB1VGV4
dHVyZS5tX3RleHR1cmUtPnRleHR1cmVJZCgpKSk7CiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUzKSk7Ci0gICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCB2VGV4dHVyZS5pZCkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdlRleHR1cmUubV90ZXh0dXJlLT50ZXh0dXJl
SWQoKSkpOwogCiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+
cHJvZ3JhbSgpKSk7CiAKLSAgICBmbG9hdCB5V2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0
PGZsb2F0Pih5VGV4dHVyZS52aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHlUZXh0dXJlLnNpemUud2lk
dGgoKTsKKyAgICBmbG9hdCB5V2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0Pih5
VGV4dHVyZS5tX3Zpc2libGVTaXplLndpZHRoKCkpIC8geVRleHR1cmUubV90ZXh0dXJlLT5zaXpl
KCkud2lkdGgoKTsKICAgICAvLyBBcmJpdHJhcmlseSB0YWtlIHRoZSB1IHNpemVzIGJlY2F1c2Ug
dSBhbmQgdiBkaW1lbnNpb25zIGFyZSBpZGVudGljYWwuCi0gICAgZmxvYXQgdXZXaWR0aFNjYWxl
RmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHVUZXh0dXJlLnZpc2libGVTaXplLndpZHRoKCkp
IC8gdVRleHR1cmUuc2l6ZS53aWR0aCgpOworICAgIGZsb2F0IHV2V2lkdGhTY2FsZUZhY3RvciA9
IHN0YXRpY19jYXN0PGZsb2F0Pih1VGV4dHVyZS5tX3Zpc2libGVTaXplLndpZHRoKCkpIC8gdVRl
eHR1cmUubV90ZXh0dXJlLT5zaXplKCkud2lkdGgoKTsKICAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+dW5pZm9ybTFmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnlXaWR0aFNjYWxlRmFjdG9yTG9j
YXRpb24oKSwgeVdpZHRoU2NhbGVGYWN0b3IpKTsKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
dW5pZm9ybTFmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnV2V2lkdGhTY2FsZUZhY3RvckxvY2F0
aW9uKCksIHV2V2lkdGhTY2FsZUZhY3RvcikpOwogCkBAIC0xNTAsMjEgKzI4MiwxOCBAQCB2b2lk
IENDVmlkZW9MYXllckltcGw6OmRyYXdZVVYoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJl
bmRlcmVyKSBjb25zdAogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwogfQogCi12b2lkIENDVmlkZW9MYXllckltcGw6
OmRyYXdSR0JBKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikgY29uc3QKK3Rl
bXBsYXRlPGNsYXNzIFByb2dyYW0+Cit2b2lkIENDVmlkZW9MYXllckltcGw6OmRyYXdDb21tb24o
TGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBQcm9ncmFtKiBwcm9ncmFtLCBm
bG9hdCB3aWR0aFNjYWxlRmFjdG9yLCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCkgY29uc3QK
IHsKLSAgICBjb25zdCBSR0JBUHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnZpZGVv
TGF5ZXJSR0JBUHJvZ3JhbSgpOwogICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRp
YWxpemVkKCkpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRl
cmVyLT5jb250ZXh0KCk7Ci0gICAgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSB0ZXh0dXJlID0g
bV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnJnYlBsYW5lXTsKIAogICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkp
OwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgdGV4dHVyZS5pZCkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5i
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZUlkKSk7CiAK
ICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkp
KTsKLSAgICBmbG9hdCB3aWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRleHR1
cmUudmlzaWJsZVNpemUud2lkdGgoKSkgLyB0ZXh0dXJlLnNpemUud2lkdGgoKTsKICAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnRleFRy
YW5zZm9ybUxvY2F0aW9uKCksIDAsIDAsIHdpZHRoU2NhbGVGYWN0b3IsIDEpKTsKLQogICAgIEdM
Qyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5z
YW1wbGVyTG9jYXRpb24oKSwgMCkpOwogCiAgICAgbGF5ZXJSZW5kZXJlci0+ZHJhd1RleHR1cmVk
UXVhZChkcmF3VHJhbnNmb3JtKCksIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgp
LCBkcmF3T3BhY2l0eSgpLCBsYXllclJlbmRlcmVyLT5zaGFyZWRHZW9tZXRyeVF1YWQoKSwKQEAg
LTE3MywyNiArMzAyLDE4IEBAIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhd1JHQkEoTGF5ZXJS
ZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKSBjb25zdAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLTEpOwogfQogCit2b2lkIENDVmlkZW9MYXllckltcGw6OmRyYXdS
R0JBKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikgY29uc3QKK3sKKyAgICBj
b25zdCBSR0JBUHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnZpZGVvTGF5ZXJSR0JB
UHJvZ3JhbSgpOworICAgIGNvbnN0IFRleHR1cmUmIHRleHR1cmUgPSBtX3RleHR1cmVzW1ZpZGVv
RnJhbWVDaHJvbWl1bTo6cmdiUGxhbmVdOworICAgIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IgPSBz
dGF0aWNfY2FzdDxmbG9hdD4odGV4dHVyZS5tX3Zpc2libGVTaXplLndpZHRoKCkpIC8gdGV4dHVy
ZS5tX3RleHR1cmUtPnNpemUoKS53aWR0aCgpOworICAgIGRyYXdDb21tb24obGF5ZXJSZW5kZXJl
ciwgcHJvZ3JhbSwgd2lkdGhTY2FsZUZhY3RvciwgdGV4dHVyZS5tX3RleHR1cmUtPnRleHR1cmVJ
ZCgpKTsKK30KKwogdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3TmF0aXZlVGV4dHVyZShMYXll
clJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpIGNvbnN0CiB7CiAgICAgY29uc3QgTmF0
aXZlVGV4dHVyZVByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT52aWRlb0xheWVyTmF0
aXZlVGV4dHVyZVByb2dyYW0oKTsKLSAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0
aWFsaXplZCgpKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5k
ZXJlci0+Y29udGV4dCgpOwotCi0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRl
eHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX25hdGl2ZVRl
eHR1cmVJZCkpOwotCi0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3Jh
bS0+cHJvZ3JhbSgpKSk7Ci0gICAgZmxvYXQgd2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0
PGZsb2F0PihtX25hdGl2ZVRleHR1cmVWaXNpYmxlU2l6ZS53aWR0aCgpKSAvIG1fbmF0aXZlVGV4
dHVyZVNpemUud2lkdGgoKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKHBy
b2dyYW0tPnZlcnRleFNoYWRlcigpLnRleFRyYW5zZm9ybUxvY2F0aW9uKCksIDAsIDAsIHdpZHRo
U2NhbGVGYWN0b3IsIDEpKTsKLQotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWko
cHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkpOwotCi0gICAg
bGF5ZXJSZW5kZXJlci0+ZHJhd1RleHR1cmVkUXVhZChkcmF3VHJhbnNmb3JtKCksIGJvdW5kcygp
LndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBkcmF3T3BhY2l0eSgpLCBsYXllclJlbmRlcmVy
LT5zaGFyZWRHZW9tZXRyeVF1YWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhh
TG9jYXRpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsKKyAg
ICBkcmF3Q29tbW9uKGxheWVyUmVuZGVyZXIsIHByb2dyYW0sIDEsIG1fbmF0aXZlVGV4dHVyZUlk
KTsKIH0KIAogdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRT
dHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5o
CmluZGV4IGU1MzE3YWQzNGRhZWZjYjUwNjExNmU5ZDM4MDhiZmE1ZjkyYWI3MzAuLmE1M2RhZmY0
YjhlNDlkYjc2MzIwOWJhYTI3ZDBjYjM5MzFmNGQ1ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5
ZXJJbXBsLmgKQEAgLTI2LDIxICsyNiwyMyBAQAogI2lmbmRlZiBDQ1ZpZGVvTGF5ZXJJbXBsX2gK
ICNkZWZpbmUgQ0NWaWRlb0xheWVySW1wbF9oCiAKLSNpbmNsdWRlICJQcm9ncmFtQmluZGluZy5o
IgorI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCiAjaW5jbHVkZSAiU2hhZGVyQ2hyb21pdW0u
aCIKICNpbmNsdWRlICJWaWRlb0ZyYW1lQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJWaWRlb0ZyYW1l
UHJvdmlkZXIuaCIKICNpbmNsdWRlICJWaWRlb0xheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJj
Yy9DQ0xheWVySW1wbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFZpZGVvRnJh
bWVQcm92aWRlcjsKK3RlbXBsYXRlPGNsYXNzIFZlcnRleFNoYWRlciwgY2xhc3MgRnJhZ21lbnRT
aGFkZXI+IGNsYXNzIFByb2dyYW1CaW5kaW5nOwogCi1jbGFzcyBDQ1ZpZGVvTGF5ZXJJbXBsIDog
cHVibGljIENDTGF5ZXJJbXBsIHsKK2NsYXNzIENDVmlkZW9MYXllckltcGwgOiBwdWJsaWMgQ0NM
YXllckltcGwKKyAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgVmlkZW9GcmFtZVByb3Zp
ZGVyOjpDbGllbnQgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDVmlkZW9MYXll
ckltcGw+IGNyZWF0ZShpbnQgaWQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NWaWRlb0xheWVy
SW1wbD4gY3JlYXRlKGludCBpZCwgVmlkZW9GcmFtZVByb3ZpZGVyKiBwcm92aWRlcikKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NWaWRlb0xheWVySW1wbChpZCkpOworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENDVmlkZW9MYXllckltcGwoaWQsIHByb3ZpZGVyKSk7
CiAgICAgfQogICAgIHZpcnR1YWwgfkNDVmlkZW9MYXllckltcGwoKTsKIApAQCAtNTIsMzYgKzU0
LDM3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRl
eHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKIAotICAgIHZvaWQgc2V0U2tpcHNEcmF3KGJv
b2wgc2tpcHNEcmF3KSB7IG1fc2tpcHNEcmF3ID0gc2tpcHNEcmF3OyB9Ci0gICAgdm9pZCBzZXRG
cmFtZUZvcm1hdChWaWRlb0ZyYW1lQ2hyb21pdW06OkZvcm1hdCBmb3JtYXQpIHsgbV9mcmFtZUZv
cm1hdCA9IGZvcm1hdDsgfQotICAgIHZvaWQgc2V0VGV4dHVyZShzaXplX3QsIFBsYXRmb3JtM0RP
YmplY3QgdGV4dHVyZUlkLCBjb25zdCBJbnRTaXplJiwgY29uc3QgSW50U2l6ZSYgdmlzaWJsZVNp
emUpOwotICAgIHZvaWQgc2V0TmF0aXZlVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJ
ZCwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFNpemUmIHZpc2libGVTaXplKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc3RvcFVzaW5nUHJvdmlkZXIoKTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBD
Q1ZpZGVvTGF5ZXJJbXBsKGludCk7CisgICAgZXhwbGljaXQgQ0NWaWRlb0xheWVySW1wbChpbnQs
IFZpZGVvRnJhbWVQcm92aWRlciopOwogCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5
cGVBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJWaWRlb0xheWVyIjsgfQogCi0gICAgc3RydWN0
IFRleHR1cmUgewotICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IGlkOwotICAgICAgICBJbnRTaXpl
IHNpemU7Ci0gICAgICAgIEludFNpemUgdmlzaWJsZVNpemU7Ci0gICAgfTsKLQorICAgIGJvb2wg
Y29weUZyYW1lVG9UZXh0dXJlcyhjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qLCBHQzNEZW51bSBm
b3JtYXQsIExheWVyUmVuZGVyZXJDaHJvbWl1bSopOworICAgIHZvaWQgY29weVBsYW5lVG9UZXh0
dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IHZvaWQqIHBsYW5lLCBpbnQgaW5kZXgp
OworICAgIGJvb2wgcmVzZXJ2ZVRleHR1cmVzKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSosIEdD
M0RlbnVtIGZvcm1hdCwgTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CiAgICAgdm9pZCBkcmF3WVVW
KExheWVyUmVuZGVyZXJDaHJvbWl1bSopIGNvbnN0OwogICAgIHZvaWQgZHJhd1JHQkEoTGF5ZXJS
ZW5kZXJlckNocm9taXVtKikgY29uc3Q7CiAgICAgdm9pZCBkcmF3TmF0aXZlVGV4dHVyZShMYXll
clJlbmRlcmVyQ2hyb21pdW0qKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBQcm9ncmFtPiB2
b2lkIGRyYXdDb21tb24oTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgUHJvZ3JhbSosIGZsb2F0IHdp
ZHRoU2NhbGVGYWN0b3IsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkKSBjb25zdDsKKworICAg
IE11dGV4IG1fcHJvdmlkZXJNdXRleDsgLy8gR3VhcmRzIG1fcHJvdmlkZXIgYmVsb3cuCisgICAg
VmlkZW9GcmFtZVByb3ZpZGVyKiBtX3Byb3ZpZGVyOwogCiAgICAgc3RhdGljIGNvbnN0IGZsb2F0
IHl1djJSR0JbOV07CiAgICAgc3RhdGljIGNvbnN0IGZsb2F0IHl1dkFkanVzdFszXTsKIAotICAg
IGJvb2wgbV9za2lwc0RyYXc7Ci0gICAgVmlkZW9GcmFtZUNocm9taXVtOjpGb3JtYXQgbV9mcmFt
ZUZvcm1hdDsKLSAgICBUZXh0dXJlIG1fdGV4dHVyZXNbM107CisgICAgc3RydWN0IFRleHR1cmUg
eworICAgICAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IG1fdGV4dHVyZTsKKyAgICAgICAgSW50
U2l6ZSBtX3Zpc2libGVTaXplOworICAgIH07CisgICAgZW51bSB7IE1heFBsYW5lcyA9IDMgfTsK
KyAgICBUZXh0dXJlIG1fdGV4dHVyZXNbTWF4UGxhbmVzXTsKKyAgICBpbnQgbV9wbGFuZXM7CiAK
ICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fbmF0aXZlVGV4dHVyZUlkOwogICAgIEludFNpemUgbV9u
YXRpdmVUZXh0dXJlU2l6ZTsKLSAgICBJbnRTaXplIG1fbmF0aXZlVGV4dHVyZVZpc2libGVTaXpl
OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVk
aWFQbGF5ZXJDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1l
ZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAKaW5kZXggOTkzNjFlZDk0MWFhNDYzMDZkNTY3YmQyM2Q4
ZGNkZWFkZjY1YTk5Ni4uZTI4YmUyYzhhYWEyMzZhZTQ5ZTY5Njc3MDlhMTYyYjc4ZDNiMjRmZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGll
bnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVBsYXll
ckNsaWVudEltcGwuY3BwCkBAIC02MiwyOSArNjIsNiBAQCBzdGF0aWMgUGFzc093blB0cjxXZWJN
ZWRpYVBsYXllcj4gY3JlYXRlV2ViTWVkaWFQbGF5ZXIoV2ViTWVkaWFQbGF5ZXJDbGllbnQqIGNs
aQogICAgIHJldHVybiBhZG9wdFB0cih3ZWJGcmFtZS0+Y2xpZW50KCktPmNyZWF0ZU1lZGlhUGxh
eWVyKHdlYkZyYW1lLCBjbGllbnQpKTsKIH0KIAotc3RhdGljIGJvb2wgaXNWaWRlb0ZyYW1lRm9y
bWF0T3BhcXVlKFdlYlZpZGVvRnJhbWU6OkZvcm1hdCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChm
b3JtYXQpIHsKLSAgICBjYXNlIFdlYlZpZGVvRnJhbWU6OkZvcm1hdEludmFsaWQ6Ci0gICAgY2Fz
ZSBXZWJWaWRlb0ZyYW1lOjpGb3JtYXRFbXB0eToKLSAgICBjYXNlIFdlYlZpZGVvRnJhbWU6OkZv
cm1hdFJHQkE6Ci0gICAgY2FzZSBXZWJWaWRlb0ZyYW1lOjpGb3JtYXROYXRpdmVUZXh0dXJlOgot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBXZWJWaWRlb0ZyYW1lOjpGb3JtYXRSR0I1
NTU6Ci0gICAgY2FzZSBXZWJWaWRlb0ZyYW1lOjpGb3JtYXRSR0I1NjU6Ci0gICAgY2FzZSBXZWJW
aWRlb0ZyYW1lOjpGb3JtYXRSR0IyNDoKLSAgICBjYXNlIFdlYlZpZGVvRnJhbWU6OkZvcm1hdFJH
QjMyOgotICAgIGNhc2UgV2ViVmlkZW9GcmFtZTo6Rm9ybWF0WVYxMjoKLSAgICBjYXNlIFdlYlZp
ZGVvRnJhbWU6OkZvcm1hdFlWMTY6Ci0gICAgY2FzZSBXZWJWaWRlb0ZyYW1lOjpGb3JtYXROVjEy
OgotICAgIGNhc2UgV2ViVmlkZW9GcmFtZTo6Rm9ybWF0QVNDSUk6Ci0gICAgY2FzZSBXZWJWaWRl
b0ZyYW1lOjpGb3JtYXRJNDIwOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBib29sIFdlYk1lZGlh
UGxheWVyQ2xpZW50SW1wbDo6bV9pc0VuYWJsZWQgPSBmYWxzZTsKIAogYm9vbCBXZWJNZWRpYVBs
YXllckNsaWVudEltcGw6OmlzRW5hYmxlZCgpCkBAIC0xMjQsMTAgKzEwMSwxMCBAQCBXZWJNZWRp
YVBsYXllciogV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjptZWRpYVBsYXllcigpIGNvbnN0CiAK
IFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6fldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbCgpCiB7
Ci0gICAgLy8gVmlkZW9MYXllckNocm9taXVtIG1heSBvdXRsaXZlIHRoaXMgb2JqZWN0IHNvIGNs
ZWFyIHRoZSBiYWNrIHBvaW50ZXIuCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQot
ICAgIGlmIChtX3ZpZGVvTGF5ZXIpCi0gICAgICAgIG1fdmlkZW9MYXllci0+cmVsZWFzZVByb3Zp
ZGVyKCk7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fY29tcG9zaXRpbmdNdXRleCk7CisgICAg
aWYgKG1fdmlkZW9GcmFtZVByb3ZpZGVyQ2xpZW50KQorICAgICAgICBtX3ZpZGVvRnJhbWVQcm92
aWRlckNsaWVudC0+c3RvcFVzaW5nUHJvdmlkZXIoKTsKICNlbmRpZgogfQogCkBAIC01OTMsMjEg
KzU3MCwyNyBAQCBib29sIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6YWNjZWxlcmF0ZWRSZW5k
ZXJpbmdJblVzZSgpCiAgICAgcmV0dXJuIG1fdmlkZW9MYXllciAmJiBtX3ZpZGVvTGF5ZXItPmxh
eWVyVHJlZUhvc3QoKTsKIH0KIAordm9pZCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnNldFZp
ZGVvRnJhbWVQcm92aWRlckNsaWVudChWaWRlb0ZyYW1lUHJvdmlkZXI6OkNsaWVudCogY2xpZW50
KQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2NvbXBvc2l0aW5nTXV0ZXgpOworICAgIG1f
dmlkZW9GcmFtZVByb3ZpZGVyQ2xpZW50ID0gY2xpZW50OworfQorCiBWaWRlb0ZyYW1lQ2hyb21p
dW0qIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6Z2V0Q3VycmVudEZyYW1lKCkKIHsKKyAgICBN
dXRleExvY2tlciBsb2NrZXIobV9jb21wb3NpdGluZ011dGV4KTsKICAgICBBU1NFUlQoIW1fY3Vy
cmVudFZpZGVvRnJhbWUpOwogICAgIGlmIChtX3dlYk1lZGlhUGxheWVyICYmICFtX2N1cnJlbnRW
aWRlb0ZyYW1lKSB7CiAgICAgICAgIFdlYlZpZGVvRnJhbWUqIHdlYmtpdFZpZGVvRnJhbWUgPSBt
X3dlYk1lZGlhUGxheWVyLT5nZXRDdXJyZW50RnJhbWUoKTsKICAgICAgICAgaWYgKHdlYmtpdFZp
ZGVvRnJhbWUpCiAgICAgICAgICAgICBtX2N1cnJlbnRWaWRlb0ZyYW1lID0gYWRvcHRQdHIobmV3
IFZpZGVvRnJhbWVDaHJvbWl1bUltcGwod2Via2l0VmlkZW9GcmFtZSkpOwotICAgICAgICBpZiAo
bV92aWRlb0xheWVyKQotICAgICAgICAgICAgbV92aWRlb0xheWVyLT5zZXRPcGFxdWUod2Via2l0
VmlkZW9GcmFtZSAmJiBpc1ZpZGVvRnJhbWVGb3JtYXRPcGFxdWUod2Via2l0VmlkZW9GcmFtZS0+
Zm9ybWF0KCkpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fY3VycmVudFZpZGVvRnJhbWUuZ2V0KCk7
CiB9CiAKIHZvaWQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpwdXRDdXJyZW50RnJhbWUoVmlk
ZW9GcmFtZUNocm9taXVtKiB2aWRlb0ZyYW1lKQogeworICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X2NvbXBvc2l0aW5nTXV0ZXgpOwogICAgIGlmICh2aWRlb0ZyYW1lICYmIHZpZGVvRnJhbWUgPT0g
bV9jdXJyZW50VmlkZW9GcmFtZSkgewogICAgICAgICBpZiAobV93ZWJNZWRpYVBsYXllcikgewog
ICAgICAgICAgICAgbV93ZWJNZWRpYVBsYXllci0+cHV0Q3VycmVudEZyYW1lKApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuaApp
bmRleCBmY2MxZGE1YzQzNzMyZjViOGQzNmQ4NTJmMzAzZjIwMTBlYjMwNGI1Li5kOTQxOWNmODdh
YmZlNjkyYzA1MWU1ZjAyNWRhMzcyYzVkMTdjOThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuaApAQCAtMTI5LDcgKzEy
OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGRyb3BwZWRGcmFtZUNvdW50KCkg
Y29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBhdWRpb0RlY29kZWRCeXRlQ291bnQoKSBjb25z
dDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHZpZGVvRGVjb2RlZEJ5dGVDb3VudCgpIGNvbnN0Owot
ICAgIAorCiAjaWYgRU5BQkxFKFdFQl9BVURJTykKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkF1ZGlv
U291cmNlUHJvdmlkZXIqIGF1ZGlvU291cmNlUHJvdmlkZXIoKTsKICNlbmRpZgpAQCAtMTM4LDYg
KzEzOCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZFJl
bmRlcmluZygpIGNvbnN0OwogCiAgICAgLy8gVmlkZW9GcmFtZVByb3ZpZGVyIG1ldGhvZHM6Cisg
ICAgdmlydHVhbCB2b2lkIHNldFZpZGVvRnJhbWVQcm92aWRlckNsaWVudChWaWRlb0ZyYW1lUHJv
dmlkZXI6OkNsaWVudCopOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6VmlkZW9GcmFtZUNocm9taXVt
KiBnZXRDdXJyZW50RnJhbWUoKTsKICAgICB2aXJ0dWFsIHZvaWQgcHV0Q3VycmVudEZyYW1lKFdl
YkNvcmU6OlZpZGVvRnJhbWVDaHJvbWl1bSopOwogI2VuZGlmCkBAIC0xNTgsNiArMTU5LDkgQEAg
cHJpdmF0ZToKICAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIHR5cGUsIGNvbnN0IFdURjo6U3Ry
aW5nJiBjb2RlY3MpOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBib29s
IGFjY2VsZXJhdGVkUmVuZGVyaW5nSW5Vc2UoKTsKKworICAgIE11dGV4IG1fY29tcG9zaXRpbmdN
dXRleDsgLy8gR3VhcmRzIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIG1haW4gdGhyZWFkIGFuZCBj
b21waXNpdGluZyB0aHJlYWQuCisgICAgVmlkZW9GcmFtZVByb3ZpZGVyOjpDbGllbnQqIG1fdmlk
ZW9GcmFtZVByb3ZpZGVyQ2xpZW50OwogI2VuZGlmCiAKICAgICBXZWJDb3JlOjpNZWRpYVBsYXll
ciogbV9tZWRpYVBsYXllcjsKQEAgLTE4OSwxMyArMTkzLDEzIEBAIHByaXZhdGU6CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBzZXRGb3JtYXQoc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGZsb2F0IHNh
bXBsZVJhdGUpOwogCiAgICAgICAgIHZvaWQgd3JhcChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3Zp
ZGVyQ2xpZW50KiBjbGllbnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0KLSAgICAgICAgCisKICAg
ICBwcml2YXRlOgogICAgICAgICBXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50KiBt
X2NsaWVudDsKICAgICB9OwogCiAgICAgLy8gQXVkaW9Tb3VyY2VQcm92aWRlckltcGwgd3JhcHMg
YSBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyLgotICAgIC8vIHByb3ZpZGVJbnB1dCgpIGNhbGxzIGlu
dG8gQ2hyb21pdW0gdG8gZ2V0IGEgcmVuZGVyZWQgYXVkaW8gc3RyZWFtLiAKKyAgICAvLyBwcm92
aWRlSW5wdXQoKSBjYWxscyBpbnRvIENocm9taXVtIHRvIGdldCBhIHJlbmRlcmVkIGF1ZGlvIHN0
cmVhbS4KIAogICAgIGNsYXNzIEF1ZGlvU291cmNlUHJvdmlkZXJJbXBsIDogcHVibGljIFdlYkNv
cmU6OkF1ZGlvU291cmNlUHJvdmlkZXIgewogICAgIHB1YmxpYzoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119621</attachid>
            <date>2011-12-16 09:34:12 -0800</date>
            <delta_ts>2011-12-16 10:15:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73043-20111216093411.patch</filename>
            <type>text/plain</type>
            <size>39007</size>
            <attacher name="Ami Fischman">fischman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNjU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWVjMTc4Nzg3N2U2N2U2
ZjhkODAxY2NjNzYzYmJiMjdhNzE5OGIxYi4uMjZiNmU4Mzc1YTQ0ZGQ0OGIwNmQxNzY2OWM3Mjkw
NzU2MDBjOWIxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDExLTEyLTE1ICBBbWkg
RmlzY2htYW4gIDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRml4IHRoZSBsaWZl
LWN5Y2xlIG9mIHZpZGVvIGZyYW1lcyBoYW5kbGVkIGJ5IFZpZGVvTGF5ZXJDaHJvbWl1bS9DQ1Zp
ZGVvTGF5ZXJJbXBsLgorICAgICAgICBWaWRlb0ZyYW1lUHJvdmlkZXI6OntnZXQscHV0fUN1cnJl
bnRGcmFtZSBwcm92aWRlIGxlYXNlIHNlbWFudGljcy4gIFByZXZpb3VzbHkKKyAgICAgICAgVmlk
ZW9MYXllckNocm9taXVtIHdvdWxkIGFjcXVpcmUgdGhlIGxlYXNlIGZvciB0aGUgZHVyYXRpb24g
b2YgY29weWluZyB0aGUgZnJhbWUsCisgICAgICAgIGV2ZW4gaWYgdGhhdCB3YXMgb25seSBhIHRl
eHR1cmUgSUQsIGFuZCBpbW1lZGlhdGVseSByZXR1cm4gdGhlIGxlYXNlLCB3aGlsZQorICAgICAg
ICBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3KCkgd291bGQgY29tZSBhbG9uZyBsYXRlciBhbmQgdXNl
IHRoZSAobm8tbG9uZ2VyIGxvY2tlZCkKKyAgICAgICAgdGV4dHVyZSBvcHRpbWlzdGljYWxseS4g
IFRoaXMgY2hhbmdlIG1ha2VzIGl0IHNvIHRoYXQgQ0NWaWRlb0xheWVySW1wbCBob2xkcworICAg
ICAgICB0aGUgZnJhbWUncyBsZWFzZSBmb3IgdGhlIGR1cmF0aW9uIG9mIGRyYXcoKSwgZ3VhcmFu
dGVlaW5nIHRoZSBmcmFtZSBpcyB2YWxpZCB0byByZWFkLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwNDMKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OlZpZGVvTGF5ZXJDaHJvbWl1bSk6
CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06On5WaWRlb0xheWVyQ2hyb21p
dW0pOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVy
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnJlbGVhc2VQcm92
aWRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNo
cm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRl
b0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpDQ1Zp
ZGVvTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6On5DQ1Zp
ZGVvTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OnNldFBy
b3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRWRkNGb3JtYXRUb0dDM0RGb3JtYXQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6ZHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpjb3B5RnJhbWVUb1RleHR1cmVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmNvcHlQbGFuZVRvVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpjb21wdXRlVmlzaWJsZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRl
b0xheWVySW1wbDo6cmVzZXJ2ZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9M
YXllckltcGw6OmRyYXdZVVYpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6
ZHJhd0NvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3UkdC
QSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3TmF0aXZlVGV4dHVy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVy
SW1wbC5oOgorCiAyMDExLTEyLTEyICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTAyNjQ4LgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwppbmRleCA4ZTRhMDcwNjMxNzMzOGE3NTNlYzQ2YmVlMjg4YTliMDFjZWZkYzk5
Li4zYTgyMzUzMmU0MjBiZjE5NDcwM2NjNWViMWFiODhmZGMzNDVmMThhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTEyLTE1ICBBbWkgRmlzY2htYW4g
IDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2ZXJ0IENMIDEwMjM4NyBiZWNh
dXNlIGl0IGlzIGluY29ycmVjdCB0byBjYWxsIHNldE9wYXF1ZSBmcm9tIGEgbm9uLW1haW4gdGhy
ZWFkCisgICAgICAgIChhbmQgZ2V0Q3VycmVudEZyYW1lKCkgY2FuIG5vdyBiZSBjYWxsZWQgZnJv
bSB0aGUgY29tcG9zaXRvciB0aHJlYWQgd2hlbgorICAgICAgICAtLWVuYWJsZS10aHJlYWRlZC1j
b21wb3NpdGluZyBpcyBzcGVjaWZpZWQpLiAgV2hlbiB0aGlzIGlzIGZpeGVkIGZvciByZWFsLCB0
aGUKKyAgICAgICAgb3BhY2l0eS1kZXRlcm1pbmF0aW9uIHNob3VsZCBwcm9iYWJseSBub3QgYmUg
cGVyLWZyYW1lIGJ1dCByYXRoZXIgYSBtZXRob2Qgb24KKyAgICAgICAgV2ViTWVkaWFQbGF5ZXJD
bGllbnQgdGhhdCB0aGUgcGlwZWxpbmUgY2FuIGNhbGwgdXAtZnJvbnQgKGFuZCBvbiB0aGUgbWFp
biB0aHJlYWQpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzMwNDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHNyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJNZWRpYVBsYXllckNsaWVudEltcGw6OmdldEN1cnJlbnRGcmFtZSk6CisKIDIwMTEtMTItMTIg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgV2ViS2l0IGNvZGUg
c2hvdWxkbid0IGJlIGNhbGxpbmcgYXBwbHlDb21tYW5kIGRpcmVjdGx5CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0ZyYW1lUHJvdmlk
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvRnJh
bWVQcm92aWRlci5oCmluZGV4IGM1OTZmODc2OTc2ZGIxYTAzOTY4NGU5ZGRmNmIxNzEwOGVmMGU0
YjAuLjNkNDNhOTBjMzdhNjM3YWNlN2NjNzMyMTc2M2RlNGEzOTc5OTQxZGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvRnJhbWVQcm92
aWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Zp
ZGVvRnJhbWVQcm92aWRlci5oCkBAIC0zOSw2ICszOSwxNCBAQCBjbGFzcyBWaWRlb0ZyYW1lUHJv
dmlkZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgflZpZGVvRnJhbWVQcm92aWRlcigpIHsgfQog
CisgICAgY2xhc3MgQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIC8vIFByb3ZpZGVyIHdp
bGwgY2FsbCB0aGlzIG1ldGhvZCB0byB0ZWxsIHRoZSBjbGllbnQgdG8gc3RvcCB1c2luZyBpdC4K
KyAgICAgICAgdmlydHVhbCB2b2lkIHN0b3BVc2luZ1Byb3ZpZGVyKCkgPSAwOworICAgIH07CisK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlkZW9GcmFtZVByb3ZpZGVyQ2xpZW50KENsaWVudCopID0g
MDsKKwogICAgIC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBWaWRlb0Zy
YW1lQ2hyb21pdW0sIHdoaWNoIGlzCiAgICAgLy8gdGhlIFdlYkNvcmUgd3JhcHBlciBmb3IgYSB2
aWRlbyBmcmFtZSBpbiBDaHJvbWl1bS4gZ2V0Q3VycmVudEZyYW1lKCkKICAgICAvLyBwbGFjZXMg
YSBsb2NrIG9uIHRoZSBmcmFtZSBpbiBDaHJvbWl1bS4gQ2FsbHMgdG8gdGhpcyBtZXRob2Qgc2hv
dWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAppbmRleCBlYzkzZjE2OGRhMTRlYTQx
ZTNjMTZkZjZkN2M0OWJlZTQ1MTNlYWNlLi5iZTM1YjZlZjAyMWYwY2E1Zjc5MzU2MjNlNDBjMWU2
ODAwMjk2N2JhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTMyLDE1ICsz
Miw2IEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaW5jbHVkZSAiVmlk
ZW9MYXllckNocm9taXVtLmgiCi0KLSNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJWaWRlb0Zy
YW1lQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJWaWRlb0ZyYW1lUHJvdmlkZXIuaCIKLSNpbmNsdWRl
ICJjYy9DQ0xheWVySW1wbC5oIgotI2luY2x1ZGUgImNjL0NDVGV4dHVyZVVwZGF0ZXIuaCIKICNp
bmNsdWRlICJjYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTUzLDIzNSArNDQsMjQgQEAgUGFzc1JlZlB0cjxWaWRlb0xheWVyQ2hyb21pdW0+IFZpZGVvTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWcKIAogVmlkZW9MYXllckNo
cm9taXVtOjpWaWRlb0xheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSwgVmlk
ZW9GcmFtZVByb3ZpZGVyKiBwcm92aWRlcikKICAgICA6IExheWVyQ2hyb21pdW0oZGVsZWdhdGUp
Ci0gICAgLCBtX3NraXBzRHJhdyh0cnVlKQotICAgICwgbV9mcmFtZUZvcm1hdChWaWRlb0ZyYW1l
Q2hyb21pdW06OkludmFsaWQpCiAgICAgLCBtX3Byb3ZpZGVyKHByb3ZpZGVyKQotICAgICwgbV9w
bGFuZXMoMCkKLSAgICAsIG1fbmF0aXZlVGV4dHVyZUlkKDApCiB7CisgICAgQVNTRVJUKG1fcHJv
dmlkZXIpOwogfQogCiBWaWRlb0xheWVyQ2hyb21pdW06On5WaWRlb0xheWVyQ2hyb21pdW0oKQog
ewotICAgIGNsZWFudXBSZXNvdXJjZXMoKTsKKyAgICBBU1NFUlQoIW1fcHJvdmlkZXIpOwogfQog
CiBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBWaWRlb0xheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5
ZXJJbXBsKCkKIHsKLSAgICByZXR1cm4gQ0NWaWRlb0xheWVySW1wbDo6Y3JlYXRlKG1fbGF5ZXJJ
ZCk7Ci19Ci0KLXZvaWQgVmlkZW9MYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKLXsK
LSAgICBMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IE1heFBsYW5lczsgKytpKQotICAgICAgICBtX3RleHR1cmVzW2ldLm1fdGV4
dHVyZS5jbGVhcigpOwotfQotCi12b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9z
aXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgQ0NUZXh0dXJlVXBkYXRl
ciYgdXBkYXRlcikKLXsKLSAgICBpZiAoIW1fZGVsZWdhdGUgfHwgIW1fcHJvdmlkZXIgfHwgIWRy
YXdzQ29udGVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fbmVlZHNEaXNwbGF5
ICYmIHRleHR1cmVzVmFsaWQoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gMDsg
cGxhbmUgPCBtX3BsYW5lczsgcGxhbmUrKykgewotICAgICAgICAgICAgTWFuYWdlZFRleHR1cmUq
IHRleCA9IG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS5nZXQoKTsKLSAgICAgICAgICAgIGlm
ICghdGV4LT5yZXNlcnZlKHRleC0+c2l6ZSgpLCB0ZXgtPmZvcm1hdCgpKSkgewotICAgICAgICAg
ICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9wbGFu
ZXMgPSAwOwotICAgIG1fc2tpcHNEcmF3ID0gZmFsc2U7Ci0KLSAgICBWaWRlb0ZyYW1lQ2hyb21p
dW0qIGZyYW1lID0gbV9wcm92aWRlci0+Z2V0Q3VycmVudEZyYW1lKCk7Ci0gICAgaWYgKCFmcmFt
ZSkgewotICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7Ci0gICAgICAgIG1fcHJvdmlkZXItPnB1
dEN1cnJlbnRGcmFtZShmcmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2Zy
YW1lRm9ybWF0ID0gZnJhbWUtPmZvcm1hdCgpOwotICAgIEdDM0RlbnVtIHRleHR1cmVGb3JtYXQg
PSBkZXRlcm1pbmVUZXh0dXJlRm9ybWF0KGZyYW1lKTsKLSAgICBpZiAodGV4dHVyZUZvcm1hdCA9
PSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSkgewotICAgICAgICAvLyBGSVhNRTog
SW1wbGVtZW50IG90aGVyIHBhdGhzLgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAg
ICBtX3NraXBzRHJhdyA9IHRydWU7Ci0gICAgICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFt
ZShmcmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAodGV4dHVyZUZvcm1h
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCkgewotICAgICAgICBtX25hdGl2ZVRl
eHR1cmVJZCA9IGZyYW1lLT50ZXh0dXJlSWQoKTsKLSAgICAgICAgbV9uYXRpdmVUZXh0dXJlU2l6
ZSA9IEludFNpemUoZnJhbWUtPndpZHRoKCksIGZyYW1lLT5oZWlnaHQoKSk7Ci0gICAgICAgIG1f
bmF0aXZlVGV4dHVyZVZpc2libGVTaXplID0gSW50U2l6ZShmcmFtZS0+d2lkdGgoKSwgZnJhbWUt
PmhlaWdodCgpKTsKLSAgICAgICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKLSAgICAgICAgbV9w
cm92aWRlci0+cHV0Q3VycmVudEZyYW1lKGZyYW1lKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIEFsbG9jYXRlIHRleHR1cmVzIGZvciBwbGFuZXMgaWYgdGhleSBhcmUgbm90IGFs
bG9jYXRlZCBhbHJlYWR5LCBvcgotICAgIC8vIHJlYWxsb2NhdGUgdGV4dHVyZXMgdGhhdCBhcmUg
dGhlIHdyb25nIHNpemUgZm9yIHRoZSBmcmFtZS4KLSAgICBib29sIHRleHR1cmVzUmVzZXJ2ZWQg
PSByZXNlcnZlVGV4dHVyZXMoZnJhbWUsIHRleHR1cmVGb3JtYXQpOwotICAgIGlmICghdGV4dHVy
ZXNSZXNlcnZlZCkgewotICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7Ci0gICAgICAgIG1fcHJv
dmlkZXItPnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBVcGRhdGUgdGV4dHVyZSBwbGFuZXMuCi0gICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9
IDA7IHBsYW5lIDwgZnJhbWUtPnBsYW5lcygpOyBwbGFuZSsrKSB7Ci0gICAgICAgIFRleHR1cmUm
IHRleHR1cmUgPSBtX3RleHR1cmVzW3BsYW5lXTsKLSAgICAgICAgQVNTRVJUKHRleHR1cmUubV90
ZXh0dXJlKTsKLSAgICAgICAgQVNTRVJUKGZyYW1lLT5yZXF1aXJlZFRleHR1cmVTaXplKHBsYW5l
KSA9PSB0ZXh0dXJlLm1fdGV4dHVyZS0+c2l6ZSgpKTsKLSAgICAgICAgdXBkYXRlVGV4dHVyZShj
b250ZXh0LCB1cGRhdGVyLmFsbG9jYXRvcigpLCB0ZXh0dXJlLCBmcmFtZS0+ZGF0YShwbGFuZSkp
OwotICAgIH0KLQotICAgIG1fcGxhbmVzID0gZnJhbWUtPnBsYW5lcygpOwotICAgIEFTU0VSVCht
X3BsYW5lcyA8PSBNYXhQbGFuZXMpOwotCi0gICAgbV91cGRhdGVSZWN0ID0gRmxvYXRSZWN0KEZs
b2F0UG9pbnQoKSwgYm91bmRzKCkpOwotICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7Ci0KLSAg
ICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJhbWUoZnJhbWUpOwotfQotCi12b2lkIFZpZGVvTGF5
ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCi17Ci0gICAg
TGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhsYXllcik7Ci0KLSAgICBDQ1ZpZGVvTGF5
ZXJJbXBsKiB2aWRlb0xheWVyID0gc3RhdGljX2Nhc3Q8Q0NWaWRlb0xheWVySW1wbCo+KGxheWVy
KTsKLSAgICB2aWRlb0xheWVyLT5zZXRTa2lwc0RyYXcobV9za2lwc0RyYXcpOwotICAgIHZpZGVv
TGF5ZXItPnNldEZyYW1lRm9ybWF0KG1fZnJhbWVGb3JtYXQpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX3BsYW5lczsgKytpKSB7Ci0gICAgICAgIGlmICghbV90ZXh0dXJlc1tpXS5t
X3RleHR1cmUpIHsKLSAgICAgICAgICAgIHZpZGVvTGF5ZXItPnNldFNraXBzRHJhdyh0cnVlKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHZpZGVvTGF5ZXItPnNldFRl
eHR1cmUoaSwgbV90ZXh0dXJlc1tpXS5tX3RleHR1cmUtPnRleHR1cmVJZCgpLCBtX3RleHR1cmVz
W2ldLm1fdGV4dHVyZS0+c2l6ZSgpLCBtX3RleHR1cmVzW2ldLm1fdmlzaWJsZVNpemUpOwotICAg
IH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3BsYW5lczsgaSA8IE1heFBsYW5lczsgKytpKQot
ICAgICAgICB2aWRlb0xheWVyLT5zZXRUZXh0dXJlKGksIDAsIEludFNpemUoKSwgSW50U2l6ZSgp
KTsKLSAgICBpZiAobV9mcmFtZUZvcm1hdCA9PSBWaWRlb0ZyYW1lQ2hyb21pdW06Ok5hdGl2ZVRl
eHR1cmUpCi0gICAgICAgIHZpZGVvTGF5ZXItPnNldE5hdGl2ZVRleHR1cmUobV9uYXRpdmVUZXh0
dXJlSWQsIG1fbmF0aXZlVGV4dHVyZVNpemUsIG1fbmF0aXZlVGV4dHVyZVZpc2libGVTaXplKTsK
LX0KLQotdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3QoQ0NMYXllclRy
ZWVIb3N0KiBob3N0KQotewotICAgIGlmIChob3N0ICYmIGxheWVyVHJlZUhvc3QoKSAhPSBob3N0
KSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBNYXhQbGFuZXM7ICsraSkgewot
ICAgICAgICAgICAgbV90ZXh0dXJlc1tpXS5tX3Zpc2libGVTaXplID0gSW50U2l6ZSgpOwotICAg
ICAgICAgICAgbV90ZXh0dXJlc1tpXS5tX3RleHR1cmUgPSBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRl
KGhvc3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBMYXllckNocm9taXVtOjpzZXRMYXllclRyZWVIb3N0KGhvc3QpOwotfQotCi1HQzNEZW51bSBW
aWRlb0xheWVyQ2hyb21pdW06OmRldGVybWluZVRleHR1cmVGb3JtYXQoY29uc3QgVmlkZW9GcmFt
ZUNocm9taXVtKiBmcmFtZSkKLXsKLSAgICBzd2l0Y2ggKGZyYW1lLT5mb3JtYXQoKSkgewotICAg
IGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpZVjEyOgotICAgIGNhc2UgVmlkZW9GcmFtZUNocm9t
aXVtOjpZVjE2OgotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRTsK
LSAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6UkdCQToKLSAgICAgICAgcmV0dXJuIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBOwotICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpOYXRpdmVU
ZXh0dXJlOgotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRTsKLX0KLQotYm9vbCBWaWRlb0xheWVyQ2hyb21pdW06OnRl
eHR1cmVzVmFsaWQoKQotewotICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBwbGFuZSA8IG1f
cGxhbmVzOyBwbGFuZSsrKSB7Ci0gICAgICAgIE1hbmFnZWRUZXh0dXJlKiB0ZXggPSBtX3RleHR1
cmVzW3BsYW5lXS5tX3RleHR1cmUuZ2V0KCk7Ci0gICAgICAgIGlmICghdGV4LT5pc1ZhbGlkKHRl
eC0+c2l6ZSgpLCB0ZXgtPmZvcm1hdCgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmlkZW9MYXllckNocm9taXVtOjpyZXNl
cnZlVGV4dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSwgR0MzRGVudW0gdGV4
dHVyZUZvcm1hdCkKLXsKLSAgICBBU1NFUlQobGF5ZXJUcmVlSG9zdCgpKTsKLSAgICBBU1NFUlQo
ZnJhbWUpOwotICAgIEFTU0VSVCh0ZXh0dXJlRm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFKTsKLQotICAgIGludCBtYXhUZXh0dXJlU2l6ZSA9IGxheWVyVHJlZUhvc3Qo
KS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplOwotCi0gICAgZm9y
ICh1bnNpZ25lZCBwbGFuZSA9IDA7IHBsYW5lIDwgZnJhbWUtPnBsYW5lcygpOyBwbGFuZSsrKSB7
Ci0gICAgICAgIEludFNpemUgcmVxdWlyZWRUZXh0dXJlU2l6ZSA9IGZyYW1lLT5yZXF1aXJlZFRl
eHR1cmVTaXplKHBsYW5lKTsKLQotICAgICAgICAvLyBJZiB0aGUgcmVuZGVyZXIgY2Fubm90IGhh
bmRsZSB0aGlzIGxhcmdlIG9mIGEgdGV4dHVyZSwgcmV0dXJuIGZhbHNlLgotICAgICAgICAvLyBG
SVhNRTogUmVtb3ZlIHRoaXMgdGVzdCB3aGVuIHRpbGVkIGxheWVycyBhcmUgaW1wbGVtZW50ZWQu
Ci0gICAgICAgIGlmIChyZXF1aXJlZFRleHR1cmVTaXplLmlzWmVybygpIHx8IHJlcXVpcmVkVGV4
dHVyZVNpemUud2lkdGgoKSA+IG1heFRleHR1cmVTaXplIHx8IHJlcXVpcmVkVGV4dHVyZVNpemUu
aGVpZ2h0KCkgPiBtYXhUZXh0dXJlU2l6ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICBpZiAoIW1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBpZiAobV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlLT5z
aXplKCkgIT0gcmVxdWlyZWRUZXh0dXJlU2l6ZSkKLSAgICAgICAgICAgIG1fdGV4dHVyZXNbcGxh
bmVdLm1fdmlzaWJsZVNpemUgPSBjb21wdXRlVmlzaWJsZVNpemUoZnJhbWUsIHBsYW5lKTsKLQot
ICAgICAgICBtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUtPnJlc2VydmUocmVxdWlyZWRUZXh0
dXJlU2l6ZSwgdGV4dHVyZUZvcm1hdCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LUludFNpemUgVmlkZW9MYXllckNocm9taXVtOjpjb21wdXRlVmlzaWJsZVNpemUoY29uc3QgVmlk
ZW9GcmFtZUNocm9taXVtKiBmcmFtZSwgdW5zaWduZWQgcGxhbmUpCi17Ci0gICAgaW50IHZpc2li
bGVXaWR0aCA9IGZyYW1lLT53aWR0aChwbGFuZSk7Ci0gICAgaW50IHZpc2libGVIZWlnaHQgPSBm
cmFtZS0+aGVpZ2h0KHBsYW5lKTsKLSAgICAvLyBXaGVuIHRoZXJlIGFyZSBkZWFkIHBpeGVscyBh
dCB0aGUgZWRnZSBvZiB0aGUgdGV4dHVyZSwgZGVjcmVhc2UKLSAgICAvLyB0aGUgZnJhbWUgd2lk
dGggYnkgMSB0byBwcmV2ZW50IHRoZSByaWdodG1vc3QgcGl4ZWxzIGZyb20KLSAgICAvLyBpbnRl
cnBvbGF0aW5nIHdpdGggdGhlIGRlYWQgcGl4ZWxzLgotICAgIGlmIChmcmFtZS0+aGFzUGFkZGlu
Z0J5dGVzKHBsYW5lKSkKLSAgICAgICAgLS12aXNpYmxlV2lkdGg7Ci0KLSAgICAvLyBJbiBZVjEy
LCBldmVyeSAyeDIgc3F1YXJlIG9mIFkgdmFsdWVzIGNvcnJlc3BvbmRzIHRvIG9uZSBVIGFuZAot
ICAgIC8vIG9uZSBWIHZhbHVlLiBJZiB3ZSBkZWNyZWFzZSB0aGUgd2lkdGggb2YgdGhlIFVWIHBs
YW5lLCB3ZSBtdXN0IGRlY3JlYXNlIHRoZQotICAgIC8vIHdpZHRoIG9mIHRoZSBZIHRleHR1cmUg
YnkgMiBmb3IgcHJvcGVyIGFsaWdubWVudC4gVGhpcyBtdXN0IGhhcHBlbgotICAgIC8vIGFsd2F5
cywgZXZlbiBpZiBZJ3MgdGV4dHVyZSBkb2VzIG5vdCBoYXZlIHBhZGRpbmcgYnl0ZXMuCi0gICAg
aWYgKHBsYW5lID09IFZpZGVvRnJhbWVDaHJvbWl1bTo6eVBsYW5lICYmIGZyYW1lLT5mb3JtYXQo
KSA9PSBWaWRlb0ZyYW1lQ2hyb21pdW06OllWMTIpIHsKLSAgICAgICAgaWYgKGZyYW1lLT5oYXNQ
YWRkaW5nQnl0ZXMoVmlkZW9GcmFtZUNocm9taXVtOjp1UGxhbmUpKSB7Ci0gICAgICAgICAgICBp
bnQgb3JpZ2luYWxXaWR0aCA9IGZyYW1lLT53aWR0aChwbGFuZSk7Ci0gICAgICAgICAgICB2aXNp
YmxlV2lkdGggPSBvcmlnaW5hbFdpZHRoIC0gMjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiBJbnRTaXplKHZpc2libGVXaWR0aCwgdmlzaWJsZUhlaWdodCk7Ci19Ci0KLXZvaWQgVmlk
ZW9MYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IHZv
aWQqIGRhdGEpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGNvbnRleHQpOwotICAgIEFTU0VSVCh0ZXh0
dXJlLm1fdGV4dHVyZSk7Ci0KLSAgICB0ZXh0dXJlLm1fdGV4dHVyZS0+YmluZFRleHR1cmUoY29u
dGV4dCwgYWxsb2NhdG9yKTsKLQotICAgIEdDM0RlbnVtIGZvcm1hdCA9IHRleHR1cmUubV90ZXh0
dXJlLT5mb3JtYXQoKTsKLSAgICBJbnRTaXplIGRpbWVuc2lvbnMgPSB0ZXh0dXJlLm1fdGV4dHVy
ZS0+c2l6ZSgpOwotCi0gICAgdm9pZCogbWVtID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hy
b21pdW0qPihjb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpLT5tYXBUZXhTdWJJbWFnZTJEQ0hST01J
VU0oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDAsIDAsIGRpbWVuc2lvbnMud2lk
dGgoKSwgZGltZW5zaW9ucy5oZWlnaHQoKSwgZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURSwgRXh0ZW5zaW9uczNEQ2hyb21pdW06OldSSVRFX09OTFkpOwotICAgIGlmICht
ZW0pIHsKLSAgICAgICAgbWVtY3B5KG1lbSwgZGF0YSwgZGltZW5zaW9ucy53aWR0aCgpICogZGlt
ZW5zaW9ucy5oZWlnaHQoKSk7Ci0gICAgICAgIEdMQyhjb250ZXh0LCBzdGF0aWNfY2FzdDxFeHRl
bnNpb25zM0RDaHJvbWl1bSo+KGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKSktPnVubWFwVGV4U3Vi
SW1hZ2UyRENIUk9NSVVNKG1lbSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIG1hcFRl
eFN1YkltYWdlMkRDSFJPTUlVTSBmYWlscywgdGhlbiBkbyB0aGUgc2xvd2VyIHRleFN1YkltYWdl
MkQKLSAgICAgICAgLy8gdXBsb2FkLiBUaGlzIGRvZXMgdHdpY2UgdGhlIGNvcGllcyBhcyBtYXBU
ZXhTdWJJbWFnZTJEQ0hST01JVU0sIG9uZQotICAgICAgICAvLyBpbiB0aGUgY29tbWFuZCBidWZm
ZXIgYW5kIGFub3RoZXIgdG8gdGhlIHRleHR1cmUuCi0gICAgICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAwLCAw
LCBkaW1lbnNpb25zLndpZHRoKCksIGRpbWVuc2lvbnMuaGVpZ2h0KCksIGZvcm1hdCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGRhdGEpKTsKLSAgICB9CisgICAgUmVmUHRyPEND
VmlkZW9MYXllckltcGw+IHJldCA9IENDVmlkZW9MYXllckltcGw6OmNyZWF0ZShtX2xheWVySWQs
IG1fcHJvdmlkZXIpOworICAgIG1fcHJvdmlkZXIgPSAwOworICAgIHJldHVybiByZXQ7CiB9CiAK
LXZvaWQgVmlkZW9MYXllckNocm9taXVtOjpyZWxlYXNlUHJvdmlkZXIoKQordm9pZCBWaWRlb0xh
eWVyQ2hyb21pdW06OnN0b3BVc2luZ1Byb3ZpZGVyKCkKIHsKICAgICBtX3Byb3ZpZGVyID0gMDsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1ZpZGVvTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmgKaW5kZXggNTE2YzhkMzg0N2MyYWRiNjRjNWJi
ZWZiN2M5OWNhYjVmNWFmYWJhMy4uM2ZkNTcyNmI3OWU5OGU3NzIzOTFjYTFkMWE4MTQwNzhjOGMw
ZjkwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVmlkZW9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmgKQEAgLTM1LDEzICszNSwxNSBAQAog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAogI2luY2x1ZGUgIkxheWVyQ2hyb21p
dW0uaCIKLSNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgogI2luY2x1ZGUgIlZpZGVvRnJhbWVQ
cm92aWRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDVmlkZW9MYXllcklt
cGw7CisKIC8vIEEgTGF5ZXIgdGhhdCBjb250YWlucyBhIFZpZGVvIGVsZW1lbnQuCi1jbGFzcyBW
aWRlb0xheWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitjbGFzcyBWaWRlb0xh
eWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bQorICAgICAgICAgICAgICAgICAgICAg
ICAgICwgcHVibGljIFZpZGVvRnJhbWVQcm92aWRlcjo6Q2xpZW50IHsKIHB1YmxpYzoKIAogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFZpZGVvTGF5ZXJDaHJvbWl1bT4gY3JlYXRlKENDTGF5ZXJEZWxl
Z2F0ZSogPSAwLApAQCAtNTAsNDUgKzUyLDE0IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlQ0NMYXllckltcGwoKTsKIAotICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NUZXh0
dXJlVXBkYXRlciYpOwogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CiAKLSAgICB2b2lkIHJlbGVhc2VQcm92aWRlcigpOwotCi0gICAgdmlydHVh
bCB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqKTsKLQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdCopOwotCi1wcm90ZWN0ZWQ6Ci0gICAg
dmlydHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFVz
aW5nUHJvdmlkZXIoKTsKIAogcHJpdmF0ZToKLSAgICBzdHJ1Y3QgVGV4dHVyZSB7Ci0gICAgICAg
IEludFNpemUgbV92aXNpYmxlU2l6ZTsKLSAgICAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBt
X3RleHR1cmU7Ci0gICAgfTsKLQogICAgIFZpZGVvTGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdh
dGUqLCBWaWRlb0ZyYW1lUHJvdmlkZXIqKTsKIAotICAgIHN0YXRpYyBHQzNEZW51bSBkZXRlcm1p
bmVUZXh0dXJlRm9ybWF0KGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSopOwotICAgIHN0YXRpYyBJ
bnRTaXplIGNvbXB1dGVWaXNpYmxlU2l6ZShjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qLCB1bnNp
Z25lZCBwbGFuZSk7Ci0gICAgYm9vbCB0ZXh0dXJlc1ZhbGlkKCk7Ci0gICAgYm9vbCByZXNlcnZl
VGV4dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiwgR0MzRGVudW0gdGV4dHVyZUZvcm1h
dCk7Ci0gICAgdm9pZCB1cGRhdGVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFs
bG9jYXRvciosIFRleHR1cmUmLCBjb25zdCB2b2lkKikgY29uc3Q7Ci0KLSAgICB2b2lkIHJlc2V0
RnJhbWVQYXJhbWV0ZXJzKCk7Ci0KLSAgICBib29sIG1fc2tpcHNEcmF3OwotICAgIFZpZGVvRnJh
bWVDaHJvbWl1bTo6Rm9ybWF0IG1fZnJhbWVGb3JtYXQ7Ci0gICAgVmlkZW9GcmFtZVByb3ZpZGVy
KiBtX3Byb3ZpZGVyOwotCi0gICAgZW51bSB7IE1heFBsYW5lcyA9IDMgfTsKLSAgICBUZXh0dXJl
IG1fdGV4dHVyZXNbTWF4UGxhbmVzXTsKLSAgICB1bnNpZ25lZCBtX3BsYW5lczsKLQotICAgIHVu
c2lnbmVkIG1fbmF0aXZlVGV4dHVyZUlkOwotICAgIEludFNpemUgbV9uYXRpdmVUZXh0dXJlU2l6
ZTsKLSAgICBJbnRTaXplIG1fbmF0aXZlVGV4dHVyZVZpc2libGVTaXplOworICAgIFZpZGVvRnJh
bWVQcm92aWRlciogbV9wcm92aWRlcjsgLy8gT25seSBwb3B1bGF0ZWQgYmV0d2VlbiBjb25zdHJ1
Y3Rpb24gYW5kIGNyZWF0ZUNDTGF5ZXJJbXBsIGJlaW5nIGNhbGxlZC4KIH07CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlk
ZW9MYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKaW5kZXggNmIzN2U4NmE2Y2U2OGQ1MWJhNTJjYTQ4
YzIzYzZmNzRmNDU0Y2VjOS4uNjA5MzUxMGJjYjRjOWQ0YWFkODFmMWE0NzQxMzVhMWUzNDA3ZDk0
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKQEAgLTI5LDggKzI5LDEwIEBA
CiAKICNpbmNsdWRlICJjYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgiCiAKKyNpbmNsdWRlICJFeHRlbnNp
b25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVk
ZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSAiUHJvZ3JhbUJpbmRpbmcuaCIK
ICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTU5LDc4ICs2MSwyMDcgQEAgY29uc3Qg
ZmxvYXQgQ0NWaWRlb0xheWVySW1wbDo6eXV2QWRqdXN0WzNdID0gewogICAgIC0wLjVmLAogfTsK
IAotQ0NWaWRlb0xheWVySW1wbDo6Q0NWaWRlb0xheWVySW1wbChpbnQgaWQpCitDQ1ZpZGVvTGF5
ZXJJbXBsOjpDQ1ZpZGVvTGF5ZXJJbXBsKGludCBpZCwgVmlkZW9GcmFtZVByb3ZpZGVyKiBwcm92
aWRlcikKICAgICA6IENDTGF5ZXJJbXBsKGlkKQorICAgICwgbV9wcm92aWRlcihwcm92aWRlcikK
IHsKKyAgICBwcm92aWRlci0+c2V0VmlkZW9GcmFtZVByb3ZpZGVyQ2xpZW50KHRoaXMpOwogfQog
CiBDQ1ZpZGVvTGF5ZXJJbXBsOjp+Q0NWaWRlb0xheWVySW1wbCgpCiB7CisgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKG1fcHJvdmlkZXJNdXRleCk7CisgICAgQVNTRVJUKCFtX3Byb3ZpZGVyKTsgLy8g
Q2xlYXJlZCBkdXJpbmcgVmlkZW9MYXllckNocm9taXVtOjpyZWxlYXNlUHJvdmlkZXIoKS4KKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTWF4UGxhbmVzOyArK2kpCisgICAgICAgIG1fdGV4
dHVyZXNbaV0ubV90ZXh0dXJlLmNsZWFyKCk7CiAgICAgY2xlYW51cFJlc291cmNlcygpOwogfQog
Ci12b2lkIENDVmlkZW9MYXllckltcGw6OnNldFRleHR1cmUoc2l6ZV90IGluZGV4LCBQbGF0Zm9y
bTNET2JqZWN0IHRleHR1cmVJZCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgSW50U2l6ZSYg
dmlzaWJsZVNpemUpCit2b2lkIENDVmlkZW9MYXllckltcGw6OnN0b3BVc2luZ1Byb3ZpZGVyKCkK
IHsKLSAgICBBU1NFUlQoaW5kZXggPCAzKTsKLSAgICBtX3RleHR1cmVzW2luZGV4XS5pZCA9IHRl
eHR1cmVJZDsKLSAgICBtX3RleHR1cmVzW2luZGV4XS5zaXplID0gc2l6ZTsKLSAgICBtX3RleHR1
cmVzW2luZGV4XS52aXNpYmxlU2l6ZSA9IHZpc2libGVTaXplOworICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX3Byb3ZpZGVyTXV0ZXgpOworICAgIG1fcHJvdmlkZXIgPSAwOwogfQogCi12b2lkIEND
VmlkZW9MYXllckltcGw6OnNldE5hdGl2ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJl
SWQsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIHZpc2libGVTaXplKQorLy8g
Q29udmVydCBWaWRlb0ZyYW1lQ2hyb21pdW06OkZvcm1hdCB0byBHcmFwaGljc0NvbnRleHQzRCdz
IGZvcm1hdCBlbnVtIHZhbHVlcy4KK3N0YXRpYyBHQzNEZW51bSBjb252ZXJ0VkZDRm9ybWF0VG9H
QzNERm9ybWF0KFZpZGVvRnJhbWVDaHJvbWl1bTo6Rm9ybWF0IHZmY0Zvcm1hdCkKIHsKLSAgICBt
X25hdGl2ZVRleHR1cmVJZCA9IHRleHR1cmVJZDsKLSAgICBtX25hdGl2ZVRleHR1cmVTaXplID0g
c2l6ZTsKLSAgICBtX25hdGl2ZVRleHR1cmVWaXNpYmxlU2l6ZSA9IHZpc2libGVTaXplOworICAg
IHN3aXRjaCAodmZjRm9ybWF0KSB7CisgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OllWMTI6
CisgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OllWMTY6CisgICAgICAgIHJldHVybiBHcmFw
aGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOworICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpS
R0JBOgorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CisgICAgY2FzZSBW
aWRlb0ZyYW1lQ2hyb21pdW06Ok5hdGl2ZVRleHR1cmU6CisgICAgICAgIHJldHVybiBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRDsKKyAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6SW52
YWxpZDoKKyAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6UkdCNTU1OgorICAgIGNhc2UgVmlk
ZW9GcmFtZUNocm9taXVtOjpSR0I1NjU6CisgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OlJH
QjI0OgorICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpSR0IzMjoKKyAgICBjYXNlIFZpZGVv
RnJhbWVDaHJvbWl1bTo6TlYxMjoKKyAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6RW1wdHk6
CisgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OkFTQ0lJOgorICAgIGNhc2UgVmlkZW9GcmFt
ZUNocm9taXVtOjpJNDIwOgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KKyAgICBy
ZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUU7CiB9CiAKIHZvaWQgQ0NWaWRl
b0xheWVySW1wbDo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCiB7
CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIAotICAgIGlmIChtX3NraXBz
RHJhdykKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9wcm92aWRlck11dGV4KTsKKworICAgIGlm
ICghbV9wcm92aWRlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3dpdGNoIChtX2ZyYW1lRm9y
bWF0KSB7Ci0gICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OllWMTI6Ci0gICAgY2FzZSBWaWRl
b0ZyYW1lQ2hyb21pdW06OllWMTY6CisgICAgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSA9IG1f
cHJvdmlkZXItPmdldEN1cnJlbnRGcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJl
dHVybjsKKyAgICBHQzNEZW51bSBmb3JtYXQgPSBjb252ZXJ0VkZDRm9ybWF0VG9HQzNERm9ybWF0
KGZyYW1lLT5mb3JtYXQoKSk7CisKKyAgICBpZiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWNvcHlGcmFtZVRv
VGV4dHVyZXMoZnJhbWUsIGZvcm1hdCwgbGF5ZXJSZW5kZXJlcikpCisgICAgICAgIHJldHVybjsK
KworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVN
SU5BTkNFOgogICAgICAgICBkcmF3WVVWKGxheWVyUmVuZGVyZXIpOwogICAgICAgICBicmVhazsK
LSAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6UkdCQToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBOgogICAgICAgICBkcmF3UkdCQShsYXllclJlbmRlcmVyKTsKICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06Ok5hdGl2ZVRleHR1cmU6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDoKICAgICAgICAgZHJhd05hdGl2ZVRl
eHR1cmUobGF5ZXJSZW5kZXJlcik7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgb3RoZXIgcGF0aHMuCi0gICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBDUkFTSCgpOyAvLyBTb21lb25lIHVwZGF0
ZWQgY29udmVydFZGQ0Zvcm1hdFRvR0MzREZvcm1hdCBhYm92ZSBidXQgdXBkYXRlIHRoaXMhCisg
ICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IDA7IHBsYW5lIDwgZnJhbWUtPnBsYW5l
cygpOyArK3BsYW5lKQorICAgICAgICBtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUtPnVucmVz
ZXJ2ZSgpOworICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7Cit9CisKK2Jv
b2wgQ0NWaWRlb0xheWVySW1wbDo6Y29weUZyYW1lVG9UZXh0dXJlcyhjb25zdCBWaWRlb0ZyYW1l
Q2hyb21pdW0qIGZyYW1lLCBHQzNEZW51bSBmb3JtYXQsIExheWVyUmVuZGVyZXJDaHJvbWl1bSog
bGF5ZXJSZW5kZXJlcikKK3sKKyAgICBpZiAoZnJhbWUtPmZvcm1hdCgpID09IFZpZGVvRnJhbWVD
aHJvbWl1bTo6TmF0aXZlVGV4dHVyZSkgeworICAgICAgICBtX25hdGl2ZVRleHR1cmVJZCA9IGZy
YW1lLT50ZXh0dXJlSWQoKTsKKyAgICAgICAgbV9uYXRpdmVUZXh0dXJlU2l6ZSA9IEludFNpemUo
ZnJhbWUtPndpZHRoKCksIGZyYW1lLT5oZWlnaHQoKSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIGlmICghcmVzZXJ2ZVRleHR1cmVzKGZyYW1lLCBmb3JtYXQsIGxheWVyUmVu
ZGVyZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHVuc2lnbmVkIHBsYW5l
ID0gMDsgcGxhbmUgPCBmcmFtZS0+cGxhbmVzKCk7ICsrcGxhbmUpIHsKKyAgICAgICAgQVNTRVJU
KGZyYW1lLT5yZXF1aXJlZFRleHR1cmVTaXplKHBsYW5lKSA9PSBtX3RleHR1cmVzW3BsYW5lXS5t
X3RleHR1cmUtPnNpemUoKSk7CisgICAgICAgIGNvcHlQbGFuZVRvVGV4dHVyZShsYXllclJlbmRl
cmVyLCBmcmFtZS0+ZGF0YShwbGFuZSksIHBsYW5lKTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25l
ZCBwbGFuZSA9IGZyYW1lLT5wbGFuZXMoKTsgcGxhbmUgPCBNYXhQbGFuZXM7ICsrcGxhbmUpIHsK
KyAgICAgICAgVGV4dHVyZSYgdGV4dHVyZSA9IG1fdGV4dHVyZXNbcGxhbmVdOworICAgICAgICB0
ZXh0dXJlLm1fdGV4dHVyZS5jbGVhcigpOworICAgICAgICB0ZXh0dXJlLm1fdmlzaWJsZVNpemUg
PSBJbnRTaXplKCk7CisgICAgfQorICAgIG1fcGxhbmVzID0gZnJhbWUtPnBsYW5lcygpOworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIENDVmlkZW9MYXllckltcGw6OmNvcHlQbGFuZVRvVGV4
dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IHZvaWQqIHBs
YW5lLCBpbnQgaW5kZXgpCit7CisgICAgVGV4dHVyZSYgdGV4dHVyZSA9IG1fdGV4dHVyZXNbaW5k
ZXhdOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlci0+Y29u
dGV4dCgpOworICAgIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGxheWVyUmVuZGVyZXIt
PnJlbmRlclN1cmZhY2VUZXh0dXJlQWxsb2NhdG9yKCk7CisgICAgdGV4dHVyZS5tX3RleHR1cmUt
PmJpbmRUZXh0dXJlKGNvbnRleHQsIGFsbG9jYXRvcik7CisgICAgR0MzRGVudW0gZm9ybWF0ID0g
dGV4dHVyZS5tX3RleHR1cmUtPmZvcm1hdCgpOworICAgIEludFNpemUgZGltZW5zaW9ucyA9IHRl
eHR1cmUubV90ZXh0dXJlLT5zaXplKCk7CisKKyAgICB2b2lkKiBtZW0gPSBzdGF0aWNfY2FzdDxF
eHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKSktPm1hcFRleFN1
YkltYWdlMkRDSFJPTUlVTShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwg
ZGltZW5zaW9ucy53aWR0aCgpLCBkaW1lbnNpb25zLmhlaWdodCgpLCBmb3JtYXQsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6V1JJVEVfT05M
WSk7CisgICAgaWYgKG1lbSkgeworICAgICAgICBtZW1jcHkobWVtLCBwbGFuZSwgZGltZW5zaW9u
cy53aWR0aCgpICogZGltZW5zaW9ucy5oZWlnaHQoKSk7CisgICAgICAgIEdMQyhjb250ZXh0LCBz
dGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRleHQtPmdldEV4dGVuc2lvbnMo
KSktPnVubWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKG1lbSkpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIElmIG1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSBmYWlscywgdGhlbiBkbyB0aGUgc2xv
d2VyIHRleFN1YkltYWdlMkQKKyAgICAgICAgLy8gdXBsb2FkLiBUaGlzIGRvZXMgdHdpY2UgdGhl
IGNvcGllcyBhcyBtYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0sIG9uZQorICAgICAgICAvLyBpbiB0
aGUgY29tbWFuZCBidWZmZXIgYW5kIGFub3RoZXIgdG8gdGhlIHRleHR1cmUuCisgICAgICAgIEdM
Qyhjb250ZXh0LCBjb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCAwLCAwLCAwLCBkaW1lbnNpb25zLndpZHRoKCksIGRpbWVuc2lvbnMuaGVpZ2h0KCks
IGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHBsYW5lKSk7CiAgICAg
fQogfQogCitzdGF0aWMgSW50U2l6ZSBjb21wdXRlVmlzaWJsZVNpemUoY29uc3QgVmlkZW9GcmFt
ZUNocm9taXVtKiBmcmFtZSwgdW5zaWduZWQgcGxhbmUpCit7CisgICAgaW50IHZpc2libGVXaWR0
aCA9IGZyYW1lLT53aWR0aChwbGFuZSk7CisgICAgaW50IHZpc2libGVIZWlnaHQgPSBmcmFtZS0+
aGVpZ2h0KHBsYW5lKTsKKyAgICAvLyBXaGVuIHRoZXJlIGFyZSBkZWFkIHBpeGVscyBhdCB0aGUg
ZWRnZSBvZiB0aGUgdGV4dHVyZSwgZGVjcmVhc2UKKyAgICAvLyB0aGUgZnJhbWUgd2lkdGggYnkg
MSB0byBwcmV2ZW50IHRoZSByaWdodG1vc3QgcGl4ZWxzIGZyb20KKyAgICAvLyBpbnRlcnBvbGF0
aW5nIHdpdGggdGhlIGRlYWQgcGl4ZWxzLgorICAgIGlmIChmcmFtZS0+aGFzUGFkZGluZ0J5dGVz
KHBsYW5lKSkKKyAgICAgICAgLS12aXNpYmxlV2lkdGg7CisKKyAgICAvLyBJbiBZVjEyLCBldmVy
eSAyeDIgc3F1YXJlIG9mIFkgdmFsdWVzIGNvcnJlc3BvbmRzIHRvIG9uZSBVIGFuZAorICAgIC8v
IG9uZSBWIHZhbHVlLiBJZiB3ZSBkZWNyZWFzZSB0aGUgd2lkdGggb2YgdGhlIFVWIHBsYW5lLCB3
ZSBtdXN0IGRlY3JlYXNlIHRoZQorICAgIC8vIHdpZHRoIG9mIHRoZSBZIHRleHR1cmUgYnkgMiBm
b3IgcHJvcGVyIGFsaWdubWVudC4gVGhpcyBtdXN0IGhhcHBlbgorICAgIC8vIGFsd2F5cywgZXZl
biBpZiBZJ3MgdGV4dHVyZSBkb2VzIG5vdCBoYXZlIHBhZGRpbmcgYnl0ZXMuCisgICAgaWYgKHBs
YW5lID09IFZpZGVvRnJhbWVDaHJvbWl1bTo6eVBsYW5lICYmIGZyYW1lLT5mb3JtYXQoKSA9PSBW
aWRlb0ZyYW1lQ2hyb21pdW06OllWMTIpIHsKKyAgICAgICAgaWYgKGZyYW1lLT5oYXNQYWRkaW5n
Qnl0ZXMoVmlkZW9GcmFtZUNocm9taXVtOjp1UGxhbmUpKSB7CisgICAgICAgICAgICBpbnQgb3Jp
Z2luYWxXaWR0aCA9IGZyYW1lLT53aWR0aChwbGFuZSk7CisgICAgICAgICAgICB2aXNpYmxlV2lk
dGggPSBvcmlnaW5hbFdpZHRoIC0gMjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBJ
bnRTaXplKHZpc2libGVXaWR0aCwgdmlzaWJsZUhlaWdodCk7Cit9CisKK2Jvb2wgQ0NWaWRlb0xh
eWVySW1wbDo6cmVzZXJ2ZVRleHR1cmVzKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUs
IEdDM0RlbnVtIGZvcm1hdCwgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQor
eworICAgIGlmIChmcmFtZS0+cGxhbmVzKCkgPiBNYXhQbGFuZXMpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpbnQgbWF4VGV4dHVyZVNpemUgPSBsYXllclJlbmRlcmVyLT5jYXBhYmlsaXRp
ZXMoKS5tYXhUZXh0dXJlU2l6ZTsKKyAgICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUg
PCBmcmFtZS0+cGxhbmVzKCk7ICsrcGxhbmUpIHsKKyAgICAgICAgSW50U2l6ZSByZXF1aXJlZFRl
eHR1cmVTaXplID0gZnJhbWUtPnJlcXVpcmVkVGV4dHVyZVNpemUocGxhbmUpOworICAgICAgICAv
LyBJZiB0aGUgcmVuZGVyZXIgY2Fubm90IGhhbmRsZSB0aGlzIGxhcmdlIG9mIGEgdGV4dHVyZSwg
cmV0dXJuIGZhbHNlLgorICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgdGVzdCB3aGVuIHRp
bGVkIGxheWVycyBhcmUgaW1wbGVtZW50ZWQuCisgICAgICAgIGlmIChyZXF1aXJlZFRleHR1cmVT
aXplLmlzWmVybygpIHx8IHJlcXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKSA+IG1heFRleHR1cmVT
aXplIHx8IHJlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCkgPiBtYXhUZXh0dXJlU2l6ZSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFtX3RleHR1cmVzW3BsYW5lXS5t
X3RleHR1cmUpIHsKKyAgICAgICAgICAgIG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZSA9IE1h
bmFnZWRUZXh0dXJlOjpjcmVhdGUobGF5ZXJSZW5kZXJlci0+cmVuZGVyU3VyZmFjZVRleHR1cmVN
YW5hZ2VyKCkpOworICAgICAgICAgICAgaWYgKCFtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgbV90ZXh0dXJlc1tw
bGFuZV0ubV92aXNpYmxlU2l6ZSA9IEludFNpemUoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
bV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlLT5zaXplKCkgIT0gcmVxdWlyZWRUZXh0dXJlU2l6
ZSkKKyAgICAgICAgICAgIG1fdGV4dHVyZXNbcGxhbmVdLm1fdmlzaWJsZVNpemUgPSBjb21wdXRl
VmlzaWJsZVNpemUoZnJhbWUsIHBsYW5lKTsKKyAgICAgICAgbV90ZXh0dXJlc1twbGFuZV0ubV90
ZXh0dXJlLT5yZXNlcnZlKHJlcXVpcmVkVGV4dHVyZVNpemUsIGZvcm1hdCk7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorCiB2b2lkIENDVmlkZW9MYXllckltcGw6OmRyYXdZVVYoTGF5ZXJS
ZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKSBjb25zdAogewogICAgIGNvbnN0IFlVVlBy
b2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT52aWRlb0xheWVyWVVWUHJvZ3JhbSgpOwog
ICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwogCiAgICAgR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyLT5jb250ZXh0KCk7Ci0gICAg
Q0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSB5VGV4dHVyZSA9IG1fdGV4dHVyZXNbVmlkZW9GcmFt
ZUNocm9taXVtOjp5UGxhbmVdOwotICAgIENDVmlkZW9MYXllckltcGw6OlRleHR1cmUgdVRleHR1
cmUgPSBtX3RleHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6dVBsYW5lXTsKLSAgICBDQ1ZpZGVv
TGF5ZXJJbXBsOjpUZXh0dXJlIHZUZXh0dXJlID0gbV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21p
dW06OnZQbGFuZV07CisgICAgY29uc3QgVGV4dHVyZSYgeVRleHR1cmUgPSBtX3RleHR1cmVzW1Zp
ZGVvRnJhbWVDaHJvbWl1bTo6eVBsYW5lXTsKKyAgICBjb25zdCBUZXh0dXJlJiB1VGV4dHVyZSA9
IG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjp1UGxhbmVdOworICAgIGNvbnN0IFRleHR1
cmUmIHZUZXh0dXJlID0gbV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnZQbGFuZV07CiAK
ICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRTEpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHlUZXh0dXJlLmlkKSk7CisgICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB5
VGV4dHVyZS5tX3RleHR1cmUtPnRleHR1cmVJZCgpKSk7CiAgICAgR0xDKGNvbnRleHQsIGNvbnRl
eHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUyKSk7Ci0gICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCB1VGV4dHVyZS5pZCkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdVRleHR1cmUubV90ZXh0dXJlLT50ZXh0
dXJlSWQoKSkpOwogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFMykpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdlRleHR1cmUuaWQpKTsKKyAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIHZUZXh0dXJlLm1fdGV4dHVyZS0+dGV4dHVyZUlkKCkpKTsKIAogICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOwogCi0gICAg
ZmxvYXQgeVdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4oeVRleHR1cmUudmlz
aWJsZVNpemUud2lkdGgoKSkgLyB5VGV4dHVyZS5zaXplLndpZHRoKCk7CisgICAgZmxvYXQgeVdp
ZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4oeVRleHR1cmUubV92aXNpYmxlU2l6
ZS53aWR0aCgpKSAvIHlUZXh0dXJlLm1fdGV4dHVyZS0+c2l6ZSgpLndpZHRoKCk7CiAgICAgLy8g
QXJiaXRyYXJpbHkgdGFrZSB0aGUgdSBzaXplcyBiZWNhdXNlIHUgYW5kIHYgZGltZW5zaW9ucyBh
cmUgaWRlbnRpY2FsLgotICAgIGZsb2F0IHV2V2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0
PGZsb2F0Pih1VGV4dHVyZS52aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHVUZXh0dXJlLnNpemUud2lk
dGgoKTsKKyAgICBmbG9hdCB1dldpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4o
dVRleHR1cmUubV92aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHVUZXh0dXJlLm1fdGV4dHVyZS0+c2l6
ZSgpLndpZHRoKCk7CiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFt
LT52ZXJ0ZXhTaGFkZXIoKS55V2lkdGhTY2FsZUZhY3RvckxvY2F0aW9uKCksIHlXaWR0aFNjYWxl
RmFjdG9yKSk7CiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT52
ZXJ0ZXhTaGFkZXIoKS51dldpZHRoU2NhbGVGYWN0b3JMb2NhdGlvbigpLCB1dldpZHRoU2NhbGVG
YWN0b3IpKTsKIApAQCAtMTUwLDIxICsyODEsMTggQEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpk
cmF3WVVWKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikgY29uc3QKICAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRTApKTsKIH0KIAotdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3UkdCQShMYXllclJlbmRl
cmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpIGNvbnN0Cit0ZW1wbGF0ZTxjbGFzcyBQcm9ncmFt
Pgordm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3Q29tbW9uKExheWVyUmVuZGVyZXJDaHJvbWl1
bSogbGF5ZXJSZW5kZXJlciwgUHJvZ3JhbSogcHJvZ3JhbSwgZmxvYXQgd2lkdGhTY2FsZUZhY3Rv
ciwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQpIGNvbnN0CiB7Ci0gICAgY29uc3QgUkdCQVBy
b2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT52aWRlb0xheWVyUkdCQVByb2dyYW0oKTsK
ICAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgpKTsKIAogICAgIEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOwotICAg
IENDVmlkZW9MYXllckltcGw6OlRleHR1cmUgdGV4dHVyZSA9IG1fdGV4dHVyZXNbVmlkZW9GcmFt
ZUNocm9taXVtOjpyZ2JQbGFuZV07CiAKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZl
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKLSAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1
cmUuaWQpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmVJZCkpOwogCiAgICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Ci0gICAgZmxvYXQgd2lkdGhT
Y2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0Pih0ZXh0dXJlLnZpc2libGVTaXplLndpZHRo
KCkpIC8gdGV4dHVyZS5zaXplLndpZHRoKCk7CiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVu
aWZvcm00Zihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS50ZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCAw
LCAwLCB3aWR0aFNjYWxlRmFjdG9yLCAxKSk7Ci0KICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDAp
KTsKIAogICAgIGxheWVyUmVuZGVyZXItPmRyYXdUZXh0dXJlZFF1YWQoZHJhd1RyYW5zZm9ybSgp
LCBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwgbGF5
ZXJSZW5kZXJlci0+c2hhcmVkR2VvbWV0cnlRdWFkKCksCkBAIC0xNzMsMjYgKzMwMSwxOCBAQCB2
b2lkIENDVmlkZW9MYXllckltcGw6OmRyYXdSR0JBKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5
ZXJSZW5kZXJlcikgY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0x
KTsKIH0KIAordm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3UkdCQShMYXllclJlbmRlcmVyQ2hy
b21pdW0qIGxheWVyUmVuZGVyZXIpIGNvbnN0Cit7CisgICAgY29uc3QgUkdCQVByb2dyYW0qIHBy
b2dyYW0gPSBsYXllclJlbmRlcmVyLT52aWRlb0xheWVyUkdCQVByb2dyYW0oKTsKKyAgICBjb25z
dCBUZXh0dXJlJiB0ZXh0dXJlID0gbV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnJnYlBs
YW5lXTsKKyAgICBmbG9hdCB3aWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRl
eHR1cmUubV92aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHRleHR1cmUubV90ZXh0dXJlLT5zaXplKCku
d2lkdGgoKTsKKyAgICBkcmF3Q29tbW9uKGxheWVyUmVuZGVyZXIsIHByb2dyYW0sIHdpZHRoU2Nh
bGVGYWN0b3IsIHRleHR1cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSk7Cit9CisKIHZvaWQgQ0NW
aWRlb0xheWVySW1wbDo6ZHJhd05hdGl2ZVRleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBs
YXllclJlbmRlcmVyKSBjb25zdAogewogICAgIGNvbnN0IE5hdGl2ZVRleHR1cmVQcm9ncmFtKiBw
cm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dmlkZW9MYXllck5hdGl2ZVRleHR1cmVQcm9ncmFtKCk7
Ci0gICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7Ci0KLSAgICBH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKLQot
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFMCkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9uYXRpdmVUZXh0dXJlSWQpKTsKLQotICAgIEdM
Qyhjb250ZXh0LCBjb250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOwotICAg
IGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4obV9uYXRpdmVUZXh0
dXJlVmlzaWJsZVNpemUud2lkdGgoKSkgLyBtX25hdGl2ZVRleHR1cmVTaXplLndpZHRoKCk7Ci0g
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00Zihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIo
KS50ZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCAwLCAwLCB3aWR0aFNjYWxlRmFjdG9yLCAxKSk7Ci0K
LSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hh
ZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKLQotICAgIGxheWVyUmVuZGVyZXItPmRyYXdU
ZXh0dXJlZFF1YWQoZHJhd1RyYW5zZm9ybSgpLCBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5o
ZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwgbGF5ZXJSZW5kZXJlci0+c2hhcmVkR2VvbWV0cnlRdWFk
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhT
aGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7CisgICAgZHJhd0NvbW1vbihsYXllclJl
bmRlcmVyLCBwcm9ncmFtLCAxLCBtX25hdGl2ZVRleHR1cmVJZCk7CiB9CiAKIHZvaWQgQ0NWaWRl
b0xheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVu
dCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaAppbmRleCBlNTMxN2FkMzRkYWVm
Y2I1MDYxMTZlOWQzODA4YmZhNWY5MmFiNzMwLi5hNTNkYWZmNGI4ZTQ5ZGI3NjMyMDliYWEyN2Qw
Y2IzOTMxZjRkNWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oCkBAIC0yNiwyMSAr
MjYsMjMgQEAKICNpZm5kZWYgQ0NWaWRlb0xheWVySW1wbF9oCiAjZGVmaW5lIENDVmlkZW9MYXll
ckltcGxfaAogCi0jaW5jbHVkZSAiUHJvZ3JhbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJNYW5hZ2Vk
VGV4dHVyZS5oIgogI2luY2x1ZGUgIlNoYWRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVmlkZW9G
cmFtZUNocm9taXVtLmgiCisjaW5jbHVkZSAiVmlkZW9GcmFtZVByb3ZpZGVyLmgiCiAjaW5jbHVk
ZSAiVmlkZW9MYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBWaWRlb0ZyYW1lUHJvdmlkZXI7Cit0ZW1wbGF0
ZTxjbGFzcyBWZXJ0ZXhTaGFkZXIsIGNsYXNzIEZyYWdtZW50U2hhZGVyPiBjbGFzcyBQcm9ncmFt
QmluZGluZzsKIAotY2xhc3MgQ0NWaWRlb0xheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7
CitjbGFzcyBDQ1ZpZGVvTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsCisgICAgICAgICAg
ICAgICAgICAgICAgICwgcHVibGljIFZpZGVvRnJhbWVQcm92aWRlcjo6Q2xpZW50IHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1ZpZGVvTGF5ZXJJbXBsPiBjcmVhdGUoaW50IGlk
KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDVmlkZW9MYXllckltcGw+IGNyZWF0ZShpbnQgaWQs
IFZpZGVvRnJhbWVQcm92aWRlciogcHJvdmlkZXIpCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IENDVmlkZW9MYXllckltcGwoaWQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDQ1ZpZGVvTGF5ZXJJbXBsKGlkLCBwcm92aWRlcikpOwogICAgIH0KICAgICB2aXJ0dWFs
IH5DQ1ZpZGVvTGF5ZXJJbXBsKCk7CiAKQEAgLTUyLDM2ICs1NCwzNyBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVu
dCkgY29uc3Q7CiAKLSAgICB2b2lkIHNldFNraXBzRHJhdyhib29sIHNraXBzRHJhdykgeyBtX3Nr
aXBzRHJhdyA9IHNraXBzRHJhdzsgfQotICAgIHZvaWQgc2V0RnJhbWVGb3JtYXQoVmlkZW9GcmFt
ZUNocm9taXVtOjpGb3JtYXQgZm9ybWF0KSB7IG1fZnJhbWVGb3JtYXQgPSBmb3JtYXQ7IH0KLSAg
ICB2b2lkIHNldFRleHR1cmUoc2l6ZV90LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCwgY29u
c3QgSW50U2l6ZSYsIGNvbnN0IEludFNpemUmIHZpc2libGVTaXplKTsKLSAgICB2b2lkIHNldE5h
dGl2ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQsIGNvbnN0IEludFNpemUmLCBj
b25zdCBJbnRTaXplJiB2aXNpYmxlU2l6ZSk7CisgICAgdmlydHVhbCB2b2lkIHN0b3BVc2luZ1By
b3ZpZGVyKCk7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ0NWaWRlb0xheWVySW1wbChpbnQp
OworICAgIGV4cGxpY2l0IENDVmlkZW9MYXllckltcGwoaW50LCBWaWRlb0ZyYW1lUHJvdmlkZXIq
KTsKIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7
IHJldHVybiAiVmlkZW9MYXllciI7IH0KIAotICAgIHN0cnVjdCBUZXh0dXJlIHsKLSAgICAgICAg
UGxhdGZvcm0zRE9iamVjdCBpZDsKLSAgICAgICAgSW50U2l6ZSBzaXplOwotICAgICAgICBJbnRT
aXplIHZpc2libGVTaXplOwotICAgIH07Ci0KKyAgICBib29sIGNvcHlGcmFtZVRvVGV4dHVyZXMo
Y29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiwgR0MzRGVudW0gZm9ybWF0LCBMYXllclJlbmRlcmVy
Q2hyb21pdW0qKTsKKyAgICB2b2lkIGNvcHlQbGFuZVRvVGV4dHVyZShMYXllclJlbmRlcmVyQ2hy
b21pdW0qLCBjb25zdCB2b2lkKiBwbGFuZSwgaW50IGluZGV4KTsKKyAgICBib29sIHJlc2VydmVU
ZXh0dXJlcyhjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qLCBHQzNEZW51bSBmb3JtYXQsIExheWVy
UmVuZGVyZXJDaHJvbWl1bSopOwogICAgIHZvaWQgZHJhd1lVVihMYXllclJlbmRlcmVyQ2hyb21p
dW0qKSBjb25zdDsKICAgICB2b2lkIGRyYXdSR0JBKExheWVyUmVuZGVyZXJDaHJvbWl1bSopIGNv
bnN0OwogICAgIHZvaWQgZHJhd05hdGl2ZVRleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKikg
Y29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4gdm9pZCBkcmF3Q29tbW9uKExheWVy
UmVuZGVyZXJDaHJvbWl1bSosIFByb2dyYW0qLCBmbG9hdCB3aWR0aFNjYWxlRmFjdG9yLCBQbGF0
Zm9ybTNET2JqZWN0IHRleHR1cmVJZCkgY29uc3Q7CisKKyAgICBNdXRleCBtX3Byb3ZpZGVyTXV0
ZXg7IC8vIEd1YXJkcyBtX3Byb3ZpZGVyIGJlbG93LgorICAgIFZpZGVvRnJhbWVQcm92aWRlciog
bV9wcm92aWRlcjsKIAogICAgIHN0YXRpYyBjb25zdCBmbG9hdCB5dXYyUkdCWzldOwogICAgIHN0
YXRpYyBjb25zdCBmbG9hdCB5dXZBZGp1c3RbM107CiAKLSAgICBib29sIG1fc2tpcHNEcmF3Owot
ICAgIFZpZGVvRnJhbWVDaHJvbWl1bTo6Rm9ybWF0IG1fZnJhbWVGb3JtYXQ7Ci0gICAgVGV4dHVy
ZSBtX3RleHR1cmVzWzNdOworICAgIHN0cnVjdCBUZXh0dXJlIHsKKyAgICAgICAgT3duUHRyPE1h
bmFnZWRUZXh0dXJlPiBtX3RleHR1cmU7CisgICAgICAgIEludFNpemUgbV92aXNpYmxlU2l6ZTsK
KyAgICB9OworICAgIGVudW0geyBNYXhQbGFuZXMgPSAzIH07CisgICAgVGV4dHVyZSBtX3RleHR1
cmVzW01heFBsYW5lc107CisgICAgaW50IG1fcGxhbmVzOwogCiAgICAgUGxhdGZvcm0zRE9iamVj
dCBtX25hdGl2ZVRleHR1cmVJZDsKICAgICBJbnRTaXplIG1fbmF0aXZlVGV4dHVyZVNpemU7Ci0g
ICAgSW50U2l6ZSBtX25hdGl2ZVRleHR1cmVWaXNpYmxlU2l6ZTsKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwu
Y3BwCmluZGV4IDk5MzYxZWQ5NDFhYTQ2MzA2ZDU2N2JkMjNkOGRjZGVhZGY2NWE5OTYuLmUyOGJl
MmM4YWFhMjM2YWU0OWU2OTY3NzA5YTE2MmI3OGQzYjI0ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcApAQCAt
NjIsMjkgKzYyLDYgQEAgc3RhdGljIFBhc3NPd25QdHI8V2ViTWVkaWFQbGF5ZXI+IGNyZWF0ZVdl
Yk1lZGlhUGxheWVyKFdlYk1lZGlhUGxheWVyQ2xpZW50KiBjbGkKICAgICByZXR1cm4gYWRvcHRQ
dHIod2ViRnJhbWUtPmNsaWVudCgpLT5jcmVhdGVNZWRpYVBsYXllcih3ZWJGcmFtZSwgY2xpZW50
KSk7CiB9CiAKLXN0YXRpYyBib29sIGlzVmlkZW9GcmFtZUZvcm1hdE9wYXF1ZShXZWJWaWRlb0Zy
YW1lOjpGb3JtYXQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBX
ZWJWaWRlb0ZyYW1lOjpGb3JtYXRJbnZhbGlkOgotICAgIGNhc2UgV2ViVmlkZW9GcmFtZTo6Rm9y
bWF0RW1wdHk6Ci0gICAgY2FzZSBXZWJWaWRlb0ZyYW1lOjpGb3JtYXRSR0JBOgotICAgIGNhc2Ug
V2ViVmlkZW9GcmFtZTo6Rm9ybWF0TmF0aXZlVGV4dHVyZToKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGNhc2UgV2ViVmlkZW9GcmFtZTo6Rm9ybWF0UkdCNTU1OgotICAgIGNhc2UgV2ViVmlk
ZW9GcmFtZTo6Rm9ybWF0UkdCNTY1OgotICAgIGNhc2UgV2ViVmlkZW9GcmFtZTo6Rm9ybWF0UkdC
MjQ6Ci0gICAgY2FzZSBXZWJWaWRlb0ZyYW1lOjpGb3JtYXRSR0IzMjoKLSAgICBjYXNlIFdlYlZp
ZGVvRnJhbWU6OkZvcm1hdFlWMTI6Ci0gICAgY2FzZSBXZWJWaWRlb0ZyYW1lOjpGb3JtYXRZVjE2
OgotICAgIGNhc2UgV2ViVmlkZW9GcmFtZTo6Rm9ybWF0TlYxMjoKLSAgICBjYXNlIFdlYlZpZGVv
RnJhbWU6OkZvcm1hdEFTQ0lJOgotICAgIGNhc2UgV2ViVmlkZW9GcmFtZTo6Rm9ybWF0STQyMDoK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQogYm9vbCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6Om1f
aXNFbmFibGVkID0gZmFsc2U7CiAKIGJvb2wgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjppc0Vu
YWJsZWQoKQpAQCAtMTI0LDEwICsxMDEsMTAgQEAgV2ViTWVkaWFQbGF5ZXIqIFdlYk1lZGlhUGxh
eWVyQ2xpZW50SW1wbDo6bWVkaWFQbGF5ZXIoKSBjb25zdAogCiBXZWJNZWRpYVBsYXllckNsaWVu
dEltcGw6On5XZWJNZWRpYVBsYXllckNsaWVudEltcGwoKQogewotICAgIC8vIFZpZGVvTGF5ZXJD
aHJvbWl1bSBtYXkgb3V0bGl2ZSB0aGlzIG9iamVjdCBzbyBjbGVhciB0aGUgYmFjayBwb2ludGVy
LgogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAobV92aWRlb0xheWVy
KQotICAgICAgICBtX3ZpZGVvTGF5ZXItPnJlbGVhc2VQcm92aWRlcigpOworICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX2NvbXBvc2l0aW5nTXV0ZXgpOworICAgIGlmIChtX3ZpZGVvRnJhbWVQcm92
aWRlckNsaWVudCkKKyAgICAgICAgbV92aWRlb0ZyYW1lUHJvdmlkZXJDbGllbnQtPnN0b3BVc2lu
Z1Byb3ZpZGVyKCk7CiAjZW5kaWYKIH0KIApAQCAtNTkzLDIxICs1NzAsMjcgQEAgYm9vbCBXZWJN
ZWRpYVBsYXllckNsaWVudEltcGw6OmFjY2VsZXJhdGVkUmVuZGVyaW5nSW5Vc2UoKQogICAgIHJl
dHVybiBtX3ZpZGVvTGF5ZXIgJiYgbV92aWRlb0xheWVyLT5sYXllclRyZWVIb3N0KCk7CiB9CiAK
K3ZvaWQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpzZXRWaWRlb0ZyYW1lUHJvdmlkZXJDbGll
bnQoVmlkZW9GcmFtZVByb3ZpZGVyOjpDbGllbnQqIGNsaWVudCkKK3sKKyAgICBNdXRleExvY2tl
ciBsb2NrZXIobV9jb21wb3NpdGluZ011dGV4KTsKKyAgICBtX3ZpZGVvRnJhbWVQcm92aWRlckNs
aWVudCA9IGNsaWVudDsKK30KKwogVmlkZW9GcmFtZUNocm9taXVtKiBXZWJNZWRpYVBsYXllckNs
aWVudEltcGw6OmdldEN1cnJlbnRGcmFtZSgpCiB7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
Y29tcG9zaXRpbmdNdXRleCk7CiAgICAgQVNTRVJUKCFtX2N1cnJlbnRWaWRlb0ZyYW1lKTsKICAg
ICBpZiAobV93ZWJNZWRpYVBsYXllciAmJiAhbV9jdXJyZW50VmlkZW9GcmFtZSkgewogICAgICAg
ICBXZWJWaWRlb0ZyYW1lKiB3ZWJraXRWaWRlb0ZyYW1lID0gbV93ZWJNZWRpYVBsYXllci0+Z2V0
Q3VycmVudEZyYW1lKCk7CiAgICAgICAgIGlmICh3ZWJraXRWaWRlb0ZyYW1lKQogICAgICAgICAg
ICAgbV9jdXJyZW50VmlkZW9GcmFtZSA9IGFkb3B0UHRyKG5ldyBWaWRlb0ZyYW1lQ2hyb21pdW1J
bXBsKHdlYmtpdFZpZGVvRnJhbWUpKTsKLSAgICAgICAgaWYgKG1fdmlkZW9MYXllcikKLSAgICAg
ICAgICAgIG1fdmlkZW9MYXllci0+c2V0T3BhcXVlKHdlYmtpdFZpZGVvRnJhbWUgJiYgaXNWaWRl
b0ZyYW1lRm9ybWF0T3BhcXVlKHdlYmtpdFZpZGVvRnJhbWUtPmZvcm1hdCgpKSk7CiAgICAgfQog
ICAgIHJldHVybiBtX2N1cnJlbnRWaWRlb0ZyYW1lLmdldCgpOwogfQogCiB2b2lkIFdlYk1lZGlh
UGxheWVyQ2xpZW50SW1wbDo6cHV0Q3VycmVudEZyYW1lKFZpZGVvRnJhbWVDaHJvbWl1bSogdmlk
ZW9GcmFtZSkKIHsKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9jb21wb3NpdGluZ011dGV4KTsK
ICAgICBpZiAodmlkZW9GcmFtZSAmJiB2aWRlb0ZyYW1lID09IG1fY3VycmVudFZpZGVvRnJhbWUp
IHsKICAgICAgICAgaWYgKG1fd2ViTWVkaWFQbGF5ZXIpIHsKICAgICAgICAgICAgIG1fd2ViTWVk
aWFQbGF5ZXItPnB1dEN1cnJlbnRGcmFtZSgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmgKaW5kZXggZmNjMWRhNWM0MzczMmY1
YjhkMzZkODUyZjMwM2YyMDEwZWIzMDRiNS4uZDk0MTljZjg3YWJmZTY5MmMwNTFlNWYwMjVkYTM3
MmM1ZDE3Yzk4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVk
aWFQbGF5ZXJDbGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
TWVkaWFQbGF5ZXJDbGllbnRJbXBsLmgKQEAgLTEyOSw3ICsxMjksNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB1bnNpZ25lZCBkcm9wcGVkRnJhbWVDb3VudCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
dW5zaWduZWQgYXVkaW9EZWNvZGVkQnl0ZUNvdW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNp
Z25lZCB2aWRlb0RlY29kZWRCeXRlQ291bnQoKSBjb25zdDsKLSAgICAKKwogI2lmIEVOQUJMRShX
RUJfQVVESU8pCiAgICAgdmlydHVhbCBXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyKiBhdWRp
b1NvdXJjZVByb3ZpZGVyKCk7CiAjZW5kaWYKQEAgLTEzOCw2ICsxMzgsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdDsKIAog
ICAgIC8vIFZpZGVvRnJhbWVQcm92aWRlciBtZXRob2RzOgorICAgIHZpcnR1YWwgdm9pZCBzZXRW
aWRlb0ZyYW1lUHJvdmlkZXJDbGllbnQoVmlkZW9GcmFtZVByb3ZpZGVyOjpDbGllbnQqKTsKICAg
ICB2aXJ0dWFsIFdlYkNvcmU6OlZpZGVvRnJhbWVDaHJvbWl1bSogZ2V0Q3VycmVudEZyYW1lKCk7
CiAgICAgdmlydHVhbCB2b2lkIHB1dEN1cnJlbnRGcmFtZShXZWJDb3JlOjpWaWRlb0ZyYW1lQ2hy
b21pdW0qKTsKICNlbmRpZgpAQCAtMTU4LDYgKzE1OSw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNv
bnN0IFdURjo6U3RyaW5nJiB0eXBlLCBjb25zdCBXVEY6OlN0cmluZyYgY29kZWNzKTsKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgYm9vbCBhY2NlbGVyYXRlZFJlbmRlcmlu
Z0luVXNlKCk7CisKKyAgICBNdXRleCBtX2NvbXBvc2l0aW5nTXV0ZXg7IC8vIEd1YXJkcyBpbnRl
cmFjdGlvbiBiZXR3ZWVuIHRoZSBtYWluIHRocmVhZCBhbmQgY29tcGlzaXRpbmcgdGhyZWFkLgor
ICAgIFZpZGVvRnJhbWVQcm92aWRlcjo6Q2xpZW50KiBtX3ZpZGVvRnJhbWVQcm92aWRlckNsaWVu
dDsKICNlbmRpZgogCiAgICAgV2ViQ29yZTo6TWVkaWFQbGF5ZXIqIG1fbWVkaWFQbGF5ZXI7CkBA
IC0xODksMTMgKzE5MywxMyBAQCBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9y
bWF0KHNpemVfdCBudW1iZXJPZkNoYW5uZWxzLCBmbG9hdCBzYW1wbGVSYXRlKTsKIAogICAgICAg
ICB2b2lkIHdyYXAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckNsaWVudCogY2xpZW50KSB7
IG1fY2xpZW50ID0gY2xpZW50OyB9Ci0gICAgICAgIAorCiAgICAgcHJpdmF0ZToKICAgICAgICAg
V2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckNsaWVudCogbV9jbGllbnQ7CiAgICAgfTsKIAog
ICAgIC8vIEF1ZGlvU291cmNlUHJvdmlkZXJJbXBsIHdyYXBzIGEgV2ViQXVkaW9Tb3VyY2VQcm92
aWRlci4KLSAgICAvLyBwcm92aWRlSW5wdXQoKSBjYWxscyBpbnRvIENocm9taXVtIHRvIGdldCBh
IHJlbmRlcmVkIGF1ZGlvIHN0cmVhbS4gCisgICAgLy8gcHJvdmlkZUlucHV0KCkgY2FsbHMgaW50
byBDaHJvbWl1bSB0byBnZXQgYSByZW5kZXJlZCBhdWRpbyBzdHJlYW0uCiAKICAgICBjbGFzcyBB
dWRpb1NvdXJjZVByb3ZpZGVySW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3Zp
ZGVyIHsKICAgICBwdWJsaWM6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119628</attachid>
            <date>2011-12-16 10:15:35 -0800</date>
            <delta_ts>2011-12-19 09:54:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73043-20111216101534.patch</filename>
            <type>text/plain</type>
            <size>39532</size>
            <attacher name="Ami Fischman">fischman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNjU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWVjMTc4Nzg3N2U2N2U2
ZjhkODAxY2NjNzYzYmJiMjdhNzE5OGIxYi4uMjZiNmU4Mzc1YTQ0ZGQ0OGIwNmQxNzY2OWM3Mjkw
NzU2MDBjOWIxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDExLTEyLTE1ICBBbWkg
RmlzY2htYW4gIDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRml4IHRoZSBsaWZl
LWN5Y2xlIG9mIHZpZGVvIGZyYW1lcyBoYW5kbGVkIGJ5IFZpZGVvTGF5ZXJDaHJvbWl1bS9DQ1Zp
ZGVvTGF5ZXJJbXBsLgorICAgICAgICBWaWRlb0ZyYW1lUHJvdmlkZXI6OntnZXQscHV0fUN1cnJl
bnRGcmFtZSBwcm92aWRlIGxlYXNlIHNlbWFudGljcy4gIFByZXZpb3VzbHkKKyAgICAgICAgVmlk
ZW9MYXllckNocm9taXVtIHdvdWxkIGFjcXVpcmUgdGhlIGxlYXNlIGZvciB0aGUgZHVyYXRpb24g
b2YgY29weWluZyB0aGUgZnJhbWUsCisgICAgICAgIGV2ZW4gaWYgdGhhdCB3YXMgb25seSBhIHRl
eHR1cmUgSUQsIGFuZCBpbW1lZGlhdGVseSByZXR1cm4gdGhlIGxlYXNlLCB3aGlsZQorICAgICAg
ICBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3KCkgd291bGQgY29tZSBhbG9uZyBsYXRlciBhbmQgdXNl
IHRoZSAobm8tbG9uZ2VyIGxvY2tlZCkKKyAgICAgICAgdGV4dHVyZSBvcHRpbWlzdGljYWxseS4g
IFRoaXMgY2hhbmdlIG1ha2VzIGl0IHNvIHRoYXQgQ0NWaWRlb0xheWVySW1wbCBob2xkcworICAg
ICAgICB0aGUgZnJhbWUncyBsZWFzZSBmb3IgdGhlIGR1cmF0aW9uIG9mIGRyYXcoKSwgZ3VhcmFu
dGVlaW5nIHRoZSBmcmFtZSBpcyB2YWxpZCB0byByZWFkLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwNDMKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OlZpZGVvTGF5ZXJDaHJvbWl1bSk6
CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06On5WaWRlb0xheWVyQ2hyb21p
dW0pOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVy
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnJlbGVhc2VQcm92
aWRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNo
cm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRl
b0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpDQ1Zp
ZGVvTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6On5DQ1Zp
ZGVvTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OnNldFBy
b3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRWRkNGb3JtYXRUb0dDM0RGb3JtYXQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6ZHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpjb3B5RnJhbWVUb1RleHR1cmVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmNvcHlQbGFuZVRvVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpjb21wdXRlVmlzaWJsZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRl
b0xheWVySW1wbDo6cmVzZXJ2ZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9M
YXllckltcGw6OmRyYXdZVVYpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6
ZHJhd0NvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3UkdC
QSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3TmF0aXZlVGV4dHVy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVy
SW1wbC5oOgorCiAyMDExLTEyLTEyICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTAyNjQ4LgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwppbmRleCA4ZTRhMDcwNjMxNzMzOGE3NTNlYzQ2YmVlMjg4YTliMDFjZWZkYzk5
Li4zYTgyMzUzMmU0MjBiZjE5NDcwM2NjNWViMWFiODhmZGMzNDVmMThhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTEyLTE1ICBBbWkgRmlzY2htYW4g
IDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2ZXJ0IENMIDEwMjM4NyBiZWNh
dXNlIGl0IGlzIGluY29ycmVjdCB0byBjYWxsIHNldE9wYXF1ZSBmcm9tIGEgbm9uLW1haW4gdGhy
ZWFkCisgICAgICAgIChhbmQgZ2V0Q3VycmVudEZyYW1lKCkgY2FuIG5vdyBiZSBjYWxsZWQgZnJv
bSB0aGUgY29tcG9zaXRvciB0aHJlYWQgd2hlbgorICAgICAgICAtLWVuYWJsZS10aHJlYWRlZC1j
b21wb3NpdGluZyBpcyBzcGVjaWZpZWQpLiAgV2hlbiB0aGlzIGlzIGZpeGVkIGZvciByZWFsLCB0
aGUKKyAgICAgICAgb3BhY2l0eS1kZXRlcm1pbmF0aW9uIHNob3VsZCBwcm9iYWJseSBub3QgYmUg
cGVyLWZyYW1lIGJ1dCByYXRoZXIgYSBtZXRob2Qgb24KKyAgICAgICAgV2ViTWVkaWFQbGF5ZXJD
bGllbnQgdGhhdCB0aGUgcGlwZWxpbmUgY2FuIGNhbGwgdXAtZnJvbnQgKGFuZCBvbiB0aGUgbWFp
biB0aHJlYWQpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzMwNDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHNyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJNZWRpYVBsYXllckNsaWVudEltcGw6OmdldEN1cnJlbnRGcmFtZSk6CisKIDIwMTEtMTItMTIg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgV2ViS2l0IGNvZGUg
c2hvdWxkbid0IGJlIGNhbGxpbmcgYXBwbHlDb21tYW5kIGRpcmVjdGx5CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0ZyYW1lUHJvdmlk
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvRnJh
bWVQcm92aWRlci5oCmluZGV4IGM1OTZmODc2OTc2ZGIxYTAzOTY4NGU5ZGRmNmIxNzEwOGVmMGU0
YjAuLjNkNDNhOTBjMzdhNjM3YWNlN2NjNzMyMTc2M2RlNGEzOTc5OTQxZGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvRnJhbWVQcm92
aWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Zp
ZGVvRnJhbWVQcm92aWRlci5oCkBAIC0zOSw2ICszOSwxNCBAQCBjbGFzcyBWaWRlb0ZyYW1lUHJv
dmlkZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgflZpZGVvRnJhbWVQcm92aWRlcigpIHsgfQog
CisgICAgY2xhc3MgQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIC8vIFByb3ZpZGVyIHdp
bGwgY2FsbCB0aGlzIG1ldGhvZCB0byB0ZWxsIHRoZSBjbGllbnQgdG8gc3RvcCB1c2luZyBpdC4K
KyAgICAgICAgdmlydHVhbCB2b2lkIHN0b3BVc2luZ1Byb3ZpZGVyKCkgPSAwOworICAgIH07CisK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlkZW9GcmFtZVByb3ZpZGVyQ2xpZW50KENsaWVudCopID0g
MDsKKwogICAgIC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBWaWRlb0Zy
YW1lQ2hyb21pdW0sIHdoaWNoIGlzCiAgICAgLy8gdGhlIFdlYkNvcmUgd3JhcHBlciBmb3IgYSB2
aWRlbyBmcmFtZSBpbiBDaHJvbWl1bS4gZ2V0Q3VycmVudEZyYW1lKCkKICAgICAvLyBwbGFjZXMg
YSBsb2NrIG9uIHRoZSBmcmFtZSBpbiBDaHJvbWl1bS4gQ2FsbHMgdG8gdGhpcyBtZXRob2Qgc2hv
dWxkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAppbmRleCBlYzkzZjE2OGRhMTRlYTQx
ZTNjMTZkZjZkN2M0OWJlZTQ1MTNlYWNlLi4zZThmMTIzOTdiYWNlMjNmNWQ3MTFmODRhYzMyMGMy
NDQ0ZDhmMjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTMyLDE1ICsz
Miw2IEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaW5jbHVkZSAiVmlk
ZW9MYXllckNocm9taXVtLmgiCi0KLSNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJWaWRlb0Zy
YW1lQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJWaWRlb0ZyYW1lUHJvdmlkZXIuaCIKLSNpbmNsdWRl
ICJjYy9DQ0xheWVySW1wbC5oIgotI2luY2x1ZGUgImNjL0NDVGV4dHVyZVVwZGF0ZXIuaCIKICNp
bmNsdWRlICJjYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTUzLDIzNSArNDQsMjUgQEAgUGFzc1JlZlB0cjxWaWRlb0xheWVyQ2hyb21pdW0+IFZpZGVvTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWcKIAogVmlkZW9MYXllckNo
cm9taXVtOjpWaWRlb0xheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSwgVmlk
ZW9GcmFtZVByb3ZpZGVyKiBwcm92aWRlcikKICAgICA6IExheWVyQ2hyb21pdW0oZGVsZWdhdGUp
Ci0gICAgLCBtX3NraXBzRHJhdyh0cnVlKQotICAgICwgbV9mcmFtZUZvcm1hdChWaWRlb0ZyYW1l
Q2hyb21pdW06OkludmFsaWQpCiAgICAgLCBtX3Byb3ZpZGVyKHByb3ZpZGVyKQotICAgICwgbV9w
bGFuZXMoMCkKLSAgICAsIG1fbmF0aXZlVGV4dHVyZUlkKDApCiB7CisgICAgQVNTRVJUKG1fcHJv
dmlkZXIpOworICAgIG1fcHJvdmlkZXItPnNldFZpZGVvRnJhbWVQcm92aWRlckNsaWVudCh0aGlz
KTsKIH0KIAogVmlkZW9MYXllckNocm9taXVtOjp+VmlkZW9MYXllckNocm9taXVtKCkKIHsKLSAg
ICBjbGVhbnVwUmVzb3VyY2VzKCk7CisgICAgQVNTRVJUKCFtX3Byb3ZpZGVyKTsKIH0KIAogUGFz
c1JlZlB0cjxDQ0xheWVySW1wbD4gVmlkZW9MYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1w
bCgpCiB7Ci0gICAgcmV0dXJuIENDVmlkZW9MYXllckltcGw6OmNyZWF0ZShtX2xheWVySWQpOwot
fQotCi12b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpCi17Ci0gICAg
TGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBNYXhQbGFuZXM7ICsraSkKLSAgICAgICAgbV90ZXh0dXJlc1tpXS5tX3RleHR1cmUu
Y2xlYXIoKTsKLX0KLQotdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JS
ZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIENDVGV4dHVyZVVwZGF0ZXImIHVw
ZGF0ZXIpCi17Ci0gICAgaWYgKCFtX2RlbGVnYXRlIHx8ICFtX3Byb3ZpZGVyIHx8ICFkcmF3c0Nv
bnRlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX25lZWRzRGlzcGxheSAmJiB0
ZXh0dXJlc1ZhbGlkKCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IDA7IHBsYW5l
IDwgbV9wbGFuZXM7IHBsYW5lKyspIHsKLSAgICAgICAgICAgIE1hbmFnZWRUZXh0dXJlKiB0ZXgg
PSBtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoIXRl
eC0+cmVzZXJ2ZSh0ZXgtPnNpemUoKSwgdGV4LT5mb3JtYXQoKSkpIHsKLSAgICAgICAgICAgICAg
ICBtX3NraXBzRHJhdyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fcGxhbmVzID0g
MDsKLSAgICBtX3NraXBzRHJhdyA9IGZhbHNlOwotCi0gICAgVmlkZW9GcmFtZUNocm9taXVtKiBm
cmFtZSA9IG1fcHJvdmlkZXItPmdldEN1cnJlbnRGcmFtZSgpOwotICAgIGlmICghZnJhbWUpIHsK
LSAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOwotICAgICAgICBtX3Byb3ZpZGVyLT5wdXRDdXJy
ZW50RnJhbWUoZnJhbWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9mcmFtZUZv
cm1hdCA9IGZyYW1lLT5mb3JtYXQoKTsKLSAgICBHQzNEZW51bSB0ZXh0dXJlRm9ybWF0ID0gZGV0
ZXJtaW5lVGV4dHVyZUZvcm1hdChmcmFtZSk7Ci0gICAgaWYgKHRleHR1cmVGb3JtYXQgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxl
bWVudCBvdGhlciBwYXRocy4KLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgbV9z
a2lwc0RyYXcgPSB0cnVlOwotICAgICAgICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJhbWUoZnJh
bWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHRleHR1cmVGb3JtYXQgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpIHsKLSAgICAgICAgbV9uYXRpdmVUZXh0dXJl
SWQgPSBmcmFtZS0+dGV4dHVyZUlkKCk7Ci0gICAgICAgIG1fbmF0aXZlVGV4dHVyZVNpemUgPSBJ
bnRTaXplKGZyYW1lLT53aWR0aCgpLCBmcmFtZS0+aGVpZ2h0KCkpOwotICAgICAgICBtX25hdGl2
ZVRleHR1cmVWaXNpYmxlU2l6ZSA9IEludFNpemUoZnJhbWUtPndpZHRoKCksIGZyYW1lLT5oZWln
aHQoKSk7Ci0gICAgICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7Ci0gICAgICAgIG1fcHJvdmlk
ZXItPnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBBbGxvY2F0ZSB0ZXh0dXJlcyBmb3IgcGxhbmVzIGlmIHRoZXkgYXJlIG5vdCBhbGxvY2F0
ZWQgYWxyZWFkeSwgb3IKLSAgICAvLyByZWFsbG9jYXRlIHRleHR1cmVzIHRoYXQgYXJlIHRoZSB3
cm9uZyBzaXplIGZvciB0aGUgZnJhbWUuCi0gICAgYm9vbCB0ZXh0dXJlc1Jlc2VydmVkID0gcmVz
ZXJ2ZVRleHR1cmVzKGZyYW1lLCB0ZXh0dXJlRm9ybWF0KTsKLSAgICBpZiAoIXRleHR1cmVzUmVz
ZXJ2ZWQpIHsKLSAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOwotICAgICAgICBtX3Byb3ZpZGVy
LT5wdXRDdXJyZW50RnJhbWUoZnJhbWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Ly8gVXBkYXRlIHRleHR1cmUgcGxhbmVzLgotICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBw
bGFuZSA8IGZyYW1lLT5wbGFuZXMoKTsgcGxhbmUrKykgewotICAgICAgICBUZXh0dXJlJiB0ZXh0
dXJlID0gbV90ZXh0dXJlc1twbGFuZV07Ci0gICAgICAgIEFTU0VSVCh0ZXh0dXJlLm1fdGV4dHVy
ZSk7Ci0gICAgICAgIEFTU0VSVChmcmFtZS0+cmVxdWlyZWRUZXh0dXJlU2l6ZShwbGFuZSkgPT0g
dGV4dHVyZS5tX3RleHR1cmUtPnNpemUoKSk7Ci0gICAgICAgIHVwZGF0ZVRleHR1cmUoY29udGV4
dCwgdXBkYXRlci5hbGxvY2F0b3IoKSwgdGV4dHVyZSwgZnJhbWUtPmRhdGEocGxhbmUpKTsKLSAg
ICB9Ci0KLSAgICBtX3BsYW5lcyA9IGZyYW1lLT5wbGFuZXMoKTsKLSAgICBBU1NFUlQobV9wbGFu
ZXMgPD0gTWF4UGxhbmVzKTsKLQotICAgIG1fdXBkYXRlUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBv
aW50KCksIGJvdW5kcygpKTsKLSAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNlOwotCi0gICAgbV9w
cm92aWRlci0+cHV0Q3VycmVudEZyYW1lKGZyYW1lKTsKLX0KLQotdm9pZCBWaWRlb0xheWVyQ2hy
b21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQotewotICAgIExheWVy
Q2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXIpOwotCi0gICAgQ0NWaWRlb0xheWVySW1w
bCogdmlkZW9MYXllciA9IHN0YXRpY19jYXN0PENDVmlkZW9MYXllckltcGwqPihsYXllcik7Ci0g
ICAgdmlkZW9MYXllci0+c2V0U2tpcHNEcmF3KG1fc2tpcHNEcmF3KTsKLSAgICB2aWRlb0xheWVy
LT5zZXRGcmFtZUZvcm1hdChtX2ZyYW1lRm9ybWF0KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9wbGFuZXM7ICsraSkgewotICAgICAgICBpZiAoIW1fdGV4dHVyZXNbaV0ubV90ZXh0
dXJlKSB7Ci0gICAgICAgICAgICB2aWRlb0xheWVyLT5zZXRTa2lwc0RyYXcodHJ1ZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICB2aWRlb0xheWVyLT5zZXRUZXh0dXJl
KGksIG1fdGV4dHVyZXNbaV0ubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSwgbV90ZXh0dXJlc1tpXS5t
X3RleHR1cmUtPnNpemUoKSwgbV90ZXh0dXJlc1tpXS5tX3Zpc2libGVTaXplKTsKLSAgICB9Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9wbGFuZXM7IGkgPCBNYXhQbGFuZXM7ICsraSkKLSAgICAg
ICAgdmlkZW9MYXllci0+c2V0VGV4dHVyZShpLCAwLCBJbnRTaXplKCksIEludFNpemUoKSk7Ci0g
ICAgaWYgKG1fZnJhbWVGb3JtYXQgPT0gVmlkZW9GcmFtZUNocm9taXVtOjpOYXRpdmVUZXh0dXJl
KQotICAgICAgICB2aWRlb0xheWVyLT5zZXROYXRpdmVUZXh0dXJlKG1fbmF0aXZlVGV4dHVyZUlk
LCBtX25hdGl2ZVRleHR1cmVTaXplLCBtX25hdGl2ZVRleHR1cmVWaXNpYmxlU2l6ZSk7Ci19Ci0K
LXZvaWQgVmlkZW9MYXllckNocm9taXVtOjpzZXRMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9z
dCogaG9zdCkKLXsKLSAgICBpZiAoaG9zdCAmJiBsYXllclRyZWVIb3N0KCkgIT0gaG9zdCkgewot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTWF4UGxhbmVzOyArK2kpIHsKLSAgICAg
ICAgICAgIG1fdGV4dHVyZXNbaV0ubV92aXNpYmxlU2l6ZSA9IEludFNpemUoKTsKLSAgICAgICAg
ICAgIG1fdGV4dHVyZXNbaV0ubV90ZXh0dXJlID0gTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShob3N0
LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgTGF5
ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9zdChob3N0KTsKLX0KLQotR0MzRGVudW0gVmlkZW9M
YXllckNocm9taXVtOjpkZXRlcm1pbmVUZXh0dXJlRm9ybWF0KGNvbnN0IFZpZGVvRnJhbWVDaHJv
bWl1bSogZnJhbWUpCi17Ci0gICAgc3dpdGNoIChmcmFtZS0+Zm9ybWF0KCkpIHsKLSAgICBjYXNl
IFZpZGVvRnJhbWVDaHJvbWl1bTo6WVYxMjoKLSAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6
WVYxNjoKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U7Ci0gICAg
Y2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OlJHQkE6Ci0gICAgICAgIHJldHVybiBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQTsKLSAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6TmF0aXZlVGV4dHVy
ZToKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUU7Ci19Ci0KLWJvb2wgVmlkZW9MYXllckNocm9taXVtOjp0ZXh0dXJl
c1ZhbGlkKCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBtX3BsYW5l
czsgcGxhbmUrKykgewotICAgICAgICBNYW5hZ2VkVGV4dHVyZSogdGV4ID0gbV90ZXh0dXJlc1tw
bGFuZV0ubV90ZXh0dXJlLmdldCgpOwotICAgICAgICBpZiAoIXRleC0+aXNWYWxpZCh0ZXgtPnNp
emUoKSwgdGV4LT5mb3JtYXQoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZpZGVvTGF5ZXJDaHJvbWl1bTo6cmVzZXJ2ZVRl
eHR1cmVzKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUsIEdDM0RlbnVtIHRleHR1cmVG
b3JtYXQpCi17Ci0gICAgQVNTRVJUKGxheWVyVHJlZUhvc3QoKSk7Ci0gICAgQVNTRVJUKGZyYW1l
KTsKLSAgICBBU1NFUlQodGV4dHVyZUZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSk7Ci0KLSAgICBpbnQgbWF4VGV4dHVyZVNpemUgPSBsYXllclRyZWVIb3N0KCktPmxh
eWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZTsKLQotICAgIGZvciAodW5z
aWduZWQgcGxhbmUgPSAwOyBwbGFuZSA8IGZyYW1lLT5wbGFuZXMoKTsgcGxhbmUrKykgewotICAg
ICAgICBJbnRTaXplIHJlcXVpcmVkVGV4dHVyZVNpemUgPSBmcmFtZS0+cmVxdWlyZWRUZXh0dXJl
U2l6ZShwbGFuZSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHJlbmRlcmVyIGNhbm5vdCBoYW5kbGUg
dGhpcyBsYXJnZSBvZiBhIHRleHR1cmUsIHJldHVybiBmYWxzZS4KLSAgICAgICAgLy8gRklYTUU6
IFJlbW92ZSB0aGlzIHRlc3Qgd2hlbiB0aWxlZCBsYXllcnMgYXJlIGltcGxlbWVudGVkLgotICAg
ICAgICBpZiAocmVxdWlyZWRUZXh0dXJlU2l6ZS5pc1plcm8oKSB8fCByZXF1aXJlZFRleHR1cmVT
aXplLndpZHRoKCkgPiBtYXhUZXh0dXJlU2l6ZSB8fCByZXF1aXJlZFRleHR1cmVTaXplLmhlaWdo
dCgpID4gbWF4VGV4dHVyZVNpemUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgaWYgKCFtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgaWYgKG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS0+c2l6ZSgp
ICE9IHJlcXVpcmVkVGV4dHVyZVNpemUpCi0gICAgICAgICAgICBtX3RleHR1cmVzW3BsYW5lXS5t
X3Zpc2libGVTaXplID0gY29tcHV0ZVZpc2libGVTaXplKGZyYW1lLCBwbGFuZSk7Ci0KLSAgICAg
ICAgbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlLT5yZXNlcnZlKHJlcXVpcmVkVGV4dHVyZVNp
emUsIHRleHR1cmVGb3JtYXQpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1JbnRT
aXplIFZpZGVvTGF5ZXJDaHJvbWl1bTo6Y29tcHV0ZVZpc2libGVTaXplKGNvbnN0IFZpZGVvRnJh
bWVDaHJvbWl1bSogZnJhbWUsIHVuc2lnbmVkIHBsYW5lKQotewotICAgIGludCB2aXNpYmxlV2lk
dGggPSBmcmFtZS0+d2lkdGgocGxhbmUpOwotICAgIGludCB2aXNpYmxlSGVpZ2h0ID0gZnJhbWUt
PmhlaWdodChwbGFuZSk7Ci0gICAgLy8gV2hlbiB0aGVyZSBhcmUgZGVhZCBwaXhlbHMgYXQgdGhl
IGVkZ2Ugb2YgdGhlIHRleHR1cmUsIGRlY3JlYXNlCi0gICAgLy8gdGhlIGZyYW1lIHdpZHRoIGJ5
IDEgdG8gcHJldmVudCB0aGUgcmlnaHRtb3N0IHBpeGVscyBmcm9tCi0gICAgLy8gaW50ZXJwb2xh
dGluZyB3aXRoIHRoZSBkZWFkIHBpeGVscy4KLSAgICBpZiAoZnJhbWUtPmhhc1BhZGRpbmdCeXRl
cyhwbGFuZSkpCi0gICAgICAgIC0tdmlzaWJsZVdpZHRoOwotCi0gICAgLy8gSW4gWVYxMiwgZXZl
cnkgMngyIHNxdWFyZSBvZiBZIHZhbHVlcyBjb3JyZXNwb25kcyB0byBvbmUgVSBhbmQKLSAgICAv
LyBvbmUgViB2YWx1ZS4gSWYgd2UgZGVjcmVhc2UgdGhlIHdpZHRoIG9mIHRoZSBVViBwbGFuZSwg
d2UgbXVzdCBkZWNyZWFzZSB0aGUKLSAgICAvLyB3aWR0aCBvZiB0aGUgWSB0ZXh0dXJlIGJ5IDIg
Zm9yIHByb3BlciBhbGlnbm1lbnQuIFRoaXMgbXVzdCBoYXBwZW4KLSAgICAvLyBhbHdheXMsIGV2
ZW4gaWYgWSdzIHRleHR1cmUgZG9lcyBub3QgaGF2ZSBwYWRkaW5nIGJ5dGVzLgotICAgIGlmIChw
bGFuZSA9PSBWaWRlb0ZyYW1lQ2hyb21pdW06OnlQbGFuZSAmJiBmcmFtZS0+Zm9ybWF0KCkgPT0g
VmlkZW9GcmFtZUNocm9taXVtOjpZVjEyKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+aGFzUGFkZGlu
Z0J5dGVzKFZpZGVvRnJhbWVDaHJvbWl1bTo6dVBsYW5lKSkgewotICAgICAgICAgICAgaW50IG9y
aWdpbmFsV2lkdGggPSBmcmFtZS0+d2lkdGgocGxhbmUpOwotICAgICAgICAgICAgdmlzaWJsZVdp
ZHRoID0gb3JpZ2luYWxXaWR0aCAtIDI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
SW50U2l6ZSh2aXNpYmxlV2lkdGgsIHZpc2libGVIZWlnaHQpOwotfQotCi12b2lkIFZpZGVvTGF5
ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4
dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCB2b2lkKiBk
YXRhKSBjb25zdAotewotICAgIEFTU0VSVChjb250ZXh0KTsKLSAgICBBU1NFUlQodGV4dHVyZS5t
X3RleHR1cmUpOwotCi0gICAgdGV4dHVyZS5tX3RleHR1cmUtPmJpbmRUZXh0dXJlKGNvbnRleHQs
IGFsbG9jYXRvcik7Ci0KLSAgICBHQzNEZW51bSBmb3JtYXQgPSB0ZXh0dXJlLm1fdGV4dHVyZS0+
Zm9ybWF0KCk7Ci0gICAgSW50U2l6ZSBkaW1lbnNpb25zID0gdGV4dHVyZS5tX3RleHR1cmUtPnNp
emUoKTsKLQotICAgIHZvaWQqIG1lbSA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVt
Kj4oY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKS0+bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAwLCAwLCBkaW1lbnNpb25zLndpZHRoKCks
IGRpbWVuc2lvbnMuaGVpZ2h0KCksIGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEUsIEV4dGVuc2lvbnMzRENocm9taXVtOjpXUklURV9PTkxZKTsKLSAgICBpZiAobWVtKSB7
Ci0gICAgICAgIG1lbWNweShtZW0sIGRhdGEsIGRpbWVuc2lvbnMud2lkdGgoKSAqIGRpbWVuc2lv
bnMuaGVpZ2h0KCkpOwotICAgICAgICBHTEMoY29udGV4dCwgc3RhdGljX2Nhc3Q8RXh0ZW5zaW9u
czNEQ2hyb21pdW0qPihjb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpLT51bm1hcFRleFN1YkltYWdl
MkRDSFJPTUlVTShtZW0pKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBJZiBtYXBUZXhTdWJJ
bWFnZTJEQ0hST01JVU0gZmFpbHMsIHRoZW4gZG8gdGhlIHNsb3dlciB0ZXhTdWJJbWFnZTJECi0g
ICAgICAgIC8vIHVwbG9hZC4gVGhpcyBkb2VzIHR3aWNlIHRoZSBjb3BpZXMgYXMgbWFwVGV4U3Vi
SW1hZ2UyRENIUk9NSVVNLCBvbmUKLSAgICAgICAgLy8gaW4gdGhlIGNvbW1hbmQgYnVmZmVyIGFu
ZCBhbm90aGVyIHRvIHRoZSB0ZXh0dXJlLgotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgZGlt
ZW5zaW9ucy53aWR0aCgpLCBkaW1lbnNpb25zLmhlaWdodCgpLCBmb3JtYXQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFLCBkYXRhKSk7Ci0gICAgfQorICAgIFJlZlB0cjxDQ1ZpZGVv
TGF5ZXJJbXBsPiByZXQgPSBDQ1ZpZGVvTGF5ZXJJbXBsOjpjcmVhdGUobV9sYXllcklkLCBtX3By
b3ZpZGVyKTsKKyAgICBtX3Byb3ZpZGVyID0gMDsKKyAgICByZXR1cm4gcmV0OwogfQogCi12b2lk
IFZpZGVvTGF5ZXJDaHJvbWl1bTo6cmVsZWFzZVByb3ZpZGVyKCkKK3ZvaWQgVmlkZW9MYXllckNo
cm9taXVtOjpzdG9wVXNpbmdQcm92aWRlcigpCiB7CiAgICAgbV9wcm92aWRlciA9IDA7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRl
b0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDUxNmM4ZDM4NDdjMmFkYjY0YzViYmVmYjdj
OTljYWI1ZjVhZmFiYTMuLjNmZDU3MjZiNzllOThlNzcyMzkxY2ExZDFhODE0MDc4YzhjMGY5MDQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Zp
ZGVvTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oCkBAIC0zNSwxMyArMzUsMTUgQEAKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgi
Ci0jaW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKICNpbmNsdWRlICJWaWRlb0ZyYW1lUHJvdmlk
ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ1ZpZGVvTGF5ZXJJbXBsOwor
CiAvLyBBIExheWVyIHRoYXQgY29udGFpbnMgYSBWaWRlbyBlbGVtZW50LgotY2xhc3MgVmlkZW9M
YXllckNocm9taXVtIDogcHVibGljIExheWVyQ2hyb21pdW0geworY2xhc3MgVmlkZW9MYXllckNo
cm9taXVtIDogcHVibGljIExheWVyQ2hyb21pdW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAs
IHB1YmxpYyBWaWRlb0ZyYW1lUHJvdmlkZXI6OkNsaWVudCB7CiBwdWJsaWM6CiAKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxWaWRlb0xheWVyQ2hyb21pdW0+IGNyZWF0ZShDQ0xheWVyRGVsZWdhdGUq
ID0gMCwKQEAgLTUwLDQ1ICs1MiwxNCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8Q0NMYXllckltcGw+IGNyZWF0ZUNDTGF5ZXJJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4dHVyZVVw
ZGF0ZXImKTsKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogCi0gICAgdm9pZCByZWxlYXNlUHJvdmlkZXIoKTsKLQotICAgIHZpcnR1YWwgdm9p
ZCBwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0
TGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3QqKTsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1
YWwgdm9pZCBjbGVhbnVwUmVzb3VyY2VzKCk7CisgICAgdmlydHVhbCB2b2lkIHN0b3BVc2luZ1By
b3ZpZGVyKCk7CiAKIHByaXZhdGU6Ci0gICAgc3RydWN0IFRleHR1cmUgewotICAgICAgICBJbnRT
aXplIG1fdmlzaWJsZVNpemU7Ci0gICAgICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV90ZXh0
dXJlOwotICAgIH07Ci0KICAgICBWaWRlb0xheWVyQ2hyb21pdW0oQ0NMYXllckRlbGVnYXRlKiwg
VmlkZW9GcmFtZVByb3ZpZGVyKik7CiAKLSAgICBzdGF0aWMgR0MzRGVudW0gZGV0ZXJtaW5lVGV4
dHVyZUZvcm1hdChjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qKTsKLSAgICBzdGF0aWMgSW50U2l6
ZSBjb21wdXRlVmlzaWJsZVNpemUoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiwgdW5zaWduZWQg
cGxhbmUpOwotICAgIGJvb2wgdGV4dHVyZXNWYWxpZCgpOwotICAgIGJvb2wgcmVzZXJ2ZVRleHR1
cmVzKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSosIEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpOwot
ICAgIHZvaWQgdXBkYXRlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0
b3IqLCBUZXh0dXJlJiwgY29uc3Qgdm9pZCopIGNvbnN0OwotCi0gICAgdm9pZCByZXNldEZyYW1l
UGFyYW1ldGVycygpOwotCi0gICAgYm9vbCBtX3NraXBzRHJhdzsKLSAgICBWaWRlb0ZyYW1lQ2hy
b21pdW06OkZvcm1hdCBtX2ZyYW1lRm9ybWF0OwotICAgIFZpZGVvRnJhbWVQcm92aWRlciogbV9w
cm92aWRlcjsKLQotICAgIGVudW0geyBNYXhQbGFuZXMgPSAzIH07Ci0gICAgVGV4dHVyZSBtX3Rl
eHR1cmVzW01heFBsYW5lc107Ci0gICAgdW5zaWduZWQgbV9wbGFuZXM7Ci0KLSAgICB1bnNpZ25l
ZCBtX25hdGl2ZVRleHR1cmVJZDsKLSAgICBJbnRTaXplIG1fbmF0aXZlVGV4dHVyZVNpemU7Ci0g
ICAgSW50U2l6ZSBtX25hdGl2ZVRleHR1cmVWaXNpYmxlU2l6ZTsKKyAgICBWaWRlb0ZyYW1lUHJv
dmlkZXIqIG1fcHJvdmlkZXI7IC8vIE9ubHkgcG9wdWxhdGVkIGJldHdlZW4gY29uc3RydWN0aW9u
IGFuZCBjcmVhdGVDQ0xheWVySW1wbCBiZWluZyBjYWxsZWQuCiB9OwogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5
ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVmlkZW9MYXllckltcGwuY3BwCmluZGV4IDZiMzdlODZhNmNlNjhkNTFiYTUyY2E0OGMyM2M2
Zjc0ZjQ1NGNlYzkuLjYwOTM1MTBiY2I0YzlkNGFhZDgxZjFhNDc0MTM1YTFlMzQwN2Q5NGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VmlkZW9MYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCkBAIC0yOSw4ICsyOSwxMCBAQAogCiAj
aW5jbHVkZSAiY2MvQ0NWaWRlb0xheWVySW1wbC5oIgogCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNE
Q2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlByb2dyYW1CaW5kaW5nLmgiCiAjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC01OSw3OCArNjEsMjA3IEBAIGNvbnN0IGZsb2F0
IENDVmlkZW9MYXllckltcGw6Onl1dkFkanVzdFszXSA9IHsKICAgICAtMC41ZiwKIH07CiAKLUND
VmlkZW9MYXllckltcGw6OkNDVmlkZW9MYXllckltcGwoaW50IGlkKQorQ0NWaWRlb0xheWVySW1w
bDo6Q0NWaWRlb0xheWVySW1wbChpbnQgaWQsIFZpZGVvRnJhbWVQcm92aWRlciogcHJvdmlkZXIp
CiAgICAgOiBDQ0xheWVySW1wbChpZCkKKyAgICAsIG1fcHJvdmlkZXIocHJvdmlkZXIpCiB7Cisg
ICAgcHJvdmlkZXItPnNldFZpZGVvRnJhbWVQcm92aWRlckNsaWVudCh0aGlzKTsKIH0KIAogQ0NW
aWRlb0xheWVySW1wbDo6fkNDVmlkZW9MYXllckltcGwoKQogeworICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX3Byb3ZpZGVyTXV0ZXgpOworICAgIEFTU0VSVCghbV9wcm92aWRlcik7IC8vIENsZWFy
ZWQgZHVyaW5nIFZpZGVvTGF5ZXJDaHJvbWl1bTo6cmVsZWFzZVByb3ZpZGVyKCkuCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IE1heFBsYW5lczsgKytpKQorICAgICAgICBtX3RleHR1cmVz
W2ldLm1fdGV4dHVyZS5jbGVhcigpOwogICAgIGNsZWFudXBSZXNvdXJjZXMoKTsKIH0KIAotdm9p
ZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpzZXRUZXh0dXJlKHNpemVfdCBpbmRleCwgUGxhdGZvcm0zRE9i
amVjdCB0ZXh0dXJlSWQsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIHZpc2li
bGVTaXplKQordm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpzdG9wVXNpbmdQcm92aWRlcigpCiB7Ci0g
ICAgQVNTRVJUKGluZGV4IDwgMyk7Ci0gICAgbV90ZXh0dXJlc1tpbmRleF0uaWQgPSB0ZXh0dXJl
SWQ7Ci0gICAgbV90ZXh0dXJlc1tpbmRleF0uc2l6ZSA9IHNpemU7Ci0gICAgbV90ZXh0dXJlc1tp
bmRleF0udmlzaWJsZVNpemUgPSB2aXNpYmxlU2l6ZTsKKyAgICBNdXRleExvY2tlciBsb2NrZXIo
bV9wcm92aWRlck11dGV4KTsKKyAgICBtX3Byb3ZpZGVyID0gMDsKIH0KIAotdm9pZCBDQ1ZpZGVv
TGF5ZXJJbXBsOjpzZXROYXRpdmVUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkLCBj
b25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBJbnRTaXplJiB2aXNpYmxlU2l6ZSkKKy8vIENvbnZl
cnQgVmlkZW9GcmFtZUNocm9taXVtOjpGb3JtYXQgdG8gR3JhcGhpY3NDb250ZXh0M0QncyBmb3Jt
YXQgZW51bSB2YWx1ZXMuCitzdGF0aWMgR0MzRGVudW0gY29udmVydFZGQ0Zvcm1hdFRvR0MzREZv
cm1hdChWaWRlb0ZyYW1lQ2hyb21pdW06OkZvcm1hdCB2ZmNGb3JtYXQpCiB7Ci0gICAgbV9uYXRp
dmVUZXh0dXJlSWQgPSB0ZXh0dXJlSWQ7Ci0gICAgbV9uYXRpdmVUZXh0dXJlU2l6ZSA9IHNpemU7
Ci0gICAgbV9uYXRpdmVUZXh0dXJlVmlzaWJsZVNpemUgPSB2aXNpYmxlU2l6ZTsKKyAgICBzd2l0
Y2ggKHZmY0Zvcm1hdCkgeworICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpZVjEyOgorICAg
IGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpZVjE2OgorICAgICAgICByZXR1cm4gR3JhcGhpY3ND
b250ZXh0M0Q6OkxVTUlOQU5DRTsKKyAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6UkdCQToK
KyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOworICAgIGNhc2UgVmlkZW9G
cmFtZUNocm9taXVtOjpOYXRpdmVUZXh0dXJlOgorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQ7CisgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OkludmFsaWQ6
CisgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OlJHQjU1NToKKyAgICBjYXNlIFZpZGVvRnJh
bWVDaHJvbWl1bTo6UkdCNTY1OgorICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpSR0IyNDoK
KyAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6UkdCMzI6CisgICAgY2FzZSBWaWRlb0ZyYW1l
Q2hyb21pdW06Ok5WMTI6CisgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OkVtcHR5OgorICAg
IGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpBU0NJSToKKyAgICBjYXNlIFZpZGVvRnJhbWVDaHJv
bWl1bTo6STQyMDoKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisgICAgcmV0dXJu
IEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFOwogfQogCiB2b2lkIENDVmlkZW9MYXll
ckltcGw6OmRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQogewogICAg
IEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAKLSAgICBpZiAobV9za2lwc0RyYXcp
CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcHJvdmlkZXJNdXRleCk7CisKKyAgICBpZiAoIW1f
cHJvdmlkZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIHN3aXRjaCAobV9mcmFtZUZvcm1hdCkg
ewotICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpZVjEyOgotICAgIGNhc2UgVmlkZW9GcmFt
ZUNocm9taXVtOjpZVjE2OgorICAgIFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUgPSBtX3Byb3Zp
ZGVyLT5nZXRDdXJyZW50RnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47
CisgICAgR0MzRGVudW0gZm9ybWF0ID0gY29udmVydFZGQ0Zvcm1hdFRvR0MzREZvcm1hdChmcmFt
ZS0+Zm9ybWF0KCkpOworCisgICAgaWYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFjb3B5RnJhbWVUb1RleHR1
cmVzKGZyYW1lLCBmb3JtYXQsIGxheWVyUmVuZGVyZXIpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5D
RToKICAgICAgICAgZHJhd1lVVihsYXllclJlbmRlcmVyKTsKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OlJHQkE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQToKICAgICAgICAgZHJhd1JHQkEobGF5ZXJSZW5kZXJlcik7CiAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpOYXRpdmVUZXh0dXJlOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6CiAgICAgICAgIGRyYXdOYXRpdmVUZXh0dXJl
KGxheWVyUmVuZGVyZXIpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICAv
LyBGSVhNRTogSW1wbGVtZW50IG90aGVyIHBhdGhzLgotICAgICAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgICAgICBicmVhazsKKyAgICAgICAgQ1JBU0goKTsgLy8gU29tZW9uZSB1cGRhdGVkIGNv
bnZlcnRWRkNGb3JtYXRUb0dDM0RGb3JtYXQgYWJvdmUgYnV0IHVwZGF0ZSB0aGlzIQorICAgIH0K
KworICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBwbGFuZSA8IGZyYW1lLT5wbGFuZXMoKTsg
KytwbGFuZSkKKyAgICAgICAgbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlLT51bnJlc2VydmUo
KTsKKyAgICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJhbWUoZnJhbWUpOworfQorCitib29sIEND
VmlkZW9MYXllckltcGw6OmNvcHlGcmFtZVRvVGV4dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9t
aXVtKiBmcmFtZSwgR0MzRGVudW0gZm9ybWF0LCBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVy
UmVuZGVyZXIpCit7CisgICAgaWYgKGZyYW1lLT5mb3JtYXQoKSA9PSBWaWRlb0ZyYW1lQ2hyb21p
dW06Ok5hdGl2ZVRleHR1cmUpIHsKKyAgICAgICAgbV9uYXRpdmVUZXh0dXJlSWQgPSBmcmFtZS0+
dGV4dHVyZUlkKCk7CisgICAgICAgIG1fbmF0aXZlVGV4dHVyZVNpemUgPSBJbnRTaXplKGZyYW1l
LT53aWR0aCgpLCBmcmFtZS0+aGVpZ2h0KCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBpZiAoIXJlc2VydmVUZXh0dXJlcyhmcmFtZSwgZm9ybWF0LCBsYXllclJlbmRlcmVy
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IDA7
IHBsYW5lIDwgZnJhbWUtPnBsYW5lcygpOyArK3BsYW5lKSB7CisgICAgICAgIEFTU0VSVChmcmFt
ZS0+cmVxdWlyZWRUZXh0dXJlU2l6ZShwbGFuZSkgPT0gbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0
dXJlLT5zaXplKCkpOworICAgICAgICBjb3B5UGxhbmVUb1RleHR1cmUobGF5ZXJSZW5kZXJlciwg
ZnJhbWUtPmRhdGEocGxhbmUpLCBwbGFuZSk7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgcGxh
bmUgPSBmcmFtZS0+cGxhbmVzKCk7IHBsYW5lIDwgTWF4UGxhbmVzOyArK3BsYW5lKSB7CisgICAg
ICAgIFRleHR1cmUmIHRleHR1cmUgPSBtX3RleHR1cmVzW3BsYW5lXTsKKyAgICAgICAgdGV4dHVy
ZS5tX3RleHR1cmUuY2xlYXIoKTsKKyAgICAgICAgdGV4dHVyZS5tX3Zpc2libGVTaXplID0gSW50
U2l6ZSgpOworICAgIH0KKyAgICBtX3BsYW5lcyA9IGZyYW1lLT5wbGFuZXMoKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpjb3B5UGxhbmVUb1RleHR1cmUo
TGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCB2b2lkKiBwbGFuZSwg
aW50IGluZGV4KQoreworICAgIFRleHR1cmUmIHRleHR1cmUgPSBtX3RleHR1cmVzW2luZGV4XTsK
KyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXItPmNvbnRleHQo
KTsKKyAgICBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBsYXllclJlbmRlcmVyLT5yZW5k
ZXJTdXJmYWNlVGV4dHVyZUFsbG9jYXRvcigpOworICAgIHRleHR1cmUubV90ZXh0dXJlLT5iaW5k
VGV4dHVyZShjb250ZXh0LCBhbGxvY2F0b3IpOworICAgIEdDM0RlbnVtIGZvcm1hdCA9IHRleHR1
cmUubV90ZXh0dXJlLT5mb3JtYXQoKTsKKyAgICBJbnRTaXplIGRpbWVuc2lvbnMgPSB0ZXh0dXJl
Lm1fdGV4dHVyZS0+c2l6ZSgpOworCisgICAgdm9pZCogbWVtID0gc3RhdGljX2Nhc3Q8RXh0ZW5z
aW9uczNEQ2hyb21pdW0qPihjb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpLT5tYXBUZXhTdWJJbWFn
ZTJEQ0hST01JVU0oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDAsIDAsIGRpbWVu
c2lvbnMud2lkdGgoKSwgZGltZW5zaW9ucy5oZWlnaHQoKSwgZm9ybWF0LCBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfQllURSwgRXh0ZW5zaW9uczNEQ2hyb21pdW06OldSSVRFX09OTFkpOwor
ICAgIGlmIChtZW0pIHsKKyAgICAgICAgbWVtY3B5KG1lbSwgcGxhbmUsIGRpbWVuc2lvbnMud2lk
dGgoKSAqIGRpbWVuc2lvbnMuaGVpZ2h0KCkpOworICAgICAgICBHTEMoY29udGV4dCwgc3RhdGlj
X2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihjb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpLT51
bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShtZW0pKTsKKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBJZiBtYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0gZmFpbHMsIHRoZW4gZG8gdGhlIHNsb3dlciB0
ZXhTdWJJbWFnZTJECisgICAgICAgIC8vIHVwbG9hZC4gVGhpcyBkb2VzIHR3aWNlIHRoZSBjb3Bp
ZXMgYXMgbWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNLCBvbmUKKyAgICAgICAgLy8gaW4gdGhlIGNv
bW1hbmQgYnVmZmVyIGFuZCBhbm90aGVyIHRvIHRoZSB0ZXh0dXJlLgorICAgICAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgMCwgMCwgMCwgZGltZW5zaW9ucy53aWR0aCgpLCBkaW1lbnNpb25zLmhlaWdodCgpLCBmb3Jt
YXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBwbGFuZSkpOwogICAgIH0KIH0K
IAorc3RhdGljIEludFNpemUgY29tcHV0ZVZpc2libGVTaXplKGNvbnN0IFZpZGVvRnJhbWVDaHJv
bWl1bSogZnJhbWUsIHVuc2lnbmVkIHBsYW5lKQoreworICAgIGludCB2aXNpYmxlV2lkdGggPSBm
cmFtZS0+d2lkdGgocGxhbmUpOworICAgIGludCB2aXNpYmxlSGVpZ2h0ID0gZnJhbWUtPmhlaWdo
dChwbGFuZSk7CisgICAgLy8gV2hlbiB0aGVyZSBhcmUgZGVhZCBwaXhlbHMgYXQgdGhlIGVkZ2Ug
b2YgdGhlIHRleHR1cmUsIGRlY3JlYXNlCisgICAgLy8gdGhlIGZyYW1lIHdpZHRoIGJ5IDEgdG8g
cHJldmVudCB0aGUgcmlnaHRtb3N0IHBpeGVscyBmcm9tCisgICAgLy8gaW50ZXJwb2xhdGluZyB3
aXRoIHRoZSBkZWFkIHBpeGVscy4KKyAgICBpZiAoZnJhbWUtPmhhc1BhZGRpbmdCeXRlcyhwbGFu
ZSkpCisgICAgICAgIC0tdmlzaWJsZVdpZHRoOworCisgICAgLy8gSW4gWVYxMiwgZXZlcnkgMngy
IHNxdWFyZSBvZiBZIHZhbHVlcyBjb3JyZXNwb25kcyB0byBvbmUgVSBhbmQKKyAgICAvLyBvbmUg
ViB2YWx1ZS4gSWYgd2UgZGVjcmVhc2UgdGhlIHdpZHRoIG9mIHRoZSBVViBwbGFuZSwgd2UgbXVz
dCBkZWNyZWFzZSB0aGUKKyAgICAvLyB3aWR0aCBvZiB0aGUgWSB0ZXh0dXJlIGJ5IDIgZm9yIHBy
b3BlciBhbGlnbm1lbnQuIFRoaXMgbXVzdCBoYXBwZW4KKyAgICAvLyBhbHdheXMsIGV2ZW4gaWYg
WSdzIHRleHR1cmUgZG9lcyBub3QgaGF2ZSBwYWRkaW5nIGJ5dGVzLgorICAgIGlmIChwbGFuZSA9
PSBWaWRlb0ZyYW1lQ2hyb21pdW06OnlQbGFuZSAmJiBmcmFtZS0+Zm9ybWF0KCkgPT0gVmlkZW9G
cmFtZUNocm9taXVtOjpZVjEyKSB7CisgICAgICAgIGlmIChmcmFtZS0+aGFzUGFkZGluZ0J5dGVz
KFZpZGVvRnJhbWVDaHJvbWl1bTo6dVBsYW5lKSkgeworICAgICAgICAgICAgaW50IG9yaWdpbmFs
V2lkdGggPSBmcmFtZS0+d2lkdGgocGxhbmUpOworICAgICAgICAgICAgdmlzaWJsZVdpZHRoID0g
b3JpZ2luYWxXaWR0aCAtIDI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gSW50U2l6
ZSh2aXNpYmxlV2lkdGgsIHZpc2libGVIZWlnaHQpOworfQorCitib29sIENDVmlkZW9MYXllcklt
cGw6OnJlc2VydmVUZXh0dXJlcyhjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lLCBHQzNE
ZW51bSBmb3JtYXQsIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKK3sKKyAg
ICBpZiAoZnJhbWUtPnBsYW5lcygpID4gTWF4UGxhbmVzKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaW50IG1heFRleHR1cmVTaXplID0gbGF5ZXJSZW5kZXJlci0+Y2FwYWJpbGl0aWVzKCku
bWF4VGV4dHVyZVNpemU7CisgICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IDA7IHBsYW5lIDwgZnJh
bWUtPnBsYW5lcygpOyArK3BsYW5lKSB7CisgICAgICAgIEludFNpemUgcmVxdWlyZWRUZXh0dXJl
U2l6ZSA9IGZyYW1lLT5yZXF1aXJlZFRleHR1cmVTaXplKHBsYW5lKTsKKyAgICAgICAgLy8gSWYg
dGhlIHJlbmRlcmVyIGNhbm5vdCBoYW5kbGUgdGhpcyBsYXJnZSBvZiBhIHRleHR1cmUsIHJldHVy
biBmYWxzZS4KKyAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHRlc3Qgd2hlbiB0aWxlZCBs
YXllcnMgYXJlIGltcGxlbWVudGVkLgorICAgICAgICBpZiAocmVxdWlyZWRUZXh0dXJlU2l6ZS5p
c1plcm8oKSB8fCByZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCkgPiBtYXhUZXh0dXJlU2l6ZSB8
fCByZXF1aXJlZFRleHR1cmVTaXplLmhlaWdodCgpID4gbWF4VGV4dHVyZVNpemUpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0
dXJlKSB7CisgICAgICAgICAgICBtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUgPSBNYW5hZ2Vk
VGV4dHVyZTo6Y3JlYXRlKGxheWVyUmVuZGVyZXItPnJlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdl
cigpKTsKKyAgICAgICAgICAgIGlmICghbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG1fdGV4dHVyZXNbcGxhbmVd
Lm1fdmlzaWJsZVNpemUgPSBJbnRTaXplKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fdGV4
dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS0+c2l6ZSgpICE9IHJlcXVpcmVkVGV4dHVyZVNpemUpCisg
ICAgICAgICAgICBtX3RleHR1cmVzW3BsYW5lXS5tX3Zpc2libGVTaXplID0gY29tcHV0ZVZpc2li
bGVTaXplKGZyYW1lLCBwbGFuZSk7CisgICAgICAgIG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVy
ZS0+cmVzZXJ2ZShyZXF1aXJlZFRleHR1cmVTaXplLCBmb3JtYXQpOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwogdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3WVVWKExheWVyUmVuZGVy
ZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikgY29uc3QKIHsKICAgICBjb25zdCBZVVZQcm9ncmFt
KiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dmlkZW9MYXllcllVVlByb2dyYW0oKTsKICAgICBB
U1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgpKTsKIAogICAgIEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOwotICAgIENDVmlk
ZW9MYXllckltcGw6OlRleHR1cmUgeVRleHR1cmUgPSBtX3RleHR1cmVzW1ZpZGVvRnJhbWVDaHJv
bWl1bTo6eVBsYW5lXTsKLSAgICBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlIHVUZXh0dXJlID0g
bV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnVQbGFuZV07Ci0gICAgQ0NWaWRlb0xheWVy
SW1wbDo6VGV4dHVyZSB2VGV4dHVyZSA9IG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjp2
UGxhbmVdOworICAgIGNvbnN0IFRleHR1cmUmIHlUZXh0dXJlID0gbV90ZXh0dXJlc1tWaWRlb0Zy
YW1lQ2hyb21pdW06OnlQbGFuZV07CisgICAgY29uc3QgVGV4dHVyZSYgdVRleHR1cmUgPSBtX3Rl
eHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6dVBsYW5lXTsKKyAgICBjb25zdCBUZXh0dXJlJiB2
VGV4dHVyZSA9IG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjp2UGxhbmVdOwogCiAgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkUxKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCB5VGV4dHVyZS5pZCkpOworICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgeVRleHR1
cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOwogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5h
Y3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMikpOwotICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
dVRleHR1cmUuaWQpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHVUZXh0dXJlLm1fdGV4dHVyZS0+dGV4dHVyZUlk
KCkpKTsKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRTMpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHZUZXh0dXJlLmlkKSk7CisgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCB2VGV4dHVyZS5tX3RleHR1cmUtPnRleHR1cmVJZCgpKSk7CiAKICAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKIAotICAgIGZsb2F0
IHlXaWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHlUZXh0dXJlLnZpc2libGVT
aXplLndpZHRoKCkpIC8geVRleHR1cmUuc2l6ZS53aWR0aCgpOworICAgIGZsb2F0IHlXaWR0aFNj
YWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHlUZXh0dXJlLm1fdmlzaWJsZVNpemUud2lk
dGgoKSkgLyB5VGV4dHVyZS5tX3RleHR1cmUtPnNpemUoKS53aWR0aCgpOwogICAgIC8vIEFyYml0
cmFyaWx5IHRha2UgdGhlIHUgc2l6ZXMgYmVjYXVzZSB1IGFuZCB2IGRpbWVuc2lvbnMgYXJlIGlk
ZW50aWNhbC4KLSAgICBmbG9hdCB1dldpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9h
dD4odVRleHR1cmUudmlzaWJsZVNpemUud2lkdGgoKSkgLyB1VGV4dHVyZS5zaXplLndpZHRoKCk7
CisgICAgZmxvYXQgdXZXaWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHVUZXh0
dXJlLm1fdmlzaWJsZVNpemUud2lkdGgoKSkgLyB1VGV4dHVyZS5tX3RleHR1cmUtPnNpemUoKS53
aWR0aCgpOwogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWYocHJvZ3JhbS0+dmVy
dGV4U2hhZGVyKCkueVdpZHRoU2NhbGVGYWN0b3JMb2NhdGlvbigpLCB5V2lkdGhTY2FsZUZhY3Rv
cikpOwogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWYocHJvZ3JhbS0+dmVydGV4
U2hhZGVyKCkudXZXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24oKSwgdXZXaWR0aFNjYWxlRmFjdG9y
KSk7CiAKQEAgLTE1MCwyMSArMjgxLDE4IEBAIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhd1lV
VihMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpIGNvbnN0CiAgICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUw
KSk7CiB9CiAKLXZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhd1JHQkEoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKiBsYXllclJlbmRlcmVyKSBjb25zdAordGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4KK3Zv
aWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhd0NvbW1vbihMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxh
eWVyUmVuZGVyZXIsIFByb2dyYW0qIHByb2dyYW0sIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IsIFBs
YXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkKSBjb25zdAogewotICAgIGNvbnN0IFJHQkFQcm9ncmFt
KiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dmlkZW9MYXllclJHQkFQcm9ncmFtKCk7CiAgICAg
QVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7CiAKICAgICBHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKLSAgICBDQ1Zp
ZGVvTGF5ZXJJbXBsOjpUZXh0dXJlIHRleHR1cmUgPSBtX3RleHR1cmVzW1ZpZGVvRnJhbWVDaHJv
bWl1bTo6cmdiUGxhbmVdOwogCiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRl
eHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlLmlk
KSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpKTsKIAogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOwotICAgIGZsb2F0IHdpZHRoU2NhbGVG
YWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4odGV4dHVyZS52aXNpYmxlU2l6ZS53aWR0aCgpKSAv
IHRleHR1cmUuc2l6ZS53aWR0aCgpOwogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3Jt
NGYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgMCwgMCwg
d2lkdGhTY2FsZUZhY3RvciwgMSkpOwotCiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZv
cm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7CiAK
ICAgICBsYXllclJlbmRlcmVyLT5kcmF3VGV4dHVyZWRRdWFkKGRyYXdUcmFuc2Zvcm0oKSwgYm91
bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGRyYXdPcGFjaXR5KCksIGxheWVyUmVu
ZGVyZXItPnNoYXJlZEdlb21ldHJ5UXVhZCgpLApAQCAtMTczLDI2ICszMDEsMTggQEAgdm9pZCBD
Q1ZpZGVvTGF5ZXJJbXBsOjpkcmF3UkdCQShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVu
ZGVyZXIpIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7CiB9
CiAKK3ZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhd1JHQkEoTGF5ZXJSZW5kZXJlckNocm9taXVt
KiBsYXllclJlbmRlcmVyKSBjb25zdAoreworICAgIGNvbnN0IFJHQkFQcm9ncmFtKiBwcm9ncmFt
ID0gbGF5ZXJSZW5kZXJlci0+dmlkZW9MYXllclJHQkFQcm9ncmFtKCk7CisgICAgY29uc3QgVGV4
dHVyZSYgdGV4dHVyZSA9IG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjpyZ2JQbGFuZV07
CisgICAgZmxvYXQgd2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0Pih0ZXh0dXJl
Lm1fdmlzaWJsZVNpemUud2lkdGgoKSkgLyB0ZXh0dXJlLm1fdGV4dHVyZS0+c2l6ZSgpLndpZHRo
KCk7CisgICAgZHJhd0NvbW1vbihsYXllclJlbmRlcmVyLCBwcm9ncmFtLCB3aWR0aFNjYWxlRmFj
dG9yLCB0ZXh0dXJlLm1fdGV4dHVyZS0+dGV4dHVyZUlkKCkpOworfQorCiB2b2lkIENDVmlkZW9M
YXllckltcGw6OmRyYXdOYXRpdmVUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJS
ZW5kZXJlcikgY29uc3QKIHsKICAgICBjb25zdCBOYXRpdmVUZXh0dXJlUHJvZ3JhbSogcHJvZ3Jh
bSA9IGxheWVyUmVuZGVyZXItPnZpZGVvTGF5ZXJOYXRpdmVUZXh0dXJlUHJvZ3JhbSgpOwotICAg
IEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwotCi0gICAgR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyLT5jb250ZXh0KCk7Ci0KLSAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRTApKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fbmF0aXZlVGV4dHVyZUlkKSk7Ci0KLSAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKLSAgICBmbG9h
dCB3aWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbmF0aXZlVGV4dHVyZVZp
c2libGVTaXplLndpZHRoKCkpIC8gbV9uYXRpdmVUZXh0dXJlU2l6ZS53aWR0aCgpOwotICAgIEdM
Qyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudGV4
VHJhbnNmb3JtTG9jYXRpb24oKSwgMCwgMCwgd2lkdGhTY2FsZUZhY3RvciwgMSkpOwotCi0gICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigp
LnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7Ci0KLSAgICBsYXllclJlbmRlcmVyLT5kcmF3VGV4dHVy
ZWRRdWFkKGRyYXdUcmFuc2Zvcm0oKSwgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0
KCksIGRyYXdPcGFjaXR5KCksIGxheWVyUmVuZGVyZXItPnNoYXJlZEdlb21ldHJ5UXVhZCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVy
KCkubWF0cml4TG9jYXRpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLTEpOworICAgIGRyYXdDb21tb24obGF5ZXJSZW5kZXJl
ciwgcHJvZ3JhbSwgMSwgbV9uYXRpdmVUZXh0dXJlSWQpOwogfQogCiB2b2lkIENDVmlkZW9MYXll
ckltcGw6OmR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKaW5kZXggZTUzMTdhZDM0ZGFlZmNiNTA2
MTE2ZTlkMzgwOGJmYTVmOTJhYjczMC4uYTUzZGFmZjRiOGU0OWRiNzYzMjA5YmFhMjdkMGNiMzkz
MWY0ZDVkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaApAQCAtMjYsMjEgKzI2LDIz
IEBACiAjaWZuZGVmIENDVmlkZW9MYXllckltcGxfaAogI2RlZmluZSBDQ1ZpZGVvTGF5ZXJJbXBs
X2gKIAotI2luY2x1ZGUgIlByb2dyYW1CaW5kaW5nLmgiCisjaW5jbHVkZSAiTWFuYWdlZFRleHR1
cmUuaCIKICNpbmNsdWRlICJTaGFkZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlZpZGVvRnJhbWVD
aHJvbWl1bS5oIgorI2luY2x1ZGUgIlZpZGVvRnJhbWVQcm92aWRlci5oIgogI2luY2x1ZGUgIlZp
ZGVvTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgVmlkZW9GcmFtZVByb3ZpZGVyOwordGVtcGxhdGU8Y2xh
c3MgVmVydGV4U2hhZGVyLCBjbGFzcyBGcmFnbWVudFNoYWRlcj4gY2xhc3MgUHJvZ3JhbUJpbmRp
bmc7CiAKLWNsYXNzIENDVmlkZW9MYXllckltcGwgOiBwdWJsaWMgQ0NMYXllckltcGwgeworY2xh
c3MgQ0NWaWRlb0xheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbAorICAgICAgICAgICAgICAg
ICAgICAgICAsIHB1YmxpYyBWaWRlb0ZyYW1lUHJvdmlkZXI6OkNsaWVudCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NWaWRlb0xheWVySW1wbD4gY3JlYXRlKGludCBpZCkKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1ZpZGVvTGF5ZXJJbXBsPiBjcmVhdGUoaW50IGlkLCBWaWRl
b0ZyYW1lUHJvdmlkZXIqIHByb3ZpZGVyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDQ1ZpZGVvTGF5ZXJJbXBsKGlkKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Q0NWaWRlb0xheWVySW1wbChpZCwgcHJvdmlkZXIpKTsKICAgICB9CiAgICAgdmlydHVhbCB+Q0NW
aWRlb0xheWVySW1wbCgpOwogCkBAIC01MiwzNiArNTQsMzcgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNv
bnN0OwogCi0gICAgdm9pZCBzZXRTa2lwc0RyYXcoYm9vbCBza2lwc0RyYXcpIHsgbV9za2lwc0Ry
YXcgPSBza2lwc0RyYXc7IH0KLSAgICB2b2lkIHNldEZyYW1lRm9ybWF0KFZpZGVvRnJhbWVDaHJv
bWl1bTo6Rm9ybWF0IGZvcm1hdCkgeyBtX2ZyYW1lRm9ybWF0ID0gZm9ybWF0OyB9Ci0gICAgdm9p
ZCBzZXRUZXh0dXJlKHNpemVfdCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQsIGNvbnN0IElu
dFNpemUmLCBjb25zdCBJbnRTaXplJiB2aXNpYmxlU2l6ZSk7Ci0gICAgdm9pZCBzZXROYXRpdmVU
ZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkLCBjb25zdCBJbnRTaXplJiwgY29uc3Qg
SW50U2l6ZSYgdmlzaWJsZVNpemUpOworICAgIHZpcnR1YWwgdm9pZCBzdG9wVXNpbmdQcm92aWRl
cigpOwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IENDVmlkZW9MYXllckltcGwoaW50KTsKKyAg
ICBleHBsaWNpdCBDQ1ZpZGVvTGF5ZXJJbXBsKGludCwgVmlkZW9GcmFtZVByb3ZpZGVyKik7CiAK
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1
cm4gIlZpZGVvTGF5ZXIiOyB9CiAKLSAgICBzdHJ1Y3QgVGV4dHVyZSB7Ci0gICAgICAgIFBsYXRm
b3JtM0RPYmplY3QgaWQ7Ci0gICAgICAgIEludFNpemUgc2l6ZTsKLSAgICAgICAgSW50U2l6ZSB2
aXNpYmxlU2l6ZTsKLSAgICB9OwotCisgICAgYm9vbCBjb3B5RnJhbWVUb1RleHR1cmVzKGNvbnN0
IFZpZGVvRnJhbWVDaHJvbWl1bSosIEdDM0RlbnVtIGZvcm1hdCwgTGF5ZXJSZW5kZXJlckNocm9t
aXVtKik7CisgICAgdm9pZCBjb3B5UGxhbmVUb1RleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVt
KiwgY29uc3Qgdm9pZCogcGxhbmUsIGludCBpbmRleCk7CisgICAgYm9vbCByZXNlcnZlVGV4dHVy
ZXMoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiwgR0MzRGVudW0gZm9ybWF0LCBMYXllclJlbmRl
cmVyQ2hyb21pdW0qKTsKICAgICB2b2lkIGRyYXdZVVYoTGF5ZXJSZW5kZXJlckNocm9taXVtKikg
Y29uc3Q7CiAgICAgdm9pZCBkcmF3UkdCQShMYXllclJlbmRlcmVyQ2hyb21pdW0qKSBjb25zdDsK
ICAgICB2b2lkIGRyYXdOYXRpdmVUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSopIGNvbnN0
OworICAgIHRlbXBsYXRlPGNsYXNzIFByb2dyYW0+IHZvaWQgZHJhd0NvbW1vbihMYXllclJlbmRl
cmVyQ2hyb21pdW0qLCBQcm9ncmFtKiwgZmxvYXQgd2lkdGhTY2FsZUZhY3RvciwgUGxhdGZvcm0z
RE9iamVjdCB0ZXh0dXJlSWQpIGNvbnN0OworCisgICAgTXV0ZXggbV9wcm92aWRlck11dGV4OyAv
LyBHdWFyZHMgbV9wcm92aWRlciBiZWxvdy4KKyAgICBWaWRlb0ZyYW1lUHJvdmlkZXIqIG1fcHJv
dmlkZXI7CiAKICAgICBzdGF0aWMgY29uc3QgZmxvYXQgeXV2MlJHQls5XTsKICAgICBzdGF0aWMg
Y29uc3QgZmxvYXQgeXV2QWRqdXN0WzNdOwogCi0gICAgYm9vbCBtX3NraXBzRHJhdzsKLSAgICBW
aWRlb0ZyYW1lQ2hyb21pdW06OkZvcm1hdCBtX2ZyYW1lRm9ybWF0OwotICAgIFRleHR1cmUgbV90
ZXh0dXJlc1szXTsKKyAgICBzdHJ1Y3QgVGV4dHVyZSB7CisgICAgICAgIE93blB0cjxNYW5hZ2Vk
VGV4dHVyZT4gbV90ZXh0dXJlOworICAgICAgICBJbnRTaXplIG1fdmlzaWJsZVNpemU7CisgICAg
fTsKKyAgICBlbnVtIHsgTWF4UGxhbmVzID0gMyB9OworICAgIFRleHR1cmUgbV90ZXh0dXJlc1tN
YXhQbGFuZXNdOworICAgIGludCBtX3BsYW5lczsKIAogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9u
YXRpdmVUZXh0dXJlSWQ7CiAgICAgSW50U2l6ZSBtX25hdGl2ZVRleHR1cmVTaXplOwotICAgIElu
dFNpemUgbV9uYXRpdmVUZXh0dXJlVmlzaWJsZVNpemU7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcApp
bmRleCA5OTM2MWVkOTQxYWE0NjMwNmQ1NjdiZDIzZDhkY2RlYWRmNjVhOTk2Li5lMjAxM2VkZDMy
OGY1NTg4ODNlZDE0OWE2YTc5YjYxMzQ3MzM4NGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAKQEAgLTYyLDI5
ICs2Miw2IEBAIHN0YXRpYyBQYXNzT3duUHRyPFdlYk1lZGlhUGxheWVyPiBjcmVhdGVXZWJNZWRp
YVBsYXllcihXZWJNZWRpYVBsYXllckNsaWVudCogY2xpCiAgICAgcmV0dXJuIGFkb3B0UHRyKHdl
YkZyYW1lLT5jbGllbnQoKS0+Y3JlYXRlTWVkaWFQbGF5ZXIod2ViRnJhbWUsIGNsaWVudCkpOwog
fQogCi1zdGF0aWMgYm9vbCBpc1ZpZGVvRnJhbWVGb3JtYXRPcGFxdWUoV2ViVmlkZW9GcmFtZTo6
Rm9ybWF0IGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgV2ViVmlk
ZW9GcmFtZTo6Rm9ybWF0SW52YWxpZDoKLSAgICBjYXNlIFdlYlZpZGVvRnJhbWU6OkZvcm1hdEVt
cHR5OgotICAgIGNhc2UgV2ViVmlkZW9GcmFtZTo6Rm9ybWF0UkdCQToKLSAgICBjYXNlIFdlYlZp
ZGVvRnJhbWU6OkZvcm1hdE5hdGl2ZVRleHR1cmU6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBjYXNlIFdlYlZpZGVvRnJhbWU6OkZvcm1hdFJHQjU1NToKLSAgICBjYXNlIFdlYlZpZGVvRnJh
bWU6OkZvcm1hdFJHQjU2NToKLSAgICBjYXNlIFdlYlZpZGVvRnJhbWU6OkZvcm1hdFJHQjI0Ogot
ICAgIGNhc2UgV2ViVmlkZW9GcmFtZTo6Rm9ybWF0UkdCMzI6Ci0gICAgY2FzZSBXZWJWaWRlb0Zy
YW1lOjpGb3JtYXRZVjEyOgotICAgIGNhc2UgV2ViVmlkZW9GcmFtZTo6Rm9ybWF0WVYxNjoKLSAg
ICBjYXNlIFdlYlZpZGVvRnJhbWU6OkZvcm1hdE5WMTI6Ci0gICAgY2FzZSBXZWJWaWRlb0ZyYW1l
OjpGb3JtYXRBU0NJSToKLSAgICBjYXNlIFdlYlZpZGVvRnJhbWU6OkZvcm1hdEk0MjA6Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KIGJvb2wgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjptX2lzRW5h
YmxlZCA9IGZhbHNlOwogCiBib29sIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6aXNFbmFibGVk
KCkKQEAgLTEyNCwxMCArMTAxLDEwIEBAIFdlYk1lZGlhUGxheWVyKiBXZWJNZWRpYVBsYXllckNs
aWVudEltcGw6Om1lZGlhUGxheWVyKCkgY29uc3QKIAogV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBs
Ojp+V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsKCkKIHsKLSAgICAvLyBWaWRlb0xheWVyQ2hyb21p
dW0gbWF5IG91dGxpdmUgdGhpcyBvYmplY3Qgc28gY2xlYXIgdGhlIGJhY2sgcG9pbnRlci4KICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKG1fdmlkZW9MYXllcikKLSAg
ICAgICAgbV92aWRlb0xheWVyLT5yZWxlYXNlUHJvdmlkZXIoKTsKKyAgICBNdXRleExvY2tlciBs
b2NrZXIobV9jb21wb3NpdGluZ011dGV4KTsKKyAgICBpZiAobV92aWRlb0ZyYW1lUHJvdmlkZXJD
bGllbnQpCisgICAgICAgIG1fdmlkZW9GcmFtZVByb3ZpZGVyQ2xpZW50LT5zdG9wVXNpbmdQcm92
aWRlcigpOwogI2VuZGlmCiB9CiAKQEAgLTU5MywyMSArNTcwLDI3IEBAIGJvb2wgV2ViTWVkaWFQ
bGF5ZXJDbGllbnRJbXBsOjphY2NlbGVyYXRlZFJlbmRlcmluZ0luVXNlKCkKICAgICByZXR1cm4g
bV92aWRlb0xheWVyICYmIG1fdmlkZW9MYXllci0+bGF5ZXJUcmVlSG9zdCgpOwogfQogCit2b2lk
IFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6c2V0VmlkZW9GcmFtZVByb3ZpZGVyQ2xpZW50KFZp
ZGVvRnJhbWVQcm92aWRlcjo6Q2xpZW50KiBjbGllbnQpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fY29tcG9zaXRpbmdNdXRleCk7CisgICAgbV92aWRlb0ZyYW1lUHJvdmlkZXJDbGllbnQg
PSBjbGllbnQ7Cit9CisKIFZpZGVvRnJhbWVDaHJvbWl1bSogV2ViTWVkaWFQbGF5ZXJDbGllbnRJ
bXBsOjpnZXRDdXJyZW50RnJhbWUoKQogeworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2NvbXBv
c2l0aW5nTXV0ZXgpOwogICAgIEFTU0VSVCghbV9jdXJyZW50VmlkZW9GcmFtZSk7CiAgICAgaWYg
KG1fd2ViTWVkaWFQbGF5ZXIgJiYgIW1fY3VycmVudFZpZGVvRnJhbWUpIHsKICAgICAgICAgV2Vi
VmlkZW9GcmFtZSogd2Via2l0VmlkZW9GcmFtZSA9IG1fd2ViTWVkaWFQbGF5ZXItPmdldEN1cnJl
bnRGcmFtZSgpOwogICAgICAgICBpZiAod2Via2l0VmlkZW9GcmFtZSkKICAgICAgICAgICAgIG1f
Y3VycmVudFZpZGVvRnJhbWUgPSBhZG9wdFB0cihuZXcgVmlkZW9GcmFtZUNocm9taXVtSW1wbCh3
ZWJraXRWaWRlb0ZyYW1lKSk7Ci0gICAgICAgIGlmIChtX3ZpZGVvTGF5ZXIpCi0gICAgICAgICAg
ICBtX3ZpZGVvTGF5ZXItPnNldE9wYXF1ZSh3ZWJraXRWaWRlb0ZyYW1lICYmIGlzVmlkZW9GcmFt
ZUZvcm1hdE9wYXF1ZSh3ZWJraXRWaWRlb0ZyYW1lLT5mb3JtYXQoKSkpOwogICAgIH0KICAgICBy
ZXR1cm4gbV9jdXJyZW50VmlkZW9GcmFtZS5nZXQoKTsKIH0KIAogdm9pZCBXZWJNZWRpYVBsYXll
ckNsaWVudEltcGw6OnB1dEN1cnJlbnRGcmFtZShWaWRlb0ZyYW1lQ2hyb21pdW0qIHZpZGVvRnJh
bWUpCiB7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fY29tcG9zaXRpbmdNdXRleCk7CiAgICAg
aWYgKHZpZGVvRnJhbWUgJiYgdmlkZW9GcmFtZSA9PSBtX2N1cnJlbnRWaWRlb0ZyYW1lKSB7CiAg
ICAgICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKSB7CiAgICAgICAgICAgICBtX3dlYk1lZGlhUGxh
eWVyLT5wdXRDdXJyZW50RnJhbWUoCkBAIC02MjcsNiArNjEwLDcgQEAgUGFzc093blB0cjxNZWRp
YVBsYXllclByaXZhdGVJbnRlcmZhY2U+IFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6Y3JlYXRl
KE1lZGlhUGwKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgRnJhbWUqIGZy
YW1lID0gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+KAogICAgICAgICBjbGllbnQtPm1f
bWVkaWFQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCkpLT5kb2N1bWVudCgpLT5mcmFtZSgpOwor
ICAgIGNsaWVudC0+bV92aWRlb0ZyYW1lUHJvdmlkZXJDbGllbnQgPSAwOwogCiAgICAgLy8gVGhp
cyBkb2VzIG5vdCBhY3R1YWxseSBjaGVjayB3aGV0aGVyIHRoZSBoYXJkd2FyZSBjYW4gc3VwcG9y
dCBhY2NlbGVyYXRlZAogICAgIC8vIGNvbXBvc2l0aW5nLCBidXQgb25seSBpZiB0aGUgZmxhZyBp
cyBzZXQuIEhvd2V2ZXIsIHRoaXMgaXMgY2hlY2tlZCBsYXppbHkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5oIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmgKaW5kZXggZmNj
MWRhNWM0MzczMmY1YjhkMzZkODUyZjMwM2YyMDEwZWIzMDRiNS4uZDk0MTljZjg3YWJmZTY5MmMw
NTFlNWYwMjVkYTM3MmM1ZDE3Yzk4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmgKQEAgLTEyOSw3ICsxMjksNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB1bnNpZ25lZCBkcm9wcGVkRnJhbWVDb3VudCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdW5zaWduZWQgYXVkaW9EZWNvZGVkQnl0ZUNvdW50KCkgY29uc3Q7CiAgICAg
dmlydHVhbCB1bnNpZ25lZCB2aWRlb0RlY29kZWRCeXRlQ291bnQoKSBjb25zdDsKLSAgICAKKwog
I2lmIEVOQUJMRShXRUJfQVVESU8pCiAgICAgdmlydHVhbCBXZWJDb3JlOjpBdWRpb1NvdXJjZVBy
b3ZpZGVyKiBhdWRpb1NvdXJjZVByb3ZpZGVyKCk7CiAjZW5kaWYKQEAgLTEzOCw2ICsxMzgsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmco
KSBjb25zdDsKIAogICAgIC8vIFZpZGVvRnJhbWVQcm92aWRlciBtZXRob2RzOgorICAgIHZpcnR1
YWwgdm9pZCBzZXRWaWRlb0ZyYW1lUHJvdmlkZXJDbGllbnQoVmlkZW9GcmFtZVByb3ZpZGVyOjpD
bGllbnQqKTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OlZpZGVvRnJhbWVDaHJvbWl1bSogZ2V0Q3Vy
cmVudEZyYW1lKCk7CiAgICAgdmlydHVhbCB2b2lkIHB1dEN1cnJlbnRGcmFtZShXZWJDb3JlOjpW
aWRlb0ZyYW1lQ2hyb21pdW0qKTsKICNlbmRpZgpAQCAtMTU4LDYgKzE1OSw5IEBAIHByaXZhdGU6
CiAgICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiB0eXBlLCBjb25zdCBXVEY6OlN0cmluZyYgY29k
ZWNzKTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgYm9vbCBhY2NlbGVy
YXRlZFJlbmRlcmluZ0luVXNlKCk7CisKKyAgICBNdXRleCBtX2NvbXBvc2l0aW5nTXV0ZXg7IC8v
IEd1YXJkcyBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBtYWluIHRocmVhZCBhbmQgY29tcGlzaXRp
bmcgdGhyZWFkLgorICAgIFZpZGVvRnJhbWVQcm92aWRlcjo6Q2xpZW50KiBtX3ZpZGVvRnJhbWVQ
cm92aWRlckNsaWVudDsKICNlbmRpZgogCiAgICAgV2ViQ29yZTo6TWVkaWFQbGF5ZXIqIG1fbWVk
aWFQbGF5ZXI7CkBAIC0xODksMTMgKzE5MywxMyBAQCBwcml2YXRlOgogICAgICAgICB2aXJ0dWFs
IHZvaWQgc2V0Rm9ybWF0KHNpemVfdCBudW1iZXJPZkNoYW5uZWxzLCBmbG9hdCBzYW1wbGVSYXRl
KTsKIAogICAgICAgICB2b2lkIHdyYXAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckNsaWVu
dCogY2xpZW50KSB7IG1fY2xpZW50ID0gY2xpZW50OyB9Ci0gICAgICAgIAorCiAgICAgcHJpdmF0
ZToKICAgICAgICAgV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckNsaWVudCogbV9jbGllbnQ7
CiAgICAgfTsKIAogICAgIC8vIEF1ZGlvU291cmNlUHJvdmlkZXJJbXBsIHdyYXBzIGEgV2ViQXVk
aW9Tb3VyY2VQcm92aWRlci4KLSAgICAvLyBwcm92aWRlSW5wdXQoKSBjYWxscyBpbnRvIENocm9t
aXVtIHRvIGdldCBhIHJlbmRlcmVkIGF1ZGlvIHN0cmVhbS4gCisgICAgLy8gcHJvdmlkZUlucHV0
KCkgY2FsbHMgaW50byBDaHJvbWl1bSB0byBnZXQgYSByZW5kZXJlZCBhdWRpbyBzdHJlYW0uCiAK
ICAgICBjbGFzcyBBdWRpb1NvdXJjZVByb3ZpZGVySW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpBdWRp
b1NvdXJjZVByb3ZpZGVyIHsKICAgICBwdWJsaWM6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119876</attachid>
            <date>2011-12-19 09:54:50 -0800</date>
            <delta_ts>2011-12-19 17:22:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73043-20111219095449.patch</filename>
            <type>text/plain</type>
            <size>38533</size>
            <attacher name="Ami Fischman">fischman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMjE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDA0MDc3ZTE2N2M1NDJm
YTQxODQyZGUyZTQxYzViYjhkZDNkZDhiOS4uYTgwMTZiZDIxNTE4NTc3NjE1MDM4ZmFlYWJjNDg4
ZjQ3MWNiMGQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDExLTEyLTE1ICBBbWkg
RmlzY2htYW4gIDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRml4IHRoZSBsaWZl
LWN5Y2xlIG9mIHZpZGVvIGZyYW1lcyBoYW5kbGVkIGJ5IFZpZGVvTGF5ZXJDaHJvbWl1bS9DQ1Zp
ZGVvTGF5ZXJJbXBsLgorICAgICAgICBWaWRlb0ZyYW1lUHJvdmlkZXI6OntnZXQscHV0fUN1cnJl
bnRGcmFtZSBwcm92aWRlIGxlYXNlIHNlbWFudGljcy4gIFByZXZpb3VzbHkKKyAgICAgICAgVmlk
ZW9MYXllckNocm9taXVtIHdvdWxkIGFjcXVpcmUgdGhlIGxlYXNlIGZvciB0aGUgZHVyYXRpb24g
b2YgY29weWluZyB0aGUgZnJhbWUsCisgICAgICAgIGV2ZW4gaWYgdGhhdCB3YXMgb25seSBhIHRl
eHR1cmUgSUQsIGFuZCBpbW1lZGlhdGVseSByZXR1cm4gdGhlIGxlYXNlLCB3aGlsZQorICAgICAg
ICBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3KCkgd291bGQgY29tZSBhbG9uZyBsYXRlciBhbmQgdXNl
IHRoZSAobm8tbG9uZ2VyIGxvY2tlZCkKKyAgICAgICAgdGV4dHVyZSBvcHRpbWlzdGljYWxseS4g
IFRoaXMgY2hhbmdlIG1ha2VzIGl0IHNvIHRoYXQgQ0NWaWRlb0xheWVySW1wbCBob2xkcworICAg
ICAgICB0aGUgZnJhbWUncyBsZWFzZSBmb3IgdGhlIGR1cmF0aW9uIG9mIGRyYXcoKSwgZ3VhcmFu
dGVlaW5nIHRoZSBmcmFtZSBpcyB2YWxpZCB0byByZWFkLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwNDMKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OlZpZGVvTGF5ZXJDaHJvbWl1bSk6
CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06On5WaWRlb0xheWVyQ2hyb21p
dW0pOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVy
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnJlbGVhc2VQcm92
aWRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNo
cm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRl
b0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpDQ1Zp
ZGVvTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6On5DQ1Zp
ZGVvTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OnNldFBy
b3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRWRkNGb3JtYXRUb0dDM0RGb3JtYXQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6ZHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpjb3B5RnJhbWVUb1RleHR1cmVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmNvcHlQbGFuZVRvVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpjb21wdXRlVmlzaWJsZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRl
b0xheWVySW1wbDo6cmVzZXJ2ZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9M
YXllckltcGw6OmRyYXdZVVYpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6
ZHJhd0NvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3UkdC
QSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3TmF0aXZlVGV4dHVy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVy
SW1wbC5oOgorCiAyMDExLTEyLTE4ICBLZWlzaGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIEltcGxlbWVudCA8aW5wdXQgdHlwZT1jb2xvcj4gVUkgV2ViS2l0IGNocm9t
aXVtIHBhcnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNDA0ZmIwNDk0ZDhkN2JiY2Vk
ODJhMWZmYWM4MzQ3NTIxZGY1ODcyYy4uOWU5NWFiNjA3OWViM2I4YmY1MWRmMDQ5MGJjNTI3YWM4
MjllOGUxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAx
MS0xMi0xNSAgQW1pIEZpc2NobWFuICA8ZmlzY2htYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAg
IEZpeCB0aGUgbGlmZS1jeWNsZSBvZiB2aWRlbyBmcmFtZXMgaGFuZGxlZCBieSBWaWRlb0xheWVy
Q2hyb21pdW0vQ0NWaWRlb0xheWVySW1wbC4KKyAgICAgICAgVmlkZW9GcmFtZVByb3ZpZGVyOjp7
Z2V0LHB1dH1DdXJyZW50RnJhbWUgcHJvdmlkZSBsZWFzZSBzZW1hbnRpY3MuICBQcmV2aW91c2x5
CisgICAgICAgIFZpZGVvTGF5ZXJDaHJvbWl1bSB3b3VsZCBhY3F1aXJlIHRoZSBsZWFzZSBmb3Ig
dGhlIGR1cmF0aW9uIG9mIGNvcHlpbmcgdGhlIGZyYW1lLAorICAgICAgICBldmVuIGlmIHRoYXQg
d2FzIG9ubHkgYSB0ZXh0dXJlIElELCBhbmQgaW1tZWRpYXRlbHkgcmV0dXJuIHRoZSBsZWFzZSwg
d2hpbGUKKyAgICAgICAgQ0NWaWRlb0xheWVySW1wbDo6ZHJhdygpIHdvdWxkIGNvbWUgYWxvbmcg
bGF0ZXIgYW5kIHVzZSB0aGUgKG5vLWxvbmdlciBsb2NrZWQpCisgICAgICAgIHRleHR1cmUgb3B0
aW1pc3RpY2FsbHkuICBUaGlzIGNoYW5nZSBtYWtlcyBpdCBzbyB0aGF0IENDVmlkZW9MYXllcklt
cGwgaG9sZHMKKyAgICAgICAgdGhlIGZyYW1lJ3MgbGVhc2UgZm9yIHRoZSBkdXJhdGlvbiBvZiBk
cmF3KCksIGd1YXJhbnRlZWluZyB0aGUgZnJhbWUgaXMgdmFsaWQgdG8gcmVhZC4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDQzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzcmMvV2ViTWVkaWFQbGF5
ZXJDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnRJ
bXBsOjpnZXRDdXJyZW50RnJhbWUpOgorCiAyMDExLTEyLTE4ICBLZWlzaGkgSGF0dG9yaSAgPGtl
aXNoaUB3ZWJraXQub3JnPgogCiAgICAgICAgIEltcGxlbWVudCA8aW5wdXQgdHlwZT1jb2xvcj4g
VUkgV2ViS2l0IGNocm9taXVtIHBhcnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvRnJhbWVQcm92aWRlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9GcmFtZVByb3ZpZGVyLmgKaW5kZXgg
YzU5NmY4NzY5NzZkYjFhMDM5Njg0ZTlkZGY2YjE3MTA4ZWYwZTRiMC4uM2Q0M2E5MGMzN2E2Mzdh
Y2U3Y2M3MzIxNzYzZGU0YTM5Nzk5NDFkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9GcmFtZVByb3ZpZGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9GcmFtZVByb3ZpZGVyLmgK
QEAgLTM5LDYgKzM5LDE0IEBAIGNsYXNzIFZpZGVvRnJhbWVQcm92aWRlciB7CiBwdWJsaWM6CiAg
ICAgdmlydHVhbCB+VmlkZW9GcmFtZVByb3ZpZGVyKCkgeyB9CiAKKyAgICBjbGFzcyBDbGllbnQg
eworICAgIHB1YmxpYzoKKyAgICAgICAgLy8gUHJvdmlkZXIgd2lsbCBjYWxsIHRoaXMgbWV0aG9k
IHRvIHRlbGwgdGhlIGNsaWVudCB0byBzdG9wIHVzaW5nIGl0LgorICAgICAgICB2aXJ0dWFsIHZv
aWQgc3RvcFVzaW5nUHJvdmlkZXIoKSA9IDA7CisgICAgfTsKKworICAgIHZpcnR1YWwgdm9pZCBz
ZXRWaWRlb0ZyYW1lUHJvdmlkZXJDbGllbnQoQ2xpZW50KikgPSAwOworCiAgICAgLy8gVGhpcyBm
dW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byBhIFZpZGVvRnJhbWVDaHJvbWl1bSwgd2hpY2gg
aXMKICAgICAvLyB0aGUgV2ViQ29yZSB3cmFwcGVyIGZvciBhIHZpZGVvIGZyYW1lIGluIENocm9t
aXVtLiBnZXRDdXJyZW50RnJhbWUoKQogICAgIC8vIHBsYWNlcyBhIGxvY2sgb24gdGhlIGZyYW1l
IGluIENocm9taXVtLiBDYWxscyB0byB0aGlzIG1ldGhvZCBzaG91bGQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xh
eWVyQ2hyb21pdW0uY3BwCmluZGV4IGVjOTNmMTY4ZGExNGVhNDFlM2MxNmRmNmQ3YzQ5YmVlNDUx
M2VhY2UuLjNlOGYxMjM5N2JhY2UyM2Y1ZDcxMWY4NGFjMzIwYzI0NDRkOGYyNGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJD
aHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVmlkZW9MYXllckNocm9taXVtLmNwcApAQCAtMzIsMTUgKzMyLDYgQEAKIAogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpbmNsdWRlICJWaWRlb0xheWVyQ2hyb21pdW0uaCIK
LQotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKLSNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKLSNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlZpZGVvRnJhbWVDaHJvbWl1bS5oIgotI2lu
Y2x1ZGUgIlZpZGVvRnJhbWVQcm92aWRlci5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgi
Ci0jaW5jbHVkZSAiY2MvQ0NUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1ZGUgImNjL0NDVmlkZW9M
YXllckltcGwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTMsMjM1ICs0NCwyNSBAQCBQ
YXNzUmVmUHRyPFZpZGVvTGF5ZXJDaHJvbWl1bT4gVmlkZW9MYXllckNocm9taXVtOjpjcmVhdGUo
Q0NMYXllckRlbGVnYXRlKiBkZWxlZwogCiBWaWRlb0xheWVyQ2hyb21pdW06OlZpZGVvTGF5ZXJD
aHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqIGRlbGVnYXRlLCBWaWRlb0ZyYW1lUHJvdmlkZXIqIHBy
b3ZpZGVyKQogICAgIDogTGF5ZXJDaHJvbWl1bShkZWxlZ2F0ZSkKLSAgICAsIG1fc2tpcHNEcmF3
KHRydWUpCi0gICAgLCBtX2ZyYW1lRm9ybWF0KFZpZGVvRnJhbWVDaHJvbWl1bTo6SW52YWxpZCkK
ICAgICAsIG1fcHJvdmlkZXIocHJvdmlkZXIpCi0gICAgLCBtX3BsYW5lcygwKQotICAgICwgbV9u
YXRpdmVUZXh0dXJlSWQoMCkKIHsKKyAgICBBU1NFUlQobV9wcm92aWRlcik7CisgICAgbV9wcm92
aWRlci0+c2V0VmlkZW9GcmFtZVByb3ZpZGVyQ2xpZW50KHRoaXMpOwogfQogCiBWaWRlb0xheWVy
Q2hyb21pdW06On5WaWRlb0xheWVyQ2hyb21pdW0oKQogewotICAgIGNsZWFudXBSZXNvdXJjZXMo
KTsKKyAgICBBU1NFUlQoIW1fcHJvdmlkZXIpOwogfQogCiBQYXNzUmVmUHRyPENDTGF5ZXJJbXBs
PiBWaWRlb0xheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKCkKIHsKLSAgICByZXR1cm4g
Q0NWaWRlb0xheWVySW1wbDo6Y3JlYXRlKG1fbGF5ZXJJZCk7Ci19Ci0KLXZvaWQgVmlkZW9MYXll
ckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKLXsKLSAgICBMYXllckNocm9taXVtOjpjbGVh
bnVwUmVzb3VyY2VzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE1heFBsYW5lczsg
KytpKQotICAgICAgICBtX3RleHR1cmVzW2ldLm1fdGV4dHVyZS5jbGVhcigpOwotfQotCi12b2lk
IFZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCwgQ0NUZXh0dXJlVXBkYXRlciYgdXBkYXRlcikKLXsKLSAgICBpZiAo
IW1fZGVsZWdhdGUgfHwgIW1fcHJvdmlkZXIgfHwgIWRyYXdzQ29udGVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoIW1fbmVlZHNEaXNwbGF5ICYmIHRleHR1cmVzVmFsaWQoKSkgewot
ICAgICAgICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBtX3BsYW5lczsgcGxhbmUr
KykgewotICAgICAgICAgICAgTWFuYWdlZFRleHR1cmUqIHRleCA9IG1fdGV4dHVyZXNbcGxhbmVd
Lm1fdGV4dHVyZS5nZXQoKTsKLSAgICAgICAgICAgIGlmICghdGV4LT5yZXNlcnZlKHRleC0+c2l6
ZSgpLCB0ZXgtPmZvcm1hdCgpKSkgewotICAgICAgICAgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9wbGFuZXMgPSAwOwotICAgIG1fc2tpcHNEcmF3
ID0gZmFsc2U7Ci0KLSAgICBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lID0gbV9wcm92aWRlci0+
Z2V0Q3VycmVudEZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkgewotICAgICAgICBtX3NraXBzRHJh
dyA9IHRydWU7Ci0gICAgICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2ZyYW1lRm9ybWF0ID0gZnJhbWUtPmZvcm1h
dCgpOwotICAgIEdDM0RlbnVtIHRleHR1cmVGb3JtYXQgPSBkZXRlcm1pbmVUZXh0dXJlRm9ybWF0
KGZyYW1lKTsKLSAgICBpZiAodGV4dHVyZUZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSkgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG90aGVyIHBhdGhzLgot
ICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7Ci0g
ICAgICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAodGV4dHVyZUZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCkgewotICAgICAgICBtX25hdGl2ZVRleHR1cmVJZCA9IGZyYW1lLT50ZXh0dXJl
SWQoKTsKLSAgICAgICAgbV9uYXRpdmVUZXh0dXJlU2l6ZSA9IEludFNpemUoZnJhbWUtPndpZHRo
KCksIGZyYW1lLT5oZWlnaHQoKSk7Ci0gICAgICAgIG1fbmF0aXZlVGV4dHVyZVZpc2libGVTaXpl
ID0gSW50U2l6ZShmcmFtZS0+d2lkdGgoKSwgZnJhbWUtPmhlaWdodCgpKTsKLSAgICAgICAgbV9u
ZWVkc0Rpc3BsYXkgPSBmYWxzZTsKLSAgICAgICAgbV9wcm92aWRlci0+cHV0Q3VycmVudEZyYW1l
KGZyYW1lKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEFsbG9jYXRlIHRleHR1
cmVzIGZvciBwbGFuZXMgaWYgdGhleSBhcmUgbm90IGFsbG9jYXRlZCBhbHJlYWR5LCBvcgotICAg
IC8vIHJlYWxsb2NhdGUgdGV4dHVyZXMgdGhhdCBhcmUgdGhlIHdyb25nIHNpemUgZm9yIHRoZSBm
cmFtZS4KLSAgICBib29sIHRleHR1cmVzUmVzZXJ2ZWQgPSByZXNlcnZlVGV4dHVyZXMoZnJhbWUs
IHRleHR1cmVGb3JtYXQpOwotICAgIGlmICghdGV4dHVyZXNSZXNlcnZlZCkgewotICAgICAgICBt
X3NraXBzRHJhdyA9IHRydWU7Ci0gICAgICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShm
cmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBVcGRhdGUgdGV4dHVyZSBw
bGFuZXMuCi0gICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IDA7IHBsYW5lIDwgZnJhbWUtPnBsYW5l
cygpOyBwbGFuZSsrKSB7Ci0gICAgICAgIFRleHR1cmUmIHRleHR1cmUgPSBtX3RleHR1cmVzW3Bs
YW5lXTsKLSAgICAgICAgQVNTRVJUKHRleHR1cmUubV90ZXh0dXJlKTsKLSAgICAgICAgQVNTRVJU
KGZyYW1lLT5yZXF1aXJlZFRleHR1cmVTaXplKHBsYW5lKSA9PSB0ZXh0dXJlLm1fdGV4dHVyZS0+
c2l6ZSgpKTsKLSAgICAgICAgdXBkYXRlVGV4dHVyZShjb250ZXh0LCB1cGRhdGVyLmFsbG9jYXRv
cigpLCB0ZXh0dXJlLCBmcmFtZS0+ZGF0YShwbGFuZSkpOwotICAgIH0KLQotICAgIG1fcGxhbmVz
ID0gZnJhbWUtPnBsYW5lcygpOwotICAgIEFTU0VSVChtX3BsYW5lcyA8PSBNYXhQbGFuZXMpOwot
Ci0gICAgbV91cGRhdGVSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYm91bmRzKCkpOwot
ICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7Ci0KLSAgICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50
RnJhbWUoZnJhbWUpOwotfQotCi12b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRp
ZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCi17Ci0gICAgTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3Bl
cnRpZXNUbyhsYXllcik7Ci0KLSAgICBDQ1ZpZGVvTGF5ZXJJbXBsKiB2aWRlb0xheWVyID0gc3Rh
dGljX2Nhc3Q8Q0NWaWRlb0xheWVySW1wbCo+KGxheWVyKTsKLSAgICB2aWRlb0xheWVyLT5zZXRT
a2lwc0RyYXcobV9za2lwc0RyYXcpOwotICAgIHZpZGVvTGF5ZXItPnNldEZyYW1lRm9ybWF0KG1f
ZnJhbWVGb3JtYXQpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3BsYW5lczsgKytp
KSB7Ci0gICAgICAgIGlmICghbV90ZXh0dXJlc1tpXS5tX3RleHR1cmUpIHsKLSAgICAgICAgICAg
IHZpZGVvTGF5ZXItPnNldFNraXBzRHJhdyh0cnVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIHZpZGVvTGF5ZXItPnNldFRleHR1cmUoaSwgbV90ZXh0dXJlc1tpXS5t
X3RleHR1cmUtPnRleHR1cmVJZCgpLCBtX3RleHR1cmVzW2ldLm1fdGV4dHVyZS0+c2l6ZSgpLCBt
X3RleHR1cmVzW2ldLm1fdmlzaWJsZVNpemUpOwotICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX3BsYW5lczsgaSA8IE1heFBsYW5lczsgKytpKQotICAgICAgICB2aWRlb0xheWVyLT5zZXRU
ZXh0dXJlKGksIDAsIEludFNpemUoKSwgSW50U2l6ZSgpKTsKLSAgICBpZiAobV9mcmFtZUZvcm1h
dCA9PSBWaWRlb0ZyYW1lQ2hyb21pdW06Ok5hdGl2ZVRleHR1cmUpCi0gICAgICAgIHZpZGVvTGF5
ZXItPnNldE5hdGl2ZVRleHR1cmUobV9uYXRpdmVUZXh0dXJlSWQsIG1fbmF0aXZlVGV4dHVyZVNp
emUsIG1fbmF0aXZlVGV4dHVyZVZpc2libGVTaXplKTsKLX0KLQotdm9pZCBWaWRlb0xheWVyQ2hy
b21pdW06OnNldExheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0KiBob3N0KQotewotICAgIGlm
IChob3N0ICYmIGxheWVyVHJlZUhvc3QoKSAhPSBob3N0KSB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBNYXhQbGFuZXM7ICsraSkgewotICAgICAgICAgICAgbV90ZXh0dXJlc1tp
XS5tX3Zpc2libGVTaXplID0gSW50U2l6ZSgpOwotICAgICAgICAgICAgbV90ZXh0dXJlc1tpXS5t
X3RleHR1cmUgPSBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKGhvc3QtPmNvbnRlbnRzVGV4dHVyZU1h
bmFnZXIoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBMYXllckNocm9taXVtOjpzZXRMYXll
clRyZWVIb3N0KGhvc3QpOwotfQotCi1HQzNEZW51bSBWaWRlb0xheWVyQ2hyb21pdW06OmRldGVy
bWluZVRleHR1cmVGb3JtYXQoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSkKLXsKLSAg
ICBzd2l0Y2ggKGZyYW1lLT5mb3JtYXQoKSkgewotICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVt
OjpZVjEyOgotICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpZVjE2OgotICAgICAgICByZXR1
cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRTsKLSAgICBjYXNlIFZpZGVvRnJhbWVDaHJv
bWl1bTo6UkdCQToKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOwotICAg
IGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpOYXRpdmVUZXh0dXJlOgotICAgICAgICByZXR1cm4g
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRTsK
LX0KLQotYm9vbCBWaWRlb0xheWVyQ2hyb21pdW06OnRleHR1cmVzVmFsaWQoKQotewotICAgIGZv
ciAodW5zaWduZWQgcGxhbmUgPSAwOyBwbGFuZSA8IG1fcGxhbmVzOyBwbGFuZSsrKSB7Ci0gICAg
ICAgIE1hbmFnZWRUZXh0dXJlKiB0ZXggPSBtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUuZ2V0
KCk7Ci0gICAgICAgIGlmICghdGV4LT5pc1ZhbGlkKHRleC0+c2l6ZSgpLCB0ZXgtPmZvcm1hdCgp
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgVmlkZW9MYXllckNocm9taXVtOjpyZXNlcnZlVGV4dHVyZXMoY29uc3QgVmlkZW9G
cmFtZUNocm9taXVtKiBmcmFtZSwgR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkKLXsKLSAgICBBU1NF
UlQobGF5ZXJUcmVlSG9zdCgpKTsKLSAgICBBU1NFUlQoZnJhbWUpOwotICAgIEFTU0VSVCh0ZXh0
dXJlRm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKLQotICAgIGlu
dCBtYXhUZXh0dXJlU2l6ZSA9IGxheWVyVHJlZUhvc3QoKS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxp
dGllcygpLm1heFRleHR1cmVTaXplOwotCi0gICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IDA7IHBs
YW5lIDwgZnJhbWUtPnBsYW5lcygpOyBwbGFuZSsrKSB7Ci0gICAgICAgIEludFNpemUgcmVxdWly
ZWRUZXh0dXJlU2l6ZSA9IGZyYW1lLT5yZXF1aXJlZFRleHR1cmVTaXplKHBsYW5lKTsKLQotICAg
ICAgICAvLyBJZiB0aGUgcmVuZGVyZXIgY2Fubm90IGhhbmRsZSB0aGlzIGxhcmdlIG9mIGEgdGV4
dHVyZSwgcmV0dXJuIGZhbHNlLgotICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgdGVzdCB3
aGVuIHRpbGVkIGxheWVycyBhcmUgaW1wbGVtZW50ZWQuCi0gICAgICAgIGlmIChyZXF1aXJlZFRl
eHR1cmVTaXplLmlzWmVybygpIHx8IHJlcXVpcmVkVGV4dHVyZVNpemUud2lkdGgoKSA+IG1heFRl
eHR1cmVTaXplIHx8IHJlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCkgPiBtYXhUZXh0dXJlU2l6
ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoIW1fdGV4dHVyZXNb
cGxhbmVdLm1fdGV4dHVyZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBp
ZiAobV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlLT5zaXplKCkgIT0gcmVxdWlyZWRUZXh0dXJl
U2l6ZSkKLSAgICAgICAgICAgIG1fdGV4dHVyZXNbcGxhbmVdLm1fdmlzaWJsZVNpemUgPSBjb21w
dXRlVmlzaWJsZVNpemUoZnJhbWUsIHBsYW5lKTsKLQotICAgICAgICBtX3RleHR1cmVzW3BsYW5l
XS5tX3RleHR1cmUtPnJlc2VydmUocmVxdWlyZWRUZXh0dXJlU2l6ZSwgdGV4dHVyZUZvcm1hdCk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUludFNpemUgVmlkZW9MYXllckNocm9t
aXVtOjpjb21wdXRlVmlzaWJsZVNpemUoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSwg
dW5zaWduZWQgcGxhbmUpCi17Ci0gICAgaW50IHZpc2libGVXaWR0aCA9IGZyYW1lLT53aWR0aChw
bGFuZSk7Ci0gICAgaW50IHZpc2libGVIZWlnaHQgPSBmcmFtZS0+aGVpZ2h0KHBsYW5lKTsKLSAg
ICAvLyBXaGVuIHRoZXJlIGFyZSBkZWFkIHBpeGVscyBhdCB0aGUgZWRnZSBvZiB0aGUgdGV4dHVy
ZSwgZGVjcmVhc2UKLSAgICAvLyB0aGUgZnJhbWUgd2lkdGggYnkgMSB0byBwcmV2ZW50IHRoZSBy
aWdodG1vc3QgcGl4ZWxzIGZyb20KLSAgICAvLyBpbnRlcnBvbGF0aW5nIHdpdGggdGhlIGRlYWQg
cGl4ZWxzLgotICAgIGlmIChmcmFtZS0+aGFzUGFkZGluZ0J5dGVzKHBsYW5lKSkKLSAgICAgICAg
LS12aXNpYmxlV2lkdGg7Ci0KLSAgICAvLyBJbiBZVjEyLCBldmVyeSAyeDIgc3F1YXJlIG9mIFkg
dmFsdWVzIGNvcnJlc3BvbmRzIHRvIG9uZSBVIGFuZAotICAgIC8vIG9uZSBWIHZhbHVlLiBJZiB3
ZSBkZWNyZWFzZSB0aGUgd2lkdGggb2YgdGhlIFVWIHBsYW5lLCB3ZSBtdXN0IGRlY3JlYXNlIHRo
ZQotICAgIC8vIHdpZHRoIG9mIHRoZSBZIHRleHR1cmUgYnkgMiBmb3IgcHJvcGVyIGFsaWdubWVu
dC4gVGhpcyBtdXN0IGhhcHBlbgotICAgIC8vIGFsd2F5cywgZXZlbiBpZiBZJ3MgdGV4dHVyZSBk
b2VzIG5vdCBoYXZlIHBhZGRpbmcgYnl0ZXMuCi0gICAgaWYgKHBsYW5lID09IFZpZGVvRnJhbWVD
aHJvbWl1bTo6eVBsYW5lICYmIGZyYW1lLT5mb3JtYXQoKSA9PSBWaWRlb0ZyYW1lQ2hyb21pdW06
OllWMTIpIHsKLSAgICAgICAgaWYgKGZyYW1lLT5oYXNQYWRkaW5nQnl0ZXMoVmlkZW9GcmFtZUNo
cm9taXVtOjp1UGxhbmUpKSB7Ci0gICAgICAgICAgICBpbnQgb3JpZ2luYWxXaWR0aCA9IGZyYW1l
LT53aWR0aChwbGFuZSk7Ci0gICAgICAgICAgICB2aXNpYmxlV2lkdGggPSBvcmlnaW5hbFdpZHRo
IC0gMjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBJbnRTaXplKHZpc2libGVXaWR0
aCwgdmlzaWJsZUhlaWdodCk7Ci19Ci0KLXZvaWQgVmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxv
Y2F0b3IsIFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IHZvaWQqIGRhdGEpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKGNvbnRleHQpOwotICAgIEFTU0VSVCh0ZXh0dXJlLm1fdGV4dHVyZSk7Ci0KLSAgICB0
ZXh0dXJlLm1fdGV4dHVyZS0+YmluZFRleHR1cmUoY29udGV4dCwgYWxsb2NhdG9yKTsKLQotICAg
IEdDM0RlbnVtIGZvcm1hdCA9IHRleHR1cmUubV90ZXh0dXJlLT5mb3JtYXQoKTsKLSAgICBJbnRT
aXplIGRpbWVuc2lvbnMgPSB0ZXh0dXJlLm1fdGV4dHVyZS0+c2l6ZSgpOwotCi0gICAgdm9pZCog
bWVtID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihjb250ZXh0LT5nZXRFeHRl
bnNpb25zKCkpLT5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0oR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIDAsIDAsIDAsIGRpbWVuc2lvbnMud2lkdGgoKSwgZGltZW5zaW9ucy5oZWlnaHQo
KSwgZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgRXh0ZW5zaW9uczNE
Q2hyb21pdW06OldSSVRFX09OTFkpOwotICAgIGlmIChtZW0pIHsKLSAgICAgICAgbWVtY3B5KG1l
bSwgZGF0YSwgZGltZW5zaW9ucy53aWR0aCgpICogZGltZW5zaW9ucy5oZWlnaHQoKSk7Ci0gICAg
ICAgIEdMQyhjb250ZXh0LCBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKSktPnVubWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKG1lbSkpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIG1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSBmYWls
cywgdGhlbiBkbyB0aGUgc2xvd2VyIHRleFN1YkltYWdlMkQKLSAgICAgICAgLy8gdXBsb2FkLiBU
aGlzIGRvZXMgdHdpY2UgdGhlIGNvcGllcyBhcyBtYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0sIG9u
ZQotICAgICAgICAvLyBpbiB0aGUgY29tbWFuZCBidWZmZXIgYW5kIGFub3RoZXIgdG8gdGhlIHRl
eHR1cmUuCi0gICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAwLCAwLCBkaW1lbnNpb25zLndpZHRoKCksIGRp
bWVuc2lvbnMuaGVpZ2h0KCksIGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUsIGRhdGEpKTsKLSAgICB9CisgICAgUmVmUHRyPENDVmlkZW9MYXllckltcGw+IHJldCA9IEND
VmlkZW9MYXllckltcGw6OmNyZWF0ZShtX2xheWVySWQsIG1fcHJvdmlkZXIpOworICAgIG1fcHJv
dmlkZXIgPSAwOworICAgIHJldHVybiByZXQ7CiB9CiAKLXZvaWQgVmlkZW9MYXllckNocm9taXVt
OjpyZWxlYXNlUHJvdmlkZXIoKQordm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnN0b3BVc2luZ1By
b3ZpZGVyKCkKIHsKICAgICBtX3Byb3ZpZGVyID0gMDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9t
aXVtLmgKaW5kZXggNTE2YzhkMzg0N2MyYWRiNjRjNWJiZWZiN2M5OWNhYjVmNWFmYWJhMy4uM2Zk
NTcyNmI3OWU5OGU3NzIzOTFjYTFkMWE4MTQwNzhjOGMwZjkwNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXll
ckNocm9taXVtLmgKQEAgLTM1LDEzICszNSwxNSBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKIAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJNYW5hZ2Vk
VGV4dHVyZS5oIgogI2luY2x1ZGUgIlZpZGVvRnJhbWVQcm92aWRlci5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK2NsYXNzIENDVmlkZW9MYXllckltcGw7CisKIC8vIEEgTGF5ZXIgdGhhdCBj
b250YWlucyBhIFZpZGVvIGVsZW1lbnQuCi1jbGFzcyBWaWRlb0xheWVyQ2hyb21pdW0gOiBwdWJs
aWMgTGF5ZXJDaHJvbWl1bSB7CitjbGFzcyBWaWRlb0xheWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5
ZXJDaHJvbWl1bQorICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIFZpZGVvRnJhbWVQ
cm92aWRlcjo6Q2xpZW50IHsKIHB1YmxpYzoKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFZpZGVv
TGF5ZXJDaHJvbWl1bT4gY3JlYXRlKENDTGF5ZXJEZWxlZ2F0ZSogPSAwLApAQCAtNTAsNDUgKzUy
LDE0IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY3Jl
YXRlQ0NMYXllckltcGwoKTsKIAotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVz
b3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NUZXh0dXJlVXBkYXRlciYpOwogICAgIHZpcnR1
YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2b2lk
IHJlbGVhc2VQcm92aWRlcigpOwotCi0gICAgdmlydHVhbCB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8o
Q0NMYXllckltcGwqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllclRyZWVIb3N0KENDTGF5
ZXJUcmVlSG9zdCopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFudXBSZXNv
dXJjZXMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFVzaW5nUHJvdmlkZXIoKTsKIAogcHJpdmF0
ZToKLSAgICBzdHJ1Y3QgVGV4dHVyZSB7Ci0gICAgICAgIEludFNpemUgbV92aXNpYmxlU2l6ZTsK
LSAgICAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBtX3RleHR1cmU7Ci0gICAgfTsKLQogICAg
IFZpZGVvTGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqLCBWaWRlb0ZyYW1lUHJvdmlkZXIq
KTsKIAotICAgIHN0YXRpYyBHQzNEZW51bSBkZXRlcm1pbmVUZXh0dXJlRm9ybWF0KGNvbnN0IFZp
ZGVvRnJhbWVDaHJvbWl1bSopOwotICAgIHN0YXRpYyBJbnRTaXplIGNvbXB1dGVWaXNpYmxlU2l6
ZShjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qLCB1bnNpZ25lZCBwbGFuZSk7Ci0gICAgYm9vbCB0
ZXh0dXJlc1ZhbGlkKCk7Ci0gICAgYm9vbCByZXNlcnZlVGV4dHVyZXMoY29uc3QgVmlkZW9GcmFt
ZUNocm9taXVtKiwgR0MzRGVudW0gdGV4dHVyZUZvcm1hdCk7Ci0gICAgdm9pZCB1cGRhdGVUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIFRleHR1cmUmLCBjb25z
dCB2b2lkKikgY29uc3Q7Ci0KLSAgICB2b2lkIHJlc2V0RnJhbWVQYXJhbWV0ZXJzKCk7Ci0KLSAg
ICBib29sIG1fc2tpcHNEcmF3OwotICAgIFZpZGVvRnJhbWVDaHJvbWl1bTo6Rm9ybWF0IG1fZnJh
bWVGb3JtYXQ7Ci0gICAgVmlkZW9GcmFtZVByb3ZpZGVyKiBtX3Byb3ZpZGVyOwotCi0gICAgZW51
bSB7IE1heFBsYW5lcyA9IDMgfTsKLSAgICBUZXh0dXJlIG1fdGV4dHVyZXNbTWF4UGxhbmVzXTsK
LSAgICB1bnNpZ25lZCBtX3BsYW5lczsKLQotICAgIHVuc2lnbmVkIG1fbmF0aXZlVGV4dHVyZUlk
OwotICAgIEludFNpemUgbV9uYXRpdmVUZXh0dXJlU2l6ZTsKLSAgICBJbnRTaXplIG1fbmF0aXZl
VGV4dHVyZVZpc2libGVTaXplOworICAgIFZpZGVvRnJhbWVQcm92aWRlciogbV9wcm92aWRlcjsg
Ly8gT25seSBwb3B1bGF0ZWQgYmV0d2VlbiBjb25zdHJ1Y3Rpb24gYW5kIGNyZWF0ZUNDTGF5ZXJJ
bXBsIGJlaW5nIGNhbGxlZC4KIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5j
cHAKaW5kZXggNmIzN2U4NmE2Y2U2OGQ1MWJhNTJjYTQ4YzIzYzZmNzRmNDU0Y2VjOS4uNjA5MzUx
MGJjYjRjOWQ0YWFkODFmMWE0NzQxMzVhMWUzNDA3ZDk0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRl
b0xheWVySW1wbC5jcHAKQEAgLTI5LDggKzI5LDEwIEBACiAKICNpbmNsdWRlICJjYy9DQ1ZpZGVv
TGF5ZXJJbXBsLmgiCiAKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVt
LmgiCisjaW5jbHVkZSAiUHJvZ3JhbUJpbmRpbmcuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KQEAgLTU5LDc4ICs2MSwyMDcgQEAgY29uc3QgZmxvYXQgQ0NWaWRlb0xheWVySW1wbDo6
eXV2QWRqdXN0WzNdID0gewogICAgIC0wLjVmLAogfTsKIAotQ0NWaWRlb0xheWVySW1wbDo6Q0NW
aWRlb0xheWVySW1wbChpbnQgaWQpCitDQ1ZpZGVvTGF5ZXJJbXBsOjpDQ1ZpZGVvTGF5ZXJJbXBs
KGludCBpZCwgVmlkZW9GcmFtZVByb3ZpZGVyKiBwcm92aWRlcikKICAgICA6IENDTGF5ZXJJbXBs
KGlkKQorICAgICwgbV9wcm92aWRlcihwcm92aWRlcikKIHsKKyAgICBwcm92aWRlci0+c2V0Vmlk
ZW9GcmFtZVByb3ZpZGVyQ2xpZW50KHRoaXMpOwogfQogCiBDQ1ZpZGVvTGF5ZXJJbXBsOjp+Q0NW
aWRlb0xheWVySW1wbCgpCiB7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcHJvdmlkZXJNdXRl
eCk7CisgICAgQVNTRVJUKCFtX3Byb3ZpZGVyKTsgLy8gQ2xlYXJlZCBkdXJpbmcgVmlkZW9MYXll
ckNocm9taXVtOjpyZWxlYXNlUHJvdmlkZXIoKS4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgTWF4UGxhbmVzOyArK2kpCisgICAgICAgIG1fdGV4dHVyZXNbaV0ubV90ZXh0dXJlLmNsZWFy
KCk7CiAgICAgY2xlYW51cFJlc291cmNlcygpOwogfQogCi12b2lkIENDVmlkZW9MYXllckltcGw6
OnNldFRleHR1cmUoc2l6ZV90IGluZGV4LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCwgY29u
c3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgSW50U2l6ZSYgdmlzaWJsZVNpemUpCit2b2lkIENDVmlk
ZW9MYXllckltcGw6OnN0b3BVc2luZ1Byb3ZpZGVyKCkKIHsKLSAgICBBU1NFUlQoaW5kZXggPCAz
KTsKLSAgICBtX3RleHR1cmVzW2luZGV4XS5pZCA9IHRleHR1cmVJZDsKLSAgICBtX3RleHR1cmVz
W2luZGV4XS5zaXplID0gc2l6ZTsKLSAgICBtX3RleHR1cmVzW2luZGV4XS52aXNpYmxlU2l6ZSA9
IHZpc2libGVTaXplOworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3Byb3ZpZGVyTXV0ZXgpOwor
ICAgIG1fcHJvdmlkZXIgPSAwOwogfQogCi12b2lkIENDVmlkZW9MYXllckltcGw6OnNldE5hdGl2
ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQsIGNvbnN0IEludFNpemUmIHNpemUs
IGNvbnN0IEludFNpemUmIHZpc2libGVTaXplKQorLy8gQ29udmVydCBWaWRlb0ZyYW1lQ2hyb21p
dW06OkZvcm1hdCB0byBHcmFwaGljc0NvbnRleHQzRCdzIGZvcm1hdCBlbnVtIHZhbHVlcy4KK3N0
YXRpYyBHQzNEZW51bSBjb252ZXJ0VkZDRm9ybWF0VG9HQzNERm9ybWF0KFZpZGVvRnJhbWVDaHJv
bWl1bTo6Rm9ybWF0IHZmY0Zvcm1hdCkKIHsKLSAgICBtX25hdGl2ZVRleHR1cmVJZCA9IHRleHR1
cmVJZDsKLSAgICBtX25hdGl2ZVRleHR1cmVTaXplID0gc2l6ZTsKLSAgICBtX25hdGl2ZVRleHR1
cmVWaXNpYmxlU2l6ZSA9IHZpc2libGVTaXplOworICAgIHN3aXRjaCAodmZjRm9ybWF0KSB7Cisg
ICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OllWMTI6CisgICAgY2FzZSBWaWRlb0ZyYW1lQ2hy
b21pdW06OllWMTY6CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNF
OworICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpSR0JBOgorICAgICAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkE7CisgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06Ok5hdGl2
ZVRleHR1cmU6CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDsK
KyAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6SW52YWxpZDoKKyAgICBjYXNlIFZpZGVvRnJh
bWVDaHJvbWl1bTo6UkdCNTU1OgorICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpSR0I1NjU6
CisgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OlJHQjI0OgorICAgIGNhc2UgVmlkZW9GcmFt
ZUNocm9taXVtOjpSR0IzMjoKKyAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6TlYxMjoKKyAg
ICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6RW1wdHk6CisgICAgY2FzZSBWaWRlb0ZyYW1lQ2hy
b21pdW06OkFTQ0lJOgorICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpJNDIwOgorICAgICAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUU7CiB9CiAKIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhdyhMYXllclJl
bmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6Omlz
SW1wbFRocmVhZCgpKTsKIAotICAgIGlmIChtX3NraXBzRHJhdykKKyAgICBNdXRleExvY2tlciBs
b2NrZXIobV9wcm92aWRlck11dGV4KTsKKworICAgIGlmICghbV9wcm92aWRlcikKICAgICAgICAg
cmV0dXJuOwogCi0gICAgc3dpdGNoIChtX2ZyYW1lRm9ybWF0KSB7Ci0gICAgY2FzZSBWaWRlb0Zy
YW1lQ2hyb21pdW06OllWMTI6Ci0gICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OllWMTY6Cisg
ICAgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSA9IG1fcHJvdmlkZXItPmdldEN1cnJlbnRGcmFt
ZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBHQzNEZW51bSBmb3Jt
YXQgPSBjb252ZXJ0VkZDRm9ybWF0VG9HQzNERm9ybWF0KGZyYW1lLT5mb3JtYXQoKSk7CisKKyAg
ICBpZiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIWNvcHlGcmFtZVRvVGV4dHVyZXMoZnJhbWUsIGZvcm1hdCwg
bGF5ZXJSZW5kZXJlcikpCisgICAgICAgIHJldHVybjsKKworICAgIHN3aXRjaCAoZm9ybWF0KSB7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgogICAgICAgICBkcmF3WVVW
KGxheWVyUmVuZGVyZXIpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIFZpZGVvRnJhbWVDaHJv
bWl1bTo6UkdCQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgogICAgICAgICBk
cmF3UkdCQShsYXllclJlbmRlcmVyKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWaWRlb0Zy
YW1lQ2hyb21pdW06Ok5hdGl2ZVRleHR1cmU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRDoKICAgICAgICAgZHJhd05hdGl2ZVRleHR1cmUobGF5ZXJSZW5kZXJlcik7CiAg
ICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
b3RoZXIgcGF0aHMuCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgIGJyZWFrOwor
ICAgICAgICBDUkFTSCgpOyAvLyBTb21lb25lIHVwZGF0ZWQgY29udmVydFZGQ0Zvcm1hdFRvR0Mz
REZvcm1hdCBhYm92ZSBidXQgdXBkYXRlIHRoaXMhCisgICAgfQorCisgICAgZm9yICh1bnNpZ25l
ZCBwbGFuZSA9IDA7IHBsYW5lIDwgZnJhbWUtPnBsYW5lcygpOyArK3BsYW5lKQorICAgICAgICBt
X3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUtPnVucmVzZXJ2ZSgpOworICAgIG1fcHJvdmlkZXIt
PnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7Cit9CisKK2Jvb2wgQ0NWaWRlb0xheWVySW1wbDo6Y29w
eUZyYW1lVG9UZXh0dXJlcyhjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lLCBHQzNEZW51
bSBmb3JtYXQsIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKK3sKKyAgICBp
ZiAoZnJhbWUtPmZvcm1hdCgpID09IFZpZGVvRnJhbWVDaHJvbWl1bTo6TmF0aXZlVGV4dHVyZSkg
eworICAgICAgICBtX25hdGl2ZVRleHR1cmVJZCA9IGZyYW1lLT50ZXh0dXJlSWQoKTsKKyAgICAg
ICAgbV9uYXRpdmVUZXh0dXJlU2l6ZSA9IEludFNpemUoZnJhbWUtPndpZHRoKCksIGZyYW1lLT5o
ZWlnaHQoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICghcmVzZXJ2
ZVRleHR1cmVzKGZyYW1lLCBmb3JtYXQsIGxheWVyUmVuZGVyZXIpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBmcmFtZS0+cGxh
bmVzKCk7ICsrcGxhbmUpIHsKKyAgICAgICAgQVNTRVJUKGZyYW1lLT5yZXF1aXJlZFRleHR1cmVT
aXplKHBsYW5lKSA9PSBtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUtPnNpemUoKSk7CisgICAg
ICAgIGNvcHlQbGFuZVRvVGV4dHVyZShsYXllclJlbmRlcmVyLCBmcmFtZS0+ZGF0YShwbGFuZSks
IHBsYW5lKTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IGZyYW1lLT5wbGFuZXMo
KTsgcGxhbmUgPCBNYXhQbGFuZXM7ICsrcGxhbmUpIHsKKyAgICAgICAgVGV4dHVyZSYgdGV4dHVy
ZSA9IG1fdGV4dHVyZXNbcGxhbmVdOworICAgICAgICB0ZXh0dXJlLm1fdGV4dHVyZS5jbGVhcigp
OworICAgICAgICB0ZXh0dXJlLm1fdmlzaWJsZVNpemUgPSBJbnRTaXplKCk7CisgICAgfQorICAg
IG1fcGxhbmVzID0gZnJhbWUtPnBsYW5lcygpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IENDVmlkZW9MYXllckltcGw6OmNvcHlQbGFuZVRvVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21p
dW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IHZvaWQqIHBsYW5lLCBpbnQgaW5kZXgpCit7CisgICAg
VGV4dHVyZSYgdGV4dHVyZSA9IG1fdGV4dHVyZXNbaW5kZXhdOworICAgIEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOworICAgIFRleHR1cmVBbGxv
Y2F0b3IqIGFsbG9jYXRvciA9IGxheWVyUmVuZGVyZXItPnJlbmRlclN1cmZhY2VUZXh0dXJlQWxs
b2NhdG9yKCk7CisgICAgdGV4dHVyZS5tX3RleHR1cmUtPmJpbmRUZXh0dXJlKGNvbnRleHQsIGFs
bG9jYXRvcik7CisgICAgR0MzRGVudW0gZm9ybWF0ID0gdGV4dHVyZS5tX3RleHR1cmUtPmZvcm1h
dCgpOworICAgIEludFNpemUgZGltZW5zaW9ucyA9IHRleHR1cmUubV90ZXh0dXJlLT5zaXplKCk7
CisKKyAgICB2b2lkKiBtZW0gPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGNv
bnRleHQtPmdldEV4dGVuc2lvbnMoKSktPm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgZGltZW5zaW9ucy53aWR0aCgpLCBkaW1l
bnNpb25zLmhlaWdodCgpLCBmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
LCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6V1JJVEVfT05MWSk7CisgICAgaWYgKG1lbSkgeworICAg
ICAgICBtZW1jcHkobWVtLCBwbGFuZSwgZGltZW5zaW9ucy53aWR0aCgpICogZGltZW5zaW9ucy5o
ZWlnaHQoKSk7CisgICAgICAgIEdMQyhjb250ZXh0LCBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RD
aHJvbWl1bSo+KGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKSktPnVubWFwVGV4U3ViSW1hZ2UyRENI
Uk9NSVVNKG1lbSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIG1hcFRleFN1YkltYWdl
MkRDSFJPTUlVTSBmYWlscywgdGhlbiBkbyB0aGUgc2xvd2VyIHRleFN1YkltYWdlMkQKKyAgICAg
ICAgLy8gdXBsb2FkLiBUaGlzIGRvZXMgdHdpY2UgdGhlIGNvcGllcyBhcyBtYXBUZXhTdWJJbWFn
ZTJEQ0hST01JVU0sIG9uZQorICAgICAgICAvLyBpbiB0aGUgY29tbWFuZCBidWZmZXIgYW5kIGFu
b3RoZXIgdG8gdGhlIHRleHR1cmUuCisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhT
dWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAwLCAwLCBkaW1lbnNp
b25zLndpZHRoKCksIGRpbWVuc2lvbnMuaGVpZ2h0KCksIGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUsIHBsYW5lKSk7CiAgICAgfQogfQogCitzdGF0aWMgSW50U2l6ZSBj
b21wdXRlVmlzaWJsZVNpemUoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSwgdW5zaWdu
ZWQgcGxhbmUpCit7CisgICAgaW50IHZpc2libGVXaWR0aCA9IGZyYW1lLT53aWR0aChwbGFuZSk7
CisgICAgaW50IHZpc2libGVIZWlnaHQgPSBmcmFtZS0+aGVpZ2h0KHBsYW5lKTsKKyAgICAvLyBX
aGVuIHRoZXJlIGFyZSBkZWFkIHBpeGVscyBhdCB0aGUgZWRnZSBvZiB0aGUgdGV4dHVyZSwgZGVj
cmVhc2UKKyAgICAvLyB0aGUgZnJhbWUgd2lkdGggYnkgMSB0byBwcmV2ZW50IHRoZSByaWdodG1v
c3QgcGl4ZWxzIGZyb20KKyAgICAvLyBpbnRlcnBvbGF0aW5nIHdpdGggdGhlIGRlYWQgcGl4ZWxz
LgorICAgIGlmIChmcmFtZS0+aGFzUGFkZGluZ0J5dGVzKHBsYW5lKSkKKyAgICAgICAgLS12aXNp
YmxlV2lkdGg7CisKKyAgICAvLyBJbiBZVjEyLCBldmVyeSAyeDIgc3F1YXJlIG9mIFkgdmFsdWVz
IGNvcnJlc3BvbmRzIHRvIG9uZSBVIGFuZAorICAgIC8vIG9uZSBWIHZhbHVlLiBJZiB3ZSBkZWNy
ZWFzZSB0aGUgd2lkdGggb2YgdGhlIFVWIHBsYW5lLCB3ZSBtdXN0IGRlY3JlYXNlIHRoZQorICAg
IC8vIHdpZHRoIG9mIHRoZSBZIHRleHR1cmUgYnkgMiBmb3IgcHJvcGVyIGFsaWdubWVudC4gVGhp
cyBtdXN0IGhhcHBlbgorICAgIC8vIGFsd2F5cywgZXZlbiBpZiBZJ3MgdGV4dHVyZSBkb2VzIG5v
dCBoYXZlIHBhZGRpbmcgYnl0ZXMuCisgICAgaWYgKHBsYW5lID09IFZpZGVvRnJhbWVDaHJvbWl1
bTo6eVBsYW5lICYmIGZyYW1lLT5mb3JtYXQoKSA9PSBWaWRlb0ZyYW1lQ2hyb21pdW06OllWMTIp
IHsKKyAgICAgICAgaWYgKGZyYW1lLT5oYXNQYWRkaW5nQnl0ZXMoVmlkZW9GcmFtZUNocm9taXVt
Ojp1UGxhbmUpKSB7CisgICAgICAgICAgICBpbnQgb3JpZ2luYWxXaWR0aCA9IGZyYW1lLT53aWR0
aChwbGFuZSk7CisgICAgICAgICAgICB2aXNpYmxlV2lkdGggPSBvcmlnaW5hbFdpZHRoIC0gMjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBJbnRTaXplKHZpc2libGVXaWR0aCwgdmlz
aWJsZUhlaWdodCk7Cit9CisKK2Jvb2wgQ0NWaWRlb0xheWVySW1wbDo6cmVzZXJ2ZVRleHR1cmVz
KGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUsIEdDM0RlbnVtIGZvcm1hdCwgTGF5ZXJS
ZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQoreworICAgIGlmIChmcmFtZS0+cGxhbmVz
KCkgPiBNYXhQbGFuZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpbnQgbWF4VGV4dHVy
ZVNpemUgPSBsYXllclJlbmRlcmVyLT5jYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZTsKKyAg
ICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBmcmFtZS0+cGxhbmVzKCk7ICsrcGxh
bmUpIHsKKyAgICAgICAgSW50U2l6ZSByZXF1aXJlZFRleHR1cmVTaXplID0gZnJhbWUtPnJlcXVp
cmVkVGV4dHVyZVNpemUocGxhbmUpOworICAgICAgICAvLyBJZiB0aGUgcmVuZGVyZXIgY2Fubm90
IGhhbmRsZSB0aGlzIGxhcmdlIG9mIGEgdGV4dHVyZSwgcmV0dXJuIGZhbHNlLgorICAgICAgICAv
LyBGSVhNRTogUmVtb3ZlIHRoaXMgdGVzdCB3aGVuIHRpbGVkIGxheWVycyBhcmUgaW1wbGVtZW50
ZWQuCisgICAgICAgIGlmIChyZXF1aXJlZFRleHR1cmVTaXplLmlzWmVybygpIHx8IHJlcXVpcmVk
VGV4dHVyZVNpemUud2lkdGgoKSA+IG1heFRleHR1cmVTaXplIHx8IHJlcXVpcmVkVGV4dHVyZVNp
emUuaGVpZ2h0KCkgPiBtYXhUZXh0dXJlU2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgaWYgKCFtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUpIHsKKyAgICAgICAgICAg
IG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZSA9IE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobGF5
ZXJSZW5kZXJlci0+cmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyKCkpOworICAgICAgICAgICAg
aWYgKCFtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgbV90ZXh0dXJlc1twbGFuZV0ubV92aXNpYmxlU2l6ZSA9IElu
dFNpemUoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0
dXJlLT5zaXplKCkgIT0gcmVxdWlyZWRUZXh0dXJlU2l6ZSkKKyAgICAgICAgICAgIG1fdGV4dHVy
ZXNbcGxhbmVdLm1fdmlzaWJsZVNpemUgPSBjb21wdXRlVmlzaWJsZVNpemUoZnJhbWUsIHBsYW5l
KTsKKyAgICAgICAgbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlLT5yZXNlcnZlKHJlcXVpcmVk
VGV4dHVyZVNpemUsIGZvcm1hdCk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCiB2b2lk
IENDVmlkZW9MYXllckltcGw6OmRyYXdZVVYoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJl
bmRlcmVyKSBjb25zdAogewogICAgIGNvbnN0IFlVVlByb2dyYW0qIHByb2dyYW0gPSBsYXllclJl
bmRlcmVyLT52aWRlb0xheWVyWVVWUHJvZ3JhbSgpOwogICAgIEFTU0VSVChwcm9ncmFtICYmIHBy
b2dyYW0tPmluaXRpYWxpemVkKCkpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQg
PSBsYXllclJlbmRlcmVyLT5jb250ZXh0KCk7Ci0gICAgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVy
ZSB5VGV4dHVyZSA9IG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjp5UGxhbmVdOwotICAg
IENDVmlkZW9MYXllckltcGw6OlRleHR1cmUgdVRleHR1cmUgPSBtX3RleHR1cmVzW1ZpZGVvRnJh
bWVDaHJvbWl1bTo6dVBsYW5lXTsKLSAgICBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlIHZUZXh0
dXJlID0gbV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnZQbGFuZV07CisgICAgY29uc3Qg
VGV4dHVyZSYgeVRleHR1cmUgPSBtX3RleHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6eVBsYW5l
XTsKKyAgICBjb25zdCBUZXh0dXJlJiB1VGV4dHVyZSA9IG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNo
cm9taXVtOjp1UGxhbmVdOworICAgIGNvbnN0IFRleHR1cmUmIHZUZXh0dXJlID0gbV90ZXh0dXJl
c1tWaWRlb0ZyYW1lQ2hyb21pdW06OnZQbGFuZV07CiAKICAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEpKTsKLSAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIHlUZXh0dXJlLmlkKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB5VGV4dHVyZS5tX3RleHR1cmUtPnRleHR1
cmVJZCgpKSk7CiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkUyKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB1VGV4dHVyZS5pZCkpOworICAg
IEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgdVRleHR1cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOwogICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMykp
OwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgdlRleHR1cmUuaWQpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHZUZXh0dXJlLm1fdGV4
dHVyZS0+dGV4dHVyZUlkKCkpKTsKIAogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51c2VQcm9n
cmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOwogCi0gICAgZmxvYXQgeVdpZHRoU2NhbGVGYWN0b3Ig
PSBzdGF0aWNfY2FzdDxmbG9hdD4oeVRleHR1cmUudmlzaWJsZVNpemUud2lkdGgoKSkgLyB5VGV4
dHVyZS5zaXplLndpZHRoKCk7CisgICAgZmxvYXQgeVdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNf
Y2FzdDxmbG9hdD4oeVRleHR1cmUubV92aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHlUZXh0dXJlLm1f
dGV4dHVyZS0+c2l6ZSgpLndpZHRoKCk7CiAgICAgLy8gQXJiaXRyYXJpbHkgdGFrZSB0aGUgdSBz
aXplcyBiZWNhdXNlIHUgYW5kIHYgZGltZW5zaW9ucyBhcmUgaWRlbnRpY2FsLgotICAgIGZsb2F0
IHV2V2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0Pih1VGV4dHVyZS52aXNpYmxl
U2l6ZS53aWR0aCgpKSAvIHVUZXh0dXJlLnNpemUud2lkdGgoKTsKKyAgICBmbG9hdCB1dldpZHRo
U2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4odVRleHR1cmUubV92aXNpYmxlU2l6ZS53
aWR0aCgpKSAvIHVUZXh0dXJlLm1fdGV4dHVyZS0+c2l6ZSgpLndpZHRoKCk7CiAgICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS55V2lkdGhT
Y2FsZUZhY3RvckxvY2F0aW9uKCksIHlXaWR0aFNjYWxlRmFjdG9yKSk7CiAgICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS51dldpZHRoU2Nh
bGVGYWN0b3JMb2NhdGlvbigpLCB1dldpZHRoU2NhbGVGYWN0b3IpKTsKIApAQCAtMTUwLDIxICsy
ODEsMTggQEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3WVVWKExheWVyUmVuZGVyZXJDaHJv
bWl1bSogbGF5ZXJSZW5kZXJlcikgY29uc3QKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0
aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKIH0KIAotdm9pZCBDQ1Zp
ZGVvTGF5ZXJJbXBsOjpkcmF3UkdCQShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVy
ZXIpIGNvbnN0Cit0ZW1wbGF0ZTxjbGFzcyBQcm9ncmFtPgordm9pZCBDQ1ZpZGVvTGF5ZXJJbXBs
OjpkcmF3Q29tbW9uKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgUHJvZ3Jh
bSogcHJvZ3JhbSwgZmxvYXQgd2lkdGhTY2FsZUZhY3RvciwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0
dXJlSWQpIGNvbnN0CiB7Ci0gICAgY29uc3QgUkdCQVByb2dyYW0qIHByb2dyYW0gPSBsYXllclJl
bmRlcmVyLT52aWRlb0xheWVyUkdCQVByb2dyYW0oKTsKICAgICBBU1NFUlQocHJvZ3JhbSAmJiBw
cm9ncmFtLT5pbml0aWFsaXplZCgpKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
ID0gbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOwotICAgIENDVmlkZW9MYXllckltcGw6OlRleHR1
cmUgdGV4dHVyZSA9IG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjpyZ2JQbGFuZV07CiAK
ICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRTApKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmUuaWQpKTsKKyAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRl
eHR1cmVJZCkpOwogCiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3Jh
bS0+cHJvZ3JhbSgpKSk7Ci0gICAgZmxvYXQgd2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0
PGZsb2F0Pih0ZXh0dXJlLnZpc2libGVTaXplLndpZHRoKCkpIC8gdGV4dHVyZS5zaXplLndpZHRo
KCk7CiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00Zihwcm9ncmFtLT52ZXJ0ZXhT
aGFkZXIoKS50ZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCAwLCAwLCB3aWR0aFNjYWxlRmFjdG9yLCAx
KSk7Ci0KICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdt
ZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKIAogICAgIGxheWVyUmVuZGVyZXIt
PmRyYXdUZXh0dXJlZFF1YWQoZHJhd1RyYW5zZm9ybSgpLCBib3VuZHMoKS53aWR0aCgpLCBib3Vu
ZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwgbGF5ZXJSZW5kZXJlci0+c2hhcmVkR2VvbWV0
cnlRdWFkKCksCkBAIC0xNzMsMjYgKzMwMSwxOCBAQCB2b2lkIENDVmlkZW9MYXllckltcGw6OmRy
YXdSR0JBKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikgY29uc3QKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsKIH0KIAordm9pZCBDQ1ZpZGVvTGF5
ZXJJbXBsOjpkcmF3UkdCQShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpIGNv
bnN0Cit7CisgICAgY29uc3QgUkdCQVByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT52
aWRlb0xheWVyUkdCQVByb2dyYW0oKTsKKyAgICBjb25zdCBUZXh0dXJlJiB0ZXh0dXJlID0gbV90
ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnJnYlBsYW5lXTsKKyAgICBmbG9hdCB3aWR0aFNj
YWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRleHR1cmUubV92aXNpYmxlU2l6ZS53aWR0
aCgpKSAvIHRleHR1cmUubV90ZXh0dXJlLT5zaXplKCkud2lkdGgoKTsKKyAgICBkcmF3Q29tbW9u
KGxheWVyUmVuZGVyZXIsIHByb2dyYW0sIHdpZHRoU2NhbGVGYWN0b3IsIHRleHR1cmUubV90ZXh0
dXJlLT50ZXh0dXJlSWQoKSk7Cit9CisKIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhd05hdGl2
ZVRleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKSBjb25zdAogewog
ICAgIGNvbnN0IE5hdGl2ZVRleHR1cmVQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+
dmlkZW9MYXllck5hdGl2ZVRleHR1cmVQcm9ncmFtKCk7Ci0gICAgQVNTRVJUKHByb2dyYW0gJiYg
cHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCA9IGxheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKLQotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwotICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgbV9uYXRpdmVUZXh0dXJlSWQpKTsKLQotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51c2VQ
cm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOwotICAgIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3Ig
PSBzdGF0aWNfY2FzdDxmbG9hdD4obV9uYXRpdmVUZXh0dXJlVmlzaWJsZVNpemUud2lkdGgoKSkg
LyBtX25hdGl2ZVRleHR1cmVTaXplLndpZHRoKCk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PnVuaWZvcm00Zihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS50ZXhUcmFuc2Zvcm1Mb2NhdGlvbigp
LCAwLCAwLCB3aWR0aFNjYWxlRmFjdG9yLCAxKSk7Ci0KLSAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCks
IDApKTsKLQotICAgIGxheWVyUmVuZGVyZXItPmRyYXdUZXh0dXJlZFF1YWQoZHJhd1RyYW5zZm9y
bSgpLCBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwg
bGF5ZXJSZW5kZXJlci0+c2hhcmVkR2VvbWV0cnlRdWFkKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRT
aGFkZXIoKS5hbHBoYUxvY2F0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAtMSk7CisgICAgZHJhd0NvbW1vbihsYXllclJlbmRlcmVyLCBwcm9ncmFtLCAxLCBtX25h
dGl2ZVRleHR1cmVJZCk7CiB9CiAKIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHVtcExheWVyUHJv
cGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllcklt
cGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlk
ZW9MYXllckltcGwuaAppbmRleCBlNTMxN2FkMzRkYWVmY2I1MDYxMTZlOWQzODA4YmZhNWY5MmFi
NzMwLi5hNTNkYWZmNGI4ZTQ5ZGI3NjMyMDliYWEyN2QwY2IzOTMxZjRkNWRkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5
ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NWaWRlb0xheWVySW1wbC5oCkBAIC0yNiwyMSArMjYsMjMgQEAKICNpZm5kZWYgQ0NWaWRl
b0xheWVySW1wbF9oCiAjZGVmaW5lIENDVmlkZW9MYXllckltcGxfaAogCi0jaW5jbHVkZSAiUHJv
Z3JhbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgogI2luY2x1ZGUgIlNo
YWRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVmlkZW9GcmFtZUNocm9taXVtLmgiCisjaW5jbHVk
ZSAiVmlkZW9GcmFtZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiVmlkZW9MYXllckNocm9taXVtLmgi
CiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBWaWRlb0ZyYW1lUHJvdmlkZXI7Cit0ZW1wbGF0ZTxjbGFzcyBWZXJ0ZXhTaGFkZXIsIGNs
YXNzIEZyYWdtZW50U2hhZGVyPiBjbGFzcyBQcm9ncmFtQmluZGluZzsKIAotY2xhc3MgQ0NWaWRl
b0xheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CitjbGFzcyBDQ1ZpZGVvTGF5ZXJJbXBs
IDogcHVibGljIENDTGF5ZXJJbXBsCisgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIFZp
ZGVvRnJhbWVQcm92aWRlcjo6Q2xpZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDQ1ZpZGVvTGF5ZXJJbXBsPiBjcmVhdGUoaW50IGlkKQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENDVmlkZW9MYXllckltcGw+IGNyZWF0ZShpbnQgaWQsIFZpZGVvRnJhbWVQcm92aWRlciogcHJv
dmlkZXIpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENDVmlkZW9MYXllcklt
cGwoaWQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ1ZpZGVvTGF5ZXJJbXBsKGlk
LCBwcm92aWRlcikpOwogICAgIH0KICAgICB2aXJ0dWFsIH5DQ1ZpZGVvTGF5ZXJJbXBsKCk7CiAK
QEAgLTUyLDM2ICs1NCwzNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVy
UHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CiAKLSAgICB2b2lkIHNl
dFNraXBzRHJhdyhib29sIHNraXBzRHJhdykgeyBtX3NraXBzRHJhdyA9IHNraXBzRHJhdzsgfQot
ICAgIHZvaWQgc2V0RnJhbWVGb3JtYXQoVmlkZW9GcmFtZUNocm9taXVtOjpGb3JtYXQgZm9ybWF0
KSB7IG1fZnJhbWVGb3JtYXQgPSBmb3JtYXQ7IH0KLSAgICB2b2lkIHNldFRleHR1cmUoc2l6ZV90
LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFNp
emUmIHZpc2libGVTaXplKTsKLSAgICB2b2lkIHNldE5hdGl2ZVRleHR1cmUoUGxhdGZvcm0zRE9i
amVjdCB0ZXh0dXJlSWQsIGNvbnN0IEludFNpemUmLCBjb25zdCBJbnRTaXplJiB2aXNpYmxlU2l6
ZSk7CisgICAgdmlydHVhbCB2b2lkIHN0b3BVc2luZ1Byb3ZpZGVyKCk7CiAKIHByaXZhdGU6Ci0g
ICAgZXhwbGljaXQgQ0NWaWRlb0xheWVySW1wbChpbnQpOworICAgIGV4cGxpY2l0IENDVmlkZW9M
YXllckltcGwoaW50LCBWaWRlb0ZyYW1lUHJvdmlkZXIqKTsKIAogICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiVmlkZW9MYXllciI7IH0K
IAotICAgIHN0cnVjdCBUZXh0dXJlIHsKLSAgICAgICAgUGxhdGZvcm0zRE9iamVjdCBpZDsKLSAg
ICAgICAgSW50U2l6ZSBzaXplOwotICAgICAgICBJbnRTaXplIHZpc2libGVTaXplOwotICAgIH07
Ci0KKyAgICBib29sIGNvcHlGcmFtZVRvVGV4dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9taXVt
KiwgR0MzRGVudW0gZm9ybWF0LCBMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKKyAgICB2b2lkIGNv
cHlQbGFuZVRvVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBjb25zdCB2b2lkKiBwbGFu
ZSwgaW50IGluZGV4KTsKKyAgICBib29sIHJlc2VydmVUZXh0dXJlcyhjb25zdCBWaWRlb0ZyYW1l
Q2hyb21pdW0qLCBHQzNEZW51bSBmb3JtYXQsIExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwogICAg
IHZvaWQgZHJhd1lVVihMYXllclJlbmRlcmVyQ2hyb21pdW0qKSBjb25zdDsKICAgICB2b2lkIGRy
YXdSR0JBKExheWVyUmVuZGVyZXJDaHJvbWl1bSopIGNvbnN0OwogICAgIHZvaWQgZHJhd05hdGl2
ZVRleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xh
c3MgUHJvZ3JhbT4gdm9pZCBkcmF3Q29tbW9uKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIFByb2dy
YW0qLCBmbG9hdCB3aWR0aFNjYWxlRmFjdG9yLCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCkg
Y29uc3Q7CisKKyAgICBNdXRleCBtX3Byb3ZpZGVyTXV0ZXg7IC8vIEd1YXJkcyBtX3Byb3ZpZGVy
IGJlbG93LgorICAgIFZpZGVvRnJhbWVQcm92aWRlciogbV9wcm92aWRlcjsKIAogICAgIHN0YXRp
YyBjb25zdCBmbG9hdCB5dXYyUkdCWzldOwogICAgIHN0YXRpYyBjb25zdCBmbG9hdCB5dXZBZGp1
c3RbM107CiAKLSAgICBib29sIG1fc2tpcHNEcmF3OwotICAgIFZpZGVvRnJhbWVDaHJvbWl1bTo6
Rm9ybWF0IG1fZnJhbWVGb3JtYXQ7Ci0gICAgVGV4dHVyZSBtX3RleHR1cmVzWzNdOworICAgIHN0
cnVjdCBUZXh0dXJlIHsKKyAgICAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBtX3RleHR1cmU7
CisgICAgICAgIEludFNpemUgbV92aXNpYmxlU2l6ZTsKKyAgICB9OworICAgIGVudW0geyBNYXhQ
bGFuZXMgPSAzIH07CisgICAgVGV4dHVyZSBtX3RleHR1cmVzW01heFBsYW5lc107CisgICAgaW50
IG1fcGxhbmVzOwogCiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX25hdGl2ZVRleHR1cmVJZDsKICAg
ICBJbnRTaXplIG1fbmF0aXZlVGV4dHVyZVNpemU7Ci0gICAgSW50U2l6ZSBtX25hdGl2ZVRleHR1
cmVWaXNpYmxlU2l6ZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwCmluZGV4IGJjZTVmNjIzODM5YWYy
NWQ0MDAzNDc1NWIzY2RiZjhiNGUwMjZiYzAuLmUyN2Y3NmMwMDcwMzEwMTc0ODBhNWJmNDExNjVk
OTdiNzg1ZjMwMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1l
ZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcApAQCAtMTAxLDEwICsxMDEsMTAgQEAgV2ViTWVk
aWFQbGF5ZXIqIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6bWVkaWFQbGF5ZXIoKSBjb25zdAog
CiBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6On5XZWJNZWRpYVBsYXllckNsaWVudEltcGwoKQog
ewotICAgIC8vIFZpZGVvTGF5ZXJDaHJvbWl1bSBtYXkgb3V0bGl2ZSB0aGlzIG9iamVjdCBzbyBj
bGVhciB0aGUgYmFjayBwb2ludGVyLgogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
LSAgICBpZiAobV92aWRlb0xheWVyKQotICAgICAgICBtX3ZpZGVvTGF5ZXItPnJlbGVhc2VQcm92
aWRlcigpOworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2NvbXBvc2l0aW5nTXV0ZXgpOworICAg
IGlmIChtX3ZpZGVvRnJhbWVQcm92aWRlckNsaWVudCkKKyAgICAgICAgbV92aWRlb0ZyYW1lUHJv
dmlkZXJDbGllbnQtPnN0b3BVc2luZ1Byb3ZpZGVyKCk7CiAjZW5kaWYKIH0KIApAQCAtNTgxLDgg
KzU4MSwxNSBAQCBib29sIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6YWNjZWxlcmF0ZWRSZW5k
ZXJpbmdJblVzZSgpCiAgICAgcmV0dXJuIG1fdmlkZW9MYXllciAmJiBtX3ZpZGVvTGF5ZXItPmxh
eWVyVHJlZUhvc3QoKTsKIH0KIAordm9pZCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnNldFZp
ZGVvRnJhbWVQcm92aWRlckNsaWVudChWaWRlb0ZyYW1lUHJvdmlkZXI6OkNsaWVudCogY2xpZW50
KQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2NvbXBvc2l0aW5nTXV0ZXgpOworICAgIG1f
dmlkZW9GcmFtZVByb3ZpZGVyQ2xpZW50ID0gY2xpZW50OworfQorCiBWaWRlb0ZyYW1lQ2hyb21p
dW0qIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6Z2V0Q3VycmVudEZyYW1lKCkKIHsKKyAgICBN
dXRleExvY2tlciBsb2NrZXIobV9jb21wb3NpdGluZ011dGV4KTsKICAgICBBU1NFUlQoIW1fY3Vy
cmVudFZpZGVvRnJhbWUpOwogICAgIGlmIChtX3dlYk1lZGlhUGxheWVyICYmICFtX2N1cnJlbnRW
aWRlb0ZyYW1lKSB7CiAgICAgICAgIFdlYlZpZGVvRnJhbWUqIHdlYmtpdFZpZGVvRnJhbWUgPSBt
X3dlYk1lZGlhUGxheWVyLT5nZXRDdXJyZW50RnJhbWUoKTsKQEAgLTU5NCw2ICs2MDEsNyBAQCBW
aWRlb0ZyYW1lQ2hyb21pdW0qIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6Z2V0Q3VycmVudEZy
YW1lKCkKIAogdm9pZCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OnB1dEN1cnJlbnRGcmFtZShW
aWRlb0ZyYW1lQ2hyb21pdW0qIHZpZGVvRnJhbWUpCiB7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fY29tcG9zaXRpbmdNdXRleCk7CiAgICAgaWYgKHZpZGVvRnJhbWUgJiYgdmlkZW9GcmFtZSA9
PSBtX2N1cnJlbnRWaWRlb0ZyYW1lKSB7CiAgICAgICAgIGlmIChtX3dlYk1lZGlhUGxheWVyKSB7
CiAgICAgICAgICAgICBtX3dlYk1lZGlhUGxheWVyLT5wdXRDdXJyZW50RnJhbWUoCkBAIC02MTMs
NiArNjIxLDcgQEAgUGFzc093blB0cjxNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U+IFdlYk1l
ZGlhUGxheWVyQ2xpZW50SW1wbDo6Y3JlYXRlKE1lZGlhUGwKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCiAgICAgRnJhbWUqIGZyYW1lID0gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxl
bWVudCo+KAogICAgICAgICBjbGllbnQtPm1fbWVkaWFQbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50
KCkpLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGNsaWVudC0+bV92aWRlb0ZyYW1lUHJvdmlk
ZXJDbGllbnQgPSAwOwogCiAgICAgLy8gVGhpcyBkb2VzIG5vdCBhY3R1YWxseSBjaGVjayB3aGV0
aGVyIHRoZSBoYXJkd2FyZSBjYW4gc3VwcG9ydCBhY2NlbGVyYXRlZAogICAgIC8vIGNvbXBvc2l0
aW5nLCBidXQgb25seSBpZiB0aGUgZmxhZyBpcyBzZXQuIEhvd2V2ZXIsIHRoaXMgaXMgY2hlY2tl
ZCBsYXppbHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlh
UGxheWVyQ2xpZW50SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQ
bGF5ZXJDbGllbnRJbXBsLmgKaW5kZXggMTA4ODgzMGNiMDkzYzU3NDQ4MDQ2MDIzNThmZmIzYWIz
NWVhY2Q1My4uYzUyMjQ3Y2VhOTBhNmIxNDJhZWQ3NmQwYWMwZmFlNzIxYWEzMTFjOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBs
LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJ
bXBsLmgKQEAgLTEzMCw3ICsxMzAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB1bnNpZ25lZCBk
cm9wcGVkRnJhbWVDb3VudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgYXVkaW9EZWNv
ZGVkQnl0ZUNvdW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCB2aWRlb0RlY29kZWRC
eXRlQ291bnQoKSBjb25zdDsKLSAgICAKKwogI2lmIEVOQUJMRShXRUJfQVVESU8pCiAgICAgdmly
dHVhbCBXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyKiBhdWRpb1NvdXJjZVByb3ZpZGVyKCk7
CiAjZW5kaWYKQEAgLTEzOSw2ICsxMzksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHN1
cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdDsKIAogICAgIC8vIFZpZGVvRnJhbWVQ
cm92aWRlciBtZXRob2RzOgorICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0ZyYW1lUHJvdmlkZXJD
bGllbnQoVmlkZW9GcmFtZVByb3ZpZGVyOjpDbGllbnQqKTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6
OlZpZGVvRnJhbWVDaHJvbWl1bSogZ2V0Q3VycmVudEZyYW1lKCk7CiAgICAgdmlydHVhbCB2b2lk
IHB1dEN1cnJlbnRGcmFtZShXZWJDb3JlOjpWaWRlb0ZyYW1lQ2hyb21pdW0qKTsKICNlbmRpZgpA
QCAtMTU5LDYgKzE2MCw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiB0
eXBlLCBjb25zdCBXVEY6OlN0cmluZyYgY29kZWNzKTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiAgICAgYm9vbCBhY2NlbGVyYXRlZFJlbmRlcmluZ0luVXNlKCk7CisKKyAgICBN
dXRleCBtX2NvbXBvc2l0aW5nTXV0ZXg7IC8vIEd1YXJkcyBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRo
ZSBtYWluIHRocmVhZCBhbmQgY29tcGlzaXRpbmcgdGhyZWFkLgorICAgIFZpZGVvRnJhbWVQcm92
aWRlcjo6Q2xpZW50KiBtX3ZpZGVvRnJhbWVQcm92aWRlckNsaWVudDsKICNlbmRpZgogCiAgICAg
V2ViQ29yZTo6TWVkaWFQbGF5ZXIqIG1fbWVkaWFQbGF5ZXI7CkBAIC0xOTEsMTMgKzE5NSwxMyBA
QCBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9ybWF0KHNpemVfdCBudW1iZXJP
ZkNoYW5uZWxzLCBmbG9hdCBzYW1wbGVSYXRlKTsKIAogICAgICAgICB2b2lkIHdyYXAoV2ViQ29y
ZTo6QXVkaW9Tb3VyY2VQcm92aWRlckNsaWVudCogY2xpZW50KSB7IG1fY2xpZW50ID0gY2xpZW50
OyB9Ci0gICAgICAgIAorCiAgICAgcHJpdmF0ZToKICAgICAgICAgV2ViQ29yZTo6QXVkaW9Tb3Vy
Y2VQcm92aWRlckNsaWVudCogbV9jbGllbnQ7CiAgICAgfTsKIAogICAgIC8vIEF1ZGlvU291cmNl
UHJvdmlkZXJJbXBsIHdyYXBzIGEgV2ViQXVkaW9Tb3VyY2VQcm92aWRlci4KLSAgICAvLyBwcm92
aWRlSW5wdXQoKSBjYWxscyBpbnRvIENocm9taXVtIHRvIGdldCBhIHJlbmRlcmVkIGF1ZGlvIHN0
cmVhbS4gCisgICAgLy8gcHJvdmlkZUlucHV0KCkgY2FsbHMgaW50byBDaHJvbWl1bSB0byBnZXQg
YSByZW5kZXJlZCBhdWRpbyBzdHJlYW0uCiAKICAgICBjbGFzcyBBdWRpb1NvdXJjZVByb3ZpZGVy
SW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyIHsKICAgICBwdWJsaWM6
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119959</attachid>
            <date>2011-12-19 17:22:21 -0800</date>
            <delta_ts>2011-12-19 20:28:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73043-20111219172220.patch</filename>
            <type>text/plain</type>
            <size>38936</size>
            <attacher name="Ami Fischman">fischman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMjE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDA0MDc3ZTE2N2M1NDJm
YTQxODQyZGUyZTQxYzViYjhkZDNkZDhiOS4uZmM5ZjJjMDk1MDNjN2ZmNDMzM2ZlNGVmN2IxOWQ0
MTgzZWUxNWNkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDExLTEyLTE1ICBBbWkg
RmlzY2htYW4gIDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgVGVhY2ggVmlkZW9M
YXllckNocm9taXVtIGhvdyB0byByZW5kZXIgbmF0aXZlIHRleHR1cmUgKHRvIHN1cHBvcnQgSFcg
dmlkZW8gZGVjb2RlKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTczMDQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAg
ICAgIAorICAgICAgICBGaXggdGhlIGxpZmUtY3ljbGUgb2YgdmlkZW8gZnJhbWVzIGhhbmRsZWQg
YnkgVmlkZW9MYXllckNocm9taXVtL0NDVmlkZW9MYXllckltcGwuCisgICAgICAgIFZpZGVvRnJh
bWVQcm92aWRlcjo6e2dldCxwdXR9Q3VycmVudEZyYW1lIHByb3ZpZGUgbGVhc2Ugc2VtYW50aWNz
LiAgUHJldmlvdXNseQorICAgICAgICBWaWRlb0xheWVyQ2hyb21pdW0gd291bGQgYWNxdWlyZSB0
aGUgbGVhc2UgZm9yIHRoZSBkdXJhdGlvbiBvZiBjb3B5aW5nIHRoZSBmcmFtZSwKKyAgICAgICAg
ZXZlbiBpZiB0aGF0IHdhcyBvbmx5IGEgdGV4dHVyZSBJRCwgYW5kIGltbWVkaWF0ZWx5IHJldHVy
biB0aGUgbGVhc2UsIHdoaWxlCisgICAgICAgIENDVmlkZW9MYXllckltcGw6OmRyYXcoKSB3b3Vs
ZCBjb21lIGFsb25nIGxhdGVyIGFuZCB1c2UgdGhlIChuby1sb25nZXIgbG9ja2VkKQorICAgICAg
ICB0ZXh0dXJlIG9wdGltaXN0aWNhbGx5LiAgVGhpcyBjaGFuZ2UgbWFrZXMgaXQgc28gdGhhdCBD
Q1ZpZGVvTGF5ZXJJbXBsIGhvbGRzCisgICAgICAgIHRoZSBmcmFtZSdzIGxlYXNlIGZvciB0aGUg
ZHVyYXRpb24gb2YgZHJhdygpLCBndWFyYW50ZWVpbmcgdGhlIGZyYW1lIGlzIHZhbGlkIHRvIHJl
YWQuCisKKyAgICAgICAgRXhpc3RpbmcgdGVzdCBjb3ZlcmFnZSAoY29tcG9zaXRpbmcvdmlkZW8v
LCBMYXlvdXRUZXN0cykuICBIVyByZW5kZXIgb2YKKyAgICAgICAgSFctZGVjb2RlZCB0ZXh0dXJl
cyBpcyBub3QgeWV0IHRlc3RlZCBleHBsaWNpdGx5LgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlZpZGVvTGF5ZXJDaHJvbWl1bTo6VmlkZW9MYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNv
cmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6flZpZGVvTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChX
ZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6cmVsZWFzZVByb3ZpZGVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OkNDVmlkZW9MYXllckltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6fkNDVmlkZW9MYXllckltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6c2V0UHJvdmlkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Y29udmVydFZGQ0Zvcm1hdFRvR0MzREZvcm1hdCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9M
YXllckltcGw6OmNvcHlGcmFtZVRvVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRl
b0xheWVySW1wbDo6Y29weVBsYW5lVG9UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1
dGVWaXNpYmxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpyZXNl
cnZlVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NWaWRlb0xheWVySW1wbDo6ZHJhd1lV
Vik6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3Q29tbW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmRyYXdSR0JBKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmRyYXdOYXRpdmVUZXh0dXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmg6CisKIDIwMTEt
MTItMTggIEtlaXNoaSBIYXR0b3JpICA8a2Vpc2hpQHdlYmtpdC5vcmc+CiAKICAgICAgICAgSW1w
bGVtZW50IDxpbnB1dCB0eXBlPWNvbG9yPiBVSSBXZWJLaXQgY2hyb21pdW0gcGFydApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCA0MDRmYjA0OTRkOGQ3YmJjZWQ4MmExZmZhYzgzNDc1MjFk
ZjU4NzJjLi42OGI5MmVhNzgwYjVjZjMyMTQyYThiNDYzZWNiOWEzMzViMGVhZWE5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDExLTEyLTE1ICBBbWkgRmlz
Y2htYW4gIDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgVGVhY2ggVmlkZW9MYXll
ckNocm9taXVtIGhvdyB0byByZW5kZXIgbmF0aXZlIHRleHR1cmUgKHRvIHN1cHBvcnQgSFcgdmlk
ZW8gZGVjb2RlKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTczMDQzCisgICAgICAgIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KyAgICAgICAgCisgICAgICAgIEZpeCB0aGUgbGlmZS1jeWNsZSBvZiB2aWRlbyBmcmFtZXMgaGFu
ZGxlZCBieSBWaWRlb0xheWVyQ2hyb21pdW0vQ0NWaWRlb0xheWVySW1wbC4KKyAgICAgICAgVmlk
ZW9GcmFtZVByb3ZpZGVyOjp7Z2V0LHB1dH1DdXJyZW50RnJhbWUgcHJvdmlkZSBsZWFzZSBzZW1h
bnRpY3MuICBQcmV2aW91c2x5CisgICAgICAgIFZpZGVvTGF5ZXJDaHJvbWl1bSB3b3VsZCBhY3F1
aXJlIHRoZSBsZWFzZSBmb3IgdGhlIGR1cmF0aW9uIG9mIGNvcHlpbmcgdGhlIGZyYW1lLAorICAg
ICAgICBldmVuIGlmIHRoYXQgd2FzIG9ubHkgYSB0ZXh0dXJlIElELCBhbmQgaW1tZWRpYXRlbHkg
cmV0dXJuIHRoZSBsZWFzZSwgd2hpbGUKKyAgICAgICAgQ0NWaWRlb0xheWVySW1wbDo6ZHJhdygp
IHdvdWxkIGNvbWUgYWxvbmcgbGF0ZXIgYW5kIHVzZSB0aGUgKG5vLWxvbmdlciBsb2NrZWQpCisg
ICAgICAgIHRleHR1cmUgb3B0aW1pc3RpY2FsbHkuICBUaGlzIGNoYW5nZSBtYWtlcyBpdCBzbyB0
aGF0IENDVmlkZW9MYXllckltcGwgaG9sZHMKKyAgICAgICAgdGhlIGZyYW1lJ3MgbGVhc2UgZm9y
IHRoZSBkdXJhdGlvbiBvZiBkcmF3KCksIGd1YXJhbnRlZWluZyB0aGUgZnJhbWUgaXMgdmFsaWQg
dG8gcmVhZC4KKworICAgICAgICAqIHNyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OmdldEN1cnJlbnRGcmFt
ZSk6CisKIDIwMTEtMTItMTggIEtlaXNoaSBIYXR0b3JpICA8a2Vpc2hpQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgSW1wbGVtZW50IDxpbnB1dCB0eXBlPWNvbG9yPiBVSSBXZWJLaXQgY2hyb21pdW0g
cGFydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVmlkZW9GcmFtZVByb3ZpZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9WaWRlb0ZyYW1lUHJvdmlkZXIuaAppbmRleCBjNTk2Zjg3Njk3NmRiMWEwMzk2
ODRlOWRkZjZiMTcxMDhlZjBlNGIwLi4zZDQzYTkwYzM3YTYzN2FjZTdjYzczMjE3NjNkZTRhMzk3
OTk0MWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9WaWRlb0ZyYW1lUHJvdmlkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9WaWRlb0ZyYW1lUHJvdmlkZXIuaApAQCAtMzksNiArMzksMTQgQEAg
Y2xhc3MgVmlkZW9GcmFtZVByb3ZpZGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5WaWRlb0Zy
YW1lUHJvdmlkZXIoKSB7IH0KIAorICAgIGNsYXNzIENsaWVudCB7CisgICAgcHVibGljOgorICAg
ICAgICAvLyBQcm92aWRlciB3aWxsIGNhbGwgdGhpcyBtZXRob2QgdG8gdGVsbCB0aGUgY2xpZW50
IHRvIHN0b3AgdXNpbmcgaXQuCisgICAgICAgIHZpcnR1YWwgdm9pZCBzdG9wVXNpbmdQcm92aWRl
cigpID0gMDsKKyAgICB9OworCisgICAgdmlydHVhbCB2b2lkIHNldFZpZGVvRnJhbWVQcm92aWRl
ckNsaWVudChDbGllbnQqKSA9IDA7CisKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBw
b2ludGVyIHRvIGEgVmlkZW9GcmFtZUNocm9taXVtLCB3aGljaCBpcwogICAgIC8vIHRoZSBXZWJD
b3JlIHdyYXBwZXIgZm9yIGEgdmlkZW8gZnJhbWUgaW4gQ2hyb21pdW0uIGdldEN1cnJlbnRGcmFt
ZSgpCiAgICAgLy8gcGxhY2VzIGEgbG9jayBvbiB0aGUgZnJhbWUgaW4gQ2hyb21pdW0uIENhbGxz
IHRvIHRoaXMgbWV0aG9kIHNob3VsZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKaW5k
ZXggZWM5M2YxNjhkYTE0ZWE0MWUzYzE2ZGY2ZDdjNDliZWU0NTEzZWFjZS4uM2U4ZjEyMzk3YmFj
ZTIzZjVkNzExZjg0YWMzMjBjMjQ0NGQ4ZjI0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21p
dW0uY3BwCkBAIC0zMiwxNSArMzIsNiBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQogI2luY2x1ZGUgIlZpZGVvTGF5ZXJDaHJvbWl1bS5oIgotCi0jaW5jbHVkZSAiRXh0ZW5z
aW9uczNEQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1
ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
Ci0jaW5jbHVkZSAiVmlkZW9GcmFtZUNocm9taXVtLmgiCi0jaW5jbHVkZSAiVmlkZW9GcmFtZVBy
b3ZpZGVyLmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKLSNpbmNsdWRlICJjYy9DQ1Rl
eHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NWaWRlb0xheWVySW1wbC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC01MywyMzUgKzQ0LDI1IEBAIFBhc3NSZWZQdHI8VmlkZW9MYXll
ckNocm9taXVtPiBWaWRlb0xheWVyQ2hyb21pdW06OmNyZWF0ZShDQ0xheWVyRGVsZWdhdGUqIGRl
bGVnCiAKIFZpZGVvTGF5ZXJDaHJvbWl1bTo6VmlkZW9MYXllckNocm9taXVtKENDTGF5ZXJEZWxl
Z2F0ZSogZGVsZWdhdGUsIFZpZGVvRnJhbWVQcm92aWRlciogcHJvdmlkZXIpCiAgICAgOiBMYXll
ckNocm9taXVtKGRlbGVnYXRlKQotICAgICwgbV9za2lwc0RyYXcodHJ1ZSkKLSAgICAsIG1fZnJh
bWVGb3JtYXQoVmlkZW9GcmFtZUNocm9taXVtOjpJbnZhbGlkKQogICAgICwgbV9wcm92aWRlcihw
cm92aWRlcikKLSAgICAsIG1fcGxhbmVzKDApCi0gICAgLCBtX25hdGl2ZVRleHR1cmVJZCgwKQog
eworICAgIEFTU0VSVChtX3Byb3ZpZGVyKTsKKyAgICBtX3Byb3ZpZGVyLT5zZXRWaWRlb0ZyYW1l
UHJvdmlkZXJDbGllbnQodGhpcyk7CiB9CiAKIFZpZGVvTGF5ZXJDaHJvbWl1bTo6flZpZGVvTGF5
ZXJDaHJvbWl1bSgpCiB7Ci0gICAgY2xlYW51cFJlc291cmNlcygpOworICAgIEFTU0VSVCghbV9w
cm92aWRlcik7CiB9CiAKIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IFZpZGVvTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlQ0NMYXllckltcGwoKQogewotICAgIHJldHVybiBDQ1ZpZGVvTGF5ZXJJbXBsOjpj
cmVhdGUobV9sYXllcklkKTsKLX0KLQotdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OmNsZWFudXBS
ZXNvdXJjZXMoKQotewotICAgIExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTWF4UGxhbmVzOyArK2kpCi0gICAgICAgIG1fdGV4
dHVyZXNbaV0ubV90ZXh0dXJlLmNsZWFyKCk7Ci19Ci0KLXZvaWQgVmlkZW9MYXllckNocm9taXVt
Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBD
Q1RleHR1cmVVcGRhdGVyJiB1cGRhdGVyKQotewotICAgIGlmICghbV9kZWxlZ2F0ZSB8fCAhbV9w
cm92aWRlciB8fCAhZHJhd3NDb250ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgh
bV9uZWVkc0Rpc3BsYXkgJiYgdGV4dHVyZXNWYWxpZCgpKSB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgcGxhbmUgPSAwOyBwbGFuZSA8IG1fcGxhbmVzOyBwbGFuZSsrKSB7Ci0gICAgICAgICAgICBN
YW5hZ2VkVGV4dHVyZSogdGV4ID0gbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlLmdldCgpOwot
ICAgICAgICAgICAgaWYgKCF0ZXgtPnJlc2VydmUodGV4LT5zaXplKCksIHRleC0+Zm9ybWF0KCkp
KSB7Ci0gICAgICAgICAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBtX3BsYW5lcyA9IDA7Ci0gICAgbV9za2lwc0RyYXcgPSBmYWxzZTsKLQotICAgIFZp
ZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUgPSBtX3Byb3ZpZGVyLT5nZXRDdXJyZW50RnJhbWUoKTsK
LSAgICBpZiAoIWZyYW1lKSB7Ci0gICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsKLSAgICAgICAg
bV9wcm92aWRlci0+cHV0Q3VycmVudEZyYW1lKGZyYW1lKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIG1fZnJhbWVGb3JtYXQgPSBmcmFtZS0+Zm9ybWF0KCk7Ci0gICAgR0MzRGVudW0g
dGV4dHVyZUZvcm1hdCA9IGRldGVybWluZVRleHR1cmVGb3JtYXQoZnJhbWUpOwotICAgIGlmICh0
ZXh0dXJlRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKSB7Ci0gICAg
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgb3RoZXIgcGF0aHMuCi0gICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsKLSAgICAgICAgbV9wcm92aWRlci0+
cHV0Q3VycmVudEZyYW1lKGZyYW1lKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
ICh0ZXh0dXJlRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKSB7Ci0gICAg
ICAgIG1fbmF0aXZlVGV4dHVyZUlkID0gZnJhbWUtPnRleHR1cmVJZCgpOwotICAgICAgICBtX25h
dGl2ZVRleHR1cmVTaXplID0gSW50U2l6ZShmcmFtZS0+d2lkdGgoKSwgZnJhbWUtPmhlaWdodCgp
KTsKLSAgICAgICAgbV9uYXRpdmVUZXh0dXJlVmlzaWJsZVNpemUgPSBJbnRTaXplKGZyYW1lLT53
aWR0aCgpLCBmcmFtZS0+aGVpZ2h0KCkpOwotICAgICAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNl
OwotICAgICAgICBtX3Byb3ZpZGVyLT5wdXRDdXJyZW50RnJhbWUoZnJhbWUpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQWxsb2NhdGUgdGV4dHVyZXMgZm9yIHBsYW5lcyBpZiB0
aGV5IGFyZSBub3QgYWxsb2NhdGVkIGFscmVhZHksIG9yCi0gICAgLy8gcmVhbGxvY2F0ZSB0ZXh0
dXJlcyB0aGF0IGFyZSB0aGUgd3Jvbmcgc2l6ZSBmb3IgdGhlIGZyYW1lLgotICAgIGJvb2wgdGV4
dHVyZXNSZXNlcnZlZCA9IHJlc2VydmVUZXh0dXJlcyhmcmFtZSwgdGV4dHVyZUZvcm1hdCk7Ci0g
ICAgaWYgKCF0ZXh0dXJlc1Jlc2VydmVkKSB7Ci0gICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsK
LSAgICAgICAgbV9wcm92aWRlci0+cHV0Q3VycmVudEZyYW1lKGZyYW1lKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIFVwZGF0ZSB0ZXh0dXJlIHBsYW5lcy4KLSAgICBmb3IgKHVu
c2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBmcmFtZS0+cGxhbmVzKCk7IHBsYW5lKyspIHsKLSAg
ICAgICAgVGV4dHVyZSYgdGV4dHVyZSA9IG1fdGV4dHVyZXNbcGxhbmVdOwotICAgICAgICBBU1NF
UlQodGV4dHVyZS5tX3RleHR1cmUpOwotICAgICAgICBBU1NFUlQoZnJhbWUtPnJlcXVpcmVkVGV4
dHVyZVNpemUocGxhbmUpID09IHRleHR1cmUubV90ZXh0dXJlLT5zaXplKCkpOwotICAgICAgICB1
cGRhdGVUZXh0dXJlKGNvbnRleHQsIHVwZGF0ZXIuYWxsb2NhdG9yKCksIHRleHR1cmUsIGZyYW1l
LT5kYXRhKHBsYW5lKSk7Ci0gICAgfQotCi0gICAgbV9wbGFuZXMgPSBmcmFtZS0+cGxhbmVzKCk7
Ci0gICAgQVNTRVJUKG1fcGxhbmVzIDw9IE1heFBsYW5lcyk7Ci0KLSAgICBtX3VwZGF0ZVJlY3Qg
PSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBib3VuZHMoKSk7Ci0gICAgbV9uZWVkc0Rpc3BsYXkg
PSBmYWxzZTsKLQotICAgIG1fcHJvdmlkZXItPnB1dEN1cnJlbnRGcmFtZShmcmFtZSk7Ci19Ci0K
LXZvaWQgVmlkZW9MYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBs
YXllcikKLXsKLSAgICBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKGxheWVyKTsKLQot
ICAgIENDVmlkZW9MYXllckltcGwqIHZpZGVvTGF5ZXIgPSBzdGF0aWNfY2FzdDxDQ1ZpZGVvTGF5
ZXJJbXBsKj4obGF5ZXIpOwotICAgIHZpZGVvTGF5ZXItPnNldFNraXBzRHJhdyhtX3NraXBzRHJh
dyk7Ci0gICAgdmlkZW9MYXllci0+c2V0RnJhbWVGb3JtYXQobV9mcmFtZUZvcm1hdCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcGxhbmVzOyArK2kpIHsKLSAgICAgICAgaWYgKCFt
X3RleHR1cmVzW2ldLm1fdGV4dHVyZSkgewotICAgICAgICAgICAgdmlkZW9MYXllci0+c2V0U2tp
cHNEcmF3KHRydWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgdmlk
ZW9MYXllci0+c2V0VGV4dHVyZShpLCBtX3RleHR1cmVzW2ldLm1fdGV4dHVyZS0+dGV4dHVyZUlk
KCksIG1fdGV4dHVyZXNbaV0ubV90ZXh0dXJlLT5zaXplKCksIG1fdGV4dHVyZXNbaV0ubV92aXNp
YmxlU2l6ZSk7Ci0gICAgfQotICAgIGZvciAodW5zaWduZWQgaSA9IG1fcGxhbmVzOyBpIDwgTWF4
UGxhbmVzOyArK2kpCi0gICAgICAgIHZpZGVvTGF5ZXItPnNldFRleHR1cmUoaSwgMCwgSW50U2l6
ZSgpLCBJbnRTaXplKCkpOwotICAgIGlmIChtX2ZyYW1lRm9ybWF0ID09IFZpZGVvRnJhbWVDaHJv
bWl1bTo6TmF0aXZlVGV4dHVyZSkKLSAgICAgICAgdmlkZW9MYXllci0+c2V0TmF0aXZlVGV4dHVy
ZShtX25hdGl2ZVRleHR1cmVJZCwgbV9uYXRpdmVUZXh0dXJlU2l6ZSwgbV9uYXRpdmVUZXh0dXJl
VmlzaWJsZVNpemUpOwotfQotCi12b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVl
SG9zdChDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCi17Ci0gICAgaWYgKGhvc3QgJiYgbGF5ZXJUcmVl
SG9zdCgpICE9IGhvc3QpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE1heFBs
YW5lczsgKytpKSB7Ci0gICAgICAgICAgICBtX3RleHR1cmVzW2ldLm1fdmlzaWJsZVNpemUgPSBJ
bnRTaXplKCk7Ci0gICAgICAgICAgICBtX3RleHR1cmVzW2ldLm1fdGV4dHVyZSA9IE1hbmFnZWRU
ZXh0dXJlOjpjcmVhdGUoaG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIExheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3QoaG9zdCk7Ci19
Ci0KLUdDM0RlbnVtIFZpZGVvTGF5ZXJDaHJvbWl1bTo6ZGV0ZXJtaW5lVGV4dHVyZUZvcm1hdChj
b25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lKQotewotICAgIHN3aXRjaCAoZnJhbWUtPmZv
cm1hdCgpKSB7Ci0gICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OllWMTI6Ci0gICAgY2FzZSBW
aWRlb0ZyYW1lQ2hyb21pdW06OllWMTY6Ci0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQz
RDo6TFVNSU5BTkNFOwotICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpSR0JBOgotICAgICAg
ICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7Ci0gICAgY2FzZSBWaWRlb0ZyYW1lQ2hy
b21pdW06Ok5hdGl2ZVRleHR1cmU6Ci0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRDsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0
dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFOwotfQotCi1ib29sIFZpZGVvTGF5
ZXJDaHJvbWl1bTo6dGV4dHVyZXNWYWxpZCgpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9
IDA7IHBsYW5lIDwgbV9wbGFuZXM7IHBsYW5lKyspIHsKLSAgICAgICAgTWFuYWdlZFRleHR1cmUq
IHRleCA9IG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS5nZXQoKTsKLSAgICAgICAgaWYgKCF0
ZXgtPmlzVmFsaWQodGV4LT5zaXplKCksIHRleC0+Zm9ybWF0KCkpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWaWRlb0xheWVy
Q2hyb21pdW06OnJlc2VydmVUZXh0dXJlcyhjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1l
LCBHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KQotewotICAgIEFTU0VSVChsYXllclRyZWVIb3N0KCkp
OwotICAgIEFTU0VSVChmcmFtZSk7Ci0gICAgQVNTRVJUKHRleHR1cmVGb3JtYXQgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwotCi0gICAgaW50IG1heFRleHR1cmVTaXplID0g
bGF5ZXJUcmVlSG9zdCgpLT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNp
emU7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBmcmFtZS0+cGxhbmVz
KCk7IHBsYW5lKyspIHsKLSAgICAgICAgSW50U2l6ZSByZXF1aXJlZFRleHR1cmVTaXplID0gZnJh
bWUtPnJlcXVpcmVkVGV4dHVyZVNpemUocGxhbmUpOwotCi0gICAgICAgIC8vIElmIHRoZSByZW5k
ZXJlciBjYW5ub3QgaGFuZGxlIHRoaXMgbGFyZ2Ugb2YgYSB0ZXh0dXJlLCByZXR1cm4gZmFsc2Uu
Ci0gICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyB0ZXN0IHdoZW4gdGlsZWQgbGF5ZXJzIGFy
ZSBpbXBsZW1lbnRlZC4KLSAgICAgICAgaWYgKHJlcXVpcmVkVGV4dHVyZVNpemUuaXNaZXJvKCkg
fHwgcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgpID4gbWF4VGV4dHVyZVNpemUgfHwgcmVxdWly
ZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSA+IG1heFRleHR1cmVTaXplKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICghbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChtX3RleHR1cmVzW3BsYW5l
XS5tX3RleHR1cmUtPnNpemUoKSAhPSByZXF1aXJlZFRleHR1cmVTaXplKQotICAgICAgICAgICAg
bV90ZXh0dXJlc1twbGFuZV0ubV92aXNpYmxlU2l6ZSA9IGNvbXB1dGVWaXNpYmxlU2l6ZShmcmFt
ZSwgcGxhbmUpOwotCi0gICAgICAgIG1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZS0+cmVzZXJ2
ZShyZXF1aXJlZFRleHR1cmVTaXplLCB0ZXh0dXJlRm9ybWF0KTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotSW50U2l6ZSBWaWRlb0xheWVyQ2hyb21pdW06OmNvbXB1dGVWaXNpYmxl
U2l6ZShjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lLCB1bnNpZ25lZCBwbGFuZSkKLXsK
LSAgICBpbnQgdmlzaWJsZVdpZHRoID0gZnJhbWUtPndpZHRoKHBsYW5lKTsKLSAgICBpbnQgdmlz
aWJsZUhlaWdodCA9IGZyYW1lLT5oZWlnaHQocGxhbmUpOwotICAgIC8vIFdoZW4gdGhlcmUgYXJl
IGRlYWQgcGl4ZWxzIGF0IHRoZSBlZGdlIG9mIHRoZSB0ZXh0dXJlLCBkZWNyZWFzZQotICAgIC8v
IHRoZSBmcmFtZSB3aWR0aCBieSAxIHRvIHByZXZlbnQgdGhlIHJpZ2h0bW9zdCBwaXhlbHMgZnJv
bQotICAgIC8vIGludGVycG9sYXRpbmcgd2l0aCB0aGUgZGVhZCBwaXhlbHMuCi0gICAgaWYgKGZy
YW1lLT5oYXNQYWRkaW5nQnl0ZXMocGxhbmUpKQotICAgICAgICAtLXZpc2libGVXaWR0aDsKLQot
ICAgIC8vIEluIFlWMTIsIGV2ZXJ5IDJ4MiBzcXVhcmUgb2YgWSB2YWx1ZXMgY29ycmVzcG9uZHMg
dG8gb25lIFUgYW5kCi0gICAgLy8gb25lIFYgdmFsdWUuIElmIHdlIGRlY3JlYXNlIHRoZSB3aWR0
aCBvZiB0aGUgVVYgcGxhbmUsIHdlIG11c3QgZGVjcmVhc2UgdGhlCi0gICAgLy8gd2lkdGggb2Yg
dGhlIFkgdGV4dHVyZSBieSAyIGZvciBwcm9wZXIgYWxpZ25tZW50LiBUaGlzIG11c3QgaGFwcGVu
Ci0gICAgLy8gYWx3YXlzLCBldmVuIGlmIFkncyB0ZXh0dXJlIGRvZXMgbm90IGhhdmUgcGFkZGlu
ZyBieXRlcy4KLSAgICBpZiAocGxhbmUgPT0gVmlkZW9GcmFtZUNocm9taXVtOjp5UGxhbmUgJiYg
ZnJhbWUtPmZvcm1hdCgpID09IFZpZGVvRnJhbWVDaHJvbWl1bTo6WVYxMikgewotICAgICAgICBp
ZiAoZnJhbWUtPmhhc1BhZGRpbmdCeXRlcyhWaWRlb0ZyYW1lQ2hyb21pdW06OnVQbGFuZSkpIHsK
LSAgICAgICAgICAgIGludCBvcmlnaW5hbFdpZHRoID0gZnJhbWUtPndpZHRoKHBsYW5lKTsKLSAg
ICAgICAgICAgIHZpc2libGVXaWR0aCA9IG9yaWdpbmFsV2lkdGggLSAyOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIEludFNpemUodmlzaWJsZVdpZHRoLCB2aXNpYmxlSGVpZ2h0KTsK
LX0KLQotdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgVGV4dHVyZSYgdGV4
dHVyZSwgY29uc3Qgdm9pZCogZGF0YSkgY29uc3QKLXsKLSAgICBBU1NFUlQoY29udGV4dCk7Ci0g
ICAgQVNTRVJUKHRleHR1cmUubV90ZXh0dXJlKTsKLQotICAgIHRleHR1cmUubV90ZXh0dXJlLT5i
aW5kVGV4dHVyZShjb250ZXh0LCBhbGxvY2F0b3IpOwotCi0gICAgR0MzRGVudW0gZm9ybWF0ID0g
dGV4dHVyZS5tX3RleHR1cmUtPmZvcm1hdCgpOwotICAgIEludFNpemUgZGltZW5zaW9ucyA9IHRl
eHR1cmUubV90ZXh0dXJlLT5zaXplKCk7Ci0KLSAgICB2b2lkKiBtZW0gPSBzdGF0aWNfY2FzdDxF
eHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKSktPm1hcFRleFN1
YkltYWdlMkRDSFJPTUlVTShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwg
ZGltZW5zaW9ucy53aWR0aCgpLCBkaW1lbnNpb25zLmhlaWdodCgpLCBmb3JtYXQsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6V1JJVEVfT05M
WSk7Ci0gICAgaWYgKG1lbSkgewotICAgICAgICBtZW1jcHkobWVtLCBkYXRhLCBkaW1lbnNpb25z
LndpZHRoKCkgKiBkaW1lbnNpb25zLmhlaWdodCgpKTsKLSAgICAgICAgR0xDKGNvbnRleHQsIHN0
YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
KS0+dW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0obWVtKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgLy8gSWYgbWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNIGZhaWxzLCB0aGVuIGRvIHRoZSBzbG93
ZXIgdGV4U3ViSW1hZ2UyRAotICAgICAgICAvLyB1cGxvYWQuIFRoaXMgZG9lcyB0d2ljZSB0aGUg
Y29waWVzIGFzIG1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSwgb25lCi0gICAgICAgIC8vIGluIHRo
ZSBjb21tYW5kIGJ1ZmZlciBhbmQgYW5vdGhlciB0byB0aGUgdGV4dHVyZS4KLSAgICAgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIDAsIDAsIDAsIGRpbWVuc2lvbnMud2lkdGgoKSwgZGltZW5zaW9ucy5oZWlnaHQoKSwg
Zm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgZGF0YSkpOwotICAgIH0K
KyAgICBSZWZQdHI8Q0NWaWRlb0xheWVySW1wbD4gcmV0ID0gQ0NWaWRlb0xheWVySW1wbDo6Y3Jl
YXRlKG1fbGF5ZXJJZCwgbV9wcm92aWRlcik7CisgICAgbV9wcm92aWRlciA9IDA7CisgICAgcmV0
dXJuIHJldDsKIH0KIAotdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnJlbGVhc2VQcm92aWRlcigp
Cit2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6c3RvcFVzaW5nUHJvdmlkZXIoKQogewogICAgIG1f
cHJvdmlkZXIgPSAwOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uaAppbmRleCA1MTZjOGQz
ODQ3YzJhZGI2NGM1YmJlZmI3Yzk5Y2FiNWY1YWZhYmEzLi45MTllZTg3MGM3NGJjYzk2OGE0MTBi
NGQyZjg0OWRkZWFiN2UzZGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uaApAQCAtMzUs
MTMgKzM1LDE1IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVk
ZSAiTGF5ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCiAjaW5jbHVk
ZSAiVmlkZW9GcmFtZVByb3ZpZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3Mg
Q0NWaWRlb0xheWVySW1wbDsKKwogLy8gQSBMYXllciB0aGF0IGNvbnRhaW5zIGEgVmlkZW8gZWxl
bWVudC4KLWNsYXNzIFZpZGVvTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBMYXllckNocm9taXVtIHsK
K2NsYXNzIFZpZGVvTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBMYXllckNocm9taXVtCisgICAgICAg
ICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgVmlkZW9GcmFtZVByb3ZpZGVyOjpDbGllbnQgewog
cHVibGljOgogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8VmlkZW9MYXllckNocm9taXVtPiBjcmVh
dGUoQ0NMYXllckRlbGVnYXRlKiA9IDAsCkBAIC01MCw0NSArNTIsMTUgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOwog
Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250
ZXh0M0QqLCBDQ1RleHR1cmVVcGRhdGVyJik7CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVu
dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZvaWQgcmVsZWFzZVByb3ZpZGVyKCk7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCopOwotCi0g
ICAgdmlydHVhbCB2b2lkIHNldExheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Kik7Ci0KLXBy
b3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cFJlc291cmNlcygpOworICAgIC8vIFZp
ZGVvRnJhbWVQcm92aWRlcjo6Q2xpZW50IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9p
ZCBzdG9wVXNpbmdQcm92aWRlcigpOwogCiBwcml2YXRlOgotICAgIHN0cnVjdCBUZXh0dXJlIHsK
LSAgICAgICAgSW50U2l6ZSBtX3Zpc2libGVTaXplOwotICAgICAgICBPd25QdHI8TWFuYWdlZFRl
eHR1cmU+IG1fdGV4dHVyZTsKLSAgICB9OwotCiAgICAgVmlkZW9MYXllckNocm9taXVtKENDTGF5
ZXJEZWxlZ2F0ZSosIFZpZGVvRnJhbWVQcm92aWRlciopOwogCi0gICAgc3RhdGljIEdDM0RlbnVt
IGRldGVybWluZVRleHR1cmVGb3JtYXQoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKik7Ci0gICAg
c3RhdGljIEludFNpemUgY29tcHV0ZVZpc2libGVTaXplKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1
bSosIHVuc2lnbmVkIHBsYW5lKTsKLSAgICBib29sIHRleHR1cmVzVmFsaWQoKTsKLSAgICBib29s
IHJlc2VydmVUZXh0dXJlcyhjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qLCBHQzNEZW51bSB0ZXh0
dXJlRm9ybWF0KTsKLSAgICB2b2lkIHVwZGF0ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBU
ZXh0dXJlQWxsb2NhdG9yKiwgVGV4dHVyZSYsIGNvbnN0IHZvaWQqKSBjb25zdDsKLQotICAgIHZv
aWQgcmVzZXRGcmFtZVBhcmFtZXRlcnMoKTsKLQotICAgIGJvb2wgbV9za2lwc0RyYXc7Ci0gICAg
VmlkZW9GcmFtZUNocm9taXVtOjpGb3JtYXQgbV9mcmFtZUZvcm1hdDsKLSAgICBWaWRlb0ZyYW1l
UHJvdmlkZXIqIG1fcHJvdmlkZXI7Ci0KLSAgICBlbnVtIHsgTWF4UGxhbmVzID0gMyB9OwotICAg
IFRleHR1cmUgbV90ZXh0dXJlc1tNYXhQbGFuZXNdOwotICAgIHVuc2lnbmVkIG1fcGxhbmVzOwot
Ci0gICAgdW5zaWduZWQgbV9uYXRpdmVUZXh0dXJlSWQ7Ci0gICAgSW50U2l6ZSBtX25hdGl2ZVRl
eHR1cmVTaXplOwotICAgIEludFNpemUgbV9uYXRpdmVUZXh0dXJlVmlzaWJsZVNpemU7CisgICAg
VmlkZW9GcmFtZVByb3ZpZGVyKiBtX3Byb3ZpZGVyOyAvLyBPbmx5IHBvcHVsYXRlZCBiZXR3ZWVu
IGNvbnN0cnVjdGlvbiBhbmQgY3JlYXRlQ0NMYXllckltcGwgYmVpbmcgY2FsbGVkLgogfTsKIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NWaWRlb0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcAppbmRleCA2YjM3ZTg2YTZjZTY4ZDUx
YmE1MmNhNDhjMjNjNmY3NGY0NTRjZWM5Li45OWU3ZTExNzQ3NTQzYzI0OTIzZDVkNjRmM2M2NzE5
ZDFkZjFkMjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcApAQCAtMjksOCAr
MjksMTAgQEAKIAogI2luY2x1ZGUgImNjL0NDVmlkZW9MYXllckltcGwuaCIKIAorI2luY2x1ZGUg
IkV4dGVuc2lvbnMzRENocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
ICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJQcm9ncmFtQmlu
ZGluZy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiY2MvQ0NQcm94
eS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNTksNzggKzYxLDIxMCBA
QCBjb25zdCBmbG9hdCBDQ1ZpZGVvTGF5ZXJJbXBsOjp5dXZBZGp1c3RbM10gPSB7CiAgICAgLTAu
NWYsCiB9OwogCi1DQ1ZpZGVvTGF5ZXJJbXBsOjpDQ1ZpZGVvTGF5ZXJJbXBsKGludCBpZCkKK0ND
VmlkZW9MYXllckltcGw6OkNDVmlkZW9MYXllckltcGwoaW50IGlkLCBWaWRlb0ZyYW1lUHJvdmlk
ZXIqIHByb3ZpZGVyKQogICAgIDogQ0NMYXllckltcGwoaWQpCisgICAgLCBtX3Byb3ZpZGVyKHBy
b3ZpZGVyKQogeworICAgIHByb3ZpZGVyLT5zZXRWaWRlb0ZyYW1lUHJvdmlkZXJDbGllbnQodGhp
cyk7CiB9CiAKIENDVmlkZW9MYXllckltcGw6On5DQ1ZpZGVvTGF5ZXJJbXBsKCkKIHsKKyAgICBN
dXRleExvY2tlciBsb2NrZXIobV9wcm92aWRlck11dGV4KTsKKyAgICBpZiAobV9wcm92aWRlcikg
eworICAgICAgICBtX3Byb3ZpZGVyLT5zZXRWaWRlb0ZyYW1lUHJvdmlkZXJDbGllbnQoMCk7Cisg
ICAgICAgIG1fcHJvdmlkZXIgPSAwOworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgTWF4UGxhbmVzOyArK2kpCisgICAgICAgIG1fdGV4dHVyZXNbaV0ubV90ZXh0dXJlLmNsZWFy
KCk7CiAgICAgY2xlYW51cFJlc291cmNlcygpOwogfQogCi12b2lkIENDVmlkZW9MYXllckltcGw6
OnNldFRleHR1cmUoc2l6ZV90IGluZGV4LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCwgY29u
c3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgSW50U2l6ZSYgdmlzaWJsZVNpemUpCit2b2lkIENDVmlk
ZW9MYXllckltcGw6OnN0b3BVc2luZ1Byb3ZpZGVyKCkKIHsKLSAgICBBU1NFUlQoaW5kZXggPCAz
KTsKLSAgICBtX3RleHR1cmVzW2luZGV4XS5pZCA9IHRleHR1cmVJZDsKLSAgICBtX3RleHR1cmVz
W2luZGV4XS5zaXplID0gc2l6ZTsKLSAgICBtX3RleHR1cmVzW2luZGV4XS52aXNpYmxlU2l6ZSA9
IHZpc2libGVTaXplOworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3Byb3ZpZGVyTXV0ZXgpOwor
ICAgIG1fcHJvdmlkZXIgPSAwOwogfQogCi12b2lkIENDVmlkZW9MYXllckltcGw6OnNldE5hdGl2
ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQsIGNvbnN0IEludFNpemUmIHNpemUs
IGNvbnN0IEludFNpemUmIHZpc2libGVTaXplKQorLy8gQ29udmVydCBWaWRlb0ZyYW1lQ2hyb21p
dW06OkZvcm1hdCB0byBHcmFwaGljc0NvbnRleHQzRCdzIGZvcm1hdCBlbnVtIHZhbHVlcy4KK3N0
YXRpYyBHQzNEZW51bSBjb252ZXJ0VkZDRm9ybWF0VG9HQzNERm9ybWF0KFZpZGVvRnJhbWVDaHJv
bWl1bTo6Rm9ybWF0IGZvcm1hdCkKIHsKLSAgICBtX25hdGl2ZVRleHR1cmVJZCA9IHRleHR1cmVJ
ZDsKLSAgICBtX25hdGl2ZVRleHR1cmVTaXplID0gc2l6ZTsKLSAgICBtX25hdGl2ZVRleHR1cmVW
aXNpYmxlU2l6ZSA9IHZpc2libGVTaXplOworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2Fz
ZSBWaWRlb0ZyYW1lQ2hyb21pdW06OllWMTI6CisgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06
OllWMTY6CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOworICAg
IGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpSR0JBOgorICAgICAgICByZXR1cm4gR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkE7CisgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06Ok5hdGl2ZVRleHR1
cmU6CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDsKKyAgICBj
YXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6SW52YWxpZDoKKyAgICBjYXNlIFZpZGVvRnJhbWVDaHJv
bWl1bTo6UkdCNTU1OgorICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpSR0I1NjU6CisgICAg
Y2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OlJHQjI0OgorICAgIGNhc2UgVmlkZW9GcmFtZUNocm9t
aXVtOjpSR0IzMjoKKyAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6TlYxMjoKKyAgICBjYXNl
IFZpZGVvRnJhbWVDaHJvbWl1bTo6RW1wdHk6CisgICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06
OkFTQ0lJOgorICAgIGNhc2UgVmlkZW9GcmFtZUNocm9taXVtOjpJNDIwOgorICAgICAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIH0KKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUU7CiB9CiAKIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhdyhMYXllclJlbmRlcmVy
Q2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRo
cmVhZCgpKTsKIAotICAgIGlmIChtX3NraXBzRHJhdykKKyAgICBNdXRleExvY2tlciBsb2NrZXIo
bV9wcm92aWRlck11dGV4KTsKKworICAgIGlmICghbV9wcm92aWRlcikKICAgICAgICAgcmV0dXJu
OwogCi0gICAgc3dpdGNoIChtX2ZyYW1lRm9ybWF0KSB7Ci0gICAgY2FzZSBWaWRlb0ZyYW1lQ2hy
b21pdW06OllWMTI6Ci0gICAgY2FzZSBWaWRlb0ZyYW1lQ2hyb21pdW06OllWMTY6CisgICAgVmlk
ZW9GcmFtZUNocm9taXVtKiBmcmFtZSA9IG1fcHJvdmlkZXItPmdldEN1cnJlbnRGcmFtZSgpOwor
ICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBHQzNEZW51bSBmb3JtYXQgPSBj
b252ZXJ0VkZDRm9ybWF0VG9HQzNERm9ybWF0KGZyYW1lLT5mb3JtYXQoKSk7CisKKyAgICBpZiAo
Zm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoIWNvcHlGcmFtZVRvVGV4dHVyZXMoZnJhbWUsIGZvcm1hdCwgbGF5ZXJS
ZW5kZXJlcikpCisgICAgICAgIHJldHVybjsKKworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgogICAgICAgICBkcmF3WVVWKGxheWVy
UmVuZGVyZXIpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIFZpZGVvRnJhbWVDaHJvbWl1bTo6
UkdCQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgogICAgICAgICBkcmF3UkdC
QShsYXllclJlbmRlcmVyKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWaWRlb0ZyYW1lQ2hy
b21pdW06Ok5hdGl2ZVRleHR1cmU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRDoKICAgICAgICAgZHJhd05hdGl2ZVRleHR1cmUobGF5ZXJSZW5kZXJlcik7CiAgICAgICAg
IGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgb3RoZXIg
cGF0aHMuCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgIGJyZWFrOworICAgICAg
ICBDUkFTSCgpOyAvLyBTb21lb25lIHVwZGF0ZWQgY29udmVydFZGQ0Zvcm1hdFRvR0MzREZvcm1h
dCBhYm92ZSBidXQgdXBkYXRlIHRoaXMhCisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBwbGFu
ZSA9IDA7IHBsYW5lIDwgZnJhbWUtPnBsYW5lcygpOyArK3BsYW5lKQorICAgICAgICBtX3RleHR1
cmVzW3BsYW5lXS5tX3RleHR1cmUtPnVucmVzZXJ2ZSgpOworICAgIG1fcHJvdmlkZXItPnB1dEN1
cnJlbnRGcmFtZShmcmFtZSk7Cit9CisKK2Jvb2wgQ0NWaWRlb0xheWVySW1wbDo6Y29weUZyYW1l
VG9UZXh0dXJlcyhjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lLCBHQzNEZW51bSBmb3Jt
YXQsIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKK3sKKyAgICBpZiAoZnJh
bWUtPmZvcm1hdCgpID09IFZpZGVvRnJhbWVDaHJvbWl1bTo6TmF0aXZlVGV4dHVyZSkgeworICAg
ICAgICBtX25hdGl2ZVRleHR1cmVJZCA9IGZyYW1lLT50ZXh0dXJlSWQoKTsKKyAgICAgICAgbV9u
YXRpdmVUZXh0dXJlU2l6ZSA9IEludFNpemUoZnJhbWUtPndpZHRoKCksIGZyYW1lLT5oZWlnaHQo
KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICghcmVzZXJ2ZVRleHR1
cmVzKGZyYW1lLCBmb3JtYXQsIGxheWVyUmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBmcmFtZS0+cGxhbmVzKCk7
ICsrcGxhbmUpIHsKKyAgICAgICAgQVNTRVJUKGZyYW1lLT5yZXF1aXJlZFRleHR1cmVTaXplKHBs
YW5lKSA9PSBtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUtPnNpemUoKSk7CisgICAgICAgIGNv
cHlQbGFuZVRvVGV4dHVyZShsYXllclJlbmRlcmVyLCBmcmFtZS0+ZGF0YShwbGFuZSksIHBsYW5l
KTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBwbGFuZSA9IGZyYW1lLT5wbGFuZXMoKTsgcGxh
bmUgPCBNYXhQbGFuZXM7ICsrcGxhbmUpIHsKKyAgICAgICAgVGV4dHVyZSYgdGV4dHVyZSA9IG1f
dGV4dHVyZXNbcGxhbmVdOworICAgICAgICB0ZXh0dXJlLm1fdGV4dHVyZS5jbGVhcigpOworICAg
ICAgICB0ZXh0dXJlLm1fdmlzaWJsZVNpemUgPSBJbnRTaXplKCk7CisgICAgfQorICAgIG1fcGxh
bmVzID0gZnJhbWUtPnBsYW5lcygpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENDVmlk
ZW9MYXllckltcGw6OmNvcHlQbGFuZVRvVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxh
eWVyUmVuZGVyZXIsIGNvbnN0IHZvaWQqIHBsYW5lLCBpbnQgaW5kZXgpCit7CisgICAgVGV4dHVy
ZSYgdGV4dHVyZSA9IG1fdGV4dHVyZXNbaW5kZXhdOworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0ID0gbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOworICAgIFRleHR1cmVBbGxvY2F0b3Iq
IGFsbG9jYXRvciA9IGxheWVyUmVuZGVyZXItPnJlbmRlclN1cmZhY2VUZXh0dXJlQWxsb2NhdG9y
KCk7CisgICAgdGV4dHVyZS5tX3RleHR1cmUtPmJpbmRUZXh0dXJlKGNvbnRleHQsIGFsbG9jYXRv
cik7CisgICAgR0MzRGVudW0gZm9ybWF0ID0gdGV4dHVyZS5tX3RleHR1cmUtPmZvcm1hdCgpOwor
ICAgIEludFNpemUgZGltZW5zaW9ucyA9IHRleHR1cmUubV90ZXh0dXJlLT5zaXplKCk7CisKKyAg
ICB2b2lkKiBtZW0gPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRleHQt
PmdldEV4dGVuc2lvbnMoKSktPm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgMCwgMCwgMCwgZGltZW5zaW9ucy53aWR0aCgpLCBkaW1lbnNpb25z
LmhlaWdodCgpLCBmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBFeHRl
bnNpb25zM0RDaHJvbWl1bTo6V1JJVEVfT05MWSk7CisgICAgaWYgKG1lbSkgeworICAgICAgICBt
ZW1jcHkobWVtLCBwbGFuZSwgZGltZW5zaW9ucy53aWR0aCgpICogZGltZW5zaW9ucy5oZWlnaHQo
KSk7CisgICAgICAgIEdMQyhjb250ZXh0LCBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1
bSo+KGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKSktPnVubWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVN
KG1lbSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIG1hcFRleFN1YkltYWdlMkRDSFJP
TUlVTSBmYWlscywgdGhlbiBkbyB0aGUgc2xvd2VyIHRleFN1YkltYWdlMkQKKyAgICAgICAgLy8g
dXBsb2FkLiBUaGlzIGRvZXMgdHdpY2UgdGhlIGNvcGllcyBhcyBtYXBUZXhTdWJJbWFnZTJEQ0hS
T01JVU0sIG9uZQorICAgICAgICAvLyBpbiB0aGUgY29tbWFuZCBidWZmZXIgYW5kIGFub3RoZXIg
dG8gdGhlIHRleHR1cmUuCisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhTdWJJbWFn
ZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAwLCAwLCBkaW1lbnNpb25zLndp
ZHRoKCksIGRpbWVuc2lvbnMuaGVpZ2h0KCksIGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEUsIHBsYW5lKSk7CiAgICAgfQogfQogCitzdGF0aWMgSW50U2l6ZSBjb21wdXRl
VmlzaWJsZVNpemUoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSwgdW5zaWduZWQgcGxh
bmUpCit7CisgICAgaW50IHZpc2libGVXaWR0aCA9IGZyYW1lLT53aWR0aChwbGFuZSk7CisgICAg
aW50IHZpc2libGVIZWlnaHQgPSBmcmFtZS0+aGVpZ2h0KHBsYW5lKTsKKyAgICAvLyBXaGVuIHRo
ZXJlIGFyZSBkZWFkIHBpeGVscyBhdCB0aGUgZWRnZSBvZiB0aGUgdGV4dHVyZSwgZGVjcmVhc2UK
KyAgICAvLyB0aGUgZnJhbWUgd2lkdGggYnkgMSB0byBwcmV2ZW50IHRoZSByaWdodG1vc3QgcGl4
ZWxzIGZyb20KKyAgICAvLyBpbnRlcnBvbGF0aW5nIHdpdGggdGhlIGRlYWQgcGl4ZWxzLgorICAg
IGlmIChmcmFtZS0+aGFzUGFkZGluZ0J5dGVzKHBsYW5lKSkKKyAgICAgICAgLS12aXNpYmxlV2lk
dGg7CisKKyAgICAvLyBJbiBZVjEyLCBldmVyeSAyeDIgc3F1YXJlIG9mIFkgdmFsdWVzIGNvcnJl
c3BvbmRzIHRvIG9uZSBVIGFuZAorICAgIC8vIG9uZSBWIHZhbHVlLiBJZiB3ZSBkZWNyZWFzZSB0
aGUgd2lkdGggb2YgdGhlIFVWIHBsYW5lLCB3ZSBtdXN0IGRlY3JlYXNlIHRoZQorICAgIC8vIHdp
ZHRoIG9mIHRoZSBZIHRleHR1cmUgYnkgMiBmb3IgcHJvcGVyIGFsaWdubWVudC4gVGhpcyBtdXN0
IGhhcHBlbgorICAgIC8vIGFsd2F5cywgZXZlbiBpZiBZJ3MgdGV4dHVyZSBkb2VzIG5vdCBoYXZl
IHBhZGRpbmcgYnl0ZXMuCisgICAgaWYgKHBsYW5lID09IFZpZGVvRnJhbWVDaHJvbWl1bTo6eVBs
YW5lICYmIGZyYW1lLT5mb3JtYXQoKSA9PSBWaWRlb0ZyYW1lQ2hyb21pdW06OllWMTIpIHsKKyAg
ICAgICAgaWYgKGZyYW1lLT5oYXNQYWRkaW5nQnl0ZXMoVmlkZW9GcmFtZUNocm9taXVtOjp1UGxh
bmUpKSB7CisgICAgICAgICAgICBpbnQgb3JpZ2luYWxXaWR0aCA9IGZyYW1lLT53aWR0aChwbGFu
ZSk7CisgICAgICAgICAgICB2aXNpYmxlV2lkdGggPSBvcmlnaW5hbFdpZHRoIC0gMjsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBJbnRTaXplKHZpc2libGVXaWR0aCwgdmlzaWJsZUhl
aWdodCk7Cit9CisKK2Jvb2wgQ0NWaWRlb0xheWVySW1wbDo6cmVzZXJ2ZVRleHR1cmVzKGNvbnN0
IFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUsIEdDM0RlbnVtIGZvcm1hdCwgTGF5ZXJSZW5kZXJl
ckNocm9taXVtKiBsYXllclJlbmRlcmVyKQoreworICAgIGlmIChmcmFtZS0+cGxhbmVzKCkgPiBN
YXhQbGFuZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpbnQgbWF4VGV4dHVyZVNpemUg
PSBsYXllclJlbmRlcmVyLT5jYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZTsKKyAgICBmb3Ig
KHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBmcmFtZS0+cGxhbmVzKCk7ICsrcGxhbmUpIHsK
KyAgICAgICAgSW50U2l6ZSByZXF1aXJlZFRleHR1cmVTaXplID0gZnJhbWUtPnJlcXVpcmVkVGV4
dHVyZVNpemUocGxhbmUpOworICAgICAgICAvLyBJZiB0aGUgcmVuZGVyZXIgY2Fubm90IGhhbmRs
ZSB0aGlzIGxhcmdlIG9mIGEgdGV4dHVyZSwgcmV0dXJuIGZhbHNlLgorICAgICAgICAvLyBGSVhN
RTogUmVtb3ZlIHRoaXMgdGVzdCB3aGVuIHRpbGVkIGxheWVycyBhcmUgaW1wbGVtZW50ZWQuCisg
ICAgICAgIGlmIChyZXF1aXJlZFRleHR1cmVTaXplLmlzWmVybygpIHx8IHJlcXVpcmVkVGV4dHVy
ZVNpemUud2lkdGgoKSA+IG1heFRleHR1cmVTaXplIHx8IHJlcXVpcmVkVGV4dHVyZVNpemUuaGVp
Z2h0KCkgPiBtYXhUZXh0dXJlU2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgaWYgKCFtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUpIHsKKyAgICAgICAgICAgIG1fdGV4
dHVyZXNbcGxhbmVdLm1fdGV4dHVyZSA9IE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobGF5ZXJSZW5k
ZXJlci0+cmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyKCkpOworICAgICAgICAgICAgaWYgKCFt
X3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgbV90ZXh0dXJlc1twbGFuZV0ubV92aXNpYmxlU2l6ZSA9IEludFNpemUo
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlLT5z
aXplKCkgIT0gcmVxdWlyZWRUZXh0dXJlU2l6ZSkKKyAgICAgICAgICAgIG1fdGV4dHVyZXNbcGxh
bmVdLm1fdmlzaWJsZVNpemUgPSBjb21wdXRlVmlzaWJsZVNpemUoZnJhbWUsIHBsYW5lKTsKKyAg
ICAgICAgbV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlLT5yZXNlcnZlKHJlcXVpcmVkVGV4dHVy
ZVNpemUsIGZvcm1hdCk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIENDVmlk
ZW9MYXllckltcGw6OmRyYXdZVVYoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVy
KSBjb25zdAogewogICAgIGNvbnN0IFlVVlByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVy
LT52aWRlb0xheWVyWVVWUHJvZ3JhbSgpOwogICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0t
PmluaXRpYWxpemVkKCkpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXll
clJlbmRlcmVyLT5jb250ZXh0KCk7Ci0gICAgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSB5VGV4
dHVyZSA9IG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjp5UGxhbmVdOwotICAgIENDVmlk
ZW9MYXllckltcGw6OlRleHR1cmUgdVRleHR1cmUgPSBtX3RleHR1cmVzW1ZpZGVvRnJhbWVDaHJv
bWl1bTo6dVBsYW5lXTsKLSAgICBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlIHZUZXh0dXJlID0g
bV90ZXh0dXJlc1tWaWRlb0ZyYW1lQ2hyb21pdW06OnZQbGFuZV07CisgICAgY29uc3QgVGV4dHVy
ZSYgeVRleHR1cmUgPSBtX3RleHR1cmVzW1ZpZGVvRnJhbWVDaHJvbWl1bTo6eVBsYW5lXTsKKyAg
ICBjb25zdCBUZXh0dXJlJiB1VGV4dHVyZSA9IG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVt
Ojp1UGxhbmVdOworICAgIGNvbnN0IFRleHR1cmUmIHZUZXh0dXJlID0gbV90ZXh0dXJlc1tWaWRl
b0ZyYW1lQ2hyb21pdW06OnZQbGFuZV07CiAKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0
aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEpKTsKLSAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHlU
ZXh0dXJlLmlkKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB5VGV4dHVyZS5tX3RleHR1cmUtPnRleHR1cmVJZCgp
KSk7CiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkUyKSk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB1VGV4dHVyZS5pZCkpOworICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgdVRleHR1cmUubV90ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOwogICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMykpOwotICAg
IEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgdlRleHR1cmUuaWQpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHZUZXh0dXJlLm1fdGV4dHVyZS0+
dGV4dHVyZUlkKCkpKTsKIAogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51c2VQcm9ncmFtKHBy
b2dyYW0tPnByb2dyYW0oKSkpOwogCi0gICAgZmxvYXQgeVdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0
aWNfY2FzdDxmbG9hdD4oeVRleHR1cmUudmlzaWJsZVNpemUud2lkdGgoKSkgLyB5VGV4dHVyZS5z
aXplLndpZHRoKCk7CisgICAgZmxvYXQgeVdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0aWNfY2FzdDxm
bG9hdD4oeVRleHR1cmUubV92aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHlUZXh0dXJlLm1fdGV4dHVy
ZS0+c2l6ZSgpLndpZHRoKCk7CiAgICAgLy8gQXJiaXRyYXJpbHkgdGFrZSB0aGUgdSBzaXplcyBi
ZWNhdXNlIHUgYW5kIHYgZGltZW5zaW9ucyBhcmUgaWRlbnRpY2FsLgotICAgIGZsb2F0IHV2V2lk
dGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0Pih1VGV4dHVyZS52aXNpYmxlU2l6ZS53
aWR0aCgpKSAvIHVUZXh0dXJlLnNpemUud2lkdGgoKTsKKyAgICBmbG9hdCB1dldpZHRoU2NhbGVG
YWN0b3IgPSBzdGF0aWNfY2FzdDxmbG9hdD4odVRleHR1cmUubV92aXNpYmxlU2l6ZS53aWR0aCgp
KSAvIHVUZXh0dXJlLm1fdGV4dHVyZS0+c2l6ZSgpLndpZHRoKCk7CiAgICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS55V2lkdGhTY2FsZUZh
Y3RvckxvY2F0aW9uKCksIHlXaWR0aFNjYWxlRmFjdG9yKSk7CiAgICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS51dldpZHRoU2NhbGVGYWN0
b3JMb2NhdGlvbigpLCB1dldpZHRoU2NhbGVGYWN0b3IpKTsKIApAQCAtMTUwLDIxICsyODQsMTgg
QEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3WVVWKExheWVyUmVuZGVyZXJDaHJvbWl1bSog
bGF5ZXJSZW5kZXJlcikgY29uc3QKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKIH0KIAotdm9pZCBDQ1ZpZGVvTGF5
ZXJJbXBsOjpkcmF3UkdCQShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpIGNv
bnN0Cit0ZW1wbGF0ZTxjbGFzcyBQcm9ncmFtPgordm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3
Q29tbW9uKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgUHJvZ3JhbSogcHJv
Z3JhbSwgZmxvYXQgd2lkdGhTY2FsZUZhY3RvciwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQp
IGNvbnN0CiB7Ci0gICAgY29uc3QgUkdCQVByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVy
LT52aWRlb0xheWVyUkdCQVByb2dyYW0oKTsKICAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFt
LT5pbml0aWFsaXplZCgpKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5
ZXJSZW5kZXJlci0+Y29udGV4dCgpOwotICAgIENDVmlkZW9MYXllckltcGw6OlRleHR1cmUgdGV4
dHVyZSA9IG1fdGV4dHVyZXNbVmlkZW9GcmFtZUNocm9taXVtOjpyZ2JQbGFuZV07CiAKICAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRTApKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmUuaWQpKTsKKyAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmVJ
ZCkpOwogCiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJv
Z3JhbSgpKSk7Ci0gICAgZmxvYXQgd2lkdGhTY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0
Pih0ZXh0dXJlLnZpc2libGVTaXplLndpZHRoKCkpIC8gdGV4dHVyZS5zaXplLndpZHRoKCk7CiAg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00Zihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIo
KS50ZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCAwLCAwLCB3aWR0aFNjYWxlRmFjdG9yLCAxKSk7Ci0K
ICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hh
ZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKIAogICAgIGxheWVyUmVuZGVyZXItPmRyYXdU
ZXh0dXJlZFF1YWQoZHJhd1RyYW5zZm9ybSgpLCBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5o
ZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwgbGF5ZXJSZW5kZXJlci0+c2hhcmVkR2VvbWV0cnlRdWFk
KCksCkBAIC0xNzMsMjYgKzMwNCwxOCBAQCB2b2lkIENDVmlkZW9MYXllckltcGw6OmRyYXdSR0JB
KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikgY29uc3QKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsKIH0KIAordm9pZCBDQ1ZpZGVvTGF5ZXJJbXBs
OjpkcmF3UkdCQShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpIGNvbnN0Cit7
CisgICAgY29uc3QgUkdCQVByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT52aWRlb0xh
eWVyUkdCQVByb2dyYW0oKTsKKyAgICBjb25zdCBUZXh0dXJlJiB0ZXh0dXJlID0gbV90ZXh0dXJl
c1tWaWRlb0ZyYW1lQ2hyb21pdW06OnJnYlBsYW5lXTsKKyAgICBmbG9hdCB3aWR0aFNjYWxlRmFj
dG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRleHR1cmUubV92aXNpYmxlU2l6ZS53aWR0aCgpKSAv
IHRleHR1cmUubV90ZXh0dXJlLT5zaXplKCkud2lkdGgoKTsKKyAgICBkcmF3Q29tbW9uKGxheWVy
UmVuZGVyZXIsIHByb2dyYW0sIHdpZHRoU2NhbGVGYWN0b3IsIHRleHR1cmUubV90ZXh0dXJlLT50
ZXh0dXJlSWQoKSk7Cit9CisKIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhd05hdGl2ZVRleHR1
cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKSBjb25zdAogewogICAgIGNv
bnN0IE5hdGl2ZVRleHR1cmVQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dmlkZW9M
YXllck5hdGl2ZVRleHR1cmVQcm9ncmFtKCk7Ci0gICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3Jh
bS0+aW5pdGlhbGl6ZWQoKSk7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxh
eWVyUmVuZGVyZXItPmNvbnRleHQoKTsKLQotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3Rp
dmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwotICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9u
YXRpdmVUZXh0dXJlSWQpKTsKLQotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51c2VQcm9ncmFt
KHByb2dyYW0tPnByb2dyYW0oKSkpOwotICAgIGZsb2F0IHdpZHRoU2NhbGVGYWN0b3IgPSBzdGF0
aWNfY2FzdDxmbG9hdD4obV9uYXRpdmVUZXh0dXJlVmlzaWJsZVNpemUud2lkdGgoKSkgLyBtX25h
dGl2ZVRleHR1cmVTaXplLndpZHRoKCk7Ci0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZv
cm00Zihwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS50ZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCAwLCAw
LCB3aWR0aFNjYWxlRmFjdG9yLCAxKSk7Ci0KLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5p
Zm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsK
LQotICAgIGxheWVyUmVuZGVyZXItPmRyYXdUZXh0dXJlZFF1YWQoZHJhd1RyYW5zZm9ybSgpLCBi
b3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwgbGF5ZXJS
ZW5kZXJlci0+c2hhcmVkR2VvbWV0cnlRdWFkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIo
KS5hbHBoYUxvY2F0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt
MSk7CisgICAgZHJhd0NvbW1vbihsYXllclJlbmRlcmVyLCBwcm9ncmFtLCAxLCBtX25hdGl2ZVRl
eHR1cmVJZCk7CiB9CiAKIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGll
cyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXll
ckltcGwuaAppbmRleCBlNTMxN2FkMzRkYWVmY2I1MDYxMTZlOWQzODA4YmZhNWY5MmFiNzMwLi5j
YzRjYzgyMzI3OGU5NGFkODQ2NTgxNjlmM2EwMTZiMjQ2ODNiOTQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBs
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NW
aWRlb0xheWVySW1wbC5oCkBAIC0yNiwyMSArMjYsMjMgQEAKICNpZm5kZWYgQ0NWaWRlb0xheWVy
SW1wbF9oCiAjZGVmaW5lIENDVmlkZW9MYXllckltcGxfaAogCi0jaW5jbHVkZSAiUHJvZ3JhbUJp
bmRpbmcuaCIKKyNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgogI2luY2x1ZGUgIlNoYWRlckNo
cm9taXVtLmgiCiAjaW5jbHVkZSAiVmlkZW9GcmFtZUNocm9taXVtLmgiCisjaW5jbHVkZSAiVmlk
ZW9GcmFtZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiVmlkZW9MYXllckNocm9taXVtLmgiCiAjaW5j
bHVkZSAiY2MvQ0NMYXllckltcGwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBW
aWRlb0ZyYW1lUHJvdmlkZXI7Cit0ZW1wbGF0ZTxjbGFzcyBWZXJ0ZXhTaGFkZXIsIGNsYXNzIEZy
YWdtZW50U2hhZGVyPiBjbGFzcyBQcm9ncmFtQmluZGluZzsKIAotY2xhc3MgQ0NWaWRlb0xheWVy
SW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CitjbGFzcyBDQ1ZpZGVvTGF5ZXJJbXBsIDogcHVi
bGljIENDTGF5ZXJJbXBsCisgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIFZpZGVvRnJh
bWVQcm92aWRlcjo6Q2xpZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1Zp
ZGVvTGF5ZXJJbXBsPiBjcmVhdGUoaW50IGlkKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDVmlk
ZW9MYXllckltcGw+IGNyZWF0ZShpbnQgaWQsIFZpZGVvRnJhbWVQcm92aWRlciogcHJvdmlkZXIp
CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENDVmlkZW9MYXllckltcGwoaWQp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ1ZpZGVvTGF5ZXJJbXBsKGlkLCBwcm92
aWRlcikpOwogICAgIH0KICAgICB2aXJ0dWFsIH5DQ1ZpZGVvTGF5ZXJJbXBsKCk7CiAKQEAgLTUy
LDM2ICs1NCwzOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVy
dGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CiAKLSAgICB2b2lkIHNldFNraXBz
RHJhdyhib29sIHNraXBzRHJhdykgeyBtX3NraXBzRHJhdyA9IHNraXBzRHJhdzsgfQotICAgIHZv
aWQgc2V0RnJhbWVGb3JtYXQoVmlkZW9GcmFtZUNocm9taXVtOjpGb3JtYXQgZm9ybWF0KSB7IG1f
ZnJhbWVGb3JtYXQgPSBmb3JtYXQ7IH0KLSAgICB2b2lkIHNldFRleHR1cmUoc2l6ZV90LCBQbGF0
Zm9ybTNET2JqZWN0IHRleHR1cmVJZCwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFNpemUmIHZp
c2libGVTaXplKTsKLSAgICB2b2lkIHNldE5hdGl2ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0
ZXh0dXJlSWQsIGNvbnN0IEludFNpemUmLCBjb25zdCBJbnRTaXplJiB2aXNpYmxlU2l6ZSk7Cisg
ICAgLy8gVmlkZW9GcmFtZVByb3ZpZGVyOjpDbGllbnQgaW1wbGVtZW50YXRpb24gKGNhbGxhYmxl
IG9uIGFueSB0aHJlYWQpLgorICAgIHZpcnR1YWwgdm9pZCBzdG9wVXNpbmdQcm92aWRlcigpOwog
CiBwcml2YXRlOgotICAgIGV4cGxpY2l0IENDVmlkZW9MYXllckltcGwoaW50KTsKKyAgICBleHBs
aWNpdCBDQ1ZpZGVvTGF5ZXJJbXBsKGludCwgVmlkZW9GcmFtZVByb3ZpZGVyKik7CiAKICAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIlZp
ZGVvTGF5ZXIiOyB9CiAKLSAgICBzdHJ1Y3QgVGV4dHVyZSB7Ci0gICAgICAgIFBsYXRmb3JtM0RP
YmplY3QgaWQ7Ci0gICAgICAgIEludFNpemUgc2l6ZTsKLSAgICAgICAgSW50U2l6ZSB2aXNpYmxl
U2l6ZTsKLSAgICB9OwotCisgICAgYm9vbCBjb3B5RnJhbWVUb1RleHR1cmVzKGNvbnN0IFZpZGVv
RnJhbWVDaHJvbWl1bSosIEdDM0RlbnVtIGZvcm1hdCwgTGF5ZXJSZW5kZXJlckNocm9taXVtKik7
CisgICAgdm9pZCBjb3B5UGxhbmVUb1RleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29u
c3Qgdm9pZCogcGxhbmUsIGludCBpbmRleCk7CisgICAgYm9vbCByZXNlcnZlVGV4dHVyZXMoY29u
c3QgVmlkZW9GcmFtZUNocm9taXVtKiwgR0MzRGVudW0gZm9ybWF0LCBMYXllclJlbmRlcmVyQ2hy
b21pdW0qKTsKICAgICB2b2lkIGRyYXdZVVYoTGF5ZXJSZW5kZXJlckNocm9taXVtKikgY29uc3Q7
CiAgICAgdm9pZCBkcmF3UkdCQShMYXllclJlbmRlcmVyQ2hyb21pdW0qKSBjb25zdDsKICAgICB2
b2lkIGRyYXdOYXRpdmVUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSopIGNvbnN0OworICAg
IHRlbXBsYXRlPGNsYXNzIFByb2dyYW0+IHZvaWQgZHJhd0NvbW1vbihMYXllclJlbmRlcmVyQ2hy
b21pdW0qLCBQcm9ncmFtKiwgZmxvYXQgd2lkdGhTY2FsZUZhY3RvciwgUGxhdGZvcm0zRE9iamVj
dCB0ZXh0dXJlSWQpIGNvbnN0OworCisgICAgTXV0ZXggbV9wcm92aWRlck11dGV4OyAvLyBHdWFy
ZHMgbV9wcm92aWRlciBiZWxvdy4KKyAgICBWaWRlb0ZyYW1lUHJvdmlkZXIqIG1fcHJvdmlkZXI7
CiAKICAgICBzdGF0aWMgY29uc3QgZmxvYXQgeXV2MlJHQls5XTsKICAgICBzdGF0aWMgY29uc3Qg
ZmxvYXQgeXV2QWRqdXN0WzNdOwogCi0gICAgYm9vbCBtX3NraXBzRHJhdzsKLSAgICBWaWRlb0Zy
YW1lQ2hyb21pdW06OkZvcm1hdCBtX2ZyYW1lRm9ybWF0OwotICAgIFRleHR1cmUgbV90ZXh0dXJl
c1szXTsKKyAgICBzdHJ1Y3QgVGV4dHVyZSB7CisgICAgICAgIE93blB0cjxNYW5hZ2VkVGV4dHVy
ZT4gbV90ZXh0dXJlOworICAgICAgICBJbnRTaXplIG1fdmlzaWJsZVNpemU7CisgICAgfTsKKyAg
ICBlbnVtIHsgTWF4UGxhbmVzID0gMyB9OworICAgIFRleHR1cmUgbV90ZXh0dXJlc1tNYXhQbGFu
ZXNdOworICAgIGludCBtX3BsYW5lczsKIAogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9uYXRpdmVU
ZXh0dXJlSWQ7CiAgICAgSW50U2l6ZSBtX25hdGl2ZVRleHR1cmVTaXplOwotICAgIEludFNpemUg
bV9uYXRpdmVUZXh0dXJlVmlzaWJsZVNpemU7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcAppbmRleCBi
Y2U1ZjYyMzgzOWFmMjVkNDAwMzQ3NTViM2NkYmY4YjRlMDI2YmMwLi5hZmNjODViMTQwMzQ0MzE0
OGJjZjkwNmI2MDZiNmIyYzBlMDg5NGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAKQEAgLTEwMSwxMCArMTAx
LDEwIEBAIFdlYk1lZGlhUGxheWVyKiBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6Om1lZGlhUGxh
eWVyKCkgY29uc3QKIAogV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjp+V2ViTWVkaWFQbGF5ZXJD
bGllbnRJbXBsKCkKIHsKLSAgICAvLyBWaWRlb0xheWVyQ2hyb21pdW0gbWF5IG91dGxpdmUgdGhp
cyBvYmplY3Qgc28gY2xlYXIgdGhlIGJhY2sgcG9pbnRlci4KICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCi0gICAgaWYgKG1fdmlkZW9MYXllcikKLSAgICAgICAgbV92aWRlb0xheWVy
LT5yZWxlYXNlUHJvdmlkZXIoKTsKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9jb21wb3NpdGlu
Z011dGV4KTsKKyAgICBpZiAobV92aWRlb0ZyYW1lUHJvdmlkZXJDbGllbnQpCisgICAgICAgIG1f
dmlkZW9GcmFtZVByb3ZpZGVyQ2xpZW50LT5zdG9wVXNpbmdQcm92aWRlcigpOwogI2VuZGlmCiB9
CiAKQEAgLTU4MSw4ICs1ODEsMTUgQEAgYm9vbCBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OmFj
Y2VsZXJhdGVkUmVuZGVyaW5nSW5Vc2UoKQogICAgIHJldHVybiBtX3ZpZGVvTGF5ZXIgJiYgbV92
aWRlb0xheWVyLT5sYXllclRyZWVIb3N0KCk7CiB9CiAKK3ZvaWQgV2ViTWVkaWFQbGF5ZXJDbGll
bnRJbXBsOjpzZXRWaWRlb0ZyYW1lUHJvdmlkZXJDbGllbnQoVmlkZW9GcmFtZVByb3ZpZGVyOjpD
bGllbnQqIGNsaWVudCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9jb21wb3NpdGluZ011
dGV4KTsKKyAgICBtX3ZpZGVvRnJhbWVQcm92aWRlckNsaWVudCA9IGNsaWVudDsKK30KKwogVmlk
ZW9GcmFtZUNocm9taXVtKiBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6OmdldEN1cnJlbnRGcmFt
ZSgpCiB7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fY29tcG9zaXRpbmdNdXRleCk7CiAgICAg
QVNTRVJUKCFtX2N1cnJlbnRWaWRlb0ZyYW1lKTsKICAgICBpZiAobV93ZWJNZWRpYVBsYXllciAm
JiAhbV9jdXJyZW50VmlkZW9GcmFtZSkgewogICAgICAgICBXZWJWaWRlb0ZyYW1lKiB3ZWJraXRW
aWRlb0ZyYW1lID0gbV93ZWJNZWRpYVBsYXllci0+Z2V0Q3VycmVudEZyYW1lKCk7CkBAIC01OTQs
NiArNjAxLDcgQEAgVmlkZW9GcmFtZUNocm9taXVtKiBXZWJNZWRpYVBsYXllckNsaWVudEltcGw6
OmdldEN1cnJlbnRGcmFtZSgpCiAKIHZvaWQgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpwdXRD
dXJyZW50RnJhbWUoVmlkZW9GcmFtZUNocm9taXVtKiB2aWRlb0ZyYW1lKQogeworICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX2NvbXBvc2l0aW5nTXV0ZXgpOwogICAgIGlmICh2aWRlb0ZyYW1lICYm
IHZpZGVvRnJhbWUgPT0gbV9jdXJyZW50VmlkZW9GcmFtZSkgewogICAgICAgICBpZiAobV93ZWJN
ZWRpYVBsYXllcikgewogICAgICAgICAgICAgbV93ZWJNZWRpYVBsYXllci0+cHV0Q3VycmVudEZy
YW1lKApAQCAtNjY3LDYgKzY3NSw3IEBAIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6V2ViTWVk
aWFQbGF5ZXJDbGllbnRJbXBsKCkKICAgICAsIG1fdmlkZW9MYXllcigwKQogICAgICwgbV9zdXBw
b3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoZmFsc2UpCiAgICAgLCBtX29wYXF1ZShmYWxzZSkK
KyAgICAsIG1fdmlkZW9GcmFtZVByb3ZpZGVyQ2xpZW50KDApCiAjZW5kaWYKIHsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1w
bC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBs
LmgKaW5kZXggMTA4ODgzMGNiMDkzYzU3NDQ4MDQ2MDIzNThmZmIzYWIzNWVhY2Q1My4uMzUzYjVi
NWUzN2ZlNDBjMDJmZGU0NzFlMzlkN2ZjZDRmMWI2MzAzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmgKQEAgLTEzMCw3
ICsxMzAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB1bnNpZ25lZCBkcm9wcGVkRnJhbWVDb3Vu
dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgYXVkaW9EZWNvZGVkQnl0ZUNvdW50KCkg
Y29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCB2aWRlb0RlY29kZWRCeXRlQ291bnQoKSBjb25z
dDsKLSAgICAKKwogI2lmIEVOQUJMRShXRUJfQVVESU8pCiAgICAgdmlydHVhbCBXZWJDb3JlOjpB
dWRpb1NvdXJjZVByb3ZpZGVyKiBhdWRpb1NvdXJjZVByb3ZpZGVyKCk7CiAjZW5kaWYKQEAgLTEz
OSw2ICsxMzksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQWNjZWxlcmF0
ZWRSZW5kZXJpbmcoKSBjb25zdDsKIAogICAgIC8vIFZpZGVvRnJhbWVQcm92aWRlciBtZXRob2Rz
OgorICAgIHZpcnR1YWwgdm9pZCBzZXRWaWRlb0ZyYW1lUHJvdmlkZXJDbGllbnQoVmlkZW9GcmFt
ZVByb3ZpZGVyOjpDbGllbnQqKTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OlZpZGVvRnJhbWVDaHJv
bWl1bSogZ2V0Q3VycmVudEZyYW1lKCk7CiAgICAgdmlydHVhbCB2b2lkIHB1dEN1cnJlbnRGcmFt
ZShXZWJDb3JlOjpWaWRlb0ZyYW1lQ2hyb21pdW0qKTsKICNlbmRpZgpAQCAtMTYxLDYgKzE2Miw3
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBhY2NlbGVyYXRlZFJlbmRlcmluZ0luVXNlKCk7CiAjZW5k
aWYKIAorICAgIE11dGV4IG1fY29tcG9zaXRpbmdNdXRleDsgLy8gR3VhcmRzIG1fY3VycmVudFZp
ZGVvRnJhbWUgYW5kIG1fdmlkZW9GcmFtZVByb3ZpZGVyQ2xpZW50LgogICAgIFdlYkNvcmU6Ok1l
ZGlhUGxheWVyKiBtX21lZGlhUGxheWVyOwogICAgIE93blB0cjxXZWJNZWRpYVBsYXllcj4gbV93
ZWJNZWRpYVBsYXllcjsKICAgICBPd25QdHI8V2ViQ29yZTo6VmlkZW9GcmFtZUNocm9taXVtPiBt
X2N1cnJlbnRWaWRlb0ZyYW1lOwpAQCAtMTcxLDYgKzE3Myw3IEBAIHByaXZhdGU6CiAgICAgUmVm
UHRyPFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bT4gbV92aWRlb0xheWVyOwogICAgIGJvb2wg
bV9zdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmc7CiAgICAgYm9vbCBtX29wYXF1ZTsKKyAg
ICBWaWRlb0ZyYW1lUHJvdmlkZXI6OkNsaWVudCogbV92aWRlb0ZyYW1lUHJvdmlkZXJDbGllbnQ7
CiAjZW5kaWYKICAgICBzdGF0aWMgYm9vbCBtX2lzRW5hYmxlZDsKIApAQCAtMTkxLDEzICsxOTQs
MTMgQEAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCB2b2lkIHNldEZvcm1hdChzaXplX3QgbnVt
YmVyT2ZDaGFubmVscywgZmxvYXQgc2FtcGxlUmF0ZSk7CiAKICAgICAgICAgdm9pZCB3cmFwKFdl
YkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJDbGllbnQqIGNsaWVudCkgeyBtX2NsaWVudCA9IGNs
aWVudDsgfQotICAgICAgICAKKwogICAgIHByaXZhdGU6CiAgICAgICAgIFdlYkNvcmU6OkF1ZGlv
U291cmNlUHJvdmlkZXJDbGllbnQqIG1fY2xpZW50OwogICAgIH07CiAKICAgICAvLyBBdWRpb1Nv
dXJjZVByb3ZpZGVySW1wbCB3cmFwcyBhIFdlYkF1ZGlvU291cmNlUHJvdmlkZXIuCi0gICAgLy8g
cHJvdmlkZUlucHV0KCkgY2FsbHMgaW50byBDaHJvbWl1bSB0byBnZXQgYSByZW5kZXJlZCBhdWRp
byBzdHJlYW0uIAorICAgIC8vIHByb3ZpZGVJbnB1dCgpIGNhbGxzIGludG8gQ2hyb21pdW0gdG8g
Z2V0IGEgcmVuZGVyZWQgYXVkaW8gc3RyZWFtLgogCiAgICAgY2xhc3MgQXVkaW9Tb3VyY2VQcm92
aWRlckltcGwgOiBwdWJsaWMgV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlciB7CiAgICAgcHVi
bGljOgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>