<?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>25172</bug_id>
          
          <creation_ts>2009-04-13 19:43:28 -0700</creation_ts>
          <short_desc>Extra partial layout during the first keypress in an empty block</short_desc>
          <delta_ts>2009-04-14 11:48:58 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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="Justin Garcia">justin.garcia</reporter>
          <assigned_to name="Justin Garcia">justin.garcia</assigned_to>
          <cc>adele</cc>
    
    <cc>eric</cc>
    
    <cc>kmccullough</cc>
    
    <cc>kocienda</cc>
    
    <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>117404</commentid>
    <comment_count>0</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-04-13 19:43:28 -0700</bug_when>
    <thetext>Within InsertTextCommand::input, it looks like on every normal keypress, we do one layout. On the first keypress, we will layout twice.

On a normal keypress, the progression is normally:
  insertTextIntoNode(textNode, offset, text) =&gt; setNeedsLayout
  setEndingSelection(Selection(endingSelection().end(), endingSelection().affinity()))) =&gt; updateLayout

On the first keypress, this is now:
  startPosition = prepareForTextInsertion(startPosition) =&gt; setNeedsLayout
  removePlaceholderAt(VisiblePosition(startPosition)); =&gt; updateLayout
then
  insertTextIntoNode(textNode, offset, text) =&gt; setNeedsLayout
  setEndingSelection(Selection(endingSelection().end(), endingSelection().affinity()))) =&gt; updateLayout

&lt;rdar://problem/6777744&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117405</commentid>
    <comment_count>1</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-04-13 19:45:27 -0700</bug_when>
    <thetext>We shouldn&apos;t create a VisiblePosition when we remove the placeholder, since at that time there is a pending layout that will be triggered by the creation.  We should find out if we need to remove a placeholder early in input(), and then remove it after we&apos;ve prepared the block for insertion.  If we remove the placeholder too early, the block will collapse...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117427</commentid>
    <comment_count>2</comment_count>
      <attachid>29458</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-04-13 22:17:44 -0700</bug_when>
    <thetext>Created attachment 29458
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117428</commentid>
    <comment_count>3</comment_count>
      <attachid>29459</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-04-13 22:19:26 -0700</bug_when>
    <thetext>Created attachment 29459
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117491</commentid>
    <comment_count>4</comment_count>
      <attachid>29476</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-04-14 11:08:04 -0700</bug_when>
    <thetext>Created attachment 29476
patch

updated changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117493</commentid>
    <comment_count>5</comment_count>
      <attachid>29459</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-14 11:11:54 -0700</bug_when>
    <thetext>Comment on attachment 29459
patch

You should use the new Position functions.

position.node()-&gt;hasTagName(brTag)

should be anchorNode() and position.m_offset == 0 should be isAtFirstEditingPosition() (or whatever it&apos;s called)

The other two position.m_offset calls in that function can be position.offsetInContainerNode() calls.


Why is:
+    if (p.node()-&gt;hasTagName(brTag)) {

needed if you ASSERTED that the position before was a br?  also .node() should be .anchorNode() or containerNode() here.

Otherwise this looks fine.

Is there no way for us to test this?  I assume this only affects performance? not any functional change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117499</commentid>
    <comment_count>6</comment_count>
      <attachid>29477</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-04-14 11:35:55 -0700</bug_when>
    <thetext>Created attachment 29477
patch

addresses eric&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117501</commentid>
    <comment_count>7</comment_count>
      <attachid>29477</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-14 11:43:16 -0700</bug_when>
    <thetext>Comment on attachment 29477
patch

Looks fine.  Please add a comment to the ChangeLog about why there is no test. :)

I can see why you said that you thought offsetInContainerNode() should be renamed offsetInAnchorNode().  Now that containerNode() got renamed computeContainerNode() you end up using anchorNode() instead.  Maybe we want a containerNode() accessor which ASSERTS like offsetInContainerNode() does.

Anyway, that&apos;s a discussion for another bug (or email thread).

r+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117502</commentid>
    <comment_count>8</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-04-14 11:48:58 -0700</bug_when>
    <thetext>trac.webkit.org/changeset/42507</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29458</attachid>
            <date>2009-04-13 22:17:44 -0700</date>
            <delta_ts>2009-04-13 22:19:26 -0700</delta_ts>
            <desc>patch</desc>
            <filename>extralayout.txt</filename>
            <type>text/plain</type>
            <size>15409</size>
            <attacher name="Justin Garcia">justin.garcia</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQyNDc2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAKKzIwMDktMDQt
MTMgIEp1c3RpbiBHYXJjaWEgIDxqdXN0aW4uZ2FyY2lhQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjUxNzIKKyAgICAgICAgRXh0cmEgcGFydGlhbCBsYXlvdXQg
ZHVyaW5nIHRoZSBmaXJzdCBrZXlwcmVzcyBpbiBhbiBlbXB0eSBibG9jaworICAgICAgICAKKyAg
ICAgICAgRGV0ZXJtaW5pbmcgaWYgYSBwbGFjZWhvbGRlciBuZWVkcyB0byBiZSByZW1vdmVkIHJl
cXVpcmVzIHRoZSBjcmVhdGlvbiBvZiBhIFZpc2libGVQb3NpdGlvbiAKKyAgICAgICAgd2hpY2gg
d2FzIHRyaWdnZXJpbmcgbGF5b3V0IGJlZm9yZSB3ZSB3ZXJlIGZpbmlzaGVkIG1vZGlmeWluZyB0
aGUgRE9NIGZvciB0aGUgaW5zZXJ0IG9wZXJhdGlvbi4KKyAgICAgICAgCisgICAgICAgIEZpbmQg
b3V0IGlmIHdlIG5lZWQgdG8gcmVtb3ZlIGEgcGxhY2Vob2xkZXIgbmVhciB0aGUgc3RhcnQgb2Yg
dGhlIG9wZXJhdGlvbiwgYW5kIGlmIHdlIGRvIHJlbWVtYmVyIAorICAgICAgICB3aGVyZSBpdCdz
IGxvY2F0ZWQuICBUaGVuLCB3aGVuIGl0J3Mgc2FmZSB0byByZW1vdmUgcmVtb3ZlIGl0IGFsb25n
IHdpdGggYWxsIG9mIHRoZSBvdGhlciBET00gb3BlcmF0aW9ucyAKKyAgICAgICAgd2UgcGVyZm9y
bS4KKyAgICAgICAgCisgICAgICAgIFJlbmFtZWQgbGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbiB0
byBsaW5lQnJlYWtFeGlzdHNBdFZpc2libGVQb3NpdGlvbiBhbmQgYWRkZWQgYSBsaW5lQnJlYWtF
eGlzdHNBdFBvc2l0aW9uCisgICAgICAgIHRoYXQgdGFrZXMgaW4gYSBQb3NpdGlvbi4gIEluIElu
c2VydFRleHRDb21tYW5kLCB3ZSBjYW4gdXNlIHRoZSBsYXR0ZXIsIHNpbmNlIHdlJ3JlIHVzaW5n
IGEgc2VsZWN0aW9uIGVuZHBvaW50LAorICAgICAgICB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIG5v
cm1hbGl6ZWQuCisKKyAgICAgICAgKiBlZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6ZG9BcHBseSk6Cisg
ICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlUGxhY2Vob2xkZXJBdCk6CisgICAgICAg
IChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXB0eU1haWxCbG9j
a3F1b3RlZFBhcmFncmFwaCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6cG9zaXRpb25Bdm9pZGluZ1NwZWNpYWxFbGVtZW50Qm91bmRhcnkpOgorICAgICAgICAqIGVk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29t
bWFuZDo6Y2FsY3VsYXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0Zv
cm1hdEJsb2NrQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtYXRCbG9ja0NvbW1h
bmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KToK
KyAgICAgICAgKiBlZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG9BcHBs
eSk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNlcnRUZXh0Q29tbWFuZDo6aW5wdXQpOgorICAgICAgICAqIGVkaXRpbmcvaHRt
bGVkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGluZUJyZWFrRXhpc3RzQXRWaXNpYmxl
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6bGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbik6
CisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5oOgorCiAyMDA5LTA0LTEzICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQ2FtZXJv
biBad2FyaWNoLgpJbmRleDogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDQyNDYz
KQorKysgZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYwMywyNCArNjAzLDE4IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLS8vIFJlbW92ZXMgJ1xuJ3Mg
YW5kIGJycyB0aGF0IHdpbGwgY29sbGFwc2Ugd2hlbiBjb250ZW50IGlzIGluc2VydGVkIGp1c3Qg
YmVmb3JlIHRoZW0uCi0vLyBGSVhNRTogV2Ugc2hvdWxkbid0IHJlYWxseSBoYXZlIHRvIHJlbW92
ZSBwbGFjZWhvbGRlcnMsIGJ1dCByZW1vdmluZyB0aGVtIGlzIGEgd29ya2Fyb3VuZCBmb3IgOTY2
MS4KLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZVBsYWNlaG9sZGVyQXQoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCisvLyBBc3N1bWVzIHRoYXQgdGhlIHBv
c2l0aW9uIGlzIGF0IGEgcGxhY2Vob2xkZXIgYW5kIGRvZXMgdGhlIHJlbW92YWwgd2l0aG91dCBt
dWNoIGNoZWNraW5nLgordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlUGxhY2Vob2xk
ZXJBdChjb25zdCBQb3NpdGlvbiYgcCkKIHsKLSAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVs
bCgpKQorICAgIEFTU0VSVChsaW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uKHApKTsKKyAgICAKKyAg
ICBpZiAocC5ub2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpKSB7CisgICAgICAgIHJlbW92ZU5vZGUo
cC5ub2RlKCkpOwogICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIFBvc2l0aW9uIHAgPSB2
aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCk7Ci0gICAgLy8gSWYg
YSBiciBvciAnXG4nIGlzIGF0IHRoZSBlbmQgb2YgYSBibG9jayBhbmQgbm90IGF0IHRoZSBzdGFy
dCBvZiBhIHBhcmFncmFwaCwKLSAgICAvLyB0aGVuIGl0IGlzIHN1cGVyZmx1b3VzLCBzbyBhZGRp
bmcgY29udGVudCBiZWZvcmUgYSBiciBvciAnXG4nIHRoYXQgaXMgYXQKLSAgICAvLyB0aGUgc3Rh
cnQgb2YgYSBwYXJhZ3JhcGggd2lsbCByZW5kZXIgaXQgc3VwZXJmbHVvdXMuCi0gICAgLy8gRklY
TUU6IFRoaXMgZG9lc24ndCByZW1vdmUgcGxhY2Vob2xkZXJzIGF0IHRoZSBlbmQgb2YgYW5vbnlt
b3VzIGJsb2Nrcy4KLSAgICBpZiAoaXNFbmRPZkJsb2NrKHZpc2libGVQb3NpdGlvbikgJiYgaXNT
dGFydE9mUGFyYWdyYXBoKHZpc2libGVQb3NpdGlvbikpIHsKLSAgICAgICAgaWYgKHAubm9kZSgp
LT5oYXNUYWdOYW1lKGJyVGFnKSAmJiBwLm1fb2Zmc2V0ID09IDApCi0gICAgICAgICAgICByZW1v
dmVOb2RlKHAubm9kZSgpKTsKLSAgICAgICAgZWxzZSBpZiAobGluZUJyZWFrRXhpc3RzQXRQb3Np
dGlvbih2aXNpYmxlUG9zaXRpb24pKQotICAgICAgICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKHN0
YXRpY19jYXN0PFRleHQqPihwLm5vZGUoKSksIHAubV9vZmZzZXQsIDEpOwogICAgIH0KKyAgICAK
KyAgICAvLyBQcmVzZXJ2ZWQgbmV3bGluZS4KKyAgICBkZWxldGVUZXh0RnJvbU5vZGUoc3RhdGlj
X2Nhc3Q8VGV4dCo+KHAubm9kZSgpKSwgcC5tX29mZnNldCwgMSk7CiB9CiAKIFBhc3NSZWZQdHI8
Tm9kZT4gQ29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5ld0RlZmF1bHRQYXJhZ3JhcGhFbGVt
ZW50QXQoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQpAQCAtODI1LDcgKzgxOSw3IEBACiAgICAg
ICAgIC8vIGV4cGVjdHMgdGhpcyBiZWhhdmlvcikuCiAgICAgICAgIGVsc2UgaWYgKGlzQmxvY2so
bm9kZSkpCiAgICAgICAgICAgICByZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMobm9kZSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGxpbmVCcmVha0V4aXN0c0F0UG9zaXRpb24oY2FyZXRBZnRlckRlbGV0
ZSkpIHsKKyAgICAgICAgZWxzZSBpZiAobGluZUJyZWFrRXhpc3RzQXRWaXNpYmxlUG9zaXRpb24o
Y2FyZXRBZnRlckRlbGV0ZSkpIHsKICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgcHJlc2VydmVk
ICdcbicgYXQgY2FyZXRBZnRlckRlbGV0ZS4KICAgICAgICAgICAgIFRleHQqIHRleHROb2RlID0g
c3RhdGljX2Nhc3Q8VGV4dCo+KG5vZGUpOwogICAgICAgICAgICAgaWYgKHRleHROb2RlLT5sZW5n
dGgoKSA9PSAxKQpAQCAtOTQxLDcgKzkzNSw3IEBACiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZp
c2libGVTZWxlY3Rpb24oYXRCUikpOwogICAgIAogICAgIC8vIElmIHRoaXMgaXMgYW4gZW1wdHkg
cGFyYWdyYXBoIHRoZXJlIG11c3QgYmUgYSBsaW5lIGJyZWFrIGhlcmUuCi0gICAgaWYgKCFsaW5l
QnJlYWtFeGlzdHNBdFBvc2l0aW9uKGNhcmV0KSkKKyAgICBpZiAoIWxpbmVCcmVha0V4aXN0c0F0
VmlzaWJsZVBvc2l0aW9uKGNhcmV0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAg
IFBvc2l0aW9uIGNhcmV0UG9zKGNhcmV0LmRlZXBFcXVpdmFsZW50KCkpOwpAQCAtOTk1LDcgKzk4
OSw3IEBACiAgICAgICAgICAgICAvLyBEb24ndCBpbnNlcnQgb3V0c2lkZSBhbiBhbmNob3IgaWYg
ZG9pbmcgc28gd291bGQgc2tpcCBvdmVyIGEgbGluZSBicmVhay4gIEl0IHdvdWxkCiAgICAgICAg
ICAgICAvLyBwcm9iYWJseSBiZSBzYWZlIHRvIG1vdmUgdGhlIGxpbmUgYnJlYWsgc28gdGhhdCB3
ZSBjb3VsZCBzdGlsbCBhdm9pZCB0aGUgYW5jaG9yIGhlcmUuCiAgICAgICAgICAgICBQb3NpdGlv
biBkb3duc3RyZWFtKHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCkpOwot
ICAgICAgICAgICAgaWYgKGxpbmVCcmVha0V4aXN0c0F0UG9zaXRpb24odmlzaWJsZVBvcykgJiYg
ZG93bnN0cmVhbS5ub2RlKCktPmlzRGVzY2VuZGFudE9mKGVuY2xvc2luZ0FuY2hvcikpCisgICAg
ICAgICAgICBpZiAobGluZUJyZWFrRXhpc3RzQXRWaXNpYmxlUG9zaXRpb24odmlzaWJsZVBvcykg
JiYgZG93bnN0cmVhbS5ub2RlKCktPmlzRGVzY2VuZGFudE9mKGVuY2xvc2luZ0FuY2hvcikpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICByZXN1bHQgPSBwb3NpdGlvbkFmdGVyTm9kZShlbmNsb3NpbmdBbmNob3IpOwpJbmRleDogZWRp
dGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9JbnNlcnRU
ZXh0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDQyNDYzKQorKysgZWRpdGluZy9JbnNlcnRUZXh0Q29t
bWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw4ICsxMzAsMjcgQEAKICAgICAgICAgZGVs
ZXRlU2VsZWN0aW9uKGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSk7CiAgICAgfQogICAgIAorICAg
IFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24oZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAg
CisgICAgUG9zaXRpb24gcGxhY2Vob2xkZXI7CisgICAgLy8gV2Ugd2FudCB0byByZW1vdmUgcHJl
c2VydmVkIG5ld2xpbmVzIGFuZCBicnMgdGhhdCB3aWxsIGNvbGxhcHNlIChhbmQgdGh1cyBiZWNv
bWUgdW5uZWNlc3NhcnkpIHdoZW4gY29udGVudCAKKyAgICAvLyBpcyBpbnNlcnRlZCBqdXN0IGJl
Zm9yZSB0aGVtLgorICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgcmVhbGx5IGhhdmUgdG8gZG8g
dGhpcywgYnV0IHJlbW92aW5nIHBsYWNlaG9sZGVycyBpcyBhIHdvcmthcm91bmQgZm9yIDk2NjEu
CisgICAgLy8gSWYgdGhlIGNhcmV0IGlzIGF0IGEgYmxvY2sgcGxhY2Vob2xkZXIsIHNlbGVjdGlv
biBlbmRwb2ludHMgd2lsbCBiZSBub3JtYWxpemVkIHRvIGl0cyBleGFjdCBwb3NpdGlvbiwgc28g
d2UgCisgICAgLy8gb25seSBoYXZlIHRvIGNoZWNrIHN0YXJ0UG9zaXRpb24gaGVyZS4KKyAgICBp
ZiAobGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihzdGFydFBvc2l0aW9uKSkgeworICAgICAgICAv
LyBGSVhNRTogVGhpcyBkb2Vzbid0IGhhbmRsZSBwbGFjZWhvbGRlcnMgYXQgdGhlIGVuZCBvZiBh
bm9ueW1vdXMgYmxvY2tzLgorICAgICAgICBWaXNpYmxlUG9zaXRpb24gY2FyZXQoc3RhcnRQb3Np
dGlvbik7CisgICAgICAgIGlmIChpc0VuZE9mQmxvY2soY2FyZXQpICYmIGlzU3RhcnRPZlBhcmFn
cmFwaChjYXJldCkpCisgICAgICAgICAgICBwbGFjZWhvbGRlciA9IHN0YXJ0UG9zaXRpb247Cisg
ICAgICAgIC8vIERvbid0IHJlbW92ZSB0aGUgcGxhY2Vob2xkZXIgeWV0LCBvdGhlcndpc2UgdGhl
IGJsb2NrIHdlJ3JlIGluc2VydGluZyBpbnRvIHdvdWxkIGNvbGxhcHNlIGJlZm9yZQorICAgICAg
ICAvLyB3ZSBnZXQgYSBjaGFuY2UgdG8gaW5zZXJ0IGludG8gaXQuICBXZSBjaGVjayBmb3IgYSBw
bGFjZWhvbGRlciBub3csIHRob3VnaCwgYmVjYXVzZSBkb2luZyBzbyByZXF1aXJlcworICAgICAg
ICAvLyB0aGUgY3JlYXRpb24gb2YgYSBWaXNpYmxlUG9zaXRpb24sIGFuZCBpZiB3ZSBkaWQgdGhh
dCBwb3N0LWluc2VydGlvbiBpdCB3b3VsZCBmb3JjZSBhIGxheW91dC4KKyAgICB9CisgICAgCiAg
ICAgLy8gSW5zZXJ0IHRoZSBjaGFyYWN0ZXIgYXQgdGhlIGxlZnRtb3N0IGNhbmRpZGF0ZS4KLSAg
ICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKS51cHN0
cmVhbSgpOworICAgIHN0YXJ0UG9zaXRpb24gPSBzdGFydFBvc2l0aW9uLnVwc3RyZWFtKCk7Cisg
ICAgCiAgICAgLy8gSXQgaXMgcG9zc2libGUgZm9yIHRoZSBub2RlIHRoYXQgY29udGFpbnMgc3Rh
cnRQb3NpdGlvbiB0byBjb250YWluIG9ubHkgdW5yZW5kZXJlZCB3aGl0ZXNwYWNlLAogICAgIC8v
IGFuZCBzbyBkZWxldGVJbnNpZ25pZmljYW50VGV4dCBjb3VsZCByZW1vdmUgaXQuICBTYXZlIHRo
ZSBwb3NpdGlvbiBiZWZvcmUgdGhlIG5vZGUgaW4gY2FzZSB0aGF0IGhhcHBlbnMuCiAgICAgUG9z
aXRpb24gcG9zaXRpb25CZWZvcmVTdGFydE5vZGUocG9zaXRpb25CZWZvcmVOb2RlKHN0YXJ0UG9z
aXRpb24ubm9kZSgpKSk7CkBAIC0xNDgsMTIgKzE2NywxNCBAQAogICAgIGlmICh0ZXh0ID09ICJc
dCIpIHsKICAgICAgICAgZW5kUG9zaXRpb24gPSBpbnNlcnRUYWIoc3RhcnRQb3NpdGlvbik7CiAg
ICAgICAgIHN0YXJ0UG9zaXRpb24gPSBlbmRQb3NpdGlvbi5wcmV2aW91cygpOwotICAgICAgICBy
ZW1vdmVQbGFjZWhvbGRlckF0KFZpc2libGVQb3NpdGlvbihzdGFydFBvc2l0aW9uKSk7CisgICAg
ICAgIGlmIChwbGFjZWhvbGRlci5pc05vdE51bGwoKSkKKyAgICAgICAgICAgIHJlbW92ZVBsYWNl
aG9sZGVyQXQocGxhY2Vob2xkZXIpOwogICAgICAgICBtX2NoYXJhY3RlcnNBZGRlZCArPSAxOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgZG9jdW1lbnQgaXMgc2V0IHVw
IHRvIHJlY2VpdmUgdGV4dAogICAgICAgICBzdGFydFBvc2l0aW9uID0gcHJlcGFyZUZvclRleHRJ
bnNlcnRpb24oc3RhcnRQb3NpdGlvbik7Ci0gICAgICAgIHJlbW92ZVBsYWNlaG9sZGVyQXQoVmlz
aWJsZVBvc2l0aW9uKHN0YXJ0UG9zaXRpb24pKTsKKyAgICAgICAgaWYgKHBsYWNlaG9sZGVyLmlz
Tm90TnVsbCgpKQorICAgICAgICAgICAgcmVtb3ZlUGxhY2Vob2xkZXJBdChwbGFjZWhvbGRlcik7
CiAgICAgICAgIFRleHQgKnRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCAqPihzdGFydFBvc2l0
aW9uLm5vZGUoKSk7CiAgICAgICAgIGludCBvZmZzZXQgPSBzdGFydFBvc2l0aW9uLm1fb2Zmc2V0
OwogCkluZGV4OiBlZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
ZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCShyZXZpc2lvbiA0MjQ2MykKKysrIGVkaXRp
bmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw3
IEBACiAgICAgYXBwZW5kTm9kZShwbGFjZWhvbGRlciwgYmxvY2tOb2RlKTsKICAgICAKICAgICBW
aXNpYmxlUG9zaXRpb24gZGVzdGluYXRpb24oUG9zaXRpb24ocGxhY2Vob2xkZXIuZ2V0KCksIDAp
KTsKLSAgICBpZiAocGFyYWdyYXBoU3RhcnQgPT0gcGFyYWdyYXBoRW5kICYmICFsaW5lQnJlYWtF
eGlzdHNBdFBvc2l0aW9uKHBhcmFncmFwaFN0YXJ0KSkgeworICAgIGlmIChwYXJhZ3JhcGhTdGFy
dCA9PSBwYXJhZ3JhcGhFbmQgJiYgIWxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKHBh
cmFncmFwaFN0YXJ0KSkgewogICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZGVzdGluYXRpb24p
OwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25D
b21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwCShyZXZpc2lvbiA0MjQ2MykKKysrIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY3MSw3ICs2NzEsNyBAQAogICAgIGlmIChtX3R5cGluZ1N0
eWxlICYmIAogICAgICAgICBpc1N0YXJ0T2ZQYXJhZ3JhcGgodmlzaWJsZUVuZCkgJiYKICAgICAg
ICAgaXNFbmRPZlBhcmFncmFwaCh2aXNpYmxlRW5kKSAmJgotICAgICAgICBsaW5lQnJlYWtFeGlz
dHNBdFBvc2l0aW9uKHZpc2libGVFbmQpKSB7CisgICAgICAgIGxpbmVCcmVha0V4aXN0c0F0Vmlz
aWJsZVBvc2l0aW9uKHZpc2libGVFbmQpKSB7CiAgICAgICAgIC8vIEFwcGx5IHN0eWxlIHRvIHRo
ZSBwbGFjZWhvbGRlciB0aGF0IGlzIG5vdyBob2xkaW5nIG9wZW4gdGhlIGVtcHR5IHBhcmFncmFw
aC4gCiAgICAgICAgIC8vIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSBwYXJhZ3JhcGggaGFzIHRo
ZSByaWdodCBoZWlnaHQsIGFuZCB0aGF0IHRoZSBwYXJhZ3JhcGggCiAgICAgICAgIC8vIHRha2Vz
IG9uIHRoZSByaWdodCBzdHlsZSBhbmQgcmV0YWlucyBpdCBldmVuIGlmIHlvdSBtb3ZlIHRoZSBz
ZWxlY3Rpb24gYXdheSBhbmQKQEAgLTcyOSw3ICs3MjksNyBAQAogICAgIFBvc2l0aW9uIGRvd25z
dHJlYW1FbmQgPSBtX3NlbGVjdGlvblRvRGVsZXRlLmVuZCgpLmRvd25zdHJlYW0oKTsKICAgICBt
X25lZWRQbGFjZWhvbGRlciA9IGlzU3RhcnRPZlBhcmFncmFwaChtX3NlbGVjdGlvblRvRGVsZXRl
LnZpc2libGVTdGFydCgpKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgaXNFbmRPZlBhcmFn
cmFwaChtX3NlbGVjdGlvblRvRGVsZXRlLnZpc2libGVFbmQoKSkgJiYKLSAgICAgICAgICAgICAg
ICAgICAgICAgICFsaW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uKG1fc2VsZWN0aW9uVG9EZWxldGUu
dmlzaWJsZUVuZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICFsaW5lQnJlYWtFeGlzdHNB
dFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvblRvRGVsZXRlLnZpc2libGVFbmQoKSk7CiAgICAg
aWYgKG1fbmVlZFBsYWNlaG9sZGVyKSB7CiAgICAgICAgIC8vIERvbid0IG5lZWQgYSBwbGFjZWhv
bGRlciB3aGVuIGRlbGV0aW5nIGEgc2VsZWN0aW9uIHRoYXQgc3RhcnRzIGp1c3QgYmVmb3JlIGEg
dGFibGUKICAgICAgICAgLy8gYW5kIGVuZHMgaW5zaWRlIGl0ICh3ZSBkbyBuZWVkIHBsYWNlaG9s
ZGVycyB0byBob2xkIG9wZW4gZW1wdHkgY2VsbHMsIGJ1dCB0aGF0J3MKSW5kZXg6IGVkaXRpbmcv
aHRtbGVkaXRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCShy
ZXZpc2lvbiA0MjQ2MykKKysrIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05MDYsMTQgKzkwNiwyNCBAQAogICAgIHJldHVybiBsYXN0T2Zmc2V0Rm9yRWRpdGluZyhu
KTsKIH0KIAotYm9vbCBsaW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgdmlzaWJsZVBvc2l0aW9uKQorYm9vbCBsaW5lQnJlYWtFeGlzdHNBdFZpc2libGVQb3Np
dGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKIHsKLSAgICBpZiAo
dmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQorICAgIHJldHVybiBsaW5lQnJlYWtFeGlzdHNBdFBv
c2l0aW9uKHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKSk7Cit9
CisKK2Jvb2wgbGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcG9zaXRp
b24pCit7CisgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIAotICAgIFBvc2l0aW9uIGRvd25zdHJlYW0odmlzaWJsZVBvc2l0aW9uLmRlZXBF
cXVpdmFsZW50KCkuZG93bnN0cmVhbSgpKTsKLSAgICByZXR1cm4gZG93bnN0cmVhbS5ub2RlKCkt
Pmhhc1RhZ05hbWUoYnJUYWcpIHx8Ci0gICAgICAgICAgIChkb3duc3RyZWFtLm5vZGUoKS0+aXNU
ZXh0Tm9kZSgpICYmIGRvd25zdHJlYW0ubm9kZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5wcmVz
ZXJ2ZU5ld2xpbmUoKSAmJiB2aXNpYmxlUG9zaXRpb24uY2hhcmFjdGVyQWZ0ZXIoKSA9PSAnXG4n
KTsKKyAgICAKKyAgICBpZiAocG9zaXRpb24ubm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSAmJiBw
b3NpdGlvbi5tX29mZnNldCA9PSAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBp
ZiAoIXBvc2l0aW9uLm5vZGUoKS0+aXNUZXh0Tm9kZSgpIHx8ICFwb3NpdGlvbi5ub2RlKCktPnJl
bmRlcmVyKCktPnN0eWxlKCktPnByZXNlcnZlTmV3bGluZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4ocG9zaXRp
b24ubm9kZSgpKTsKKyAgICByZXR1cm4gKHVuc2lnbmVkKXBvc2l0aW9uLm1fb2Zmc2V0IDwgdGV4
dE5vZGUtPmxlbmd0aCgpICYmIHRleHROb2RlLT5kYXRhKClbcG9zaXRpb24ubV9vZmZzZXRdID09
ICdcbic7CiB9CiAKIC8vIE1vZGlmaWVzIHNlbGVjdGlvbnMgdGhhdCBoYXZlIGFuIGVuZCBwb2lu
dCBhdCB0aGUgZWRnZSBvZiBhIHRhYmxlCkluZGV4OiBlZGl0aW5nL0luc2VydExpbmVCcmVha0Nv
bW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5j
cHAJKHJldmlzaW9uIDQyNDYzKQorKysgZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBACiAgICAgCiAgICAgLy8gRklYTUU6
IE5lZWQgdG8gbWVyZ2UgdGV4dCBub2RlcyB3aGVuIGluc2VydGluZyBqdXN0IGFmdGVyIG9yIGJl
Zm9yZSB0ZXh0LgogICAgIAotICAgIGlmIChpc0VuZE9mUGFyYWdyYXBoKGNhcmV0KSAmJiAhbGlu
ZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihjYXJldCkpIHsKKyAgICBpZiAoaXNFbmRPZlBhcmFncmFw
aChjYXJldCkgJiYgIWxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKGNhcmV0KSkgewog
ICAgICAgICBib29sIG5lZWRFeHRyYUxpbmVCcmVhayA9ICFwb3Mubm9kZSgpLT5oYXNUYWdOYW1l
KGhyVGFnKSAmJiAhcG9zLm5vZGUoKS0+aGFzVGFnTmFtZSh0YWJsZVRhZyk7CiAgICAgICAgIAog
ICAgICAgICBpbnNlcnROb2RlQXQobm9kZVRvSW5zZXJ0LmdldCgpLCBwb3MpOwpJbmRleDogZWRp
dGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBl
ZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCShyZXZpc2lvbiA0MjQ2
MykKKysrIGVkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE3MCw3ICsxNzAsNyBAQAogICAgIC8vIGluY2x1ZGluZyB3aGVuIHRoZSBi
bG9jayBpcyBlbXB0eS4gCiAgICAgaWYgKGlzTGFzdEluQmxvY2spIHsKICAgICAgICAgaWYgKG5l
c3ROZXdCbG9jaykgewotICAgICAgICAgICAgaWYgKGlzRmlyc3RJbkJsb2NrICYmICFsaW5lQnJl
YWtFeGlzdHNBdFBvc2l0aW9uKHZpc2libGVQb3MpKSB7CisgICAgICAgICAgICBpZiAoaXNGaXJz
dEluQmxvY2sgJiYgIWxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKHZpc2libGVQb3Mp
KSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIGJsb2NrIGlzIGVtcHR5LiAgQ3JlYXRlIGFuIGVt
cHR5IGJsb2NrIHRvCiAgICAgICAgICAgICAgICAgLy8gcmVwcmVzZW50IHRoZSBwYXJhZ3JhcGgg
dGhhdCB3ZSdyZSBsZWF2aW5nLgogICAgICAgICAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBleHRy
YUJsb2NrID0gY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVsZW1lbnQoZG9jdW1lbnQoKSk7CkBAIC0y
ODIsNyArMjgyLDcgQEAKICAgICAvLyBJZiB0aGUgcGFyYWdyYXBoIHNlcGFyYXRvciB3YXMgaW5z
ZXJ0ZWQgYXQgdGhlIGVuZCBvZiBhIHBhcmFncmFwaCwgYW4gZW1wdHkgbGluZSBtdXN0IGJlCiAg
ICAgLy8gY3JlYXRlZC4gIEFsbCBvZiB0aGUgbm9kZXMsIHN0YXJ0aW5nIGF0IHZpc2libGVQb3Ms
IGFyZSBhYm91dCB0byBiZSBhZGRlZCB0byB0aGUgbmV3IHBhcmFncmFwaCAKICAgICAvLyBlbGVt
ZW50LiAgSWYgdGhlIGZpcnN0IG5vZGUgdG8gYmUgaW5zZXJ0ZWQgd29uJ3QgYmUgb25lIHRoYXQg
d2lsbCBob2xkIGFuIGVtcHR5IGxpbmUgb3BlbiwgYWRkIGEgYnIuCi0gICAgaWYgKGlzRW5kT2ZQ
YXJhZ3JhcGgodmlzaWJsZVBvcykgJiYgIWxpbmVCcmVha0V4aXN0c0F0UG9zaXRpb24odmlzaWJs
ZVBvcykpCisgICAgaWYgKGlzRW5kT2ZQYXJhZ3JhcGgodmlzaWJsZVBvcykgJiYgIWxpbmVCcmVh
a0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKHZpc2libGVQb3MpKQogICAgICAgICBhcHBlbmROb2Rl
KGNyZWF0ZUJyZWFrRWxlbWVudChkb2N1bWVudCgpKS5nZXQoKSwgYmxvY2tUb0luc2VydC5nZXQo
KSk7CiAgICAgICAgIAogICAgIC8vIE1vdmUgdGhlIHN0YXJ0IG5vZGUgYW5kIHRoZSBzaWJsaW5n
cyBvZiB0aGUgc3RhcnQgbm9kZS4KSW5kZXg6IGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgJKHJldmlzaW9u
IDQyNDYzKQorKysgZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oCSh3b3JraW5nIGNvcHkp
CkBAIC04OSw3ICs4OSw3IEBACiAgICAgUGFzc1JlZlB0cjxOb2RlPiBhcHBlbmRCbG9ja1BsYWNl
aG9sZGVyKFBhc3NSZWZQdHI8RWxlbWVudD4pOwogICAgIFBhc3NSZWZQdHI8Tm9kZT4gaW5zZXJ0
QmxvY2tQbGFjZWhvbGRlcihjb25zdCBQb3NpdGlvbiYpOwogICAgIFBhc3NSZWZQdHI8Tm9kZT4g
YWRkQmxvY2tQbGFjZWhvbGRlcklmTmVlZGVkKEVsZW1lbnQqKTsKLSAgICB2b2lkIHJlbW92ZVBs
YWNlaG9sZGVyQXQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CisgICAgdm9pZCByZW1vdmVQbGFj
ZWhvbGRlckF0KGNvbnN0IFBvc2l0aW9uJik7CiAKICAgICBQYXNzUmVmUHRyPE5vZGU+IGluc2Vy
dE5ld0RlZmF1bHRQYXJhZ3JhcGhFbGVtZW50QXQoY29uc3QgUG9zaXRpb24mKTsKIApJbmRleDog
ZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5n
L0JyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwCShyZXZpc2lvbiA0MjQ2MykKKysrIGVkaXRpbmcv
QnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcg
QEAKICAgICAKICAgICAvLyBEb24ndCBtb3ZlIGEgbGluZSBicmVhayBqdXN0IGFmdGVyIHRoZSBj
YXJldC4gIERvaW5nIHNvIHdvdWxkIGNyZWF0ZSBhbiBleHRyYSwgZW1wdHkgcGFyYWdyYXBoCiAg
ICAgLy8gaW4gdGhlIG5ldyBibG9ja3F1b3RlLgotICAgIGlmIChsaW5lQnJlYWtFeGlzdHNBdFBv
c2l0aW9uKHZpc2libGVQb3MpKQorICAgIGlmIChsaW5lQnJlYWtFeGlzdHNBdFZpc2libGVQb3Np
dGlvbih2aXNpYmxlUG9zKSkKICAgICAgICAgcG9zID0gcG9zLm5leHQoKTsKICAgICAgICAgCiAg
ICAgLy8gQWRqdXN0IHRoZSBwb3NpdGlvbiBzbyB3ZSBkb24ndCBzcGxpdCBhdCB0aGUgYmVnaW5u
aW5nIG9mIGEgcXVvdGUuICAKSW5kZXg6IGVkaXRpbmcvaHRtbGVkaXRpbmcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBlZGl0aW5nL2h0bWxlZGl0aW5nLmgJKHJldmlzaW9uIDQyNDYzKQorKysgZWRpdGluZy9o
dG1sZWRpdGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3LDggQEAKIGJvb2wgaXNU
YWJsZUVsZW1lbnQoTm9kZSopOwogYm9vbCBpc1RhYmxlQ2VsbChjb25zdCBOb2RlKik7CiAKLWJv
b2wgbGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK2Jv
b2wgbGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYpOworYm9vbCBsaW5l
QnJlYWtFeGlzdHNBdFZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKIAog
VmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Gb3JQYXJhZ3JhcGhJdGVyYXRpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29459</attachid>
            <date>2009-04-13 22:19:26 -0700</date>
            <delta_ts>2009-04-14 11:35:55 -0700</delta_ts>
            <desc>patch</desc>
            <filename>extralayout.txt</filename>
            <type>text/plain</type>
            <size>15505</size>
            <attacher name="Justin Garcia">justin.garcia</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQyNDc2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAKKzIwMDktMDQt
MTMgIEp1c3RpbiBHYXJjaWEgIDxqdXN0aW4uZ2FyY2lhQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjUxNzIKKyAgICAgICAgRXh0cmEgcGFydGlhbCBsYXlvdXQg
ZHVyaW5nIHRoZSBmaXJzdCBrZXlwcmVzcyBpbiBhbiBlbXB0eSBibG9jaworICAgICAgICAKKyAg
ICAgICAgRGV0ZXJtaW5pbmcgaWYgYSBwbGFjZWhvbGRlciBuZWVkcyB0byBiZSByZW1vdmVkIHJl
cXVpcmVzIHRoZSBjcmVhdGlvbiBvZiBhIFZpc2libGVQb3NpdGlvbiAKKyAgICAgICAgd2hpY2gg
d2FzIHRyaWdnZXJpbmcgbGF5b3V0IGJlZm9yZSB3ZSB3ZXJlIGZpbmlzaGVkIG1vZGlmeWluZyB0
aGUgRE9NIGZvciB0aGUgaW5zZXJ0IG9wZXJhdGlvbi4KKyAgICAgICAgCisgICAgICAgIEZpbmQg
b3V0IGlmIHdlIG5lZWQgdG8gcmVtb3ZlIGEgcGxhY2Vob2xkZXIgbmVhciB0aGUgc3RhcnQgb2Yg
dGhlIG9wZXJhdGlvbiwgYW5kIGlmIHdlIGRvIHJlbWVtYmVyIAorICAgICAgICB3aGVyZSBpdCdz
IGxvY2F0ZWQuICBUaGVuLCBsYXRlciwgcmVtb3ZlIGl0IGFsb25nIHdpdGggYWxsIG9mIHRoZSBv
dGhlciBET00gb3BlcmF0aW9ucyB3ZSBwZXJmb3JtLgorICAgICAgICAKKyAgICAgICAgUmVuYW1l
ZCBsaW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uIHRvIGxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBv
c2l0aW9uIGFuZCBhZGRlZCBhIGxpbmVCcmVha0V4aXN0c0F0UG9zaXRpb24KKyAgICAgICAgdGhh
dCB0YWtlcyBpbiBhIFBvc2l0aW9uLiAgSW4gSW5zZXJ0VGV4dENvbW1hbmQsIHdlIGNhbiB1c2Ug
dGhlIGxhdHRlciwgc2luY2Ugd2UncmUgdXNpbmcgYSBzZWxlY3Rpb24gCisgICAgICAgIGVuZHBv
aW50LCB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIG5vcm1hbGl6ZWQuCisgICAgICAgIAorICAgICAg
ICByZW1vdmVQbGFjZWhvbGRlckF0IG5vdyB0YWtlcyBpbiBhIFBvc2l0aW9uIHRoYXQgaXQgYXNz
dW1lcyBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQgZm9yIGEgcGxhY2Vob2xkZXIuCisKKyAgICAg
ICAgKiBlZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0
Q29tbWFuZDo6cmVtb3ZlUGxhY2Vob2xkZXJBdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3Np
dGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXB0eU1haWxCbG9ja3F1b3RlZFBhcmFncmFwaCk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cG9zaXRpb25Bdm9pZGlu
Z1NwZWNpYWxFbGVtZW50Qm91bmRhcnkpOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRp
dENvbW1hbmQuaDoKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3VsYXRlVHlw
aW5nU3R5bGVBZnRlckRlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25D
b21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtYXRCbG9ja0NvbW1hbmQ6OmRvQXBwbHkpOgorICAg
ICAgICAqIGVkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5n
L0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRp
dGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRUZXh0
Q29tbWFuZDo6aW5wdXQpOgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6bGluZUJyZWFrRXhpc3RzQXRWaXNpYmxlUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6bGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbik6CisgICAgICAgICogZWRpdGlu
Zy9odG1sZWRpdGluZy5oOgorCiAyMDA5LTA0LTEzICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQ2FtZXJvbiBad2FyaWNoLgpJbmRleDog
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDQyNDYzKQorKysgZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwMywyNCArNjAzLDE4IEBA
CiAgICAgcmV0dXJuIDA7CiB9CiAKLS8vIFJlbW92ZXMgJ1xuJ3MgYW5kIGJycyB0aGF0IHdpbGwg
Y29sbGFwc2Ugd2hlbiBjb250ZW50IGlzIGluc2VydGVkIGp1c3QgYmVmb3JlIHRoZW0uCi0vLyBG
SVhNRTogV2Ugc2hvdWxkbid0IHJlYWxseSBoYXZlIHRvIHJlbW92ZSBwbGFjZWhvbGRlcnMsIGJ1
dCByZW1vdmluZyB0aGVtIGlzIGEgd29ya2Fyb3VuZCBmb3IgOTY2MS4KLXZvaWQgQ29tcG9zaXRl
RWRpdENvbW1hbmQ6OnJlbW92ZVBsYWNlaG9sZGVyQXQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2
aXNpYmxlUG9zaXRpb24pCisvLyBBc3N1bWVzIHRoYXQgdGhlIHBvc2l0aW9uIGlzIGF0IGEgcGxh
Y2Vob2xkZXIgYW5kIGRvZXMgdGhlIHJlbW92YWwgd2l0aG91dCBtdWNoIGNoZWNraW5nLgordm9p
ZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlUGxhY2Vob2xkZXJBdChjb25zdCBQb3NpdGlv
biYgcCkKIHsKLSAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQorICAgIEFTU0VSVChs
aW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uKHApKTsKKyAgICAKKyAgICBpZiAocC5ub2RlKCktPmhh
c1RhZ05hbWUoYnJUYWcpKSB7CisgICAgICAgIHJlbW92ZU5vZGUocC5ub2RlKCkpOwogICAgICAg
ICByZXR1cm47Ci0gICAgICAgIAotICAgIFBvc2l0aW9uIHAgPSB2aXNpYmxlUG9zaXRpb24uZGVl
cEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCk7Ci0gICAgLy8gSWYgYSBiciBvciAnXG4nIGlzIGF0
IHRoZSBlbmQgb2YgYSBibG9jayBhbmQgbm90IGF0IHRoZSBzdGFydCBvZiBhIHBhcmFncmFwaCwK
LSAgICAvLyB0aGVuIGl0IGlzIHN1cGVyZmx1b3VzLCBzbyBhZGRpbmcgY29udGVudCBiZWZvcmUg
YSBiciBvciAnXG4nIHRoYXQgaXMgYXQKLSAgICAvLyB0aGUgc3RhcnQgb2YgYSBwYXJhZ3JhcGgg
d2lsbCByZW5kZXIgaXQgc3VwZXJmbHVvdXMuCi0gICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCBy
ZW1vdmUgcGxhY2Vob2xkZXJzIGF0IHRoZSBlbmQgb2YgYW5vbnltb3VzIGJsb2Nrcy4KLSAgICBp
ZiAoaXNFbmRPZkJsb2NrKHZpc2libGVQb3NpdGlvbikgJiYgaXNTdGFydE9mUGFyYWdyYXBoKHZp
c2libGVQb3NpdGlvbikpIHsKLSAgICAgICAgaWYgKHAubm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFn
KSAmJiBwLm1fb2Zmc2V0ID09IDApCi0gICAgICAgICAgICByZW1vdmVOb2RlKHAubm9kZSgpKTsK
LSAgICAgICAgZWxzZSBpZiAobGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbih2aXNpYmxlUG9zaXRp
b24pKQotICAgICAgICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKHN0YXRpY19jYXN0PFRleHQqPihw
Lm5vZGUoKSksIHAubV9vZmZzZXQsIDEpOwogICAgIH0KKyAgICAKKyAgICAvLyBQcmVzZXJ2ZWQg
bmV3bGluZS4KKyAgICBkZWxldGVUZXh0RnJvbU5vZGUoc3RhdGljX2Nhc3Q8VGV4dCo+KHAubm9k
ZSgpKSwgcC5tX29mZnNldCwgMSk7CiB9CiAKIFBhc3NSZWZQdHI8Tm9kZT4gQ29tcG9zaXRlRWRp
dENvbW1hbmQ6Omluc2VydE5ld0RlZmF1bHRQYXJhZ3JhcGhFbGVtZW50QXQoY29uc3QgUG9zaXRp
b24mIHBvc2l0aW9uKQpAQCAtODI1LDcgKzgxOSw3IEBACiAgICAgICAgIC8vIGV4cGVjdHMgdGhp
cyBiZWhhdmlvcikuCiAgICAgICAgIGVsc2UgaWYgKGlzQmxvY2sobm9kZSkpCiAgICAgICAgICAg
ICByZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGxp
bmVCcmVha0V4aXN0c0F0UG9zaXRpb24oY2FyZXRBZnRlckRlbGV0ZSkpIHsKKyAgICAgICAgZWxz
ZSBpZiAobGluZUJyZWFrRXhpc3RzQXRWaXNpYmxlUG9zaXRpb24oY2FyZXRBZnRlckRlbGV0ZSkp
IHsKICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgcHJlc2VydmVkICdcbicgYXQgY2FyZXRBZnRl
ckRlbGV0ZS4KICAgICAgICAgICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+
KG5vZGUpOwogICAgICAgICAgICAgaWYgKHRleHROb2RlLT5sZW5ndGgoKSA9PSAxKQpAQCAtOTQx
LDcgKzkzNSw3IEBACiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oYXRC
UikpOwogICAgIAogICAgIC8vIElmIHRoaXMgaXMgYW4gZW1wdHkgcGFyYWdyYXBoIHRoZXJlIG11
c3QgYmUgYSBsaW5lIGJyZWFrIGhlcmUuCi0gICAgaWYgKCFsaW5lQnJlYWtFeGlzdHNBdFBvc2l0
aW9uKGNhcmV0KSkKKyAgICBpZiAoIWxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKGNh
cmV0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIFBvc2l0aW9uIGNhcmV0UG9z
KGNhcmV0LmRlZXBFcXVpdmFsZW50KCkpOwpAQCAtOTk1LDcgKzk4OSw3IEBACiAgICAgICAgICAg
ICAvLyBEb24ndCBpbnNlcnQgb3V0c2lkZSBhbiBhbmNob3IgaWYgZG9pbmcgc28gd291bGQgc2tp
cCBvdmVyIGEgbGluZSBicmVhay4gIEl0IHdvdWxkCiAgICAgICAgICAgICAvLyBwcm9iYWJseSBi
ZSBzYWZlIHRvIG1vdmUgdGhlIGxpbmUgYnJlYWsgc28gdGhhdCB3ZSBjb3VsZCBzdGlsbCBhdm9p
ZCB0aGUgYW5jaG9yIGhlcmUuCiAgICAgICAgICAgICBQb3NpdGlvbiBkb3duc3RyZWFtKHZpc2li
bGVQb3MuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCkpOwotICAgICAgICAgICAgaWYgKGxp
bmVCcmVha0V4aXN0c0F0UG9zaXRpb24odmlzaWJsZVBvcykgJiYgZG93bnN0cmVhbS5ub2RlKCkt
PmlzRGVzY2VuZGFudE9mKGVuY2xvc2luZ0FuY2hvcikpCisgICAgICAgICAgICBpZiAobGluZUJy
ZWFrRXhpc3RzQXRWaXNpYmxlUG9zaXRpb24odmlzaWJsZVBvcykgJiYgZG93bnN0cmVhbS5ub2Rl
KCktPmlzRGVzY2VuZGFudE9mKGVuY2xvc2luZ0FuY2hvcikpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIG9yaWdpbmFsOwogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXN1bHQgPSBwb3NpdGlv
bkFmdGVyTm9kZShlbmNsb3NpbmdBbmNob3IpOwpJbmRleDogZWRpdGluZy9JbnNlcnRUZXh0Q29t
bWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAJKHJl
dmlzaW9uIDQyNDYzKQorKysgZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMCw4ICsxMzAsMjcgQEAKICAgICAgICAgZGVsZXRlU2VsZWN0aW9uKGZhbHNl
LCB0cnVlLCB0cnVlLCBmYWxzZSk7CiAgICAgfQogICAgIAorICAgIFBvc2l0aW9uIHN0YXJ0UG9z
aXRpb24oZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgCisgICAgUG9zaXRpb24gcGxh
Y2Vob2xkZXI7CisgICAgLy8gV2Ugd2FudCB0byByZW1vdmUgcHJlc2VydmVkIG5ld2xpbmVzIGFu
ZCBicnMgdGhhdCB3aWxsIGNvbGxhcHNlIChhbmQgdGh1cyBiZWNvbWUgdW5uZWNlc3NhcnkpIHdo
ZW4gY29udGVudCAKKyAgICAvLyBpcyBpbnNlcnRlZCBqdXN0IGJlZm9yZSB0aGVtLgorICAgIC8v
IEZJWE1FOiBXZSBzaG91bGRuJ3QgcmVhbGx5IGhhdmUgdG8gZG8gdGhpcywgYnV0IHJlbW92aW5n
IHBsYWNlaG9sZGVycyBpcyBhIHdvcmthcm91bmQgZm9yIDk2NjEuCisgICAgLy8gSWYgdGhlIGNh
cmV0IGlzIGF0IGEgYmxvY2sgcGxhY2Vob2xkZXIsIHNlbGVjdGlvbiBlbmRwb2ludHMgd2lsbCBi
ZSBub3JtYWxpemVkIHRvIGl0cyBleGFjdCBwb3NpdGlvbiwgc28gd2UgCisgICAgLy8gb25seSBo
YXZlIHRvIGNoZWNrIHN0YXJ0UG9zaXRpb24gaGVyZS4KKyAgICBpZiAobGluZUJyZWFrRXhpc3Rz
QXRQb3NpdGlvbihzdGFydFBvc2l0aW9uKSkgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2Vz
bid0IGhhbmRsZSBwbGFjZWhvbGRlcnMgYXQgdGhlIGVuZCBvZiBhbm9ueW1vdXMgYmxvY2tzLgor
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gY2FyZXQoc3RhcnRQb3NpdGlvbik7CisgICAgICAgIGlm
IChpc0VuZE9mQmxvY2soY2FyZXQpICYmIGlzU3RhcnRPZlBhcmFncmFwaChjYXJldCkpCisgICAg
ICAgICAgICBwbGFjZWhvbGRlciA9IHN0YXJ0UG9zaXRpb247CisgICAgICAgIC8vIERvbid0IHJl
bW92ZSB0aGUgcGxhY2Vob2xkZXIgeWV0LCBvdGhlcndpc2UgdGhlIGJsb2NrIHdlJ3JlIGluc2Vy
dGluZyBpbnRvIHdvdWxkIGNvbGxhcHNlIGJlZm9yZQorICAgICAgICAvLyB3ZSBnZXQgYSBjaGFu
Y2UgdG8gaW5zZXJ0IGludG8gaXQuICBXZSBjaGVjayBmb3IgYSBwbGFjZWhvbGRlciBub3csIHRo
b3VnaCwgYmVjYXVzZSBkb2luZyBzbyByZXF1aXJlcworICAgICAgICAvLyB0aGUgY3JlYXRpb24g
b2YgYSBWaXNpYmxlUG9zaXRpb24sIGFuZCBpZiB3ZSBkaWQgdGhhdCBwb3N0LWluc2VydGlvbiBp
dCB3b3VsZCBmb3JjZSBhIGxheW91dC4KKyAgICB9CisgICAgCiAgICAgLy8gSW5zZXJ0IHRoZSBj
aGFyYWN0ZXIgYXQgdGhlIGxlZnRtb3N0IGNhbmRpZGF0ZS4KLSAgICBQb3NpdGlvbiBzdGFydFBv
c2l0aW9uID0gZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKS51cHN0cmVhbSgpOworICAgIHN0YXJ0
UG9zaXRpb24gPSBzdGFydFBvc2l0aW9uLnVwc3RyZWFtKCk7CisgICAgCiAgICAgLy8gSXQgaXMg
cG9zc2libGUgZm9yIHRoZSBub2RlIHRoYXQgY29udGFpbnMgc3RhcnRQb3NpdGlvbiB0byBjb250
YWluIG9ubHkgdW5yZW5kZXJlZCB3aGl0ZXNwYWNlLAogICAgIC8vIGFuZCBzbyBkZWxldGVJbnNp
Z25pZmljYW50VGV4dCBjb3VsZCByZW1vdmUgaXQuICBTYXZlIHRoZSBwb3NpdGlvbiBiZWZvcmUg
dGhlIG5vZGUgaW4gY2FzZSB0aGF0IGhhcHBlbnMuCiAgICAgUG9zaXRpb24gcG9zaXRpb25CZWZv
cmVTdGFydE5vZGUocG9zaXRpb25CZWZvcmVOb2RlKHN0YXJ0UG9zaXRpb24ubm9kZSgpKSk7CkBA
IC0xNDgsMTIgKzE2NywxNCBAQAogICAgIGlmICh0ZXh0ID09ICJcdCIpIHsKICAgICAgICAgZW5k
UG9zaXRpb24gPSBpbnNlcnRUYWIoc3RhcnRQb3NpdGlvbik7CiAgICAgICAgIHN0YXJ0UG9zaXRp
b24gPSBlbmRQb3NpdGlvbi5wcmV2aW91cygpOwotICAgICAgICByZW1vdmVQbGFjZWhvbGRlckF0
KFZpc2libGVQb3NpdGlvbihzdGFydFBvc2l0aW9uKSk7CisgICAgICAgIGlmIChwbGFjZWhvbGRl
ci5pc05vdE51bGwoKSkKKyAgICAgICAgICAgIHJlbW92ZVBsYWNlaG9sZGVyQXQocGxhY2Vob2xk
ZXIpOwogICAgICAgICBtX2NoYXJhY3RlcnNBZGRlZCArPSAxOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgZG9jdW1lbnQgaXMgc2V0IHVwIHRvIHJlY2VpdmUgdGV4dAog
ICAgICAgICBzdGFydFBvc2l0aW9uID0gcHJlcGFyZUZvclRleHRJbnNlcnRpb24oc3RhcnRQb3Np
dGlvbik7Ci0gICAgICAgIHJlbW92ZVBsYWNlaG9sZGVyQXQoVmlzaWJsZVBvc2l0aW9uKHN0YXJ0
UG9zaXRpb24pKTsKKyAgICAgICAgaWYgKHBsYWNlaG9sZGVyLmlzTm90TnVsbCgpKQorICAgICAg
ICAgICAgcmVtb3ZlUGxhY2Vob2xkZXJBdChwbGFjZWhvbGRlcik7CiAgICAgICAgIFRleHQgKnRl
eHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCAqPihzdGFydFBvc2l0aW9uLm5vZGUoKSk7CiAgICAg
ICAgIGludCBvZmZzZXQgPSBzdGFydFBvc2l0aW9uLm1fb2Zmc2V0OwogCkluZGV4OiBlZGl0aW5n
L0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9Gb3JtYXRCbG9j
a0NvbW1hbmQuY3BwCShyZXZpc2lvbiA0MjQ2MykKKysrIGVkaXRpbmcvRm9ybWF0QmxvY2tDb21t
YW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgYXBwZW5kTm9k
ZShwbGFjZWhvbGRlciwgYmxvY2tOb2RlKTsKICAgICAKICAgICBWaXNpYmxlUG9zaXRpb24gZGVz
dGluYXRpb24oUG9zaXRpb24ocGxhY2Vob2xkZXIuZ2V0KCksIDApKTsKLSAgICBpZiAocGFyYWdy
YXBoU3RhcnQgPT0gcGFyYWdyYXBoRW5kICYmICFsaW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uKHBh
cmFncmFwaFN0YXJ0KSkgeworICAgIGlmIChwYXJhZ3JhcGhTdGFydCA9PSBwYXJhZ3JhcGhFbmQg
JiYgIWxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKHBhcmFncmFwaFN0YXJ0KSkgewog
ICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZGVzdGluYXRpb24pOwogICAgICAgICByZXR1cm47
CiAgICAgfQpJbmRleDogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiA0MjQ2
MykKKysrIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY3MSw3ICs2NzEsNyBAQAogICAgIGlmIChtX3R5cGluZ1N0eWxlICYmIAogICAgICAgICBp
c1N0YXJ0T2ZQYXJhZ3JhcGgodmlzaWJsZUVuZCkgJiYKICAgICAgICAgaXNFbmRPZlBhcmFncmFw
aCh2aXNpYmxlRW5kKSAmJgotICAgICAgICBsaW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uKHZpc2li
bGVFbmQpKSB7CisgICAgICAgIGxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKHZpc2li
bGVFbmQpKSB7CiAgICAgICAgIC8vIEFwcGx5IHN0eWxlIHRvIHRoZSBwbGFjZWhvbGRlciB0aGF0
IGlzIG5vdyBob2xkaW5nIG9wZW4gdGhlIGVtcHR5IHBhcmFncmFwaC4gCiAgICAgICAgIC8vIFRo
aXMgbWFrZXMgc3VyZSB0aGF0IHRoZSBwYXJhZ3JhcGggaGFzIHRoZSByaWdodCBoZWlnaHQsIGFu
ZCB0aGF0IHRoZSBwYXJhZ3JhcGggCiAgICAgICAgIC8vIHRha2VzIG9uIHRoZSByaWdodCBzdHls
ZSBhbmQgcmV0YWlucyBpdCBldmVuIGlmIHlvdSBtb3ZlIHRoZSBzZWxlY3Rpb24gYXdheSBhbmQK
QEAgLTcyOSw3ICs3MjksNyBAQAogICAgIFBvc2l0aW9uIGRvd25zdHJlYW1FbmQgPSBtX3NlbGVj
dGlvblRvRGVsZXRlLmVuZCgpLmRvd25zdHJlYW0oKTsKICAgICBtX25lZWRQbGFjZWhvbGRlciA9
IGlzU3RhcnRPZlBhcmFncmFwaChtX3NlbGVjdGlvblRvRGVsZXRlLnZpc2libGVTdGFydCgpKSAm
JgogICAgICAgICAgICAgICAgICAgICAgICAgaXNFbmRPZlBhcmFncmFwaChtX3NlbGVjdGlvblRv
RGVsZXRlLnZpc2libGVFbmQoKSkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICFsaW5lQnJl
YWtFeGlzdHNBdFBvc2l0aW9uKG1fc2VsZWN0aW9uVG9EZWxldGUudmlzaWJsZUVuZCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICFsaW5lQnJlYWtFeGlzdHNBdFZpc2libGVQb3NpdGlvbiht
X3NlbGVjdGlvblRvRGVsZXRlLnZpc2libGVFbmQoKSk7CiAgICAgaWYgKG1fbmVlZFBsYWNlaG9s
ZGVyKSB7CiAgICAgICAgIC8vIERvbid0IG5lZWQgYSBwbGFjZWhvbGRlciB3aGVuIGRlbGV0aW5n
IGEgc2VsZWN0aW9uIHRoYXQgc3RhcnRzIGp1c3QgYmVmb3JlIGEgdGFibGUKICAgICAgICAgLy8g
YW5kIGVuZHMgaW5zaWRlIGl0ICh3ZSBkbyBuZWVkIHBsYWNlaG9sZGVycyB0byBob2xkIG9wZW4g
ZW1wdHkgY2VsbHMsIGJ1dCB0aGF0J3MKSW5kZXg6IGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCShyZXZpc2lvbiA0MjQ2MykKKysr
IGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MDYsMTQgKzkwNiwy
NCBAQAogICAgIHJldHVybiBsYXN0T2Zmc2V0Rm9yRWRpdGluZyhuKTsKIH0KIAotYm9vbCBsaW5l
QnJlYWtFeGlzdHNBdFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0
aW9uKQorYm9vbCBsaW5lQnJlYWtFeGlzdHNBdFZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxl
UG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKIHsKLSAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmlz
TnVsbCgpKQorICAgIHJldHVybiBsaW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uKHZpc2libGVQb3Np
dGlvbi5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKSk7Cit9CisKK2Jvb2wgbGluZUJyZWFr
RXhpc3RzQXRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCit7CisgICAgaWYgKHBv
c2l0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgIFBv
c2l0aW9uIGRvd25zdHJlYW0odmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0
cmVhbSgpKTsKLSAgICByZXR1cm4gZG93bnN0cmVhbS5ub2RlKCktPmhhc1RhZ05hbWUoYnJUYWcp
IHx8Ci0gICAgICAgICAgIChkb3duc3RyZWFtLm5vZGUoKS0+aXNUZXh0Tm9kZSgpICYmIGRvd25z
dHJlYW0ubm9kZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUoKSAmJiB2
aXNpYmxlUG9zaXRpb24uY2hhcmFjdGVyQWZ0ZXIoKSA9PSAnXG4nKTsKKyAgICAKKyAgICBpZiAo
cG9zaXRpb24ubm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSAmJiBwb3NpdGlvbi5tX29mZnNldCA9
PSAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoIXBvc2l0aW9uLm5vZGUo
KS0+aXNUZXh0Tm9kZSgpIHx8ICFwb3NpdGlvbi5ub2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCkt
PnByZXNlcnZlTmV3bGluZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgVGV4
dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4ocG9zaXRpb24ubm9kZSgpKTsKKyAgICBy
ZXR1cm4gKHVuc2lnbmVkKXBvc2l0aW9uLm1fb2Zmc2V0IDwgdGV4dE5vZGUtPmxlbmd0aCgpICYm
IHRleHROb2RlLT5kYXRhKClbcG9zaXRpb24ubV9vZmZzZXRdID09ICdcbic7CiB9CiAKIC8vIE1v
ZGlmaWVzIHNlbGVjdGlvbnMgdGhhdCBoYXZlIGFuIGVuZCBwb2ludCBhdCB0aGUgZWRnZSBvZiBh
IHRhYmxlCkluZGV4OiBlZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGVkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAJKHJldmlzaW9uIDQyNDYz
KQorKysgZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA4LDcgKzEwOCw3IEBACiAgICAgCiAgICAgLy8gRklYTUU6IE5lZWQgdG8gbWVyZ2UgdGV4
dCBub2RlcyB3aGVuIGluc2VydGluZyBqdXN0IGFmdGVyIG9yIGJlZm9yZSB0ZXh0LgogICAgIAot
ICAgIGlmIChpc0VuZE9mUGFyYWdyYXBoKGNhcmV0KSAmJiAhbGluZUJyZWFrRXhpc3RzQXRQb3Np
dGlvbihjYXJldCkpIHsKKyAgICBpZiAoaXNFbmRPZlBhcmFncmFwaChjYXJldCkgJiYgIWxpbmVC
cmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKGNhcmV0KSkgewogICAgICAgICBib29sIG5lZWRF
eHRyYUxpbmVCcmVhayA9ICFwb3Mubm9kZSgpLT5oYXNUYWdOYW1lKGhyVGFnKSAmJiAhcG9zLm5v
ZGUoKS0+aGFzVGFnTmFtZSh0YWJsZVRhZyk7CiAgICAgICAgIAogICAgICAgICBpbnNlcnROb2Rl
QXQobm9kZVRvSW5zZXJ0LmdldCgpLCBwb3MpOwpJbmRleDogZWRpdGluZy9JbnNlcnRQYXJhZ3Jh
cGhTZXBhcmF0b3JDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL0luc2VydFBhcmFn
cmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCShyZXZpc2lvbiA0MjQ2MykKKysrIGVkaXRpbmcvSW5z
ZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw3
ICsxNzAsNyBAQAogICAgIC8vIGluY2x1ZGluZyB3aGVuIHRoZSBibG9jayBpcyBlbXB0eS4gCiAg
ICAgaWYgKGlzTGFzdEluQmxvY2spIHsKICAgICAgICAgaWYgKG5lc3ROZXdCbG9jaykgewotICAg
ICAgICAgICAgaWYgKGlzRmlyc3RJbkJsb2NrICYmICFsaW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9u
KHZpc2libGVQb3MpKSB7CisgICAgICAgICAgICBpZiAoaXNGaXJzdEluQmxvY2sgJiYgIWxpbmVC
cmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKHZpc2libGVQb3MpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gVGhlIGJsb2NrIGlzIGVtcHR5LiAgQ3JlYXRlIGFuIGVtcHR5IGJsb2NrIHRvCiAgICAg
ICAgICAgICAgICAgLy8gcmVwcmVzZW50IHRoZSBwYXJhZ3JhcGggdGhhdCB3ZSdyZSBsZWF2aW5n
LgogICAgICAgICAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBleHRyYUJsb2NrID0gY3JlYXRlRGVm
YXVsdFBhcmFncmFwaEVsZW1lbnQoZG9jdW1lbnQoKSk7CkBAIC0yODIsNyArMjgyLDcgQEAKICAg
ICAvLyBJZiB0aGUgcGFyYWdyYXBoIHNlcGFyYXRvciB3YXMgaW5zZXJ0ZWQgYXQgdGhlIGVuZCBv
ZiBhIHBhcmFncmFwaCwgYW4gZW1wdHkgbGluZSBtdXN0IGJlCiAgICAgLy8gY3JlYXRlZC4gIEFs
bCBvZiB0aGUgbm9kZXMsIHN0YXJ0aW5nIGF0IHZpc2libGVQb3MsIGFyZSBhYm91dCB0byBiZSBh
ZGRlZCB0byB0aGUgbmV3IHBhcmFncmFwaCAKICAgICAvLyBlbGVtZW50LiAgSWYgdGhlIGZpcnN0
IG5vZGUgdG8gYmUgaW5zZXJ0ZWQgd29uJ3QgYmUgb25lIHRoYXQgd2lsbCBob2xkIGFuIGVtcHR5
IGxpbmUgb3BlbiwgYWRkIGEgYnIuCi0gICAgaWYgKGlzRW5kT2ZQYXJhZ3JhcGgodmlzaWJsZVBv
cykgJiYgIWxpbmVCcmVha0V4aXN0c0F0UG9zaXRpb24odmlzaWJsZVBvcykpCisgICAgaWYgKGlz
RW5kT2ZQYXJhZ3JhcGgodmlzaWJsZVBvcykgJiYgIWxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBv
c2l0aW9uKHZpc2libGVQb3MpKQogICAgICAgICBhcHBlbmROb2RlKGNyZWF0ZUJyZWFrRWxlbWVu
dChkb2N1bWVudCgpKS5nZXQoKSwgYmxvY2tUb0luc2VydC5nZXQoKSk7CiAgICAgICAgIAogICAg
IC8vIE1vdmUgdGhlIHN0YXJ0IG5vZGUgYW5kIHRoZSBzaWJsaW5ncyBvZiB0aGUgc3RhcnQgbm9k
ZS4KSW5kZXg6IGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBl
ZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgJKHJldmlzaW9uIDQyNDYzKQorKysgZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBA
CiAgICAgUGFzc1JlZlB0cjxOb2RlPiBhcHBlbmRCbG9ja1BsYWNlaG9sZGVyKFBhc3NSZWZQdHI8
RWxlbWVudD4pOwogICAgIFBhc3NSZWZQdHI8Tm9kZT4gaW5zZXJ0QmxvY2tQbGFjZWhvbGRlcihj
b25zdCBQb3NpdGlvbiYpOwogICAgIFBhc3NSZWZQdHI8Tm9kZT4gYWRkQmxvY2tQbGFjZWhvbGRl
cklmTmVlZGVkKEVsZW1lbnQqKTsKLSAgICB2b2lkIHJlbW92ZVBsYWNlaG9sZGVyQXQoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJik7CisgICAgdm9pZCByZW1vdmVQbGFjZWhvbGRlckF0KGNvbnN0IFBv
c2l0aW9uJik7CiAKICAgICBQYXNzUmVmUHRyPE5vZGU+IGluc2VydE5ld0RlZmF1bHRQYXJhZ3Jh
cGhFbGVtZW50QXQoY29uc3QgUG9zaXRpb24mKTsKIApJbmRleDogZWRpdGluZy9CcmVha0Jsb2Nr
cXVvdGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNv
bW1hbmQuY3BwCShyZXZpc2lvbiA0MjQ2MykKKysrIGVkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29t
bWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAKICAgICAKICAgICAvLyBE
b24ndCBtb3ZlIGEgbGluZSBicmVhayBqdXN0IGFmdGVyIHRoZSBjYXJldC4gIERvaW5nIHNvIHdv
dWxkIGNyZWF0ZSBhbiBleHRyYSwgZW1wdHkgcGFyYWdyYXBoCiAgICAgLy8gaW4gdGhlIG5ldyBi
bG9ja3F1b3RlLgotICAgIGlmIChsaW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uKHZpc2libGVQb3Mp
KQorICAgIGlmIChsaW5lQnJlYWtFeGlzdHNBdFZpc2libGVQb3NpdGlvbih2aXNpYmxlUG9zKSkK
ICAgICAgICAgcG9zID0gcG9zLm5leHQoKTsKICAgICAgICAgCiAgICAgLy8gQWRqdXN0IHRoZSBw
b3NpdGlvbiBzbyB3ZSBkb24ndCBzcGxpdCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgcXVvdGUuICAK
SW5kZXg6IGVkaXRpbmcvaHRtbGVkaXRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL2h0bWxl
ZGl0aW5nLmgJKHJldmlzaW9uIDQyNDYzKQorKysgZWRpdGluZy9odG1sZWRpdGluZy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3LDggQEAKIGJvb2wgaXNUYWJsZUVsZW1lbnQoTm9kZSop
OwogYm9vbCBpc1RhYmxlQ2VsbChjb25zdCBOb2RlKik7CiAKLWJvb2wgbGluZUJyZWFrRXhpc3Rz
QXRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK2Jvb2wgbGluZUJyZWFrRXhpc3Rz
QXRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYpOworYm9vbCBsaW5lQnJlYWtFeGlzdHNBdFZpc2li
bGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKIAogVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb25Gb3JQYXJhZ3JhcGhJdGVyYXRpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29476</attachid>
            <date>2009-04-14 11:08:04 -0700</date>
            <delta_ts>2009-04-14 11:35:55 -0700</delta_ts>
            <desc>patch</desc>
            <filename>extralayout.txt</filename>
            <type>text/plain</type>
            <size>15427</size>
            <attacher name="Justin Garcia">justin.garcia</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQyNDc2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAKKzIwMDktMDQt
MTMgIEp1c3RpbiBHYXJjaWEgIDxqdXN0aW4uZ2FyY2lhQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjUxNzIKKyAgICAgICAgRXh0cmEgcGFydGlhbCBsYXlvdXQg
ZHVyaW5nIHRoZSBmaXJzdCBrZXlwcmVzcyBpbiBhbiBlbXB0eSBibG9jaworICAgICAgICAKKyAg
ICAgICAgRGV0ZXJtaW5pbmcgaWYgYSBwbGFjZWhvbGRlciBuZWVkcyB0byBiZSByZW1vdmVkIHJl
cXVpcmVzIHRoZSBjcmVhdGlvbiBvZiBhIFZpc2libGVQb3NpdGlvbiAKKyAgICAgICAgd2hpY2gg
d2FzIHRyaWdnZXJpbmcgbGF5b3V0IGJlZm9yZSB3ZSB3ZXJlIGZpbmlzaGVkIG1vZGlmeWluZyB0
aGUgRE9NIGZvciB0aGUgaW5zZXJ0IG9wZXJhdGlvbi4KKyAgICAgICAgCisgICAgICAgIEZpbmQg
b3V0IGlmIHdlIG5lZWQgdG8gcmVtb3ZlIGEgcGxhY2Vob2xkZXIgbmVhciB0aGUgc3RhcnQgb2Yg
dGhlIG9wZXJhdGlvbiwgYW5kIGlmIHdlIGRvIHJlbWVtYmVyIAorICAgICAgICB3aGVyZSBpdCdz
IGxvY2F0ZWQuICBUaGVuLCBsYXRlciwgcmVtb3ZlIGl0IGFsb25nIHdpdGggYWxsIG9mIHRoZSBv
dGhlciBET00gb3BlcmF0aW9ucyB3ZSBwZXJmb3JtLgorICAgICAgICAKKyAgICAgICAgUmVuYW1l
ZCBsaW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uIHRvIGxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBv
c2l0aW9uIGFuZCBhZGRlZCBhIGxpbmVCcmVha0V4aXN0c0F0UG9zaXRpb24KKyAgICAgICAgdGhh
dCB0YWtlcyBpbiBhIFBvc2l0aW9uLiAgSW4gSW5zZXJ0VGV4dENvbW1hbmQsIHdlIGNhbiB1c2Ug
dGhlIGxhdHRlciwgc2luY2Ugd2Ugbm9ybWFsaXplIG1hbnVhbGx5LgorICAgICAgICAKKyAgICAg
ICAgcmVtb3ZlUGxhY2Vob2xkZXJBdCBub3cgdGFrZXMgaW4gYSBQb3NpdGlvbiB0aGF0IGl0IGFz
c3VtZXMgaGFzIGFscmVhZHkgYmVlbiBjaGVja2VkIGZvciBhIHBsYWNlaG9sZGVyLgorCisgICAg
ICAgICogZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRp
dENvbW1hbmQ6OnJlbW92ZVBsYWNlaG9sZGVyQXQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0ZUVkaXRDb21tYW5kOjpicmVha091dE9mRW1wdHlNYWlsQmxvY2txdW90ZWRQYXJhZ3JhcGgp
OgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnBvc2l0aW9uQXZvaWRp
bmdTcGVjaWFsRWxlbWVudEJvdW5kYXJ5KToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVk
aXRDb21tYW5kLmg6CisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNhbGN1bGF0ZVR5
cGluZ1N0eWxlQWZ0ZXJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9u
Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybWF0QmxvY2tDb21tYW5kOjpkb0FwcGx5KToKKyAg
ICAgICAgKiBlZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGlu
Zy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVk
aXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0VGV4
dENvbW1hbmQ6OmlucHV0KToKKyAgICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OmxpbmVCcmVha0V4aXN0c0F0UG9zaXRpb24pOgorICAgICAgICAqIGVkaXRp
bmcvaHRtbGVkaXRpbmcuaDoKKwogMjAwOS0wNC0xMyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IENhbWVyb24gWndhcmljaC4KSW5kZXg6
IGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiA0MjQ2MykKKysrIGVkaXRpbmcvQ29t
cG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDMsMjQgKzYwMywxOCBA
QAogICAgIHJldHVybiAwOwogfQogCi0vLyBSZW1vdmVzICdcbidzIGFuZCBicnMgdGhhdCB3aWxs
IGNvbGxhcHNlIHdoZW4gY29udGVudCBpcyBpbnNlcnRlZCBqdXN0IGJlZm9yZSB0aGVtLgotLy8g
RklYTUU6IFdlIHNob3VsZG4ndCByZWFsbHkgaGF2ZSB0byByZW1vdmUgcGxhY2Vob2xkZXJzLCBi
dXQgcmVtb3ZpbmcgdGhlbSBpcyBhIHdvcmthcm91bmQgZm9yIDk2NjEuCi12b2lkIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjpyZW1vdmVQbGFjZWhvbGRlckF0KGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
dmlzaWJsZVBvc2l0aW9uKQorLy8gQXNzdW1lcyB0aGF0IHRoZSBwb3NpdGlvbiBpcyBhdCBhIHBs
YWNlaG9sZGVyIGFuZCBkb2VzIHRoZSByZW1vdmFsIHdpdGhvdXQgbXVjaCBjaGVja2luZy4KK3Zv
aWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZVBsYWNlaG9sZGVyQXQoY29uc3QgUG9zaXRp
b24mIHApCiB7Ci0gICAgaWYgKHZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKKyAgICBBU1NFUlQo
bGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihwKSk7CisgICAgCisgICAgaWYgKHAubm9kZSgpLT5o
YXNUYWdOYW1lKGJyVGFnKSkgeworICAgICAgICByZW1vdmVOb2RlKHAubm9kZSgpKTsKICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAKLSAgICBQb3NpdGlvbiBwID0gdmlzaWJsZVBvc2l0aW9uLmRl
ZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpOwotICAgIC8vIElmIGEgYnIgb3IgJ1xuJyBpcyBh
dCB0aGUgZW5kIG9mIGEgYmxvY2sgYW5kIG5vdCBhdCB0aGUgc3RhcnQgb2YgYSBwYXJhZ3JhcGgs
Ci0gICAgLy8gdGhlbiBpdCBpcyBzdXBlcmZsdW91cywgc28gYWRkaW5nIGNvbnRlbnQgYmVmb3Jl
IGEgYnIgb3IgJ1xuJyB0aGF0IGlzIGF0Ci0gICAgLy8gdGhlIHN0YXJ0IG9mIGEgcGFyYWdyYXBo
IHdpbGwgcmVuZGVyIGl0IHN1cGVyZmx1b3VzLgotICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qg
cmVtb3ZlIHBsYWNlaG9sZGVycyBhdCB0aGUgZW5kIG9mIGFub255bW91cyBibG9ja3MuCi0gICAg
aWYgKGlzRW5kT2ZCbG9jayh2aXNpYmxlUG9zaXRpb24pICYmIGlzU3RhcnRPZlBhcmFncmFwaCh2
aXNpYmxlUG9zaXRpb24pKSB7Ci0gICAgICAgIGlmIChwLm5vZGUoKS0+aGFzVGFnTmFtZShiclRh
ZykgJiYgcC5tX29mZnNldCA9PSAwKQotICAgICAgICAgICAgcmVtb3ZlTm9kZShwLm5vZGUoKSk7
Ci0gICAgICAgIGVsc2UgaWYgKGxpbmVCcmVha0V4aXN0c0F0UG9zaXRpb24odmlzaWJsZVBvc2l0
aW9uKSkKLSAgICAgICAgICAgIGRlbGV0ZVRleHRGcm9tTm9kZShzdGF0aWNfY2FzdDxUZXh0Kj4o
cC5ub2RlKCkpLCBwLm1fb2Zmc2V0LCAxKTsKICAgICB9CisgICAgCisgICAgLy8gUHJlc2VydmVk
IG5ld2xpbmUuCisgICAgZGVsZXRlVGV4dEZyb21Ob2RlKHN0YXRpY19jYXN0PFRleHQqPihwLm5v
ZGUoKSksIHAubV9vZmZzZXQsIDEpOwogfQogCiBQYXNzUmVmUHRyPE5vZGU+IENvbXBvc2l0ZUVk
aXRDb21tYW5kOjppbnNlcnROZXdEZWZhdWx0UGFyYWdyYXBoRWxlbWVudEF0KGNvbnN0IFBvc2l0
aW9uJiBwb3NpdGlvbikKQEAgLTgyNSw3ICs4MTksNyBAQAogICAgICAgICAvLyBleHBlY3RzIHRo
aXMgYmVoYXZpb3IpLgogICAgICAgICBlbHNlIGlmIChpc0Jsb2NrKG5vZGUpKQogICAgICAgICAg
ICAgcmVtb3ZlTm9kZUFuZFBydW5lQW5jZXN0b3JzKG5vZGUpOwotICAgICAgICBlbHNlIGlmIChs
aW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uKGNhcmV0QWZ0ZXJEZWxldGUpKSB7CisgICAgICAgIGVs
c2UgaWYgKGxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKGNhcmV0QWZ0ZXJEZWxldGUp
KSB7CiAgICAgICAgICAgICAvLyBUaGVyZSBpcyBhIHByZXNlcnZlZCAnXG4nIGF0IGNhcmV0QWZ0
ZXJEZWxldGUuCiAgICAgICAgICAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQq
Pihub2RlKTsKICAgICAgICAgICAgIGlmICh0ZXh0Tm9kZS0+bGVuZ3RoKCkgPT0gMSkKQEAgLTk0
MSw3ICs5MzUsNyBAQAogICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGF0
QlIpKTsKICAgICAKICAgICAvLyBJZiB0aGlzIGlzIGFuIGVtcHR5IHBhcmFncmFwaCB0aGVyZSBt
dXN0IGJlIGEgbGluZSBicmVhayBoZXJlLgotICAgIGlmICghbGluZUJyZWFrRXhpc3RzQXRQb3Np
dGlvbihjYXJldCkpCisgICAgaWYgKCFsaW5lQnJlYWtFeGlzdHNBdFZpc2libGVQb3NpdGlvbihj
YXJldCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBQb3NpdGlvbiBjYXJldFBv
cyhjYXJldC5kZWVwRXF1aXZhbGVudCgpKTsKQEAgLTk5NSw3ICs5ODksNyBAQAogICAgICAgICAg
ICAgLy8gRG9uJ3QgaW5zZXJ0IG91dHNpZGUgYW4gYW5jaG9yIGlmIGRvaW5nIHNvIHdvdWxkIHNr
aXAgb3ZlciBhIGxpbmUgYnJlYWsuICBJdCB3b3VsZAogICAgICAgICAgICAgLy8gcHJvYmFibHkg
YmUgc2FmZSB0byBtb3ZlIHRoZSBsaW5lIGJyZWFrIHNvIHRoYXQgd2UgY291bGQgc3RpbGwgYXZv
aWQgdGhlIGFuY2hvciBoZXJlLgogICAgICAgICAgICAgUG9zaXRpb24gZG93bnN0cmVhbSh2aXNp
YmxlUG9zLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpKTsKLSAgICAgICAgICAgIGlmIChs
aW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uKHZpc2libGVQb3MpICYmIGRvd25zdHJlYW0ubm9kZSgp
LT5pc0Rlc2NlbmRhbnRPZihlbmNsb3NpbmdBbmNob3IpKQorICAgICAgICAgICAgaWYgKGxpbmVC
cmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKHZpc2libGVQb3MpICYmIGRvd25zdHJlYW0ubm9k
ZSgpLT5pc0Rlc2NlbmRhbnRPZihlbmNsb3NpbmdBbmNob3IpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBvcmlnaW5hbDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgcmVzdWx0ID0gcG9zaXRp
b25BZnRlck5vZGUoZW5jbG9zaW5nQW5jaG9yKTsKSW5kZXg6IGVkaXRpbmcvSW5zZXJ0VGV4dENv
bW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCShy
ZXZpc2lvbiA0MjQ2MykKKysrIGVkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzAsOCArMTMwLDI3IEBACiAgICAgICAgIGRlbGV0ZVNlbGVjdGlvbihmYWxz
ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpOwogICAgIH0KICAgICAKKyAgICBQb3NpdGlvbiBzdGFydFBv
c2l0aW9uKGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCkpOworICAgIAorICAgIFBvc2l0aW9uIHBs
YWNlaG9sZGVyOworICAgIC8vIFdlIHdhbnQgdG8gcmVtb3ZlIHByZXNlcnZlZCBuZXdsaW5lcyBh
bmQgYnJzIHRoYXQgd2lsbCBjb2xsYXBzZSAoYW5kIHRodXMgYmVjb21lIHVubmVjZXNzYXJ5KSB3
aGVuIGNvbnRlbnQgCisgICAgLy8gaXMgaW5zZXJ0ZWQganVzdCBiZWZvcmUgdGhlbS4KKyAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkbid0IHJlYWxseSBoYXZlIHRvIGRvIHRoaXMsIGJ1dCByZW1vdmlu
ZyBwbGFjZWhvbGRlcnMgaXMgYSB3b3JrYXJvdW5kIGZvciA5NjYxLgorICAgIC8vIElmIHRoZSBj
YXJldCBpcyBqdXN0IGJlZm9yZSBhIHBsYWNlaG9sZGVyLCBkb3duc3RyZWFtIHdpbGwgbm9ybWFs
aXplIHRoZSBjYXJldCB0byBpdC4KKyAgICBQb3NpdGlvbiBkb3duc3RyZWFtKHN0YXJ0UG9zaXRp
b24uZG93bnN0cmVhbSgpKTsKKyAgICBpZiAobGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihkb3du
c3RyZWFtKSkgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IGhhbmRsZSBwbGFjZWhv
bGRlcnMgYXQgdGhlIGVuZCBvZiBhbm9ueW1vdXMgYmxvY2tzLgorICAgICAgICBWaXNpYmxlUG9z
aXRpb24gY2FyZXQoc3RhcnRQb3NpdGlvbik7CisgICAgICAgIGlmIChpc0VuZE9mQmxvY2soY2Fy
ZXQpICYmIGlzU3RhcnRPZlBhcmFncmFwaChjYXJldCkpCisgICAgICAgICAgICBwbGFjZWhvbGRl
ciA9IGRvd25zdHJlYW07CisgICAgICAgIC8vIERvbid0IHJlbW92ZSB0aGUgcGxhY2Vob2xkZXIg
eWV0LCBvdGhlcndpc2UgdGhlIGJsb2NrIHdlJ3JlIGluc2VydGluZyBpbnRvIHdvdWxkIGNvbGxh
cHNlIGJlZm9yZQorICAgICAgICAvLyB3ZSBnZXQgYSBjaGFuY2UgdG8gaW5zZXJ0IGludG8gaXQu
ICBXZSBjaGVjayBmb3IgYSBwbGFjZWhvbGRlciBub3csIHRob3VnaCwgYmVjYXVzZSBkb2luZyBz
byByZXF1aXJlcworICAgICAgICAvLyB0aGUgY3JlYXRpb24gb2YgYSBWaXNpYmxlUG9zaXRpb24s
IGFuZCBpZiB3ZSBkaWQgdGhhdCBwb3N0LWluc2VydGlvbiBpdCB3b3VsZCBmb3JjZSBhIGxheW91
dC4KKyAgICB9CisgICAgCiAgICAgLy8gSW5zZXJ0IHRoZSBjaGFyYWN0ZXIgYXQgdGhlIGxlZnRt
b3N0IGNhbmRpZGF0ZS4KLSAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gZW5kaW5nU2VsZWN0
aW9uKCkuc3RhcnQoKS51cHN0cmVhbSgpOworICAgIHN0YXJ0UG9zaXRpb24gPSBzdGFydFBvc2l0
aW9uLnVwc3RyZWFtKCk7CisgICAgCiAgICAgLy8gSXQgaXMgcG9zc2libGUgZm9yIHRoZSBub2Rl
IHRoYXQgY29udGFpbnMgc3RhcnRQb3NpdGlvbiB0byBjb250YWluIG9ubHkgdW5yZW5kZXJlZCB3
aGl0ZXNwYWNlLAogICAgIC8vIGFuZCBzbyBkZWxldGVJbnNpZ25pZmljYW50VGV4dCBjb3VsZCBy
ZW1vdmUgaXQuICBTYXZlIHRoZSBwb3NpdGlvbiBiZWZvcmUgdGhlIG5vZGUgaW4gY2FzZSB0aGF0
IGhhcHBlbnMuCiAgICAgUG9zaXRpb24gcG9zaXRpb25CZWZvcmVTdGFydE5vZGUocG9zaXRpb25C
ZWZvcmVOb2RlKHN0YXJ0UG9zaXRpb24ubm9kZSgpKSk7CkBAIC0xNDgsMTIgKzE2NywxNCBAQAog
ICAgIGlmICh0ZXh0ID09ICJcdCIpIHsKICAgICAgICAgZW5kUG9zaXRpb24gPSBpbnNlcnRUYWIo
c3RhcnRQb3NpdGlvbik7CiAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBlbmRQb3NpdGlvbi5wcmV2
aW91cygpOwotICAgICAgICByZW1vdmVQbGFjZWhvbGRlckF0KFZpc2libGVQb3NpdGlvbihzdGFy
dFBvc2l0aW9uKSk7CisgICAgICAgIGlmIChwbGFjZWhvbGRlci5pc05vdE51bGwoKSkKKyAgICAg
ICAgICAgIHJlbW92ZVBsYWNlaG9sZGVyQXQocGxhY2Vob2xkZXIpOwogICAgICAgICBtX2NoYXJh
Y3RlcnNBZGRlZCArPSAxOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUg
ZG9jdW1lbnQgaXMgc2V0IHVwIHRvIHJlY2VpdmUgdGV4dAogICAgICAgICBzdGFydFBvc2l0aW9u
ID0gcHJlcGFyZUZvclRleHRJbnNlcnRpb24oc3RhcnRQb3NpdGlvbik7Ci0gICAgICAgIHJlbW92
ZVBsYWNlaG9sZGVyQXQoVmlzaWJsZVBvc2l0aW9uKHN0YXJ0UG9zaXRpb24pKTsKKyAgICAgICAg
aWYgKHBsYWNlaG9sZGVyLmlzTm90TnVsbCgpKQorICAgICAgICAgICAgcmVtb3ZlUGxhY2Vob2xk
ZXJBdChwbGFjZWhvbGRlcik7CiAgICAgICAgIFRleHQgKnRleHROb2RlID0gc3RhdGljX2Nhc3Q8
VGV4dCAqPihzdGFydFBvc2l0aW9uLm5vZGUoKSk7CiAgICAgICAgIGludCBvZmZzZXQgPSBzdGFy
dFBvc2l0aW9uLm1fb2Zmc2V0OwogCkluZGV4OiBlZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCShyZXZpc2lv
biA0MjQ2MykKKysrIGVkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgYXBwZW5kTm9kZShwbGFjZWhvbGRlciwgYmxvY2tO
b2RlKTsKICAgICAKICAgICBWaXNpYmxlUG9zaXRpb24gZGVzdGluYXRpb24oUG9zaXRpb24ocGxh
Y2Vob2xkZXIuZ2V0KCksIDApKTsKLSAgICBpZiAocGFyYWdyYXBoU3RhcnQgPT0gcGFyYWdyYXBo
RW5kICYmICFsaW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uKHBhcmFncmFwaFN0YXJ0KSkgeworICAg
IGlmIChwYXJhZ3JhcGhTdGFydCA9PSBwYXJhZ3JhcGhFbmQgJiYgIWxpbmVCcmVha0V4aXN0c0F0
VmlzaWJsZVBvc2l0aW9uKHBhcmFncmFwaFN0YXJ0KSkgewogICAgICAgICBzZXRFbmRpbmdTZWxl
Y3Rpb24oZGVzdGluYXRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogZWRpdGlu
Zy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL0RlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiA0MjQ2MykKKysrIGVkaXRpbmcvRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3MSw3ICs2NzEsNyBAQAog
ICAgIGlmIChtX3R5cGluZ1N0eWxlICYmIAogICAgICAgICBpc1N0YXJ0T2ZQYXJhZ3JhcGgodmlz
aWJsZUVuZCkgJiYKICAgICAgICAgaXNFbmRPZlBhcmFncmFwaCh2aXNpYmxlRW5kKSAmJgotICAg
ICAgICBsaW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uKHZpc2libGVFbmQpKSB7CisgICAgICAgIGxp
bmVCcmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKHZpc2libGVFbmQpKSB7CiAgICAgICAgIC8v
IEFwcGx5IHN0eWxlIHRvIHRoZSBwbGFjZWhvbGRlciB0aGF0IGlzIG5vdyBob2xkaW5nIG9wZW4g
dGhlIGVtcHR5IHBhcmFncmFwaC4gCiAgICAgICAgIC8vIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHRo
ZSBwYXJhZ3JhcGggaGFzIHRoZSByaWdodCBoZWlnaHQsIGFuZCB0aGF0IHRoZSBwYXJhZ3JhcGgg
CiAgICAgICAgIC8vIHRha2VzIG9uIHRoZSByaWdodCBzdHlsZSBhbmQgcmV0YWlucyBpdCBldmVu
IGlmIHlvdSBtb3ZlIHRoZSBzZWxlY3Rpb24gYXdheSBhbmQKQEAgLTcyOSw3ICs3MjksNyBAQAog
ICAgIFBvc2l0aW9uIGRvd25zdHJlYW1FbmQgPSBtX3NlbGVjdGlvblRvRGVsZXRlLmVuZCgpLmRv
d25zdHJlYW0oKTsKICAgICBtX25lZWRQbGFjZWhvbGRlciA9IGlzU3RhcnRPZlBhcmFncmFwaCht
X3NlbGVjdGlvblRvRGVsZXRlLnZpc2libGVTdGFydCgpKSAmJgogICAgICAgICAgICAgICAgICAg
ICAgICAgaXNFbmRPZlBhcmFncmFwaChtX3NlbGVjdGlvblRvRGVsZXRlLnZpc2libGVFbmQoKSkg
JiYKLSAgICAgICAgICAgICAgICAgICAgICAgICFsaW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uKG1f
c2VsZWN0aW9uVG9EZWxldGUudmlzaWJsZUVuZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICFsaW5lQnJlYWtFeGlzdHNBdFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvblRvRGVsZXRlLnZp
c2libGVFbmQoKSk7CiAgICAgaWYgKG1fbmVlZFBsYWNlaG9sZGVyKSB7CiAgICAgICAgIC8vIERv
bid0IG5lZWQgYSBwbGFjZWhvbGRlciB3aGVuIGRlbGV0aW5nIGEgc2VsZWN0aW9uIHRoYXQgc3Rh
cnRzIGp1c3QgYmVmb3JlIGEgdGFibGUKICAgICAgICAgLy8gYW5kIGVuZHMgaW5zaWRlIGl0ICh3
ZSBkbyBuZWVkIHBsYWNlaG9sZGVycyB0byBob2xkIG9wZW4gZW1wdHkgY2VsbHMsIGJ1dCB0aGF0
J3MKSW5kZXg6IGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcv
aHRtbGVkaXRpbmcuY3BwCShyZXZpc2lvbiA0MjQ2MykKKysrIGVkaXRpbmcvaHRtbGVkaXRpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MDYsMTQgKzkwNiwyNCBAQAogICAgIHJldHVybiBsYXN0
T2Zmc2V0Rm9yRWRpdGluZyhuKTsKIH0KIAotYm9vbCBsaW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQorYm9vbCBsaW5lQnJlYWtF
eGlzdHNBdFZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3Np
dGlvbikKIHsKLSAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQorICAgIHJldHVybiBs
aW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uKHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgp
LmRvd25zdHJlYW0oKSk7Cit9CisKK2Jvb2wgbGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihjb25z
dCBQb3NpdGlvbiYgcG9zaXRpb24pCit7CisgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgIFBvc2l0aW9uIGRvd25zdHJlYW0odmlz
aWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpKTsKLSAgICByZXR1cm4g
ZG93bnN0cmVhbS5ub2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpIHx8Ci0gICAgICAgICAgIChkb3du
c3RyZWFtLm5vZGUoKS0+aXNUZXh0Tm9kZSgpICYmIGRvd25zdHJlYW0ubm9kZSgpLT5yZW5kZXJl
cigpLT5zdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUoKSAmJiB2aXNpYmxlUG9zaXRpb24uY2hhcmFj
dGVyQWZ0ZXIoKSA9PSAnXG4nKTsKKyAgICAKKyAgICBpZiAocG9zaXRpb24ubm9kZSgpLT5oYXNU
YWdOYW1lKGJyVGFnKSAmJiBwb3NpdGlvbi5tX29mZnNldCA9PSAwKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAKKyAgICBpZiAoIXBvc2l0aW9uLm5vZGUoKS0+aXNUZXh0Tm9kZSgpIHx8ICFw
b3NpdGlvbi5ub2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCktPnByZXNlcnZlTmV3bGluZSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNf
Y2FzdDxUZXh0Kj4ocG9zaXRpb24ubm9kZSgpKTsKKyAgICByZXR1cm4gKHVuc2lnbmVkKXBvc2l0
aW9uLm1fb2Zmc2V0IDwgdGV4dE5vZGUtPmxlbmd0aCgpICYmIHRleHROb2RlLT5kYXRhKClbcG9z
aXRpb24ubV9vZmZzZXRdID09ICdcbic7CiB9CiAKIC8vIE1vZGlmaWVzIHNlbGVjdGlvbnMgdGhh
dCBoYXZlIGFuIGVuZCBwb2ludCBhdCB0aGUgZWRnZSBvZiBhIHRhYmxlCkluZGV4OiBlZGl0aW5n
L0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcvSW5zZXJ0
TGluZUJyZWFrQ29tbWFuZC5jcHAJKHJldmlzaW9uIDQyNDYzKQorKysgZWRpdGluZy9JbnNlcnRM
aW5lQnJlYWtDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBACiAg
ICAgCiAgICAgLy8gRklYTUU6IE5lZWQgdG8gbWVyZ2UgdGV4dCBub2RlcyB3aGVuIGluc2VydGlu
ZyBqdXN0IGFmdGVyIG9yIGJlZm9yZSB0ZXh0LgogICAgIAotICAgIGlmIChpc0VuZE9mUGFyYWdy
YXBoKGNhcmV0KSAmJiAhbGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihjYXJldCkpIHsKKyAgICBp
ZiAoaXNFbmRPZlBhcmFncmFwaChjYXJldCkgJiYgIWxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBv
c2l0aW9uKGNhcmV0KSkgewogICAgICAgICBib29sIG5lZWRFeHRyYUxpbmVCcmVhayA9ICFwb3Mu
bm9kZSgpLT5oYXNUYWdOYW1lKGhyVGFnKSAmJiAhcG9zLm5vZGUoKS0+aGFzVGFnTmFtZSh0YWJs
ZVRhZyk7CiAgICAgICAgIAogICAgICAgICBpbnNlcnROb2RlQXQobm9kZVRvSW5zZXJ0LmdldCgp
LCBwb3MpOwpJbmRleDogZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQu
Y3BwCShyZXZpc2lvbiA0MjQ2MykKKysrIGVkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9y
Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw3ICsxNzAsNyBAQAogICAgIC8vIGlu
Y2x1ZGluZyB3aGVuIHRoZSBibG9jayBpcyBlbXB0eS4gCiAgICAgaWYgKGlzTGFzdEluQmxvY2sp
IHsKICAgICAgICAgaWYgKG5lc3ROZXdCbG9jaykgewotICAgICAgICAgICAgaWYgKGlzRmlyc3RJ
bkJsb2NrICYmICFsaW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uKHZpc2libGVQb3MpKSB7CisgICAg
ICAgICAgICBpZiAoaXNGaXJzdEluQmxvY2sgJiYgIWxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBv
c2l0aW9uKHZpc2libGVQb3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIGJsb2NrIGlzIGVt
cHR5LiAgQ3JlYXRlIGFuIGVtcHR5IGJsb2NrIHRvCiAgICAgICAgICAgICAgICAgLy8gcmVwcmVz
ZW50IHRoZSBwYXJhZ3JhcGggdGhhdCB3ZSdyZSBsZWF2aW5nLgogICAgICAgICAgICAgICAgIFJl
ZlB0cjxFbGVtZW50PiBleHRyYUJsb2NrID0gY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVsZW1lbnQo
ZG9jdW1lbnQoKSk7CkBAIC0yODIsNyArMjgyLDcgQEAKICAgICAvLyBJZiB0aGUgcGFyYWdyYXBo
IHNlcGFyYXRvciB3YXMgaW5zZXJ0ZWQgYXQgdGhlIGVuZCBvZiBhIHBhcmFncmFwaCwgYW4gZW1w
dHkgbGluZSBtdXN0IGJlCiAgICAgLy8gY3JlYXRlZC4gIEFsbCBvZiB0aGUgbm9kZXMsIHN0YXJ0
aW5nIGF0IHZpc2libGVQb3MsIGFyZSBhYm91dCB0byBiZSBhZGRlZCB0byB0aGUgbmV3IHBhcmFn
cmFwaCAKICAgICAvLyBlbGVtZW50LiAgSWYgdGhlIGZpcnN0IG5vZGUgdG8gYmUgaW5zZXJ0ZWQg
d29uJ3QgYmUgb25lIHRoYXQgd2lsbCBob2xkIGFuIGVtcHR5IGxpbmUgb3BlbiwgYWRkIGEgYnIu
Ci0gICAgaWYgKGlzRW5kT2ZQYXJhZ3JhcGgodmlzaWJsZVBvcykgJiYgIWxpbmVCcmVha0V4aXN0
c0F0UG9zaXRpb24odmlzaWJsZVBvcykpCisgICAgaWYgKGlzRW5kT2ZQYXJhZ3JhcGgodmlzaWJs
ZVBvcykgJiYgIWxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKHZpc2libGVQb3MpKQog
ICAgICAgICBhcHBlbmROb2RlKGNyZWF0ZUJyZWFrRWxlbWVudChkb2N1bWVudCgpKS5nZXQoKSwg
YmxvY2tUb0luc2VydC5nZXQoKSk7CiAgICAgICAgIAogICAgIC8vIE1vdmUgdGhlIHN0YXJ0IG5v
ZGUgYW5kIHRoZSBzaWJsaW5ncyBvZiB0aGUgc3RhcnQgbm9kZS4KSW5kZXg6IGVkaXRpbmcvQ29t
cG9zaXRlRWRpdENvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRD
b21tYW5kLmgJKHJldmlzaW9uIDQyNDYzKQorKysgZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFu
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBACiAgICAgUGFzc1JlZlB0cjxOb2Rl
PiBhcHBlbmRCbG9ja1BsYWNlaG9sZGVyKFBhc3NSZWZQdHI8RWxlbWVudD4pOwogICAgIFBhc3NS
ZWZQdHI8Tm9kZT4gaW5zZXJ0QmxvY2tQbGFjZWhvbGRlcihjb25zdCBQb3NpdGlvbiYpOwogICAg
IFBhc3NSZWZQdHI8Tm9kZT4gYWRkQmxvY2tQbGFjZWhvbGRlcklmTmVlZGVkKEVsZW1lbnQqKTsK
LSAgICB2b2lkIHJlbW92ZVBsYWNlaG9sZGVyQXQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Cisg
ICAgdm9pZCByZW1vdmVQbGFjZWhvbGRlckF0KGNvbnN0IFBvc2l0aW9uJik7CiAKICAgICBQYXNz
UmVmUHRyPE5vZGU+IGluc2VydE5ld0RlZmF1bHRQYXJhZ3JhcGhFbGVtZW50QXQoY29uc3QgUG9z
aXRpb24mKTsKIApJbmRleDogZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBlZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwCShyZXZpc2lvbiA0
MjQ2MykKKysrIGVkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg4LDcgKzg4LDcgQEAKICAgICAKICAgICAvLyBEb24ndCBtb3ZlIGEgbGluZSBicmVh
ayBqdXN0IGFmdGVyIHRoZSBjYXJldC4gIERvaW5nIHNvIHdvdWxkIGNyZWF0ZSBhbiBleHRyYSwg
ZW1wdHkgcGFyYWdyYXBoCiAgICAgLy8gaW4gdGhlIG5ldyBibG9ja3F1b3RlLgotICAgIGlmIChs
aW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uKHZpc2libGVQb3MpKQorICAgIGlmIChsaW5lQnJlYWtF
eGlzdHNBdFZpc2libGVQb3NpdGlvbih2aXNpYmxlUG9zKSkKICAgICAgICAgcG9zID0gcG9zLm5l
eHQoKTsKICAgICAgICAgCiAgICAgLy8gQWRqdXN0IHRoZSBwb3NpdGlvbiBzbyB3ZSBkb24ndCBz
cGxpdCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgcXVvdGUuICAKSW5kZXg6IGVkaXRpbmcvaHRtbGVk
aXRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL2h0bWxlZGl0aW5nLmgJKHJldmlzaW9uIDQy
NDYzKQorKysgZWRpdGluZy9odG1sZWRpdGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyAr
MTI3LDggQEAKIGJvb2wgaXNUYWJsZUVsZW1lbnQoTm9kZSopOwogYm9vbCBpc1RhYmxlQ2VsbChj
b25zdCBOb2RlKik7CiAKLWJvb2wgbGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihjb25zdCBWaXNp
YmxlUG9zaXRpb24mKTsKK2Jvb2wgbGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihjb25zdCBQb3Np
dGlvbiYpOworYm9vbCBsaW5lQnJlYWtFeGlzdHNBdFZpc2libGVQb3NpdGlvbihjb25zdCBWaXNp
YmxlUG9zaXRpb24mKTsKIAogVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Gb3JQYXJhZ3JhcGhJ
dGVyYXRpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29477</attachid>
            <date>2009-04-14 11:35:55 -0700</date>
            <delta_ts>2009-04-14 11:43:16 -0700</delta_ts>
            <desc>patch</desc>
            <filename>extralayout.txt</filename>
            <type>text/plain</type>
            <size>15604</size>
            <attacher name="Justin Garcia">justin.garcia</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQyNDc2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAKKzIwMDktMDQt
MTMgIEp1c3RpbiBHYXJjaWEgIDxqdXN0aW4uZ2FyY2lhQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjUxNzIKKyAgICAgICAgRXh0cmEgcGFydGlhbCBsYXlvdXQg
ZHVyaW5nIHRoZSBmaXJzdCBrZXlwcmVzcyBpbiBhbiBlbXB0eSBibG9jaworICAgICAgICAKKyAg
ICAgICAgRGV0ZXJtaW5pbmcgaWYgYSBwbGFjZWhvbGRlciBuZWVkcyB0byBiZSByZW1vdmVkIHJl
cXVpcmVzIHRoZSBjcmVhdGlvbiBvZiBhIFZpc2libGVQb3NpdGlvbiAKKyAgICAgICAgd2hpY2gg
d2FzIHRyaWdnZXJpbmcgbGF5b3V0IGJlZm9yZSB3ZSB3ZXJlIGZpbmlzaGVkIG1vZGlmeWluZyB0
aGUgRE9NIGZvciB0aGUgaW5zZXJ0IG9wZXJhdGlvbi4KKyAgICAgICAgCisgICAgICAgIEZpbmQg
b3V0IGlmIHdlIG5lZWQgdG8gcmVtb3ZlIGEgcGxhY2Vob2xkZXIgbmVhciB0aGUgc3RhcnQgb2Yg
dGhlIG9wZXJhdGlvbiwgYW5kIGlmIHdlIGRvIHJlbWVtYmVyIAorICAgICAgICB3aGVyZSBpdCdz
IGxvY2F0ZWQuICBUaGVuLCBsYXRlciwgcmVtb3ZlIGl0IGFsb25nIHdpdGggYWxsIG9mIHRoZSBv
dGhlciBET00gb3BlcmF0aW9ucyB3ZSBwZXJmb3JtLgorICAgICAgICAKKyAgICAgICAgUmVuYW1l
ZCBsaW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uIHRvIGxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBv
c2l0aW9uIGFuZCBhZGRlZCBhIGxpbmVCcmVha0V4aXN0c0F0UG9zaXRpb24KKyAgICAgICAgdGhh
dCB0YWtlcyBpbiBhIFBvc2l0aW9uLiAgSW4gSW5zZXJ0VGV4dENvbW1hbmQsIHdlIGNhbiB1c2Ug
dGhlIGxhdHRlciwgc2luY2Ugd2Ugbm9ybWFsaXplIG1hbnVhbGx5LgorICAgICAgICAKKyAgICAg
ICAgcmVtb3ZlUGxhY2Vob2xkZXJBdCBub3cgdGFrZXMgaW4gYSBQb3NpdGlvbiB0aGF0IGl0IGFz
c3VtZXMgaGFzIGFscmVhZHkgYmVlbiBjaGVja2VkIGZvciBhIHBsYWNlaG9sZGVyLgorCisgICAg
ICAgICogZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRp
dENvbW1hbmQ6OnJlbW92ZVBsYWNlaG9sZGVyQXQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0ZUVkaXRDb21tYW5kOjpicmVha091dE9mRW1wdHlNYWlsQmxvY2txdW90ZWRQYXJhZ3JhcGgp
OgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnBvc2l0aW9uQXZvaWRp
bmdTcGVjaWFsRWxlbWVudEJvdW5kYXJ5KToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVk
aXRDb21tYW5kLmg6CisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNhbGN1bGF0ZVR5
cGluZ1N0eWxlQWZ0ZXJEZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9u
Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybWF0QmxvY2tDb21tYW5kOjpkb0FwcGx5KToKKyAg
ICAgICAgKiBlZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGlu
Zy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVk
aXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0VGV4
dENvbW1hbmQ6OmlucHV0KToKKyAgICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OmxpbmVCcmVha0V4aXN0c0F0UG9zaXRpb24pOgorICAgICAgICAqIGVkaXRp
bmcvaHRtbGVkaXRpbmcuaDoKKwogMjAwOS0wNC0xMyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IENhbWVyb24gWndhcmljaC4KSW5kZXg6
IGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiA0MjQ2MykKKysrIGVkaXRpbmcvQ29t
cG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDMsMjQgKzYwMywxOCBA
QAogICAgIHJldHVybiAwOwogfQogCi0vLyBSZW1vdmVzICdcbidzIGFuZCBicnMgdGhhdCB3aWxs
IGNvbGxhcHNlIHdoZW4gY29udGVudCBpcyBpbnNlcnRlZCBqdXN0IGJlZm9yZSB0aGVtLgotLy8g
RklYTUU6IFdlIHNob3VsZG4ndCByZWFsbHkgaGF2ZSB0byByZW1vdmUgcGxhY2Vob2xkZXJzLCBi
dXQgcmVtb3ZpbmcgdGhlbSBpcyBhIHdvcmthcm91bmQgZm9yIDk2NjEuCi12b2lkIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjpyZW1vdmVQbGFjZWhvbGRlckF0KGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
dmlzaWJsZVBvc2l0aW9uKQorLy8gQXNzdW1lcyB0aGF0IHRoZSBwb3NpdGlvbiBpcyBhdCBhIHBs
YWNlaG9sZGVyIGFuZCBkb2VzIHRoZSByZW1vdmFsIHdpdGhvdXQgbXVjaCBjaGVja2luZy4KK3Zv
aWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZVBsYWNlaG9sZGVyQXQoY29uc3QgUG9zaXRp
b24mIHApCiB7Ci0gICAgaWYgKHZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKKyAgICBBU1NFUlQo
bGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihwKSk7CisgICAgCisgICAgLy8gV2UgYXJlIGNlcnRh
aW4gdGhhdCB0aGUgcG9zaXRpb24gaXMgYXQgYSBsaW5lIGJyZWFrLCBidXQgaXQgbWF5IGJlIGEg
YnIgb3IgYSBwcmVzZXJ2ZWQgbmV3bGluZS4KKyAgICBpZiAocC5hbmNob3JOb2RlKCktPmhhc1Rh
Z05hbWUoYnJUYWcpKSB7CisgICAgICAgIHJlbW92ZU5vZGUocC5hbmNob3JOb2RlKCkpOwogICAg
ICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIFBvc2l0aW9uIHAgPSB2aXNpYmxlUG9zaXRpb24u
ZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCk7Ci0gICAgLy8gSWYgYSBiciBvciAnXG4nIGlz
IGF0IHRoZSBlbmQgb2YgYSBibG9jayBhbmQgbm90IGF0IHRoZSBzdGFydCBvZiBhIHBhcmFncmFw
aCwKLSAgICAvLyB0aGVuIGl0IGlzIHN1cGVyZmx1b3VzLCBzbyBhZGRpbmcgY29udGVudCBiZWZv
cmUgYSBiciBvciAnXG4nIHRoYXQgaXMgYXQKLSAgICAvLyB0aGUgc3RhcnQgb2YgYSBwYXJhZ3Jh
cGggd2lsbCByZW5kZXIgaXQgc3VwZXJmbHVvdXMuCi0gICAgLy8gRklYTUU6IFRoaXMgZG9lc24n
dCByZW1vdmUgcGxhY2Vob2xkZXJzIGF0IHRoZSBlbmQgb2YgYW5vbnltb3VzIGJsb2Nrcy4KLSAg
ICBpZiAoaXNFbmRPZkJsb2NrKHZpc2libGVQb3NpdGlvbikgJiYgaXNTdGFydE9mUGFyYWdyYXBo
KHZpc2libGVQb3NpdGlvbikpIHsKLSAgICAgICAgaWYgKHAubm9kZSgpLT5oYXNUYWdOYW1lKGJy
VGFnKSAmJiBwLm1fb2Zmc2V0ID09IDApCi0gICAgICAgICAgICByZW1vdmVOb2RlKHAubm9kZSgp
KTsKLSAgICAgICAgZWxzZSBpZiAobGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbih2aXNpYmxlUG9z
aXRpb24pKQotICAgICAgICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKHN0YXRpY19jYXN0PFRleHQq
PihwLm5vZGUoKSksIHAubV9vZmZzZXQsIDEpOwogICAgIH0KKyAgICAKKyAgICBkZWxldGVUZXh0
RnJvbU5vZGUoc3RhdGljX2Nhc3Q8VGV4dCo+KHAuYW5jaG9yTm9kZSgpKSwgcC5vZmZzZXRJbkNv
bnRhaW5lck5vZGUoKSwgMSk7CiB9CiAKIFBhc3NSZWZQdHI8Tm9kZT4gQ29tcG9zaXRlRWRpdENv
bW1hbmQ6Omluc2VydE5ld0RlZmF1bHRQYXJhZ3JhcGhFbGVtZW50QXQoY29uc3QgUG9zaXRpb24m
IHBvc2l0aW9uKQpAQCAtODI1LDcgKzgxOSw3IEBACiAgICAgICAgIC8vIGV4cGVjdHMgdGhpcyBi
ZWhhdmlvcikuCiAgICAgICAgIGVsc2UgaWYgKGlzQmxvY2sobm9kZSkpCiAgICAgICAgICAgICBy
ZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMobm9kZSk7Ci0gICAgICAgIGVsc2UgaWYgKGxpbmVC
cmVha0V4aXN0c0F0UG9zaXRpb24oY2FyZXRBZnRlckRlbGV0ZSkpIHsKKyAgICAgICAgZWxzZSBp
ZiAobGluZUJyZWFrRXhpc3RzQXRWaXNpYmxlUG9zaXRpb24oY2FyZXRBZnRlckRlbGV0ZSkpIHsK
ICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgcHJlc2VydmVkICdcbicgYXQgY2FyZXRBZnRlckRl
bGV0ZS4KICAgICAgICAgICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG5v
ZGUpOwogICAgICAgICAgICAgaWYgKHRleHROb2RlLT5sZW5ndGgoKSA9PSAxKQpAQCAtOTQxLDcg
KzkzNSw3IEBACiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oYXRCUikp
OwogICAgIAogICAgIC8vIElmIHRoaXMgaXMgYW4gZW1wdHkgcGFyYWdyYXBoIHRoZXJlIG11c3Qg
YmUgYSBsaW5lIGJyZWFrIGhlcmUuCi0gICAgaWYgKCFsaW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9u
KGNhcmV0KSkKKyAgICBpZiAoIWxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKGNhcmV0
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIFBvc2l0aW9uIGNhcmV0UG9zKGNh
cmV0LmRlZXBFcXVpdmFsZW50KCkpOwpAQCAtOTk1LDcgKzk4OSw3IEBACiAgICAgICAgICAgICAv
LyBEb24ndCBpbnNlcnQgb3V0c2lkZSBhbiBhbmNob3IgaWYgZG9pbmcgc28gd291bGQgc2tpcCBv
dmVyIGEgbGluZSBicmVhay4gIEl0IHdvdWxkCiAgICAgICAgICAgICAvLyBwcm9iYWJseSBiZSBz
YWZlIHRvIG1vdmUgdGhlIGxpbmUgYnJlYWsgc28gdGhhdCB3ZSBjb3VsZCBzdGlsbCBhdm9pZCB0
aGUgYW5jaG9yIGhlcmUuCiAgICAgICAgICAgICBQb3NpdGlvbiBkb3duc3RyZWFtKHZpc2libGVQ
b3MuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCkpOwotICAgICAgICAgICAgaWYgKGxpbmVC
cmVha0V4aXN0c0F0UG9zaXRpb24odmlzaWJsZVBvcykgJiYgZG93bnN0cmVhbS5ub2RlKCktPmlz
RGVzY2VuZGFudE9mKGVuY2xvc2luZ0FuY2hvcikpCisgICAgICAgICAgICBpZiAobGluZUJyZWFr
RXhpc3RzQXRWaXNpYmxlUG9zaXRpb24odmlzaWJsZVBvcykgJiYgZG93bnN0cmVhbS5ub2RlKCkt
PmlzRGVzY2VuZGFudE9mKGVuY2xvc2luZ0FuY2hvcikpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG9yaWdpbmFsOwogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXN1bHQgPSBwb3NpdGlvbkFm
dGVyTm9kZShlbmNsb3NpbmdBbmNob3IpOwpJbmRleDogZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAJKHJldmlz
aW9uIDQyNDYzKQorKysgZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMCw4ICsxMzAsMjcgQEAKICAgICAgICAgZGVsZXRlU2VsZWN0aW9uKGZhbHNlLCB0
cnVlLCB0cnVlLCBmYWxzZSk7CiAgICAgfQogICAgIAorICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRp
b24oZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgCisgICAgUG9zaXRpb24gcGxhY2Vo
b2xkZXI7CisgICAgLy8gV2Ugd2FudCB0byByZW1vdmUgcHJlc2VydmVkIG5ld2xpbmVzIGFuZCBi
cnMgdGhhdCB3aWxsIGNvbGxhcHNlIChhbmQgdGh1cyBiZWNvbWUgdW5uZWNlc3NhcnkpIHdoZW4g
Y29udGVudCAKKyAgICAvLyBpcyBpbnNlcnRlZCBqdXN0IGJlZm9yZSB0aGVtLgorICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGRuJ3QgcmVhbGx5IGhhdmUgdG8gZG8gdGhpcywgYnV0IHJlbW92aW5nIHBs
YWNlaG9sZGVycyBpcyBhIHdvcmthcm91bmQgZm9yIDk2NjEuCisgICAgLy8gSWYgdGhlIGNhcmV0
IGlzIGp1c3QgYmVmb3JlIGEgcGxhY2Vob2xkZXIsIGRvd25zdHJlYW0gd2lsbCBub3JtYWxpemUg
dGhlIGNhcmV0IHRvIGl0LgorICAgIFBvc2l0aW9uIGRvd25zdHJlYW0oc3RhcnRQb3NpdGlvbi5k
b3duc3RyZWFtKCkpOworICAgIGlmIChsaW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uKGRvd25zdHJl
YW0pKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3QgaGFuZGxlIHBsYWNlaG9sZGVy
cyBhdCB0aGUgZW5kIG9mIGFub255bW91cyBibG9ja3MuCisgICAgICAgIFZpc2libGVQb3NpdGlv
biBjYXJldChzdGFydFBvc2l0aW9uKTsKKyAgICAgICAgaWYgKGlzRW5kT2ZCbG9jayhjYXJldCkg
JiYgaXNTdGFydE9mUGFyYWdyYXBoKGNhcmV0KSkKKyAgICAgICAgICAgIHBsYWNlaG9sZGVyID0g
ZG93bnN0cmVhbTsKKyAgICAgICAgLy8gRG9uJ3QgcmVtb3ZlIHRoZSBwbGFjZWhvbGRlciB5ZXQs
IG90aGVyd2lzZSB0aGUgYmxvY2sgd2UncmUgaW5zZXJ0aW5nIGludG8gd291bGQgY29sbGFwc2Ug
YmVmb3JlCisgICAgICAgIC8vIHdlIGdldCBhIGNoYW5jZSB0byBpbnNlcnQgaW50byBpdC4gIFdl
IGNoZWNrIGZvciBhIHBsYWNlaG9sZGVyIG5vdywgdGhvdWdoLCBiZWNhdXNlIGRvaW5nIHNvIHJl
cXVpcmVzCisgICAgICAgIC8vIHRoZSBjcmVhdGlvbiBvZiBhIFZpc2libGVQb3NpdGlvbiwgYW5k
IGlmIHdlIGRpZCB0aGF0IHBvc3QtaW5zZXJ0aW9uIGl0IHdvdWxkIGZvcmNlIGEgbGF5b3V0Lgor
ICAgIH0KKyAgICAKICAgICAvLyBJbnNlcnQgdGhlIGNoYXJhY3RlciBhdCB0aGUgbGVmdG1vc3Qg
Y2FuZGlkYXRlLgotICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBlbmRpbmdTZWxlY3Rpb24o
KS5zdGFydCgpLnVwc3RyZWFtKCk7CisgICAgc3RhcnRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24u
dXBzdHJlYW0oKTsKKyAgICAKICAgICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIG5vZGUgdGhh
dCBjb250YWlucyBzdGFydFBvc2l0aW9uIHRvIGNvbnRhaW4gb25seSB1bnJlbmRlcmVkIHdoaXRl
c3BhY2UsCiAgICAgLy8gYW5kIHNvIGRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0IGNvdWxkIHJlbW92
ZSBpdC4gIFNhdmUgdGhlIHBvc2l0aW9uIGJlZm9yZSB0aGUgbm9kZSBpbiBjYXNlIHRoYXQgaGFw
cGVucy4KICAgICBQb3NpdGlvbiBwb3NpdGlvbkJlZm9yZVN0YXJ0Tm9kZShwb3NpdGlvbkJlZm9y
ZU5vZGUoc3RhcnRQb3NpdGlvbi5ub2RlKCkpKTsKQEAgLTE0OCwxMiArMTY3LDE0IEBACiAgICAg
aWYgKHRleHQgPT0gIlx0IikgewogICAgICAgICBlbmRQb3NpdGlvbiA9IGluc2VydFRhYihzdGFy
dFBvc2l0aW9uKTsKICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IGVuZFBvc2l0aW9uLnByZXZpb3Vz
KCk7Ci0gICAgICAgIHJlbW92ZVBsYWNlaG9sZGVyQXQoVmlzaWJsZVBvc2l0aW9uKHN0YXJ0UG9z
aXRpb24pKTsKKyAgICAgICAgaWYgKHBsYWNlaG9sZGVyLmlzTm90TnVsbCgpKQorICAgICAgICAg
ICAgcmVtb3ZlUGxhY2Vob2xkZXJBdChwbGFjZWhvbGRlcik7CiAgICAgICAgIG1fY2hhcmFjdGVy
c0FkZGVkICs9IDE7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBkb2N1
bWVudCBpcyBzZXQgdXAgdG8gcmVjZWl2ZSB0ZXh0CiAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBw
cmVwYXJlRm9yVGV4dEluc2VydGlvbihzdGFydFBvc2l0aW9uKTsKLSAgICAgICAgcmVtb3ZlUGxh
Y2Vob2xkZXJBdChWaXNpYmxlUG9zaXRpb24oc3RhcnRQb3NpdGlvbikpOworICAgICAgICBpZiAo
cGxhY2Vob2xkZXIuaXNOb3ROdWxsKCkpCisgICAgICAgICAgICByZW1vdmVQbGFjZWhvbGRlckF0
KHBsYWNlaG9sZGVyKTsKICAgICAgICAgVGV4dCAqdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0
ICo+KHN0YXJ0UG9zaXRpb24ubm9kZSgpKTsKICAgICAgICAgaW50IG9mZnNldCA9IHN0YXJ0UG9z
aXRpb24ubV9vZmZzZXQ7CiAKSW5kZXg6IGVkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBlZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAJKHJldmlzaW9uIDQy
NDYzKQorKysgZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjQsNyArMTI0LDcgQEAKICAgICBhcHBlbmROb2RlKHBsYWNlaG9sZGVyLCBibG9ja05vZGUp
OwogICAgIAogICAgIFZpc2libGVQb3NpdGlvbiBkZXN0aW5hdGlvbihQb3NpdGlvbihwbGFjZWhv
bGRlci5nZXQoKSwgMCkpOwotICAgIGlmIChwYXJhZ3JhcGhTdGFydCA9PSBwYXJhZ3JhcGhFbmQg
JiYgIWxpbmVCcmVha0V4aXN0c0F0UG9zaXRpb24ocGFyYWdyYXBoU3RhcnQpKSB7CisgICAgaWYg
KHBhcmFncmFwaFN0YXJ0ID09IHBhcmFncmFwaEVuZCAmJiAhbGluZUJyZWFrRXhpc3RzQXRWaXNp
YmxlUG9zaXRpb24ocGFyYWdyYXBoU3RhcnQpKSB7CiAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlv
bihkZXN0aW5hdGlvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBlZGl0aW5nL0Rl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcvRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDQyNDYzKQorKysgZWRpdGluZy9EZWxldGVTZWxl
Y3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcxLDcgKzY3MSw3IEBACiAgICAg
aWYgKG1fdHlwaW5nU3R5bGUgJiYgCiAgICAgICAgIGlzU3RhcnRPZlBhcmFncmFwaCh2aXNpYmxl
RW5kKSAmJgogICAgICAgICBpc0VuZE9mUGFyYWdyYXBoKHZpc2libGVFbmQpICYmCi0gICAgICAg
IGxpbmVCcmVha0V4aXN0c0F0UG9zaXRpb24odmlzaWJsZUVuZCkpIHsKKyAgICAgICAgbGluZUJy
ZWFrRXhpc3RzQXRWaXNpYmxlUG9zaXRpb24odmlzaWJsZUVuZCkpIHsKICAgICAgICAgLy8gQXBw
bHkgc3R5bGUgdG8gdGhlIHBsYWNlaG9sZGVyIHRoYXQgaXMgbm93IGhvbGRpbmcgb3BlbiB0aGUg
ZW1wdHkgcGFyYWdyYXBoLiAKICAgICAgICAgLy8gVGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhlIHBh
cmFncmFwaCBoYXMgdGhlIHJpZ2h0IGhlaWdodCwgYW5kIHRoYXQgdGhlIHBhcmFncmFwaCAKICAg
ICAgICAgLy8gdGFrZXMgb24gdGhlIHJpZ2h0IHN0eWxlIGFuZCByZXRhaW5zIGl0IGV2ZW4gaWYg
eW91IG1vdmUgdGhlIHNlbGVjdGlvbiBhd2F5IGFuZApAQCAtNzI5LDcgKzcyOSw3IEBACiAgICAg
UG9zaXRpb24gZG93bnN0cmVhbUVuZCA9IG1fc2VsZWN0aW9uVG9EZWxldGUuZW5kKCkuZG93bnN0
cmVhbSgpOwogICAgIG1fbmVlZFBsYWNlaG9sZGVyID0gaXNTdGFydE9mUGFyYWdyYXBoKG1fc2Vs
ZWN0aW9uVG9EZWxldGUudmlzaWJsZVN0YXJ0KCkpICYmCiAgICAgICAgICAgICAgICAgICAgICAg
ICBpc0VuZE9mUGFyYWdyYXBoKG1fc2VsZWN0aW9uVG9EZWxldGUudmlzaWJsZUVuZCgpKSAmJgot
ICAgICAgICAgICAgICAgICAgICAgICAgIWxpbmVCcmVha0V4aXN0c0F0UG9zaXRpb24obV9zZWxl
Y3Rpb25Ub0RlbGV0ZS52aXNpYmxlRW5kKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgIWxp
bmVCcmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uVG9EZWxldGUudmlzaWJs
ZUVuZCgpKTsKICAgICBpZiAobV9uZWVkUGxhY2Vob2xkZXIpIHsKICAgICAgICAgLy8gRG9uJ3Qg
bmVlZCBhIHBsYWNlaG9sZGVyIHdoZW4gZGVsZXRpbmcgYSBzZWxlY3Rpb24gdGhhdCBzdGFydHMg
anVzdCBiZWZvcmUgYSB0YWJsZQogICAgICAgICAvLyBhbmQgZW5kcyBpbnNpZGUgaXQgKHdlIGRv
IG5lZWQgcGxhY2Vob2xkZXJzIHRvIGhvbGQgb3BlbiBlbXB0eSBjZWxscywgYnV0IHRoYXQncwpJ
bmRleDogZWRpdGluZy9odG1sZWRpdGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9odG1s
ZWRpdGluZy5jcHAJKHJldmlzaW9uIDQyNDYzKQorKysgZWRpdGluZy9odG1sZWRpdGluZy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkwNiwxNCArOTA2LDI1IEBACiAgICAgcmV0dXJuIGxhc3RPZmZz
ZXRGb3JFZGl0aW5nKG4pOwogfQogCi1ib29sIGxpbmVCcmVha0V4aXN0c0F0UG9zaXRpb24oY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCitib29sIGxpbmVCcmVha0V4aXN0
c0F0VmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9u
KQogewotICAgIGlmICh2aXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCisgICAgcmV0dXJuIGxpbmVC
cmVha0V4aXN0c0F0UG9zaXRpb24odmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZG93
bnN0cmVhbSgpKTsKK30KKworYm9vbCBsaW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uKGNvbnN0IFBv
c2l0aW9uJiBwb3NpdGlvbikKK3sKKyAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgUG9zaXRpb24gZG93bnN0cmVhbSh2aXNpYmxl
UG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCkpOwotICAgIHJldHVybiBkb3du
c3RyZWFtLm5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykgfHwKLSAgICAgICAgICAgKGRvd25zdHJl
YW0ubm9kZSgpLT5pc1RleHROb2RlKCkgJiYgZG93bnN0cmVhbS5ub2RlKCktPnJlbmRlcmVyKCkt
PnN0eWxlKCktPnByZXNlcnZlTmV3bGluZSgpICYmIHZpc2libGVQb3NpdGlvbi5jaGFyYWN0ZXJB
ZnRlcigpID09ICdcbicpOworICAgIAorICAgIGlmIChwb3NpdGlvbi5hbmNob3JOb2RlKCktPmhh
c1RhZ05hbWUoYnJUYWcpICYmIHBvc2l0aW9uLmF0Rmlyc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2Rl
KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmICghcG9zaXRpb24uYW5jaG9y
Tm9kZSgpLT5pc1RleHROb2RlKCkgfHwgIXBvc2l0aW9uLmFuY2hvck5vZGUoKS0+cmVuZGVyZXIo
KS0+c3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihwb3NpdGlvbi5hbmNo
b3JOb2RlKCkpOworICAgIHVuc2lnbmVkIG9mZnNldCA9IHBvc2l0aW9uLm9mZnNldEluQ29udGFp
bmVyTm9kZSgpOworICAgIHJldHVybiBvZmZzZXQgPCB0ZXh0Tm9kZS0+bGVuZ3RoKCkgJiYgdGV4
dE5vZGUtPmRhdGEoKVtvZmZzZXRdID09ICdcbic7CiB9CiAKIC8vIE1vZGlmaWVzIHNlbGVjdGlv
bnMgdGhhdCBoYXZlIGFuIGVuZCBwb2ludCBhdCB0aGUgZWRnZSBvZiBhIHRhYmxlCkluZGV4OiBl
ZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcv
SW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAJKHJldmlzaW9uIDQyNDYzKQorKysgZWRpdGluZy9J
bnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3
IEBACiAgICAgCiAgICAgLy8gRklYTUU6IE5lZWQgdG8gbWVyZ2UgdGV4dCBub2RlcyB3aGVuIGlu
c2VydGluZyBqdXN0IGFmdGVyIG9yIGJlZm9yZSB0ZXh0LgogICAgIAotICAgIGlmIChpc0VuZE9m
UGFyYWdyYXBoKGNhcmV0KSAmJiAhbGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihjYXJldCkpIHsK
KyAgICBpZiAoaXNFbmRPZlBhcmFncmFwaChjYXJldCkgJiYgIWxpbmVCcmVha0V4aXN0c0F0Vmlz
aWJsZVBvc2l0aW9uKGNhcmV0KSkgewogICAgICAgICBib29sIG5lZWRFeHRyYUxpbmVCcmVhayA9
ICFwb3Mubm9kZSgpLT5oYXNUYWdOYW1lKGhyVGFnKSAmJiAhcG9zLm5vZGUoKS0+aGFzVGFnTmFt
ZSh0YWJsZVRhZyk7CiAgICAgICAgIAogICAgICAgICBpbnNlcnROb2RlQXQobm9kZVRvSW5zZXJ0
LmdldCgpLCBwb3MpOwpJbmRleDogZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNv
bW1hbmQuY3BwCShyZXZpc2lvbiA0MjQ2MykKKysrIGVkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9yQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw3ICsxNzAsNyBAQAogICAg
IC8vIGluY2x1ZGluZyB3aGVuIHRoZSBibG9jayBpcyBlbXB0eS4gCiAgICAgaWYgKGlzTGFzdElu
QmxvY2spIHsKICAgICAgICAgaWYgKG5lc3ROZXdCbG9jaykgewotICAgICAgICAgICAgaWYgKGlz
Rmlyc3RJbkJsb2NrICYmICFsaW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uKHZpc2libGVQb3MpKSB7
CisgICAgICAgICAgICBpZiAoaXNGaXJzdEluQmxvY2sgJiYgIWxpbmVCcmVha0V4aXN0c0F0Vmlz
aWJsZVBvc2l0aW9uKHZpc2libGVQb3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIGJsb2Nr
IGlzIGVtcHR5LiAgQ3JlYXRlIGFuIGVtcHR5IGJsb2NrIHRvCiAgICAgICAgICAgICAgICAgLy8g
cmVwcmVzZW50IHRoZSBwYXJhZ3JhcGggdGhhdCB3ZSdyZSBsZWF2aW5nLgogICAgICAgICAgICAg
ICAgIFJlZlB0cjxFbGVtZW50PiBleHRyYUJsb2NrID0gY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVs
ZW1lbnQoZG9jdW1lbnQoKSk7CkBAIC0yODIsNyArMjgyLDcgQEAKICAgICAvLyBJZiB0aGUgcGFy
YWdyYXBoIHNlcGFyYXRvciB3YXMgaW5zZXJ0ZWQgYXQgdGhlIGVuZCBvZiBhIHBhcmFncmFwaCwg
YW4gZW1wdHkgbGluZSBtdXN0IGJlCiAgICAgLy8gY3JlYXRlZC4gIEFsbCBvZiB0aGUgbm9kZXMs
IHN0YXJ0aW5nIGF0IHZpc2libGVQb3MsIGFyZSBhYm91dCB0byBiZSBhZGRlZCB0byB0aGUgbmV3
IHBhcmFncmFwaCAKICAgICAvLyBlbGVtZW50LiAgSWYgdGhlIGZpcnN0IG5vZGUgdG8gYmUgaW5z
ZXJ0ZWQgd29uJ3QgYmUgb25lIHRoYXQgd2lsbCBob2xkIGFuIGVtcHR5IGxpbmUgb3BlbiwgYWRk
IGEgYnIuCi0gICAgaWYgKGlzRW5kT2ZQYXJhZ3JhcGgodmlzaWJsZVBvcykgJiYgIWxpbmVCcmVh
a0V4aXN0c0F0UG9zaXRpb24odmlzaWJsZVBvcykpCisgICAgaWYgKGlzRW5kT2ZQYXJhZ3JhcGgo
dmlzaWJsZVBvcykgJiYgIWxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKHZpc2libGVQ
b3MpKQogICAgICAgICBhcHBlbmROb2RlKGNyZWF0ZUJyZWFrRWxlbWVudChkb2N1bWVudCgpKS5n
ZXQoKSwgYmxvY2tUb0luc2VydC5nZXQoKSk7CiAgICAgICAgIAogICAgIC8vIE1vdmUgdGhlIHN0
YXJ0IG5vZGUgYW5kIHRoZSBzaWJsaW5ncyBvZiB0aGUgc3RhcnQgbm9kZS4KSW5kZXg6IGVkaXRp
bmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL0NvbXBvc2l0
ZUVkaXRDb21tYW5kLmgJKHJldmlzaW9uIDQyNDYzKQorKysgZWRpdGluZy9Db21wb3NpdGVFZGl0
Q29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBACiAgICAgUGFzc1JlZlB0
cjxOb2RlPiBhcHBlbmRCbG9ja1BsYWNlaG9sZGVyKFBhc3NSZWZQdHI8RWxlbWVudD4pOwogICAg
IFBhc3NSZWZQdHI8Tm9kZT4gaW5zZXJ0QmxvY2tQbGFjZWhvbGRlcihjb25zdCBQb3NpdGlvbiYp
OwogICAgIFBhc3NSZWZQdHI8Tm9kZT4gYWRkQmxvY2tQbGFjZWhvbGRlcklmTmVlZGVkKEVsZW1l
bnQqKTsKLSAgICB2b2lkIHJlbW92ZVBsYWNlaG9sZGVyQXQoY29uc3QgVmlzaWJsZVBvc2l0aW9u
Jik7CisgICAgdm9pZCByZW1vdmVQbGFjZWhvbGRlckF0KGNvbnN0IFBvc2l0aW9uJik7CiAKICAg
ICBQYXNzUmVmUHRyPE5vZGU+IGluc2VydE5ld0RlZmF1bHRQYXJhZ3JhcGhFbGVtZW50QXQoY29u
c3QgUG9zaXRpb24mKTsKIApJbmRleDogZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwCShyZXZp
c2lvbiA0MjQ2MykKKysrIGVkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAKICAgICAKICAgICAvLyBEb24ndCBtb3ZlIGEgbGlu
ZSBicmVhayBqdXN0IGFmdGVyIHRoZSBjYXJldC4gIERvaW5nIHNvIHdvdWxkIGNyZWF0ZSBhbiBl
eHRyYSwgZW1wdHkgcGFyYWdyYXBoCiAgICAgLy8gaW4gdGhlIG5ldyBibG9ja3F1b3RlLgotICAg
IGlmIChsaW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uKHZpc2libGVQb3MpKQorICAgIGlmIChsaW5l
QnJlYWtFeGlzdHNBdFZpc2libGVQb3NpdGlvbih2aXNpYmxlUG9zKSkKICAgICAgICAgcG9zID0g
cG9zLm5leHQoKTsKICAgICAgICAgCiAgICAgLy8gQWRqdXN0IHRoZSBwb3NpdGlvbiBzbyB3ZSBk
b24ndCBzcGxpdCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgcXVvdGUuICAKSW5kZXg6IGVkaXRpbmcv
aHRtbGVkaXRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBlZGl0aW5nL2h0bWxlZGl0aW5nLmgJKHJldmlz
aW9uIDQyNDYzKQorKysgZWRpdGluZy9odG1sZWRpdGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjcsNyArMTI3LDggQEAKIGJvb2wgaXNUYWJsZUVsZW1lbnQoTm9kZSopOwogYm9vbCBpc1RhYmxl
Q2VsbChjb25zdCBOb2RlKik7CiAKLWJvb2wgbGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihjb25z
dCBWaXNpYmxlUG9zaXRpb24mKTsKK2Jvb2wgbGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihjb25z
dCBQb3NpdGlvbiYpOworYm9vbCBsaW5lQnJlYWtFeGlzdHNBdFZpc2libGVQb3NpdGlvbihjb25z
dCBWaXNpYmxlUG9zaXRpb24mKTsKIAogVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Gb3JQYXJh
Z3JhcGhJdGVyYXRpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogCg==
</data>
<flag name="review"
          id="14687"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>