<?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>96114</bug_id>
          
          <creation_ts>2012-09-07 09:14:11 -0700</creation_ts>
          <short_desc>[chromium] Make prioritized texture manager not touch backings array on the main thread</short_desc>
          <delta_ts>2012-09-11 18:35:29 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Christopher Cameron">ccameron</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>epenner</cc>
    
    <cc>jamesr</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>714584</commentid>
    <comment_count>0</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-07 09:14:11 -0700</bug_when>
    <thetext>[chromium] Make prioritized texture manager not touch backings array on the main thread</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>714595</commentid>
    <comment_count>1</comment_count>
      <attachid>162787</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-07 09:26:15 -0700</bug_when>
    <thetext>Created attachment 162787
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>714599</commentid>
    <comment_count>2</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-07 09:32:37 -0700</bug_when>
    <thetext>This is another smaller chunk towards bug 95057.

Adding jamesr, epenner, and enne.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>714844</commentid>
    <comment_count>3</comment_count>
      <attachid>162787</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-09-07 12:20:21 -0700</bug_when>
    <thetext>Comment on attachment 162787
Patch

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

I really like this. It also helps break things up into more clear stages IMO, by not needing to keep backings ready for eviction at all times.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:176
&gt;      texture-&gt;setAbovePriorityCutoff(true);

I think there might be a subtle issue with removing this. If you requestLate() then this texture is chosen to be allocated in front of all other texture that have the same priority, even though the group of equal-priority textures didn&apos;t make the cut (this only really happens when we are totally OOM).

I think this could be handled by making the backing sort use this flag to sort backings correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>714899</commentid>
    <comment_count>4</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-07 13:20:03 -0700</bug_when>
    <thetext>Thanks!

(In reply to comment #3)
&gt; (From update of attachment 162787 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=162787&amp;action=review
&gt; I think there might be a subtle issue with removing this. If you requestLate() then this texture is chosen to be allocated in front of all other texture that have the same priority, even though the group of equal-priority textures didn&apos;t make the cut (this only really happens when we are totally OOM).

You&apos;re right -- I&apos;ll record the &quot;requestLate&quot; info the CCPrioritizedTexture, use it in the sorting, and verify it in the assert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>714935</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-09-07 13:51:04 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Thanks!
&gt; 
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 162787 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=162787&amp;action=review
&gt; &gt; I think there might be a subtle issue with removing this. If you requestLate() then this texture is chosen to be allocated in front of all other texture that have the same priority, even though the group of equal-priority textures didn&apos;t make the cut (this only really happens when we are totally OOM).
&gt; 
&gt; You&apos;re right -- I&apos;ll record the &quot;requestLate&quot; info the CCPrioritizedTexture, use it in the sorting, and verify it in the assert.

Would it also work to use the &quot;abovePriorityCutoff&quot; flag to distinguish between equal priorities during the backing sort?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715078</commentid>
    <comment_count>6</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-07 15:54:42 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Would it also work to use the &quot;abovePriorityCutoff&quot; flag to distinguish between equal priorities during the backing sort?

Yeah, that&apos;s the way I should go.  I&apos;m adding a unit test to verify this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715089</commentid>
    <comment_count>7</comment_count>
      <attachid>162787</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-09-07 16:09:56 -0700</bug_when>
    <thetext>Comment on attachment 162787
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:319
&gt;  {

If you have still have a chance, maybe just remove this function and move the code into unregister?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715184</commentid>
    <comment_count>8</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-07 18:02:06 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 162787 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=162787&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:319
&gt; &gt;  {
&gt; 
&gt; If you have still have a chance, maybe just remove this function and move the code into unregister?

For returnBackingTexture (right?), I wanted to do this, but it&apos;s also called in CCPrioritizedTexture::setDimensions, so it seemed easier to leave it here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715185</commentid>
    <comment_count>9</comment_count>
      <attachid>162787</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-09-07 18:09:03 -0700</bug_when>
    <thetext>Comment on attachment 162787
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:319
&gt;&gt;&gt;  {
&gt;&gt; 
&gt;&gt; If you have still have a chance, maybe just remove this function and move the code into unregister?
&gt; 
&gt; For returnBackingTexture (right?), I wanted to do this, but it&apos;s also called in CCPrioritizedTexture::setDimensions, so it seemed easier to leave it here.

Ahh! Quite right! Still need this then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715188</commentid>
    <comment_count>10</comment_count>
      <attachid>162924</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-07 18:10:58 -0700</bug_when>
    <thetext>Created attachment 162924
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715227</commentid>
    <comment_count>11</comment_count>
      <attachid>162924</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-09-07 19:21:03 -0700</bug_when>
    <thetext>Comment on attachment 162924
Patch

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

I was a little worried that this patch was going to put us back into the same old &quot;split TextureManager&quot; situation that we were in before (where we had one allocating/deleting class and one managing class), but this is a lot smaller and more elegant.  It&apos;s still one managing class, with plenty of asserts to make sure that we&apos;re working on data structures on the right thread.  Maybe I&apos;m just a little bit wary of baking too much main thread vs. impl thread logic here when there&apos;s impl thread painting in the future.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:384
&gt; +    if (m_needsSortBackings &amp;&amp; forceResort) {
&gt; +        prioritizeBackings();
&gt; +        ASSERT(!m_needsSortBackings);
&gt; +    }

I don&apos;t follow this.  assertInvariants is for making sure that the sorting is correct.  It seems like you should either only assert when it&apos;s sorted or sort every time.  Why do you need to sometimes sort here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715240</commentid>
    <comment_count>12</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-07 20:07:16 -0700</bug_when>
    <thetext>Thanks!

(In reply to comment #11)
&gt; I don&apos;t follow this.  assertInvariants is for making sure that the sorting is correct.  It seems like you should either only assert when it&apos;s sorted or sort every time.  Why do you need to sometimes sort here?

This is idiosyncratic.  I wanted to add code to test the sorting algorithm, and code to verify that things are sorted at various points in the execution.  The flag &quot;forceResort&quot; is only used in a test which verifies the sorting scheme.  The alternative (which may be better) would be to have make prioritizeBackings public, and have the test explicitly call that (which then implicitly verifies the order in assertInvariants).  Would that be more straightforward.  The only downside of exposing a (basically) internal function just for testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715634</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-09-09 16:40:10 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Thanks!
&gt; 
&gt; (In reply to comment #11)
&gt; &gt; I don&apos;t follow this.  assertInvariants is for making sure that the sorting is correct.  It seems like you should either only assert when it&apos;s sorted or sort every time.  Why do you need to sometimes sort here?
&gt; 
&gt; This is idiosyncratic.  I wanted to add code to test the sorting algorithm, and code to verify that things are sorted at various points in the execution.  The flag &quot;forceResort&quot; is only used in a test which verifies the sorting scheme.  The alternative (which may be better) would be to have make prioritizeBackings public, and have the test explicitly call that (which then implicitly verifies the order in assertInvariants).  Would that be more straightforward.  The only downside of exposing a (basically) internal function just for testing.

An another option (could go either way really) we could always make the sort explicit in the commit and remove the lazy sort flag. It would make it harder to accidentally not sort IMO, but also reduces flexibility a bit I guess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715736</commentid>
    <comment_count>14</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-09 23:15:22 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; An another option (could go either way really) we could always make the sort explicit in the commit and remove the lazy sort flag. It would make it harder to accidentally not sort IMO, but also reduces flexibility a bit I guess.

I liked this idea too, but it kept on blowing up when I had the sequence

  main thread               | impl thread
  -----------------------------------------------------------------
  beginFrame                |
  - prioritizeTextures [A]  |
  - (block on impl thread)  | beginFrameCompleteOnImplThread
                            | - prioritizeBackings [B]
                            | - un-block main thread
  beginFrame                |
  - prioritizeTextures [C]  |
  - (block on impl thread)  | scheduledActionUpdateMoreResources
                            | - acquireBackingIfNeeded (**)

At the point of the (**), the backings vector is sorted based on the priorities at point [A], but when we check the backings&apos; orders, they are now out-of-order with respect to the priorities at point [C].  And note that at step [C], we may have unlinked backings from textures, so the inconsistency is not just in the priority values.

Now, we will need to (very soon) push the priority values to the backings themselves, in order to delete only-some textures on the impl thread.  So one solution is to push this data to the impl thread at the &quot;prioritizeBackings&quot; phase.

The down-side to this is that it opens up the possibility for a performance regression: As of now, the PTM can, by virtue of this race, recycle the backing for a texture that it knows will be deleted in the next frame that will be committed.  With this change, the PTM would lose this ability.  As it happens, this happens a lot every time we load a page (in particular, for a simple page, we hit the recycle queue 42 times on page load with this behavior, and 31 times if we regress this behavior).

Anyway, I&apos;ve put together a patch which
- pushes the priorities to the PTM at only commit time in the ordinary run of things
- re-pushes the priorities when we fail to find a hit in the recycle pool *and* the the main thread has returned some backing(s) to the recycle pool since the last push

I&apos;ll attach the patch when it&apos;s cleaned up enough.  Of note is that we&apos;re (necessarily) pushing more into the &quot;separate main and impl&quot; territory that enne mentioned (and that will become unnecessary when we have impl-side painting).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716245</commentid>
    <comment_count>15</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-09-10 10:41:35 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Thanks!
&gt; 
&gt; (In reply to comment #11)
&gt; &gt; I don&apos;t follow this.  assertInvariants is for making sure that the sorting is correct.  It seems like you should either only assert when it&apos;s sorted or sort every time.  Why do you need to sometimes sort here?
&gt; 
&gt; This is idiosyncratic.  I wanted to add code to test the sorting algorithm, and code to verify that things are sorted at various points in the execution.  The flag &quot;forceResort&quot; is only used in a test which verifies the sorting scheme.  The alternative (which may be better) would be to have make prioritizeBackings public, and have the test explicitly call that (which then implicitly verifies the order in assertInvariants).  Would that be more straightforward.  The only downside of exposing a (basically) internal function just for testing.

I think if you want to test the sorting algorithm, then you should write some tests that test whatever cases you&apos;re worried about explicitly.

I think the other thing that worries me is assertInvariants(true) modifies state, so debug builds now have different behavior than release builds.  So, if there&apos;s some point where we need to have sorted backings but haven&apos;t, then assertInvariants(true) might mask that.

It&apos;s also just hard to look at these assertInvariants(true) and assertInvariants(false) from a code reading perspective and have any easy understanding of what value needs to be passed when.

I like the patch other than that bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716341</commentid>
    <comment_count>16</comment_count>
      <attachid>163177</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-10 12:07:52 -0700</bug_when>
    <thetext>Created attachment 163177
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716344</commentid>
    <comment_count>17</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-10 12:10:51 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; I think the other thing that worries me is assertInvariants(true) modifies state, so debug builds now have different behavior than release builds.  So, if there&apos;s some point where we need to have sorted backings but haven&apos;t, then assertInvariants(true) might mask that.

Very very good point.  I updated the patch to mirror the priority state on the Backing structures, and made the impl thread operate on only that state (instead of the main thread), and as a consequence, the assertInvariants argument went away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716383</commentid>
    <comment_count>18</comment_count>
      <attachid>163177</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-09-10 12:51:30 -0700</bug_when>
    <thetext>Comment on attachment 163177
Patch

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

I know we&apos;ll need to copy priorities to backings so that&apos;s good, but I think it would be ideal if we could limit things such that we can think of everything as always being &apos;up-to-date&apos; rather than thinking about &apos;AtLastPriorityUpdate&apos; values as that introduces thinking about threading etc again.

Is there anything wrong with just keeping the old lazy scheme and sorting/copying priorities over during the lazy sort step? Those values should always be up-to-date. My first preference would be to just insure sortBackings is *always* called externally when it needs to be called (after any main thread involvement), but your case above illustrates that&apos;s not as simple as I thought.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:225
&gt; +    ASSERT(CCProxy::isImplThread() &amp;&amp; CCProxy::isMainThreadBlocked());

Are the backings possibly not fully sorted when this is called? Could this miss available backings if they were high priority but were since returned?

In this sense I preferred the old lazy scheme which always detected and kept the backings sorted, or in alternate just insuring sortBackings is called everywhere it needs to be called so this would not be needed.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.h:108
&gt; +        if (priorityA == priorityB) {

Minor nit, Google usually prefers minimum nesting with early returns, eg:
if (priorityA != priorityB)
   return priorityIsLower(priorityA, priorityB)
if (aboveCuffoffA != aboveCutoffB)
   return aboveCutoffB;
return a &lt; b;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716411</commentid>
    <comment_count>19</comment_count>
      <attachid>163177</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-10 13:14:04 -0700</bug_when>
    <thetext>Comment on attachment 163177
Patch

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

Thanks!  Patch update incoming.

So I have a preference the non-lazy scheme, since it makes somewhat clear when the backings&apos; priorities will be updated in the commit flow, and it was also easier to unit-test (I could do the explicit prioritize and then test the output).  If you feel strongly about going back to the fully-lazy scheme, I can change it back.

All of that said, I&apos;m somewhat curious why we create-then-delete like 12 textures when loading a simple page (maybe if we make that behavior not the norm we can get rid of the aggressive intra-frame recycling).

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:225
&gt;&gt; +    ASSERT(CCProxy::isImplThread() &amp;&amp; CCProxy::isMainThreadBlocked());
&gt; 
&gt; Are the backings possibly not fully sorted when this is called? Could this miss available backings if they were high priority but were since returned?
&gt; 
&gt; In this sense I preferred the old lazy scheme which always detected and kept the backings sorted, or in alternate just insuring sortBackings is called everywhere it needs to be called so this would not be needed.

The backings are guaranteed to be sorted at all times, however, their sorting may be with respect to the last snapshot, but it may be that the main thread has made some changes to the priorities that have not yet been committed.

In acquireBackingTextureIfNeeded, we call this twice -- if the first call doesn&apos;t get us a backing and the main thread has since returned some backings, we re-pull the priorities from the textures (to avoid that regression).

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.h:108
&gt;&gt; +        if (priorityA == priorityB) {
&gt; 
&gt; Minor nit, Google usually prefers minimum nesting with early returns, eg:
&gt; if (priorityA != priorityB)
&gt;    return priorityIsLower(priorityA, priorityB)
&gt; if (aboveCuffoffA != aboveCutoffB)
&gt;    return aboveCutoffB;
&gt; return a &lt; b;

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716412</commentid>
    <comment_count>20</comment_count>
      <attachid>163189</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-10 13:16:12 -0700</bug_when>
    <thetext>Created attachment 163189
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716433</commentid>
    <comment_count>21</comment_count>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-09-10 13:26:54 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; The backings are guaranteed to be sorted at all times, however, their sorting may be with respect to the last snapshot, but it may be that the main thread has made some changes to the priorities that have not yet been committed.

The reason I still prefer the lazy scheme is that I don&apos;t see any reason why we couldn&apos;t just sort the backings again in this case. If the main thread changed priorities then it must have also called prioritizeTextures(), and it would never change any priorities further after that, so we it seems like we should definitely sort the backings.

If we did go back to the lazy scheme, would it be even easier if the &apos;needsBackingSort&apos; flag was set during PrioritizeTextures and unset during PrioritizeBackings? Then we could add ASSERT(!needsBackingSort) to make sure the main thread doesn&apos;t change anything between the two sorting steps, and also insure that either a.) sortBackings is called externally always, or b.) sortBackingsIfNeeded is always called first internally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716691</commentid>
    <comment_count>22</comment_count>
      <attachid>163246</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-10 16:55:25 -0700</bug_when>
    <thetext>Created attachment 163246
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716694</commentid>
    <comment_count>23</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-10 16:57:38 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #19)
&gt; I still prefer the lazy scheme

So I went ahead and re-implemented the lazy scheme on top of the new priority pulling logic, and I agree with you -- it&apos;s much easier to reason about.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716757</commentid>
    <comment_count>24</comment_count>
      <attachid>163246</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-09-10 18:25:12 -0700</bug_when>
    <thetext>Comment on attachment 163246
Patch

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

LGTM from my perspective. Enne?  I hope I haven&apos;t advocated anything you disagree with! :)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTexture.h:111
&gt;          CCPrioritizedTexture* owner() { return m_owner; }

Up to you, but I would just call these hasOwner()/requestPriority()/abovePriorityCutoff() since there is only one of these we need to care about in this class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716791</commentid>
    <comment_count>25</comment_count>
      <attachid>163246</attachid>
    <who name="Eric Penner">epenner</who>
    <bug_when>2012-09-10 20:22:54 -0700</bug_when>
    <thetext>Comment on attachment 163246
Patch

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

&gt; Source/WebKit/chromium/tests/CCPrioritizedTextureTest.cpp:521
&gt; +    DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBlocked;

I&apos;m confused as to why this is passing. Shouldn&apos;t the backings be unsorted due to requestLate, and result in an ASSERT below because they aren&apos;t sorted?

Hmm, perhaps the backing list is out of date but still sorted in the old valid order (since certain values are copied to backings now). In any case I think we need to tweak this so it fails, or test this another way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716812</commentid>
    <comment_count>26</comment_count>
      <attachid>163246</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-10 21:17:09 -0700</bug_when>
    <thetext>Comment on attachment 163246
Patch

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

&gt;&gt; Source/WebKit/chromium/tests/CCPrioritizedTextureTest.cpp:521
&gt;&gt; +    DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBlocked;
&gt; 
&gt; I&apos;m confused as to why this is passing. Shouldn&apos;t the backings be unsorted due to requestLate, and result in an ASSERT below because they aren&apos;t sorted?
&gt; 
&gt; Hmm, perhaps the backing list is out of date but still sorted in the old valid order (since certain values are copied to backings now). In any case I think we need to tweak this so it fails, or test this another way.

Ah, so this wasn&apos;t actually testing anything!  The backings are out-of-date (and therefore still sorted)!

I updated the test to sort the backings explicitly, and the verify that the textures&apos; backings have the right &quot;isAbovePriorityThreshold&quot;.  In order to do this, I made CCPrioritizedTextureTest be a friend of the CCPTM and CCPT classes, so it can reach in and inspect this state.  I also made some functions (assertInvariants and updateBackingsPriorities private again).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716813</commentid>
    <comment_count>27</comment_count>
      <attachid>163272</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-10 21:18:04 -0700</bug_when>
    <thetext>Created attachment 163272
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716828</commentid>
    <comment_count>28</comment_count>
      <attachid>163272</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-09-10 21:43:30 -0700</bug_when>
    <thetext>Comment on attachment 163272
Patch

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

This looks really nice to me.

I think one tradeoff to keep in mind in general with these classes is that they seem to always end up being fairly deeply aware of our commit flow, our threaded use of the class, or both.  I think being aware of the commit flow - i.e. what things happen in what order from what threads - tends to be the least intrusive of all of these.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPrioritizedTextureManager.cpp:397
&gt; +        if ((*it)-&gt;hadOwnerAtLastPriorityUpdate())

I think putting (*it) in an appropriately-named-and-typed temporary would be a big readability win for this section</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717372</commentid>
    <comment_count>29</comment_count>
      <attachid>163272</attachid>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2012-09-11 10:47:22 -0700</bug_when>
    <thetext>Comment on attachment 163272
Patch

Thanks!  I&apos;ll make a separate pass changing more of the (*it) to CCPrioritizedTexture::Backing*s or CCPrioritizedTexture*s (as it is, the style of the file is operating on the iterators)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717796</commentid>
    <comment_count>30</comment_count>
      <attachid>163272</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-11 18:35:25 -0700</bug_when>
    <thetext>Comment on attachment 163272
Patch

Clearing flags on attachment: 163272

Committed r128253: &lt;http://trac.webkit.org/changeset/128253&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717797</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-11 18:35:29 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162787</attachid>
            <date>2012-09-07 09:26:15 -0700</date>
            <delta_ts>2012-09-07 18:10:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96114-20120907092554.patch</filename>
            <type>text/plain</type>
            <size>12060</size>
            <attacher name="Christopher Cameron">ccameron</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3ODc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTMzYzUwOTQwZmU4YTA3
MDRjZDI2ZTVjMWMyMTU0M2I5YjU4ODEzMC4uM2QwZTU5NTExYWE2Y2EyMDAzZGY5ODRiMDc4MGJh
MmU2MDNiMmMwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTA5LTA3ICBDaHJp
c3RvcGhlciBDYW1lcm9uICA8Y2NhbWVyb25AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gTWFrZSBwcmlvcml0aXplZCB0ZXh0dXJlIG1hbmFnZXIgbm90IHRvdWNoIGJhY2tpbmdz
IGFycmF5IG9uIHRoZSBtYWluIHRocmVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTYxMTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBNYWtlIHRoZSBtYWluIHRocmVhZCBub3QgdG91Y2ggdGhlIG1fYmFj
a2luZ3MgYXJyYXkuICBTcGxpdAorICAgICAgICBQcmlvcml0aXplVGV4dHVyZXMgaW50byBhIFBy
aW9yaXRpemVCYWNraW5ncyBmdW5jdGlvbi4KKyAgICAgICAgSW4gcGxhY2VzIHdoZXJlIHRoZSBt
YWluIHRocmVhZCB3b3VsZCBoYXZlIHRvdWNoZWQgbV9iYWNraW5ncywKKyAgICAgICAgc2V0IGEg
ZmxhZyBzcGVjaWZ5aW5nIHRoYXQgbV9iYWNraW5ncyBuZWVkcyB0byBiZSByZS1zb3J0ZWQKKyAg
ICAgICAgYmVmb3JlIGFueSBmdW5jdGlvbiB0aGF0IHJlcXVpcmVzIGl0IGJlIHNvcnRlZCBieSBw
cmlvcml0eSBiZQorICAgICAgICBleGVjdXRlZC4KKworICAgICAgICBVcGRhdGUgdGhlIHR3byBm
dW5jdGlvbnMgdGhhdCByZXF1aXJlIHNvcnRlZCBvcmRlciAoYWNxdWlyZUJhY2tpbmcKKyAgICAg
ICAgYW5kIHJlZHVjZU1lbW9yeSkgdG8gc29ydCB0aGUgYmFja2luZ3MgYXJyYXkgKGlmIG5lZWRl
ZCkgYmVmb3JlCisgICAgICAgIHRyYXZlcnNpbmcgaXQuCisKKyAgICAgICAgVXBkYXRlZCB0ZXN0
cyB0byBzZXQgY29ycmVjdCB0aHJlYWQgZHVyaW5nIGFzc2VydHMuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyOjpwcmlvcml0aXplVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnByaW9yaXRpemVC
YWNraW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6
OnJlcXVlc3RMYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcjo6YWNxdWlyZUJhY2tpbmdUZXh0dXJlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZWR1Y2VNZW1vcnkpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZXR1cm5CYWNraW5nVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmRlc3Ryb3lC
YWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6
YXNzZXJ0SW52YXJpYW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmg6CisgICAgICAgIChDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXIpOgorCiAyMDEyLTA5LTA3ICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxh
bGxhbi5qZW5zZW5Abm9raWEuY29tPgogCiAgICAgICAgIFNpbXBsaWZ5IGhpdFRlc3RSZXN1bHRB
dFBvaW50IGFuZCBub2Rlc0Zyb21SZWN0IEFQSXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5k
ZXggYjI2OWRkOWNkZTkxNWIxM2I0MzNiYTc1MTRmNmQ4MTlkMTNkNGQ2NS4uMDJiYjY1N2E5Mjc4
NTg0MzdjZDllODUyYmI3YzlhZjllZWQ5OWFiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyNiBAQAorMjAxMi0wOS0wNyAgQ2hyaXN0b3BoZXIgQ2FtZXJvbiAgPGNjYW1l
cm9uQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIE1ha2UgcHJpb3JpdGl6ZWQg
dGV4dHVyZSBtYW5hZ2VyIG5vdCB0b3VjaCBiYWNraW5ncyBhcnJheSBvbiB0aGUgbWFpbiB0aHJl
YWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2MTE0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSB0
aGUgbWFpbiB0aHJlYWQgbm90IHRvdWNoIHRoZSBtX2JhY2tpbmdzIGFycmF5LiAgU3BsaXQKKyAg
ICAgICAgUHJpb3JpdGl6ZVRleHR1cmVzIGludG8gYSBQcmlvcml0aXplQmFja2luZ3MgZnVuY3Rp
b24uCisgICAgICAgIEluIHBsYWNlcyB3aGVyZSB0aGUgbWFpbiB0aHJlYWQgd291bGQgaGF2ZSB0
b3VjaGVkIG1fYmFja2luZ3MsCisgICAgICAgIHNldCBhIGZsYWcgc3BlY2lmeWluZyB0aGF0IG1f
YmFja2luZ3MgbmVlZHMgdG8gYmUgcmUtc29ydGVkCisgICAgICAgIGJlZm9yZSBhbnkgZnVuY3Rp
b24gdGhhdCByZXF1aXJlcyBpdCBiZSBzb3J0ZWQgYnkgcHJpb3JpdHkgYmUKKyAgICAgICAgZXhl
Y3V0ZWQuCisKKyAgICAgICAgVXBkYXRlIHRoZSB0d28gZnVuY3Rpb25zIHRoYXQgcmVxdWlyZSBz
b3J0ZWQgb3JkZXIgKGFjcXVpcmVCYWNraW5nCisgICAgICAgIGFuZCByZWR1Y2VNZW1vcnkpIHRv
IHNvcnQgdGhlIGJhY2tpbmdzIGFycmF5IChpZiBuZWVkZWQpIGJlZm9yZQorICAgICAgICB0cmF2
ZXJzaW5nIGl0LgorCisgICAgICAgIFVwZGF0ZWQgdGVzdHMgdG8gc2V0IGNvcnJlY3QgdGhyZWFk
IGR1cmluZyBhc3NlcnRzLgorCisgICAgICAgICogdGVzdHMvQ0NQcmlvcml0aXplZFRleHR1cmVU
ZXN0LmNwcDoKKyAgICAgICAgKFdURjo6Q0NQcmlvcml0aXplZFRleHR1cmVUZXN0Ojp2YWxpZGF0
ZVRleHR1cmUpOgorCiAyMDEyLTA5LTA3ICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5q
ZW5zZW5Abm9raWEuY29tPgogCiAgICAgICAgIFNpbXBsaWZ5IGhpdFRlc3RSZXN1bHRBdFBvaW50
IGFuZCBub2Rlc0Zyb21SZWN0IEFQSXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXIuY3BwCmluZGV4IDlkM2VmYjRhMTIwMzEzNGQxZThiZDliZDAzNDYz
ZTgyNDA1MmZlYTkuLjZjY2FhNTZjYjFkZmEyNjdiNjQyMmNmNjE5M2UxNTIwMGJkMjBiODcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmNwcApA
QCAtNDIsNiArNDIsNyBAQCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OkNDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcihzaXplX3QgbWF4TWVtb3J5TGltaXRCeQogICAgICwgbV9tZW1vcnlB
Ym92ZUN1dG9mZkJ5dGVzKDApCiAgICAgLCBtX21lbW9yeUF2YWlsYWJsZUJ5dGVzKDApCiAgICAg
LCBtX3Bvb2wocG9vbCkKKyAgICAsIG1fbmVlZHNTb3J0QmFja2luZ3MoZmFsc2UpCiB7CiB9CiAK
QEAgLTYxLDE4ICs2MiwxMiBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cHJp
b3JpdGl6ZVRleHR1cmVzKCkKICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVzIik7CiAgICAgQVNTRVJUKENDUHJveHk6
OmlzTWFpblRocmVhZCgpKTsKIAotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBhc3NlcnRJbnZh
cmlhbnRzKCk7Ci0jZW5kaWYKLQogICAgIC8vIFNvcnRpbmcgdGV4dHVyZXMgaW4gdGhpcyBmdW5j
dGlvbiBjb3VsZCBiZSByZXBsYWNlZCBieSBhIHNsaWdodGx5CiAgICAgLy8gbW9kaWZpZWQgTyhu
KSBxdWljay1zZWxlY3QgdG8gcGFydGl0aW9uIHRleHR1cmVzIHJhdGhlciB0aGFuCiAgICAgLy8g
c29ydCB0aGVtIChpZiBwZXJmb3JtYW5jZSBvZiB0aGUgc29ydCBiZWNvbWVzIGFuIGlzc3VlKS4K
IAogICAgIFRleHR1cmVWZWN0b3ImIHNvcnRlZFRleHR1cmVzID0gbV90ZW1wVGV4dHVyZVZlY3Rv
cjsKLSAgICBCYWNraW5nVmVjdG9yJiBzb3J0ZWRCYWNraW5ncyA9IG1fdGVtcEJhY2tpbmdWZWN0
b3I7CiAgICAgc29ydGVkVGV4dHVyZXMuY2xlYXIoKTsKLSAgICBzb3J0ZWRCYWNraW5ncy5jbGVh
cigpOwogCiAgICAgLy8gQ29weSBhbGwgdGV4dHVyZXMgaW50byBhIHZlY3RvciBhbmQgc29ydCB0
aGVtLgogICAgIGZvciAoVGV4dHVyZVNldDo6aXRlcmF0b3IgaXQgPSBtX3RleHR1cmVzLmJlZ2lu
KCk7IGl0ICE9IG1fdGV4dHVyZXMuZW5kKCk7ICsraXQpCkBAIC0xMTYsOSArMTExLDI0IEBAIHZv
aWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpwcmlvcml0aXplVGV4dHVyZXMoKQogICAg
ICAgICBpZiAoaXNBYm92ZVByaW9yaXR5Q3V0b2ZmICYmICEoKml0KS0+aXNTZWxmTWFuYWdlZCgp
KQogICAgICAgICAgICAgbV9tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzICs9ICgqaXQpLT5ieXRlcygp
OwogICAgIH0KKyAgICBzb3J0ZWRUZXh0dXJlcy5jbGVhcigpOworCisgICAgbV9uZWVkc1NvcnRC
YWNraW5ncyA9IHRydWU7CiAgICAgQVNTRVJUKG1fbWVtb3J5QWJvdmVDdXRvZmZCeXRlcyA8PSBt
X21lbW9yeUF2YWlsYWJsZUJ5dGVzKTsKKyAgICBBU1NFUlQobWVtb3J5QWJvdmVDdXRvZmZCeXRl
cygpIDw9IG1heE1lbW9yeUxpbWl0Qnl0ZXMoKSk7Cit9CisKK3ZvaWQgQ0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyOjpwcmlvcml0aXplQmFja2luZ3MoKQoreworICAgIFRSQUNFX0VWRU5UMCgi
Y2MiLCAiQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpwcmlvcml0aXplQmFja2luZ3MiKTsK
KyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWluVGhy
ZWFkQmxvY2tlZCgpKTsKIAotICAgIC8vIFB1dCBiYWNraW5ncyBpbiBldmljdGlvbi9yZWN5Y2xp
bmcgb3JkZXIuCisgICAgaWYgKCFtX25lZWRzU29ydEJhY2tpbmdzKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBQdXQgYmFja2luZ3MgaW4gb3JkZXIuCisgICAgQmFja2luZ1ZlY3RvciYgc29y
dGVkQmFja2luZ3MgPSBtX3RlbXBCYWNraW5nVmVjdG9yOworICAgIHNvcnRlZEJhY2tpbmdzLmNs
ZWFyKCk7CiAgICAgZm9yIChCYWNraW5nU2V0OjppdGVyYXRvciBpdCA9IG1fYmFja2luZ3MuYmVn
aW4oKTsgaXQgIT0gbV9iYWNraW5ncy5lbmQoKTsgKytpdCkKICAgICAgICAgc29ydGVkQmFja2lu
Z3MuYXBwZW5kKCppdCk7CiAgICAgc3RkOjpzb3J0KHNvcnRlZEJhY2tpbmdzLmJlZ2luKCksIHNv
cnRlZEJhY2tpbmdzLmVuZCgpLCBjb21wYXJlQmFja2luZ3MpOwpAQCAtMTI3LDEzICsxMzcsMTEg
QEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnByaW9yaXRpemVUZXh0dXJlcygp
CiAgICAgICAgIG1fYmFja2luZ3MucmVtb3ZlKCppdCk7CiAgICAgICAgIG1fYmFja2luZ3MuYWRk
KCppdCk7CiAgICAgfQotCi0gICAgc29ydGVkVGV4dHVyZXMuY2xlYXIoKTsKICAgICBzb3J0ZWRC
YWNraW5ncy5jbGVhcigpOworICAgIG1fbmVlZHNTb3J0QmFja2luZ3MgPSBmYWxzZTsKIAogI2lm
ICFBU1NFUlRfRElTQUJMRUQKICAgICBhc3NlcnRJbnZhcmlhbnRzKCk7Ci0gICAgQVNTRVJUKG1l
bW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSA8PSBtYXhNZW1vcnlMaW1pdEJ5dGVzKCkpOwogI2VuZGlm
CiB9CiAKQEAgLTE2NiwxMCArMTc0LDYgQEAgYm9vbCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI6OnJlcXVlc3RMYXRlKENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXJlKQogCiAgICAgbV9t
ZW1vcnlBYm92ZUN1dG9mZkJ5dGVzID0gbmV3TWVtb3J5Qnl0ZXM7CiAgICAgdGV4dHVyZS0+c2V0
QWJvdmVQcmlvcml0eUN1dG9mZih0cnVlKTsKLSAgICBpZiAodGV4dHVyZS0+YmFja2luZygpKSB7
Ci0gICAgICAgIG1fYmFja2luZ3MucmVtb3ZlKHRleHR1cmUtPmJhY2tpbmcoKSk7Ci0gICAgICAg
IG1fYmFja2luZ3MuYWRkKHRleHR1cmUtPmJhY2tpbmcoKSk7Ci0gICAgfQogICAgIHJldHVybiB0
cnVlOwogfQogCkBAIC0xODEsNiArMTg1LDkgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6OmFjcXVpcmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6ZWRUZXgKICAg
ICBpZiAodGV4dHVyZS0+YmFja2luZygpIHx8ICF0ZXh0dXJlLT5pc0Fib3ZlUHJpb3JpdHlDdXRv
ZmYoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gTWFrZSBzdXJlIHRoZSBiYWNraW5ncyBh
cmUgc29ydGVkIGJ5IHByaW9yaXR5IGJlZm9yZSB0cmF2ZXJzaW5nIHRoZW0uCisgICAgcHJpb3Jp
dGl6ZUJhY2tpbmdzKCk7CisKICAgICAvLyBGaW5kIGEgYmFja2luZyBiZWxvdywgYnkgZWl0aGVy
IHJlY3ljbGluZyBvciBhbGxvY2F0aW5nLgogICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNr
aW5nKiBiYWNraW5nID0gMDsKIApAQCAtMjI2LDYgKzIzMywxMCBAQCB2b2lkIENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcjo6cmVkdWNlTWVtb3J5KHNpemVfdCBsaW1pdEJ5dGVzLCBDQ1Jlc291
cmNlUHJvdgogdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlZHVjZU1lbW9yeShD
Q1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCiB7CiAgICAgQVNTRVJUKENDUHJv
eHk6OmlzSW1wbFRocmVhZCgpICYmIENDUHJveHk6OmlzTWFpblRocmVhZEJsb2NrZWQoKSk7CisK
KyAgICAvLyBNYWtlIHN1cmUgdGhlIGJhY2tpbmdzIGFyZSBzb3J0ZWQgYnkgcHJpb3JpdHkgYmVm
b3JlIHRyYXZlcnNpbmcgdGhlbS4KKyAgICBwcmlvcml0aXplQmFja2luZ3MoKTsKKwogICAgIHJl
ZHVjZU1lbW9yeShtX21lbW9yeUF2YWlsYWJsZUJ5dGVzLCByZXNvdXJjZVByb3ZpZGVyKTsKICAg
ICBBU1NFUlQobWVtb3J5VXNlQnl0ZXMoKSA8PSBtYXhNZW1vcnlMaW1pdEJ5dGVzKCkpOwogCkBA
IC0zMDgsOSArMzE5LDcgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJldHVy
bkJhY2tpbmdUZXh0dXJlKENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXgKIHsKICAgICBBU1NFUlQo
Q0NQcm94eTo6aXNNYWluVGhyZWFkKCkgfHwgKENDUHJveHk6OmlzSW1wbFRocmVhZCgpICYmIEND
UHJveHk6OmlzTWFpblRocmVhZEJsb2NrZWQoKSkpOwogICAgIGlmICh0ZXh0dXJlLT5iYWNraW5n
KCkpIHsKLSAgICAgICAgLy8gTW92ZSB0aGUgYmFja2luZyB0ZXh0dXJlIHRvIHRoZSBmcm9udCBm
b3IgZXZpY3Rpb24vcmVjeWNsaW5nIGFuZCB1bmxpbmsgaXQuCi0gICAgICAgIG1fYmFja2luZ3Mu
cmVtb3ZlKHRleHR1cmUtPmJhY2tpbmcoKSk7Ci0gICAgICAgIG1fYmFja2luZ3MuaW5zZXJ0QmVm
b3JlKG1fYmFja2luZ3MuYmVnaW4oKSwgdGV4dHVyZS0+YmFja2luZygpKTsKKyAgICAgICAgbV9u
ZWVkc1NvcnRCYWNraW5ncyA9IHRydWU7CiAgICAgICAgIHRleHR1cmUtPnVubGluaygpOwogICAg
IH0KIH0KQEAgLTMyOSw2ICszMzgsNyBAQCBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyog
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGVCYWNraW5nKEludFNpegogCiB2b2lk
IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6ZGVzdHJveUJhY2tpbmcoQ0NQcmlvcml0aXpl
ZFRleHR1cmU6OkJhY2tpbmcqIGJhY2tpbmcsIENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQ
cm92aWRlcikKIHsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94
eTo6aXNNYWluVGhyZWFkQmxvY2tlZCgpKTsKICAgICBBU1NFUlQoYmFja2luZyk7CiAgICAgQVNT
RVJUKCFiYWNraW5nLT5vd25lcigpIHx8ICFiYWNraW5nLT5vd25lcigpLT5pc0Fib3ZlUHJpb3Jp
dHlDdXRvZmYoKSk7CiAgICAgQVNTRVJUKCFiYWNraW5nLT5vd25lcigpIHx8ICFiYWNraW5nLT5v
d25lcigpLT5pc1NlbGZNYW5hZ2VkKCkpOwpAQCAtMzQ0LDExICszNTQsMTAgQEAgdm9pZCBDQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmRlc3Ryb3lCYWNraW5nKENDUHJpb3JpdGl6ZWRUZXh0
dXJlOjpCYWNraW5nKgogICAgIGRlbGV0ZSBiYWNraW5nOwogfQogCi0KICNpZiAhQVNTRVJUX0RJ
U0FCTEVECiB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6YXNzZXJ0SW52YXJpYW50
cygpCiB7Ci0gICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQo
Q0NQcm94eTo6aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWluVGhyZWFkQmxvY2tlZCgp
KTsKIAogICAgIC8vIElmIHdlIGhpdCBhbnkgb2YgdGhlc2UgYXNzZXJ0cywgdGhlcmUgaXMgYSBi
dWcgaW4gdGhpcyBjbGFzcy4gVG8gc2VlCiAgICAgLy8gd2hlcmUgdGhlIGJ1ZyBpcywgY2FsbCB0
aGlzIGZ1bmN0aW9uIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZgpAQCAtMzY4LDE4ICszNzcs
MTkgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmFzc2VydEludmFyaWFudHMo
KQogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gQXQgYWxsIHRpbWVzLCBiYWNraW5ncyB0aGF0
IGNhbiBiZSBldmljdGVkIG11c3QgYWx3YXlzIGNvbWUgYmVmb3JlCisgICAgLy8gV2hlbiBjb3Jy
ZWN0bHkgc29ydGVkLCBiYWNraW5ncyB0aGF0IGNhbiBiZSBldmljdGVkIG11c3QgYWx3YXlzIGNv
bWUgYmVmb3JlCiAgICAgLy8gYmFja2luZ3MgdGhhdCBjYW4ndCBiZSBldmljdGVkIGluIHRoZSBi
YWNraW5nIHRleHR1cmUgbGlzdCAob3RoZXJ3aXNlCiAgICAgLy8gcmVkdWNlTWVtb3J5IHdpbGwg
bm90IGZpbmQgYWxsIHRleHR1cmVzIGF2YWlsYWJsZSBmb3IgZXZpY3Rpb24vcmVjeWNsaW5nKS4K
LSAgICBib29sIHJlYWNoZWRQcm90ZWN0ZWQgPSBmYWxzZTsKLSAgICBmb3IgKEJhY2tpbmdTZXQ6
Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5ncy5iZWdpbigpOyBpdCAhPSBtX2JhY2tpbmdzLmVuZCgp
OyArK2l0KSB7Ci0gICAgICAgIGlmICgoKml0KS0+b3duZXIoKSAmJiAoKml0KS0+b3duZXIoKS0+
aXNBYm92ZVByaW9yaXR5Q3V0b2ZmKCkpCi0gICAgICAgICAgICByZWFjaGVkUHJvdGVjdGVkID0g
dHJ1ZTsKLSAgICAgICAgaWYgKHJlYWNoZWRQcm90ZWN0ZWQpCi0gICAgICAgICAgICBBU1NFUlQo
KCppdCktPm93bmVyKCkgJiYgKCppdCktPm93bmVyKCktPmlzQWJvdmVQcmlvcml0eUN1dG9mZigp
KTsKKyAgICBpZiAoIW1fbmVlZHNTb3J0QmFja2luZ3MpIHsKKyAgICAgICAgYm9vbCByZWFjaGVk
UHJvdGVjdGVkID0gZmFsc2U7CisgICAgICAgIGZvciAoQmFja2luZ1NldDo6aXRlcmF0b3IgaXQg
PSBtX2JhY2tpbmdzLmJlZ2luKCk7IGl0ICE9IG1fYmFja2luZ3MuZW5kKCk7ICsraXQpIHsKKyAg
ICAgICAgICAgIGlmICgoKml0KS0+b3duZXIoKSAmJiAoKml0KS0+b3duZXIoKS0+aXNBYm92ZVBy
aW9yaXR5Q3V0b2ZmKCkpCisgICAgICAgICAgICAgICAgcmVhY2hlZFByb3RlY3RlZCA9IHRydWU7
CisgICAgICAgICAgICBpZiAocmVhY2hlZFByb3RlY3RlZCkKKyAgICAgICAgICAgICAgICBBU1NF
UlQoKCppdCktPm93bmVyKCkgJiYgKCppdCktPm93bmVyKCktPmlzQWJvdmVQcmlvcml0eUN1dG9m
ZigpKTsKKyAgICAgICAgfQogICAgIH0KIH0KICNlbmRpZgogCi0KIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmgK
aW5kZXggZTkwYjI1MzU1ZWJkY2EwYzY1ODhjYWFmOGNhYTZhYzhmM2Q4ZGFlMy4uZWUyODZjN2Ey
MjRlODBkMTgzNzkxMmI1ZGRlNDgyMzA2NDAxNzRkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmgKQEAgLTExMSw2ICsxMTEsNyBAQCBwcml2YXRl
OgogCiAgICAgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKHNpemVfdCBtYXhNZW1vcnlMaW1p
dEJ5dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUsIGludCBwb29sKTsKIAorICAgIHZvaWQgcHJpb3Jp
dGl6ZUJhY2tpbmdzKCk7CiAgICAgdm9pZCByZWR1Y2VNZW1vcnkoc2l6ZV90IGxpbWl0LCBDQ1Jl
c291cmNlUHJvdmlkZXIqKTsKIAogICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKiBj
cmVhdGVCYWNraW5nKEludFNpemUsIEdDM0RlbnVtIGZvcm1hdCwgQ0NSZXNvdXJjZVByb3ZpZGVy
Kik7CkBAIC0xMzMsNiArMTM0LDEwIEBAIHByaXZhdGU6CiAKICAgICBUZXh0dXJlVmVjdG9yIG1f
dGVtcFRleHR1cmVWZWN0b3I7CiAgICAgQmFja2luZ1ZlY3RvciBtX3RlbXBCYWNraW5nVmVjdG9y
OworCisgICAgLy8gU2V0IHdoZW4gcHJpb3JpdGl6ZVRleHR1cmVzIGlzIGNhbGxlZCBvciB3aGVu
IGEgYmFja2luZyBpcyB1bmxpbmtlZAorICAgIC8vIG9uIHRoZSBtYWluIHRocmVhZCwgaW5kaWNh
dGluZyB0aGF0IG1fYmFja2luZ3MgbmVlZHMgdG8gYmUgcmUtc29ydGVkLgorICAgIGJvb2wgbV9u
ZWVkc1NvcnRCYWNraW5nczsKIH07CiAKIH0gLy8gV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QuY3BwCmlu
ZGV4IDkwNzZkMzRkNDljN2Q2MGQxYjI0MmRhOTRlNDg2ZGU3NThhYzg2MWUuLjA3ZGIzZTBlMmU4
NTE0YTZjYjEzYTgwYjJiMWZlMGRjYWZkZDk1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC5jcHAKQEAgLTcx
LDcgKzcxLDEwIEBAIHB1YmxpYzoKICAgICBib29sIHZhbGlkYXRlVGV4dHVyZShPd25QdHI8Q0NQ
cmlvcml0aXplZFRleHR1cmU+JiB0ZXh0dXJlLCBib29sIHJlcXVlc3RMYXRlKQogICAgIHsKICNp
ZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIHRleHR1cmUtPnRleHR1cmVNYW5hZ2VyKCktPmFz
c2VydEludmFyaWFudHMoKTsKKyAgICAgICAgeworICAgICAgICAgICAgRGVidWdTY29wZWRTZXRJ
bXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQgaW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9j
a2VkOworICAgICAgICAgICAgdGV4dHVyZS0+dGV4dHVyZU1hbmFnZXIoKS0+YXNzZXJ0SW52YXJp
YW50cygpOworICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgaWYgKHJlcXVlc3RMYXRlKQogICAg
ICAgICAgICAgdGV4dHVyZS0+cmVxdWVzdExhdGUoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162924</attachid>
            <date>2012-09-07 18:10:58 -0700</date>
            <delta_ts>2012-09-10 12:07:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96114-20120907181038.patch</filename>
            <type>text/plain</type>
            <size>15795</size>
            <attacher name="Christopher Cameron">ccameron</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3ODc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTMzYzUwOTQwZmU4YTA3
MDRjZDI2ZTVjMWMyMTU0M2I5YjU4ODEzMC4uMjc0ZTJmNzE4YjFlY2RhOGU4OTI1ZjcwY2Y0M2M3
MzQxMzQyNWYyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEyLTA5LTA3ICBDaHJp
c3RvcGhlciBDYW1lcm9uICA8Y2NhbWVyb25AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gTWFrZSBwcmlvcml0aXplZCB0ZXh0dXJlIG1hbmFnZXIgbm90IHRvdWNoIGJhY2tpbmdz
IGFycmF5IG9uIHRoZSBtYWluIHRocmVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTYxMTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBNYWtlIHRoZSBtYWluIHRocmVhZCBub3QgdG91Y2ggdGhlIG1fYmFj
a2luZ3MgYXJyYXkuICBTcGxpdAorICAgICAgICBQcmlvcml0aXplVGV4dHVyZXMgaW50byBhIFBy
aW9yaXRpemVCYWNraW5ncyBmdW5jdGlvbi4KKyAgICAgICAgSW4gcGxhY2VzIHdoZXJlIHRoZSBt
YWluIHRocmVhZCB3b3VsZCBoYXZlIHRvdWNoZWQgbV9iYWNraW5ncywKKyAgICAgICAgc2V0IGEg
ZmxhZyBzcGVjaWZ5aW5nIHRoYXQgbV9iYWNraW5ncyBuZWVkcyB0byBiZSByZS1zb3J0ZWQKKyAg
ICAgICAgYmVmb3JlIGFueSBmdW5jdGlvbiB0aGF0IHJlcXVpcmVzIGl0IGJlIHNvcnRlZCBieSBw
cmlvcml0eSBiZQorICAgICAgICBleGVjdXRlZC4KKworICAgICAgICBVcGRhdGUgdGhlIHR3byBm
dW5jdGlvbnMgdGhhdCByZXF1aXJlIHNvcnRlZCBvcmRlciAoYWNxdWlyZUJhY2tpbmcKKyAgICAg
ICAgYW5kIHJlZHVjZU1lbW9yeSkgdG8gc29ydCB0aGUgYmFja2luZ3MgYXJyYXkgKGlmIG5lZWRl
ZCkgYmVmb3JlCisgICAgICAgIHRyYXZlcnNpbmcgaXQuCisKKyAgICAgICAgVXBkYXRlZCB0ZXN0
cyB0byBzZXQgY29ycmVjdCB0aHJlYWQgZHVyaW5nIGFzc2VydHMuIEFkZCBhIHRlc3QgdG8KKyAg
ICAgICAgdmVyaWZ5IHRoYXQgcmVxdWVzdExhdGUgaXMgY29ycmVjdGx5IGluY29ycG9yYXRlZCBp
bnRvIHRoZSBiYWNraW5nCisgICAgICAgIHNvcnRpbmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyOjpwcmlvcml0aXplVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnByaW9yaXRpemVCYWNraW5n
cyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlcXVl
c3RMYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6
YWNxdWlyZUJhY2tpbmdUZXh0dXJlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZWR1Y2VNZW1vcnkpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZXR1cm5CYWNraW5nVGV4dHVyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmRlc3Ryb3lCYWNraW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6YXNzZXJ0
SW52YXJpYW50cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmg6CisgICAgICAgIChDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXIpOgorCiAyMDEyLTA5LTA3ICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5q
ZW5zZW5Abm9raWEuY29tPgogCiAgICAgICAgIFNpbXBsaWZ5IGhpdFRlc3RSZXN1bHRBdFBvaW50
IGFuZCBub2Rlc0Zyb21SZWN0IEFQSXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYjI2
OWRkOWNkZTkxNWIxM2I0MzNiYTc1MTRmNmQ4MTlkMTNkNGQ2NS4uMGRlYzlkZWEwYzI5MjBhMjNh
ZGIwOTg2MTg1OTkxYzViMGQxNTk0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOCBAQAorMjAxMi0wOS0wNyAgQ2hyaXN0b3BoZXIgQ2FtZXJvbiAgPGNjYW1lcm9uQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIE1ha2UgcHJpb3JpdGl6ZWQgdGV4dHVy
ZSBtYW5hZ2VyIG5vdCB0b3VjaCBiYWNraW5ncyBhcnJheSBvbiB0aGUgbWFpbiB0aHJlYWQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2MTE0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSB0aGUgbWFp
biB0aHJlYWQgbm90IHRvdWNoIHRoZSBtX2JhY2tpbmdzIGFycmF5LiAgU3BsaXQKKyAgICAgICAg
UHJpb3JpdGl6ZVRleHR1cmVzIGludG8gYSBQcmlvcml0aXplQmFja2luZ3MgZnVuY3Rpb24uCisg
ICAgICAgIEluIHBsYWNlcyB3aGVyZSB0aGUgbWFpbiB0aHJlYWQgd291bGQgaGF2ZSB0b3VjaGVk
IG1fYmFja2luZ3MsCisgICAgICAgIHNldCBhIGZsYWcgc3BlY2lmeWluZyB0aGF0IG1fYmFja2lu
Z3MgbmVlZHMgdG8gYmUgcmUtc29ydGVkCisgICAgICAgIGJlZm9yZSBhbnkgZnVuY3Rpb24gdGhh
dCByZXF1aXJlcyBpdCBiZSBzb3J0ZWQgYnkgcHJpb3JpdHkgYmUKKyAgICAgICAgZXhlY3V0ZWQu
CisKKyAgICAgICAgVXBkYXRlIHRoZSB0d28gZnVuY3Rpb25zIHRoYXQgcmVxdWlyZSBzb3J0ZWQg
b3JkZXIgKGFjcXVpcmVCYWNraW5nCisgICAgICAgIGFuZCByZWR1Y2VNZW1vcnkpIHRvIHNvcnQg
dGhlIGJhY2tpbmdzIGFycmF5IChpZiBuZWVkZWQpIGJlZm9yZQorICAgICAgICB0cmF2ZXJzaW5n
IGl0LgorCisgICAgICAgIFVwZGF0ZWQgdGVzdHMgdG8gc2V0IGNvcnJlY3QgdGhyZWFkIGR1cmlu
ZyBhc3NlcnRzLiBBZGQgYSB0ZXN0IHRvCisgICAgICAgIHZlcmlmeSB0aGF0IHJlcXVlc3RMYXRl
IGlzIGNvcnJlY3RseSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgYmFja2luZworICAgICAgICBzb3J0
aW5nLgorCisgICAgICAgICogdGVzdHMvQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LmNwcDoKKyAg
ICAgICAgKFdURjo6Q0NQcmlvcml0aXplZFRleHR1cmVUZXN0Ojp2YWxpZGF0ZVRleHR1cmUpOgor
CiAyMDEyLTA5LTA3ICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEu
Y29tPgogCiAgICAgICAgIFNpbXBsaWZ5IGhpdFRlc3RSZXN1bHRBdFBvaW50IGFuZCBub2Rlc0Zy
b21SZWN0IEFQSXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXIuY3BwCmluZGV4IDlkM2VmYjRhMTIwMzEzNGQxZThiZDliZDAzNDYzZTgyNDA1MmZlYTku
LmY4ZjUxOGRjZGM3MzQ1NWJiNTI5MGY5OTczOWJiZTRmNWU0ZDZjNWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRU
ZXh0dXJlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmNwcApAQCAtNDIsNiArNDIs
NyBAQCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcihzaXplX3QgbWF4TWVtb3J5TGltaXRCeQogICAgICwgbV9tZW1vcnlBYm92ZUN1dG9mZkJ5
dGVzKDApCiAgICAgLCBtX21lbW9yeUF2YWlsYWJsZUJ5dGVzKDApCiAgICAgLCBtX3Bvb2wocG9v
bCkKKyAgICAsIG1fbmVlZHNTb3J0QmFja2luZ3MoZmFsc2UpCiB7CiB9CiAKQEAgLTYxLDE4ICs2
MiwxMiBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cHJpb3JpdGl6ZVRleHR1
cmVzKCkKICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdl
cjo6cHJpb3JpdGl6ZVRleHR1cmVzIik7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVh
ZCgpKTsKIAotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBhc3NlcnRJbnZhcmlhbnRzKCk7Ci0j
ZW5kaWYKLQogICAgIC8vIFNvcnRpbmcgdGV4dHVyZXMgaW4gdGhpcyBmdW5jdGlvbiBjb3VsZCBi
ZSByZXBsYWNlZCBieSBhIHNsaWdodGx5CiAgICAgLy8gbW9kaWZpZWQgTyhuKSBxdWljay1zZWxl
Y3QgdG8gcGFydGl0aW9uIHRleHR1cmVzIHJhdGhlciB0aGFuCiAgICAgLy8gc29ydCB0aGVtIChp
ZiBwZXJmb3JtYW5jZSBvZiB0aGUgc29ydCBiZWNvbWVzIGFuIGlzc3VlKS4KIAogICAgIFRleHR1
cmVWZWN0b3ImIHNvcnRlZFRleHR1cmVzID0gbV90ZW1wVGV4dHVyZVZlY3RvcjsKLSAgICBCYWNr
aW5nVmVjdG9yJiBzb3J0ZWRCYWNraW5ncyA9IG1fdGVtcEJhY2tpbmdWZWN0b3I7CiAgICAgc29y
dGVkVGV4dHVyZXMuY2xlYXIoKTsKLSAgICBzb3J0ZWRCYWNraW5ncy5jbGVhcigpOwogCiAgICAg
Ly8gQ29weSBhbGwgdGV4dHVyZXMgaW50byBhIHZlY3RvciBhbmQgc29ydCB0aGVtLgogICAgIGZv
ciAoVGV4dHVyZVNldDo6aXRlcmF0b3IgaXQgPSBtX3RleHR1cmVzLmJlZ2luKCk7IGl0ICE9IG1f
dGV4dHVyZXMuZW5kKCk7ICsraXQpCkBAIC0xMTYsOSArMTExLDI0IEBAIHZvaWQgQ0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyOjpwcmlvcml0aXplVGV4dHVyZXMoKQogICAgICAgICBpZiAoaXNB
Ym92ZVByaW9yaXR5Q3V0b2ZmICYmICEoKml0KS0+aXNTZWxmTWFuYWdlZCgpKQogICAgICAgICAg
ICAgbV9tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzICs9ICgqaXQpLT5ieXRlcygpOwogICAgIH0KKyAg
ICBzb3J0ZWRUZXh0dXJlcy5jbGVhcigpOworCisgICAgbV9uZWVkc1NvcnRCYWNraW5ncyA9IHRy
dWU7CiAgICAgQVNTRVJUKG1fbWVtb3J5QWJvdmVDdXRvZmZCeXRlcyA8PSBtX21lbW9yeUF2YWls
YWJsZUJ5dGVzKTsKKyAgICBBU1NFUlQobWVtb3J5QWJvdmVDdXRvZmZCeXRlcygpIDw9IG1heE1l
bW9yeUxpbWl0Qnl0ZXMoKSk7Cit9CiAKLSAgICAvLyBQdXQgYmFja2luZ3MgaW4gZXZpY3Rpb24v
cmVjeWNsaW5nIG9yZGVyLgordm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnByaW9y
aXRpemVCYWNraW5ncygpCit7CisgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI6OnByaW9yaXRpemVCYWNraW5ncyIpOworICAgIEFTU0VSVChDQ1Byb3h5
Ojppc0ltcGxUaHJlYWQoKSAmJiBDQ1Byb3h5Ojppc01haW5UaHJlYWRCbG9ja2VkKCkpOworCisg
ICAgaWYgKCFtX25lZWRzU29ydEJhY2tpbmdzKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBQ
dXQgYmFja2luZ3MgaW4gb3JkZXIuCisgICAgQmFja2luZ1ZlY3RvciYgc29ydGVkQmFja2luZ3Mg
PSBtX3RlbXBCYWNraW5nVmVjdG9yOworICAgIHNvcnRlZEJhY2tpbmdzLmNsZWFyKCk7CiAgICAg
Zm9yIChCYWNraW5nU2V0OjppdGVyYXRvciBpdCA9IG1fYmFja2luZ3MuYmVnaW4oKTsgaXQgIT0g
bV9iYWNraW5ncy5lbmQoKTsgKytpdCkKICAgICAgICAgc29ydGVkQmFja2luZ3MuYXBwZW5kKCpp
dCk7CiAgICAgc3RkOjpzb3J0KHNvcnRlZEJhY2tpbmdzLmJlZ2luKCksIHNvcnRlZEJhY2tpbmdz
LmVuZCgpLCBjb21wYXJlQmFja2luZ3MpOwpAQCAtMTI3LDEzICsxMzcsMTEgQEAgdm9pZCBDQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnByaW9yaXRpemVUZXh0dXJlcygpCiAgICAgICAgIG1f
YmFja2luZ3MucmVtb3ZlKCppdCk7CiAgICAgICAgIG1fYmFja2luZ3MuYWRkKCppdCk7CiAgICAg
fQotCi0gICAgc29ydGVkVGV4dHVyZXMuY2xlYXIoKTsKICAgICBzb3J0ZWRCYWNraW5ncy5jbGVh
cigpOworICAgIG1fbmVlZHNTb3J0QmFja2luZ3MgPSBmYWxzZTsKIAogI2lmICFBU1NFUlRfRElT
QUJMRUQKLSAgICBhc3NlcnRJbnZhcmlhbnRzKCk7Ci0gICAgQVNTRVJUKG1lbW9yeUFib3ZlQ3V0
b2ZmQnl0ZXMoKSA8PSBtYXhNZW1vcnlMaW1pdEJ5dGVzKCkpOworICAgIGFzc2VydEludmFyaWFu
dHMoZmFsc2UpOwogI2VuZGlmCiB9CiAKQEAgLTE2NiwxMCArMTc0LDcgQEAgYm9vbCBDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RMYXRlKENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0
ZXh0dXJlKQogCiAgICAgbV9tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzID0gbmV3TWVtb3J5Qnl0ZXM7
CiAgICAgdGV4dHVyZS0+c2V0QWJvdmVQcmlvcml0eUN1dG9mZih0cnVlKTsKLSAgICBpZiAodGV4
dHVyZS0+YmFja2luZygpKSB7Ci0gICAgICAgIG1fYmFja2luZ3MucmVtb3ZlKHRleHR1cmUtPmJh
Y2tpbmcoKSk7Ci0gICAgICAgIG1fYmFja2luZ3MuYWRkKHRleHR1cmUtPmJhY2tpbmcoKSk7Ci0g
ICAgfQorICAgIG1fbmVlZHNTb3J0QmFja2luZ3MgPSB0cnVlOwogICAgIHJldHVybiB0cnVlOwog
fQogCkBAIC0xODEsNiArMTg2LDkgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6
OmFjcXVpcmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6ZWRUZXgKICAgICBpZiAo
dGV4dHVyZS0+YmFja2luZygpIHx8ICF0ZXh0dXJlLT5pc0Fib3ZlUHJpb3JpdHlDdXRvZmYoKSkK
ICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gTWFrZSBzdXJlIHRoZSBiYWNraW5ncyBhcmUgc29y
dGVkIGJ5IHByaW9yaXR5IGJlZm9yZSB0cmF2ZXJzaW5nIHRoZW0uCisgICAgcHJpb3JpdGl6ZUJh
Y2tpbmdzKCk7CisKICAgICAvLyBGaW5kIGEgYmFja2luZyBiZWxvdywgYnkgZWl0aGVyIHJlY3lj
bGluZyBvciBhbGxvY2F0aW5nLgogICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKiBi
YWNraW5nID0gMDsKIApAQCAtMjI2LDYgKzIzNCwxMCBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6cmVkdWNlTWVtb3J5KHNpemVfdCBsaW1pdEJ5dGVzLCBDQ1Jlc291cmNlUHJv
dgogdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlZHVjZU1lbW9yeShDQ1Jlc291
cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6Omlz
SW1wbFRocmVhZCgpICYmIENDUHJveHk6OmlzTWFpblRocmVhZEJsb2NrZWQoKSk7CisKKyAgICAv
LyBNYWtlIHN1cmUgdGhlIGJhY2tpbmdzIGFyZSBzb3J0ZWQgYnkgcHJpb3JpdHkgYmVmb3JlIHRy
YXZlcnNpbmcgdGhlbS4KKyAgICBwcmlvcml0aXplQmFja2luZ3MoKTsKKwogICAgIHJlZHVjZU1l
bW9yeShtX21lbW9yeUF2YWlsYWJsZUJ5dGVzLCByZXNvdXJjZVByb3ZpZGVyKTsKICAgICBBU1NF
UlQobWVtb3J5VXNlQnl0ZXMoKSA8PSBtYXhNZW1vcnlMaW1pdEJ5dGVzKCkpOwogCkBAIC0zMDgs
OSArMzIwLDcgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJldHVybkJhY2tp
bmdUZXh0dXJlKENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXgKIHsKICAgICBBU1NFUlQoQ0NQcm94
eTo6aXNNYWluVGhyZWFkKCkgfHwgKENDUHJveHk6OmlzSW1wbFRocmVhZCgpICYmIENDUHJveHk6
OmlzTWFpblRocmVhZEJsb2NrZWQoKSkpOwogICAgIGlmICh0ZXh0dXJlLT5iYWNraW5nKCkpIHsK
LSAgICAgICAgLy8gTW92ZSB0aGUgYmFja2luZyB0ZXh0dXJlIHRvIHRoZSBmcm9udCBmb3IgZXZp
Y3Rpb24vcmVjeWNsaW5nIGFuZCB1bmxpbmsgaXQuCi0gICAgICAgIG1fYmFja2luZ3MucmVtb3Zl
KHRleHR1cmUtPmJhY2tpbmcoKSk7Ci0gICAgICAgIG1fYmFja2luZ3MuaW5zZXJ0QmVmb3JlKG1f
YmFja2luZ3MuYmVnaW4oKSwgdGV4dHVyZS0+YmFja2luZygpKTsKKyAgICAgICAgbV9uZWVkc1Nv
cnRCYWNraW5ncyA9IHRydWU7CiAgICAgICAgIHRleHR1cmUtPnVubGluaygpOwogICAgIH0KIH0K
QEAgLTMyOSw2ICszMzksNyBAQCBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyogQ0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGVCYWNraW5nKEludFNpegogCiB2b2lkIENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6ZGVzdHJveUJhY2tpbmcoQ0NQcmlvcml0aXplZFRleHR1
cmU6OkJhY2tpbmcqIGJhY2tpbmcsIENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRl
cikKIHsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNN
YWluVGhyZWFkQmxvY2tlZCgpKTsKICAgICBBU1NFUlQoYmFja2luZyk7CiAgICAgQVNTRVJUKCFi
YWNraW5nLT5vd25lcigpIHx8ICFiYWNraW5nLT5vd25lcigpLT5pc0Fib3ZlUHJpb3JpdHlDdXRv
ZmYoKSk7CiAgICAgQVNTRVJUKCFiYWNraW5nLT5vd25lcigpIHx8ICFiYWNraW5nLT5vd25lcigp
LT5pc1NlbGZNYW5hZ2VkKCkpOwpAQCAtMzQ0LDExICszNTUsMTAgQEAgdm9pZCBDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXI6OmRlc3Ryb3lCYWNraW5nKENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpC
YWNraW5nKgogICAgIGRlbGV0ZSBiYWNraW5nOwogfQogCi0KICNpZiAhQVNTRVJUX0RJU0FCTEVE
Ci12b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6YXNzZXJ0SW52YXJpYW50cygpCit2
b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6YXNzZXJ0SW52YXJpYW50cyhib29sIGZv
cmNlUmVzb3J0KQogewotICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CisgICAg
QVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpICYmIENDUHJveHk6OmlzTWFpblRocmVhZEJs
b2NrZWQoKSk7CiAKICAgICAvLyBJZiB3ZSBoaXQgYW55IG9mIHRoZXNlIGFzc2VydHMsIHRoZXJl
IGlzIGEgYnVnIGluIHRoaXMgY2xhc3MuIFRvIHNlZQogICAgIC8vIHdoZXJlIHRoZSBidWcgaXMs
IGNhbGwgdGhpcyBmdW5jdGlvbiBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YKQEAgLTM2OCwx
OCArMzc4LDMwIEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjphc3NlcnRJbnZh
cmlhbnRzKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIEF0IGFsbCB0aW1lcywgYmFja2lu
Z3MgdGhhdCBjYW4gYmUgZXZpY3RlZCBtdXN0IGFsd2F5cyBjb21lIGJlZm9yZQorICAgIGlmICht
X25lZWRzU29ydEJhY2tpbmdzICYmIGZvcmNlUmVzb3J0KSB7CisgICAgICAgIHByaW9yaXRpemVC
YWNraW5ncygpOworICAgICAgICBBU1NFUlQoIW1fbmVlZHNTb3J0QmFja2luZ3MpOworICAgIH0K
KworICAgIC8vIFdoZW4gY29ycmVjdGx5IHNvcnRlZCwgYmFja2luZ3MgdGhhdCBjYW4gYmUgZXZp
Y3RlZCBtdXN0IGFsd2F5cyBjb21lIGJlZm9yZQogICAgIC8vIGJhY2tpbmdzIHRoYXQgY2FuJ3Qg
YmUgZXZpY3RlZCBpbiB0aGUgYmFja2luZyB0ZXh0dXJlIGxpc3QgKG90aGVyd2lzZQogICAgIC8v
IHJlZHVjZU1lbW9yeSB3aWxsIG5vdCBmaW5kIGFsbCB0ZXh0dXJlcyBhdmFpbGFibGUgZm9yIGV2
aWN0aW9uL3JlY3ljbGluZykuCi0gICAgYm9vbCByZWFjaGVkUHJvdGVjdGVkID0gZmFsc2U7Ci0g
ICAgZm9yIChCYWNraW5nU2V0OjppdGVyYXRvciBpdCA9IG1fYmFja2luZ3MuYmVnaW4oKTsgaXQg
IT0gbV9iYWNraW5ncy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoKCppdCktPm93bmVyKCkg
JiYgKCppdCktPm93bmVyKCktPmlzQWJvdmVQcmlvcml0eUN1dG9mZigpKQotICAgICAgICAgICAg
cmVhY2hlZFByb3RlY3RlZCA9IHRydWU7Ci0gICAgICAgIGlmIChyZWFjaGVkUHJvdGVjdGVkKQot
ICAgICAgICAgICAgQVNTRVJUKCgqaXQpLT5vd25lcigpICYmICgqaXQpLT5vd25lcigpLT5pc0Fi
b3ZlUHJpb3JpdHlDdXRvZmYoKSk7CisgICAgaWYgKCFtX25lZWRzU29ydEJhY2tpbmdzKSB7Cisg
ICAgICAgIGJvb2wgcmVhY2hlZE93bmVkID0gZmFsc2U7CisgICAgICAgIGJvb2wgcmVhY2hlZEFi
b3ZlQ3V0b2ZmID0gZmFsc2U7CisgICAgICAgIGZvciAoQmFja2luZ1NldDo6aXRlcmF0b3IgaXQg
PSBtX2JhY2tpbmdzLmJlZ2luKCk7IGl0ICE9IG1fYmFja2luZ3MuZW5kKCk7ICsraXQpIHsKKyAg
ICAgICAgICAgIGlmICgoKml0KS0+b3duZXIoKSkgeworICAgICAgICAgICAgICAgIHJlYWNoZWRP
d25lZCA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKCgqaXQpLT5vd25lcigpLT5pc0Fib3Zl
UHJpb3JpdHlDdXRvZmYoKSkKKyAgICAgICAgICAgICAgICAgICAgcmVhY2hlZEFib3ZlQ3V0b2Zm
ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyZWFjaGVkT3duZWQpCisg
ICAgICAgICAgICAgICAgQVNTRVJUKCgqaXQpLT5vd25lcigpKTsKKyAgICAgICAgICAgIGlmIChy
ZWFjaGVkQWJvdmVDdXRvZmYpCisgICAgICAgICAgICAgICAgQVNTRVJUKCgqaXQpLT5vd25lcigp
ICYmICgqaXQpLT5vd25lcigpLT5pc0Fib3ZlUHJpb3JpdHlDdXRvZmYoKSk7CisgICAgICAgIH0K
ICAgICB9CiB9CiAjZW5kaWYKIAotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oCmluZGV4IGU5MGIyNTM1NWVi
ZGNhMGM2NTg4Y2FhZjhjYWE2YWM4ZjNkOGRhZTMuLjdkMDMyMjMyZTMwNGFmMzE0MDczMDgzNmM5
NGRhZGM4NGEzMGJhYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlci5oCkBAIC04OCw3ICs4OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJldHVybkJh
Y2tpbmdUZXh0dXJlKENDUHJpb3JpdGl6ZWRUZXh0dXJlKik7CiAKICNpZiAhQVNTRVJUX0RJU0FC
TEVECi0gICAgdm9pZCBhc3NlcnRJbnZhcmlhbnRzKCk7CisgICAgdm9pZCBhc3NlcnRJbnZhcmlh
bnRzKGJvb2wgZm9yY2VSZXNvcnQpOwogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC0xMDQsMTMgKzEw
NCwyMSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgaW50IHByaW9yaXR5QSA9IGEtPm93bmVy
KCkgPyBhLT5vd25lcigpLT5yZXF1ZXN0UHJpb3JpdHkoKSA6IENDUHJpb3JpdHlDYWxjdWxhdG9y
Ojpsb3dlc3RQcmlvcml0eSgpOwogICAgICAgICBpbnQgcHJpb3JpdHlCID0gYi0+b3duZXIoKSA/
IGItPm93bmVyKCktPnJlcXVlc3RQcmlvcml0eSgpIDogQ0NQcmlvcml0eUNhbGN1bGF0b3I6Omxv
d2VzdFByaW9yaXR5KCk7Ci0gICAgICAgIGlmIChwcmlvcml0eUEgPT0gcHJpb3JpdHlCKQorICAg
ICAgICBpZiAocHJpb3JpdHlBID09IHByaW9yaXR5QikgeworICAgICAgICAgICAgYm9vbCBhYm92
ZUN1dG9mZkEgPSBhLT5vd25lcigpID8gYS0+b3duZXIoKS0+aXNBYm92ZVByaW9yaXR5Q3V0b2Zm
KCkgOiBmYWxzZTsKKyAgICAgICAgICAgIGJvb2wgYWJvdmVDdXRvZmZCID0gYi0+b3duZXIoKSA/
IGItPm93bmVyKCktPmlzQWJvdmVQcmlvcml0eUN1dG9mZigpIDogZmFsc2U7CisgICAgICAgICAg
ICBpZiAoIWFib3ZlQ3V0b2ZmQSAmJiBhYm92ZUN1dG9mZkIpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICBpZiAoYWJvdmVDdXRvZmZBICYmICFhYm92ZUN1dG9mZkIp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIGEgPCBi
OworICAgICAgICB9CiAgICAgICAgIHJldHVybiBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3Jp
dHlJc0xvd2VyKHByaW9yaXR5QSwgcHJpb3JpdHlCKTsKICAgICB9CiAKICAgICBDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXIoc2l6ZV90IG1heE1lbW9yeUxpbWl0Qnl0ZXMsIGludCBtYXhUZXh0
dXJlU2l6ZSwgaW50IHBvb2wpOwogCisgICAgdm9pZCBwcmlvcml0aXplQmFja2luZ3MoKTsKICAg
ICB2b2lkIHJlZHVjZU1lbW9yeShzaXplX3QgbGltaXQsIENDUmVzb3VyY2VQcm92aWRlciopOwog
CiAgICAgQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcqIGNyZWF0ZUJhY2tpbmcoSW50U2l6
ZSwgR0MzRGVudW0gZm9ybWF0LCBDQ1Jlc291cmNlUHJvdmlkZXIqKTsKQEAgLTEzMyw2ICsxNDEs
MTAgQEAgcHJpdmF0ZToKIAogICAgIFRleHR1cmVWZWN0b3IgbV90ZW1wVGV4dHVyZVZlY3RvcjsK
ICAgICBCYWNraW5nVmVjdG9yIG1fdGVtcEJhY2tpbmdWZWN0b3I7CisKKyAgICAvLyBTZXQgd2hl
biBwcmlvcml0aXplVGV4dHVyZXMgaXMgY2FsbGVkIG9yIHdoZW4gYSBiYWNraW5nIGlzIHVubGlu
a2VkCisgICAgLy8gb24gdGhlIG1haW4gdGhyZWFkLCBpbmRpY2F0aW5nIHRoYXQgbV9iYWNraW5n
cyBuZWVkcyB0byBiZSByZS1zb3J0ZWQuCisgICAgYm9vbCBtX25lZWRzU29ydEJhY2tpbmdzOwog
fTsKIAogfSAvLyBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC5jcHAKaW5kZXggOTA3NmQzNGQ0OWM3ZDYw
ZDFiMjQyZGE5NGU0ODZkZTc1OGFjODYxZS4uOTRkZGFhNWEwNmFkNDUxNTJiN2UwZGRjMTgwYTRm
YWMxMjU5YjI0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1By
aW9yaXRpemVkVGV4dHVyZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LmNwcApAQCAtNzEsMTEgKzcxLDE3IEBAIHB1Ymxp
YzoKICAgICBib29sIHZhbGlkYXRlVGV4dHVyZShPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+
JiB0ZXh0dXJlLCBib29sIHJlcXVlc3RMYXRlKQogICAgIHsKICNpZiAhQVNTRVJUX0RJU0FCTEVE
Ci0gICAgICAgIHRleHR1cmUtPnRleHR1cmVNYW5hZ2VyKCktPmFzc2VydEludmFyaWFudHMoKTsK
KyAgICAgICAgeworICAgICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkQW5kTWFpblRo
cmVhZEJsb2NrZWQgaW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkOworICAgICAgICAgICAg
dGV4dHVyZS0+dGV4dHVyZU1hbmFnZXIoKS0+YXNzZXJ0SW52YXJpYW50cyh0cnVlKTsKKyAgICAg
ICAgfQogI2VuZGlmCiAgICAgICAgIGlmIChyZXF1ZXN0TGF0ZSkKICAgICAgICAgICAgIHRleHR1
cmUtPnJlcXVlc3RMYXRlKCk7CiAgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZEFuZE1h
aW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZDsKKyNpZiAhQVNT
RVJUX0RJU0FCTEVECisgICAgICAgIHRleHR1cmUtPnRleHR1cmVNYW5hZ2VyKCktPmFzc2VydElu
dmFyaWFudHModHJ1ZSk7CisjZW5kaWYKICAgICAgICAgYm9vbCBzdWNjZXNzID0gdGV4dHVyZS0+
Y2FuQWNxdWlyZUJhY2tpbmdUZXh0dXJlKCk7CiAgICAgICAgIGlmIChzdWNjZXNzKQogICAgICAg
ICAgICAgdGV4dHVyZS0+YWNxdWlyZUJhY2tpbmdUZXh0dXJlKHJlc291cmNlUHJvdmlkZXIoKSk7
CkBAIC00NzYsNCArNDgyLDQxIEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHdo
ZW5SZW5kZXJTdXJmYWNlTm90QXZhaWxhYmxlVGV4dHVyZXNBbHNvTm90QXZhCiAgICAgdGV4dHVy
ZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KHJlc291cmNlUHJvdmlkZXIoKSk7CiB9CiAKK1RFU1Rf
RihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHJlcXVlc3RMYXRlQmFja2luZ3NTb3J0aW5nKQor
eworICAgIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlcyA9IDg7CisgICAgT3duUHRyPENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBjcmVhdGVNYW5hZ2VyKG1heFRl
eHR1cmVzKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcyh0ZXh0
dXJlc01lbW9yeVNpemUobWF4VGV4dHVyZXMpKTsKKworICAgIC8vIENyZWF0ZSB0ZXh0dXJlcyB0
byBmaWxsIG91ciBtZW1vcnkgbGltaXQuCisgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJl
PiB0ZXh0dXJlc1ttYXhUZXh0dXJlc107CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhU
ZXh0dXJlczsgKytpKQorICAgICAgICB0ZXh0dXJlc1tpXSA9IHRleHR1cmVNYW5hZ2VyLT5jcmVh
dGVUZXh0dXJlKG1fdGV4dHVyZVNpemUsIG1fdGV4dHVyZUZvcm1hdCk7CisKKyAgICAvLyBTZXQg
ZXF1YWwgcHJpb3JpdGllcywgYW5kIGFsbG9jYXRlIGJhY2tpbmdzIGZvciBhbGwgdGV4dHVyZXMK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCisgICAgICAgIHRl
eHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMTAwKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+
cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1heFRl
eHR1cmVzOyArK2kpCisgICAgICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJl
c1tpXSwgZmFsc2UpKTsKKworICAgIC8vIERyb3AgdGhlIG1lbW9yeSBsaW1pdCBhbmQgcHJpb3Jp
dGl6ZSAobm9uZSB3aWxsIGJlIGFib3ZlIHRoZSB0aHJlc2hvbGQsCisgICAgLy8gYnV0IHRoZXkg
c3RpbGwgaGF2ZSBiYWNraW5ncyBiZWNhdXNlIHJlZHVjZU1lbW9yeSBoYXNuJ3QgYmVlbiBjYWxs
ZWQpCisgICAgdGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXModGV4dHVyZXNN
ZW1vcnlTaXplKG1heFRleHR1cmVzIC8gMikpOworICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0
aXplVGV4dHVyZXMoKTsKKworICAgIC8vIFB1c2ggaGFsZiBvZiB0aGVtIGJhY2sgb3ZlciB0aGUg
bGltaXQKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpICs9IDIpCisg
ICAgICAgIEVYUEVDVF9UUlVFKHRleHR1cmVzW2ldLT5yZXF1ZXN0TGF0ZSgpKTsKKworICAgIC8v
IEFzc2VydCB0aGF0IHRoZSBiYWNraW5ncyBsaXN0IGJlIHNvcnRlZCB3aXRoIHRoZSBiZWxvdy1s
aW1pdCBiYWNraW5ncworICAgIC8vIGJlZm9yZSB0aGUgYWJvdmUtbGltaXQgYmFja2luZ3MKKyAg
ICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZCBpbXBsVGhyZWFk
QW5kTWFpblRocmVhZEJsb2NrZWQ7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIHRleHR1cmVN
YW5hZ2VyLT5hc3NlcnRJbnZhcmlhbnRzKHRydWUpOworI2VuZGlmCisgICAgdGV4dHVyZU1hbmFn
ZXItPmNsZWFyQWxsTWVtb3J5KHJlc291cmNlUHJvdmlkZXIoKSk7Cit9CisKKwogfSAvLyBuYW1l
c3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163177</attachid>
            <date>2012-09-10 12:07:52 -0700</date>
            <delta_ts>2012-09-10 13:16:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96114-20120910120729.patch</filename>
            <type>text/plain</type>
            <size>29736</size>
            <attacher name="Christopher Cameron">ccameron</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4MDc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWZjNDdkMmRjOGRmOWI4
ZDhjYjgzOGUzMDc2MDVhYjdmOTgzZTA1YS4uNmNhZjE3NjczYzU1ZmJkOWQyZjhkNDZkODY4NGNm
ODRmODBjYjhkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTA5LTA3ICBDaHJp
c3RvcGhlciBDYW1lcm9uICA8Y2NhbWVyb25AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gTWFrZSBwcmlvcml0aXplZCB0ZXh0dXJlIG1hbmFnZXIgbm90IHRvdWNoIGJhY2tpbmdz
IGFycmF5IG9uIHRoZSBtYWluIHRocmVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTYxMTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUYWtlIGEgc25hcHNob3Qgb2YgdGhlIHRleHR1cmVzJyBwcmlvcml0
aWVzIGZyb20gdGhlIG1haW4gdGhyZWFkLAorICAgICAgICBhbmQgc2F2ZSBpdCBpbiB0aGVpciBi
YWNraW5ncyBmb3IgYWNjZXNzIGJ5IHRoZSBpbXBsIHRocmVhZC4KKyAgICAgICAgVXBkYXRlIGZ1
bmN0aW9ucyB0aGF0IGFjY2VzcyB0aGUgc29ydGVkIGJhY2tpbmdzIGFycmF5IHRvIHVzZSB0aGUK
KyAgICAgICAgc25hcHNob3R0ZWQgdmFsdWVzIGluc3RlYWQgb2YgdGhlIHZhbHVlcyB0aGF0IHRo
ZSBtYWluIHRocmVhZCBtYXkKKyAgICAgICAgaGF2ZSBjb21wdXRlZCBmb3IgdGhlIG5leHQgZnJh
bWUuCisKKyAgICAgICAgTWFrZSB0aGUgbWFpbiB0aHJlYWQgbm90IHRvdWNoIHRoZSBtX2JhY2tp
bmdzIGFycmF5LiAgU3BsaXQKKyAgICAgICAgUHJpb3JpdGl6ZVRleHR1cmVzIGludG8gYSBQcmlv
cml0aXplQmFja2luZ3MgZnVuY3Rpb24uCisgICAgICAgIEluIHBsYWNlcyB3aGVyZSB0aGUgbWFp
biB0aHJlYWQgd291bGQgaGF2ZSB0b3VjaGVkIG1fYmFja2luZ3MsCisgICAgICAgIHNldCBhIGZs
YWcgc3BlY2lmeWluZyB0aGF0IG1fYmFja2luZ3MgbmVlZHMgdG8gYmUgcmUtc29ydGVkCisgICAg
ICAgIGJlZm9yZSBhbnkgZnVuY3Rpb24gdGhhdCByZXF1aXJlcyBpdCBiZSBzb3J0ZWQgYnkgcHJp
b3JpdHkgYmUKKyAgICAgICAgZXhlY3V0ZWQuCisKKyAgICAgICAgVXBkYXRlIHRoZSB0d28gZnVu
Y3Rpb25zIHRoYXQgcmVxdWlyZSBzb3J0ZWQgb3JkZXIgKGFjcXVpcmVCYWNraW5nCisgICAgICAg
IGFuZCByZWR1Y2VNZW1vcnkpIHRvIHNvcnQgdGhlIGJhY2tpbmdzIGFycmF5IChpZiBuZWVkZWQp
IGJlZm9yZQorICAgICAgICB0cmF2ZXJzaW5nIGl0LgorCisgICAgICAgIFVwZGF0ZWQgdGVzdHMg
dG8gc2V0IGNvcnJlY3QgdGhyZWFkIGR1cmluZyBhc3NlcnRzLiBBZGQgYSB0ZXN0IHRvCisgICAg
ICAgIHZlcmlmeSB0aGF0IHJlcXVlc3RMYXRlIGlzIGNvcnJlY3RseSBpbmNvcnBvcmF0ZWQgaW50
byB0aGUgYmFja2luZworICAgICAgICBzb3J0aW5nLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Q0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpwcmlvcml0aXplQmFja2luZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0
TGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmFj
cXVpcmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVkdWNlTWVtb3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmV0dXJuQmFja2luZ1RleHR1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpkZXN0cm95QmFja2luZyk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmFzc2VydElu
dmFyaWFudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oOgorICAgICAgICAoQ0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyKToKKwogMjAxMi0wOS0wNCAgUm9iZXJ0IEhvZ2FuICA8cm9iZXJ0QHdlYmtpdC5vcmc+
CiAKICAgICAgICAgQ1NTIDIuMSBmYWlsdXJlOiBjb250ZW50LWNvdW50ZXItMDEwLmh0bSBmYWls
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAyYTYyMTQ1MWJkMDNlYjhiYzhiYmE3OWMw
ZjRiYjc4MTMwOTNmY2M0Li4yNzQ5MGZjMmI3YTY1YzRmNWNjZDZiOTkyMGJjZTllMTRlMzdhYTc2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTA5LTA3
ICBDaHJpc3RvcGhlciBDYW1lcm9uICA8Y2NhbWVyb25AY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFtjaHJvbWl1bV0gTWFrZSBwcmlvcml0aXplZCB0ZXh0dXJlIG1hbmFnZXIgbm90IHRvdWNoIGJh
Y2tpbmdzIGFycmF5IG9uIHRoZSBtYWluIHRocmVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTYxMTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIHRoZSBtYWluIHRocmVhZCBub3QgdG91Y2ggdGhl
IG1fYmFja2luZ3MgYXJyYXkuICBTcGxpdAorICAgICAgICBwcmlvcml0aXplVGV4dHVyZXMgaW50
byBhIHB1c2hUZXh0dXJlUHJpb3JpdGllc1RvQmFja2luZ3MgZnVuY3Rpb24uCisgICAgICAgIElu
IHBsYWNlcyB3aGVyZSB0aGUgbWFpbiB0aHJlYWQgd291bGQgaGF2ZSB0b3VjaGVkIG1fYmFja2lu
Z3MsCisgICAgICAgIHNldCBhIGZsYWcgc3BlY2lmeWluZyB0aGF0IG1fYmFja2luZ3MgbmVlZHMg
dG8gYmUgcmUtc29ydGVkCisgICAgICAgIGJlZm9yZSBhbnkgZnVuY3Rpb24gdGhhdCByZXF1aXJl
cyBpdCBiZSBzb3J0ZWQgYnkgcHJpb3JpdHkgYmUKKyAgICAgICAgZXhlY3V0ZWQuCisKKyAgICAg
ICAgVXBkYXRlIHRoZSB0d28gZnVuY3Rpb25zIHRoYXQgcmVxdWlyZSBzb3J0ZWQgb3JkZXIgKGFj
cXVpcmVCYWNraW5nCisgICAgICAgIGFuZCByZWR1Y2VNZW1vcnkpIHRvIHNvcnQgdGhlIGJhY2tp
bmdzIGFycmF5IChpZiBuZWVkZWQpIGJlZm9yZQorICAgICAgICB0cmF2ZXJzaW5nIGl0LgorCisg
ICAgICAgIFVwZGF0ZWQgdGVzdHMgdG8gc2V0IGNvcnJlY3QgdGhyZWFkIGR1cmluZyBhc3NlcnRz
LiBBZGQgYSB0ZXN0IHRvCisgICAgICAgIHZlcmlmeSB0aGF0IHJlcXVlc3RMYXRlIGlzIGNvcnJl
Y3RseSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgYmFja2luZworICAgICAgICBzb3J0aW5nLgorCisg
ICAgICAgICogdGVzdHMvQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LmNwcDoKKyAgICAgICAgKFdU
Rjo6Q0NQcmlvcml0aXplZFRleHR1cmVUZXN0Ojp2YWxpZGF0ZVRleHR1cmUpOgorCiAyMDEyLTA5
LTEwICBSaWNrIEJ5ZXJzICA8cmJ5ZXJzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21p
dW1dIERvbid0IHVzZSBXZWJHZXN0dXJlRXZlbnQuYm91bmRpbmdCb3ggZm9yIHRvdWNoIGFkanVz
dG1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDE0NDcyYzcwNzgwZTM1
Yjk2NTliZTIyMzg4NTc1MDQ1ZmIxZDIxZTcuLmNjYWMzMjQwOTRkNGQ5ZTRhZDNmZjZkMWM5ZTNm
OTRjN2NiOGNkYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMjIxLDYg
KzIyMSw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpiZWdpbkNvbW1pdE9uSW1wbFRocmVhZChD
Q0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBs
VGhyZWFkKCkpOwogICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NMYXllclRyZWVIb3N0Ojpjb21t
aXRUbyIpOwogCisgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5wdXNoVGV4dHVyZVByaW9y
aXRpZXNUb0JhY2tpbmdzKCk7CiAgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5yZWR1Y2VN
ZW1vcnkoaG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRU
ZXh0dXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmNwcAppbmRleCBkOWY2OGFmMGFlMGI5OTI4MTMzYTIzMmQ3
NDE2OTI0NzYxMjA2ZGRiLi5kOThhYmE2MTVhZDE4NjcyYjEwNmY5OTU2NzA0YWFhMDRkNzkwNWI1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmUuY3BwCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpbmNsdWRlICJDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNs
dWRlICJDQ1ByaW9yaXR5Q2FsY3VsYXRvci5oIgorI2luY2x1ZGUgIkNDUHJveHkuaCIKICNpbmNs
dWRlIDxhbGdvcml0aG0+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC0xMzksNCArMTQwLDMy
IEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmU6OnNldFRvU2VsZk1hbmFnZWRNZW1vcnlQbGFj
ZWhvbGRlcihzaXplX3QgYnl0ZXMpCiAgICAgbV9ieXRlcyA9IGJ5dGVzOwogfQogCitDQ1ByaW9y
aXRpemVkVGV4dHVyZTo6QmFja2luZzo6QmFja2luZyh1bnNpZ25lZCBpZCwgSW50U2l6ZSBzaXpl
LCBHQzNEZW51bSBmb3JtYXQpCisgICAgOiBDQ1RleHR1cmUoaWQsIHNpemUsIGZvcm1hdCkKKyAg
ICAsIG1fb3duZXIoMCkKKyAgICAsIG1fcHJpb3JpdHlBdExhc3RQcmlvcml0eVVwZGF0ZShDQ1By
aW9yaXR5Q2FsY3VsYXRvcjo6bG93ZXN0UHJpb3JpdHkoKSkKKyAgICAsIG1fb3duZXJFeGlzdGVk
QXRMYXN0UHJpb3JpdHlVcGRhdGUoZmFsc2UpCisgICAgLCBtX3dhc0Fib3ZlUHJpb3JpdHlDdXRv
ZmZBdExhc3RQcmlvcml0eVVwZGF0ZShmYWxzZSkKK3sKK30KKworQ0NQcmlvcml0aXplZFRleHR1
cmU6OkJhY2tpbmc6On5CYWNraW5nKCkKK3sKKyAgICBBU1NFUlQoIW1fb3duZXIpOworfQorCit2
b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nOjp1cGRhdGVQcmlvcml0eSgpCit7Cisg
ICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpICYmIENDUHJveHk6OmlzTWFpblRocmVh
ZEJsb2NrZWQoKSk7CisgICAgaWYgKG1fb3duZXIpIHsKKyAgICAgICAgbV9vd25lckV4aXN0ZWRB
dExhc3RQcmlvcml0eVVwZGF0ZSA9IHRydWU7CisgICAgICAgIG1fcHJpb3JpdHlBdExhc3RQcmlv
cml0eVVwZGF0ZSA9IG1fb3duZXItPnJlcXVlc3RQcmlvcml0eSgpOworICAgICAgICBtX3dhc0Fi
b3ZlUHJpb3JpdHlDdXRvZmZBdExhc3RQcmlvcml0eVVwZGF0ZSA9IG1fb3duZXItPmlzQWJvdmVQ
cmlvcml0eUN1dG9mZigpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fb3duZXJFeGlzdGVkQXRM
YXN0UHJpb3JpdHlVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgbV9wcmlvcml0eUF0TGFzdFByaW9y
aXR5VXBkYXRlID0gQ0NQcmlvcml0eUNhbGN1bGF0b3I6Omxvd2VzdFByaW9yaXR5KCk7CisgICAg
ICAgIG1fd2FzQWJvdmVQcmlvcml0eUN1dG9mZkF0TGFzdFByaW9yaXR5VXBkYXRlID0gZmFsc2U7
CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVy
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlv
cml0aXplZFRleHR1cmUuaAppbmRleCAzNzg5ZDdmMjY5YTNkN2U1MTk1YTg5MmRkZDM3NmRhZTYx
OGQyYjBlLi4zNGZiMTFmMGNjZjQ3YTE3ODU5NmY5ZjRhMDA5MzM1YTdhZjI0ZThlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9y
aXRpemVkVGV4dHVyZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmgKQEAgLTEwNCwxNCArMTA0LDIxIEBAIHBy
aXZhdGU6CiAgICAgY2xhc3MgQmFja2luZyA6IHB1YmxpYyBDQ1RleHR1cmUgewogICAgICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShCYWNraW5nKTsKICAgICBwdWJsaWM6Ci0gICAgICAgIEJhY2tp
bmcodW5zaWduZWQgaWQsIEludFNpemUgc2l6ZSwgR0MzRGVudW0gZm9ybWF0KQotICAgICAgICAg
ICAgOiBDQ1RleHR1cmUoaWQsIHNpemUsIGZvcm1hdCksIG1fb3duZXIoMCkgeyB9Ci0gICAgICAg
IH5CYWNraW5nKCkgeyBBU1NFUlQoIW1fb3duZXIpOyB9CisgICAgICAgIEJhY2tpbmcodW5zaWdu
ZWQgaWQsIEludFNpemUsIEdDM0RlbnVtIGZvcm1hdCk7CisgICAgICAgIH5CYWNraW5nKCk7Cisg
ICAgICAgIHZvaWQgdXBkYXRlUHJpb3JpdHkoKTsKIAogICAgICAgICBDQ1ByaW9yaXRpemVkVGV4
dHVyZSogb3duZXIoKSB7IHJldHVybiBtX293bmVyOyB9CisgICAgICAgIGJvb2wgaGFkT3duZXJB
dExhc3RQcmlvcml0eVVwZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJFeGlzdGVkQXRMYXN0
UHJpb3JpdHlVcGRhdGU7IH0KKyAgICAgICAgYm9vbCByZXF1ZXN0UHJpb3JpdHlBdExhc3RQcmlv
cml0eVVwZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpb3JpdHlBdExhc3RQcmlvcml0eVVwZGF0
ZTsgfQorICAgICAgICBib29sIHdhc0Fib3ZlUHJpb3JpdHlDdXRvZmZBdExhc3RQcmlvcml0eVVw
ZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzQWJvdmVQcmlvcml0eUN1dG9mZkF0TGFzdFByaW9y
aXR5VXBkYXRlOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgQ0NQcmlv
cml0aXplZFRleHR1cmU7CiAgICAgICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlKiBtX293bmVyOwor
ICAgICAgICBpbnQgbV9wcmlvcml0eUF0TGFzdFByaW9yaXR5VXBkYXRlOworICAgICAgICBib29s
IG1fb3duZXJFeGlzdGVkQXRMYXN0UHJpb3JpdHlVcGRhdGU7CisgICAgICAgIGJvb2wgbV93YXNB
Ym92ZVByaW9yaXR5Q3V0b2ZmQXRMYXN0UHJpb3JpdHlVcGRhdGU7CiAgICAgfTsKIAogICAgIEND
UHJpb3JpdGl6ZWRUZXh0dXJlKENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlciosIEludFNpemUs
IEdDM0RlbnVtIGZvcm1hdCk7CkBAIC0xMjgsNyArMTM1LDcgQEAgcHJpdmF0ZToKICAgICBHQzNE
ZW51bSBtX2Zvcm1hdDsKICAgICBzaXplX3QgbV9ieXRlczsKIAotICAgIHNpemVfdCBtX3ByaW9y
aXR5OworICAgIGludCBtX3ByaW9yaXR5OwogICAgIGJvb2wgbV9pc0Fib3ZlUHJpb3JpdHlDdXRv
ZmY7CiAgICAgYm9vbCBtX2lzU2VsZk1hbmFnZWQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3BwCmluZGV4IDlkM2VmYjRhMTIwMzEzNGQxZThi
ZDliZDAzNDYzZTgyNDA1MmZlYTkuLmY2MzE0NWFlNGI0OTg1ZGFjODBhNTgwODdiNTJlYWM1MjM4
Zjk4MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyLmNwcApAQCAtNDIsNiArNDIsNyBAQCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OkND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcihzaXplX3QgbWF4TWVtb3J5TGltaXRCeQogICAgICwg
bV9tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKDApCiAgICAgLCBtX21lbW9yeUF2YWlsYWJsZUJ5dGVz
KDApCiAgICAgLCBtX3Bvb2wocG9vbCkKKyAgICAsIG1faGFzVW5saW5rZWRCYWNraW5nc1NpbmNl
TGFzdFB1c2goZmFsc2UpCiB7CiB9CiAKQEAgLTYxLDE4ICs2MiwxMiBAQCB2b2lkIENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVzKCkKICAgICBUUkFDRV9FVkVO
VDAoImNjIiwgIkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVz
Iik7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKIAotI2lmICFBU1NFUlRf
RElTQUJMRUQKLSAgICBhc3NlcnRJbnZhcmlhbnRzKCk7Ci0jZW5kaWYKLQogICAgIC8vIFNvcnRp
bmcgdGV4dHVyZXMgaW4gdGhpcyBmdW5jdGlvbiBjb3VsZCBiZSByZXBsYWNlZCBieSBhIHNsaWdo
dGx5CiAgICAgLy8gbW9kaWZpZWQgTyhuKSBxdWljay1zZWxlY3QgdG8gcGFydGl0aW9uIHRleHR1
cmVzIHJhdGhlciB0aGFuCiAgICAgLy8gc29ydCB0aGVtIChpZiBwZXJmb3JtYW5jZSBvZiB0aGUg
c29ydCBiZWNvbWVzIGFuIGlzc3VlKS4KIAogICAgIFRleHR1cmVWZWN0b3ImIHNvcnRlZFRleHR1
cmVzID0gbV90ZW1wVGV4dHVyZVZlY3RvcjsKLSAgICBCYWNraW5nVmVjdG9yJiBzb3J0ZWRCYWNr
aW5ncyA9IG1fdGVtcEJhY2tpbmdWZWN0b3I7CiAgICAgc29ydGVkVGV4dHVyZXMuY2xlYXIoKTsK
LSAgICBzb3J0ZWRCYWNraW5ncy5jbGVhcigpOwogCiAgICAgLy8gQ29weSBhbGwgdGV4dHVyZXMg
aW50byBhIHZlY3RvciBhbmQgc29ydCB0aGVtLgogICAgIGZvciAoVGV4dHVyZVNldDo6aXRlcmF0
b3IgaXQgPSBtX3RleHR1cmVzLmJlZ2luKCk7IGl0ICE9IG1fdGV4dHVyZXMuZW5kKCk7ICsraXQp
CkBAIC0xMTYsMjQgKzExMSwzOSBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6
cHJpb3JpdGl6ZVRleHR1cmVzKCkKICAgICAgICAgaWYgKGlzQWJvdmVQcmlvcml0eUN1dG9mZiAm
JiAhKCppdCktPmlzU2VsZk1hbmFnZWQoKSkKICAgICAgICAgICAgIG1fbWVtb3J5QWJvdmVDdXRv
ZmZCeXRlcyArPSAoKml0KS0+Ynl0ZXMoKTsKICAgICB9CisgICAgc29ydGVkVGV4dHVyZXMuY2xl
YXIoKTsKKwogICAgIEFTU0VSVChtX21lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMgPD0gbV9tZW1vcnlB
dmFpbGFibGVCeXRlcyk7CisgICAgQVNTRVJUKG1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSA8PSBt
YXhNZW1vcnlMaW1pdEJ5dGVzKCkpOworfQogCi0gICAgLy8gUHV0IGJhY2tpbmdzIGluIGV2aWN0
aW9uL3JlY3ljbGluZyBvcmRlci4KLSAgICBmb3IgKEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0g
bV9iYWNraW5ncy5iZWdpbigpOyBpdCAhPSBtX2JhY2tpbmdzLmVuZCgpOyArK2l0KQordm9pZCBD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnB1c2hUZXh0dXJlUHJpb3JpdGllc1RvQmFja2lu
Z3MoKQoreworICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyOjpwcmlvcml0aXplQmFja2luZ3MiKTsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhy
ZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWluVGhyZWFkQmxvY2tlZCgpKTsKKworI2lmICFBU1NFUlRf
RElTQUJMRUQKKyAgICBhc3NlcnRJbnZhcmlhbnRzKCk7CisjZW5kaWYKKworICAgIC8vIFB1dCBi
YWNraW5ncyBpbiBvcmRlci4KKyAgICBCYWNraW5nVmVjdG9yJiBzb3J0ZWRCYWNraW5ncyA9IG1f
dGVtcEJhY2tpbmdWZWN0b3I7CisgICAgc29ydGVkQmFja2luZ3MuY2xlYXIoKTsKKyAgICBmb3Ig
KEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5ncy5iZWdpbigpOyBpdCAhPSBtX2Jh
Y2tpbmdzLmVuZCgpOyArK2l0KSB7CisgICAgICAgICgqaXQpLT51cGRhdGVQcmlvcml0eSgpOwog
ICAgICAgICBzb3J0ZWRCYWNraW5ncy5hcHBlbmQoKml0KTsKKyAgICB9CiAgICAgc3RkOjpzb3J0
KHNvcnRlZEJhY2tpbmdzLmJlZ2luKCksIHNvcnRlZEJhY2tpbmdzLmVuZCgpLCBjb21wYXJlQmFj
a2luZ3MpOwogCiAgICAgZm9yIChCYWNraW5nVmVjdG9yOjppdGVyYXRvciBpdCA9IHNvcnRlZEJh
Y2tpbmdzLmJlZ2luKCk7IGl0ICE9IHNvcnRlZEJhY2tpbmdzLmVuZCgpOyArK2l0KSB7CiAgICAg
ICAgIG1fYmFja2luZ3MucmVtb3ZlKCppdCk7CiAgICAgICAgIG1fYmFja2luZ3MuYWRkKCppdCk7
CiAgICAgfQotCi0gICAgc29ydGVkVGV4dHVyZXMuY2xlYXIoKTsKICAgICBzb3J0ZWRCYWNraW5n
cy5jbGVhcigpOworICAgIG1faGFzVW5saW5rZWRCYWNraW5nc1NpbmNlTGFzdFB1c2ggPSBmYWxz
ZTsKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBhc3NlcnRJbnZhcmlhbnRzKCk7Ci0gICAg
QVNTRVJUKG1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSA8PSBtYXhNZW1vcnlMaW1pdEJ5dGVzKCkp
OwogI2VuZGlmCiB9CiAKQEAgLTE2NiwxMCArMTc2LDYgQEAgYm9vbCBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OnJlcXVlc3RMYXRlKENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXJlKQog
CiAgICAgbV9tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzID0gbmV3TWVtb3J5Qnl0ZXM7CiAgICAgdGV4
dHVyZS0+c2V0QWJvdmVQcmlvcml0eUN1dG9mZih0cnVlKTsKLSAgICBpZiAodGV4dHVyZS0+YmFj
a2luZygpKSB7Ci0gICAgICAgIG1fYmFja2luZ3MucmVtb3ZlKHRleHR1cmUtPmJhY2tpbmcoKSk7
Ci0gICAgICAgIG1fYmFja2luZ3MuYWRkKHRleHR1cmUtPmJhY2tpbmcoKSk7Ci0gICAgfQogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC0xODEsMTcgKzE4NywyMiBAQCB2b2lkIENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcjo6YWNxdWlyZUJhY2tpbmdUZXh0dXJlSWZOZWVkZWQoQ0NQcmlvcml0
aXplZFRleAogICAgIGlmICh0ZXh0dXJlLT5iYWNraW5nKCkgfHwgIXRleHR1cmUtPmlzQWJvdmVQ
cmlvcml0eUN1dG9mZigpKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBNYWtlIHN1cmUgdGhl
IGJhY2tpbmdzIGFyZSBzb3J0ZWQgYnkgcHJpb3JpdHkgYmVmb3JlIHRyYXZlcnNpbmcgdGhlbS4K
KyAgICBhc3NlcnRJbnZhcmlhbnRzKCk7CisKICAgICAvLyBGaW5kIGEgYmFja2luZyBiZWxvdywg
YnkgZWl0aGVyIHJlY3ljbGluZyBvciBhbGxvY2F0aW5nLgogICAgIENDUHJpb3JpdGl6ZWRUZXh0
dXJlOjpCYWNraW5nKiBiYWNraW5nID0gMDsKIAogICAgIC8vIEZpcnN0IHRyeSB0byByZWN5Y2xl
Ci0gICAgZm9yIChCYWNraW5nU2V0OjppdGVyYXRvciBpdCA9IG1fYmFja2luZ3MuYmVnaW4oKTsg
aXQgIT0gbV9iYWNraW5ncy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoKCppdCktPm93bmVy
KCkgJiYgKCppdCktPm93bmVyKCktPmlzQWJvdmVQcmlvcml0eUN1dG9mZigpKQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGlmICgoKml0KS0+c2l6ZSgpID09IHRleHR1cmUtPnNpemUoKSAm
JiAoKml0KS0+Zm9ybWF0KCkgPT0gdGV4dHVyZS0+Zm9ybWF0KCkpIHsKLSAgICAgICAgICAgIGJh
Y2tpbmcgPSAoKml0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgYmFja2lu
ZyA9IGFjcXVpcmVSZWN5Y2xlZEJhY2tpbmdUZXh0dXJlKHRleHR1cmUpOworCisgICAgLy8gSWYg
d2UgY2FuJ3QgZmluZCBhIGJhY2tpbmcgdG8gcmVjeWNsZSBidXQgdGhlIG1haW4gdGhyZWFkIGhh
cyByZXR1cm5lZCBzb21lCisgICAgLy8gYmFja2luZ3Mgc2luY2UgdGhlIGxhc3QgdGltZSB3ZSBk
aWQgYSBwcmlvcml0aXplLCByZS1jb21taXQgdGhlIHRleHR1cmUgcHJpb3JpdGllcywKKyAgICAv
LyBhbmQgdHJ5IHRvIHJlY3ljbGUgYWdhaW4uCisgICAgaWYgKCFiYWNraW5nICYmIG1faGFzVW5s
aW5rZWRCYWNraW5nc1NpbmNlTGFzdFB1c2gpIHsKKyAgICAgICAgcHVzaFRleHR1cmVQcmlvcml0
aWVzVG9CYWNraW5ncygpOworICAgICAgICBBU1NFUlQoIW1faGFzVW5saW5rZWRCYWNraW5nc1Np
bmNlTGFzdFB1c2gpOworICAgICAgICBiYWNraW5nID0gYWNxdWlyZVJlY3ljbGVkQmFja2luZ1Rl
eHR1cmUodGV4dHVyZSk7CiAgICAgfQogCiAgICAgLy8gT3RoZXJ3aXNlIHJlZHVjZSBtZW1vcnkg
YW5kIGp1c3QgYWxsb2NhdGUgYSBuZXcgYmFja2luZyB0ZXh1cmVzLgpAQCAtMjA0LDEwICsyMTUs
MjYgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmFjcXVpcmVCYWNraW5nVGV4
dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6ZWRUZXgKICAgICBpZiAoYmFja2luZy0+b3duZXIoKSkK
ICAgICAgICAgYmFja2luZy0+b3duZXIoKS0+dW5saW5rKCk7CiAgICAgdGV4dHVyZS0+bGluayhi
YWNraW5nKTsKKyAgICBiYWNraW5nLT51cGRhdGVQcmlvcml0eSgpOwogICAgIG1fYmFja2luZ3Mu
cmVtb3ZlKGJhY2tpbmcpOwogICAgIG1fYmFja2luZ3MuYWRkKGJhY2tpbmcpOwogfQogCitDQ1By
aW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyogQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjph
Y3F1aXJlUmVjeWNsZWRCYWNraW5nVGV4dHVyZShDQ1ByaW9yaXRpemVkVGV4dHVyZSogdGV4dHVy
ZSkKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNN
YWluVGhyZWFkQmxvY2tlZCgpKTsKKyAgICBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyog
YmFja2luZyA9IDA7CisgICAgZm9yIChCYWNraW5nU2V0OjppdGVyYXRvciBpdCA9IG1fYmFja2lu
Z3MuYmVnaW4oKTsgaXQgIT0gbV9iYWNraW5ncy5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAo
KCppdCktPmhhZE93bmVyQXRMYXN0UHJpb3JpdHlVcGRhdGUoKSAmJiAoKml0KS0+d2FzQWJvdmVQ
cmlvcml0eUN1dG9mZkF0TGFzdFByaW9yaXR5VXBkYXRlKCkpCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgaWYgKCgqaXQpLT5zaXplKCkgPT0gdGV4dHVyZS0+c2l6ZSgpICYmICgqaXQpLT5m
b3JtYXQoKSA9PSB0ZXh0dXJlLT5mb3JtYXQoKSkgeworICAgICAgICAgICAgYmFja2luZyA9ICgq
aXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGJh
Y2tpbmc7Cit9CisKIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZWR1Y2VNZW1v
cnkoc2l6ZV90IGxpbWl0Qnl0ZXMsIENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRl
cikKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNN
YWluVGhyZWFkQmxvY2tlZCgpKTsKQEAgLTIxNyw3ICsyNDQsNyBAQCB2b2lkIENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcjo6cmVkdWNlTWVtb3J5KHNpemVfdCBsaW1pdEJ5dGVzLCBDQ1Jlc291
cmNlUHJvdgogICAgIC8vIG9yIHVudGlsIGFsbCBiYWNraW5ncyByZW1haW5pbmcgYXJlIGFib3Zl
IHRoZSBjdXRvZmYuCiAgICAgd2hpbGUgKG1lbW9yeVVzZUJ5dGVzKCkgPiBsaW1pdEJ5dGVzICYm
IG1fYmFja2luZ3Muc2l6ZSgpID4gMCkgewogICAgICAgICBCYWNraW5nU2V0OjppdGVyYXRvciBp
dCA9IG1fYmFja2luZ3MuYmVnaW4oKTsKLSAgICAgICAgaWYgKCgqaXQpLT5vd25lcigpICYmICgq
aXQpLT5vd25lcigpLT5pc0Fib3ZlUHJpb3JpdHlDdXRvZmYoKSkKKyAgICAgICAgaWYgKCgqaXQp
LT5oYWRPd25lckF0TGFzdFByaW9yaXR5VXBkYXRlKCkgJiYgKCppdCktPndhc0Fib3ZlUHJpb3Jp
dHlDdXRvZmZBdExhc3RQcmlvcml0eVVwZGF0ZSgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGRlc3Ryb3lCYWNraW5nKCgqaXQpLCByZXNvdXJjZVByb3ZpZGVyKTsKICAgICB9CkBAIC0y
MjYsNiArMjUzLDEwIEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZWR1Y2VN
ZW1vcnkoc2l6ZV90IGxpbWl0Qnl0ZXMsIENDUmVzb3VyY2VQcm92CiB2b2lkIENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcjo6cmVkdWNlTWVtb3J5KENDUmVzb3VyY2VQcm92aWRlciogcmVzb3Vy
Y2VQcm92aWRlcikKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkgJiYgQ0NQ
cm94eTo6aXNNYWluVGhyZWFkQmxvY2tlZCgpKTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgYmFj
a2luZ3MgYXJlIHNvcnRlZCBieSBwcmlvcml0eSBiZWZvcmUgdHJhdmVyc2luZyB0aGVtLgorICAg
IGFzc2VydEludmFyaWFudHMoKTsKKwogICAgIHJlZHVjZU1lbW9yeShtX21lbW9yeUF2YWlsYWJs
ZUJ5dGVzLCByZXNvdXJjZVByb3ZpZGVyKTsKICAgICBBU1NFUlQobWVtb3J5VXNlQnl0ZXMoKSA8
PSBtYXhNZW1vcnlMaW1pdEJ5dGVzKCkpOwogCkBAIC0zMDgsMTAgKzMzOSw4IEBAIHZvaWQgQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZXR1cm5CYWNraW5nVGV4dHVyZShDQ1ByaW9yaXRp
emVkVGV4dHVyZSogdGV4CiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpIHx8
IChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSAmJiBDQ1Byb3h5Ojppc01haW5UaHJlYWRCbG9ja2Vk
KCkpKTsKICAgICBpZiAodGV4dHVyZS0+YmFja2luZygpKSB7Ci0gICAgICAgIC8vIE1vdmUgdGhl
IGJhY2tpbmcgdGV4dHVyZSB0byB0aGUgZnJvbnQgZm9yIGV2aWN0aW9uL3JlY3ljbGluZyBhbmQg
dW5saW5rIGl0LgotICAgICAgICBtX2JhY2tpbmdzLnJlbW92ZSh0ZXh0dXJlLT5iYWNraW5nKCkp
OwotICAgICAgICBtX2JhY2tpbmdzLmluc2VydEJlZm9yZShtX2JhY2tpbmdzLmJlZ2luKCksIHRl
eHR1cmUtPmJhY2tpbmcoKSk7CiAgICAgICAgIHRleHR1cmUtPnVubGluaygpOworICAgICAgICBt
X2hhc1VubGlua2VkQmFja2luZ3NTaW5jZUxhc3RQdXNoID0gdHJ1ZTsKICAgICB9CiB9CiAKQEAg
LTMyOSw2ICszNTgsNyBAQCBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyogQ0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGVCYWNraW5nKEludFNpegogCiB2b2lkIENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcjo6ZGVzdHJveUJhY2tpbmcoQ0NQcmlvcml0aXplZFRleHR1cmU6
OkJhY2tpbmcqIGJhY2tpbmcsIENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikK
IHsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWlu
VGhyZWFkQmxvY2tlZCgpKTsKICAgICBBU1NFUlQoYmFja2luZyk7CiAgICAgQVNTRVJUKCFiYWNr
aW5nLT5vd25lcigpIHx8ICFiYWNraW5nLT5vd25lcigpLT5pc0Fib3ZlUHJpb3JpdHlDdXRvZmYo
KSk7CiAgICAgQVNTRVJUKCFiYWNraW5nLT5vd25lcigpIHx8ICFiYWNraW5nLT5vd25lcigpLT5p
c1NlbGZNYW5hZ2VkKCkpOwpAQCAtMzQ0LDExICszNzQsMTAgQEAgdm9pZCBDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI6OmRlc3Ryb3lCYWNraW5nKENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNr
aW5nKgogICAgIGRlbGV0ZSBiYWNraW5nOwogfQogCi0KICNpZiAhQVNTRVJUX0RJU0FCTEVECiB2
b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6YXNzZXJ0SW52YXJpYW50cygpCiB7Ci0g
ICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoQ0NQcm94eTo6
aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWluVGhyZWFkQmxvY2tlZCgpKTsKIAogICAg
IC8vIElmIHdlIGhpdCBhbnkgb2YgdGhlc2UgYXNzZXJ0cywgdGhlcmUgaXMgYSBidWcgaW4gdGhp
cyBjbGFzcy4gVG8gc2VlCiAgICAgLy8gd2hlcmUgdGhlIGJ1ZyBpcywgY2FsbCB0aGlzIGZ1bmN0
aW9uIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZgpAQCAtMzcxLDE1ICs0MDAsMjEgQEAgdm9p
ZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmFzc2VydEludmFyaWFudHMoKQogICAgIC8v
IEF0IGFsbCB0aW1lcywgYmFja2luZ3MgdGhhdCBjYW4gYmUgZXZpY3RlZCBtdXN0IGFsd2F5cyBj
b21lIGJlZm9yZQogICAgIC8vIGJhY2tpbmdzIHRoYXQgY2FuJ3QgYmUgZXZpY3RlZCBpbiB0aGUg
YmFja2luZyB0ZXh0dXJlIGxpc3QgKG90aGVyd2lzZQogICAgIC8vIHJlZHVjZU1lbW9yeSB3aWxs
IG5vdCBmaW5kIGFsbCB0ZXh0dXJlcyBhdmFpbGFibGUgZm9yIGV2aWN0aW9uL3JlY3ljbGluZyku
Ci0gICAgYm9vbCByZWFjaGVkUHJvdGVjdGVkID0gZmFsc2U7CisgICAgYm9vbCByZWFjaGVkT3du
ZWQgPSBmYWxzZTsKKyAgICBib29sIHJlYWNoZWRBYm92ZUN1dG9mZiA9IGZhbHNlOwogICAgIGZv
ciAoQmFja2luZ1NldDo6aXRlcmF0b3IgaXQgPSBtX2JhY2tpbmdzLmJlZ2luKCk7IGl0ICE9IG1f
YmFja2luZ3MuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKCgqaXQpLT5vd25lcigpICYmICgq
aXQpLT5vd25lcigpLT5pc0Fib3ZlUHJpb3JpdHlDdXRvZmYoKSkKLSAgICAgICAgICAgIHJlYWNo
ZWRQcm90ZWN0ZWQgPSB0cnVlOwotICAgICAgICBpZiAocmVhY2hlZFByb3RlY3RlZCkKLSAgICAg
ICAgICAgIEFTU0VSVCgoKml0KS0+b3duZXIoKSAmJiAoKml0KS0+b3duZXIoKS0+aXNBYm92ZVBy
aW9yaXR5Q3V0b2ZmKCkpOworICAgICAgICBpZiAoKCppdCktPmhhZE93bmVyQXRMYXN0UHJpb3Jp
dHlVcGRhdGUoKSkKKyAgICAgICAgICAgIHJlYWNoZWRPd25lZCA9IHRydWU7CisgICAgICAgIGlm
ICgoKml0KS0+d2FzQWJvdmVQcmlvcml0eUN1dG9mZkF0TGFzdFByaW9yaXR5VXBkYXRlKCkpCisg
ICAgICAgICAgICByZWFjaGVkQWJvdmVDdXRvZmYgPSB0cnVlOworICAgICAgICBpZiAocmVhY2hl
ZE93bmVkKQorICAgICAgICAgICAgQVNTRVJUKCgqaXQpLT5oYWRPd25lckF0TGFzdFByaW9yaXR5
VXBkYXRlKCkpOworICAgICAgICBpZiAocmVhY2hlZEFib3ZlQ3V0b2ZmKSB7CisgICAgICAgICAg
ICBBU1NFUlQoKCppdCktPmhhZE93bmVyQXRMYXN0UHJpb3JpdHlVcGRhdGUoKSAmJiAoKml0KS0+
d2FzQWJvdmVQcmlvcml0eUN1dG9mZkF0TGFzdFByaW9yaXR5VXBkYXRlKCkpOworICAgICAgICAg
ICAgQVNTRVJUKHJlYWNoZWRPd25lZCk7CisgICAgICAgIH0KICAgICB9CiB9CiAjZW5kaWYKIAot
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlci5oCmluZGV4IGU5MGIyNTM1NWViZGNhMGM2NTg4Y2FhZjhjYWE2YWM4
ZjNkOGRhZTMuLmZiOGRlNzFmZmIzMTIxNDM0M2ViMmM4ZDJjYjQwOTc3ZGI1OTczMDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oCkBAIC03Miw2
ICs3Miw3IEBAIHB1YmxpYzoKICAgICBzaXplX3QgbWF4TWVtb3J5TGltaXRCeXRlcygpIGNvbnN0
IHsgcmV0dXJuIG1fbWF4TWVtb3J5TGltaXRCeXRlczsgfQogCiAgICAgdm9pZCBwcmlvcml0aXpl
VGV4dHVyZXMoKTsKKyAgICB2b2lkIHB1c2hUZXh0dXJlUHJpb3JpdGllc1RvQmFja2luZ3MoKTsK
ICAgICB2b2lkIGNsZWFyUHJpb3JpdGllcygpOwogCiAgICAgYm9vbCByZXF1ZXN0TGF0ZShDQ1By
aW9yaXRpemVkVGV4dHVyZSopOwpAQCAtMTAyLDE1ICsxMDMsMjMgQEAgcHJpdmF0ZToKICAgICAv
LyBDb21wYXJlIGJhY2tpbmdzLiBMb3dlc3QgcHJpb3JpdHkgZmlyc3QuCiAgICAgc3RhdGljIGlu
bGluZSBib29sIGNvbXBhcmVCYWNraW5ncyhDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyog
YSwgQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcqIGIpCiAgICAgewotICAgICAgICBpbnQg
cHJpb3JpdHlBID0gYS0+b3duZXIoKSA/IGEtPm93bmVyKCktPnJlcXVlc3RQcmlvcml0eSgpIDog
Q0NQcmlvcml0eUNhbGN1bGF0b3I6Omxvd2VzdFByaW9yaXR5KCk7Ci0gICAgICAgIGludCBwcmlv
cml0eUIgPSBiLT5vd25lcigpID8gYi0+b3duZXIoKS0+cmVxdWVzdFByaW9yaXR5KCkgOiBDQ1By
aW9yaXR5Q2FsY3VsYXRvcjo6bG93ZXN0UHJpb3JpdHkoKTsKLSAgICAgICAgaWYgKHByaW9yaXR5
QSA9PSBwcmlvcml0eUIpCisgICAgICAgIGludCBwcmlvcml0eUEgPSBhLT5yZXF1ZXN0UHJpb3Jp
dHlBdExhc3RQcmlvcml0eVVwZGF0ZSgpOworICAgICAgICBpbnQgcHJpb3JpdHlCID0gYi0+cmVx
dWVzdFByaW9yaXR5QXRMYXN0UHJpb3JpdHlVcGRhdGUoKTsKKyAgICAgICAgaWYgKHByaW9yaXR5
QSA9PSBwcmlvcml0eUIpIHsKKyAgICAgICAgICAgIGJvb2wgYWJvdmVDdXRvZmZBID0gYS0+d2Fz
QWJvdmVQcmlvcml0eUN1dG9mZkF0TGFzdFByaW9yaXR5VXBkYXRlKCk7CisgICAgICAgICAgICBi
b29sIGFib3ZlQ3V0b2ZmQiA9IGItPndhc0Fib3ZlUHJpb3JpdHlDdXRvZmZBdExhc3RQcmlvcml0
eVVwZGF0ZSgpOworICAgICAgICAgICAgaWYgKCFhYm92ZUN1dG9mZkEgJiYgYWJvdmVDdXRvZmZC
KQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgaWYgKGFib3ZlQ3V0
b2ZmQSAmJiAhYWJvdmVDdXRvZmZCKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIHJldHVybiBhIDwgYjsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gQ0NQcmlv
cml0eUNhbGN1bGF0b3I6OnByaW9yaXR5SXNMb3dlcihwcmlvcml0eUEsIHByaW9yaXR5Qik7CiAg
ICAgfQogCiAgICAgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKHNpemVfdCBtYXhNZW1vcnlM
aW1pdEJ5dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUsIGludCBwb29sKTsKIAorICAgIENDUHJpb3Jp
dGl6ZWRUZXh0dXJlOjpCYWNraW5nKiBhY3F1aXJlUmVjeWNsZWRCYWNraW5nVGV4dHVyZShDQ1By
aW9yaXRpemVkVGV4dHVyZSopOwogICAgIHZvaWQgcmVkdWNlTWVtb3J5KHNpemVfdCBsaW1pdCwg
Q0NSZXNvdXJjZVByb3ZpZGVyKik7CiAKICAgICBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2lu
ZyogY3JlYXRlQmFja2luZyhJbnRTaXplLCBHQzNEZW51bSBmb3JtYXQsIENDUmVzb3VyY2VQcm92
aWRlciopOwpAQCAtMTMzLDYgKzE0Miw4IEBAIHByaXZhdGU6CiAKICAgICBUZXh0dXJlVmVjdG9y
IG1fdGVtcFRleHR1cmVWZWN0b3I7CiAgICAgQmFja2luZ1ZlY3RvciBtX3RlbXBCYWNraW5nVmVj
dG9yOworCisgICAgYm9vbCBtX2hhc1VubGlua2VkQmFja2luZ3NTaW5jZUxhc3RQdXNoOwogfTsK
IAogfSAvLyBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC5jcHAKaW5kZXggOTA3NmQzNGQ0OWM3ZDYwZDFi
MjQyZGE5NGU0ODZkZTc1OGFjODYxZS4uN2U4ZWRlZTY2OWY5NWQ2OWM5ZjBlOTM3NTZhM2NlMWMx
NDAzMjVmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1ByaW9y
aXRpemVkVGV4dHVyZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NQcmlvcml0aXplZFRleHR1cmVUZXN0LmNwcApAQCAtNzEsMTcgKzcxLDMwIEBAIHB1YmxpYzoK
ICAgICBib29sIHZhbGlkYXRlVGV4dHVyZShPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmU+JiB0
ZXh0dXJlLCBib29sIHJlcXVlc3RMYXRlKQogICAgIHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECi0g
ICAgICAgIHRleHR1cmUtPnRleHR1cmVNYW5hZ2VyKCktPmFzc2VydEludmFyaWFudHMoKTsKKyAg
ICAgICAgeworICAgICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkQW5kTWFpblRocmVh
ZEJsb2NrZWQgaW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkOworICAgICAgICAgICAgdGV4
dHVyZS0+dGV4dHVyZU1hbmFnZXIoKS0+YXNzZXJ0SW52YXJpYW50cygpOworICAgICAgICB9CiAj
ZW5kaWYKICAgICAgICAgaWYgKHJlcXVlc3RMYXRlKQogICAgICAgICAgICAgdGV4dHVyZS0+cmVx
dWVzdExhdGUoKTsKICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkQW5kTWFpblRocmVh
ZEJsb2NrZWQgaW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkOworI2lmICFBU1NFUlRfRElT
QUJMRUQKKyAgICAgICAgdGV4dHVyZS0+dGV4dHVyZU1hbmFnZXIoKS0+YXNzZXJ0SW52YXJpYW50
cygpOworI2VuZGlmCiAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRleHR1cmUtPmNhbkFjcXVpcmVC
YWNraW5nVGV4dHVyZSgpOwogICAgICAgICBpZiAoc3VjY2VzcykKICAgICAgICAgICAgIHRleHR1
cmUtPmFjcXVpcmVCYWNraW5nVGV4dHVyZShyZXNvdXJjZVByb3ZpZGVyKCkpOwogICAgICAgICBy
ZXR1cm4gc3VjY2VzczsKICAgICB9CiAKKyAgICB2b2lkIHByaW9yaXRpemVUZXh0dXJlc0FuZEJh
Y2tpbmdzKENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlciogdGV4dHVyZU1hbmFnZXIpCisgICAg
eworICAgICAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgICAg
IERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRB
bmRNYWluVGhyZWFkQmxvY2tlZDsKKyAgICAgICAgdGV4dHVyZU1hbmFnZXItPnB1c2hUZXh0dXJl
UHJpb3JpdGllc1RvQmFja2luZ3MoKTsKKyAgICB9CisKICAgICBDQ1Jlc291cmNlUHJvdmlkZXIq
IHJlc291cmNlUHJvdmlkZXIoKQogICAgIHsKICAgICAgICByZXR1cm4gbV9yZXNvdXJjZVByb3Zp
ZGVyLmdldCgpOwpAQCAtMTExLDcgKzEyNCw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVy
ZVRlc3QsIHJlcXVlc3RUZXh0dXJlRXhjZWVkaW5nTWF4TGltaXQpCiAgICAgICAgIHRleHR1cmVz
W2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMTAwICsgaSk7CiAKICAgICAvLyBPbmx5IGxvd2VyIGhh
bGYgc2hvdWxkIGJlIGF2YWlsYWJsZS4KLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRl
eHR1cmVzKCk7CisgICAgcHJpb3JpdGl6ZVRleHR1cmVzQW5kQmFja2luZ3ModGV4dHVyZU1hbmFn
ZXIuZ2V0KCkpOwogICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1swXSwg
ZmFsc2UpKTsKICAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbN10sIGZh
bHNlKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1s4XSwgZmFs
c2UpKTsKQEAgLTEyMiw3ICsxMzUsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0
LCByZXF1ZXN0VGV4dHVyZUV4Y2VlZGluZ01heExpbWl0KQogICAgICAgICB0ZXh0dXJlc1tpXS0+
c2V0UmVxdWVzdFByaW9yaXR5KDEwMCAtIGkpOwogCiAgICAgLy8gT25seSB1cHBlciBoYWxmIHNo
b3VsZCBiZSBhdmFpbGFibGUuCi0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJl
cygpOworICAgIHByaW9yaXRpemVUZXh0dXJlc0FuZEJhY2tpbmdzKHRleHR1cmVNYW5hZ2VyLmdl
dCgpKTsKICAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzBdLCBmYWxz
ZSkpOwogICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbN10sIGZhbHNl
KSk7CiAgICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzhdLCBmYWxzZSkp
OwpAQCAtMTQ4LDcgKzE2MSw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIGNo
YW5nZU1lbW9yeUxpbWl0cykKIAogICAgIC8vIFNldCBtYXggbGltaXQgdG8gOCB0ZXh0dXJlcwog
ICAgIHRleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKHRleHR1cmVzTWVtb3J5
U2l6ZSg4KSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAg
IHByaW9yaXRpemVUZXh0dXJlc0FuZEJhY2tpbmdzKHRleHR1cmVNYW5hZ2VyLmdldCgpKTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCiAgICAgICAgIHZhbGlk
YXRlVGV4dHVyZSh0ZXh0dXJlc1tpXSwgZmFsc2UpOwogICAgIHsKQEAgLTE2MSw3ICsxNzQsNyBA
QCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCBjaGFuZ2VNZW1vcnlMaW1pdHMpCiAK
ICAgICAvLyBTZXQgbWF4IGxpbWl0IHRvIDUgdGV4dHVyZXMKICAgICB0ZXh0dXJlTWFuYWdlci0+
c2V0TWF4TWVtb3J5TGltaXRCeXRlcyh0ZXh0dXJlc01lbW9yeVNpemUoNSkpOwotICAgIHRleHR1
cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBwcmlvcml0aXplVGV4dHVyZXNB
bmRCYWNraW5ncyh0ZXh0dXJlTWFuYWdlci5nZXQoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtYXhUZXh0dXJlczsgKytpKQogICAgICAgICBFWFBFQ1RfRVEodmFsaWRhdGVUZXh0dXJl
KHRleHR1cmVzW2ldLCBmYWxzZSksIGkgPCA1KTsKICAgICB7CkBAIC0xNzQsNyArMTg3LDcgQEAg
VEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgY2hhbmdlTWVtb3J5TGltaXRzKQogCiAg
ICAgLy8gU2V0IG1heCBsaW1pdCB0byA0IHRleHR1cmVzCiAgICAgdGV4dHVyZU1hbmFnZXItPnNl
dE1heE1lbW9yeUxpbWl0Qnl0ZXModGV4dHVyZXNNZW1vcnlTaXplKDQpKTsKLSAgICB0ZXh0dXJl
TWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgcHJpb3JpdGl6ZVRleHR1cmVzQW5k
QmFja2luZ3ModGV4dHVyZU1hbmFnZXIuZ2V0KCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbWF4VGV4dHVyZXM7ICsraSkKICAgICAgICAgRVhQRUNUX0VRKHZhbGlkYXRlVGV4dHVyZSh0
ZXh0dXJlc1tpXSwgZmFsc2UpLCBpIDwgNCk7CiAgICAgewpAQCAtMjA0LDcgKzIxNyw3IEBAIFRF
U1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHRleHR1cmVNYW5hZ2VyUGFydGlhbFVwZGF0
ZVRleHR1cmVzKQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1UZXh0dXJlczsgKytp
KQogICAgICAgICB0ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5KDIwMCArIGkpOwotICAg
IHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBwcmlvcml0aXplVGV4
dHVyZXNBbmRCYWNraW5ncyh0ZXh0dXJlTWFuYWdlci5nZXQoKSk7CiAKICAgICAvLyBBbGxvY2F0
ZSB0ZXh0dXJlcyB3aGljaCBhcmUgY3VycmVudGx5IGhpZ2ggcHJpb3JpdHkuCiAgICAgRVhQRUNU
X1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzBdLCBmYWxzZSkpOwpAQCAtMjE5LDcgKzIz
Miw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHRleHR1cmVNYW5hZ2VyUGFy
dGlhbFVwZGF0ZVRleHR1cmVzKQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1UZXh0
dXJlczsgKytpKQogICAgICAgICBtb3JlVGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eSgx
MDAgKyBpKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAg
cHJpb3JpdGl6ZVRleHR1cmVzQW5kQmFja2luZ3ModGV4dHVyZU1hbmFnZXIuZ2V0KCkpOwogCiAg
ICAgLy8gVGV4dHVyZXMgYXJlIG5vdyBiZWxvdyBjdXRvZmYuCiAgICAgRVhQRUNUX0ZBTFNFKHZh
bGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1swXSwgZmFsc2UpKTsKQEAgLTI2Niw3ICsyNzksNyBAQCBU
RVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCB0ZXh0dXJlTWFuYWdlclByaW9yaXRpZXNB
cmVFcXVhbCkKIAogICAgIC8vIFNldCBtYXggbGltaXQgdG8gOCB0ZXh0dXJlcwogICAgIHRleHR1
cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKHRleHR1cmVzTWVtb3J5U2l6ZSg4KSk7
Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHByaW9yaXRp
emVUZXh0dXJlc0FuZEJhY2tpbmdzKHRleHR1cmVNYW5hZ2VyLmdldCgpKTsKIAogICAgIC8vIFRo
ZSB0d28gaGlnaCBwcmlvcml0eSB0ZXh0dXJlcyBzaG91bGQgYmUgYXZhaWxhYmxlLCBvdGhlcnMg
c2hvdWxkIG5vdC4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDI7ICsraSkKQEAgLTI5OCw3
ICszMTEsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCB0ZXh0dXJlTWFuYWdl
ckRlc3Ryb3llZEZpcnN0KQogICAgIEVYUEVDVF9GQUxTRSh0ZXh0dXJlLT5oYXZlQmFja2luZ1Rl
eHR1cmUoKSk7CiAKICAgICB0ZXh0dXJlLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMTAwKTsKLSAgICB0
ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgcHJpb3JpdGl6ZVRleHR1
cmVzQW5kQmFja2luZ3ModGV4dHVyZU1hbmFnZXIuZ2V0KCkpOwogCiAgICAgRVhQRUNUX1RSVUUo
dmFsaWRhdGVUZXh0dXJlKHRleHR1cmUsIGZhbHNlKSk7CiAgICAgRVhQRUNUX1RSVUUodGV4dHVy
ZS0+Y2FuQWNxdWlyZUJhY2tpbmdUZXh0dXJlKCkpOwpAQCAtMzI0LDcgKzMzNyw3IEBAIFRFU1Rf
RihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHRleHR1cmVNb3ZlZFRvTmV3TWFuYWdlcikKICAg
ICBFWFBFQ1RfRkFMU0UodGV4dHVyZS0+aGF2ZUJhY2tpbmdUZXh0dXJlKCkpOwogCiAgICAgdGV4
dHVyZS0+c2V0UmVxdWVzdFByaW9yaXR5KDEwMCk7Ci0gICAgdGV4dHVyZU1hbmFnZXJPbmUtPnBy
aW9yaXRpemVUZXh0dXJlcygpOworICAgIHByaW9yaXRpemVUZXh0dXJlc0FuZEJhY2tpbmdzKHRl
eHR1cmVNYW5hZ2VyT25lLmdldCgpKTsKIAogICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVy
ZSh0ZXh0dXJlLCBmYWxzZSkpOwogICAgIEVYUEVDVF9UUlVFKHRleHR1cmUtPmNhbkFjcXVpcmVC
YWNraW5nVGV4dHVyZSgpKTsKQEAgLTM0Myw3ICszNTYsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXpl
ZFRleHR1cmVUZXN0LCB0ZXh0dXJlTW92ZWRUb05ld01hbmFnZXIpCiAKICAgICB0ZXh0dXJlLT5z
ZXRUZXh0dXJlTWFuYWdlcih0ZXh0dXJlTWFuYWdlclR3by5nZXQoKSk7CiAKLSAgICB0ZXh0dXJl
TWFuYWdlclR3by0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgcHJpb3JpdGl6ZVRleHR1cmVz
QW5kQmFja2luZ3ModGV4dHVyZU1hbmFnZXJUd28uZ2V0KCkpOwogCiAgICAgRVhQRUNUX1RSVUUo
dmFsaWRhdGVUZXh0dXJlKHRleHR1cmUsIGZhbHNlKSk7CiAgICAgRVhQRUNUX1RSVUUodGV4dHVy
ZS0+Y2FuQWNxdWlyZUJhY2tpbmdUZXh0dXJlKCkpOwpAQCAtMzc0LDcgKzM4Nyw3IEBAIFRFU1Rf
RihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHJlbmRlclN1cmZhY2VzUmVkdWNlTWVtb3J5QXZh
aWxhYmxlT3V0c2lkZVJvb3RTCiAgICAgICAgIHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3Jp
dHkoMTAwICsgaSk7CiAKICAgICAvLyBPbmx5IGxvd2VyIGhhbGYgc2hvdWxkIGJlIGF2YWlsYWJs
ZS4KLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgcHJpb3Jp
dGl6ZVRleHR1cmVzQW5kQmFja2luZ3ModGV4dHVyZU1hbmFnZXIuZ2V0KCkpOwogICAgIEVYUEVD
VF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1swXSwgZmFsc2UpKTsKICAgICBFWFBFQ1Rf
VFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbM10sIGZhbHNlKSk7CiAgICAgRVhQRUNUX0ZB
TFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1s0XSwgZmFsc2UpKTsKQEAgLTM4NSw3ICszOTgs
NyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCByZW5kZXJTdXJmYWNlc1JlZHVj
ZU1lbW9yeUF2YWlsYWJsZU91dHNpZGVSb290UwogICAgICAgICB0ZXh0dXJlc1tpXS0+c2V0UmVx
dWVzdFByaW9yaXR5KDEwMCAtIGkpOwogCiAgICAgLy8gT25seSB1cHBlciBoYWxmIHNob3VsZCBi
ZSBhdmFpbGFibGUuCi0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwor
ICAgIHByaW9yaXRpemVUZXh0dXJlc0FuZEJhY2tpbmdzKHRleHR1cmVNYW5hZ2VyLmdldCgpKTsK
ICAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzBdLCBmYWxzZSkpOwog
ICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbM10sIGZhbHNlKSk7CiAg
ICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzRdLCBmYWxzZSkpOwpAQCAt
NDIwLDcgKzQzMyw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHJlbmRlclN1
cmZhY2VzUmVkdWNlTWVtb3J5QXZhaWxhYmxlRm9yUmVxdWVzdExhCiAgICAgICAgIHRleHR1cmVz
W2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMTAwKTsKIAogICAgIC8vIFRoZSBmaXJzdCBmb3VyIHRv
IGJlIHJlcXVlc3RlZCBsYXRlIHdpbGwgYmUgYXZhaWxhYmxlLgotICAgIHRleHR1cmVNYW5hZ2Vy
LT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBwcmlvcml0aXplVGV4dHVyZXNBbmRCYWNraW5n
cyh0ZXh0dXJlTWFuYWdlci5nZXQoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1h
eFRleHR1cmVzOyArK2kpCiAgICAgICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4
dHVyZXNbaV0sIGZhbHNlKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1heFRleHR1
cmVzOyBpICs9IDIpCkBAIC00NTgsNyArNDcxLDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0
dXJlVGVzdCwgd2hlblJlbmRlclN1cmZhY2VOb3RBdmFpbGFibGVUZXh0dXJlc0Fsc29Ob3RBdmEK
ICAgICBmb3IgKHNpemVfdCBpID0gNjsgaSA8IDg7ICsraSkKICAgICAgICAgdGV4dHVyZXNbaV0t
PnNldFJlcXVlc3RQcmlvcml0eShDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6dmlzaWJsZVByaW9yaXR5
KGZhbHNlKSk7CiAKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7Cisg
ICAgcHJpb3JpdGl6ZVRleHR1cmVzQW5kQmFja2luZ3ModGV4dHVyZU1hbmFnZXIuZ2V0KCkpOwog
CiAgICAgLy8gVW5hYmxlIHRvIHJlcXVlc3RMYXRlIHRleHR1cmVzIGluIHRoZSBjaGlsZCBzdXJm
YWNlLgogICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbNl0sIHRydWUp
KTsKQEAgLTQ3Niw0ICs0ODksNDYgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwg
d2hlblJlbmRlclN1cmZhY2VOb3RBdmFpbGFibGVUZXh0dXJlc0Fsc29Ob3RBdmEKICAgICB0ZXh0
dXJlTWFuYWdlci0+Y2xlYXJBbGxNZW1vcnkocmVzb3VyY2VQcm92aWRlcigpKTsKIH0KIAorVEVT
VF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgcmVxdWVzdExhdGVCYWNraW5nc1NvcnRpbmcp
Cit7CisgICAgY29uc3Qgc2l6ZV90IG1heFRleHR1cmVzID0gODsKKyAgICBPd25QdHI8Q0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IGNyZWF0ZU1hbmFnZXIobWF4
VGV4dHVyZXMpOworICAgIHRleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKHRl
eHR1cmVzTWVtb3J5U2l6ZShtYXhUZXh0dXJlcykpOworCisgICAgLy8gQ3JlYXRlIHRleHR1cmVz
IHRvIGZpbGwgb3VyIG1lbW9yeSBsaW1pdC4KKyAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1
cmU+IHRleHR1cmVzW21heFRleHR1cmVzXTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1h
eFRleHR1cmVzOyArK2kpCisgICAgICAgIHRleHR1cmVzW2ldID0gdGV4dHVyZU1hbmFnZXItPmNy
ZWF0ZVRleHR1cmUobV90ZXh0dXJlU2l6ZSwgbV90ZXh0dXJlRm9ybWF0KTsKKworICAgIC8vIFNl
dCBlcXVhbCBwcmlvcml0aWVzLCBhbmQgYWxsb2NhdGUgYmFja2luZ3MgZm9yIGFsbCB0ZXh0dXJl
cy4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCisgICAgICAg
IHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMTAwKTsKKyAgICBwcmlvcml0aXplVGV4
dHVyZXNBbmRCYWNraW5ncyh0ZXh0dXJlTWFuYWdlci5nZXQoKSk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCisgICAgICAgIEVYUEVDVF9UUlVFKHZhbGlk
YXRlVGV4dHVyZSh0ZXh0dXJlc1tpXSwgZmFsc2UpKTsKKworICAgIC8vIERyb3AgdGhlIG1lbW9y
eSBsaW1pdCBhbmQgcHJpb3JpdGl6ZSAobm9uZSB3aWxsIGJlIGFib3ZlIHRoZSB0aHJlc2hvbGQs
CisgICAgLy8gYnV0IHRoZXkgc3RpbGwgaGF2ZSBiYWNraW5ncyBiZWNhdXNlIHJlZHVjZU1lbW9y
eSBoYXNuJ3QgYmVlbiBjYWxsZWQpLgorICAgIHRleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlM
aW1pdEJ5dGVzKHRleHR1cmVzTWVtb3J5U2l6ZShtYXhUZXh0dXJlcyAvIDIpKTsKKyAgICBwcmlv
cml0aXplVGV4dHVyZXNBbmRCYWNraW5ncyh0ZXh0dXJlTWFuYWdlci5nZXQoKSk7CisKKyAgICAv
LyBQdXNoIGhhbGYgb2YgdGhlbSBiYWNrIG92ZXIgdGhlIGxpbWl0LgorICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7IGkgKz0gMikKKyAgICAgICAgRVhQRUNUX1RSVUUodGV4
dHVyZXNbaV0tPnJlcXVlc3RMYXRlKCkpOworCisgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIGJhY2tp
bmdzIGxpc3QgYmUgc29ydGVkIHdpdGggdGhlIGJlbG93LWxpbWl0IGJhY2tpbmdzCisgICAgLy8g
YmVmb3JlIHRoZSBhYm92ZS1saW1pdCBiYWNraW5ncy4KKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxU
aHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZCBpbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQ7
CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIHRleHR1cmVNYW5hZ2VyLT5hc3NlcnRJbnZhcmlh
bnRzKCk7CisjZW5kaWYKKworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYmFja2luZ3Mg
Zm9yIGFsbCBvZiB0aGUgdGV4dHVyZXMuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhU
ZXh0dXJlczsgKytpKQorICAgICAgICBFWFBFQ1RfVFJVRSh0ZXh0dXJlc1tpXS0+aGF2ZUJhY2tp
bmdUZXh0dXJlKCkpOworCisgICAgdGV4dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KHJlc291
cmNlUHJvdmlkZXIoKSk7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163189</attachid>
            <date>2012-09-10 13:16:12 -0700</date>
            <delta_ts>2012-09-10 16:55:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96114-20120910131548.patch</filename>
            <type>text/plain</type>
            <size>29863</size>
            <attacher name="Christopher Cameron">ccameron</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4MDc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWZjNDdkMmRjOGRmOWI4
ZDhjYjgzOGUzMDc2MDVhYjdmOTgzZTA1YS4uNmNhZjE3NjczYzU1ZmJkOWQyZjhkNDZkODY4NGNm
ODRmODBjYjhkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTA5LTA3ICBDaHJp
c3RvcGhlciBDYW1lcm9uICA8Y2NhbWVyb25AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gTWFrZSBwcmlvcml0aXplZCB0ZXh0dXJlIG1hbmFnZXIgbm90IHRvdWNoIGJhY2tpbmdz
IGFycmF5IG9uIHRoZSBtYWluIHRocmVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTYxMTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUYWtlIGEgc25hcHNob3Qgb2YgdGhlIHRleHR1cmVzJyBwcmlvcml0
aWVzIGZyb20gdGhlIG1haW4gdGhyZWFkLAorICAgICAgICBhbmQgc2F2ZSBpdCBpbiB0aGVpciBi
YWNraW5ncyBmb3IgYWNjZXNzIGJ5IHRoZSBpbXBsIHRocmVhZC4KKyAgICAgICAgVXBkYXRlIGZ1
bmN0aW9ucyB0aGF0IGFjY2VzcyB0aGUgc29ydGVkIGJhY2tpbmdzIGFycmF5IHRvIHVzZSB0aGUK
KyAgICAgICAgc25hcHNob3R0ZWQgdmFsdWVzIGluc3RlYWQgb2YgdGhlIHZhbHVlcyB0aGF0IHRo
ZSBtYWluIHRocmVhZCBtYXkKKyAgICAgICAgaGF2ZSBjb21wdXRlZCBmb3IgdGhlIG5leHQgZnJh
bWUuCisKKyAgICAgICAgTWFrZSB0aGUgbWFpbiB0aHJlYWQgbm90IHRvdWNoIHRoZSBtX2JhY2tp
bmdzIGFycmF5LiAgU3BsaXQKKyAgICAgICAgUHJpb3JpdGl6ZVRleHR1cmVzIGludG8gYSBQcmlv
cml0aXplQmFja2luZ3MgZnVuY3Rpb24uCisgICAgICAgIEluIHBsYWNlcyB3aGVyZSB0aGUgbWFp
biB0aHJlYWQgd291bGQgaGF2ZSB0b3VjaGVkIG1fYmFja2luZ3MsCisgICAgICAgIHNldCBhIGZs
YWcgc3BlY2lmeWluZyB0aGF0IG1fYmFja2luZ3MgbmVlZHMgdG8gYmUgcmUtc29ydGVkCisgICAg
ICAgIGJlZm9yZSBhbnkgZnVuY3Rpb24gdGhhdCByZXF1aXJlcyBpdCBiZSBzb3J0ZWQgYnkgcHJp
b3JpdHkgYmUKKyAgICAgICAgZXhlY3V0ZWQuCisKKyAgICAgICAgVXBkYXRlIHRoZSB0d28gZnVu
Y3Rpb25zIHRoYXQgcmVxdWlyZSBzb3J0ZWQgb3JkZXIgKGFjcXVpcmVCYWNraW5nCisgICAgICAg
IGFuZCByZWR1Y2VNZW1vcnkpIHRvIHNvcnQgdGhlIGJhY2tpbmdzIGFycmF5IChpZiBuZWVkZWQp
IGJlZm9yZQorICAgICAgICB0cmF2ZXJzaW5nIGl0LgorCisgICAgICAgIFVwZGF0ZWQgdGVzdHMg
dG8gc2V0IGNvcnJlY3QgdGhyZWFkIGR1cmluZyBhc3NlcnRzLiBBZGQgYSB0ZXN0IHRvCisgICAg
ICAgIHZlcmlmeSB0aGF0IHJlcXVlc3RMYXRlIGlzIGNvcnJlY3RseSBpbmNvcnBvcmF0ZWQgaW50
byB0aGUgYmFja2luZworICAgICAgICBzb3J0aW5nLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Q0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpwcmlvcml0aXplQmFja2luZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0
TGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmFj
cXVpcmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVkdWNlTWVtb3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmV0dXJuQmFja2luZ1RleHR1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpkZXN0cm95QmFja2luZyk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmFzc2VydElu
dmFyaWFudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oOgorICAgICAgICAoQ0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyKToKKwogMjAxMi0wOS0wNCAgUm9iZXJ0IEhvZ2FuICA8cm9iZXJ0QHdlYmtpdC5vcmc+
CiAKICAgICAgICAgQ1NTIDIuMSBmYWlsdXJlOiBjb250ZW50LWNvdW50ZXItMDEwLmh0bSBmYWls
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAyYTYyMTQ1MWJkMDNlYjhiYzhiYmE3OWMw
ZjRiYjc4MTMwOTNmY2M0Li4yNzQ5MGZjMmI3YTY1YzRmNWNjZDZiOTkyMGJjZTllMTRlMzdhYTc2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTA5LTA3
ICBDaHJpc3RvcGhlciBDYW1lcm9uICA8Y2NhbWVyb25AY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFtjaHJvbWl1bV0gTWFrZSBwcmlvcml0aXplZCB0ZXh0dXJlIG1hbmFnZXIgbm90IHRvdWNoIGJh
Y2tpbmdzIGFycmF5IG9uIHRoZSBtYWluIHRocmVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTYxMTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIHRoZSBtYWluIHRocmVhZCBub3QgdG91Y2ggdGhl
IG1fYmFja2luZ3MgYXJyYXkuICBTcGxpdAorICAgICAgICBwcmlvcml0aXplVGV4dHVyZXMgaW50
byBhIHB1c2hUZXh0dXJlUHJpb3JpdGllc1RvQmFja2luZ3MgZnVuY3Rpb24uCisgICAgICAgIElu
IHBsYWNlcyB3aGVyZSB0aGUgbWFpbiB0aHJlYWQgd291bGQgaGF2ZSB0b3VjaGVkIG1fYmFja2lu
Z3MsCisgICAgICAgIHNldCBhIGZsYWcgc3BlY2lmeWluZyB0aGF0IG1fYmFja2luZ3MgbmVlZHMg
dG8gYmUgcmUtc29ydGVkCisgICAgICAgIGJlZm9yZSBhbnkgZnVuY3Rpb24gdGhhdCByZXF1aXJl
cyBpdCBiZSBzb3J0ZWQgYnkgcHJpb3JpdHkgYmUKKyAgICAgICAgZXhlY3V0ZWQuCisKKyAgICAg
ICAgVXBkYXRlIHRoZSB0d28gZnVuY3Rpb25zIHRoYXQgcmVxdWlyZSBzb3J0ZWQgb3JkZXIgKGFj
cXVpcmVCYWNraW5nCisgICAgICAgIGFuZCByZWR1Y2VNZW1vcnkpIHRvIHNvcnQgdGhlIGJhY2tp
bmdzIGFycmF5IChpZiBuZWVkZWQpIGJlZm9yZQorICAgICAgICB0cmF2ZXJzaW5nIGl0LgorCisg
ICAgICAgIFVwZGF0ZWQgdGVzdHMgdG8gc2V0IGNvcnJlY3QgdGhyZWFkIGR1cmluZyBhc3NlcnRz
LiBBZGQgYSB0ZXN0IHRvCisgICAgICAgIHZlcmlmeSB0aGF0IHJlcXVlc3RMYXRlIGlzIGNvcnJl
Y3RseSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgYmFja2luZworICAgICAgICBzb3J0aW5nLgorCisg
ICAgICAgICogdGVzdHMvQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LmNwcDoKKyAgICAgICAgKFdU
Rjo6Q0NQcmlvcml0aXplZFRleHR1cmVUZXN0Ojp2YWxpZGF0ZVRleHR1cmUpOgorCiAyMDEyLTA5
LTEwICBSaWNrIEJ5ZXJzICA8cmJ5ZXJzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21p
dW1dIERvbid0IHVzZSBXZWJHZXN0dXJlRXZlbnQuYm91bmRpbmdCb3ggZm9yIHRvdWNoIGFkanVz
dG1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDE0NDcyYzcwNzgwZTM1
Yjk2NTliZTIyMzg4NTc1MDQ1ZmIxZDIxZTcuLmNjYWMzMjQwOTRkNGQ5ZTRhZDNmZjZkMWM5ZTNm
OTRjN2NiOGNkYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMjIxLDYg
KzIyMSw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpiZWdpbkNvbW1pdE9uSW1wbFRocmVhZChD
Q0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBs
VGhyZWFkKCkpOwogICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NMYXllclRyZWVIb3N0Ojpjb21t
aXRUbyIpOwogCisgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5wdXNoVGV4dHVyZVByaW9y
aXRpZXNUb0JhY2tpbmdzKCk7CiAgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5yZWR1Y2VN
ZW1vcnkoaG9zdEltcGwtPnJlc291cmNlUHJvdmlkZXIoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRU
ZXh0dXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmNwcAppbmRleCBkOWY2OGFmMGFlMGI5OTI4MTMzYTIzMmQ3
NDE2OTI0NzYxMjA2ZGRiLi5kOThhYmE2MTVhZDE4NjcyYjEwNmY5OTU2NzA0YWFhMDRkNzkwNWI1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmUuY3BwCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpbmNsdWRlICJDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNs
dWRlICJDQ1ByaW9yaXR5Q2FsY3VsYXRvci5oIgorI2luY2x1ZGUgIkNDUHJveHkuaCIKICNpbmNs
dWRlIDxhbGdvcml0aG0+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC0xMzksNCArMTQwLDMy
IEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmU6OnNldFRvU2VsZk1hbmFnZWRNZW1vcnlQbGFj
ZWhvbGRlcihzaXplX3QgYnl0ZXMpCiAgICAgbV9ieXRlcyA9IGJ5dGVzOwogfQogCitDQ1ByaW9y
aXRpemVkVGV4dHVyZTo6QmFja2luZzo6QmFja2luZyh1bnNpZ25lZCBpZCwgSW50U2l6ZSBzaXpl
LCBHQzNEZW51bSBmb3JtYXQpCisgICAgOiBDQ1RleHR1cmUoaWQsIHNpemUsIGZvcm1hdCkKKyAg
ICAsIG1fb3duZXIoMCkKKyAgICAsIG1fcHJpb3JpdHlBdExhc3RQcmlvcml0eVVwZGF0ZShDQ1By
aW9yaXR5Q2FsY3VsYXRvcjo6bG93ZXN0UHJpb3JpdHkoKSkKKyAgICAsIG1fb3duZXJFeGlzdGVk
QXRMYXN0UHJpb3JpdHlVcGRhdGUoZmFsc2UpCisgICAgLCBtX3dhc0Fib3ZlUHJpb3JpdHlDdXRv
ZmZBdExhc3RQcmlvcml0eVVwZGF0ZShmYWxzZSkKK3sKK30KKworQ0NQcmlvcml0aXplZFRleHR1
cmU6OkJhY2tpbmc6On5CYWNraW5nKCkKK3sKKyAgICBBU1NFUlQoIW1fb3duZXIpOworfQorCit2
b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nOjp1cGRhdGVQcmlvcml0eSgpCit7Cisg
ICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpICYmIENDUHJveHk6OmlzTWFpblRocmVh
ZEJsb2NrZWQoKSk7CisgICAgaWYgKG1fb3duZXIpIHsKKyAgICAgICAgbV9vd25lckV4aXN0ZWRB
dExhc3RQcmlvcml0eVVwZGF0ZSA9IHRydWU7CisgICAgICAgIG1fcHJpb3JpdHlBdExhc3RQcmlv
cml0eVVwZGF0ZSA9IG1fb3duZXItPnJlcXVlc3RQcmlvcml0eSgpOworICAgICAgICBtX3dhc0Fi
b3ZlUHJpb3JpdHlDdXRvZmZBdExhc3RQcmlvcml0eVVwZGF0ZSA9IG1fb3duZXItPmlzQWJvdmVQ
cmlvcml0eUN1dG9mZigpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fb3duZXJFeGlzdGVkQXRM
YXN0UHJpb3JpdHlVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgbV9wcmlvcml0eUF0TGFzdFByaW9y
aXR5VXBkYXRlID0gQ0NQcmlvcml0eUNhbGN1bGF0b3I6Omxvd2VzdFByaW9yaXR5KCk7CisgICAg
ICAgIG1fd2FzQWJvdmVQcmlvcml0eUN1dG9mZkF0TGFzdFByaW9yaXR5VXBkYXRlID0gZmFsc2U7
CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVy
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlv
cml0aXplZFRleHR1cmUuaAppbmRleCAzNzg5ZDdmMjY5YTNkN2U1MTk1YTg5MmRkZDM3NmRhZTYx
OGQyYjBlLi4zNGZiMTFmMGNjZjQ3YTE3ODU5NmY5ZjRhMDA5MzM1YTdhZjI0ZThlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9y
aXRpemVkVGV4dHVyZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmgKQEAgLTEwNCwxNCArMTA0LDIxIEBAIHBy
aXZhdGU6CiAgICAgY2xhc3MgQmFja2luZyA6IHB1YmxpYyBDQ1RleHR1cmUgewogICAgICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShCYWNraW5nKTsKICAgICBwdWJsaWM6Ci0gICAgICAgIEJhY2tp
bmcodW5zaWduZWQgaWQsIEludFNpemUgc2l6ZSwgR0MzRGVudW0gZm9ybWF0KQotICAgICAgICAg
ICAgOiBDQ1RleHR1cmUoaWQsIHNpemUsIGZvcm1hdCksIG1fb3duZXIoMCkgeyB9Ci0gICAgICAg
IH5CYWNraW5nKCkgeyBBU1NFUlQoIW1fb3duZXIpOyB9CisgICAgICAgIEJhY2tpbmcodW5zaWdu
ZWQgaWQsIEludFNpemUsIEdDM0RlbnVtIGZvcm1hdCk7CisgICAgICAgIH5CYWNraW5nKCk7Cisg
ICAgICAgIHZvaWQgdXBkYXRlUHJpb3JpdHkoKTsKIAogICAgICAgICBDQ1ByaW9yaXRpemVkVGV4
dHVyZSogb3duZXIoKSB7IHJldHVybiBtX293bmVyOyB9CisgICAgICAgIGJvb2wgaGFkT3duZXJB
dExhc3RQcmlvcml0eVVwZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJFeGlzdGVkQXRMYXN0
UHJpb3JpdHlVcGRhdGU7IH0KKyAgICAgICAgYm9vbCByZXF1ZXN0UHJpb3JpdHlBdExhc3RQcmlv
cml0eVVwZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpb3JpdHlBdExhc3RQcmlvcml0eVVwZGF0
ZTsgfQorICAgICAgICBib29sIHdhc0Fib3ZlUHJpb3JpdHlDdXRvZmZBdExhc3RQcmlvcml0eVVw
ZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzQWJvdmVQcmlvcml0eUN1dG9mZkF0TGFzdFByaW9y
aXR5VXBkYXRlOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgQ0NQcmlv
cml0aXplZFRleHR1cmU7CiAgICAgICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlKiBtX293bmVyOwor
ICAgICAgICBpbnQgbV9wcmlvcml0eUF0TGFzdFByaW9yaXR5VXBkYXRlOworICAgICAgICBib29s
IG1fb3duZXJFeGlzdGVkQXRMYXN0UHJpb3JpdHlVcGRhdGU7CisgICAgICAgIGJvb2wgbV93YXNB
Ym92ZVByaW9yaXR5Q3V0b2ZmQXRMYXN0UHJpb3JpdHlVcGRhdGU7CiAgICAgfTsKIAogICAgIEND
UHJpb3JpdGl6ZWRUZXh0dXJlKENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlciosIEludFNpemUs
IEdDM0RlbnVtIGZvcm1hdCk7CkBAIC0xMjgsNyArMTM1LDcgQEAgcHJpdmF0ZToKICAgICBHQzNE
ZW51bSBtX2Zvcm1hdDsKICAgICBzaXplX3QgbV9ieXRlczsKIAotICAgIHNpemVfdCBtX3ByaW9y
aXR5OworICAgIGludCBtX3ByaW9yaXR5OwogICAgIGJvb2wgbV9pc0Fib3ZlUHJpb3JpdHlDdXRv
ZmY7CiAgICAgYm9vbCBtX2lzU2VsZk1hbmFnZWQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3BwCmluZGV4IDlkM2VmYjRhMTIwMzEzNGQxZThi
ZDliZDAzNDYzZTgyNDA1MmZlYTkuLjkyNDIwNDE2ZmNiMjEyOWQzNWI2ZDQ4MzA0YTY1ZWVjNjlh
NWFhMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyLmNwcApAQCAtNDIsNiArNDIsNyBAQCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OkND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcihzaXplX3QgbWF4TWVtb3J5TGltaXRCeQogICAgICwg
bV9tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKDApCiAgICAgLCBtX21lbW9yeUF2YWlsYWJsZUJ5dGVz
KDApCiAgICAgLCBtX3Bvb2wocG9vbCkKKyAgICAsIG1faGFzVW5saW5rZWRCYWNraW5nc1NpbmNl
TGFzdFB1c2goZmFsc2UpCiB7CiB9CiAKQEAgLTYxLDE4ICs2MiwxMiBAQCB2b2lkIENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVzKCkKICAgICBUUkFDRV9FVkVO
VDAoImNjIiwgIkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVz
Iik7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKIAotI2lmICFBU1NFUlRf
RElTQUJMRUQKLSAgICBhc3NlcnRJbnZhcmlhbnRzKCk7Ci0jZW5kaWYKLQogICAgIC8vIFNvcnRp
bmcgdGV4dHVyZXMgaW4gdGhpcyBmdW5jdGlvbiBjb3VsZCBiZSByZXBsYWNlZCBieSBhIHNsaWdo
dGx5CiAgICAgLy8gbW9kaWZpZWQgTyhuKSBxdWljay1zZWxlY3QgdG8gcGFydGl0aW9uIHRleHR1
cmVzIHJhdGhlciB0aGFuCiAgICAgLy8gc29ydCB0aGVtIChpZiBwZXJmb3JtYW5jZSBvZiB0aGUg
c29ydCBiZWNvbWVzIGFuIGlzc3VlKS4KIAogICAgIFRleHR1cmVWZWN0b3ImIHNvcnRlZFRleHR1
cmVzID0gbV90ZW1wVGV4dHVyZVZlY3RvcjsKLSAgICBCYWNraW5nVmVjdG9yJiBzb3J0ZWRCYWNr
aW5ncyA9IG1fdGVtcEJhY2tpbmdWZWN0b3I7CiAgICAgc29ydGVkVGV4dHVyZXMuY2xlYXIoKTsK
LSAgICBzb3J0ZWRCYWNraW5ncy5jbGVhcigpOwogCiAgICAgLy8gQ29weSBhbGwgdGV4dHVyZXMg
aW50byBhIHZlY3RvciBhbmQgc29ydCB0aGVtLgogICAgIGZvciAoVGV4dHVyZVNldDo6aXRlcmF0
b3IgaXQgPSBtX3RleHR1cmVzLmJlZ2luKCk7IGl0ICE9IG1fdGV4dHVyZXMuZW5kKCk7ICsraXQp
CkBAIC0xMTYsMjQgKzExMSwzOSBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6
cHJpb3JpdGl6ZVRleHR1cmVzKCkKICAgICAgICAgaWYgKGlzQWJvdmVQcmlvcml0eUN1dG9mZiAm
JiAhKCppdCktPmlzU2VsZk1hbmFnZWQoKSkKICAgICAgICAgICAgIG1fbWVtb3J5QWJvdmVDdXRv
ZmZCeXRlcyArPSAoKml0KS0+Ynl0ZXMoKTsKICAgICB9CisgICAgc29ydGVkVGV4dHVyZXMuY2xl
YXIoKTsKKwogICAgIEFTU0VSVChtX21lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMgPD0gbV9tZW1vcnlB
dmFpbGFibGVCeXRlcyk7CisgICAgQVNTRVJUKG1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSA8PSBt
YXhNZW1vcnlMaW1pdEJ5dGVzKCkpOworfQogCi0gICAgLy8gUHV0IGJhY2tpbmdzIGluIGV2aWN0
aW9uL3JlY3ljbGluZyBvcmRlci4KLSAgICBmb3IgKEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0g
bV9iYWNraW5ncy5iZWdpbigpOyBpdCAhPSBtX2JhY2tpbmdzLmVuZCgpOyArK2l0KQordm9pZCBD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnB1c2hUZXh0dXJlUHJpb3JpdGllc1RvQmFja2lu
Z3MoKQoreworICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyOjpwcmlvcml0aXplQmFja2luZ3MiKTsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhy
ZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWluVGhyZWFkQmxvY2tlZCgpKTsKKworI2lmICFBU1NFUlRf
RElTQUJMRUQKKyAgICBhc3NlcnRJbnZhcmlhbnRzKCk7CisjZW5kaWYKKworICAgIC8vIFB1dCBi
YWNraW5ncyBpbiBvcmRlci4KKyAgICBCYWNraW5nVmVjdG9yJiBzb3J0ZWRCYWNraW5ncyA9IG1f
dGVtcEJhY2tpbmdWZWN0b3I7CisgICAgc29ydGVkQmFja2luZ3MuY2xlYXIoKTsKKyAgICBmb3Ig
KEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5ncy5iZWdpbigpOyBpdCAhPSBtX2Jh
Y2tpbmdzLmVuZCgpOyArK2l0KSB7CisgICAgICAgICgqaXQpLT51cGRhdGVQcmlvcml0eSgpOwog
ICAgICAgICBzb3J0ZWRCYWNraW5ncy5hcHBlbmQoKml0KTsKKyAgICB9CiAgICAgc3RkOjpzb3J0
KHNvcnRlZEJhY2tpbmdzLmJlZ2luKCksIHNvcnRlZEJhY2tpbmdzLmVuZCgpLCBjb21wYXJlQmFj
a2luZ3MpOwogCiAgICAgZm9yIChCYWNraW5nVmVjdG9yOjppdGVyYXRvciBpdCA9IHNvcnRlZEJh
Y2tpbmdzLmJlZ2luKCk7IGl0ICE9IHNvcnRlZEJhY2tpbmdzLmVuZCgpOyArK2l0KSB7CiAgICAg
ICAgIG1fYmFja2luZ3MucmVtb3ZlKCppdCk7CiAgICAgICAgIG1fYmFja2luZ3MuYWRkKCppdCk7
CiAgICAgfQotCi0gICAgc29ydGVkVGV4dHVyZXMuY2xlYXIoKTsKICAgICBzb3J0ZWRCYWNraW5n
cy5jbGVhcigpOworICAgIG1faGFzVW5saW5rZWRCYWNraW5nc1NpbmNlTGFzdFB1c2ggPSBmYWxz
ZTsKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBhc3NlcnRJbnZhcmlhbnRzKCk7Ci0gICAg
QVNTRVJUKG1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSA8PSBtYXhNZW1vcnlMaW1pdEJ5dGVzKCkp
OwogI2VuZGlmCiB9CiAKQEAgLTE2NiwxMCArMTc2LDYgQEAgYm9vbCBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OnJlcXVlc3RMYXRlKENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXJlKQog
CiAgICAgbV9tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzID0gbmV3TWVtb3J5Qnl0ZXM7CiAgICAgdGV4
dHVyZS0+c2V0QWJvdmVQcmlvcml0eUN1dG9mZih0cnVlKTsKLSAgICBpZiAodGV4dHVyZS0+YmFj
a2luZygpKSB7Ci0gICAgICAgIG1fYmFja2luZ3MucmVtb3ZlKHRleHR1cmUtPmJhY2tpbmcoKSk7
Ci0gICAgICAgIG1fYmFja2luZ3MuYWRkKHRleHR1cmUtPmJhY2tpbmcoKSk7Ci0gICAgfQogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC0xODEsMTcgKzE4NywyNCBAQCB2b2lkIENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcjo6YWNxdWlyZUJhY2tpbmdUZXh0dXJlSWZOZWVkZWQoQ0NQcmlvcml0
aXplZFRleAogICAgIGlmICh0ZXh0dXJlLT5iYWNraW5nKCkgfHwgIXRleHR1cmUtPmlzQWJvdmVQ
cmlvcml0eUN1dG9mZigpKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBNYWtlIHN1cmUgdGhl
IGJhY2tpbmdzIGFyZSBzb3J0ZWQgYnkgcHJpb3JpdHkgYmVmb3JlIHRyYXZlcnNpbmcgdGhlbS4K
KyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgYXNzZXJ0SW52YXJpYW50cygpOworI2VuZGlmCisK
ICAgICAvLyBGaW5kIGEgYmFja2luZyBiZWxvdywgYnkgZWl0aGVyIHJlY3ljbGluZyBvciBhbGxv
Y2F0aW5nLgogICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKiBiYWNraW5nID0gMDsK
IAogICAgIC8vIEZpcnN0IHRyeSB0byByZWN5Y2xlCi0gICAgZm9yIChCYWNraW5nU2V0OjppdGVy
YXRvciBpdCA9IG1fYmFja2luZ3MuYmVnaW4oKTsgaXQgIT0gbV9iYWNraW5ncy5lbmQoKTsgKytp
dCkgewotICAgICAgICBpZiAoKCppdCktPm93bmVyKCkgJiYgKCppdCktPm93bmVyKCktPmlzQWJv
dmVQcmlvcml0eUN1dG9mZigpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmICgoKml0
KS0+c2l6ZSgpID09IHRleHR1cmUtPnNpemUoKSAmJiAoKml0KS0+Zm9ybWF0KCkgPT0gdGV4dHVy
ZS0+Zm9ybWF0KCkpIHsKLSAgICAgICAgICAgIGJhY2tpbmcgPSAoKml0KTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9CisgICAgYmFja2luZyA9IGFjcXVpcmVSZWN5Y2xlZEJhY2tpbmdU
ZXh0dXJlKHRleHR1cmUpOworCisgICAgLy8gSWYgd2UgY2FuJ3QgZmluZCBhIGJhY2tpbmcgdG8g
cmVjeWNsZSBidXQgdGhlIG1haW4gdGhyZWFkIGhhcyByZXR1cm5lZCBzb21lCisgICAgLy8gYmFj
a2luZ3Mgc2luY2UgdGhlIGxhc3QgdGltZSB3ZSBkaWQgYSBwcmlvcml0aXplLCByZS1jb21taXQg
dGhlIHRleHR1cmUgcHJpb3JpdGllcywKKyAgICAvLyBhbmQgdHJ5IHRvIHJlY3ljbGUgYWdhaW4u
CisgICAgaWYgKCFiYWNraW5nICYmIG1faGFzVW5saW5rZWRCYWNraW5nc1NpbmNlTGFzdFB1c2gp
IHsKKyAgICAgICAgcHVzaFRleHR1cmVQcmlvcml0aWVzVG9CYWNraW5ncygpOworICAgICAgICBB
U1NFUlQoIW1faGFzVW5saW5rZWRCYWNraW5nc1NpbmNlTGFzdFB1c2gpOworICAgICAgICBiYWNr
aW5nID0gYWNxdWlyZVJlY3ljbGVkQmFja2luZ1RleHR1cmUodGV4dHVyZSk7CiAgICAgfQogCiAg
ICAgLy8gT3RoZXJ3aXNlIHJlZHVjZSBtZW1vcnkgYW5kIGp1c3QgYWxsb2NhdGUgYSBuZXcgYmFj
a2luZyB0ZXh1cmVzLgpAQCAtMjA0LDEwICsyMTcsMjYgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OmFjcXVpcmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6ZWRU
ZXgKICAgICBpZiAoYmFja2luZy0+b3duZXIoKSkKICAgICAgICAgYmFja2luZy0+b3duZXIoKS0+
dW5saW5rKCk7CiAgICAgdGV4dHVyZS0+bGluayhiYWNraW5nKTsKKyAgICBiYWNraW5nLT51cGRh
dGVQcmlvcml0eSgpOwogICAgIG1fYmFja2luZ3MucmVtb3ZlKGJhY2tpbmcpOwogICAgIG1fYmFj
a2luZ3MuYWRkKGJhY2tpbmcpOwogfQogCitDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyog
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjphY3F1aXJlUmVjeWNsZWRCYWNraW5nVGV4dHVy
ZShDQ1ByaW9yaXRpemVkVGV4dHVyZSogdGV4dHVyZSkKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6
aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWluVGhyZWFkQmxvY2tlZCgpKTsKKyAgICBD
Q1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyogYmFja2luZyA9IDA7CisgICAgZm9yIChCYWNr
aW5nU2V0OjppdGVyYXRvciBpdCA9IG1fYmFja2luZ3MuYmVnaW4oKTsgaXQgIT0gbV9iYWNraW5n
cy5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoKCppdCktPmhhZE93bmVyQXRMYXN0UHJpb3Jp
dHlVcGRhdGUoKSAmJiAoKml0KS0+d2FzQWJvdmVQcmlvcml0eUN1dG9mZkF0TGFzdFByaW9yaXR5
VXBkYXRlKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCgqaXQpLT5zaXplKCkg
PT0gdGV4dHVyZS0+c2l6ZSgpICYmICgqaXQpLT5mb3JtYXQoKSA9PSB0ZXh0dXJlLT5mb3JtYXQo
KSkgeworICAgICAgICAgICAgYmFja2luZyA9ICgqaXQpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGJhY2tpbmc7Cit9CisKIHZvaWQgQ0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyOjpyZWR1Y2VNZW1vcnkoc2l6ZV90IGxpbWl0Qnl0ZXMsIENDUmVz
b3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6
aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWluVGhyZWFkQmxvY2tlZCgpKTsKQEAgLTIx
Nyw3ICsyNDYsNyBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVkdWNlTWVt
b3J5KHNpemVfdCBsaW1pdEJ5dGVzLCBDQ1Jlc291cmNlUHJvdgogICAgIC8vIG9yIHVudGlsIGFs
bCBiYWNraW5ncyByZW1haW5pbmcgYXJlIGFib3ZlIHRoZSBjdXRvZmYuCiAgICAgd2hpbGUgKG1l
bW9yeVVzZUJ5dGVzKCkgPiBsaW1pdEJ5dGVzICYmIG1fYmFja2luZ3Muc2l6ZSgpID4gMCkgewog
ICAgICAgICBCYWNraW5nU2V0OjppdGVyYXRvciBpdCA9IG1fYmFja2luZ3MuYmVnaW4oKTsKLSAg
ICAgICAgaWYgKCgqaXQpLT5vd25lcigpICYmICgqaXQpLT5vd25lcigpLT5pc0Fib3ZlUHJpb3Jp
dHlDdXRvZmYoKSkKKyAgICAgICAgaWYgKCgqaXQpLT5oYWRPd25lckF0TGFzdFByaW9yaXR5VXBk
YXRlKCkgJiYgKCppdCktPndhc0Fib3ZlUHJpb3JpdHlDdXRvZmZBdExhc3RQcmlvcml0eVVwZGF0
ZSgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlc3Ryb3lCYWNraW5nKCgqaXQpLCBy
ZXNvdXJjZVByb3ZpZGVyKTsKICAgICB9CkBAIC0yMjYsNiArMjU1LDEyIEBAIHZvaWQgQ0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZWR1Y2VNZW1vcnkoc2l6ZV90IGxpbWl0Qnl0ZXMsIEND
UmVzb3VyY2VQcm92CiB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVkdWNlTWVt
b3J5KENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKIHsKICAgICBBU1NFUlQo
Q0NQcm94eTo6aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWluVGhyZWFkQmxvY2tlZCgp
KTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgYmFja2luZ3MgYXJlIHNvcnRlZCBieSBwcmlvcml0
eSBiZWZvcmUgdHJhdmVyc2luZyB0aGVtLgorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBhc3Nl
cnRJbnZhcmlhbnRzKCk7CisjZW5kaWYKKwogICAgIHJlZHVjZU1lbW9yeShtX21lbW9yeUF2YWls
YWJsZUJ5dGVzLCByZXNvdXJjZVByb3ZpZGVyKTsKICAgICBBU1NFUlQobWVtb3J5VXNlQnl0ZXMo
KSA8PSBtYXhNZW1vcnlMaW1pdEJ5dGVzKCkpOwogCkBAIC0zMDgsMTAgKzM0Myw4IEBAIHZvaWQg
Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZXR1cm5CYWNraW5nVGV4dHVyZShDQ1ByaW9y
aXRpemVkVGV4dHVyZSogdGV4CiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgp
IHx8IChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSAmJiBDQ1Byb3h5Ojppc01haW5UaHJlYWRCbG9j
a2VkKCkpKTsKICAgICBpZiAodGV4dHVyZS0+YmFja2luZygpKSB7Ci0gICAgICAgIC8vIE1vdmUg
dGhlIGJhY2tpbmcgdGV4dHVyZSB0byB0aGUgZnJvbnQgZm9yIGV2aWN0aW9uL3JlY3ljbGluZyBh
bmQgdW5saW5rIGl0LgotICAgICAgICBtX2JhY2tpbmdzLnJlbW92ZSh0ZXh0dXJlLT5iYWNraW5n
KCkpOwotICAgICAgICBtX2JhY2tpbmdzLmluc2VydEJlZm9yZShtX2JhY2tpbmdzLmJlZ2luKCks
IHRleHR1cmUtPmJhY2tpbmcoKSk7CiAgICAgICAgIHRleHR1cmUtPnVubGluaygpOworICAgICAg
ICBtX2hhc1VubGlua2VkQmFja2luZ3NTaW5jZUxhc3RQdXNoID0gdHJ1ZTsKICAgICB9CiB9CiAK
QEAgLTMyOSw2ICszNjIsNyBAQCBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyogQ0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGVCYWNraW5nKEludFNpegogCiB2b2lkIENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6ZGVzdHJveUJhY2tpbmcoQ0NQcmlvcml0aXplZFRleHR1
cmU6OkJhY2tpbmcqIGJhY2tpbmcsIENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRl
cikKIHsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNN
YWluVGhyZWFkQmxvY2tlZCgpKTsKICAgICBBU1NFUlQoYmFja2luZyk7CiAgICAgQVNTRVJUKCFi
YWNraW5nLT5vd25lcigpIHx8ICFiYWNraW5nLT5vd25lcigpLT5pc0Fib3ZlUHJpb3JpdHlDdXRv
ZmYoKSk7CiAgICAgQVNTRVJUKCFiYWNraW5nLT5vd25lcigpIHx8ICFiYWNraW5nLT5vd25lcigp
LT5pc1NlbGZNYW5hZ2VkKCkpOwpAQCAtMzQ0LDExICszNzgsMTAgQEAgdm9pZCBDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXI6OmRlc3Ryb3lCYWNraW5nKENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpC
YWNraW5nKgogICAgIGRlbGV0ZSBiYWNraW5nOwogfQogCi0KICNpZiAhQVNTRVJUX0RJU0FCTEVE
CiB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6YXNzZXJ0SW52YXJpYW50cygpCiB7
Ci0gICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoQ0NQcm94
eTo6aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWluVGhyZWFkQmxvY2tlZCgpKTsKIAog
ICAgIC8vIElmIHdlIGhpdCBhbnkgb2YgdGhlc2UgYXNzZXJ0cywgdGhlcmUgaXMgYSBidWcgaW4g
dGhpcyBjbGFzcy4gVG8gc2VlCiAgICAgLy8gd2hlcmUgdGhlIGJ1ZyBpcywgY2FsbCB0aGlzIGZ1
bmN0aW9uIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZgpAQCAtMzcxLDE1ICs0MDQsMjEgQEAg
dm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmFzc2VydEludmFyaWFudHMoKQogICAg
IC8vIEF0IGFsbCB0aW1lcywgYmFja2luZ3MgdGhhdCBjYW4gYmUgZXZpY3RlZCBtdXN0IGFsd2F5
cyBjb21lIGJlZm9yZQogICAgIC8vIGJhY2tpbmdzIHRoYXQgY2FuJ3QgYmUgZXZpY3RlZCBpbiB0
aGUgYmFja2luZyB0ZXh0dXJlIGxpc3QgKG90aGVyd2lzZQogICAgIC8vIHJlZHVjZU1lbW9yeSB3
aWxsIG5vdCBmaW5kIGFsbCB0ZXh0dXJlcyBhdmFpbGFibGUgZm9yIGV2aWN0aW9uL3JlY3ljbGlu
ZykuCi0gICAgYm9vbCByZWFjaGVkUHJvdGVjdGVkID0gZmFsc2U7CisgICAgYm9vbCByZWFjaGVk
T3duZWQgPSBmYWxzZTsKKyAgICBib29sIHJlYWNoZWRBYm92ZUN1dG9mZiA9IGZhbHNlOwogICAg
IGZvciAoQmFja2luZ1NldDo6aXRlcmF0b3IgaXQgPSBtX2JhY2tpbmdzLmJlZ2luKCk7IGl0ICE9
IG1fYmFja2luZ3MuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKCgqaXQpLT5vd25lcigpICYm
ICgqaXQpLT5vd25lcigpLT5pc0Fib3ZlUHJpb3JpdHlDdXRvZmYoKSkKLSAgICAgICAgICAgIHJl
YWNoZWRQcm90ZWN0ZWQgPSB0cnVlOwotICAgICAgICBpZiAocmVhY2hlZFByb3RlY3RlZCkKLSAg
ICAgICAgICAgIEFTU0VSVCgoKml0KS0+b3duZXIoKSAmJiAoKml0KS0+b3duZXIoKS0+aXNBYm92
ZVByaW9yaXR5Q3V0b2ZmKCkpOworICAgICAgICBpZiAoKCppdCktPmhhZE93bmVyQXRMYXN0UHJp
b3JpdHlVcGRhdGUoKSkKKyAgICAgICAgICAgIHJlYWNoZWRPd25lZCA9IHRydWU7CisgICAgICAg
IGlmICgoKml0KS0+d2FzQWJvdmVQcmlvcml0eUN1dG9mZkF0TGFzdFByaW9yaXR5VXBkYXRlKCkp
CisgICAgICAgICAgICByZWFjaGVkQWJvdmVDdXRvZmYgPSB0cnVlOworICAgICAgICBpZiAocmVh
Y2hlZE93bmVkKQorICAgICAgICAgICAgQVNTRVJUKCgqaXQpLT5oYWRPd25lckF0TGFzdFByaW9y
aXR5VXBkYXRlKCkpOworICAgICAgICBpZiAocmVhY2hlZEFib3ZlQ3V0b2ZmKSB7CisgICAgICAg
ICAgICBBU1NFUlQoKCppdCktPmhhZE93bmVyQXRMYXN0UHJpb3JpdHlVcGRhdGUoKSAmJiAoKml0
KS0+d2FzQWJvdmVQcmlvcml0eUN1dG9mZkF0TGFzdFByaW9yaXR5VXBkYXRlKCkpOworICAgICAg
ICAgICAgQVNTRVJUKHJlYWNoZWRPd25lZCk7CisgICAgICAgIH0KICAgICB9CiB9CiAjZW5kaWYK
IAotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlci5oCmluZGV4IGU5MGIyNTM1NWViZGNhMGM2NTg4Y2FhZjhjYWE2
YWM4ZjNkOGRhZTMuLmE1MDY3NGE4N2JhNDYwYzQ1YTM1NmE5MmEzNDI2M2ZlZmY0MmFhZjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oCkBAIC03
Miw2ICs3Miw3IEBAIHB1YmxpYzoKICAgICBzaXplX3QgbWF4TWVtb3J5TGltaXRCeXRlcygpIGNv
bnN0IHsgcmV0dXJuIG1fbWF4TWVtb3J5TGltaXRCeXRlczsgfQogCiAgICAgdm9pZCBwcmlvcml0
aXplVGV4dHVyZXMoKTsKKyAgICB2b2lkIHB1c2hUZXh0dXJlUHJpb3JpdGllc1RvQmFja2luZ3Mo
KTsKICAgICB2b2lkIGNsZWFyUHJpb3JpdGllcygpOwogCiAgICAgYm9vbCByZXF1ZXN0TGF0ZShD
Q1ByaW9yaXRpemVkVGV4dHVyZSopOwpAQCAtMTAyLDE1ICsxMDMsMjIgQEAgcHJpdmF0ZToKICAg
ICAvLyBDb21wYXJlIGJhY2tpbmdzLiBMb3dlc3QgcHJpb3JpdHkgZmlyc3QuCiAgICAgc3RhdGlj
IGlubGluZSBib29sIGNvbXBhcmVCYWNraW5ncyhDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2lu
ZyogYSwgQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcqIGIpCiAgICAgewotICAgICAgICBp
bnQgcHJpb3JpdHlBID0gYS0+b3duZXIoKSA/IGEtPm93bmVyKCktPnJlcXVlc3RQcmlvcml0eSgp
IDogQ0NQcmlvcml0eUNhbGN1bGF0b3I6Omxvd2VzdFByaW9yaXR5KCk7Ci0gICAgICAgIGludCBw
cmlvcml0eUIgPSBiLT5vd25lcigpID8gYi0+b3duZXIoKS0+cmVxdWVzdFByaW9yaXR5KCkgOiBD
Q1ByaW9yaXR5Q2FsY3VsYXRvcjo6bG93ZXN0UHJpb3JpdHkoKTsKLSAgICAgICAgaWYgKHByaW9y
aXR5QSA9PSBwcmlvcml0eUIpCi0gICAgICAgICAgICByZXR1cm4gYSA8IGI7Ci0gICAgICAgIHJl
dHVybiBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlJc0xvd2VyKHByaW9yaXR5QSwgcHJp
b3JpdHlCKTsKKyAgICAgICAgaW50IHByaW9yaXR5QSA9IGEtPnJlcXVlc3RQcmlvcml0eUF0TGFz
dFByaW9yaXR5VXBkYXRlKCk7CisgICAgICAgIGludCBwcmlvcml0eUIgPSBiLT5yZXF1ZXN0UHJp
b3JpdHlBdExhc3RQcmlvcml0eVVwZGF0ZSgpOworICAgICAgICBpZiAocHJpb3JpdHlBICE9IHBy
aW9yaXR5QikKKyAgICAgICAgICAgIHJldHVybiBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3Jp
dHlJc0xvd2VyKHByaW9yaXR5QSwgcHJpb3JpdHlCKTsKKyAgICAgICAgYm9vbCBhYm92ZUN1dG9m
ZkEgPSBhLT53YXNBYm92ZVByaW9yaXR5Q3V0b2ZmQXRMYXN0UHJpb3JpdHlVcGRhdGUoKTsKKyAg
ICAgICAgYm9vbCBhYm92ZUN1dG9mZkIgPSBiLT53YXNBYm92ZVByaW9yaXR5Q3V0b2ZmQXRMYXN0
UHJpb3JpdHlVcGRhdGUoKTsKKyAgICAgICAgaWYgKCFhYm92ZUN1dG9mZkEgJiYgYWJvdmVDdXRv
ZmZCKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChhYm92ZUN1dG9mZkEg
JiYgIWFib3ZlQ3V0b2ZmQikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0
dXJuIGEgPCBiOwogICAgIH0KIAogICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcihzaXpl
X3QgbWF4TWVtb3J5TGltaXRCeXRlcywgaW50IG1heFRleHR1cmVTaXplLCBpbnQgcG9vbCk7CiAK
KyAgICBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyogYWNxdWlyZVJlY3ljbGVkQmFja2lu
Z1RleHR1cmUoQ0NQcmlvcml0aXplZFRleHR1cmUqKTsKICAgICB2b2lkIHJlZHVjZU1lbW9yeShz
aXplX3QgbGltaXQsIENDUmVzb3VyY2VQcm92aWRlciopOwogCiAgICAgQ0NQcmlvcml0aXplZFRl
eHR1cmU6OkJhY2tpbmcqIGNyZWF0ZUJhY2tpbmcoSW50U2l6ZSwgR0MzRGVudW0gZm9ybWF0LCBD
Q1Jlc291cmNlUHJvdmlkZXIqKTsKQEAgLTEzMyw2ICsxNDEsOCBAQCBwcml2YXRlOgogCiAgICAg
VGV4dHVyZVZlY3RvciBtX3RlbXBUZXh0dXJlVmVjdG9yOwogICAgIEJhY2tpbmdWZWN0b3IgbV90
ZW1wQmFja2luZ1ZlY3RvcjsKKworICAgIGJvb2wgbV9oYXNVbmxpbmtlZEJhY2tpbmdzU2luY2VM
YXN0UHVzaDsKIH07CiAKIH0gLy8gV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QuY3BwCmluZGV4IDkwNzZk
MzRkNDljN2Q2MGQxYjI0MmRhOTRlNDg2ZGU3NThhYzg2MWUuLjdlOGVkZWU2NjlmOTVkNjljOWYw
ZTkzNzU2YTNjZTFjMTQwMzI1ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC5jcHAKQEAgLTcxLDE3ICs3MSwz
MCBAQCBwdWJsaWM6CiAgICAgYm9vbCB2YWxpZGF0ZVRleHR1cmUoT3duUHRyPENDUHJpb3JpdGl6
ZWRUZXh0dXJlPiYgdGV4dHVyZSwgYm9vbCByZXF1ZXN0TGF0ZSkKICAgICB7CiAjaWYgIUFTU0VS
VF9ESVNBQkxFRAotICAgICAgICB0ZXh0dXJlLT50ZXh0dXJlTWFuYWdlcigpLT5hc3NlcnRJbnZh
cmlhbnRzKCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVh
ZEFuZE1haW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZDsKKyAg
ICAgICAgICAgIHRleHR1cmUtPnRleHR1cmVNYW5hZ2VyKCktPmFzc2VydEludmFyaWFudHMoKTsK
KyAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIGlmIChyZXF1ZXN0TGF0ZSkKICAgICAgICAgICAg
IHRleHR1cmUtPnJlcXVlc3RMYXRlKCk7CiAgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVh
ZEFuZE1haW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZDsKKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIHRleHR1cmUtPnRleHR1cmVNYW5hZ2VyKCktPmFz
c2VydEludmFyaWFudHMoKTsKKyNlbmRpZgogICAgICAgICBib29sIHN1Y2Nlc3MgPSB0ZXh0dXJl
LT5jYW5BY3F1aXJlQmFja2luZ1RleHR1cmUoKTsKICAgICAgICAgaWYgKHN1Y2Nlc3MpCiAgICAg
ICAgICAgICB0ZXh0dXJlLT5hY3F1aXJlQmFja2luZ1RleHR1cmUocmVzb3VyY2VQcm92aWRlcigp
KTsKICAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7CiAgICAgfQogCisgICAgdm9pZCBwcmlvcml0aXpl
VGV4dHVyZXNBbmRCYWNraW5ncyhDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIqIHRleHR1cmVN
YW5hZ2VyKQorICAgIHsKKyAgICAgICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJl
cygpOworICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tl
ZCBpbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQ7CisgICAgICAgIHRleHR1cmVNYW5hZ2Vy
LT5wdXNoVGV4dHVyZVByaW9yaXRpZXNUb0JhY2tpbmdzKCk7CisgICAgfQorCiAgICAgQ0NSZXNv
dXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKCkKICAgICB7CiAgICAgICAgcmV0dXJuIG1f
cmVzb3VyY2VQcm92aWRlci5nZXQoKTsKQEAgLTExMSw3ICsxMjQsNyBAQCBURVNUX0YoQ0NQcmlv
cml0aXplZFRleHR1cmVUZXN0LCByZXF1ZXN0VGV4dHVyZUV4Y2VlZGluZ01heExpbWl0KQogICAg
ICAgICB0ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5KDEwMCArIGkpOwogCiAgICAgLy8g
T25seSBsb3dlciBoYWxmIHNob3VsZCBiZSBhdmFpbGFibGUuCi0gICAgdGV4dHVyZU1hbmFnZXIt
PnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHByaW9yaXRpemVUZXh0dXJlc0FuZEJhY2tpbmdz
KHRleHR1cmVNYW5hZ2VyLmdldCgpKTsKICAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUo
dGV4dHVyZXNbMF0sIGZhbHNlKSk7CiAgICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRl
eHR1cmVzWzddLCBmYWxzZSkpOwogICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4
dHVyZXNbOF0sIGZhbHNlKSk7CkBAIC0xMjIsNyArMTM1LDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6
ZWRUZXh0dXJlVGVzdCwgcmVxdWVzdFRleHR1cmVFeGNlZWRpbmdNYXhMaW1pdCkKICAgICAgICAg
dGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eSgxMDAgLSBpKTsKIAogICAgIC8vIE9ubHkg
dXBwZXIgaGFsZiBzaG91bGQgYmUgYXZhaWxhYmxlLgotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlv
cml0aXplVGV4dHVyZXMoKTsKKyAgICBwcmlvcml0aXplVGV4dHVyZXNBbmRCYWNraW5ncyh0ZXh0
dXJlTWFuYWdlci5nZXQoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0
dXJlc1swXSwgZmFsc2UpKTsKICAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1
cmVzWzddLCBmYWxzZSkpOwogICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJl
c1s4XSwgZmFsc2UpKTsKQEAgLTE0OCw3ICsxNjEsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRl
eHR1cmVUZXN0LCBjaGFuZ2VNZW1vcnlMaW1pdHMpCiAKICAgICAvLyBTZXQgbWF4IGxpbWl0IHRv
IDggdGV4dHVyZXMKICAgICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcyh0
ZXh0dXJlc01lbW9yeVNpemUoOCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoKTsKKyAgICBwcmlvcml0aXplVGV4dHVyZXNBbmRCYWNraW5ncyh0ZXh0dXJlTWFuYWdl
ci5nZXQoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQog
ICAgICAgICB2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbaV0sIGZhbHNlKTsKICAgICB7CkBAIC0x
NjEsNyArMTc0LDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgY2hhbmdlTWVt
b3J5TGltaXRzKQogCiAgICAgLy8gU2V0IG1heCBsaW1pdCB0byA1IHRleHR1cmVzCiAgICAgdGV4
dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXModGV4dHVyZXNNZW1vcnlTaXplKDUp
KTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgcHJpb3Jp
dGl6ZVRleHR1cmVzQW5kQmFja2luZ3ModGV4dHVyZU1hbmFnZXIuZ2V0KCkpOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKICAgICAgICAgRVhQRUNUX0VRKHZh
bGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1tpXSwgZmFsc2UpLCBpIDwgNSk7CiAgICAgewpAQCAtMTc0
LDcgKzE4Nyw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIGNoYW5nZU1lbW9y
eUxpbWl0cykKIAogICAgIC8vIFNldCBtYXggbGltaXQgdG8gNCB0ZXh0dXJlcwogICAgIHRleHR1
cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKHRleHR1cmVzTWVtb3J5U2l6ZSg0KSk7
Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHByaW9yaXRp
emVUZXh0dXJlc0FuZEJhY2tpbmdzKHRleHR1cmVNYW5hZ2VyLmdldCgpKTsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCiAgICAgICAgIEVYUEVDVF9FUSh2YWxp
ZGF0ZVRleHR1cmUodGV4dHVyZXNbaV0sIGZhbHNlKSwgaSA8IDQpOwogICAgIHsKQEAgLTIwNCw3
ICsyMTcsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCB0ZXh0dXJlTWFuYWdl
clBhcnRpYWxVcGRhdGVUZXh0dXJlcykKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVt
VGV4dHVyZXM7ICsraSkKICAgICAgICAgdGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eSgy
MDAgKyBpKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAg
cHJpb3JpdGl6ZVRleHR1cmVzQW5kQmFja2luZ3ModGV4dHVyZU1hbmFnZXIuZ2V0KCkpOwogCiAg
ICAgLy8gQWxsb2NhdGUgdGV4dHVyZXMgd2hpY2ggYXJlIGN1cnJlbnRseSBoaWdoIHByaW9yaXR5
LgogICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1swXSwgZmFsc2UpKTsK
QEAgLTIxOSw3ICsyMzIsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCB0ZXh0
dXJlTWFuYWdlclBhcnRpYWxVcGRhdGVUZXh0dXJlcykKIAogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtVGV4dHVyZXM7ICsraSkKICAgICAgICAgbW9yZVRleHR1cmVzW2ldLT5zZXRSZXF1
ZXN0UHJpb3JpdHkoMTAwICsgaSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0
dXJlcygpOworICAgIHByaW9yaXRpemVUZXh0dXJlc0FuZEJhY2tpbmdzKHRleHR1cmVNYW5hZ2Vy
LmdldCgpKTsKIAogICAgIC8vIFRleHR1cmVzIGFyZSBub3cgYmVsb3cgY3V0b2ZmLgogICAgIEVY
UEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbMF0sIGZhbHNlKSk7CkBAIC0yNjYs
NyArMjc5LDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgdGV4dHVyZU1hbmFn
ZXJQcmlvcml0aWVzQXJlRXF1YWwpCiAKICAgICAvLyBTZXQgbWF4IGxpbWl0IHRvIDggdGV4dHVy
ZXMKICAgICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcyh0ZXh0dXJlc01l
bW9yeVNpemUoOCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsK
KyAgICBwcmlvcml0aXplVGV4dHVyZXNBbmRCYWNraW5ncyh0ZXh0dXJlTWFuYWdlci5nZXQoKSk7
CiAKICAgICAvLyBUaGUgdHdvIGhpZ2ggcHJpb3JpdHkgdGV4dHVyZXMgc2hvdWxkIGJlIGF2YWls
YWJsZSwgb3RoZXJzIHNob3VsZCBub3QuCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAyOyAr
K2kpCkBAIC0yOTgsNyArMzExLDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwg
dGV4dHVyZU1hbmFnZXJEZXN0cm95ZWRGaXJzdCkKICAgICBFWFBFQ1RfRkFMU0UodGV4dHVyZS0+
aGF2ZUJhY2tpbmdUZXh0dXJlKCkpOwogCiAgICAgdGV4dHVyZS0+c2V0UmVxdWVzdFByaW9yaXR5
KDEwMCk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHBy
aW9yaXRpemVUZXh0dXJlc0FuZEJhY2tpbmdzKHRleHR1cmVNYW5hZ2VyLmdldCgpKTsKIAogICAg
IEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlLCBmYWxzZSkpOwogICAgIEVYUEVD
VF9UUlVFKHRleHR1cmUtPmNhbkFjcXVpcmVCYWNraW5nVGV4dHVyZSgpKTsKQEAgLTMyNCw3ICsz
MzcsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCB0ZXh0dXJlTW92ZWRUb05l
d01hbmFnZXIpCiAgICAgRVhQRUNUX0ZBTFNFKHRleHR1cmUtPmhhdmVCYWNraW5nVGV4dHVyZSgp
KTsKIAogICAgIHRleHR1cmUtPnNldFJlcXVlc3RQcmlvcml0eSgxMDApOwotICAgIHRleHR1cmVN
YW5hZ2VyT25lLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBwcmlvcml0aXplVGV4dHVyZXNB
bmRCYWNraW5ncyh0ZXh0dXJlTWFuYWdlck9uZS5nZXQoKSk7CiAKICAgICBFWFBFQ1RfVFJVRSh2
YWxpZGF0ZVRleHR1cmUodGV4dHVyZSwgZmFsc2UpKTsKICAgICBFWFBFQ1RfVFJVRSh0ZXh0dXJl
LT5jYW5BY3F1aXJlQmFja2luZ1RleHR1cmUoKSk7CkBAIC0zNDMsNyArMzU2LDcgQEAgVEVTVF9G
KENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgdGV4dHVyZU1vdmVkVG9OZXdNYW5hZ2VyKQogCiAg
ICAgdGV4dHVyZS0+c2V0VGV4dHVyZU1hbmFnZXIodGV4dHVyZU1hbmFnZXJUd28uZ2V0KCkpOwog
Ci0gICAgdGV4dHVyZU1hbmFnZXJUd28tPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHByaW9y
aXRpemVUZXh0dXJlc0FuZEJhY2tpbmdzKHRleHR1cmVNYW5hZ2VyVHdvLmdldCgpKTsKIAogICAg
IEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlLCBmYWxzZSkpOwogICAgIEVYUEVD
VF9UUlVFKHRleHR1cmUtPmNhbkFjcXVpcmVCYWNraW5nVGV4dHVyZSgpKTsKQEAgLTM3NCw3ICsz
ODcsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCByZW5kZXJTdXJmYWNlc1Jl
ZHVjZU1lbW9yeUF2YWlsYWJsZU91dHNpZGVSb290UwogICAgICAgICB0ZXh0dXJlc1tpXS0+c2V0
UmVxdWVzdFByaW9yaXR5KDEwMCArIGkpOwogCiAgICAgLy8gT25seSBsb3dlciBoYWxmIHNob3Vs
ZCBiZSBhdmFpbGFibGUuCi0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygp
OworICAgIHByaW9yaXRpemVUZXh0dXJlc0FuZEJhY2tpbmdzKHRleHR1cmVNYW5hZ2VyLmdldCgp
KTsKICAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbMF0sIGZhbHNlKSk7
CiAgICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzNdLCBmYWxzZSkpOwog
ICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbNF0sIGZhbHNlKSk7CkBA
IC0zODUsNyArMzk4LDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgcmVuZGVy
U3VyZmFjZXNSZWR1Y2VNZW1vcnlBdmFpbGFibGVPdXRzaWRlUm9vdFMKICAgICAgICAgdGV4dHVy
ZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eSgxMDAgLSBpKTsKIAogICAgIC8vIE9ubHkgdXBwZXIg
aGFsZiBzaG91bGQgYmUgYXZhaWxhYmxlLgotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXpl
VGV4dHVyZXMoKTsKKyAgICBwcmlvcml0aXplVGV4dHVyZXNBbmRCYWNraW5ncyh0ZXh0dXJlTWFu
YWdlci5nZXQoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1sw
XSwgZmFsc2UpKTsKICAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzNd
LCBmYWxzZSkpOwogICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1s0XSwg
ZmFsc2UpKTsKQEAgLTQyMCw3ICs0MzMsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVU
ZXN0LCByZW5kZXJTdXJmYWNlc1JlZHVjZU1lbW9yeUF2YWlsYWJsZUZvclJlcXVlc3RMYQogICAg
ICAgICB0ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5KDEwMCk7CiAKICAgICAvLyBUaGUg
Zmlyc3QgZm91ciB0byBiZSByZXF1ZXN0ZWQgbGF0ZSB3aWxsIGJlIGF2YWlsYWJsZS4KLSAgICB0
ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgcHJpb3JpdGl6ZVRleHR1
cmVzQW5kQmFja2luZ3ModGV4dHVyZU1hbmFnZXIuZ2V0KCkpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQogICAgICAgICBFWFBFQ1RfRkFMU0UodmFsaWRh
dGVUZXh0dXJlKHRleHR1cmVzW2ldLCBmYWxzZSkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtYXhUZXh0dXJlczsgaSArPSAyKQpAQCAtNDU4LDcgKzQ3MSw3IEBAIFRFU1RfRihDQ1By
aW9yaXRpemVkVGV4dHVyZVRlc3QsIHdoZW5SZW5kZXJTdXJmYWNlTm90QXZhaWxhYmxlVGV4dHVy
ZXNBbHNvTm90QXZhCiAgICAgZm9yIChzaXplX3QgaSA9IDY7IGkgPCA4OyArK2kpCiAgICAgICAg
IHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkoQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnZp
c2libGVQcmlvcml0eShmYWxzZSkpOwogCi0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVU
ZXh0dXJlcygpOworICAgIHByaW9yaXRpemVUZXh0dXJlc0FuZEJhY2tpbmdzKHRleHR1cmVNYW5h
Z2VyLmdldCgpKTsKIAogICAgIC8vIFVuYWJsZSB0byByZXF1ZXN0TGF0ZSB0ZXh0dXJlcyBpbiB0
aGUgY2hpbGQgc3VyZmFjZS4KICAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1
cmVzWzZdLCB0cnVlKSk7CkBAIC00NzYsNCArNDg5LDQ2IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVk
VGV4dHVyZVRlc3QsIHdoZW5SZW5kZXJTdXJmYWNlTm90QXZhaWxhYmxlVGV4dHVyZXNBbHNvTm90
QXZhCiAgICAgdGV4dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KHJlc291cmNlUHJvdmlkZXIo
KSk7CiB9CiAKK1RFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHJlcXVlc3RMYXRlQmFj
a2luZ3NTb3J0aW5nKQoreworICAgIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlcyA9IDg7CisgICAg
T3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBjcmVh
dGVNYW5hZ2VyKG1heFRleHR1cmVzKTsKKyAgICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5
TGltaXRCeXRlcyh0ZXh0dXJlc01lbW9yeVNpemUobWF4VGV4dHVyZXMpKTsKKworICAgIC8vIENy
ZWF0ZSB0ZXh0dXJlcyB0byBmaWxsIG91ciBtZW1vcnkgbGltaXQuCisgICAgT3duUHRyPENDUHJp
b3JpdGl6ZWRUZXh0dXJlPiB0ZXh0dXJlc1ttYXhUZXh0dXJlc107CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQorICAgICAgICB0ZXh0dXJlc1tpXSA9IHRleHR1
cmVNYW5hZ2VyLT5jcmVhdGVUZXh0dXJlKG1fdGV4dHVyZVNpemUsIG1fdGV4dHVyZUZvcm1hdCk7
CisKKyAgICAvLyBTZXQgZXF1YWwgcHJpb3JpdGllcywgYW5kIGFsbG9jYXRlIGJhY2tpbmdzIGZv
ciBhbGwgdGV4dHVyZXMuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsg
KytpKQorICAgICAgICB0ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5KDEwMCk7CisgICAg
cHJpb3JpdGl6ZVRleHR1cmVzQW5kQmFja2luZ3ModGV4dHVyZU1hbmFnZXIuZ2V0KCkpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQorICAgICAgICBFWFBF
Q1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbaV0sIGZhbHNlKSk7CisKKyAgICAvLyBE
cm9wIHRoZSBtZW1vcnkgbGltaXQgYW5kIHByaW9yaXRpemUgKG5vbmUgd2lsbCBiZSBhYm92ZSB0
aGUgdGhyZXNob2xkLAorICAgIC8vIGJ1dCB0aGV5IHN0aWxsIGhhdmUgYmFja2luZ3MgYmVjYXVz
ZSByZWR1Y2VNZW1vcnkgaGFzbid0IGJlZW4gY2FsbGVkKS4KKyAgICB0ZXh0dXJlTWFuYWdlci0+
c2V0TWF4TWVtb3J5TGltaXRCeXRlcyh0ZXh0dXJlc01lbW9yeVNpemUobWF4VGV4dHVyZXMgLyAy
KSk7CisgICAgcHJpb3JpdGl6ZVRleHR1cmVzQW5kQmFja2luZ3ModGV4dHVyZU1hbmFnZXIuZ2V0
KCkpOworCisgICAgLy8gUHVzaCBoYWxmIG9mIHRoZW0gYmFjayBvdmVyIHRoZSBsaW1pdC4KKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyBpICs9IDIpCisgICAgICAgIEVY
UEVDVF9UUlVFKHRleHR1cmVzW2ldLT5yZXF1ZXN0TGF0ZSgpKTsKKworICAgIC8vIEFzc2VydCB0
aGF0IHRoZSBiYWNraW5ncyBsaXN0IGJlIHNvcnRlZCB3aXRoIHRoZSBiZWxvdy1saW1pdCBiYWNr
aW5ncworICAgIC8vIGJlZm9yZSB0aGUgYWJvdmUtbGltaXQgYmFja2luZ3MuCisgICAgRGVidWdT
Y29wZWRTZXRJbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQgaW1wbFRocmVhZEFuZE1haW5U
aHJlYWRCbG9ja2VkOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICB0ZXh0dXJlTWFuYWdlci0+
YXNzZXJ0SW52YXJpYW50cygpOworI2VuZGlmCisKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBo
YXZlIGJhY2tpbmdzIGZvciBhbGwgb2YgdGhlIHRleHR1cmVzLgorICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUodGV4dHVyZXNb
aV0tPmhhdmVCYWNraW5nVGV4dHVyZSgpKTsKKworICAgIHRleHR1cmVNYW5hZ2VyLT5jbGVhckFs
bE1lbW9yeShyZXNvdXJjZVByb3ZpZGVyKCkpOworfQorCisKIH0gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163246</attachid>
            <date>2012-09-10 16:55:25 -0700</date>
            <delta_ts>2012-09-10 21:18:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96114-20120910165500.patch</filename>
            <type>text/plain</type>
            <size>28325</size>
            <attacher name="Christopher Cameron">ccameron</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4MDc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWZjNDdkMmRjOGRmOWI4
ZDhjYjgzOGUzMDc2MDVhYjdmOTgzZTA1YS4uNDJlYWQ2ZmYyMWI1NmJkNmFiZWM0ODI0NDdkZTEw
MjhkNjQyOTJjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTA5LTA3ICBDaHJp
c3RvcGhlciBDYW1lcm9uICA8Y2NhbWVyb25AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gTWFrZSBwcmlvcml0aXplZCB0ZXh0dXJlIG1hbmFnZXIgbm90IHRvdWNoIGJhY2tpbmdz
IGFycmF5IG9uIHRoZSBtYWluIHRocmVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTYxMTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUYWtlIGEgc25hcHNob3Qgb2YgdGhlIHRleHR1cmVzJyBwcmlvcml0
aWVzIGZyb20gdGhlIG1haW4gdGhyZWFkLAorICAgICAgICBhbmQgc2F2ZSBpdCBpbiB0aGVpciBi
YWNraW5ncyBmb3IgYWNjZXNzIGJ5IHRoZSBpbXBsIHRocmVhZC4KKyAgICAgICAgVXBkYXRlIGZ1
bmN0aW9ucyB0aGF0IGFjY2VzcyB0aGUgc29ydGVkIGJhY2tpbmdzIGFycmF5IHRvIHVzZSB0aGUK
KyAgICAgICAgc25hcHNob3R0ZWQgdmFsdWVzIGluc3RlYWQgb2YgdGhlIHZhbHVlcyB0aGF0IHRo
ZSBtYWluIHRocmVhZCBtYXkKKyAgICAgICAgaGF2ZSBjb21wdXRlZCBmb3IgdGhlIG5leHQgZnJh
bWUuCisKKyAgICAgICAgTWFrZSB0aGUgbWFpbiB0aHJlYWQgbm90IHRvdWNoIHRoZSBtX2JhY2tp
bmdzIGFycmF5LiAgU3BsaXQKKyAgICAgICAgcHJpb3JpdGl6ZVRleHR1cmVzIGludG8gYSB1cGRh
dGVCYWNraW5nc1ByaW9yaXRpZXMgZnVuY3Rpb24uCisgICAgICAgIEluIHBsYWNlcyB3aGVyZSB0
aGUgbWFpbiB0aHJlYWQgd291bGQgaGF2ZSB0b3VjaGVkIG1fYmFja2luZ3MsCisgICAgICAgIHNl
dCBhIGZsYWcgc3BlY2lmeWluZyB0aGF0IG1fYmFja2luZ3MgbmVlZHMgdG8gYmUgcmUtc29ydGVk
CisgICAgICAgIGJlZm9yZSBhbnkgZnVuY3Rpb24gdGhhdCByZXF1aXJlcyBpdCBiZSBzb3J0ZWQg
YnkgcHJpb3JpdHkgYmUKKyAgICAgICAgZXhlY3V0ZWQuCisKKyAgICAgICAgVXBkYXRlIHRoZSB0
d28gZnVuY3Rpb25zIHRoYXQgcmVxdWlyZSBzb3J0ZWQgb3JkZXIgKGFjcXVpcmVCYWNraW5nCisg
ICAgICAgIGFuZCByZWR1Y2VNZW1vcnkpIHRvIHNvcnQgdGhlIGJhY2tpbmdzIGFycmF5IChpZiBu
ZWVkZWQpIGJlZm9yZQorICAgICAgICB0cmF2ZXJzaW5nIGl0LgorCisgICAgICAgIFVwZGF0ZWQg
dGVzdHMgdG8gc2V0IGNvcnJlY3QgdGhyZWFkIGR1cmluZyBhc3NlcnRzLiBBZGQgYSB0ZXN0IHRv
CisgICAgICAgIHZlcmlmeSB0aGF0IHJlcXVlc3RMYXRlIGlzIGNvcnJlY3RseSBpbmNvcnBvcmF0
ZWQgaW50byB0aGUgYmFja2luZworICAgICAgICBzb3J0aW5nLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Q0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpwcmlvcml0aXplQmFj
a2luZ3MpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpy
ZXF1ZXN0TGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI6OmFjcXVpcmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVkdWNlTWVtb3J5KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmV0dXJuQmFja2luZ1RleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpkZXN0cm95QmFj
a2luZyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmFz
c2VydEludmFyaWFudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oOgorICAgICAgICAoQ0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyKToKKwogMjAxMi0wOS0wNCAgUm9iZXJ0IEhvZ2FuICA8cm9iZXJ0QHdlYmtp
dC5vcmc+CiAKICAgICAgICAgQ1NTIDIuMSBmYWlsdXJlOiBjb250ZW50LWNvdW50ZXItMDEwLmh0
bSBmYWlscwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAyYTYyMTQ1MWJkMDNlYjhiYzhi
YmE3OWMwZjRiYjc4MTMwOTNmY2M0Li40OWE1ZDFjM2ZiMmJkYWE4MzdjZWFmNGYxYWEyMDkwNmFi
OGZlOTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEy
LTA5LTA3ICBDaHJpc3RvcGhlciBDYW1lcm9uICA8Y2NhbWVyb25AY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFtjaHJvbWl1bV0gTWFrZSBwcmlvcml0aXplZCB0ZXh0dXJlIG1hbmFnZXIgbm90IHRv
dWNoIGJhY2tpbmdzIGFycmF5IG9uIHRoZSBtYWluIHRocmVhZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTYxMTQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUYWtlIGEgc25hcHNob3Qgb2YgdGhlIHRleHR1
cmVzJyBwcmlvcml0aWVzIGZyb20gdGhlIG1haW4gdGhyZWFkLAorICAgICAgICBhbmQgc2F2ZSBp
dCBpbiB0aGVpciBiYWNraW5ncyBmb3IgYWNjZXNzIGJ5IHRoZSBpbXBsIHRocmVhZC4KKyAgICAg
ICAgVXBkYXRlIGZ1bmN0aW9ucyB0aGF0IGFjY2VzcyB0aGUgc29ydGVkIGJhY2tpbmdzIGFycmF5
IHRvIHVzZSB0aGUKKyAgICAgICAgc25hcHNob3R0ZWQgdmFsdWVzIGluc3RlYWQgb2YgdGhlIHZh
bHVlcyB0aGF0IHRoZSBtYWluIHRocmVhZCBtYXkKKyAgICAgICAgaGF2ZSBjb21wdXRlZCBmb3Ig
dGhlIG5leHQgZnJhbWUuCisKKyAgICAgICAgTWFrZSB0aGUgbWFpbiB0aHJlYWQgbm90IHRvdWNo
IHRoZSBtX2JhY2tpbmdzIGFycmF5LiAgU3BsaXQKKyAgICAgICAgcHJpb3JpdGl6ZVRleHR1cmVz
IGludG8gYSB1cGRhdGVCYWNraW5nc1ByaW9yaXRpZXMgZnVuY3Rpb24uCisgICAgICAgIEluIHBs
YWNlcyB3aGVyZSB0aGUgbWFpbiB0aHJlYWQgd291bGQgaGF2ZSB0b3VjaGVkIG1fYmFja2luZ3Ms
CisgICAgICAgIHNldCBhIGZsYWcgc3BlY2lmeWluZyB0aGF0IG1fYmFja2luZ3MgbmVlZHMgdG8g
YmUgcmUtc29ydGVkCisgICAgICAgIGJlZm9yZSBhbnkgZnVuY3Rpb24gdGhhdCByZXF1aXJlcyBp
dCBiZSBzb3J0ZWQgYnkgcHJpb3JpdHkgYmUKKyAgICAgICAgZXhlY3V0ZWQuCisKKyAgICAgICAg
VXBkYXRlIHRoZSB0d28gZnVuY3Rpb25zIHRoYXQgcmVxdWlyZSBzb3J0ZWQgb3JkZXIgKGFjcXVp
cmVCYWNraW5nCisgICAgICAgIGFuZCByZWR1Y2VNZW1vcnkpIHRvIHNvcnQgdGhlIGJhY2tpbmdz
IGFycmF5IChpZiBuZWVkZWQpIGJlZm9yZQorICAgICAgICB0cmF2ZXJzaW5nIGl0LgorCisgICAg
ICAgIFVwZGF0ZWQgdGVzdHMgdG8gc2V0IGNvcnJlY3QgdGhyZWFkIGR1cmluZyBhc3NlcnRzLiBB
ZGQgYSB0ZXN0IHRvCisgICAgICAgIHZlcmlmeSB0aGF0IHJlcXVlc3RMYXRlIGlzIGNvcnJlY3Rs
eSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgYmFja2luZworICAgICAgICBzb3J0aW5nLgorCisgICAg
ICAgICogdGVzdHMvQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LmNwcDoKKyAgICAgICAgKFdURjo6
Q0NQcmlvcml0aXplZFRleHR1cmVUZXN0Ojp2YWxpZGF0ZVRleHR1cmUpOgorCiAyMDEyLTA5LTEw
ICBSaWNrIEJ5ZXJzICA8cmJ5ZXJzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1d
IERvbid0IHVzZSBXZWJHZXN0dXJlRXZlbnQuYm91bmRpbmdCb3ggZm9yIHRvdWNoIGFkanVzdG1l
bnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmNwcAppbmRleCBkOWY2OGFm
MGFlMGI5OTI4MTMzYTIzMmQ3NDE2OTI0NzYxMjA2ZGRiLi5kOThhYmE2MTVhZDE4NjcyYjEwNmY5
OTU2NzA0YWFhMDRkNzkwNWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1
cmUuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXIuaCIKICNpbmNsdWRlICJDQ1ByaW9yaXR5Q2FsY3VsYXRvci5oIgorI2luY2x1ZGUg
IkNDUHJveHkuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7
CkBAIC0xMzksNCArMTQwLDMyIEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmU6OnNldFRvU2Vs
Zk1hbmFnZWRNZW1vcnlQbGFjZWhvbGRlcihzaXplX3QgYnl0ZXMpCiAgICAgbV9ieXRlcyA9IGJ5
dGVzOwogfQogCitDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZzo6QmFja2luZyh1bnNpZ25l
ZCBpZCwgSW50U2l6ZSBzaXplLCBHQzNEZW51bSBmb3JtYXQpCisgICAgOiBDQ1RleHR1cmUoaWQs
IHNpemUsIGZvcm1hdCkKKyAgICAsIG1fb3duZXIoMCkKKyAgICAsIG1fcHJpb3JpdHlBdExhc3RQ
cmlvcml0eVVwZGF0ZShDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6bG93ZXN0UHJpb3JpdHkoKSkKKyAg
ICAsIG1fb3duZXJFeGlzdGVkQXRMYXN0UHJpb3JpdHlVcGRhdGUoZmFsc2UpCisgICAgLCBtX3dh
c0Fib3ZlUHJpb3JpdHlDdXRvZmZBdExhc3RQcmlvcml0eVVwZGF0ZShmYWxzZSkKK3sKK30KKwor
Q0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmc6On5CYWNraW5nKCkKK3sKKyAgICBBU1NFUlQo
IW1fb3duZXIpOworfQorCit2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nOjp1cGRh
dGVQcmlvcml0eSgpCit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpICYmIEND
UHJveHk6OmlzTWFpblRocmVhZEJsb2NrZWQoKSk7CisgICAgaWYgKG1fb3duZXIpIHsKKyAgICAg
ICAgbV9vd25lckV4aXN0ZWRBdExhc3RQcmlvcml0eVVwZGF0ZSA9IHRydWU7CisgICAgICAgIG1f
cHJpb3JpdHlBdExhc3RQcmlvcml0eVVwZGF0ZSA9IG1fb3duZXItPnJlcXVlc3RQcmlvcml0eSgp
OworICAgICAgICBtX3dhc0Fib3ZlUHJpb3JpdHlDdXRvZmZBdExhc3RQcmlvcml0eVVwZGF0ZSA9
IG1fb3duZXItPmlzQWJvdmVQcmlvcml0eUN1dG9mZigpOworICAgIH0gZWxzZSB7CisgICAgICAg
IG1fb3duZXJFeGlzdGVkQXRMYXN0UHJpb3JpdHlVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgbV9w
cmlvcml0eUF0TGFzdFByaW9yaXR5VXBkYXRlID0gQ0NQcmlvcml0eUNhbGN1bGF0b3I6Omxvd2Vz
dFByaW9yaXR5KCk7CisgICAgICAgIG1fd2FzQWJvdmVQcmlvcml0eUN1dG9mZkF0TGFzdFByaW9y
aXR5VXBkYXRlID0gZmFsc2U7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ByaW9yaXRpemVkVGV4dHVyZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmUuaAppbmRleCAzNzg5ZDdmMjY5YTNkN2U1
MTk1YTg5MmRkZDM3NmRhZTYxOGQyYjBlLi4zNGZiMTFmMGNjZjQ3YTE3ODU5NmY5ZjRhMDA5MzM1
YTdhZjI0ZThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmgKQEAgLTEw
NCwxNCArMTA0LDIxIEBAIHByaXZhdGU6CiAgICAgY2xhc3MgQmFja2luZyA6IHB1YmxpYyBDQ1Rl
eHR1cmUgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCYWNraW5nKTsKICAgICBwdWJs
aWM6Ci0gICAgICAgIEJhY2tpbmcodW5zaWduZWQgaWQsIEludFNpemUgc2l6ZSwgR0MzRGVudW0g
Zm9ybWF0KQotICAgICAgICAgICAgOiBDQ1RleHR1cmUoaWQsIHNpemUsIGZvcm1hdCksIG1fb3du
ZXIoMCkgeyB9Ci0gICAgICAgIH5CYWNraW5nKCkgeyBBU1NFUlQoIW1fb3duZXIpOyB9CisgICAg
ICAgIEJhY2tpbmcodW5zaWduZWQgaWQsIEludFNpemUsIEdDM0RlbnVtIGZvcm1hdCk7CisgICAg
ICAgIH5CYWNraW5nKCk7CisgICAgICAgIHZvaWQgdXBkYXRlUHJpb3JpdHkoKTsKIAogICAgICAg
ICBDQ1ByaW9yaXRpemVkVGV4dHVyZSogb3duZXIoKSB7IHJldHVybiBtX293bmVyOyB9CisgICAg
ICAgIGJvb2wgaGFkT3duZXJBdExhc3RQcmlvcml0eVVwZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
b3duZXJFeGlzdGVkQXRMYXN0UHJpb3JpdHlVcGRhdGU7IH0KKyAgICAgICAgYm9vbCByZXF1ZXN0
UHJpb3JpdHlBdExhc3RQcmlvcml0eVVwZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpb3JpdHlB
dExhc3RQcmlvcml0eVVwZGF0ZTsgfQorICAgICAgICBib29sIHdhc0Fib3ZlUHJpb3JpdHlDdXRv
ZmZBdExhc3RQcmlvcml0eVVwZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzQWJvdmVQcmlvcml0
eUN1dG9mZkF0TGFzdFByaW9yaXR5VXBkYXRlOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBm
cmllbmQgY2xhc3MgQ0NQcmlvcml0aXplZFRleHR1cmU7CiAgICAgICAgIENDUHJpb3JpdGl6ZWRU
ZXh0dXJlKiBtX293bmVyOworICAgICAgICBpbnQgbV9wcmlvcml0eUF0TGFzdFByaW9yaXR5VXBk
YXRlOworICAgICAgICBib29sIG1fb3duZXJFeGlzdGVkQXRMYXN0UHJpb3JpdHlVcGRhdGU7Cisg
ICAgICAgIGJvb2wgbV93YXNBYm92ZVByaW9yaXR5Q3V0b2ZmQXRMYXN0UHJpb3JpdHlVcGRhdGU7
CiAgICAgfTsKIAogICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlKENDUHJpb3JpdGl6ZWRUZXh0dXJl
TWFuYWdlciosIEludFNpemUsIEdDM0RlbnVtIGZvcm1hdCk7CkBAIC0xMjgsNyArMTM1LDcgQEAg
cHJpdmF0ZToKICAgICBHQzNEZW51bSBtX2Zvcm1hdDsKICAgICBzaXplX3QgbV9ieXRlczsKIAot
ICAgIHNpemVfdCBtX3ByaW9yaXR5OworICAgIGludCBtX3ByaW9yaXR5OwogICAgIGJvb2wgbV9p
c0Fib3ZlUHJpb3JpdHlDdXRvZmY7CiAgICAgYm9vbCBtX2lzU2VsZk1hbmFnZWQ7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuY3BwCmluZGV4IDlk
M2VmYjRhMTIwMzEzNGQxZThiZDliZDAzNDYzZTgyNDA1MmZlYTkuLmNkMjY3ZDljYTE2MzA0MWU2
Y2EwZjk2ZWZkYTU3YmY4YmUwOWIzOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyLmNwcApAQCAtNDIsNiArNDIsNyBAQCBDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcihzaXplX3QgbWF4TWVt
b3J5TGltaXRCeQogICAgICwgbV9tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKDApCiAgICAgLCBtX21l
bW9yeUF2YWlsYWJsZUJ5dGVzKDApCiAgICAgLCBtX3Bvb2wocG9vbCkKKyAgICAsIG1fbmVlZHNV
cGRhdGVCYWNraW5nc1ByaW9yaXRpdGVzKGZhbHNlKQogewogfQogCkBAIC02MSwxOCArNjIsMTIg
QEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnByaW9yaXRpemVUZXh0dXJlcygp
CiAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnBy
aW9yaXRpemVUZXh0dXJlcyIpOwogICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7
CiAKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgYXNzZXJ0SW52YXJpYW50cygpOwotI2VuZGlm
Ci0KICAgICAvLyBTb3J0aW5nIHRleHR1cmVzIGluIHRoaXMgZnVuY3Rpb24gY291bGQgYmUgcmVw
bGFjZWQgYnkgYSBzbGlnaHRseQogICAgIC8vIG1vZGlmaWVkIE8obikgcXVpY2stc2VsZWN0IHRv
IHBhcnRpdGlvbiB0ZXh0dXJlcyByYXRoZXIgdGhhbgogICAgIC8vIHNvcnQgdGhlbSAoaWYgcGVy
Zm9ybWFuY2Ugb2YgdGhlIHNvcnQgYmVjb21lcyBhbiBpc3N1ZSkuCiAKICAgICBUZXh0dXJlVmVj
dG9yJiBzb3J0ZWRUZXh0dXJlcyA9IG1fdGVtcFRleHR1cmVWZWN0b3I7Ci0gICAgQmFja2luZ1Zl
Y3RvciYgc29ydGVkQmFja2luZ3MgPSBtX3RlbXBCYWNraW5nVmVjdG9yOwogICAgIHNvcnRlZFRl
eHR1cmVzLmNsZWFyKCk7Ci0gICAgc29ydGVkQmFja2luZ3MuY2xlYXIoKTsKIAogICAgIC8vIENv
cHkgYWxsIHRleHR1cmVzIGludG8gYSB2ZWN0b3IgYW5kIHNvcnQgdGhlbS4KICAgICBmb3IgKFRl
eHR1cmVTZXQ6Oml0ZXJhdG9yIGl0ID0gbV90ZXh0dXJlcy5iZWdpbigpOyBpdCAhPSBtX3RleHR1
cmVzLmVuZCgpOyArK2l0KQpAQCAtMTE2LDI0ICsxMTEsNDQgQEAgdm9pZCBDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI6OnByaW9yaXRpemVUZXh0dXJlcygpCiAgICAgICAgIGlmIChpc0Fib3Zl
UHJpb3JpdHlDdXRvZmYgJiYgISgqaXQpLT5pc1NlbGZNYW5hZ2VkKCkpCiAgICAgICAgICAgICBt
X21lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMgKz0gKCppdCktPmJ5dGVzKCk7CiAgICAgfQorICAgIHNv
cnRlZFRleHR1cmVzLmNsZWFyKCk7CisKKyAgICBtX25lZWRzVXBkYXRlQmFja2luZ3NQcmlvcml0
aXRlcyA9IHRydWU7CisKICAgICBBU1NFUlQobV9tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzIDw9IG1f
bWVtb3J5QXZhaWxhYmxlQnl0ZXMpOworICAgIEFTU0VSVChtZW1vcnlBYm92ZUN1dG9mZkJ5dGVz
KCkgPD0gbWF4TWVtb3J5TGltaXRCeXRlcygpKTsKK30KIAotICAgIC8vIFB1dCBiYWNraW5ncyBp
biBldmljdGlvbi9yZWN5Y2xpbmcgb3JkZXIuCi0gICAgZm9yIChCYWNraW5nU2V0OjppdGVyYXRv
ciBpdCA9IG1fYmFja2luZ3MuYmVnaW4oKTsgaXQgIT0gbV9iYWNraW5ncy5lbmQoKTsgKytpdCkK
K3ZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjp1cGRhdGVCYWNraW5nc1ByaW9yaXRp
ZXMoKQoreworICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyOjp1cGRhdGVCYWNraW5nc1ByaW9yaXRpZXMiKTsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJ
bXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWluVGhyZWFkQmxvY2tlZCgpKTsKKworICAgIGlm
ICghbV9uZWVkc1VwZGF0ZUJhY2tpbmdzUHJpb3JpdGl0ZXMpCisgICAgICAgIHJldHVybjsKKwor
I2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBhc3NlcnRJbnZhcmlhbnRzKCk7CisjZW5kaWYKKwor
ICAgIC8vIFVwZGF0ZSBiYWNraW5ncycgcHJpb3JpdGllcyBhbmQgcHV0IGJhY2tpbmdzIGluIGV2
aWN0aW9uL3JlY3ljbGluZyBvcmRlci4KKyAgICBCYWNraW5nVmVjdG9yJiBzb3J0ZWRCYWNraW5n
cyA9IG1fdGVtcEJhY2tpbmdWZWN0b3I7CisgICAgc29ydGVkQmFja2luZ3MuY2xlYXIoKTsKKyAg
ICBmb3IgKEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5ncy5iZWdpbigpOyBpdCAh
PSBtX2JhY2tpbmdzLmVuZCgpOyArK2l0KSB7CisgICAgICAgICgqaXQpLT51cGRhdGVQcmlvcml0
eSgpOwogICAgICAgICBzb3J0ZWRCYWNraW5ncy5hcHBlbmQoKml0KTsKKyAgICB9CiAgICAgc3Rk
Ojpzb3J0KHNvcnRlZEJhY2tpbmdzLmJlZ2luKCksIHNvcnRlZEJhY2tpbmdzLmVuZCgpLCBjb21w
YXJlQmFja2luZ3MpOwogCiAgICAgZm9yIChCYWNraW5nVmVjdG9yOjppdGVyYXRvciBpdCA9IHNv
cnRlZEJhY2tpbmdzLmJlZ2luKCk7IGl0ICE9IHNvcnRlZEJhY2tpbmdzLmVuZCgpOyArK2l0KSB7
CiAgICAgICAgIG1fYmFja2luZ3MucmVtb3ZlKCppdCk7CiAgICAgICAgIG1fYmFja2luZ3MuYWRk
KCppdCk7CiAgICAgfQotCi0gICAgc29ydGVkVGV4dHVyZXMuY2xlYXIoKTsKICAgICBzb3J0ZWRC
YWNraW5ncy5jbGVhcigpOworICAgIG1fbmVlZHNVcGRhdGVCYWNraW5nc1ByaW9yaXRpdGVzID0g
ZmFsc2U7CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgYXNzZXJ0SW52YXJpYW50cygpOwot
ICAgIEFTU0VSVChtZW1vcnlBYm92ZUN1dG9mZkJ5dGVzKCkgPD0gbWF4TWVtb3J5TGltaXRCeXRl
cygpKTsKICNlbmRpZgogfQogCkBAIC0xNjYsMTAgKzE4MSw3IEBAIGJvb2wgQ0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0TGF0ZShDQ1ByaW9yaXRpemVkVGV4dHVyZSogdGV4dHVy
ZSkKIAogICAgIG1fbWVtb3J5QWJvdmVDdXRvZmZCeXRlcyA9IG5ld01lbW9yeUJ5dGVzOwogICAg
IHRleHR1cmUtPnNldEFib3ZlUHJpb3JpdHlDdXRvZmYodHJ1ZSk7Ci0gICAgaWYgKHRleHR1cmUt
PmJhY2tpbmcoKSkgewotICAgICAgICBtX2JhY2tpbmdzLnJlbW92ZSh0ZXh0dXJlLT5iYWNraW5n
KCkpOwotICAgICAgICBtX2JhY2tpbmdzLmFkZCh0ZXh0dXJlLT5iYWNraW5nKCkpOwotICAgIH0K
KyAgICBtX25lZWRzVXBkYXRlQmFja2luZ3NQcmlvcml0aXRlcyA9IHRydWU7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKQEAgLTE4MSwxMiArMTkzLDE1IEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyOjphY3F1aXJlQmFja2luZ1RleHR1cmVJZk5lZWRlZChDQ1ByaW9yaXRpemVkVGV4
CiAgICAgaWYgKHRleHR1cmUtPmJhY2tpbmcoKSB8fCAhdGV4dHVyZS0+aXNBYm92ZVByaW9yaXR5
Q3V0b2ZmKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBi
YWNraW5ncyBsaXN0IGlzIHVwIHRvIGRhdGUgYW5kIHNvcnRlZCBiZWZvcmUgdHJhdmVyc2luZyBp
dC4KKyAgICB1cGRhdGVCYWNraW5nc1ByaW9yaXRpZXMoKTsKKwogICAgIC8vIEZpbmQgYSBiYWNr
aW5nIGJlbG93LCBieSBlaXRoZXIgcmVjeWNsaW5nIG9yIGFsbG9jYXRpbmcuCiAgICAgQ0NQcmlv
cml0aXplZFRleHR1cmU6OkJhY2tpbmcqIGJhY2tpbmcgPSAwOwogCiAgICAgLy8gRmlyc3QgdHJ5
IHRvIHJlY3ljbGUKICAgICBmb3IgKEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5n
cy5iZWdpbigpOyBpdCAhPSBtX2JhY2tpbmdzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmICgo
Kml0KS0+b3duZXIoKSAmJiAoKml0KS0+b3duZXIoKS0+aXNBYm92ZVByaW9yaXR5Q3V0b2ZmKCkp
CisgICAgICAgIGlmICgoKml0KS0+aGFkT3duZXJBdExhc3RQcmlvcml0eVVwZGF0ZSgpICYmICgq
aXQpLT53YXNBYm92ZVByaW9yaXR5Q3V0b2ZmQXRMYXN0UHJpb3JpdHlVcGRhdGUoKSkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBpZiAoKCppdCktPnNpemUoKSA9PSB0ZXh0dXJlLT5zaXpl
KCkgJiYgKCppdCktPmZvcm1hdCgpID09IHRleHR1cmUtPmZvcm1hdCgpKSB7CiAgICAgICAgICAg
ICBiYWNraW5nID0gKCppdCk7CkBAIC0yMDYsNiArMjIxLDkgQEAgdm9pZCBDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI6OmFjcXVpcmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6
ZWRUZXgKICAgICB0ZXh0dXJlLT5saW5rKGJhY2tpbmcpOwogICAgIG1fYmFja2luZ3MucmVtb3Zl
KGJhY2tpbmcpOwogICAgIG1fYmFja2luZ3MuYWRkKGJhY2tpbmcpOworCisgICAgLy8gVXBkYXRl
IHRoZSBiYWNraW5nJ3MgcHJpb3JpdHkgZnJvbSBpdHMgbmV3IG93bmVyLgorICAgIGJhY2tpbmct
PnVwZGF0ZVByaW9yaXR5KCk7CiB9CiAKIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
OjpyZWR1Y2VNZW1vcnkoc2l6ZV90IGxpbWl0Qnl0ZXMsIENDUmVzb3VyY2VQcm92aWRlciogcmVz
b3VyY2VQcm92aWRlcikKQEAgLTIxNyw3ICsyMzUsNyBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6cmVkdWNlTWVtb3J5KHNpemVfdCBsaW1pdEJ5dGVzLCBDQ1Jlc291cmNlUHJv
dgogICAgIC8vIG9yIHVudGlsIGFsbCBiYWNraW5ncyByZW1haW5pbmcgYXJlIGFib3ZlIHRoZSBj
dXRvZmYuCiAgICAgd2hpbGUgKG1lbW9yeVVzZUJ5dGVzKCkgPiBsaW1pdEJ5dGVzICYmIG1fYmFj
a2luZ3Muc2l6ZSgpID4gMCkgewogICAgICAgICBCYWNraW5nU2V0OjppdGVyYXRvciBpdCA9IG1f
YmFja2luZ3MuYmVnaW4oKTsKLSAgICAgICAgaWYgKCgqaXQpLT5vd25lcigpICYmICgqaXQpLT5v
d25lcigpLT5pc0Fib3ZlUHJpb3JpdHlDdXRvZmYoKSkKKyAgICAgICAgaWYgKCgqaXQpLT5oYWRP
d25lckF0TGFzdFByaW9yaXR5VXBkYXRlKCkgJiYgKCppdCktPndhc0Fib3ZlUHJpb3JpdHlDdXRv
ZmZBdExhc3RQcmlvcml0eVVwZGF0ZSgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRl
c3Ryb3lCYWNraW5nKCgqaXQpLCByZXNvdXJjZVByb3ZpZGVyKTsKICAgICB9CkBAIC0yMjYsNiAr
MjQ0LDEwIEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZWR1Y2VNZW1vcnko
c2l6ZV90IGxpbWl0Qnl0ZXMsIENDUmVzb3VyY2VQcm92CiB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6cmVkdWNlTWVtb3J5KENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92
aWRlcikKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6
aXNNYWluVGhyZWFkQmxvY2tlZCgpKTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBiYWNr
aW5ncyBsaXN0IGlzIHVwIHRvIGRhdGUgYW5kIHNvcnRlZCBiZWZvcmUgdHJhdmVyc2luZyBpdC4K
KyAgICB1cGRhdGVCYWNraW5nc1ByaW9yaXRpZXMoKTsKKwogICAgIHJlZHVjZU1lbW9yeShtX21l
bW9yeUF2YWlsYWJsZUJ5dGVzLCByZXNvdXJjZVByb3ZpZGVyKTsKICAgICBBU1NFUlQobWVtb3J5
VXNlQnl0ZXMoKSA8PSBtYXhNZW1vcnlMaW1pdEJ5dGVzKCkpOwogCkBAIC0zMDgsMTAgKzMzMCw4
IEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpyZXR1cm5CYWNraW5nVGV4dHVy
ZShDQ1ByaW9yaXRpemVkVGV4dHVyZSogdGV4CiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFp
blRocmVhZCgpIHx8IChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSAmJiBDQ1Byb3h5Ojppc01haW5U
aHJlYWRCbG9ja2VkKCkpKTsKICAgICBpZiAodGV4dHVyZS0+YmFja2luZygpKSB7Ci0gICAgICAg
IC8vIE1vdmUgdGhlIGJhY2tpbmcgdGV4dHVyZSB0byB0aGUgZnJvbnQgZm9yIGV2aWN0aW9uL3Jl
Y3ljbGluZyBhbmQgdW5saW5rIGl0LgotICAgICAgICBtX2JhY2tpbmdzLnJlbW92ZSh0ZXh0dXJl
LT5iYWNraW5nKCkpOwotICAgICAgICBtX2JhY2tpbmdzLmluc2VydEJlZm9yZShtX2JhY2tpbmdz
LmJlZ2luKCksIHRleHR1cmUtPmJhY2tpbmcoKSk7CiAgICAgICAgIHRleHR1cmUtPnVubGluaygp
OworICAgICAgICBtX25lZWRzVXBkYXRlQmFja2luZ3NQcmlvcml0aXRlcyA9IHRydWU7CiAgICAg
fQogfQogCkBAIC0zMjksNiArMzQ5LDcgQEAgQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcq
IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlQmFja2luZyhJbnRTaXoKIAogdm9p
ZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmRlc3Ryb3lCYWNraW5nKENDUHJpb3JpdGl6
ZWRUZXh0dXJlOjpCYWNraW5nKiBiYWNraW5nLCBDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNl
UHJvdmlkZXIpCiB7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpICYmIENDUHJv
eHk6OmlzTWFpblRocmVhZEJsb2NrZWQoKSk7CiAgICAgQVNTRVJUKGJhY2tpbmcpOwogICAgIEFT
U0VSVCghYmFja2luZy0+b3duZXIoKSB8fCAhYmFja2luZy0+b3duZXIoKS0+aXNBYm92ZVByaW9y
aXR5Q3V0b2ZmKCkpOwogICAgIEFTU0VSVCghYmFja2luZy0+b3duZXIoKSB8fCAhYmFja2luZy0+
b3duZXIoKS0+aXNTZWxmTWFuYWdlZCgpKTsKQEAgLTM0NCwxMSArMzY1LDEwIEBAIHZvaWQgQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpkZXN0cm95QmFja2luZyhDQ1ByaW9yaXRpemVkVGV4
dHVyZTo6QmFja2luZyoKICAgICBkZWxldGUgYmFja2luZzsKIH0KIAotCiAjaWYgIUFTU0VSVF9E
SVNBQkxFRAogdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmFzc2VydEludmFyaWFu
dHMoKQogewotICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJU
KENDUHJveHk6OmlzSW1wbFRocmVhZCgpICYmIENDUHJveHk6OmlzTWFpblRocmVhZEJsb2NrZWQo
KSk7CiAKICAgICAvLyBJZiB3ZSBoaXQgYW55IG9mIHRoZXNlIGFzc2VydHMsIHRoZXJlIGlzIGEg
YnVnIGluIHRoaXMgY2xhc3MuIFRvIHNlZQogICAgIC8vIHdoZXJlIHRoZSBidWcgaXMsIGNhbGwg
dGhpcyBmdW5jdGlvbiBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YKQEAgLTM3MSwxNSArMzkx
LDIxIEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjphc3NlcnRJbnZhcmlhbnRz
KCkKICAgICAvLyBBdCBhbGwgdGltZXMsIGJhY2tpbmdzIHRoYXQgY2FuIGJlIGV2aWN0ZWQgbXVz
dCBhbHdheXMgY29tZSBiZWZvcmUKICAgICAvLyBiYWNraW5ncyB0aGF0IGNhbid0IGJlIGV2aWN0
ZWQgaW4gdGhlIGJhY2tpbmcgdGV4dHVyZSBsaXN0IChvdGhlcndpc2UKICAgICAvLyByZWR1Y2VN
ZW1vcnkgd2lsbCBub3QgZmluZCBhbGwgdGV4dHVyZXMgYXZhaWxhYmxlIGZvciBldmljdGlvbi9y
ZWN5Y2xpbmcpLgotICAgIGJvb2wgcmVhY2hlZFByb3RlY3RlZCA9IGZhbHNlOworICAgIGJvb2wg
cmVhY2hlZE93bmVkID0gZmFsc2U7CisgICAgYm9vbCByZWFjaGVkQWJvdmVDdXRvZmYgPSBmYWxz
ZTsKICAgICBmb3IgKEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5ncy5iZWdpbigp
OyBpdCAhPSBtX2JhY2tpbmdzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmICgoKml0KS0+b3du
ZXIoKSAmJiAoKml0KS0+b3duZXIoKS0+aXNBYm92ZVByaW9yaXR5Q3V0b2ZmKCkpCi0gICAgICAg
ICAgICByZWFjaGVkUHJvdGVjdGVkID0gdHJ1ZTsKLSAgICAgICAgaWYgKHJlYWNoZWRQcm90ZWN0
ZWQpCi0gICAgICAgICAgICBBU1NFUlQoKCppdCktPm93bmVyKCkgJiYgKCppdCktPm93bmVyKCkt
PmlzQWJvdmVQcmlvcml0eUN1dG9mZigpKTsKKyAgICAgICAgaWYgKCgqaXQpLT5oYWRPd25lckF0
TGFzdFByaW9yaXR5VXBkYXRlKCkpCisgICAgICAgICAgICByZWFjaGVkT3duZWQgPSB0cnVlOwor
ICAgICAgICBpZiAoKCppdCktPndhc0Fib3ZlUHJpb3JpdHlDdXRvZmZBdExhc3RQcmlvcml0eVVw
ZGF0ZSgpKQorICAgICAgICAgICAgcmVhY2hlZEFib3ZlQ3V0b2ZmID0gdHJ1ZTsKKyAgICAgICAg
aWYgKHJlYWNoZWRPd25lZCkKKyAgICAgICAgICAgIEFTU0VSVCgoKml0KS0+aGFkT3duZXJBdExh
c3RQcmlvcml0eVVwZGF0ZSgpKTsKKyAgICAgICAgaWYgKHJlYWNoZWRBYm92ZUN1dG9mZikgewor
ICAgICAgICAgICAgQVNTRVJUKCgqaXQpLT5oYWRPd25lckF0TGFzdFByaW9yaXR5VXBkYXRlKCkg
JiYgKCppdCktPndhc0Fib3ZlUHJpb3JpdHlDdXRvZmZBdExhc3RQcmlvcml0eVVwZGF0ZSgpKTsK
KyAgICAgICAgICAgIEFTU0VSVChyZWFjaGVkT3duZWQpOworICAgICAgICB9CiAgICAgfQogfQog
I2VuZGlmCiAKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaAppbmRleCBlOTBiMjUzNTVlYmRjYTBjNjU4OGNh
YWY4Y2FhNmFjOGYzZDhkYWUzLi4wMWZkMmJhNGM3MmE2NWZlMzk1Zjk0NTM3MjljMjI0NTA5ODM1
MzcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIu
aApAQCAtNzIsNiArNzIsNyBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IG1heE1lbW9yeUxpbWl0Qnl0
ZXMoKSBjb25zdCB7IHJldHVybiBtX21heE1lbW9yeUxpbWl0Qnl0ZXM7IH0KIAogICAgIHZvaWQg
cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgdm9pZCB1cGRhdGVCYWNraW5nc1ByaW9yaXRpZXMo
KTsKICAgICB2b2lkIGNsZWFyUHJpb3JpdGllcygpOwogCiAgICAgYm9vbCByZXF1ZXN0TGF0ZShD
Q1ByaW9yaXRpemVkVGV4dHVyZSopOwpAQCAtMTAyLDExICsxMDMsMTcgQEAgcHJpdmF0ZToKICAg
ICAvLyBDb21wYXJlIGJhY2tpbmdzLiBMb3dlc3QgcHJpb3JpdHkgZmlyc3QuCiAgICAgc3RhdGlj
IGlubGluZSBib29sIGNvbXBhcmVCYWNraW5ncyhDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2lu
ZyogYSwgQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcqIGIpCiAgICAgewotICAgICAgICBp
bnQgcHJpb3JpdHlBID0gYS0+b3duZXIoKSA/IGEtPm93bmVyKCktPnJlcXVlc3RQcmlvcml0eSgp
IDogQ0NQcmlvcml0eUNhbGN1bGF0b3I6Omxvd2VzdFByaW9yaXR5KCk7Ci0gICAgICAgIGludCBw
cmlvcml0eUIgPSBiLT5vd25lcigpID8gYi0+b3duZXIoKS0+cmVxdWVzdFByaW9yaXR5KCkgOiBD
Q1ByaW9yaXR5Q2FsY3VsYXRvcjo6bG93ZXN0UHJpb3JpdHkoKTsKLSAgICAgICAgaWYgKHByaW9y
aXR5QSA9PSBwcmlvcml0eUIpCi0gICAgICAgICAgICByZXR1cm4gYSA8IGI7Ci0gICAgICAgIHJl
dHVybiBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3JpdHlJc0xvd2VyKHByaW9yaXR5QSwgcHJp
b3JpdHlCKTsKKyAgICAgICAgaW50IHByaW9yaXR5QSA9IGEtPnJlcXVlc3RQcmlvcml0eUF0TGFz
dFByaW9yaXR5VXBkYXRlKCk7CisgICAgICAgIGludCBwcmlvcml0eUIgPSBiLT5yZXF1ZXN0UHJp
b3JpdHlBdExhc3RQcmlvcml0eVVwZGF0ZSgpOworICAgICAgICBpZiAocHJpb3JpdHlBICE9IHBy
aW9yaXR5QikKKyAgICAgICAgICAgIHJldHVybiBDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6cHJpb3Jp
dHlJc0xvd2VyKHByaW9yaXR5QSwgcHJpb3JpdHlCKTsKKyAgICAgICAgYm9vbCBhYm92ZUN1dG9m
ZkEgPSBhLT53YXNBYm92ZVByaW9yaXR5Q3V0b2ZmQXRMYXN0UHJpb3JpdHlVcGRhdGUoKTsKKyAg
ICAgICAgYm9vbCBhYm92ZUN1dG9mZkIgPSBiLT53YXNBYm92ZVByaW9yaXR5Q3V0b2ZmQXRMYXN0
UHJpb3JpdHlVcGRhdGUoKTsKKyAgICAgICAgaWYgKCFhYm92ZUN1dG9mZkEgJiYgYWJvdmVDdXRv
ZmZCKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChhYm92ZUN1dG9mZkEg
JiYgIWFib3ZlQ3V0b2ZmQikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0
dXJuIGEgPCBiOwogICAgIH0KIAogICAgIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcihzaXpl
X3QgbWF4TWVtb3J5TGltaXRCeXRlcywgaW50IG1heFRleHR1cmVTaXplLCBpbnQgcG9vbCk7CkBA
IC0xMzMsNiArMTQwLDEwIEBAIHByaXZhdGU6CiAKICAgICBUZXh0dXJlVmVjdG9yIG1fdGVtcFRl
eHR1cmVWZWN0b3I7CiAgICAgQmFja2luZ1ZlY3RvciBtX3RlbXBCYWNraW5nVmVjdG9yOworCisg
ICAgLy8gU2V0IGJ5IHRoZSBtYWluIHRocmVhZCB3aGVuIGl0IGFkanVzdCBwcmlvcml0aWVzIGlu
IHN1Y2ggYSB3YXkgdGhhdAorICAgIC8vIHRoZSBtX2JhY2tpbmdzIGFycmF5J3MgdmlldyBvZiBw
cmlvcml0aWVzIGlzIG5vdyBvdXQgb2YgZGF0ZS4KKyAgICBib29sIG1fbmVlZHNVcGRhdGVCYWNr
aW5nc1ByaW9yaXRpdGVzOwogfTsKIAogfSAvLyBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC5jcHAKaW5k
ZXggOTA3NmQzNGQ0OWM3ZDYwZDFiMjQyZGE5NGU0ODZkZTc1OGFjODYxZS4uNjMwYjM0MTJkMDRl
OTUwZjgyMzg2MWFhYmYzZTY5NGUxYTZlYzU5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LmNwcApAQCAtNzEs
MTcgKzcxLDMwIEBAIHB1YmxpYzoKICAgICBib29sIHZhbGlkYXRlVGV4dHVyZShPd25QdHI8Q0NQ
cmlvcml0aXplZFRleHR1cmU+JiB0ZXh0dXJlLCBib29sIHJlcXVlc3RMYXRlKQogICAgIHsKICNp
ZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIHRleHR1cmUtPnRleHR1cmVNYW5hZ2VyKCktPmFz
c2VydEludmFyaWFudHMoKTsKKyAgICAgICAgeworICAgICAgICAgICAgRGVidWdTY29wZWRTZXRJ
bXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQgaW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9j
a2VkOworICAgICAgICAgICAgdGV4dHVyZS0+dGV4dHVyZU1hbmFnZXIoKS0+YXNzZXJ0SW52YXJp
YW50cygpOworICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgaWYgKHJlcXVlc3RMYXRlKQogICAg
ICAgICAgICAgdGV4dHVyZS0+cmVxdWVzdExhdGUoKTsKICAgICAgICAgRGVidWdTY29wZWRTZXRJ
bXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQgaW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9j
a2VkOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgdGV4dHVyZS0+dGV4dHVyZU1hbmFn
ZXIoKS0+YXNzZXJ0SW52YXJpYW50cygpOworI2VuZGlmCiAgICAgICAgIGJvb2wgc3VjY2VzcyA9
IHRleHR1cmUtPmNhbkFjcXVpcmVCYWNraW5nVGV4dHVyZSgpOwogICAgICAgICBpZiAoc3VjY2Vz
cykKICAgICAgICAgICAgIHRleHR1cmUtPmFjcXVpcmVCYWNraW5nVGV4dHVyZShyZXNvdXJjZVBy
b3ZpZGVyKCkpOwogICAgICAgICByZXR1cm4gc3VjY2VzczsKICAgICB9CiAKKyAgICB2b2lkIHBy
aW9yaXRpemVUZXh0dXJlc0FuZEJhY2tpbmdzKENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlciog
dGV4dHVyZU1hbmFnZXIpCisgICAgeworICAgICAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6
ZVRleHR1cmVzKCk7CisgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZEFuZE1haW5UaHJl
YWRCbG9ja2VkIGltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZDsKKyAgICAgICAgdGV4dHVy
ZU1hbmFnZXItPnVwZGF0ZUJhY2tpbmdzUHJpb3JpdGllcygpOworICAgIH0KKwogICAgIENDUmVz
b3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcigpCiAgICAgewogICAgICAgIHJldHVybiBt
X3Jlc291cmNlUHJvdmlkZXIuZ2V0KCk7CkBAIC0xMTEsNyArMTI0LDcgQEAgVEVTVF9GKENDUHJp
b3JpdGl6ZWRUZXh0dXJlVGVzdCwgcmVxdWVzdFRleHR1cmVFeGNlZWRpbmdNYXhMaW1pdCkKICAg
ICAgICAgdGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eSgxMDAgKyBpKTsKIAogICAgIC8v
IE9ubHkgbG93ZXIgaGFsZiBzaG91bGQgYmUgYXZhaWxhYmxlLgotICAgIHRleHR1cmVNYW5hZ2Vy
LT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBwcmlvcml0aXplVGV4dHVyZXNBbmRCYWNraW5n
cyh0ZXh0dXJlTWFuYWdlci5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJl
KHRleHR1cmVzWzBdLCBmYWxzZSkpOwogICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0
ZXh0dXJlc1s3XSwgZmFsc2UpKTsKICAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRl
eHR1cmVzWzhdLCBmYWxzZSkpOwpAQCAtMTIyLDcgKzEzNSw3IEBAIFRFU1RfRihDQ1ByaW9yaXRp
emVkVGV4dHVyZVRlc3QsIHJlcXVlc3RUZXh0dXJlRXhjZWVkaW5nTWF4TGltaXQpCiAgICAgICAg
IHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMTAwIC0gaSk7CiAKICAgICAvLyBPbmx5
IHVwcGVyIGhhbGYgc2hvdWxkIGJlIGF2YWlsYWJsZS4KLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJp
b3JpdGl6ZVRleHR1cmVzKCk7CisgICAgcHJpb3JpdGl6ZVRleHR1cmVzQW5kQmFja2luZ3ModGV4
dHVyZU1hbmFnZXIuZ2V0KCkpOwogICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4
dHVyZXNbMF0sIGZhbHNlKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0
dXJlc1s3XSwgZmFsc2UpKTsKICAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVy
ZXNbOF0sIGZhbHNlKSk7CkBAIC0xNDgsNyArMTYxLDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRU
ZXh0dXJlVGVzdCwgY2hhbmdlTWVtb3J5TGltaXRzKQogCiAgICAgLy8gU2V0IG1heCBsaW1pdCB0
byA4IHRleHR1cmVzCiAgICAgdGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMo
dGV4dHVyZXNNZW1vcnlTaXplKDgpKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRl
eHR1cmVzKCk7CisgICAgcHJpb3JpdGl6ZVRleHR1cmVzQW5kQmFja2luZ3ModGV4dHVyZU1hbmFn
ZXIuZ2V0KCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkK
ICAgICAgICAgdmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzW2ldLCBmYWxzZSk7CiAgICAgewpAQCAt
MTYxLDcgKzE3NCw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIGNoYW5nZU1l
bW9yeUxpbWl0cykKIAogICAgIC8vIFNldCBtYXggbGltaXQgdG8gNSB0ZXh0dXJlcwogICAgIHRl
eHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKHRleHR1cmVzTWVtb3J5U2l6ZSg1
KSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHByaW9y
aXRpemVUZXh0dXJlc0FuZEJhY2tpbmdzKHRleHR1cmVNYW5hZ2VyLmdldCgpKTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCiAgICAgICAgIEVYUEVDVF9FUSh2
YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbaV0sIGZhbHNlKSwgaSA8IDUpOwogICAgIHsKQEAgLTE3
NCw3ICsxODcsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCBjaGFuZ2VNZW1v
cnlMaW1pdHMpCiAKICAgICAvLyBTZXQgbWF4IGxpbWl0IHRvIDQgdGV4dHVyZXMKICAgICB0ZXh0
dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcyh0ZXh0dXJlc01lbW9yeVNpemUoNCkp
OwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBwcmlvcml0
aXplVGV4dHVyZXNBbmRCYWNraW5ncyh0ZXh0dXJlTWFuYWdlci5nZXQoKSk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQogICAgICAgICBFWFBFQ1RfRVEodmFs
aWRhdGVUZXh0dXJlKHRleHR1cmVzW2ldLCBmYWxzZSksIGkgPCA0KTsKICAgICB7CkBAIC0yMDQs
NyArMjE3LDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgdGV4dHVyZU1hbmFn
ZXJQYXJ0aWFsVXBkYXRlVGV4dHVyZXMpCiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bVRleHR1cmVzOyArK2kpCiAgICAgICAgIHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHko
MjAwICsgaSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAg
IHByaW9yaXRpemVUZXh0dXJlc0FuZEJhY2tpbmdzKHRleHR1cmVNYW5hZ2VyLmdldCgpKTsKIAog
ICAgIC8vIEFsbG9jYXRlIHRleHR1cmVzIHdoaWNoIGFyZSBjdXJyZW50bHkgaGlnaCBwcmlvcml0
eS4KICAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbMF0sIGZhbHNlKSk7
CkBAIC0yMTksNyArMjMyLDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgdGV4
dHVyZU1hbmFnZXJQYXJ0aWFsVXBkYXRlVGV4dHVyZXMpCiAKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG51bVRleHR1cmVzOyArK2kpCiAgICAgICAgIG1vcmVUZXh0dXJlc1tpXS0+c2V0UmVx
dWVzdFByaW9yaXR5KDEwMCArIGkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoKTsKKyAgICBwcmlvcml0aXplVGV4dHVyZXNBbmRCYWNraW5ncyh0ZXh0dXJlTWFuYWdl
ci5nZXQoKSk7CiAKICAgICAvLyBUZXh0dXJlcyBhcmUgbm93IGJlbG93IGN1dG9mZi4KICAgICBF
WFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzBdLCBmYWxzZSkpOwpAQCAtMjY2
LDcgKzI3OSw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHRleHR1cmVNYW5h
Z2VyUHJpb3JpdGllc0FyZUVxdWFsKQogCiAgICAgLy8gU2V0IG1heCBsaW1pdCB0byA4IHRleHR1
cmVzCiAgICAgdGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXModGV4dHVyZXNN
ZW1vcnlTaXplKDgpKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7
CisgICAgcHJpb3JpdGl6ZVRleHR1cmVzQW5kQmFja2luZ3ModGV4dHVyZU1hbmFnZXIuZ2V0KCkp
OwogCiAgICAgLy8gVGhlIHR3byBoaWdoIHByaW9yaXR5IHRleHR1cmVzIHNob3VsZCBiZSBhdmFp
bGFibGUsIG90aGVycyBzaG91bGQgbm90LgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMjsg
KytpKQpAQCAtMjk4LDcgKzMxMSw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3Qs
IHRleHR1cmVNYW5hZ2VyRGVzdHJveWVkRmlyc3QpCiAgICAgRVhQRUNUX0ZBTFNFKHRleHR1cmUt
PmhhdmVCYWNraW5nVGV4dHVyZSgpKTsKIAogICAgIHRleHR1cmUtPnNldFJlcXVlc3RQcmlvcml0
eSgxMDApOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBw
cmlvcml0aXplVGV4dHVyZXNBbmRCYWNraW5ncyh0ZXh0dXJlTWFuYWdlci5nZXQoKSk7CiAKICAg
ICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZSwgZmFsc2UpKTsKICAgICBFWFBF
Q1RfVFJVRSh0ZXh0dXJlLT5jYW5BY3F1aXJlQmFja2luZ1RleHR1cmUoKSk7CkBAIC0zMjQsNyAr
MzM3LDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgdGV4dHVyZU1vdmVkVG9O
ZXdNYW5hZ2VyKQogICAgIEVYUEVDVF9GQUxTRSh0ZXh0dXJlLT5oYXZlQmFja2luZ1RleHR1cmUo
KSk7CiAKICAgICB0ZXh0dXJlLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMTAwKTsKLSAgICB0ZXh0dXJl
TWFuYWdlck9uZS0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgcHJpb3JpdGl6ZVRleHR1cmVz
QW5kQmFja2luZ3ModGV4dHVyZU1hbmFnZXJPbmUuZ2V0KCkpOwogCiAgICAgRVhQRUNUX1RSVUUo
dmFsaWRhdGVUZXh0dXJlKHRleHR1cmUsIGZhbHNlKSk7CiAgICAgRVhQRUNUX1RSVUUodGV4dHVy
ZS0+Y2FuQWNxdWlyZUJhY2tpbmdUZXh0dXJlKCkpOwpAQCAtMzQzLDcgKzM1Niw3IEBAIFRFU1Rf
RihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHRleHR1cmVNb3ZlZFRvTmV3TWFuYWdlcikKIAog
ICAgIHRleHR1cmUtPnNldFRleHR1cmVNYW5hZ2VyKHRleHR1cmVNYW5hZ2VyVHdvLmdldCgpKTsK
IAotICAgIHRleHR1cmVNYW5hZ2VyVHdvLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBwcmlv
cml0aXplVGV4dHVyZXNBbmRCYWNraW5ncyh0ZXh0dXJlTWFuYWdlclR3by5nZXQoKSk7CiAKICAg
ICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZSwgZmFsc2UpKTsKICAgICBFWFBF
Q1RfVFJVRSh0ZXh0dXJlLT5jYW5BY3F1aXJlQmFja2luZ1RleHR1cmUoKSk7CkBAIC0zNzQsNyAr
Mzg3LDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgcmVuZGVyU3VyZmFjZXNS
ZWR1Y2VNZW1vcnlBdmFpbGFibGVPdXRzaWRlUm9vdFMKICAgICAgICAgdGV4dHVyZXNbaV0tPnNl
dFJlcXVlc3RQcmlvcml0eSgxMDAgKyBpKTsKIAogICAgIC8vIE9ubHkgbG93ZXIgaGFsZiBzaG91
bGQgYmUgYXZhaWxhYmxlLgotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMo
KTsKKyAgICBwcmlvcml0aXplVGV4dHVyZXNBbmRCYWNraW5ncyh0ZXh0dXJlTWFuYWdlci5nZXQo
KSk7CiAgICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzBdLCBmYWxzZSkp
OwogICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1szXSwgZmFsc2UpKTsK
ICAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzRdLCBmYWxzZSkpOwpA
QCAtMzg1LDcgKzM5OCw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHJlbmRl
clN1cmZhY2VzUmVkdWNlTWVtb3J5QXZhaWxhYmxlT3V0c2lkZVJvb3RTCiAgICAgICAgIHRleHR1
cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMTAwIC0gaSk7CiAKICAgICAvLyBPbmx5IHVwcGVy
IGhhbGYgc2hvdWxkIGJlIGF2YWlsYWJsZS4KLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6
ZVRleHR1cmVzKCk7CisgICAgcHJpb3JpdGl6ZVRleHR1cmVzQW5kQmFja2luZ3ModGV4dHVyZU1h
bmFnZXIuZ2V0KCkpOwogICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNb
MF0sIGZhbHNlKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1sz
XSwgZmFsc2UpKTsKICAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbNF0s
IGZhbHNlKSk7CkBAIC00MjAsNyArNDMzLDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJl
VGVzdCwgcmVuZGVyU3VyZmFjZXNSZWR1Y2VNZW1vcnlBdmFpbGFibGVGb3JSZXF1ZXN0TGEKICAg
ICAgICAgdGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eSgxMDApOwogCiAgICAgLy8gVGhl
IGZpcnN0IGZvdXIgdG8gYmUgcmVxdWVzdGVkIGxhdGUgd2lsbCBiZSBhdmFpbGFibGUuCi0gICAg
dGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHByaW9yaXRpemVUZXh0
dXJlc0FuZEJhY2tpbmdzKHRleHR1cmVNYW5hZ2VyLmdldCgpKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKICAgICAgICAgRVhQRUNUX0ZBTFNFKHZhbGlk
YXRlVGV4dHVyZSh0ZXh0dXJlc1tpXSwgZmFsc2UpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbWF4VGV4dHVyZXM7IGkgKz0gMikKQEAgLTQ1OCw3ICs0NzEsNyBAQCBURVNUX0YoQ0NQ
cmlvcml0aXplZFRleHR1cmVUZXN0LCB3aGVuUmVuZGVyU3VyZmFjZU5vdEF2YWlsYWJsZVRleHR1
cmVzQWxzb05vdEF2YQogICAgIGZvciAoc2l6ZV90IGkgPSA2OyBpIDwgODsgKytpKQogICAgICAg
ICB0ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5KENDUHJpb3JpdHlDYWxjdWxhdG9yOjp2
aXNpYmxlUHJpb3JpdHkoZmFsc2UpKTsKIAotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXpl
VGV4dHVyZXMoKTsKKyAgICBwcmlvcml0aXplVGV4dHVyZXNBbmRCYWNraW5ncyh0ZXh0dXJlTWFu
YWdlci5nZXQoKSk7CiAKICAgICAvLyBVbmFibGUgdG8gcmVxdWVzdExhdGUgdGV4dHVyZXMgaW4g
dGhlIGNoaWxkIHN1cmZhY2UuCiAgICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0
dXJlc1s2XSwgdHJ1ZSkpOwpAQCAtNDc2LDQgKzQ4OSw0NiBAQCBURVNUX0YoQ0NQcmlvcml0aXpl
ZFRleHR1cmVUZXN0LCB3aGVuUmVuZGVyU3VyZmFjZU5vdEF2YWlsYWJsZVRleHR1cmVzQWxzb05v
dEF2YQogICAgIHRleHR1cmVNYW5hZ2VyLT5jbGVhckFsbE1lbW9yeShyZXNvdXJjZVByb3ZpZGVy
KCkpOwogfQogCitURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCByZXF1ZXN0TGF0ZUJh
Y2tpbmdzU29ydGluZykKK3sKKyAgICBjb25zdCBzaXplX3QgbWF4VGV4dHVyZXMgPSA4OworICAg
IE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gY3Jl
YXRlTWFuYWdlcihtYXhUZXh0dXJlcyk7CisgICAgdGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9y
eUxpbWl0Qnl0ZXModGV4dHVyZXNNZW1vcnlTaXplKG1heFRleHR1cmVzKSk7CisKKyAgICAvLyBD
cmVhdGUgdGV4dHVyZXMgdG8gZmlsbCBvdXIgbWVtb3J5IGxpbWl0LgorICAgIE93blB0cjxDQ1By
aW9yaXRpemVkVGV4dHVyZT4gdGV4dHVyZXNbbWF4VGV4dHVyZXNdOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKKyAgICAgICAgdGV4dHVyZXNbaV0gPSB0ZXh0
dXJlTWFuYWdlci0+Y3JlYXRlVGV4dHVyZShtX3RleHR1cmVTaXplLCBtX3RleHR1cmVGb3JtYXQp
OworCisgICAgLy8gU2V0IGVxdWFsIHByaW9yaXRpZXMsIGFuZCBhbGxvY2F0ZSBiYWNraW5ncyBm
b3IgYWxsIHRleHR1cmVzLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7
ICsraSkKKyAgICAgICAgdGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eSgxMDApOworICAg
IHByaW9yaXRpemVUZXh0dXJlc0FuZEJhY2tpbmdzKHRleHR1cmVNYW5hZ2VyLmdldCgpKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKKyAgICAgICAgRVhQ
RUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzW2ldLCBmYWxzZSkpOworCisgICAgLy8g
RHJvcCB0aGUgbWVtb3J5IGxpbWl0IGFuZCBwcmlvcml0aXplIChub25lIHdpbGwgYmUgYWJvdmUg
dGhlIHRocmVzaG9sZCwKKyAgICAvLyBidXQgdGhleSBzdGlsbCBoYXZlIGJhY2tpbmdzIGJlY2F1
c2UgcmVkdWNlTWVtb3J5IGhhc24ndCBiZWVuIGNhbGxlZCkuCisgICAgdGV4dHVyZU1hbmFnZXIt
PnNldE1heE1lbW9yeUxpbWl0Qnl0ZXModGV4dHVyZXNNZW1vcnlTaXplKG1heFRleHR1cmVzIC8g
MikpOworICAgIHByaW9yaXRpemVUZXh0dXJlc0FuZEJhY2tpbmdzKHRleHR1cmVNYW5hZ2VyLmdl
dCgpKTsKKworICAgIC8vIFB1c2ggaGFsZiBvZiB0aGVtIGJhY2sgb3ZlciB0aGUgbGltaXQuCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSArPSAyKQorICAgICAgICBF
WFBFQ1RfVFJVRSh0ZXh0dXJlc1tpXS0+cmVxdWVzdExhdGUoKSk7CisKKyAgICAvLyBBc3NlcnQg
dGhhdCB0aGUgYmFja2luZ3MgbGlzdCBiZSBzb3J0ZWQgd2l0aCB0aGUgYmVsb3ctbGltaXQgYmFj
a2luZ3MKKyAgICAvLyBiZWZvcmUgdGhlIGFib3ZlLWxpbWl0IGJhY2tpbmdzLgorICAgIERlYnVn
U2NvcGVkU2V0SW1wbFRocmVhZEFuZE1haW5UaHJlYWRCbG9ja2VkIGltcGxUaHJlYWRBbmRNYWlu
VGhyZWFkQmxvY2tlZDsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgdGV4dHVyZU1hbmFnZXIt
PmFzc2VydEludmFyaWFudHMoKTsKKyNlbmRpZgorCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2Ug
aGF2ZSBiYWNraW5ncyBmb3IgYWxsIG9mIHRoZSB0ZXh0dXJlcy4KKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCisgICAgICAgIEVYUEVDVF9UUlVFKHRleHR1cmVz
W2ldLT5oYXZlQmFja2luZ1RleHR1cmUoKSk7CisKKyAgICB0ZXh0dXJlTWFuYWdlci0+Y2xlYXJB
bGxNZW1vcnkocmVzb3VyY2VQcm92aWRlcigpKTsKK30KKworCiB9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163272</attachid>
            <date>2012-09-10 21:18:04 -0700</date>
            <delta_ts>2012-09-11 18:35:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96114-20120910211740.patch</filename>
            <type>text/plain</type>
            <size>30456</size>
            <attacher name="Christopher Cameron">ccameron</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4MDc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWZjNDdkMmRjOGRmOWI4
ZDhjYjgzOGUzMDc2MDVhYjdmOTgzZTA1YS4uNDJlYWQ2ZmYyMWI1NmJkNmFiZWM0ODI0NDdkZTEw
MjhkNjQyOTJjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTA5LTA3ICBDaHJp
c3RvcGhlciBDYW1lcm9uICA8Y2NhbWVyb25AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gTWFrZSBwcmlvcml0aXplZCB0ZXh0dXJlIG1hbmFnZXIgbm90IHRvdWNoIGJhY2tpbmdz
IGFycmF5IG9uIHRoZSBtYWluIHRocmVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTYxMTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUYWtlIGEgc25hcHNob3Qgb2YgdGhlIHRleHR1cmVzJyBwcmlvcml0
aWVzIGZyb20gdGhlIG1haW4gdGhyZWFkLAorICAgICAgICBhbmQgc2F2ZSBpdCBpbiB0aGVpciBi
YWNraW5ncyBmb3IgYWNjZXNzIGJ5IHRoZSBpbXBsIHRocmVhZC4KKyAgICAgICAgVXBkYXRlIGZ1
bmN0aW9ucyB0aGF0IGFjY2VzcyB0aGUgc29ydGVkIGJhY2tpbmdzIGFycmF5IHRvIHVzZSB0aGUK
KyAgICAgICAgc25hcHNob3R0ZWQgdmFsdWVzIGluc3RlYWQgb2YgdGhlIHZhbHVlcyB0aGF0IHRo
ZSBtYWluIHRocmVhZCBtYXkKKyAgICAgICAgaGF2ZSBjb21wdXRlZCBmb3IgdGhlIG5leHQgZnJh
bWUuCisKKyAgICAgICAgTWFrZSB0aGUgbWFpbiB0aHJlYWQgbm90IHRvdWNoIHRoZSBtX2JhY2tp
bmdzIGFycmF5LiAgU3BsaXQKKyAgICAgICAgcHJpb3JpdGl6ZVRleHR1cmVzIGludG8gYSB1cGRh
dGVCYWNraW5nc1ByaW9yaXRpZXMgZnVuY3Rpb24uCisgICAgICAgIEluIHBsYWNlcyB3aGVyZSB0
aGUgbWFpbiB0aHJlYWQgd291bGQgaGF2ZSB0b3VjaGVkIG1fYmFja2luZ3MsCisgICAgICAgIHNl
dCBhIGZsYWcgc3BlY2lmeWluZyB0aGF0IG1fYmFja2luZ3MgbmVlZHMgdG8gYmUgcmUtc29ydGVk
CisgICAgICAgIGJlZm9yZSBhbnkgZnVuY3Rpb24gdGhhdCByZXF1aXJlcyBpdCBiZSBzb3J0ZWQg
YnkgcHJpb3JpdHkgYmUKKyAgICAgICAgZXhlY3V0ZWQuCisKKyAgICAgICAgVXBkYXRlIHRoZSB0
d28gZnVuY3Rpb25zIHRoYXQgcmVxdWlyZSBzb3J0ZWQgb3JkZXIgKGFjcXVpcmVCYWNraW5nCisg
ICAgICAgIGFuZCByZWR1Y2VNZW1vcnkpIHRvIHNvcnQgdGhlIGJhY2tpbmdzIGFycmF5IChpZiBu
ZWVkZWQpIGJlZm9yZQorICAgICAgICB0cmF2ZXJzaW5nIGl0LgorCisgICAgICAgIFVwZGF0ZWQg
dGVzdHMgdG8gc2V0IGNvcnJlY3QgdGhyZWFkIGR1cmluZyBhc3NlcnRzLiBBZGQgYSB0ZXN0IHRv
CisgICAgICAgIHZlcmlmeSB0aGF0IHJlcXVlc3RMYXRlIGlzIGNvcnJlY3RseSBpbmNvcnBvcmF0
ZWQgaW50byB0aGUgYmFja2luZworICAgICAgICBzb3J0aW5nLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Q0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpwcmlvcml0aXplQmFj
a2luZ3MpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpy
ZXF1ZXN0TGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI6OmFjcXVpcmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmVkdWNlTWVtb3J5KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cmV0dXJuQmFja2luZ1RleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpkZXN0cm95QmFj
a2luZyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmFz
c2VydEludmFyaWFudHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oOgorICAgICAgICAoQ0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyKToKKwogMjAxMi0wOS0wNCAgUm9iZXJ0IEhvZ2FuICA8cm9iZXJ0QHdlYmtp
dC5vcmc+CiAKICAgICAgICAgQ1NTIDIuMSBmYWlsdXJlOiBjb250ZW50LWNvdW50ZXItMDEwLmh0
bSBmYWlscwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAyYTYyMTQ1MWJkMDNlYjhiYzhi
YmE3OWMwZjRiYjc4MTMwOTNmY2M0Li40OWE1ZDFjM2ZiMmJkYWE4MzdjZWFmNGYxYWEyMDkwNmFi
OGZlOTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEy
LTA5LTA3ICBDaHJpc3RvcGhlciBDYW1lcm9uICA8Y2NhbWVyb25AY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFtjaHJvbWl1bV0gTWFrZSBwcmlvcml0aXplZCB0ZXh0dXJlIG1hbmFnZXIgbm90IHRv
dWNoIGJhY2tpbmdzIGFycmF5IG9uIHRoZSBtYWluIHRocmVhZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTYxMTQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUYWtlIGEgc25hcHNob3Qgb2YgdGhlIHRleHR1
cmVzJyBwcmlvcml0aWVzIGZyb20gdGhlIG1haW4gdGhyZWFkLAorICAgICAgICBhbmQgc2F2ZSBp
dCBpbiB0aGVpciBiYWNraW5ncyBmb3IgYWNjZXNzIGJ5IHRoZSBpbXBsIHRocmVhZC4KKyAgICAg
ICAgVXBkYXRlIGZ1bmN0aW9ucyB0aGF0IGFjY2VzcyB0aGUgc29ydGVkIGJhY2tpbmdzIGFycmF5
IHRvIHVzZSB0aGUKKyAgICAgICAgc25hcHNob3R0ZWQgdmFsdWVzIGluc3RlYWQgb2YgdGhlIHZh
bHVlcyB0aGF0IHRoZSBtYWluIHRocmVhZCBtYXkKKyAgICAgICAgaGF2ZSBjb21wdXRlZCBmb3Ig
dGhlIG5leHQgZnJhbWUuCisKKyAgICAgICAgTWFrZSB0aGUgbWFpbiB0aHJlYWQgbm90IHRvdWNo
IHRoZSBtX2JhY2tpbmdzIGFycmF5LiAgU3BsaXQKKyAgICAgICAgcHJpb3JpdGl6ZVRleHR1cmVz
IGludG8gYSB1cGRhdGVCYWNraW5nc1ByaW9yaXRpZXMgZnVuY3Rpb24uCisgICAgICAgIEluIHBs
YWNlcyB3aGVyZSB0aGUgbWFpbiB0aHJlYWQgd291bGQgaGF2ZSB0b3VjaGVkIG1fYmFja2luZ3Ms
CisgICAgICAgIHNldCBhIGZsYWcgc3BlY2lmeWluZyB0aGF0IG1fYmFja2luZ3MgbmVlZHMgdG8g
YmUgcmUtc29ydGVkCisgICAgICAgIGJlZm9yZSBhbnkgZnVuY3Rpb24gdGhhdCByZXF1aXJlcyBp
dCBiZSBzb3J0ZWQgYnkgcHJpb3JpdHkgYmUKKyAgICAgICAgZXhlY3V0ZWQuCisKKyAgICAgICAg
VXBkYXRlIHRoZSB0d28gZnVuY3Rpb25zIHRoYXQgcmVxdWlyZSBzb3J0ZWQgb3JkZXIgKGFjcXVp
cmVCYWNraW5nCisgICAgICAgIGFuZCByZWR1Y2VNZW1vcnkpIHRvIHNvcnQgdGhlIGJhY2tpbmdz
IGFycmF5IChpZiBuZWVkZWQpIGJlZm9yZQorICAgICAgICB0cmF2ZXJzaW5nIGl0LgorCisgICAg
ICAgIFVwZGF0ZWQgdGVzdHMgdG8gc2V0IGNvcnJlY3QgdGhyZWFkIGR1cmluZyBhc3NlcnRzLiBB
ZGQgYSB0ZXN0IHRvCisgICAgICAgIHZlcmlmeSB0aGF0IHJlcXVlc3RMYXRlIGlzIGNvcnJlY3Rs
eSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgYmFja2luZworICAgICAgICBzb3J0aW5nLgorCisgICAg
ICAgICogdGVzdHMvQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LmNwcDoKKyAgICAgICAgKFdURjo6
Q0NQcmlvcml0aXplZFRleHR1cmVUZXN0Ojp2YWxpZGF0ZVRleHR1cmUpOgorCiAyMDEyLTA5LTEw
ICBSaWNrIEJ5ZXJzICA8cmJ5ZXJzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1d
IERvbid0IHVzZSBXZWJHZXN0dXJlRXZlbnQuYm91bmRpbmdCb3ggZm9yIHRvdWNoIGFkanVzdG1l
bnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmNwcAppbmRleCBkOWY2OGFm
MGFlMGI5OTI4MTMzYTIzMmQ3NDE2OTI0NzYxMjA2ZGRiLi5kOThhYmE2MTVhZDE4NjcyYjEwNmY5
OTU2NzA0YWFhMDRkNzkwNWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1
cmUuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXIuaCIKICNpbmNsdWRlICJDQ1ByaW9yaXR5Q2FsY3VsYXRvci5oIgorI2luY2x1ZGUg
IkNDUHJveHkuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7
CkBAIC0xMzksNCArMTQwLDMyIEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmU6OnNldFRvU2Vs
Zk1hbmFnZWRNZW1vcnlQbGFjZWhvbGRlcihzaXplX3QgYnl0ZXMpCiAgICAgbV9ieXRlcyA9IGJ5
dGVzOwogfQogCitDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZzo6QmFja2luZyh1bnNpZ25l
ZCBpZCwgSW50U2l6ZSBzaXplLCBHQzNEZW51bSBmb3JtYXQpCisgICAgOiBDQ1RleHR1cmUoaWQs
IHNpemUsIGZvcm1hdCkKKyAgICAsIG1fb3duZXIoMCkKKyAgICAsIG1fcHJpb3JpdHlBdExhc3RQ
cmlvcml0eVVwZGF0ZShDQ1ByaW9yaXR5Q2FsY3VsYXRvcjo6bG93ZXN0UHJpb3JpdHkoKSkKKyAg
ICAsIG1fb3duZXJFeGlzdGVkQXRMYXN0UHJpb3JpdHlVcGRhdGUoZmFsc2UpCisgICAgLCBtX3dh
c0Fib3ZlUHJpb3JpdHlDdXRvZmZBdExhc3RQcmlvcml0eVVwZGF0ZShmYWxzZSkKK3sKK30KKwor
Q0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmc6On5CYWNraW5nKCkKK3sKKyAgICBBU1NFUlQo
IW1fb3duZXIpOworfQorCit2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nOjp1cGRh
dGVQcmlvcml0eSgpCit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpICYmIEND
UHJveHk6OmlzTWFpblRocmVhZEJsb2NrZWQoKSk7CisgICAgaWYgKG1fb3duZXIpIHsKKyAgICAg
ICAgbV9vd25lckV4aXN0ZWRBdExhc3RQcmlvcml0eVVwZGF0ZSA9IHRydWU7CisgICAgICAgIG1f
cHJpb3JpdHlBdExhc3RQcmlvcml0eVVwZGF0ZSA9IG1fb3duZXItPnJlcXVlc3RQcmlvcml0eSgp
OworICAgICAgICBtX3dhc0Fib3ZlUHJpb3JpdHlDdXRvZmZBdExhc3RQcmlvcml0eVVwZGF0ZSA9
IG1fb3duZXItPmlzQWJvdmVQcmlvcml0eUN1dG9mZigpOworICAgIH0gZWxzZSB7CisgICAgICAg
IG1fb3duZXJFeGlzdGVkQXRMYXN0UHJpb3JpdHlVcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgbV9w
cmlvcml0eUF0TGFzdFByaW9yaXR5VXBkYXRlID0gQ0NQcmlvcml0eUNhbGN1bGF0b3I6Omxvd2Vz
dFByaW9yaXR5KCk7CisgICAgICAgIG1fd2FzQWJvdmVQcmlvcml0eUN1dG9mZkF0TGFzdFByaW9y
aXR5VXBkYXRlID0gZmFsc2U7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ByaW9yaXRpemVkVGV4dHVyZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmUuaAppbmRleCAzNzg5ZDdmMjY5YTNkN2U1
MTk1YTg5MmRkZDM3NmRhZTYxOGQyYjBlLi41MjY0NTE4OTlkMGZiOGVlODg2Nzg2MTViNzE4NTk4
MGQ3YmFhM2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlLmgKQEAgLTEw
MCwxOCArMTAwLDI2IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ0NQ
cmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOworICAgIGZyaWVuZCBjbGFzcyBDQ1ByaW9yaXRpemVk
VGV4dHVyZVRlc3Q7CiAKICAgICBjbGFzcyBCYWNraW5nIDogcHVibGljIENDVGV4dHVyZSB7CiAg
ICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhY2tpbmcpOwogICAgIHB1YmxpYzoKLSAgICAg
ICAgQmFja2luZyh1bnNpZ25lZCBpZCwgSW50U2l6ZSBzaXplLCBHQzNEZW51bSBmb3JtYXQpCi0g
ICAgICAgICAgICA6IENDVGV4dHVyZShpZCwgc2l6ZSwgZm9ybWF0KSwgbV9vd25lcigwKSB7IH0K
LSAgICAgICAgfkJhY2tpbmcoKSB7IEFTU0VSVCghbV9vd25lcik7IH0KKyAgICAgICAgQmFja2lu
Zyh1bnNpZ25lZCBpZCwgSW50U2l6ZSwgR0MzRGVudW0gZm9ybWF0KTsKKyAgICAgICAgfkJhY2tp
bmcoKTsKKyAgICAgICAgdm9pZCB1cGRhdGVQcmlvcml0eSgpOwogCiAgICAgICAgIENDUHJpb3Jp
dGl6ZWRUZXh0dXJlKiBvd25lcigpIHsgcmV0dXJuIG1fb3duZXI7IH0KKyAgICAgICAgYm9vbCBo
YWRPd25lckF0TGFzdFByaW9yaXR5VXBkYXRlKCkgY29uc3QgeyByZXR1cm4gbV9vd25lckV4aXN0
ZWRBdExhc3RQcmlvcml0eVVwZGF0ZTsgfQorICAgICAgICBib29sIHJlcXVlc3RQcmlvcml0eUF0
TGFzdFByaW9yaXR5VXBkYXRlKCkgY29uc3QgeyByZXR1cm4gbV9wcmlvcml0eUF0TGFzdFByaW9y
aXR5VXBkYXRlOyB9CisgICAgICAgIGJvb2wgd2FzQWJvdmVQcmlvcml0eUN1dG9mZkF0TGFzdFBy
aW9yaXR5VXBkYXRlKCkgY29uc3QgeyByZXR1cm4gbV93YXNBYm92ZVByaW9yaXR5Q3V0b2ZmQXRM
YXN0UHJpb3JpdHlVcGRhdGU7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBDQ1ByaW9yaXRpemVkVGV4dHVyZTsKICAgICAgICAgQ0NQcmlvcml0aXplZFRleHR1cmUqIG1f
b3duZXI7CisgICAgICAgIGludCBtX3ByaW9yaXR5QXRMYXN0UHJpb3JpdHlVcGRhdGU7CisgICAg
ICAgIGJvb2wgbV9vd25lckV4aXN0ZWRBdExhc3RQcmlvcml0eVVwZGF0ZTsKKyAgICAgICAgYm9v
bCBtX3dhc0Fib3ZlUHJpb3JpdHlDdXRvZmZBdExhc3RQcmlvcml0eVVwZGF0ZTsKICAgICB9Owog
CiAgICAgQ0NQcmlvcml0aXplZFRleHR1cmUoQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKiwg
SW50U2l6ZSwgR0MzRGVudW0gZm9ybWF0KTsKQEAgLTEyOCw3ICsxMzYsNyBAQCBwcml2YXRlOgog
ICAgIEdDM0RlbnVtIG1fZm9ybWF0OwogICAgIHNpemVfdCBtX2J5dGVzOwogCi0gICAgc2l6ZV90
IG1fcHJpb3JpdHk7CisgICAgaW50IG1fcHJpb3JpdHk7CiAgICAgYm9vbCBtX2lzQWJvdmVQcmlv
cml0eUN1dG9mZjsKICAgICBib29sIG1faXNTZWxmTWFuYWdlZDsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRl
eHR1cmVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5jcHAKaW5kZXggOWQzZWZiNGExMjAz
MTM0ZDFlOGJkOWJkMDM0NjNlODI0MDUyZmVhOS4uY2QyNjdkOWNhMTYzMDQxZTZjYTBmOTZlZmRh
NTdiZjhiZTA5YjM5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXIuY3BwCkBAIC00Miw2ICs0Miw3IEBAIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcjo6Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKHNpemVfdCBtYXhNZW1vcnlMaW1pdEJ5
CiAgICAgLCBtX21lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoMCkKICAgICAsIG1fbWVtb3J5QXZhaWxh
YmxlQnl0ZXMoMCkKICAgICAsIG1fcG9vbChwb29sKQorICAgICwgbV9uZWVkc1VwZGF0ZUJhY2tp
bmdzUHJpb3JpdGl0ZXMoZmFsc2UpCiB7CiB9CiAKQEAgLTYxLDE4ICs2MiwxMiBAQCB2b2lkIEND
UHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVzKCkKICAgICBUUkFD
RV9FVkVOVDAoImNjIiwgIkNDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6cHJpb3JpdGl6ZVRl
eHR1cmVzIik7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKIAotI2lmICFB
U1NFUlRfRElTQUJMRUQKLSAgICBhc3NlcnRJbnZhcmlhbnRzKCk7Ci0jZW5kaWYKLQogICAgIC8v
IFNvcnRpbmcgdGV4dHVyZXMgaW4gdGhpcyBmdW5jdGlvbiBjb3VsZCBiZSByZXBsYWNlZCBieSBh
IHNsaWdodGx5CiAgICAgLy8gbW9kaWZpZWQgTyhuKSBxdWljay1zZWxlY3QgdG8gcGFydGl0aW9u
IHRleHR1cmVzIHJhdGhlciB0aGFuCiAgICAgLy8gc29ydCB0aGVtIChpZiBwZXJmb3JtYW5jZSBv
ZiB0aGUgc29ydCBiZWNvbWVzIGFuIGlzc3VlKS4KIAogICAgIFRleHR1cmVWZWN0b3ImIHNvcnRl
ZFRleHR1cmVzID0gbV90ZW1wVGV4dHVyZVZlY3RvcjsKLSAgICBCYWNraW5nVmVjdG9yJiBzb3J0
ZWRCYWNraW5ncyA9IG1fdGVtcEJhY2tpbmdWZWN0b3I7CiAgICAgc29ydGVkVGV4dHVyZXMuY2xl
YXIoKTsKLSAgICBzb3J0ZWRCYWNraW5ncy5jbGVhcigpOwogCiAgICAgLy8gQ29weSBhbGwgdGV4
dHVyZXMgaW50byBhIHZlY3RvciBhbmQgc29ydCB0aGVtLgogICAgIGZvciAoVGV4dHVyZVNldDo6
aXRlcmF0b3IgaXQgPSBtX3RleHR1cmVzLmJlZ2luKCk7IGl0ICE9IG1fdGV4dHVyZXMuZW5kKCk7
ICsraXQpCkBAIC0xMTYsMjQgKzExMSw0NCBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcjo6cHJpb3JpdGl6ZVRleHR1cmVzKCkKICAgICAgICAgaWYgKGlzQWJvdmVQcmlvcml0eUN1
dG9mZiAmJiAhKCppdCktPmlzU2VsZk1hbmFnZWQoKSkKICAgICAgICAgICAgIG1fbWVtb3J5QWJv
dmVDdXRvZmZCeXRlcyArPSAoKml0KS0+Ynl0ZXMoKTsKICAgICB9CisgICAgc29ydGVkVGV4dHVy
ZXMuY2xlYXIoKTsKKworICAgIG1fbmVlZHNVcGRhdGVCYWNraW5nc1ByaW9yaXRpdGVzID0gdHJ1
ZTsKKwogICAgIEFTU0VSVChtX21lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMgPD0gbV9tZW1vcnlBdmFp
bGFibGVCeXRlcyk7CisgICAgQVNTRVJUKG1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSA8PSBtYXhN
ZW1vcnlMaW1pdEJ5dGVzKCkpOworfQogCi0gICAgLy8gUHV0IGJhY2tpbmdzIGluIGV2aWN0aW9u
L3JlY3ljbGluZyBvcmRlci4KLSAgICBmb3IgKEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9i
YWNraW5ncy5iZWdpbigpOyBpdCAhPSBtX2JhY2tpbmdzLmVuZCgpOyArK2l0KQordm9pZCBDQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnVwZGF0ZUJhY2tpbmdzUHJpb3JpdGllcygpCit7Cisg
ICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnVwZGF0
ZUJhY2tpbmdzUHJpb3JpdGllcyIpOworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQo
KSAmJiBDQ1Byb3h5Ojppc01haW5UaHJlYWRCbG9ja2VkKCkpOworCisgICAgaWYgKCFtX25lZWRz
VXBkYXRlQmFja2luZ3NQcmlvcml0aXRlcykKKyAgICAgICAgcmV0dXJuOworCisjaWYgIUFTU0VS
VF9ESVNBQkxFRAorICAgIGFzc2VydEludmFyaWFudHMoKTsKKyNlbmRpZgorCisgICAgLy8gVXBk
YXRlIGJhY2tpbmdzJyBwcmlvcml0aWVzIGFuZCBwdXQgYmFja2luZ3MgaW4gZXZpY3Rpb24vcmVj
eWNsaW5nIG9yZGVyLgorICAgIEJhY2tpbmdWZWN0b3ImIHNvcnRlZEJhY2tpbmdzID0gbV90ZW1w
QmFja2luZ1ZlY3RvcjsKKyAgICBzb3J0ZWRCYWNraW5ncy5jbGVhcigpOworICAgIGZvciAoQmFj
a2luZ1NldDo6aXRlcmF0b3IgaXQgPSBtX2JhY2tpbmdzLmJlZ2luKCk7IGl0ICE9IG1fYmFja2lu
Z3MuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgKCppdCktPnVwZGF0ZVByaW9yaXR5KCk7CiAgICAg
ICAgIHNvcnRlZEJhY2tpbmdzLmFwcGVuZCgqaXQpOworICAgIH0KICAgICBzdGQ6OnNvcnQoc29y
dGVkQmFja2luZ3MuYmVnaW4oKSwgc29ydGVkQmFja2luZ3MuZW5kKCksIGNvbXBhcmVCYWNraW5n
cyk7CiAKICAgICBmb3IgKEJhY2tpbmdWZWN0b3I6Oml0ZXJhdG9yIGl0ID0gc29ydGVkQmFja2lu
Z3MuYmVnaW4oKTsgaXQgIT0gc29ydGVkQmFja2luZ3MuZW5kKCk7ICsraXQpIHsKICAgICAgICAg
bV9iYWNraW5ncy5yZW1vdmUoKml0KTsKICAgICAgICAgbV9iYWNraW5ncy5hZGQoKml0KTsKICAg
ICB9Ci0KLSAgICBzb3J0ZWRUZXh0dXJlcy5jbGVhcigpOwogICAgIHNvcnRlZEJhY2tpbmdzLmNs
ZWFyKCk7CisgICAgbV9uZWVkc1VwZGF0ZUJhY2tpbmdzUHJpb3JpdGl0ZXMgPSBmYWxzZTsKIAog
I2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBhc3NlcnRJbnZhcmlhbnRzKCk7Ci0gICAgQVNTRVJU
KG1lbW9yeUFib3ZlQ3V0b2ZmQnl0ZXMoKSA8PSBtYXhNZW1vcnlMaW1pdEJ5dGVzKCkpOwogI2Vu
ZGlmCiB9CiAKQEAgLTE2NiwxMCArMTgxLDcgQEAgYm9vbCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6OnJlcXVlc3RMYXRlKENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXJlKQogCiAgICAg
bV9tZW1vcnlBYm92ZUN1dG9mZkJ5dGVzID0gbmV3TWVtb3J5Qnl0ZXM7CiAgICAgdGV4dHVyZS0+
c2V0QWJvdmVQcmlvcml0eUN1dG9mZih0cnVlKTsKLSAgICBpZiAodGV4dHVyZS0+YmFja2luZygp
KSB7Ci0gICAgICAgIG1fYmFja2luZ3MucmVtb3ZlKHRleHR1cmUtPmJhY2tpbmcoKSk7Ci0gICAg
ICAgIG1fYmFja2luZ3MuYWRkKHRleHR1cmUtPmJhY2tpbmcoKSk7Ci0gICAgfQorICAgIG1fbmVl
ZHNVcGRhdGVCYWNraW5nc1ByaW9yaXRpdGVzID0gdHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtMTgxLDEyICsxOTMsMTUgQEAgdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6
OmFjcXVpcmVCYWNraW5nVGV4dHVyZUlmTmVlZGVkKENDUHJpb3JpdGl6ZWRUZXgKICAgICBpZiAo
dGV4dHVyZS0+YmFja2luZygpIHx8ICF0ZXh0dXJlLT5pc0Fib3ZlUHJpb3JpdHlDdXRvZmYoKSkK
ICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGJhY2tpbmdzIGxp
c3QgaXMgdXAgdG8gZGF0ZSBhbmQgc29ydGVkIGJlZm9yZSB0cmF2ZXJzaW5nIGl0LgorICAgIHVw
ZGF0ZUJhY2tpbmdzUHJpb3JpdGllcygpOworCiAgICAgLy8gRmluZCBhIGJhY2tpbmcgYmVsb3cs
IGJ5IGVpdGhlciByZWN5Y2xpbmcgb3IgYWxsb2NhdGluZy4KICAgICBDQ1ByaW9yaXRpemVkVGV4
dHVyZTo6QmFja2luZyogYmFja2luZyA9IDA7CiAKICAgICAvLyBGaXJzdCB0cnkgdG8gcmVjeWNs
ZQogICAgIGZvciAoQmFja2luZ1NldDo6aXRlcmF0b3IgaXQgPSBtX2JhY2tpbmdzLmJlZ2luKCk7
IGl0ICE9IG1fYmFja2luZ3MuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKCgqaXQpLT5vd25l
cigpICYmICgqaXQpLT5vd25lcigpLT5pc0Fib3ZlUHJpb3JpdHlDdXRvZmYoKSkKKyAgICAgICAg
aWYgKCgqaXQpLT5oYWRPd25lckF0TGFzdFByaW9yaXR5VXBkYXRlKCkgJiYgKCppdCktPndhc0Fi
b3ZlUHJpb3JpdHlDdXRvZmZBdExhc3RQcmlvcml0eVVwZGF0ZSgpKQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGlmICgoKml0KS0+c2l6ZSgpID09IHRleHR1cmUtPnNpemUoKSAmJiAoKml0
KS0+Zm9ybWF0KCkgPT0gdGV4dHVyZS0+Zm9ybWF0KCkpIHsKICAgICAgICAgICAgIGJhY2tpbmcg
PSAoKml0KTsKQEAgLTIwNiw2ICsyMjEsOSBAQCB2b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcjo6YWNxdWlyZUJhY2tpbmdUZXh0dXJlSWZOZWVkZWQoQ0NQcmlvcml0aXplZFRleAogICAg
IHRleHR1cmUtPmxpbmsoYmFja2luZyk7CiAgICAgbV9iYWNraW5ncy5yZW1vdmUoYmFja2luZyk7
CiAgICAgbV9iYWNraW5ncy5hZGQoYmFja2luZyk7CisKKyAgICAvLyBVcGRhdGUgdGhlIGJhY2tp
bmcncyBwcmlvcml0eSBmcm9tIGl0cyBuZXcgb3duZXIuCisgICAgYmFja2luZy0+dXBkYXRlUHJp
b3JpdHkoKTsKIH0KIAogdm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlZHVjZU1l
bW9yeShzaXplX3QgbGltaXRCeXRlcywgQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3Zp
ZGVyKQpAQCAtMjE3LDcgKzIzNSw3IEBAIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
OjpyZWR1Y2VNZW1vcnkoc2l6ZV90IGxpbWl0Qnl0ZXMsIENDUmVzb3VyY2VQcm92CiAgICAgLy8g
b3IgdW50aWwgYWxsIGJhY2tpbmdzIHJlbWFpbmluZyBhcmUgYWJvdmUgdGhlIGN1dG9mZi4KICAg
ICB3aGlsZSAobWVtb3J5VXNlQnl0ZXMoKSA+IGxpbWl0Qnl0ZXMgJiYgbV9iYWNraW5ncy5zaXpl
KCkgPiAwKSB7CiAgICAgICAgIEJhY2tpbmdTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5ncy5i
ZWdpbigpOwotICAgICAgICBpZiAoKCppdCktPm93bmVyKCkgJiYgKCppdCktPm93bmVyKCktPmlz
QWJvdmVQcmlvcml0eUN1dG9mZigpKQorICAgICAgICBpZiAoKCppdCktPmhhZE93bmVyQXRMYXN0
UHJpb3JpdHlVcGRhdGUoKSAmJiAoKml0KS0+d2FzQWJvdmVQcmlvcml0eUN1dG9mZkF0TGFzdFBy
aW9yaXR5VXBkYXRlKCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVzdHJveUJhY2tp
bmcoKCppdCksIHJlc291cmNlUHJvdmlkZXIpOwogICAgIH0KQEAgLTIyNiw2ICsyNDQsMTAgQEAg
dm9pZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJlZHVjZU1lbW9yeShzaXplX3QgbGlt
aXRCeXRlcywgQ0NSZXNvdXJjZVByb3YKIHZvaWQgQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
OjpyZWR1Y2VNZW1vcnkoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKQogewog
ICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSAmJiBDQ1Byb3h5Ojppc01haW5UaHJl
YWRCbG9ja2VkKCkpOworCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGJhY2tpbmdzIGxpc3Qg
aXMgdXAgdG8gZGF0ZSBhbmQgc29ydGVkIGJlZm9yZSB0cmF2ZXJzaW5nIGl0LgorICAgIHVwZGF0
ZUJhY2tpbmdzUHJpb3JpdGllcygpOworCiAgICAgcmVkdWNlTWVtb3J5KG1fbWVtb3J5QXZhaWxh
YmxlQnl0ZXMsIHJlc291cmNlUHJvdmlkZXIpOwogICAgIEFTU0VSVChtZW1vcnlVc2VCeXRlcygp
IDw9IG1heE1lbW9yeUxpbWl0Qnl0ZXMoKSk7CiAKQEAgLTMwOCwxMCArMzMwLDggQEAgdm9pZCBD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OnJldHVybkJhY2tpbmdUZXh0dXJlKENDUHJpb3Jp
dGl6ZWRUZXh0dXJlKiB0ZXgKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkg
fHwgKENDUHJveHk6OmlzSW1wbFRocmVhZCgpICYmIENDUHJveHk6OmlzTWFpblRocmVhZEJsb2Nr
ZWQoKSkpOwogICAgIGlmICh0ZXh0dXJlLT5iYWNraW5nKCkpIHsKLSAgICAgICAgLy8gTW92ZSB0
aGUgYmFja2luZyB0ZXh0dXJlIHRvIHRoZSBmcm9udCBmb3IgZXZpY3Rpb24vcmVjeWNsaW5nIGFu
ZCB1bmxpbmsgaXQuCi0gICAgICAgIG1fYmFja2luZ3MucmVtb3ZlKHRleHR1cmUtPmJhY2tpbmco
KSk7Ci0gICAgICAgIG1fYmFja2luZ3MuaW5zZXJ0QmVmb3JlKG1fYmFja2luZ3MuYmVnaW4oKSwg
dGV4dHVyZS0+YmFja2luZygpKTsKICAgICAgICAgdGV4dHVyZS0+dW5saW5rKCk7CisgICAgICAg
IG1fbmVlZHNVcGRhdGVCYWNraW5nc1ByaW9yaXRpdGVzID0gdHJ1ZTsKICAgICB9CiB9CiAKQEAg
LTMyOSw2ICszNDksNyBAQCBDQ1ByaW9yaXRpemVkVGV4dHVyZTo6QmFja2luZyogQ0NQcmlvcml0
aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGVCYWNraW5nKEludFNpegogCiB2b2lkIENDUHJpb3Jp
dGl6ZWRUZXh0dXJlTWFuYWdlcjo6ZGVzdHJveUJhY2tpbmcoQ0NQcmlvcml0aXplZFRleHR1cmU6
OkJhY2tpbmcqIGJhY2tpbmcsIENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikK
IHsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWlu
VGhyZWFkQmxvY2tlZCgpKTsKICAgICBBU1NFUlQoYmFja2luZyk7CiAgICAgQVNTRVJUKCFiYWNr
aW5nLT5vd25lcigpIHx8ICFiYWNraW5nLT5vd25lcigpLT5pc0Fib3ZlUHJpb3JpdHlDdXRvZmYo
KSk7CiAgICAgQVNTRVJUKCFiYWNraW5nLT5vd25lcigpIHx8ICFiYWNraW5nLT5vd25lcigpLT5p
c1NlbGZNYW5hZ2VkKCkpOwpAQCAtMzQ0LDExICszNjUsMTAgQEAgdm9pZCBDQ1ByaW9yaXRpemVk
VGV4dHVyZU1hbmFnZXI6OmRlc3Ryb3lCYWNraW5nKENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNr
aW5nKgogICAgIGRlbGV0ZSBiYWNraW5nOwogfQogCi0KICNpZiAhQVNTRVJUX0RJU0FCTEVECiB2
b2lkIENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6YXNzZXJ0SW52YXJpYW50cygpCiB7Ci0g
ICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoQ0NQcm94eTo6
aXNJbXBsVGhyZWFkKCkgJiYgQ0NQcm94eTo6aXNNYWluVGhyZWFkQmxvY2tlZCgpKTsKIAogICAg
IC8vIElmIHdlIGhpdCBhbnkgb2YgdGhlc2UgYXNzZXJ0cywgdGhlcmUgaXMgYSBidWcgaW4gdGhp
cyBjbGFzcy4gVG8gc2VlCiAgICAgLy8gd2hlcmUgdGhlIGJ1ZyBpcywgY2FsbCB0aGlzIGZ1bmN0
aW9uIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZgpAQCAtMzcxLDE1ICszOTEsMjEgQEAgdm9p
ZCBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmFzc2VydEludmFyaWFudHMoKQogICAgIC8v
IEF0IGFsbCB0aW1lcywgYmFja2luZ3MgdGhhdCBjYW4gYmUgZXZpY3RlZCBtdXN0IGFsd2F5cyBj
b21lIGJlZm9yZQogICAgIC8vIGJhY2tpbmdzIHRoYXQgY2FuJ3QgYmUgZXZpY3RlZCBpbiB0aGUg
YmFja2luZyB0ZXh0dXJlIGxpc3QgKG90aGVyd2lzZQogICAgIC8vIHJlZHVjZU1lbW9yeSB3aWxs
IG5vdCBmaW5kIGFsbCB0ZXh0dXJlcyBhdmFpbGFibGUgZm9yIGV2aWN0aW9uL3JlY3ljbGluZyku
Ci0gICAgYm9vbCByZWFjaGVkUHJvdGVjdGVkID0gZmFsc2U7CisgICAgYm9vbCByZWFjaGVkT3du
ZWQgPSBmYWxzZTsKKyAgICBib29sIHJlYWNoZWRBYm92ZUN1dG9mZiA9IGZhbHNlOwogICAgIGZv
ciAoQmFja2luZ1NldDo6aXRlcmF0b3IgaXQgPSBtX2JhY2tpbmdzLmJlZ2luKCk7IGl0ICE9IG1f
YmFja2luZ3MuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKCgqaXQpLT5vd25lcigpICYmICgq
aXQpLT5vd25lcigpLT5pc0Fib3ZlUHJpb3JpdHlDdXRvZmYoKSkKLSAgICAgICAgICAgIHJlYWNo
ZWRQcm90ZWN0ZWQgPSB0cnVlOwotICAgICAgICBpZiAocmVhY2hlZFByb3RlY3RlZCkKLSAgICAg
ICAgICAgIEFTU0VSVCgoKml0KS0+b3duZXIoKSAmJiAoKml0KS0+b3duZXIoKS0+aXNBYm92ZVBy
aW9yaXR5Q3V0b2ZmKCkpOworICAgICAgICBpZiAoKCppdCktPmhhZE93bmVyQXRMYXN0UHJpb3Jp
dHlVcGRhdGUoKSkKKyAgICAgICAgICAgIHJlYWNoZWRPd25lZCA9IHRydWU7CisgICAgICAgIGlm
ICgoKml0KS0+d2FzQWJvdmVQcmlvcml0eUN1dG9mZkF0TGFzdFByaW9yaXR5VXBkYXRlKCkpCisg
ICAgICAgICAgICByZWFjaGVkQWJvdmVDdXRvZmYgPSB0cnVlOworICAgICAgICBpZiAocmVhY2hl
ZE93bmVkKQorICAgICAgICAgICAgQVNTRVJUKCgqaXQpLT5oYWRPd25lckF0TGFzdFByaW9yaXR5
VXBkYXRlKCkpOworICAgICAgICBpZiAocmVhY2hlZEFib3ZlQ3V0b2ZmKSB7CisgICAgICAgICAg
ICBBU1NFUlQoKCppdCktPmhhZE93bmVyQXRMYXN0UHJpb3JpdHlVcGRhdGUoKSAmJiAoKml0KS0+
d2FzQWJvdmVQcmlvcml0eUN1dG9mZkF0TGFzdFByaW9yaXR5VXBkYXRlKCkpOworICAgICAgICAg
ICAgQVNTRVJUKHJlYWNoZWRPd25lZCk7CisgICAgICAgIH0KICAgICB9CiB9CiAjZW5kaWYKIAot
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlci5oCmluZGV4IGU5MGIyNTM1NWViZGNhMGM2NTg4Y2FhZjhjYWE2YWM4
ZjNkOGRhZTMuLjZjMjM3ZTdhYTk3MTdmNTBlMTdmMjU2NjVkYmM1ZTliM2Q0NjQyMjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlci5oCkBAIC04Nywx
MSArODcsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB1bnJlZ2lzdGVyVGV4dHVyZShDQ1ByaW9yaXRp
emVkVGV4dHVyZSopOwogICAgIHZvaWQgcmV0dXJuQmFja2luZ1RleHR1cmUoQ0NQcmlvcml0aXpl
ZFRleHR1cmUqKTsKIAotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICB2b2lkIGFzc2VydEludmFy
aWFudHMoKTsKLSNlbmRpZgotCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDQ1ByaW9yaXRp
emVkVGV4dHVyZVRlc3Q7CisKICAgICAvLyBDb21wYXJlIHRleHR1cmVzLiBIaWdoZXN0IHByaW9y
aXR5IGZpcnN0LgogICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlVGV4dHVyZXMoQ0NQcmlv
cml0aXplZFRleHR1cmUqIGEsIENDUHJpb3JpdGl6ZWRUZXh0dXJlKiBiKQogICAgIHsKQEAgLTEw
MiwyMCArMTAwLDMwIEBAIHByaXZhdGU6CiAgICAgLy8gQ29tcGFyZSBiYWNraW5ncy4gTG93ZXN0
IHByaW9yaXR5IGZpcnN0LgogICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlQmFja2luZ3Mo
Q0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcqIGEsIENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpC
YWNraW5nKiBiKQogICAgIHsKLSAgICAgICAgaW50IHByaW9yaXR5QSA9IGEtPm93bmVyKCkgPyBh
LT5vd25lcigpLT5yZXF1ZXN0UHJpb3JpdHkoKSA6IENDUHJpb3JpdHlDYWxjdWxhdG9yOjpsb3dl
c3RQcmlvcml0eSgpOwotICAgICAgICBpbnQgcHJpb3JpdHlCID0gYi0+b3duZXIoKSA/IGItPm93
bmVyKCktPnJlcXVlc3RQcmlvcml0eSgpIDogQ0NQcmlvcml0eUNhbGN1bGF0b3I6Omxvd2VzdFBy
aW9yaXR5KCk7Ci0gICAgICAgIGlmIChwcmlvcml0eUEgPT0gcHJpb3JpdHlCKQotICAgICAgICAg
ICAgcmV0dXJuIGEgPCBiOwotICAgICAgICByZXR1cm4gQ0NQcmlvcml0eUNhbGN1bGF0b3I6OnBy
aW9yaXR5SXNMb3dlcihwcmlvcml0eUEsIHByaW9yaXR5Qik7CisgICAgICAgIGludCBwcmlvcml0
eUEgPSBhLT5yZXF1ZXN0UHJpb3JpdHlBdExhc3RQcmlvcml0eVVwZGF0ZSgpOworICAgICAgICBp
bnQgcHJpb3JpdHlCID0gYi0+cmVxdWVzdFByaW9yaXR5QXRMYXN0UHJpb3JpdHlVcGRhdGUoKTsK
KyAgICAgICAgaWYgKHByaW9yaXR5QSAhPSBwcmlvcml0eUIpCisgICAgICAgICAgICByZXR1cm4g
Q0NQcmlvcml0eUNhbGN1bGF0b3I6OnByaW9yaXR5SXNMb3dlcihwcmlvcml0eUEsIHByaW9yaXR5
Qik7CisgICAgICAgIGJvb2wgYWJvdmVDdXRvZmZBID0gYS0+d2FzQWJvdmVQcmlvcml0eUN1dG9m
ZkF0TGFzdFByaW9yaXR5VXBkYXRlKCk7CisgICAgICAgIGJvb2wgYWJvdmVDdXRvZmZCID0gYi0+
d2FzQWJvdmVQcmlvcml0eUN1dG9mZkF0TGFzdFByaW9yaXR5VXBkYXRlKCk7CisgICAgICAgIGlm
ICghYWJvdmVDdXRvZmZBICYmIGFib3ZlQ3V0b2ZmQikKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBpZiAoYWJvdmVDdXRvZmZBICYmICFhYm92ZUN1dG9mZkIpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBhIDwgYjsKICAgICB9CiAKICAgICBDQ1By
aW9yaXRpemVkVGV4dHVyZU1hbmFnZXIoc2l6ZV90IG1heE1lbW9yeUxpbWl0Qnl0ZXMsIGludCBt
YXhUZXh0dXJlU2l6ZSwgaW50IHBvb2wpOwogCisgICAgdm9pZCB1cGRhdGVCYWNraW5nc1ByaW9y
aXRpZXMoKTsKICAgICB2b2lkIHJlZHVjZU1lbW9yeShzaXplX3QgbGltaXQsIENDUmVzb3VyY2VQ
cm92aWRlciopOwotCiAgICAgQ0NQcmlvcml0aXplZFRleHR1cmU6OkJhY2tpbmcqIGNyZWF0ZUJh
Y2tpbmcoSW50U2l6ZSwgR0MzRGVudW0gZm9ybWF0LCBDQ1Jlc291cmNlUHJvdmlkZXIqKTsKICAg
ICB2b2lkIGRlc3Ryb3lCYWNraW5nKENDUHJpb3JpdGl6ZWRUZXh0dXJlOjpCYWNraW5nKiwgQ0NS
ZXNvdXJjZVByb3ZpZGVyKik7CiAKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgdm9pZCBhc3Nl
cnRJbnZhcmlhbnRzKCk7CisjZW5kaWYKKwogICAgIHNpemVfdCBtX21heE1lbW9yeUxpbWl0Qnl0
ZXM7CiAgICAgdW5zaWduZWQgbV9wcmlvcml0eUN1dG9mZjsKICAgICBzaXplX3QgbV9tZW1vcnlV
c2VCeXRlczsKQEAgLTEzMyw2ICsxNDEsMTAgQEAgcHJpdmF0ZToKIAogICAgIFRleHR1cmVWZWN0
b3IgbV90ZW1wVGV4dHVyZVZlY3RvcjsKICAgICBCYWNraW5nVmVjdG9yIG1fdGVtcEJhY2tpbmdW
ZWN0b3I7CisKKyAgICAvLyBTZXQgYnkgdGhlIG1haW4gdGhyZWFkIHdoZW4gaXQgYWRqdXN0IHBy
aW9yaXRpZXMgaW4gc3VjaCBhIHdheSB0aGF0CisgICAgLy8gdGhlIG1fYmFja2luZ3MgYXJyYXkn
cyB2aWV3IG9mIHByaW9yaXRpZXMgaXMgbm93IG91dCBvZiBkYXRlLgorICAgIGJvb2wgbV9uZWVk
c1VwZGF0ZUJhY2tpbmdzUHJpb3JpdGl0ZXM7CiB9OwogCiB9IC8vIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NQcmlvcml0aXplZFRleHR1cmVU
ZXN0LmNwcAppbmRleCA5MDc2ZDM0ZDQ5YzdkNjBkMWIyNDJkYTk0ZTQ4NmRlNzU4YWM4NjFlLi43
OTI1ZjVkNzQ4MDg0NzE3MzMxMjMwNjIwNjI4NjNkYjMxZTcwOTRhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3Qu
Y3BwCkBAIC0zOCw3ICszOCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFt
ZXNwYWNlIFdlYktpdFRlc3RzOwogdXNpbmcgbmFtZXNwYWNlIFdURjsKIAotbmFtZXNwYWNlIHsK
K25hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0IDog
cHVibGljIHRlc3Rpbmc6OlRlc3QgewogcHVibGljOgpAQCAtNzAsMTEgKzcwLDEwIEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgdmFsaWRhdGVUZXh0dXJlKE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVy
ZT4mIHRleHR1cmUsIGJvb2wgcmVxdWVzdExhdGUpCiAgICAgewotI2lmICFBU1NFUlRfRElTQUJM
RUQKLSAgICAgICAgdGV4dHVyZS0+dGV4dHVyZU1hbmFnZXIoKS0+YXNzZXJ0SW52YXJpYW50cygp
OwotI2VuZGlmCisgICAgICAgIHRleHR1cmVNYW5hZ2VyQXNzZXJ0SW52YXJpYW50cyh0ZXh0dXJl
LT50ZXh0dXJlTWFuYWdlcigpKTsKICAgICAgICAgaWYgKHJlcXVlc3RMYXRlKQogICAgICAgICAg
ICAgdGV4dHVyZS0+cmVxdWVzdExhdGUoKTsKKyAgICAgICAgdGV4dHVyZU1hbmFnZXJBc3NlcnRJ
bnZhcmlhbnRzKHRleHR1cmUtPnRleHR1cmVNYW5hZ2VyKCkpOwogICAgICAgICBEZWJ1Z1Njb3Bl
ZFNldEltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZCBpbXBsVGhyZWFkQW5kTWFpblRocmVh
ZEJsb2NrZWQ7CiAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRleHR1cmUtPmNhbkFjcXVpcmVCYWNr
aW5nVGV4dHVyZSgpOwogICAgICAgICBpZiAoc3VjY2VzcykKQEAgLTgyLDExICs4MSwzNiBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBzdWNjZXNzOwogICAgIH0KIAorICAgIHZvaWQgcHJpb3Jp
dGl6ZVRleHR1cmVzQW5kQmFja2luZ3MoQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKiB0ZXh0
dXJlTWFuYWdlcikKKyAgICB7CisgICAgICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4
dHVyZXMoKTsKKyAgICAgICAgdGV4dHVyZU1hbmFnZXJVcGRhdGVCYWNraW5nc1ByaW9yaXRpZXMo
dGV4dHVyZU1hbmFnZXIpOworICAgIH0KKworICAgIHZvaWQgdGV4dHVyZU1hbmFnZXJVcGRhdGVC
YWNraW5nc1ByaW9yaXRpZXMoQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFu
YWdlcikKKyAgICB7CisgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZEFuZE1haW5UaHJl
YWRCbG9ja2VkIGltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZDsKKyAgICAgICAgdGV4dHVy
ZU1hbmFnZXItPnVwZGF0ZUJhY2tpbmdzUHJpb3JpdGllcygpOworICAgIH0KKwogICAgIENDUmVz
b3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcigpCiAgICAgewogICAgICAgIHJldHVybiBt
X3Jlc291cmNlUHJvdmlkZXIuZ2V0KCk7CiAgICAgfQogCisgICAgdm9pZCB0ZXh0dXJlTWFuYWdl
ckFzc2VydEludmFyaWFudHMoQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFu
YWdlcikKKyAgICB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBEZWJ1Z1Njb3BlZFNl
dEltcGxUaHJlYWRBbmRNYWluVGhyZWFkQmxvY2tlZCBpbXBsVGhyZWFkQW5kTWFpblRocmVhZEJs
b2NrZWQ7CisgICAgICAgIHRleHR1cmVNYW5hZ2VyLT5hc3NlcnRJbnZhcmlhbnRzKCk7CisjZW5k
aWYKKyAgICB9CisKKyAgICBib29sIHRleHR1cmVCYWNraW5nSXNBYm92ZVByaW9yaXR5Q3V0b2Zm
KENDUHJpb3JpdGl6ZWRUZXh0dXJlKiB0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRl
eHR1cmUtPm1fYmFja2luZy0+d2FzQWJvdmVQcmlvcml0eUN1dG9mZkF0TGFzdFByaW9yaXR5VXBk
YXRlKCk7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgY29uc3QgSW50U2l6ZSBtX3RleHR1cmVT
aXplOwogICAgIGNvbnN0IEdDM0RlbnVtIG1fdGV4dHVyZUZvcm1hdDsKQEAgLTk1LDYgKzExOSwx
MCBAQCBwcm90ZWN0ZWQ6CiAgICAgT3duUHRyPENDUmVzb3VyY2VQcm92aWRlcj4gbV9yZXNvdXJj
ZVByb3ZpZGVyOwogfTsKIAorfQorCituYW1lc3BhY2UgeworCiBURVNUX0YoQ0NQcmlvcml0aXpl
ZFRleHR1cmVUZXN0LCByZXF1ZXN0VGV4dHVyZUV4Y2VlZGluZ01heExpbWl0KQogewogICAgIGNv
bnN0IHNpemVfdCBtYXhUZXh0dXJlcyA9IDg7CkBAIC0xMTEsNyArMTM5LDcgQEAgVEVTVF9GKEND
UHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgcmVxdWVzdFRleHR1cmVFeGNlZWRpbmdNYXhMaW1pdCkK
ICAgICAgICAgdGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eSgxMDAgKyBpKTsKIAogICAg
IC8vIE9ubHkgbG93ZXIgaGFsZiBzaG91bGQgYmUgYXZhaWxhYmxlLgotICAgIHRleHR1cmVNYW5h
Z2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBwcmlvcml0aXplVGV4dHVyZXNBbmRCYWNr
aW5ncyh0ZXh0dXJlTWFuYWdlci5nZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0
dXJlKHRleHR1cmVzWzBdLCBmYWxzZSkpOwogICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVy
ZSh0ZXh0dXJlc1s3XSwgZmFsc2UpKTsKICAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJl
KHRleHR1cmVzWzhdLCBmYWxzZSkpOwpAQCAtMTIyLDcgKzE1MCw3IEBAIFRFU1RfRihDQ1ByaW9y
aXRpemVkVGV4dHVyZVRlc3QsIHJlcXVlc3RUZXh0dXJlRXhjZWVkaW5nTWF4TGltaXQpCiAgICAg
ICAgIHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMTAwIC0gaSk7CiAKICAgICAvLyBP
bmx5IHVwcGVyIGhhbGYgc2hvdWxkIGJlIGF2YWlsYWJsZS4KLSAgICB0ZXh0dXJlTWFuYWdlci0+
cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgcHJpb3JpdGl6ZVRleHR1cmVzQW5kQmFja2luZ3Mo
dGV4dHVyZU1hbmFnZXIuZ2V0KCkpOwogICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUo
dGV4dHVyZXNbMF0sIGZhbHNlKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0
ZXh0dXJlc1s3XSwgZmFsc2UpKTsKICAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4
dHVyZXNbOF0sIGZhbHNlKSk7CkBAIC0xNDgsNyArMTc2LDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6
ZWRUZXh0dXJlVGVzdCwgY2hhbmdlTWVtb3J5TGltaXRzKQogCiAgICAgLy8gU2V0IG1heCBsaW1p
dCB0byA4IHRleHR1cmVzCiAgICAgdGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0
ZXModGV4dHVyZXNNZW1vcnlTaXplKDgpKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6
ZVRleHR1cmVzKCk7CisgICAgcHJpb3JpdGl6ZVRleHR1cmVzQW5kQmFja2luZ3ModGV4dHVyZU1h
bmFnZXIuZ2V0KCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsr
aSkKICAgICAgICAgdmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzW2ldLCBmYWxzZSk7CiAgICAgewpA
QCAtMTYxLDcgKzE4OSw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIGNoYW5n
ZU1lbW9yeUxpbWl0cykKIAogICAgIC8vIFNldCBtYXggbGltaXQgdG8gNSB0ZXh0dXJlcwogICAg
IHRleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKHRleHR1cmVzTWVtb3J5U2l6
ZSg1KSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHBy
aW9yaXRpemVUZXh0dXJlc0FuZEJhY2tpbmdzKHRleHR1cmVNYW5hZ2VyLmdldCgpKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1heFRleHR1cmVzOyArK2kpCiAgICAgICAgIEVYUEVDVF9F
USh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbaV0sIGZhbHNlKSwgaSA8IDUpOwogICAgIHsKQEAg
LTE3NCw3ICsyMDIsNyBAQCBURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCBjaGFuZ2VN
ZW1vcnlMaW1pdHMpCiAKICAgICAvLyBTZXQgbWF4IGxpbWl0IHRvIDQgdGV4dHVyZXMKICAgICB0
ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcyh0ZXh0dXJlc01lbW9yeVNpemUo
NCkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBwcmlv
cml0aXplVGV4dHVyZXNBbmRCYWNraW5ncyh0ZXh0dXJlTWFuYWdlci5nZXQoKSk7CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgKytpKQogICAgICAgICBFWFBFQ1RfRVEo
dmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzW2ldLCBmYWxzZSksIGkgPCA0KTsKICAgICB7CkBAIC0y
MDQsNyArMjMyLDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgdGV4dHVyZU1h
bmFnZXJQYXJ0aWFsVXBkYXRlVGV4dHVyZXMpCiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG51bVRleHR1cmVzOyArK2kpCiAgICAgICAgIHRleHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3Jp
dHkoMjAwICsgaSk7Ci0gICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOwor
ICAgIHByaW9yaXRpemVUZXh0dXJlc0FuZEJhY2tpbmdzKHRleHR1cmVNYW5hZ2VyLmdldCgpKTsK
IAogICAgIC8vIEFsbG9jYXRlIHRleHR1cmVzIHdoaWNoIGFyZSBjdXJyZW50bHkgaGlnaCBwcmlv
cml0eS4KICAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNbMF0sIGZhbHNl
KSk7CkBAIC0yMTksNyArMjQ3LDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwg
dGV4dHVyZU1hbmFnZXJQYXJ0aWFsVXBkYXRlVGV4dHVyZXMpCiAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG51bVRleHR1cmVzOyArK2kpCiAgICAgICAgIG1vcmVUZXh0dXJlc1tpXS0+c2V0
UmVxdWVzdFByaW9yaXR5KDEwMCArIGkpOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXpl
VGV4dHVyZXMoKTsKKyAgICBwcmlvcml0aXplVGV4dHVyZXNBbmRCYWNraW5ncyh0ZXh0dXJlTWFu
YWdlci5nZXQoKSk7CiAKICAgICAvLyBUZXh0dXJlcyBhcmUgbm93IGJlbG93IGN1dG9mZi4KICAg
ICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzBdLCBmYWxzZSkpOwpAQCAt
MjY2LDcgKzI5NCw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHRleHR1cmVN
YW5hZ2VyUHJpb3JpdGllc0FyZUVxdWFsKQogCiAgICAgLy8gU2V0IG1heCBsaW1pdCB0byA4IHRl
eHR1cmVzCiAgICAgdGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXModGV4dHVy
ZXNNZW1vcnlTaXplKDgpKTsKLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3JpdGl6ZVRleHR1cmVz
KCk7CisgICAgcHJpb3JpdGl6ZVRleHR1cmVzQW5kQmFja2luZ3ModGV4dHVyZU1hbmFnZXIuZ2V0
KCkpOwogCiAgICAgLy8gVGhlIHR3byBoaWdoIHByaW9yaXR5IHRleHR1cmVzIHNob3VsZCBiZSBh
dmFpbGFibGUsIG90aGVycyBzaG91bGQgbm90LgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
MjsgKytpKQpAQCAtMjk4LDcgKzMyNiw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRl
c3QsIHRleHR1cmVNYW5hZ2VyRGVzdHJveWVkRmlyc3QpCiAgICAgRVhQRUNUX0ZBTFNFKHRleHR1
cmUtPmhhdmVCYWNraW5nVGV4dHVyZSgpKTsKIAogICAgIHRleHR1cmUtPnNldFJlcXVlc3RQcmlv
cml0eSgxMDApOwotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAg
ICBwcmlvcml0aXplVGV4dHVyZXNBbmRCYWNraW5ncyh0ZXh0dXJlTWFuYWdlci5nZXQoKSk7CiAK
ICAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZSwgZmFsc2UpKTsKICAgICBF
WFBFQ1RfVFJVRSh0ZXh0dXJlLT5jYW5BY3F1aXJlQmFja2luZ1RleHR1cmUoKSk7CkBAIC0zMjQs
NyArMzUyLDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgdGV4dHVyZU1vdmVk
VG9OZXdNYW5hZ2VyKQogICAgIEVYUEVDVF9GQUxTRSh0ZXh0dXJlLT5oYXZlQmFja2luZ1RleHR1
cmUoKSk7CiAKICAgICB0ZXh0dXJlLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMTAwKTsKLSAgICB0ZXh0
dXJlTWFuYWdlck9uZS0+cHJpb3JpdGl6ZVRleHR1cmVzKCk7CisgICAgcHJpb3JpdGl6ZVRleHR1
cmVzQW5kQmFja2luZ3ModGV4dHVyZU1hbmFnZXJPbmUuZ2V0KCkpOwogCiAgICAgRVhQRUNUX1RS
VUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmUsIGZhbHNlKSk7CiAgICAgRVhQRUNUX1RSVUUodGV4
dHVyZS0+Y2FuQWNxdWlyZUJhY2tpbmdUZXh0dXJlKCkpOwpAQCAtMzQzLDcgKzM3MSw3IEBAIFRF
U1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHRleHR1cmVNb3ZlZFRvTmV3TWFuYWdlcikK
IAogICAgIHRleHR1cmUtPnNldFRleHR1cmVNYW5hZ2VyKHRleHR1cmVNYW5hZ2VyVHdvLmdldCgp
KTsKIAotICAgIHRleHR1cmVNYW5hZ2VyVHdvLT5wcmlvcml0aXplVGV4dHVyZXMoKTsKKyAgICBw
cmlvcml0aXplVGV4dHVyZXNBbmRCYWNraW5ncyh0ZXh0dXJlTWFuYWdlclR3by5nZXQoKSk7CiAK
ICAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZSwgZmFsc2UpKTsKICAgICBF
WFBFQ1RfVFJVRSh0ZXh0dXJlLT5jYW5BY3F1aXJlQmFja2luZ1RleHR1cmUoKSk7CkBAIC0zNzQs
NyArNDAyLDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0dXJlVGVzdCwgcmVuZGVyU3VyZmFj
ZXNSZWR1Y2VNZW1vcnlBdmFpbGFibGVPdXRzaWRlUm9vdFMKICAgICAgICAgdGV4dHVyZXNbaV0t
PnNldFJlcXVlc3RQcmlvcml0eSgxMDAgKyBpKTsKIAogICAgIC8vIE9ubHkgbG93ZXIgaGFsZiBz
aG91bGQgYmUgYXZhaWxhYmxlLgotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0aXplVGV4dHVy
ZXMoKTsKKyAgICBwcmlvcml0aXplVGV4dHVyZXNBbmRCYWNraW5ncyh0ZXh0dXJlTWFuYWdlci5n
ZXQoKSk7CiAgICAgRVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzBdLCBmYWxz
ZSkpOwogICAgIEVYUEVDVF9UUlVFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1szXSwgZmFsc2Up
KTsKICAgICBFWFBFQ1RfRkFMU0UodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzWzRdLCBmYWxzZSkp
OwpAQCAtMzg1LDcgKzQxMyw3IEBAIFRFU1RfRihDQ1ByaW9yaXRpemVkVGV4dHVyZVRlc3QsIHJl
bmRlclN1cmZhY2VzUmVkdWNlTWVtb3J5QXZhaWxhYmxlT3V0c2lkZVJvb3RTCiAgICAgICAgIHRl
eHR1cmVzW2ldLT5zZXRSZXF1ZXN0UHJpb3JpdHkoMTAwIC0gaSk7CiAKICAgICAvLyBPbmx5IHVw
cGVyIGhhbGYgc2hvdWxkIGJlIGF2YWlsYWJsZS4KLSAgICB0ZXh0dXJlTWFuYWdlci0+cHJpb3Jp
dGl6ZVRleHR1cmVzKCk7CisgICAgcHJpb3JpdGl6ZVRleHR1cmVzQW5kQmFja2luZ3ModGV4dHVy
ZU1hbmFnZXIuZ2V0KCkpOwogICAgIEVYUEVDVF9GQUxTRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVy
ZXNbMF0sIGZhbHNlKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0ZXh0dXJl
c1szXSwgZmFsc2UpKTsKICAgICBFWFBFQ1RfVFJVRSh2YWxpZGF0ZVRleHR1cmUodGV4dHVyZXNb
NF0sIGZhbHNlKSk7CkBAIC00MjAsNyArNDQ4LDcgQEAgVEVTVF9GKENDUHJpb3JpdGl6ZWRUZXh0
dXJlVGVzdCwgcmVuZGVyU3VyZmFjZXNSZWR1Y2VNZW1vcnlBdmFpbGFibGVGb3JSZXF1ZXN0TGEK
ICAgICAgICAgdGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eSgxMDApOwogCiAgICAgLy8g
VGhlIGZpcnN0IGZvdXIgdG8gYmUgcmVxdWVzdGVkIGxhdGUgd2lsbCBiZSBhdmFpbGFibGUuCi0g
ICAgdGV4dHVyZU1hbmFnZXItPnByaW9yaXRpemVUZXh0dXJlcygpOworICAgIHByaW9yaXRpemVU
ZXh0dXJlc0FuZEJhY2tpbmdzKHRleHR1cmVNYW5hZ2VyLmdldCgpKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKICAgICAgICAgRVhQRUNUX0ZBTFNFKHZh
bGlkYXRlVGV4dHVyZSh0ZXh0dXJlc1tpXSwgZmFsc2UpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbWF4VGV4dHVyZXM7IGkgKz0gMikKQEAgLTQ1OCw3ICs0ODYsNyBAQCBURVNUX0Yo
Q0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCB3aGVuUmVuZGVyU3VyZmFjZU5vdEF2YWlsYWJsZVRl
eHR1cmVzQWxzb05vdEF2YQogICAgIGZvciAoc2l6ZV90IGkgPSA2OyBpIDwgODsgKytpKQogICAg
ICAgICB0ZXh0dXJlc1tpXS0+c2V0UmVxdWVzdFByaW9yaXR5KENDUHJpb3JpdHlDYWxjdWxhdG9y
Ojp2aXNpYmxlUHJpb3JpdHkoZmFsc2UpKTsKIAotICAgIHRleHR1cmVNYW5hZ2VyLT5wcmlvcml0
aXplVGV4dHVyZXMoKTsKKyAgICBwcmlvcml0aXplVGV4dHVyZXNBbmRCYWNraW5ncyh0ZXh0dXJl
TWFuYWdlci5nZXQoKSk7CiAKICAgICAvLyBVbmFibGUgdG8gcmVxdWVzdExhdGUgdGV4dHVyZXMg
aW4gdGhlIGNoaWxkIHN1cmZhY2UuCiAgICAgRVhQRUNUX0ZBTFNFKHZhbGlkYXRlVGV4dHVyZSh0
ZXh0dXJlc1s2XSwgdHJ1ZSkpOwpAQCAtNDc2LDQgKzUwNCw1MyBAQCBURVNUX0YoQ0NQcmlvcml0
aXplZFRleHR1cmVUZXN0LCB3aGVuUmVuZGVyU3VyZmFjZU5vdEF2YWlsYWJsZVRleHR1cmVzQWxz
b05vdEF2YQogICAgIHRleHR1cmVNYW5hZ2VyLT5jbGVhckFsbE1lbW9yeShyZXNvdXJjZVByb3Zp
ZGVyKCkpOwogfQogCitURVNUX0YoQ0NQcmlvcml0aXplZFRleHR1cmVUZXN0LCByZXF1ZXN0TGF0
ZUJhY2tpbmdzU29ydGluZykKK3sKKyAgICBjb25zdCBzaXplX3QgbWF4VGV4dHVyZXMgPSA4Owor
ICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0g
Y3JlYXRlTWFuYWdlcihtYXhUZXh0dXJlcyk7CisgICAgdGV4dHVyZU1hbmFnZXItPnNldE1heE1l
bW9yeUxpbWl0Qnl0ZXModGV4dHVyZXNNZW1vcnlTaXplKG1heFRleHR1cmVzKSk7CisKKyAgICAv
LyBDcmVhdGUgdGV4dHVyZXMgdG8gZmlsbCBvdXIgbWVtb3J5IGxpbWl0LgorICAgIE93blB0cjxD
Q1ByaW9yaXRpemVkVGV4dHVyZT4gdGV4dHVyZXNbbWF4VGV4dHVyZXNdOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKKyAgICAgICAgdGV4dHVyZXNbaV0gPSB0
ZXh0dXJlTWFuYWdlci0+Y3JlYXRlVGV4dHVyZShtX3RleHR1cmVTaXplLCBtX3RleHR1cmVGb3Jt
YXQpOworCisgICAgLy8gU2V0IGVxdWFsIHByaW9yaXRpZXMsIGFuZCBhbGxvY2F0ZSBiYWNraW5n
cyBmb3IgYWxsIHRleHR1cmVzLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWF4VGV4dHVy
ZXM7ICsraSkKKyAgICAgICAgdGV4dHVyZXNbaV0tPnNldFJlcXVlc3RQcmlvcml0eSgxMDApOwor
ICAgIHByaW9yaXRpemVUZXh0dXJlc0FuZEJhY2tpbmdzKHRleHR1cmVNYW5hZ2VyLmdldCgpKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKKyAgICAgICAg
RVhQRUNUX1RSVUUodmFsaWRhdGVUZXh0dXJlKHRleHR1cmVzW2ldLCBmYWxzZSkpOworCisgICAg
Ly8gRHJvcCB0aGUgbWVtb3J5IGxpbWl0IGFuZCBwcmlvcml0aXplIChub25lIHdpbGwgYmUgYWJv
dmUgdGhlIHRocmVzaG9sZCwKKyAgICAvLyBidXQgdGhleSBzdGlsbCBoYXZlIGJhY2tpbmdzIGJl
Y2F1c2UgcmVkdWNlTWVtb3J5IGhhc24ndCBiZWVuIGNhbGxlZCkuCisgICAgdGV4dHVyZU1hbmFn
ZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXModGV4dHVyZXNNZW1vcnlTaXplKG1heFRleHR1cmVz
IC8gMikpOworICAgIHByaW9yaXRpemVUZXh0dXJlc0FuZEJhY2tpbmdzKHRleHR1cmVNYW5hZ2Vy
LmdldCgpKTsKKworICAgIC8vIFB1c2ggaGFsZiBvZiB0aGVtIGJhY2sgb3ZlciB0aGUgbGltaXQu
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSArPSAyKQorICAgICAg
ICBFWFBFQ1RfVFJVRSh0ZXh0dXJlc1tpXS0+cmVxdWVzdExhdGUoKSk7CisKKyAgICAvLyBQdXNo
IHRoZSBwcmlvcml0aWVzIHRvIHRoZSBiYWNraW5ncyBhcnJheSBhbmQgc29ydCB0aGUgYmFja2lu
Z3MgYXJyYXkKKyAgICB0ZXh0dXJlTWFuYWdlclVwZGF0ZUJhY2tpbmdzUHJpb3JpdGllcyh0ZXh0
dXJlTWFuYWdlci5nZXQoKSk7CisKKyAgICAvLyBBc3NlcnQgdGhhdCB0aGUgYmFja2luZ3MgbGlz
dCBiZSBzb3J0ZWQgd2l0aCB0aGUgYmVsb3ctbGltaXQgYmFja2luZ3MKKyAgICAvLyBiZWZvcmUg
dGhlIGFib3ZlLWxpbWl0IGJhY2tpbmdzLgorICAgIHRleHR1cmVNYW5hZ2VyQXNzZXJ0SW52YXJp
YW50cyh0ZXh0dXJlTWFuYWdlci5nZXQoKSk7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBo
YXZlIGJhY2tpbmdzIGZvciBhbGwgb2YgdGhlIHRleHR1cmVzLgorICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbWF4VGV4dHVyZXM7ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUodGV4dHVyZXNb
aV0tPmhhdmVCYWNraW5nVGV4dHVyZSgpKTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IG9ubHkg
dGhlIHJlcXVlc3RMYXRlIHRleHR1cmVzIGFyZSBhYm92ZSB0aGUgcHJpb3JpdHkgY3V0b2ZmCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXhUZXh0dXJlczsgaSArPSAyKQorICAgICAgICBF
WFBFQ1RfVFJVRSh0ZXh0dXJlQmFja2luZ0lzQWJvdmVQcmlvcml0eUN1dG9mZih0ZXh0dXJlc1tp
XS5nZXQoKSkpOworICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbWF4VGV4dHVyZXM7IGkgKz0g
MikKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHRleHR1cmVCYWNraW5nSXNBYm92ZVByaW9yaXR5Q3V0
b2ZmKHRleHR1cmVzW2ldLmdldCgpKSk7CisKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWRB
bmRNYWluVGhyZWFkQmxvY2tlZCBpbXBsVGhyZWFkQW5kTWFpblRocmVhZEJsb2NrZWQ7CisgICAg
dGV4dHVyZU1hbmFnZXItPmNsZWFyQWxsTWVtb3J5KHJlc291cmNlUHJvdmlkZXIoKSk7Cit9CisK
KwogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
      

    </bug>

</bugzilla>