<?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>80675</bug_id>
          
          <creation_ts>2012-03-08 21:17:02 -0800</creation_ts>
          <short_desc>Add multi-channels support for CopyWithGainFrom in AudioBus</short_desc>
          <delta_ts>2012-05-09 19:32:10 -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>Web Audio</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Raymond">rgbbones</reporter>
          <assigned_to name="Raymond">rgbbones</assigned_to>
          <cc>crogers</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>kbr</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>574581</commentid>
    <comment_count>0</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-03-08 21:17:02 -0800</bug_when>
    <thetext>Add multi-channels support for CopyWithGainFrom in AudioBus</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574584</commentid>
    <comment_count>1</comment_count>
      <attachid>130972</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-03-08 21:17:41 -0800</bug_when>
    <thetext>Created attachment 130972
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574596</commentid>
    <comment_count>2</comment_count>
      <attachid>130972</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-08 21:31:15 -0800</bug_when>
    <thetext>Comment on attachment 130972
Patch

Attachment 130972 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11894398</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574597</commentid>
    <comment_count>3</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-03-08 21:32:25 -0800</bug_when>
    <thetext>Hi Chris

This patch is aim to enable multi-channles support in CopyWithGainFrom, so that GainNode can handle 5.1 channels.

1. At present CopyWithGainFrom will only been called from the case that channels&apos; topology matching. So I separate the function into matching/unmatching case. In the matching case, all 1-6 channels scenario are handled. And in the unmatching case, reserve the original mono-&gt;stereo case. By this way, if further up/down mix case is needed. it will be more easy to be add and more easy to read the code.

2. to minimize the impact of looping channels for gain processing, I define a lot of macros to expand for different channels, thus eliminate the need for a inner loop. while it do increase the code size, hope this won&apos;t be a issue.

By the way, With another few code tweaked in AudioDestination Node, I managed to play a 5.1 audio in a real 5.1 audio card. But there are some issue I report at :
http://code.google.com/p/chromium/issues/detail?id=117333 Seems alsa output on 5.1 in chromium is not working well. But anyway, it&apos;s not webaudio specific issue. Webaudio part seems working correctly</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574601</commentid>
    <comment_count>4</comment_count>
      <attachid>130972</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-08 21:40:10 -0800</bug_when>
    <thetext>Comment on attachment 130972
Patch

Attachment 130972 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/11894400</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574604</commentid>
    <comment_count>5</comment_count>
      <attachid>130977</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-03-08 21:43:08 -0800</bug_when>
    <thetext>Created attachment 130977
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574617</commentid>
    <comment_count>6</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-03-08 21:58:52 -0800</bug_when>
    <thetext>build issue fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576351</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-12 11:54:29 -0700</bug_when>
    <thetext>Hi Raymond, I&apos;m glad you&apos;re looking into one of the last multi-channel implementation details (AudioGainNode).  Also, glad to hear you&apos;re starting to play around with a 5.1 sound card.  It&apos;ll be very interesting to get this all working!

In looking at AudioGainNode I see that it&apos;s only necessary to implement:
processMatchingBusWithGainFrom() because the number of channels of an AudioGainNode input is the same number as the output.  Furthermore, AudioGainNode only uses copyWithGainFrom() and *not* sumWithGainFrom() so let&apos;s not worry about the multi-channel SUM case right now (we may never need it in the engine...).

I&apos;m a bit concerned about the complexity of the macros that you&apos;re proposing in this patch.  I&apos;d like to propose a much simpler solution.  Keep the existing code for the mono and stereo cases.  Then for N -&gt; N copy do the following:

1) If gain has already converged/snapped to targetGain then just create simple loops (iterating over the N channels) calling into vsmul() for copy or vsma() for sum
2) If gain hasn&apos;t yet converged to targetGain, then (with very simple code) calculate an array of gain values (using the GAIN_DEZIPPER macro or similar), then simply call the existing copyWithSampleAccurateGainValuesFrom() method.  You can include a FIXME that we don&apos;t handle the SUM case, but I think we&apos;ll never need it anyway.

Given (1) and (2) I believe the code can be written in a very straight-forward (easy to read) manner and should even be fairly efficient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577093</commentid>
    <comment_count>8</comment_count>
      <attachid>131556</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-03-12 23:43:03 -0700</bug_when>
    <thetext>Created attachment 131556
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577104</commentid>
    <comment_count>9</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-03-12 23:53:29 -0700</bug_when>
    <thetext>Hi Chris

Thanks for the review.

I simplify the macro according to your comments. Remove the codes that handle sumToBus and unmatching channels case. While, I still reserve the original overall code structure that invoke PROCESS_WITH_GAIN with different func macro. In this way, if we later by any chance want to handle sumToBus and unmatching channels case (maybe some node other than GainNode will call it? or some other function can share the code?) It will be easy.

And If we really believe these two cases will never be needed. We can further simplify the code by remove all those macros ( including PROCESS_WITH_GAIN ) and do loop directly in copyWithGainFrom in the future. How do you think about it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579643</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-15 12:37:43 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Hi Chris
&gt; 
&gt; Thanks for the review.
&gt; 
&gt; I simplify the macro according to your comments. Remove the codes that handle sumToBus and unmatching channels case. While, I still reserve the original overall code structure that invoke PROCESS_WITH_GAIN with different func macro. In this way, if we later by any chance want to handle sumToBus and unmatching channels case (maybe some node other than GainNode will call it? or some other function can share the code?) It will be easy.
&gt; 
&gt; And If we really believe these two cases will never be needed. We can further simplify the code by remove all those macros ( including PROCESS_WITH_GAIN ) and do loop directly in copyWithGainFrom in the future. How do you think about it?

Hi Raymond, the more I think about it, it seems unlikely that we&apos;ll ever need the extra logic to handle sumToBus and unmatching channels case.  If that changes in the future then we can always add the more complex logic.  But, I think for now (because this seems quite unlikely to me) the best path is to keep a sharp focus on keeping the code as simple and straightforward as possible (for readability and maintainability).  So I like your idea about further simplifying, removing the macros, etc.  We always have the patch (with macros) on record in this bug if we need to re-visit.

Also, it would be nice to handle arbitrary numbers of channels using loops, and not limit ourselves to 5.1.  I see you have a constant &quot;MaxBusChannels = 6;&quot; but now AudioContext thinks it can go higher (see AudioContext::maxNumberOfChannels()).  We can&apos;t reference AudioContext from AudioBus (layering violation) but we should make our MaxChannels value the same (32) and probably only need to use it when call ASSERT in the constructor...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580162</commentid>
    <comment_count>11</comment_count>
      <attachid>132202</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-03-15 23:01:48 -0700</bug_when>
    <thetext>Created attachment 132202
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580173</commentid>
    <comment_count>12</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-03-15 23:11:27 -0700</bug_when>
    <thetext>(In reply to comment #10)
Hi Chris

Patch updated. And I think, since we simplify the code structure. It might be good time for us to improve the gain dezipper code now. So I also add a FIXME there to remind it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580845</commentid>
    <comment_count>13</comment_count>
      <attachid>132202</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-16 13:07:30 -0700</bug_when>
    <thetext>Comment on attachment 132202
Patch

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

&gt; Source/WebCore/platform/audio/AudioBus.cpp:323
&gt; +    // If it is copying from the same bus and no need to change gain, just return

nit: period at end of sentence

&gt; Source/WebCore/platform/audio/AudioBus.cpp:324
&gt; +    if (this == &amp;sourceBus &amp;&amp; *lastMixGain == targetGain &amp;&amp; targetGain == 1.0)

WebKit style nit: 1.0 -&gt; 1

&gt; Source/WebCore/platform/audio/AudioBus.cpp:327
&gt; +    unsigned numberOfChannels = this-&gt;numberOfChannels();

We need to have both an ASSERT and an early return doing a sanity check: numberOfChannels &lt;= MaxBusChannels
because of the loop below

&gt; Source/WebCore/platform/audio/AudioBus.cpp:348
&gt; +    float gainValues[AudioNode::ProcessingSizeInFrames];

Two things:

1. For arrays of this size, it&apos;s much better to use an OwnPtr&lt;AudioFloatArray&gt; instead of a stack-based array
2. There is a layering violation here because this class (AudioBus) should not know anything about AudioNode which lives outside of the WebCore/platform directory.
Also, we shouldn&apos;t make any assumptions here that the array size of AudioNode::ProcessingSizeInFrames is sufficiently large, but instead should be allocated to the exact size (based on framesToProcess and/or framesToDezipper)

&gt; Source/WebCore/platform/audio/AudioBus.cpp:363
&gt; +    for (k = 0; k &lt; framesToDezipper; ++k) {

can we remove line 361 &quot;int k = 0&quot; and define &quot;k&quot; directly &quot;for (unsigned k = 0&quot;

&gt; Source/WebCore/platform/audio/AudioBus.cpp:365
&gt; +        gain = DenormalDisabler::flushDenormalFloatToZero(gain);

Please add FIXME that we can probably get rid of this DenormalDisabler::flushDenormalFloatToZero() call if we are clever enough in calculating the framesToDezipper value if totalDesiredGain==0.
In the case where both &quot;gain&quot; and &quot;totalDesiredGain&quot; are larger than the denormal threshold, then it should never be necessary to even check for denormals, since all intermediate values should also not be denormals.

&gt; Source/WebCore/platform/audio/AudioBus.cpp:375
&gt;      } else {

WebKit style nit: remove braces { } on single-line else clause....

&gt; Source/WebCore/platform/audio/AudioBus.cpp:378
&gt;  

Just to make things more clear, I would wrap the following for() loop in:

if (framesToDezipper &lt; framesToProcess)

&gt; Source/WebCore/platform/audio/AudioBus.cpp:380
&gt; +        vsmul(sources[index], 1, &amp;gain, destinations[index], 1, framesToProcess - k);

It seems odd to use the loop variable &quot;k&quot; here -- instead &quot;framesToDezipper&quot; is probably better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581581</commentid>
    <comment_count>14</comment_count>
      <attachid>132529</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-03-18 20:06:41 -0700</bug_when>
    <thetext>Created attachment 132529
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581582</commentid>
    <comment_count>15</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-03-18 20:12:15 -0700</bug_when>
    <thetext>(In reply to comment #13)
Hi Chris

Thanks for the review. Patch updated according to your comments.

And :

&gt; &gt; Source/WebCore/platform/audio/AudioBus.cpp:327
&gt; &gt; +    unsigned numberOfChannels = this-&gt;numberOfChannels();
&gt; 
&gt; We need to have both an ASSERT and an early return doing a sanity check: numberOfChannels &lt;= MaxBusChannels
&gt; because of the loop below

I remove them because you have mentioned that we only need to access it in the constructor ;) And we had a ASSERT there in the constructor,But For Release case, to make it safe, I add:

if (numberOfChannels &gt; MaxBusChannels)
    numberOfchannels = MaxBusChannels;

This way, we won&apos;t need to check numberOfChannels in copyWithGainFrom.

How do you think about this solution?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584483</commentid>
    <comment_count>16</comment_count>
      <attachid>132529</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-21 12:23:14 -0700</bug_when>
    <thetext>Comment on attachment 132529
Patch

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

Raymond, thanks for the latest fixes.  I have a few more comments:

&gt; Source/WebCore/platform/audio/AudioBus.cpp:59
&gt; +        numberOfChannels = MaxBusChannels;

I don&apos;t think we should proceed at this point since this is an anomalous condition.  Instead we should just return early and allocate nothing.

&gt; Source/WebCore/platform/audio/AudioBus.cpp:68
&gt; +    m_gainValues = adoptPtr(new AudioFloatArray(length));

We shouldn&apos;t allocate m_gainValues here since it will often be unused and could be potentially very large (for example, loading large audio assets into an AudioBus)

&gt; Source/WebCore/platform/audio/AudioBus.cpp:81
&gt; +        }

I would just revert these changes in AudioBus::setChannelMemory().
I think this is getting too complex.

&gt; Source/WebCore/platform/audio/AudioBus.cpp:334
&gt; +    unsigned numberOfChannels = this-&gt;numberOfChannels();

For safety/security reasons, we still need to have an ASSERT and early return if numberOfChannels is too big.  It&apos;s true that the constructor checked this, but an ASSERT is for safety reasons and is supposed to check for conditions that never *should* be possible given the way the code is understood to work.  So simply having the check in the constructor is not sufficient, especially when we&apos;re writing values into stack-based arrays

&gt; Source/WebCore/platform/audio/AudioBus.cpp:366
&gt; +

Instead of initializing m_gainValues in the constructor and setChannelMemory(), we can simply *lazily* initialize it here (taking care that if m_gainValues is already initialized, that it is of a large enough size)

&gt; Source/WebCore/platform/audio/AudioBus.cpp:379
&gt; +        gainValues = m_gainValues-&gt;data();

Can&apos;t we simply remove 378:379 and directly use &quot;m_gainValues-&gt;data()&quot; on line 382

&gt; Source/WebCore/platform/audio/AudioBus.cpp:381
&gt; +        for (unsigned index = 0; index &lt; numberOfChannels; ++index) {

&quot;index&quot; -&gt; &quot;channelIndex&quot;

&gt; Source/WebCore/platform/audio/AudioBus.cpp:388
&gt; +

Please add comment:

// Apply constant gain after de-zippering has converged on target gain.

&gt; Source/WebCore/platform/audio/AudioBus.cpp:390
&gt; +        for (unsigned index = 0; index &lt; numberOfChannels; ++index)

&quot;index&quot; -&gt; &quot;channelIndex&quot;

&gt; Source/WebCore/platform/audio/AudioBus.h:139
&gt; +    OwnPtr&lt;AudioFloatArray&gt; m_gainValues; // Store gain values array for dezipper frames.

Maybe a better name would be &quot;m_dezipperGainValues&quot; and then you can remove the comment because the variable name is self-explanatory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584906</commentid>
    <comment_count>17</comment_count>
      <attachid>133172</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-03-21 19:53:30 -0700</bug_when>
    <thetext>Created attachment 133172
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584909</commentid>
    <comment_count>18</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-03-21 19:57:06 -0700</bug_when>
    <thetext>(In reply to comment #16)
Hi Chris

Thanks for the review. Patch updated.

&gt; &gt; Source/WebCore/platform/audio/AudioBus.cpp:379
&gt; &gt; +        gainValues = m_gainValues-&gt;data();
&gt; 
&gt; Can&apos;t we simply remove 378:379 and directly use &quot;m_gainValues-&gt;data()&quot; on line 382

I have thought that, inside a loop, m_gainValues-&gt;data() will been retrieved for several time, so fetch it out before hand. Anyway, updated according to your comments. Maybe the compiler is clever enough to optimize this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596331</commentid>
    <comment_count>19</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-04-04 23:27:11 -0700</bug_when>
    <thetext>Hi Chris

Anything else I need to do for this patch ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598808</commentid>
    <comment_count>20</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-04-09 17:47:58 -0700</bug_when>
    <thetext>Hi Chris

Any more comments on this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599815</commentid>
    <comment_count>21</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-04-10 17:10:21 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; Hi Chris
&gt; 
&gt; Any more comments on this patch?

Sorry, I&apos;ll try to get to this as soon as possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605333</commentid>
    <comment_count>22</comment_count>
      <attachid>137830</attachid>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-04-18 20:20:32 -0700</bug_when>
    <thetext>Created attachment 137830
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605334</commentid>
    <comment_count>23</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-04-18 20:21:30 -0700</bug_when>
    <thetext>Hi Chris

Patch updated to sync with the latest code change in audiobus.cc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>615947</commentid>
    <comment_count>24</comment_count>
    <who name="Raymond">rgbbones</who>
    <bug_when>2012-05-03 21:41:03 -0700</bug_when>
    <thetext>Hi Chris
Any news on this patch? ;) We have some other patches for audioBus coming, it will be better to be submit after this one is done to save the rebase work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616822</commentid>
    <comment_count>25</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-05-04 17:12:12 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; Hi Chris
&gt; Any news on this patch? ;) We have some other patches for audioBus coming, it will be better to be submit after this one is done to save the rebase work.

Hi Raymond, sorry for the delay.  Work has been very heavy recently.  I&apos;ll try my best to review as soon as I can.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620143</commentid>
    <comment_count>26</comment_count>
      <attachid>137830</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-05-09 18:30:39 -0700</bug_when>
    <thetext>Comment on attachment 137830
Patch

Thanks Raymond - nice simplification!  Sorry I&apos;ve taken so long on this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620173</commentid>
    <comment_count>27</comment_count>
      <attachid>137830</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-09 19:32:03 -0700</bug_when>
    <thetext>Comment on attachment 137830
Patch

Clearing flags on attachment: 137830

Committed r116596: &lt;http://trac.webkit.org/changeset/116596&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620174</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-09 19:32:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130972</attachid>
            <date>2012-03-08 21:17:41 -0800</date>
            <delta_ts>2012-03-08 21:42:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80675-20120309132250.patch</filename>
            <type>text/plain</type>
            <size>17700</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMjA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWQ1MzVhYjFiZDcxMzFj
ZjQyMmE4MzUwNDdjMWQxYjllZjI5ODIxNS4uMzA3M2Q3NDUyZjg5YzgyODU4ZjM5NDQ2ZWY1NGI4
OWUxYjIyZjNjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTAzLTA4ICBSYXlt
b25kIExpdSAgPHJheW1vbmQubGl1QGludGVsLmNvbT4KKworICAgICAgICBBZGQgbXVsdGktY2hh
bm5lbHMgc3VwcG9ydCBmb3IgQ29weVdpdGhHYWluRnJvbSBpbiBBdWRpb0J1cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA2NzUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1
ZGlvQnVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9C
dXM6OkF1ZGlvQnVzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVzOjpwcm9jZXNzV2l0aEdh
aW5Nb25vVG9TdGVyZW8pOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CdXM6OnByZXBhcmVHYWlu
UGFyYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVzOjpwcm9jZXNzTWF0Y2hpbmdCdXNX
aXRoR2FpbkZyb20pOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CdXM6OnByb2Nlc3NVbk1hdGNo
aW5nQnVzV2l0aEdhaW5Gcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVzOjpwcm9jZXNz
V2l0aEdhaW5Gcm9tKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5oOgorICAg
ICAgICAoQXVkaW9CdXMpOgorCiAyMDEyLTAzLTA4ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgaW1wbGVtZW50IGZsZXhib3ggd3JhcC1yZXZlcnNlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5jcHAKaW5kZXggZTdmODkwMmY3MmY5ZTBk
NjcwMTU2ZDFmYjUyMTM4MTAyZjQ5NDEzZS4uMjNmYmI2NjczZGUzMzIwYTg3NTg5NzNlZTgxZTI1
OGUyNWM2MTU0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVk
aW9CdXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvQnVzLmNw
cApAQCAtNDUsMTMgKzQ1LDE3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVz
cGFjZSBWZWN0b3JNYXRoOwotICAgIAorCitjb25zdCB1bnNpZ25lZCBNYXhCdXNDaGFubmVscyA9
IDY7CisKIEF1ZGlvQnVzOjpBdWRpb0J1cyh1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBzaXpl
X3QgbGVuZ3RoLCBib29sIGFsbG9jYXRlKQogICAgIDogbV9sZW5ndGgobGVuZ3RoKQogICAgICwg
bV9idXNHYWluKDEpCiAgICAgLCBtX2lzRmlyc3RUaW1lKHRydWUpCiAgICAgLCBtX3NhbXBsZVJh
dGUoMCkKIHsKKyAgICBBU1NFUlQobnVtYmVyT2ZDaGFubmVscyA8PSBNYXhCdXNDaGFubmVscyk7
CisKICAgICBtX2NoYW5uZWxzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZDaGFubmVs
cyk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytp
KSB7CkBAIC0zMjMsMjAgKzMyNywxNzMgQEAgdm9pZCBBdWRpb0J1czo6c3VtRnJvbShjb25zdCBB
dWRpb0J1cyAmc291cmNlQnVzKQogICAgICAgICBnYWluID0gdG90YWxEZXNpcmVkR2FpbjsgXAog
ICAgIE9QIyNfViAKIAotI2RlZmluZSBTVEVSRU9fU1VNIFwKKyNkZWZpbmUgX1NJTkdMRV9DSEFO
TkVMX1NVTShpbmRleCkgXAorICAgIGZsb2F0KiAmZGVzdGluYXRpb25fIyNpbmRleCA9IGRlc3Rp
bmF0aW9uc1tpbmRleF07IFwKKyAgICBzdW0gPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9y
bWFsRmxvYXRUb1plcm8oKmRlc3RpbmF0aW9uXyMjaW5kZXggKyBnYWluICogKnNvdXJjZXNbaW5k
ZXhdKyspOyBcCisgICAgKmRlc3RpbmF0aW9uXyMjaW5kZXgrKyA9IHN1bTsKKworI2RlZmluZSBT
VU1fMV9DSEFOTkVMIF9TSU5HTEVfQ0hBTk5FTF9TVU0oMCkKKworI2RlZmluZSBTVU1fMl9DSEFO
TkVMUyBcCisgICAgU1VNXzFfQ0hBTk5FTCBcCisgICAgX1NJTkdMRV9DSEFOTkVMX1NVTSgxKQor
CisjZGVmaW5lIFNVTV8zX0NIQU5ORUxTIFwKKyAgICBTVU1fMl9DSEFOTkVMUyBcCisgICAgX1NJ
TkdMRV9DSEFOTkVMX1NVTSgyKQorCisjZGVmaW5lIFNVTV80X0NIQU5ORUxTIFwKKyAgICBTVU1f
M19DSEFOTkVMUyBcCisgICAgX1NJTkdMRV9DSEFOTkVMX1NVTSgzKQorCisjZGVmaW5lIFNVTV81
X0NIQU5ORUxTIFwKKyAgICBTVU1fNF9DSEFOTkVMUyBcCisgICAgX1NJTkdMRV9DSEFOTkVMX1NV
TSg0KQorCisjZGVmaW5lIFNVTV82X0NIQU5ORUxTIFwKKyAgICBTVU1fNV9DSEFOTkVMUyBcCisg
ICAgX1NJTkdMRV9DSEFOTkVMX1NVTSg1KQorCisjZGVmaW5lIE1VTFRJX0NIQU5ORUxTX1NVTShO
KSBcCiAgICAgeyBcCi0gICAgICAgIGZsb2F0IHN1bUwgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVz
aERlbm9ybWFsRmxvYXRUb1plcm8oKmRlc3RpbmF0aW9uTCArIGdhaW4gKiAqc291cmNlTCsrKTsg
XAotICAgICAgICBmbG9hdCBzdW1SID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZs
b2F0VG9aZXJvKCpkZXN0aW5hdGlvblIgKyBnYWluICogKnNvdXJjZVIrKyk7IFwKLSAgICAgICAg
KmRlc3RpbmF0aW9uTCsrID0gc3VtTDsgXAotICAgICAgICAqZGVzdGluYXRpb25SKysgPSBzdW1S
OyBcCisgICAgICAgIGZsb2F0IHN1bTsgXAorICAgICAgICBTVU1fIyNOIyNfQ0hBTk5FTFMgXAog
ICAgIH0KIAotI2RlZmluZSBTVEVSRU9fU1VNX1YgXAorI2RlZmluZSBNVUxUSV9DSEFOTkVMU19T
VU1fMiBNVUxUSV9DSEFOTkVMU19TVU0oMikKKyNkZWZpbmUgTVVMVElfQ0hBTk5FTFNfU1VNXzMg
TVVMVElfQ0hBTk5FTFNfU1VNKDMpCisjZGVmaW5lIE1VTFRJX0NIQU5ORUxTX1NVTV80IE1VTFRJ
X0NIQU5ORUxTX1NVTSg0KQorI2RlZmluZSBNVUxUSV9DSEFOTkVMU19TVU1fNSBNVUxUSV9DSEFO
TkVMU19TVU0oNSkKKyNkZWZpbmUgTVVMVElfQ0hBTk5FTFNfU1VNXzYgTVVMVElfQ0hBTk5FTFNf
U1VNKDYpCisKKyNkZWZpbmUgU0lOR0xFX0NIQU5ORUxfU1VNIFwKICAgICB7IFwKLSAgICAgICAg
dnNtYShzb3VyY2VMLCAxLCAmZ2FpbiwgZGVzdGluYXRpb25MLCAxLCBmcmFtZXNUb1Byb2Nlc3Mg
LSBrKTsgXAotICAgICAgICB2c21hKHNvdXJjZVIsIDEsICZnYWluLCBkZXN0aW5hdGlvblIsIDEs
IGZyYW1lc1RvUHJvY2VzcyAtIGspOyBcCisgICAgICAgIGZsb2F0IHN1bTsgXAorICAgICAgICBT
VU1fMV9DSEFOTkVMIFwKKyAgICB9CisKKyNkZWZpbmUgX1NJTkdMRV9DSEFOTkVMX1NVTV9WKGlu
ZGV4KSB2c21hKHNvdXJjZXNbaW5kZXhdLCAxLCAmZ2FpbiwgZGVzdGluYXRpb25zW2luZGV4XSwg
MSwgZnJhbWVzVG9Qcm9jZXNzIC0gayk7CisKKyNkZWZpbmUgU1VNXzFfQ0hBTk5FTF9WIF9TSU5H
TEVfQ0hBTk5FTF9TVU1fVigwKQorCisjZGVmaW5lIFNVTV8yX0NIQU5ORUxTX1YgXAorICAgIFNV
TV8xX0NIQU5ORUxfViBcCisgICAgX1NJTkdMRV9DSEFOTkVMX1NVTV9WKDEpCisKKyNkZWZpbmUg
U1VNXzNfQ0hBTk5FTFNfViBcCisgICAgU1VNXzJfQ0hBTk5FTFNfViBcCisgICAgX1NJTkdMRV9D
SEFOTkVMX1NVTV9WKDIpCisKKyNkZWZpbmUgU1VNXzRfQ0hBTk5FTFNfViBcCisgICAgU1VNXzNf
Q0hBTk5FTFNfViBcCisgICAgX1NJTkdMRV9DSEFOTkVMX1NVTV9WKDMpCisKKyNkZWZpbmUgU1VN
XzVfQ0hBTk5FTFNfViBcCisgICAgU1VNXzRfQ0hBTk5FTFNfViBcCisgICAgX1NJTkdMRV9DSEFO
TkVMX1NVTV9WKDQpCisKKyNkZWZpbmUgU1VNXzZfQ0hBTk5FTFNfViBcCisgICAgU1VNXzVfQ0hB
Tk5FTFNfViBcCisgICAgX1NJTkdMRV9DSEFOTkVMX1NVTV9WKDUpCisKKyNkZWZpbmUgTVVMVElf
Q0hBTk5FTFNfU1VNX1YoTikgXAorICAgIHsgXAorICAgICAgICBTVU1fIyNOIyNfQ0hBTk5FTFNf
ViBcCisgICAgfQorCisjZGVmaW5lIFNJTkdMRV9DSEFOTkVMX1NVTV9WIFwKKyAgICB7IFwKKyAg
ICAgICAgU1VNXzFfQ0hBTk5FTF9WIFwKKyAgICB9CisKKyNkZWZpbmUgTVVMVElfQ0hBTk5FTFNf
U1VNXzJfViBNVUxUSV9DSEFOTkVMU19TVU1fVigyKQorI2RlZmluZSBNVUxUSV9DSEFOTkVMU19T
VU1fM19WIE1VTFRJX0NIQU5ORUxTX1NVTV9WKDMpCisjZGVmaW5lIE1VTFRJX0NIQU5ORUxTX1NV
TV80X1YgTVVMVElfQ0hBTk5FTFNfU1VNX1YoNCkKKyNkZWZpbmUgTVVMVElfQ0hBTk5FTFNfU1VN
XzVfViBNVUxUSV9DSEFOTkVMU19TVU1fVig1KQorI2RlZmluZSBNVUxUSV9DSEFOTkVMU19TVU1f
Nl9WIE1VTFRJX0NIQU5ORUxTX1NVTV9WKDYpCisKKyNkZWZpbmUgX1NJTkdMRV9DSEFOTkVMX0NP
UFkoaW5kZXgpIFwKKyAgICBmbG9hdCBzb3VyY2VfIyNpbmRleCA9ICpzb3VyY2VzW2luZGV4XSsr
OyBcCisgICAgKmRlc3RpbmF0aW9uc1tpbmRleF0rKyA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNo
RGVub3JtYWxGbG9hdFRvWmVybyhnYWluICogc291cmNlXyMjaW5kZXgpOworCisjZGVmaW5lIENP
UFlfMV9DSEFOTkVMIF9TSU5HTEVfQ0hBTk5FTF9DT1BZKDApCisKKyNkZWZpbmUgQ09QWV8yX0NI
QU5ORUxTIFwKKyAgICBDT1BZXzFfQ0hBTk5FTCBcCisgICAgX1NJTkdMRV9DSEFOTkVMX0NPUFko
MSkKKworI2RlZmluZSBDT1BZXzNfQ0hBTk5FTFMgXAorICAgIENPUFlfMl9DSEFOTkVMUyBcCisg
ICAgX1NJTkdMRV9DSEFOTkVMX0NPUFkoMikKKworI2RlZmluZSBDT1BZXzRfQ0hBTk5FTFMgXAor
ICAgIENPUFlfM19DSEFOTkVMUyBcCisgICAgX1NJTkdMRV9DSEFOTkVMX0NPUFkoMykKKworI2Rl
ZmluZSBDT1BZXzVfQ0hBTk5FTFMgXAorICAgIENPUFlfNF9DSEFOTkVMUyBcCisgICAgX1NJTkdM
RV9DSEFOTkVMX0NPUFkoNCkKKworI2RlZmluZSBDT1BZXzZfQ0hBTk5FTFMgXAorICAgIENPUFlf
NV9DSEFOTkVMUyBcCisgICAgX1NJTkdMRV9DSEFOTkVMX0NPUFkoNSkKKworI2RlZmluZSBNVUxU
SV9DSEFOTkVMU19DT1BZKE4pIFwKKyAgICB7IFwKKyAgICAgICAgQ09QWV8jI04jI19DSEFOTkVM
UyBcCiAgICAgfQogCisjZGVmaW5lIE1VTFRJX0NIQU5ORUxTX0NPUFlfMiBNVUxUSV9DSEFOTkVM
U19DT1BZKDIpCisjZGVmaW5lIE1VTFRJX0NIQU5ORUxTX0NPUFlfMyBNVUxUSV9DSEFOTkVMU19D
T1BZKDMpCisjZGVmaW5lIE1VTFRJX0NIQU5ORUxTX0NPUFlfNCBNVUxUSV9DSEFOTkVMU19DT1BZ
KDQpCisjZGVmaW5lIE1VTFRJX0NIQU5ORUxTX0NPUFlfNSBNVUxUSV9DSEFOTkVMU19DT1BZKDUp
CisjZGVmaW5lIE1VTFRJX0NIQU5ORUxTX0NPUFlfNiBNVUxUSV9DSEFOTkVMU19DT1BZKDYpCisK
KyNkZWZpbmUgU0lOR0xFX0NIQU5ORUxfQ09QWSBcCisgICAgeyBcCisgICAgICAgIENPUFlfMV9D
SEFOTkVMIFwKKyAgICB9CisKKyNkZWZpbmUgX1NJTkdMRV9DSEFOTkVMX0NPUFlfVihpbmRleCkg
dnNtdWwoc291cmNlc1tpbmRleF0sIDEsICZnYWluLCBkZXN0aW5hdGlvbnNbaW5kZXhdLCAxLCBm
cmFtZXNUb1Byb2Nlc3MgLSBrKTsKKworI2RlZmluZSBDT1BZXzFfQ0hBTk5FTF9WIF9TSU5HTEVf
Q0hBTk5FTF9DT1BZX1YoMCkKKworI2RlZmluZSBDT1BZXzJfQ0hBTk5FTFNfViBcCisgICAgQ09Q
WV8xX0NIQU5ORUxfViBcCisgICAgX1NJTkdMRV9DSEFOTkVMX0NPUFlfVigxKQorCisjZGVmaW5l
IENPUFlfM19DSEFOTkVMU19WIFwKKyAgICBDT1BZXzJfQ0hBTk5FTFNfViBcCisgICAgX1NJTkdM
RV9DSEFOTkVMX0NPUFlfVigyKQorCisjZGVmaW5lIENPUFlfNF9DSEFOTkVMU19WIFwKKyAgICBD
T1BZXzNfQ0hBTk5FTFNfViBcCisgICAgX1NJTkdMRV9DSEFOTkVMX0NPUFlfVigzKQorCisjZGVm
aW5lIENPUFlfNV9DSEFOTkVMU19WIFwKKyAgICBDT1BZXzRfQ0hBTk5FTFNfViBcCisgICAgX1NJ
TkdMRV9DSEFOTkVMX0NPUFlfVig0KQorCisjZGVmaW5lIENPUFlfNl9DSEFOTkVMU19WIFwKKyAg
ICBDT1BZXzVfQ0hBTk5FTFNfViBcCisgICAgX1NJTkdMRV9DSEFOTkVMX0NPUFlfVig1KQorCisj
ZGVmaW5lIE1VTFRJX0NIQU5ORUxTX0NPUFlfVihOKSBcCisgICAgeyBcCisgICAgICAgIENPUFlf
IyNOIyNfQ0hBTk5FTFNfViBcCisgICAgfQorCisjZGVmaW5lIFNJTkdMRV9DSEFOTkVMX0NPUFlf
ViBcCisgICAgeyBcCisgICAgICAgIENPUFlfMV9DSEFOTkVMX1YgXAorICAgIH0KKworI2RlZmlu
ZSBNVUxUSV9DSEFOTkVMU19DT1BZXzJfViBNVUxUSV9DSEFOTkVMU19DT1BZX1YoMikKKyNkZWZp
bmUgTVVMVElfQ0hBTk5FTFNfQ09QWV8zX1YgTVVMVElfQ0hBTk5FTFNfQ09QWV9WKDMpCisjZGVm
aW5lIE1VTFRJX0NIQU5ORUxTX0NPUFlfNF9WIE1VTFRJX0NIQU5ORUxTX0NPUFlfVig0KQorI2Rl
ZmluZSBNVUxUSV9DSEFOTkVMU19DT1BZXzVfViBNVUxUSV9DSEFOTkVMU19DT1BZX1YoNSkKKyNk
ZWZpbmUgTVVMVElfQ0hBTk5FTFNfQ09QWV82X1YgTVVMVElfQ0hBTk5FTFNfQ09QWV9WKDYpCisK
IC8vIE1vbm8gLT4gc3RlcmVvIChtaXggZXF1YWxseSBpbnRvIEwgYW5kIFIpCiAvLyBGSVhNRTog
UmVhbGx5IHdlIHNob3VsZCBhcHBseSBhbiBlcXVhbC1wb3dlciBzY2FsaW5nIGZhY3RvciBoZXJl
LCBzaW5jZSB3ZSdyZSBlZmZlY3RpdmVseSBwYW5uaW5nIGNlbnRlci4uLgogI2RlZmluZSBNT05P
MlNURVJFT19TVU0gXApAQCAtMzU0LDMxICs1MTEsNiBAQCB2b2lkIEF1ZGlvQnVzOjpzdW1Gcm9t
KGNvbnN0IEF1ZGlvQnVzICZzb3VyY2VCdXMpCiAgICAgICAgIHZzbWEoc291cmNlTCwgMSwgJmdh
aW4sIGRlc3RpbmF0aW9uUiwgMSwgZnJhbWVzVG9Qcm9jZXNzIC0gayk7IFwKICAgICB9CiAgICAg
Ci0jZGVmaW5lIE1PTk9fU1VNIFwKLSAgICB7IFwKLSAgICAgICAgZmxvYXQgc3VtID0gRGVub3Jt
YWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKCpkZXN0aW5hdGlvbkwgKyBnYWlu
ICogKnNvdXJjZUwrKyk7IFwKLSAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gc3VtOyBcCi0gICAg
fQotCi0jZGVmaW5lIE1PTk9fU1VNX1YgXAotICAgIHsgXAotICAgICAgICB2c21hKHNvdXJjZUws
IDEsICZnYWluLCBkZXN0aW5hdGlvbkwsIDEsIGZyYW1lc1RvUHJvY2VzcyAtIGspOyBcCi0gICAg
fSAKLQotI2RlZmluZSBTVEVSRU9fTk9fU1VNIFwKLSAgICB7IFwKLSAgICAgICAgZmxvYXQgc2Ft
cGxlTCA9ICpzb3VyY2VMKys7IFwKLSAgICAgICAgZmxvYXQgc2FtcGxlUiA9ICpzb3VyY2VSKys7
IFwKLSAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5v
cm1hbEZsb2F0VG9aZXJvKGdhaW4gKiBzYW1wbGVMKTsgXAotICAgICAgICAqZGVzdGluYXRpb25S
KysgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2FpbiAqIHNh
bXBsZVIpOyBcCi0gICAgfQotCi0jZGVmaW5lIFNURVJFT19OT19TVU1fViBcCi0gICAgeyBcCi0g
ICAgICAgIHZzbXVsKHNvdXJjZUwsIDEsICZnYWluLCBkZXN0aW5hdGlvbkwsIDEsIGZyYW1lc1Rv
UHJvY2VzcyAtIGspOyBcCi0gICAgICAgIHZzbXVsKHNvdXJjZVIsIDEsICZnYWluLCBkZXN0aW5h
dGlvblIsIDEsIGZyYW1lc1RvUHJvY2VzcyAtIGspOyBcCi0gICAgfQotCiAvLyBNb25vIC0+IHN0
ZXJlbyAobWl4IGVxdWFsbHkgaW50byBMIGFuZCBSKQogLy8gRklYTUU6IFJlYWxseSB3ZSBzaG91
bGQgYXBwbHkgYW4gZXF1YWwtcG93ZXIgc2NhbGluZyBmYWN0b3IgaGVyZSwgc2luY2Ugd2UncmUg
ZWZmZWN0aXZlbHkgcGFubmluZyBjZW50ZXIuLi4KICNkZWZpbmUgTU9OTzJTVEVSRU9fTk9fU1VN
IFwKQEAgLTM5NCw3NSArNTI2LDEyNCBAQCB2b2lkIEF1ZGlvQnVzOjpzdW1Gcm9tKGNvbnN0IEF1
ZGlvQnVzICZzb3VyY2VCdXMpCiAgICAgICAgIHZzbXVsKHNvdXJjZUwsIDEsICZnYWluLCBkZXN0
aW5hdGlvblIsIDEsIGZyYW1lc1RvUHJvY2VzcyAtIGspOyBcCiAgICAgfQogCi0jZGVmaW5lIE1P
Tk9fTk9fU1VNIFwKLSAgICB7IFwKLSAgICAgICAgZmxvYXQgc2FtcGxlTCA9ICpzb3VyY2VMKys7
IFwKLSAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5v
cm1hbEZsb2F0VG9aZXJvKGdhaW4gKiBzYW1wbGVMKTsgXAotICAgIH0KKyNkZWZpbmUgUFJFUEFS
RV9HQUlOX1BBUkFNUyBcCisgICAgZmxvYXQgdG90YWxEZXNpcmVkR2FpbjsgXAorICAgIGZsb2F0
IGdhaW47IFwKKyAgICBpbnQgZnJhbWVzVG9EZXppcHBlcjsgXAorICAgIGNvbnN0IGZsb2F0IERl
emlwcGVyUmF0ZSA9IDAuMDA1ZjsgXAorICAgIGludCBmcmFtZXNUb1Byb2Nlc3MgPSBsZW5ndGgo
KTsgXAorICAgIGludCBrID0gMDsgXAorICAgIHByZXBhcmVHYWluUGFyYW1zKCpsYXN0TWl4R2Fp
biwgdGFyZ2V0R2FpbiwgZnJhbWVzVG9Qcm9jZXNzLCB0b3RhbERlc2lyZWRHYWluLCBnYWluLCBm
cmFtZXNUb0RlemlwcGVyKTsKIAotI2RlZmluZSBNT05PX05PX1NVTV9WIFwKLSAgICB7IFwKLSAg
ICAgICAgdnNtdWwoc291cmNlTCwgMSwgJmdhaW4sIGRlc3RpbmF0aW9uTCwgMSwgZnJhbWVzVG9Q
cm9jZXNzIC0gayk7IFwKLSAgICB9IAogCi12b2lkIEF1ZGlvQnVzOjpwcm9jZXNzV2l0aEdhaW5G
cm9tTW9ub1N0ZXJlbyhjb25zdCBBdWRpb0J1cyAmc291cmNlQnVzLCBmbG9hdCogbGFzdE1peEdh
aW4sIGZsb2F0IHRhcmdldEdhaW4sIGJvb2wgc3VtVG9CdXMpCit2b2lkIEF1ZGlvQnVzOjpwcm9j
ZXNzV2l0aEdhaW5Nb25vVG9TdGVyZW8oY29uc3QgQXVkaW9CdXMgJnNvdXJjZUJ1cywgZmxvYXQq
IGxhc3RNaXhHYWluLCBmbG9hdCB0YXJnZXRHYWluLCBib29sIHN1bVRvQnVzKQoreworICAgIEFT
U0VSVChzb3VyY2VCdXMubnVtYmVyT2ZDaGFubmVscygpID09IDEgJiYgbnVtYmVyT2ZDaGFubmVs
cygpID09IDIpOworCisgICAgQXVkaW9CdXMmIHNvdXJjZUJ1c1NhZmUgPSBjb25zdF9jYXN0PEF1
ZGlvQnVzJj4oc291cmNlQnVzKTsKKyAgICBjb25zdCBmbG9hdCogc291cmNlTCA9IHNvdXJjZUJ1
c1NhZmUuY2hhbm5lbEJ5VHlwZShDaGFubmVsTGVmdCktPmRhdGEoKTsKKworICAgIGZsb2F0KiBk
ZXN0aW5hdGlvbkwgPSBjaGFubmVsQnlUeXBlKENoYW5uZWxMZWZ0KS0+bXV0YWJsZURhdGEoKTsK
KyAgICBmbG9hdCogZGVzdGluYXRpb25SID0gY2hhbm5lbEJ5VHlwZShDaGFubmVsUmlnaHQpLT5t
dXRhYmxlRGF0YSgpOworCisgICAgUFJFUEFSRV9HQUlOX1BBUkFNUworCisgICAgaWYgKHN1bVRv
QnVzKQorICAgICAgICBQUk9DRVNTX1dJVEhfR0FJTihNT05PMlNURVJFT19TVU0pCisgICAgZWxz
ZQorICAgICAgICBQUk9DRVNTX1dJVEhfR0FJTihNT05PMlNURVJFT19OT19TVU0pCisKKyAgICAv
LyBTYXZlIHRoZSB0YXJnZXQgZ2FpbiBhcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIG5leHQgdGlt
ZSBhcm91bmQuCisgICAgKmxhc3RNaXhHYWluID0gZ2FpbjsKK30KKworCit2b2lkIEF1ZGlvQnVz
OjpwcmVwYXJlR2FpblBhcmFtcyhmbG9hdCBsYXN0TWl4R2FpbiwgZmxvYXQgdGFyZ2V0R2Fpbiwg
aW50IGZyYW1lc1RvUHJvY2VzcywgZmxvYXQgJnRvdGFsRGVzaXJlZEdhaW4sIGZsb2F0ICZnYWlu
LCBpbnQgJmZyYW1lc1RvRGV6aXBwZXIpCiB7CiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzdWRk
ZW5seSBjaGFuZ2UgdGhlIGdhaW4gZnJvbSBtaXhpbmcgb25lIHRpbWUgc2xpY2UgdG8gdGhlIG5l
eHQsCiAgICAgLy8gc28gd2UgImRlLXppcHBlciIgYnkgc2xvd2x5IGNoYW5naW5nIHRoZSBnYWlu
IGVhY2ggc2FtcGxlLWZyYW1lIHVudGlsIHdlJ3ZlIGFjaGlldmVkIHRoZSB0YXJnZXQgZ2Fpbi4K
ICAgICAKICAgICAvLyBUYWtlIG1hc3RlciBidXMgZ2FpbiBpbnRvIGFjY291bnQgYXMgd2VsbCBh
cyB0aGUgdGFyZ2V0R2Fpbi4KLSAgICBmbG9hdCB0b3RhbERlc2lyZWRHYWluID0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KG1fYnVzR2FpbiAqIHRhcmdldEdhaW4pOworICAgIHRvdGFsRGVzaXJlZEdhaW4g
PSBzdGF0aWNfY2FzdDxmbG9hdD4obV9idXNHYWluICogdGFyZ2V0R2Fpbik7CiAKICAgICAvLyBG
aXJzdCB0aW1lLCBzbmFwIGRpcmVjdGx5IHRvIHRvdGFsRGVzaXJlZEdhaW4uCi0gICAgZmxvYXQg
Z2FpbiA9IHN0YXRpY19jYXN0PGZsb2F0PihtX2lzRmlyc3RUaW1lID8gdG90YWxEZXNpcmVkR2Fp
biA6ICpsYXN0TWl4R2Fpbik7CisgICAgZ2FpbiA9IHN0YXRpY19jYXN0PGZsb2F0PihtX2lzRmly
c3RUaW1lID8gdG90YWxEZXNpcmVkR2FpbiA6IGxhc3RNaXhHYWluKTsKICAgICBtX2lzRmlyc3RU
aW1lID0gZmFsc2U7CiAKLSAgICBpbnQgbnVtYmVyT2ZTb3VyY2VDaGFubmVscyA9IHNvdXJjZUJ1
cy5udW1iZXJPZkNoYW5uZWxzKCk7Ci0gICAgaW50IG51bWJlck9mRGVzdGluYXRpb25DaGFubmVs
cyA9IG51bWJlck9mQ2hhbm5lbHMoKTsKLQotICAgIEF1ZGlvQnVzJiBzb3VyY2VCdXNTYWZlID0g
Y29uc3RfY2FzdDxBdWRpb0J1cyY+KHNvdXJjZUJ1cyk7Ci0gICAgY29uc3QgZmxvYXQqIHNvdXJj
ZUwgPSBzb3VyY2VCdXNTYWZlLmNoYW5uZWxCeVR5cGUoQ2hhbm5lbExlZnQpLT5kYXRhKCk7Ci0g
ICAgY29uc3QgZmxvYXQqIHNvdXJjZVIgPSBudW1iZXJPZlNvdXJjZUNoYW5uZWxzID4gMSA/IHNv
dXJjZUJ1c1NhZmUuY2hhbm5lbEJ5VHlwZShDaGFubmVsUmlnaHQpLT5kYXRhKCkgOiAwOwotCi0g
ICAgZmxvYXQqIGRlc3RpbmF0aW9uTCA9IGNoYW5uZWxCeVR5cGUoQ2hhbm5lbExlZnQpLT5tdXRh
YmxlRGF0YSgpOwotICAgIGZsb2F0KiBkZXN0aW5hdGlvblIgPSBudW1iZXJPZkRlc3RpbmF0aW9u
Q2hhbm5lbHMgPiAxID8gY2hhbm5lbEJ5VHlwZShDaGFubmVsUmlnaHQpLT5tdXRhYmxlRGF0YSgp
IDogMDsKLQotICAgIGNvbnN0IGZsb2F0IERlemlwcGVyUmF0ZSA9IDAuMDA1ZjsKLSAgICBpbnQg
ZnJhbWVzVG9Qcm9jZXNzID0gbGVuZ3RoKCk7Ci0KICAgICAvLyBJZiB0aGUgZ2FpbiBpcyB3aXRo
aW4gZXBzaWxvbiBvZiB0b3RhbERlc2lyZWRHYWluLCB3ZSBjYW4gc2tpcCBkZXppcHBlcmluZy4g
CiAgICAgLy8gRklYTUU6IHRoaXMgdmFsdWUgbWF5IG5lZWQgdHdlYWtpbmcuCiAgICAgY29uc3Qg
ZmxvYXQgZXBzaWxvbiA9IDAuMDAxZjsgCiAgICAgZmxvYXQgZ2FpbkRpZmYgPSBmYWJzKHRvdGFs
RGVzaXJlZEdhaW4gLSBnYWluKTsKIAogICAgIC8vIE51bWJlciBvZiBmcmFtZXMgdG8gZGUtemlw
cGVyIGJlZm9yZSB3ZSBhcmUgY2xvc2UgZW5vdWdoIHRvIHRoZSB0YXJnZXQgZ2Fpbi4KLSAgICBp
bnQgZnJhbWVzVG9EZXppcHBlciA9IChnYWluRGlmZiA8IGVwc2lsb24pID8gMCA6IGZyYW1lc1Rv
UHJvY2VzczsgCisgICAgZnJhbWVzVG9EZXppcHBlciA9IChnYWluRGlmZiA8IGVwc2lsb24pID8g
MCA6IGZyYW1lc1RvUHJvY2VzczsgCiAKLSAgICBpbnQgayA9IDA7Cit9CisKK3ZvaWQgQXVkaW9C
dXM6OnByb2Nlc3NNYXRjaGluZ0J1c1dpdGhHYWluRnJvbShjb25zdCBBdWRpb0J1cyAmc291cmNl
QnVzLCBmbG9hdCogbGFzdE1peEdhaW4sIGZsb2F0IHRhcmdldEdhaW4sIGJvb2wgc3VtVG9CdXMp
Cit7CisgICAgLy8gSWYgaXQgaXMgY29weWluZyBmcm9tIHRoZSBzYW1lIGJ1cyBhbmQgbm8gbmVl
ZCB0byBjaGFuZ2UgZ2FpbiwganVzdCByZXR1cm4KKyAgICBpZiAoIXN1bVRvQnVzICYmIHRoaXMg
PT0gJnNvdXJjZUJ1cyAmJiAqbGFzdE1peEdhaW4gPT0gdGFyZ2V0R2FpbiAmJiB0YXJnZXRHYWlu
ID09IDEuMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVs
cyA9IHRoaXMtPm51bWJlck9mQ2hhbm5lbHMoKTsKKyAgICBBU1NFUlQobnVtYmVyT2ZDaGFubmVs
cyA8PSBNYXhCdXNDaGFubmVscyk7CisgICAgaWYgKG51bWJlck9mQ2hhbm5lbHMgPiBNYXhCdXND
aGFubmVscykKKyAgICAgICAgcmV0dXJuOworCisgICAgQXVkaW9CdXMmIHNvdXJjZUJ1c1NhZmUg
PSBjb25zdF9jYXN0PEF1ZGlvQnVzJj4oc291cmNlQnVzKTsKKyAgICBjb25zdCBmbG9hdCogc291
cmNlc1tNYXhCdXNDaGFubmVsc107CisgICAgZmxvYXQqIGRlc3RpbmF0aW9uc1tNYXhCdXNDaGFu
bmVsc107CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsg
KytpKSB7CisgICAgICAgIHNvdXJjZXNbaV0gPSBzb3VyY2VCdXNTYWZlLmNoYW5uZWwoaSktPmRh
dGEoKTsKKyAgICAgICAgZGVzdGluYXRpb25zW2ldID0gY2hhbm5lbChpKS0+bXV0YWJsZURhdGEo
KTsKKyAgICB9CisKKyAgICBQUkVQQVJFX0dBSU5fUEFSQU1TCiAKICAgICBpZiAoc3VtVG9CdXMp
IHsKICAgICAgICAgLy8gU3VtIHRvIG91ciBidXMKLSAgICAgICAgaWYgKHNvdXJjZVIgJiYgZGVz
dGluYXRpb25SKSB7Ci0gICAgICAgICAgICAvLyBTdGVyZW8KLSAgICAgICAgICAgIFBST0NFU1Nf
V0lUSF9HQUlOKFNURVJFT19TVU0pCi0gICAgICAgIH0gZWxzZSBpZiAoZGVzdGluYXRpb25SKSB7
Ci0gICAgICAgICAgICAvLyBNb25vIC0+IHN0ZXJlbyAKLSAgICAgICAgICAgIFBST0NFU1NfV0lU
SF9HQUlOKE1PTk8yU1RFUkVPX1NVTSkKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8v
IE1vbm8KLSAgICAgICAgICAgIFBST0NFU1NfV0lUSF9HQUlOKE1PTk9fU1VNKQorICAgICAgICBz
d2l0Y2ggKG51bWJlck9mQ2hhbm5lbHMpIHsKKyAgICAgICAgY2FzZSAxOiAvLyBtb25vCisgICAg
ICAgICAgICBQUk9DRVNTX1dJVEhfR0FJTihTSU5HTEVfQ0hBTk5FTF9TVU0pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjogLy8gc3RlcmVvCisgICAgICAgICAgICBQUk9DRVNT
X1dJVEhfR0FJTihNVUxUSV9DSEFOTkVMU19TVU1fMik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSA0OiAvLyBxdWFkCisgICAgICAgICAgICBQUk9DRVNTX1dJVEhfR0FJTihNVUxU
SV9DSEFOTkVMU19TVU1fNCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA1OiAv
LyA1LjAKKyAgICAgICAgICAgIFBST0NFU1NfV0lUSF9HQUlOKE1VTFRJX0NIQU5ORUxTX1NVTV81
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDY6IC8vIDUuMQorICAgICAgICAg
ICAgUFJPQ0VTU19XSVRIX0dBSU4oTVVMVElfQ0hBTk5FTFNfU1VNXzYpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
Ly8gUHJvY2VzcyBkaXJlY3RseSAod2l0aG91dCBzdW1taW5nKSB0byBvdXIgYnVzCi0gICAgICAg
IGlmIChzb3VyY2VSICYmIGRlc3RpbmF0aW9uUikgewotICAgICAgICAgICAgLy8gU3RlcmVvCi0g
ICAgICAgICAgICBQUk9DRVNTX1dJVEhfR0FJTihTVEVSRU9fTk9fU1VNKQotICAgICAgICB9IGVs
c2UgaWYgKGRlc3RpbmF0aW9uUikgewotICAgICAgICAgICAgLy8gTW9ubyAtPiBzdGVyZW8gCi0g
ICAgICAgICAgICBQUk9DRVNTX1dJVEhfR0FJTihNT05PMlNURVJFT19OT19TVU0pCi0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBNb25vCi0gICAgICAgICAgICBQUk9DRVNTX1dJVEhf
R0FJTihNT05PX05PX1NVTSkKKyAgICAgICAgc3dpdGNoIChudW1iZXJPZkNoYW5uZWxzKSB7Cisg
ICAgICAgIGNhc2UgMTogLy8gbW9ubworICAgICAgICAgICAgUFJPQ0VTU19XSVRIX0dBSU4oU0lO
R0xFX0NIQU5ORUxfQ09QWSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOiAv
LyBzdGVyZW8KKyAgICAgICAgICAgIFBST0NFU1NfV0lUSF9HQUlOKE1VTFRJX0NIQU5ORUxTX0NP
UFlfMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0OiAvLyBxdWFkCisgICAg
ICAgICAgICBQUk9DRVNTX1dJVEhfR0FJTihNVUxUSV9DSEFOTkVMU19DT1BZXzQpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNTogLy8gNS4wCisgICAgICAgICAgICBQUk9DRVNT
X1dJVEhfR0FJTihNVUxUSV9DSEFOTkVMU19DT1BZXzUpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgNjogLy8gNS4xCisgICAgICAgICAgICBQUk9DRVNTX1dJVEhfR0FJTihNVUxU
SV9DSEFOTkVMU19DT1BZXzYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgfQogCkBAIC00NzAsMzAgKzY1MSwzNSBAQCB2b2lkIEF1ZGlvQnVzOjpw
cm9jZXNzV2l0aEdhaW5Gcm9tTW9ub1N0ZXJlbyhjb25zdCBBdWRpb0J1cyAmc291cmNlQnVzLCBm
bG9hdCogbAogICAgICpsYXN0TWl4R2FpbiA9IGdhaW47CiB9CiAKLXZvaWQgQXVkaW9CdXM6OnBy
b2Nlc3NXaXRoR2FpbkZyb20oY29uc3QgQXVkaW9CdXMgJnNvdXJjZUJ1cywgZmxvYXQqIGxhc3RN
aXhHYWluLCBmbG9hdCB0YXJnZXRHYWluLCBib29sIHN1bVRvQnVzKQordm9pZCBBdWRpb0J1czo6
cHJvY2Vzc1VuTWF0Y2hpbmdCdXNXaXRoR2FpbkZyb20oY29uc3QgQXVkaW9CdXMgJnNvdXJjZUJ1
cywgZmxvYXQqIGxhc3RNaXhHYWluLCBmbG9hdCB0YXJnZXRHYWluLCBib29sIHN1bVRvQnVzKQog
ewotICAgIC8vIE1ha2Ugc3VyZSB3ZSdyZSBzdW1taW5nIGZyb20gc2FtZSB0eXBlIG9mIGJ1cy4K
LSAgICAvLyBXZSAqYXJlKiBhYmxlIHRvIHN1bSBmcm9tIG1vbm8gLT4gc3RlcmVvCi0gICAgaWYg
KHNvdXJjZUJ1cy5udW1iZXJPZkNoYW5uZWxzKCkgIT0gMSAmJiAhdG9wb2xvZ3lNYXRjaGVzKHNv
dXJjZUJ1cykpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgLy8gSWYgaXQgaXMgY29weWluZyBmcm9tIHRoZSBzYW1lIGJ1cyBhbmQg
bm8gbmVlZCB0byBjaGFuZ2UgZ2FpbiwganVzdCByZXR1cm4KLSAgICBpZiAoIXN1bVRvQnVzICYm
IHRoaXMgPT0gJnNvdXJjZUJ1cyAmJiAqbGFzdE1peEdhaW4gPT0gdGFyZ2V0R2FpbiAmJiB0YXJn
ZXRHYWluID09IDEuMCkKLSAgICAgICAgcmV0dXJuOworICAgIGludCBudW1iZXJPZlNvdXJjZUNo
YW5uZWxzID0gc291cmNlQnVzLm51bWJlck9mQ2hhbm5lbHMoKTsKKyAgICBpbnQgbnVtYmVyT2ZE
ZXN0aW5hdGlvbkNoYW5uZWxzID0gbnVtYmVyT2ZDaGFubmVscygpOwogCi0gICAgLy8gRGlzcGF0
Y2ggZm9yIGRpZmZlcmVudCBjaGFubmVsIGxheW91dHMKLSAgICBzd2l0Y2ggKG51bWJlck9mQ2hh
bm5lbHMoKSkgewotICAgIGNhc2UgMTogLy8gbW9ubwotICAgIGNhc2UgMjogLy8gc3RlcmVvCi0g
ICAgICAgIHByb2Nlc3NXaXRoR2FpbkZyb21Nb25vU3RlcmVvKHNvdXJjZUJ1cywgbGFzdE1peEdh
aW4sIHRhcmdldEdhaW4sIHN1bVRvQnVzKTsKKyAgICBzd2l0Y2ggKG51bWJlck9mU291cmNlQ2hh
bm5lbHMpIHsKKyAgICBjYXNlIDE6CisgICAgICAgIHN3aXRjaCAobnVtYmVyT2ZEZXN0aW5hdGlv
bkNoYW5uZWxzKSB7CisgICAgICAgIGNhc2UgMjogLy8gbW9ubyAtPiBzdGVyZW8KKyAgICAgICAg
ICAgIHByb2Nlc3NXaXRoR2Fpbk1vbm9Ub1N0ZXJlbyhzb3VyY2VCdXMsIGxhc3RNaXhHYWluLCB0
YXJnZXRHYWluLCBzdW1Ub0J1cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDogLy8gRklYTUU6IGltcGxlbWVudCA0LjAsIDUuMCwgNS4xCisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgNDogLy8gRklYTUU6IGltcGxlbWVudCBxdWFkCi0gICAgY2FzZSA1OiAv
LyBGSVhNRTogaW1wbGVtZW50IDUuMAotICAgIGRlZmF1bHQ6CisgICAgZGVmYXVsdDogLy8gRklY
TUU6IGltcGxlbWVudCAyLjAgNC4wLCA1LjAsIDUuMQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCit9CisKK3ZvaWQgQXVkaW9CdXM6OnByb2Nl
c3NXaXRoR2FpbkZyb20oY29uc3QgQXVkaW9CdXMgJnNvdXJjZUJ1cywgZmxvYXQqIGxhc3RNaXhH
YWluLCBmbG9hdCB0YXJnZXRHYWluLCBib29sIHN1bVRvQnVzKQoreworICAgIGlmICh0b3BvbG9n
eU1hdGNoZXMoc291cmNlQnVzKSkKKyAgICAgICAgcHJvY2Vzc01hdGNoaW5nQnVzV2l0aEdhaW5G
cm9tKHNvdXJjZUJ1cywgbGFzdE1peEdhaW4sIHRhcmdldEdhaW4sIHN1bVRvQnVzKTsKKyAgICBl
bHNlCisgICAgICAgIHByb2Nlc3NVbk1hdGNoaW5nQnVzV2l0aEdhaW5Gcm9tKHNvdXJjZUJ1cywg
bGFzdE1peEdhaW4sIHRhcmdldEdhaW4sIHN1bVRvQnVzKTsKIH0KIAogdm9pZCBBdWRpb0J1czo6
Y29weVdpdGhTYW1wbGVBY2N1cmF0ZUdhaW5WYWx1ZXNGcm9tKGNvbnN0IEF1ZGlvQnVzICZzb3Vy
Y2VCdXMsIGZsb2F0KiBnYWluVmFsdWVzLCB1bnNpZ25lZCBudW1iZXJPZkdhaW5WYWx1ZXMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMuaAppbmRleCBiM2RhMGY0NTFkMTgx
NDNhN2IwMWY0Y2RkMjA5NzcwMGQ4ZDE1OWMwLi5mYzhkNWExYzA0OGE0MmM2MzZkNTg1YzAxZTdj
ZTUzZmYxZGQ3NzVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9B
dWRpb0J1cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvQnVzLmgK
QEAgLTEzOCw3ICsxMzgsMTEgQEAgcHJvdGVjdGVkOgogICAgIEF1ZGlvQnVzKCkgeyB9OwogCiAg
ICAgdm9pZCBwcm9jZXNzV2l0aEdhaW5Gcm9tKGNvbnN0IEF1ZGlvQnVzICZzb3VyY2VCdXMsIGZs
b2F0KiBsYXN0TWl4R2FpbiwgZmxvYXQgdGFyZ2V0R2FpbiwgYm9vbCBzdW1Ub0J1cyk7Ci0gICAg
dm9pZCBwcm9jZXNzV2l0aEdhaW5Gcm9tTW9ub1N0ZXJlbyhjb25zdCBBdWRpb0J1cyAmc291cmNl
QnVzLCBmbG9hdCogbGFzdE1peEdhaW4sIGZsb2F0IHRhcmdldEdhaW4sIGJvb2wgc3VtVG9CdXMp
OworICAgIHZvaWQgcHJvY2Vzc01hdGNoaW5nQnVzV2l0aEdhaW5Gcm9tKGNvbnN0IEF1ZGlvQnVz
ICZzb3VyY2VCdXMsIGZsb2F0KiBsYXN0TWl4R2FpbiwgZmxvYXQgdGFyZ2V0R2FpbiwgYm9vbCBz
dW1Ub0J1cyk7CisgICAgdm9pZCBwcm9jZXNzVW5NYXRjaGluZ0J1c1dpdGhHYWluRnJvbShjb25z
dCBBdWRpb0J1cyAmc291cmNlQnVzLCBmbG9hdCogbGFzdE1peEdhaW4sIGZsb2F0IHRhcmdldEdh
aW4sIGJvb2wgc3VtVG9CdXMpOworICAgIHZvaWQgcHJlcGFyZUdhaW5QYXJhbXMoZmxvYXQgbGFz
dE1peEdhaW4sIGZsb2F0IHRhcmdldEdhaW4sIGludCBmcmFtZXNUb1Byb2Nlc3MsIGZsb2F0ICZ0
b3RhbERlc2lyZWRHYWluLCBmbG9hdCAmZ2FpbiwgaW50ICZmcmFtZXNUb0RlemlwcGVyKTsKKwor
ICAgIHZvaWQgcHJvY2Vzc1dpdGhHYWluTW9ub1RvU3RlcmVvKGNvbnN0IEF1ZGlvQnVzICZzb3Vy
Y2VCdXMsIGZsb2F0KiBsYXN0TWl4R2FpbiwgZmxvYXQgdGFyZ2V0R2FpbiwgYm9vbCBzdW1Ub0J1
cyk7CiAKICAgICBzaXplX3QgbV9sZW5ndGg7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130977</attachid>
            <date>2012-03-08 21:43:08 -0800</date>
            <delta_ts>2012-03-12 23:42:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80675-20120309134816.patch</filename>
            <type>text/plain</type>
            <size>18237</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMjA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWQ1MzVhYjFiZDcxMzFj
ZjQyMmE4MzUwNDdjMWQxYjllZjI5ODIxNS4uMzA3M2Q3NDUyZjg5YzgyODU4ZjM5NDQ2ZWY1NGI4
OWUxYjIyZjNjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTAzLTA4ICBSYXlt
b25kIExpdSAgPHJheW1vbmQubGl1QGludGVsLmNvbT4KKworICAgICAgICBBZGQgbXVsdGktY2hh
bm5lbHMgc3VwcG9ydCBmb3IgQ29weVdpdGhHYWluRnJvbSBpbiBBdWRpb0J1cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA2NzUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1
ZGlvQnVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9C
dXM6OkF1ZGlvQnVzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVzOjpwcm9jZXNzV2l0aEdh
aW5Nb25vVG9TdGVyZW8pOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CdXM6OnByZXBhcmVHYWlu
UGFyYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVzOjpwcm9jZXNzTWF0Y2hpbmdCdXNX
aXRoR2FpbkZyb20pOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CdXM6OnByb2Nlc3NVbk1hdGNo
aW5nQnVzV2l0aEdhaW5Gcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVzOjpwcm9jZXNz
V2l0aEdhaW5Gcm9tKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5oOgorICAg
ICAgICAoQXVkaW9CdXMpOgorCiAyMDEyLTAzLTA4ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgaW1wbGVtZW50IGZsZXhib3ggd3JhcC1yZXZlcnNlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5jcHAKaW5kZXggZTdmODkwMmY3MmY5ZTBk
NjcwMTU2ZDFmYjUyMTM4MTAyZjQ5NDEzZS4uYzBjMWQwOTk2MDU5ZTk4NzJjMzVhOGQ3YzI3NGI2
ZGNlMmIzOTdhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVk
aW9CdXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvQnVzLmNw
cApAQCAtNDUsMTMgKzQ1LDE3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVz
cGFjZSBWZWN0b3JNYXRoOwotICAgIAorCitjb25zdCB1bnNpZ25lZCBNYXhCdXNDaGFubmVscyA9
IDY7CisKIEF1ZGlvQnVzOjpBdWRpb0J1cyh1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBzaXpl
X3QgbGVuZ3RoLCBib29sIGFsbG9jYXRlKQogICAgIDogbV9sZW5ndGgobGVuZ3RoKQogICAgICwg
bV9idXNHYWluKDEpCiAgICAgLCBtX2lzRmlyc3RUaW1lKHRydWUpCiAgICAgLCBtX3NhbXBsZVJh
dGUoMCkKIHsKKyAgICBBU1NFUlQobnVtYmVyT2ZDaGFubmVscyA8PSBNYXhCdXNDaGFubmVscyk7
CisKICAgICBtX2NoYW5uZWxzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZDaGFubmVs
cyk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytp
KSB7CkBAIC0zMTUsMjggKzMxOSwxODMgQEAgdm9pZCBBdWRpb0J1czo6c3VtRnJvbShjb25zdCBB
dWRpb0J1cyAmc291cmNlQnVzKQogLy8gRGUtemlwcGVyIGZvciB0aGUgZmlyc3QgZnJhbWVzVG9E
ZXppcHBlciBmcmFtZXMgYW5kIHNraXAgZGUtemlwcGVyaW5nIGZvciB0aGUgcmVtYWluaW5nIGZy
YW1lcwogLy8gYmVjYXVzZSB0aGUgZ2FpbiBpcyBjbG9zZSBlbm91Z2ggdG8gdGhlIHRhcmdldCBn
YWluLgogI2RlZmluZSBQUk9DRVNTX1dJVEhfR0FJTihPUCkgXAotICAgIGZvciAoayA9IDA7IGsg
PCBmcmFtZXNUb0RlemlwcGVyOyArK2spIHsgXAotICAgICAgICBPUCBcCi0gICAgICAgIEdBSU5f
REVaSVBQRVIgXAotICAgIH0gXAotICAgIGlmICghZnJhbWVzVG9EZXppcHBlcikgXAotICAgICAg
ICBnYWluID0gdG90YWxEZXNpcmVkR2FpbjsgXAotICAgIE9QIyNfViAKLQotI2RlZmluZSBTVEVS
RU9fU1VNIFwKICAgICB7IFwKLSAgICAgICAgZmxvYXQgc3VtTCA9IERlbm9ybWFsRGlzYWJsZXI6
OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybygqZGVzdGluYXRpb25MICsgZ2FpbiAqICpzb3VyY2VM
KyspOyBcCi0gICAgICAgIGZsb2F0IHN1bVIgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9y
bWFsRmxvYXRUb1plcm8oKmRlc3RpbmF0aW9uUiArIGdhaW4gKiAqc291cmNlUisrKTsgXAotICAg
ICAgICAqZGVzdGluYXRpb25MKysgPSBzdW1MOyBcCi0gICAgICAgICpkZXN0aW5hdGlvblIrKyA9
IHN1bVI7IFwKKyAgICAgICAgZm9yIChrID0gMDsgayA8IGZyYW1lc1RvRGV6aXBwZXI7ICsraykg
eyBcCisgICAgICAgICAgICBPUCBcCisgICAgICAgICAgICBHQUlOX0RFWklQUEVSIFwKKyAgICAg
ICAgfSBcCisgICAgICAgIGlmICghZnJhbWVzVG9EZXppcHBlcikgXAorICAgICAgICAgICAgZ2Fp
biA9IHRvdGFsRGVzaXJlZEdhaW47IFwKKyAgICAgICAgT1AjI19WIFwKICAgICB9CiAKLSNkZWZp
bmUgU1RFUkVPX1NVTV9WIFwKKyNkZWZpbmUgX1NJTkdMRV9DSEFOTkVMX1NVTShpbmRleCkgXAor
ICAgIGZsb2F0KiAmZGVzdGluYXRpb25fIyNpbmRleCA9IGRlc3RpbmF0aW9uc1tpbmRleF07IFwK
KyAgICBzdW0gPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oKmRl
c3RpbmF0aW9uXyMjaW5kZXggKyBnYWluICogKnNvdXJjZXNbaW5kZXhdKyspOyBcCisgICAgKmRl
c3RpbmF0aW9uXyMjaW5kZXgrKyA9IHN1bTsKKworI2RlZmluZSBTVU1fMV9DSEFOTkVMIF9TSU5H
TEVfQ0hBTk5FTF9TVU0oMCkKKworI2RlZmluZSBTVU1fMl9DSEFOTkVMUyBcCisgICAgU1VNXzFf
Q0hBTk5FTCBcCisgICAgX1NJTkdMRV9DSEFOTkVMX1NVTSgxKQorCisjZGVmaW5lIFNVTV8zX0NI
QU5ORUxTIFwKKyAgICBTVU1fMl9DSEFOTkVMUyBcCisgICAgX1NJTkdMRV9DSEFOTkVMX1NVTSgy
KQorCisjZGVmaW5lIFNVTV80X0NIQU5ORUxTIFwKKyAgICBTVU1fM19DSEFOTkVMUyBcCisgICAg
X1NJTkdMRV9DSEFOTkVMX1NVTSgzKQorCisjZGVmaW5lIFNVTV81X0NIQU5ORUxTIFwKKyAgICBT
VU1fNF9DSEFOTkVMUyBcCisgICAgX1NJTkdMRV9DSEFOTkVMX1NVTSg0KQorCisjZGVmaW5lIFNV
TV82X0NIQU5ORUxTIFwKKyAgICBTVU1fNV9DSEFOTkVMUyBcCisgICAgX1NJTkdMRV9DSEFOTkVM
X1NVTSg1KQorCisjZGVmaW5lIE1VTFRJX0NIQU5ORUxTX1NVTShOKSBcCiAgICAgeyBcCi0gICAg
ICAgIHZzbWEoc291cmNlTCwgMSwgJmdhaW4sIGRlc3RpbmF0aW9uTCwgMSwgZnJhbWVzVG9Qcm9j
ZXNzIC0gayk7IFwKLSAgICAgICAgdnNtYShzb3VyY2VSLCAxLCAmZ2FpbiwgZGVzdGluYXRpb25S
LCAxLCBmcmFtZXNUb1Byb2Nlc3MgLSBrKTsgXAorICAgICAgICBmbG9hdCBzdW07IFwKKyAgICAg
ICAgU1VNXyMjTiMjX0NIQU5ORUxTIFwKKyAgICB9CisKKyNkZWZpbmUgTVVMVElfQ0hBTk5FTFNf
U1VNXzIgTVVMVElfQ0hBTk5FTFNfU1VNKDIpCisjZGVmaW5lIE1VTFRJX0NIQU5ORUxTX1NVTV8z
IE1VTFRJX0NIQU5ORUxTX1NVTSgzKQorI2RlZmluZSBNVUxUSV9DSEFOTkVMU19TVU1fNCBNVUxU
SV9DSEFOTkVMU19TVU0oNCkKKyNkZWZpbmUgTVVMVElfQ0hBTk5FTFNfU1VNXzUgTVVMVElfQ0hB
Tk5FTFNfU1VNKDUpCisjZGVmaW5lIE1VTFRJX0NIQU5ORUxTX1NVTV82IE1VTFRJX0NIQU5ORUxT
X1NVTSg2KQorCisjZGVmaW5lIFNJTkdMRV9DSEFOTkVMX1NVTSBcCisgICAgeyBcCisgICAgICAg
IGZsb2F0IHN1bTsgXAorICAgICAgICBTVU1fMV9DSEFOTkVMIFwKICAgICB9CiAKKyNkZWZpbmUg
X1NJTkdMRV9DSEFOTkVMX1NVTV9WKGluZGV4KSB2c21hKHNvdXJjZXNbaW5kZXhdLCAxLCAmZ2Fp
biwgZGVzdGluYXRpb25zW2luZGV4XSwgMSwgZnJhbWVzVG9Qcm9jZXNzIC0gayk7CisKKyNkZWZp
bmUgU1VNXzFfQ0hBTk5FTF9WIF9TSU5HTEVfQ0hBTk5FTF9TVU1fVigwKQorCisjZGVmaW5lIFNV
TV8yX0NIQU5ORUxTX1YgXAorICAgIFNVTV8xX0NIQU5ORUxfViBcCisgICAgX1NJTkdMRV9DSEFO
TkVMX1NVTV9WKDEpCisKKyNkZWZpbmUgU1VNXzNfQ0hBTk5FTFNfViBcCisgICAgU1VNXzJfQ0hB
Tk5FTFNfViBcCisgICAgX1NJTkdMRV9DSEFOTkVMX1NVTV9WKDIpCisKKyNkZWZpbmUgU1VNXzRf
Q0hBTk5FTFNfViBcCisgICAgU1VNXzNfQ0hBTk5FTFNfViBcCisgICAgX1NJTkdMRV9DSEFOTkVM
X1NVTV9WKDMpCisKKyNkZWZpbmUgU1VNXzVfQ0hBTk5FTFNfViBcCisgICAgU1VNXzRfQ0hBTk5F
TFNfViBcCisgICAgX1NJTkdMRV9DSEFOTkVMX1NVTV9WKDQpCisKKyNkZWZpbmUgU1VNXzZfQ0hB
Tk5FTFNfViBcCisgICAgU1VNXzVfQ0hBTk5FTFNfViBcCisgICAgX1NJTkdMRV9DSEFOTkVMX1NV
TV9WKDUpCisKKyNkZWZpbmUgTVVMVElfQ0hBTk5FTFNfU1VNX1YoTikgXAorICAgIHsgXAorICAg
ICAgICBTVU1fIyNOIyNfQ0hBTk5FTFNfViBcCisgICAgfQorCisjZGVmaW5lIFNJTkdMRV9DSEFO
TkVMX1NVTV9WIFwKKyAgICB7IFwKKyAgICAgICAgU1VNXzFfQ0hBTk5FTF9WIFwKKyAgICB9CisK
KyNkZWZpbmUgTVVMVElfQ0hBTk5FTFNfU1VNXzJfViBNVUxUSV9DSEFOTkVMU19TVU1fVigyKQor
I2RlZmluZSBNVUxUSV9DSEFOTkVMU19TVU1fM19WIE1VTFRJX0NIQU5ORUxTX1NVTV9WKDMpCisj
ZGVmaW5lIE1VTFRJX0NIQU5ORUxTX1NVTV80X1YgTVVMVElfQ0hBTk5FTFNfU1VNX1YoNCkKKyNk
ZWZpbmUgTVVMVElfQ0hBTk5FTFNfU1VNXzVfViBNVUxUSV9DSEFOTkVMU19TVU1fVig1KQorI2Rl
ZmluZSBNVUxUSV9DSEFOTkVMU19TVU1fNl9WIE1VTFRJX0NIQU5ORUxTX1NVTV9WKDYpCisKKyNk
ZWZpbmUgX1NJTkdMRV9DSEFOTkVMX0NPUFkoaW5kZXgpIFwKKyAgICBmbG9hdCBzb3VyY2VfIyNp
bmRleCA9ICpzb3VyY2VzW2luZGV4XSsrOyBcCisgICAgKmRlc3RpbmF0aW9uc1tpbmRleF0rKyA9
IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluICogc291cmNl
XyMjaW5kZXgpOworCisjZGVmaW5lIENPUFlfMV9DSEFOTkVMIF9TSU5HTEVfQ0hBTk5FTF9DT1BZ
KDApCisKKyNkZWZpbmUgQ09QWV8yX0NIQU5ORUxTIFwKKyAgICBDT1BZXzFfQ0hBTk5FTCBcCisg
ICAgX1NJTkdMRV9DSEFOTkVMX0NPUFkoMSkKKworI2RlZmluZSBDT1BZXzNfQ0hBTk5FTFMgXAor
ICAgIENPUFlfMl9DSEFOTkVMUyBcCisgICAgX1NJTkdMRV9DSEFOTkVMX0NPUFkoMikKKworI2Rl
ZmluZSBDT1BZXzRfQ0hBTk5FTFMgXAorICAgIENPUFlfM19DSEFOTkVMUyBcCisgICAgX1NJTkdM
RV9DSEFOTkVMX0NPUFkoMykKKworI2RlZmluZSBDT1BZXzVfQ0hBTk5FTFMgXAorICAgIENPUFlf
NF9DSEFOTkVMUyBcCisgICAgX1NJTkdMRV9DSEFOTkVMX0NPUFkoNCkKKworI2RlZmluZSBDT1BZ
XzZfQ0hBTk5FTFMgXAorICAgIENPUFlfNV9DSEFOTkVMUyBcCisgICAgX1NJTkdMRV9DSEFOTkVM
X0NPUFkoNSkKKworI2RlZmluZSBNVUxUSV9DSEFOTkVMU19DT1BZKE4pIFwKKyAgICB7IFwKKyAg
ICAgICAgQ09QWV8jI04jI19DSEFOTkVMUyBcCisgICAgfQorCisjZGVmaW5lIE1VTFRJX0NIQU5O
RUxTX0NPUFlfMiBNVUxUSV9DSEFOTkVMU19DT1BZKDIpCisjZGVmaW5lIE1VTFRJX0NIQU5ORUxT
X0NPUFlfMyBNVUxUSV9DSEFOTkVMU19DT1BZKDMpCisjZGVmaW5lIE1VTFRJX0NIQU5ORUxTX0NP
UFlfNCBNVUxUSV9DSEFOTkVMU19DT1BZKDQpCisjZGVmaW5lIE1VTFRJX0NIQU5ORUxTX0NPUFlf
NSBNVUxUSV9DSEFOTkVMU19DT1BZKDUpCisjZGVmaW5lIE1VTFRJX0NIQU5ORUxTX0NPUFlfNiBN
VUxUSV9DSEFOTkVMU19DT1BZKDYpCisKKyNkZWZpbmUgU0lOR0xFX0NIQU5ORUxfQ09QWSBcCisg
ICAgeyBcCisgICAgICAgIENPUFlfMV9DSEFOTkVMIFwKKyAgICB9CisKKyNkZWZpbmUgX1NJTkdM
RV9DSEFOTkVMX0NPUFlfVihpbmRleCkgdnNtdWwoc291cmNlc1tpbmRleF0sIDEsICZnYWluLCBk
ZXN0aW5hdGlvbnNbaW5kZXhdLCAxLCBmcmFtZXNUb1Byb2Nlc3MgLSBrKTsKKworI2RlZmluZSBD
T1BZXzFfQ0hBTk5FTF9WIF9TSU5HTEVfQ0hBTk5FTF9DT1BZX1YoMCkKKworI2RlZmluZSBDT1BZ
XzJfQ0hBTk5FTFNfViBcCisgICAgQ09QWV8xX0NIQU5ORUxfViBcCisgICAgX1NJTkdMRV9DSEFO
TkVMX0NPUFlfVigxKQorCisjZGVmaW5lIENPUFlfM19DSEFOTkVMU19WIFwKKyAgICBDT1BZXzJf
Q0hBTk5FTFNfViBcCisgICAgX1NJTkdMRV9DSEFOTkVMX0NPUFlfVigyKQorCisjZGVmaW5lIENP
UFlfNF9DSEFOTkVMU19WIFwKKyAgICBDT1BZXzNfQ0hBTk5FTFNfViBcCisgICAgX1NJTkdMRV9D
SEFOTkVMX0NPUFlfVigzKQorCisjZGVmaW5lIENPUFlfNV9DSEFOTkVMU19WIFwKKyAgICBDT1BZ
XzRfQ0hBTk5FTFNfViBcCisgICAgX1NJTkdMRV9DSEFOTkVMX0NPUFlfVig0KQorCisjZGVmaW5l
IENPUFlfNl9DSEFOTkVMU19WIFwKKyAgICBDT1BZXzVfQ0hBTk5FTFNfViBcCisgICAgX1NJTkdM
RV9DSEFOTkVMX0NPUFlfVig1KQorCisjZGVmaW5lIE1VTFRJX0NIQU5ORUxTX0NPUFlfVihOKSBc
CisgICAgeyBcCisgICAgICAgIENPUFlfIyNOIyNfQ0hBTk5FTFNfViBcCisgICAgfQorCisjZGVm
aW5lIFNJTkdMRV9DSEFOTkVMX0NPUFlfViBcCisgICAgeyBcCisgICAgICAgIENPUFlfMV9DSEFO
TkVMX1YgXAorICAgIH0KKworI2RlZmluZSBNVUxUSV9DSEFOTkVMU19DT1BZXzJfViBNVUxUSV9D
SEFOTkVMU19DT1BZX1YoMikKKyNkZWZpbmUgTVVMVElfQ0hBTk5FTFNfQ09QWV8zX1YgTVVMVElf
Q0hBTk5FTFNfQ09QWV9WKDMpCisjZGVmaW5lIE1VTFRJX0NIQU5ORUxTX0NPUFlfNF9WIE1VTFRJ
X0NIQU5ORUxTX0NPUFlfVig0KQorI2RlZmluZSBNVUxUSV9DSEFOTkVMU19DT1BZXzVfViBNVUxU
SV9DSEFOTkVMU19DT1BZX1YoNSkKKyNkZWZpbmUgTVVMVElfQ0hBTk5FTFNfQ09QWV82X1YgTVVM
VElfQ0hBTk5FTFNfQ09QWV9WKDYpCisKIC8vIE1vbm8gLT4gc3RlcmVvIChtaXggZXF1YWxseSBp
bnRvIEwgYW5kIFIpCiAvLyBGSVhNRTogUmVhbGx5IHdlIHNob3VsZCBhcHBseSBhbiBlcXVhbC1w
b3dlciBzY2FsaW5nIGZhY3RvciBoZXJlLCBzaW5jZSB3ZSdyZSBlZmZlY3RpdmVseSBwYW5uaW5n
IGNlbnRlci4uLgogI2RlZmluZSBNT05PMlNURVJFT19TVU0gXApAQCAtMzU0LDMxICs1MTMsNiBA
QCB2b2lkIEF1ZGlvQnVzOjpzdW1Gcm9tKGNvbnN0IEF1ZGlvQnVzICZzb3VyY2VCdXMpCiAgICAg
ICAgIHZzbWEoc291cmNlTCwgMSwgJmdhaW4sIGRlc3RpbmF0aW9uUiwgMSwgZnJhbWVzVG9Qcm9j
ZXNzIC0gayk7IFwKICAgICB9CiAgICAgCi0jZGVmaW5lIE1PTk9fU1VNIFwKLSAgICB7IFwKLSAg
ICAgICAgZmxvYXQgc3VtID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9a
ZXJvKCpkZXN0aW5hdGlvbkwgKyBnYWluICogKnNvdXJjZUwrKyk7IFwKLSAgICAgICAgKmRlc3Rp
bmF0aW9uTCsrID0gc3VtOyBcCi0gICAgfQotCi0jZGVmaW5lIE1PTk9fU1VNX1YgXAotICAgIHsg
XAotICAgICAgICB2c21hKHNvdXJjZUwsIDEsICZnYWluLCBkZXN0aW5hdGlvbkwsIDEsIGZyYW1l
c1RvUHJvY2VzcyAtIGspOyBcCi0gICAgfSAKLQotI2RlZmluZSBTVEVSRU9fTk9fU1VNIFwKLSAg
ICB7IFwKLSAgICAgICAgZmxvYXQgc2FtcGxlTCA9ICpzb3VyY2VMKys7IFwKLSAgICAgICAgZmxv
YXQgc2FtcGxlUiA9ICpzb3VyY2VSKys7IFwKLSAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gRGVu
b3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4gKiBzYW1wbGVMKTsg
XAotICAgICAgICAqZGVzdGluYXRpb25SKysgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9y
bWFsRmxvYXRUb1plcm8oZ2FpbiAqIHNhbXBsZVIpOyBcCi0gICAgfQotCi0jZGVmaW5lIFNURVJF
T19OT19TVU1fViBcCi0gICAgeyBcCi0gICAgICAgIHZzbXVsKHNvdXJjZUwsIDEsICZnYWluLCBk
ZXN0aW5hdGlvbkwsIDEsIGZyYW1lc1RvUHJvY2VzcyAtIGspOyBcCi0gICAgICAgIHZzbXVsKHNv
dXJjZVIsIDEsICZnYWluLCBkZXN0aW5hdGlvblIsIDEsIGZyYW1lc1RvUHJvY2VzcyAtIGspOyBc
Ci0gICAgfQotCiAvLyBNb25vIC0+IHN0ZXJlbyAobWl4IGVxdWFsbHkgaW50byBMIGFuZCBSKQog
Ly8gRklYTUU6IFJlYWxseSB3ZSBzaG91bGQgYXBwbHkgYW4gZXF1YWwtcG93ZXIgc2NhbGluZyBm
YWN0b3IgaGVyZSwgc2luY2Ugd2UncmUgZWZmZWN0aXZlbHkgcGFubmluZyBjZW50ZXIuLi4KICNk
ZWZpbmUgTU9OTzJTVEVSRU9fTk9fU1VNIFwKQEAgLTM5NCw3NSArNTI4LDEyNCBAQCB2b2lkIEF1
ZGlvQnVzOjpzdW1Gcm9tKGNvbnN0IEF1ZGlvQnVzICZzb3VyY2VCdXMpCiAgICAgICAgIHZzbXVs
KHNvdXJjZUwsIDEsICZnYWluLCBkZXN0aW5hdGlvblIsIDEsIGZyYW1lc1RvUHJvY2VzcyAtIGsp
OyBcCiAgICAgfQogCi0jZGVmaW5lIE1PTk9fTk9fU1VNIFwKLSAgICB7IFwKLSAgICAgICAgZmxv
YXQgc2FtcGxlTCA9ICpzb3VyY2VMKys7IFwKLSAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gRGVu
b3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4gKiBzYW1wbGVMKTsg
XAotICAgIH0KKyNkZWZpbmUgUFJFUEFSRV9HQUlOX1BBUkFNUyBcCisgICAgZmxvYXQgdG90YWxE
ZXNpcmVkR2FpbjsgXAorICAgIGZsb2F0IGdhaW47IFwKKyAgICBpbnQgZnJhbWVzVG9EZXppcHBl
cjsgXAorICAgIGNvbnN0IGZsb2F0IERlemlwcGVyUmF0ZSA9IDAuMDA1ZjsgXAorICAgIGludCBm
cmFtZXNUb1Byb2Nlc3MgPSBsZW5ndGgoKTsgXAorICAgIGludCBrID0gMDsgXAorICAgIHByZXBh
cmVHYWluUGFyYW1zKCpsYXN0TWl4R2FpbiwgdGFyZ2V0R2FpbiwgZnJhbWVzVG9Qcm9jZXNzLCB0
b3RhbERlc2lyZWRHYWluLCBnYWluLCBmcmFtZXNUb0RlemlwcGVyKTsKIAotI2RlZmluZSBNT05P
X05PX1NVTV9WIFwKLSAgICB7IFwKLSAgICAgICAgdnNtdWwoc291cmNlTCwgMSwgJmdhaW4sIGRl
c3RpbmF0aW9uTCwgMSwgZnJhbWVzVG9Qcm9jZXNzIC0gayk7IFwKLSAgICB9IAogCi12b2lkIEF1
ZGlvQnVzOjpwcm9jZXNzV2l0aEdhaW5Gcm9tTW9ub1N0ZXJlbyhjb25zdCBBdWRpb0J1cyAmc291
cmNlQnVzLCBmbG9hdCogbGFzdE1peEdhaW4sIGZsb2F0IHRhcmdldEdhaW4sIGJvb2wgc3VtVG9C
dXMpCit2b2lkIEF1ZGlvQnVzOjpwcm9jZXNzV2l0aEdhaW5Nb25vVG9TdGVyZW8oY29uc3QgQXVk
aW9CdXMgJnNvdXJjZUJ1cywgZmxvYXQqIGxhc3RNaXhHYWluLCBmbG9hdCB0YXJnZXRHYWluLCBi
b29sIHN1bVRvQnVzKQoreworICAgIEFTU0VSVChzb3VyY2VCdXMubnVtYmVyT2ZDaGFubmVscygp
ID09IDEgJiYgbnVtYmVyT2ZDaGFubmVscygpID09IDIpOworCisgICAgQXVkaW9CdXMmIHNvdXJj
ZUJ1c1NhZmUgPSBjb25zdF9jYXN0PEF1ZGlvQnVzJj4oc291cmNlQnVzKTsKKyAgICBjb25zdCBm
bG9hdCogc291cmNlTCA9IHNvdXJjZUJ1c1NhZmUuY2hhbm5lbEJ5VHlwZShDaGFubmVsTGVmdCkt
PmRhdGEoKTsKKworICAgIGZsb2F0KiBkZXN0aW5hdGlvbkwgPSBjaGFubmVsQnlUeXBlKENoYW5u
ZWxMZWZ0KS0+bXV0YWJsZURhdGEoKTsKKyAgICBmbG9hdCogZGVzdGluYXRpb25SID0gY2hhbm5l
bEJ5VHlwZShDaGFubmVsUmlnaHQpLT5tdXRhYmxlRGF0YSgpOworCisgICAgUFJFUEFSRV9HQUlO
X1BBUkFNUworCisgICAgaWYgKHN1bVRvQnVzKQorICAgICAgICBQUk9DRVNTX1dJVEhfR0FJTihN
T05PMlNURVJFT19TVU0pCisgICAgZWxzZQorICAgICAgICBQUk9DRVNTX1dJVEhfR0FJTihNT05P
MlNURVJFT19OT19TVU0pCisKKyAgICAvLyBTYXZlIHRoZSB0YXJnZXQgZ2FpbiBhcyB0aGUgc3Rh
cnRpbmcgcG9pbnQgZm9yIG5leHQgdGltZSBhcm91bmQuCisgICAgKmxhc3RNaXhHYWluID0gZ2Fp
bjsKK30KKworCit2b2lkIEF1ZGlvQnVzOjpwcmVwYXJlR2FpblBhcmFtcyhmbG9hdCBsYXN0TWl4
R2FpbiwgZmxvYXQgdGFyZ2V0R2FpbiwgaW50IGZyYW1lc1RvUHJvY2VzcywgZmxvYXQgJnRvdGFs
RGVzaXJlZEdhaW4sIGZsb2F0ICZnYWluLCBpbnQgJmZyYW1lc1RvRGV6aXBwZXIpCiB7CiAgICAg
Ly8gV2UgZG9uJ3Qgd2FudCB0byBzdWRkZW5seSBjaGFuZ2UgdGhlIGdhaW4gZnJvbSBtaXhpbmcg
b25lIHRpbWUgc2xpY2UgdG8gdGhlIG5leHQsCiAgICAgLy8gc28gd2UgImRlLXppcHBlciIgYnkg
c2xvd2x5IGNoYW5naW5nIHRoZSBnYWluIGVhY2ggc2FtcGxlLWZyYW1lIHVudGlsIHdlJ3ZlIGFj
aGlldmVkIHRoZSB0YXJnZXQgZ2Fpbi4KICAgICAKICAgICAvLyBUYWtlIG1hc3RlciBidXMgZ2Fp
biBpbnRvIGFjY291bnQgYXMgd2VsbCBhcyB0aGUgdGFyZ2V0R2Fpbi4KLSAgICBmbG9hdCB0b3Rh
bERlc2lyZWRHYWluID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fYnVzR2FpbiAqIHRhcmdldEdhaW4p
OworICAgIHRvdGFsRGVzaXJlZEdhaW4gPSBzdGF0aWNfY2FzdDxmbG9hdD4obV9idXNHYWluICog
dGFyZ2V0R2Fpbik7CiAKICAgICAvLyBGaXJzdCB0aW1lLCBzbmFwIGRpcmVjdGx5IHRvIHRvdGFs
RGVzaXJlZEdhaW4uCi0gICAgZmxvYXQgZ2FpbiA9IHN0YXRpY19jYXN0PGZsb2F0PihtX2lzRmly
c3RUaW1lID8gdG90YWxEZXNpcmVkR2FpbiA6ICpsYXN0TWl4R2Fpbik7CisgICAgZ2FpbiA9IHN0
YXRpY19jYXN0PGZsb2F0PihtX2lzRmlyc3RUaW1lID8gdG90YWxEZXNpcmVkR2FpbiA6IGxhc3RN
aXhHYWluKTsKICAgICBtX2lzRmlyc3RUaW1lID0gZmFsc2U7CiAKLSAgICBpbnQgbnVtYmVyT2ZT
b3VyY2VDaGFubmVscyA9IHNvdXJjZUJ1cy5udW1iZXJPZkNoYW5uZWxzKCk7Ci0gICAgaW50IG51
bWJlck9mRGVzdGluYXRpb25DaGFubmVscyA9IG51bWJlck9mQ2hhbm5lbHMoKTsKLQotICAgIEF1
ZGlvQnVzJiBzb3VyY2VCdXNTYWZlID0gY29uc3RfY2FzdDxBdWRpb0J1cyY+KHNvdXJjZUJ1cyk7
Ci0gICAgY29uc3QgZmxvYXQqIHNvdXJjZUwgPSBzb3VyY2VCdXNTYWZlLmNoYW5uZWxCeVR5cGUo
Q2hhbm5lbExlZnQpLT5kYXRhKCk7Ci0gICAgY29uc3QgZmxvYXQqIHNvdXJjZVIgPSBudW1iZXJP
ZlNvdXJjZUNoYW5uZWxzID4gMSA/IHNvdXJjZUJ1c1NhZmUuY2hhbm5lbEJ5VHlwZShDaGFubmVs
UmlnaHQpLT5kYXRhKCkgOiAwOwotCi0gICAgZmxvYXQqIGRlc3RpbmF0aW9uTCA9IGNoYW5uZWxC
eVR5cGUoQ2hhbm5lbExlZnQpLT5tdXRhYmxlRGF0YSgpOwotICAgIGZsb2F0KiBkZXN0aW5hdGlv
blIgPSBudW1iZXJPZkRlc3RpbmF0aW9uQ2hhbm5lbHMgPiAxID8gY2hhbm5lbEJ5VHlwZShDaGFu
bmVsUmlnaHQpLT5tdXRhYmxlRGF0YSgpIDogMDsKLQotICAgIGNvbnN0IGZsb2F0IERlemlwcGVy
UmF0ZSA9IDAuMDA1ZjsKLSAgICBpbnQgZnJhbWVzVG9Qcm9jZXNzID0gbGVuZ3RoKCk7Ci0KICAg
ICAvLyBJZiB0aGUgZ2FpbiBpcyB3aXRoaW4gZXBzaWxvbiBvZiB0b3RhbERlc2lyZWRHYWluLCB3
ZSBjYW4gc2tpcCBkZXppcHBlcmluZy4gCiAgICAgLy8gRklYTUU6IHRoaXMgdmFsdWUgbWF5IG5l
ZWQgdHdlYWtpbmcuCiAgICAgY29uc3QgZmxvYXQgZXBzaWxvbiA9IDAuMDAxZjsgCiAgICAgZmxv
YXQgZ2FpbkRpZmYgPSBmYWJzKHRvdGFsRGVzaXJlZEdhaW4gLSBnYWluKTsKIAogICAgIC8vIE51
bWJlciBvZiBmcmFtZXMgdG8gZGUtemlwcGVyIGJlZm9yZSB3ZSBhcmUgY2xvc2UgZW5vdWdoIHRv
IHRoZSB0YXJnZXQgZ2Fpbi4KLSAgICBpbnQgZnJhbWVzVG9EZXppcHBlciA9IChnYWluRGlmZiA8
IGVwc2lsb24pID8gMCA6IGZyYW1lc1RvUHJvY2VzczsgCisgICAgZnJhbWVzVG9EZXppcHBlciA9
IChnYWluRGlmZiA8IGVwc2lsb24pID8gMCA6IGZyYW1lc1RvUHJvY2VzczsgCiAKLSAgICBpbnQg
ayA9IDA7Cit9CisKK3ZvaWQgQXVkaW9CdXM6OnByb2Nlc3NNYXRjaGluZ0J1c1dpdGhHYWluRnJv
bShjb25zdCBBdWRpb0J1cyAmc291cmNlQnVzLCBmbG9hdCogbGFzdE1peEdhaW4sIGZsb2F0IHRh
cmdldEdhaW4sIGJvb2wgc3VtVG9CdXMpCit7CisgICAgLy8gSWYgaXQgaXMgY29weWluZyBmcm9t
IHRoZSBzYW1lIGJ1cyBhbmQgbm8gbmVlZCB0byBjaGFuZ2UgZ2FpbiwganVzdCByZXR1cm4KKyAg
ICBpZiAoIXN1bVRvQnVzICYmIHRoaXMgPT0gJnNvdXJjZUJ1cyAmJiAqbGFzdE1peEdhaW4gPT0g
dGFyZ2V0R2FpbiAmJiB0YXJnZXRHYWluID09IDEuMCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
dW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscyA9IHRoaXMtPm51bWJlck9mQ2hhbm5lbHMoKTsKKyAg
ICBBU1NFUlQobnVtYmVyT2ZDaGFubmVscyA8PSBNYXhCdXNDaGFubmVscyk7CisgICAgaWYgKG51
bWJlck9mQ2hhbm5lbHMgPiBNYXhCdXNDaGFubmVscykKKyAgICAgICAgcmV0dXJuOworCisgICAg
QXVkaW9CdXMmIHNvdXJjZUJ1c1NhZmUgPSBjb25zdF9jYXN0PEF1ZGlvQnVzJj4oc291cmNlQnVz
KTsKKyAgICBjb25zdCBmbG9hdCogc291cmNlc1tNYXhCdXNDaGFubmVsc107CisgICAgZmxvYXQq
IGRlc3RpbmF0aW9uc1tNYXhCdXNDaGFubmVsc107CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKSB7CisgICAgICAgIHNvdXJjZXNbaV0gPSBzb3Vy
Y2VCdXNTYWZlLmNoYW5uZWwoaSktPmRhdGEoKTsKKyAgICAgICAgZGVzdGluYXRpb25zW2ldID0g
Y2hhbm5lbChpKS0+bXV0YWJsZURhdGEoKTsKKyAgICB9CisKKyAgICBQUkVQQVJFX0dBSU5fUEFS
QU1TCiAKICAgICBpZiAoc3VtVG9CdXMpIHsKICAgICAgICAgLy8gU3VtIHRvIG91ciBidXMKLSAg
ICAgICAgaWYgKHNvdXJjZVIgJiYgZGVzdGluYXRpb25SKSB7Ci0gICAgICAgICAgICAvLyBTdGVy
ZW8KLSAgICAgICAgICAgIFBST0NFU1NfV0lUSF9HQUlOKFNURVJFT19TVU0pCi0gICAgICAgIH0g
ZWxzZSBpZiAoZGVzdGluYXRpb25SKSB7Ci0gICAgICAgICAgICAvLyBNb25vIC0+IHN0ZXJlbyAK
LSAgICAgICAgICAgIFBST0NFU1NfV0lUSF9HQUlOKE1PTk8yU1RFUkVPX1NVTSkKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIC8vIE1vbm8KLSAgICAgICAgICAgIFBST0NFU1NfV0lUSF9H
QUlOKE1PTk9fU1VNKQorICAgICAgICBzd2l0Y2ggKG51bWJlck9mQ2hhbm5lbHMpIHsKKyAgICAg
ICAgY2FzZSAxOiAvLyBtb25vCisgICAgICAgICAgICBQUk9DRVNTX1dJVEhfR0FJTihTSU5HTEVf
Q0hBTk5FTF9TVU0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjogLy8gc3Rl
cmVvCisgICAgICAgICAgICBQUk9DRVNTX1dJVEhfR0FJTihNVUxUSV9DSEFOTkVMU19TVU1fMik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0OiAvLyBxdWFkCisgICAgICAgICAg
ICBQUk9DRVNTX1dJVEhfR0FJTihNVUxUSV9DSEFOTkVMU19TVU1fNCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSA1OiAvLyA1LjAKKyAgICAgICAgICAgIFBST0NFU1NfV0lUSF9H
QUlOKE1VTFRJX0NIQU5ORUxTX1NVTV81KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIDY6IC8vIDUuMQorICAgICAgICAgICAgUFJPQ0VTU19XSVRIX0dBSU4oTVVMVElfQ0hBTk5F
TFNfU1VNXzYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gUHJvY2VzcyBkaXJlY3RseSAod2l0aG91dCBzdW1t
aW5nKSB0byBvdXIgYnVzCi0gICAgICAgIGlmIChzb3VyY2VSICYmIGRlc3RpbmF0aW9uUikgewot
ICAgICAgICAgICAgLy8gU3RlcmVvCi0gICAgICAgICAgICBQUk9DRVNTX1dJVEhfR0FJTihTVEVS
RU9fTk9fU1VNKQotICAgICAgICB9IGVsc2UgaWYgKGRlc3RpbmF0aW9uUikgewotICAgICAgICAg
ICAgLy8gTW9ubyAtPiBzdGVyZW8gCi0gICAgICAgICAgICBQUk9DRVNTX1dJVEhfR0FJTihNT05P
MlNURVJFT19OT19TVU0pCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBNb25vCi0g
ICAgICAgICAgICBQUk9DRVNTX1dJVEhfR0FJTihNT05PX05PX1NVTSkKKyAgICAgICAgc3dpdGNo
IChudW1iZXJPZkNoYW5uZWxzKSB7CisgICAgICAgIGNhc2UgMTogLy8gbW9ubworICAgICAgICAg
ICAgUFJPQ0VTU19XSVRIX0dBSU4oU0lOR0xFX0NIQU5ORUxfQ09QWSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAyOiAvLyBzdGVyZW8KKyAgICAgICAgICAgIFBST0NFU1NfV0lU
SF9HQUlOKE1VTFRJX0NIQU5ORUxTX0NPUFlfMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSA0OiAvLyBxdWFkCisgICAgICAgICAgICBQUk9DRVNTX1dJVEhfR0FJTihNVUxUSV9D
SEFOTkVMU19DT1BZXzQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNTogLy8g
NS4wCisgICAgICAgICAgICBQUk9DRVNTX1dJVEhfR0FJTihNVUxUSV9DSEFOTkVMU19DT1BZXzUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNjogLy8gNS4xCisgICAgICAgICAg
ICBQUk9DRVNTX1dJVEhfR0FJTihNVUxUSV9DSEFOTkVMU19DT1BZXzYpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCkBAIC00NzAsMzAgKzY1
MywzNSBAQCB2b2lkIEF1ZGlvQnVzOjpwcm9jZXNzV2l0aEdhaW5Gcm9tTW9ub1N0ZXJlbyhjb25z
dCBBdWRpb0J1cyAmc291cmNlQnVzLCBmbG9hdCogbAogICAgICpsYXN0TWl4R2FpbiA9IGdhaW47
CiB9CiAKLXZvaWQgQXVkaW9CdXM6OnByb2Nlc3NXaXRoR2FpbkZyb20oY29uc3QgQXVkaW9CdXMg
JnNvdXJjZUJ1cywgZmxvYXQqIGxhc3RNaXhHYWluLCBmbG9hdCB0YXJnZXRHYWluLCBib29sIHN1
bVRvQnVzKQordm9pZCBBdWRpb0J1czo6cHJvY2Vzc1VuTWF0Y2hpbmdCdXNXaXRoR2FpbkZyb20o
Y29uc3QgQXVkaW9CdXMgJnNvdXJjZUJ1cywgZmxvYXQqIGxhc3RNaXhHYWluLCBmbG9hdCB0YXJn
ZXRHYWluLCBib29sIHN1bVRvQnVzKQogewotICAgIC8vIE1ha2Ugc3VyZSB3ZSdyZSBzdW1taW5n
IGZyb20gc2FtZSB0eXBlIG9mIGJ1cy4KLSAgICAvLyBXZSAqYXJlKiBhYmxlIHRvIHN1bSBmcm9t
IG1vbm8gLT4gc3RlcmVvCi0gICAgaWYgKHNvdXJjZUJ1cy5udW1iZXJPZkNoYW5uZWxzKCkgIT0g
MSAmJiAhdG9wb2xvZ3lNYXRjaGVzKHNvdXJjZUJ1cykpIHsKLSAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gSWYgaXQgaXMgY29weWlu
ZyBmcm9tIHRoZSBzYW1lIGJ1cyBhbmQgbm8gbmVlZCB0byBjaGFuZ2UgZ2FpbiwganVzdCByZXR1
cm4KLSAgICBpZiAoIXN1bVRvQnVzICYmIHRoaXMgPT0gJnNvdXJjZUJ1cyAmJiAqbGFzdE1peEdh
aW4gPT0gdGFyZ2V0R2FpbiAmJiB0YXJnZXRHYWluID09IDEuMCkKLSAgICAgICAgcmV0dXJuOwor
ICAgIGludCBudW1iZXJPZlNvdXJjZUNoYW5uZWxzID0gc291cmNlQnVzLm51bWJlck9mQ2hhbm5l
bHMoKTsKKyAgICBpbnQgbnVtYmVyT2ZEZXN0aW5hdGlvbkNoYW5uZWxzID0gbnVtYmVyT2ZDaGFu
bmVscygpOwogCi0gICAgLy8gRGlzcGF0Y2ggZm9yIGRpZmZlcmVudCBjaGFubmVsIGxheW91dHMK
LSAgICBzd2l0Y2ggKG51bWJlck9mQ2hhbm5lbHMoKSkgewotICAgIGNhc2UgMTogLy8gbW9ubwot
ICAgIGNhc2UgMjogLy8gc3RlcmVvCi0gICAgICAgIHByb2Nlc3NXaXRoR2FpbkZyb21Nb25vU3Rl
cmVvKHNvdXJjZUJ1cywgbGFzdE1peEdhaW4sIHRhcmdldEdhaW4sIHN1bVRvQnVzKTsKKyAgICBz
d2l0Y2ggKG51bWJlck9mU291cmNlQ2hhbm5lbHMpIHsKKyAgICBjYXNlIDE6CisgICAgICAgIHN3
aXRjaCAobnVtYmVyT2ZEZXN0aW5hdGlvbkNoYW5uZWxzKSB7CisgICAgICAgIGNhc2UgMjogLy8g
bW9ubyAtPiBzdGVyZW8KKyAgICAgICAgICAgIHByb2Nlc3NXaXRoR2Fpbk1vbm9Ub1N0ZXJlbyhz
b3VyY2VCdXMsIGxhc3RNaXhHYWluLCB0YXJnZXRHYWluLCBzdW1Ub0J1cyk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogLy8gRklYTUU6IGltcGxlbWVudCA0LjAsIDUuMCwg
NS4xCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgNDogLy8gRklYTUU6IGltcGxl
bWVudCBxdWFkCi0gICAgY2FzZSA1OiAvLyBGSVhNRTogaW1wbGVtZW50IDUuMAotICAgIGRlZmF1
bHQ6CisgICAgZGVmYXVsdDogLy8gRklYTUU6IGltcGxlbWVudCAyLjAgNC4wLCA1LjAsIDUuMQog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCit9
CisKK3ZvaWQgQXVkaW9CdXM6OnByb2Nlc3NXaXRoR2FpbkZyb20oY29uc3QgQXVkaW9CdXMgJnNv
dXJjZUJ1cywgZmxvYXQqIGxhc3RNaXhHYWluLCBmbG9hdCB0YXJnZXRHYWluLCBib29sIHN1bVRv
QnVzKQoreworICAgIGlmICh0b3BvbG9neU1hdGNoZXMoc291cmNlQnVzKSkKKyAgICAgICAgcHJv
Y2Vzc01hdGNoaW5nQnVzV2l0aEdhaW5Gcm9tKHNvdXJjZUJ1cywgbGFzdE1peEdhaW4sIHRhcmdl
dEdhaW4sIHN1bVRvQnVzKTsKKyAgICBlbHNlCisgICAgICAgIHByb2Nlc3NVbk1hdGNoaW5nQnVz
V2l0aEdhaW5Gcm9tKHNvdXJjZUJ1cywgbGFzdE1peEdhaW4sIHRhcmdldEdhaW4sIHN1bVRvQnVz
KTsKIH0KIAogdm9pZCBBdWRpb0J1czo6Y29weVdpdGhTYW1wbGVBY2N1cmF0ZUdhaW5WYWx1ZXNG
cm9tKGNvbnN0IEF1ZGlvQnVzICZzb3VyY2VCdXMsIGZsb2F0KiBnYWluVmFsdWVzLCB1bnNpZ25l
ZCBudW1iZXJPZkdhaW5WYWx1ZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9BdWRpb0J1cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9C
dXMuaAppbmRleCBiM2RhMGY0NTFkMTgxNDNhN2IwMWY0Y2RkMjA5NzcwMGQ4ZDE1OWMwLi5mYzhk
NWExYzA0OGE0MmM2MzZkNTg1YzAxZTdjZTUzZmYxZGQ3NzVlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL0F1ZGlvQnVzLmgKQEAgLTEzOCw3ICsxMzgsMTEgQEAgcHJvdGVjdGVkOgog
ICAgIEF1ZGlvQnVzKCkgeyB9OwogCiAgICAgdm9pZCBwcm9jZXNzV2l0aEdhaW5Gcm9tKGNvbnN0
IEF1ZGlvQnVzICZzb3VyY2VCdXMsIGZsb2F0KiBsYXN0TWl4R2FpbiwgZmxvYXQgdGFyZ2V0R2Fp
biwgYm9vbCBzdW1Ub0J1cyk7Ci0gICAgdm9pZCBwcm9jZXNzV2l0aEdhaW5Gcm9tTW9ub1N0ZXJl
byhjb25zdCBBdWRpb0J1cyAmc291cmNlQnVzLCBmbG9hdCogbGFzdE1peEdhaW4sIGZsb2F0IHRh
cmdldEdhaW4sIGJvb2wgc3VtVG9CdXMpOworICAgIHZvaWQgcHJvY2Vzc01hdGNoaW5nQnVzV2l0
aEdhaW5Gcm9tKGNvbnN0IEF1ZGlvQnVzICZzb3VyY2VCdXMsIGZsb2F0KiBsYXN0TWl4R2Fpbiwg
ZmxvYXQgdGFyZ2V0R2FpbiwgYm9vbCBzdW1Ub0J1cyk7CisgICAgdm9pZCBwcm9jZXNzVW5NYXRj
aGluZ0J1c1dpdGhHYWluRnJvbShjb25zdCBBdWRpb0J1cyAmc291cmNlQnVzLCBmbG9hdCogbGFz
dE1peEdhaW4sIGZsb2F0IHRhcmdldEdhaW4sIGJvb2wgc3VtVG9CdXMpOworICAgIHZvaWQgcHJl
cGFyZUdhaW5QYXJhbXMoZmxvYXQgbGFzdE1peEdhaW4sIGZsb2F0IHRhcmdldEdhaW4sIGludCBm
cmFtZXNUb1Byb2Nlc3MsIGZsb2F0ICZ0b3RhbERlc2lyZWRHYWluLCBmbG9hdCAmZ2FpbiwgaW50
ICZmcmFtZXNUb0RlemlwcGVyKTsKKworICAgIHZvaWQgcHJvY2Vzc1dpdGhHYWluTW9ub1RvU3Rl
cmVvKGNvbnN0IEF1ZGlvQnVzICZzb3VyY2VCdXMsIGZsb2F0KiBsYXN0TWl4R2FpbiwgZmxvYXQg
dGFyZ2V0R2FpbiwgYm9vbCBzdW1Ub0J1cyk7CiAKICAgICBzaXplX3QgbV9sZW5ndGg7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131556</attachid>
            <date>2012-03-12 23:43:03 -0700</date>
            <delta_ts>2012-03-15 23:01:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80675-20120313144815.patch</filename>
            <type>text/plain</type>
            <size>12785</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwNDk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjNlNDE2Yzk0NDczZmFj
OGFhYzZmOGUxYzVjOGFhMmMxYjg2MzAyYy4uZmMwY2FmNzYzZTY5NGFkODdjZmU0MGZkYzgwMDQw
YWM4ZDNlZDIyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTAzLTEyICBSYXlt
b25kIExpdSAgPHJheW1vbmQubGl1QGludGVsLmNvbT4KKworICAgICAgICBBZGQgbXVsdGktY2hh
bm5lbHMgc3VwcG9ydCBmb3IgQ29weVdpdGhHYWluRnJvbSBpbiBBdWRpb0J1cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA2NzUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1
ZGlvQnVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9C
dXM6OkF1ZGlvQnVzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVzOjpwcm9jZXNzV2l0aEdh
aW5Gcm9tKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5oOgorICAgICAgICAo
QXVkaW9CdXMpOgorCiAyMDEyLTAzLTEyICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBs
ZS5jb20+CiAKICAgICAgICAgVXNlIHNtYWxsZXIgdGlsZXMgZm9yIHJpZ2h0IGFuZCBib3R0b20g
ZWRnZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvQnVz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvQnVzLmNwcAppbmRleCBl
N2Y4OTAyZjcyZjllMGQ2NzAxNTZkMWZiNTIxMzgxMDJmNDk0MTNlLi5jNDQ1YWQzNjc3ZWQ5ZDY0
YWY4NTFhOGJmMzlmZDNkODI2ZmRkNzViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9BdWRpb0J1cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vQXVkaW9CdXMuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaWYgRU5BQkxFKFdFQl9BVURJTykK
IAogI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisjaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCiAKICNpbmNs
dWRlICJEZW5vcm1hbERpc2FibGVyLmgiCiAKQEAgLTQ1LDEzICs0NiwxNyBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgVmVjdG9yTWF0aDsKLSAgICAKKworY29uc3Qg
dW5zaWduZWQgTWF4QnVzQ2hhbm5lbHMgPSA2OworCiBBdWRpb0J1czo6QXVkaW9CdXModW5zaWdu
ZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IGxlbmd0aCwgYm9vbCBhbGxvY2F0ZSkKICAgICA6
IG1fbGVuZ3RoKGxlbmd0aCkKICAgICAsIG1fYnVzR2FpbigxKQogICAgICwgbV9pc0ZpcnN0VGlt
ZSh0cnVlKQogICAgICwgbV9zYW1wbGVSYXRlKDApCiB7CisgICAgQVNTRVJUKG51bWJlck9mQ2hh
bm5lbHMgPD0gTWF4QnVzQ2hhbm5lbHMpOworCiAgICAgbV9jaGFubmVscy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KG51bWJlck9mQ2hhbm5lbHMpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkgewpAQCAtMzA3LDEwNiArMzEyLDg5IEBAIHZvaWQg
QXVkaW9CdXM6OnN1bUZyb20oY29uc3QgQXVkaW9CdXMgJnNvdXJjZUJ1cykKICAgICB9CiB9CiAK
LS8vIFNsb3dseSBjaGFuZ2UgZ2FpbiB0byBkZXNpcmVkIGdhaW4uCi0jZGVmaW5lIEdBSU5fREVa
SVBQRVIgXAotICAgIGdhaW4gKz0gKHRvdGFsRGVzaXJlZEdhaW4gLSBnYWluKSAqIERlemlwcGVy
UmF0ZTsgXAotICAgIGdhaW4gPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRU
b1plcm8oZ2Fpbik7Ci0KIC8vIERlLXppcHBlciBmb3IgdGhlIGZpcnN0IGZyYW1lc1RvRGV6aXBw
ZXIgZnJhbWVzIGFuZCBza2lwIGRlLXppcHBlcmluZyBmb3IgdGhlIHJlbWFpbmluZyBmcmFtZXMK
IC8vIGJlY2F1c2UgdGhlIGdhaW4gaXMgY2xvc2UgZW5vdWdoIHRvIHRoZSB0YXJnZXQgZ2Fpbi4K
ICNkZWZpbmUgUFJPQ0VTU19XSVRIX0dBSU4oT1ApIFwKLSAgICBmb3IgKGsgPSAwOyBrIDwgZnJh
bWVzVG9EZXppcHBlcjsgKytrKSB7IFwKLSAgICAgICAgT1AgXAotICAgICAgICBHQUlOX0RFWklQ
UEVSIFwKLSAgICB9IFwKLSAgICBpZiAoIWZyYW1lc1RvRGV6aXBwZXIpIFwKLSAgICAgICAgZ2Fp
biA9IHRvdGFsRGVzaXJlZEdhaW47IFwKLSAgICBPUCMjX1YgCi0KLSNkZWZpbmUgU1RFUkVPX1NV
TSBcCiAgICAgeyBcCi0gICAgICAgIGZsb2F0IHN1bUwgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVz
aERlbm9ybWFsRmxvYXRUb1plcm8oKmRlc3RpbmF0aW9uTCArIGdhaW4gKiAqc291cmNlTCsrKTsg
XAotICAgICAgICBmbG9hdCBzdW1SID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZs
b2F0VG9aZXJvKCpkZXN0aW5hdGlvblIgKyBnYWluICogKnNvdXJjZVIrKyk7IFwKLSAgICAgICAg
KmRlc3RpbmF0aW9uTCsrID0gc3VtTDsgXAotICAgICAgICAqZGVzdGluYXRpb25SKysgPSBzdW1S
OyBcCisgICAgICAgIGZvciAoayA9IDA7IGsgPCBmcmFtZXNUb0RlemlwcGVyOyArK2spIHsgXAor
ICAgICAgICAgICAgZ2FpbiArPSAodG90YWxEZXNpcmVkR2FpbiAtIGdhaW4pICogRGV6aXBwZXJS
YXRlOyBcCisgICAgICAgICAgICBnYWluID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1h
bEZsb2F0VG9aZXJvKGdhaW4pOyBcCisgICAgICAgICAgICBnYWluVmFsdWVzW2tdID0gZ2Fpbjsg
XAorICAgICAgICB9IFwKKyAgICAgICAgaWYgKGZyYW1lc1RvRGV6aXBwZXIpIHsgXAorICAgICAg
ICAgICAgT1AgXAorICAgICAgICB9IGVsc2UgeyBcCisgICAgICAgICAgICBnYWluID0gdG90YWxE
ZXNpcmVkR2FpbjsgXAorICAgICAgICB9IFwKKyAgICAgICAgT1AjI19WIFwKICAgICB9CiAKLSNk
ZWZpbmUgU1RFUkVPX1NVTV9WIFwKKyNkZWZpbmUgU0lOR0xFX0NIQU5ORUxfQ09QWSBcCiAgICAg
eyBcCi0gICAgICAgIHZzbWEoc291cmNlTCwgMSwgJmdhaW4sIGRlc3RpbmF0aW9uTCwgMSwgZnJh
bWVzVG9Qcm9jZXNzIC0gayk7IFwKLSAgICAgICAgdnNtYShzb3VyY2VSLCAxLCAmZ2FpbiwgZGVz
dGluYXRpb25SLCAxLCBmcmFtZXNUb1Byb2Nlc3MgLSBrKTsgXAorICAgICAgICB2bXVsKHNvdXJj
ZXNbMF0sIDEsIGdhaW5WYWx1ZXMsIDEsIGRlc3RpbmF0aW9uc1swXSwgMSwgZnJhbWVzVG9EZXpp
cHBlcik7IFwKKyAgICAgICAgc291cmNlc1swXSArPSBmcmFtZXNUb0RlemlwcGVyOyBcCisgICAg
ICAgIGRlc3RpbmF0aW9uc1swXSArPSBmcmFtZXNUb0RlemlwcGVyOyBcCiAgICAgfQogCi0vLyBN
b25vIC0+IHN0ZXJlbyAobWl4IGVxdWFsbHkgaW50byBMIGFuZCBSKQotLy8gRklYTUU6IFJlYWxs
eSB3ZSBzaG91bGQgYXBwbHkgYW4gZXF1YWwtcG93ZXIgc2NhbGluZyBmYWN0b3IgaGVyZSwgc2lu
Y2Ugd2UncmUgZWZmZWN0aXZlbHkgcGFubmluZyBjZW50ZXIuLi4KLSNkZWZpbmUgTU9OTzJTVEVS
RU9fU1VNIFwKKyNkZWZpbmUgTVVMVElfQ0hBTk5FTFNfQ09QWShOKSBcCiAgICAgeyBcCi0gICAg
ICAgIGZsb2F0IHNjYWxlZCA9IGdhaW4gKiAqc291cmNlTCsrOyBcCi0gICAgICAgIGZsb2F0IHN1
bUwgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oKmRlc3RpbmF0
aW9uTCArIHNjYWxlZCk7IFwKLSAgICAgICAgZmxvYXQgc3VtUiA9IERlbm9ybWFsRGlzYWJsZXI6
OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybygqZGVzdGluYXRpb25SICsgc2NhbGVkKTsgXAotICAg
ICAgICAqZGVzdGluYXRpb25MKysgPSBzdW1MOyBcCi0gICAgICAgICpkZXN0aW5hdGlvblIrKyA9
IHN1bVI7IFwKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgTjsgKytp
bmRleCkgeyBcCisgICAgICAgICAgICB2bXVsKHNvdXJjZXNbaW5kZXhdLCAxLCBnYWluVmFsdWVz
LCAxLCBkZXN0aW5hdGlvbnNbaW5kZXhdLCAxLCBmcmFtZXNUb0RlemlwcGVyKTsgXAorICAgICAg
ICAgICAgc291cmNlc1tpbmRleF0gKz0gZnJhbWVzVG9EZXppcHBlcjsgXAorICAgICAgICAgICAg
ZGVzdGluYXRpb25zW2luZGV4XSArPSBmcmFtZXNUb0RlemlwcGVyOyBcCisgICAgICAgIH0gXAog
ICAgIH0KIAotI2RlZmluZSBNT05PMlNURVJFT19TVU1fViBcCisjZGVmaW5lIE1VTFRJX0NIQU5O
RUxTX0NPUFlfMiBNVUxUSV9DSEFOTkVMU19DT1BZKDIpCisjZGVmaW5lIE1VTFRJX0NIQU5ORUxT
X0NPUFlfMyBNVUxUSV9DSEFOTkVMU19DT1BZKDMpCisjZGVmaW5lIE1VTFRJX0NIQU5ORUxTX0NP
UFlfNCBNVUxUSV9DSEFOTkVMU19DT1BZKDQpCisjZGVmaW5lIE1VTFRJX0NIQU5ORUxTX0NPUFlf
NSBNVUxUSV9DSEFOTkVMU19DT1BZKDUpCisjZGVmaW5lIE1VTFRJX0NIQU5ORUxTX0NPUFlfNiBN
VUxUSV9DSEFOTkVMU19DT1BZKDYpCisKKyNkZWZpbmUgU0lOR0xFX0NIQU5ORUxfQ09QWV9WIFwK
ICAgICB7IFwKLSAgICAgICAgdnNtYShzb3VyY2VMLCAxLCAmZ2FpbiwgZGVzdGluYXRpb25MLCAx
LCBmcmFtZXNUb1Byb2Nlc3MgLSBrKTsgXAotICAgICAgICB2c21hKHNvdXJjZUwsIDEsICZnYWlu
LCBkZXN0aW5hdGlvblIsIDEsIGZyYW1lc1RvUHJvY2VzcyAtIGspOyBcCisgICAgICAgIHZzbXVs
KHNvdXJjZXNbMF0sIDEsICZnYWluLCBkZXN0aW5hdGlvbnNbMF0sIDEsIGZyYW1lc1RvUHJvY2Vz
cyAtIGspOyBcCiAgICAgfQotICAgIAotI2RlZmluZSBNT05PX1NVTSBcCisKKyNkZWZpbmUgTVVM
VElfQ0hBTk5FTFNfQ09QWV9WKE4pIFwKICAgICB7IFwKLSAgICAgICAgZmxvYXQgc3VtID0gRGVu
b3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKCpkZXN0aW5hdGlvbkwgKyBn
YWluICogKnNvdXJjZUwrKyk7IFwKLSAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gc3VtOyBcCisg
ICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IE47ICsraW5kZXgpIFwKKyAg
ICAgICAgICAgIHZzbXVsKHNvdXJjZXNbaW5kZXhdLCAxLCAmZ2FpbiwgZGVzdGluYXRpb25zW2lu
ZGV4XSwgMSwgZnJhbWVzVG9Qcm9jZXNzIC0gayk7IFwKICAgICB9CiAKLSNkZWZpbmUgTU9OT19T
VU1fViBcCi0gICAgeyBcCi0gICAgICAgIHZzbWEoc291cmNlTCwgMSwgJmdhaW4sIGRlc3RpbmF0
aW9uTCwgMSwgZnJhbWVzVG9Qcm9jZXNzIC0gayk7IFwKLSAgICB9IAorI2RlZmluZSBNVUxUSV9D
SEFOTkVMU19DT1BZXzJfViBNVUxUSV9DSEFOTkVMU19DT1BZX1YoMikKKyNkZWZpbmUgTVVMVElf
Q0hBTk5FTFNfQ09QWV8zX1YgTVVMVElfQ0hBTk5FTFNfQ09QWV9WKDMpCisjZGVmaW5lIE1VTFRJ
X0NIQU5ORUxTX0NPUFlfNF9WIE1VTFRJX0NIQU5ORUxTX0NPUFlfVig0KQorI2RlZmluZSBNVUxU
SV9DSEFOTkVMU19DT1BZXzVfViBNVUxUSV9DSEFOTkVMU19DT1BZX1YoNSkKKyNkZWZpbmUgTVVM
VElfQ0hBTk5FTFNfQ09QWV82X1YgTVVMVElfQ0hBTk5FTFNfQ09QWV9WKDYpCiAKLSNkZWZpbmUg
U1RFUkVPX05PX1NVTSBcCi0gICAgeyBcCi0gICAgICAgIGZsb2F0IHNhbXBsZUwgPSAqc291cmNl
TCsrOyBcCi0gICAgICAgIGZsb2F0IHNhbXBsZVIgPSAqc291cmNlUisrOyBcCi0gICAgICAgICpk
ZXN0aW5hdGlvbkwrKyA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVy
byhnYWluICogc2FtcGxlTCk7IFwKLSAgICAgICAgKmRlc3RpbmF0aW9uUisrID0gRGVub3JtYWxE
aXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4gKiBzYW1wbGVSKTsgXAordm9p
ZCBBdWRpb0J1czo6cHJvY2Vzc1dpdGhHYWluRnJvbShjb25zdCBBdWRpb0J1cyAmc291cmNlQnVz
LCBmbG9hdCogbGFzdE1peEdhaW4sIGZsb2F0IHRhcmdldEdhaW4sIGJvb2wgc3VtVG9CdXMpCit7
CisgICAgaWYgKCF0b3BvbG9neU1hdGNoZXMoc291cmNlQnVzKSkgeworICAgICAgICAvLyBGSVhN
RTogQXQgcHJlc2VudCwgd2UgZG9uJ3QgaGF2ZSBhbnkgY2FzZSB0aGF0IHRoaXMgZnVuY3Rpb24g
d2lsbCBiZSBjYWxsZWQgd2l0aCB1bm1hdGNoaW5nIHNvdXJjZS9kZXN0aW5hdGlvbiBidXMuCisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB6ZXJvKCk7CisgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSNkZWZpbmUgU1RFUkVPX05PX1NVTV9WIFwKLSAgICB7IFwKLSAgICAg
ICAgdnNtdWwoc291cmNlTCwgMSwgJmdhaW4sIGRlc3RpbmF0aW9uTCwgMSwgZnJhbWVzVG9Qcm9j
ZXNzIC0gayk7IFwKLSAgICAgICAgdnNtdWwoc291cmNlUiwgMSwgJmdhaW4sIGRlc3RpbmF0aW9u
UiwgMSwgZnJhbWVzVG9Qcm9jZXNzIC0gayk7IFwKLSAgICB9CisgICAgLy8gSWYgaXQgaXMgY29w
eWluZyBmcm9tIHRoZSBzYW1lIGJ1cyBhbmQgbm8gbmVlZCB0byBjaGFuZ2UgZ2FpbiwganVzdCBy
ZXR1cm4KKyAgICBpZiAoIXN1bVRvQnVzICYmIHRoaXMgPT0gJnNvdXJjZUJ1cyAmJiAqbGFzdE1p
eEdhaW4gPT0gdGFyZ2V0R2FpbiAmJiB0YXJnZXRHYWluID09IDEuMCkKKyAgICAgICAgcmV0dXJu
OwogCi0vLyBNb25vIC0+IHN0ZXJlbyAobWl4IGVxdWFsbHkgaW50byBMIGFuZCBSKQotLy8gRklY
TUU6IFJlYWxseSB3ZSBzaG91bGQgYXBwbHkgYW4gZXF1YWwtcG93ZXIgc2NhbGluZyBmYWN0b3Ig
aGVyZSwgc2luY2Ugd2UncmUgZWZmZWN0aXZlbHkgcGFubmluZyBjZW50ZXIuLi4KLSNkZWZpbmUg
TU9OTzJTVEVSRU9fTk9fU1VNIFwKLSAgICB7IFwKLSAgICAgICAgZmxvYXQgc2FtcGxlID0gKnNv
dXJjZUwrKzsgXAotICAgICAgICAqZGVzdGluYXRpb25MKysgPSBEZW5vcm1hbERpc2FibGVyOjpm
bHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2FpbiAqIHNhbXBsZSk7IFwKLSAgICAgICAgKmRlc3Rp
bmF0aW9uUisrID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdh
aW4gKiBzYW1wbGUpOyBcCi0gICAgfQorICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMgPSB0
aGlzLT5udW1iZXJPZkNoYW5uZWxzKCk7CisgICAgQVNTRVJUKG51bWJlck9mQ2hhbm5lbHMgPD0g
TWF4QnVzQ2hhbm5lbHMpOworICAgIGlmIChudW1iZXJPZkNoYW5uZWxzID4gTWF4QnVzQ2hhbm5l
bHMpCisgICAgICAgIHJldHVybjsKIAotI2RlZmluZSBNT05PMlNURVJFT19OT19TVU1fViBcCi0g
ICAgeyBcCi0gICAgICAgIHZzbXVsKHNvdXJjZUwsIDEsICZnYWluLCBkZXN0aW5hdGlvbkwsIDEs
IGZyYW1lc1RvUHJvY2VzcyAtIGspOyBcCi0gICAgICAgIHZzbXVsKHNvdXJjZUwsIDEsICZnYWlu
LCBkZXN0aW5hdGlvblIsIDEsIGZyYW1lc1RvUHJvY2VzcyAtIGspOyBcCi0gICAgfQorICAgIEF1
ZGlvQnVzJiBzb3VyY2VCdXNTYWZlID0gY29uc3RfY2FzdDxBdWRpb0J1cyY+KHNvdXJjZUJ1cyk7
CisgICAgY29uc3QgZmxvYXQqIHNvdXJjZXNbTWF4QnVzQ2hhbm5lbHNdOworICAgIGZsb2F0KiBk
ZXN0aW5hdGlvbnNbTWF4QnVzQ2hhbm5lbHNdOwogCi0jZGVmaW5lIE1PTk9fTk9fU1VNIFwKLSAg
ICB7IFwKLSAgICAgICAgZmxvYXQgc2FtcGxlTCA9ICpzb3VyY2VMKys7IFwKLSAgICAgICAgKmRl
c3RpbmF0aW9uTCsrID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJv
KGdhaW4gKiBzYW1wbGVMKTsgXAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJP
ZkNoYW5uZWxzOyArK2kpIHsKKyAgICAgICAgc291cmNlc1tpXSA9IHNvdXJjZUJ1c1NhZmUuY2hh
bm5lbChpKS0+ZGF0YSgpOworICAgICAgICBkZXN0aW5hdGlvbnNbaV0gPSBjaGFubmVsKGkpLT5t
dXRhYmxlRGF0YSgpOwogICAgIH0KIAotI2RlZmluZSBNT05PX05PX1NVTV9WIFwKLSAgICB7IFwK
LSAgICAgICAgdnNtdWwoc291cmNlTCwgMSwgJmdhaW4sIGRlc3RpbmF0aW9uTCwgMSwgZnJhbWVz
VG9Qcm9jZXNzIC0gayk7IFwKLSAgICB9IAotCi12b2lkIEF1ZGlvQnVzOjpwcm9jZXNzV2l0aEdh
aW5Gcm9tTW9ub1N0ZXJlbyhjb25zdCBBdWRpb0J1cyAmc291cmNlQnVzLCBmbG9hdCogbGFzdE1p
eEdhaW4sIGZsb2F0IHRhcmdldEdhaW4sIGJvb2wgc3VtVG9CdXMpCi17CiAgICAgLy8gV2UgZG9u
J3Qgd2FudCB0byBzdWRkZW5seSBjaGFuZ2UgdGhlIGdhaW4gZnJvbSBtaXhpbmcgb25lIHRpbWUg
c2xpY2UgdG8gdGhlIG5leHQsCiAgICAgLy8gc28gd2UgImRlLXppcHBlciIgYnkgc2xvd2x5IGNo
YW5naW5nIHRoZSBnYWluIGVhY2ggc2FtcGxlLWZyYW1lIHVudGlsIHdlJ3ZlIGFjaGlldmVkIHRo
ZSB0YXJnZXQgZ2Fpbi4KICAgICAKQEAgLTQxNywxNiArNDA1LDcgQEAgdm9pZCBBdWRpb0J1czo6
cHJvY2Vzc1dpdGhHYWluRnJvbU1vbm9TdGVyZW8oY29uc3QgQXVkaW9CdXMgJnNvdXJjZUJ1cywg
ZmxvYXQqIGwKICAgICBmbG9hdCBnYWluID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1faXNGaXJzdFRp
bWUgPyB0b3RhbERlc2lyZWRHYWluIDogKmxhc3RNaXhHYWluKTsKICAgICBtX2lzRmlyc3RUaW1l
ID0gZmFsc2U7CiAKLSAgICBpbnQgbnVtYmVyT2ZTb3VyY2VDaGFubmVscyA9IHNvdXJjZUJ1cy5u
dW1iZXJPZkNoYW5uZWxzKCk7Ci0gICAgaW50IG51bWJlck9mRGVzdGluYXRpb25DaGFubmVscyA9
IG51bWJlck9mQ2hhbm5lbHMoKTsKLQotICAgIEF1ZGlvQnVzJiBzb3VyY2VCdXNTYWZlID0gY29u
c3RfY2FzdDxBdWRpb0J1cyY+KHNvdXJjZUJ1cyk7Ci0gICAgY29uc3QgZmxvYXQqIHNvdXJjZUwg
PSBzb3VyY2VCdXNTYWZlLmNoYW5uZWxCeVR5cGUoQ2hhbm5lbExlZnQpLT5kYXRhKCk7Ci0gICAg
Y29uc3QgZmxvYXQqIHNvdXJjZVIgPSBudW1iZXJPZlNvdXJjZUNoYW5uZWxzID4gMSA/IHNvdXJj
ZUJ1c1NhZmUuY2hhbm5lbEJ5VHlwZShDaGFubmVsUmlnaHQpLT5kYXRhKCkgOiAwOwotCi0gICAg
ZmxvYXQqIGRlc3RpbmF0aW9uTCA9IGNoYW5uZWxCeVR5cGUoQ2hhbm5lbExlZnQpLT5tdXRhYmxl
RGF0YSgpOwotICAgIGZsb2F0KiBkZXN0aW5hdGlvblIgPSBudW1iZXJPZkRlc3RpbmF0aW9uQ2hh
bm5lbHMgPiAxID8gY2hhbm5lbEJ5VHlwZShDaGFubmVsUmlnaHQpLT5tdXRhYmxlRGF0YSgpIDog
MDsKLQorICAgIGZsb2F0IGdhaW5WYWx1ZXNbQXVkaW9Ob2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJh
bWVzXTsKICAgICBjb25zdCBmbG9hdCBEZXppcHBlclJhdGUgPSAwLjAwNWY7CiAgICAgaW50IGZy
YW1lc1RvUHJvY2VzcyA9IGxlbmd0aCgpOwogCkBAIC00NDEsMjggKzQyMCwzMCBAQCB2b2lkIEF1
ZGlvQnVzOjpwcm9jZXNzV2l0aEdhaW5Gcm9tTW9ub1N0ZXJlbyhjb25zdCBBdWRpb0J1cyAmc291
cmNlQnVzLCBmbG9hdCogbAogICAgIGludCBrID0gMDsKIAogICAgIGlmIChzdW1Ub0J1cykgewot
ICAgICAgICAvLyBTdW0gdG8gb3VyIGJ1cwotICAgICAgICBpZiAoc291cmNlUiAmJiBkZXN0aW5h
dGlvblIpIHsKLSAgICAgICAgICAgIC8vIFN0ZXJlbwotICAgICAgICAgICAgUFJPQ0VTU19XSVRI
X0dBSU4oU1RFUkVPX1NVTSkKLSAgICAgICAgfSBlbHNlIGlmIChkZXN0aW5hdGlvblIpIHsKLSAg
ICAgICAgICAgIC8vIE1vbm8gLT4gc3RlcmVvIAotICAgICAgICAgICAgUFJPQ0VTU19XSVRIX0dB
SU4oTU9OTzJTVEVSRU9fU1VNKQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gTW9u
bwotICAgICAgICAgICAgUFJPQ0VTU19XSVRIX0dBSU4oTU9OT19TVU0pCi0gICAgICAgIH0KKyAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBzdW0gdG8gYnVzIGNhc2UuIEhvd2V2ZXIsIHdlIHBy
b2JhYmx5IHdpbGwgbmV2ZXIgYmVlbiBpbnZva2VkIHdpdGggc3VtVG9CdXM9VFJVRSAuLi4KKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHplcm8oKTsKKyAgICAgICAgcmV0
dXJuOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFByb2Nlc3MgZGlyZWN0bHkgKHdpdGhvdXQg
c3VtbWluZykgdG8gb3VyIGJ1cwotICAgICAgICBpZiAoc291cmNlUiAmJiBkZXN0aW5hdGlvblIp
IHsKLSAgICAgICAgICAgIC8vIFN0ZXJlbwotICAgICAgICAgICAgUFJPQ0VTU19XSVRIX0dBSU4o
U1RFUkVPX05PX1NVTSkKLSAgICAgICAgfSBlbHNlIGlmIChkZXN0aW5hdGlvblIpIHsKLSAgICAg
ICAgICAgIC8vIE1vbm8gLT4gc3RlcmVvIAotICAgICAgICAgICAgUFJPQ0VTU19XSVRIX0dBSU4o
TU9OTzJTVEVSRU9fTk9fU1VNKQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gTW9u
bwotICAgICAgICAgICAgUFJPQ0VTU19XSVRIX0dBSU4oTU9OT19OT19TVU0pCisgICAgICAgIHN3
aXRjaCAobnVtYmVyT2ZDaGFubmVscykgeworICAgICAgICBjYXNlIDE6IC8vIG1vbm8KKyAgICAg
ICAgICAgIFBST0NFU1NfV0lUSF9HQUlOKFNJTkdMRV9DSEFOTkVMX0NPUFkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjogLy8gc3RlcmVvCisgICAgICAgICAgICBQUk9DRVNT
X1dJVEhfR0FJTihNVUxUSV9DSEFOTkVMU19DT1BZXzIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgNDogLy8gcXVhZAorICAgICAgICAgICAgUFJPQ0VTU19XSVRIX0dBSU4oTVVM
VElfQ0hBTk5FTFNfQ09QWV80KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDU6
IC8vIDUuMAorICAgICAgICAgICAgUFJPQ0VTU19XSVRIX0dBSU4oTVVMVElfQ0hBTk5FTFNfQ09Q
WV81KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDY6IC8vIDUuMQorICAgICAg
ICAgICAgUFJPQ0VTU19XSVRIX0dBSU4oTVVMVElfQ0hBTk5FTFNfQ09QWV82KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDcwLDMy
ICs0NTEsNiBAQCB2b2lkIEF1ZGlvQnVzOjpwcm9jZXNzV2l0aEdhaW5Gcm9tTW9ub1N0ZXJlbyhj
b25zdCBBdWRpb0J1cyAmc291cmNlQnVzLCBmbG9hdCogbAogICAgICpsYXN0TWl4R2FpbiA9IGdh
aW47CiB9CiAKLXZvaWQgQXVkaW9CdXM6OnByb2Nlc3NXaXRoR2FpbkZyb20oY29uc3QgQXVkaW9C
dXMgJnNvdXJjZUJ1cywgZmxvYXQqIGxhc3RNaXhHYWluLCBmbG9hdCB0YXJnZXRHYWluLCBib29s
IHN1bVRvQnVzKQotewotICAgIC8vIE1ha2Ugc3VyZSB3ZSdyZSBzdW1taW5nIGZyb20gc2FtZSB0
eXBlIG9mIGJ1cy4KLSAgICAvLyBXZSAqYXJlKiBhYmxlIHRvIHN1bSBmcm9tIG1vbm8gLT4gc3Rl
cmVvCi0gICAgaWYgKHNvdXJjZUJ1cy5udW1iZXJPZkNoYW5uZWxzKCkgIT0gMSAmJiAhdG9wb2xv
Z3lNYXRjaGVzKHNvdXJjZUJ1cykpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gSWYgaXQgaXMgY29weWluZyBmcm9tIHRoZSBz
YW1lIGJ1cyBhbmQgbm8gbmVlZCB0byBjaGFuZ2UgZ2FpbiwganVzdCByZXR1cm4KLSAgICBpZiAo
IXN1bVRvQnVzICYmIHRoaXMgPT0gJnNvdXJjZUJ1cyAmJiAqbGFzdE1peEdhaW4gPT0gdGFyZ2V0
R2FpbiAmJiB0YXJnZXRHYWluID09IDEuMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRGlz
cGF0Y2ggZm9yIGRpZmZlcmVudCBjaGFubmVsIGxheW91dHMKLSAgICBzd2l0Y2ggKG51bWJlck9m
Q2hhbm5lbHMoKSkgewotICAgIGNhc2UgMTogLy8gbW9ubwotICAgIGNhc2UgMjogLy8gc3RlcmVv
Ci0gICAgICAgIHByb2Nlc3NXaXRoR2FpbkZyb21Nb25vU3RlcmVvKHNvdXJjZUJ1cywgbGFzdE1p
eEdhaW4sIHRhcmdldEdhaW4sIHN1bVRvQnVzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0
OiAvLyBGSVhNRTogaW1wbGVtZW50IHF1YWQKLSAgICBjYXNlIDU6IC8vIEZJWE1FOiBpbXBsZW1l
bnQgNS4wCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLX0KLQogdm9pZCBBdWRpb0J1czo6Y29weVdpdGhTYW1wbGVBY2N1
cmF0ZUdhaW5WYWx1ZXNGcm9tKGNvbnN0IEF1ZGlvQnVzICZzb3VyY2VCdXMsIGZsb2F0KiBnYWlu
VmFsdWVzLCB1bnNpZ25lZCBudW1iZXJPZkdhaW5WYWx1ZXMpCiB7CiAgICAgLy8gTWFrZSBzdXJl
IHdlJ3JlIHByb2Nlc3NpbmcgZnJvbSB0aGUgc2FtZSB0eXBlIG9mIGJ1cy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvQnVzLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5oCmluZGV4IGIzZGEwZjQ1MWQxODE0M2E3YjAxZjRj
ZGQyMDk3NzAwZDhkMTU5YzAuLmYwYWZmNmNlMTEyZTc0MzdkN2RkMjUyM2ZmZTU4YmEyMzc1YzZi
N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvQnVzLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMuaApAQCAtMTM4LDcg
KzEzOCw2IEBAIHByb3RlY3RlZDoKICAgICBBdWRpb0J1cygpIHsgfTsKIAogICAgIHZvaWQgcHJv
Y2Vzc1dpdGhHYWluRnJvbShjb25zdCBBdWRpb0J1cyAmc291cmNlQnVzLCBmbG9hdCogbGFzdE1p
eEdhaW4sIGZsb2F0IHRhcmdldEdhaW4sIGJvb2wgc3VtVG9CdXMpOwotICAgIHZvaWQgcHJvY2Vz
c1dpdGhHYWluRnJvbU1vbm9TdGVyZW8oY29uc3QgQXVkaW9CdXMgJnNvdXJjZUJ1cywgZmxvYXQq
IGxhc3RNaXhHYWluLCBmbG9hdCB0YXJnZXRHYWluLCBib29sIHN1bVRvQnVzKTsKIAogICAgIHNp
emVfdCBtX2xlbmd0aDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132202</attachid>
            <date>2012-03-15 23:01:48 -0700</date>
            <delta_ts>2012-03-18 20:06:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80675-20120316140704.patch</filename>
            <type>text/plain</type>
            <size>13387</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwOTAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzhmNTFkYWViM2Y3OTFi
NTEyYjYxMzE0YTg2NWQ0YTExOGQyMDZlMS4uNjRiYTc3ZDAzZjAwYjZkOWY5MDNmZTUwMTU1OGQ4
M2MyOTY1ODQxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTAzLTE1ICBSYXlt
b25kIExpdSAgPHJheW1vbmQubGl1QGludGVsLmNvbT4KKworICAgICAgICBBZGQgbXVsdGktY2hh
bm5lbHMgc3VwcG9ydCBmb3IgQ29weVdpdGhHYWluRnJvbSBpbiBBdWRpb0J1cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA2NzUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1
ZGlvQnVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9C
dXM6OkF1ZGlvQnVzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVzOjpjb3B5V2l0aEdhaW5G
cm9tKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5oOgorICAgICAgICAoQXVk
aW9CdXMpOgorCiAyMDEyLTAzLTEzICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4KIAogICAg
ICAgICBEZXByZWNhdGUgb25kaXNwbGF5KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL0F1ZGlvQnVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0F1ZGlvQnVzLmNwcAppbmRleCBlN2Y4OTAyZjcyZjllMGQ2NzAxNTZkMWZiNTIxMzgxMDJmNDk0
MTNlLi4xM2E4NDU0MDFiMzAyZjBlZDRkMTUxNDRmMDUyY2E4ZjcwYzg1OTg4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAj
aWYgRU5BQkxFKFdFQl9BVURJTykKIAogI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisjaW5jbHVkZSAi
QXVkaW9Ob2RlLmgiCiAKICNpbmNsdWRlICJEZW5vcm1hbERpc2FibGVyLmgiCiAKQEAgLTQ1LDEz
ICs0NiwxNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgVmVjdG9y
TWF0aDsKLSAgICAKKworY29uc3QgdW5zaWduZWQgTWF4QnVzQ2hhbm5lbHMgPSAzMjsKKwogQXVk
aW9CdXM6OkF1ZGlvQnVzKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBsZW5ndGgs
IGJvb2wgYWxsb2NhdGUpCiAgICAgOiBtX2xlbmd0aChsZW5ndGgpCiAgICAgLCBtX2J1c0dhaW4o
MSkKICAgICAsIG1faXNGaXJzdFRpbWUodHJ1ZSkKICAgICAsIG1fc2FtcGxlUmF0ZSgwKQogewor
ICAgIEFTU0VSVChudW1iZXJPZkNoYW5uZWxzIDw9IE1heEJ1c0NoYW5uZWxzKTsKKwogICAgIG1f
Y2hhbm5lbHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkNoYW5uZWxzKTsKIAogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyArK2kpIHsKQEAgLTMw
NywxMDYgKzMxMiwyOSBAQCB2b2lkIEF1ZGlvQnVzOjpzdW1Gcm9tKGNvbnN0IEF1ZGlvQnVzICZz
b3VyY2VCdXMpCiAgICAgfQogfQogCi0vLyBTbG93bHkgY2hhbmdlIGdhaW4gdG8gZGVzaXJlZCBn
YWluLgotI2RlZmluZSBHQUlOX0RFWklQUEVSIFwKLSAgICBnYWluICs9ICh0b3RhbERlc2lyZWRH
YWluIC0gZ2FpbikgKiBEZXppcHBlclJhdGU7IFwKLSAgICBnYWluID0gRGVub3JtYWxEaXNhYmxl
cjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4pOwotCi0vLyBEZS16aXBwZXIgZm9yIHRo
ZSBmaXJzdCBmcmFtZXNUb0RlemlwcGVyIGZyYW1lcyBhbmQgc2tpcCBkZS16aXBwZXJpbmcgZm9y
IHRoZSByZW1haW5pbmcgZnJhbWVzCi0vLyBiZWNhdXNlIHRoZSBnYWluIGlzIGNsb3NlIGVub3Vn
aCB0byB0aGUgdGFyZ2V0IGdhaW4uCi0jZGVmaW5lIFBST0NFU1NfV0lUSF9HQUlOKE9QKSBcCi0g
ICAgZm9yIChrID0gMDsgayA8IGZyYW1lc1RvRGV6aXBwZXI7ICsraykgeyBcCi0gICAgICAgIE9Q
IFwKLSAgICAgICAgR0FJTl9ERVpJUFBFUiBcCi0gICAgfSBcCi0gICAgaWYgKCFmcmFtZXNUb0Rl
emlwcGVyKSBcCi0gICAgICAgIGdhaW4gPSB0b3RhbERlc2lyZWRHYWluOyBcCi0gICAgT1AjI19W
IAotCi0jZGVmaW5lIFNURVJFT19TVU0gXAotICAgIHsgXAotICAgICAgICBmbG9hdCBzdW1MID0g
RGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKCpkZXN0aW5hdGlvbkwg
KyBnYWluICogKnNvdXJjZUwrKyk7IFwKLSAgICAgICAgZmxvYXQgc3VtUiA9IERlbm9ybWFsRGlz
YWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybygqZGVzdGluYXRpb25SICsgZ2FpbiAqICpz
b3VyY2VSKyspOyBcCi0gICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IHN1bUw7IFwKLSAgICAgICAg
KmRlc3RpbmF0aW9uUisrID0gc3VtUjsgXAotICAgIH0KLQotI2RlZmluZSBTVEVSRU9fU1VNX1Yg
XAotICAgIHsgXAotICAgICAgICB2c21hKHNvdXJjZUwsIDEsICZnYWluLCBkZXN0aW5hdGlvbkws
IDEsIGZyYW1lc1RvUHJvY2VzcyAtIGspOyBcCi0gICAgICAgIHZzbWEoc291cmNlUiwgMSwgJmdh
aW4sIGRlc3RpbmF0aW9uUiwgMSwgZnJhbWVzVG9Qcm9jZXNzIC0gayk7IFwKLSAgICB9Ci0KLS8v
IE1vbm8gLT4gc3RlcmVvIChtaXggZXF1YWxseSBpbnRvIEwgYW5kIFIpCi0vLyBGSVhNRTogUmVh
bGx5IHdlIHNob3VsZCBhcHBseSBhbiBlcXVhbC1wb3dlciBzY2FsaW5nIGZhY3RvciBoZXJlLCBz
aW5jZSB3ZSdyZSBlZmZlY3RpdmVseSBwYW5uaW5nIGNlbnRlci4uLgotI2RlZmluZSBNT05PMlNU
RVJFT19TVU0gXAotICAgIHsgXAotICAgICAgICBmbG9hdCBzY2FsZWQgPSBnYWluICogKnNvdXJj
ZUwrKzsgXAotICAgICAgICBmbG9hdCBzdW1MID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5v
cm1hbEZsb2F0VG9aZXJvKCpkZXN0aW5hdGlvbkwgKyBzY2FsZWQpOyBcCi0gICAgICAgIGZsb2F0
IHN1bVIgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oKmRlc3Rp
bmF0aW9uUiArIHNjYWxlZCk7IFwKLSAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gc3VtTDsgXAot
ICAgICAgICAqZGVzdGluYXRpb25SKysgPSBzdW1SOyBcCi0gICAgfQotCi0jZGVmaW5lIE1PTk8y
U1RFUkVPX1NVTV9WIFwKLSAgICB7IFwKLSAgICAgICAgdnNtYShzb3VyY2VMLCAxLCAmZ2Fpbiwg
ZGVzdGluYXRpb25MLCAxLCBmcmFtZXNUb1Byb2Nlc3MgLSBrKTsgXAotICAgICAgICB2c21hKHNv
dXJjZUwsIDEsICZnYWluLCBkZXN0aW5hdGlvblIsIDEsIGZyYW1lc1RvUHJvY2VzcyAtIGspOyBc
Ci0gICAgfQotICAgIAotI2RlZmluZSBNT05PX1NVTSBcCi0gICAgeyBcCi0gICAgICAgIGZsb2F0
IHN1bSA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybygqZGVzdGlu
YXRpb25MICsgZ2FpbiAqICpzb3VyY2VMKyspOyBcCi0gICAgICAgICpkZXN0aW5hdGlvbkwrKyA9
IHN1bTsgXAotICAgIH0KLQotI2RlZmluZSBNT05PX1NVTV9WIFwKLSAgICB7IFwKLSAgICAgICAg
dnNtYShzb3VyY2VMLCAxLCAmZ2FpbiwgZGVzdGluYXRpb25MLCAxLCBmcmFtZXNUb1Byb2Nlc3Mg
LSBrKTsgXAotICAgIH0gCi0KLSNkZWZpbmUgU1RFUkVPX05PX1NVTSBcCi0gICAgeyBcCi0gICAg
ICAgIGZsb2F0IHNhbXBsZUwgPSAqc291cmNlTCsrOyBcCi0gICAgICAgIGZsb2F0IHNhbXBsZVIg
PSAqc291cmNlUisrOyBcCi0gICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IERlbm9ybWFsRGlzYWJs
ZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluICogc2FtcGxlTCk7IFwKLSAgICAgICAg
KmRlc3RpbmF0aW9uUisrID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9a
ZXJvKGdhaW4gKiBzYW1wbGVSKTsgXAordm9pZCBBdWRpb0J1czo6Y29weVdpdGhHYWluRnJvbShj
b25zdCBBdWRpb0J1cyAmc291cmNlQnVzLCBmbG9hdCogbGFzdE1peEdhaW4sIGZsb2F0IHRhcmdl
dEdhaW4pCit7CisgICAgaWYgKCF0b3BvbG9neU1hdGNoZXMoc291cmNlQnVzKSkgeworICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgemVybygpOworICAgICAgICByZXR1cm47
CiAgICAgfQogCi0jZGVmaW5lIFNURVJFT19OT19TVU1fViBcCi0gICAgeyBcCi0gICAgICAgIHZz
bXVsKHNvdXJjZUwsIDEsICZnYWluLCBkZXN0aW5hdGlvbkwsIDEsIGZyYW1lc1RvUHJvY2VzcyAt
IGspOyBcCi0gICAgICAgIHZzbXVsKHNvdXJjZVIsIDEsICZnYWluLCBkZXN0aW5hdGlvblIsIDEs
IGZyYW1lc1RvUHJvY2VzcyAtIGspOyBcCi0gICAgfQorICAgIC8vIElmIGl0IGlzIGNvcHlpbmcg
ZnJvbSB0aGUgc2FtZSBidXMgYW5kIG5vIG5lZWQgdG8gY2hhbmdlIGdhaW4sIGp1c3QgcmV0dXJu
CisgICAgaWYgKHRoaXMgPT0gJnNvdXJjZUJ1cyAmJiAqbGFzdE1peEdhaW4gPT0gdGFyZ2V0R2Fp
biAmJiB0YXJnZXRHYWluID09IDEuMCkKKyAgICAgICAgcmV0dXJuOwogCi0vLyBNb25vIC0+IHN0
ZXJlbyAobWl4IGVxdWFsbHkgaW50byBMIGFuZCBSKQotLy8gRklYTUU6IFJlYWxseSB3ZSBzaG91
bGQgYXBwbHkgYW4gZXF1YWwtcG93ZXIgc2NhbGluZyBmYWN0b3IgaGVyZSwgc2luY2Ugd2UncmUg
ZWZmZWN0aXZlbHkgcGFubmluZyBjZW50ZXIuLi4KLSNkZWZpbmUgTU9OTzJTVEVSRU9fTk9fU1VN
IFwKLSAgICB7IFwKLSAgICAgICAgZmxvYXQgc2FtcGxlID0gKnNvdXJjZUwrKzsgXAotICAgICAg
ICAqZGVzdGluYXRpb25MKysgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRU
b1plcm8oZ2FpbiAqIHNhbXBsZSk7IFwKLSAgICAgICAgKmRlc3RpbmF0aW9uUisrID0gRGVub3Jt
YWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4gKiBzYW1wbGUpOyBcCi0g
ICAgfQorICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMgPSB0aGlzLT5udW1iZXJPZkNoYW5u
ZWxzKCk7CiAKLSNkZWZpbmUgTU9OTzJTVEVSRU9fTk9fU1VNX1YgXAotICAgIHsgXAotICAgICAg
ICB2c211bChzb3VyY2VMLCAxLCAmZ2FpbiwgZGVzdGluYXRpb25MLCAxLCBmcmFtZXNUb1Byb2Nl
c3MgLSBrKTsgXAotICAgICAgICB2c211bChzb3VyY2VMLCAxLCAmZ2FpbiwgZGVzdGluYXRpb25S
LCAxLCBmcmFtZXNUb1Byb2Nlc3MgLSBrKTsgXAotICAgIH0KKyAgICBBdWRpb0J1cyYgc291cmNl
QnVzU2FmZSA9IGNvbnN0X2Nhc3Q8QXVkaW9CdXMmPihzb3VyY2VCdXMpOworICAgIGNvbnN0IGZs
b2F0KiBzb3VyY2VzW01heEJ1c0NoYW5uZWxzXTsKKyAgICBmbG9hdCogZGVzdGluYXRpb25zW01h
eEJ1c0NoYW5uZWxzXTsKIAotI2RlZmluZSBNT05PX05PX1NVTSBcCi0gICAgeyBcCi0gICAgICAg
IGZsb2F0IHNhbXBsZUwgPSAqc291cmNlTCsrOyBcCi0gICAgICAgICpkZXN0aW5hdGlvbkwrKyA9
IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluICogc2FtcGxl
TCk7IFwKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytp
KSB7CisgICAgICAgIHNvdXJjZXNbaV0gPSBzb3VyY2VCdXNTYWZlLmNoYW5uZWwoaSktPmRhdGEo
KTsKKyAgICAgICAgZGVzdGluYXRpb25zW2ldID0gY2hhbm5lbChpKS0+bXV0YWJsZURhdGEoKTsK
ICAgICB9CiAKLSNkZWZpbmUgTU9OT19OT19TVU1fViBcCi0gICAgeyBcCi0gICAgICAgIHZzbXVs
KHNvdXJjZUwsIDEsICZnYWluLCBkZXN0aW5hdGlvbkwsIDEsIGZyYW1lc1RvUHJvY2VzcyAtIGsp
OyBcCi0gICAgfSAKLQotdm9pZCBBdWRpb0J1czo6cHJvY2Vzc1dpdGhHYWluRnJvbU1vbm9TdGVy
ZW8oY29uc3QgQXVkaW9CdXMgJnNvdXJjZUJ1cywgZmxvYXQqIGxhc3RNaXhHYWluLCBmbG9hdCB0
YXJnZXRHYWluLCBib29sIHN1bVRvQnVzKQotewogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc3Vk
ZGVubHkgY2hhbmdlIHRoZSBnYWluIGZyb20gbWl4aW5nIG9uZSB0aW1lIHNsaWNlIHRvIHRoZSBu
ZXh0LAogICAgIC8vIHNvIHdlICJkZS16aXBwZXIiIGJ5IHNsb3dseSBjaGFuZ2luZyB0aGUgZ2Fp
biBlYWNoIHNhbXBsZS1mcmFtZSB1bnRpbCB3ZSd2ZSBhY2hpZXZlZCB0aGUgdGFyZ2V0IGdhaW4u
CiAgICAgCkBAIC00MTcsMTYgKzM0NSw3IEBAIHZvaWQgQXVkaW9CdXM6OnByb2Nlc3NXaXRoR2Fp
bkZyb21Nb25vU3RlcmVvKGNvbnN0IEF1ZGlvQnVzICZzb3VyY2VCdXMsIGZsb2F0KiBsCiAgICAg
ZmxvYXQgZ2FpbiA9IHN0YXRpY19jYXN0PGZsb2F0PihtX2lzRmlyc3RUaW1lID8gdG90YWxEZXNp
cmVkR2FpbiA6ICpsYXN0TWl4R2Fpbik7CiAgICAgbV9pc0ZpcnN0VGltZSA9IGZhbHNlOwogCi0g
ICAgaW50IG51bWJlck9mU291cmNlQ2hhbm5lbHMgPSBzb3VyY2VCdXMubnVtYmVyT2ZDaGFubmVs
cygpOwotICAgIGludCBudW1iZXJPZkRlc3RpbmF0aW9uQ2hhbm5lbHMgPSBudW1iZXJPZkNoYW5u
ZWxzKCk7Ci0KLSAgICBBdWRpb0J1cyYgc291cmNlQnVzU2FmZSA9IGNvbnN0X2Nhc3Q8QXVkaW9C
dXMmPihzb3VyY2VCdXMpOwotICAgIGNvbnN0IGZsb2F0KiBzb3VyY2VMID0gc291cmNlQnVzU2Fm
ZS5jaGFubmVsQnlUeXBlKENoYW5uZWxMZWZ0KS0+ZGF0YSgpOwotICAgIGNvbnN0IGZsb2F0KiBz
b3VyY2VSID0gbnVtYmVyT2ZTb3VyY2VDaGFubmVscyA+IDEgPyBzb3VyY2VCdXNTYWZlLmNoYW5u
ZWxCeVR5cGUoQ2hhbm5lbFJpZ2h0KS0+ZGF0YSgpIDogMDsKLQotICAgIGZsb2F0KiBkZXN0aW5h
dGlvbkwgPSBjaGFubmVsQnlUeXBlKENoYW5uZWxMZWZ0KS0+bXV0YWJsZURhdGEoKTsKLSAgICBm
bG9hdCogZGVzdGluYXRpb25SID0gbnVtYmVyT2ZEZXN0aW5hdGlvbkNoYW5uZWxzID4gMSA/IGNo
YW5uZWxCeVR5cGUoQ2hhbm5lbFJpZ2h0KS0+bXV0YWJsZURhdGEoKSA6IDA7Ci0KKyAgICBmbG9h
dCBnYWluVmFsdWVzW0F1ZGlvTm9kZTo6UHJvY2Vzc2luZ1NpemVJbkZyYW1lc107CiAgICAgY29u
c3QgZmxvYXQgRGV6aXBwZXJSYXRlID0gMC4wMDVmOwogICAgIGludCBmcmFtZXNUb1Byb2Nlc3Mg
PSBsZW5ndGgoKTsKIApAQCAtNDM2LDY2ICszNTUsMzQgQEAgdm9pZCBBdWRpb0J1czo6cHJvY2Vz
c1dpdGhHYWluRnJvbU1vbm9TdGVyZW8oY29uc3QgQXVkaW9CdXMgJnNvdXJjZUJ1cywgZmxvYXQq
IGwKICAgICBmbG9hdCBnYWluRGlmZiA9IGZhYnModG90YWxEZXNpcmVkR2FpbiAtIGdhaW4pOwog
CiAgICAgLy8gTnVtYmVyIG9mIGZyYW1lcyB0byBkZS16aXBwZXIgYmVmb3JlIHdlIGFyZSBjbG9z
ZSBlbm91Z2ggdG8gdGhlIHRhcmdldCBnYWluLgorICAgIC8vIEZJWE1FOiBmcmFtZXNUb0Rlemlw
cGVyIGNvdWxkIGJlIHNtYWxsZXIgd2hlbiB0YXJnZXQgZ2FpbiBpcyBjbG9zZSBlbm91Z2ggd2l0
aGluIHRoaXMgcHJvY2VzcyBsb29wLgogICAgIGludCBmcmFtZXNUb0RlemlwcGVyID0gKGdhaW5E
aWZmIDwgZXBzaWxvbikgPyAwIDogZnJhbWVzVG9Qcm9jZXNzOyAKIAogICAgIGludCBrID0gMDsK
IAotICAgIGlmIChzdW1Ub0J1cykgewotICAgICAgICAvLyBTdW0gdG8gb3VyIGJ1cwotICAgICAg
ICBpZiAoc291cmNlUiAmJiBkZXN0aW5hdGlvblIpIHsKLSAgICAgICAgICAgIC8vIFN0ZXJlbwot
ICAgICAgICAgICAgUFJPQ0VTU19XSVRIX0dBSU4oU1RFUkVPX1NVTSkKLSAgICAgICAgfSBlbHNl
IGlmIChkZXN0aW5hdGlvblIpIHsKLSAgICAgICAgICAgIC8vIE1vbm8gLT4gc3RlcmVvIAotICAg
ICAgICAgICAgUFJPQ0VTU19XSVRIX0dBSU4oTU9OTzJTVEVSRU9fU1VNKQotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgLy8gTW9ubwotICAgICAgICAgICAgUFJPQ0VTU19XSVRIX0dBSU4o
TU9OT19TVU0pCisgICAgZm9yIChrID0gMDsgayA8IGZyYW1lc1RvRGV6aXBwZXI7ICsraykgewor
ICAgICAgICBnYWluICs9ICh0b3RhbERlc2lyZWRHYWluIC0gZ2FpbikgKiBEZXppcHBlclJhdGU7
CisgICAgICAgIGdhaW4gPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1pl
cm8oZ2Fpbik7CisgICAgICAgIGdhaW5WYWx1ZXNba10gPSBnYWluOworICAgIH0KKworICAgIGlm
IChmcmFtZXNUb0RlemlwcGVyKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBp
bmRleCA8IG51bWJlck9mQ2hhbm5lbHM7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIHZtdWwoc291
cmNlc1tpbmRleF0sIDEsIGdhaW5WYWx1ZXMsIDEsIGRlc3RpbmF0aW9uc1tpbmRleF0sIDEsIGZy
YW1lc1RvRGV6aXBwZXIpOworICAgICAgICAgICAgc291cmNlc1tpbmRleF0gKz0gZnJhbWVzVG9E
ZXppcHBlcjsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uc1tpbmRleF0gKz0gZnJhbWVzVG9EZXpp
cHBlcjsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFByb2Nlc3MgZGlyZWN0
bHkgKHdpdGhvdXQgc3VtbWluZykgdG8gb3VyIGJ1cwotICAgICAgICBpZiAoc291cmNlUiAmJiBk
ZXN0aW5hdGlvblIpIHsKLSAgICAgICAgICAgIC8vIFN0ZXJlbwotICAgICAgICAgICAgUFJPQ0VT
U19XSVRIX0dBSU4oU1RFUkVPX05PX1NVTSkKLSAgICAgICAgfSBlbHNlIGlmIChkZXN0aW5hdGlv
blIpIHsKLSAgICAgICAgICAgIC8vIE1vbm8gLT4gc3RlcmVvIAotICAgICAgICAgICAgUFJPQ0VT
U19XSVRIX0dBSU4oTU9OTzJTVEVSRU9fTk9fU1VNKQotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgLy8gTW9ubwotICAgICAgICAgICAgUFJPQ0VTU19XSVRIX0dBSU4oTU9OT19OT19TVU0p
Ci0gICAgICAgIH0KKyAgICAgICAgZ2FpbiA9IHRvdGFsRGVzaXJlZEdhaW47CiAgICAgfQogCisg
ICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbnVtYmVyT2ZDaGFubmVsczsgKytp
bmRleCkKKyAgICAgICAgdnNtdWwoc291cmNlc1tpbmRleF0sIDEsICZnYWluLCBkZXN0aW5hdGlv
bnNbaW5kZXhdLCAxLCBmcmFtZXNUb1Byb2Nlc3MgLSBrKTsKKwogICAgIC8vIFNhdmUgdGhlIHRh
cmdldCBnYWluIGFzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgbmV4dCB0aW1lIGFyb3VuZC4KICAg
ICAqbGFzdE1peEdhaW4gPSBnYWluOwogfQogCi12b2lkIEF1ZGlvQnVzOjpwcm9jZXNzV2l0aEdh
aW5Gcm9tKGNvbnN0IEF1ZGlvQnVzICZzb3VyY2VCdXMsIGZsb2F0KiBsYXN0TWl4R2FpbiwgZmxv
YXQgdGFyZ2V0R2FpbiwgYm9vbCBzdW1Ub0J1cykKLXsKLSAgICAvLyBNYWtlIHN1cmUgd2UncmUg
c3VtbWluZyBmcm9tIHNhbWUgdHlwZSBvZiBidXMuCi0gICAgLy8gV2UgKmFyZSogYWJsZSB0byBz
dW0gZnJvbSBtb25vIC0+IHN0ZXJlbwotICAgIGlmIChzb3VyY2VCdXMubnVtYmVyT2ZDaGFubmVs
cygpICE9IDEgJiYgIXRvcG9sb2d5TWF0Y2hlcyhzb3VyY2VCdXMpKSB7Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIElmIGl0IGlz
IGNvcHlpbmcgZnJvbSB0aGUgc2FtZSBidXMgYW5kIG5vIG5lZWQgdG8gY2hhbmdlIGdhaW4sIGp1
c3QgcmV0dXJuCi0gICAgaWYgKCFzdW1Ub0J1cyAmJiB0aGlzID09ICZzb3VyY2VCdXMgJiYgKmxh
c3RNaXhHYWluID09IHRhcmdldEdhaW4gJiYgdGFyZ2V0R2FpbiA9PSAxLjApCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIERpc3BhdGNoIGZvciBkaWZmZXJlbnQgY2hhbm5lbCBsYXlvdXRzCi0g
ICAgc3dpdGNoIChudW1iZXJPZkNoYW5uZWxzKCkpIHsKLSAgICBjYXNlIDE6IC8vIG1vbm8KLSAg
ICBjYXNlIDI6IC8vIHN0ZXJlbwotICAgICAgICBwcm9jZXNzV2l0aEdhaW5Gcm9tTW9ub1N0ZXJl
byhzb3VyY2VCdXMsIGxhc3RNaXhHYWluLCB0YXJnZXRHYWluLCBzdW1Ub0J1cyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgNDogLy8gRklYTUU6IGltcGxlbWVudCBxdWFkCi0gICAgY2FzZSA1
OiAvLyBGSVhNRTogaW1wbGVtZW50IDUuMAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KIHZvaWQgQXVkaW9CdXM6
OmNvcHlXaXRoU2FtcGxlQWNjdXJhdGVHYWluVmFsdWVzRnJvbShjb25zdCBBdWRpb0J1cyAmc291
cmNlQnVzLCBmbG9hdCogZ2FpblZhbHVlcywgdW5zaWduZWQgbnVtYmVyT2ZHYWluVmFsdWVzKQog
ewogICAgIC8vIE1ha2Ugc3VyZSB3ZSdyZSBwcm9jZXNzaW5nIGZyb20gdGhlIHNhbWUgdHlwZSBv
ZiBidXMuCkBAIC01MjAsMTYgKzQwNyw2IEBAIHZvaWQgQXVkaW9CdXM6OmNvcHlXaXRoU2FtcGxl
QWNjdXJhdGVHYWluVmFsdWVzRnJvbShjb25zdCBBdWRpb0J1cyAmc291cmNlQnVzLCBmCiAgICAg
fQogfQogCi12b2lkIEF1ZGlvQnVzOjpjb3B5V2l0aEdhaW5Gcm9tKGNvbnN0IEF1ZGlvQnVzICZz
b3VyY2VCdXMsIGZsb2F0KiBsYXN0TWl4R2FpbiwgZmxvYXQgdGFyZ2V0R2FpbikKLXsKLSAgICBw
cm9jZXNzV2l0aEdhaW5Gcm9tKHNvdXJjZUJ1cywgbGFzdE1peEdhaW4sIHRhcmdldEdhaW4sIGZh
bHNlKTsKLX0KLQotdm9pZCBBdWRpb0J1czo6c3VtV2l0aEdhaW5Gcm9tKGNvbnN0IEF1ZGlvQnVz
ICZzb3VyY2VCdXMsIGZsb2F0KiBsYXN0TWl4R2FpbiwgZmxvYXQgdGFyZ2V0R2FpbikKLXsKLSAg
ICBwcm9jZXNzV2l0aEdhaW5Gcm9tKHNvdXJjZUJ1cywgbGFzdE1peEdhaW4sIHRhcmdldEdhaW4s
IHRydWUpOwotfQotCiBQYXNzT3duUHRyPEF1ZGlvQnVzPiBBdWRpb0J1czo6Y3JlYXRlQnlTYW1w
bGVSYXRlQ29udmVydGluZyhjb25zdCBBdWRpb0J1cyogc291cmNlQnVzLCBib29sIG1peFRvTW9u
bywgZG91YmxlIG5ld1NhbXBsZVJhdGUpCiB7CiAgICAgLy8gc291cmNlQnVzJ3Mgc2FtcGxlLXJh
dGUgbXVzdCBiZSBrbm93bi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL0F1ZGlvQnVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5o
CmluZGV4IGIzZGEwZjQ1MWQxODE0M2E3YjAxZjRjZGQyMDk3NzAwZDhkMTU5YzAuLjExZDA5NTQx
ZDllZGVmYjAzMmIwYmM2ZTAzZjU0YjE1MDJlOTE1ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvQnVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vQXVkaW9CdXMuaApAQCAtMTAzLDEwICsxMDMsNiBAQCBwdWJsaWM6CiAgICAgLy8g
U2NhbGVzIGFsbCBzYW1wbGVzIGJ5IHRoZSBzYW1lIGFtb3VudC4KICAgICB2b2lkIHNjYWxlKGZs
b2F0IHNjYWxlKTsKIAotICAgIC8vIE1hc3RlciBnYWluIGZvciB0aGlzIGJ1cyAtIHVzZWQgd2l0
aCBzdW1XaXRoR2FpbkZyb20oKSBiZWxvdwotICAgIHZvaWQgc2V0R2FpbihmbG9hdCBnYWluKSB7
IG1fYnVzR2FpbiA9IGdhaW47IH0KLSAgICBmbG9hdCBnYWluKCkgY29uc3QgeyByZXR1cm4gbV9i
dXNHYWluOyB9Ci0KICAgICB2b2lkIHJlc2V0KCkgeyBtX2lzRmlyc3RUaW1lID0gdHJ1ZTsgfSAv
LyBmb3IgZGUtemlwcGVyaW5nCiAKICAgICAvLyBBc3N1bWluZyBzb3VyY2VCdXMgaGFzIHRoZSBz
YW1lIHRvcG9sb2d5LCBjb3BpZXMgc2FtcGxlIGRhdGEgZnJvbSBlYWNoIGNoYW5uZWwgb2Ygc291
cmNlQnVzIHRvIG91ciBjb3JyZXNwb25kaW5nIGNoYW5uZWwuCkBAIC0xMTYsMTIgKzExMiwxMSBA
QCBwdWJsaWM6CiAgICAgLy8gT3VyIG93biBpbnRlcm5hbCBnYWluIG1fYnVzR2FpbiBpcyBpZ25v
cmVkLgogICAgIHZvaWQgc3VtRnJvbShjb25zdCBBdWRpb0J1cyAmc291cmNlQnVzKTsKIAotICAg
IC8vIENvcHkgb3Igc3VtIGVhY2ggY2hhbm5lbCBmcm9tIHNvdXJjZUJ1cyBpbnRvIG91ciBjb3Jy
ZXNwb25kaW5nIGNoYW5uZWwuCisgICAgLy8gQ29weSBlYWNoIGNoYW5uZWwgZnJvbSBzb3VyY2VC
dXMgaW50byBvdXIgY29ycmVzcG9uZGluZyBjaGFubmVsLgogICAgIC8vIFdlIHNjYWxlIGJ5IHRh
cmdldEdhaW4gKGFuZCBvdXIgb3duIGludGVybmFsIGdhaW4gbV9idXNHYWluKSwgcGVyZm9ybWlu
ZyAiZGUtemlwcGVyaW5nIiB0byBzbW9vdGhseSBjaGFuZ2UgZnJvbSAqbGFzdE1peEdhaW4gdG8g
KHRhcmdldEdhaW4qbV9idXNHYWluKS4KLSAgICAvLyBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxl
IGZvciBzZXR0aW5nIHVwIGxhc3RNaXhHYWluIHRvIHBvaW50IHRvIHN0b3JhZ2Ugd2hpY2ggaXMg
dW5pcXVlIGZvciBldmVyeSAic3RyZWFtIiB3aGljaCB3aWxsIGJlIHN1bW1lZCB0byB0aGlzIGJ1
cy4KKyAgICAvLyBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIGxhc3RN
aXhHYWluIHRvIHBvaW50IHRvIHN0b3JhZ2Ugd2hpY2ggaXMgdW5pcXVlIGZvciBldmVyeSAic3Ry
ZWFtIiB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhpcyBidXMuCiAgICAgLy8gVGhpcyByZXBy
ZXNlbnRzIHRoZSBkZXppcHBlcmluZyBtZW1vcnkuCiAgICAgdm9pZCBjb3B5V2l0aEdhaW5Gcm9t
KGNvbnN0IEF1ZGlvQnVzICZzb3VyY2VCdXMsIGZsb2F0KiBsYXN0TWl4R2FpbiwgZmxvYXQgdGFy
Z2V0R2Fpbik7Ci0gICAgdm9pZCBzdW1XaXRoR2FpbkZyb20oY29uc3QgQXVkaW9CdXMgJnNvdXJj
ZUJ1cywgZmxvYXQqIGxhc3RNaXhHYWluLCBmbG9hdCB0YXJnZXRHYWluKTsKIAogICAgIC8vIENv
cGllcyB0aGUgc291cmNlQnVzIGJ5IHNjYWxpbmcgd2l0aCBzYW1wbGUtYWNjdXJhdGUgZ2FpbiB2
YWx1ZXMuCiAgICAgdm9pZCBjb3B5V2l0aFNhbXBsZUFjY3VyYXRlR2FpblZhbHVlc0Zyb20oY29u
c3QgQXVkaW9CdXMgJnNvdXJjZUJ1cywgZmxvYXQqIGdhaW5WYWx1ZXMsIHVuc2lnbmVkIG51bWJl
ck9mR2FpblZhbHVlcyk7CkBAIC0xMzcsMTUgKzEzMiw5IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoK
ICAgICBBdWRpb0J1cygpIHsgfTsKIAotICAgIHZvaWQgcHJvY2Vzc1dpdGhHYWluRnJvbShjb25z
dCBBdWRpb0J1cyAmc291cmNlQnVzLCBmbG9hdCogbGFzdE1peEdhaW4sIGZsb2F0IHRhcmdldEdh
aW4sIGJvb2wgc3VtVG9CdXMpOwotICAgIHZvaWQgcHJvY2Vzc1dpdGhHYWluRnJvbU1vbm9TdGVy
ZW8oY29uc3QgQXVkaW9CdXMgJnNvdXJjZUJ1cywgZmxvYXQqIGxhc3RNaXhHYWluLCBmbG9hdCB0
YXJnZXRHYWluLCBib29sIHN1bVRvQnVzKTsKLQogICAgIHNpemVfdCBtX2xlbmd0aDsKLQogICAg
IFZlY3RvcjxPd25QdHI8QXVkaW9DaGFubmVsPiA+IG1fY2hhbm5lbHM7Ci0KICAgICBpbnQgbV9s
YXlvdXQ7Ci0KICAgICBmbG9hdCBtX2J1c0dhaW47CiAgICAgYm9vbCBtX2lzRmlyc3RUaW1lOwog
ICAgIGZsb2F0IG1fc2FtcGxlUmF0ZTsgLy8gMC4wIGlmIHVua25vd24gb3IgTi9BCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132529</attachid>
            <date>2012-03-18 20:06:41 -0700</date>
            <delta_ts>2012-03-21 19:53:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80675-20120319111201.patch</filename>
            <type>text/plain</type>
            <size>15056</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDk5MzA5MTE5MzdjYWYz
NjkxOTQxMzRkYmExOWJmNzljMjEwOWEwOS4uNzU1MjZkZjkwMWY5ODBjMTc0NzVjYzQ3YjViZDYw
NTE4YzY0NjRkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEyLTAzLTE4ICBSYXlt
b25kIExpdSAgPHJheW1vbmQubGl1QGludGVsLmNvbT4KKworICAgICAgICBBZGQgbXVsdGktY2hh
bm5lbHMgc3VwcG9ydCBmb3IgQ29weVdpdGhHYWluRnJvbSBpbiBBdWRpb0J1cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA2NzUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1
ZGlvQnVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9C
dXM6OkF1ZGlvQnVzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVzOjpzZXRDaGFubmVsTWVt
b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVzOjpjb3B5V2l0aEdhaW5Gcm9tKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5oOgorICAgICAgICAoQXVkaW9CdXMpOgor
CiAyMDEyLTAzLTE4ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFtjaHJvbWl1bV0gVHJhbnNmb3JtIGFuaW1hdGlvbiBzdGF0ZSBzaG91bGQgYmUgaW5oZXJp
dGVkIGZyb20gcGFyZW50cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vQXVkaW9CdXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMu
Y3BwCmluZGV4IGU3Zjg5MDJmNzJmOWUwZDY3MDE1NmQxZmI1MjEzODEwMmY0OTQxM2UuLmM2Yzk0
MjE1ZWI0Njk5Y2UzNzg4YzQwNWU3NjI5ODIyMDcxMWRhNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvQnVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5jcHAKQEAgLTQ1LDEzICs0NSwxOSBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgVmVjdG9yTWF0aDsKLSAgICAKKworY29uc3Qg
dW5zaWduZWQgTWF4QnVzQ2hhbm5lbHMgPSAzMjsKKwogQXVkaW9CdXM6OkF1ZGlvQnVzKHVuc2ln
bmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBsZW5ndGgsIGJvb2wgYWxsb2NhdGUpCiAgICAg
OiBtX2xlbmd0aChsZW5ndGgpCiAgICAgLCBtX2J1c0dhaW4oMSkKICAgICAsIG1faXNGaXJzdFRp
bWUodHJ1ZSkKICAgICAsIG1fc2FtcGxlUmF0ZSgwKQogeworICAgIEFTU0VSVChudW1iZXJPZkNo
YW5uZWxzIDw9IE1heEJ1c0NoYW5uZWxzKTsKKyAgICBpZiAobnVtYmVyT2ZDaGFubmVscyA+IE1h
eEJ1c0NoYW5uZWxzKQorICAgICAgICBudW1iZXJPZkNoYW5uZWxzID0gTWF4QnVzQ2hhbm5lbHM7
CisKICAgICBtX2NoYW5uZWxzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZDaGFubmVs
cyk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytp
KSB7CkBAIC01OSw2ICs2NSw4IEBAIEF1ZGlvQnVzOjpBdWRpb0J1cyh1bnNpZ25lZCBudW1iZXJP
ZkNoYW5uZWxzLCBzaXplX3QgbGVuZ3RoLCBib29sIGFsbG9jYXRlKQogICAgICAgICBtX2NoYW5u
ZWxzLmFwcGVuZChjaGFubmVsKTsKICAgICB9CiAKKyAgICBtX2dhaW5WYWx1ZXMgPSBhZG9wdFB0
cihuZXcgQXVkaW9GbG9hdEFycmF5KGxlbmd0aCkpOworCiAgICAgbV9sYXlvdXQgPSBMYXlvdXRD
YW5vbmljYWw7IC8vIGZvciBub3cgdGhpcyBpcyB0aGUgb25seSBsYXlvdXQgd2UgZGVmaW5lCiB9
CiAKQEAgLTY2LDcgKzc0LDExIEBAIHZvaWQgQXVkaW9CdXM6OnNldENoYW5uZWxNZW1vcnkodW5z
aWduZWQgY2hhbm5lbEluZGV4LCBmbG9hdCogc3RvcmFnZSwgc2l6ZV90IGxlCiB7CiAgICAgaWYg
KGNoYW5uZWxJbmRleCA8IG1fY2hhbm5lbHMuc2l6ZSgpKSB7CiAgICAgICAgIGNoYW5uZWwoY2hh
bm5lbEluZGV4KS0+c2V0KHN0b3JhZ2UsIGxlbmd0aCk7Ci0gICAgICAgIG1fbGVuZ3RoID0gbGVu
Z3RoOyAvLyBGSVhNRTogdmVyaWZ5IHRoYXQgdGhpcyBsZW5ndGggbWF0Y2hlcyBhbGwgdGhlIG90
aGVyIGNoYW5uZWwgbGVuZ3RocworICAgICAgICBpZiAobV9sZW5ndGggIT0gbGVuZ3RoKSB7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogdmVyaWZ5IHRoYXQgdGhpcyBsZW5ndGggbWF0Y2hlcyBhbGwg
dGhlIG90aGVyIGNoYW5uZWwgbGVuZ3RocworICAgICAgICAgICAgbV9sZW5ndGggPSBsZW5ndGg7
CisgICAgICAgICAgICBtX2dhaW5WYWx1ZXMgPSBhZG9wdFB0cihuZXcgQXVkaW9GbG9hdEFycmF5
KGxlbmd0aCkpOworICAgICAgICB9CiAgICAgfQogfQogCkBAIC0zMDcsMTA2ICszMTksMjkgQEAg
dm9pZCBBdWRpb0J1czo6c3VtRnJvbShjb25zdCBBdWRpb0J1cyAmc291cmNlQnVzKQogICAgIH0K
IH0KIAotLy8gU2xvd2x5IGNoYW5nZSBnYWluIHRvIGRlc2lyZWQgZ2Fpbi4KLSNkZWZpbmUgR0FJ
Tl9ERVpJUFBFUiBcCi0gICAgZ2FpbiArPSAodG90YWxEZXNpcmVkR2FpbiAtIGdhaW4pICogRGV6
aXBwZXJSYXRlOyBcCi0gICAgZ2FpbiA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxG
bG9hdFRvWmVybyhnYWluKTsKLQotLy8gRGUtemlwcGVyIGZvciB0aGUgZmlyc3QgZnJhbWVzVG9E
ZXppcHBlciBmcmFtZXMgYW5kIHNraXAgZGUtemlwcGVyaW5nIGZvciB0aGUgcmVtYWluaW5nIGZy
YW1lcwotLy8gYmVjYXVzZSB0aGUgZ2FpbiBpcyBjbG9zZSBlbm91Z2ggdG8gdGhlIHRhcmdldCBn
YWluLgotI2RlZmluZSBQUk9DRVNTX1dJVEhfR0FJTihPUCkgXAotICAgIGZvciAoayA9IDA7IGsg
PCBmcmFtZXNUb0RlemlwcGVyOyArK2spIHsgXAotICAgICAgICBPUCBcCi0gICAgICAgIEdBSU5f
REVaSVBQRVIgXAotICAgIH0gXAotICAgIGlmICghZnJhbWVzVG9EZXppcHBlcikgXAotICAgICAg
ICBnYWluID0gdG90YWxEZXNpcmVkR2FpbjsgXAotICAgIE9QIyNfViAKLQotI2RlZmluZSBTVEVS
RU9fU1VNIFwKLSAgICB7IFwKLSAgICAgICAgZmxvYXQgc3VtTCA9IERlbm9ybWFsRGlzYWJsZXI6
OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybygqZGVzdGluYXRpb25MICsgZ2FpbiAqICpzb3VyY2VM
KyspOyBcCi0gICAgICAgIGZsb2F0IHN1bVIgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9y
bWFsRmxvYXRUb1plcm8oKmRlc3RpbmF0aW9uUiArIGdhaW4gKiAqc291cmNlUisrKTsgXAotICAg
ICAgICAqZGVzdGluYXRpb25MKysgPSBzdW1MOyBcCi0gICAgICAgICpkZXN0aW5hdGlvblIrKyA9
IHN1bVI7IFwKLSAgICB9Ci0KLSNkZWZpbmUgU1RFUkVPX1NVTV9WIFwKLSAgICB7IFwKLSAgICAg
ICAgdnNtYShzb3VyY2VMLCAxLCAmZ2FpbiwgZGVzdGluYXRpb25MLCAxLCBmcmFtZXNUb1Byb2Nl
c3MgLSBrKTsgXAotICAgICAgICB2c21hKHNvdXJjZVIsIDEsICZnYWluLCBkZXN0aW5hdGlvblIs
IDEsIGZyYW1lc1RvUHJvY2VzcyAtIGspOyBcCi0gICAgfQotCi0vLyBNb25vIC0+IHN0ZXJlbyAo
bWl4IGVxdWFsbHkgaW50byBMIGFuZCBSKQotLy8gRklYTUU6IFJlYWxseSB3ZSBzaG91bGQgYXBw
bHkgYW4gZXF1YWwtcG93ZXIgc2NhbGluZyBmYWN0b3IgaGVyZSwgc2luY2Ugd2UncmUgZWZmZWN0
aXZlbHkgcGFubmluZyBjZW50ZXIuLi4KLSNkZWZpbmUgTU9OTzJTVEVSRU9fU1VNIFwKLSAgICB7
IFwKLSAgICAgICAgZmxvYXQgc2NhbGVkID0gZ2FpbiAqICpzb3VyY2VMKys7IFwKLSAgICAgICAg
ZmxvYXQgc3VtTCA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybygq
ZGVzdGluYXRpb25MICsgc2NhbGVkKTsgXAotICAgICAgICBmbG9hdCBzdW1SID0gRGVub3JtYWxE
aXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKCpkZXN0aW5hdGlvblIgKyBzY2FsZWQp
OyBcCi0gICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IHN1bUw7IFwKLSAgICAgICAgKmRlc3RpbmF0
aW9uUisrID0gc3VtUjsgXAotICAgIH0KLQotI2RlZmluZSBNT05PMlNURVJFT19TVU1fViBcCi0g
ICAgeyBcCi0gICAgICAgIHZzbWEoc291cmNlTCwgMSwgJmdhaW4sIGRlc3RpbmF0aW9uTCwgMSwg
ZnJhbWVzVG9Qcm9jZXNzIC0gayk7IFwKLSAgICAgICAgdnNtYShzb3VyY2VMLCAxLCAmZ2Fpbiwg
ZGVzdGluYXRpb25SLCAxLCBmcmFtZXNUb1Byb2Nlc3MgLSBrKTsgXAotICAgIH0KLSAgICAKLSNk
ZWZpbmUgTU9OT19TVU0gXAotICAgIHsgXAotICAgICAgICBmbG9hdCBzdW0gPSBEZW5vcm1hbERp
c2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oKmRlc3RpbmF0aW9uTCArIGdhaW4gKiAq
c291cmNlTCsrKTsgXAotICAgICAgICAqZGVzdGluYXRpb25MKysgPSBzdW07IFwKLSAgICB9Ci0K
LSNkZWZpbmUgTU9OT19TVU1fViBcCi0gICAgeyBcCi0gICAgICAgIHZzbWEoc291cmNlTCwgMSwg
JmdhaW4sIGRlc3RpbmF0aW9uTCwgMSwgZnJhbWVzVG9Qcm9jZXNzIC0gayk7IFwKLSAgICB9IAot
Ci0jZGVmaW5lIFNURVJFT19OT19TVU0gXAotICAgIHsgXAotICAgICAgICBmbG9hdCBzYW1wbGVM
ID0gKnNvdXJjZUwrKzsgXAotICAgICAgICBmbG9hdCBzYW1wbGVSID0gKnNvdXJjZVIrKzsgXAot
ICAgICAgICAqZGVzdGluYXRpb25MKysgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFs
RmxvYXRUb1plcm8oZ2FpbiAqIHNhbXBsZUwpOyBcCi0gICAgICAgICpkZXN0aW5hdGlvblIrKyA9
IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluICogc2FtcGxl
Uik7IFwKK3ZvaWQgQXVkaW9CdXM6OmNvcHlXaXRoR2FpbkZyb20oY29uc3QgQXVkaW9CdXMgJnNv
dXJjZUJ1cywgZmxvYXQqIGxhc3RNaXhHYWluLCBmbG9hdCB0YXJnZXRHYWluKQoreworICAgIGlm
ICghdG9wb2xvZ3lNYXRjaGVzKHNvdXJjZUJ1cykpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHplcm8oKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotI2RlZmlu
ZSBTVEVSRU9fTk9fU1VNX1YgXAotICAgIHsgXAotICAgICAgICB2c211bChzb3VyY2VMLCAxLCAm
Z2FpbiwgZGVzdGluYXRpb25MLCAxLCBmcmFtZXNUb1Byb2Nlc3MgLSBrKTsgXAotICAgICAgICB2
c211bChzb3VyY2VSLCAxLCAmZ2FpbiwgZGVzdGluYXRpb25SLCAxLCBmcmFtZXNUb1Byb2Nlc3Mg
LSBrKTsgXAotICAgIH0KKyAgICAvLyBJZiBpdCBpcyBjb3B5aW5nIGZyb20gdGhlIHNhbWUgYnVz
IGFuZCBubyBuZWVkIHRvIGNoYW5nZSBnYWluLCBqdXN0IHJldHVybi4KKyAgICBpZiAodGhpcyA9
PSAmc291cmNlQnVzICYmICpsYXN0TWl4R2FpbiA9PSB0YXJnZXRHYWluICYmIHRhcmdldEdhaW4g
PT0gMSkKKyAgICAgICAgcmV0dXJuOwogCi0vLyBNb25vIC0+IHN0ZXJlbyAobWl4IGVxdWFsbHkg
aW50byBMIGFuZCBSKQotLy8gRklYTUU6IFJlYWxseSB3ZSBzaG91bGQgYXBwbHkgYW4gZXF1YWwt
cG93ZXIgc2NhbGluZyBmYWN0b3IgaGVyZSwgc2luY2Ugd2UncmUgZWZmZWN0aXZlbHkgcGFubmlu
ZyBjZW50ZXIuLi4KLSNkZWZpbmUgTU9OTzJTVEVSRU9fTk9fU1VNIFwKLSAgICB7IFwKLSAgICAg
ICAgZmxvYXQgc2FtcGxlID0gKnNvdXJjZUwrKzsgXAotICAgICAgICAqZGVzdGluYXRpb25MKysg
PSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2FpbiAqIHNhbXBs
ZSk7IFwKLSAgICAgICAgKmRlc3RpbmF0aW9uUisrID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hE
ZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4gKiBzYW1wbGUpOyBcCi0gICAgfQorICAgIHVuc2lnbmVk
IG51bWJlck9mQ2hhbm5lbHMgPSB0aGlzLT5udW1iZXJPZkNoYW5uZWxzKCk7CiAKLSNkZWZpbmUg
TU9OTzJTVEVSRU9fTk9fU1VNX1YgXAotICAgIHsgXAotICAgICAgICB2c211bChzb3VyY2VMLCAx
LCAmZ2FpbiwgZGVzdGluYXRpb25MLCAxLCBmcmFtZXNUb1Byb2Nlc3MgLSBrKTsgXAotICAgICAg
ICB2c211bChzb3VyY2VMLCAxLCAmZ2FpbiwgZGVzdGluYXRpb25SLCAxLCBmcmFtZXNUb1Byb2Nl
c3MgLSBrKTsgXAotICAgIH0KKyAgICBBdWRpb0J1cyYgc291cmNlQnVzU2FmZSA9IGNvbnN0X2Nh
c3Q8QXVkaW9CdXMmPihzb3VyY2VCdXMpOworICAgIGNvbnN0IGZsb2F0KiBzb3VyY2VzW01heEJ1
c0NoYW5uZWxzXTsKKyAgICBmbG9hdCogZGVzdGluYXRpb25zW01heEJ1c0NoYW5uZWxzXTsKIAot
I2RlZmluZSBNT05PX05PX1NVTSBcCi0gICAgeyBcCi0gICAgICAgIGZsb2F0IHNhbXBsZUwgPSAq
c291cmNlTCsrOyBcCi0gICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IERlbm9ybWFsRGlzYWJsZXI6
OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluICogc2FtcGxlTCk7IFwKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKSB7CisgICAgICAgIHNvdXJj
ZXNbaV0gPSBzb3VyY2VCdXNTYWZlLmNoYW5uZWwoaSktPmRhdGEoKTsKKyAgICAgICAgZGVzdGlu
YXRpb25zW2ldID0gY2hhbm5lbChpKS0+bXV0YWJsZURhdGEoKTsKICAgICB9CiAKLSNkZWZpbmUg
TU9OT19OT19TVU1fViBcCi0gICAgeyBcCi0gICAgICAgIHZzbXVsKHNvdXJjZUwsIDEsICZnYWlu
LCBkZXN0aW5hdGlvbkwsIDEsIGZyYW1lc1RvUHJvY2VzcyAtIGspOyBcCi0gICAgfSAKLQotdm9p
ZCBBdWRpb0J1czo6cHJvY2Vzc1dpdGhHYWluRnJvbU1vbm9TdGVyZW8oY29uc3QgQXVkaW9CdXMg
JnNvdXJjZUJ1cywgZmxvYXQqIGxhc3RNaXhHYWluLCBmbG9hdCB0YXJnZXRHYWluLCBib29sIHN1
bVRvQnVzKQotewogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc3VkZGVubHkgY2hhbmdlIHRoZSBn
YWluIGZyb20gbWl4aW5nIG9uZSB0aW1lIHNsaWNlIHRvIHRoZSBuZXh0LAogICAgIC8vIHNvIHdl
ICJkZS16aXBwZXIiIGJ5IHNsb3dseSBjaGFuZ2luZyB0aGUgZ2FpbiBlYWNoIHNhbXBsZS1mcmFt
ZSB1bnRpbCB3ZSd2ZSBhY2hpZXZlZCB0aGUgdGFyZ2V0IGdhaW4uCiAgICAgCkBAIC00MTcsMTgg
KzM1Miw4IEBAIHZvaWQgQXVkaW9CdXM6OnByb2Nlc3NXaXRoR2FpbkZyb21Nb25vU3RlcmVvKGNv
bnN0IEF1ZGlvQnVzICZzb3VyY2VCdXMsIGZsb2F0KiBsCiAgICAgZmxvYXQgZ2FpbiA9IHN0YXRp
Y19jYXN0PGZsb2F0PihtX2lzRmlyc3RUaW1lID8gdG90YWxEZXNpcmVkR2FpbiA6ICpsYXN0TWl4
R2Fpbik7CiAgICAgbV9pc0ZpcnN0VGltZSA9IGZhbHNlOwogCi0gICAgaW50IG51bWJlck9mU291
cmNlQ2hhbm5lbHMgPSBzb3VyY2VCdXMubnVtYmVyT2ZDaGFubmVscygpOwotICAgIGludCBudW1i
ZXJPZkRlc3RpbmF0aW9uQ2hhbm5lbHMgPSBudW1iZXJPZkNoYW5uZWxzKCk7Ci0KLSAgICBBdWRp
b0J1cyYgc291cmNlQnVzU2FmZSA9IGNvbnN0X2Nhc3Q8QXVkaW9CdXMmPihzb3VyY2VCdXMpOwot
ICAgIGNvbnN0IGZsb2F0KiBzb3VyY2VMID0gc291cmNlQnVzU2FmZS5jaGFubmVsQnlUeXBlKENo
YW5uZWxMZWZ0KS0+ZGF0YSgpOwotICAgIGNvbnN0IGZsb2F0KiBzb3VyY2VSID0gbnVtYmVyT2ZT
b3VyY2VDaGFubmVscyA+IDEgPyBzb3VyY2VCdXNTYWZlLmNoYW5uZWxCeVR5cGUoQ2hhbm5lbFJp
Z2h0KS0+ZGF0YSgpIDogMDsKLQotICAgIGZsb2F0KiBkZXN0aW5hdGlvbkwgPSBjaGFubmVsQnlU
eXBlKENoYW5uZWxMZWZ0KS0+bXV0YWJsZURhdGEoKTsKLSAgICBmbG9hdCogZGVzdGluYXRpb25S
ID0gbnVtYmVyT2ZEZXN0aW5hdGlvbkNoYW5uZWxzID4gMSA/IGNoYW5uZWxCeVR5cGUoQ2hhbm5l
bFJpZ2h0KS0+bXV0YWJsZURhdGEoKSA6IDA7Ci0KICAgICBjb25zdCBmbG9hdCBEZXppcHBlclJh
dGUgPSAwLjAwNWY7Ci0gICAgaW50IGZyYW1lc1RvUHJvY2VzcyA9IGxlbmd0aCgpOworICAgIHVu
c2lnbmVkIGZyYW1lc1RvUHJvY2VzcyA9IGxlbmd0aCgpOwogCiAgICAgLy8gSWYgdGhlIGdhaW4g
aXMgd2l0aGluIGVwc2lsb24gb2YgdG90YWxEZXNpcmVkR2Fpbiwgd2UgY2FuIHNraXAgZGV6aXBw
ZXJpbmcuIAogICAgIC8vIEZJWE1FOiB0aGlzIHZhbHVlIG1heSBuZWVkIHR3ZWFraW5nLgpAQCAt
NDM2LDY2ICszNjEsNDAgQEAgdm9pZCBBdWRpb0J1czo6cHJvY2Vzc1dpdGhHYWluRnJvbU1vbm9T
dGVyZW8oY29uc3QgQXVkaW9CdXMgJnNvdXJjZUJ1cywgZmxvYXQqIGwKICAgICBmbG9hdCBnYWlu
RGlmZiA9IGZhYnModG90YWxEZXNpcmVkR2FpbiAtIGdhaW4pOwogCiAgICAgLy8gTnVtYmVyIG9m
IGZyYW1lcyB0byBkZS16aXBwZXIgYmVmb3JlIHdlIGFyZSBjbG9zZSBlbm91Z2ggdG8gdGhlIHRh
cmdldCBnYWluLgotICAgIGludCBmcmFtZXNUb0RlemlwcGVyID0gKGdhaW5EaWZmIDwgZXBzaWxv
bikgPyAwIDogZnJhbWVzVG9Qcm9jZXNzOyAKLQotICAgIGludCBrID0gMDsKLQotICAgIGlmIChz
dW1Ub0J1cykgewotICAgICAgICAvLyBTdW0gdG8gb3VyIGJ1cwotICAgICAgICBpZiAoc291cmNl
UiAmJiBkZXN0aW5hdGlvblIpIHsKLSAgICAgICAgICAgIC8vIFN0ZXJlbwotICAgICAgICAgICAg
UFJPQ0VTU19XSVRIX0dBSU4oU1RFUkVPX1NVTSkKLSAgICAgICAgfSBlbHNlIGlmIChkZXN0aW5h
dGlvblIpIHsKLSAgICAgICAgICAgIC8vIE1vbm8gLT4gc3RlcmVvIAotICAgICAgICAgICAgUFJP
Q0VTU19XSVRIX0dBSU4oTU9OTzJTVEVSRU9fU1VNKQotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgLy8gTW9ubwotICAgICAgICAgICAgUFJPQ0VTU19XSVRIX0dBSU4oTU9OT19TVU0pCisg
ICAgLy8gRklYTUU6IGZyYW1lc1RvRGV6aXBwZXIgY291bGQgYmUgc21hbGxlciB3aGVuIHRhcmdl
dCBnYWluIGlzIGNsb3NlIGVub3VnaCB3aXRoaW4gdGhpcyBwcm9jZXNzIGxvb3AuCisgICAgdW5z
aWduZWQgZnJhbWVzVG9EZXppcHBlciA9IChnYWluRGlmZiA8IGVwc2lsb24pID8gMCA6IGZyYW1l
c1RvUHJvY2VzczsgCisKKyAgICBpZiAoZnJhbWVzVG9EZXppcHBlcikgeworICAgICAgICBmbG9h
dCogZ2FpblZhbHVlcyA9IG1fZ2FpblZhbHVlcy0+ZGF0YSgpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZnJhbWVzVG9EZXppcHBlcjsgKytpKSB7CisgICAgICAgICAgICBnYWlu
ICs9ICh0b3RhbERlc2lyZWRHYWluIC0gZ2FpbikgKiBEZXppcHBlclJhdGU7CisgICAgICAgIAor
ICAgICAgICAgICAgLy8gRklYTUU6IElmIHdlIGFyZSBjbGV2ZXIgZW5vdWdoIGluIGNhbGN1bGF0
aW5nIHRoZSBmcmFtZXNUb0RlemlwcGVyIHZhbHVlLCB3ZSBjYW4gcHJvYmFibHkgZ2V0CisgICAg
ICAgICAgICAvLyByaWQgb2YgdGhpcyBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxv
YXRUb1plcm8oKSBjYWxsLgorICAgICAgICAgICAgZ2FpbiA9IERlbm9ybWFsRGlzYWJsZXI6OmZs
dXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluKTsKKyAgICAgICAgICAgICpnYWluVmFsdWVzKysg
PSBnYWluOwogICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gUHJvY2VzcyBkaXJl
Y3RseSAod2l0aG91dCBzdW1taW5nKSB0byBvdXIgYnVzCi0gICAgICAgIGlmIChzb3VyY2VSICYm
IGRlc3RpbmF0aW9uUikgewotICAgICAgICAgICAgLy8gU3RlcmVvCi0gICAgICAgICAgICBQUk9D
RVNTX1dJVEhfR0FJTihTVEVSRU9fTk9fU1VNKQotICAgICAgICB9IGVsc2UgaWYgKGRlc3RpbmF0
aW9uUikgewotICAgICAgICAgICAgLy8gTW9ubyAtPiBzdGVyZW8gCi0gICAgICAgICAgICBQUk9D
RVNTX1dJVEhfR0FJTihNT05PMlNURVJFT19OT19TVU0pCi0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBNb25vCi0gICAgICAgICAgICBQUk9DRVNTX1dJVEhfR0FJTihNT05PX05PX1NV
TSkKKworICAgICAgICAvLyByZXNldCBnYWluVmF1bGVzIHRvIG1fZ2FpblZhdWxlcyBhcnJheSBo
ZWFkLCBmb3IgaXQgaGFzIGJlZW4gbW9kaWZpZWQgYWJvdmUuCisgICAgICAgIGdhaW5WYWx1ZXMg
PSBtX2dhaW5WYWx1ZXMtPmRhdGEoKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0g
MDsgaW5kZXggPCBudW1iZXJPZkNoYW5uZWxzOyArK2luZGV4KSB7CisgICAgICAgICAgICB2bXVs
KHNvdXJjZXNbaW5kZXhdLCAxLCBnYWluVmFsdWVzLCAxLCBkZXN0aW5hdGlvbnNbaW5kZXhdLCAx
LCBmcmFtZXNUb0RlemlwcGVyKTsKKyAgICAgICAgICAgIHNvdXJjZXNbaW5kZXhdICs9IGZyYW1l
c1RvRGV6aXBwZXI7CisgICAgICAgICAgICBkZXN0aW5hdGlvbnNbaW5kZXhdICs9IGZyYW1lc1Rv
RGV6aXBwZXI7CiAgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgZ2FpbiA9IHRvdGFsRGVz
aXJlZEdhaW47CisKKyAgICBpZiAoZnJhbWVzVG9EZXppcHBlciA8IGZyYW1lc1RvUHJvY2Vzcykg
eworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBudW1iZXJPZkNoYW5u
ZWxzOyArK2luZGV4KQorICAgICAgICAgICAgdnNtdWwoc291cmNlc1tpbmRleF0sIDEsICZnYWlu
LCBkZXN0aW5hdGlvbnNbaW5kZXhdLCAxLCBmcmFtZXNUb1Byb2Nlc3MgLSBmcmFtZXNUb0Rlemlw
cGVyKTsKICAgICB9CiAKICAgICAvLyBTYXZlIHRoZSB0YXJnZXQgZ2FpbiBhcyB0aGUgc3RhcnRp
bmcgcG9pbnQgZm9yIG5leHQgdGltZSBhcm91bmQuCiAgICAgKmxhc3RNaXhHYWluID0gZ2FpbjsK
IH0KIAotdm9pZCBBdWRpb0J1czo6cHJvY2Vzc1dpdGhHYWluRnJvbShjb25zdCBBdWRpb0J1cyAm
c291cmNlQnVzLCBmbG9hdCogbGFzdE1peEdhaW4sIGZsb2F0IHRhcmdldEdhaW4sIGJvb2wgc3Vt
VG9CdXMpCi17Ci0gICAgLy8gTWFrZSBzdXJlIHdlJ3JlIHN1bW1pbmcgZnJvbSBzYW1lIHR5cGUg
b2YgYnVzLgotICAgIC8vIFdlICphcmUqIGFibGUgdG8gc3VtIGZyb20gbW9ubyAtPiBzdGVyZW8K
LSAgICBpZiAoc291cmNlQnVzLm51bWJlck9mQ2hhbm5lbHMoKSAhPSAxICYmICF0b3BvbG9neU1h
dGNoZXMoc291cmNlQnVzKSkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBJZiBpdCBpcyBjb3B5aW5nIGZyb20gdGhlIHNhbWUg
YnVzIGFuZCBubyBuZWVkIHRvIGNoYW5nZSBnYWluLCBqdXN0IHJldHVybgotICAgIGlmICghc3Vt
VG9CdXMgJiYgdGhpcyA9PSAmc291cmNlQnVzICYmICpsYXN0TWl4R2FpbiA9PSB0YXJnZXRHYWlu
ICYmIHRhcmdldEdhaW4gPT0gMS4wKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBEaXNwYXRj
aCBmb3IgZGlmZmVyZW50IGNoYW5uZWwgbGF5b3V0cwotICAgIHN3aXRjaCAobnVtYmVyT2ZDaGFu
bmVscygpKSB7Ci0gICAgY2FzZSAxOiAvLyBtb25vCi0gICAgY2FzZSAyOiAvLyBzdGVyZW8KLSAg
ICAgICAgcHJvY2Vzc1dpdGhHYWluRnJvbU1vbm9TdGVyZW8oc291cmNlQnVzLCBsYXN0TWl4R2Fp
biwgdGFyZ2V0R2Fpbiwgc3VtVG9CdXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDQ6IC8v
IEZJWE1FOiBpbXBsZW1lbnQgcXVhZAotICAgIGNhc2UgNTogLy8gRklYTUU6IGltcGxlbWVudCA1
LjAKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotfQotCiB2b2lkIEF1ZGlvQnVzOjpjb3B5V2l0aFNhbXBsZUFjY3VyYXRl
R2FpblZhbHVlc0Zyb20oY29uc3QgQXVkaW9CdXMgJnNvdXJjZUJ1cywgZmxvYXQqIGdhaW5WYWx1
ZXMsIHVuc2lnbmVkIG51bWJlck9mR2FpblZhbHVlcykKIHsKICAgICAvLyBNYWtlIHN1cmUgd2Un
cmUgcHJvY2Vzc2luZyBmcm9tIHRoZSBzYW1lIHR5cGUgb2YgYnVzLgpAQCAtNTIwLDE2ICs0MTks
NiBAQCB2b2lkIEF1ZGlvQnVzOjpjb3B5V2l0aFNhbXBsZUFjY3VyYXRlR2FpblZhbHVlc0Zyb20o
Y29uc3QgQXVkaW9CdXMgJnNvdXJjZUJ1cywgZgogICAgIH0KIH0KIAotdm9pZCBBdWRpb0J1czo6
Y29weVdpdGhHYWluRnJvbShjb25zdCBBdWRpb0J1cyAmc291cmNlQnVzLCBmbG9hdCogbGFzdE1p
eEdhaW4sIGZsb2F0IHRhcmdldEdhaW4pCi17Ci0gICAgcHJvY2Vzc1dpdGhHYWluRnJvbShzb3Vy
Y2VCdXMsIGxhc3RNaXhHYWluLCB0YXJnZXRHYWluLCBmYWxzZSk7Ci19Ci0KLXZvaWQgQXVkaW9C
dXM6OnN1bVdpdGhHYWluRnJvbShjb25zdCBBdWRpb0J1cyAmc291cmNlQnVzLCBmbG9hdCogbGFz
dE1peEdhaW4sIGZsb2F0IHRhcmdldEdhaW4pCi17Ci0gICAgcHJvY2Vzc1dpdGhHYWluRnJvbShz
b3VyY2VCdXMsIGxhc3RNaXhHYWluLCB0YXJnZXRHYWluLCB0cnVlKTsKLX0KLQogUGFzc093blB0
cjxBdWRpb0J1cz4gQXVkaW9CdXM6OmNyZWF0ZUJ5U2FtcGxlUmF0ZUNvbnZlcnRpbmcoY29uc3Qg
QXVkaW9CdXMqIHNvdXJjZUJ1cywgYm9vbCBtaXhUb01vbm8sIGRvdWJsZSBuZXdTYW1wbGVSYXRl
KQogewogICAgIC8vIHNvdXJjZUJ1cydzIHNhbXBsZS1yYXRlIG11c3QgYmUga25vd24uCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMuaAppbmRleCBiM2RhMGY0NTFkMTgxNDNh
N2IwMWY0Y2RkMjA5NzcwMGQ4ZDE1OWMwLi4wZDA5M2RiN2YxMDc3ZWVmMTM0Y2UyNjBkMDNkOTI2
ZTc4MGUzYTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRp
b0J1cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvQnVzLmgKQEAg
LTEwMywxMCArMTAzLDYgQEAgcHVibGljOgogICAgIC8vIFNjYWxlcyBhbGwgc2FtcGxlcyBieSB0
aGUgc2FtZSBhbW91bnQuCiAgICAgdm9pZCBzY2FsZShmbG9hdCBzY2FsZSk7CiAKLSAgICAvLyBN
YXN0ZXIgZ2FpbiBmb3IgdGhpcyBidXMgLSB1c2VkIHdpdGggc3VtV2l0aEdhaW5Gcm9tKCkgYmVs
b3cKLSAgICB2b2lkIHNldEdhaW4oZmxvYXQgZ2FpbikgeyBtX2J1c0dhaW4gPSBnYWluOyB9Ci0g
ICAgZmxvYXQgZ2FpbigpIGNvbnN0IHsgcmV0dXJuIG1fYnVzR2FpbjsgfQotCiAgICAgdm9pZCBy
ZXNldCgpIHsgbV9pc0ZpcnN0VGltZSA9IHRydWU7IH0gLy8gZm9yIGRlLXppcHBlcmluZwogCiAg
ICAgLy8gQXNzdW1pbmcgc291cmNlQnVzIGhhcyB0aGUgc2FtZSB0b3BvbG9neSwgY29waWVzIHNh
bXBsZSBkYXRhIGZyb20gZWFjaCBjaGFubmVsIG9mIHNvdXJjZUJ1cyB0byBvdXIgY29ycmVzcG9u
ZGluZyBjaGFubmVsLgpAQCAtMTE2LDEyICsxMTIsMTEgQEAgcHVibGljOgogICAgIC8vIE91ciBv
d24gaW50ZXJuYWwgZ2FpbiBtX2J1c0dhaW4gaXMgaWdub3JlZC4KICAgICB2b2lkIHN1bUZyb20o
Y29uc3QgQXVkaW9CdXMgJnNvdXJjZUJ1cyk7CiAKLSAgICAvLyBDb3B5IG9yIHN1bSBlYWNoIGNo
YW5uZWwgZnJvbSBzb3VyY2VCdXMgaW50byBvdXIgY29ycmVzcG9uZGluZyBjaGFubmVsLgorICAg
IC8vIENvcHkgZWFjaCBjaGFubmVsIGZyb20gc291cmNlQnVzIGludG8gb3VyIGNvcnJlc3BvbmRp
bmcgY2hhbm5lbC4KICAgICAvLyBXZSBzY2FsZSBieSB0YXJnZXRHYWluIChhbmQgb3VyIG93biBp
bnRlcm5hbCBnYWluIG1fYnVzR2FpbiksIHBlcmZvcm1pbmcgImRlLXppcHBlcmluZyIgdG8gc21v
b3RobHkgY2hhbmdlIGZyb20gKmxhc3RNaXhHYWluIHRvICh0YXJnZXRHYWluKm1fYnVzR2Fpbiku
Ci0gICAgLy8gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCBsYXN0TWl4
R2FpbiB0byBwb2ludCB0byBzdG9yYWdlIHdoaWNoIGlzIHVuaXF1ZSBmb3IgZXZlcnkgInN0cmVh
bSIgd2hpY2ggd2lsbCBiZSBzdW1tZWQgdG8gdGhpcyBidXMuCisgICAgLy8gVGhlIGNhbGxlciBp
cyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCBsYXN0TWl4R2FpbiB0byBwb2ludCB0byBzdG9y
YWdlIHdoaWNoIGlzIHVuaXF1ZSBmb3IgZXZlcnkgInN0cmVhbSIgd2hpY2ggd2lsbCBiZSBhcHBs
aWVkIHRvIHRoaXMgYnVzLgogICAgIC8vIFRoaXMgcmVwcmVzZW50cyB0aGUgZGV6aXBwZXJpbmcg
bWVtb3J5LgogICAgIHZvaWQgY29weVdpdGhHYWluRnJvbShjb25zdCBBdWRpb0J1cyAmc291cmNl
QnVzLCBmbG9hdCogbGFzdE1peEdhaW4sIGZsb2F0IHRhcmdldEdhaW4pOwotICAgIHZvaWQgc3Vt
V2l0aEdhaW5Gcm9tKGNvbnN0IEF1ZGlvQnVzICZzb3VyY2VCdXMsIGZsb2F0KiBsYXN0TWl4R2Fp
biwgZmxvYXQgdGFyZ2V0R2Fpbik7CiAKICAgICAvLyBDb3BpZXMgdGhlIHNvdXJjZUJ1cyBieSBz
Y2FsaW5nIHdpdGggc2FtcGxlLWFjY3VyYXRlIGdhaW4gdmFsdWVzLgogICAgIHZvaWQgY29weVdp
dGhTYW1wbGVBY2N1cmF0ZUdhaW5WYWx1ZXNGcm9tKGNvbnN0IEF1ZGlvQnVzICZzb3VyY2VCdXMs
IGZsb2F0KiBnYWluVmFsdWVzLCB1bnNpZ25lZCBudW1iZXJPZkdhaW5WYWx1ZXMpOwpAQCAtMTM3
LDE2ICsxMzIsMTEgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIEF1ZGlvQnVzKCkgeyB9Owog
Ci0gICAgdm9pZCBwcm9jZXNzV2l0aEdhaW5Gcm9tKGNvbnN0IEF1ZGlvQnVzICZzb3VyY2VCdXMs
IGZsb2F0KiBsYXN0TWl4R2FpbiwgZmxvYXQgdGFyZ2V0R2FpbiwgYm9vbCBzdW1Ub0J1cyk7Ci0g
ICAgdm9pZCBwcm9jZXNzV2l0aEdhaW5Gcm9tTW9ub1N0ZXJlbyhjb25zdCBBdWRpb0J1cyAmc291
cmNlQnVzLCBmbG9hdCogbGFzdE1peEdhaW4sIGZsb2F0IHRhcmdldEdhaW4sIGJvb2wgc3VtVG9C
dXMpOwotCiAgICAgc2l6ZV90IG1fbGVuZ3RoOwotCiAgICAgVmVjdG9yPE93blB0cjxBdWRpb0No
YW5uZWw+ID4gbV9jaGFubmVsczsKLQogICAgIGludCBtX2xheW91dDsKLQogICAgIGZsb2F0IG1f
YnVzR2FpbjsKKyAgICBPd25QdHI8QXVkaW9GbG9hdEFycmF5PiBtX2dhaW5WYWx1ZXM7IC8vIFN0
b3JlIGdhaW4gdmFsdWVzIGFycmF5IGZvciBkZXppcHBlciBmcmFtZXMuCiAgICAgYm9vbCBtX2lz
Rmlyc3RUaW1lOwogICAgIGZsb2F0IG1fc2FtcGxlUmF0ZTsgLy8gMC4wIGlmIHVua25vd24gb3Ig
Ti9BCiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133172</attachid>
            <date>2012-03-21 19:53:30 -0700</date>
            <delta_ts>2012-04-18 20:20:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80675-20120322105853.patch</filename>
            <type>text/plain</type>
            <size>14425</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExNjM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTQyNTRiNzc2YjE3N2U3
ZTc1NjQwYmI4MmIyZDk2NGY2Mjk4MTIxMC4uYzg2ZTI2OTlkNTdmOTYyZDgxZDM1YTVkNTg4NTAy
ZGI3MzNkMjEzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTAzLTIxICBSYXlt
b25kIExpdSAgPHJheW1vbmQubGl1QGludGVsLmNvbT4KKworICAgICAgICBBZGQgbXVsdGktY2hh
bm5lbHMgc3VwcG9ydCBmb3IgQ29weVdpdGhHYWluRnJvbSBpbiBBdWRpb0J1cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA2NzUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1
ZGlvQnVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9C
dXM6OkF1ZGlvQnVzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVzOjpjb3B5V2l0aEdhaW5G
cm9tKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5oOgorICAgICAgICAoQXVk
aW9CdXMpOgorCiAyMDEyLTAzLTIxICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdt
YWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTExNjE2LgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMuY3BwCmluZGV4IGU3Zjg5MDJmNzJm
OWUwZDY3MDE1NmQxZmI1MjEzODEwMmY0OTQxM2UuLmY5MjQ5OTNkZjc4ZDVlZTY2YTFjNzRhMTM5
MDQwOGVmMWJlM2EwNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0F1ZGlvQnVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1
cy5jcHAKQEAgLTQ1LDEzICs0NSwxOSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBu
YW1lc3BhY2UgVmVjdG9yTWF0aDsKLSAgICAKKworY29uc3QgdW5zaWduZWQgTWF4QnVzQ2hhbm5l
bHMgPSAzMjsKKwogQXVkaW9CdXM6OkF1ZGlvQnVzKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMs
IHNpemVfdCBsZW5ndGgsIGJvb2wgYWxsb2NhdGUpCiAgICAgOiBtX2xlbmd0aChsZW5ndGgpCiAg
ICAgLCBtX2J1c0dhaW4oMSkKICAgICAsIG1faXNGaXJzdFRpbWUodHJ1ZSkKICAgICAsIG1fc2Ft
cGxlUmF0ZSgwKQogeworICAgIEFTU0VSVChudW1iZXJPZkNoYW5uZWxzIDw9IE1heEJ1c0NoYW5u
ZWxzKTsKKyAgICBpZiAobnVtYmVyT2ZDaGFubmVscyA+IE1heEJ1c0NoYW5uZWxzKQorICAgICAg
ICByZXR1cm47CisKICAgICBtX2NoYW5uZWxzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVy
T2ZDaGFubmVscyk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFu
bmVsczsgKytpKSB7CkBAIC0zMDcsMTA2ICszMTMsMzIgQEAgdm9pZCBBdWRpb0J1czo6c3VtRnJv
bShjb25zdCBBdWRpb0J1cyAmc291cmNlQnVzKQogICAgIH0KIH0KIAotLy8gU2xvd2x5IGNoYW5n
ZSBnYWluIHRvIGRlc2lyZWQgZ2Fpbi4KLSNkZWZpbmUgR0FJTl9ERVpJUFBFUiBcCi0gICAgZ2Fp
biArPSAodG90YWxEZXNpcmVkR2FpbiAtIGdhaW4pICogRGV6aXBwZXJSYXRlOyBcCi0gICAgZ2Fp
biA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluKTsKLQot
Ly8gRGUtemlwcGVyIGZvciB0aGUgZmlyc3QgZnJhbWVzVG9EZXppcHBlciBmcmFtZXMgYW5kIHNr
aXAgZGUtemlwcGVyaW5nIGZvciB0aGUgcmVtYWluaW5nIGZyYW1lcwotLy8gYmVjYXVzZSB0aGUg
Z2FpbiBpcyBjbG9zZSBlbm91Z2ggdG8gdGhlIHRhcmdldCBnYWluLgotI2RlZmluZSBQUk9DRVNT
X1dJVEhfR0FJTihPUCkgXAotICAgIGZvciAoayA9IDA7IGsgPCBmcmFtZXNUb0RlemlwcGVyOyAr
K2spIHsgXAotICAgICAgICBPUCBcCi0gICAgICAgIEdBSU5fREVaSVBQRVIgXAotICAgIH0gXAot
ICAgIGlmICghZnJhbWVzVG9EZXppcHBlcikgXAotICAgICAgICBnYWluID0gdG90YWxEZXNpcmVk
R2FpbjsgXAotICAgIE9QIyNfViAKLQotI2RlZmluZSBTVEVSRU9fU1VNIFwKLSAgICB7IFwKLSAg
ICAgICAgZmxvYXQgc3VtTCA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRv
WmVybygqZGVzdGluYXRpb25MICsgZ2FpbiAqICpzb3VyY2VMKyspOyBcCi0gICAgICAgIGZsb2F0
IHN1bVIgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oKmRlc3Rp
bmF0aW9uUiArIGdhaW4gKiAqc291cmNlUisrKTsgXAotICAgICAgICAqZGVzdGluYXRpb25MKysg
PSBzdW1MOyBcCi0gICAgICAgICpkZXN0aW5hdGlvblIrKyA9IHN1bVI7IFwKLSAgICB9Ci0KLSNk
ZWZpbmUgU1RFUkVPX1NVTV9WIFwKLSAgICB7IFwKLSAgICAgICAgdnNtYShzb3VyY2VMLCAxLCAm
Z2FpbiwgZGVzdGluYXRpb25MLCAxLCBmcmFtZXNUb1Byb2Nlc3MgLSBrKTsgXAotICAgICAgICB2
c21hKHNvdXJjZVIsIDEsICZnYWluLCBkZXN0aW5hdGlvblIsIDEsIGZyYW1lc1RvUHJvY2VzcyAt
IGspOyBcCi0gICAgfQotCi0vLyBNb25vIC0+IHN0ZXJlbyAobWl4IGVxdWFsbHkgaW50byBMIGFu
ZCBSKQotLy8gRklYTUU6IFJlYWxseSB3ZSBzaG91bGQgYXBwbHkgYW4gZXF1YWwtcG93ZXIgc2Nh
bGluZyBmYWN0b3IgaGVyZSwgc2luY2Ugd2UncmUgZWZmZWN0aXZlbHkgcGFubmluZyBjZW50ZXIu
Li4KLSNkZWZpbmUgTU9OTzJTVEVSRU9fU1VNIFwKLSAgICB7IFwKLSAgICAgICAgZmxvYXQgc2Nh
bGVkID0gZ2FpbiAqICpzb3VyY2VMKys7IFwKLSAgICAgICAgZmxvYXQgc3VtTCA9IERlbm9ybWFs
RGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybygqZGVzdGluYXRpb25MICsgc2NhbGVk
KTsgXAotICAgICAgICBmbG9hdCBzdW1SID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1h
bEZsb2F0VG9aZXJvKCpkZXN0aW5hdGlvblIgKyBzY2FsZWQpOyBcCi0gICAgICAgICpkZXN0aW5h
dGlvbkwrKyA9IHN1bUw7IFwKLSAgICAgICAgKmRlc3RpbmF0aW9uUisrID0gc3VtUjsgXAotICAg
IH0KLQotI2RlZmluZSBNT05PMlNURVJFT19TVU1fViBcCi0gICAgeyBcCi0gICAgICAgIHZzbWEo
c291cmNlTCwgMSwgJmdhaW4sIGRlc3RpbmF0aW9uTCwgMSwgZnJhbWVzVG9Qcm9jZXNzIC0gayk7
IFwKLSAgICAgICAgdnNtYShzb3VyY2VMLCAxLCAmZ2FpbiwgZGVzdGluYXRpb25SLCAxLCBmcmFt
ZXNUb1Byb2Nlc3MgLSBrKTsgXAotICAgIH0KLSAgICAKLSNkZWZpbmUgTU9OT19TVU0gXAotICAg
IHsgXAotICAgICAgICBmbG9hdCBzdW0gPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFs
RmxvYXRUb1plcm8oKmRlc3RpbmF0aW9uTCArIGdhaW4gKiAqc291cmNlTCsrKTsgXAotICAgICAg
ICAqZGVzdGluYXRpb25MKysgPSBzdW07IFwKLSAgICB9Ci0KLSNkZWZpbmUgTU9OT19TVU1fViBc
Ci0gICAgeyBcCi0gICAgICAgIHZzbWEoc291cmNlTCwgMSwgJmdhaW4sIGRlc3RpbmF0aW9uTCwg
MSwgZnJhbWVzVG9Qcm9jZXNzIC0gayk7IFwKLSAgICB9IAotCi0jZGVmaW5lIFNURVJFT19OT19T
VU0gXAotICAgIHsgXAotICAgICAgICBmbG9hdCBzYW1wbGVMID0gKnNvdXJjZUwrKzsgXAotICAg
ICAgICBmbG9hdCBzYW1wbGVSID0gKnNvdXJjZVIrKzsgXAotICAgICAgICAqZGVzdGluYXRpb25M
KysgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2FpbiAqIHNh
bXBsZUwpOyBcCi0gICAgICAgICpkZXN0aW5hdGlvblIrKyA9IERlbm9ybWFsRGlzYWJsZXI6OmZs
dXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluICogc2FtcGxlUik7IFwKK3ZvaWQgQXVkaW9CdXM6
OmNvcHlXaXRoR2FpbkZyb20oY29uc3QgQXVkaW9CdXMgJnNvdXJjZUJ1cywgZmxvYXQqIGxhc3RN
aXhHYWluLCBmbG9hdCB0YXJnZXRHYWluKQoreworICAgIGlmICghdG9wb2xvZ3lNYXRjaGVzKHNv
dXJjZUJ1cykpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHplcm8o
KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotI2RlZmluZSBTVEVSRU9fTk9fU1VNX1YgXAot
ICAgIHsgXAotICAgICAgICB2c211bChzb3VyY2VMLCAxLCAmZ2FpbiwgZGVzdGluYXRpb25MLCAx
LCBmcmFtZXNUb1Byb2Nlc3MgLSBrKTsgXAotICAgICAgICB2c211bChzb3VyY2VSLCAxLCAmZ2Fp
biwgZGVzdGluYXRpb25SLCAxLCBmcmFtZXNUb1Byb2Nlc3MgLSBrKTsgXAotICAgIH0KKyAgICB1
bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzID0gdGhpcy0+bnVtYmVyT2ZDaGFubmVscygpOworICAg
IEFTU0VSVChudW1iZXJPZkNoYW5uZWxzIDw9IE1heEJ1c0NoYW5uZWxzKTsKKyAgICBpZiAobnVt
YmVyT2ZDaGFubmVscyA+IE1heEJ1c0NoYW5uZWxzKQorICAgICAgICByZXR1cm47CiAKLS8vIE1v
bm8gLT4gc3RlcmVvIChtaXggZXF1YWxseSBpbnRvIEwgYW5kIFIpCi0vLyBGSVhNRTogUmVhbGx5
IHdlIHNob3VsZCBhcHBseSBhbiBlcXVhbC1wb3dlciBzY2FsaW5nIGZhY3RvciBoZXJlLCBzaW5j
ZSB3ZSdyZSBlZmZlY3RpdmVseSBwYW5uaW5nIGNlbnRlci4uLgotI2RlZmluZSBNT05PMlNURVJF
T19OT19TVU0gXAotICAgIHsgXAotICAgICAgICBmbG9hdCBzYW1wbGUgPSAqc291cmNlTCsrOyBc
Ci0gICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3Jt
YWxGbG9hdFRvWmVybyhnYWluICogc2FtcGxlKTsgXAotICAgICAgICAqZGVzdGluYXRpb25SKysg
PSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2FpbiAqIHNhbXBs
ZSk7IFwKLSAgICB9CisgICAgLy8gSWYgaXQgaXMgY29weWluZyBmcm9tIHRoZSBzYW1lIGJ1cyBh
bmQgbm8gbmVlZCB0byBjaGFuZ2UgZ2FpbiwganVzdCByZXR1cm4uCisgICAgaWYgKHRoaXMgPT0g
JnNvdXJjZUJ1cyAmJiAqbGFzdE1peEdhaW4gPT0gdGFyZ2V0R2FpbiAmJiB0YXJnZXRHYWluID09
IDEpCisgICAgICAgIHJldHVybjsKIAotI2RlZmluZSBNT05PMlNURVJFT19OT19TVU1fViBcCi0g
ICAgeyBcCi0gICAgICAgIHZzbXVsKHNvdXJjZUwsIDEsICZnYWluLCBkZXN0aW5hdGlvbkwsIDEs
IGZyYW1lc1RvUHJvY2VzcyAtIGspOyBcCi0gICAgICAgIHZzbXVsKHNvdXJjZUwsIDEsICZnYWlu
LCBkZXN0aW5hdGlvblIsIDEsIGZyYW1lc1RvUHJvY2VzcyAtIGspOyBcCi0gICAgfQorICAgIEF1
ZGlvQnVzJiBzb3VyY2VCdXNTYWZlID0gY29uc3RfY2FzdDxBdWRpb0J1cyY+KHNvdXJjZUJ1cyk7
CisgICAgY29uc3QgZmxvYXQqIHNvdXJjZXNbTWF4QnVzQ2hhbm5lbHNdOworICAgIGZsb2F0KiBk
ZXN0aW5hdGlvbnNbTWF4QnVzQ2hhbm5lbHNdOwogCi0jZGVmaW5lIE1PTk9fTk9fU1VNIFwKLSAg
ICB7IFwKLSAgICAgICAgZmxvYXQgc2FtcGxlTCA9ICpzb3VyY2VMKys7IFwKLSAgICAgICAgKmRl
c3RpbmF0aW9uTCsrID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJv
KGdhaW4gKiBzYW1wbGVMKTsgXAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJP
ZkNoYW5uZWxzOyArK2kpIHsKKyAgICAgICAgc291cmNlc1tpXSA9IHNvdXJjZUJ1c1NhZmUuY2hh
bm5lbChpKS0+ZGF0YSgpOworICAgICAgICBkZXN0aW5hdGlvbnNbaV0gPSBjaGFubmVsKGkpLT5t
dXRhYmxlRGF0YSgpOwogICAgIH0KIAotI2RlZmluZSBNT05PX05PX1NVTV9WIFwKLSAgICB7IFwK
LSAgICAgICAgdnNtdWwoc291cmNlTCwgMSwgJmdhaW4sIGRlc3RpbmF0aW9uTCwgMSwgZnJhbWVz
VG9Qcm9jZXNzIC0gayk7IFwKLSAgICB9IAotCi12b2lkIEF1ZGlvQnVzOjpwcm9jZXNzV2l0aEdh
aW5Gcm9tTW9ub1N0ZXJlbyhjb25zdCBBdWRpb0J1cyAmc291cmNlQnVzLCBmbG9hdCogbGFzdE1p
eEdhaW4sIGZsb2F0IHRhcmdldEdhaW4sIGJvb2wgc3VtVG9CdXMpCi17CiAgICAgLy8gV2UgZG9u
J3Qgd2FudCB0byBzdWRkZW5seSBjaGFuZ2UgdGhlIGdhaW4gZnJvbSBtaXhpbmcgb25lIHRpbWUg
c2xpY2UgdG8gdGhlIG5leHQsCiAgICAgLy8gc28gd2UgImRlLXppcHBlciIgYnkgc2xvd2x5IGNo
YW5naW5nIHRoZSBnYWluIGVhY2ggc2FtcGxlLWZyYW1lIHVudGlsIHdlJ3ZlIGFjaGlldmVkIHRo
ZSB0YXJnZXQgZ2Fpbi4KICAgICAKQEAgLTQxNywxOCArMzQ5LDggQEAgdm9pZCBBdWRpb0J1czo6
cHJvY2Vzc1dpdGhHYWluRnJvbU1vbm9TdGVyZW8oY29uc3QgQXVkaW9CdXMgJnNvdXJjZUJ1cywg
ZmxvYXQqIGwKICAgICBmbG9hdCBnYWluID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1faXNGaXJzdFRp
bWUgPyB0b3RhbERlc2lyZWRHYWluIDogKmxhc3RNaXhHYWluKTsKICAgICBtX2lzRmlyc3RUaW1l
ID0gZmFsc2U7CiAKLSAgICBpbnQgbnVtYmVyT2ZTb3VyY2VDaGFubmVscyA9IHNvdXJjZUJ1cy5u
dW1iZXJPZkNoYW5uZWxzKCk7Ci0gICAgaW50IG51bWJlck9mRGVzdGluYXRpb25DaGFubmVscyA9
IG51bWJlck9mQ2hhbm5lbHMoKTsKLQotICAgIEF1ZGlvQnVzJiBzb3VyY2VCdXNTYWZlID0gY29u
c3RfY2FzdDxBdWRpb0J1cyY+KHNvdXJjZUJ1cyk7Ci0gICAgY29uc3QgZmxvYXQqIHNvdXJjZUwg
PSBzb3VyY2VCdXNTYWZlLmNoYW5uZWxCeVR5cGUoQ2hhbm5lbExlZnQpLT5kYXRhKCk7Ci0gICAg
Y29uc3QgZmxvYXQqIHNvdXJjZVIgPSBudW1iZXJPZlNvdXJjZUNoYW5uZWxzID4gMSA/IHNvdXJj
ZUJ1c1NhZmUuY2hhbm5lbEJ5VHlwZShDaGFubmVsUmlnaHQpLT5kYXRhKCkgOiAwOwotCi0gICAg
ZmxvYXQqIGRlc3RpbmF0aW9uTCA9IGNoYW5uZWxCeVR5cGUoQ2hhbm5lbExlZnQpLT5tdXRhYmxl
RGF0YSgpOwotICAgIGZsb2F0KiBkZXN0aW5hdGlvblIgPSBudW1iZXJPZkRlc3RpbmF0aW9uQ2hh
bm5lbHMgPiAxID8gY2hhbm5lbEJ5VHlwZShDaGFubmVsUmlnaHQpLT5tdXRhYmxlRGF0YSgpIDog
MDsKLQogICAgIGNvbnN0IGZsb2F0IERlemlwcGVyUmF0ZSA9IDAuMDA1ZjsKLSAgICBpbnQgZnJh
bWVzVG9Qcm9jZXNzID0gbGVuZ3RoKCk7CisgICAgdW5zaWduZWQgZnJhbWVzVG9Qcm9jZXNzID0g
bGVuZ3RoKCk7CiAKICAgICAvLyBJZiB0aGUgZ2FpbiBpcyB3aXRoaW4gZXBzaWxvbiBvZiB0b3Rh
bERlc2lyZWRHYWluLCB3ZSBjYW4gc2tpcCBkZXppcHBlcmluZy4gCiAgICAgLy8gRklYTUU6IHRo
aXMgdmFsdWUgbWF5IG5lZWQgdHdlYWtpbmcuCkBAIC00MzYsNjYgKzM1OCw0MSBAQCB2b2lkIEF1
ZGlvQnVzOjpwcm9jZXNzV2l0aEdhaW5Gcm9tTW9ub1N0ZXJlbyhjb25zdCBBdWRpb0J1cyAmc291
cmNlQnVzLCBmbG9hdCogbAogICAgIGZsb2F0IGdhaW5EaWZmID0gZmFicyh0b3RhbERlc2lyZWRH
YWluIC0gZ2Fpbik7CiAKICAgICAvLyBOdW1iZXIgb2YgZnJhbWVzIHRvIGRlLXppcHBlciBiZWZv
cmUgd2UgYXJlIGNsb3NlIGVub3VnaCB0byB0aGUgdGFyZ2V0IGdhaW4uCi0gICAgaW50IGZyYW1l
c1RvRGV6aXBwZXIgPSAoZ2FpbkRpZmYgPCBlcHNpbG9uKSA/IDAgOiBmcmFtZXNUb1Byb2Nlc3M7
IAotCi0gICAgaW50IGsgPSAwOwotCi0gICAgaWYgKHN1bVRvQnVzKSB7Ci0gICAgICAgIC8vIFN1
bSB0byBvdXIgYnVzCi0gICAgICAgIGlmIChzb3VyY2VSICYmIGRlc3RpbmF0aW9uUikgewotICAg
ICAgICAgICAgLy8gU3RlcmVvCi0gICAgICAgICAgICBQUk9DRVNTX1dJVEhfR0FJTihTVEVSRU9f
U1VNKQotICAgICAgICB9IGVsc2UgaWYgKGRlc3RpbmF0aW9uUikgewotICAgICAgICAgICAgLy8g
TW9ubyAtPiBzdGVyZW8gCi0gICAgICAgICAgICBQUk9DRVNTX1dJVEhfR0FJTihNT05PMlNURVJF
T19TVU0pCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBNb25vCi0gICAgICAgICAg
ICBQUk9DRVNTX1dJVEhfR0FJTihNT05PX1NVTSkKKyAgICAvLyBGSVhNRTogZnJhbWVzVG9EZXpp
cHBlciBjb3VsZCBiZSBzbWFsbGVyIHdoZW4gdGFyZ2V0IGdhaW4gaXMgY2xvc2UgZW5vdWdoIHdp
dGhpbiB0aGlzIHByb2Nlc3MgbG9vcC4KKyAgICB1bnNpZ25lZCBmcmFtZXNUb0RlemlwcGVyID0g
KGdhaW5EaWZmIDwgZXBzaWxvbikgPyAwIDogZnJhbWVzVG9Qcm9jZXNzOyAKKworICAgIGlmIChm
cmFtZXNUb0RlemlwcGVyKSB7CisgICAgICAgIGlmICghbV9kZXppcHBlckdhaW5WYWx1ZXMuZ2V0
KCkgfHwgbV9kZXppcHBlckdhaW5WYWx1ZXMtPnNpemUoKSA8IGZyYW1lc1RvRGV6aXBwZXIpCisg
ICAgICAgICAgICBtX2RlemlwcGVyR2FpblZhbHVlcyA9IGFkb3B0UHRyKG5ldyBBdWRpb0Zsb2F0
QXJyYXkoZnJhbWVzVG9EZXppcHBlcikpOworCisgICAgICAgIGZsb2F0KiBnYWluVmFsdWVzID0g
bV9kZXppcHBlckdhaW5WYWx1ZXMtPmRhdGEoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGZyYW1lc1RvRGV6aXBwZXI7ICsraSkgeworICAgICAgICAgICAgZ2FpbiArPSAodG90
YWxEZXNpcmVkR2FpbiAtIGdhaW4pICogRGV6aXBwZXJSYXRlOworICAgICAgICAKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBJZiB3ZSBhcmUgY2xldmVyIGVub3VnaCBpbiBjYWxjdWxhdGluZyB0aGUg
ZnJhbWVzVG9EZXppcHBlciB2YWx1ZSwgd2UgY2FuIHByb2JhYmx5IGdldAorICAgICAgICAgICAg
Ly8gcmlkIG9mIHRoaXMgRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJv
KCkgY2FsbC4KKyAgICAgICAgICAgIGdhaW4gPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9y
bWFsRmxvYXRUb1plcm8oZ2Fpbik7CisgICAgICAgICAgICAqZ2FpblZhbHVlcysrID0gZ2FpbjsK
ICAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFByb2Nlc3MgZGlyZWN0bHkgKHdp
dGhvdXQgc3VtbWluZykgdG8gb3VyIGJ1cwotICAgICAgICBpZiAoc291cmNlUiAmJiBkZXN0aW5h
dGlvblIpIHsKLSAgICAgICAgICAgIC8vIFN0ZXJlbwotICAgICAgICAgICAgUFJPQ0VTU19XSVRI
X0dBSU4oU1RFUkVPX05PX1NVTSkKLSAgICAgICAgfSBlbHNlIGlmIChkZXN0aW5hdGlvblIpIHsK
LSAgICAgICAgICAgIC8vIE1vbm8gLT4gc3RlcmVvIAotICAgICAgICAgICAgUFJPQ0VTU19XSVRI
X0dBSU4oTU9OTzJTVEVSRU9fTk9fU1VNKQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Ly8gTW9ubwotICAgICAgICAgICAgUFJPQ0VTU19XSVRIX0dBSU4oTU9OT19OT19TVU0pCisKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBjaGFubmVsSW5kZXggPSAwOyBjaGFubmVsSW5kZXggPCBudW1i
ZXJPZkNoYW5uZWxzOyArK2NoYW5uZWxJbmRleCkgeworICAgICAgICAgICAgdm11bChzb3VyY2Vz
W2NoYW5uZWxJbmRleF0sIDEsIG1fZGV6aXBwZXJHYWluVmFsdWVzLT5kYXRhKCksIDEsIGRlc3Rp
bmF0aW9uc1tjaGFubmVsSW5kZXhdLCAxLCBmcmFtZXNUb0RlemlwcGVyKTsKKyAgICAgICAgICAg
IHNvdXJjZXNbY2hhbm5lbEluZGV4XSArPSBmcmFtZXNUb0RlemlwcGVyOworICAgICAgICAgICAg
ZGVzdGluYXRpb25zW2NoYW5uZWxJbmRleF0gKz0gZnJhbWVzVG9EZXppcHBlcjsKICAgICAgICAg
fQorICAgIH0gZWxzZQorICAgICAgICBnYWluID0gdG90YWxEZXNpcmVkR2FpbjsKKworICAgIC8v
IEFwcGx5IGNvbnN0YW50IGdhaW4gYWZ0ZXIgZGUtemlwcGVyaW5nIGhhcyBjb252ZXJnZWQgb24g
dGFyZ2V0IGdhaW4uCisgICAgaWYgKGZyYW1lc1RvRGV6aXBwZXIgPCBmcmFtZXNUb1Byb2Nlc3Mp
IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBjaGFubmVsSW5kZXggPSAwOyBjaGFubmVsSW5kZXgg
PCBudW1iZXJPZkNoYW5uZWxzOyArK2NoYW5uZWxJbmRleCkKKyAgICAgICAgICAgIHZzbXVsKHNv
dXJjZXNbY2hhbm5lbEluZGV4XSwgMSwgJmdhaW4sIGRlc3RpbmF0aW9uc1tjaGFubmVsSW5kZXhd
LCAxLCBmcmFtZXNUb1Byb2Nlc3MgLSBmcmFtZXNUb0RlemlwcGVyKTsKICAgICB9CiAKICAgICAv
LyBTYXZlIHRoZSB0YXJnZXQgZ2FpbiBhcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIG5leHQgdGlt
ZSBhcm91bmQuCiAgICAgKmxhc3RNaXhHYWluID0gZ2FpbjsKIH0KIAotdm9pZCBBdWRpb0J1czo6
cHJvY2Vzc1dpdGhHYWluRnJvbShjb25zdCBBdWRpb0J1cyAmc291cmNlQnVzLCBmbG9hdCogbGFz
dE1peEdhaW4sIGZsb2F0IHRhcmdldEdhaW4sIGJvb2wgc3VtVG9CdXMpCi17Ci0gICAgLy8gTWFr
ZSBzdXJlIHdlJ3JlIHN1bW1pbmcgZnJvbSBzYW1lIHR5cGUgb2YgYnVzLgotICAgIC8vIFdlICph
cmUqIGFibGUgdG8gc3VtIGZyb20gbW9ubyAtPiBzdGVyZW8KLSAgICBpZiAoc291cmNlQnVzLm51
bWJlck9mQ2hhbm5lbHMoKSAhPSAxICYmICF0b3BvbG9neU1hdGNoZXMoc291cmNlQnVzKSkgewot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAvLyBJZiBpdCBpcyBjb3B5aW5nIGZyb20gdGhlIHNhbWUgYnVzIGFuZCBubyBuZWVkIHRvIGNo
YW5nZSBnYWluLCBqdXN0IHJldHVybgotICAgIGlmICghc3VtVG9CdXMgJiYgdGhpcyA9PSAmc291
cmNlQnVzICYmICpsYXN0TWl4R2FpbiA9PSB0YXJnZXRHYWluICYmIHRhcmdldEdhaW4gPT0gMS4w
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBEaXNwYXRjaCBmb3IgZGlmZmVyZW50IGNoYW5u
ZWwgbGF5b3V0cwotICAgIHN3aXRjaCAobnVtYmVyT2ZDaGFubmVscygpKSB7Ci0gICAgY2FzZSAx
OiAvLyBtb25vCi0gICAgY2FzZSAyOiAvLyBzdGVyZW8KLSAgICAgICAgcHJvY2Vzc1dpdGhHYWlu
RnJvbU1vbm9TdGVyZW8oc291cmNlQnVzLCBsYXN0TWl4R2FpbiwgdGFyZ2V0R2Fpbiwgc3VtVG9C
dXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDQ6IC8vIEZJWE1FOiBpbXBsZW1lbnQgcXVh
ZAotICAgIGNhc2UgNTogLy8gRklYTUU6IGltcGxlbWVudCA1LjAKLSAgICBkZWZhdWx0OgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCiB2
b2lkIEF1ZGlvQnVzOjpjb3B5V2l0aFNhbXBsZUFjY3VyYXRlR2FpblZhbHVlc0Zyb20oY29uc3Qg
QXVkaW9CdXMgJnNvdXJjZUJ1cywgZmxvYXQqIGdhaW5WYWx1ZXMsIHVuc2lnbmVkIG51bWJlck9m
R2FpblZhbHVlcykKIHsKICAgICAvLyBNYWtlIHN1cmUgd2UncmUgcHJvY2Vzc2luZyBmcm9tIHRo
ZSBzYW1lIHR5cGUgb2YgYnVzLgpAQCAtNTIwLDE2ICs0MTcsNiBAQCB2b2lkIEF1ZGlvQnVzOjpj
b3B5V2l0aFNhbXBsZUFjY3VyYXRlR2FpblZhbHVlc0Zyb20oY29uc3QgQXVkaW9CdXMgJnNvdXJj
ZUJ1cywgZgogICAgIH0KIH0KIAotdm9pZCBBdWRpb0J1czo6Y29weVdpdGhHYWluRnJvbShjb25z
dCBBdWRpb0J1cyAmc291cmNlQnVzLCBmbG9hdCogbGFzdE1peEdhaW4sIGZsb2F0IHRhcmdldEdh
aW4pCi17Ci0gICAgcHJvY2Vzc1dpdGhHYWluRnJvbShzb3VyY2VCdXMsIGxhc3RNaXhHYWluLCB0
YXJnZXRHYWluLCBmYWxzZSk7Ci19Ci0KLXZvaWQgQXVkaW9CdXM6OnN1bVdpdGhHYWluRnJvbShj
b25zdCBBdWRpb0J1cyAmc291cmNlQnVzLCBmbG9hdCogbGFzdE1peEdhaW4sIGZsb2F0IHRhcmdl
dEdhaW4pCi17Ci0gICAgcHJvY2Vzc1dpdGhHYWluRnJvbShzb3VyY2VCdXMsIGxhc3RNaXhHYWlu
LCB0YXJnZXRHYWluLCB0cnVlKTsKLX0KLQogUGFzc093blB0cjxBdWRpb0J1cz4gQXVkaW9CdXM6
OmNyZWF0ZUJ5U2FtcGxlUmF0ZUNvbnZlcnRpbmcoY29uc3QgQXVkaW9CdXMqIHNvdXJjZUJ1cywg
Ym9vbCBtaXhUb01vbm8sIGRvdWJsZSBuZXdTYW1wbGVSYXRlKQogewogICAgIC8vIHNvdXJjZUJ1
cydzIHNhbXBsZS1yYXRlIG11c3QgYmUga25vd24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vQXVkaW9CdXMuaAppbmRleCBiM2RhMGY0NTFkMTgxNDNhN2IwMWY0Y2RkMjA5NzcwMGQ4ZDE1
OWMwLi45ZDExZDUxZmU1NmUwOWEzZTE5ZTQ3ZmVhMDMwY2Y2YzViZTY3MWI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvQnVzLmgKQEAgLTEwMywxMCArMTAzLDYgQEAgcHVi
bGljOgogICAgIC8vIFNjYWxlcyBhbGwgc2FtcGxlcyBieSB0aGUgc2FtZSBhbW91bnQuCiAgICAg
dm9pZCBzY2FsZShmbG9hdCBzY2FsZSk7CiAKLSAgICAvLyBNYXN0ZXIgZ2FpbiBmb3IgdGhpcyBi
dXMgLSB1c2VkIHdpdGggc3VtV2l0aEdhaW5Gcm9tKCkgYmVsb3cKLSAgICB2b2lkIHNldEdhaW4o
ZmxvYXQgZ2FpbikgeyBtX2J1c0dhaW4gPSBnYWluOyB9Ci0gICAgZmxvYXQgZ2FpbigpIGNvbnN0
IHsgcmV0dXJuIG1fYnVzR2FpbjsgfQotCiAgICAgdm9pZCByZXNldCgpIHsgbV9pc0ZpcnN0VGlt
ZSA9IHRydWU7IH0gLy8gZm9yIGRlLXppcHBlcmluZwogCiAgICAgLy8gQXNzdW1pbmcgc291cmNl
QnVzIGhhcyB0aGUgc2FtZSB0b3BvbG9neSwgY29waWVzIHNhbXBsZSBkYXRhIGZyb20gZWFjaCBj
aGFubmVsIG9mIHNvdXJjZUJ1cyB0byBvdXIgY29ycmVzcG9uZGluZyBjaGFubmVsLgpAQCAtMTE2
LDEyICsxMTIsMTEgQEAgcHVibGljOgogICAgIC8vIE91ciBvd24gaW50ZXJuYWwgZ2FpbiBtX2J1
c0dhaW4gaXMgaWdub3JlZC4KICAgICB2b2lkIHN1bUZyb20oY29uc3QgQXVkaW9CdXMgJnNvdXJj
ZUJ1cyk7CiAKLSAgICAvLyBDb3B5IG9yIHN1bSBlYWNoIGNoYW5uZWwgZnJvbSBzb3VyY2VCdXMg
aW50byBvdXIgY29ycmVzcG9uZGluZyBjaGFubmVsLgorICAgIC8vIENvcHkgZWFjaCBjaGFubmVs
IGZyb20gc291cmNlQnVzIGludG8gb3VyIGNvcnJlc3BvbmRpbmcgY2hhbm5lbC4KICAgICAvLyBX
ZSBzY2FsZSBieSB0YXJnZXRHYWluIChhbmQgb3VyIG93biBpbnRlcm5hbCBnYWluIG1fYnVzR2Fp
biksIHBlcmZvcm1pbmcgImRlLXppcHBlcmluZyIgdG8gc21vb3RobHkgY2hhbmdlIGZyb20gKmxh
c3RNaXhHYWluIHRvICh0YXJnZXRHYWluKm1fYnVzR2FpbikuCi0gICAgLy8gVGhlIGNhbGxlciBp
cyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCBsYXN0TWl4R2FpbiB0byBwb2ludCB0byBzdG9y
YWdlIHdoaWNoIGlzIHVuaXF1ZSBmb3IgZXZlcnkgInN0cmVhbSIgd2hpY2ggd2lsbCBiZSBzdW1t
ZWQgdG8gdGhpcyBidXMuCisgICAgLy8gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3Igc2V0
dGluZyB1cCBsYXN0TWl4R2FpbiB0byBwb2ludCB0byBzdG9yYWdlIHdoaWNoIGlzIHVuaXF1ZSBm
b3IgZXZlcnkgInN0cmVhbSIgd2hpY2ggd2lsbCBiZSBhcHBsaWVkIHRvIHRoaXMgYnVzLgogICAg
IC8vIFRoaXMgcmVwcmVzZW50cyB0aGUgZGV6aXBwZXJpbmcgbWVtb3J5LgogICAgIHZvaWQgY29w
eVdpdGhHYWluRnJvbShjb25zdCBBdWRpb0J1cyAmc291cmNlQnVzLCBmbG9hdCogbGFzdE1peEdh
aW4sIGZsb2F0IHRhcmdldEdhaW4pOwotICAgIHZvaWQgc3VtV2l0aEdhaW5Gcm9tKGNvbnN0IEF1
ZGlvQnVzICZzb3VyY2VCdXMsIGZsb2F0KiBsYXN0TWl4R2FpbiwgZmxvYXQgdGFyZ2V0R2Fpbik7
CiAKICAgICAvLyBDb3BpZXMgdGhlIHNvdXJjZUJ1cyBieSBzY2FsaW5nIHdpdGggc2FtcGxlLWFj
Y3VyYXRlIGdhaW4gdmFsdWVzLgogICAgIHZvaWQgY29weVdpdGhTYW1wbGVBY2N1cmF0ZUdhaW5W
YWx1ZXNGcm9tKGNvbnN0IEF1ZGlvQnVzICZzb3VyY2VCdXMsIGZsb2F0KiBnYWluVmFsdWVzLCB1
bnNpZ25lZCBudW1iZXJPZkdhaW5WYWx1ZXMpOwpAQCAtMTM3LDE2ICsxMzIsMTEgQEAgcHVibGlj
OgogcHJvdGVjdGVkOgogICAgIEF1ZGlvQnVzKCkgeyB9OwogCi0gICAgdm9pZCBwcm9jZXNzV2l0
aEdhaW5Gcm9tKGNvbnN0IEF1ZGlvQnVzICZzb3VyY2VCdXMsIGZsb2F0KiBsYXN0TWl4R2Fpbiwg
ZmxvYXQgdGFyZ2V0R2FpbiwgYm9vbCBzdW1Ub0J1cyk7Ci0gICAgdm9pZCBwcm9jZXNzV2l0aEdh
aW5Gcm9tTW9ub1N0ZXJlbyhjb25zdCBBdWRpb0J1cyAmc291cmNlQnVzLCBmbG9hdCogbGFzdE1p
eEdhaW4sIGZsb2F0IHRhcmdldEdhaW4sIGJvb2wgc3VtVG9CdXMpOwotCiAgICAgc2l6ZV90IG1f
bGVuZ3RoOwotCiAgICAgVmVjdG9yPE93blB0cjxBdWRpb0NoYW5uZWw+ID4gbV9jaGFubmVsczsK
LQogICAgIGludCBtX2xheW91dDsKLQogICAgIGZsb2F0IG1fYnVzR2FpbjsKKyAgICBPd25QdHI8
QXVkaW9GbG9hdEFycmF5PiBtX2RlemlwcGVyR2FpblZhbHVlczsKICAgICBib29sIG1faXNGaXJz
dFRpbWU7CiAgICAgZmxvYXQgbV9zYW1wbGVSYXRlOyAvLyAwLjAgaWYgdW5rbm93biBvciBOL0EK
IH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137830</attachid>
            <date>2012-04-18 20:20:32 -0700</date>
            <delta_ts>2012-05-09 19:32:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80675-20120419112628.patch</filename>
            <type>text/plain</type>
            <size>14608</size>
            <attacher name="Raymond">rgbbones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0NTcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODgwZjNmOGQ4MGMxYzJm
NzhiOTc4Yzc0YjkzZDkxYjNiNTFhMTdkZC4uYTVkYWNkNWUxNmZlMDEzZGIwZDI5OTQzYTFhZWQw
MTg2NWJhZmIwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTA0LTE4ICBSYXlt
b25kIExpdSAgPHJheW1vbmQubGl1QGludGVsLmNvbT4KKworICAgICAgICBBZGQgbXVsdGktY2hh
bm5lbHMgc3VwcG9ydCBmb3IgQ29weVdpdGhHYWluRnJvbSBpbiBBdWRpb0J1cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA2NzUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1
ZGlvQnVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9C
dXM6OkF1ZGlvQnVzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVzOjpjb3B5V2l0aEdhaW5G
cm9tKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5oOgorICAgICAgICAoQXVk
aW9CdXMpOgorCiAyMDEyLTA0LTE4ICBKdXN0aW4gU2NodWggIDxqc2NodWhAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFdpbjggYnVpbGRzIHVzdWFsbHkgZmFpbCBkdWUgdG8gY3lnd2luIHJlYmFz
aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5jcHAKaW5kZXggYjQ4
NmEzOGI0Mzk3MGI2ZmE1MDVkZTNhMzdjYjFjMDM4OTY1YTY3OS4uNThhNWUzNDBkM2VjNWNmMTlj
MDc2NGQ1MzJiZjAxMzU4M2ViMTJiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vQXVkaW9CdXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0F1ZGlvQnVzLmNwcApAQCAtNDUsMTMgKzQ1LDE5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHVzaW5nIG5hbWVzcGFjZSBWZWN0b3JNYXRoOwotICAgIAorCitjb25zdCB1bnNpZ25lZCBNYXhC
dXNDaGFubmVscyA9IDMyOworCiBBdWRpb0J1czo6QXVkaW9CdXModW5zaWduZWQgbnVtYmVyT2ZD
aGFubmVscywgc2l6ZV90IGxlbmd0aCwgYm9vbCBhbGxvY2F0ZSkKICAgICA6IG1fbGVuZ3RoKGxl
bmd0aCkKICAgICAsIG1fYnVzR2FpbigxKQogICAgICwgbV9pc0ZpcnN0VGltZSh0cnVlKQogICAg
ICwgbV9zYW1wbGVSYXRlKDApCiB7CisgICAgQVNTRVJUKG51bWJlck9mQ2hhbm5lbHMgPD0gTWF4
QnVzQ2hhbm5lbHMpOworICAgIGlmIChudW1iZXJPZkNoYW5uZWxzID4gTWF4QnVzQ2hhbm5lbHMp
CisgICAgICAgIHJldHVybjsKKwogICAgIG1fY2hhbm5lbHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShudW1iZXJPZkNoYW5uZWxzKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1i
ZXJPZkNoYW5uZWxzOyArK2kpIHsKQEAgLTMwNywxMDYgKzMxMywzNyBAQCB2b2lkIEF1ZGlvQnVz
OjpzdW1Gcm9tKGNvbnN0IEF1ZGlvQnVzICZzb3VyY2VCdXMpCiAgICAgfQogfQogCi0vLyBTbG93
bHkgY2hhbmdlIGdhaW4gdG8gZGVzaXJlZCBnYWluLgotI2RlZmluZSBHQUlOX0RFWklQUEVSIFwK
LSAgICBnYWluICs9ICh0b3RhbERlc2lyZWRHYWluIC0gZ2FpbikgKiBEZXppcHBlclJhdGU7IFwK
LSAgICBnYWluID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdh
aW4pOwotCi0vLyBEZS16aXBwZXIgZm9yIHRoZSBmaXJzdCBmcmFtZXNUb0RlemlwcGVyIGZyYW1l
cyBhbmQgc2tpcCBkZS16aXBwZXJpbmcgZm9yIHRoZSByZW1haW5pbmcgZnJhbWVzCi0vLyBiZWNh
dXNlIHRoZSBnYWluIGlzIGNsb3NlIGVub3VnaCB0byB0aGUgdGFyZ2V0IGdhaW4uCi0jZGVmaW5l
IFBST0NFU1NfV0lUSF9HQUlOKE9QKSBcCi0gICAgZm9yIChrID0gMDsgayA8IGZyYW1lc1RvRGV6
aXBwZXI7ICsraykgeyBcCi0gICAgICAgIE9QIFwKLSAgICAgICAgR0FJTl9ERVpJUFBFUiBcCi0g
ICAgfSBcCi0gICAgaWYgKCFmcmFtZXNUb0RlemlwcGVyKSBcCi0gICAgICAgIGdhaW4gPSB0b3Rh
bERlc2lyZWRHYWluOyBcCi0gICAgT1AjI19WIAotCi0jZGVmaW5lIFNURVJFT19TVU0gXAotICAg
IHsgXAotICAgICAgICBmbG9hdCBzdW1MID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1h
bEZsb2F0VG9aZXJvKCpkZXN0aW5hdGlvbkwgKyBnYWluICogKnNvdXJjZUwrKyk7IFwKLSAgICAg
ICAgZmxvYXQgc3VtUiA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVy
bygqZGVzdGluYXRpb25SICsgZ2FpbiAqICpzb3VyY2VSKyspOyBcCi0gICAgICAgICpkZXN0aW5h
dGlvbkwrKyA9IHN1bUw7IFwKLSAgICAgICAgKmRlc3RpbmF0aW9uUisrID0gc3VtUjsgXAotICAg
IH0KLQotI2RlZmluZSBTVEVSRU9fU1VNX1YgXAotICAgIHsgXAotICAgICAgICB2c21hKHNvdXJj
ZUwsIDEsICZnYWluLCBkZXN0aW5hdGlvbkwsIDEsIGZyYW1lc1RvUHJvY2VzcyAtIGspOyBcCi0g
ICAgICAgIHZzbWEoc291cmNlUiwgMSwgJmdhaW4sIGRlc3RpbmF0aW9uUiwgMSwgZnJhbWVzVG9Q
cm9jZXNzIC0gayk7IFwKLSAgICB9Ci0KLS8vIE1vbm8gLT4gc3RlcmVvIChtaXggZXF1YWxseSBp
bnRvIEwgYW5kIFIpCi0vLyBGSVhNRTogUmVhbGx5IHdlIHNob3VsZCBhcHBseSBhbiBlcXVhbC1w
b3dlciBzY2FsaW5nIGZhY3RvciBoZXJlLCBzaW5jZSB3ZSdyZSBlZmZlY3RpdmVseSBwYW5uaW5n
IGNlbnRlci4uLgotI2RlZmluZSBNT05PMlNURVJFT19TVU0gXAotICAgIHsgXAotICAgICAgICBm
bG9hdCBzY2FsZWQgPSBnYWluICogKnNvdXJjZUwrKzsgXAotICAgICAgICBmbG9hdCBzdW1MID0g
RGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKCpkZXN0aW5hdGlvbkwg
KyBzY2FsZWQpOyBcCi0gICAgICAgIGZsb2F0IHN1bVIgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVz
aERlbm9ybWFsRmxvYXRUb1plcm8oKmRlc3RpbmF0aW9uUiArIHNjYWxlZCk7IFwKLSAgICAgICAg
KmRlc3RpbmF0aW9uTCsrID0gc3VtTDsgXAotICAgICAgICAqZGVzdGluYXRpb25SKysgPSBzdW1S
OyBcCi0gICAgfQotCi0jZGVmaW5lIE1PTk8yU1RFUkVPX1NVTV9WIFwKLSAgICB7IFwKLSAgICAg
ICAgdnNtYShzb3VyY2VMLCAxLCAmZ2FpbiwgZGVzdGluYXRpb25MLCAxLCBmcmFtZXNUb1Byb2Nl
c3MgLSBrKTsgXAotICAgICAgICB2c21hKHNvdXJjZUwsIDEsICZnYWluLCBkZXN0aW5hdGlvblIs
IDEsIGZyYW1lc1RvUHJvY2VzcyAtIGspOyBcCi0gICAgfQotICAgIAotI2RlZmluZSBNT05PX1NV
TSBcCi0gICAgeyBcCi0gICAgICAgIGZsb2F0IHN1bSA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNo
RGVub3JtYWxGbG9hdFRvWmVybygqZGVzdGluYXRpb25MICsgZ2FpbiAqICpzb3VyY2VMKyspOyBc
Ci0gICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IHN1bTsgXAordm9pZCBBdWRpb0J1czo6Y29weVdp
dGhHYWluRnJvbShjb25zdCBBdWRpb0J1cyAmc291cmNlQnVzLCBmbG9hdCogbGFzdE1peEdhaW4s
IGZsb2F0IHRhcmdldEdhaW4pCit7CisgICAgaWYgKCF0b3BvbG9neU1hdGNoZXMoc291cmNlQnVz
KSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgemVybygpOworICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0jZGVmaW5lIE1PTk9fU1VNX1YgXAotICAgIHsgXAotICAg
ICAgICB2c21hKHNvdXJjZUwsIDEsICZnYWluLCBkZXN0aW5hdGlvbkwsIDEsIGZyYW1lc1RvUHJv
Y2VzcyAtIGspOyBcCi0gICAgfSAKLQotI2RlZmluZSBTVEVSRU9fTk9fU1VNIFwKLSAgICB7IFwK
LSAgICAgICAgZmxvYXQgc2FtcGxlTCA9ICpzb3VyY2VMKys7IFwKLSAgICAgICAgZmxvYXQgc2Ft
cGxlUiA9ICpzb3VyY2VSKys7IFwKLSAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gRGVub3JtYWxE
aXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4gKiBzYW1wbGVMKTsgXAotICAg
ICAgICAqZGVzdGluYXRpb25SKysgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxv
YXRUb1plcm8oZ2FpbiAqIHNhbXBsZVIpOyBcCisgICAgaWYgKHNvdXJjZUJ1cy5pc1NpbGVudCgp
KSB7CisgICAgICAgIHplcm8oKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotI2RlZmluZSBT
VEVSRU9fTk9fU1VNX1YgXAotICAgIHsgXAotICAgICAgICB2c211bChzb3VyY2VMLCAxLCAmZ2Fp
biwgZGVzdGluYXRpb25MLCAxLCBmcmFtZXNUb1Byb2Nlc3MgLSBrKTsgXAotICAgICAgICB2c211
bChzb3VyY2VSLCAxLCAmZ2FpbiwgZGVzdGluYXRpb25SLCAxLCBmcmFtZXNUb1Byb2Nlc3MgLSBr
KTsgXAotICAgIH0KKyAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzID0gdGhpcy0+bnVtYmVy
T2ZDaGFubmVscygpOworICAgIEFTU0VSVChudW1iZXJPZkNoYW5uZWxzIDw9IE1heEJ1c0NoYW5u
ZWxzKTsKKyAgICBpZiAobnVtYmVyT2ZDaGFubmVscyA+IE1heEJ1c0NoYW5uZWxzKQorICAgICAg
ICByZXR1cm47CiAKLS8vIE1vbm8gLT4gc3RlcmVvIChtaXggZXF1YWxseSBpbnRvIEwgYW5kIFIp
Ci0vLyBGSVhNRTogUmVhbGx5IHdlIHNob3VsZCBhcHBseSBhbiBlcXVhbC1wb3dlciBzY2FsaW5n
IGZhY3RvciBoZXJlLCBzaW5jZSB3ZSdyZSBlZmZlY3RpdmVseSBwYW5uaW5nIGNlbnRlci4uLgot
I2RlZmluZSBNT05PMlNURVJFT19OT19TVU0gXAotICAgIHsgXAotICAgICAgICBmbG9hdCBzYW1w
bGUgPSAqc291cmNlTCsrOyBcCi0gICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IERlbm9ybWFsRGlz
YWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluICogc2FtcGxlKTsgXAotICAgICAg
ICAqZGVzdGluYXRpb25SKysgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRU
b1plcm8oZ2FpbiAqIHNhbXBsZSk7IFwKLSAgICB9CisgICAgLy8gSWYgaXQgaXMgY29weWluZyBm
cm9tIHRoZSBzYW1lIGJ1cyBhbmQgbm8gbmVlZCB0byBjaGFuZ2UgZ2FpbiwganVzdCByZXR1cm4u
CisgICAgaWYgKHRoaXMgPT0gJnNvdXJjZUJ1cyAmJiAqbGFzdE1peEdhaW4gPT0gdGFyZ2V0R2Fp
biAmJiB0YXJnZXRHYWluID09IDEpCisgICAgICAgIHJldHVybjsKIAotI2RlZmluZSBNT05PMlNU
RVJFT19OT19TVU1fViBcCi0gICAgeyBcCi0gICAgICAgIHZzbXVsKHNvdXJjZUwsIDEsICZnYWlu
LCBkZXN0aW5hdGlvbkwsIDEsIGZyYW1lc1RvUHJvY2VzcyAtIGspOyBcCi0gICAgICAgIHZzbXVs
KHNvdXJjZUwsIDEsICZnYWluLCBkZXN0aW5hdGlvblIsIDEsIGZyYW1lc1RvUHJvY2VzcyAtIGsp
OyBcCi0gICAgfQorICAgIEF1ZGlvQnVzJiBzb3VyY2VCdXNTYWZlID0gY29uc3RfY2FzdDxBdWRp
b0J1cyY+KHNvdXJjZUJ1cyk7CisgICAgY29uc3QgZmxvYXQqIHNvdXJjZXNbTWF4QnVzQ2hhbm5l
bHNdOworICAgIGZsb2F0KiBkZXN0aW5hdGlvbnNbTWF4QnVzQ2hhbm5lbHNdOwogCi0jZGVmaW5l
IE1PTk9fTk9fU1VNIFwKLSAgICB7IFwKLSAgICAgICAgZmxvYXQgc2FtcGxlTCA9ICpzb3VyY2VM
Kys7IFwKLSAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hE
ZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4gKiBzYW1wbGVMKTsgXAorICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxzOyArK2kpIHsKKyAgICAgICAgc291cmNlc1tpXSA9
IHNvdXJjZUJ1c1NhZmUuY2hhbm5lbChpKS0+ZGF0YSgpOworICAgICAgICBkZXN0aW5hdGlvbnNb
aV0gPSBjaGFubmVsKGkpLT5tdXRhYmxlRGF0YSgpOwogICAgIH0KIAotI2RlZmluZSBNT05PX05P
X1NVTV9WIFwKLSAgICB7IFwKLSAgICAgICAgdnNtdWwoc291cmNlTCwgMSwgJmdhaW4sIGRlc3Rp
bmF0aW9uTCwgMSwgZnJhbWVzVG9Qcm9jZXNzIC0gayk7IFwKLSAgICB9IAotCi12b2lkIEF1ZGlv
QnVzOjpwcm9jZXNzV2l0aEdhaW5Gcm9tTW9ub1N0ZXJlbyhjb25zdCBBdWRpb0J1cyAmc291cmNl
QnVzLCBmbG9hdCogbGFzdE1peEdhaW4sIGZsb2F0IHRhcmdldEdhaW4sIGJvb2wgc3VtVG9CdXMp
Ci17CiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzdWRkZW5seSBjaGFuZ2UgdGhlIGdhaW4gZnJv
bSBtaXhpbmcgb25lIHRpbWUgc2xpY2UgdG8gdGhlIG5leHQsCiAgICAgLy8gc28gd2UgImRlLXpp
cHBlciIgYnkgc2xvd2x5IGNoYW5naW5nIHRoZSBnYWluIGVhY2ggc2FtcGxlLWZyYW1lIHVudGls
IHdlJ3ZlIGFjaGlldmVkIHRoZSB0YXJnZXQgZ2Fpbi4KICAgICAKQEAgLTQxNywyNCArMzU0LDgg
QEAgdm9pZCBBdWRpb0J1czo6cHJvY2Vzc1dpdGhHYWluRnJvbU1vbm9TdGVyZW8oY29uc3QgQXVk
aW9CdXMgJnNvdXJjZUJ1cywgZmxvYXQqIGwKICAgICBmbG9hdCBnYWluID0gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG1faXNGaXJzdFRpbWUgPyB0b3RhbERlc2lyZWRHYWluIDogKmxhc3RNaXhHYWluKTsK
ICAgICBtX2lzRmlyc3RUaW1lID0gZmFsc2U7CiAKLSAgICBpbnQgbnVtYmVyT2ZTb3VyY2VDaGFu
bmVscyA9IHNvdXJjZUJ1cy5udW1iZXJPZkNoYW5uZWxzKCk7Ci0gICAgaW50IG51bWJlck9mRGVz
dGluYXRpb25DaGFubmVscyA9IG51bWJlck9mQ2hhbm5lbHMoKTsKLQotICAgIEF1ZGlvQnVzJiBz
b3VyY2VCdXNTYWZlID0gY29uc3RfY2FzdDxBdWRpb0J1cyY+KHNvdXJjZUJ1cyk7Ci0gICAgY29u
c3QgZmxvYXQqIHNvdXJjZUwgPSBzb3VyY2VCdXNTYWZlLmNoYW5uZWxCeVR5cGUoQ2hhbm5lbExl
ZnQpLT5kYXRhKCk7Ci0gICAgY29uc3QgZmxvYXQqIHNvdXJjZVIgPSBudW1iZXJPZlNvdXJjZUNo
YW5uZWxzID4gMSA/IHNvdXJjZUJ1c1NhZmUuY2hhbm5lbEJ5VHlwZShDaGFubmVsUmlnaHQpLT5k
YXRhKCkgOiAwOwotCi0gICAgaWYgKHNvdXJjZUJ1c1NhZmUuaXNTaWxlbnQoKSkgewotICAgICAg
ICBpZiAoIXN1bVRvQnVzKQotICAgICAgICAgICAgemVybygpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgZmxvYXQqIGRlc3RpbmF0aW9uTCA9IGNoYW5uZWxCeVR5cGUoQ2hhbm5lbExl
ZnQpLT5tdXRhYmxlRGF0YSgpOwotICAgIGZsb2F0KiBkZXN0aW5hdGlvblIgPSBudW1iZXJPZkRl
c3RpbmF0aW9uQ2hhbm5lbHMgPiAxID8gY2hhbm5lbEJ5VHlwZShDaGFubmVsUmlnaHQpLT5tdXRh
YmxlRGF0YSgpIDogMDsKLQogICAgIGNvbnN0IGZsb2F0IERlemlwcGVyUmF0ZSA9IDAuMDA1ZjsK
LSAgICBpbnQgZnJhbWVzVG9Qcm9jZXNzID0gbGVuZ3RoKCk7CisgICAgdW5zaWduZWQgZnJhbWVz
VG9Qcm9jZXNzID0gbGVuZ3RoKCk7CiAKICAgICAvLyBJZiB0aGUgZ2FpbiBpcyB3aXRoaW4gZXBz
aWxvbiBvZiB0b3RhbERlc2lyZWRHYWluLCB3ZSBjYW4gc2tpcCBkZXppcHBlcmluZy4gCiAgICAg
Ly8gRklYTUU6IHRoaXMgdmFsdWUgbWF5IG5lZWQgdHdlYWtpbmcuCkBAIC00NDIsNjYgKzM2Myw0
MSBAQCB2b2lkIEF1ZGlvQnVzOjpwcm9jZXNzV2l0aEdhaW5Gcm9tTW9ub1N0ZXJlbyhjb25zdCBB
dWRpb0J1cyAmc291cmNlQnVzLCBmbG9hdCogbAogICAgIGZsb2F0IGdhaW5EaWZmID0gZmFicyh0
b3RhbERlc2lyZWRHYWluIC0gZ2Fpbik7CiAKICAgICAvLyBOdW1iZXIgb2YgZnJhbWVzIHRvIGRl
LXppcHBlciBiZWZvcmUgd2UgYXJlIGNsb3NlIGVub3VnaCB0byB0aGUgdGFyZ2V0IGdhaW4uCi0g
ICAgaW50IGZyYW1lc1RvRGV6aXBwZXIgPSAoZ2FpbkRpZmYgPCBlcHNpbG9uKSA/IDAgOiBmcmFt
ZXNUb1Byb2Nlc3M7IAotCi0gICAgaW50IGsgPSAwOwotCi0gICAgaWYgKHN1bVRvQnVzKSB7Ci0g
ICAgICAgIC8vIFN1bSB0byBvdXIgYnVzCi0gICAgICAgIGlmIChzb3VyY2VSICYmIGRlc3RpbmF0
aW9uUikgewotICAgICAgICAgICAgLy8gU3RlcmVvCi0gICAgICAgICAgICBQUk9DRVNTX1dJVEhf
R0FJTihTVEVSRU9fU1VNKQotICAgICAgICB9IGVsc2UgaWYgKGRlc3RpbmF0aW9uUikgewotICAg
ICAgICAgICAgLy8gTW9ubyAtPiBzdGVyZW8gCi0gICAgICAgICAgICBQUk9DRVNTX1dJVEhfR0FJ
TihNT05PMlNURVJFT19TVU0pCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBNb25v
Ci0gICAgICAgICAgICBQUk9DRVNTX1dJVEhfR0FJTihNT05PX1NVTSkKKyAgICAvLyBGSVhNRTog
ZnJhbWVzVG9EZXppcHBlciBjb3VsZCBiZSBzbWFsbGVyIHdoZW4gdGFyZ2V0IGdhaW4gaXMgY2xv
c2UgZW5vdWdoIHdpdGhpbiB0aGlzIHByb2Nlc3MgbG9vcC4KKyAgICB1bnNpZ25lZCBmcmFtZXNU
b0RlemlwcGVyID0gKGdhaW5EaWZmIDwgZXBzaWxvbikgPyAwIDogZnJhbWVzVG9Qcm9jZXNzOyAK
KworICAgIGlmIChmcmFtZXNUb0RlemlwcGVyKSB7CisgICAgICAgIGlmICghbV9kZXppcHBlckdh
aW5WYWx1ZXMuZ2V0KCkgfHwgbV9kZXppcHBlckdhaW5WYWx1ZXMtPnNpemUoKSA8IGZyYW1lc1Rv
RGV6aXBwZXIpCisgICAgICAgICAgICBtX2RlemlwcGVyR2FpblZhbHVlcyA9IGFkb3B0UHRyKG5l
dyBBdWRpb0Zsb2F0QXJyYXkoZnJhbWVzVG9EZXppcHBlcikpOworCisgICAgICAgIGZsb2F0KiBn
YWluVmFsdWVzID0gbV9kZXppcHBlckdhaW5WYWx1ZXMtPmRhdGEoKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGZyYW1lc1RvRGV6aXBwZXI7ICsraSkgeworICAgICAgICAgICAg
Z2FpbiArPSAodG90YWxEZXNpcmVkR2FpbiAtIGdhaW4pICogRGV6aXBwZXJSYXRlOworICAgICAg
ICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBhcmUgY2xldmVyIGVub3VnaCBpbiBjYWxj
dWxhdGluZyB0aGUgZnJhbWVzVG9EZXppcHBlciB2YWx1ZSwgd2UgY2FuIHByb2JhYmx5IGdldAor
ICAgICAgICAgICAgLy8gcmlkIG9mIHRoaXMgRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1h
bEZsb2F0VG9aZXJvKCkgY2FsbC4KKyAgICAgICAgICAgIGdhaW4gPSBEZW5vcm1hbERpc2FibGVy
OjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2Fpbik7CisgICAgICAgICAgICAqZ2FpblZhbHVl
cysrID0gZ2FpbjsKICAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFByb2Nlc3Mg
ZGlyZWN0bHkgKHdpdGhvdXQgc3VtbWluZykgdG8gb3VyIGJ1cwotICAgICAgICBpZiAoc291cmNl
UiAmJiBkZXN0aW5hdGlvblIpIHsKLSAgICAgICAgICAgIC8vIFN0ZXJlbwotICAgICAgICAgICAg
UFJPQ0VTU19XSVRIX0dBSU4oU1RFUkVPX05PX1NVTSkKLSAgICAgICAgfSBlbHNlIGlmIChkZXN0
aW5hdGlvblIpIHsKLSAgICAgICAgICAgIC8vIE1vbm8gLT4gc3RlcmVvIAotICAgICAgICAgICAg
UFJPQ0VTU19XSVRIX0dBSU4oTU9OTzJTVEVSRU9fTk9fU1VNKQotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgLy8gTW9ubwotICAgICAgICAgICAgUFJPQ0VTU19XSVRIX0dBSU4oTU9OT19O
T19TVU0pCisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBjaGFubmVsSW5kZXggPSAwOyBjaGFubmVs
SW5kZXggPCBudW1iZXJPZkNoYW5uZWxzOyArK2NoYW5uZWxJbmRleCkgeworICAgICAgICAgICAg
dm11bChzb3VyY2VzW2NoYW5uZWxJbmRleF0sIDEsIG1fZGV6aXBwZXJHYWluVmFsdWVzLT5kYXRh
KCksIDEsIGRlc3RpbmF0aW9uc1tjaGFubmVsSW5kZXhdLCAxLCBmcmFtZXNUb0RlemlwcGVyKTsK
KyAgICAgICAgICAgIHNvdXJjZXNbY2hhbm5lbEluZGV4XSArPSBmcmFtZXNUb0RlemlwcGVyOwor
ICAgICAgICAgICAgZGVzdGluYXRpb25zW2NoYW5uZWxJbmRleF0gKz0gZnJhbWVzVG9EZXppcHBl
cjsKICAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBnYWluID0gdG90YWxEZXNpcmVkR2Fp
bjsKKworICAgIC8vIEFwcGx5IGNvbnN0YW50IGdhaW4gYWZ0ZXIgZGUtemlwcGVyaW5nIGhhcyBj
b252ZXJnZWQgb24gdGFyZ2V0IGdhaW4uCisgICAgaWYgKGZyYW1lc1RvRGV6aXBwZXIgPCBmcmFt
ZXNUb1Byb2Nlc3MpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBjaGFubmVsSW5kZXggPSAwOyBj
aGFubmVsSW5kZXggPCBudW1iZXJPZkNoYW5uZWxzOyArK2NoYW5uZWxJbmRleCkKKyAgICAgICAg
ICAgIHZzbXVsKHNvdXJjZXNbY2hhbm5lbEluZGV4XSwgMSwgJmdhaW4sIGRlc3RpbmF0aW9uc1tj
aGFubmVsSW5kZXhdLCAxLCBmcmFtZXNUb1Byb2Nlc3MgLSBmcmFtZXNUb0RlemlwcGVyKTsKICAg
ICB9CiAKICAgICAvLyBTYXZlIHRoZSB0YXJnZXQgZ2FpbiBhcyB0aGUgc3RhcnRpbmcgcG9pbnQg
Zm9yIG5leHQgdGltZSBhcm91bmQuCiAgICAgKmxhc3RNaXhHYWluID0gZ2FpbjsKIH0KIAotdm9p
ZCBBdWRpb0J1czo6cHJvY2Vzc1dpdGhHYWluRnJvbShjb25zdCBBdWRpb0J1cyAmc291cmNlQnVz
LCBmbG9hdCogbGFzdE1peEdhaW4sIGZsb2F0IHRhcmdldEdhaW4sIGJvb2wgc3VtVG9CdXMpCi17
Ci0gICAgLy8gTWFrZSBzdXJlIHdlJ3JlIHN1bW1pbmcgZnJvbSBzYW1lIHR5cGUgb2YgYnVzLgot
ICAgIC8vIFdlICphcmUqIGFibGUgdG8gc3VtIGZyb20gbW9ubyAtPiBzdGVyZW8KLSAgICBpZiAo
c291cmNlQnVzLm51bWJlck9mQ2hhbm5lbHMoKSAhPSAxICYmICF0b3BvbG9neU1hdGNoZXMoc291
cmNlQnVzKSkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICAvLyBJZiBpdCBpcyBjb3B5aW5nIGZyb20gdGhlIHNhbWUgYnVzIGFuZCBu
byBuZWVkIHRvIGNoYW5nZSBnYWluLCBqdXN0IHJldHVybgotICAgIGlmICghc3VtVG9CdXMgJiYg
dGhpcyA9PSAmc291cmNlQnVzICYmICpsYXN0TWl4R2FpbiA9PSB0YXJnZXRHYWluICYmIHRhcmdl
dEdhaW4gPT0gMS4wKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBEaXNwYXRjaCBmb3IgZGlm
ZmVyZW50IGNoYW5uZWwgbGF5b3V0cwotICAgIHN3aXRjaCAobnVtYmVyT2ZDaGFubmVscygpKSB7
Ci0gICAgY2FzZSAxOiAvLyBtb25vCi0gICAgY2FzZSAyOiAvLyBzdGVyZW8KLSAgICAgICAgcHJv
Y2Vzc1dpdGhHYWluRnJvbU1vbm9TdGVyZW8oc291cmNlQnVzLCBsYXN0TWl4R2FpbiwgdGFyZ2V0
R2Fpbiwgc3VtVG9CdXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDQ6IC8vIEZJWE1FOiBp
bXBsZW1lbnQgcXVhZAotICAgIGNhc2UgNTogLy8gRklYTUU6IGltcGxlbWVudCA1LjAKLSAgICBk
ZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotfQotCiB2b2lkIEF1ZGlvQnVzOjpjb3B5V2l0aFNhbXBsZUFjY3VyYXRlR2FpblZhbHVl
c0Zyb20oY29uc3QgQXVkaW9CdXMgJnNvdXJjZUJ1cywgZmxvYXQqIGdhaW5WYWx1ZXMsIHVuc2ln
bmVkIG51bWJlck9mR2FpblZhbHVlcykKIHsKICAgICAvLyBNYWtlIHN1cmUgd2UncmUgcHJvY2Vz
c2luZyBmcm9tIHRoZSBzYW1lIHR5cGUgb2YgYnVzLgpAQCAtNTMxLDE2ICs0MjcsNiBAQCB2b2lk
IEF1ZGlvQnVzOjpjb3B5V2l0aFNhbXBsZUFjY3VyYXRlR2FpblZhbHVlc0Zyb20oY29uc3QgQXVk
aW9CdXMgJnNvdXJjZUJ1cywgZgogICAgIH0KIH0KIAotdm9pZCBBdWRpb0J1czo6Y29weVdpdGhH
YWluRnJvbShjb25zdCBBdWRpb0J1cyAmc291cmNlQnVzLCBmbG9hdCogbGFzdE1peEdhaW4sIGZs
b2F0IHRhcmdldEdhaW4pCi17Ci0gICAgcHJvY2Vzc1dpdGhHYWluRnJvbShzb3VyY2VCdXMsIGxh
c3RNaXhHYWluLCB0YXJnZXRHYWluLCBmYWxzZSk7Ci19Ci0KLXZvaWQgQXVkaW9CdXM6OnN1bVdp
dGhHYWluRnJvbShjb25zdCBBdWRpb0J1cyAmc291cmNlQnVzLCBmbG9hdCogbGFzdE1peEdhaW4s
IGZsb2F0IHRhcmdldEdhaW4pCi17Ci0gICAgcHJvY2Vzc1dpdGhHYWluRnJvbShzb3VyY2VCdXMs
IGxhc3RNaXhHYWluLCB0YXJnZXRHYWluLCB0cnVlKTsKLX0KLQogUGFzc093blB0cjxBdWRpb0J1
cz4gQXVkaW9CdXM6OmNyZWF0ZUJ5U2FtcGxlUmF0ZUNvbnZlcnRpbmcoY29uc3QgQXVkaW9CdXMq
IHNvdXJjZUJ1cywgYm9vbCBtaXhUb01vbm8sIGRvdWJsZSBuZXdTYW1wbGVSYXRlKQogewogICAg
IC8vIHNvdXJjZUJ1cydzIHNhbXBsZS1yYXRlIG11c3QgYmUga25vd24uCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMuaAppbmRleCA0ZGQzZmQ2MjY3N2EyYzc0NzFhYjQ5Mjk0
NGRhOWY5NjU5NjllOTgyLi5iODBhNDg4YTI5OGE4ODc3OGZlYWFmOTVkYWFkYWExYTQ4ZWQ2Yzc2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvQnVzLmgKQEAgLTEwOSwxMCAr
MTA5LDYgQEAgcHVibGljOgogICAgIC8vIFNjYWxlcyBhbGwgc2FtcGxlcyBieSB0aGUgc2FtZSBh
bW91bnQuCiAgICAgdm9pZCBzY2FsZShmbG9hdCBzY2FsZSk7CiAKLSAgICAvLyBNYXN0ZXIgZ2Fp
biBmb3IgdGhpcyBidXMgLSB1c2VkIHdpdGggc3VtV2l0aEdhaW5Gcm9tKCkgYmVsb3cKLSAgICB2
b2lkIHNldEdhaW4oZmxvYXQgZ2FpbikgeyBtX2J1c0dhaW4gPSBnYWluOyB9Ci0gICAgZmxvYXQg
Z2FpbigpIGNvbnN0IHsgcmV0dXJuIG1fYnVzR2FpbjsgfQotCiAgICAgdm9pZCByZXNldCgpIHsg
bV9pc0ZpcnN0VGltZSA9IHRydWU7IH0gLy8gZm9yIGRlLXppcHBlcmluZwogCiAgICAgLy8gQXNz
dW1pbmcgc291cmNlQnVzIGhhcyB0aGUgc2FtZSB0b3BvbG9neSwgY29waWVzIHNhbXBsZSBkYXRh
IGZyb20gZWFjaCBjaGFubmVsIG9mIHNvdXJjZUJ1cyB0byBvdXIgY29ycmVzcG9uZGluZyBjaGFu
bmVsLgpAQCAtMTIyLDEyICsxMTgsMTEgQEAgcHVibGljOgogICAgIC8vIE91ciBvd24gaW50ZXJu
YWwgZ2FpbiBtX2J1c0dhaW4gaXMgaWdub3JlZC4KICAgICB2b2lkIHN1bUZyb20oY29uc3QgQXVk
aW9CdXMgJnNvdXJjZUJ1cyk7CiAKLSAgICAvLyBDb3B5IG9yIHN1bSBlYWNoIGNoYW5uZWwgZnJv
bSBzb3VyY2VCdXMgaW50byBvdXIgY29ycmVzcG9uZGluZyBjaGFubmVsLgorICAgIC8vIENvcHkg
ZWFjaCBjaGFubmVsIGZyb20gc291cmNlQnVzIGludG8gb3VyIGNvcnJlc3BvbmRpbmcgY2hhbm5l
bC4KICAgICAvLyBXZSBzY2FsZSBieSB0YXJnZXRHYWluIChhbmQgb3VyIG93biBpbnRlcm5hbCBn
YWluIG1fYnVzR2FpbiksIHBlcmZvcm1pbmcgImRlLXppcHBlcmluZyIgdG8gc21vb3RobHkgY2hh
bmdlIGZyb20gKmxhc3RNaXhHYWluIHRvICh0YXJnZXRHYWluKm1fYnVzR2FpbikuCi0gICAgLy8g
VGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCBsYXN0TWl4R2FpbiB0byBw
b2ludCB0byBzdG9yYWdlIHdoaWNoIGlzIHVuaXF1ZSBmb3IgZXZlcnkgInN0cmVhbSIgd2hpY2gg
d2lsbCBiZSBzdW1tZWQgdG8gdGhpcyBidXMuCisgICAgLy8gVGhlIGNhbGxlciBpcyByZXNwb25z
aWJsZSBmb3Igc2V0dGluZyB1cCBsYXN0TWl4R2FpbiB0byBwb2ludCB0byBzdG9yYWdlIHdoaWNo
IGlzIHVuaXF1ZSBmb3IgZXZlcnkgInN0cmVhbSIgd2hpY2ggd2lsbCBiZSBhcHBsaWVkIHRvIHRo
aXMgYnVzLgogICAgIC8vIFRoaXMgcmVwcmVzZW50cyB0aGUgZGV6aXBwZXJpbmcgbWVtb3J5Lgog
ICAgIHZvaWQgY29weVdpdGhHYWluRnJvbShjb25zdCBBdWRpb0J1cyAmc291cmNlQnVzLCBmbG9h
dCogbGFzdE1peEdhaW4sIGZsb2F0IHRhcmdldEdhaW4pOwotICAgIHZvaWQgc3VtV2l0aEdhaW5G
cm9tKGNvbnN0IEF1ZGlvQnVzICZzb3VyY2VCdXMsIGZsb2F0KiBsYXN0TWl4R2FpbiwgZmxvYXQg
dGFyZ2V0R2Fpbik7CiAKICAgICAvLyBDb3BpZXMgdGhlIHNvdXJjZUJ1cyBieSBzY2FsaW5nIHdp
dGggc2FtcGxlLWFjY3VyYXRlIGdhaW4gdmFsdWVzLgogICAgIHZvaWQgY29weVdpdGhTYW1wbGVB
Y2N1cmF0ZUdhaW5WYWx1ZXNGcm9tKGNvbnN0IEF1ZGlvQnVzICZzb3VyY2VCdXMsIGZsb2F0KiBn
YWluVmFsdWVzLCB1bnNpZ25lZCBudW1iZXJPZkdhaW5WYWx1ZXMpOwpAQCAtMTQzLDE2ICsxMzgs
MTEgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIEF1ZGlvQnVzKCkgeyB9OwogCi0gICAgdm9p
ZCBwcm9jZXNzV2l0aEdhaW5Gcm9tKGNvbnN0IEF1ZGlvQnVzICZzb3VyY2VCdXMsIGZsb2F0KiBs
YXN0TWl4R2FpbiwgZmxvYXQgdGFyZ2V0R2FpbiwgYm9vbCBzdW1Ub0J1cyk7Ci0gICAgdm9pZCBw
cm9jZXNzV2l0aEdhaW5Gcm9tTW9ub1N0ZXJlbyhjb25zdCBBdWRpb0J1cyAmc291cmNlQnVzLCBm
bG9hdCogbGFzdE1peEdhaW4sIGZsb2F0IHRhcmdldEdhaW4sIGJvb2wgc3VtVG9CdXMpOwotCiAg
ICAgc2l6ZV90IG1fbGVuZ3RoOwotCiAgICAgVmVjdG9yPE93blB0cjxBdWRpb0NoYW5uZWw+ID4g
bV9jaGFubmVsczsKLQogICAgIGludCBtX2xheW91dDsKLQogICAgIGZsb2F0IG1fYnVzR2FpbjsK
KyAgICBPd25QdHI8QXVkaW9GbG9hdEFycmF5PiBtX2RlemlwcGVyR2FpblZhbHVlczsKICAgICBi
b29sIG1faXNGaXJzdFRpbWU7CiAgICAgZmxvYXQgbV9zYW1wbGVSYXRlOyAvLyAwLjAgaWYgdW5r
bm93biBvciBOL0EKIH07Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>