<?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>20340</bug_id>
          
          <creation_ts>2008-08-10 01:27:51 -0700</creation_ts>
          <short_desc>SegmentedVector segment allocations can lead to unsafe use of temporary registers</short_desc>
          <delta_ts>2008-12-01 23:25:02 -0800</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>528+ (Nightly build)</version>
          <rep_platform>All</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Cameron Zwarich (cpst)">zwarich</reporter>
          <assigned_to name="Cameron Zwarich (cpst)">zwarich</assigned_to>
          <cc>chrisb</cc>
    
    <cc>ggaren</cc>
    
    <cc>mjs</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>88172</commentid>
    <comment_count>0</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-08-10 01:27:51 -0700</bug_when>
    <thetext>In many emitCode() methods for Node subclasses, there is code that looks like this:

RegisterID* temp = ...
return generator.emitOpcode(generator.finalDestination(dst), temp, ...);

If temp points at the first RegisterID in a segment of the SegmentedVector containing the RegisterIDs, then generator.finalDestination(dst) may free that RegisterID, deallocate the segment, then allocate a new segment and return the first RegisterID in that segment. However, temp is still passed as an argument to generator.emitOpcode(), so this is potentially unsafe if the new segment is not allocated in the same place as the old segment.

This was first mentioned by Chris Brichford on the webkit-dev mailing list: https://lists.webkit.org/pipermail/webkit-dev/2008-July/004533.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88174</commentid>
    <comment_count>1</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-08-10 04:49:14 -0700</bug_when>
    <thetext>The natural fix for this isn&apos;t very hard, but it is a bit ugly. In any correct emitCode() method, we will only have one unref&apos;d temporary by the returning call to emit an opcode. Otherwise, there is an even worse correctness issue. In this case, the call to generator.finalDestination() can either take a second argument or leave it blank.

If it is left blank, then we could simply pass the unref&apos;d temporary as the second argument.

If there is an argument, then it is either the temporary in question (in which case we are okay) or a ref&apos;d register, which might not be a temporary. In this case, it seems we could just replace the second argument with our unref&apos;d temporary and we&apos;d be okay.

This should work, but the style seems sub-optimal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88175</commentid>
    <comment_count>2</comment_count>
      <attachid>22721</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-08-10 05:07:41 -0700</bug_when>
    <thetext>Created attachment 22721
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88176</commentid>
    <comment_count>3</comment_count>
      <attachid>22721</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-08-10 05:33:42 -0700</bug_when>
    <thetext>Comment on attachment 22721
Proposed patch

This patch can cause more temporaries to be allocated than necessary, so I will try a slightly different approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88177</commentid>
    <comment_count>4</comment_count>
      <attachid>22722</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-08-10 07:37:36 -0700</bug_when>
    <thetext>Created attachment 22722
Revised proposed patch

This patch actually slightly improves the codegen of SunSpider, using one or two fewer temporaries for some functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88184</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-08-10 14:57:17 -0700</bug_when>
    <thetext>Is there a way to test this condition?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88187</commentid>
    <comment_count>6</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-08-10 15:52:46 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Is there a way to test this condition?

I was thinking about that myself. We could add some debugging machinery to SegmentedVector and RegisterID to allow tagging RegisterIDs by the segment in which they are allocated, just incrementing a counter each time. Other than that, I don&apos;t think there is a way to consistently expose this flaw.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88206</commentid>
    <comment_count>7</comment_count>
      <attachid>22722</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-08-11 00:53:38 -0700</bug_when>
    <thetext>Comment on attachment 22722
Revised proposed patch

I&apos;ll clear the review flag on this so I can implement some debug code for SegmentedVector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88227</commentid>
    <comment_count>8</comment_count>
      <attachid>22729</attachid>
    <who name="Chris Brichford">chrisb</who>
    <bug_when>2008-08-11 11:26:21 -0700</bug_when>
    <thetext>Created attachment 22729
Diff showing alternative fix

Attaching a diff showing an alternative fix.   Changes makeNewTemporary such that it never shrinks the SegmentedVector of RegisterID&apos;s.  The attached diff also contains a fix for a seperate bug.  The relevant changes for this bug are in CodeGenerator::makeNewTemporary and the various CodeGenerator constructors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88272</commentid>
    <comment_count>9</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-08-11 19:54:31 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Created an attachment (id=22729) [edit]
&gt; Diff showing alternative fix
&gt; 
&gt; Attaching a diff showing an alternative fix.   Changes makeNewTemporary such
&gt; that it never shrinks the SegmentedVector of RegisterID&apos;s.  The attached diff
&gt; also contains a fix for a seperate bug.  The relevant changes for this bug are
&gt; in CodeGenerator::makeNewTemporary and the various CodeGenerator constructors.

That&apos;s a decent idea. I don&apos;t really like the idea of doing it in an ad-hoc way in CodeGenerator, so I&apos;ll modify SegmentedVector never shrink. Nothing ever explicitly shrinks one in the current code.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100361</commentid>
    <comment_count>10</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-11-25 18:15:26 -0800</bug_when>
    <thetext>&lt;rdar://problem/6402032&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100679</commentid>
    <comment_count>11</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-11-29 00:37:56 -0800</bug_when>
    <thetext>I am reassigning this to myself to match Radar. There are only two forms of resizing currently done for a SegmentedVector:

- the BytecodeGenerator reserves capacity for m_globals and m_parameters. We can just add a reserveCapacity() method to SegmentedVector. As a side note, this latter one should really be a Vector with a smaller capacity, as we do not pass out any parameter registers before we know the number of parameters.

- the Lexer now shrinks its identifier SegmentedVector to 0 in Lexer::clear(). We don&apos;t need to handle arbitrary shrinkage, so a clear() method makes more sense.

I will remove resize() as a public method and add these two in one patch, then in a followup patch I will actually make the change that causes SegmentedVector to never shrink, which should actually be fairly easy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100680</commentid>
    <comment_count>12</comment_count>
      <attachid>25587</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-11-29 01:05:22 -0800</bug_when>
    <thetext>Created attachment 25587
Proposed patch to change interface of SegmentedVector</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100789</commentid>
    <comment_count>13</comment_count>
      <attachid>25587</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-11-30 14:14:50 -0800</bug_when>
    <thetext>Comment on attachment 25587
Proposed patch to change interface of SegmentedVector

&gt; +        void clear()
&gt; +        {
&gt; +            if (m_size != 0)
&gt; +                shrink(0);

It seem kind of silly to me to keep all the shrink logic just to handle shrink(0).  We should either move the shrink logic that we need to clear.

Otherwise, r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100807</commentid>
    <comment_count>14</comment_count>
      <attachid>25587</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-12-01 01:09:08 -0800</bug_when>
    <thetext>Comment on attachment 25587
Proposed patch to change interface of SegmentedVector

Landed in r38856. Sam, I addressed your comment, and I also did the same thing for grow() as I did for shrink(), since grow() is no longer used anywhere else.

Clearing review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100813</commentid>
    <comment_count>15</comment_count>
      <attachid>25622</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-12-01 03:17:50 -0800</bug_when>
    <thetext>Created attachment 25622
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100982</commentid>
    <comment_count>16</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-12-01 23:25:02 -0800</bug_when>
    <thetext>Landed in r38887.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22721</attachid>
            <date>2008-08-10 05:07:41 -0700</date>
            <delta_ts>2008-08-10 07:37:36 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>temps.diff</filename>
            <type>text/plain</type>
            <size>14724</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM1NjU3
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMDgtMDgt
MTAgIENhbWVyb24gWndhcmljaCAgPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDIwMzQwOiBTZWdtZW50
ZWRWZWN0b3Igc2VnbWVudCBhbGxvY2F0aW9ucyBjYW4gbGVhZCB0byB1bnNhZmUgdXNlIG9mIHRl
bXBvcmFyeSByZWdpc3RlcnMKKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDM0MD4KKworICAgICAgICBDaGFuZ2UgZW1pdENvZGUoKSBtZXRob2RzIG9u
IE5vZGUgc3ViY2xhc3NlcyB0byBwYXNzIGFueSB1bnJlZidkCisgICAgICAgIHRlbXBvcmFyaWVz
IHRvIENvZGVHZW5lcmF0b3I6OmZpbmFsRGVzdGluYXRpb24oKSwgc28gdGhhdCB0aGV5IGFyZSB1
c2VkCisgICAgICAgIGluc3RlYWQgb2YgYSBuZXdseSBnZW5lcmF0ZWQgdGVtcG9yYXJ5LiBXZSBu
ZWVkIHRvIGRvIHRoaXMgYmVjYXVzZQorICAgICAgICBnZW5lcmF0aW5nIGEgbmV3IHRlbXBvcmFy
eSBjb3VsZCBkZWFsbG9jYXRlIGFuZCBhbGxvY2F0ZSBhIHNlZ21lbnQgaW4KKyAgICAgICAgdGhl
IFNlZ21lbnRlZFZlY3RvciBvZiBSZWdpc3RlcklEcywgd2hpY2ggbWlnaHQgbWF5IGxlYXZlIGFu
IHVucmVmJ2QKKyAgICAgICAgdGVtcG9yYXJ5IHBvaW50aW5nIHRvIGFuIGdhcmJhZ2UgUmVnaXN0
ZXJJRC4KKworICAgICAgICAqIGtqcy9ub2Rlcy5jcHA6CisgICAgICAgIChLSlM6OkJyYWNrZXRB
Y2Nlc3Nvck5vZGU6OmVtaXRDb2RlKToKKyAgICAgICAgKEtKUzo6RG90QWNjZXNzb3JOb2RlOjpl
bWl0Q29kZSk6CisgICAgICAgIChLSlM6Ok5ld0V4cHJOb2RlOjplbWl0Q29kZSk6CisgICAgICAg
IChLSlM6OkV2YWxGdW5jdGlvbkNhbGxOb2RlOjplbWl0Q29kZSk6CisgICAgICAgIChLSlM6OkZ1
bmN0aW9uQ2FsbFZhbHVlTm9kZTo6ZW1pdENvZGUpOgorICAgICAgICAoS0pTOjpGdW5jdGlvbkNh
bGxSZXNvbHZlTm9kZTo6ZW1pdENvZGUpOgorICAgICAgICAoS0pTOjpGdW5jdGlvbkNhbGxCcmFj
a2V0Tm9kZTo6ZW1pdENvZGUpOgorICAgICAgICAoS0pTOjpGdW5jdGlvbkNhbGxEb3ROb2RlOjpl
bWl0Q29kZSk6CisgICAgICAgIChLSlM6OkRlbGV0ZUJyYWNrZXROb2RlOjplbWl0Q29kZSk6Cisg
ICAgICAgIChLSlM6OkRlbGV0ZURvdE5vZGU6OmVtaXRDb2RlKToKKyAgICAgICAgKEtKUzo6VHlw
ZU9mVmFsdWVOb2RlOjplbWl0Q29kZSk6CisgICAgICAgIChLSlM6OlVuYXJ5T3BOb2RlOjplbWl0
Q29kZSk6CisgICAgICAgIChLSlM6OkJpbmFyeU9wTm9kZTo6ZW1pdENvZGUpOgorICAgICAgICAo
S0pTOjpSZXZlcnNlQmluYXJ5T3BOb2RlOjplbWl0Q29kZSk6CisgICAgICAgIChLSlM6OlRocm93
YWJsZUJpbmFyeU9wTm9kZTo6ZW1pdENvZGUpOgorICAgICAgICAoS0pTOjpSZWFkTW9kaWZ5UmVz
b2x2ZU5vZGU6OmVtaXRDb2RlKToKKyAgICAgICAgKEtKUzo6UmVhZE1vZGlmeURvdE5vZGU6OmVt
aXRDb2RlKToKKyAgICAgICAgKEtKUzo6UmVhZE1vZGlmeUJyYWNrZXROb2RlOjplbWl0Q29kZSk6
CisKIDIwMDgtMDgtMDkgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBranMvbm9kZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtqcy9ub2Rlcy5jcHAJKHJldmlzaW9uIDM1NjU3KQorKysga2pzL25vZGVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgxLDcgKzM4MSw3IEBAIFJlZ2lzdGVySUQqIEJyYWNrZXRB
Y2Nlc3Nvck5vZGU6OmVtaXRDb2QKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVy
YXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShtX2Jhc2UuZ2V0KCksIG1fc3Vic2NyaXB0SGFz
QXNzaWdubWVudHMsIG1fc3Vic2NyaXB0LT5pc1B1cmUoZ2VuZXJhdG9yKSk7CiAgICAgUmVnaXN0
ZXJJRCogcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQuZ2V0KCkpOwog
ICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obV9kaXZvdCwgbV9zdGFydE9mZnNldCwg
bV9lbmRPZmZzZXQpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIHByb3BlcnR5KTsKKyAgICByZXR1
cm4gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3Qs
IHByb3BlcnR5KSwgYmFzZS5nZXQoKSwgcHJvcGVydHkpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gRG90QWNjZXNzb3JOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCkBAIC0zOTAsNyArMzkwLDcgQEAgUmVnaXN0ZXJJRCogRG90QWNjZXNzb3JOb2Rl
OjplbWl0Q29kZShDbwogewogICAgIFJlZ2lzdGVySUQqIGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5v
ZGUobV9iYXNlLmdldCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG1fZGl2
b3QsIG1fc3RhcnRPZmZzZXQsIG1fZW5kT2Zmc2V0KTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVt
aXRHZXRCeUlkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGJhc2UsIG1faWRlbnQp
OworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGlu
YXRpb24oZHN0LCBiYXNlKSwgYmFzZSwgbV9pZGVudCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBBcmd1bWVudExpc3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCkBAIC00MDcsNyArNDA3LDcgQEAgUmVnaXN0ZXJJRCogTmV3RXhwck5vZGU6OmVtaXRD
b2RlKENvZGVHZQogewogICAgIFJlZ2lzdGVySUQqIHIwID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1f
ZXhwci5nZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhtX2Rpdm90LCBt
X3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q29u
c3RydWN0KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHIwLCBtX2FyZ3MuZ2V0KCkp
OworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENvbnN0cnVjdChnZW5lcmF0b3IuZmluYWxEZXN0
aW5hdGlvbihkc3QsIHIwKSwgcjAsIG1fYXJncy5nZXQoKSk7CiB9CiAKIFJlZ2lzdGVySUQqIEV2
YWxGdW5jdGlvbkNhbGxOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
Z2lzdGVySUQqIGRzdCkKQEAgLTQxNSwxMyArNDE1LDEzIEBAIFJlZ2lzdGVySUQqIEV2YWxGdW5j
dGlvbkNhbGxOb2RlOjplbWl0Q28KICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVy
YXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKICAgICBSZWdpc3RlcklEKiBmdW5jID0gZ2VuZXJh
dG9yLm5ld1RlbXBvcmFyeSgpOwogICAgIGdlbmVyYXRvci5lbWl0UmVzb2x2ZVdpdGhCYXNlKGJh
c2UuZ2V0KCksIGZ1bmMsIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuZXZhbCk7Ci0gICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0Q2FsbEV2YWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0
LCBiYXNlLmdldCgpKSwgZnVuYywgYmFzZS5nZXQoKSwgbV9hcmdzLmdldCgpLCBtX2Rpdm90LCBt
X3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2Fs
bEV2YWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jKSwgZnVuYywgYmFzZS5n
ZXQoKSwgbV9hcmdzLmdldCgpLCBtX2Rpdm90LCBtX3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7
CiB9CiAKIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6ZW1pdENvZGUoQ29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVnaXN0ZXJJRCog
ZnVuYyA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIuZ2V0KCkpOwotICAgIHJldHVybiBnZW5l
cmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgZnVuYywgMCwg
bV9hcmdzLmdldCgpLCBtX2Rpdm90LCBtX3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7CisgICAg
cmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3Qs
IGZ1bmMpLCBmdW5jLCAwLCBtX2FyZ3MuZ2V0KCksIG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1f
ZW5kT2Zmc2V0KTsKIH0KIAogUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmVt
aXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtNDMz
LDcgKzQzMyw3IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWkKICAg
ICBzaXplX3QgZGVwdGggPSAwOwogICAgIGlmIChnZW5lcmF0b3IuZmluZFNjb3BlZFByb3BlcnR5
KG1faWRlbnQsIGluZGV4LCBkZXB0aCwgZmFsc2UpICYmIGluZGV4ICE9IG1pc3NpbmdTeW1ib2xN
YXJrZXIoKSkgewogICAgICAgICBSZWdpc3RlcklEKiBmdW5jID0gZ2VuZXJhdG9yLmVtaXRHZXRT
Y29wZWRWYXIoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBkZXB0aCwgaW5kZXgpOwotICAgICAg
ICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRz
dCksIGZ1bmMsIDAsIG1fYXJncy5nZXQoKSwgbV9kaXZvdCwgbV9zdGFydE9mZnNldCwgbV9lbmRP
ZmZzZXQpOworICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5h
bERlc3RpbmF0aW9uKGRzdCwgZnVuYyksIGZ1bmMsIDAsIG1fYXJncy5nZXQoKSwgbV9kaXZvdCwg
bV9zdGFydE9mZnNldCwgbV9lbmRPZmZzZXQpOwogICAgIH0KIAogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBiYXNlID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOwpAQCAtNDQxLDcgKzQ0
MSw3IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWkKICAgICBpbnQg
aWRlbnRpZmllclN0YXJ0ID0gbV9kaXZvdCAtIG1fc3RhcnRPZmZzZXQ7CiAgICAgZ2VuZXJhdG9y
LmVtaXRFeHByZXNzaW9uSW5mbyhpZGVudGlmaWVyU3RhcnQgKyBtX2lkZW50LnNpemUoKSwgbV9p
ZGVudC5zaXplKCksIDApOwogICAgIGdlbmVyYXRvci5lbWl0UmVzb2x2ZUZ1bmN0aW9uKGJhc2Uu
Z2V0KCksIGZ1bmMsIG1faWRlbnQpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBiYXNlLmdldCgpKSwgZnVuYywgYmFzZS5nZXQo
KSwgbV9hcmdzLmdldCgpLCBtX2Rpdm90LCBtX3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7Cisg
ICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihk
c3QsIGZ1bmMpLCBmdW5jLCBiYXNlLmdldCgpLCBtX2FyZ3MuZ2V0KCksIG1fZGl2b3QsIG1fc3Rh
cnRPZmZzZXQsIG1fZW5kT2Zmc2V0KTsKIH0KIAogUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsQnJh
Y2tldE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCog
ZHN0KQpAQCAtNDUwLDcgKzQ1MCw3IEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbEJyYWNrZXRO
b2RlOjplbWkKICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZSht
X3N1YnNjcmlwdC5nZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhtX2Rp
dm90IC0gbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQsIG1fc3RhcnRPZmZzZXQgLSBtX3N1YmV4
cHJlc3Npb25EaXZvdE9mZnNldCwgbV9zdWJleHByZXNzaW9uRW5kT2Zmc2V0KTsKICAgICBSZWdp
c3RlcklEKiBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZ2VuZXJhdG9yLm5ld1Rl
bXBvcmFyeSgpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGJhc2UuZ2V0KCkpLCBmdW5j
dGlvbiwgYmFzZS5nZXQoKSwgbV9hcmdzLmdldCgpLCBtX2Rpdm90LCBtX3N0YXJ0T2Zmc2V0LCBt
X2VuZE9mZnNldCk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmlu
YWxEZXN0aW5hdGlvbihkc3QsIGZ1bmN0aW9uKSwgZnVuY3Rpb24sIGJhc2UuZ2V0KCksIG1fYXJn
cy5nZXQoKSwgbV9kaXZvdCwgbV9zdGFydE9mZnNldCwgbV9lbmRPZmZzZXQpOwogfQogCiBSZWdp
c3RlcklEKiBGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKQEAgLTQ1OCw3ICs0NTgsNyBAQCBSZWdpc3RlcklEKiBG
dW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Q29kCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2Ug
PSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlLmdldCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKG1fZGl2b3QgLSBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldCwgbV9zdGFy
dE9mZnNldCAtIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0LCBtX3N1YmV4cHJlc3Npb25FbmRP
ZmZzZXQpOwogICAgIFJlZ2lzdGVySUQqIGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlk
KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgYmFzZS5nZXQoKSwgbV9pZGVudCk7Ci0gICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGJh
c2UuZ2V0KCkpLCBmdW5jdGlvbiwgYmFzZS5nZXQoKSwgbV9hcmdzLmdldCgpLCBtX2Rpdm90LCBt
X3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2Fs
bChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmN0aW9uKSwgZnVuY3Rpb24sIGJh
c2UuZ2V0KCksIG1fYXJncy5nZXQoKSwgbV9kaXZvdCwgbV9zdGFydE9mZnNldCwgbV9lbmRPZmZz
ZXQpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUG9zdGZpeFJlc29s
dmVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTU4NywxMCArNTg3
LDEwIEBAIFJlZ2lzdGVySUQqIERlbGV0ZVJlc29sdmVOb2RlOjplbWl0Q29kZSgKIFJlZ2lzdGVy
SUQqIERlbGV0ZUJyYWNrZXROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0
b3IuZW1pdE5vZGUobV9iYXNlLmdldCgpKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjEgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQuZ2V0KCkpOworICAgIFJlZ2lzdGVySUQqIHIx
ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0LmdldCgpKTsKIAogICAgIGdlbmVyYXRv
ci5lbWl0RXhwcmVzc2lvbkluZm8obV9kaXZvdCwgbV9zdGFydE9mZnNldCwgbV9lbmRPZmZzZXQp
OwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5VmFsKGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uKGRzdCksIHIwLmdldCgpLCByMS5nZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRv
ci5lbWl0RGVsZXRlQnlWYWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCByMSksIHIw
LmdldCgpLCByMSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWxl
dGVEb3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02MDAsNyAr
NjAwLDcgQEAgUmVnaXN0ZXJJRCogRGVsZXRlRG90Tm9kZTo6ZW1pdENvZGUoQ29kZQogICAgIFJl
Z2lzdGVySUQqIHIwID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZS5nZXQoKSk7CiAKICAgICBn
ZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1fZW5k
T2Zmc2V0KTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeUlkKGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCksIHIwLCBtX2lkZW50KTsKKyAgICByZXR1cm4gZ2VuZXJhdG9y
LmVtaXREZWxldGVCeUlkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgcjApLCByMCwg
bV9pZGVudCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWxldGVW
YWx1ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTY1MCw4ICs2
NTAsOCBAQCBSZWdpc3RlcklEKiBUeXBlT2ZWYWx1ZU5vZGU6OmVtaXRDb2RlKENvCiAgICAgICAg
IGdlbmVyYXRvci5lbWl0Tm9kZShpZ25vcmVkUmVzdWx0KCksIG1fZXhwci5nZXQoKSk7CiAgICAg
ICAgIHJldHVybiAwOwogICAgIH0KLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjID0gZ2VuZXJh
dG9yLmVtaXROb2RlKG1fZXhwci5nZXQoKSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0VHlw
ZU9mKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHNyYy5nZXQoKSk7CisgICAgUmVn
aXN0ZXJJRCogc3JjID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwci5nZXQoKSk7CisgICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0VHlwZU9mKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwg
c3JjKSwgc3JjKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByZWZp
eFJlc29sdmVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTczNiw3
ICs3MzYsNyBAQCBSZWdpc3RlcklEKiBQcmVmaXhFcnJvck5vZGU6OmVtaXRDb2RlKENvCiBSZWdp
c3RlcklEKiBVbmFyeU9wTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBS
ZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVnaXN0ZXJJRCogc3JjID0gZ2VuZXJhdG9yLmVtaXRO
b2RlKG1fZXhwci5nZXQoKSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0VW5hcnlPcChvcGNv
ZGUoKSwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgc3JjKTsKKyAgICByZXR1cm4g
Z2VuZXJhdG9yLmVtaXRVbmFyeU9wKG9wY29kZSgpLCBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlv
bihkc3QsIHNyYyksIHNyYyk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBCaW5hcnkgT3BlcmF0aW9uIE5vZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCkBAIC03NDUsMTQgKzc0NSwxNCBAQCBSZWdpc3RlcklEKiBCaW5hcnlPcE5vZGU6OmVtaXRD
b2RlKENvZGVHCiB7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5lcmF0b3IuZW1p
dE5vZGVGb3JMZWZ0SGFuZFNpZGUobV90ZXJtMS5nZXQoKSwgbV9yaWdodEhhc0Fzc2lnbm1lbnRz
LCBtX3Rlcm0yLT5pc1B1cmUoZ2VuZXJhdG9yKSk7CiAgICAgUmVnaXN0ZXJJRCogc3JjMiA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX3Rlcm0yLmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVt
aXRCaW5hcnlPcChvcGNvZGUoKSwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMx
LmdldCgpKSwgc3JjMS5nZXQoKSwgc3JjMik7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Qmlu
YXJ5T3Aob3Bjb2RlKCksIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMiksIHNy
YzEuZ2V0KCksIHNyYzIpOwogfQogCiBSZWdpc3RlcklEKiBSZXZlcnNlQmluYXJ5T3BOb2RlOjpl
bWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjMSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRIYW5k
U2lkZShtX3Rlcm0xLmdldCgpLCBtX3JpZ2h0SGFzQXNzaWdubWVudHMsIG1fdGVybTItPmlzUHVy
ZShnZW5lcmF0b3IpKTsKICAgICBSZWdpc3RlcklEKiBzcmMyID0gZ2VuZXJhdG9yLmVtaXROb2Rl
KG1fdGVybTIuZ2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEJpbmFyeU9wKG9wY29k
ZSgpLCBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMyLCBz
cmMxLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRCaW5hcnlPcChvcGNvZGUoKSwg
Z2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMyKSwgc3JjMiwgc3JjMS5nZXQoKSk7
CiB9CiAKIFJlZ2lzdGVySUQqIFRocm93YWJsZUJpbmFyeU9wTm9kZTo6ZW1pdENvZGUoQ29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCkBAIC03NjAsNyArNzYwLDcgQEAg
UmVnaXN0ZXJJRCogVGhyb3dhYmxlQmluYXJ5T3BOb2RlOjplbWl0QwogICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBzcmMxID0gZ2VuZXJhdG9yLmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKG1fdGVybTEu
Z2V0KCksIG1fcmlnaHRIYXNBc3NpZ25tZW50cywgbV90ZXJtMi0+aXNQdXJlKGdlbmVyYXRvcikp
OwogICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV90ZXJtMi5nZXQo
KSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhtX2Rpdm90LCBtX3N0YXJ0T2Zm
c2V0LCBtX2VuZE9mZnNldCk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0QmluYXJ5T3Aob3Bj
b2RlKCksIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSksIHNyYzEu
Z2V0KCksIHNyYzIpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEJpbmFyeU9wKG9wY29kZSgp
LCBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzIpLCBzcmMxLmdldCgpLCBzcmMy
KTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJpbmFyeSBMb2dpY2Fs
IE5vZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTg1Niw3ICs4NTYsNyBAQCBS
ZWdpc3RlcklEKiBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OmVtaXRDCiAgICAgaWYgKFJlZ2lzdGVy
SUQqIGxvY2FsID0gZ2VuZXJhdG9yLnJlZ2lzdGVyRm9yTG9jYWwobV9pZGVudCkpIHsKICAgICAg
ICAgaWYgKGdlbmVyYXRvci5pc0xvY2FsQ29uc3RhbnQobV9pZGVudCkpIHsKICAgICAgICAgICAg
IFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9yaWdodC5nZXQoKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdlbmVyYXRvciwgZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgbG9jYWwsIHNyYzIsIG1fb3BlcmF0b3IpOwor
ICAgICAgICAgICAgcmV0dXJuIGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIGdl
bmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMiksIGxvY2FsLCBzcmMyLCBtX29wZXJh
dG9yKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGdlbmVyYXRvci5sZWZ0SGFu
ZFNpZGVOZWVkc0NvcHkobV9yaWdodEhhc0Fzc2lnbm1lbnRzLCBtX3JpZ2h0LT5pc1B1cmUoZ2Vu
ZXJhdG9yKSkpIHsKQEAgLTg3OCw3ICs4NzgsNyBAQCBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5UmVz
b2x2ZU5vZGU6OmVtaXRDCiAgICAgaWYgKGdlbmVyYXRvci5maW5kU2NvcGVkUHJvcGVydHkobV9p
ZGVudCwgaW5kZXgsIGRlcHRoLCB0cnVlKSAmJiBpbmRleCAhPSBtaXNzaW5nU3ltYm9sTWFya2Vy
KCkpIHsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5lcmF0b3IuZW1pdEdl
dFNjb3BlZFZhcihnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGRlcHRoLCBpbmRleCk7
CiAgICAgICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9yaWdodC5n
ZXQoKSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIHJlc3VsdCA9IGVtaXRSZWFkTW9kaWZ5QXNzaWdu
bWVudChnZW5lcmF0b3IsIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQo
KSksIHNyYzEuZ2V0KCksIHNyYzIsIG1fb3BlcmF0b3IpOworICAgICAgICBSZWdpc3RlcklEKiBy
ZXN1bHQgPSBlbWl0UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJhdG9yLCBnZW5lcmF0b3IuZmlu
YWxEZXN0aW5hdGlvbihkc3QsIHNyYzIpLCBzcmMxLmdldCgpLCBzcmMyLCBtX29wZXJhdG9yKTsK
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRTY29wZWRWYXIoZGVwdGgsIGluZGV4LCByZXN1bHQp
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTg4OCw3ICs4ODgsNyBAQCBSZWdp
c3RlcklEKiBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OmVtaXRDCiAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVXaXRoQmFzZShnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCksIHNyYzEuZ2V0KCksIG1faWRlbnQpOwogICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUobV9yaWdodC5nZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHBy
ZXNzaW9uSW5mbyhtX2Rpdm90LCBtX3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7Ci0gICAgUmVn
aXN0ZXJJRCogcmVzdWx0ID0gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdlbmVyYXRvciwgZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQoKSwgc3Jj
MiwgbV9vcGVyYXRvcik7CisgICAgUmVnaXN0ZXJJRCogcmVzdWx0ID0gZW1pdFJlYWRNb2RpZnlB
c3NpZ25tZW50KGdlbmVyYXRvciwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMy
KSwgc3JjMS5nZXQoKSwgc3JjMiwgbV9vcGVyYXRvcik7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50LCByZXN1bHQpOwogfQogCkBAIC05NDMsNyAr
OTQzLDcgQEAgUmVnaXN0ZXJJRCogUmVhZE1vZGlmeURvdE5vZGU6OmVtaXRDb2RlKAogICAgIGdl
bmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obV9kaXZvdCAtIG1fc3ViZXhwcmVzc2lvbkRpdm90
T2Zmc2V0LCBtX3N0YXJ0T2Zmc2V0IC0gbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQsIG1fc3Vi
ZXhwcmVzc2lvbkVuZE9mZnNldCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2Vu
ZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5n
ZXQoKSwgbV9pZGVudCk7CiAgICAgUmVnaXN0ZXJJRCogY2hhbmdlID0gZ2VuZXJhdG9yLmVtaXRO
b2RlKG1fcmlnaHQuZ2V0KCkpOwotICAgIFJlZ2lzdGVySUQqIHVwZGF0ZWRWYWx1ZSA9IGVtaXRS
ZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9u
KGRzdCwgdmFsdWUuZ2V0KCkpLCB2YWx1ZS5nZXQoKSwgY2hhbmdlLCBtX29wZXJhdG9yKTsKKyAg
ICBSZWdpc3RlcklEKiB1cGRhdGVkVmFsdWUgPSBlbWl0UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2Vu
ZXJhdG9yLCBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGNoYW5nZSksIHZhbHVlLmdl
dCgpLCBjaGFuZ2UsIG1fb3BlcmF0b3IpOwogCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9u
SW5mbyhtX2Rpdm90LCBtX3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7CiAgICAgcmV0dXJuIGdl
bmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50LCB1cGRhdGVkVmFsdWUpOwpA
QCAtOTc4LDcgKzk3OCw3IEBAIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlCcmFja2V0Tm9kZTo6ZW1p
dEMKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG1fZGl2b3QgLSBtX3N1YmV4cHJl
c3Npb25EaXZvdE9mZnNldCwgbV9zdGFydE9mZnNldCAtIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zm
c2V0LCBtX3N1YmV4cHJlc3Npb25FbmRPZmZzZXQpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2
YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihk
c3QpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSk7CiAgICAgUmVnaXN0ZXJJRCogY2hhbmdl
ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fcmlnaHQuZ2V0KCkpOwotICAgIFJlZ2lzdGVySUQqIHVw
ZGF0ZWRWYWx1ZSA9IGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCwgdmFsdWUuZ2V0KCkpLCB2YWx1ZS5nZXQoKSwgY2hhbmdl
LCBtX29wZXJhdG9yKTsKKyAgICBSZWdpc3RlcklEKiB1cGRhdGVkVmFsdWUgPSBlbWl0UmVhZE1v
ZGlmeUFzc2lnbm1lbnQoZ2VuZXJhdG9yLCBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3Qs
IGNoYW5nZSksIHZhbHVlLmdldCgpLCBjaGFuZ2UsIG1fb3BlcmF0b3IpOwogCiAgICAgZ2VuZXJh
dG9yLmVtaXRFeHByZXNzaW9uSW5mbyhtX2Rpdm90LCBtX3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNl
dCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQo
KSwgdXBkYXRlZFZhbHVlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22722</attachid>
            <date>2008-08-10 07:37:36 -0700</date>
            <delta_ts>2008-11-29 01:05:22 -0800</delta_ts>
            <desc>Revised proposed patch</desc>
            <filename>temps.diff</filename>
            <type>text/plain</type>
            <size>16040</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM1NjU3
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMDgtMDgt
MTAgIENhbWVyb24gWndhcmljaCAgPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDIwMzQwOiBTZWdtZW50
ZWRWZWN0b3Igc2VnbWVudCBhbGxvY2F0aW9ucyBjYW4gbGVhZCB0byB1bnNhZmUgdXNlIG9mIHRl
bXBvcmFyeSByZWdpc3RlcnMKKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDM0MD4KKworICAgICAgICBDaGFuZ2UgZW1pdENvZGUoKSBtZXRob2RzIG9u
IE5vZGUgc3ViY2xhc3NlcyB0byBwYXNzIGFueSB1bnJlZidkCisgICAgICAgIHRlbXBvcmFyaWVz
IHRvIENvZGVHZW5lcmF0b3I6OmZpbmFsRGVzdGluYXRpb24oKSwgc28gdGhhdCB0aGV5IGFyZSB1
c2VkCisgICAgICAgIGluc3RlYWQgb2YgYSBuZXdseSBnZW5lcmF0ZWQgdGVtcG9yYXJ5LiBXZSBu
ZWVkIHRvIGRvIHRoaXMgYmVjYXVzZQorICAgICAgICBnZW5lcmF0aW5nIGEgbmV3IHRlbXBvcmFy
eSBjb3VsZCBkZWFsbG9jYXRlIGFuZCBhbGxvY2F0ZSBhIHNlZ21lbnQgaW4KKyAgICAgICAgdGhl
IFNlZ21lbnRlZFZlY3RvciBvZiBSZWdpc3RlcklEcywgd2hpY2ggbWlnaHQgbWF5IGxlYXZlIGFu
IHVucmVmJ2QKKyAgICAgICAgdGVtcG9yYXJ5IHBvaW50aW5nIHRvIGFuIGdhcmJhZ2UgUmVnaXN0
ZXJJRC4KKworICAgICAgICAqIFZNL0NvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEtKUzo6Q29k
ZUdlbmVyYXRvcjo6ZmluYWxEZXN0aW5hdGlvbik6CisgICAgICAgICoga2pzL25vZGVzLmNwcDoK
KyAgICAgICAgKEtKUzo6QnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdENvZGUpOgorICAgICAgICAo
S0pTOjpEb3RBY2Nlc3Nvck5vZGU6OmVtaXRDb2RlKToKKyAgICAgICAgKEtKUzo6TmV3RXhwck5v
ZGU6OmVtaXRDb2RlKToKKyAgICAgICAgKEtKUzo6RXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OmVtaXRD
b2RlKToKKyAgICAgICAgKEtKUzo6RnVuY3Rpb25DYWxsVmFsdWVOb2RlOjplbWl0Q29kZSk6Cisg
ICAgICAgIChLSlM6OkZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWl0Q29kZSk6CisgICAgICAg
IChLSlM6OkZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWl0Q29kZSk6CisgICAgICAgIChLSlM6
OkZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRDb2RlKToKKyAgICAgICAgKEtKUzo6RGVsZXRlQnJh
Y2tldE5vZGU6OmVtaXRDb2RlKToKKyAgICAgICAgKEtKUzo6RGVsZXRlRG90Tm9kZTo6ZW1pdENv
ZGUpOgorICAgICAgICAoS0pTOjpUeXBlT2ZWYWx1ZU5vZGU6OmVtaXRDb2RlKToKKyAgICAgICAg
KEtKUzo6VW5hcnlPcE5vZGU6OmVtaXRDb2RlKToKKyAgICAgICAgKEtKUzo6QmluYXJ5T3BOb2Rl
OjplbWl0Q29kZSk6CisgICAgICAgIChLSlM6OlJldmVyc2VCaW5hcnlPcE5vZGU6OmVtaXRDb2Rl
KToKKyAgICAgICAgKEtKUzo6VGhyb3dhYmxlQmluYXJ5T3BOb2RlOjplbWl0Q29kZSk6CisgICAg
ICAgIChLSlM6OlJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZW1pdENvZGUpOgorICAgICAgICAoS0pT
OjpSZWFkTW9kaWZ5RG90Tm9kZTo6ZW1pdENvZGUpOgorICAgICAgICAoS0pTOjpSZWFkTW9kaWZ5
QnJhY2tldE5vZGU6OmVtaXRDb2RlKToKKwogMjAwOC0wOC0wOSAgQWxleGV5IFByb3NrdXJ5YWtv
diAgPGFwQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5k
ZXg6IFZNL0NvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9Db2RlR2VuZXJhdG9yLmgJ
KHJldmlzaW9uIDM1NjU3KQorKysgVk0vQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzYsMTMgKzEzNiwxNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgfQogCiAgICAgICAg
IC8vIFJldHVybnMgdGhlIHBsYWNlIHRvIHdyaXRlIHRoZSBmaW5hbCBvdXRwdXQgb2YgYW4gb3Bl
cmF0aW9uLgotICAgICAgICBSZWdpc3RlcklEKiBmaW5hbERlc3RpbmF0aW9uKFJlZ2lzdGVySUQq
IG9yaWdpbmFsRHN0LCBSZWdpc3RlcklEKiB0ZW1wRHN0ID0gMCkKKyAgICAgICAgUmVnaXN0ZXJJ
RCogZmluYWxEZXN0aW5hdGlvbihSZWdpc3RlcklEKiBvcmlnaW5hbERzdCwgUmVnaXN0ZXJJRCog
ZGVzaXJlZERzdCA9IDAsIFJlZ2lzdGVySUQqIGxpdmVUZW1wID0gMCkKICAgICAgICAgewogICAg
ICAgICAgICAgaWYgKG9yaWdpbmFsRHN0ICYmIG9yaWdpbmFsRHN0ICE9IGlnbm9yZWRSZXN1bHQo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxEc3Q7Ci0gICAgICAgICAgICBBU1NF
UlQodGVtcERzdCAhPSBpZ25vcmVkUmVzdWx0KCkpOwotICAgICAgICAgICAgaWYgKHRlbXBEc3Qg
JiYgdGVtcERzdC0+aXNUZW1wb3JhcnkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdGVtcERz
dDsKKyAgICAgICAgICAgIEFTU0VSVChkZXNpcmVkRHN0ICE9IGlnbm9yZWRSZXN1bHQoKSk7Cisg
ICAgICAgICAgICBpZiAoZGVzaXJlZERzdCAmJiBkZXNpcmVkRHN0LT5pc1RlbXBvcmFyeSgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBkZXNpcmVkRHN0OworICAgICAgICAgICAgQVNTRVJUKGxp
dmVUZW1wICE9IGlnbm9yZWRSZXN1bHQoKSk7CisgICAgICAgICAgICBpZiAobGl2ZVRlbXAgJiYg
bGl2ZVRlbXAtPmlzVGVtcG9yYXJ5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGxpdmVUZW1w
OwogICAgICAgICAgICAgcmV0dXJuIG5ld1RlbXBvcmFyeSgpOwogICAgICAgICB9CiAKSW5kZXg6
IGtqcy9ub2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL25vZGVzLmNwcAkocmV2aXNpb24gMzU2
NTcpCisrKyBranMvbm9kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODEsNyArMzgxLDcgQEAg
UmVnaXN0ZXJJRCogQnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdENvZAogICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKG1fYmFzZS5n
ZXQoKSwgbV9zdWJzY3JpcHRIYXNBc3NpZ25tZW50cywgbV9zdWJzY3JpcHQtPmlzUHVyZShnZW5l
cmF0b3IpKTsKICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZSht
X3N1YnNjcmlwdC5nZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhtX2Rp
dm90LCBtX3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0R2V0QnlWYWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwg
cHJvcGVydHkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCwgYmFzZS5nZXQoKSwgcHJvcGVydHkpLCBiYXNlLmdldCgpLCBw
cm9wZXJ0eSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEb3RBY2Nl
c3Nvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM5MCw3ICszOTAs
NyBAQCBSZWdpc3RlcklEKiBEb3RBY2Nlc3Nvck5vZGU6OmVtaXRDb2RlKENvCiB7CiAgICAgUmVn
aXN0ZXJJRCogYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOwogICAgIGdl
bmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obV9kaXZvdCwgbV9zdGFydE9mZnNldCwgbV9lbmRP
ZmZzZXQpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLmZpbmFs
RGVzdGluYXRpb24oZHN0KSwgYmFzZSwgbV9pZGVudCk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0R2V0QnlJZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGJhc2UpLCBiYXNlLCBt
X2lkZW50KTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFyZ3VtZW50
TGlzdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQwNyw3ICs0MDcsNyBA
QCBSZWdpc3RlcklEKiBOZXdFeHByTm9kZTo6ZW1pdENvZGUoQ29kZUdlCiB7CiAgICAgUmVnaXN0
ZXJJRCogcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByLmdldCgpKTsKICAgICBnZW5lcmF0
b3IuZW1pdEV4cHJlc3Npb25JbmZvKG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1fZW5kT2Zmc2V0
KTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDb25zdHJ1Y3QoZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0KSwgcjAsIG1fYXJncy5nZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0Q29uc3RydWN0KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgcjApLCByMCwgbV9h
cmdzLmdldCgpKTsKIH0KIAogUmVnaXN0ZXJJRCogRXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OmVtaXRD
b2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtNDE1LDEz
ICs0MTUsMTMgQEAgUmVnaXN0ZXJJRCogRXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OmVtaXRDbwogICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3Qp
OwogICAgIFJlZ2lzdGVySUQqIGZ1bmMgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAg
Z2VuZXJhdG9yLmVtaXRSZXNvbHZlV2l0aEJhc2UoYmFzZS5nZXQoKSwgZnVuYywgZ2VuZXJhdG9y
LnByb3BlcnR5TmFtZXMoKS5ldmFsKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsRXZh
bChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGJhc2UuZ2V0KCkpLCBmdW5jLCBiYXNl
LmdldCgpLCBtX2FyZ3MuZ2V0KCksIG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1fZW5kT2Zmc2V0
KTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsRXZhbChnZW5lcmF0b3IuZmluYWxEZXN0
aW5hdGlvbihkc3QsIGJhc2UuZ2V0KCksIGZ1bmMpLCBmdW5jLCBiYXNlLmdldCgpLCBtX2FyZ3Mu
Z2V0KCksIG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1fZW5kT2Zmc2V0KTsKIH0KIAogUmVnaXN0
ZXJJRCogRnVuY3Rpb25DYWxsVmFsdWVOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBSZWdpc3RlcklEKiBmdW5jID0gZ2VuZXJh
dG9yLmVtaXROb2RlKG1fZXhwci5nZXQoKSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2Fs
bChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBmdW5jLCAwLCBtX2FyZ3MuZ2V0KCks
IG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1fZW5kT2Zmc2V0KTsKKyAgICByZXR1cm4gZ2VuZXJh
dG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYyksIGZ1bmMs
IDAsIG1fYXJncy5nZXQoKSwgbV9kaXZvdCwgbV9zdGFydE9mZnNldCwgbV9lbmRPZmZzZXQpOwog
fQogCiBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZW1pdENvZGUoQ29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCkBAIC00MzMsNyArNDMzLDcgQEAg
UmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmVtaQogICAgIHNpemVfdCBkZXB0
aCA9IDA7CiAgICAgaWYgKGdlbmVyYXRvci5maW5kU2NvcGVkUHJvcGVydHkobV9pZGVudCwgaW5k
ZXgsIGRlcHRoLCBmYWxzZSkgJiYgaW5kZXggIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpKSB7CiAg
ICAgICAgIFJlZ2lzdGVySUQqIGZ1bmMgPSBnZW5lcmF0b3IuZW1pdEdldFNjb3BlZFZhcihnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCksIGRlcHRoLCBpbmRleCk7Ci0gICAgICAgIHJldHVybiBnZW5l
cmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgZnVuYywgMCwg
bV9hcmdzLmdldCgpLCBtX2Rpdm90LCBtX3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7CisgICAg
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24o
ZHN0LCBmdW5jKSwgZnVuYywgMCwgbV9hcmdzLmdldCgpLCBtX2Rpdm90LCBtX3N0YXJ0T2Zmc2V0
LCBtX2VuZE9mZnNldCk7CiAgICAgfQogCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBn
ZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CkBAIC00NDEsNyArNDQxLDcgQEAgUmVnaXN0
ZXJJRCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmVtaQogICAgIGludCBpZGVudGlmaWVyU3Rh
cnQgPSBtX2Rpdm90IC0gbV9zdGFydE9mZnNldDsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Np
b25JbmZvKGlkZW50aWZpZXJTdGFydCArIG1faWRlbnQuc2l6ZSgpLCBtX2lkZW50LnNpemUoKSwg
MCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRSZXNvbHZlRnVuY3Rpb24oYmFzZS5nZXQoKSwgZnVuYywg
bV9pZGVudCk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QsIGJhc2UuZ2V0KCkpLCBmdW5jLCBiYXNlLmdldCgpLCBtX2FyZ3MuZ2V0
KCksIG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1fZW5kT2Zmc2V0KTsKKyAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgYmFzZS5nZXQo
KSwgZnVuYyksIGZ1bmMsIGJhc2UuZ2V0KCksIG1fYXJncy5nZXQoKSwgbV9kaXZvdCwgbV9zdGFy
dE9mZnNldCwgbV9lbmRPZmZzZXQpOwogfQogCiBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxCcmFj
a2V0Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBk
c3QpCkBAIC00NTAsNyArNDUwLDcgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsQnJhY2tldE5v
ZGU6OmVtaQogICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1f
c3Vic2NyaXB0LmdldCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG1fZGl2
b3QgLSBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldCwgbV9zdGFydE9mZnNldCAtIG1fc3ViZXhw
cmVzc2lvbkRpdm90T2Zmc2V0LCBtX3N1YmV4cHJlc3Npb25FbmRPZmZzZXQpOwogICAgIFJlZ2lz
dGVySUQqIGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5KTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVt
aXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgYmFzZS5nZXQoKSksIGZ1bmN0
aW9uLCBiYXNlLmdldCgpLCBtX2FyZ3MuZ2V0KCksIG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1f
ZW5kT2Zmc2V0KTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5h
bERlc3RpbmF0aW9uKGRzdCwgYmFzZS5nZXQoKSwgZnVuY3Rpb24pLCBmdW5jdGlvbiwgYmFzZS5n
ZXQoKSwgbV9hcmdzLmdldCgpLCBtX2Rpdm90LCBtX3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7
CiB9CiAKIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRDb2RlKENvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtNDU4LDcgKzQ1OCw3IEBAIFJl
Z2lzdGVySUQqIEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRDb2QKICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOwogICAgIGdlbmVy
YXRvci5lbWl0RXhwcmVzc2lvbkluZm8obV9kaXZvdCAtIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zm
c2V0LCBtX3N0YXJ0T2Zmc2V0IC0gbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQsIG1fc3ViZXhw
cmVzc2lvbkVuZE9mZnNldCk7CiAgICAgUmVnaXN0ZXJJRCogZnVuY3Rpb24gPSBnZW5lcmF0b3Iu
ZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBiYXNlLmdldCgpLCBtX2lkZW50
KTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCwgYmFzZS5nZXQoKSksIGZ1bmN0aW9uLCBiYXNlLmdldCgpLCBtX2FyZ3MuZ2V0KCks
IG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1fZW5kT2Zmc2V0KTsKKyAgICByZXR1cm4gZ2VuZXJh
dG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgYmFzZS5nZXQoKSwg
ZnVuY3Rpb24pLCBmdW5jdGlvbiwgYmFzZS5nZXQoKSwgbV9hcmdzLmdldCgpLCBtX2Rpdm90LCBt
X3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBQb3N0Zml4UmVzb2x2ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQpAQCAtNTg3LDEwICs1ODcsMTAgQEAgUmVnaXN0ZXJJRCogRGVsZXRlUmVzb2x2ZU5v
ZGU6OmVtaXRDb2RlKAogUmVnaXN0ZXJJRCogRGVsZXRlQnJhY2tldE5vZGU6OmVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiByMCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOwotICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiByMSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdC5nZXQo
KSk7CisgICAgUmVnaXN0ZXJJRCogcjEgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQu
Z2V0KCkpOwogCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhtX2Rpdm90LCBtX3N0
YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RGVsZXRl
QnlWYWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgcjAuZ2V0KCksIHIxLmdldCgp
KTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeVZhbChnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QsIHIwLmdldCgpLCByMSksIHIwLmdldCgpLCByMSk7CiB9CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWxldGVEb3ROb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02MDAsNyArNjAwLDcgQEAgUmVnaXN0ZXJJRCogRGVs
ZXRlRG90Tm9kZTo6ZW1pdENvZGUoQ29kZQogICAgIFJlZ2lzdGVySUQqIHIwID0gZ2VuZXJhdG9y
LmVtaXROb2RlKG1fYmFzZS5nZXQoKSk7CiAKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25J
bmZvKG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1fZW5kT2Zmc2V0KTsKLSAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmVtaXREZWxldGVCeUlkKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHIw
LCBtX2lkZW50KTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXREZWxldGVCeUlkKGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCwgcjApLCByMCwgbV9pZGVudCk7CiB9CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWxldGVWYWx1ZU5vZGUgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTY1MCw4ICs2NTAsOCBAQCBSZWdpc3RlcklEKiBUeXBl
T2ZWYWx1ZU5vZGU6OmVtaXRDb2RlKENvCiAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShpZ25v
cmVkUmVzdWx0KCksIG1fZXhwci5nZXQoKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwci5nZXQo
KSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0VHlwZU9mKGdlbmVyYXRvci5maW5hbERlc3Rp
bmF0aW9uKGRzdCksIHNyYy5nZXQoKSk7CisgICAgUmVnaXN0ZXJJRCogc3JjID0gZ2VuZXJhdG9y
LmVtaXROb2RlKG1fZXhwci5nZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0VHlwZU9m
KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjKSwgc3JjKTsKIH0KIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByZWZpeFJlc29sdmVOb2RlIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTczNiw3ICs3MzYsNyBAQCBSZWdpc3RlcklEKiBQ
cmVmaXhFcnJvck5vZGU6OmVtaXRDb2RlKENvCiBSZWdpc3RlcklEKiBVbmFyeU9wTm9kZTo6ZW1p
dENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAg
UmVnaXN0ZXJJRCogc3JjID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwci5nZXQoKSk7Ci0gICAg
cmV0dXJuIGdlbmVyYXRvci5lbWl0VW5hcnlPcChvcGNvZGUoKSwgZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0KSwgc3JjKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRVbmFyeU9wKG9w
Y29kZSgpLCBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYyksIHNyYyk7CiB9CiAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCaW5hcnkgT3BlcmF0aW9uIE5vZGVz
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC03NDUsMTQgKzc0NSwxNCBA
QCBSZWdpc3RlcklEKiBCaW5hcnlPcE5vZGU6OmVtaXRDb2RlKENvZGVHCiB7CiAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNpZGUobV90
ZXJtMS5nZXQoKSwgbV9yaWdodEhhc0Fzc2lnbm1lbnRzLCBtX3Rlcm0yLT5pc1B1cmUoZ2VuZXJh
dG9yKSk7CiAgICAgUmVnaXN0ZXJJRCogc3JjMiA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3Rlcm0y
LmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRCaW5hcnlPcChvcGNvZGUoKSwgZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQoKSwgc3Jj
Mik7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0QmluYXJ5T3Aob3Bjb2RlKCksIGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSwgc3JjMiksIHNyYzEuZ2V0KCksIHNy
YzIpOwogfQogCiBSZWdpc3RlcklEKiBSZXZlcnNlQmluYXJ5T3BOb2RlOjplbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gc3JjMSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShtX3Rlcm0x
LmdldCgpLCBtX3JpZ2h0SGFzQXNzaWdubWVudHMsIG1fdGVybTItPmlzUHVyZShnZW5lcmF0b3Ip
KTsKICAgICBSZWdpc3RlcklEKiBzcmMyID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fdGVybTIuZ2V0
KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEJpbmFyeU9wKG9wY29kZSgpLCBnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMyLCBzcmMxLmdldCgpKTsK
KyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRCaW5hcnlPcChvcGNvZGUoKSwgZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgpLCBzcmMyKSwgc3JjMiwgc3JjMS5nZXQoKSk7
CiB9CiAKIFJlZ2lzdGVySUQqIFRocm93YWJsZUJpbmFyeU9wTm9kZTo6ZW1pdENvZGUoQ29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCkBAIC03NjAsNyArNzYwLDcgQEAg
UmVnaXN0ZXJJRCogVGhyb3dhYmxlQmluYXJ5T3BOb2RlOjplbWl0QwogICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBzcmMxID0gZ2VuZXJhdG9yLmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKG1fdGVybTEu
Z2V0KCksIG1fcmlnaHRIYXNBc3NpZ25tZW50cywgbV90ZXJtMi0+aXNQdXJlKGdlbmVyYXRvcikp
OwogICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV90ZXJtMi5nZXQo
KSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhtX2Rpdm90LCBtX3N0YXJ0T2Zm
c2V0LCBtX2VuZE9mZnNldCk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0QmluYXJ5T3Aob3Bj
b2RlKCksIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSksIHNyYzEu
Z2V0KCksIHNyYzIpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEJpbmFyeU9wKG9wY29kZSgp
LCBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCksIHNyYzIpLCBzcmMx
LmdldCgpLCBzcmMyKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJp
bmFyeSBMb2dpY2FsIE5vZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTg1Niw3
ICs4NTYsNyBAQCBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OmVtaXRDCiAgICAg
aWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gZ2VuZXJhdG9yLnJlZ2lzdGVyRm9yTG9jYWwobV9pZGVu
dCkpIHsKICAgICAgICAgaWYgKGdlbmVyYXRvci5pc0xvY2FsQ29uc3RhbnQobV9pZGVudCkpIHsK
ICAgICAgICAgICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9yaWdo
dC5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdl
bmVyYXRvciwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgbG9jYWwsIHNyYzIsIG1f
b3BlcmF0b3IpOworICAgICAgICAgICAgcmV0dXJuIGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChn
ZW5lcmF0b3IsIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMiksIGxvY2FsLCBz
cmMyLCBtX29wZXJhdG9yKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGdlbmVy
YXRvci5sZWZ0SGFuZFNpZGVOZWVkc0NvcHkobV9yaWdodEhhc0Fzc2lnbm1lbnRzLCBtX3JpZ2h0
LT5pc1B1cmUoZ2VuZXJhdG9yKSkpIHsKQEAgLTg3OCw3ICs4NzgsNyBAQCBSZWdpc3RlcklEKiBS
ZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OmVtaXRDCiAgICAgaWYgKGdlbmVyYXRvci5maW5kU2NvcGVk
UHJvcGVydHkobV9pZGVudCwgaW5kZXgsIGRlcHRoLCB0cnVlKSAmJiBpbmRleCAhPSBtaXNzaW5n
U3ltYm9sTWFya2VyKCkpIHsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5l
cmF0b3IuZW1pdEdldFNjb3BlZFZhcihnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGRl
cHRoLCBpbmRleCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1pdE5v
ZGUobV9yaWdodC5nZXQoKSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIHJlc3VsdCA9IGVtaXRSZWFk
TW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRz
dCwgc3JjMS5nZXQoKSksIHNyYzEuZ2V0KCksIHNyYzIsIG1fb3BlcmF0b3IpOworICAgICAgICBS
ZWdpc3RlcklEKiByZXN1bHQgPSBlbWl0UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJhdG9yLCBn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCksIHNyYzIpLCBzcmMxLmdl
dCgpLCBzcmMyLCBtX29wZXJhdG9yKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRTY29wZWRW
YXIoZGVwdGgsIGluZGV4LCByZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
QEAgLTg4OCw3ICs4ODgsNyBAQCBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OmVt
aXRDCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVX
aXRoQmFzZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNyYzEuZ2V0KCksIG1faWRlbnQpOwog
ICAgIFJlZ2lzdGVySUQqIHNyYzIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9yaWdodC5nZXQoKSk7
CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhtX2Rpdm90LCBtX3N0YXJ0T2Zmc2V0
LCBtX2VuZE9mZnNldCk7Ci0gICAgUmVnaXN0ZXJJRCogcmVzdWx0ID0gZW1pdFJlYWRNb2RpZnlB
c3NpZ25tZW50KGdlbmVyYXRvciwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMx
LmdldCgpKSwgc3JjMS5nZXQoKSwgc3JjMiwgbV9vcGVyYXRvcik7CisgICAgUmVnaXN0ZXJJRCog
cmVzdWx0ID0gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdlbmVyYXRvciwgZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgpLCBzcmMyKSwgc3JjMS5nZXQoKSwgc3JjMiwg
bV9vcGVyYXRvcik7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgp
LCBtX2lkZW50LCByZXN1bHQpOwogfQogCkBAIC05NDMsNyArOTQzLDcgQEAgUmVnaXN0ZXJJRCog
UmVhZE1vZGlmeURvdE5vZGU6OmVtaXRDb2RlKAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lv
bkluZm8obV9kaXZvdCAtIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0LCBtX3N0YXJ0T2Zmc2V0
IC0gbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQsIG1fc3ViZXhwcmVzc2lvbkVuZE9mZnNldCk7
CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdl
bmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgbV9pZGVudCk7CiAgICAg
UmVnaXN0ZXJJRCogY2hhbmdlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fcmlnaHQuZ2V0KCkpOwot
ICAgIFJlZ2lzdGVySUQqIHVwZGF0ZWRWYWx1ZSA9IGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChn
ZW5lcmF0b3IsIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgdmFsdWUuZ2V0KCkpLCB2
YWx1ZS5nZXQoKSwgY2hhbmdlLCBtX29wZXJhdG9yKTsKKyAgICBSZWdpc3RlcklEKiB1cGRhdGVk
VmFsdWUgPSBlbWl0UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJhdG9yLCBnZW5lcmF0b3IuZmlu
YWxEZXN0aW5hdGlvbihkc3QsIHZhbHVlLmdldCgpLCBjaGFuZ2UpLCB2YWx1ZS5nZXQoKSwgY2hh
bmdlLCBtX29wZXJhdG9yKTsKIAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obV9k
aXZvdCwgbV9zdGFydE9mZnNldCwgbV9lbmRPZmZzZXQpOwogICAgIHJldHVybiBnZW5lcmF0b3Iu
ZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwgbV9pZGVudCwgdXBkYXRlZFZhbHVlKTsKQEAgLTk3OCw3
ICs5NzgsNyBAQCBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5QnJhY2tldE5vZGU6OmVtaXRDCiAgICAg
Z2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhtX2Rpdm90IC0gbV9zdWJleHByZXNzaW9uRGl2
b3RPZmZzZXQsIG1fc3RhcnRPZmZzZXQgLSBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldCwgbV9z
dWJleHByZXNzaW9uRW5kT2Zmc2V0KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBn
ZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFz
ZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCkpOwogICAgIFJlZ2lzdGVySUQqIGNoYW5nZSA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX3JpZ2h0LmdldCgpKTsKLSAgICBSZWdpc3RlcklEKiB1cGRhdGVkVmFs
dWUgPSBlbWl0UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJhdG9yLCBnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QsIHZhbHVlLmdldCgpKSwgdmFsdWUuZ2V0KCksIGNoYW5nZSwgbV9vcGVy
YXRvcik7CisgICAgUmVnaXN0ZXJJRCogdXBkYXRlZFZhbHVlID0gZW1pdFJlYWRNb2RpZnlBc3Np
Z25tZW50KGdlbmVyYXRvciwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCB2YWx1ZS5n
ZXQoKSwgY2hhbmdlKSwgdmFsdWUuZ2V0KCksIGNoYW5nZSwgbV9vcGVyYXRvcik7CiAKICAgICBn
ZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1fZW5k
T2Zmc2V0KTsKICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5VmFsKGJhc2UuZ2V0KCksIHByb3BlcnR5
LmdldCgpLCB1cGRhdGVkVmFsdWUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>22729</attachid>
            <date>2008-08-11 11:26:21 -0700</date>
            <delta_ts>2008-11-29 01:05:22 -0800</delta_ts>
            <desc>Diff showing alternative fix</desc>
            <filename>diff.txt</filename>
            <type>text/plain</type>
            <size>7842</size>
            <attacher name="Chris Brichford">chrisb</attacher>
            
              <data encoding="base64">Q2hhbmdlIDQzODU2MSBieSBjaHJpc2JAY2hyaXNiLWFwb2xsby1tYWluLWNocmlzYi1tYWNwcm8g
b24gMjAwOC8wNy8zMSAwOTo1NToxOQoKCVsxODYxNDI3XSBbV2ViS2l0IEJ1Z10gV2luOiBKUyBz
dGFjayBvdmVyZmxvdyBjcmFzaCBpbiByZWdyZXNzLTk2NTI2LTAwMi5qcyAoZnJvbSB0aGUgSmF2
YVNjcmlwdENvcmUgdGVzdHN1aXRlKS4KCQoJQWRkZWQgY29kZSB0byBwcmV2ZW50IHRoZSBjb2Rl
IGdlbmVyYXRvciBmcm9tIHJlY3Vyc2luZyBvbiBpdHNlbGYgbW9yZSB0aGFuIDEwMDAgdGltZXMu
ICBBbHNvIGZpeGluZyBidWcgd2hlcmUgc29tZQoJUmVnaXN0ZXJJRCogY291bGQgZW5kIHVwIHBv
aW50aW5nIGF0IGZyZWUnZCBtZW1vcnkuCgpBZmZlY3RlZCBmaWxlcyAuLi4KCi4uLiAvL2RlcG90
L21haW4vcGxheWVyL2JyYW5jaGVzL0Fwb2xsby9NYWluL0NvbnRlbnQvaHRtbC9KYXZhU2NyaXB0
Q29yZS9WTS9Db2RlR2VuZXJhdG9yLmNwcCMyIGludGVncmF0ZQouLi4gLy9kZXBvdC9tYWluL3Bs
YXllci9icmFuY2hlcy9BcG9sbG8vTWFpbi9Db250ZW50L2h0bWwvSmF2YVNjcmlwdENvcmUvVk0v
Q29kZUdlbmVyYXRvci5oIzIgaW50ZWdyYXRlCgpEaWZmZXJlbmNlcyAuLi4KCj09PT0gLy9kZXBv
dC9tYWluL3BsYXllci9icmFuY2hlcy9BcG9sbG8vTWFpbi9Db250ZW50L2h0bWwvSmF2YVNjcmlw
dENvcmUvVk0vQ29kZUdlbmVyYXRvci5jcHAjMiAodGV4dCkgPT09PQoKKioqKioqKioqKioqKioq
CioqKiAxNzcsMTg4ICoqKioKLS0tIDE3NywxOTAgLS0tLQogICAgICAsIG1fc3ltYm9sVGFibGUo
c3ltYm9sVGFibGUpCiAgICAgICwgbV9zY29wZU5vZGUocHJvZ3JhbU5vZGUpCiAgICAgICwgbV9j
b2RlQmxvY2soY29kZUJsb2NrKQorICAgICAsIG1fbGFzdExpdmVUZW1wb3JhcnlJbmRleCgwKQog
ICAgICAsIG1fZmluYWxseURlcHRoKDApCiAgICAgICwgbV9keW5hbWljU2NvcGVEZXB0aCgwKQog
ICAgICAsIG1fY29kZVR5cGUoR2xvYmFsQ29kZSkKICAgICAgLCBtX2NvbnRpbnVlRGVwdGgoMCkK
ICAgICAgLCBtX25leHRWYXIoLTEpCiAgICAgICwgbV9wcm9wZXJ0eU5hbWVzKENvbW1vbklkZW50
aWZpZXJzOjpzaGFyZWQoKSkKKyAgICAgLCBtX2VtaXROb2RlRGVwdGgoMCkKICAKICB7CiAgICAg
IC8vIEdsb2JhbCBjb2RlIGNhbiBpbmhlcml0IHByZXZpb3VzbHkgZGVmaW5lZCBzeW1ib2xzLgoq
KioqKioqKioqKioqKioKKioqIDIzNywyNDggKioqKgotLS0gMjM5LDI1MiAtLS0tCiAgICAgICwg
bV9zY29wZU5vZGUoZnVuY3Rpb25Cb2R5KQogICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykK
ICAgICAgLCBtX3RoaXNSZWdpc3RlcigwKQorICAgICAsIG1fbGFzdExpdmVUZW1wb3JhcnlJbmRl
eCgwKQogICAgICAsIG1fZmluYWxseURlcHRoKDApCiAgICAgICwgbV9keW5hbWljU2NvcGVEZXB0
aCgwKQogICAgICAsIG1fY29kZVR5cGUoRnVuY3Rpb25Db2RlKQogICAgICAsIG1fY29udGludWVE
ZXB0aCgwKQogICAgICAsIG1fbmV4dFZhcigtMSkKICAgICAgLCBtX3Byb3BlcnR5TmFtZXMoQ29t
bW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpKQorICAgICAsIG1fZW1pdE5vZGVEZXB0aCgwKQogIHsK
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvblN0YWNrLnNpemUoKTsgKytpKSB7
CiAgICAgICAgICBGdW5jRGVjbE5vZGUqIGZ1bmNEZWNsID0gZnVuY3Rpb25TdGFja1tpXTsKKioq
KioqKioqKioqKioqCioqKiAyNzgsMjg5ICoqKioKLS0tIDI4MiwyOTUgLS0tLQogICAgICAsIG1f
c2NvcGVOb2RlKGV2YWxOb2RlKQogICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAg
LCBtX3RoaXNSZWdpc3RlcigwKQorICAgICAsIG1fbGFzdExpdmVUZW1wb3JhcnlJbmRleCgwKQog
ICAgICAsIG1fZmluYWxseURlcHRoKDApCiAgICAgICwgbV9keW5hbWljU2NvcGVEZXB0aCgwKQog
ICAgICAsIG1fY29kZVR5cGUoRXZhbENvZGUpCiAgICAgICwgbV9jb250aW51ZURlcHRoKDApCiAg
ICAgICwgbV9uZXh0VmFyKC0xKQogICAgICAsIG1fcHJvcGVydHlOYW1lcyhDb21tb25JZGVudGlm
aWVyczo6c2hhcmVkKCkpCisgICAgICwgbV9lbWl0Tm9kZURlcHRoKDApCiAgewogICAgICBhZGRW
YXIobV9wcm9wZXJ0eU5hbWVzLT50aGlzSWRlbnRpZmllciwgbV90aGlzUmVnaXN0ZXIsIGZhbHNl
KTsKICAgICAgCioqKioqKioqKioqKioqKgoqKiogMzU0LDM2NiAqKioqCiAgUmVnaXN0ZXJJRCog
Q29kZUdlbmVyYXRvcjo6bmV3VGVtcG9yYXJ5KCkKICB7CiAgICAgIC8vIFJlY2xhaW0gZnJlZSBy
ZWdpc3RlciBJRHMuCiEgICAgIHdoaWxlIChtX3RlbXBvcmFyaWVzLnNpemUoKSAmJiAhbV90ZW1w
b3Jhcmllcy5sYXN0KCkucmVmQ291bnQoKSkKISAgICAgICAgIG1fdGVtcG9yYXJpZXMucmVtb3Zl
TGFzdCgpOwohIAohICAgICAvLyBBbGxvY2F0ZSBuZXcgcmVnaXN0ZXIgSUQuCiEgICAgIG1fdGVt
cG9yYXJpZXMuYXBwZW5kKG1fdGVtcG9yYXJpZXMuc2l6ZSgpKTsKISAgICAgbV9jb2RlQmxvY2st
Pm51bVRlbXBvcmFyaWVzID0gbWF4PGludD4obV9jb2RlQmxvY2stPm51bVRlbXBvcmFyaWVzLCBt
X3RlbXBvcmFyaWVzLnNpemUoKSk7CiEgICAgIHJldHVybiAmbV90ZW1wb3Jhcmllcy5sYXN0KCk7
CiAgfQogIAogIFBhc3NSZWZQdHI8TGFiZWxJRD4gQ29kZUdlbmVyYXRvcjo6bmV3TGFiZWwoKQot
LS0gMzYwLDM4NiAtLS0tCiAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6bmV3VGVtcG9yYXJ5
KCkKICB7CiAgICAgIC8vIFJlY2xhaW0gZnJlZSByZWdpc3RlciBJRHMuCiEgICAgIHNpemVfdCBj
b25zdCBuVGVtcG9yYXJpZXMgPSBtX3RlbXBvcmFyaWVzLnNpemUoKTsKISAgICAgaWYgKG5UZW1w
b3JhcmllcykgewohICAgICAgICAgQVNTRVJUKG1fbGFzdExpdmVUZW1wb3JhcnlJbmRleCA8IG5U
ZW1wb3Jhcmllcyk7CiEgICAgICAgICB3aGlsZSAoKG1fbGFzdExpdmVUZW1wb3JhcnlJbmRleCA+
IDApICYmICghbV90ZW1wb3Jhcmllc1ttX2xhc3RMaXZlVGVtcG9yYXJ5SW5kZXhdLnJlZkNvdW50
KCkpKSB7CiEgICAgICAgICAgICAgLS1tX2xhc3RMaXZlVGVtcG9yYXJ5SW5kZXg7CiEgICAgICAg
ICAgICAgQVNTRVJUKG1fdGVtcG9yYXJpZXNbbV9sYXN0TGl2ZVRlbXBvcmFyeUluZGV4XS5pbmRl
eCgpID09IHN0YXRpY19jYXN0PGludD4obV9sYXN0TGl2ZVRlbXBvcmFyeUluZGV4KSk7CiEgICAg
ICAgICB9CiEgICAgICAgICBBU1NFUlQobV9sYXN0TGl2ZVRlbXBvcmFyeUluZGV4IDwgblRlbXBv
cmFyaWVzKTsKISAgICAgICAgIGlmICgobV90ZW1wb3Jhcmllc1ttX2xhc3RMaXZlVGVtcG9yYXJ5
SW5kZXhdLnJlZkNvdW50KCkpKQohICAgICAgICAgICAgICsrbV9sYXN0TGl2ZVRlbXBvcmFyeUlu
ZGV4OwohICAgICAgICAgCiEgICAgIH0KISAgICAgQVNTRVJUKG1fbGFzdExpdmVUZW1wb3JhcnlJ
bmRleCA8PSBuVGVtcG9yYXJpZXMpOwohICAgICBpZiAobV9sYXN0TGl2ZVRlbXBvcmFyeUluZGV4
ID09IG5UZW1wb3JhcmllcykgewohICAgICAgICAgLy8gQWxsb2NhdGUgbmV3IHJlZ2lzdGVyIElE
LgohICAgICAgICAgbV90ZW1wb3Jhcmllcy5hcHBlbmQobV9sYXN0TGl2ZVRlbXBvcmFyeUluZGV4
KTsKISAgICAgfQohICAgICBBU1NFUlQobV90ZW1wb3Jhcmllc1ttX2xhc3RMaXZlVGVtcG9yYXJ5
SW5kZXhdLmluZGV4KCkgPT0gc3RhdGljX2Nhc3Q8aW50PihtX2xhc3RMaXZlVGVtcG9yYXJ5SW5k
ZXgpKTsKISAgICAgCiEgICAgIG1fY29kZUJsb2NrLT5udW1UZW1wb3JhcmllcyA9IG1heDxpbnQ+
KG1fY29kZUJsb2NrLT5udW1UZW1wb3JhcmllcywgbV9sYXN0TGl2ZVRlbXBvcmFyeUluZGV4ICsg
MSk7CiEgICAgIHJldHVybiAmbV90ZW1wb3Jhcmllc1ttX2xhc3RMaXZlVGVtcG9yYXJ5SW5kZXhd
OwogIH0KICAKICBQYXNzUmVmUHRyPExhYmVsSUQ+IENvZGVHZW5lcmF0b3I6Om5ld0xhYmVsKCkK
KioqKioqKioqKioqKioqCioqKiA5NzgsOTg0ICoqKioKICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRl
eCgpKTsKICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UgPyBiYXNlLT5pbmRleCgpIDog
bWlzc2luZ1RoaXNPYmplY3RNYXJrZXIoKSk7IC8vIFdlIGVuY29kZSB0aGUgInRoaXMiIHZhbHVl
IGluIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0sIHRvIGF2b2lkIGFuIGV4cGxpY2l0IGluc3RydWN0
aW9uIGZvciBjb3B5aW5nIG9yIGxvYWRpbmcgaXQuCiEgICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChhcmd2LnNpemUoKSA/IGFyZ3ZbMF0tPmluZGV4KCkgOiBtX3RlbXBvcmFyaWVzLnNpemUoKSk7
IC8vIGFyZ3YKICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFyZ3Yuc2l6ZSgpKTsgLy8gYXJn
YwogICAgICByZXR1cm4gZHN0OwogIH0KLS0tIDk5OCwxMDA0IC0tLS0KICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChm
dW5jLT5pbmRleCgpKTsKICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UgPyBiYXNlLT5p
bmRleCgpIDogbWlzc2luZ1RoaXNPYmplY3RNYXJrZXIoKSk7IC8vIFdlIGVuY29kZSB0aGUgInRo
aXMiIHZhbHVlIGluIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0sIHRvIGF2b2lkIGFuIGV4cGxpY2l0
IGluc3RydWN0aW9uIGZvciBjb3B5aW5nIG9yIGxvYWRpbmcgaXQuCiEgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChhcmd2LnNpemUoKSA/IGFyZ3ZbMF0tPmluZGV4KCkgOiBtX2xhc3RMaXZlVGVt
cG9yYXJ5SW5kZXgpOyAvLyBhcmd2CiAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhcmd2LnNp
emUoKSk7IC8vIGFyZ2MKICAgICAgcmV0dXJuIGRzdDsKICB9CioqKioqKioqKioqKioqKgoqKiog
MTAxNSwxMDIxICoqKioKICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRP
cGNvZGUob3BfY29uc3RydWN0KSk7CiAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmlu
ZGV4KCkpOwogICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZnVuYy0+aW5kZXgoKSk7CiEgICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChhcmd2LnNpemUoKSA/IGFyZ3ZbMF0tPmluZGV4KCkgOiBt
X3RlbXBvcmFyaWVzLnNpemUoKSk7IC8vIGFyZ3YKICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGFyZ3Yuc2l6ZSgpKTsgLy8gYXJnYwogICAgICByZXR1cm4gZHN0OwogIH0KLS0tIDEwMzUsMTA0
MSAtLS0tCiAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9w
X2NvbnN0cnVjdCkpOwogICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsK
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZ1bmMtPmluZGV4KCkpOwohICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoYXJndi5zaXplKCkgPyBhcmd2WzBdLT5pbmRleCgpIDogbV9sYXN0TGl2
ZVRlbXBvcmFyeUluZGV4KTsgLy8gYXJndgogICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYXJn
di5zaXplKCkpOyAvLyBhcmdjCiAgICAgIHJldHVybiBkc3Q7CiAgfQoqKioqKioqKioqKioqKioK
KioqIDEyNTEsMTI1NCAqKioqCi0tLSAxMjcxLDEyODEgLS0tLQogICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQocmV0QWRkclNyYy0+aW5kZXgoKSk7CiAgfQogIAorIFJlZ2lzdGVySUQqIENvZGVH
ZW5lcmF0b3I6OmVtaXRFeHByZXNzaW9uVG9vRGVlcEV4Y2VwdGlvbigpCisgeworICAgICBSZWdp
c3RlcklEKiBjb25zdCBleGNlcHRpb24gPSBlbWl0TmV3RXJyb3IobmV3VGVtcG9yYXJ5KCksIFN5
bnRheEVycm9yLCBqc1N0cmluZygiRXhwcmVzc2lvbiB0b28gZGVlcCIpKTsKKyAgICAgZW1pdFRo
cm93KGV4Y2VwdGlvbik7CisgICAgIHJldHVybiBleGNlcHRpb247CisgfQorIAogIH0gLy8gbmFt
ZXNwYWNlIEtKUwoKPT09PSAvL2RlcG90L21haW4vcGxheWVyL2JyYW5jaGVzL0Fwb2xsby9NYWlu
L0NvbnRlbnQvaHRtbC9KYXZhU2NyaXB0Q29yZS9WTS9Db2RlR2VuZXJhdG9yLmgjMiAodGV4dCkg
PT09PQoKKioqKioqKioqKioqKioqCioqKiAxNjAsMTY2ICoqKioKICAgICAgICAgICAgICAgICAg
TGluZUluZm8gaW5mbyA9IHsgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCBuLT5saW5lTm8oKSB9Owog
ICAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+bGluZUluZm8uYXBwZW5kKGluZm8pOwogICAg
ICAgICAgICAgIH0KISAgICAgICAgICAgICByZXR1cm4gbi0+ZW1pdENvZGUoKnRoaXMsIGRzdCk7
CiAgICAgICAgICB9CiAgCiAgICAgICAgICBSZWdpc3RlcklEKiBlbWl0Tm9kZShOb2RlKiBuKQot
LS0gMTYwLDE3MSAtLS0tCiAgICAgICAgICAgICAgICAgIExpbmVJbmZvIGluZm8gPSB7IGluc3Ry
dWN0aW9ucygpLnNpemUoKSwgbi0+bGluZU5vKCkgfTsKICAgICAgICAgICAgICAgICAgbV9jb2Rl
QmxvY2stPmxpbmVJbmZvLmFwcGVuZChpbmZvKTsKICAgICAgICAgICAgICB9CiEgICAgICAgICAg
ICAgaWYgKG1fZW1pdE5vZGVEZXB0aCA+PSBzX21heEVtaXROb2RlRGVwdGgpCiEgICAgICAgICAg
ICAgICAgIHJldHVybiBlbWl0RXhwcmVzc2lvblRvb0RlZXBFeGNlcHRpb24oKTsKISAgICAgICAg
ICAgICArK21fZW1pdE5vZGVEZXB0aDsKISAgICAgICAgICAgICBSZWdpc3RlcklEKiBjb25zdCBy
ID0gbi0+ZW1pdENvZGUoKnRoaXMsIGRzdCk7CiEgICAgICAgICAgICAgLS1tX2VtaXROb2RlRGVw
dGg7CiEgICAgICAgICAgICAgcmV0dXJuIHI7CiAgICAgICAgICB9CiAgCiAgICAgICAgICBSZWdp
c3RlcklEKiBlbWl0Tm9kZShOb2RlKiBuKQoqKioqKioqKioqKioqKioKKioqIDM0MCwzNDUgKioq
KgotLS0gMzQ1LDM1MiAtLS0tCiAgICAgICAgICBib29sIHNob3VsZE9wdGltaXplTG9jYWxzKCkg
eyByZXR1cm4gKG1fY29kZVR5cGUgIT0gRXZhbENvZGUpICYmICFtX2R5bmFtaWNTY29wZURlcHRo
OyB9CiAgICAgICAgICBib29sIGNhbk9wdGltaXplTm9uTG9jYWxzKCkgeyByZXR1cm4gKG1fY29k
ZVR5cGUgPT0gRnVuY3Rpb25Db2RlKSAmJiAhbV9keW5hbWljU2NvcGVEZXB0aCAmJiAhbV9jb2Rl
QmxvY2stPnVzZXNFdmFsOyB9CiAgCisgICAgICAgICBSZWdpc3RlcklEKiBlbWl0RXhwcmVzc2lv
blRvb0RlZXBFeGNlcHRpb24oKTsKKyAKICAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0RGVidWdI
b29rczsKICAgICAgICAgIAogICAgICAgICAgY29uc3QgU2NvcGVDaGFpbiogbV9zY29wZUNoYWlu
OwoqKioqKioqKioqKioqKioKKioqIDM1MywzNTggKioqKgotLS0gMzYwLDM2NiAtLS0tCiAgICAg
ICAgICBSZWdpc3RlcklEKiBtX3RoaXNSZWdpc3RlcjsKICAgICAgICAgIFNlZ21lbnRlZFZlY3Rv
cjxSZWdpc3RlcklELCA1MTI+IG1fbG9jYWxzOwogICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFJl
Z2lzdGVySUQsIDUxMj4gbV90ZW1wb3JhcmllczsKKyAgICAgICAgIHVuc2lnbmVkIG1fbGFzdExp
dmVUZW1wb3JhcnlJbmRleDsKICAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxMYWJlbElELCA1MTI+
IG1fbGFiZWxzOwogICAgICAgICAgaW50IG1fZmluYWxseURlcHRoOwogICAgICAgICAgaW50IG1f
ZHluYW1pY1Njb3BlRGVwdGg7CioqKioqKioqKioqKioqKgoqKiogMzc0LDM3OSAqKioqCi0tLSAz
ODIsMzkwIC0tLS0KICAjaWZuZGVmIE5ERUJVRyAgICAgICAgCiAgICAgICAgICBzdGF0aWMgYm9v
bCBzX2R1bXBzR2VuZXJhdGVkQ29kZTsKICAjZW5kaWYKKyAKKyAgICAgICAgIHVuc2lnbmVkIG1f
ZW1pdE5vZGVEZXB0aDsKKyAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX21heEVtaXRO
b2RlRGVwdGggPSAxMDAwOwogICAgICB9OwogIAogIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25587</attachid>
            <date>2008-11-29 01:05:22 -0800</date>
            <delta_ts>2008-12-01 01:09:08 -0800</delta_ts>
            <desc>Proposed patch to change interface of SegmentedVector</desc>
            <filename>segmented.diff</filename>
            <type>text/plain</type>
            <size>3871</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IGJ5dGVjb21waWxlci9TZWdtZW50ZWRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBieXRl
Y29tcGlsZXIvU2VnbWVudGVkVmVjdG9yLmgJKHJldmlzaW9uIDM4ODM4KQorKysgYnl0ZWNvbXBp
bGVyL1NlZ21lbnRlZFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSwxNSArODUsMjAgQEAK
ICAgICAgICAgICAgIHJldHVybiBtX3NlZ21lbnRzW2luZGV4IC8gU2VnbWVudFNpemVdLT5hdChp
bmRleCAlIFNlZ21lbnRTaXplKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgcmVzaXplKHNp
emVfdCBzaXplKQorICAgICAgICB2b2lkIHJlc2VydmVDYXBhY2l0eShzaXplX3QgbmV3Q2FwYWNp
dHkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzaXplIDwgbV9zaXplKQotICAgICAgICAg
ICAgICAgIHNocmluayhzaXplKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHNpemUgPiBtX3NpemUp
Ci0gICAgICAgICAgICAgICAgZ3JvdyhzaXplKTsKLSAgICAgICAgICAgIEFTU0VSVChzaXplID09
IG1fc2l6ZSk7CisgICAgICAgICAgICBpZiAobmV3Q2FwYWNpdHkgPiBtX3NpemUpCisgICAgICAg
ICAgICAgICAgZ3JvdyhuZXdDYXBhY2l0eSk7CisgICAgICAgICAgICBBU1NFUlQobmV3Q2FwYWNp
dHkgPT0gbV9zaXplKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgY2xlYXIoKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAobV9zaXplICE9IDApCisgICAgICAgICAgICAgICAgc2hyaW5r
KDApOworICAgICAgICAgICAgQVNTRVJUKG1fc2l6ZSA9PSAwKTsKKyAgICAgICAgfQorCiAgICAg
cHJpdmF0ZToKICAgICAgICAgdm9pZCBzaHJpbmsoc2l6ZV90IHNpemUpCiAgICAgICAgIHsKSW5k
ZXg6IGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMzg4MzgpCisrKyBieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDIsNyAr
MjQyLDcgQEAKICAgICBtX2dsb2JhbFZhclN0b3JhZ2VPZmZzZXQgPSAtUmVnaXN0ZXJGaWxlOjpD
YWxsRnJhbWVIZWFkZXJTaXplIC0gbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMgLSByZWdpc3Rl
ckZpbGUtPnNpemUoKTsKIAogICAgIC8vIEFkZCBwcmV2aW91c2x5IGRlZmluZWQgc3ltYm9scyB0
byBib29ra2VlcGluZy4KLSAgICBtX2dsb2JhbHMucmVzaXplKHN5bWJvbFRhYmxlLT5zaXplKCkp
OworICAgIG1fZ2xvYmFscy5yZXNlcnZlQ2FwYWNpdHkoc3ltYm9sVGFibGUtPnNpemUoKSk7CiAg
ICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGVuZCA9IHN5bWJvbFRhYmxlLT5lbmQoKTsKICAgICBm
b3IgKFN5bWJvbFRhYmxlOjppdGVyYXRvciBpdCA9IHN5bWJvbFRhYmxlLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCiAgICAgICAgIHJlZ2lzdGVyRm9yKGl0LT5zZWNvbmQuZ2V0SW5kZXgoKSku
c2V0SW5kZXgoaXQtPnNlY29uZC5nZXRJbmRleCgpICsgbV9nbG9iYWxWYXJTdG9yYWdlT2Zmc2V0
KTsKQEAgLTM0MSw3ICszNDEsNyBAQAogICAgIGNvbnN0IElkZW50aWZpZXIqIHBhcmFtZXRlcnMg
PSBmdW5jdGlvbkJvZHktPnBhcmFtZXRlcnMoKTsKICAgICBzaXplX3QgcGFyYW1ldGVyQ291bnQg
PSBmdW5jdGlvbkJvZHktPnBhcmFtZXRlckNvdW50KCk7CiAgICAgbV9uZXh0UGFyYW1ldGVySW5k
ZXggPSAtUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gcGFyYW1ldGVyQ291bnQg
LSAxOwotICAgIG1fcGFyYW1ldGVycy5yZXNpemUoMSArIHBhcmFtZXRlckNvdW50KTsgLy8gcmVz
ZXJ2ZSBzcGFjZSBmb3IgInRoaXMiCisgICAgbV9wYXJhbWV0ZXJzLnJlc2VydmVDYXBhY2l0eSgx
ICsgcGFyYW1ldGVyQ291bnQpOyAvLyByZXNlcnZlIHNwYWNlIGZvciAidGhpcyIKIAogICAgIC8v
IEFkZCAidGhpcyIgYXMgYSBwYXJhbWV0ZXIKICAgICBtX3RoaXNSZWdpc3Rlci5zZXRJbmRleCht
X25leHRQYXJhbWV0ZXJJbmRleCk7CkluZGV4OiBDaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQ2hh
bmdlTG9nCShyZXZpc2lvbiAzODgzOCkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDI3IEBACisyMDA4LTExLTI5ICBDYW1lcm9uIFp3YXJpY2ggIDx6d2FyaWNoQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQ
cmVsaW1pbmFyeSB3b3JrIGZvciBidWcgMjAzNDA6IFNlZ21lbnRlZFZlY3RvciBzZWdtZW50IGFs
bG9jYXRpb25zIGNhbiBsZWFkIHRvIHVuc2FmZSB1c2Ugb2YgdGVtcG9yYXJ5IHJlZ2lzdGVycwor
ICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzQwPgor
CisgICAgICAgIFNlZ21lbnRlZFZlY3RvciBjdXJyZW50bHkgZnJlZXMgc2VnbWVudHMgYW5kIHJl
YWxsb2NhdGVzIHRoZW0gd2hlbiB1c2VkCisgICAgICAgIGFzIGEgc3RhY2suIFRoaXMgY2FuIGxl
YWQgdG8gdW5zYWZlIHVzZSBvZiBwb2ludGVycyBpbnRvIGZyZWVkIHNlZ21lbnRzLgorCisgICAg
ICAgIEluIG9yZGVyIHRvIGZpeCB0aGlzIHByb2JsZW0sIFNlZ21lbnRlZFZlY3RvciB3aWxsIGJl
IGNoYW5nZWQgdG8gb25seQorICAgICAgICBncm93IGFuZCBuZXZlciBzaHJpbmssIHdpdGggdGhl
IHNvbGUgZXhjZXB0aW9uIG9mIGNsZWFyaW5nIGFsbCBvZiBpdHMKKyAgICAgICAgZGF0YSwgYSBj
YXBhYmlsaXR5IHRoYXQgaXMgcmVxdWlyZWQgYnkgTGV4ZXIuCisKKyAgICAgICAgKiBieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IpOiBVc2UgcmVzZXJ2ZUNhcGFjaXR5KCkKKyAgICAgICAg
aW5zdGVhZCBvZiByZXNpemUoKSBmb3IgbV9nbG9iYWxzIGFuZCBtX3BhcmFtZXRlcnMuCisgICAg
ICAgICogYnl0ZWNvbXBpbGVyL1NlZ21lbnRlZFZlY3Rvci5oOgorICAgICAgICAoSlNDOjpTZWdt
ZW50ZWRWZWN0b3I6OnJlc2l6ZSk6IFJlbW92ZS4KKyAgICAgICAgKEpTQzo6U2VnbWVudGVkVmVj
dG9yOjpyZXNlcnZlQ2FwYWNpdHkpOiBBZGQuCisgICAgICAgIChKU0M6OlNlZ21lbnRlZFZlY3Rv
cjo6Y2xlYXIpOiBBZGQuCisgICAgICAgICogcGFyc2VyL0xleGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6TGV4ZXI6OmNsZWFyKTogVXNlIGNsZWFyKCkgaW5zdGVhZCBvZiByZXNpemUoMCkuCisKIDIw
MDgtMTEtMjggIFNpbW9uIEhhdXNtYW5uICA8aGF1c21hbm5Ad2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBUb3IgQXJuZSBWZXN0YsO4LgpJbmRleDogcGFyc2VyL0xleGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBwYXJzZXIvTGV4ZXIuY3BwCShyZXZpc2lvbiAzODgzOCkKKysrIHBhcnNl
ci9MZXhlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4MCw3ICs4ODAsNyBAQAogCiB2b2lkIExl
eGVyOjpjbGVhcigpCiB7Ci0gICAgbV9pZGVudGlmaWVycy5yZXNpemUoMCk7CisgICAgbV9pZGVu
dGlmaWVycy5jbGVhcigpOwogCiAgICAgVmVjdG9yPGNoYXI+IG5ld0J1ZmZlcjg7CiAgICAgbmV3
QnVmZmVyOC5yZXNlcnZlQ2FwYWNpdHkoaW5pdGlhbFJlYWRCdWZmZXJDYXBhY2l0eSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25622</attachid>
            <date>2008-12-01 03:17:50 -0800</date>
            <delta_ts>2008-12-01 17:46:53 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>segments.diff</filename>
            <type>text/plain</type>
            <size>7090</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IGJ5dGVjb21waWxlci9TZWdtZW50ZWRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBieXRl
Y29tcGlsZXIvU2VnbWVudGVkVmVjdG9yLmgJKHJldmlzaW9uIDM4ODU2KQorKysgYnl0ZWNvbXBp
bGVyL1NlZ21lbnRlZFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAg
ICAgcHVibGljOgogICAgICAgICBTZWdtZW50ZWRWZWN0b3IoKQogICAgICAgICAgICAgOiBtX3Np
emUoMCkKKyAgICAgICAgICAgICwgbV9jdXJyZW50U2VnbWVudEluZGV4KDApCiAgICAgICAgIHsK
ICAgICAgICAgICAgIG1fc2VnbWVudHMuYXBwZW5kKCZtX2lubGluZVNlZ21lbnQpOwogICAgICAg
ICB9CkBAIC01MCwxNCArNTEsMTcgQEAKICAgICAgICAgVCYgbGFzdCgpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIEFTU0VSVChtX3NpemUpOwotICAgICAgICAgICAgcmV0dXJuIG1fc2VnbWVudHMu
bGFzdCgpLT5sYXN0KCk7CisgICAgICAgICAgICByZXR1cm4gbV9zZWdtZW50c1ttX2N1cnJlbnRT
ZWdtZW50SW5kZXhdLT5sYXN0KCk7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVT4gdm9pZCBhcHBlbmQoY29uc3QgVSYgdmFsdWUpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGlmICghKG1fc2l6ZSAlIFNlZ21lbnRTaXplKSAmJiBtX3NpemUpCi0gICAgICAgICAgICAg
ICAgbV9zZWdtZW50cy5hcHBlbmQobmV3IFNlZ21lbnQpOwotICAgICAgICAgICAgbV9zZWdtZW50
cy5sYXN0KCktPnVuY2hlY2tlZEFwcGVuZCh2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIShtX3Np
emUgJSBTZWdtZW50U2l6ZSkgJiYgbV9zaXplKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fY3Vy
cmVudFNlZ21lbnRJbmRleCA9PSBtX3NlZ21lbnRzLnNpemUoKSAtIDEpCisgICAgICAgICAgICAg
ICAgICAgIG1fc2VnbWVudHMuYXBwZW5kKG5ldyBTZWdtZW50KTsKKyAgICAgICAgICAgICAgICBt
X2N1cnJlbnRTZWdtZW50SW5kZXgrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fc2Vn
bWVudHNbbV9jdXJyZW50U2VnbWVudEluZGV4XS0+dW5jaGVja2VkQXBwZW5kKHZhbHVlKTsKICAg
ICAgICAgICAgIG1fc2l6ZSsrOwogICAgICAgICB9CiAKQEAgLTY1LDExICs2OSw5IEBACiAgICAg
ICAgIHsKICAgICAgICAgICAgIEFTU0VSVChtX3NpemUpOwogICAgICAgICAgICAgbV9zaXplLS07
Ci0gICAgICAgICAgICBtX3NlZ21lbnRzLmxhc3QoKS0+cmVtb3ZlTGFzdCgpOwotICAgICAgICAg
ICAgaWYgKCEobV9zaXplICUgU2VnbWVudFNpemUpICYmIG1fc2l6ZSA+PSBTZWdtZW50U2l6ZSkg
ewotICAgICAgICAgICAgICAgIGRlbGV0ZSBtX3NlZ21lbnRzLmxhc3QoKTsKLSAgICAgICAgICAg
ICAgICBtX3NlZ21lbnRzLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IG1fc2VnbWVudHNbbV9jdXJyZW50U2VnbWVudEluZGV4XS0+cmVtb3ZlTGFzdCgpOworICAgICAg
ICAgICAgaWYgKCEobV9zaXplICUgU2VnbWVudFNpemUpICYmIG1fc2l6ZSA+PSBTZWdtZW50U2l6
ZSkKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRTZWdtZW50SW5kZXgtLTsKICAgICAgICAgfQog
CiAgICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QKQEAgLTg1LDM1ICs4NywzNSBAQAogICAgICAg
ICAgICAgcmV0dXJuIG1fc2VnbWVudHNbaW5kZXggLyBTZWdtZW50U2l6ZV0tPmF0KGluZGV4ICUg
U2VnbWVudFNpemUpOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCByZXNlcnZlQ2FwYWNpdHko
c2l6ZV90IG5ld0NhcGFjaXR5KQorICAgICAgICB2b2lkIGdyb3coc2l6ZV90IG5ld1NpemUpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChuZXdDYXBhY2l0eSA8PSBtX3NpemUpCisgICAgICAg
ICAgICBpZiAobmV3U2l6ZSA8PSBtX3NpemUpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgICAgICBpZiAobmV3Q2FwYWNpdHkgPD0gU2VnbWVudFNpemUpIHsKLSAgICAgICAgICAg
ICAgICBtX2lubGluZVNlZ21lbnQucmVzaXplKG5ld0NhcGFjaXR5KTsKLSAgICAgICAgICAgICAg
ICBtX3NpemUgPSBuZXdDYXBhY2l0eTsKKyAgICAgICAgICAgIGlmIChuZXdTaXplIDw9IFNlZ21l
bnRTaXplKSB7CisgICAgICAgICAgICAgICAgbV9pbmxpbmVTZWdtZW50LnJlc2l6ZShuZXdTaXpl
KTsKKyAgICAgICAgICAgICAgICBtX3NpemUgPSBuZXdTaXplOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgc2l6ZV90IG51bVNlZ21lbnRzID0g
bmV3Q2FwYWNpdHkgLyBTZWdtZW50U2l6ZTsKLSAgICAgICAgICAgIHNpemVfdCBleHRyYSA9IG5l
d0NhcGFjaXR5ICUgU2VnbWVudFNpemU7CisgICAgICAgICAgICBzaXplX3QgbmV3TnVtU2VnbWVu
dHMgPSBuZXdTaXplIC8gU2VnbWVudFNpemU7CisgICAgICAgICAgICBzaXplX3QgZXh0cmEgPSBu
ZXdTaXplICUgU2VnbWVudFNpemU7CiAgICAgICAgICAgICBpZiAoZXh0cmEpCi0gICAgICAgICAg
ICAgICAgbnVtU2VnbWVudHMrKzsKLSAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gbV9zZWdt
ZW50cy5zaXplKCk7CisgICAgICAgICAgICAgICAgbmV3TnVtU2VnbWVudHMrKzsKKyAgICAgICAg
ICAgIHNpemVfdCBvbGROdW1TZWdtZW50cyA9IG1fc2VnbWVudHMuc2l6ZSgpOwogCi0gICAgICAg
ICAgICBpZiAobnVtU2VnbWVudHMgPT0gb2xkU2l6ZSkgeworICAgICAgICAgICAgaWYgKG5ld051
bVNlZ21lbnRzID09IG9sZE51bVNlZ21lbnRzKSB7CiAgICAgICAgICAgICAgICAgbV9zZWdtZW50
cy5sYXN0KCktPnJlc2l6ZShleHRyYSk7Ci0gICAgICAgICAgICAgICAgbV9zaXplID0gbmV3Q2Fw
YWNpdHk7CisgICAgICAgICAgICAgICAgbV9zaXplID0gbmV3U2l6ZTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1fc2VnbWVudHMubGFzdCgp
LT5yZXNpemUoU2VnbWVudFNpemUpOwogCi0gICAgICAgICAgICBtX3NlZ21lbnRzLnJlc2l6ZShu
dW1TZWdtZW50cyk7CisgICAgICAgICAgICBtX3NlZ21lbnRzLnJlc2l6ZShuZXdOdW1TZWdtZW50
cyk7CiAKLSAgICAgICAgICAgIEFTU0VSVChvbGRTaXplIDwgbV9zZWdtZW50cy5zaXplKCkpOwot
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCAobnVtU2VnbWVudHMgLSAx
KTsgaSsrKSB7CisgICAgICAgICAgICBBU1NFUlQob2xkTnVtU2VnbWVudHMgPCBtX3NlZ21lbnRz
LnNpemUoKSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkTnVtU2VnbWVudHM7IGkg
PCAobmV3TnVtU2VnbWVudHMgLSAxKTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgU2VnbWVudCog
c2VnbWVudCA9IG5ldyBTZWdtZW50OwogICAgICAgICAgICAgICAgIHNlZ21lbnQtPnJlc2l6ZShT
ZWdtZW50U2l6ZSk7CiAgICAgICAgICAgICAgICAgbV9zZWdtZW50c1tpXSA9IHNlZ21lbnQ7CkBA
IC0xMjEsOCArMTIzLDkgQEAKIAogICAgICAgICAgICAgU2VnbWVudCogc2VnbWVudCA9IG5ldyBT
ZWdtZW50OwogICAgICAgICAgICAgc2VnbWVudC0+cmVzaXplKGV4dHJhID8gZXh0cmEgOiBTZWdt
ZW50U2l6ZSk7Ci0gICAgICAgICAgICBtX3NlZ21lbnRzW251bVNlZ21lbnRzIC0gMV0gPSBzZWdt
ZW50OwotICAgICAgICAgICAgbV9zaXplID0gbmV3Q2FwYWNpdHk7CisgICAgICAgICAgICBtX2N1
cnJlbnRTZWdtZW50SW5kZXggPSBuZXdOdW1TZWdtZW50cyAtIDE7CisgICAgICAgICAgICBtX3Nl
Z21lbnRzW21fY3VycmVudFNlZ21lbnRJbmRleF0gPSBzZWdtZW50OworICAgICAgICAgICAgbV9z
aXplID0gbmV3U2l6ZTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgY2xlYXIoKQpAQCAtMTMx
LDEyICsxMzQsMTYgQEAKICAgICAgICAgICAgICAgICBkZWxldGUgbV9zZWdtZW50c1tpXTsKICAg
ICAgICAgICAgIG1fc2VnbWVudHMucmVzaXplKDEpOwogICAgICAgICAgICAgbV9pbmxpbmVTZWdt
ZW50LnJlc2l6ZSgwKTsKKyAgICAgICAgICAgIG1fY3VycmVudFNlZ21lbnRJbmRleCA9IDA7CiAg
ICAgICAgICAgICBtX3NpemUgPSAwOwogICAgICAgICB9CiAKICAgICBwcml2YXRlOgogICAgICAg
ICB0eXBlZGVmIFZlY3RvcjxULCBTZWdtZW50U2l6ZT4gU2VnbWVudDsKKwogICAgICAgICBzaXpl
X3QgbV9zaXplOworICAgICAgICBzaXplX3QgbV9jdXJyZW50U2VnbWVudEluZGV4OworCiAgICAg
ICAgIFNlZ21lbnQgbV9pbmxpbmVTZWdtZW50OwogICAgICAgICBWZWN0b3I8U2VnbWVudCosIDMy
PiBtX3NlZ21lbnRzOwogICAgIH07CkluZGV4OiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJ
KHJldmlzaW9uIDM4ODU2KQorKysgYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQyLDcgKzI0Miw3IEBACiAgICAgbV9nbG9iYWxWYXJTdG9yYWdl
T2Zmc2V0ID0gLVJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIG1fY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzIC0gcmVnaXN0ZXJGaWxlLT5zaXplKCk7CiAKICAgICAvLyBBZGQgcHJl
dmlvdXNseSBkZWZpbmVkIHN5bWJvbHMgdG8gYm9va2tlZXBpbmcuCi0gICAgbV9nbG9iYWxzLnJl
c2VydmVDYXBhY2l0eShzeW1ib2xUYWJsZS0+c2l6ZSgpKTsKKyAgICBtX2dsb2JhbHMuZ3Jvdyhz
eW1ib2xUYWJsZS0+c2l6ZSgpKTsKICAgICBTeW1ib2xUYWJsZTo6aXRlcmF0b3IgZW5kID0gc3lt
Ym9sVGFibGUtPmVuZCgpOwogICAgIGZvciAoU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ID0gc3lt
Ym9sVGFibGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgcmVnaXN0ZXJGb3Io
aXQtPnNlY29uZC5nZXRJbmRleCgpKS5zZXRJbmRleChpdC0+c2Vjb25kLmdldEluZGV4KCkgKyBt
X2dsb2JhbFZhclN0b3JhZ2VPZmZzZXQpOwpAQCAtMzQxLDcgKzM0MSw3IEBACiAgICAgY29uc3Qg
SWRlbnRpZmllciogcGFyYW1ldGVycyA9IGZ1bmN0aW9uQm9keS0+cGFyYW1ldGVycygpOwogICAg
IHNpemVfdCBwYXJhbWV0ZXJDb3VudCA9IGZ1bmN0aW9uQm9keS0+cGFyYW1ldGVyQ291bnQoKTsK
ICAgICBtX25leHRQYXJhbWV0ZXJJbmRleCA9IC1SZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRl
clNpemUgLSBwYXJhbWV0ZXJDb3VudCAtIDE7Ci0gICAgbV9wYXJhbWV0ZXJzLnJlc2VydmVDYXBh
Y2l0eSgxICsgcGFyYW1ldGVyQ291bnQpOyAvLyByZXNlcnZlIHNwYWNlIGZvciAidGhpcyIKKyAg
ICBtX3BhcmFtZXRlcnMuZ3JvdygxICsgcGFyYW1ldGVyQ291bnQpOyAvLyByZXNlcnZlIHNwYWNl
IGZvciAidGhpcyIKIAogICAgIC8vIEFkZCAidGhpcyIgYXMgYSBwYXJhbWV0ZXIKICAgICBtX3Ro
aXNSZWdpc3Rlci5zZXRJbmRleChtX25leHRQYXJhbWV0ZXJJbmRleCk7CkluZGV4OiBDaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gQ2hhbmdlTG9nCShyZXZpc2lvbiAzODg1OCkKKysrIENoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDA4LTEyLTAxICBDYW1lcm9uIFp3
YXJpY2ggIDx6d2FyaWNoQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBCdWcgMjAzNDA6IFNlZ21lbnRlZFZlY3RvciBzZWdtZW50IGFs
bG9jYXRpb25zIGNhbiBsZWFkIHRvIHVuc2FmZSB1c2Ugb2YgdGVtcG9yYXJ5IHJlZ2lzdGVycwor
ICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzQwPgor
CisgICAgICAgIFNlZ21lbnRlZFZlY3RvciBjdXJyZW50bHkgZnJlZXMgc2VnbWVudHMgYW5kIHJl
YWxsb2NhdGVzIHRoZW0gd2hlbiB1c2VkCisgICAgICAgIGFzIGEgc3RhY2suIFRoaXMgY2FuIGxl
YWQgdG8gdW5zYWZlIHVzZSBvZiBwb2ludGVycyBpbnRvIGZyZWVkIHNlZ21lbnRzLgorCisgICAg
ICAgIEluIG9yZGVyIHRvIGZpeCB0aGlzIHByb2JsZW0sIFNlZ21lbnRlZFZlY3RvciB3aWxsIGJl
IGNoYW5nZWQgdG8gb25seQorICAgICAgICBncm93IGFuZCBuZXZlciBzaHJpbmsuIEFsc28sIHJl
bmFtZSB0aGUgcmVzZXJ2ZUNhcGFjaXR5KCkgbWVtYmVyCisgICAgICAgIGZ1bmN0aW9uIHRvIGdy
b3coKSB0byBtYXRjaCB0aGUgYWN0dWFsIHVzYWdlIGluIEJ5dGVjb2RlR2VuZXJhdG9yLCB3aGVy
ZQorICAgICAgICB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gYWxsb2NhdGUgYSBncm91cCBvZiBy
ZWdpc3RlcnMgYXQgb25jZSwgcmF0aGVyCisgICAgICAgIHRoYW4gbWVyZWx5IHNhdmluZyBzcGFj
ZSBmb3IgdGhlbS4KKworICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcik6
IFVzZSBncm93KCkgaW5zdGVhZCBvZiAKKyAgICAgICAgcmVzZXJ2ZUNhcGFjaXR5KCkuCisgICAg
ICAgICogYnl0ZWNvbXBpbGVyL1NlZ21lbnRlZFZlY3Rvci5oOgorICAgICAgICAoSlNDOjpTZWdt
ZW50ZWRWZWN0b3I6OlNlZ21lbnRlZFZlY3Rvcik6CisgICAgICAgIChKU0M6OlNlZ21lbnRlZFZl
Y3Rvcjo6bGFzdCk6CisgICAgICAgIChKU0M6OlNlZ21lbnRlZFZlY3Rvcjo6YXBwZW5kKToKKyAg
ICAgICAgKEpTQzo6U2VnbWVudGVkVmVjdG9yOjpyZW1vdmVMYXN0KToKKyAgICAgICAgKEpTQzo6
U2VnbWVudGVkVmVjdG9yOjpncm93KTogUmVuYW1lZCBmcm9tIHJlc2VydmVDYXBhY2l0eSgpLgor
ICAgICAgICAoSlNDOjpTZWdtZW50ZWRWZWN0b3I6OmNsZWFyKToKKwogMjAwOC0xMS0yOSAgR2F2
aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgQ2Ftcm9uIFp3YXJpY2guCg==
</data>
<flag name="review"
          id="11939"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>