<?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>111533</bug_id>
          
          <creation_ts>2013-03-06 00:11:54 -0800</creation_ts>
          <short_desc>Replace Mersenne Twister RNG with a simple but fast RNG</short_desc>
          <delta_ts>2013-05-10 10:45:04 -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 Template Framework</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="Andrew Bortz">andrew</reporter>
          <assigned_to name="Andrew Bortz">andrew</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>eric</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>mjs</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>oliver</cc>
    
    <cc>paroga</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>848543</commentid>
    <comment_count>0</comment_count>
    <who name="Andrew Bortz">andrew</who>
    <bug_when>2013-03-06 00:11:54 -0800</bug_when>
    <thetext>Replace Mersenne Twister RNG with a simple but fast RNG</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848550</commentid>
    <comment_count>1</comment_count>
      <attachid>191670</attachid>
    <who name="Andrew Bortz">andrew</who>
    <bug_when>2013-03-06 00:21:59 -0800</bug_when>
    <thetext>Created attachment 191670
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848553</commentid>
    <comment_count>2</comment_count>
      <attachid>191670</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-03-06 00:24:41 -0800</bug_when>
    <thetext>Comment on attachment 191670
Patch

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

&gt; Source/WTF/wtf/RandomNumber.cpp:61
&gt; +    g_seed = g_seed + (g_seed * g_seed | 5);
&gt; +    return static_cast&lt;uint32_t&gt;(g_seed &gt;&gt; 32);

It feels odd to write back to the seed?  Is this typical?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848555</commentid>
    <comment_count>3</comment_count>
      <attachid>191672</attachid>
    <who name="Andrew Bortz">andrew</who>
    <bug_when>2013-03-06 00:29:21 -0800</bug_when>
    <thetext>Created attachment 191672
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848556</commentid>
    <comment_count>4</comment_count>
      <attachid>191672</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-03-06 00:31:38 -0800</bug_when>
    <thetext>Comment on attachment 191672
Patch

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848559</commentid>
    <comment_count>5</comment_count>
      <attachid>191672</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-03-06 00:31:53 -0800</bug_when>
    <thetext>Comment on attachment 191672
Patch

Should probably let the EWS chew on it first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848561</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-06 00:34:42 -0800</bug_when>
    <thetext>Attachment 191672 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/ThirdParty/ChangeLog&apos;, u&apos;Source/ThirdParty/mt19937ar.c&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/Platform.h&apos;, u&apos;Source/WTF/wtf/RandomNumber.cpp&apos;, u&apos;Source/WTF/wtf/RandomNumber.h&apos;, u&apos;Source/WTF/wtf/RandomNumberSeed.h&apos;]&quot; exit_code: 1
Source/WTF/wtf/RandomNumber.cpp:44:  g_state is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848592</commentid>
    <comment_count>7</comment_count>
      <attachid>191672</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-03-06 01:00:07 -0800</bug_when>
    <thetext>Comment on attachment 191672
Patch

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

I don&apos;t know anything about random number generators, but IMHO, the patch could get a little bit of polish

&gt; Source/WTF/ChangeLog:21
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        * wtf/Platform.h: Mersenne Twister defines are no longer needed
&gt; +        * wtf/RandomNumber.cpp:
&gt; +        (WTF::Internal::initializeRandomNumber): Initialize the seed of the RNG
&gt; +        (WTF::Internal::randomNumber): Instead of using the Mersenne Twister, we
&gt; +        use this really simple, really fast but statistically strong RNG with a
&gt; +        guaranteed cycle of 2^64.
&gt; +        (WTF::randomNumber): We don&apos;t need to fall back on a non-Mersenne-based
&gt; +        RNG anymore, so this code is greatly simplified.
&gt; +        * wtf/RandomNumber.h:
&gt; +        * wtf/RandomNumberSeed.h:
&gt; +        (WTF::initializeRandomNumberGenerator): This code is no longer needed.
&gt; +        Additionally, the code had an error, since rand() returns 32-bits, so each
&gt; +        initializationBuffer&apos;s upper 16-bits has more bits set than random.
&gt; +

This is all very nice, but you ChangeLog should state the &quot;Why?&quot; of the change (like in this case comparing the two algorithms and tell what properties makes this change a better solution).

That way, people can understand the reason of the change if it causes issues in the future.

&gt; Source/WTF/wtf/RandomNumber.cpp:57
&gt; +// This RNG comes from: Klimov, A. and Shamir, A., &quot;A New Class of 
&gt; +// Invertible Mappings&quot;, Cryptographic Hardware and Embedded Systems 2002,
&gt; +// http://dl.acm.org/citation.cfm?id=752741
&gt; +//
&gt; +// Very fast, very simple, and passes Diehard and other good statistical
&gt; +// tests as strongly as cryptographically-secure RNGs (but is not itself
&gt; +// cryptographically-secure).

Please avoid the acronym RNG.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849037</commentid>
    <comment_count>8</comment_count>
      <attachid>191672</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-03-06 10:33:58 -0800</bug_when>
    <thetext>Comment on attachment 191672
Patch

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

Don&apos;t use the g_ prefix on the global (we tend to use s_ in general, but also it&apos;s not exported from RandomNumber.cpp so you probably don&apos;t need a prefix anyway.

That said i think this whole thing should be in just the cpp file, there&apos;s no need to have any initializer see my comments inline.

&gt; Source/WTF/wtf/RandomNumber.cpp:49
&gt; +namespace Internal {
&gt; +
&gt; +static uint64_t g_state;
&gt; +
&gt; +void initializeRandomNumber(uint64_t seed)
&gt; +{
&gt; +    g_state = seed;
&gt;  }

Remove these changes, and remove g_state

&gt; Source/WTF/wtf/RandomNumber.cpp:62
&gt; +uint32_t randomNumber()
&gt; +{
&gt; +    g_state += ((g_state * g_state) | 5);
&gt; +    return static_cast&lt;uint32_t&gt;(g_state &gt;&gt; 32);
&gt; +}

uint32_t randomNumber()
{
    // Don&apos;t use rand() as your seed here, it&apos;s been demonstrated that you can rollback to find the initial seed
    // I&apos;d suggest a combo of time() + ASLR sourced entropy to try and make things less deterministic, a la:
    static uint64_t state = (reinterpret_cast&lt;uintptr_t&gt;(&amp;state) &gt;&gt; 5) ^ time(0) ^ (reinterpret_cast&lt;uintptr_t&gt;(&amp;state) &gt;&gt; 13);
    state += ((state * state) | 5);
    return static_cast&lt;uint32_t&gt;(state &gt;&gt; 32);
}

&gt; Source/WTF/wtf/RandomNumber.h:35
&gt; +#if !USE(OS_RANDOMNESS)
&gt; +namespace Internal {
&gt; +void initializeRandomNumber(uint64_t);
&gt; +}
&gt; +#endif

remove this, and so reset RendomNumber.h you don&apos;t need changes.

&gt; Source/WTF/wtf/RandomNumberSeed.h:65
&gt; -#if USE(MERSENNE_TWISTER_19937)
&gt; -    // use rand() to initialize the Mersenne Twister random number generator.
&gt; -    unsigned long initializationBuffer[4];
&gt; -    initializationBuffer[0] = (rand() &lt;&lt; 16) | rand();
&gt; -    initializationBuffer[1] = (rand() &lt;&lt; 16) | rand();
&gt; -    initializationBuffer[2] = (rand() &lt;&lt; 16) | rand();
&gt; -    initializationBuffer[3] = (rand() &lt;&lt; 16) | rand();
&gt; -    init_by_array(initializationBuffer, 4);
&gt; +#if !USE(OS_RANDOMNESS)
&gt; +    uint64_t seed = static_cast&lt;uint64_t&gt;(rand()) &lt;&lt; 32 | static_cast&lt;uint64_t&gt;(rand());
&gt; +    Internal::initializeRandomNumber(seed);
&gt;  #endif

You can remove all this explicit initialization</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849050</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-06 10:42:37 -0800</bug_when>
    <thetext>&gt;     static uint64_t state = (reinterpret_cast&lt;uintptr_t&gt;(&amp;state) &gt;&gt; 5) ^ time(0) ^ (reinterpret_cast&lt;uintptr_t&gt;(&amp;state) &gt;&gt; 13);

How many bits of entropy does that produce?  What about on systems that don&apos;t have ASLR enabled?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849053</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-06 10:43:11 -0800</bug_when>
    <thetext>(Also, what about on 32 bit systems?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849075</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-06 10:58:20 -0800</bug_when>
    <thetext>&gt;     // Don&apos;t use rand() as your seed here, it&apos;s been demonstrated that you can rollback to find the initial seed

I&apos;m not sure we need to worry about that too much.  This RNG is explicitly not cryptographically secure.  If we had a cryptographically secure source of entropy, we&apos;d just enable USE(OS_RANDOMNESS) and use cryptographicallyRandomNumber() anyway.

In any case, we might as well XOR in 64 bits from rand().  It&apos;s not going to hurt anything, and it will probably help in the case of a 32-bit system without ASLR.

As for the self-initialization, that&apos;s a neat trick.  One risk of your suggestion is that it creates a race condition where two threads might both think it&apos;s their job to init the RNG.  If we&apos;re worried about that, we can make sure to call WTF::randomNumber() once in RandomNumberSeed.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849087</commentid>
    <comment_count>12</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-03-06 11:04:09 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt;     static uint64_t state = (reinterpret_cast&lt;uintptr_t&gt;(&amp;state) &gt;&gt; 5) ^ time(0) ^ (reinterpret_cast&lt;uintptr_t&gt;(&amp;state) &gt;&gt; 13);
&gt; 
&gt; How many bits of entropy does that produce?  What about on systems that don&apos;t have ASLR enabled?

In the absence of ASLR this degenerates (essentially) to time(0), which is fairly crappy, but arguably still superior to rand() in that your seed isn&apos;t always the same.  In the absence of ASLR different builds and distributions will have different values.

ASLR bits are relatively low entropy (low 16-20 bits are fairly constant iirc)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849097</commentid>
    <comment_count>13</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-03-06 11:08:57 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt;     // Don&apos;t use rand() as your seed here, it&apos;s been demonstrated that you can rollback to find the initial seed
&gt; 
&gt; I&apos;m not sure we need to worry about that too much.  This RNG is explicitly not cryptographically secure.  If we had a cryptographically secure source of entropy, we&apos;d just enable USE(OS_RANDOMNESS) and use cryptographicallyRandomNumber() anyway.
&gt; 
&gt; In any case, we might as well XOR in 64 bits from rand().  It&apos;s not going to hurt anything, and it will probably help in the case of a 32-bit system without ASLR.
&gt; 
&gt; As for the self-initialization, that&apos;s a neat trick.  One risk of your suggestion is that it creates a race condition where two threads might both think it&apos;s their job to init the RNG.  If we&apos;re worried about that, we can make sure to call WTF::randomNumber() once in RandomNumberSeed.h.

I believe function scoped globals are guaranteed to be initialized only once, but we&apos;re not too worried about that, but your solution would work if not.

rand() produces a constant deterministic value across multiple runs, initializing with the result of rand() is logically equivalent to initializing with a constant.

Deterministic seeds have been attacked before for user tracking (you rollback the RNG until you get a value that is logically feasible that the exposed random number is feasibly a start point and track that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849112</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-03-06 11:19:40 -0800</bug_when>
    <thetext>BTW, my understanding is that this code is only used on platforms which do not have &quot;OS_RANDOMNESS&quot; defined:
http://trac.webkit.org/browser/trunk/Source/WTF/wtf/Platform.h#L642
http://trac.webkit.org/browser/trunk/Source/WTF/wtf/Platform.h#L701

Which may be only Blackberry and WinCE, possibly EFL?

This patch is for the non-cryptographically random code-path and is mostly about deleting code. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849113</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-06 11:20:29 -0800</bug_when>
    <thetext>&gt; I believe function scoped globals are guaranteed to be initialized only once, but we&apos;re not too worried about that, but your solution would work if not.

I don&apos;t think that&apos;s correct:

http://blogs.msdn.com/b/oldnewthing/archive/2004/03/08/85901.aspx

&gt; rand() produces a constant deterministic value across multiple runs, initializing with the result of rand() is logically equivalent to initializing with a constant.

That depends on whether and how the code using WebKit has called srand().  Given that the configurations that use this code were already using rand() for their seed entropy, we should probably continue to use XOR in bits from rand() in the seed.

&gt; Deterministic seeds have been attacked before for user tracking

No one is advocating a deterministic seed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850838</commentid>
    <comment_count>16</comment_count>
      <attachid>192138</attachid>
    <who name="Andrew Bortz">andrew</who>
    <bug_when>2013-03-07 20:54:58 -0800</bug_when>
    <thetext>Created attachment 192138
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850843</commentid>
    <comment_count>17</comment_count>
    <who name="Andrew Bortz">andrew</who>
    <bug_when>2013-03-07 20:56:47 -0800</bug_when>
    <thetext>Since the thread-safety of a static initializer is unclear, I choose to keep the existing explicit initialization (we already had a place for it to be called anyway).

Also, given that the old code paths used rand() for initialization, I feel okay leaving that in as well. Perhaps the correct solution is to get some entropy from time(), ASLR, and rand(), and mix it all together, but I feel pretty silly doing all that for a random number generator that doesn&apos;t need cryptographic strength. If someone wants to fix this in a later patch, go for it, but we&apos;re not making things worse by leaving it in.

In case anyone wants to verify that it passes solid statistical tests, see http://www.cacert.at/cgi-bin/rngresults and look for xpxso (x plus x squared or).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850866</commentid>
    <comment_count>18</comment_count>
      <attachid>192138</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-07 21:51:54 -0800</bug_when>
    <thetext>Comment on attachment 192138
Patch

Clearing flags on attachment: 192138

Committed r145179: &lt;http://trac.webkit.org/changeset/145179&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850867</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-07 21:52:01 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>887422</commentid>
    <comment_count>20</comment_count>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2013-05-10 10:45:04 -0700</bug_when>
    <thetext>Andrew, I am wondering who is using the !USE(OS_RANDOMNESS) path (and how did you tested this code path in the patch). As far as I can tell USE(OS_RANDOMNESS) guard is enabled for all ports on trunk.

Perhaps we can continue the discussion at bug 108095 .</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191670</attachid>
            <date>2013-03-06 00:21:59 -0800</date>
            <delta_ts>2013-03-06 00:29:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111533-20130306001811.patch</filename>
            <type>text/plain</type>
            <size>13811</size>
            <attacher name="Andrew Bortz">andrew</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0ODczCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9DaGFuZ2VMb2cKaW5kZXggMzZhNGU5MGFl
Mzc0ZWZhOTc1YTgzMmY2YjU4MjhlZDJhYmU4OTY0Yy4uMzM3NmYyNWVjM2IyZGRjNWVkOWE3OWYw
MzEzOWNiZjhjZDRiODE2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEz
LTAzLTA2ICBBbmRyZXcgQm9ydHogIDxhbmRyZXdAYWJvcnR6Lm5ldD4KKworICAgICAgICBSZXBs
YWNlIE1lcnNlbm5lIFR3aXN0ZXIgUk5HIHdpdGggYSBzaW1wbGUgYnV0IGZhc3QgUk5HCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTE1MzMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNvZGUgaXMg
bm8gbG9uZ2VyIHVzZWQuCisKKyAgICAgICAgKiBtdDE5OTM3YXIuYzogUmVtb3ZlZC4KKwogMjAx
My0wMi0yMCAgUm9nZXIgRm9uZyAgPHJvZ2VyX2ZvbmdAYXBwbGUuY29tPgogCiAgICAgICAgR2V0
IFZTMjAxMCBTb2x1dGlvbiBCJkkgcmVhZHkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDI0MGYxMzk4NjljMTdjZDhiZjE0MDY1
YzhhMGIxODc0NTkzMmQ0MzAuLjkwY2UzYzQ2OGU2NDMwMWY0MjdhNWVhNTdlNmFjM2NkM2QzMzhi
ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTMtMDMtMDYgIEFuZHJldyBCb3J0eiAgPGFuZHJl
d0BhYm9ydHoubmV0PgorCisgICAgICAgIFJlcGxhY2UgTWVyc2VubmUgVHdpc3RlciBSTkcgd2l0
aCBhIHNpbXBsZSBidXQgZmFzdCBSTkcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExMTUzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6IE1lcnNlbm5lIFR3aXN0ZXIgZGVmaW5l
cyBhcmUgbm8gbG9uZ2VyIG5lZWRlZAorICAgICAgICAqIHd0Zi9SYW5kb21OdW1iZXIuY3BwOgor
ICAgICAgICAoV1RGOjpJbnRlcm5hbDo6aW5pdGlhbGl6ZVJhbmRvbU51bWJlcik6IEluaXRpYWxp
emUgdGhlIHNlZWQgb2YgdGhlIFJORworICAgICAgICAoV1RGOjpJbnRlcm5hbDo6cmFuZG9tTnVt
YmVyKTogSW5zdGVhZCBvZiB1c2luZyB0aGUgTWVyc2VubmUgVHdpc3Rlciwgd2UKKyAgICAgICAg
dXNlIHRoaXMgcmVhbGx5IHNpbXBsZSwgcmVhbGx5IGZhc3QgYnV0IHN0YXRpc3RpY2FsbHkgc3Ry
b25nIFJORyB3aXRoIGEKKyAgICAgICAgZ3VhcmFudGVlZCBjeWNsZSBvZiAyXjY0LgorICAgICAg
ICAoV1RGOjpyYW5kb21OdW1iZXIpOiBXZSBkb24ndCBuZWVkIHRvIGZhbGwgYmFjayBvbiBhIG5v
bi1NZXJzZW5uZS1iYXNlZAorICAgICAgICBSTkcgYW55bW9yZSwgc28gdGhpcyBjb2RlIGlzIGdy
ZWF0bHkgc2ltcGxpZmllZC4KKyAgICAgICAgKiB3dGYvUmFuZG9tTnVtYmVyLmg6CisgICAgICAg
ICogd3RmL1JhbmRvbU51bWJlclNlZWQuaDoKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZVJhbmRv
bU51bWJlckdlbmVyYXRvcik6IFRoaXMgY29kZSBpcyBubyBsb25nZXIgbmVlZGVkLgorICAgICAg
ICBBZGRpdGlvbmFsbHksIHRoZSBjb2RlIGhhZCBhbiBlcnJvciwgc2luY2UgcmFuZCgpIHJldHVy
bnMgMzItYml0cywgc28gZWFjaAorICAgICAgICBpbml0aWFsaXphdGlvbkJ1ZmZlcidzIHVwcGVy
IDE2LWJpdHMgaGFzIG1vcmUgYml0cyBzZXQgdGhhbiByYW5kb20uCisKIDIwMTMtMDMtMDUgIFJ5
dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIEJ1aWxk
IGJyZWFrIHdpdGggbGF0ZXN0IEVGTCBsaWJyYXJpZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L210MTk5Mzdhci5jIGIvU291cmNlL1RoaXJkUGFydHkvbXQxOTkzN2FyLmMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3MTU5NThkMTJmYjE5MGViOGVjMTU4YTM5ZTYzMWMy
YTM0ZmI4NzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbXQxOTkzN2FyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAs
MCBAQAotLyoKLSAgIEEgQy1wcm9ncmFtIGZvciBNVDE5OTM3LCB3aXRoIGluaXRpYWxpemF0aW9u
IGltcHJvdmVkIDIwMDIvMS8yNi4KLSAgIENvZGVkIGJ5IFRha3VqaSBOaXNoaW11cmEgYW5kIE1h
a290byBNYXRzdW1vdG8uCi0KLSAgIEJlZm9yZSB1c2luZywgaW5pdGlhbGl6ZSB0aGUgc3RhdGUg
YnkgdXNpbmcgaW5pdF9nZW5yYW5kKHNlZWQpCi0gICBvciBpbml0X2J5X2FycmF5KGluaXRfa2V5
LCBrZXlfbGVuZ3RoKS4KLQotICAgQ29weXJpZ2h0IChDKSAxOTk3IC0gMjAwMiwgTWFrb3RvIE1h
dHN1bW90byBhbmQgVGFrdWppIE5pc2hpbXVyYSwKLSAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0K
LSAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gICBhcmUgbWV0OgotCi0gICAgIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLQotICAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
ICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0KLSAgICAgMy4gVGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
cnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQotICAgICAgICBwcm9kdWN0
cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4KLSAgICAgICAgcGVybWlzc2lvbi4KLQotICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICAgIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAg
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCi0gICBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgotICAgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcKLSAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUwotICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotICAgQW55IGZlZWRiYWNrIGlzIHZlcnkg
d2VsY29tZS4KLSAgIGh0dHA6Ly93d3cubWF0aC5zY2kuaGlyb3NoaW1hLXUuYWMuanAvfm0tbWF0
L01UL2VtdC5odG1sCi0gICBlbWFpbDogbS1tYXQgQCBtYXRoLnNjaS5oaXJvc2hpbWEtdS5hYy5q
cCAocmVtb3ZlIHNwYWNlKQotKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLS8qIFBlcmlvZCBw
YXJhbWV0ZXJzICovCi0jZGVmaW5lIE4gNjI0Ci0jZGVmaW5lIE0gMzk3Ci0jZGVmaW5lIE1BVFJJ
WF9BIDB4OTkwOGIwZGZVTCAgIC8qIGNvbnN0YW50IHZlY3RvciBhICovCi0jZGVmaW5lIFVQUEVS
X01BU0sgMHg4MDAwMDAwMFVMIC8qIG1vc3Qgc2lnbmlmaWNhbnQgdy1yIGJpdHMgKi8KLSNkZWZp
bmUgTE9XRVJfTUFTSyAweDdmZmZmZmZmVUwgLyogbGVhc3Qgc2lnbmlmaWNhbnQgciBiaXRzICov
Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG10W05dOyAvKiB0aGUgYXJyYXkgZm9yIHRoZSBzdGF0
ZSB2ZWN0b3IgICovCi1zdGF0aWMgaW50IG10aT1OKzE7IC8qIG10aT09TisxIG1lYW5zIG10W05d
IGlzIG5vdCBpbml0aWFsaXplZCAqLwotCi0vKiBpbml0aWFsaXplcyBtdFtOXSB3aXRoIGEgc2Vl
ZCAqLwotdm9pZCBpbml0X2dlbnJhbmQodW5zaWduZWQgbG9uZyBzKQotewotICAgIG10WzBdPSBz
ICYgMHhmZmZmZmZmZlVMOwotICAgIGZvciAobXRpPTE7IG10aTxOOyBtdGkrKykgewotICAgICAg
ICBtdFttdGldID0gKDE4MTI0MzMyNTNVTCAqIChtdFttdGktMV0gXiAobXRbbXRpLTFdID4+IDMw
KSkgKyBtdGkpOwotICAgICAgICAvKiBTZWUgS251dGggVEFPQ1AgVm9sMi4gM3JkIEVkLiBQLjEw
NiBmb3IgbXVsdGlwbGllci4gKi8KLSAgICAgICAgLyogSW4gdGhlIHByZXZpb3VzIHZlcnNpb25z
LCBNU0JzIG9mIHRoZSBzZWVkIGFmZmVjdCAgICovCi0gICAgICAgIC8qIG9ubHkgTVNCcyBvZiB0
aGUgYXJyYXkgbXRbXS4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAvKiAyMDAy
LzAxLzA5IG1vZGlmaWVkIGJ5IE1ha290byBNYXRzdW1vdG8gICAgICAgICAgICAgKi8KLSAgICAg
ICAgbXRbbXRpXSAmPSAweGZmZmZmZmZmVUw7Ci0gICAgICAgIC8qIGZvciA+MzIgYml0IG1hY2hp
bmVzICovCi0gICAgfQotfQotCi0vKiBpbml0aWFsaXplIGJ5IGFuIGFycmF5IHdpdGggYXJyYXkt
bGVuZ3RoICovCi0vKiBpbml0X2tleSBpcyB0aGUgYXJyYXkgZm9yIGluaXRpYWxpemluZyBrZXlz
ICovCi0vKiBrZXlfbGVuZ3RoIGlzIGl0cyBsZW5ndGggKi8KLS8qIHNsaWdodCBjaGFuZ2UgZm9y
IEMrKywgMjAwNC8yLzI2ICovCi12b2lkIGluaXRfYnlfYXJyYXkodW5zaWduZWQgbG9uZyBpbml0
X2tleVtdLGludCBrZXlfbGVuZ3RoKQotewotICAgIGludCBpLCBqLCBrOwotICAgIGluaXRfZ2Vu
cmFuZCgxOTY1MDIxOFVMKTsKLSAgICBpPTE7IGo9MDsKLSAgICBrID0gKE4+a2V5X2xlbmd0aCA/
IE4gOiBrZXlfbGVuZ3RoKTsKLSAgICBmb3IgKDsgazsgay0tKSB7Ci0gICAgICAgIG10W2ldID0g
KG10W2ldIF4gKChtdFtpLTFdIF4gKG10W2ktMV0gPj4gMzApKSAqIDE2NjQ1MjVVTCkpCi0gICAg
ICAgICAgKyBpbml0X2tleVtqXSArIGo7IC8qIG5vbiBsaW5lYXIgKi8KLSAgICAgICAgbXRbaV0g
Jj0gMHhmZmZmZmZmZlVMOyAvKiBmb3IgV09SRFNJWkUgPiAzMiBtYWNoaW5lcyAqLwotICAgICAg
ICBpKys7IGorKzsKLSAgICAgICAgaWYgKGk+PU4pIHsgbXRbMF0gPSBtdFtOLTFdOyBpPTE7IH0K
LSAgICAgICAgaWYgKGo+PWtleV9sZW5ndGgpIGo9MDsKLSAgICB9Ci0gICAgZm9yIChrPU4tMTsg
azsgay0tKSB7Ci0gICAgICAgIG10W2ldID0gKG10W2ldIF4gKChtdFtpLTFdIF4gKG10W2ktMV0g
Pj4gMzApKSAqIDE1NjYwODM5NDFVTCkpCi0gICAgICAgICAgLSBpOyAvKiBub24gbGluZWFyICov
Ci0gICAgICAgIG10W2ldICY9IDB4ZmZmZmZmZmZVTDsgLyogZm9yIFdPUkRTSVpFID4gMzIgbWFj
aGluZXMgKi8KLSAgICAgICAgaSsrOwotICAgICAgICBpZiAoaT49TikgeyBtdFswXSA9IG10W04t
MV07IGk9MTsgfQotICAgIH0KLQotICAgIG10WzBdID0gMHg4MDAwMDAwMFVMOyAvKiBNU0IgaXMg
MTsgYXNzdXJpbmcgbm9uLXplcm8gaW5pdGlhbCBhcnJheSAqLwotfQotCi0vKiBnZW5lcmF0ZXMg
YSByYW5kb20gbnVtYmVyIG9uIFswLDB4ZmZmZmZmZmZdLWludGVydmFsICovCi11bnNpZ25lZCBs
b25nIGdlbnJhbmRfaW50MzIodm9pZCkKLXsKLSAgICB1bnNpZ25lZCBsb25nIHk7Ci0gICAgc3Rh
dGljIHVuc2lnbmVkIGxvbmcgbWFnMDFbMl09ezB4MFVMLCBNQVRSSVhfQX07Ci0gICAgLyogbWFn
MDFbeF0gPSB4ICogTUFUUklYX0EgIGZvciB4PTAsMSAqLwotCi0gICAgaWYgKG10aSA+PSBOKSB7
IC8qIGdlbmVyYXRlIE4gd29yZHMgYXQgb25lIHRpbWUgKi8KLSAgICAgICAgaW50IGtrOwotCi0g
ICAgICAgIGlmIChtdGkgPT0gTisxKSAgIC8qIGlmIGluaXRfZ2VucmFuZCgpIGhhcyBub3QgYmVl
biBjYWxsZWQsICovCi0gICAgICAgICAgICBpbml0X2dlbnJhbmQoNTQ4OVVMKTsgLyogYSBkZWZh
dWx0IGluaXRpYWwgc2VlZCBpcyB1c2VkICovCi0KLSAgICAgICAgZm9yIChraz0wO2trPE4tTTtr
aysrKSB7Ci0gICAgICAgICAgICB5ID0gKG10W2trXSZVUFBFUl9NQVNLKXwobXRba2srMV0mTE9X
RVJfTUFTSyk7Ci0gICAgICAgICAgICBtdFtra10gPSBtdFtraytNXSBeICh5ID4+IDEpIF4gbWFn
MDFbeSAmIDB4MVVMXTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKDtrazxOLTE7a2srKykgewot
ICAgICAgICAgICAgeSA9IChtdFtra10mVVBQRVJfTUFTSyl8KG10W2trKzFdJkxPV0VSX01BU0sp
OwotICAgICAgICAgICAgbXRba2tdID0gbXRba2srKE0tTildIF4gKHkgPj4gMSkgXiBtYWcwMVt5
ICYgMHgxVUxdOwotICAgICAgICB9Ci0gICAgICAgIHkgPSAobXRbTi0xXSZVUFBFUl9NQVNLKXwo
bXRbMF0mTE9XRVJfTUFTSyk7Ci0gICAgICAgIG10W04tMV0gPSBtdFtNLTFdIF4gKHkgPj4gMSkg
XiBtYWcwMVt5ICYgMHgxVUxdOwotCi0gICAgICAgIG10aSA9IDA7Ci0gICAgfQotCi0gICAgeSA9
IG10W210aSsrXTsKLQotICAgIC8qIFRlbXBlcmluZyAqLwotICAgIHkgXj0gKHkgPj4gMTEpOwot
ICAgIHkgXj0gKHkgPDwgNykgJiAweDlkMmM1NjgwVUw7Ci0gICAgeSBePSAoeSA8PCAxNSkgJiAw
eGVmYzYwMDAwVUw7Ci0gICAgeSBePSAoeSA+PiAxOCk7Ci0KLSAgICByZXR1cm4geTsKLX0KLQot
LyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwweDdmZmZmZmZmXS1pbnRlcnZhbCAq
LwotbG9uZyBnZW5yYW5kX2ludDMxKHZvaWQpCi17Ci0gICAgcmV0dXJuIChsb25nKShnZW5yYW5k
X2ludDMyKCk+PjEpOwotfQotCi0vKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uIFswLDFd
LXJlYWwtaW50ZXJ2YWwgKi8KLWRvdWJsZSBnZW5yYW5kX3JlYWwxKHZvaWQpCi17Ci0gICAgcmV0
dXJuIGdlbnJhbmRfaW50MzIoKSooMS4wLzQyOTQ5NjcyOTUuMCk7Ci0gICAgLyogZGl2aWRlZCBi
eSAyXjMyLTEgKi8KLX0KLQotLyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwxKS1y
ZWFsLWludGVydmFsICovCi1kb3VibGUgZ2VucmFuZF9yZWFsMih2b2lkKQotewotICAgIHJldHVy
biBnZW5yYW5kX2ludDMyKCkqKDEuMC80Mjk0OTY3Mjk2LjApOwotICAgIC8qIGRpdmlkZWQgYnkg
Ml4zMiAqLwotfQotCi0vKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uICgwLDEpLXJlYWwt
aW50ZXJ2YWwgKi8KLWRvdWJsZSBnZW5yYW5kX3JlYWwzKHZvaWQpCi17Ci0gICAgcmV0dXJuICgo
KGRvdWJsZSlnZW5yYW5kX2ludDMyKCkpICsgMC41KSooMS4wLzQyOTQ5NjcyOTYuMCk7Ci0gICAg
LyogZGl2aWRlZCBieSAyXjMyICovCi19Ci0KLS8qIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIg
b24gWzAsMSkgd2l0aCA1My1iaXQgcmVzb2x1dGlvbiovCi1kb3VibGUgZ2VucmFuZF9yZXM1Myh2
b2lkKQotewotICAgIHVuc2lnbmVkIGxvbmcgYT1nZW5yYW5kX2ludDMyKCk+PjUsIGI9Z2VucmFu
ZF9pbnQzMigpPj42OwotICAgIHJldHVybihhKjY3MTA4ODY0LjArYikqKDEuMC85MDA3MTk5MjU0
NzQwOTkyLjApOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaCBiL1Nv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKaW5kZXggZWM0N2MzOWY0MTc0Zjc5ZjBmYmVlODg0ZDA4
OGVjMGQyOTMxOWU5NC4uOTMwMWYxMDU1MTVkMTRlNmNkMjc1MTUwYWVlZGUwMGQyMmQ0Y2Q5NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybS5oCkBAIC01MDIsNyArNTAyLDYgQEAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0o
QkxBQ0tCRVJSWSkKLSNkZWZpbmUgV1RGX1VTRV9NRVJTRU5ORV9UV0lTVEVSXzE5OTM3IDEKICNk
ZWZpbmUgV1RGX1VTRV9TS0lBIDEKICNkZWZpbmUgV1RGX1VTRV9MT1dfUVVBTElUWV9JTUFHRV9J
TlRFUlBPTEFUSU9OIDEKICNkZWZpbmUgV1RGX1VTRV9MT1dfUVVBTElUWV9JTUFHRV9OT19KUEVH
X0RJVEhFUklORyAxCkBAIC01MTQsMTEgKzUxMyw2IEBACiAjZGVmaW5lIEVOQUJMRV9HTE9CQUxf
RkFTVE1BTExPQ19ORVcgMAogI2VuZGlmCiAKLQotI2lmIE9TKFdJTkNFKQotI2RlZmluZSBXVEZf
VVNFX01FUlNFTk5FX1RXSVNURVJfMTk5MzcgMQotI2VuZGlmCi0KIC8qIE9uIFdpbmRvd3MsIHVz
ZSBRdWVyeVBlcmZvcm1hbmNlQ291bnRlciBieSBkZWZhdWx0ICovCiAjaWYgT1MoV0lORE9XUykK
ICNkZWZpbmUgV1RGX1VTRV9RVUVSWV9QRVJGT1JNQU5DRV9DT1VOVEVSICAxCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9SYW5kb21OdW1iZXIuY3BwIGIvU291cmNlL1dURi93dGYvUmFuZG9t
TnVtYmVyLmNwcAppbmRleCAwNjA3NGVkOWYwYTdiOTJkODE0OTA3YzJjNWExOWY2ZmZjNTE4ZDU1
Li40ZjhmMWQzNjk1Y2JjOWM4YzI2ZTc3MzliODk1MDUxODcyYjJjYjFmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9SYW5kb21OdW1iZXIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JhbmRv
bU51bWJlci5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAgICAo
QykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChDKSAyMDEzIEFuZHJldyBC
b3J0ei4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzUsNDIgKzM2LDQyIEBACiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8c3Rk
bGliLmg+CiAKLSNpZiBVU0UoTUVSU0VOTkVfVFdJU1RFUl8xOTkzNykKLWV4dGVybiAiQyIgewot
I2luY2x1ZGUgIm10MTk5Mzdhci5jIgorbmFtZXNwYWNlIFdURiB7CisKKyNpZiAhVVNFKE9TX1JB
TkRPTU5FU1MpCituYW1lc3BhY2UgSW50ZXJuYWwgeworCitzdGF0aWMgdWludDY0X3QgZ19zZWVk
OworCit2b2lkIGluaXRpYWxpemVSYW5kb21OdW1iZXIodWludDY0X3Qgc2VlZCkKK3sKKyAgICBn
X3NlZWQgPSBzZWVkOwogfQotI2VuZGlmCiAKLW5hbWVzcGFjZSBXVEYgeworLy8gVGhpcyBSTkcg
Y29tZXMgZnJvbTogS2xpbW92LCBBLiBhbmQgU2hhbWlyLCBBLiwgIkEgTmV3IENsYXNzIG9mIAor
Ly8gSW52ZXJ0aWJsZSBNYXBwaW5ncyIsIENyeXB0b2dyYXBoaWMgSGFyZHdhcmUgYW5kIEVtYmVk
ZGVkIFN5c3RlbXMgMjAwMiwKKy8vIGh0dHA6Ly9kbC5hY20ub3JnL2NpdGF0aW9uLmNmbT9pZD03
NTI3NDEKKy8vCisvLyBWZXJ5IGZhc3QsIHZlcnkgc2ltcGxlLCBhbmQgcGFzc2VzIERpZWhhcmQg
YW5kIG90aGVyIGdvb2Qgc3RhdGlzdGljYWwKKy8vIHRlc3RzIGFzIHN0cm9uZ2x5IGFzIGNyeXB0
b2dyYXBoaWNhbGx5LXNlY3VyZSBSTkdzIChidXQgaXMgbm90IGl0c2VsZgorLy8gY3J5cHRvZ3Jh
cGhpY2FsbHktc2VjdXJlKS4KK3VpbnQzMl90IHJhbmRvbU51bWJlcigpCit7CisgICAgZ19zZWVk
ID0gZ19zZWVkICsgKGdfc2VlZCAqIGdfc2VlZCB8IDUpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oZ19zZWVkID4+IDMyKTsKK30KKworfQorI2VuZGlmCiAKIGRvdWJsZSByYW5k
b21OdW1iZXIoKQogewogI2lmIFVTRShPU19SQU5ET01ORVNTKQogICAgIHVpbnQzMl90IGJpdHMg
PSBjcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlcigpOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxkb3VibGU+KGJpdHMpIC8gKHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0
czx1aW50MzJfdD46Om1heCgpKSArIDEuMCk7CiAjZWxzZQotICAgIC8vIFdpdGhvdXQgT1NfUkFO
RE9NTkVTUywgd2UgZmFsbCBiYWNrIHRvIG90aGVyIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9ycwot
ICAgIC8vIHRoYXQgbWlnaHQgbm90IGJlIGNyeXB0b2dyYXBoaWNhbGx5IHNlY3VyZS4gSWRlYWxs
eSwgbW9zdCBwb3J0cyB3b3VsZAotICAgIC8vIGRlZmluZSBVU0UoT1NfUkFORE9NTkVTUykuCi0K
LSNpZiBVU0UoTUVSU0VOTkVfVFdJU1RFUl8xOTkzNykKLSAgICByZXR1cm4gZ2VucmFuZF9yZXM1
MygpOwotI2Vsc2UKLSAgICB1aW50MzJfdCBwYXJ0MSA9IHJhbmQoKSAmIChSQU5EX01BWCAtIDEp
OwotICAgIHVpbnQzMl90IHBhcnQyID0gcmFuZCgpICYgKFJBTkRfTUFYIC0gMSk7Ci0gICAgLy8g
cmFuZCBvbmx5IHByb3ZpZGVzIDMxIGJpdHMsIGFuZCB0aGUgbG93IG9yZGVyIGJpdHMgb2YgdGhh
dCBhcmVuJ3QgdmVyeSByYW5kb20KLSAgICAvLyBzbyB3ZSB0YWtlIHRoZSBoaWdoIDI2IGJpdHMg
b2YgcGFydCAxLCBhbmQgdGhlIGhpZ2ggMjcgYml0cyBvZiBwYXJ0Mi4KLSAgICBwYXJ0MSA+Pj0g
NTsgLy8gZHJvcCB0aGUgbG93IDUgYml0cwotICAgIHBhcnQyID4+PSA0OyAvLyBkcm9wIHRoZSBs
b3cgNCBiaXRzCi0gICAgdWludDY0X3QgZnVsbFJhbmRvbSA9IHBhcnQxOwotICAgIGZ1bGxSYW5k
b20gPDw9IDI3OwotICAgIGZ1bGxSYW5kb20gfD0gcGFydDI7Ci0KLSAgICAvLyBNYXNrIG9mZiB0
aGUgbG93IDUzYml0cwotICAgIGZ1bGxSYW5kb20gJj0gKDFMTCA8PCA1MykgLSAxOwotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KGZ1bGxSYW5kb20pL3N0YXRpY19jYXN0PGRvdWJsZT4o
MUxMIDw8IDUzKTsKLSNlbmRpZgorICAgIHVpbnQzMl90IGJpdHMgPSBJbnRlcm5hbDo6cmFuZG9t
TnVtYmVyKCk7CiAjZW5kaWYKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihiaXRzKSAv
IChzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgo
KSkgKyAxLjApOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SYW5kb21OdW1i
ZXIuaCBiL1NvdXJjZS9XVEYvd3RmL1JhbmRvbU51bWJlci5oCmluZGV4IDc2YjIyMzU4MmNiYmE2
MWUzMGNkNDg0MTI1NzMzYTYxMTAxMGMyM2IuLjM2MmJlNjA0YWJiOTliNTM1MzIzOTM2MTk4Mjlh
NjVkNjdjYWMyNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JhbmRvbU51bWJlci5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1JhbmRvbU51bWJlci5oCkBAIC0yOCw5ICsyOCwxNSBAQAogCiBu
YW1lc3BhY2UgV1RGIHsKIAotICAgIC8vIFJldHVybnMgYSBwc2V1ZG8tcmFuZG9tIG51bWJlciBp
biB0aGUgcmFuZ2UgWzAsIDEpLCBhdHRlbXB0cyB0byBiZQotICAgIC8vIGNyeXB0b2dyYXBoaWNh
bGx5IHNlY3VyZSBpZiBwb3NzaWJsZSBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtCi0gICAgV1RGX0VY
UE9SVF9QUklWQVRFIGRvdWJsZSByYW5kb21OdW1iZXIoKTsKKyNpZiAhVVNFKE9TX1JBTkRPTU5F
U1MpCituYW1lc3BhY2UgSW50ZXJuYWwgewordm9pZCBpbml0aWFsaXplUmFuZG9tTnVtYmVyKHVp
bnQ2NF90KTsKK30KKyNlbmRpZgorCisvLyBSZXR1cm5zIGEgcHNldWRvLXJhbmRvbSBudW1iZXIg
aW4gdGhlIHJhbmdlIFswLCAxKSwgYXR0ZW1wdHMgdG8gYmUKKy8vIGNyeXB0b2dyYXBoaWNhbGx5
IHNlY3VyZSBpZiBwb3NzaWJsZSBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtCitXVEZfRVhQT1JUX1BS
SVZBVEUgZG91YmxlIHJhbmRvbU51bWJlcigpOwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1JhbmRvbU51bWJlclNlZWQuaCBiL1NvdXJjZS9XVEYvd3RmL1JhbmRvbU51bWJlclNl
ZWQuaAppbmRleCBiNTU0N2JlY2IyM2VmNDc2MzljMzI2YWEzMjk0MDYyMmEwNTE0MWM2Li44NDYy
Y2E5MDcyYzBkYTkwOGJiZWI2MjM2YTU2MWVjY2Q3NmQ4ZDM2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9SYW5kb21OdW1iZXJTZWVkLmgKKysrIGIvU291cmNlL1dURi93dGYvUmFuZG9tTnVt
YmVyU2VlZC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFdURl9SYW5kb21OdW1iZXJTZWVk
X2gKICNkZWZpbmUgV1RGX1JhbmRvbU51bWJlclNlZWRfaAogCisjaW5jbHVkZSAiUmFuZG9tTnVt
YmVyLmgiCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8dGltZS5oPgogCkBAIC0zOCwx
MyArMzksNiBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmCiAKLSNpZiBVU0UoTUVSU0VO
TkVfVFdJU1RFUl8xOTkzNykKLWV4dGVybiAiQyIgewotdm9pZCBpbml0X2J5X2FycmF5KHVuc2ln
bmVkIGxvbmcgaW5pdF9rZXlbXSxpbnQga2V5X2xlbmd0aCk7Ci19Ci0jZW5kaWYKLQotLy8gSW50
ZXJuYWwgSmF2YVNjcmlwdENvcmUgdXNhZ2Ugb25seQogbmFtZXNwYWNlIFdURiB7CiAKIGlubGlu
ZSB2b2lkIGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKQpAQCAtNjUsMTQgKzU5LDkg
QEAgaW5saW5lIHZvaWQgaW5pdGlhbGl6ZVJhbmRvbU51bWJlckdlbmVyYXRvcigpCiAgICAgc3Jh
bmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRpbWUoMCkpKTsKICNlbmRpZgogCi0jaWYgVVNFKE1F
UlNFTk5FX1RXSVNURVJfMTk5MzcpCi0gICAgLy8gdXNlIHJhbmQoKSB0byBpbml0aWFsaXplIHRo
ZSBNZXJzZW5uZSBUd2lzdGVyIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgotICAgIHVuc2lnbmVk
IGxvbmcgaW5pdGlhbGl6YXRpb25CdWZmZXJbNF07Ci0gICAgaW5pdGlhbGl6YXRpb25CdWZmZXJb
MF0gPSAocmFuZCgpIDw8IDE2KSB8IHJhbmQoKTsKLSAgICBpbml0aWFsaXphdGlvbkJ1ZmZlclsx
XSA9IChyYW5kKCkgPDwgMTYpIHwgcmFuZCgpOwotICAgIGluaXRpYWxpemF0aW9uQnVmZmVyWzJd
ID0gKHJhbmQoKSA8PCAxNikgfCByYW5kKCk7Ci0gICAgaW5pdGlhbGl6YXRpb25CdWZmZXJbM10g
PSAocmFuZCgpIDw8IDE2KSB8IHJhbmQoKTsKLSAgICBpbml0X2J5X2FycmF5KGluaXRpYWxpemF0
aW9uQnVmZmVyLCA0KTsKKyNpZiAhVVNFKE9TX1JBTkRPTU5FU1MpCisgICAgdWludDY0X3Qgc2Vl
ZCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihyYW5kKCkpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KHJhbmQoKSk7CisgICAgSW50ZXJuYWw6OmluaXRpYWxpemVSYW5kb21OdW1iZXIoc2Vl
ZCk7CiAjZW5kaWYKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191672</attachid>
            <date>2013-03-06 00:29:21 -0800</date>
            <delta_ts>2013-03-07 20:54:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111533-20130306002534.patch</filename>
            <type>text/plain</type>
            <size>13811</size>
            <attacher name="Andrew Bortz">andrew</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0ODczCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9DaGFuZ2VMb2cKaW5kZXggMzZhNGU5MGFl
Mzc0ZWZhOTc1YTgzMmY2YjU4MjhlZDJhYmU4OTY0Yy4uMzM3NmYyNWVjM2IyZGRjNWVkOWE3OWYw
MzEzOWNiZjhjZDRiODE2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEz
LTAzLTA2ICBBbmRyZXcgQm9ydHogIDxhbmRyZXdAYWJvcnR6Lm5ldD4KKworICAgICAgICBSZXBs
YWNlIE1lcnNlbm5lIFR3aXN0ZXIgUk5HIHdpdGggYSBzaW1wbGUgYnV0IGZhc3QgUk5HCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTE1MzMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNvZGUgaXMg
bm8gbG9uZ2VyIHVzZWQuCisKKyAgICAgICAgKiBtdDE5OTM3YXIuYzogUmVtb3ZlZC4KKwogMjAx
My0wMi0yMCAgUm9nZXIgRm9uZyAgPHJvZ2VyX2ZvbmdAYXBwbGUuY29tPgogCiAgICAgICAgR2V0
IFZTMjAxMCBTb2x1dGlvbiBCJkkgcmVhZHkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDI0MGYxMzk4NjljMTdjZDhiZjE0MDY1
YzhhMGIxODc0NTkzMmQ0MzAuLjkwY2UzYzQ2OGU2NDMwMWY0MjdhNWVhNTdlNmFjM2NkM2QzMzhi
ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTMtMDMtMDYgIEFuZHJldyBCb3J0eiAgPGFuZHJl
d0BhYm9ydHoubmV0PgorCisgICAgICAgIFJlcGxhY2UgTWVyc2VubmUgVHdpc3RlciBSTkcgd2l0
aCBhIHNpbXBsZSBidXQgZmFzdCBSTkcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExMTUzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6IE1lcnNlbm5lIFR3aXN0ZXIgZGVmaW5l
cyBhcmUgbm8gbG9uZ2VyIG5lZWRlZAorICAgICAgICAqIHd0Zi9SYW5kb21OdW1iZXIuY3BwOgor
ICAgICAgICAoV1RGOjpJbnRlcm5hbDo6aW5pdGlhbGl6ZVJhbmRvbU51bWJlcik6IEluaXRpYWxp
emUgdGhlIHNlZWQgb2YgdGhlIFJORworICAgICAgICAoV1RGOjpJbnRlcm5hbDo6cmFuZG9tTnVt
YmVyKTogSW5zdGVhZCBvZiB1c2luZyB0aGUgTWVyc2VubmUgVHdpc3Rlciwgd2UKKyAgICAgICAg
dXNlIHRoaXMgcmVhbGx5IHNpbXBsZSwgcmVhbGx5IGZhc3QgYnV0IHN0YXRpc3RpY2FsbHkgc3Ry
b25nIFJORyB3aXRoIGEKKyAgICAgICAgZ3VhcmFudGVlZCBjeWNsZSBvZiAyXjY0LgorICAgICAg
ICAoV1RGOjpyYW5kb21OdW1iZXIpOiBXZSBkb24ndCBuZWVkIHRvIGZhbGwgYmFjayBvbiBhIG5v
bi1NZXJzZW5uZS1iYXNlZAorICAgICAgICBSTkcgYW55bW9yZSwgc28gdGhpcyBjb2RlIGlzIGdy
ZWF0bHkgc2ltcGxpZmllZC4KKyAgICAgICAgKiB3dGYvUmFuZG9tTnVtYmVyLmg6CisgICAgICAg
ICogd3RmL1JhbmRvbU51bWJlclNlZWQuaDoKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZVJhbmRv
bU51bWJlckdlbmVyYXRvcik6IFRoaXMgY29kZSBpcyBubyBsb25nZXIgbmVlZGVkLgorICAgICAg
ICBBZGRpdGlvbmFsbHksIHRoZSBjb2RlIGhhZCBhbiBlcnJvciwgc2luY2UgcmFuZCgpIHJldHVy
bnMgMzItYml0cywgc28gZWFjaAorICAgICAgICBpbml0aWFsaXphdGlvbkJ1ZmZlcidzIHVwcGVy
IDE2LWJpdHMgaGFzIG1vcmUgYml0cyBzZXQgdGhhbiByYW5kb20uCisKIDIwMTMtMDMtMDUgIFJ5
dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIEJ1aWxk
IGJyZWFrIHdpdGggbGF0ZXN0IEVGTCBsaWJyYXJpZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L210MTk5Mzdhci5jIGIvU291cmNlL1RoaXJkUGFydHkvbXQxOTkzN2FyLmMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3MTU5NThkMTJmYjE5MGViOGVjMTU4YTM5ZTYzMWMy
YTM0ZmI4NzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbXQxOTkzN2FyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAs
MCBAQAotLyoKLSAgIEEgQy1wcm9ncmFtIGZvciBNVDE5OTM3LCB3aXRoIGluaXRpYWxpemF0aW9u
IGltcHJvdmVkIDIwMDIvMS8yNi4KLSAgIENvZGVkIGJ5IFRha3VqaSBOaXNoaW11cmEgYW5kIE1h
a290byBNYXRzdW1vdG8uCi0KLSAgIEJlZm9yZSB1c2luZywgaW5pdGlhbGl6ZSB0aGUgc3RhdGUg
YnkgdXNpbmcgaW5pdF9nZW5yYW5kKHNlZWQpCi0gICBvciBpbml0X2J5X2FycmF5KGluaXRfa2V5
LCBrZXlfbGVuZ3RoKS4KLQotICAgQ29weXJpZ2h0IChDKSAxOTk3IC0gMjAwMiwgTWFrb3RvIE1h
dHN1bW90byBhbmQgVGFrdWppIE5pc2hpbXVyYSwKLSAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0K
LSAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gICBhcmUgbWV0OgotCi0gICAgIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLQotICAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
ICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0KLSAgICAgMy4gVGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
cnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQotICAgICAgICBwcm9kdWN0
cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4KLSAgICAgICAgcGVybWlzc2lvbi4KLQotICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICAgIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAg
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCi0gICBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgotICAgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcKLSAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUwotICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotICAgQW55IGZlZWRiYWNrIGlzIHZlcnkg
d2VsY29tZS4KLSAgIGh0dHA6Ly93d3cubWF0aC5zY2kuaGlyb3NoaW1hLXUuYWMuanAvfm0tbWF0
L01UL2VtdC5odG1sCi0gICBlbWFpbDogbS1tYXQgQCBtYXRoLnNjaS5oaXJvc2hpbWEtdS5hYy5q
cCAocmVtb3ZlIHNwYWNlKQotKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLS8qIFBlcmlvZCBw
YXJhbWV0ZXJzICovCi0jZGVmaW5lIE4gNjI0Ci0jZGVmaW5lIE0gMzk3Ci0jZGVmaW5lIE1BVFJJ
WF9BIDB4OTkwOGIwZGZVTCAgIC8qIGNvbnN0YW50IHZlY3RvciBhICovCi0jZGVmaW5lIFVQUEVS
X01BU0sgMHg4MDAwMDAwMFVMIC8qIG1vc3Qgc2lnbmlmaWNhbnQgdy1yIGJpdHMgKi8KLSNkZWZp
bmUgTE9XRVJfTUFTSyAweDdmZmZmZmZmVUwgLyogbGVhc3Qgc2lnbmlmaWNhbnQgciBiaXRzICov
Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG10W05dOyAvKiB0aGUgYXJyYXkgZm9yIHRoZSBzdGF0
ZSB2ZWN0b3IgICovCi1zdGF0aWMgaW50IG10aT1OKzE7IC8qIG10aT09TisxIG1lYW5zIG10W05d
IGlzIG5vdCBpbml0aWFsaXplZCAqLwotCi0vKiBpbml0aWFsaXplcyBtdFtOXSB3aXRoIGEgc2Vl
ZCAqLwotdm9pZCBpbml0X2dlbnJhbmQodW5zaWduZWQgbG9uZyBzKQotewotICAgIG10WzBdPSBz
ICYgMHhmZmZmZmZmZlVMOwotICAgIGZvciAobXRpPTE7IG10aTxOOyBtdGkrKykgewotICAgICAg
ICBtdFttdGldID0gKDE4MTI0MzMyNTNVTCAqIChtdFttdGktMV0gXiAobXRbbXRpLTFdID4+IDMw
KSkgKyBtdGkpOwotICAgICAgICAvKiBTZWUgS251dGggVEFPQ1AgVm9sMi4gM3JkIEVkLiBQLjEw
NiBmb3IgbXVsdGlwbGllci4gKi8KLSAgICAgICAgLyogSW4gdGhlIHByZXZpb3VzIHZlcnNpb25z
LCBNU0JzIG9mIHRoZSBzZWVkIGFmZmVjdCAgICovCi0gICAgICAgIC8qIG9ubHkgTVNCcyBvZiB0
aGUgYXJyYXkgbXRbXS4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAvKiAyMDAy
LzAxLzA5IG1vZGlmaWVkIGJ5IE1ha290byBNYXRzdW1vdG8gICAgICAgICAgICAgKi8KLSAgICAg
ICAgbXRbbXRpXSAmPSAweGZmZmZmZmZmVUw7Ci0gICAgICAgIC8qIGZvciA+MzIgYml0IG1hY2hp
bmVzICovCi0gICAgfQotfQotCi0vKiBpbml0aWFsaXplIGJ5IGFuIGFycmF5IHdpdGggYXJyYXkt
bGVuZ3RoICovCi0vKiBpbml0X2tleSBpcyB0aGUgYXJyYXkgZm9yIGluaXRpYWxpemluZyBrZXlz
ICovCi0vKiBrZXlfbGVuZ3RoIGlzIGl0cyBsZW5ndGggKi8KLS8qIHNsaWdodCBjaGFuZ2UgZm9y
IEMrKywgMjAwNC8yLzI2ICovCi12b2lkIGluaXRfYnlfYXJyYXkodW5zaWduZWQgbG9uZyBpbml0
X2tleVtdLGludCBrZXlfbGVuZ3RoKQotewotICAgIGludCBpLCBqLCBrOwotICAgIGluaXRfZ2Vu
cmFuZCgxOTY1MDIxOFVMKTsKLSAgICBpPTE7IGo9MDsKLSAgICBrID0gKE4+a2V5X2xlbmd0aCA/
IE4gOiBrZXlfbGVuZ3RoKTsKLSAgICBmb3IgKDsgazsgay0tKSB7Ci0gICAgICAgIG10W2ldID0g
KG10W2ldIF4gKChtdFtpLTFdIF4gKG10W2ktMV0gPj4gMzApKSAqIDE2NjQ1MjVVTCkpCi0gICAg
ICAgICAgKyBpbml0X2tleVtqXSArIGo7IC8qIG5vbiBsaW5lYXIgKi8KLSAgICAgICAgbXRbaV0g
Jj0gMHhmZmZmZmZmZlVMOyAvKiBmb3IgV09SRFNJWkUgPiAzMiBtYWNoaW5lcyAqLwotICAgICAg
ICBpKys7IGorKzsKLSAgICAgICAgaWYgKGk+PU4pIHsgbXRbMF0gPSBtdFtOLTFdOyBpPTE7IH0K
LSAgICAgICAgaWYgKGo+PWtleV9sZW5ndGgpIGo9MDsKLSAgICB9Ci0gICAgZm9yIChrPU4tMTsg
azsgay0tKSB7Ci0gICAgICAgIG10W2ldID0gKG10W2ldIF4gKChtdFtpLTFdIF4gKG10W2ktMV0g
Pj4gMzApKSAqIDE1NjYwODM5NDFVTCkpCi0gICAgICAgICAgLSBpOyAvKiBub24gbGluZWFyICov
Ci0gICAgICAgIG10W2ldICY9IDB4ZmZmZmZmZmZVTDsgLyogZm9yIFdPUkRTSVpFID4gMzIgbWFj
aGluZXMgKi8KLSAgICAgICAgaSsrOwotICAgICAgICBpZiAoaT49TikgeyBtdFswXSA9IG10W04t
MV07IGk9MTsgfQotICAgIH0KLQotICAgIG10WzBdID0gMHg4MDAwMDAwMFVMOyAvKiBNU0IgaXMg
MTsgYXNzdXJpbmcgbm9uLXplcm8gaW5pdGlhbCBhcnJheSAqLwotfQotCi0vKiBnZW5lcmF0ZXMg
YSByYW5kb20gbnVtYmVyIG9uIFswLDB4ZmZmZmZmZmZdLWludGVydmFsICovCi11bnNpZ25lZCBs
b25nIGdlbnJhbmRfaW50MzIodm9pZCkKLXsKLSAgICB1bnNpZ25lZCBsb25nIHk7Ci0gICAgc3Rh
dGljIHVuc2lnbmVkIGxvbmcgbWFnMDFbMl09ezB4MFVMLCBNQVRSSVhfQX07Ci0gICAgLyogbWFn
MDFbeF0gPSB4ICogTUFUUklYX0EgIGZvciB4PTAsMSAqLwotCi0gICAgaWYgKG10aSA+PSBOKSB7
IC8qIGdlbmVyYXRlIE4gd29yZHMgYXQgb25lIHRpbWUgKi8KLSAgICAgICAgaW50IGtrOwotCi0g
ICAgICAgIGlmIChtdGkgPT0gTisxKSAgIC8qIGlmIGluaXRfZ2VucmFuZCgpIGhhcyBub3QgYmVl
biBjYWxsZWQsICovCi0gICAgICAgICAgICBpbml0X2dlbnJhbmQoNTQ4OVVMKTsgLyogYSBkZWZh
dWx0IGluaXRpYWwgc2VlZCBpcyB1c2VkICovCi0KLSAgICAgICAgZm9yIChraz0wO2trPE4tTTtr
aysrKSB7Ci0gICAgICAgICAgICB5ID0gKG10W2trXSZVUFBFUl9NQVNLKXwobXRba2srMV0mTE9X
RVJfTUFTSyk7Ci0gICAgICAgICAgICBtdFtra10gPSBtdFtraytNXSBeICh5ID4+IDEpIF4gbWFn
MDFbeSAmIDB4MVVMXTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKDtrazxOLTE7a2srKykgewot
ICAgICAgICAgICAgeSA9IChtdFtra10mVVBQRVJfTUFTSyl8KG10W2trKzFdJkxPV0VSX01BU0sp
OwotICAgICAgICAgICAgbXRba2tdID0gbXRba2srKE0tTildIF4gKHkgPj4gMSkgXiBtYWcwMVt5
ICYgMHgxVUxdOwotICAgICAgICB9Ci0gICAgICAgIHkgPSAobXRbTi0xXSZVUFBFUl9NQVNLKXwo
bXRbMF0mTE9XRVJfTUFTSyk7Ci0gICAgICAgIG10W04tMV0gPSBtdFtNLTFdIF4gKHkgPj4gMSkg
XiBtYWcwMVt5ICYgMHgxVUxdOwotCi0gICAgICAgIG10aSA9IDA7Ci0gICAgfQotCi0gICAgeSA9
IG10W210aSsrXTsKLQotICAgIC8qIFRlbXBlcmluZyAqLwotICAgIHkgXj0gKHkgPj4gMTEpOwot
ICAgIHkgXj0gKHkgPDwgNykgJiAweDlkMmM1NjgwVUw7Ci0gICAgeSBePSAoeSA8PCAxNSkgJiAw
eGVmYzYwMDAwVUw7Ci0gICAgeSBePSAoeSA+PiAxOCk7Ci0KLSAgICByZXR1cm4geTsKLX0KLQot
LyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwweDdmZmZmZmZmXS1pbnRlcnZhbCAq
LwotbG9uZyBnZW5yYW5kX2ludDMxKHZvaWQpCi17Ci0gICAgcmV0dXJuIChsb25nKShnZW5yYW5k
X2ludDMyKCk+PjEpOwotfQotCi0vKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uIFswLDFd
LXJlYWwtaW50ZXJ2YWwgKi8KLWRvdWJsZSBnZW5yYW5kX3JlYWwxKHZvaWQpCi17Ci0gICAgcmV0
dXJuIGdlbnJhbmRfaW50MzIoKSooMS4wLzQyOTQ5NjcyOTUuMCk7Ci0gICAgLyogZGl2aWRlZCBi
eSAyXjMyLTEgKi8KLX0KLQotLyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwxKS1y
ZWFsLWludGVydmFsICovCi1kb3VibGUgZ2VucmFuZF9yZWFsMih2b2lkKQotewotICAgIHJldHVy
biBnZW5yYW5kX2ludDMyKCkqKDEuMC80Mjk0OTY3Mjk2LjApOwotICAgIC8qIGRpdmlkZWQgYnkg
Ml4zMiAqLwotfQotCi0vKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uICgwLDEpLXJlYWwt
aW50ZXJ2YWwgKi8KLWRvdWJsZSBnZW5yYW5kX3JlYWwzKHZvaWQpCi17Ci0gICAgcmV0dXJuICgo
KGRvdWJsZSlnZW5yYW5kX2ludDMyKCkpICsgMC41KSooMS4wLzQyOTQ5NjcyOTYuMCk7Ci0gICAg
LyogZGl2aWRlZCBieSAyXjMyICovCi19Ci0KLS8qIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIg
b24gWzAsMSkgd2l0aCA1My1iaXQgcmVzb2x1dGlvbiovCi1kb3VibGUgZ2VucmFuZF9yZXM1Myh2
b2lkKQotewotICAgIHVuc2lnbmVkIGxvbmcgYT1nZW5yYW5kX2ludDMyKCk+PjUsIGI9Z2VucmFu
ZF9pbnQzMigpPj42OwotICAgIHJldHVybihhKjY3MTA4ODY0LjArYikqKDEuMC85MDA3MTk5MjU0
NzQwOTkyLjApOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaCBiL1Nv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKaW5kZXggZWM0N2MzOWY0MTc0Zjc5ZjBmYmVlODg0ZDA4
OGVjMGQyOTMxOWU5NC4uOTMwMWYxMDU1MTVkMTRlNmNkMjc1MTUwYWVlZGUwMGQyMmQ0Y2Q5NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybS5oCkBAIC01MDIsNyArNTAyLDYgQEAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0o
QkxBQ0tCRVJSWSkKLSNkZWZpbmUgV1RGX1VTRV9NRVJTRU5ORV9UV0lTVEVSXzE5OTM3IDEKICNk
ZWZpbmUgV1RGX1VTRV9TS0lBIDEKICNkZWZpbmUgV1RGX1VTRV9MT1dfUVVBTElUWV9JTUFHRV9J
TlRFUlBPTEFUSU9OIDEKICNkZWZpbmUgV1RGX1VTRV9MT1dfUVVBTElUWV9JTUFHRV9OT19KUEVH
X0RJVEhFUklORyAxCkBAIC01MTQsMTEgKzUxMyw2IEBACiAjZGVmaW5lIEVOQUJMRV9HTE9CQUxf
RkFTVE1BTExPQ19ORVcgMAogI2VuZGlmCiAKLQotI2lmIE9TKFdJTkNFKQotI2RlZmluZSBXVEZf
VVNFX01FUlNFTk5FX1RXSVNURVJfMTk5MzcgMQotI2VuZGlmCi0KIC8qIE9uIFdpbmRvd3MsIHVz
ZSBRdWVyeVBlcmZvcm1hbmNlQ291bnRlciBieSBkZWZhdWx0ICovCiAjaWYgT1MoV0lORE9XUykK
ICNkZWZpbmUgV1RGX1VTRV9RVUVSWV9QRVJGT1JNQU5DRV9DT1VOVEVSICAxCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9SYW5kb21OdW1iZXIuY3BwIGIvU291cmNlL1dURi93dGYvUmFuZG9t
TnVtYmVyLmNwcAppbmRleCAwNjA3NGVkOWYwYTdiOTJkODE0OTA3YzJjNWExOWY2ZmZjNTE4ZDU1
Li44ZTQ0YWI3MWY2ZjE0ZTZjNGZiZDc3Njc5NzNiMTM4NjIwY2I3YjlhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9SYW5kb21OdW1iZXIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JhbmRv
bU51bWJlci5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAgICAo
QykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChDKSAyMDEzIEFuZHJldyBC
b3J0ei4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzUsNDIgKzM2LDQyIEBACiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8c3Rk
bGliLmg+CiAKLSNpZiBVU0UoTUVSU0VOTkVfVFdJU1RFUl8xOTkzNykKLWV4dGVybiAiQyIgewot
I2luY2x1ZGUgIm10MTk5Mzdhci5jIgorbmFtZXNwYWNlIFdURiB7CisKKyNpZiAhVVNFKE9TX1JB
TkRPTU5FU1MpCituYW1lc3BhY2UgSW50ZXJuYWwgeworCitzdGF0aWMgdWludDY0X3QgZ19zdGF0
ZTsKKwordm9pZCBpbml0aWFsaXplUmFuZG9tTnVtYmVyKHVpbnQ2NF90IHNlZWQpCit7CisgICAg
Z19zdGF0ZSA9IHNlZWQ7CiB9Ci0jZW5kaWYKIAotbmFtZXNwYWNlIFdURiB7CisvLyBUaGlzIFJO
RyBjb21lcyBmcm9tOiBLbGltb3YsIEEuIGFuZCBTaGFtaXIsIEEuLCAiQSBOZXcgQ2xhc3Mgb2Yg
CisvLyBJbnZlcnRpYmxlIE1hcHBpbmdzIiwgQ3J5cHRvZ3JhcGhpYyBIYXJkd2FyZSBhbmQgRW1i
ZWRkZWQgU3lzdGVtcyAyMDAyLAorLy8gaHR0cDovL2RsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lk
PTc1Mjc0MQorLy8KKy8vIFZlcnkgZmFzdCwgdmVyeSBzaW1wbGUsIGFuZCBwYXNzZXMgRGllaGFy
ZCBhbmQgb3RoZXIgZ29vZCBzdGF0aXN0aWNhbAorLy8gdGVzdHMgYXMgc3Ryb25nbHkgYXMgY3J5
cHRvZ3JhcGhpY2FsbHktc2VjdXJlIFJOR3MgKGJ1dCBpcyBub3QgaXRzZWxmCisvLyBjcnlwdG9n
cmFwaGljYWxseS1zZWN1cmUpLgordWludDMyX3QgcmFuZG9tTnVtYmVyKCkKK3sKKyAgICBnX3N0
YXRlICs9ICgoZ19zdGF0ZSAqIGdfc3RhdGUpIHwgNSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHVpbnQzMl90PihnX3N0YXRlID4+IDMyKTsKK30KKworfQorI2VuZGlmCiAKIGRvdWJsZSByYW5k
b21OdW1iZXIoKQogewogI2lmIFVTRShPU19SQU5ET01ORVNTKQogICAgIHVpbnQzMl90IGJpdHMg
PSBjcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlcigpOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxkb3VibGU+KGJpdHMpIC8gKHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0
czx1aW50MzJfdD46Om1heCgpKSArIDEuMCk7CiAjZWxzZQotICAgIC8vIFdpdGhvdXQgT1NfUkFO
RE9NTkVTUywgd2UgZmFsbCBiYWNrIHRvIG90aGVyIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9ycwot
ICAgIC8vIHRoYXQgbWlnaHQgbm90IGJlIGNyeXB0b2dyYXBoaWNhbGx5IHNlY3VyZS4gSWRlYWxs
eSwgbW9zdCBwb3J0cyB3b3VsZAotICAgIC8vIGRlZmluZSBVU0UoT1NfUkFORE9NTkVTUykuCi0K
LSNpZiBVU0UoTUVSU0VOTkVfVFdJU1RFUl8xOTkzNykKLSAgICByZXR1cm4gZ2VucmFuZF9yZXM1
MygpOwotI2Vsc2UKLSAgICB1aW50MzJfdCBwYXJ0MSA9IHJhbmQoKSAmIChSQU5EX01BWCAtIDEp
OwotICAgIHVpbnQzMl90IHBhcnQyID0gcmFuZCgpICYgKFJBTkRfTUFYIC0gMSk7Ci0gICAgLy8g
cmFuZCBvbmx5IHByb3ZpZGVzIDMxIGJpdHMsIGFuZCB0aGUgbG93IG9yZGVyIGJpdHMgb2YgdGhh
dCBhcmVuJ3QgdmVyeSByYW5kb20KLSAgICAvLyBzbyB3ZSB0YWtlIHRoZSBoaWdoIDI2IGJpdHMg
b2YgcGFydCAxLCBhbmQgdGhlIGhpZ2ggMjcgYml0cyBvZiBwYXJ0Mi4KLSAgICBwYXJ0MSA+Pj0g
NTsgLy8gZHJvcCB0aGUgbG93IDUgYml0cwotICAgIHBhcnQyID4+PSA0OyAvLyBkcm9wIHRoZSBs
b3cgNCBiaXRzCi0gICAgdWludDY0X3QgZnVsbFJhbmRvbSA9IHBhcnQxOwotICAgIGZ1bGxSYW5k
b20gPDw9IDI3OwotICAgIGZ1bGxSYW5kb20gfD0gcGFydDI7Ci0KLSAgICAvLyBNYXNrIG9mZiB0
aGUgbG93IDUzYml0cwotICAgIGZ1bGxSYW5kb20gJj0gKDFMTCA8PCA1MykgLSAxOwotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KGZ1bGxSYW5kb20pL3N0YXRpY19jYXN0PGRvdWJsZT4o
MUxMIDw8IDUzKTsKLSNlbmRpZgorICAgIHVpbnQzMl90IGJpdHMgPSBJbnRlcm5hbDo6cmFuZG9t
TnVtYmVyKCk7CiAjZW5kaWYKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihiaXRzKSAv
IChzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgo
KSkgKyAxLjApOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SYW5kb21OdW1i
ZXIuaCBiL1NvdXJjZS9XVEYvd3RmL1JhbmRvbU51bWJlci5oCmluZGV4IDc2YjIyMzU4MmNiYmE2
MWUzMGNkNDg0MTI1NzMzYTYxMTAxMGMyM2IuLjM2MmJlNjA0YWJiOTliNTM1MzIzOTM2MTk4Mjlh
NjVkNjdjYWMyNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JhbmRvbU51bWJlci5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1JhbmRvbU51bWJlci5oCkBAIC0yOCw5ICsyOCwxNSBAQAogCiBu
YW1lc3BhY2UgV1RGIHsKIAotICAgIC8vIFJldHVybnMgYSBwc2V1ZG8tcmFuZG9tIG51bWJlciBp
biB0aGUgcmFuZ2UgWzAsIDEpLCBhdHRlbXB0cyB0byBiZQotICAgIC8vIGNyeXB0b2dyYXBoaWNh
bGx5IHNlY3VyZSBpZiBwb3NzaWJsZSBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtCi0gICAgV1RGX0VY
UE9SVF9QUklWQVRFIGRvdWJsZSByYW5kb21OdW1iZXIoKTsKKyNpZiAhVVNFKE9TX1JBTkRPTU5F
U1MpCituYW1lc3BhY2UgSW50ZXJuYWwgewordm9pZCBpbml0aWFsaXplUmFuZG9tTnVtYmVyKHVp
bnQ2NF90KTsKK30KKyNlbmRpZgorCisvLyBSZXR1cm5zIGEgcHNldWRvLXJhbmRvbSBudW1iZXIg
aW4gdGhlIHJhbmdlIFswLCAxKSwgYXR0ZW1wdHMgdG8gYmUKKy8vIGNyeXB0b2dyYXBoaWNhbGx5
IHNlY3VyZSBpZiBwb3NzaWJsZSBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtCitXVEZfRVhQT1JUX1BS
SVZBVEUgZG91YmxlIHJhbmRvbU51bWJlcigpOwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1JhbmRvbU51bWJlclNlZWQuaCBiL1NvdXJjZS9XVEYvd3RmL1JhbmRvbU51bWJlclNl
ZWQuaAppbmRleCBiNTU0N2JlY2IyM2VmNDc2MzljMzI2YWEzMjk0MDYyMmEwNTE0MWM2Li44NDYy
Y2E5MDcyYzBkYTkwOGJiZWI2MjM2YTU2MWVjY2Q3NmQ4ZDM2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9SYW5kb21OdW1iZXJTZWVkLmgKKysrIGIvU291cmNlL1dURi93dGYvUmFuZG9tTnVt
YmVyU2VlZC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFdURl9SYW5kb21OdW1iZXJTZWVk
X2gKICNkZWZpbmUgV1RGX1JhbmRvbU51bWJlclNlZWRfaAogCisjaW5jbHVkZSAiUmFuZG9tTnVt
YmVyLmgiCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8dGltZS5oPgogCkBAIC0zOCwx
MyArMzksNiBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmCiAKLSNpZiBVU0UoTUVSU0VO
TkVfVFdJU1RFUl8xOTkzNykKLWV4dGVybiAiQyIgewotdm9pZCBpbml0X2J5X2FycmF5KHVuc2ln
bmVkIGxvbmcgaW5pdF9rZXlbXSxpbnQga2V5X2xlbmd0aCk7Ci19Ci0jZW5kaWYKLQotLy8gSW50
ZXJuYWwgSmF2YVNjcmlwdENvcmUgdXNhZ2Ugb25seQogbmFtZXNwYWNlIFdURiB7CiAKIGlubGlu
ZSB2b2lkIGluaXRpYWxpemVSYW5kb21OdW1iZXJHZW5lcmF0b3IoKQpAQCAtNjUsMTQgKzU5LDkg
QEAgaW5saW5lIHZvaWQgaW5pdGlhbGl6ZVJhbmRvbU51bWJlckdlbmVyYXRvcigpCiAgICAgc3Jh
bmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRpbWUoMCkpKTsKICNlbmRpZgogCi0jaWYgVVNFKE1F
UlNFTk5FX1RXSVNURVJfMTk5MzcpCi0gICAgLy8gdXNlIHJhbmQoKSB0byBpbml0aWFsaXplIHRo
ZSBNZXJzZW5uZSBUd2lzdGVyIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgotICAgIHVuc2lnbmVk
IGxvbmcgaW5pdGlhbGl6YXRpb25CdWZmZXJbNF07Ci0gICAgaW5pdGlhbGl6YXRpb25CdWZmZXJb
MF0gPSAocmFuZCgpIDw8IDE2KSB8IHJhbmQoKTsKLSAgICBpbml0aWFsaXphdGlvbkJ1ZmZlclsx
XSA9IChyYW5kKCkgPDwgMTYpIHwgcmFuZCgpOwotICAgIGluaXRpYWxpemF0aW9uQnVmZmVyWzJd
ID0gKHJhbmQoKSA8PCAxNikgfCByYW5kKCk7Ci0gICAgaW5pdGlhbGl6YXRpb25CdWZmZXJbM10g
PSAocmFuZCgpIDw8IDE2KSB8IHJhbmQoKTsKLSAgICBpbml0X2J5X2FycmF5KGluaXRpYWxpemF0
aW9uQnVmZmVyLCA0KTsKKyNpZiAhVVNFKE9TX1JBTkRPTU5FU1MpCisgICAgdWludDY0X3Qgc2Vl
ZCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihyYW5kKCkpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KHJhbmQoKSk7CisgICAgSW50ZXJuYWw6OmluaXRpYWxpemVSYW5kb21OdW1iZXIoc2Vl
ZCk7CiAjZW5kaWYKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192138</attachid>
            <date>2013-03-07 20:54:58 -0800</date>
            <delta_ts>2013-03-07 21:51:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111533-20130307205112.patch</filename>
            <type>text/plain</type>
            <size>13942</size>
            <attacher name="Andrew Bortz">andrew</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0ODczCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9DaGFuZ2VMb2cKaW5kZXggMzZhNGU5MGFl
Mzc0ZWZhOTc1YTgzMmY2YjU4MjhlZDJhYmU4OTY0Yy4uMzM3NmYyNWVjM2IyZGRjNWVkOWE3OWYw
MzEzOWNiZjhjZDRiODE2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEz
LTAzLTA2ICBBbmRyZXcgQm9ydHogIDxhbmRyZXdAYWJvcnR6Lm5ldD4KKworICAgICAgICBSZXBs
YWNlIE1lcnNlbm5lIFR3aXN0ZXIgUk5HIHdpdGggYSBzaW1wbGUgYnV0IGZhc3QgUk5HCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTE1MzMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNvZGUgaXMg
bm8gbG9uZ2VyIHVzZWQuCisKKyAgICAgICAgKiBtdDE5OTM3YXIuYzogUmVtb3ZlZC4KKwogMjAx
My0wMi0yMCAgUm9nZXIgRm9uZyAgPHJvZ2VyX2ZvbmdAYXBwbGUuY29tPgogCiAgICAgICAgR2V0
IFZTMjAxMCBTb2x1dGlvbiBCJkkgcmVhZHkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDI0MGYxMzk4NjljMTdjZDhiZjE0MDY1
YzhhMGIxODc0NTkzMmQ0MzAuLjRiMzFjZjllNWEwNTJiYzI3OWQzNDg5ZDRkY2M3ZmM1NGQ0YzE4
NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTMtMDMtMDYgIEFuZHJldyBCb3J0eiAgPGFuZHJl
d0BhYm9ydHoubmV0PgorCisgICAgICAgIFJlcGxhY2UgTWVyc2VubmUgVHdpc3RlciByYW5kb20g
bnVtYmVyIGdlbmVyYXRvciB3aXRoIGEgc2ltcGxlciBvbmUuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTE1MzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgbmV3IGdlbmVyYXRvciBpcyBvbmx5IGEg
c2luZ2xlIGxpbmUgbG9uZywgYnV0IHBhc3NlcyBhbGwgdGhlIERpZWhhcmQKKyAgICAgICAgc3Rh
dGlzdGljYWwgdGVzdHMgYW5kIHJ1bnMgfjN4IGZhc3RlciB0aGFuIHRoZSBNZXJzZW5uZSBUd2lz
dGVyLCB3aXRoIGEKKyAgICAgICAgZ3VhcmFudGVlZCBjeWNsZSBsZW5ndGggb2YgMl42NCBhbmQg
b25seSA4IGJ5dGVzIG9mIHN0YXRlLgorICAgICAgICAKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0u
aDogTWVyc2VubmUgVHdpc3RlciBkZWZpbmVzIGFyZSBubyBsb25nZXIgbmVlZGVkCisgICAgICAg
ICogd3RmL1JhbmRvbU51bWJlci5jcHA6CisgICAgICAgIChXVEY6OkludGVybmFsOjppbml0aWFs
aXplUmFuZG9tTnVtYmVyKTogU3RhdGUgaW5pdGlhbGl6YXRpb24KKyAgICAgICAgKFdURjo6SW50
ZXJuYWw6OnJhbmRvbU51bWJlcik6IEFjdHVhbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICAoV1RG
OjpyYW5kb21OdW1iZXIpOiBXZSBkb24ndCBuZWVkIHRvIGZhbGwgYmFjayBvbiByYW5kKCktYmFz
ZWQgZ2VuZXJhdG9yIGFueW1vcmUsCisgICAgICAgIHNvIHRoaXMgY29kZSBpcyBncmVhdGx5IHNp
bXBsaWZpZWQuCisgICAgICAgICogd3RmL1JhbmRvbU51bWJlci5oOgorICAgICAgICAqIHd0Zi9S
YW5kb21OdW1iZXJTZWVkLmg6CisgICAgICAgIChXVEY6OmluaXRpYWxpemVSYW5kb21OdW1iZXJH
ZW5lcmF0b3IpOiBUaGlzIGNvZGUgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKyAgICAgICAgQWRkaXRp
b25hbGx5LCB0aGUgY29kZSBoYWQgYW4gZXJyb3IsIHNpbmNlIHJhbmQoKSByZXR1cm5zIDMyLWJp
dHMsIHNvIGVhY2gKKyAgICAgICAgaW5pdGlhbGl6YXRpb25CdWZmZXIncyB1cHBlciAxNi1iaXRz
IGhhcyBtb3JlIGJpdHMgc2V0IHRoYW4gcmFuZG9tLgorCiAyMDEzLTAzLTA1ICBSeXVhbiBDaG9p
ICA8cnl1YW4uY2hvaUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXSBCdWlsZCBicmVhayB3
aXRoIGxhdGVzdCBFRkwgbGlicmFyaWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9t
dDE5OTM3YXIuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L210MTk5Mzdhci5jCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA0NzE1OTU4ZDEyZmIxOTBlYjhlYzE1OGEzOWU2MzFjMmEzNGZiODcw
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L210MTk5Mzdhci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTcwICswLDAgQEAKLS8q
Ci0gICBBIEMtcHJvZ3JhbSBmb3IgTVQxOTkzNywgd2l0aCBpbml0aWFsaXphdGlvbiBpbXByb3Zl
ZCAyMDAyLzEvMjYuCi0gICBDb2RlZCBieSBUYWt1amkgTmlzaGltdXJhIGFuZCBNYWtvdG8gTWF0
c3Vtb3RvLgotCi0gICBCZWZvcmUgdXNpbmcsIGluaXRpYWxpemUgdGhlIHN0YXRlIGJ5IHVzaW5n
IGluaXRfZ2VucmFuZChzZWVkKQotICAgb3IgaW5pdF9ieV9hcnJheShpbml0X2tleSwga2V5X2xl
bmd0aCkuCi0KLSAgIENvcHlyaWdodCAoQykgMTk5NyAtIDIwMDIsIE1ha290byBNYXRzdW1vdG8g
YW5kIFRha3VqaSBOaXNoaW11cmEsCi0gICBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gICBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICAgYXJlIG1ldDoKLQotICAgICAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0KLSAgICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotCi0gICAgIDMuIFRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBu
b3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKLSAgICAgICAgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCi0gICAg
ICAgIHBlcm1pc3Npb24uCi0KLSAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAgICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gICBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgotICAgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gICBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKLSAgIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi0g
ICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKLSAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLSAgIEFueSBmZWVkYmFjayBpcyB2ZXJ5IHdlbGNvbWUu
Ci0gICBodHRwOi8vd3d3Lm1hdGguc2NpLmhpcm9zaGltYS11LmFjLmpwL35tLW1hdC9NVC9lbXQu
aHRtbAotICAgZW1haWw6IG0tbWF0IEAgbWF0aC5zY2kuaGlyb3NoaW1hLXUuYWMuanAgKHJlbW92
ZSBzcGFjZSkKLSovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0vKiBQZXJpb2QgcGFyYW1ldGVy
cyAqLwotI2RlZmluZSBOIDYyNAotI2RlZmluZSBNIDM5NwotI2RlZmluZSBNQVRSSVhfQSAweDk5
MDhiMGRmVUwgICAvKiBjb25zdGFudCB2ZWN0b3IgYSAqLwotI2RlZmluZSBVUFBFUl9NQVNLIDB4
ODAwMDAwMDBVTCAvKiBtb3N0IHNpZ25pZmljYW50IHctciBiaXRzICovCi0jZGVmaW5lIExPV0VS
X01BU0sgMHg3ZmZmZmZmZlVMIC8qIGxlYXN0IHNpZ25pZmljYW50IHIgYml0cyAqLwotCi1zdGF0
aWMgdW5zaWduZWQgbG9uZyBtdFtOXTsgLyogdGhlIGFycmF5IGZvciB0aGUgc3RhdGUgdmVjdG9y
ICAqLwotc3RhdGljIGludCBtdGk9TisxOyAvKiBtdGk9PU4rMSBtZWFucyBtdFtOXSBpcyBub3Qg
aW5pdGlhbGl6ZWQgKi8KLQotLyogaW5pdGlhbGl6ZXMgbXRbTl0gd2l0aCBhIHNlZWQgKi8KLXZv
aWQgaW5pdF9nZW5yYW5kKHVuc2lnbmVkIGxvbmcgcykKLXsKLSAgICBtdFswXT0gcyAmIDB4ZmZm
ZmZmZmZVTDsKLSAgICBmb3IgKG10aT0xOyBtdGk8TjsgbXRpKyspIHsKLSAgICAgICAgbXRbbXRp
XSA9ICgxODEyNDMzMjUzVUwgKiAobXRbbXRpLTFdIF4gKG10W210aS0xXSA+PiAzMCkpICsgbXRp
KTsKLSAgICAgICAgLyogU2VlIEtudXRoIFRBT0NQIFZvbDIuIDNyZCBFZC4gUC4xMDYgZm9yIG11
bHRpcGxpZXIuICovCi0gICAgICAgIC8qIEluIHRoZSBwcmV2aW91cyB2ZXJzaW9ucywgTVNCcyBv
ZiB0aGUgc2VlZCBhZmZlY3QgICAqLwotICAgICAgICAvKiBvbmx5IE1TQnMgb2YgdGhlIGFycmF5
IG10W10uICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgLyogMjAwMi8wMS8wOSBt
b2RpZmllZCBieSBNYWtvdG8gTWF0c3Vtb3RvICAgICAgICAgICAgICovCi0gICAgICAgIG10W210
aV0gJj0gMHhmZmZmZmZmZlVMOwotICAgICAgICAvKiBmb3IgPjMyIGJpdCBtYWNoaW5lcyAqLwot
ICAgIH0KLX0KLQotLyogaW5pdGlhbGl6ZSBieSBhbiBhcnJheSB3aXRoIGFycmF5LWxlbmd0aCAq
LwotLyogaW5pdF9rZXkgaXMgdGhlIGFycmF5IGZvciBpbml0aWFsaXppbmcga2V5cyAqLwotLyog
a2V5X2xlbmd0aCBpcyBpdHMgbGVuZ3RoICovCi0vKiBzbGlnaHQgY2hhbmdlIGZvciBDKyssIDIw
MDQvMi8yNiAqLwotdm9pZCBpbml0X2J5X2FycmF5KHVuc2lnbmVkIGxvbmcgaW5pdF9rZXlbXSxp
bnQga2V5X2xlbmd0aCkKLXsKLSAgICBpbnQgaSwgaiwgazsKLSAgICBpbml0X2dlbnJhbmQoMTk2
NTAyMThVTCk7Ci0gICAgaT0xOyBqPTA7Ci0gICAgayA9IChOPmtleV9sZW5ndGggPyBOIDoga2V5
X2xlbmd0aCk7Ci0gICAgZm9yICg7IGs7IGstLSkgewotICAgICAgICBtdFtpXSA9IChtdFtpXSBe
ICgobXRbaS0xXSBeIChtdFtpLTFdID4+IDMwKSkgKiAxNjY0NTI1VUwpKQotICAgICAgICAgICsg
aW5pdF9rZXlbal0gKyBqOyAvKiBub24gbGluZWFyICovCi0gICAgICAgIG10W2ldICY9IDB4ZmZm
ZmZmZmZVTDsgLyogZm9yIFdPUkRTSVpFID4gMzIgbWFjaGluZXMgKi8KLSAgICAgICAgaSsrOyBq
Kys7Ci0gICAgICAgIGlmIChpPj1OKSB7IG10WzBdID0gbXRbTi0xXTsgaT0xOyB9Ci0gICAgICAg
IGlmIChqPj1rZXlfbGVuZ3RoKSBqPTA7Ci0gICAgfQotICAgIGZvciAoaz1OLTE7IGs7IGstLSkg
ewotICAgICAgICBtdFtpXSA9IChtdFtpXSBeICgobXRbaS0xXSBeIChtdFtpLTFdID4+IDMwKSkg
KiAxNTY2MDgzOTQxVUwpKQotICAgICAgICAgIC0gaTsgLyogbm9uIGxpbmVhciAqLwotICAgICAg
ICBtdFtpXSAmPSAweGZmZmZmZmZmVUw7IC8qIGZvciBXT1JEU0laRSA+IDMyIG1hY2hpbmVzICov
Ci0gICAgICAgIGkrKzsKLSAgICAgICAgaWYgKGk+PU4pIHsgbXRbMF0gPSBtdFtOLTFdOyBpPTE7
IH0KLSAgICB9Ci0KLSAgICBtdFswXSA9IDB4ODAwMDAwMDBVTDsgLyogTVNCIGlzIDE7IGFzc3Vy
aW5nIG5vbi16ZXJvIGluaXRpYWwgYXJyYXkgKi8KLX0KLQotLyogZ2VuZXJhdGVzIGEgcmFuZG9t
IG51bWJlciBvbiBbMCwweGZmZmZmZmZmXS1pbnRlcnZhbCAqLwotdW5zaWduZWQgbG9uZyBnZW5y
YW5kX2ludDMyKHZvaWQpCi17Ci0gICAgdW5zaWduZWQgbG9uZyB5OwotICAgIHN0YXRpYyB1bnNp
Z25lZCBsb25nIG1hZzAxWzJdPXsweDBVTCwgTUFUUklYX0F9OwotICAgIC8qIG1hZzAxW3hdID0g
eCAqIE1BVFJJWF9BICBmb3IgeD0wLDEgKi8KLQotICAgIGlmIChtdGkgPj0gTikgeyAvKiBnZW5l
cmF0ZSBOIHdvcmRzIGF0IG9uZSB0aW1lICovCi0gICAgICAgIGludCBrazsKLQotICAgICAgICBp
ZiAobXRpID09IE4rMSkgICAvKiBpZiBpbml0X2dlbnJhbmQoKSBoYXMgbm90IGJlZW4gY2FsbGVk
LCAqLwotICAgICAgICAgICAgaW5pdF9nZW5yYW5kKDU0ODlVTCk7IC8qIGEgZGVmYXVsdCBpbml0
aWFsIHNlZWQgaXMgdXNlZCAqLwotCi0gICAgICAgIGZvciAoa2s9MDtrazxOLU07a2srKykgewot
ICAgICAgICAgICAgeSA9IChtdFtra10mVVBQRVJfTUFTSyl8KG10W2trKzFdJkxPV0VSX01BU0sp
OwotICAgICAgICAgICAgbXRba2tdID0gbXRba2srTV0gXiAoeSA+PiAxKSBeIG1hZzAxW3kgJiAw
eDFVTF07Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICg7a2s8Ti0xO2trKyspIHsKLSAgICAgICAg
ICAgIHkgPSAobXRba2tdJlVQUEVSX01BU0spfChtdFtraysxXSZMT1dFUl9NQVNLKTsKLSAgICAg
ICAgICAgIG10W2trXSA9IG10W2trKyhNLU4pXSBeICh5ID4+IDEpIF4gbWFnMDFbeSAmIDB4MVVM
XTsKLSAgICAgICAgfQotICAgICAgICB5ID0gKG10W04tMV0mVVBQRVJfTUFTSyl8KG10WzBdJkxP
V0VSX01BU0spOwotICAgICAgICBtdFtOLTFdID0gbXRbTS0xXSBeICh5ID4+IDEpIF4gbWFnMDFb
eSAmIDB4MVVMXTsKLQotICAgICAgICBtdGkgPSAwOwotICAgIH0KLQotICAgIHkgPSBtdFttdGkr
K107Ci0KLSAgICAvKiBUZW1wZXJpbmcgKi8KLSAgICB5IF49ICh5ID4+IDExKTsKLSAgICB5IF49
ICh5IDw8IDcpICYgMHg5ZDJjNTY4MFVMOwotICAgIHkgXj0gKHkgPDwgMTUpICYgMHhlZmM2MDAw
MFVMOwotICAgIHkgXj0gKHkgPj4gMTgpOwotCi0gICAgcmV0dXJuIHk7Ci19Ci0KLS8qIGdlbmVy
YXRlcyBhIHJhbmRvbSBudW1iZXIgb24gWzAsMHg3ZmZmZmZmZl0taW50ZXJ2YWwgKi8KLWxvbmcg
Z2VucmFuZF9pbnQzMSh2b2lkKQotewotICAgIHJldHVybiAobG9uZykoZ2VucmFuZF9pbnQzMigp
Pj4xKTsKLX0KLQotLyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwxXS1yZWFsLWlu
dGVydmFsICovCi1kb3VibGUgZ2VucmFuZF9yZWFsMSh2b2lkKQotewotICAgIHJldHVybiBnZW5y
YW5kX2ludDMyKCkqKDEuMC80Mjk0OTY3Mjk1LjApOwotICAgIC8qIGRpdmlkZWQgYnkgMl4zMi0x
ICovCi19Ci0KLS8qIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gWzAsMSktcmVhbC1pbnRl
cnZhbCAqLwotZG91YmxlIGdlbnJhbmRfcmVhbDIodm9pZCkKLXsKLSAgICByZXR1cm4gZ2VucmFu
ZF9pbnQzMigpKigxLjAvNDI5NDk2NzI5Ni4wKTsKLSAgICAvKiBkaXZpZGVkIGJ5IDJeMzIgKi8K
LX0KLQotLyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiAoMCwxKS1yZWFsLWludGVydmFs
ICovCi1kb3VibGUgZ2VucmFuZF9yZWFsMyh2b2lkKQotewotICAgIHJldHVybiAoKChkb3VibGUp
Z2VucmFuZF9pbnQzMigpKSArIDAuNSkqKDEuMC80Mjk0OTY3Mjk2LjApOwotICAgIC8qIGRpdmlk
ZWQgYnkgMl4zMiAqLwotfQotCi0vKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uIFswLDEp
IHdpdGggNTMtYml0IHJlc29sdXRpb24qLwotZG91YmxlIGdlbnJhbmRfcmVzNTModm9pZCkKLXsK
LSAgICB1bnNpZ25lZCBsb25nIGE9Z2VucmFuZF9pbnQzMigpPj41LCBiPWdlbnJhbmRfaW50MzIo
KT4+NjsKLSAgICByZXR1cm4oYSo2NzEwODg2NC4wK2IpKigxLjAvOTAwNzE5OTI1NDc0MDk5Mi4w
KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybS5oCmluZGV4IGVjNDdjMzlmNDE3NGY3OWYwZmJlZTg4NGQwODhlYzBkMjkz
MTllOTQuLjkzMDFmMTA1NTE1ZDE0ZTZjZDI3NTE1MGFlZWRlMDBkMjJkNGNkOTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZv
cm0uaApAQCAtNTAyLDcgKzUwMiw2IEBACiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEJMQUNLQkVS
UlkpCi0jZGVmaW5lIFdURl9VU0VfTUVSU0VOTkVfVFdJU1RFUl8xOTkzNyAxCiAjZGVmaW5lIFdU
Rl9VU0VfU0tJQSAxCiAjZGVmaW5lIFdURl9VU0VfTE9XX1FVQUxJVFlfSU1BR0VfSU5URVJQT0xB
VElPTiAxCiAjZGVmaW5lIFdURl9VU0VfTE9XX1FVQUxJVFlfSU1BR0VfTk9fSlBFR19ESVRIRVJJ
TkcgMQpAQCAtNTE0LDExICs1MTMsNiBAQAogI2RlZmluZSBFTkFCTEVfR0xPQkFMX0ZBU1RNQUxM
T0NfTkVXIDAKICNlbmRpZgogCi0KLSNpZiBPUyhXSU5DRSkKLSNkZWZpbmUgV1RGX1VTRV9NRVJT
RU5ORV9UV0lTVEVSXzE5OTM3IDEKLSNlbmRpZgotCiAvKiBPbiBXaW5kb3dzLCB1c2UgUXVlcnlQ
ZXJmb3JtYW5jZUNvdW50ZXIgYnkgZGVmYXVsdCAqLwogI2lmIE9TKFdJTkRPV1MpCiAjZGVmaW5l
IFdURl9VU0VfUVVFUllfUEVSRk9STUFOQ0VfQ09VTlRFUiAgMQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvUmFuZG9tTnVtYmVyLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1JhbmRvbU51bWJlci5j
cHAKaW5kZXggMDYwNzRlZDlmMGE3YjkyZDgxNDkwN2MyYzVhMTlmNmZmYzUxOGQ1NS4uYzA5NzRm
NzM1MGI0OTBiNjVkOTNhMzczODdhNzAwYTVmMzY3YjU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvUmFuZG9tTnVtYmVyLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9SYW5kb21OdW1iZXIu
Y3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIwMDgs
IDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cu
dG9yY2htb2JpbGUuY29tLykKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBbmRyZXcgQm9ydHouIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1
LDQyICszNiw0MiBAQAogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgog
Ci0jaWYgVVNFKE1FUlNFTk5FX1RXSVNURVJfMTk5MzcpCi1leHRlcm4gIkMiIHsKLSNpbmNsdWRl
ICJtdDE5OTM3YXIuYyIKK25hbWVzcGFjZSBXVEYgeworCisjaWYgIVVTRShPU19SQU5ET01ORVNT
KQorbmFtZXNwYWNlIEludGVybmFsIHsKKworc3RhdGljIHVpbnQ2NF90IHN0YXRlOworCit2b2lk
IGluaXRpYWxpemVSYW5kb21OdW1iZXIodWludDY0X3Qgc2VlZCkKK3sKKyAgICBzdGF0ZSA9IHNl
ZWQ7CiB9Ci0jZW5kaWYKIAotbmFtZXNwYWNlIFdURiB7CisvLyBUaGlzIHJhbmRvbSBudW1iZXIg
Z2VuZXJhdG9yIGNvbWVzIGZyb206IEtsaW1vdiwgQS4gYW5kIFNoYW1pciwgQS4sCisvLyAiQSBO
ZXcgQ2xhc3Mgb2YgSW52ZXJ0aWJsZSBNYXBwaW5ncyIsIENyeXB0b2dyYXBoaWMgSGFyZHdhcmUg
YW5kIEVtYmVkZGVkCisvLyBTeXN0ZW1zIDIwMDIsIGh0dHA6Ly9kbC5hY20ub3JnL2NpdGF0aW9u
LmNmbT9pZD03NTI3NDEKKy8vCisvLyBWZXJ5IGZhc3QsIHZlcnkgc2ltcGxlLCBhbmQgcGFzc2Vz
IERpZWhhcmQgYW5kIG90aGVyIGdvb2Qgc3RhdGlzdGljYWwKKy8vIHRlc3RzIGFzIHN0cm9uZ2x5
IGFzIGNyeXB0b2dyYXBoaWNhbGx5LXNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcnMgKGJ1
dAorLy8gaXMgbm90IGl0c2VsZiBjcnlwdG9ncmFwaGljYWxseS1zZWN1cmUpLgordWludDMyX3Qg
cmFuZG9tTnVtYmVyKCkKK3sKKyAgICBzdGF0ZSArPSAoc3RhdGUgKiBzdGF0ZSkgfCA1OworICAg
IHJldHVybiBzdGF0aWNfY2FzdDx1aW50MzJfdD4oc3RhdGUgPj4gMzIpOworfQorCit9CisjZW5k
aWYKIAogZG91YmxlIHJhbmRvbU51bWJlcigpCiB7CiAjaWYgVVNFKE9TX1JBTkRPTU5FU1MpCiAg
ICAgdWludDMyX3QgYml0cyA9IGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyKCk7Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4oYml0cykgLyAoc3RhdGljX2Nhc3Q8ZG91YmxlPihz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpICsgMS4wKTsKICNlbHNlCi0gICAg
Ly8gV2l0aG91dCBPU19SQU5ET01ORVNTLCB3ZSBmYWxsIGJhY2sgdG8gb3RoZXIgcmFuZG9tIG51
bWJlciBnZW5lcmF0b3JzCi0gICAgLy8gdGhhdCBtaWdodCBub3QgYmUgY3J5cHRvZ3JhcGhpY2Fs
bHkgc2VjdXJlLiBJZGVhbGx5LCBtb3N0IHBvcnRzIHdvdWxkCi0gICAgLy8gZGVmaW5lIFVTRShP
U19SQU5ET01ORVNTKS4KLQotI2lmIFVTRShNRVJTRU5ORV9UV0lTVEVSXzE5OTM3KQotICAgIHJl
dHVybiBnZW5yYW5kX3JlczUzKCk7Ci0jZWxzZQotICAgIHVpbnQzMl90IHBhcnQxID0gcmFuZCgp
ICYgKFJBTkRfTUFYIC0gMSk7Ci0gICAgdWludDMyX3QgcGFydDIgPSByYW5kKCkgJiAoUkFORF9N
QVggLSAxKTsKLSAgICAvLyByYW5kIG9ubHkgcHJvdmlkZXMgMzEgYml0cywgYW5kIHRoZSBsb3cg
b3JkZXIgYml0cyBvZiB0aGF0IGFyZW4ndCB2ZXJ5IHJhbmRvbQotICAgIC8vIHNvIHdlIHRha2Ug
dGhlIGhpZ2ggMjYgYml0cyBvZiBwYXJ0IDEsIGFuZCB0aGUgaGlnaCAyNyBiaXRzIG9mIHBhcnQy
LgotICAgIHBhcnQxID4+PSA1OyAvLyBkcm9wIHRoZSBsb3cgNSBiaXRzCi0gICAgcGFydDIgPj49
IDQ7IC8vIGRyb3AgdGhlIGxvdyA0IGJpdHMKLSAgICB1aW50NjRfdCBmdWxsUmFuZG9tID0gcGFy
dDE7Ci0gICAgZnVsbFJhbmRvbSA8PD0gMjc7Ci0gICAgZnVsbFJhbmRvbSB8PSBwYXJ0MjsKLQot
ICAgIC8vIE1hc2sgb2ZmIHRoZSBsb3cgNTNiaXRzCi0gICAgZnVsbFJhbmRvbSAmPSAoMUxMIDw8
IDUzKSAtIDE7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4oZnVsbFJhbmRvbSkvc3Rh
dGljX2Nhc3Q8ZG91YmxlPigxTEwgPDwgNTMpOwotI2VuZGlmCisgICAgdWludDMyX3QgYml0cyA9
IEludGVybmFsOjpyYW5kb21OdW1iZXIoKTsKICNlbmRpZgorICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxkb3VibGU+KGJpdHMpIC8gKHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0
czx1aW50MzJfdD46Om1heCgpKSArIDEuMCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1JhbmRvbU51bWJlci5oIGIvU291cmNlL1dURi93dGYvUmFuZG9tTnVtYmVyLmgKaW5k
ZXggNzZiMjIzNTgyY2JiYTYxZTMwY2Q0ODQxMjU3MzNhNjExMDEwYzIzYi4uMzYyYmU2MDRhYmI5
OWI1MzUzMjM5MzYxOTgyOWE2NWQ2N2NhYzI2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
UmFuZG9tTnVtYmVyLmgKKysrIGIvU291cmNlL1dURi93dGYvUmFuZG9tTnVtYmVyLmgKQEAgLTI4
LDkgKzI4LDE1IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi0gICAgLy8gUmV0dXJucyBhIHBzZXVk
by1yYW5kb20gbnVtYmVyIGluIHRoZSByYW5nZSBbMCwgMSksIGF0dGVtcHRzIHRvIGJlCi0gICAg
Ly8gY3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlIGlmIHBvc3NpYmxlIG9uIHRoZSB0YXJnZXQgcGxh
dGZvcm0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHJhbmRvbU51bWJlcigpOworI2lm
ICFVU0UoT1NfUkFORE9NTkVTUykKK25hbWVzcGFjZSBJbnRlcm5hbCB7Cit2b2lkIGluaXRpYWxp
emVSYW5kb21OdW1iZXIodWludDY0X3QpOworfQorI2VuZGlmCisKKy8vIFJldHVybnMgYSBwc2V1
ZG8tcmFuZG9tIG51bWJlciBpbiB0aGUgcmFuZ2UgWzAsIDEpLCBhdHRlbXB0cyB0byBiZQorLy8g
Y3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlIGlmIHBvc3NpYmxlIG9uIHRoZSB0YXJnZXQgcGxhdGZv
cm0KK1dURl9FWFBPUlRfUFJJVkFURSBkb3VibGUgcmFuZG9tTnVtYmVyKCk7CiAKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvUmFuZG9tTnVtYmVyU2VlZC5oIGIvU291cmNlL1dURi93
dGYvUmFuZG9tTnVtYmVyU2VlZC5oCmluZGV4IGI1NTQ3YmVjYjIzZWY0NzYzOWMzMjZhYTMyOTQw
NjIyYTA1MTQxYzYuLjg0NjJjYTkwNzJjMGRhOTA4YmJlYjYyMzZhNTYxZWNjZDc2ZDhkMzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JhbmRvbU51bWJlclNlZWQuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9SYW5kb21OdW1iZXJTZWVkLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgV1RG
X1JhbmRvbU51bWJlclNlZWRfaAogI2RlZmluZSBXVEZfUmFuZG9tTnVtYmVyU2VlZF9oCiAKKyNp
bmNsdWRlICJSYW5kb21OdW1iZXIuaCIKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDx0
aW1lLmg+CiAKQEAgLTM4LDEzICszOSw2IEBACiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYK
IAotI2lmIFVTRShNRVJTRU5ORV9UV0lTVEVSXzE5OTM3KQotZXh0ZXJuICJDIiB7Ci12b2lkIGlu
aXRfYnlfYXJyYXkodW5zaWduZWQgbG9uZyBpbml0X2tleVtdLGludCBrZXlfbGVuZ3RoKTsKLX0K
LSNlbmRpZgotCi0vLyBJbnRlcm5hbCBKYXZhU2NyaXB0Q29yZSB1c2FnZSBvbmx5CiBuYW1lc3Bh
Y2UgV1RGIHsKIAogaW5saW5lIHZvaWQgaW5pdGlhbGl6ZVJhbmRvbU51bWJlckdlbmVyYXRvcigp
CkBAIC02NSwxNCArNTksOSBAQCBpbmxpbmUgdm9pZCBpbml0aWFsaXplUmFuZG9tTnVtYmVyR2Vu
ZXJhdG9yKCkKICAgICBzcmFuZChzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGltZSgwKSkpOwogI2Vu
ZGlmCiAKLSNpZiBVU0UoTUVSU0VOTkVfVFdJU1RFUl8xOTkzNykKLSAgICAvLyB1c2UgcmFuZCgp
IHRvIGluaXRpYWxpemUgdGhlIE1lcnNlbm5lIFR3aXN0ZXIgcmFuZG9tIG51bWJlciBnZW5lcmF0
b3IuCi0gICAgdW5zaWduZWQgbG9uZyBpbml0aWFsaXphdGlvbkJ1ZmZlcls0XTsKLSAgICBpbml0
aWFsaXphdGlvbkJ1ZmZlclswXSA9IChyYW5kKCkgPDwgMTYpIHwgcmFuZCgpOwotICAgIGluaXRp
YWxpemF0aW9uQnVmZmVyWzFdID0gKHJhbmQoKSA8PCAxNikgfCByYW5kKCk7Ci0gICAgaW5pdGlh
bGl6YXRpb25CdWZmZXJbMl0gPSAocmFuZCgpIDw8IDE2KSB8IHJhbmQoKTsKLSAgICBpbml0aWFs
aXphdGlvbkJ1ZmZlclszXSA9IChyYW5kKCkgPDwgMTYpIHwgcmFuZCgpOwotICAgIGluaXRfYnlf
YXJyYXkoaW5pdGlhbGl6YXRpb25CdWZmZXIsIDQpOworI2lmICFVU0UoT1NfUkFORE9NTkVTUykK
KyAgICB1aW50NjRfdCBzZWVkID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHJhbmQoKSkgPDwgMzIg
fCBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmFuZCgpKTsKKyAgICBJbnRlcm5hbDo6aW5pdGlhbGl6
ZVJhbmRvbU51bWJlcihzZWVkKTsKICNlbmRpZgogfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>