<?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>61978</bug_id>
          
          <creation_ts>2011-06-02 16:25:54 -0700</creation_ts>
          <short_desc>--webkit-visual-word crash on mixed editability</short_desc>
          <delta_ts>2011-07-15 10:24:09 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>25298</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Xiaomei Ji">xji</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>414530</commentid>
    <comment_count>0</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-06-02 16:25:54 -0700</bug_when>
    <thetext>previousWordPosition/nextWordPosition could return a NULL position, 
For example:
&lt;div contenteditable &quot;&gt;abc hijopq&lt;/div&gt;
&lt;div dir=ltr class=&quot;test_move_by_word&quot;&gt;abc hijopq&lt;/div&gt;


Need to check against NULL before calling getInlineBoxAndOffset().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414553</commentid>
    <comment_count>1</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-06-02 17:04:28 -0700</bug_when>
    <thetext>also crash on:
&lt;div dir=ltr class=&quot;test_move_by_word&quot;&gt;abc hijopq&lt;/div&gt;
&lt;div contenteditable dir=ltr class=&quot;test_move_by_word&quot;&gt;abc hijopq&lt;/div&gt;


how should the following behave? 
&lt;div dir=ltr class=&quot;test_move_by_word&quot;&gt;abc hijopq&lt;/div&gt;
&lt;div dir=ltr class=&quot;test_move_by_word&quot;&gt;abc hijopq&lt;/div&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422136</commentid>
    <comment_count>2</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-06-16 12:31:32 -0700</bug_when>
    <thetext>one more case reported in crbug.com/86332.

&lt;script src=&quot;resources/move-by-word-visually.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;

onload = function() {
    try {
        runTest();
    } finally {
    }
};

&lt;/script&gt;
&lt;div contenteditable&gt;&lt;/div&gt;
00&lt;base class=&quot;test_move_by_word&quot; title=&quot;28 -4500000000 14 21 4|4 21 14 -4500000000&quot;&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426537</commentid>
    <comment_count>3</comment_count>
      <attachid>98417</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-06-23 15:15:24 -0700</bug_when>
    <thetext>Created attachment 98417
patch w/ layout test

Will add more test after issue 61344 (--webkit-word-visual across multi-line) is fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435313</commentid>
    <comment_count>4</comment_count>
      <attachid>98417</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-07-11 16:59:49 -0700</bug_when>
    <thetext>Comment on attachment 98417
patch w/ layout test

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

r- due to various nits.

&gt; Source/WebCore/ChangeLog:9
&gt; +        Fix 2 --webkit-visual-word crashes:
&gt; +        --webkit-visual-word crash on mixed editability and
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=61978
&gt; +        --webkit-visual-word crashes (VisiblePosition.getInlineBoxAndOffset could return null box)
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=62814

Nit: We normally just list two bug title + bug url separated by a blank line.

&gt; Source/WebCore/editing/visible_units.cpp:1305
&gt; +    bool positionInBox = positionIsInBox(wordBreak, box, offsetOfWordBreak);
&gt; +    if (positionInBox &amp;&amp; (previousOffset == invalidOffset || previousOffset &lt; offsetOfWordBreak))

There&apos;s no need to declare a boolean here you can call positionIsInBox inside the if statement.  For that matter, this entire if statement is unnecessary.  You should just do:
return positionIsInBox(wordBreak, box, offsetOfWordBreak) &amp;&amp; (previousOffset == invalidOffset || previousOffset &lt; offsetOfWordBreak).

&gt; Source/WebCore/editing/visible_units.cpp:1516
&gt; +    bool positionInBox = positionIsInBox(wordBreak, box, offsetOfWordBreak);
&gt; +    return positionInBox &amp;&amp; offsetOfWordBreak != box-&gt;caretMaxOffset() &amp;&amp; offsetOfWordBreak != box-&gt;caretMinOffset();

Ditto about the boolean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435366</commentid>
    <comment_count>5</comment_count>
      <attachid>100400</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-07-11 18:10:58 -0700</bug_when>
    <thetext>Created attachment 100400
patch w/ layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437335</commentid>
    <comment_count>6</comment_count>
      <attachid>100400</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-07-14 14:31:27 -0700</bug_when>
    <thetext>Comment on attachment 100400
patch w/ layout test

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

Due to various nits and missing null check.

&gt; Source/WebCore/ChangeLog:10
&gt; +        Fix 2 --webkit-visual-word crashes:
&gt; +        --webkit-visual-word crash on mixed editability and
&gt; +        --webkit-visual-word crashes (VisiblePosition.getInlineBoxAndOffset could return null box)
&gt; +
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=61978
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=62814

Nit: should be:
--webkit-visual-word crash on mixed editability
https://bugs.webkit.org/show_bug.cgi?id=61978

--webkit-visual-word crashes (VisiblePosition.getInlineBoxAndOffset could return null box)
https://bugs.webkit.org/show_bug.cgi?id=62814

&gt; Source/WebCore/editing/visible_units.cpp:1230
&gt; +    if (positionIsInBox(wordBreak, box, offsetOfWordBreak))
&gt; +        return wordBreak;
&gt; +    return VisiblePosition();

Seems like we should have a version of positionIsInBox that doesn&apos;t take offsetOfWordBreak.  Also I&apos;d use tertiary here.

&gt; Source/WebCore/editing/visible_units.cpp:1305
&gt; +    if (positionIsInBox(wordBreak, box, offsetOfWordBreak))
&gt;          return wordBreak;
&gt;      return VisiblePosition();    

Ditto about using tertiary.

&gt; Source/WebCore/editing/visible_units.cpp:1312
&gt; +           &amp;&amp; (previousOffset == invalidOffset || previousOffset &lt; offsetOfWordBreak);

Nit: &amp;&amp; should be intended by 4 spaces, and should NOT be aligned with positionIsInBox.

&gt; Source/WebCore/editing/visible_units.cpp:1521
&gt; +           &amp;&amp; offsetOfWordBreak != box-&gt;caretMaxOffset() &amp;&amp; offsetOfWordBreak != box-&gt;caretMinOffset();

Ditto about indentation.

&gt; Source/WebCore/editing/visible_units.cpp:1604
&gt; +    // FIXME: do I need to check visiblePosition.isNotNull() ?

Yes, you should.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437365</commentid>
    <comment_count>7</comment_count>
      <attachid>100873</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-07-14 15:25:41 -0700</bug_when>
    <thetext>Created attachment 100873
patch w/ layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437405</commentid>
    <comment_count>8</comment_count>
      <attachid>100892</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-07-14 16:27:47 -0700</bug_when>
    <thetext>Created attachment 100892
patch w/ layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437415</commentid>
    <comment_count>9</comment_count>
      <attachid>100892</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-07-14 16:43:43 -0700</bug_when>
    <thetext>Comment on attachment 100892
patch w/ layout test

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

&gt; Source/WebCore/ChangeLog:3
&gt; +        Fix 2 --webkit-visual-word crashes:

Nit: we don&apos;t usually have this.

&gt; Source/WebCore/ChangeLog:19
&gt; +        Check previousBoundary/nextBoundary against NULL.
&gt; +
&gt; +        Have a static function to encapsulate the usage of getInlineBoxAndOffset and check the 
&gt; +        visible position is not NULL before passing to getInlineBoxAndOffset.
&gt; +
&gt; +        Check the box returned from getInlineBoxAndOffset is not NULL before accessing.

Can we combine these into one paragraph?  I feel like it&apos;s scattered.

&gt; LayoutTests/editing/selection/move-by-word-visually-null-box.html:13
&gt; +        document.body.innerHTML = &quot;Test Passed&quot;;

Maybe you should say &quot;Crash test passed&quot; instead to make it clear that this is a crash test?

&gt; LayoutTests/platform/qt/Skipped:2486
&gt; +editing/selection/move-by-word-visually-null-box.html

Why this is test skilled in Qt?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437452</commentid>
    <comment_count>10</comment_count>
      <attachid>100892</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-07-14 18:25:13 -0700</bug_when>
    <thetext>Comment on attachment 100892
patch w/ layout test

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

&gt;&gt; LayoutTests/platform/qt/Skipped:2486
&gt;&gt; +editing/selection/move-by-word-visually-null-box.html
&gt; 
&gt; Why this is test skilled in Qt?

QT has different word break behavior need investigate. This specific test might be ok to not skipped since it is just NULL tests against passing in NULL visiblePosition and against NULL box returned from VisiblePosition::getInlineBoxAndOffset().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437821</commentid>
    <comment_count>11</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-07-15 10:24:09 -0700</bug_when>
    <thetext>Committed r91077: &lt;http://trac.webkit.org/changeset/91077&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98417</attachid>
            <date>2011-06-23 15:15:24 -0700</date>
            <delta_ts>2011-07-11 18:10:58 -0700</delta_ts>
            <desc>patch w/ layout test</desc>
            <filename>61978.v1</filename>
            <type>text/plain</type>
            <size>14374</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg5NjIwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMDYtMjMgIFhpYW9tZWkg
SmkgIDx4amlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEZpeCAyIC0td2Via2l0LXZpc3VhbC13b3JkIGNyYXNoZXM6CisgICAg
ICAgIC0td2Via2l0LXZpc3VhbC13b3JkIGNyYXNoIG9uIG1peGVkIGVkaXRhYmlsaXR5IGFuZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE5NzgKKyAg
ICAgICAgLS13ZWJraXQtdmlzdWFsLXdvcmQgY3Jhc2hlcyAoVmlzaWJsZVBvc2l0aW9uLmdldElu
bGluZUJveEFuZE9mZnNldCBjb3VsZCByZXR1cm4gbnVsbCBib3gpCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjgxNAorCisgICAgICAgIFJlcGxhY2Ug
cHJldmlvdXNXb3JkUG9zaXRpb24vbmV4dFdvcmRQb3NpdGlvbiB3aXRoIHByZXZpb3VzQm91bmRh
cnkvbmV4dEJvdW5kYXJ5IHdoaWNoIGRvCisgICAgICAgIG5vdCBob25vciBlZGl0YWJsZSBib3Vu
YXJ5LiBIb25vciBlZGl0YWJsZSBib3VuZGFyeSBhcyB0aGUgbGFzdCBzdGFnZSBvZiBsZWZ0V29y
ZFBvc2l0aW9uCisgICAgICAgIGFuZCByaWdodFdvcmRQb3NpdGlvbi4KKworICAgICAgICBDaGVj
ayBwcmV2aW91c0JvdW5kYXJ5L25leHRCb3VuZGFyeSBhZ2FpbnN0IE5VTEwuCisKKyAgICAgICAg
SGF2ZSBhIHN0YXRpYyBmdW5jdGlvbiB0byBlbmNhcHN1bGF0ZSB0aGUgdXNhZ2Ugb2YgZ2V0SW5s
aW5lQm94QW5kT2Zmc2V0IGFuZCBjaGVjayB0aGUgCisgICAgICAgIHZpc2libGUgcG9zaXRpb24g
aXMgbm90IE5VTEwgYmVmb3JlIHBhc3NpbmcgdG8gZ2V0SW5saW5lQm94QW5kT2Zmc2V0LgorCisg
ICAgICAgIENoZWNrIHRoZSBib3ggcmV0dXJuZWQgZnJvbSBnZXRJbmxpbmVCb3hBbmRPZmZzZXQg
aXMgbm90IE5VTEwgYmVmb3JlIGFjY2Vzc2luZy4KKworICAgICAgICBUZXN0OiBlZGl0aW5nL3Nl
bGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktbnVsbC1ib3guaHRtbAorCisgICAgICAgICog
ZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBvc2l0aW9uSXNJ
bkJveCk6CisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91c1dvcmRCcmVha0luQm94SW5zaWRlQmxv
Y2tXaXRoU2FtZURpcmVjdGlvbmFsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6Omxhc3RXb3JkQnJl
YWtJbkJveCk6CisgICAgICAgIChXZWJDb3JlOjpwb3NpdGlvbklzVmlzdWFsbHlPcmRlcmVkSW5C
b3hJbkJsb2NrV2l0aERpZmZlcmVudERpcmVjdGlvbmFsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
Om5leHRXb3JkQnJlYWtJbkJveEluc2lkZUJsb2NrV2l0aERpZmZlcmVudERpcmVjdGlvbmFsaXR5
KToKKyAgICAgICAgKFdlYkNvcmU6OnBvc2l0aW9uSXNJbnNpZGVCb3gpOgorICAgICAgICAoV2Vi
Q29yZTo6bGVmdFdvcmRQb3NpdGlvbkFjcm9zc0JvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6
OnJpZ2h0V29yZFBvc2l0aW9uQWNyb3NzQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6bGVm
dFdvcmRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpyaWdodFdvcmRQb3NpdGlvbik6CisK
IDIwMTEtMDYtMjMgIEFsZXhpcyBNZW5hcmQgIDxhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBDYXJsc29uLgpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCShyZXZpc2lvbiA4OTQ4NikKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNjYs
NiArMTE2NiwxNiBAQCBWaXNpYmxlUG9zaXRpb24gcmlnaHRCb3VuZGFyeU9mTGluZShjb25zCiAK
IHN0YXRpYyBjb25zdCBpbnQgaW52YWxpZE9mZnNldCA9IC0xOwogCitzdGF0aWMgYm9vbCBwb3Np
dGlvbklzSW5Cb3goY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB3b3JkQnJlYWssIGNvbnN0IElubGlu
ZUJveCogYm94LCBpbnQmIG9mZnNldE9mV29yZEJyZWFrKQoreworICAgIGlmICh3b3JkQnJlYWsu
aXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIElubGluZUJveCogYm94T2ZX
b3JkQnJlYWs7CisgICAgd29yZEJyZWFrLmdldElubGluZUJveEFuZE9mZnNldChib3hPZldvcmRC
cmVhaywgb2Zmc2V0T2ZXb3JkQnJlYWspOworICAgIHJldHVybiBib3ggPT0gYm94T2ZXb3JkQnJl
YWs7Cit9CisKIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNXb3JkQnJlYWtJbkJveElu
c2lkZUJsb2NrV2l0aFNhbWVEaXJlY3Rpb25hbGl0eShjb25zdCBJbmxpbmVCb3gqIGJveCwgY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBwcmV2aW91c1dvcmRCcmVhaywgaW50JiBvZmZzZXRPZldvcmRC
cmVhaykKIHsKICAgICAvLyBJbiBhIExUUiBibG9jaywgdGhlIHdvcmQgYnJlYWsgc2hvdWxkIGJl
IG9uIHRoZSBsZWZ0IGJvdW5kYXJ5IG9mIGEgd29yZC4KQEAgLTExOTQsMjYgKzEyMDQsMjMgQEAg
c3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c1dvcmRCcmVhawogICAgICAgICBpZiAoKGJv
eC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICYmIGJveC0+bmV4dExlYWZDaGlsZCgpKQogICAg
ICAgICAgICAgfHwgKCFib3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSAmJiBib3gtPnByZXZM
ZWFmQ2hpbGQoKSkpIHsKICAgICAKLSAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlv
bkFmdGVyV29yZCA9IG5leHRXb3JkUG9zaXRpb24od29yZEJyZWFrKTsKLSAgICAgICAgICAgIFZp
c2libGVQb3NpdGlvbiBwb3NpdGlvbkJlZm9yZVdvcmQgPSBwcmV2aW91c1dvcmRQb3NpdGlvbihw
b3NpdGlvbkFmdGVyV29yZCk7Ci0gICAgICAgIAotICAgICAgICAgICAgSW5saW5lQm94KiBib3hD
b250YWluaW5nUHJldmlvdXNXb3JkQnJlYWs7Ci0gICAgICAgICAgICBwb3NpdGlvbkJlZm9yZVdv
cmQuZ2V0SW5saW5lQm94QW5kT2Zmc2V0KGJveENvbnRhaW5pbmdQcmV2aW91c1dvcmRCcmVhaywg
b2Zmc2V0T2ZXb3JkQnJlYWspOwotICAgICAgICAKLSAgICAgICAgICAgIGlmIChib3hDb250YWlu
aW5nUHJldmlvdXNXb3JkQnJlYWsgPT0gYm94KQotICAgICAgICAgICAgICAgIHJldHVybiBwb3Np
dGlvbkJlZm9yZVdvcmQ7CisgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25BZnRl
cldvcmQgPSBuZXh0Qm91bmRhcnkod29yZEJyZWFrLCBuZXh0V29yZFBvc2l0aW9uQm91bmRhcnkp
OworICAgICAgICAgICAgaWYgKHBvc2l0aW9uQWZ0ZXJXb3JkLmlzTm90TnVsbCgpKSB7CisgICAg
ICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uQmVmb3JlV29yZCA9IHByZXZpb3Vz
Qm91bmRhcnkocG9zaXRpb25BZnRlcldvcmQsIHByZXZpb3VzV29yZFBvc2l0aW9uQm91bmRhcnkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uSXNJbkJveChwb3Np
dGlvbkJlZm9yZVdvcmQsIGJveCwgb2Zmc2V0T2ZXb3JkQnJlYWspKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcG9zaXRpb25CZWZvcmVXb3JkOworICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQogICAKLSAgICB3b3JkQnJlYWsgPSBwcmV2aW91c1dvcmRQb3NpdGlvbih3b3JkQnJl
YWspOworICAgIHdvcmRCcmVhayA9IHByZXZpb3VzQm91bmRhcnkod29yZEJyZWFrLCBwcmV2aW91
c1dvcmRQb3NpdGlvbkJvdW5kYXJ5KTsKICAgICBpZiAocHJldmlvdXNXb3JkQnJlYWsgPT0gd29y
ZEJyZWFrKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAKLSAgICBJbmxpbmVC
b3gqIGJveENvbnRhaW5pbmdQcmV2aW91c1dvcmRCcmVhazsKLSAgICB3b3JkQnJlYWsuZ2V0SW5s
aW5lQm94QW5kT2Zmc2V0KGJveENvbnRhaW5pbmdQcmV2aW91c1dvcmRCcmVhaywgb2Zmc2V0T2ZX
b3JkQnJlYWspOwotICAgIGlmIChib3hDb250YWluaW5nUHJldmlvdXNXb3JkQnJlYWsgIT0gYm94
KQotICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7Ci0gICAgcmV0dXJuIHdvcmRCcmVh
azsKKyAgICBpZiAocG9zaXRpb25Jc0luQm94KHdvcmRCcmVhaywgYm94LCBvZmZzZXRPZldvcmRC
cmVhaykpCisgICAgICAgIHJldHVybiB3b3JkQnJlYWs7CisgICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbigpOwogfQogCiBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGxlZnRtb3N0UG9zaXRpb25JblJU
TEJveEluTFRSQmxvY2soY29uc3QgSW5saW5lQm94KiBib3gpCkBAIC0xMjgwLDEzICsxMjg3LDEz
IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gbGFzdFdvcmRCcmVha0luQm8KICAgICBpZiAoYm91
bmRhcnlQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigp
OyAgICAgICAgICAgIAogCi0gICAgVmlzaWJsZVBvc2l0aW9uIHdvcmRCcmVhayA9IG5leHRXb3Jk
UG9zaXRpb24oYm91bmRhcnlQb3NpdGlvbik7Ci0gICAgaWYgKHdvcmRCcmVhayAhPSBib3VuZGFy
eVBvc2l0aW9uKQotICAgICAgICB3b3JkQnJlYWsgPSBwcmV2aW91c1dvcmRQb3NpdGlvbih3b3Jk
QnJlYWspOworICAgIFZpc2libGVQb3NpdGlvbiB3b3JkQnJlYWsgPSBuZXh0Qm91bmRhcnkoYm91
bmRhcnlQb3NpdGlvbiwgbmV4dFdvcmRQb3NpdGlvbkJvdW5kYXJ5KTsKKyAgICBpZiAod29yZEJy
ZWFrLmlzTnVsbCgpKQorICAgICAgICB3b3JkQnJlYWsgPSBib3VuZGFyeVBvc2l0aW9uOworICAg
IGVsc2UgaWYgKHdvcmRCcmVhayAhPSBib3VuZGFyeVBvc2l0aW9uKQorICAgICAgICB3b3JkQnJl
YWsgPSBwcmV2aW91c0JvdW5kYXJ5KHdvcmRCcmVhaywgcHJldmlvdXNXb3JkUG9zaXRpb25Cb3Vu
ZGFyeSk7CiAKLSAgICBJbmxpbmVCb3gqIGJveE9mV29yZEJyZWFrOwotICAgIHdvcmRCcmVhay5n
ZXRJbmxpbmVCb3hBbmRPZmZzZXQoYm94T2ZXb3JkQnJlYWssIG9mZnNldE9mV29yZEJyZWFrKTsK
LSAgICBpZiAoYm94T2ZXb3JkQnJlYWsgPT0gYm94KQorICAgIGlmIChwb3NpdGlvbklzSW5Cb3go
d29yZEJyZWFrLCBib3gsIG9mZnNldE9mV29yZEJyZWFrKSkKICAgICAgICAgcmV0dXJuIHdvcmRC
cmVhazsKICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7ICAgIAogfQpAQCAtMTI5NCw5ICsx
MzAxLDggQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBsYXN0V29yZEJyZWFrSW5Cbwogc3RhdGlj
IGJvb2wgcG9zaXRpb25Jc1Zpc3VhbGx5T3JkZXJlZEluQm94SW5CbG9ja1dpdGhEaWZmZXJlbnRE
aXJlY3Rpb25hbGl0eShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHdvcmRCcmVhaywgY29uc3QgSW5s
aW5lQm94KiBib3gsIGludCYgb2Zmc2V0T2ZXb3JkQnJlYWspCiB7CiAgICAgaW50IHByZXZpb3Vz
T2Zmc2V0ID0gb2Zmc2V0T2ZXb3JkQnJlYWs7Ci0gICAgSW5saW5lQm94KiBib3hPZldvcmRCcmVh
azsKLSAgICB3b3JkQnJlYWsuZ2V0SW5saW5lQm94QW5kT2Zmc2V0KGJveE9mV29yZEJyZWFrLCBv
ZmZzZXRPZldvcmRCcmVhayk7Ci0gICAgaWYgKGJveE9mV29yZEJyZWFrID09IGJveCAmJiAocHJl
dmlvdXNPZmZzZXQgPT0gaW52YWxpZE9mZnNldCB8fCBwcmV2aW91c09mZnNldCA8IG9mZnNldE9m
V29yZEJyZWFrKSkKKyAgICBib29sIHBvc2l0aW9uSW5Cb3ggPSBwb3NpdGlvbklzSW5Cb3god29y
ZEJyZWFrLCBib3gsIG9mZnNldE9mV29yZEJyZWFrKTsKKyAgICBpZiAocG9zaXRpb25JbkJveCAm
JiAocHJldmlvdXNPZmZzZXQgPT0gaW52YWxpZE9mZnNldCB8fCBwcmV2aW91c09mZnNldCA8IG9m
ZnNldE9mV29yZEJyZWFrKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNl
OwogfQpAQCAtMTMxNCw3ICsxMzIwLDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBuZXh0V29y
ZEJyZWFrSW5CbwogICAgIAogICAgIGJvb2wgaGFzU2VlbldvcmRCcmVha0luVGhpc0JveCA9IHBy
ZXZpb3VzV29yZEJyZWFrLmlzTm90TnVsbCgpOwogICAgIFZpc2libGVQb3NpdGlvbiB3b3JkQnJl
YWsgPSBoYXNTZWVuV29yZEJyZWFrSW5UaGlzQm94ID8gcHJldmlvdXNXb3JkQnJlYWsgOiBQb3Np
dGlvbihib3gtPnJlbmRlcmVyKCktPm5vZGUoKSwgYm94LT5jYXJldE1pbk9mZnNldCgpLCBQb3Np
dGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKLSAgICB3b3JkQnJlYWsgPSBuZXh0V29y
ZFBvc2l0aW9uKHdvcmRCcmVhayk7CisgICAgd29yZEJyZWFrID0gbmV4dEJvdW5kYXJ5KHdvcmRC
cmVhaywgbmV4dFdvcmRQb3NpdGlvbkJvdW5kYXJ5KTsKICAgCiAgICAgLy8gR2l2ZW4gUlRMIGJv
eCAiQUJDIERFRiIgZWl0aGVyIGZvbGxvd3MgYSBMVFIgYm94IG9yIGlzIHRoZSBmaXJzdCB2aXN1
YWwgYm94IGluIGFuIExUUiBibG9jayBhcyBhbiBleGFtcGxlLAogICAgIC8vIHRoZSB2aXN1YWwg
ZGlzcGxheSBvZiB0aGUgUlRMIGJveCBpczogIigwKUooMTApSSg5KUgoOCkgKDcpRig2KUUoNSlE
KDQpICgzKUMoMilCKDEpQSgxMSkiLApAQCAtMTUwNSwxNyArMTUxMSwyMCBAQCBzdGF0aWMgVmlz
aWJsZVBvc2l0aW9uIHJpZ2h0V29yZEJvdW5kYXJ5CiAgICAgCiBzdGF0aWMgYm9vbCBwb3NpdGlv
bklzSW5zaWRlQm94KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgd29yZEJyZWFrLCBjb25zdCBJbmxp
bmVCb3gqIGJveCkKIHsKLSAgICBJbmxpbmVCb3gqIGJveE9mV29yZEJyZWFrOwogICAgIGludCBv
ZmZzZXRPZldvcmRCcmVhazsKLSAgICB3b3JkQnJlYWsuZ2V0SW5saW5lQm94QW5kT2Zmc2V0KGJv
eE9mV29yZEJyZWFrLCBvZmZzZXRPZldvcmRCcmVhayk7Ci0gICAgcmV0dXJuIGJveCA9PSBib3hP
ZldvcmRCcmVhayAmJiBvZmZzZXRPZldvcmRCcmVhayAhPSBib3gtPmNhcmV0TWF4T2Zmc2V0KCkg
JiYgb2Zmc2V0T2ZXb3JkQnJlYWsgIT0gYm94LT5jYXJldE1pbk9mZnNldCgpOworICAgIGJvb2wg
cG9zaXRpb25JbkJveCA9IHBvc2l0aW9uSXNJbkJveCh3b3JkQnJlYWssIGJveCwgb2Zmc2V0T2ZX
b3JkQnJlYWspOworICAgIHJldHVybiBwb3NpdGlvbkluQm94ICYmIG9mZnNldE9mV29yZEJyZWFr
ICE9IGJveC0+Y2FyZXRNYXhPZmZzZXQoKSAmJiBvZmZzZXRPZldvcmRCcmVhayAhPSBib3gtPmNh
cmV0TWluT2Zmc2V0KCk7CiB9CiAKLVZpc2libGVQb3NpdGlvbiBsZWZ0V29yZFBvc2l0aW9uKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQorc3RhdGljIFZpc2libGVQb3Np
dGlvbiBsZWZ0V29yZFBvc2l0aW9uQWNyb3NzQm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiB2aXNpYmxlUG9zaXRpb24pCiB7CiAgICAgSW5saW5lQm94KiBib3g7CiAgICAgaW50IG9mZnNl
dDsKICAgICB2aXNpYmxlUG9zaXRpb24uZ2V0SW5saW5lQm94QW5kT2Zmc2V0KGJveCwgb2Zmc2V0
KTsKKworICAgIGlmICghYm94KQorICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CisK
ICAgICBUZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdC
bG9jayh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7CiAgICAgCiAgICAgLy8gRklY
TUU6IElmIHRoZSBib3gncyBkaXJlY3Rpb25hbGl0eSBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRo
ZSBlbmNsb3NpbmcgYmxvY2ssIHdoZW4gdGhlIG9mZnNldCBpcyBhdCB0aGUgYm94IGJvdW5kYXJ5
CkBAIC0xNTMwLDkgKzE1MzksOSBAQCBWaXNpYmxlUG9zaXRpb24gbGVmdFdvcmRQb3NpdGlvbihj
b25zdCBWCiAgICAgVmlzaWJsZVBvc2l0aW9uIHdvcmRCcmVhazsKICAgICBpZiAoYmxvY2tEaXJl
Y3Rpb24gPT0gTFRSKSB7CiAgICAgICAgIGlmIChib3gtPmRpcmVjdGlvbigpID09IGJsb2NrRGly
ZWN0aW9uKQotICAgICAgICAgICAgd29yZEJyZWFrID0gcHJldmlvdXNXb3JkUG9zaXRpb24odmlz
aWJsZVBvc2l0aW9uKTsKKyAgICAgICAgICAgIHdvcmRCcmVhayA9IHByZXZpb3VzQm91bmRhcnko
dmlzaWJsZVBvc2l0aW9uLCBwcmV2aW91c1dvcmRQb3NpdGlvbkJvdW5kYXJ5KTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgd29yZEJyZWFrID0gbmV4dFdvcmRQb3NpdGlvbih2aXNpYmxlUG9z
aXRpb24pOworICAgICAgICAgICAgd29yZEJyZWFrID0gbmV4dEJvdW5kYXJ5KHZpc2libGVQb3Np
dGlvbiwgbmV4dFdvcmRQb3NpdGlvbkJvdW5kYXJ5KTsKICAgICB9CiAgICAgaWYgKHdvcmRCcmVh
ay5pc05vdE51bGwoKSAmJiBwb3NpdGlvbklzSW5zaWRlQm94KHdvcmRCcmVhaywgYm94KSkKICAg
ICAgICAgcmV0dXJuIHdvcmRCcmVhazsKQEAgLTE1NDgsMTEgKzE1NTcsMTUgQEAgVmlzaWJsZVBv
c2l0aW9uIGxlZnRXb3JkUG9zaXRpb24oY29uc3QgVgogICAgIHJldHVybiBsZWZ0V29yZEJvdW5k
YXJ5KGJveC0+cHJldkxlYWZDaGlsZCgpLCBpbnZhbGlkT2Zmc2V0LCBibG9ja0RpcmVjdGlvbik7
CiB9CiAKLVZpc2libGVQb3NpdGlvbiByaWdodFdvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9z
aXRpb24mIHZpc2libGVQb3NpdGlvbikKK3N0YXRpYyBWaXNpYmxlUG9zaXRpb24gcmlnaHRXb3Jk
UG9zaXRpb25BY3Jvc3NCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3Np
dGlvbikKIHsKICAgICBJbmxpbmVCb3gqIGJveDsKICAgICBpbnQgb2Zmc2V0OwogICAgIHZpc2li
bGVQb3NpdGlvbi5nZXRJbmxpbmVCb3hBbmRPZmZzZXQoYm94LCBvZmZzZXQpOworCisgICAgaWYg
KCFib3gpCisgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKKwogICAgIFRleHREaXJl
Y3Rpb24gYmxvY2tEaXJlY3Rpb24gPSBkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKHZpc2libGVQ
b3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpKTsKICAgICAKICAgICBpZiAob2Zmc2V0ID09IGJveC0+
Y2FyZXRMZWZ0bW9zdE9mZnNldCgpKQpAQCAtMTU2Myw5ICsxNTc2LDkgQEAgVmlzaWJsZVBvc2l0
aW9uIHJpZ2h0V29yZFBvc2l0aW9uKGNvbnN0IAogICAgIFZpc2libGVQb3NpdGlvbiB3b3JkQnJl
YWs7CiAgICAgaWYgKGJsb2NrRGlyZWN0aW9uID09IFJUTCkgewogICAgICAgICBpZiAoYm94LT5k
aXJlY3Rpb24oKSA9PSBibG9ja0RpcmVjdGlvbikKLSAgICAgICAgICAgIHdvcmRCcmVhayA9IHBy
ZXZpb3VzV29yZFBvc2l0aW9uKHZpc2libGVQb3NpdGlvbik7CisgICAgICAgICAgICB3b3JkQnJl
YWsgPSBwcmV2aW91c0JvdW5kYXJ5KHZpc2libGVQb3NpdGlvbiwgcHJldmlvdXNXb3JkUG9zaXRp
b25Cb3VuZGFyeSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHdvcmRCcmVhayA9IG5leHRX
b3JkUG9zaXRpb24odmlzaWJsZVBvc2l0aW9uKTsKKyAgICAgICAgICAgIHdvcmRCcmVhayA9IG5l
eHRCb3VuZGFyeSh2aXNpYmxlUG9zaXRpb24sIG5leHRXb3JkUG9zaXRpb25Cb3VuZGFyeSk7CiAg
ICAgfQogICAgIGlmICh3b3JkQnJlYWsuaXNOb3ROdWxsKCkgJiYgcG9zaXRpb25Jc0luc2lkZUJv
eCh3b3JkQnJlYWssIGJveCkpCiAgICAgICAgIHJldHVybiB3b3JkQnJlYWs7CkBAIC0xNTgxLDQg
KzE1OTQsMTcgQEAgVmlzaWJsZVBvc2l0aW9uIHJpZ2h0V29yZFBvc2l0aW9uKGNvbnN0IAogICAg
IHJldHVybiByaWdodFdvcmRCb3VuZGFyeShib3gtPm5leHRMZWFmQ2hpbGQoKSwgaW52YWxpZE9m
ZnNldCwgYmxvY2tEaXJlY3Rpb24pOwogfQogCitWaXNpYmxlUG9zaXRpb24gbGVmdFdvcmRQb3Np
dGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKK3sKKyAgICAvLyBG
SVhNRTogZG8gSSBuZWVkIHRvIGNoZWNrIHZpc2libGVQb3NpdGlvbi5pc05vdE51bGwoKSA/Cisg
ICAgVmlzaWJsZVBvc2l0aW9uIGxlZnRXb3JkQnJlYWsgPSBsZWZ0V29yZFBvc2l0aW9uQWNyb3Nz
Qm91bmRhcnkodmlzaWJsZVBvc2l0aW9uKTsKKyAgICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uLmhv
bm9yRWRpdGFibGVCb3VuZGFyeUF0T3JCZWZvcmUobGVmdFdvcmRCcmVhayk7Cit9CisKK1Zpc2li
bGVQb3NpdGlvbiByaWdodFdvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2li
bGVQb3NpdGlvbikKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24gcmlnaHRXb3JkQnJlYWsgPSByaWdo
dFdvcmRQb3NpdGlvbkFjcm9zc0JvdW5kYXJ5KHZpc2libGVQb3NpdGlvbik7CisgICAgcmV0dXJu
IHZpc2libGVQb3NpdGlvbi5ob25vckVkaXRhYmxlQm91bmRhcnlBdE9yQmVmb3JlKHJpZ2h0V29y
ZEJyZWFrKTsKK30KKwogfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gODk2MjApCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxMS0wNi0yMyAg
WGlhb21laSBKaSAgPHhqaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IDIgLS13ZWJraXQtdmlzdWFsLXdvcmQgY3Jhc2hl
czoKKyAgICAgICAgLS13ZWJraXQtdmlzdWFsLXdvcmQgY3Jhc2ggb24gbWl4ZWQgZWRpdGFiaWxp
dHkgYW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
MTk3OAorICAgICAgICAtLXdlYmtpdC12aXN1YWwtd29yZCBjcmFzaGVzIChWaXNpYmxlUG9zaXRp
b24uZ2V0SW5saW5lQm94QW5kT2Zmc2V0IGNvdWxkIHJldHVybiBudWxsIGJveCkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyODE0CisKKyAgICAgICAg
QWRkIGEgc3RhbmRhbG9uZSB0ZXN0IGZvciB0ZXN0aW5nIGdldElubGluZUJveEFuZE9mZnNldCBy
ZXR1cm5pbmcgbnVsbCBib3guCisKKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5
LXdvcmQtdmlzdWFsbHktbnVsbC1ib3gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBl
ZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktbnVsbC1ib3guaHRtbDogQWRk
ZWQuCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LW90
aGVycy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13
b3JkLXZpc3VhbGx5LW90aGVycy5odG1sOgorCiAyMDExLTA2LTIzICBFcmljIENhcmxzb24gIDxl
cmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNl
ci4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1
YWxseS1udWxsLWJveC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRp
dGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LW51bGwtYm94LWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnkt
d29yZC12aXN1YWxseS1udWxsLWJveC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEgQEAKK1Rlc3QgUGFzc2VkCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9t
b3ZlLWJ5LXdvcmQtdmlzdWFsbHktbnVsbC1ib3guaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktbnVsbC1ib3guaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnkt
d29yZC12aXN1YWxseS1udWxsLWJveC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5IEBA
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL21vdmUtYnktd29yZC12aXN1YWxseS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdD4KKworb25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgdHJ5IHsK
KyAgICAgICAgcnVuVGVzdCgpOworICAgICAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCA9ICJU
ZXN0IFBhc3NlZCI7CisgICAgfSBmaW5hbGx5IHsKKyAgICB9Cit9OworCitpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKzwvc2NyaXB0PgorPGRpdiBpZD0idGVzdE1vdmVCeVdvcmQiPgorPG91dHB1dD48ZGl2IGRp
cj1sdHIgdGl0bGU9IjB8MCIgY2xhc3M9InRlc3RfbW92ZV9ieV93b3JkIj4KKzwvZGl2PgorPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlv
bi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktb3RoZXJzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktb3Ro
ZXJzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gODk0ODYpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5n
L3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktb3RoZXJzLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMjIxLDQgKzIyMSwxNCBAQCBNb3ZlIHJpZ2h0IGJ5IG9uZSB3b3JkCiAi
5KSr5KGx5pqY5YCO5Y6YICAgIOeWguW0neeDtSAgICAgYWJjIGRlZiJbMCwgMSwgMiwgMywgNCwg
OSwgMTAsIDExLCAxNywgMjFdCiBNb3ZlIGxlZnQgYnkgb25lIHdvcmQKICLkpKvkobHmmpjlgI7l
jpggICAg55aC5bSd54O1ICAgICBhYmMgZGVmIlsyNCwgMjEsIDE3LCAxMSwgMTAsIDksIDQsIDMs
IDIsIDEsIDBdCitUZXN0IDQ0LCBMVFI6CitNb3ZlIHJpZ2h0IGJ5IG9uZSB3b3JkCisiYWJjIGRl
ZiAiWzAsIDRdCitNb3ZlIGxlZnQgYnkgb25lIHdvcmQKKyIgaGlqIG9wcSJbOCwgNSwgMV0KK1Rl
c3QgNDUsIExUUjoKK01vdmUgcmlnaHQgYnkgb25lIHdvcmQKKyJcbjAwIlszXQorTW92ZSBsZWZ0
IGJ5IG9uZSB3b3JkCisiXG4wMCJbMywgMV0KIApJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9z
ZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LW90aGVycy5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS1vdGhl
cnMuaHRtbAkocmV2aXNpb24gODk0ODYpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlv
bi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktb3RoZXJzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTg4
LDYgKzg4LDEyIEBAIHdoZXJlIGNoaWxkX25vZGVfaW5kZXggaXMgb3B0aW9uYWwsIGRlZmEKIDwh
LS0gdGVzdCB3b3JkcyBub3Qgc2VwYXJhdGVkIGJ5IHNwYWNlcyAtLT4KIDxkaXYgc3R5bGU9Indo
aXRlLXNwYWNlOnByZSIgY29udGVudGVkaXRhYmxlIGRpcj1sdHIgY2xhc3M9InRlc3RfbW92ZV9i
eV93b3JkIiB0aXRsZT0iMCAxIDIgMyA0IDkgMTAgMTEgMTcgMjF8MjQgMjEgMTcgMTEgMTAgOSA0
IDMgMiAxIDAiPuS6uuS4gOawp+WWneWkpyAgICDnrJHmiqznmoQgICAgIGFiYyBkZWY8L2Rpdj4K
IAorPCEtLSBtaXhlZCBlZGl0YWJpbGl0eSAtLT4KKzxkaXYgZGlyPWx0ciBjbGFzcz0idGVzdF9t
b3ZlX2J5X3dvcmQiIHRpdGxlPSIwIDR8OCA1IDEiPmFiYyBkZWYgPHNwYW4gY29udGVudGVkaXRh
YmxlPiBpbnNpZGUgc3BhbiA8L3NwYW4+IGhpaiBvcHE8L2Rpdj4KKworPGRpdiBkaXI9bHRyIGNv
bnRlbnRlZGl0YWJsZT48L2Rpdj4KKzAwPGJhc2UgZGlyPWx0ciBjbGFzcz0idGVzdF9tb3ZlX2J5
X3dvcmQiIHRpdGxlPSIzfDMgMSI+CisKIDwvZGl2PgogPHByZSBpZD0iY29uc29sZSI+PC9wcmU+
CiA8L2JvZHk+Cg==
</data>
<flag name="review"
          id="92637"
          type_id="1"
          status="-"
          setter="rniwa"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100400</attachid>
            <date>2011-07-11 18:10:58 -0700</date>
            <delta_ts>2011-07-14 15:25:41 -0700</delta_ts>
            <desc>patch w/ layout test</desc>
            <filename>61978.v2</filename>
            <type>text/plain</type>
            <size>14478</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkwNzk4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMDctMTEgIFhpYW9tZWkg
SmkgIDx4amlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEZpeCAyIC0td2Via2l0LXZpc3VhbC13b3JkIGNyYXNoZXM6CisgICAg
ICAgIC0td2Via2l0LXZpc3VhbC13b3JkIGNyYXNoIG9uIG1peGVkIGVkaXRhYmlsaXR5IGFuZAor
ICAgICAgICAtLXdlYmtpdC12aXN1YWwtd29yZCBjcmFzaGVzIChWaXNpYmxlUG9zaXRpb24uZ2V0
SW5saW5lQm94QW5kT2Zmc2V0IGNvdWxkIHJldHVybiBudWxsIGJveCkKKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE5NzgKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyODE0CisKKyAgICAgICAgUmVwbGFj
ZSBwcmV2aW91c1dvcmRQb3NpdGlvbi9uZXh0V29yZFBvc2l0aW9uIHdpdGggcHJldmlvdXNCb3Vu
ZGFyeS9uZXh0Qm91bmRhcnkgd2hpY2ggZG8KKyAgICAgICAgbm90IGhvbm9yIGVkaXRhYmxlIGJv
dW5hcnkuIEhvbm9yIGVkaXRhYmxlIGJvdW5kYXJ5IGFzIHRoZSBsYXN0IHN0YWdlIG9mIGxlZnRX
b3JkUG9zaXRpb24KKyAgICAgICAgYW5kIHJpZ2h0V29yZFBvc2l0aW9uLgorCisgICAgICAgIENo
ZWNrIHByZXZpb3VzQm91bmRhcnkvbmV4dEJvdW5kYXJ5IGFnYWluc3QgTlVMTC4KKworICAgICAg
ICBIYXZlIGEgc3RhdGljIGZ1bmN0aW9uIHRvIGVuY2Fwc3VsYXRlIHRoZSB1c2FnZSBvZiBnZXRJ
bmxpbmVCb3hBbmRPZmZzZXQgYW5kIGNoZWNrIHRoZSAKKyAgICAgICAgdmlzaWJsZSBwb3NpdGlv
biBpcyBub3QgTlVMTCBiZWZvcmUgcGFzc2luZyB0byBnZXRJbmxpbmVCb3hBbmRPZmZzZXQuCisK
KyAgICAgICAgQ2hlY2sgdGhlIGJveCByZXR1cm5lZCBmcm9tIGdldElubGluZUJveEFuZE9mZnNl
dCBpcyBub3QgTlVMTCBiZWZvcmUgYWNjZXNzaW5nLgorCisgICAgICAgIFRlc3Q6IGVkaXRpbmcv
c2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS1udWxsLWJveC5odG1sCisKKyAgICAgICAg
KiBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25J
c0luQm94KToKKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzV29yZEJyZWFrSW5Cb3hJbnNpZGVC
bG9ja1dpdGhTYW1lRGlyZWN0aW9uYWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6bGFzdFdvcmRC
cmVha0luQm94KToKKyAgICAgICAgKFdlYkNvcmU6OnBvc2l0aW9uSXNWaXN1YWxseU9yZGVyZWRJ
bkJveEluQmxvY2tXaXRoRGlmZmVyZW50RGlyZWN0aW9uYWxpdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6bmV4dFdvcmRCcmVha0luQm94SW5zaWRlQmxvY2tXaXRoRGlmZmVyZW50RGlyZWN0aW9uYWxp
dHkpOgorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25Jc0luc2lkZUJveCk6CisgICAgICAgIChX
ZWJDb3JlOjpsZWZ0V29yZFBvc2l0aW9uQWNyb3NzQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29y
ZTo6cmlnaHRXb3JkUG9zaXRpb25BY3Jvc3NCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjps
ZWZ0V29yZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnJpZ2h0V29yZFBvc2l0aW9uKToK
KwogMjAxMS0wNy0xMSAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAg
IEV4Y2Vzc2l2ZSBleHBhbnNpb24gb2YganVzdGlmaWVkIHRleHQgd2hlbiByb3VuZGluZyBoYWNr
cyBhcmUgZW5hYmxlZApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMu
Y3BwCShyZXZpc2lvbiA5MDc5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91
bml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNzMsNiArMTE3MywxNiBAQCBWaXNpYmxlUG9z
aXRpb24gcmlnaHRCb3VuZGFyeU9mTGluZShjb25zCiAKIHN0YXRpYyBjb25zdCBpbnQgaW52YWxp
ZE9mZnNldCA9IC0xOwogCitzdGF0aWMgYm9vbCBwb3NpdGlvbklzSW5Cb3goY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiB3b3JkQnJlYWssIGNvbnN0IElubGluZUJveCogYm94LCBpbnQmIG9mZnNldE9m
V29yZEJyZWFrKQoreworICAgIGlmICh3b3JkQnJlYWsuaXNOdWxsKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIElubGluZUJveCogYm94T2ZXb3JkQnJlYWs7CisgICAgd29yZEJyZWFr
LmdldElubGluZUJveEFuZE9mZnNldChib3hPZldvcmRCcmVhaywgb2Zmc2V0T2ZXb3JkQnJlYWsp
OworICAgIHJldHVybiBib3ggPT0gYm94T2ZXb3JkQnJlYWs7Cit9CisKIHN0YXRpYyBWaXNpYmxl
UG9zaXRpb24gcHJldmlvdXNXb3JkQnJlYWtJbkJveEluc2lkZUJsb2NrV2l0aFNhbWVEaXJlY3Rp
b25hbGl0eShjb25zdCBJbmxpbmVCb3gqIGJveCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwcmV2
aW91c1dvcmRCcmVhaywgaW50JiBvZmZzZXRPZldvcmRCcmVhaykKIHsKICAgICAvLyBJbiBhIExU
UiBibG9jaywgdGhlIHdvcmQgYnJlYWsgc2hvdWxkIGJlIG9uIHRoZSBsZWZ0IGJvdW5kYXJ5IG9m
IGEgd29yZC4KQEAgLTEyMDEsMjYgKzEyMTEsMjMgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBw
cmV2aW91c1dvcmRCcmVhawogICAgICAgICBpZiAoKGJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpICYmIGJveC0+bmV4dExlYWZDaGlsZCgpKQogICAgICAgICAgICAgfHwgKCFib3gtPmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSAmJiBib3gtPnByZXZMZWFmQ2hpbGQoKSkpIHsKICAgICAKLSAg
ICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkFmdGVyV29yZCA9IG5leHRXb3JkUG9z
aXRpb24od29yZEJyZWFrKTsKLSAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkJl
Zm9yZVdvcmQgPSBwcmV2aW91c1dvcmRQb3NpdGlvbihwb3NpdGlvbkFmdGVyV29yZCk7Ci0gICAg
ICAgIAotICAgICAgICAgICAgSW5saW5lQm94KiBib3hDb250YWluaW5nUHJldmlvdXNXb3JkQnJl
YWs7Ci0gICAgICAgICAgICBwb3NpdGlvbkJlZm9yZVdvcmQuZ2V0SW5saW5lQm94QW5kT2Zmc2V0
KGJveENvbnRhaW5pbmdQcmV2aW91c1dvcmRCcmVhaywgb2Zmc2V0T2ZXb3JkQnJlYWspOwotICAg
ICAgICAKLSAgICAgICAgICAgIGlmIChib3hDb250YWluaW5nUHJldmlvdXNXb3JkQnJlYWsgPT0g
Ym94KQotICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbkJlZm9yZVdvcmQ7CisgICAgICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25BZnRlcldvcmQgPSBuZXh0Qm91bmRhcnkod29y
ZEJyZWFrLCBuZXh0V29yZFBvc2l0aW9uQm91bmRhcnkpOworICAgICAgICAgICAgaWYgKHBvc2l0
aW9uQWZ0ZXJXb3JkLmlzTm90TnVsbCgpKSB7CisgICAgICAgICAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIHBvc2l0aW9uQmVmb3JlV29yZCA9IHByZXZpb3VzQm91bmRhcnkocG9zaXRpb25BZnRlcldv
cmQsIHByZXZpb3VzV29yZFBvc2l0aW9uQm91bmRhcnkpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKHBvc2l0aW9uSXNJbkJveChwb3NpdGlvbkJlZm9yZVdvcmQsIGJveCwgb2Zm
c2V0T2ZXb3JkQnJlYWspKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb25CZWZv
cmVXb3JkOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAKLSAgICB3b3JkQnJl
YWsgPSBwcmV2aW91c1dvcmRQb3NpdGlvbih3b3JkQnJlYWspOworICAgIHdvcmRCcmVhayA9IHBy
ZXZpb3VzQm91bmRhcnkod29yZEJyZWFrLCBwcmV2aW91c1dvcmRQb3NpdGlvbkJvdW5kYXJ5KTsK
ICAgICBpZiAocHJldmlvdXNXb3JkQnJlYWsgPT0gd29yZEJyZWFrKQogICAgICAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKCk7CiAKLSAgICBJbmxpbmVCb3gqIGJveENvbnRhaW5pbmdQcmV2aW91
c1dvcmRCcmVhazsKLSAgICB3b3JkQnJlYWsuZ2V0SW5saW5lQm94QW5kT2Zmc2V0KGJveENvbnRh
aW5pbmdQcmV2aW91c1dvcmRCcmVhaywgb2Zmc2V0T2ZXb3JkQnJlYWspOwotICAgIGlmIChib3hD
b250YWluaW5nUHJldmlvdXNXb3JkQnJlYWsgIT0gYm94KQotICAgICAgICByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uKCk7Ci0gICAgcmV0dXJuIHdvcmRCcmVhazsKKyAgICBpZiAocG9zaXRpb25Jc0lu
Qm94KHdvcmRCcmVhaywgYm94LCBvZmZzZXRPZldvcmRCcmVhaykpCisgICAgICAgIHJldHVybiB3
b3JkQnJlYWs7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogfQogCiBzdGF0aWMgVmlz
aWJsZVBvc2l0aW9uIGxlZnRtb3N0UG9zaXRpb25JblJUTEJveEluTFRSQmxvY2soY29uc3QgSW5s
aW5lQm94KiBib3gpCkBAIC0xMjg3LDEzICsxMjk0LDEzIEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRp
b24gbGFzdFdvcmRCcmVha0luQm8KICAgICBpZiAoYm91bmRhcnlQb3NpdGlvbi5pc051bGwoKSkK
ICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOyAgICAgICAgICAgIAogCi0gICAgVmlz
aWJsZVBvc2l0aW9uIHdvcmRCcmVhayA9IG5leHRXb3JkUG9zaXRpb24oYm91bmRhcnlQb3NpdGlv
bik7Ci0gICAgaWYgKHdvcmRCcmVhayAhPSBib3VuZGFyeVBvc2l0aW9uKQotICAgICAgICB3b3Jk
QnJlYWsgPSBwcmV2aW91c1dvcmRQb3NpdGlvbih3b3JkQnJlYWspOworICAgIFZpc2libGVQb3Np
dGlvbiB3b3JkQnJlYWsgPSBuZXh0Qm91bmRhcnkoYm91bmRhcnlQb3NpdGlvbiwgbmV4dFdvcmRQ
b3NpdGlvbkJvdW5kYXJ5KTsKKyAgICBpZiAod29yZEJyZWFrLmlzTnVsbCgpKQorICAgICAgICB3
b3JkQnJlYWsgPSBib3VuZGFyeVBvc2l0aW9uOworICAgIGVsc2UgaWYgKHdvcmRCcmVhayAhPSBi
b3VuZGFyeVBvc2l0aW9uKQorICAgICAgICB3b3JkQnJlYWsgPSBwcmV2aW91c0JvdW5kYXJ5KHdv
cmRCcmVhaywgcHJldmlvdXNXb3JkUG9zaXRpb25Cb3VuZGFyeSk7CiAKLSAgICBJbmxpbmVCb3gq
IGJveE9mV29yZEJyZWFrOwotICAgIHdvcmRCcmVhay5nZXRJbmxpbmVCb3hBbmRPZmZzZXQoYm94
T2ZXb3JkQnJlYWssIG9mZnNldE9mV29yZEJyZWFrKTsKLSAgICBpZiAoYm94T2ZXb3JkQnJlYWsg
PT0gYm94KQorICAgIGlmIChwb3NpdGlvbklzSW5Cb3god29yZEJyZWFrLCBib3gsIG9mZnNldE9m
V29yZEJyZWFrKSkKICAgICAgICAgcmV0dXJuIHdvcmRCcmVhazsKICAgICByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uKCk7ICAgIAogfQpAQCAtMTMwMSwxMSArMTMwOCw4IEBAIHN0YXRpYyBWaXNpYmxl
UG9zaXRpb24gbGFzdFdvcmRCcmVha0luQm8KIHN0YXRpYyBib29sIHBvc2l0aW9uSXNWaXN1YWxs
eU9yZGVyZWRJbkJveEluQmxvY2tXaXRoRGlmZmVyZW50RGlyZWN0aW9uYWxpdHkoY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiB3b3JkQnJlYWssIGNvbnN0IElubGluZUJveCogYm94LCBpbnQmIG9mZnNl
dE9mV29yZEJyZWFrKQogewogICAgIGludCBwcmV2aW91c09mZnNldCA9IG9mZnNldE9mV29yZEJy
ZWFrOwotICAgIElubGluZUJveCogYm94T2ZXb3JkQnJlYWs7Ci0gICAgd29yZEJyZWFrLmdldElu
bGluZUJveEFuZE9mZnNldChib3hPZldvcmRCcmVhaywgb2Zmc2V0T2ZXb3JkQnJlYWspOwotICAg
IGlmIChib3hPZldvcmRCcmVhayA9PSBib3ggJiYgKHByZXZpb3VzT2Zmc2V0ID09IGludmFsaWRP
ZmZzZXQgfHwgcHJldmlvdXNPZmZzZXQgPCBvZmZzZXRPZldvcmRCcmVhaykpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gcG9zaXRpb25Jc0luQm94
KHdvcmRCcmVhaywgYm94LCBvZmZzZXRPZldvcmRCcmVhaykKKyAgICAgICAgICAgJiYgKHByZXZp
b3VzT2Zmc2V0ID09IGludmFsaWRPZmZzZXQgfHwgcHJldmlvdXNPZmZzZXQgPCBvZmZzZXRPZldv
cmRCcmVhayk7CiB9CiAgICAgCiBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIG5leHRXb3JkQnJlYWtJ
bkJveEluc2lkZUJsb2NrV2l0aERpZmZlcmVudERpcmVjdGlvbmFsaXR5KApAQCAtMTMyMSw3ICsx
MzI1LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBuZXh0V29yZEJyZWFrSW5CbwogICAgIAog
ICAgIGJvb2wgaGFzU2VlbldvcmRCcmVha0luVGhpc0JveCA9IHByZXZpb3VzV29yZEJyZWFrLmlz
Tm90TnVsbCgpOwogICAgIFZpc2libGVQb3NpdGlvbiB3b3JkQnJlYWsgPSBoYXNTZWVuV29yZEJy
ZWFrSW5UaGlzQm94ID8gcHJldmlvdXNXb3JkQnJlYWsgOiBQb3NpdGlvbihib3gtPnJlbmRlcmVy
KCktPm5vZGUoKSwgYm94LT5jYXJldE1pbk9mZnNldCgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09m
ZnNldEluQW5jaG9yKTsKLSAgICB3b3JkQnJlYWsgPSBuZXh0V29yZFBvc2l0aW9uKHdvcmRCcmVh
ayk7CisgICAgd29yZEJyZWFrID0gbmV4dEJvdW5kYXJ5KHdvcmRCcmVhaywgbmV4dFdvcmRQb3Np
dGlvbkJvdW5kYXJ5KTsKICAgCiAgICAgLy8gR2l2ZW4gUlRMIGJveCAiQUJDIERFRiIgZWl0aGVy
IGZvbGxvd3MgYSBMVFIgYm94IG9yIGlzIHRoZSBmaXJzdCB2aXN1YWwgYm94IGluIGFuIExUUiBi
bG9jayBhcyBhbiBleGFtcGxlLAogICAgIC8vIHRoZSB2aXN1YWwgZGlzcGxheSBvZiB0aGUgUlRM
IGJveCBpczogIigwKUooMTApSSg5KUgoOCkgKDcpRig2KUUoNSlEKDQpICgzKUMoMilCKDEpQSgx
MSkiLApAQCAtMTUxMiwxNyArMTUxNiwyMCBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHJpZ2h0
V29yZEJvdW5kYXJ5CiAgICAgCiBzdGF0aWMgYm9vbCBwb3NpdGlvbklzSW5zaWRlQm94KGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgd29yZEJyZWFrLCBjb25zdCBJbmxpbmVCb3gqIGJveCkKIHsKLSAg
ICBJbmxpbmVCb3gqIGJveE9mV29yZEJyZWFrOwogICAgIGludCBvZmZzZXRPZldvcmRCcmVhazsK
LSAgICB3b3JkQnJlYWsuZ2V0SW5saW5lQm94QW5kT2Zmc2V0KGJveE9mV29yZEJyZWFrLCBvZmZz
ZXRPZldvcmRCcmVhayk7Ci0gICAgcmV0dXJuIGJveCA9PSBib3hPZldvcmRCcmVhayAmJiBvZmZz
ZXRPZldvcmRCcmVhayAhPSBib3gtPmNhcmV0TWF4T2Zmc2V0KCkgJiYgb2Zmc2V0T2ZXb3JkQnJl
YWsgIT0gYm94LT5jYXJldE1pbk9mZnNldCgpOworICAgIHJldHVybiBwb3NpdGlvbklzSW5Cb3go
d29yZEJyZWFrLCBib3gsIG9mZnNldE9mV29yZEJyZWFrKQorICAgICAgICAgICAmJiBvZmZzZXRP
ZldvcmRCcmVhayAhPSBib3gtPmNhcmV0TWF4T2Zmc2V0KCkgJiYgb2Zmc2V0T2ZXb3JkQnJlYWsg
IT0gYm94LT5jYXJldE1pbk9mZnNldCgpOwogfQogCi1WaXNpYmxlUG9zaXRpb24gbGVmdFdvcmRQ
b3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKK3N0YXRpYyBW
aXNpYmxlUG9zaXRpb24gbGVmdFdvcmRQb3NpdGlvbkFjcm9zc0JvdW5kYXJ5KGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQogewogICAgIElubGluZUJveCogYm94OwogICAg
IGludCBvZmZzZXQ7CiAgICAgdmlzaWJsZVBvc2l0aW9uLmdldElubGluZUJveEFuZE9mZnNldChi
b3gsIG9mZnNldCk7CisKKyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbigpOworCiAgICAgVGV4dERpcmVjdGlvbiBibG9ja0RpcmVjdGlvbiA9IGRpcmVjdGlvbk9m
RW5jbG9zaW5nQmxvY2sodmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkpOwogICAgIAog
ICAgIC8vIEZJWE1FOiBJZiB0aGUgYm94J3MgZGlyZWN0aW9uYWxpdHkgaXMgdGhlIHNhbWUgYXMg
dGhhdCBvZiB0aGUgZW5jbG9zaW5nIGJsb2NrLCB3aGVuIHRoZSBvZmZzZXQgaXMgYXQgdGhlIGJv
eCBib3VuZGFyeQpAQCAtMTUzNyw5ICsxNTQ0LDkgQEAgVmlzaWJsZVBvc2l0aW9uIGxlZnRXb3Jk
UG9zaXRpb24oY29uc3QgVgogICAgIFZpc2libGVQb3NpdGlvbiB3b3JkQnJlYWs7CiAgICAgaWYg
KGJsb2NrRGlyZWN0aW9uID09IExUUikgewogICAgICAgICBpZiAoYm94LT5kaXJlY3Rpb24oKSA9
PSBibG9ja0RpcmVjdGlvbikKLSAgICAgICAgICAgIHdvcmRCcmVhayA9IHByZXZpb3VzV29yZFBv
c2l0aW9uKHZpc2libGVQb3NpdGlvbik7CisgICAgICAgICAgICB3b3JkQnJlYWsgPSBwcmV2aW91
c0JvdW5kYXJ5KHZpc2libGVQb3NpdGlvbiwgcHJldmlvdXNXb3JkUG9zaXRpb25Cb3VuZGFyeSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHdvcmRCcmVhayA9IG5leHRXb3JkUG9zaXRpb24o
dmlzaWJsZVBvc2l0aW9uKTsKKyAgICAgICAgICAgIHdvcmRCcmVhayA9IG5leHRCb3VuZGFyeSh2
aXNpYmxlUG9zaXRpb24sIG5leHRXb3JkUG9zaXRpb25Cb3VuZGFyeSk7CiAgICAgfQogICAgIGlm
ICh3b3JkQnJlYWsuaXNOb3ROdWxsKCkgJiYgcG9zaXRpb25Jc0luc2lkZUJveCh3b3JkQnJlYWss
IGJveCkpCiAgICAgICAgIHJldHVybiB3b3JkQnJlYWs7CkBAIC0xNTU1LDExICsxNTYyLDE1IEBA
IFZpc2libGVQb3NpdGlvbiBsZWZ0V29yZFBvc2l0aW9uKGNvbnN0IFYKICAgICByZXR1cm4gbGVm
dFdvcmRCb3VuZGFyeShib3gtPnByZXZMZWFmQ2hpbGQoKSwgaW52YWxpZE9mZnNldCwgYmxvY2tE
aXJlY3Rpb24pOwogfQogCi1WaXNpYmxlUG9zaXRpb24gcmlnaHRXb3JkUG9zaXRpb24oY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCitzdGF0aWMgVmlzaWJsZVBvc2l0aW9u
IHJpZ2h0V29yZFBvc2l0aW9uQWNyb3NzQm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2
aXNpYmxlUG9zaXRpb24pCiB7CiAgICAgSW5saW5lQm94KiBib3g7CiAgICAgaW50IG9mZnNldDsK
ICAgICB2aXNpYmxlUG9zaXRpb24uZ2V0SW5saW5lQm94QW5kT2Zmc2V0KGJveCwgb2Zmc2V0KTsK
KworICAgIGlmICghYm94KQorICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CisKICAg
ICBUZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9uID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9j
ayh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7CiAgICAgCiAgICAgaWYgKG9mZnNl
dCA9PSBib3gtPmNhcmV0TGVmdG1vc3RPZmZzZXQoKSkKQEAgLTE1NzAsOSArMTU4MSw5IEBAIFZp
c2libGVQb3NpdGlvbiByaWdodFdvcmRQb3NpdGlvbihjb25zdCAKICAgICBWaXNpYmxlUG9zaXRp
b24gd29yZEJyZWFrOwogICAgIGlmIChibG9ja0RpcmVjdGlvbiA9PSBSVEwpIHsKICAgICAgICAg
aWYgKGJveC0+ZGlyZWN0aW9uKCkgPT0gYmxvY2tEaXJlY3Rpb24pCi0gICAgICAgICAgICB3b3Jk
QnJlYWsgPSBwcmV2aW91c1dvcmRQb3NpdGlvbih2aXNpYmxlUG9zaXRpb24pOworICAgICAgICAg
ICAgd29yZEJyZWFrID0gcHJldmlvdXNCb3VuZGFyeSh2aXNpYmxlUG9zaXRpb24sIHByZXZpb3Vz
V29yZFBvc2l0aW9uQm91bmRhcnkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB3b3JkQnJl
YWsgPSBuZXh0V29yZFBvc2l0aW9uKHZpc2libGVQb3NpdGlvbik7CisgICAgICAgICAgICB3b3Jk
QnJlYWsgPSBuZXh0Qm91bmRhcnkodmlzaWJsZVBvc2l0aW9uLCBuZXh0V29yZFBvc2l0aW9uQm91
bmRhcnkpOwogICAgIH0KICAgICBpZiAod29yZEJyZWFrLmlzTm90TnVsbCgpICYmIHBvc2l0aW9u
SXNJbnNpZGVCb3god29yZEJyZWFrLCBib3gpKQogICAgICAgICByZXR1cm4gd29yZEJyZWFrOwpA
QCAtMTU4OCw0ICsxNTk5LDE3IEBAIFZpc2libGVQb3NpdGlvbiByaWdodFdvcmRQb3NpdGlvbihj
b25zdCAKICAgICByZXR1cm4gcmlnaHRXb3JkQm91bmRhcnkoYm94LT5uZXh0TGVhZkNoaWxkKCks
IGludmFsaWRPZmZzZXQsIGJsb2NrRGlyZWN0aW9uKTsKIH0KIAorVmlzaWJsZVBvc2l0aW9uIGxl
ZnRXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCit7
CisgICAgLy8gRklYTUU6IGRvIEkgbmVlZCB0byBjaGVjayB2aXNpYmxlUG9zaXRpb24uaXNOb3RO
dWxsKCkgPworICAgIFZpc2libGVQb3NpdGlvbiBsZWZ0V29yZEJyZWFrID0gbGVmdFdvcmRQb3Np
dGlvbkFjcm9zc0JvdW5kYXJ5KHZpc2libGVQb3NpdGlvbik7CisgICAgcmV0dXJuIHZpc2libGVQ
b3NpdGlvbi5ob25vckVkaXRhYmxlQm91bmRhcnlBdE9yQmVmb3JlKGxlZnRXb3JkQnJlYWspOwor
fQorCitWaXNpYmxlUG9zaXRpb24gcmlnaHRXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiB2aXNpYmxlUG9zaXRpb24pCit7CisgICAgVmlzaWJsZVBvc2l0aW9uIHJpZ2h0V29yZEJy
ZWFrID0gcmlnaHRXb3JkUG9zaXRpb25BY3Jvc3NCb3VuZGFyeSh2aXNpYmxlUG9zaXRpb24pOwor
ICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb24uaG9ub3JFZGl0YWJsZUJvdW5kYXJ5QXRPckJlZm9y
ZShyaWdodFdvcmRCcmVhayk7Cit9CisKIH0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDkwNzk4KQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIw
MTEtMDctMTEgIFhpYW9tZWkgSmkgIDx4amlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCAyIC0td2Via2l0LXZpc3VhbC13
b3JkIGNyYXNoZXM6CisgICAgICAgIC0td2Via2l0LXZpc3VhbC13b3JkIGNyYXNoIG9uIG1peGVk
IGVkaXRhYmlsaXR5IGFuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjE5NzgKKyAgICAgICAgLS13ZWJraXQtdmlzdWFsLXdvcmQgY3Jhc2hlcyAoVmlz
aWJsZVBvc2l0aW9uLmdldElubGluZUJveEFuZE9mZnNldCBjb3VsZCByZXR1cm4gbnVsbCBib3gp
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjgxNAor
CisgICAgICAgIEFkZCBhIHN0YW5kYWxvbmUgdGVzdCBmb3IgdGVzdGluZyBnZXRJbmxpbmVCb3hB
bmRPZmZzZXQgcmV0dXJuaW5nIG51bGwgYm94LgorCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rp
b24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LW51bGwtYm94LWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LW51bGwtYm94
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12
aXN1YWxseS1vdGhlcnMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9u
L21vdmUtYnktd29yZC12aXN1YWxseS1vdGhlcnMuaHRtbDoKKwogMjAxMS0wNy0xMSAgRGFuIEJl
cm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIEV4Y2Vzc2l2ZSBleHBhbnNpb24g
b2YganVzdGlmaWVkIHRleHQgd2hlbiByb3VuZGluZyBoYWNrcyBhcmUgZW5hYmxlZApJbmRleDog
TGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LW51bGwt
Ym94LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVj
dGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktbnVsbC1ib3gtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3Vh
bGx5LW51bGwtYm94LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorVGVz
dCBQYXNzZWQKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29y
ZC12aXN1YWxseS1udWxsLWJveC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRp
bmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS1udWxsLWJveC5odG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3Vh
bGx5LW51bGwtYm94Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTkgQEAKKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvbW92ZS1ieS13b3JkLXZpc3VhbGx5LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0PgorCitvbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICB0cnkgeworICAgICAgICBy
dW5UZXN0KCk7CisgICAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gIlRlc3QgUGFzc2Vk
IjsKKyAgICB9IGZpbmFsbHkgeworICAgIH0KK307CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworPC9zY3Jp
cHQ+Cis8ZGl2IGlkPSJ0ZXN0TW92ZUJ5V29yZCI+Cis8b3V0cHV0PjxkaXYgZGlyPWx0ciB0aXRs
ZT0iMHwwIiBjbGFzcz0idGVzdF9tb3ZlX2J5X3dvcmQiPgorPC9kaXY+Cis8ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnkt
d29yZC12aXN1YWxseS1vdGhlcnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2VkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS1vdGhlcnMtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiA5MDc5OCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9u
L21vdmUtYnktd29yZC12aXN1YWxseS1vdGhlcnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0yMjEsNCArMjIxLDE0IEBAIE1vdmUgcmlnaHQgYnkgb25lIHdvcmQKICLkpKvkobHmmpjl
gI7ljpggICAg55aC5bSd54O1ICAgICBhYmMgZGVmIlswLCAxLCAyLCAzLCA0LCA5LCAxMCwgMTEs
IDE3LCAyMV0KIE1vdmUgbGVmdCBieSBvbmUgd29yZAogIuSkq+ShseaamOWAjuWOmCAgICDnloLl
tJ3ng7UgICAgIGFiYyBkZWYiWzI0LCAyMSwgMTcsIDExLCAxMCwgOSwgNCwgMywgMiwgMSwgMF0K
K1Rlc3QgNDQsIExUUjoKK01vdmUgcmlnaHQgYnkgb25lIHdvcmQKKyJhYmMgZGVmICJbMCwgNF0K
K01vdmUgbGVmdCBieSBvbmUgd29yZAorIiBoaWogb3BxIls4LCA1LCAxXQorVGVzdCA0NSwgTFRS
OgorTW92ZSByaWdodCBieSBvbmUgd29yZAorIlxuMDAiWzNdCitNb3ZlIGxlZnQgYnkgb25lIHdv
cmQKKyJcbjAwIlszLCAxXQogCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9t
b3ZlLWJ5LXdvcmQtdmlzdWFsbHktb3RoZXJzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LW90aGVycy5odG1sCShy
ZXZpc2lvbiA5MDc5OCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnkt
d29yZC12aXN1YWxseS1vdGhlcnMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtODgsNiArODgsMTIg
QEAgd2hlcmUgY2hpbGRfbm9kZV9pbmRleCBpcyBvcHRpb25hbCwgZGVmYQogPCEtLSB0ZXN0IHdv
cmRzIG5vdCBzZXBhcmF0ZWQgYnkgc3BhY2VzIC0tPgogPGRpdiBzdHlsZT0id2hpdGUtc3BhY2U6
cHJlIiBjb250ZW50ZWRpdGFibGUgZGlyPWx0ciBjbGFzcz0idGVzdF9tb3ZlX2J5X3dvcmQiIHRp
dGxlPSIwIDEgMiAzIDQgOSAxMCAxMSAxNyAyMXwyNCAyMSAxNyAxMSAxMCA5IDQgMyAyIDEgMCI+
5Lq65LiA5rCn5Zad5aSnICAgIOeskeaKrOeahCAgICAgYWJjIGRlZjwvZGl2PgogCis8IS0tIG1p
eGVkIGVkaXRhYmlsaXR5IC0tPgorPGRpdiBkaXI9bHRyIGNsYXNzPSJ0ZXN0X21vdmVfYnlfd29y
ZCIgdGl0bGU9IjAgNHw4IDUgMSI+YWJjIGRlZiA8c3BhbiBjb250ZW50ZWRpdGFibGU+IGluc2lk
ZSBzcGFuIDwvc3Bhbj4gaGlqIG9wcTwvZGl2PgorCis8ZGl2IGRpcj1sdHIgY29udGVudGVkaXRh
YmxlPjwvZGl2PgorMDA8YmFzZSBkaXI9bHRyIGNsYXNzPSJ0ZXN0X21vdmVfYnlfd29yZCIgdGl0
bGU9IjN8MyAxIj4KKwogPC9kaXY+CiA8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KIDwvYm9keT4K
</data>
<flag name="review"
          id="95082"
          type_id="1"
          status="-"
          setter="rniwa"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100873</attachid>
            <date>2011-07-14 15:25:41 -0700</date>
            <delta_ts>2011-07-14 16:27:47 -0700</delta_ts>
            <desc>patch w/ layout test</desc>
            <filename>61978.v3</filename>
            <type>text/plain</type>
            <size>15110</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxMDMwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMDctMTQgIFhpYW9tZWkg
SmkgIDx4amlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEZpeCAyIC0td2Via2l0LXZpc3VhbC13
b3JkIGNyYXNoZXM6CisgICAgICAgIC0td2Via2l0LXZpc3VhbC13b3JkIGNyYXNoIG9uIG1peGVk
IGVkaXRhYmlsaXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02MTk3OAorCisgICAgICAgIC0td2Via2l0LXZpc3VhbC13b3JkIGNyYXNoZXMgKFZpc2li
bGVQb3NpdGlvbi5nZXRJbmxpbmVCb3hBbmRPZmZzZXQgY291bGQgcmV0dXJuIG51bGwgYm94KQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI4MTQKKwor
ICAgICAgICBSZXBsYWNlIHByZXZpb3VzV29yZFBvc2l0aW9uL25leHRXb3JkUG9zaXRpb24gd2l0
aCBwcmV2aW91c0JvdW5kYXJ5L25leHRCb3VuZGFyeSB3aGljaCBkbworICAgICAgICBub3QgaG9u
b3IgZWRpdGFibGUgYm91bmFyeS4gSG9ub3IgZWRpdGFibGUgYm91bmRhcnkgYXMgdGhlIGxhc3Qg
c3RhZ2Ugb2YgbGVmdFdvcmRQb3NpdGlvbgorICAgICAgICBhbmQgcmlnaHRXb3JkUG9zaXRpb24u
CisKKyAgICAgICAgQ2hlY2sgcHJldmlvdXNCb3VuZGFyeS9uZXh0Qm91bmRhcnkgYWdhaW5zdCBO
VUxMLgorCisgICAgICAgIEhhdmUgYSBzdGF0aWMgZnVuY3Rpb24gdG8gZW5jYXBzdWxhdGUgdGhl
IHVzYWdlIG9mIGdldElubGluZUJveEFuZE9mZnNldCBhbmQgY2hlY2sgdGhlIAorICAgICAgICB2
aXNpYmxlIHBvc2l0aW9uIGlzIG5vdCBOVUxMIGJlZm9yZSBwYXNzaW5nIHRvIGdldElubGluZUJv
eEFuZE9mZnNldC4KKworICAgICAgICBDaGVjayB0aGUgYm94IHJldHVybmVkIGZyb20gZ2V0SW5s
aW5lQm94QW5kT2Zmc2V0IGlzIG5vdCBOVUxMIGJlZm9yZSBhY2Nlc3NpbmcuCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9zZWxl
Y3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LW51bGwtYm94Lmh0bWwKKworICAgICAgICAqIGVk
aXRpbmcvdmlzaWJsZV91bml0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwb3NpdGlvbklzSW5C
b3gpOgorICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNXb3JkQnJlYWtJbkJveEluc2lkZUJsb2Nr
V2l0aFNhbWVEaXJlY3Rpb25hbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpsYXN0V29yZEJyZWFr
SW5Cb3gpOgorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25Jc1Zpc3VhbGx5T3JkZXJlZEluQm94
SW5CbG9ja1dpdGhEaWZmZXJlbnREaXJlY3Rpb25hbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpu
ZXh0V29yZEJyZWFrSW5Cb3hJbnNpZGVCbG9ja1dpdGhEaWZmZXJlbnREaXJlY3Rpb25hbGl0eSk6
CisgICAgICAgIChXZWJDb3JlOjpwb3NpdGlvbklzSW5zaWRlQm94KToKKyAgICAgICAgKFdlYkNv
cmU6OmxlZnRXb3JkUG9zaXRpb25BY3Jvc3NCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpy
aWdodFdvcmRQb3NpdGlvbkFjcm9zc0JvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmxlZnRX
b3JkUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6cmlnaHRXb3JkUG9zaXRpb24pOgorCiAy
MDExLTA3LTE0ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBS
RUdSRVNTSU9OOiBTaG91bGQgbm90IGRpc3BhdGNoIGRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxh
eW91dCBmb3IgdGhlIGluaXRpYWwgZW1wdHkgZG9jdW1lbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkocmV2aXNpb24gOTA3OTgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTczLDYg
KzExNzMsMTYgQEAgVmlzaWJsZVBvc2l0aW9uIHJpZ2h0Qm91bmRhcnlPZkxpbmUoY29ucwogCiBz
dGF0aWMgY29uc3QgaW50IGludmFsaWRPZmZzZXQgPSAtMTsKIAorc3RhdGljIGJvb2wgcG9zaXRp
b25Jc0luQm94KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgd29yZEJyZWFrLCBjb25zdCBJbmxpbmVC
b3gqIGJveCwgaW50JiBvZmZzZXRPZldvcmRCcmVhaykKK3sKKyAgICBpZiAod29yZEJyZWFrLmlz
TnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBJbmxpbmVCb3gqIGJveE9mV29y
ZEJyZWFrOworICAgIHdvcmRCcmVhay5nZXRJbmxpbmVCb3hBbmRPZmZzZXQoYm94T2ZXb3JkQnJl
YWssIG9mZnNldE9mV29yZEJyZWFrKTsKKyAgICByZXR1cm4gYm94ID09IGJveE9mV29yZEJyZWFr
OworfQorCiBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzV29yZEJyZWFrSW5Cb3hJbnNp
ZGVCbG9ja1dpdGhTYW1lRGlyZWN0aW9uYWxpdHkoY29uc3QgSW5saW5lQm94KiBib3gsIGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgcHJldmlvdXNXb3JkQnJlYWssIGludCYgb2Zmc2V0T2ZXb3JkQnJl
YWspCiB7CiAgICAgLy8gSW4gYSBMVFIgYmxvY2ssIHRoZSB3b3JkIGJyZWFrIHNob3VsZCBiZSBv
biB0aGUgbGVmdCBib3VuZGFyeSBvZiBhIHdvcmQuCkBAIC0xMjAxLDI2ICsxMjExLDIxIEBAIHN0
YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNXb3JkQnJlYWsKICAgICAgICAgaWYgKChib3gt
PmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSAmJiBib3gtPm5leHRMZWFmQ2hpbGQoKSkKICAgICAg
ICAgICAgIHx8ICghYm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgJiYgYm94LT5wcmV2TGVh
ZkNoaWxkKCkpKSB7CiAgICAgCi0gICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25B
ZnRlcldvcmQgPSBuZXh0V29yZFBvc2l0aW9uKHdvcmRCcmVhayk7Ci0gICAgICAgICAgICBWaXNp
YmxlUG9zaXRpb24gcG9zaXRpb25CZWZvcmVXb3JkID0gcHJldmlvdXNXb3JkUG9zaXRpb24ocG9z
aXRpb25BZnRlcldvcmQpOwotICAgICAgICAKLSAgICAgICAgICAgIElubGluZUJveCogYm94Q29u
dGFpbmluZ1ByZXZpb3VzV29yZEJyZWFrOwotICAgICAgICAgICAgcG9zaXRpb25CZWZvcmVXb3Jk
LmdldElubGluZUJveEFuZE9mZnNldChib3hDb250YWluaW5nUHJldmlvdXNXb3JkQnJlYWssIG9m
ZnNldE9mV29yZEJyZWFrKTsKLSAgICAgICAgCi0gICAgICAgICAgICBpZiAoYm94Q29udGFpbmlu
Z1ByZXZpb3VzV29yZEJyZWFrID09IGJveCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRp
b25CZWZvcmVXb3JkOworICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uQWZ0ZXJX
b3JkID0gbmV4dEJvdW5kYXJ5KHdvcmRCcmVhaywgbmV4dFdvcmRQb3NpdGlvbkJvdW5kYXJ5KTsK
KyAgICAgICAgICAgIGlmIChwb3NpdGlvbkFmdGVyV29yZC5pc05vdE51bGwoKSkgeworICAgICAg
ICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkJlZm9yZVdvcmQgPSBwcmV2aW91c0Jv
dW5kYXJ5KHBvc2l0aW9uQWZ0ZXJXb3JkLCBwcmV2aW91c1dvcmRQb3NpdGlvbkJvdW5kYXJ5KTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbklzSW5Cb3gocG9zaXRp
b25CZWZvcmVXb3JkLCBib3gsIG9mZnNldE9mV29yZEJyZWFrKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHBvc2l0aW9uQmVmb3JlV29yZDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KICAgCi0gICAgd29yZEJyZWFrID0gcHJldmlvdXNXb3JkUG9zaXRpb24od29yZEJyZWFr
KTsKKyAgICB3b3JkQnJlYWsgPSBwcmV2aW91c0JvdW5kYXJ5KHdvcmRCcmVhaywgcHJldmlvdXNX
b3JkUG9zaXRpb25Cb3VuZGFyeSk7CiAgICAgaWYgKHByZXZpb3VzV29yZEJyZWFrID09IHdvcmRC
cmVhaykKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogCi0gICAgSW5saW5lQm94
KiBib3hDb250YWluaW5nUHJldmlvdXNXb3JkQnJlYWs7Ci0gICAgd29yZEJyZWFrLmdldElubGlu
ZUJveEFuZE9mZnNldChib3hDb250YWluaW5nUHJldmlvdXNXb3JkQnJlYWssIG9mZnNldE9mV29y
ZEJyZWFrKTsKLSAgICBpZiAoYm94Q29udGFpbmluZ1ByZXZpb3VzV29yZEJyZWFrICE9IGJveCkK
LSAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwotICAgIHJldHVybiB3b3JkQnJlYWs7
CisgICAgcmV0dXJuIHBvc2l0aW9uSXNJbkJveCh3b3JkQnJlYWssIGJveCwgb2Zmc2V0T2ZXb3Jk
QnJlYWspID8gd29yZEJyZWFrIDogVmlzaWJsZVBvc2l0aW9uKCk7CiB9CiAKIHN0YXRpYyBWaXNp
YmxlUG9zaXRpb24gbGVmdG1vc3RQb3NpdGlvbkluUlRMQm94SW5MVFJCbG9jayhjb25zdCBJbmxp
bmVCb3gqIGJveCkKQEAgLTEyODcsMjUgKzEyOTIsMjAgQEAgc3RhdGljIFZpc2libGVQb3NpdGlv
biBsYXN0V29yZEJyZWFrSW5CbwogICAgIGlmIChib3VuZGFyeVBvc2l0aW9uLmlzTnVsbCgpKQog
ICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7ICAgICAgICAgICAgCiAKLSAgICBWaXNp
YmxlUG9zaXRpb24gd29yZEJyZWFrID0gbmV4dFdvcmRQb3NpdGlvbihib3VuZGFyeVBvc2l0aW9u
KTsKLSAgICBpZiAod29yZEJyZWFrICE9IGJvdW5kYXJ5UG9zaXRpb24pCi0gICAgICAgIHdvcmRC
cmVhayA9IHByZXZpb3VzV29yZFBvc2l0aW9uKHdvcmRCcmVhayk7CisgICAgVmlzaWJsZVBvc2l0
aW9uIHdvcmRCcmVhayA9IG5leHRCb3VuZGFyeShib3VuZGFyeVBvc2l0aW9uLCBuZXh0V29yZFBv
c2l0aW9uQm91bmRhcnkpOworICAgIGlmICh3b3JkQnJlYWsuaXNOdWxsKCkpCisgICAgICAgIHdv
cmRCcmVhayA9IGJvdW5kYXJ5UG9zaXRpb247CisgICAgZWxzZSBpZiAod29yZEJyZWFrICE9IGJv
dW5kYXJ5UG9zaXRpb24pCisgICAgICAgIHdvcmRCcmVhayA9IHByZXZpb3VzQm91bmRhcnkod29y
ZEJyZWFrLCBwcmV2aW91c1dvcmRQb3NpdGlvbkJvdW5kYXJ5KTsKIAotICAgIElubGluZUJveCog
Ym94T2ZXb3JkQnJlYWs7Ci0gICAgd29yZEJyZWFrLmdldElubGluZUJveEFuZE9mZnNldChib3hP
ZldvcmRCcmVhaywgb2Zmc2V0T2ZXb3JkQnJlYWspOwotICAgIGlmIChib3hPZldvcmRCcmVhayA9
PSBib3gpCi0gICAgICAgIHJldHVybiB3b3JkQnJlYWs7Ci0gICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbigpOyAgICAKKyAgICByZXR1cm4gcG9zaXRpb25Jc0luQm94KHdvcmRCcmVhaywgYm94LCBv
ZmZzZXRPZldvcmRCcmVhaykgPyB3b3JkQnJlYWsgOiBWaXNpYmxlUG9zaXRpb24oKTsgICAgCiB9
CiAKIHN0YXRpYyBib29sIHBvc2l0aW9uSXNWaXN1YWxseU9yZGVyZWRJbkJveEluQmxvY2tXaXRo
RGlmZmVyZW50RGlyZWN0aW9uYWxpdHkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB3b3JkQnJlYWss
IGNvbnN0IElubGluZUJveCogYm94LCBpbnQmIG9mZnNldE9mV29yZEJyZWFrKQogewogICAgIGlu
dCBwcmV2aW91c09mZnNldCA9IG9mZnNldE9mV29yZEJyZWFrOwotICAgIElubGluZUJveCogYm94
T2ZXb3JkQnJlYWs7Ci0gICAgd29yZEJyZWFrLmdldElubGluZUJveEFuZE9mZnNldChib3hPZldv
cmRCcmVhaywgb2Zmc2V0T2ZXb3JkQnJlYWspOwotICAgIGlmIChib3hPZldvcmRCcmVhayA9PSBi
b3ggJiYgKHByZXZpb3VzT2Zmc2V0ID09IGludmFsaWRPZmZzZXQgfHwgcHJldmlvdXNPZmZzZXQg
PCBvZmZzZXRPZldvcmRCcmVhaykpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gcG9zaXRpb25Jc0luQm94KHdvcmRCcmVhaywgYm94LCBvZmZzZXRP
ZldvcmRCcmVhaykKKyAgICAgICAgJiYgKHByZXZpb3VzT2Zmc2V0ID09IGludmFsaWRPZmZzZXQg
fHwgcHJldmlvdXNPZmZzZXQgPCBvZmZzZXRPZldvcmRCcmVhayk7CiB9CiAgICAgCiBzdGF0aWMg
VmlzaWJsZVBvc2l0aW9uIG5leHRXb3JkQnJlYWtJbkJveEluc2lkZUJsb2NrV2l0aERpZmZlcmVu
dERpcmVjdGlvbmFsaXR5KApAQCAtMTMyMSw3ICsxMzIxLDcgQEAgc3RhdGljIFZpc2libGVQb3Np
dGlvbiBuZXh0V29yZEJyZWFrSW5CbwogICAgIAogICAgIGJvb2wgaGFzU2VlbldvcmRCcmVha0lu
VGhpc0JveCA9IHByZXZpb3VzV29yZEJyZWFrLmlzTm90TnVsbCgpOwogICAgIFZpc2libGVQb3Np
dGlvbiB3b3JkQnJlYWsgPSBoYXNTZWVuV29yZEJyZWFrSW5UaGlzQm94ID8gcHJldmlvdXNXb3Jk
QnJlYWsgOiBQb3NpdGlvbihib3gtPnJlbmRlcmVyKCktPm5vZGUoKSwgYm94LT5jYXJldE1pbk9m
ZnNldCgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKLSAgICB3b3JkQnJl
YWsgPSBuZXh0V29yZFBvc2l0aW9uKHdvcmRCcmVhayk7CisgICAgd29yZEJyZWFrID0gbmV4dEJv
dW5kYXJ5KHdvcmRCcmVhaywgbmV4dFdvcmRQb3NpdGlvbkJvdW5kYXJ5KTsKICAgCiAgICAgLy8g
R2l2ZW4gUlRMIGJveCAiQUJDIERFRiIgZWl0aGVyIGZvbGxvd3MgYSBMVFIgYm94IG9yIGlzIHRo
ZSBmaXJzdCB2aXN1YWwgYm94IGluIGFuIExUUiBibG9jayBhcyBhbiBleGFtcGxlLAogICAgIC8v
IHRoZSB2aXN1YWwgZGlzcGxheSBvZiB0aGUgUlRMIGJveCBpczogIigwKUooMTApSSg5KUgoOCkg
KDcpRig2KUUoNSlEKDQpICgzKUMoMilCKDEpQSgxMSkiLApAQCAtMTUxMiwxNyArMTUxMiwyMCBA
QCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHJpZ2h0V29yZEJvdW5kYXJ5CiAgICAgCiBzdGF0aWMg
Ym9vbCBwb3NpdGlvbklzSW5zaWRlQm94KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgd29yZEJyZWFr
LCBjb25zdCBJbmxpbmVCb3gqIGJveCkKIHsKLSAgICBJbmxpbmVCb3gqIGJveE9mV29yZEJyZWFr
OwogICAgIGludCBvZmZzZXRPZldvcmRCcmVhazsKLSAgICB3b3JkQnJlYWsuZ2V0SW5saW5lQm94
QW5kT2Zmc2V0KGJveE9mV29yZEJyZWFrLCBvZmZzZXRPZldvcmRCcmVhayk7Ci0gICAgcmV0dXJu
IGJveCA9PSBib3hPZldvcmRCcmVhayAmJiBvZmZzZXRPZldvcmRCcmVhayAhPSBib3gtPmNhcmV0
TWF4T2Zmc2V0KCkgJiYgb2Zmc2V0T2ZXb3JkQnJlYWsgIT0gYm94LT5jYXJldE1pbk9mZnNldCgp
OworICAgIHJldHVybiBwb3NpdGlvbklzSW5Cb3god29yZEJyZWFrLCBib3gsIG9mZnNldE9mV29y
ZEJyZWFrKQorICAgICAgICAmJiBvZmZzZXRPZldvcmRCcmVhayAhPSBib3gtPmNhcmV0TWF4T2Zm
c2V0KCkgJiYgb2Zmc2V0T2ZXb3JkQnJlYWsgIT0gYm94LT5jYXJldE1pbk9mZnNldCgpOwogfQog
Ci1WaXNpYmxlUG9zaXRpb24gbGVmdFdvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHZpc2libGVQb3NpdGlvbikKK3N0YXRpYyBWaXNpYmxlUG9zaXRpb24gbGVmdFdvcmRQb3NpdGlv
bkFjcm9zc0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQog
ewogICAgIElubGluZUJveCogYm94OwogICAgIGludCBvZmZzZXQ7CiAgICAgdmlzaWJsZVBvc2l0
aW9uLmdldElubGluZUJveEFuZE9mZnNldChib3gsIG9mZnNldCk7CisKKyAgICBpZiAoIWJveCkK
KyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOworCiAgICAgVGV4dERpcmVjdGlvbiBi
bG9ja0RpcmVjdGlvbiA9IGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2sodmlzaWJsZVBvc2l0aW9u
LmRlZXBFcXVpdmFsZW50KCkpOwogICAgIAogICAgIC8vIEZJWE1FOiBJZiB0aGUgYm94J3MgZGly
ZWN0aW9uYWxpdHkgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUgZW5jbG9zaW5nIGJsb2NrLCB3
aGVuIHRoZSBvZmZzZXQgaXMgYXQgdGhlIGJveCBib3VuZGFyeQpAQCAtMTUzNyw5ICsxNTQwLDkg
QEAgVmlzaWJsZVBvc2l0aW9uIGxlZnRXb3JkUG9zaXRpb24oY29uc3QgVgogICAgIFZpc2libGVQ
b3NpdGlvbiB3b3JkQnJlYWs7CiAgICAgaWYgKGJsb2NrRGlyZWN0aW9uID09IExUUikgewogICAg
ICAgICBpZiAoYm94LT5kaXJlY3Rpb24oKSA9PSBibG9ja0RpcmVjdGlvbikKLSAgICAgICAgICAg
IHdvcmRCcmVhayA9IHByZXZpb3VzV29yZFBvc2l0aW9uKHZpc2libGVQb3NpdGlvbik7CisgICAg
ICAgICAgICB3b3JkQnJlYWsgPSBwcmV2aW91c0JvdW5kYXJ5KHZpc2libGVQb3NpdGlvbiwgcHJl
dmlvdXNXb3JkUG9zaXRpb25Cb3VuZGFyeSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHdv
cmRCcmVhayA9IG5leHRXb3JkUG9zaXRpb24odmlzaWJsZVBvc2l0aW9uKTsKKyAgICAgICAgICAg
IHdvcmRCcmVhayA9IG5leHRCb3VuZGFyeSh2aXNpYmxlUG9zaXRpb24sIG5leHRXb3JkUG9zaXRp
b25Cb3VuZGFyeSk7CiAgICAgfQogICAgIGlmICh3b3JkQnJlYWsuaXNOb3ROdWxsKCkgJiYgcG9z
aXRpb25Jc0luc2lkZUJveCh3b3JkQnJlYWssIGJveCkpCiAgICAgICAgIHJldHVybiB3b3JkQnJl
YWs7CkBAIC0xNTU1LDExICsxNTU4LDE1IEBAIFZpc2libGVQb3NpdGlvbiBsZWZ0V29yZFBvc2l0
aW9uKGNvbnN0IFYKICAgICByZXR1cm4gbGVmdFdvcmRCb3VuZGFyeShib3gtPnByZXZMZWFmQ2hp
bGQoKSwgaW52YWxpZE9mZnNldCwgYmxvY2tEaXJlY3Rpb24pOwogfQogCi1WaXNpYmxlUG9zaXRp
b24gcmlnaHRXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRp
b24pCitzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHJpZ2h0V29yZFBvc2l0aW9uQWNyb3NzQm91bmRh
cnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCiB7CiAgICAgSW5saW5l
Qm94KiBib3g7CiAgICAgaW50IG9mZnNldDsKICAgICB2aXNpYmxlUG9zaXRpb24uZ2V0SW5saW5l
Qm94QW5kT2Zmc2V0KGJveCwgb2Zmc2V0KTsKKworICAgIGlmICghYm94KQorICAgICAgICByZXR1
cm4gVmlzaWJsZVBvc2l0aW9uKCk7CisKICAgICBUZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9u
ID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxl
bnQoKSk7CiAgICAgCiAgICAgaWYgKG9mZnNldCA9PSBib3gtPmNhcmV0TGVmdG1vc3RPZmZzZXQo
KSkKQEAgLTE1NzAsOSArMTU3Nyw5IEBAIFZpc2libGVQb3NpdGlvbiByaWdodFdvcmRQb3NpdGlv
bihjb25zdCAKICAgICBWaXNpYmxlUG9zaXRpb24gd29yZEJyZWFrOwogICAgIGlmIChibG9ja0Rp
cmVjdGlvbiA9PSBSVEwpIHsKICAgICAgICAgaWYgKGJveC0+ZGlyZWN0aW9uKCkgPT0gYmxvY2tE
aXJlY3Rpb24pCi0gICAgICAgICAgICB3b3JkQnJlYWsgPSBwcmV2aW91c1dvcmRQb3NpdGlvbih2
aXNpYmxlUG9zaXRpb24pOworICAgICAgICAgICAgd29yZEJyZWFrID0gcHJldmlvdXNCb3VuZGFy
eSh2aXNpYmxlUG9zaXRpb24sIHByZXZpb3VzV29yZFBvc2l0aW9uQm91bmRhcnkpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB3b3JkQnJlYWsgPSBuZXh0V29yZFBvc2l0aW9uKHZpc2libGVQ
b3NpdGlvbik7CisgICAgICAgICAgICB3b3JkQnJlYWsgPSBuZXh0Qm91bmRhcnkodmlzaWJsZVBv
c2l0aW9uLCBuZXh0V29yZFBvc2l0aW9uQm91bmRhcnkpOwogICAgIH0KICAgICBpZiAod29yZEJy
ZWFrLmlzTm90TnVsbCgpICYmIHBvc2l0aW9uSXNJbnNpZGVCb3god29yZEJyZWFrLCBib3gpKQog
ICAgICAgICByZXR1cm4gd29yZEJyZWFrOwpAQCAtMTU4OCw0ICsxNTk1LDIyIEBAIFZpc2libGVQ
b3NpdGlvbiByaWdodFdvcmRQb3NpdGlvbihjb25zdCAKICAgICByZXR1cm4gcmlnaHRXb3JkQm91
bmRhcnkoYm94LT5uZXh0TGVhZkNoaWxkKCksIGludmFsaWRPZmZzZXQsIGJsb2NrRGlyZWN0aW9u
KTsKIH0KIAorVmlzaWJsZVBvc2l0aW9uIGxlZnRXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCit7CisgICAgaWYgKHZpc2libGVQb3NpdGlvbi5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOworCisgICAgVmlzaWJsZVBv
c2l0aW9uIGxlZnRXb3JkQnJlYWsgPSBsZWZ0V29yZFBvc2l0aW9uQWNyb3NzQm91bmRhcnkodmlz
aWJsZVBvc2l0aW9uKTsKKyAgICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uLmhvbm9yRWRpdGFibGVC
b3VuZGFyeUF0T3JCZWZvcmUobGVmdFdvcmRCcmVhayk7Cit9CisKK1Zpc2libGVQb3NpdGlvbiBy
aWdodFdvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikK
K3sKKyAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKCk7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gcmlnaHRXb3JkQnJlYWsgPSBy
aWdodFdvcmRQb3NpdGlvbkFjcm9zc0JvdW5kYXJ5KHZpc2libGVQb3NpdGlvbik7CisgICAgcmV0
dXJuIHZpc2libGVQb3NpdGlvbi5ob25vckVkaXRhYmxlQm91bmRhcnlBdE9yQmVmb3JlKHJpZ2h0
V29yZEJyZWFrKTsKK30KKwogfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gOTEwMzApCisrKyBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAxMS0wNy0x
NCAgWGlhb21laSBKaSAgPHhqaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRml4IDIgLS13ZWJr
aXQtdmlzdWFsLXdvcmQgY3Jhc2hlczoKKyAgICAgICAgLS13ZWJraXQtdmlzdWFsLXdvcmQgY3Jh
c2ggb24gbWl4ZWQgZWRpdGFiaWxpdHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYxOTc4CisKKyAgICAgICAgLS13ZWJraXQtdmlzdWFsLXdvcmQgY3Jh
c2hlcyAoVmlzaWJsZVBvc2l0aW9uLmdldElubGluZUJveEFuZE9mZnNldCBjb3VsZCByZXR1cm4g
bnVsbCBib3gpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02MjgxNAorCisgICAgICAgIEFkZCBhIHN0YW5kYWxvbmUgdGVzdCBmb3IgdGVzdGluZyBnZXRJ
bmxpbmVCb3hBbmRPZmZzZXQgcmV0dXJuaW5nIG51bGwgYm94LgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1i
eS13b3JkLXZpc3VhbGx5LW51bGwtYm94LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LW51bGwtYm94Lmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS1v
dGhlcnMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnkt
d29yZC12aXN1YWxseS1vdGhlcnMuaHRtbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Ta2lwcGVk
OgorCiAyMDExLTA3LTE0ICBWaW5jZW50IFNjaGVpYiAgPHNjaGVpYkBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgW2Nocm9taXVtXSB1cGRhdGVkIHRlc3QgZXhwZWN0YXRpb25zLgpJbmRleDogTGF5
b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LW51bGwtYm94
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlv
bi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktbnVsbC1ib3gtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5
LW51bGwtYm94LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorVGVzdCBQ
YXNzZWQKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12
aXN1YWxseS1udWxsLWJveC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcv
c2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS1udWxsLWJveC5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5
LW51bGwtYm94Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTkgQEAKKzxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvbW92ZS1ieS13b3JkLXZpc3VhbGx5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0PgorCitvbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICB0cnkgeworICAgICAgICBydW5U
ZXN0KCk7CisgICAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gIlRlc3QgUGFzc2VkIjsK
KyAgICB9IGZpbmFsbHkgeworICAgIH0KK307CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworPC9zY3JpcHQ+
Cis8ZGl2IGlkPSJ0ZXN0TW92ZUJ5V29yZCI+Cis8b3V0cHV0PjxkaXYgZGlyPWx0ciB0aXRsZT0i
MHwwIiBjbGFzcz0idGVzdF9tb3ZlX2J5X3dvcmQiPgorPC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xl
Ij48L2Rpdj4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29y
ZC12aXN1YWxseS1vdGhlcnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2VkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS1vdGhlcnMtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiA5MDc5OCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21v
dmUtYnktd29yZC12aXN1YWxseS1vdGhlcnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0yMjEsNCArMjIxLDE0IEBAIE1vdmUgcmlnaHQgYnkgb25lIHdvcmQKICLkpKvkobHmmpjlgI7l
jpggICAg55aC5bSd54O1ICAgICBhYmMgZGVmIlswLCAxLCAyLCAzLCA0LCA5LCAxMCwgMTEsIDE3
LCAyMV0KIE1vdmUgbGVmdCBieSBvbmUgd29yZAogIuSkq+ShseaamOWAjuWOmCAgICDnloLltJ3n
g7UgICAgIGFiYyBkZWYiWzI0LCAyMSwgMTcsIDExLCAxMCwgOSwgNCwgMywgMiwgMSwgMF0KK1Rl
c3QgNDQsIExUUjoKK01vdmUgcmlnaHQgYnkgb25lIHdvcmQKKyJhYmMgZGVmICJbMCwgNF0KK01v
dmUgbGVmdCBieSBvbmUgd29yZAorIiBoaWogb3BxIls4LCA1LCAxXQorVGVzdCA0NSwgTFRSOgor
TW92ZSByaWdodCBieSBvbmUgd29yZAorIlxuMDAiWzNdCitNb3ZlIGxlZnQgYnkgb25lIHdvcmQK
KyJcbjAwIlszLCAxXQogCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9tb3Zl
LWJ5LXdvcmQtdmlzdWFsbHktb3RoZXJzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LW90aGVycy5odG1sCShyZXZp
c2lvbiA5MDc5OCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29y
ZC12aXN1YWxseS1vdGhlcnMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtODgsNiArODgsMTIgQEAg
d2hlcmUgY2hpbGRfbm9kZV9pbmRleCBpcyBvcHRpb25hbCwgZGVmYQogPCEtLSB0ZXN0IHdvcmRz
IG5vdCBzZXBhcmF0ZWQgYnkgc3BhY2VzIC0tPgogPGRpdiBzdHlsZT0id2hpdGUtc3BhY2U6cHJl
IiBjb250ZW50ZWRpdGFibGUgZGlyPWx0ciBjbGFzcz0idGVzdF9tb3ZlX2J5X3dvcmQiIHRpdGxl
PSIwIDEgMiAzIDQgOSAxMCAxMSAxNyAyMXwyNCAyMSAxNyAxMSAxMCA5IDQgMyAyIDEgMCI+5Lq6
5LiA5rCn5Zad5aSnICAgIOeskeaKrOeahCAgICAgYWJjIGRlZjwvZGl2PgogCis8IS0tIG1peGVk
IGVkaXRhYmlsaXR5IC0tPgorPGRpdiBkaXI9bHRyIGNsYXNzPSJ0ZXN0X21vdmVfYnlfd29yZCIg
dGl0bGU9IjAgNHw4IDUgMSI+YWJjIGRlZiA8c3BhbiBjb250ZW50ZWRpdGFibGU+IGluc2lkZSBz
cGFuIDwvc3Bhbj4gaGlqIG9wcTwvZGl2PgorCis8ZGl2IGRpcj1sdHIgY29udGVudGVkaXRhYmxl
PjwvZGl2PgorMDA8YmFzZSBkaXI9bHRyIGNsYXNzPSJ0ZXN0X21vdmVfYnlfd29yZCIgdGl0bGU9
IjN8MyAxIj4KKwogPC9kaXY+CiA8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KIDwvYm9keT4KSW5k
ZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAkocmV2aXNpb24gOTA3OTgpCisrKyBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgzLDYgKzI0ODMsNyBA
QCBmYXN0L3VybC9pZG5hMjAwOC5odG1sCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01OTI2NQogZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5
LW90aGVycy5odG1sCiBlZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktc2lu
Z2xlLXNwYWNlLXNpZ2xlLWxpbmUuaHRtbAorZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3Jk
LXZpc3VhbGx5LW51bGwtYm94Lmh0bWwKIAogIyBbUXRdIE5ldyB0ZXN0cyBpbnRyb2R1Y2VkIGlu
IHI4NDc0MiBmYWlsCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
OTMzNAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100892</attachid>
            <date>2011-07-14 16:27:47 -0700</date>
            <delta_ts>2011-07-14 18:25:13 -0700</delta_ts>
            <desc>patch w/ layout test</desc>
            <filename>61978.v4</filename>
            <type>text/plain</type>
            <size>15297</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxMDMwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMDctMTQgIFhpYW9tZWkg
SmkgIDx4amlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEZpeCAyIC0td2Via2l0LXZpc3VhbC13
b3JkIGNyYXNoZXM6CisgICAgICAgIC0td2Via2l0LXZpc3VhbC13b3JkIGNyYXNoIG9uIG1peGVk
IGVkaXRhYmlsaXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02MTk3OAorCisgICAgICAgIC0td2Via2l0LXZpc3VhbC13b3JkIGNyYXNoZXMgKFZpc2li
bGVQb3NpdGlvbi5nZXRJbmxpbmVCb3hBbmRPZmZzZXQgY291bGQgcmV0dXJuIG51bGwgYm94KQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI4MTQKKwor
ICAgICAgICBSZXBsYWNlIHByZXZpb3VzV29yZFBvc2l0aW9uL25leHRXb3JkUG9zaXRpb24gd2l0
aCBwcmV2aW91c0JvdW5kYXJ5L25leHRCb3VuZGFyeSB3aGljaCBkbworICAgICAgICBub3QgaG9u
b3IgZWRpdGFibGUgYm91bmFyeS4gSG9ub3IgZWRpdGFibGUgYm91bmRhcnkgYXMgdGhlIGxhc3Qg
c3RhZ2Ugb2YgbGVmdFdvcmRQb3NpdGlvbgorICAgICAgICBhbmQgcmlnaHRXb3JkUG9zaXRpb24u
CisKKyAgICAgICAgQ2hlY2sgcHJldmlvdXNCb3VuZGFyeS9uZXh0Qm91bmRhcnkgYWdhaW5zdCBO
VUxMLgorCisgICAgICAgIEhhdmUgYSBzdGF0aWMgZnVuY3Rpb24gdG8gZW5jYXBzdWxhdGUgdGhl
IHVzYWdlIG9mIGdldElubGluZUJveEFuZE9mZnNldCBhbmQgY2hlY2sgdGhlIAorICAgICAgICB2
aXNpYmxlIHBvc2l0aW9uIGlzIG5vdCBOVUxMIGJlZm9yZSBwYXNzaW5nIHRvIGdldElubGluZUJv
eEFuZE9mZnNldC4KKworICAgICAgICBDaGVjayB0aGUgYm94IHJldHVybmVkIGZyb20gZ2V0SW5s
aW5lQm94QW5kT2Zmc2V0IGlzIG5vdCBOVUxMIGJlZm9yZSBhY2Nlc3NpbmcuCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9zZWxl
Y3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LW51bGwtYm94Lmh0bWwKKworICAgICAgICAqIGVk
aXRpbmcvdmlzaWJsZV91bml0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwb3NpdGlvbklzSW5C
b3gpOgorICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNXb3JkQnJlYWtJbkJveEluc2lkZUJsb2Nr
V2l0aFNhbWVEaXJlY3Rpb25hbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpsYXN0V29yZEJyZWFr
SW5Cb3gpOgorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25Jc1Zpc3VhbGx5T3JkZXJlZEluQm94
SW5CbG9ja1dpdGhEaWZmZXJlbnREaXJlY3Rpb25hbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpu
ZXh0V29yZEJyZWFrSW5Cb3hJbnNpZGVCbG9ja1dpdGhEaWZmZXJlbnREaXJlY3Rpb25hbGl0eSk6
CisgICAgICAgIChXZWJDb3JlOjpwb3NpdGlvbklzSW5zaWRlQm94KToKKyAgICAgICAgKFdlYkNv
cmU6OmxlZnRXb3JkUG9zaXRpb25BY3Jvc3NCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpy
aWdodFdvcmRQb3NpdGlvbkFjcm9zc0JvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmxlZnRX
b3JkUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6cmlnaHRXb3JkUG9zaXRpb24pOgorCiAy
MDExLTA3LTE0ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBS
RUdSRVNTSU9OOiBTaG91bGQgbm90IGRpc3BhdGNoIGRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxh
eW91dCBmb3IgdGhlIGluaXRpYWwgZW1wdHkgZG9jdW1lbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkocmV2aXNpb24gOTA3OTgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTczLDYg
KzExNzMsMTYgQEAgVmlzaWJsZVBvc2l0aW9uIHJpZ2h0Qm91bmRhcnlPZkxpbmUoY29ucwogCiBz
dGF0aWMgY29uc3QgaW50IGludmFsaWRPZmZzZXQgPSAtMTsKIAorc3RhdGljIGJvb2wgcG9zaXRp
b25Jc0luQm94KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgd29yZEJyZWFrLCBjb25zdCBJbmxpbmVC
b3gqIGJveCwgaW50JiBvZmZzZXRPZldvcmRCcmVhaykKK3sKKyAgICBpZiAod29yZEJyZWFrLmlz
TnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBJbmxpbmVCb3gqIGJveE9mV29y
ZEJyZWFrOworICAgIHdvcmRCcmVhay5nZXRJbmxpbmVCb3hBbmRPZmZzZXQoYm94T2ZXb3JkQnJl
YWssIG9mZnNldE9mV29yZEJyZWFrKTsKKyAgICByZXR1cm4gYm94ID09IGJveE9mV29yZEJyZWFr
OworfQorCiBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzV29yZEJyZWFrSW5Cb3hJbnNp
ZGVCbG9ja1dpdGhTYW1lRGlyZWN0aW9uYWxpdHkoY29uc3QgSW5saW5lQm94KiBib3gsIGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgcHJldmlvdXNXb3JkQnJlYWssIGludCYgb2Zmc2V0T2ZXb3JkQnJl
YWspCiB7CiAgICAgLy8gSW4gYSBMVFIgYmxvY2ssIHRoZSB3b3JkIGJyZWFrIHNob3VsZCBiZSBv
biB0aGUgbGVmdCBib3VuZGFyeSBvZiBhIHdvcmQuCkBAIC0xMjAxLDI2ICsxMjExLDIxIEBAIHN0
YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNXb3JkQnJlYWsKICAgICAgICAgaWYgKChib3gt
PmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSAmJiBib3gtPm5leHRMZWFmQ2hpbGQoKSkKICAgICAg
ICAgICAgIHx8ICghYm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgJiYgYm94LT5wcmV2TGVh
ZkNoaWxkKCkpKSB7CiAgICAgCi0gICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25B
ZnRlcldvcmQgPSBuZXh0V29yZFBvc2l0aW9uKHdvcmRCcmVhayk7Ci0gICAgICAgICAgICBWaXNp
YmxlUG9zaXRpb24gcG9zaXRpb25CZWZvcmVXb3JkID0gcHJldmlvdXNXb3JkUG9zaXRpb24ocG9z
aXRpb25BZnRlcldvcmQpOwotICAgICAgICAKLSAgICAgICAgICAgIElubGluZUJveCogYm94Q29u
dGFpbmluZ1ByZXZpb3VzV29yZEJyZWFrOwotICAgICAgICAgICAgcG9zaXRpb25CZWZvcmVXb3Jk
LmdldElubGluZUJveEFuZE9mZnNldChib3hDb250YWluaW5nUHJldmlvdXNXb3JkQnJlYWssIG9m
ZnNldE9mV29yZEJyZWFrKTsKLSAgICAgICAgCi0gICAgICAgICAgICBpZiAoYm94Q29udGFpbmlu
Z1ByZXZpb3VzV29yZEJyZWFrID09IGJveCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRp
b25CZWZvcmVXb3JkOworICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uQWZ0ZXJX
b3JkID0gbmV4dEJvdW5kYXJ5KHdvcmRCcmVhaywgbmV4dFdvcmRQb3NpdGlvbkJvdW5kYXJ5KTsK
KyAgICAgICAgICAgIGlmIChwb3NpdGlvbkFmdGVyV29yZC5pc05vdE51bGwoKSkgeworICAgICAg
ICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkJlZm9yZVdvcmQgPSBwcmV2aW91c0Jv
dW5kYXJ5KHBvc2l0aW9uQWZ0ZXJXb3JkLCBwcmV2aW91c1dvcmRQb3NpdGlvbkJvdW5kYXJ5KTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbklzSW5Cb3gocG9zaXRp
b25CZWZvcmVXb3JkLCBib3gsIG9mZnNldE9mV29yZEJyZWFrKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHBvc2l0aW9uQmVmb3JlV29yZDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KICAgCi0gICAgd29yZEJyZWFrID0gcHJldmlvdXNXb3JkUG9zaXRpb24od29yZEJyZWFr
KTsKKyAgICB3b3JkQnJlYWsgPSBwcmV2aW91c0JvdW5kYXJ5KHdvcmRCcmVhaywgcHJldmlvdXNX
b3JkUG9zaXRpb25Cb3VuZGFyeSk7CiAgICAgaWYgKHByZXZpb3VzV29yZEJyZWFrID09IHdvcmRC
cmVhaykKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogCi0gICAgSW5saW5lQm94
KiBib3hDb250YWluaW5nUHJldmlvdXNXb3JkQnJlYWs7Ci0gICAgd29yZEJyZWFrLmdldElubGlu
ZUJveEFuZE9mZnNldChib3hDb250YWluaW5nUHJldmlvdXNXb3JkQnJlYWssIG9mZnNldE9mV29y
ZEJyZWFrKTsKLSAgICBpZiAoYm94Q29udGFpbmluZ1ByZXZpb3VzV29yZEJyZWFrICE9IGJveCkK
LSAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwotICAgIHJldHVybiB3b3JkQnJlYWs7
CisgICAgcmV0dXJuIHBvc2l0aW9uSXNJbkJveCh3b3JkQnJlYWssIGJveCwgb2Zmc2V0T2ZXb3Jk
QnJlYWspID8gd29yZEJyZWFrIDogVmlzaWJsZVBvc2l0aW9uKCk7CiB9CiAKIHN0YXRpYyBWaXNp
YmxlUG9zaXRpb24gbGVmdG1vc3RQb3NpdGlvbkluUlRMQm94SW5MVFJCbG9jayhjb25zdCBJbmxp
bmVCb3gqIGJveCkKQEAgLTEyODcsMjUgKzEyOTIsMjAgQEAgc3RhdGljIFZpc2libGVQb3NpdGlv
biBsYXN0V29yZEJyZWFrSW5CbwogICAgIGlmIChib3VuZGFyeVBvc2l0aW9uLmlzTnVsbCgpKQog
ICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7ICAgICAgICAgICAgCiAKLSAgICBWaXNp
YmxlUG9zaXRpb24gd29yZEJyZWFrID0gbmV4dFdvcmRQb3NpdGlvbihib3VuZGFyeVBvc2l0aW9u
KTsKLSAgICBpZiAod29yZEJyZWFrICE9IGJvdW5kYXJ5UG9zaXRpb24pCi0gICAgICAgIHdvcmRC
cmVhayA9IHByZXZpb3VzV29yZFBvc2l0aW9uKHdvcmRCcmVhayk7CisgICAgVmlzaWJsZVBvc2l0
aW9uIHdvcmRCcmVhayA9IG5leHRCb3VuZGFyeShib3VuZGFyeVBvc2l0aW9uLCBuZXh0V29yZFBv
c2l0aW9uQm91bmRhcnkpOworICAgIGlmICh3b3JkQnJlYWsuaXNOdWxsKCkpCisgICAgICAgIHdv
cmRCcmVhayA9IGJvdW5kYXJ5UG9zaXRpb247CisgICAgZWxzZSBpZiAod29yZEJyZWFrICE9IGJv
dW5kYXJ5UG9zaXRpb24pCisgICAgICAgIHdvcmRCcmVhayA9IHByZXZpb3VzQm91bmRhcnkod29y
ZEJyZWFrLCBwcmV2aW91c1dvcmRQb3NpdGlvbkJvdW5kYXJ5KTsKIAotICAgIElubGluZUJveCog
Ym94T2ZXb3JkQnJlYWs7Ci0gICAgd29yZEJyZWFrLmdldElubGluZUJveEFuZE9mZnNldChib3hP
ZldvcmRCcmVhaywgb2Zmc2V0T2ZXb3JkQnJlYWspOwotICAgIGlmIChib3hPZldvcmRCcmVhayA9
PSBib3gpCi0gICAgICAgIHJldHVybiB3b3JkQnJlYWs7Ci0gICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbigpOyAgICAKKyAgICByZXR1cm4gcG9zaXRpb25Jc0luQm94KHdvcmRCcmVhaywgYm94LCBv
ZmZzZXRPZldvcmRCcmVhaykgPyB3b3JkQnJlYWsgOiBWaXNpYmxlUG9zaXRpb24oKTsgICAgCiB9
CiAKIHN0YXRpYyBib29sIHBvc2l0aW9uSXNWaXN1YWxseU9yZGVyZWRJbkJveEluQmxvY2tXaXRo
RGlmZmVyZW50RGlyZWN0aW9uYWxpdHkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB3b3JkQnJlYWss
IGNvbnN0IElubGluZUJveCogYm94LCBpbnQmIG9mZnNldE9mV29yZEJyZWFrKQogewogICAgIGlu
dCBwcmV2aW91c09mZnNldCA9IG9mZnNldE9mV29yZEJyZWFrOwotICAgIElubGluZUJveCogYm94
T2ZXb3JkQnJlYWs7Ci0gICAgd29yZEJyZWFrLmdldElubGluZUJveEFuZE9mZnNldChib3hPZldv
cmRCcmVhaywgb2Zmc2V0T2ZXb3JkQnJlYWspOwotICAgIGlmIChib3hPZldvcmRCcmVhayA9PSBi
b3ggJiYgKHByZXZpb3VzT2Zmc2V0ID09IGludmFsaWRPZmZzZXQgfHwgcHJldmlvdXNPZmZzZXQg
PCBvZmZzZXRPZldvcmRCcmVhaykpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gcG9zaXRpb25Jc0luQm94KHdvcmRCcmVhaywgYm94LCBvZmZzZXRP
ZldvcmRCcmVhaykKKyAgICAgICAgJiYgKHByZXZpb3VzT2Zmc2V0ID09IGludmFsaWRPZmZzZXQg
fHwgcHJldmlvdXNPZmZzZXQgPCBvZmZzZXRPZldvcmRCcmVhayk7CiB9CiAgICAgCiBzdGF0aWMg
VmlzaWJsZVBvc2l0aW9uIG5leHRXb3JkQnJlYWtJbkJveEluc2lkZUJsb2NrV2l0aERpZmZlcmVu
dERpcmVjdGlvbmFsaXR5KApAQCAtMTMyMSw3ICsxMzIxLDcgQEAgc3RhdGljIFZpc2libGVQb3Np
dGlvbiBuZXh0V29yZEJyZWFrSW5CbwogICAgIAogICAgIGJvb2wgaGFzU2VlbldvcmRCcmVha0lu
VGhpc0JveCA9IHByZXZpb3VzV29yZEJyZWFrLmlzTm90TnVsbCgpOwogICAgIFZpc2libGVQb3Np
dGlvbiB3b3JkQnJlYWsgPSBoYXNTZWVuV29yZEJyZWFrSW5UaGlzQm94ID8gcHJldmlvdXNXb3Jk
QnJlYWsgOiBQb3NpdGlvbihib3gtPnJlbmRlcmVyKCktPm5vZGUoKSwgYm94LT5jYXJldE1pbk9m
ZnNldCgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKLSAgICB3b3JkQnJl
YWsgPSBuZXh0V29yZFBvc2l0aW9uKHdvcmRCcmVhayk7CisgICAgd29yZEJyZWFrID0gbmV4dEJv
dW5kYXJ5KHdvcmRCcmVhaywgbmV4dFdvcmRQb3NpdGlvbkJvdW5kYXJ5KTsKICAgCiAgICAgLy8g
R2l2ZW4gUlRMIGJveCAiQUJDIERFRiIgZWl0aGVyIGZvbGxvd3MgYSBMVFIgYm94IG9yIGlzIHRo
ZSBmaXJzdCB2aXN1YWwgYm94IGluIGFuIExUUiBibG9jayBhcyBhbiBleGFtcGxlLAogICAgIC8v
IHRoZSB2aXN1YWwgZGlzcGxheSBvZiB0aGUgUlRMIGJveCBpczogIigwKUooMTApSSg5KUgoOCkg
KDcpRig2KUUoNSlEKDQpICgzKUMoMilCKDEpQSgxMSkiLApAQCAtMTUxMiwxNyArMTUxMiwyMCBA
QCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHJpZ2h0V29yZEJvdW5kYXJ5CiAgICAgCiBzdGF0aWMg
Ym9vbCBwb3NpdGlvbklzSW5zaWRlQm94KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgd29yZEJyZWFr
LCBjb25zdCBJbmxpbmVCb3gqIGJveCkKIHsKLSAgICBJbmxpbmVCb3gqIGJveE9mV29yZEJyZWFr
OwogICAgIGludCBvZmZzZXRPZldvcmRCcmVhazsKLSAgICB3b3JkQnJlYWsuZ2V0SW5saW5lQm94
QW5kT2Zmc2V0KGJveE9mV29yZEJyZWFrLCBvZmZzZXRPZldvcmRCcmVhayk7Ci0gICAgcmV0dXJu
IGJveCA9PSBib3hPZldvcmRCcmVhayAmJiBvZmZzZXRPZldvcmRCcmVhayAhPSBib3gtPmNhcmV0
TWF4T2Zmc2V0KCkgJiYgb2Zmc2V0T2ZXb3JkQnJlYWsgIT0gYm94LT5jYXJldE1pbk9mZnNldCgp
OworICAgIHJldHVybiBwb3NpdGlvbklzSW5Cb3god29yZEJyZWFrLCBib3gsIG9mZnNldE9mV29y
ZEJyZWFrKQorICAgICAgICAmJiBvZmZzZXRPZldvcmRCcmVhayAhPSBib3gtPmNhcmV0TWF4T2Zm
c2V0KCkgJiYgb2Zmc2V0T2ZXb3JkQnJlYWsgIT0gYm94LT5jYXJldE1pbk9mZnNldCgpOwogfQog
Ci1WaXNpYmxlUG9zaXRpb24gbGVmdFdvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHZpc2libGVQb3NpdGlvbikKK3N0YXRpYyBWaXNpYmxlUG9zaXRpb24gbGVmdFdvcmRQb3NpdGlv
bkFjcm9zc0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQog
ewogICAgIElubGluZUJveCogYm94OwogICAgIGludCBvZmZzZXQ7CiAgICAgdmlzaWJsZVBvc2l0
aW9uLmdldElubGluZUJveEFuZE9mZnNldChib3gsIG9mZnNldCk7CisKKyAgICBpZiAoIWJveCkK
KyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOworCiAgICAgVGV4dERpcmVjdGlvbiBi
bG9ja0RpcmVjdGlvbiA9IGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2sodmlzaWJsZVBvc2l0aW9u
LmRlZXBFcXVpdmFsZW50KCkpOwogICAgIAogICAgIC8vIEZJWE1FOiBJZiB0aGUgYm94J3MgZGly
ZWN0aW9uYWxpdHkgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUgZW5jbG9zaW5nIGJsb2NrLCB3
aGVuIHRoZSBvZmZzZXQgaXMgYXQgdGhlIGJveCBib3VuZGFyeQpAQCAtMTUzNyw5ICsxNTQwLDkg
QEAgVmlzaWJsZVBvc2l0aW9uIGxlZnRXb3JkUG9zaXRpb24oY29uc3QgVgogICAgIFZpc2libGVQ
b3NpdGlvbiB3b3JkQnJlYWs7CiAgICAgaWYgKGJsb2NrRGlyZWN0aW9uID09IExUUikgewogICAg
ICAgICBpZiAoYm94LT5kaXJlY3Rpb24oKSA9PSBibG9ja0RpcmVjdGlvbikKLSAgICAgICAgICAg
IHdvcmRCcmVhayA9IHByZXZpb3VzV29yZFBvc2l0aW9uKHZpc2libGVQb3NpdGlvbik7CisgICAg
ICAgICAgICB3b3JkQnJlYWsgPSBwcmV2aW91c0JvdW5kYXJ5KHZpc2libGVQb3NpdGlvbiwgcHJl
dmlvdXNXb3JkUG9zaXRpb25Cb3VuZGFyeSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHdv
cmRCcmVhayA9IG5leHRXb3JkUG9zaXRpb24odmlzaWJsZVBvc2l0aW9uKTsKKyAgICAgICAgICAg
IHdvcmRCcmVhayA9IG5leHRCb3VuZGFyeSh2aXNpYmxlUG9zaXRpb24sIG5leHRXb3JkUG9zaXRp
b25Cb3VuZGFyeSk7CiAgICAgfQogICAgIGlmICh3b3JkQnJlYWsuaXNOb3ROdWxsKCkgJiYgcG9z
aXRpb25Jc0luc2lkZUJveCh3b3JkQnJlYWssIGJveCkpCiAgICAgICAgIHJldHVybiB3b3JkQnJl
YWs7CkBAIC0xNTU1LDExICsxNTU4LDE1IEBAIFZpc2libGVQb3NpdGlvbiBsZWZ0V29yZFBvc2l0
aW9uKGNvbnN0IFYKICAgICByZXR1cm4gbGVmdFdvcmRCb3VuZGFyeShib3gtPnByZXZMZWFmQ2hp
bGQoKSwgaW52YWxpZE9mZnNldCwgYmxvY2tEaXJlY3Rpb24pOwogfQogCi1WaXNpYmxlUG9zaXRp
b24gcmlnaHRXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRp
b24pCitzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHJpZ2h0V29yZFBvc2l0aW9uQWNyb3NzQm91bmRh
cnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCiB7CiAgICAgSW5saW5l
Qm94KiBib3g7CiAgICAgaW50IG9mZnNldDsKICAgICB2aXNpYmxlUG9zaXRpb24uZ2V0SW5saW5l
Qm94QW5kT2Zmc2V0KGJveCwgb2Zmc2V0KTsKKworICAgIGlmICghYm94KQorICAgICAgICByZXR1
cm4gVmlzaWJsZVBvc2l0aW9uKCk7CisKICAgICBUZXh0RGlyZWN0aW9uIGJsb2NrRGlyZWN0aW9u
ID0gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jayh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxl
bnQoKSk7CiAgICAgCiAgICAgaWYgKG9mZnNldCA9PSBib3gtPmNhcmV0TGVmdG1vc3RPZmZzZXQo
KSkKQEAgLTE1NzAsOSArMTU3Nyw5IEBAIFZpc2libGVQb3NpdGlvbiByaWdodFdvcmRQb3NpdGlv
bihjb25zdCAKICAgICBWaXNpYmxlUG9zaXRpb24gd29yZEJyZWFrOwogICAgIGlmIChibG9ja0Rp
cmVjdGlvbiA9PSBSVEwpIHsKICAgICAgICAgaWYgKGJveC0+ZGlyZWN0aW9uKCkgPT0gYmxvY2tE
aXJlY3Rpb24pCi0gICAgICAgICAgICB3b3JkQnJlYWsgPSBwcmV2aW91c1dvcmRQb3NpdGlvbih2
aXNpYmxlUG9zaXRpb24pOworICAgICAgICAgICAgd29yZEJyZWFrID0gcHJldmlvdXNCb3VuZGFy
eSh2aXNpYmxlUG9zaXRpb24sIHByZXZpb3VzV29yZFBvc2l0aW9uQm91bmRhcnkpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB3b3JkQnJlYWsgPSBuZXh0V29yZFBvc2l0aW9uKHZpc2libGVQ
b3NpdGlvbik7CisgICAgICAgICAgICB3b3JkQnJlYWsgPSBuZXh0Qm91bmRhcnkodmlzaWJsZVBv
c2l0aW9uLCBuZXh0V29yZFBvc2l0aW9uQm91bmRhcnkpOwogICAgIH0KICAgICBpZiAod29yZEJy
ZWFrLmlzTm90TnVsbCgpICYmIHBvc2l0aW9uSXNJbnNpZGVCb3god29yZEJyZWFrLCBib3gpKQog
ICAgICAgICByZXR1cm4gd29yZEJyZWFrOwpAQCAtMTU4OCw0ICsxNTk1LDIyIEBAIFZpc2libGVQ
b3NpdGlvbiByaWdodFdvcmRQb3NpdGlvbihjb25zdCAKICAgICByZXR1cm4gcmlnaHRXb3JkQm91
bmRhcnkoYm94LT5uZXh0TGVhZkNoaWxkKCksIGludmFsaWRPZmZzZXQsIGJsb2NrRGlyZWN0aW9u
KTsKIH0KIAorVmlzaWJsZVBvc2l0aW9uIGxlZnRXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCit7CisgICAgaWYgKHZpc2libGVQb3NpdGlvbi5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOworCisgICAgVmlzaWJsZVBv
c2l0aW9uIGxlZnRXb3JkQnJlYWsgPSBsZWZ0V29yZFBvc2l0aW9uQWNyb3NzQm91bmRhcnkodmlz
aWJsZVBvc2l0aW9uKTsKKyAgICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uLmhvbm9yRWRpdGFibGVC
b3VuZGFyeUF0T3JCZWZvcmUobGVmdFdvcmRCcmVhayk7Cit9CisKK1Zpc2libGVQb3NpdGlvbiBy
aWdodFdvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikK
K3sKKyAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKCk7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gcmlnaHRXb3JkQnJlYWsgPSBy
aWdodFdvcmRQb3NpdGlvbkFjcm9zc0JvdW5kYXJ5KHZpc2libGVQb3NpdGlvbik7CisgICAgcmV0
dXJuIHZpc2libGVQb3NpdGlvbi5ob25vckVkaXRhYmxlQm91bmRhcnlBdE9yQmVmb3JlKHJpZ2h0
V29yZEJyZWFrKTsKK30KKwogfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gOTEwMzApCisrKyBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAxMS0wNy0x
NCAgWGlhb21laSBKaSAgPHhqaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRml4IDIgLS13ZWJr
aXQtdmlzdWFsLXdvcmQgY3Jhc2hlczoKKyAgICAgICAgLS13ZWJraXQtdmlzdWFsLXdvcmQgY3Jh
c2ggb24gbWl4ZWQgZWRpdGFiaWxpdHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYxOTc4CisKKyAgICAgICAgLS13ZWJraXQtdmlzdWFsLXdvcmQgY3Jh
c2hlcyAoVmlzaWJsZVBvc2l0aW9uLmdldElubGluZUJveEFuZE9mZnNldCBjb3VsZCByZXR1cm4g
bnVsbCBib3gpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02MjgxNAorCisgICAgICAgIEFkZCBhIHN0YW5kYWxvbmUgdGVzdCBmb3IgdGVzdGluZyBnZXRJ
bmxpbmVCb3hBbmRPZmZzZXQgcmV0dXJuaW5nIG51bGwgYm94LgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1i
eS13b3JkLXZpc3VhbGx5LW51bGwtYm94LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LW51bGwtYm94Lmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS1v
dGhlcnMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnkt
d29yZC12aXN1YWxseS1vdGhlcnMuaHRtbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Ta2lwcGVk
OgorCiAyMDExLTA3LTE0ICBWaW5jZW50IFNjaGVpYiAgPHNjaGVpYkBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgW2Nocm9taXVtXSB1cGRhdGVkIHRlc3QgZXhwZWN0YXRpb25zLgpJbmRleDogTGF5
b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LW51bGwtYm94
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlv
bi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktbnVsbC1ib3gtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5
LW51bGwtYm94LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorVGVzdCBQ
YXNzZWQKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12
aXN1YWxseS1udWxsLWJveC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcv
c2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS1udWxsLWJveC5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5
LW51bGwtYm94Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjQgQEAKKzxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvbW92ZS1ieS13b3JkLXZpc3VhbGx5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0PgorCitvbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICB0cnkgeworICAgICAgICBydW5U
ZXN0KCk7CisKKyAgICAgICAgLy8gVGVzdCBOVUxMIFZpc2libGVQb3NpdGlvbi4KKyAgICAgICAg
dmFyIHNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbigpOworICAgICAgICBzZWxlY3Rpb24uc2V0UG9z
aXRpb24oMCwgMCk7CisgICAgICAgIHNlbGVjdGlvbi5tb2RpZnkoIm1vdmUiLCAicmlnaHQiLCAi
LXdlYmtpdC12aXN1YWwtd29yZCIpOworICAgICAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCA9
ICJUZXN0IFBhc3NlZCI7CisgICAgfSBmaW5hbGx5IHsKKyAgICB9Cit9OworCitpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKKzwvc2NyaXB0PgorPGRpdiBpZD0idGVzdE1vdmVCeVdvcmQiPgorPG91dHB1dD48ZGl2
IGRpcj1sdHIgdGl0bGU9IjB8MCIgY2xhc3M9InRlc3RfbW92ZV9ieV93b3JkIj4KKzwvZGl2Pgor
PGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVj
dGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktb3RoZXJzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHkt
b3RoZXJzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gOTA3OTgpCisrKyBMYXlvdXRUZXN0cy9lZGl0
aW5nL3NlbGVjdGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktb3RoZXJzLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMjIxLDQgKzIyMSwxNCBAQCBNb3ZlIHJpZ2h0IGJ5IG9uZSB3b3Jk
CiAi5KSr5KGx5pqY5YCO5Y6YICAgIOeWguW0neeDtSAgICAgYWJjIGRlZiJbMCwgMSwgMiwgMywg
NCwgOSwgMTAsIDExLCAxNywgMjFdCiBNb3ZlIGxlZnQgYnkgb25lIHdvcmQKICLkpKvkobHmmpjl
gI7ljpggICAg55aC5bSd54O1ICAgICBhYmMgZGVmIlsyNCwgMjEsIDE3LCAxMSwgMTAsIDksIDQs
IDMsIDIsIDEsIDBdCitUZXN0IDQ0LCBMVFI6CitNb3ZlIHJpZ2h0IGJ5IG9uZSB3b3JkCisiYWJj
IGRlZiAiWzAsIDRdCitNb3ZlIGxlZnQgYnkgb25lIHdvcmQKKyIgaGlqIG9wcSJbOCwgNSwgMV0K
K1Rlc3QgNDUsIExUUjoKK01vdmUgcmlnaHQgYnkgb25lIHdvcmQKKyJcbjAwIlszXQorTW92ZSBs
ZWZ0IGJ5IG9uZSB3b3JkCisiXG4wMCJbMywgMV0KIApJbmRleDogTGF5b3V0VGVzdHMvZWRpdGlu
Zy9zZWxlY3Rpb24vbW92ZS1ieS13b3JkLXZpc3VhbGx5LW90aGVycy5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21vdmUtYnktd29yZC12aXN1YWxseS1v
dGhlcnMuaHRtbAkocmV2aXNpb24gOTA3OTgpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVj
dGlvbi9tb3ZlLWJ5LXdvcmQtdmlzdWFsbHktb3RoZXJzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTg4LDYgKzg4LDEyIEBAIHdoZXJlIGNoaWxkX25vZGVfaW5kZXggaXMgb3B0aW9uYWwsIGRlZmEK
IDwhLS0gdGVzdCB3b3JkcyBub3Qgc2VwYXJhdGVkIGJ5IHNwYWNlcyAtLT4KIDxkaXYgc3R5bGU9
IndoaXRlLXNwYWNlOnByZSIgY29udGVudGVkaXRhYmxlIGRpcj1sdHIgY2xhc3M9InRlc3RfbW92
ZV9ieV93b3JkIiB0aXRsZT0iMCAxIDIgMyA0IDkgMTAgMTEgMTcgMjF8MjQgMjEgMTcgMTEgMTAg
OSA0IDMgMiAxIDAiPuS6uuS4gOawp+WWneWkpyAgICDnrJHmiqznmoQgICAgIGFiYyBkZWY8L2Rp
dj4KIAorPCEtLSBtaXhlZCBlZGl0YWJpbGl0eSAtLT4KKzxkaXYgZGlyPWx0ciBjbGFzcz0idGVz
dF9tb3ZlX2J5X3dvcmQiIHRpdGxlPSIwIDR8OCA1IDEiPmFiYyBkZWYgPHNwYW4gY29udGVudGVk
aXRhYmxlPiBpbnNpZGUgc3BhbiA8L3NwYW4+IGhpaiBvcHE8L2Rpdj4KKworPGRpdiBkaXI9bHRy
IGNvbnRlbnRlZGl0YWJsZT48L2Rpdj4KKzAwPGJhc2UgZGlyPWx0ciBjbGFzcz0idGVzdF9tb3Zl
X2J5X3dvcmQiIHRpdGxlPSIzfDMgMSI+CisKIDwvZGl2PgogPHByZSBpZD0iY29uc29sZSI+PC9w
cmU+CiA8L2JvZHk+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQJKHJldmlzaW9uIDkwNzk4
KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAt
MjQ4Myw2ICsyNDgzLDcgQEAgZmFzdC91cmwvaWRuYTIwMDguaHRtbAogIyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTkyNjUKIGVkaXRpbmcvc2VsZWN0aW9uL21vdmUt
Ynktd29yZC12aXN1YWxseS1vdGhlcnMuaHRtbAogZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1ieS13
b3JkLXZpc3VhbGx5LXNpbmdsZS1zcGFjZS1zaWdsZS1saW5lLmh0bWwKK2VkaXRpbmcvc2VsZWN0
aW9uL21vdmUtYnktd29yZC12aXN1YWxseS1udWxsLWJveC5odG1sCiAKICMgW1F0XSBOZXcgdGVz
dHMgaW50cm9kdWNlZCBpbiByODQ3NDIgZmFpbAogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTkzMzQK
</data>
<flag name="review"
          id="95660"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>