<?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>4789</bug_id>
          
          <creation_ts>2005-09-01 00:55:25 -0700</creation_ts>
          <short_desc>so slow it feels like a hang calling UCFindTextBreak() tons of times at forum.presence-pc.com</short_desc>
          <delta_ts>2005-09-04 00:40: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>Layout and Rendering</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://forum.presence-pc.com/presencepc/Lesnewsvosreactions/sujet-3864-10.htm</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>18177</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-09-01 00:55:25 -0700</bug_when>
    <thetext>&lt;rdar://problem/3698926&gt;

Safari hangs loading this page.

7/21/04 10:57 PM Trey Matteson:
We are not hung in UCFindTextBreak(), we are calling it a ridiculous number of times.  The isBreakable() 
API is a really bad match to the UC routine, since the former wants to ask about each individual position 
and the latter wants to scan the whole string for the break.

In this case I see us calling isBreakable with the same string and len=65388 and a pos that increments 
once with each call.  That&apos;s N^2 on the length of the string, since we keep scanning all the way to the 
end.

If we knew how to character wrap we wouldn&apos;t be killed by this either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18225</commentid>
    <comment_count>1</comment_count>
      <attachid>3720</attachid>
    <who name="">mitz</who>
    <bug_when>2005-09-02 06:05:28 -0700</bug_when>
    <thetext>Created attachment 3720
Make breakability testing run in linear time</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18226</commentid>
    <comment_count>2</comment_count>
      <attachid>3720</attachid>
    <who name="">mitz</who>
    <bug_when>2005-09-02 06:08:32 -0700</bug_when>
    <thetext>Comment on attachment 3720
Make breakability testing run in linear time

I think it would be interesting to measure the effect on performance in the
Latin-1 case as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18227</commentid>
    <comment_count>3</comment_count>
      <attachid>3721</attachid>
    <who name="">mitz</who>
    <bug_when>2005-09-02 08:00:36 -0700</bug_when>
    <thetext>Created attachment 3721
Make breakability testing run in linear time

Removed unnecessary (and incorrect) check for changes to breakNBSP.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18233</commentid>
    <comment_count>4</comment_count>
      <attachid>3721</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-09-02 09:24:21 -0700</bug_when>
    <thetext>Comment on attachment 3721
Make breakability testing run in linear time

Should the &quot;if (pos &gt; nextBreakable)&quot; be a while instead? If not, why doens&apos;t
it need to be?

I&apos;ll review this soon -- looks really great!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18235</commentid>
    <comment_count>5</comment_count>
    <who name="">mitz</who>
    <bug_when>2005-09-02 09:32:09 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 3721 [edit])
&gt; Should the &quot;if (pos &gt; nextBreakable)&quot; be a while instead? If not, why doens&apos;t
&gt; it need to be?

No. Since the 2nd parameter we pass to nextBreakablePosition is pos, its result will be &gt;=pos.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18540</commentid>
    <comment_count>6</comment_count>
      <attachid>3721</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-09-03 12:20:50 -0700</bug_when>
    <thetext>Comment on attachment 3721
Make breakability testing run in linear time

This is great! We&apos;ve needed a fix like this for so long!

In RenderBlock::findNextLineBreak, it seems unfortunate that
nextBreakablePosition gets called more often than it needs to. For example,
it&apos;s called when isPre is true, and when the character is not &apos;\n&apos;.  I think
that could easily be fixed with a helper function that does both the &quot;pos &gt;
nextBreakable&quot; work and the &quot;pos == nextBreakable&quot; check all in one, that is
called inside the expression.

Once you write that function, you might be able to use it in
RenderText::calcMinMaxWidth too, altough that code doesn&apos;t seem to do extra
nextBreakablePosition calls.

The expression &quot;i+wordlen&quot; appears so many times in the while loop in
RenderText::calcMinMaxWidth that I think it&apos;s worth changing the loop to use
something more like &quot;j&quot; and compute wordlen afer the loop. It&apos;s also not good
that the current character is fetched four different times. Lets rewrite that
loop as long as we&apos;re changing the code. I&apos;m not certain it&apos;s a hot code path,
but it seems it could also be easier to read if redone a bit.

Frankly, re-getting str-&gt;s and str-&gt;l over and over again is aso pretty weak.
It&apos;s a memory access every time that might be avoided if we just put those
values into local variables.

Setting this to review- because of the RenderBlock::findNextLineBreak issue.
Please consider the other comments as suggestions. Maybe those changes would be
best left to another patch -- I don&apos;t feel strongly either way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18564</commentid>
    <comment_count>7</comment_count>
      <attachid>3733</attachid>
    <who name="">mitz</who>
    <bug_when>2005-09-03 16:43:59 -0700</bug_when>
    <thetext>Created attachment 3733
revised patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18566</commentid>
    <comment_count>8</comment_count>
      <attachid>3733</attachid>
    <who name="">mitz</who>
    <bug_when>2005-09-03 16:44:23 -0700</bug_when>
    <thetext>Comment on attachment 3733
revised patch

I&apos;m not sure about using the name isBreakable for the new function, but I
couldn&apos;t think of anything better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18567</commentid>
    <comment_count>9</comment_count>
      <attachid>3733</attachid>
    <who name="">mitz</who>
    <bug_when>2005-09-03 16:45:20 -0700</bug_when>
    <thetext>Comment on attachment 3733
revised patch

oops, bad diff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18570</commentid>
    <comment_count>10</comment_count>
      <attachid>3735</attachid>
    <who name="">mitz</who>
    <bug_when>2005-09-03 16:54:00 -0700</bug_when>
    <thetext>Created attachment 3735
revised patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18572</commentid>
    <comment_count>11</comment_count>
      <attachid>3735</attachid>
    <who name="">mitz</who>
    <bug_when>2005-09-03 16:54:55 -0700</bug_when>
    <thetext>Comment on attachment 3735
revised patch

So, as I said, I&apos;m not sure about using the name isBreakable for the new
function, but I
couldn&apos;t think of anything better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18578</commentid>
    <comment_count>12</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-09-03 17:14:18 -0700</bug_when>
    <thetext>I&apos;ll need to study this closely heh.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18583</commentid>
    <comment_count>13</comment_count>
      <attachid>3735</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-09-03 17:41:53 -0700</bug_when>
    <thetext>Comment on attachment 3735
revised patch

I see one mistake here.

The code says &quot;j == 0&quot; where it should say &quot;j == i&quot;.

Otherwise, this looks super-great!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18634</commentid>
    <comment_count>14</comment_count>
      <attachid>3735</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-09-03 23:32:14 -0700</bug_when>
    <thetext>Comment on attachment 3735
revised patch

And I was wrong about j=0. r=me.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3720</attachid>
            <date>2005-09-02 06:05:28 -0700</date>
            <delta_ts>2005-09-02 08:00:36 -0700</delta_ts>
            <desc>Make breakability testing run in linear time</desc>
            <filename>4789_patch_r1.txt</filename>
            <type>text/plain</type>
            <size>10306</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IGJpZGkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL3JlbmRlcmluZy9iaWRpLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNDAKZGlmZiAt
dSAtcCAtcjEuMTQwIGJpZGkuY3BwCi0tLSBiaWRpLmNwcAkxNSBBdWcgMjAwNSAyMzozMToxNiAt
MDAwMAkxLjE0MAorKysgYmlkaS5jcHAJMiBTZXAgMjAwNSAxMzowNDowMiAtMDAwMApAQCAtMjA3
NCwxMyArMjA3NCwxNCBAQCBCaWRpSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJy
CiAgICAgICAgICAgICBib29sIGFwcGxpZWRFbmRXaWR0aCA9IGZhbHNlOwogCiAgICAgICAgICAg
ICBpbnQgd3JhcFcgPSB0bXBXOworICAgICAgICAgICAgaW50IG5leHRCcmVha2FibGUgPSAtMTsK
IAogICAgICAgICAgICAgd2hpbGUobGVuKSB7CiAgICAgICAgICAgICAgICAgYm9vbCBwcmV2aW91
c0NoYXJhY3RlcklzU3BhY2UgPSBjdXJyZW50Q2hhcmFjdGVySXNTcGFjZTsKICAgICAgICAgICAg
ICAgICBib29sIHByZXZpb3VzQ2hhcmFjdGVySXNXUyA9IGN1cnJlbnRDaGFyYWN0ZXJJc1dTOwog
ICAgICAgICAgICAgICAgIGNvbnN0IFFDaGFyIGMgPSBzdHJbcG9zXTsKICAgICAgICAgICAgICAg
ICBjdXJyZW50Q2hhcmFjdGVySXNTcGFjZSA9IGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCAoIWlz
UHJlICYmIChjID09ICdcbicpKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAg
IGlmIChpc1ByZSB8fCAhY3VycmVudENoYXJhY3RlcklzU3BhY2UpCiAgICAgICAgICAgICAgICAg
ICAgIGlzTGluZUVtcHR5ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgCkBAIC0yMTExLDYgKzIx
MTIsNyBAQCBCaWRpSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyCiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgYm9vbCBhcHBseVdvcmRTcGFjaW5nID0gZmFsc2U7
CiAgICAgICAgICAgICAgICAgYm9vbCBpc05vcm1hbCA9IG8tPnN0eWxlKCktPndoaXRlU3BhY2Uo
KSA9PSBOT1JNQUw7CisgICAgICAgICAgICAgICAgYm9vbCBsYXN0QnJlYWtOQlNQID0gZmFsc2U7
CiAgICAgICAgICAgICAgICAgYm9vbCBicmVha05CU1AgPSBpc05vcm1hbCAmJiBvLT5zdHlsZSgp
LT5uYnNwTW9kZSgpID09IFNQQUNFOwogICAgICAgICAgICAgICAgIGJvb2wgYnJlYWtXb3JkcyA9
IG8tPnN0eWxlKCktPndvcmRXcmFwKCkgPT0gQlJFQUtfV09SRCAmJiAoKGlzTm9ybWFsICYmIHcg
PT0gMCkgfHwgby0+c3R5bGUoKS0+d2hpdGVTcGFjZSgpID09IFBSRSk7CiAKQEAgLTIxMTgsNyAr
MjEyMCwxMiBAQCBCaWRpSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyCiAKICAg
ICAgICAgICAgICAgICBpZiAoYnJlYWtXb3JkcykKICAgICAgICAgICAgICAgICAgICAgd3JhcFcg
Kz0gdC0+d2lkdGgocG9zLCAxLCBmLCB3K3dyYXBXKTsKLSAgICAgICAgICAgICAgICBpZiAoYyA9
PSAnXG4nIHx8ICghaXNQcmUgJiYgaXNCcmVha2FibGUoc3RyLCBwb3MsIHN0cmxlbiwgYnJlYWtO
QlNQKSkgfHwgKGJyZWFrV29yZHMgJiYgKHcgKyB3cmFwVyA+IHdpZHRoKSkpIHsKKworICAgICAg
ICAgICAgICAgIGlmIChicmVha05CU1AgIT0gbGFzdEJyZWFrTkJTUCB8fCBwb3MgPiBuZXh0QnJl
YWthYmxlKQorICAgICAgICAgICAgICAgICAgICBuZXh0QnJlYWthYmxlID0gbmV4dEJyZWFrYWJs
ZVBvc2l0aW9uKHN0ciwgcG9zLCBzdHJsZW4sIGJyZWFrTkJTUCk7CisgICAgICAgICAgICAgICAg
bGFzdEJyZWFrTkJTUCA9IGJyZWFrTkJTUDsKKworICAgICAgICAgICAgICAgIGlmIChjID09ICdc
bicgfHwgKCFpc1ByZSAmJiBwb3MgPT0gbmV4dEJyZWFrYWJsZSkgfHwgKGJyZWFrV29yZHMgJiYg
KHcgKyB3cmFwVyA+IHdpZHRoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlnbm9yaW5n
U3BhY2VzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRDaGFyYWN0ZXJJ
c1NwYWNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RvcCBpZ25vcmluZyBz
cGFjZXMgYW5kIGJlZ2luIGF0IHRoaXMKSW5kZXg6IGJyZWFrX2xpbmVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvYnJlYWtfbGluZXMu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIzCmRpZmYgLXUgLXAgLXIxLjIzIGJyZWFrX2xp
bmVzLmNwcAotLS0gYnJlYWtfbGluZXMuY3BwCTI3IEF1ZyAyMDA1IDE4OjU1OjAwIC0wMDAwCTEu
MjMKKysrIGJyZWFrX2xpbmVzLmNwcAkyIFNlcCAyMDA1IDEzOjA0OjAyIC0wMDAwCkBAIC0yNCw5
NyArMjQsNDAgQEAgdm9pZCBjbGVhbnVwTGluZUJyZWFrZXIoKQogfQogCiBuYW1lc3BhY2Uga2h0
bWwgewotLyoKLSAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUsIGlmIHRoZSBzdHJpbmcgY2Fu
IGJyZSBicm9rZW4gYmVmb3JlIHRoZSAKLSAgY2hhcmFjdGVyIGF0IHBvc2l0aW9uIHBvcyBpbiB0
aGUgc3RyaW5nIHMgd2l0aCBsZW5ndGggbGVuCi0qLwotYm9vbCBpc0JyZWFrYWJsZShjb25zdCBR
Q2hhciAqcywgaW50IHBvcywgaW50IGxlbiwgYm9vbCBicmVha05CU1ApCisKK2ludCBuZXh0QnJl
YWthYmxlUG9zaXRpb24oY29uc3QgUUNoYXIgKnN0ciwgaW50IHBvcywgaW50IGxlbiwgYm9vbCBi
cmVha05CU1ApCiB7Ci0jaWYgIUFQUExFX0NIQU5HRVMKLSAgICBjb25zdCBRQ2hhciAqYyA9IHMr
cG9zOwotICAgIHVuc2lnbmVkIHNob3J0IGNoID0gYy0+dW5pY29kZSgpOwotICAgIGlmICggY2gg
PiAweGZmICkgewotCS8vIG5vdCBsYXRpbjEsIG5lZWQgdG8gZG8gbW9yZSBzb3BoaXN0aWNhdGVk
IGNoZWNrcyBmb3IgYXNpYW4gZm9udHMKLQl1bnNpZ25lZCBjaGFyIHJvdyA9IGMtPnJvdygpOwot
CWlmICggcm93ID09IDB4MGUgKSB7Ci0JICAgIC8vIDBlMDAgLSAwZTdmID09IFRoYWkKLQkgICAg
aWYgKCBjLT5jZWxsKCkgPCAweDgwICkgewotI2lmZGVmIEhBVkVfVEhBSV9CUkVBS1MKLQkJLy8g
Y2hlY2sgZm9yIHRoYWkKLQkJaWYoIHMgIT0gY2FjaGVkICkgewotCQkgICAgLy8gYnVpbGQgdXAg
c3RyaW5nIG9mIHRoYWkgY2hhcnMKLQkJICAgIFFUZXh0Q29kZWMgKnRoYWlDb2RlYyA9IFFUZXh0
Q29kZWM6OmNvZGVjRm9yTWliKDIyNTkpOwotCQkgICAgaWYgKCAhY2FjaGVkU3RyaW5nICkKLQkJ
CWNhY2hlZFN0cmluZyA9IG5ldyBRQ1N0cmluZzsKLQkJICAgIGlmICggIXRoYWlJdCApCi0JCQl0
aGFpSXQgPSBUaEJyZWFrSXRlcmF0b3I6OmNyZWF0ZVdvcmRJbnN0YW5jZSgpOyAKLQkJICAgICpj
YWNoZWRTdHJpbmcgPSB0aGFpQ29kZWMtPmZyb21Vbmljb2RlKCBRQ29uc3RTdHJpbmcoIChRQ2hh
ciAqKXMsIGxlbiApLnFzdHJpbmcoKSApOwotCQl9Ci0JCXRoYWlJdC0+c2V0VGV4dCgodGNoYXIg
KiljYWNoZWRTdHJpbmctPmRhdGEoKSk7Ci0JCWZvcihpbnQgaSA9IHRoYWlJdC0+Zmlyc3QoKTsg
aSAhPSB0aGFpSXQtPkRPTkU7IGkgPSB0aGFpSXQtPm5leHQoKSApIHsKLQkJICAgIGlmKCBpID09
IHBvcyApCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJICAgIGlmKCBpID4gcG9zICkKLQkJCXJldHVybiBm
YWxzZTsKLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0jZWxzZQotCQkvLyBpZiB3ZSBkb24ndCBoYXZl
IGEgdGhhaSBsaW5lIGJyZWFraW5nIGxpYiwgYWxsb3cKLQkJLy8gYnJlYWtzIGV2ZXJ5d2hlcmUg
ZXhjZXB0IGRpcmVjdGx5IGJlZm9yZSBwdW5jdHVhdGlvbi4KLQkJcmV0dXJuIHRydWU7Ci0jZW5k
aWYKLQkgICAgfSBlbHNlIAotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCWlmICggcm93ID4gMHgyZCAm
JiByb3cgPCAweGZiIHx8IHJvdyA9PSAweDExICkKLQkgICAgLy8gYXNpYW4gbGluZSBicmVha2lu
Zy4gRXZlcnl3aGVyZSBhbGxvd2VkIGV4Y2VwdCBkaXJlY3RseQotCSAgICAvLyBpbiBmcm9udCBv
ZiBhIHB1bmN0dWF0aW9uIGNoYXJhY3Rlci4KLQkgICAgcmV0dXJuIHRydWU7Ci0JZWxzZSAvLyBu
byBhc2lhbiBmb250Ci0JICAgIHJldHVybiBjLT5pc1NwYWNlKCk7Ci0gICAgfSBlbHNlIHsKLQlp
ZiAoIGNoID09ICcgJyB8fCBjaCA9PSAnXHQnIHx8IGNoID09ICdcbicgKQotCSAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotI2Vsc2UKLSAgICBPU1N0YXR1cyBzdGF0
dXMgPSAwLCBmaW5kU3RhdHVzID0gMDsKKyAgICBPU1N0YXR1cyBzdGF0dXMgPSAwLCBmaW5kU3Rh
dHVzID0gLTE7CiAgICAgc3RhdGljIFRleHRCcmVha0xvY2F0b3JSZWYgYnJlYWtMb2NhdG9yID0g
MDsKLSAgICBVbmlDaGFyQXJyYXlPZmZzZXQgZW5kOwotICAgIGNvbnN0IFFDaGFyICpjID0gcytw
b3M7Ci0gICAgdW5zaWduZWQgc2hvcnQgY2ggPSBjLT51bmljb2RlKCk7Ci0KLSAgICAvLyBOZXds
aW5lcyBhbmQgc3BhY2VzIGFyZSBhbHdheXMgYnJlYWthYmxlLCBhcyBhcmUgbm9uLWJyZWFraW5n
IHNwYWNlcyB3aGVuIGJyZWFrTkJTUCBpcyB0cnVlLgotICAgIC8vIEZJWE1FOiBUaWdlciBpcyBu
b3QgYWxsb3dpbmcgYnJlYWtzIG9uIHNwYWNlcyBhZnRlciBidWxsZXQgY2hhcmFjdGVycyBsaWtl
ICYjMTgzOy4gIFdlIGRvbid0IGtub3cKLSAgICAvLyBhdCB0aGUgbW9tZW50IHdoZXRoZXIgdGhp
cyBiZWhhdmlvciBpcyBjb3JyZWN0IG9yIG5vdC4gIFNpbmNlIFRpZ2VyIGlzIGFsc28gbm90IGFs
bG93aW5nIGJyZWFrcyBvbiBzcGFjZXMKLSAgICAvLyBhZnRlciBoeXBoZW4tbGlrZSBjaGFyYWN0
ZXJzLCB0aGlzIGRvZXMgbm90IHNlZW0gaWRlYWwgZm9yIHRoZSBXZWIuICBUaGVyZWZvcmUgZm9y
IG5vdyB3ZSBvdmVycmlkZSBzcGFjZQotICAgIC8vIGNoYXJhY3RlcnMgdXAgZnJvbnQgYW5kIGJ5
cGFzcyB0aGUgVW5pY29kZSBsaW5lIGJyZWFraW5nIHJvdXRpbmVzLgotICAgIGlmIChjaCA9PSAn
ICcgfHwgY2ggPT0gJ1xuJyB8fCBjaCA9PSAnXHQnIHx8IChicmVha05CU1AgJiYgY2ggPT0gMHhh
MCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gSWYgY3VycmVudCBjaGFyYWN0ZXIs
IG9yIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgYXJlbid0IHNpbXBsZSBsYXRpbjEgdGhlbgotICAg
IC8vIHVzZSB0aGUgVUMgbGluZSBicmVhayBsb2NhdG9yLiAgVUNGaW5kVGV4dEJyZWFrIHdpbGwg
cmVwb3J0IGZhbHNlIGlmIHdlCi0gICAgLy8gaGF2ZSBhIHNlcXVlbmNlIG9mIDB4YTAgMHgyMCAo
bmJzcCwgc3ApLCBzbyB3ZSBleHBsaWNpdHkgY2hlY2sgZm9yIHRoYXQKLSAgICAvLyBjYXNlLgot
ICAgIHVuc2lnbmVkIHNob3J0IGxhc3RDaCA9IHBvcyA+IDAgPyAocytwb3MtMSktPnVuaWNvZGUo
KSA6IDA7Ci0gICAgaWYgKChjaCA+IDB4N2YgJiYgY2ggIT0gMHhhMCkgfHwgKGxhc3RDaCA+IDB4
N2YgJiYgbGFzdENoICE9IDB4YTApKSB7Ci0gICAgICAgIGlmICghYnJlYWtMb2NhdG9yKQotICAg
ICAgICAgICAgc3RhdHVzID0gVUNDcmVhdGVUZXh0QnJlYWtMb2NhdG9yKE5VTEwsIDAsIGtVQ1Rl
eHRCcmVha0xpbmVNYXNrLCAmYnJlYWtMb2NhdG9yKTsKLSAgICAgICAgaWYgKHN0YXR1cyA9PSAw
KQotICAgICAgICAgICAgZmluZFN0YXR1cyA9IFVDRmluZFRleHRCcmVhayhicmVha0xvY2F0b3Is
IGtVQ1RleHRCcmVha0xpbmVNYXNrLCAwLCAoY29uc3QgVW5pQ2hhciAqKXMsIGxlbiwgcG9zLCAm
ZW5kKTsKLSAgICAgICAgaWYgKGZpbmRTdGF0dXMgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiAo
aW50KWVuZCA9PSBwb3MgJiYgIShsYXN0Q2ggPT0gJyAnIHx8IGxhc3RDaCA9PSAnXG4nIHx8IGxh
c3RDaCA9PSAnXHQnIHx8IChicmVha05CU1AgJiYgbGFzdENoID09IDB4YTApKTsKLQotICAgICAg
ICAvLyBJZiBDYXJib24gZmFpbHMsIGZhaWwgYmFjayBvbiBzaW1wbGUgd2hpdGUgc3BhY2UgZGV0
ZWN0aW9uLgotICAgIH0KKyAgICBpbnQgbmV4dFVDQnJlYWsgPSAtMTsKKyAgICBpbnQgaTsKKyAg
ICB1bnNpZ25lZCBzaG9ydCBjaCwgbGFzdENoOwogICAgIAotICAgIC8vIE1hdGNoIFdpbklFJ3Mg
YnJlYWtpbmcgc3RyYXRlZ3ksIHdoaWNoIGlzIHRvIGFsd2F5cyBhbGxvdyBicmVha3MgYWZ0ZXIg
aHlwaGVucyBhbmQgcXVlc3Rpb24gbWFya3MuCi0gICAgaWYgKGxhc3RDaCA9PSAnLScgfHwgbGFz
dENoID09ICc/JykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBObyBvdGhlciBhc2Np
aSBjaGFycyBhcmUgYnJlYWthYmxlLgotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZiAgICAKKyAg
ICBsYXN0Q2ggPSBwb3MgPiAwID8gc3RyW3BvcyAtIDFdLnVuaWNvZGUoKSA6IDA7CisgICAgZm9y
IChpID0gcG9zOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgY2ggPSBzdHJbaV0udW5pY29kZSgp
OworICAgICAgICBpZiAoY2ggPT0gJyAnIHx8IGNoID09ICdcbicgfHwgY2ggPT0gJ1x0JyB8fCAo
YnJlYWtOQlNQICYmIGNoID09IDB4YTApKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8v
IE1hdGNoIFdpbklFJ3MgYnJlYWtpbmcgc3RyYXRlZ3ksIHdoaWNoIGlzIHRvIGFsd2F5cyBhbGxv
dyBicmVha3MgYWZ0ZXIgaHlwaGVucyBhbmQgcXVlc3Rpb24gbWFya3MuCisgICAgICAgIGlmIChs
YXN0Q2ggPT0gJy0nIHx8IGxhc3RDaCA9PSAnPycpCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgLy8gSWYgY3VycmVudCBjaGFyYWN0ZXIsIG9yIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgYXJl
bid0IHNpbXBsZSBsYXRpbjEgdGhlbgorICAgICAgICAvLyB1c2UgdGhlIFVDIGxpbmUgYnJlYWsg
bG9jYXRvci4gIFVDRmluZFRleHRCcmVhayB3aWxsIHJlcG9ydCBmYWxzZSBpZiB3ZQorICAgICAg
ICAvLyBoYXZlIGEgc2VxdWVuY2Ugb2YgMHhhMCAweDIwIChuYnNwLCBzcCksIHNvIHdlIGV4cGxp
Y2l0eSBjaGVjayBmb3IgdGhhdAorICAgICAgICAvLyBjYXNlLgorICAgICAgICBpZiAoKGNoID4g
MHg3ZiAmJiBjaCAhPSAweGEwKSB8fCAobGFzdENoID4gMHg3ZiAmJiBsYXN0Q2ggIT0gMHhhMCkp
IHsKKyAgICAgICAgICAgIGlmIChuZXh0VUNCcmVhayA8IGkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIWJyZWFrTG9jYXRvcikKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gVUNDcmVhdGVU
ZXh0QnJlYWtMb2NhdG9yKE5VTEwsIDAsIGtVQ1RleHRCcmVha0xpbmVNYXNrLCAmYnJlYWtMb2Nh
dG9yKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IDApCisgICAgICAgICAgICAgICAg
ICAgIGZpbmRTdGF0dXMgPSBVQ0ZpbmRUZXh0QnJlYWsoYnJlYWtMb2NhdG9yLCBrVUNUZXh0QnJl
YWtMaW5lTWFzaywgMCwgKGNvbnN0IFVuaUNoYXIgKilzdHIsIGxlbiwgaSwgKFVuaUNoYXJBcnJh
eU9mZnNldCAqKSZuZXh0VUNCcmVhayk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
ZmluZFN0YXR1cyA9PSAwICYmIGkgPT0gbmV4dFVDQnJlYWsgJiYgIShsYXN0Q2ggPT0gJyAnIHx8
IGxhc3RDaCA9PSAnXG4nIHx8IGxhc3RDaCA9PSAnXHQnIHx8IChicmVha05CU1AgJiYgbGFzdENo
ID09IDB4YTApKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBs
YXN0Q2ggPSBjaDsKKyAgICB9CisgICAgcmV0dXJuIGk7CiB9CiAKLX07Cit9OwpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IGJyZWFrX2xpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL2JyZWFrX2xpbmVzLmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC11IC1wIC1yMS4yIGJyZWFrX2xpbmVzLmgKLS0tIGJy
ZWFrX2xpbmVzLmgJNSBPY3QgMjAwNCAyMDowNTozOCAtMDAwMAkxLjIKKysrIGJyZWFrX2xpbmVz
LmgJMiBTZXAgMjAwNSAxMzowNDowMiAtMDAwMApAQCAtMSw1ICsxLDUgQEAKICNpbmNsdWRlIDxx
c3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBraHRtbCB7Ci0gICAgYm9vbCBpc0JyZWFrYWJsZShjb25z
dCBRQ2hhciAqc3RyLCBpbnQgcG9zLCBpbnQgbGVuLCBib29sIGJyZWFrTkJTUCA9IGZhbHNlKTsK
KyAgICBpbnQgbmV4dEJyZWFrYWJsZVBvc2l0aW9uKGNvbnN0IFFDaGFyICpzdHIsIGludCBwb3Ms
IGludCBsZW4sIGJvb2wgYnJlYWtOQlNQID0gZmFsc2UpOwogfTsKSW5kZXg6IHJlbmRlcl90ZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJp
bmcvcmVuZGVyX3RleHQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE5NQpkaWZmIC11IC1w
IC1yMS4xOTUgcmVuZGVyX3RleHQuY3BwCi0tLSByZW5kZXJfdGV4dC5jcHAJMSBTZXAgMjAwNSAx
ODowMzozMyAtMDAwMAkxLjE5NQorKysgcmVuZGVyX3RleHQuY3BwCTIgU2VwIDIwMDUgMTM6MDQ6
MDcgLTAwMDAKQEAgLTEzMTQsNiArMTMxNCw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y2FsY01pbk1h
eFdpZHRoKGludCBsZWEKICAgICBib29sIGlzUHJlID0gc3R5bGUoKS0+d2hpdGVTcGFjZSgpID09
IFBSRTsKICAgICBib29sIGZpcnN0V29yZCA9IHRydWU7CiAgICAgYm9vbCBmaXJzdExpbmUgPSB0
cnVlOworICAgIGludCBuZXh0QnJlYWthYmxlID0gLTE7CiAgICAgZm9yKGludCBpID0gMDsgaSA8
IGxlbjsgaSsrKQogICAgIHsKICAgICAgICAgY29uc3QgUUNoYXIgYyA9IHN0ci0+c1tpXTsKQEAg
LTEzNTQsMTEgKzEzNTUsMTcgQEAgdm9pZCBSZW5kZXJUZXh0OjpjYWxjTWluTWF4V2lkdGgoaW50
IGxlYQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAg
IGlmIChuZXh0QnJlYWthYmxlIDwgaSkKKyAgICAgICAgICAgIG5leHRCcmVha2FibGUgPSBuZXh0
QnJlYWthYmxlUG9zaXRpb24oc3RyLT5zLCBpLCBzdHItPmwpOworICAgICAgICBib29sIGhhc0Jy
ZWFrID0gbmV4dEJyZWFrYWJsZSA9PSBpOwogICAgICAgICBpbnQgd29yZGxlbiA9IDA7CiAgICAg
ICAgIHdoaWxlIChpK3dvcmRsZW4gPCBsZW4gJiYgc3RyLT5zW2krd29yZGxlbl0gIT0gJ1xuJyAm
JiBzdHItPnNbaSt3b3JkbGVuXSAhPSAnICcgJiYgc3RyLT5zW2krd29yZGxlbl0gIT0gJ1x0JyAm
JgogICAgICAgICAgICAgICAgKGkrd29yZGxlbiA9PSAwIHx8IHN0ci0+c1tpK3dvcmRsZW5dLnVu
aWNvZGUoKSAhPSBTT0ZUX0hZUEhFTikgJiYgLy8gU2tpcCBzb2Z0IGh5cGhlbnMKLSAgICAgICAg
ICAgICAgICh3b3JkbGVuID09IDAgfHwgIWlzQnJlYWthYmxlKCBzdHItPnMsIGkrd29yZGxlbiwg
c3RyLT5sKSkpCisgICAgICAgICAgICAgICAod29yZGxlbiA9PSAwIHx8IGkrd29yZGxlbiAhPSBu
ZXh0QnJlYWthYmxlKSkgewogICAgICAgICAgICAgd29yZGxlbisrOworICAgICAgICAgICAgaWYg
KG5leHRCcmVha2FibGUgPCBpK3dvcmRsZW4pCisgICAgICAgICAgICAgICAgbmV4dEJyZWFrYWJs
ZSA9IG5leHRCcmVha2FibGVQb3NpdGlvbihzdHItPnMsIGkrd29yZGxlbiwgc3RyLT5sKTsKKyAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGlmICh3b3JkbGVuKQogICAgICAgICB7CkBA
IC0xMzg2LDcgKzEzOTMsNiBAQCB2b2lkIFJlbmRlclRleHQ6OmNhbGNNaW5NYXhXaWR0aChpbnQg
bGVhCiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgcnVu
IGlzIGJyZWFrYWJsZSwgdGhlbiB3ZSBjb25zaWRlciBvdXJzZWx2ZXMgdG8gaGF2ZSBhIGJlZ2lu
bmluZwogICAgICAgICAgICAgICAgIC8vIG1pbmltdW0gd2lkdGggb2YgMCwgc2luY2UgYSBicmVh
ayBjb3VsZCBvY2N1ciByaWdodCBiZWZvcmUgb3VyIHJ1biBzdGFydHMsIHByZXZlbnRpbmcgdXMg
ZnJvbSBldmVyCiAgICAgICAgICAgICAgICAgLy8gYmVpbmcgYXBwZW5kZWQgdG8gYSBwcmV2aW91
cyB0ZXh0IHJ1biB3aGVuIGNvbnNpZGVyaW5nIHRoZSB0b3RhbCBtaW5pbXVtIHdpZHRoIG9mIHRo
ZSBjb250YWluaW5nIGJsb2NrLgotICAgICAgICAgICAgICAgIGJvb2wgaGFzQnJlYWsgPSBpc0Jy
ZWFrYWJsZShzdHItPnMsIGksIHN0ci0+bCk7CiAgICAgICAgICAgICAgICAgaWYgKGhhc0JyZWFr
KQogICAgICAgICAgICAgICAgICAgICBtX2hhc0JyZWFrYWJsZUNoYXIgPSB0cnVlOwogICAgICAg
ICAgICAgICAgIG1fYmVnaW5NaW5XaWR0aCA9IGhhc0JyZWFrID8gMCA6IHc7Cg==
</data>
<flag name="review"
          id="488"
          type_id="1"
          status="-"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3721</attachid>
            <date>2005-09-02 08:00:36 -0700</date>
            <delta_ts>2005-09-03 16:43:59 -0700</delta_ts>
            <desc>Make breakability testing run in linear time</desc>
            <filename>4789_patch_r2.txt</filename>
            <type>text/plain</type>
            <size>9774</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IGJpZGkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL3JlbmRlcmluZy9iaWRpLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNDAKZGlmZiAt
dSAtcCAtcjEuMTQwIGJpZGkuY3BwCi0tLSBiaWRpLmNwcAkxNSBBdWcgMjAwNSAyMzozMToxNiAt
MDAwMAkxLjE0MAorKysgYmlkaS5jcHAJMiBTZXAgMjAwNSAxNDo1ODo1NyAtMDAwMApAQCAtMjA3
NCwxMyArMjA3NCwxNCBAQCBCaWRpSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJy
CiAgICAgICAgICAgICBib29sIGFwcGxpZWRFbmRXaWR0aCA9IGZhbHNlOwogCiAgICAgICAgICAg
ICBpbnQgd3JhcFcgPSB0bXBXOworICAgICAgICAgICAgaW50IG5leHRCcmVha2FibGUgPSAtMTsK
IAogICAgICAgICAgICAgd2hpbGUobGVuKSB7CiAgICAgICAgICAgICAgICAgYm9vbCBwcmV2aW91
c0NoYXJhY3RlcklzU3BhY2UgPSBjdXJyZW50Q2hhcmFjdGVySXNTcGFjZTsKICAgICAgICAgICAg
ICAgICBib29sIHByZXZpb3VzQ2hhcmFjdGVySXNXUyA9IGN1cnJlbnRDaGFyYWN0ZXJJc1dTOwog
ICAgICAgICAgICAgICAgIGNvbnN0IFFDaGFyIGMgPSBzdHJbcG9zXTsKICAgICAgICAgICAgICAg
ICBjdXJyZW50Q2hhcmFjdGVySXNTcGFjZSA9IGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCAoIWlz
UHJlICYmIChjID09ICdcbicpKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAg
IGlmIChpc1ByZSB8fCAhY3VycmVudENoYXJhY3RlcklzU3BhY2UpCiAgICAgICAgICAgICAgICAg
ICAgIGlzTGluZUVtcHR5ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgCkBAIC0yMTE4LDcgKzIx
MTksMTEgQEAgQmlkaUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmVCcgogCiAgICAg
ICAgICAgICAgICAgaWYgKGJyZWFrV29yZHMpCiAgICAgICAgICAgICAgICAgICAgIHdyYXBXICs9
IHQtPndpZHRoKHBvcywgMSwgZiwgdyt3cmFwVyk7Ci0gICAgICAgICAgICAgICAgaWYgKGMgPT0g
J1xuJyB8fCAoIWlzUHJlICYmIGlzQnJlYWthYmxlKHN0ciwgcG9zLCBzdHJsZW4sIGJyZWFrTkJT
UCkpIHx8IChicmVha1dvcmRzICYmICh3ICsgd3JhcFcgPiB3aWR0aCkpKSB7CisKKyAgICAgICAg
ICAgICAgICBpZiAocG9zID4gbmV4dEJyZWFrYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgbmV4
dEJyZWFrYWJsZSA9IG5leHRCcmVha2FibGVQb3NpdGlvbihzdHIsIHBvcywgc3RybGVuLCBicmVh
a05CU1ApOworCisgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1xuJyB8fCAoIWlzUHJlICYmIHBv
cyA9PSBuZXh0QnJlYWthYmxlKSB8fCAoYnJlYWtXb3JkcyAmJiAodyArIHdyYXBXID4gd2lkdGgp
KSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoaWdub3JpbmdTcGFjZXMpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghY3VycmVudENoYXJhY3RlcklzU3BhY2UpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBTdG9wIGlnbm9yaW5nIHNwYWNlcyBhbmQgYmVnaW4gYXQg
dGhpcwpJbmRleDogYnJlYWtfbGluZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9icmVha19saW5lcy5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMjMKZGlmZiAtdSAtcCAtcjEuMjMgYnJlYWtfbGluZXMuY3BwCi0tLSBicmVha19s
aW5lcy5jcHAJMjcgQXVnIDIwMDUgMTg6NTU6MDAgLTAwMDAJMS4yMworKysgYnJlYWtfbGluZXMu
Y3BwCTIgU2VwIDIwMDUgMTQ6NTg6NTcgLTAwMDAKQEAgLTI0LDk3ICsyNCw0MCBAQCB2b2lkIGNs
ZWFudXBMaW5lQnJlYWtlcigpCiB9CiAKIG5hbWVzcGFjZSBraHRtbCB7Ci0vKgotICBUaGlzIGZ1
bmN0aW9uIHJldHVybnMgdHJ1ZSwgaWYgdGhlIHN0cmluZyBjYW4gYnJlIGJyb2tlbiBiZWZvcmUg
dGhlIAotICBjaGFyYWN0ZXIgYXQgcG9zaXRpb24gcG9zIGluIHRoZSBzdHJpbmcgcyB3aXRoIGxl
bmd0aCBsZW4KLSovCi1ib29sIGlzQnJlYWthYmxlKGNvbnN0IFFDaGFyICpzLCBpbnQgcG9zLCBp
bnQgbGVuLCBib29sIGJyZWFrTkJTUCkKKworaW50IG5leHRCcmVha2FibGVQb3NpdGlvbihjb25z
dCBRQ2hhciAqc3RyLCBpbnQgcG9zLCBpbnQgbGVuLCBib29sIGJyZWFrTkJTUCkKIHsKLSNpZiAh
QVBQTEVfQ0hBTkdFUwotICAgIGNvbnN0IFFDaGFyICpjID0gcytwb3M7Ci0gICAgdW5zaWduZWQg
c2hvcnQgY2ggPSBjLT51bmljb2RlKCk7Ci0gICAgaWYgKCBjaCA+IDB4ZmYgKSB7Ci0JLy8gbm90
IGxhdGluMSwgbmVlZCB0byBkbyBtb3JlIHNvcGhpc3RpY2F0ZWQgY2hlY2tzIGZvciBhc2lhbiBm
b250cwotCXVuc2lnbmVkIGNoYXIgcm93ID0gYy0+cm93KCk7Ci0JaWYgKCByb3cgPT0gMHgwZSAp
IHsKLQkgICAgLy8gMGUwMCAtIDBlN2YgPT0gVGhhaQotCSAgICBpZiAoIGMtPmNlbGwoKSA8IDB4
ODAgKSB7Ci0jaWZkZWYgSEFWRV9USEFJX0JSRUFLUwotCQkvLyBjaGVjayBmb3IgdGhhaQotCQlp
ZiggcyAhPSBjYWNoZWQgKSB7Ci0JCSAgICAvLyBidWlsZCB1cCBzdHJpbmcgb2YgdGhhaSBjaGFy
cwotCQkgICAgUVRleHRDb2RlYyAqdGhhaUNvZGVjID0gUVRleHRDb2RlYzo6Y29kZWNGb3JNaWIo
MjI1OSk7Ci0JCSAgICBpZiAoICFjYWNoZWRTdHJpbmcgKQotCQkJY2FjaGVkU3RyaW5nID0gbmV3
IFFDU3RyaW5nOwotCQkgICAgaWYgKCAhdGhhaUl0ICkKLQkJCXRoYWlJdCA9IFRoQnJlYWtJdGVy
YXRvcjo6Y3JlYXRlV29yZEluc3RhbmNlKCk7IAotCQkgICAgKmNhY2hlZFN0cmluZyA9IHRoYWlD
b2RlYy0+ZnJvbVVuaWNvZGUoIFFDb25zdFN0cmluZyggKFFDaGFyICopcywgbGVuICkucXN0cmlu
ZygpICk7Ci0JCX0KLQkJdGhhaUl0LT5zZXRUZXh0KCh0Y2hhciAqKWNhY2hlZFN0cmluZy0+ZGF0
YSgpKTsKLQkJZm9yKGludCBpID0gdGhhaUl0LT5maXJzdCgpOyBpICE9IHRoYWlJdC0+RE9ORTsg
aSA9IHRoYWlJdC0+bmV4dCgpICkgewotCQkgICAgaWYoIGkgPT0gcG9zICkKLQkJCXJldHVybiB0
cnVlOwotCQkgICAgaWYoIGkgPiBwb3MgKQotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCXJldHVy
biBmYWxzZTsKLSNlbHNlCi0JCS8vIGlmIHdlIGRvbid0IGhhdmUgYSB0aGFpIGxpbmUgYnJlYWtp
bmcgbGliLCBhbGxvdwotCQkvLyBicmVha3MgZXZlcnl3aGVyZSBleGNlcHQgZGlyZWN0bHkgYmVm
b3JlIHB1bmN0dWF0aW9uLgotCQlyZXR1cm4gdHJ1ZTsKLSNlbmRpZgotCSAgICB9IGVsc2UgCi0J
CXJldHVybiBmYWxzZTsKLQl9Ci0JaWYgKCByb3cgPiAweDJkICYmIHJvdyA8IDB4ZmIgfHwgcm93
ID09IDB4MTEgKQotCSAgICAvLyBhc2lhbiBsaW5lIGJyZWFraW5nLiBFdmVyeXdoZXJlIGFsbG93
ZWQgZXhjZXB0IGRpcmVjdGx5Ci0JICAgIC8vIGluIGZyb250IG9mIGEgcHVuY3R1YXRpb24gY2hh
cmFjdGVyLgotCSAgICByZXR1cm4gdHJ1ZTsKLQllbHNlIC8vIG5vIGFzaWFuIGZvbnQKLQkgICAg
cmV0dXJuIGMtPmlzU3BhY2UoKTsKLSAgICB9IGVsc2UgewotCWlmICggY2ggPT0gJyAnIHx8IGNo
ID09ICdcdCcgfHwgY2ggPT0gJ1xuJyApCi0JICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci0jZWxzZQotICAgIE9TU3RhdHVzIHN0YXR1cyA9IDAsIGZpbmRTdGF0dXMg
PSAwOworICAgIE9TU3RhdHVzIHN0YXR1cyA9IDAsIGZpbmRTdGF0dXMgPSAtMTsKICAgICBzdGF0
aWMgVGV4dEJyZWFrTG9jYXRvclJlZiBicmVha0xvY2F0b3IgPSAwOwotICAgIFVuaUNoYXJBcnJh
eU9mZnNldCBlbmQ7Ci0gICAgY29uc3QgUUNoYXIgKmMgPSBzK3BvczsKLSAgICB1bnNpZ25lZCBz
aG9ydCBjaCA9IGMtPnVuaWNvZGUoKTsKLQotICAgIC8vIE5ld2xpbmVzIGFuZCBzcGFjZXMgYXJl
IGFsd2F5cyBicmVha2FibGUsIGFzIGFyZSBub24tYnJlYWtpbmcgc3BhY2VzIHdoZW4gYnJlYWtO
QlNQIGlzIHRydWUuCi0gICAgLy8gRklYTUU6IFRpZ2VyIGlzIG5vdCBhbGxvd2luZyBicmVha3Mg
b24gc3BhY2VzIGFmdGVyIGJ1bGxldCBjaGFyYWN0ZXJzIGxpa2UgJiMxODM7LiAgV2UgZG9uJ3Qg
a25vdwotICAgIC8vIGF0IHRoZSBtb21lbnQgd2hldGhlciB0aGlzIGJlaGF2aW9yIGlzIGNvcnJl
Y3Qgb3Igbm90LiAgU2luY2UgVGlnZXIgaXMgYWxzbyBub3QgYWxsb3dpbmcgYnJlYWtzIG9uIHNw
YWNlcwotICAgIC8vIGFmdGVyIGh5cGhlbi1saWtlIGNoYXJhY3RlcnMsIHRoaXMgZG9lcyBub3Qg
c2VlbSBpZGVhbCBmb3IgdGhlIFdlYi4gIFRoZXJlZm9yZSBmb3Igbm93IHdlIG92ZXJyaWRlIHNw
YWNlCi0gICAgLy8gY2hhcmFjdGVycyB1cCBmcm9udCBhbmQgYnlwYXNzIHRoZSBVbmljb2RlIGxp
bmUgYnJlYWtpbmcgcm91dGluZXMuCi0gICAgaWYgKGNoID09ICcgJyB8fCBjaCA9PSAnXG4nIHx8
IGNoID09ICdcdCcgfHwgKGJyZWFrTkJTUCAmJiBjaCA9PSAweGEwKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICAvLyBJZiBjdXJyZW50IGNoYXJhY3Rlciwgb3IgdGhlIHByZXZpb3VzIGNo
YXJhY3RlciBhcmVuJ3Qgc2ltcGxlIGxhdGluMSB0aGVuCi0gICAgLy8gdXNlIHRoZSBVQyBsaW5l
IGJyZWFrIGxvY2F0b3IuICBVQ0ZpbmRUZXh0QnJlYWsgd2lsbCByZXBvcnQgZmFsc2UgaWYgd2UK
LSAgICAvLyBoYXZlIGEgc2VxdWVuY2Ugb2YgMHhhMCAweDIwIChuYnNwLCBzcCksIHNvIHdlIGV4
cGxpY2l0eSBjaGVjayBmb3IgdGhhdAotICAgIC8vIGNhc2UuCi0gICAgdW5zaWduZWQgc2hvcnQg
bGFzdENoID0gcG9zID4gMCA/IChzK3Bvcy0xKS0+dW5pY29kZSgpIDogMDsKLSAgICBpZiAoKGNo
ID4gMHg3ZiAmJiBjaCAhPSAweGEwKSB8fCAobGFzdENoID4gMHg3ZiAmJiBsYXN0Q2ggIT0gMHhh
MCkpIHsKLSAgICAgICAgaWYgKCFicmVha0xvY2F0b3IpCi0gICAgICAgICAgICBzdGF0dXMgPSBV
Q0NyZWF0ZVRleHRCcmVha0xvY2F0b3IoTlVMTCwgMCwga1VDVGV4dEJyZWFrTGluZU1hc2ssICZi
cmVha0xvY2F0b3IpOwotICAgICAgICBpZiAoc3RhdHVzID09IDApCi0gICAgICAgICAgICBmaW5k
U3RhdHVzID0gVUNGaW5kVGV4dEJyZWFrKGJyZWFrTG9jYXRvciwga1VDVGV4dEJyZWFrTGluZU1h
c2ssIDAsIChjb25zdCBVbmlDaGFyICopcywgbGVuLCBwb3MsICZlbmQpOwotICAgICAgICBpZiAo
ZmluZFN0YXR1cyA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIChpbnQpZW5kID09IHBvcyAmJiAh
KGxhc3RDaCA9PSAnICcgfHwgbGFzdENoID09ICdcbicgfHwgbGFzdENoID09ICdcdCcgfHwgKGJy
ZWFrTkJTUCAmJiBsYXN0Q2ggPT0gMHhhMCkpOwotCi0gICAgICAgIC8vIElmIENhcmJvbiBmYWls
cywgZmFpbCBiYWNrIG9uIHNpbXBsZSB3aGl0ZSBzcGFjZSBkZXRlY3Rpb24uCi0gICAgfQorICAg
IGludCBuZXh0VUNCcmVhayA9IC0xOworICAgIGludCBpOworICAgIHVuc2lnbmVkIHNob3J0IGNo
LCBsYXN0Q2g7CiAgICAgCi0gICAgLy8gTWF0Y2ggV2luSUUncyBicmVha2luZyBzdHJhdGVneSwg
d2hpY2ggaXMgdG8gYWx3YXlzIGFsbG93IGJyZWFrcyBhZnRlciBoeXBoZW5zIGFuZCBxdWVzdGlv
biBtYXJrcy4KLSAgICBpZiAobGFzdENoID09ICctJyB8fCBsYXN0Q2ggPT0gJz8nKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIE5vIG90aGVyIGFzY2lpIGNoYXJzIGFyZSBicmVha2Fi
bGUuCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmICAgIAorICAgIGxhc3RDaCA9IHBvcyA+IDAg
PyBzdHJbcG9zIC0gMV0udW5pY29kZSgpIDogMDsKKyAgICBmb3IgKGkgPSBwb3M7IGkgPCBsZW47
IGkrKykgeworICAgICAgICBjaCA9IHN0cltpXS51bmljb2RlKCk7CisgICAgICAgIGlmIChjaCA9
PSAnICcgfHwgY2ggPT0gJ1xuJyB8fCBjaCA9PSAnXHQnIHx8IChicmVha05CU1AgJiYgY2ggPT0g
MHhhMCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLy8gTWF0Y2ggV2luSUUncyBicmVh
a2luZyBzdHJhdGVneSwgd2hpY2ggaXMgdG8gYWx3YXlzIGFsbG93IGJyZWFrcyBhZnRlciBoeXBo
ZW5zIGFuZCBxdWVzdGlvbiBtYXJrcy4KKyAgICAgICAgaWYgKGxhc3RDaCA9PSAnLScgfHwgbGFz
dENoID09ICc/JykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvLyBJZiBjdXJyZW50IGNo
YXJhY3Rlciwgb3IgdGhlIHByZXZpb3VzIGNoYXJhY3RlciBhcmVuJ3Qgc2ltcGxlIGxhdGluMSB0
aGVuCisgICAgICAgIC8vIHVzZSB0aGUgVUMgbGluZSBicmVhayBsb2NhdG9yLiAgVUNGaW5kVGV4
dEJyZWFrIHdpbGwgcmVwb3J0IGZhbHNlIGlmIHdlCisgICAgICAgIC8vIGhhdmUgYSBzZXF1ZW5j
ZSBvZiAweGEwIDB4MjAgKG5ic3AsIHNwKSwgc28gd2UgZXhwbGljaXR5IGNoZWNrIGZvciB0aGF0
CisgICAgICAgIC8vIGNhc2UuCisgICAgICAgIGlmICgoY2ggPiAweDdmICYmIGNoICE9IDB4YTAp
IHx8IChsYXN0Q2ggPiAweDdmICYmIGxhc3RDaCAhPSAweGEwKSkgeworICAgICAgICAgICAgaWYg
KG5leHRVQ0JyZWFrIDwgaSkgeworICAgICAgICAgICAgICAgIGlmICghYnJlYWtMb2NhdG9yKQor
ICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBVQ0NyZWF0ZVRleHRCcmVha0xvY2F0b3IoTlVM
TCwgMCwga1VDVGV4dEJyZWFrTGluZU1hc2ssICZicmVha0xvY2F0b3IpOworICAgICAgICAgICAg
ICAgIGlmIChzdGF0dXMgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgZmluZFN0YXR1cyA9IFVD
RmluZFRleHRCcmVhayhicmVha0xvY2F0b3IsIGtVQ1RleHRCcmVha0xpbmVNYXNrLCAwLCAoY29u
c3QgVW5pQ2hhciAqKXN0ciwgbGVuLCBpLCAoVW5pQ2hhckFycmF5T2Zmc2V0ICopJm5leHRVQ0Jy
ZWFrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmaW5kU3RhdHVzID09IDAgJiYg
aSA9PSBuZXh0VUNCcmVhayAmJiAhKGxhc3RDaCA9PSAnICcgfHwgbGFzdENoID09ICdcbicgfHwg
bGFzdENoID09ICdcdCcgfHwgKGJyZWFrTkJTUCAmJiBsYXN0Q2ggPT0gMHhhMCkpKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGxhc3RDaCA9IGNoOworICAgIH0K
KyAgICByZXR1cm4gaTsKIH0KIAotfTsKK307ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJ
bmRleDogYnJlYWtfbGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9raHRtbC9yZW5kZXJpbmcvYnJlYWtfbGluZXMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4y
CmRpZmYgLXUgLXAgLXIxLjIgYnJlYWtfbGluZXMuaAotLS0gYnJlYWtfbGluZXMuaAk1IE9jdCAy
MDA0IDIwOjA1OjM4IC0wMDAwCTEuMgorKysgYnJlYWtfbGluZXMuaAkyIFNlcCAyMDA1IDE0OjU4
OjU3IC0wMDAwCkBAIC0xLDUgKzEsNSBAQAogI2luY2x1ZGUgPHFzdHJpbmcuaD4KIAogbmFtZXNw
YWNlIGtodG1sIHsKLSAgICBib29sIGlzQnJlYWthYmxlKGNvbnN0IFFDaGFyICpzdHIsIGludCBw
b3MsIGludCBsZW4sIGJvb2wgYnJlYWtOQlNQID0gZmFsc2UpOworICAgIGludCBuZXh0QnJlYWth
YmxlUG9zaXRpb24oY29uc3QgUUNoYXIgKnN0ciwgaW50IHBvcywgaW50IGxlbiwgYm9vbCBicmVh
a05CU1AgPSBmYWxzZSk7CiB9OwpJbmRleDogcmVuZGVyX3RleHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfdGV4dC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTk1CmRpZmYgLXUgLXAgLXIxLjE5NSByZW5kZXJfdGV4
dC5jcHAKLS0tIHJlbmRlcl90ZXh0LmNwcAkxIFNlcCAyMDA1IDE4OjAzOjMzIC0wMDAwCTEuMTk1
CisrKyByZW5kZXJfdGV4dC5jcHAJMiBTZXAgMjAwNSAxNDo1OTowMiAtMDAwMApAQCAtMTMxNCw2
ICsxMzE0LDcgQEAgdm9pZCBSZW5kZXJUZXh0OjpjYWxjTWluTWF4V2lkdGgoaW50IGxlYQogICAg
IGJvb2wgaXNQcmUgPSBzdHlsZSgpLT53aGl0ZVNwYWNlKCkgPT0gUFJFOwogICAgIGJvb2wgZmly
c3RXb3JkID0gdHJ1ZTsKICAgICBib29sIGZpcnN0TGluZSA9IHRydWU7CisgICAgaW50IG5leHRC
cmVha2FibGUgPSAtMTsKICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspCiAgICAgewog
ICAgICAgICBjb25zdCBRQ2hhciBjID0gc3RyLT5zW2ldOwpAQCAtMTM1NCwxMSArMTM1NSwxNyBA
QCB2b2lkIFJlbmRlclRleHQ6OmNhbGNNaW5NYXhXaWR0aChpbnQgbGVhCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgaWYgKG5leHRCcmVha2FibGUg
PCBpKQorICAgICAgICAgICAgbmV4dEJyZWFrYWJsZSA9IG5leHRCcmVha2FibGVQb3NpdGlvbihz
dHItPnMsIGksIHN0ci0+bCk7CisgICAgICAgIGJvb2wgaGFzQnJlYWsgPSBuZXh0QnJlYWthYmxl
ID09IGk7CiAgICAgICAgIGludCB3b3JkbGVuID0gMDsKICAgICAgICAgd2hpbGUgKGkrd29yZGxl
biA8IGxlbiAmJiBzdHItPnNbaSt3b3JkbGVuXSAhPSAnXG4nICYmIHN0ci0+c1tpK3dvcmRsZW5d
ICE9ICcgJyAmJiBzdHItPnNbaSt3b3JkbGVuXSAhPSAnXHQnICYmCiAgICAgICAgICAgICAgICAo
aSt3b3JkbGVuID09IDAgfHwgc3RyLT5zW2krd29yZGxlbl0udW5pY29kZSgpICE9IFNPRlRfSFlQ
SEVOKSAmJiAvLyBTa2lwIHNvZnQgaHlwaGVucwotICAgICAgICAgICAgICAgKHdvcmRsZW4gPT0g
MCB8fCAhaXNCcmVha2FibGUoIHN0ci0+cywgaSt3b3JkbGVuLCBzdHItPmwpKSkKKyAgICAgICAg
ICAgICAgICh3b3JkbGVuID09IDAgfHwgaSt3b3JkbGVuICE9IG5leHRCcmVha2FibGUpKSB7CiAg
ICAgICAgICAgICB3b3JkbGVuKys7CisgICAgICAgICAgICBpZiAobmV4dEJyZWFrYWJsZSA8IGkr
d29yZGxlbikKKyAgICAgICAgICAgICAgICBuZXh0QnJlYWthYmxlID0gbmV4dEJyZWFrYWJsZVBv
c2l0aW9uKHN0ci0+cywgaSt3b3JkbGVuLCBzdHItPmwpOworICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgaWYgKHdvcmRsZW4pCiAgICAgICAgIHsKQEAgLTEzODYsNyArMTM5Myw2IEBA
IHZvaWQgUmVuZGVyVGV4dDo6Y2FsY01pbk1heFdpZHRoKGludCBsZWEKICAgICAgICAgICAgICAg
ICAvLyBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBydW4gaXMgYnJlYWthYmxlLCB0aGVu
IHdlIGNvbnNpZGVyIG91cnNlbHZlcyB0byBoYXZlIGEgYmVnaW5uaW5nCiAgICAgICAgICAgICAg
ICAgLy8gbWluaW11bSB3aWR0aCBvZiAwLCBzaW5jZSBhIGJyZWFrIGNvdWxkIG9jY3VyIHJpZ2h0
IGJlZm9yZSBvdXIgcnVuIHN0YXJ0cywgcHJldmVudGluZyB1cyBmcm9tIGV2ZXIKICAgICAgICAg
ICAgICAgICAvLyBiZWluZyBhcHBlbmRlZCB0byBhIHByZXZpb3VzIHRleHQgcnVuIHdoZW4gY29u
c2lkZXJpbmcgdGhlIHRvdGFsIG1pbmltdW0gd2lkdGggb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2su
Ci0gICAgICAgICAgICAgICAgYm9vbCBoYXNCcmVhayA9IGlzQnJlYWthYmxlKHN0ci0+cywgaSwg
c3RyLT5sKTsKICAgICAgICAgICAgICAgICBpZiAoaGFzQnJlYWspCiAgICAgICAgICAgICAgICAg
ICAgIG1faGFzQnJlYWthYmxlQ2hhciA9IHRydWU7CiAgICAgICAgICAgICAgICAgbV9iZWdpbk1p
bldpZHRoID0gaGFzQnJlYWsgPyAwIDogdzsK
</data>
<flag name="review"
          id="489"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3733</attachid>
            <date>2005-09-03 16:43:59 -0700</date>
            <delta_ts>2005-09-03 16:45:20 -0700</delta_ts>
            <desc>revised patch</desc>
            <filename>4789_patch_r3.txt</filename>
            <type>text/plain</type>
            <size>12182</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IGJpZGkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL3JlbmRlcmluZy9iaWRpLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNDAKZGlmZiAt
cCAtdSAtcjEuMTQwIGJpZGkuY3BwCi0tLSBiaWRpLmNwcAkxNSBBdWcgMjAwNSAyMzozMToxNiAt
MDAwMAkxLjE0MAorKysgYmlkaS5jcHAJMyBTZXAgMjAwNSAyMzo0NDoxMSAtMDAwMApAQCAtMjA3
NCwxMyArMjA3NCwxNCBAQCBCaWRpSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJy
CiAgICAgICAgICAgICBib29sIGFwcGxpZWRFbmRXaWR0aCA9IGZhbHNlOwogCiAgICAgICAgICAg
ICBpbnQgd3JhcFcgPSB0bXBXOworICAgICAgICAgICAgaW50IG5leHRCcmVha2FibGUgPSAtMTsK
IAogICAgICAgICAgICAgd2hpbGUobGVuKSB7CiAgICAgICAgICAgICAgICAgYm9vbCBwcmV2aW91
c0NoYXJhY3RlcklzU3BhY2UgPSBjdXJyZW50Q2hhcmFjdGVySXNTcGFjZTsKICAgICAgICAgICAg
ICAgICBib29sIHByZXZpb3VzQ2hhcmFjdGVySXNXUyA9IGN1cnJlbnRDaGFyYWN0ZXJJc1dTOwog
ICAgICAgICAgICAgICAgIGNvbnN0IFFDaGFyIGMgPSBzdHJbcG9zXTsKICAgICAgICAgICAgICAg
ICBjdXJyZW50Q2hhcmFjdGVySXNTcGFjZSA9IGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCAoIWlz
UHJlICYmIChjID09ICdcbicpKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAg
IGlmIChpc1ByZSB8fCAhY3VycmVudENoYXJhY3RlcklzU3BhY2UpCiAgICAgICAgICAgICAgICAg
ICAgIGlzTGluZUVtcHR5ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgCkBAIC0yMTE4LDcgKzIx
MTksMTEgQEAgQmlkaUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmVCcgogCiAgICAg
ICAgICAgICAgICAgaWYgKGJyZWFrV29yZHMpCiAgICAgICAgICAgICAgICAgICAgIHdyYXBXICs9
IHQtPndpZHRoKHBvcywgMSwgZiwgdyt3cmFwVyk7Ci0gICAgICAgICAgICAgICAgaWYgKGMgPT0g
J1xuJyB8fCAoIWlzUHJlICYmIGlzQnJlYWthYmxlKHN0ciwgcG9zLCBzdHJsZW4sIGJyZWFrTkJT
UCkpIHx8IChicmVha1dvcmRzICYmICh3ICsgd3JhcFcgPiB3aWR0aCkpKSB7CisKKyAgICAgICAg
ICAgICAgICBpZiAocG9zID4gbmV4dEJyZWFrYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgbmV4
dEJyZWFrYWJsZSA9IG5leHRCcmVha2FibGVQb3NpdGlvbihzdHIsIHBvcywgc3RybGVuLCBicmVh
a05CU1ApOworCisgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1xuJyB8fCAoIWlzUHJlICYmIGlz
QnJlYWthYmxlKHN0ciwgcG9zLCBzdHJsZW4sIG5leHRCcmVha2FibGUsIGJyZWFrTkJTUCkpIHx8
IChicmVha1dvcmRzICYmICh3ICsgd3JhcFcgPiB3aWR0aCkpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChpZ25vcmluZ1NwYWNlcykgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFj
dXJyZW50Q2hhcmFjdGVySXNTcGFjZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFN0b3AgaWdub3Jpbmcgc3BhY2VzIGFuZCBiZWdpbiBhdCB0aGlzCkluZGV4OiBicmVha19saW5l
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVy
aW5nL2JyZWFrX2xpbmVzLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMwpkaWZmIC1wIC11
IC1yMS4yMyBicmVha19saW5lcy5jcHAKLS0tIGJyZWFrX2xpbmVzLmNwcAkyNyBBdWcgMjAwNSAx
ODo1NTowMCAtMDAwMAkxLjIzCisrKyBicmVha19saW5lcy5jcHAJMyBTZXAgMjAwNSAyMzo0NDox
MSAtMDAwMApAQCAtMjQsOTcgKzI0LDQwIEBAIHZvaWQgY2xlYW51cExpbmVCcmVha2VyKCkKIH0K
IAogbmFtZXNwYWNlIGtodG1sIHsKLS8qCi0gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlLCBp
ZiB0aGUgc3RyaW5nIGNhbiBicmUgYnJva2VuIGJlZm9yZSB0aGUgCi0gIGNoYXJhY3RlciBhdCBw
b3NpdGlvbiBwb3MgaW4gdGhlIHN0cmluZyBzIHdpdGggbGVuZ3RoIGxlbgotKi8KLWJvb2wgaXNC
cmVha2FibGUoY29uc3QgUUNoYXIgKnMsIGludCBwb3MsIGludCBsZW4sIGJvb2wgYnJlYWtOQlNQ
KQorCitpbnQgbmV4dEJyZWFrYWJsZVBvc2l0aW9uKGNvbnN0IFFDaGFyICpzdHIsIGludCBwb3Ms
IGludCBsZW4sIGJvb2wgYnJlYWtOQlNQKQogewotI2lmICFBUFBMRV9DSEFOR0VTCi0gICAgY29u
c3QgUUNoYXIgKmMgPSBzK3BvczsKLSAgICB1bnNpZ25lZCBzaG9ydCBjaCA9IGMtPnVuaWNvZGUo
KTsKLSAgICBpZiAoIGNoID4gMHhmZiApIHsKLQkvLyBub3QgbGF0aW4xLCBuZWVkIHRvIGRvIG1v
cmUgc29waGlzdGljYXRlZCBjaGVja3MgZm9yIGFzaWFuIGZvbnRzCi0JdW5zaWduZWQgY2hhciBy
b3cgPSBjLT5yb3coKTsKLQlpZiAoIHJvdyA9PSAweDBlICkgewotCSAgICAvLyAwZTAwIC0gMGU3
ZiA9PSBUaGFpCi0JICAgIGlmICggYy0+Y2VsbCgpIDwgMHg4MCApIHsKLSNpZmRlZiBIQVZFX1RI
QUlfQlJFQUtTCi0JCS8vIGNoZWNrIGZvciB0aGFpCi0JCWlmKCBzICE9IGNhY2hlZCApIHsKLQkJ
ICAgIC8vIGJ1aWxkIHVwIHN0cmluZyBvZiB0aGFpIGNoYXJzCi0JCSAgICBRVGV4dENvZGVjICp0
aGFpQ29kZWMgPSBRVGV4dENvZGVjOjpjb2RlY0Zvck1pYigyMjU5KTsKLQkJICAgIGlmICggIWNh
Y2hlZFN0cmluZyApCi0JCQljYWNoZWRTdHJpbmcgPSBuZXcgUUNTdHJpbmc7Ci0JCSAgICBpZiAo
ICF0aGFpSXQgKQotCQkJdGhhaUl0ID0gVGhCcmVha0l0ZXJhdG9yOjpjcmVhdGVXb3JkSW5zdGFu
Y2UoKTsgCi0JCSAgICAqY2FjaGVkU3RyaW5nID0gdGhhaUNvZGVjLT5mcm9tVW5pY29kZSggUUNv
bnN0U3RyaW5nKCAoUUNoYXIgKilzLCBsZW4gKS5xc3RyaW5nKCkgKTsKLQkJfQotCQl0aGFpSXQt
PnNldFRleHQoKHRjaGFyICopY2FjaGVkU3RyaW5nLT5kYXRhKCkpOwotCQlmb3IoaW50IGkgPSB0
aGFpSXQtPmZpcnN0KCk7IGkgIT0gdGhhaUl0LT5ET05FOyBpID0gdGhhaUl0LT5uZXh0KCkgKSB7
Ci0JCSAgICBpZiggaSA9PSBwb3MgKQotCQkJcmV0dXJuIHRydWU7Ci0JCSAgICBpZiggaSA+IHBv
cyApCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotI2Vsc2UKLQkJLy8g
aWYgd2UgZG9uJ3QgaGF2ZSBhIHRoYWkgbGluZSBicmVha2luZyBsaWIsIGFsbG93Ci0JCS8vIGJy
ZWFrcyBldmVyeXdoZXJlIGV4Y2VwdCBkaXJlY3RseSBiZWZvcmUgcHVuY3R1YXRpb24uCi0JCXJl
dHVybiB0cnVlOwotI2VuZGlmCi0JICAgIH0gZWxzZSAKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlp
ZiAoIHJvdyA+IDB4MmQgJiYgcm93IDwgMHhmYiB8fCByb3cgPT0gMHgxMSApCi0JICAgIC8vIGFz
aWFuIGxpbmUgYnJlYWtpbmcuIEV2ZXJ5d2hlcmUgYWxsb3dlZCBleGNlcHQgZGlyZWN0bHkKLQkg
ICAgLy8gaW4gZnJvbnQgb2YgYSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXIuCi0JICAgIHJldHVybiB0
cnVlOwotCWVsc2UgLy8gbm8gYXNpYW4gZm9udAotCSAgICByZXR1cm4gYy0+aXNTcGFjZSgpOwot
ICAgIH0gZWxzZSB7Ci0JaWYgKCBjaCA9PSAnICcgfHwgY2ggPT0gJ1x0JyB8fCBjaCA9PSAnXG4n
ICkKLQkgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSNlbHNlCi0g
ICAgT1NTdGF0dXMgc3RhdHVzID0gMCwgZmluZFN0YXR1cyA9IDA7CisgICAgT1NTdGF0dXMgc3Rh
dHVzID0gMCwgZmluZFN0YXR1cyA9IC0xOwogICAgIHN0YXRpYyBUZXh0QnJlYWtMb2NhdG9yUmVm
IGJyZWFrTG9jYXRvciA9IDA7Ci0gICAgVW5pQ2hhckFycmF5T2Zmc2V0IGVuZDsKLSAgICBjb25z
dCBRQ2hhciAqYyA9IHMrcG9zOwotICAgIHVuc2lnbmVkIHNob3J0IGNoID0gYy0+dW5pY29kZSgp
OwotCi0gICAgLy8gTmV3bGluZXMgYW5kIHNwYWNlcyBhcmUgYWx3YXlzIGJyZWFrYWJsZSwgYXMg
YXJlIG5vbi1icmVha2luZyBzcGFjZXMgd2hlbiBicmVha05CU1AgaXMgdHJ1ZS4KLSAgICAvLyBG
SVhNRTogVGlnZXIgaXMgbm90IGFsbG93aW5nIGJyZWFrcyBvbiBzcGFjZXMgYWZ0ZXIgYnVsbGV0
IGNoYXJhY3RlcnMgbGlrZSAmIzE4MzsuICBXZSBkb24ndCBrbm93Ci0gICAgLy8gYXQgdGhlIG1v
bWVudCB3aGV0aGVyIHRoaXMgYmVoYXZpb3IgaXMgY29ycmVjdCBvciBub3QuICBTaW5jZSBUaWdl
ciBpcyBhbHNvIG5vdCBhbGxvd2luZyBicmVha3Mgb24gc3BhY2VzCi0gICAgLy8gYWZ0ZXIgaHlw
aGVuLWxpa2UgY2hhcmFjdGVycywgdGhpcyBkb2VzIG5vdCBzZWVtIGlkZWFsIGZvciB0aGUgV2Vi
LiAgVGhlcmVmb3JlIGZvciBub3cgd2Ugb3ZlcnJpZGUgc3BhY2UKLSAgICAvLyBjaGFyYWN0ZXJz
IHVwIGZyb250IGFuZCBieXBhc3MgdGhlIFVuaWNvZGUgbGluZSBicmVha2luZyByb3V0aW5lcy4K
LSAgICBpZiAoY2ggPT0gJyAnIHx8IGNoID09ICdcbicgfHwgY2ggPT0gJ1x0JyB8fCAoYnJlYWtO
QlNQICYmIGNoID09IDB4YTApKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIElmIGN1
cnJlbnQgY2hhcmFjdGVyLCBvciB0aGUgcHJldmlvdXMgY2hhcmFjdGVyIGFyZW4ndCBzaW1wbGUg
bGF0aW4xIHRoZW4KLSAgICAvLyB1c2UgdGhlIFVDIGxpbmUgYnJlYWsgbG9jYXRvci4gIFVDRmlu
ZFRleHRCcmVhayB3aWxsIHJlcG9ydCBmYWxzZSBpZiB3ZQotICAgIC8vIGhhdmUgYSBzZXF1ZW5j
ZSBvZiAweGEwIDB4MjAgKG5ic3AsIHNwKSwgc28gd2UgZXhwbGljaXR5IGNoZWNrIGZvciB0aGF0
Ci0gICAgLy8gY2FzZS4KLSAgICB1bnNpZ25lZCBzaG9ydCBsYXN0Q2ggPSBwb3MgPiAwID8gKHMr
cG9zLTEpLT51bmljb2RlKCkgOiAwOwotICAgIGlmICgoY2ggPiAweDdmICYmIGNoICE9IDB4YTAp
IHx8IChsYXN0Q2ggPiAweDdmICYmIGxhc3RDaCAhPSAweGEwKSkgewotICAgICAgICBpZiAoIWJy
ZWFrTG9jYXRvcikKLSAgICAgICAgICAgIHN0YXR1cyA9IFVDQ3JlYXRlVGV4dEJyZWFrTG9jYXRv
cihOVUxMLCAwLCBrVUNUZXh0QnJlYWtMaW5lTWFzaywgJmJyZWFrTG9jYXRvcik7Ci0gICAgICAg
IGlmIChzdGF0dXMgPT0gMCkKLSAgICAgICAgICAgIGZpbmRTdGF0dXMgPSBVQ0ZpbmRUZXh0QnJl
YWsoYnJlYWtMb2NhdG9yLCBrVUNUZXh0QnJlYWtMaW5lTWFzaywgMCwgKGNvbnN0IFVuaUNoYXIg
KilzLCBsZW4sIHBvcywgJmVuZCk7Ci0gICAgICAgIGlmIChmaW5kU3RhdHVzID09IDApCi0gICAg
ICAgICAgICByZXR1cm4gKGludCllbmQgPT0gcG9zICYmICEobGFzdENoID09ICcgJyB8fCBsYXN0
Q2ggPT0gJ1xuJyB8fCBsYXN0Q2ggPT0gJ1x0JyB8fCAoYnJlYWtOQlNQICYmIGxhc3RDaCA9PSAw
eGEwKSk7Ci0KLSAgICAgICAgLy8gSWYgQ2FyYm9uIGZhaWxzLCBmYWlsIGJhY2sgb24gc2ltcGxl
IHdoaXRlIHNwYWNlIGRldGVjdGlvbi4KLSAgICB9CisgICAgaW50IG5leHRVQ0JyZWFrID0gLTE7
CisgICAgaW50IGk7CisgICAgdW5zaWduZWQgc2hvcnQgY2gsIGxhc3RDaDsKICAgICAKLSAgICAv
LyBNYXRjaCBXaW5JRSdzIGJyZWFraW5nIHN0cmF0ZWd5LCB3aGljaCBpcyB0byBhbHdheXMgYWxs
b3cgYnJlYWtzIGFmdGVyIGh5cGhlbnMgYW5kIHF1ZXN0aW9uIG1hcmtzLgotICAgIGlmIChsYXN0
Q2ggPT0gJy0nIHx8IGxhc3RDaCA9PSAnPycpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
Ly8gTm8gb3RoZXIgYXNjaWkgY2hhcnMgYXJlIGJyZWFrYWJsZS4KLSAgICByZXR1cm4gZmFsc2U7
Ci0jZW5kaWYgICAgCisgICAgbGFzdENoID0gcG9zID4gMCA/IHN0cltwb3MgLSAxXS51bmljb2Rl
KCkgOiAwOworICAgIGZvciAoaSA9IHBvczsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgIGNoID0g
c3RyW2ldLnVuaWNvZGUoKTsKKyAgICAgICAgaWYgKGNoID09ICcgJyB8fCBjaCA9PSAnXG4nIHx8
IGNoID09ICdcdCcgfHwgKGJyZWFrTkJTUCAmJiBjaCA9PSAweGEwKSkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAvLyBNYXRjaCBXaW5JRSdzIGJyZWFraW5nIHN0cmF0ZWd5LCB3aGljaCBp
cyB0byBhbHdheXMgYWxsb3cgYnJlYWtzIGFmdGVyIGh5cGhlbnMgYW5kIHF1ZXN0aW9uIG1hcmtz
LgorICAgICAgICBpZiAobGFzdENoID09ICctJyB8fCBsYXN0Q2ggPT0gJz8nKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIC8vIElmIGN1cnJlbnQgY2hhcmFjdGVyLCBvciB0aGUgcHJldmlv
dXMgY2hhcmFjdGVyIGFyZW4ndCBzaW1wbGUgbGF0aW4xIHRoZW4KKyAgICAgICAgLy8gdXNlIHRo
ZSBVQyBsaW5lIGJyZWFrIGxvY2F0b3IuICBVQ0ZpbmRUZXh0QnJlYWsgd2lsbCByZXBvcnQgZmFs
c2UgaWYgd2UKKyAgICAgICAgLy8gaGF2ZSBhIHNlcXVlbmNlIG9mIDB4YTAgMHgyMCAobmJzcCwg
c3ApLCBzbyB3ZSBleHBsaWNpdHkgY2hlY2sgZm9yIHRoYXQKKyAgICAgICAgLy8gY2FzZS4KKyAg
ICAgICAgaWYgKChjaCA+IDB4N2YgJiYgY2ggIT0gMHhhMCkgfHwgKGxhc3RDaCA+IDB4N2YgJiYg
bGFzdENoICE9IDB4YTApKSB7CisgICAgICAgICAgICBpZiAobmV4dFVDQnJlYWsgPCBpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFicmVha0xvY2F0b3IpCisgICAgICAgICAgICAgICAgICAgIHN0
YXR1cyA9IFVDQ3JlYXRlVGV4dEJyZWFrTG9jYXRvcihOVUxMLCAwLCBrVUNUZXh0QnJlYWtMaW5l
TWFzaywgJmJyZWFrTG9jYXRvcik7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSAwKQor
ICAgICAgICAgICAgICAgICAgICBmaW5kU3RhdHVzID0gVUNGaW5kVGV4dEJyZWFrKGJyZWFrTG9j
YXRvciwga1VDVGV4dEJyZWFrTGluZU1hc2ssIDAsIChjb25zdCBVbmlDaGFyICopc3RyLCBsZW4s
IGksIChVbmlDaGFyQXJyYXlPZmZzZXQgKikmbmV4dFVDQnJlYWspOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKGZpbmRTdGF0dXMgPT0gMCAmJiBpID09IG5leHRVQ0JyZWFrICYmICEo
bGFzdENoID09ICcgJyB8fCBsYXN0Q2ggPT0gJ1xuJyB8fCBsYXN0Q2ggPT0gJ1x0JyB8fCAoYnJl
YWtOQlNQICYmIGxhc3RDaCA9PSAweGEwKSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgbGFzdENoID0gY2g7CisgICAgfQorICAgIHJldHVybiBpOwogfQogCi19
OworfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBicmVha19saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9icmVh
a19saW5lcy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAtdSAtcjEuMiBicmVh
a19saW5lcy5oCi0tLSBicmVha19saW5lcy5oCTUgT2N0IDIwMDQgMjA6MDU6MzggLTAwMDAJMS4y
CisrKyBicmVha19saW5lcy5oCTMgU2VwIDIwMDUgMjM6NDQ6MTEgLTAwMDAKQEAgLTEsNSArMSwx
MCBAQAogI2luY2x1ZGUgPHFzdHJpbmcuaD4KIAogbmFtZXNwYWNlIGtodG1sIHsKLSAgICBib29s
IGlzQnJlYWthYmxlKGNvbnN0IFFDaGFyICpzdHIsIGludCBwb3MsIGludCBsZW4sIGJvb2wgYnJl
YWtOQlNQID0gZmFsc2UpOworICAgIGludCBuZXh0QnJlYWthYmxlUG9zaXRpb24oY29uc3QgUUNo
YXIgKnN0ciwgaW50IHBvcywgaW50IGxlbiwgYm9vbCBicmVha05CU1AgPSBmYWxzZSk7CisgICAg
aW5saW5lIGJvb2wgaXNCcmVha2FibGUoY29uc3QgUUNoYXIgKnN0ciwgaW50IHBvcywgaW50IGxl
biwgaW50ICZuZXh0QnJlYWthYmxlLCBib29sIGJyZWFrTkJTUCA9IGZhbHNlKSB7CisgICAgICAg
IGlmIChwb3MgPiBuZXh0QnJlYWthYmxlKQorICAgICAgICAgICAgbmV4dEJyZWFrYWJsZSA9IG5l
eHRCcmVha2FibGVQb3NpdGlvbihzdHIsIHBvcywgbGVuLCBicmVha05CU1ApOworICAgICAgICBy
ZXR1cm4gcG9zID09IG5leHRCcmVha2FibGU7CisgICAgfQogfTsKSW5kZXg6IHJlbmRlcl90ZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJp
bmcvcmVuZGVyX3RleHQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE5NQpkaWZmIC1wIC11
IC1yMS4xOTUgcmVuZGVyX3RleHQuY3BwCi0tLSByZW5kZXJfdGV4dC5jcHAJMSBTZXAgMjAwNSAx
ODowMzozMyAtMDAwMAkxLjE5NQorKysgcmVuZGVyX3RleHQuY3BwCTMgU2VwIDIwMDUgMjM6NDQ6
MTYgLTAwMDAKQEAgLTEzMDgsMTUgKzEzMDgsMTcgQEAgdm9pZCBSZW5kZXJUZXh0OjpjYWxjTWlu
TWF4V2lkdGgoaW50IGxlYQogICAgIGNvbnN0IEZvbnQgKmYgPSBodG1sRm9udCggZmFsc2UgKTsK
ICAgICBpbnQgd29yZFNwYWNpbmcgPSBzdHlsZSgpLT53b3JkU3BhY2luZygpOwogICAgIGludCBs
ZW4gPSBzdHItPmw7CisgICAgUUNoYXIgKnR4dCA9IHN0ci0+czsKICAgICBib29sIG5lZWRzV29y
ZFNwYWNpbmcgPSBmYWxzZTsKICAgICBib29sIGlnbm9yaW5nU3BhY2VzID0gZmFsc2U7CiAgICAg
Ym9vbCBpc1NwYWNlID0gZmFsc2U7CiAgICAgYm9vbCBpc1ByZSA9IHN0eWxlKCktPndoaXRlU3Bh
Y2UoKSA9PSBQUkU7CiAgICAgYm9vbCBmaXJzdFdvcmQgPSB0cnVlOwogICAgIGJvb2wgZmlyc3RM
aW5lID0gdHJ1ZTsKKyAgICBpbnQgbmV4dEJyZWFrYWJsZSA9IC0xOwogICAgIGZvcihpbnQgaSA9
IDA7IGkgPCBsZW47IGkrKykKICAgICB7Ci0gICAgICAgIGNvbnN0IFFDaGFyIGMgPSBzdHItPnNb
aV07CisgICAgICAgIFFDaGFyIGMgPSB0eHRbaV07CiAgICAgICAgIAogICAgICAgICBib29sIHBy
ZXZpb3VzQ2hhcmFjdGVySXNTcGFjZSA9IGlzU3BhY2U7CiAgICAgICAgIApAQCAtMTM1NCwxMiAr
MTM1NiwxOCBAQCB2b2lkIFJlbmRlclRleHQ6OmNhbGNNaW5NYXhXaWR0aChpbnQgbGVhCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaW50IHdvcmRs
ZW4gPSAwOwotICAgICAgICB3aGlsZSAoaSt3b3JkbGVuIDwgbGVuICYmIHN0ci0+c1tpK3dvcmRs
ZW5dICE9ICdcbicgJiYgc3RyLT5zW2krd29yZGxlbl0gIT0gJyAnICYmIHN0ci0+c1tpK3dvcmRs
ZW5dICE9ICdcdCcgJiYKLSAgICAgICAgICAgICAgIChpK3dvcmRsZW4gPT0gMCB8fCBzdHItPnNb
aSt3b3JkbGVuXS51bmljb2RlKCkgIT0gU09GVF9IWVBIRU4pICYmIC8vIFNraXAgc29mdCBoeXBo
ZW5zCi0gICAgICAgICAgICAgICAod29yZGxlbiA9PSAwIHx8ICFpc0JyZWFrYWJsZSggc3RyLT5z
LCBpK3dvcmRsZW4sIHN0ci0+bCkpKQotICAgICAgICAgICAgd29yZGxlbisrOworICAgICAgICBi
b29sIGhhc0JyZWFrID0gaXNCcmVha2FibGUodHh0LCBpLCBsZW4sIG5leHRCcmVha2FibGUpOwor
ICAgICAgICBpbnQgaiA9IGk7CisgICAgICAgIHdoaWxlIChjICE9ICdcbicgJiYgYyAhPSAnICcg
JiYgYyAhPSAnXHQnICYmIChqID09IDAgfHwgYy51bmljb2RlKCkgIT0gU09GVF9IWVBIRU4pKSB7
CisgICAgICAgICAgICBqKys7CisgICAgICAgICAgICBpZiAoaiA9PSBsZW4pCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjID0gdHh0W2pdOworICAgICAgICAgICAgaWYgKGlz
QnJlYWthYmxlKHR4dCwgaiwgbGVuLCBuZXh0QnJlYWthYmxlKSkKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGludCB3b3JkbGVuID0gaiAt
IGk7CiAgICAgICAgIGlmICh3b3JkbGVuKQogICAgICAgICB7CiAjaWYgIUFQUExFX0NIQU5HRVMK
QEAgLTEzNzAsMTUgKzEzNzgsMTUgQEAgdm9pZCBSZW5kZXJUZXh0OjpjYWxjTWluTWF4V2lkdGgo
aW50IGxlYQogICAgICAgICAgICAgY3Vyck1pbldpZHRoICs9IHc7CiAgICAgICAgICAgICBjdXJy
TWF4V2lkdGggKz0gdzsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYm9vbCBpc0JyZWFrYWJs
ZUNoYXJTcGFjZSA9IChpK3dvcmRsZW4gPCBsZW4pID8gKCghaXNQcmUgJiYgKHN0ci0+c1tpK3dv
cmRsZW5dID09ICdcbicgfHwgc3RyLT5zW2krd29yZGxlbl0gPT0gJ1x0JykpIHx8IAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ci0+c1tpK3dvcmRsZW5dID09ICcgJykgOiBmYWxzZTsKKyAgICAgICAgICAgIGJvb2wgaXNCcmVh
a2FibGVDaGFyU3BhY2UgPSAoaiA8IGxlbikgPyAoKCFpc1ByZSAmJiAoYyA9PSAnXG4nIHx8IGMg
PT0gJ1x0JykpIHx8IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGMgPT0gJyAnKSA6IGZhbHNlOwogCi0gICAgICAgICAgICBpZiAo
aSt3b3JkbGVuIDwgbGVuICYmIHN0eWxlKCktPndoaXRlU3BhY2UoKSA9PSBOT1JNQUwpCisgICAg
ICAgICAgICBpZiAoaiA8IGxlbiAmJiBzdHlsZSgpLT53aGl0ZVNwYWNlKCkgPT0gTk9STUFMKQog
ICAgICAgICAgICAgICAgIG1faGFzQnJlYWthYmxlQ2hhciA9IHRydWU7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIC8vIEFkZCBpbiB3b3JkU3BhY2luZyB0byBvdXIgY3Vyck1heFdpZHRoLCBi
dXQgbm90IGlmIHRoaXMgaXMgdGhlIGxhc3Qgd29yZCBvbiBhIGxpbmUgb3IgdGhlCiAgICAgICAg
ICAgICAvLyBsYXN0IHdvcmQgaW4gdGhlIHJ1bi4KLSAgICAgICAgICAgIGlmICh3b3JkU3BhY2lu
ZyAmJiBpc0JyZWFrYWJsZUNoYXJTcGFjZSAmJiAhY29udGFpbnNPbmx5V2hpdGVzcGFjZShpK3dv
cmRsZW4sIGxlbi0oaSt3b3JkbGVuKSkpCisgICAgICAgICAgICBpZiAod29yZFNwYWNpbmcgJiYg
aXNCcmVha2FibGVDaGFyU3BhY2UgJiYgIWNvbnRhaW5zT25seVdoaXRlc3BhY2UoaiwgbGVuLWop
KQogICAgICAgICAgICAgICAgIGN1cnJNYXhXaWR0aCArPSB3b3JkU3BhY2luZzsKIAogICAgICAg
ICAgICAgaWYgKGZpcnN0V29yZCkgewpAQCAtMTM4Niw3ICsxMzk0LDYgQEAgdm9pZCBSZW5kZXJU
ZXh0OjpjYWxjTWluTWF4V2lkdGgoaW50IGxlYQogICAgICAgICAgICAgICAgIC8vIElmIHRoZSBm
aXJzdCBjaGFyYWN0ZXIgaW4gdGhlIHJ1biBpcyBicmVha2FibGUsIHRoZW4gd2UgY29uc2lkZXIg
b3Vyc2VsdmVzIHRvIGhhdmUgYSBiZWdpbm5pbmcKICAgICAgICAgICAgICAgICAvLyBtaW5pbXVt
IHdpZHRoIG9mIDAsIHNpbmNlIGEgYnJlYWsgY291bGQgb2NjdXIgcmlnaHQgYmVmb3JlIG91ciBy
dW4gc3RhcnRzLCBwcmV2ZW50aW5nIHVzIGZyb20gZXZlcgogICAgICAgICAgICAgICAgIC8vIGJl
aW5nIGFwcGVuZGVkIHRvIGEgcHJldmlvdXMgdGV4dCBydW4gd2hlbiBjb25zaWRlcmluZyB0aGUg
dG90YWwgbWluaW11bSB3aWR0aCBvZiB0aGUgY29udGFpbmluZyBibG9jay4KLSAgICAgICAgICAg
ICAgICBib29sIGhhc0JyZWFrID0gaXNCcmVha2FibGUoc3RyLT5zLCBpLCBzdHItPmwpOwogICAg
ICAgICAgICAgICAgIGlmIChoYXNCcmVhaykKICAgICAgICAgICAgICAgICAgICAgbV9oYXNCcmVh
a2FibGVDaGFyID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBtX2JlZ2luTWluV2lkdGggPSBoYXNC
cmVhayA/IDAgOiB3OwpAQCAtMTQyMCw4ICsxNDI3LDggQEAgdm9pZCBSZW5kZXJUZXh0OjpjYWxj
TWluTWF4V2lkdGgoaW50IGxlYQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGN1cnJNYXhXaWR0aCArPSBmLT53aWR0aChzdHIt
PnMsIHN0ci0+bCwgaSArIHdvcmRsZW4sIDEsIHRhYldpZHRoKCksIGxlYWRXaWR0aCArIGN1cnJN
YXhXaWR0aCk7Ci0gICAgICAgICAgICAgICAgbmVlZHNXb3JkU3BhY2luZyA9IGlzU3BhY2UgJiYg
IXByZXZpb3VzQ2hhcmFjdGVySXNTcGFjZSAmJiBpICsgd29yZGxlbiA9PSBsZW4tMTsKKyAgICAg
ICAgICAgICAgICBjdXJyTWF4V2lkdGggKz0gZi0+d2lkdGgodHh0LCBsZW4sIGksIDEsIHRhYldp
ZHRoKCksIGxlYWRXaWR0aCArIGN1cnJNYXhXaWR0aCk7CisgICAgICAgICAgICAgICAgbmVlZHNX
b3JkU3BhY2luZyA9IGlzU3BhY2UgJiYgIXByZXZpb3VzQ2hhcmFjdGVySXNTcGFjZSAmJiBpID09
IGxlbi0xOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3735</attachid>
            <date>2005-09-03 16:54:00 -0700</date>
            <delta_ts>2005-09-03 23:32:14 -0700</delta_ts>
            <desc>revised patch</desc>
            <filename>4789_patch_r4.txt</filename>
            <type>text/plain</type>
            <size>12048</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IGJpZGkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL3JlbmRlcmluZy9iaWRpLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNDAKZGlmZiAt
cCAtdSAtcjEuMTQwIGJpZGkuY3BwCi0tLSBiaWRpLmNwcAkxNSBBdWcgMjAwNSAyMzozMToxNiAt
MDAwMAkxLjE0MAorKysgYmlkaS5jcHAJMyBTZXAgMjAwNSAyMzo1Mjo1NyAtMDAwMApAQCAtMjA3
NCwxMyArMjA3NCwxNCBAQCBCaWRpSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJy
CiAgICAgICAgICAgICBib29sIGFwcGxpZWRFbmRXaWR0aCA9IGZhbHNlOwogCiAgICAgICAgICAg
ICBpbnQgd3JhcFcgPSB0bXBXOworICAgICAgICAgICAgaW50IG5leHRCcmVha2FibGUgPSAtMTsK
IAogICAgICAgICAgICAgd2hpbGUobGVuKSB7CiAgICAgICAgICAgICAgICAgYm9vbCBwcmV2aW91
c0NoYXJhY3RlcklzU3BhY2UgPSBjdXJyZW50Q2hhcmFjdGVySXNTcGFjZTsKICAgICAgICAgICAg
ICAgICBib29sIHByZXZpb3VzQ2hhcmFjdGVySXNXUyA9IGN1cnJlbnRDaGFyYWN0ZXJJc1dTOwog
ICAgICAgICAgICAgICAgIGNvbnN0IFFDaGFyIGMgPSBzdHJbcG9zXTsKICAgICAgICAgICAgICAg
ICBjdXJyZW50Q2hhcmFjdGVySXNTcGFjZSA9IGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCAoIWlz
UHJlICYmIChjID09ICdcbicpKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAg
IGlmIChpc1ByZSB8fCAhY3VycmVudENoYXJhY3RlcklzU3BhY2UpCiAgICAgICAgICAgICAgICAg
ICAgIGlzTGluZUVtcHR5ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgCkBAIC0yMTE4LDcgKzIx
MTksOCBAQCBCaWRpSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyCiAKICAgICAg
ICAgICAgICAgICBpZiAoYnJlYWtXb3JkcykKICAgICAgICAgICAgICAgICAgICAgd3JhcFcgKz0g
dC0+d2lkdGgocG9zLCAxLCBmLCB3K3dyYXBXKTsKLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAn
XG4nIHx8ICghaXNQcmUgJiYgaXNCcmVha2FibGUoc3RyLCBwb3MsIHN0cmxlbiwgYnJlYWtOQlNQ
KSkgfHwgKGJyZWFrV29yZHMgJiYgKHcgKyB3cmFwVyA+IHdpZHRoKSkpIHsKKworICAgICAgICAg
ICAgICAgIGlmIChjID09ICdcbicgfHwgKCFpc1ByZSAmJiBpc0JyZWFrYWJsZShzdHIsIHBvcywg
c3RybGVuLCBuZXh0QnJlYWthYmxlLCBicmVha05CU1ApKSB8fCAoYnJlYWtXb3JkcyAmJiAodyAr
IHdyYXBXID4gd2lkdGgpKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoaWdub3JpbmdTcGFj
ZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VycmVudENoYXJhY3RlcklzU3Bh
Y2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9wIGlnbm9yaW5nIHNwYWNl
cyBhbmQgYmVnaW4gYXQgdGhpcwpJbmRleDogYnJlYWtfbGluZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9icmVha19saW5lcy5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjMKZGlmZiAtcCAtdSAtcjEuMjMgYnJlYWtfbGluZXMu
Y3BwCi0tLSBicmVha19saW5lcy5jcHAJMjcgQXVnIDIwMDUgMTg6NTU6MDAgLTAwMDAJMS4yMwor
KysgYnJlYWtfbGluZXMuY3BwCTMgU2VwIDIwMDUgMjM6NTI6NTcgLTAwMDAKQEAgLTI0LDk3ICsy
NCw0MCBAQCB2b2lkIGNsZWFudXBMaW5lQnJlYWtlcigpCiB9CiAKIG5hbWVzcGFjZSBraHRtbCB7
Ci0vKgotICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwgaWYgdGhlIHN0cmluZyBjYW4gYnJl
IGJyb2tlbiBiZWZvcmUgdGhlIAotICBjaGFyYWN0ZXIgYXQgcG9zaXRpb24gcG9zIGluIHRoZSBz
dHJpbmcgcyB3aXRoIGxlbmd0aCBsZW4KLSovCi1ib29sIGlzQnJlYWthYmxlKGNvbnN0IFFDaGFy
ICpzLCBpbnQgcG9zLCBpbnQgbGVuLCBib29sIGJyZWFrTkJTUCkKKworaW50IG5leHRCcmVha2Fi
bGVQb3NpdGlvbihjb25zdCBRQ2hhciAqc3RyLCBpbnQgcG9zLCBpbnQgbGVuLCBib29sIGJyZWFr
TkJTUCkKIHsKLSNpZiAhQVBQTEVfQ0hBTkdFUwotICAgIGNvbnN0IFFDaGFyICpjID0gcytwb3M7
Ci0gICAgdW5zaWduZWQgc2hvcnQgY2ggPSBjLT51bmljb2RlKCk7Ci0gICAgaWYgKCBjaCA+IDB4
ZmYgKSB7Ci0JLy8gbm90IGxhdGluMSwgbmVlZCB0byBkbyBtb3JlIHNvcGhpc3RpY2F0ZWQgY2hl
Y2tzIGZvciBhc2lhbiBmb250cwotCXVuc2lnbmVkIGNoYXIgcm93ID0gYy0+cm93KCk7Ci0JaWYg
KCByb3cgPT0gMHgwZSApIHsKLQkgICAgLy8gMGUwMCAtIDBlN2YgPT0gVGhhaQotCSAgICBpZiAo
IGMtPmNlbGwoKSA8IDB4ODAgKSB7Ci0jaWZkZWYgSEFWRV9USEFJX0JSRUFLUwotCQkvLyBjaGVj
ayBmb3IgdGhhaQotCQlpZiggcyAhPSBjYWNoZWQgKSB7Ci0JCSAgICAvLyBidWlsZCB1cCBzdHJp
bmcgb2YgdGhhaSBjaGFycwotCQkgICAgUVRleHRDb2RlYyAqdGhhaUNvZGVjID0gUVRleHRDb2Rl
Yzo6Y29kZWNGb3JNaWIoMjI1OSk7Ci0JCSAgICBpZiAoICFjYWNoZWRTdHJpbmcgKQotCQkJY2Fj
aGVkU3RyaW5nID0gbmV3IFFDU3RyaW5nOwotCQkgICAgaWYgKCAhdGhhaUl0ICkKLQkJCXRoYWlJ
dCA9IFRoQnJlYWtJdGVyYXRvcjo6Y3JlYXRlV29yZEluc3RhbmNlKCk7IAotCQkgICAgKmNhY2hl
ZFN0cmluZyA9IHRoYWlDb2RlYy0+ZnJvbVVuaWNvZGUoIFFDb25zdFN0cmluZyggKFFDaGFyICop
cywgbGVuICkucXN0cmluZygpICk7Ci0JCX0KLQkJdGhhaUl0LT5zZXRUZXh0KCh0Y2hhciAqKWNh
Y2hlZFN0cmluZy0+ZGF0YSgpKTsKLQkJZm9yKGludCBpID0gdGhhaUl0LT5maXJzdCgpOyBpICE9
IHRoYWlJdC0+RE9ORTsgaSA9IHRoYWlJdC0+bmV4dCgpICkgewotCQkgICAgaWYoIGkgPT0gcG9z
ICkKLQkJCXJldHVybiB0cnVlOwotCQkgICAgaWYoIGkgPiBwb3MgKQotCQkJcmV0dXJuIGZhbHNl
OwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLSNlbHNlCi0JCS8vIGlmIHdlIGRvbid0IGhhdmUgYSB0
aGFpIGxpbmUgYnJlYWtpbmcgbGliLCBhbGxvdwotCQkvLyBicmVha3MgZXZlcnl3aGVyZSBleGNl
cHQgZGlyZWN0bHkgYmVmb3JlIHB1bmN0dWF0aW9uLgotCQlyZXR1cm4gdHJ1ZTsKLSNlbmRpZgot
CSAgICB9IGVsc2UgCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0JaWYgKCByb3cgPiAweDJkICYmIHJv
dyA8IDB4ZmIgfHwgcm93ID09IDB4MTEgKQotCSAgICAvLyBhc2lhbiBsaW5lIGJyZWFraW5nLiBF
dmVyeXdoZXJlIGFsbG93ZWQgZXhjZXB0IGRpcmVjdGx5Ci0JICAgIC8vIGluIGZyb250IG9mIGEg
cHVuY3R1YXRpb24gY2hhcmFjdGVyLgotCSAgICByZXR1cm4gdHJ1ZTsKLQllbHNlIC8vIG5vIGFz
aWFuIGZvbnQKLQkgICAgcmV0dXJuIGMtPmlzU3BhY2UoKTsKLSAgICB9IGVsc2UgewotCWlmICgg
Y2ggPT0gJyAnIHx8IGNoID09ICdcdCcgfHwgY2ggPT0gJ1xuJyApCi0JICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0jZWxzZQotICAgIE9TU3RhdHVzIHN0YXR1cyA9
IDAsIGZpbmRTdGF0dXMgPSAwOworICAgIE9TU3RhdHVzIHN0YXR1cyA9IDAsIGZpbmRTdGF0dXMg
PSAtMTsKICAgICBzdGF0aWMgVGV4dEJyZWFrTG9jYXRvclJlZiBicmVha0xvY2F0b3IgPSAwOwot
ICAgIFVuaUNoYXJBcnJheU9mZnNldCBlbmQ7Ci0gICAgY29uc3QgUUNoYXIgKmMgPSBzK3BvczsK
LSAgICB1bnNpZ25lZCBzaG9ydCBjaCA9IGMtPnVuaWNvZGUoKTsKLQotICAgIC8vIE5ld2xpbmVz
IGFuZCBzcGFjZXMgYXJlIGFsd2F5cyBicmVha2FibGUsIGFzIGFyZSBub24tYnJlYWtpbmcgc3Bh
Y2VzIHdoZW4gYnJlYWtOQlNQIGlzIHRydWUuCi0gICAgLy8gRklYTUU6IFRpZ2VyIGlzIG5vdCBh
bGxvd2luZyBicmVha3Mgb24gc3BhY2VzIGFmdGVyIGJ1bGxldCBjaGFyYWN0ZXJzIGxpa2UgJiMx
ODM7LiAgV2UgZG9uJ3Qga25vdwotICAgIC8vIGF0IHRoZSBtb21lbnQgd2hldGhlciB0aGlzIGJl
aGF2aW9yIGlzIGNvcnJlY3Qgb3Igbm90LiAgU2luY2UgVGlnZXIgaXMgYWxzbyBub3QgYWxsb3dp
bmcgYnJlYWtzIG9uIHNwYWNlcwotICAgIC8vIGFmdGVyIGh5cGhlbi1saWtlIGNoYXJhY3RlcnMs
IHRoaXMgZG9lcyBub3Qgc2VlbSBpZGVhbCBmb3IgdGhlIFdlYi4gIFRoZXJlZm9yZSBmb3Igbm93
IHdlIG92ZXJyaWRlIHNwYWNlCi0gICAgLy8gY2hhcmFjdGVycyB1cCBmcm9udCBhbmQgYnlwYXNz
IHRoZSBVbmljb2RlIGxpbmUgYnJlYWtpbmcgcm91dGluZXMuCi0gICAgaWYgKGNoID09ICcgJyB8
fCBjaCA9PSAnXG4nIHx8IGNoID09ICdcdCcgfHwgKGJyZWFrTkJTUCAmJiBjaCA9PSAweGEwKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBJZiBjdXJyZW50IGNoYXJhY3Rlciwgb3Ig
dGhlIHByZXZpb3VzIGNoYXJhY3RlciBhcmVuJ3Qgc2ltcGxlIGxhdGluMSB0aGVuCi0gICAgLy8g
dXNlIHRoZSBVQyBsaW5lIGJyZWFrIGxvY2F0b3IuICBVQ0ZpbmRUZXh0QnJlYWsgd2lsbCByZXBv
cnQgZmFsc2UgaWYgd2UKLSAgICAvLyBoYXZlIGEgc2VxdWVuY2Ugb2YgMHhhMCAweDIwIChuYnNw
LCBzcCksIHNvIHdlIGV4cGxpY2l0eSBjaGVjayBmb3IgdGhhdAotICAgIC8vIGNhc2UuCi0gICAg
dW5zaWduZWQgc2hvcnQgbGFzdENoID0gcG9zID4gMCA/IChzK3Bvcy0xKS0+dW5pY29kZSgpIDog
MDsKLSAgICBpZiAoKGNoID4gMHg3ZiAmJiBjaCAhPSAweGEwKSB8fCAobGFzdENoID4gMHg3ZiAm
JiBsYXN0Q2ggIT0gMHhhMCkpIHsKLSAgICAgICAgaWYgKCFicmVha0xvY2F0b3IpCi0gICAgICAg
ICAgICBzdGF0dXMgPSBVQ0NyZWF0ZVRleHRCcmVha0xvY2F0b3IoTlVMTCwgMCwga1VDVGV4dEJy
ZWFrTGluZU1hc2ssICZicmVha0xvY2F0b3IpOwotICAgICAgICBpZiAoc3RhdHVzID09IDApCi0g
ICAgICAgICAgICBmaW5kU3RhdHVzID0gVUNGaW5kVGV4dEJyZWFrKGJyZWFrTG9jYXRvciwga1VD
VGV4dEJyZWFrTGluZU1hc2ssIDAsIChjb25zdCBVbmlDaGFyICopcywgbGVuLCBwb3MsICZlbmQp
OwotICAgICAgICBpZiAoZmluZFN0YXR1cyA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIChpbnQp
ZW5kID09IHBvcyAmJiAhKGxhc3RDaCA9PSAnICcgfHwgbGFzdENoID09ICdcbicgfHwgbGFzdENo
ID09ICdcdCcgfHwgKGJyZWFrTkJTUCAmJiBsYXN0Q2ggPT0gMHhhMCkpOwotCi0gICAgICAgIC8v
IElmIENhcmJvbiBmYWlscywgZmFpbCBiYWNrIG9uIHNpbXBsZSB3aGl0ZSBzcGFjZSBkZXRlY3Rp
b24uCi0gICAgfQorICAgIGludCBuZXh0VUNCcmVhayA9IC0xOworICAgIGludCBpOworICAgIHVu
c2lnbmVkIHNob3J0IGNoLCBsYXN0Q2g7CiAgICAgCi0gICAgLy8gTWF0Y2ggV2luSUUncyBicmVh
a2luZyBzdHJhdGVneSwgd2hpY2ggaXMgdG8gYWx3YXlzIGFsbG93IGJyZWFrcyBhZnRlciBoeXBo
ZW5zIGFuZCBxdWVzdGlvbiBtYXJrcy4KLSAgICBpZiAobGFzdENoID09ICctJyB8fCBsYXN0Q2gg
PT0gJz8nKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIE5vIG90aGVyIGFzY2lpIGNo
YXJzIGFyZSBicmVha2FibGUuCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmICAgIAorICAgIGxh
c3RDaCA9IHBvcyA+IDAgPyBzdHJbcG9zIC0gMV0udW5pY29kZSgpIDogMDsKKyAgICBmb3IgKGkg
PSBwb3M7IGkgPCBsZW47IGkrKykgeworICAgICAgICBjaCA9IHN0cltpXS51bmljb2RlKCk7Cisg
ICAgICAgIGlmIChjaCA9PSAnICcgfHwgY2ggPT0gJ1xuJyB8fCBjaCA9PSAnXHQnIHx8IChicmVh
a05CU1AgJiYgY2ggPT0gMHhhMCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLy8gTWF0
Y2ggV2luSUUncyBicmVha2luZyBzdHJhdGVneSwgd2hpY2ggaXMgdG8gYWx3YXlzIGFsbG93IGJy
ZWFrcyBhZnRlciBoeXBoZW5zIGFuZCBxdWVzdGlvbiBtYXJrcy4KKyAgICAgICAgaWYgKGxhc3RD
aCA9PSAnLScgfHwgbGFzdENoID09ICc/JykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAv
LyBJZiBjdXJyZW50IGNoYXJhY3Rlciwgb3IgdGhlIHByZXZpb3VzIGNoYXJhY3RlciBhcmVuJ3Qg
c2ltcGxlIGxhdGluMSB0aGVuCisgICAgICAgIC8vIHVzZSB0aGUgVUMgbGluZSBicmVhayBsb2Nh
dG9yLiAgVUNGaW5kVGV4dEJyZWFrIHdpbGwgcmVwb3J0IGZhbHNlIGlmIHdlCisgICAgICAgIC8v
IGhhdmUgYSBzZXF1ZW5jZSBvZiAweGEwIDB4MjAgKG5ic3AsIHNwKSwgc28gd2UgZXhwbGljaXR5
IGNoZWNrIGZvciB0aGF0CisgICAgICAgIC8vIGNhc2UuCisgICAgICAgIGlmICgoY2ggPiAweDdm
ICYmIGNoICE9IDB4YTApIHx8IChsYXN0Q2ggPiAweDdmICYmIGxhc3RDaCAhPSAweGEwKSkgewor
ICAgICAgICAgICAgaWYgKG5leHRVQ0JyZWFrIDwgaSkgeworICAgICAgICAgICAgICAgIGlmICgh
YnJlYWtMb2NhdG9yKQorICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBVQ0NyZWF0ZVRleHRC
cmVha0xvY2F0b3IoTlVMTCwgMCwga1VDVGV4dEJyZWFrTGluZU1hc2ssICZicmVha0xvY2F0b3Ip
OworICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAg
ZmluZFN0YXR1cyA9IFVDRmluZFRleHRCcmVhayhicmVha0xvY2F0b3IsIGtVQ1RleHRCcmVha0xp
bmVNYXNrLCAwLCAoY29uc3QgVW5pQ2hhciAqKXN0ciwgbGVuLCBpLCAoVW5pQ2hhckFycmF5T2Zm
c2V0ICopJm5leHRVQ0JyZWFrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmaW5k
U3RhdHVzID09IDAgJiYgaSA9PSBuZXh0VUNCcmVhayAmJiAhKGxhc3RDaCA9PSAnICcgfHwgbGFz
dENoID09ICdcbicgfHwgbGFzdENoID09ICdcdCcgfHwgKGJyZWFrTkJTUCAmJiBsYXN0Q2ggPT0g
MHhhMCkpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGxhc3RD
aCA9IGNoOworICAgIH0KKyAgICByZXR1cm4gaTsKIH0KIAotfTsKK307ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpJbmRleDogYnJlYWtfbGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvYnJlYWtfbGluZXMuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIxLjIgYnJlYWtfbGluZXMuaAotLS0gYnJlYWtf
bGluZXMuaAk1IE9jdCAyMDA0IDIwOjA1OjM4IC0wMDAwCTEuMgorKysgYnJlYWtfbGluZXMuaAkz
IFNlcCAyMDA1IDIzOjUyOjU3IC0wMDAwCkBAIC0xLDUgKzEsMTAgQEAKICNpbmNsdWRlIDxxc3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBraHRtbCB7Ci0gICAgYm9vbCBpc0JyZWFrYWJsZShjb25zdCBR
Q2hhciAqc3RyLCBpbnQgcG9zLCBpbnQgbGVuLCBib29sIGJyZWFrTkJTUCA9IGZhbHNlKTsKKyAg
ICBpbnQgbmV4dEJyZWFrYWJsZVBvc2l0aW9uKGNvbnN0IFFDaGFyICpzdHIsIGludCBwb3MsIGlu
dCBsZW4sIGJvb2wgYnJlYWtOQlNQID0gZmFsc2UpOworICAgIGlubGluZSBib29sIGlzQnJlYWth
YmxlKGNvbnN0IFFDaGFyICpzdHIsIGludCBwb3MsIGludCBsZW4sIGludCAmbmV4dEJyZWFrYWJs
ZSwgYm9vbCBicmVha05CU1AgPSBmYWxzZSkgeworICAgICAgICBpZiAocG9zID4gbmV4dEJyZWFr
YWJsZSkKKyAgICAgICAgICAgIG5leHRCcmVha2FibGUgPSBuZXh0QnJlYWthYmxlUG9zaXRpb24o
c3RyLCBwb3MsIGxlbiwgYnJlYWtOQlNQKTsKKyAgICAgICAgcmV0dXJuIHBvcyA9PSBuZXh0QnJl
YWthYmxlOworICAgIH0KIH07CkluZGV4OiByZW5kZXJfdGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl90ZXh0LmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOTUKZGlmZiAtcCAtdSAtcjEuMTk1IHJlbmRlcl90ZXh0
LmNwcAotLS0gcmVuZGVyX3RleHQuY3BwCTEgU2VwIDIwMDUgMTg6MDM6MzMgLTAwMDAJMS4xOTUK
KysrIHJlbmRlcl90ZXh0LmNwcAkzIFNlcCAyMDA1IDIzOjUzOjAyIC0wMDAwCkBAIC0xMzA4LDE1
ICsxMzA4LDE3IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y2FsY01pbk1heFdpZHRoKGludCBsZWEKICAg
ICBjb25zdCBGb250ICpmID0gaHRtbEZvbnQoIGZhbHNlICk7CiAgICAgaW50IHdvcmRTcGFjaW5n
ID0gc3R5bGUoKS0+d29yZFNwYWNpbmcoKTsKICAgICBpbnQgbGVuID0gc3RyLT5sOworICAgIFFD
aGFyICp0eHQgPSBzdHItPnM7CiAgICAgYm9vbCBuZWVkc1dvcmRTcGFjaW5nID0gZmFsc2U7CiAg
ICAgYm9vbCBpZ25vcmluZ1NwYWNlcyA9IGZhbHNlOwogICAgIGJvb2wgaXNTcGFjZSA9IGZhbHNl
OwogICAgIGJvb2wgaXNQcmUgPSBzdHlsZSgpLT53aGl0ZVNwYWNlKCkgPT0gUFJFOwogICAgIGJv
b2wgZmlyc3RXb3JkID0gdHJ1ZTsKICAgICBib29sIGZpcnN0TGluZSA9IHRydWU7CisgICAgaW50
IG5leHRCcmVha2FibGUgPSAtMTsKICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspCiAg
ICAgewotICAgICAgICBjb25zdCBRQ2hhciBjID0gc3RyLT5zW2ldOworICAgICAgICBRQ2hhciBj
ID0gdHh0W2ldOwogICAgICAgICAKICAgICAgICAgYm9vbCBwcmV2aW91c0NoYXJhY3RlcklzU3Bh
Y2UgPSBpc1NwYWNlOwogICAgICAgICAKQEAgLTEzNTQsMTIgKzEzNTYsMTggQEAgdm9pZCBSZW5k
ZXJUZXh0OjpjYWxjTWluTWF4V2lkdGgoaW50IGxlYQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGludCB3b3JkbGVuID0gMDsKLSAgICAgICAgd2hp
bGUgKGkrd29yZGxlbiA8IGxlbiAmJiBzdHItPnNbaSt3b3JkbGVuXSAhPSAnXG4nICYmIHN0ci0+
c1tpK3dvcmRsZW5dICE9ICcgJyAmJiBzdHItPnNbaSt3b3JkbGVuXSAhPSAnXHQnICYmCi0gICAg
ICAgICAgICAgICAoaSt3b3JkbGVuID09IDAgfHwgc3RyLT5zW2krd29yZGxlbl0udW5pY29kZSgp
ICE9IFNPRlRfSFlQSEVOKSAmJiAvLyBTa2lwIHNvZnQgaHlwaGVucwotICAgICAgICAgICAgICAg
KHdvcmRsZW4gPT0gMCB8fCAhaXNCcmVha2FibGUoIHN0ci0+cywgaSt3b3JkbGVuLCBzdHItPmwp
KSkKLSAgICAgICAgICAgIHdvcmRsZW4rKzsKKyAgICAgICAgYm9vbCBoYXNCcmVhayA9IGlzQnJl
YWthYmxlKHR4dCwgaSwgbGVuLCBuZXh0QnJlYWthYmxlKTsKKyAgICAgICAgaW50IGogPSBpOwor
ICAgICAgICB3aGlsZSAoYyAhPSAnXG4nICYmIGMgIT0gJyAnICYmIGMgIT0gJ1x0JyAmJiAoaiA9
PSAwIHx8IGMudW5pY29kZSgpICE9IFNPRlRfSFlQSEVOKSkgeworICAgICAgICAgICAgaisrOwor
ICAgICAgICAgICAgaWYgKGogPT0gbGVuKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgYyA9IHR4dFtqXTsKKyAgICAgICAgICAgIGlmIChpc0JyZWFrYWJsZSh0eHQsIGosIGxl
biwgbmV4dEJyZWFrYWJsZSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAg
ICAgICAgICAgIAorICAgICAgICBpbnQgd29yZGxlbiA9IGogLSBpOwogICAgICAgICBpZiAod29y
ZGxlbikKICAgICAgICAgewogI2lmICFBUFBMRV9DSEFOR0VTCkBAIC0xMzcwLDE1ICsxMzc4LDE1
IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y2FsY01pbk1heFdpZHRoKGludCBsZWEKICAgICAgICAgICAg
IGN1cnJNaW5XaWR0aCArPSB3OwogICAgICAgICAgICAgY3Vyck1heFdpZHRoICs9IHc7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGJvb2wgaXNCcmVha2FibGVDaGFyU3BhY2UgPSAoaSt3b3Jk
bGVuIDwgbGVuKSA/ICgoIWlzUHJlICYmIChzdHItPnNbaSt3b3JkbGVuXSA9PSAnXG4nIHx8IHN0
ci0+c1tpK3dvcmRsZW5dID09ICdcdCcpKSB8fCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHItPnNbaSt3b3JkbGVuXSA9PSAn
ICcpIDogZmFsc2U7CisgICAgICAgICAgICBib29sIGlzQnJlYWthYmxlQ2hhclNwYWNlID0gKGog
PCBsZW4pID8gKCghaXNQcmUgJiYgKGMgPT0gJ1xuJyB8fCBjID09ICdcdCcpKSB8fCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
ID09ICcgJykgOiBmYWxzZTsKIAotICAgICAgICAgICAgaWYgKGkrd29yZGxlbiA8IGxlbiAmJiBz
dHlsZSgpLT53aGl0ZVNwYWNlKCkgPT0gTk9STUFMKQorICAgICAgICAgICAgaWYgKGogPCBsZW4g
JiYgc3R5bGUoKS0+d2hpdGVTcGFjZSgpID09IE5PUk1BTCkKICAgICAgICAgICAgICAgICBtX2hh
c0JyZWFrYWJsZUNoYXIgPSB0cnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBBZGQg
aW4gd29yZFNwYWNpbmcgdG8gb3VyIGN1cnJNYXhXaWR0aCwgYnV0IG5vdCBpZiB0aGlzIGlzIHRo
ZSBsYXN0IHdvcmQgb24gYSBsaW5lIG9yIHRoZQogICAgICAgICAgICAgLy8gbGFzdCB3b3JkIGlu
IHRoZSBydW4uCi0gICAgICAgICAgICBpZiAod29yZFNwYWNpbmcgJiYgaXNCcmVha2FibGVDaGFy
U3BhY2UgJiYgIWNvbnRhaW5zT25seVdoaXRlc3BhY2UoaSt3b3JkbGVuLCBsZW4tKGkrd29yZGxl
bikpKQorICAgICAgICAgICAgaWYgKHdvcmRTcGFjaW5nICYmIGlzQnJlYWthYmxlQ2hhclNwYWNl
ICYmICFjb250YWluc09ubHlXaGl0ZXNwYWNlKGosIGxlbi1qKSkKICAgICAgICAgICAgICAgICBj
dXJyTWF4V2lkdGggKz0gd29yZFNwYWNpbmc7CiAKICAgICAgICAgICAgIGlmIChmaXJzdFdvcmQp
IHsKQEAgLTEzODYsNyArMTM5NCw2IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y2FsY01pbk1heFdpZHRo
KGludCBsZWEKICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHRo
ZSBydW4gaXMgYnJlYWthYmxlLCB0aGVuIHdlIGNvbnNpZGVyIG91cnNlbHZlcyB0byBoYXZlIGEg
YmVnaW5uaW5nCiAgICAgICAgICAgICAgICAgLy8gbWluaW11bSB3aWR0aCBvZiAwLCBzaW5jZSBh
IGJyZWFrIGNvdWxkIG9jY3VyIHJpZ2h0IGJlZm9yZSBvdXIgcnVuIHN0YXJ0cywgcHJldmVudGlu
ZyB1cyBmcm9tIGV2ZXIKICAgICAgICAgICAgICAgICAvLyBiZWluZyBhcHBlbmRlZCB0byBhIHBy
ZXZpb3VzIHRleHQgcnVuIHdoZW4gY29uc2lkZXJpbmcgdGhlIHRvdGFsIG1pbmltdW0gd2lkdGgg
b2YgdGhlIGNvbnRhaW5pbmcgYmxvY2suCi0gICAgICAgICAgICAgICAgYm9vbCBoYXNCcmVhayA9
IGlzQnJlYWthYmxlKHN0ci0+cywgaSwgc3RyLT5sKTsKICAgICAgICAgICAgICAgICBpZiAoaGFz
QnJlYWspCiAgICAgICAgICAgICAgICAgICAgIG1faGFzQnJlYWthYmxlQ2hhciA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgbV9iZWdpbk1pbldpZHRoID0gaGFzQnJlYWsgPyAwIDogdzsKQEAgLTE0
MjAsOCArMTQyNyw4IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y2FsY01pbk1heFdpZHRoKGludCBsZWEK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBjdXJyTWF4V2lkdGggKz0gZi0+d2lkdGgoc3RyLT5zLCBzdHItPmwsIGkgKyB3b3Jk
bGVuLCAxLCB0YWJXaWR0aCgpLCBsZWFkV2lkdGggKyBjdXJyTWF4V2lkdGgpOwotICAgICAgICAg
ICAgICAgIG5lZWRzV29yZFNwYWNpbmcgPSBpc1NwYWNlICYmICFwcmV2aW91c0NoYXJhY3Rlcklz
U3BhY2UgJiYgaSArIHdvcmRsZW4gPT0gbGVuLTE7CisgICAgICAgICAgICAgICAgY3Vyck1heFdp
ZHRoICs9IGYtPndpZHRoKHR4dCwgbGVuLCBpLCAxLCB0YWJXaWR0aCgpLCBsZWFkV2lkdGggKyBj
dXJyTWF4V2lkdGgpOworICAgICAgICAgICAgICAgIG5lZWRzV29yZFNwYWNpbmcgPSBpc1NwYWNl
ICYmICFwcmV2aW91c0NoYXJhY3RlcklzU3BhY2UgJiYgaSA9PSBsZW4tMTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0K
</data>
<flag name="review"
          id="513"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>