<?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>14112</bug_id>
          
          <creation_ts>2007-06-13 01:27:16 -0700</creation_ts>
          <short_desc>Cross-port KDE KJS UnaryPlus and UnaryMinus optimizations</short_desc>
          <delta_ts>2007-10-14 04:41:46 -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>JavaScriptCore</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>All</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Luciano Montanaro">mikelima</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>jruderman</cc>
    
    <cc>mikelima</cc>
    
    <cc>zwarich</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>7723</commentid>
    <comment_count>0</comment_count>
    <who name="Luciano Montanaro">mikelima</who>
    <bug_when>2007-06-13 01:27:16 -0700</bug_when>
    <thetext>The attached patch ports some code reorganization by Harry Porten and me with the simplest optimizations for javascript expressions like

var x = +1;
var y = -1;

for which one NumberNode is generated instead of Unary{Plus,Minus}Node -&gt; NumberNode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>7724</commentid>
    <comment_count>1</comment_count>
      <attachid>14992</attachid>
    <who name="Luciano Montanaro">mikelima</who>
    <bug_when>2007-06-13 01:30:22 -0700</bug_when>
    <thetext>Created attachment 14992
The patch discussed in the bugzilla entry</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>7485</commentid>
    <comment_count>2</comment_count>
      <attachid>14992</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-06-14 20:44:44 -0700</bug_when>
    <thetext>Comment on attachment 14992
The patch discussed in the bugzilla entry

There seem to be a lot of gratuitous whitespace changes in this patch. Did someone run a &quot;remove trailing whitespace&quot; script? If so, why?

All the changes to nodes.cpp seem to be whitespace only and unrelated to the fix.

Could we get separate patches for the reformatting and moving things around and making things into functions from the patch that actually has the optimization?

Is it acceptable to turn a unary plus into part of the number? It seems you&apos;d lose the &quot;+&quot; from the serialization of the function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>7466</commentid>
    <comment_count>3</comment_count>
    <who name="Luciano Montanaro">mikelima</who>
    <bug_when>2007-06-15 01:39:40 -0700</bug_when>
    <thetext>Uhm, the nodes.cpp slipped in, as did the kjs_binding.h change, which I needed at sometime to build things.

The kjs_binding.h part should be removed, the nodes,cpp, I&apos;d like to keep (should I send it as a different patch?), since it remove noise while comparing the two branches.

For the rest, I originally intended to submit a patch to split makenodes.h out of grammar.y, but I went on a bit further than that.

I can split up the patch, however I need input on how to do that.

In kjs, there has been the makenodes.h split and then the optimization.

Would patche in that order be ok?

About the optimization: are you concerned of debugging?
The unaryplus number -&gt; number optimization is probably almost useless, but the unaryminus number pattern happens often enough.

Harri porten measured something like a 1.7 improvement over md5-1.js with a version of KJS including this patch and another one to convert number arithmeticoperator number -&gt; number. But obviously the tree will be different from the original.


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6279</commentid>
    <comment_count>4</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-06-25 20:19:19 -0700</bug_when>
    <thetext>Yes, patches in that order would be ok (as discussed on IRC). I will r- this for now, for the splitting. Given where we are in the project it might also be smarter to reserve this optimization for the feature branch, but I leave that to your judgment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>6280</commentid>
    <comment_count>5</comment_count>
      <attachid>14992</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-06-25 20:20:38 -0700</bug_when>
    <thetext>Comment on attachment 14992
The patch discussed in the bugzilla entry

(nominal r- as stated above; please split patch)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2845</commentid>
    <comment_count>6</comment_count>
      <attachid>15864</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2007-08-07 23:24:30 -0700</bug_when>
    <thetext>Created attachment 15864
Proposed patch

Here&apos;s a revised version of the patch that makes minimal extraneous changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2498</commentid>
    <comment_count>7</comment_count>
      <attachid>15864</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-08-11 15:38:43 -0700</bug_when>
    <thetext>Comment on attachment 15864
Proposed patch

This doesn&apos;t seem like an important optimization. How often does this happen in practice? Also, it seems like it breaks serialization of functions.

+    if (n-&gt;isNumber())
+        return n;
+    else
+        return new UnaryPlusNode(n);

We normally don&apos;t do else after return.

The whitespace in the code above doesn&apos;t match our usual idiom. For example it should be this.

        NumberNode* number = static_cast&lt;NumberNode*&gt;(n);

Also:

+    double value() const KJS_FAST_CALL { return val; }
+    void setValue(double v) KJS_FAST_CALL { val = v; }

Do inline functions like these need KJS_FAST_CALL?

review- because of the &quot;breaks serialization&quot; issue. It&apos;s fine to optimize execution but somehow we have to record the original code so we can produce it on demand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2435</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-08-11 15:41:48 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 15864 [edit])
&gt; This doesn&apos;t seem like an important optimization. How often does this happen in
&gt; practice?

Maybe the &quot;-1&quot; case is more important and more worth fixing. Obviously that can be fixed without breaking serialization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2438</commentid>
    <comment_count>9</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2007-08-11 15:49:42 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 15864 [edit])
&gt; This doesn&apos;t seem like an important optimization. How often does this happen in
&gt; practice? Also, it seems like it breaks serialization of functions.

I&apos;ll remove the UnaryPlusNode optimization and keep the NegateNode one instead of adding a fix for this.

&gt; +    if (n-&gt;isNumber())
&gt; +        return n;
&gt; +    else
&gt; +        return new UnaryPlusNode(n);
&gt; 
&gt; We normally don&apos;t do else after return.

Noted.

&gt; The whitespace in the code above doesn&apos;t match our usual idiom. For example it
&gt; should be this.
&gt; 
&gt;         NumberNode* number = static_cast&lt;NumberNode*&gt;(n);
&gt; 
&gt; Also:
&gt; 
&gt; +    double value() const KJS_FAST_CALL { return val; }
&gt; +    void setValue(double v) KJS_FAST_CALL { val = v; }
&gt; 
&gt; Do inline functions like these need KJS_FAST_CALL?

I don&apos;t know, but it is the current practice in nodes.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2440</commentid>
    <comment_count>10</comment_count>
      <attachid>15935</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2007-08-11 20:21:26 -0700</bug_when>
    <thetext>Created attachment 15935
Revised proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2441</commentid>
    <comment_count>11</comment_count>
      <attachid>15936</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2007-08-11 20:24:17 -0700</bug_when>
    <thetext>Created attachment 15936
Revised proposed patch

Oops. I forgot my last name in the ChangeLog entry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2398</commentid>
    <comment_count>12</comment_count>
      <attachid>15936</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-08-13 11:41:59 -0700</bug_when>
    <thetext>Comment on attachment 15936
Revised proposed patch

If the number is already negative, then I think this breaks serialization.

I could be wrong. We need a test case to demonstrate whether that is true or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2394</commentid>
    <comment_count>13</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2007-08-13 12:36:45 -0700</bug_when>
    <thetext>It does indeed cause serialization to not work like one would expect, but strictly speaking, where is the requirement stated that serialization must give exactly the same parse tree when reparsed? For example, Firefox 2.0 will serialize a - - 5 inside of a function as a 5. Is this violating the spec?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2363</commentid>
    <comment_count>14</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2007-08-13 23:18:35 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; It does indeed cause serialization to not work like one would expect, but
&gt; strictly speaking, where is the requirement stated that serialization must give
&gt; exactly the same parse tree when reparsed? For example, Firefox 2.0 will
&gt; serialize a - - 5 inside of a function as a 5. Is this violating the spec?

It violates the spirit of correctness, and it makes jsfunfuzz, well, less fun (and less useful).

http://www.squarefree.com/2007/08/02/introducing-jsfunfuzz/
http://www.squarefree.com/2007/08/02/fuzzing-for-correctness/

Jesse Ruderman may be interested in the &quot;a - - 5&quot; deserialization issue in Firefox.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2366</commentid>
    <comment_count>15</comment_count>
      <attachid>15957</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2007-08-13 23:44:45 -0700</bug_when>
    <thetext>Created attachment 15957
Revised proposed patch

Those sound like good enough reasons. Here&apos;s a patch that fixes the serialization problem, along with test cases. The NaN case was never even an issue due to how NaN is handled in JavaScriptCore, but I added it just in case that ever changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2367</commentid>
    <comment_count>16</comment_count>
    <who name="Jesse Ruderman">jruderman</who>
    <bug_when>2007-08-14 01:26:27 -0700</bug_when>
    <thetext>Decompiling &quot;a = - - 5&quot; as &quot;a = 5&quot; is fine, since both statements do exactly the same thing.  SpiderMonkey developers refer to this and related optimizations as &quot;constant folding&quot;.

Constant folding usually doesn&apos;t cause jsfunfuzz to complain, since jsfunfuzz only cares whether the decompiled function is canonical, not whether it roughly matches the original.  (An example where it might confuse jsfunfuzz is if &quot;2*(3+4)&quot; were to become &quot;2*7&quot; and then become &quot;14&quot; instead of just becoming &quot;14&quot; on the first trip.)

Note that turning &quot;- - x&quot; or &quot;+ x&quot; into &quot;x&quot; is not correct, because it loses a coercion-to-number.

If you add this optimization, be sure to test that you get zero vs. negative-zero right: &quot;-0&quot; should not just become &quot;0&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2362</commentid>
    <comment_count>17</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2007-08-14 01:30:02 -0700</bug_when>
    <thetext>(In reply to comment #16)

&gt; If you add this optimization, be sure to test that you get zero vs.
&gt; negative-zero right: &quot;-0&quot; should not just become &quot;0&quot;.

That&apos;s one of my test cases. ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2341</commentid>
    <comment_count>18</comment_count>
      <attachid>15957</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-08-14 07:57:33 -0700</bug_when>
    <thetext>Comment on attachment 15957
Revised proposed patch

+        if (number-&gt;value() &lt; 0.0) {

I think this should be &gt; 0.0 rather than &lt; 0.0.

+        &quot;- - 0&quot;,
+        &quot;- - NaN&quot;

I think we need test cases for -1 and for 1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2326</commentid>
    <comment_count>19</comment_count>
      <attachid>15963</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2007-08-14 11:13:56 -0700</bug_when>
    <thetext>Created attachment 15963
Revised proposed patch

Sorry, I really should have caught that. I guess I was tired. Here is the fixed version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2304</commentid>
    <comment_count>20</comment_count>
      <attachid>15963</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-08-14 15:35:05 -0700</bug_when>
    <thetext>Comment on attachment 15963
Revised proposed patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58486</commentid>
    <comment_count>21</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2007-10-14 04:41:46 -0700</bug_when>
    <thetext>Landed in r26582.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>14992</attachid>
            <date>2007-06-13 01:30:22 -0700</date>
            <delta_ts>2007-09-30 02:03:10 -0700</delta_ts>
            <desc>The patch discussed in the bugzilla entry</desc>
            <filename>optimize-unaryminus.diff</filename>
            <type>text/plain</type>
            <size>20626</size>
            <attacher name="Luciano Montanaro">mikelima</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9ub2RlczJzdHJpbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL2tqcy9ub2RlczJzdHJpbmcuY3BwCShyZXZpc2lvbiAyMjAyNikKKysr
IEphdmFTY3JpcHRDb3JlL2tqcy9ub2RlczJzdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzcsMTQgKzEzNywxNCBAQAogCiB2b2lkIEJvb2xlYW5Ob2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJl
YW0gJnMpIGNvbnN0CiB7Ci0gIHMgPDwgKHZhbHVlID8gInRydWUiIDogImZhbHNlIik7CisgIHMg
PDwgKHZhbHVlKCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKIH0KIAotdm9pZCBOdW1iZXJOb2RlOjpz
dHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0IHsgcyA8PCB2YWx1ZTsgfQordm9pZCBOdW1i
ZXJOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0IHsgcyA8PCB2YWx1ZSgpOyB9
CiAKIHZvaWQgU3RyaW5nTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdAogewot
ICBzIDw8ICciJyA8PCBlc2NhcGVTdHJpbmdGb3JQcmV0dHlQcmludGluZyh2YWx1ZSkgPDwgJyIn
OworICBzIDw8ICciJyA8PCBlc2NhcGVTdHJpbmdGb3JQcmV0dHlQcmludGluZyh2YWx1ZSgpKSA8
PCAnIic7CiB9CiAKIHZvaWQgUmVnRXhwTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBj
b25zdApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCShyZXZpc2lvbiAyMjAyNikKKysrIEphdmFTY3Jp
cHRDb3JlL2tqcy9ub2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0MSwyMSArMzQxLDIxIEBA
CiAKIEpTVmFsdWUgKkJvb2xlYW5Ob2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKikKIHsKLSAgcmV0
dXJuIGpzQm9vbGVhbih2YWx1ZSk7CisgICAgcmV0dXJuIGpzQm9vbGVhbih2YWx1ZSgpKTsKIH0K
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE51bWJlck5vZGUgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSlNWYWx1ZSAqTnVtYmVyTm9kZTo6ZXZhbHVh
dGUoRXhlY1N0YXRlICopCiB7Ci0gIHJldHVybiBqc051bWJlcih2YWx1ZSk7CisgICAgcmV0dXJu
IGpzTnVtYmVyKHZhbHVlKCkpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gU3RyaW5nTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBKU1Zh
bHVlICpTdHJpbmdOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKikKIHsKLSAgcmV0dXJuIGpzU3Ry
aW5nKHZhbHVlKTsKKyAgICByZXR1cm4ganNTdHJpbmcodmFsdWUoKSk7CiB9CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZWdFeHBOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCkBAIC0zODYsNyArMzg2LDcgQEAKICAgY29uc3QgU2NvcGVDaGFpbiYg
Y2hhaW4gPSBleGVjLT5jb250ZXh0KCktPnNjb3BlQ2hhaW4oKTsKICAgU2NvcGVDaGFpbkl0ZXJh
dG9yIGl0ZXIgPSBjaGFpbi5iZWdpbigpOwogICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gY2hh
aW4uZW5kKCk7Ci0gIAorCiAgIC8vIHdlIG11c3QgYWx3YXlzIGhhdmUgc29tZXRoaW5nIGluIHRo
ZSBzY29wZSBjaGFpbgogICBhc3NlcnQoaXRlciAhPSBlbmQpOwogCkBAIC00MzYsOCArNDM2LDgg
QEAKICAgcmV0dXJuIGFycmF5OwogfQogCi12b2lkIEVsZW1lbnROb2RlOjpicmVha0N5Y2xlKCkg
Ci17IAordm9pZCBFbGVtZW50Tm9kZTo6YnJlYWtDeWNsZSgpCit7CiAgICAgbmV4dCA9IDA7CiB9
CiAKQEAgLTQ4MiwxMyArNDgyLDEzIEBACiBKU1ZhbHVlICpQcm9wZXJ0eUxpc3ROb2RlOjpldmFs
dWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CiAgIEpTT2JqZWN0ICpvYmogPSBleGVjLT5sZXhpY2Fs
SW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdCgpLT5jb25zdHJ1Y3QoZXhlYywgTGlzdDo6ZW1w
dHkoKSk7Ci0gIAorCiAgIGZvciAoUHJvcGVydHlMaXN0Tm9kZSAqcCA9IHRoaXM7IHA7IHAgPSBw
LT5uZXh0LmdldCgpKSB7CiAgICAgSlNWYWx1ZSAqbiA9IHAtPm5vZGUtPm5hbWUtPmV2YWx1YXRl
KGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAgICAgSlNWYWx1ZSAqdiA9IHAt
Pm5vZGUtPmFzc2lnbi0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFM
VUUKLSAgICAKKwogICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcihuLT50
b1N0cmluZyhleGVjKSk7CiAgICAgc3dpdGNoIChwLT5ub2RlLT50eXBlKSB7CiAgICAgICBjYXNl
IFByb3BlcnR5Tm9kZTo6R2V0dGVyOgpAQCAtNTA4LDggKzUwOCw4IEBACiAgIHJldHVybiBvYmo7
CiB9CiAKLXZvaWQgUHJvcGVydHlMaXN0Tm9kZTo6YnJlYWtDeWNsZSgpIAoteyAKK3ZvaWQgUHJv
cGVydHlMaXN0Tm9kZTo6YnJlYWtDeWNsZSgpCit7CiAgICAgbmV4dCA9IDA7CiB9CiAKQEAgLTU4
Niw4ICs1ODYsOCBAQAogICByZXR1cm4gbDsKIH0KIAotdm9pZCBBcmd1bWVudExpc3ROb2RlOjpi
cmVha0N5Y2xlKCkgCi17IAordm9pZCBBcmd1bWVudExpc3ROb2RlOjpicmVha0N5Y2xlKCkKK3sK
ICAgICBuZXh0ID0gMDsKIH0KIApAQCAtNjM1LDcgKzYzNSw3IEBACiAgIGlmICghdi0+aXNPYmpl
Y3QoKSkgewogICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIlZhbHVlICVz
IChyZXN1bHQgb2YgZXhwcmVzc2lvbiAlcykgaXMgbm90IG9iamVjdC4iLCB2LCBleHByLmdldCgp
KTsKICAgfQotICAKKwogICBKU09iamVjdCAqZnVuYyA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4o
dik7CiAKICAgaWYgKCFmdW5jLT5pbXBsZW1lbnRzQ2FsbCgpKSB7CkBAIC03MjYsMTEgKzcyNiwx
MSBAQAogICB9CiAKICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgCisKICAgaWYgKCFmdW5j
VmFsLT5pc09iamVjdCgpKSB7CiAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
LCAiVmFsdWUgJXMgKHJlc3VsdCBvZiBleHByZXNzaW9uICVzWyVzXSkgaXMgbm90IG9iamVjdC4i
LCBmdW5jVmFsLCBiYXNlLmdldCgpLCBzdWJzY3JpcHQuZ2V0KCkpOwogICB9Ci0gIAorCiAgIEpT
T2JqZWN0ICpmdW5jID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihmdW5jVmFsKTsKIAogICBpZiAo
IWZ1bmMtPmltcGxlbWVudHNDYWxsKCkpIHsKQEAgLTk5MiwxMSArOTkyLDExIEBACiAgICAgICAg
ICAgICAvLyBSZXR1cm4gInVuZGVmaW5lZCIgZm9yIG9iamVjdHMgdGhhdCBzaG91bGQgYmUgdHJl
YXRlZAogICAgICAgICAgICAgLy8gYXMgbnVsbCB3aGVuIGRvaW5nIGNvbXBhcmlzb25zLgogICAg
ICAgICAgICAgaWYgKHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odiktPm1hc3F1ZXJhZGVBc1VuZGVm
aW5lZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBqc1N0cmluZygidW5kZWZpbmVkIik7ICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCJ1bmRlZmluZWQiKTsK
ICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odiktPmltcGxlbWVu
dHNDYWxsKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCJmdW5jdGlvbiIpOwog
ICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBqc1N0cmluZygib2JqZWN0Iik7
CiAgICAgfQogfQpAQCAtMTQyNyw3ICsxNDI3LDcgQEAKICAgICBhc3NlcnQoMCk7CiAgICAgdiA9
IGpzVW5kZWZpbmVkKCk7CiAgIH0KLSAgCisKICAgcmV0dXJuIHY7CiB9CiAKQEAgLTE1ODAsNyAr
MTU4MCw3IEBACiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBWYXJEZWNsTm9k
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICAKKwogVmFyRGVjbE5v
ZGU6OlZhckRlY2xOb2RlKGNvbnN0IElkZW50aWZpZXIgJmlkLCBBc3NpZ25FeHByTm9kZSAqaW4s
IFR5cGUgdCkKICAgICA6IHZhclR5cGUodCksIGlkZW50KGlkKSwgaW5pdChpbikKIHsKQEAgLTE2
NTksNyArMTY1OSw3IEBACiB9CiAKIHZvaWQgVmFyRGVjbExpc3ROb2RlOjpicmVha0N5Y2xlKCkg
Ci17IAorewogICAgIG5leHQgPSAwOwogfQogCkBAIC0xODMxLDcgKzE4MzEsNyBAQAogCiAgICAg
aWYgKGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigpLT50aW1lZE91dCgpKQogICAgICAgICByZXR1
cm4gQ29tcGxldGlvbihJbnRlcnJ1cHRlZCk7Ci0gICAgCisKICAgICBpZiAoYy5pc1ZhbHVlQ29t
cGxldGlvbigpKQogICAgICAgdmFsdWUgPSBjLnZhbHVlKCk7CiAKQEAgLTE4ODEsMTggKzE4ODEs
MTggQEAKICAgICAgIGlmICgoYy5jb21wbFR5cGUoKSA9PSBCcmVhaykgJiYgbHMuY29udGFpbnMo
Yy50YXJnZXQoKSkpCiAgICAgICAgIHJldHVybiBDb21wbGV0aW9uKE5vcm1hbCwgY3ZhbCk7CiAg
ICAgICBpZiAoYy5jb21wbFR5cGUoKSAhPSBOb3JtYWwpCi0gICAgICByZXR1cm4gYzsKKyAgICAg
ICAgcmV0dXJuIGM7CiAgICAgfQotICAgIAorCiAgICAgaWYgKGV4ZWMtPmR5bmFtaWNJbnRlcnBy
ZXRlcigpLT50aW1lZE91dCgpKQogICAgICAgICByZXR1cm4gQ29tcGxldGlvbihJbnRlcnJ1cHRl
ZCk7Ci0gICAgCisKICAgICBpZiAoZXhwcjMpIHsKICAgICAgIHYgPSBleHByMy0+ZXZhbHVhdGUo
ZXhlYyk7CiAgICAgICBLSlNfQ0hFQ0tFWENFUFRJT04KICAgICB9CiAgIH0KLSAgCisKICAgcmV0
dXJuIENvbXBsZXRpb24oKTsgLy8gd29yayBhcm91bmQgZ2NjIDQuMCBidWcKIH0KIApAQCAtMTk0
NiwxMiArMTk0NiwxMiBAQAogICBLSlNfQ0hFQ0tFWENFUFRJT04KICAgdiA9IGUtPnRvT2JqZWN0
KGV4ZWMpOwogICB2LT5nZXRQcm9wZXJ0eU5hbWVzKGV4ZWMsIHByb3BlcnR5TmFtZXMpOwotICAK
KwogICBQcm9wZXJ0eU5hbWVBcnJheUl0ZXJhdG9yIGVuZCA9IHByb3BlcnR5TmFtZXMuZW5kKCk7
CiAgIGZvciAoUHJvcGVydHlOYW1lQXJyYXlJdGVyYXRvciBpdCA9IHByb3BlcnR5TmFtZXMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICBjb25zdCBJZGVudGlmaWVyICZuYW1lID0g
Kml0OwotICAgICAgaWYgKCF2LT5oYXNQcm9wZXJ0eShleGVjLCBuYW1lKSkKLSAgICAgICAgICBj
b250aW51ZTsKKyAgICBjb25zdCBJZGVudGlmaWVyICZuYW1lID0gKml0OworICAgIGlmICghdi0+
aGFzUHJvcGVydHkoZXhlYywgbmFtZSkpCisgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICBKU1Zh
bHVlICpzdHIgPSBqc1N0cmluZyhuYW1lLnVzdHJpbmcoKSk7CiAKQEAgLTIzODMsOCArMjM4Myw4
IEBACiAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi12b2lkIFBhcmFtZXRlck5vZGU6OmJy
ZWFrQ3ljbGUoKSAKLXsgCit2b2lkIFBhcmFtZXRlck5vZGU6OmJyZWFrQ3ljbGUoKQorewogICAg
IG5leHQgPSAwOwogfQogCkBAIC0yNTI5LDcgKzI1MjksNyBAQAogICBLSlNfQ0hFQ0tFWENFUFRJ
T047CiAgIGlmIChjMS5jb21wbFR5cGUoKSAhPSBOb3JtYWwpCiAgICAgcmV0dXJuIGMxOwotICAK
KwogICBmb3IgKFNvdXJjZUVsZW1lbnRzTm9kZSAqbiA9IG5leHQuZ2V0KCk7IG47IG4gPSBuLT5u
ZXh0LmdldCgpKSB7CiAgICAgQ29tcGxldGlvbiBjMiA9IG4tPm5vZGUtPmV4ZWN1dGUoZXhlYyk7
CiAgICAgaWYgKGMyLmNvbXBsVHlwZSgpICE9IE5vcm1hbCkKQEAgLTI1MzksNyArMjUzOSw3IEBA
CiAgICAgaWYgKGMyLnZhbHVlKCkpCiAgICAgICBjMSA9IGMyOwogICB9Ci0gIAorCiAgIHJldHVy
biBjMTsKIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2dyYW1tYXIueQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZ3JhbW1hci55CShyZXZpc2lvbiAyMjAyNikKKysrIEph
dmFTY3JpcHRDb3JlL2tqcy9ncmFtbWFyLnkJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcg
QEAKICNpbmNsdWRlICJ0eXBlcy5oIgogI2luY2x1ZGUgImludGVycHJldGVyLmgiCiAjaW5jbHVk
ZSAibm9kZXMuaCIKKyNpbmNsdWRlICJtYWtlbm9kZXMuaCIKICNpbmNsdWRlICJsZXhlci5oIgog
I2luY2x1ZGUgImludGVybmFsLmgiCiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKQEAg
LTU2LDE0ICs1Nyw2IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKLXN0YXRpYyBOb2RlKiBt
YWtlQXNzaWduTm9kZShOb2RlKiBsb2MsIE9wZXJhdG9yLCBOb2RlKiBleHByKTsKLXN0YXRpYyBO
b2RlKiBtYWtlUHJlZml4Tm9kZShOb2RlKiBleHByLCBPcGVyYXRvcik7Ci1zdGF0aWMgTm9kZSog
bWFrZVBvc3RmaXhOb2RlKE5vZGUqIGV4cHIsIE9wZXJhdG9yKTsKLXN0YXRpYyBib29sIG1ha2VH
ZXR0ZXJPclNldHRlclByb3BlcnR5Tm9kZShQcm9wZXJ0eU5vZGUqJiByZXN1bHQsIElkZW50aWZp
ZXIgJmdldE9yU2V0LCBJZGVudGlmaWVyJiBuYW1lLCBQYXJhbWV0ZXJOb2RlICpwYXJhbXMsIEZ1
bmN0aW9uQm9keU5vZGUgKmJvZHkpOwotc3RhdGljIE5vZGUgKm1ha2VGdW5jdGlvbkNhbGxOb2Rl
KE5vZGUgKmZ1bmMsIEFyZ3VtZW50c05vZGUgKmFyZ3MpOwotc3RhdGljIE5vZGUgKm1ha2VUeXBl
T2ZOb2RlKE5vZGUgKmV4cHIpOwotc3RhdGljIE5vZGUgKm1ha2VEZWxldGVOb2RlKE5vZGUgKmV4
cHIpOwotCiAjaWYgQ09NUElMRVIoTVNWQykKIAogI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQw
NjUpCkBAIC0zNTgsMTAgKzM1MSwxMCBAQAogICB8IEFVVE9QTFVTUExVUyBVbmFyeUV4cHIgICAg
ICAgICAgICAgIHsgJCQgPSBtYWtlUHJlZml4Tm9kZSgkMiwgT3BQbHVzUGx1cyk7IH0KICAgfCBN
SU5VU01JTlVTIFVuYXJ5RXhwciAgICAgICAgICAgICAgICB7ICQkID0gbWFrZVByZWZpeE5vZGUo
JDIsIE9wTWludXNNaW51cyk7IH0KICAgfCBBVVRPTUlOVVNNSU5VUyBVbmFyeUV4cHIgICAgICAg
ICAgICB7ICQkID0gbWFrZVByZWZpeE5vZGUoJDIsIE9wTWludXNNaW51cyk7IH0KLSAgfCAnKycg
VW5hcnlFeHByICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3IFVuYXJ5UGx1c05vZGUo
JDIpOyB9Ci0gIHwgJy0nIFVuYXJ5RXhwciAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5l
dyBOZWdhdGVOb2RlKCQyKTsgfQotICB8ICd+JyBVbmFyeUV4cHIgICAgICAgICAgICAgICAgICAg
ICAgIHsgJCQgPSBuZXcgQml0d2lzZU5vdE5vZGUoJDIpOyB9Ci0gIHwgJyEnIFVuYXJ5RXhwciAg
ICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5ldyBMb2dpY2FsTm90Tm9kZSgkMik7IH0KKyAg
fCAnKycgVW5hcnlFeHByICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gbWFrZVVuYXJ5UGx1
c05vZGUoJDIpOyB9CisgIHwgJy0nIFVuYXJ5RXhwciAgICAgICAgICAgICAgICAgICAgICAgeyAk
JCA9IG1ha2VOZWdhdGVOb2RlKCQyKTsgfQorICB8ICd+JyBVbmFyeUV4cHIgICAgICAgICAgICAg
ICAgICAgICAgIHsgJCQgPSBtYWtlQml0d2lzZU5vdE5vZGUoJDIpOyB9CisgIHwgJyEnIFVuYXJ5
RXhwciAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG1ha2VMb2dpY2FsTm90Tm9kZSgkMik7
IH0KIAogVW5hcnlFeHByOgogICAgIFBvc3RmaXhFeHByCkBAIC03MTUsMTQgKzcwOCwxNCBAQAog
CiBJZlN0YXRlbWVudDoKICAgICBJRiAnKCcgRXhwciAnKScgU3RhdGVtZW50ICVwcmVjIElGX1dJ
VEhPVVRfRUxTRQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQg
PSBuZXcgSWZOb2RlKCQzLCAkNSwgMCk7IERCRygkJCwgQDEsIEA0KTsgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBtYWtlSWZOb2RlKCQzLCAkNSwgMCk7
IERCRygkJCwgQDEsIEA0KTsgfQogICB8IElGICcoJyBFeHByICcpJyBTdGF0ZW1lbnQgRUxTRSBT
dGF0ZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0g
bmV3IElmTm9kZSgkMywgJDUsICQ3KTsgREJHKCQkLCBAMSwgQDQpOyB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG1ha2VJZk5vZGUoJDMsICQ1LCAkNyk7
IERCRygkJCwgQDEsIEA0KTsgfQogOwogCiBJdGVyYXRpb25TdGF0ZW1lbnQ6Ci0gICAgRE8gU3Rh
dGVtZW50IFdISUxFICcoJyBFeHByICcpJyAnOycgICAgeyAkJCA9IG5ldyBEb1doaWxlTm9kZSgk
MiwgJDUpOyBEQkcoJCQsIEAxLCBAMyk7fQotICB8IERPIFN0YXRlbWVudCBXSElMRSAnKCcgRXhw
ciAnKScgZXJyb3IgICAgeyAkJCA9IG5ldyBEb1doaWxlTm9kZSgkMiwgJDUpOyBEQkcoJCQsIEAx
LCBAMyk7IEFVVE9fU0VNSUNPTE9OO30KKyAgICBETyBTdGF0ZW1lbnQgV0hJTEUgJygnIEV4cHIg
JyknICc7JyB7ICQkID0gbmV3IERvV2hpbGVOb2RlKCQyLCAkNSk7IERCRygkJCwgQDEsIEAzKTt9
CisgIHwgRE8gU3RhdGVtZW50IFdISUxFICcoJyBFeHByICcpJyBlcnJvciB7ICQkID0gbmV3IERv
V2hpbGVOb2RlKCQyLCAkNSk7IERCRygkJCwgQDEsIEAzKTsgQVVUT19TRU1JQ09MT047IH0KICAg
fCBXSElMRSAnKCcgRXhwciAnKScgU3RhdGVtZW50ICAgICAgICB7ICQkID0gbmV3IFdoaWxlTm9k
ZSgkMywgJDUpOyBEQkcoJCQsIEAxLCBANCk7IH0KICAgfCBGT1IgJygnIEV4cHJOb0luT3B0ICc7
JyBFeHByT3B0ICc7JyBFeHByT3B0ICcpJyBTdGF0ZW1lbnQKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3IEZvck5vZGUoJDMsICQ1LCAkNywgJDkpOyBE
QkcoJCQsIEAxLCBAOCk7IH0KQEAgLTgwOCw3ICs4MDEsNyBAQAogOwogCiBMYWJlbGxlZFN0YXRl
bWVudDoKLSAgICBJREVOVCAnOicgU3RhdGVtZW50ICAgICAgICAgICAgICAgICB7ICQzLT5wdXNo
TGFiZWwoKiQxKTsgJCQgPSBuZXcgTGFiZWxOb2RlKCokMSwgJDMpOyB9CisgICAgSURFTlQgJzon
IFN0YXRlbWVudCAgICAgICAgICAgICAgICAgeyBtYWtlTGFiZWxOb2RlKCokMSwgJDMpOyB9CiA7
CiAKIFRocm93U3RhdGVtZW50OgpAQCAtODcwLDEzOCArODYzLDYgQEAKICAKICUlCiAKLXN0YXRp
YyBOb2RlKiBtYWtlQXNzaWduTm9kZShOb2RlKiBsb2MsIE9wZXJhdG9yIG9wLCBOb2RlKiBleHBy
KQoteyAKLSAgICBOb2RlICpuID0gbG9jLT5ub2RlSW5zaWRlQWxsUGFyZW5zKCk7Ci0KLSAgICBp
ZiAoIW4tPmlzTG9jYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIG5ldyBBc3NpZ25FcnJvck5vZGUo
bG9jLCBvcCwgZXhwcik7Ci0KLSAgICBpZiAobi0+aXNSZXNvbHZlTm9kZSgpKSB7Ci0gICAgICAg
IFJlc29sdmVOb2RlICpyZXNvbHZlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUgKj4obik7Ci0g
ICAgICAgIHJldHVybiBuZXcgQXNzaWduUmVzb2x2ZU5vZGUocmVzb2x2ZS0+aWRlbnRpZmllcigp
LCBvcCwgZXhwcik7Ci0gICAgfQotICAgIGlmIChuLT5pc0JyYWNrZXRBY2Nlc3Nvck5vZGUoKSkg
ewotICAgICAgICBCcmFja2V0QWNjZXNzb3JOb2RlICpicmFja2V0ID0gc3RhdGljX2Nhc3Q8QnJh
Y2tldEFjY2Vzc29yTm9kZSAqPihuKTsKLSAgICAgICAgcmV0dXJuIG5ldyBBc3NpZ25CcmFja2V0
Tm9kZShicmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBvcCwgZXhwcik7Ci0g
ICAgfQotICAgIGFzc2VydChuLT5pc0RvdEFjY2Vzc29yTm9kZSgpKTsKLSAgICBEb3RBY2Nlc3Nv
ck5vZGUgKmRvdCA9IHN0YXRpY19jYXN0PERvdEFjY2Vzc29yTm9kZSAqPihuKTsKLSAgICByZXR1
cm4gbmV3IEFzc2lnbkRvdE5vZGUoZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBvcCwg
ZXhwcik7Ci19Ci0KLXN0YXRpYyBOb2RlKiBtYWtlUHJlZml4Tm9kZShOb2RlICpleHByLCBPcGVy
YXRvciBvcCkKLXsgCi0gICAgTm9kZSAqbiA9IGV4cHItPm5vZGVJbnNpZGVBbGxQYXJlbnMoKTsK
LQotICAgIGlmICghbi0+aXNMb2NhdGlvbigpKQotICAgICAgICByZXR1cm4gbmV3IFByZWZpeEVy
cm9yTm9kZShleHByLCBvcCk7Ci0gICAgCi0gICAgaWYgKG4tPmlzUmVzb2x2ZU5vZGUoKSkgewot
ICAgICAgICBSZXNvbHZlTm9kZSAqcmVzb2x2ZSA9IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlICo+
KG4pOwotICAgICAgICByZXR1cm4gbmV3IFByZWZpeFJlc29sdmVOb2RlKHJlc29sdmUtPmlkZW50
aWZpZXIoKSwgb3ApOwotICAgIH0KLSAgICBpZiAobi0+aXNCcmFja2V0QWNjZXNzb3JOb2RlKCkp
IHsKLSAgICAgICAgQnJhY2tldEFjY2Vzc29yTm9kZSAqYnJhY2tldCA9IHN0YXRpY19jYXN0PEJy
YWNrZXRBY2Nlc3Nvck5vZGUgKj4obik7Ci0gICAgICAgIHJldHVybiBuZXcgUHJlZml4QnJhY2tl
dE5vZGUoYnJhY2tldC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwgb3ApOwotICAgIH0K
LSAgICBhc3NlcnQobi0+aXNEb3RBY2Nlc3Nvck5vZGUoKSk7Ci0gICAgRG90QWNjZXNzb3JOb2Rl
ICpkb3QgPSBzdGF0aWNfY2FzdDxEb3RBY2Nlc3Nvck5vZGUgKj4obik7Ci0gICAgcmV0dXJuIG5l
dyBQcmVmaXhEb3ROb2RlKGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgb3ApOwotfQot
Ci1zdGF0aWMgTm9kZSogbWFrZVBvc3RmaXhOb2RlKE5vZGUqIGV4cHIsIE9wZXJhdG9yIG9wKQot
eyAKLSAgICBOb2RlICpuID0gZXhwci0+bm9kZUluc2lkZUFsbFBhcmVucygpOwotCi0gICAgaWYg
KCFuLT5pc0xvY2F0aW9uKCkpCi0gICAgICAgIHJldHVybiBuZXcgUG9zdGZpeEVycm9yTm9kZShl
eHByLCBvcCk7Ci0gICAgCi0gICAgaWYgKG4tPmlzUmVzb2x2ZU5vZGUoKSkgewotICAgICAgICBS
ZXNvbHZlTm9kZSAqcmVzb2x2ZSA9IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlICo+KG4pOwotICAg
ICAgICByZXR1cm4gbmV3IFBvc3RmaXhSZXNvbHZlTm9kZShyZXNvbHZlLT5pZGVudGlmaWVyKCks
IG9wKTsKLSAgICB9Ci0gICAgaWYgKG4tPmlzQnJhY2tldEFjY2Vzc29yTm9kZSgpKSB7Ci0gICAg
ICAgIEJyYWNrZXRBY2Nlc3Nvck5vZGUgKmJyYWNrZXQgPSBzdGF0aWNfY2FzdDxCcmFja2V0QWNj
ZXNzb3JOb2RlICo+KG4pOwotICAgICAgICByZXR1cm4gbmV3IFBvc3RmaXhCcmFja2V0Tm9kZShi
cmFja2V0LT5iYXNlKCksIGJyYWNrZXQtPnN1YnNjcmlwdCgpLCBvcCk7Ci0gICAgfQotICAgIGFz
c2VydChuLT5pc0RvdEFjY2Vzc29yTm9kZSgpKTsKLSAgICBEb3RBY2Nlc3Nvck5vZGUgKmRvdCA9
IHN0YXRpY19jYXN0PERvdEFjY2Vzc29yTm9kZSAqPihuKTsKLSAgICByZXR1cm4gbmV3IFBvc3Rm
aXhEb3ROb2RlKGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgb3ApOwotfQotCi1zdGF0
aWMgTm9kZSAqbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoTm9kZSAqZnVuYywgQXJndW1lbnRzTm9kZSAq
YXJncykKLXsKLSAgICBOb2RlICpuID0gZnVuYy0+bm9kZUluc2lkZUFsbFBhcmVucygpOwotICAg
IAotICAgIGlmICghbi0+aXNMb2NhdGlvbigpKQotICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9u
Q2FsbFZhbHVlTm9kZShmdW5jLCBhcmdzKTsKLSAgICBlbHNlIGlmIChuLT5pc1Jlc29sdmVOb2Rl
KCkpIHsKLSAgICAgICAgUmVzb2x2ZU5vZGUgKnJlc29sdmUgPSBzdGF0aWNfY2FzdDxSZXNvbHZl
Tm9kZSAqPihuKTsKLSAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZShy
ZXNvbHZlLT5pZGVudGlmaWVyKCksIGFyZ3MpOwotICAgIH0gZWxzZSBpZiAobi0+aXNCcmFja2V0
QWNjZXNzb3JOb2RlKCkpIHsKLSAgICAgICAgQnJhY2tldEFjY2Vzc29yTm9kZSAqYnJhY2tldCA9
IHN0YXRpY19jYXN0PEJyYWNrZXRBY2Nlc3Nvck5vZGUgKj4obik7Ci0gICAgICAgIGlmIChuICE9
IGZ1bmMpCi0gICAgICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uQ2FsbFBhcmVuQnJhY2tldE5v
ZGUoYnJhY2tldC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwgYXJncyk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGUoYnJh
Y2tldC0+YmFzZSgpLCBicmFja2V0LT5zdWJzY3JpcHQoKSwgYXJncyk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgYXNzZXJ0KG4tPmlzRG90QWNjZXNzb3JOb2RlKCkpOwotICAgICAgICBEb3RBY2Nl
c3Nvck5vZGUgKmRvdCA9IHN0YXRpY19jYXN0PERvdEFjY2Vzc29yTm9kZSAqPihuKTsKLSAgICAg
ICAgaWYgKG4gIT0gZnVuYykKLSAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb25DYWxsUGFy
ZW5Eb3ROb2RlKGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgYXJncyk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb25DYWxsRG90Tm9kZShkb3QtPmJh
c2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGFyZ3MpOwotICAgIH0KLX0KLQotc3RhdGljIE5vZGUg
Km1ha2VUeXBlT2ZOb2RlKE5vZGUgKmV4cHIpCi17Ci0gICAgTm9kZSAqbiA9IGV4cHItPm5vZGVJ
bnNpZGVBbGxQYXJlbnMoKTsKLQotICAgIGlmIChuLT5pc1Jlc29sdmVOb2RlKCkpIHsKLSAgICAg
ICAgUmVzb2x2ZU5vZGUgKnJlc29sdmUgPSBzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSAqPihuKTsK
LSAgICAgICAgcmV0dXJuIG5ldyBUeXBlT2ZSZXNvbHZlTm9kZShyZXNvbHZlLT5pZGVudGlmaWVy
KCkpOwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gbmV3IFR5cGVPZlZhbHVlTm9kZShleHBy
KTsKLX0KLQotc3RhdGljIE5vZGUgKm1ha2VEZWxldGVOb2RlKE5vZGUgKmV4cHIpCi17Ci0gICAg
Tm9kZSAqbiA9IGV4cHItPm5vZGVJbnNpZGVBbGxQYXJlbnMoKTsKLSAgICAKLSAgICBpZiAoIW4t
PmlzTG9jYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIG5ldyBEZWxldGVWYWx1ZU5vZGUoZXhwcik7
Ci0gICAgZWxzZSBpZiAobi0+aXNSZXNvbHZlTm9kZSgpKSB7Ci0gICAgICAgIFJlc29sdmVOb2Rl
ICpyZXNvbHZlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUgKj4obik7Ci0gICAgICAgIHJldHVy
biBuZXcgRGVsZXRlUmVzb2x2ZU5vZGUocmVzb2x2ZS0+aWRlbnRpZmllcigpKTsKLSAgICB9IGVs
c2UgaWYgKG4tPmlzQnJhY2tldEFjY2Vzc29yTm9kZSgpKSB7Ci0gICAgICAgIEJyYWNrZXRBY2Nl
c3Nvck5vZGUgKmJyYWNrZXQgPSBzdGF0aWNfY2FzdDxCcmFja2V0QWNjZXNzb3JOb2RlICo+KG4p
OwotICAgICAgICByZXR1cm4gbmV3IERlbGV0ZUJyYWNrZXROb2RlKGJyYWNrZXQtPmJhc2UoKSwg
YnJhY2tldC0+c3Vic2NyaXB0KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGFzc2VydChuLT5p
c0RvdEFjY2Vzc29yTm9kZSgpKTsKLSAgICAgICAgRG90QWNjZXNzb3JOb2RlICpkb3QgPSBzdGF0
aWNfY2FzdDxEb3RBY2Nlc3Nvck5vZGUgKj4obik7Ci0gICAgICAgIHJldHVybiBuZXcgRGVsZXRl
RG90Tm9kZShkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCkpOwotICAgIH0KLX0KLQotc3Rh
dGljIGJvb2wgbWFrZUdldHRlck9yU2V0dGVyUHJvcGVydHlOb2RlKFByb3BlcnR5Tm9kZSomIHJl
c3VsdCwgSWRlbnRpZmllciYgZ2V0T3JTZXQsIElkZW50aWZpZXImIG5hbWUsIFBhcmFtZXRlck5v
ZGUgKnBhcmFtcywgRnVuY3Rpb25Cb2R5Tm9kZSAqYm9keSkKLXsKLSAgICBQcm9wZXJ0eU5vZGU6
OlR5cGUgdHlwZTsKLSAgICAKLSAgICBpZiAoZ2V0T3JTZXQgPT0gImdldCIpCi0gICAgICAgIHR5
cGUgPSBQcm9wZXJ0eU5vZGU6OkdldHRlcjsKLSAgICBlbHNlIGlmIChnZXRPclNldCA9PSAic2V0
IikKLSAgICAgICAgdHlwZSA9IFByb3BlcnR5Tm9kZTo6U2V0dGVyOwotICAgIGVsc2UKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJlc3VsdCA9IG5ldyBQcm9wZXJ0eU5vZGUobmV3
IFByb3BlcnR5TmFtZU5vZGUobmFtZSksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bmV3IEZ1bmNFeHByTm9kZShDb21tb25JZGVudGlmaWVyczo6c2hhcmVkKCktPm51bGxJZGVudGlm
aWVyLCBib2R5LCBwYXJhbXMpLCB0eXBlKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCiAvKiBj
YWxsZWQgYnkgeXlwYXJzZSBvbiBlcnJvciAqLwogaW50IHl5ZXJyb3IoY29uc3QgY2hhciAqKQog
ewpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUva2pzL25vZGVzLmgJKHJldmlzaW9uIDIyMDI2KQorKysgSmF2YVNjcmlwdENvcmUv
a2pzL25vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDkgKzc4LDIxIEBACiAKICAgY2xhc3Mg
Tm9kZSB7CiAgIHB1YmxpYzoKKyAgICAgIGVudW0gTm9kZVR5cGUgeworICAgICAgICAgIFVua25v
d25Ob2RlVHlwZSwKKyAgICAgICAgICBOdWxsTm9kZVR5cGUsCisgICAgICAgICAgQm9vbGVhbk5v
ZGVUeXBlLAorICAgICAgICAgIE51bWJlck5vZGVUeXBlLAorICAgICAgICAgIFN0cmluZ05vZGVU
eXBlLAorICAgICAgICAgIFJlZ0V4cE5vZGVUeXBlLAorICAgICAgICAgIFRyeU5vZGVUeXBlLAor
ICAgICAgICAgIEdyb3VwTm9kZVR5cGUKKyAgICAgIH07CiAgICAgTm9kZSgpIEtKU19GQVNUX0NB
TEw7CiAgICAgdmlydHVhbCB+Tm9kZSgpOwogCisgICAgdmlydHVhbCBOb2RlVHlwZSB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gVW5rbm93bk5vZGVUeXBlOyB9CisKICAgICB2aXJ0dWFsIEpTVmFsdWUg
KmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykgS0pTX0ZBU1RfQ0FMTCA9IDA7CiAgICAgVVN0cmlu
ZyB0b1N0cmluZygpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEwgPSAwOwpAQCAtOTgsNyArMTEw
LDEwIEBACiAgICAgdmlydHVhbCBib29sIGlzUmVzb2x2ZU5vZGUoKSBjb25zdCBLSlNfRkFTVF9D
QUxMIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzQnJhY2tldEFjY2Vzc29y
Tm9kZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFs
IGJvb2wgaXNEb3RBY2Nlc3Nvck5vZGUoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzR3JvdXBOb2RlKCkgY29uc3QgS0pTX0ZBU1RfQ0FM
TCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNOdW1iZXIoKSBjb25zdCBLSlNfRkFTVF9D
QUxMIHsgcmV0dXJuIHR5cGUoKSA9PSBOdW1iZXJOb2RlVHlwZTsgfQorICAgIGJvb2wgaXNTdHJp
bmcoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIHR5cGUoKSA9PSBTdHJpbmdOb2RlVHlw
ZTsgfQorICAgIGJvb2wgaXNHcm91cE5vZGUoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJu
IHR5cGUoKSA9PSBHcm91cE5vZGVUeXBlOyB9CisgICAgYm9vbCBpc1RyeU5vZGUoKSBjb25zdCBL
SlNfRkFTVF9DQUxMIHsgcmV0dXJuIHR5cGUoKSA9PSBUcnlOb2RlVHlwZTsgfQogCiAgICAgdmly
dHVhbCB2b2lkIGJyZWFrQ3ljbGUoKSBLSlNfRkFTVF9DQUxMIHsgfQogCkBAIC0xNTIsMzUgKzE2
Nyw0NSBAQAogCiAgIGNsYXNzIEJvb2xlYW5Ob2RlIDogcHVibGljIE5vZGUgewogICBwdWJsaWM6
Ci0gICAgQm9vbGVhbk5vZGUoYm9vbCB2KSBLSlNfRkFTVF9DQUxMIDogdmFsdWUodikge30KKyAg
ICBCb29sZWFuTm9kZShib29sIHYpIEtKU19GQVNUX0NBTEwgOiB2YWwodikge30KKyAgICBib29s
IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gdmFsOyB9CiAgICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhl
Y1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgcHJpdmF0ZToKLSAgICBib29sIHZhbHVl
OworICAgIGJvb2wgdmFsOwogICB9OwogCiAgIGNsYXNzIE51bWJlck5vZGUgOiBwdWJsaWMgTm9k
ZSB7CiAgIHB1YmxpYzoKLSAgICBOdW1iZXJOb2RlKGRvdWJsZSB2KSBLSlNfRkFTVF9DQUxMIDog
dmFsdWUodikge30KKyAgICBOdW1iZXJOb2RlKGRvdWJsZSB2KSBLSlNfRkFTVF9DQUxMIDogdmFs
KHYpIHt9CisgICAgZG91YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gdmFsOyB9CisgICAgdm9p
ZCBzZXRWYWx1ZShkb3VibGUgdikgeyB2YWwgPSB2OyB9CisKKyAgICB2aXJ0dWFsIE5vZGVUeXBl
IHR5cGUoKSBjb25zdCB7IHJldHVybiBOdW1iZXJOb2RlVHlwZTsgfQogICAgIEpTVmFsdWUqIGV2
YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgIHByaXZhdGU6Ci0gICAg
ZG91YmxlIHZhbHVlOworICAgIGRvdWJsZSB2YWw7CiAgIH07CiAKICAgY2xhc3MgU3RyaW5nTm9k
ZSA6IHB1YmxpYyBOb2RlIHsKICAgcHVibGljOgotICAgIFN0cmluZ05vZGUoY29uc3QgVVN0cmlu
ZyAqdikgS0pTX0ZBU1RfQ0FMTCB7IHZhbHVlID0gKnY7IH0KKyAgICBTdHJpbmdOb2RlKGNvbnN0
IFVTdHJpbmcgKnYpIEtKU19GQVNUX0NBTEwgOiB2YWwoKnYpIHsgfQorICAgIFVTdHJpbmcgdmFs
dWUoKSBjb25zdCB7IHJldHVybiB2YWw7IH0KKyAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFVTdHJp
bmcmIHYpIHsgdmFsID0gdjsgfQorCisgICAgdmlydHVhbCBOb2RlVHlwZSB0eXBlKCkgY29uc3Qg
eyByZXR1cm4gU3RyaW5nTm9kZVR5cGU7IH0KICAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3Rh
dGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICBwcml2YXRlOgotICAgIFVTdHJpbmcgdmFsdWU7
CisgICAgVVN0cmluZyB2YWw7CiAgIH07CiAKICAgY2xhc3MgUmVnRXhwTm9kZSA6IHB1YmxpYyBO
b2RlIHsKICAgcHVibGljOgogICAgIFJlZ0V4cE5vZGUoY29uc3QgVVN0cmluZyAmcCwgY29uc3Qg
VVN0cmluZyAmZikgS0pTX0ZBU1RfQ0FMTCAKICAgICAgIDogcGF0dGVybihwKSwgZmxhZ3MoZikg
eyB9CisgICAgdmlydHVhbCBOb2RlVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gUmVnRXhwTm9k
ZVR5cGU7IH0KICAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFT
VF9DQUxMOwogICBwcml2YXRlOgpAQCAtMjExLDYgKzIzNiw3IEBACiAgIGNsYXNzIEdyb3VwTm9k
ZSA6IHB1YmxpYyBOb2RlIHsKICAgcHVibGljOgogICAgIEdyb3VwTm9kZShOb2RlICpnKSBLSlNf
RkFTVF9DQUxMIDogZ3JvdXAoZykgeyB9CisgICAgdmlydHVhbCBOb2RlVHlwZSB0eXBlKCkgY29u
c3QgeyByZXR1cm4gR3JvdXBOb2RlVHlwZTsgfQogICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVh
dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIE5vZGUgKm5vZGVJbnNp
ZGVBbGxQYXJlbnMoKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwpJbmRleDogSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNp
b24gMjM0ODcpCisrKyBKYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSw1MyBAQAorMjAwNy0wNi0xMyAgTHVjaWFubyBNb250YW5hcm8gIDxtaWtlbGltYUBj
aXJ1bGxhLm5ldD4KKyAgICAgICAgUG9ydCBranMgY2hhbmdlcyBieSBIYXJyeSBQb3J0ZW4gYW5k
IG1lIGZyb20gS0RFIFNWTi4KKyAgICAgICAgLSBNb3ZlZCBtYWtlWE5vZGUgZnVuY3Rpb25zIHRv
IGEgc2VwYXJhdGUgZmlsZSB0byBhdm9pZCBjaGFuZ2luZyB0aGUKKyAgICAgICAgZ3JhbW1hci55
IGJpc29uIGZpbGUgZGlyZWN0bHkuCisgICAgICAgIC0gT3B0aW1pemUgdGhlIGdyYXBoIGdlbmVy
YXRpb24sIGdlbmVyYXRpbmcgYSBOdW1iZXJOb2RlIGZvciAKKyAgICAgICAgVW5hcnlQbHVzIE51
bWJlciBhbmQgVW5hcnlNaW51cyAoTnVtYmVyKS4gTW9yZSBjb25zdGFudCBleHByZXNzaW9uCisg
ICAgICAgIG9wdGltaXphdGlvbnMgYXJlIHBvc3NpYmxlLgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICoga2pzL2dyYW1tYXIueToKKyAgICAgICAgKiBr
anMvbm9kZXMuY3BwOgorICAgICAgICAoQm9vbGVhbk5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAg
KE51bWJlck5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAgKFN0cmluZ05vZGU6OmV2YWx1YXRlKToK
KyAgICAgICAgKFJlc29sdmVOb2RlOjpldmFsdWF0ZSk6CisgICAgICAgIChFbGVtZW50Tm9kZTo6
YnJlYWtDeWNsZSk6CisgICAgICAgIChQcm9wZXJ0eUxpc3ROb2RlOjpldmFsdWF0ZSk6CisgICAg
ICAgIChQcm9wZXJ0eUxpc3ROb2RlOjpicmVha0N5Y2xlKToKKyAgICAgICAgKEFyZ3VtZW50TGlz
dE5vZGU6OmJyZWFrQ3ljbGUpOgorICAgICAgICAoRnVuY3Rpb25DYWxsVmFsdWVOb2RlOjpldmFs
dWF0ZSk6CisgICAgICAgIChGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6ZXZhbHVhdGUpOgorICAg
ICAgICAodHlwZVN0cmluZ0ZvclZhbHVlKToKKyAgICAgICAgKHZhbHVlRm9yUmVhZE1vZGlmeUFz
c2lnbm1lbnQpOgorICAgICAgICAoVmFyRGVjbExpc3ROb2RlOjpicmVha0N5Y2xlKToKKyAgICAg
ICAgKFdoaWxlTm9kZTo6ZXhlY3V0ZSk6CisgICAgICAgIChGb3JOb2RlOjpleGVjdXRlKToKKyAg
ICAgICAgKEZvckluTm9kZTo6ZXhlY3V0ZSk6CisgICAgICAgIChQYXJhbWV0ZXJOb2RlOjpicmVh
a0N5Y2xlKToKKyAgICAgICAgKFNvdXJjZUVsZW1lbnRzTm9kZTo6ZXhlY3V0ZSk6CisgICAgICAg
ICoga2pzL25vZGVzLmg6CisgICAgICAgIChLSlM6Ok5vZGU6Oik6CisgICAgICAgIChLSlM6Ok5v
ZGU6OnR5cGUpOgorICAgICAgICAoS0pTOjpCb29sZWFuTm9kZTo6KToKKyAgICAgICAgKEtKUzo6
Qm9vbGVhbk5vZGU6OnZhbHVlKToKKyAgICAgICAgKEtKUzo6TnVtYmVyTm9kZTo6KToKKyAgICAg
ICAgKEtKUzo6TnVtYmVyTm9kZTo6dmFsdWUpOgorICAgICAgICAoS0pTOjpOdW1iZXJOb2RlOjpz
ZXRWYWx1ZSk6CisgICAgICAgIChLSlM6Ok51bWJlck5vZGU6OnR5cGUpOgorICAgICAgICAoS0pT
OjpTdHJpbmdOb2RlOjopOgorICAgICAgICAoS0pTOjpTdHJpbmdOb2RlOjp2YWx1ZSk6CisgICAg
ICAgIChLSlM6OlN0cmluZ05vZGU6OnNldFZhbHVlKToKKyAgICAgICAgKEtKUzo6U3RyaW5nTm9k
ZTo6dHlwZSk6CisgICAgICAgIChLSlM6OlJlZ0V4cE5vZGU6OnR5cGUpOgorICAgICAgICAoS0pT
OjpHcm91cE5vZGU6OnR5cGUpOgorICAgICAgICAqIGtqcy9ub2RlczJzdHJpbmcuY3BwOgorICAg
ICAgICAoQm9vbGVhbk5vZGU6OnN0cmVhbVRvKToKKyAgICAgICAgKE51bWJlck5vZGU6OnN0cmVh
bVRvKToKKyAgICAgICAgKFN0cmluZ05vZGU6OnN0cmVhbVRvKToKKwogMjAwNy0wNi0xMiAgQW5k
ZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEFub3RoZXIgYnVp
bGQgZml4LgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfYmluZGluZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2JpbmRpbmcuaAkocmV2aXNpb24gMjE5Nzcp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19iaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxranMvZnVuY3Rpb24uaD4KICNpbmNsdWRlIDxranMv
bG9va3VwLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogCiAjaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUuaD4KSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyMzQ4NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTEgQEAKKzIwMDctMDYtMTMgIEx1Y2lhbm8gTW9udGFuYXJvLCws
ICA8c2V0IEVNQUlMX0FERFJFU1MgZW52aXJvbm1lbnQgdmFyaWFibGU+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV0FSTklORzogTk8gVEVTVCBDQVNF
UyBBRERFRCBPUiBDSEFOR0VECisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfYmluZGluZy5o
OgorCiAyMDA3LTA2LTEzICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBGaXggb25lIG1vcmUgQklUTUFQSU5GTy9CSVRNQVBJTkZPSEVBREVSIHR5cG8uCg==
</data>
<flag name="review"
          id="6180"
          type_id="1"
          status="-"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15864</attachid>
            <date>2007-08-07 23:24:30 -0700</date>
            <delta_ts>2007-08-11 20:21:26 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>unary.diff</filename>
            <type>text/plain</type>
            <size>4632</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTI0KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDctMDgtMDggIENhbWVyb24g
WndhcmljaCAgPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBVbmFyeVBsdXNOb2RlIGFuZCBOZWdhdGVO
b2RlIG9wdGltaXphdGlvbnMgZnJvbSBLSlMuIFRoZSByZWxldmFudAorICAgICAgICByZXZpc2lv
biBpbiBLREUgaXMgNjY2NzM2LgorCisgICAgICAgICoga2pzL2dyYW1tYXIueToKKyAgICAgICAg
KiBranMvbm9kZXMuY3BwOgorICAgICAgICAoTnVtYmVyTm9kZTo6ZXZhbHVhdGUpOgorICAgICAg
ICAqIGtqcy9ub2Rlcy5oOgorICAgICAgICAoS0pTOjpOb2RlOjopOgorICAgICAgICAoS0pTOjpO
dW1iZXJOb2RlOjopOgorICAgICAgICAqIGtqcy9ub2RlczJzdHJpbmcuY3BwOgorICAgICAgICAo
TnVtYmVyTm9kZTo6c3RyZWFtVG8pOgorCiAyMDA3LTA4LTA3ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyLgpJbmRleDogSmF2YVNjcmlw
dENvcmUva2pzL2dyYW1tYXIueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZ3Jh
bW1hci55CShyZXZpc2lvbiAyNDkyMykKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9ncmFtbWFyLnkJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDggQEAgc3RhdGljIGJvb2wgbWFrZUdldHRlck9y
U2V0dGVyUHJvcGVydHlObwogc3RhdGljIE5vZGUgKm1ha2VGdW5jdGlvbkNhbGxOb2RlKE5vZGUg
KmZ1bmMsIEFyZ3VtZW50c05vZGUgKmFyZ3MpOwogc3RhdGljIE5vZGUgKm1ha2VUeXBlT2ZOb2Rl
KE5vZGUgKmV4cHIpOwogc3RhdGljIE5vZGUgKm1ha2VEZWxldGVOb2RlKE5vZGUgKmV4cHIpOwor
c3RhdGljIE5vZGUgKm1ha2VVbmFyeVBsdXNOb2RlKE5vZGUgKmV4cHIpOworc3RhdGljIE5vZGUg
Km1ha2VOZWdhdGVOb2RlKE5vZGUgKmV4cHIpOwogCiAjaWYgQ09NUElMRVIoTVNWQykKIApAQCAt
MzU4LDggKzM2MCw4IEBAIFVuYXJ5RXhwckNvbW1vbjoKICAgfCBBVVRPUExVU1BMVVMgVW5hcnlF
eHByICAgICAgICAgICAgICB7ICQkID0gbWFrZVByZWZpeE5vZGUoJDIsIE9wUGx1c1BsdXMpOyB9
CiAgIHwgTUlOVVNNSU5VUyBVbmFyeUV4cHIgICAgICAgICAgICAgICAgeyAkJCA9IG1ha2VQcmVm
aXhOb2RlKCQyLCBPcE1pbnVzTWludXMpOyB9CiAgIHwgQVVUT01JTlVTTUlOVVMgVW5hcnlFeHBy
ICAgICAgICAgICAgeyAkJCA9IG1ha2VQcmVmaXhOb2RlKCQyLCBPcE1pbnVzTWludXMpOyB9Ci0g
IHwgJysnIFVuYXJ5RXhwciAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5ldyBVbmFyeVBs
dXNOb2RlKCQyKTsgfQotICB8ICctJyBVbmFyeUV4cHIgICAgICAgICAgICAgICAgICAgICAgIHsg
JCQgPSBuZXcgTmVnYXRlTm9kZSgkMik7IH0KKyAgfCAnKycgVW5hcnlFeHByICAgICAgICAgICAg
ICAgICAgICAgICB7ICQkID0gbWFrZVVuYXJ5UGx1c05vZGUoJDIpOyB9CisgIHwgJy0nIFVuYXJ5
RXhwciAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG1ha2VOZWdhdGVOb2RlKCQyKTsgfQog
ICB8ICd+JyBVbmFyeUV4cHIgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBuZXcgQml0d2lz
ZU5vdE5vZGUoJDIpOyB9CiAgIHwgJyEnIFVuYXJ5RXhwciAgICAgICAgICAgICAgICAgICAgICAg
eyAkJCA9IG5ldyBMb2dpY2FsTm90Tm9kZSgkMik7IH0KIApAQCAtMTAwMiw2ICsxMDA0LDI0IEBA
IHN0YXRpYyBib29sIG1ha2VHZXR0ZXJPclNldHRlclByb3BlcnR5Tm8KICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAorc3RhdGljIE5vZGUqIG1ha2VVbmFyeVBsdXNOb2RlKE5vZGUgKm4pCit7CisgICAg
aWYgKG4tPmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVybiBuOworICAgIGVsc2UKKyAgICAgICAg
cmV0dXJuIG5ldyBVbmFyeVBsdXNOb2RlKG4pOworfQorCitzdGF0aWMgTm9kZSogbWFrZU5lZ2F0
ZU5vZGUoTm9kZSAqbikKK3sKKyAgICBpZiAobi0+aXNOdW1iZXIoKSkgeworICAgICAgICBOdW1i
ZXJOb2RlICpudW1iZXIgPSBzdGF0aWNfY2FzdCA8TnVtYmVyTm9kZSAqPihuKTsKKyAgICAgICAg
bnVtYmVyLT5zZXRWYWx1ZSgtbnVtYmVyLT52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIG51bWJl
cjsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIG5ldyBOZWdhdGVOb2RlKG4pOworfQorCiAv
KiBjYWxsZWQgYnkgeXlwYXJzZSBvbiBlcnJvciAqLwogaW50IHl5ZXJyb3IoY29uc3QgY2hhciAq
KQogewpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL25vZGVzMnN0cmluZy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL25vZGVzMnN0cmluZy5jcHAJKHJldmlzaW9uIDI0OTIz
KQorKysgSmF2YVNjcmlwdENvcmUva2pzL25vZGVzMnN0cmluZy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0MCw3ICsxNDAsNyBAQCB2b2lkIEJvb2xlYW5Ob2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJl
YW0gCiAgIHMgPDwgKHZhbHVlID8gInRydWUiIDogImZhbHNlIik7CiB9CiAKLXZvaWQgTnVtYmVy
Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdCB7IHMgPDwgdmFsdWU7IH0KK3Zv
aWQgTnVtYmVyTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdCB7IHMgPDwgdmFs
OyB9CiAKIHZvaWQgU3RyaW5nTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdAog
ewpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCShyZXZpc2lvbiAyNDkyMykKKysrIEphdmFTY3JpcHRD
b3JlL2tqcy9ub2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0OSw3ICszNDksNyBAQCBKU1Zh
bHVlICpCb29sZWFuTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlCiAKIEpTVmFsdWUgKk51bWJlck5v
ZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqKQogewotICByZXR1cm4ganNOdW1iZXIodmFsdWUpOwor
ICByZXR1cm4ganNOdW1iZXIodmFsKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIFN0cmluZ05vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2tqcy9ub2Rlcy5oCShyZXZpc2lvbiAyNDkyMykKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9u
b2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDcgQEAgbmFtZXNwYWNlIEtKUyB7
CiAKICAgICB2aXJ0dWFsIE5vZGUgKm5vZGVJbnNpZGVBbGxQYXJlbnMoKSBLSlNfRkFTVF9DQUxM
OwogCisgICAgdmlydHVhbCBib29sIGlzTnVtYmVyKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0xvY2F0aW9uKCkgY29uc3QgS0pTX0ZB
U1RfQ0FMTCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1Jlc29sdmVOb2Rl
KCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBpc0JyYWNrZXRBY2Nlc3Nvck5vZGUoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIGZh
bHNlOyB9CkBAIC0xNjcsMTEgKzE2OCwxNSBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBjbGFzcyBO
dW1iZXJOb2RlIDogcHVibGljIE5vZGUgewogICBwdWJsaWM6Ci0gICAgTnVtYmVyTm9kZShkb3Vi
bGUgdikgS0pTX0ZBU1RfQ0FMTCA6IHZhbHVlKHYpIHt9CisgICAgTnVtYmVyTm9kZShkb3VibGUg
dikgS0pTX0ZBU1RfQ0FMTCA6IHZhbCh2KSB7fQogICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0
cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNOdW1iZXIo
KSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIHRydWU7IH0KKyAgICBkb3VibGUgdmFsdWUo
KSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIHZhbDsgfQorICAgIHZvaWQgc2V0VmFsdWUo
ZG91YmxlIHYpIEtKU19GQVNUX0NBTEwgeyB2YWwgPSB2OyB9CiAgIHByaXZhdGU6Ci0gICAgZG91
YmxlIHZhbHVlOworICAgIGRvdWJsZSB2YWw7CiAgIH07CiAKICAgY2xhc3MgU3RyaW5nTm9kZSA6
IHB1YmxpYyBOb2RlIHsK
</data>
<flag name="review"
          id="6644"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15935</attachid>
            <date>2007-08-11 20:21:26 -0700</date>
            <delta_ts>2007-08-11 20:24:17 -0700</delta_ts>
            <desc>Revised proposed patch</desc>
            <filename>unary.diff</filename>
            <type>text/plain</type>
            <size>4262</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MDE2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDctMDgtMTEgIENhbWVyb24g
IDxjd3p3YXJpY2hAdXdhdGVybG9vLmNhPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZHMgTmVnYXRlTm9kZSBvcHRpbWl6YXRpb24gZnJvbSBLSlMu
IFRoZSByZWxldmFudCByZXZpc2lvbiBpbiBLREUKKyAgICAgICAgaXMgNjY2NzM2LgorCisgICAg
ICAgICoga2pzL2dyYW1tYXIueToKKyAgICAgICAgKiBranMvbm9kZXMuY3BwOgorICAgICAgICAo
TnVtYmVyTm9kZTo6ZXZhbHVhdGUpOgorICAgICAgICAqIGtqcy9ub2Rlcy5oOgorICAgICAgICAo
S0pTOjpOb2RlOjopOgorICAgICAgICAoS0pTOjpOdW1iZXJOb2RlOjopOgorICAgICAgICAqIGtq
cy9ub2RlczJzdHJpbmcuY3BwOgorICAgICAgICAoTnVtYmVyTm9kZTo6c3RyZWFtVG8pOgorCiAy
MDA3LTA4LTEwICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBBZGFtLgpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2dyYW1tYXIueQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZ3JhbW1hci55CShyZXZpc2lvbiAyNDk1
NikKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9ncmFtbWFyLnkJKHdvcmtpbmcgY29weSkKQEAgLTYz
LDYgKzYzLDcgQEAgc3RhdGljIGJvb2wgbWFrZUdldHRlck9yU2V0dGVyUHJvcGVydHlObwogc3Rh
dGljIE5vZGUgKm1ha2VGdW5jdGlvbkNhbGxOb2RlKE5vZGUgKmZ1bmMsIEFyZ3VtZW50c05vZGUg
KmFyZ3MpOwogc3RhdGljIE5vZGUgKm1ha2VUeXBlT2ZOb2RlKE5vZGUgKmV4cHIpOwogc3RhdGlj
IE5vZGUgKm1ha2VEZWxldGVOb2RlKE5vZGUgKmV4cHIpOworc3RhdGljIE5vZGUgKm1ha2VOZWdh
dGVOb2RlKE5vZGUgKmV4cHIpOwogCiAjaWYgQ09NUElMRVIoTVNWQykKIApAQCAtMzU5LDcgKzM2
MCw3IEBAIFVuYXJ5RXhwckNvbW1vbjoKICAgfCBNSU5VU01JTlVTIFVuYXJ5RXhwciAgICAgICAg
ICAgICAgICB7ICQkID0gbWFrZVByZWZpeE5vZGUoJDIsIE9wTWludXNNaW51cyk7IH0KICAgfCBB
VVRPTUlOVVNNSU5VUyBVbmFyeUV4cHIgICAgICAgICAgICB7ICQkID0gbWFrZVByZWZpeE5vZGUo
JDIsIE9wTWludXNNaW51cyk7IH0KICAgfCAnKycgVW5hcnlFeHByICAgICAgICAgICAgICAgICAg
ICAgICB7ICQkID0gbmV3IFVuYXJ5UGx1c05vZGUoJDIpOyB9Ci0gIHwgJy0nIFVuYXJ5RXhwciAg
ICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5ldyBOZWdhdGVOb2RlKCQyKTsgfQorICB8ICct
JyBVbmFyeUV4cHIgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBtYWtlTmVnYXRlTm9kZSgk
Mik7IH0KICAgfCAnficgVW5hcnlFeHByICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3
IEJpdHdpc2VOb3ROb2RlKCQyKTsgfQogICB8ICchJyBVbmFyeUV4cHIgICAgICAgICAgICAgICAg
ICAgICAgIHsgJCQgPSBuZXcgTG9naWNhbE5vdE5vZGUoJDIpOyB9CiAKQEAgLTEwMDIsNiArMTAw
MywxNyBAQCBzdGF0aWMgYm9vbCBtYWtlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eU5vCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKK3N0YXRpYyBOb2RlKiBtYWtlTmVnYXRlTm9kZShOb2RlICpuKQorewor
ICAgIGlmIChuLT5pc051bWJlcigpKSB7CisgICAgICAgIE51bWJlck5vZGUqIG51bWJlciA9IHN0
YXRpY19jYXN0PE51bWJlck5vZGUqPihuKTsKKyAgICAgICAgbnVtYmVyLT5zZXRWYWx1ZSgtbnVt
YmVyLT52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9CisKKyAgICByZXR1
cm4gbmV3IE5lZ2F0ZU5vZGUobik7Cit9CisKIC8qIGNhbGxlZCBieSB5eXBhcnNlIG9uIGVycm9y
ICovCiBpbnQgeXllcnJvcihjb25zdCBjaGFyICopCiB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9r
anMvbm9kZXMyc3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbm9k
ZXMyc3RyaW5nLmNwcAkocmV2aXNpb24gMjQ5NTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvbm9k
ZXMyc3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw3IEBAIHZvaWQgQm9v
bGVhbk5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSAKICAgcyA8PCAodmFsdWUgPyAidHJ1ZSIg
OiAiZmFsc2UiKTsKIH0KIAotdm9pZCBOdW1iZXJOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0g
JnMpIGNvbnN0IHsgcyA8PCB2YWx1ZTsgfQordm9pZCBOdW1iZXJOb2RlOjpzdHJlYW1UbyhTb3Vy
Y2VTdHJlYW0gJnMpIGNvbnN0IHsgcyA8PCB2YWw7IH0KIAogdm9pZCBTdHJpbmdOb2RlOjpzdHJl
YW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0CiB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMv
bm9kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJKHJl
dmlzaW9uIDI0OTU2KQorKysgSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzQ5LDcgKzM0OSw3IEBAIEpTVmFsdWUgKkJvb2xlYW5Ob2RlOjpldmFsdWF0ZShF
eGVjU3RhdGUKIAogSlNWYWx1ZSAqTnVtYmVyTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICopCiB7
Ci0gIHJldHVybiBqc051bWJlcih2YWx1ZSk7CisgIHJldHVybiBqc051bWJlcih2YWwpOwogfQog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3RyaW5nTm9kZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL25vZGVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgJKHJldmlzaW9uIDI0
OTU2KQorKysgSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
MCw2ICsxMDAsNyBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgIHZpcnR1YWwgTm9kZSAqbm9kZUlu
c2lkZUFsbFBhcmVucygpIEtKU19GQVNUX0NBTEw7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNOdW1i
ZXIoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBi
b29sIGlzTG9jYXRpb24oKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBib29sIGlzUmVzb2x2ZU5vZGUoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzQnJhY2tldEFjY2Vzc29yTm9kZSgpIGNv
bnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTE2NywxMSArMTY4LDE1IEBA
IG5hbWVzcGFjZSBLSlMgewogCiAgIGNsYXNzIE51bWJlck5vZGUgOiBwdWJsaWMgTm9kZSB7CiAg
IHB1YmxpYzoKLSAgICBOdW1iZXJOb2RlKGRvdWJsZSB2KSBLSlNfRkFTVF9DQUxMIDogdmFsdWUo
dikge30KKyAgICBOdW1iZXJOb2RlKGRvdWJsZSB2KSBLSlNfRkFTVF9DQUxMIDogdmFsKHYpIHt9
CiAgICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2
aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsK
KworICAgIHZpcnR1YWwgYm9vbCBpc051bWJlcigpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIGRvdWJsZSB2YWx1ZSgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1
cm4gdmFsOyB9CisgICAgdm9pZCBzZXRWYWx1ZShkb3VibGUgdikgS0pTX0ZBU1RfQ0FMTCB7IHZh
bCA9IHY7IH0KICAgcHJpdmF0ZToKLSAgICBkb3VibGUgdmFsdWU7CisgICAgZG91YmxlIHZhbDsK
ICAgfTsKIAogICBjbGFzcyBTdHJpbmdOb2RlIDogcHVibGljIE5vZGUgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15936</attachid>
            <date>2007-08-11 20:24:17 -0700</date>
            <delta_ts>2007-08-13 23:44:45 -0700</delta_ts>
            <desc>Revised proposed patch</desc>
            <filename>unary.diff</filename>
            <type>text/plain</type>
            <size>4270</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MDE2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDctMDgtMTEgIENhbWVyb24g
WndhcmljaCAgPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBOZWdhdGVOb2RlIG9wdGltaXphdGlvbiBm
cm9tIEtKUy4gVGhlIHJlbGV2YW50IHJldmlzaW9uIGluIEtERQorICAgICAgICBpcyA2NjY3MzYu
CisKKyAgICAgICAgKiBranMvZ3JhbW1hci55OgorICAgICAgICAqIGtqcy9ub2Rlcy5jcHA6Cisg
ICAgICAgIChOdW1iZXJOb2RlOjpldmFsdWF0ZSk6CisgICAgICAgICoga2pzL25vZGVzLmg6Cisg
ICAgICAgIChLSlM6Ok5vZGU6Oik6CisgICAgICAgIChLSlM6Ok51bWJlck5vZGU6Oik6CisgICAg
ICAgICoga2pzL25vZGVzMnN0cmluZy5jcHA6CisgICAgICAgIChOdW1iZXJOb2RlOjpzdHJlYW1U
byk6CisKIDIwMDctMDgtMTAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0uCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvZ3Jh
bW1hci55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9ncmFtbWFyLnkJKHJldmlz
aW9uIDI0OTU2KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2dyYW1tYXIueQkod29ya2luZyBjb3B5
KQpAQCAtNjMsNiArNjMsNyBAQCBzdGF0aWMgYm9vbCBtYWtlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0
eU5vCiBzdGF0aWMgTm9kZSAqbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoTm9kZSAqZnVuYywgQXJndW1l
bnRzTm9kZSAqYXJncyk7CiBzdGF0aWMgTm9kZSAqbWFrZVR5cGVPZk5vZGUoTm9kZSAqZXhwcik7
CiBzdGF0aWMgTm9kZSAqbWFrZURlbGV0ZU5vZGUoTm9kZSAqZXhwcik7CitzdGF0aWMgTm9kZSAq
bWFrZU5lZ2F0ZU5vZGUoTm9kZSAqZXhwcik7CiAKICNpZiBDT01QSUxFUihNU1ZDKQogCkBAIC0z
NTksNyArMzYwLDcgQEAgVW5hcnlFeHByQ29tbW9uOgogICB8IE1JTlVTTUlOVVMgVW5hcnlFeHBy
ICAgICAgICAgICAgICAgIHsgJCQgPSBtYWtlUHJlZml4Tm9kZSgkMiwgT3BNaW51c01pbnVzKTsg
fQogICB8IEFVVE9NSU5VU01JTlVTIFVuYXJ5RXhwciAgICAgICAgICAgIHsgJCQgPSBtYWtlUHJl
Zml4Tm9kZSgkMiwgT3BNaW51c01pbnVzKTsgfQogICB8ICcrJyBVbmFyeUV4cHIgICAgICAgICAg
ICAgICAgICAgICAgIHsgJCQgPSBuZXcgVW5hcnlQbHVzTm9kZSgkMik7IH0KLSAgfCAnLScgVW5h
cnlFeHByICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3IE5lZ2F0ZU5vZGUoJDIpOyB9
CisgIHwgJy0nIFVuYXJ5RXhwciAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG1ha2VOZWdh
dGVOb2RlKCQyKTsgfQogICB8ICd+JyBVbmFyeUV4cHIgICAgICAgICAgICAgICAgICAgICAgIHsg
JCQgPSBuZXcgQml0d2lzZU5vdE5vZGUoJDIpOyB9CiAgIHwgJyEnIFVuYXJ5RXhwciAgICAgICAg
ICAgICAgICAgICAgICAgeyAkJCA9IG5ldyBMb2dpY2FsTm90Tm9kZSgkMik7IH0KIApAQCAtMTAw
Miw2ICsxMDAzLDE3IEBAIHN0YXRpYyBib29sIG1ha2VHZXR0ZXJPclNldHRlclByb3BlcnR5Tm8K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIE5vZGUqIG1ha2VOZWdhdGVOb2RlKE5vZGUg
Km4pCit7CisgICAgaWYgKG4tPmlzTnVtYmVyKCkpIHsKKyAgICAgICAgTnVtYmVyTm9kZSogbnVt
YmVyID0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KG4pOworICAgICAgICBudW1iZXItPnNldFZh
bHVlKC1udW1iZXItPnZhbHVlKCkpOworICAgICAgICByZXR1cm4gbnVtYmVyOworICAgIH0KKwor
ICAgIHJldHVybiBuZXcgTmVnYXRlTm9kZShuKTsKK30KKwogLyogY2FsbGVkIGJ5IHl5cGFyc2Ug
b24gZXJyb3IgKi8KIGludCB5eWVycm9yKGNvbnN0IGNoYXIgKikKIHsKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2tqcy9ub2RlczJzdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2tqcy9ub2RlczJzdHJpbmcuY3BwCShyZXZpc2lvbiAyNDk1NikKKysrIEphdmFTY3JpcHRDb3Jl
L2tqcy9ub2RlczJzdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNyArMTQwLDcgQEAg
dm9pZCBCb29sZWFuTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtIAogICBzIDw8ICh2YWx1ZSA/
ICJ0cnVlIiA6ICJmYWxzZSIpOwogfQogCi12b2lkIE51bWJlck5vZGU6OnN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSAmcykgY29uc3QgeyBzIDw8IHZhbHVlOyB9Cit2b2lkIE51bWJlck5vZGU6OnN0cmVh
bVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3QgeyBzIDw8IHZhbDsgfQogCiB2b2lkIFN0cmluZ05v
ZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3QKIHsKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2tqcy9ub2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL25vZGVz
LmNwcAkocmV2aXNpb24gMjQ5NTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNDksNyArMzQ5LDcgQEAgSlNWYWx1ZSAqQm9vbGVhbk5vZGU6OmV2
YWx1YXRlKEV4ZWNTdGF0ZQogCiBKU1ZhbHVlICpOdW1iZXJOb2RlOjpldmFsdWF0ZShFeGVjU3Rh
dGUgKikKIHsKLSAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsKKyAgcmV0dXJuIGpzTnVtYmVyKHZh
bCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTdHJpbmdOb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9r
anMvbm9kZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaAkocmV2
aXNpb24gMjQ5NTYpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTAwLDYgKzEwMCw3IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgdmlydHVhbCBOb2Rl
ICpub2RlSW5zaWRlQWxsUGFyZW5zKCkgS0pTX0ZBU1RfQ0FMTDsKIAorICAgIHZpcnR1YWwgYm9v
bCBpc051bWJlcigpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2
aXJ0dWFsIGJvb2wgaXNMb2NhdGlvbigpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNSZXNvbHZlTm9kZSgpIGNvbnN0IEtKU19GQVNUX0NB
TEwgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNCcmFja2V0QWNjZXNzb3JO
b2RlKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTY3LDExICsx
NjgsMTUgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgY2xhc3MgTnVtYmVyTm9kZSA6IHB1YmxpYyBO
b2RlIHsKICAgcHVibGljOgotICAgIE51bWJlck5vZGUoZG91YmxlIHYpIEtKU19GQVNUX0NBTEwg
OiB2YWx1ZSh2KSB7fQorICAgIE51bWJlck5vZGUoZG91YmxlIHYpIEtKU19GQVNUX0NBTEwgOiB2
YWwodikge30KICAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFT
VF9DQUxMOworCisgICAgdmlydHVhbCBib29sIGlzTnVtYmVyKCkgY29uc3QgS0pTX0ZBU1RfQ0FM
TCB7IHJldHVybiB0cnVlOyB9CisgICAgZG91YmxlIHZhbHVlKCkgY29uc3QgS0pTX0ZBU1RfQ0FM
TCB7IHJldHVybiB2YWw7IH0KKyAgICB2b2lkIHNldFZhbHVlKGRvdWJsZSB2KSBLSlNfRkFTVF9D
QUxMIHsgdmFsID0gdjsgfQogICBwcml2YXRlOgotICAgIGRvdWJsZSB2YWx1ZTsKKyAgICBkb3Vi
bGUgdmFsOwogICB9OwogCiAgIGNsYXNzIFN0cmluZ05vZGUgOiBwdWJsaWMgTm9kZSB7Cg==
</data>
<flag name="review"
          id="6679"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15957</attachid>
            <date>2007-08-13 23:44:45 -0700</date>
            <delta_ts>2007-08-14 11:13:56 -0700</delta_ts>
            <desc>Revised proposed patch</desc>
            <filename>unary.diff</filename>
            <type>text/plain</type>
            <size>6067</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MDE2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDctMDgtMTEgIENhbWVyb24g
WndhcmljaCAgPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBOZWdhdGVOb2RlIG9wdGltaXphdGlvbiBm
cm9tIEtKUy4gVGhlIHJlbGV2YW50IHJldmlzaW9uIGluIEtERQorICAgICAgICBpcyA2NjY3MzYu
CisKKyAgICAgICAgKiBranMvZ3JhbW1hci55OgorICAgICAgICAqIGtqcy9ub2Rlcy5jcHA6Cisg
ICAgICAgIChOdW1iZXJOb2RlOjpldmFsdWF0ZSk6CisgICAgICAgICoga2pzL25vZGVzLmg6Cisg
ICAgICAgIChLSlM6Ok5vZGU6Oik6CisgICAgICAgIChLSlM6Ok51bWJlck5vZGU6Oik6CisgICAg
ICAgICoga2pzL25vZGVzMnN0cmluZy5jcHA6CisgICAgICAgIChOdW1iZXJOb2RlOjpzdHJlYW1U
byk6CisKIDIwMDctMDgtMTAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0uCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvZ3Jh
bW1hci55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9ncmFtbWFyLnkJKHJldmlz
aW9uIDI0OTU2KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2dyYW1tYXIueQkod29ya2luZyBjb3B5
KQpAQCAtNjMsNiArNjMsNyBAQCBzdGF0aWMgYm9vbCBtYWtlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0
eU5vCiBzdGF0aWMgTm9kZSAqbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoTm9kZSAqZnVuYywgQXJndW1l
bnRzTm9kZSAqYXJncyk7CiBzdGF0aWMgTm9kZSAqbWFrZVR5cGVPZk5vZGUoTm9kZSAqZXhwcik7
CiBzdGF0aWMgTm9kZSAqbWFrZURlbGV0ZU5vZGUoTm9kZSAqZXhwcik7CitzdGF0aWMgTm9kZSAq
bWFrZU5lZ2F0ZU5vZGUoTm9kZSAqZXhwcik7CiAKICNpZiBDT01QSUxFUihNU1ZDKQogCkBAIC0z
NTksNyArMzYwLDcgQEAgVW5hcnlFeHByQ29tbW9uOgogICB8IE1JTlVTTUlOVVMgVW5hcnlFeHBy
ICAgICAgICAgICAgICAgIHsgJCQgPSBtYWtlUHJlZml4Tm9kZSgkMiwgT3BNaW51c01pbnVzKTsg
fQogICB8IEFVVE9NSU5VU01JTlVTIFVuYXJ5RXhwciAgICAgICAgICAgIHsgJCQgPSBtYWtlUHJl
Zml4Tm9kZSgkMiwgT3BNaW51c01pbnVzKTsgfQogICB8ICcrJyBVbmFyeUV4cHIgICAgICAgICAg
ICAgICAgICAgICAgIHsgJCQgPSBuZXcgVW5hcnlQbHVzTm9kZSgkMik7IH0KLSAgfCAnLScgVW5h
cnlFeHByICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3IE5lZ2F0ZU5vZGUoJDIpOyB9
CisgIHwgJy0nIFVuYXJ5RXhwciAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG1ha2VOZWdh
dGVOb2RlKCQyKTsgfQogICB8ICd+JyBVbmFyeUV4cHIgICAgICAgICAgICAgICAgICAgICAgIHsg
JCQgPSBuZXcgQml0d2lzZU5vdE5vZGUoJDIpOyB9CiAgIHwgJyEnIFVuYXJ5RXhwciAgICAgICAg
ICAgICAgICAgICAgICAgeyAkJCA9IG5ldyBMb2dpY2FsTm90Tm9kZSgkMik7IH0KIApAQCAtMTAw
Miw2ICsxMDAzLDIwIEBAIHN0YXRpYyBib29sIG1ha2VHZXR0ZXJPclNldHRlclByb3BlcnR5Tm8K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIE5vZGUqIG1ha2VOZWdhdGVOb2RlKE5vZGUg
Km4pCit7CisgICAgaWYgKG4tPmlzTnVtYmVyKCkpIHsKKyAgICAgICAgTnVtYmVyTm9kZSogbnVt
YmVyID0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KG4pOworCisgICAgICAgIGlmIChudW1iZXIt
PnZhbHVlKCkgPCAwLjApIHsKKyAgICAgICAgICAgIG51bWJlci0+c2V0VmFsdWUoLW51bWJlci0+
dmFsdWUoKSk7CisgICAgICAgICAgICByZXR1cm4gbnVtYmVyOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIG5ldyBOZWdhdGVOb2RlKG4pOworfQorCiAvKiBjYWxsZWQgYnkgeXlwYXJz
ZSBvbiBlcnJvciAqLwogaW50IHl5ZXJyb3IoY29uc3QgY2hhciAqKQogewpJbmRleDogSmF2YVNj
cmlwdENvcmUva2pzL25vZGVzMnN0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUva2pzL25vZGVzMnN0cmluZy5jcHAJKHJldmlzaW9uIDI0OTU2KQorKysgSmF2YVNjcmlwdENv
cmUva2pzL25vZGVzMnN0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBA
QCB2b2lkIEJvb2xlYW5Ob2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0gCiAgIHMgPDwgKHZhbHVl
ID8gInRydWUiIDogImZhbHNlIik7CiB9CiAKLXZvaWQgTnVtYmVyTm9kZTo6c3RyZWFtVG8oU291
cmNlU3RyZWFtICZzKSBjb25zdCB7IHMgPDwgdmFsdWU7IH0KK3ZvaWQgTnVtYmVyTm9kZTo6c3Ry
ZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdCB7IHMgPDwgdmFsOyB9CiAKIHZvaWQgU3RyaW5n
Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdAogewpJbmRleDogSmF2YVNjcmlw
dENvcmUva2pzL25vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbm9k
ZXMuY3BwCShyZXZpc2lvbiAyNDk1NikKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0OSw3ICszNDksNyBAQCBKU1ZhbHVlICpCb29sZWFuTm9kZTo6
ZXZhbHVhdGUoRXhlY1N0YXRlCiAKIEpTVmFsdWUgKk51bWJlck5vZGU6OmV2YWx1YXRlKEV4ZWNT
dGF0ZSAqKQogewotICByZXR1cm4ganNOdW1iZXIodmFsdWUpOworICByZXR1cm4ganNOdW1iZXIo
dmFsKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN0cmluZ05vZGUg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2tqcy9ub2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCShy
ZXZpc2lvbiAyNDk1NikKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDAsNiArMTAwLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICB2aXJ0dWFsIE5v
ZGUgKm5vZGVJbnNpZGVBbGxQYXJlbnMoKSBLSlNfRkFTVF9DQUxMOwogCisgICAgdmlydHVhbCBi
b29sIGlzTnVtYmVyKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBpc0xvY2F0aW9uKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1Jlc29sdmVOb2RlKCkgY29uc3QgS0pTX0ZBU1Rf
Q0FMTCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0JyYWNrZXRBY2Nlc3Nv
ck5vZGUoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0xNjcsMTEg
KzE2OCwxNSBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBjbGFzcyBOdW1iZXJOb2RlIDogcHVibGlj
IE5vZGUgewogICBwdWJsaWM6Ci0gICAgTnVtYmVyTm9kZShkb3VibGUgdikgS0pTX0ZBU1RfQ0FM
TCA6IHZhbHVlKHYpIHt9CisgICAgTnVtYmVyTm9kZShkb3VibGUgdikgS0pTX0ZBU1RfQ0FMTCA6
IHZhbCh2KSB7fQogICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19G
QVNUX0NBTEw7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNOdW1iZXIoKSBjb25zdCBLSlNfRkFTVF9D
QUxMIHsgcmV0dXJuIHRydWU7IH0KKyAgICBkb3VibGUgdmFsdWUoKSBjb25zdCBLSlNfRkFTVF9D
QUxMIHsgcmV0dXJuIHZhbDsgfQorICAgIHZvaWQgc2V0VmFsdWUoZG91YmxlIHYpIEtKU19GQVNU
X0NBTEwgeyB2YWwgPSB2OyB9CiAgIHByaXZhdGU6Ci0gICAgZG91YmxlIHZhbHVlOworICAgIGRv
dWJsZSB2YWw7CiAgIH07CiAKICAgY2xhc3MgU3RyaW5nTm9kZSA6IHB1YmxpYyBOb2RlIHsKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDI1MDY4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDctMDgtMTQgIENhbWVyb24gWndhcmljaCAgPGN3
endhcmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkcyBzZXJpYWxpemF0aW9uIHRlc3QgY2FzZXMgZm9yIE5lZ2F0ZU5v
ZGUgb3B0aW1pemF0aW9uIGZyb20gS0RFLgorCisgICAgICAgICogZmFzdC9qcy9mdW5jdGlvbi1k
ZWNvbXBpbGF0aW9uLW9wZXJhdG9ycy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9qcy9m
dW5jdGlvbi1kZWNvbXBpbGF0aW9uLW9wZXJhdG9ycy5odG1sOgorCiAyMDA3LTA4LTEzICBBbGV4
ZXkgUHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvZnVuY3Rpb24tZGVjb21waWxhdGlvbi1v
cGVyYXRvcnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMv
ZnVuY3Rpb24tZGVjb21waWxhdGlvbi1vcGVyYXRvcnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAy
NDk1NikKKysrIExheW91dFRlc3RzL2Zhc3QvanMvZnVuY3Rpb24tZGVjb21waWxhdGlvbi1vcGVy
YXRvcnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw4IEBAIFBBU1Mg
ZGVjb21waWxlZEZ1bmN0aW9uIGlzICdmdW5jdGlvbiAoKSAKIFBBU1MgZGVjb21waWxlZEZ1bmN0
aW9uIGlzICdmdW5jdGlvbiAoKSB7ICArIC0geDt9JwogUEFTUyBkZWNvbXBpbGVkRnVuY3Rpb24g
aXMgJ2Z1bmN0aW9uICgpIHsgIC0gKyB4O30nCiBQQVNTIGRlY29tcGlsZWRGdW5jdGlvbiBpcyAn
ZnVuY3Rpb24gKCkgeyAgLSAtIHg7fScKK1BBU1MgZGVjb21waWxlZEZ1bmN0aW9uIGlzICdmdW5j
dGlvbiAoKSB7ICAtIC0gMDt9JworUEFTUyBkZWNvbXBpbGVkRnVuY3Rpb24gaXMgJ2Z1bmN0aW9u
ICgpIHsgIC0gLSBOYU47fScKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVT
VCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9mdW5jdGlvbi1kZWNvbXBpbGF0
aW9uLW9wZXJhdG9ycy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvZnVu
Y3Rpb24tZGVjb21waWxhdGlvbi1vcGVyYXRvcnMuaHRtbAkocmV2aXNpb24gMjQ5NTYpCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2pzL2Z1bmN0aW9uLWRlY29tcGlsYXRpb24tb3BlcmF0b3JzLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDkgQEAKICAgICAgICAgIisgKyB4IiwKICAgICAg
ICAgIisgLSB4IiwKICAgICAgICAgIi0gKyB4IiwKLSAgICAgICAgIi0gLSB4IgorICAgICAgICAi
LSAtIHgiLAorICAgICAgICAiLSAtIDAiLAorICAgICAgICAiLSAtIE5hTiIKICAgICBdOwogCiAg
ICAgZm9yICh0ZXN0IGluIHRlc3RzKSB7Cg==
</data>
<flag name="review"
          id="6686"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15963</attachid>
            <date>2007-08-14 11:13:56 -0700</date>
            <delta_ts>2007-08-14 15:35:05 -0700</delta_ts>
            <desc>Revised proposed patch</desc>
            <filename>unary.diff</filename>
            <type>text/plain</type>
            <size>6266</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MDE2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDctMDgtMTEgIENhbWVyb24g
WndhcmljaCAgPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBOZWdhdGVOb2RlIG9wdGltaXphdGlvbiBm
cm9tIEtKUy4gVGhlIHJlbGV2YW50IHJldmlzaW9uIGluIEtERQorICAgICAgICBpcyA2NjY3MzYu
CisKKyAgICAgICAgKiBranMvZ3JhbW1hci55OgorICAgICAgICAqIGtqcy9ub2Rlcy5jcHA6Cisg
ICAgICAgIChOdW1iZXJOb2RlOjpldmFsdWF0ZSk6CisgICAgICAgICoga2pzL25vZGVzLmg6Cisg
ICAgICAgIChLSlM6Ok5vZGU6Oik6CisgICAgICAgIChLSlM6Ok51bWJlck5vZGU6Oik6CisgICAg
ICAgICoga2pzL25vZGVzMnN0cmluZy5jcHA6CisgICAgICAgIChOdW1iZXJOb2RlOjpzdHJlYW1U
byk6CisKIDIwMDctMDgtMTAgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0uCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvZ3Jh
bW1hci55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9ncmFtbWFyLnkJKHJldmlz
aW9uIDI0OTU2KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2dyYW1tYXIueQkod29ya2luZyBjb3B5
KQpAQCAtNjMsNiArNjMsNyBAQCBzdGF0aWMgYm9vbCBtYWtlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0
eU5vCiBzdGF0aWMgTm9kZSAqbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoTm9kZSAqZnVuYywgQXJndW1l
bnRzTm9kZSAqYXJncyk7CiBzdGF0aWMgTm9kZSAqbWFrZVR5cGVPZk5vZGUoTm9kZSAqZXhwcik7
CiBzdGF0aWMgTm9kZSAqbWFrZURlbGV0ZU5vZGUoTm9kZSAqZXhwcik7CitzdGF0aWMgTm9kZSAq
bWFrZU5lZ2F0ZU5vZGUoTm9kZSAqZXhwcik7CiAKICNpZiBDT01QSUxFUihNU1ZDKQogCkBAIC0z
NTksNyArMzYwLDcgQEAgVW5hcnlFeHByQ29tbW9uOgogICB8IE1JTlVTTUlOVVMgVW5hcnlFeHBy
ICAgICAgICAgICAgICAgIHsgJCQgPSBtYWtlUHJlZml4Tm9kZSgkMiwgT3BNaW51c01pbnVzKTsg
fQogICB8IEFVVE9NSU5VU01JTlVTIFVuYXJ5RXhwciAgICAgICAgICAgIHsgJCQgPSBtYWtlUHJl
Zml4Tm9kZSgkMiwgT3BNaW51c01pbnVzKTsgfQogICB8ICcrJyBVbmFyeUV4cHIgICAgICAgICAg
ICAgICAgICAgICAgIHsgJCQgPSBuZXcgVW5hcnlQbHVzTm9kZSgkMik7IH0KLSAgfCAnLScgVW5h
cnlFeHByICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3IE5lZ2F0ZU5vZGUoJDIpOyB9
CisgIHwgJy0nIFVuYXJ5RXhwciAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG1ha2VOZWdh
dGVOb2RlKCQyKTsgfQogICB8ICd+JyBVbmFyeUV4cHIgICAgICAgICAgICAgICAgICAgICAgIHsg
JCQgPSBuZXcgQml0d2lzZU5vdE5vZGUoJDIpOyB9CiAgIHwgJyEnIFVuYXJ5RXhwciAgICAgICAg
ICAgICAgICAgICAgICAgeyAkJCA9IG5ldyBMb2dpY2FsTm90Tm9kZSgkMik7IH0KIApAQCAtMTAw
Miw2ICsxMDAzLDIwIEBAIHN0YXRpYyBib29sIG1ha2VHZXR0ZXJPclNldHRlclByb3BlcnR5Tm8K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIE5vZGUqIG1ha2VOZWdhdGVOb2RlKE5vZGUg
Km4pCit7CisgICAgaWYgKG4tPmlzTnVtYmVyKCkpIHsKKyAgICAgICAgTnVtYmVyTm9kZSogbnVt
YmVyID0gc3RhdGljX2Nhc3Q8TnVtYmVyTm9kZSo+KG4pOworCisgICAgICAgIGlmIChudW1iZXIt
PnZhbHVlKCkgPiAwLjApIHsKKyAgICAgICAgICAgIG51bWJlci0+c2V0VmFsdWUoLW51bWJlci0+
dmFsdWUoKSk7CisgICAgICAgICAgICByZXR1cm4gbnVtYmVyOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIG5ldyBOZWdhdGVOb2RlKG4pOworfQorCiAvKiBjYWxsZWQgYnkgeXlwYXJz
ZSBvbiBlcnJvciAqLwogaW50IHl5ZXJyb3IoY29uc3QgY2hhciAqKQogewpJbmRleDogSmF2YVNj
cmlwdENvcmUva2pzL25vZGVzMnN0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUva2pzL25vZGVzMnN0cmluZy5jcHAJKHJldmlzaW9uIDI0OTU2KQorKysgSmF2YVNjcmlwdENv
cmUva2pzL25vZGVzMnN0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBA
QCB2b2lkIEJvb2xlYW5Ob2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0gCiAgIHMgPDwgKHZhbHVl
ID8gInRydWUiIDogImZhbHNlIik7CiB9CiAKLXZvaWQgTnVtYmVyTm9kZTo6c3RyZWFtVG8oU291
cmNlU3RyZWFtICZzKSBjb25zdCB7IHMgPDwgdmFsdWU7IH0KK3ZvaWQgTnVtYmVyTm9kZTo6c3Ry
ZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdCB7IHMgPDwgdmFsOyB9CiAKIHZvaWQgU3RyaW5n
Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdAogewpJbmRleDogSmF2YVNjcmlw
dENvcmUva2pzL25vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbm9k
ZXMuY3BwCShyZXZpc2lvbiAyNDk1NikKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0OSw3ICszNDksNyBAQCBKU1ZhbHVlICpCb29sZWFuTm9kZTo6
ZXZhbHVhdGUoRXhlY1N0YXRlCiAKIEpTVmFsdWUgKk51bWJlck5vZGU6OmV2YWx1YXRlKEV4ZWNT
dGF0ZSAqKQogewotICByZXR1cm4ganNOdW1iZXIodmFsdWUpOworICByZXR1cm4ganNOdW1iZXIo
dmFsKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN0cmluZ05vZGUg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2tqcy9ub2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCShy
ZXZpc2lvbiAyNDk1NikKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDAsNiArMTAwLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICB2aXJ0dWFsIE5v
ZGUgKm5vZGVJbnNpZGVBbGxQYXJlbnMoKSBLSlNfRkFTVF9DQUxMOwogCisgICAgdmlydHVhbCBi
b29sIGlzTnVtYmVyKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBpc0xvY2F0aW9uKCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1Jlc29sdmVOb2RlKCkgY29uc3QgS0pTX0ZBU1Rf
Q0FMTCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0JyYWNrZXRBY2Nlc3Nv
ck5vZGUoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0xNjcsMTEg
KzE2OCwxNSBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBjbGFzcyBOdW1iZXJOb2RlIDogcHVibGlj
IE5vZGUgewogICBwdWJsaWM6Ci0gICAgTnVtYmVyTm9kZShkb3VibGUgdikgS0pTX0ZBU1RfQ0FM
TCA6IHZhbHVlKHYpIHt9CisgICAgTnVtYmVyTm9kZShkb3VibGUgdikgS0pTX0ZBU1RfQ0FMTCA6
IHZhbCh2KSB7fQogICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NB
TEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19G
QVNUX0NBTEw7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNOdW1iZXIoKSBjb25zdCBLSlNfRkFTVF9D
QUxMIHsgcmV0dXJuIHRydWU7IH0KKyAgICBkb3VibGUgdmFsdWUoKSBjb25zdCBLSlNfRkFTVF9D
QUxMIHsgcmV0dXJuIHZhbDsgfQorICAgIHZvaWQgc2V0VmFsdWUoZG91YmxlIHYpIEtKU19GQVNU
X0NBTEwgeyB2YWwgPSB2OyB9CiAgIHByaXZhdGU6Ci0gICAgZG91YmxlIHZhbHVlOworICAgIGRv
dWJsZSB2YWw7CiAgIH07CiAKICAgY2xhc3MgU3RyaW5nTm9kZSA6IHB1YmxpYyBOb2RlIHsKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDI1MDY4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDctMDgtMTQgIENhbWVyb24gWndhcmljaCAgPGN3
endhcmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkcyBzZXJpYWxpemF0aW9uIHRlc3QgY2FzZXMgZm9yIE5lZ2F0ZU5v
ZGUgb3B0aW1pemF0aW9uIGZyb20gS0RFLgorCisgICAgICAgICogZmFzdC9qcy9mdW5jdGlvbi1k
ZWNvbXBpbGF0aW9uLW9wZXJhdG9ycy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9qcy9m
dW5jdGlvbi1kZWNvbXBpbGF0aW9uLW9wZXJhdG9ycy5odG1sOgorCiAyMDA3LTA4LTEzICBBbGV4
ZXkgUHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvZnVuY3Rpb24tZGVjb21waWxhdGlvbi1v
cGVyYXRvcnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMv
ZnVuY3Rpb24tZGVjb21waWxhdGlvbi1vcGVyYXRvcnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAy
NDk1NikKKysrIExheW91dFRlc3RzL2Zhc3QvanMvZnVuY3Rpb24tZGVjb21waWxhdGlvbi1vcGVy
YXRvcnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSwxMSBAQCBQQVNT
IGRlY29tcGlsZWRGdW5jdGlvbiBpcyAnZnVuY3Rpb24gKCkgCiBQQVNTIGRlY29tcGlsZWRGdW5j
dGlvbiBpcyAnZnVuY3Rpb24gKCkgeyAgKyAtIHg7fScKIFBBU1MgZGVjb21waWxlZEZ1bmN0aW9u
IGlzICdmdW5jdGlvbiAoKSB7ICAtICsgeDt9JwogUEFTUyBkZWNvbXBpbGVkRnVuY3Rpb24gaXMg
J2Z1bmN0aW9uICgpIHsgIC0gLSB4O30nCitQQVNTIGRlY29tcGlsZWRGdW5jdGlvbiBpcyAnZnVu
Y3Rpb24gKCkgeyAgMTt9JworUEFTUyBkZWNvbXBpbGVkRnVuY3Rpb24gaXMgJ2Z1bmN0aW9uICgp
IHsgIC0xO30nCitQQVNTIGRlY29tcGlsZWRGdW5jdGlvbiBpcyAnZnVuY3Rpb24gKCkgeyAgLSAt
MTt9JworUEFTUyBkZWNvbXBpbGVkRnVuY3Rpb24gaXMgJ2Z1bmN0aW9uICgpIHsgIC0gLSAwO30n
CitQQVNTIGRlY29tcGlsZWRGdW5jdGlvbiBpcyAnZnVuY3Rpb24gKCkgeyAgLSAtIE5hTjt9Jwog
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2pzL2Z1bmN0aW9uLWRlY29tcGlsYXRpb24tb3BlcmF0b3JzLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9mdW5jdGlvbi1kZWNvbXBpbGF0aW9u
LW9wZXJhdG9ycy5odG1sCShyZXZpc2lvbiAyNDk1NikKKysrIExheW91dFRlc3RzL2Zhc3QvanMv
ZnVuY3Rpb24tZGVjb21waWxhdGlvbi1vcGVyYXRvcnMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
NTcsNyArNTcsMTIgQEAKICAgICAgICAgIisgKyB4IiwKICAgICAgICAgIisgLSB4IiwKICAgICAg
ICAgIi0gKyB4IiwKLSAgICAgICAgIi0gLSB4IgorICAgICAgICAiLSAtIHgiLAorICAgICAgICAi
MSIsCisgICAgICAgICItMSIsCisgICAgICAgICItIC0xIiwKKyAgICAgICAgIi0gLSAwIiwKKyAg
ICAgICAgIi0gLSBOYU4iCiAgICAgXTsKIAogICAgIGZvciAodGVzdCBpbiB0ZXN0cykgewo=
</data>
<flag name="review"
          id="6691"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>