<?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>70057</bug_id>
          
          <creation_ts>2011-10-13 14:41:46 -0700</creation_ts>
          <short_desc>[chromium] Refactor LayerRendererChromium drawing code.</short_desc>
          <delta_ts>2011-10-24 19:53:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</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>
          
          <blocked>67341</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Shawn Singh">shawnsingh</reporter>
          <assigned_to name="Shawn Singh">shawnsingh</assigned_to>
          <cc>danakj</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>483505</commentid>
    <comment_count>0</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-13 14:41:46 -0700</bug_when>
    <thetext>This patch (coming very soon) cleans up the core nested loop that draws layers and render surfaces.  The nested loop is split into two nested loops, and put into function calls:
   - one pass to determine what to draw (visibility rects, which layers to actually draw)
   - another pass to actually draw things.

This makes it much easier to test this code properly, and makes it cleaner to add some optimizations down the road.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483514</commentid>
    <comment_count>1</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-13 14:45:00 -0700</bug_when>
    <thetext>
Notes for reviewers:

(1) I&apos;m proposing to leave the FIXME in the code for now, and we can create a bug for it.  The changes required for that should be done when testing is in place, and in a separate change.  It is too much of a side-track at the moment...

(2) I added an early-exit condition if the visibleLayerRect is empty.  Please verify.   It did not introduce any regressions in layout tests, and all existing unit tests still pass...

(3) The diff came out awkward, so here is a crisp list of changes I made to LayerRendererChromium.cpp:
    - removed the nested loop from drawLayersInternal
          - replaced it with calls to determineWhatToDraw() and drawLayersOntoRenderSurfaces()
    - removed drawLayer(...)
    - created determineWhatToDraw(...)
    - created drawLayersOntoRenderSurfaces()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483517</commentid>
    <comment_count>2</comment_count>
      <attachid>110911</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-13 14:47:56 -0700</bug_when>
    <thetext>Created attachment 110911
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485413</commentid>
    <comment_count>3</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-10-17 12:56:53 -0700</bug_when>
    <thetext>Just FYI, it&apos;s fine to skip drawing a single layer if its visible rect is empty.  That&apos;s not enough information to skip its children, but it doesn&apos;t look like you&apos;re doing that.

I&apos;ll admit that I&apos;m not really that keen on setting (more) ephemeral flags on layers.  Pardon me while I think out loud for a second:

It seems weird to me that we have this LayerList where we end up skipping parts of it conditionally (due to opacity, skipped flags, facing direction, etc...).  On top of that, it looks like CCLayerTreeHost and LayerRendererChromium have a lot of similarities between paintLayerContents and drawLayers.

What do you think about the idea of having CCLayerTreeHostCommon::calculateDrawTransformsAndVisibility return a layer list where everything in it needs to be drawn? In other words, do all the conditional early-outs in that function at both the layer and the surface level?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485448</commentid>
    <comment_count>4</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-17 13:24:05 -0700</bug_when>
    <thetext>That&apos;s a great idea, and I&apos;ll be happy to do that.  Two concerns:

(1) Personally, I feel that calculateDrawTransformsAndVisibility is too risky to modify until we have more complete testing in place.  The special cases and semantics are very fragile.

(2) People are waiting on scissoring optimization, so this change needs to happen sooner than later.

So, I think this patch is a step in the right direction, and accomplishes what is needed for now.  Then, after it lands, I can continue adding tests and continue refactoring without other people waiting.  Does that sound like a good compromise?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485458</commentid>
    <comment_count>5</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-10-17 13:31:50 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; That&apos;s a great idea, and I&apos;ll be happy to do that.  Two concerns:
&gt; 
&gt; (1) Personally, I feel that calculateDrawTransformsAndVisibility is too risky to modify until we have more complete testing in place.  The special cases and semantics are very fragile.
&gt; 
&gt; (2) People are waiting on scissoring optimization, so this change needs to happen sooner than later.

What part of this patch is needed for the scissoring optimization? If you&apos;re wary about doing refactoring before we have better testing, then maybe it&apos;d better to have an even smaller, more directed patch to enable scissoring before doing this work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485462</commentid>
    <comment_count>6</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-17 13:38:44 -0700</bug_when>
    <thetext>Scissoring needs a preliminary loop through all layers that determines exactly what will be drawn for each layer (so that we can union that layer&apos;s intended draw rect to an overall compositor scissor).  So I think essentially this entire patch is a prerequisite for scissoring.

The only additional step that I took in this patch is to avoid redundant code by removing it from the original loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485486</commentid>
    <comment_count>7</comment_count>
      <attachid>110911</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-10-17 13:59:32 -0700</bug_when>
    <thetext>Comment on attachment 110911
Patch

I agree with Enne&apos;s point that putting empemeral state on layers that have to do with &quot;the next frame&apos;s state&quot; violates layering.

As far as the &quot;too risky to try&quot; stuff, I disagree. We have pretty good coverage of this via layout tests. If they don&apos;t pass, then something&apos;s broken.

One thing you could try is to create a RenderingSchedule object:
  RenderingSchedule {
    void skip(CCLayerImpl* impl) { m_skipped.add(impl); }
    bool shouldSkip(CCLayerImpl*) { return impl in m_skipped; }
  protected:
    set&lt;CCLayerImpl*&gt; m_skipped;
  }
Pass this into determineWhatToDraw, as well as the drawing functions. That way at least you&apos;re not adding empemeral state onto the layers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485490</commentid>
    <comment_count>8</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-17 14:04:53 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; That&apos;s a great idea, and I&apos;ll be happy to do that.  Two concerns:
&gt; 
&gt; (1) Personally, I feel that calculateDrawTransformsAndVisibility is too risky to modify until we have more complete testing in place.  The special cases and semantics are very fragile.

It&apos;s probably not that bad. I agree that changing the logic there is scary but modifying what it returns should leave most of the existing code intact.  

An added benefit would be that we don&apos;t have to worry about having to keep the various layer skipping conditions in sync across different parts of the code (updating transforms, painting layers, drawing)


&gt; 
&gt; (2) People are waiting on scissoring optimization, so this change needs to happen sooner than later.
&gt; 
&gt; So, I think this patch is a step in the right direction, and accomplishes what is needed for now.  Then, after it lands, I can continue adding tests and continue refactoring without other people waiting.  Does that sound like a good compromise?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485495</commentid>
    <comment_count>9</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-17 14:14:26 -0700</bug_when>
    <thetext>OK, I&apos;ll dig into how to put it into calculateDrawTransformsAndVisibility, and submit a new patch soon (ETA 1 day) =)

~Shawn</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485513</commentid>
    <comment_count>10</comment_count>
      <attachid>110911</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-17 14:37:14 -0700</bug_when>
    <thetext>Comment on attachment 110911
Patch

What if instead of manipulating state on the layers you manipulated the layer lists (removed layers that aren&apos;t drawn from their LayerList, remove surfaces that are entirely skipped from the renderSurfaceLayerList).  Would that make things cleaner?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485581</commentid>
    <comment_count>11</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-17 15:57:35 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 110911 [details])
&gt; What if instead of manipulating state on the layers you manipulated the layer lists (removed layers that aren&apos;t drawn from their LayerList, remove surfaces that are entirely skipped from the renderSurfaceLayerList).  Would that make things cleaner?

Yeah, I think that&apos;s what Enne and Vangelis were suggesting, too.  Next patch should work this way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486181</commentid>
    <comment_count>12</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-18 11:15:17 -0700</bug_when>
    <thetext>So, I dug into it, and here&apos;s what I found:

The &quot;right&quot; way to do this is to never add layers that wouldn&apos;t be drawn.  (the &quot;hack&quot; way would be to remove them after we realize they can be skipped).  To do it the right way, we&apos;ll have to change the ordering in which layers are appended to the list.  This means we also have to change the layer sorter so that it orders things back-to-front instead of front-to-back.

Of course I prefer the &quot;right&quot; way, but I want to make sure you all are OK with reversing the ordering of layers in the layer lists (and in the sorter).   As I understand, the best way to reverse the sorting order is around line 421 of CCLayerSorter; instead of popping from the back, we can iterate starting from the beginning and clear the entire list afterwards.

should we be CC&apos;ing Iain about this, too?  I couldn&apos;t find his email.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486191</commentid>
    <comment_count>13</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-18 11:28:35 -0700</bug_when>
    <thetext>I&apos;m not sure from your description exactly what the proposal is. Could you elaborate a bit?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486221</commentid>
    <comment_count>14</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-18 12:22:36 -0700</bug_when>
    <thetext>sure...  the proposal is as follows:

(1) create a bool layerNeedsToBeDrawn().  all early exit conditions can be placed there.

(2) add a conditional check before appending the layer to the layer list:

    if (layerNeedsToBeDrawn(layer))
        descendants.append(layer)

(3) Currently, this append occurs *before* the recursion of the subtree.  However, layerNeedsToBeDrawn() requires knowing some information *after* recursion of the subtree.  So there are some options:
    (3a) Move the conditional append to after the recursion.  this effectively reverses the order of the layer list for each render surface.  And we&apos;ll have to make sure the sorter reverse its ordering, too.
    (3b) We can leave the recursion alone, and just remove the layer afterwards.  Not ideal, but at least the code is still pretty clean.

(3c) Technically the scissor is the only condition that needs to happen after recursion.  We could separate layerNeedsToBeDrawn into two pieces.  But I think that&apos;s not a very clean design.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486286</commentid>
    <comment_count>15</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-10-18 13:47:42 -0700</bug_when>
    <thetext>(In reply to comment #14)

&gt;     (3b) We can leave the recursion alone, and just remove the layer afterwards.  Not ideal, but at least the code is still pretty clean.

I think I prefer this solution, rather than reversing the order of lists everywhere.

If a layer&apos;s scissor rect is dependent on its children and that layer ends up with an empty scissor rect, then (theoretically) it should be the case that it has no children that need to get drawn.  Removing it should just be popping the last layer off the list.  Or, maybe I&apos;m missing something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486288</commentid>
    <comment_count>16</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-10-18 13:52:03 -0700</bug_when>
    <thetext>I&apos;m with Enne. 3b plz. I doubt there&apos;s much performance impact in deleting the layer after the fact... I&apos;m assuming in the common case, the layer will still be at-or-near the end of the vector anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486296</commentid>
    <comment_count>17</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-18 13:58:53 -0700</bug_when>
    <thetext>OK, I&apos;ll do 3b  =)  Makes things easier.

However, I don&apos;t think it will be the common case that we&apos;re removing from the very end of the list. All the other conditions, not just the scissor, will also have a chance to remove a layer, too, while all its children should still be drawn.  But its still possible it will be negligible... I guess we&apos;d have to measure its impact after implementing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486299</commentid>
    <comment_count>18</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-10-18 14:12:16 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; OK, I&apos;ll do 3b  =)  Makes things easier.
&gt; 
&gt; However, I don&apos;t think it will be the common case that we&apos;re removing from the very end of the list. All the other conditions, not just the scissor, will also have a chance to remove a layer, too, while all its children should still be drawn.  But its still possible it will be negligible... I guess we&apos;d have to measure its impact after implementing it.

Oops, I misread what you wrote, then.  I think I&apos;m arguing for 3c.  In other words, check for everything but scissoring ahead of time and don&apos;t add the layer if it&apos;s not drawn, then do a second check just for scissoring and remove it if it fails that check.  I think this is the simplest solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486300</commentid>
    <comment_count>19</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-10-18 14:19:07 -0700</bug_when>
    <thetext>Agreed.

Note that &quot;not drawing a layer when it is outside the scissor rect&quot; is not going to give a win. Yes, we can do it &quot;because we can,&quot; but emphatically, it will not give us any savings. Lets keep our eye on the key  win: setting the scissor. Even if we drew every single layer, that will be a win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486529</commentid>
    <comment_count>20</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-18 19:54:16 -0700</bug_when>
    <thetext>Summary:
After going into detail and almost completing it, I found that we really must have a separate pass through all layers, to skip layers whose content rects and visible rects are empty.  I think the best choice is to request everyone to look again at my original patch.

Explanation:
This is because we need to know the contentRect of the target render surface.  this information is not known until the recursion is well past the context of that layer.  So no matter what we put in calculateDrawTransformsAndVisibility we&apos;ll still need a separate walk like the original one I had.

Furthermore, it is additionally messy because calculateDrawTransforms is a templatized function.  I took a brief glance, and it seems like early exit conditions are different for main thread and Impl thread.  It would still be a great refactoring opportunity, but that is a sidetrack is definitely not necessary for scissoring.

If there is a really good reason to still do it, I can still put half of the early exit conditions in the recursive function; I&apos;ve already implemented it anyway.  But I just don&apos;t think its as &quot;clean&quot; as we had hoped.

Otherwise, can we re-visit the original patch and see if its acceptable?

We could, as jamesr suggested, replace the &quot;ephemeral state&quot; with removing layers from the list.  Its not clear to me that this would be a good idea though.  It could be negligible for many pages, but it will not scale well with number of layers, and will not scale well with other optimizations like culling away occluded layers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486575</commentid>
    <comment_count>21</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-18 23:29:50 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; Summary:
&gt; After going into detail and almost completing it, I found that we really must have a separate pass through all layers, to skip layers whose content rects and visible rects are empty.  I think the best choice is to request everyone to look again at my original patch.
&gt; 
&gt; Explanation:
&gt; This is because we need to know the contentRect of the target render surface.  this information is not known until the recursion is well past the context of that layer.  So no matter what we put in calculateDrawTransformsAndVisibility we&apos;ll still need a separate walk like the original one I had.
&gt; 

The logic is probably more complex than it should be but I don&apos;t think you have to worry about RS that have empty drawableContentRects and descandants with non-empty rects.  The drawableContectRect of the RS is calculated as the union of all the drawableContectRects of its descendants.

Looking at the early out conditions in LayerRendererChromium::drawLayersInternal we have:

1. RS with empty layer lists. Don&apos;t have to worry about removed layers from the list for those as the list is already empty
2. RS with zero opacity. We should add a check for that in calculateDrawTransformsAndVisibilityInternal (cDTAVI)and bail out on layers with zero opacity (not even create RS for them)
3. layer-&gt;drawsContent() is false : we can test that in cDTAVI and don&apos;t add the layer in the list
4. layer-&gt;opacity == 0 : same as above.
5. layer-&gt;bounds is empty : we can also check that in cDTAVI. 

So, I think as far as the early out conditions, we should be able to take care of them directly in cDTAVI and avoid adding layers that don&apos;t draw to lists. Is there something that I&apos;m overlooking here? 

 


&gt; Furthermore, it is additionally messy because calculateDrawTransforms is a templatized function.  I took a brief glance, and it seems like early exit conditions are different for main thread and Impl thread.  It would still be a great refactoring opportunity, but that is a sidetrack is definitely not necessary for scissoring.
&gt; 
&gt; If there is a really good reason to still do it, I can still put half of the early exit conditions in the recursive function; I&apos;ve already implemented it anyway.  But I just don&apos;t think its as &quot;clean&quot; as we had hoped.
&gt; 
&gt; Otherwise, can we re-visit the original patch and see if its acceptable?
&gt; 
&gt; We could, as jamesr suggested, replace the &quot;ephemeral state&quot; with removing layers from the list.  Its not clear to me that this would be a good idea though.  It could be negligible for many pages, but it will not scale well with number of layers, and will not scale well with other optimizations like culling away occluded layers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486838</commentid>
    <comment_count>22</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-19 09:23:53 -0700</bug_when>
    <thetext>Yes, those conditions I can put in calculateDrawTransformsAndVisibility...  (except that drawsContent is a virtual and some implementations might be dependent on those rects, too.)

The right place for computing the scissor is after all early exits.  Can you please explain what you mean by &quot;don&apos;t worry about&quot; the other rect early exits?  We should also separate them from the draw loop as well, so that we can compute the scissor after (or while) those additional layers are being skipped.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486846</commentid>
    <comment_count>23</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-19 09:33:10 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; Yes, those conditions I can put in calculateDrawTransformsAndVisibility...  (except that drawsContent is a virtual and some implementations might be dependent on those rects, too.)
&gt; 
&gt; The right place for computing the scissor is after all early exits.  Can you please explain what you mean by &quot;don&apos;t worry about&quot; the other rect early exits?  We should also separate them from the draw loop as well, so that we can compute the scissor after (or while) those additional layers are being skipped.

cDTAV can prune the layer lists by removing any layers that won&apos;t participate in the draw. From that point on, we don&apos;t have to worry about checking early out conditions when painting their contents or drawing them. 

If the scissor rect optimization requires one more pass through the RS layer lists that would be fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486851</commentid>
    <comment_count>24</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-19 09:47:54 -0700</bug_when>
    <thetext>OK consider it done =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486872</commentid>
    <comment_count>25</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-10-19 10:32:38 -0700</bug_when>
    <thetext>(In reply to comment #20)

&gt; I took a brief glance, and it seems like early exit conditions are different for main thread and Impl thread.

If there were differences, that would mean that we had painted a layer that wasn&apos;t drawn or that we were drawing a layer that wasn&apos;t painted.  There may be differences that exist right now because the code is in two different places, but I don&apos;t think they should be there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486891</commentid>
    <comment_count>26</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-19 11:12:28 -0700</bug_when>
    <thetext>Thanks - I was able to templatize it, and its a bit cleaner.

New patch coming right now.  I dont think we came to consensus on how to deal with the &quot;shouldDraw()&quot; ephemeral state.   My proposal is to keep it, and we will definitely need a separate bug to merge it with skipsDraw.  I think its unnecessarily inefficient to remove layers at that point. =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486892</commentid>
    <comment_count>27</comment_count>
      <attachid>111649</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-19 11:14:39 -0700</bug_when>
    <thetext>Created attachment 111649
moved some early exits sooner so that layers are simply not added to layer lists</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486897</commentid>
    <comment_count>28</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-19 11:26:47 -0700</bug_when>
    <thetext>I think the &apos;shouldDraw&apos; stuff is bad - I think everybody was in favor of removing layers from lists except for you.  We should favor clarity unless there&apos;s evidence of a performance issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486985</commentid>
    <comment_count>29</comment_count>
      <attachid>111670</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-19 14:03:19 -0700</bug_when>
    <thetext>Created attachment 111670
removing layers to skip them instead of keeping additional layer state</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487130</commentid>
    <comment_count>30</comment_count>
      <attachid>111670</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-10-19 16:44:08 -0700</bug_when>
    <thetext>Comment on attachment 111670
removing layers to skip them instead of keeping additional layer state

I guess my refactoring hope had been that the determineWhatToDraw function could get merged entirely into calculateDrawTransformsAndVisibility.  Then, the renderSurfaceLayerList that you get back from calculateDrawTransformsAndVisibility would just be the list of surfaces and layers to draw, rather than a list of things that maybe you should be drawing.

I do like this a lot better than the shouldDraw patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487146</commentid>
    <comment_count>31</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-19 17:00:56 -0700</bug_when>
    <thetext>Yeah, I agree it would have been nice.  I went in that direction all the way to the point where I could say with concrete proof that we need a separate pass after calculateDrawTransformsAndVisibility.   There is information that needs to propagate back up the recursion before layers can know whether to be skipped.

If its any consolation, the flow of logic that I&apos;m proposing is:

drawLayersInternal(...)
   1. calculateDrawTransformsAndVisibility
   2. determineWhatToDraw
   3. actually draw stuff.

So, if you want me to associate #1 and #2 into some larger umbrella function, we could do that.  for example:

calculateRenderPasses(...)
   1. calculateDrawTransformsAndVisibility(...)  // recursive
   2. determineWhatToDraw(...)   // post-process that prunes layers further, computes layer visibility and overall scissor.

drawLayersInternal(...)
   1. calculateRenderPasses(...)
   2. for each render pass(...)
        (a) drawRenderPass.

Doing this is just a matter of moving chunks of code into different places, based on the existing patch.  Would this feel cleaner?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487175</commentid>
    <comment_count>32</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-19 17:40:14 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; Yeah, I agree it would have been nice.  I went in that direction all the way to the point where I could say with concrete proof that we need a separate pass after calculateDrawTransformsAndVisibility.   There is information that needs to propagate back up the recursion before layers can know whether to be skipped.

like?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487196</commentid>
    <comment_count>33</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-19 18:21:16 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; (In reply to comment #31)
&gt; &gt; Yeah, I agree it would have been nice.  I went in that direction all the way to the point where I could say with concrete proof that we need a separate pass after calculateDrawTransformsAndVisibility.   There is information that needs to propagate back up the recursion before layers can know whether to be skipped.
&gt; 
&gt; like?

I referred to it in #20...  but I should be more clear =)

The render surface&apos;s content rect depends on each layer&apos;s drawableContentRect.   A layer could be skipped if the surface&apos;s *total* content rect doesn&apos;t intersect the layer&apos;s scissor.   This *total* content rect is not known until the recursion is done (for that render surface&apos;s subtree), at which point layers that fit this condition are no longer in scope and need to be found again in another loop.

We cannot compute this condition with a partial content rect, otherwise we could be skipping the layer when it would have intersected the total content rect and actually needed to draw something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487310</commentid>
    <comment_count>34</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-19 21:37:51 -0700</bug_when>
    <thetext>By the way...

the third condition in the post-process is drawsContent().  I believe this can eventually be moved into the recursive part where its ideal, but I&apos;m still working to figure out why it doesn&apos;t work as expected.  I&apos;ll keep going, but please feel free to suggest that we can address that in a separate patch =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487391</commentid>
    <comment_count>35</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-20 00:48:10 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; (In reply to comment #32)
&gt; &gt; (In reply to comment #31)
&gt; &gt; &gt; Yeah, I agree it would have been nice.  I went in that direction all the way to the point where I could say with concrete proof that we need a separate pass after calculateDrawTransformsAndVisibility.   There is information that needs to propagate back up the recursion before layers can know whether to be skipped.
&gt; &gt; 
&gt; &gt; like?
&gt; 
&gt; I referred to it in #20...  but I should be more clear =)
&gt; 
&gt; The render surface&apos;s content rect depends on each layer&apos;s drawableContentRect.   A layer could be skipped if the surface&apos;s *total* content rect doesn&apos;t intersect the layer&apos;s scissor.   This *total* content rect is not known until the recursion is done (for that render surface&apos;s subtree), at which point layers that fit this condition are no longer in scope and need to be found again in another loop.
&gt; 

Is this an existing early-out condition?  I&apos;m not sure I&apos;m seeing it in the code that handles drawing of the layers. 

&gt; We cannot compute this condition with a partial content rect, otherwise we could be skipping the layer when it would have intersected the total content rect and actually needed to draw something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487679</commentid>
    <comment_count>36</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-20 10:08:45 -0700</bug_when>
    <thetext>
The target surface intersect layer scissor existed in LayerRendererChromium::drawLayer().   It seems to be necessary for correctness, not just optimization, since layout tests fail without it.

The visibility rect existed in only a few specific layer types, and Enne suggested it can be generalized to all layer.

There is one final early exit which I havent touched, but we could eventually.  It is m_skipsDraw that is also only exists for a few specific layer types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488039</commentid>
    <comment_count>37</comment_count>
      <attachid>111881</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-20 17:46:02 -0700</bug_when>
    <thetext>Created attachment 111881
Cleaner and closer to ideal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488043</commentid>
    <comment_count>38</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-20 17:51:24 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; Created an attachment (id=111881) [details]
&gt; Cleaner and closer to ideal.

Hi all, thanks for your patience on this patch.

please note:

I was wrong, it turns out the rect condition is not needed for correctness.  For now that means we can avoid the intermediate loop.   I think that loop may still be necessary for the scissor patch, though.  We&apos;ll deal with it at that time.

Thanks to Enne for discussions and suggestions to debug the drawsContent/mask layer stuff.   If we want to use drawsContent() as an culling condition, then masks needed to be painted and updated with their associated render surface, rather than with their layer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488542</commentid>
    <comment_count>39</comment_count>
      <attachid>111881</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-10-21 11:51:41 -0700</bug_when>
    <thetext>Comment on attachment 111881
Cleaner and closer to ideal.

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

This is looking really good.  I have one small nit.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:316
&gt; +            if (!renderSurfaceLayer-&gt;drawsContent())
&gt; +                paintContentsIfDirty(renderSurfaceLayer-&gt;maskLayer(), IntRect(IntPoint(), renderSurfaceLayer-&gt;contentBounds()));

This conditional seems a bit dodgy.  Are there cases other than !drawsContent() where a masked layer might not draw (opacity), but the render surface that it creates does draw?

I think it&apos;d be safer to always paint masks when we handle their render surface and never paint them when we&apos;re looking at a layer.  (And, same with updateCompositorResources.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488762</commentid>
    <comment_count>40</comment_count>
      <attachid>112043</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-21 16:49:25 -0700</bug_when>
    <thetext>Created attachment 112043
removed dodgy conditions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488764</commentid>
    <comment_count>41</comment_count>
      <attachid>112043</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-21 16:54:34 -0700</bug_when>
    <thetext>Comment on attachment 112043
removed dodgy conditions

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

Looking nice and clean!

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:300
&gt; +        renderSurface-&gt;setSkipsDraw(true);

Do we use the skipsDraw bit anywhere? From a quick look around the code it doesn&apos;t look like we do.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:314
&gt;              continue;

Maybe for a subsequent patch but if we want the set of conditions that could make us skip a RS (no layers, opacity == 0) to stay in sync between painting and drawing, maybe we could do these tests in  calculateDrawTransformsAndVisibilityInternal() and avoid adding the RS layer into the renderSurfaceLayerList.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488779</commentid>
    <comment_count>42</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-21 17:21:50 -0700</bug_when>
    <thetext>(In reply to comment #41)
&gt; (From update of attachment 112043 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=112043&amp;action=review
&gt; 
&gt; Looking nice and clean!
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:300
&gt; &gt; +        renderSurface-&gt;setSkipsDraw(true);
&gt; 
&gt; Do we use the skipsDraw bit anywhere? From a quick look around the code it doesn&apos;t look like we do.

Off the top of my memory, skipsDraw is used from within the render surface drawing itself.  similar skipsDraw are hidden inside specific layer types, so for now I did not pull them out.


&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:314
&gt; &gt;              continue;
&gt; 
&gt; Maybe for a subsequent patch but if we want the set of conditions that could make us skip a RS (no layers, opacity == 0) to stay in sync between painting and drawing, maybe we could do these tests in  calculateDrawTransformsAndVisibilityInternal() and avoid adding the RS layer into the renderSurfaceLayerList.


Certainly agreed!  I&apos;ll spur a separate discussion on additional refactoring soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488783</commentid>
    <comment_count>43</comment_count>
      <attachid>112043</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-10-21 17:29:59 -0700</bug_when>
    <thetext>Comment on attachment 112043
removed dodgy conditions

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:381
&gt; +        // The same is true for the render surface&apos;s replica layer as well.

Can you explain the inconsistency between paint and upload here, i.e. handle only masks early during painting but masks and replica masks early during upload.

(Should we be handling all masks, replicas, and replica masks when we handle the layer associated with the surface?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488797</commentid>
    <comment_count>44</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-21 17:51:31 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; (From update of attachment 112043 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=112043&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:381
&gt; &gt; +        // The same is true for the render surface&apos;s replica layer as well.
&gt; 
&gt; Can you explain the inconsistency between paint and upload here, i.e. handle only masks early during painting but masks and replica masks early during upload.
&gt; 
&gt; (Should we be handling all masks, replicas, and replica masks when we handle the layer associated with the surface?)

The inconsistency probably does not need to exist.  Should be straightforward to fix.  Please note that this will probably warrant restructuring a few functions, too, so I&apos;ll go ahead and do that, too. =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488853</commentid>
    <comment_count>45</comment_count>
      <attachid>112068</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-21 21:09:25 -0700</bug_when>
    <thetext>Created attachment 112068
cleaned up a lot more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488855</commentid>
    <comment_count>46</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-21 21:13:56 -0700</bug_when>
    <thetext>(In reply to comment #45)
&gt; Created an attachment (id=112068) [details]
&gt; cleaned up a lot more

So this time I went ahead and scrubbed and polished all the code that this patch was touching.
Here is a summary of the patch:

- same LayerRendererChromium refactoring as before

- there was some existing redundant code that I would have needed to duplicate yet again, with &quot;targetSurfaceRect&quot; and &quot;visibleLayerRect&quot;.  So I folded all that into the CCLayerTreeHostCommon::computeVisibleLayerRect function.

- in the CCLayerTreeHost, isolated mask and replica painting/updating into their own clean functions.

- was now able to remove some of the early exit conditions from the LayerChromium side, since they&apos;re now in the common place.

I&apos;m happy to adjust anything that&apos;s already done.  If there is any additional cleanup we should do related to this refactor, then could we please create a new bug and assign it to me instead?

FYI, this patch seemed to increase flakiness of &quot;compositing/reflections/nested-reflection-animated.html&quot;.  However that test was already labeled explicitly as being flaky, so I still feel confident about the changes in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489199</commentid>
    <comment_count>47</comment_count>
      <attachid>112068</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-23 23:21:36 -0700</bug_when>
    <thetext>Comment on attachment 112068
cleaned up a lot more

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:367
&gt; +void CCLayerTreeHost::updateMaskResourcesForRenderSurface(LayerChromium* renderSurfaceLayer, GraphicsContext3D* context, TextureAllocator* allocator)

I would recommend folding this method into updateCompositorResources. I don&apos;t see much of a use to be separate.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:68
&gt; +    IntRect targetSurfaceRect = layer-&gt;targetRenderSurface()-&gt;contentRect();

paintLayerContents had some logic about using the defaultContentRect instead of the targetRenderSurface rect. Why is it no longer necessary?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:93
&gt; +IntRect CCLayerTreeHostCommon::calculateVisibleLayerRect(LayerChromium* layer)

Can you use a template to define both these methods?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:113
&gt; +bool layerShouldBeAppended(LayerType* layer)

nit: Not a big fan of the name for this method as &quot;appended&quot; makes only sense in the context of the current caller.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489200</commentid>
    <comment_count>48</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-23 23:24:19 -0700</bug_when>
    <thetext>&gt; FYI, this patch seemed to increase flakiness of &quot;compositing/reflections/nested-reflection-animated.html&quot;.  However that test was already labeled explicitly as being flaky, so I still feel confident about the changes in this patch.

Is the output of this test correct when you run it in the browser?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489355</commentid>
    <comment_count>49</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-10-24 09:05:31 -0700</bug_when>
    <thetext>(In reply to comment #48)
&gt; &gt; FYI, this patch seemed to increase flakiness of &quot;compositing/reflections/nested-reflection-animated.html&quot;.  However that test was already labeled explicitly as being flaky, so I still feel confident about the changes in this patch.
&gt; 
&gt; Is the output of this test correct when you run it in the browser?

This test is pretty flaky, especially in debug mode.  If this is the only test that&apos;s failing, I&apos;m not worried about correctness issues.  I think the replica code that it&apos;s testing is also tested in a number of other tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489466</commentid>
    <comment_count>50</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-24 11:24:02 -0700</bug_when>
    <thetext>
Yes the animation of that test looks the same as a stable build of chrome.
 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:68
&gt; &gt; +    IntRect targetSurfaceRect = layer-&gt;targetRenderSurface()-&gt;contentRect();
&gt; 
&gt; paintLayerContents had some logic about using the defaultContentRect instead of the targetRenderSurface rect. Why is it no longer necessary?

calculateDrawTransformsAndVisibility was always setting the targetRenderSurface for all layers.  The &quot;default&quot; case would have never been hit (this is verified by that assert statement).


&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:113
&gt; &gt; +bool layerShouldBeAppended(LayerType* layer)
&gt; 
&gt; nit: Not a big fan of the name for this method as &quot;appended&quot; makes only sense in the context of the current caller.

I would prefer not to say &quot;layerShouldBeDrawn&quot;, because not all layers that return true will actually be drawn.

How about layerCanBeSkipped and I&apos;ll invert the boolean logic?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489488</commentid>
    <comment_count>51</comment_count>
      <attachid>112219</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-24 11:46:52 -0700</bug_when>
    <thetext>Created attachment 112219
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489562</commentid>
    <comment_count>52</comment_count>
      <attachid>112219</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-10-24 13:22:42 -0700</bug_when>
    <thetext>Comment on attachment 112219
Patch

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

So close.  Thank you again for taking the time to clean up the surrounding code with this patch.  :)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:382
&gt; +        if (renderSurfaceLayer-&gt;maskLayer())
&gt; +            updateCompositorResources(renderSurfaceLayer-&gt;maskLayer(), context, allocator);
&gt; +        
&gt; +        if (renderSurfaceLayer-&gt;replicaLayer() &amp;&amp; renderSurfaceLayer-&gt;replicaLayer()-&gt;maskLayer())
&gt; +            updateCompositorResources(renderSurfaceLayer-&gt;replicaLayer()-&gt;maskLayer(), context, allocator);
&gt; +        

Unless I&apos;m misreading, I think you&apos;re missing updateCompositorResources(renderSurfaceLayer-&gt;replicaLayer(), context, allocator).  updateCompositorResources used to be recursive before this change and so would hit this case.

(Maybe we don&apos;t have a test for a replica layer where the replica layer itself doesn&apos;t draw?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489574</commentid>
    <comment_count>53</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-24 13:36:25 -0700</bug_when>
    <thetext>(In reply to comment #52)
&gt; (From update of attachment 112219 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=112219&amp;action=review
&gt; 
&gt; So close.  Thank you again for taking the time to clean up the surrounding code with this patch.  :)
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:382
&gt; &gt; +        if (renderSurfaceLayer-&gt;maskLayer())
&gt; &gt; +            updateCompositorResources(renderSurfaceLayer-&gt;maskLayer(), context, allocator);
&gt; &gt; +        
&gt; &gt; +        if (renderSurfaceLayer-&gt;replicaLayer() &amp;&amp; renderSurfaceLayer-&gt;replicaLayer()-&gt;maskLayer())
&gt; &gt; +            updateCompositorResources(renderSurfaceLayer-&gt;replicaLayer()-&gt;maskLayer(), context, allocator);
&gt; &gt; +        
&gt; 
&gt; Unless I&apos;m misreading, I think you&apos;re missing updateCompositorResources(renderSurfaceLayer-&gt;replicaLayer(), context, allocator).  updateCompositorResources used to be recursive before this change and so would hit this case.
&gt; 
&gt; (Maybe we don&apos;t have a test for a replica layer where the replica layer itself doesn&apos;t draw?)

(1) Actually the existing code before this patch also did not have that call.

(2) As I understand, a CCRenderSurface, when it draws, will also draw the replicaLayer with the exact same texture, just with a different transform.  So, as of now there are no &quot;resources&quot; for a replica to update.

(3) FYI there is a related FIXME in CCRenderSurface::draw, that is related to your question.

So would it be OK if we addressed this awkwardness in a different bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489577</commentid>
    <comment_count>54</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-24 13:39:21 -0700</bug_when>
    <thetext>foot in mouth.

I&apos;ll fix it =)

Its worth noting that this did not fail layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489631</commentid>
    <comment_count>55</comment_count>
      <attachid>112244</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-24 14:12:03 -0700</bug_when>
    <thetext>Created attachment 112244
added updateCompositorResources for replica</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489636</commentid>
    <comment_count>56</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-10-24 14:18:36 -0700</bug_when>
    <thetext>Thanks.  That last patch unofficially looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489642</commentid>
    <comment_count>57</comment_count>
      <attachid>112244</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-24 14:27:15 -0700</bug_when>
    <thetext>Comment on attachment 112244
added updateCompositorResources for replica

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

R=me

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:395
&gt; +        TRACE_EVENT(&quot;LayerRendererChromium::drawLayersInternal::drawLayersOntoRenderSurfaces&quot;, this, 0);

nit: since this is now a helper function you can just move the trace into the function body and avoid having to make this extra scope

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:402
&gt; +    // For masks and repliacs however, we may still need to check them here.

typo &apos;repliacs&apos; -&gt; &apos;replicas&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489669</commentid>
    <comment_count>58</comment_count>
      <attachid>112256</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-24 14:54:16 -0700</bug_when>
    <thetext>Created attachment 112256
fixed last two suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489672</commentid>
    <comment_count>59</comment_count>
      <attachid>112257</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-24 14:57:10 -0700</bug_when>
    <thetext>Created attachment 112257
fixed last two suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489766</commentid>
    <comment_count>60</comment_count>
      <attachid>112257</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-24 16:44:21 -0700</bug_when>
    <thetext>Comment on attachment 112257
fixed last two suggestions

Rockin&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489815</commentid>
    <comment_count>61</comment_count>
      <attachid>112257</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-24 17:51:06 -0700</bug_when>
    <thetext>Comment on attachment 112257
fixed last two suggestions

Rejecting attachment 112257 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
, check),
  File &quot;/mnt/git/webkit-commit-queue/Source/WebKit/chromium/tools/gyp/pylib/gyp/input.py&quot;, line 218, in LoadOneBuildFile
    None)
  File &quot;WebKit.gypi&quot;, line 103
    &apos;tests/ScrollAnimatorNoneTest.cpp&apos;,
                                      ^
SyntaxError: invalid syntax
Error: &apos;depot_tools/gclient sync&apos; failed 3 tries and returned 512 at Tools/Scripts/update-webkit-chromium line 107.
Re-trying &apos;depot_tools/gclient sync&apos;
No such file or directory at Tools/Scripts/update-webkit line 104.

Full output: http://queues.webkit.org/results/10211026</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489830</commentid>
    <comment_count>62</comment_count>
      <attachid>112257</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-10-24 18:46:11 -0700</bug_when>
    <thetext>Comment on attachment 112257
fixed last two suggestions

Sorry for the mess, the cq should be back on track now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489854</commentid>
    <comment_count>63</comment_count>
      <attachid>112257</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-24 19:53:32 -0700</bug_when>
    <thetext>Comment on attachment 112257
fixed last two suggestions

Clearing flags on attachment: 112257

Committed r98313: &lt;http://trac.webkit.org/changeset/98313&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489855</commentid>
    <comment_count>64</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-24 19:53:40 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110911</attachid>
            <date>2011-10-13 14:47:56 -0700</date>
            <delta_ts>2011-10-19 11:14:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70057-20111013144755.patch</filename>
            <type>text/plain</type>
            <size>15470</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTczNTIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwZjBjNjMzYWM5MGUyZmVj
YjYxMzE1MzE5NDQ2ZDZiNTUyODIzZjIwLi42NzczZDYzNTdlOTNmOTRiODY0MmExNWYxN2VkMDQx
YjBiYzUzOGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMTAtMTMgIFNoYXdu
IFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBS
ZWZhY3RvciBMYXllclJlbmRlcmVyQ2hyb21pdW0gZHJhd2luZyBjb2RlLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAwNTcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHJlZmFjdG9yaW5nIGlzIHBh
cnQgb2YgbWFraW5nIExheWVyUmVuZGVyZXJDaHJvbWl1bSBlYXNpZXIgdG8KKyAgICAgICAgdGVz
dCBhbmQgY2xlYW5lciBpbiBnZW5lcmFsLiBFeGlzdGluZyBsYXlvdXQgdGVzdHMgd2VyZSBhYmxl
IHRvCisgICAgICAgIHZlcmlmeSB0aGUgcmVmYWN0b3JpbmcgZGlkIG5vdCBjaGFuZ2UgYmVoYXZp
b3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3TGF5ZXJzSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkZXRlcm1pbmVXaGF0VG9EcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzaG91bGREcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJJbXBsOjpzZXRTaG91bGREcmF3KToKKwogMjAxMS0xMC0xMyAgS2VudCBUYW11cmEgIDx0
a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUkVHUkVTU0lPTihyODk5MTUpOiA8aW5wdXQg
dHlwZT1lbWFpbCBtdWx0aXBsZT4gZG9uJ3Qgc2hvdyB0aGUgZGVmYXVsdCB2YWx1ZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggYzUyNWMxZDIzZWJmNjQ3ODg1MzI4
ODIyNzJkODgyMmFmNWNhNjdjMC4uMzJhYjBmODMzMDQ5MzFlYTA2OTE4ZWVhNTcxOWVmNTNlMDhk
ODYwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC0zMDQsMjgg
KzMwNCwxMTYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNJbnRlcm5h
bCgpCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhp
Y3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEp
KTsKICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CiAKLSAgICAvLyBVcGRhdGUgdGhlIGNvbnRlbnRzIG9m
IHRoZSByZW5kZXIgc3VyZmFjZXMuIFdlIHRyYXZlcnNlIHRoZSBhcnJheSBmcm9tCi0gICAgLy8g
YmFjayB0byBmcm9udCB0byBndWFyYW50ZWUgdGhhdCBuZXN0ZWQgcmVuZGVyIHN1cmZhY2VzIGdl
dCByZW5kZXJlZCBpbiB0aGUKLSAgICAvLyBjb3JyZWN0IG9yZGVyLgorICAgIGRldGVybWluZVdo
YXRUb0RyYXcocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisKKyAgICB7CisgICAgICAgIFRSQUNF
X0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNJbnRlcm5hbDo6ZHJhd0xh
eWVyc09udG9SZW5kZXJTdXJmYWNlcyIsIHRoaXMsIDApOworICAgICAgICBkcmF3TGF5ZXJzT250
b1JlbmRlclN1cmZhY2VzKHJvb3REcmF3TGF5ZXIsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwor
ICAgIH0KKworICAgIGlmIChtX2hlYWRzVXBEaXNwbGF5LT5lbmFibGVkKCkpIHsKKyAgICAgICAg
R0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OkJMRU5EKSk7CisgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+YmxlbmRG
dW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNf
U1JDX0FMUEhBKSk7CisgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlz
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CisgICAgICAgIHVzZVJlbmRl
clN1cmZhY2UobV9kZWZhdWx0UmVuZGVyU3VyZmFjZSk7CisgICAgICAgIG1faGVhZHNVcERpc3Bs
YXktPmRyYXcoKTsKKyAgICB9CisKKyAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQt
PmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOworICAgIEdMQyhtX2Nv
bnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQp
KTsKK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRldGVybWluZVdoYXRUb0RyYXco
Y29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCit7CiAgICAgZm9yIChp
bnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAxOyBzdXJm
YWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7CiAgICAgICAgIENDTGF5ZXJJbXBsKiBy
ZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0u
Z2V0KCk7CiAgICAgICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1
cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOwogICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFj
ZSk7CiAKLSAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0U2tpcHNEcmF3KHRydWUpOwotCi0gICAg
ICAgIC8vIFJlbmRlciBzdXJmYWNlcyB3aG9zZSBkcmF3YWJsZSBhcmVhIGhhcyB6ZXJvIHdpZHRo
IG9yIGhlaWdodAotICAgICAgICAvLyB3aWxsIGhhdmUgbm8gbGF5ZXJzIGFzc29jaWF0ZWQgd2l0
aCB0aGVtIGFuZCBzaG91bGQgYmUgc2tpcHBlZC4KLSAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNl
LT5sYXllckxpc3QoKS5zaXplKCkpCisgICAgICAgIC8vIFJlbmRlciBzdXJmYWNlcyBzaG91bGQg
YmUgc2tpcHBlZCBpZiBhbnkgb2YgdGhlc2UgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgICAgICAv
LyAgIC0gZHJhd2FibGUgYXJlYSBoYXMgemVybyB3aWR0aCBvciBoZWlnaHQgKGkuZS4gd2lsbCBo
YXZlIG5vIGxheWVycyBhc3NvY2lhdGVkIHdpdGggaXQpCisgICAgICAgIC8vICAgLSBjb21wbGV0
ZWx5IHRyYW5zcGFyZW50CisgICAgICAgIGlmICghcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCku
c2l6ZSgpIHx8ICFyZW5kZXJTdXJmYWNlLT5kcmF3T3BhY2l0eSgpKSB7CisgICAgICAgICAgICBy
ZW5kZXJTdXJmYWNlLT5zZXRTa2lwc0RyYXcodHJ1ZSk7CiAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldFNraXBzRHJhdyhmYWxzZSk7
CisKKyAgICAgICAgY29uc3QgQ0NMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2Ut
PmxheWVyTGlzdCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXll
ckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KSB7CisgICAgICAgICAgICBD
Q0xheWVySW1wbCogbGF5ZXIgPSBsYXllckxpc3RbbGF5ZXJJbmRleF0uZ2V0KCk7CisKKyAgICAg
ICAgICAgIC8vIElmIHRoZSBsYXllciBvd25zIGEgZGlmZmVyZW50IHJlbmRlciBzdXJmYWNlLCB0
aGVuIHdlIHdvdWxkIGJlIGRyYXdpbmcgdGhlIHJlbmRlciBzdXJmYWNlIGluc3RlYWQgb2YgdGhl
CisgICAgICAgICAgICAvLyBsYXllci4gU28gaW4gdGhpcyBjYXNlLCB0aGlzIGxheWVyIHNob3Vs
ZCBub3QgYmUgbW9kaWZpZWQgaGVyZTsgaXQgZ2V0cyBtb2RpZmllZCB3aGVuIGl0ZXJhdGluZyBv
dmVyIHRoYXQKKyAgICAgICAgICAgIC8vIGxheWVyJ3MgcmVuZGVyIHN1cmZhY2UuCisgICAgICAg
ICAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllci0+cmVuZGVyU3VyZmFjZSgp
ICE9IHJlbmRlclN1cmZhY2UpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgIC8vIExheWVycyBjYW4gYmUgc2tpcHBlZCBpZiBhbnkgb2YgdGhlc2UgY29uZGl0aW9ucyBh
cmUgbWV0OgorICAgICAgICAgICAgLy8gICAtIGRvZXMgbm90IGRyYXcgY29udGVudCAoYmV3YXJl
IHRoYXQgZHJhd3NDb250ZW50KCkgdmFyaWVzIGZvciBlYWNoIGxheWVyIHR5cGUpCisgICAgICAg
ICAgICAvLyAgIC0gaXMgdHJhbnNwYXJlbnQKKyAgICAgICAgICAgIC8vICAgLSBoYXMgZW1wdHkg
Ym91bmRzCisgICAgICAgICAgICAvLyAgIC0gdGhlIGludGVyc2VjdGlvbiBvZiBjb250ZW50IGFu
ZCBzY2lzc29yIGlzIGVtcHR5CisgICAgICAgICAgICAvLyAgIC0gdGhlIHZpc2libGVMYXllclJl
Y3QgaXMgZW1wdHkKKyAgICAgICAgICAgIC8vICAgLSB0aGUgbGF5ZXIgaXMgbm90IGRvdWJsZS1z
aWRlZCwgYnV0IGl0cyBiYWNrIGZhY2UgaXMgdmlzaWJsZS4KKworICAgICAgICAgICAgLy8gU3Rh
cnQgYnkgYXNzdW1pbmcgdGhhdCB3ZSB3aWxsIGhpdCBvbmUgb2YgdGhlc2UgY29uZGl0aW9ucy4K
KyAgICAgICAgICAgIGxheWVyLT5zZXRTaG91bGREcmF3KGZhbHNlKTsKKworICAgICAgICAgICAg
aWYgKCFsYXllci0+ZHJhd3NDb250ZW50KCkgfHwgIWxheWVyLT5vcGFjaXR5KCkgfHwgbGF5ZXIt
PmJvdW5kcygpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgSW50UmVjdCB0YXJnZXRTdXJmYWNlUmVjdCA9IGxheWVyLT50YXJnZXRSZW5kZXJTdXJm
YWNlKCkgPyBsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpIDogbV9k
ZWZhdWx0UmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKTsKKyAgICAgICAgICAgIGlmIChsYXll
ci0+dXNlc0xheWVyU2Npc3NvcigpKSB7CisgICAgICAgICAgICAgICAgSW50UmVjdCBzY2lzc29y
UmVjdCA9IGxheWVyLT5zY2lzc29yUmVjdCgpOworICAgICAgICAgICAgICAgIHRhcmdldFN1cmZh
Y2VSZWN0LmludGVyc2VjdChzY2lzc29yUmVjdCk7CisgICAgICAgICAgICAgICAgaWYgKHRhcmdl
dFN1cmZhY2VSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdoaWxlIGNoZWNraW5nIHRoaXMgc2tpcHBp
bmcgY29uZGl0aW9uLCB3ZSBhbHNvIHNldCB0aGUgbGF5ZXIncyB2aXNpYmxlTGF5ZXJSZWN0Lgor
ICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0KHRhcmdldFN1cmZhY2VSZWN0LCBsYXllci0+
Ym91bmRzKCksIGxheWVyLT5jb250ZW50Qm91bmRzKCksIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkp
OworICAgICAgICAgICAgdmlzaWJsZUxheWVyUmVjdC5tb3ZlKHRvU2l6ZShsYXllci0+c2Nyb2xs
UG9zaXRpb24oKSkpOworICAgICAgICAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3Qodmlz
aWJsZUxheWVyUmVjdCk7CisgICAgICAgICAgICBpZiAodmlzaWJsZUxheWVyUmVjdC5pc0VtcHR5
KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIFRoZSBsYXll
ciBzaG91bGQgbm90IGJlIGRyYXduIGlmICgxKSBpdCBpcyBub3QgZG91YmxlLXNpZGVkIGFuZCAo
MikgdGhlIGJhY2sgb2YgdGhlIGxheWVyIGlzIGZhY2luZyB0aGUgc2NyZWVuLgorICAgICAgICAg
ICAgLy8gVGhpcyBzZWNvbmQgY29uZGl0aW9uIGlzIGNoZWNrZWQgYnkgY29tcHV0aW5nIHRoZSB0
cmFuc2Zvcm1lZCBub3JtYWwgb2YgdGhlIGxheWVyLgorICAgICAgICAgICAgaWYgKCFsYXllci0+
ZG91YmxlU2lkZWQoKSkgeworICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBsYXllclJlY3QoRmxv
YXRQb2ludCgwLCAwKSwgRmxvYXRTaXplKGxheWVyLT5ib3VuZHMoKSkpOworICAgICAgICAgICAg
ICAgIEZsb2F0UXVhZCBtYXBwZWRMYXllciA9IGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgp
Lm1hcFF1YWQoRmxvYXRRdWFkKGxheWVyUmVjdCkpOworICAgICAgICAgICAgICAgIEZsb2F0U2l6
ZSBob3Jpem9udGFsRGlyID0gbWFwcGVkTGF5ZXIucDIoKSAtIG1hcHBlZExheWVyLnAxKCk7Cisg
ICAgICAgICAgICAgICAgRmxvYXRTaXplIHZlcnRpY2FsRGlyID0gbWFwcGVkTGF5ZXIucDQoKSAt
IG1hcHBlZExheWVyLnAxKCk7CisgICAgICAgICAgICAgICAgRmxvYXRQb2ludDNEIHhBeGlzKGhv
cml6b250YWxEaXIud2lkdGgoKSwgaG9yaXpvbnRhbERpci5oZWlnaHQoKSwgMCk7CisgICAgICAg
ICAgICAgICAgRmxvYXRQb2ludDNEIHlBeGlzKHZlcnRpY2FsRGlyLndpZHRoKCksIHZlcnRpY2Fs
RGlyLmhlaWdodCgpLCAwKTsKKyAgICAgICAgICAgICAgICBGbG9hdFBvaW50M0QgekF4aXMgPSB4
QXhpcy5jcm9zcyh5QXhpcyk7CisgICAgICAgICAgICAgICAgaWYgKHpBeGlzLnooKSA8IDApCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBJZiB3ZSBoYXZlIHJlYWNoZWQgdGhpcyBwb2ludCwgdGhlIGxheWVyIHNob3VsZCBiZSBk
cmF3bi4KKyAgICAgICAgICAgIGxheWVyLT5zZXRTaG91bGREcmF3KHRydWUpOworICAgICAgICB9
CisgICAgfQorfQorCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc09udG9S
ZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NMYXllckxp
c3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCit7CisgICAgLy8gRHJhdyBsYXllciBjb250ZW50
cyBpbnRvIHRoZSByZW5kZXIgc3VyZmFjZXMuIFdlIHRyYXZlcnNlIHRoZSBhcnJheSBmcm9tCisg
ICAgLy8gYmFjayB0byBmcm9udCB0byBndWFyYW50ZWUgdGhhdCBuZXN0ZWQgcmVuZGVyIHN1cmZh
Y2VzIGdldCByZW5kZXJlZCBpbiB0aGUKKyAgICAvLyBjb3JyZWN0IG9yZGVyLgorICAgIGZvciAo
aW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0gMTsgc3Vy
ZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgeworICAgICAgICBDQ0xheWVySW1wbCog
cmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhd
LmdldCgpOworICAgICAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSByZW5kZXJT
dXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKyAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZh
Y2UpOwogCi0gICAgICAgIC8vIFNraXAgY29tcGxldGVseSB0cmFuc3BhcmVudCByZW5kZXIgc3Vy
ZmFjZXMuCi0gICAgICAgIGlmICghcmVuZGVyU3VyZmFjZS0+ZHJhd09wYWNpdHkoKSkKKyAgICAg
ICAgaWYgKHJlbmRlclN1cmZhY2UtPnNraXBzRHJhdygpKQogICAgICAgICAgICAgY29udGludWU7
CiAKKyAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSB2YWx1ZSBvZiBza2lwc0RyYXcoKSBmb3IgdGhl
IHJlbmRlclN1cmZhY2UgbWF5IGNoYW5nZSBpbnNpZGUgb2YgdXNlUmVuZGVyU3VyZmFjZSgpLgog
ICAgICAgICBpZiAodXNlUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKSkgewotICAgICAgICAg
ICAgcmVuZGVyU3VyZmFjZS0+c2V0U2tpcHNEcmF3KGZhbHNlKTsKLQogICAgICAgICAgICAgaWYg
KHJlbmRlclN1cmZhY2VMYXllciAhPSByb290RHJhd0xheWVyKSB7CiAgICAgICAgICAgICAgICAg
R0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNE
OjpTQ0lTU09SX1RFU1QpKTsKICAgICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBt
X2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCkpOwpAQCAtMzM0LDIxICs0MjIsMzAgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNJbnRlcm5hbCgpCiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGNvbnN0IENDTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5k
ZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJ
bmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpCi0g
ICAgICAgICAgICAgICAgZHJhd0xheWVyKGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKSwgcmVu
ZGVyU3VyZmFjZSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXllcklu
ZGV4KSB7CisgICAgICAgICAgICAgICAgQ0NMYXllckltcGwqIGxheWVyID0gbGF5ZXJMaXN0W2xh
eWVySW5kZXhdLmdldCgpOwogCi0gICAgaWYgKG1faGVhZHNVcERpc3BsYXktPmVuYWJsZWQoKSkg
ewotICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkQpKTsKLSAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250
ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6
Ok9ORV9NSU5VU19TUkNfQUxQSEEpKTsKLSAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9j
b250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKLSAgICAg
ICAgdXNlUmVuZGVyU3VyZmFjZShtX2RlZmF1bHRSZW5kZXJTdXJmYWNlKTsKLSAgICAgICAgbV9o
ZWFkc1VwRGlzcGxheS0+ZHJhdygpOwotICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobGF5ZXIt
PnJlbmRlclN1cmZhY2UoKSAmJiBsYXllci0+cmVuZGVyU3VyZmFjZSgpICE9IHJlbmRlclN1cmZh
Y2UpIHsKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+ZHJhdyh0
aGlzLCBsYXllci0+Z2V0RHJhd1JlY3QoKSk7CisgICAgICAgICAgICAgICAgICAgIGxheWVyLT5y
ZW5kZXJTdXJmYWNlKCktPnJlbGVhc2VDb250ZW50c1RleHR1cmUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQogCi0gICAgR0xDKG1fY29udGV4dC5n
ZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1Qp
KTsKLSAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OkJMRU5EKSk7CisgICAgICAgICAgICAgICAgaWYgKCFsYXllci0+c2hvdWxkRHJh
dygpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGlm
IChsYXllci0+dXNlc0xheWVyU2Npc3NvcigpKQorICAgICAgICAgICAgICAgICAgICBzZXRTY2lz
c29yVG9SZWN0KGxheWVyLT5zY2lzc29yUmVjdCgpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJs
ZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CisKKyAgICAgICAgICAgICAgICBs
YXllci0+ZHJhdyh0aGlzKTsKKworICAgICAgICAgICAgICAgIC8vIERyYXcgdGhlIGRlYnVnIGJv
cmRlciBpZiB0aGVyZSBpcyBvbmUuCisgICAgICAgICAgICAgICAgbGF5ZXItPmRyYXdEZWJ1Z0Jv
cmRlcih0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIH0KIAogdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OnRvR0xNYXRyaXgoZmxvYXQqIGZsYXR0ZW5lZCwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG0pCkBAIC01MDcsNTcgKzYwNCw2IEBAIGJvb2wgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp1c2VSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFjZSogcmVuZGVy
U3VyZmFjZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdMYXllcihDQ0xheWVySW1wbCogbGF5ZXIsIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0
U3VyZmFjZSkKLXsKLSAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllci0+cmVu
ZGVyU3VyZmFjZSgpICE9IHRhcmdldFN1cmZhY2UpIHsKLSAgICAgICAgbGF5ZXItPnJlbmRlclN1
cmZhY2UoKS0+ZHJhdyh0aGlzLCBsYXllci0+Z2V0RHJhd1JlY3QoKSk7Ci0gICAgICAgIGxheWVy
LT5yZW5kZXJTdXJmYWNlKCktPnJlbGVhc2VDb250ZW50c1RleHR1cmUoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmICghbGF5ZXItPmRyYXdzQ29udGVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoIWxheWVyLT5vcGFjaXR5KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChsYXllci0+Ym91bmRzKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBJbnRSZWN0IHRhcmdldFN1cmZhY2VSZWN0ID0gbGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2Uo
KSA/IGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkgOiBtX2RlZmF1
bHRSZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpOwotICAgIGlmIChsYXllci0+dXNlc0xheWVy
U2Npc3NvcigpKSB7Ci0gICAgICAgIEludFJlY3Qgc2Npc3NvclJlY3QgPSBsYXllci0+c2Npc3Nv
clJlY3QoKTsKLSAgICAgICAgdGFyZ2V0U3VyZmFjZVJlY3QuaW50ZXJzZWN0KHNjaXNzb3JSZWN0
KTsKLSAgICAgICAgaWYgKHRhcmdldFN1cmZhY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgc2V0U2Npc3NvclRvUmVjdChzY2lzc29yUmVjdCk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7Ci0KLSAgICBJbnRSZWN0IHZpc2libGVMYXll
clJlY3QgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVMYXllclJlY3Qo
dGFyZ2V0U3VyZmFjZVJlY3QsIGxheWVyLT5ib3VuZHMoKSwgbGF5ZXItPmNvbnRlbnRCb3VuZHMo
KSwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgdmlzaWJsZUxheWVyUmVjdC5tb3ZlKHRv
U2l6ZShsYXllci0+c2Nyb2xsUG9zaXRpb24oKSkpOwotICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5
ZXJSZWN0KHZpc2libGVMYXllclJlY3QpOwotCi0gICAgLy8gVGhlIGxheWVyIHNob3VsZCBub3Qg
YmUgZHJhd24gaWYgKDEpIGl0IGlzIG5vdCBkb3VibGUtc2lkZWQgYW5kICgyKSB0aGUgYmFjayBv
ZiB0aGUgbGF5ZXIgaXMgZmFjaW5nIHRoZSBzY3JlZW4uCi0gICAgLy8gVGhpcyBzZWNvbmQgY29u
ZGl0aW9uIGlzIGNoZWNrZWQgYnkgY29tcHV0aW5nIHRoZSB0cmFuc2Zvcm1lZCBub3JtYWwgb2Yg
dGhlIGxheWVyLgotICAgIGlmICghbGF5ZXItPmRvdWJsZVNpZGVkKCkpIHsKLSAgICAgICAgRmxv
YXRSZWN0IGxheWVyUmVjdChGbG9hdFBvaW50KDAsIDApLCBGbG9hdFNpemUobGF5ZXItPmJvdW5k
cygpKSk7Ci0gICAgICAgIEZsb2F0UXVhZCBtYXBwZWRMYXllciA9IGxheWVyLT5zY3JlZW5TcGFj
ZVRyYW5zZm9ybSgpLm1hcFF1YWQoRmxvYXRRdWFkKGxheWVyUmVjdCkpOwotICAgICAgICBGbG9h
dFNpemUgaG9yaXpvbnRhbERpciA9IG1hcHBlZExheWVyLnAyKCkgLSBtYXBwZWRMYXllci5wMSgp
OwotICAgICAgICBGbG9hdFNpemUgdmVydGljYWxEaXIgPSBtYXBwZWRMYXllci5wNCgpIC0gbWFw
cGVkTGF5ZXIucDEoKTsKLSAgICAgICAgRmxvYXRQb2ludDNEIHhBeGlzKGhvcml6b250YWxEaXIu
d2lkdGgoKSwgaG9yaXpvbnRhbERpci5oZWlnaHQoKSwgMCk7Ci0gICAgICAgIEZsb2F0UG9pbnQz
RCB5QXhpcyh2ZXJ0aWNhbERpci53aWR0aCgpLCB2ZXJ0aWNhbERpci5oZWlnaHQoKSwgMCk7Ci0g
ICAgICAgIEZsb2F0UG9pbnQzRCB6QXhpcyA9IHhBeGlzLmNyb3NzKHlBeGlzKTsKLSAgICAgICAg
aWYgKHpBeGlzLnooKSA8IDApCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbGF5
ZXItPmRyYXcodGhpcyk7Ci0KLSAgICAvLyBEcmF3IHRoZSBkZWJ1ZyBib3JkZXIgaWYgdGhlcmUg
aXMgb25lLgotICAgIGxheWVyLT5kcmF3RGVidWdCb3JkZXIodGhpcyk7Ci19Ci0KIC8vIFNldHMg
dGhlIHNjaXNzb3IgcmVnaW9uIHRvIHRoZSBnaXZlbiByZWN0YW5nbGUuIFRoZSBjb29yZGluYXRl
IHN5c3RlbSBmb3IgdGhlCiAvLyBzY2lzc29yUmVjdCBoYXMgaXRzIG9yaWdpbiBhdCB0aGUgdG9w
IGxlZnQgY29ybmVyIG9mIHRoZSBjdXJyZW50IHZpc2libGUgcmVjdC4KIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpzZXRTY2lzc29yVG9SZWN0KGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCAwZmQ4OTY1ZTMzNWRkMDIy
OWFkNGU5NGI2MDBiM2RlNWM2YmQ2MmEwLi4yMmEwMzk1ZGNmZGNmMGM2YzZjZmMzYWQ5NTVjYzcy
ZDcyNjYzNzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtMTU5LDcg
KzE1OSwxMSBAQCBwcml2YXRlOgogICAgIGJvb2wgaW5pdGlhbGl6ZSgpOwogCiAgICAgdm9pZCBk
cmF3TGF5ZXJzSW50ZXJuYWwoKTsKLSAgICB2b2lkIGRyYXdMYXllcihDQ0xheWVySW1wbCosIEND
UmVuZGVyU3VyZmFjZSopOworICAgIHZvaWQgZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyhD
Q0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QpOworCisgICAgLy8gRm9yIGFsbCBsYXllcnMgYW5kIHJlbmRlciBzdXJmYWNl
cywgZGVjaWRlcyB3aGV0aGVyIHRoZSBsYXllci9zdXJmYWNlIHNob3VsZCBiZSBza2lwcGVkIG9y
IGRyYXduCisgICAgLy8gYW5kIGNvbXB1dGVzIHZpc2libGVMYXllclJlY3Qgb2YgdGhlIGxheWVy
LgorICAgIHZvaWQgZGV0ZXJtaW5lV2hhdFRvRHJhdyhjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCk7CiAKICAgICBNYW5hZ2VkVGV4dHVyZSogZ2V0T2Zmc2NyZWVuTGF5
ZXJUZXh0dXJlKCk7CiAgICAgdm9pZCBjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggMTViZTc1MTU2Yzc3ODAwMTQ0OThkYjZlNDc4YWQ2MzY3
MDhkOGI2MC4uYWNlZmVhZWExMTcxYmU0M2Y5MzQyMzlmNzRlOGNiNmZmMjIyNjE3ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5oCkBAIC0xNjMsNiArMTYzLDkgQEAgcHVibGljOgogICAgIC8vIFJldHVy
bnMgdGhlIHJlY3QgY29udGFpbnRhaW5pbmcgdGhpcyBsYXllciBpbiB0aGUgY3VycmVudCB2aWV3
J3MgY29vcmRpbmF0ZSBzeXN0ZW0uCiAgICAgY29uc3QgSW50UmVjdCBnZXREcmF3UmVjdCgpIGNv
bnN0OwogCisgICAgYm9vbCBzaG91bGREcmF3KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGREcmF3
OyB9CisgICAgdm9pZCBzZXRTaG91bGREcmF3KGJvb2wgc2hvdWxkRHJhdykgeyBtX3Nob3VsZERy
YXcgPSBzaG91bGREcmF3OyB9CisKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJh
d1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd1RyYW5zZm9ybTsgfQogICAgIHZvaWQg
c2V0RHJhd1RyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KSB7IG1f
ZHJhd1RyYW5zZm9ybSA9IG1hdHJpeDsgfQogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBzY3JlZW5TcGFjZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyZWVuU3BhY2VUcmFu
c2Zvcm07IH0KQEAgLTIxNyw2ICsyMjAsMTIgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9kcmF3
c0NvbnRlbnQ7CiAKKyAgICAvLyBGSVhNRTogbV9za2lwc0RyYXcgYW5kIG1fc2hvdWxkRHJhdyBo
YXZlIG92ZXJsYXBwaW5nIGJ1dCBub3QtcXVpdGUtdGhlLXNhbWUgc2VtYW50aWNzLiBtX3Nob3Vs
ZERyYXcgaXMKKyAgICAvLyAgICAgICAgaXNvbGF0ZWQgdG8gTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3TGF5ZXJzKCkuIG1fc2tpcHNEcmF3IG1lYW5zIGRpZmZlcmVudCB0aGluZ3MgZm9yCisg
ICAgLy8gICAgICAgIGRpZmZlcmVudCBsYXllciB0eXBlcy4gVGhlc2Ugc2hvdWxkIGJlIHVuaWZp
ZWQgaW50byBvbmUgYm9vbC4gc2tpcHNEcmF3IHNlbWFudGljcyBhcmUgZXJyb3IKKyAgICAvLyAg
ICAgICAgcHJvbmUgYW5kIHNob3VsZCBiZSBkb25lIGluIGFuIGlzb2xhdGVkIGNoYW5nZSBhZnRl
ciB0ZXN0aW5nIGlzIGluIHBsYWNlLgorICAgIGJvb2wgbV9zaG91bGREcmF3OworCiAgICAgSW50
U2l6ZSBtX3Njcm9sbERlbHRhOwogCiAgICAgLy8gUHJvcGVydGllcyBvd25lZCBleGNsdXNpdmVs
eSBieSB0aGlzIENDTGF5ZXJJbXBsLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111649</attachid>
            <date>2011-10-19 11:14:39 -0700</date>
            <delta_ts>2011-10-19 14:03:16 -0700</delta_ts>
            <desc>moved some early exits sooner so that layers are simply not added to layer lists</desc>
            <filename>bug-70057-20111019111437.patch</filename>
            <type>text/plain</type>
            <size>17254</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc0NjcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0MGMwZTFjOTRjZDY2ZmFj
NWI1MjNlNzVlMGQ4ZDA5YjcwZmFhNTkxLi5iNTUwM2YxYmEyM2VlM2JiZjRiN2MwZmNiOTcwOGZl
ODZkNWZiMzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMTAtMTkgIFNoYXdu
IFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBS
ZWZhY3RvciBMYXllclJlbmRlcmVyQ2hyb21pdW0gZHJhd2luZyBjb2RlLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAwNTcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHJlZmFjdG9yaW5nIHNlcGFy
YXRlcyB0aGUgImVhcmx5IGV4aXRzIiBmcm9tIHRoZSBhY3R1YWwgbG9vcAorICAgICAgICB0aGF0
IGRyYXdzIGxheWVycy4gIFRoaXMgaXMgcGFydCBvZiBtYWtpbmcgTGF5ZXJSZW5kZXJlckNocm9t
aXVtCisgICAgICAgIGVhc2llciB0byB0ZXN0IGFuZCBmb3IgYSBzY2lzc29yaW5nIG9wdGltaXph
dGlvbi4gRXhpc3RpbmcgbGF5b3V0CisgICAgICAgIHRlc3RzIHdlcmUgYWJsZSB0byB2ZXJpZnkg
dGhlIHJlZmFjdG9yaW5nIGRpZCBub3QgY2hhbmdlIGJlaGF2aW9yLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGV0ZXJtaW5lV2hhdFRv
RHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXll
cnNPbnRvUmVuZGVyU3VyZmFjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1w
bDo6c2hvdWxkRHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0U2hvdWxk
RHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0Q29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxheWVyU2hvdWxkQmVBcHBlbmRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHlJbnRlcm5hbCk6CisKIDIwMTEtMTAtMTQgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQu
b3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGFjdHVhbGx5IHJlbW92ZSBTdHlsZUxpc3QuKiBh
ZnRlciByOTc2NDAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCBj
NTI1YzFkMjNlYmY2NDc4ODUzMjg4MjI3MmQ4ODIyYWY1Y2E2N2MwLi4wNjQ2NTkzNGNjZGFmM2M2
ZjFmNmNjZjVhMGM3MzU1Y2RjZDFkMmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAKQEAgLTMwNCwzOSArMzA0LDExIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3TGF5ZXJzSW50ZXJuYWwoKQogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4
dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpP
TkVfTUlOVVNfU1JDX0FMUEhBKSk7CiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0
LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwogCi0gICAgLy8gVXBk
YXRlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVuZGVyIHN1cmZhY2VzLiBXZSB0cmF2ZXJzZSB0aGUg
YXJyYXkgZnJvbQotICAgIC8vIGJhY2sgdG8gZnJvbnQgdG8gZ3VhcmFudGVlIHRoYXQgbmVzdGVk
IHJlbmRlciBzdXJmYWNlcyBnZXQgcmVuZGVyZWQgaW4gdGhlCi0gICAgLy8gY29ycmVjdCBvcmRl
ci4KLSAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNp
emUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKLSAgICAgICAg
Q0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rb
c3VyZmFjZUluZGV4XS5nZXQoKTsKLSAgICAgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJm
YWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7Ci0gICAgICAgIEFTU0VS
VChyZW5kZXJTdXJmYWNlKTsKKyAgICBkZXRlcm1pbmVXaGF0VG9EcmF3KHJlbmRlclN1cmZhY2VM
YXllckxpc3QpOwogCi0gICAgICAgIHJlbmRlclN1cmZhY2UtPnNldFNraXBzRHJhdyh0cnVlKTsK
LQotICAgICAgICAvLyBSZW5kZXIgc3VyZmFjZXMgd2hvc2UgZHJhd2FibGUgYXJlYSBoYXMgemVy
byB3aWR0aCBvciBoZWlnaHQKLSAgICAgICAgLy8gd2lsbCBoYXZlIG5vIGxheWVycyBhc3NvY2lh
dGVkIHdpdGggdGhlbSBhbmQgc2hvdWxkIGJlIHNraXBwZWQuCi0gICAgICAgIGlmICghcmVuZGVy
U3VyZmFjZS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgLy8gU2tpcCBjb21wbGV0ZWx5IHRyYW5zcGFyZW50IHJlbmRlciBzdXJmYWNlcy4KLSAg
ICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5kcmF3T3BhY2l0eSgpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgaWYgKHVzZVJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSkpIHsK
LSAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldFNraXBzRHJhdyhmYWxzZSk7Ci0KLSAgICAg
ICAgICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXIgIT0gcm9vdERyYXdMYXllcikgewotICAgICAg
ICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7Ci0gICAgICAgICAgICAgICAgR0xDKG1fY29udGV4
dC5nZXQoKSwgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDAsIDApKTsKLSAgICAgICAgICAg
ICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4
dDNEOjpDT0xPUl9CVUZGRVJfQklUKSk7Ci0gICAgICAgICAgICAgICAgR0xDKG1fY29udGV4dC5n
ZXQoKSwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb25zdCBDQ0xheWVyTGlzdCYgbGF5ZXJM
aXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXll
ckluZGV4KQotICAgICAgICAgICAgICAgIGRyYXdMYXllcihsYXllckxpc3RbbGF5ZXJJbmRleF0u
Z2V0KCksIHJlbmRlclN1cmZhY2UpOwotICAgICAgICB9CisgICAgeworICAgICAgICBUUkFDRV9F
VkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWw6OmRyYXdMYXll
cnNPbnRvUmVuZGVyU3VyZmFjZXMiLCB0aGlzLCAwKTsKKyAgICAgICAgZHJhd0xheWVyc09udG9S
ZW5kZXJTdXJmYWNlcyhyb290RHJhd0xheWVyLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAg
ICB9CiAKICAgICBpZiAobV9oZWFkc1VwRGlzcGxheS0+ZW5hYmxlZCgpKSB7CkBAIC0zNzEsNiAr
MzQzLDExMCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dG9HTE1hdHJpeChmbG9hdCog
ZmxhdHRlbmVkLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdAogICAgIGZsYXR0ZW5lZFsxNV0gPSBt
Lm00NCgpOwogfQogCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGV0ZXJtaW5lV2hhdFRv
RHJhdyhjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3sKKyAgICBm
b3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7
IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKKyAgICAgICAgQ0NMYXllcklt
cGwqIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUlu
ZGV4XS5nZXQoKTsKKyAgICAgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVu
ZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgICAgIEFTU0VSVChyZW5kZXJT
dXJmYWNlKTsKKworICAgICAgICAvLyBSZW5kZXIgc3VyZmFjZXMgc2hvdWxkIGJlIHNraXBwZWQg
aWYgYW55IG9mIHRoZXNlIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgICAgICAgLy8gICAtIGRyYXdh
YmxlIGFyZWEgaGFzIHplcm8gd2lkdGggb3IgaGVpZ2h0IChpLmUuIHdpbGwgaGF2ZSBubyBsYXll
cnMgYXNzb2NpYXRlZCB3aXRoIGl0KQorICAgICAgICAvLyAgIC0gY29tcGxldGVseSB0cmFuc3Bh
cmVudAorICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLnNpemUoKSB8fCAh
cmVuZGVyU3VyZmFjZS0+ZHJhd09wYWNpdHkoKSkgeworICAgICAgICAgICAgcmVuZGVyU3VyZmFj
ZS0+c2V0U2tpcHNEcmF3KHRydWUpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KworICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRTa2lwc0RyYXcoZmFsc2UpOworCisgICAgICAg
IGNvbnN0IENDTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3Qo
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxh
eWVyTGlzdC5zaXplKCk7ICsrbGF5ZXJJbmRleCkgeworICAgICAgICAgICAgQ0NMYXllckltcGwq
IGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpOworCisgICAgICAgICAgICAvLyBJ
ZiB0aGUgbGF5ZXIgb3ducyBhIGRpZmZlcmVudCByZW5kZXIgc3VyZmFjZSwgdGhlbiB3ZSB3b3Vs
ZCBiZSBkcmF3aW5nIHRoZSByZW5kZXIgc3VyZmFjZSBpbnN0ZWFkIG9mIHRoZQorICAgICAgICAg
ICAgLy8gbGF5ZXIuIFNvIGluIHRoaXMgY2FzZSwgdGhpcyBsYXllciBzaG91bGQgbm90IGJlIG1v
ZGlmaWVkIGhlcmU7IGl0IGdldHMgbW9kaWZpZWQgd2hlbiBpdGVyYXRpbmcgb3ZlciB0aGF0Cisg
ICAgICAgICAgICAvLyBsYXllcidzIHJlbmRlciBzdXJmYWNlLgorICAgICAgICAgICAgaWYgKGxh
eWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXItPnJlbmRlclN1cmZhY2UoKSAhPSByZW5kZXJT
dXJmYWNlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvLyBTdGFy
dCBieSBhc3N1bWluZyB0aGF0IHdlIHdpbGwgaGl0IG9uZSBvZiB0aGVzZSBjb25kaXRpb25zLgor
ICAgICAgICAgICAgbGF5ZXItPnNldFNob3VsZERyYXcoZmFsc2UpOworCisgICAgICAgICAgICBp
ZiAoIWxheWVyLT5kcmF3c0NvbnRlbnQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAgICAgQVNTRVJUKGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkpOworICAgICAg
ICAgICAgSW50UmVjdCB0YXJnZXRTdXJmYWNlUmVjdCA9IGxheWVyLT50YXJnZXRSZW5kZXJTdXJm
YWNlKCktPmNvbnRlbnRSZWN0KCk7CisgICAgICAgICAgICBpZiAobGF5ZXItPnVzZXNMYXllclNj
aXNzb3IoKSkgeworICAgICAgICAgICAgICAgIEludFJlY3Qgc2Npc3NvclJlY3QgPSBsYXllci0+
c2Npc3NvclJlY3QoKTsKKyAgICAgICAgICAgICAgICB0YXJnZXRTdXJmYWNlUmVjdC5pbnRlcnNl
Y3Qoc2Npc3NvclJlY3QpOworICAgICAgICAgICAgICAgIGlmICh0YXJnZXRTdXJmYWNlUmVjdC5p
c0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBXaGlsZSBjaGVja2luZyB0aGlzIHNraXBwaW5nIGNvbmRpdGlvbiwg
d2UgYWxzbyBzZXQgdGhlIGxheWVyJ3MgdmlzaWJsZUxheWVyUmVjdC4KKyAgICAgICAgICAgIElu
dFJlY3QgdmlzaWJsZUxheWVyUmVjdCA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
VmlzaWJsZUxheWVyUmVjdCh0YXJnZXRTdXJmYWNlUmVjdCwgbGF5ZXItPmJvdW5kcygpLCBsYXll
ci0+Y29udGVudEJvdW5kcygpLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICAgICAgICAg
IHZpc2libGVMYXllclJlY3QubW92ZSh0b1NpemUobGF5ZXItPnNjcm9sbFBvc2l0aW9uKCkpKTsK
KyAgICAgICAgICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2libGVMYXllclJlY3Qp
OworICAgICAgICAgICAgaWYgKGxheWVyLT52aXNpYmxlTGF5ZXJSZWN0KCkuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIHJl
YWNoZWQgdGhpcyBwb2ludCwgdGhlIGxheWVyIHNob3VsZCBiZSBkcmF3bi4KKyAgICAgICAgICAg
IGxheWVyLT5zZXRTaG91bGREcmF3KHRydWUpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyhDQ0xh
eWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VM
YXllckxpc3QpCit7CisgICAgLy8gRHJhdyBsYXllciBjb250ZW50cyBpbnRvIHRoZSByZW5kZXIg
c3VyZmFjZXMuIFdlIHRyYXZlcnNlIHRoZSBhcnJheSBmcm9tCisgICAgLy8gYmFjayB0byBmcm9u
dCB0byBndWFyYW50ZWUgdGhhdCBuZXN0ZWQgcmVuZGVyIHN1cmZhY2VzIGdldCByZW5kZXJlZCBp
biB0aGUKKyAgICAvLyBjb3JyZWN0IG9yZGVyLgorICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9
IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAt
LXN1cmZhY2VJbmRleCkgeworICAgICAgICBDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVy
ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOworICAgICAgICBD
Q1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRl
clN1cmZhY2UoKTsKKyAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UpOworCisgICAgICAgIGlm
IChyZW5kZXJTdXJmYWNlLT5za2lwc0RyYXcoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgdmFsdWUgb2Ygc2tpcHNEcmF3KCkgZm9yIHRoZSByZW5k
ZXJTdXJmYWNlIG1heSBjaGFuZ2UgaW5zaWRlIG9mIHVzZVJlbmRlclN1cmZhY2UoKS4KKyAgICAg
ICAgaWYgKHVzZVJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSkpIHsKKyAgICAgICAgICAgIGlm
IChyZW5kZXJTdXJmYWNlTGF5ZXIgIT0gcm9vdERyYXdMYXllcikgeworICAgICAgICAgICAgICAg
IEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQz
RDo6U0NJU1NPUl9URVNUKSk7CisgICAgICAgICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwg
bV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDAsIDApKTsKKyAgICAgICAgICAgICAgICBHTEMo
bV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xP
Ul9CVUZGRVJfQklUKSk7CisgICAgICAgICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9j
b250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBjb25zdCBDQ0xheWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVu
ZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVy
SW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KSB7
CisgICAgICAgICAgICAgICAgQ0NMYXllckltcGwqIGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5k
ZXhdLmdldCgpOworCisgICAgICAgICAgICAgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkg
JiYgbGF5ZXItPnJlbmRlclN1cmZhY2UoKSAhPSByZW5kZXJTdXJmYWNlKSB7CisgICAgICAgICAg
ICAgICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmRyYXcodGhpcywgbGF5ZXItPmdldERy
YXdSZWN0KCkpOworICAgICAgICAgICAgICAgICAgICBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5y
ZWxlYXNlQ29udGVudHNUZXh0dXJlKCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghbGF5ZXItPnNob3VsZERy
YXcoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBp
ZiAobGF5ZXItPnVzZXNMYXllclNjaXNzb3IoKSkKKyAgICAgICAgICAgICAgICAgICAgc2V0U2Np
c3NvclRvUmVjdChsYXllci0+c2Npc3NvclJlY3QoKSk7CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRpc2Fi
bGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOworCisgICAgICAgICAgICAgICAg
bGF5ZXItPmRyYXcodGhpcyk7CisKKyAgICAgICAgICAgICAgICAvLyBEcmF3IHRoZSBkZWJ1ZyBi
b3JkZXIgaWYgdGhlcmUgaXMgb25lLgorICAgICAgICAgICAgICAgIGxheWVyLT5kcmF3RGVidWdC
b3JkZXIodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWFkKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBkcmF3TWF0cml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgb3BhY2l0eSwgY29u
c3QgRmxvYXRRdWFkJiBxdWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IG1hdHJpeExvY2F0aW9uLCBpbnQgYWxwaGFMb2NhdGlvbiwgaW50IHF1YWRM
b2NhdGlvbikKQEAgLTUwNyw1NyArNTgzLDYgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnVzZVJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlKQogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKEND
TGF5ZXJJbXBsKiBsYXllciwgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlKQotewotICAg
IGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpICYmIGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgIT0g
dGFyZ2V0U3VyZmFjZSkgewotICAgICAgICBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3KHRo
aXMsIGxheWVyLT5nZXREcmF3UmVjdCgpKTsKLSAgICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2Uo
KS0+cmVsZWFzZUNvbnRlbnRzVGV4dHVyZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKCFsYXllci0+ZHJhd3NDb250ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghbGF5ZXItPm9wYWNpdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxheWVyLT5i
b3VuZHMoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFJlY3QgdGFyZ2V0
U3VyZmFjZVJlY3QgPSBsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpID8gbGF5ZXItPnRhcmdl
dFJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSA6IG1fZGVmYXVsdFJlbmRlclN1cmZhY2Ut
PmNvbnRlbnRSZWN0KCk7Ci0gICAgaWYgKGxheWVyLT51c2VzTGF5ZXJTY2lzc29yKCkpIHsKLSAg
ICAgICAgSW50UmVjdCBzY2lzc29yUmVjdCA9IGxheWVyLT5zY2lzc29yUmVjdCgpOwotICAgICAg
ICB0YXJnZXRTdXJmYWNlUmVjdC5pbnRlcnNlY3Qoc2Npc3NvclJlY3QpOwotICAgICAgICBpZiAo
dGFyZ2V0U3VyZmFjZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBzZXRTY2lzc29yVG9SZWN0KHNjaXNzb3JSZWN0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgR0xD
KG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpT
Q0lTU09SX1RFU1QpKTsKLQotICAgIEludFJlY3QgdmlzaWJsZUxheWVyUmVjdCA9IENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdCh0YXJnZXRTdXJmYWNlUmVj
dCwgbGF5ZXItPmJvdW5kcygpLCBsYXllci0+Y29udGVudEJvdW5kcygpLCBsYXllci0+ZHJhd1Ry
YW5zZm9ybSgpKTsKLSAgICB2aXNpYmxlTGF5ZXJSZWN0Lm1vdmUodG9TaXplKGxheWVyLT5zY3Jv
bGxQb3NpdGlvbigpKSk7Ci0gICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZUxh
eWVyUmVjdCk7Ci0KLSAgICAvLyBUaGUgbGF5ZXIgc2hvdWxkIG5vdCBiZSBkcmF3biBpZiAoMSkg
aXQgaXMgbm90IGRvdWJsZS1zaWRlZCBhbmQgKDIpIHRoZSBiYWNrIG9mIHRoZSBsYXllciBpcyBm
YWNpbmcgdGhlIHNjcmVlbi4KLSAgICAvLyBUaGlzIHNlY29uZCBjb25kaXRpb24gaXMgY2hlY2tl
ZCBieSBjb21wdXRpbmcgdGhlIHRyYW5zZm9ybWVkIG5vcm1hbCBvZiB0aGUgbGF5ZXIuCi0gICAg
aWYgKCFsYXllci0+ZG91YmxlU2lkZWQoKSkgewotICAgICAgICBGbG9hdFJlY3QgbGF5ZXJSZWN0
KEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0U2l6ZShsYXllci0+Ym91bmRzKCkpKTsKLSAgICAgICAg
RmxvYXRRdWFkIG1hcHBlZExheWVyID0gbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkubWFw
UXVhZChGbG9hdFF1YWQobGF5ZXJSZWN0KSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBob3Jpem9udGFs
RGlyID0gbWFwcGVkTGF5ZXIucDIoKSAtIG1hcHBlZExheWVyLnAxKCk7Ci0gICAgICAgIEZsb2F0
U2l6ZSB2ZXJ0aWNhbERpciA9IG1hcHBlZExheWVyLnA0KCkgLSBtYXBwZWRMYXllci5wMSgpOwot
ICAgICAgICBGbG9hdFBvaW50M0QgeEF4aXMoaG9yaXpvbnRhbERpci53aWR0aCgpLCBob3Jpem9u
dGFsRGlyLmhlaWdodCgpLCAwKTsKLSAgICAgICAgRmxvYXRQb2ludDNEIHlBeGlzKHZlcnRpY2Fs
RGlyLndpZHRoKCksIHZlcnRpY2FsRGlyLmhlaWdodCgpLCAwKTsKLSAgICAgICAgRmxvYXRQb2lu
dDNEIHpBeGlzID0geEF4aXMuY3Jvc3MoeUF4aXMpOwotICAgICAgICBpZiAoekF4aXMueigpIDwg
MCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBsYXllci0+ZHJhdyh0aGlzKTsK
LQotICAgIC8vIERyYXcgdGhlIGRlYnVnIGJvcmRlciBpZiB0aGVyZSBpcyBvbmUuCi0gICAgbGF5
ZXItPmRyYXdEZWJ1Z0JvcmRlcih0aGlzKTsKLX0KLQogLy8gU2V0cyB0aGUgc2Npc3NvciByZWdp
b24gdG8gdGhlIGdpdmVuIHJlY3RhbmdsZS4gVGhlIGNvb3JkaW5hdGUgc3lzdGVtIGZvciB0aGUK
IC8vIHNjaXNzb3JSZWN0IGhhcyBpdHMgb3JpZ2luIGF0IHRoZSB0b3AgbGVmdCBjb3JuZXIgb2Yg
dGhlIGN1cnJlbnQgdmlzaWJsZSByZWN0Lgogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNl
dFNjaXNzb3JUb1JlY3QoY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDBmZDg5NjVlMzM1ZGQwMjI5YWQ0ZTk0YjYwMGIzZGU1
YzZiZDYyYTAuLjIyYTAzOTVkY2ZkY2YwYzZjNmNmYzNhZDk1NWNjNzJkNzI2NjM3MmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC0xNTksNyArMTU5LDExIEBAIHByaXZh
dGU6CiAgICAgYm9vbCBpbml0aWFsaXplKCk7CiAKICAgICB2b2lkIGRyYXdMYXllcnNJbnRlcm5h
bCgpOwotICAgIHZvaWQgZHJhd0xheWVyKENDTGF5ZXJJbXBsKiwgQ0NSZW5kZXJTdXJmYWNlKik7
CisgICAgdm9pZCBkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290
RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisK
KyAgICAvLyBGb3IgYWxsIGxheWVycyBhbmQgcmVuZGVyIHN1cmZhY2VzLCBkZWNpZGVzIHdoZXRo
ZXIgdGhlIGxheWVyL3N1cmZhY2Ugc2hvdWxkIGJlIHNraXBwZWQgb3IgZHJhd24KKyAgICAvLyBh
bmQgY29tcHV0ZXMgdmlzaWJsZUxheWVyUmVjdCBvZiB0aGUgbGF5ZXIuCisgICAgdm9pZCBkZXRl
cm1pbmVXaGF0VG9EcmF3KGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KTsKIAogICAgIE1hbmFnZWRUZXh0dXJlKiBnZXRPZmZzY3JlZW5MYXllclRleHR1cmUoKTsKICAg
ICB2b2lkIGNvcHlPZmZzY3JlZW5UZXh0dXJlVG9EaXNwbGF5KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
aAppbmRleCAxNWJlNzUxNTZjNzc4MDAxNDQ5OGRiNmU0NzhhZDYzNjcwOGQ4YjYwLi5hY2VmZWFl
YTExNzFiZTQzZjkzNDIzOWY3NGU4Y2I2ZmYyMjI2MTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgK
QEAgLTE2Myw2ICsxNjMsOSBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyB0aGUgcmVjdCBjb250
YWludGFpbmluZyB0aGlzIGxheWVyIGluIHRoZSBjdXJyZW50IHZpZXcncyBjb29yZGluYXRlIHN5
c3RlbS4KICAgICBjb25zdCBJbnRSZWN0IGdldERyYXdSZWN0KCkgY29uc3Q7CiAKKyAgICBib29s
IHNob3VsZERyYXcoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZERyYXc7IH0KKyAgICB2b2lkIHNl
dFNob3VsZERyYXcoYm9vbCBzaG91bGREcmF3KSB7IG1fc2hvdWxkRHJhdyA9IHNob3VsZERyYXc7
IH0KKwogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gbV9kcmF3VHJhbnNmb3JtOyB9CiAgICAgdm9pZCBzZXREcmF3VHJhbnNmb3Jt
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpIHsgbV9kcmF3VHJhbnNmb3JtID0g
bWF0cml4OyB9CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHNjcmVlblNwYWNlVHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zY3JlZW5TcGFjZVRyYW5zZm9ybTsgfQpAQCAtMjE3
LDYgKzIyMCwxMiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2RyYXdzQ29udGVudDsKIAorICAg
IC8vIEZJWE1FOiBtX3NraXBzRHJhdyBhbmQgbV9zaG91bGREcmF3IGhhdmUgb3ZlcmxhcHBpbmcg
YnV0IG5vdC1xdWl0ZS10aGUtc2FtZSBzZW1hbnRpY3MuIG1fc2hvdWxkRHJhdyBpcworICAgIC8v
ICAgICAgICBpc29sYXRlZCB0byBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoKS4g
bV9za2lwc0RyYXcgbWVhbnMgZGlmZmVyZW50IHRoaW5ncyBmb3IKKyAgICAvLyAgICAgICAgZGlm
ZmVyZW50IGxheWVyIHR5cGVzLiBUaGVzZSBzaG91bGQgYmUgdW5pZmllZCBpbnRvIG9uZSBib29s
LiBza2lwc0RyYXcgc2VtYW50aWNzIGFyZSBlcnJvcgorICAgIC8vICAgICAgICBwcm9uZSBhbmQg
c2hvdWxkIGJlIGRvbmUgaW4gYW4gaXNvbGF0ZWQgY2hhbmdlIGFmdGVyIHRlc3RpbmcgaXMgaW4g
cGxhY2UuCisgICAgYm9vbCBtX3Nob3VsZERyYXc7CisKICAgICBJbnRTaXplIG1fc2Nyb2xsRGVs
dGE7CiAKICAgICAvLyBQcm9wZXJ0aWVzIG93bmVkIGV4Y2x1c2l2ZWx5IGJ5IHRoaXMgQ0NMYXll
ckltcGwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAppbmRleCBi
Y2Q1YWM3MzVlZWJhMTkxYWFjYmNmOGQ4YzFmMmZmZGYzMzNmYTA5Li5jNmMxZjZmOWI1OWMyODkw
MGQzZWM0NDRmOWY2ZmM5NDJkZmEyOTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5jcHAKQEAgLTg1LDYgKzg1LDM5IEBAIHN0YXRpYyBib29sIGlzU2NhbGVPclRy
YW5zbGF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQogCiB9CiAKK3RlbXBsYXRl
IDx0eXBlbmFtZSBMYXllclR5cGU+Citib29sIGxheWVyU2hvdWxkQmVBcHBlbmRlZChMYXllclR5
cGUqIGxheWVyKQoreworICAgIC8vIExheWVycyBjYW4gYmUgc2tpcHBlZCBpZiBhbnkgb2YgdGhl
c2UgY29uZGl0aW9ucyBhcmUgbWV0LgorICAgIC8vICAgLSBpcyB0cmFuc3BhcmVudAorICAgIC8v
ICAgLSBoYXMgZW1wdHkgYm91bmRzCisgICAgLy8gICAtIHRoZSBsYXllciBpcyBub3QgZG91Ymxl
LXNpZGVkLCBidXQgaXRzIGJhY2sgZmFjZSBpcyB2aXNpYmxlLgorICAgIC8vCisgICAgLy8gU29t
ZSBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgbmVlZCB0byBiZSBjb21wdXRlZCBhdCBhIGxhdGVyIHBv
aW50IHdoZW4gZW5vdWdoIGluZm9ybWF0aW9uIGlzIGtub3duLgorICAgIC8vICAgLSBkb2VzIG5v
dCBkcmF3IGNvbnRlbnQgKEZJWE1FOiBjYW4gcHJvYmFibHkgYmUgZml4ZWQgd2l0aCBhZGRpdGlv
bmFsIHJlZmFjdG9yaW5nKQorICAgIC8vICAgLSB0aGUgaW50ZXJzZWN0aW9uIG9mIGNvbnRlbnQg
YW5kIHNjaXNzb3IgaXMgZW1wdHkKKyAgICAvLyAgIC0gdGhlIHZpc2libGVMYXllclJlY3QgaXMg
ZW1wdHkKKworICAgIGlmICghbGF5ZXItPm9wYWNpdHkoKSB8fCBsYXllci0+Ym91bmRzKCkuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaGUgbGF5ZXIgc2hvdWxk
IG5vdCBiZSBkcmF3biBpZiAoMSkgaXQgaXMgbm90IGRvdWJsZS1zaWRlZCBhbmQgKDIpIHRoZSBi
YWNrIG9mIHRoZSBsYXllciBpcyBmYWNpbmcgdGhlIHNjcmVlbi4KKyAgICAvLyBUaGlzIHNlY29u
ZCBjb25kaXRpb24gaXMgY2hlY2tlZCBieSBjb21wdXRpbmcgdGhlIHRyYW5zZm9ybWVkIG5vcm1h
bCBvZiB0aGUgbGF5ZXIuCisgICAgaWYgKCFsYXllci0+ZG91YmxlU2lkZWQoKSkgeworICAgICAg
ICBGbG9hdFJlY3QgbGF5ZXJSZWN0KEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0U2l6ZShsYXllci0+
Ym91bmRzKCkpKTsKKyAgICAgICAgRmxvYXRRdWFkIG1hcHBlZExheWVyID0gbGF5ZXItPnNjcmVl
blNwYWNlVHJhbnNmb3JtKCkubWFwUXVhZChGbG9hdFF1YWQobGF5ZXJSZWN0KSk7CisgICAgICAg
IEZsb2F0U2l6ZSBob3Jpem9udGFsRGlyID0gbWFwcGVkTGF5ZXIucDIoKSAtIG1hcHBlZExheWVy
LnAxKCk7CisgICAgICAgIEZsb2F0U2l6ZSB2ZXJ0aWNhbERpciA9IG1hcHBlZExheWVyLnA0KCkg
LSBtYXBwZWRMYXllci5wMSgpOworICAgICAgICBGbG9hdFBvaW50M0QgeEF4aXMoaG9yaXpvbnRh
bERpci53aWR0aCgpLCBob3Jpem9udGFsRGlyLmhlaWdodCgpLCAwKTsKKyAgICAgICAgRmxvYXRQ
b2ludDNEIHlBeGlzKHZlcnRpY2FsRGlyLndpZHRoKCksIHZlcnRpY2FsRGlyLmhlaWdodCgpLCAw
KTsKKyAgICAgICAgRmxvYXRQb2ludDNEIHpBeGlzID0geEF4aXMuY3Jvc3MoeUF4aXMpOworICAg
ICAgICBpZiAoekF4aXMueigpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogLy8gUmVjdXJzaXZlbHkgd2Fsa3MgdGhlIGxheWVy
IHRyZWUgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIG5vZGUgYW5kIGNvbXB1dGVzIGFsbCB0aGUKIC8v
IG5lY2Vzc2FyeSB0cmFuc2Zvcm1hdGlvbnMsIHNjaXNzb3IgcmVjdGFuZ2xlcywgcmVuZGVyIHN1
cmZhY2VzLCBldGMuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRl
clN1cmZhY2VUeXBlLCB0eXBlbmFtZSBMYXllclNvcnRlcj4KQEAgLTI3Myw3ICszMDYsOSBAQCBz
dGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbChM
YXllclR5cGUqIGxheWVyLCBMYXllcgogICAgIHN1YmxheWVyTWF0cml4LnRyYW5zbGF0ZTNkKC1i
b3VuZHMud2lkdGgoKSAqIDAuNSwgLWJvdW5kcy5oZWlnaHQoKSAqIDAuNSwgMCk7CiAKICAgICBM
YXllckxpc3QmIGRlc2NlbmRhbnRzID0gKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgPyBsYXllci0+
cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKSA6IGxheWVyTGlzdCk7Ci0gICAgZGVzY2VuZGFu
dHMuYXBwZW5kKGxheWVyKTsKKworICAgIGlmIChsYXllclNob3VsZEJlQXBwZW5kZWQobGF5ZXIp
KQorICAgICAgICBkZXNjZW5kYW50cy5hcHBlbmQobGF5ZXIpOwogCiAgICAgdW5zaWduZWQgdGhp
c0xheWVySW5kZXggPSBkZXNjZW5kYW50cy5zaXplKCkgLSAxOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111670</attachid>
            <date>2011-10-19 14:03:19 -0700</date>
            <delta_ts>2011-10-20 17:45:57 -0700</delta_ts>
            <desc>removing layers to skip them instead of keeping additional layer state</desc>
            <filename>bug-70057-20111019140318.patch</filename>
            <type>text/plain</type>
            <size>15522</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc4MzgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyMTI4MDg5MDVkOTE4YzIz
NDViZGNmMjA4ZjhiMjc1YzM2NzdhYmQ0Li44MzFiZWVkMmFjYzBiYTMxY2E5YTdlNTFkOTQzZDM4
MTIzY2VmMmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMTAtMTkgIFNoYXdu
IFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBS
ZWZhY3RvciBMYXllclJlbmRlcmVyQ2hyb21pdW0gZHJhd2luZyBjb2RlLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAwNTcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHJlZmFjdG9yaW5nIHNlcGFy
YXRlcyB0aGUgImVhcmx5IGV4aXRzIiBmcm9tIHRoZSBhY3R1YWwgbG9vcAorICAgICAgICB0aGF0
IGRyYXdzIGxheWVycy4gVGhpcyBpcyBwYXJ0IG9mIG1ha2luZyBMYXllclJlbmRlcmVyQ2hyb21p
dW0KKyAgICAgICAgZWFzaWVyIHRvIHRlc3QgYW5kIGZvciBhIHNjaXNzb3Jpbmcgb3B0aW1pemF0
aW9uLiBFeGlzdGluZyBsYXlvdXQKKyAgICAgICAgdGVzdHMgd2VyZSBhYmxlIHRvIHZlcmlmeSB0
aGUgcmVmYWN0b3JpbmcgZGlkIG5vdCBjaGFuZ2UgYmVoYXZpb3IuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkZXRlcm1pbmVXaGF0VG9E
cmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
c09udG9SZW5kZXJTdXJmYWNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBs
OjpzaG91bGREcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRTaG91bGRE
cmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGF5ZXJTaG91bGRCZUFwcGVuZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eUludGVybmFsKToKKwogMjAxMS0xMC0xOSAgVG9tYXN6IE1vcmF3c2tpICA8dC5tb3Jhd3NraUBz
YW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXSBBZGRlZCBtaXNzaW5nIGR1bW15IHBsYXRmb3Jt
RGVzY3JpcHRpb24gZnVuY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
CmluZGV4IGE1MGZlZGRjNmE5MDNjNzk3ZDJhNjk0NTFkOTM4YmU4ZTQ2YjNhNGIuLmJmOGY1MzRk
OGIzNzM3OTk4MzQzNzFkZDhiZTQ2YWIwNWZjMzU5NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcApAQCAtMzA0LDM5ICszMDQsMTEgQEAgdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdMYXllcnNJbnRlcm5hbCgpCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwg
bV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhpY3NDb250
ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpKTsKICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBt
X2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CiAKLSAg
ICAvLyBVcGRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSByZW5kZXIgc3VyZmFjZXMuIFdlIHRyYXZl
cnNlIHRoZSBhcnJheSBmcm9tCi0gICAgLy8gYmFjayB0byBmcm9udCB0byBndWFyYW50ZWUgdGhh
dCBuZXN0ZWQgcmVuZGVyIHN1cmZhY2VzIGdldCByZW5kZXJlZCBpbiB0aGUKLSAgICAvLyBjb3Jy
ZWN0IG9yZGVyLgotICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXll
ckxpc3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgewot
ICAgICAgICBDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOwotICAgICAgICBDQ1JlbmRlclN1cmZhY2UqIHJl
bmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKLSAgICAg
ICAgQVNTRVJUKHJlbmRlclN1cmZhY2UpOwotCi0gICAgICAgIHJlbmRlclN1cmZhY2UtPnNldFNr
aXBzRHJhdyh0cnVlKTsKLQotICAgICAgICAvLyBSZW5kZXIgc3VyZmFjZXMgd2hvc2UgZHJhd2Fi
bGUgYXJlYSBoYXMgemVybyB3aWR0aCBvciBoZWlnaHQKLSAgICAgICAgLy8gd2lsbCBoYXZlIG5v
IGxheWVycyBhc3NvY2lhdGVkIHdpdGggdGhlbSBhbmQgc2hvdWxkIGJlIHNraXBwZWQuCi0gICAg
ICAgIGlmICghcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgLy8gU2tpcCBjb21wbGV0ZWx5IHRyYW5zcGFyZW50IHJlbmRl
ciBzdXJmYWNlcy4KLSAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5kcmF3T3BhY2l0eSgpKQot
ICAgICAgICAgICAgY29udGludWU7CisgICAgZGV0ZXJtaW5lV2hhdFRvRHJhdyhyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsKIAotICAgICAgICBpZiAodXNlUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJm
YWNlKSkgewotICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0U2tpcHNEcmF3KGZhbHNlKTsK
LQotICAgICAgICAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllciAhPSByb290RHJhd0xheWVyKSB7
Ci0gICAgICAgICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxl
KEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKLSAgICAgICAgICAgICAgICBHTEMo
bV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCkpOwotICAg
ICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+Y2xlYXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpKTsKLSAgICAgICAgICAgICAgICBHTEMobV9j
b250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NP
Ul9URVNUKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNvbnN0IENDTGF5ZXJMaXN0
JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgp
OyArK2xheWVySW5kZXgpCi0gICAgICAgICAgICAgICAgZHJhd0xheWVyKGxheWVyTGlzdFtsYXll
ckluZGV4XS5nZXQoKSwgcmVuZGVyU3VyZmFjZSk7Ci0gICAgICAgIH0KKyAgICB7CisgICAgICAg
IFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNJbnRlcm5hbDo6
ZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyIsIHRoaXMsIDApOworICAgICAgICBkcmF3TGF5
ZXJzT250b1JlbmRlclN1cmZhY2VzKHJvb3REcmF3TGF5ZXIsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QpOwogICAgIH0KIAogICAgIGlmIChtX2hlYWRzVXBEaXNwbGF5LT5lbmFibGVkKCkpIHsKQEAg
LTM3MSw2ICszNDMsMTAyIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0b0dMTWF0cml4
KGZsb2F0KiBmbGF0dGVuZWQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0CiAgICAgZmxhdHRlbmVk
WzE1XSA9IG0ubTQ0KCk7CiB9CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkZXRlcm1p
bmVXaGF0VG9EcmF3KGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQor
eworICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6
ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgeworICAgICAgICBD
Q0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtz
dXJmYWNlSW5kZXhdLmdldCgpOworICAgICAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZh
Y2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKyAgICAgICAgQVNTRVJU
KHJlbmRlclN1cmZhY2UpOworCisgICAgICAgIC8vIFJlbmRlciBzdXJmYWNlcyBzaG91bGQgYmUg
c2tpcHBlZCBpZiBhbnkgb2YgdGhlc2UgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgICAgICAvLyAg
IC0gZHJhd2FibGUgYXJlYSBoYXMgemVybyB3aWR0aCBvciBoZWlnaHQgKGkuZS4gd2lsbCBoYXZl
IG5vIGxheWVycyBhc3NvY2lhdGVkIHdpdGggaXQpCisgICAgICAgIC8vICAgLSBjb21wbGV0ZWx5
IHRyYW5zcGFyZW50CisgICAgICAgIGlmICghcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCkuc2l6
ZSgpIHx8ICFyZW5kZXJTdXJmYWNlLT5kcmF3T3BhY2l0eSgpKSB7CisgICAgICAgICAgICByZW5k
ZXJTdXJmYWNlLT5zZXRTa2lwc0RyYXcodHJ1ZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldFNraXBzRHJhdyhmYWxzZSk7CisK
KyAgICAgICAgQ0NMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlz
dCgpOworICAgICAgICB1bnNpZ25lZCBsYXllckluZGV4ID0gMDsKKyAgICAgICAgd2hpbGUgKGxh
eWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpKSB7CisgICAgICAgICAgICBDQ0xheWVySW1wbCog
bGF5ZXIgPSBsYXllckxpc3RbbGF5ZXJJbmRleF0uZ2V0KCk7CisKKyAgICAgICAgICAgIC8vIElm
IHRoZSBsYXllciBvd25zIGEgZGlmZmVyZW50IHJlbmRlciBzdXJmYWNlLCB0aGVuIHdlIHdvdWxk
IGJlIGRyYXdpbmcgdGhlIHJlbmRlciBzdXJmYWNlIGluc3RlYWQgb2YgdGhlCisgICAgICAgICAg
ICAvLyBsYXllci4gSW4gdGhpcyBjYXNlLCB3ZSBkbyBub3QgY2hlY2sgaWYgdGhlIGxheWVyIHNo
b3VsZCBiZSBza2lwcGVkLgorICAgICAgICAgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkg
JiYgbGF5ZXItPnJlbmRlclN1cmZhY2UoKSAhPSByZW5kZXJTdXJmYWNlKSB7CisgICAgICAgICAg
ICAgICAgbGF5ZXJJbmRleCsrOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBBU1NFUlQobGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKSk7
CisgICAgICAgICAgICBJbnRSZWN0IHRhcmdldFN1cmZhY2VSZWN0ID0gbGF5ZXItPnRhcmdldFJl
bmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKTsKKyAgICAgICAgICAgIGlmIChsYXllci0+dXNl
c0xheWVyU2Npc3NvcigpKSB7CisgICAgICAgICAgICAgICAgSW50UmVjdCBzY2lzc29yUmVjdCA9
IGxheWVyLT5zY2lzc29yUmVjdCgpOworICAgICAgICAgICAgICAgIHRhcmdldFN1cmZhY2VSZWN0
LmludGVyc2VjdChzY2lzc29yUmVjdCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IE5vdGUgdGhhdCB3ZSBzZXQgdGhlIGxheWVyJ3MgdmlzaWJsZUxheWVyUmVjdCBoZXJlLgorICAg
ICAgICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0KHRhcmdldFN1cmZhY2VSZWN0LCBsYXllci0+Ym91
bmRzKCksIGxheWVyLT5jb250ZW50Qm91bmRzKCksIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOwor
ICAgICAgICAgICAgdmlzaWJsZUxheWVyUmVjdC5tb3ZlKHRvU2l6ZShsYXllci0+c2Nyb2xsUG9z
aXRpb24oKSkpOworICAgICAgICAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QodmlzaWJs
ZUxheWVyUmVjdCk7CisKKyAgICAgICAgICAgIC8vIElmIHRoZSBsYXllciBzaG91bGQgbm90IGJl
IGRyYXduLCB0aGVuIGl0IGlzIHNraXBwZWQgYnkgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgcmVuZGVy
IHN1cmZhY2UncyBsaXN0LgorICAgICAgICAgICAgaWYgKCFsYXllci0+ZHJhd3NDb250ZW50KCkg
fHwgdGFyZ2V0U3VyZmFjZVJlY3QuaXNFbXB0eSgpIHx8IGxheWVyLT52aXNpYmxlTGF5ZXJSZWN0
KCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGxheWVyTGlzdC5yZW1vdmUobGF5ZXJJbmRl
eCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGF5ZXJJbmRleCsrOworICAg
ICAgICB9CisgICAgfQorfQorCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
c09udG9SZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NM
YXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCit7CisgICAgLy8gRHJhdyBsYXllciBj
b250ZW50cyBpbnRvIHRoZSByZW5kZXIgc3VyZmFjZXMuIFdlIHRyYXZlcnNlIHRoZSBhcnJheSBm
cm9tCisgICAgLy8gYmFjayB0byBmcm9udCB0byBndWFyYW50ZWUgdGhhdCBuZXN0ZWQgcmVuZGVy
IHN1cmZhY2VzIGdldCByZW5kZXJlZCBpbiB0aGUKKyAgICAvLyBjb3JyZWN0IG9yZGVyLgorICAg
IGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0g
MTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgeworICAgICAgICBDQ0xheWVy
SW1wbCogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNl
SW5kZXhdLmdldCgpOworICAgICAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSBy
ZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKyAgICAgICAgQVNTRVJUKHJlbmRl
clN1cmZhY2UpOworCisgICAgICAgIGlmIChyZW5kZXJTdXJmYWNlLT5za2lwc0RyYXcoKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgdmFsdWUgb2Yg
c2tpcHNEcmF3KCkgZm9yIHRoZSByZW5kZXJTdXJmYWNlIG1heSBjaGFuZ2UgaW5zaWRlIG9mIHVz
ZVJlbmRlclN1cmZhY2UoKS4KKyAgICAgICAgaWYgKHVzZVJlbmRlclN1cmZhY2UocmVuZGVyU3Vy
ZmFjZSkpIHsKKyAgICAgICAgICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXIgIT0gcm9vdERyYXdM
YXllcikgeworICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+
ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CisgICAgICAgICAgICAg
ICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDAsIDAp
KTsKKyAgICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmNsZWFy
KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKSk7CisgICAgICAgICAgICAgICAg
R0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OlNDSVNTT1JfVEVTVCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb25zdCBDQ0xh
eWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0
LnNpemUoKTsgKytsYXllckluZGV4KSB7CisgICAgICAgICAgICAgICAgQ0NMYXllckltcGwqIGxh
eWVyID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpOworCisgICAgICAgICAgICAgICAgaWYg
KGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXItPnJlbmRlclN1cmZhY2UoKSAhPSByZW5k
ZXJTdXJmYWNlKSB7CisgICAgICAgICAgICAgICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNlKCkt
PmRyYXcodGhpcywgbGF5ZXItPmdldERyYXdSZWN0KCkpOworICAgICAgICAgICAgICAgICAgICBs
YXllci0+cmVuZGVyU3VyZmFjZSgpLT5yZWxlYXNlQ29udGVudHNUZXh0dXJlKCk7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGlmIChsYXllci0+dXNlc0xheWVyU2Npc3NvcigpKQorICAgICAgICAgICAgICAgICAgICBz
ZXRTY2lzc29yVG9SZWN0KGxheWVyLT5zY2lzc29yUmVjdCgpKTsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+
ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CisKKyAgICAgICAgICAg
ICAgICBsYXllci0+ZHJhdyh0aGlzKTsKKworICAgICAgICAgICAgICAgIC8vIERyYXcgdGhlIGRl
YnVnIGJvcmRlciBpZiB0aGVyZSBpcyBvbmUuCisgICAgICAgICAgICAgICAgbGF5ZXItPmRyYXdE
ZWJ1Z0JvcmRlcih0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwog
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZFF1YWQoY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIGRyYXdNYXRyaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBvcGFjaXR5
LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgbWF0cml4TG9jYXRpb24sIGludCBhbHBoYUxvY2F0aW9uLCBpbnQg
cXVhZExvY2F0aW9uKQpAQCAtNTA3LDU3ICs1NzUsNiBAQCBib29sIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dXNlUmVuZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5
ZXIoQ0NMYXllckltcGwqIGxheWVyLCBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2UpCi17
Ci0gICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXItPnJlbmRlclN1cmZhY2Uo
KSAhPSB0YXJnZXRTdXJmYWNlKSB7Ci0gICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmRy
YXcodGhpcywgbGF5ZXItPmdldERyYXdSZWN0KCkpOwotICAgICAgICBsYXllci0+cmVuZGVyU3Vy
ZmFjZSgpLT5yZWxlYXNlQ29udGVudHNUZXh0dXJlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoIWxheWVyLT5kcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKCFsYXllci0+b3BhY2l0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobGF5
ZXItPmJvdW5kcygpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCB0
YXJnZXRTdXJmYWNlUmVjdCA9IGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkgPyBsYXllci0+
dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpIDogbV9kZWZhdWx0UmVuZGVyU3Vy
ZmFjZS0+Y29udGVudFJlY3QoKTsKLSAgICBpZiAobGF5ZXItPnVzZXNMYXllclNjaXNzb3IoKSkg
ewotICAgICAgICBJbnRSZWN0IHNjaXNzb3JSZWN0ID0gbGF5ZXItPnNjaXNzb3JSZWN0KCk7Ci0g
ICAgICAgIHRhcmdldFN1cmZhY2VSZWN0LmludGVyc2VjdChzY2lzc29yUmVjdCk7Ci0gICAgICAg
IGlmICh0YXJnZXRTdXJmYWNlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIHNldFNjaXNzb3JUb1JlY3Qoc2Npc3NvclJlY3QpOwotICAgIH0gZWxzZQotICAgICAg
ICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0
M0Q6OlNDSVNTT1JfVEVTVCkpOwotCi0gICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0KHRhcmdldFN1cmZh
Y2VSZWN0LCBsYXllci0+Ym91bmRzKCksIGxheWVyLT5jb250ZW50Qm91bmRzKCksIGxheWVyLT5k
cmF3VHJhbnNmb3JtKCkpOwotICAgIHZpc2libGVMYXllclJlY3QubW92ZSh0b1NpemUobGF5ZXIt
PnNjcm9sbFBvc2l0aW9uKCkpKTsKLSAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNp
YmxlTGF5ZXJSZWN0KTsKLQotICAgIC8vIFRoZSBsYXllciBzaG91bGQgbm90IGJlIGRyYXduIGlm
ICgxKSBpdCBpcyBub3QgZG91YmxlLXNpZGVkIGFuZCAoMikgdGhlIGJhY2sgb2YgdGhlIGxheWVy
IGlzIGZhY2luZyB0aGUgc2NyZWVuLgotICAgIC8vIFRoaXMgc2Vjb25kIGNvbmRpdGlvbiBpcyBj
aGVja2VkIGJ5IGNvbXB1dGluZyB0aGUgdHJhbnNmb3JtZWQgbm9ybWFsIG9mIHRoZSBsYXllci4K
LSAgICBpZiAoIWxheWVyLT5kb3VibGVTaWRlZCgpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBsYXll
clJlY3QoRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRTaXplKGxheWVyLT5ib3VuZHMoKSkpOwotICAg
ICAgICBGbG9hdFF1YWQgbWFwcGVkTGF5ZXIgPSBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0o
KS5tYXBRdWFkKEZsb2F0UXVhZChsYXllclJlY3QpKTsKLSAgICAgICAgRmxvYXRTaXplIGhvcml6
b250YWxEaXIgPSBtYXBwZWRMYXllci5wMigpIC0gbWFwcGVkTGF5ZXIucDEoKTsKLSAgICAgICAg
RmxvYXRTaXplIHZlcnRpY2FsRGlyID0gbWFwcGVkTGF5ZXIucDQoKSAtIG1hcHBlZExheWVyLnAx
KCk7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCB4QXhpcyhob3Jpem9udGFsRGlyLndpZHRoKCksIGhv
cml6b250YWxEaXIuaGVpZ2h0KCksIDApOwotICAgICAgICBGbG9hdFBvaW50M0QgeUF4aXModmVy
dGljYWxEaXIud2lkdGgoKSwgdmVydGljYWxEaXIuaGVpZ2h0KCksIDApOwotICAgICAgICBGbG9h
dFBvaW50M0QgekF4aXMgPSB4QXhpcy5jcm9zcyh5QXhpcyk7Ci0gICAgICAgIGlmICh6QXhpcy56
KCkgPCAwKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGxheWVyLT5kcmF3KHRo
aXMpOwotCi0gICAgLy8gRHJhdyB0aGUgZGVidWcgYm9yZGVyIGlmIHRoZXJlIGlzIG9uZS4KLSAg
ICBsYXllci0+ZHJhd0RlYnVnQm9yZGVyKHRoaXMpOwotfQotCiAvLyBTZXRzIHRoZSBzY2lzc29y
IHJlZ2lvbiB0byB0aGUgZ2l2ZW4gcmVjdGFuZ2xlLiBUaGUgY29vcmRpbmF0ZSBzeXN0ZW0gZm9y
IHRoZQogLy8gc2Npc3NvclJlY3QgaGFzIGl0cyBvcmlnaW4gYXQgdGhlIHRvcCBsZWZ0IGNvcm5l
ciBvZiB0aGUgY3VycmVudCB2aXNpYmxlIHJlY3QuCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6c2V0U2Npc3NvclRvUmVjdChjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggNDJlZGRmMDlmYWFhZTIxZGEyODFlZmU1YzMx
MjdjNjZhZjMxZjUyMS4uZGFhNGYyYzE2NjY3OGZlZDY3MzlkZGIyMTE5ZTM3NDNkZTNiYWU0YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTE2MCw3ICsxNjAsMTEgQEAg
cHJpdmF0ZToKICAgICBib29sIGluaXRpYWxpemUoKTsKIAogICAgIHZvaWQgZHJhd0xheWVyc0lu
dGVybmFsKCk7Ci0gICAgdm9pZCBkcmF3TGF5ZXIoQ0NMYXllckltcGwqLCBDQ1JlbmRlclN1cmZh
Y2UqKTsKKyAgICB2b2lkIGRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMoQ0NMYXllckltcGwq
IHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KTsKKworICAgIC8vIEZvciBhbGwgbGF5ZXJzIGFuZCByZW5kZXIgc3VyZmFjZXMsIGRlY2lkZXMg
d2hldGhlciB0aGUgbGF5ZXIvc3VyZmFjZSBzaG91bGQgYmUgc2tpcHBlZCBvciBkcmF3bgorICAg
IC8vIGFuZCBjb21wdXRlcyB2aXNpYmxlTGF5ZXJSZWN0IG9mIHRoZSBsYXllci4KKyAgICB2b2lk
IGRldGVybWluZVdoYXRUb0RyYXcoY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QpOwogCiAgICAgTWFuYWdlZFRleHR1cmUqIGdldE9mZnNjcmVlbkxheWVyVGV4dHVyZSgp
OwogICAgIHZvaWQgY29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3BsYXkoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCmluZGV4IGNjMDM4MGNiYmY1ZTQ1ZWFkNmFm
MTkwODkwMjM4MWFjMmFmMTY2ZDYuLmI1MGZmMTE2ZjQzYWYxMmRlZjdjZDkxNDVjZTE3NTRhMzY1
N2NmMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcApAQCAt
ODUsNiArODUsMzkgQEAgc3RhdGljIGJvb2wgaXNTY2FsZU9yVHJhbnNsYXRpb24oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG0pCiAKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlw
ZT4KK2Jvb2wgbGF5ZXJTaG91bGRCZUFwcGVuZGVkKExheWVyVHlwZSogbGF5ZXIpCit7CisgICAg
Ly8gTGF5ZXJzIGNhbiBiZSBza2lwcGVkIGlmIGFueSBvZiB0aGVzZSBjb25kaXRpb25zIGFyZSBt
ZXQuCisgICAgLy8gICAtIGlzIHRyYW5zcGFyZW50CisgICAgLy8gICAtIGhhcyBlbXB0eSBib3Vu
ZHMKKyAgICAvLyAgIC0gdGhlIGxheWVyIGlzIG5vdCBkb3VibGUtc2lkZWQsIGJ1dCBpdHMgYmFj
ayBmYWNlIGlzIHZpc2libGUuCisgICAgLy8KKyAgICAvLyBTb21lIGFkZGl0aW9uYWwgY29uZGl0
aW9ucyBuZWVkIHRvIGJlIGNvbXB1dGVkIGF0IGEgbGF0ZXIgcG9pbnQgYWZ0ZXIgdGhlIHJlY3Vy
c2lvbiBpcyBmaW5pc2hlZC4KKyAgICAvLyAgIC0gZG9lcyBub3QgZHJhdyBjb250ZW50IChGSVhN
RTogY2FuIHByb2JhYmx5IGJlIGRvbmUgc29vbmVyIGFmdGVyIGFkZGl0aW9uYWwgcmVmYWN0b3Jp
bmcgb2YgdGhlIGRyYXdhYmxlQ29udGVudFJlY3QpCisgICAgLy8gICAtIHRoZSBpbnRlcnNlY3Rp
b24gb2YgcmVuZGVyIHN1cmZhY2UgY29udGVudCBhbmQgbGF5ZXIgc2Npc3NvciBpcyBlbXB0eQor
ICAgIC8vICAgLSB0aGUgdmlzaWJsZUxheWVyUmVjdCBpcyBlbXB0eQorCisgICAgaWYgKCFsYXll
ci0+b3BhY2l0eSgpIHx8IGxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIFRoZSBsYXllciBzaG91bGQgbm90IGJlIGRyYXduIGlmICgxKSBp
dCBpcyBub3QgZG91YmxlLXNpZGVkIGFuZCAoMikgdGhlIGJhY2sgb2YgdGhlIGxheWVyIGlzIGZh
Y2luZyB0aGUgc2NyZWVuLgorICAgIC8vIFRoaXMgc2Vjb25kIGNvbmRpdGlvbiBpcyBjaGVja2Vk
IGJ5IGNvbXB1dGluZyB0aGUgdHJhbnNmb3JtZWQgbm9ybWFsIG9mIHRoZSBsYXllci4KKyAgICBp
ZiAoIWxheWVyLT5kb3VibGVTaWRlZCgpKSB7CisgICAgICAgIEZsb2F0UmVjdCBsYXllclJlY3Qo
RmxvYXRQb2ludCgwLCAwKSwgRmxvYXRTaXplKGxheWVyLT5ib3VuZHMoKSkpOworICAgICAgICBG
bG9hdFF1YWQgbWFwcGVkTGF5ZXIgPSBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5tYXBR
dWFkKEZsb2F0UXVhZChsYXllclJlY3QpKTsKKyAgICAgICAgRmxvYXRTaXplIGhvcml6b250YWxE
aXIgPSBtYXBwZWRMYXllci5wMigpIC0gbWFwcGVkTGF5ZXIucDEoKTsKKyAgICAgICAgRmxvYXRT
aXplIHZlcnRpY2FsRGlyID0gbWFwcGVkTGF5ZXIucDQoKSAtIG1hcHBlZExheWVyLnAxKCk7Cisg
ICAgICAgIEZsb2F0UG9pbnQzRCB4QXhpcyhob3Jpem9udGFsRGlyLndpZHRoKCksIGhvcml6b250
YWxEaXIuaGVpZ2h0KCksIDApOworICAgICAgICBGbG9hdFBvaW50M0QgeUF4aXModmVydGljYWxE
aXIud2lkdGgoKSwgdmVydGljYWxEaXIuaGVpZ2h0KCksIDApOworICAgICAgICBGbG9hdFBvaW50
M0QgekF4aXMgPSB4QXhpcy5jcm9zcyh5QXhpcyk7CisgICAgICAgIGlmICh6QXhpcy56KCkgPCAw
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCiAvLyBSZWN1cnNpdmVseSB3YWxrcyB0aGUgbGF5ZXIgdHJlZSBzdGFydGluZyBhdCB0aGUg
Z2l2ZW4gbm9kZSBhbmQgY29tcHV0ZXMgYWxsIHRoZQogLy8gbmVjZXNzYXJ5IHRyYW5zZm9ybWF0
aW9ucywgc2Npc3NvciByZWN0YW5nbGVzLCByZW5kZXIgc3VyZmFjZXMsIGV0Yy4KIHRlbXBsYXRl
PHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGUsIHR5cGVuYW1l
IExheWVyU29ydGVyPgpAQCAtMzI5LDcgKzM2Miw5IEBAIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVy
CiAgICAgc3VibGF5ZXJNYXRyaXgudHJhbnNsYXRlM2QoLWJvdW5kcy53aWR0aCgpICogMC41LCAt
Ym91bmRzLmhlaWdodCgpICogMC41LCAwKTsKIAogICAgIExheWVyTGlzdCYgZGVzY2VuZGFudHMg
PSAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSA/IGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmxheWVy
TGlzdCgpIDogbGF5ZXJMaXN0KTsKLSAgICBkZXNjZW5kYW50cy5hcHBlbmQobGF5ZXIpOworCisg
ICAgaWYgKGxheWVyU2hvdWxkQmVBcHBlbmRlZChsYXllcikpCisgICAgICAgIGRlc2NlbmRhbnRz
LmFwcGVuZChsYXllcik7CiAKICAgICB1bnNpZ25lZCB0aGlzTGF5ZXJJbmRleCA9IGRlc2NlbmRh
bnRzLnNpemUoKSAtIDE7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111881</attachid>
            <date>2011-10-20 17:46:02 -0700</date>
            <delta_ts>2011-10-21 16:49:19 -0700</delta_ts>
            <desc>Cleaner and closer to ideal.</desc>
            <filename>bug-70057-20111020174600.patch</filename>
            <type>text/plain</type>
            <size>15273</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc4MzgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyMTI4MDg5MDVkOTE4YzIz
NDViZGNmMjA4ZjhiMjc1YzM2NzdhYmQ0Li5lNDM2MmVjZGQ0MWZhMjRmYTcyNGJjMjQ4NzExMjg5
ZTg0ZWE4NDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMTAtMjAgIFNoYXdu
IFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBS
ZWZhY3RvciBMYXllclJlbmRlcmVyQ2hyb21pdW0gZHJhd2luZyBjb2RlLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAwNTcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHJlZmFjdG9yaW5nIHNlcGFy
YXRlcyB0aGUgImVhcmx5IGV4aXRzIiBmcm9tIHRoZSBhY3R1YWwgbG9vcAorICAgICAgICB0aGF0
IGRyYXdzIGxheWVycy4gVGhpcyBpcyBwYXJ0IG9mIG1ha2luZyBMYXllclJlbmRlcmVyQ2hyb21p
dW0KKyAgICAgICAgZWFzaWVyIHRvIHRlc3QgYW5kIGZvciBhIHNjaXNzb3Jpbmcgb3B0aW1pemF0
aW9uLiBFeGlzdGluZyBsYXlvdXQKKyAgICAgICAgdGVzdHMgd2VyZSBhYmxlIHRvIHZlcmlmeSB0
aGUgcmVmYWN0b3JpbmcgZGlkIG5vdCBjaGFuZ2UgYmVoYXZpb3IuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRlclN1
cmZhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xh
eWVyc0ludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd0xheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
OjpwYWludExheWVyQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6bGF5ZXJTaG91bGRCZUFwcGVuZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKToKKwogMjAxMS0xMC0xOSAgVG9tYXN6
IE1vcmF3c2tpICA8dC5tb3Jhd3NraUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXSBBZGRl
ZCBtaXNzaW5nIGR1bW15IHBsYXRmb3JtRGVzY3JpcHRpb24gZnVuY3Rpb24KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGE1MGZlZGRjNmE5MDNjNzk3ZDJhNjk0NTFk
OTM4YmU4ZTQ2YjNhNGIuLmQzOTM0MDc0MGIwNDc2NTViYmIyNTlhNTY5YTQ4ZmVhZDRkYTM0ZmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtMjUxLDYgKzI1MSw0
MyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycygpCiAgICAgICAgIGNv
cHlPZmZzY3JlZW5UZXh0dXJlVG9EaXNwbGF5KCk7CiB9CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJh
d0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3sKKyAg
ICAvLyBVcGRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSByZW5kZXIgc3VyZmFjZXMuIFdlIHRyYXZl
cnNlIHRoZSByZW5kZXIgc3VyZmFjZXMKKyAgICAvLyBmcm9tIGJhY2sgdG8gZnJvbnQgdG8gZ3Vh
cmFudGVlIHRoYXQgbmVzdGVkIHJlbmRlciBzdXJmYWNlcyBnZXQgcmVuZGVyZWQgaW4KKyAgICAv
LyB0aGUgY29ycmVjdCBvcmRlci4KKyAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNl
SW5kZXgpIHsKKyAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRl
clN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQoKTsKKyAgICAgICAgQ0NSZW5kZXJT
dXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNl
KCk7CisgICAgICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlKTsKKworICAgICAgICByZW5kZXJTdXJm
YWNlLT5zZXRTa2lwc0RyYXcodHJ1ZSk7CisKKyAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5s
YXllckxpc3QoKS5zaXplKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBT
a2lwIGNvbXBsZXRlbHkgdHJhbnNwYXJlbnQgcmVuZGVyIHN1cmZhY2VzLgorICAgICAgICBpZiAo
IXJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBpZiAodXNlUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKSkgeworICAgICAgICAg
ICAgcmVuZGVyU3VyZmFjZS0+c2V0U2tpcHNEcmF3KGZhbHNlKTsKKworICAgICAgICAgICAgaWYg
KHJlbmRlclN1cmZhY2VMYXllciAhPSByb290RHJhd0xheWVyKSB7CisgICAgICAgICAgICAgICAg
R0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNE
OjpTQ0lTU09SX1RFU1QpKTsKKyAgICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBt
X2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCkpOworICAgICAgICAgICAgICAgIEdMQyht
X2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9S
X0JVRkZFUl9CSVQpKTsKKyAgICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2Nv
bnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGNvbnN0IENDTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5k
ZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJ
bmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpCisg
ICAgICAgICAgICAgICAgZHJhd0xheWVyKGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKSwgcmVu
ZGVyU3VyZmFjZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKwogdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdMYXllcnNJbnRlcm5hbCgpCiB7CiAgICAgaWYgKHZpZXdwb3J0U2l6ZSgp
LmlzRW1wdHkoKSB8fCAhcm9vdExheWVyKCkpCkBAIC0zMDQsMzkgKzM0MSw5IEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwoKQogICAgIEdMQyhtX2NvbnRl
eHQuZ2V0KCksIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdy
YXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKSk7CiAgICAgR0xDKG1fY29udGV4
dC5nZXQoKSwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVT
VCkpOwogCi0gICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVuZGVyIHN1cmZhY2Vz
LiBXZSB0cmF2ZXJzZSB0aGUgYXJyYXkgZnJvbQotICAgIC8vIGJhY2sgdG8gZnJvbnQgdG8gZ3Vh
cmFudGVlIHRoYXQgbmVzdGVkIHJlbmRlciBzdXJmYWNlcyBnZXQgcmVuZGVyZWQgaW4gdGhlCi0g
ICAgLy8gY29ycmVjdCBvcmRlci4KLSAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNl
SW5kZXgpIHsKLSAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRl
clN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQoKTsKLSAgICAgICAgQ0NSZW5kZXJT
dXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNl
KCk7Ci0gICAgICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlKTsKLQotICAgICAgICByZW5kZXJTdXJm
YWNlLT5zZXRTa2lwc0RyYXcodHJ1ZSk7Ci0KLSAgICAgICAgLy8gUmVuZGVyIHN1cmZhY2VzIHdo
b3NlIGRyYXdhYmxlIGFyZWEgaGFzIHplcm8gd2lkdGggb3IgaGVpZ2h0Ci0gICAgICAgIC8vIHdp
bGwgaGF2ZSBubyBsYXllcnMgYXNzb2NpYXRlZCB3aXRoIHRoZW0gYW5kIHNob3VsZCBiZSBza2lw
cGVkLgotICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLnNpemUoKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIFNraXAgY29tcGxldGVseSB0cmFuc3Bh
cmVudCByZW5kZXIgc3VyZmFjZXMuCi0gICAgICAgIGlmICghcmVuZGVyU3VyZmFjZS0+ZHJhd09w
YWNpdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICh1c2VSZW5kZXJT
dXJmYWNlKHJlbmRlclN1cmZhY2UpKSB7Ci0gICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRT
a2lwc0RyYXcoZmFsc2UpOwotCi0gICAgICAgICAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVyICE9
IHJvb3REcmF3TGF5ZXIpIHsKLSAgICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBt
X2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwotICAg
ICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+Y2xlYXJDb2xvcigw
LCAwLCAwLCAwKSk7Ci0gICAgICAgICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250
ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCkpOwotICAgICAg
ICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Y29uc3QgQ0NMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgp
OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8
IGxheWVyTGlzdC5zaXplKCk7ICsrbGF5ZXJJbmRleCkKLSAgICAgICAgICAgICAgICBkcmF3TGF5
ZXIobGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpLCByZW5kZXJTdXJmYWNlKTsKLSAgICAgICAg
fQorICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d0xheWVyc0ludGVybmFsOjpkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzIiwgdGhpcywgMCk7
CisgICAgICAgIGRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMocm9vdERyYXdMYXllciwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgfQogCiAgICAgaWYgKG1faGVhZHNVcERpc3BsYXkt
PmVuYWJsZWQoKSkgewpAQCAtNTE1LDE1ICs1MjIsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd0xheWVyKENDTGF5ZXJJbXBsKiBsYXllciwgQ0NSZW5kZXJTdXJmYWNlKiB0YXJn
ZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFsYXllci0+ZHJhd3NDb250ZW50
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbGF5ZXItPm9wYWNpdHkoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKGxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLQogICAgIEludFJlY3QgdGFyZ2V0U3VyZmFjZVJlY3QgPSBsYXllci0+dGFyZ2V0
UmVuZGVyU3VyZmFjZSgpID8gbGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJl
Y3QoKSA6IG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCk7CiAgICAgaWYgKGxh
eWVyLT51c2VzTGF5ZXJTY2lzc29yKCkpIHsKICAgICAgICAgSW50UmVjdCBzY2lzc29yUmVjdCA9
IGxheWVyLT5zY2lzc29yUmVjdCgpOwpAQCAtNTM4LDIwICs1MzYsNiBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKENDTGF5ZXJJbXBsKiBsYXllciwgQ0NSZW5kZXJTdXJm
YWNlKiB0YXJnZQogICAgIHZpc2libGVMYXllclJlY3QubW92ZSh0b1NpemUobGF5ZXItPnNjcm9s
bFBvc2l0aW9uKCkpKTsKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlTGF5
ZXJSZWN0KTsKIAotICAgIC8vIFRoZSBsYXllciBzaG91bGQgbm90IGJlIGRyYXduIGlmICgxKSBp
dCBpcyBub3QgZG91YmxlLXNpZGVkIGFuZCAoMikgdGhlIGJhY2sgb2YgdGhlIGxheWVyIGlzIGZh
Y2luZyB0aGUgc2NyZWVuLgotICAgIC8vIFRoaXMgc2Vjb25kIGNvbmRpdGlvbiBpcyBjaGVja2Vk
IGJ5IGNvbXB1dGluZyB0aGUgdHJhbnNmb3JtZWQgbm9ybWFsIG9mIHRoZSBsYXllci4KLSAgICBp
ZiAoIWxheWVyLT5kb3VibGVTaWRlZCgpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBsYXllclJlY3Qo
RmxvYXRQb2ludCgwLCAwKSwgRmxvYXRTaXplKGxheWVyLT5ib3VuZHMoKSkpOwotICAgICAgICBG
bG9hdFF1YWQgbWFwcGVkTGF5ZXIgPSBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5tYXBR
dWFkKEZsb2F0UXVhZChsYXllclJlY3QpKTsKLSAgICAgICAgRmxvYXRTaXplIGhvcml6b250YWxE
aXIgPSBtYXBwZWRMYXllci5wMigpIC0gbWFwcGVkTGF5ZXIucDEoKTsKLSAgICAgICAgRmxvYXRT
aXplIHZlcnRpY2FsRGlyID0gbWFwcGVkTGF5ZXIucDQoKSAtIG1hcHBlZExheWVyLnAxKCk7Ci0g
ICAgICAgIEZsb2F0UG9pbnQzRCB4QXhpcyhob3Jpem9udGFsRGlyLndpZHRoKCksIGhvcml6b250
YWxEaXIuaGVpZ2h0KCksIDApOwotICAgICAgICBGbG9hdFBvaW50M0QgeUF4aXModmVydGljYWxE
aXIud2lkdGgoKSwgdmVydGljYWxEaXIuaGVpZ2h0KCksIDApOwotICAgICAgICBGbG9hdFBvaW50
M0QgekF4aXMgPSB4QXhpcy5jcm9zcyh5QXhpcyk7Ci0gICAgICAgIGlmICh6QXhpcy56KCkgPCAw
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGxheWVyLT5kcmF3KHRoaXMpOwog
CiAgICAgLy8gRHJhdyB0aGUgZGVidWcgYm9yZGVyIGlmIHRoZXJlIGlzIG9uZS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggNDJlZGRmMDlmYWFhZTIxZGEyODFlZmU1YzMx
MjdjNjZhZjMxZjUyMS4uOWM4YjIwMzEyZTc1YzhlZTRjZGNlMjg3YmFiZGUyOGM0ZDIyOWQ1MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTE2MCw2ICsxNjAsNyBAQCBw
cml2YXRlOgogICAgIGJvb2wgaW5pdGlhbGl6ZSgpOwogCiAgICAgdm9pZCBkcmF3TGF5ZXJzSW50
ZXJuYWwoKTsKKyAgICB2b2lkIGRyYXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMoQ0NMYXllcklt
cGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0KTsKICAgICB2b2lkIGRyYXdMYXllcihDQ0xheWVySW1wbCosIENDUmVuZGVyU3VyZmFjZSop
OwogCiAgICAgTWFuYWdlZFRleHR1cmUqIGdldE9mZnNjcmVlbkxheWVyVGV4dHVyZSgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggY2U0Y2I2Yzc4MDE2NThiY2M2M2M3NGVl
YTA0OGUzOGM0NjQ4OTFiZS4uZjBiNWIyN2U2NjI5M2VmOGFlYTI0NWEzMWY3Yjc3YjU5NzIwYjBj
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0yOTksOCArMjk5LDYgQEAg
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3Qm
IHJlbmRlclN1cmZhY2VMYXllckxpc3QKICAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBy
ZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CiAgICAg
ICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlKTsKIAotICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXIt
PnNldExheWVyVHJlZUhvc3QodGhpcyk7Ci0KICAgICAgICAgLy8gUmVuZGVyIHN1cmZhY2VzIHdo
b3NlIGRyYXdhYmxlIGFyZWEgaGFzIHplcm8gd2lkdGggb3IgaGVpZ2h0CiAgICAgICAgIC8vIHdp
bGwgaGF2ZSBubyBsYXllcnMgYXNzb2NpYXRlZCB3aXRoIHRoZW0gYW5kIHNob3VsZCBiZSBza2lw
cGVkLgogICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLnNpemUoKSkKQEAg
LTMwOSw2ICszMDcsMTUgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50
cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QKICAgICAgICAgaWYgKCFy
ZW5kZXJTdXJmYWNlLT5kcmF3T3BhY2l0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKKyAg
ICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOworICAgICAg
ICBpZiAocmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKSkgeworICAgICAgICAgICAgLy8g
SWYgdGhlIGxheWVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlbmRlciBzdXJmYWNlIGRvZXMgbm90
IGRyYXcgY29udGVudCwKKyAgICAgICAgICAgIC8vIHRoZW4gd2UgbmVlZCB0byBwYWludCB0aGUg
bWFzayBub3csIHNvIGl0IGlzIG5vdCBza2lwcGVkLgorICAgICAgICAgICAgcmVuZGVyU3VyZmFj
ZUxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKKyAgICAgICAgICAg
IGlmICghcmVuZGVyU3VyZmFjZUxheWVyLT5kcmF3c0NvbnRlbnQoKSkKKyAgICAgICAgICAgICAg
ICBwYWludENvbnRlbnRzSWZEaXJ0eShyZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpLCBJ
bnRSZWN0KEludFBvaW50KCksIHJlbmRlclN1cmZhY2VMYXllci0+Y29udGVudEJvdW5kcygpKSk7
CisgICAgICAgIH0KKwogICAgICAgICBjb25zdCBMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRl
clN1cmZhY2UtPmxheWVyTGlzdCgpOwogICAgICAgICBBU1NFUlQobGF5ZXJMaXN0LnNpemUoKSk7
CiAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXll
ckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKQEAgLTMyNCw4ICszMzEsNiBAQCB2b2lkIEND
TGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdAogICAgICAgICAgICAgaWYgKCFsYXllci0+b3BhY2l0eSgpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpZiAobGF5ZXItPm1hc2tMYXll
cigpKQotICAgICAgICAgICAgICAgIGxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJUcmVlSG9z
dCh0aGlzKTsKICAgICAgICAgICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkpIHsKICAgICAg
ICAgICAgICAgICBsYXllci0+cmVwbGljYUxheWVyKCktPnNldExheWVyVHJlZUhvc3QodGhpcyk7
CiAgICAgICAgICAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkp
CkBAIC0zNjgsNiArMzczLDExIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxhCiAgICAgICAgIGlm
ICghcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCkuc2l6ZSgpIHx8ICFyZW5kZXJTdXJmYWNlLT5k
cmF3T3BhY2l0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgLy8gSWYgdGhl
IGxheWVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlbmRlciBzdXJmYWNlIGRvZXMgbm90IGRyYXcg
Y29udGVudCwKKyAgICAgICAgLy8gdGhlbiB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgbWFzayBub3cs
IHNvIGl0IGlzIG5vdCBza2lwcGVkLgorICAgICAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVyLT5t
YXNrTGF5ZXIoKSAmJiAhcmVuZGVyU3VyZmFjZUxheWVyLT5kcmF3c0NvbnRlbnQoKSkKKyAgICAg
ICAgICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMocmVuZGVyU3VyZmFjZUxheWVyLT5tYXNr
TGF5ZXIoKSwgY29udGV4dCwgYWxsb2NhdG9yKTsKKwogICAgICAgICBjb25zdCBMYXllckxpc3Qm
IGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwogICAgICAgICBBU1NFUlQo
bGF5ZXJMaXN0LnNpemUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7
IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCmluZGV4IGNjMDM4MGNiYmY1ZTQ1ZWFk
NmFmMTkwODkwMjM4MWFjMmFmMTY2ZDYuLmM2MTU2YmNmMTZiZTA5NzM3NzIxNjA5OGNhODQxZjlm
NTJhYmU4MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcApA
QCAtODUsNiArODUsMzkgQEAgc3RhdGljIGJvb2wgaXNTY2FsZU9yVHJhbnNsYXRpb24oY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG0pCiAKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJU
eXBlPgorYm9vbCBsYXllclNob3VsZEJlQXBwZW5kZWQoTGF5ZXJUeXBlKiBsYXllcikKK3sKKyAg
ICAvLyBMYXllcnMgY2FuIGJlIHNraXBwZWQgaWYgYW55IG9mIHRoZXNlIGNvbmRpdGlvbnMgYXJl
IG1ldC4KKyAgICAvLyAgIC0gZG9lcyBub3QgZHJhdyBjb250ZW50LgorICAgIC8vICAgLSBpcyB0
cmFuc3BhcmVudAorICAgIC8vICAgLSBoYXMgZW1wdHkgYm91bmRzCisgICAgLy8gICAtIHRoZSBs
YXllciBpcyBub3QgZG91YmxlLXNpZGVkLCBidXQgaXRzIGJhY2sgZmFjZSBpcyB2aXNpYmxlLgor
ICAgIC8vCisgICAgLy8gU29tZSBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgbmVlZCB0byBiZSBjb21w
dXRlZCBhdCBhIGxhdGVyIHBvaW50IGFmdGVyIHRoZSByZWN1cnNpb24gaXMgZmluaXNoZWQuCisg
ICAgLy8gICAtIHRoZSBpbnRlcnNlY3Rpb24gb2YgcmVuZGVyIHN1cmZhY2UgY29udGVudCBhbmQg
bGF5ZXIgc2Npc3NvciBpcyBlbXB0eQorICAgIC8vICAgLSB0aGUgdmlzaWJsZUxheWVyUmVjdCBp
cyBlbXB0eQorCisgICAgaWYgKCFsYXllci0+ZHJhd3NDb250ZW50KCkgfHwgIWxheWVyLT5vcGFj
aXR5KCkgfHwgbGF5ZXItPmJvdW5kcygpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gVGhlIGxheWVyIHNob3VsZCBub3QgYmUgZHJhd24gaWYgKDEpIGl0IGlzIG5v
dCBkb3VibGUtc2lkZWQgYW5kICgyKSB0aGUgYmFjayBvZiB0aGUgbGF5ZXIgaXMgZmFjaW5nIHRo
ZSBzY3JlZW4uCisgICAgLy8gVGhpcyBzZWNvbmQgY29uZGl0aW9uIGlzIGNoZWNrZWQgYnkgY29t
cHV0aW5nIHRoZSB0cmFuc2Zvcm1lZCBub3JtYWwgb2YgdGhlIGxheWVyLgorICAgIGlmICghbGF5
ZXItPmRvdWJsZVNpZGVkKCkpIHsKKyAgICAgICAgRmxvYXRSZWN0IGxheWVyUmVjdChGbG9hdFBv
aW50KDAsIDApLCBGbG9hdFNpemUobGF5ZXItPmJvdW5kcygpKSk7CisgICAgICAgIEZsb2F0UXVh
ZCBtYXBwZWRMYXllciA9IGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLm1hcFF1YWQoRmxv
YXRRdWFkKGxheWVyUmVjdCkpOworICAgICAgICBGbG9hdFNpemUgaG9yaXpvbnRhbERpciA9IG1h
cHBlZExheWVyLnAyKCkgLSBtYXBwZWRMYXllci5wMSgpOworICAgICAgICBGbG9hdFNpemUgdmVy
dGljYWxEaXIgPSBtYXBwZWRMYXllci5wNCgpIC0gbWFwcGVkTGF5ZXIucDEoKTsKKyAgICAgICAg
RmxvYXRQb2ludDNEIHhBeGlzKGhvcml6b250YWxEaXIud2lkdGgoKSwgaG9yaXpvbnRhbERpci5o
ZWlnaHQoKSwgMCk7CisgICAgICAgIEZsb2F0UG9pbnQzRCB5QXhpcyh2ZXJ0aWNhbERpci53aWR0
aCgpLCB2ZXJ0aWNhbERpci5oZWlnaHQoKSwgMCk7CisgICAgICAgIEZsb2F0UG9pbnQzRCB6QXhp
cyA9IHhBeGlzLmNyb3NzKHlBeGlzKTsKKyAgICAgICAgaWYgKHpBeGlzLnooKSA8IDApCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKIC8v
IFJlY3Vyc2l2ZWx5IHdhbGtzIHRoZSBsYXllciB0cmVlIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBu
b2RlIGFuZCBjb21wdXRlcyBhbGwgdGhlCiAvLyBuZWNlc3NhcnkgdHJhbnNmb3JtYXRpb25zLCBz
Y2lzc29yIHJlY3RhbmdsZXMsIHJlbmRlciBzdXJmYWNlcywgZXRjLgogdGVtcGxhdGU8dHlwZW5h
bWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwgdHlwZW5hbWUgTGF5ZXJT
b3J0ZXI+CkBAIC0zMjksOSArMzYyLDEyIEBAIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyCiAgICAg
c3VibGF5ZXJNYXRyaXgudHJhbnNsYXRlM2QoLWJvdW5kcy53aWR0aCgpICogMC41LCAtYm91bmRz
LmhlaWdodCgpICogMC41LCAwKTsKIAogICAgIExheWVyTGlzdCYgZGVzY2VuZGFudHMgPSAobGF5
ZXItPnJlbmRlclN1cmZhY2UoKSA/IGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgp
IDogbGF5ZXJMaXN0KTsKLSAgICBkZXNjZW5kYW50cy5hcHBlbmQobGF5ZXIpOwogCi0gICAgdW5z
aWduZWQgdGhpc0xheWVySW5kZXggPSBkZXNjZW5kYW50cy5zaXplKCkgLSAxOworICAgIC8vIEFu
eSBsYXllcnMgdGhhdCBhcmUgYXBwZW5kZWQgYWZ0ZXIgdGhpcyBwb2ludCBhcmUgaW4gdGhlIGxh
eWVyJ3Mgc3VidHJlZSBhbmQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBzb3J0aW5nIHByb2Nl
c3MuCisgICAgdW5zaWduZWQgc29ydGluZ1N0YXJ0SW5kZXggPSBkZXNjZW5kYW50cy5zaXplKCk7
CisKKyAgICBpZiAobGF5ZXJTaG91bGRCZUFwcGVuZGVkKGxheWVyKSkKKyAgICAgICAgZGVzY2Vu
ZGFudHMuYXBwZW5kKGxheWVyKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXIt
PmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgTGF5ZXJUeXBlKiBjaGlsZCA9IGxh
eWVyLT5jaGlsZHJlbigpW2ldLmdldCgpOwpAQCAtNDA4LDggKzQ0NCw4IEBAIHN0YXRpYyB2b2lk
IGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSog
bGF5ZXIsIExheWVyCiAgICAgLy8gSWYgcHJlc2VydmVzLTNkIHRoZW4gc29ydCBhbGwgdGhlIGRl
c2NlbmRhbnRzIGluIDNEIHNvIHRoYXQgdGhleSBjYW4gYmUKICAgICAvLyBkcmF3biBmcm9tIGJh
Y2sgdG8gZnJvbnQuIElmIHRoZSBwcmVzZXJ2ZXMtM2QgcHJvcGVydHkgaXMgYWxzbyBzZXQgb24g
dGhlIHBhcmVudCB0aGVuCiAgICAgLy8gc2tpcCB0aGUgc29ydGluZyBhcyB0aGUgcGFyZW50IHdp
bGwgc29ydCBhbGwgdGhlIGRlc2NlbmRhbnRzIGFueXdheS4KLSAgICBpZiAobGF5ZXItPnByZXNl
cnZlczNEKCkgJiYgKCFsYXllci0+cGFyZW50KCkgfHwgIWxheWVyLT5wYXJlbnQoKS0+cHJlc2Vy
dmVzM0QoKSkpCi0gICAgICAgIHNvcnRMYXllcnMoJmRlc2NlbmRhbnRzLmF0KHRoaXNMYXllcklu
ZGV4KSwgZGVzY2VuZGFudHMuZW5kKCksIGxheWVyU29ydGVyKTsKKyAgICBpZiAoZGVzY2VuZGFu
dHMuc2l6ZSgpICYmIGxheWVyLT5wcmVzZXJ2ZXMzRCgpICYmICghbGF5ZXItPnBhcmVudCgpIHx8
ICFsYXllci0+cGFyZW50KCktPnByZXNlcnZlczNEKCkpKQorICAgICAgICBzb3J0TGF5ZXJzKCZk
ZXNjZW5kYW50cy5hdChzb3J0aW5nU3RhcnRJbmRleCksIGRlc2NlbmRhbnRzLmVuZCgpLCBsYXll
clNvcnRlcik7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIExheWVyQ2hyb21p
dW0qIHJvb3RMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPFJl
ZlB0cjxMYXllckNocm9taXVtPiA+JiBsYXllckxpc3QsIGludCBtYXhUZXh0dXJlU2l6ZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112043</attachid>
            <date>2011-10-21 16:49:25 -0700</date>
            <delta_ts>2011-10-21 21:09:22 -0700</delta_ts>
            <desc>removed dodgy conditions</desc>
            <filename>bug-70057-20111021164924.patch</filename>
            <type>text/plain</type>
            <size>16590</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTgwNzcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1v
ZGUgMTAwNjQ0CmluZGV4IDJlYTJmYzlhMmMwMzM4NDEwNGQwOGVlZjkxNDM0NTg1ZTNlM2I0MWEu
LjliYjg2YTUxZWQ1YjFkZTllZmNmYzFiY2ExYmQ5NzYwN2I3ZmI4ZDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI3IEBACisyMDExLTEwLTIxICBTaGF3biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0b3IgTGF5ZXJSZW5kZXJlckNocm9taXVtIGRy
YXdpbmcgY29kZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcwMDU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyByZWZhY3RvcmluZyBzZXBhcmF0ZXMgdGhlICJlYXJseSBleGl0cyIgZnJvbSB0aGUg
YWN0dWFsIGxvb3AKKyAgICAgICAgdGhhdCBkcmF3cyBsYXllcnMuIFRoaXMgaXMgcGFydCBvZiBt
YWtpbmcgTGF5ZXJSZW5kZXJlckNocm9taXVtCisgICAgICAgIGVhc2llciB0byB0ZXN0IGFuZCBm
b3IgYSBzY2lzc29yaW5nIG9wdGltaXphdGlvbi4gRXhpc3RpbmcgbGF5b3V0CisgICAgICAgIHRl
c3RzIHdlcmUgYWJsZSB0byB2ZXJpZnkgdGhlIHJlZmFjdG9yaW5nIGRpZCBub3QgY2hhbmdlIGJl
aGF2aW9yLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29t
bW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxheWVyU2hvdWxkQmVBcHBlbmRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5h
bCk6CisKIDIwMTEtMTAtMjAgIFBldGVyIFJ5YmluICA8cGV0ZXIucnliaW5AZ21haWwuY29tPgog
CiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlaW1wbGVtZW50IHByb3RvY29sIGJhY2tlbmQvZnJv
bnRlbmQgc291cmNlIGdlbmVyYXRvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKaW5kZXggY2FlODZiNjVhNTJmYjUzNmI1ZGZhOTdmYjRkODYyZmZjMjkxOTJiMS4uODYzOTlj
ZGNiZGQxM2NmNzdmODkzNzcxZjM0YjQyZDJmM2I5ZDg2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwCkBAIC0yODcsNiArMjg3LDQzIEBAIHZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3TGF5ZXJzKCkKICAgICAgICAgY29weU9mZnNjcmVlblRleHR1cmVUb0Rp
c3BsYXkoKTsKIH0KIAordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNPbnRv
UmVuZGVyU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJM
aXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQoreworICAgIC8vIFVwZGF0ZSB0aGUgY29udGVu
dHMgb2YgdGhlIHJlbmRlciBzdXJmYWNlcy4gV2UgdHJhdmVyc2UgdGhlIHJlbmRlciBzdXJmYWNl
cworICAgIC8vIGZyb20gYmFjayB0byBmcm9udCB0byBndWFyYW50ZWUgdGhhdCBuZXN0ZWQgcmVu
ZGVyIHN1cmZhY2VzIGdldCByZW5kZXJlZCBpbgorICAgIC8vIHRoZSBjb3JyZWN0IG9yZGVyLgor
ICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgp
IC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgeworICAgICAgICBDQ0xh
eWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJm
YWNlSW5kZXhdLmdldCgpOworICAgICAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2Ug
PSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKyAgICAgICAgQVNTRVJUKHJl
bmRlclN1cmZhY2UpOworCisgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldFNraXBzRHJhdyh0cnVl
KTsKKworICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLnNpemUoKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIFNraXAgY29tcGxldGVseSB0cmFuc3Bh
cmVudCByZW5kZXIgc3VyZmFjZXMuCisgICAgICAgIGlmICghcmVuZGVyU3VyZmFjZS0+ZHJhd09w
YWNpdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICh1c2VSZW5kZXJT
dXJmYWNlKHJlbmRlclN1cmZhY2UpKSB7CisgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRT
a2lwc0RyYXcoZmFsc2UpOworCisgICAgICAgICAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVyICE9
IHJvb3REcmF3TGF5ZXIpIHsKKyAgICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBt
X2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOworICAg
ICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+Y2xlYXJDb2xvcigw
LCAwLCAwLCAwKSk7CisgICAgICAgICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250
ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCkpOworICAgICAg
ICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Y29uc3QgQ0NMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgp
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8
IGxheWVyTGlzdC5zaXplKCk7ICsrbGF5ZXJJbmRleCkKKyAgICAgICAgICAgICAgICBkcmF3TGF5
ZXIobGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpLCByZW5kZXJTdXJmYWNlKTsKKyAgICAgICAg
fQorICAgIH0KK30KKworCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0lu
dGVybmFsKCkKIHsKICAgICBpZiAodmlld3BvcnRTaXplKCkuaXNFbXB0eSgpIHx8ICFyb290TGF5
ZXIoKSkKQEAgLTM0MCwzOSArMzc3LDkgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdMYXllcnNJbnRlcm5hbCgpCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5i
bGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9N
SU5VU19TUkNfQUxQSEEpKTsKICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmVu
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CiAKLSAgICAvLyBVcGRhdGUg
dGhlIGNvbnRlbnRzIG9mIHRoZSByZW5kZXIgc3VyZmFjZXMuIFdlIHRyYXZlcnNlIHRoZSBhcnJh
eSBmcm9tCi0gICAgLy8gYmFjayB0byBmcm9udCB0byBndWFyYW50ZWUgdGhhdCBuZXN0ZWQgcmVu
ZGVyIHN1cmZhY2VzIGdldCByZW5kZXJlZCBpbiB0aGUKLSAgICAvLyBjb3JyZWN0IG9yZGVyLgot
ICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgp
IC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgewotICAgICAgICBDQ0xh
eWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJm
YWNlSW5kZXhdLmdldCgpOwotICAgICAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2Ug
PSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKLSAgICAgICAgQVNTRVJUKHJl
bmRlclN1cmZhY2UpOwotCi0gICAgICAgIHJlbmRlclN1cmZhY2UtPnNldFNraXBzRHJhdyh0cnVl
KTsKLQotICAgICAgICAvLyBSZW5kZXIgc3VyZmFjZXMgd2hvc2UgZHJhd2FibGUgYXJlYSBoYXMg
emVybyB3aWR0aCBvciBoZWlnaHQKLSAgICAgICAgLy8gd2lsbCBoYXZlIG5vIGxheWVycyBhc3Nv
Y2lhdGVkIHdpdGggdGhlbSBhbmQgc2hvdWxkIGJlIHNraXBwZWQuCi0gICAgICAgIGlmICghcmVu
ZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgLy8gU2tpcCBjb21wbGV0ZWx5IHRyYW5zcGFyZW50IHJlbmRlciBzdXJmYWNlcy4K
LSAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5kcmF3T3BhY2l0eSgpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgaWYgKHVzZVJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSkp
IHsKLSAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldFNraXBzRHJhdyhmYWxzZSk7Ci0KLSAg
ICAgICAgICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXIgIT0gcm9vdERyYXdMYXllcikgewotICAg
ICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7Ci0gICAgICAgICAgICAgICAgR0xDKG1fY29u
dGV4dC5nZXQoKSwgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDAsIDApKTsKLSAgICAgICAg
ICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29u
dGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKSk7Ci0gICAgICAgICAgICAgICAgR0xDKG1fY29udGV4
dC5nZXQoKSwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVT
VCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb25zdCBDQ0xheWVyTGlzdCYgbGF5
ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7Ci0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKyts
YXllckluZGV4KQotICAgICAgICAgICAgICAgIGRyYXdMYXllcihsYXllckxpc3RbbGF5ZXJJbmRl
eF0uZ2V0KCksIHJlbmRlclN1cmZhY2UpOwotICAgICAgICB9CisgICAgeworICAgICAgICBUUkFD
RV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWw6OmRyYXdM
YXllcnNPbnRvUmVuZGVyU3VyZmFjZXMiLCB0aGlzLCAwKTsKKyAgICAgICAgZHJhd0xheWVyc09u
dG9SZW5kZXJTdXJmYWNlcyhyb290RHJhd0xheWVyLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsK
ICAgICB9CiAKICAgICBpZiAobV9oZWFkc1VwRGlzcGxheS0+ZW5hYmxlZCgpKSB7CkBAIC01NTYs
MTUgKzU2Myw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIoQ0NMYXll
ckltcGwqIGxheWVyLCBDQ1JlbmRlclN1cmZhY2UqIHRhcmdlCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoIWxheWVyLT5kcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKCFsYXllci0+b3BhY2l0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bGF5ZXItPmJvdW5kcygpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgSW50UmVj
dCB0YXJnZXRTdXJmYWNlUmVjdCA9IGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkgPyBsYXll
ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpIDogbV9kZWZhdWx0UmVuZGVy
U3VyZmFjZS0+Y29udGVudFJlY3QoKTsKICAgICBpZiAobGF5ZXItPnVzZXNMYXllclNjaXNzb3Io
KSkgewogICAgICAgICBJbnRSZWN0IHNjaXNzb3JSZWN0ID0gbGF5ZXItPnNjaXNzb3JSZWN0KCk7
CkBAIC01NzksMjAgKzU3Nyw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5
ZXIoQ0NMYXllckltcGwqIGxheWVyLCBDQ1JlbmRlclN1cmZhY2UqIHRhcmdlCiAgICAgdmlzaWJs
ZUxheWVyUmVjdC5tb3ZlKHRvU2l6ZShsYXllci0+c2Nyb2xsUG9zaXRpb24oKSkpOwogICAgIGxh
eWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2libGVMYXllclJlY3QpOwogCi0gICAgLy8gVGhl
IGxheWVyIHNob3VsZCBub3QgYmUgZHJhd24gaWYgKDEpIGl0IGlzIG5vdCBkb3VibGUtc2lkZWQg
YW5kICgyKSB0aGUgYmFjayBvZiB0aGUgbGF5ZXIgaXMgZmFjaW5nIHRoZSBzY3JlZW4uCi0gICAg
Ly8gVGhpcyBzZWNvbmQgY29uZGl0aW9uIGlzIGNoZWNrZWQgYnkgY29tcHV0aW5nIHRoZSB0cmFu
c2Zvcm1lZCBub3JtYWwgb2YgdGhlIGxheWVyLgotICAgIGlmICghbGF5ZXItPmRvdWJsZVNpZGVk
KCkpIHsKLSAgICAgICAgRmxvYXRSZWN0IGxheWVyUmVjdChGbG9hdFBvaW50KDAsIDApLCBGbG9h
dFNpemUobGF5ZXItPmJvdW5kcygpKSk7Ci0gICAgICAgIEZsb2F0UXVhZCBtYXBwZWRMYXllciA9
IGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLm1hcFF1YWQoRmxvYXRRdWFkKGxheWVyUmVj
dCkpOwotICAgICAgICBGbG9hdFNpemUgaG9yaXpvbnRhbERpciA9IG1hcHBlZExheWVyLnAyKCkg
LSBtYXBwZWRMYXllci5wMSgpOwotICAgICAgICBGbG9hdFNpemUgdmVydGljYWxEaXIgPSBtYXBw
ZWRMYXllci5wNCgpIC0gbWFwcGVkTGF5ZXIucDEoKTsKLSAgICAgICAgRmxvYXRQb2ludDNEIHhB
eGlzKGhvcml6b250YWxEaXIud2lkdGgoKSwgaG9yaXpvbnRhbERpci5oZWlnaHQoKSwgMCk7Ci0g
ICAgICAgIEZsb2F0UG9pbnQzRCB5QXhpcyh2ZXJ0aWNhbERpci53aWR0aCgpLCB2ZXJ0aWNhbERp
ci5oZWlnaHQoKSwgMCk7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCB6QXhpcyA9IHhBeGlzLmNyb3Nz
KHlBeGlzKTsKLSAgICAgICAgaWYgKHpBeGlzLnooKSA8IDApCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgfQotCiAgICAgbGF5ZXItPmRyYXcodGhpcyk7CiAKICAgICAvLyBEcmF3IHRoZSBkZWJ1
ZyBib3JkZXIgaWYgdGhlcmUgaXMgb25lLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aAppbmRleCBiZTU3ZDZiNDY2M2IzOGIzMTkxNTRhMjg1M2Y0ZTM4MTQ0YTA3MjM0Li5mNGE0NmJk
ZjVmNzg5ZTRiN2U3NWNkYTEyNTBmY2I3MjI2NjM4ZGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uaApAQCAtMTYxLDYgKzE2MSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpbml0
aWFsaXplKCk7CiAKICAgICB2b2lkIGRyYXdMYXllcnNJbnRlcm5hbCgpOworICAgIHZvaWQgZHJh
d0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29u
c3QgQ0NMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIHZvaWQgZHJhd0xh
eWVyKENDTGF5ZXJJbXBsKiwgQ0NSZW5kZXJTdXJmYWNlKik7CiAKICAgICBNYW5hZ2VkVGV4dHVy
ZSogZ2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmNwcAppbmRleCA3Yzc2MGI5ZDY5YjA0NjMyODAzZDk2NzVhYmY3MmFkMmE2NTI0ZmIxLi5lZDNm
ZGZhNjZlNzYyODNmMWMzOTVjOGI0YjJjZDVjZDU3N2ZiNTdlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5jcHAKQEAgLTMwNSw4ICszMDUsNiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6
cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dAogICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSByZW5kZXJT
dXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKICAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZh
Y2UpOwogCi0gICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlz
KTsKLQogICAgICAgICAvLyBSZW5kZXIgc3VyZmFjZXMgd2hvc2UgZHJhd2FibGUgYXJlYSBoYXMg
emVybyB3aWR0aCBvciBoZWlnaHQKICAgICAgICAgLy8gd2lsbCBoYXZlIG5vIGxheWVycyBhc3Nv
Y2lhdGVkIHdpdGggdGhlbSBhbmQgc2hvdWxkIGJlIHNraXBwZWQuCiAgICAgICAgIGlmICghcmVu
ZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKQpAQCAtMzE1LDYgKzMxMywxNSBAQCB2b2lk
IENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdAogICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UtPmRyYXdPcGFj
aXR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICByZW5kZXJTdXJmYWNlTGF5
ZXItPnNldExheWVyVHJlZUhvc3QodGhpcyk7CisKKyAgICAgICAgLy8gTm90ZTogTWFza3Mgb25s
eSBleGlzdCBmb3IgbGF5ZXJzIHRoYXQgb3duIHJlbmRlciBzdXJmYWNlcy4gSWYgd2UgcmVhY2gg
dGhpcyBwb2ludCBpbiBjb2RlLCB3ZSBhbHJlYWR5CisgICAgICAgIC8vIGtub3cgdGhhdCBhdCBs
ZWFzdCBzb21ldGhpbmcgd2lsbCBiZSBkcmF3biBpbnRvIHRoaXMgcmVuZGVyIHN1cmZhY2UgKGFz
c2VydGVkIGp1c3QgYmVsb3cpLCBzbyB0aGUgbWFzayBzaG91bGQgYmUgcGFpbnRlZC4KKyAgICAg
ICAgaWYgKHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCkpIHsKKyAgICAgICAgICAgIHJl
bmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCktPnNldExheWVyVHJlZUhvc3QodGhpcyk7Cisg
ICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tM
YXllcigpLCBJbnRSZWN0KEludFBvaW50KCksIHJlbmRlclN1cmZhY2VMYXllci0+Y29udGVudEJv
dW5kcygpKSk7CisgICAgICAgIH0KKwogICAgICAgICBjb25zdCBMYXllckxpc3QmIGxheWVyTGlz
dCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwogICAgICAgICBBU1NFUlQobGF5ZXJMaXN0
LnNpemUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5k
ZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKQEAgLTMzMCw4ICszMzcsNiBA
QCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlz
dCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdAogICAgICAgICAgICAgaWYgKCFsYXllci0+b3BhY2l0
eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpZiAobGF5ZXIt
Pm1hc2tMYXllcigpKQotICAgICAgICAgICAgICAgIGxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0TGF5
ZXJUcmVlSG9zdCh0aGlzKTsKICAgICAgICAgICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkp
IHsKICAgICAgICAgICAgICAgICBsYXllci0+cmVwbGljYUxheWVyKCktPnNldExheWVyVHJlZUhv
c3QodGhpcyk7CiAgICAgICAgICAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFz
a0xheWVyKCkpCkBAIC0zNTEsOSArMzU2LDYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50
TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QKICAg
ICAgICAgICAgIHZpc2libGVMYXllclJlY3QubW92ZSh0b1NpemUobGF5ZXItPnNjcm9sbFBvc2l0
aW9uKCkpKTsKICAgICAgICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KGxheWVyLCB2aXNpYmxl
TGF5ZXJSZWN0KTsKIAotICAgICAgICAgICAgaWYgKExheWVyQ2hyb21pdW0qIG1hc2tMYXllciA9
IGxheWVyLT5tYXNrTGF5ZXIoKSkKLSAgICAgICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0
eShtYXNrTGF5ZXIsIEludFJlY3QoSW50UG9pbnQoKSwgbWFza0xheWVyLT5jb250ZW50Qm91bmRz
KCkpKTsKLQogICAgICAgICAgICAgaWYgKExheWVyQ2hyb21pdW0qIHJlcGxpY2FMYXllciA9IGxh
eWVyLT5yZXBsaWNhTGF5ZXIoKSkgewogICAgICAgICAgICAgICAgIHBhaW50Q29udGVudHNJZkRp
cnR5KHJlcGxpY2FMYXllciwgdmlzaWJsZUxheWVyUmVjdCk7CiAKQEAgLTM3NCw2ICszNzYsMTUg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29uc3Qg
TGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGEKICAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5s
YXllckxpc3QoKS5zaXplKCkgfHwgIXJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5KCkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAorICAgICAgICAvLyBOb3RlOiBNYXNrcyBvbmx5IGV4aXN0IGZv
ciBsYXllcnMgdGhhdCBvd24gcmVuZGVyIHN1cmZhY2VzLiBJZiB3ZSByZWFjaCB0aGlzIHBvaW50
IGluIGNvZGUsIHdlIGFscmVhZHkKKyAgICAgICAgLy8ga25vdyB0aGF0IGF0IGxlYXN0IHNvbWV0
aGluZyB3aWxsIGJlIGRyYXduIGludG8gdGhpcyByZW5kZXIgc3VyZmFjZSAoYXNzZXJ0ZWQganVz
dCBiZWxvdyksIHNvIHRoZSBtYXNrIHNob3VsZCBiZSB1cGRhdGVkLgorICAgICAgICAvLyBUaGUg
c2FtZSBpcyB0cnVlIGZvciB0aGUgcmVuZGVyIHN1cmZhY2UncyByZXBsaWNhIGxheWVyIGFzIHdl
bGwuCisgICAgICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpKQorICAgICAg
ICAgICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhyZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tM
YXllcigpLCBjb250ZXh0LCBhbGxvY2F0b3IpOworCisgICAgICAgIGlmIChyZW5kZXJTdXJmYWNl
TGF5ZXItPnJlcGxpY2FMYXllcigpICYmIHJlbmRlclN1cmZhY2VMYXllci0+cmVwbGljYUxheWVy
KCktPm1hc2tMYXllcigpKQorICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhy
ZW5kZXJTdXJmYWNlTGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSwgY29udGV4dCwg
YWxsb2NhdG9yKTsKKwogICAgICAgICBjb25zdCBMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRl
clN1cmZhY2UtPmxheWVyTGlzdCgpOwogICAgICAgICBBU1NFUlQobGF5ZXJMaXN0LnNpemUoKSk7
CiAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXll
ckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKQEAgLTM5NCw4ICs0MDUsNiBAQCB2b2lkIEND
TGF5ZXJUcmVlSG9zdDo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhMYXllckNocm9taXVtKiBs
YXllciwgR3JhcGhpY3NDbwogICAgIGlmICghbGF5ZXItPm9wYWNpdHkoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKGxheWVyLT5tYXNrTGF5ZXIoKSkKLSAgICAgICAgdXBkYXRlQ29tcG9z
aXRvclJlc291cmNlcyhsYXllci0+bWFza0xheWVyKCksIGNvbnRleHQsIGFsbG9jYXRvcik7CiAg
ICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkKICAgICAgICAgdXBkYXRlQ29tcG9zaXRvclJl
c291cmNlcyhsYXllci0+cmVwbGljYUxheWVyKCksIGNvbnRleHQsIGFsbG9jYXRvcik7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCmluZGV4IGNjMDM4MGNiYmY1
ZTQ1ZWFkNmFmMTkwODkwMjM4MWFjMmFmMTY2ZDYuLmM2MTU2YmNmMTZiZTA5NzM3NzIxNjA5OGNh
ODQxZjlmNTJhYmU4MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9u
LmNwcApAQCAtODUsNiArODUsMzkgQEAgc3RhdGljIGJvb2wgaXNTY2FsZU9yVHJhbnNsYXRpb24o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG0pCiAKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUg
TGF5ZXJUeXBlPgorYm9vbCBsYXllclNob3VsZEJlQXBwZW5kZWQoTGF5ZXJUeXBlKiBsYXllcikK
K3sKKyAgICAvLyBMYXllcnMgY2FuIGJlIHNraXBwZWQgaWYgYW55IG9mIHRoZXNlIGNvbmRpdGlv
bnMgYXJlIG1ldC4KKyAgICAvLyAgIC0gZG9lcyBub3QgZHJhdyBjb250ZW50LgorICAgIC8vICAg
LSBpcyB0cmFuc3BhcmVudAorICAgIC8vICAgLSBoYXMgZW1wdHkgYm91bmRzCisgICAgLy8gICAt
IHRoZSBsYXllciBpcyBub3QgZG91YmxlLXNpZGVkLCBidXQgaXRzIGJhY2sgZmFjZSBpcyB2aXNp
YmxlLgorICAgIC8vCisgICAgLy8gU29tZSBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgbmVlZCB0byBi
ZSBjb21wdXRlZCBhdCBhIGxhdGVyIHBvaW50IGFmdGVyIHRoZSByZWN1cnNpb24gaXMgZmluaXNo
ZWQuCisgICAgLy8gICAtIHRoZSBpbnRlcnNlY3Rpb24gb2YgcmVuZGVyIHN1cmZhY2UgY29udGVu
dCBhbmQgbGF5ZXIgc2Npc3NvciBpcyBlbXB0eQorICAgIC8vICAgLSB0aGUgdmlzaWJsZUxheWVy
UmVjdCBpcyBlbXB0eQorCisgICAgaWYgKCFsYXllci0+ZHJhd3NDb250ZW50KCkgfHwgIWxheWVy
LT5vcGFjaXR5KCkgfHwgbGF5ZXItPmJvdW5kcygpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgLy8gVGhlIGxheWVyIHNob3VsZCBub3QgYmUgZHJhd24gaWYgKDEpIGl0
IGlzIG5vdCBkb3VibGUtc2lkZWQgYW5kICgyKSB0aGUgYmFjayBvZiB0aGUgbGF5ZXIgaXMgZmFj
aW5nIHRoZSBzY3JlZW4uCisgICAgLy8gVGhpcyBzZWNvbmQgY29uZGl0aW9uIGlzIGNoZWNrZWQg
YnkgY29tcHV0aW5nIHRoZSB0cmFuc2Zvcm1lZCBub3JtYWwgb2YgdGhlIGxheWVyLgorICAgIGlm
ICghbGF5ZXItPmRvdWJsZVNpZGVkKCkpIHsKKyAgICAgICAgRmxvYXRSZWN0IGxheWVyUmVjdChG
bG9hdFBvaW50KDAsIDApLCBGbG9hdFNpemUobGF5ZXItPmJvdW5kcygpKSk7CisgICAgICAgIEZs
b2F0UXVhZCBtYXBwZWRMYXllciA9IGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLm1hcFF1
YWQoRmxvYXRRdWFkKGxheWVyUmVjdCkpOworICAgICAgICBGbG9hdFNpemUgaG9yaXpvbnRhbERp
ciA9IG1hcHBlZExheWVyLnAyKCkgLSBtYXBwZWRMYXllci5wMSgpOworICAgICAgICBGbG9hdFNp
emUgdmVydGljYWxEaXIgPSBtYXBwZWRMYXllci5wNCgpIC0gbWFwcGVkTGF5ZXIucDEoKTsKKyAg
ICAgICAgRmxvYXRQb2ludDNEIHhBeGlzKGhvcml6b250YWxEaXIud2lkdGgoKSwgaG9yaXpvbnRh
bERpci5oZWlnaHQoKSwgMCk7CisgICAgICAgIEZsb2F0UG9pbnQzRCB5QXhpcyh2ZXJ0aWNhbERp
ci53aWR0aCgpLCB2ZXJ0aWNhbERpci5oZWlnaHQoKSwgMCk7CisgICAgICAgIEZsb2F0UG9pbnQz
RCB6QXhpcyA9IHhBeGlzLmNyb3NzKHlBeGlzKTsKKyAgICAgICAgaWYgKHpBeGlzLnooKSA8IDAp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKIC8vIFJlY3Vyc2l2ZWx5IHdhbGtzIHRoZSBsYXllciB0cmVlIHN0YXJ0aW5nIGF0IHRoZSBn
aXZlbiBub2RlIGFuZCBjb21wdXRlcyBhbGwgdGhlCiAvLyBuZWNlc3NhcnkgdHJhbnNmb3JtYXRp
b25zLCBzY2lzc29yIHJlY3RhbmdsZXMsIHJlbmRlciBzdXJmYWNlcywgZXRjLgogdGVtcGxhdGU8
dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwgdHlwZW5hbWUg
TGF5ZXJTb3J0ZXI+CkBAIC0zMjksOSArMzYyLDEyIEBAIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVy
CiAgICAgc3VibGF5ZXJNYXRyaXgudHJhbnNsYXRlM2QoLWJvdW5kcy53aWR0aCgpICogMC41LCAt
Ym91bmRzLmhlaWdodCgpICogMC41LCAwKTsKIAogICAgIExheWVyTGlzdCYgZGVzY2VuZGFudHMg
PSAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSA/IGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmxheWVy
TGlzdCgpIDogbGF5ZXJMaXN0KTsKLSAgICBkZXNjZW5kYW50cy5hcHBlbmQobGF5ZXIpOwogCi0g
ICAgdW5zaWduZWQgdGhpc0xheWVySW5kZXggPSBkZXNjZW5kYW50cy5zaXplKCkgLSAxOworICAg
IC8vIEFueSBsYXllcnMgdGhhdCBhcmUgYXBwZW5kZWQgYWZ0ZXIgdGhpcyBwb2ludCBhcmUgaW4g
dGhlIGxheWVyJ3Mgc3VidHJlZSBhbmQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBzb3J0aW5n
IHByb2Nlc3MuCisgICAgdW5zaWduZWQgc29ydGluZ1N0YXJ0SW5kZXggPSBkZXNjZW5kYW50cy5z
aXplKCk7CisKKyAgICBpZiAobGF5ZXJTaG91bGRCZUFwcGVuZGVkKGxheWVyKSkKKyAgICAgICAg
ZGVzY2VuZGFudHMuYXBwZW5kKGxheWVyKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgTGF5ZXJUeXBlKiBjaGls
ZCA9IGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpOwpAQCAtNDA4LDggKzQ0NCw4IEBAIHN0YXRp
YyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVy
VHlwZSogbGF5ZXIsIExheWVyCiAgICAgLy8gSWYgcHJlc2VydmVzLTNkIHRoZW4gc29ydCBhbGwg
dGhlIGRlc2NlbmRhbnRzIGluIDNEIHNvIHRoYXQgdGhleSBjYW4gYmUKICAgICAvLyBkcmF3biBm
cm9tIGJhY2sgdG8gZnJvbnQuIElmIHRoZSBwcmVzZXJ2ZXMtM2QgcHJvcGVydHkgaXMgYWxzbyBz
ZXQgb24gdGhlIHBhcmVudCB0aGVuCiAgICAgLy8gc2tpcCB0aGUgc29ydGluZyBhcyB0aGUgcGFy
ZW50IHdpbGwgc29ydCBhbGwgdGhlIGRlc2NlbmRhbnRzIGFueXdheS4KLSAgICBpZiAobGF5ZXIt
PnByZXNlcnZlczNEKCkgJiYgKCFsYXllci0+cGFyZW50KCkgfHwgIWxheWVyLT5wYXJlbnQoKS0+
cHJlc2VydmVzM0QoKSkpCi0gICAgICAgIHNvcnRMYXllcnMoJmRlc2NlbmRhbnRzLmF0KHRoaXNM
YXllckluZGV4KSwgZGVzY2VuZGFudHMuZW5kKCksIGxheWVyU29ydGVyKTsKKyAgICBpZiAoZGVz
Y2VuZGFudHMuc2l6ZSgpICYmIGxheWVyLT5wcmVzZXJ2ZXMzRCgpICYmICghbGF5ZXItPnBhcmVu
dCgpIHx8ICFsYXllci0+cGFyZW50KCktPnByZXNlcnZlczNEKCkpKQorICAgICAgICBzb3J0TGF5
ZXJzKCZkZXNjZW5kYW50cy5hdChzb3J0aW5nU3RhcnRJbmRleCksIGRlc2NlbmRhbnRzLmVuZCgp
LCBsYXllclNvcnRlcik7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxh
dGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIExheWVy
Q2hyb21pdW0qIHJvb3RMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1h
dHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVj
dG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBsYXllckxpc3QsIGludCBtYXhUZXh0dXJlU2l6
ZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112068</attachid>
            <date>2011-10-21 21:09:25 -0700</date>
            <delta_ts>2011-10-24 11:46:47 -0700</delta_ts>
            <desc>cleaned up a lot more</desc>
            <filename>bug-70057-20111021210924.patch</filename>
            <type>text/plain</type>
            <size>25294</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTgwNzcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyZWEyZmM5YTJjMDMzODQx
MDRkMDhlZWY5MTQzNDU4NWUzZTNiNDFhLi42ZjAwNGQxYmY1YjZkYTc5NzM4MTViYThmYjFkODg0
MDkxOGJiMTVmIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMTAtMjEgIFNoYXdu
IFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBS
ZWZhY3RvciBwYWludGluZy91cGRhdGluZy9kcmF3aW5nIGNvZGUuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDA1NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcmVmYWN0b3Jpbmcgc2VwYXJhdGVz
IHRoZSAiZWFybHkgZXhpdHMiIGZyb20gdGhlIGFjdHVhbCBsb29wCisgICAgICAgIHRoYXQgZHJh
d3MgbGF5ZXJzLiBBcyBwYXJ0IG9mIHRoaXMsIGl0IHdhcyBhbHNvIGFwcHJvcHJpYXRlIHRvCisg
ICAgICAgIGNsZWFuIHVwIHRoZSB3YXkgdGhhdCBtYXNrcyBhbmQgcmVwbGljYXMgYXJlIGRlYWx0
IHdpdGggd2hlbgorICAgICAgICBwYWludGluZyBhbmQgdXBkYXRpbmcuIFRoZSBwdXJwb3NlIG9m
IGFsbCB0aGlzIGlzIHRvIG1ha2UgdGhpbmdzCisgICAgICAgIGVhc2llciB0byB0ZXN0LCBhbmQg
Zm9yIGEgc2Npc3NvcmluZyBvcHRpbWl6YXRpb24gdGhhdCBuZWVkcyB0bworICAgICAgICBrbm93
IGV4YXRseSB3aGF0IGdldHMgZHJhd24uIEV4aXN0aW5nIGxheW91dCB0ZXN0cyB3ZXJlIGFibGUg
dG8KKyAgICAgICAgdmVyaWZ5IHRoZSByZWZhY3RvcmluZyBkaWQgbm90IGNoYW5nZSBiZWhhdmlv
ci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdMYXllcnNPbnRvUmVuZGVyU3VyZmFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTWFza1Jlc291cmNl
c0ZvclJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp1
cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpsYXllclNob3VsZEJlQXBwZW5kZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oOgor
CiAyMDExLTEwLTIwICBQZXRlciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KIAogICAg
ICAgICBXZWIgSW5zcGVjdG9yOiByZWltcGxlbWVudCBwcm90b2NvbCBiYWNrZW5kL2Zyb250ZW5k
IHNvdXJjZSBnZW5lcmF0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmlu
ZGV4IGNhZTg2YjY1YTUyZmI1MzZiNWRmYTk3ZmI0ZDg2MmZmYzI5MTkyYjEuLjkwODAzYjNkMTY1
ZTYyN2VlOTMxNDI3YTQyODVhM2Y4Njk0ZWY5ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcApAQCAtMjg3LDYgKzI4Nyw0MyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd0xheWVycygpCiAgICAgICAgIGNvcHlPZmZzY3JlZW5UZXh0dXJlVG9EaXNwbGF5
KCk7CiB9CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRl
clN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3sKKyAgICAvLyBVcGRhdGUgdGhlIGNvbnRlbnRzIG9m
IHRoZSByZW5kZXIgc3VyZmFjZXMuIFdlIHRyYXZlcnNlIHRoZSByZW5kZXIgc3VyZmFjZXMKKyAg
ICAvLyBmcm9tIGJhY2sgdG8gZnJvbnQgdG8gZ3VhcmFudGVlIHRoYXQgbmVzdGVkIHJlbmRlciBz
dXJmYWNlcyBnZXQgcmVuZGVyZWQgaW4KKyAgICAvLyB0aGUgY29ycmVjdCBvcmRlci4KKyAgICBm
b3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7
IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKKyAgICAgICAgQ0NMYXllcklt
cGwqIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUlu
ZGV4XS5nZXQoKTsKKyAgICAgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVu
ZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgICAgIEFTU0VSVChyZW5kZXJT
dXJmYWNlKTsKKworICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRTa2lwc0RyYXcodHJ1ZSk7CisK
KyAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKS5zaXplKCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBTa2lwIGNvbXBsZXRlbHkgdHJhbnNwYXJlbnQg
cmVuZGVyIHN1cmZhY2VzLgorICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAodXNlUmVuZGVyU3VyZmFj
ZShyZW5kZXJTdXJmYWNlKSkgeworICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0U2tpcHNE
cmF3KGZhbHNlKTsKKworICAgICAgICAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllciAhPSByb290
RHJhd0xheWVyKSB7CisgICAgICAgICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250
ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKKyAgICAgICAg
ICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwg
MCwgMCkpOworICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+
Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpKTsKKyAgICAgICAgICAg
ICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRl
eHQzRDo6U0NJU1NPUl9URVNUKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnN0
IENDTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXll
ckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpCisgICAgICAgICAgICAgICAgZHJhd0xheWVyKGxh
eWVyTGlzdFtsYXllckluZGV4XS5nZXQoKSwgcmVuZGVyU3VyZmFjZSk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKKwogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNJbnRlcm5h
bCgpCiB7CiAgICAgaWYgKHZpZXdwb3J0U2l6ZSgpLmlzRW1wdHkoKSB8fCAhcm9vdExheWVyKCkp
CkBAIC0zNDAsMzkgKzM3Nyw5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5
ZXJzSW50ZXJuYWwoKQogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+YmxlbmRG
dW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNf
U1JDX0FMUEhBKSk7CiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5lbmFibGUo
R3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwogCi0gICAgLy8gVXBkYXRlIHRoZSBj
b250ZW50cyBvZiB0aGUgcmVuZGVyIHN1cmZhY2VzLiBXZSB0cmF2ZXJzZSB0aGUgYXJyYXkgZnJv
bQotICAgIC8vIGJhY2sgdG8gZnJvbnQgdG8gZ3VhcmFudGVlIHRoYXQgbmVzdGVkIHJlbmRlciBz
dXJmYWNlcyBnZXQgcmVuZGVyZWQgaW4gdGhlCi0gICAgLy8gY29ycmVjdCBvcmRlci4KLSAgICBm
b3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7
IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKLSAgICAgICAgQ0NMYXllcklt
cGwqIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUlu
ZGV4XS5nZXQoKTsKLSAgICAgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVu
ZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7Ci0gICAgICAgIEFTU0VSVChyZW5kZXJT
dXJmYWNlKTsKLQotICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRTa2lwc0RyYXcodHJ1ZSk7Ci0K
LSAgICAgICAgLy8gUmVuZGVyIHN1cmZhY2VzIHdob3NlIGRyYXdhYmxlIGFyZWEgaGFzIHplcm8g
d2lkdGggb3IgaGVpZ2h0Ci0gICAgICAgIC8vIHdpbGwgaGF2ZSBubyBsYXllcnMgYXNzb2NpYXRl
ZCB3aXRoIHRoZW0gYW5kIHNob3VsZCBiZSBza2lwcGVkLgotICAgICAgICBpZiAoIXJlbmRlclN1
cmZhY2UtPmxheWVyTGlzdCgpLnNpemUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgIC8vIFNraXAgY29tcGxldGVseSB0cmFuc3BhcmVudCByZW5kZXIgc3VyZmFjZXMuCi0gICAg
ICAgIGlmICghcmVuZGVyU3VyZmFjZS0+ZHJhd09wYWNpdHkoKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIGlmICh1c2VSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UpKSB7Ci0g
ICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRTa2lwc0RyYXcoZmFsc2UpOwotCi0gICAgICAg
ICAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVyICE9IHJvb3REcmF3TGF5ZXIpIHsKLSAgICAgICAg
ICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwotICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQu
Z2V0KCksIG1fY29udGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKSk7Ci0gICAgICAgICAgICAg
ICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQz
RDo6Q09MT1JfQlVGRkVSX0JJVCkpOwotICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0
KCksIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29uc3QgQ0NMYXllckxpc3QmIGxheWVyTGlz
dCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsrbGF5ZXJJ
bmRleCkKLSAgICAgICAgICAgICAgICBkcmF3TGF5ZXIobGF5ZXJMaXN0W2xheWVySW5kZXhdLmdl
dCgpLCByZW5kZXJTdXJmYWNlKTsKLSAgICAgICAgfQorICAgIHsKKyAgICAgICAgVFJBQ0VfRVZF
TlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsOjpkcmF3TGF5ZXJz
T250b1JlbmRlclN1cmZhY2VzIiwgdGhpcywgMCk7CisgICAgICAgIGRyYXdMYXllcnNPbnRvUmVu
ZGVyU3VyZmFjZXMocm9vdERyYXdMYXllciwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAg
fQogCiAgICAgaWYgKG1faGVhZHNVcERpc3BsYXktPmVuYWJsZWQoKSkgewpAQCAtNTU2LDQzICs1
NjMsMTcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihDQ0xheWVySW1w
bCogbGF5ZXIsIENDUmVuZGVyU3VyZmFjZSogdGFyZ2UKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGlmICghbGF5ZXItPmRyYXdzQ29udGVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoIWxheWVyLT5vcGFjaXR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBJbnRSZWN0IHZp
c2libGVMYXllclJlY3QgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVM
YXllclJlY3QobGF5ZXIpOworICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2libGVM
YXllclJlY3QpOwogCi0gICAgaWYgKGxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpCisgICAgaWYg
KHZpc2libGVMYXllclJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRS
ZWN0IHRhcmdldFN1cmZhY2VSZWN0ID0gbGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKSA/IGxh
eWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkgOiBtX2RlZmF1bHRSZW5k
ZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpOwotICAgIGlmIChsYXllci0+dXNlc0xheWVyU2Npc3Nv
cigpKSB7Ci0gICAgICAgIEludFJlY3Qgc2Npc3NvclJlY3QgPSBsYXllci0+c2Npc3NvclJlY3Qo
KTsKLSAgICAgICAgdGFyZ2V0U3VyZmFjZVJlY3QuaW50ZXJzZWN0KHNjaXNzb3JSZWN0KTsKLSAg
ICAgICAgaWYgKHRhcmdldFN1cmZhY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgc2V0U2Npc3NvclRvUmVjdChzY2lzc29yUmVjdCk7Ci0gICAgfSBlbHNlCisg
ICAgaWYgKGxheWVyLT51c2VzTGF5ZXJTY2lzc29yKCkpCisgICAgICAgIHNldFNjaXNzb3JUb1Jl
Y3QobGF5ZXItPnNjaXNzb3JSZWN0KCkpOworICAgIGVsc2UKICAgICAgICAgR0xDKG1fY29udGV4
dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RF
U1QpKTsKIAotICAgIEludFJlY3QgdmlzaWJsZUxheWVyUmVjdCA9IENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdCh0YXJnZXRTdXJmYWNlUmVjdCwgbGF5ZXIt
PmJvdW5kcygpLCBsYXllci0+Y29udGVudEJvdW5kcygpLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgp
KTsKLSAgICB2aXNpYmxlTGF5ZXJSZWN0Lm1vdmUodG9TaXplKGxheWVyLT5zY3JvbGxQb3NpdGlv
bigpKSk7Ci0gICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZUxheWVyUmVjdCk7
Ci0KLSAgICAvLyBUaGUgbGF5ZXIgc2hvdWxkIG5vdCBiZSBkcmF3biBpZiAoMSkgaXQgaXMgbm90
IGRvdWJsZS1zaWRlZCBhbmQgKDIpIHRoZSBiYWNrIG9mIHRoZSBsYXllciBpcyBmYWNpbmcgdGhl
IHNjcmVlbi4KLSAgICAvLyBUaGlzIHNlY29uZCBjb25kaXRpb24gaXMgY2hlY2tlZCBieSBjb21w
dXRpbmcgdGhlIHRyYW5zZm9ybWVkIG5vcm1hbCBvZiB0aGUgbGF5ZXIuCi0gICAgaWYgKCFsYXll
ci0+ZG91YmxlU2lkZWQoKSkgewotICAgICAgICBGbG9hdFJlY3QgbGF5ZXJSZWN0KEZsb2F0UG9p
bnQoMCwgMCksIEZsb2F0U2l6ZShsYXllci0+Ym91bmRzKCkpKTsKLSAgICAgICAgRmxvYXRRdWFk
IG1hcHBlZExheWVyID0gbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkubWFwUXVhZChGbG9h
dFF1YWQobGF5ZXJSZWN0KSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBob3Jpem9udGFsRGlyID0gbWFw
cGVkTGF5ZXIucDIoKSAtIG1hcHBlZExheWVyLnAxKCk7Ci0gICAgICAgIEZsb2F0U2l6ZSB2ZXJ0
aWNhbERpciA9IG1hcHBlZExheWVyLnA0KCkgLSBtYXBwZWRMYXllci5wMSgpOwotICAgICAgICBG
bG9hdFBvaW50M0QgeEF4aXMoaG9yaXpvbnRhbERpci53aWR0aCgpLCBob3Jpem9udGFsRGlyLmhl
aWdodCgpLCAwKTsKLSAgICAgICAgRmxvYXRQb2ludDNEIHlBeGlzKHZlcnRpY2FsRGlyLndpZHRo
KCksIHZlcnRpY2FsRGlyLmhlaWdodCgpLCAwKTsKLSAgICAgICAgRmxvYXRQb2ludDNEIHpBeGlz
ID0geEF4aXMuY3Jvc3MoeUF4aXMpOwotICAgICAgICBpZiAoekF4aXMueigpIDwgMCkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBsYXllci0+ZHJhdyh0aGlzKTsKIAogICAgIC8v
IERyYXcgdGhlIGRlYnVnIGJvcmRlciBpZiB0aGVyZSBpcyBvbmUuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oCmluZGV4IGJlNTdkNmI0NjYzYjM4YjMxOTE1NGEyODUzZjRlMzgxNDRh
MDcyMzQuLmY0YTQ2YmRmNWY3ODllNGI3ZTc1Y2RhMTI1MGZjYjcyMjY2MzhkYjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC0xNjEsNiArMTYxLDcgQEAgcHJpdmF0ZToK
ICAgICBib29sIGluaXRpYWxpemUoKTsKIAogICAgIHZvaWQgZHJhd0xheWVyc0ludGVybmFsKCk7
CisgICAgdm9pZCBkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290
RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAg
ICAgdm9pZCBkcmF3TGF5ZXIoQ0NMYXllckltcGwqLCBDQ1JlbmRlclN1cmZhY2UqKTsKIAogICAg
IE1hbmFnZWRUZXh0dXJlKiBnZXRPZmZzY3JlZW5MYXllclRleHR1cmUoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDdjNzYwYjlkNjliMDQ2MzI4MDNkOTY3NWFiZjcyYWQy
YTY1MjRmYjEuLjA3OTYyYTIzZGFjNDMzZDc5YTI5ZWU1ZTQyZTM3M2Q0NDFlODNhYzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMjk4LDYgKzI5OCwzMiBAQCBzdGF0aWMg
dm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eShMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgSW50
UmVjdCYgdmlzaWJsZUxheQogICAgIH0KIH0KIAordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50
TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qIHJlbmRlclN1cmZh
Y2VMYXllcikKK3sKKyAgICAvLyBOb3RlOiBNYXNrcyBhbmQgcmVwbGljYXMgb25seSBleGlzdCBm
b3IgbGF5ZXJzIHRoYXQgb3duIHJlbmRlciBzdXJmYWNlcy4gSWYgd2UgcmVhY2ggdGhpcyBwb2lu
dAorICAgIC8vIGluIGNvZGUsIHdlIGFscmVhZHkga25vdyB0aGF0IGF0IGxlYXN0IHNvbWV0aGlu
ZyB3aWxsIGJlIGRyYXduIGludG8gdGhpcyByZW5kZXIgc3VyZmFjZSwgc28gdGhlCisgICAgLy8g
bWFzayBhbmQgcmVwbGljYSBzaG91bGQgYmUgcGFpbnRlZC4KKworICAgIGlmIChyZW5kZXJTdXJm
YWNlTGF5ZXItPm1hc2tMYXllcigpKSB7CisgICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+bWFz
a0xheWVyKCktPnNldExheWVyVHJlZUhvc3QodGhpcyk7CisgICAgICAgIHBhaW50Q29udGVudHNJ
ZkRpcnR5KHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCksIEludFJlY3QoSW50UG9pbnQo
KSwgcmVuZGVyU3VyZmFjZUxheWVyLT5jb250ZW50Qm91bmRzKCkpKTsKKyAgICB9CisKKyAgICBM
YXllckNocm9taXVtKiByZXBsaWNhTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlcGxpY2FM
YXllcigpOworICAgIGlmIChyZXBsaWNhTGF5ZXIpIHsKKworICAgICAgICBJbnRSZWN0IHZpc2li
bGVMYXllclJlY3QgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVMYXll
clJlY3QocmVuZGVyU3VyZmFjZUxheWVyKTsKKworICAgICAgICByZXBsaWNhTGF5ZXItPnNldExh
eWVyVHJlZUhvc3QodGhpcyk7CisgICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlcGxpY2FM
YXllciwgdmlzaWJsZUxheWVyUmVjdCk7CisKKyAgICAgICAgaWYgKHJlcGxpY2FMYXllci0+bWFz
a0xheWVyKCkpIHsKKyAgICAgICAgICAgIHJlcGxpY2FMYXllci0+bWFza0xheWVyKCktPnNldExh
eWVyVHJlZUhvc3QodGhpcyk7CisgICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBs
aWNhTGF5ZXItPm1hc2tMYXllcigpLCBJbnRSZWN0KEludFBvaW50KCksIHJlcGxpY2FMYXllci0+
bWFza0xheWVyKCktPmNvbnRlbnRCb3VuZHMoKSkpOworICAgICAgICB9CisgICAgfQorfQorCiB2
b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKIHsKICAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1z
dXJmYWNlSW5kZXgpIHsKQEAgLTMwNSw4ICszMzEsNiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6
cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dAogICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSByZW5kZXJT
dXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKICAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZh
Y2UpOwogCi0gICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlz
KTsKLQogICAgICAgICAvLyBSZW5kZXIgc3VyZmFjZXMgd2hvc2UgZHJhd2FibGUgYXJlYSBoYXMg
emVybyB3aWR0aCBvciBoZWlnaHQKICAgICAgICAgLy8gd2lsbCBoYXZlIG5vIGxheWVycyBhc3Nv
Y2lhdGVkIHdpdGggdGhlbSBhbmQgc2hvdWxkIGJlIHNraXBwZWQuCiAgICAgICAgIGlmICghcmVu
ZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKQpAQCAtMzE1LDYgKzMzOSw5IEBAIHZvaWQg
Q0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0CiAgICAgICAgIGlmICghcmVuZGVyU3VyZmFjZS0+ZHJhd09wYWNp
dHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCisgICAgICAgIHJlbmRlclN1cmZhY2VMYXll
ci0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKKyAgICAgICAgcGFpbnRNYXNrQW5kUmVwbGljYUZv
clJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZUxheWVyKTsKKwogICAgICAgICBjb25zdCBMYXll
ckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwogICAgICAgICBB
U1NFUlQobGF5ZXJMaXN0LnNpemUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRl
eCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKQEAg
LTMyNyw0MyArMzU0LDI1IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVu
dHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0CiAKICAgICAgICAgICAg
IGxheWVyLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOwogCi0gICAgICAgICAgICBpZiAoIWxheWVy
LT5vcGFjaXR5KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlm
IChsYXllci0+bWFza0xheWVyKCkpCi0gICAgICAgICAgICAgICAgbGF5ZXItPm1hc2tMYXllcigp
LT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOwotICAgICAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNh
TGF5ZXIoKSkgewotICAgICAgICAgICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+c2V0TGF5
ZXJUcmVlSG9zdCh0aGlzKTsKLSAgICAgICAgICAgICAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXll
cigpLT5tYXNrTGF5ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgbGF5ZXItPnJlcGxpY2FMYXll
cigpLT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKGxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIEludFJlY3QgZGVmYXVsdENvbnRlbnRSZWN0
ID0gSW50UmVjdChyb290TGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKSwgdmlld3BvcnRTaXplKCkp
OwotCi0gICAgICAgICAgICBJbnRSZWN0IHRhcmdldFN1cmZhY2VSZWN0ID0gbGF5ZXItPnRhcmdl
dFJlbmRlclN1cmZhY2UoKSA/IGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRS
ZWN0KCkgOiBkZWZhdWx0Q29udGVudFJlY3Q7Ci0gICAgICAgICAgICBpZiAobGF5ZXItPnVzZXNM
YXllclNjaXNzb3IoKSkKLSAgICAgICAgICAgICAgICB0YXJnZXRTdXJmYWNlUmVjdC5pbnRlcnNl
Y3QobGF5ZXItPnNjaXNzb3JSZWN0KCkpOwotICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlTGF5
ZXJSZWN0ID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0
KHRhcmdldFN1cmZhY2VSZWN0LCBsYXllci0+Ym91bmRzKCksIGxheWVyLT5jb250ZW50Qm91bmRz
KCksIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOwotCi0gICAgICAgICAgICB2aXNpYmxlTGF5ZXJS
ZWN0Lm1vdmUodG9TaXplKGxheWVyLT5zY3JvbGxQb3NpdGlvbigpKSk7CisgICAgICAgICAgICBB
U1NFUlQobGF5ZXItPm9wYWNpdHkoKSk7CisgICAgICAgICAgICBBU1NFUlQoIWxheWVyLT5ib3Vu
ZHMoKS5pc0VtcHR5KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBJbnRSZWN0IHZpc2li
bGVMYXllclJlY3QgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVMYXll
clJlY3QobGF5ZXIpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBwYWludENvbnRlbnRzSWZE
aXJ0eShsYXllciwgdmlzaWJsZUxheWVyUmVjdCk7Ci0KLSAgICAgICAgICAgIGlmIChMYXllckNo
cm9taXVtKiBtYXNrTGF5ZXIgPSBsYXllci0+bWFza0xheWVyKCkpCi0gICAgICAgICAgICAgICAg
cGFpbnRDb250ZW50c0lmRGlydHkobWFza0xheWVyLCBJbnRSZWN0KEludFBvaW50KCksIG1hc2tM
YXllci0+Y29udGVudEJvdW5kcygpKSk7Ci0KLSAgICAgICAgICAgIGlmIChMYXllckNocm9taXVt
KiByZXBsaWNhTGF5ZXIgPSBsYXllci0+cmVwbGljYUxheWVyKCkpIHsKLSAgICAgICAgICAgICAg
ICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXIsIHZpc2libGVMYXllclJlY3QpOwot
Ci0gICAgICAgICAgICAgICAgaWYgKExheWVyQ2hyb21pdW0qIHJlcGxpY2FNYXNrTGF5ZXIgPSBy
ZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpKQotICAgICAgICAgICAgICAgICAgICBwYWludENvbnRl
bnRzSWZEaXJ0eShyZXBsaWNhTWFza0xheWVyLCBJbnRSZWN0KEludFBvaW50KCksIHJlcGxpY2FN
YXNrTGF5ZXItPmNvbnRlbnRCb3VuZHMoKSkpOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTWFza1Jlc291cmNlc0ZvclJl
bmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyLCBHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yKQoreworICAgIGlm
IChyZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpKQorICAgICAgICB1cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCksIGNvbnRleHQsIGFs
bG9jYXRvcik7CisKKyAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVyLT5yZXBsaWNhTGF5ZXIoKSAm
JiByZW5kZXJTdXJmYWNlTGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSkKKyAgICAg
ICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhyZW5kZXJTdXJmYWNlTGF5ZXItPnJlcGxpY2FM
YXllcigpLT5tYXNrTGF5ZXIoKSwgY29udGV4dCwgYWxsb2NhdG9yKTsKK30KKwogdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29uc3QgTGF5ZXJMaXN0JiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVy
ZUFsbG9jYXRvciogYWxsb2NhdG9yKQogewogICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJl
bmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1
cmZhY2VJbmRleCkgewpAQCAtMzc0LDYgKzM4Myw4IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1
cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxh
CiAgICAgICAgIGlmICghcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCkuc2l6ZSgpIHx8ICFyZW5k
ZXJTdXJmYWNlLT5kcmF3T3BhY2l0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKKyAgICAg
ICAgdXBkYXRlTWFza1Jlc291cmNlc0ZvclJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZUxheWVy
LCBjb250ZXh0LCBhbGxvY2F0b3IpOworCiAgICAgICAgIGNvbnN0IExheWVyTGlzdCYgbGF5ZXJM
aXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7CiAgICAgICAgIEFTU0VSVChsYXllckxp
c3Quc2l6ZSgpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJ
bmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsrbGF5ZXJJbmRleCkgewpAQCAtMzg4LDE5ICszOTks
MTIgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29u
c3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGEKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVw
ZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IpCiB7Ci0gICAgaWYg
KGxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgh
bGF5ZXItPm9wYWNpdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxheWVyLT5tYXNr
TGF5ZXIoKSkKLSAgICAgICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhsYXllci0+bWFza0xh
eWVyKCksIGNvbnRleHQsIGFsbG9jYXRvcik7Ci0gICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIo
KSkKLSAgICAgICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhsYXllci0+cmVwbGljYUxheWVy
KCksIGNvbnRleHQsIGFsbG9jYXRvcik7CisgICAgLy8gVGhlc2UgY29uZGl0aW9ucyBzaG91bGQg
aGF2ZSBhbHJlYWR5IGJlZW4gY2hlY2tlZCB3aGlsZSBjcmVhdGluZyB0aGUgcmVuZGVyIHN1cmZh
Y2UgbGF5ZXIgbGlzdHMuCisgICAgQVNTRVJUKCFsYXllci0+Ym91bmRzKCkuaXNFbXB0eSgpKTsK
KyAgICBBU1NFUlQobGF5ZXItPm9wYWNpdHkoKSk7CisgICAgQVNTRVJUKGxheWVyLT5kcmF3c0Nv
bnRlbnQoKSk7CiAKLSAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKQotICAgICAgICBsYXll
ci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb250ZXh0LCBhbGxvY2F0b3IpOworICAgIGxh
eWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIGFsbG9jYXRvcik7CiB9CiAK
IHZvaWQgQ0NMYXllclRyZWVIb3N0OjpjbGVhclBlbmRpbmdVcGRhdGUoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuaAppbmRleCAzZjJiMTIwMDIwYzMyZGU0ZWZhYmNlOGNmZjJiMzI3OTgyMzE3
YWIwLi40YThkY2E4YmNjYzJmZTA2Njc3MGJiNmRlMWJjYzc0ODcwZWFlZDk0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMTYzLDkgKzE2MywxMiBAQCBwcml2YXRlOgogICAgIHR5
cGVkZWYgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IExheWVyTGlzdDsKIAogICAgIHZv
aWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYpOworICAgIHZvaWQgcGFpbnRN
YXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSopOworCiAgICAgdm9p
ZCB1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSopOwogICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRv
clJlc291cmNlcyhjb25zdCBMYXllckxpc3QmLCBHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVB
bGxvY2F0b3IqKTsKICAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoTGF5ZXJDaHJv
bWl1bSosIEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciopOworICAgIHZvaWQg
dXBkYXRlTWFza1Jlc291cmNlc0ZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSosIEdyYXBo
aWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciopOwogICAgIHZvaWQgY2xlYXJQZW5kaW5n
VXBkYXRlKCk7CiAKICAgICBpbnQgbV9jb21wb3NpdG9ySWRlbnRpZmllcjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCmluZGV4IGNjMDM4MGNiYmY1ZTQ1ZWFkNmFm
MTkwODkwMjM4MWFjMmFmMTY2ZDYuLmZmOWMwMTg1MGIwODRkYjg1MzFhNGNhNWVlY2RhODZiNTA3
N2YzMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcApAQCAt
NjEsMTkgKzYxLDQzIEBAIEludFJlY3QgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVW
aXNpYmxlUmVjdChjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlCiAgICAgcmV0dXJuIGxheWVy
UmVjdDsKIH0KIAotSW50UmVjdCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2li
bGVMYXllclJlY3QoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QsIGNvbnN0IEludFNp
emUmIGJvdW5kcywgY29uc3QgSW50U2l6ZSYgY29udGVudEJvdW5kcywgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRpbGluZ1RyYW5zZm9ybSkKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlw
ZT4KK3N0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZVZpc2libGVMYXllclJlY3RJbnRlcm5hbChMYXll
clR5cGUqIGxheWVyKQogewotICAgIGlmICh0YXJnZXRTdXJmYWNlUmVjdC5pc0VtcHR5KCkgfHwg
Y29udGVudEJvdW5kcy5pc0VtcHR5KCkpCisgICAgQVNTRVJUKGxheWVyLT50YXJnZXRSZW5kZXJT
dXJmYWNlKCkpOworICAgIEludFJlY3QgdGFyZ2V0U3VyZmFjZVJlY3QgPSBsYXllci0+dGFyZ2V0
UmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpOworCisgICAgaWYgKGxheWVyLT51c2VzTGF5
ZXJTY2lzc29yKCkpCisgICAgICAgIHRhcmdldFN1cmZhY2VSZWN0LmludGVyc2VjdChsYXllci0+
c2Npc3NvclJlY3QoKSk7CisKKyAgICBpZiAodGFyZ2V0U3VyZmFjZVJlY3QuaXNFbXB0eSgpIHx8
IGxheWVyLT5jb250ZW50Qm91bmRzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdGFyZ2V0
U3VyZmFjZVJlY3Q7CiAKKyAgICAvLyBOb3RlIGNhcmVmdWxseSB0aGVzZSBhcmUgYWxpYXNlcwor
ICAgIGNvbnN0IEludFNpemUmIGJvdW5kcyA9IGxheWVyLT5ib3VuZHMoKTsKKyAgICBjb25zdCBJ
bnRTaXplJiBjb250ZW50Qm91bmRzID0gbGF5ZXItPmNvbnRlbnRCb3VuZHMoKTsKKwogICAgIGNv
bnN0IEludFJlY3QgbGF5ZXJCb3VuZFJlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIGNvbnRlbnRC
b3VuZHMpOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSA9IHRpbGluZ1RyYW5z
Zm9ybTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBsYXllci0+ZHJhd1Ry
YW5zZm9ybSgpOwogCiAgICAgdHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShib3VuZHMud2lkdGgo
KSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oY29udGVudEJvdW5kcy53aWR0aCgpKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy5oZWlnaHQoKSAvIHN0YXRpY19jYXN0PGRvdWJs
ZT4oY29udGVudEJvdW5kcy5oZWlnaHQoKSkpOwogICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLWNv
bnRlbnRCb3VuZHMud2lkdGgoKSAvIDIuMCwgLWNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjAp
OwogCi0gICAgcmV0dXJuIGNhbGN1bGF0ZVZpc2libGVSZWN0KHRhcmdldFN1cmZhY2VSZWN0LCBs
YXllckJvdW5kUmVjdCwgdHJhbnNmb3JtKTsKKyAgICBJbnRSZWN0IHZpc2libGVMYXllclJlY3Qg
PSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVSZWN0KHRhcmdldFN1cmZh
Y2VSZWN0LCBsYXllckJvdW5kUmVjdCwgdHJhbnNmb3JtKTsKKyAgICB2aXNpYmxlTGF5ZXJSZWN0
Lm1vdmUodG9TaXplKGxheWVyLT5zY3JvbGxQb3NpdGlvbigpKSk7CisKKyAgICByZXR1cm4gdmlz
aWJsZUxheWVyUmVjdDsKK30KKworSW50UmVjdCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZVZpc2libGVMYXllclJlY3QoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCit7CisgICAgcmV0dXJu
IGNhbGN1bGF0ZVZpc2libGVMYXllclJlY3RJbnRlcm5hbDxMYXllckNocm9taXVtPihsYXllcik7
Cit9CisKK0ludFJlY3QgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlTGF5
ZXJSZWN0KENDTGF5ZXJJbXBsKiBsYXllcikKK3sKKyAgICByZXR1cm4gY2FsY3VsYXRlVmlzaWJs
ZUxheWVyUmVjdEludGVybmFsPENDTGF5ZXJJbXBsPihsYXllcik7CiB9CiAKIHN0YXRpYyBib29s
IGlzU2NhbGVPclRyYW5zbGF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQpAQCAt
ODUsNiArMTA5LDM5IEBAIHN0YXRpYyBib29sIGlzU2NhbGVPclRyYW5zbGF0aW9uKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBtKQogCiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlw
ZT4KK2Jvb2wgbGF5ZXJTaG91bGRCZUFwcGVuZGVkKExheWVyVHlwZSogbGF5ZXIpCit7CisgICAg
Ly8gTGF5ZXJzIGNhbiBiZSBza2lwcGVkIGlmIGFueSBvZiB0aGVzZSBjb25kaXRpb25zIGFyZSBt
ZXQuCisgICAgLy8gICAtIGRvZXMgbm90IGRyYXcgY29udGVudC4KKyAgICAvLyAgIC0gaXMgdHJh
bnNwYXJlbnQKKyAgICAvLyAgIC0gaGFzIGVtcHR5IGJvdW5kcworICAgIC8vICAgLSB0aGUgbGF5
ZXIgaXMgbm90IGRvdWJsZS1zaWRlZCwgYnV0IGl0cyBiYWNrIGZhY2UgaXMgdmlzaWJsZS4KKyAg
ICAvLworICAgIC8vIFNvbWUgYWRkaXRpb25hbCBjb25kaXRpb25zIG5lZWQgdG8gYmUgY29tcHV0
ZWQgYXQgYSBsYXRlciBwb2ludCBhZnRlciB0aGUgcmVjdXJzaW9uIGlzIGZpbmlzaGVkLgorICAg
IC8vICAgLSB0aGUgaW50ZXJzZWN0aW9uIG9mIHJlbmRlciBzdXJmYWNlIGNvbnRlbnQgYW5kIGxh
eWVyIHNjaXNzb3IgaXMgZW1wdHkKKyAgICAvLyAgIC0gdGhlIHZpc2libGVMYXllclJlY3QgaXMg
ZW1wdHkKKworICAgIGlmICghbGF5ZXItPmRyYXdzQ29udGVudCgpIHx8ICFsYXllci0+b3BhY2l0
eSgpIHx8IGxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIFRoZSBsYXllciBzaG91bGQgbm90IGJlIGRyYXduIGlmICgxKSBpdCBpcyBub3Qg
ZG91YmxlLXNpZGVkIGFuZCAoMikgdGhlIGJhY2sgb2YgdGhlIGxheWVyIGlzIGZhY2luZyB0aGUg
c2NyZWVuLgorICAgIC8vIFRoaXMgc2Vjb25kIGNvbmRpdGlvbiBpcyBjaGVja2VkIGJ5IGNvbXB1
dGluZyB0aGUgdHJhbnNmb3JtZWQgbm9ybWFsIG9mIHRoZSBsYXllci4KKyAgICBpZiAoIWxheWVy
LT5kb3VibGVTaWRlZCgpKSB7CisgICAgICAgIEZsb2F0UmVjdCBsYXllclJlY3QoRmxvYXRQb2lu
dCgwLCAwKSwgRmxvYXRTaXplKGxheWVyLT5ib3VuZHMoKSkpOworICAgICAgICBGbG9hdFF1YWQg
bWFwcGVkTGF5ZXIgPSBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5tYXBRdWFkKEZsb2F0
UXVhZChsYXllclJlY3QpKTsKKyAgICAgICAgRmxvYXRTaXplIGhvcml6b250YWxEaXIgPSBtYXBw
ZWRMYXllci5wMigpIC0gbWFwcGVkTGF5ZXIucDEoKTsKKyAgICAgICAgRmxvYXRTaXplIHZlcnRp
Y2FsRGlyID0gbWFwcGVkTGF5ZXIucDQoKSAtIG1hcHBlZExheWVyLnAxKCk7CisgICAgICAgIEZs
b2F0UG9pbnQzRCB4QXhpcyhob3Jpem9udGFsRGlyLndpZHRoKCksIGhvcml6b250YWxEaXIuaGVp
Z2h0KCksIDApOworICAgICAgICBGbG9hdFBvaW50M0QgeUF4aXModmVydGljYWxEaXIud2lkdGgo
KSwgdmVydGljYWxEaXIuaGVpZ2h0KCksIDApOworICAgICAgICBGbG9hdFBvaW50M0QgekF4aXMg
PSB4QXhpcy5jcm9zcyh5QXhpcyk7CisgICAgICAgIGlmICh6QXhpcy56KCkgPCAwKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiAvLyBS
ZWN1cnNpdmVseSB3YWxrcyB0aGUgbGF5ZXIgdHJlZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gbm9k
ZSBhbmQgY29tcHV0ZXMgYWxsIHRoZQogLy8gbmVjZXNzYXJ5IHRyYW5zZm9ybWF0aW9ucywgc2Np
c3NvciByZWN0YW5nbGVzLCByZW5kZXIgc3VyZmFjZXMsIGV0Yy4KIHRlbXBsYXRlPHR5cGVuYW1l
IExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGUsIHR5cGVuYW1lIExheWVyU29y
dGVyPgpAQCAtMzI5LDkgKzM4NiwxMiBAQCBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllcgogICAgIHN1
YmxheWVyTWF0cml4LnRyYW5zbGF0ZTNkKC1ib3VuZHMud2lkdGgoKSAqIDAuNSwgLWJvdW5kcy5o
ZWlnaHQoKSAqIDAuNSwgMCk7CiAKICAgICBMYXllckxpc3QmIGRlc2NlbmRhbnRzID0gKGxheWVy
LT5yZW5kZXJTdXJmYWNlKCkgPyBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKSA6
IGxheWVyTGlzdCk7Ci0gICAgZGVzY2VuZGFudHMuYXBwZW5kKGxheWVyKTsKIAotICAgIHVuc2ln
bmVkIHRoaXNMYXllckluZGV4ID0gZGVzY2VuZGFudHMuc2l6ZSgpIC0gMTsKKyAgICAvLyBBbnkg
bGF5ZXJzIHRoYXQgYXJlIGFwcGVuZGVkIGFmdGVyIHRoaXMgcG9pbnQgYXJlIGluIHRoZSBsYXll
cidzIHN1YnRyZWUgYW5kIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgc29ydGluZyBwcm9jZXNz
LgorICAgIHVuc2lnbmVkIHNvcnRpbmdTdGFydEluZGV4ID0gZGVzY2VuZGFudHMuc2l6ZSgpOwor
CisgICAgaWYgKGxheWVyU2hvdWxkQmVBcHBlbmRlZChsYXllcikpCisgICAgICAgIGRlc2NlbmRh
bnRzLmFwcGVuZChsYXllcik7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVyLT5j
aGlsZHJlbigpLnNpemUoKTsgKytpKSB7CiAgICAgICAgIExheWVyVHlwZSogY2hpbGQgPSBsYXll
ci0+Y2hpbGRyZW4oKVtpXS5nZXQoKTsKQEAgLTQwOCw4ICs0NjgsOCBAQCBzdGF0aWMgdm9pZCBj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxh
eWVyLCBMYXllcgogICAgIC8vIElmIHByZXNlcnZlcy0zZCB0aGVuIHNvcnQgYWxsIHRoZSBkZXNj
ZW5kYW50cyBpbiAzRCBzbyB0aGF0IHRoZXkgY2FuIGJlCiAgICAgLy8gZHJhd24gZnJvbSBiYWNr
IHRvIGZyb250LiBJZiB0aGUgcHJlc2VydmVzLTNkIHByb3BlcnR5IGlzIGFsc28gc2V0IG9uIHRo
ZSBwYXJlbnQgdGhlbgogICAgIC8vIHNraXAgdGhlIHNvcnRpbmcgYXMgdGhlIHBhcmVudCB3aWxs
IHNvcnQgYWxsIHRoZSBkZXNjZW5kYW50cyBhbnl3YXkuCi0gICAgaWYgKGxheWVyLT5wcmVzZXJ2
ZXMzRCgpICYmICghbGF5ZXItPnBhcmVudCgpIHx8ICFsYXllci0+cGFyZW50KCktPnByZXNlcnZl
czNEKCkpKQotICAgICAgICBzb3J0TGF5ZXJzKCZkZXNjZW5kYW50cy5hdCh0aGlzTGF5ZXJJbmRl
eCksIGRlc2NlbmRhbnRzLmVuZCgpLCBsYXllclNvcnRlcik7CisgICAgaWYgKGRlc2NlbmRhbnRz
LnNpemUoKSAmJiBsYXllci0+cHJlc2VydmVzM0QoKSAmJiAoIWxheWVyLT5wYXJlbnQoKSB8fCAh
bGF5ZXItPnBhcmVudCgpLT5wcmVzZXJ2ZXMzRCgpKSkKKyAgICAgICAgc29ydExheWVycygmZGVz
Y2VuZGFudHMuYXQoc29ydGluZ1N0YXJ0SW5kZXgpLCBkZXNjZW5kYW50cy5lbmQoKSwgbGF5ZXJT
b3J0ZXIpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KExheWVyQ2hyb21pdW0qIGxheWVyLCBMYXllckNocm9taXVt
KiByb290TGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8UmVm
UHRyPExheWVyQ2hyb21pdW0+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gPiYgbGF5ZXJMaXN0LCBpbnQgbWF4VGV4dHVyZVNpemUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCmluZGV4IGU5MjQxZGRhNDUyMTI3MWRl
NWQ1OTJiZDllMjQ3OGVkNGVhYzRlZTMuLmI2NDFiNjcxMWZiZDI4ZDg2MmIxM2UxOWMwZTg2NWMz
OThjZTNmOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCkBAIC0z
OSwxMSArMzksMTEgQEAgY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiAKIGNsYXNzIENDTGF5
ZXJUcmVlSG9zdENvbW1vbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIEludFJlY3QgY2FsY3VsYXRl
VmlzaWJsZUxheWVyUmVjdChjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCwgY29uc3Qg
SW50U2l6ZSYgYm91bmRzLCBjb25zdCBJbnRTaXplJiBjb250ZW50Qm91bmRzLCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdGlsaW5nVHJhbnNmb3JtKTsKICAgICBzdGF0aWMgSW50UmVjdCBj
YWxjdWxhdGVWaXNpYmxlUmVjdChjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCwgY29u
c3QgSW50UmVjdCYgbGF5ZXJCb3VuZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7
CisgICAgc3RhdGljIEludFJlY3QgY2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdChMYXllckNocm9t
aXVtKik7CisgICAgc3RhdGljIEludFJlY3QgY2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdChDQ0xh
eWVySW1wbCopOwogCiAgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRW
aXNpYmlsaXR5KExheWVyQ2hyb21pdW0qLCBMYXllckNocm9taXVtKiByb290TGF5ZXIsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
PiYgbGF5ZXJMaXN0LCBpbnQgbWF4VGV4dHVyZVNpemUpOwotCiAgICAgc3RhdGljIHZvaWQgY2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KENDTGF5ZXJJbXBsKiwgQ0NMYXllcklt
cGwqIHJvb3RMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxS
ZWZQdHI8Q0NMYXllckltcGw+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxSZWZQ
dHI8Q0NMYXllckltcGw+ID4mIGxheWVyTGlzdCwgQ0NMYXllclNvcnRlciosIGludCBtYXhUZXh0
dXJlU2l6ZSk7CiAKICAgICBzdHJ1Y3QgU2Nyb2xsVXBkYXRlSW5mbyB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112219</attachid>
            <date>2011-10-24 11:46:52 -0700</date>
            <delta_ts>2011-10-24 14:11:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70057-20111024114650.patch</filename>
            <type>text/plain</type>
            <size>25325</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTgyNDUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1v
ZGUgMTAwNjQ0CmluZGV4IGVlNWMwMjEyMmExMmViNmJmZDFmYzc2OGU5ZGY0NTkwM2U1YjM3NTgu
LjhkNmVkY2Q5ZDQzYTA2ODQ2YmUwYTJiM2UwOTBmYjkzNDVmZDY0YjYKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDM0IEBACisyMDExLTEwLTI0ICBTaGF3biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0b3IgcGFpbnRpbmcvdXBkYXRpbmcvZHJhd2lu
ZyBjb2RlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzAwNTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHJlZmFjdG9yaW5nIHNlcGFyYXRlcyB0aGUgImVhcmx5IGV4aXRzIiBmcm9tIHRoZSBhY3R1
YWwgbG9vcAorICAgICAgICB0aGF0IGRyYXdzIGxheWVycy4gQXMgcGFydCBvZiB0aGlzLCBpdCB3
YXMgYWxzbyBhcHByb3ByaWF0ZSB0bworICAgICAgICBjbGVhbiB1cCB0aGUgd2F5IHRoYXQgbWFz
a3MgYW5kIHJlcGxpY2FzIGFyZSBkZWFsdCB3aXRoIHdoZW4KKyAgICAgICAgcGFpbnRpbmcgYW5k
IHVwZGF0aW5nLiBUaGUgcHVycG9zZSBvZiBhbGwgdGhpcyBpcyB0byBtYWtlIHRoaW5ncworICAg
ICAgICBlYXNpZXIgdG8gdGVzdCwgYW5kIGZvciBhIHNjaXNzb3Jpbmcgb3B0aW1pemF0aW9uIHRo
YXQgbmVlZHMgdG8KKyAgICAgICAga25vdyBleGF0bHkgd2hhdCBnZXRzIGRyYXduLiBFeGlzdGlu
ZyBsYXlvdXQgdGVzdHMgd2VyZSBhYmxlIHRvCisgICAgICAgIHZlcmlmeSB0aGUgcmVmYWN0b3Jp
bmcgZGlkIG5vdCBjaGFuZ2UgYmVoYXZpb3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFs
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tB
bmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3Q6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpsYXllclNob3VsZEJlQXBwZW5kZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlTGF5
ZXJSZWN0KToKKwogMjAxMS0xMC0yNCAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtTdHlsZXNdIEFkZGluZyBhIG5ldyBz
dHlsZSBydWxlIGJyZWFrcyB0aGluZ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwCmluZGV4IGJjYjMxNTMwOWZkMmRiZWIzM2E4NDA2ZDkxODZlMjVjNjkwZTA5ZDIuLjIzYjlj
ODI2OTRiMGM2NTlhZjQ1ZDA2Njg5OTYwN2M1Mzc1ZDk1ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcApAQCAtMzAxLDYgKzMwMSw0MyBAQCB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0xheWVycygpCiAgICAgICAgIGNvcHlPZmZzY3JlZW5UZXh0dXJlVG9E
aXNwbGF5KCk7CiB9CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250
b1JlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVy
TGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3sKKyAgICAvLyBVcGRhdGUgdGhlIGNvbnRl
bnRzIG9mIHRoZSByZW5kZXIgc3VyZmFjZXMuIFdlIHRyYXZlcnNlIHRoZSByZW5kZXIgc3VyZmFj
ZXMKKyAgICAvLyBmcm9tIGJhY2sgdG8gZnJvbnQgdG8gZ3VhcmFudGVlIHRoYXQgbmVzdGVkIHJl
bmRlciBzdXJmYWNlcyBnZXQgcmVuZGVyZWQgaW4KKyAgICAvLyB0aGUgY29ycmVjdCBvcmRlci4K
KyAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUo
KSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKKyAgICAgICAgQ0NM
YXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3Vy
ZmFjZUluZGV4XS5nZXQoKTsKKyAgICAgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNl
ID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgICAgIEFTU0VSVChy
ZW5kZXJTdXJmYWNlKTsKKworICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRTa2lwc0RyYXcodHJ1
ZSk7CisKKyAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKS5zaXplKCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBTa2lwIGNvbXBsZXRlbHkgdHJhbnNw
YXJlbnQgcmVuZGVyIHN1cmZhY2VzLgorICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UtPmRyYXdP
cGFjaXR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAodXNlUmVuZGVy
U3VyZmFjZShyZW5kZXJTdXJmYWNlKSkgeworICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0
U2tpcHNEcmF3KGZhbHNlKTsKKworICAgICAgICAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllciAh
PSByb290RHJhd0xheWVyKSB7CisgICAgICAgICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwg
bV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKKyAg
ICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmNsZWFyQ29sb3Io
MCwgMCwgMCwgMCkpOworICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29u
dGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpKTsKKyAgICAg
ICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGNvbnN0IENDTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3Qo
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXgg
PCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpCisgICAgICAgICAgICAgICAgZHJhd0xh
eWVyKGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKSwgcmVuZGVyU3VyZmFjZSk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKKwogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNJ
bnRlcm5hbCgpCiB7CiAgICAgaWYgKHZpZXdwb3J0U2l6ZSgpLmlzRW1wdHkoKSB8fCAhcm9vdExh
eWVyKCkpCkBAIC0zNTQsMzkgKzM5MSw5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3TGF5ZXJzSW50ZXJuYWwoKQogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+
YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVf
TUlOVVNfU1JDX0FMUEhBKSk7CiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5l
bmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwogCi0gICAgLy8gVXBkYXRl
IHRoZSBjb250ZW50cyBvZiB0aGUgcmVuZGVyIHN1cmZhY2VzLiBXZSB0cmF2ZXJzZSB0aGUgYXJy
YXkgZnJvbQotICAgIC8vIGJhY2sgdG8gZnJvbnQgdG8gZ3VhcmFudGVlIHRoYXQgbmVzdGVkIHJl
bmRlciBzdXJmYWNlcyBnZXQgcmVuZGVyZWQgaW4gdGhlCi0gICAgLy8gY29ycmVjdCBvcmRlci4K
LSAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUo
KSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKLSAgICAgICAgQ0NM
YXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3Vy
ZmFjZUluZGV4XS5nZXQoKTsKLSAgICAgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNl
ID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7Ci0gICAgICAgIEFTU0VSVChy
ZW5kZXJTdXJmYWNlKTsKLQotICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRTa2lwc0RyYXcodHJ1
ZSk7Ci0KLSAgICAgICAgLy8gUmVuZGVyIHN1cmZhY2VzIHdob3NlIGRyYXdhYmxlIGFyZWEgaGFz
IHplcm8gd2lkdGggb3IgaGVpZ2h0Ci0gICAgICAgIC8vIHdpbGwgaGF2ZSBubyBsYXllcnMgYXNz
b2NpYXRlZCB3aXRoIHRoZW0gYW5kIHNob3VsZCBiZSBza2lwcGVkLgotICAgICAgICBpZiAoIXJl
bmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLnNpemUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIC8vIFNraXAgY29tcGxldGVseSB0cmFuc3BhcmVudCByZW5kZXIgc3VyZmFjZXMu
Ci0gICAgICAgIGlmICghcmVuZGVyU3VyZmFjZS0+ZHJhd09wYWNpdHkoKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIGlmICh1c2VSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2Up
KSB7Ci0gICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRTa2lwc0RyYXcoZmFsc2UpOwotCi0g
ICAgICAgICAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVyICE9IHJvb3REcmF3TGF5ZXIpIHsKLSAg
ICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRpc2FibGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwotICAgICAgICAgICAgICAgIEdMQyhtX2Nv
bnRleHQuZ2V0KCksIG1fY29udGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKSk7Ci0gICAgICAg
ICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5jbGVhcihHcmFwaGljc0Nv
bnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCkpOwotICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRl
eHQuZ2V0KCksIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RF
U1QpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29uc3QgQ0NMYXllckxpc3QmIGxh
eWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsr
bGF5ZXJJbmRleCkKLSAgICAgICAgICAgICAgICBkcmF3TGF5ZXIobGF5ZXJMaXN0W2xheWVySW5k
ZXhdLmdldCgpLCByZW5kZXJTdXJmYWNlKTsKLSAgICAgICAgfQorICAgIHsKKyAgICAgICAgVFJB
Q0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsOjpkcmF3
TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzIiwgdGhpcywgMCk7CisgICAgICAgIGRyYXdMYXllcnNP
bnRvUmVuZGVyU3VyZmFjZXMocm9vdERyYXdMYXllciwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7
CiAgICAgfQogCiAgICAgaWYgKG1faGVhZHNVcERpc3BsYXktPmVuYWJsZWQoKSkgewpAQCAtNTcw
LDQzICs1NzcsMTcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihDQ0xh
eWVySW1wbCogbGF5ZXIsIENDUmVuZGVyU3VyZmFjZSogdGFyZ2UKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmICghbGF5ZXItPmRyYXdzQ29udGVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIWxheWVyLT5vcGFjaXR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBJbnRS
ZWN0IHZpc2libGVMYXllclJlY3QgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZp
c2libGVMYXllclJlY3Q8Q0NMYXllckltcGw+KGxheWVyKTsKKyAgICBsYXllci0+c2V0VmlzaWJs
ZUxheWVyUmVjdCh2aXNpYmxlTGF5ZXJSZWN0KTsKIAotICAgIGlmIChsYXllci0+Ym91bmRzKCku
aXNFbXB0eSgpKQorICAgIGlmICh2aXNpYmxlTGF5ZXJSZWN0LmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgSW50UmVjdCB0YXJnZXRTdXJmYWNlUmVjdCA9IGxheWVyLT50YXJnZXRS
ZW5kZXJTdXJmYWNlKCkgPyBsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVj
dCgpIDogbV9kZWZhdWx0UmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKTsKLSAgICBpZiAobGF5
ZXItPnVzZXNMYXllclNjaXNzb3IoKSkgewotICAgICAgICBJbnRSZWN0IHNjaXNzb3JSZWN0ID0g
bGF5ZXItPnNjaXNzb3JSZWN0KCk7Ci0gICAgICAgIHRhcmdldFN1cmZhY2VSZWN0LmludGVyc2Vj
dChzY2lzc29yUmVjdCk7Ci0gICAgICAgIGlmICh0YXJnZXRTdXJmYWNlUmVjdC5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHNldFNjaXNzb3JUb1JlY3Qoc2Npc3NvclJl
Y3QpOwotICAgIH0gZWxzZQorICAgIGlmIChsYXllci0+dXNlc0xheWVyU2Npc3NvcigpKQorICAg
ICAgICBzZXRTY2lzc29yVG9SZWN0KGxheWVyLT5zY2lzc29yUmVjdCgpKTsKKyAgICBlbHNlCiAg
ICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CiAKLSAgICBJbnRSZWN0IHZpc2libGVMYXllclJlY3Qg
PSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVMYXllclJlY3QodGFyZ2V0
U3VyZmFjZVJlY3QsIGxheWVyLT5ib3VuZHMoKSwgbGF5ZXItPmNvbnRlbnRCb3VuZHMoKSwgbGF5
ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgdmlzaWJsZUxheWVyUmVjdC5tb3ZlKHRvU2l6ZShs
YXllci0+c2Nyb2xsUG9zaXRpb24oKSkpOwotICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0
KHZpc2libGVMYXllclJlY3QpOwotCi0gICAgLy8gVGhlIGxheWVyIHNob3VsZCBub3QgYmUgZHJh
d24gaWYgKDEpIGl0IGlzIG5vdCBkb3VibGUtc2lkZWQgYW5kICgyKSB0aGUgYmFjayBvZiB0aGUg
bGF5ZXIgaXMgZmFjaW5nIHRoZSBzY3JlZW4uCi0gICAgLy8gVGhpcyBzZWNvbmQgY29uZGl0aW9u
IGlzIGNoZWNrZWQgYnkgY29tcHV0aW5nIHRoZSB0cmFuc2Zvcm1lZCBub3JtYWwgb2YgdGhlIGxh
eWVyLgotICAgIGlmICghbGF5ZXItPmRvdWJsZVNpZGVkKCkpIHsKLSAgICAgICAgRmxvYXRSZWN0
IGxheWVyUmVjdChGbG9hdFBvaW50KDAsIDApLCBGbG9hdFNpemUobGF5ZXItPmJvdW5kcygpKSk7
Ci0gICAgICAgIEZsb2F0UXVhZCBtYXBwZWRMYXllciA9IGxheWVyLT5zY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpLm1hcFF1YWQoRmxvYXRRdWFkKGxheWVyUmVjdCkpOwotICAgICAgICBGbG9hdFNpemUg
aG9yaXpvbnRhbERpciA9IG1hcHBlZExheWVyLnAyKCkgLSBtYXBwZWRMYXllci5wMSgpOwotICAg
ICAgICBGbG9hdFNpemUgdmVydGljYWxEaXIgPSBtYXBwZWRMYXllci5wNCgpIC0gbWFwcGVkTGF5
ZXIucDEoKTsKLSAgICAgICAgRmxvYXRQb2ludDNEIHhBeGlzKGhvcml6b250YWxEaXIud2lkdGgo
KSwgaG9yaXpvbnRhbERpci5oZWlnaHQoKSwgMCk7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCB5QXhp
cyh2ZXJ0aWNhbERpci53aWR0aCgpLCB2ZXJ0aWNhbERpci5oZWlnaHQoKSwgMCk7Ci0gICAgICAg
IEZsb2F0UG9pbnQzRCB6QXhpcyA9IHhBeGlzLmNyb3NzKHlBeGlzKTsKLSAgICAgICAgaWYgKHpB
eGlzLnooKSA8IDApCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgbGF5ZXItPmRy
YXcodGhpcyk7CiAKICAgICAvLyBEcmF3IHRoZSBkZWJ1ZyBib3JkZXIgaWYgdGhlcmUgaXMgb25l
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCBhMmY1NjZhZDQ5MDIwMzE5
NTdiNGY0ZmJjNzg4N2M5OTI5YzIxMTY0Li42NDZlYTZlNWM0NDhhNThjNjEyNDEzNDJiMGY5YTZl
YWRkYWVmNDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtMTYxLDYg
KzE2MSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpbml0aWFsaXplKCk7CiAKICAgICB2b2lkIGRy
YXdMYXllcnNJbnRlcm5hbCgpOworICAgIHZvaWQgZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNl
cyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1
cmZhY2VMYXllckxpc3QpOwogICAgIHZvaWQgZHJhd0xheWVyKENDTGF5ZXJJbXBsKiwgQ0NSZW5k
ZXJTdXJmYWNlKik7CiAKICAgICBNYW5hZ2VkVGV4dHVyZSogZ2V0T2Zmc2NyZWVuTGF5ZXJUZXh0
dXJlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCA3Yzc2MGI5ZDY5YjA0
NjMyODAzZDk2NzVhYmY3MmFkMmE2NTI0ZmIxLi4yOTU5OWM1NDkxNjAwZGM4NDZkYzAwYThhZWE3
ZWJlYzc4Zjk3NDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTI5OCw2
ICsyOTgsMzIgQEAgc3RhdGljIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoTGF5ZXJDaHJvbWl1
bSogbGF5ZXIsIGNvbnN0IEludFJlY3QmIHZpc2libGVMYXkKICAgICB9CiB9CiAKK3ZvaWQgQ0NM
YXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNo
cm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIpCit7CisgICAgLy8gTm90ZTogTWFza3MgYW5kIHJl
cGxpY2FzIG9ubHkgZXhpc3QgZm9yIGxheWVycyB0aGF0IG93biByZW5kZXIgc3VyZmFjZXMuIElm
IHdlIHJlYWNoIHRoaXMgcG9pbnQKKyAgICAvLyBpbiBjb2RlLCB3ZSBhbHJlYWR5IGtub3cgdGhh
dCBhdCBsZWFzdCBzb21ldGhpbmcgd2lsbCBiZSBkcmF3biBpbnRvIHRoaXMgcmVuZGVyIHN1cmZh
Y2UsIHNvIHRoZQorICAgIC8vIG1hc2sgYW5kIHJlcGxpY2Egc2hvdWxkIGJlIHBhaW50ZWQuCisK
KyAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKSkgeworICAgICAgICByZW5k
ZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOworICAg
ICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigp
LCBJbnRSZWN0KEludFBvaW50KCksIHJlbmRlclN1cmZhY2VMYXllci0+Y29udGVudEJvdW5kcygp
KSk7CisgICAgfQorCisgICAgTGF5ZXJDaHJvbWl1bSogcmVwbGljYUxheWVyID0gcmVuZGVyU3Vy
ZmFjZUxheWVyLT5yZXBsaWNhTGF5ZXIoKTsKKyAgICBpZiAocmVwbGljYUxheWVyKSB7CisKKyAg
ICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0PExheWVyQ2hyb21pdW0+KHJlbmRlclN1cmZhY2VMYXll
cik7CisKKyAgICAgICAgcmVwbGljYUxheWVyLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOworICAg
ICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXIsIHZpc2libGVMYXllclJlY3Qp
OworCisgICAgICAgIGlmIChyZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpKSB7CisgICAgICAgICAg
ICByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOworICAg
ICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkocmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKSwg
SW50UmVjdChJbnRQb2ludCgpLCByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLT5jb250ZW50Qm91
bmRzKCkpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBh
aW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3Qp
CiB7CiAgICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5z
aXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7CkBAIC0zMDUs
OCArMzMxLDYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25z
dCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QKICAgICAgICAgUmVuZGVyU3VyZmFj
ZUNocm9taXVtKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJm
YWNlKCk7CiAgICAgICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlKTsKIAotICAgICAgICByZW5kZXJT
dXJmYWNlTGF5ZXItPnNldExheWVyVHJlZUhvc3QodGhpcyk7Ci0KICAgICAgICAgLy8gUmVuZGVy
IHN1cmZhY2VzIHdob3NlIGRyYXdhYmxlIGFyZWEgaGFzIHplcm8gd2lkdGggb3IgaGVpZ2h0CiAg
ICAgICAgIC8vIHdpbGwgaGF2ZSBubyBsYXllcnMgYXNzb2NpYXRlZCB3aXRoIHRoZW0gYW5kIHNo
b3VsZCBiZSBza2lwcGVkLgogICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgp
LnNpemUoKSkKQEAgLTMxNSw2ICszMzksOSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRM
YXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdAogICAg
ICAgICBpZiAoIXJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5KCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAorICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPnNldExheWVyVHJlZUhvc3QodGhp
cyk7CisgICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKHJlbmRlclN1
cmZhY2VMYXllcik7CisKICAgICAgICAgY29uc3QgTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5k
ZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKICAgICAgICAgQVNTRVJUKGxheWVyTGlzdC5zaXplKCkp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5
ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KSB7CkBAIC0zMjcsMzkgKzM1NCwxMiBAQCB2b2lk
IENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdAogCiAgICAgICAgICAgICBsYXllci0+c2V0TGF5ZXJUcmVlSG9z
dCh0aGlzKTsKIAotICAgICAgICAgICAgaWYgKCFsYXllci0+b3BhY2l0eSgpKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBpZiAobGF5ZXItPm1hc2tMYXllcigpKQot
ICAgICAgICAgICAgICAgIGxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlz
KTsKLSAgICAgICAgICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkpIHsKLSAgICAgICAgICAg
ICAgICBsYXllci0+cmVwbGljYUxheWVyKCktPnNldExheWVyVHJlZUhvc3QodGhpcyk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkpCi0gICAg
ICAgICAgICAgICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPnNldExh
eWVyVHJlZUhvc3QodGhpcyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChsYXll
ci0+Ym91bmRzKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgICAgICBJbnRSZWN0IGRlZmF1bHRDb250ZW50UmVjdCA9IEludFJlY3Qocm9vdExheWVyKCkt
PnNjcm9sbFBvc2l0aW9uKCksIHZpZXdwb3J0U2l6ZSgpKTsKLQotICAgICAgICAgICAgSW50UmVj
dCB0YXJnZXRTdXJmYWNlUmVjdCA9IGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkgPyBsYXll
ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpIDogZGVmYXVsdENvbnRlbnRS
ZWN0OwotICAgICAgICAgICAgaWYgKGxheWVyLT51c2VzTGF5ZXJTY2lzc29yKCkpCi0gICAgICAg
ICAgICAgICAgdGFyZ2V0U3VyZmFjZVJlY3QuaW50ZXJzZWN0KGxheWVyLT5zY2lzc29yUmVjdCgp
KTsKLSAgICAgICAgICAgIEludFJlY3QgdmlzaWJsZUxheWVyUmVjdCA9IENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdCh0YXJnZXRTdXJmYWNlUmVjdCwgbGF5
ZXItPmJvdW5kcygpLCBsYXllci0+Y29udGVudEJvdW5kcygpLCBsYXllci0+ZHJhd1RyYW5zZm9y
bSgpKTsKLQotICAgICAgICAgICAgdmlzaWJsZUxheWVyUmVjdC5tb3ZlKHRvU2l6ZShsYXllci0+
c2Nyb2xsUG9zaXRpb24oKSkpOworICAgICAgICAgICAgQVNTRVJUKGxheWVyLT5vcGFjaXR5KCkp
OworICAgICAgICAgICAgQVNTRVJUKCFsYXllci0+Ym91bmRzKCkuaXNFbXB0eSgpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0PExheWVyQ2hyb21pdW0+KGxh
eWVyKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkobGF5
ZXIsIHZpc2libGVMYXllclJlY3QpOwotCi0gICAgICAgICAgICBpZiAoTGF5ZXJDaHJvbWl1bSog
bWFza0xheWVyID0gbGF5ZXItPm1hc2tMYXllcigpKQotICAgICAgICAgICAgICAgIHBhaW50Q29u
dGVudHNJZkRpcnR5KG1hc2tMYXllciwgSW50UmVjdChJbnRQb2ludCgpLCBtYXNrTGF5ZXItPmNv
bnRlbnRCb3VuZHMoKSkpOwotCi0gICAgICAgICAgICBpZiAoTGF5ZXJDaHJvbWl1bSogcmVwbGlj
YUxheWVyID0gbGF5ZXItPnJlcGxpY2FMYXllcigpKSB7Ci0gICAgICAgICAgICAgICAgcGFpbnRD
b250ZW50c0lmRGlydHkocmVwbGljYUxheWVyLCB2aXNpYmxlTGF5ZXJSZWN0KTsKLQotICAgICAg
ICAgICAgICAgIGlmIChMYXllckNocm9taXVtKiByZXBsaWNhTWFza0xheWVyID0gcmVwbGljYUxh
eWVyLT5tYXNrTGF5ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGly
dHkocmVwbGljYU1hc2tMYXllciwgSW50UmVjdChJbnRQb2ludCgpLCByZXBsaWNhTWFza0xheWVy
LT5jb250ZW50Qm91bmRzKCkpKTsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0K
QEAgLTM3NCw2ICszNzQsMTIgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUNvbXBvc2l0
b3JSZXNvdXJjZXMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGEKICAgICAgICAgaWYg
KCFyZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKS5zaXplKCkgfHwgIXJlbmRlclN1cmZhY2UtPmRy
YXdPcGFjaXR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICBpZiAocmVuZGVy
U3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKSkKKyAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0b3JS
ZXNvdXJjZXMocmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKSwgY29udGV4dCwgYWxsb2Nh
dG9yKTsKKyAgICAgICAgCisgICAgICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXItPnJlcGxpY2FM
YXllcigpICYmIHJlbmRlclN1cmZhY2VMYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigp
KQorICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhyZW5kZXJTdXJmYWNlTGF5
ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSwgY29udGV4dCwgYWxsb2NhdG9yKTsKKyAg
ICAgICAgCiAgICAgICAgIGNvbnN0IExheWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFj
ZS0+bGF5ZXJMaXN0KCk7CiAgICAgICAgIEFTU0VSVChsYXllckxpc3Quc2l6ZSgpKTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5z
aXplKCk7ICsrbGF5ZXJJbmRleCkgewpAQCAtMzg4LDE5ICszOTQsMTIgQEAgdm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29uc3QgTGF5ZXJMaXN0JiByZW5k
ZXJTdXJmYWNlTGEKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUNvbXBvc2l0b3JSZXNv
dXJjZXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBU
ZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IpCiB7Ci0gICAgaWYgKGxheWVyLT5ib3VuZHMoKS5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbGF5ZXItPm9wYWNpdHkoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxheWVyLT5tYXNrTGF5ZXIoKSkKLSAgICAgICAg
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhsYXllci0+bWFza0xheWVyKCksIGNvbnRleHQsIGFs
bG9jYXRvcik7Ci0gICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkKLSAgICAgICAgdXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcyhsYXllci0+cmVwbGljYUxheWVyKCksIGNvbnRleHQsIGFsbG9j
YXRvcik7CisgICAgLy8gVGhlc2UgY29uZGl0aW9ucyBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4g
Y2hlY2tlZCB3aGlsZSBjcmVhdGluZyB0aGUgcmVuZGVyIHN1cmZhY2UgbGF5ZXIgbGlzdHMuCisg
ICAgQVNTRVJUKCFsYXllci0+Ym91bmRzKCkuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobGF5ZXIt
Pm9wYWNpdHkoKSk7CisgICAgQVNTRVJUKGxheWVyLT5kcmF3c0NvbnRlbnQoKSk7CiAKLSAgICBp
ZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKQotICAgICAgICBsYXllci0+dXBkYXRlQ29tcG9zaXRv
clJlc291cmNlcyhjb250ZXh0LCBhbGxvY2F0b3IpOworICAgIGxheWVyLT51cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKGNvbnRleHQsIGFsbG9jYXRvcik7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVI
b3N0OjpjbGVhclBlbmRpbmdVcGRhdGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRl
eCBlNWRkYmI0MzUxYWI0YTZiNDJlYjUzNzcyOTcxMmEwNDU1ODc4MmQyLi45ODhmZmU5NWFkMzg3
MjFlOTdmOTQ1MWUwODlmZDExZWNkZGY4OGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
aApAQCAtMTY1LDkgKzE2NSwxMiBAQCBwcml2YXRlOgogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+IExheWVyTGlzdDsKIAogICAgIHZvaWQgcGFpbnRMYXllckNvbnRl
bnRzKGNvbnN0IExheWVyTGlzdCYpOworICAgIHZvaWQgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJl
bmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSopOworCiAgICAgdm9pZCB1cGRhdGVMYXllcnMoTGF5
ZXJDaHJvbWl1bSopOwogICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb25zdCBM
YXllckxpc3QmLCBHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqKTsKICAgICB2
b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoTGF5ZXJDaHJvbWl1bSosIEdyYXBoaWNzQ29u
dGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciopOworICAgIHZvaWQgdXBkYXRlTWFza1Jlc291cmNl
c0ZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSosIEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4
dHVyZUFsbG9jYXRvciopOwogICAgIHZvaWQgY2xlYXJQZW5kaW5nVXBkYXRlKCk7CiAKICAgICBp
bnQgbV9jb21wb3NpdG9ySWRlbnRpZmllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RDb21tb24uY3BwCmluZGV4IGNjMDM4MGNiYmY1ZTQ1ZWFkNmFmMTkwODkwMjM4MWFjMmFmMTY2
ZDYuLjA3MDA4ZTAyOTBiMjQ2Njg2MmIxNTQ3NmVmYjI4NDExMjljZDM0OWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcApAQCAtNjEsMjEgKzYxLDYgQEAgSW50
UmVjdCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVSZWN0KGNvbnN0IElu
dFJlY3QmIHRhcmdldFN1cmZhY2UKICAgICByZXR1cm4gbGF5ZXJSZWN0OwogfQogCi1JbnRSZWN0
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdChjb25zdCBJ
bnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCwgY29uc3QgSW50U2l6ZSYgYm91bmRzLCBjb25zdCBJ
bnRTaXplJiBjb250ZW50Qm91bmRzLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdGlsaW5n
VHJhbnNmb3JtKQotewotICAgIGlmICh0YXJnZXRTdXJmYWNlUmVjdC5pc0VtcHR5KCkgfHwgY29u
dGVudEJvdW5kcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0YXJnZXRTdXJmYWNlUmVjdDsK
LQotICAgIGNvbnN0IEludFJlY3QgbGF5ZXJCb3VuZFJlY3QgPSBJbnRSZWN0KEludFBvaW50KCks
IGNvbnRlbnRCb3VuZHMpOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSA9IHRp
bGluZ1RyYW5zZm9ybTsKLQotICAgIHRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oYm91bmRzLndp
ZHRoKCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGNvbnRlbnRCb3VuZHMud2lkdGgoKSksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHMuaGVpZ2h0KCkgLyBzdGF0aWNfY2FzdDxk
b3VibGU+KGNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkpKTsKLSAgICB0cmFuc2Zvcm0udHJhbnNsYXRl
KC1jb250ZW50Qm91bmRzLndpZHRoKCkgLyAyLjAsIC1jb250ZW50Qm91bmRzLmhlaWdodCgpIC8g
Mi4wKTsKLQotICAgIHJldHVybiBjYWxjdWxhdGVWaXNpYmxlUmVjdCh0YXJnZXRTdXJmYWNlUmVj
dCwgbGF5ZXJCb3VuZFJlY3QsIHRyYW5zZm9ybSk7Ci19Ci0KIHN0YXRpYyBib29sIGlzU2NhbGVP
clRyYW5zbGF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQogewogICAgIHJldHVy
biAhbS5tMTIoKSAmJiAhbS5tMTMoKSAmJiAhbS5tMTQoKQpAQCAtODUsNiArNzAsMzkgQEAgc3Rh
dGljIGJvb2wgaXNTY2FsZU9yVHJhbnNsYXRpb24oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG0pCiAKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgorYm9vbCBsYXllclNob3Vs
ZEJlU2tpcHBlZChMYXllclR5cGUqIGxheWVyKQoreworICAgIC8vIExheWVycyBjYW4gYmUgc2tp
cHBlZCBpZiBhbnkgb2YgdGhlc2UgY29uZGl0aW9ucyBhcmUgbWV0LgorICAgIC8vICAgLSBkb2Vz
IG5vdCBkcmF3IGNvbnRlbnQuCisgICAgLy8gICAtIGlzIHRyYW5zcGFyZW50CisgICAgLy8gICAt
IGhhcyBlbXB0eSBib3VuZHMKKyAgICAvLyAgIC0gdGhlIGxheWVyIGlzIG5vdCBkb3VibGUtc2lk
ZWQsIGJ1dCBpdHMgYmFjayBmYWNlIGlzIHZpc2libGUuCisgICAgLy8KKyAgICAvLyBTb21lIGFk
ZGl0aW9uYWwgY29uZGl0aW9ucyBuZWVkIHRvIGJlIGNvbXB1dGVkIGF0IGEgbGF0ZXIgcG9pbnQg
YWZ0ZXIgdGhlIHJlY3Vyc2lvbiBpcyBmaW5pc2hlZC4KKyAgICAvLyAgIC0gdGhlIGludGVyc2Vj
dGlvbiBvZiByZW5kZXIgc3VyZmFjZSBjb250ZW50IGFuZCBsYXllciBzY2lzc29yIGlzIGVtcHR5
CisgICAgLy8gICAtIHRoZSB2aXNpYmxlTGF5ZXJSZWN0IGlzIGVtcHR5CisKKyAgICBpZiAoIWxh
eWVyLT5kcmF3c0NvbnRlbnQoKSB8fCAhbGF5ZXItPm9wYWNpdHkoKSB8fCBsYXllci0+Ym91bmRz
KCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIFRoZSBsYXllciBz
aG91bGQgbm90IGJlIGRyYXduIGlmICgxKSBpdCBpcyBub3QgZG91YmxlLXNpZGVkIGFuZCAoMikg
dGhlIGJhY2sgb2YgdGhlIGxheWVyIGlzIGZhY2luZyB0aGUgc2NyZWVuLgorICAgIC8vIFRoaXMg
c2Vjb25kIGNvbmRpdGlvbiBpcyBjaGVja2VkIGJ5IGNvbXB1dGluZyB0aGUgdHJhbnNmb3JtZWQg
bm9ybWFsIG9mIHRoZSBsYXllci4KKyAgICBpZiAoIWxheWVyLT5kb3VibGVTaWRlZCgpKSB7Cisg
ICAgICAgIEZsb2F0UmVjdCBsYXllclJlY3QoRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRTaXplKGxh
eWVyLT5ib3VuZHMoKSkpOworICAgICAgICBGbG9hdFF1YWQgbWFwcGVkTGF5ZXIgPSBsYXllci0+
c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5tYXBRdWFkKEZsb2F0UXVhZChsYXllclJlY3QpKTsKKyAg
ICAgICAgRmxvYXRTaXplIGhvcml6b250YWxEaXIgPSBtYXBwZWRMYXllci5wMigpIC0gbWFwcGVk
TGF5ZXIucDEoKTsKKyAgICAgICAgRmxvYXRTaXplIHZlcnRpY2FsRGlyID0gbWFwcGVkTGF5ZXIu
cDQoKSAtIG1hcHBlZExheWVyLnAxKCk7CisgICAgICAgIEZsb2F0UG9pbnQzRCB4QXhpcyhob3Jp
em9udGFsRGlyLndpZHRoKCksIGhvcml6b250YWxEaXIuaGVpZ2h0KCksIDApOworICAgICAgICBG
bG9hdFBvaW50M0QgeUF4aXModmVydGljYWxEaXIud2lkdGgoKSwgdmVydGljYWxEaXIuaGVpZ2h0
KCksIDApOworICAgICAgICBGbG9hdFBvaW50M0QgekF4aXMgPSB4QXhpcy5jcm9zcyh5QXhpcyk7
CisgICAgICAgIGlmICh6QXhpcy56KCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCiAvLyBSZWN1cnNpdmVseSB3YWxrcyB0aGUg
bGF5ZXIgdHJlZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gbm9kZSBhbmQgY29tcHV0ZXMgYWxsIHRo
ZQogLy8gbmVjZXNzYXJ5IHRyYW5zZm9ybWF0aW9ucywgc2Npc3NvciByZWN0YW5nbGVzLCByZW5k
ZXIgc3VyZmFjZXMsIGV0Yy4KIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUg
UmVuZGVyU3VyZmFjZVR5cGUsIHR5cGVuYW1lIExheWVyU29ydGVyPgpAQCAtMzI5LDkgKzM0Nywx
MiBAQCBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRl
cm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllcgogICAgIHN1YmxheWVyTWF0cml4LnRyYW5zbGF0
ZTNkKC1ib3VuZHMud2lkdGgoKSAqIDAuNSwgLWJvdW5kcy5oZWlnaHQoKSAqIDAuNSwgMCk7CiAK
ICAgICBMYXllckxpc3QmIGRlc2NlbmRhbnRzID0gKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgPyBs
YXllci0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKSA6IGxheWVyTGlzdCk7Ci0gICAgZGVz
Y2VuZGFudHMuYXBwZW5kKGxheWVyKTsKIAotICAgIHVuc2lnbmVkIHRoaXNMYXllckluZGV4ID0g
ZGVzY2VuZGFudHMuc2l6ZSgpIC0gMTsKKyAgICAvLyBBbnkgbGF5ZXJzIHRoYXQgYXJlIGFwcGVu
ZGVkIGFmdGVyIHRoaXMgcG9pbnQgYXJlIGluIHRoZSBsYXllcidzIHN1YnRyZWUgYW5kIHNob3Vs
ZCBiZSBpbmNsdWRlZCBpbiB0aGUgc29ydGluZyBwcm9jZXNzLgorICAgIHVuc2lnbmVkIHNvcnRp
bmdTdGFydEluZGV4ID0gZGVzY2VuZGFudHMuc2l6ZSgpOworCisgICAgaWYgKCFsYXllclNob3Vs
ZEJlU2tpcHBlZChsYXllcikpCisgICAgICAgIGRlc2NlbmRhbnRzLmFwcGVuZChsYXllcik7CiAK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytp
KSB7CiAgICAgICAgIExheWVyVHlwZSogY2hpbGQgPSBsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQo
KTsKQEAgLTQwOCw4ICs0MjksOCBAQCBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllcgogICAgIC8vIElm
IHByZXNlcnZlcy0zZCB0aGVuIHNvcnQgYWxsIHRoZSBkZXNjZW5kYW50cyBpbiAzRCBzbyB0aGF0
IHRoZXkgY2FuIGJlCiAgICAgLy8gZHJhd24gZnJvbSBiYWNrIHRvIGZyb250LiBJZiB0aGUgcHJl
c2VydmVzLTNkIHByb3BlcnR5IGlzIGFsc28gc2V0IG9uIHRoZSBwYXJlbnQgdGhlbgogICAgIC8v
IHNraXAgdGhlIHNvcnRpbmcgYXMgdGhlIHBhcmVudCB3aWxsIHNvcnQgYWxsIHRoZSBkZXNjZW5k
YW50cyBhbnl3YXkuCi0gICAgaWYgKGxheWVyLT5wcmVzZXJ2ZXMzRCgpICYmICghbGF5ZXItPnBh
cmVudCgpIHx8ICFsYXllci0+cGFyZW50KCktPnByZXNlcnZlczNEKCkpKQotICAgICAgICBzb3J0
TGF5ZXJzKCZkZXNjZW5kYW50cy5hdCh0aGlzTGF5ZXJJbmRleCksIGRlc2NlbmRhbnRzLmVuZCgp
LCBsYXllclNvcnRlcik7CisgICAgaWYgKGRlc2NlbmRhbnRzLnNpemUoKSAmJiBsYXllci0+cHJl
c2VydmVzM0QoKSAmJiAoIWxheWVyLT5wYXJlbnQoKSB8fCAhbGF5ZXItPnBhcmVudCgpLT5wcmVz
ZXJ2ZXMzRCgpKSkKKyAgICAgICAgc29ydExheWVycygmZGVzY2VuZGFudHMuYXQoc29ydGluZ1N0
YXJ0SW5kZXgpLCBkZXNjZW5kYW50cy5lbmQoKSwgbGF5ZXJTb3J0ZXIpOwogfQogCiB2b2lkIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5
KExheWVyQ2hyb21pdW0qIGxheWVyLCBMYXllckNocm9taXVtKiByb290TGF5ZXIsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4m
IHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYg
bGF5ZXJMaXN0LCBpbnQgbWF4VGV4dHVyZVNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5oCmluZGV4IGU5MjQxZGRhNDUyMTI3MWRlNWQ1OTJiZDllMjQ3OGVkNGVhYzRl
ZTMuLmU0ZDQ5NjM3NDE4Yjc5YjMwZWMwYzMwZDFmYjBmM2JkYTIxNjM1NWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCkBAIC0yNSw3ICsyNSw5IEBACiAjaWZuZGVm
IENDTGF5ZXJUcmVlSG9zdENvbW1vbl9oCiAjZGVmaW5lIENDTGF5ZXJUcmVlSG9zdENvbW1vbl9o
CiAKKyNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUg
IlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMzMsMTcgKzM1LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgQ0NMYXllckltcGw7CiBjbGFzcyBDQ0xheWVyU29ydGVyOwotY2xhc3MgSW50
UmVjdDsKIGNsYXNzIExheWVyQ2hyb21pdW07Ci1jbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsK
IAogY2xhc3MgQ0NMYXllclRyZWVIb3N0Q29tbW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgSW50
UmVjdCBjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZh
Y2VSZWN0LCBjb25zdCBJbnRTaXplJiBib3VuZHMsIGNvbnN0IEludFNpemUmIGNvbnRlbnRCb3Vu
ZHMsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0aWxpbmdUcmFuc2Zvcm0pOwogICAgIHN0
YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZVZpc2libGVSZWN0KGNvbnN0IEludFJlY3QmIHRhcmdldFN1
cmZhY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBsYXllckJvdW5kUmVjdCwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+IHN0YXRpYyBJ
bnRSZWN0IGNhbGN1bGF0ZVZpc2libGVMYXllclJlY3QoTGF5ZXJUeXBlKik7CiAKICAgICBzdGF0
aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoTGF5ZXJDaHJvbWl1
bSosIExheWVyQ2hyb21pdW0qIHJvb3RMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHBhcmVudE1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlN
YXRyaXgsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBsYXllckxpc3QsIGludCBtYXhU
ZXh0dXJlU2l6ZSk7Ci0KICAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0Fu
ZFZpc2liaWxpdHkoQ0NMYXllckltcGwqLCBDQ0xheWVySW1wbCogcm9vdExheWVyLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiYg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiYgbGF5
ZXJMaXN0LCBDQ0xheWVyU29ydGVyKiwgaW50IG1heFRleHR1cmVTaXplKTsKIAogICAgIHN0cnVj
dCBTY3JvbGxVcGRhdGVJbmZvIHsKQEAgLTU0LDYgKzUzLDM1IEBAIHB1YmxpYzoKIAogdHlwZWRl
ZiBWZWN0b3I8Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpTY3JvbGxVcGRhdGVJbmZvPiBDQ1Njcm9s
bFVwZGF0ZVNldDsKIAordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgorSW50UmVjdCBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVMYXllclJlY3QoTGF5ZXJUeXBlKiBs
YXllcikKK3sKKyAgICBBU1NFUlQobGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKSk7CisgICAg
SW50UmVjdCB0YXJnZXRTdXJmYWNlUmVjdCA9IGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkt
PmNvbnRlbnRSZWN0KCk7CisKKyAgICBpZiAobGF5ZXItPnVzZXNMYXllclNjaXNzb3IoKSkKKyAg
ICAgICAgdGFyZ2V0U3VyZmFjZVJlY3QuaW50ZXJzZWN0KGxheWVyLT5zY2lzc29yUmVjdCgpKTsK
KworICAgIGlmICh0YXJnZXRTdXJmYWNlUmVjdC5pc0VtcHR5KCkgfHwgbGF5ZXItPmNvbnRlbnRC
b3VuZHMoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0YXJnZXRTdXJmYWNlUmVjdDsKKwor
ICAgIC8vIE5vdGUgY2FyZWZ1bGx5IHRoZXNlIGFyZSBhbGlhc2VzCisgICAgY29uc3QgSW50U2l6
ZSYgYm91bmRzID0gbGF5ZXItPmJvdW5kcygpOworICAgIGNvbnN0IEludFNpemUmIGNvbnRlbnRC
b3VuZHMgPSBsYXllci0+Y29udGVudEJvdW5kcygpOworCisgICAgY29uc3QgSW50UmVjdCBsYXll
ckJvdW5kUmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgY29udGVudEJvdW5kcyk7CisgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKKwor
ICAgIHRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oYm91bmRzLndpZHRoKCkgLyBzdGF0aWNfY2Fz
dDxkb3VibGU+KGNvbnRlbnRCb3VuZHMud2lkdGgoKSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib3VuZHMuaGVpZ2h0KCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGNvbnRlbnRCb3Vu
ZHMuaGVpZ2h0KCkpKTsKKyAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKC1jb250ZW50Qm91bmRzLndp
ZHRoKCkgLyAyLjAsIC1jb250ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsKKworICAgIEludFJl
Y3QgdmlzaWJsZUxheWVyUmVjdCA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlz
aWJsZVJlY3QodGFyZ2V0U3VyZmFjZVJlY3QsIGxheWVyQm91bmRSZWN0LCB0cmFuc2Zvcm0pOwor
ICAgIHZpc2libGVMYXllclJlY3QubW92ZSh0b1NpemUobGF5ZXItPnNjcm9sbFBvc2l0aW9uKCkp
KTsKKworICAgIHJldHVybiB2aXNpYmxlTGF5ZXJSZWN0OworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112244</attachid>
            <date>2011-10-24 14:12:03 -0700</date>
            <delta_ts>2011-10-24 14:54:12 -0700</delta_ts>
            <desc>added updateCompositorResources for replica</desc>
            <filename>bug-70057-20111024141202.patch</filename>
            <type>text/plain</type>
            <size>25531</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTgyNDUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1v
ZGUgMTAwNjQ0CmluZGV4IGVlNWMwMjEyMmExMmViNmJmZDFmYzc2OGU5ZGY0NTkwM2U1YjM3NTgu
LjhkNmVkY2Q5ZDQzYTA2ODQ2YmUwYTJiM2UwOTBmYjkzNDVmZDY0YjYKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDM0IEBACisyMDExLTEwLTI0ICBTaGF3biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0b3IgcGFpbnRpbmcvdXBkYXRpbmcvZHJhd2lu
ZyBjb2RlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzAwNTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHJlZmFjdG9yaW5nIHNlcGFyYXRlcyB0aGUgImVhcmx5IGV4aXRzIiBmcm9tIHRoZSBhY3R1
YWwgbG9vcAorICAgICAgICB0aGF0IGRyYXdzIGxheWVycy4gQXMgcGFydCBvZiB0aGlzLCBpdCB3
YXMgYWxzbyBhcHByb3ByaWF0ZSB0bworICAgICAgICBjbGVhbiB1cCB0aGUgd2F5IHRoYXQgbWFz
a3MgYW5kIHJlcGxpY2FzIGFyZSBkZWFsdCB3aXRoIHdoZW4KKyAgICAgICAgcGFpbnRpbmcgYW5k
IHVwZGF0aW5nLiBUaGUgcHVycG9zZSBvZiBhbGwgdGhpcyBpcyB0byBtYWtlIHRoaW5ncworICAg
ICAgICBlYXNpZXIgdG8gdGVzdCwgYW5kIGZvciBhIHNjaXNzb3Jpbmcgb3B0aW1pemF0aW9uIHRo
YXQgbmVlZHMgdG8KKyAgICAgICAga25vdyBleGF0bHkgd2hhdCBnZXRzIGRyYXduLiBFeGlzdGlu
ZyBsYXlvdXQgdGVzdHMgd2VyZSBhYmxlIHRvCisgICAgICAgIHZlcmlmeSB0aGUgcmVmYWN0b3Jp
bmcgZGlkIG5vdCBjaGFuZ2UgYmVoYXZpb3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFs
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tB
bmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3Q6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpsYXllclNob3VsZEJlQXBwZW5kZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlTGF5
ZXJSZWN0KToKKwogMjAxMS0xMC0yNCAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtTdHlsZXNdIEFkZGluZyBhIG5ldyBz
dHlsZSBydWxlIGJyZWFrcyB0aGluZ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwCmluZGV4IGJjYjMxNTMwOWZkMmRiZWIzM2E4NDA2ZDkxODZlMjVjNjkwZTA5ZDIuLjIzYjlj
ODI2OTRiMGM2NTlhZjQ1ZDA2Njg5OTYwN2M1Mzc1ZDk1ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcApAQCAtMzAxLDYgKzMwMSw0MyBAQCB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0xheWVycygpCiAgICAgICAgIGNvcHlPZmZzY3JlZW5UZXh0dXJlVG9E
aXNwbGF5KCk7CiB9CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250
b1JlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVy
TGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3sKKyAgICAvLyBVcGRhdGUgdGhlIGNvbnRl
bnRzIG9mIHRoZSByZW5kZXIgc3VyZmFjZXMuIFdlIHRyYXZlcnNlIHRoZSByZW5kZXIgc3VyZmFj
ZXMKKyAgICAvLyBmcm9tIGJhY2sgdG8gZnJvbnQgdG8gZ3VhcmFudGVlIHRoYXQgbmVzdGVkIHJl
bmRlciBzdXJmYWNlcyBnZXQgcmVuZGVyZWQgaW4KKyAgICAvLyB0aGUgY29ycmVjdCBvcmRlci4K
KyAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUo
KSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKKyAgICAgICAgQ0NM
YXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3Vy
ZmFjZUluZGV4XS5nZXQoKTsKKyAgICAgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNl
ID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgICAgIEFTU0VSVChy
ZW5kZXJTdXJmYWNlKTsKKworICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRTa2lwc0RyYXcodHJ1
ZSk7CisKKyAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKS5zaXplKCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBTa2lwIGNvbXBsZXRlbHkgdHJhbnNw
YXJlbnQgcmVuZGVyIHN1cmZhY2VzLgorICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UtPmRyYXdP
cGFjaXR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAodXNlUmVuZGVy
U3VyZmFjZShyZW5kZXJTdXJmYWNlKSkgeworICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0
U2tpcHNEcmF3KGZhbHNlKTsKKworICAgICAgICAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllciAh
PSByb290RHJhd0xheWVyKSB7CisgICAgICAgICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwg
bV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKKyAg
ICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmNsZWFyQ29sb3Io
MCwgMCwgMCwgMCkpOworICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29u
dGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpKTsKKyAgICAg
ICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGNvbnN0IENDTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3Qo
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXgg
PCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpCisgICAgICAgICAgICAgICAgZHJhd0xh
eWVyKGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKSwgcmVuZGVyU3VyZmFjZSk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKKwogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNJ
bnRlcm5hbCgpCiB7CiAgICAgaWYgKHZpZXdwb3J0U2l6ZSgpLmlzRW1wdHkoKSB8fCAhcm9vdExh
eWVyKCkpCkBAIC0zNTQsMzkgKzM5MSw5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3TGF5ZXJzSW50ZXJuYWwoKQogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+
YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVf
TUlOVVNfU1JDX0FMUEhBKSk7CiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5l
bmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwogCi0gICAgLy8gVXBkYXRl
IHRoZSBjb250ZW50cyBvZiB0aGUgcmVuZGVyIHN1cmZhY2VzLiBXZSB0cmF2ZXJzZSB0aGUgYXJy
YXkgZnJvbQotICAgIC8vIGJhY2sgdG8gZnJvbnQgdG8gZ3VhcmFudGVlIHRoYXQgbmVzdGVkIHJl
bmRlciBzdXJmYWNlcyBnZXQgcmVuZGVyZWQgaW4gdGhlCi0gICAgLy8gY29ycmVjdCBvcmRlci4K
LSAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUo
KSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKLSAgICAgICAgQ0NM
YXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3Vy
ZmFjZUluZGV4XS5nZXQoKTsKLSAgICAgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNl
ID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7Ci0gICAgICAgIEFTU0VSVChy
ZW5kZXJTdXJmYWNlKTsKLQotICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRTa2lwc0RyYXcodHJ1
ZSk7Ci0KLSAgICAgICAgLy8gUmVuZGVyIHN1cmZhY2VzIHdob3NlIGRyYXdhYmxlIGFyZWEgaGFz
IHplcm8gd2lkdGggb3IgaGVpZ2h0Ci0gICAgICAgIC8vIHdpbGwgaGF2ZSBubyBsYXllcnMgYXNz
b2NpYXRlZCB3aXRoIHRoZW0gYW5kIHNob3VsZCBiZSBza2lwcGVkLgotICAgICAgICBpZiAoIXJl
bmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLnNpemUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIC8vIFNraXAgY29tcGxldGVseSB0cmFuc3BhcmVudCByZW5kZXIgc3VyZmFjZXMu
Ci0gICAgICAgIGlmICghcmVuZGVyU3VyZmFjZS0+ZHJhd09wYWNpdHkoKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIGlmICh1c2VSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2Up
KSB7Ci0gICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRTa2lwc0RyYXcoZmFsc2UpOwotCi0g
ICAgICAgICAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVyICE9IHJvb3REcmF3TGF5ZXIpIHsKLSAg
ICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRpc2FibGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwotICAgICAgICAgICAgICAgIEdMQyhtX2Nv
bnRleHQuZ2V0KCksIG1fY29udGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKSk7Ci0gICAgICAg
ICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5jbGVhcihHcmFwaGljc0Nv
bnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCkpOwotICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRl
eHQuZ2V0KCksIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RF
U1QpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29uc3QgQ0NMYXllckxpc3QmIGxh
eWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsr
bGF5ZXJJbmRleCkKLSAgICAgICAgICAgICAgICBkcmF3TGF5ZXIobGF5ZXJMaXN0W2xheWVySW5k
ZXhdLmdldCgpLCByZW5kZXJTdXJmYWNlKTsKLSAgICAgICAgfQorICAgIHsKKyAgICAgICAgVFJB
Q0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsOjpkcmF3
TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzIiwgdGhpcywgMCk7CisgICAgICAgIGRyYXdMYXllcnNP
bnRvUmVuZGVyU3VyZmFjZXMocm9vdERyYXdMYXllciwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7
CiAgICAgfQogCiAgICAgaWYgKG1faGVhZHNVcERpc3BsYXktPmVuYWJsZWQoKSkgewpAQCAtNTcw
LDQzICs1NzcsMTcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihDQ0xh
eWVySW1wbCogbGF5ZXIsIENDUmVuZGVyU3VyZmFjZSogdGFyZ2UKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmICghbGF5ZXItPmRyYXdzQ29udGVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIWxheWVyLT5vcGFjaXR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBJbnRS
ZWN0IHZpc2libGVMYXllclJlY3QgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZp
c2libGVMYXllclJlY3Q8Q0NMYXllckltcGw+KGxheWVyKTsKKyAgICBsYXllci0+c2V0VmlzaWJs
ZUxheWVyUmVjdCh2aXNpYmxlTGF5ZXJSZWN0KTsKIAotICAgIGlmIChsYXllci0+Ym91bmRzKCku
aXNFbXB0eSgpKQorICAgIGlmICh2aXNpYmxlTGF5ZXJSZWN0LmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgSW50UmVjdCB0YXJnZXRTdXJmYWNlUmVjdCA9IGxheWVyLT50YXJnZXRS
ZW5kZXJTdXJmYWNlKCkgPyBsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVj
dCgpIDogbV9kZWZhdWx0UmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKTsKLSAgICBpZiAobGF5
ZXItPnVzZXNMYXllclNjaXNzb3IoKSkgewotICAgICAgICBJbnRSZWN0IHNjaXNzb3JSZWN0ID0g
bGF5ZXItPnNjaXNzb3JSZWN0KCk7Ci0gICAgICAgIHRhcmdldFN1cmZhY2VSZWN0LmludGVyc2Vj
dChzY2lzc29yUmVjdCk7Ci0gICAgICAgIGlmICh0YXJnZXRTdXJmYWNlUmVjdC5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHNldFNjaXNzb3JUb1JlY3Qoc2Npc3NvclJl
Y3QpOwotICAgIH0gZWxzZQorICAgIGlmIChsYXllci0+dXNlc0xheWVyU2Npc3NvcigpKQorICAg
ICAgICBzZXRTY2lzc29yVG9SZWN0KGxheWVyLT5zY2lzc29yUmVjdCgpKTsKKyAgICBlbHNlCiAg
ICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CiAKLSAgICBJbnRSZWN0IHZpc2libGVMYXllclJlY3Qg
PSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVMYXllclJlY3QodGFyZ2V0
U3VyZmFjZVJlY3QsIGxheWVyLT5ib3VuZHMoKSwgbGF5ZXItPmNvbnRlbnRCb3VuZHMoKSwgbGF5
ZXItPmRyYXdUcmFuc2Zvcm0oKSk7Ci0gICAgdmlzaWJsZUxheWVyUmVjdC5tb3ZlKHRvU2l6ZShs
YXllci0+c2Nyb2xsUG9zaXRpb24oKSkpOwotICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0
KHZpc2libGVMYXllclJlY3QpOwotCi0gICAgLy8gVGhlIGxheWVyIHNob3VsZCBub3QgYmUgZHJh
d24gaWYgKDEpIGl0IGlzIG5vdCBkb3VibGUtc2lkZWQgYW5kICgyKSB0aGUgYmFjayBvZiB0aGUg
bGF5ZXIgaXMgZmFjaW5nIHRoZSBzY3JlZW4uCi0gICAgLy8gVGhpcyBzZWNvbmQgY29uZGl0aW9u
IGlzIGNoZWNrZWQgYnkgY29tcHV0aW5nIHRoZSB0cmFuc2Zvcm1lZCBub3JtYWwgb2YgdGhlIGxh
eWVyLgotICAgIGlmICghbGF5ZXItPmRvdWJsZVNpZGVkKCkpIHsKLSAgICAgICAgRmxvYXRSZWN0
IGxheWVyUmVjdChGbG9hdFBvaW50KDAsIDApLCBGbG9hdFNpemUobGF5ZXItPmJvdW5kcygpKSk7
Ci0gICAgICAgIEZsb2F0UXVhZCBtYXBwZWRMYXllciA9IGxheWVyLT5zY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpLm1hcFF1YWQoRmxvYXRRdWFkKGxheWVyUmVjdCkpOwotICAgICAgICBGbG9hdFNpemUg
aG9yaXpvbnRhbERpciA9IG1hcHBlZExheWVyLnAyKCkgLSBtYXBwZWRMYXllci5wMSgpOwotICAg
ICAgICBGbG9hdFNpemUgdmVydGljYWxEaXIgPSBtYXBwZWRMYXllci5wNCgpIC0gbWFwcGVkTGF5
ZXIucDEoKTsKLSAgICAgICAgRmxvYXRQb2ludDNEIHhBeGlzKGhvcml6b250YWxEaXIud2lkdGgo
KSwgaG9yaXpvbnRhbERpci5oZWlnaHQoKSwgMCk7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCB5QXhp
cyh2ZXJ0aWNhbERpci53aWR0aCgpLCB2ZXJ0aWNhbERpci5oZWlnaHQoKSwgMCk7Ci0gICAgICAg
IEZsb2F0UG9pbnQzRCB6QXhpcyA9IHhBeGlzLmNyb3NzKHlBeGlzKTsKLSAgICAgICAgaWYgKHpB
eGlzLnooKSA8IDApCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgbGF5ZXItPmRy
YXcodGhpcyk7CiAKICAgICAvLyBEcmF3IHRoZSBkZWJ1ZyBib3JkZXIgaWYgdGhlcmUgaXMgb25l
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCBhMmY1NjZhZDQ5MDIwMzE5
NTdiNGY0ZmJjNzg4N2M5OTI5YzIxMTY0Li42NDZlYTZlNWM0NDhhNThjNjEyNDEzNDJiMGY5YTZl
YWRkYWVmNDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtMTYxLDYg
KzE2MSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpbml0aWFsaXplKCk7CiAKICAgICB2b2lkIGRy
YXdMYXllcnNJbnRlcm5hbCgpOworICAgIHZvaWQgZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNl
cyhDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciwgY29uc3QgQ0NMYXllckxpc3QmIHJlbmRlclN1
cmZhY2VMYXllckxpc3QpOwogICAgIHZvaWQgZHJhd0xheWVyKENDTGF5ZXJJbXBsKiwgQ0NSZW5k
ZXJTdXJmYWNlKik7CiAKICAgICBNYW5hZ2VkVGV4dHVyZSogZ2V0T2Zmc2NyZWVuTGF5ZXJUZXh0
dXJlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCA3Yzc2MGI5ZDY5YjA0
NjMyODAzZDk2NzVhYmY3MmFkMmE2NTI0ZmIxLi5kYzEzMWMzMjA0NzM2OTdiZmU4MGIzZTViOGM1
MzhjNWYzYTdkMGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTI5OCw2
ICsyOTgsMzIgQEAgc3RhdGljIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoTGF5ZXJDaHJvbWl1
bSogbGF5ZXIsIGNvbnN0IEludFJlY3QmIHZpc2libGVMYXkKICAgICB9CiB9CiAKK3ZvaWQgQ0NM
YXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNo
cm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIpCit7CisgICAgLy8gTm90ZTogTWFza3MgYW5kIHJl
cGxpY2FzIG9ubHkgZXhpc3QgZm9yIGxheWVycyB0aGF0IG93biByZW5kZXIgc3VyZmFjZXMuIElm
IHdlIHJlYWNoIHRoaXMgcG9pbnQKKyAgICAvLyBpbiBjb2RlLCB3ZSBhbHJlYWR5IGtub3cgdGhh
dCBhdCBsZWFzdCBzb21ldGhpbmcgd2lsbCBiZSBkcmF3biBpbnRvIHRoaXMgcmVuZGVyIHN1cmZh
Y2UsIHNvIHRoZQorICAgIC8vIG1hc2sgYW5kIHJlcGxpY2Egc2hvdWxkIGJlIHBhaW50ZWQuCisK
KyAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKSkgeworICAgICAgICByZW5k
ZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOworICAg
ICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigp
LCBJbnRSZWN0KEludFBvaW50KCksIHJlbmRlclN1cmZhY2VMYXllci0+Y29udGVudEJvdW5kcygp
KSk7CisgICAgfQorCisgICAgTGF5ZXJDaHJvbWl1bSogcmVwbGljYUxheWVyID0gcmVuZGVyU3Vy
ZmFjZUxheWVyLT5yZXBsaWNhTGF5ZXIoKTsKKyAgICBpZiAocmVwbGljYUxheWVyKSB7CisKKyAg
ICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0PExheWVyQ2hyb21pdW0+KHJlbmRlclN1cmZhY2VMYXll
cik7CisKKyAgICAgICAgcmVwbGljYUxheWVyLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOworICAg
ICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXIsIHZpc2libGVMYXllclJlY3Qp
OworCisgICAgICAgIGlmIChyZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpKSB7CisgICAgICAgICAg
ICByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOworICAg
ICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkocmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKSwg
SW50UmVjdChJbnRQb2ludCgpLCByZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLT5jb250ZW50Qm91
bmRzKCkpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBh
aW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3Qp
CiB7CiAgICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5z
aXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7CkBAIC0zMDUs
OCArMzMxLDYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25z
dCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QKICAgICAgICAgUmVuZGVyU3VyZmFj
ZUNocm9taXVtKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJm
YWNlKCk7CiAgICAgICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlKTsKIAotICAgICAgICByZW5kZXJT
dXJmYWNlTGF5ZXItPnNldExheWVyVHJlZUhvc3QodGhpcyk7Ci0KICAgICAgICAgLy8gUmVuZGVy
IHN1cmZhY2VzIHdob3NlIGRyYXdhYmxlIGFyZWEgaGFzIHplcm8gd2lkdGggb3IgaGVpZ2h0CiAg
ICAgICAgIC8vIHdpbGwgaGF2ZSBubyBsYXllcnMgYXNzb2NpYXRlZCB3aXRoIHRoZW0gYW5kIHNo
b3VsZCBiZSBza2lwcGVkLgogICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgp
LnNpemUoKSkKQEAgLTMxNSw2ICszMzksOSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRM
YXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdAogICAg
ICAgICBpZiAoIXJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5KCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAorICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXItPnNldExheWVyVHJlZUhvc3QodGhp
cyk7CisgICAgICAgIHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKHJlbmRlclN1
cmZhY2VMYXllcik7CisKICAgICAgICAgY29uc3QgTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5k
ZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKICAgICAgICAgQVNTRVJUKGxheWVyTGlzdC5zaXplKCkp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5
ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KSB7CkBAIC0zMjcsMzkgKzM1NCwxMiBAQCB2b2lk
IENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdAogCiAgICAgICAgICAgICBsYXllci0+c2V0TGF5ZXJUcmVlSG9z
dCh0aGlzKTsKIAotICAgICAgICAgICAgaWYgKCFsYXllci0+b3BhY2l0eSgpKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBpZiAobGF5ZXItPm1hc2tMYXllcigpKQot
ICAgICAgICAgICAgICAgIGxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlz
KTsKLSAgICAgICAgICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkpIHsKLSAgICAgICAgICAg
ICAgICBsYXllci0+cmVwbGljYUxheWVyKCktPnNldExheWVyVHJlZUhvc3QodGhpcyk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkpCi0gICAg
ICAgICAgICAgICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPnNldExh
eWVyVHJlZUhvc3QodGhpcyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChsYXll
ci0+Ym91bmRzKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgICAgICBJbnRSZWN0IGRlZmF1bHRDb250ZW50UmVjdCA9IEludFJlY3Qocm9vdExheWVyKCkt
PnNjcm9sbFBvc2l0aW9uKCksIHZpZXdwb3J0U2l6ZSgpKTsKLQotICAgICAgICAgICAgSW50UmVj
dCB0YXJnZXRTdXJmYWNlUmVjdCA9IGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkgPyBsYXll
ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpIDogZGVmYXVsdENvbnRlbnRS
ZWN0OwotICAgICAgICAgICAgaWYgKGxheWVyLT51c2VzTGF5ZXJTY2lzc29yKCkpCi0gICAgICAg
ICAgICAgICAgdGFyZ2V0U3VyZmFjZVJlY3QuaW50ZXJzZWN0KGxheWVyLT5zY2lzc29yUmVjdCgp
KTsKLSAgICAgICAgICAgIEludFJlY3QgdmlzaWJsZUxheWVyUmVjdCA9IENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdCh0YXJnZXRTdXJmYWNlUmVjdCwgbGF5
ZXItPmJvdW5kcygpLCBsYXllci0+Y29udGVudEJvdW5kcygpLCBsYXllci0+ZHJhd1RyYW5zZm9y
bSgpKTsKLQotICAgICAgICAgICAgdmlzaWJsZUxheWVyUmVjdC5tb3ZlKHRvU2l6ZShsYXllci0+
c2Nyb2xsUG9zaXRpb24oKSkpOworICAgICAgICAgICAgQVNTRVJUKGxheWVyLT5vcGFjaXR5KCkp
OworICAgICAgICAgICAgQVNTRVJUKCFsYXllci0+Ym91bmRzKCkuaXNFbXB0eSgpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0PExheWVyQ2hyb21pdW0+KGxh
eWVyKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkobGF5
ZXIsIHZpc2libGVMYXllclJlY3QpOwotCi0gICAgICAgICAgICBpZiAoTGF5ZXJDaHJvbWl1bSog
bWFza0xheWVyID0gbGF5ZXItPm1hc2tMYXllcigpKQotICAgICAgICAgICAgICAgIHBhaW50Q29u
dGVudHNJZkRpcnR5KG1hc2tMYXllciwgSW50UmVjdChJbnRQb2ludCgpLCBtYXNrTGF5ZXItPmNv
bnRlbnRCb3VuZHMoKSkpOwotCi0gICAgICAgICAgICBpZiAoTGF5ZXJDaHJvbWl1bSogcmVwbGlj
YUxheWVyID0gbGF5ZXItPnJlcGxpY2FMYXllcigpKSB7Ci0gICAgICAgICAgICAgICAgcGFpbnRD
b250ZW50c0lmRGlydHkocmVwbGljYUxheWVyLCB2aXNpYmxlTGF5ZXJSZWN0KTsKLQotICAgICAg
ICAgICAgICAgIGlmIChMYXllckNocm9taXVtKiByZXBsaWNhTWFza0xheWVyID0gcmVwbGljYUxh
eWVyLT5tYXNrTGF5ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGly
dHkocmVwbGljYU1hc2tMYXllciwgSW50UmVjdChJbnRQb2ludCgpLCByZXBsaWNhTWFza0xheWVy
LT5jb250ZW50Qm91bmRzKCkpKTsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0K
QEAgLTM3NCw2ICszNzQsMTYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUNvbXBvc2l0
b3JSZXNvdXJjZXMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGEKICAgICAgICAgaWYg
KCFyZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKS5zaXplKCkgfHwgIXJlbmRlclN1cmZhY2UtPmRy
YXdPcGFjaXR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICBpZiAocmVuZGVy
U3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKSkKKyAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0b3JS
ZXNvdXJjZXMocmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKSwgY29udGV4dCwgYWxsb2Nh
dG9yKTsKKworICAgICAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVyLT5yZXBsaWNhTGF5ZXIoKSkg
eworICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhyZW5kZXJTdXJmYWNlTGF5
ZXItPnJlcGxpY2FMYXllcigpLCBjb250ZXh0LCBhbGxvY2F0b3IpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xh
eWVyKCkpCisgICAgICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhyZW5kZXJT
dXJmYWNlTGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSwgY29udGV4dCwgYWxsb2Nh
dG9yKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgY29uc3QgTGF5ZXJMaXN0JiBsYXll
ckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKICAgICAgICAgQVNTRVJUKGxheWVy
TGlzdC5zaXplKCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXll
ckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KSB7CkBAIC0zODgsMTkgKzM5
OCwxMiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhj
b25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhMYXllckNocm9taXVtKiBsYXllciwgR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvcikKIHsKLSAgICBp
ZiAobGF5ZXItPmJvdW5kcygpLmlzRW1wdHkoKSkKKyAgICAvLyBGb3Igbm9ybWFsIGxheWVycywg
dGhlc2UgY29uZGl0aW9ucyBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gY2hlY2tlZCB3aGlsZSBj
cmVhdGluZyB0aGUgcmVuZGVyIHN1cmZhY2UgbGF5ZXIgbGlzdHMuCisgICAgLy8gRm9yIG1hc2tz
IGFuZCByZXBsaWFjcyBob3dldmVyLCB3ZSBtYXkgc3RpbGwgbmVlZCB0byBjaGVjayB0aGVtIGhl
cmUuCisgICAgaWYgKGxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkgfHwgIWxheWVyLT5vcGFjaXR5
KCkgfHwgIWxheWVyLT5kcmF3c0NvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KCFsYXllci0+b3BhY2l0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobGF5ZXItPm1h
c2tMYXllcigpKQotICAgICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGxheWVyLT5tYXNr
TGF5ZXIoKSwgY29udGV4dCwgYWxsb2NhdG9yKTsKLSAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXll
cigpKQotICAgICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGxheWVyLT5yZXBsaWNhTGF5
ZXIoKSwgY29udGV4dCwgYWxsb2NhdG9yKTsKLQotICAgIGlmIChsYXllci0+ZHJhd3NDb250ZW50
KCkpCi0gICAgICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIGFs
bG9jYXRvcik7CisgICAgbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29udGV4dCwg
YWxsb2NhdG9yKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNsZWFyUGVuZGluZ1VwZGF0
ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IGU1ZGRiYjQzNTFhYjRhNmI0MmVi
NTM3NzI5NzEyYTA0NTU4NzgyZDIuLjk4OGZmZTk1YWQzODcyMWU5N2Y5NDUxZTA4OWZkMTFlY2Rk
Zjg4ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC0xNjUsOSArMTY1LDEyIEBA
IHByaXZhdGU6CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gTGF5
ZXJMaXN0OwogCiAgICAgdm9pZCBwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0Jik7
CisgICAgdm9pZCBwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNocm9t
aXVtKik7CisKICAgICB2b2lkIHVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKik7CiAgICAgdm9p
ZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnN0IExheWVyTGlzdCYsIEdyYXBoaWNzQ29u
dGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciopOwogICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJl
c291cmNlcyhMYXllckNocm9taXVtKiwgR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2Nh
dG9yKik7CisgICAgdm9pZCB1cGRhdGVNYXNrUmVzb3VyY2VzRm9yUmVuZGVyU3VyZmFjZShMYXll
ckNocm9taXVtKiwgR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKik7CiAgICAg
dm9pZCBjbGVhclBlbmRpbmdVcGRhdGUoKTsKIAogICAgIGludCBtX2NvbXBvc2l0b3JJZGVudGlm
aWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKaW5kZXggY2Mw
MzgwY2JiZjVlNDVlYWQ2YWYxOTA4OTAyMzgxYWMyYWYxNjZkNi4uMDcwMDhlMDI5MGIyNDY2ODYy
YjE1NDc2ZWZiMjg0MTEyOWNkMzQ5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RDb21tb24uY3BwCkBAIC02MSwyMSArNjEsNiBAQCBJbnRSZWN0IENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlVmlzaWJsZVJlY3QoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZQog
ICAgIHJldHVybiBsYXllclJlY3Q7CiB9CiAKLUludFJlY3QgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2VS
ZWN0LCBjb25zdCBJbnRTaXplJiBib3VuZHMsIGNvbnN0IEludFNpemUmIGNvbnRlbnRCb3VuZHMs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0aWxpbmdUcmFuc2Zvcm0pCi17Ci0gICAgaWYg
KHRhcmdldFN1cmZhY2VSZWN0LmlzRW1wdHkoKSB8fCBjb250ZW50Qm91bmRzLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIHRhcmdldFN1cmZhY2VSZWN0OwotCi0gICAgY29uc3QgSW50UmVjdCBs
YXllckJvdW5kUmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgY29udGVudEJvdW5kcyk7Ci0gICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gdGlsaW5nVHJhbnNmb3JtOwotCi0gICAg
dHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShib3VuZHMud2lkdGgoKSAvIHN0YXRpY19jYXN0PGRv
dWJsZT4oY29udGVudEJvdW5kcy53aWR0aCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvdW5kcy5oZWlnaHQoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oY29udGVudEJvdW5kcy5o
ZWlnaHQoKSkpOwotICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLWNvbnRlbnRCb3VuZHMud2lkdGgo
KSAvIDIuMCwgLWNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjApOwotCi0gICAgcmV0dXJuIGNh
bGN1bGF0ZVZpc2libGVSZWN0KHRhcmdldFN1cmZhY2VSZWN0LCBsYXllckJvdW5kUmVjdCwgdHJh
bnNmb3JtKTsKLX0KLQogc3RhdGljIGJvb2wgaXNTY2FsZU9yVHJhbnNsYXRpb24oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG0pCiB7CiAgICAgcmV0dXJuICFtLm0xMigpICYmICFtLm0xMygp
ICYmICFtLm0xNCgpCkBAIC04NSw2ICs3MCwzOSBAQCBzdGF0aWMgYm9vbCBpc1NjYWxlT3JUcmFu
c2xhdGlvbihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbSkKIAogfQogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBMYXllclR5cGU+Citib29sIGxheWVyU2hvdWxkQmVTa2lwcGVkKExheWVyVHlwZSog
bGF5ZXIpCit7CisgICAgLy8gTGF5ZXJzIGNhbiBiZSBza2lwcGVkIGlmIGFueSBvZiB0aGVzZSBj
b25kaXRpb25zIGFyZSBtZXQuCisgICAgLy8gICAtIGRvZXMgbm90IGRyYXcgY29udGVudC4KKyAg
ICAvLyAgIC0gaXMgdHJhbnNwYXJlbnQKKyAgICAvLyAgIC0gaGFzIGVtcHR5IGJvdW5kcworICAg
IC8vICAgLSB0aGUgbGF5ZXIgaXMgbm90IGRvdWJsZS1zaWRlZCwgYnV0IGl0cyBiYWNrIGZhY2Ug
aXMgdmlzaWJsZS4KKyAgICAvLworICAgIC8vIFNvbWUgYWRkaXRpb25hbCBjb25kaXRpb25zIG5l
ZWQgdG8gYmUgY29tcHV0ZWQgYXQgYSBsYXRlciBwb2ludCBhZnRlciB0aGUgcmVjdXJzaW9uIGlz
IGZpbmlzaGVkLgorICAgIC8vICAgLSB0aGUgaW50ZXJzZWN0aW9uIG9mIHJlbmRlciBzdXJmYWNl
IGNvbnRlbnQgYW5kIGxheWVyIHNjaXNzb3IgaXMgZW1wdHkKKyAgICAvLyAgIC0gdGhlIHZpc2li
bGVMYXllclJlY3QgaXMgZW1wdHkKKworICAgIGlmICghbGF5ZXItPmRyYXdzQ29udGVudCgpIHx8
ICFsYXllci0+b3BhY2l0eSgpIHx8IGxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgLy8gVGhlIGxheWVyIHNob3VsZCBub3QgYmUgZHJhd24gaWYg
KDEpIGl0IGlzIG5vdCBkb3VibGUtc2lkZWQgYW5kICgyKSB0aGUgYmFjayBvZiB0aGUgbGF5ZXIg
aXMgZmFjaW5nIHRoZSBzY3JlZW4uCisgICAgLy8gVGhpcyBzZWNvbmQgY29uZGl0aW9uIGlzIGNo
ZWNrZWQgYnkgY29tcHV0aW5nIHRoZSB0cmFuc2Zvcm1lZCBub3JtYWwgb2YgdGhlIGxheWVyLgor
ICAgIGlmICghbGF5ZXItPmRvdWJsZVNpZGVkKCkpIHsKKyAgICAgICAgRmxvYXRSZWN0IGxheWVy
UmVjdChGbG9hdFBvaW50KDAsIDApLCBGbG9hdFNpemUobGF5ZXItPmJvdW5kcygpKSk7CisgICAg
ICAgIEZsb2F0UXVhZCBtYXBwZWRMYXllciA9IGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgp
Lm1hcFF1YWQoRmxvYXRRdWFkKGxheWVyUmVjdCkpOworICAgICAgICBGbG9hdFNpemUgaG9yaXpv
bnRhbERpciA9IG1hcHBlZExheWVyLnAyKCkgLSBtYXBwZWRMYXllci5wMSgpOworICAgICAgICBG
bG9hdFNpemUgdmVydGljYWxEaXIgPSBtYXBwZWRMYXllci5wNCgpIC0gbWFwcGVkTGF5ZXIucDEo
KTsKKyAgICAgICAgRmxvYXRQb2ludDNEIHhBeGlzKGhvcml6b250YWxEaXIud2lkdGgoKSwgaG9y
aXpvbnRhbERpci5oZWlnaHQoKSwgMCk7CisgICAgICAgIEZsb2F0UG9pbnQzRCB5QXhpcyh2ZXJ0
aWNhbERpci53aWR0aCgpLCB2ZXJ0aWNhbERpci5oZWlnaHQoKSwgMCk7CisgICAgICAgIEZsb2F0
UG9pbnQzRCB6QXhpcyA9IHhBeGlzLmNyb3NzKHlBeGlzKTsKKyAgICAgICAgaWYgKHpBeGlzLnoo
KSA8IDApCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKIC8vIFJlY3Vyc2l2ZWx5IHdhbGtzIHRoZSBsYXllciB0cmVlIHN0YXJ0aW5nIGF0
IHRoZSBnaXZlbiBub2RlIGFuZCBjb21wdXRlcyBhbGwgdGhlCiAvLyBuZWNlc3NhcnkgdHJhbnNm
b3JtYXRpb25zLCBzY2lzc29yIHJlY3RhbmdsZXMsIHJlbmRlciBzdXJmYWNlcywgZXRjLgogdGVt
cGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwgdHlw
ZW5hbWUgTGF5ZXJTb3J0ZXI+CkBAIC0zMjksOSArMzQ3LDEyIEBAIHN0YXRpYyB2b2lkIGNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIs
IExheWVyCiAgICAgc3VibGF5ZXJNYXRyaXgudHJhbnNsYXRlM2QoLWJvdW5kcy53aWR0aCgpICog
MC41LCAtYm91bmRzLmhlaWdodCgpICogMC41LCAwKTsKIAogICAgIExheWVyTGlzdCYgZGVzY2Vu
ZGFudHMgPSAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSA/IGxheWVyLT5yZW5kZXJTdXJmYWNlKCkt
PmxheWVyTGlzdCgpIDogbGF5ZXJMaXN0KTsKLSAgICBkZXNjZW5kYW50cy5hcHBlbmQobGF5ZXIp
OwogCi0gICAgdW5zaWduZWQgdGhpc0xheWVySW5kZXggPSBkZXNjZW5kYW50cy5zaXplKCkgLSAx
OworICAgIC8vIEFueSBsYXllcnMgdGhhdCBhcmUgYXBwZW5kZWQgYWZ0ZXIgdGhpcyBwb2ludCBh
cmUgaW4gdGhlIGxheWVyJ3Mgc3VidHJlZSBhbmQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBz
b3J0aW5nIHByb2Nlc3MuCisgICAgdW5zaWduZWQgc29ydGluZ1N0YXJ0SW5kZXggPSBkZXNjZW5k
YW50cy5zaXplKCk7CisKKyAgICBpZiAoIWxheWVyU2hvdWxkQmVTa2lwcGVkKGxheWVyKSkKKyAg
ICAgICAgZGVzY2VuZGFudHMuYXBwZW5kKGxheWVyKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgTGF5ZXJUeXBl
KiBjaGlsZCA9IGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpOwpAQCAtNDA4LDggKzQyOSw4IEBA
IHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFs
KExheWVyVHlwZSogbGF5ZXIsIExheWVyCiAgICAgLy8gSWYgcHJlc2VydmVzLTNkIHRoZW4gc29y
dCBhbGwgdGhlIGRlc2NlbmRhbnRzIGluIDNEIHNvIHRoYXQgdGhleSBjYW4gYmUKICAgICAvLyBk
cmF3biBmcm9tIGJhY2sgdG8gZnJvbnQuIElmIHRoZSBwcmVzZXJ2ZXMtM2QgcHJvcGVydHkgaXMg
YWxzbyBzZXQgb24gdGhlIHBhcmVudCB0aGVuCiAgICAgLy8gc2tpcCB0aGUgc29ydGluZyBhcyB0
aGUgcGFyZW50IHdpbGwgc29ydCBhbGwgdGhlIGRlc2NlbmRhbnRzIGFueXdheS4KLSAgICBpZiAo
bGF5ZXItPnByZXNlcnZlczNEKCkgJiYgKCFsYXllci0+cGFyZW50KCkgfHwgIWxheWVyLT5wYXJl
bnQoKS0+cHJlc2VydmVzM0QoKSkpCi0gICAgICAgIHNvcnRMYXllcnMoJmRlc2NlbmRhbnRzLmF0
KHRoaXNMYXllckluZGV4KSwgZGVzY2VuZGFudHMuZW5kKCksIGxheWVyU29ydGVyKTsKKyAgICBp
ZiAoZGVzY2VuZGFudHMuc2l6ZSgpICYmIGxheWVyLT5wcmVzZXJ2ZXMzRCgpICYmICghbGF5ZXIt
PnBhcmVudCgpIHx8ICFsYXllci0+cGFyZW50KCktPnByZXNlcnZlczNEKCkpKQorICAgICAgICBz
b3J0TGF5ZXJzKCZkZXNjZW5kYW50cy5hdChzb3J0aW5nU3RhcnRJbmRleCksIGRlc2NlbmRhbnRz
LmVuZCgpLCBsYXllclNvcnRlcik7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoTGF5ZXJDaHJvbWl1bSogbGF5ZXIs
IExheWVyQ2hyb21pdW0qIHJvb3RMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBh
cmVudE1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRy
aXgsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBsYXllckxpc3QsIGludCBtYXhUZXh0
dXJlU2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgKaW5kZXggZTky
NDFkZGE0NTIxMjcxZGU1ZDU5MmJkOWUyNDc4ZWQ0ZWFjNGVlMy4uZTRkNDk2Mzc0MThiNzliMzBl
YzBjMzBkMWZiMGYzYmRhMjE2MzU1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
Q29tbW9uLmgKQEAgLTI1LDcgKzI1LDkgQEAKICNpZm5kZWYgQ0NMYXllclRyZWVIb3N0Q29tbW9u
X2gKICNkZWZpbmUgQ0NMYXllclRyZWVIb3N0Q29tbW9uX2gKIAorI2luY2x1ZGUgIkludFJlY3Qu
aCIKICNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXgu
aCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBA
IC0zMywxNyArMzUsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ0xheWVySW1w
bDsKIGNsYXNzIENDTGF5ZXJTb3J0ZXI7Ci1jbGFzcyBJbnRSZWN0OwogY2xhc3MgTGF5ZXJDaHJv
bWl1bTsKLWNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OwogCiBjbGFzcyBDQ0xheWVyVHJlZUhv
c3RDb21tb24gewogcHVibGljOgotICAgIHN0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZVZpc2libGVM
YXllclJlY3QoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QsIGNvbnN0IEludFNpemUm
IGJvdW5kcywgY29uc3QgSW50U2l6ZSYgY29udGVudEJvdW5kcywgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHRpbGluZ1RyYW5zZm9ybSk7CiAgICAgc3RhdGljIEludFJlY3QgY2FsY3VsYXRl
VmlzaWJsZVJlY3QoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QsIGNvbnN0IEludFJl
Y3QmIGxheWVyQm91bmRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4gc3RhdGljIEludFJlY3QgY2FsY3VsYXRlVmlzaWJs
ZUxheWVyUmVjdChMYXllclR5cGUqKTsKIAogICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShMYXllckNocm9taXVtKiwgTGF5ZXJDaHJvbWl1bSogcm9v
dExheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9yPFJlZlB0cjxM
YXllckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8UmVmUHRyPExh
eWVyQ2hyb21pdW0+ID4mIGxheWVyTGlzdCwgaW50IG1heFRleHR1cmVTaXplKTsKLQogICAgIHN0
YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShDQ0xheWVySW1w
bCosIENDTGF5ZXJJbXBsKiByb290TGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBw
YXJlbnRNYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0
cml4LCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiBsYXllckxpc3QsIENDTGF5ZXJTb3J0ZXIq
LCBpbnQgbWF4VGV4dHVyZVNpemUpOwogCiAgICAgc3RydWN0IFNjcm9sbFVwZGF0ZUluZm8gewpA
QCAtNTQsNiArNTMsMzUgQEAgcHVibGljOgogCiB0eXBlZGVmIFZlY3RvcjxDQ0xheWVyVHJlZUhv
c3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8+IENDU2Nyb2xsVXBkYXRlU2V0OwogCit0ZW1wbGF0
ZTx0eXBlbmFtZSBMYXllclR5cGU+CitJbnRSZWN0IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlVmlzaWJsZUxheWVyUmVjdChMYXllclR5cGUqIGxheWVyKQoreworICAgIEFTU0VSVChs
YXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKKyAgICBJbnRSZWN0IHRhcmdldFN1cmZhY2VS
ZWN0ID0gbGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKTsKKworICAg
IGlmIChsYXllci0+dXNlc0xheWVyU2Npc3NvcigpKQorICAgICAgICB0YXJnZXRTdXJmYWNlUmVj
dC5pbnRlcnNlY3QobGF5ZXItPnNjaXNzb3JSZWN0KCkpOworCisgICAgaWYgKHRhcmdldFN1cmZh
Y2VSZWN0LmlzRW1wdHkoKSB8fCBsYXllci0+Y29udGVudEJvdW5kcygpLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIHRhcmdldFN1cmZhY2VSZWN0OworCisgICAgLy8gTm90ZSBjYXJlZnVsbHkg
dGhlc2UgYXJlIGFsaWFzZXMKKyAgICBjb25zdCBJbnRTaXplJiBib3VuZHMgPSBsYXllci0+Ym91
bmRzKCk7CisgICAgY29uc3QgSW50U2l6ZSYgY29udGVudEJvdW5kcyA9IGxheWVyLT5jb250ZW50
Qm91bmRzKCk7CisKKyAgICBjb25zdCBJbnRSZWN0IGxheWVyQm91bmRSZWN0ID0gSW50UmVjdChJ
bnRQb2ludCgpLCBjb250ZW50Qm91bmRzKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFu
c2Zvcm0gPSBsYXllci0+ZHJhd1RyYW5zZm9ybSgpOworCisgICAgdHJhbnNmb3JtLnNjYWxlTm9u
VW5pZm9ybShib3VuZHMud2lkdGgoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oY29udGVudEJvdW5k
cy53aWR0aCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy5oZWlnaHQo
KSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oY29udGVudEJvdW5kcy5oZWlnaHQoKSkpOworICAgIHRy
YW5zZm9ybS50cmFuc2xhdGUoLWNvbnRlbnRCb3VuZHMud2lkdGgoKSAvIDIuMCwgLWNvbnRlbnRC
b3VuZHMuaGVpZ2h0KCkgLyAyLjApOworCisgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0g
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlUmVjdCh0YXJnZXRTdXJmYWNl
UmVjdCwgbGF5ZXJCb3VuZFJlY3QsIHRyYW5zZm9ybSk7CisgICAgdmlzaWJsZUxheWVyUmVjdC5t
b3ZlKHRvU2l6ZShsYXllci0+c2Nyb2xsUG9zaXRpb24oKSkpOworCisgICAgcmV0dXJuIHZpc2li
bGVMYXllclJlY3Q7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112256</attachid>
            <date>2011-10-24 14:54:16 -0700</date>
            <delta_ts>2011-10-24 14:57:05 -0700</delta_ts>
            <desc>fixed last two suggestions</desc>
            <filename>bug-70057-20111024145415.patch</filename>
            <type>text/plain</type>
            <size>25598</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTgyNDUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1v
ZGUgMTAwNjQ0CmluZGV4IGVlNWMwMjEyMmExMmViNmJmZDFmYzc2OGU5ZGY0NTkwM2U1YjM3NTgu
LjhkNmVkY2Q5ZDQzYTA2ODQ2YmUwYTJiM2UwOTBmYjkzNDVmZDY0YjYKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDM0IEBACisyMDExLTEwLTI0ICBTaGF3biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0b3IgcGFpbnRpbmcvdXBkYXRpbmcvZHJhd2lu
ZyBjb2RlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzAwNTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHJlZmFjdG9yaW5nIHNlcGFyYXRlcyB0aGUgImVhcmx5IGV4aXRzIiBmcm9tIHRoZSBhY3R1
YWwgbG9vcAorICAgICAgICB0aGF0IGRyYXdzIGxheWVycy4gQXMgcGFydCBvZiB0aGlzLCBpdCB3
YXMgYWxzbyBhcHByb3ByaWF0ZSB0bworICAgICAgICBjbGVhbiB1cCB0aGUgd2F5IHRoYXQgbWFz
a3MgYW5kIHJlcGxpY2FzIGFyZSBkZWFsdCB3aXRoIHdoZW4KKyAgICAgICAgcGFpbnRpbmcgYW5k
IHVwZGF0aW5nLiBUaGUgcHVycG9zZSBvZiBhbGwgdGhpcyBpcyB0byBtYWtlIHRoaW5ncworICAg
ICAgICBlYXNpZXIgdG8gdGVzdCwgYW5kIGZvciBhIHNjaXNzb3Jpbmcgb3B0aW1pemF0aW9uIHRo
YXQgbmVlZHMgdG8KKyAgICAgICAga25vdyBleGF0bHkgd2hhdCBnZXRzIGRyYXduLiBFeGlzdGlu
ZyBsYXlvdXQgdGVzdHMgd2VyZSBhYmxlIHRvCisgICAgICAgIHZlcmlmeSB0aGUgcmVmYWN0b3Jp
bmcgZGlkIG5vdCBjaGFuZ2UgYmVoYXZpb3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFs
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tB
bmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3Q6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpsYXllclNob3VsZEJlQXBwZW5kZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlTGF5
ZXJSZWN0KToKKwogMjAxMS0xMC0yNCAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtTdHlsZXNdIEFkZGluZyBhIG5ldyBz
dHlsZSBydWxlIGJyZWFrcyB0aGluZ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwCmluZGV4IGJjYjMxNTMwOWZkMmRiZWIzM2E4NDA2ZDkxODZlMjVjNjkwZTA5ZDIuLmNlMDYy
ZmU4ZTZjZjA4MDY2N2RlYTdmMGM2N2Q0Y2U3NTI1YmE1MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcApAQCAtMzAxLDYgKzMwMSw0NSBAQCB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0xheWVycygpCiAgICAgICAgIGNvcHlPZmZzY3JlZW5UZXh0dXJlVG9E
aXNwbGF5KCk7CiB9CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250
b1JlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVy
TGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWw6OmRyYXdMYXllcnNPbnRvUmVuZGVy
U3VyZmFjZXMiLCB0aGlzLCAwKTsKKyAgICAKKyAgICAvLyBVcGRhdGUgdGhlIGNvbnRlbnRzIG9m
IHRoZSByZW5kZXIgc3VyZmFjZXMuIFdlIHRyYXZlcnNlIHRoZSByZW5kZXIgc3VyZmFjZXMKKyAg
ICAvLyBmcm9tIGJhY2sgdG8gZnJvbnQgdG8gZ3VhcmFudGVlIHRoYXQgbmVzdGVkIHJlbmRlciBz
dXJmYWNlcyBnZXQgcmVuZGVyZWQgaW4KKyAgICAvLyB0aGUgY29ycmVjdCBvcmRlci4KKyAgICBm
b3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7
IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKKyAgICAgICAgQ0NMYXllcklt
cGwqIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUlu
ZGV4XS5nZXQoKTsKKyAgICAgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVu
ZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgICAgIEFTU0VSVChyZW5kZXJT
dXJmYWNlKTsKKworICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRTa2lwc0RyYXcodHJ1ZSk7CisK
KyAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKS5zaXplKCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBTa2lwIGNvbXBsZXRlbHkgdHJhbnNwYXJlbnQg
cmVuZGVyIHN1cmZhY2VzLgorICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAodXNlUmVuZGVyU3VyZmFj
ZShyZW5kZXJTdXJmYWNlKSkgeworICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0U2tpcHNE
cmF3KGZhbHNlKTsKKworICAgICAgICAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllciAhPSByb290
RHJhd0xheWVyKSB7CisgICAgICAgICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250
ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKKyAgICAgICAg
ICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwg
MCwgMCkpOworICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+
Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpKTsKKyAgICAgICAgICAg
ICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRl
eHQzRDo6U0NJU1NPUl9URVNUKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnN0
IENDTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXll
ckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpCisgICAgICAgICAgICAgICAgZHJhd0xheWVyKGxh
eWVyTGlzdFtsYXllckluZGV4XS5nZXQoKSwgcmVuZGVyU3VyZmFjZSk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKKwogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNJbnRlcm5h
bCgpCiB7CiAgICAgaWYgKHZpZXdwb3J0U2l6ZSgpLmlzRW1wdHkoKSB8fCAhcm9vdExheWVyKCkp
CkBAIC0zNTQsNDAgKzM5Myw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5
ZXJzSW50ZXJuYWwoKQogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+YmxlbmRG
dW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNf
U1JDX0FMUEhBKSk7CiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5lbmFibGUo
R3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwogCi0gICAgLy8gVXBkYXRlIHRoZSBj
b250ZW50cyBvZiB0aGUgcmVuZGVyIHN1cmZhY2VzLiBXZSB0cmF2ZXJzZSB0aGUgYXJyYXkgZnJv
bQotICAgIC8vIGJhY2sgdG8gZnJvbnQgdG8gZ3VhcmFudGVlIHRoYXQgbmVzdGVkIHJlbmRlciBz
dXJmYWNlcyBnZXQgcmVuZGVyZWQgaW4gdGhlCi0gICAgLy8gY29ycmVjdCBvcmRlci4KLSAgICBm
b3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7
IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKLSAgICAgICAgQ0NMYXllcklt
cGwqIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUlu
ZGV4XS5nZXQoKTsKLSAgICAgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVu
ZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7Ci0gICAgICAgIEFTU0VSVChyZW5kZXJT
dXJmYWNlKTsKLQotICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRTa2lwc0RyYXcodHJ1ZSk7Ci0K
LSAgICAgICAgLy8gUmVuZGVyIHN1cmZhY2VzIHdob3NlIGRyYXdhYmxlIGFyZWEgaGFzIHplcm8g
d2lkdGggb3IgaGVpZ2h0Ci0gICAgICAgIC8vIHdpbGwgaGF2ZSBubyBsYXllcnMgYXNzb2NpYXRl
ZCB3aXRoIHRoZW0gYW5kIHNob3VsZCBiZSBza2lwcGVkLgotICAgICAgICBpZiAoIXJlbmRlclN1
cmZhY2UtPmxheWVyTGlzdCgpLnNpemUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgIC8vIFNraXAgY29tcGxldGVseSB0cmFuc3BhcmVudCByZW5kZXIgc3VyZmFjZXMuCi0gICAg
ICAgIGlmICghcmVuZGVyU3VyZmFjZS0+ZHJhd09wYWNpdHkoKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIGlmICh1c2VSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UpKSB7Ci0g
ICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRTa2lwc0RyYXcoZmFsc2UpOwotCi0gICAgICAg
ICAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVyICE9IHJvb3REcmF3TGF5ZXIpIHsKLSAgICAgICAg
ICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwotICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQu
Z2V0KCksIG1fY29udGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKSk7Ci0gICAgICAgICAgICAg
ICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQz
RDo6Q09MT1JfQlVGRkVSX0JJVCkpOwotICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0
KCksIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29uc3QgQ0NMYXllckxpc3QmIGxheWVyTGlz
dCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsrbGF5ZXJJ
bmRleCkKLSAgICAgICAgICAgICAgICBkcmF3TGF5ZXIobGF5ZXJMaXN0W2xheWVySW5kZXhdLmdl
dCgpLCByZW5kZXJTdXJmYWNlKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBkcmF3TGF5ZXJzT250
b1JlbmRlclN1cmZhY2VzKHJvb3REcmF3TGF5ZXIsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwog
CiAgICAgaWYgKG1faGVhZHNVcERpc3BsYXktPmVuYWJsZWQoKSkgewogICAgICAgICBHTEMobV9j
b250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQp
KTsKQEAgLTU3MCw0MyArNTc2LDE3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
TGF5ZXIoQ0NMYXllckltcGwqIGxheWVyLCBDQ1JlbmRlclN1cmZhY2UqIHRhcmdlCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIWxheWVyLT5kcmF3c0NvbnRlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKCFsYXllci0+b3BhY2l0eSgpKQotICAgICAgICByZXR1cm47
CisgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0PENDTGF5ZXJJbXBsPihsYXllcik7CisgICAgbGF5ZXIt
PnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZUxheWVyUmVjdCk7CiAKLSAgICBpZiAobGF5ZXIt
PmJvdW5kcygpLmlzRW1wdHkoKSkKKyAgICBpZiAodmlzaWJsZUxheWVyUmVjdC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEludFJlY3QgdGFyZ2V0U3VyZmFjZVJlY3QgPSBsYXll
ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpID8gbGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+
Y29udGVudFJlY3QoKSA6IG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCk7Ci0g
ICAgaWYgKGxheWVyLT51c2VzTGF5ZXJTY2lzc29yKCkpIHsKLSAgICAgICAgSW50UmVjdCBzY2lz
c29yUmVjdCA9IGxheWVyLT5zY2lzc29yUmVjdCgpOwotICAgICAgICB0YXJnZXRTdXJmYWNlUmVj
dC5pbnRlcnNlY3Qoc2Npc3NvclJlY3QpOwotICAgICAgICBpZiAodGFyZ2V0U3VyZmFjZVJlY3Qu
aXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzZXRTY2lzc29yVG9SZWN0
KHNjaXNzb3JSZWN0KTsKLSAgICB9IGVsc2UKKyAgICBpZiAobGF5ZXItPnVzZXNMYXllclNjaXNz
b3IoKSkKKyAgICAgICAgc2V0U2Npc3NvclRvUmVjdChsYXllci0+c2Npc3NvclJlY3QoKSk7Cisg
ICAgZWxzZQogICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRpc2FibGUo
R3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwogCi0gICAgSW50UmVjdCB2aXNpYmxl
TGF5ZXJSZWN0ID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlTGF5ZXJS
ZWN0KHRhcmdldFN1cmZhY2VSZWN0LCBsYXllci0+Ym91bmRzKCksIGxheWVyLT5jb250ZW50Qm91
bmRzKCksIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOwotICAgIHZpc2libGVMYXllclJlY3QubW92
ZSh0b1NpemUobGF5ZXItPnNjcm9sbFBvc2l0aW9uKCkpKTsKLSAgICBsYXllci0+c2V0VmlzaWJs
ZUxheWVyUmVjdCh2aXNpYmxlTGF5ZXJSZWN0KTsKLQotICAgIC8vIFRoZSBsYXllciBzaG91bGQg
bm90IGJlIGRyYXduIGlmICgxKSBpdCBpcyBub3QgZG91YmxlLXNpZGVkIGFuZCAoMikgdGhlIGJh
Y2sgb2YgdGhlIGxheWVyIGlzIGZhY2luZyB0aGUgc2NyZWVuLgotICAgIC8vIFRoaXMgc2Vjb25k
IGNvbmRpdGlvbiBpcyBjaGVja2VkIGJ5IGNvbXB1dGluZyB0aGUgdHJhbnNmb3JtZWQgbm9ybWFs
IG9mIHRoZSBsYXllci4KLSAgICBpZiAoIWxheWVyLT5kb3VibGVTaWRlZCgpKSB7Ci0gICAgICAg
IEZsb2F0UmVjdCBsYXllclJlY3QoRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRTaXplKGxheWVyLT5i
b3VuZHMoKSkpOwotICAgICAgICBGbG9hdFF1YWQgbWFwcGVkTGF5ZXIgPSBsYXllci0+c2NyZWVu
U3BhY2VUcmFuc2Zvcm0oKS5tYXBRdWFkKEZsb2F0UXVhZChsYXllclJlY3QpKTsKLSAgICAgICAg
RmxvYXRTaXplIGhvcml6b250YWxEaXIgPSBtYXBwZWRMYXllci5wMigpIC0gbWFwcGVkTGF5ZXIu
cDEoKTsKLSAgICAgICAgRmxvYXRTaXplIHZlcnRpY2FsRGlyID0gbWFwcGVkTGF5ZXIucDQoKSAt
IG1hcHBlZExheWVyLnAxKCk7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCB4QXhpcyhob3Jpem9udGFs
RGlyLndpZHRoKCksIGhvcml6b250YWxEaXIuaGVpZ2h0KCksIDApOwotICAgICAgICBGbG9hdFBv
aW50M0QgeUF4aXModmVydGljYWxEaXIud2lkdGgoKSwgdmVydGljYWxEaXIuaGVpZ2h0KCksIDAp
OwotICAgICAgICBGbG9hdFBvaW50M0QgekF4aXMgPSB4QXhpcy5jcm9zcyh5QXhpcyk7Ci0gICAg
ICAgIGlmICh6QXhpcy56KCkgPCAwKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAg
IGxheWVyLT5kcmF3KHRoaXMpOwogCiAgICAgLy8gRHJhdyB0aGUgZGVidWcgYm9yZGVyIGlmIHRo
ZXJlIGlzIG9uZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggYTJmNTY2
YWQ0OTAyMDMxOTU3YjRmNGZiYzc4ODdjOTkyOWMyMTE2NC4uNjQ2ZWE2ZTVjNDQ4YTU4YzYxMjQx
MzQyYjBmOWE2ZWFkZGFlZjQ0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgK
QEAgLTE2MSw2ICsxNjEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaW5pdGlhbGl6ZSgpOwogCiAg
ICAgdm9pZCBkcmF3TGF5ZXJzSW50ZXJuYWwoKTsKKyAgICB2b2lkIGRyYXdMYXllcnNPbnRvUmVu
ZGVyU3VyZmFjZXMoQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIsIGNvbnN0IENDTGF5ZXJMaXN0
JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICB2b2lkIGRyYXdMYXllcihDQ0xheWVySW1w
bCosIENDUmVuZGVyU3VyZmFjZSopOwogCiAgICAgTWFuYWdlZFRleHR1cmUqIGdldE9mZnNjcmVl
bkxheWVyVGV4dHVyZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggN2M3
NjBiOWQ2OWIwNDYzMjgwM2Q5Njc1YWJmNzJhZDJhNjUyNGZiMS4uNzc1NGE5OTFmNGM4ZGVjMjc2
OWNiYjUyYTBkYjk0NzZhNmYwYTlmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3Bw
CkBAIC0yOTgsNiArMjk4LDMyIEBAIHN0YXRpYyB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KExh
eWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5CiAgICAgfQogfQog
Cit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZh
Y2UoTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyKQoreworICAgIC8vIE5vdGU6IE1h
c2tzIGFuZCByZXBsaWNhcyBvbmx5IGV4aXN0IGZvciBsYXllcnMgdGhhdCBvd24gcmVuZGVyIHN1
cmZhY2VzLiBJZiB3ZSByZWFjaCB0aGlzIHBvaW50CisgICAgLy8gaW4gY29kZSwgd2UgYWxyZWFk
eSBrbm93IHRoYXQgYXQgbGVhc3Qgc29tZXRoaW5nIHdpbGwgYmUgZHJhd24gaW50byB0aGlzIHJl
bmRlciBzdXJmYWNlLCBzbyB0aGUKKyAgICAvLyBtYXNrIGFuZCByZXBsaWNhIHNob3VsZCBiZSBw
YWludGVkLgorCisgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCkpIHsKKyAg
ICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJUcmVlSG9zdCh0
aGlzKTsKKyAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkocmVuZGVyU3VyZmFjZUxheWVyLT5t
YXNrTGF5ZXIoKSwgSW50UmVjdChJbnRQb2ludCgpLCByZW5kZXJTdXJmYWNlTGF5ZXItPmNvbnRl
bnRCb3VuZHMoKSkpOworICAgIH0KKworICAgIExheWVyQ2hyb21pdW0qIHJlcGxpY2FMYXllciA9
IHJlbmRlclN1cmZhY2VMYXllci0+cmVwbGljYUxheWVyKCk7CisgICAgaWYgKHJlcGxpY2FMYXll
cikgeworCisgICAgICAgIEludFJlY3QgdmlzaWJsZUxheWVyUmVjdCA9IENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdDxMYXllckNocm9taXVtPihyZW5kZXJT
dXJmYWNlTGF5ZXIpOworCisgICAgICAgIHJlcGxpY2FMYXllci0+c2V0TGF5ZXJUcmVlSG9zdCh0
aGlzKTsKKyAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkocmVwbGljYUxheWVyLCB2aXNpYmxl
TGF5ZXJSZWN0KTsKKworICAgICAgICBpZiAocmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKSkgewor
ICAgICAgICAgICAgcmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJUcmVlSG9zdCh0
aGlzKTsKKyAgICAgICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlcGxpY2FMYXllci0+bWFz
a0xheWVyKCksIEludFJlY3QoSW50UG9pbnQoKSwgcmVwbGljYUxheWVyLT5tYXNrTGF5ZXIoKS0+
Y29udGVudEJvdW5kcygpKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgQ0NMYXllclRy
ZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KQogewogICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VM
YXllckxpc3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkg
ewpAQCAtMzA1LDggKzMzMSw2IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29u
dGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0CiAgICAgICAgIFJl
bmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+
cmVuZGVyU3VyZmFjZSgpOwogICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7CiAKLSAgICAg
ICAgcmVuZGVyU3VyZmFjZUxheWVyLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOwotCiAgICAgICAg
IC8vIFJlbmRlciBzdXJmYWNlcyB3aG9zZSBkcmF3YWJsZSBhcmVhIGhhcyB6ZXJvIHdpZHRoIG9y
IGhlaWdodAogICAgICAgICAvLyB3aWxsIGhhdmUgbm8gbGF5ZXJzIGFzc29jaWF0ZWQgd2l0aCB0
aGVtIGFuZCBzaG91bGQgYmUgc2tpcHBlZC4KICAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5s
YXllckxpc3QoKS5zaXplKCkpCkBAIC0zMTUsNiArMzM5LDkgQEAgdm9pZCBDQ0xheWVyVHJlZUhv
c3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QKICAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5kcmF3T3BhY2l0eSgpKQogICAgICAg
ICAgICAgY29udGludWU7CiAKKyAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5zZXRMYXllclRy
ZWVIb3N0KHRoaXMpOworICAgICAgICBwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFj
ZShyZW5kZXJTdXJmYWNlTGF5ZXIpOworCiAgICAgICAgIGNvbnN0IExheWVyTGlzdCYgbGF5ZXJM
aXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7CiAgICAgICAgIEFTU0VSVChsYXllckxp
c3Quc2l6ZSgpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJ
bmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsrbGF5ZXJJbmRleCkgewpAQCAtMzI3LDM5ICszNTQs
MTIgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXll
ckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QKIAogICAgICAgICAgICAgbGF5ZXItPnNldExh
eWVyVHJlZUhvc3QodGhpcyk7CiAKLSAgICAgICAgICAgIGlmICghbGF5ZXItPm9wYWNpdHkoKSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKGxheWVyLT5tYXNr
TGF5ZXIoKSkKLSAgICAgICAgICAgICAgICBsYXllci0+bWFza0xheWVyKCktPnNldExheWVyVHJl
ZUhvc3QodGhpcyk7Ci0gICAgICAgICAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpKSB7Ci0g
ICAgICAgICAgICAgICAgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5zZXRMYXllclRyZWVIb3N0KHRo
aXMpOwotICAgICAgICAgICAgICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXll
cigpKQotICAgICAgICAgICAgICAgICAgICBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXll
cigpLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAobGF5ZXItPmJvdW5kcygpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAgICAgSW50UmVjdCBkZWZhdWx0Q29udGVudFJlY3QgPSBJbnRSZWN0KHJv
b3RMYXllcigpLT5zY3JvbGxQb3NpdGlvbigpLCB2aWV3cG9ydFNpemUoKSk7Ci0KLSAgICAgICAg
ICAgIEludFJlY3QgdGFyZ2V0U3VyZmFjZVJlY3QgPSBsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFj
ZSgpID8gbGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSA6IGRlZmF1
bHRDb250ZW50UmVjdDsKLSAgICAgICAgICAgIGlmIChsYXllci0+dXNlc0xheWVyU2Npc3Nvcigp
KQotICAgICAgICAgICAgICAgIHRhcmdldFN1cmZhY2VSZWN0LmludGVyc2VjdChsYXllci0+c2Np
c3NvclJlY3QoKSk7Ci0gICAgICAgICAgICBJbnRSZWN0IHZpc2libGVMYXllclJlY3QgPSBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVMYXllclJlY3QodGFyZ2V0U3VyZmFj
ZVJlY3QsIGxheWVyLT5ib3VuZHMoKSwgbGF5ZXItPmNvbnRlbnRCb3VuZHMoKSwgbGF5ZXItPmRy
YXdUcmFuc2Zvcm0oKSk7Ci0KLSAgICAgICAgICAgIHZpc2libGVMYXllclJlY3QubW92ZSh0b1Np
emUobGF5ZXItPnNjcm9sbFBvc2l0aW9uKCkpKTsKKyAgICAgICAgICAgIEFTU0VSVChsYXllci0+
b3BhY2l0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghbGF5ZXItPmJvdW5kcygpLmlzRW1wdHko
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEludFJlY3QgdmlzaWJsZUxheWVyUmVjdCA9
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdDxMYXllckNo
cm9taXVtPihsYXllcik7CisgICAgICAgICAgICAKICAgICAgICAgICAgIHBhaW50Q29udGVudHNJ
ZkRpcnR5KGxheWVyLCB2aXNpYmxlTGF5ZXJSZWN0KTsKLQotICAgICAgICAgICAgaWYgKExheWVy
Q2hyb21pdW0qIG1hc2tMYXllciA9IGxheWVyLT5tYXNrTGF5ZXIoKSkKLSAgICAgICAgICAgICAg
ICBwYWludENvbnRlbnRzSWZEaXJ0eShtYXNrTGF5ZXIsIEludFJlY3QoSW50UG9pbnQoKSwgbWFz
a0xheWVyLT5jb250ZW50Qm91bmRzKCkpKTsKLQotICAgICAgICAgICAgaWYgKExheWVyQ2hyb21p
dW0qIHJlcGxpY2FMYXllciA9IGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkgewotICAgICAgICAgICAg
ICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlcGxpY2FMYXllciwgdmlzaWJsZUxheWVyUmVjdCk7
Ci0KLSAgICAgICAgICAgICAgICBpZiAoTGF5ZXJDaHJvbWl1bSogcmVwbGljYU1hc2tMYXllciA9
IHJlcGxpY2FMYXllci0+bWFza0xheWVyKCkpCi0gICAgICAgICAgICAgICAgICAgIHBhaW50Q29u
dGVudHNJZkRpcnR5KHJlcGxpY2FNYXNrTGF5ZXIsIEludFJlY3QoSW50UG9pbnQoKSwgcmVwbGlj
YU1hc2tMYXllci0+Y29udGVudEJvdW5kcygpKSk7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9CiB9CkBAIC0zNzQsNiArMzc0LDE2IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRh
dGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxhCiAg
ICAgICAgIGlmICghcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCkuc2l6ZSgpIHx8ICFyZW5kZXJT
dXJmYWNlLT5kcmF3T3BhY2l0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAg
aWYgKHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCkpCisgICAgICAgICAgICB1cGRhdGVD
b21wb3NpdG9yUmVzb3VyY2VzKHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCksIGNvbnRl
eHQsIGFsbG9jYXRvcik7CisKKyAgICAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllci0+cmVwbGlj
YUxheWVyKCkpIHsKKyAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMocmVuZGVy
U3VyZmFjZUxheWVyLT5yZXBsaWNhTGF5ZXIoKSwgY29udGV4dCwgYWxsb2NhdG9yKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllci0+cmVwbGljYUxheWVy
KCktPm1hc2tMYXllcigpKQorICAgICAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMocmVuZGVyU3VyZmFjZUxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCksIGNvbnRl
eHQsIGFsbG9jYXRvcik7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGNvbnN0IExheWVy
TGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7CiAgICAgICAgIEFT
U0VSVChsYXllckxpc3Quc2l6ZSgpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4
ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsrbGF5ZXJJbmRleCkgewpAQCAt
Mzg4LDE5ICszOTgsMTIgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUNvbXBvc2l0b3JS
ZXNvdXJjZXMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGEKIAogdm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXIs
IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3Ip
CiB7Ci0gICAgaWYgKGxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpCisgICAgLy8gRm9yIG5vcm1h
bCBsYXllcnMsIHRoZXNlIGNvbmRpdGlvbnMgc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGNoZWNr
ZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHJlbmRlciBzdXJmYWNlIGxheWVyIGxpc3RzLgorICAgIC8v
IEZvciBtYXNrcyBhbmQgcmVwbGljYXMgaG93ZXZlciwgd2UgbWF5IHN0aWxsIG5lZWQgdG8gY2hl
Y2sgdGhlbSBoZXJlLgorICAgIGlmIChsYXllci0+Ym91bmRzKCkuaXNFbXB0eSgpIHx8ICFsYXll
ci0+b3BhY2l0eSgpIHx8ICFsYXllci0+ZHJhd3NDb250ZW50KCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmICghbGF5ZXItPm9wYWNpdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGxheWVyLT5tYXNrTGF5ZXIoKSkKLSAgICAgICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhs
YXllci0+bWFza0xheWVyKCksIGNvbnRleHQsIGFsbG9jYXRvcik7Ci0gICAgaWYgKGxheWVyLT5y
ZXBsaWNhTGF5ZXIoKSkKLSAgICAgICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhsYXllci0+
cmVwbGljYUxheWVyKCksIGNvbnRleHQsIGFsbG9jYXRvcik7Ci0KLSAgICBpZiAobGF5ZXItPmRy
YXdzQ29udGVudCgpKQotICAgICAgICBsYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhj
b250ZXh0LCBhbGxvY2F0b3IpOworICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2Vz
KGNvbnRleHQsIGFsbG9jYXRvcik7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpjbGVhclBl
bmRpbmdVcGRhdGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCBlNWRkYmI0MzUx
YWI0YTZiNDJlYjUzNzcyOTcxMmEwNDU1ODc4MmQyLi45ODhmZmU5NWFkMzg3MjFlOTdmOTQ1MWUw
ODlmZDExZWNkZGY4OGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMTY1LDkg
KzE2NSwxMiBAQCBwcml2YXRlOgogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+IExheWVyTGlzdDsKIAogICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExh
eWVyTGlzdCYpOworICAgIHZvaWQgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2Uo
TGF5ZXJDaHJvbWl1bSopOworCiAgICAgdm9pZCB1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSop
OwogICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb25zdCBMYXllckxpc3QmLCBH
cmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqKTsKICAgICB2b2lkIHVwZGF0ZUNv
bXBvc2l0b3JSZXNvdXJjZXMoTGF5ZXJDaHJvbWl1bSosIEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4
dHVyZUFsbG9jYXRvciopOworICAgIHZvaWQgdXBkYXRlTWFza1Jlc291cmNlc0ZvclJlbmRlclN1
cmZhY2UoTGF5ZXJDaHJvbWl1bSosIEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRv
ciopOwogICAgIHZvaWQgY2xlYXJQZW5kaW5nVXBkYXRlKCk7CiAKICAgICBpbnQgbV9jb21wb3Np
dG9ySWRlbnRpZmllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3Bw
CmluZGV4IGNjMDM4MGNiYmY1ZTQ1ZWFkNmFmMTkwODkwMjM4MWFjMmFmMTY2ZDYuLjA3MDA4ZTAy
OTBiMjQ2Njg2MmIxNTQ3NmVmYjI4NDExMjljZDM0OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0Q29tbW9uLmNwcApAQCAtNjEsMjEgKzYxLDYgQEAgSW50UmVjdCBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVSZWN0KGNvbnN0IEludFJlY3QmIHRhcmdl
dFN1cmZhY2UKICAgICByZXR1cm4gbGF5ZXJSZWN0OwogfQogCi1JbnRSZWN0IENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdChjb25zdCBJbnRSZWN0JiB0YXJn
ZXRTdXJmYWNlUmVjdCwgY29uc3QgSW50U2l6ZSYgYm91bmRzLCBjb25zdCBJbnRTaXplJiBjb250
ZW50Qm91bmRzLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdGlsaW5nVHJhbnNmb3JtKQot
ewotICAgIGlmICh0YXJnZXRTdXJmYWNlUmVjdC5pc0VtcHR5KCkgfHwgY29udGVudEJvdW5kcy5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0YXJnZXRTdXJmYWNlUmVjdDsKLQotICAgIGNvbnN0
IEludFJlY3QgbGF5ZXJCb3VuZFJlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIGNvbnRlbnRCb3Vu
ZHMpOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSA9IHRpbGluZ1RyYW5zZm9y
bTsKLQotICAgIHRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oYm91bmRzLndpZHRoKCkgLyBzdGF0
aWNfY2FzdDxkb3VibGU+KGNvbnRlbnRCb3VuZHMud2lkdGgoKSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib3VuZHMuaGVpZ2h0KCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGNvbnRl
bnRCb3VuZHMuaGVpZ2h0KCkpKTsKLSAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKC1jb250ZW50Qm91
bmRzLndpZHRoKCkgLyAyLjAsIC1jb250ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsKLQotICAg
IHJldHVybiBjYWxjdWxhdGVWaXNpYmxlUmVjdCh0YXJnZXRTdXJmYWNlUmVjdCwgbGF5ZXJCb3Vu
ZFJlY3QsIHRyYW5zZm9ybSk7Ci19Ci0KIHN0YXRpYyBib29sIGlzU2NhbGVPclRyYW5zbGF0aW9u
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQogewogICAgIHJldHVybiAhbS5tMTIoKSAm
JiAhbS5tMTMoKSAmJiAhbS5tMTQoKQpAQCAtODUsNiArNzAsMzkgQEAgc3RhdGljIGJvb2wgaXNT
Y2FsZU9yVHJhbnNsYXRpb24oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG0pCiAKIH0KIAor
dGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgorYm9vbCBsYXllclNob3VsZEJlU2tpcHBlZChM
YXllclR5cGUqIGxheWVyKQoreworICAgIC8vIExheWVycyBjYW4gYmUgc2tpcHBlZCBpZiBhbnkg
b2YgdGhlc2UgY29uZGl0aW9ucyBhcmUgbWV0LgorICAgIC8vICAgLSBkb2VzIG5vdCBkcmF3IGNv
bnRlbnQuCisgICAgLy8gICAtIGlzIHRyYW5zcGFyZW50CisgICAgLy8gICAtIGhhcyBlbXB0eSBi
b3VuZHMKKyAgICAvLyAgIC0gdGhlIGxheWVyIGlzIG5vdCBkb3VibGUtc2lkZWQsIGJ1dCBpdHMg
YmFjayBmYWNlIGlzIHZpc2libGUuCisgICAgLy8KKyAgICAvLyBTb21lIGFkZGl0aW9uYWwgY29u
ZGl0aW9ucyBuZWVkIHRvIGJlIGNvbXB1dGVkIGF0IGEgbGF0ZXIgcG9pbnQgYWZ0ZXIgdGhlIHJl
Y3Vyc2lvbiBpcyBmaW5pc2hlZC4KKyAgICAvLyAgIC0gdGhlIGludGVyc2VjdGlvbiBvZiByZW5k
ZXIgc3VyZmFjZSBjb250ZW50IGFuZCBsYXllciBzY2lzc29yIGlzIGVtcHR5CisgICAgLy8gICAt
IHRoZSB2aXNpYmxlTGF5ZXJSZWN0IGlzIGVtcHR5CisKKyAgICBpZiAoIWxheWVyLT5kcmF3c0Nv
bnRlbnQoKSB8fCAhbGF5ZXItPm9wYWNpdHkoKSB8fCBsYXllci0+Ym91bmRzKCkuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIFRoZSBsYXllciBzaG91bGQgbm90IGJl
IGRyYXduIGlmICgxKSBpdCBpcyBub3QgZG91YmxlLXNpZGVkIGFuZCAoMikgdGhlIGJhY2sgb2Yg
dGhlIGxheWVyIGlzIGZhY2luZyB0aGUgc2NyZWVuLgorICAgIC8vIFRoaXMgc2Vjb25kIGNvbmRp
dGlvbiBpcyBjaGVja2VkIGJ5IGNvbXB1dGluZyB0aGUgdHJhbnNmb3JtZWQgbm9ybWFsIG9mIHRo
ZSBsYXllci4KKyAgICBpZiAoIWxheWVyLT5kb3VibGVTaWRlZCgpKSB7CisgICAgICAgIEZsb2F0
UmVjdCBsYXllclJlY3QoRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRTaXplKGxheWVyLT5ib3VuZHMo
KSkpOworICAgICAgICBGbG9hdFF1YWQgbWFwcGVkTGF5ZXIgPSBsYXllci0+c2NyZWVuU3BhY2VU
cmFuc2Zvcm0oKS5tYXBRdWFkKEZsb2F0UXVhZChsYXllclJlY3QpKTsKKyAgICAgICAgRmxvYXRT
aXplIGhvcml6b250YWxEaXIgPSBtYXBwZWRMYXllci5wMigpIC0gbWFwcGVkTGF5ZXIucDEoKTsK
KyAgICAgICAgRmxvYXRTaXplIHZlcnRpY2FsRGlyID0gbWFwcGVkTGF5ZXIucDQoKSAtIG1hcHBl
ZExheWVyLnAxKCk7CisgICAgICAgIEZsb2F0UG9pbnQzRCB4QXhpcyhob3Jpem9udGFsRGlyLndp
ZHRoKCksIGhvcml6b250YWxEaXIuaGVpZ2h0KCksIDApOworICAgICAgICBGbG9hdFBvaW50M0Qg
eUF4aXModmVydGljYWxEaXIud2lkdGgoKSwgdmVydGljYWxEaXIuaGVpZ2h0KCksIDApOworICAg
ICAgICBGbG9hdFBvaW50M0QgekF4aXMgPSB4QXhpcy5jcm9zcyh5QXhpcyk7CisgICAgICAgIGlm
ICh6QXhpcy56KCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
cmV0dXJuIGZhbHNlOworfQorCiAvLyBSZWN1cnNpdmVseSB3YWxrcyB0aGUgbGF5ZXIgdHJlZSBz
dGFydGluZyBhdCB0aGUgZ2l2ZW4gbm9kZSBhbmQgY29tcHV0ZXMgYWxsIHRoZQogLy8gbmVjZXNz
YXJ5IHRyYW5zZm9ybWF0aW9ucywgc2Npc3NvciByZWN0YW5nbGVzLCByZW5kZXIgc3VyZmFjZXMs
IGV0Yy4KIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFj
ZVR5cGUsIHR5cGVuYW1lIExheWVyU29ydGVyPgpAQCAtMzI5LDkgKzM0NywxMiBAQCBzdGF0aWMg
dm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5
cGUqIGxheWVyLCBMYXllcgogICAgIHN1YmxheWVyTWF0cml4LnRyYW5zbGF0ZTNkKC1ib3VuZHMu
d2lkdGgoKSAqIDAuNSwgLWJvdW5kcy5oZWlnaHQoKSAqIDAuNSwgMCk7CiAKICAgICBMYXllckxp
c3QmIGRlc2NlbmRhbnRzID0gKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgPyBsYXllci0+cmVuZGVy
U3VyZmFjZSgpLT5sYXllckxpc3QoKSA6IGxheWVyTGlzdCk7Ci0gICAgZGVzY2VuZGFudHMuYXBw
ZW5kKGxheWVyKTsKIAotICAgIHVuc2lnbmVkIHRoaXNMYXllckluZGV4ID0gZGVzY2VuZGFudHMu
c2l6ZSgpIC0gMTsKKyAgICAvLyBBbnkgbGF5ZXJzIHRoYXQgYXJlIGFwcGVuZGVkIGFmdGVyIHRo
aXMgcG9pbnQgYXJlIGluIHRoZSBsYXllcidzIHN1YnRyZWUgYW5kIHNob3VsZCBiZSBpbmNsdWRl
ZCBpbiB0aGUgc29ydGluZyBwcm9jZXNzLgorICAgIHVuc2lnbmVkIHNvcnRpbmdTdGFydEluZGV4
ID0gZGVzY2VuZGFudHMuc2l6ZSgpOworCisgICAgaWYgKCFsYXllclNob3VsZEJlU2tpcHBlZChs
YXllcikpCisgICAgICAgIGRlc2NlbmRhbnRzLmFwcGVuZChsYXllcik7CiAKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CiAgICAgICAg
IExheWVyVHlwZSogY2hpbGQgPSBsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKTsKQEAgLTQwOCw4
ICs0MjksOCBAQCBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHlJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllcgogICAgIC8vIElmIHByZXNlcnZlcy0z
ZCB0aGVuIHNvcnQgYWxsIHRoZSBkZXNjZW5kYW50cyBpbiAzRCBzbyB0aGF0IHRoZXkgY2FuIGJl
CiAgICAgLy8gZHJhd24gZnJvbSBiYWNrIHRvIGZyb250LiBJZiB0aGUgcHJlc2VydmVzLTNkIHBy
b3BlcnR5IGlzIGFsc28gc2V0IG9uIHRoZSBwYXJlbnQgdGhlbgogICAgIC8vIHNraXAgdGhlIHNv
cnRpbmcgYXMgdGhlIHBhcmVudCB3aWxsIHNvcnQgYWxsIHRoZSBkZXNjZW5kYW50cyBhbnl3YXku
Ci0gICAgaWYgKGxheWVyLT5wcmVzZXJ2ZXMzRCgpICYmICghbGF5ZXItPnBhcmVudCgpIHx8ICFs
YXllci0+cGFyZW50KCktPnByZXNlcnZlczNEKCkpKQotICAgICAgICBzb3J0TGF5ZXJzKCZkZXNj
ZW5kYW50cy5hdCh0aGlzTGF5ZXJJbmRleCksIGRlc2NlbmRhbnRzLmVuZCgpLCBsYXllclNvcnRl
cik7CisgICAgaWYgKGRlc2NlbmRhbnRzLnNpemUoKSAmJiBsYXllci0+cHJlc2VydmVzM0QoKSAm
JiAoIWxheWVyLT5wYXJlbnQoKSB8fCAhbGF5ZXItPnBhcmVudCgpLT5wcmVzZXJ2ZXMzRCgpKSkK
KyAgICAgICAgc29ydExheWVycygmZGVzY2VuZGFudHMuYXQoc29ydGluZ1N0YXJ0SW5kZXgpLCBk
ZXNjZW5kYW50cy5lbmQoKSwgbGF5ZXJTb3J0ZXIpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KExheWVyQ2hyb21p
dW0qIGxheWVyLCBMYXllckNocm9taXVtKiByb290TGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxsSGll
cmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgbGF5ZXJMaXN0LCBp
bnQgbWF4VGV4dHVyZVNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5o
CmluZGV4IGU5MjQxZGRhNDUyMTI3MWRlNWQ1OTJiZDllMjQ3OGVkNGVhYzRlZTMuLmU0ZDQ5NjM3
NDE4Yjc5YjMwZWMwYzMwZDFmYjBmM2JkYTIxNjM1NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdENvbW1vbi5oCkBAIC0yNSw3ICsyNSw5IEBACiAjaWZuZGVmIENDTGF5ZXJUcmVl
SG9zdENvbW1vbl9oCiAjZGVmaW5lIENDTGF5ZXJUcmVlSG9zdENvbW1vbl9oCiAKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIApAQCAtMzMsMTcgKzM1LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
Q0NMYXllckltcGw7CiBjbGFzcyBDQ0xheWVyU29ydGVyOwotY2xhc3MgSW50UmVjdDsKIGNsYXNz
IExheWVyQ2hyb21pdW07Ci1jbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIAogY2xhc3MgQ0NM
YXllclRyZWVIb3N0Q29tbW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgSW50UmVjdCBjYWxjdWxh
dGVWaXNpYmxlTGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2VSZWN0LCBjb25z
dCBJbnRTaXplJiBib3VuZHMsIGNvbnN0IEludFNpemUmIGNvbnRlbnRCb3VuZHMsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0aWxpbmdUcmFuc2Zvcm0pOwogICAgIHN0YXRpYyBJbnRSZWN0
IGNhbGN1bGF0ZVZpc2libGVSZWN0KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2VSZWN0LCBj
b25zdCBJbnRSZWN0JiBsYXllckJvdW5kUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+IHN0YXRpYyBJbnRSZWN0IGNhbGN1
bGF0ZVZpc2libGVMYXllclJlY3QoTGF5ZXJUeXBlKik7CiAKICAgICBzdGF0aWMgdm9pZCBjYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoTGF5ZXJDaHJvbWl1bSosIExheWVyQ2hy
b21pdW0qIHJvb3RMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJp
eCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3Rv
cjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBsYXllckxpc3QsIGludCBtYXhUZXh0dXJlU2l6ZSk7
Ci0KICAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHko
Q0NMYXllckltcGwqLCBDQ0xheWVySW1wbCogcm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhp
ZXJhcmNoeU1hdHJpeCwgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiYgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiYgbGF5ZXJMaXN0LCBDQ0xh
eWVyU29ydGVyKiwgaW50IG1heFRleHR1cmVTaXplKTsKIAogICAgIHN0cnVjdCBTY3JvbGxVcGRh
dGVJbmZvIHsKQEAgLTU0LDYgKzUzLDM1IEBAIHB1YmxpYzoKIAogdHlwZWRlZiBWZWN0b3I8Q0NM
YXllclRyZWVIb3N0Q29tbW9uOjpTY3JvbGxVcGRhdGVJbmZvPiBDQ1Njcm9sbFVwZGF0ZVNldDsK
IAordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPgorSW50UmVjdCBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZVZpc2libGVMYXllclJlY3QoTGF5ZXJUeXBlKiBsYXllcikKK3sKKyAg
ICBBU1NFUlQobGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKSk7CisgICAgSW50UmVjdCB0YXJn
ZXRTdXJmYWNlUmVjdCA9IGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0
KCk7CisKKyAgICBpZiAobGF5ZXItPnVzZXNMYXllclNjaXNzb3IoKSkKKyAgICAgICAgdGFyZ2V0
U3VyZmFjZVJlY3QuaW50ZXJzZWN0KGxheWVyLT5zY2lzc29yUmVjdCgpKTsKKworICAgIGlmICh0
YXJnZXRTdXJmYWNlUmVjdC5pc0VtcHR5KCkgfHwgbGF5ZXItPmNvbnRlbnRCb3VuZHMoKS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiB0YXJnZXRTdXJmYWNlUmVjdDsKKworICAgIC8vIE5vdGUg
Y2FyZWZ1bGx5IHRoZXNlIGFyZSBhbGlhc2VzCisgICAgY29uc3QgSW50U2l6ZSYgYm91bmRzID0g
bGF5ZXItPmJvdW5kcygpOworICAgIGNvbnN0IEludFNpemUmIGNvbnRlbnRCb3VuZHMgPSBsYXll
ci0+Y29udGVudEJvdW5kcygpOworCisgICAgY29uc3QgSW50UmVjdCBsYXllckJvdW5kUmVjdCA9
IEludFJlY3QoSW50UG9pbnQoKSwgY29udGVudEJvdW5kcyk7CisgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggdHJhbnNmb3JtID0gbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKKworICAgIHRyYW5zZm9y
bS5zY2FsZU5vblVuaWZvcm0oYm91bmRzLndpZHRoKCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGNv
bnRlbnRCb3VuZHMud2lkdGgoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3Vu
ZHMuaGVpZ2h0KCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkp
KTsKKyAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKC1jb250ZW50Qm91bmRzLndpZHRoKCkgLyAyLjAs
IC1jb250ZW50Qm91bmRzLmhlaWdodCgpIC8gMi4wKTsKKworICAgIEludFJlY3QgdmlzaWJsZUxh
eWVyUmVjdCA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZVJlY3QodGFy
Z2V0U3VyZmFjZVJlY3QsIGxheWVyQm91bmRSZWN0LCB0cmFuc2Zvcm0pOworICAgIHZpc2libGVM
YXllclJlY3QubW92ZSh0b1NpemUobGF5ZXItPnNjcm9sbFBvc2l0aW9uKCkpKTsKKworICAgIHJl
dHVybiB2aXNpYmxlTGF5ZXJSZWN0OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112257</attachid>
            <date>2011-10-24 14:57:10 -0700</date>
            <delta_ts>2011-10-24 19:53:32 -0700</delta_ts>
            <desc>fixed last two suggestions</desc>
            <filename>bug-70057-20111024145709.patch</filename>
            <type>text/plain</type>
            <size>25578</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTgyNDUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1v
ZGUgMTAwNjQ0CmluZGV4IGVlNWMwMjEyMmExMmViNmJmZDFmYzc2OGU5ZGY0NTkwM2U1YjM3NTgu
LjhkNmVkY2Q5ZDQzYTA2ODQ2YmUwYTJiM2UwOTBmYjkzNDVmZDY0YjYKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDM0IEBACisyMDExLTEwLTI0ICBTaGF3biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0b3IgcGFpbnRpbmcvdXBkYXRpbmcvZHJhd2lu
ZyBjb2RlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzAwNTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHJlZmFjdG9yaW5nIHNlcGFyYXRlcyB0aGUgImVhcmx5IGV4aXRzIiBmcm9tIHRoZSBhY3R1
YWwgbG9vcAorICAgICAgICB0aGF0IGRyYXdzIGxheWVycy4gQXMgcGFydCBvZiB0aGlzLCBpdCB3
YXMgYWxzbyBhcHByb3ByaWF0ZSB0bworICAgICAgICBjbGVhbiB1cCB0aGUgd2F5IHRoYXQgbWFz
a3MgYW5kIHJlcGxpY2FzIGFyZSBkZWFsdCB3aXRoIHdoZW4KKyAgICAgICAgcGFpbnRpbmcgYW5k
IHVwZGF0aW5nLiBUaGUgcHVycG9zZSBvZiBhbGwgdGhpcyBpcyB0byBtYWtlIHRoaW5ncworICAg
ICAgICBlYXNpZXIgdG8gdGVzdCwgYW5kIGZvciBhIHNjaXNzb3Jpbmcgb3B0aW1pemF0aW9uIHRo
YXQgbmVlZHMgdG8KKyAgICAgICAga25vdyBleGF0bHkgd2hhdCBnZXRzIGRyYXduLiBFeGlzdGlu
ZyBsYXlvdXQgdGVzdHMgd2VyZSBhYmxlIHRvCisgICAgICAgIHZlcmlmeSB0aGUgcmVmYWN0b3Jp
bmcgZGlkIG5vdCBjaGFuZ2UgYmVoYXZpb3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFs
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tB
bmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3Q6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpsYXllclNob3VsZEJlQXBwZW5kZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlTGF5
ZXJSZWN0KToKKwogMjAxMS0xMC0yNCAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtTdHlsZXNdIEFkZGluZyBhIG5ldyBz
dHlsZSBydWxlIGJyZWFrcyB0aGluZ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwCmluZGV4IGJjYjMxNTMwOWZkMmRiZWIzM2E4NDA2ZDkxODZlMjVjNjkwZTA5ZDIuLjA1NzZh
ZDkyMzgzOTI2OGI4NTBjMDk0OGZlNDRiMjIwODczNGE2ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcApAQCAtMzAxLDYgKzMwMSw0NSBAQCB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0xheWVycygpCiAgICAgICAgIGNvcHlPZmZzY3JlZW5UZXh0dXJlVG9E
aXNwbGF5KCk7CiB9CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250
b1JlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVy
TGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzIiwgdGhpcywgMCk7
CisgICAgCisgICAgLy8gVXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVuZGVyIHN1cmZhY2Vz
LiBXZSB0cmF2ZXJzZSB0aGUgcmVuZGVyIHN1cmZhY2VzCisgICAgLy8gZnJvbSBiYWNrIHRvIGZy
b250IHRvIGd1YXJhbnRlZSB0aGF0IG5lc3RlZCByZW5kZXIgc3VyZmFjZXMgZ2V0IHJlbmRlcmVk
IGluCisgICAgLy8gdGhlIGNvcnJlY3Qgb3JkZXIuCisgICAgZm9yIChpbnQgc3VyZmFjZUluZGV4
ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7
IC0tc3VyZmFjZUluZGV4KSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5
ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7CisgICAgICAg
IENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVu
ZGVyU3VyZmFjZSgpOworICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7CisKKyAgICAgICAg
cmVuZGVyU3VyZmFjZS0+c2V0U2tpcHNEcmF3KHRydWUpOworCisgICAgICAgIGlmICghcmVuZGVy
U3VyZmFjZS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgLy8gU2tpcCBjb21wbGV0ZWx5IHRyYW5zcGFyZW50IHJlbmRlciBzdXJmYWNlcy4KKyAg
ICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5kcmF3T3BhY2l0eSgpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgaWYgKHVzZVJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSkpIHsK
KyAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldFNraXBzRHJhdyhmYWxzZSk7CisKKyAgICAg
ICAgICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXIgIT0gcm9vdERyYXdMYXllcikgeworICAgICAg
ICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CisgICAgICAgICAgICAgICAgR0xDKG1fY29udGV4
dC5nZXQoKSwgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDAsIDApKTsKKyAgICAgICAgICAg
ICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4
dDNEOjpDT0xPUl9CVUZGRVJfQklUKSk7CisgICAgICAgICAgICAgICAgR0xDKG1fY29udGV4dC5n
ZXQoKSwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb25zdCBDQ0xheWVyTGlzdCYgbGF5ZXJM
aXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXll
ckluZGV4KQorICAgICAgICAgICAgICAgIGRyYXdMYXllcihsYXllckxpc3RbbGF5ZXJJbmRleF0u
Z2V0KCksIHJlbmRlclN1cmZhY2UpOworICAgICAgICB9CisgICAgfQorfQorCisKIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwoKQogewogICAgIGlmICh2aWV3
cG9ydFNpemUoKS5pc0VtcHR5KCkgfHwgIXJvb3RMYXllcigpKQpAQCAtMzU0LDQwICszOTMsNyBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKICAgICBH
TEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQz
RDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSkpOwogICAgIEdM
QyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpT
Q0lTU09SX1RFU1QpKTsKIAotICAgIC8vIFVwZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHJlbmRl
ciBzdXJmYWNlcy4gV2UgdHJhdmVyc2UgdGhlIGFycmF5IGZyb20KLSAgICAvLyBiYWNrIHRvIGZy
b250IHRvIGd1YXJhbnRlZSB0aGF0IG5lc3RlZCByZW5kZXIgc3VyZmFjZXMgZ2V0IHJlbmRlcmVk
IGluIHRoZQotICAgIC8vIGNvcnJlY3Qgb3JkZXIuCi0gICAgZm9yIChpbnQgc3VyZmFjZUluZGV4
ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7
IC0tc3VyZmFjZUluZGV4KSB7Ci0gICAgICAgIENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5
ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7Ci0gICAgICAg
IENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVu
ZGVyU3VyZmFjZSgpOwotICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7Ci0KLSAgICAgICAg
cmVuZGVyU3VyZmFjZS0+c2V0U2tpcHNEcmF3KHRydWUpOwotCi0gICAgICAgIC8vIFJlbmRlciBz
dXJmYWNlcyB3aG9zZSBkcmF3YWJsZSBhcmVhIGhhcyB6ZXJvIHdpZHRoIG9yIGhlaWdodAotICAg
ICAgICAvLyB3aWxsIGhhdmUgbm8gbGF5ZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGVtIGFuZCBzaG91
bGQgYmUgc2tpcHBlZC4KLSAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKS5z
aXplKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBTa2lwIGNvbXBsZXRl
bHkgdHJhbnNwYXJlbnQgcmVuZGVyIHN1cmZhY2VzLgotICAgICAgICBpZiAoIXJlbmRlclN1cmZh
Y2UtPmRyYXdPcGFjaXR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAo
dXNlUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKSkgewotICAgICAgICAgICAgcmVuZGVyU3Vy
ZmFjZS0+c2V0U2tpcHNEcmF3KGZhbHNlKTsKLQotICAgICAgICAgICAgaWYgKHJlbmRlclN1cmZh
Y2VMYXllciAhPSByb290RHJhd0xheWVyKSB7Ci0gICAgICAgICAgICAgICAgR0xDKG1fY29udGV4
dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RF
U1QpKTsKLSAgICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmNs
ZWFyQ29sb3IoMCwgMCwgMCwgMCkpOwotICAgICAgICAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0
KCksIG1fY29udGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQp
KTsKLSAgICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmVuYWJs
ZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGNvbnN0IENDTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5s
YXllckxpc3QoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxh
eWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpCi0gICAgICAgICAgICAg
ICAgZHJhd0xheWVyKGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKSwgcmVuZGVyU3VyZmFjZSk7
Ci0gICAgICAgIH0KLSAgICB9CisgICAgZHJhd0xheWVyc09udG9SZW5kZXJTdXJmYWNlcyhyb290
RHJhd0xheWVyLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKIAogICAgIGlmIChtX2hlYWRzVXBE
aXNwbGF5LT5lbmFibGVkKCkpIHsKICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250
ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKSk7CkBAIC01NzAsNDMgKzU3Niwx
NyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKENDTGF5ZXJJbXBsKiBs
YXllciwgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgaWYgKCFsYXllci0+ZHJhd3NDb250ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghbGF5ZXItPm9wYWNpdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgIEludFJlY3QgdmlzaWJs
ZUxheWVyUmVjdCA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVy
UmVjdDxDQ0xheWVySW1wbD4obGF5ZXIpOworICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0
KHZpc2libGVMYXllclJlY3QpOwogCi0gICAgaWYgKGxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkp
CisgICAgaWYgKHZpc2libGVMYXllclJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBJbnRSZWN0IHRhcmdldFN1cmZhY2VSZWN0ID0gbGF5ZXItPnRhcmdldFJlbmRlclN1cmZh
Y2UoKSA/IGxheWVyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkgOiBtX2Rl
ZmF1bHRSZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpOwotICAgIGlmIChsYXllci0+dXNlc0xh
eWVyU2Npc3NvcigpKSB7Ci0gICAgICAgIEludFJlY3Qgc2Npc3NvclJlY3QgPSBsYXllci0+c2Np
c3NvclJlY3QoKTsKLSAgICAgICAgdGFyZ2V0U3VyZmFjZVJlY3QuaW50ZXJzZWN0KHNjaXNzb3JS
ZWN0KTsKLSAgICAgICAgaWYgKHRhcmdldFN1cmZhY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgc2V0U2Npc3NvclRvUmVjdChzY2lzc29yUmVjdCk7Ci0gICAg
fSBlbHNlCisgICAgaWYgKGxheWVyLT51c2VzTGF5ZXJTY2lzc29yKCkpCisgICAgICAgIHNldFNj
aXNzb3JUb1JlY3QobGF5ZXItPnNjaXNzb3JSZWN0KCkpOworICAgIGVsc2UKICAgICAgICAgR0xD
KG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpT
Q0lTU09SX1RFU1QpKTsKIAotICAgIEludFJlY3QgdmlzaWJsZUxheWVyUmVjdCA9IENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdCh0YXJnZXRTdXJmYWNlUmVj
dCwgbGF5ZXItPmJvdW5kcygpLCBsYXllci0+Y29udGVudEJvdW5kcygpLCBsYXllci0+ZHJhd1Ry
YW5zZm9ybSgpKTsKLSAgICB2aXNpYmxlTGF5ZXJSZWN0Lm1vdmUodG9TaXplKGxheWVyLT5zY3Jv
bGxQb3NpdGlvbigpKSk7Ci0gICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZUxh
eWVyUmVjdCk7Ci0KLSAgICAvLyBUaGUgbGF5ZXIgc2hvdWxkIG5vdCBiZSBkcmF3biBpZiAoMSkg
aXQgaXMgbm90IGRvdWJsZS1zaWRlZCBhbmQgKDIpIHRoZSBiYWNrIG9mIHRoZSBsYXllciBpcyBm
YWNpbmcgdGhlIHNjcmVlbi4KLSAgICAvLyBUaGlzIHNlY29uZCBjb25kaXRpb24gaXMgY2hlY2tl
ZCBieSBjb21wdXRpbmcgdGhlIHRyYW5zZm9ybWVkIG5vcm1hbCBvZiB0aGUgbGF5ZXIuCi0gICAg
aWYgKCFsYXllci0+ZG91YmxlU2lkZWQoKSkgewotICAgICAgICBGbG9hdFJlY3QgbGF5ZXJSZWN0
KEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0U2l6ZShsYXllci0+Ym91bmRzKCkpKTsKLSAgICAgICAg
RmxvYXRRdWFkIG1hcHBlZExheWVyID0gbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkubWFw
UXVhZChGbG9hdFF1YWQobGF5ZXJSZWN0KSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBob3Jpem9udGFs
RGlyID0gbWFwcGVkTGF5ZXIucDIoKSAtIG1hcHBlZExheWVyLnAxKCk7Ci0gICAgICAgIEZsb2F0
U2l6ZSB2ZXJ0aWNhbERpciA9IG1hcHBlZExheWVyLnA0KCkgLSBtYXBwZWRMYXllci5wMSgpOwot
ICAgICAgICBGbG9hdFBvaW50M0QgeEF4aXMoaG9yaXpvbnRhbERpci53aWR0aCgpLCBob3Jpem9u
dGFsRGlyLmhlaWdodCgpLCAwKTsKLSAgICAgICAgRmxvYXRQb2ludDNEIHlBeGlzKHZlcnRpY2Fs
RGlyLndpZHRoKCksIHZlcnRpY2FsRGlyLmhlaWdodCgpLCAwKTsKLSAgICAgICAgRmxvYXRQb2lu
dDNEIHpBeGlzID0geEF4aXMuY3Jvc3MoeUF4aXMpOwotICAgICAgICBpZiAoekF4aXMueigpIDwg
MCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBsYXllci0+ZHJhdyh0aGlzKTsK
IAogICAgIC8vIERyYXcgdGhlIGRlYnVnIGJvcmRlciBpZiB0aGVyZSBpcyBvbmUuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IGEyZjU2NmFkNDkwMjAzMTk1N2I0ZjRmYmM3
ODg3Yzk5MjljMjExNjQuLjY0NmVhNmU1YzQ0OGE1OGM2MTI0MTM0MmIwZjlhNmVhZGRhZWY0NDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC0xNjEsNiArMTYxLDcgQEAg
cHJpdmF0ZToKICAgICBib29sIGluaXRpYWxpemUoKTsKIAogICAgIHZvaWQgZHJhd0xheWVyc0lu
dGVybmFsKCk7CisgICAgdm9pZCBkcmF3TGF5ZXJzT250b1JlbmRlclN1cmZhY2VzKENDTGF5ZXJJ
bXBsKiByb290RHJhd0xheWVyLCBjb25zdCBDQ0xheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCk7CiAgICAgdm9pZCBkcmF3TGF5ZXIoQ0NMYXllckltcGwqLCBDQ1JlbmRlclN1cmZhY2Uq
KTsKIAogICAgIE1hbmFnZWRUZXh0dXJlKiBnZXRPZmZzY3JlZW5MYXllclRleHR1cmUoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDdjNzYwYjlkNjliMDQ2MzI4MDNkOTY3
NWFiZjcyYWQyYTY1MjRmYjEuLjc3NTRhOTkxZjRjOGRlYzI3NjljYmI1MmEwZGI5NDc2YTZmMGE5
ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMjk4LDYgKzI5OCwzMiBA
QCBzdGF0aWMgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eShMYXllckNocm9taXVtKiBsYXllciwg
Y29uc3QgSW50UmVjdCYgdmlzaWJsZUxheQogICAgIH0KIH0KIAordm9pZCBDQ0xheWVyVHJlZUhv
c3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qIHJl
bmRlclN1cmZhY2VMYXllcikKK3sKKyAgICAvLyBOb3RlOiBNYXNrcyBhbmQgcmVwbGljYXMgb25s
eSBleGlzdCBmb3IgbGF5ZXJzIHRoYXQgb3duIHJlbmRlciBzdXJmYWNlcy4gSWYgd2UgcmVhY2gg
dGhpcyBwb2ludAorICAgIC8vIGluIGNvZGUsIHdlIGFscmVhZHkga25vdyB0aGF0IGF0IGxlYXN0
IHNvbWV0aGluZyB3aWxsIGJlIGRyYXduIGludG8gdGhpcyByZW5kZXIgc3VyZmFjZSwgc28gdGhl
CisgICAgLy8gbWFzayBhbmQgcmVwbGljYSBzaG91bGQgYmUgcGFpbnRlZC4KKworICAgIGlmIChy
ZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpKSB7CisgICAgICAgIHJlbmRlclN1cmZhY2VM
YXllci0+bWFza0xheWVyKCktPnNldExheWVyVHJlZUhvc3QodGhpcyk7CisgICAgICAgIHBhaW50
Q29udGVudHNJZkRpcnR5KHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCksIEludFJlY3Qo
SW50UG9pbnQoKSwgcmVuZGVyU3VyZmFjZUxheWVyLT5jb250ZW50Qm91bmRzKCkpKTsKKyAgICB9
CisKKyAgICBMYXllckNocm9taXVtKiByZXBsaWNhTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXIt
PnJlcGxpY2FMYXllcigpOworICAgIGlmIChyZXBsaWNhTGF5ZXIpIHsKKworICAgICAgICBJbnRS
ZWN0IHZpc2libGVMYXllclJlY3QgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZp
c2libGVMYXllclJlY3Q8TGF5ZXJDaHJvbWl1bT4ocmVuZGVyU3VyZmFjZUxheWVyKTsKKworICAg
ICAgICByZXBsaWNhTGF5ZXItPnNldExheWVyVHJlZUhvc3QodGhpcyk7CisgICAgICAgIHBhaW50
Q29udGVudHNJZkRpcnR5KHJlcGxpY2FMYXllciwgdmlzaWJsZUxheWVyUmVjdCk7CisKKyAgICAg
ICAgaWYgKHJlcGxpY2FMYXllci0+bWFza0xheWVyKCkpIHsKKyAgICAgICAgICAgIHJlcGxpY2FM
YXllci0+bWFza0xheWVyKCktPnNldExheWVyVHJlZUhvc3QodGhpcyk7CisgICAgICAgICAgICBw
YWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLCBJbnRSZWN0KElu
dFBvaW50KCksIHJlcGxpY2FMYXllci0+bWFza0xheWVyKCktPmNvbnRlbnRCb3VuZHMoKSkpOwor
ICAgICAgICB9CisgICAgfQorfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNv
bnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKIHsKICAgICBm
b3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7
IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKQEAgLTMwNSw4ICszMzEsNiBA
QCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlz
dCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdAogICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0q
IHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKICAg
ICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UpOwogCi0gICAgICAgIHJlbmRlclN1cmZhY2VMYXll
ci0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKLQogICAgICAgICAvLyBSZW5kZXIgc3VyZmFjZXMg
d2hvc2UgZHJhd2FibGUgYXJlYSBoYXMgemVybyB3aWR0aCBvciBoZWlnaHQKICAgICAgICAgLy8g
d2lsbCBoYXZlIG5vIGxheWVycyBhc3NvY2lhdGVkIHdpdGggdGhlbSBhbmQgc2hvdWxkIGJlIHNr
aXBwZWQuCiAgICAgICAgIGlmICghcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKQpA
QCAtMzE1LDYgKzMzOSw5IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVu
dHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0CiAgICAgICAgIGlmICgh
cmVuZGVyU3VyZmFjZS0+ZHJhd09wYWNpdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCisg
ICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKKyAgICAg
ICAgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZUxheWVy
KTsKKwogICAgICAgICBjb25zdCBMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2Ut
PmxheWVyTGlzdCgpOwogICAgICAgICBBU1NFUlQobGF5ZXJMaXN0LnNpemUoKSk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6
ZSgpOyArK2xheWVySW5kZXgpIHsKQEAgLTMyNywzOSArMzU0LDEyIEBAIHZvaWQgQ0NMYXllclRy
ZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0CiAKICAgICAgICAgICAgIGxheWVyLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOwog
Ci0gICAgICAgICAgICBpZiAoIWxheWVyLT5vcGFjaXR5KCkpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgICAgIGlmIChsYXllci0+bWFza0xheWVyKCkpCi0gICAgICAgICAg
ICAgICAgbGF5ZXItPm1hc2tMYXllcigpLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOwotICAgICAg
ICAgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkgewotICAgICAgICAgICAgICAgIGxheWVy
LT5yZXBsaWNhTGF5ZXIoKS0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKLSAgICAgICAgICAgICAg
ICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSkKLSAgICAgICAgICAgICAg
ICAgICAgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJUcmVlSG9z
dCh0aGlzKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGxheWVyLT5ib3VuZHMo
KS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIElu
dFJlY3QgZGVmYXVsdENvbnRlbnRSZWN0ID0gSW50UmVjdChyb290TGF5ZXIoKS0+c2Nyb2xsUG9z
aXRpb24oKSwgdmlld3BvcnRTaXplKCkpOwotCi0gICAgICAgICAgICBJbnRSZWN0IHRhcmdldFN1
cmZhY2VSZWN0ID0gbGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKSA/IGxheWVyLT50YXJnZXRS
ZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkgOiBkZWZhdWx0Q29udGVudFJlY3Q7Ci0gICAg
ICAgICAgICBpZiAobGF5ZXItPnVzZXNMYXllclNjaXNzb3IoKSkKLSAgICAgICAgICAgICAgICB0
YXJnZXRTdXJmYWNlUmVjdC5pbnRlcnNlY3QobGF5ZXItPnNjaXNzb3JSZWN0KCkpOwotICAgICAg
ICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0KHRhcmdldFN1cmZhY2VSZWN0LCBsYXllci0+Ym91bmRz
KCksIGxheWVyLT5jb250ZW50Qm91bmRzKCksIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOwotCi0g
ICAgICAgICAgICB2aXNpYmxlTGF5ZXJSZWN0Lm1vdmUodG9TaXplKGxheWVyLT5zY3JvbGxQb3Np
dGlvbigpKSk7CisgICAgICAgICAgICBBU1NFUlQobGF5ZXItPm9wYWNpdHkoKSk7CisgICAgICAg
ICAgICBBU1NFUlQoIWxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBJbnRSZWN0IHZpc2libGVMYXllclJlY3QgPSBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZVZpc2libGVMYXllclJlY3Q8TGF5ZXJDaHJvbWl1bT4obGF5ZXIpOworICAg
ICAgICAgICAgCiAgICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShsYXllciwgdmlzaWJs
ZUxheWVyUmVjdCk7Ci0KLSAgICAgICAgICAgIGlmIChMYXllckNocm9taXVtKiBtYXNrTGF5ZXIg
PSBsYXllci0+bWFza0xheWVyKCkpCi0gICAgICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGly
dHkobWFza0xheWVyLCBJbnRSZWN0KEludFBvaW50KCksIG1hc2tMYXllci0+Y29udGVudEJvdW5k
cygpKSk7Ci0KLSAgICAgICAgICAgIGlmIChMYXllckNocm9taXVtKiByZXBsaWNhTGF5ZXIgPSBs
YXllci0+cmVwbGljYUxheWVyKCkpIHsKLSAgICAgICAgICAgICAgICBwYWludENvbnRlbnRzSWZE
aXJ0eShyZXBsaWNhTGF5ZXIsIHZpc2libGVMYXllclJlY3QpOwotCi0gICAgICAgICAgICAgICAg
aWYgKExheWVyQ2hyb21pdW0qIHJlcGxpY2FNYXNrTGF5ZXIgPSByZXBsaWNhTGF5ZXItPm1hc2tM
YXllcigpKQotICAgICAgICAgICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNh
TWFza0xheWVyLCBJbnRSZWN0KEludFBvaW50KCksIHJlcGxpY2FNYXNrTGF5ZXItPmNvbnRlbnRC
b3VuZHMoKSkpOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogfQpAQCAtMzc0LDYg
KzM3NCwxNiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNl
cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYQogICAgICAgICBpZiAoIXJlbmRlclN1
cmZhY2UtPmxheWVyTGlzdCgpLnNpemUoKSB8fCAhcmVuZGVyU3VyZmFjZS0+ZHJhd09wYWNpdHko
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCisgICAgICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5
ZXItPm1hc2tMYXllcigpKQorICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhy
ZW5kZXJTdXJmYWNlTGF5ZXItPm1hc2tMYXllcigpLCBjb250ZXh0LCBhbGxvY2F0b3IpOworCisg
ICAgICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXItPnJlcGxpY2FMYXllcigpKSB7CisgICAgICAg
ICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKHJlbmRlclN1cmZhY2VMYXllci0+cmVwbGlj
YUxheWVyKCksIGNvbnRleHQsIGFsbG9jYXRvcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmIChyZW5kZXJTdXJmYWNlTGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSkKKyAg
ICAgICAgICAgICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKHJlbmRlclN1cmZhY2VMYXll
ci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLCBjb250ZXh0LCBhbGxvY2F0b3IpOworICAg
ICAgICB9CisgICAgICAgIAogICAgICAgICBjb25zdCBMYXllckxpc3QmIGxheWVyTGlzdCA9IHJl
bmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwogICAgICAgICBBU1NFUlQobGF5ZXJMaXN0LnNpemUo
KSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBs
YXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKQEAgLTM4OCwxOSArMzk4LDEyIEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnN0IExheWVy
TGlzdCYgcmVuZGVyU3VyZmFjZUxhCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVDb21w
b3NpdG9yUmVzb3VyY2VzKExheWVyQ2hyb21pdW0qIGxheWVyLCBHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yKQogewotICAgIGlmIChsYXllci0+
Ym91bmRzKCkuaXNFbXB0eSgpKQorICAgIC8vIEZvciBub3JtYWwgbGF5ZXJzLCB0aGVzZSBjb25k
aXRpb25zIHNob3VsZCBoYXZlIGFscmVhZHkgYmVlbiBjaGVja2VkIHdoaWxlIGNyZWF0aW5nIHRo
ZSByZW5kZXIgc3VyZmFjZSBsYXllciBsaXN0cy4KKyAgICAvLyBGb3IgbWFza3MgYW5kIHJlcGxp
Y2FzIGhvd2V2ZXIsIHdlIG1heSBzdGlsbCBuZWVkIHRvIGNoZWNrIHRoZW0gaGVyZS4KKyAgICBp
ZiAobGF5ZXItPmJvdW5kcygpLmlzRW1wdHkoKSB8fCAhbGF5ZXItPm9wYWNpdHkoKSB8fCAhbGF5
ZXItPmRyYXdzQ29udGVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWxheWVyLT5v
cGFjaXR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsYXllci0+bWFza0xheWVyKCkp
Ci0gICAgICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMobGF5ZXItPm1hc2tMYXllcigpLCBj
b250ZXh0LCBhbGxvY2F0b3IpOwotICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkpCi0gICAg
ICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMobGF5ZXItPnJlcGxpY2FMYXllcigpLCBjb250
ZXh0LCBhbGxvY2F0b3IpOwotCi0gICAgaWYgKGxheWVyLT5kcmF3c0NvbnRlbnQoKSkKLSAgICAg
ICAgbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29udGV4dCwgYWxsb2NhdG9yKTsK
KyAgICBsYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb250ZXh0LCBhbGxvY2F0b3Ip
OwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y2xlYXJQZW5kaW5nVXBkYXRlKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggZTVkZGJiNDM1MWFiNGE2YjQyZWI1Mzc3Mjk3MTJh
MDQ1NTg3ODJkMi4uOTg4ZmZlOTVhZDM4NzIxZTk3Zjk0NTFlMDg5ZmQxMWVjZGRmODhlYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTE2NSw5ICsxNjUsMTIgQEAgcHJpdmF0ZToK
ICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBMYXllckxpc3Q7CiAK
ICAgICB2b2lkIHBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmKTsKKyAgICB2b2lk
IHBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qKTsKKwog
ICAgIHZvaWQgdXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qKTsKICAgICB2b2lkIHVwZGF0ZUNv
bXBvc2l0b3JSZXNvdXJjZXMoY29uc3QgTGF5ZXJMaXN0JiwgR3JhcGhpY3NDb250ZXh0M0QqLCBU
ZXh0dXJlQWxsb2NhdG9yKik7CiAgICAgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKExh
eWVyQ2hyb21pdW0qLCBHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqKTsKKyAg
ICB2b2lkIHVwZGF0ZU1hc2tSZXNvdXJjZXNGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0q
LCBHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqKTsKICAgICB2b2lkIGNsZWFy
UGVuZGluZ1VwZGF0ZSgpOwogCiAgICAgaW50IG1fY29tcG9zaXRvcklkZW50aWZpZXI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAppbmRleCBjYzAzODBjYmJmNWU0
NWVhZDZhZjE5MDg5MDIzODFhYzJhZjE2NmQ2Li4wNzAwOGUwMjkwYjI0NjY4NjJiMTU0NzZlZmIy
ODQxMTI5Y2QzNDljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5j
cHAKQEAgLTYxLDIxICs2MSw2IEBAIEludFJlY3QgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVWaXNpYmxlUmVjdChjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlCiAgICAgcmV0dXJu
IGxheWVyUmVjdDsKIH0KIAotSW50UmVjdCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZVZpc2libGVMYXllclJlY3QoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QsIGNvbnN0
IEludFNpemUmIGJvdW5kcywgY29uc3QgSW50U2l6ZSYgY29udGVudEJvdW5kcywgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRpbGluZ1RyYW5zZm9ybSkKLXsKLSAgICBpZiAodGFyZ2V0U3Vy
ZmFjZVJlY3QuaXNFbXB0eSgpIHx8IGNvbnRlbnRCb3VuZHMuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gdGFyZ2V0U3VyZmFjZVJlY3Q7Ci0KLSAgICBjb25zdCBJbnRSZWN0IGxheWVyQm91bmRS
ZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBjb250ZW50Qm91bmRzKTsKLSAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSB0aWxpbmdUcmFuc2Zvcm07Ci0KLSAgICB0cmFuc2Zvcm0u
c2NhbGVOb25Vbmlmb3JtKGJvdW5kcy53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihjb250
ZW50Qm91bmRzLndpZHRoKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRz
LmhlaWdodCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihjb250ZW50Qm91bmRzLmhlaWdodCgpKSk7
Ci0gICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtY29udGVudEJvdW5kcy53aWR0aCgpIC8gMi4wLCAt
Y29udGVudEJvdW5kcy5oZWlnaHQoKSAvIDIuMCk7Ci0KLSAgICByZXR1cm4gY2FsY3VsYXRlVmlz
aWJsZVJlY3QodGFyZ2V0U3VyZmFjZVJlY3QsIGxheWVyQm91bmRSZWN0LCB0cmFuc2Zvcm0pOwot
fQotCiBzdGF0aWMgYm9vbCBpc1NjYWxlT3JUcmFuc2xhdGlvbihjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbSkKIHsKICAgICByZXR1cm4gIW0ubTEyKCkgJiYgIW0ubTEzKCkgJiYgIW0ubTE0
KCkKQEAgLTg1LDYgKzcwLDM5IEBAIHN0YXRpYyBib29sIGlzU2NhbGVPclRyYW5zbGF0aW9uKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQogCiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIExh
eWVyVHlwZT4KK2Jvb2wgbGF5ZXJTaG91bGRCZVNraXBwZWQoTGF5ZXJUeXBlKiBsYXllcikKK3sK
KyAgICAvLyBMYXllcnMgY2FuIGJlIHNraXBwZWQgaWYgYW55IG9mIHRoZXNlIGNvbmRpdGlvbnMg
YXJlIG1ldC4KKyAgICAvLyAgIC0gZG9lcyBub3QgZHJhdyBjb250ZW50LgorICAgIC8vICAgLSBp
cyB0cmFuc3BhcmVudAorICAgIC8vICAgLSBoYXMgZW1wdHkgYm91bmRzCisgICAgLy8gICAtIHRo
ZSBsYXllciBpcyBub3QgZG91YmxlLXNpZGVkLCBidXQgaXRzIGJhY2sgZmFjZSBpcyB2aXNpYmxl
LgorICAgIC8vCisgICAgLy8gU29tZSBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgbmVlZCB0byBiZSBj
b21wdXRlZCBhdCBhIGxhdGVyIHBvaW50IGFmdGVyIHRoZSByZWN1cnNpb24gaXMgZmluaXNoZWQu
CisgICAgLy8gICAtIHRoZSBpbnRlcnNlY3Rpb24gb2YgcmVuZGVyIHN1cmZhY2UgY29udGVudCBh
bmQgbGF5ZXIgc2Npc3NvciBpcyBlbXB0eQorICAgIC8vICAgLSB0aGUgdmlzaWJsZUxheWVyUmVj
dCBpcyBlbXB0eQorCisgICAgaWYgKCFsYXllci0+ZHJhd3NDb250ZW50KCkgfHwgIWxheWVyLT5v
cGFjaXR5KCkgfHwgbGF5ZXItPmJvdW5kcygpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICAvLyBUaGUgbGF5ZXIgc2hvdWxkIG5vdCBiZSBkcmF3biBpZiAoMSkgaXQgaXMg
bm90IGRvdWJsZS1zaWRlZCBhbmQgKDIpIHRoZSBiYWNrIG9mIHRoZSBsYXllciBpcyBmYWNpbmcg
dGhlIHNjcmVlbi4KKyAgICAvLyBUaGlzIHNlY29uZCBjb25kaXRpb24gaXMgY2hlY2tlZCBieSBj
b21wdXRpbmcgdGhlIHRyYW5zZm9ybWVkIG5vcm1hbCBvZiB0aGUgbGF5ZXIuCisgICAgaWYgKCFs
YXllci0+ZG91YmxlU2lkZWQoKSkgeworICAgICAgICBGbG9hdFJlY3QgbGF5ZXJSZWN0KEZsb2F0
UG9pbnQoMCwgMCksIEZsb2F0U2l6ZShsYXllci0+Ym91bmRzKCkpKTsKKyAgICAgICAgRmxvYXRR
dWFkIG1hcHBlZExheWVyID0gbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkubWFwUXVhZChG
bG9hdFF1YWQobGF5ZXJSZWN0KSk7CisgICAgICAgIEZsb2F0U2l6ZSBob3Jpem9udGFsRGlyID0g
bWFwcGVkTGF5ZXIucDIoKSAtIG1hcHBlZExheWVyLnAxKCk7CisgICAgICAgIEZsb2F0U2l6ZSB2
ZXJ0aWNhbERpciA9IG1hcHBlZExheWVyLnA0KCkgLSBtYXBwZWRMYXllci5wMSgpOworICAgICAg
ICBGbG9hdFBvaW50M0QgeEF4aXMoaG9yaXpvbnRhbERpci53aWR0aCgpLCBob3Jpem9udGFsRGly
LmhlaWdodCgpLCAwKTsKKyAgICAgICAgRmxvYXRQb2ludDNEIHlBeGlzKHZlcnRpY2FsRGlyLndp
ZHRoKCksIHZlcnRpY2FsRGlyLmhlaWdodCgpLCAwKTsKKyAgICAgICAgRmxvYXRQb2ludDNEIHpB
eGlzID0geEF4aXMuY3Jvc3MoeUF4aXMpOworICAgICAgICBpZiAoekF4aXMueigpIDwgMCkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwog
Ly8gUmVjdXJzaXZlbHkgd2Fsa3MgdGhlIGxheWVyIHRyZWUgc3RhcnRpbmcgYXQgdGhlIGdpdmVu
IG5vZGUgYW5kIGNvbXB1dGVzIGFsbCB0aGUKIC8vIG5lY2Vzc2FyeSB0cmFuc2Zvcm1hdGlvbnMs
IHNjaXNzb3IgcmVjdGFuZ2xlcywgcmVuZGVyIHN1cmZhY2VzLCBldGMuCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlLCB0eXBlbmFtZSBMYXll
clNvcnRlcj4KQEAgLTMyOSw5ICszNDcsMTIgQEAgc3RhdGljIHZvaWQgY2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXIKICAg
ICBzdWJsYXllck1hdHJpeC50cmFuc2xhdGUzZCgtYm91bmRzLndpZHRoKCkgKiAwLjUsIC1ib3Vu
ZHMuaGVpZ2h0KCkgKiAwLjUsIDApOwogCiAgICAgTGF5ZXJMaXN0JiBkZXNjZW5kYW50cyA9IChs
YXllci0+cmVuZGVyU3VyZmFjZSgpID8gbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0
KCkgOiBsYXllckxpc3QpOwotICAgIGRlc2NlbmRhbnRzLmFwcGVuZChsYXllcik7CiAKLSAgICB1
bnNpZ25lZCB0aGlzTGF5ZXJJbmRleCA9IGRlc2NlbmRhbnRzLnNpemUoKSAtIDE7CisgICAgLy8g
QW55IGxheWVycyB0aGF0IGFyZSBhcHBlbmRlZCBhZnRlciB0aGlzIHBvaW50IGFyZSBpbiB0aGUg
bGF5ZXIncyBzdWJ0cmVlIGFuZCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIHNvcnRpbmcgcHJv
Y2Vzcy4KKyAgICB1bnNpZ25lZCBzb3J0aW5nU3RhcnRJbmRleCA9IGRlc2NlbmRhbnRzLnNpemUo
KTsKKworICAgIGlmICghbGF5ZXJTaG91bGRCZVNraXBwZWQobGF5ZXIpKQorICAgICAgICBkZXNj
ZW5kYW50cy5hcHBlbmQobGF5ZXIpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXll
ci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgewogICAgICAgICBMYXllclR5cGUqIGNoaWxkID0g
bGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCk7CkBAIC00MDgsOCArNDI5LDggQEAgc3RhdGljIHZv
aWQgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBl
KiBsYXllciwgTGF5ZXIKICAgICAvLyBJZiBwcmVzZXJ2ZXMtM2QgdGhlbiBzb3J0IGFsbCB0aGUg
ZGVzY2VuZGFudHMgaW4gM0Qgc28gdGhhdCB0aGV5IGNhbiBiZQogICAgIC8vIGRyYXduIGZyb20g
YmFjayB0byBmcm9udC4gSWYgdGhlIHByZXNlcnZlcy0zZCBwcm9wZXJ0eSBpcyBhbHNvIHNldCBv
biB0aGUgcGFyZW50IHRoZW4KICAgICAvLyBza2lwIHRoZSBzb3J0aW5nIGFzIHRoZSBwYXJlbnQg
d2lsbCBzb3J0IGFsbCB0aGUgZGVzY2VuZGFudHMgYW55d2F5LgotICAgIGlmIChsYXllci0+cHJl
c2VydmVzM0QoKSAmJiAoIWxheWVyLT5wYXJlbnQoKSB8fCAhbGF5ZXItPnBhcmVudCgpLT5wcmVz
ZXJ2ZXMzRCgpKSkKLSAgICAgICAgc29ydExheWVycygmZGVzY2VuZGFudHMuYXQodGhpc0xheWVy
SW5kZXgpLCBkZXNjZW5kYW50cy5lbmQoKSwgbGF5ZXJTb3J0ZXIpOworICAgIGlmIChkZXNjZW5k
YW50cy5zaXplKCkgJiYgbGF5ZXItPnByZXNlcnZlczNEKCkgJiYgKCFsYXllci0+cGFyZW50KCkg
fHwgIWxheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0QoKSkpCisgICAgICAgIHNvcnRMYXllcnMo
JmRlc2NlbmRhbnRzLmF0KHNvcnRpbmdTdGFydEluZGV4KSwgZGVzY2VuZGFudHMuZW5kKCksIGxh
eWVyU29ydGVyKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShMYXllckNocm9taXVtKiBsYXllciwgTGF5ZXJDaHJv
bWl1bSogcm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8
UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGxheWVyTGlzdCwgaW50IG1heFRleHR1cmVTaXplKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0Q29tbW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaAppbmRleCBlOTI0MWRkYTQ1MjEy
NzFkZTVkNTkyYmQ5ZTI0NzhlZDRlYWM0ZWUzLi5lNGQ0OTYzNzQxOGI3OWIzMGVjMGMzMGQxZmIw
ZjNiZGEyMTYzNTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaApA
QCAtMjUsNyArMjUsOSBAQAogI2lmbmRlZiBDQ0xheWVyVHJlZUhvc3RDb21tb25faAogI2RlZmlu
ZSBDQ0xheWVyVHJlZUhvc3RDb21tb25faAogCisjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1
ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTMzLDE3ICsz
NSwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDTGF5ZXJJbXBsOwogY2xhc3Mg
Q0NMYXllclNvcnRlcjsKLWNsYXNzIEludFJlY3Q7CiBjbGFzcyBMYXllckNocm9taXVtOwotY2xh
c3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiAKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdENvbW1vbiB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIEludFJlY3QgY2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdChj
b25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCwgY29uc3QgSW50U2l6ZSYgYm91bmRzLCBj
b25zdCBJbnRTaXplJiBjb250ZW50Qm91bmRzLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dGlsaW5nVHJhbnNmb3JtKTsKICAgICBzdGF0aWMgSW50UmVjdCBjYWxjdWxhdGVWaXNpYmxlUmVj
dChjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCwgY29uc3QgSW50UmVjdCYgbGF5ZXJC
b3VuZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgTGF5ZXJUeXBlPiBzdGF0aWMgSW50UmVjdCBjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0
KExheWVyVHlwZSopOwogCiAgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNB
bmRWaXNpYmlsaXR5KExheWVyQ2hyb21pdW0qLCBMYXllckNocm9taXVtKiByb290TGF5ZXIsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21p
dW0+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gPiYgbGF5ZXJMaXN0LCBpbnQgbWF4VGV4dHVyZVNpemUpOwotCiAgICAgc3RhdGljIHZvaWQg
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KENDTGF5ZXJJbXBsKiwgQ0NMYXll
ckltcGwqIHJvb3RMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJp
eCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3Rv
cjxSZWZQdHI8Q0NMYXllckltcGw+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxS
ZWZQdHI8Q0NMYXllckltcGw+ID4mIGxheWVyTGlzdCwgQ0NMYXllclNvcnRlciosIGludCBtYXhU
ZXh0dXJlU2l6ZSk7CiAKICAgICBzdHJ1Y3QgU2Nyb2xsVXBkYXRlSW5mbyB7CkBAIC01NCw2ICs1
MywzNSBAQCBwdWJsaWM6CiAKIHR5cGVkZWYgVmVjdG9yPENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
U2Nyb2xsVXBkYXRlSW5mbz4gQ0NTY3JvbGxVcGRhdGVTZXQ7CiAKK3RlbXBsYXRlPHR5cGVuYW1l
IExheWVyVHlwZT4KK0ludFJlY3QgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNp
YmxlTGF5ZXJSZWN0KExheWVyVHlwZSogbGF5ZXIpCit7CisgICAgQVNTRVJUKGxheWVyLT50YXJn
ZXRSZW5kZXJTdXJmYWNlKCkpOworICAgIEludFJlY3QgdGFyZ2V0U3VyZmFjZVJlY3QgPSBsYXll
ci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpOworCisgICAgaWYgKGxheWVy
LT51c2VzTGF5ZXJTY2lzc29yKCkpCisgICAgICAgIHRhcmdldFN1cmZhY2VSZWN0LmludGVyc2Vj
dChsYXllci0+c2Npc3NvclJlY3QoKSk7CisKKyAgICBpZiAodGFyZ2V0U3VyZmFjZVJlY3QuaXNF
bXB0eSgpIHx8IGxheWVyLT5jb250ZW50Qm91bmRzKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gdGFyZ2V0U3VyZmFjZVJlY3Q7CisKKyAgICAvLyBOb3RlIGNhcmVmdWxseSB0aGVzZSBhcmUg
YWxpYXNlcworICAgIGNvbnN0IEludFNpemUmIGJvdW5kcyA9IGxheWVyLT5ib3VuZHMoKTsKKyAg
ICBjb25zdCBJbnRTaXplJiBjb250ZW50Qm91bmRzID0gbGF5ZXItPmNvbnRlbnRCb3VuZHMoKTsK
KworICAgIGNvbnN0IEludFJlY3QgbGF5ZXJCb3VuZFJlY3QgPSBJbnRSZWN0KEludFBvaW50KCks
IGNvbnRlbnRCb3VuZHMpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSA9IGxh
eWVyLT5kcmF3VHJhbnNmb3JtKCk7CisKKyAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKGJv
dW5kcy53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihjb250ZW50Qm91bmRzLndpZHRoKCkp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzLmhlaWdodCgpIC8gc3RhdGlj
X2Nhc3Q8ZG91YmxlPihjb250ZW50Qm91bmRzLmhlaWdodCgpKSk7CisgICAgdHJhbnNmb3JtLnRy
YW5zbGF0ZSgtY29udGVudEJvdW5kcy53aWR0aCgpIC8gMi4wLCAtY29udGVudEJvdW5kcy5oZWln
aHQoKSAvIDIuMCk7CisKKyAgICBJbnRSZWN0IHZpc2libGVMYXllclJlY3QgPSBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVSZWN0KHRhcmdldFN1cmZhY2VSZWN0LCBsYXll
ckJvdW5kUmVjdCwgdHJhbnNmb3JtKTsKKyAgICB2aXNpYmxlTGF5ZXJSZWN0Lm1vdmUodG9TaXpl
KGxheWVyLT5zY3JvbGxQb3NpdGlvbigpKSk7CisKKyAgICByZXR1cm4gdmlzaWJsZUxheWVyUmVj
dDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>