<?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>57173</bug_id>
          
          <creation_ts>2011-03-26 23:12:38 -0700</creation_ts>
          <short_desc>REGRESSION (r79411): &quot;Check grammar with spelling&quot; context menu doesn&apos;t check as you type</short_desc>
          <delta_ts>2011-03-30 00:13:31 -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>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adele Peterson">adele</reporter>
          <assigned_to name="Adele Peterson">adele</assigned_to>
          <cc>abarth</cc>
    
    <cc>buildbot</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>374053</commentid>
    <comment_count>0</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2011-03-26 23:12:38 -0700</bug_when>
    <thetext>When I fixed some of the spelling context menu items to toggle correctly, I noticed that when the &quot;check grammar with spelling&quot; item is checked, it doesn&apos;t seem to do anything as you type.  You can still do grammar checking from when you bring up the panel though.

Tracked this down to:
http://trac.webkit.org/changeset/79411

The issue is that &quot;paragraph&quot; is used in places that should be using &quot;spellingParagraph&quot;.  I have a fix.

&lt;rdar://problem/9112694&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374058</commentid>
    <comment_count>1</comment_count>
      <attachid>87057</attachid>
    <who name="Adele Peterson">adele</who>
    <bug_when>2011-03-26 23:55:51 -0700</bug_when>
    <thetext>Created attachment 87057
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374059</commentid>
    <comment_count>2</comment_count>
      <attachid>87057</attachid>
    <who name="Adele Peterson">adele</who>
    <bug_when>2011-03-27 00:02:51 -0700</bug_when>
    <thetext>Comment on attachment 87057
patch

Need to add the new test to some Skipped lists.  I&apos;ll post a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374063</commentid>
    <comment_count>3</comment_count>
      <attachid>87058</attachid>
    <who name="Adele Peterson">adele</who>
    <bug_when>2011-03-27 00:20:24 -0700</bug_when>
    <thetext>Created attachment 87058
patch

Now with some Skipped entries for the new test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374071</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-27 00:58:17 -0700</bug_when>
    <thetext>Attachment 87057 did not build on win:
Build output: http://queues.webkit.org/results/8257922</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374072</commentid>
    <comment_count>5</comment_count>
      <attachid>87058</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-03-27 01:01:43 -0700</bug_when>
    <thetext>Comment on attachment 87058
patch

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

This seems fine.  I really like that you added DRT capability for this.  But this also could use one more round of cleanup.  I don&apos;t really need to see the new patch though, but I&apos;d be happy to review it if you&apos;re willing to post.

&gt; Source/WebCore/editing/Editor.cpp:2287
&gt; +        textChecker()-&gt;checkTextOfParagraph(grammarParagraph.textCharacters(), grammarParagraph.textLength(), checkingTypes, results);
&gt; +    else
&gt; +        textChecker()-&gt;checkTextOfParagraph(spellingParagraph.textCharacters(), spellingParagraph.textLength(), checkingTypes, results);

This seems like a helper functoin.  Why does this take Uchar* instead of a String&amp; variant?

&gt; Source/WebCore/editing/Editor.cpp:3578
&gt; +bool Editor::selectionStartHasMarkerFor(DocumentMarker::MarkerType type, int from, int length) const

I would have called this markerType instead of &quot;type&quot; to be less confusing.

&gt; Source/WebKit/mac/WebView/WebFrame.mm:1323
&gt; +    Frame* coreFrame = _private-&gt;coreFrame;
&gt; +    if (!coreFrame)
&gt; +        return NO;

Isn&apos;t this just a core(self) call?  Do we have any way to test this branch?

&gt; Source/WebKit/mac/WebView/WebFramePrivate.h:146
&gt; +- (BOOL)hasGrammarMarker:(int)from length:(int)length;

I&apos;m surprised these are ints (and not size_t, etc).  But you know the Mac API conventions better than I do these days!

&gt; Tools/DumpRenderTree/LayoutTestController.cpp:1966
&gt; +static JSValueRef hasGrammarMarkerCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)

It&apos;s a shame we don&apos;t autogen this stuff yet. :)

&gt; LayoutTests/editing/spelling/grammar.html:38
&gt; +    typeCharacterCommand(&apos;I&apos;);
&gt; +    typeCharacterCommand(&apos; &apos;);
&gt; +    typeCharacterCommand(&apos;h&apos;);
&gt; +    typeCharacterCommand(&apos;a&apos;);
&gt; +    typeCharacterCommand(&apos;v&apos;);
&gt; +    typeCharacterCommand(&apos;e&apos;);
&gt; +    typeCharacterCommand(&apos; &apos;);
&gt; +    typeCharacterCommand(&apos;a&apos;);
&gt; +    typeCharacterCommand(&apos; &apos;);
&gt; +    typeCharacterCommand(&apos;i&apos;);
&gt; +    typeCharacterCommand(&apos;s&apos;);
&gt; +    typeCharacterCommand(&apos;s&apos;);
&gt; +    typeCharacterCommand(&apos;u&apos;);
&gt; +    typeCharacterCommand(&apos;e&apos;);
&gt; +    typeCharacterCommand(&apos;.&apos;);

I&apos;m surprised we don&apos;t have a nicer way to do this?  You might consider making a local JS function &quot;typeString()&quot; which takes a string and does  for loop. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374084</commentid>
    <comment_count>6</comment_count>
      <attachid>87058</attachid>
    <who name="Adele Peterson">adele</who>
    <bug_when>2011-03-27 01:18:16 -0700</bug_when>
    <thetext>Comment on attachment 87058
patch

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

Thanks for the review!

&gt;&gt; Source/WebCore/editing/Editor.cpp:2287
&gt;&gt; +        textChecker()-&gt;checkTextOfParagraph(spellingParagraph.textCharacters(), spellingParagraph.textLength(), checkingTypes, results);
&gt; 
&gt; This seems like a helper functoin.  Why does this take Uchar* instead of a String&amp; variant?

Good question.  I&apos;m not sure.

&gt;&gt; Source/WebCore/editing/Editor.cpp:3578
&gt;&gt; +bool Editor::selectionStartHasMarkerFor(DocumentMarker::MarkerType type, int from, int length) const
&gt; 
&gt; I would have called this markerType instead of &quot;type&quot; to be less confusing.

ok - will change.

&gt;&gt; Source/WebKit/mac/WebView/WebFrame.mm:1323
&gt;&gt; +        return NO;
&gt; 
&gt; Isn&apos;t this just a core(self) call?  Do we have any way to test this branch?

I just made this match hasSpellingMarker, but I can change this to core(self).  I don&apos;t think we can test this branch, but I wouldn&apos;t want to remove it without knowing more about it.

&gt;&gt; Source/WebKit/mac/WebView/WebFramePrivate.h:146
&gt;&gt; +- (BOOL)hasGrammarMarker:(int)from length:(int)length;
&gt; 
&gt; I&apos;m surprised these are ints (and not size_t, etc).  But you know the Mac API conventions better than I do these days!

Again, I just made it match hasSpellingMarker.  You&apos;re probably right though.

&gt;&gt; LayoutTests/editing/spelling/grammar.html:38
&gt;&gt; +    typeCharacterCommand(&apos;.&apos;);
&gt; 
&gt; I&apos;m surprised we don&apos;t have a nicer way to do this?  You might consider making a local JS function &quot;typeString()&quot; which takes a string and does  for loop. :)

Yeah, I just realized this test works just as well calling the InsertText command directly.  I&apos;ll make that change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374529</commentid>
    <comment_count>7</comment_count>
      <attachid>87058</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2011-03-28 09:16:37 -0700</bug_when>
    <thetext>Comment on attachment 87058
patch

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

&gt;&gt;&gt; Source/WebCore/editing/Editor.cpp:2287
&gt;&gt;&gt; +        textChecker()-&gt;checkTextOfParagraph(spellingParagraph.textCharacters(), spellingParagraph.textLength(), checkingTypes, results);
&gt;&gt; 
&gt;&gt; This seems like a helper functoin.  Why does this take Uchar* instead of a String&amp; variant?
&gt; 
&gt; Good question.  I&apos;m not sure.

I guess this is to avoid constructing temporary string object for substring that we want to check.

&gt;&gt;&gt; LayoutTests/editing/spelling/grammar.html:38
&gt;&gt;&gt; +    typeCharacterCommand(&apos;.&apos;);
&gt;&gt; 
&gt;&gt; I&apos;m surprised we don&apos;t have a nicer way to do this?  You might consider making a local JS function &quot;typeString()&quot; which takes a string and does  for loop. :)
&gt; 
&gt; Yeah, I just realized this test works just as well calling the InsertText command directly.  I&apos;ll make that change.

If I remember correctly, using InsertText() will not trigger markMisspellingsAfterTypingToWord() after each word. But it&apos;s probably irrelevant here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374799</commentid>
    <comment_count>8</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2011-03-28 14:48:45 -0700</bug_when>
    <thetext>Committed revision 82159.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374811</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-28 14:58:57 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/82159 might have broken Windows Release (Build), Windows Debug (Build), and Chromium Linux Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374819</commentid>
    <comment_count>10</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2011-03-28 15:07:13 -0700</bug_when>
    <thetext>Follow up build fix in revision 82164.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374829</commentid>
    <comment_count>11</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2011-03-28 15:22:55 -0700</bug_when>
    <thetext>And... committed revision 82166.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376095</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-30 00:13:31 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/82159

Appears to have cause this test failure on Leopard:

http://build.webkit.org/results/Leopard%20Intel%20Release%20(Tests)/r82398%20(30362)/editing/spelling/grammar-pretty-diff.html

The newly added test appears to fail on Leopard.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87057</attachid>
            <date>2011-03-26 23:55:51 -0700</date>
            <delta_ts>2011-03-27 00:20:24 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch_3-26-11-grammar-2.txt</filename>
            <type>text/plain</type>
            <size>19436</size>
            <attacher name="Adele Peterson">adele</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyMDU4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDMtMjYgIEFkZWxlIFBl
dGVyc29uICA8YWRlbGVAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEZpeCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzkxMTI2OTQ+IFJFR1JF
U1NJT04gKHI3OTQxMSk6ICJDaGVjayBncmFtbWFyIHdpdGggc3BlbGxpbmciIGNvbnRleHQgbWVu
dSBkb2Vzbid0IGNoZWNrIGFzIHlvdSB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01NzE3MworCisgICAgICAgIFRlc3Q6IGVkaXRpbmcvc3BlbGxp
bmcvZ3JhbW1hci5odG1sCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjogQWRkIHN5bWJvbCBm
b3IgbmV3IHNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yIG1ldGhvZC4KKyAgICAgICAgKiBlZGl0
aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtBbGxNaXNzcGVs
bGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMpOiBFdmVyeSB1c2Ugb2YgcGFyYWdyYXBoIGlzIHNw
ZWNpZmljIHRvIHNwZWxsaW5nIG9yIGdyYW1tYXIsIAorICAgICAgICAgc28gdG8gYXZvaWQgY29u
ZnVzaW9uLCB3ZSBzaG91bGQgZXhwbGljaXRseSB1c2Ugc3BlbGxpbmdQYXJhZ3JhcGggb3IgZ3Jh
bW1hclBhcmFncmFwaC4gIEluIHRoZSBjYXNlIG9mIHRoaXMgYnVnLCAKKyAgICAgICAgIHdoZW4g
d2UncmUgY29uc2lkZXIgYW1iaWd1b3VzIGJvdW5kYXJ5IGNoYXJhY3RlcnMgKGNoYXJhY3RlcnMg
dGhhdCBjb3VsZCBpbmRpY2F0ZSB3b3JkIGJvdW5kYXJpZXMsIGJ1dCBhcmUgdXNlZCAKKyAgICAg
ICAgIGluIHRoZSBtaWRkbGUgb2Ygd29yZHMgdG9vLCBsaWtlIGFwb3N0cm9waGVzKSwgd2Ugc2hv
dWxkIHVzZSB0aGUgdXNlIHRoZSBzcGVsbGluZ1BhcmFncmFwaCBzaW5jZSB0aGUgc3BlbGxpbmdQ
YXJhZ3JhcGggCisgICAgICAgICBpcyB0aGUgb25seSBvbmUgb3BlcmF0ZWQgb24gd2hlbiB0aGlz
IGluZm9ybWF0aW9uIGlzIHVzZWQuCisgICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rp
b25TdGFydEhhc01hcmtlckZvcik6IENoYW5nZWQgZnJvbSBzZWxlY3Rpb25TdGFydEhhc1NwZWxs
aW5nTWFya2VyRm9yIHNvIGl0IGNhbiBjaGVjayBmb3IgZ3JhbW1hciBhcyB3ZWxsIGFzIHNwZWxs
aW5nLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisKIDIwMTEtMDMtMjYgIEplciBOb2Js
ZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXgu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gODIwMjEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMTIxOCw3ICsxMjE4LDcgQEAg
X19aTks3V2ViQ29yZTZFZGl0b3IxN3Nob3VsZERlbGV0ZVJhbmdlRQogX19aTks3V2ViQ29yZTZF
ZGl0b3IyM2dldENvbXBvc2l0aW9uU2VsZWN0aW9uRVJqUzFfCiBfX1pOSzdXZWJDb3JlNkVkaXRv
cjMwYXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50RXYKIF9fWk5LN1dlYkNvcmU2RWRpdG9y
MzFmb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0RXYKLV9fWk5LN1dlYkNvcmU2RWRpdG9y
MzRzZWxlY3Rpb25TdGFydEhhc1NwZWxsaW5nTWFya2VyRm9yRWlpCitfX1pOSzdXZWJDb3JlNkVk
aXRvcjI2c2VsZWN0aW9uU3RhcnRIYXNNYXJrZXJGb3JFTlNfMTREb2N1bWVudE1hcmtlcjEwTWFy
a2VyVHlwZUVpaQogX19aTks3V2ViQ29yZTZFZGl0b3IzN2Jhc2VXcml0aW5nRGlyZWN0aW9uRm9y
U2VsZWN0aW9uU3RhcnRFdgogX19aTks3V2ViQ29yZTZFZGl0b3I2Y2FuQ3V0RXYKIF9fWk5LN1dl
YkNvcmU2RWRpdG9yN0NvbW1hbmQxMWlzU3VwcG9ydGVkRXYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAJKHJldmlzaW9uIDgyMDIxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjM5LDcgKzIyMzksNiBAQCB2b2lkIEVkaXRv
cjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyCiAKICAgICBUZXh0Q2hlY2tpbmdQYXJhZ3Jh
cGggc3BlbGxpbmdQYXJhZ3JhcGgoc3BlbGxpbmdSYW5nZSk7CiAgICAgVGV4dENoZWNraW5nUGFy
YWdyYXBoIGdyYW1tYXJQYXJhZ3JhcGgoc2hvdWxkTWFya0dyYW1tYXIgPyBncmFtbWFyUmFuZ2Ug
OiAwKTsKLSAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgmIHBhcmFncmFwaCA9IHNob3VsZE1hcmtH
cmFtbWFyID8gZ3JhbW1hclBhcmFncmFwaCA6IHNwZWxsaW5nUGFyYWdyYXBoOyAKIAogICAgIGlm
IChzaG91bGRNYXJrR3JhbW1hciA/IChzcGVsbGluZ1BhcmFncmFwaC5pc1JhbmdlRW1wdHkoKSAm
JiBncmFtbWFyUGFyYWdyYXBoLmlzRW1wdHkoKSkgOiBzcGVsbGluZ1BhcmFncmFwaC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIyNDgsMTMgKzIyNDcsMTMgQEAgdm9pZCBFZGl0b3I6
Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcgogICAgICAgICBpZiAobV9mcmFtZS0+c2VsZWN0
aW9uKCktPnNlbGVjdGlvblR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlv
bikgewogICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBzYXZlIHRoZSBjYXJldCBwb3NpdGlvbiBz
byB3ZSBjYW4gcmVzdG9yZSBpdCBsYXRlciBpZiBuZWVkZWQKICAgICAgICAgICAgIFBvc2l0aW9u
IGNhcmV0UG9zaXRpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+ZW5kKCk7Ci0gICAgICAgICAg
ICBpbnQgb2Zmc2V0ID0gcGFyYWdyYXBoLm9mZnNldFRvKGNhcmV0UG9zaXRpb24sIGVjKTsKKyAg
ICAgICAgICAgIGludCBvZmZzZXQgPSBzcGVsbGluZ1BhcmFncmFwaC5vZmZzZXRUbyhjYXJldFBv
c2l0aW9uLCBlYyk7CiAgICAgICAgICAgICBpZiAoIWVjKSB7CiAgICAgICAgICAgICAgICAgc2Vs
ZWN0aW9uT2Zmc2V0ID0gb2Zmc2V0OwogICAgICAgICAgICAgICAgIHJlc3RvcmVTZWxlY3Rpb25B
ZnRlckNoYW5nZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbk9mZnNldCA+
IDAgJiYgKHNlbGVjdGlvbk9mZnNldCA+IHBhcmFncmFwaC50ZXh0TGVuZ3RoKCkgfHwgcGFyYWdy
YXBoLnRleHRDaGFyQXQoc2VsZWN0aW9uT2Zmc2V0IC0gMSkgPT0gbmV3bGluZUNoYXJhY3Rlcikp
CisgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbk9mZnNldCA+IDAgJiYgKHNlbGVjdGlvbk9m
ZnNldCA+IHNwZWxsaW5nUGFyYWdyYXBoLnRleHRMZW5ndGgoKSB8fCBzcGVsbGluZ1BhcmFncmFw
aC50ZXh0Q2hhckF0KHNlbGVjdGlvbk9mZnNldCAtIDEpID09IG5ld2xpbmVDaGFyYWN0ZXIpKQog
ICAgICAgICAgICAgICAgICAgICBhZGp1c3RTZWxlY3Rpb25Gb3JQYXJhZ3JhcGhCb3VuZGFyaWVz
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uT2Zmc2V0ID4gMCAmJiBzZWxl
Y3Rpb25PZmZzZXQgPD0gcGFyYWdyYXBoLnRleHRMZW5ndGgoKSAmJiBpc0FtYmlndW91c0JvdW5k
YXJ5Q2hhcmFjdGVyKHBhcmFncmFwaC50ZXh0Q2hhckF0KHNlbGVjdGlvbk9mZnNldCAtIDEpKSkK
KyAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uT2Zmc2V0ID4gMCAmJiBzZWxlY3Rpb25PZmZz
ZXQgPD0gc3BlbGxpbmdQYXJhZ3JhcGgudGV4dExlbmd0aCgpICYmIGlzQW1iaWd1b3VzQm91bmRh
cnlDaGFyYWN0ZXIoc3BlbGxpbmdQYXJhZ3JhcGgudGV4dENoYXJBdChzZWxlY3Rpb25PZmZzZXQg
LSAxKSkpCiAgICAgICAgICAgICAgICAgICAgIGFtYmlndW91c0JvdW5kYXJ5T2Zmc2V0ID0gc2Vs
ZWN0aW9uT2Zmc2V0IC0gMTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjI4Miw3ICsy
MjgxLDExIEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICAg
ICAgICAgIGNoZWNraW5nVHlwZXMgfD0gVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb247CiAjZW5k
aWYKICAgICB9Ci0gICAgdGV4dENoZWNrZXIoKS0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgocGFyYWdy
YXBoLnRleHRDaGFyYWN0ZXJzKCksIHBhcmFncmFwaC50ZXh0TGVuZ3RoKCksIGNoZWNraW5nVHlw
ZXMsIHJlc3VsdHMpOworICAgIGlmIChzaG91bGRNYXJrR3JhbW1hcikKKyAgICAgICAgdGV4dENo
ZWNrZXIoKS0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoZ3JhbW1hclBhcmFncmFwaC50ZXh0Q2hhcmFj
dGVycygpLCBncmFtbWFyUGFyYWdyYXBoLnRleHRMZW5ndGgoKSwgY2hlY2tpbmdUeXBlcywgcmVz
dWx0cyk7CisgICAgZWxzZQorICAgICAgICB0ZXh0Q2hlY2tlcigpLT5jaGVja1RleHRPZlBhcmFn
cmFwaChzcGVsbGluZ1BhcmFncmFwaC50ZXh0Q2hhcmFjdGVycygpLCBzcGVsbGluZ1BhcmFncmFw
aC50ZXh0TGVuZ3RoKCksIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMpOworICAgICAgICAKIAogI2lm
IFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKICAgICAvLyBJZiB0aGlzIGNoZWNraW5nIGlz
IG9ubHkgZm9yIHNob3dpbmcgY29ycmVjdGlvbiBwYW5lbCwgd2Ugc2hvdWxkbid0IGJvdGhlciB0
byBtYXJrIG1pc3NwZWxsaW5ncy4KQEAgLTIzNDEsNyArMjM0NCw3IEBAIHZvaWQgRWRpdG9yOjpt
YXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICAgICAgICAgIC8vIDIuIFRoZSByZXN1bHQg
ZG9lc24ndCBlbmQgYXQgYW4gYW1iaWd1b3VzIGJvdW5kYXJ5LgogICAgICAgICAgICAgLy8gICAg
KEZJWE1FOiB0aGlzIGlzIHJlcXVpcmVkIHVudGlsIDY4NTMwMjcgaXMgZml4ZWQgYW5kIHRleHQg
Y2hlY2tpbmcgY2FuIGRvIHRoaXMgZm9yIHVzCiAgICAgICAgICAgICBib29sIGRvUmVwbGFjZW1l
bnQgPSByZXBsYWNlbWVudExlbmd0aCA+IDAgJiYgIXJlc3VsdEVuZHNBdEFtYmlndW91c0JvdW5k
YXJ5OwotICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZVRvUmVwbGFjZSA9IHBhcmFncmFw
aC5zdWJyYW5nZShyZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoKTsKKyAgICAgICAgICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2UgPSBzcGVsbGluZ1BhcmFncmFwaC5zdWJyYW5nZShy
ZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoKTsKICAgICAgICAgICAgIFZpc2libGVTZWxlY3Rp
b24gc2VsZWN0aW9uVG9SZXBsYWNlKHJhbmdlVG9SZXBsYWNlLmdldCgpLCBET1dOU1RSRUFNKTsK
IAogICAgICAgICAgICAgLy8gYWRkaW5nIGxpbmtzIHNob3VsZCBiZSBkb25lIG9ubHkgaW1tZWRp
YXRlbHkgYWZ0ZXIgdGhleSBhcmUgdHlwZWQKQEAgLTI0MjYsNyArMjQyOSw3IEBAIHZvaWQgRWRp
dG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKIAogICAgICAgICAgICAgICAgIGlmIChy
ZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb24pIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gQWRkIGEgbWFya2VyIHNvIHRoYXQgY29ycmVjdGlvbnMgY2FuIGVhc2lseSBi
ZSB1bmRvbmUgYW5kIHdvbid0IGJlIHJlLWNvcnJlY3RlZC4KLSAgICAgICAgICAgICAgICAgICAg
UmVmUHRyPFJhbmdlPiByZXBsYWNlZFJhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExv
Y2F0aW9uLCByZXBsYWNlbWVudExlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxS
YW5nZT4gcmVwbGFjZWRSYW5nZSA9IHNwZWxsaW5nUGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExv
Y2F0aW9uLCByZXBsYWNlbWVudExlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2Vk
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2Vy
KHJlcGxhY2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCwgcmVwbGFj
ZWRTdHJpbmcpOwogICAgICAgICAgICAgICAgICAgICByZXBsYWNlZFJhbmdlLT5zdGFydENvbnRh
aW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLmdl
dCgpLCBEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvcik7CiAgICAgICAgICAgICAg
ICAgICAgIHJlcGxhY2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtl
cnMoKS0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVs
bENoZWNraW5nRXhlbXB0aW9uKTsKQEAgLTI0MzcsOSArMjQ0MCw5IEBAIHZvaWQgRWRpdG9yOjpt
YXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKIAogICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VkKSB7
CiAgICAgICAgIC8vIFJlc3RvcmUgdGhlIGNhcmV0IHBvc2l0aW9uIGlmIHdlIGhhdmUgbWFkZSBh
bnkgcmVwbGFjZW1lbnRzCi0gICAgICAgIHBhcmFncmFwaC5leHBhbmRSYW5nZVRvTmV4dEVuZCgp
OwotICAgICAgICBpZiAocmVzdG9yZVNlbGVjdGlvbkFmdGVyQ2hhbmdlICYmIHNlbGVjdGlvbk9m
ZnNldCA+PSAwICYmIHNlbGVjdGlvbk9mZnNldCA8PSBwYXJhZ3JhcGgucmFuZ2VMZW5ndGgoKSkg
ewotICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IHBhcmFncmFwaC5z
dWJyYW5nZSgwLCBzZWxlY3Rpb25PZmZzZXQpOworICAgICAgICBzcGVsbGluZ1BhcmFncmFwaC5l
eHBhbmRSYW5nZVRvTmV4dEVuZCgpOworICAgICAgICBpZiAocmVzdG9yZVNlbGVjdGlvbkFmdGVy
Q2hhbmdlICYmIHNlbGVjdGlvbk9mZnNldCA+PSAwICYmIHNlbGVjdGlvbk9mZnNldCA8PSBzcGVs
bGluZ1BhcmFncmFwaC5yYW5nZUxlbmd0aCgpKSB7CisgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+
IHNlbGVjdGlvblJhbmdlID0gc3BlbGxpbmdQYXJhZ3JhcGguc3VicmFuZ2UoMCwgc2VsZWN0aW9u
T2Zmc2V0KTsKICAgICAgICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5tb3ZlVG8oc2VsZWN0
aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwogICAgICAgICAgICAgaWYgKGFk
anVzdFNlbGVjdGlvbkZvclBhcmFncmFwaEJvdW5kYXJpZXMpCiAgICAgICAgICAgICAgICAgbV9m
cmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9u
TW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwpAQCAtMzU3Miw3
ICszNTc1LDcgQEAgc3RhdGljIE5vZGUqIGZpbmRGaXJzdE1hcmthYmxlKE5vZGUqIG5vZAogICAg
IHJldHVybiAwOwogfQogCi1ib29sIEVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNTcGVsbGluZ01h
cmtlckZvcihpbnQgZnJvbSwgaW50IGxlbmd0aCkgY29uc3QKK2Jvb2wgRWRpdG9yOjpzZWxlY3Rp
b25TdGFydEhhc01hcmtlckZvcihEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlLCBpbnQg
ZnJvbSwgaW50IGxlbmd0aCkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlID0gZmluZEZpcnN0TWFy
a2FibGUobV9mcmFtZS0+c2VsZWN0aW9uKCktPnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiAg
ICAgaWYgKCFub2RlKQpAQCAtMzU4Myw3ICszNTg2LDcgQEAgYm9vbCBFZGl0b3I6OnNlbGVjdGlv
blN0YXJ0SGFzU3BlbGxpbmdNYQogICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4gbWFya2VycyA9
IG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+bWFya2Vyc0Zvck5vZGUobm9kZSk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJzLnNpemUoKTsgKytpKSB7CiAgICAgICAg
IERvY3VtZW50TWFya2VyIG1hcmtlciA9IG1hcmtlcnNbaV07Ci0gICAgICAgIGlmIChtYXJrZXIu
c3RhcnRPZmZzZXQgPD0gc3RhcnRPZmZzZXQgJiYgZW5kT2Zmc2V0IDw9IG1hcmtlci5lbmRPZmZz
ZXQgJiYgbWFya2VyLnR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKQorICAgICAgICBp
ZiAobWFya2VyLnN0YXJ0T2Zmc2V0IDw9IHN0YXJ0T2Zmc2V0ICYmIGVuZE9mZnNldCA8PSBtYXJr
ZXIuZW5kT2Zmc2V0ICYmIG1hcmtlci50eXBlID09IHR5cGUpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gODIw
MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zODAsNyArMzgwLDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVhZFNlbGVjdGlvbkZyb21QYXN0
ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpOwogI2VuZGlmCiAKLSAgICBib29s
IHNlbGVjdGlvblN0YXJ0SGFzU3BlbGxpbmdNYXJrZXJGb3IoaW50IGZyb20sIGludCBsZW5ndGgp
IGNvbnN0OworICAgIGJvb2wgc2VsZWN0aW9uU3RhcnRIYXNNYXJrZXJGb3IoRG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGUsIGludCBmcm9tLCBpbnQgbGVuZ3RoKSBjb25zdDsKICAgICB2b2lkIHJl
bW92ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcmtlcnNGcm9tV29yZHNUb0JlRWRpdGVkKGJvb2wgZG9O
b3RSZW1vdmVJZlNlbGVjdGlvbkF0V29yZEJvdW5kYXJ5KTsKIAogcHJpdmF0ZToKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyMDU4KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDMtMjYgIEFkZWxlIFBl
dGVyc29uICA8YWRlbGVAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEZpeCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzkxMTI2OTQ+IFJFR1JF
U1NJT04gKHI3OTQxMSk6ICJDaGVjayBncmFtbWFyIHdpdGggc3BlbGxpbmciIGNvbnRleHQgbWVu
dSBkb2Vzbid0IGNoZWNrIGFzIHlvdSB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01NzE3MworCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5t
bToKKyAgICAgICAgKC1bV2ViRnJhbWUgaGFzU3BlbGxpbmdNYXJrZXI6bGVuZ3RoOl0pOiBDYWxs
IG5ldyBzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvciBtZXRob2QgaW5zdGVhZCBvZiBzZWxlY3Rp
b25TdGFydEhhc1NwZWxsaW5nTWFya2VyRm9yLgorICAgICAgICAoLVtXZWJGcmFtZSBoYXNHcmFt
bWFyTWFya2VyOmxlbmd0aDpdKTogQ2FsbCBuZXcgc2VsZWN0aW9uU3RhcnRIYXNNYXJrZXJGb3Ig
bWV0aG9kLgorICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWVQcml2YXRlLmg6IEFkZCBoYXNHcmFt
bWFyTWFya2VyIHNvIGdyYW1tYXIgbWFya2luZyBjYW4gYmUgdGVzdGVkLgorCiAyMDExLTAzLTI2
ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEVyaWMgQ2FybHNvbi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQko
cmV2aXNpb24gODIwMjEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzEzLDcgKzEzMTMsMTUgQEAgLSAoQk9PTCloYXNTcGVsbGlu
Z01hcmtlcjooaW50KWZyb20gbGVuZwogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBfcHJpdmF0ZS0+
Y29yZUZyYW1lOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gTk87Ci0gICAg
cmV0dXJuIGNvcmVGcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvblN0YXJ0SGFzU3BlbGxpbmdNYXJr
ZXJGb3IoZnJvbSwgbGVuZ3RoKTsKKyAgICByZXR1cm4gY29yZUZyYW1lLT5lZGl0b3IoKS0+c2Vs
ZWN0aW9uU3RhcnRIYXNNYXJrZXJGb3IoRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nLCBmcm9tLCBs
ZW5ndGgpOworfQorCistIChCT09MKWhhc0dyYW1tYXJNYXJrZXI6KGludClmcm9tIGxlbmd0aDoo
aW50KWxlbmd0aAoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1l
OworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm4gTk87CisgICAgcmV0dXJuIGNv
cmVGcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yKERvY3VtZW50TWFy
a2VyOjpHcmFtbWFyLCBmcm9tLCBsZW5ndGgpOwogfQogCiAtIChpZClhY2Nlc3NpYmlsaXR5Um9v
dApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZVByaXZhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lUHJpdmF0ZS5oCShy
ZXZpc2lvbiA4MjAyMSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVQcml2
YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Myw2ICsxNDMsOCBAQCBAaW50ZXJmYWNlIFdlYkZy
YW1lIChXZWJQcml2YXRlKQogLy8gUmV0dXJucyB3aGV0aGVyIHRoZXJlIGlzIGEgc3BlbGxpbmcg
bWFya2VyIGluIHRoZSBzcGVjaWZpZWQgcmFuZ2Ugb2YgdGhlIGZvY3VzZWQgbm9kZS4KIC0gKEJP
T0wpaGFzU3BlbGxpbmdNYXJrZXI6KGludClsb2NhdGlvbiBsZW5ndGg6KGludClsZW5ndGg7CiAK
Ky0gKEJPT0wpaGFzR3JhbW1hck1hcmtlcjooaW50KWZyb20gbGVuZ3RoOihpbnQpbGVuZ3RoOwor
CiAvLyBUaGUgdG9wIG9mIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUuCiAtIChpZClhY2Nlc3NpYmls
aXR5Um9vdDsKIApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0No
YW5nZUxvZwkocmV2aXNpb24gODIwNTgpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0wMy0yNiAgQWRlbGUgUGV0ZXJzb24gIDxhZGVsZUBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGVzdGluZyBzdXBwb3J0IGZvciA8cmRhcjovL3Byb2JsZW0vOTExMjY5ND4gUkVHUkVTU0lP
TiAocjc5NDExKTogIkNoZWNrIGdyYW1tYXIgd2l0aCBzcGVsbGluZyIgY29udGV4dCBtZW51IGRv
ZXNuJ3QgY2hlY2sgYXMgeW91IHR5cGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU3MTczCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9MYXlvdXRU
ZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChoYXNHcmFtbWFyTWFya2VyQ2FsbGJhY2spOiBB
ZGRlZC4KKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMpOiBB
ZGRlZCBjYXNlIGZvciBoYXNHcmFtbWFyTWFya2VyLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L0xheW91dFRlc3RDb250cm9sbGVyLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0R1
bXBSZW5kZXJUcmVlLm1tOiAoY3JlYXRlV2ViVmlld0FuZE9mZnNjcmVlbldpbmRvdyk6IENhbGwg
c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMv
TGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW06IChMYXlvdXRUZXN0Q29udHJvbGxlcjo6aGFzR3Jh
bW1hck1hcmtlcik6IEFkZGVkLiBDYWxsIG5ldyBoYXNHcmFtbWFyTWFya2VyIG1ldGhvZC4KKwog
MjAxMS0wMy0yNiAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmVydCBpbmFkdmVydGFudGx5IGNvbW1pdHRlZCBjaGFuZ2VzLgpJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gODIwMjEp
CisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5NjMsNiArMTk2MywxOSBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBoYXNTcGVs
bGluZ01hcmtlckNhbGxiCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCBv
ayk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIGhhc0dyYW1tYXJNYXJrZXJDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgIT0gMikK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIAorICAg
IGludCBmcm9tID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgMCk7Cisg
ICAgaW50IGxlbmd0aCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMV0sIDAp
OworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAg
IGJvb2wgb2sgPSBjb250cm9sbGVyLT5oYXNHcmFtbWFyTWFya2VyKGZyb20sIGxlbmd0aCk7Cisg
ICAgCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCBvayk7Cit9CisKIHN0
YXRpYyBKU1ZhbHVlUmVmIG1hcmtlclRleHRGb3JMaXN0SXRlbUNhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKIHsKICAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKQEAgLTIxNjMsNiArMjE3Niw3IEBAIEpTU3RhdGljRnVuY3Rpb24qIExheW91dFRlc3RD
b250cm9sbGVyOjoKICAgICAgICAgeyAib3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlIiwgb3Jp
Z2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZ3Jh
bnREZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbiIsIGdyYW50RGVza3RvcE5vdGlmaWNhdGlv
blBlcm1pc3Npb25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LCAKICAgICAgICAgeyAiaGFzU3BlbGxpbmdNYXJr
ZXIiLCBoYXNTcGVsbGluZ01hcmtlckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImhhc0dy
YW1tYXJNYXJrZXIiLCBoYXNHcmFtbWFyTWFya2VyQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAg
eyAiaXNDb21tYW5kRW5hYmxlZCIsIGlzQ29tbWFuZEVuYWJsZWRDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAog
ICAgICAgICB7ICJpc1BhZ2VCb3hWaXNpYmxlIiwgaXNQYWdlQm94VmlzaWJsZUNhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCiAgICAgICAgIHsgImtlZXBXZWJIaXN0b3J5Iiwga2VlcFdlYkhpc3RvcnlDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJv
bGxlci5oCShyZXZpc2lvbiA4MjAyMSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRl
c3RDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5NSw2ICsyOTUsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBhYm9ydE1vZGFsKCk7CiAKICAgICBib29sIGhhc1NwZWxsaW5nTWFya2VyKGlu
dCBmcm9tLCBpbnQgbGVuZ3RoKTsKKyAgICBib29sIGhhc0dyYW1tYXJNYXJrZXIoaW50IGZyb20s
IGludCBsZW5ndGgpOwogCiAgICAgdm9pZCBkdW1wQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0KGlu
dCBkZXZpY2VEUEksIGludCBkZXZpY2VXaWR0aCwgaW50IGRldmljZUhlaWdodCwgaW50IGF2YWls
YWJsZVdpZHRoLCBpbnQgYXZhaWxhYmxlSGVpZ2h0KTsKIApJbmRleDogVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQkocmV2aXNpb24gODIwMjEpCisrKyBUb29scy9E
dW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTMw
Niw2ICszMDYsNyBAQCBXZWJWaWV3ICpjcmVhdGVXZWJWaWV3QW5kT2Zmc2NyZWVuV2luZG93CiAg
ICAgW1dlYlZpZXcgcmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsOkAiZmVlZHNlYXJjaCJdOwogICAg
IAogICAgIFt3ZWJWaWV3IHNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZDpZRVNdOwor
ICAgIFt3ZWJWaWV3IHNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQ6WUVTXTsKICAgICAKICAgICAv
LyBUbyBtYWtlIHRoaW5ncyBsaWtlIGNlcnRhaW4gTlNWaWV3cywgZHJhZ2dpbmcsIGFuZCBwbHVn
LWlucyB3b3JrLCBwdXQgdGhlIFdlYlZpZXcgYSB3aW5kb3csIGJ1dCBwdXQgaXQgb2ZmLXNjcmVl
biBzbyB5b3UgZG9uJ3Qgc2VlIGl0LgogICAgIC8vIFB1dCBpdCBhdCAtMTAwMDAsIC0xMDAwMCBp
biAiZmxpcHBlZCBjb29yZGluYXRlcyIsIHNpbmNlIFdlYkNvcmUgYW5kIHRoZSBET00gdXNlIGZs
aXBwZWQgY29vcmRpbmF0ZXMuCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0
VGVzdENvbnRyb2xsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCShyZXZpc2lvbiA4MjAyMSkKKysrIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMTA3Nyw2ICsxMDc3LDEyIEBAIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omhh
c1NwZWxsaW5nTWEKIHsKICAgICByZXR1cm4gW21haW5GcmFtZSBoYXNTcGVsbGluZ01hcmtlcjpm
cm9tIGxlbmd0aDpsZW5ndGhdOwogfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjpoYXNH
cmFtbWFyTWFya2VyKGludCBmcm9tLCBpbnQgbGVuZ3RoKQoreworICAgIHJldHVybiBbbWFpbkZy
YW1lIGhhc0dyYW1tYXJNYXJrZXI6ZnJvbSBsZW5ndGg6bGVuZ3RoXTsKK30KKwogdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydChpbnQgLypkZXZp
Y2VEUEkqLywgaW50IC8qZGV2aWNlV2lkdGgqLywgaW50IC8qZGV2aWNlSGVpZ2h0Ki8sIGludCAv
KmF2YWlsYWJsZVdpZHRoKi8sIGludCAvKmF2YWlsYWJsZUhlaWdodCovKQogewogCkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiA4MjA1OCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTAzLTI2ICBBZGVsZSBQZXRlcnNvbiAgPGFkZWxlQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUZXN0IGZvciA8cmRhcjovL3Byb2JsZW0vOTExMjY5ND4gUkVHUkVTU0lPTiAocjc5NDExKTog
IkNoZWNrIGdyYW1tYXIgd2l0aCBzcGVsbGluZyIgY29udGV4dCBtZW51IGRvZXNuJ3QgY2hlY2sg
YXMgeW91IHR5cGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU3MTczCisKKyAgICAgICAgKiBlZGl0aW5nL3NwZWxsaW5nL2dyYW1tYXItZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3NwZWxsaW5nL2dyYW1tYXIuaHRtbDogQWRk
ZWQuCisKIDIwMTEtMDMtMjYgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBNYWNpZWogU3RhY2hvd2lhay4KSW5kZXg6IExheW91dFRlc3RzL2Vk
aXRpbmcvc3BlbGxpbmcvZ3JhbW1hci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZWRpdGluZy9zcGVsbGluZy9ncmFtbWFyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvZ3JhbW1hci1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorWW91IHNob3VsZCBzZWUgdGhlIHRleHQgJ0kgaGF2
ZSBhIGlzc3VlJy4gJ2EnIHNob3VsZCBoYXZlIGEgZ3JhbW1hciBzdWdnZXN0aW9uIG1hcmtpbmcu
CitQQVNTCisKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvZ3JhbW1hci5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvZ3JhbW1hci5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9ncmFtbWFyLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjMgQEAKKzxodG1sPiAKKzxoZWFkPgorCis8c3R5
bGU+CisuZWRpdGluZyB7IAorICAgIGJvcmRlcjogMnB4IHNvbGlkIHJlZDsgCisgICAgcGFkZGlu
ZzogMTJweDsgCisgICAgZm9udC1zaXplOiAyNHB4OyAKK30KKzwvc3R5bGU+Cis8c2NyaXB0IHNy
Yz0uLi9lZGl0aW5nLmpzIGxhbmd1YWdlPSJKYXZhU2NyaXB0IiB0eXBlPSJ0ZXh0L0phdmFTY3Jp
cHQiID48L3NjcmlwdD4KKworPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhtc2cpIHsKKyAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVySFRNTCArPSAobXNnICsgIlxuIik7
Cit9CisKK2Z1bmN0aW9uIGVkaXRpbmdUZXN0KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
KworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb290IikuZm9jdXMoKTsKKyAgICAKKyAg
ICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnSScpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCcg
Jyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ2gnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29t
bWFuZCgnYScpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCd2Jyk7CisgICAgdHlwZUNoYXJh
Y3RlckNvbW1hbmQoJ2UnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnICcpOworICAgIHR5
cGVDaGFyYWN0ZXJDb21tYW5kKCdhJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJyAnKTsK
KyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnaScpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5k
KCdzJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ3MnKTsKKyAgICB0eXBlQ2hhcmFjdGVy
Q29tbWFuZCgndScpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCdlJyk7CisgICAgdHlwZUNo
YXJhY3RlckNvbW1hbmQoJy4nKTsKKyAgICAKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7CisgICAgICAgIGlmIChsYXlvdXRUZXN0Q29udHJvbGxlci5oYXNHcmFtbWFyTWFy
a2VyKDcsIDEpKQorICAgICAgICAgICAgbG9nKCJQQVNTIik7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGxvZygiRkFJTCIpOworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm9v
dCIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgICAgfQorfQorCis8L3NjcmlwdD4KKworPHRp
dGxlPkVkaXRpbmcgVGVzdDwvdGl0bGU+IAorPC9oZWFkPiAKKzxib2R5PgorPGRpdj5Zb3Ugc2hv
dWxkIHNlZSB0aGUgdGV4dCAnSSBoYXZlIGEgaXNzdWUnLiAnYScgc2hvdWxkIGhhdmUgYSBncmFt
bWFyIHN1Z2dlc3Rpb24gbWFya2luZy48L2Rpdj4KKzxkaXYgY29udGVudGVkaXRhYmxlIGlkPSJy
b290IiBjbGFzcz0iZWRpdGluZyI+Cis8L2Rpdj4KKzxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgor
PHNjcmlwdD4KK2VkaXRpbmdUZXN0KCk7Cis8L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87058</attachid>
            <date>2011-03-27 00:20:24 -0700</date>
            <delta_ts>2011-03-28 09:16:37 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch_3-26-11-grammar-3.txt</filename>
            <type>text/plain</type>
            <size>21903</size>
            <attacher name="Adele Peterson">adele</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyMDU4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDMtMjYgIEFkZWxlIFBl
dGVyc29uICA8YWRlbGVAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEZpeCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzkxMTI2OTQ+IFJFR1JF
U1NJT04gKHI3OTQxMSk6ICJDaGVjayBncmFtbWFyIHdpdGggc3BlbGxpbmciIGNvbnRleHQgbWVu
dSBkb2Vzbid0IGNoZWNrIGFzIHlvdSB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01NzE3MworCisgICAgICAgIFRlc3Q6IGVkaXRpbmcvc3BlbGxp
bmcvZ3JhbW1hci5odG1sCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjogQWRkIHN5bWJvbCBm
b3IgbmV3IHNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yIG1ldGhvZC4KKyAgICAgICAgKiBlZGl0
aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtBbGxNaXNzcGVs
bGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMpOiBFdmVyeSB1c2Ugb2YgcGFyYWdyYXBoIGlzIHNw
ZWNpZmljIHRvIHNwZWxsaW5nIG9yIGdyYW1tYXIsIAorICAgICAgICAgc28gdG8gYXZvaWQgY29u
ZnVzaW9uLCB3ZSBzaG91bGQgZXhwbGljaXRseSB1c2Ugc3BlbGxpbmdQYXJhZ3JhcGggb3IgZ3Jh
bW1hclBhcmFncmFwaC4gIEluIHRoZSBjYXNlIG9mIHRoaXMgYnVnLCAKKyAgICAgICAgIHdoZW4g
d2UncmUgY29uc2lkZXIgYW1iaWd1b3VzIGJvdW5kYXJ5IGNoYXJhY3RlcnMgKGNoYXJhY3RlcnMg
dGhhdCBjb3VsZCBpbmRpY2F0ZSB3b3JkIGJvdW5kYXJpZXMsIGJ1dCBhcmUgdXNlZCAKKyAgICAg
ICAgIGluIHRoZSBtaWRkbGUgb2Ygd29yZHMgdG9vLCBsaWtlIGFwb3N0cm9waGVzKSwgd2Ugc2hv
dWxkIHVzZSB0aGUgdXNlIHRoZSBzcGVsbGluZ1BhcmFncmFwaCBzaW5jZSB0aGUgc3BlbGxpbmdQ
YXJhZ3JhcGggCisgICAgICAgICBpcyB0aGUgb25seSBvbmUgb3BlcmF0ZWQgb24gd2hlbiB0aGlz
IGluZm9ybWF0aW9uIGlzIHVzZWQuCisgICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxlY3Rp
b25TdGFydEhhc01hcmtlckZvcik6IENoYW5nZWQgZnJvbSBzZWxlY3Rpb25TdGFydEhhc1NwZWxs
aW5nTWFya2VyRm9yIHNvIGl0IGNhbiBjaGVjayBmb3IgZ3JhbW1hciBhcyB3ZWxsIGFzIHNwZWxs
aW5nLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisKIDIwMTEtMDMtMjYgIEplciBOb2Js
ZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXgu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gODIwMjEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMTIxOCw3ICsxMjE4LDcgQEAg
X19aTks3V2ViQ29yZTZFZGl0b3IxN3Nob3VsZERlbGV0ZVJhbmdlRQogX19aTks3V2ViQ29yZTZF
ZGl0b3IyM2dldENvbXBvc2l0aW9uU2VsZWN0aW9uRVJqUzFfCiBfX1pOSzdXZWJDb3JlNkVkaXRv
cjMwYXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50RXYKIF9fWk5LN1dlYkNvcmU2RWRpdG9y
MzFmb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0RXYKLV9fWk5LN1dlYkNvcmU2RWRpdG9y
MzRzZWxlY3Rpb25TdGFydEhhc1NwZWxsaW5nTWFya2VyRm9yRWlpCitfX1pOSzdXZWJDb3JlNkVk
aXRvcjI2c2VsZWN0aW9uU3RhcnRIYXNNYXJrZXJGb3JFTlNfMTREb2N1bWVudE1hcmtlcjEwTWFy
a2VyVHlwZUVpaQogX19aTks3V2ViQ29yZTZFZGl0b3IzN2Jhc2VXcml0aW5nRGlyZWN0aW9uRm9y
U2VsZWN0aW9uU3RhcnRFdgogX19aTks3V2ViQ29yZTZFZGl0b3I2Y2FuQ3V0RXYKIF9fWk5LN1dl
YkNvcmU2RWRpdG9yN0NvbW1hbmQxMWlzU3VwcG9ydGVkRXYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAJKHJldmlzaW9uIDgyMDIxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjM5LDcgKzIyMzksNiBAQCB2b2lkIEVkaXRv
cjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyCiAKICAgICBUZXh0Q2hlY2tpbmdQYXJhZ3Jh
cGggc3BlbGxpbmdQYXJhZ3JhcGgoc3BlbGxpbmdSYW5nZSk7CiAgICAgVGV4dENoZWNraW5nUGFy
YWdyYXBoIGdyYW1tYXJQYXJhZ3JhcGgoc2hvdWxkTWFya0dyYW1tYXIgPyBncmFtbWFyUmFuZ2Ug
OiAwKTsKLSAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgmIHBhcmFncmFwaCA9IHNob3VsZE1hcmtH
cmFtbWFyID8gZ3JhbW1hclBhcmFncmFwaCA6IHNwZWxsaW5nUGFyYWdyYXBoOyAKIAogICAgIGlm
IChzaG91bGRNYXJrR3JhbW1hciA/IChzcGVsbGluZ1BhcmFncmFwaC5pc1JhbmdlRW1wdHkoKSAm
JiBncmFtbWFyUGFyYWdyYXBoLmlzRW1wdHkoKSkgOiBzcGVsbGluZ1BhcmFncmFwaC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIyNDgsMTMgKzIyNDcsMTMgQEAgdm9pZCBFZGl0b3I6
Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcgogICAgICAgICBpZiAobV9mcmFtZS0+c2VsZWN0
aW9uKCktPnNlbGVjdGlvblR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlv
bikgewogICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBzYXZlIHRoZSBjYXJldCBwb3NpdGlvbiBz
byB3ZSBjYW4gcmVzdG9yZSBpdCBsYXRlciBpZiBuZWVkZWQKICAgICAgICAgICAgIFBvc2l0aW9u
IGNhcmV0UG9zaXRpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+ZW5kKCk7Ci0gICAgICAgICAg
ICBpbnQgb2Zmc2V0ID0gcGFyYWdyYXBoLm9mZnNldFRvKGNhcmV0UG9zaXRpb24sIGVjKTsKKyAg
ICAgICAgICAgIGludCBvZmZzZXQgPSBzcGVsbGluZ1BhcmFncmFwaC5vZmZzZXRUbyhjYXJldFBv
c2l0aW9uLCBlYyk7CiAgICAgICAgICAgICBpZiAoIWVjKSB7CiAgICAgICAgICAgICAgICAgc2Vs
ZWN0aW9uT2Zmc2V0ID0gb2Zmc2V0OwogICAgICAgICAgICAgICAgIHJlc3RvcmVTZWxlY3Rpb25B
ZnRlckNoYW5nZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbk9mZnNldCA+
IDAgJiYgKHNlbGVjdGlvbk9mZnNldCA+IHBhcmFncmFwaC50ZXh0TGVuZ3RoKCkgfHwgcGFyYWdy
YXBoLnRleHRDaGFyQXQoc2VsZWN0aW9uT2Zmc2V0IC0gMSkgPT0gbmV3bGluZUNoYXJhY3Rlcikp
CisgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbk9mZnNldCA+IDAgJiYgKHNlbGVjdGlvbk9m
ZnNldCA+IHNwZWxsaW5nUGFyYWdyYXBoLnRleHRMZW5ndGgoKSB8fCBzcGVsbGluZ1BhcmFncmFw
aC50ZXh0Q2hhckF0KHNlbGVjdGlvbk9mZnNldCAtIDEpID09IG5ld2xpbmVDaGFyYWN0ZXIpKQog
ICAgICAgICAgICAgICAgICAgICBhZGp1c3RTZWxlY3Rpb25Gb3JQYXJhZ3JhcGhCb3VuZGFyaWVz
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uT2Zmc2V0ID4gMCAmJiBzZWxl
Y3Rpb25PZmZzZXQgPD0gcGFyYWdyYXBoLnRleHRMZW5ndGgoKSAmJiBpc0FtYmlndW91c0JvdW5k
YXJ5Q2hhcmFjdGVyKHBhcmFncmFwaC50ZXh0Q2hhckF0KHNlbGVjdGlvbk9mZnNldCAtIDEpKSkK
KyAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uT2Zmc2V0ID4gMCAmJiBzZWxlY3Rpb25PZmZz
ZXQgPD0gc3BlbGxpbmdQYXJhZ3JhcGgudGV4dExlbmd0aCgpICYmIGlzQW1iaWd1b3VzQm91bmRh
cnlDaGFyYWN0ZXIoc3BlbGxpbmdQYXJhZ3JhcGgudGV4dENoYXJBdChzZWxlY3Rpb25PZmZzZXQg
LSAxKSkpCiAgICAgICAgICAgICAgICAgICAgIGFtYmlndW91c0JvdW5kYXJ5T2Zmc2V0ID0gc2Vs
ZWN0aW9uT2Zmc2V0IC0gMTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjI4Miw3ICsy
MjgxLDExIEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICAg
ICAgICAgIGNoZWNraW5nVHlwZXMgfD0gVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb247CiAjZW5k
aWYKICAgICB9Ci0gICAgdGV4dENoZWNrZXIoKS0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgocGFyYWdy
YXBoLnRleHRDaGFyYWN0ZXJzKCksIHBhcmFncmFwaC50ZXh0TGVuZ3RoKCksIGNoZWNraW5nVHlw
ZXMsIHJlc3VsdHMpOworICAgIGlmIChzaG91bGRNYXJrR3JhbW1hcikKKyAgICAgICAgdGV4dENo
ZWNrZXIoKS0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoZ3JhbW1hclBhcmFncmFwaC50ZXh0Q2hhcmFj
dGVycygpLCBncmFtbWFyUGFyYWdyYXBoLnRleHRMZW5ndGgoKSwgY2hlY2tpbmdUeXBlcywgcmVz
dWx0cyk7CisgICAgZWxzZQorICAgICAgICB0ZXh0Q2hlY2tlcigpLT5jaGVja1RleHRPZlBhcmFn
cmFwaChzcGVsbGluZ1BhcmFncmFwaC50ZXh0Q2hhcmFjdGVycygpLCBzcGVsbGluZ1BhcmFncmFw
aC50ZXh0TGVuZ3RoKCksIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMpOworICAgICAgICAKIAogI2lm
IFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKICAgICAvLyBJZiB0aGlzIGNoZWNraW5nIGlz
IG9ubHkgZm9yIHNob3dpbmcgY29ycmVjdGlvbiBwYW5lbCwgd2Ugc2hvdWxkbid0IGJvdGhlciB0
byBtYXJrIG1pc3NwZWxsaW5ncy4KQEAgLTIzNDEsNyArMjM0NCw3IEBAIHZvaWQgRWRpdG9yOjpt
YXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICAgICAgICAgIC8vIDIuIFRoZSByZXN1bHQg
ZG9lc24ndCBlbmQgYXQgYW4gYW1iaWd1b3VzIGJvdW5kYXJ5LgogICAgICAgICAgICAgLy8gICAg
KEZJWE1FOiB0aGlzIGlzIHJlcXVpcmVkIHVudGlsIDY4NTMwMjcgaXMgZml4ZWQgYW5kIHRleHQg
Y2hlY2tpbmcgY2FuIGRvIHRoaXMgZm9yIHVzCiAgICAgICAgICAgICBib29sIGRvUmVwbGFjZW1l
bnQgPSByZXBsYWNlbWVudExlbmd0aCA+IDAgJiYgIXJlc3VsdEVuZHNBdEFtYmlndW91c0JvdW5k
YXJ5OwotICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZVRvUmVwbGFjZSA9IHBhcmFncmFw
aC5zdWJyYW5nZShyZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoKTsKKyAgICAgICAgICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2UgPSBzcGVsbGluZ1BhcmFncmFwaC5zdWJyYW5nZShy
ZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoKTsKICAgICAgICAgICAgIFZpc2libGVTZWxlY3Rp
b24gc2VsZWN0aW9uVG9SZXBsYWNlKHJhbmdlVG9SZXBsYWNlLmdldCgpLCBET1dOU1RSRUFNKTsK
IAogICAgICAgICAgICAgLy8gYWRkaW5nIGxpbmtzIHNob3VsZCBiZSBkb25lIG9ubHkgaW1tZWRp
YXRlbHkgYWZ0ZXIgdGhleSBhcmUgdHlwZWQKQEAgLTI0MjYsNyArMjQyOSw3IEBAIHZvaWQgRWRp
dG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKIAogICAgICAgICAgICAgICAgIGlmIChy
ZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb24pIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gQWRkIGEgbWFya2VyIHNvIHRoYXQgY29ycmVjdGlvbnMgY2FuIGVhc2lseSBi
ZSB1bmRvbmUgYW5kIHdvbid0IGJlIHJlLWNvcnJlY3RlZC4KLSAgICAgICAgICAgICAgICAgICAg
UmVmUHRyPFJhbmdlPiByZXBsYWNlZFJhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExv
Y2F0aW9uLCByZXBsYWNlbWVudExlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxS
YW5nZT4gcmVwbGFjZWRSYW5nZSA9IHNwZWxsaW5nUGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExv
Y2F0aW9uLCByZXBsYWNlbWVudExlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2Vk
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2Vy
KHJlcGxhY2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCwgcmVwbGFj
ZWRTdHJpbmcpOwogICAgICAgICAgICAgICAgICAgICByZXBsYWNlZFJhbmdlLT5zdGFydENvbnRh
aW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihyZXBsYWNlZFJhbmdlLmdl
dCgpLCBEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvcik7CiAgICAgICAgICAgICAg
ICAgICAgIHJlcGxhY2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtl
cnMoKS0+YWRkTWFya2VyKHJlcGxhY2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVs
bENoZWNraW5nRXhlbXB0aW9uKTsKQEAgLTI0MzcsOSArMjQ0MCw5IEBAIHZvaWQgRWRpdG9yOjpt
YXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKIAogICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VkKSB7
CiAgICAgICAgIC8vIFJlc3RvcmUgdGhlIGNhcmV0IHBvc2l0aW9uIGlmIHdlIGhhdmUgbWFkZSBh
bnkgcmVwbGFjZW1lbnRzCi0gICAgICAgIHBhcmFncmFwaC5leHBhbmRSYW5nZVRvTmV4dEVuZCgp
OwotICAgICAgICBpZiAocmVzdG9yZVNlbGVjdGlvbkFmdGVyQ2hhbmdlICYmIHNlbGVjdGlvbk9m
ZnNldCA+PSAwICYmIHNlbGVjdGlvbk9mZnNldCA8PSBwYXJhZ3JhcGgucmFuZ2VMZW5ndGgoKSkg
ewotICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IHBhcmFncmFwaC5z
dWJyYW5nZSgwLCBzZWxlY3Rpb25PZmZzZXQpOworICAgICAgICBzcGVsbGluZ1BhcmFncmFwaC5l
eHBhbmRSYW5nZVRvTmV4dEVuZCgpOworICAgICAgICBpZiAocmVzdG9yZVNlbGVjdGlvbkFmdGVy
Q2hhbmdlICYmIHNlbGVjdGlvbk9mZnNldCA+PSAwICYmIHNlbGVjdGlvbk9mZnNldCA8PSBzcGVs
bGluZ1BhcmFncmFwaC5yYW5nZUxlbmd0aCgpKSB7CisgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+
IHNlbGVjdGlvblJhbmdlID0gc3BlbGxpbmdQYXJhZ3JhcGguc3VicmFuZ2UoMCwgc2VsZWN0aW9u
T2Zmc2V0KTsKICAgICAgICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5tb3ZlVG8oc2VsZWN0
aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwogICAgICAgICAgICAgaWYgKGFk
anVzdFNlbGVjdGlvbkZvclBhcmFncmFwaEJvdW5kYXJpZXMpCiAgICAgICAgICAgICAgICAgbV9m
cmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpBbHRlcmF0aW9u
TW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwpAQCAtMzU3Miw3
ICszNTc1LDcgQEAgc3RhdGljIE5vZGUqIGZpbmRGaXJzdE1hcmthYmxlKE5vZGUqIG5vZAogICAg
IHJldHVybiAwOwogfQogCi1ib29sIEVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNTcGVsbGluZ01h
cmtlckZvcihpbnQgZnJvbSwgaW50IGxlbmd0aCkgY29uc3QKK2Jvb2wgRWRpdG9yOjpzZWxlY3Rp
b25TdGFydEhhc01hcmtlckZvcihEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlLCBpbnQg
ZnJvbSwgaW50IGxlbmd0aCkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlID0gZmluZEZpcnN0TWFy
a2FibGUobV9mcmFtZS0+c2VsZWN0aW9uKCktPnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiAg
ICAgaWYgKCFub2RlKQpAQCAtMzU4Myw3ICszNTg2LDcgQEAgYm9vbCBFZGl0b3I6OnNlbGVjdGlv
blN0YXJ0SGFzU3BlbGxpbmdNYQogICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4gbWFya2VycyA9
IG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+bWFya2Vyc0Zvck5vZGUobm9kZSk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJzLnNpemUoKTsgKytpKSB7CiAgICAgICAg
IERvY3VtZW50TWFya2VyIG1hcmtlciA9IG1hcmtlcnNbaV07Ci0gICAgICAgIGlmIChtYXJrZXIu
c3RhcnRPZmZzZXQgPD0gc3RhcnRPZmZzZXQgJiYgZW5kT2Zmc2V0IDw9IG1hcmtlci5lbmRPZmZz
ZXQgJiYgbWFya2VyLnR5cGUgPT0gRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKQorICAgICAgICBp
ZiAobWFya2VyLnN0YXJ0T2Zmc2V0IDw9IHN0YXJ0T2Zmc2V0ICYmIGVuZE9mZnNldCA8PSBtYXJr
ZXIuZW5kT2Zmc2V0ICYmIG1hcmtlci50eXBlID09IHR5cGUpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gODIw
MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zODAsNyArMzgwLDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVhZFNlbGVjdGlvbkZyb21QYXN0
ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpOwogI2VuZGlmCiAKLSAgICBib29s
IHNlbGVjdGlvblN0YXJ0SGFzU3BlbGxpbmdNYXJrZXJGb3IoaW50IGZyb20sIGludCBsZW5ndGgp
IGNvbnN0OworICAgIGJvb2wgc2VsZWN0aW9uU3RhcnRIYXNNYXJrZXJGb3IoRG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGUsIGludCBmcm9tLCBpbnQgbGVuZ3RoKSBjb25zdDsKICAgICB2b2lkIHJl
bW92ZVNwZWxsQW5kQ29ycmVjdGlvbk1hcmtlcnNGcm9tV29yZHNUb0JlRWRpdGVkKGJvb2wgZG9O
b3RSZW1vdmVJZlNlbGVjdGlvbkF0V29yZEJvdW5kYXJ5KTsKIAogcHJpdmF0ZToKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyMDU4KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDMtMjYgIEFkZWxlIFBl
dGVyc29uICA8YWRlbGVAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEZpeCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzkxMTI2OTQ+IFJFR1JF
U1NJT04gKHI3OTQxMSk6ICJDaGVjayBncmFtbWFyIHdpdGggc3BlbGxpbmciIGNvbnRleHQgbWVu
dSBkb2Vzbid0IGNoZWNrIGFzIHlvdSB0eXBlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01NzE3MworCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5t
bToKKyAgICAgICAgKC1bV2ViRnJhbWUgaGFzU3BlbGxpbmdNYXJrZXI6bGVuZ3RoOl0pOiBDYWxs
IG5ldyBzZWxlY3Rpb25TdGFydEhhc01hcmtlckZvciBtZXRob2QgaW5zdGVhZCBvZiBzZWxlY3Rp
b25TdGFydEhhc1NwZWxsaW5nTWFya2VyRm9yLgorICAgICAgICAoLVtXZWJGcmFtZSBoYXNHcmFt
bWFyTWFya2VyOmxlbmd0aDpdKTogQ2FsbCBuZXcgc2VsZWN0aW9uU3RhcnRIYXNNYXJrZXJGb3Ig
bWV0aG9kLgorICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWVQcml2YXRlLmg6IEFkZCBoYXNHcmFt
bWFyTWFya2VyIHNvIGdyYW1tYXIgbWFya2luZyBjYW4gYmUgdGVzdGVkLgorCiAyMDExLTAzLTI2
ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEVyaWMgQ2FybHNvbi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQko
cmV2aXNpb24gODIwMjEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzEzLDcgKzEzMTMsMTUgQEAgLSAoQk9PTCloYXNTcGVsbGlu
Z01hcmtlcjooaW50KWZyb20gbGVuZwogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBfcHJpdmF0ZS0+
Y29yZUZyYW1lOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gTk87Ci0gICAg
cmV0dXJuIGNvcmVGcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvblN0YXJ0SGFzU3BlbGxpbmdNYXJr
ZXJGb3IoZnJvbSwgbGVuZ3RoKTsKKyAgICByZXR1cm4gY29yZUZyYW1lLT5lZGl0b3IoKS0+c2Vs
ZWN0aW9uU3RhcnRIYXNNYXJrZXJGb3IoRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nLCBmcm9tLCBs
ZW5ndGgpOworfQorCistIChCT09MKWhhc0dyYW1tYXJNYXJrZXI6KGludClmcm9tIGxlbmd0aDoo
aW50KWxlbmd0aAoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1l
OworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm4gTk87CisgICAgcmV0dXJuIGNv
cmVGcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yKERvY3VtZW50TWFy
a2VyOjpHcmFtbWFyLCBmcm9tLCBsZW5ndGgpOwogfQogCiAtIChpZClhY2Nlc3NpYmlsaXR5Um9v
dApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZVByaXZhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lUHJpdmF0ZS5oCShy
ZXZpc2lvbiA4MjAyMSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVQcml2
YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Myw2ICsxNDMsOCBAQCBAaW50ZXJmYWNlIFdlYkZy
YW1lIChXZWJQcml2YXRlKQogLy8gUmV0dXJucyB3aGV0aGVyIHRoZXJlIGlzIGEgc3BlbGxpbmcg
bWFya2VyIGluIHRoZSBzcGVjaWZpZWQgcmFuZ2Ugb2YgdGhlIGZvY3VzZWQgbm9kZS4KIC0gKEJP
T0wpaGFzU3BlbGxpbmdNYXJrZXI6KGludClsb2NhdGlvbiBsZW5ndGg6KGludClsZW5ndGg7CiAK
Ky0gKEJPT0wpaGFzR3JhbW1hck1hcmtlcjooaW50KWZyb20gbGVuZ3RoOihpbnQpbGVuZ3RoOwor
CiAvLyBUaGUgdG9wIG9mIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUuCiAtIChpZClhY2Nlc3NpYmls
aXR5Um9vdDsKIApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0No
YW5nZUxvZwkocmV2aXNpb24gODIwNTgpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0wMy0yNiAgQWRlbGUgUGV0ZXJzb24gIDxhZGVsZUBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGVzdGluZyBzdXBwb3J0IGZvciA8cmRhcjovL3Byb2JsZW0vOTExMjY5ND4gUkVHUkVTU0lP
TiAocjc5NDExKTogIkNoZWNrIGdyYW1tYXIgd2l0aCBzcGVsbGluZyIgY29udGV4dCBtZW51IGRv
ZXNuJ3QgY2hlY2sgYXMgeW91IHR5cGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU3MTczCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9MYXlvdXRU
ZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChoYXNHcmFtbWFyTWFya2VyQ2FsbGJhY2spOiBB
ZGRlZC4KKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMpOiBB
ZGRlZCBjYXNlIGZvciBoYXNHcmFtbWFyTWFya2VyLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L0xheW91dFRlc3RDb250cm9sbGVyLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0R1
bXBSZW5kZXJUcmVlLm1tOiAoY3JlYXRlV2ViVmlld0FuZE9mZnNjcmVlbldpbmRvdyk6IENhbGwg
c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMv
TGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW06IChMYXlvdXRUZXN0Q29udHJvbGxlcjo6aGFzR3Jh
bW1hck1hcmtlcik6IEFkZGVkLiBDYWxsIG5ldyBoYXNHcmFtbWFyTWFya2VyIG1ldGhvZC4KKwog
MjAxMS0wMy0yNiAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmVydCBpbmFkdmVydGFudGx5IGNvbW1pdHRlZCBjaGFuZ2VzLgpJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gODIwMjEp
CisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5NjMsNiArMTk2MywxOSBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBoYXNTcGVs
bGluZ01hcmtlckNhbGxiCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCBv
ayk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIGhhc0dyYW1tYXJNYXJrZXJDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgIT0gMikK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIAorICAg
IGludCBmcm9tID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgMCk7Cisg
ICAgaW50IGxlbmd0aCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMV0sIDAp
OworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAg
IGJvb2wgb2sgPSBjb250cm9sbGVyLT5oYXNHcmFtbWFyTWFya2VyKGZyb20sIGxlbmd0aCk7Cisg
ICAgCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0LCBvayk7Cit9CisKIHN0
YXRpYyBKU1ZhbHVlUmVmIG1hcmtlclRleHRGb3JMaXN0SXRlbUNhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKIHsKICAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmpl
Y3QpKTsKQEAgLTIxNjMsNiArMjE3Niw3IEBAIEpTU3RhdGljRnVuY3Rpb24qIExheW91dFRlc3RD
b250cm9sbGVyOjoKICAgICAgICAgeyAib3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlIiwgb3Jp
Z2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZ3Jh
bnREZXNrdG9wTm90aWZpY2F0aW9uUGVybWlzc2lvbiIsIGdyYW50RGVza3RvcE5vdGlmaWNhdGlv
blBlcm1pc3Npb25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LCAKICAgICAgICAgeyAiaGFzU3BlbGxpbmdNYXJr
ZXIiLCBoYXNTcGVsbGluZ01hcmtlckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImhhc0dy
YW1tYXJNYXJrZXIiLCBoYXNHcmFtbWFyTWFya2VyQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAg
eyAiaXNDb21tYW5kRW5hYmxlZCIsIGlzQ29tbWFuZEVuYWJsZWRDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAog
ICAgICAgICB7ICJpc1BhZ2VCb3hWaXNpYmxlIiwgaXNQYWdlQm94VmlzaWJsZUNhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCiAgICAgICAgIHsgImtlZXBXZWJIaXN0b3J5Iiwga2VlcFdlYkhpc3RvcnlDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJv
bGxlci5oCShyZXZpc2lvbiA4MjAyMSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRl
c3RDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5NSw2ICsyOTUsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBhYm9ydE1vZGFsKCk7CiAKICAgICBib29sIGhhc1NwZWxsaW5nTWFya2VyKGlu
dCBmcm9tLCBpbnQgbGVuZ3RoKTsKKyAgICBib29sIGhhc0dyYW1tYXJNYXJrZXIoaW50IGZyb20s
IGludCBsZW5ndGgpOwogCiAgICAgdm9pZCBkdW1wQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0KGlu
dCBkZXZpY2VEUEksIGludCBkZXZpY2VXaWR0aCwgaW50IGRldmljZUhlaWdodCwgaW50IGF2YWls
YWJsZVdpZHRoLCBpbnQgYXZhaWxhYmxlSGVpZ2h0KTsKIApJbmRleDogVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQkocmV2aXNpb24gODIwMjEpCisrKyBUb29scy9E
dW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTMw
Niw2ICszMDYsNyBAQCBXZWJWaWV3ICpjcmVhdGVXZWJWaWV3QW5kT2Zmc2NyZWVuV2luZG93CiAg
ICAgW1dlYlZpZXcgcmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsOkAiZmVlZHNlYXJjaCJdOwogICAg
IAogICAgIFt3ZWJWaWV3IHNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZDpZRVNdOwor
ICAgIFt3ZWJWaWV3IHNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQ6WUVTXTsKICAgICAKICAgICAv
LyBUbyBtYWtlIHRoaW5ncyBsaWtlIGNlcnRhaW4gTlNWaWV3cywgZHJhZ2dpbmcsIGFuZCBwbHVn
LWlucyB3b3JrLCBwdXQgdGhlIFdlYlZpZXcgYSB3aW5kb3csIGJ1dCBwdXQgaXQgb2ZmLXNjcmVl
biBzbyB5b3UgZG9uJ3Qgc2VlIGl0LgogICAgIC8vIFB1dCBpdCBhdCAtMTAwMDAsIC0xMDAwMCBp
biAiZmxpcHBlZCBjb29yZGluYXRlcyIsIHNpbmNlIFdlYkNvcmUgYW5kIHRoZSBET00gdXNlIGZs
aXBwZWQgY29vcmRpbmF0ZXMuCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0
VGVzdENvbnRyb2xsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCShyZXZpc2lvbiA4MjAyMSkKKysrIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMTA3Nyw2ICsxMDc3LDEyIEBAIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omhh
c1NwZWxsaW5nTWEKIHsKICAgICByZXR1cm4gW21haW5GcmFtZSBoYXNTcGVsbGluZ01hcmtlcjpm
cm9tIGxlbmd0aDpsZW5ndGhdOwogfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjpoYXNH
cmFtbWFyTWFya2VyKGludCBmcm9tLCBpbnQgbGVuZ3RoKQoreworICAgIHJldHVybiBbbWFpbkZy
YW1lIGhhc0dyYW1tYXJNYXJrZXI6ZnJvbSBsZW5ndGg6bGVuZ3RoXTsKK30KKwogdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydChpbnQgLypkZXZp
Y2VEUEkqLywgaW50IC8qZGV2aWNlV2lkdGgqLywgaW50IC8qZGV2aWNlSGVpZ2h0Ki8sIGludCAv
KmF2YWlsYWJsZVdpZHRoKi8sIGludCAvKmF2YWlsYWJsZUhlaWdodCovKQogewogCkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiA4MjA1OCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE3IEBACisyMDExLTAzLTI2ICBBZGVsZSBQZXRlcnNvbiAgPGFkZWxlQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUZXN0IGZvciA8cmRhcjovL3Byb2JsZW0vOTExMjY5ND4gUkVHUkVTU0lPTiAocjc5NDExKTog
IkNoZWNrIGdyYW1tYXIgd2l0aCBzcGVsbGluZyIgY29udGV4dCBtZW51IGRvZXNuJ3QgY2hlY2sg
YXMgeW91IHR5cGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU3MTczCisKKyAgICAgICAgKiBlZGl0aW5nL3NwZWxsaW5nL2dyYW1tYXItZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3NwZWxsaW5nL2dyYW1tYXIuaHRtbDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6CisgICAgICAgICogcGxhdGZvcm0v
bWFjLXdrMi9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1NraXBwZWQ6CisgICAgICAg
ICogcGxhdGZvcm0vd2luL1NraXBwZWQ6CisKIDIwMTEtMDMtMjYgIERhbiBCZXJuc3RlaW4gIDxt
aXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYWNpZWogU3RhY2hvd2lhay4K
SW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvZ3JhbW1hci1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9zcGVsbGluZy9ncmFtbWFyLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvc3BlbGxpbmcvZ3Jh
bW1hci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorWW91IHNob3Vs
ZCBzZWUgdGhlIHRleHQgJ0kgaGF2ZSBhIGlzc3VlJy4gJ2EnIHNob3VsZCBoYXZlIGEgZ3JhbW1h
ciBzdWdnZXN0aW9uIG1hcmtpbmcuCitQQVNTCisKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcv
c3BlbGxpbmcvZ3JhbW1hci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcv
c3BlbGxpbmcvZ3JhbW1hci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGlu
Zy9zcGVsbGluZy9ncmFtbWFyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjMgQEAKKzxo
dG1sPiAKKzxoZWFkPgorCis8c3R5bGU+CisuZWRpdGluZyB7IAorICAgIGJvcmRlcjogMnB4IHNv
bGlkIHJlZDsgCisgICAgcGFkZGluZzogMTJweDsgCisgICAgZm9udC1zaXplOiAyNHB4OyAKK30K
Kzwvc3R5bGU+Cis8c2NyaXB0IHNyYz0uLi9lZGl0aW5nLmpzIGxhbmd1YWdlPSJKYXZhU2NyaXB0
IiB0eXBlPSJ0ZXh0L0phdmFTY3JpcHQiID48L3NjcmlwdD4KKworPHNjcmlwdD4KK2Z1bmN0aW9u
IGxvZyhtc2cpIHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVy
SFRNTCArPSAobXNnICsgIlxuIik7Cit9CisKK2Z1bmN0aW9uIGVkaXRpbmdUZXN0KCkgeworICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb290
IikuZm9jdXMoKTsKKyAgICAKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnSScpOworICAgIHR5
cGVDaGFyYWN0ZXJDb21tYW5kKCcgJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ2gnKTsK
KyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnYScpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5k
KCd2Jyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ2UnKTsKKyAgICB0eXBlQ2hhcmFjdGVy
Q29tbWFuZCgnICcpOworICAgIHR5cGVDaGFyYWN0ZXJDb21tYW5kKCdhJyk7CisgICAgdHlwZUNo
YXJhY3RlckNvbW1hbmQoJyAnKTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgnaScpOworICAg
IHR5cGVDaGFyYWN0ZXJDb21tYW5kKCdzJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJ3Mn
KTsKKyAgICB0eXBlQ2hhcmFjdGVyQ29tbWFuZCgndScpOworICAgIHR5cGVDaGFyYWN0ZXJDb21t
YW5kKCdlJyk7CisgICAgdHlwZUNoYXJhY3RlckNvbW1hbmQoJy4nKTsKKyAgICAKKyAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGlmIChsYXlvdXRUZXN0Q29u
dHJvbGxlci5oYXNHcmFtbWFyTWFya2VyKDcsIDEpKQorICAgICAgICAgICAgbG9nKCJQQVNTIik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvZygiRkFJTCIpOworICAgICAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgicm9vdCIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgICAgfQor
fQorCis8L3NjcmlwdD4KKworPHRpdGxlPkVkaXRpbmcgVGVzdDwvdGl0bGU+IAorPC9oZWFkPiAK
Kzxib2R5PgorPGRpdj5Zb3Ugc2hvdWxkIHNlZSB0aGUgdGV4dCAnSSBoYXZlIGEgaXNzdWUnLiAn
YScgc2hvdWxkIGhhdmUgYSBncmFtbWFyIHN1Z2dlc3Rpb24gbWFya2luZy48L2Rpdj4KKzxkaXYg
Y29udGVudGVkaXRhYmxlIGlkPSJyb290IiBjbGFzcz0iZWRpdGluZyI+Cis8L2Rpdj4KKzxwcmUg
aWQ9ImNvbnNvbGUiPjwvcHJlPgorPHNjcmlwdD4KK2VkaXRpbmdUZXN0KCk7Cis8L3NjcmlwdD4K
KworPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBw
ZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQJKHJldmlz
aW9uIDgyMDIxKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNDcsMyArMTM0Nyw2IEBAIGh0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsv
bmV0d29yay1zaXoKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2
OTY2CiAjIHdpbmRvdy5jbGllbnRXaWR0aCBhbmQgd2luZG93LmNsaWVudEhlaWdodCBkbyBub3Qg
aW5jbHVkZSBzY3JvbGxiYXIgYWxsb2NhdGlvbgogZmFzdC9vdmVyZmxvdy9ob3Jpem9udGFsLXNj
cm9sbC1hZnRlci1iYWNrLmh0bWwKKworIyB0ZXh0SW5wdXRDb250cm9sbGVyLmhhc0dyYW1tYXJN
YXJrZXIoKSBpcyBub3QgaW1wbGVtZW50ZWQuCitlZGl0aW5nL3NwZWxsaW5nL2dyYW1tYXIuaHRt
bApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi9Ta2lwcGVkCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvU2tpcHBlZAkocmV2aXNpb24gODIwMjEp
CisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2syL1NraXBwZWQJKHdvcmtpbmcgY29weSkK
QEAgLTE4ODksNiArMTg4OSw5IEBAIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctYXR0cmlidXRl
LWNoYW4KIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctbGluZWJyZWFrLmh0bWwKIGVkaXRpbmcv
c3BlbGxpbmcvc3BlbGxpbmctaGFzc3BlbGxpbmdtYXJrZXIuaHRtbAogCisjIFdlYktpdFRlc3RS
dW5uZXIgbmVlZHMgbGF5b3V0VGVzdENvbnRyb2xsZXIuaGFzR3JhbW1hck1hcmtlcgorZWRpdGlu
Zy9zcGVsbGluZy9ncmFtbWFyLmh0bWwKKwogIyBXZWJLaXRUZXN0UnVubmVyIG5lZWRzIGxheW91
dFRlc3RDb250cm9sbGVyLm5vZGVzRnJvbVJlY3QKIGZhc3QvZG9tL25vZGVzRnJvbVJlY3QtYmFz
aWMuaHRtbAogZmFzdC9kb20vbm9kZXNGcm9tUmVjdC1pbm5lci1kb2N1bWVudHMuaHRtbApJbmRl
eDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCShyZXZpc2lvbiA4MjAyMSkKKysrIExheW91dFRlc3Rz
L3BsYXRmb3JtL3F0L1NraXBwZWQJKHdvcmtpbmcgY29weSkKQEAgLTEyNjgsNiArMTI2OCw5IEBA
IGVkaXRpbmcvaW5wdXQvc2V0dGluZy1pbnB1dC12YWx1ZS1jYW5jZWwKICMgdGV4dElucHV0Q29u
dHJvbGxlci5oYXNTcGVsbGluZ01hcmtlcnMoKSBpcyBub3QgaW1wbGVtZW50ZWQuCiBlZGl0aW5n
L3NwZWxsaW5nL3NwZWxsaW5nLWhhc3NwZWxsaW5nbWFya2VyLmh0bWwKIAorIyB0ZXh0SW5wdXRD
b250cm9sbGVyLmhhc0dyYW1tYXJNYXJrZXJzKCkgaXMgbm90IGltcGxlbWVudGVkLgorZWRpdGlu
Zy9zcGVsbGluZy9ncmFtbWFyLmh0bWwKKwogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDU0MzUKIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctYmFja3NwYWNlLWJl
dHdlZW4tbGluZXMuaHRtbAogCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBl
ZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAkocmV2aXNp
b24gODIwMjEpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAkod29ya2luZyBj
b3B5KQpAQCAtOTc1LDYgKzk3NSw5IEBAIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctYmFja3Nw
YWNlLWJldHcKIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctY29udGVudGVkaXRhYmxlLmh0bWwK
IGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctdGV4dGFyZWEuaHRtbAogCisjIHRleHRJbnB1dENv
bnRyb2xsZXIuaGFzR3JhbW1hck1hcmtlcnMoKSBpcyBub3QgaW1wbGVtZW50ZWQuCitlZGl0aW5n
L3NwZWxsaW5nL2dyYW1tYXIuaHRtbAorCiAjIEVkaXRvckNsaWVudDo6cmVxdWVzdENoZWNraW5n
T2ZTdHJpbmcoKSBpcyBub3QgaW1wbGVtZW50ZWQKIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxjaGVj
ay1wYXN0ZS5odG1sCiAK
</data>
<flag name="review"
          id="79450"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>